summaryrefslogtreecommitdiff
path: root/AT91SAM7S256/Source/RCXintro_8.txt
diff options
context:
space:
mode:
authorTat-Chee Wan (USM)2011-04-01 12:13:07 +0800
committerTat-Chee Wan (USM)2011-04-01 12:13:07 +0800
commit1783911a091554b2fec8acbf10f46a3e6fb02575 (patch)
treebf914c20c40e200b6d9f15319cf9b4fadb91299e /AT91SAM7S256/Source/RCXintro_8.txt
parent90a30d6380d7e1ffd7cacf3d18423ebe111a6859 (diff)
debug handler must be passed in non-banked register
Diffstat (limited to 'AT91SAM7S256/Source/RCXintro_8.txt')
0 files changed, 0 insertions, 0 deletions
ation/spidnetsnmp/CHANGES382
-rw-r--r--cleopatre/application/spidnetsnmp/COPYING231
-rw-r--r--cleopatre/application/spidnetsnmp/ChangeLog129330
-rw-r--r--cleopatre/application/spidnetsnmp/CodingStyle69
-rw-r--r--cleopatre/application/spidnetsnmp/EXAMPLE.conf.def408
-rw-r--r--cleopatre/application/spidnetsnmp/FAQ3672
-rw-r--r--cleopatre/application/spidnetsnmp/INSTALL278
-rw-r--r--cleopatre/application/spidnetsnmp/Makefile.in375
-rw-r--r--cleopatre/application/spidnetsnmp/Makefile.rules408
-rw-r--r--cleopatre/application/spidnetsnmp/Makefile.top117
-rw-r--r--cleopatre/application/spidnetsnmp/NEWS1440
-rw-r--r--cleopatre/application/spidnetsnmp/PORTING108
-rw-r--r--cleopatre/application/spidnetsnmp/README354
-rw-r--r--cleopatre/application/spidnetsnmp/README.Panasonic_AM3X.txt118
-rw-r--r--cleopatre/application/spidnetsnmp/README.agent-mibs437
-rw-r--r--cleopatre/application/spidnetsnmp/README.agentx47
-rw-r--r--cleopatre/application/spidnetsnmp/README.aix80
-rw-r--r--cleopatre/application/spidnetsnmp/README.hpux1122
-rw-r--r--cleopatre/application/spidnetsnmp/README.irix66
-rw-r--r--cleopatre/application/spidnetsnmp/README.krb5165
-rw-r--r--cleopatre/application/spidnetsnmp/README.osX83
-rw-r--r--cleopatre/application/spidnetsnmp/README.snmpv3103
-rw-r--r--cleopatre/application/spidnetsnmp/README.solaris1314
-rw-r--r--cleopatre/application/spidnetsnmp/README.thread343
-rw-r--r--cleopatre/application/spidnetsnmp/README.tru6457
-rw-r--r--cleopatre/application/spidnetsnmp/README.win321760
-rw-r--r--cleopatre/application/spidnetsnmp/TODO60
-rw-r--r--cleopatre/application/spidnetsnmp/acconfig.h1150
-rw-r--r--cleopatre/application/spidnetsnmp/acinclude.m4200
-rw-r--r--cleopatre/application/spidnetsnmp/aclocal.m46650
-rw-r--r--cleopatre/application/spidnetsnmp/agent/Makefile.depend5007
-rw-r--r--cleopatre/application/spidnetsnmp/agent/Makefile.in186
-rw-r--r--cleopatre/application/spidnetsnmp/agent/agent_handler.c1080
-rw-r--r--cleopatre/application/spidnetsnmp/agent/agent_index.c860
-rw-r--r--cleopatre/application/spidnetsnmp/agent/agent_read_config.c314
-rw-r--r--cleopatre/application/spidnetsnmp/agent/agent_registry.c1885
-rw-r--r--cleopatre/application/spidnetsnmp/agent/agent_trap.c1257
-rw-r--r--cleopatre/application/spidnetsnmp/agent/auto_nlist.c238
-rw-r--r--cleopatre/application/spidnetsnmp/agent/autonlist.h10
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/Makefile.depend2658
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/Makefile.in144
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/all_helpers.c65
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/baby_steps.c518
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/bulk_to_next.c145
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/cache_handler.c611
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/debug_handler.c160
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/instance.c1029
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/mode_end_call.c117
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/multiplexer.c117
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/null.c63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/old_api.c418
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/read_only.c87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/row_merge.c366
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/scalar.c196
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/scalar_group.c193
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/serialize.c99
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/stash_cache.c243
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/stash_to_next.c121
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/table.c1146
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/table_array.c890
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/table_container.c733
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/table_data.c1005
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/table_dataset.c1315
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/table_generic.c347
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/table_iterator.c1089
-rwxr-xr-xcleopatre/application/spidnetsnmp/agent/helpers/table_row.c257
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/table_tdata.c561
-rw-r--r--cleopatre/application/spidnetsnmp/agent/helpers/watcher.c485
-rw-r--r--cleopatre/application/spidnetsnmp/agent/kernel.c202
-rw-r--r--cleopatre/application/spidnetsnmp/agent/kernel.h13
-rw-r--r--cleopatre/application/spidnetsnmp/agent/m2m.h60
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mib_modules.c97
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/EoCCommon.h226
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Makefile.depend14542
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Makefile.in35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/README113
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/README.smux52
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon.h54
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/README30
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/agutil.c314
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/agutil.h26
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/agutil_api.h93
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/alarm.c720
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/alarm.h31
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/event.c828
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/event.h31
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/history.c729
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/history.h31
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/row_api.h187
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/rows.c880
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/rows.h26
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/statistics.c548
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/statistics.h31
-rwxr-xr-xcleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/test_alarm.sh82
-rwxr-xr-xcleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/test_hist.sh88
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/extend.c1433
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/extend.h69
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsCache.c419
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsCache.h22
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsDebug.c459
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsDebug.h23
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsLogging.c469
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsLogging.h16
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsModuleTable.c320
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsModuleTable.h27
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsTransactionTable.c248
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsTransactionTable.h21
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsVacmAccessTable.c339
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsVacmAccessTable.h27
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agent_mibs.h7
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agentx.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/agentx_config.c251
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/agentx_config.h18
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/client.c498
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/client.h42
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master.c627
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master.h16
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master_admin.c599
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master_admin.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/protocol.c2038
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/protocol.h114
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/subagent.c995
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/subagent.h21
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/default_modules.h56
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman.h9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event-mib.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event.h34
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEvent.c480
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEvent.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventConf.c581
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventConf.h20
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventNotificationTable.c228
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventNotificationTable.h20
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventSetTable.c271
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventSetTable.h23
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventTable.c326
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventTable.h22
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjects.c434
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjects.h59
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsConf.c179
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsConf.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsTable.c299
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsTable.h22
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteScalars.c135
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteScalars.h14
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTrigger.c1187
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTrigger.h199
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerBooleanTable.c276
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerBooleanTable.h24
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerConf.c1480
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerConf.h23
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerDeltaTable.c239
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerDeltaTable.h20
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerExistenceTable.c255
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerExistenceTable.h23
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerTable.c451
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerTable.h34
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerThresholdTable.c349
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerThresholdTable.h33
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expErrorTable.c114
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expErrorTable.h21
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpression.c365
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpression.h91
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionConf.c286
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionConf.h10
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionTable.c337
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionTable.h26
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObject.c346
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObject.h77
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectConf.c182
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectConf.h9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectTable.c436
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectTable.h27
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expScalars.c97
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expScalars.h13
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValue.c808
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValue.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValueTable.c327
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValueTable.h23
-rwxr-xr-xcleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/exp_enum.h60
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression-mib.h21
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression.h13
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expErrorTable.c138
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expErrorTable.h49
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expExpressionTable.c1162
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expExpressionTable.h139
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expObjectTable.c1447
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expObjectTable.h92
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expValueTable.c888
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expValueTable.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventNotificationTable.c97
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventNotificationTable.h23
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventTable.c340
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventTable.h30
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteObjectsTable.c946
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteObjectsTable.h70
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerBooleanTable.c802
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerBooleanTable.h45
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerDeltaTable.c416
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerDeltaTable.h37
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerExistenceTable.c737
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerExistenceTable.h39
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerTable.c3716
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerTable.h254
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerThresholdTable.c1611
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerThresholdTable.h46
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup-mib.h20
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupCtlTable.c1554
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupCtlTable.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupResultsTable.c309
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupResultsTable.h39
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/old-event-mib.h33
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping-mib.h20
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingCtlTable.c5804
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingCtlTable.h465
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingProbeHistoryTable.c338
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingProbeHistoryTable.h36
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingResultsTable.c414
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingResultsTable.h42
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule.h3
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedConf.c427
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedConf.h17
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedCore.c503
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedCore.h85
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedTable.c500
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedTable.h38
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute-mib.h21
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteCtlTable.c6258
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteCtlTable.h627
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteHopsTable.c409
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteHopsTable.h41
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteProbeHistoryTable.c408
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteProbeHistoryTable.h39
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteResultsTable.c407
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteResultsTable.h40
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps.c2039
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps.h122
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps_interface.c1012
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps_interface.h71
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples.h4
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/Makefile.dlmod34
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/data_set.c206
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/data_set.h15
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/delayed_instance.c256
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/delayed_instance.h16
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/example.c743
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/example.h67
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable.c566
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable.h40
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_access.c364
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_access.h48
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns.c197
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns.h47
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns_local.c117
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns_local.h36
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_columns.h16
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_enums.h37
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/notification.c175
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/notification.h17
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/scalar_int.c77
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/scalar_int.h14
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.c228
-rwxr-xr-xcleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.cmds8
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.conf89
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.h38
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/watched.c104
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/examples/watched.h14
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu.h32
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu.c246
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kerndata.c95
-rwxr-xr-xcleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kerndata.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kstat.c162
-rwxr-xr-xcleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kstat.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_linux.c301
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_linux.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_mach.c113
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_mach.h4
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_nlist.c109
-rwxr-xr-xcleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_nlist.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_null.c38
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_null.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pcp.c191
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pcp.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_perfstat.c107
-rwxr-xr-xcleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_perfstat.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pstat.c109
-rwxr-xr-xcleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pstat.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysctl.c205
-rwxr-xr-xcleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysctl.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysinfo.c132
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysinfo.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory.h32
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/hw_mem.c94
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/hw_mem.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_aix.c80
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_darwin.c215
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_dynix.c117
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_freebsd.c258
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_hpux.c132
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_irix.c87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_linux.c207
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_linux.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_netbsd.c139
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_null.c18
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_solaris.c172
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_win.c63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/header_complex.c595
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/header_complex.h72
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host.h85
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_device.c350
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_device.h11
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_disk.c1024
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_disk.h17
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_filesys.c971
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_filesys.h18
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_network.c288
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_network.h14
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_other.c66
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_other.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_partition.c312
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_partition.h14
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_print.c365
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_print.h14
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_proc.c229
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_proc.h14
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_storage.c780
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_storage.h43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swinst.c718
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swinst.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swrun.c1545
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swrun.h13
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_system.c681
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_system.h15
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/host_res.h88
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib.h7
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface.c783
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface.h56
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_ioctl.c494
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_ioctl.h52
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_linux.c856
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_solaris2.c358
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_sysctl.c565
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_sysctl.h31
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable.c2352
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable.h683
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_constants.h381
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_data_access.c480
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_data_access.h84
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_defs.h37
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_interface.c1980
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_interface.h101
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable.c2535
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable.h458
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_constants.h144
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_data_access.c104
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_data_access.h44
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c2160
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.h105
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib.h7
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route.h31
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_common.c279
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_ioctl.c197
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_ioctl.h8
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_linux.c427
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_linux.h0
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.c2676
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h537
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_constants.h216
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.c932
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.h86
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c2366
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h102
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c3358
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h501
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_constants.h172
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.c671
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.h82
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c2318
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.h100
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib.h9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/arp.h30
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/arp_common.c142
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/arp_linux.c194
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress.h30
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_common.c430
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c596
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.h44
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_linux.c338
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_linux.h22
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/scalars_common.h29
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/scalars_linux.c79
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/systemstats.h30
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/systemstats_common.c389
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/systemstats_linux.c376
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable.h8
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.c1818
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h413
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h161
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.c619
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h84
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c1994
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable.c673
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable.h316
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_constants.h139
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c353
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.h76
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_interface.c1038
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_interface.h98
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c2426
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.h457
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h213
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c708
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.h79
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.c2062
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.h100
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable.h8
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c3182
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h1205
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h159
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c446
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.h105
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c1363
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h173
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ip_scalars.c153
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ip_scalars.h7
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.c956
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.h275
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_constants.h81
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_data_access.c302
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_data_access.h71
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.c1308
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.h106
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_subagent.c202
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable.c1418
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable.h970
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_constants.h104
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_data_access.c390
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_data_access.h92
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.c1390
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.h178
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ipfwchains/README4
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/kernel_sunos5.c2031
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/kernel_sunos5.h214
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII.h32
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/at.c1263
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/at.h45
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/icmp.c803
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/icmp.h45
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ifTable.h10
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/interfaces.c2847
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/interfaces.h124
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ip.c957
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ip.h80
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipAddr.c1072
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipAddr.h15
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable.c1131
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable.h34
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_access.c258
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_access.h57
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_checkfns.c267
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_checkfns.h33
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_columns.h27
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_enums.h46
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipv6.c2148
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipv6.h144
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/kernel_linux.c221
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/kernel_linux.h93
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/mibII_common.h111
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/mta_sendmail.c1536
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/mta_sendmail.h9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/route_headers.h180
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/route_write.c759
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/route_write.h20
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/setSerialNo.c72
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/setSerialNo.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/snmp_mib.c253
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/snmp_mib.h83
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/sysORTable.c344
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/sysORTable.h57
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/system_mib.c765
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/system_mib.h31
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcp.c793
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcp.h36
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcpTable.c903
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcpTable.h39
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udp.c566
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udp.h24
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udpTable.c775
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udpTable.h21
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_conf.c1490
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_conf.h47
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_context.c167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_context.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_vars.c1918
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_vars.h94
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/var_route.c2101
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/var_route.h26
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibdefs.h14
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mibincl.h52
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/misc/ipfwacc.c347
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/misc/ipfwacc.h54
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps.c702
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps.h81
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps_interface.c1006
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps_interface.h70
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCbatCardTraps.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCbatCardTraps/eocCbatCardTraps.c844
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCbatCardTraps/eocCbatCardTraps.h58
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCnuTraps.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCnuTraps/eocCnuTraps.c964
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCnuTraps/eocCnuTraps.h82
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionCBATCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionPortIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormThreshold.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocMulticastStormProtectionEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocMulticastStormThreshold.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocUnknownUnicastStormProtectionEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocUnknownUnicastStormThreshold.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/table-eocBroadcastStormProtectionTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable-README-eocBroadcastStormProtectionTable.txt891
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable.c218
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable.h228
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_access.c335
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_access.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_get.c428
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_get.h64
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_set.c1450
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_set.h80
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_enums.h88
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_interface.c1747
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_oids.h58
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup/eocCBATDevInfoGroup.c610
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup/eocCBATDevInfoGroup.h22
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup/eocCBATDevStatusGroup.c901
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup/eocCBATDevStatusGroup.h23
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup/eocCBATNetworkAttrGroup.c1053
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup/eocCBATNetworkAttrGroup.h19
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup/eocCBATOtherAdminGroup.c392
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup/eocCBATOtherAdminGroup.h16
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunity.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunityIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunityPermission.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunityRowStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/table-eocCBATAdminSNMPCommunityTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable-README-eocCBATAdminSNMPCommunityTable.txt692
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable.c273
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable.h219
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_access.c764
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_access.h66
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_get.c318
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_get.h61
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_set.c1589
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_set.h65
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_enums.h77
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_interface.c1910
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_interface.h89
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_oids.h54
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATSNMPSettingGroup.c96
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATSNMPSettingGroup.h18
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects/eocCbatExtendGlobalObjects.c73
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects/eocCbatExtendGlobalObjects.h14
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/defaults/node-eocCBATCardMACCNUIsolationEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/defaults/node-eocCBATCardMACCNUIsolationIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/defaults/table-eocCBATCardMACCNUIsolationTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable-README-eocCBATCardMACCNUIsolationTable.txt545
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable.c218
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable.h193
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_access.c349
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_access.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_get.c161
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_get.h59
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_set.c607
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_set.h55
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_enums.h56
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_interface.c1465
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_oids.h39
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardConfigurationResult.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardConfigurationSaving.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardHardwareVersion.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardLogicalID.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardMACAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardManufactoryInfo.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardModelNumber.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardModelNumberProvisioned.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardOnlineStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardReset.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardSerialNumber.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardSoftwareVersion.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardTechProject.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardTemperature.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkBroadcastFrameSendIntervalT1.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkBroadcastFrameSendIntervalT2.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkDeviceMACAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkDevicePortNumber.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/table-eocCBATCardTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable-README-eocCBATCardTable.txt1221
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable.c222
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable.h286
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_access.c859
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_access.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_get.c1374
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_get.h76
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_set.c1982
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_set.h140
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_enums.h131
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_interface.c1905
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_oids.h80
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFDownstreamStartFreq.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFDownstreamStopFreq.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFLinkMaximum.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFOutputLevel.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFUpstreamStartFreq.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFUpstreamStopFreq.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/table-eocCBATCardRFTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable-README-eocCBATCardRFTable.txt806
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable.c218
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable.h218
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_access.c381
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_access.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_get.c415
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_get.h64
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_set.c1254
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_set.h80
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_enums.h40
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_interface.c1671
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_oids.h53
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU.h3
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNU.c141
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNU.h14
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlAllReset.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlAmountLimitation.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlCBATCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlCurrentAmount.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/table-eocCNUControlTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable-README-eocCNUControlTable.txt627
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable.c227
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable.h204
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_access.c346
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_access.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_get.c263
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_get.h61
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_set.c734
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_set.h65
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_enums.h55
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_interface.c1518
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_oids.h44
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAction.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAdminStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAuthorizationState.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUCBATCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationResult.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationSaving.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUDownstreamPIR.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUMACAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUModelNumber.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUOnlineStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyDownstreamRate.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyUpstreamRate.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPortAmount.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFAttenuation.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFDownstreamQuality.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFUpstreamQuality.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUReset.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUSoftwareVersion.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUUpstreamPIR.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/table-eocCNUTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-eocCNUTable.txt1164
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.c387
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.h291
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.c808
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.c1195
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.h76
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.c1508
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.h140
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_enums.h150
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.c1863
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_oids.h84
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPort.c106
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPort.h16
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortCBATCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortService.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/table-eocCNUPortTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable-README-eocCNUPortTable.txt649
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable.c218
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable.h210
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.c446
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.h71
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_get.c222
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_get.h60
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_set.c885
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_set.h60
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_enums.h56
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_interface.c1565
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_oids.h46
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUService.c89
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUService.h13
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBADownstreamCIR.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBADownstreamPIR.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBAUpstreamCIR.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBAUpstreamPIR.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceMaxLatency.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceName.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceQOSPrio.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceRowStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceType.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/table-eocCNUServiceTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable-README-eocCNUServiceTable.txt1051
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable.c244
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable.h262
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_access.c848
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_access.h79
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_get.c617
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_get.h67
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_set.c2972
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_set.h95
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_enums.h60
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_interface.c2314
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_interface.h89
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_oids.h71
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/node-eocCNUUnauthListCltNo.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/node-eocCNUUnauthListCnuNo.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/node-eocCNUUnauthListMac.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/table-eocCNUUnauthListTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable-README-eocCNUUnauthListTable.txt492
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable.c208
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable.h192
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_access.c356
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_access.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_get.c232
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_get.h60
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_set.c24
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_set.h27
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_enums.h40
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_interface.c870
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_interface.h84
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_oids.h35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList.h3
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteList.c498
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteList.h19
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlAllRFOutputLevel.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlAmountLimitation.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlAuthOption.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlExtMACLimitation.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlPhyRateGate.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlRegisteredAmount.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/table-eocCNUWhiteListControlTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable-README-eocCNUWhiteListControlTable.txt770
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable.c225
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable.h219
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_access.c424
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_access.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_get.c417
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_get.h64
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_set.c1126
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_set.h80
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_enums.h40
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_interface.c1608
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_oids.h52
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListAuthorization.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListAutoUpgradeEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListCBATCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListIPAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListMACAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListRFOutputLevel.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListRegisterOnlineStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListRowStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/table-eocCNUWhiteListTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable-README-eocCNUWhiteListTable.txt951
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable.c419
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable.h258
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_access.c1002
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_access.h76
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_get.c592
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_get.h67
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_set.c3173
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_set.h85
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_enums.h108
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_interface.c2236
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_interface.h92
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_oids.h85
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects/eocExtOcnBcmpGlobalObjects.c241
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects/eocExtOcnBcmpGlobalObjects.h16
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoCbatCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoCnuIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoList.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoSeq.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/table-eocExtCnuSubCarrierModuInfoTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable-README-eocExtCnuSubCarrierModuInfoTable.txt506
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable.c201
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable.h196
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_access.c338
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_access.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_get.c202
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_get.h59
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_set.c24
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_set.h27
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_enums.h40
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_interface.c911
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_interface.h84
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_oids.h37
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/node-eocExtCnuCbatCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/node-eocExtCnuCnuIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/node-eocExtCnuMacLimitation.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/table-eocExtCnuTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable-README-eocExtCnuTable.txt579
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable.c218
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable.h198
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_access.c373
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_access.h64
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_get.c166
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_get.h59
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_set.c613
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_set.h55
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_enums.h40
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_interface.c1479
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_oids.h41
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortActualDuplex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortActualSpeed.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortCbatCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortCnuIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortCnuPortIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortConfAutoNeg.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortConfDuplex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortConfSpeed.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/table-eocExtCnuEtherPortTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable-README-eocExtCnuEtherPortTable.txt775
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable.c218
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable.h224
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_access.c440
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_access.h69
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_get.c379
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_get.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_set.c1021
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_set.h75
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_enums.h122
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_interface.c1625
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_oids.h53
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingCBATCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingDevMACAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/table-eocIGMPSnoopingTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable-README-eocIGMPSnoopingTable.txt631
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable.c218
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable.h205
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_access.c398
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_access.h65
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_get.c252
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_get.h60
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_set.c807
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_set.h60
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_enums.h56
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_interface.c1541
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_oids.h44
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeGroup.c771
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeGroup.h19
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeCBATCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeDevType.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeFileName.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeMACAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeProceed.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeResult.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/table-eocSoftwareUpgradeTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable-README-eocSoftwareUpgradeTable.txt799
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable.c220
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable.h224
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_access.c728
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_access.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_get.c654
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_get.h70
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_set.c1808
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_set.h75
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_enums.h137
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_interface.c1655
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_oids.h52
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticAveragePreFEC.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticCBATCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticPortIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticReset.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticRxBcast.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticRxByte.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticRxCrc.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticRxDropped.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticRxMcast.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticRxPkt.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticRxShort.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticTxBcast.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticTxByte.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticTxDropped.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticTxMcast.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticTxPkt.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/node-eocRealTimeStatisticTxShort.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/defaults/table-eocRealTimeStatisticTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable-README-eocRealTimeStatisticTable.txt897
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable.c218
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable.h276
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable_data_access.c534
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable_data_access.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable_data_get.c879
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable_data_get.h73
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable_data_set.c530
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable_data_set.h125
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable_enums.h56
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable_interface.c1691
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocStatisticGroup/eocRealTimeStatisticTable/eocRealTimeStatisticTable_oids.h71
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapGroup.c615
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapGroup.h18
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/defaults/node-eocTrapCommunity.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/defaults/node-eocTrapIP.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/defaults/node-eocTrapIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/defaults/node-eocTrapRowStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/defaults/node-eocTrapStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/defaults/table-eocTrapTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable-README-eocTrapTable.txt752
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable.c218
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable.h221
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable_data_access.c732
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable_data_access.h68
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable_data_get.c387
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable_data_get.h62
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable_data_set.c1812
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable_data_set.h70
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable_enums.h76
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable_interface.c1965
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable_interface.h88
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocTrapGroup/eocTrapTable/eocTrapTable_oids.h56
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup.h3
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANGroup.c374
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANGroup.h19
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/defaults/node-eocVLANCBATCardIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/defaults/node-eocVLANCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/defaults/node-eocVLANPortIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/defaults/node-eocVLANPortMode.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/defaults/node-eocVLANPortPVID.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/defaults/node-eocVLANPortPrio.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/defaults/node-eocVLANPortTPID.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/defaults/node-eocVLANPortUntaggedVIDList.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/defaults/node-eocVLANPortVIDList.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/defaults/table-eocVLANPortTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable-README-eocVLANPortTable.txt903
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable.c224
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable.h231
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable_data_access.c485
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable_data_access.h69
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable_data_get.c502
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable_data_get.h64
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable_data_set.c1573
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable_data_set.h80
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable_enums.h66
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable_interface.c1766
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable_interface.h87
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANPortTable/eocVLANPortTable_oids.h58
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/defaults/node-eocMulticastVLANFlag.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/defaults/node-eocVLANIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/defaults/node-eocVLANName.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/defaults/node-eocVLANRowStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/defaults/table-eocVLANTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable-README-eocVLANTable.txt686
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable.c223
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable.h211
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable_data_access.c735
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable_data_access.h69
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable_data_get.c297
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable_data_get.h61
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable_data_set.c1374
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable_data_set.h65
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable_enums.h76
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable_interface.c1908
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable_interface.h89
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocVLANGroup/eocVLANTable/eocVLANTable_oids.h53
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-property-mib.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-property-mib/propertyIdent.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-property-mib/propertyIdent/eocPropertyObjects.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-property-mib/propertyIdent/eocPropertyObjects/eocCbatPropertyObjects.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-property-mib/propertyIdent/eocPropertyObjects/eocCbatPropertyObjects/eocCbatPropertyGlobalObjects.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-property-mib/propertyIdent/eocPropertyObjects/eocCbatPropertyObjects/eocCbatPropertyGlobalObjects/eocCbatPropertyGlobalObjects.c881
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-property-mib/propertyIdent/eocPropertyObjects/eocCbatPropertyObjects/eocCbatPropertyGlobalObjects/eocCbatPropertyGlobalObjects.h22
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-property-mib/propertyIdent/eocPropertyObjects/eocCnuPropertyObjects.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-property-mib/propertyIdent/eocPropertyObjects/eocCnuPropertyObjects/eocCnuPropertyGlobalObjects.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-property-mib/propertyIdent/eocPropertyObjects/eocCnuPropertyObjects/eocCnuPropertyGlobalObjects/eocCnuPropertyGlobalObjects.c403
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-property-mib/propertyIdent/eocPropertyObjects/eocCnuPropertyObjects/eocCnuPropertyGlobalObjects/eocCnuPropertyGlobalObjects.h16
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib.h4
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-alarm-mib.h3
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-alarm-mib/eocSCCNAlarmsAndTraps.c631
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-alarm-mib/eocSCCNAlarmsAndTraps.h40
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-alarm-mib/eocSCCNAlarmsAndTraps_interface.c1132
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-alarm-mib/eocSCCNAlarmsAndTraps_interface.h74
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-alarm-mib/eocSCCNTraps.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-alarm-mib/eocSCCNTraps/eocSCCNTraps.c450
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-alarm-mib/eocSCCNTraps/eocSCCNTraps.h46
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib.h3
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/defaults/node-eocSCCNAgingTime.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/defaults/node-eocSCCNCnuCPEIPAddressList.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/defaults/node-eocSCCNCnuCPEMacAddressList.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/defaults/node-eocSCCNCnuIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/defaults/node-eocSCCNCnuPortLinkStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/defaults/node-eocSCCNFlowControlEn.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/defaults/node-eocSCCNLoopBackEn.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/defaults/node-eocSCCNLoopBackPortIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/defaults/node-eocSCCNPortMirrorDestPortIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/defaults/node-eocSCCNPortMirrorEn.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/defaults/node-eocSCCNPortMirrorSourcePortIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/defaults/node-eocSCCNPortMirrorType.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/defaults/table-eocSCCNCnuTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable-README-eocSCCNCnuTable.txt1056
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable.c230
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable.h269
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable_data_access.c497
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable_data_access.h72
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable_data_get.c815
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable_data_get.h115
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable_data_set.c2026
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable_data_set.h231
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable_enums.h105
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable_interface.c2025
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable_interface.h98
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNCnuTable/eocSCCNCnuTable_oids.h67
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/defaults/node-eocSCCNConfigBackupFileName.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/defaults/node-eocSCCNConfigBackupIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/defaults/node-eocSCCNConfigBackupLogin.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/defaults/node-eocSCCNConfigBackupPassword.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/defaults/node-eocSCCNConfigBackupProtocol.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/defaults/node-eocSCCNConfigBackupResult.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/defaults/node-eocSCCNConfigBackupRowStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/defaults/node-eocSCCNConfigBackupServerIP.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/defaults/node-eocSCCNConfigBackupServerport.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/defaults/node-eocSCCNConfigBackupType.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/defaults/table-eocSCCNConfigBackupTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable-README-eocSCCNConfigBackupTable.txt1028
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable.c231
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable.h266
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable_data_access.c845
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable_data_access.h94
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable_data_get.c789
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable_data_get.h115
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable_data_set.c2665
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable_data_set.h216
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable_enums.h94
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable_interface.c2571
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable_interface.h102
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNConfigBackupTable/eocSCCNConfigBackupTable_oids.h72
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNGroup.c468
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-sccn-mib/sccn-eoc-mib/eocSCCNGroup.h17
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/notification-log-mib.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/notification-log-mib/notification_log.c758
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/notification-log-mib/notification_log.h20
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/notification.h4
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/notification/snmpNotifyFilterProfileTable.c828
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/notification/snmpNotifyFilterProfileTable.h67
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/notification/snmpNotifyTable.c1141
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/notification/snmpNotifyTable.h73
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib.h8
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTAdminGroup.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTAdminGroup/modEoCCLTAdminGroup.c3082
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTAdminGroup/modEoCCLTAdminGroup.h44
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup.h4
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable.h10
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/defaults/node-modEoCCLTMACBroadcastIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/defaults/node-modEoCCLTMACBroadcastRestriction.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/defaults/node-modEoCCLTMACBroadcastRestrictionEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/defaults/node-modEoCCLTMACUnknowRestriction.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/defaults/node-modEoCCLTMACUnknowRestrictionEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/defaults/table-modEoCCLTMACBroadcastTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable-README-modEoCCLTMACBroadcastTable.txt726
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable.c232
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable.h230
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable_data_access.c460
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable_data_access.h79
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable_data_get.c449
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable_data_get.h101
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable_data_set.c1216
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable_data_set.h123
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable_enums.h85
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable_interface.c1810
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable_interface.h102
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACBroadcastTable/modEoCCLTMACBroadcastTable_oids.h48
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable.h9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/defaults/node-modEoCCLTMACCNUIsolationEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/defaults/node-modEoCCLTMACCNUIsolationIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/defaults/table-modEoCCLTMACCNUIsolationTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable-README-modEoCCLTMACCNUIsolationTable.txt545
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable.c234
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable.h216
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable_data_access.c361
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable_data_access.h82
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable_data_get.c230
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable_data_get.h77
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable_data_set.c592
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable_data_set.h78
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable_enums.h62
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable_interface.c1629
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable_interface.h104
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACCNUIsolationTable/modEoCCLTMACCNUIsolationTable_oids.h39
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable.h9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/defaults/node-modEoCCLTMACAdminVlanID.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/defaults/node-modEoCCLTMACVlanEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/defaults/node-modEoCCLTMACVlanIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/defaults/table-modEoCCLTMACVlanTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable-README-modEoCCLTMACVlanTable.txt606
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable.c231
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable.h219
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable_data_access.c385
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable_data_access.h77
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable_data_get.c278
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable_data_get.h85
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable_data_set.c794
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable_data_set.h92
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable_enums.h62
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable_interface.c1656
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable_interface.h101
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCCLTMACVlanTable/modEoCCLTMACVlanTable_oids.h42
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable.h9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/defaults/node-modEoCOnlineCLTConfigurationResult.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/defaults/node-modEoCOnlineCLTConfigurationSaving.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/defaults/node-modEoCOnlineCLTIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/defaults/node-modEoCOnlineCLTMACAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/defaults/node-modEoCOnlineCLTModelNumber.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/defaults/node-modEoCOnlineCLTReset.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/defaults/node-modEoCOnlineCLTSoftwareVersion.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/defaults/node-modEoCOnlineCLTUpLinkBroadcastFrameSendIntervalAfterAck.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/defaults/node-modEoCOnlineCLTUpLinkBroadcastFrameSendIntervalBeforeAck.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/defaults/node-modEoCOnlineCLTUpLinkDeviceMACAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/defaults/node-modEoCOnlineCLTUpLinkDevicePortNumber.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/defaults/table-modEoCOnlineCLTTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable-README-modEoCOnlineCLTTable.txt867
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable.c230
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable.h264
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable_data_access.c629
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable_data_access.h77
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable_data_get.c1005
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable_data_get.h184
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable_data_set.c1159
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable_data_set.h229
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable_enums.h106
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable_interface.c1872
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable_interface.h101
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTMACGroup/modEoCOnlineCLTTable/modEoCOnlineCLTTable_oids.h60
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable.h9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/defaults/node-modEoCCLTRFCLTOutputLevel.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/defaults/node-modEoCCLTRFDownstreamStartFreq.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/defaults/node-modEoCCLTRFDownstreamStopFreq.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/defaults/node-modEoCCLTRFIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/defaults/node-modEoCCLTRFLinkMaximum.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/defaults/node-modEoCCLTRFUpstreamStartFreq.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/defaults/node-modEoCCLTRFUpstreamStopFreq.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/defaults/table-modEoCCLTRFTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable-README-modEoCCLTRFTable.txt810
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable.c230
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable.h236
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable_data_access.c395
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable_data_access.h73
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable_data_get.c448
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable_data_get.h94
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable_data_set.c1258
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable_data_set.h156
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable_enums.h39
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable_interface.c1831
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable_interface.h99
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCLTRFGroup/modEoCCLTRFTable/modEoCCLTRFTable_oids.h53
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup.h9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPort.c176
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPort.h18
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable.h10
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/defaults/node-modEoCCNUPortCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/defaults/node-modEoCCNUPortEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/defaults/node-modEoCCNUPortIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/defaults/node-modEoCCNUPortMasterIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/defaults/node-modEoCCNUPortService.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/defaults/node-modEoCCNUPortVLANMarkID.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/defaults/node-modEoCCNUPortVLANTagEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/defaults/table-modEoCCNUPortTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable-README-modEoCCNUPortTable.txt773
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable.c230
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable.h239
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable_data_access.c463
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable_data_access.h97
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable_data_get.c456
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable_data_get.h115
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable_data_set.c1377
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable_data_set.h120
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable_enums.h85
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable_interface.c1833
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable_interface.h101
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUPortTable/modEoCCNUPortTable_oids.h52
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUService.c266
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUService.h19
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable.h9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/defaults/node-modEoCCNUServiceDBADownstreamCIR.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/defaults/node-modEoCCNUServiceDBADownstreamPIR.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/defaults/node-modEoCCNUServiceDBAUpstreamCIR.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/defaults/node-modEoCCNUServiceDBAUpstreamPIR.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/defaults/node-modEoCCNUServiceIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/defaults/node-modEoCCNUServiceMatchingValue.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/defaults/node-modEoCCNUServiceMaxLatency.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/defaults/node-modEoCCNUServiceName.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/defaults/node-modEoCCNUServiceQOSPrio.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/defaults/node-modEoCCNUServiceRowStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/defaults/table-modEoCCNUServiceTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable-README-modEoCCNUServiceTable.txt1044
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable.c254
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable.h293
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable_data_access.c774
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable_data_access.h97
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable_data_get.c645
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable_data_get.h108
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable_data_set.c2776
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable_data_set.h207
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable_enums.h59
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable_interface.c2508
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable_interface.h103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUServiceTable/modEoCCNUServiceTable_oids.h71
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteList.c481
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteList.h19
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable.h10
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/defaults/node-modEoCCNUWhiteListAuthorization.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/defaults/node-modEoCCNUWhiteListAutoUpgradeEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/defaults/node-modEoCCNUWhiteListEndTime.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/defaults/node-modEoCCNUWhiteListIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/defaults/node-modEoCCNUWhiteListMACAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/defaults/node-modEoCCNUWhiteListRFOutputLevel.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/defaults/node-modEoCCNUWhiteListRegisterOnlineState.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/defaults/node-modEoCCNUWhiteListRowStatus.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/defaults/node-modEoCCNUWhiteListStartTime.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/defaults/table-modEoCCNUWhiteListTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable-README-modEoCCNUWhiteListTable.txt950
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable.c430
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable.h278
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable_data_access.c792
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable_data_access.h93
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable_data_get.c641
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable_data_get.h106
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable_data_set.c2624
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable_data_set.h190
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable_enums.h107
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable_interface.c2443
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable_interface.h104
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCCNUWhiteListTable/modEoCCNUWhiteListTable_oids.h71
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNU.c143
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNU.h17
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable.h9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNUAuthorizationState.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNUMACAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNUMasterIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNUModelNumber.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNUPhyDownstreamRate.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNUPhyUpstreamRate.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNUPortAmount.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNURFDownstreamAttenuation.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNURFDownstreamQuality.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNURFUpstreamAttenuation.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNURFUpstreamQuality.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNUReset.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modEoCOnlineCNUSoftwareVersion.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modOnlineCNUConfigurationResult.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/node-modOnlineCNUConfigurationSaving.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/defaults/table-modEoCOnlineCNUTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable-README-modEoCOnlineCNUTable.txt907
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable.c416
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable.h287
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable_data_access.c764
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable_data_access.h77
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable_data_get.c1240
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable_data_get.h216
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable_data_set.c748
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable_data_set.h288
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable_enums.h129
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable_interface.c1905
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable_interface.h101
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCCNUGroup/modEoCOnlineCNUTable/modEoCOnlineCNUTable_oids.h72
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/defaults/node-modEoCIGMPSnoopingCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/defaults/node-modEoCIGMPSnoopingDevMACAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/defaults/node-modEoCIGMPSnoopingEN.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/defaults/node-modEoCIGMPSnoopingMasterIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/defaults/table-modEoCIGMPSnoopingTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable-README-modEoCIGMPSnoopingTable.txt632
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable.c230
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable.h229
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable_data_access.c451
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable_data_access.h93
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable_data_get.c337
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable_data_get.h97
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable_data_set.c777
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable_data_set.h95
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable_enums.h62
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable_interface.c1717
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable_interface.h101
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCIGMPSnoopingGroup/modEoCIGMPSnoopingTable/modEoCIGMPSnoopingTable_oids.h44
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeGroup.c720
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeGroup.h20
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable.h10
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/defaults/node-modEoCSoftwareUpgradeCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/defaults/node-modEoCSoftwareUpgradeDevType.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/defaults/node-modEoCSoftwareUpgradeFileName.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/defaults/node-modEoCSoftwareUpgradeMACAddress.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/defaults/node-modEoCSoftwareUpgradeMasterIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/defaults/node-modEoCSoftwareUpgradeProceed.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/defaults/node-modEoCSoftwareUpgradeResult.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/defaults/table-modEoCSoftwareUpgradeTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable-README-modEoCSoftwareUpgradeTable.txt778
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable.c232
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable.h244
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable_data_access.c615
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable_data_access.h79
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable_data_get.c686
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable_data_get.h127
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable_data_set.c1656
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable_data_set.h142
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable_enums.h118
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable_interface.c1886
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable_interface.h102
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCSoftwareUpgradeGroup/modEoCSoftwareUpgradeTable/modEoCSoftwareUpgradeTable_oids.h52
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable.h9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticAveragePre-FEC.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticMasterIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticReset.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticRxBcast.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticRxByte.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticRxCrc.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticRxDropped.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticRxMcast.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticRxPkt.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticRxShort.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticTxBcast.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticTxByte.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticTxDropped.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticTxMcast.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticTxPkt.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/node-modEoCCNURealTimeStatisticTxShort.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/defaults/table-modEoCCNURealTimeStatisticTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable-README-modEoCCNURealTimeStatisticTable.txt877
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable.c234
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable.h292
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable_data_access.c617
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable_data_access.h96
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable_data_get.c995
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable_data_get.h195
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable_data_set.c551
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable_data_set.h288
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable_enums.h62
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable_interface.c1942
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable_interface.h106
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCStatisticGroup/modEoCCNURealTimeStatisticTable/modEoCCNURealTimeStatisticTable_oids.h69
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCTrapGroup.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCTrapGroup/modEoCTrapGroup.c1069
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-eoc-mib/modEoCTrapGroup/modEoCTrapGroup.h22
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable-README-alarmLogTable.txt464
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable.c364
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable.h193
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable_data_access.c372
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable_data_access.h72
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable_data_get.c216
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable_data_get.h69
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable_data_set.c28
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable_data_set.h28
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable_enums.h39
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable_interface.c897
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable_interface.h94
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/alarmLogTable_oids.h36
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/defaults/node-alarmLogIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/defaults/node-alarmLogInformation.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/alarmLogTable/defaults/table-alarmLogTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable-README-analogPropertyTable.txt870
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable.c230
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable.h247
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable_data_access.c481
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable_data_access.h76
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable_data_get.c552
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable_data_get.h92
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable_data_set.c1552
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable_data_set.h145
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable_enums.h58
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable_interface.c1879
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable_interface.h101
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/analogPropertyTable_oids.h56
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/defaults/node-alarmEnable.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/defaults/node-analogAlarmDeadband.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/defaults/node-analogAlarmHI.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/defaults/node-analogAlarmHIHI.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/defaults/node-analogAlarmLO.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/defaults/node-analogAlarmLOLO.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/defaults/node-analogAlarmState.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/defaults/node-analogParameterOID.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/analogPropertyTable/defaults/table-analogPropertyTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable-README-currentAlarmTable.txt485
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable.c214
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable.h208
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable_data_access.c385
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable_data_access.h74
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable_data_get.c243
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable_data_get.h76
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable_data_set.c28
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable_data_set.h28
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable_enums.h59
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable_interface.c937
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable_interface.h97
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/currentAlarmTable_oids.h35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/defaults/node-currentAlarmOID.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/defaults/node-currentAlarmState.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/defaults/node-currentAlarmValue.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/currentAlarmTable/defaults/table-currentAlarmTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/defaults/node-discreteAlarmEnable.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/defaults/node-discreteAlarmParameterOID.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/defaults/node-discreteAlarmState.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/defaults/node-discreteAlarmTriggerValue.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/defaults/table-discretePropertyTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable-README-discretePropertyTable.txt591
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable.c231
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable.h228
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable_data_access.c451
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable_data_access.h80
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable_data_get.c260
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable_data_get.h80
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable_data_set.c579
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable_data_set.h92
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable_enums.h73
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable_interface.c1680
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable_interface.h101
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sarft-property-alarm-mib/discretePropertyTable/discretePropertyTable_oids.h43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib.h3
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpAssocLocalAddrTable.c286
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpAssocLocalAddrTable.h60
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpAssocRemAddrTable.c333
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpAssocRemAddrTable.h71
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpAssocTable.c517
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpAssocTable.h99
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpLookupLocalPortTable.c273
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpLookupLocalPortTable.h59
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpLookupRemHostNameTable.c278
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpLookupRemHostNameTable.h64
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpLookupRemIPAddrTable.c277
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpLookupRemIPAddrTable.h63
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpLookupRemPortTable.c267
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpLookupRemPortTable.h57
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpLookupRemPrimIPAddrTable.c283
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpLookupRemPrimIPAddrTable.h65
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpScalars.c314
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpScalars.h23
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpScalars_common.c141
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpScalars_common.h148
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpScalars_linux.c185
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpTables.h24
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpTables_common.c441
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpTables_common.h112
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/sctp-mib/sctpTables_linux.c442
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/smux.h4
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/smux/smux.c2077
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/smux/smux.h82
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/smux/snmp_bgp.c187
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/smux/snmp_bgp.h38
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/smux/snmp_ospf.c282
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/smux/snmp_ospf.h123
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/smux/snmp_rip2.c184
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/smux/snmp_rip2.h37
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/smux_gated.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-notification-mib.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable.h1
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.c1927
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h933
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_constants.h131
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.c587
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.h133
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.c2421
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.h210
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib.h8
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHParameters.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHParameters/usmDHParameters.c136
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHParameters/usmDHParameters.h17
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable.c225
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable.h226
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_access.c330
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_access.h74
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_get.c613
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_get.h99
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.c1279
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.h130
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_doxygen.conf51
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_enums.h39
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_interface.c1772
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_interface.h102
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_oids.h46
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmpv3/snmpEngine.c226
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmpv3/snmpEngine.h33
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmpv3/snmpMPDStats.c75
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmpv3/snmpMPDStats.h29
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmpv3/usmConf.c9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmpv3/usmConf.h8
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmpv3/usmStats.c77
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmpv3/usmStats.h34
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmpv3/usmUser.c1589
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmpv3/usmUser.h67
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/snmpv3mibs.h14
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib.h3
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCMasterGroup.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCMasterGroup/spc300EoCMasterAdminGroup/spc300EoCMasterAdminGroup.c3612
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCMasterGroup/spc300EoCMasterAdminGroup/spc300EoCMasterAdminGroup.h42
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCMasterGroup/spc300EoCMasterPLCGroup/spc300EoCMasterPLCGroup.c248
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCMasterGroup/spc300EoCMasterPLCGroup/spc300EoCMasterPLCGroup.h17
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup.h10
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup.h2
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/defaults/node-modEoCOnlineCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/defaults/node-modEoCOnlineCNUMasterIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/defaults/node-spc300EoCOnlineSlaveSNRGroupData.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/defaults/node-spc300EoCOnlineSlaveSNRGroupIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/defaults/table-spc300EoCOnlineSlaveSNRTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable-README-spc300EoCOnlineSlaveSNRTable.txt479
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable.c217
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable.h207
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable_data_access.c429
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable_data_access.h81
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable_data_get.c237
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable_data_get.h74
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable_data_set.c28
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable_data_set.h28
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable_enums.h39
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable_interface.c991
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable_interface.h101
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveSNRTable/spc300EoCOnlineSlaveSNRTable_oids.h33
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/defaults/node-modEoCOnlineCNUIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/defaults/node-modEoCOnlineCNUMasterIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/defaults/node-spc300EoCOnlineSlaveTonemapRx.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/defaults/node-spc300EoCOnlineSlaveTonemapTx.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/defaults/table-spc300EoCOnlineSlaveTonemapTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable-README-spc300EoCOnlineSlaveTonemapTable.txt473
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable.c217
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable.h212
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable_data_access.c466
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable_data_access.h83
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable_data_get.c324
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable_data_get.h77
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable_data_set.c28
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable_data_set.h28
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable_enums.h39
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable_interface.c979
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable_interface.h103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCOnlineSlaveGroup/spc300EoCOnlineSlaveTonemapTable/spc300EoCOnlineSlaveTonemapTable_oids.h33
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable.h10
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/defaults/node-modEoCCNUServiceIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/defaults/node-spc300EoCSlaveServiceACSEn.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/defaults/node-spc300EoCSlaveServiceMaxJitter.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/defaults/table-spc300EoCSlaveServiceTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable-README-spc300EoCSlaveServiceTable.txt587
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable.c221
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable.h173
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable_data_access.c113
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable_data_access.h52
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable_data_get.c233
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable_data_get.h74
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable_data_set.c854
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable_data_set.h93
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable_enums.h54
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable_interface.c1513
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable_interface.h104
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable_oids.h40
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListGroup.c191
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListGroup.h17
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable.h11
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/defaults/node-modEoCCNUWhiteListIndex.m2d35
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/defaults/node-spc300EoCSlaveWhiteListDevicePassword.m2d43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/defaults/table-spc300EoCSlaveWhiteListTable.m2d103
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable-README-FIRST.txt167
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable-README-spc300EoCSlaveWhiteListTable.txt697
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable.c426
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable.h178
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable_data_access.c128
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable_data_access.h50
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable_data_get.c225
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable_data_get.h69
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable_data_set.c706
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable_data_set.h75
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable_enums.h37
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable_interface.c1462
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable_interface.h105
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable_oids.h45
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/struct.h43
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/target.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/target/snmpTargetAddrEntry.c1687
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/target/snmpTargetAddrEntry.h95
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/target/snmpTargetParamsEntry.c1401
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/target/snmpTargetParamsEntry.h77
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/target/target.c220
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/target/target.h24
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/target/target_counters.c80
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/target/target_counters.h7
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib.h7
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/data_access/Makefile26
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/data_access/tcpConn.h28
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/data_access/tcpConn_common.c267
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/data_access/tcpConn_linux.c395
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/data_access/tcpConn_private.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/data_access/tcpConn_solaris2.c182
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpConnTable.h8
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpConnectionTable.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.c1135
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h620
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_constants.h138
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.c321
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.h105
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.c1790
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.h176
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpListenerTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.c443
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h271
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_constants.h78
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.c320
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.h73
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.c981
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.h98
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/testhandler.c427
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/testhandler.h9
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tunnel.h6
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tunnel/tunnel.c998
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/tunnel/tunnel.h46
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/disk.c882
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/disk.h25
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/diskio.c1169
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/diskio.h38
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/dlmod.c592
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/dlmod.h60
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/errormib.c235
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/errormib.h17
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/extensible.c694
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/extensible.h32
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/file.c185
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/file.h36
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/hpux.c119
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/hpux.h21
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/lmSensors.c1062
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/lmSensors.h16
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/loadave.c379
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/loadave.h26
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/logmatch.c554
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/logmatch.h57
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory.c231
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory.h37
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_aix4.c249
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_aix4.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_darwin7.c394
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_darwin7.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_dynix.c227
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_dynix.h27
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_freebsd2.c371
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_freebsd2.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_hpux.c291
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_hpux.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_netbsd1.c255
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_netbsd1.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_solaris2.c278
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/memory_solaris2.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/pass.c540
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/pass.h23
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/pass_persist.c800
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/pass_persist.h22
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/proc.c854
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/proc.h28
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/proxy.c667
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/proxy.h22
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/versioninfo.c224
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/versioninfo.h32
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat.c257
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat.h40
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_aix4.c654
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_aix4.h47
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_bsdi4.c281
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_bsdi4.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_darwin7.c317
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_darwin7.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_dynix.c790
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_dynix.h51
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_freebsd2.c322
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_freebsd2.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_hpux.c714
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_hpux.h55
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_linux.c561
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_linux.h40
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_netbsd1.c315
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_netbsd1.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_solaris2.c774
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd-snmp/vmstat_solaris2.h60
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/ucd_snmp.h17
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib/data_access/udp_endpoint.h27
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib/data_access/udp_endpoint_common.c175
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c297
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib/data_access/udp_endpoint_private.h7
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib/data_access/udp_endpoint_solaris2.c198
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib/udpEndpointTable.h5
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.c416
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h306
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_constants.h85
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.c356
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.h73
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_interface.c1073
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_interface.h97
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/util_funcs.c1190
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/util_funcs.h55
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/utilities.h3
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/utilities/execute.c456
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/utilities/execute.h12
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/utilities/iquery.c201
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/utilities/iquery.h19
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/utilities/override.c280
-rw-r--r--cleopatre/application/spidnetsnmp/agent/mibgroup/utilities/override.h7
-rwxr-xr-xcleopatre/application/spidnetsnmp/agent/mibgroup/winExtDLL.c1605
-rwxr-xr-xcleopatre/application/spidnetsnmp/agent/mibgroup/winExtDLL.h34
-rw-r--r--cleopatre/application/spidnetsnmp/agent/object_monitor.c757
-rw-r--r--cleopatre/application/spidnetsnmp/agent/snmp_agent.c3689
-rw-r--r--cleopatre/application/spidnetsnmp/agent/snmp_perl.c148
-rw-r--r--cleopatre/application/spidnetsnmp/agent/snmp_perl.pl8
-rw-r--r--cleopatre/application/spidnetsnmp/agent/snmp_vars.c448
-rw-r--r--cleopatre/application/spidnetsnmp/agent/snmpd.c1398
-rw-r--r--cleopatre/application/spidnetsnmp/agent/snmpd.h19
-rw-r--r--cleopatre/application/spidnetsnmp/apps/Makefile.depend1760
-rw-r--r--cleopatre/application/spidnetsnmp/apps/Makefile.in165
-rw-r--r--cleopatre/application/spidnetsnmp/apps/encode_keychange.c799
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmp_perl_trapd.pl15
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpbulkget.c259
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpbulkwalk.c391
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpdelta.c753
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpdf.c394
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpget.c259
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpgetnext.c241
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpnetstat/Makefile.depend397
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpnetstat/Makefile.in32
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpnetstat/ffs.c38
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpnetstat/if.c867
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpnetstat/inet.c539
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpnetstat/inet6.c516
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpnetstat/main.c517
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpnetstat/main.h20
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpnetstat/netstat.h94
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpnetstat/route.c528
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpnetstat/winstub.c288
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpnetstat/winstub.h48
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpset.c288
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpstatus.c386
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmptable.c997
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmptest.c511
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmptranslate.c370
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmptrap.c411
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmptrapd.c1587
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmptrapd_auth.c167
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmptrapd_auth.h16
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmptrapd_ds.h14
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmptrapd_handlers.c1266
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmptrapd_handlers.h66
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmptrapd_log.c1877
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmptrapd_log.h18
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpusm.c1013
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpvacm.c720
-rw-r--r--cleopatre/application/spidnetsnmp/apps/snmpwalk.c392
-rwxr-xr-xcleopatre/application/spidnetsnmp/config.guess1526
-rwxr-xr-xcleopatre/application/spidnetsnmp/config.sub1658
-rw-r--r--cleopatre/application/spidnetsnmp/configure.in4794
-rw-r--r--cleopatre/application/spidnetsnmp/confmake.mk100
-rwxr-xr-xcleopatre/application/spidnetsnmp/dist/changelogfix94
-rwxr-xr-xcleopatre/application/spidnetsnmp/dist/cvsshow46
-rwxr-xr-xcleopatre/application/spidnetsnmp/dist/cvsup117
-rw-r--r--cleopatre/application/spidnetsnmp/dist/extractnews135
-rw-r--r--cleopatre/application/spidnetsnmp/dist/find-requires5
-rwxr-xr-xcleopatre/application/spidnetsnmp/dist/makerelease355
-rw-r--r--cleopatre/application/spidnetsnmp/dist/net-snmp.spec284
-rwxr-xr-xcleopatre/application/spidnetsnmp/dist/snmpd-init.d73
-rw-r--r--cleopatre/application/spidnetsnmp/dist/snmptrapd-init.d73
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/agentx/rfc2741.txt4090
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/misc/rfc3512.txt4651
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/misc/rfc3584.txt2859
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/smiV2/rfc2578.txt2541
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/smiV2/rfc2579.errata58
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/smiV2/rfc2579.txt1533
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/smiV2/rfc2580.txt1710
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV1/rfc1155.txt1235
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV1/rfc1157.txt2019
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV1/rfc1212.txt1067
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV1/rfc1213.txt3923
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV2/rfc1901.txt451
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV2/rfc1902.txt2243
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV2/rfc1903.txt1291
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV2/rfc1904.txt1347
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV2/rfc1905.txt1347
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV2/rfc1906.txt731
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV2/rfc1907.txt1123
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV2/rfc1908.txt563
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV2/rfc2089.txt675
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3410.errata16
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3410.txt1515
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3411.txt3587
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3412.txt2411
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3413.errata54
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3413.txt4147
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3414.errata28
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3414.txt4931
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3415.errata14
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3415.txt2187
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3416.txt1739
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3417.txt1067
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3418.errata12
-rw-r--r--cleopatre/application/spidnetsnmp/doc/rfc/snmpV3/rfc3418.txt1459
-rw-r--r--cleopatre/application/spidnetsnmp/doc/spc300_eoc_mib_specs.odtbin0 -> 126388 bytes-rw-r--r--cleopatre/application/spidnetsnmp/dotgdbinit138
-rw-r--r--cleopatre/application/spidnetsnmp/doxygen.conf838
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/agent_callbacks.h21
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/agent_handler.h269
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/agent_index.h46
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/agent_read_config.h26
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/agent_registry.h177
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/agent_trap.h50
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/all_helpers.h42
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/auto_nlist.h28
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/baby_steps.h109
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/bulk_to_next.h28
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/cache_handler.h113
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/debug_handler.h16
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/ds_agent.h65
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/hardware/cpu.h65
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/hardware/memory.h39
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/instance.h156
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/mfd.h84
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/mib_modules.h23
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/mode_end_call.h39
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/multiplexer.h39
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/net-snmp-agent-includes.h22
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/null.h26
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/object_monitor.h186
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/old_api.h49
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/read_only.h29
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/row_merge.h38
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/scalar.h36
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/scalar_group.h36
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/serialize.h24
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/set_helper.h25
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/snmp_agent.h309
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/snmp_vars.h121
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/stash_cache.h34
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/stash_to_next.h24
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/table.h195
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/table_array.h158
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/table_container.h104
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/table_data.h123
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/table_dataset.h191
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/table_iterator.h157
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/table_tdata.h144
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/var_struct.h116
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/agent/watcher.h91
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/config_api.h30
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/data_access/arp.h133
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/data_access/interface.h281
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/data_access/ip_scalars.h17
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/data_access/ipaddress.h153
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/data_access/ipstats.h60
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/data_access/net-snmp-data-access-includes.h14
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/data_access/route.h158
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/data_access/systemstats.h89
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/data_access/tcpConn.h130
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/data_access/udp_endpoint.h99
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/definitions.h32
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/README67
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/asn1.h444
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/callback.h75
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/check_varbind.h43
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/cmu_compat.h292
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/container.h549
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/container_binary_array.h43
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/container_iterator.h62
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/container_list_ssll.h26
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/container_null.h20
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/data_list.h98
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/default_store.h173
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/factory.h72
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/fd_event_manager.h121
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/file_utils.h89
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/getopt.h15
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/int64.h38
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/keytools.h60
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/lcd_time.h137
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/libsnmp.h180
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/md5.h71
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/mib.h531
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/mt_support.h85
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/oid_stash.h78
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/parse.h259
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/read_config.h143
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/scapi.h106
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp-tc.h61
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp.h346
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmpAAL5PVCDomain.h35
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmpCallbackDomain.h70
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmpIPXDomain.h35
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmpSTDDomain.h42
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmpTCPDomain.h41
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmpTCPIPv6Domain.h31
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmpUDPDomain.h58
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmpUDPIPv6Domain.h51
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmpUnixDomain.h49
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp_alarm.h60
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp_api.h1086
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp_assert.h60
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp_client.h111
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp_debug.h279
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp_enum.h101
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp_impl.h141
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp_logging.h128
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp_parse_args.h20
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp_secmod.h164
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp_service.h39
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmp_transport.h186
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmpksm.h31
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmplocalsm.h21
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmpusm.h245
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/snmpv3.h59
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/system.h155
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/text_utils.h113
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/tools.h220
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/transform_oids.h39
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/ucd_compat.h39
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/vacm.h239
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/winpipe.h43
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/library/winservice.h170
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/machine/generic.h3
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/mib_api.h30
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/net-snmp-config.h.in2099
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/net-snmp-includes.h87
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/output_api.h29
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/pdu_api.h24
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/session_api.h53
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/snmpv3_api.h38
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/aix.h24
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/bsd.h20
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/bsdi.h3
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/bsdi3.h2
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/bsdi4.h11
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/cygwin.h16
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/darwin.h7
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/darwin7.h14
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/darwin8.h101
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/darwin9.h129
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/dragonfly.h24
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/dynix.h106
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/freebsd.h29
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/freebsd2.h10
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/freebsd3.h11
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/freebsd4.h23
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/freebsd5.h8
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/freebsd6.h3
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/freebsd7.h3
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/generic.h74
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/hpux.h84
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/irix.h33
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/linux.h23
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/mingw32.h86
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/mingw32msvc.h10
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/mips.h4
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/netbsd.h42
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/openbsd.h19
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/osf5.h28
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/solaris.h48
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/solaris2.3.h1
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/solaris2.4.h1
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/solaris2.5.h4
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/solaris2.6.h2
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/sunos.h12
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/svr5.h26
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/sysv.h2
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/system/ultrix4.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/types.h288
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/utilities.h63
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/varbind_api.h24
-rw-r--r--cleopatre/application/spidnetsnmp/include/net-snmp/version.h17
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/README3
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/agent_index.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/agent_read_config.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/agent_registry.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/agent_trap.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/asn1.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/auto_nlist.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/callback.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/default_store.h88
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/ds_agent.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/header_complex.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/int64.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/keytools.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/mib.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/mib_module_config.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/mibincl.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/parse.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/read_config.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/scapi.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/snmp-tc.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/snmp.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/snmp_agent.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/snmp_alarm.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/snmp_api.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/snmp_client.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/snmp_debug.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/snmp_impl.h11
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/snmp_logging.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/snmp_parse_args.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/snmp_vars.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/snmpusm.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/snmpv3.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/struct.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/system.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/tools.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/transform_oids.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/ucd-snmp-agent-includes.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/ucd-snmp-config.h2
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/ucd-snmp-includes.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/util_funcs.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/var_struct.h9
-rw-r--r--cleopatre/application/spidnetsnmp/include/ucd-snmp/version.h11
-rwxr-xr-xcleopatre/application/spidnetsnmp/install-sh250
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/FAQ2HTML113
-rw-r--r--cleopatre/application/spidnetsnmp/local/Makefile.in156
-rw-r--r--cleopatre/application/spidnetsnmp/local/README.mib2c224
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/Version-Munge.pl195
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/convertcode132
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/fixproc694
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/html-add-header-footer.pl212
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/html-textfile-fix.pl60
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/ipf-mod.pl227
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/mib2c1252
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/default-mfd-top.m2c141
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/details-enums.m2i80
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/details-node.m2i102
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/details-table.m2i25
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-ctx-copy.m2i33
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-ctx-get.m2i106
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-ctx-set.m2i29
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-data-allocate.m2i62
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-data-context.m2i51
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-get-char.m2i49
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-get-decl-bot.m2i22
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-get-decl.m2i43
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-get-long.m2i14
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-get-oid.m2i18
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-header-bottom.m2i21
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-header-top.m2i22
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-source-includes.m2i23
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-table-constants.m2c44
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-table-enums.m2c63
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-table-indexes-from-oid.m2i70
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-table-indexes-set.m2i123
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-table-indexes-to-oid.m2i53
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-table-indexes-varbind-setup.m2i51
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-table-indexes.m2i67
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-table-oids.m2c107
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-value-map-func.m2i104
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-value-map-reverse.m2i49
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/generic-value-map.m2i46
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/m2c-internal-warning.m2i21
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/m2c_setup_enum.m2i24
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/m2c_setup_node.m2i260
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/m2c_setup_table.m2i48
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/m2c_table_save_defaults.m2i117
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/mfd-access-container-cached-defines.m2i576
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/mfd-access-unsorted-external-defines.m2i1198
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/mfd-data-access.m2c331
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/mfd-data-get.m2c168
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/mfd-data-set.m2c142
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/mfd-doxygen.m2c60
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/mfd-interactive-setup.m2c332
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/mfd-interface.m2c1716
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/mfd-makefile.m2m139
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/mfd-persistence.m2i478
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/mfd-readme.m2c846
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/mfd-top.m2c605
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/node-get.m2i107
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/node-set.m2i236
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/node-storage.m2i21
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/node-validate.m2i71
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/node-varbind-validate.m2i54
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/parent-dependencies.m2i63
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/parent-set.m2i417
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/subagent.m2c183
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/syntax-COUNTER64-get.m2i35
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/syntax-DateAndTime-get.m2d9
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/syntax-DateAndTime-get.m2i54
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/syntax-DateAndTime-readme.m2i4
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/syntax-InetAddress-get.m2i100
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/syntax-InetAddress-set.m2i22
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/syntax-InetAddressType-get.m2i25
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/syntax-InetAddressType-set.m2i25
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/syntax-RowStatus-dependencies.m2i113
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/syntax-RowStatus-get.m2i65
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/syntax-RowStatus-varbind-validate.m2i16
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/syntax-StorageType-dependencies.m2i19
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c-conf.d/syntax-TestAndIncr-get.m2i22
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/mib2c-update358
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.access_functions.conf183
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.array-user.conf1305
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.check_values.conf154
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.check_values_local.conf72
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.column_defines.conf15
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.column_enums.conf34
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.column_storage.conf23
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.conf284
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.container.conf569
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.create-dataset.conf112
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.emulation.conf246
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.genhtml.conf370
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.int_watch.conf107
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.iterate.conf664
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.iterate_access.conf423
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.mfd.conf32
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.notify.conf84
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.old-api.conf337
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/mib2c.perl.conf314
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/mib2c.row.conf282
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.scalar.conf142
-rw-r--r--cleopatre/application/spidnetsnmp/local/mib2c.table_data.conf643
-rw-r--r--cleopatre/application/spidnetsnmp/local/pass_persisttest77
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/passtest41
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/passtest.pl36
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/snmp-ucd.sh187
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/snmpcheck.def1224
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/snmpconf933
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmp-data/authopts77
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmp-data/debugging39
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmp-data/mibs56
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmp-data/output79
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmp-data/snmpconf-config1
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmpd-data/acl36
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmpd-data/basic_setup17
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmpd-data/extending68
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmpd-data/monitor72
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmpd-data/operation32
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmpd-data/snmpconf-config1
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmpd-data/system43
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmpd-data/trapsinks46
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmptrapd-data/authentication8
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmptrapd-data/formatting15
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmptrapd-data/logging26
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmptrapd-data/runtime13
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmptrapd-data/snmpconf-config1
-rw-r--r--cleopatre/application/spidnetsnmp/local/snmpconf.dir/snmptrapd-data/traphandle17
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/snmpdump.pl107
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/tkmib994
-rwxr-xr-xcleopatre/application/spidnetsnmp/local/traptoemail72
-rw-r--r--cleopatre/application/spidnetsnmp/ltmain.sh6956
-rwxr-xr-xcleopatre/application/spidnetsnmp/maketarget63
-rw-r--r--cleopatre/application/spidnetsnmp/man/Makefile.in284
-rw-r--r--cleopatre/application/spidnetsnmp/man/add_mibdir.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/add_module_replacement.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/default_store.3.bot120
-rw-r--r--cleopatre/application/spidnetsnmp/man/default_store.3.top84
-rw-r--r--cleopatre/application/spidnetsnmp/man/encode_keychange.1.def72
-rw-r--r--cleopatre/application/spidnetsnmp/man/fixproc.1.def41
-rw-r--r--cleopatre/application/spidnetsnmp/man/get_module_node.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/init_mib.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/init_mib_internals.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/make_index.pl69
-rw-r--r--cleopatre/application/spidnetsnmp/man/man_sections.txt73
-rw-r--r--cleopatre/application/spidnetsnmp/man/mib2c-update.1.def10
-rw-r--r--cleopatre/application/spidnetsnmp/man/mib2c.1.def224
-rw-r--r--cleopatre/application/spidnetsnmp/man/mib2c.conf.5.in53
-rw-r--r--cleopatre/application/spidnetsnmp/man/mib2c.extract.pl43
-rw-r--r--cleopatre/application/spidnetsnmp/man/mib_api.3.def324
-rw-r--r--cleopatre/application/spidnetsnmp/man/net-snmp-config.1.def88
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_Container_iterator.340
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_agent.332
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_agent_registry.3299
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_agent_trap.3338
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_asn1_packet_parse.3239
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_baby_steps.348
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_bulk_to_next.358
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_cache_handler.3279
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_callback.3224
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_container.315
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_data_list.3322
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_debug.3122
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_default_store.3250
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_example_scalar_int.326
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_handler.3696
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_instance.3212
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_iterator_info_s.377
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_leaf.343
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_library.3705
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_mib_handler_methods.319
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_mib_maintenance.390
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_mib_utilities.31494
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_mode_end_call.373
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_multiplexer.355
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_netsnmp_agent_request_info_s.349
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_netsnmp_column_info_t.356
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_netsnmp_data_list_s.355
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_netsnmp_handler_registration_s.3116
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_netsnmp_iterator_info_s.3122
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_netsnmp_mib_handler_access_methods.321
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_netsnmp_mib_handler_methods.321
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_netsnmp_mib_handler_s.372
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_netsnmp_request_info_s.3124
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_netsnmp_table_registration_info_s.384
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_netsnmp_table_request_info_s.369
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_oid_stash.3262
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_old_api.374
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_read_config.3378
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_read_only.345
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_row_merge.3121
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_scalar.3115
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_scalar_group_group.325
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_serialize.368
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_set_data.361
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_snmp_agent.3626
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_snmp_alarm.343
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_snmp_client.3171
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_snmp_logging.3294
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_snmp_pdu.3347
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_snmp_session.3513
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_stash_cache.3116
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_stash_to_next.334
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_table.3286
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_table_array.393
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_table_container.3151
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_table_data.3363
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_table_dataset.3395
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_table_generic.343
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_table_indexes.380
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_table_iterator.3215
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_table_iterator.h.3111
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_table_maintenance.3126
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_table_rows.395
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_tdata.3365
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_util.3596
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_utilities.378
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_variable_list.3151
-rw-r--r--cleopatre/application/spidnetsnmp/man/netsnmp_watcher.373
-rw-r--r--cleopatre/application/spidnetsnmp/man/print_description.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/print_mib.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/print_objid.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/print_value.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/print_variable.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/read_all_mibs.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/read_config.3.def293
-rw-r--r--cleopatre/application/spidnetsnmp/man/read_mib.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/read_module.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/read_module_node.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/read_objid.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/shutdown_mib.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp.conf.5.def331
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_agent_api.3.def133
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_alarm.3.def169
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_api.3.def238
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_api_errstring.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_close.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_config.5.def159
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_error.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_free_pdu.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_open.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_perror.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_read.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_select_info.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_send.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_sess_api.3.def230
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_sess_async_send.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_sess_close.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_sess_error.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_sess_init.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_sess_open.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_sess_perror.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_sess_read.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_sess_select_info.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_sess_send.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_sess_session.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_sess_timeout.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_set_mib_warnings.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_set_save_descriptions.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_timeout.31
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmp_trap_api.3.def57
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpbulkget.1.def82
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpbulkwalk.1.def127
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpcmd.1.def807
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpconf.1.def131
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpd.8.def275
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpd.conf.5.def1454
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpd.examples.5.def656
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpd.internal.5.def93
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpdelta.1.def154
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpdf.1.def72
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpget.1.def111
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpgetnext.1.def60
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpinform.11
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpnetstat.1.def304
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpset.1.def103
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpstatus.1.def113
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmptable.1.def162
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmptest.1.def279
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmptranslate.1.def289
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmptrap.1.def123
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmptrapd.8.def320
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmptrapd.conf.5.def262
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpusm.1.def260
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpvacm.1.def368
-rw-r--r--cleopatre/application/spidnetsnmp/man/snmpwalk.1.def121
-rw-r--r--cleopatre/application/spidnetsnmp/man/tkmib.1.def16
-rw-r--r--cleopatre/application/spidnetsnmp/man/traptoemail.1.def23
-rw-r--r--cleopatre/application/spidnetsnmp/man/variables.5.def58
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/ACE-NSCRTV-EPONEOC-MOD-EOC-MIB.my2979
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/AGENTX-MIB.txt527
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/DISMAN-EVENT-MIB.txt1955
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/DISMAN-EXPRESSION-MIB.txt1205
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/DISMAN-NSLOOKUP-MIB.txt509
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/DISMAN-PING-MIB.txt1561
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/DISMAN-SCHEDULE-MIB.txt699
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/DISMAN-SCRIPT-MIB.txt1764
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/DISMAN-TRACEROUTE-MIB.txt1850
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/EtherLike-MIB.txt1862
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/HCNUM-TC.txt118
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/HOST-RESOURCES-MIB.txt1540
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/HOST-RESOURCES-TYPES.txt389
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IANA-ADDRESS-FAMILY-NUMBERS-MIB.txt121
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IANA-LANGUAGE-MIB.txt123
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IANA-RTPROTO-MIB.txt92
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IANAifType-MIB.txt487
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IF-INVERTED-STACK-MIB.txt149
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IF-MIB.txt1814
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/INET-ADDRESS-MIB.txt402
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IP-FORWARD-MIB.txt1357
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IP-MIB.txt5254
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IPV6-FLOW-LABEL-MIB.txt63
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IPV6-ICMP-MIB.txt529
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IPV6-MIB.txt1443
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IPV6-TC.txt67
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IPV6-TCP-MIB.txt211
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/IPV6-UDP-MIB.txt141
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/LM-SENSORS-MIB.txt230
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/MSTAR-ALARM-MIB.txt179
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/MSTAR-EOC-PROPERTY-MIB.txt128
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/MSTAR-EOC-ROOT.txt39
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/MSTAR-MOD-EOC-MIB.txt3170
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/MTA-MIB.txt1226
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/Makefile.in81
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/Makefile.mib182
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/NET-SNMP-AGENT-MIB.txt550
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/NET-SNMP-EXAMPLES-MIB.txt285
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/NET-SNMP-EXTEND-MIB.txt322
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/NET-SNMP-MIB.txt67
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/NET-SNMP-MONITOR-MIB.txt59
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/NET-SNMP-SYSTEM-MIB.txt63
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/NET-SNMP-TC.txt123
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/NET-SNMP-VACM-MIB.txt154
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/NETWORK-SERVICES-MIB.txt626
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/NOTIFICATION-LOG-MIB.txt782
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/README.mibs47
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/RFC-1215.txt38
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/RFC1155-SMI.txt119
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/RFC1213-MIB.txt2613
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/RMON-MIB.txt3980
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SARFT-ALARM-MIB.txt94
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SARFT-NSCRTV-ROOT-MIB.txt46
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SARFT-PROPERTY-ALARM-MIB.txt457
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SARFT-PROPERTY-MIB.txt318
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SCCN-ALARM-MIB.txt58
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SCCN-EOC-MIB.txt293
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SCTP-MIB.txt1342
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SMUX-MIB.txt158
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMP-COMMUNITY-MIB.txt429
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMP-FRAMEWORK-MIB.txt526
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMP-MPD-MIB.txt145
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMP-NOTIFICATION-MIB.txt589
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMP-PROXY-MIB.txt294
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMP-TARGET-MIB.txt660
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMP-USER-BASED-SM-MIB.txt912
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMP-USM-AES-MIB.txt62
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMP-USM-DH-OBJECTS-MIB.txt537
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMP-VIEW-BASED-ACM-MIB.txt830
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMPv2-CONF.txt322
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMPv2-MIB.txt854
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMPv2-SMI.txt344
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMPv2-TC.txt772
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SNMPv2-TM.txt176
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SPC300EOC-MIB.txt394
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SPIDCOM-EOC-MIB.txt2257
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/SPIDCOM-MIB.txt20
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/TCP-MIB.txt785
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/TRANSPORT-ADDRESS-MIB.txt417
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/TUNNEL-MIB.txt774
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UCD-DEMO-MIB.inc11
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UCD-DEMO-MIB.txt74
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UCD-DISKIO-MIB.inc11
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UCD-DISKIO-MIB.txt162
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UCD-DLMOD-MIB.inc8
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UCD-DLMOD-MIB.txt119
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UCD-IPFILTER-MIB.inc8
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UCD-IPFILTER-MIB.txt256
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UCD-IPFWACC-MIB.inc11
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UCD-IPFWACC-MIB.txt327
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UCD-SNMP-MIB-OLD.txt744
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UCD-SNMP-MIB.inc9
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UCD-SNMP-MIB.txt1628
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/UDP-MIB.txt549
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/ianalist11
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/makehtml.pl112
-rwxr-xr-xcleopatre/application/spidnetsnmp/mibs/mibfetch51
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/nodemap6
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/rfclist188
-rw-r--r--cleopatre/application/spidnetsnmp/mibs/rfcmibs.diff499
-rwxr-xr-xcleopatre/application/spidnetsnmp/mibs/smistrip179
-rwxr-xr-xcleopatre/application/spidnetsnmp/mkinstalldirs40
-rwxr-xr-xcleopatre/application/spidnetsnmp/net-snmp-config.in740
-rw-r--r--cleopatre/application/spidnetsnmp/ov/Makefile.in15
-rw-r--r--cleopatre/application/spidnetsnmp/ov/README31
-rw-r--r--cleopatre/application/spidnetsnmp/ov/UCD-Computer9
-rw-r--r--cleopatre/application/spidnetsnmp/ov/UCD-fields26
-rw-r--r--cleopatre/application/spidnetsnmp/ov/bitmaps/UCD.20.m8
-rw-r--r--cleopatre/application/spidnetsnmp/ov/bitmaps/UCD.20.p8
-rw-r--r--cleopatre/application/spidnetsnmp/ov/bitmaps/UCD.26.m12
-rw-r--r--cleopatre/application/spidnetsnmp/ov/bitmaps/UCD.26.p12
-rw-r--r--cleopatre/application/spidnetsnmp/ov/bitmaps/UCD.32.m14
-rw-r--r--cleopatre/application/spidnetsnmp/ov/bitmaps/UCD.32.p14
-rw-r--r--cleopatre/application/spidnetsnmp/ov/bitmaps/UCD.38.m19
-rw-r--r--cleopatre/application/spidnetsnmp/ov/bitmaps/UCD.38.p19
-rw-r--r--cleopatre/application/spidnetsnmp/ov/bitmaps/UCD.44.m25
-rw-r--r--cleopatre/application/spidnetsnmp/ov/bitmaps/UCD.44.p25
-rw-r--r--cleopatre/application/spidnetsnmp/ov/bitmaps/UCD.50.m33
-rw-r--r--cleopatre/application/spidnetsnmp/ov/bitmaps/UCD.50.p33
-rw-r--r--cleopatre/application/spidnetsnmp/ov/bitmaps/UCD.fields21
-rw-r--r--cleopatre/application/spidnetsnmp/ov/oid_to_sym.in17
-rw-r--r--cleopatre/application/spidnetsnmp/ov/oid_to_type.in17
-rw-r--r--cleopatre/application/spidnetsnmp/perl/ASN/ASN.pm161
-rw-r--r--cleopatre/application/spidnetsnmp/perl/ASN/ASN.xs344
-rw-r--r--cleopatre/application/spidnetsnmp/perl/ASN/Changes6
-rw-r--r--cleopatre/application/spidnetsnmp/perl/ASN/MANIFEST6
-rw-r--r--cleopatre/application/spidnetsnmp/perl/ASN/Makefile.PL233
-rw-r--r--cleopatre/application/spidnetsnmp/perl/ASN/test.pl28
-rw-r--r--cleopatre/application/spidnetsnmp/perl/AnyData_SNMP/Changes1
-rw-r--r--cleopatre/application/spidnetsnmp/perl/AnyData_SNMP/DBD_AnyData.patch48
-rw-r--r--cleopatre/application/spidnetsnmp/perl/AnyData_SNMP/Format.pm108
-rw-r--r--cleopatre/application/spidnetsnmp/perl/AnyData_SNMP/INSTALL44
-rw-r--r--cleopatre/application/spidnetsnmp/perl/AnyData_SNMP/MANIFEST7
-rw-r--r--cleopatre/application/spidnetsnmp/perl/AnyData_SNMP/Makefile.PL14
-rw-r--r--cleopatre/application/spidnetsnmp/perl/AnyData_SNMP/README21
-rw-r--r--cleopatre/application/spidnetsnmp/perl/AnyData_SNMP/Storage.pm427
-rw-r--r--cleopatre/application/spidnetsnmp/perl/AnyData_SNMP/configs/scli27
-rw-r--r--cleopatre/application/spidnetsnmp/perl/AnyData_SNMP/configs/unix34
-rwxr-xr-xcleopatre/application/spidnetsnmp/perl/AnyData_SNMP/netsh838
-rw-r--r--cleopatre/application/spidnetsnmp/perl/Makefile.PL160
-rw-r--r--cleopatre/application/spidnetsnmp/perl/Makefile.makefiles12
-rw-r--r--cleopatre/application/spidnetsnmp/perl/Makefile.subs.pl136
-rw-r--r--cleopatre/application/spidnetsnmp/perl/OID/Changes6
-rw-r--r--cleopatre/application/spidnetsnmp/perl/OID/MANIFEST7
-rw-r--r--cleopatre/application/spidnetsnmp/perl/OID/Makefile.PL234
-rw-r--r--cleopatre/application/spidnetsnmp/perl/OID/OID.pm252
-rw-r--r--cleopatre/application/spidnetsnmp/perl/OID/OID.xs446
-rw-r--r--cleopatre/application/spidnetsnmp/perl/OID/README31
-rw-r--r--cleopatre/application/spidnetsnmp/perl/OID/test.pl137
-rw-r--r--cleopatre/application/spidnetsnmp/perl/OID/typemap2
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/BUG40
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/MANIFEST37
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/MANIFEST.SKIP11
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/Makefile.PL363
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/README896
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/SNMP.pm2491
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/SNMP.xs5322
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/TODO40
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/examples/async1.pl17
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/examples/async2.pl19
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/examples/bulkwalk.pl121
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/examples/ipforward.pl30
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/examples/mibtree.pl20
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/examples/mibwalk.pl17
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/examples/pingmib.pl36
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/examples/tablewalk.pl19
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/examples/testleak.pl19
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/examples/trap-example.pl94
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/hints/irix.pl2
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/hints/solaris.pl4
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/perlsnmp.h24
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/README81
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/async.t168
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/bulkwalk.t335
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/conf.t51
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/conftest.conf2
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/get.t216
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/getnext.t102
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/mib.t227
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/mib.txt4208
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/mibload.t95
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/notify.t98
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/session.t76
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/set.t224
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/snmptest.conf21
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/t/startagent.pl145
-rw-r--r--cleopatre/application/spidnetsnmp/perl/SNMP/typemap2
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/Changes8
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/MANIFEST12
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/Makefile.PL274
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/README30
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/TrapReceiver.pm252
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/TrapReceiver.xs272
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/const-c.inc146
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/const-xs.inc88
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/fallback/const-c.inc146
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/fallback/const-xs.inc88
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/perl_snmptrapd.h44
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/ppport.h560
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/t/1.t38
-rw-r--r--cleopatre/application/spidnetsnmp/perl/TrapReceiver/typemap5
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/Changes6
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/MANIFEST15
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/Makefile.PL241
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/Support/Makefile.PL229
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/Support/Support.pm460
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/agent.pm540
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/agent.xs1039
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/default_store/Makefile.PL228
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/default_store/default_store.pm406
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/default_store/default_store.xs700
-rwxr-xr-xcleopatre/application/spidnetsnmp/perl/agent/default_store/gen118
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/default_store/test.pl69
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/netsnmp_request_infoPtr.pm23
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/test.pl116
-rw-r--r--cleopatre/application/spidnetsnmp/perl/agent/typemap5
-rw-r--r--cleopatre/application/spidnetsnmp/perl/default_store/Changes6
-rw-r--r--cleopatre/application/spidnetsnmp/perl/default_store/MANIFEST8
-rw-r--r--cleopatre/application/spidnetsnmp/perl/default_store/Makefile.PL227
-rw-r--r--cleopatre/application/spidnetsnmp/perl/default_store/README14
-rw-r--r--cleopatre/application/spidnetsnmp/perl/default_store/default_store.pm365
-rw-r--r--cleopatre/application/spidnetsnmp/perl/default_store/default_store.xs1406
-rwxr-xr-xcleopatre/application/spidnetsnmp/perl/default_store/gen131
-rw-r--r--cleopatre/application/spidnetsnmp/perl/default_store/test.pl124
-rw-r--r--cleopatre/application/spidnetsnmp/perl/default_store/typemap1
-rw-r--r--cleopatre/application/spidnetsnmp/perl/make-perl-makefiles23
-rw-r--r--cleopatre/application/spidnetsnmp/perl/manager/INSTALL198
-rw-r--r--cleopatre/application/spidnetsnmp/perl/manager/Makefile.PL16
-rw-r--r--cleopatre/application/spidnetsnmp/perl/manager/displaytable.pm628
-rw-r--r--cleopatre/application/spidnetsnmp/perl/manager/getValues.pm49
-rw-r--r--cleopatre/application/spidnetsnmp/perl/manager/green.gifbin0 -> 870 bytes-rw-r--r--cleopatre/application/spidnetsnmp/perl/manager/manager.pm1050
-rw-r--r--cleopatre/application/spidnetsnmp/perl/manager/red.gifbin0 -> 855 bytes-rwxr-xr-xcleopatre/application/spidnetsnmp/perl/manager/setupauth59
-rwxr-xr-xcleopatre/application/spidnetsnmp/perl/manager/setupdb149
-rwxr-xr-xcleopatre/application/spidnetsnmp/perl/manager/setupuser45
-rwxr-xr-xcleopatre/application/spidnetsnmp/perl/manager/snmptosql523
-rw-r--r--cleopatre/application/spidnetsnmp/python/LICENSE30
-rw-r--r--cleopatre/application/spidnetsnmp/python/README346
-rw-r--r--cleopatre/application/spidnetsnmp/python/netsnmp/__init__.py1
-rw-r--r--cleopatre/application/spidnetsnmp/python/netsnmp/client.py241
-rw-r--r--cleopatre/application/spidnetsnmp/python/netsnmp/client_intf.c2434
-rw-r--r--cleopatre/application/spidnetsnmp/python/netsnmp/tests/__init__.py0
-rw-r--r--cleopatre/application/spidnetsnmp/python/netsnmp/tests/snmpd.conf420
-rw-r--r--cleopatre/application/spidnetsnmp/python/netsnmp/tests/test.py321
-rw-r--r--cleopatre/application/spidnetsnmp/python/setup.py46
-rw-r--r--cleopatre/application/spidnetsnmp/sedscript.in103
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/MSG00001.binbin0 -> 32 bytes-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/Makefile.depend2280
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/Makefile.in207
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/asn1.c3694
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/callback.c559
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/check_varbind.c232
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/cmu_compat.c91
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/container.c529
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/container_binary_array.c733
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/container_iterator.c508
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/container_list_ssll.c393
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/container_null.c184
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/data_list.c370
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/default_store.c551
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/fd_event_manager.c222
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/file_utils.c208
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/getopt.c118
-rwxr-xr-xcleopatre/application/spidnetsnmp/snmplib/inet_ntop.c225
-rwxr-xr-xcleopatre/application/spidnetsnmp/snmplib/inet_pton.c323
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/int64.c589
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/keytools.c593
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/lcd_time.c605
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/md5.c537
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/mib.c6566
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/mt_support.c165
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/oid_stash.c436
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/parse.c5493
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/pkcs.c777
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/read_config.c2042
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/scapi.c1080
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp-tc.c460
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp.c464
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmpAAL5PVCDomain.c357
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmpCallbackDomain.c623
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmpIPXDomain.c453
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmpSTDDomain.c284
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmpTCPDomain.c461
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmpTCPIPv6Domain.c496
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmpUDPDomain.c1327
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmpUDPIPv6Domain.c1396
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmpUnixDomain.c655
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp_alarm.c514
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp_api.c7210
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp_auth.c245
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp_client.c1339
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp_debug.c623
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp_enum.c520
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp_logging.c1305
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp_parse_args.c796
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp_secmod.c183
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp_service.c403
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp_transport.c538
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmp_version.c14
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmpksm.c1887
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmplocalsm.c259
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmpusm.c3793
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snmpv3.c1673
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/snprintf.c831
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/strlcpy.c45
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/strtok_r.c95
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/strtol.c129
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/strtoul.c111
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/system.c1190
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/test_binary_array.c171
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/text_utils.c512
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/tools.c1077
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/ucd-snmp-includes.h26
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/ucd_compat.c220
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/vacm.c1124
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/winpipe.c221
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/winservice.c1058
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/winservice.mc11
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/winservice.rc2
-rw-r--r--cleopatre/application/spidnetsnmp/snmplib/winservicerc.rc2
-rw-r--r--cleopatre/application/spidnetsnmp/spidcom.conf104
-rw-r--r--cleopatre/application/spidnetsnmp/stamp-h1
-rw-r--r--cleopatre/application/spidnetsnmp/stamp-h.in1
-rw-r--r--cleopatre/application/spidnetsnmp/testing/Makefile.in89
-rw-r--r--cleopatre/application/spidnetsnmp/testing/README21
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/RUNTESTS400
-rw-r--r--cleopatre/application/spidnetsnmp/testing/T.c182
-rw-r--r--cleopatre/application/spidnetsnmp/testing/T2.sh32
-rw-r--r--cleopatre/application/spidnetsnmp/testing/TESTCONF.sh173
-rw-r--r--cleopatre/application/spidnetsnmp/testing/data.keychange-md526
-rw-r--r--cleopatre/application/spidnetsnmp/testing/data.keychange-sha126
-rw-r--r--cleopatre/application/spidnetsnmp/testing/data.keychange-sha1-des26
-rw-r--r--cleopatre/application/spidnetsnmp/testing/data.kul-md58
-rw-r--r--cleopatre/application/spidnetsnmp/testing/data.kul-sha18
-rw-r--r--cleopatre/application/spidnetsnmp/testing/etimetest.c423
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/eval_oneprogram.sh138
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/eval_onescript.sh36
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/eval_suite.sh212
-rw-r--r--cleopatre/application/spidnetsnmp/testing/eval_testlist5
-rw-r--r--cleopatre/application/spidnetsnmp/testing/eval_tools.sh578
-rw-r--r--cleopatre/application/spidnetsnmp/testing/keymanagetest.c651
-rw-r--r--cleopatre/application/spidnetsnmp/testing/misctest.c266
-rw-r--r--cleopatre/application/spidnetsnmp/testing/rfc1213/README25
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/rfc1213/run58
-rw-r--r--cleopatre/application/spidnetsnmp/testing/rfc1213/snmpfun.sh78
-rw-r--r--cleopatre/application/spidnetsnmp/testing/rfc1213/test_fun68
-rw-r--r--cleopatre/application/spidnetsnmp/testing/rfc1213/testmib1.sh448
-rw-r--r--cleopatre/application/spidnetsnmp/testing/rfc1213/testmib2.sh447
-rw-r--r--cleopatre/application/spidnetsnmp/testing/rfc1213/testmib3.sh448
-rw-r--r--cleopatre/application/spidnetsnmp/testing/scapitest.c489
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/test_keychange.sh71
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/test_kul.sh78
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/Sv1config4
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/Sv2cconfig4
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/Sv3config44
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/Sv3usmconfigagent23
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/Sv3usmconfigbase94
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/Sv3usmconfigtrapd19
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/Sv3vacmconfig28
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/Svacmconfig38
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/Svanyconfig26
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T001snmpv1get37
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T014snmpv2cget24
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T015snmpv2cgetnext25
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/tests/T0160snmpv2cbulkget40
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T016snmpv2cgetfail29
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T017snmpv2ctov1getfail30
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T018snmpv1tov2cgetfail26
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T019snmpv2cnosuch25
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T020snmpv3get24
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/tests/T021snmpv3getnext24
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/tests/T0220snmpv3bulkget39
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/tests/T022snmpv3getMD525
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T023snmpv3getMD5AES29
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/tests/T023snmpv3getMD5DES28
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/tests/T024snmpv3getSHA125
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/tests/T025snmpv3getSHADES28
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T026snmpv3getSHAAES28
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/tests/T028snmpv3getfail22
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T030snmpv3usercreation114
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T035snmpv3trapdusermgmt124
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T049snmpv3inform25
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T049snmpv3informauth25
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T049snmpv3informpriv28
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T050snmpv3trap36
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T051snmpv2ctrap24
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T052snmpv2cinform24
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T053agentv1trap33
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T054agentv2ctrap33
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T055agentv1mintrap33
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T056agentv2cmintrap34
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T057trapdauthtest28
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T057trapdauthtest228
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T057trapdauthtest328
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T058agentauthtrap36
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/tests/T059trapdtraphandle48
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/tests/T060trapdperl50
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/tests/T061agentperl94
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T065agentextend47
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/tests/T100agenthup36
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T110agentxget59
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T111agentxset76
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T112agentxsetfail70
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T113agentxtrap78
-rwxr-xr-xcleopatre/application/spidnetsnmp/testing/tests/T115agentxperl133
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T120proxyget64
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T121proxyset81
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T122proxysetfail81
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T130snmpv1vacmget31
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T131snmpv2cvacmget35
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T132snmpv3vacmget31
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T140snmpv1vacmgetfail35
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T141snmpv2cvacmgetfail45
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T142snmpv3vacmgetfail32
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T150solarishostcpu31
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T151solarishostdisk31
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T152hostuptime27
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T153solarisswap32
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T160snmpnetstat55
-rw-r--r--cleopatre/application/spidnetsnmp/testing/tests/T200snmpv2cwalkall38
-rw-r--r--cleopatre/application/spidnetsnmp/win32/Configure429
-rw-r--r--cleopatre/application/spidnetsnmp/win32/EXAMPLE.conf.win32156
-rw-r--r--cleopatre/application/spidnetsnmp/win32/Makefile-apps.in217
-rw-r--r--cleopatre/application/spidnetsnmp/win32/Makefile.in535
-rw-r--r--cleopatre/application/spidnetsnmp/win32/agent_module_dot_conf.h1
-rw-r--r--cleopatre/application/spidnetsnmp/win32/agent_module_includes.h10
-rw-r--r--cleopatre/application/spidnetsnmp/win32/agent_module_inits.h5
-rwxr-xr-xcleopatre/application/spidnetsnmp/win32/build.bat5
-rw-r--r--cleopatre/application/spidnetsnmp/win32/build.pl335
-rw-r--r--cleopatre/application/spidnetsnmp/win32/config.h5
-rw-r--r--cleopatre/application/spidnetsnmp/win32/config.h.borland847
-rw-r--r--cleopatre/application/spidnetsnmp/win32/encode_keychange/encode_keychange.dsp90
-rwxr-xr-xcleopatre/application/spidnetsnmp/win32/install-net-snmp.bat120
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libagent/Makefile.in225
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libagent/libagent.def17
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libagent/libagent.dsp148
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libhelpers/Makefile.in405
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libhelpers/libhelpers.dsp252
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libnetsnmptrapd/Makefile.in211
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libnetsnmptrapd/libnetsnmptrapd.dsp129
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libsdll.dsw77
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libsnmp/Makefile.in683
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libsnmp/libsnmp.dsp456
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libsnmp_dll/Makefile.in705
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libsnmp_dll/libsnmp.def454
-rwxr-xr-xcleopatre/application/spidnetsnmp/win32/libsnmp_dll/libsnmp.def.in454
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libsnmp_dll/libsnmp_dll.dsp463
-rw-r--r--cleopatre/application/spidnetsnmp/win32/libucdmibs/libucdmibs.def17
-rw-r--r--cleopatre/application/spidnetsnmp/win32/local/Makefile.in32
-rw-r--r--cleopatre/application/spidnetsnmp/win32/local/mib2c.bat26
-rw-r--r--cleopatre/application/spidnetsnmp/win32/local/snmpconf.bat26
-rw-r--r--cleopatre/application/spidnetsnmp/win32/local/traptoemail.bat26
-rw-r--r--cleopatre/application/spidnetsnmp/win32/mib_module_dot_conf.h1
-rw-r--r--cleopatre/application/spidnetsnmp/win32/mib_module_includes.h168
-rw-r--r--cleopatre/application/spidnetsnmp/win32/mib_module_inits.h116
-rw-r--r--cleopatre/application/spidnetsnmp/win32/mib_module_shutdown.h2
-rw-r--r--cleopatre/application/spidnetsnmp/win32/net-snmp/agent/agent_module_config.h32
-rw-r--r--cleopatre/application/spidnetsnmp/win32/net-snmp/agent/mib_module_config.h303
-rw-r--r--cleopatre/application/spidnetsnmp/win32/net-snmp/library/snmpv3-security-includes.h2
-rw-r--r--cleopatre/application/spidnetsnmp/win32/net-snmp/net-snmp-config.h1700
-rw-r--r--cleopatre/application/spidnetsnmp/win32/net-snmp/net-snmp-config.h.in1700
-rw-r--r--cleopatre/application/spidnetsnmp/win32/netsnmpmibs/Makefile.in755
-rwxr-xr-xcleopatre/application/spidnetsnmp/win32/netsnmpmibs/netsnmpmibs.dsp364
-rw-r--r--cleopatre/application/spidnetsnmp/win32/netsnmpmibssdk/Makefile.in875
-rw-r--r--cleopatre/application/spidnetsnmp/win32/netsnmpmibssdk/netsnmpmibssdk.dsp412
-rwxr-xr-xcleopatre/application/spidnetsnmp/win32/nmakeperl.bat59
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpbulkget/snmpbulkget.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpbulkwalk/snmpbulkwalk.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpd/Makefile.in313
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpd/snmpd.dsp134
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpdelta/snmpdelta.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpdf/snmpdf.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpdsdk/Makefile.in312
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpdsdk/snmpd.dsp106
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpget/snmpget.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpgetnext/snmpgetnext.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpnetstat/Makefile.in360
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpnetstat/snmpnetstat.dsp114
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpset/snmpset.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpsm_init.h2
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpstatus/snmpstatus.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmptable/snmptable.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmptest/snmptest.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmptranslate/snmptranslate.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmptrap/snmptrap.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmptrapd/Makefile.in318
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmptrapd/snmptrapd.dsp98
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpusm/snmpusm.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpvacm/snmpvacm.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/snmpwalk/snmpwalk.dsp90
-rw-r--r--cleopatre/application/spidnetsnmp/win32/win32.dsw305
-rw-r--r--cleopatre/application/spidnetsnmp/win32/win32sdk.dsw305
2934 files changed, 1067143 insertions, 0 deletions
diff --git a/cleopatre/application/spidnetsnmp/.gitignore b/cleopatre/application/spidnetsnmp/.gitignore
new file mode 100644
index 0000000000..1efae11d49
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/.gitignore
@@ -0,0 +1,17 @@
+/agent/snmpd
+/include/net-snmp/library/snmpv3-security-includes.h
+/snmplib/snmpsm_init.h
+libtool
+sedscript
+autom4te.cache
+mk
+.libs
+mib_module*.h
+agent_module*.h
+Makefile
+config.*
+net-snmp-config*
+configure*
+*.conf
+*.lo
+*.la
diff --git a/cleopatre/application/spidnetsnmp/AGENT.txt b/cleopatre/application/spidnetsnmp/AGENT.txt
new file mode 100644
index 0000000000..ad4b1c92b7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/AGENT.txt
@@ -0,0 +1,1167 @@
+Note, this is based on the text from a web page, which can be found in
+the documentation section of the http://www.net-snmp.org web page.
+
+Extending the UCD-SNMP agent
+============================
+
+This document describes the procedure for writing code to extend
+the functionality of the v4 UCD-SNMP network management agent.
+Modules written using this procedure should also work with the v5
+Net-SNMP agent, though such modules would not take advantage of the
+new handler-based helper mechanism. See the on-line documentation
+for more information and examples of the newer approach.
+We would be very interested in comment and feedback about how useful
+(or otherwise) you find this description, and ways in which it could
+be improved.
+
+The information is designed to be read in order - the structure being:
+
+ 1. Overview & Introduction
+ 2. MIB files, and how they relate to the agent implementation
+ 3. Header files
+ 4. The basic structure of module implementation code
+ 5. The details of non-table based implementations
+ 6. The details of simple table based implementations
+ 7. The details of more general table based implementations
+ 8. How to implement SET-able variables
+
+While the document is intended to be generally self-contained,
+it does occasionally refer to code files shipped with the main UCD
+distribution (in particular the example module), and it may prove
+useful to have these files available for reference.
+
+1. How to write a Mib module
+============================
+
+Introduction
+------------
+
+The design of the UCD SNMP agent has always been shaped by the desire to be
+able to extend its functionality by adding new modules. One of the earliest
+developments from the underlying CMU code base was the ability to call
+external scripts, and this is probably the simplest method of extending the
+agent.
+However, there are circumstances where such an approach is felt to be
+inappropriate - perhaps from considerations of speed, access to the
+necessary data, reliability or elegance. In such cases, the obvious solution
+is to provide C code that can be compiled into the agent itself to implement
+the desired module. Many of the more recent developments in the code
+structure have been intended to ease this process. In particular, one of the
+more recent additions to the suite is the tool mib2c. This is designed to
+take a portion of the MIB tree (as defined by a MIB file) and generate the
+code skeleton necessary to implement this. This document will cover the use
+mib2c, as well as describing the requirements and functionality of the code
+in more detail.
+
+In order to implement a new MIB module, three files are necessary, and these
+will be considered in turn. Note that, by the very nature of the task, this
+document cannot cover the details of precisely how to obtain the necessary
+information from the operating system or application. Instead, it describes
+the code framework that is needed, freeing the implementer from needing to
+understand the detailed internals of the agent, and allowing them to
+concentrate on the particular problem in hand.
+
+It may prove useful to examine some of the existing module implementations
+and examples in the light of this description, and suitable examples will be
+referred to at the appropriate points. However, it should be remembered that
+the UCD agent seeks to support a wide variety of systems, often with
+dramatically differing implementations and interfaces, and this is reflected
+in the complexity of the code. Also, the agent has developed gradually over
+the years, and there is often some measure of duplication or redundancy as a
+result.
+As the FAQ states, the official slogan of the UCD-SNMP developers is
+
+ The current implementation is non-obvious and may need to be
+ improved.
+
+This document describes the ideal, straightforward cases - real life is
+rarely so simple, and the example modules may prove easier to follow at a
+first reading.
+It is also advisable to have a compiled and installed implementation
+available before starting to extend the agent. This will make debugging and
+testing the agent much easier.
+
+A note regarding terminology - the word "module" is widely used throughout
+this document, with a number of different meanings.
+
+ * support for a new MIB,
+ i.e. the whole of the functionality that is required. This is usually
+ termed a MIB module;
+ * a self-contained subset of this, implemented as a single unit.
+ This is usually termed an implementation module (or simply "a module");
+ * the combination of such subsets, usually termed a module group.
+
+Note that the first and third of these are often synonymous - the
+difference being that a MIB module refers to the view from outside the
+agent, regarding this as a seamless whole and hiding the internal
+implementation. A "module group" is used where the internal structure is of
+more relevance, and recognises the fact that the functionality may be
+provided by a number of co-operating implementation modules.
+
+Anyway, enough waffle - on with the details: The three files needed are
+
+ * a MIB definition file;
+ * a C header file;
+ * a C implementation file.
+
+The next part looks at the MIB definition file, and how this impacts on the
+agent implementation.
+
+2. The MIB File
+===============
+
+The first file needed is the MIB file that defines the MIB module to be
+implemented.
+Strictly speaking, this is not absolutely necessary, as the agent itself
+does not make any direct use of the MIB definitions. However, it is
+advisable to start with this for three reasons:
+
+ * It provides an initial specification for what is to be implemented.
+ Code development is always easier if you know what you are meant to be
+ writing!
+ * If the new MIB file is read in with the other MIB files,
+ this lets the applications provided with the suite be used to test the
+ new agent, and report (hopefully meaningful) symbolic OIDs and values,
+ rather than the bare numeric forms.
+ (N.B: Remember to tell the application to load the new MIB. See the
+ relevant question in the FAQ)
+ * The tool mib2c uses this description to produce the two code files.
+ This is by far the easiest way to develop a new module.
+ (Note that the v5 version of mib2c is generally similar, but does
+ not correspond exactly to the v4 version described here)
+
+If the intention is to implement a 'standard' MIB module, or a
+vendor-specific one, then the construction of this file will have already
+been done for you. If the intention is to provide a totally new, private
+module, then you will need to write this yourself, in addition to the agent
+code files.
+A description of MIB file format and syntax is beyond the scope of this
+document, and most books on SNMP management should provide some information
+on this subject. One book which concentrates on this is
+
+ Understanding SNMP MIBS
+ (Perkins & McGinnis, Prentice Hall, ISBN 0-13-437708-7).
+
+This blatant plug is wholly unrelated to the fact that David Perkins is an
+active member of the development group, and is regarded as our resident
+"protocol guru and policeman". (In fact, this book concentrates on MIB
+files in rather more detail than is appropriate in more general SNMP works).
+Information on other books covering SNMP and Network Management more generally
+is available on the SimpleWeb site (among other places).
+See the FAQ for more details.
+
+Assigned OID numbers
+--------------------
+
+One word of advice - even if you are developing a totally private MIB
+module, you will still need to position this somewhere within the overall
+MIB tree. Please do NOT simply choose a location "at random". Any such is
+likely to have either been assigned to some other organisation, or may be so
+assigned some time in the future. However much you may regard your project
+as a totally internal affair, such projects have a tendency to exceed their
+expected scope, both in terms of lifetime and distribution (not to mention
+the potential OID clash if you subsequently need to use elements from the
+legitimate owner's tree).
+It is simple and cheap (i.e. free!) to obtain your own official segment of
+the MIB tree (see http://www.iana.org for an application form), and having
+done so, you then have complete global authority over it. If you have
+problems with this, it's worth contacting the development team (email:
+net-snmp-coders@lists.sourceforge.net) for advice. Please do think to the
+future, and be a good Net citizen by using a legitimately assigned OID as
+the root of your new MIB.
+
+MIB division
+------------
+
+The next point to consider, whether writing by hand or using mib2c,
+implementing an existing MIB, or writing a new one, is whether and how to
+divide up the MIB tree. This is a purely internal implementation decision,
+and will not be visible to management applications querying the agent. A
+sensible choice of partitioning will result in a simpler, clearer
+implementation, which should ease both the initial development and
+subsequent maintenance of the module.
+Unfortunately, this choice is one of the module-specific decisions, so must
+be made on a case-by-case basis. For a simple, self-contained module, it may
+well be reasonable to implement the module as a single block (examples
+include the SNMP statistics subtree RFC 1907 or the TCP subtree RFC 2011).
+More complex and diverse modules (such as the Host Resources MIB - RFC 1514)
+are more naturally considered as a number of individual sub-modules.
+Some guidelines to bear in mind when deciding on this division:
+
+ * A MIB sub-tree consisting purely of scalar objects with a common
+ OID prefix would normally be handled in a single implementation module;
+ * Separate scalar subtrees would normally be in different implementation
+ modules;
+ * A table can either be handled within the same implementation module
+ as related scalar objects in the same subtree, or in a separate
+ implementation module;
+ * Variables that rely on the same underlying data structure to retrieve
+ their values, should probably be in the same implementation module (and
+ conversely, (though less so) those that don't, shouldn't).
+
+As an initial rule of thumb, a good initial division is likely to be
+obtained by treating each table and each scalar sub-tree separately. This
+can be seen in the current agent, where most of the MIB-II modules (RFC
+1213) are implemented in separate files (see the files under mibgroup/mibII).
+Note that many of these combine scalar and table handling in the same file,
+though they are implemented using separate routines.
+ This is also the approach used by mib2c, which constructs a single pair of
+code files, but uses a separate routine for each table (and another for all
+the scalar variables).
+ Ultimately, the final consideration (concerning the underlying data) is
+the most important, and should guide the basic division. For example, the
+Host Resources Running Software and Running Software Performance modules,
+while separate in the MIB tree, use the same underlying kernel data and so
+are implemented together.
+
+MIB name
+--------
+
+The final requirement at this stage is to choose a name for each
+implementation module. This should be reasonably short, meaningful, unique
+and unlikely to clash with other (existing or future) modules. Mib2c uses
+the label of the root node of the MIB sub-tree as this name, and this is a
+reasonable choice in most cases.
+Recent changes to the agent code organisation have introduced the idea of
+module groups of related implementation modules. This is used, for example,
+to identify the constituent modules of a 'split' MIB (such as the Host
+Resources MIB), or those relating to a particular organisation (such as
+UCD).
+As with the division, this naming and grouping is a purely internal matter,
+and is really only visible when configuring and compiling the agent.
+
+So much for the MIB file. The next part considers the C header file.
+
+3. The C code header file
+=========================
+
+If the MIB file is the definition of the module for external network
+management applications (where applications includes network management
+personnel!), then the header file has traditionally served effectively the
+same purpose for the agent itself.
+Recent changes to the recommended code structure has resulted in the header
+file becoming increasingly simpler. It now simply contains definitions of the
+publically visible routines, and can be generated completely by mib2c.
+
+Function prototypes
+-------------------
+
+For those interested in the details of this file (for example, if coding a
+module by hand), then the details of these definitions are as follows. Every
+header file will have the following two function prototype definitions
+
+ extern void init_example (void);
+ extern FindVarMethod var_example;
+
+If the module includes any tables, or other collections of variables that
+are implemented in separate routines, then this second definition will be
+repeated for each of these.
+In addition, if any of the variables can be SET (and it is intended to
+implement them as such), there will be a function prototype definitions for
+each of these, of the form:
+
+ extern WriteMethod write_varName;
+
+These prototypes are in fact typedef'ed in <agent/snmp_vars.h>.
+
+Module dependencies
+-------------------
+
+This header file is also used to inform the compilation system of any
+dependancies between this module and any others. There is one utility module
+which is required by almost every module, and this is included using the
+directive
+
+ config_require( util_funcs )
+
+(which is produced automatically by mib2c). This same syntax can be used to
+trigger the inclusion of other related modules. An example of this can be
+seen in mibII/route_write.h which relies on the mibII/ip module, thus:
+
+ config_require( mibII/ip )
+
+One use of this directive is to define a module group, by supplying a header
+file consisting exclusively of such config_require directives. It can then
+be included or excluded from the agent very simply. Examples of this can be
+seen in mibgroup/mibII.h or mibgroup/host.h, which list the consituent
+sub-modules of the MIB-II and Host Resources MIBs respectively.
+
+MIB file information
+--------------------
+
+Most of the information in this file is (understandably) aimed at the network
+management agent itself. However, there is one common header file directive
+that is actually intended to affect the utility commands that are included
+within the full distribution:
+
+ config_add_mib( HOST-RESOURCES-MIB )
+
+ This is used to add the MIB file being implemented to the default list of
+MIBs loaded by such commands. This means that querying the agent will return
+informative names and values, rather than the raw numeric forms that SNMP
+actually works with. Of course, it is always possible for the utilities
+to specify that this MIB should be loaded anyway. But specifying this file
+within the module header file is a useful hint that a particular MIB should
+be loaded, without needing to ask for it explicitly.
+ Note that this will only affect the binaries compiled as part of the same
+configuration run. It will have no effect on pre-installed binaries, or
+those compiled following a different configuration specification.
+
+Magic Numbers
+-------------
+
+The other common element within the header file defines a set of "magic
+numbers" - one for each object within the implementation module. In fact,
+this can equally well appear within the main code file, as part of the
+variable structure (which will be described in the next part).
+ This is the technique used by mib2c, but most handcrafted modules have
+tended to define these as part of the header file, probably for clarity.
+
+ The only necessity is that the names and values are distinct (or more
+precisely, the values are distinct within a single variable handling routine).
+In practise, they tend to be defined using integers incrementing from 1,
+or as the same as the final sub-identifier of the corresponding MIB object
+(or indeed both, as these are frequently themselves successive integers).
+ This is not mandatory, and a counter-example can be seen in the
+example module, where two of the object form a sub-tree, and the corresponding
+magic numbers are based on the final *two* sub-identifiers (to ensure that
+the values are unique). But this construction is definitely unusual, and
+the majority of modules simply use successive integers.
+
+Header file protection
+----------------------
+
+Normally, the only other contents of the header file will be the
+#ifndef/#define/#endif statements surrounding the whole file. This is used
+to ensure that the header file is only included once by any source code file
+(or more accurately, that there is no effect if it is inadvertantly included
+a second time).
+Again, as with the rest of the header file, this is generated automatically
+by mib2c.
+
+Having finished all the preparatory work (or let mib2c deal with it), the
+next part starts to look at the code file that actually implements the
+module.
+
+4. Core structure of the implementation code
+============================================
+
+The core work of implementing the module is done in the C code file. As
+indicated earlier, much of the detail of this will be dependent on the
+particular module being implemented, and this can only be described by the
+individual programmer concerned.
+However, there is a fairly clearly defined framework that the implementation
+will need to follow, though this varies slightly depending on the style of
+the module being implemented (in particular whether it forms a table or a
+series of individual values). The differences will be covered in the
+following pages, but we first need to consider the overall shape of the
+framework, and the elements that are common to all styles. These are
+essentially the compulsory routines, the common header definitions, and
+assorted initialisation code.
+As with the header file, most of this will be generated automatically by
+mib2c.
+
+Standard includes
+-----------------
+
+Certain header files are either compulsory, or required so frequently that
+they should be included as a matter of course. These are as follows:
+
+ #include <config.h> // local SNMP configuration details
+ #include "mib_module_config.h" // list of which modules are supported
+ #if HAVE_STDLIB_H
+ #include <stdlib.h>
+ #endif
+ #if HAVE_STRING_H
+ #include <string.h>
+ #else
+ #include <strings.h>
+ #endif
+
+ #include <sys/types.h>
+
+All of these will usually be the first files to be included.
+
+ #include "mibincl.h" // Standard set of SNMP includes
+ #include "util_funcs.h" // utility function declarations
+ #include "read_config.h" // if the module uses run-time
+ // configuration controls
+ #include "auto_nlist.h" // structures for a BSD-based
+ // kernel using nlist
+ #include "system.h"
+
+ #include "name.h" // the module-specific header
+
+These conventionally come at the end of the list of includes. In between
+will come all the standard system-provided header files required for the
+library functions used in the file.
+
+Module definition
+-----------------
+
+Much of the code defining the contents of the MIB has traditionally been
+held in the header file. However, much of this has slowly migrated to the
+code file, and this is now the recommended location for it (as typified by
+the output of mib2c).
+ The main element of this is a variable structure specifying the details of
+the objects implemented. This takes the form of an unconstrained array of
+type struct variableN (where N is the length of the longest suffix in the
+table). Thus
+
+ struct variable2 example_variables[] = {
+ <individual entries go here>
+ };
+
+Each entry corresponds to one object in the MIB tree (or one column in the
+case of table entries), and these should be listed in increasing OID order.
+A single entry consists of six fields:
+
+ * a magic number (the #defined integer constant described above)
+ * a type indicator (from the values listed in <snmplib/snmp_impl.h>)
+ * an access indicator (essentially RWRITE or RONLY)
+ * the name of the routine used to handle this entry
+ * the length of the OID suffix used, and
+ * an array of integers specifying this suffix (more on this in a moment)
+
+Thus a typical variable entry would look like:
+
+ { EXAMPLESTRING, ASN_OCTET_STR, RONLY, var_example, 1, {1}}
+
+If the magic numbers have not been defined in the header file, then they
+should be defined here, usually comming immediately before the corresponding
+variable entry. This is the technique used by mib2c.
+
+Note that in practise, only certain sizes of the structure variableN
+are defined (listed in <agent/var_struct.h>), being sufficient to meet the
+common requirements. If your particular module needs a non-supported value,
+the easiest thing is simply to use the next largest value that is supported.
+
+The module also needs to declare the location within the MIB tree where
+it should be registered. This is done using a declaration of the form
+
+ oid example_variables_oid[] = { 1,3,6,1,4,1,2021,254 }
+
+where the contents of the array give the object identifier of the root of
+the module.
+
+Module initialisation
+---------------------
+
+Many modules require some form of initialisation before they can start
+providing the necessary information. This is done by providing a routine
+called init_{name} (where {name} is the name of the module).
+This routine is theoretically optional, but in practise is required to
+register this module with the main agent at the very least. This specifies
+the list of variables being implemented (from the variableN structure)
+and declare where these fit into the overall MIB tree.
+
+This is done by using the REGISTER_MIB macro, as follows:
+
+ REGISTER_MIB( "example", example_variables, variable2,
+ example_variables_oid );
+
+where "example" is used for identification purposed (and is usually the name
+being used for the module), example_variables is the structure defining the
+variables being implemented, variable2 is the type used for this structure,
+and example_variables_oid is the location of the root.
+
+In fact, this macro is simply a wrapper round the routine register_mib(),
+but the details of this can safely be ignored, unless more control over the
+registration is required.
+
+One common requirement, particularly on older operating systems or for the
+more obscure areas of the system, is to be able to read data directly from
+kernel memory. The preparation for this is typically done here by one or
+more statements of the form
+
+ #ifdef {NAME}_SYMBOL
+ auto_nlist( {NAME}_SYMBOL, 0, 0);
+ #endif
+
+where {NAME}_SYMBOL is defined as part of the system-specific configuration,
+to be the name of the appropriate kernel variable or data structure. (The
+two 0 values are because the kernel information is simply being primed at
+this point - this call will be reused later when the actual values are
+required). Note that this is probably the first thing described so far which
+isn't provided by mib2c!
+
+Other possibilities for initialisation may include registering config file
+directive handlers (which are documented in the read_config(5) man page), and
+registering the MIB module (either in whole or in part) in the sysOR table.
+The first of these is covered in the example module, and the second in many
+of the other modules within the main UCD distribution.
+
+Variable handling
+-----------------
+
+The other obligatory routine is that which actually handles a request for a
+particular variable instance. This is the routine that appeared in the
+variableN structure, so while the name is not fixed, it should be the same
+as was used there.
+This routine has six parameters, which will be described in turn.
+
+Four of these parameters are used for passing in information about the
+request, these being:
+
+ struct variable *vp;
+ // The entry in the variableN array from the
+ // header file, for the object under consideration.
+ // Note that the name field of this structure has been
+ // completed into a fully qualified OID, by prepending
+ // the prefix common to the whole array.
+ oid *name; // The OID from the request
+ int *length; // The length of this OID
+ int exact; // A flag to indicate whether this is an exact
+ // request (GET/SET) or an 'inexact' one (GETNEXT)
+
+Four of the parameters are used to return information about the answer.
+The function also returns a pointer to the actual data for the variable
+requested (or NULL if this data is not available for any reason).
+The other result parameters are:
+
+ oid *name; // The OID being returned
+ int *length; // The length of this OID
+ int *var_len; // The length of the answer being returned
+ WriteMethod **write_method;
+ // A pointer to the SET function for this variable
+
+Note that two of the parameters (name and length) serve a dual purpose,
+being used for both input and output.
+
+The first thing that this routine needs to do is to validate the request, to
+ensure that it does indeed lie in the range implemented by this particular
+module. This is done in slightly different ways, depending on the style of
+the module, so this will be discussed in more detail later.
+ At the same time, it is common to retrieve some of the information needed
+for answering the query.
+
+Then the routine uses the Magic Number field from the vp parameter to determine
+which of the possible variables being implemented is being requested. This is
+done using a switch statement, which should have as many cases as there are
+entries in the variableN array (or more precisely, as many as specify this
+routine as their handler), plus an additional default case to handle an
+erroneous call.
+Each branch of the switch statement needs to ensure that the return
+parameters are filled in correctly, set up a (static) return variable with
+the correct data, and then return a pointer to this value. These can be done
+separately for each branch, or once at the start, being overridden in
+particular branches if necessary.
+
+In fact, the default validation routines make the assumption that the
+variable is both read-only, and of integer type (which includes the COUNTER
+and GAUGE types among others), and set the return paramaters write_method and
+var_len appropriately. These settings can then be corrected for those cases
+when either or both of these assumptions are wrong. Examples of this can be
+seen in the example module.
+EXAMPLEINTEGER is writeable, so this branch sets the write_method parameter,
+and EXAMPLEOBJECTID is not an integer, so this branch sets the var_len
+parameter. In the case of EXAMPLESTRING, both assumptions are wrong, so this
+branch needs to set both these parameters explicitly.
+
+Note that because the routine returns a pointer to a static result, a
+suitable variable must be declared somewhere for this. Two global variables
+are provided for this purpose - long_return (for integer results) and
+return_buf (for other types). This latter is a generic array (of type
+u_char) that can contain up to 256 bytes of data. Alternatively, static
+variables can be declared, either within the code file, or local to this
+particular variable routine. This last is the approach adopted by mib2c,
+which defines four such local variables, (long_ret, string, objid and c64).
+
+Mib2c requirements
+------------------
+
+Most of the code described here is generated by mib2c. The main exceptions
+(which therefore need to be provided by the programmer) are
+
+ * Any initialisation, other than the basic registration
+ (including kernel data initialisation, config file handling, or sysOR
+ registration).
+ * Retrieving the necessary data, and setting the appropriate return
+ value correctly.
+ * The var_len (and possibly write_method) return parameters for variable
+ types that are not recognised by mib2c
+ * The contents of any write routines (see later).
+
+Everything else should be useable as generated.
+
+This concludes the preliminary walk-through of the general structure of the
+C implementation. To fill in the details, we will need to consider the
+various styles of module separately. The next part will look at scalar (i.e.
+non-table based) modules.
+
+5. Non-table-based modules
+==========================
+
+Having looked at the general structure of a module implementation, it's now
+time to look at this in more detail. We'll start with the simplest style of
+module - a collection of independent variables. This could easily be
+implemented as a series of completely separate modules - the main reason for
+combining them is to avoid the proliferation of multiple versions of very
+similar code.
+
+Recall that the variable handling routine needs to cover two distinct
+purposes - validation of the request, and provision of the answer. In this
+style of module, these are handled separately. Once again, mib2c does much
+of the donkey work, generating the whole of the request validation code (so
+the description of this section can be skipped if desired), and even
+providing a skeleton for returning the data. This latter still requires some
+input from the programmer, to actually return the correct results (rather
+than dummy values).
+
+Request Validation
+------------------
+
+This is done using a standard utility function header_generic. The
+parameters for this are exactly the same as for the main routine, and are
+simply passed through directly. It returns an integer result, as a flag to
+indicate whether the validation succeeded or not.
+If the validation fails, then the main routine should return immediately,
+leaving the parameters untouched, and indicate the failure by returning a
+NULL value. Thus the initial code fragment of a scalar-variable style
+implementation will typically look like:
+
+ u_char *
+ var_system(vp, name, length, exact, var_len, write_method)
+ {
+ if (header_generic(vp, name, length, exact, var_len, write_method)
+ == MATCH_FAILED )
+ return NULL;
+
+ [ etc, etc, etc ]
+ }
+
+Although the utility function can be used as a "black box", it's worth
+looking more closely at exactly what it does (since the table-handling
+modules will need to do something fairly similar). It has two (or possibly
+three) separate functions:
+
+ * checking that the request is valid,
+ * setting up the OID for the result,
+ * and (optionally) setting up default values for the other return
+ parameters.
+
+In order to actually validate the request, the header routine first needs to
+construct the OID under consideration, in order to compare it with that
+originally asked for. The driving code has already combined the OID prefix
+(constant throughout the module) with the entry-specific suffix, before
+calling the main variable handler. This is available via the name field of
+the parameter vp. For a scalar variable, completing the OID is therefore
+simply a matter of appending the instance identifier 0 to this. The full OID
+is built up in a local oid array newname defined for this purpose.
+This gives the following code fragment:
+
+ int
+ header_generic(vp, name, length, exact, var_len, write_method)
+ {
+ oid newname[MAX_OID_LEN];
+
+ memcpy((char *)newname, (char *)vp->name,
+ (int)vp->namelen * sizeof(oid));
+ newname[ vp->namelen ] = 0;
+
+ :
+ }
+
+Having formed the OID, this can then be compared against the variable
+specified in the original request, which is available as the name parameter.
+This comparison is done using the snmp_oid_compare function, which takes the
+two OIDs (together with their respective lengths), and returns -1, 0 or 1
+depending on whether the first OID precedes, matches or follows the second.
+
+In the case of an 'exact' match (i.e. a GET/SET/etc), then the request is
+only valid if the two OIDs are identical (snmp_oid_compare returns 0). In
+the case of a GETNEXT (or GETBULK) request, it's valid if the OID being
+considered comes after that of the original request (snmp_oid_compare
+returns -1).
+
+This gives the code fragment
+
+ result = snmp_oid_compare(name, *length, newname, (int)vp->namelen + 1);
+ // +1 because of the extra instance sub-identifier
+ if ((exact && (result != 0)) // GET match fails
+ || (!exact && (result >= 0))) // GETNEXT match fails
+ return(MATCH_FAILED);
+
+Note that in this case, we're only interested in the single variable
+indicated by the vp parameter. The fact that this module may well implement
+other variables as well is ignored. The 'lexically next' requirement of the
+GETNEXT request is handled by working through the variable entries in order
+until one matches. And yes, this is not the most efficient implementation
+possible!
+Note that in releases prior to 3.6, the snmp_oid_compare function was called
+simply compare.
+
+Finally, having determined that the request is valid, this routine must
+update the name and length parameters to return the OID being processed. It
+also sets default values for the other two return parameters.
+
+ memcpy( (char *)name,(char *)newname,
+ ((int)vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ *write_method = 0; // Non-writeable
+ *var_len = sizeof(long); // default to integer results
+ return(MATCH_SUCCEEDED);
+
+These three code fragments combine to form the full header_generic code
+which can be seen in the file util_funcs.c
+
+Note: This validation used to be done using a separate function for each
+module (conventionally called header_{name}), and many modules may still be
+coded in this style. The code for these are to all intents and purposes
+identical to the header_generic routine described above.
+
+Data Retrieval
+--------------
+
+The other main job of the request handling routine is to retrieve any
+necessary data, and return the appropriate answer to the original request.
+This must be done even if mib2c is being used to generate the framework of
+the implementation. As has been indicated earlier, the different cases are
+handled using a switch statement, with the Magic Number field of the vp
+parameter being used to distinguish between them.
+The data necessary for answering the request can be retrieved for each
+variable individually in the relevant case statement (as is the case with
+the system group), or using a common block of data before processing the
+switch (as is done for the ICMP group, among others).
+
+With many of the modules implemented so far, this data is read from a kernel
+structure. This can be done using the auto_nlist routine already mentioned,
+providing a variable in which to store the results and an indication of its
+size (see the !HAVE_SYS_TCPIPSTATS_H case of the ICMP group for an example).
+Alternatively, there may be ioctl calls on suitable devices, specific system
+calls, or special files that can be read to provide the necessary
+information.
+
+If the available data provides the requested value immediately, then the
+individual branch becomes a simple assignment to the appropriate static
+return variable - either one of the global static variables (e.g. long_return)
+or the local equivalents (such as generated by mib2c).
+Otherwise, the requested value may need to be calculated by combining two or
+more items of data (e.g. IPINHDRERRORS in mibII/ip.c) or by applying a
+mapping or other calculation involving available information (e.g.
+IPFORWARDING from the same group).
+
+In each of these cases, the routine should return a pointer to the result
+value, casting this to the pseudo-generic (u_char *)
+
+So much for the scalar case. The next part looks at how to handle simple
+tables.
+
+6. Simple tables
+================
+
+Having considered the simplest style of module implementation, we now turn
+our attention to the next style - a simple table. The tabular nature of
+these is immediately apparent from the MIB definition file, but the
+qualifier "simple" deserves a word of explanation.
+A simple table, in this context, has four characteristics:
+
+ 1. It is indexed by a single integer value;
+ 2. Such indices run from 1 to a determinable maximum;
+ 3. All indices within this range are valid;
+ 4. The data for a particular index can be retrieved directly
+ (e.g. by indexing into an underlying data structure).
+
+If any of the conditions are not met, then the table is not a pure simple
+one, and the techniques described here are not applicable. The next section
+of this guide will cover the more general case. (In fact, it may be possible
+to use the bulk of the techniques covered here, though special handling will
+be needed to cope with the invalid assumption or assumptions). Note that
+mib2c assumes that all tables are simple.
+
+As with the scalar case, the variable routine needs to provide two basic
+functions - request validation and data retrieval.
+
+Validation
+----------
+
+This is provided by the shared utility routine header_simple_table. As with
+the scalar header routine, this takes the same parameters as the main
+variable routine, with one addition - the maximum valid index. Mib2c
+generates a dummy token for this, which must be replaced by the appropriate
+value.
+As with the header routine, it also returns an indication of whether the
+request was valid, as well as setting up the return parameters with the
+matching OID information, and defaults for var_len and write_method.
+Note that in releases prior to 3.6, this job was performed by the routine
+checkmib. However, the return values of this were the reverse of those for
+generic_header and header_simple_table. A version of checkmib is still
+available for compatability purposes, but you are encouraged to use
+header_simple_table instead.
+
+The basic code fragment (see ucd-snmp/disk.c) is therefore of the form:
+
+ unsigned char *
+ var_extensible_disk(vp, name, length, exact, var_len, write_method)
+ {
+ if (header_simple_table(vp,name,length,exact,var_len,write_method,numdisks)
+ == MATCH_FAILED)
+ return(NULL);
+
+ [ etc, etc, etc ]
+
+ }
+
+Note that the maximum index value parameter does not have to be a
+permanently fixed constant. It specifies the maximum valid index at the time
+the request is processed, and a subsequent request may have a different
+maximum.
+An example of this can be seen in mibII/sysORTable.c where the table is held
+purely internally to the agent code, including its size (and hence the
+maximum valid index). This maximum could also be retrieved via a system
+call, or via a kernel data variable.
+
+Data Retrieval
+--------------
+
+As with the scalar case, the other required function is to retrieve the data
+requested. However, given the definition of a simple table this is simply a
+matter of using the single, integer index sub-identifier to index into an
+existing data structure. This index will always be the last index of the OID
+returned by header_simple_table, so can be obtained as name[*length-1].
+A good example of this type of table can be seen in ucd-snmp/disk.c
+
+With some modules, this underlying table may be relatively large, or only
+accessible via a slow or cumbersome interface. The implementation described
+so far may prove unacceptably slow, particularly when walking a MIB tree
+requires the table to be loaded afresh for each variable requested.
+
+In these circumstances, a useful technique is to cache the table when it is
+first read in, and use that cache for subsequent requests. This can be done
+by having a separate routine to read in the table. This uses two static
+variables, one a structure or array for the data itself, and the other an
+additional timestamp to indicate when the table was last loaded. When a call
+is made to this routine to "read" the table, it can first check whether the
+cached table is "new enough". If so, it can return immediately, and the
+system will use the cached data.
+Only if the cached version is sufficiently old that it's probably out of
+date, is it necessary to retrieve the current data, updating the cached
+version and the timestamp value.
+This is particularly useful if the data itself is relatively static, such as
+a list of mounted filesystems. There is an example of this technique in the
+Host Resources implementation.
+
+As with the scalar case, mib2c simply provides placeholder dummy return
+values. It's up to the programmer to fill in the details.
+
+The next part concludes the examination of the detailed implementation by
+looking at more general tables.
+
+7. General Tables
+=================
+
+Some table structures are not suitable for the simple table approach, due to
+the failure of one or more of the assumptions listed earlier. Perhaps they
+are indexed by something other than a single integer (such as a 4-octet IP
+address), or the maximum index is not easily determinable (such as the
+interfaces table), or not all indices are valid (running software), or the
+necessary data is not directly accessible (interfaces again).
+In such circumstances, a more general approach is needed. In contrast with
+the two styles already covered, this style of module will commonly combine
+the two functions of request validation and data retrieval. Note that mib2c
+will assume the simple table case, and this will need to be corrected.
+
+General table algorithm
+-----------------------
+
+The basic algorithm is as follows:
+
+ Perform any necessary initialization, then walk through the
+ underlying instances, retrieving the data for each one, until the
+ desired instance is found. If no valid entry is found, return
+ failure.
+
+For an exact match (GET and similar), identifying the desired instance is
+trivial - construct the OID (from the 'vp' variable parameter and the index
+value or values), and see whether it matches the requested OID.
+For GETNEXT, the situation is not quite so simple. Depending on the
+underlying representation of the data, the entries may be returned in the
+same order as they should appear in the table (i.e. lexically increasing by
+index). However, this is not guaranteed, and the natural way of retrieving
+the data may be in some "random" order. In this case, then the whole table
+needs to be traversed for each request. in order to determine the
+appropriate successor.
+This random order is the worst case, and dictates the structure of the code
+used in most currently implemented tables. The ordered case can be regarded
+as a simplification of this more general one.
+
+The algorithm outlined above can now be expanded into the following
+pseudo-code:
+
+ Init_{Name}_Entry(); // Perform any necessary initialisation
+
+ while (( index = Get_Next_{Name}_Entry() ) != EndMarker ) {
+ // This steps through the underlying table,
+ // returning the current index,
+ // or some suitable end-marker when all
+ // the entries have been examined.
+ // Note that this routine should also return the
+ // data for this entry, either via a parameter
+ // or using some external location.
+
+ construct OID from vp->name and index
+ compare new OID and request
+ if valid {
+ save current data
+ if finished // exact match, or ordered table
+ break; // so don't look at any more entries
+
+ }
+
+ // Otherwise, we need to loop round, and examine
+ // the next entry in the table. Either because
+ // the entry wasn't valid for this request,
+ // or the entry was a possible "next" candidate,
+ // but we don't know that there isn't there's a
+ // better one later in the table.
+ }
+
+ if no saved data // Nothing matched
+ return failure
+
+ // Otherwise, go on to the switch handling
+ // we've already covered in the earlier styles.
+
+This is now very close to the actual code used in many current
+implementations (such as the the routine header_ifEntry in
+mibII/interfaces.c). Notice that the pseudo-code fragment if valid expands
+in practise to
+
+ if ((exact && (result == 0)) ||
+ // GET request, and identical OIDs
+ (!exact && (result < 0)) )
+ // GETNEXT, and candidate OID is later
+ // than requested OID.
+
+This is a very common expression, that can be seen in most of the table
+implementations.
+
+Notice also that the interfaces table returns immediately the first valid
+entry is found, even for GETNEXT requests. This is because entries are
+returned in lexical order, so the first succeeding entry will be the one
+that's required.
+(As an aside, this also means that the underlying data can be saved
+implicitly within the 'next entry' routine - not very clean, but it saves
+some unnecessary copying).
+
+The more general case can be seen in the TCP and UDP tables (see mibII/tcp.c
+and mibII/udp.c). Here, the if valid fragment expands to:
+
+ if ( exact && (result == 0)) {
+ // save results
+ break;
+ }
+ else if (!exact && (result < 0)) {
+ if ( .... ) { // no saved OID, or this OID
+ // precedes the saved OID
+ // save this OID into 'lowest'
+ // save the results into Lowinpcb
+ // don't break, since we still need to look
+ // at the rest of the table
+ }
+ }
+
+The GET match handling is just as we've already seen - is this the requested
+OID or not. If so, save the results and move on to the switch statement.
+ The GETNEXT case is more complicated. As well as considering whether this
+is a possible match (using the same test we've already seen), we also have to
+check whether this is a better match than anything we've already seen. This
+is done by comparing the current candidate (newname) with the best match found
+so far (lowest).
+ Only if this extra comparison shows that the new OID is earlier than the
+saved one, do we need to save both the new OID, and any associated data
+(such as the inpcb block, and state flag). But having found one better
+match, we don't know that there isn't an even better one later on. So we
+can't break out of the enclosing loop - we need to keep going and examine
+all the remaining entries of the table.
+
+These two cases (the TCP and UDP tables) also show a more general style of
+indexing. Rather than simply appending a single index value to the OID
+prefix, these routines have to add the local four-octet IP address plus port
+(and the same for the remote end in the case of the TCP table). This is the
+purpose of the op and cp section of code that precedes the comparison.
+
+These two are probably among the most complex cases you are likely to
+encounter. If you can follow the code here, then you've probably cracked the
+problem of understanding how the agent works.
+
+Finally, the next part discusses how to implement a writable (or SETable)
+object in a MIB module.
+
+8. How to implement a SETable object
+====================================
+
+Finally, the only remaining area to cover is that of setting data - the
+handling of SNMPSET. Particular care should be taken here for two reasons.
+
+Firstly, any errors in the earlier sections can have limited effect. The
+worst that is likely to happen is that the agent will either return invalid
+information, or possibly crash. Either way, this is unlikely to affect the
+operation of the workstation as a whole. If there are problems in the
+writing routine, the results could be catastrophic (particularly if writing
+data directly into kernel memory).
+
+Secondly, this is the least well understood area of the agent, at least by
+the author. There are relatively few variables that are defined as READ-WRITE
+in the relevant MIBs, and even fewer that have actually been implemented as
+such. I'm therefore describing this from a combination of my understanding
+of how SETs ought to work, personal experience of very simple SET handling
+and what's actually been done by others (which do not necessarily coincide).
+
+There are also subtle differences between the setting of simple scalar
+variables (or individual entries within a table), and the creation of a new
+row within a table. This will therefore be considered separately.
+
+With these caveats, and a healthy dose of caution, let us proceed. Note that
+the UCD-SNMP development team can accept no responsibility for any damage or
+loss resulting from either following or ignoring the information presented
+here. You coded it - you fix it!
+
+Write routine
+-------------
+
+The heart of SET handling is the write_method parameter from the variable
+handling routine. This is a pointer to the relevant routine for setting the
+variable in question. Mib2c will generate one such routine for each setable
+variable. This routine should be declared using the template
+
+ int
+ write_variable(
+ int action,
+ u_char *var_val,
+ u_char var_val_type,
+ int var_val_len,
+ u_char *statP,
+ oid *name,
+ int name_len );
+
+Most of these parameters are fairly self explanatory:
+The last two hold the OID to be set, just as was passed to the main variable
+routine.
+
+The second, third and fourth parameters provide information about the new
+desired value, both the type, value and length. This is very similar to the
+way that results are returned from the main variable routine.
+
+The return value of the routine is simply an indication of whether the
+current stage of the SET was successful or not. We'll come back to this in a
+minute. Note that it is the responsibility of this routine to check that the
+OID and value provided are appropriate for the variable being implemented.
+This includes (but is not limited to) checking:
+
+ * the OID is recognised as one this routine can handle
+ (this should be true if the routine only handles the one variable, and
+ there are no errors in the main variable routine or driving code, but
+ it does no harm to check).
+ * the value requested is the correct type expected for this OID
+ * the value requested is appropriate for this OID
+ (within particular ranges, suitable length, etc, etc)
+
+There are two parameters remaining to be considered.
+
+The fifth parameter, statP, is the value that would be returned from a GET
+request on this particular variable. It could be used to check that the
+requested new value is consistent with the current state, but its main use
+is to denote that a new table row is being created.
+In most cases (particularly when dealing with scalar values or single elements
+of tables), you can normally simply ignore this parameter.
+
+Actions
+-------
+
+The final parameter to consider is the first one - action. To understand
+this, it's necessary to know a bit about how SETs are implemented.
+The design of SNMP calls for all variables in a SET request to be done "as
+if simultaneously" - i.e. they should all succeed or all fail. However, in
+practise, the variables are handled in succession. Thus, if one fails, it
+must be possible to "undo" any changes made to the other variables in the
+request.
+This is a well understood requirement in the database world, and is usually
+implemented using a "multi-stage commit". This is certainly the mechanism
+expected within the SNMP community (and has been made explicit in the work
+of the AgentX extensibility group). In other words, the routine to handle
+setting a variable will be called more than once, and the routine must be
+able to perform the appropriate actions depending on how far through the
+process we currently are. This is determined by the value of the action
+parameter.
+
+This is implemented using three basic phases:
+
+RESERVE is used to check the syntax of all the variables provided, that the
+values being set are sensible and consistent, and to allocate any resources
+required for performing the SET. After this stage, the expectation is that
+the set ought to succeed, though this is not guaranteed.
+(In fact, with the UCD agent, this is done in two passes - RESERVE1, and
+RESERVE2, to allow for dependancies between variables).
+
+If any of these calls fail (in either pass) the write routines are called
+again with the FREE action, to release any resources that have been
+allocated. The agent will then return a failure response to the requesting
+application.
+
+Assuming that the RESERVE phase was successful, the next stage is indicated
+by the action value ACTION. This is used to actually implement the set
+operation. However, this must either be done into temporary (persistent)
+storage, or the previous value stored similarly, in case any of the
+subsequent ACTION calls fail.
+ This can be seen in the example module, where both write routines have
+static 'old' variables, to hold the previous value of the relevant object.
+
+If the ACTION phase does fail (for example due to an apparently valid, but
+unacceptable value, or an unforeseen problem), then the list of write
+routines are called again, with the UNDO action. This requires the routine
+to reset the value that was changed to its previous value (assuming it was
+actually changed), and then to release any resources that had been
+allocated. As with the FREE phase, the agent will then return an indication
+of the error to the requesting application.
+
+Only once the ACTION phase has completed successfully, can the final COMMIT
+phase be run. This is used to complete any writes that were done into
+temporary storage, and then release any allocated resources. Note that all
+the code in this phase should be "safe" code that cannot possibly fail (cue
+hysterical laughter). The whole intent of the ACTION/COMMIT division is that
+all of the fallible code should be done in the ACTION phase, so that it can
+be backed out if necessary.
+
+Table row creation
+------------------
+
+What about creating new rows in a table, I hear you ask. Good Question.
+This case can often be detected by the fact that a GET request would have
+failed, and hence the fifth parameter, statP, will be null. This contrasts
+with changing the values of an element of an existing row, when the statP
+parameter would hold the previous value.
+
+The details of precisely how to create a new row will clearly depend on the
+underlying format of the table. However, one implementation strategy would
+be as follows:
+
+ * The first column object to be SET would return a null value from the
+ var_name routine. This null statP parameter would be the signal
+ to create a new temporary instance of the underlying data structure,
+ filled with dummy values.
+ * Subsequent column objects would return pointers to the appropriate
+ field of this new data structure from the var_name routine,
+ which would then be filled in by the write routine.
+ * Once all the necessary fields had been SET, the completed temporary
+ instance could be moved into the "standard" structure (or copied,
+ or otherwise used to set things up appropriately).
+
+However, this is purely a theoretical strategy, and has not been tried
+by the author. No guarantees are given as to whether this would actually
+work. There are also questions regarding how to handle incomplete
+or overlapping SET requests.
+Anyone who has experience of doing this, please get in touch!
+
+ ------------------------------------------------------------------------
+And that's it. Congratulations for getting this far. If you understand
+everything that's been said, then you now know as much as the rest of us
+about the inner workings of the UCD-SNMP agent. (Well, very nearly).
+All that remains is to try putting this into practise. Good luck!
+
+And if you've found this helpful, gifts of money, chocolate, alcohol, and
+above all feedback, would be most appreciated :-)
+
+ ------------------------------------------------------------------------
+Copyright 1999, 2000 - D.T.Shield.
+Not to be distributed without the explicit permission of the author.
diff --git a/cleopatre/application/spidnetsnmp/CHANGES b/cleopatre/application/spidnetsnmp/CHANGES
new file mode 100644
index 0000000000..a2120fb503
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/CHANGES
@@ -0,0 +1,382 @@
+This file contains a list of specific bugs that have been fixed, and patches
+that have been applied in released versions. Please see the NEWS file for
+a summary of the major changes, and the ChangeLog file for a comprehensive
+listing of all changes made to the code.
+
+* 5.4.2.1 *
+ snmpd:
+ - SECURITY ISSUE: A bug in the getbulk handling code could let
+ anyone with even minimal access crash the agent.
+
+* 5.4.2 *
+
+ snmplib:
+ - [BUG 1793545]: Take the name from the sockaddr_un
+ - [BUG 1795840]: Signed 32-bit truncation logged as debug message
+ - [BUG 1801835]: Support multiple default transports for an app.
+ - [BUG 1866655]: Handle parsing invalid OID subidentifiers
+ - [BUG 1958041]: Ensure IDs are not truncated.
+ - [BUG 2027834]: Extend string print buffer by the minimum necessary
+ - [BUG Coverity #183]: fix memory leak if IP_PKTINFO fails
+ - [PATCH 1768285]: Count MIB files correctly in add_mibdir()
+ - [PATCH 1775124]: Fix clientaddr functionality
+ - [PATCH 1806336]: fix -LS option parsing
+ - [PATCH 1807489]: fix ignoring of display hints.
+ - [PATCH 1811469]: read_config_files_in_path() reads past malloc'd buffer
+ - [PATCH 1875022]: improve callback locking mechanisms
+ - [PATCH 1895927]: change obsolete recv/send to recvfrom/sendto
+ - [PATCH 1898204], [BUF 1898198]: fix segfault when parsing broken mibs.
+ - [PATCH 1921861]: Avoid endless loop after truncating 64bit int
+ - [PATCH 2003450]: Fix a couple of 64-bit problems
+ - Change CONTAINER_INSERT to not do partial inserts in containers
+ with multiple indices when one insert fails.
+ - Do not leak memory whenever an udp address is formatted.
+ - Do not try to look up empty strings as hostnames for IPv6
+ - Fix registering of multiple premib config handlers
+ - Fix potential buffer overflow in sprintf for UDP/IPv6
+
+ snmpd:
+ - [BUG 1557372]: Realign hrFSStorageIndex with hrStorageTable
+ - [BUG 1748206]: Protect against failures to open /etc/mtab (or equiv)
+ - [BUG 1758212]: Handling missing variable types (IpAddress,Counter,Opaque)
+ - [BUG 1771221]: Retain ifLastChange information on data reload.
+ - [BUG 1792890]: include CIFS mounts when skipping remote filesystems
+ - [BUG 1822360]: Fix spinlock helper error handling.
+ - [BUG 1851047]: Don't over-process failed watcher requests
+ - [BUG 1912647]: Fix memory leak following failed request
+ - [BUG 1931391]: Fix reporting of Memory buffers and cached memory
+ - [BUG 2003144]: Increase size of AgentX packet
+ - [BUG 2006786]: Interface name can have more than 8 characters
+ - [BUG 2018031]: Don't probe engineID in internal monitor sessions
+ - [BUG 2023803]: Remove irrelevant configure dependency (HP-UX 11)
+ - [PATCH 1716548]: Fix help output for -D
+ - [PATCH 1744157]: Report duplicate "extend/exec" identifiers.
+ - [PATCH 1746831]: fix process checking race condition
+ - [PATCH 1752934]: Fix off-by-one qsort error in table utilities.
+ - [PATCH 1753437]: Fix error index on failing SET requests
+ - [PATCH 1753449]: Fix AgentX error propagation
+ - [PATCH 1753463]: Fix AgentX subagent ping alarm handling
+ - [PATCH 1758208]: Fix memory leak
+ - [PATCH 1774612]: More resilient process status handling
+ - [PATCH 1783733]: Include version info in hrSWInst table (solaris)
+ - [PATCH 1784747]: Fix ip adresses on 64 bit systems
+ - [PATCH 1823800]: release and reload all trap destinations on SIGHUP
+ - [PATCH 1826088]: Use the right interface to read the netmask
+ - [PATCH 1826102]: support longer interface names on linux
+ - [PATCH 1828839]: handle of disk mount paths with embedded spaces
+ - [PATCH 1849903]: do not spam log with asserts when XEN is used
+ - [PATCH 1866823]: truncate 32 bit counter values on 64 bit machines
+ - [PATCH 1879261]: Add inactive memory to cached report (freebsd)
+ - [PATCH 1893468]: fixed registration of OIDs with ranges
+ - [PATCH 1896118]: fix ifTable 32bit counters on linux
+ - [PATCH 1909813]: fix table_iterator hint for SORTED tables
+ - [PATCH 1944581]: Don't core dump on long string index values.
+ - [PATCH 1951996]: Fix for CPU stats on FreeBSD
+ - [PATCH 1967194]: Recognise NFS4 mounts
+ - [PATCH 2014204]: Support -g {groupname}
+ - [PATCH 2022936]: Fix AgentX Counter64 decoding on 64-bit architectures
+ - [PATCH 2023633]: add SCTP-MIB implementation (Linux only)
+ - Enforce the lower limit on scalar_groups
+ - suppress annoying "registration != duplicate" warning for root oids
+ - Handle device names with embedded spaces in UCD-SNMP-MIB (dskDevice)
+
+ snmptrapd:
+ - [BUG 1955227]: Memory leak for embedded Perl on x86_64
+ - [PATCH 1746992]: Improve snmptrapd access-control error messages.
+ - [PATCH 1767725]: Close all non standard file handles
+
+ build:
+ - [BUG 1802833]: Ensure snmptrapd builds with --disable-snmpv1/2c
+ - [BUG 1823381]: Valid MIB directory search path on Windows
+ - [BUG 1872266]: PERLCC check fails for CC with options
+ - [BUG 1995172]: fix --without-elf configure usage
+ - [BUG 2014526]: Win32: snmpv3-security-includes.h not installed
+ - [BUG 2023803]: Compilation problems on HP-UX 11.31
+ - [PATCH 1681035]: improve net-snmp-config /bin/sh compatibility
+ - [PATCH 1899762]: Tweak embedded_perl configure checks.
+ - add --with-temp-file-pattern configure option
+ - Add support for winExtDLL to build.bat (win32)
+ - Disable agent tests if built without necessary mib modules
+ - Limit the use of _KERNEL definitions in configure tests to match
+ the use of _KERNEL in our codebase
+ - Update to libtool 1.5.26
+
+ mib2c:
+ - [BUG 1874059,1737068]: Handle MIB objects with embedded hyphens
+ - [PATCH 1914398]: install mib2c.perl.conf
+
+ documentation:
+ - [BUG 2027129]: fix typo in snmpcmd.1
+
+ misc:
+ - Avoid calling debug macros with too few/many arguments.
+ - enhance snmpnetstat test to check tcpTable in TCP mode
+
+ perl:
+ - [BUG 1606062]: perl bulkwalk (async) coredump
+ - [BUG 1747733]: More robust handling of undefined values.
+ - [BUG 1826174]: Check for buffer overflow when printing values.
+ - [BUG 1834539]: Consistent handling of OID parsing.
+ - [PATCH 1811463]: perl async callback coredump
+ - [PATCH 1914393]: registerAgent can now be run multiple times
+ - [PATCH 1914643]: fix issues with embedded perl
+ - [PATCH 1914645]: better end of mib support
+ - [PATCH 1920390]: fix registration of tables with .0 as IIDs
+ - [PATCH 2021444]: Support SNMPv2c in gettable
+ - fixed an extra brace in the docs pointed out by Jason Martin
+
+ python:
+ - [BUG 1826174]: Check for buffer overflow when printing values
+ - [BUG 1868278]: Python segfault (introduced by r16962)
+ - [PATCH 1862177]: made code more windows/cygwin compiler friendly
+ - [PATCH 1877840]: fix MIB label and indexing due to broken regexp
+
+ AIX:
+ - Add support for AIX 6.x.
+
+ Linux:
+ - [PATCH 1969627]: Handle empty /etc/sysconfig/network file
+ - Improved RPM spec files, for better consistency with
+ vendor-provided packages
+
+ Solaris:
+ - [BUG 1810814]: tcpTable missing entries and wrong ports
+ - [PATCH 1824196]: {ifOperStatus,ipAdEntIfIndex} reported incorrectly
+ - [PATCH 1834699]: Fix 1833294: DLPI problems on Solaris 2.6
+ - #define NEW_MIB_COMPLIANT to support Solaris 10U4+
+
+* 5.4.1 *
+
+ snmplib:
+ - Change snmp_sess_add_ex to consistently close and
+ - Deallocate the confmibs and confmibdirs
+ - FEATURES: 1041888: Check directory paths for
+ - FEATURES: 851887: Report range information for
+ - Read the config parameters defTarget and
+ - Use the default_target argument if it is
+ - [BUG 1600171]: Support longer community strings
+ - [BUG 1619827]: link against needed external
+ - [BUG 1619827]: link net-snmp libraries and binaries
+ - [BUG 1660061]: Validate engineIDs more strictly.
+ - [PATCH 1548670]: Fix range checks for unsigned
+ - [PATCH 1592706]: Fix memory leak when cloning
+ - [PATCH 1616912]: fix
+ - [PATCH 1620424]: Honor
+ - [PATCH 1634620]: Fix leaks from
+ - [PATCH 1640114]: Don't store trailing null
+ - [PATCH 1641895]: Extend short view masks (as per
+ - [PATCH 1641972]: add missing const
+ - [PATCH 1653670]: Consistent SNMPv3 behaviour
+ - [PATCH 1681030]: Better handling of empty
+ - [PATCH 1687316]: Don't drop const from casts.
+ - [PATCH 1687325]: Fix problem with operator
+ - increment "current" and "age" according to
+ - library layering improvements: introduce
+ - patch: 1645698: fix 64-bit signed integer
+
+ snmpapi:
+ - Do not use getservbyname to find default port
+
+ snmpd:
+ - Correct the dependency information for
+ - [BUG 1046327]: Reset "includeAllDisks" flag when
+ - [BUG 1073782]: Restore PerfStat values for FreeBSD
+ - [BUG 1102058]: Skip non-mounted disks (e.g. swap
+ - [BUG 1159908]: Fix memory leak
+ - [BUG 1397895]: include missing interface
+ - [BUG 1413728]: Reference index values in debug
+ - [BUG 1416276]: Handle dependency on MIB parsing
+ - [BUG 1546817]: Fix snmpEnterprise varbind when
+ - [BUG 1558823]: fix ipAddressTable memory leak
+ - [BUG 1600261]: Handle non-x86 /proc/cpuinfo format
+ - [BUG 1602286]: Don't let table holes block later
+ - [BUG 1628613]: Restore memTotalFree.0 on Solaris
+ - [BUG 1633595]: Fix AgentX handling of Counter64
+ - [BUG 1677063]: Check for failed malloc calls.
+ - [BUG 1685067]: More precise handling of
+ - [BUG 1685081]: Check for valid OID on Free/Undo
+ - [BUG 1712988]: default and configurable maximum
+ - [BUG 1745113]: Handle single-line (and zero-line)
+ - [BUG 1760633]: fix typo in debug message
+ - [BUG 902610]: Don't discard pending data following
+ - [BUG 902801]: Fix ordering of SMUX-registered
+ - [PATCH 1601188, ]: BUG: 1600432: Handle signals
+ - [PATCH 1620424]: Fix notification sending so that
+ - [PATCH 1637287]: Handle multiple target tags
+ - [PATCH 1639282]: Save persistent
+ - [PATCH 1639360]: Fix snmpNotifyFilterProfileTable
+ - [PATCH 1639726]: Report physical memory
+ - [PATCH 1641332]: Include missing agent config
+ - [PATCH 1641685]: Handle unresponsive AgentX
+ - [PATCH 1641865]: Don't double check snmpTrapOID
+ - [PATCH 1642255]: Handle saving long
+ - [PATCH 1644280]: Don't automatically probe for
+ - [PATCH 1644280]: Use the correct engineID when
+ - [PATCH 1644714]: replace
+ - [PATCH 1659623]: Handle SMUX peers with an empty
+ - [PATCH 1665549]: Handle creating VACM entries
+ - [PATCH 1665985]: Implement ipReasmTimeout
+ - [PATCH 1666737]: include ipv6 counts in
+ - [PATCH 1668193]: Fix check for v6 ReasmMaxSize
+ - [PATCH 1668193]: Update registration of
+ - [PATCH 1668952]: Ignore zombie processes.
+ - [PATCH 1676478]: fix udpEndpointRemoteAddress
+ - [PATCH 1678788]: Better handling of SMUX socket
+ - [PATCH 1683054]: set udpEndpointInstance to
+ - [PATCH 1687336]: Start using the enhanced
+ - [PATCH 1692768]: Fix copying of non-octet-aligned
+ - [PATCH 1698184]: Register non-default context
+ - [PATCH 1700730]: Remove unused extern declaration.
+ - [PATCH 1700732]: Fix debug output statements.
+ - [PATCH 1700737]: Tidy up setSerialNo
+ - [PATCH 1729629]: Fix memory leak in disman
+ - patch from Wojtek Jawor to handle row deletion
+ - patch: 1225440: Apply intent of patch: to delay
+ - patch: 1595568: from cyril_margaria: fix
+ - patch: 1617255: fix length of the history array
+ - patch: 1700157: from afrika: fixes ordering of exec
+ - patch: 1710632: from mavarley: fix memory leak on
+ - patch: 1719253: from "Christian Jung": fix
+ - patch: 1719254: from "Christan Jung": update
+
+ snmptrapd:
+ - [BUG 1638225]: Fix interpretation of transport
+ - [PATCH 1620424]: Fix notification reception so
+ - patch: 1225440: Apply intent of patch: to
+ - upport for forwarding traps by OID subtree.
+
+ apps:
+ - [BUG 1964136]: Drop NULL type from snmpset usage
+ - [PATCH 1529523]: Close SNMP session on failure.
+
+ build:
+ - Link libdl against libnetsnmpmibs instead of
+ - Link libkvm and libwrap to libnetsnmpagent
+ - [BUG 1096166]: Handle --without-logfile correctly.
+ - [BUG 1647976]: Cygwin/MinGW Windows build fails
+ - [PATCH 1625135]: configure location of python
+ - [PATCH 1681073]: #ifdef based config_error instead
+ - [PATCH 1728226]: make sure
+ - [PATCH 1728230]: add
+ - [PATCH 1728237]: Move
+ - [PATCH 1728244]: Add
+ - [PATCH 1728247]: Add type
+ - add "BuildRequires: perl-ExtUtils-Embed" to the
+ - add configure check for hasmntopt to fix the
+ - only enable mibII/ipv6 through --enable-ipv6 on
+ - patch from apple to simplify makefile target
+ - update to libtool 1.5.24 (from 1.5.22)
+ - use LDFLAGS when building agent, helpers and mib
+ - use libtool clean for removing files to ensure we
+ - work around libnetsnmpagent/libnetsnmphelpers
+ - yet another fix to address build issues with
+
+ building:
+ - Check for support of static inline functions
+ - Disable inlining on solaris as there are some
+
+ configure:
+ - [BUG 1567324]: Clarify prompting for
+
+ documentation:
+ - [BUG 1247164]: Document use of OID macros
+ - [BUG 1407476]: Clarify MIB parsing toggle
+ - [BUG 1614104]: broken snmpd(8) manual page
+ - [PATCH 1604580]: SNMP(3) manual page
+
+ irix:
+ - [PATCH 1709748]: Optimized IRIX cpu stats
+
+ library:
+ - FEATURES: 454028: Detect and handle empty MIB
+ - Patch from "Mitsuru Chinen": cleans up the
+ - [PATCH 1642071]: Don't fiddle with the storage
+ - [PATCH 1665543]: Handle VACM checks correctly.
+
+ mib2c:
+ - [BUG 1429472]: Protect against missing instances
+ - [BUG 1582972]: Handle @while@/@end@ properly.
+ - [BUG 833673]: More focused size checks.
+ - [PATCH 1668171]: skip unknown cols in min/max
+
+ misc:
+ - Don't use the legacy symbol
+
+ patch:
+ - fix the -M switch for
+
+ perl:
+ - [BUG 1450669]: PATCH: 1627949: from martin987: a
+ - [BUG 1619827]: link libnetsnmpagent/libnetsnmptrapd
+ - fix SNMP SET for IP addresses on 64-bit
+ - fix prerequisites for NetSNMP::TrapReceiver
+ - fix syntax error in NetSNMP::agent::Support
+ - install embedded perl init files for
+ - patch: 1725049: fix bulkwalk in cases of non-repeater
+
+ ports:
+ - patch: 1706344: from naylor: fix compilation with
+
+ python:
+ - [PATCH 1716114]: Let python build in source tree
+
+ test:
+ - support a -n flag to RUNTESTS to print the test
+
+ unspecified:
+ - [BUG 1596638]: memory leak in ipCidrRouteTable,
+ - [BUG 1600093]: autoconf 2.60 breaks the build
+ - [BUG 1611524]: fix tcp connection table fd leak
+ - [BUG 1633483]: Support CPU HAL on FreeBSD4.x
+ - [BUG 1710910]: initial support for DragonFly BSD
+ - [PATCH 1678298]: from magfr: compile-subagent checks for
+ - [PATCH 1678301]: from magfr: deallocate domain registry
+ - [PATCH 1678302]: from magfr: netsnmp_mibindex_load leaks
+ - [PATCH 1678305]: from magfr: Deallocate the cache in
+ - [PATCH 1678306]: from magfr: Deallocate the log in
+ - [PATCH 1719244]: fix mfd generating map function
+ - [PATCH 1728241]: from mitsuru_chinen: add configure check
+ - patch from apple to fix cross-compile builds in apples
+ - patch from apple to fix minor documentation bugs.
+ - patch from apple to improve memory reporting
+
+ AIX:
+ - [PATCH 1665079]: AIX patches
+ - build fixes for embedded Perl
+ - fix default shared library building instead of forcing
+ - use "-Wl,-brtl" when compiling with gcc
+
+ FreeBSD:
+ - add initial support for upcoming FreeBSD 7
+ - fix configure warning for sys/conf.h
+
+ HP:
+ - UX: BUG: 1742278: compile error on HP-UX 11.23 (IA64)
+ - UX: HP-UX needs _REENTRANT defined to pick up
+
+ IRIX:
+ - [PATCH 1675869]: CPU statistics for IRIX
+
+ Linux:
+ - [BUG 1666005]: Fail to walk ipv6InterfaceTable on
+ - [PATCH 1581294]:
+ - fix ethtool configure check for recent systems
+
+ MacOSX:
+ - [PATCH 1600453]: OS X
+ - [PATCH 1600522]: CPU HAL
+
+ Perl:
+ - link Perl modules against the exact set of libraries
+
+ Solaris:
+ - IF-MIB fix: add missing return at end of
+ - [BUG 1626153]: no hrSWRun informations on
+ - [PATCH 1623447]: hrSWRun
+
+ Win32:
+ - [BUG 1662987]: compile error on Cygwin
+ - [PATCH 1622080]: A: pass Win32
+ - fix AES support
+ - fix win32/Configure --with-ipv6
+
diff --git a/cleopatre/application/spidnetsnmp/COPYING b/cleopatre/application/spidnetsnmp/COPYING
new file mode 100644
index 0000000000..d573f940fd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/COPYING
@@ -0,0 +1,231 @@
+Various copyrights apply to this package, listed in various separate
+parts below. Please make sure that you read all the parts.
+
+---- Part 1: CMU/UCD copyright notice: (BSD like) -----
+
+
+ Copyright 1989, 1991, 1992 by Carnegie Mellon University
+
+ Derivative Work - 1996, 1998-2000
+Copyright 1996, 1998-2000 The Regents of the University of California
+
+ All Rights Reserved
+
+Permission to use, copy, modify and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appears in all copies and
+that both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of CMU and The Regents of
+the University of California not be used in advertising or publicity
+pertaining to distribution of the software without specific written
+permission.
+
+CMU AND THE REGENTS OF THE UNIVERSITY OF CALIFORNIA DISCLAIM ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL CMU OR
+THE REGENTS OF THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL,
+INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+FROM THE LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
+---- Part 2: Networks Associates Technology, Inc copyright notice (BSD) -----
+
+Copyright (c) 2001-2003, Networks Associates Technology, Inc
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+* Neither the name of the Networks Associates Technology, Inc nor the
+ names of its contributors may be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---- Part 3: Cambridge Broadband Ltd. copyright notice (BSD) -----
+
+Portions of this code are copyright (c) 2001-2003, Cambridge Broadband Ltd.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+* The name of Cambridge Broadband Ltd. may not be used to endorse or
+ promote products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+---- Part 4: Sun Microsystems, Inc. copyright notice (BSD) -----
+
+Copyright © 2003 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+California 95054, U.S.A. All rights reserved.
+
+Use is subject to license terms below.
+
+This distribution may include materials developed by third parties.
+
+Sun, Sun Microsystems, the Sun logo and Solaris are trademarks or registered
+trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+* Neither the name of the Sun Microsystems, Inc. nor the
+ names of its contributors may be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---- Part 5: Sparta, Inc copyright notice (BSD) -----
+
+Copyright (c) 2003-2008, Sparta, Inc
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+* Neither the name of Sparta, Inc nor the names of its contributors may
+ be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---- Part 6: Cisco/BUPTNIC copyright notice (BSD) -----
+
+Copyright (c) 2004, Cisco, Inc and Information Network
+Center of Beijing University of Posts and Telecommunications.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+* Neither the name of Cisco, Inc, Beijing University of Posts and
+ Telecommunications, nor the names of their contributors may
+ be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---- Part 7: Fabasoft R&D Software GmbH & Co KG copyright notice (BSD) -----
+
+Copyright (c) Fabasoft R&D Software GmbH & Co KG, 2003
+oss@fabasoft.com
+Author: Bernhard Penz <bernhard.penz@fabasoft.com>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+* The name of Fabasoft R&D Software GmbH & Co KG or any of its subsidiaries,
+ brand or product names may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/cleopatre/application/spidnetsnmp/ChangeLog b/cleopatre/application/spidnetsnmp/ChangeLog
new file mode 100644
index 0000000000..ae86cb93ee
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/ChangeLog
@@ -0,0 +1,129330 @@
+-------------------------------------------------------------------------------
+
+Changes: V5.4.1 -> V5.4.2.1
+
+2008-10-31 15:16 hardaker
+
+ * agent/snmp_agent.c:
+
+ NEWS: snmpd: Applying patch from Magnus Fromreide to fix the
+ getbulk issue reported by Oscar Mira-Sanchez
+
+-------------------------------------------------------------------------------
+
+Changes: V5.4.1 -> V5.4.2
+
+2008-09-05 07:51 dts12
+
+ * dist/makerelease:
+
+ Update release instructions, in line with makerelease.xml
+ (Qn: Why isn't makerelease.xml being picked up here?)
+
+2008-09-04 22:52 tanders
+
+ * python/netsnmp/client_intf.c:
+
+ CHANGES: python: BUG: 1868278: Python segfault (introduced by r16962)
+
+2008-08-29 21:19 dts12
+
+ * FAQ, README, configure, configure.in, dist/net-snmp.spec,
+ sedscript.in, snmplib/snmp_version.c:
+
+ - version tag ( 5.4.2.rc3 )
+
+2008-08-29 21:18 dts12
+
+ * CHANGES, NEWS:
+
+ version update
+
+2008-08-29 21:15 dts12
+
+ * ChangeLog:
+
+ version update
+
+2008-08-29 21:08 dts12
+
+ * man/netsnmp_agent.3, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3,
+ man/netsnmp_baby_steps.3, man/netsnmp_bulk_to_next.3,
+ man/netsnmp_cache_handler.3, man/netsnmp_callback.3,
+ man/netsnmp_container.3, man/netsnmp_data_list.3,
+ man/netsnmp_debug.3, man/netsnmp_default_store.3,
+ man/netsnmp_handler.3, man/netsnmp_instance.3,
+ man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3,
+ man/netsnmp_library.3, man/netsnmp_mib_maintenance.3,
+ man/netsnmp_mib_utilities.3, man/netsnmp_mode_end_call.3,
+ man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3,
+ man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3,
+ man/netsnmp_snmp_client.3, man/netsnmp_snmp_logging.3,
+ man/netsnmp_snmp_pdu.3, man/netsnmp_snmp_session.3,
+ man/netsnmp_stash_cache.3, man/netsnmp_stash_to_next.3,
+ man/netsnmp_table.3, man/netsnmp_table_array.3,
+ man/netsnmp_table_container.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_generic.3,
+ man/netsnmp_table_indexes.3, man/netsnmp_table_iterator.3,
+ man/netsnmp_table_iterator.h.3, man/netsnmp_table_maintenance.3,
+ man/netsnmp_table_rows.3, man/netsnmp_tdata.3,
+ man/netsnmp_util.3, man/netsnmp_utilities.3,
+ man/netsnmp_variable_list.3, man/netsnmp_watcher.3:
+
+ documentation update
+
+2008-08-29 21:04 dts12
+
+ * doxygen.conf:
+
+ - version tag ( 5.4.2.rc3 )
+
+
+2008-08-29 19:54 dts12
+
+ * dist/changelogfix:
+
+ Retain filenames which don't include the expected prefix.
+
+2008-08-27 13:39 jsafranek
+
+ * agent/mibgroup/hardware/cpu/cpu_linux.c:
+
+ S/390 uses slightly different format of the /proc/cpuinfo file:
+ processor 0: version = FF, identification = 060AFE, machine = 2094
+
+2008-08-22 23:47 tanders
+
+ * FAQ:
+
+ update list of supported operating systems
+
+2008-08-22 23:27 tanders
+
+ * configure, configure.in:
+
+ NEWS: build: BUG: 2023803: Compilation problems on HP-UX 11.31
+ CHANGES: build: Limit the use of _KERNEL definitions in configure
+ tests to match the use of _KERNEL in our codebase
+
+2008-08-22 00:18 tanders
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ Fix build failure on HP-UX 11.31: use getpagesize() instead of PGSHIFT.
+ Successfully tested on HP-UX 10.20, 11.00, 11.11, 11.23 and 11.31.
+
+2008-08-21 10:03 jsafranek
+
+ * configure.in:
+
+ add SCTP-MIB
+
+2008-08-19 23:22 tanders
+
+ * README.tru64:
+
+ update README for Tru64 after the sendto/recvfrom fixes
+
+2008-08-19 20:36 dts12
+
+ * FAQ, README, configure, configure.in, dist/net-snmp.spec,
+ sedscript.in, snmplib/snmp_version.c:
+
+ - version tag ( 5.4.2.rc2 )
+
+2008-08-19 20:36 dts12
+
+ * CHANGES, NEWS:
+
+ version update
+
+2008-08-19 20:26 dts12
+
+ * ChangeLog:
+
+ version update
+
+2008-08-19 20:08 dts12
+
+ * agent/mibgroup/Makefile.depend:
+
+ make depend
+
+2008-08-19 20:03 dts12
+
+ * man/netsnmp_agent.3, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3,
+ man/netsnmp_baby_steps.3, man/netsnmp_bulk_to_next.3,
+ man/netsnmp_cache_handler.3, man/netsnmp_callback.3,
+ man/netsnmp_container.3, man/netsnmp_data_list.3,
+ man/netsnmp_debug.3, man/netsnmp_default_store.3,
+ man/netsnmp_handler.3, man/netsnmp_instance.3,
+ man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3,
+ man/netsnmp_library.3, man/netsnmp_mib_maintenance.3,
+ man/netsnmp_mib_utilities.3, man/netsnmp_mode_end_call.3,
+ man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3,
+ man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3,
+ man/netsnmp_snmp_client.3, man/netsnmp_snmp_logging.3,
+ man/netsnmp_snmp_pdu.3, man/netsnmp_snmp_session.3,
+ man/netsnmp_stash_cache.3, man/netsnmp_stash_to_next.3,
+ man/netsnmp_table.3, man/netsnmp_table_array.3,
+ man/netsnmp_table_container.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_generic.3,
+ man/netsnmp_table_indexes.3, man/netsnmp_table_iterator.3,
+ man/netsnmp_table_iterator.h.3, man/netsnmp_table_maintenance.3,
+ man/netsnmp_table_rows.3, man/netsnmp_tdata.3,
+ man/netsnmp_util.3, man/netsnmp_utilities.3,
+ man/netsnmp_variable_list.3, man/netsnmp_watcher.3:
+
+ documentation update
+
+2008-08-19 19:55 dts12
+
+ * doxygen.conf:
+
+ - version tag ( 5.4.2.rc2 )
+
+
+2008-08-19 08:08 dts12
+
+ * agent/mibgroup/disman/event/mteObjects.c:
+ Better tracing of DisMan object processing.
+
+2008-08-18 22:43 tanders
+
+ * agent/mibgroup/sctp-mib/sctpScalars.h:
+ remove bogus white space
+
+2008-08-18 22:38 tanders
+
+ * README.agent-mibs:
+ document SCTP-MIB addition
+
+2008-08-18 22:01 dts12
+
+ * perl/SNMP/SNMP.pm:
+ CHANGES: perl: PATCH: 2021444: Support SNMPv2c in gettable processing
+
+2008-08-18 21:44 dts12
+
+ * snmplib/snmpksm.c:
+ CHANGES: snmplib: PATCH: 2003450: Fix a couple of 64-bit problems.
+
+2008-08-18 19:05 tanders
+
+ * mibs/Makefile.in:
+ fix SCTP-MIB install
+
+2008-08-17 21:29 dts12
+
+ * agent/mibgroup/sctp-mib, agent/mibgroup/sctp-mib.h,
+ agent/mibgroup/sctp-mib/sctpAssocLocalAddrTable.c,
+ agent/mibgroup/sctp-mib/sctpAssocLocalAddrTable.h,
+ agent/mibgroup/sctp-mib/sctpAssocRemAddrTable.c,
+ agent/mibgroup/sctp-mib/sctpAssocRemAddrTable.h,
+ agent/mibgroup/sctp-mib/sctpAssocTable.c,
+ agent/mibgroup/sctp-mib/sctpAssocTable.h,
+ agent/mibgroup/sctp-mib/sctpLookupLocalPortTable.c,
+ agent/mibgroup/sctp-mib/sctpLookupLocalPortTable.h,
+ agent/mibgroup/sctp-mib/sctpLookupRemHostNameTable.c,
+ agent/mibgroup/sctp-mib/sctpLookupRemHostNameTable.h,
+ agent/mibgroup/sctp-mib/sctpLookupRemIPAddrTable.c,
+ agent/mibgroup/sctp-mib/sctpLookupRemIPAddrTable.h,
+ agent/mibgroup/sctp-mib/sctpLookupRemPortTable.c,
+ agent/mibgroup/sctp-mib/sctpLookupRemPortTable.h,
+ agent/mibgroup/sctp-mib/sctpLookupRemPrimIPAddrTable.c,
+ agent/mibgroup/sctp-mib/sctpLookupRemPrimIPAddrTable.h,
+ agent/mibgroup/sctp-mib/sctpScalars.c,
+ agent/mibgroup/sctp-mib/sctpScalars.h,
+ agent/mibgroup/sctp-mib/sctpScalars_common.c,
+ agent/mibgroup/sctp-mib/sctpScalars_common.h,
+ agent/mibgroup/sctp-mib/sctpScalars_linux.c,
+ agent/mibgroup/sctp-mib/sctpTables.h,
+ agent/mibgroup/sctp-mib/sctpTables_common.c,
+ agent/mibgroup/sctp-mib/sctpTables_common.h,
+ agent/mibgroup/sctp-mib/sctpTables_linux.c, mibs/Makefile.in,
+ mibs/Makefile.mib, mibs/SCTP-MIB.txt:
+ NEWS: snmpd: PATCH: 2023633: add SCTP-MIB implementation (Linux only)
+
+2008-08-17 21:08 dts12
+
+ * agent/mibgroup/agentx/protocol.c:
+ CHANGES: snmpd: PATCH: 2022936: Fix AgentX Counter64 decoding on
+ 64-bit architectures
+
+2008-08-17 20:50 dts12
+
+ * agent/snmpd.c:
+ CHANGES: snmpd: PATCH: 2014204: Support -g {groupname}
+
+2008-08-13 13:02 jsafranek
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c:
+ Correctly parse interface indexes higher than 0xff.
+
+2008-08-12 08:27 jsafranek
+
+ * agent/mibgroup/host/hr_swrun.c:
+ Close file when parsing of /proc/XXX/status fails.
+
+2008-08-07 09:00 jsafranek
+
+ * man/snmpd.conf.5.def:
+ Fix documentation of exec statament - it does not cache results anymore.
+ Related to bug 883134
+
+2008-07-31 16:48 dts12
+
+ * FAQ, README, configure, configure.in, dist/net-snmp.spec,
+ sedscript.in, snmplib/snmp_version.c:
+ - version tag ( 5.4.2.rc1 )
+
+2008-07-31 16:47 dts12
+
+ * CHANGES:
+ version update
+
+2008-07-31 16:14 dts12
+
+ * ChangeLog:
+ version update
+
+2008-07-31 16:05 dts12
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/snmpnetstat/Makefile.depend,
+ snmplib/Makefile.depend:
+ make depend
+
+2008-07-31 16:03 dts12
+
+ * man/netsnmp_agent.3, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3,
+ man/netsnmp_baby_steps.3, man/netsnmp_bulk_to_next.3,
+ man/netsnmp_cache_handler.3, man/netsnmp_callback.3,
+ man/netsnmp_container.3, man/netsnmp_data_list.3,
+ man/netsnmp_debug.3, man/netsnmp_default_store.3,
+ man/netsnmp_handler.3, man/netsnmp_instance.3,
+ man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3,
+ man/netsnmp_library.3, man/netsnmp_mib_maintenance.3,
+ man/netsnmp_mib_utilities.3, man/netsnmp_mode_end_call.3,
+ man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3,
+ man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3,
+ man/netsnmp_snmp_client.3, man/netsnmp_snmp_logging.3,
+ man/netsnmp_snmp_pdu.3, man/netsnmp_snmp_session.3,
+ man/netsnmp_stash_cache.3, man/netsnmp_stash_to_next.3,
+ man/netsnmp_table.3, man/netsnmp_table_array.3,
+ man/netsnmp_table_container.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_generic.3,
+ man/netsnmp_table_indexes.3, man/netsnmp_table_iterator.3,
+ man/netsnmp_table_iterator.h.3, man/netsnmp_table_maintenance.3,
+ man/netsnmp_table_rows.3, man/netsnmp_tdata.3,
+ man/netsnmp_util.3, man/netsnmp_utilities.3,
+ man/netsnmp_variable_list.3, man/netsnmp_watcher.3:
+ documentation update
+
+2008-07-30 17:40 dts12
+
+ * agent/mibgroup/agentx/protocol.c:
+ CHANGES: agent: BUG: 2003144: Increase size of AgentX packet build buffer
+
+2008-07-30 17:28 dts12
+
+ * net-snmp-config.in:
+ CHANGES: build: PATCH: 1681035: from magfr: improve net-snmp-config /bin/sh compatibility
+ Back-port of SVN revision 15961
+
+2008-07-30 09:58 dts12
+
+ * agent/mibgroup/host/hr_filesys.c:
+ CHANGES: agent: BUG: 1557372: Realign hrFSStorageIndex with hrStorageTable
+
+2008-07-30 07:57 dts12
+
+ * snmplib/mib.c:
+ CHANGES: snmplib: BUG: 2027834: Extend string print buffer by the minimum necessary.
+
+2008-07-29 16:19 dts12
+
+ * agent/mibgroup/agentx/protocol.c:
+ a) Fix the size of the buffer in just one place
+ (makes it easier to change if necessary)
+ b) Fix various unfortunate line-breaks (within "pdu->flags")
+
+2008-07-28 14:39 dts12
+
+ * agent/mibgroup/mibII/var_route.c:
+ CHANGES: agent: BUG: 2023803: Ensure compilation is not dependent
+ on an irrelevant configure characteristic for HP-UX 11
+
+2008-07-28 11:41 dts12
+
+ * configure, configure.in, include/net-snmp/net-snmp-config.h.in:
+ NEWS: building: add --with-temp-file-pattern configure option
+ Backport of SVN revision 17121
+
+2008-07-28 10:56 dts12
+
+ * apps/snmpset.c:
+ CHANGES: apps: BUG: 1964136: Drop NULL type from snmpset usage message.
+
+2008-07-24 23:22 tanders
+
+ * man/snmpcmd.1.def:
+ CHANGES: documentation: BUG: 2027129: fix typo in snmpcmd.1
+
+2008-07-24 06:53 jsafranek
+
+ * agent/agent_read_config.c:
+ CHANGES: snmpd: PATCH: 1823800: release and reload all trap destinations on SIGHUP
+
+2008-07-21 13:44 dts12
+
+ * agent/helpers/old_api.c:
+ CHANGES: agent: PATCH 1944581: Protect against core dumps with long string index values.
+
+2008-07-17 15:07 dts12
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend:
+ make depend
+
+2008-07-17 14:42 dts12
+
+ * doxygen.conf:
+ - version tag ( 5.4.2.rc1 )
+
+2008-07-17 10:05 jsafranek
+
+ * agent/mibgroup/utilities/iquery.c:
+ CHANGES: snmpd: BUG: 2018031: Don't probe engineID in internal monitor sessions.
+
+2008-07-10 13:50 alex_b
+
+ * win32/Makefile.in:
+ CHANGES: building: BUG: 2014526: Win32: snmpv3-security-includes.h not installed
+
+2008-07-06 15:05 alex_b
+
+ * README.win32, win32/Configure, win32/build.pl,
+ win32/netsnmpmibssdk/Makefile.in:
+ CHANGES: bulding: Add support for winExtDLL to build.bat (win32)
+
+2008-07-06 12:38 alex_b
+
+ * win32/libsnmp_dll/libsnmp.def, win32/libsnmp_dll/libsnmp.def.in:
+ Win32 build fixes - add missing function for DLL build.
+
+2008-07-02 12:39 jsafranek
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_linux.c:
+ CHANGES: snmpd: BUG: 2006786: Interface name can have more than 8 characters.
+
+2008-06-25 15:16 jsafranek
+
+ * perl/SNMP/SNMP.xs:
+ fix assertion when used with perl 5.10
+
+2008-06-24 22:36 tanders
+
+ * testing/tests/T001snmpv1get, testing/tests/T014snmpv2cget,
+ testing/tests/T015snmpv2cgetnext,
+ testing/tests/T0160snmpv2cbulkget,
+ testing/tests/T016snmpv2cgetfail,
+ testing/tests/T017snmpv2ctov1getfail,
+ testing/tests/T018snmpv1tov2cgetfail,
+ testing/tests/T019snmpv2cnosuch, testing/tests/T020snmpv3get,
+ testing/tests/T021snmpv3getnext,
+ testing/tests/T0220snmpv3bulkget:
+ CHANGES: building: Disable tests if the agent is built without the mib module they depend on.
+ Backport of r17087.
+
+2008-06-17 08:57 dts12
+
+ * snmplib/snmpTCPIPv6Domain.c:
+ Fix potential buffer overflow in sprintf for TCP/IPv6
+ Cross-port of revision 16668
+
+2008-06-16 23:55 tanders
+
+ * configure.in:
+ CHANGES: build: BUG: 1995172: fix --without-elf configure usage message
+
+2008-06-15 22:15 dts12
+
+ * FAQ, README, configure, configure.in, dist/net-snmp.spec,
+ sedscript.in, snmplib/snmp_version.c:
+ - version tag ( 5.4.2.pre2 )
+
+2008-06-15 22:14 dts12
+
+ * CHANGES, NEWS:
+ version update
+
+2008-06-15 21:55 dts12
+
+ * ChangeLog:
+ Version update
+
+ Also fix all ChangeLog entries since the CVS->SVN move,
+ which have been omitting information about what files
+ were affected by any given change.
+
+2008-06-15 21:32 dts12
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend:
+ make depend
+
+2008-06-15 21:06 dts12
+
+ * doxygen.conf:
+ - version tag ( 5.4.2.pre2 )
+2008-06-13 22:16 dts12
+
+ * dist/find-requires, dist/net-snmp.spec:
+ CHANGES: build: Improved RPM spec files, for better consistency with vendor-provided packages.
+ Provided by Jan Safranek
+
+2008-06-13 21:54 dts12
+
+ * configure, configure.in:
+ Restore embedded perl to default Mac OS/X build.
+ (reversing revision 16988)
+
+2008-06-13 21:03 dts12
+
+ * configure, configure.in:
+ CHANGES: build: PATCH: 1899762: Tweak embedded_perl configure checks.
+
+2008-06-12 12:50 dts12
+
+ * dist/makerelease:
+ Only add non-default MIB modules to the test builds.
+ Specifying the host module is not needed on Linux systems,
+ and may break on other O/Ss. Specifying the disman/event
+ MIB is unnecessary on any system.
+
+2008-06-12 12:45 dts12
+
+ * dist/makerelease:
+ Missing MD5 signature file for zip release
+
+2008-06-12 12:44 dts12
+
+ * dist/makerelease:
+ Basic documentation and help/usage messages.
+
+2008-06-11 10:16 dts12
+
+ * dist/makerelease:
+ Only enable IPX transport on Linux systems
+
+2008-06-10 14:37 dts12
+
+ * agent/mibgroup/utilities/iquery.c,
+ include/net-snmp/library/snmp_api.h, snmplib/snmp_client.c:
+ snmpd: PATCH: 1918383: Fix DisMan monitoring of AgentX subagents
+ Note that this doesn't actually use the code submitted in that
+ patch.
+ Instead it inserts a callback hook into the
+ snmp_synch_response_cb
+ routine (using the myvoid pointer and a new session flag), which
+ has
+ the same effect without needing to duplicate any code.
+
+2008-06-10 12:52 dts12
+
+ * agent/mibgroup/disman/event/mteTrigger.c:
+ Fix logic errors in handling of old/current varbind lists.
+ Reported by Fred Gao in patch #1918383
+
+2008-06-10 10:51 dts12
+
+ * snmplib/scapi.c:
+ update to match published release
+
+2008-06-09 09:05 dts12
+
+ * apps/snmptrap.c, apps/snmpusm.c:
+ A couple more missing error checks.
+ Based on those reported by Boya Sun
+
+2008-06-06 12:02 dts12
+
+ * configure, configure.in:
+ Better handling of embedded perl on Mac OS/X
+ (nearly working on Leopard now)
+
+2008-06-05 23:07 tanders
+
+ * dist/net-snmp.spec:
+ sync with trunk
+
+2008-06-05 21:12 tanders
+
+ * configure:
+ run autoconf
+
+2008-06-05 21:11 tanders
+
+ * acconfig.h, agent/auto_nlist.c, agent/mibgroup/hardware/cpu.h,
+ agent/mibgroup/hardware/memory.h,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_storage.c, agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/mibII/icmp.c, agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/ip.c, agent/mibgroup/mibII/tcp.c,
+ agent/mibgroup/mibII/udp.c, agent/mibgroup/ucd-snmp/diskio.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/proc.c, configure.in,
+ include/net-snmp/net-snmp-config.h.in, snmplib/system.c:
+ NEWS: AIX: Add support for AIX 6.x.
+ Successfully tested on trunk (passed extensive regression
+ testing).
+
+2008-06-05 21:04 tanders
+
+ * aclocal.m4, config.guess, config.sub, configure, ltmain.sh:
+ NEWS: build: Update to libtool 1.5.26 (from 1.5.24), e.g. to
+ better support AIX 6.1 and Mac OS X Leopard.
+ Successfully tested on trunk (passed extensive regression
+ testing).
+
+2008-06-03 09:37 dts12
+
+ * README.osX:
+ Document why embedded perl was disabled.
+
+2008-06-03 08:57 dts12
+
+ * agent/mibgroup/utilities/iquery.c:
+ Ensure the default internal query session has a valid engineID,
+ to avoid having to probe for it on the first use.
+
+2008-06-02 15:18 dts12
+
+ * configure, configure.in:
+ Drop embedded perl from the default build on Mac OS/X
+ Th dual-architecture nature of the default perl binary
+ confuses the configure script sufficiently that the
+ code won't actually compile.
+
+2008-06-02 13:27 dts12
+
+ * agent/mibgroup/disman/event/mteTrigger.c:
+ Ensure that the "trigger armed" flag is cleared whenever the
+ matching
+ expression is found to hold - even if the trigger doesn't
+ actually fire.
+ This affects the behaviour of initially-true expressions, when
+ this
+ initial firing is suppressed using the mteTrigger*Startup object.
+ Without this tweak, the trigger will fire on the second sampling
+ (as if the expression had evaluated false first time round).
+
+2008-06-01 20:02 dts12
+
+ * agent/mibgroup/disman/event/mteEvent.c,
+ agent/mibgroup/disman/event/mteObjects.c,
+ agent/mibgroup/disman/event/mteObjects.h:
+ Handle varbind payload for internal linkUp/Down notifications.
+
+2008-06-01 06:45 tanders
+
+ * perl/TrapReceiver/TrapReceiver.xs:
+ NEWS: snmptrapd: BUG: 1955227: Memory leak for embedded Perl on
+ x86_64
+
+2008-05-29 16:11 dts12
+
+ * agent/mibgroup/hardware/memory/memory_linux.c:
+ Silly typo
+
+2008-05-29 09:59 dts12
+
+ * agent/agent_registry.c, agent/helpers/stash_cache.c,
+ agent/mibgroup/agent/extend.c, agent/mibgroup/agentx/client.c,
+ agent/mibgroup/disman/event/mteTrigger.c, apps/snmptest.c,
+ apps/snmptrap.c, apps/snmpusm.c, snmplib/snmpusm.c:
+ Various missing error checks, etc.
+ Reported by Boya Sun.
+
+2008-05-28 11:48 dts12
+
+ * agent/mibgroup/hardware/memory/memory_freebsd.c,
+ agent/mibgroup/ucd-snmp/memory.c:
+ Report cached memory size/usage properly (particularly on
+ FreeBSD).
+
+2008-05-28 11:21 dts12
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+ Bring memBuffer code into line with revision 16975.
+
+2008-05-28 11:10 dts12
+
+ * agent/mibgroup/hardware/memory/memory_linux.c:
+ Linux 2.6 kernel does not report shared memory information.
+
+2008-05-28 09:18 dts12
+
+ * agent/mibgroup/hardware/memory/memory_linux.c:
+ CHANGES: snmpd: BUG: 1931391: Fix reporting of Memory buffers and
+ cached memory.
+ Problem reported by doconeill.
+
+2008-05-28 06:56 magfr
+
+ * agent/helpers/scalar_group.c:
+ CHANGES: snmpd: Enforce the lower limit on scalar_groups
+ This fixes the case of getnext icmp.0 returning icmp.0.0 instead
+ of the
+ expected icmpInMsgs.0
+
+2008-05-27 22:03 dts12
+
+ * agent/mibgroup/agentx/master.c, agent/mibgroup/agentx/subagent.c:
+ CHANGES: snmpd: BUG: 1912647: Fix memory leak following failed
+ requests.
+ Fix provided by Anton Pak
+
+2008-05-27 21:22 dts12
+
+ * snmplib/snmp_api.c:
+ CHANGES: snmplib: BUG: 1958041: Ensure IDs are not truncated.
+
+2008-05-27 14:18 dts12
+
+ * agent/mibgroup/hardware/memory/memory_freebsd.c:
+ Monitor memory buffers on FreeBSD systems.
+ API suggested by Chris
+
+2008-05-27 12:47 dts12
+
+ * agent/mibgroup/hardware/cpu/cpu_sysctl.c:
+ Fix careless typo when applying Maxim's patch.
+
+2008-05-25 07:24 magfr
+
+ * agent/mibgroup/disman/event/mteEventConf.c:
+ Remove a local variable only used to track a local string
+ constant and replace t with a direct reference to the string
+ constant.
+ Mark two local functions static as well.
+
+2008-05-25 07:17 magfr
+
+ * agent/mibgroup/utilities/iquery.c:
+ Reorder to avoid one strlen call.
+ Add missing cast.
+
+2008-05-25 07:14 magfr
+
+ * agent/mibgroup/ip-mib/data_access/scalars_linux.c:
+ Make ipfw_name a static array instead of a pointer as it is
+ private to this module.
+
+2008-05-25 07:05 magfr
+
+ * agent/helpers/instance.c:
+ When casting, cast to the right type.
+
+2008-05-24 20:30 dts12
+
+ * python/netsnmp/client_intf.c:
+ CHANGES: python: BUG: 1826174: Check for buffer overflow when
+ printing values.
+ Addresses CVE-2008-2292
+
+2008-05-23 20:27 dts12
+
+ * agent/mibgroup/hardware/cpu.h,
+ agent/mibgroup/hardware/cpu/cpu_sysctl.c:
+ CHANGES: snmpd: PATCH: Fix for CPU stats on FreeBSD
+ Provided by Maxim Sobolev
+
+2008-05-23 20:12 dts12
+
+ * dist/snmpd-init.d, dist/snmptrapd-init.d:
+ CHANGES: install: PATCH: 1969627: Handle empty
+ /etc/sysconfig/network file
+ Fix provided by Josh Wilmes
+
+2008-05-23 20:07 dts12
+
+ * agent/mibgroup/host/hr_filesys.c:
+ CHANGES: snmpd: PATCH: 1967194: Recognise NFS4 mounts
+ Submitted by Fabrice Bacchella
+
+2008-05-22 20:55 dts12
+
+ * snmplib/asn1.c:
+ Don't change length of OID buffer if parsing the OID fails.
+ Reported by saifulla Mohd Abdul.
+
+2008-05-14 13:35 tanders
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+ fix build failures with earlier Linux kernels (e.g. with RH7.1)
+ introduced by r16909
+
+2008-05-09 19:04 dts12
+
+ * FAQ, README, configure, configure.in, dist/net-snmp.spec,
+ perl/ASN/ASN.pm, perl/AnyData_SNMP/Storage.pm, perl/OID/OID.pm,
+ perl/SNMP/SNMP.pm, perl/TrapReceiver/TrapReceiver.pm,
+ perl/agent/Support/Support.pm, perl/agent/agent.pm,
+ perl/agent/default_store/default_store.pm,
+ perl/default_store/default_store.pm, sedscript.in,
+ snmplib/snmp_version.c:
+ - version tag ( 5.4.2.pre1 )
+
+2008-05-09 19:04 dts12
+
+ * CHANGES, NEWS:
+ version update
+
+2008-05-09 18:47 dts12
+
+ * ChangeLog:
+ version update
+
+2008-05-09 15:24 dts12
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend:
+ make depend
+
+2008-05-09 15:14 dts12
+
+ * doxygen.conf:
+ - version tag ( 5.4.2.pre1 )
+
+2008-05-09 14:51 dts12
+
+ * man/netsnmp_agent.3, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3,
+ man/netsnmp_baby_steps.3, man/netsnmp_bulk_to_next.3,
+ man/netsnmp_cache_handler.3, man/netsnmp_callback.3,
+ man/netsnmp_container.3, man/netsnmp_data_list.3,
+ man/netsnmp_debug.3, man/netsnmp_default_store.3,
+ man/netsnmp_handler.3, man/netsnmp_instance.3,
+ man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3,
+ man/netsnmp_library.3, man/netsnmp_mib_maintenance.3,
+ man/netsnmp_mib_utilities.3, man/netsnmp_mode_end_call.3,
+ man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3,
+ man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3,
+ man/netsnmp_snmp_client.3, man/netsnmp_snmp_logging.3,
+ man/netsnmp_snmp_pdu.3, man/netsnmp_snmp_session.3,
+ man/netsnmp_stash_cache.3, man/netsnmp_stash_to_next.3,
+ man/netsnmp_table.3, man/netsnmp_table_array.3,
+ man/netsnmp_table_container.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_generic.3,
+ man/netsnmp_table_indexes.3, man/netsnmp_table_iterator.3,
+ man/netsnmp_table_iterator.h.3, man/netsnmp_table_maintenance.3,
+ man/netsnmp_table_rows.3, man/netsnmp_tdata.3,
+ man/netsnmp_util.3, man/netsnmp_utilities.3,
+ man/netsnmp_variable_list.3, man/netsnmp_watcher.3:
+ documentation update
+
+2008-05-09 14:47 dts12
+
+ * doxygen.conf:
+ - version tag ( 5.4.2 )
+
+2008-05-09 14:23 dts12
+
+ * Makefile.top:
+ version update
+
+2008-05-09 13:58 dts12
+
+ * agent/mibgroup/host/hr_filesys.c:
+ Debugging messages.
+
+2008-05-08 14:00 dts12
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+ Drop support for the interim SIOCDEVPRIVATE-based ioctl calls.
+ SIOCGMIIPHY/SIOCGMIIREG have been defined since at least Sept
+ 2001 (kernel 2.4.10),
+ so the risk of calling an inappropriate private ioctl is probably
+ greater than
+ that of missing information from an ancient system.
+
+2008-05-08 09:02 dts12
+
+ * snmplib/snmp_api.c:
+ Don't try to automatically create anonymous users.
+ (An invalid trapsess directive may crash the agent)
+
+2008-05-02 10:19 dts12
+
+ * include/net-snmp/system/darwin9.h:
+ Handle udpTable indexing on both PPC and Intel hardware.
+
+2008-04-30 05:28 magfr
+
+ * snmplib/snmp_debug.c:
+ Remove unncessary prototypes
+
+2008-04-19 22:20 tanders
+
+ * agent/mibgroup/disman/event/mteTriggerConf.c:
+ don't depend on OID resolution for disman linkUpDownNotifications
+
+2008-04-08 20:38 hardaker
+
+ * perl/agent/agent.pm:
+ CHANGES: perl: fixed an extra brace in the docs pointed out by
+ Jason Martin
+
+2008-04-07 14:00 dts12
+
+ * snmplib/parse.c:
+ Another over-short DESCRIPTION buffer.
+
+2008-04-07 13:57 dts12
+
+ * snmplib/parse.c:
+ Handle longer DESCRIPTION/REFERENCE strings in Capabilities
+ statements.
+ (Consistent processing with other MIB definition macros).
+ Fix provided by Aleksandr Lomanov.
+
+2008-03-26 07:52 magfr
+
+ * snmplib/read_config.c:
+ NEWS: snmplib: from "Aleksandr Lomanov": Corrected registering of
+ multiple premib config handlers so that all of them get
+ registered as premib handlers as opposed to the earlier behaviour
+ where they always got registered as normal config items.
+
+2008-03-25 06:07 magfr
+
+ * agent/agent_registry.c:
+ Remove spurious printf from unregister_mib_context
+
+2008-03-24 17:54 dts12
+
+ * local/mib2c:
+ CHANGES: mib2c: BUG: 1874059,1737068: Handle MIB objects with
+ embedded hyphens
+
+2008-03-24 17:29 dts12
+
+ * snmplib/asn1.c:
+ CHANGES: snmplib: BUG: 1866655: Handle parsing invalid OID
+ subidentifiers
+
+2008-03-24 16:53 dts12
+
+ * snmplib/asn1.c:
+ CHANGES: library: PATCH: 1921861: Avoid endless loop after
+ truncating 64bit int
+
+2008-03-24 15:00 dts12
+
+ * configure, configure.in:
+ CHANGES: build: BUG: 1823381: Valid MIB directory search path on
+ Windows
+
+2008-03-21 17:55 hardaker
+
+ * agent/mibgroup/smux/smux.c, snmplib/snmpAAL5PVCDomain.c,
+ snmplib/snmpCallbackDomain.c, snmplib/snmpTCPDomain.c,
+ snmplib/snmpTCPIPv6Domain.c, snmplib/snmpUnixDomain.c,
+ snmplib/winpipe.c:
+ NEWS: libsnmp: PATCH: 1895927: from jhum8111: change obsolete
+ recv/send to recvfrom/sendto
+
+2008-03-21 17:49 hardaker
+
+ * python/netsnmp/client_intf.c:
+ CHANGES: python: PATCH: 1862177: from wafflesouffle: made code
+ more windows/cygwin compiler friendl
+
+2008-03-21 17:45 hardaker
+
+ * python/netsnmp/client.py:
+ CHANGES: python: PATCH: 1877840: fix MIB label and indexing due
+ to slightly broken regexp
+
+2008-03-21 17:39 hardaker
+
+ * perl/agent/Support/Support.pm:
+ CHANGES: perl: PATCH: 1920390: from wilmesj: fix registration of
+ tables with .0 as IIDs
+
+2008-03-21 17:32 hardaker
+
+ * perl/agent/Support/Support.pm:
+ CHANGES: perl: PATCH: 1914645: from wilmesj: better end of mib
+ support
+
+2008-03-21 17:28 hardaker
+
+ * perl/agent/agent.xs:
+ CHANGES: perl: PATCH: 1914643: from wilmesj: fix issues with
+ embedded perl returning 0 being reclassified as a wrong data type
+ when an int works.
+
+2008-03-21 17:22 hardaker
+
+ * local/Makefile.in:
+ CHANGES: mib2c: PATCH 1914398: from wilmesj: install
+ mib2c.perl.conf
+
+2008-03-21 17:02 hardaker
+
+ * perl/agent/Support/Support.pm:
+ CHANGES: perl: PATCH: 1914393: from wilmesj: registerAgent can
+ now be run multiple times
+
+2008-03-21 16:35 hardaker
+
+ * agent/helpers/table_iterator.c:
+ NEWS: snmpd: PATCH: 1909813: fix table_iterator hint to get_first
+ when SORTED flag is set
+
+2008-02-27 22:12 hardaker
+
+ * agent/mibgroup/host/hr_swinst.c:
+ Fix C++ style comment
+
+2008-02-22 23:52 hardaker
+
+ * agent/mibgroup/if-mib/data_access/interface.c:
+ CHANGES: snmpd: PATCH: 1896118: patch from jsafranek: fix ifTable
+ 32bit counters on linux
+
+2008-02-22 23:44 hardaker
+
+ * snmplib/parse.c:
+ CHANGES: libsnmp: PATCH: 1898204: from Mike Wescott: fix bug
+ 1898198 in parse.c to avoid a segfault when parsing broken mibs.
+
+2008-02-18 12:11 dts12
+
+ * man/mib_api.3.def:
+ Clarify the need to reset buffer length when calling 'read_objid'
+ repeatedly.
+
+2008-02-17 18:01 tanders
+
+ * agent/mibgroup/mibII/var_route.c:
+ fix typo in variable name
+
+2008-02-17 08:38 tanders
+
+ * agent/agent_registry.c:
+ portability fix
+
+2008-02-15 13:00 tanders
+
+ * agent/mibgroup/host/hr_swinst.c:
+ portability fix
+
+2008-02-15 04:39 hardaker
+
+ * agent/snmpd.c:
+ CHANGES: snmpd: PATCH: 1716548: from myamato: Fix help output so
+ no space is printed between -D and arguments.
+
+2008-02-15 03:44 hardaker
+
+ * agent/agent_registry.c:
+ NEWS: snmpd: PATCH: 1893468: from gkoenig: fixed registration of
+ OIDs with ranges
+
+2008-02-14 21:40 tanders
+
+ * agent/mibgroup/mibII/var_route.c:
+ fix typo in variable declaration (unbreaks the build on a few
+ systems)
+
+2008-02-14 00:29 hardaker
+
+ * COPYING:
+ year update for sparta
+
+2008-02-13 23:37 magfr
+
+ * include/net-snmp/library/container.h, snmplib/container.c:
+ NEWS: snmplib: Change CONTAINER_INSERT to not do partial inserts
+ in containers with multiple indices when one insert fails.
+
+2008-02-13 23:11 hardaker
+
+ * snmplib/snmpusm.c:
+ Fixed the createUser line to specify the -e flag (responding to a
+ complaint about it be missing)
+
+2008-02-13 17:15 hardaker
+
+ * agent/mibgroup/host/hr_swinst.c:
+ CHANGES: snmpd: PATCH: 1783733: Put the package version number
+ into the hrSWInst table for solaris.
+
+2008-02-13 16:12 hardaker
+
+ * agent/mibgroup/mibII/at.c, agent/mibgroup/mibII/ipAddr.c,
+ agent/mibgroup/mibII/udpTable.c,
+ agent/mibgroup/mibII/var_route.c:
+ CHANGES: snmpd: PATCH: 1784747: from jsafranek: Fix long usage
+ for ip adresses on 64 bit systems in various MIB-II tables.
+
+2008-02-13 16:02 hardaker
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c,
+ include/net-snmp/library/tools.h:
+ CHANGES: snmpd: PATCH: 1826102: from jsafranek: support longer
+ interface names on linux
+
+2008-02-13 09:22 tanders
+
+ * configure:
+ revert to autoconf 2.59 per existing policy
+
+2008-02-12 23:23 hardaker
+
+ * snmplib/mib.c:
+ CHANGES: libsnmp: PATCH: 1807489: fix ignoring of display hints.
+
+2008-02-12 22:09 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+ CHANGES: snmpd: PATCH: 1866823: from jsafranek: truncate 32 bit
+ counter values on 64 bit machines to avoid bogus warnings.
+
+2008-02-12 19:05 hardaker
+
+ * agent/mibgroup/if-mib/data_access/interface.c,
+ agent/mibgroup/if-mib/ifTable/ifTable_data_access.c:
+ CHANGES: snmpd: PATCH: 1849903: from jsafranek: do not spam log
+ with asserts when XEN is used
+
+2008-02-12 18:50 hardaker
+
+ * snmplib/callback.c:
+ CHANGES: libsnmp: PATCH: 1875022: from sem_prg: improve callback
+ locking mechanisms
+
+2008-02-12 17:40 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory_freebsd2.c:
+ CHANGES: snmpd: PATCH: 1879261: from amesbury: Add in inactive
+ memory to the cached report for freebsd
+
+2008-02-12 15:22 hardaker
+
+ * agent/mibgroup/host/hr_disk.c:
+ Change snprintf print lengths to len-1 to leave 0 in final
+ position for printing
+
+2008-02-11 22:26 hardaker
+
+ * configure, configure.in:
+ fix quoted strings in help output
+
+2008-01-30 17:29 hardaker
+
+ * configure, configure.in:
+ added vacm_conf to existing configure files (for trapd too)
+
+2008-01-20 07:55 tanders
+
+ * configure, configure.in:
+ CHANGES: build: BUG: 1872266: PERLCC check fails for CC with
+ options
+
+2008-01-17 01:13 hardaker
+
+ * agent/mibgroup/default_modules.h:
+ fix default mibs to include vacm_conf too
+
+2008-01-17 00:09 magfr
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c:
+ CHANGES: snmpd: PATCH: 1826088: from Jan Safranek: Use the right
+ interface t read the netmask
+
+2008-01-16 21:54 magfr
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+ CHANGES: Handle device names with embedded spaces in
+ UCD-SNMP-MIB::dskDevice
+
+2008-01-16 00:47 magfr
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+ CHANGES: snmpd: PATCH: 1828839: from jsafranek to provide better
+ handling of disks mounted on paths with embedded spaces
+
+2008-01-15 16:47 hardaker
+
+ * snmplib/default_store.c:
+ coverity bug 205: double check pointer that should never be null
+
+2008-01-09 21:58 magfr
+
+ * snmplib/container_binary_array.c:
+ Delete unused static functions
+
+2008-01-06 13:01 magfr
+
+ * snmplib/snmp_client.c:
+ Make error_string private and readonly
+
+2007-12-22 19:22 dts12
+
+ * perl/SNMP/SNMP.xs:
+ CHANGES: perl: BUG: 1826174: Check for buffer overflow when
+ printing values.
+
+2007-12-21 23:19 dts12
+
+ * perl/SNMP/SNMP.pm:
+ CHANGES: perl: BUG: 1747733: More robust handling of undefined
+ values.
+ Patch supplied by Matti Linnanvuori
+
+2007-12-21 21:33 dts12
+
+ * agent/mibgroup/host/hr_filesys.c, agent/mibgroup/ucd-snmp/disk.c:
+ CHANGES: snmpd: BUG: 1748206: Protect against failures to open
+ /etc/mtab (or equiv)
+
+2007-12-21 18:42 dts12
+
+ * net-snmp-config.in:
+ Bring order of agent library linking into line with agent
+ Makefile.
+ Problem reported by Steve McCarthy.
+ Qn: Should 5.2.x and 5.3.x also use the same order?
+ (for both agent Makefile and net-snmp-config)
+
+2007-12-21 13:11 dts12
+
+ * apps/snmptrapd_log.c:
+ CHANGES: build: BUG: 1802833: Ensure snmptrapd builds with
+ --disable-snmpv1/2c
+
+2007-12-20 16:26 dts12
+
+ * perl/SNMP/SNMP.xs:
+ CHANGES: perl: BUG: 1834539: Consistent handling of OID parsing.
+ Applies patch #1834983, provided by Dmitry Karasik
+
+2007-12-20 14:20 dts12
+
+ * agent/helpers/watcher.c:
+ CHANGES: snmpd: BUG: 1822360: Fix spinlock helper error handling.
+
+2007-12-20 14:18 dts12
+
+ * snmplib/asn1.c:
+ CHANGES: snmplib: BUG: 1795840: Signed 32-bit truncation logged
+ as debug message rather then error.
+
+2007-12-20 14:14 dts12
+
+ * agent/mibgroup/host/hr_filesys.c:
+ CHANGES: snmpd: BUG: 1792890: include CIFS mounts when skipping
+ remote filesystems
+
+2007-12-20 14:12 dts12
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_data_access.c:
+ CHANGES: snmpd: BUG: 1771221: Retain ifLastChange information on
+ data reload.
+
+2007-12-20 14:08 dts12
+
+ * agent/mibgroup/notification-log-mib/notification_log.c:
+ CHANGES: snmpd: BUG: 1758212: Handling missing variable types
+ (IpAddress,Counter,Opaque)
+
+2007-12-19 22:39 magfr
+
+ * snmplib/container.c, snmplib/container_iterator.c,
+ snmplib/container_null.c, snmplib/data_list.c,
+ snmplib/read_config.c:
+ Correct doxygen warnings
+
+2007-12-19 22:31 magfr
+
+ * testing/tests/Sv3vacmconfig, testing/tests/T001snmpv1get,
+ testing/tests/T014snmpv2cget, testing/tests/T015snmpv2cgetnext,
+ testing/tests/T0160snmpv2cbulkget,
+ testing/tests/T016snmpv2cgetfail,
+ testing/tests/T017snmpv2ctov1getfail,
+ testing/tests/T018snmpv1tov2cgetfail,
+ testing/tests/T019snmpv2cnosuch, testing/tests/T022snmpv3getMD5,
+ testing/tests/T023snmpv3getMD5AES,
+ testing/tests/T023snmpv3getMD5DES,
+ testing/tests/T025snmpv3getSHADES,
+ testing/tests/T030snmpv3usercreation,
+ testing/tests/T051snmpv2ctrap, testing/tests/T052snmpv2cinform,
+ testing/tests/T058agentauthtrap,
+ testing/tests/T059trapdtraphandle, testing/tests/T060trapdperl,
+ testing/tests/T061agentperl, testing/tests/T065agentextend,
+ testing/tests/T100agenthup, testing/tests/T115agentxperl,
+ testing/tests/T120proxyget, testing/tests/T121proxyset,
+ testing/tests/T122proxysetfail, testing/tests/T130snmpv1vacmget,
+ testing/tests/T131snmpv2cvacmget,
+ testing/tests/T140snmpv1vacmgetfail,
+ testing/tests/T141snmpv2cvacmgetfail,
+ testing/tests/T150solarishostcpu,
+ testing/tests/T151solarishostdisk, testing/tests/T152hostuptime,
+ testing/tests/T153solarisswap, testing/tests/T160snmpnetstat,
+ testing/tests/T200snmpv2cwalkall:
+ Use NETSNMP_-prefixed symbols when deciding what tests to run as
+ the compat symbols aren't defined.
+
+2007-12-19 22:06 magfr
+
+ * snmplib/snmp_api.c:
+ BUG 1831568: strdup might fail and return NULL - take care of it
+ in this case at least.
+
+2007-12-19 21:49 magfr
+
+ * agent/mibgroup/utilities/override.c, snmplib/snmp_api.c:
+ BUG 1824883: Remove memory leak
+
+2007-12-19 20:46 magfr
+
+ * agent/helpers/watcher.c:
+ CHANGES: BUG: 1851047: Do not try to do more handling of a value
+ once it is found to be corrupt by the watcher helper, thus
+ avoiding code that counts on getting the right type. This bug was
+ found by Charlie Miller, Independent Security Evaluators.
+
+2007-11-27 09:56 dts12
+
+ * man/snmptrapd.8.def:
+ Clarify use of the -A (log append) option.
+
+2007-11-22 15:42 rstory
+
+ * agent/mibgroup/agent/nsCache.c, agent/mibgroup/agent/nsDebug.c:
+ check request, not requests. reported by ulim on irc
+
+2007-11-22 15:16 rstory
+
+ * agent/mibgroup/agent/nsLogging.c:
+ check request, not requests. reported by ulim on irc
+
+2007-11-19 21:34 tanders
+
+ * agent/mibgroup/kernel_sunos5.c:
+ CHANGES: Solaris: PATCH: 1834699: from apersson: Fix 1833294:
+ DLPI problems on Solaris 2.6
+
+2007-11-08 23:17 tanders
+
+ * agent/mibgroup/if-mib/data_access/interface_solaris2.c,
+ agent/mibgroup/kernel_sunos5.c, agent/mibgroup/kernel_sunos5.h,
+ agent/mibgroup/mibII/interfaces.c:
+ CHANGES: Solaris: PATCH: 1824196: {ifOperStatus,ipAdEntIfIndex}
+ reported incorrectly
+ Patch supplied by Anders Persson. Fixes Bugs 1822275 and 1819189.
+
+2007-10-16 07:17 magfr
+
+ * agent/helpers/instance.c, agent/helpers/scalar.c,
+ agent/helpers/watcher.c, agent/mibgroup/examples/example.c,
+ agent/mibgroup/smux/smux.c:
+ CHANGES: misc: avoid calling debug macros with too many
+ arguments.
+
+2007-10-16 06:18 magfr
+
+ * snmplib/snmp_service.c, snmplib/snmp_transport.c:
+ Make the library buildable as C++ again.
+
+2007-10-15 20:39 magfr
+
+ * agent/mibgroup/disman/expr/expValueTable.c:
+ Convert an infinite loop to a finite one.
+ Remove an unused variable.
+
+2007-10-14 22:10 magfr
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_common.c,
+ agent/mibgroup/ip-mib/data_access/scalars_linux.c,
+ agent/mibgroup/smux/smux.c,
+ agent/mibgroup/tcp-mib/data_access/tcpConn_common.c:
+ CHANGES: misc: Avoid calling debug macros with too few arguments.
+
+2007-10-14 20:51 tanders
+
+ * snmplib/read_config.c:
+ CHANGES: snmplib: PATCH: 1811469: read_config_files_in_path()
+ reads past malloc'd buffer
+
+2007-10-14 20:41 tanders
+
+ * perl/SNMP/SNMP.xs:
+ CHANGES: perl: PATCH: 1811463: perl async callback coredump
+ CHANGES: perl: BUG: 1606062: perl bulkwalk (async) coredump
+
+2007-10-14 19:07 tanders
+
+ * snmplib/snmp_logging.c:
+ CHANGES: snmplib: PATCH: 1806336: fix -LS option parsing
+
+2007-10-14 12:12 tanders
+
+ * agent/mibgroup/mibII/tcpTable.c:
+ fix comment
+
+2007-10-13 23:28 tanders
+
+ * testing/tests/T160snmpnetstat:
+ CHANGES: test: enhance snmpnetstat test to check tcpTable in TCP
+ mode
+
+2007-10-13 22:28 tanders
+
+ * agent/mibgroup/mibII/tcpTable.c,
+ include/net-snmp/system/solaris.h:
+ CHANGES: Solaris: BUG: 1810814: tcpTable missing entries and
+ wrong ports
+
+2007-10-12 21:46 tanders
+
+ * include/net-snmp/system/solaris.h:
+ CHANGES: Solaris: #define NEW_MIB_COMPLIANT to support Solaris
+ 10U4+
+
+2007-10-11 20:46 magfr
+
+ * snmplib/snmpUDPDomain.c:
+ CHANGES: snmplib: Do not leak memory whenever an udp address is
+ formatted.
+
+2007-09-30 20:59 magfr
+
+ * agent/mibgroup/agentx/agentx_config.c,
+ include/net-snmp/library/snmp_service.h, snmplib/snmp_api.c,
+ snmplib/snmp_service.c, snmplib/snmp_transport.c:
+ CHANGES: BUG: 1801835: Added the ability to have multiple default
+ transports for an application. On open the different transports
+ will be tried in order. As a consequence snmp and snmptrap now
+ will try first udp and then udp6 and agentx wil try first unix
+ and then tcp.
+
+2007-09-29 13:10 magfr
+
+ * snmplib/snmpUDPIPv6Domain.c:
+ CHANGES: snmplib: Do not try to look up empty strings as
+ hostnames for IPv6
+ Additinally, print what string filed to resolve using getaddrinfo
+ for IPv6
+
+2007-09-24 20:43 hardaker
+
+ * COPYING:
+ year update
+
+2007-09-20 21:55 tanders
+
+ * agent/mibgroup/ucd-snmp/proc.c:
+ CHANGES: snmpd: PATCH: 1746831: from cunnijd: fix process
+ checking race
+ condition under Linux and platform #ifdefs
+
+2007-09-19 21:09 tanders
+
+ * snmplib/snmpUDPDomain.c:
+ CHANGES: snmplib: BUG: Coverity #183: fix memory leak if
+ IP_PKTINFO fails
+
+2007-09-16 09:51 magfr
+
+ * local/mib2c-update:
+ Remove bashisms. This is netbsd patch-et from bug 1745404.
+
+2007-09-16 09:45 magfr
+
+ * agent/mibgroup/host/hr_device.c:
+ Use const char* for temporary constant string variable. This is
+ netbsd patch-ea from bug 1745404.
+
+2007-09-16 09:40 magfr
+
+ * snmplib/snmp_api.c:
+ Use the natural type of in_addr_t's for comparisions. This is
+ netbsd patch-ea from bug 1745404.
+
+2007-09-16 07:06 magfr
+
+ * agent/mibgroup/agentx/master.c:
+ CHANGES: BUG: 1793545: Take the name from the sockaddr_un in
+ order to avoid transport specifiers and other decorations.
+
+2007-09-14 14:44 dts12
+
+ * dist/makerelease:
+ Synch with main trunk release script.
+
+2007-09-13 21:25 tanders
+
+ * README:
+ drop obsolete mirrors
+
+2007-08-25 14:24 magfr
+
+ * agent/mibgroup/notification-log-mib/notification_log.c,
+ agent/mibgroup/notification-log-mib/notification_log.h:
+ Make most of notification_log static. Minimize the header file.
+
+2007-08-22 21:56 tanders
+
+ * agent/agent_registry.c:
+ NEWS: agent: suppress annoying "registration != duplicate"
+ warning for root oids
+ (otherwise, you'll get this message on almost every startup)
+
+2007-08-20 08:06 tanders
+
+ * snmplib/snmpUDPIPv6Domain.c:
+ NEWS: snmplib: fix potential buffer overflow in sprintf for
+ UDP/IPv6
+
+2007-08-17 09:08 dts12
+
+ * FAQ:
+ Synch with main development (and on-line) FAQ text.
+
+2007-08-17 08:59 dts12
+
+ * FAQ:
+ Clarify handling of unknown communities
+
+2007-08-16 15:36 dts12
+
+ * agent/mibgroup/agent/extend.c:
+ Don't just report the problem - it might be sensible to avoid
+ crashing the agent as well!
+
+2007-08-16 15:35 dts12
+
+ * agent/mibgroup/agent/extend.c:
+ CHANGES: snmpd: PATCH: 1744157: Report duplicate "extend/exec"
+ identifiers.
+
+2007-08-16 15:24 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c, apps/snmptrapd_ds.h:
+ CHANGES: snmptrapd: PATCH: 1746992: Improve snmptrapd
+ access-control error messages.
+
+2007-08-16 14:12 dts12
+
+ * agent/mibgroup/util_funcs.c:
+ CHANGES: snmpd: PATCH: 1752934: Fix off-by-one qsort error in
+ table utilities.
+
+2007-08-16 13:31 dts12
+
+ * agent/snmp_agent.c:
+ CHANGES: snmpd: PATCH: 1753437: Fix error index on failing SET
+ requests
+
+2007-08-16 13:25 dts12
+
+ * agent/mibgroup/agentx/master.c:
+ CHANGES: snmpd: PATCH: 1753449: Fix AgentX error propagation
+
+2007-08-16 12:34 dts12
+
+ * agent/mibgroup/agentx/subagent.c:
+ CHANGES: snmpd: PATCH: 1753463: Fix AgentX subagent ping alarm
+ handling
+
+2007-08-16 12:13 dts12
+
+ * agent/mibgroup/notification-log-mib/notification_log.c:
+ CHANGES: snmpd: PATCH: 1758208: Fix memory leak
+
+2007-08-16 12:03 dts12
+
+ * agent/mibgroup/host/hr_swrun.c:
+ CHANGES: snmpd: PATCH: 1774612: More resilient process status
+ handling
+
+2007-08-16 11:58 dts12
+
+ * snmplib/snmpUDPDomain.c:
+ CHANGES: snmplib: PATCH: 1775124: Fix clientaddr functionality
+
+2007-08-16 09:38 dts12
+
+ * snmplib/parse.c:
+ CHANGES: snmplib: PATCH: 1768285: Count MIB files correctly in
+ add_mibdir()
+
+2007-08-16 09:35 dts12
+
+ * apps/snmptrapd.c:
+ CHANGES: snmptrapd: PATCH: 1767725: Close all non standard file
+ handles
+
+2007-08-16 09:00 dts12
+
+ * agent/mibgroup/disman/expr/expValue.c:
+ Declare initialisation routine correctly, and omit unused
+ variables.
+ Patch from Magnus Fromreide.
+
+2007-08-16 08:55 dts12
+
+ * include/net-snmp/agent/net-snmp-agent-includes.h:
+ Read in agent configuration settings *before* the header
+ files that might rely on them.
+
+2007-08-02 13:46 dts12
+
+ * mibs/NET-SNMP-EXAMPLES-MIB.txt:
+ It might be slightly less confusing if the netSnmpExampleString
+ MIB object did actually take string values. Picky, I know....
+
+-------------------------------------------------------------------------------
+
+Changes: V5-4-patches branch created -> V5.4.1
+
+2007-07-27 17:02 hardaker
+
+ * FAQ, README, configure, configure.in, dist/net-snmp.spec,
+ sedscript.in, snmplib/snmp_version.c:
+ - version tag ( 5.4.1 )
+
+2007-07-27 17:01 hardaker
+
+ * CHANGES, NEWS:
+ version update
+
+2007-07-27 16:58 hardaker
+
+ * ChangeLog:
+ remove bogus empty * lines from the ChangeLog
+
+2007-07-27 16:54 hardaker
+
+ * ChangeLog:
+ fix version numbers in ChangeLog
+
+2007-07-27 16:54 hardaker
+
+ * ChangeLog:
+ version update
+
+2007-07-27 16:15 hardaker
+
+ * man/netsnmp_agent.3, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3,
+ man/netsnmp_baby_steps.3, man/netsnmp_bulk_to_next.3,
+ man/netsnmp_cache_handler.3, man/netsnmp_callback.3,
+ man/netsnmp_container.3, man/netsnmp_data_list.3,
+ man/netsnmp_debug.3, man/netsnmp_default_store.3,
+ man/netsnmp_handler.3, man/netsnmp_instance.3,
+ man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3,
+ man/netsnmp_library.3, man/netsnmp_mib_maintenance.3,
+ man/netsnmp_mib_utilities.3, man/netsnmp_mode_end_call.3,
+ man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3,
+ man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3,
+ man/netsnmp_snmp_client.3, man/netsnmp_snmp_logging.3,
+ man/netsnmp_snmp_pdu.3, man/netsnmp_snmp_session.3,
+ man/netsnmp_stash_cache.3, man/netsnmp_stash_to_next.3,
+ man/netsnmp_table.3, man/netsnmp_table_array.3,
+ man/netsnmp_table_container.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_generic.3,
+ man/netsnmp_table_indexes.3, man/netsnmp_table_iterator.3,
+ man/netsnmp_table_iterator.h.3, man/netsnmp_table_maintenance.3,
+ man/netsnmp_table_rows.3, man/netsnmp_tdata.3,
+ man/netsnmp_util.3, man/netsnmp_utilities.3,
+ man/netsnmp_variable_list.3, man/netsnmp_watcher.3:
+ documentation update
+
+2007-07-27 16:13 hardaker
+
+ * doxygen.conf:
+ - version tag ( 5.4.1 )
+
+2007-07-25 22:41 tanders
+
+ * agent/mibgroup/agentx/subagent.c:
+ CHANGES: snmpd: BUG: 1760633: fix typo in debug message
+
+2007-07-22 00:55 tanders
+
+ * NEWS:
+ remove duplicate entry
+
+2007-07-22 00:52 tanders
+
+ * NEWS:
+ improve NEWS section for 5.4.1
+
+2007-07-21 16:17 hardaker
+
+ * FAQ, README, configure, configure.in, dist/net-snmp.spec,
+ sedscript.in, snmplib/snmp_version.c:
+ - version tag ( 5.4.1.rc4 )
+
+2007-07-21 16:16 hardaker
+
+ * CHANGES, NEWS:
+ version update
+
+2007-07-21 16:13 hardaker
+
+ * ChangeLog:
+ version update
+
+2007-07-21 15:07 hardaker
+
+ * man/netsnmp_agent.3, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3,
+ man/netsnmp_baby_steps.3, man/netsnmp_bulk_to_next.3,
+ man/netsnmp_cache_handler.3, man/netsnmp_callback.3,
+ man/netsnmp_container.3, man/netsnmp_data_list.3,
+ man/netsnmp_debug.3, man/netsnmp_default_store.3,
+ man/netsnmp_handler.3, man/netsnmp_instance.3,
+ man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3,
+ man/netsnmp_library.3, man/netsnmp_mib_maintenance.3,
+ man/netsnmp_mib_utilities.3, man/netsnmp_mode_end_call.3,
+ man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3,
+ man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3,
+ man/netsnmp_snmp_client.3, man/netsnmp_snmp_logging.3,
+ man/netsnmp_snmp_pdu.3, man/netsnmp_snmp_session.3,
+ man/netsnmp_stash_cache.3, man/netsnmp_stash_to_next.3,
+ man/netsnmp_table.3, man/netsnmp_table_array.3,
+ man/netsnmp_table_container.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_generic.3,
+ man/netsnmp_table_indexes.3, man/netsnmp_table_iterator.3,
+ man/netsnmp_table_iterator.h.3, man/netsnmp_table_maintenance.3,
+ man/netsnmp_table_rows.3, man/netsnmp_tdata.3,
+ man/netsnmp_util.3, man/netsnmp_utilities.3,
+ man/netsnmp_variable_list.3, man/netsnmp_watcher.3:
+ documentation update
+
+2007-07-21 15:06 hardaker
+
+ * doxygen.conf:
+ - version tag ( 5.4.1.rc4 )
+
+2007-07-21 14:51 hardaker
+
+ * snmplib/snmp_api.c:
+ patch to fix forwarding encoding
+
+2007-07-20 08:21 dts12
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+ Tweak warning message for (old-style, invalid format) "exec OID"
+ directives.
+
+2007-07-19 21:16 tanders
+
+ * aclocal.m4, config.guess, config.sub, configure, ltmain.sh:
+ NEWS: build: update to libtool 1.5.24 (from 1.5.22)
+ CHANGES: HP-UX: BUG: 1742278: compile error on HP-UX 11.23 (IA64)
+
+2007-07-19 21:01 dts12
+
+ * agent/mibgroup/disman/schedule/schedCore.c, agent/snmpd.c:
+ Check for presence of 'chown' and 'localtime_r' routines before
+ using them.
+
+2007-07-19 21:00 dts12
+
+ * configure, configure.in, include/net-snmp/net-snmp-config.h.in,
+ win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/net-snmp-config.h.in:
+ Configure checks for 'chown' and 'localtime_r' functions
+
+2007-07-17 00:20 hardaker
+
+ * FAQ, README, configure, configure.in, dist/net-snmp.spec,
+ sedscript.in, snmplib/snmp_version.c:
+ - version tag ( 5.4.1.rc3 )
+
+2007-07-17 00:19 hardaker
+
+ * ChangeLog:
+ version update
+
+2007-07-17 00:17 hardaker
+
+ * man/netsnmp_agent.3, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3,
+ man/netsnmp_baby_steps.3, man/netsnmp_bulk_to_next.3,
+ man/netsnmp_cache_handler.3, man/netsnmp_callback.3,
+ man/netsnmp_container.3, man/netsnmp_data_list.3,
+ man/netsnmp_debug.3, man/netsnmp_default_store.3,
+ man/netsnmp_handler.3, man/netsnmp_instance.3,
+ man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3,
+ man/netsnmp_library.3, man/netsnmp_mib_maintenance.3,
+ man/netsnmp_mib_utilities.3, man/netsnmp_mode_end_call.3,
+ man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3,
+ man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3,
+ man/netsnmp_snmp_client.3, man/netsnmp_snmp_logging.3,
+ man/netsnmp_snmp_pdu.3, man/netsnmp_snmp_session.3,
+ man/netsnmp_stash_cache.3, man/netsnmp_stash_to_next.3,
+ man/netsnmp_table.3, man/netsnmp_table_array.3,
+ man/netsnmp_table_container.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_generic.3,
+ man/netsnmp_table_indexes.3, man/netsnmp_table_iterator.3,
+ man/netsnmp_table_iterator.h.3, man/netsnmp_table_maintenance.3,
+ man/netsnmp_table_rows.3, man/netsnmp_tdata.3,
+ man/netsnmp_util.3, man/netsnmp_utilities.3,
+ man/netsnmp_variable_list.3, man/netsnmp_watcher.3:
+ documentation update
+
+2007-07-17 00:16 hardaker
+
+ * doxygen.conf:
+ - version tag ( 5.4.1.rc3 )
+
+2007-07-16 23:59 hardaker
+
+ * agent/agent_registry.c,
+ agent/mibgroup/ip-forward-mib/data_access/route_common.c,
+ agent/mibgroup/ip-mib/data_access/ipaddress_common.c,
+ agent/mibgroup/mibII/icmp.c, agent/mibgroup/mibII/ip.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c,
+ snmplib/data_list.c:
+ Apply (correct) patch from Marcus Rueckert to remove asserts
+ using sort-o-illegal C string compares
+
+2007-07-16 23:59 hardaker
+
+ * agent/agent_registry.c,
+ agent/mibgroup/ip-forward-mib/data_access/route_common.c,
+ agent/mibgroup/ip-mib/data_access/ipaddress_common.c,
+ agent/mibgroup/mibII/icmp.c, agent/mibgroup/mibII/ip.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c,
+ snmplib/data_list.c:
+ Remove previous patch which was the wrong version
+
+2007-07-16 23:57 hardaker
+
+ * agent/agent_registry.c,
+ agent/mibgroup/ip-forward-mib/data_access/route_common.c,
+ agent/mibgroup/ip-mib/data_access/ipaddress_common.c,
+ agent/mibgroup/mibII/icmp.c, agent/mibgroup/mibII/ip.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c,
+ snmplib/data_list.c:
+ Apply patch from Marcus Rueckert to remove asserts using
+ sort-o-illegal C string compares
+
+2007-07-12 21:51 tanders
+
+ * perl/agent/agent.pm:
+ fix subagent example (documentation)
+
+2007-07-12 21:27 tanders
+
+ * man/snmp_sess_api.3.def:
+ snmp_sess_read returns int, not void
+
+2007-07-07 00:17 hardaker
+
+ * FAQ, README, configure, configure.in, dist/net-snmp.spec,
+ sedscript.in, snmplib/snmp_version.c:
+ - version tag ( 5.4.1.rc2 )
+
+2007-07-07 00:17 hardaker
+
+ * CHANGES:
+ version update
+
+2007-07-07 00:13 hardaker
+
+ * ChangeLog:
+ version update
+
+2007-07-07 00:11 hardaker
+
+ * man/netsnmp_agent.3, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3,
+ man/netsnmp_baby_steps.3, man/netsnmp_bulk_to_next.3,
+ man/netsnmp_cache_handler.3, man/netsnmp_callback.3,
+ man/netsnmp_container.3, man/netsnmp_data_list.3,
+ man/netsnmp_debug.3, man/netsnmp_default_store.3,
+ man/netsnmp_handler.3, man/netsnmp_instance.3,
+ man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3,
+ man/netsnmp_library.3, man/netsnmp_mib_maintenance.3,
+ man/netsnmp_mib_utilities.3, man/netsnmp_mode_end_call.3,
+ man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3,
+ man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3,
+ man/netsnmp_snmp_client.3, man/netsnmp_snmp_logging.3,
+ man/netsnmp_snmp_pdu.3, man/netsnmp_snmp_session.3,
+ man/netsnmp_stash_cache.3, man/netsnmp_stash_to_next.3,
+ man/netsnmp_table.3, man/netsnmp_table_array.3,
+ man/netsnmp_table_container.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_generic.3,
+ man/netsnmp_table_indexes.3, man/netsnmp_table_iterator.3,
+ man/netsnmp_table_iterator.h.3, man/netsnmp_table_maintenance.3,
+ man/netsnmp_table_rows.3, man/netsnmp_tdata.3,
+ man/netsnmp_util.3, man/netsnmp_utilities.3,
+ man/netsnmp_variable_list.3, man/netsnmp_watcher.3:
+ documentation update
+
+2007-07-07 00:10 hardaker
+
+ * doxygen.conf:
+ - version tag ( 5.4.1.rc2 )
+
+2007-07-06 23:39 hardaker
+
+ * Makefile.rules, Makefile.top:
+ CHANGES: build: use libtool clean for removing files to ensure we
+ delete all libtool temporary files.
+
+2007-07-06 21:22 rstory
+
+ * snmplib/read_config.c:
+ stop searching paths when done
+
+2007-07-06 21:14 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+ do not free interface entry just because we can not get stats for
+ it
+
+2007-07-06 15:32 dts12
+
+ * agent/mibgroup/agent/extend.c:
+ CHANGES: snmpd: BUG 1745113: Handle single-line (and zero-line)
+ output in UCD compatability mode.
+
+2007-07-05 14:45 rstory
+
+ * ., README.osX:
+ r20044@dhcp211: rstory | 2007-07-05 10:44:01 -0400
+ remove disable-static from recommended options
+
+2007-07-05 11:05 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+ skip stats parsing on interfaces with no statistics
+
+2007-07-04 23:26 tanders
+
+ * agent/Makefile.in, apps/Makefile.in:
+ CHANGES: perl: install embedded perl init files for
+ snmpd/snmptrapd with mode 644 instead of 755
+
+2007-07-04 21:42 tanders
+
+ * README.osX:
+ Perl problems (believed to be) fixed
+
+2007-07-03 22:36 hardaker
+
+ * configure, configure.in, include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/types.h, snmplib/snmp_client.c,
+ win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/net-snmp-config.h.in:
+ CHANGES: library: Patch from "Mitsuru Chinen": cleans up the
+ int64 type checking and usage for building packets especially
+ under MSVC.
+
+2007-07-03 12:56 tanders
+
+ * perl/agent/Support/Support.pm:
+ remove executable flag from SVN properties
+
+2007-07-02 06:02 magfr
+
+ * agent/mibgroup/disman/event/mteEvent.c:
+ Add missing return value to _mteEvent_fire_notify.
+
+2007-07-02 05:31 magfr
+
+ * agent/mibgroup/tcp-mib/data_access/tcpConn_common.c:
+ Remove the declaration of an undefined static function.
+
+2007-07-01 19:59 tanders
+
+ * configure, configure.in:
+ minor help text formatting fix
+
+2007-06-30 05:34 tanders
+
+ * dist/net-snmp.spec:
+ add --enable-as-needed if building with embedded Perl support
+
+2007-06-30 04:37 hardaker
+
+ * FAQ, README, configure, configure.in, dist/net-snmp.spec,
+ sedscript.in, snmplib/snmp_version.c:
+ - version tag ( 5.4.1.rc1 )
+
+2007-06-30 04:37 hardaker
+
+ * CHANGES, NEWS:
+ version update
+
+2007-06-30 04:36 hardaker
+
+ * ChangeLog:
+ version update
+
+2007-06-30 04:34 hardaker
+
+ * man/netsnmp_agent.3, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3,
+ man/netsnmp_baby_steps.3, man/netsnmp_bulk_to_next.3,
+ man/netsnmp_cache_handler.3, man/netsnmp_callback.3,
+ man/netsnmp_container.3, man/netsnmp_data_list.3,
+ man/netsnmp_debug.3, man/netsnmp_default_store.3,
+ man/netsnmp_handler.3, man/netsnmp_instance.3,
+ man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3,
+ man/netsnmp_library.3, man/netsnmp_mib_maintenance.3,
+ man/netsnmp_mib_utilities.3, man/netsnmp_mode_end_call.3,
+ man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3,
+ man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3,
+ man/netsnmp_snmp_client.3, man/netsnmp_snmp_logging.3,
+ man/netsnmp_snmp_pdu.3, man/netsnmp_snmp_session.3,
+ man/netsnmp_stash_cache.3, man/netsnmp_stash_to_next.3,
+ man/netsnmp_table.3, man/netsnmp_table_array.3,
+ man/netsnmp_table_container.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_generic.3,
+ man/netsnmp_table_indexes.3, man/netsnmp_table_iterator.3,
+ man/netsnmp_table_iterator.h.3, man/netsnmp_table_maintenance.3,
+ man/netsnmp_table_rows.3, man/netsnmp_tdata.3,
+ man/netsnmp_util.3, man/netsnmp_utilities.3,
+ man/netsnmp_variable_list.3, man/netsnmp_watcher.3:
+ documentation update
+
+2007-06-30 04:32 hardaker
+
+ * doxygen.conf:
+ - version tag ( 5.4.1.rc1 )
+
+2007-06-29 22:18 tanders
+
+ * README.aix, README.irix, README.solaris, agent/Makefile.in,
+ apps/Makefile.in, configure, configure.in, net-snmp-config.in:
+ NEWS: perl: BUG: 1619827: link libnetsnmpagent/libnetsnmptrapd
+ (rather than snmpd/snmptrapd) against libperl when configured
+ with --enable-as-needed
+
+2007-06-28 22:09 tanders
+
+ * net-snmp-config.in:
+ rename last occurence of DEFAULT_MIB[DIR]S to
+ NETSNMP_DEFAULT_MIB[DIR]S
+
+2007-06-26 22:12 tanders
+
+ * apps/Makefile.in:
+ CHANGES: build: work around libnetsnmpagent/libnetsnmphelpers
+ dependency issues when linking snmptrapd
+
+2007-06-26 21:45 tanders
+
+ * agent/Makefile.in, agent/helpers/Makefile.in:
+ CHANGES: build: use LDFLAGS when building agent, helpers and mib
+ lib to be consistent with libnetnmp
+
+2007-06-26 21:28 tanders
+
+ * INSTALL:
+ minor updates
+
+2007-06-24 12:57 tanders
+
+ * acconfig.h, configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in:
+ HAVE_SSIZE_T cleanup
+
+2007-06-23 22:56 tanders
+
+ * README.hpux11:
+ don't suggest --with-libs=-lnm
+
+2007-06-22 15:09 dts12
+
+ * win32/encode_keychange/encode_keychange.dsp,
+ win32/libagent/libagent.dsp, win32/libhelpers/libhelpers.dsp,
+ win32/libnetsnmptrapd/libnetsnmptrapd.dsp, win32/libsdll.dsw,
+ win32/libsnmp/libsnmp.dsp, win32/libsnmp_dll/libsnmp_dll.dsp,
+ win32/netsnmpmibs/netsnmpmibs.dsp,
+ win32/netsnmpmibssdk/netsnmpmibssdk.dsp,
+ win32/snmpbulkget/snmpbulkget.dsp,
+ win32/snmpbulkwalk/snmpbulkwalk.dsp, win32/snmpd/snmpd.dsp,
+ win32/snmpdelta/snmpdelta.dsp, win32/snmpdf/snmpdf.dsp,
+ win32/snmpdsdk/snmpd.dsp, win32/snmpget/snmpget.dsp,
+ win32/snmpgetnext/snmpgetnext.dsp,
+ win32/snmpnetstat/snmpnetstat.dsp, win32/snmpset/snmpset.dsp,
+ win32/snmpstatus/snmpstatus.dsp, win32/snmptable/snmptable.dsp,
+ win32/snmptest/snmptest.dsp,
+ win32/snmptranslate/snmptranslate.dsp,
+ win32/snmptrap/snmptrap.dsp, win32/snmptrapd/snmptrapd.dsp,
+ win32/snmpusm/snmpusm.dsp, win32/snmpvacm/snmpvacm.dsp,
+ win32/snmpwalk/snmpwalk.dsp, win32/win32.dsw, win32/win32sdk.dsw:
+ Enforce DOS-style line endings, to keep Visual Studio happy.
+
+2007-06-20 21:34 tanders
+
+ * agent/mibgroup/if-mib/data_access/interface_sysctl.c:
+ fix typo
+
+2007-06-19 22:23 tanders
+
+ * configure, configure.in:
+ fix Perl-related autoconf messages
+
+2007-06-19 15:08 tanders
+
+ * dist/net-snmp.spec:
+ CHANGES: build: add "BuildRequires: perl-ExtUtils-Embed" to the
+ spec file, e.g. for Fedora 7
+
+2007-06-18 22:28 hardaker
+
+ * perl/SNMP/SNMP.xs:
+ fix broken comment.
+
+2007-06-18 22:04 hardaker
+
+ * FAQ, README, configure, configure.in, dist/net-snmp.spec,
+ sedscript.in, snmplib/snmp_version.c:
+ - version tag ( 5.4.1.pre3 )
+
+2007-06-18 22:03 hardaker
+
+ * CHANGES, NEWS:
+ version update
+
+2007-06-18 21:57 hardaker
+
+ * ChangeLog:
+ version update
+
+2007-06-18 21:54 hardaker
+
+ * agent/helpers/Makefile.in:
+ revert double linking of libnetsmnp part of patch that was
+ supposed to be pulled bofer applying in r16538 (thanks tanders
+ for catching it)
+
+2007-06-18 21:48 hardaker
+
+ * agent/mibgroup/Makefile.depend:
+ make depend
+
+2007-06-18 21:47 hardaker
+
+ * man/netsnmp_agent.3, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3,
+ man/netsnmp_baby_steps.3, man/netsnmp_bulk_to_next.3,
+ man/netsnmp_cache_handler.3, man/netsnmp_callback.3,
+ man/netsnmp_container.3, man/netsnmp_data_list.3,
+ man/netsnmp_debug.3, man/netsnmp_default_store.3,
+ man/netsnmp_handler.3, man/netsnmp_instance.3,
+ man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3,
+ man/netsnmp_library.3, man/netsnmp_mib_maintenance.3,
+ man/netsnmp_mib_utilities.3, man/netsnmp_mode_end_call.3,
+ man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3,
+ man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3,
+ man/netsnmp_snmp_client.3, man/netsnmp_snmp_logging.3,
+ man/netsnmp_snmp_pdu.3, man/netsnmp_snmp_session.3,
+ man/netsnmp_stash_cache.3, man/netsnmp_stash_to_next.3,
+ man/netsnmp_table.3, man/netsnmp_table_array.3,
+ man/netsnmp_table_container.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_generic.3,
+ man/netsnmp_table_indexes.3, man/netsnmp_table_iterator.3,
+ man/netsnmp_table_iterator.h.3, man/netsnmp_table_maintenance.3,
+ man/netsnmp_table_rows.3, man/netsnmp_tdata.3,
+ man/netsnmp_util.3, man/netsnmp_utilities.3,
+ man/netsnmp_variable_list.3, man/netsnmp_watcher.3:
+ documentation update
+
+2007-06-18 21:46 hardaker
+
+ * doxygen.conf:
+ - version tag ( 5.4.1.pre3 )
+
+2007-06-18 21:34 hardaker
+
+ * agent/helpers/Makefile.in, apps/Makefile.in, snmplib/Makefile.in:
+ CHANGES: build: patch from apple to simplify makefile target
+ references in some rules.
+
+2007-06-18 21:17 hardaker
+
+ * man/snmp_config.5.def, man/snmpget.1.def:
+ CHANGES: patch from apple to fix minor documentation bugs.
+
+2007-06-18 21:13 hardaker
+
+ * agent/mibgroup/if-mib/data_access/interface.h,
+ include/net-snmp/system/darwin9.h:
+
+
+2007-06-18 21:12 hardaker
+
+ * agent/mibgroup/hardware/memory/memory_darwin.c:
+ CHANGES: patch from apple to improve memory reporting
+
+2007-06-18 21:09 hardaker
+
+ * include/net-snmp/system/darwin9.h:
+ CHANGES: patch from apple to fix cross-compile builds in apples
+ build environment.
+
+2007-06-18 20:54 hardaker
+
+ * snmplib/snmp_parse_args.c:
+ CHANGES: patch: 1737085: from jsafranek: fix the -M switch for
+ mib parsing by loading defaults first before performing the set
+ so it does not get overwritten by the defaults later.
+
+2007-06-18 20:50 hardaker
+
+ * perl/SNMP/SNMP.xs:
+ NEWS: perl: patch: 1725049: fix bulkwalk in cases of non-repeater
+ usage.
+
+2007-06-18 14:10 tanders
+
+ * perl/TrapReceiver/Makefile.PL:
+ CHANGES: perl: fix prerequisites for NetSNMP::TrapReceiver
+
+2007-06-18 13:39 tanders
+
+ * perl/agent/Support/Support.pm:
+ CHANGES: perl: fix syntax error in NetSNMP::agent::Support
+
+2007-06-14 15:41 rstory
+
+ * local/mib2c.conf:
+ fix typo in user output, as noted on coders
+
+2007-06-14 04:37 magfr
+
+ * agent/mibgroup/smux/smux.h:
+ Add missing argument type in order to silence a gcc warning
+
+2007-06-11 10:11 tanders
+
+ * README.aix:
+ document xlc<->cc_r compiler issues with Perl on AIX (see bug
+ #1600099)
+
+2007-06-10 22:29 tanders
+
+ * configure, configure.in, include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/types.h:
+ CHANGES: build: PATCH: 1728247: from mitsuru_chinen: Add type
+ check for int??_t and uint??_t
+
+2007-06-10 22:22 tanders
+
+ * configure, configure.in, include/net-snmp/net-snmp-config.h.in,
+ snmplib/snmpUDPIPv6Domain.c:
+ CHANGES: build: PATCH: 1728244: from mitsuru_chinen: Add
+ configure check for sin6_scope_id
+
+2007-06-10 22:15 tanders
+
+ * configure, configure.in, include/net-snmp/net-snmp-config.h.in,
+ snmplib/snmpUDPDomain.c:
+ CHANGES: PATCH: 1728241: from mitsuru_chinen: add configure check
+ for <sys/uio.h> (make sure iov structure is declared)
+
+2007-06-08 20:32 tanders
+
+ * Makefile.in:
+ Fix regression introduced by r16479: 'make test TESTOPTS="-T
+ tcp"' now
+ works again. makerelease now uses the right option.
+
+2007-06-08 10:44 dts12
+
+ * apps/snmptrapd.c, apps/snmptrapd_handlers.c:
+ Improve memory handling of style-specific format strings.
+
+2007-06-08 10:33 dts12
+
+ * agent/mibgroup/host/hr_storage.c:
+ Default to reporting NFS mounts as NetworkDisk.
+
+2007-06-08 05:16 magfr
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in,
+ win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/net-snmp-config.h.in:
+ Remove the unused undef HAVE_PERL_EVAL_PV.
+ The Perl_eval_pv functions are handled by the
+ HAVE_PERL_EVAL_PV_[UL]C defines,
+ this one is never set by our configure script.
+
+2007-06-07 16:02 dts12
+
+ * .cvsignore, agent/.cvsignore, agent/helpers/.cvsignore,
+ agent/mibgroup/.cvsignore, agent/mibgroup/Rmon/.cvsignore,
+ agent/mibgroup/agent/.cvsignore,
+ agent/mibgroup/agentx/.cvsignore,
+ agent/mibgroup/disman/.cvsignore,
+ agent/mibgroup/disman/event/.cvsignore,
+ agent/mibgroup/disman/expr/.cvsignore,
+ agent/mibgroup/disman/schedule/.cvsignore,
+ agent/mibgroup/examples/.cvsignore,
+ agent/mibgroup/hardware/cpu/.cvsignore,
+ agent/mibgroup/hardware/memory/.cvsignore,
+ agent/mibgroup/host/.cvsignore,
+ agent/mibgroup/if-mib/data_access/.cvsignore,
+ agent/mibgroup/if-mib/ifTable/.cvsignore,
+ agent/mibgroup/if-mib/ifXTable/.cvsignore,
+ agent/mibgroup/ip-forward-mib/data_access/.cvsignore,
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/.cvsignore,
+ agent/mibgroup/ip-forward-mib/ipCidrRouteTable/.cvsignore,
+ agent/mibgroup/ip-mib/.cvsignore,
+ agent/mibgroup/ip-mib/data_access/.cvsignore,
+ agent/mibgroup/ip-mib/inetNetToMediaTable/.cvsignore,
+ agent/mibgroup/ip-mib/ipAddressPrefixTable/.cvsignore,
+ agent/mibgroup/ip-mib/ipAddressTable/.cvsignore,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/.cvsignore,
+ agent/mibgroup/ip-mib/ipv4InterfaceTable/.cvsignore,
+ agent/mibgroup/ip-mib/ipv6InterfaceTable/.cvsignore,
+ agent/mibgroup/ipfwchains/.cvsignore,
+ agent/mibgroup/mibII/.cvsignore, agent/mibgroup/misc/.cvsignore,
+ agent/mibgroup/notification-log-mib/.cvsignore,
+ agent/mibgroup/notification/.cvsignore,
+ agent/mibgroup/smux/.cvsignore,
+ agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/.cvsignore,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHParameters/.cvsignore,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/.cvsignore,
+ agent/mibgroup/snmpv3/.cvsignore,
+ agent/mibgroup/target/.cvsignore,
+ agent/mibgroup/tcp-mib/data_access/.cvsignore,
+ agent/mibgroup/tcp-mib/tcpConnectionTable/.cvsignore,
+ agent/mibgroup/tcp-mib/tcpListenerTable/.cvsignore,
+ agent/mibgroup/ucd-snmp/.cvsignore,
+ agent/mibgroup/udp-mib/data_access/.cvsignore,
+ agent/mibgroup/udp-mib/udpEndpointTable/.cvsignore,
+ agent/mibgroup/utilities/.cvsignore, apps/.cvsignore,
+ apps/snmpnetstat/.cvsignore, dist/.cvsignore,
+ include/net-snmp/.cvsignore, include/net-snmp/agent/.cvsignore,
+ include/net-snmp/library/.cvsignore, include/ucd-snmp/.cvsignore,
+ local/.cvsignore, man/.cvsignore, mibs/.cvsignore, ov/.cvsignore,
+ perl/.cvsignore, perl/ASN/.cvsignore,
+ perl/AnyData_SNMP/.cvsignore, perl/OID/.cvsignore,
+ perl/SNMP/.cvsignore, perl/SNMP/t/.cvsignore,
+ perl/TrapReceiver/.cvsignore, perl/agent/.cvsignore,
+ perl/agent/Support/.cvsignore,
+ perl/agent/default_store/.cvsignore,
+ perl/default_store/.cvsignore, perl/manager/.cvsignore,
+ snmplib/.cvsignore, testing/.cvsignore, win32/.cvsignore,
+ win32/bin/.cvsignore, win32/encode_keychange/.cvsignore,
+ win32/lib/.cvsignore, win32/libagent/.cvsignore,
+ win32/libhelpers/.cvsignore, win32/libnetsnmptrapd/.cvsignore,
+ win32/libsnmp/.cvsignore, win32/libsnmp_dll/.cvsignore,
+ win32/libucdmibs/.cvsignore, win32/net-snmp/.cvsignore,
+ win32/net-snmp/agent/.cvsignore,
+ win32/net-snmp/library/.cvsignore, win32/netsnmpmibs/.cvsignore,
+ win32/netsnmpmibssdk/.cvsignore, win32/snmpbulkget/.cvsignore,
+ win32/snmpbulkwalk/.cvsignore, win32/snmpd/.cvsignore,
+ win32/snmpdelta/.cvsignore, win32/snmpdf/.cvsignore,
+ win32/snmpdsdk/.cvsignore, win32/snmpget/.cvsignore,
+ win32/snmpgetnext/.cvsignore, win32/snmpnetstat/.cvsignore,
+ win32/snmpset/.cvsignore, win32/snmpstatus/.cvsignore,
+ win32/snmptable/.cvsignore, win32/snmptest/.cvsignore,
+ win32/snmptranslate/.cvsignore, win32/snmptrap/.cvsignore,
+ win32/snmptrapd/.cvsignore, win32/snmpusm/.cvsignore,
+ win32/snmpvacm/.cvsignore, win32/snmpwalk/.cvsignore:
+ Remove redundant CVS-admin files.
+
+2007-06-07 12:56 dts12
+
+ * snmplib/snmp_secmod.c:
+ Handle unregistering the first Security Model in the list.
+ Reported by Aleksandr Lomanov.
+
+2007-06-07 09:13 dts12
+
+ * agent/helpers/Makefile.in:
+ Install header files for stash_cache and stash_to_next helpers.
+
+2007-06-07 09:07 dts12
+
+ * agent/helpers/Makefile.in:
+ Separate out header files that don't have a corresponding C
+ source file.
+
+2007-06-07 08:59 dts12
+
+ * agent/helpers/Makefile.in:
+ Sort lists of helpers (source code, object files and headers).
+ This should make it easier to spot files that have been omitted.
+
+2007-06-07 08:42 dts12
+
+ * snmplib/read_config.c:
+ Protect against systems without S_ISDIR.
+
+2007-06-06 12:37 tanders
+
+ * configure, configure.in:
+ CHANGES: AIX: use "-Wl,-brtl" when compiling with gcc
+
+2007-06-06 10:20 dts12
+
+ * apps/snmptrapd.c:
+ Ensure output is properly directed to syslog.
+ Otherwise, problems in the config environment can trigger
+ errors being directed to stderr, and subsequent logging
+ output gets lost.
+
+2007-06-06 10:13 dts12
+
+ * snmplib/snmp_client.c:
+ More helpful debugging output.
+
+2007-06-06 05:53 magfr
+
+ * apps/snmptrapd.c, apps/snmptrapd_handlers.c,
+ testing/tests/T035snmpv3trapdusermgmt:
+ CHANGES: misc: Don't use the legacy symbol
+ SNMPTRAPD_DISABLE_AGENTX
+
+2007-06-05 15:59 dts12
+
+ * agent/mibgroup/disman/event/mteEvent.c:
+ CHANGES: snmpd: PATCHES: 1729629: Fix memory leak in disman
+ agent.
+
+2007-06-04 22:06 magfr
+
+ * snmplib/snmp_api.c:
+ NEWS: snmplib: Change snmp_sess_add_ex to consistently close and
+ delete the transport argument on failure, earlier the liveness of
+ the transport argument was undecided.
+
+2007-06-04 15:50 hardaker
+
+ * FAQ, README, configure, configure.in, dist/net-snmp.spec,
+ sedscript.in, snmplib/snmp_version.c:
+ - version tag ( 5.4.1.pre2 )
+
+2007-06-04 15:50 hardaker
+
+ * CHANGES, NEWS:
+ version update
+
+2007-06-04 15:44 hardaker
+
+ * ChangeLog:
+ version update
+
+2007-06-04 15:42 hardaker
+
+ * agent/Makefile.depend:
+ make depend
+
+2007-06-04 15:41 hardaker
+
+ * man/netsnmp_agent.3, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3,
+ man/netsnmp_baby_steps.3, man/netsnmp_bulk_to_next.3,
+ man/netsnmp_cache_handler.3, man/netsnmp_callback.3,
+ man/netsnmp_container.3, man/netsnmp_data_list.3,
+ man/netsnmp_debug.3, man/netsnmp_default_store.3,
+ man/netsnmp_handler.3, man/netsnmp_instance.3,
+ man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3,
+ man/netsnmp_library.3, man/netsnmp_mib_maintenance.3,
+ man/netsnmp_mib_utilities.3, man/netsnmp_mode_end_call.3,
+ man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3,
+ man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3,
+ man/netsnmp_snmp_client.3, man/netsnmp_snmp_logging.3,
+ man/netsnmp_snmp_pdu.3, man/netsnmp_snmp_session.3,
+ man/netsnmp_stash_cache.3, man/netsnmp_stash_to_next.3,
+ man/netsnmp_table.3, man/netsnmp_table_array.3,
+ man/netsnmp_table_container.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_generic.3,
+ man/netsnmp_table_indexes.3, man/netsnmp_table_iterator.3,
+ man/netsnmp_table_iterator.h.3, man/netsnmp_table_maintenance.3,
+ man/netsnmp_table_rows.3, man/netsnmp_tdata.3,
+ man/netsnmp_util.3, man/netsnmp_utilities.3,
+ man/netsnmp_variable_list.3, man/netsnmp_watcher.3:
+ documentation update
+
+2007-06-04 15:39 hardaker
+
+ * doxygen.conf:
+ - version tag ( 5.4.1.pre2 )
+
+2007-06-04 14:36 hardaker
+
+ * Makefile.in, testing/RUNTESTS:
+ CHANGES: test: support a -n flag to RUNTESTS to print the test
+ number found in the test file as opposed to the numerical count
+
+2007-06-04 13:09 tanders
+
+ * snmplib/snmpUDPDomain.c:
+ CHANGES: build: PATCH: 1728237: from mitsuru_chinen: Move
+ variable declaration at the top of netsnmp_udp_sendto
+
+2007-06-04 12:13 tanders
+
+ * agent/mibgroup/disman/ping/pingCtlTable.c, configure,
+ configure.in, include/net-snmp/net-snmp-config.h.in,
+ snmplib/snmpUDPDomain.c, snmplib/snmpUDPIPv6Domain.c:
+ CHANGES: build: PATCH: 1728230: from mitsuru_chinen: add
+ configure check for gai_strerror()
+
+2007-06-04 10:35 tanders
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+ CHANGES: build: PATCH: 1728226: from mitsuru_chinen: make sure
+ IF_NAMESIZE is defined
+
+2007-06-04 09:47 tanders
+
+ * testing/tests/T160snmpnetstat:
+ also skip this test on IRIX64
+
+2007-06-02 08:24 magfr
+
+ * acconfig.h, configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/system/dynix.h,
+ include/net-snmp/system/mingw32.h, snmplib/snmp_api.c,
+ win32/config.h.borland, win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/net-snmp-config.h.in:
+ CHANGES: snmpapi: Do not use getservbyname to find default port
+ numbers, just hardcode them and let the user override them if
+ needed.
+
+2007-06-01 22:55 tanders
+
+ * configure, configure.in:
+ CHANGES: build: Link libdl against libnetsnmpmibs instead of
+ snmpd.
+ Fixes the build on (some) Solaris systems.
+
+2007-06-01 21:36 dts12
+
+ * snmplib/read_config.c:
+ CHANGES: snmplib: FEATURES: 1041888: Check directory paths for
+ config files.
+ Backport from main development trunk of bug fix.
+
+2007-06-01 21:23 dts12
+
+ * snmplib/snmp_api.c:
+ CHANGES: snmplib: FEATURES: 851887: Report range information for
+ invalid SET requests.
+ Backport from main trunk of bug fix.
+
+2007-05-31 23:51 tanders
+
+ * agent/Makefile.in, apps/Makefile.in, configure, configure.in,
+ net-snmp-config.in:
+ CHANGES: build: Link libkvm and libwrap to libnetsnmpagent
+ instead of snmpd.
+ Fixes test #44 (Perl subagent) on systems using one of those
+ libraries.
+
+2007-05-31 14:39 dts12
+
+ * apps/snmptrapd_log.c:
+ Fix logging of authentication information.
+
+2007-05-31 10:10 dts12
+
+ * apps/snmptrapd_log.c:
+ Remove bogus debug output.
+
+2007-05-30 22:53 tanders
+
+ * configure, configure.in, perl/ASN/Makefile.PL,
+ perl/OID/Makefile.PL, perl/SNMP/Makefile.PL,
+ perl/TrapReceiver/Makefile.PL, perl/agent/Makefile.PL,
+ perl/default_store/Makefile.PL:
+ CHANGES: AIX: build fixes for embedded Perl
+
+2007-05-29 22:42 magfr
+
+ * snmplib/snmpUDPIPv6Domain.c:
+ CHANGES: snmplib: Use the default_target argument if it is
+ non-NULL, not if it is NULL.
+
+2007-05-29 10:27 tanders
+
+ * README.agent-mibs:
+ add recent mfd rewrites
+
+2007-05-27 21:42 tanders
+
+ * perl/TrapReceiver/Makefile.PL, perl/agent/Makefile.PL:
+ Some lame linkers (e.g. on HP-UX 11.23/IA64) need quite a bit of
+ help to successfully link the Perl modules.
+
+2007-05-27 20:52 tanders
+
+ * configure, configure.in, include/net-snmp/net-snmp-config.h.in:
+ Add descriptions to AC_DEFINE; drop obsolete AC_CHECK_LIB(m,
+ asin).
+
+2007-05-27 19:54 dts12
+
+ * snmplib/parse.c:
+ CHANGES: library: FEATURES: 454028: Detect and handle empty MIB
+ index files.
+
+2007-05-27 06:20 tanders
+
+ * README.aix:
+ grammar fix
+
+2007-05-26 16:41 alex_b
+
+ * README.win32, win32/Configure, win32/build.pl,
+ win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/net-snmp-config.h.in:
+ Win32 IPv6 build fixes. IPv6 now requires PSDK.
+
+2007-05-26 15:14 alex_b
+
+ * README.win32, win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/net-snmp-config.h.in:
+ IPv6 build fixes for build.bat, Configure and README.win32.
+
+2007-05-25 23:03 tanders
+
+ * README.aix, README.solaris, README.tru64:
+ Documentation update w.r.t. recent changes (mibII/ipv6 and AIX
+ shared library building).
+
+2007-05-25 15:28 tanders
+
+ * perl/default_store/Makefile.PL:
+ Some systems (e.g. HP-UX 11.23/IA64) currently still need
+ "net-snmp-config --libs" (instead of just --netsnmp-libs) for
+ linking
+ libnetsnmp to a Perl module.
+
+2007-05-24 23:55 tanders
+
+ * agent/mibgroup/mibII.h, configure, configure.in:
+ CHANGES: build: only enable mibII/ipv6 through --enable-ipv6 on
+ systems it builds properly on (Linux and *BSD)
+
+2007-05-24 23:15 tanders
+
+ * perl/agent/default_store/Makefile.PL:
+ Some systems (e.g. HP-UX 11.23/IA64) currently still need
+ "net-snmp-config --libs" (instead of just --netsnmp-libs) for
+ linking libsnmpagent to a Perl module.
+
+2007-05-24 22:01 magfr
+
+ * agent/mibgroup/mibII/ipv6.c:
+ Correct obviously broken use of the KLOOKUP macro to be
+ consistent at least
+
+2007-05-24 20:51 tanders
+
+ * include/net-snmp/system/freebsd7.h:
+ CHANGES: FreeBSD: add initial support for upcoming FreeBSD 7
+
+2007-05-24 12:48 tanders
+
+ * agent/Makefile.in, apps/Makefile.in:
+ fix library linking on HP-UX 11.23/IA64
+
+2007-05-24 08:36 tanders
+
+ * Makefile.top:
+ CHANGES: snmplib: increment "current" and "age" according to
+ libtool
+ versioning policy, since interfaces have been added since 5.4.
+ We now build libnetsnmp.so.15.1.0.
+ 5.4.1.pre1 was broken in this regard.
+
+2007-05-23 19:05 tanders
+
+ * Makefile.in, Makefile.rules, agent/Makefile.in,
+ agent/helpers/Makefile.in, apps/Makefile.in, configure,
+ configure.in, perl/TrapReceiver/Makefile.PL,
+ perl/agent/Makefile.PL, perl/agent/default_store/Makefile.PL,
+ perl/default_store/Makefile.PL, snmplib/Makefile.in:
+ NEWS: snmplib: BUG: 1619827: link net-snmp libraries and binaries
+ against the net-snmp libraries they really depend on
+ - reflect library interdependencies at link time
+ - fix dependencies on libcrypto, libpkcs11 and libkstat
+ - install libraries in correct order (important for libtool
+ relinking)
+ NEWS: Perl: link Perl modules against the exact set of libraries
+ they depend on
+
+2007-05-22 14:40 hardaker
+
+ * FAQ, README, configure, configure.in, dist/net-snmp.spec,
+ perl/ASN/ASN.pm, perl/AnyData_SNMP/Storage.pm, perl/OID/OID.pm,
+ perl/SNMP/SNMP.pm, perl/TrapReceiver/TrapReceiver.pm,
+ perl/agent/Support/Support.pm, perl/agent/agent.pm,
+ perl/agent/default_store/default_store.pm,
+ perl/default_store/default_store.pm, sedscript.in,
+ snmplib/snmp_version.c:
+ version stamp 5.4.1.pre1
+
+2007-05-22 00:24 hardaker
+
+ * CHANGES, NEWS:
+ version update
+
+2007-05-22 00:19 hardaker
+
+ * ChangeLog:
+ version update
+
+2007-05-22 00:01 hardaker
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend:
+ make depend
+
+2007-05-22 00:00 hardaker
+
+ * Makefile.in:
+ ignore winExtDLL in comment check
+
+2007-05-21 23:54 hardaker
+
+ * agent/mibgroup/hardware/cpu/cpu_sysinfo.c:
+ // -> C comment
+
+2007-05-21 23:51 hardaker
+
+ * man/netsnmp_agent.3, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3,
+ man/netsnmp_baby_steps.3, man/netsnmp_bulk_to_next.3,
+ man/netsnmp_cache_handler.3, man/netsnmp_callback.3,
+ man/netsnmp_container.3, man/netsnmp_data_list.3,
+ man/netsnmp_debug.3, man/netsnmp_default_store.3,
+ man/netsnmp_handler.3, man/netsnmp_instance.3,
+ man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3,
+ man/netsnmp_library.3, man/netsnmp_mib_maintenance.3,
+ man/netsnmp_mib_utilities.3, man/netsnmp_mode_end_call.3,
+ man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3,
+ man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3,
+ man/netsnmp_snmp_client.3, man/netsnmp_snmp_logging.3,
+ man/netsnmp_snmp_pdu.3, man/netsnmp_snmp_session.3,
+ man/netsnmp_stash_cache.3, man/netsnmp_stash_to_next.3,
+ man/netsnmp_table.3, man/netsnmp_table_array.3,
+ man/netsnmp_table_container.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_generic.3,
+ man/netsnmp_table_indexes.3, man/netsnmp_table_iterator.3,
+ man/netsnmp_table_iterator.h.3, man/netsnmp_table_maintenance.3,
+ man/netsnmp_table_rows.3, man/netsnmp_tdata.3,
+ man/netsnmp_util.3, man/netsnmp_utilities.3,
+ man/netsnmp_variable_list.3, man/netsnmp_watcher.3:
+ documentation update
+
+2007-05-21 23:11 magfr
+
+ * configure, configure.in:
+ CHANGES: building: Disable inlining on solaris as there are some
+ linking errors that show up if the inline support is left
+ enabled.
+
+2007-05-21 22:46 hardaker
+
+ * doxygen.conf:
+ - version tag ( 5.4.1.pre1 )
+
+2007-05-21 22:22 hardaker
+
+ * Makefile.top:
+ version update
+
+2007-05-21 23:51 hardaker
+
+ documentation update
+
+2007-05-21 23:11 magfr
+
+ CHANGES: building: Disable inlining on solaris as there are some
+ linking errors that show up if the inline support is left
+ enabled.
+
+2007-05-21 22:46 hardaker
+
+ - version tag ( 5.4.1.pre1 )
+
+2007-05-21 22:22 hardaker
+
+ version update
+
+2007-05-20 21:34 tanders
+
+ * agent/Makefile.in, configure, configure.in:
+ NEWS: snmplib: BUG: 1619827: link against needed external
+ libraries at library link time (where they are referenced),
+ rather than application link time.
+ Already covers most of libnetsnmpmibs' external dependencies.
+ Fixes build issues on some platforms (e.g. building with shared
+ libraries on AIX). Tested on different versions of Linux,
+ Solaris, HP-UX, AIX and IRIX.
+
+2007-05-19 15:27 magfr
+
+ * acconfig.h, configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in:
+ CHANGES: building: Check for support of static inline functions
+ instead of nested static inline functions when determining if
+ static inline functions work
+
+2007-05-18 18:08 hardaker
+
+ * agent/mibgroup/host/hr_filesys.c:
+ CHANGES: snmpd: patch: 1719254: from "Christan Jung": update
+ HRFS_ignore list to current linux likelyhoods
+
+2007-05-18 18:02 hardaker
+
+ * agent/mibgroup/host/hr_storage.c:
+ NEWS: snmpd: patch: 1719253: from "Christian Jung": fix
+ skipNFSInHostResources so it does not break on the second walk of
+ the table.
+
+2007-05-18 15:05 tanders
+
+ * configure, configure.in:
+ NEWS: AIX: fix default shared library building instead of forcing
+ static
+
+2007-05-18 10:22 magfr
+
+ * agent/mibgroup/host/hr_storage.h:
+ CHANGES: snmpd: Correct the dependency information for
+ host/hr_storage
+
+2007-05-17 22:16 magfr
+
+ * agent/agent_trap.c, apps/snmptrap.c, apps/snmptrapd.c,
+ snmplib/snmpUDPDomain.c, snmplib/snmpUDPIPv6Domain.c,
+ snmplib/snmp_api.c:
+ CHANGES: snmpd: PATCH: 1620424: Fix notification sending so that
+ explicit specification of port 162 should be unnecessary
+ CHANGES: snmptrapd: PATCH: 1620424: Fix notification reception so
+ that explicit specification of port 162 should be unnecessary
+ CHANGES: apps: PATCH: 1620424: Fix notification sending so that
+ explicit specification of port 162 should be unnecessary
+ CHANGES: snmplib: PATCH: 1620424: Honor
+ NETSNMP_DS_LIB_DEFAULT_PORT over the default system
+
+2007-05-17 21:53 hardaker
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_linux.c,
+ agent/mibgroup/ip-mib/data_access/arp_linux.c,
+ agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c,
+ agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c:
+ CHANGES: snmpd: patch: 1710632: from mavarley: fix memory leak on
+ broken container insertions for the ipAddressTable
+
+2007-05-17 18:06 rstory
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+ CHANGES: PATCH: 1719244: fix mfd generating map function
+
+2007-05-17 16:31 hardaker
+
+ * configure.in:
+ NEWS: ports: patch: 1706344: from naylor: fix compilation with
+ cygwin
+
+2007-05-17 16:22 hardaker
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+ NEWS: snmpd: patch: 1700157: from afrika: fixes ordering of exec
+ tokens in the resulting mib tree
+
+2007-05-17 15:53 hardaker
+
+ * agent/mibgroup/host/hr_disk.c:
+ CHANGES: snmpd: patch: 1617255: fix length of the history array
+ to match code.
+
+2007-05-17 13:53 hardaker
+
+ * agent/snmpd.c, apps/snmptrapd.c:
+ CHANGES: snmpd: patch: 1225440: Apply intent of patch: to delay
+ sighup till it is safe.
+ CHANGES: snmptrapd: patch: 1225440: Apply intent of patch: to
+ delay sighup till it is safe.
+
+2007-05-17 04:39 hardaker
+
+ * snmplib/asn1.c:
+ CHANGES: snmplib: patch: 1645698: fix 64-bit signed integer
+ encoding
+
+2007-05-16 23:53 tanders
+
+ * include/net-snmp/system/hpux.h:
+ CHANGES: HP-UX: HP-UX needs _REENTRANT defined to pick up
+ strtok_r.
+ Otherwise, at least for 64-bit code, strtok_r will not work
+ and will make net-snmp segfault.
+
+2007-05-15 14:36 tanders
+
+ * agent/mibgroup/hardware/memory/memory_solaris.c:
+ fix typo
+
+2007-05-14 21:49 tanders
+
+ * apps/Makefile.in:
+ add missing CFLAGS to link line
+
+2007-05-14 21:48 tanders
+
+ * apps/snmpnetstat/Makefile.in:
+ add missing CFLAGS to link line
+
+2007-05-14 14:50 hardaker
+
+ * agent/snmp_agent.c:
+ CHANGES: snmpd: patch: 1595568: from cyril_margaria: fix
+ delegated SET requests from agentx subagents
+
+2007-05-13 14:27 magfr
+
+ * snmplib/snmp_service.c:
+ CHANGES: snmplib: Read the config parameters defTarget and
+ defDomain from snmp.conf as well as from <application>.conf
+
+2007-05-12 11:14 magfr
+
+ * snmplib/mib.c:
+ CHANGES: snmplib: Deallocate the confmibs and confmibdirs
+ variables in shutdown_mib to make for a cleaner exit of the
+ library
+
+2007-05-11 21:06 magfr
+
+ * agent/mibgroup/agentx/agentx_config.c:
+ CHANGES: snmpd: PATCH: 1687336: Start using the enhanced
+ read_config interface
+
+2007-05-11 20:33 magfr
+
+ * snmplib/read_config.c:
+ PATCH 1687329: Applied part 2 of the patch - When registering
+ multiple premib handlers only the last one was registered premib,
+ the others were registerd at the normal time. This patch puts all
+ registration in one function that takes the problematic value as
+ an argument and makes the old functions thin wrappers of the new
+ one
+
+2007-05-11 20:24 magfr
+
+ * snmplib/read_config.c:
+ CHANGE: snmplib: PATCH 1687329: Applied part 3 of the patch - use
+ the same algorithm to determine what to unregister as is used to
+ determine what to regster
+
+2007-05-11 16:32 magfr
+
+ * agent/mibgroup/host/hr_proc.c:
+ Don't log host/hr_proc events in the snmpd domain
+
+2007-05-11 16:27 magfr
+
+ * agent/helpers/cache_handler.c:
+ Decorate more debug lines with the tag that controls the log
+
+2007-05-11 15:07 dts12
+
+ * agent/mibgroup/hardware/memory/memory_solaris.c:
+ CHANGES: snmpd: BUG: 1628613: Restore memTotalFree.0 on Solaris
+
+2007-05-10 21:52 tanders
+
+ * Makefile.in, python/setup.py:
+ NEWS: python: PATCH: 1716114: Let python build in source tree
+ Patch provided by Jochen Friedrich (Debian patch #38).
+
+2007-05-10 05:18 magfr
+
+ * snmplib/read_config.c:
+ PATCH 1687329: Applied part 1 of the patch - lessens the scope of
+ the ltmp2 variable
+
+2007-05-09 23:57 tanders
+
+ * README.irix:
+ document optimized IRIX cpu stats
+
+2007-05-09 23:49 tanders
+
+ * agent/mibgroup/hardware/cpu.h,
+ agent/mibgroup/hardware/cpu/cpu_sysinfo.c,
+ agent/mibgroup/hardware/cpu/cpu_sysinfo.h:
+ NEWS: irix: PATCH: 1709748: Optimized IRIX cpu stats
+
+2007-05-09 22:16 tanders
+
+ * agent/mibgroup/agent/extend.c:
+ Fix problems with single-line extend scripts.
+ (fix typo in r16332 for 5.4.x)
+
+2007-05-09 01:10 alex_b
+
+ * win32/libsnmp_dll/libsnmp.def, win32/libsnmp_dll/libsnmp.def.in:
+ Win32 build fixes.
+
+2007-05-08 19:48 magfr
+
+ * agent/snmp_agent.c:
+ Revert mistakenly committed extra trace logs
+
+2007-05-07 20:46 hardaker
+
+ * perl/agent/default_store/default_store.pm,
+ perl/agent/default_store/default_store.xs,
+ perl/agent/default_store/test.pl:
+ update agent::default_store perl module for new defs
+
+2007-05-07 20:23 hardaker
+
+ * agent/agent_read_config.c, agent/snmp_agent.c,
+ include/net-snmp/agent/ds_agent.h, man/snmpd.conf.5.def:
+ NEWS: snmpd: BUG: 1712988: default and configurable maximum
+ number of varbinds returnable to a GETBULK request
+
+2007-05-04 20:27 tanders
+
+ * perl/SNMP/SNMP.xs:
+ CHANGES: perl: fix SNMP SET for IP addresses on 64-bit
+
+2007-05-04 10:22 tanders
+
+ * Makefile.in:
+ install dragonfly.h
+
+2007-05-03 23:01 tanders
+
+ * include/net-snmp/system/dragonfly.h:
+ CHANGES: BUG: 1710910: initial support for DragonFly BSD
+
+2007-05-03 22:10 tanders
+
+ * perl/SNMP/SNMP.xs:
+ CHANGES: perl: fix SNMP SET for IP addresses on 64-bit
+ Patch proposed by Jeff Lange.
+
+2007-05-02 13:13 dts12
+
+ * agent/mibgroup/agent/extend.c:
+ Fix problems with single-line extend scripts.
+
+2007-05-01 11:34 dts12
+
+ * apps/snmptrapd_handlers.c:
+ CHANGES: snmptrapd: Support for forwarding traps by OID subtree.
+ (Consistent with subtree-based script processing).
+
+2007-04-30 13:26 dts12
+
+ * README.agent-mibs, agent/mibgroup/mibII/setSerialNo.c,
+ agent/mibgroup/mibII/setSerialNo.h:
+ CHANGES: snmpd: PATCH: 1700737: Tidy up setSerialNo
+ implementations.
+
+2007-04-30 13:06 dts12
+
+ * agent/helpers/cache_handler.c:
+ CHANGES: snmpd: PATCH: 1700732: Fix debug output statements.
+
+2007-04-30 13:02 dts12
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+ CHANGES: snmpd: PATCH: 1700730: Remove unused extern declaration.
+
+2007-04-30 11:32 dts12
+
+ * agent/helpers/instance.c:
+ CHANGES: snmpd: PATCH: 1698184: Register non-default context
+ integers as writable.
+ Patch provided by Mark Naylor.
+
+2007-04-30 11:04 dts12
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_common.c:
+ CHANGES: snmpd: PATCH: 1692768: Fix copying of non-octet-aligned
+ IP address prefixes.
+
+2007-04-30 10:25 dts12
+
+ * snmplib/fd_event_manager.c:
+ CHANGES: snmplib: PATCH: 1687325: Fix problem with operator
+ precedence.
+
+2007-04-30 10:07 dts12
+
+ * snmplib/snmpUnixDomain.c, snmplib/snmp_api.c:
+ CHANGES: snmplib: PATCH: 1687316: Don't drop const from casts.
+
+2007-04-24 12:35 dts12
+
+ * agent/mibgroup/agent/extend.c:
+ Fix incomplete OID handling of single-line extend scripts.
+ Reported by Max on coders list, 7th April. See thread
+ "... segfault .. when attempting SNMP GET on extend or exec item"
+
+2007-04-20 08:30 dts12
+
+ * man/snmpd.conf.5.def:
+ Document the behaviour of a load threshold of 0.
+ Reported by Fong Tsui.
+
+2007-04-20 08:21 dts12
+
+ * mibs/UCD-SNMP-MIB.txt:
+ Long-term load average is calculated over 15 minutes, not 10.
+ Reported by Fong Tsui
+
+2007-04-10 14:16 dts12
+
+ * perl/SNMP/SNMP.xs:
+ Detect OID retracking (as well as simple repetitions) when
+ bulkwalking an OID tree.
+ See users thread "missing indices in bulkwalk result".
+
+2007-04-10 11:49 dts12
+
+ * include/net-snmp/system/mingw32.h:
+ Clarify copyright status of Win32 API definitions.
+
+2007-04-10 11:27 dts12
+
+ * include/net-snmp/system/dynix.h:
+ Clarify copyright status of BSD-derived TCPTV* definitions.
+
+2007-04-03 08:59 tanders
+
+ * agent/mibgroup/smux/smux.c:
+ fix syntax error introduced by last patch
+
+2007-04-03 08:54 dts12
+
+ * man/snmpd.conf.5.def:
+ Emphasise the use of SNMPv3 in DisMan monitoring.
+ Fix the syntax of non-existance/value-change tests.
+
+2007-04-02 14:55 dts12
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+ CHANGES: snmpd: BUG: 1046327: Reset "includeAllDisks" flag when
+ reloading.
+
+2007-04-02 14:45 dts12
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+ CHANGES: snmpd: BUG: 1602286: Don't let table holes block later
+ rows.
+
+2007-04-02 13:51 dts12
+
+ * agent/mibgroup/host/hr_swrun.c:
+ CHANGES: snmpd: BUG: 1073782: Restore PerfStat values for FreeBSD
+ 5.x systems.
+ It's unclear why the "new" calculation was a) proposed, b)
+ withdrawn,
+ and c) what was wrong with the previous calculation (which seems
+ to
+ match the output of 'ps')
+
+2007-04-02 13:06 dts12
+
+ * agent/mibgroup/smux/smux.c:
+ CHANGES: snmpd: BUG: 902610: Don't discard pending data following
+ a TRAP.
+
+2007-04-02 12:56 dts12
+
+ * agent/mibgroup/smux/smux.c:
+ CHANGES: snmpd: BUG: 902801: Fix ordering of SMUX-registered
+ subtrees.
+
+2007-04-02 12:35 dts12
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+ CHANGES: snmpd: BUG: 1685067: More precise handling of
+ SNMPv3-admin MIB tables.
+ This actually fixes three separate problems:
+ * A GET request for 'vacmGroupName.{group}.0.{anything}' will
+ succeed
+ (since the 0 subid acts as a null-terminator for the group name).
+ * A GET request for 'vacmViewTreeFamilyType."_none".1' will
+ succeed
+ (implicitly adding the subid 0 to the incomplete OID index value)
+ * A GET request for 'vacmAccessStatus."group"."".3.4' will
+ succeed
+ (since VACM checks accept the given security level *or*higher*)
+
+2007-04-02 12:26 dts12
+
+ * agent/mibgroup/host/hr_storage.c:
+ Check that GET requests match a valid OID.
+ (Otherwise a request for hrStorage{Column}.{index}.{anything}
+ will ignore the extra subids, and return success)
+
+2007-04-02 12:21 dts12
+
+ * agent/mibgroup/disman/event/mteObjectsTable.c:
+ Prevent crash when walking (invalid?) Event-MIB Objects Table.
+
+2007-04-02 11:30 dts12
+
+ * dist/makerelease:
+ Fix a couple of typos in the re-worked makerelease script.
+
+2007-03-29 12:14 tanders
+
+ * configure, configure.in:
+ fix syntax error ("==" is bad)
+
+2007-03-27 08:38 dts12
+
+ * configure, configure.in:
+ Accept '2c' as a valid response when choosing the default version
+
+2007-03-27 08:29 dts12
+
+ * configure, configure.in:
+ CHANGES: configure: BUG: 1567324: Clarify prompting for
+ user-supplied values.
+ Now only remembers (and uses) previous values when explicitly
+ told to do so,
+ e.g. configure -C
+
+2007-03-25 22:32 dts12
+
+ * local/mib2c.container.conf, local/mib2c.iterate.conf,
+ local/mib2c.table_data.conf:
+ Variable-length string values are more likely than fixed length.
+
+2007-03-25 22:28 dts12
+
+ * local/mib2c.array-user.conf:
+ CHANGES: mib2c: BUG: 833673: More focused size checks.
+
+2007-03-25 21:25 dts12
+
+ * agent/snmp_agent.c:
+ CHANGES: snmpd: BUG: 1677063: Check for failed malloc calls.
+
+2007-03-25 19:03 dts12
+
+ * agent/mibgroup/mibII/route_write.c:
+ Check SET requests against the correct type (IP Address != Octet
+ Str)
+
+2007-03-25 18:58 dts12
+
+ * agent/mibgroup/snmpv3/usmUser.c:
+ CHANGES: snmpd: BUG: 1685081: Check for valid OID on Free/Undo
+ passes.
+
+2007-03-23 09:44 dts12
+
+ * include/net-snmp/library/snmp_api.h:
+ CHANEGS: snmplib: BUG: 1686384: Document non-use of 'remote_port'
+ field.
+
+2007-03-23 09:19 dts12
+
+ * local/mib2c-conf.d/mfd-persistence.m2i:
+ Allow space for external indexes when saving table entries.
+ (See patch #1642255)
+
+2007-03-23 09:15 dts12
+
+ * agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.c:
+ CHANGES: snmpd: PATCH: 1642255: Handle saving long
+ snmpNotifyFilterTable entries.
+
+2007-03-23 09:06 dts12
+
+ * agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c:
+ CHANGES: snmpd: PATCH: 1676478: fix udpEndpointRemoteAddress
+ CHANGES: snmpd: BUG: 1676476: fix udpEndpointRemoteAddress
+
+2007-03-23 09:01 dts12
+
+ * snmplib/snmp_api.c:
+ CHANGES: snmplib: PATCH: 1653670: Consistent SNMPv3 behaviour
+ when opening sessions.
+
+2007-03-22 19:14 dts12
+
+ * snmplib/read_config.c:
+ CHANGES: snmplib: PATCH: 1681030: Better handling of empty
+ apptype configs.
+
+2007-03-22 19:12 dts12
+
+ * agent/mibgroup/smux/smux.c, agent/mibgroup/smux/smux.h,
+ agent/snmpd.c:
+ CHANGES: snmpd: PATCH: 1678788: Better handling of SMUX socket
+ descriptors.
+
+2007-03-22 19:09 dts12
+
+ * agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c:
+ CHANGES: snmpd: PATCH: 1683054: set udpEndpointInstance to
+ identify different processes.
+
+2007-03-21 12:35 dts12
+
+ * win32/libsnmp_dll/libsnmp.def, win32/libsnmp_dll/libsnmp.def.in:
+ Declare OID constants as such (rather than API calls).
+ Proposed by Alex Burger
+
+2007-03-20 20:08 rstory
+
+ * agent/mibgroup/mibII/kernel_linux.c:
+ NEWS: snmpd: PATCH: 1666737: include ipv6 counts in
+ udpInDatagrams, udpNoPorts, udpInErrors, udpOutDatagrams
+
+2007-03-19 22:09 tanders
+
+ * agent/mibgroup/hardware/cpu/cpu_pcp.c:
+ use pmFreeResult() instead of free()
+
+2007-03-17 00:25 tanders
+
+ * agent/mibgroup/agentx/subagent.h,
+ agent/mibgroup/disman/mteTriggerTable.h,
+ agent/mibgroup/utilities/iquery.h, configure, configure.in:
+ CHANGES: build: PATCH: 1681073: #ifdef based config_error instead
+ of special cases in configure
+ Backport from MAIN.
+
+2007-03-16 14:04 dts12
+
+ * dist/changelogfix, dist/makerelease, local/Version-Munge.pl:
+ Convert build system to SVN version.
+
+2007-03-14 23:31 tanders
+
+ * README.irix, agent/mibgroup/hardware/cpu.h,
+ agent/mibgroup/hardware/cpu/cpu_pcp.c,
+ agent/mibgroup/hardware/cpu/cpu_pcp.h:
+ NEWS: IRIX: PATCH: 1675869: from bbice: CPU statistics for IRIX
+ based on PCP
+
+2007-03-14 16:12 dts12
+
+ * agent/mibgroup/target/target.c:
+ CHANGES: snmpd: PATCHES: 1644280: Don't automatically probe for
+ v3 EngineIDs.
+
+2007-03-13 10:26 dts12
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+ Check for zero-size pseudo-filesystems. Report them as empty
+ rather than full, so they won't be treated as an error.
+
+2007-03-13 09:11 tanders
+
+ * snmplib/mib.c:
+ Back out changes to branches done in SVN 15953 (patch 1678302)
+ because they are only appropriate for MAIN
+
+2007-03-13 05:59 tanders
+
+ * agent/mibgroup/hardware/cpu/cpu.h:
+ CHANGES: PATCH: 1678305: from magfr: Deallocate the cache in
+ hardware/cpu/cpu on shutdown (header part)
+
+2007-03-12 23:09 tanders
+
+ * agent/mibgroup/notification-log-mib/notification_log.c,
+ agent/mibgroup/notification-log-mib/notification_log.h:
+ CHANGES: PATCH: 1678306: from magfr: Deallocate the log in
+ notification-log-mib/notification_log
+
+2007-03-12 23:04 tanders
+
+ * agent/mibgroup/hardware/cpu/cpu.c:
+ CHANGES: PATCH: 1678305: from magfr: Deallocate the cache in
+ hardware/cpu/cpu on shutdown
+
+2007-03-12 22:57 tanders
+
+ * snmplib/mib.c:
+ CHANGES: PATCH: 1678302: from magfr: netsnmp_mibindex_load leaks
+ memory
+
+2007-03-12 22:50 tanders
+
+ * snmplib/snmp_api.c:
+ CHANGES: PATCH: 1678301: from magfr: deallocate domain registry
+ at shutdown
+
+2007-03-12 22:31 tanders
+
+ * net-snmp-config.in:
+ CHANGES: PATCH: 1678298: from magfr: compile-subagent checks for
+ bad HAVE_SIGNAL_H
+
+2007-03-12 21:37 dts12
+
+ * agent/helpers/table.c:
+ CHANGES: snmpd: BUG: 1413728: Reference index values in debug
+ output correctly.
+
+2007-03-12 21:34 dts12
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+ CHANGES: snmpd: BUG: 1102058: Skip non-mounted disks (e.g. swap
+ partitions)
+
+2007-03-12 21:30 dts12
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c,
+ agent/mibgroup/if-mib/data_access/interface_solaris2.c,
+ agent/mibgroup/if-mib/data_access/interface_sysctl.c:
+ CHANGES: snmpd: PATCHES: 1668193: Update registration of
+ ReasmMaxSize support.
+
+2007-03-12 21:28 dts12
+
+ * agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable.c:
+ CHANGES: snmpd: PATCHES: 1668193: Fix check for v6 ReasmMaxSize
+ support.
+
+2007-03-12 19:56 dts12
+
+ * agent/mibgroup/ucd-snmp/proc.c:
+ CHANGES: snmpd: PATCHES: 1668952: Ignore zombie processes.
+
+2007-03-12 19:54 dts12
+
+ * agent/mibgroup/ip-mib/ip_scalars.c:
+ CHANGES: snmpd: PATCHES: 1665985: Implement ipReasmTimeout
+ Though this registers an instance, rather than the full scalar
+ object
+
+2007-03-12 19:51 dts12
+
+ * agent/mibgroup/mibII/vacm_vars.c, snmplib/vacm.c:
+ CHANGES: library: PATCHES: 1665543: Handle VACM checks correctly.
+ CHANGES: snmpd: PATCHES: 1665549: Handle creating VACM entries
+ correctly.
+ [Both patches are required for correct operation]
+
+2007-03-12 19:47 dts12
+
+ * agent/mibgroup/smux/smux.c:
+ CHANGES: snmpd: PATCHES: 1659623: Handle SMUX peers with an empty
+ password.
+
+2007-03-12 19:40 dts12
+
+ * agent/agent_trap.c:
+ CHANGES: snmpd: PATCHES: 1644280: Use the correct engineID when
+ sending v3 traps.
+
+2007-03-12 19:32 dts12
+
+ * snmplib/snmp_api.c:
+ CHANGES: library: PATCHES: 1642071: Don't fiddle with the storage
+ of pre-existing users.
+
+2007-03-12 19:30 dts12
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+ CHANGES: snmpd: PATCHES: 1641865: Don't double check snmpTrapOID
+ in the filter table.
+
+2007-03-12 19:25 dts12
+
+ * agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c:
+ CHANGES: snmpd: PATCHES: 1639726: Report physical memory
+ correctly on *BSD
+
+2007-03-08 15:52 dts12
+
+ * include/net-snmp/system/netbsd.h,
+ include/net-snmp/system/openbsd.h:
+ Include Host Resources MIB on NetBSD and OpenBSD
+
+2007-03-06 13:51 dts12
+
+ * agent/snmp_agent.c:
+ CHANGES: snmpd: BUG: 1159908: Fix memory leak
+
+2007-03-02 22:58 tanders
+
+ * snmplib/MSG00001.bin:
+ de-mange binary file
+
+2007-03-02 12:44 tanders
+
+ * CodingStyle:
+ fix typo
+
+2007-02-28 15:27 dts12
+
+ * CHANGES, ChangeLog, NEWS:
+ Checkpoint summary of CVS changes, preparatory for the SVN
+ switch.
+
+-------------------------------------------------------------------------------
+
+Changes: V5.4 -> SVN checkpoint (V5-4-patches branch)
+
+2007-02-27 13:36 rstory
+
+ * agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.c:
+
+ CHANGES: Linux: BUG: 1666005: Fail to walk ipv6InterfaceTable on Linux
+
+2007-02-27 13:08 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ CHANGES: mib2c: PATCH: 1668171: skip unknown cols in min/max range for tables, instead of error
+
+2007-02-27 12:34 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressPrefixTable.h:
+
+ add header for easier configure --with-mib-module
+
+2007-02-27 12:34 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressPrefixTable.h:
+
+ file ipAddressPrefixTable.h was added on branch V5-4-patches on 2007-02-27 12:34:59 +0000
+
+2007-02-26 14:55 dts12
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ Re-correct interpretation of "null OID" in the AgentX specs.
+
+2007-02-26 14:37 dts12
+
+ * include/ucd-snmp/util_funcs.h:
+
+ Fix reference to Net-SNMP include locations
+
+2007-02-26 12:47 dts12
+
+ * perl/: ASN/Makefile.PL, OID/Makefile.PL,
+ SNMP/Makefile.PL, TrapReceiver/Makefile.PL,
+ agent/Makefile.PL, agent/default_store/Makefile.PL
+, default_store/Makefile.PL:
+
+ Prompting for a single directory, not an array.
+
+2007-02-26 11:32 dts12
+
+ * local/: mib2c.container.conf, mib2c.iterate.conf
+, mib2c.table_data.conf:
+
+ CHANGES: mib2c: BUG: 1429472: Protect against missing instances (and invalid objects)
+
+2007-02-26 11:29 dts12
+
+ * local/mib2c.mfd.conf:
+
+ Fix invalid mib2c directive.
+
+2007-02-26 11:18 dts12
+
+ * agent/mibgroup/disman/event/mteEventConf.c:
+
+ CHANGES: snmpd: BUG: 1416276: Handle dependency on MIB parsing API.
+
+2007-02-23 21:53 tanders
+
+ * configure, configure.in:
+
+ add quotes to fix shell syntax error when empty
+
+2007-02-22 22:47 tanders
+
+ * configure, configure.in:
+
+ Last commit broke the build. Now escape backslashes properly. Please remember to use autoconf 2.59 for the patches branches!
+
+2007-02-22 15:38 dts12
+
+ * README.solaris:
+
+ CHANGES: documentation: BUG: 1247164: Document use of OID macros
+
+2007-02-22 00:28 tanders
+
+ * agent/mibgroup/: hardware/cpu/cpu_perfstat.c,
+ ucd-snmp/proc.c:
+
+ CHANGES: AIX: PATCH: 1665079: from "Michael Kukat": AIX patches for cpu stats and process monitoring
+
+2007-02-21 16:36 hardaker
+
+ * configure, configure.in:
+
+ fix lame-make systems that can't handle whitespace terminating wrapped lines
+
+2007-02-21 15:33 tanders
+
+ * Makefile.top:
+
+ CHANGES: Win32: BUG: 1662987: compile error on Cygwin
+
+2007-02-21 13:56 dts12
+
+ * snmplib/: snmp_parse_args.c, tools.c:
+
+ CHANGES: snmplib: BUG: 1660061: Validate engineIDs more strictly.
+
+2007-02-21 13:49 dts12
+
+ * man/: snmpcmd.1.def, snmp.conf.5.def:
+
+ CHANGES: documentation: BUG: 1407476: Clarify MIB parsing toggle options and MIB comment handling.
+
+2007-02-21 13:37 dts12
+
+ * configure.in, configure:
+
+ CHANGES: build: BUG: 1096166: Handle --without-logfile correctly.
+
+2007-02-19 16:36 dts12
+
+ * dist/: Makefile, nsb-config, nsb-functions
+, nsb-nightly, nsb-package,
+ nsb-platform, patme, README.build-scripts
+:
+
+ removed dist files only to be distributed in the main CVS branch
+
+2007-02-19 16:30 dts12
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ Release Instructions only to be distributed in the main CVS branch
+
+2007-02-19 10:49 dts12
+
+ * dist/makerelease:
+
+ Don't assume local usernames match CVS account names.
+
+2007-02-19 10:41 dts12
+
+ * dist/extractnews:
+
+ Improve layout of CHANGES information.
+
+2007-02-19 10:06 dts12
+
+ * Makefile.in:
+
+ Don't invoke 'versiontag' for tagging the CVS tree.
+ It doesn't handle this any more. (Use 'makerelease' instead)
+
+2007-02-19 10:02 dts12
+
+ * agent/mibgroup/versiontag:
+
+ Don't fail silently when called to tag the CVS tree.
+ Return indication of failure to the calling application (e.g. make)
+
+2007-02-16 12:03 dts12
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ Revert to previous "null OID" interpretation (but with the correct encoding).
+
+2007-02-15 11:09 dts12
+
+ * agent/mibgroup/hardware/cpu/cpu_linux.c:
+
+ CHANGES: snmpd: BUG: 1600261: Handle non-x86 /proc/cpuinfo format
+ (A workaround, rather than a fix - we really need to parse these
+ other formats properly in the init routine)
+
+2007-02-15 10:06 dts12
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ Correct misinterpretation of "null OID" in AgentX specs.
+
+2007-02-15 09:47 dts12
+
+ * agent/agent_trap.c:
+
+ Reject overly-short Trap OIDs.
+ Don't crash out completely on failed v1<->v2 trap conversions.
+
+2007-02-12 12:31 dts12
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ CHANGES: snmpd: BUG: 1633595: Fix AgentX handling of Counter64 values
+
+2007-02-09 21:15 dts12
+
+ * agent/mib_modules.c:
+
+ CHANGES: snmpd: BUG: 1397895: include missing interface declarations
+
+2007-02-08 17:39 hardaker
+
+ * agent/helpers/table_dataset.c:
+
+ NEWS: snmpd: patch from Wojtek Jawor to handle row deletion issues in dataset tables
+
+2007-02-07 17:17 hardaker
+
+ * agent/mibgroup/tunnel.h, mibs/IPV6-FLOW-LABEL-MIB.txt
+:
+
+ added the flow lable mib, which the tunnel-mib refers to
+
+2007-02-07 17:17 hardaker
+
+ * mibs/IPV6-FLOW-LABEL-MIB.txt:
+
+ file IPV6-FLOW-LABEL-MIB.txt was added on branch V5-4-patches on 2007-02-07 17:19:10 +0000
+
+2007-02-05 15:16 dts12
+
+ * snmplib/vacm.c:
+
+ CHANGES: snmplib: PATCH: 1641895: Extend short view masks (as per RFC specs)
+ Patch supplied by Michael Kirkham.
+
+2007-02-05 15:10 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_data_access.c:
+
+ move function call out of assert
+
+2007-02-05 14:38 dts12
+
+ * agent/mibgroup/notification/snmpNotifyFilterProfileTable.c
+:
+
+ CHANGES: snmpd: PATCH: 1639360: Fix snmpNotifyFilterProfileTable row creation.
+ Patch supplied by Michael Kirkham.
+
+2007-02-05 11:01 dts12
+
+ * snmplib/callback.c:
+
+ Fix compilation if LOCK_PER_CALLBACK_SUBID not defined.
+ Reported by Emi Yanagi
+
+2007-01-31 13:51 tanders
+
+ * Makefile.top:
+
+ CHANGES: build: BUG: 1647976: Cygwin/MinGW Windows build fails due to libtool error
+
+2007-01-30 13:43 tanders
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ CHANGES: build: yet another fix to address build issues with ethtool (on RH9).
+ Patch provided by Magnus Fromreide.
+
+2007-01-29 11:03 tanders
+
+ * python/netsnmp/client_intf.c:
+
+ get rid of C++ comments
+
+2007-01-25 22:45 tanders
+
+ * configure, configure.in:
+
+ CHANGES: FreeBSD: fix configure warning for sys/conf.h
+
+2007-01-25 22:22 tanders
+
+ * agent/mibgroup/ip-mib/ipv4InterfaceTable/.cvsignore:
+
+ replace by more reasonable content
+
+2007-01-25 22:05 tanders
+
+ agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_subagent.c
+, local/mib2c-conf.d/subagent.m2c:
+
+ fix typo
+
+2007-01-25 21:31 tanders
+
+ * README.irix:
+
+ CHANGES: documentation: PATCH: 1644735: from "Brent Bice": add gcc build instructions for IRIX
+
+2007-01-25 21:11 tanders
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ CHANGES: snmpd: PATCH: 1644714: from "Leland Wallace": replace last remaining instance of deprecated copy_word by copy_nword
+
+2007-01-24 14:02 dts12
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ Tweak debug output
+
+2007-01-24 12:27 dts12
+
+ * apps/snmptrapd_log.c:
+
+ Suppress assorted warnings.
+
+2007-01-24 12:18 tanders
+
+ * include/net-snmp/types.h:
+
+ make sure uintptr_t is always defined as unsigned. Spotted by David Ford.
+
+2007-01-23 22:50 rstory
+
+ * agent/mibgroup/:
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c
+, ip-mib/ipAddressTable/ipAddressTable_interface.c
+,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c
+,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c
+,
+ snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.c
+:
+
+ don't try to remove a row that was never inserted
+
+2007-01-23 22:38 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ don't try to remove a row that was never inserted
+
+2007-01-23 16:22 dts12
+
+ * agent/mibgroup/target/snmpTargetParamsEntry.c:
+
+ CHANGES: snmpd: PATCH: 1639282: Save persistent snmpTargetParamsTable settings correctly.
+ Fix provided by Michael Kirkham.
+
+2007-01-23 16:12 dts12
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c:
+
+ CHANGES: snmpd: PATCH: 1637287: Handle multiple target tags correctly.
+ Fix provided by Michael Kirkham.
+
+2007-01-23 16:12 dts12
+
+ * agent/mibgroup/target/target.c:
+
+ NEWS: snmpd: PATCH: 1637287: Handle multiple target tags correctly.
+ Fix provided by Michael Kirkham.
+
+2007-01-23 15:44 dts12
+
+ * snmplib/snmp_api.c:
+
+ CHANGES: snmplib: PATCH: 1634620: Fix leaks from create_user_from_session failure.
+ Patch provided by Michael Kirkham.
+
+2007-01-23 14:51 dts12
+
+ * apps/snmptrapd_log.c:
+
+ CHANGES: snmptrapd: BUG: 1638225: Fix interpretation of transport address data.
+ (Keep this consistent with snmpUDPDomain.c)
+
+2007-01-23 14:10 dts12
+
+ * agent/agent_trap.c:
+
+ Bring trap handling in line with RFC 2576/3584 - drop SNMPv1 traps
+ containing Counter64 varbinds. Requested by Magnus Fromreide.
+
+2007-01-22 22:30 tanders
+
+ * snmplib/read_config.c:
+
+ CHANGES: snmplib: PATCH: 1641972: from magfr: add missing const
+
+2007-01-22 16:40 dts12
+
+ * agent/agent_trap.c:
+
+ CHANGES: snmpd: PATCH: 1641332: Include missing agent config definitions.
+
+2007-01-22 16:18 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface.c:
+
+ fix typo overwriting container name
+
+2007-01-22 16:16 dts12
+
+ * agent/mibgroup/agentx/: master_admin.c, master.c
+:
+
+ CHANGES: snmpd: PATCH: 1641685: Handle unresponsive AgentX subagents more reliably.
+ Fix provided by Josef Moellers
+
+2007-01-22 15:51 dts12
+
+ * snmplib/vacm.c:
+
+ CHANGES: snmplib: PATCH: 1640114: Don't store trailing null character.
+ Reported by Michael Kirkham.
+
+2007-01-19 16:53 dts12
+
+ * include/net-snmp/net-snmp-config.h.in,
+ agent/mibgroup/hardware/cpu/cpu_nlist.c:
+
+ NEWS: BUGS 1633483: Support CPU HAL on FreeBSD4.x
+ (before CPU definitions were moved to <sys/resource.h>)
+
+2007-01-19 16:53 dts12
+
+ * configure, configure.in:
+
+ CHANGES: FreeBSD: BUG: 1633483: Support CPU HAL on FreeBSD4.x
+ (before CPU definitions were moved to <sys/resource.h>)
+
+2007-01-19 14:22 tanders
+
+ * configure, configure.in,
+ agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ CHANGES: Linux: fix ethtool configure check for recent systems (e.g. FC6, RHEL5).
+ Patch provided by Magnus Fromreide.
+
+2007-01-19 11:25 tanders
+
+ * configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_storage.c:
+
+ CHANGES: build: add configure check for hasmntopt to fix the build on systems that lack it
+
+2007-01-16 10:04 dts12
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ Reset 'send' flag to consider each sink individually.
+ Reported by Michael Kirkham.
+
+2007-01-16 10:02 dts12
+
+ * agent/agent_trap.c:
+
+ Protect against sending mismatched traps (v1 trap on v2 sink).
+ Reported by Michael Kirkham.
+
+2007-01-16 09:53 dts12
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Don't hardcode the size of counter64 structure (may be wrong on 64-bit boxes)
+
+2007-01-11 22:13 tanders
+
+ * agent/mibgroup/util_funcs.c,
+ agent/mibgroup/utilities/execute.c,
+ include/net-snmp/library/system.h, snmplib/system.c
+:
+
+ CHANGES: snmplib: library layering improvements: introduce netsnmp_mktemp to prevent libnetsnmpagent from depending on libnetsnmpmibs
+
+2007-01-11 21:28 hardaker
+
+ * snmplib/: snmpAAL5PVCDomain.c, snmpIPXDomain.c
+, snmpSTDDomain.c, snmpTCPDomain.c,
+ snmpTCPIPv6Domain.c, snmpUDPDomain.c,
+ snmpUDPIPv6Domain.c, snmp_service.c,
+ snmp_transport.c:
+
+ Patch from Magnus Fromreide to make the transport systems C++ compatible
+
+2007-01-11 09:17 dts12
+
+ * man/snmptrapd.8.def:
+
+ Fix some mangled text.
+
+2007-01-10 20:58 tanders
+
+ * man/snmpd.8.def:
+
+ CHANGES: documentation: BUG: 1614104: broken snmpd(8) manual page in 5.4
+
+2007-01-09 21:50 tanders
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ CHANGES: Solaris: IF-MIB fix: add missing return at end of get_if_stats
+
+2007-01-07 19:47 tanders
+
+ * include/net-snmp/library/snmp_service.h:
+
+ add missing declaration for netsnmp_register_service_handlers (from magfr)
+
+2007-01-06 00:54 tanders
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ CHANGES: Solaris: BUG: 1626153: no hrSWRun informations on Solaris zones
+ Patch provided by Klaus Muehlfeld
+
+2007-01-06 00:34 tanders
+
+ * perl/agent/agent.xs:
+
+ CHANGES: perl: BUG: 1450669: PATCH: 1627949: from martin987: a perl agentx consumes memory
+
+2007-01-03 22:42 tanders
+
+ * perl/SNMP/SNMP.xs:
+
+ get rid of C++ comments
+
+2007-01-03 22:23 tanders
+
+ * perl/SNMP/: SNMP.xs, t/conf.t:
+
+ clean up compile and fix tests.
+ Backport from 5.5.dev
+
+2007-01-02 22:53 tanders
+
+ * perl/SNMP/SNMP.xs:
+
+ BUG: Coverity #178: never pass a NULL oid_arr_len pointer to __concat_oid_str (which dereferences it)
+
+2007-01-02 22:08 tanders
+
+ * agent/mibgroup/agentx/master.c:
+
+ BUG: Coverity #193: properly initialize session pointer before use
+
+2007-01-02 16:48 dts12
+
+ * local/mib2c:
+
+ CHANGES: mib2c: BUG: 1582972: Handle @while@/@end@ properly.
+ Patch provided by Douglas Dean
+
+2007-01-02 16:00 dts12
+
+ * snmplib/: snmpUDPDomain.c, snmpUDPIPv6Domain.c
+, snmpUnixDomain.c:
+
+ CHANGES: snmplib: BUG: 1600171: Support longer community strings in VACM config.
+ Patch provided by Robert Wilcox
+
+2007-01-02 11:24 dts12
+
+ * agent/agent_trap.c:
+
+ CHANGES: snmpd: BUG: 1546817: Fix snmpEnterprise varbind when forwarding v1 traps.
+ Patch provided by Pablo Passera.
+
+2007-01-02 10:38 dts12
+
+ * configure, configure.in:
+
+ CHANGES: build: PATCH: 1625135: configure location of python interpreter
+ Provided by Andrew Langmead
+
+2007-01-02 10:38 dts12
+
+ * Makefile.in, Makefile.top:
+
+ NEWS: configure: PATCH 1625135: configure location of python interpreter
+ Provided by Andrew Langmead
+
+2007-01-01 17:44 dts12
+
+ * agent/mibgroup/util_funcs.c:
+
+ CHANGES: snmpd: PATCH: 1601188, BUG: 1600432: Handle signals properly when restarting the agent.
+ Fix provided by Loic Domaigne.
+
+2007-01-01 16:12 dts12
+
+ * snmplib/snmp_client.c:
+
+ NEWS: snmplib: PATCHES 1592706: Fix memory leak when cloning varbinds.
+ Patch by Steven Dorigotti.
+
+2007-01-01 15:29 dts12
+
+ * snmplib/mib.c:
+
+ CHANGES: snmplib: PATCH: 1548670: Fix range checks for unsigned integers
+ From Kevin Humphries. See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=383380
+
+2007-01-01 15:16 dts12
+
+ * apps/: snmpdf.c, snmpget.c, snmpgetnext.c
+, snmpset.c:
+
+ Move global 'failures' variable closer to where it is used.
+ CHANGES: apps: PATCH: 1529523: Close SNMP session on failure.
+
+2007-01-01 14:38 dts12
+
+ * snmplib/snmp_service.c:
+
+ Protect against potential double delete.
+ Patch provided by Magnus Fromreide.
+
+2007-01-01 11:28 dts12
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ Ensure sysORDescriptions are null-terminated, so they can be
+ safely passed to 'strdup()'. Reported by Wolfgang Pedot.
+
+2006-12-28 23:29 tanders
+
+ * snmplib/snmpUDPDomain.c:
+
+ CHANGES: snmplib: PATCH: 1616912: from "Magnus Fromreide": fix memory leak in snmp_udp_transport
+
+2006-12-28 23:00 tanders
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ CHANGES: Solaris: PATCH: 1623447: from "Hrvoje Habjanic": hrSWRun fix: <exited> instead of endOfTable for terminated processes
+
+2006-12-27 19:17 rstory
+
+ * agent/mibgroup/mibII/at.c:
+
+ fix external reference to NETSNMP_KLOOKUP on HP-UX 10.20 (maybe others)
+
+2006-12-26 16:52 alex_b
+
+ * agent/mibgroup/struct.h, agent/mibgroup/util_funcs.c
+, agent/mibgroup/utilities/execute.c,
+ win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/net-snmp-config.h.in:
+
+ CHANGES: Win32: PATCH: 1622080: from Grueninger A: pass Win32 handles remain open.
+
+2006-12-17 18:01 alex_b
+
+ * win32/: Makefile-apps.in, libsnmp_dll/Makefile.in
+, snmpd/Makefile.in, snmpdsdk/Makefile.in
+, snmpnetstat/Makefile.in,
+ snmptrapd/Makefile.in:
+
+ Add gdi32.lib to fix linking problem when using the static version of the
+ SSL libraries. Thanks to Simon Edwards for the fix.
+
+2006-12-17 16:51 alex_b
+
+ * FAQ:
+
+ Update Windows info in the FAQ
+
+2006-12-12 23:53 tanders
+
+ * agent/mibgroup/host/: hr_filesys.c, hr_storage.c
+, hr_swinst.c:
+
+ CHANGES: Linux: PATCH: 1581294: from "Michael Tatarinov": host-resources improvements
+
+2006-12-12 21:27 tanders
+
+ * win32/net-snmp/: net-snmp-config.h,
+ net-snmp-config.h.in:
+
+ re-add UDP_ADDRESSES_IN_HOST_ORDER
+
+2006-12-12 21:01 tanders
+
+ * win32/net-snmp/net-snmp-config.h.in:
+
+ sync with win32/net-snmp/net-snmp-config.h
+
+2006-12-12 20:31 tanders
+
+ * win32/Configure:
+
+ CHANGES: Win32: fix win32/Configure --with-ipv6
+
+2006-12-12 18:21 tanders
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ NEWS: Win32: fix AES support
+
+2006-12-12 03:01 alex_b
+
+ * local/FAQ2HTML:
+
+ Add version to FAQ.html.
+
+2006-12-09 00:16 tanders
+
+ * include/net-snmp/system/: darwin8.h, darwin9.h
+:
+
+ CHANGES: MacOSX: PATCH: 1600453: from "Chris Jalbert": OS X compile-time endian determination
+
+2006-12-08 22:20 tanders
+
+ * local/Version-Munge.pl:
+
+ fix dist/Makefile munging
+
+2006-12-08 14:30 rstory
+
+ * agent/mibgroup/tcp-mib/data_access/tcpConn_linux.c:
+
+ NEWS: BUG: 1611524: fix tcp connection table fd leak
+
+2006-12-07 15:56 tanders
+
+ * agent/mibgroup/hardware/: cpu.h, cpu/cpu_mach.c
+, cpu/cpu_mach.h:
+
+ NEWS: MacOSX: PATCH: 1600522: from "Bill Fenner": CPU HAL implementation for mach/darwin
+
+2006-12-07 15:54 tanders
+
+ * agent/mibgroup/hardware/cpu/cpu_mach.c:
+
+ file cpu_mach.c was added on branch V5-4-patches on 2006-12-07 15:56:38 +0000
+
+2006-12-07 15:54 tanders
+
+ * agent/mibgroup/hardware/cpu/cpu_mach.h:
+
+ file cpu_mach.h was added on branch V5-4-patches on 2006-12-07 15:56:38 +0000
+
+2006-12-07 13:10 tanders
+
+ * perl/SNMP/SNMP.pm:
+
+ CHANGES: documentation: PATCH: 1604580: SNMP(3) manual page corrections (spotted by tek-ops)
+
+2006-12-06 15:34 rstory
+
+ * agent/mibgroup/tunnel/tunnel.c:
+
+ add needed header
+
+2006-12-06 15:10 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c:
+
+ NEWS: snmpd: BUG: 1558823: fix ipAddressTable memory leak
+
+2006-12-06 15:01 rstory
+
+ * agent/mibgroup/ip-forward-mib/:
+ inetCidrRouteTable/inetCidrRouteTable.c,
+ ipCidrRouteTable/ipCidrRouteTable.c:
+
+ NEWS: BUG: 1596638: memory leak in ipCidrRouteTable, inetCidrRouteTable
+
+2006-12-06 14:34 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_ioctl.c:
+
+ tweak/add debug msgs in netsnmp_access_interface_ioctl_ifindex_get
+
+2006-12-05 23:47 tanders
+
+ * agent/mibgroup/if-mib/data_access/interface_ioctl.c:
+
+ fix debug message
+
+2006-12-05 23:28 tanders
+
+ * agent/mibgroup/Makefile.in:
+
+ CHANGES: BUG: 1600093: autoconf 2.60 breaks the build
+
+-------------------------------------------------------------------------------
+
+Changes: V5.4.rc3 -> V5.4
+
+2006-11-24 09:44 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_agent_registry.3,
+ netsnmp_agent_trap.3, netsnmp_asn1_packet_parse.3,
+ netsnmp_baby_steps.3, netsnmp_bulk_to_next.3,
+ netsnmp_cache_handler.3, netsnmp_callback.3,
+ netsnmp_container.3, netsnmp_data_list.3,
+ netsnmp_debug.3, netsnmp_default_store.3,
+ netsnmp_handler.3, netsnmp_instance.3,
+ netsnmp_iterator_info_s.3, netsnmp_leaf.3,
+ netsnmp_library.3, netsnmp_mib_maintenance.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_stash_to_next.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_generic.3,
+ netsnmp_table_indexes.3, netsnmp_table_iterator.3,
+ netsnmp_table_iterator.h.3, netsnmp_table_maintenance.3
+, netsnmp_table_rows.3, netsnmp_tdata.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ documentation update
+
+2006-11-24 09:43 hardaker
+
+ * doxygen.conf:
+
+ - version tag ( 5.4 )
+
+2006-11-24 09:19 hardaker
+
+ * README.win32, win32/libsnmp_dll/libsnmp.def,
+ win32/libsnmp_dll/libsnmp_dll.dsp,
+ win32/netsnmpmibssdk/netsnmpmibssdk.dsp:
+
+ patch from Alex Burger to fix MSVC issues
+
+2006-11-24 08:09 dts12
+
+ * FAQ:
+
+ Updates to the CODING section.
+ I'm sure there are more changes that could usefully be made,
+ but Life's Too Short. OK, Wes - it's all yours....
+
+2006-11-24 07:38 dts12
+
+ * README:
+
+ Tweak web links slightly, and mention the Wiki.
+
+2006-11-24 07:09 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ doc update based on perl changes
+
+2006-11-24 06:26 dts12
+
+ * FAQ:
+
+ Drop obsolete entries.
+
+2006-11-24 06:23 dts12
+
+ * FAQ:
+
+ Updates to the COMPILING section.
+
+2006-11-24 06:02 dts12
+
+ * FAQ:
+
+ Updates to the rest of the AGENTS section.
+
+2006-11-24 05:41 dts12
+
+ * FAQ:
+
+ Commit revisions to the MIBS and (most of) the AGENTS sections.
+ 43 pages down, 18 to go....
+
+2006-11-24 05:13 tanders
+
+ * FAQ:
+
+ add some more working platforms; perl -> Perl
+
+2006-11-24 03:21 dts12
+
+ * FAQ:
+
+ Revision of the first three sections (GENERAL, APPLICATIONS, PERL).
+ Probably racing a losing battle against packaging the upcoming release!
+
+2006-11-23 19:30 tanders
+
+ * README.solaris:
+
+ updates and cleanup for 5.4
+
+2006-11-23 17:11 tanders
+
+ * agent/mibgroup/README.smux:
+
+ CHANGES: documentation: PATCH: 1601261: from "Stephen J. Friedl": update README.smux
+
+2006-11-23 16:38 tanders
+
+ * dist/net-snmp.spec:
+
+ CHANGES: misc: RPM spec file fixes for 64-bit platforms
+
+2006-11-23 01:07 dts12
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+
+ Remove irrelevant comments (left over from the development phase).
+
+2006-11-22 16:06 hardaker
+
+ * dist/Makefile:
+
+ use --without for perl now if off
+
+2006-11-22 15:54 hardaker
+
+ * dist/Makefile:
+
+ final verison change
+
+2006-11-22 15:25 tanders
+
+ * dist/net-snmp.spec:
+
+ revert to correct version
+
+2006-11-22 15:23 tanders
+
+ * dist/net-snmp.spec:
+
+ - remove bad patch reference
+ - enable Perl by default, but allow for --without perl_modules|embedded_perl
+ - add netsnmp_ prefix for local defines
+
+2006-11-22 08:49 dts12
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ Clarification of the behaviour of objects in the memory & systemStats groups,
+ and objects used for reporting/fixing errors.
+
+2006-11-22 07:07 hardaker
+
+ * man/: .cvsignore, Makefile.in:
+
+ manalias always-made fix; now touches a temp file (and cleans later)
+
+2006-11-22 05:25 tanders
+
+ * .cvsignore:
+
+ add new 'mk' subdir
+
+2006-11-22 05:24 tanders
+
+ * man/.cvsignore:
+
+ add new manual pages
+
+2006-11-22 05:03 tanders
+
+ * snmplib/system.c:
+
+ CHANGES: snmpd: PATCH: 1598966: from "Peter Eckel": Fix bug #1598927: #elif build fix
+
+2006-11-22 04:58 tanders
+
+ * apps/snmptrapd.c:
+
+ CHANGES: snmptrapd: PATCH: 1598968: from "Peter Eckel": Fix bug #1587759: snmptrapd doesn't recognize -A option
+
+2006-11-18 09:56 marz
+
+ * python/netsnmp/client_intf.c:
+
+ fixes for None return tpye and octet val handling
+
+2006-11-18 07:28 hardaker
+
+ * FAQ, README, configure, configure.in
+, sedscript.in, snmplib/snmp_version.c,
+ dist/net-snmp.spec:
+
+ - version tag ( 5.4.rc3 )
+
+-------------------------------------------------------------------------------
+
+Changes: V5.4.rc2 -> V5.4.rc3
+
+2006-11-18 07:14 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_agent_registry.3,
+ netsnmp_agent_trap.3, netsnmp_asn1_packet_parse.3,
+ netsnmp_baby_steps.3, netsnmp_bulk_to_next.3,
+ netsnmp_cache_handler.3, netsnmp_callback.3,
+ netsnmp_container.3, netsnmp_data_list.3,
+ netsnmp_debug.3, netsnmp_default_store.3,
+ netsnmp_handler.3, netsnmp_instance.3,
+ netsnmp_iterator_info_s.3, netsnmp_leaf.3,
+ netsnmp_library.3, netsnmp_mib_maintenance.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_stash_to_next.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_generic.3,
+ netsnmp_table_indexes.3, netsnmp_table_iterator.3,
+ netsnmp_table_iterator.h.3, netsnmp_table_maintenance.3
+, netsnmp_table_rows.3, netsnmp_tdata.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ documentation update
+
+2006-11-18 07:13 hardaker
+
+ * doxygen.conf:
+
+ - version tag ( 5.4.rc3 )
+
+2006-11-18 06:31 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+
+ fix missing memCached.0 patch from Thomas Anders
+
+2006-11-16 20:47 hardaker
+
+ * configure:
+
+ patch from Thomas Anders to fix perl CC extraction to allow for paths
+
+2006-11-16 20:43 hardaker
+
+ * configure.in:
+
+ patch from Thomas Anders to fix perl CC extraction to allow for paths
+
+2006-11-16 13:38 tanders
+
+ * man/Makefile.in:
+
+ add new manual pages to the build process
+
+2006-11-16 01:36 tanders
+
+ * snmplib/system.c:
+
+ properly protect nlist code to fix build issues w/ --without-kmem-usage
+
+2006-11-15 16:22 tanders
+
+ * man/: encode_keychange.1.def, fixproc.1.def,
+ mib2c-update.1.def, net-snmp-config.1.def,
+ tkmib.1.def, traptoemail.1.def:
+
+ CHANGES: documentation: BUG: 1577913: add missing manual pages for executables, supplied by Debian
+
+2006-11-15 15:35 tanders
+
+ * man/snmpnetstat.1.def:
+
+ Update to the new syntax of the snmpnetstat rewrite. Inspired by Debian.
+
+2006-11-15 14:45 tanders
+
+ * man/snmpset.1.def:
+
+ format fix (from Debian patch 07_docfiles.patch)
+
+2006-11-15 11:35 tanders
+
+ * man/snmp_trap_api.3.def:
+
+ Put description on a single line. Taken from Debian patch 07_docfiles.patch
+
+2006-11-14 16:01 dts12
+
+ * agent/mibgroup/hardware/cpu/cpu_nlist.c:
+
+ Fix initialisation problem (which results in the agent failing
+ to start on FreeBSD systems, when run as an unprivileged user).
+
+2006-11-14 15:44 tanders
+
+ * doc/rfc/smiV2/rfc2579.errata~:
+
+ do we agree to not ship editor backup copies?
+
+2006-11-14 03:18 tanders
+
+ * testing/tests/T160snmpnetstat:
+
+ udpTable requires /dev/kmem access on IRIX and Tru64 Unix
+
+2006-11-14 01:56 tanders
+
+ * man/mib_api.3.def:
+
+ CHANGES: PATCH: 1596028: from "Stephen J. Friedl": const fixes for the mib_api(3) manual page
+
+2006-11-13 16:17 tanders
+
+ * perl/agent/test.pl:
+
+ CHANGES: perl: make perltest fixes for Solaris 2.6 and earlier
+
+2006-11-13 15:54 tanders
+
+ * perl/SNMP/SNMP.xs:
+
+ NEWS: perl: SNMP.pm fixes for 64-bit platforms
+
+2006-11-13 15:49 tanders
+
+ * perl/SNMP/t/bulkwalk.t:
+
+ CHANGES: perl: make perltest fixes for HP-UX
+
+2006-11-13 15:26 tanders
+
+ * perl/agent/test.pl:
+
+ Drop Data::Dumper since Perl 5.00405 as shipped with IRIX 6.5 doesn't include it.
+
+2006-11-13 14:51 tanders
+
+ * perl/OID/test.pl:
+
+ Drop unneeded dependency on Data::Dumper.
+
+2006-11-13 14:46 tanders
+
+ * perl/SNMP/t/bulkwalk.t:
+
+ CHANGES: perl: make perltest fixes for IRIX
+
+2006-11-12 17:53 alex_b
+
+ * README.win32, win32/Makefile-apps.in,
+ win32/Makefile.in, win32/snmpd/Makefile.in,
+ win32/snmpdsdk/Makefile.in, win32/snmpnetstat/Makefile.in
+, win32/snmptrapd/Makefile.in:
+
+ Remove warnings about compiling with the SNMP library DLL.
+
+2006-11-10 03:24 tanders
+
+ * README.osX:
+
+ remove --enable-mini-agent recommendation because --without-kmem-usage no longer requires it
+
+2006-11-10 01:21 dts12
+
+ * man/Makefile.in:
+
+ Reference the correct man page for snmp_trap_api aliases.
+ Reported and fixed by Chris Jalbert.
+
+2006-11-08 08:24 hardaker
+
+ * FAQ, README, snmplib/snmp_version.c,
+ configure, configure.in, sedscript.in,
+ dist/net-snmp.spec:
+
+ - version tag ( 5.4.rc2 )
+
+-------------------------------------------------------------------------------
+
+Changes: V5.4.rc1 -> V5.4.rc2
+
+2006-11-08 07:56 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_agent_registry.3,
+ netsnmp_agent_trap.3, netsnmp_asn1_packet_parse.3,
+ netsnmp_baby_steps.3, netsnmp_bulk_to_next.3,
+ netsnmp_cache_handler.3, netsnmp_callback.3,
+ netsnmp_container.3, netsnmp_data_list.3,
+ netsnmp_debug.3, netsnmp_default_store.3,
+ netsnmp_handler.3, netsnmp_instance.3,
+ netsnmp_iterator_info_s.3, netsnmp_leaf.3,
+ netsnmp_library.3, netsnmp_mib_maintenance.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_stash_to_next.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_generic.3,
+ netsnmp_table_indexes.3, netsnmp_table_iterator.3,
+ netsnmp_table_iterator.h.3, netsnmp_table_maintenance.3
+, netsnmp_table_rows.3, netsnmp_tdata.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ documentation update
+
+2006-11-08 07:55 hardaker
+
+ * doxygen.conf:
+
+ - version tag ( 5.4.rc2 )
+
+2006-11-08 07:27 hardaker
+
+ * agent/helpers/row_merge.c:
+
+ Patch from Robert to check processed flag before proceeding
+
+2006-11-07 15:33 dts12
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+
+ Fix duplicate case statements (and indicate which are the deprecated objects)
+
+2006-11-07 14:14 dts12
+
+ * agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory.h, mibs/UCD-SNMP-MIB.txt
+:
+
+ Clarify meaning of mem*Text objects (and define new consistent versions).
+
+2006-11-07 06:54 hardaker
+
+ * mibs/NET-SNMP-TC.txt:
+
+ add a missing paren to a description field
+
+2006-11-07 06:54 hardaker
+
+ * configure.in, configure, Makefile.in,
+ net-snmp-config.in, agent/Makefile.in:
+
+ patch to fix sed usage on systems with a very old sed
+
+2006-11-06 15:50 tanders
+
+ * README.irix:
+
+ mention --without-kmem-usage
+
+2006-11-06 15:43 tanders
+
+ * agent/mibgroup/mibII/: at.c, interfaces.c, ipAddr.c
+, ipv6.c, tcpTable.c, udpTable.c,
+ var_route.c:
+
+ improved klookup error handling
+
+2006-11-06 15:41 tanders
+
+ * configure, README.aix, configure.in,
+ agent/kernel.h:
+
+ CHANGES: snmpd: build fix for --without-kmem-usage
+
+2006-11-06 07:16 tanders
+
+ * testing/tests/: T120proxyget, T121proxyset,
+ T122proxysetfail:
+
+ sh doesn't like "==", of course.
+
+2006-11-06 03:16 tanders
+
+ * testing/tests/: T120proxyget, T121proxyset,
+ T122proxysetfail:
+
+ skip proxy tests for TCP because the proxy code doesn't support TCP yet
+
+2006-11-03 17:39 tanders
+
+ * testing/tests/: T058agentauthtrap, T065agentextend,
+ T200snmpv2cwalkall:
+
+ CHANGES: misc: "make test" fixes for non-UDP transports
+
+2006-11-03 08:40 marz
+
+ * python/netsnmp/: client.py, client_intf.c:
+
+ memory leak fixes for python interface
+
+2006-11-02 15:30 tanders
+
+ * man/.cvsignore:
+
+ add new man page aliases
+
+2006-11-01 15:53 tanders
+
+ * ChangeLog:
+
+ ChangeLog shall only document changes of the branch it's contained in
+
+2006-11-01 08:36 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ CHANGES: BUG: 1585815: fix mfd bits length calculation
+
+2006-10-31 14:29 hardaker
+
+ * FAQ, README, configure, configure.in
+, sedscript.in, snmplib/snmp_version.c,
+ dist/net-snmp.spec:
+
+ - version tag ( 5.4.rc1 )
+
+-------------------------------------------------------------------------------
+
+Changes: V5.4.pre4 -> V5.4.rc1
+
+2006-10-31 12:51 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_agent_registry.3,
+ netsnmp_agent_trap.3, netsnmp_asn1_packet_parse.3,
+ netsnmp_baby_steps.3, netsnmp_bulk_to_next.3,
+ netsnmp_cache_handler.3, netsnmp_callback.3,
+ netsnmp_container.3, netsnmp_data_list.3,
+ netsnmp_debug.3, netsnmp_default_store.3,
+ netsnmp_handler.3, netsnmp_instance.3,
+ netsnmp_iterator_info_s.3, netsnmp_leaf.3,
+ netsnmp_library.3, netsnmp_mib_maintenance.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_stash_to_next.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_generic.3,
+ netsnmp_table_indexes.3, netsnmp_table_iterator.3,
+ netsnmp_table_iterator.h.3, netsnmp_table_maintenance.3
+, netsnmp_table_rows.3, netsnmp_tdata.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ documentation update
+
+2006-10-31 12:51 hardaker
+
+ * doxygen.conf:
+
+ - version tag ( 5.4.rc1 )
+
+2006-10-31 12:35 hardaker
+
+ * agent/kernel.h:
+
+ remove the klookup define as (0) since Dave found definite spots where this was unsafe
+
+2006-10-31 07:32 hardaker
+
+ * agent/kernel.h:
+
+ Patch from Thomas Anders to attempt to fix lack of kmem support for various platforms when kmem isn't available
+
+2006-10-31 07:27 hardaker
+
+ * man/Makefile.in:
+
+ fix a problem with the man generation patch as pointed out by Chris Jalbert
+
+2006-10-31 07:16 hardaker
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ minor patch from Bruce Shaw to fix lmsensors 240 class machines
+
+2006-10-30 13:43 tanders
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+
+ CHANGES: snmpd: memTotalFree should report total virtual instead of physical memory
+
+2006-10-30 09:52 tanders
+
+ * agent/mibgroup/hardware/memory/memory_irix.c:
+
+ mem HAL fixes for IRIX
+
+2006-10-30 07:40 hardaker
+
+ * man/Makefile.in:
+
+ use generated alias man pages
+
+2006-10-28 18:23 alex_b
+
+ * README.win32:
+
+ Added --disable-embedded-perl --without-perl-modules for MinGW / Cygwin.
+
+2006-10-27 13:19 alex_b
+
+ * include/net-snmp/library/snmpTCPDomain.h,
+ include/net-snmp/library/snmpTCPIPv6Domain.h,
+ include/net-snmp/library/snmpUDPIPv6Domain.h,
+ include/net-snmp/library/snmpUnixDomain.h,
+ include/net-snmp/library/snmp_api.h,
+ include/net-snmp/library/snmp_debug.h,
+ include/net-snmp/library/snmp_transport.h,
+ include/net-snmp/library/transform_oids.h,
+ win32/Makefile-apps.in, win32/build.pl,
+ win32/libsnmp_dll/libsnmp.def,
+ win32/libsnmp_dll/libsnmp.def.in, win32/snmpd/Makefile.in
+, win32/snmpdsdk/Makefile.in,
+ win32/snmpnetstat/Makefile.in, win32/snmptrapd/Makefile.in
+:
+
+ -Allow building of applications with library DLL in build.bat build system.
+ -Fix DLL export/import variables for library DLL
+
+2006-10-27 07:47 hardaker
+
+ * python/netsnmp/client_intf.c:
+
+ fix walking off of a cliff
+
+2006-10-27 07:32 marz
+
+ * python/netsnmp/client.py:
+
+ client.py
+
+2006-10-27 02:04 tanders
+
+ * local/snmp-ucd.sh:
+
+ CHANGES: misc: BUGS: 1585250: don't use deprecated options in start script
+
+2006-10-26 17:50 alex_b
+
+ * agent/mibgroup/winExtDLL.c:
+
+ Win32: Add a couple DEBUG lines.
+
+2006-10-26 17:15 alex_b
+
+ * README.win32, win32/dist/README.build.win32.txt:
+
+ Win32: README update, build steps update.
+
+2006-10-26 09:21 tanders
+
+ * CodingStyle:
+
+ minor updates
+
+2006-10-26 04:14 tanders
+
+ * configure, configure.in:
+
+ minor fixes for "configure --help" output, especially for MIB modules
+
+2006-10-26 03:24 tanders
+
+ * include/net-snmp/system/: darwin8.h, darwin9.h:
+
+ CHANGES: MacOSX: build fix for mibII/udpTable
+
+2006-10-25 11:51 alex_b
+
+ * win32/net-snmp/: net-snmp-config.h, net-snmp-config.h.in
+:
+
+ NETSNMP_ prefix missing for OPENSSL.
+
+2006-10-25 09:16 tanders
+
+ * include/net-snmp/library/mib.h,
+ include/net-snmp/library/parse.h, perl/OID/OID.xs,
+ perl/SNMP/README, perl/SNMP/SNMP.xs,
+ perl/agent/agent.xs, snmplib/mib.c,
+ snmplib/parse.c, snmplib/snmp_api.c:
+
+ CHANGES: library: rename init_mib to netsnmp_init_mib to avoid symbol clash with HP-UX's libnm
+
+2006-10-23 14:00 tanders
+
+ * NEWS:
+
+ AIX ships host by default
+
+2006-10-22 18:01 alex_b
+
+ * win32/dist/: README.build.win32.txt,
+ htmlhelp/Developer_FAQ.html, htmlhelp/FAQ.html,
+ htmlhelp/snmp.conf.win32.html,
+ htmlhelp/snmpd.conf.win32.html,
+ htmlhelp/snmptrapd.conf.win32.html, installer/net-snmp.nsi
+:
+
+ Update Windows binary build files.
+
+2006-10-21 09:42 alex_b
+
+ * README.win32:
+
+ winExtDLL update.
+
+2006-10-21 09:36 alex_b
+
+ * README.win32, win32/dist/installer/net-snmp.nsi:
+
+ Readme update for winExtDLL, change command line for winExtDLL.
+
+2006-10-21 07:07 alex_b
+
+ * agent/mibgroup/winExtDLL.c:
+
+ Code cleanup. Add support for xSnmpExtensionQueryEx for SET/GETNEXT.
+
+2006-10-21 05:45 alex_b
+
+ * agent/mibgroup/winExtDLL.c:
+
+ Win32: winExtDLL: snmpset string, DLL loading and snmpwalk fixes.
+
+2006-10-21 05:09 hardaker
+
+ * perl/default_store/test.pl:
+
+ remove not-existent SBSM definition from test cases
+
+2006-10-20 17:17 hardaker
+
+ * configure:
+
+ - version tag ( 5.4.pre4 )
+
+-------------------------------------------------------------------------------
+
+Changes: V5.4.pre3 -> V5.4.pre4
+
+2006-10-20 16:59 hardaker
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Patch from Anders Persson to change t_uscalar_t to something more portable (uint32_t)
+
+2006-10-20 13:43 dts12
+
+ * include/net-snmp/: agent/ds_agent.h,
+ library/default_store.h:
+
+ Document the need to update the corresponding perl interfaces
+ when changes are made.
+
+2006-10-20 08:51 rstory
+
+ * agent/mibgroup/hardware/cpu.h:
+
+ use cpu_null for all darwin, until code works
+
+2006-10-20 08:18 dts12
+
+ * agent/mibgroup/hardware/cpu/: cpu_nlist.c, cpu_sysctl.c
+:
+
+ Clarify comments to reflect reality.
+
+2006-10-20 08:13 tanders
+
+ * agent/mibgroup/hardware/cpu.h:
+
+ fix syntax error; make sure we get cpu_null for darwin6/7, cpu_sysctl for darwin8+
+
+2006-10-20 07:46 rstory
+
+ * agent/mibgroup/hardware/cpu.h:
+
+ use cpu_null for darwin7 and darwin6
+
+2006-10-20 01:44 tanders
+
+ * agent/mibgroup/hardware/cpu.h:
+
+ openbsd4 and darwin should use cpu_sysctl
+
+2006-10-19 22:10 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_agent_registry.3,
+ netsnmp_agent_trap.3, netsnmp_asn1_packet_parse.3,
+ netsnmp_baby_steps.3, netsnmp_bulk_to_next.3,
+ netsnmp_cache_handler.3, netsnmp_callback.3,
+ netsnmp_container.3, netsnmp_data_list.3,
+ netsnmp_debug.3, netsnmp_default_store.3,
+ netsnmp_handler.3, netsnmp_instance.3,
+ netsnmp_iterator_info_s.3, netsnmp_leaf.3,
+ netsnmp_library.3, netsnmp_mib_maintenance.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_stash_to_next.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_generic.3,
+ netsnmp_table_indexes.3, netsnmp_table_iterator.3,
+ netsnmp_table_iterator.h.3, netsnmp_table_maintenance.3
+, netsnmp_table_rows.3, netsnmp_tdata.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ documentation update
+
+2006-10-19 22:10 hardaker
+
+ * doxygen.conf:
+
+ - version tag ( 5.4.pre4 )
+
+2006-10-19 16:44 tanders
+
+ * agent/mibgroup/hardware/cpu/cpu_nlist.c:
+
+ fix up header inclusion a bit
+
+2006-10-19 15:38 rstory
+
+ * agent/mibgroup/hardware/memory.h:
+
+ test for darwing before freebsd, since darwin defines freebsd
+
+2006-10-19 14:42 hardaker
+
+ * agent/mibgroup/if-mib/ifXTable/: ifXTable.c,
+ ifXTable_data_access.c, ifXTable_interface.c:
+
+ fix broken bad evil ifTable.h usage
+
+2006-10-19 13:38 hardaker
+
+ * agent/mibgroup/if-mib/ifTable/: ifTable.c, ifTable.h
+, ifTable_data_access.c, ifTable_defs.h,
+ ifTable_interface.c:
+
+ don't let ifTable.h redefine random symbols affecting other code
+
+2006-10-19 08:50 hardaker
+
+ * agent/Makefile.in:
+
+ remove libhelpers from the link line of libagents
+
+2006-10-19 08:47 hardaker
+
+ * snmplib/snmp_api.c:
+
+ fix transport sock patch
+
+2006-10-19 07:15 hardaker
+
+ * include/net-snmp/system/: darwin8.h, darwin9.h:
+
+ CHANGES: snmpd: PATCH: 1579364: from jalbert: Updated darwin patch to fix compilation on Tiger and Leapord
+
+2006-10-18 16:52 alex_b
+
+ * agent/mibgroup/winExtDLL.c:
+
+ Win32: winExtDLL: Finish adding support for DLLs that support multiple
+ ranges.
+
+2006-10-18 14:11 dts12
+
+ * agent/mibgroup/disman/event/: mteEventConf.c,
+ mteEventConf.h, mteObjectsConf.c, mteObjectsConf.h
+, mteTriggerConf.c, mteTriggerConf.h:
+
+ Cleanly handle re-loading "monitor" (and related) directives.
+
+2006-10-18 14:09 dts12
+
+ * agent/mibgroup/disman/event/mteTriggerConf.c:
+
+ Handle invalid payload object OIDs.
+
+2006-10-18 12:07 dts12
+
+ * agent/mibgroup/agent/extend.c:
+
+ Cleanly handle re-loading "extend" directives.
+
+2006-10-18 07:45 rstory
+
+ * dist/cvsup:
+
+ - user /usr/bin/env for portability
+ - only test for tar if we're going to use it
+
+2006-10-18 03:29 tanders
+
+ * man/snmpd.conf.5.def:
+
+ document new pass_persist error messages introduced by patch 1568150
+
+2006-10-17 21:14 hardaker
+
+ * README.osX:
+
+ update from Chris Jalbert
+
+2006-10-17 20:19 hardaker
+
+ * agent/: agent_handler.c, agent_registry.c:
+
+ CHANGES: snmpd: PATCH 1565703: patch to fix rapid registrations/deregistration issues
+
+2006-10-17 20:12 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ NEWS: snmpd: PATCH 1562688: fix ping/reattach agentx code
+
+2006-10-17 20:03 hardaker
+
+ * snmplib/snmp_api.c:
+
+ CHANGES: snmplib: PATCH 1562168: check for a sock fd less than 0.
+
+2006-10-17 19:59 hardaker
+
+ * agent/mibgroup/: util_funcs.c, ucd-snmp/pass_persist.c
+:
+
+ using vfork and named pipes: NEWS: snmpd: PATCH: 1551948: from aproemel: Make pass_persist usable on uClinux
+
+2006-10-17 19:17 hardaker
+
+ * agent/mibgroup/ucd-snmp/pass_persist.c:
+
+ NEWS: snmpd: PATCH: 1568150: from gavin_han: Extend pass_persist error messages that can be passed back from the script
+
+2006-10-17 19:12 hardaker
+
+ * include/net-snmp/library/snmp_logging.h,
+ snmplib/snmp_api.c, snmplib/snmp_logging.c:
+
+ CHANGES: snmplib: PATCH: 1570650: from "Benoit Amiaux": create a logging shutdown function to properly clean up log registrations if needed.
+
+2006-10-17 19:05 hardaker
+
+ * include/net-snmp/agent/table_iterator.h:
+
+ CHANGES: snmpd: PATCH: 1570650: from "Benoit Amiaux": make delete table function public
+
+2006-10-17 18:51 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ CHANGES: perl: PATCH: 1575937: from martin987: fix usenumeric output in async varbinds so they return OIDs instead of empty strings.
+
+2006-10-17 18:46 hardaker
+
+ * agent/snmpd.c:
+
+ CHANGES: snmpd: PATCH: 1575984: from rtyle: block SIGHUP during reconfig
+
+2006-10-17 18:34 hardaker
+
+ * perl/default_store/gen:
+
+ remove correct sub directory
+
+2006-10-17 18:33 hardaker
+
+ * perl/agent/default_store/: default_store.pm,
+ default_store.xs, gen, test.pl:
+
+ update to latest ds_agent.h defines
+
+2006-10-17 16:53 hardaker
+
+ * perl/default_store/: default_store.pm, default_store.xs
+, gen, test.pl:
+
+ support latest h2xs; NEWS: perl: update default_store module to latest default_store c-binding tokens
+
+2006-10-17 16:05 hardaker
+
+ * Makefile.in:
+
+ remove config generated files on a make distclean
+
+2006-10-17 15:55 hardaker
+
+ * configure, configure.in, agent/Makefile.in
+:
+
+ properly fix the sed issues without removing functionality by using files instead of sed expressions
+
+2006-10-17 14:08 tanders
+
+ * agent/kernel.c:
+
+ make klookup debugging less verbose
+
+2006-10-17 13:32 tanders
+
+ * agent/kernel.c:
+
+ add klookup debugging
+
+2006-10-17 10:39 tanders
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ still build if kernel symbols undefined
+
+2006-10-17 09:16 dts12
+
+ * agent/snmp_agent.c, agent/mibgroup/ucd-snmp/proxy.c
+, include/net-snmp/agent/snmp_agent.h:
+
+ Associate errors from delegated requests with the correct varbind,
+ and fix problems with failed proxied requests timing out.
+ Reported by Pablo Passera (See coders list - 5th Oct ff)
+
+2006-10-17 09:10 hardaker
+
+ * configure, configure.in:
+
+ NEWS: build: --enable-as-needed will try to link built libraries against needed libraries at library link time, rather than application link time.
+
+2006-10-17 07:55 hardaker
+
+ * configure.in:
+
+ remove duplicate 'compiler options' header in help output
+
+2006-10-17 07:26 tanders
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ back out host/hr_swrun part of the AIX jumbo patch since it overwrote a more complete, working implementation with a segfaulting one
+
+2006-10-16 16:36 tanders
+
+ * agent/mibgroup/ucd-snmp/loadave.c:
+
+ CHANGES: IRIX: proper implementation for UCD-SNMP-MIB::laTable (avoiding nlist)
+
+2006-10-16 11:43 marz
+
+ * python/netsnmp/: client.py, tests/test.py:
+
+ numeric and OID sets with testing
+
+2006-10-16 08:54 tanders
+
+ * agent/mibgroup/ucd-snmp/loadave.c:
+
+ disabling nlist shouldn't disable perfstat
+
+2006-10-16 08:21 tanders
+
+ * agent/mibgroup/mibII/at.c:
+
+ deal with missing ARPTAB_SIZE_SYMBOL
+
+2006-10-16 07:54 tanders
+
+ * include/net-snmp/system/osf5.h:
+
+ CHANGES: Tru64: - fix "auto_nlist failed on arptab_size at location 0" errors
+
+2006-10-15 17:23 alex_b
+
+ * agent/mibgroup/winExtDLL.c:
+
+ Win32: winExtDLL fixes for snmpwalk / snmpgetnext.
+
+2006-10-15 14:44 dts12
+
+ * apps/snmptrapd_handlers.c:
+
+ Don't moan about normal connection-based transport activity
+ (and *do* moan sensibly about failed sends).
+
+2006-10-15 14:43 dts12
+
+ * snmplib/snmpTCPDomain.c:
+
+ Store TCP/IPv4 address information in the same format as UDP/IPv4.
+ This allows the community -> security name mapping to work correctly.
+ Fixes Bug #1571945.
+ A better (more modular) solution would be preferable (see discussions
+ on the mailing lists), but this should at least allow 5.4 to proceed.
+
+2006-10-15 10:03 tanders
+
+ * agent/kernel.h:
+
+ klookup takes three arguments, not one
+
+2006-10-14 14:28 tanders
+
+ * agent/: auto_nlist.c, kernel.h,
+ mibgroup/host/hr_swrun.c, mibgroup/mibII/at.c,
+ mibgroup/mibII/interfaces.c, mibgroup/mibII/ipAddr.c
+, mibgroup/mibII/ipv6.c, mibgroup/mibII/tcpTable.c
+, mibgroup/mibII/udpTable.c,
+ mibgroup/mibII/var_route.c:
+
+ prepare for 64-bit nlist changes
+
+2006-10-14 10:37 alex_b
+
+ * agent/mibgroup/winExtDLL.c:
+
+ Win32: winExtDLL: Fix OID sets, memory leaks.
+
+2006-10-14 06:49 alex_b
+
+ * agent/mibgroup/winExtDLL.c:
+
+ Win32: winExtDLL: Use alarm instead of thread for traps. Various trap
+ fixes.
+
+2006-10-13 16:13 alex_b
+
+ * agent/mibgroup/winExtDLL.c:
+
+ Win32: winExtDLL: Add trap support for remaining types, fix
+ ASN_IPADDRESS GET support.
+
+2006-10-13 15:16 tanders
+
+ * man/: snmpd.conf.5.def, snmpd.examples.5.def:
+
+ smuxsocket needs to be an IPv4 address
+
+2006-10-13 14:49 dts12
+
+ * README.osX:
+
+ Update with recent build reports from Chris Jalbert.
+
+2006-10-13 14:45 tanders
+
+ * testing/tests/: Sv3config, Sv3usmconfigagent,
+ Svanyconfig:
+
+ smuxsocket needs to be an IPv4 address
+
+2006-10-13 14:36 dts12
+
+ * agent/mibgroup/smux/smux.c:
+
+ Handle errors from recv() - see Bug #1527930
+
+2006-10-13 14:25 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Explicitly referenced VNAME token when describing "view" token usage.
+ (Suggested by John Rouillard)
+
+2006-10-13 13:50 tanders
+
+ * perl/agent/default_store/: default_store.pm,
+ default_store.xs:
+
+ remove NETSNMP_DS_AGENT_H which isn't a default store variable
+
+2006-10-13 07:14 tanders
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ fix syntax typo
+
+2006-10-13 02:17 tanders
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ don't commit boolean logic late at night
+
+2006-10-13 01:28 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Clarify the parsing of boolean "monitor" expressions.
+
+2006-10-12 15:43 rstory
+
+ * agent/mibgroup/hardware/memory.h:
+
+ use memory_darwin for darwin7
+
+2006-10-12 15:21 dts12
+
+ * agent/mibgroup/utilities/iquery.c:
+
+ Ensure internal query configuration is available (and active)
+ *before* monitor directives attempt to use it.
+
+2006-10-12 15:19 tanders
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ build fix for systems with no RTHOST_SYMBOL or no RTNET_SYMBOL (like AIX)
+
+2006-10-12 09:12 tanders
+
+ * agent/auto_nlist.c:
+
+ fix typo
+
+2006-10-12 09:03 tanders
+
+ * include/net-snmp/system/aix.h:
+
+ CHANGES: AIX: use correct ARPTAB_SYMBOL and ARPTAB_SIZE_SYMBOL
+
+2006-10-12 08:13 tanders
+
+ * agent/auto_nlist.c, include/net-snmp/system/aix.h:
+
+ CHANGES: AIX: BUG 1205300: nlist err: neither nproc nor _nproc found (same for rt_table, rthashsize, rthost, rtnet)
+
+2006-10-12 04:54 dts12
+
+ * configure.in, configure, agent/Makefile.in
+:
+
+ Suppress the substitution of the list of module header files.
+ This is purely a temporary stop-gap fix, to handle sed commands which
+ choke on over-long substitutions. A better approach is needed.
+
+2006-10-12 04:40 dts12
+
+ * NEWS:
+
+ Document Hardware Abstraction Layer (including behaviour changes).
+
+2006-10-12 03:03 dts12
+
+ * agent/mibgroup/disman/event/mteTriggerTable.c:
+
+ Fix handling of assignments to mteTriggerValueID
+ [Bug #1574713, Patch #1574743, from Ross Tyler]
+
+2006-10-12 02:54 dts12
+
+ * Makefile.in, acconfig.h,
+ agent/mibgroup/host/hr_storage.c,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/system/darwin9.h:
+
+ Tweaks for Darwin 9 support - [Patch #1575433, from Chris Jalbert]
+
+2006-10-12 02:44 dts12
+
+ * include/net-snmp/system/darwin8.h:
+
+ Updated system header file for Darwin8 - [Patch 1575430, by Chris Jalbert]
+
+2006-10-12 02:17 dts12
+
+ * agent/mibgroup/hardware/: cpu.h, memory.h:
+
+ Include the appropriate HAL modules for Darwin (Darwin9) systems.
+ Supplied by Chris Jalbert.
+
+2006-10-11 09:21 rstory
+
+ * NEWS:
+
+ - add note that --enable-mfd-rewrites is needed for experimental if-mib ports
+ - remove line on patch to previously unrelease code
+
+2006-10-11 09:14 rstory
+
+ * include/net-snmp/system/: freebsd.h, openbsd.h:
+
+ include if-mib rewrites if mfd rewrites is defined
+
+2006-10-11 08:02 rstory
+
+ * include/net-snmp/system/solaris.h:
+
+ include if-mib rewrites if mfd rewrites is defined
+
+2006-10-10 17:12 tanders
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ PrivoxyWindowOpen? Must have been missing a major feature addition:-)
+
+2006-10-10 15:32 tanders
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ fix typos
+
+2006-10-10 14:13 tanders
+
+ * agent/mibgroup/: kernel_sunos5.c, kernel_sunos5.h,
+ tcp-mib/data_access/tcpConn.h,
+ tcp-mib/data_access/tcpConn_solaris2.c,
+ udp-mib/data_access/udp_endpoint.h,
+ udp-mib/data_access/udp_endpoint_solaris2.c:
+
+ NEWS: Solaris: PATCH: 1569537,1569539: new UDP-MIB and TCP-MIB implementation (enable through --with-mib-modules=udp-mib,tcp-mib)
+
+2006-10-10 13:14 rstory
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ NEWS: snmpd: PATCH: 1570982 Solaris IF-MIB: Support for IPv6-only interfaces
+
+2006-10-10 07:32 tanders
+
+ * configure.in, configure,
+ include/net-snmp/net-snmp-config.h.in:
+
+ check for pread64 (AIX) and nlist64 (IRIX)
+
+2006-10-10 06:16 tanders
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ add missing STRUCT_NLIST64_HAS_N_VALUE variable so that the test result is actually saved
+
+2006-10-10 03:52 tanders
+
+ * net-snmp-config.in:
+
+ fix shell syntax errors reported by Richard Chonak
+
+2006-10-09 06:10 tanders
+
+ * testing/tests/T150solarishostcpu:
+
+ more robust Solaris CPU testing: the index for the first CPU may vary across systems (CPU 0 = index 768, CPU 1 = index 769 etc.)
+
+2006-10-09 04:21 tanders
+
+ * dist/nsb-functions:
+
+ don't fail on DEBUGMSG*
+
+2006-10-08 13:25 dts12
+
+ * agent/mibgroup/hardware/: cpu.h, cpu/cpu_pstat.c:
+
+ Activate pstat-based CPU handling on HP-UX systems.
+
+2006-10-08 13:24 dts12
+
+ * include/net-snmp/system/hpux.h:
+
+ Don't redefine an existing token without undefining it first.
+
+2006-10-08 13:23 dts12
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ Ensure that historical data is available before we attempt to use it.
+
+2006-10-07 14:54 dts12
+
+ * snmplib/check_varbind.c:
+
+ Fix size check for specialised integer-based assignments.
+ (Bug #1572394 - patch provided by Phil Wilson)
+
+2006-10-07 06:49 dts12
+
+ * testing/tests/: T150solarishostcpu, T153solarisswap:
+
+ Adjust to changes in certain HostRes indexing.
+
+2006-10-05 15:44 dts12
+
+ * configure.in, configure:
+
+ What's a stray underscore here or there between friends?
+
+2006-10-05 08:53 dts12
+
+ * agent/mibgroup/hardware/cpu/: cpu.c, cpu_kstat.c:
+
+ Debugging code.
+
+2006-10-05 08:52 dts12
+
+ * agent/mibgroup/hardware/cpu/cpu_kstat.c:
+
+ Be consistent in the use of CPU indexing.
+
+2006-10-04 15:07 dts12
+
+ * agent/mibgroup/hardware/: memory.h, memory/memory_null.c
+:
+
+ Allow systems without an explicit HAL memory module to compile
+ (even if the agent can't report the relevant statistics).
+
+2006-10-04 14:51 dts12
+
+ * agent/mibgroup/hardware/: cpu.h, cpu/cpu_kstat.c:
+
+ Include kstat-based CPU processing on Solaris systems, and amend this code
+ to actually compile/work. (Much of this supplied by Bruce Shaw)
+
+2006-10-03 11:30 dts12
+
+ * configure, configure.in:
+
+ Test for the actual behaviour of -Ux -Dx=x, and only use this if it works as expected.
+
+2006-10-01 08:43 alex_b
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ Win32: Add NSIS installer option for installing winExtDLL version of
+ snmpd.exe
+
+2006-10-01 06:42 alex_b
+
+ * NEWS, README.win32, agent/mibgroup/winExtDLL.c
+:
+
+ Win32: Add trap support to winExtDLL and clean up debugging output.
+
+2006-09-29 19:00 alex_b
+
+ * README.win32, agent/mibgroup/winExtDLL.c:
+
+ Win32: Remove winExtDLL snmpd.conf option, add SNMP v2 support.
+
+2006-09-29 13:28 marz
+
+ * python/netsnmp/: client_intf.c, tests/test.py:
+
+ test fix
+
+2006-09-29 13:18 hardaker
+
+ * python/netsnmp/: client_intf.c, client_intf.c:
+
+ remove debugging statements
+
+2006-09-29 13:18 hardaker
+
+ * python/netsnmp/tests/test.py:
+
+ testing updates
+
+2006-09-29 13:03 hardaker
+
+ * python/: README, netsnmp/client.py,
+ netsnmp/client_intf.c, netsnmp/tests/test.py:
+
+ support for a generic walk wrapper
+
+2006-09-29 12:31 marz
+
+ * python/netsnmp/: client_intf.c, tests/test.py:
+
+ cleanup
+
+2006-09-28 18:50 marz
+
+ * python/: README, netsnmp/client_intf.c:
+
+ added 'set' method, fixes/additions to readme
+
+2006-09-27 23:02 tanders
+
+ * agent/mibgroup/hardware/memory/memory_darwin.c:
+
+ CHANGES: MacOSX: PATCH: 1566777: from jalbert: build fixes for memory_darwin.c
+
+2006-09-27 15:21 tanders
+
+ * configure, configure.in:
+
+ minor rewording
+
+2006-09-27 14:32 hardaker
+
+ * FAQ, README, configure, configure.in
+, sedscript.in, snmplib/snmp_version.c,
+ dist/net-snmp.spec:
+
+ - version tag ( 5.4.pre3 )
+
+-------------------------------------------------------------------------------
+
+Changes: V5.4.pre2 -> V5.4.pre3
+
+2006-09-27 14:28 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_agent_registry.3,
+ netsnmp_agent_trap.3, netsnmp_asn1_packet_parse.3,
+ netsnmp_baby_steps.3, netsnmp_bulk_to_next.3,
+ netsnmp_cache_handler.3, netsnmp_callback.3,
+ netsnmp_container.3, netsnmp_data_list.3,
+ netsnmp_debug.3, netsnmp_default_store.3,
+ netsnmp_handler.3, netsnmp_instance.3,
+ netsnmp_iterator_info_s.3, netsnmp_leaf.3,
+ netsnmp_library.3, netsnmp_mib_maintenance.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_stash_to_next.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_generic.3,
+ netsnmp_table_indexes.3, netsnmp_table_iterator.3,
+ netsnmp_table_iterator.h.3, netsnmp_table_maintenance.3
+, netsnmp_table_rows.3, netsnmp_tdata.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ documentation update
+
+2006-09-27 14:28 hardaker
+
+ * doxygen.conf:
+
+ - version tag ( 5.4.pre3 )
+
+2006-09-27 14:16 hardaker
+
+ * configure, configure.in:
+
+ fix:cflags ->:ccflags
+
+2006-09-27 13:36 tanders
+
+ * agent/mibgroup/if-mib/data_access/interface_solaris2.c:
+
+ CHANGES: snmpd: PATCH: 1566523: from apersson: Memory leak in if-mib (Solaris)
+ - take advantage of if_nametoindex() when possible
+ - grab the IPv6 interface Identifier if available
+
+2006-09-27 10:54 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_sysctl.c:
+
+ - update for new reasm_max v4/v6 split
+ - add 'l' to printf spec for size_t param
+
+2006-09-27 10:48 hardaker
+
+ * configure, configure.in:
+
+ check for largefile support on solaris and disable embedded perl when on
+
+2006-09-27 09:51 tanders
+
+ * FAQ:
+
+ update platform list
+
+2006-09-27 06:56 tanders
+
+ * configure, configure.in:
+
+ fix --without-python-modules
+
+2006-09-26 16:34 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface.h:
+
+ add openbsd4 to sysctl interface list
+
+2006-09-26 15:44 tanders
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ add support for openbsd4
+
+2006-09-26 15:39 tanders
+
+ * agent/mibgroup/hardware/memory.h:
+
+ add support for openbsd4
+
+2006-09-26 14:40 tanders
+
+ * configure, configure.in:
+
+ Consistently say "Perl", not "perl".
+
+2006-09-26 14:21 hardaker
+
+ * Makefile.in:
+
+ don't need to double clean python
+
+2006-09-26 14:19 tanders
+
+ * configure, configure.in:
+
+ fix --without-perl-modules
+
+2006-09-26 12:43 dts12
+
+ * agent/mibgroup/hardware/memory/memory_darwin.c:
+
+ Include some (probably not all) necessary header files.
+
+2006-09-26 12:23 hardaker
+
+ * Makefile.in, configure, configure.in:
+
+ fixed python make clean when no python support was requested
+
+2006-09-26 09:39 tanders
+
+ * dist/nsb-functions:
+
+ set up symlinks before running configure to survive the new perl tests
+
+2006-09-26 09:34 hardaker
+
+ * configure, configure.in:
+
+ change the perl tests to allow for symlinks
+
+2006-09-26 09:09 hardaker
+
+ * configure.in, configure:
+
+ fixed rpm checks... oppps
+
+2006-09-26 09:09 tanders
+
+ * README.aix:
+
+ documented AIX sed issues
+
+2006-09-26 07:49 marz
+
+ * python/: README, netsnmp/client.py,
+ netsnmp/client_intf.c, netsnmp/tests/test.py:
+
+ cleanup, weird leaf obj handling, added snmpgetbulk
+
+2006-09-25 21:58 hardaker
+
+ * FAQ, README, configure, configure.in
+, sedscript.in, dist/net-snmp.spec,
+ snmplib/snmp_version.c:
+
+ - version tag ( 5.4.pre2 )
+
+-------------------------------------------------------------------------------
+
+Changes: V5.4.pre1 -> V5.4.pre2
+
+2006-09-25 21:49 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_agent_registry.3,
+ netsnmp_agent_trap.3, netsnmp_asn1_packet_parse.3,
+ netsnmp_baby_steps.3, netsnmp_bulk_to_next.3,
+ netsnmp_cache_handler.3, netsnmp_callback.3,
+ netsnmp_container.3, netsnmp_data_list.3,
+ netsnmp_debug.3, netsnmp_default_store.3,
+ netsnmp_handler.3, netsnmp_instance.3,
+ netsnmp_iterator_info_s.3, netsnmp_leaf.3,
+ netsnmp_library.3, netsnmp_mib_maintenance.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_stash_to_next.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_generic.3,
+ netsnmp_table_indexes.3, netsnmp_table_iterator.3,
+ netsnmp_table_iterator.h.3, netsnmp_table_maintenance.3
+, netsnmp_table_rows.3, netsnmp_tdata.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ documentation update
+
+2006-09-25 21:49 hardaker
+
+ * doxygen.conf:
+
+ - version tag ( 5.4.pre2 )
+
+2006-09-25 21:37 hardaker
+
+ * dist/makerelease:
+
+ fixed syntax error
+
+2006-09-25 17:37 hardaker
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ ran autoheader
+
+2006-09-25 17:26 hardaker
+
+ * Makefile.in, configure, configure.in:
+
+ Update for a --with-python-modules flag; will run into some of the same build-in-place issues that perl has but it's a start
+
+2006-09-25 17:04 hardaker
+
+ * python/README:
+
+ minor wording changes
+
+2006-09-25 16:57 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ CHANGES: snmpd: BUG: 1559358: from tramker: check scanf results for diskio scanning
+
+2006-09-25 16:54 hardaker
+
+ * configure, configure.in:
+
+ CHANGES: snmpd: BUGS: 1564233: Have configure test for rpm headers not just the libraries
+
+2006-09-25 14:55 hardaker
+
+ * configure, configure.in:
+
+ don't warn about excluding required modules when the current file is default_mibs
+
+2006-09-25 14:33 tanders
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ CHANGES: snmplib: PATCH: 1565293: from adp: UDPIPv6 transport reports wrong port number
+
+2006-09-25 10:52 hardaker
+
+ * configure, configure.in:
+
+ tests to see if we're in the main source tree so we can install the perl modules or not
+
+2006-09-25 09:25 tanders
+
+ * perl/SNMP/t/: async.t, bulkwalk.t, conf.t,
+ get.t, getnext.t, mib.t, mibload.t,
+ notify.t, session.t, set.t:
+
+ Make perl test suite work even if net-snmp isn't installed yet.
+
+2006-09-25 08:48 tanders
+
+ * perl/agent/test.pl:
+
+ NetSNMP::agent tests neither need config nor MIBs
+
+2006-09-25 08:21 rstory
+
+ * dist/cvsup:
+
+ exclude CVS files from nighly tarballs
+
+2006-09-25 07:30 marz
+
+ * python/netsnmp/: client.py, client_intf.c,
+ tests/test.py:
+
+ adding getbulk, removing some debug
+
+2006-09-25 05:35 tanders
+
+ * NEWS:
+
+ Don't mix tabs and spaces for indentation. Convert all (rarely used) tabs to spaces.
+
+2006-09-25 01:42 dts12
+
+ * apps/snmptrapd_handlers.c, apps/snmptrapd_handlers.h
+, man/snmptrapd.conf.5.def:
+
+ Distinguish between "OID.*" and "OID*" wildcard syntax (exclusive and
+ inclusive subtree matches respectively).
+
+2006-09-25 01:38 dts12
+
+ * apps/snmptrapd_handlers.c, man/snmptrapd.conf.5.def
+:
+
+ Implement (and document) "OID.*" syntax for subtree matching.
+
+2006-09-24 15:28 alex_b
+
+ * agent/mibgroup/winExtDLL.c:
+
+ Win32: winExtDLL - Fix bug with set requests, start to add SNMPv2 support.
+
+2006-09-23 00:13 tanders
+
+ * perl/OID/test.pl:
+
+ OID.pm tests shouldn't depend on *installed* MIBs
+
+2006-09-22 14:18 tanders
+
+ * python/README:
+
+ some nit-picking
+
+2006-09-22 13:56 tanders
+
+ * perl/SNMP/t/startagent.pl:
+
+ SNMP.pm perl tests shouldn't depend on *installed* MIBs
+
+2006-09-22 12:47 marz
+
+ * python/README:
+
+ README edits
+
+2006-09-22 12:03 marz
+
+ * python/README:
+
+ mods to README with some usage info
+
+2006-09-22 10:25 hardaker
+
+ * python/README:
+
+ proper naming
+
+2006-09-22 10:25 hardaker
+
+ * python/: LICENSE, README:
+
+ added a readme and license file
+
+2006-09-22 10:20 hardaker
+
+ * COPYING:
+
+ date update
+
+2006-09-22 07:58 marz
+
+ * python/: setup.py, netsnmp/__init__.py,
+ netsnmp/client.py, netsnmp/client_intf.c,
+ netsnmp/tests/__init__.py, netsnmp/tests/snmpd.conf,
+ netsnmp/tests/test.py:
+
+ Adding initial alpha support for net-snmp python binding
+
+2006-09-22 04:47 tanders
+
+ * dist/nsb-functions:
+
+ Don't fail on "LOG_ERR".
+
+2006-09-22 03:29 tanders
+
+ * perl/SNMP/t/: notify.t, startagent.pl:
+
+ fix SNMP.pm notify test (start snmptrapd with valid options)
+
+2006-09-21 09:15 alex_b
+
+ * win32/: libsnmp/Makefile.in, libsnmp/libsnmp.dsp,
+ libsnmp_dll/Makefile.in, libsnmp_dll/libsnmp.def,
+ libsnmp_dll/libsnmp.def.in, libsnmp_dll/libsnmp_dll.dsp
+:
+
+ Windows build fixes.
+
+2006-09-21 07:43 tanders
+
+ * perl/TrapReceiver/perl_snmptrapd.h:
+
+ Sync struct netsnmp_trapd_handler_s with the library code again (add "flags").
+
+2006-09-21 06:09 tanders
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ fix potential segfault introduced by patch 1561277
+
+2006-09-21 05:21 tanders
+
+ * agent/mibgroup/smux/smux.c:
+
+ #include <net-snmp/library/tools.h> for SNMP_STRORNULL
+
+2006-09-21 03:49 tanders
+
+ * configure, configure.in:
+
+ *really* keep preX/rcX in version strings
+
+2006-09-20 19:25 hardaker
+
+ * agent/mibgroup/agentx/agentx_config.c:
+
+ change agentx socket define to NETSNMP_ prefixed
+
+2006-09-20 13:26 dts12
+
+ * apps/snmptrapd_handlers.c,
+ include/net-snmp/library/snmp_api.h, snmplib/snmp_api.c
+:
+
+ Check incoming trap OIDs as an extension of the traphandle OID
+ (but not the other way round!)
+
+2006-09-20 09:48 hardaker
+
+ * configure, configure.in:
+
+ don't change pre tags to 0. to avoid badly generated version numbers
+
+2006-09-20 07:45 hardaker
+
+ * dist/makerelease:
+
+ automatted testing of the produced tar-ball
+
+2006-09-19 22:23 hardaker
+
+ * dist/makerelease:
+
+ fix path to extractnews
+
+2006-09-19 22:18 hardaker
+
+ * FAQ, README, configure.in, sedscript.in
+, snmplib/snmp_version.c, configure,
+ dist/net-snmp.spec:
+
+ - version tag ( 5.4.pre1 )
+
+-------------------------------------------------------------------------------
+
+Changes: V5.3 -> V5.4.pre1
+
+2006-09-19 17:29 hardaker
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3
+, netsnmp_agent_registry.3, netsnmp_agent_trap.3
+, netsnmp_asn1_packet_parse.3, netsnmp_baby_steps.3
+, netsnmp_bulk_to_next.3, netsnmp_cache_handler.3
+, netsnmp_callback.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_default_store.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mib_maintenance.3, netsnmp_mib_utilities.3,
+ netsnmp_mode_end_call.3, netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_stash_to_next.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_generic.3,
+ netsnmp_table_indexes.3, netsnmp_table_iterator.3,
+ netsnmp_table_iterator.h.3, netsnmp_table_maintenance.3
+, netsnmp_table_rows.3, netsnmp_tdata.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ documentation update
+
+2006-09-19 17:29 hardaker
+
+ * doxygen.conf:
+
+ - version tag ( 5.4.pre1 )
+
+2006-09-19 17:12 hardaker
+
+ * Makefile.top:
+
+ cave to putting in some buffer space for libcurrent; 5.3 was 10 and increments of 5 make it easy, so 5 it is.
+
+2006-09-19 17:08 hardaker
+
+ * dist/: extractnews, makerelease:
+
+ yet more updates for making releases
+
+2006-09-19 16:42 hardaker
+
+ * snmplib/snmpUDPDomain.c:
+
+ more fixes for udp domains: remove requirement for inet_aton which on some systems exists in libresolv
+
+2006-09-19 16:35 hardaker
+
+ * snmplib/snmpUDPDomain.c:
+
+ udp domain fixes
+
+2006-09-19 16:04 tanders
+
+ * perl/SNMP/SNMP.xs:
+
+ build fix for IRIX with SGI's cc
+
+2006-09-19 15:58 hardaker
+
+ * apps/snmptrapd_handlers.c, apps/snmptrapd_handlers.h
+, man/snmptrapd.conf.5.def:
+
+ NEWS: snmptrapd: the traphandle directive now supports a -t switch to indicate matching any OID in the tree below the specified OID
+
+2006-09-19 15:18 hardaker
+
+ * perl/agent/Support/Support.pm:
+
+ cleaned up perl vars for support on older perl versions
+
+2006-09-19 14:57 hardaker
+
+ * configure, configure.in:
+
+ fix error logic in perl tests
+
+2006-09-19 14:44 hardaker
+
+ * configure, configure.in:
+
+ smart detection of available perl support
+
+2006-09-19 11:25 hardaker
+
+ * configure, configure.in:
+
+ fix perl cc test to allow for dash options
+
+2006-09-19 10:58 dts12
+
+ * snmplib/snmp_api.c:
+
+ Report the appropriate prefix match when one OID is a prefix of the other.
+ The previous code treated this as a non-match (returning 0).
+ I'm not at all convinced by the "+1" handling either.
+
+2006-09-19 10:25 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ another attempt to fix the items calculation without popping a mark
+
+2006-09-19 09:51 hardaker
+
+ * agent/helpers/instance.c,
+ include/net-snmp/agent/instance.h:
+
+ NEWS: snmpd: PATCH: 1550725: from 'Wayne Glantz': A new uint instance helper to match the existing int, long and ulong helpers
+
+2006-09-19 09:34 tanders
+
+ * agent/mibgroup/smux/smux.c:
+
+ NEWS: snmpd: BUG: 1527930: fix smux authentication
+
+2006-09-19 09:17 hardaker
+
+ * dist/: RELEASE-INSTRUCTIONS, extractnews:
+
+ remove from user strings in NEWS and CHANGES lines
+
+2006-09-19 08:08 hardaker
+
+ * apps/snmptrapd_handlers.c:
+
+ remove robert's self-called hack for making snmptrapd handle partial OIDs. As agreed to on coders this can't be done as is because it completely changes existing usage. A new mechanism is needed to support this behaviour so it doesn't break backwards compatibity with potential security ramifications
+
+2006-09-19 07:45 hardaker
+
+ * agent/agent_trap.c, agent/snmp_agent.c,
+ agent/mibgroup/agentx/agentx_config.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/subagent.c, apps/snmptrapd.c,
+ include/net-snmp/session_api.h,
+ include/net-snmp/library/snmpSTDDomain.h,
+ include/net-snmp/library/snmp_service.h,
+ include/net-snmp/library/snmp_transport.h,
+ man/snmp.conf.5.def, snmplib/Makefile.in,
+ snmplib/snmpAAL5PVCDomain.c, snmplib/snmpIPXDomain.c,
+ snmplib/snmpSTDDomain.c, snmplib/snmpTCPDomain.c,
+ snmplib/snmpTCPIPv6Domain.c, snmplib/snmpUDPDomain.c
+, snmplib/snmpUDPIPv6Domain.c,
+ snmplib/snmpUnixDomain.c, snmplib/snmp_api.c,
+ snmplib/snmp_service.c, snmplib/snmp_transport.c:
+
+ NEWS: snmplib: PATCH: 1282566: from magfr to rework transport creation to allow for alternative interpretations of the address and a more flexible transport registration system
+
+2006-09-19 06:17 tanders
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ NEWS: snmpd: PATCH: 1561277: use net.ipv6.neigh.lo.base_reachable_time_ms instead of deprecated base_reachable_time
+
+2006-09-19 04:06 dts12
+
+ * agent/mibgroup/disman/event/: mteEvent.c, mteObjects.c
+:
+
+ Don't re-initialise built-in Event-MIB events, etc.
+
+2006-09-19 03:24 dts12
+
+ * agent/agent_handler.c, agent/helpers/instance.c,
+ agent/helpers/table_row.c,
+ include/net-snmp/agent/agent_handler.h:
+
+ First steps in supporting single-instance registrations.
+
+2006-09-18 21:31 hardaker
+
+ * agent/mibgroup/if-mib/: data_access/interface_ioctl.c,
+ ifTable/ifTable.h, ifXTable/ifXTable.c:
+
+ CHANGES: snmpd: BUGS: 1474468: ifConnectorPresent always returns 0
+
+2006-09-18 20:40 hardaker
+
+ * agent/mibgroup/host/hr_storage.c,
+ include/net-snmp/agent/ds_agent.h, man/snmpd.conf.5.def
+:
+
+ modified the host resources skip NFS patch to fix a bug and to use the default storage config instead
+
+2006-09-18 20:26 hardaker
+
+ * agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c,
+ agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.c
+, include/net-snmp/data_access/udp_endpoint.h:
+
+ CHANGES: snmpd: PATCH: 1524755: from apersson to better support the UDPTable for unknown address types
+
+2006-09-18 20:09 hardaker
+
+ * agent/mibgroup/host/hr_storage.c, man/snmpd.conf.5.def
+:
+
+ NEWS: snmpd: PATCH: 1534877: from buckh to add support for skipping NFS entries in the host resources hrStorageTable. See the skipNFSInHostResources token in the snmpd.conf file for details.
+
+2006-09-18 20:00 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ document acceptile NEWS tokens
+
+2006-09-18 17:30 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ document the new CVS NEWS tag system
+
+2006-09-18 16:05 tanders
+
+ * apps/snmptrapd_handlers.c:
+
+ NEWS: snmptrapd: - PATCH: 1536773: support partial oid matching
+
+ We can still add/require a special token/syntax for this after pre1
+ if this was the consensus.
+
+2006-09-18 15:24 tanders
+
+ * agent/mibgroup/: kernel_sunos5.c, kernel_sunos5.h,
+ if-mib/data_access/interface_solaris2.c:
+
+ fix recent build issues on Solaris 7 (patch provided by Anders Persson)
+
+2006-09-18 07:19 tanders
+
+ * agent/mibgroup/hardware/memory/memory_irix.c:
+
+ add debugging, fix some figures
+
+2006-09-18 02:08 tanders
+
+ * perl/agent/MANIFEST:
+
+ add NetSNMP::agent::Support files
+
+2006-09-18 01:17 tanders
+
+ * agent/mibgroup/kernel_sunos5.h:
+
+ Move up and rename the #ifndef to prevent duplicate include. Fixes compile errors wrt. Counter64 on Solaris 7 and earlier.
+
+2006-09-16 16:33 alex_b
+
+ * README.win32:
+
+ README update for winExtDLL.
+
+2006-09-16 15:22 alex_b
+
+ * agent/mibgroup/winExtDLL.c:
+
+ Windows winExtDLL: Use registry entries for Windows SNMP extension to get
+ the list of DLLs to load.
+
+2006-09-16 13:49 alex_b
+
+ * win32/net-snmp/net-snmp-config.h.in:
+
+ NETSNMP_ define fixes.
+
+2006-09-16 12:56 tanders
+
+ * configure, include/net-snmp/net-snmp-config.h.in,
+ configure.in:
+
+ fix check for <sys/systemcfg.h> (AIX)
+
+2006-09-16 11:01 tanders
+
+ * win32/: config.h.borland, net-snmp/net-snmp-config.h
+:
+
+ fix some NETSNMP_NETSNMP_* "double rename" errors for Windows
+
+2006-09-16 10:56 tanders
+
+ * snmplib/snmpksm.c:
+
+ revert to (local) OLD_HEIMDAL define
+
+2006-09-16 10:23 tanders
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ rename last occurence of DONT_USE_NLIST
+
+2006-09-16 10:10 tanders
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ run autoheader
+
+2006-09-16 08:44 alex_b
+
+ * win32/libsnmp_dll/: libsnmp.def, libsnmp.def.in:
+
+ Windows MSVC Perl compile fixes.
+
+2006-09-16 08:19 alex_b
+
+ * perl/agent/Support/Makefile.PL:
+
+ Fix for building under Windows (MSVC).
+
+2006-09-15 09:12 tanders
+
+ * agent/mibgroup/hardware/memory.h:
+
+ activate memory HAL code for IRIX
+
+2006-09-15 09:09 tanders
+
+ * agent/mibgroup/hardware/memory/memory_irix.c:
+
+ initial IRIX version of memory HAL interface
+
+2006-09-15 07:48 tanders
+
+ * configure, configure.in:
+
+ check for <sys/sysget.h> (IRIX)
+
+2006-09-15 07:14 tanders
+
+ * include/net-snmp/library/system.h, snmplib/system.c
+:
+
+ introduce netsnmp_os_kernel_width() to be able to detect 64bit kernels at runtime
+
+2006-09-15 06:10 tanders
+
+ * configure, configure.in:
+
+ check for sys/systemcfg.h (AIX) and sys/systeminfo.h (IRIX)
+
+2006-09-15 05:46 tanders
+
+ * README.win32, acconfig.h, configure,
+ configure.in, include/net-snmp/net-snmp-config.h.in
+, perl/SNMP/Makefile.PL, snmplib/keytools.c,
+ snmplib/scapi.c, testing/eval_tools.sh,
+ testing/tests/Sv3config, testing/tests/Sv3usmconfigbase
+, testing/tests/T023snmpv3getMD5AES,
+ testing/tests/T023snmpv3getMD5DES,
+ testing/tests/T024snmpv3getSHA1,
+ testing/tests/T025snmpv3getSHADES,
+ testing/tests/T026snmpv3getSHAAES,
+ testing/tests/T030snmpv3usercreation,
+ testing/tests/T035snmpv3trapdusermgmt,
+ testing/tests/T049snmpv3informpriv,
+ testing/tests/T050snmpv3trap, win32/Configure:
+
+ more renames and fixes
+
+2006-09-15 04:15 tanders
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ fix syntax error that broke the Solaris build
+
+2006-09-15 03:44 tanders
+
+ * perl/SNMP/SNMP.xs:
+
+ fix wrong renames
+
+2006-09-15 03:30 tanders
+
+ * snmplib/snmpUDPDomain.c:
+
+ restrict IP_PKTINFO code to Linux
+
+2006-09-15 02:16 tanders
+
+ * agent/mibgroup/mibII/at.c:
+
+ fix syntax errors which broke the build on Solaris
+
+2006-09-14 21:03 alex_b
+
+ * win32/: config.h.borland, net-snmp/net-snmp-config.h
+, net-snmp/net-snmp-config.h.in:
+
+ Change Net-SNMP defines to use NETSNMP_ prefix.
+
+2006-09-14 17:48 tanders
+
+ * agent/agent_read_config.c, agent/agent_registry.c,
+ agent/agent_trap.c, agent/auto_nlist.c,
+ agent/kernel.c, agent/kernel.h, agent/snmp_agent.c
+, agent/snmp_vars.c, agent/snmpd.c,
+ agent/helpers/table_dataset.c, agent/mibgroup/util_funcs.c
+, agent/mibgroup/agent/extend.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/agentx/protocol.h,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/disman/event/mteTrigger.c,
+ agent/mibgroup/host/hr_device.c,
+ agent/mibgroup/host/hr_print.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c,
+ agent/mibgroup/if-mib/data_access/interface_linux.c,
+ agent/mibgroup/ip-forward-mib/data_access/route_linux.c,
+ agent/mibgroup/ip-mib/data_access/arp_linux.c,
+ agent/mibgroup/ip-mib/data_access/ipaddress_linux.c,
+ agent/mibgroup/ip-mib/data_access/systemstats_linux.c,
+ agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_subagent.c
+, agent/mibgroup/mibII/at.c,
+ agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/ip.c, agent/mibgroup/mibII/ipAddr.c
+, agent/mibgroup/mibII/mibII_common.h,
+ agent/mibgroup/mibII/mta_sendmail.c,
+ agent/mibgroup/mibII/route_headers.h,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/tcp.c,
+ agent/mibgroup/mibII/tcpTable.c,
+ agent/mibgroup/mibII/udp.c,
+ agent/mibgroup/mibII/udpTable.c,
+ agent/mibgroup/mibII/vacm_conf.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/smux/smux.c,
+ agent/mibgroup/snmpv3/snmpEngine.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/target/target.c,
+ agent/mibgroup/tcp-mib/data_access/tcpConn_linux.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/logmatch.c,
+ agent/mibgroup/ucd-snmp/memory_aix4.c,
+ agent/mibgroup/ucd-snmp/memory_darwin7.c,
+ agent/mibgroup/ucd-snmp/memory_dynix.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/memory_hpux.c,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/proxy.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/ucd-snmp/vmstat_aix4.c,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c,
+ agent/mibgroup/ucd-snmp/vmstat_darwin7.c,
+ agent/mibgroup/ucd-snmp/vmstat_dynix.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat_hpux.c,
+ agent/mibgroup/ucd-snmp/vmstat_linux.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c,
+ agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c,
+ agent/mibgroup/utilities/execute.c,
+ agent/mibgroup/utilities/iquery.c, apps/encode_keychange.c
+, apps/snmpset.c, apps/snmptable.c,
+ apps/snmptranslate.c, apps/snmptrap.c,
+ apps/snmptrapd.c, apps/snmptrapd_auth.c,
+ apps/snmptrapd_log.c, apps/snmpusm.c,
+ apps/snmpnetstat/inet6.c, apps/snmpnetstat/main.c,
+ apps/snmpnetstat/route.c, include/net-snmp/mib_api.h
+, include/net-snmp/session_api.h,
+ include/net-snmp/snmpv3_api.h,
+ include/net-snmp/agent/auto_nlist.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/data_access/arp.h,
+ include/net-snmp/data_access/ipaddress.h,
+ include/net-snmp/data_access/route.h,
+ include/net-snmp/library/asn1.h,
+ include/net-snmp/library/default_store.h,
+ include/net-snmp/library/mib.h,
+ include/net-snmp/library/mt_support.h,
+ include/net-snmp/library/scapi.h,
+ include/net-snmp/library/snmp.h,
+ include/net-snmp/library/snmpAAL5PVCDomain.h,
+ include/net-snmp/library/snmpCallbackDomain.h,
+ include/net-snmp/library/snmpSTDDomain.h,
+ include/net-snmp/library/snmpTCPDomain.h,
+ include/net-snmp/library/snmpUnixDomain.h,
+ include/net-snmp/library/snmp_api.h,
+ include/net-snmp/library/snmp_assert.h,
+ include/net-snmp/library/snmp_debug.h,
+ include/net-snmp/library/snmp_impl.h,
+ include/net-snmp/library/snmpusm.h,
+ include/net-snmp/library/transform_oids.h,
+ perl/SNMP/SNMP.xs, snmplib/asn1.c,
+ snmplib/inet_ntop.c, snmplib/inet_pton.c,
+ snmplib/keytools.c, snmplib/lcd_time.c, snmplib/md5.c
+, snmplib/mib.c, snmplib/mt_support.c,
+ snmplib/parse.c, snmplib/pkcs.c,
+ snmplib/read_config.c, snmplib/scapi.c,
+ snmplib/snmp.c, snmplib/snmpAAL5PVCDomain.c,
+ snmplib/snmpCallbackDomain.c, snmplib/snmpTCPIPv6Domain.c
+, snmplib/snmpUDPDomain.c,
+ snmplib/snmpUDPIPv6Domain.c, snmplib/snmpUnixDomain.c
+, snmplib/snmp_api.c, snmplib/snmp_auth.c,
+ snmplib/snmp_client.c, snmplib/snmp_debug.c,
+ snmplib/snmp_parse_args.c, snmplib/snmp_transport.c
+, snmplib/snmpksm.c, snmplib/snmpusm.c,
+ snmplib/snmpv3.c, snmplib/system.c, snmplib/tools.c
+, testing/etimetest.c, testing/misctest.c,
+ win32/mib_module_inits.h:
+
+ Always use the new net-snmp-config.h definitions from within the NETSNMP_
+ namespace.
+
+2006-09-14 16:55 hardaker
+
+ * dist/extractnews:
+
+ first pass at extracting NEWS/CHANGES files from cvs logs
+
+2006-09-14 16:32 rstory
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ detect solaris ibd/ip.tun/ath interface types properly
+
+2006-09-14 15:28 tanders
+
+ * NEWS:
+
+ mention Solaris if-mib rewrite
+
+2006-09-14 15:14 hardaker
+
+ * README:
+
+ [no log message]
+
+2006-09-14 15:12 hardaker
+
+ * snmplib/snmpUDPDomain.c:
+
+ NEWS: PATCHES: 1509943: responses will get sent from the original dest IP address when possible.
+
+2006-09-14 14:09 hardaker
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ CHANGES: PATCHES: 1554827: from rtyle: fix handling of failed proxy SET requests
+
+2006-09-14 13:57 hardaker
+
+ * agent/: snmp_agent.c, mibgroup/disman/event/mteTrigger.c
+:
+
+ CHANGES: snmpd: PATCHES: 1557514 from rtyle: Do not attempt to collect data during SET processing.
+
+2006-09-14 13:42 hardaker
+
+ * configure, configure.in:
+
+ pass 2 at getting auto-build support for .so files. I'm now convienced it's close to impossible to do correctly with dependency issues and no support for recursive functions in sh
+
+2006-09-14 12:14 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_solaris2.c:
+
+ solaris support for if-mib 64bit counters
+
+2006-09-14 10:36 rstory
+
+ * agent/mibgroup/mibII/: at.c, ipAddr.c, var_route.c
+:
+
+ use new data access routine for solaris, if rewrite in effect
+
+2006-09-14 10:34 rstory
+
+ * agent/mibgroup/mibII.h:
+
+ use NETSNMP_INCLUDE_IFTABLE_REWRITES to decide about if-mib support
+
+2006-09-14 10:27 rstory
+
+ * agent/mibgroup/: kernel_sunos5.c, kernel_sunos5.h,
+ if-mib/data_access/interface.h:
+
+ solaris support for if-mib 64bit counters
+
+2006-09-14 10:23 rstory
+
+ * configure, include/net-snmp/net-snmp-config.h.in:
+
+ run autoconf && autoheader
+
+2006-09-14 10:21 rstory
+
+ * configure.in:
+
+ type check for solaris Counter64
+
+2006-09-14 10:15 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface.c,
+ agent/mibgroup/if-mib/data_access/interface_linux.c,
+ agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.h
+,
+ agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_data_access.c
+,
+ agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable.h
+,
+ agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_data_access.c
+, include/net-snmp/data_access/interface.h:
+
+ split reasm_max int two vars (v6/v6)
+
+2006-09-14 07:51 rstory
+
+ * include/net-snmp/system/linux.h:
+
+ define NETSNMP_INCLUDE_IFTABLE_REWRITES
+
+2006-09-14 07:51 rstory
+
+ * agent/mibgroup/: if-mib/data_access/interface.h,
+ mibII/ifTable.h:
+
+ Only try to use mfd code iff NETSNMP_INCLUDE_IFTABLE_REWRITES is defined
+
+2006-09-14 07:45 rstory
+
+ * include/net-snmp/data_access/interface.h:
+
+ add defined for new ifOperStatus values
+
+2006-09-14 02:53 dts12
+
+ * agent/helpers/Makefile.in, agent/helpers/table_row.c
+, local/mib2c.row.conf:
+
+ Preliminary implementation of a single-row helper.
+
+2006-09-13 10:00 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/Makefile.in:
+
+ pass one at specifying dlls to build via modules. Do not use this yet as there are conflict issues that need to be worked out
+
+2006-09-12 18:32 alex_b
+
+ * NEWS, README.win32, agent/mibgroup/winExtDLL.c
+, agent/mibgroup/winExtDLL.h,
+ win32/mib_module_includes.h, win32/mib_module_inits.h
+, win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/net-snmp-config.h.in,
+ win32/netsnmpmibssdk/Makefile.in,
+ win32/netsnmpmibssdk/netsnmpmibssdk.dsp:
+
+ Windows: new winExtDLL extension module to allow snmpd to load Windows
+ SNMP service extension DLLs to provide support for HOST-RESOURCES-MIB
+ and other MIBs provided with Windows.
+
+2006-09-12 16:15 tanders
+
+ * acconfig.h, configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in:
+
+ CAN_USE_SYSCTL -> NETSNMP_CAN_USE_SYSCTL
+
+2006-09-12 15:42 tanders
+
+ * configure, configure.in:
+
+ minor fixes
+
+2006-09-12 15:35 tanders
+
+ * acconfig.h, configure, configure.in,
+ sedscript.in, include/net-snmp/net-snmp-config.h.in
+, include/net-snmp/system/hpux.h,
+ include/net-snmp/system/linux.h,
+ include/net-snmp/system/mips.h,
+ include/net-snmp/system/solaris.h,
+ include/net-snmp/system/solaris2.5.h,
+ include/net-snmp/system/solaris2.6.h:
+
+ NEWS: misc: - Most net-snmp specific defines are now (also) available under a proper NETSNMP_ prefix. The older, potentially conflicting names as well as the autoconf variables can now be turned off by a special define.
+
+2006-09-12 10:33 dts12
+
+ * agent/agent_trap.c:
+
+ NEWS: agent: - [BUGS: 1427410] Set auth engineID for SNMPv3 traps.
+ (rather than sending a trap with no auth engineID)
+
+2006-09-12 10:30 dts12
+
+ * Makefile.top, configure, configure.in:
+
+ NEWS: build: - [BUGS 1416481] Support specifying an explicit linker.
+ Defaults to $CC if not explicitly set.
+
+2006-09-12 10:27 dts12
+
+ * snmplib/vacm.c:
+
+ NEWS: agent: - [BUGS 1502267] Build access list in the correct order.
+
+2006-09-12 06:06 tanders
+
+ * NEWS, configure, configure.in:
+
+ enable embedded Perl and the Perl modules by default
+
+2006-09-08 08:43 dts12
+
+ * local/mib2c.iterate_access.conf:
+
+ NEWS: mib2c: - [BUGS: 1479916] Restore consistency in row creation code.
+
+2006-09-08 05:48 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ NEWS: snmpd: - [BUGS: 1535903] Support spaces within security names
+
+2006-09-07 20:42 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ fix, I think, the bulkwalk problems; all tests pass. I believe the patch is the correct combination between the two different patches (the old one and the new one) that should fix both problems. NEWS: perl - Fixed the perl bulkwalk function
+
+2006-09-07 09:29 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ fix typo which broke persistence
+
+2006-09-07 09:17 dts12
+
+ * local/mib2c.iterate.conf:
+
+ Use the correct API call for remembering a newly-created row.
+ (Spotted by Zhang Chuan).
+
+2006-09-07 04:37 dts12
+
+ * apps/snmpdf.c:
+
+ NEWS: snmpdf: - [BUGS: 1515507] Handle failed requests better
+ (Don't go into an infinite loop!)
+
+2006-09-07 04:30 dts12
+
+ * include/net-snmp/library/parse.h, snmplib/parse.c,
+ snmplib/mib.c:
+
+ NEWS: snmplib - [BUGS: 1537459, BUGS: 1540745] Fix missing MIB parsing tokens
+
+2006-09-07 04:24 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c, NEWS,
+ man/snmpd.conf.5.def, testing/tests/Sv3usmconfigagent
+:
+
+ Revert default behaviour of convenience access control directives
+ to matching all context. An explicit context field will be taken
+ as an exact match, unless it ends in '*'.
+
+2006-09-06 10:24 rstory
+
+ * agent/mibgroup/if-mib/: data_access/interface_linux.c,
+ ifTable/ifTable.h:
+
+ fix some missing stats in ifTable/ifXTable
+
+2006-09-06 06:45 rstory
+
+ * NEWS:
+
+ add note on experiment FreeBSD/OpenBSD ifXTable support
+
+2006-09-06 06:42 rstory
+
+ * README.agent-mibs:
+
+ add FreeBDS and OpenBSD for if-mib
+
+2006-09-05 12:34 rstory
+
+ * agent/helpers/row_merge.c:
+
+ deal w/prev ptrs too
+
+2006-09-05 07:58 dts12
+
+ * NEWS, man/snmpd.conf.5.def:
+
+ Document new access control (and context) behaviour.
+
+2006-09-05 05:49 dts12
+
+ * testing/tests/Sv3usmconfigagent:
+
+ Explicitly authorise all contexts.
+ (This results from a minor alteration in behaviour following another code
+ change, but feels more secure than automatically opening up all contexts
+ by default. Though I'm happy to be persuaded otherwise...)
+
+2006-09-05 02:44 tanders
+
+ * apps/snmptrapd.c:
+
+ fix compiler warnings (again)
+
+2006-09-05 01:37 dts12
+
+ * agent/mibgroup/: agent_mibs.h, agent/nsVacmAccessTable.h
+:
+
+ Include Net-SNMP extension access table (and MIB) in the default build.
+
+2006-09-05 01:35 dts12
+
+ * apps/snmptrapd.c:
+
+ Protect against the nsVacmAccessTable not being included.
+ (and similar for usmUserTable - a cleaner check than before)
+
+2006-09-05 01:28 dts12
+
+ * apps/snmpvacm.c, man/snmpvacm.1.def:
+
+ Support manipulation of the Net-SNMP extension access table.
+
+2006-09-05 01:26 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ Support both exact and context prefix matches for the convenience directives
+ (as well as 'authaccess').
+
+2006-09-05 01:23 dts12
+
+ * agent/mibgroup/agent/nsVacmAccessTable.c:
+
+ Better handling of row creation/deletion.
+ Suppress various minor type mismatches.
+
+2006-09-04 16:07 tanders
+
+ * README.agent-mibs:
+
+ add (preliminary) information on new NET-SNMP-VACM-MIB
+
+2006-09-04 16:00 tanders
+
+ * agent/mibgroup/: tcp-mib/data_access/.cvsignore,
+ tcp-mib/tcpConnectionTable/.cvsignore,
+ tcp-mib/tcpListenerTable/.cvsignore,
+ udp-mib/data_access/.cvsignore,
+ udp-mib/udpEndpointTable/.cvsignore:
+
+ tweak .cvsignore files for new udp-mib/tcp-mib
+
+2006-09-04 15:55 tanders
+
+ * apps/snmptrapd.c:
+
+ fix compiler warnings
+
+2006-09-04 07:16 dts12
+
+ * agent/mibgroup/hardware/cpu/cpu_linux.c:
+
+ Tell a fussy compiler (S/W, not human) to shut up.
+
+2006-09-04 06:33 dts12
+
+ * agent/mibgroup/: ucd_snmp.h, agent/extend.c,
+ ucd-snmp/extensible.c:
+
+ Drop the old UCD extensible module from the default build.
+ Rely on the reworked (cached, valid syntax) "extend" module instead.
+
+2006-09-04 04:06 dts12
+
+ * agent/mibgroup/agent/nsVacmAccessTable.c, apps/snmptrapd.c
+:
+
+ Support registering VACM extensions in a non-default context
+ (such as used by 'snmptrapd')
+
+2006-09-04 04:04 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c, man/snmpd.conf.5.def
+:
+
+ Support non-default contexts with the auth* convenience directives.
+
+2006-09-04 04:00 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ Tweak variable names to be less confusing.
+ ("authtype" now has a specific meaning, contrary to the use here).
+
+2006-09-01 17:34 rstory
+
+ * dist/Makefile:
+
+ fix cvsroot
+
+2006-09-01 16:19 hardaker
+
+ * man/snmpcmd.1.def:
+
+ document -Y
+
+2006-09-01 16:17 hardaker
+
+ * agent/snmpd.c:
+
+ make snmpd support the -Y config flag like the other commands do
+
+2006-09-01 15:31 tanders
+
+ * dist/net-snmp.spec:
+
+ - Update to 5.4.dev
+ - introduce %{libcurrent}
+ - use new disman/event name
+ - add: README.aix README.osX README.tru64 README.irix README.agent-mibs
+ README.Panasonic_AM3X.txt
+ - add new NetSNMP::agent::Support
+
+2006-09-01 10:58 rstory
+
+ * NEWS:
+
+ - note new mib2c.emulation.conf
+ - note new linux ipv6 aware default mibs
+ - expand scopy of note on fixes to non-linux ipaddress size
+
+2006-09-01 10:55 rstory
+
+ * agent/mibgroup/mibII.h:
+
+ add tcp and udp mib tables to linux mibII module list
+
+2006-09-01 10:52 rstory
+
+ * agent/mibgroup/tcp-mib/data_access/tcpConn_linux.c:
+
+ fix byteorder problems
+
+2006-09-01 10:50 rstory
+
+ * agent/mibgroup/tcp-mib/data_access/tcpConn_linux.c,
+ include/net-snmp/data_access/tcpConn.h:
+
+ - only log error once if we can't open /proc/net/tcp6
+ - add ability to only load ipv4 data
+
+2006-09-01 10:42 rstory
+
+ * agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c:
+
+ fix byteorder problems
+
+2006-09-01 10:38 rstory
+
+ * include/net-snmp/library/tools.h, snmplib/tools.c:
+
+ new function to 'byteswap' hex-string representation of an address
+
+2006-09-01 07:50 rstory
+
+ * agent/mibgroup/mibII/: at.c, udpTable.c,
+ var_route.c:
+
+ more ip address size fixes
+
+2006-09-01 05:41 tanders
+
+ * perl/: TrapReceiver/TrapReceiver.xs, agent/agent.xs
+:
+
+ align the netsnmp_oid struct definition (oid, size_t!) with the one from NetSNMP::OID
+
+2006-09-01 02:44 tanders
+
+ * README.aix, README.solaris, README.tru64:
+
+ add notes on IPv6
+
+2006-08-31 17:43 tanders
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ fix typo
+
+2006-08-31 17:15 tanders
+
+ * perl/OID/OID.xs:
+
+ OID len should be a size_t
+
+2006-08-31 15:47 tanders
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ Use correct sockaddr_storage.[__]ss_family depending on the result of the corresponding configure test. Makes the UDPIPv6 transport code work on at least AIX and Tru64 Unix.
+
+2006-08-31 15:44 tanders
+
+ * configure, configure.in, acconfig.h,
+ include/net-snmp/net-snmp-config.h.in:
+
+ check for sockaddr_storage.[__]ss_family used in the UDPIPv6 transport code
+
+2006-08-31 12:44 rstory
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ fix IpAddress lengths on non-Linux 64bit platforms
+
+2006-08-31 01:34 tanders
+
+ * agent/mibgroup/ip-mib/data_access/scalars_linux.c:
+
+ add missing semicolon (even one-line patches can easily break the build ;-))
+
+2006-08-30 17:36 hardaker
+
+ * apps/snmptable.c:
+
+ covertiy bug 127: double check name_p pointer actually got filled before using it
+
+2006-08-30 17:33 hardaker
+
+ * snmplib/snmp_logging.c:
+
+ make sure snmp_log_options checks for NULLs of argv in illegal calls (should never happen)
+
+2006-08-30 17:29 hardaker
+
+ * snmplib/keytools.c:
+
+ coverty bug 59: double check system handles int/uint conversions properly
+
+2006-08-30 17:25 hardaker
+
+ * agent/mibgroup/ip-mib/data_access/scalars_linux.c:
+
+ coverty bug 155: free file pointer during ipv6 forwarding
+
+2006-08-30 17:21 hardaker
+
+ * snmplib/parse.c:
+
+ coverty bug 156: free resources during mib parsing failures
+
+2006-08-30 17:14 hardaker
+
+ * snmplib/keytools.c:
+
+ coverty bug 60: double check that systems handle negative returns to unsigned variables properly
+
+2006-08-30 08:35 marz
+
+ * perl/SNMP/SNMP.xs:
+
+ fix printing of opaque float and double compile warnings
+
+2006-08-30 08:30 dts12
+
+ * agent/mibgroup/agent/nsVacmAccessTable.c:
+
+ Simple SET support for the Net-SNMP VACM extensions.
+
+2006-08-30 08:29 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c,
+ include/net-snmp/library/vacm.h, snmplib/vacm.c:
+
+ Persistent storage for Net-SNMP VACM extension authtypes.
+
+2006-08-29 17:59 tanders
+
+ * configure, configure.in:
+
+ add generic IPv6 stack detection, e.g. for Solaris
+
+2006-08-29 09:05 dts12
+
+ * mibs/NET-SNMP-VACM-MIB.txt:
+
+ Fix inconsistent naming.
+
+2006-08-29 06:40 dts12
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ Guard against missing (or incomplete) CPU history stats.
+
+2006-08-29 06:19 tanders
+
+ * mibs/NET-SNMP-VACM-MIB.txt:
+
+ fix some basic smilint complaints
+
+2006-08-29 05:56 dts12
+
+ * agent/mibgroup/agent/nsVacmAccessTable.c,
+ agent/mibgroup/agent/nsVacmAccessTable.h,
+ mibs/NET-SNMP-VACM-MIB.txt:
+
+ Provisional (read-only) implementation of a MIB for the Net-SNMP
+ access control extensions.
+
+2006-08-29 03:11 dts12
+
+ * agent/helpers/table.c:
+
+ Get-Next processing didn't handle updating the index list for multi-indexed
+ tables properly. It worked OK for the first candidate found, but subsequent
+ (better) candidates only updated the first index value.
+ This code is slightly less efficient, but works as expected.
+
+2006-08-29 03:09 dts12
+
+ * agent/mibgroup/ucd-snmp/: vmstat_linux.c, vmstat_linux.h
+:
+
+ Ship older vmstat implementation code - allow admins the option of reverting.
+
+2006-08-29 03:05 dts12
+
+ * agent/mibgroup/hardware/cpu/: cpu_nlist.c, cpu_sysctl.c
+:
+
+ Better handling of single-CPU systems.
+ Don't create new CPU entries when loading stats.
+ [Don't commit from more than one working system, Dave!]
+
+2006-08-29 02:30 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ Keep braces balanced - it makes tracing code *so* much easier!
+
+2006-08-27 14:34 tanders
+
+ * testing/tests/T160snmpnetstat:
+
+ udpTable requires /dev/kmem access (root:system) on AIX
+
+2006-08-27 10:06 dts12
+
+ * agent/mibgroup/: ucd_snmp.h, host/hr_proc.c,
+ host/hr_proc.h:
+
+ Use HAL CPU interface for both UCD-specific and HostRes processor modules.
+
+2006-08-27 10:04 dts12
+
+ * agent/mibgroup/hardware/cpu.h:
+
+ Ensure that some form of HAL CPU module is included for all systems.
+
+2006-08-27 10:02 dts12
+
+ * agent/mibgroup/hardware/cpu/: cpu_null.c, cpu_null.h:
+
+ Dummy HAL CPU module, for systems that don't use any of the
+ supported interfaces.
+
+2006-08-27 09:47 dts12
+
+ * agent/mibgroup/host/hr_device.c:
+
+ Handle holes in the table properly.
+
+2006-08-27 09:45 dts12
+
+ * agent/mibgroup/hardware/cpu/: cpu.c, cpu_kerndata.c,
+ cpu_perfstat.c, cpu_pstat.c:
+
+ Better handling of single-CPU systems.
+ Don't create new CPU entries when loading stats.
+
+2006-08-27 09:43 dts12
+
+ * include/net-snmp/agent/hardware/cpu.h,
+ agent/mibgroup/hardware/cpu/cpu_kstat.c,
+ agent/mibgroup/hardware/cpu/cpu_linux.c:
+
+ Report processor status
+
+2006-08-26 16:23 tanders
+
+ * configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in:
+
+ make autoheader protect PACKAGE_* variables
+
+2006-08-25 16:23 tanders
+
+ * testing/tests/: Sv3config, Sv3usmconfigagent,
+ Svanyconfig:
+
+ Fix smuxsocket config to point to /smux_socket instead of /dev/null to avoid removing /dev/null when running as root.
+
+2006-08-25 09:43 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Clarify discussion of view masks. Thanks to Dominique Bastien.
+
+2006-08-25 07:20 tanders
+
+ * configure.in, configure:
+
+ allow for whitespace in Perl cc (e.g. on IRIX 6.5)
+
+2006-08-25 06:55 tanders
+
+ * perl/TrapReceiver/TrapReceiver.xs:
+
+ properly cast when printing pointers
+
+2006-08-25 06:35 tanders
+
+ * apps/snmptrapd_handlers.c:
+
+ netsnmp_trapd_check_auth() only takes a single argument
+
+2006-08-25 05:13 tanders
+
+ * agent/helpers/table_iterator.c:
+
+ fix: 'return' with no value, in function returning non-void
+
+2006-08-25 04:51 tanders
+
+ * apps/snmptrapd_auth.h:
+
+ add prototype for netsnmp_trapd_check_auth()
+
+2006-08-25 04:46 tanders
+
+ * apps/snmptrapd.c:
+
+ #include "mibII/vacm_conf.h" for vacm_standard_views
+
+2006-08-25 04:38 tanders
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+
+ print oid as unsigned long
+
+2006-08-25 02:57 tanders
+
+ * testing/tests/T115agentxperl:
+
+ make sure we can fulfill external library dependencies
+
+2006-08-25 02:41 tanders
+
+ * agent/helpers/table_iterator.c, snmplib/container.c
+, snmplib/mib.c, snmplib/snmp_debug.c,
+ snmplib/system.c:
+
+ initialize variables
+
+2006-08-25 02:33 tanders
+
+ * perl/TrapReceiver/TrapReceiver.xs:
+
+ proper types in format string
+
+2006-08-25 01:49 tanders
+
+ * configure, configure.in:
+
+ Add "-Ux" before "-Dx=x" for gcc to avoid annoying compiler warnings
+ on platforms that already define x (to 1).
+
+2006-08-24 17:41 tanders
+
+ * snmplib/snmp_debug.c:
+
+ use new snmp_cstrcat
+
+2006-08-24 17:36 tanders
+
+ * snmplib/mib.c, include/net-snmp/library/tools.h:
+
+ Introduce snmp_cstrcat that takes a (char *) as the last argument,
+ casts it to a (const u_char *) and calls snmp_strcat. Simplifies code
+ and fixes a *lot* of compiler warnings.
+
+2006-08-24 16:04 tanders
+
+ * agent/agent_registry.c, agent/helpers/row_merge.c,
+ agent/mibgroup/agent/nsDebug.c, perl/SNMP/SNMP.xs,
+ snmplib/md5.c, snmplib/read_config.c,
+ snmplib/snmp_logging.c, snmplib/text_utils.c:
+
+ - pointer size fixes from darix
+ - initialize variables
+ - print size_t as unsigned long
+
+2006-08-24 15:45 tanders
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ ISO C90 forbids mixed declarations and code
+
+2006-08-24 13:21 rstory
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ run autoheader
+
+2006-08-24 13:21 rstory
+
+ * acconfig.h:
+
+ add HAVE_PERL_EVAL_PV undef for whoever forgot to add it
+
+2006-08-24 13:19 rstory
+
+ * acconfig.h:
+
+ add config_error and config_warning empty macros
+
+2006-08-24 09:14 tanders
+
+ * apps/snmpusm.c:
+
+ Print size_t as unsigned long.
+
+2006-08-24 08:41 tanders
+
+ * snmplib/snmp_client.c:
+
+ Keep printing some know-to-be-small size_t values as integers, but properly
+ cast them to quiet the compiler.
+
+2006-08-24 07:31 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface.h:
+
+ use new interface_sysctl for OpenBSD 2, FreeBSD 4-6
+
+2006-08-24 07:30 rstory
+
+ * agent/mibgroup/if-mib/data_access/: interface_openbsd.c,
+ interface_sysctl.c, interface_sysctl.h:
+
+ remove OS specific file in favor of method specific files
+
+2006-08-24 05:52 dts12
+
+ * agent/mibgroup/hardware/cpu/: cpu_kstat.c, cpu_nlist.c
+, cpu_pstat.c, cpu_sysctl.c:
+
+ Include descriptions for individual CPU entries.
+
+2006-08-24 05:50 dts12
+
+ * agent/mibgroup/hardware/cpu/: cpu_kerndata.h,
+ cpu_kerndata.c:
+
+ Implementation for Dynix (and similar) systems.
+
+2006-08-24 05:48 dts12
+
+ * include/net-snmp/agent/hardware/cpu.h,
+ agent/mibgroup/hardware/cpu/cpu.c,
+ agent/mibgroup/hardware/cpu/cpu_linux.c,
+ agent/mibgroup/hardware/cpu/cpu_perfstat.c:
+
+ Remember the number of CPUs detected.
+ (Q: what to do if this changes?)
+
+2006-08-23 17:33 tanders
+
+ * snmplib/snmp_api.c:
+
+ Print size_t as unsigned long. Fixes 64-bit compiler warnings.
+
+2006-08-23 17:12 tanders
+
+ * configure, configure.in:
+
+ Add AC_PROG_EGREP and use $EGREP instead of egrep
+
+2006-08-23 16:43 rstory
+
+ * snmplib/oid_stash.c:
+
+ fix struct type in case
+
+2006-08-23 16:35 rstory
+
+ * configure:
+
+ update for configure.in
+
+2006-08-23 16:34 rstory
+
+ * configure.in:
+
+ add back check for sed
+
+2006-08-23 13:33 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ skip ifConnectorPresent/ifLinkUpDownTrapEnable if no data
+
+2006-08-23 12:23 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ correct scale when using ifSpeed as ifHighSpeed
+
+2006-08-23 11:58 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ use ifSpeed if ifHighSpeed==0
+
+2006-08-23 08:53 tanders
+
+ * snmplib/: container.c, container_binary_array.c,
+ data_list.c, keytools.c, mib.c, oid_stash.c
+, scapi.c, snmpCallbackDomain.c,
+ snmpTCPDomain.c, snmpUDPDomain.c, snmpUnixDomain.c
+, snmp_api.c, snmp_debug.c,
+ snmp_parse_args.c, snmpv3.c, text_utils.c,
+ tools.c:
+
+ Cast away compiler warnings/errors at a lot of places.
+
+2006-08-23 06:02 tanders
+
+ * agent/mibgroup/hardware/cpu.h:
+
+ activate cpu HAL code for AIX 4.x
+
+2006-08-23 03:23 tanders
+
+ * configure, configure.in:
+
+ Don't check twice for sed.
+
+2006-08-23 03:09 dts12
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ More portable handling of string assignments.
+ Remove C++-style comments.
+
+2006-08-23 03:07 tanders
+
+ * configure, configure.in:
+
+ fix more whitespace issues in mib module config
+
+2006-08-22 14:48 tanders
+
+ * agent/mibgroup/: ucd_snmp.h, hardware/cpu.h:
+
+ activate mem/cpu HAL code for AIX
+
+2006-08-22 09:11 dts12
+
+ * agent/mibgroup/hardware/cpu/cpu_perfstat.c:
+
+ Use correct API calls.
+
+2006-08-22 07:00 tanders
+
+ * README.tru64:
+
+ Update for 5.4 and embedded Perl.
+
+2006-08-22 06:52 dts12
+
+ * agent/mibgroup/hardware/cpu/: cpu_kstat.h, cpu_perfstat.h
+, cpu_pstat.h:
+
+ Missing HAL CPU API-specific header files
+
+2006-08-22 06:42 dts12
+
+ * agent/mibgroup/hardware/cpu/cpu_sysctl.c:
+
+ Handle change introduced with NetBSD 3.0.
+ sysctl( KERN_CP_TIME ) now returns 64-bit values.
+
+2006-08-22 05:15 dts12
+
+ * configure.in, configure,
+ agent/mibgroup/default_modules.h:
+
+ Be consistent in use of Event-MIB module terminology.
+
+2006-08-22 03:34 tanders
+
+ * configure.in, configure:
+
+ Improve robustness of the embedded perl checks.
+
+2006-08-22 02:26 tanders
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ Change "#if freebsd4" to "#ifdef freebsd4" to match current -Dfreebsd4=freebsd4.
+
+2006-08-22 02:22 tanders
+
+ * agent/mibgroup/: host/hr_storage.c, host/hr_swrun.c
+, mibII/route_headers.h:
+
+ Change "#if solaris2" to "#ifdef solaris2" to match current -Dsolaris2=solaris2.
+
+2006-08-21 17:47 tanders
+
+ * configure, configure.in:
+
+ "-U" doesn't work as expected with Sun's cc.
+
+2006-08-21 17:26 tanders
+
+ * agent/snmp_perl.c:
+
+ Perl_eval_pv (the upper-case variant) needs three arguments instead of two.
+
+2006-08-21 17:04 tanders
+
+ * configure, configure.in:
+
+ Yet another attempt to fix the PARTIALTARGETOS (e.g. solaris2) definitions.
+
+2006-08-21 16:33 tanders
+
+ * perl/SNMP/SNMP.xs:
+
+ replacement for newSVuv() because perl didn't have it until 5.6.0
+
+2006-08-21 15:40 tanders
+
+ * configure, configure.in:
+
+ Rewording of perl cc check errors.
+
+2006-08-21 14:07 hardaker
+
+ * configure.in:
+
+ change the OS define to redefine as the same name
+
+2006-08-21 09:44 tanders
+
+ * configure.in:
+
+ - add perl cc checks for embedded perl
+ - introduce --disable-perl-cc-checks to disable these tests
+
+2006-08-21 09:42 tanders
+
+ * configure:
+
+ configure.in
+
+2006-08-21 03:53 tanders
+
+ * configure, configure.in:
+
+ - fix config_arch_require
+ - remove obsolete AC_EXEEXT
+
+2006-08-21 02:27 dts12
+
+ * agent/mibgroup/hardware/cpu.h:
+
+ Active HAL CPU module for *BSD systems.
+
+2006-08-21 02:26 dts12
+
+ * agent/mibgroup/hardware/cpu/cpu_sysctl.c:
+
+ Retrieve and report memory-related statistics.
+ (Still not convinced these really belong here....)
+
+2006-08-21 02:25 dts12
+
+ * agent/mibgroup/hardware/cpu/cpu_sysctl.c:
+
+ Retrieve CPU stats correctly.
+
+2006-08-18 15:28 tanders
+
+ * configure, configure.in:
+
+ fix perl -V:cc
+
+2006-08-18 09:00 dts12
+
+ * agent/mibgroup/ucd-snmp/: vmstat.c, vmstat.h:
+
+ Use the HAL CPU modules to implement UCD-SNMP-MIB::systemStats.
+ Initially only used by Linux systems, but this code is now
+ fundamentally architecture-independent.
+
+2006-08-18 08:58 dts12
+
+ * include/net-snmp/agent/hardware/cpu.h:
+
+ Additional fields for CPU-related (sort-of) history, etc.
+
+2006-08-18 08:56 dts12
+
+ * agent/mibgroup/hardware/cpu/: cpu.c, cpu_kerndata.c,
+ cpu_kstat.c, cpu_linux.c, cpu_nlist.c,
+ cpu_nlist.h, cpu_perfstat.c, cpu_pstat.c,
+ cpu_sysctl.c, cpu_sysctl.h:
+
+ Provisional hardware-abstraction modules for assorted CPU statistics.
+ (including multi-CPU information)
+
+2006-08-18 08:33 hardaker
+
+ * agent/snmp_perl.c:
+
+ yet more potential perl fixes
+
+2006-08-18 08:32 hardaker
+
+ * agent/snmp_perl.c:
+
+ more potential perl fixes
+
+2006-08-18 07:44 tanders
+
+ * configure.in, configure:
+
+ use "perl -V:cc" to find Perl's cc
+
+2006-08-18 07:37 hardaker
+
+ * configure, configure.in:
+
+ commenting and a bit of spacing in the module list code
+
+2006-08-17 17:19 hardaker
+
+ * configure, configure.in, acconfig.h,
+ agent/snmp_perl.c, include/net-snmp/net-snmp-config.h.in
+:
+
+ make configure bail when embedded perl function can not be found ; fix the fact that 3 functions are needed not 2 and work around autoconf upper-case only defines that causes the existing broken-perl problem; NEWS - perl: fix the 'broken perl' issue with embedded perl
+
+2006-08-17 16:14 tanders
+
+ * include/net-snmp/system/: bsdi3.h, bsdi4.h, darwin.h
+, darwin7.h, dynix.h, freebsd3.h,
+ freebsd4.h, freebsd5.h, freebsd6.h, generic.h
+, hpux.h, mingw32msvc.h, netbsd.h,
+ openbsd.h, osf5.h:
+
+ "#define x x" instead of "#define x 1" for all platform names
+
+2006-08-17 08:44 tanders
+
+ * snmplib/snmpv3.c:
+
+ BUG: Coverity #149: potential NULL pointer dereference
+
+2006-08-17 08:41 dts12
+
+ * agent/mibgroup/disman/event-mib.h:
+
+ Drop DisMan Event MIB re-write warning.
+
+2006-08-17 08:16 tanders
+
+ * snmplib/mib.c:
+
+ BUG: Coverity #159: potential resource leak after malloc failure
+
+2006-08-17 08:03 rstory
+
+ * agent/mibgroup/: if-mib/ifTable/ifTable_interface.c,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c
+,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c
+,
+ ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_interface.c
+, ip-mib/ipAddressTable/ipAddressTable_interface.c,
+ ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c,
+ snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.c
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_interface.c
+, tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.c
+, tcp-mib/tcpListenerTable/tcpListenerTable_interface.c
+, udp-mib/udpEndpointTable/udpEndpointTable_interface.c
+:
+
+ BUG: Coverity #56: don't continue if malloc fails
+
+2006-08-17 07:50 rstory
+
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c
+, local/mib2c-conf.d/mfd-interface.m2c:
+
+ BUG: Coverity #56: don't continue after failed malloc
+
+2006-08-17 07:31 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_common.c:
+
+ BUG: Coverity #174: don't return ptr to freed memory
+
+2006-08-17 01:52 dts12
+
+ * agent/mibgroup/tcp-mib/data_access/tcpConn_linux.c:
+
+ Fix variable types to match parameter usage. Spotted by Scott Moynes.
+
+2006-08-16 19:29 hardaker
+
+ * configure, configure.in:
+
+ fix issue with OS name being defined as 1
+
+2006-08-16 16:08 tanders
+
+ * Makefile.in:
+
+ update for reworked Solaris headers
+
+2006-08-15 22:54 tanders
+
+ * man/: snmpd.8.def, snmpd.conf.5.def,
+ snmpd.examples.5.def:
+
+ fix typo
+
+2006-08-15 14:20 marz
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ Fix email address
+
+2006-08-15 08:46 hardaker
+
+ * configure, configure.in:
+
+ clean up the tmp created file
+
+2006-08-15 07:27 hardaker
+
+ * configure, configure.in:
+
+ fixed config_arch_require
+
+2006-08-15 07:26 tanders
+
+ * include/net-snmp/system/freebsd5.h:
+
+ force "#undef IFNET_NEEDS_KERNEL" on FreeBSD 5.x only
+
+2006-08-15 07:07 tanders
+
+ * include/net-snmp/system/: solaris2.10.h, solaris2.7.h
+, solaris2.8.h, solaris2.9.h:
+
+ remove obsolete header files
+
+2006-08-15 05:16 tanders
+
+ * agent/mibgroup/default_modules.h:
+
+ avoid comment inside comment
+
+2006-08-15 01:48 tanders
+
+ * README.solaris, configure, configure.in,
+ man/snmptrapd.8.def:
+
+ minor wording changes
+
+2006-08-14 20:25 hardaker
+
+ * acinclude.m4, configure, configure.in:
+
+ - Cleaned up the debugging code for the module section
+ - Added a AC_MSG_MODULE_DBG macro to clean up the zillions of ifs
+ - Reworked the m4 quoting of the section to only changequote when
+ actually needed, rather than doing the reverse and having to change
+ to "normal" quoting when a macro call is needed.
+
+2006-08-14 16:29 tanders
+
+ * include/net-snmp/system/: freebsd4.h, freebsd5.h,
+ freebsd6.h:
+
+ simplify/aggregate FreeBSD headers
+
+2006-08-14 15:57 tanders
+
+ * include/net-snmp/system/: solaris.h, solaris2.3.h,
+ solaris2.4.h, solaris2.5.h, solaris2.6.h:
+
+ Rework of header files for Solaris. solaris.h now covers Solaris 7 and up (including any future versions) while solaris2.[3-6].h covers legacy support.
+
+2006-08-14 13:27 hardaker
+
+ * configure:
+
+ update
+
+2006-08-14 13:24 marz
+
+ * perl/SNMP/SNMP.pm:
+
+ updated UCD references to Net-SNMP, updated contact info
+
+2006-08-14 13:23 hardaker
+
+ * acconfig.h, configure.in,
+ agent/mibgroup/default_modules.h,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/system/aix.h,
+ include/net-snmp/system/dynix.h,
+ include/net-snmp/system/freebsd.h,
+ include/net-snmp/system/hpux.h,
+ include/net-snmp/system/linux.h,
+ include/net-snmp/system/solaris.h:
+
+ New configure based default_modules.h file to decide which modules to
+ build into the agent.
+ NEWS: snmpd -- Agent builds default module list from a default_mibs.h rather than a hard coded configure list
+
+2006-08-14 13:20 marz
+
+ * perl/SNMP/SNMP.xs:
+
+ updated references to UCD to Net-SNMP, updated contact info
+
+2006-08-11 18:15 tanders
+
+ * configure, configure.in, sedscript.in,
+ agent/mibgroup/agentx/protocol.h,
+ agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_subagent.c
+, include/net-snmp/net-snmp-config.h.in,
+ man/snmpd.8.def, man/snmpd.conf.5.def,
+ man/snmptrapd.8.def:
+
+ Introduce --with-agentx-socket=FILE configure option. Helps packagers to *properly* customize that path (not encouraged, but quite common).
+
+2006-08-11 07:56 tanders
+
+ * snmplib/snmp_logging.c:
+
+ vsnprintf() needs to be followed by va_end
+
+2006-08-11 06:45 tanders
+
+ * snmplib/snmp_logging.c:
+
+ don't call va_end() if we've only memcpy()ed
+
+2006-08-11 02:59 tanders
+
+ * snmplib/snmp_logging.c:
+
+ simple attempt to fix recently introduced va_copy() build issues
+
+2006-08-10 07:11 dts12
+
+ * snmplib/snmp_api.c:
+
+ Report a failure to build the PDU. (Ref Bug #1399370)
+
+2006-08-10 01:58 dts12
+
+ * EXAMPLE.conf.def:
+
+ With fear and trepidation, remove the warnings against use of AgentX.
+ Doomed, we're aaaall dooooomed....
+
+2006-08-09 10:26 hardaker
+
+ * perl/agent/MANIFEST:
+
+ updated to correct list
+
+2006-08-09 10:13 hardaker
+
+ * perl/: Makefile.PL, Makefile.subs.pl,
+ ASN/Makefile.PL, OID/Makefile.PL, SNMP/Makefile.PL
+, TrapReceiver/Makefile.PL, agent/Makefile.PL
+, agent/default_store/Makefile.PL,
+ default_store/Makefile.PL:
+
+ another pass at perl/CPAN specific versioning checks
+
+2006-08-09 09:57 hardaker
+
+ * perl/: Makefile.PL, Makefile.subs.pl,
+ ASN/Makefile.PL, OID/Makefile.PL, SNMP/Makefile.PL
+, TrapReceiver/Makefile.PL, agent/Makefile.PL
+, agent/default_store/Makefile.PL,
+ default_store/Makefile.PL:
+
+ allow for very minor deviations in perl CPAN source versions from net-snmp versions
+
+2006-08-09 09:46 hardaker
+
+ * perl/SNMP/README:
+
+ major update for CPAN release
+
+2006-08-09 09:43 hardaker
+
+ * perl/SNMP/MANIFEST:
+
+ match 5.3 tree for ordering
+
+2006-08-09 09:41 hardaker
+
+ * perl/SNMP/MANIFEST:
+
+ update for recent needed testing files
+
+2006-08-08 17:51 tanders
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ build fix
+
+2006-08-08 15:16 tanders
+
+ * acinclude.m4:
+
+ Move our own m4 macros from aclocal.m4 into acinclude.m4 and properly quote them. Follows libtool/automake recommendations and allows to regenerate aclocal.m4 (containing libtool.m4) by calling aclocal which I've just done. Inspired by Debian patch #21.
+
+2006-08-08 15:07 bshaw666
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ minor documentation update
+
+2006-08-08 15:02 tanders
+
+ * aclocal.m4:
+
+ Move our own m4 macros from aclocal.m4 into acinclude.m4 and properly quote them. Follows libtool/automake recommendations and allows to regenerate aclocal.m4 (containing libtool.m4) by calling aclocal which I've just done. Inspired by Debian patch #21.acinclude.m4
+
+2006-08-08 06:18 tanders
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ run autoheader
+
+2006-08-08 06:18 tanders
+
+ * acconfig.h:
+
+ add HAVE_LIBNM in order to make autoheader work again
+
+2006-08-07 15:53 tanders
+
+ * aclocal.m4, config.guess, config.sub, configure
+, NEWS, ltmain.sh:
+
+ libtool update to 1.5.22 (from 1.4). Supersedes patch 1496945 and fixes bug 1518117 (probably plus a few more).
+
+2006-08-07 08:33 tanders
+
+ * testing/TESTCONF.sh:
+
+ Already randomize the initial port we try. Lowers the chance of collisions if multiple test suites run in parallel.
+
+2006-08-07 05:44 rstory
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ explicit cast to keep compiler happy
+
+2006-08-07 03:03 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Fix typo. Spotted by Leo Lei
+
+2006-08-05 17:01 tanders
+
+ * agent/mibgroup/host/: hr_filesys.c, hr_swrun.c:
+
+ Build fixes for AIX HOST-RESOURCES-MIB support
+
+2006-08-05 12:17 tanders
+
+ * Makefile.in:
+
+ add directory containing libperl.so to LD_RUN_PATH
+
+2006-08-04 15:36 bshaw666
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ E450 reporting PS temps as voltage, other problems
+
+2006-08-03 18:02 tanders
+
+ * Makefile.in:
+
+ override LD_RUN_PATH for the perl modules to avoid dependencies on the build directory (patch from darix)
+
+2006-08-01 04:43 tanders
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ one more correction
+
+2006-07-31 22:52 tanders
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ minor updates
+
+2006-07-31 16:42 hardaker
+
+ * perl/SNMP/t/mibload.t:
+
+ fix a test that may succeed when it shouldn't
+
+2006-07-31 16:05 hardaker
+
+ * NEWS:
+
+ mention gettable patch
+
+2006-07-31 16:03 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ fix getbulk at end-of-mibview boundaries
+
+2006-07-31 15:44 hardaker
+
+ * mibs/TUNNEL-MIB.txt:
+
+ update again to most recent
+
+2006-07-31 15:43 hardaker
+
+ * mibs/TUNNEL-MIB.txt:
+
+ update from the latest version.
+
+2006-07-31 15:40 hardaker
+
+ * dist/makerelease:
+
+ version tag doxygen files
+
+2006-07-31 15:39 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ minor updates
+
+2006-07-31 13:31 tanders
+
+ * apps/snmptrapd.c:
+
+ initialize snmptrapd authorization unconditionally of using AgentX (fixes bug 1527661)
+
+2006-07-31 07:25 marz
+
+ * doc/rfc/: agentx/rfc2741.txt, misc/rfc3512.txt,
+ misc/rfc3584.txt, smiV2/rfc2578.txt,
+ smiV2/rfc2579.errata, smiV2/rfc2579.errata~,
+ smiV2/rfc2579.txt, smiV2/rfc2580.txt,
+ snmpV1/rfc1155.txt, snmpV1/rfc1157.txt,
+ snmpV1/rfc1212.txt, snmpV1/rfc1213.txt,
+ snmpV2/rfc1901.txt, snmpV2/rfc1902.txt,
+ snmpV2/rfc1903.txt, snmpV2/rfc1904.txt,
+ snmpV2/rfc1905.txt, snmpV2/rfc1906.txt,
+ snmpV2/rfc1907.txt, snmpV2/rfc1908.txt,
+ snmpV2/rfc2089.txt, snmpV3/rfc3410.errata,
+ snmpV3/rfc3410.txt, snmpV3/rfc3411.txt,
+ snmpV3/rfc3412.txt, snmpV3/rfc3413.errata,
+ snmpV3/rfc3413.txt, snmpV3/rfc3414.errata,
+ snmpV3/rfc3414.txt, snmpV3/rfc3415.errata,
+ snmpV3/rfc3415.txt, snmpV3/rfc3416.txt,
+ snmpV3/rfc3417.txt, snmpV3/rfc3418.errata,
+ snmpV3/rfc3418.txt:
+
+ adding rfcs and errata to distribution
+
+2006-07-31 05:43 tanders
+
+ * dist/nsb-functions:
+
+ Don't catch "... snmpnetstat finds ..." (test 58) as an error.
+
+2006-07-30 17:28 tanders
+
+ * dist/nsb-functions:
+
+ Catch "Permission denied" errors, e.g. during "make install".
+
+2006-07-30 16:08 tanders
+
+ * dist/nsb-functions:
+
+ catch "Can't find ..." errors, e.g. from ld
+
+2006-07-30 15:41 tanders
+
+ * snmplib/Makefile.in:
+
+ pass LDFLAGS to allow for non-standard libcrypto location
+
+2006-07-29 16:58 tanders
+
+ * agent/helpers/debug_handler.c:
+
+ (correctly) make use of recently introduced SNMP_STRORNULL(x)
+
+2006-07-29 16:18 tanders
+
+ * agent/helpers/debug_handler.c:
+
+ make use of recently introduced SNMP_STRORNULL(x)
+
+2006-07-28 05:23 dts12
+
+ * configure, configure.in:
+
+ Support setting the persistent mask via configure. (based on Patch #1437385)
+
+2006-07-28 04:54 dts12
+
+ * configure, configure.in, agent/Makefile.in
+, snmplib/Makefile.in:
+
+ '-as-needed' support for linking libraries. (Patches #1398873 & 1493522)
+
+2006-07-28 02:39 dts12
+
+ * agent/auto_nlist.c, agent/mibgroup/host/hr_filesys.c
+, agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/ip.c, agent/mibgroup/mibII/tcp.c
+, agent/mibgroup/mibII/udp.c, snmplib/keytools.c
+, snmplib/scapi.c, snmplib/system.c:
+
+ Jumbo patch for improved AIX 5.x support. (Patch #1486307)
+ Note that the memory-related processing (host/hr_fstorage.c)
+ is now mostly handled by hardware/memory/memory_aix.c
+
+2006-07-27 12:48 hardaker
+
+ * local/tkmib:
+
+ patch from Julien Pinon to fix a few tkmib problems
+
+2006-07-27 08:50 dts12
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ Support for HFS systems, plus NFS fixes for Darwin. (Patch #1520289)
+
+2006-07-27 06:29 dts12
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Prevent potential crash in Darwin. (Patch #1520286)
+
+2006-07-27 06:17 dts12
+
+ * agent/kernel.h:
+
+ Support '--without-kmem-usage' on non-Linux systems. (Patch #1520278)
+
+2006-07-27 05:25 dts12
+
+ * snmplib/Makefile.in:
+
+ Include 'pkcs' in the list of files to compile. (Patch #1514867)
+
+2006-07-27 05:12 dts12
+
+ * snmplib/: snmp_parse_args.c, snmpv3.c:
+
+ Accept -Z 0 values for engineBoot/engineTime. (Patch #1510032)
+
+2006-07-27 04:37 dts12
+
+ * apps/snmptrapd.c:
+
+ Support running trap receiver as non-root user/group. (Patch #1497467)
+
+2006-07-27 03:08 dts12
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ Attempt to use the most up-to-date sysctl APIs. (Patch #1482169)
+
+2006-07-26 08:58 dts12
+
+ * local/: mib2c.container.conf, mib2c.iterate.conf,
+ mib2c.table_data.conf:
+
+ Generate proper code for non-integer value objects, and determine
+ the first and last accessible column objects. (Patch #1427712)
+
+ Q: Is it worth pulling some of this code out into a separate mib2c
+ utility file, since much of the processing is effectively identical
+ in all three cases?
+
+2006-07-26 04:56 dts12
+
+ * snmplib/snmp_logging.c:
+
+ Handle long (dynamic-buffered) messages correctly. (Bug #1516045)
+
+2006-07-26 04:50 dts12
+
+ * agent/mibgroup/target/target.c:
+
+ Ensure the secModel is initialised for SNMPv3 notifications. (Bug #1517454)
+
+2006-07-26 04:29 dts12
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ Only sort relocatable extension entries. Those in the main extTable
+ don't have an OID to sort on, so attempting to do so may scramble
+ them into a random order. (Bug #1506707)
+
+2006-07-25 08:57 dts12
+
+ * agent/mibgroup/host/: hr_disk.h, hr_network.h,
+ hr_other.h, hr_partition.h, hr_print.h,
+ hr_proc.h, hr_storage.h:
+
+ Indicate dependencies between HostRes modules. (Bug #1505325)
+
+2006-07-25 08:26 dts12
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ Ensure that IP Address values are reported as 4-octet
+ values on 64-bit architectures. (Bug #1504501)
+
+2006-07-25 06:48 dts12
+
+ * snmplib/mib.c:
+
+ Handle malformed Display Hints sensibly, rather than
+ going into an infinite loop. (Bug #1459665)
+
+2006-07-25 05:48 dts12
+
+ * agent/helpers/table_iterator.c:
+
+ Don't assume that all requests are necessarily valid. (Bug #1445116)
+
+2006-07-25 05:00 dts12
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ Use the defined default port (if specified) for numeric IPv6
+ addresses, rather than hardwiring SNMP_PORT. (Bug #1445089)
+
+2006-07-25 03:08 dts12
+
+ * agent/helpers/debug_handler.c:
+
+ Don't choke on missing labels (Bug #1429469)
+
+2006-07-25 02:29 dts12
+
+ * local/mib2c.table_data.conf:
+
+ Include missing flags parameter (Bug #1422708)
+
+2006-07-25 01:31 dts12
+
+ * snmplib/snmp_api.c:
+
+ Remove broken assertion (Bug #1399370)
+
+2006-07-25 01:11 dts12
+
+ * snmplib/: snmp_api.c, snmpv3.c:
+
+ Re-fix unsigned comparisons against 0 (Bug #1397891)
+ including fix for test #24
+
+2006-07-25 01:04 dts12
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ Fix signedness of return values (Bug #1397906)
+
+2006-07-18 07:03 hardaker
+
+ * local/mib2c.container.conf:
+
+ SNMP_TYPEDEF_MALLOC -> SNMP_MALLOC_TYPEDEF
+
+2006-07-13 14:30 hardaker
+
+ * NEWS:
+
+ news update for recent features
+
+2006-07-13 08:22 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ callback support for gettable().
+ - not extensively well tested, but it does work
+
+2006-07-12 02:40 tanders
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ fix ifInOctets statistics on Solaris (patch 1520603 from John Green)
+
+2006-07-07 15:00 hardaker
+
+ * configure, configure.in:
+
+ typo fix
+
+2006-07-07 14:56 hardaker
+
+ * configure, configure.in:
+
+ Dave's patch to remove host mib support for windows by default
+
+2006-07-07 14:55 hardaker
+
+ * apps/snmpnetstat/inet6.c:
+
+ Dave's patch for compilation fixes for windows
+
+2006-07-07 14:48 hardaker
+
+ * include/net-snmp/library/lcd_time.h, snmplib/lcd_time.c
+, snmplib/snmp_api.c:
+
+ Patch from Mathew Bielejeski to free user list and engine time cache at shutdown
+
+2006-07-07 14:39 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_data_access.c:
+
+ fix possbile null derefence, noted on coders
+
+2006-07-06 15:18 tanders
+
+ * testing/tests/T153solarisswap:
+
+ adjust OID for Solaris swap space size
+
+2006-07-06 15:01 tanders
+
+ * snmplib/read_config.c:
+
+ fix assignment in read_config_store_data_prefix() for ASN_IPADDRESS
+
+2006-07-05 15:44 rstory
+
+ * local/mib2c.emulation.conf:
+
+ - add warning comment for deprecated objects
+ - shorten scalar node comments by a line
+ - shorten column node comments
+
+2006-07-05 14:44 rstory
+
+ * snmplib/snmp_api.c:
+
+ add unsigned to asntypes
+
+2006-07-05 14:23 rstory
+
+ * local/mib2c.emulation.conf:
+
+ add * next to scalar enum defval
+
+2006-07-05 14:14 rstory
+
+ * local/mib2c.emulation.conf:
+
+ - 'override' and 'add_row' default to commented out
+ - add missing type info to override
+ - make conf file header mib2c comments so it's not included in output
+
+2006-07-05 07:42 rstory
+
+ * mibs/: DISMAN-NSLOOKUP-MIB.txt, DISMAN-PING-MIB.txt,
+ DISMAN-TRACEROUTE-MIB.txt:
+
+ update from RFC 4560
+
+2006-07-03 21:09 hardaker
+
+ * snmplib/parse.c:
+
+ Properly handle snmp enums using the word "deprecated"
+
+2006-07-03 20:47 hardaker
+
+ * local/mib2c.genhtml.conf:
+
+ appropriately mark deprecated table objects
+
+2006-06-30 22:12 hardaker
+
+ * local/Version-Munge.pl:
+
+ support for optional files (don't exist in every branch)
+
+2006-06-30 21:45 hardaker
+
+ * local/Version-Munge.pl:
+
+ doxygen.conf support
+
+2006-06-30 21:24 hardaker
+
+ * local/Version-Munge.pl:
+
+ check for file existence
+
+2006-06-30 21:07 hardaker
+
+ * local/Version-Munge.pl:
+
+ exit with the cvs commit status if run
+
+2006-06-30 15:53 hardaker
+
+ * perl/: Makefile.PL, Makefile.subs.pl,
+ ASN/Makefile.PL, OID/Makefile.PL, SNMP/Makefile.PL
+, TrapReceiver/Makefile.PL, agent/Makefile.PL
+, agent/Support/Makefile.PL,
+ agent/default_store/Makefile.PL, default_store/Makefile.PL
+:
+
+ better env name for not checking the version
+
+2006-06-30 15:17 hardaker
+
+ * Makefile.in:
+
+ remove version changing support; now in makerelease
+
+2006-06-30 15:16 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ remove tag support from versiontag; now in makerelease
+
+2006-06-30 15:15 hardaker
+
+ * local/Version-Munge.pl:
+
+ much better support for cvs commit, version numbering, etc
+
+2006-06-30 15:15 hardaker
+
+ * dist/makerelease:
+
+ various fixes and improvements
+
+2006-06-30 15:13 hardaker
+
+ * perl/: Makefile.PL, ASN/ASN.pm, ASN/Makefile.PL
+, AnyData_SNMP/Storage.pm, OID/Makefile.PL,
+ OID/OID.pm, SNMP/Makefile.PL, SNMP/SNMP.pm,
+ TrapReceiver/Makefile.PL, TrapReceiver/TrapReceiver.pm
+, agent/Makefile.PL, agent/agent.pm,
+ agent/Support/Makefile.PL, agent/Support/Support.pm,
+ agent/default_store/Makefile.PL,
+ agent/default_store/default_store.pm,
+ default_store/Makefile.PL, default_store/default_store.pm
+:
+
+ perl version numbering changes
+
+2006-06-30 15:12 hardaker
+
+ * perl/Makefile.subs.pl:
+
+ Update to check for CPAN required perl version numbers
+
+2006-06-29 16:59 rstory
+
+ * local/mib2c.emulation.conf:
+
+ first pass at autogenerating override/table/add_row entries for a MIB
+
+2006-06-27 11:40 tanders
+
+ * testing/tests/: T061agentperl, T115agentxperl:
+
+ set DYLD_LIBRARY_PATH for OSX and SHLIB_PATH for HP-UX
+
+2006-06-27 11:09 tanders
+
+ * agent/mibgroup/mibII/udpTable.c:
+
+ fix more udpTable byte-order issues (indices) on *BSD and Solaris/x86
+
+2006-06-27 09:42 rstory
+
+ * README.osX:
+
+ remove embeded perl info; add perl agentx info
+
+2006-06-26 15:28 tanders
+
+ * testing/TESTCONF.sh:
+
+ add netstat path for IRIX
+
+2006-06-26 08:33 tanders
+
+ * include/net-snmp/system/netbsd.h:
+
+ udpTable byte-order fix (values only) for NetBSD and OpenBSD
+
+2006-06-25 14:43 tanders
+
+ * testing/tests/T061agentperl:
+
+ prepend (instead of replace) a non-empty LD_LIBRARY_PATH; fixes test errors on systems that rely on it
+
+2006-06-25 14:25 tanders
+
+ * testing/tests/T160snmpnetstat:
+
+ fix test error on Solaris etc.: only use "id -u" on systems that support it
+
+2006-06-25 08:43 alex_b
+
+ * perl/: Makefile.PL, Makefile.makefiles,
+ Makefile.subs.pl, ASN/Makefile.PL, OID/Makefile.PL
+, SNMP/Makefile.PL, TrapReceiver/Makefile.PL,
+ agent/Makefile.PL, agent/Support/Makefile.PL,
+ agent/default_store/Makefile.PL, default_store/Makefile.PL
+:
+
+ -'perl Makefile.PL -NET-SNMP-IN-SOURCE=true' was not working. Fix: call
+ 'nsconfig' --version inside of InitMakeParams instead of Check_Version
+ -Support module: NetSNMPGetOpts call should pass parent folder so net-snmp-config
+ can be found
+ -Support/Makefile.PL was missing from Makefile.makefiles
+
+2006-06-24 09:00 alex_b
+
+ * perl/: Makefile.PL, Makefile.makefiles,
+ Makefile.subs.pl, make-perl-makefiles,
+ ASN/Makefile.PL, OID/Makefile.PL, SNMP/Makefile.PL
+, TrapReceiver/Makefile.PL, agent/Makefile.PL,
+ agent/default_store/Makefile.PL, default_store/Makefile.PL
+:
+
+ -Skip version check for Win32 MSVC
+ -add TrapReceiver to Makefile.makefiles
+ -make-perl-makefiles: rename files AFTER closing them, not before
+
+2006-06-23 12:50 tanders
+
+ * testing/tests/T160snmpnetstat:
+
+ check for 127.0.0.1., not just , to identify byte-order issues
+
+2006-06-23 09:06 hardaker
+
+ * agent/mibgroup/mibII/udpTable.c,
+ include/net-snmp/system/cygwin.h,
+ include/net-snmp/system/freebsd.h,
+ include/net-snmp/system/solaris.h:
+
+ Clean fixing of ordering problems with kernel storage of UDP values
+
+2006-06-23 08:52 dts12
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ Document current best-practise for announcing new releases
+ (including pre-releases and release candidates).
+ Say what we do, rather than do what we say.
+
+2006-06-23 05:19 tanders
+
+ * dist/nsb-package:
+
+ fix typos
+
+2006-06-23 02:47 tanders
+
+ * agent/mibgroup/mibII/udpTable.c:
+
+ fix earlier "don't reverse address byte order for solaris (specifically x86) for local addresses" patch that broke byte order for all platforms
+
+2006-06-20 15:35 tanders
+
+ * dist/nsb-functions:
+
+ introduce NSB_PREFIX and switch to --prefix=/usr now that we support DESTDIR for everything; e.g. to avoid that the installation ends in /destdir/destdir
+
+2006-06-20 14:46 tanders
+
+ * dist/nsb-functions:
+
+ introduce NSB_EXTRA_INSTALL to be able to pass extra args to "make install"
+
+2006-06-20 12:12 tanders
+
+ * testing/tests/T061agentperl:
+
+ more portable way of exporting
+
+2006-06-20 05:41 tanders
+
+ * testing/tests/T061agentperl:
+
+ set LD_LIBRARY_PATH to make sure that NetSNMP::agent's agent.so can load (uninstalled) libnetsnmp*.so; otherwise test fails at least on FreeBSD
+
+2006-06-15 15:10 tanders
+
+ * testing/eval_tools.sh:
+
+ suppress stderr warnings for "ps -e" in order to fix [false] nightly build error messages on SF CF host alpha-linux1
+
+2006-06-15 06:52 tanders
+
+ * testing/tests/T160snmpnetstat:
+
+ add OpenBSD and NetBSD to the list of systems that require root privileges for udpTable (according to Dave's testing)
+
+2006-06-13 14:59 tanders
+
+ * testing/tests/T115agentxperl:
+
+ set NETSNMP_DS_AGENT_NO_ROOT_ACCESS (needed for e.g. Solaris 2.6)
+
+2006-06-13 05:42 tanders
+
+ * agent/mibgroup/notification-log-mib/notification_log.c,
+ include/net-snmp/library/tools.h, snmplib/callback.c
+, agent/agent_registry.c:
+
+ fix bug 1505341: agent segfaults on Solaris with -DALL
+
+2006-06-12 16:55 hardaker
+
+ * dist/makerelease:
+
+ commit the doxygen.conf file
+
+2006-06-12 16:42 tanders
+
+ * testing/TESTCONF.sh:
+
+ introduce "net-snmp-config --perlprog" and use it in the "AgentX subagent in perl" test
+
+2006-06-12 16:00 tanders
+
+ * net-snmp-config.in, testing/tests/T115agentxperl:
+
+ introduce "net-snmp-config --perlprog" and use it in the "AgentX subagent in perl" test
+
+2006-06-12 15:44 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ define mfd_*_rowreq_from_index if persistent enabled
+
+2006-06-12 15:40 rstory
+
+ * include/net-snmp/data_access/tcpConn.h:
+
+ include ipaddr instead of redefining constants
+
+2006-06-12 15:39 rstory
+
+ * include/net-snmp/library/asn1.h:
+
+ add comment w/integer value for easy grepping
+
+2006-06-12 13:23 rstory
+
+ * apps/snmpnetstat/: inet6.c, route.c:
+
+ add sys/types.h to fix OS X build
+
+2006-06-12 13:05 rstory
+
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.c
+:
+
+ - fix bad parameter in scalar registration
+ - keep scalar value fresh using table cache + cache helper
+
+2006-06-12 13:03 rstory
+
+ * agent/mibgroup/ip-forward-mib/inetCidrRouteTable/:
+ inetCidrRouteTable_interface.c,
+ inetCidrRouteTable_interface.h:
+
+ add access to table cache
+
+2006-06-12 10:30 hardaker
+
+ * testing/tests/T141snmpv2cvacmgetfail:
+
+ fix for new failure error code
+
+2006-06-12 10:11 hardaker
+
+ * agent/snmp_agent.c:
+
+ Fix bug reported by Robert Wilcox: return no access instead of not writable on VACM denials
+
+2006-06-12 09:00 hardaker
+
+ * perl/: Makefile.subs.pl, ASN/Makefile.PL,
+ OID/Makefile.PL, SNMP/Makefile.PL,
+ TrapReceiver/Makefile.PL, agent/Makefile.PL,
+ agent/Support/Makefile.PL, agent/default_store/Makefile.PL
+:
+
+ finally a working version of the version working check
+
+2006-06-12 08:54 hardaker
+
+ * perl/: Makefile.subs.pl, ASN/Makefile.PL,
+ OID/Makefile.PL, SNMP/Makefile.PL,
+ TrapReceiver/Makefile.PL, agent/Makefile.PL,
+ agent/Support/Makefile.PL, agent/default_store/Makefile.PL
+:
+
+ fix preX version numbers before checking
+
+2006-06-12 08:46 hardaker
+
+ * perl/: Makefile.subs.pl, ASN/Makefile.PL,
+ OID/Makefile.PL, SNMP/Makefile.PL,
+ TrapReceiver/Makefile.PL, agent/Makefile.PL,
+ agent/Support/Makefile.PL, agent/Support/Support.pm,
+ agent/default_store/Makefile.PL:
+
+ check the perl module version number against the net-snmp version number
+
+2006-06-12 01:19 tanders
+
+ * dist/makerelease:
+
+ add manual step to update version number in doxygen.conf
+
+2006-06-12 01:16 tanders
+
+ * doxygen.conf:
+
+ version update
+
+2006-06-10 05:57 tanders
+
+ * apps/snmptrapd_auth.c:
+
+ fix syntax error introduced in last commit
+
+2006-06-09 13:42 tanders
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ fix typo
+
+2006-06-09 05:56 rstory
+
+ * apps/snmptrapd_auth.c:
+
+ - don't free pdu if it's not a clone
+ - ifdef more code not used if snmpv1 disabled
+
+2006-06-07 05:24 tanders
+
+ * agent/agent_registry.c:
+
+ patch from Dave to prevent crash with -Dregister_mib
+
+2006-06-07 05:13 tanders
+
+ * apps/snmpnetstat/route.c:
+
+ include netinet/in.h and arpa/inet.h to pick up ntohl on hpux10.20
+
+2006-06-05 15:37 rstory
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ fix double-free of delegated cache
+
+2006-06-05 14:27 rstory
+
+ * testing/tests/T141snmpv2cvacmgetfail:
+
+ add vacm set tests
+
+2006-06-05 14:21 rstory
+
+ * testing/tests/Svacmconfig:
+
+ add (ro|rw)community config for rw vacm test
+
+2006-06-05 11:06 rstory
+
+ * snmplib/vacm.c:
+
+ add some vacm matching debug msgs
+
+2006-06-05 10:34 rstory
+
+ * agent/mibgroup/disman/event/mteTrigger.c:
+
+ - use new ability to schedule alarm in 0 sec to run mte tirggers asap after
+ startup, instead of during config file parsing
+ - add missing \n to log msg
+
+2006-06-05 10:31 rstory
+
+ * snmplib/snmp_alarm.c:
+
+ - allow a 0 time in snmp_alarm_register, to mean run ASAP (i.e. 1 usec)
+ - allow sec/usec of 0 in sa_update_entry, except for SA_REPEAT case
+
+2006-06-05 10:26 rstory
+
+ * agent/mibgroup/disman/event/mteTriggerConf.c:
+
+ - log error (and don't create entry) if sess user not found
+ - log error if agentSecName (default user) not specified
+ - add missing \n to debug msg
+
+2006-06-05 09:53 rstory
+
+ * include/net-snmp/types.h:
+
+ change len type to size_t
+
+2006-06-05 09:34 rstory
+
+ * agent/mibgroup/if-mib/: data_access/interface.c,
+ ifTable/ifTable_interface.c:
+
+ add container names
+
+2006-06-01 06:29 rstory
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ enforce MIB object lengths
+
+2006-05-29 02:40 tanders
+
+ * dist/nsb-functions:
+
+ further tweak the error regex
+
+2006-05-29 01:35 tanders
+
+ * testing/tests/T060trapdperl:
+
+ re-fix newline issues
+
+2006-05-28 13:13 tanders
+
+ * perl/TrapReceiver/TrapReceiver.xs:
+
+ temporary workaround to prevent snmptrapd embedded perl crash on x86_64 (bug 1494882)
+
+2006-05-27 23:58 hardaker
+
+ * testing/tests/: T059trapdtraphandle, T060trapdperl:
+
+ use CHECKORDIE instead of CHECKFILE when doing multiple checks (was succeeding when it shouldn't have). Also, open embedded perl LOG in append mode so second routine doesn't trump the first
+
+2006-05-27 22:30 hardaker
+
+ * apps/snmpnetstat/inet6.c:
+
+ include netinet/in.h and arpa/inet.h to pick up htonl, etc, on hpux10.20
+
+2006-05-27 22:16 hardaker
+
+ * Makefile.top:
+
+ way simple DESTDIR support
+
+2006-05-27 22:14 hardaker
+
+ * README:
+
+ added a few people from previous patches
+
+2006-05-27 07:41 tanders
+
+ * testing/tests/T115agentxperl:
+
+ set libtool-like LD_LIBRARY_PATH to make sure the perl agent starts properly (fixes bug 1495433)
+
+2006-05-26 15:24 hardaker
+
+ * agent/mibgroup/mibII/udpTable.c:
+
+ don't reverse address byte order for solaris (specifically x86) for local addresses
+
+2006-05-26 15:23 hardaker
+
+ * agent/mibgroup/mibII/mibII_common.h:
+
+ remove double entry comment
+
+2006-05-26 09:58 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ one intptr_t cast from a pointer
+
+2006-05-26 09:33 hardaker
+
+ * acconfig.h, configure.in,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/types.h, configure:
+
+ check for uintptr_t and intptr_t
+
+2006-05-26 06:29 hardaker
+
+ * perl/TrapReceiver/TrapReceiver.xs:
+
+ Another proper pointer cast
+
+2006-05-26 06:15 hardaker
+
+ * perl/: SNMP/SNMP.xs, TrapReceiver/TrapReceiver.xs,
+ agent/agent.xs:
+
+ Patch from darix to properly cast pointers to an IV instead of an int to fix 64bit issues
+
+2006-05-26 01:52 tanders
+
+ * testing/eval_tools.sh:
+
+ make daemons bind to localhost by default only (fixes bug 1424293)
+
+2006-05-25 15:13 tanders
+
+ * testing/TESTCONF.sh:
+
+ set SNMP_PERSISTENT_DIR for all apps/daemons
+
+2006-05-25 15:07 tanders
+
+ * testing/TESTCONF.sh:
+
+ set SNMPCONFPATH for all apps/daemons
+
+2006-05-25 09:14 tanders
+
+ * testing/tests/Sv3config:
+
+ don't open default smux port/socket
+
+2006-05-25 08:05 tanders
+
+ * testing/tests/: Sv3usmconfigagent, Svanyconfig:
+
+ don't open default smux port/socket
+
+2006-05-24 08:32 tanders
+
+ * testing/tests/T061agentperl:
+
+ more portable way of calling perl
+
+2006-05-24 08:26 tanders
+
+ * testing/tests/T115agentxperl:
+
+ double-fork the perl subagent to avoid shell output from job handling
+
+2006-05-24 06:42 tanders
+
+ * testing/TESTCONF.sh:
+
+ introduce additional variables for subagent tests: AGENTX_CONFIG_FILE, SNMP_AGENTX_PID_FILE, SNMP_AGENTX_LOG_FILE
+
+2006-05-24 06:39 tanders
+
+ * testing/tests/T115agentxperl:
+
+ new test: 'AgentX subagent in Perl (using NetSNMP::agent)'
+
+2006-05-22 15:48 tanders
+
+ * testing/tests/T151solarishostdisk:
+
+ this test requires host/hr_system in particular and uses v1, not v2c
+
+2006-05-22 15:42 tanders
+
+ * testing/tests/T150solarishostcpu:
+
+ this test requires host/hr_device in particular and uses v1, not v2c
+
+2006-05-22 15:36 tanders
+
+ * testing/tests/T153solarisswap:
+
+ this test uses v1, not v2c
+
+2006-05-22 15:18 tanders
+
+ * testing/tests/T152hostuptime:
+
+ this test requires host/hr_system in particular
+
+2006-05-22 03:08 tanders
+
+ * testing/tests/T153solarisswap:
+
+ this test requires host/hr_storage in particular
+
+2006-05-19 11:31 rstory
+
+ * agent/agent_trap.c:
+
+ - fix for bug 1313667 removed synch send, allowing us to uncomment the
+ commented out pdu free on error, plugging a memory leak identified
+ on coders by derekl at blueyonder co uk
+
+2006-05-19 10:02 rstory
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ - use nrprocs-1 as index instead of i, which will be negative if cpuinfo
+ doesn't contain a 'processor' line
+
+2006-05-17 15:11 rstory
+
+ * apps/snmptrapd_auth.c:
+
+ need sys/types.h before netinet/in.h on some platforms
+
+2006-05-13 00:21 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ update CVS host name
+
+2006-05-12 15:07 hardaker
+
+ * perl/: ASN/Makefile.PL, OID/Makefile.PL,
+ SNMP/Makefile.PL, SNMP/SNMP.pm, SNMP/SNMP.xs
+, TrapReceiver/Makefile.PL, agent/Makefile.PL,
+ agent/Support/Makefile.PL, agent/default_store/Makefile.PL
+, default_store/Makefile.PL:
+
+ change -W flag substition to be exact match of flags to remove, rather than removing any -W flag for portability reasons
+
+2006-05-12 09:10 tanders
+
+ * dist/nsb-functions:
+
+ misc. additions for more configuration control on build farms, including embedded perl building
+
+2006-05-12 08:16 tanders
+
+ * testing/tests/: T060trapdperl, T061agentperl:
+
+ fix newline issues
+
+2006-05-12 08:13 tanders
+
+ * testing/tests/: T053agentv1trap, T054agentv2ctrap,
+ T055agentv1mintrap, T056agentv2cmintrap,
+ T113agentxtrap:
+
+ ensure the tests work even if UCD-SNMP-MIB isn't in defaults MIBS list
+
+2006-05-12 08:10 tanders
+
+ * testing/tests/T050snmpv3trap:
+
+ introduce delays to not lose traps
+
+2006-05-12 07:54 tanders
+
+ * README.aix:
+
+ update README for AIX based on build test experience on AIX 4.3.3/5.1/5.2/5.3
+
+2006-05-08 03:07 tanders
+
+ * dist/nsb-functions:
+
+ introduce NSB_LIBWRAP to be able to specify --with[out]-libwrap=xxx
+
+2006-05-08 01:11 tanders
+
+ * dist/nsb-functions:
+
+ remove smux from NSB_DIST_MODULES (it's already in NSB_EXTRA_MODULES)
+
+2006-05-08 00:47 tanders
+
+ * agent/mibgroup/Rmon/row_api.h:
+
+ build fix for C89 compilers (e.g. xlc on AIX 4.3.3): no trailing comma after last entry of a "typedef enum"
+
+2006-05-05 16:03 tanders
+
+ * dist/nsb-functions:
+
+ further tweaking of the exception regex
+
+2006-05-05 15:28 tanders
+
+ * README.irix:
+
+ Initial README for IRIX
+
+2006-05-05 14:51 hardaker
+
+ * apps/snmptrapd_log.c:
+
+ put the snprintf length into a dereferenced pointer
+
+2006-05-04 14:44 hardaker
+
+ * agent/snmp_agent.c:
+
+ covertiy 135: double check netsnmp_oid_find_prefix returns a positive result (should only happen in broken-tree cases)
+
+2006-05-04 14:36 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ coverity #136: free mem leak in rare bad-agentx packet case
+
+2006-05-03 13:59 tanders
+
+ * agent/mibgroup/mibII/ipAddr.c, NEWS:
+
+ [ 1481012 ] HP-UX 11.0/11i: ipAdEntBcastAddr wrong (patch submitted by Johannes Schmidt-Fischer)
+
+2006-04-30 22:07 hardaker
+
+ * apps/snmpusm.c:
+
+ [ 1478616 ] snmpusm outputs to stderr on success
+
+2006-04-30 22:02 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ [ 1479071 ] 64 bits counter on Linux & good parsing of diskstats (again) [modified] from Fabrice Bacchella
+
+2006-04-25 10:33 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ [ 1466450 ] fix compilation with linux/ethtool. In other words: ugh nasty but needed patch
+
+2006-04-25 10:25 hardaker
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ modified version of [ 1466451 ] ipAddress size with 64bit to use sizeof() for the datatype in question
+
+2006-04-21 05:30 dts12
+
+ * apps/snmpnetstat/inet.c, snmplib/snmp_client.c:
+
+ Skip missing entries (rather than crashing out completely)
+
+2006-04-20 17:24 tanders
+
+ * snmplib/: container.c, snmpusm.c:
+
+ fix typos
+
+2006-04-20 17:13 tanders
+
+ * NEWS:
+
+ rephrased
+
+2006-04-20 16:55 tanders
+
+ * NEWS:
+
+ document changes since 5.3.0.1
+
+2006-04-20 16:19 tanders
+
+ * testing/tests/T061agentperl:
+
+ add SIGHUP test
+
+2006-04-20 16:03 tanders
+
+ * testing/tests/: T059trapdtraphandle, T060trapdperl:
+
+ add SIGHUP test
+
+2006-04-20 15:27 rstory
+
+ * apps/snmptrapd.c:
+
+ - fix bug 1473289: Re-init of 5.3.0.1 daemons fail after SIGHUP
+
+2006-04-20 15:24 tanders
+
+ * testing/tests/T035snmpv3trapdusermgmt:
+
+ add SIGHUP test
+
+2006-04-20 15:15 rstory
+
+ * agent/agent_read_config.c:
+
+ - fix bug 1473289: Re-init of 5.3.0.1 agent fails after SIGHUP
+
+2006-04-20 15:15 tanders
+
+ * testing/tests/T030snmpv3usercreation:
+
+ add SIGHUP test
+
+2006-04-20 15:09 tanders
+
+ * testing/eval_tools.sh:
+
+ introduce HUPPROG(), HUPAGENT() and HUPTRAPD() for upcoming SIGHUP tests
+
+2006-04-18 12:14 hardaker
+
+ * README.solaris:
+
+ Bug #1432165: typos in the filenames
+
+2006-04-18 11:01 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ fix bug 1458685: man page for setaccess was missing a token in the summary line
+
+2006-04-18 10:58 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ fix bug 1458818: authcommunity and friends use -V not -v to specify a view
+
+2006-04-18 10:36 hardaker
+
+ * local/mib2c.old-api.conf:
+
+ [ 1341098 ] Fix mib2c.old-api.conf oid suffixes, suffix lengths from nshulman
+
+2006-04-18 10:32 hardaker
+
+ * NEWS, README:
+
+ Support functions for easier embedded perl integration: [ 1369996 ] mib to perl support by Peter Martin
+
+2006-04-18 10:28 hardaker
+
+ * perl/agent/Support/.cvsignore,
+ perl/agent/Support/Makefile.PL,
+ perl/agent/Support/Support.pm, local/mib2c.perl.conf:
+
+ Support functions for easier embedded perl integration: [ 1369996 ] mib to perl support by Peter Martin
+
+2006-04-18 10:16 hardaker
+
+ * snmplib/read_config.c:
+
+ [ 1465485 ] netsnmp_config_remember_free_list mem leak from Robert Wilcox
+
+2006-04-18 06:58 hardaker
+
+ * mibs/: IP-FORWARD-MIB.txt, IP-MIB.txt, rfclist
+:
+
+ update from newly published RFCs
+
+2006-04-13 13:27 hardaker
+
+ * net-snmp-config.in:
+
+ [ 1364248 ] Add net-snmp-config --compile-subagent parameters: general rework of the main wrapper for auto-subagents from magfr
+
+2006-04-13 13:10 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ [ 1371778 ] diskIOTable contains invalid data for some devices on Linux
+
+2006-04-13 11:20 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ [ 1386264 ] 5.2.2 - fix Linux CPU counters on SMP machines
+
+2006-04-12 12:23 hardaker
+
+ * perl/OID/OID.xs:
+
+ fix parsing of addresses that I broke when implementing parsing of fixed-width strings
+
+2006-04-12 10:08 hardaker
+
+ * snmplib/vacm.c:
+
+ fix a bug reported in 1118814 where init length wasn't getting initialized properly
+
+2006-04-12 09:44 hardaker
+
+ * perl/OID/OID.xs:
+
+ fixes for fixed length string parsing
+
+2006-04-12 09:22 hardaker
+
+ * perl/OID/OID.xs:
+
+ remove debugging statements
+
+2006-04-12 09:19 hardaker
+
+ * perl/OID/OID.xs:
+
+ fixed length string parsing
+
+2006-04-11 04:09 tanders
+
+ * agent/mibgroup/utilities/iquery.c:
+
+ Build fix for "configure --with-out-transports=Callback" (fixes first part
+ of bug 1467724).
+ Why do tests 21-25 and 34-35 (all involving snmptrapd) fail in 5.3+ (unlike
+ 5.2.x) if the callback transport isn't available?
+
+2006-04-10 07:26 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ [ 1364648 ] Fix segfault on perl async bulkwalk from Ole Bjorn
+
+2006-04-10 07:19 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/host/hr_swrun.c:
+
+ [ 1415586 ] 5.3.0.1 host/hr_swrun.c patches for AIX 4,3/5.2 from Joe Buehler
+
+2006-04-09 21:59 hardaker
+
+ * agent/mibgroup/: if-mib/data_access/interface.h,
+ if-mib/data_access/interface_openbsd.c,
+ if-mib/ifTable/ifTable_data_access.h, mibII/ifTable.h
+:
+
+ [ 1427793 ] if(X)Table implementation for OpenBSD 3.x from NorthtroN
+
+2006-04-09 21:52 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ [ 1429455 ] endless loop, table_iterator, 5.3 from Kris (tinker105)
+
+2006-04-09 21:43 hardaker
+
+ * snmplib/fd_event_manager.c:
+
+ [ 1460082 ] [PATCH]: Fix external fd handling (anon)
+
+2006-03-27 16:52 tanders
+
+ * testing/tests/T200snmpv2cwalkall:
+
+ remove (useful) "-Cp -Ct" stderr output since it has been seen to interfere with the stdout messages to be checked
+
+2006-03-24 08:46 dts12
+
+ * agent/mibgroup/agent/extend.c:
+
+ Recognise failed/duplicate registrations, and don't plough on regardless
+
+2006-03-24 08:43 dts12
+
+ * apps/snmpnetstat/inet.c:
+
+ Don't choke on SNMPv2 exceptions
+ (Still need to handle SNMPv1 errors)
+ Fix a couple of minor output typos.
+
+2006-03-23 16:00 tanders
+
+ * man/mib2c.conf.5.in:
+
+ Fix section of mib2c.conf.5 (Debian patch #16 from 5.2.2-3)
+
+2006-03-23 11:17 hardaker
+
+ * agent/snmp_agent.c, agent/agent_read_config.c,
+ include/net-snmp/agent/ds_agent.h, man/snmpd.conf.5.def
+:
+
+ Patch from darix to optionally turn off connection logging for tcp_wrappers
+
+2006-03-16 01:57 dts12
+
+ * agent/mibgroup/agent/extend.c:
+
+ Root second output table correctly
+
+2006-03-16 01:54 dts12
+
+ * agent/mibgroup/disman/event/mteTrigger.c:
+
+ Correct logic of startup tests
+
+2006-03-15 08:28 dts12
+
+ * agent/mibgroup/hardware/memory/memory_solaris.c:
+
+ Fix SC_AINFO swapctl() call.
+
+2006-03-15 05:55 dts12
+
+ * agent/mibgroup/disman/event/mteTriggerConf.c:
+
+ Recognise built-in versus config-defined notifications,
+ and set owner accordingly.
+
+2006-03-10 07:42 hardaker
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ don't use perfectly legal perl structures in C code
+
+2006-03-09 16:30 hardaker
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ fix typos
+
+2006-03-09 16:27 hardaker
+
+ * agent/mibgroup/disman/schedule/schedCore.c:
+
+ fix schedule typo
+
+2006-03-09 14:00 hardaker
+
+ * snmplib/snmp_api.c:
+
+ free malloc in error condition when decode function not specified
+
+2006-03-09 13:53 hardaker
+
+ * snmplib/: snmp_client.c, snmpv3.c:
+
+ ensure that if op == received message that we have a PDU too (always will be the case)
+
+2006-03-09 13:40 hardaker
+
+ * snmplib/snmp_api.c:
+
+ dont delve into future if statement when session fails to probe
+
+2006-03-09 13:36 hardaker
+
+ * snmplib/snmp_client.c:
+
+ free a pdu on the error case of no session...
+
+2006-03-09 13:33 hardaker
+
+ * snmplib/vacm.c:
+
+ reverse a patch that was trying to free an array
+
+2006-03-09 13:31 hardaker
+
+ * snmplib/snmpCallbackDomain.c:
+
+ coverity 75: ensure free in rare case where other side of transport not found (shouldn't ever happen)
+
+2006-03-09 13:28 hardaker
+
+ * snmplib/snmpv3.c:
+
+ misc error checking (unneeded by other logic, but... why not)
+
+2006-03-09 13:13 hardaker
+
+ * snmplib/snmpusm.c:
+
+ coverity 34: check that usm wasn't actually illegally passed a null session (should have been stopped long before now)
+
+2006-03-09 13:03 hardaker
+
+ * snmplib/vacm.c:
+
+ coverity multiple: check a few pointers for null refs just in case
+
+2006-03-09 12:55 hardaker
+
+ * snmplib/: text_utils.c, vacm.c:
+
+ coverity 79: free memory in error condition spots
+
+2006-03-09 12:44 hardaker
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ allow for questionably legal null community strings
+
+2006-03-09 12:37 hardaker
+
+ * agent/snmp_agent.c:
+
+ coverity 61: check return value from in tree to ensure it's not negative
+
+2006-03-09 12:24 hardaker
+
+ * agent/agent_trap.c:
+
+ coverity 80: free vblist in some failure cases
+
+2006-03-09 10:38 hardaker
+
+ * agent/mibgroup/hardware/memory/hw_mem.c:
+
+ coverity 83: free mem on should-never-get-here spot
+
+2006-03-09 10:30 hardaker
+
+ * agent/helpers/table_tdata.c:
+
+ free memory on other malloc failures
+
+2006-03-09 10:26 hardaker
+
+ * dist/patme:
+
+ more command line flags for faster patch application
+
+2006-03-09 10:24 hardaker
+
+ * agent/mibgroup/disman/schedule/schedCore.c:
+
+ check for null owner in 2 other spots
+
+2006-03-09 10:13 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ coverity 97/48: free lost memory on illegal table; check for null that shouldn't ever be
+
+2006-03-09 10:03 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ coverity 96: fix potential leak when malloc fails
+
+2006-03-09 10:00 hardaker
+
+ * agent/helpers/stash_cache.c:
+
+ free a handler if a subsequence malloc fails
+
+2006-03-09 09:57 hardaker
+
+ * agent/mibgroup/agent/nsModuleTable.c:
+
+ coverity 98-100: free success mallocs when one fails
+
+2006-03-09 09:52 hardaker
+
+ * agent/mibgroup/agent/nsTransactionTable.c:
+
+ coverity 102/101: in case of malloc failures free what you have succeed in mallocing
+
+2006-03-09 09:44 hardaker
+
+ * agent/mibgroup/notification/snmpNotifyFilterProfileTable.c:
+
+ double check that never-should-be-null conditions are true
+
+2006-03-09 09:39 hardaker
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ coverity 91: free various memory allocations when subsequent allocations fail
+
+2006-03-09 09:31 hardaker
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ coverity #41: not likely a real null deref for valid use cases; cases. double check for issues anyway
+
+2006-03-09 09:29 dts12
+
+ * agent/mibgroup/hardware/memory/memory_solaris.c:
+
+ Fuller implementation of memory HAL for Solaris (10 at least)
+
+2006-03-09 08:38 hardaker
+
+ * agent/mibgroup/agent/extend.c:
+
+ coverity 50: double check we could find the extension to remove
+
+2006-03-09 08:35 hardaker
+
+ * agent/mibgroup/agent/extend.c:
+
+ coverity 51: double check we could find the extension to remove
+
+2006-03-09 08:25 hardaker
+
+ * agent/mibgroup/agent/extend.c:
+
+ ensure illegal configuration of too long OIDs doesn't occur
+
+2006-03-09 08:19 hardaker
+
+ * agent/mibgroup/ucd-snmp/dlmod.c:
+
+ coverity 66: check that null isn't written beyond end
+
+2006-03-09 08:15 hardaker
+
+ * dist/net-snmp.spec, agent/mibgroup/ucd-snmp/dlmod.c:
+
+ coverity 67: ensure we don't write the null beyond the end of the buffer
+
+2006-03-09 08:07 hardaker
+
+ * dist/patme:
+
+ a script to help automatted patch management and apply patches to multiple braches of the net-snmp tree
+
+2006-03-09 08:05 hardaker
+
+ * agent/mibgroup/utilities/override.c:
+
+ coverity 92: free data structure in event somehow an unsupported data type is passed in (can't actually happen with current code)
+
+2006-03-09 08:03 hardaker
+
+ * agent/mibgroup/utilities/override.c:
+
+ coverity 93: free pointers where malloc succeeded if it suddenly stopped succeeding
+
+2006-03-09 07:33 hardaker
+
+ * apps/snmptrapd_handlers.c:
+
+ typo
+
+2006-03-09 07:31 hardaker
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c:
+
+ coverity #105: free storage in error loop
+
+2006-03-08 21:47 hardaker
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ coverity 52: rare (never) dereference in illegal code cases.
+
+2006-03-08 21:40 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ coverity 106: rare memory leak on illegal agentx pdu's being passed to the client
+
+2006-03-08 21:32 hardaker
+
+ * agent/mibgroup/ip-mib/data_access/arp_linux.c:
+
+ coverity 112: close file handle for /proc/net/arp
+
+2006-03-08 21:24 hardaker
+
+ * agent/mibgroup/ip-mib/data_access/systemstats_linux.c:
+
+ coverity bug #113: fclose an open file descriptor in error loop
+
+2006-03-08 16:13 hardaker
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ coverity bug #53: check that close_agentx_session wasn't passed a NULL session
+
+2006-03-08 16:04 hardaker
+
+ * agent/mibgroup/agentx/master.c:
+
+ coverity #107: fix rare pdu memory leak when function called illegaly
+
+2006-03-08 16:03 tanders
+
+ * agent/mibgroup/versiontag:
+
+ *at least* issue a WARNING if we'll create non-portable tar archives just because the release manager failed to install star.
+
+2006-03-08 15:58 hardaker
+
+ * agent/mibgroup/hardware/cpu/cpu.c:
+
+ coverity bug #108: still should free memory in the never-should-happen case
+
+2006-03-08 15:52 hardaker
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ coverity #109: close file pointer in error condtions to avoid potential rare leaks
+
+2006-03-08 15:10 rstory
+
+ * agent/helpers/instance.c:
+
+ coverity bug 85, r15: fix potential memory leak
+
+2006-03-08 14:48 rstory
+
+ * agent/helpers/table_array.c:
+
+ - coverity bug 40, run 15: fix potential null dereference
+ - misc other cleanup/error handling
+ - release memory that won't be used before returning errors
+ - check for potential null return from function
+ - assign values to correct variable
+
+2006-03-08 14:25 hardaker
+
+ * apps/snmptrapd_handlers.c:
+
+ coverity bug # 129: check session open results when forwarding and bail if failed to open
+
+2006-03-08 14:19 hardaker
+
+ * agent/mibgroup/header_complex.c:
+
+ coverity bug # check for null before dereferencing
+
+2006-03-08 14:11 hardaker
+
+ * agent/mibgroup/utilities/override.c:
+
+ coverity bug # 115: check for malloc failure before using the results
+
+2006-03-08 13:54 hardaker
+
+ * agent/mibgroup/snmpv3/usmUser.c:
+
+ coverity bug # 116: check (anyway) for null in variables that should never be null
+
+2006-03-08 13:44 hardaker
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ coverity bug #117: double check that pointer isn't null for safe programming (should never happen)
+
+2006-03-08 13:39 hardaker
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ coverity bug #118: double check that pointer isn't null for safe programming (should never happen)
+
+2006-03-08 13:29 hardaker
+
+ * agent/agent_registry.c:
+
+ coverity bug #120: avoid a possible deference to a freed variable
+
+2006-03-08 13:01 hardaker
+
+ * snmplib/snmpUnixDomain.c:
+
+ coverity bug #122: return NULL after failing to open transport.
+
+2006-03-08 12:45 hardaker
+
+ * agent/helpers/table.c:
+
+ coverity bug #123: avoid double free for long OID cases during getnext
+
+2006-03-08 10:51 rstory
+
+ * agent/mibgroup/versiontag:
+
+ check for star before using
+
+2006-03-08 10:48 rstory
+
+ * dist/cvsup:
+
+ use star if available
+
+2006-03-08 06:51 hardaker
+
+ * snmplib/mib.c:
+
+ fix a very rare oid parsing bug for strings in truncated OIDs
+
+2006-03-08 06:09 dts12
+
+ * agent/mibgroup/hardware/memory/memory_win.c:
+
+ Windows version of memory HAL interface
+
+2006-03-08 06:07 dts12
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ Extra protection when compiling under Windows
+
+2006-03-07 22:55 hardaker
+
+ * agent/mibgroup/mibII/vacm_context.c:
+
+ coverity bug #104: rare case memory leak if you're out of memory in the first place
+
+2006-03-07 22:46 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ coverity bugs #119 initialize 2 pointers to 0
+
+2006-03-07 22:32 hardaker
+
+ * apps/snmpusm.c:
+
+ coverity bug #132: free various pointers in error loops
+
+2006-03-07 22:24 hardaker
+
+ * apps/snmpusm.c:
+
+ coverity bug #133: free key after malloc in exit loop after openssl failed
+
+2006-03-07 22:18 hardaker
+
+ * apps/snmptrapd_auth.c:
+
+ coverity bug #134: free newpdu during a vacm-not-configured bail-out
+
+2006-03-06 08:23 dts12
+
+ * agent/mibgroup/hardware/memory/hw_mem.c,
+ agent/mibgroup/hardware/memory/memory_aix.c,
+ agent/mibgroup/hardware/memory/memory_darwin.c,
+ agent/mibgroup/hardware/memory/memory_dynix.c,
+ agent/mibgroup/hardware/memory/memory_freebsd.c,
+ agent/mibgroup/hardware/memory/memory_hpux.c,
+ agent/mibgroup/hardware/memory/memory_linux.c,
+ agent/mibgroup/hardware/memory/memory_netbsd.c,
+ agent/mibgroup/hardware/memory/memory_solaris.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/ucd-snmp/memory.c,
+ include/net-snmp/agent/hardware/memory.h:
+
+ Update Memory HAL framework to support HostRes storage
+ information, and tweak hrStorageTable implementation to use it.
+ This has been tested on {Free,Net,Open}BSD, Linux and HP-UX.
+ It's probably still broken on AIX, Darwin, Dynix and Solaris
+ (and any system not explicitly mentioned?)
+
+2006-03-06 03:55 dts12
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ Fix retrieval of filesystem information on NetBSD
+
+2006-03-06 03:32 dts12
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ Support UCD memory/cpu MIBs on OpenBSD 3.x
+
+2006-02-27 04:14 dts12
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ Tweak UCD memory configure processing to work with the most recent
+ OpenBSD and NetBSD releases, and to use the memory HAL
+
+2006-02-27 04:12 dts12
+
+ * agent/mibgroup/hardware/memory.h:
+
+ Tweak memory HAL configure processing to work with the most recent
+ OpenBSD and NetBSD releases
+
+2006-02-27 04:10 dts12
+
+ * agent/mibgroup/hardware/memory/: memory_freebsd.c,
+ memory_netbsd.c:
+
+ Fix problems with memory HAL code on *BSD systems
+
+2006-02-27 04:07 dts12
+
+ * agent/mibgroup/ucd-snmp/: memory.c, memory.h:
+
+ Update UCD memory group to make proper use of memory HAL routines
+
+2006-02-27 04:04 dts12
+
+ * include/net-snmp/agent/hardware/memory.h:
+
+ Update definitions to match new memory HAL code
+
+2006-02-24 08:31 dts12
+
+ * agent/mibgroup/: ucd_snmp.h, ucd-snmp/memory.c,
+ ucd-snmp/memory.h:
+
+ Use memory HAL for the UCD memory group (all architectures).
+ This will probably break the agent on all bar Linux systems
+ and make everyone (including Thomas) unhappy.
+ So the cycle of life continues. Oh Fortuna....
+
+2006-02-24 08:27 dts12
+
+ * agent/mibgroup/hardware/: memory.h, memory/memory_aix.c
+, memory/memory_darwin.c, memory/memory_dynix.c,
+ memory/memory_freebsd.c, memory/memory_hpux.c,
+ memory/memory_linux.c, memory/memory_netbsd.c,
+ memory/memory_solaris.c:
+
+ Extend memory HAL to cover all (well, most) supported architectures.
+ Not yet tested on most of these systems, so there may easily be problems.
+ But at least this should serve to keep Thomas happy....
+
+2006-02-22 08:59 dts12
+
+ * agent/mibgroup/disman/expr/: expErrorTable.c,
+ expExpression.c, expExpression.h, expExpressionConf.c
+, expExpressionConf.h, expExpressionTable.c,
+ expObject.c, expValue.c, expValue.h,
+ expValueTable.c, exp_enum.h:
+
+ Improved expression parsing, and preliminary evaluation of expressions.
+
+2006-02-20 15:44 tanders
+
+ * README.solaris:
+
+ Remove historic references to tar problems (at even more places)
+
+2006-02-20 15:38 tanders
+
+ * README.solaris:
+
+ Remove historic paragraph on tar problems:-)
+
+2006-02-20 15:22 tanders
+
+ * agent/mibgroup/versiontag:
+
+ (further) clarify the original GNU tar problems
+
+2006-02-20 09:58 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ use star instead of tar for creating archives to get around gnu tar incompatibilities
+
+2006-02-17 07:14 rstory
+
+ * agent/mibgroup/tunnel/tunnel.c:
+
+ -fix bug 1399421: 5.2+: tunnel mib fails to build w/ if-mib rewrite
+
+2006-02-16 15:19 tanders
+
+ * testing/tests/: T035snmpv3trapdusermgmt, T049snmpv3inform
+, T049snmpv3informauth, T049snmpv3informpriv,
+ T052snmpv2cinform, T057trapdauthtest,
+ T057trapdauthtest2, T057trapdauthtest3,
+ T059trapdtraphandle, T060trapdperl:
+
+ add "-t $SNMP_SLEEP" to snmpinform in order to avoid test failures on slow machines even with an increased SNMP_SLEEP (fixes bug 1403688)
+
+2006-02-15 16:27 tanders
+
+ * testing/tests/: T054agentv2ctrap, T055agentv1mintrap,
+ T056agentv2cmintrap:
+
+ don't let snmptrapd open system agentx socket during testing (see bug 1424293)
+
+2006-02-15 16:02 tanders
+
+ * testing/tests/: T049snmpv3inform, T049snmpv3informauth
+, T049snmpv3informpriv, T050snmpv3trap,
+ T051snmpv2ctrap, T052snmpv2cinform, T053agentv1trap
+, T054agentv2ctrap, T056agentv2cmintrap,
+ T057trapdauthtest, T057trapdauthtest2,
+ T057trapdauthtest3, T058agentauthtrap,
+ T059trapdtraphandle, T060trapdperl:
+
+ don't let snmptrapd open system agentx socket during testing (see bug 1424293)
+
+2006-02-15 10:30 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ gettable: fix repeat count for SNMPv1 & fix -columns to actually work
+
+2006-02-14 06:40 dts12
+
+ * agent/mibgroup/if-mib/ifTable/: ifTable.c,
+ ifTable_constants.h:
+
+ Register ifNumber as a scalar object, not an instance, so that
+ it handles invalid instances properly, and fix OID registration.
+
+2006-02-13 17:42 alex_b
+
+ * README.win32:
+
+ Update PSDK download instructions.
+
+2006-02-13 15:53 rstory
+
+ * agent/mibgroup/if-mib/ifTable/: ifTable.c,
+ ifTable_constants.h:
+
+ fix bug 1399369: ifNumber broken
+
+2006-02-13 10:49 tanders
+
+ * NEWS:
+
+ add 5.3.0.1 security fix and smux trap patch
+
+2006-02-13 10:32 tanders
+
+ * agent/mibgroup/smux/smux.c:
+
+ fix trap processing from SMUX peers (patch 1430824 from Dell, submitted by SuSE)
+
+2006-02-13 07:41 tanders
+
+ * testing/TESTCONF.sh:
+
+ increase number of retries for port probing to lower the chance for spurious test failures
+
+2006-02-11 15:34 tanders
+
+ * testing/tests/T059trapdtraphandle:
+
+ set persistentDir for snmptrapd in order to avoid being invasive (see bugs 1403688, 1424293)
+
+2006-02-10 15:47 rstory
+
+ * agent/: snmp_agent.c, helpers/bulk_to_next.c,
+ helpers/instance.c:
+
+ - a tangled web of fixes for override
+ - back out fix for 711465: override directive ignored with snmpbulkget
+ - apply new fixes for 711465 (see bug report for gory details)
+ - also fix override of table instance, reported on coders
+ - and, quoting Dave:
+
+ I'm not at all sure that this is necessarily the correct fix, but
+ it wasn't very clear as to exactly what is being handled here.
+ This change certainly addresses the above bug report, without
+ seeming to break anything else.
+
+ Let's give this patch time to settle into the main development code,
+ and then consider back-porting it to earlier lines.....
+
+2006-02-06 15:36 tanders
+
+ * configure, configure.in:
+
+ add checks for "struct nlist64", off64_t and lseek64 (for IRIX and friends)
+
+2006-02-04 14:32 tanders
+
+ * dist/nsb-functions:
+
+ don't fail "make" on SNMP_ERR_NOERROR
+
+2006-02-03 17:32 tanders
+
+ * snmplib/snmpv3.c:
+
+ backing out previous patch (which breaks test #24 "SNMPv3 traps received and sent by tools") until someone finds the time to review it again
+
+2006-02-03 16:36 tanders
+
+ * testing/tests/Sv3usmconfigtrapd:
+
+ fix typo
+
+2006-02-02 19:31 alex_b
+
+ * apps/snmptrapd.c:
+
+ Fix for bug 1420758. Missing call (typo?) for FD_ZERO(&exceptfds).
+
+2006-02-02 14:08 rstory
+
+ * snmplib/mib.c:
+
+ - use tree_head if tree_top was NULL. handles both OID and name lookups
+
+2006-02-01 18:58 bshaw666
+
+ * agent/mibgroup/ucd-snmp/: lmSensors.c, lmSensors.h:
+
+ incorporate major patches by Mike Fisher and Tom E. Lackley
+
+2006-02-01 09:39 rstory
+
+ * snmplib/mib.c:
+
+ - revert changes from version 5.88, which broke parsing fully qualified
+ named OIDs (eg .iso.org). Another fix for parsing numeric OIDs before
+ MIB files are loaded needs to be investigated.
+
+2006-01-31 10:31 tanders
+
+ * man/: mib2c.extract.pl, snmpnetstat.1.def:
+
+ fix manual page formatting errors (Debian patch #17, original author Nicolas Francois)
+
+2006-01-31 09:27 alex_b
+
+ * win32/netsnmpmibssdk/netsnmpmibssdk.dsp:
+
+ Fix Begin source / end source lines. Bug 1404402.
+
+2006-01-31 04:51 dts12
+
+ * apps/: snmpdelta.c, snmptable.c,
+ snmptrapd_handlers.c, snmptrapd_log.c, snmpusm.c
+:
+
+ Fix assorted signedness mismatches.
+
+2006-01-31 04:10 dts12
+
+ * snmplib/: read_config.c, snmpCallbackDomain.c,
+ snmpUDPDomain.c, snmp_api.c, snmp_debug.c,
+ tools.c:
+
+ Fix assorted signedness mismatches.
+
+2006-01-30 04:07 dts12
+
+ * snmplib/: scapi.c, snmpv3.c:
+
+ Fix assorted unsigned comparisons against 0. (See Bug #1397891)
+
+2006-01-30 03:23 dts12
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c:
+
+ Correct improper use of 'netsnmp_hex_to_binary'
+ (My mistake, not Radek's)
+
+2006-01-30 03:18 dts12
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c:
+
+ Handle full-length IPv6 addresses. Fix supplied by Radek Vokál
+
+2006-01-30 01:52 dts12
+
+ * agent/snmpd.c:
+
+ Don't save persistent configuration until running user/group have been
+ reset. Based on patch #1371078.
+
+2006-01-30 01:45 dts12
+
+ * agent/snmp_agent.c:
+
+ Update handling of endOfMibView exceptions. Patch #1047706
+
+2006-01-30 01:35 dts12
+
+ * snmplib/read_config.c:
+
+ Support for reading/storing IP address values. Expanded from patch #107700
+
+2006-01-30 01:27 dts12
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ Don't release the response PDU prematurely, before trying to
+ extract OIDs from it. Patch #1277508.
+
+2006-01-30 01:26 tanders
+
+ * README.solaris:
+
+ fix PATH typo
+
+2006-01-27 11:42 rstory
+
+ * agent/mibgroup/if-mib/ifTable/: ifTable.h,
+ ifTable_interface.c:
+
+ do undo ref count via rowreq_ctx, not data_list
+
+2006-01-27 09:26 dts12
+
+ * include/net-snmp/library/snmp_api.h, perl/SNMP/SNMP.xs
+, snmplib/snmp_api.c, perl/SNMP/SNMP.pm:
+
+ Handle non-increasing OIDs during a (perl) bulkwalk.
+ Patch #1364650 from Ole Bjørn Hessen
+
+2006-01-27 03:07 dts12
+
+ * apps/snmpnetstat/if.c:
+
+ Handle missing values more gracefully.
+
+2006-01-26 09:02 dts12
+
+ * local/mib2c-conf.d/: generic-table-indexes-set.m2i,
+ mfd-access-container-cached-defines.m2i,
+ mfd-data-access.m2c, mfd-interface.m2c, mfd-top.m2c
+:
+
+ Apply Patch #1394068 to MfD generated templates.
+
+2006-01-25 08:25 dts12
+
+ * doxygen.conf, agent/agent_handler.c,
+ agent/agent_registry.c, agent/agent_trap.c,
+ agent/object_monitor.c, agent/snmp_agent.c,
+ agent/snmp_vars.c, agent/helpers/baby_steps.c,
+ agent/helpers/bulk_to_next.c, agent/helpers/cache_handler.c
+, agent/helpers/debug_handler.c,
+ agent/helpers/instance.c, agent/helpers/mode_end_call.c
+, agent/helpers/multiplexer.c,
+ agent/helpers/read_only.c, agent/helpers/row_merge.c
+, agent/helpers/scalar.c,
+ agent/helpers/scalar_group.c, agent/helpers/serialize.c
+, agent/helpers/stash_cache.c,
+ agent/helpers/stash_to_next.c, agent/helpers/table_array.c
+, agent/helpers/table_container.c,
+ agent/helpers/table_data.c, agent/helpers/table_dataset.c
+, agent/helpers/table_tdata.c,
+ agent/helpers/watcher.c,
+ agent/mibgroup/examples/netSnmpHostsTable_checkfns.c,
+ agent/mibgroup/examples/netSnmpHostsTable_checkfns_local.c,
+ agent/mibgroup/examples/notification.c,
+ agent/mibgroup/if-mib/data_access/interface.c,
+ agent/mibgroup/if-mib/data_access/interface_ioctl.c,
+ agent/mibgroup/if-mib/ifTable/ifTable.c,
+ agent/mibgroup/if-mib/ifTable/ifTable.h,
+ agent/mibgroup/if-mib/ifTable/ifTable_data_access.c,
+ agent/mibgroup/if-mib/ifTable/ifTable_interface.h,
+ agent/mibgroup/if-mib/ifXTable/ifXTable.c,
+ agent/mibgroup/if-mib/ifXTable/ifXTable.h,
+ agent/mibgroup/if-mib/ifXTable/ifXTable_data_access.c,
+ agent/mibgroup/if-mib/ifXTable/ifXTable_interface.h,
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.c
+,
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+,
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.c
+,
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h
+,
+ agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c
+,
+ agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+,
+ agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.c
+,
+ agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.h
+, agent/mibgroup/ip-mib/data_access/ipaddress_common.c
+,
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.c
+,
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+,
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.c
+,
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h
+,
+ agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable.c
+,
+ agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable.h
+,
+ agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c
+,
+ agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_interface.h
+, agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c
+, agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+,
+ agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c
+,
+ agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.h
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h
+,
+ agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.c
+,
+ agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.h
+,
+ agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_data_access.c
+,
+ agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.h
+,
+ agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable.c
+,
+ agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable.h
+,
+ agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_data_access.c
+,
+ agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.h
+, agent/mibgroup/mibII/vacm_conf.c,
+ agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.c
+,
+ agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+,
+ agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.c
+,
+ agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable.c
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_access.c
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_get.c
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.c
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_interface.h
+,
+ agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.c
+,
+ agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h
+,
+ agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.c
+,
+ agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.h
+, agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.c
+, agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h
+,
+ agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.c
+,
+ agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.h
+, agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c
+, agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.c
+, agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h
+,
+ agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.c
+,
+ agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_interface.h
+, include/net-snmp/agent/object_monitor.h,
+ include/net-snmp/agent/table_iterator.h,
+ include/net-snmp/library/tools.h, snmplib/callback.c
+, snmplib/container_null.c, snmplib/data_list.c
+, snmplib/default_store.c, snmplib/int64.c,
+ snmplib/mib.c, snmplib/oid_stash.c,
+ snmplib/read_config.c, snmplib/snmp_api.c,
+ snmplib/snmp_logging.c, snmplib/text_utils.c,
+ snmplib/tools.c:
+
+ Comprehensive review of in-line documentation.
+ A most impressive effort by Nazim Baizid (Patch #1394068)
+
+2006-01-25 07:37 dts12
+
+ * agent/agent_registry.c:
+
+ Don't be in such a rush to release MIB registration structure.
+ See Patch #1386528
+
+2006-01-25 07:30 dts12
+
+ * agent/mibgroup/mibII/udpTable.c:
+
+ Additional debugging info
+
+2006-01-24 08:21 dts12
+
+ * snmplib/snmp_api.c:
+
+ Release memory before re-allocating it. See Patch #1407173
+
+2006-01-24 08:02 dts12
+
+ * perl/SNMP/SNMP.xs:
+
+ Improved/fixed perl warnings. See Patch #1334598
+
+2006-01-24 06:40 dts12
+
+ * perl/SNMP/SNMP.xs:
+
+ Check "TimeStamp" reference before use (in line with
+ the other occurances in this file). See Bug #1375282
+
+2006-01-24 06:31 dts12
+
+ * agent/mibgroup/disman/event/mteTrigger.c:
+
+ Check for missing monitored values (see Bug #1404605)
+
+2006-01-24 05:47 dts12
+
+ * testing/tests/Sv3config:
+
+ Don't override an explicit DEFPRIVTYPE setting,
+ even if the library doesn't support encryption.
+
+2006-01-24 01:51 tanders
+
+ * configure, configure.in:
+
+ replace "==" by "=" when using "test" (reported by Magnus Fromreide)
+
+2006-01-23 07:05 dts12
+
+ * apps/: snmptrapd_handlers.c, snmptrapd_handlers.h:
+
+ New handler to forward traps via the AgentX master agent.
+
+2006-01-20 15:16 tanders
+
+ * NEWS, apps/snmpusm.c, man/snmpusm.1.def:
+
+ introduce new snmpusm option -Cp to set usmUserPublic value
+
+2006-01-20 09:01 dts12
+
+ * testing/: TESTCONF.sh, tests/T035snmpv3trapdusermgmt
+, tests/T110agentxget, tests/T111agentxset,
+ tests/T112agentxsetfail, tests/T113agentxtrap,
+ tests/T120proxyget, tests/T121proxyset,
+ tests/T122proxysetfail:
+
+ Modular approach for probing to detect free ports. See Bug #1335767
+
+2006-01-18 16:06 tanders
+
+ * NEWS, apps/snmpusm.c:
+
+ Avoid expensive generate_Ku() if newpass is a localized key (instead of a passphrase). Makes a huge performance improvement then.
+
+2006-01-18 11:34 rstory
+
+ * dist/Makefile:
+
+ use base arch (eg i386, not i686); use RPM_BASE for topdir
+
+2006-01-18 08:27 dts12
+
+ * dist/net-snmp.spec:
+
+ Register RPMs as being built by the Net-SNMP project.
+
+2006-01-18 08:21 rstory
+
+ * dist/net-snmp.spec:
+
+ add beecrypt-devel, elfutils-libelf-devel to BuildRequires
+
+2006-01-18 07:35 rstory
+
+ * dist/Makefile:
+
+ restore file (looks like VersionMunge nuked it?); bump version to 5.4.dev
+
+2006-01-18 07:18 tanders
+
+ * apps/encode_keychange.c:
+
+ fix typo
+
+2006-01-17 07:55 dts12
+
+ * include/net-snmp/library/mib.h, snmplib/mib.c:
+
+ Remove references to obsolete (and missing) routine. See Bug #1011051
+
+2006-01-17 06:26 dts12
+
+ * snmplib/parse.c:
+
+ Recognise range parsing errors properly.
+
+2006-01-15 11:55 rstory
+
+ * agent/mibgroup/ip-mib/:
+ ipv4InterfaceTable/ipv4InterfaceTable_interface.c,
+ ipv6InterfaceTable/ipv6InterfaceTable_interface.c:
+
+ - better cooperation for interface tables using shared container
+ - use one dirty variable
+ - use new ref counting undo alloc/free function from ifTable
+
+2006-01-15 06:16 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ remove undo ifentry handling (done elsewhere)
+
+2006-01-15 06:11 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_interface.c:
+
+ - move undo ifentry handling here
+ - add reference counting for undo
+
+2006-01-15 06:07 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.c:
+
+ move undo ifentry handling into interface
+
+2006-01-13 17:05 hardaker
+
+ * testing/tests/T030snmpv3usercreation:
+
+ allow write support for new user to test pasword changes
+
+2006-01-13 15:23 rstory
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ fix bitwise test to use bitwise macros
+
+2006-01-13 08:40 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.c:
+
+ don't double allocate undo ifentry
+
+2006-01-13 08:31 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ - move all refs to undo promisc mode inside promisc set enable ifdefs
+ - if promisc mode set enabled, make sure to allocate undo ifentry
+
+2006-01-13 07:52 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ - correct proc path for base reachable time
+ - use correct flag for base reachable availability
+ - actually put base reachable time in ifentry after reading it
+
+2006-01-11 15:26 tanders
+
+ * agent/mibgroup/mibII/at.c, include/net-snmp/system/irix.h
+:
+
+ IRIX atTable fix: use sysctl() instead of nlist() to support
+ IRIX *and* IRIX64 kernels at once and not require /dev/kmem access
+ (proposed by Herve Boulouis)
+
+2006-01-11 14:09 tanders
+
+ * man/snmptrapd.8.def:
+
+ s/the agent/snmptrapd/
+
+2006-01-11 14:05 tanders
+
+ * configure:
+
+ run autoconf
+
+2006-01-11 13:37 tanders
+
+ * FAQ:
+
+ fix accidental mangling
+
+2006-01-11 12:40 tanders
+
+ * snmplib/parse.c:
+
+ - build fix: #include <limits.h> to cover recently introduced LONG_MAX
+ - wrap "#if HAVE_SYS_STAT_H" around "#include <sys/stat.h>"
+ - remove old changelog from the top of the file
+
+2006-01-11 08:38 dts12
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ SET support for manipulating the routing table isn't really implemented
+ properly (except on Cygwin), so we shouldn't pretend it is.
+
+2006-01-11 08:32 dts12
+
+ * snmplib/snmpUDPDomain.c:
+
+ Reduce reliance on (non-thread-safe) gethostbyname. See Bug #839675
+
+2006-01-11 08:00 dts12
+
+ * snmplib/parse.c:
+
+ Downgrade upper-bound parsing problems to a warning - keep TrogL happy:-)
+ Don't think the check is quite right yet though:-(
+
+2006-01-11 07:17 dts12
+
+ * local/mib2c.table_data.conf:
+
+ Bring code template into line with final helper API.
+
+2006-01-11 07:09 dts12
+
+ * net-snmp-config.in:
+
+ Correct a misleading comment.
+
+2006-01-11 07:02 dts12
+
+ * snmplib/parse.c:
+
+ Associate MIB node types with the *last* entry parsed from the
+ definition value, not the first. Fixes problem with MIB definitions
+ that use intermediate subidentifiers (see bug #759412)
+
+2006-01-11 06:54 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Clarify the behaviour of netsnmp_table_dataset_remove_row()
+
+2006-01-10 13:45 tanders
+
+ * perl/TrapReceiver/TrapReceiver.xs:
+
+ fix format string bug (reported by darix on IRC)
+
+2006-01-10 08:35 dts12
+
+ * agent/snmp_agent.c:
+
+ Don't retry "out of range" responses unless there's actually a value
+ to be out of range. This proved to be the underlying cause of GetBulk
+ requests failing to handle instance-based registrations, such as
+ "override" directives (See Bug #711465)
+
+ I'm not at all sure that this is necessarily the correct fix, but
+ it wasn't very clear as to exactly what is being handled here.
+ This change certainly addresses the above bug report, without
+ seeming to break anything else.
+
+ Let's give this patch time to settle into the main development code,
+ and then consider back-porting it to earlier lines.....
+
+2006-01-10 03:07 tanders
+
+ agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.c
+:
+
+ C89 compiler build fix (bug 1398545) part 2: "A declaration cannot appear after an executable statement in a block."
+
+2006-01-09 17:41 tanders
+
+ agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.c
+:
+
+ C89 compiler build fix (bug 1398545)
+
+2006-01-09 17:11 tanders
+
+ * agent/mibgroup/mibII/mibII_common.h:
+
+ IRIX 6.5 build fix: don't include sys/socketvar.h because it's not needed and _KMEMUSER breaks the build
+
+2006-01-09 17:05 tanders
+
+ * configure.in:
+
+ fix IRIX 6.5 "present but cannot be compiled" warning for sys/vnode.h and sys/hashing.h
+
+2006-01-09 13:53 rstory
+
+ * include/ucd-snmp/.cvsignore:
+
+ don't ignore ucd-snmp-config.h, since it's no longer a generated file
+
+2006-01-09 13:38 tanders
+
+ * configure, configure.in:
+
+ revert to --disable-ucd-snmp-compatibility being the default again
+
+2006-01-09 11:04 rstory
+
+ * dist/nsb-nightly:
+
+ include all err logs in results
+
+2006-01-09 09:29 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_data_access.c:
+
+ restore lost ifLastChange tracking
+
+2006-01-09 07:06 dts12
+
+ * man/netsnmp_Container_iterator.3, man/netsnmp_agent.3
+, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3
+, man/netsnmp_baby_steps.3,
+ man/netsnmp_bulk_to_next.3, man/netsnmp_cache_handler.3
+, man/netsnmp_callback.3, man/netsnmp_container.3
+, man/netsnmp_data_list.3, man/netsnmp_debug.3
+, man/netsnmp_default_store.3, man/netsnmp_handler.3
+, man/netsnmp_instance.3,
+ man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3,
+ man/netsnmp_library.3, snmplib/container_null.c,
+ agent/helpers/all_helpers.c, agent/helpers/baby_steps.c
+, agent/helpers/bulk_to_next.c,
+ agent/helpers/cache_handler.c,
+ agent/helpers/debug_handler.c, agent/helpers/instance.c
+, agent/helpers/mode_end_call.c,
+ agent/helpers/multiplexer.c, agent/helpers/old_api.c
+, agent/helpers/read_only.c,
+ agent/helpers/row_merge.c, agent/helpers/scalar.c,
+ agent/helpers/scalar_group.c, agent/helpers/serialize.c
+, agent/helpers/stash_cache.c,
+ agent/helpers/stash_to_next.c, agent/helpers/table.c
+, agent/helpers/table_array.c,
+ agent/helpers/table_container.c,
+ agent/helpers/table_data.c, agent/helpers/table_dataset.c
+, agent/helpers/table_generic.c,
+ agent/helpers/table_iterator.c,
+ agent/helpers/table_tdata.c, agent/helpers/watcher.c
+, man/netsnmp_mib_maintenance.3,
+ man/netsnmp_mib_utilities.3, man/netsnmp_mode_end_call.3
+, man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3
+, man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3
+, man/netsnmp_snmp_client.3,
+ man/netsnmp_snmp_logging.3, man/netsnmp_snmp_pdu.3,
+ man/netsnmp_snmp_session.3, man/netsnmp_stash_cache.3
+, man/netsnmp_stash_to_next.3, man/netsnmp_table.3
+, man/netsnmp_table_array.3,
+ man/netsnmp_table_container.3, man/netsnmp_table_data.3
+, man/netsnmp_table_dataset.3,
+ man/netsnmp_table_generic.3, man/netsnmp_table_indexes.3
+, man/netsnmp_table_iterator.3,
+ man/netsnmp_table_maintenance.3, man/netsnmp_table_rows.3
+, man/netsnmp_tdata.3, man/netsnmp_util.3,
+ man/netsnmp_utilities.3, man/netsnmp_variable_list.3
+, man/netsnmp_watcher.3:
+
+ Adjust doxygen "defgroup" comments to improve auto-generated man page format.
+ See bug #835321
+
+2006-01-09 05:01 dts12
+
+ * snmplib/parse.c:
+
+ Report failure to parse ranges correctly (Bug #411594/757121)
+
+2006-01-06 15:15 tanders
+
+ * agent/mibgroup/mibII/udpTable.c:
+
+ fix udpTable on Solaris/x86: host byte order for udpLocalPort (bug 1393197)
+
+2006-01-06 13:26 rstory
+
+ * agent/mibgroup/ip-forward-mib/inetCidrRouteTable/:
+ inetCidrRouteTable.c, inetCidrRouteTable_constants.h
+:
+
+ - add instance handler for inetCidrRouteNumber
+
+2006-01-06 09:43 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ - subtract multicast packets from total packets for unicast packets
+ (there is no broadcast packet counter to subtract)
+
+2006-01-05 16:21 tanders
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ fix multiple <netinet/tcp_var.h> inclusion (bug 1396639, IRIX build fix)
+
+2006-01-05 15:58 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c:
+
+ - don't save/restore promiscuous mode
+
+2006-01-05 15:56 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ - update to report proper value from promiscuous mode
+
+2006-01-05 15:48 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable_constants.h:
+
+ - clear promiscuous mode from settable flags
+
+2006-01-05 15:41 rstory
+
+ * dist/net-snmp.spec:
+
+ bump library version number in provides
+
+2006-01-05 15:37 rstory
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.4.dev )
+
+2006-01-05 15:37 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.4.dev )
+
+2006-01-05 15:37 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.4.dev )
+
+2006-01-05 15:37 rstory
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.4.dev )
+
+2006-01-05 15:37 rstory
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.4.dev )
+
+2006-01-05 15:37 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.4.dev )
+
+2006-01-05 15:36 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.4.dev )
+
+2006-01-05 15:36 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.4.dev )
+
+2006-01-05 15:36 rstory
+
+ * dist/Makefile:
+
+ - (dist/Makefile): version tag ( 5.4.dev )
+
+2006-01-05 15:36 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.4.dev )
+
+2006-01-05 15:36 rstory
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.4.dev )
+
+2006-01-05 15:36 rstory
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.4.dev )
+
+2006-01-05 15:35 rstory
+
+ * README:
+
+ - (README): version tag ( 5.4.dev )
+
+2006-01-05 15:35 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.4.dev )
+
+2006-01-05 15:28 rstory
+
+ * Makefile.top:
+
+ bump LIBCURRENT version
+
+2006-01-05 15:26 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.h:
+
+ - delete unused dummy var (struct size change ok in unreleased branches)
+
+2006-01-05 15:24 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.h:
+
+ - point promiscuous mode refs to interface entry value
+ - rename old var (don't delete, so struct size doesn't change)
+
+2006-01-05 15:15 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ set promiscuous flag for interfaces
+
+2006-01-05 15:06 rstory
+
+ * local/mib2c-conf.d/mfd-persistence.m2i:
+
+ add missing \n to log msgs
+
+2006-01-05 08:30 dts12
+
+ * local/mib2c.old-api.conf:
+
+ Display correct MIB group names in comments. (Bug #1076655)
+
+2006-01-04 15:06 tanders
+
+ * agent/mibgroup/disman/event/: mteEventConf.c,
+ mteObjectsConf.c, mteTrigger.c, mteTriggerConf.c
+:
+
+ get rid of C++ comments
+
+2006-01-02 16:04 tanders
+
+ * configure.in, configure:
+
+ fix minor typos
+
+2006-01-02 15:40 tanders
+
+ * configure.in, configure:
+
+ --disable-ucd-snmp-compatibility and --enable-ucd-snmp-compatibility=no now actually *disable* UCD-SNMP compatibility instead of enabling it
+
+2005-12-30 20:36 rstory
+
+ * agent/helpers/table_dataset.c:
+
+ - set up len for parse index hack for fixed length str/oid indexes
+
+2005-12-30 20:35 rstory
+
+ * snmplib/mib.c:
+
+ - parse index hack for multiple fixed length str/oid indexes
+
+2005-12-30 18:05 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ add step for creating patches branch for new releases
+
+2005-12-30 11:42 alex_b
+
+ * Makefile.in:
+
+ Remove docsmunge as it is no longer needed by the web site.
+
+2005-12-29 21:38 alex_b
+
+ * local/html-textfile-fix.pl:
+
+ Adds some HTML entities to the text files to prevent missing characters
+ when including in HTML.
+
+2005-12-28 11:10 rstory
+
+ * ChangeLog:
+
+ version update
+
+-------------------------------------------------------------------------------
+
+Changes: V5.2 -> V5.3
+
+2005-12-28 12:49 rstory
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.3 )
+
+2005-12-28 12:49 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.3 )
+
+2005-12-28 12:49 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.3 )
+
+2005-12-28 12:49 rstory
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.3 )
+
+2005-12-28 12:48 rstory
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.3 )
+
+2005-12-28 12:48 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.3 )
+
+2005-12-28 12:48 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.3 )
+
+2005-12-28 12:48 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.3 )
+
+2005-12-28 12:48 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.3 )
+
+2005-12-28 12:48 rstory
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.3 )
+
+2005-12-28 12:47 rstory
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.3 )
+
+2005-12-28 12:47 rstory
+
+ * README:
+
+ - (README): version tag ( 5.3 )
+
+2005-12-28 12:47 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.3 )
+
+2005-12-28 12:41 rstory
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3
+, netsnmp_agent_registry.3, netsnmp_agent_trap.3
+, netsnmp_asn1_packet_parse.3, netsnmp_baby_steps.3
+, netsnmp_bulk_to_next.3, netsnmp_cache_handler.3
+, netsnmp_callback.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_default_store.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_container.3,
+ netsnmp_table_data.3, netsnmp_table_dataset.3,
+ netsnmp_table_iterator.3, netsnmp_util.3,
+ netsnmp_utilities.3, netsnmp_variable_list.3,
+ netsnmp_watcher.3:
+
+ documentation update
+
+2005-12-28 12:20 rstory
+
+ * configure, configure.in:
+
+ version update
+
+2005-12-27 17:06 tanders
+
+ * README.agent-mibs:
+
+ Last-minute update for 5.3:
+ - ucd-snmp/lmSensors implements LM-SENSORS-MIB, not UCD-SNMP-MIB!
+ - disman/schedule now ships with 5.3
+
+2005-12-27 16:45 tanders
+
+ * FAQ:
+
+ Last-minute updates for 5.3:
+ - remove two mirror servers that don't exist anymore
+ - tweak list of supported platforms to list the better supported ones first
+ - fix snmptrapd examples to not use deprecated options
+ - mention the 5.3 snmptrapd authorization change
+ - mention that disman/event and host are enabled by default in 5.3
+ - mention disman/schedule MIB
+
+2005-12-21 06:08 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Minor tweaks.
+
+2005-12-21 04:31 dts12
+
+ * NEWS:
+
+ Correct the description of 'snmpnetstat' changes.
+ The status of the 5.3 line is *not* the same as the 5.2 version.
+
+2005-12-21 00:07 rstory
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.3.rc2 )
+
+2005-12-21 00:06 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.3.rc2 )
+
+2005-12-21 00:06 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.3.rc2 )
+
+2005-12-21 00:06 rstory
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.3.rc2 )
+
+2005-12-21 00:06 rstory
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.3.rc2 )
+
+2005-12-21 00:06 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.3.rc2 )
+
+2005-12-21 00:06 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.3.rc2 )
+
+2005-12-21 00:05 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.3.rc2 )
+
+2005-12-21 00:05 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.3.rc2 )
+
+2005-12-21 00:05 rstory
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.3.rc2 )
+
+2005-12-21 00:05 rstory
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.3.rc2 )
+
+2005-12-21 00:04 rstory
+
+ * README:
+
+ - (README): version tag ( 5.3.rc2 )
+
+2005-12-21 00:04 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.3.rc2 )
+
+2005-12-21 00:04 rstory
+
+ * ChangeLog:
+
+ version update
+
+2005-12-20 23:58 rstory
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3
+, netsnmp_agent_registry.3, netsnmp_agent_trap.3
+, netsnmp_asn1_packet_parse.3, netsnmp_baby_steps.3
+, netsnmp_bulk_to_next.3, netsnmp_cache_handler.3
+, netsnmp_callback.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_default_store.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_container.3,
+ netsnmp_table_data.3, netsnmp_table_dataset.3,
+ netsnmp_table_iterator.3, netsnmp_util.3,
+ netsnmp_utilities.3, netsnmp_variable_list.3,
+ netsnmp_watcher.3:
+
+ documentation update
+
+2005-12-20 23:40 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend
+, agent/mibgroup/Makefile.depend,
+ apps/Makefile.depend, snmplib/Makefile.depend:
+
+ make depend
+
+2005-12-20 23:15 rstory
+
+ * configure, configure.in:
+
+ version update
+
+2005-12-20 10:33 tanders
+
+ * local/mib2c.int_watch.conf:
+
+ fix bug 1386088: use LOG_ERR instead of LOG_ERROR
+
+2005-12-19 20:46 tanders
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ traps -> notifications
+
+2005-12-19 20:37 tanders
+
+ * man/snmptrapd.8.def:
+
+ fix typo
+
+2005-12-19 20:33 tanders
+
+ * man/snmpd.conf.5.def:
+
+ snmp_perl.pl *is* installed automatically (at least for me).
+
+2005-12-19 20:16 tanders
+
+ * man/snmp.conf.5.def:
+
+ get rid of "default default"
+
+2005-12-19 18:59 tanders
+
+ * apps/snmptrapd.c:
+
+ better help output for deprecated "-P"
+
+2005-12-19 05:35 dts12
+
+ * man/: snmp.conf.5.def, snmpcmd.1.def, snmpd.8.def
+, snmpd.conf.5.def, snmptrapd.8.def,
+ snmptrapd.conf.5.def:
+
+ General revision of command and configuration file documentation.
+
+2005-12-18 16:36 tanders
+
+ * man/snmptrapd.conf.5.def:
+
+ execute also covers embedded perl
+
+2005-12-18 16:30 tanders
+
+ * man/snmptrapd.conf.5.def:
+
+ doNotRetainTrapLogs -> doNotRetainNotificationLogs
+
+2005-12-14 11:40 dts12
+
+ * man/snmptrapd.conf.5.def:
+
+ Reworking of the trapd configuration documentation.
+
+2005-12-14 05:39 dts12
+
+ * apps/snmptrapd_auth.c:
+
+ Withdraw alternative "acceptAllTraps" directive.
+ (Keep it safe for another day).
+
+2005-12-13 07:50 tanders
+
+ * README.snmpv3:
+
+ our binary releases *do* support encryption
+
+2005-12-13 07:29 tanders
+
+ * README.snmpv3:
+
+ add AES
+
+2005-12-11 15:15 rstory
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.3.rc1 )
+
+2005-12-11 15:15 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.3.rc1 )
+
+2005-12-11 15:15 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.3.rc1 )
+
+2005-12-11 15:14 rstory
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.3.rc1 )
+
+2005-12-11 15:14 rstory
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.3.rc1 )
+
+2005-12-11 15:14 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.3.rc1 )
+
+2005-12-11 15:14 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.3.rc1 )
+
+2005-12-11 15:14 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.3.rc1 )
+
+2005-12-11 15:13 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.3.rc1 )
+
+2005-12-11 15:13 rstory
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.3.rc1 )
+
+2005-12-11 15:13 rstory
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.3.rc1 )
+
+2005-12-11 15:12 rstory
+
+ * README:
+
+ - (README): version tag ( 5.3.rc1 )
+
+2005-12-11 15:12 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.3.rc1 )
+
+2005-12-11 15:12 rstory
+
+ * ChangeLog:
+
+ version update
+
+2005-12-11 15:10 rstory
+
+ * agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, agent/Makefile.depend
+, apps/Makefile.depend, snmplib/Makefile.depend
+:
+
+ make depend
+
+2005-12-11 15:00 rstory
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3
+, netsnmp_agent_registry.3, netsnmp_agent_trap.3
+, netsnmp_asn1_packet_parse.3, netsnmp_baby_steps.3
+, netsnmp_bulk_to_next.3, netsnmp_cache_handler.3
+, netsnmp_callback.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_default_store.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_container.3,
+ netsnmp_table_data.3, netsnmp_table_dataset.3,
+ netsnmp_table_iterator.3, netsnmp_util.3,
+ netsnmp_utilities.3, netsnmp_variable_list.3,
+ netsnmp_watcher.3:
+
+ documentation update
+
+2005-12-11 14:13 nba
+
+ * agent/snmp_vars.c, agent/mibgroup/disman/event/mteEvent.c
+, agent/mibgroup/disman/event/mteEvent.h,
+ agent/mibgroup/disman/event/mteTrigger.c,
+ agent/mibgroup/disman/schedule/schedCore.c,
+ agent/mibgroup/disman/schedule/schedCore.h,
+ agent/mibgroup/ip-mib/ip_scalars.h, apps/snmptrapd_auth.c
+, snmplib/container_binary_array.c:
+
+ Add const and #include to fix warnings
+
+2005-12-11 13:54 rstory
+
+ * configure.in, configure:
+
+ version update
+
+2005-12-11 13:41 rstory
+
+ * agent/mibgroup/versiontag:
+
+ don't use CVSUSER if already in a cvs dir
+
+2005-12-11 13:25 rstory
+
+ * agent/mibgroup/testhandler.c:
+
+ advance next pointer before continue
+
+2005-12-11 12:55 rstory
+
+ * agent/mibgroup/: ip-mib/data_access/arp_common.c,
+ ip-mib/data_access/ipaddress_common.c,
+ tcp-mib/data_access/tcpConn_common.c,
+ udp-mib/data_access/udp_endpoint_common.c:
+
+ don't free the container if asked not to
+
+2005-12-11 12:18 rstory
+
+ * agent/helpers/table.c:
+
+ - fix 1362324: testhandler module causes infinite loop
+ - don't retry for ASN_NULL; this retries when the handler does nothing,
+ which is what we tell people to do at the end of a table.
+ - add comments
+
+2005-12-11 10:37 rstory
+
+ * apps/snmpnetstat/if.c:
+
+ change nested comment to ifdef 0
+
+2005-12-10 20:07 tanders
+
+ * dist/README.build-scripts:
+
+ fix typo
+
+2005-12-10 20:02 tanders
+
+ * dist/net-snmp-solaris-build/DEVENV:
+
+ cleanup
+
+2005-12-10 19:50 tanders
+
+ * dist/net-snmp-solaris-build/net-snmp-5.0.6-build:
+
+ replaced by updated buildpackage-solaris
+
+2005-12-10 19:41 tanders
+
+ * dist/net-snmp-solaris-build/: README, buildpackage-solaris
+:
+
+ script to create native Solaris packages, replaces net-snmp-5.0.6-build
+
+2005-12-10 18:50 tanders
+
+ * configure, configure.in:
+
+ further improve mib module descriptions
+
+2005-12-10 18:29 tanders
+
+ * configure.in:
+
+ fix --with-enterprise-notification-oid description
+
+2005-12-10 18:17 tanders
+
+ * configure, configure.in:
+
+ improve text alignment in "configure --help" output
+
+2005-12-10 12:30 alex_b
+
+ * apps/snmpnetstat/if.c, win32/mib_module_includes.h,
+ win32/libsnmp_dll/libsnmp.def,
+ win32/libsnmp_dll/libsnmp.def.in:
+
+ Win32: MSVC build fixes
+
+2005-12-10 12:28 tanders
+
+ * configure.in, configure:
+
+ put priv/auth related options closer to each other
+
+2005-12-10 11:37 rstory
+
+ * apps/snmpnetstat/if.c, agent/snmp_agent.c:
+
+ remove C++ comments or convert to C comments
+
+2005-12-10 11:35 rstory
+
+ * agent/mibgroup/: ip-forward-mib/data_access/route_common.c,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable.c,
+ tcp-mib/data_access/tcpConn_linux.c,
+ udp-mib/data_access/udp_endpoint_linux.c:
+
+ change cpp warnings to comments
+
+2005-12-10 11:25 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-12-10 11:23 rstory
+
+ * configure.in:
+
+ new 'os specific' section in mib module help
+
+2005-12-09 21:22 rstory
+
+ * agent/mibgroup/disman/event/: mteEventConf.h,
+ mteTriggerConf.h, mteTriggerTable.h:
+
+ config_require iquery
+
+2005-12-09 21:21 rstory
+
+ * agent/mibgroup/: ip-forward-mib/ipCidrRouteTable/.cvsignore
+, ip-mib/inetNetToMediaTable/.cvsignore,
+ ip-mib/ipAddressTable/.cvsignore,
+ ip-mib/ipSystemStatsTable/.cvsignore:
+
+ ignore misc generated files
+
+2005-12-09 20:58 rstory
+
+ agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_data_access.c
+:
+
+ update renamed variable
+
+2005-12-09 20:58 rstory
+
+ * agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.h
+:
+
+ fix config_require path
+
+2005-12-09 20:58 rstory
+
+ * agent/mibgroup/ip-mib/ipv4InterfaceTable/:
+ ipv4InterfaceTable_data_access.h,
+ ipv4InterfaceTable_interface.h:
+
+ remove experimental config_noinclude directives
+
+2005-12-09 20:57 rstory
+
+ agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.c
+:
+
+ fix cut-n-paste
+
+2005-12-09 20:56 rstory
+
+ * agent/mibgroup/ip-mib/:
+ ipv4InterfaceTable/ipv4InterfaceTable_constants.h,
+ ipv4InterfaceTable/ipv4InterfaceTable_interface.c,
+ ipv6InterfaceTable/ipv6InterfaceTable_constants.h,
+ ipv6InterfaceTable/ipv6InterfaceTable_interface.c:
+
+ add missing registration of last change object
+
+2005-12-09 20:44 rstory
+
+ * agent/mibgroup/ip-mib/: ipv4InterfaceTable.h,
+ ipv6InterfaceTable.h:
+
+ add missing intermediate config_req headers
+
+2005-12-09 20:32 rstory
+
+ * include/net-snmp/agent/ds_agent.h:
+
+ update compat mapping too
+
+2005-12-09 19:49 hardaker
+
+ * agent/mibgroup/notification-log-mib/notification_log.c,
+ include/net-snmp/agent/ds_agent.h:
+
+ proper naming conventions standardized and widely adopted by the Internet Engineering Task Force
+
+2005-12-09 17:44 rstory
+
+ * agent/mibgroup/notification-log-mib/notification_log.c,
+ include/net-snmp/agent/ds_agent.h:
+
+ - define new agent ds id for retaining traps
+
+2005-12-09 10:43 hardaker
+
+ * agent/mibgroup/notification-log-mib/notification_log.c:
+
+ trap -> notification
+
+2005-12-09 10:13 rstory
+
+ * agent/mibgroup/notification-log-mib/notification_log.c:
+
+ - restore dontRetainLogs
+ - new, clearer doNotRetainTrapLogs use same ds id
+
+2005-12-09 08:44 dts12
+
+ * apps/snmptrapd.c:
+
+ Use the common boolean parsing routine (to recognise
+ the full list of documented values, not simply '1'!)
+
+2005-12-09 08:43 dts12
+
+ * include/net-snmp/library/default_store.h,
+ snmplib/default_store.c:
+
+ Pull parsing of boolean config values out into a separate routine.
+
+2005-12-09 07:01 dts12
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ Expand the source buffer so it can hold a maximum-length IPv6 specification.
+ Patch provided by Shuki Sasson.
+
+2005-12-08 08:10 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c, apps/snmptrapd_auth.c
+:
+
+ Issue warnings when 'snmptrapd' is run without any access configuration.
+ Both at startup, and when incoming traps are received (and dropped).
+
+ Also define an alternative name for the 'disableAuthorization' directive,
+ that is (IMO) more descriptive of what a network administrator might want to do.
+
+2005-12-08 08:07 dts12
+
+ * snmplib/vacm.c:
+
+ Properly recognise when no access settings have been configured.
+ (The new built-in views broke the previous test).
+
+2005-12-08 06:08 dts12
+
+ * configure, configure.in,
+ agent/mibgroup/if-mib/data_access/interface_linux.c,
+ include/net-snmp/net-snmp-config.h.in:
+
+ Include (and check for) another header file - needed on RedHat 9 systems.
+
+2005-12-07 17:55 tanders
+
+ * README.agent-mibs:
+
+ fix typo
+
+2005-12-07 07:29 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-12-07 07:27 rstory
+
+ * configure.in:
+
+ - fix mini-agent tests so that --disable doesn't actually enable it
+
+2005-12-06 17:50 nba
+
+ * mibs/rfclist:
+
+ Update to current RFC issues
+
+2005-12-06 12:44 rstory
+
+ * agent/mibgroup/if-mib/ifTable/: ifTable_data_access.c,
+ ifTable_data_access.h:
+
+ reduce cache reload timeout below wrap threshold for gigabit interfaces
+
+2005-12-06 08:50 dts12
+
+ * man/snmpd.internal.5.def:
+
+ Brief (and somewhat repetative) documentation of internal directives.
+
+2005-12-06 08:11 dts12
+
+ * man/snmpd.examples.5.def:
+
+ Flesh out Event MIB, Schedule MIB and proxy examples
+ (plus various minor tweaks).
+
+2005-12-06 05:49 dts12
+
+ * agent/mibgroup/disman/event/: mteEvent.c, mteObjects.c
+, mteTriggerConf.c, mteTriggerConf.h:
+
+ Implement missing "linkUpDownNotifications" directive
+ (together with suitable standard entries)
+
+2005-12-05 11:44 hardaker
+
+ * remove-files:
+
+ don't remove dist
+
+2005-12-05 10:55 rstory
+
+ * snmplib/snmp_api.c:
+
+ fix missed var rename in conditional
+
+2005-12-05 07:47 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ config_add_mib in header
+
+2005-12-05 07:45 rstory
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+
+ tweaks per comments from wes; see coders note
+
+2005-12-05 07:22 dts12
+
+ * man/snmpd.examples.5.def:
+
+ Flesh out AgentX examples.
+
+2005-12-05 07:21 dts12
+
+ * man/snmpd.examples.5.def:
+
+ Flesh out trap handling and embedded perl examples.
+
+2005-12-05 07:20 dts12
+
+ * man/: snmpd.conf.5.def, snmpd.examples.5.def:
+
+ Assorted wordsmithing, and pick up a couple of undocumented options.
+
+2005-12-05 07:15 dts12
+
+ * agent/mibgroup/util_funcs.c:
+
+ Implement 'get_exec_output' as a wrapper round 'run_exec_command'
+ to give proper handling of command tokenization. (See Bug #1324057)
+ Note this doesn't apply to Windows systems - that exec handling
+ probably needs to be moved to 'run_exec_command' as well.
+
+2005-12-04 18:03 rstory
+
+ * remove-files:
+
+ add -R for dist dir
+
+2005-12-04 17:54 rstory
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.3.pre5 )
+
+2005-12-04 17:54 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.3.pre5 )
+
+2005-12-04 17:53 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.3.pre5 )
+
+2005-12-04 17:53 rstory
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.3.pre5 )
+
+2005-12-04 17:53 rstory
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.3.pre5 )
+
+2005-12-04 17:53 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.3.pre5 )
+
+2005-12-04 17:53 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.3.pre5 )
+
+2005-12-04 17:53 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.3.pre5 )
+
+2005-12-04 17:52 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.3.pre5 )
+
+2005-12-04 17:52 rstory
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.3.pre5 )
+
+2005-12-04 17:52 rstory
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.3.pre5 )
+
+2005-12-04 17:52 rstory
+
+ * README:
+
+ - (README): version tag ( 5.3.pre5 )
+
+2005-12-04 17:51 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.3.pre5 )
+
+2005-12-04 17:51 rstory
+
+ * ChangeLog:
+
+ version update
+
+2005-12-04 17:43 rstory
+
+ * apps/snmpnetstat/Makefile.depend, apps/Makefile.depend
+, snmplib/Makefile.depend:
+
+ make depend
+
+2005-12-04 17:26 rstory
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3
+, netsnmp_agent_registry.3, netsnmp_agent_trap.3
+, netsnmp_asn1_packet_parse.3, netsnmp_baby_steps.3
+, netsnmp_bulk_to_next.3, netsnmp_cache_handler.3
+, netsnmp_callback.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_default_store.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_container.3,
+ netsnmp_table_data.3, netsnmp_table_dataset.3,
+ netsnmp_table_iterator.3, netsnmp_util.3,
+ netsnmp_utilities.3, netsnmp_variable_list.3,
+ netsnmp_watcher.3:
+
+ documentation update
+
+2005-12-04 17:23 rstory
+
+ * remove-files:
+
+ remove dist and win32/dist
+
+2005-12-04 17:14 rstory
+
+ * dist/makerelease:
+
+ do distclean before configure if Makefile exists
+
+2005-12-04 16:49 rstory
+
+ * dist/makerelease:
+
+ note that Makefile.top usually only change for first prerelease
+
+2005-12-04 16:48 rstory
+
+ * configure.in, configure:
+
+ version update
+
+2005-12-04 16:47 rstory
+
+ * dist/makerelease:
+
+ add -q to update so potential changes don't scroll off screen
+
+2005-12-04 16:29 rstory
+
+ * mibs/IANAifType-MIB.txt:
+
+ fix syntax errors
+
+2005-12-04 13:44 rstory
+
+ * dist/nsb-nightly:
+
+ log rc w/error msg
+
+2005-12-04 13:43 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ log container name, if avail, in log msg
+
+2005-12-04 13:38 rstory
+
+ * apps/snmptrapd.c:
+
+ - add log file append (-A) option
+ - remove Log/Print/Syslog distinction
+ - bring startup/reconfig log message in line w/snmpd
+
+2005-12-04 13:24 rstory
+
+ * agent/Makefile.in:
+
+ - fix bug 1297878: header_generic and header_simple_table prototypes
+ - extra header list/install target
+ - group perl install/uninstall together
+
+2005-12-04 13:19 rstory
+
+ * NEWS:
+
+ important notes for 5.3
+
+2005-12-04 09:42 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-12-04 09:40 rstory
+
+ * configure.in:
+
+ - fix bug 1365128: snmpd quietly dies on hpux 11.11
+ - add configure check for -lnm
+
+2005-12-04 09:25 rstory
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ - additional fix for bug 1103644, FreeBSD memory leak
+ - problem pointed out by rojer on irc
+ - use calloc instead of malloc/memset
+
+2005-12-02 19:13 rstory
+
+ * mibs/IANAifType-MIB.txt:
+
+ update to 200510100000Z version
+
+2005-12-02 18:48 rstory
+
+ * mibs/IP-MIB.txt:
+
+ - update from draft-ietf-ipv6-rfc2011-update-10.txt, currently in the RFC
+ editor's queue
+
+2005-12-02 17:47 rstory
+
+ * snmplib/snmp_api.c:
+
+ - bug 1337534: Read problem on stream sockets
+ - properly save partial packet which isn't at start of buffer
+
+2005-12-02 17:05 rstory
+
+ * snmplib/snmp_api.c:
+
+ - bug 1370856: ip address encoding on 64bit
+ - use inet_addr_t for inet addr
+
+2005-12-02 17:03 rstory
+
+ * snmplib/snmp_client.c:
+
+ - bug 1370856: ip address encoding on 64bit
+ - sync snmp_set_var_value w/snmp_build_var_op: ASN_IPADDRESS as a string
+
+2005-12-02 13:17 rstory
+
+ * agent/mibgroup/: udp-mib.h, tcp-mib/tcpListenerTable.h
+, udp-mib/udpEndpointTable.h:
+
+ add missing config_req files
+
+2005-12-02 13:12 rstory
+
+ * local/mib2c-conf.d/details-node.m2i:
+
+ only print ranges if they exist
+
+2005-12-02 13:12 rstory
+
+ * agent/mibgroup/tcp-mib.h:
+
+ remove extra ;
+
+2005-12-02 13:05 rstory
+
+ * agent/mibgroup/udp-mib/udpEndpointTable/: udpEndpointTable.c
+, udpEndpointTable.h, udpEndpointTable_constants.h
+, udpEndpointTable_data_access.c,
+ udpEndpointTable_data_access.h,
+ udpEndpointTable_interface.c, udpEndpointTable_interface.h
+:
+
+ regenerate mfd code
+
+2005-12-02 13:02 rstory
+
+ * agent/mibgroup/tcp-mib/tcpListenerTable/: tcpListenerTable.c
+, tcpListenerTable.h, tcpListenerTable_constants.h
+, tcpListenerTable_data_access.c,
+ tcpListenerTable_data_access.h,
+ tcpListenerTable_interface.c, tcpListenerTable_interface.h
+:
+
+ regenerate mfd code
+
+2005-12-02 11:45 hardaker
+
+ * snmplib/asn1.c:
+
+ fix counter64's when defined with 64bit long variables in the C64 structure
+
+2005-12-02 10:52 dts12
+
+ * agent/mibgroup/utilities/execute.c:
+
+ Use 'copy_nword' to tokenize external commands.
+ This means that quoted strings are handled in the natural manner.
+
+2005-12-02 10:33 dts12
+
+ * man/Makefile.in:
+
+ It helps if you actually create the man page as well, Dave!
+
+2005-12-02 09:55 tanders
+
+ * man/.cvsignore:
+
+ add the recently introduced manual pages
+
+2005-12-02 09:50 dts12
+
+ * man/: Makefile.in, snmpd.internal.5.def:
+
+ Template for documenting internal snmpd config directives.
+ (I've identified and listed the directives concerned,
+ but haven't provided any descriptions of what they do!)
+
+2005-12-02 05:36 nba
+
+ * apps/snmpnetstat/: if.c, inet.c, inet6.c,
+ main.c, main.h, netstat.h, route.c:
+
+ Align with warning fixes for 5.2.2
+
+2005-12-02 05:33 nba
+
+ * snmplib/mib.c:
+
+ Fix snmptranslate -Td display of UNITS
+
+2005-12-02 00:41 hardaker
+
+ * local/Makefile.in:
+
+ added mfd-persistence.m2i
+
+2005-12-01 16:42 rstory
+
+ * agent/mibgroup/tcp-mib/tcpConnectionTable/: tcpConnectionTable.c
+, tcpConnectionTable.h, tcpConnectionTable_constants.h
+, tcpConnectionTable_data_access.c,
+ tcpConnectionTable_data_access.h,
+ tcpConnectionTable_interface.c,
+ tcpConnectionTable_interface.h:
+
+ regenerate mfd code
+
+2005-12-01 16:31 rstory
+
+ * agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/:
+ usmDHUserKeyTable.c, usmDHUserKeyTable.h,
+ usmDHUserKeyTable_data_access.c,
+ usmDHUserKeyTable_data_access.h,
+ usmDHUserKeyTable_data_get.c, usmDHUserKeyTable_data_get.h
+, usmDHUserKeyTable_data_set.c,
+ usmDHUserKeyTable_data_set.h, usmDHUserKeyTable_enums.h
+, usmDHUserKeyTable_interface.c,
+ usmDHUserKeyTable_interface.h, usmDHUserKeyTable_oids.h
+:
+
+ regenerate mfd code
+
+2005-12-01 16:05 rstory
+
+ * agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/:
+ snmpNotifyFilterTable.c, snmpNotifyFilterTable.h,
+ snmpNotifyFilterTable_constants.h,
+ snmpNotifyFilterTable_data_access.c,
+ snmpNotifyFilterTable_data_access.h,
+ snmpNotifyFilterTable_interface.c,
+ snmpNotifyFilterTable_interface.h:
+
+ regenerate mfd code
+
+2005-12-01 15:52 rstory
+
+ * agent/mibgroup/ip-mib/: ipv4InterfaceTable/ipv4InterfaceTable.c
+, ipv4InterfaceTable/ipv4InterfaceTable.h,
+ ipv4InterfaceTable/ipv4InterfaceTable_constants.h,
+ ipv4InterfaceTable/ipv4InterfaceTable_data_access.c,
+ ipv4InterfaceTable/ipv4InterfaceTable_data_access.h,
+ ipv4InterfaceTable/ipv4InterfaceTable_interface.c,
+ ipv4InterfaceTable/ipv4InterfaceTable_interface.h,
+ ipv6InterfaceTable/ipv6InterfaceTable.c,
+ ipv6InterfaceTable/ipv6InterfaceTable.h,
+ ipv6InterfaceTable/ipv6InterfaceTable_constants.h,
+ ipv6InterfaceTable/ipv6InterfaceTable_data_access.c,
+ ipv6InterfaceTable/ipv6InterfaceTable_data_access.h,
+ ipv6InterfaceTable/ipv6InterfaceTable_interface.c,
+ ipv6InterfaceTable/ipv6InterfaceTable_interface.h:
+
+ regenerate mfd code
+
+2005-12-01 15:12 rstory
+
+ * agent/mibgroup/ip-mib/ipSystemStatsTable/: ipSystemStatsTable.c
+, ipSystemStatsTable.h, ipSystemStatsTable_constants.h
+, ipSystemStatsTable_data_access.c,
+ ipSystemStatsTable_data_access.h,
+ ipSystemStatsTable_interface.c,
+ ipSystemStatsTable_interface.h:
+
+ regenerate mfd code
+
+2005-12-01 12:00 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/: ipAddressTable.c,
+ ipAddressTable.h, ipAddressTable_constants.h,
+ ipAddressTable_data_access.c, ipAddressTable_data_access.h
+, ipAddressTable_interface.c,
+ ipAddressTable_interface.h:
+
+ regenerate mfd code
+
+2005-12-01 11:13 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Assorted minor tweaks and wordsmithing.
+
+2005-12-01 10:50 dts12
+
+ * man/: Makefile.in, snmpd.conf.5.def,
+ snmpd.examples.5.def:
+
+ Move snmpd.conf examples into a separate man page,
+ and example the range of examples provided.
+ (Not finished yet, but it's probably worth submitting
+ this while we're still in pre-release mode)
+
+2005-12-01 10:49 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressPrefixTable/:
+ ipAddressPrefixTable.c, ipAddressPrefixTable.h,
+ ipAddressPrefixTable_constants.h,
+ ipAddressPrefixTable_data_access.c,
+ ipAddressPrefixTable_data_access.h,
+ ipAddressPrefixTable_interface.c,
+ ipAddressPrefixTable_interface.h:
+
+ regenerate mfd code
+
+2005-12-01 08:09 dts12
+
+ * README.solaris:
+
+ Drop bogus "-p" port option (and apply consistent indentation).
+ Should the other changes suggested in bug #1247164 be applied, too?
+
+2005-12-01 07:45 dts12
+
+ * apps/snmpstatus.c:
+
+ Don't crash-and-burn on SNMP exceptions (see bug #1278809)
+
+2005-11-30 19:45 rstory
+
+ * agent/mibgroup/ip-mib/inetNetToMediaTable/: inetNetToMediaTable.c
+, inetNetToMediaTable.h,
+ inetNetToMediaTable_constants.h,
+ inetNetToMediaTable_data_access.c,
+ inetNetToMediaTable_data_access.h,
+ inetNetToMediaTable_interface.c,
+ inetNetToMediaTable_interface.h:
+
+ regenerate mfd code
+
+2005-11-30 18:47 tanders
+
+ * testing/tests/T050snmpv3trap:
+
+ Rewritten from scratch to verify noAuthNoPriv, authNoPriv *and* authPriv SNMPv3 traps. Let's never break this again.
+
+2005-11-30 18:44 tanders
+
+ * testing/tests/Sv3usmconfigtrapd:
+
+ create noAuthNoPriv user
+
+2005-11-30 18:43 tanders
+
+ * testing/tests/Sv3usmconfigbase:
+
+ introduce to specify the engine ID for createUser
+
+2005-11-30 17:32 rstory
+
+ * agent/mibgroup/ip-forward-mib/ipCidrRouteTable/:
+ ipCidrRouteTable.c, ipCidrRouteTable.h,
+ ipCidrRouteTable_constants.h,
+ ipCidrRouteTable_data_access.c,
+ ipCidrRouteTable_data_access.h,
+ ipCidrRouteTable_interface.c, ipCidrRouteTable_interface.h
+:
+
+ regenerate mfd code
+
+2005-11-30 17:25 rstory
+
+ * snmplib/file_utils.c:
+
+ fix compiler warning; init var
+
+2005-11-30 16:08 hardaker
+
+ * include/net-snmp/library/snmp_api.h, snmplib/snmp_api.c
+:
+
+ fix automatic user creation for sessions that have probing off or delayed
+
+2005-11-30 16:07 rstory
+
+ * agent/mibgroup/ip-forward-mib/inetCidrRouteTable/:
+ inetCidrRouteTable.c, inetCidrRouteTable.h,
+ inetCidrRouteTable_constants.h,
+ inetCidrRouteTable_data_access.c,
+ inetCidrRouteTable_data_access.h,
+ inetCidrRouteTable_interface.c,
+ inetCidrRouteTable_interface.h:
+
+ regenerate mfd code
+
+2005-11-30 15:16 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/: ifXTable.c, ifXTable.h
+, ifXTable_constants.h, ifXTable_data_access.c,
+ ifXTable_data_access.h, ifXTable_interface.c,
+ ifXTable_interface.h:
+
+ regenerate mfd code
+
+2005-11-30 13:10 hardaker
+
+ * dist/net-snmp-solaris-build/README:
+
+ added a README file that has been sitting in my directory un-checked-in
+
+2005-11-29 18:36 tanders
+
+ * configure.in:
+
+ refer to agent/mibgroup/ipfwchains/README rather than "the ucd-snmp ftp site" for ipfwchains
+
+2005-11-29 17:14 rstory
+
+ * agent/mibgroup/if-mib/ifTable/: ifTable.c, ifTable.h
+, ifTable_constants.h, ifTable_data_access.c,
+ ifTable_data_access.h, ifTable_interface.c,
+ ifTable_interface.h:
+
+ regenerate mfd code
+
+2005-11-29 14:28 rstory
+
+ * local/mib2c-conf.d/mfd-access-container-cached-defines.m2i
+:
+
+ typo in log msg
+
+2005-11-25 09:16 tanders
+
+ * testing/tests/: T160snmpnetstat, T200snmpv2cwalkall:
+
+ use SKIP
+
+2005-11-25 05:12 dts12
+
+ * testing/tests/: T160snmpnetstat, T200snmpv2cwalkall:
+
+ Skip tests that are known to fail when not run as root.
+ (May need to be extended to other O/S's as well).
+
+2005-11-24 18:24 tanders
+
+ * man/snmpd.conf.5.def:
+
+ fix typo and layout
+
+2005-11-24 18:14 tanders
+
+ * testing/tests/: T030snmpv3usercreation,
+ T035snmpv3trapdusermgmt, T049snmpv3informpriv:
+
+ fix tests to work with --disable-privacy
+
+2005-11-23 19:56 tanders
+
+ * configure:
+
+ run autoconf
+
+2005-11-23 19:22 tanders
+
+ * NEWS, configure.in, agent/Makefile.in:
+
+ make "configure --disable-agent" finally work (fixes bugs 1006415, 908571)
+
+2005-11-23 08:14 alex_b
+
+ * win32/netsnmpmibs/netsnmpmibs.dsp:
+
+ Win32: MSVC build fix for netsnmpmibs.dsp
+
+2005-11-23 04:11 dts12
+
+ * snmplib/snmp_parse_args.c:
+
+ Move opening brace out of alternate #ifdef clauses
+ (confuses brace-matching editors!)
+
+2005-11-22 16:29 rstory
+
+ * agent/mibgroup/Makefile.depend:
+
+ update deps for deleted file
+
+2005-11-22 05:43 dts12
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ Beef up the "relocatable exec" warning message.
+
+2005-11-22 05:37 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Document Schedule MIB configuration.
+
+2005-11-21 20:40 alex_b
+
+ * README.win32, apps/snmpnetstat/inet.c,
+ apps/snmpnetstat/inet6.c, win32/agent_module_inits.h
+, win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/net-snmp-config.h.in,
+ win32/netsnmpmibs/Makefile.in,
+ win32/netsnmpmibs/netsnmpmibs.dsp,
+ win32/netsnmpmibssdk/Makefile.in,
+ win32/netsnmpmibssdk/netsnmpmibssdk.dsp:
+
+ Win32: MSVC and Cygwin compile fixes
+
+2005-11-21 19:23 rstory
+
+ * agent/mibgroup/notification/: snmpNotifyFilterTable.c,
+ snmpNotifyFilterTable.h:
+
+ remove unused files; reimplemented in snmp-notification-mib/snmpNotifyFilterTable
+
+2005-11-21 06:27 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Revise the DisMan Event-MIB documentation to match the new implementation.
+
+2005-11-21 06:17 dts12
+
+ * agent/mibgroup/disman/event/mteTriggerConf.c:
+
+ Properly detect all three styles of monitor expression automatically.
+ (This makes the '-t' option redundant, though it's still accepted)
+
+2005-11-20 18:51 tanders
+
+ * testing/eval_tools.sh:
+
+ CHECKANDDIE() should EXPECTRESULT 0
+
+2005-11-20 18:30 tanders
+
+ * testing/tests/T200snmpv2cwalkall:
+
+ make the test also FAIL on "Wrong Type (should be ...)"
+
+2005-11-20 18:28 tanders
+
+ * testing/eval_tools.sh:
+
+ introduce CHECKANDDIE() to FAIL if a pattern *is* found
+
+2005-11-20 18:00 tanders
+
+ * mibs/NET-SNMP-TC.txt:
+
+ update LAST-UPDATED field to reflect recent changes
+
+2005-11-20 17:48 tanders
+
+ * man/snmpd.conf.5.def:
+
+ clarify that "host" is only enabled by default on the major supported platforms
+
+2005-11-20 17:35 tanders
+
+ * man/snmpd.conf.5.def:
+
+ fix description for engineID
+
+2005-11-20 17:27 tanders
+
+ * NEWS, man/snmp.conf.5.def:
+
+ document noPersistentLoad and noPersistentSave
+
+2005-11-20 16:30 rstory
+
+ * dist/makerelease:
+
+ use -q on final cvsupdate; add spacing
+
+2005-11-20 16:17 rstory
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.3.pre4 )
+
+2005-11-20 16:17 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.3.pre4 )
+
+2005-11-20 16:17 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.3.pre4 )
+
+2005-11-20 16:16 rstory
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.3.pre4 )
+
+2005-11-20 16:16 rstory
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.3.pre4 )
+
+2005-11-20 16:16 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.3.pre4 )
+
+2005-11-20 16:16 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.3.pre4 )
+
+2005-11-20 16:16 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.3.pre4 )
+
+2005-11-20 16:15 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.3.pre4 )
+
+2005-11-20 16:15 rstory
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.3.pre4 )
+
+2005-11-20 16:15 rstory
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.3.pre4 )
+
+2005-11-20 16:15 rstory
+
+ * README:
+
+ - (README): version tag ( 5.3.pre4 )
+
+2005-11-20 16:15 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.3.pre4 )
+
+2005-11-20 16:13 rstory
+
+ * ChangeLog:
+
+ version update
+
+2005-11-20 16:07 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend
+, agent/mibgroup/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, apps/Makefile.depend
+, snmplib/Makefile.depend:
+
+ make depend
+
+2005-11-20 16:05 rstory
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3
+, netsnmp_agent_registry.3, netsnmp_agent_trap.3
+, netsnmp_asn1_packet_parse.3, netsnmp_baby_steps.3
+, netsnmp_bulk_to_next.3, netsnmp_cache_handler.3
+, netsnmp_callback.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_default_store.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_container.3,
+ netsnmp_table_data.3, netsnmp_table_dataset.3,
+ netsnmp_table_iterator.3, netsnmp_util.3,
+ netsnmp_utilities.3, netsnmp_variable_list.3,
+ netsnmp_watcher.3:
+
+ documentation update
+
+2005-11-20 15:55 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ - remove howto on libtool versioning match release numbers
+ - update suggested configure test options
+
+2005-11-20 15:38 rstory
+
+ * dist/makerelease:
+
+ use enable-ipv6 instead of specifying transports
+
+2005-11-20 15:37 rstory
+
+ * configure.in, configure:
+
+ version update
+
+2005-11-20 15:35 rstory
+
+ * dist/makerelease:
+
+ add missing ;
+
+2005-11-20 14:42 rstory
+
+ * snmplib/snmp_logging.c:
+
+ - bug 1347709: snmpd doesnt handle large log files (>= 2GB) gracefully
+ - partial fix: open/truncate log files at startup
+
+2005-11-20 14:39 rstory
+
+ * agent/snmpd.c:
+
+ use new ds boolean for append logfiles, instead of local var
+
+2005-11-20 14:38 rstory
+
+ * include/net-snmp/library/default_store.h:
+
+ new lib boolean for append logfiles
+
+2005-11-18 16:57 rstory
+
+ * snmplib/read_config.c:
+
+ support for counters in read_config_read_memory
+
+2005-11-18 14:21 marz
+
+ * perl/SNMP/SNMP.pm:
+
+ allow session params to override global defaults
+
+2005-11-18 10:51 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Revise the introduction to snmpd config files.
+
+2005-11-18 10:36 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Review and revise the DisMan Event MIB documentation.
+
+2005-11-17 20:44 rstory
+
+ * agent/mibgroup/host/hr_device.c:
+
+ account for possible NULL value from function
+
+2005-11-17 17:45 rstory
+
+ * dist/nsb-nightly:
+
+ include CONFIGURE_OPTIONS in results email
+
+2005-11-17 17:03 rstory
+
+ * agent/agent_registry.c:
+
+ ifdef __aplha, ifdef out optimization causing alpha-linux1 to segfault
+
+2005-11-17 14:29 rstory
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ add memory/vmstats for freebsd6
+
+2005-11-17 12:56 rstory
+
+ * dist/nsb-functions:
+
+ don't explictly config ipv6 transports; enable-ipv6 instead
+
+2005-11-17 12:41 rstory
+
+ * dist/nsb-nightly:
+
+ - use sendmail on freebsd too
+ - add Errors-To header to mail
+ - echo to/subject to stdout
+
+2005-11-17 11:45 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Review and revise trap destination handling.
+
+2005-11-17 11:16 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Minor wordsmithing and formatting corrections.
+
+2005-11-17 11:10 rstory
+
+ * agent/mibgroup/mibII/interfaces.h:
+
+ exclude interface get/next prototypes if using mfd rewrites
+
+2005-11-17 11:07 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ explicit cast to match prototype
+
+2005-11-17 11:06 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.h:
+
+ add missing prototype; add C++ extern wrappers
+
+2005-11-17 11:06 rstory
+
+ * agent/mibgroup/: if-mib/data_access/interface_ioctl.c,
+ ip-forward-mib/data_access/route_linux.c:
+
+ quite compiler: add headers for missing prototypes
+
+2005-11-17 10:59 rstory
+
+ * dist/nsb-nightly:
+
+ special case for openbsd mail
+
+2005-11-17 09:45 dts12
+
+ * agent/mibgroup/disman/event-mib.h:
+
+ Clarify that the "event-mib.h" warning *is* a warning rather than
+ simply a note (which would belong in the documentation)
+
+2005-11-16 16:36 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-11-16 16:33 rstory
+
+ * configure.in:
+
+ netbsd wants netinet/ip6.h before netinet6/in6_pcb.h
+
+2005-11-16 16:26 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-11-16 16:26 rstory
+
+ * configure.in:
+
+ disallow ipv6 transports if ipv6 not enabled
+
+2005-11-16 15:31 rstory
+
+ * agent/mibgroup/:
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c
+,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c
+,
+ snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.c
+:
+
+ keep compiler happy: explicit argument cast
+
+2005-11-16 15:27 rstory
+
+ * agent/mibgroup/: if-mib/ifTable/ifTable_interface.c,
+ if-mib/ifXTable/ifXTable_interface.c,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c
+,
+ snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.c
+, tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.c
+, tcp-mib/tcpListenerTable/tcpListenerTable_interface.c
+:
+
+ C++ cleanup: don't use new as variable name
+
+2005-11-16 15:20 rstory
+
+ * include/net-snmp/data_access/route.h:
+
+ add missing prototype
+
+2005-11-16 15:18 rstory
+
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c
+:
+
+ keep compiler happy: explicit argument cast
+
+2005-11-16 15:16 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/: ifXTable.c, ifXTable.h
+:
+
+ move initialize_table_ifXTable prototype to header
+
+2005-11-16 15:11 rstory
+
+ * include/net-snmp/data_access/interface.h:
+
+ add prototypes for backwards compatibility interface functions
+
+2005-11-16 15:02 rstory
+
+ * agent/mibgroup/notification-log-mib/notification_log.h:
+
+ C++ extern "C" wrappers
+
+2005-11-16 15:01 rstory
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ include header w/needed prototype
+
+2005-11-16 14:51 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_interface.h,
+ agent/mibgroup/if-mib/ifXTable/ifXTable_interface.h,
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h
+,
+ agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.h
+,
+ agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.h
+,
+ agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.h
+, include/net-snmp/data_access/ipaddress.h,
+ include/net-snmp/data_access/systemstats.h,
+ include/net-snmp/data_access/tcpConn.h:
+
+ C++ cleanup: don't use new as variable name
+
+2005-11-16 14:44 rstory
+
+ * agent/mibgroup/mibII/ipv6.c:
+
+ - C++ cleanup
+ - don't use __P() (nowhere else in the code uses it)
+ - don't use new as a variable name
+
+2005-11-16 12:17 hardaker
+
+ * perl/TrapReceiver/TrapReceiver.xs:
+
+ // -> /* */
+
+2005-11-16 10:42 dts12
+
+ * apps/snmpnetstat/main.h:
+
+ Provide a definition for NI_MAXHOST if missing.
+
+2005-11-16 10:10 tanders
+
+ * agent/agent_read_config.c, agent/snmp_agent.c,
+ agent/mibgroup/mibII/vacm_conf.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/ucd-snmp/proxy.c, apps/snmptrapd_log.c
+, snmplib/snmpCallbackDomain.c, snmplib/snmp_api.c
+, snmplib/snmp_parse_args.c,
+ testing/tests/T058agentauthtrap, testing/tests/T100agenthup
+, testing/tests/T152hostuptime:
+
+ build fixes for sole --disable-snmpv1 (*without* --disable-snmpv2c)
+
+2005-11-16 08:06 tanders
+
+ * agent/mibgroup/utilities/iquery.c, apps/snmptrapd_auth.c
+:
+
+ build fix for --disable-snmpv1/--disable-snmpv2c
+
+2005-11-16 06:20 tanders
+
+ * snmplib/snmpCallbackDomain.c:
+
+ build fix for --disable-snmpv1/--disable-snmpv2c
+
+2005-11-16 05:58 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Better layout of 'inject_handler' documentation.
+
+2005-11-16 05:09 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Review and revise load average and file monitoring configuration.
+ (plus assorted tidying up).
+
+2005-11-16 04:58 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Review and revise the disk monitoring configuration
+
+2005-11-16 04:57 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Review and revise the process monitoring configuration
+
+2005-11-16 04:57 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Review and revise the Host Resources configuration
+
+2005-11-16 04:56 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Review and revise the system group configuration.
+
+2005-11-16 04:55 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Consolidate the "system information", and "agent behaviour" configuration
+ directives to be documented together (as two distinct sections).
+
+2005-11-15 21:14 rstory
+
+ agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.c
+:
+
+ uncomment out cleanup code
+
+2005-11-15 21:10 rstory
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ extra error checking for freebsd
+
+2005-11-15 21:08 rstory
+
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.c
+:
+
+ remove cpp #warning lines
+
+2005-11-15 21:04 rstory
+
+ * Makefile.in, Makefile.top:
+
+ - use find found by configure
+ - tweak commentcheck regexp to miss regexp in perl header
+
+2005-11-15 20:39 rstory
+
+ * agent/mibgroup/mibII/udpTable.c:
+
+ - solaris fixes
+ - don't set sorted flag for solaris (data on sf cf 5.9 is not sorted)
+ - reverse condition on idle test so some data gets returned
+
+2005-11-15 19:25 rstory
+
+ * agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.c
+:
+
+ use state from arp entry instead of hardcoded value
+
+2005-11-15 19:24 rstory
+
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.c
+:
+
+ default row status to active
+
+2005-11-15 19:24 tanders
+
+ * testing/tests/T065agentextend:
+
+ introduce snmpd test for extend
+
+2005-11-15 19:23 rstory
+
+ * agent/mibgroup/ip-mib/data_access/arp_linux.c:
+
+ - don't ignore incomplete entries
+ - set state to reachable if ! incomplete
+
+2005-11-15 19:02 tanders
+
+ * testing/tests/T200snmpv2cwalkall:
+
+ fix typo
+
+2005-11-15 18:46 tanders
+
+ * testing/tests/T061agentperl:
+
+ some optimization
+
+2005-11-15 18:32 rstory
+
+ * README.agentx:
+
+ document default ping interval
+
+2005-11-15 18:12 tanders
+
+ * man/snmpd.conf.5.def:
+
+ minor tweaks
+
+2005-11-15 17:46 tanders
+
+ * README.agentx:
+
+ minor tweaks
+
+2005-11-15 11:37 rstory
+
+ * net-snmp-config.in, agent/snmp_agent.c,
+ agent/snmpd.c, apps/snmptrapd.c:
+
+ ping, pong; restore netsnmp_running changes
+
+2005-11-15 10:51 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Review and revise AgentX config.
+
+2005-11-15 09:35 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Review and revise dlmod, proxy and SMUX descriptions
+ (plus assorted minor tweaks)
+
+2005-11-15 05:28 dts12
+
+ * FAQ:
+
+ Expand discussion of mib2c configs.
+
+2005-11-14 20:19 alex_b
+
+ * apps/snmpnetstat/inet6.c:
+
+ Win32: snmpnetstat IPv6 build fixes
+
+2005-11-14 19:11 tanders
+
+ * testing/tests/T061agentperl:
+
+ We finally have snmpd embedded perl testing. Feel free to review/scream/back out -- or applaud.
+
+2005-11-14 18:19 rstory
+
+ * snmplib/file_utils.c:
+
+ - remove C++ style comments
+ - add additional error handling/logging
+ - more comments
+ - doxygen docs
+
+2005-11-14 18:02 hardaker
+
+ * snmplib/: snmpSTDDomain.c, snmplocalsm.c:
+
+ remove C++ related comments
+
+2005-11-14 17:59 hardaker
+
+ * dist/makerelease:
+
+ don't manual update to SF servers
+
+2005-11-14 17:46 rstory
+
+ * snmplib/callback.c:
+
+ - undefine NETSNMP_PARANOID_LEVEL_HIGH, document what it does
+ - update lock assert/warn cases for lock per callback expectations
+
+2005-11-14 17:28 rstory
+
+ agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c
+:
+
+ remove commented out code
+
+2005-11-14 17:26 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_ioctl.c:
+
+ remove commented out includes
+
+2005-11-14 17:25 rstory
+
+ * agent/helpers/table_tdata.c:
+
+ remove c++ style commented out code
+
+2005-11-14 17:23 rstory
+
+ * agent/helpers/row_merge.c:
+
+ remove temporary comments
+
+2005-11-14 13:16 rstory
+
+ * agent/helpers/table_container.c:
+
+ fix bug 1352554: Seg fault in netsnmp_container_table_row_insert
+
+2005-11-14 13:12 rstory
+
+ * net-snmp-config.in, agent/snmp_agent.c,
+ agent/snmpd.c, apps/snmptrapd.c:
+
+ - move running flag back into applications
+ - restore infinite loop in get-next loop handling
+
+2005-11-14 11:32 tanders
+
+ * man/snmpd.conf.5.def:
+
+ document smuxsocket and enhance AgentX*
+
+2005-11-14 10:54 tanders
+
+ * man/snmpd.conf.5.def:
+
+ minor fixes after reviewing Dave's changes
+
+2005-11-14 10:43 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Review and revise embedded perl documentation.
+
+2005-11-14 06:35 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Fix a couple of typos, and specify a more definite SET
+ protocol for 'pass_persist' - compatible with the
+ current behaviour, but opening the door for more
+ flexible handling in the future.
+
+2005-11-14 06:29 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Review and revise pass-through support.
+
+2005-11-14 06:22 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Review and revise "exec"/"extend" documention
+
+2005-11-14 05:55 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Consolidate all the extension mechanisms to be documented together.
+
+2005-11-14 05:53 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Review the Access Control section, including separation into
+ distinct subsections.
+
+2005-11-14 05:52 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Simple documentation for the auth* directives.
+
+2005-11-14 04:41 tanders
+
+ * agent/mibgroup/mibII/udpTable.c:
+
+ fix typo
+
+2005-11-14 01:52 rstory
+
+ * dist/makerelease:
+
+ check for gpg key instead of userid
+
+2005-11-14 01:47 rstory
+
+ * dist/makerelease:
+
+ add option to repeat failed steps
+
+2005-11-14 01:44 rstory
+
+ * FAQ, README, perl/OID/OID.pm,
+ perl/default_store/default_store.pm:
+
+ version update
+
+2005-11-14 01:39 rstory
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.3.pre3 )
+
+2005-11-14 01:39 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.3.pre3 )
+
+2005-11-14 01:39 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.3.pre3 )
+
+2005-11-14 01:38 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.3.pre3 )
+
+2005-11-14 01:38 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.3.pre3 )
+
+2005-11-14 01:38 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.3.pre3 )
+
+2005-11-14 01:38 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.3.pre3 )
+
+2005-11-14 01:38 rstory
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.3.pre3 )
+
+2005-11-14 01:37 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.3.pre3 )
+
+2005-11-14 01:37 rstory
+
+ * ChangeLog:
+
+ version update
+
+2005-11-14 01:36 rstory
+
+ * NEWS:
+
+ note agentx subagent connect after configs fix
+
+2005-11-14 01:26 rstory
+
+ * agent/Makefile.depend, apps/snmpnetstat/Makefile.depend
+:
+
+ make depend
+
+2005-11-14 01:25 rstory
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3
+, netsnmp_agent_registry.3, netsnmp_agent_trap.3
+, netsnmp_asn1_packet_parse.3, netsnmp_baby_steps.3
+, netsnmp_bulk_to_next.3, netsnmp_cache_handler.3
+, netsnmp_callback.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_default_store.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_oid_stash.3, netsnmp_old_api.3,
+ netsnmp_read_config.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_snmp_agent.3, netsnmp_snmp_alarm.3,
+ netsnmp_snmp_client.3, netsnmp_snmp_logging.3,
+ netsnmp_snmp_pdu.3, netsnmp_snmp_session.3,
+ netsnmp_stash_cache.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_container.3,
+ netsnmp_table_data.3, netsnmp_table_dataset.3,
+ netsnmp_table_iterator.3, netsnmp_util.3,
+ netsnmp_utilities.3, netsnmp_variable_list.3,
+ netsnmp_watcher.3:
+
+ documentation update
+
+2005-11-14 01:19 rstory
+
+ * configure:
+
+ version update
+
+2005-11-14 01:10 rstory
+
+ * configure, configure.in:
+
+ version update
+
+2005-11-14 00:14 rstory
+
+ * agent/mibgroup/versiontag:
+
+ remove unneeded repository spec
+
+2005-11-13 22:10 alex_b
+
+ * win32/: Makefile.in, install-net-snmp.bat,
+ dist/installer/net-snmp.nsi:
+
+ -Win32: Add missing mib2c-data to installer
+ -Win32: Use wildcards in installer for installing files to help prevent
+ missing files.
+
+2005-11-13 22:00 rstory
+
+ * net-snmp-config.in, agent/snmp_agent.c,
+ agent/snmpd.c, apps/snmptrapd.c:
+
+ - new netsnmp_running global in agent lib
+ - used in place of while(1) in get next processing loop
+ - daemons w/sighandler updated to clear flag on sigterm
+
+2005-11-11 21:55 alex_b
+
+ * win32/net-snmp/: net-snmp-config.h, net-snmp-config.h.in
+:
+
+ Win32: Fix NI_MAXHOST define.
+
+2005-11-11 21:11 alex_b
+
+ * apps/snmpnetstat/inet.c:
+
+ Win32: Work around for bug 1278743: If trying to reverse lookup
+ 127.0.0.1, return 'localhost' to prevent Windows from returning the
+ local computer name because it ignores the hosts file.
+
+2005-11-10 19:48 tanders
+
+ * testing/tests/T0160snmpv2cbulkget:
+
+ fix typo
+
+2005-11-10 19:18 tanders
+
+ * README.solaris:
+
+ fix syntax typo
+
+2005-11-10 18:55 tanders
+
+ * testing/tests/T160snmpnetstat:
+
+ clarify that this test requires a working udpTable
+
+2005-11-10 18:22 tanders
+
+ * include/net-snmp/system/openbsd.h:
+
+ build fix for OpenBSD/SPARC 3.7
+
+2005-11-10 14:37 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - agentx init rework
+ - protect against multiple calls to subagent_init
+ - don't connect to master in subagent_init, instead register POST_CONFIG
+ callback to do so
+
+2005-11-10 14:27 rstory
+
+ * snmplib/callback.c:
+
+ - finer grained locking of callbacks (per subid), allowing a callback to
+ manipulate (reg/unreg) other callbacks
+ - more debugging
+ - add static flag for init
+ - memset and init variables in init_callback if not done yet
+ - call init_callback, if needed, from all functions
+
+2005-11-10 14:15 rstory
+
+ * agent/snmp_agent.c:
+
+ - agentx init rework
+ restore backwards compatibility (no subagent init in init_master_agent())
+
+2005-11-10 14:12 rstory
+
+ * agent/snmp_vars.c:
+
+ - agentx init rework:
+ restore backwards compatibility (call subagent in in init_agent)
+
+2005-11-10 05:13 dts12
+
+ * agent/mibgroup/disman/: event.h, event-mib.h,
+ old-event-mib.h:
+
+ Split original and new Event MIB implementations into distinct
+ "module group" headers, and use the original name to warn of the changes.
+
+2005-11-10 05:10 dts12
+
+ * configure, configure.in:
+
+ Add support for MIB modules to generate configure warnings or errors
+
+2005-11-10 04:46 dts12
+
+ * apps/snmpnetstat/: main.c, netstat.h, route.c:
+
+ Silence a couple of compiler warnings
+
+2005-11-10 04:45 dts12
+
+ * apps/snmpnetstat/if.c:
+
+ Don't choke on missing interfaces (and silence a couple of compiler warnings)
+
+2005-11-10 04:44 dts12
+
+ * apps/snmpnetstat/: inet.c, inet6.c:
+
+ Suppress headers for empty TCP displays (and fix a minor typo)
+
+2005-11-09 21:33 alex_b
+
+ * agent/snmpd.c, apps/snmptrapd.c,
+ snmplib/winservice.c:
+
+ -Win32: Force Event Log, SCM, registry etc to use long
+ name for service (Net-SNMP Agent instead of snmpd). Needed
+ because of new -n option in snmpd. Note: The snmpd -n option
+ does not change the Windows service name etc, only the config
+ file loaded.
+
+2005-11-09 19:34 tanders
+
+ * testing/Makefile.in:
+
+ "make test-mibs" still won't work if build dir != source dir, but it's closer now
+
+2005-11-09 18:41 rstory
+
+ * agent/mibgroup/agentx/: agentx_config.h, subagent.h:
+
+ agentx init rework: update prototypes for renamed functions
+
+2005-11-09 18:24 tanders
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ debug message should match code
+
+2005-11-09 17:38 rstory
+
+ * agent/mibgroup/: ip-mib/ipAddressPrefixTable/.cvsignore,
+ ip-mib/ipv4InterfaceTable/.cvsignore,
+ ip-mib/ipv6InterfaceTable/.cvsignore,
+ udp-mib/udpEndpointTable/.cvsignore:
+
+ ignore executables, makefiles, txt files, subagent files
+
+2005-11-09 17:31 rstory
+
+ * apps/snmpnetstat/inet6.c:
+
+ remove duplicate include
+
+2005-11-09 17:28 rstory
+
+ * dist/nsb-functions:
+
+ more specific error regexp
+
+2005-11-09 17:26 rstory
+
+ * apps/snmptrapd.c:
+
+ agentx init rework: update for function name changes
+
+2005-11-09 17:25 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - agentx init rework
+ - ifdef entire module based on using agentx subagent module
+ - rename init fucntion so we can control when it is called
+ - remove subagent_pre_init
+ - config stuff moved into agentx_config.c
+ - connection establishment moved to subagent_init, now that it's called
+ after configs have been read
+
+2005-11-09 17:21 rstory
+
+ * agent/mibgroup/agentx/agentx_config.c:
+
+ - consolidate master and subagent configs in this file
+ - slight code re-org (no changes; move agentx socket parsing to top)
+ - register ping interval config and set default
+ - rename init function so configure won't add it to modules inits, so we
+ can call it when we want it to be called
+
+2005-11-09 17:18 rstory
+
+ * agent/snmp_agent.c:
+
+ - agentx init rework: init subagent in init_master_agent
+ - assert if role isn't master or sub-agent
+
+2005-11-09 17:16 rstory
+
+ * agent/snmp_vars.c:
+
+ - agentx init rework
+ - don't init subagent here (configs haven't been read yet)
+ - only init master/sub configs
+
+2005-11-09 17:12 rstory
+
+ * README.agent-mibs:
+
+ update for new tables
+
+2005-11-08 07:21 dts12
+
+ * apps/snmpnetstat/: if.c, main.c, netstat.h:
+
+ Implement Open/NetBSD-style octet interface display.
+
+2005-11-08 07:17 dts12
+
+ * apps/snmpnetstat/if.c:
+
+ Right-justify headings for counter values.
+ (looks neater when individual values become relatively wide)
+
+2005-11-08 07:04 dts12
+
+ * apps/snmpnetstat/inet6.c:
+
+ Fix problems walking the IPv6 connection tables.
+
+2005-11-08 06:59 dts12
+
+ * agent/helpers/cache_handler.c:
+
+ Only schedule automatic loading once for any given cache.
+
+2005-11-07 22:46 hardaker
+
+ * dist/makerelease:
+
+ ChangeLog note
+
+2005-11-07 21:45 alex_b
+
+ * win32/: net-snmp/net-snmp-config.h,
+ net-snmp/net-snmp-config.h.in, snmpnetstat/Makefile.in
+, snmpnetstat/snmpnetstat.dsp:
+
+ Win32: MSVC build fixes.
+
+2005-11-07 19:49 tanders
+
+ * testing/tests/T060trapdperl:
+
+ introduce embedded perl test for snmptrapd (too fancy to resist)
+
+2005-11-07 19:42 tanders
+
+ * apps/snmpnetstat/Makefile.in:
+
+ build fix: fss->ffs
+
+2005-11-07 18:54 tanders
+
+ * perl/ASN/ASN.pm:
+
+ fix typo
+
+2005-11-07 18:34 tanders
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ fix typos
+
+2005-11-07 13:41 rstory
+
+ * agent/snmpd.c:
+
+ drop default timeout down to INT_MAX, and document why
+
+2005-11-07 09:39 dts12
+
+ * apps/snmpnetstat/: Makefile.in, ffs.c, if.c,
+ main.c, netstat.h, route.c:
+
+ Tweaks to support building under Windows
+ (including renamed 'ffs()' routine, taken from OpenBSD source tree)
+
+2005-11-07 06:47 dts12
+
+ * apps/snmpnetstat/if.c:
+
+ Display interface addressing information.
+
+2005-11-07 01:57 rstory
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.3.pre2 )
+
+2005-11-07 01:57 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.3.pre2 )
+
+2005-11-07 01:56 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.3.pre2 )
+
+2005-11-07 01:56 rstory
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.3.pre2 )
+
+2005-11-07 01:56 rstory
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.3.pre2 )
+
+2005-11-07 01:56 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.3.pre2 )
+
+2005-11-07 01:56 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.3.pre2 )
+
+2005-11-07 01:56 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.3.pre2 )
+
+2005-11-07 01:55 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.3.pre2 )
+
+2005-11-07 01:55 rstory
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.3.pre2 )
+
+2005-11-07 01:55 rstory
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.3.pre2 )
+
+2005-11-07 01:54 rstory
+
+ * README:
+
+ - (README): version tag ( 5.3.pre2 )
+
+2005-11-07 01:54 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.3.pre2 )
+
+2005-11-07 01:54 rstory
+
+ * ChangeLog:
+
+ version update
+
+2005-11-07 01:44 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend
+, agent/mibgroup/Makefile.depend,
+ apps/Makefile.depend, snmplib/Makefile.depend:
+
+ make depend
+
+2005-11-07 01:43 rstory
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3
+, netsnmp_agent_registry.3, netsnmp_agent_trap.3
+, netsnmp_asn1_packet_parse.3, netsnmp_baby_steps.3
+, netsnmp_bulk_to_next.3, netsnmp_cache_handler.3
+, netsnmp_callback.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_default_store.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3, netsnmp_oid_stash.3
+, netsnmp_old_api.3, netsnmp_read_config.3,
+ netsnmp_read_only.3, netsnmp_row_merge.3,
+ netsnmp_scalar.3, netsnmp_scalar_group_group.3,
+ netsnmp_serialize.3, netsnmp_snmp_agent.3,
+ netsnmp_snmp_alarm.3, netsnmp_snmp_client.3,
+ netsnmp_snmp_logging.3, netsnmp_snmp_pdu.3,
+ netsnmp_snmp_session.3, netsnmp_stash_cache.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ documentation update
+
+2005-11-07 01:38 rstory
+
+ * configure.in, configure:
+
+ version update
+
+2005-11-07 01:14 rstory
+
+ * snmplib/snmp_client.c:
+
+ don't try to use agent var in base lib (it was late, ok?)
+
+2005-11-07 00:16 rstory
+
+ * snmplib/snmp_client.c:
+
+ break out of waiting loops if ! running
+
+2005-11-06 22:34 alex_b
+
+ * include/net-snmp/types.h, win32/net-snmp/net-snmp-config.h
+, win32/net-snmp/net-snmp-config.h.in:
+
+ Win32: Move uint16_t definition to static win32 net-snmp-config.h
+
+2005-11-06 21:27 alex_b
+
+ * include/net-snmp/types.h,
+ win32/libnetsnmptrapd/Makefile.in,
+ win32/libnetsnmptrapd/libnetsnmptrapd.dsp,
+ win32/netsnmpmibssdk/Makefile.in,
+ win32/netsnmpmibssdk/netsnmpmibssdk.dsp:
+
+ Win32 MSVC build fixes
+
+2005-11-05 18:19 rstory
+
+ * agent/snmp_agent.c:
+
+ break out of getnext loop if ! running
+
+2005-11-05 17:46 tanders
+
+ * testing/TESTCONF.sh:
+
+ only use "ulimit -v" in bash
+
+2005-11-05 17:43 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-11-05 17:24 tanders
+
+ * dist/nsb-functions:
+
+ adjust error regex: don't fail on &entry->schedLastFailed, &fail etc.
+
+2005-11-05 17:09 rstory
+
+ * dist/nsb-functions:
+
+ - allow over-ride of NSB_(DIST|EXTRA)_MODULES
+ - remove testhandler from EXTRA modules (hangs snmpwalk)
+ - set SNMP_TMPDIR_BASE (future use)
+
+2005-11-05 17:01 rstory
+
+ * snmplib/snmpUDPDomain.c:
+
+ I'll take my port numbers unsigned, please
+
+2005-11-05 16:40 rstory
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ include netinet/tcp_var.h, if available
+
+2005-11-05 16:38 tanders
+
+ * testing/TESTCONF.sh:
+
+ deliberately ignore ulimit failures
+
+2005-11-05 16:19 rstory
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ remove sys/socketvar.h, since mibII_common.h already has it
+
+2005-11-05 14:43 rstory
+
+ * configure.in:
+
+ - switch disman module list back to event-mib (still uses new code)
+ - remove event mib conflict check (handled by config_excludes)
+
+2005-11-05 14:41 rstory
+
+ * agent/mibgroup/disman/event-mib.h:
+
+ - centralize event mib requires in original event-mib.h
+ - default to re-writes
+ - whichever implementation is selected, config_exclude the other
+
+2005-11-05 14:40 rstory
+
+ * agent/mibgroup/disman/event.h:
+
+ - centralize event mib requires in original event-mib.h
+
+2005-11-05 13:15 tanders
+
+ * apps/snmpnetstat/main.c:
+
+ fix optProc signature
+
+2005-11-04 18:46 tanders
+
+ * apps/snmpnetstat/inet6.c:
+
+ Build fix: protect #include <sys/cdefs.h>
+
+2005-11-04 13:05 rstory
+
+ * apps/snmpnetstat/route.c:
+
+ remove redundant include
+
+2005-11-04 13:05 rstory
+
+ * apps/snmpnetstat/netstat.h:
+
+ check if we have header before including it
+
+2005-11-04 11:59 dts12
+
+ * apps/snmpnetstat/: main.c, netstat.h:
+
+ Move the option flag variable declarations into a code file.
+
+2005-11-04 11:51 dts12
+
+ * apps/snmpnetstat/inet6.c:
+
+ Poertability of 'sin6_len' field is unclear
+ (and it doesn't immediately seem to be needed)
+
+2005-11-04 11:44 rstory
+
+ * apps/snmpnetstat/netstat.h:
+
+ add void to empty prototype param list
+
+2005-11-04 09:45 dts12
+
+ * configure.in, configure:
+
+ Detect (and reject) use of conflicting Event-MIB implementations.
+
+2005-11-04 07:41 dts12
+
+ * apps/snmpnetstat/: inet6.c, main.c, main.h,
+ netstat.h:
+
+ Preliminary implementation of IPv6 support
+
+2005-11-04 07:31 dts12
+
+ * apps/snmpnetstat/inet.c:
+
+ Plug minor memory leak.
+
+2005-11-03 20:02 hardaker
+
+ * perl/TrapReceiver/perl_snmptrapd.h:
+
+ update .h from the trapd.h files
+
+2005-11-03 19:59 hardaker
+
+ * perl/TrapReceiver/TrapReceiver.xs:
+
+ make perl only require the execute bit
+
+2005-11-03 11:52 tanders
+
+ * testing/tests/T160snmpnetstat:
+
+ adjust to new snmpnetstat options
+
+2005-11-03 11:47 dts12
+
+ * apps/snmpnetstat/: inet6.c, main.c, route.c:
+
+ Ensure IPv6 code is omitted (until it can be properly ported/tested)
+
+2005-11-03 11:46 dts12
+
+ * apps/snmpnetstat/main.c:
+
+ Omit redundent declarations.
+
+2005-11-03 11:28 dts12
+
+ * apps/snmpnetstat/inet.c:
+
+ Remove code for determining RPC service names
+ (not relevant/appropriate for SNMP-based queries)
+
+2005-11-03 08:58 dts12
+
+ * apps/snmpnetstat/route.c:
+
+ Better handling of host-specific routes, and displaying gateway/host names.
+
+2005-11-03 07:21 dts12
+
+ * apps/snmpnetstat/: main.c, route.c:
+
+ Re-implement routing table display (based on OpenBSD code)
+
+2005-11-03 07:19 dts12
+
+ * apps/snmpnetstat/if.c:
+
+ Fix problems with repeated interface display.
+
+2005-11-02 16:21 rstory
+
+ * apps/snmpnetstat/route.c:
+
+ move include after net-snmp-includes.h; fix global session name
+
+2005-11-02 12:07 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.h:
+
+ remove bogus experimental config macro
+
+2005-11-02 12:06 rstory
+
+ * agent/mibgroup/examples/watched.h:
+
+ add missing semi-colon
+
+2005-11-02 09:25 dts12
+
+ * apps/snmpnetstat/: if.c, inet.c, main.c,
+ main.h, netstat.h:
+
+ Preliminary re-implementation, based on re-distributable OpenBSD code.
+ (Note that if.c draws heavily on the FreeBSD interface display behaviour,
+ which is somewhat different to the Net/OpenBSD approach)
+
+2005-11-02 01:56 hardaker
+
+ * NEWS:
+
+ minor word twiddles
+
+2005-11-02 01:50 hardaker
+
+ * configure, configure.in, agent/snmp_perl.c:
+
+ fix embedded perl and ensure compilation failures if turned on but functions missing
+
+2005-11-01 15:24 hardaker
+
+ * local/mib2c:
+
+ don't add notify objects to the scalar list
+
+2005-11-01 04:02 tanders
+
+ * testing/TESTCONF.sh:
+
+ more portable way of calling ulimit
+
+2005-10-31 07:40 tanders
+
+ * include/net-snmp/system/osf5.h:
+
+ Tru64 Unix 5.1 build fix: make sure UINT32_MAX is defined
+
+2005-10-31 06:11 tanders
+
+ * dist/: nsb-nightly, nsb-package:
+
+ more portable way of calling bash
+
+2005-10-31 05:36 tanders
+
+ * snmplib/text_utils.c:
+
+ Solaris build fix: include limits.h for [U]LONG_MAX and LONG_MIN
+
+2005-10-31 04:29 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend
+, agent/mibgroup/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, apps/Makefile.depend
+, snmplib/Makefile.depend:
+
+ make depend
+
+2005-10-31 04:27 rstory
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3
+, netsnmp_agent_registry.3, netsnmp_agent_trap.3
+, netsnmp_asn1_packet_parse.3, netsnmp_baby_steps.3
+, netsnmp_bulk_to_next.3, netsnmp_cache_handler.3
+, netsnmp_callback.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_default_store.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3, netsnmp_oid_stash.3
+, netsnmp_old_api.3, netsnmp_read_config.3,
+ netsnmp_read_only.3, netsnmp_row_merge.3,
+ netsnmp_scalar.3, netsnmp_scalar_group_group.3,
+ netsnmp_serialize.3, netsnmp_snmp_agent.3,
+ netsnmp_snmp_alarm.3, netsnmp_snmp_client.3,
+ netsnmp_snmp_logging.3, netsnmp_snmp_pdu.3,
+ netsnmp_snmp_session.3, netsnmp_stash_cache.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ documentation update
+
+2005-10-31 04:24 rstory
+
+ * configure, configure.in:
+
+ version update
+
+2005-10-31 04:14 rstory
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ patches from apple
+
+2005-10-31 04:01 rstory
+
+ * include/net-snmp/system/darwin7.h,
+ agent/mibgroup/ucd_snmp.h:
+
+ patches from apple
+
+2005-10-31 04:00 rstory
+
+ * agent/mibgroup/ucd-snmp/: memory_darwin7.c,
+ memory_darwin7.h, vmstat_darwin7.c, vmstat_darwin7.h
+:
+
+ memory/vmstats code from apple
+
+2005-10-31 03:48 rstory
+
+ * agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.c,
+ agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h,
+ agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_constants.h
+,
+ agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.c
+,
+ agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.h
+,
+ agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_interface.c
+,
+ agent/mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_interface.h
+, agent/mibgroup/udp-mib/data_access/udp_endpoint.h,
+ agent/mibgroup/udp-mib/data_access/udp_endpoint_common.c,
+ agent/mibgroup/udp-mib/data_access/udp_endpoint_linux.c,
+ agent/mibgroup/udp-mib/data_access/udp_endpoint_private.h,
+ include/net-snmp/data_access/udp_endpoint.h:
+
+ first pass at udpEndpointTable
+
+2005-10-31 03:48 tanders
+
+ * testing/TESTCONF.sh:
+
+ set cpu and memory limits to prevent major damage, especially since we now have a full snmpwalk test
+
+2005-10-30 23:32 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.c
+:
+
+ quiet compiler
+
+2005-10-30 23:32 rstory
+
+ * agent/mibgroup/ip-mib/: data_access/ipaddress_ioctl.c,
+ ipAddressPrefixTable/ipAddressPrefixTable_data_access.c:
+
+ remove unused var
+
+2005-10-30 23:28 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c:
+
+ calculate prefix oid as needed
+
+2005-10-30 23:27 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c:
+
+ remove prefix oid; add prefix len
+
+2005-10-30 23:26 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_common.c:
+
+ remove prefix oid
+
+2005-10-30 23:26 rstory
+
+ * include/net-snmp/data_access/ipaddress.h:
+
+ - get rid of prefix oid
+ - add prefix len
+ - add prefix function prototypes
+
+2005-10-30 22:45 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_common.c:
+
+ - don't use test correct flag bit
+ - add prefix utility routines
+
+2005-10-30 22:41 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.c
+:
+
+ add access to container
+
+2005-10-30 22:41 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c
+:
+
+ do not use init flag with load routine
+
+2005-10-30 22:39 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c:
+
+ - remove inet6 code, since there we aren't using ipv6 ioctls
+ - add prefix len
+
+2005-10-30 22:37 rstory
+
+ * agent/mibgroup/ip-mib/: ipAddressTable.h,
+ ipAddressTable/ipAddressTable.h:
+
+ move detailed config_require macros down a level
+
+2005-10-30 22:37 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_linux.c:
+
+ use new util func to calculate prefix len
+
+2005-10-30 22:34 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ only check dirty flag for writable tables
+
+2005-10-30 22:33 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressPrefixTable/:
+ ipAddressPrefixTable.c, ipAddressPrefixTable.h,
+ ipAddressPrefixTable_constants.h,
+ ipAddressPrefixTable_data_access.c,
+ ipAddressPrefixTable_data_access.h,
+ ipAddressPrefixTable_interface.c,
+ ipAddressPrefixTable_interface.h:
+
+ initial pass at ipAddressPrefixTable
+
+2005-10-30 15:49 rstory
+
+ * include/net-snmp/types.h:
+
+ new netsnmp_cvalue union
+
+2005-10-30 15:49 rstory
+
+ * include/net-snmp/library/text_utils.h, snmplib/text_utils.c
+:
+
+ more new utility functions
+
+2005-10-30 14:01 rstory
+
+ * include/net-snmp/library/file_utils.h,
+ include/net-snmp/library/text_utils.h, snmplib/Makefile.in
+, snmplib/file_utils.c, snmplib/text_utils.c:
+
+ new util files
+
+2005-10-30 13:49 rstory
+
+ * snmplib/container_binary_array.c:
+
+ add support for unsorted flag
+
+2005-10-30 13:48 rstory
+
+ * snmplib/container.c:
+
+ - add compare function ptr to container type struct
+ - set compare func from container type struct
+ - register some string compare based binary array types
+
+2005-10-30 13:46 rstory
+
+ * include/net-snmp/library/container.h:
+
+ - new container register with compare prototype
+ - add unsorted container flag
+ - fix container options macros
+ - add rc param
+ - missing }
+
+2005-10-29 18:12 tanders
+
+ * testing/tests/T035snmpv3trapdusermgmt:
+
+ test change and usage of localized keys
+
+2005-10-29 17:29 tanders
+
+ * testing/tests/T059trapdtraphandle:
+
+ introduce snmptrapd traphandle test
+
+2005-10-29 15:58 tanders
+
+ * testing/tests/T200snmpv2cwalkall:
+
+ Introduce full snmpwalk test. Needs a significant amount of CPU cycles, but will catch important issues like when a simple walk crashes/hangs the agent.
+
+2005-10-29 08:17 rstory
+
+ * agent/mibgroup/examples/: data_set.h, delayed_instance.h
+, example.h, netSnmpHostsTable.h,
+ netSnmpHostsTable_access.h, netSnmpHostsTable_checkfns.h
+, netSnmpHostsTable_checkfns_local.h, notification.h
+, scalar_int.h, ucdDemoPublic.h:
+
+ add missing header protect and/or cplusplus ifdefs
+
+2005-10-29 08:16 rstory
+
+ * agent/mibgroup/examples/watched.h:
+
+ add missing header for watched.h
+
+2005-10-28 23:31 rstory
+
+ * agent/mibgroup/ip-mib/data_access/arp.h:
+
+ - remove extra ;
+ - fix typo in configure macro
+
+2005-10-28 23:30 rstory
+
+ * agent/mibgroup/if-mib/data_access/: interface_ioctl.c,
+ interface_ioctl.h:
+
+ reduce scope of ioctl version checking to v4 only (no ipv6 ioctls)
+
+2005-10-28 23:27 rstory
+
+ agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.h
+:
+
+ correct cut-n-paste error in prototype
+
+2005-10-28 23:26 rstory
+
+ agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.c
+:
+
+ yank more code which is unused due to container sharing
+
+2005-10-28 23:25 rstory
+
+ * agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.h
+:
+
+ update for changed ifentry var names
+
+2005-10-28 23:25 rstory
+
+ * agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.c
+:
+
+ skip vars that do not have ifentry flag set
+
+2005-10-28 23:24 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c:
+
+ - add missing flags param to arch container load
+ - support for ipv(4|6) only load flag
+ - try to load ipv6 even if ipv4 fails
+
+2005-10-28 23:22 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_common.c:
+
+ pass correct flags to container init during load
+
+2005-10-28 23:21 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface.c,
+ agent/mibgroup/if-mib/data_access/interface_linux.c,
+ include/net-snmp/data_access/interface.h:
+
+ tweaks and support for ipv6InterfaceTable
+
+2005-10-28 23:17 rstory
+
+ * include/net-snmp/data_access/ipaddress.h:
+
+ new load flags
+
+2005-10-28 23:17 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ add insert filtering
+
+2005-10-28 23:13 rstory
+
+ * agent/Makefile.in:
+
+ - reduce dependency list on snmp_vars.lo to agent_module_list_h
+ - add mib_module_list_h as dep for mib_modules.lo
+ - document why read_conf.lo deps are here and not in snmplib/Makefile.in
+
+2005-10-28 23:05 rstory
+
+ * agent/mibgroup/ip-mib/ipv6InterfaceTable/: ipv6InterfaceTable.c
+, ipv6InterfaceTable.h, ipv6InterfaceTable_constants.h
+, ipv6InterfaceTable_data_access.c,
+ ipv6InterfaceTable_data_access.h,
+ ipv6InterfaceTable_interface.c,
+ ipv6InterfaceTable_interface.h:
+
+ implement ipv6InterfaceTable
+
+2005-10-28 23:02 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ add shutdown prototype
+
+2005-10-28 18:38 tanders
+
+ * testing/tests/T030snmpv3usercreation:
+
+ portable way of exporting SNMPCONFPATH
+
+2005-10-28 17:28 bshaw666
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ logic change on getKstatInt
+
+2005-10-28 16:06 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ remove ; from config_require macros
+
+2005-10-28 15:47 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface.c:
+
+ - move local include with other local includes
+ - ifdef proptypes that won't be defined for NOARCH case
+
+2005-10-28 15:40 bshaw666
+
+ * agent/mibgroup/if-mib/data_access/interface.c:
+
+ forgot the include for some netsnmp_arch_interface stuff
+
+2005-10-28 14:49 bshaw666
+
+ * agent/mibgroup/host/hr_network.c:
+
+ you can't not declare HRN_index for solaris then expect it to return a few lines later
+
+2005-10-28 14:20 bshaw666
+
+ * include/net-snmp/data_access/interface.h:
+
+ it's uint16_t not u_int16_t
+
+2005-10-28 12:55 tanders
+
+ * man/snmpusm.1.def:
+
+ update on -CE and -Ck
+
+2005-10-28 12:37 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.h:
+
+ remove accidental checkin of unimplemented config macro
+
+2005-10-28 12:31 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-10-28 12:31 rstory
+
+ * configure.in:
+
+ add new argument to turn on debug during mib module processing
+
+2005-10-28 12:25 rstory
+
+ * agent/mibgroup/mibII/ipv6.h:
+
+ require mibII/ifTable instead of mibII/interfaces
+
+2005-10-28 12:11 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c:
+
+ - rename/revamp interface count function
+ - allocate local ifconf if called didn't pass on
+ - document that function allocates memory that caller must release if
+ they pass in their own ifconf pointer
+
+2005-10-28 12:08 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.h:
+
+ - remove ';' form config_* macros
+ - config_require ifTable, include ifTable header
+
+2005-10-28 12:06 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ call ifTable init to manage ifXTable init
+
+2005-10-28 12:03 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_data_access.c:
+
+ - add calls to ipv(4|6) interface tables when updating rows
+ - correct ifTableLastChange behaviour to comply with object definition
+ - clarify some comments
+ - add assert to notify us when/if and os tracks last changed on it's own
+
+2005-10-28 12:00 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.h:
+
+ - fix config_require macros
+ - add require for data_access/interface
+ - remove last change from data context, use ifentry version instead
+
+2005-10-28 11:58 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.c:
+
+ - make init_ifTable the common init function for interface modules
+ - protect against multiple calls
+ - proper init function calls for ipv(4|6)InterfaceTable/ifXTable
+
+2005-10-28 11:56 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ - move stats parsing to it's own function
+ - support new load flags: ipv4 only, no stats
+ - add (hardcoded reasm_max)
+ - get arp retransmit time from /proc
+
+2005-10-28 11:53 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_ioctl.h:
+
+ add config_require of data_access/ipaddress
+
+2005-10-28 11:50 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_ioctl.c:
+
+ new function to check an interface for ipv(4|6) ip addresses
+
+2005-10-28 11:45 rstory
+
+ * include/net-snmp/data_access/interface.h:
+
+ - add warnings to update functions when adding/deleting stuct members
+ - make flags field unsigned
+ - unsigned int -> u_int
+ - add fields for ipv4InterfaceTable
+ - fix os_flags comment
+ - new ns_flags defines for ipv(4|6)InterfaceTable
+ - new load flags defines
+
+2005-10-28 11:37 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c:
+
+ rename to interface.c
+
+2005-10-28 11:36 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface.c:
+
+ rename interface_common.c to interface.c to easy configure processing
+
+2005-10-28 11:36 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c:
+
+ - revert to previous behavior of ifDescr = interface name
+ - add new/missing structure members to interface copy routine
+ - rename init function for pending file rename
+
+2005-10-28 11:29 rstory
+
+ * agent/mibgroup/: if-mib/ifTable.h, if-mib/ifXTable.h,
+ if-mib/data_access/interface.h,
+ if-mib/data_access/interface_ioctl.h,
+ ip-forward-mib/inetCidrRouteTable.h,
+ ip-forward-mib/ipCidrRouteTable.h,
+ ip-forward-mib/data_access/route.h,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h,
+ ip-mib/inetNetToMediaTable.h, ip-mib/ipAddressTable.h
+, ip-mib/ipSystemStatsTable.h, ip-mib/ip_scalars.h
+, ip-mib/data_access/ipaddress.h,
+ ip-mib/data_access/ipaddress_ioctl.h,
+ ip-mib/data_access/ipaddress_linux.h,
+ ip-mib/data_access/scalars_common.h,
+ ip-mib/data_access/systemstats.h,
+ snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+, tcp-mib/tcpConnTable.h, tcp-mib/tcpConnectionTable.h
+, tcp-mib/data_access/tcpConn.h,
+ tcp-mib/tcpConnectionTable/tcpConnectionTable.h,
+ tcp-mib/tcpListenerTable/tcpListenerTable.h:
+
+ - mostly removing extraneous ';' on config_* macros
+ - a few tweak config_* macros
+
+2005-10-28 11:18 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-10-28 11:17 rstory
+
+ * configure.in:
+
+ - check for program 'find'
+ - only add header to (agent|mib)_module_includes.h if init/shutdown found
+
+2005-10-28 10:26 tanders
+
+ * dist/: README.build-scripts, nsb-nightly,
+ nsb-package:
+
+ fix typo
+
+2005-10-28 09:25 rstory
+
+ * agent/mibgroup/ip-mib/ipv4InterfaceTable/: ipv4InterfaceTable.c
+, ipv4InterfaceTable.h, ipv4InterfaceTable_constants.h
+, ipv4InterfaceTable_data_access.c,
+ ipv4InterfaceTable_data_access.h,
+ ipv4InterfaceTable_interface.c,
+ ipv4InterfaceTable_interface.h,
+ ipv4InterfaceTable_subagent.c:
+
+ implement ipv4InterfaceTable
+
+2005-10-28 08:13 tanders
+
+ * testing/tests/T160snmpnetstat:
+
+ make sure snmpnetstat can be executed; skip otherwise
+
+2005-10-27 05:42 dts12
+
+ * snmplib/: getopt.c, strtol.c, strtoul.c:
+
+ Remove UCB advertising clause (rescinded 22 July 1999)
+
+2005-10-27 05:38 dts12
+
+ * apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c,
+ apps/snmpnetstat/inet6.c, apps/snmpnetstat/main.c,
+ apps/snmpnetstat/route.c, man/snmpnetstat.1.def:
+
+ Update BSD copyright license with the current version.
+
+2005-10-26 18:54 tanders
+
+ * testing/tests/T160snmpnetstat:
+
+ add simple test for snmpnetstat to verify the upcoming rewrite
+
+2005-10-26 18:34 tanders
+
+ * testing/tests/T030snmpv3usercreation:
+
+ skip on DISABLE_SET_SUPPORT
+
+2005-10-26 17:47 tanders
+
+ * man/snmpd.8.def:
+
+ document generic --<name>=<value> command-line option
+
+2005-10-26 17:22 tanders
+
+ * man/snmptrapd.8.def:
+
+ document generic --<name>=<value> command-line option
+
+2005-10-26 13:15 tanders
+
+ * apps/snmpusm.c:
+
+ allows to use old and/or new localized key instead of pass-phrase with -Ck
+
+2005-10-26 12:26 tanders
+
+ * testing/tests/T030snmpv3usercreation:
+
+ major rewrite: adds more tests and uses new Sv3usmconfig*
+
+2005-10-26 12:23 tanders
+
+ * testing/tests/Sv3usmconfigbase:
+
+ fix some variable names
+
+2005-10-26 08:21 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.c:
+
+ remove patch flub
+
+2005-10-26 07:07 dts12
+
+ * agent/helpers/cache_handler.c:
+
+ Extra debugging to help distinguish between different cache timers.
+
+2005-10-26 07:02 dts12
+
+ * agent/helpers/table_generic.c:
+
+ Slight rethink about how to handle the removal of a MIB registration.
+ (This is definitely one for 5.4, methinks!)
+
+2005-10-26 06:57 dts12
+
+ * agent/helpers/table_generic.c:
+
+ Minor tweaks to generic table API routine names.
+
+2005-10-26 06:56 dts12
+
+ * agent/helpers/table_tdata.c,
+ agent/mibgroup/disman/event/mteEvent.c,
+ agent/mibgroup/disman/event/mteEventConf.c,
+ agent/mibgroup/disman/event/mteEventNotificationTable.c,
+ agent/mibgroup/disman/event/mteEventSetTable.c,
+ agent/mibgroup/disman/event/mteEventTable.c,
+ agent/mibgroup/disman/event/mteObjects.c,
+ agent/mibgroup/disman/event/mteObjectsConf.c,
+ agent/mibgroup/disman/event/mteObjectsTable.c,
+ agent/mibgroup/disman/event/mteTrigger.c,
+ agent/mibgroup/disman/event/mteTriggerBooleanTable.c,
+ agent/mibgroup/disman/event/mteTriggerConf.c,
+ agent/mibgroup/disman/event/mteTriggerDeltaTable.c,
+ agent/mibgroup/disman/event/mteTriggerExistenceTable.c,
+ agent/mibgroup/disman/event/mteTriggerTable.c,
+ agent/mibgroup/disman/event/mteTriggerThresholdTable.c,
+ agent/mibgroup/disman/expr/expErrorTable.c,
+ agent/mibgroup/disman/expr/expExpression.c,
+ agent/mibgroup/disman/expr/expExpressionConf.c,
+ agent/mibgroup/disman/expr/expExpressionTable.c,
+ agent/mibgroup/disman/expr/expObject.c,
+ agent/mibgroup/disman/expr/expObjectConf.c,
+ agent/mibgroup/disman/expr/expObjectTable.c,
+ agent/mibgroup/disman/expr/expValue.c,
+ agent/mibgroup/disman/schedule/schedConf.c,
+ agent/mibgroup/disman/schedule/schedCore.c,
+ agent/mibgroup/disman/schedule/schedTable.c,
+ include/net-snmp/agent/table_tdata.h:
+
+ Bring 'tdata' routine names into line with the proposed table API
+
+2005-10-26 06:20 tanders
+
+ * agent/mibgroup/host/hr_network.c:
+
+ fix compile error due to wrong hpux11 test
+
+2005-10-26 05:48 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ Move registration of standard views so that they're picked up
+ by both agent and trap handler initialisation.
+ Clarify which initialisation routines are called by which apps.
+
+2005-10-25 19:08 tanders
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ temporary workaround as suggested by Dave to get snmptrapd working again
+
+2005-10-25 19:05 rstory
+
+ * agent/helpers/row_merge.c:
+
+ - narrow scope of assert test
+ - fix minor memory leak
+
+2005-10-25 16:56 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-10-25 16:55 rstory
+
+ * configure.in:
+
+ fix tests for empty var case
+
+2005-10-25 12:41 tanders
+
+ * testing/tests/T049snmpv3inform:
+
+ ... and say so.
+
+2005-10-25 12:40 tanders
+
+ * testing/tests/T049snmpv3inform:
+
+ clarify as being a noAuthNoPriv test
+
+2005-10-25 11:59 tanders
+
+ * configure, configure.in:
+
+ fix OpenBSD 3.4 "present but cannot be compiled" warning: sys/swap.h needs sys/param.h for MAXPATHLEN
+
+2005-10-25 11:52 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ remove MFD_REWRITE define tests
+
+2005-10-25 11:51 rstory
+
+ * agent/mibgroup/mibII/interfaces.h:
+
+ - comment formatting
+ - config_exclude if-mib/ifTable/ifTable
+
+2005-10-25 11:49 rstory
+
+ * include/net-snmp/library/container.h:
+
+ add ITERATOR_RELEASE macro
+
+2005-10-25 08:38 dts12
+
+ * agent/mibgroup/mibII/: vacm_conf.c, vacm_conf.h:
+
+ Alternative viewtype-based access configuration directive ("authaccess").
+ Similar to "setaccess", but closer in feel to the other auth* directives.
+ This also allows the security model, level and context information to be
+ omitted (defaulting to sensible values).
+
+2005-10-25 08:31 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ Arggghhhh!!! If you've got code that works, don't change it before committing it.
+ If you *must* change it, then at least have the gumption to test it again first!
+ <heavy sigh>
+
+2005-10-25 08:01 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ Tell you what, Dave. Why don't you try committing the code for the
+ "authgroup" directive - rather than just the header file?
+ <sigh>
+ You just can't get the staff these days.
+
+2005-10-25 07:58 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.h:
+
+ Directive to support viewtype-based configuration of groups ("authgroup")
+
+2005-10-25 07:51 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ Allow community-based directives (authcommunity, etc) to specify
+ a particular SNMP version (v1-only or v2c-only)
+
+2005-10-25 07:47 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ Support simple access directives configured with named views (-V)
+ as well as OID subtrees.
+
+2005-10-25 07:42 dts12
+
+ * agent/mibgroup/mibII/: vacm_conf.c, vacm_conf.h:
+
+ Define "standard" views (all or nothing)
+
+2005-10-25 07:39 dts12
+
+ * snmplib/mib.c:
+
+ Work with the active root of the MIB tree (rather than the backward
+ compatibility version). This allows 'read_objid' to work correctly
+ (with numeric OIDs) before the MIB files are loaded.
+
+2005-10-24 19:31 tanders
+
+ * testing/tests/T035snmpv3trapdusermgmt:
+
+ reworked to use new Sv3usmconfig* framework
+
+2005-10-24 19:30 tanders
+
+ * testing/tests/: T049snmpv3informauth, T049snmpv3informpriv
+:
+
+ SNMPv3 authNoPriv/authPriv INFORM tests based on new Sv3usmconfig*
+
+2005-10-24 19:27 tanders
+
+ * testing/tests/: Sv3usmconfigagent, Sv3usmconfigbase,
+ Sv3usmconfigtrapd:
+
+ rewritten SNMPv3 USM config: basic, agent, trapd
+
+2005-10-24 19:04 hardaker
+
+ * agent/helpers/table_data.c:
+
+ Fix for compilation issues:
+ - rearrange function order to get proper prototype ordering without
+ prototypes.
+ - Removed data type for a variable name that was getting passed in
+ as well.
+
+2005-10-24 18:40 rstory
+
+ * agent/mibgroup/mibII/at.c:
+
+ use netsnmp_access_interface_index_find instead of Interface_Index_By_Name
+
+2005-10-24 18:39 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_interface.c:
+
+ remove MFD_REWRITE check, use USING_MIBII_INTERFACES_MODULE instead
+
+2005-10-24 18:38 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.h:
+
+ config_exclude mibII/interfaces
+
+2005-10-24 18:37 rstory
+
+ * agent/mibgroup/mibII.h:
+
+ - require new mibII/ifTable instead of mibII/interfaces
+ - remove MFD_REWRITE check
+ - consolidate linux requires to one line
+
+2005-10-24 18:36 rstory
+
+ * agent/mibgroup/host/hr_network.c:
+
+ fix ifIndex mis-match (add support for netsnmp_interface_entry)
+
+2005-10-24 18:34 rstory
+
+ * agent/mibgroup/host/hr_network.h:
+
+ - require new mibII/ifTable instead of mibII/interfaces
+ - require host/hr_device too, since it declares globals we need
+
+2005-10-24 18:17 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c:
+
+ - implement backwards compatability functions Interface_Scan_(Init|Next) so
+ all modules can agree on ifIndex values
+
+2005-10-24 17:52 rstory
+
+ * snmplib/container_binary_array.c:
+
+ fix cut-n-paste bug in iterator; reset ptr overwritten by release
+
+2005-10-24 16:28 hardaker
+
+ * apps/snmptrapd_handlers.c:
+
+ drop packets with session errnos attached to them
+
+2005-10-24 13:47 rstory
+
+ * agent/mibgroup/mibII/var_route.h:
+
+ remove MFD rewrite gyrations
+
+2005-10-24 13:44 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-10-24 13:43 rstory
+
+ * configure.in:
+
+ add tests for invalid options (miniagent)
+
+2005-10-24 13:42 rstory
+
+ * snmplib/read_config.c:
+
+ add details to log/debug message
+
+2005-10-24 13:40 rstory
+
+ * agent/mibgroup/mibII/ip.h:
+
+ use new mibII/ifTable in place of mibII/interfaces
+
+2005-10-24 13:38 rstory
+
+ * agent/mibgroup/mibII/ifTable.h:
+
+ new module for other modules to reference, in place of mibII/interfaces
+
+2005-10-24 13:29 rstory
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ fix ifIndex lookup on linux (use netsnmp_access_interface_index_find)
+
+2005-10-24 11:48 dts12
+
+ * agent/helpers/table_iterator.c,
+ include/net-snmp/agent/table_iterator.h:
+
+ Generic table API: "Row operations" (experimental implementation)
+
+2005-10-24 11:16 tanders
+
+ * testing/eval_tools.sh:
+
+ introduce SKIP()
+
+2005-10-24 10:19 tanders
+
+ * testing/tests/: Sv3DESconfig, Sv3SHADESconfig:
+
+ remove obsolete SNMPv3 config files
+
+2005-10-24 07:02 dts12
+
+ * agent/helpers/table_data.c:
+
+ Generic table API: Row operations
+
+2005-10-24 06:58 dts12
+
+ * local/snmpdump.pl:
+
+ For Thomas
+
+2005-10-24 06:54 dts12
+
+ * agent/helpers/table_iterator.c:
+
+ Provisional implementation of the "Table maintenance" generic API.
+ Most of this is not really applicable to the iterator helper, but
+ having a standard mechanism for constructing (and freeing) the
+ main iterator structure might be useful.
+
+2005-10-24 06:22 dts12
+
+ * agent/helpers/table_iterator.c:
+
+ Count the number of rows in an iterator-based table.
+
+2005-10-24 06:18 dts12
+
+ * agent/helpers/table_iterator.c,
+ include/net-snmp/agent/table_iterator.h:
+
+ Associate table index information with the iterator structure.
+ (Experimental code - introduces a minor one-off memory leak,
+ but shouldn't otherwise affect existing code)
+
+2005-10-23 20:11 tanders
+
+ * testing/tests/T035snmpv3trapdusermgmt:
+
+ initial test for SNMPv3 snmptrapd USM user management with snmpusm
+
+2005-10-23 19:57 tanders
+
+ * testing/eval_tools.sh:
+
+ fix CHECKAGENT() and introduce CHECKTRAPDORDIE()
+
+2005-10-23 19:45 tanders
+
+ * snmplib/snmpv3.c:
+
+ fix typo
+
+2005-10-23 15:15 rstory
+
+ * snmplib/container_binary_array.c:
+
+ flags support; default to no duplicate keys
+
+2005-10-23 15:13 rstory
+
+ * include/net-snmp/library/container.h:
+
+ tweak options function to allow test and set
+
+2005-10-23 15:04 rstory
+
+ * include/net-snmp/library/container.h:
+
+ add function to set container options
+
+2005-10-22 18:26 tanders
+
+ * testing/: TESTCONF.sh, tests/Sv3config,
+ tests/Sv3vacmconfig, tests/Svacmconfig,
+ tests/Svanyconfig:
+
+ fix typo in variable name
+
+2005-10-22 18:14 tanders
+
+ * testing/eval_tools.sh:
+
+ replace obsolete snmptrapd "-u" flag by "-p"
+
+2005-10-22 18:12 tanders
+
+ * agent/mibgroup/ip-mib/.cvsignore:
+
+ ip-mib changes now require .cvsignore
+
+2005-10-22 18:04 tanders
+
+ * testing/tests/Sv3configsha:
+
+ obsoleted by Sv3config
+
+2005-10-22 00:54 hardaker
+
+ * testing/tests/: T057trapdauthtest, T057trapdauthtest2
+, T057trapdauthtest3:
+
+ proper checks for failure of unauthorized traps
+
+2005-10-22 00:51 hardaker
+
+ * testing/tests/T057trapdauthtest2:
+
+ test for wrong trap oids
+
+2005-10-22 00:47 hardaker
+
+ * testing/tests/: T049snmpv3inform, T050snmpv3trap,
+ T051snmpv2ctrap, T052snmpv2cinform, T053agentv1trap
+, T054agentv2ctrap, T055agentv1mintrap,
+ T056agentv2cmintrap, T058agentauthtrap,
+ T113agentxtrap:
+
+ new config tokens round 2
+
+2005-10-22 00:46 hardaker
+
+ * agent/mibgroup/mibII/vacm_conf.c,
+ agent/mibgroup/mibII/vacm_conf.h, apps/snmptrapd_auth.c
+:
+
+ Do trap auth parsing the way Dave wants.
+
+2005-10-21 20:30 rstory
+
+ * NEWS:
+
+ note new helper and scalars
+
+2005-10-21 20:27 rstory
+
+ * agent/mibgroup/ip-mib.h:
+
+ add new IP-MIB scalars
+
+2005-10-21 20:26 rstory
+
+ * include/net-snmp/data_access/ip_scalars.h:
+
+ data access for some IP-MIB scalars
+
+2005-10-21 20:25 rstory
+
+ * agent/mibgroup/ip-mib/data_access/: scalars_common.h,
+ scalars_linux.c:
+
+ data access for linux scalars
+
+2005-10-21 20:24 rstory
+
+ * agent/mibgroup/ip-mib/: ip_scalars.c, ip_scalars.h:
+
+ some new scalars in the IP-MIB
+
+2005-10-21 20:22 rstory
+
+ * agent/helpers/instance.c,
+ include/net-snmp/agent/instance.h:
+
+ - new helper for rw access to an integer based variable which is stored
+ as ascii in a file
+
+2005-10-21 18:31 tanders
+
+ * apps/snmpusm.c, man/snmpusm.1.def:
+
+ Add "-CE ENGINE-ID" option to specify the usmUserEngineID. Enables snmpusm to manage snmptrapd's usmUserTable (fixes bug #1333655).
+
+2005-10-21 18:04 rstory
+
+ * snmplib/callback.c:
+
+ - fix fun comment header for doxygen (keep wes happy)
+ - document slightly non-obvious index use (keep dave happy)
+
+2005-10-21 12:29 alex_b
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Apply patch 1299554 from Tao to fix segfault in var_ifEntry()
+
+2005-10-21 06:55 dts12
+
+ * agent/mibgroup/disman/schedule/schedConf.c:
+
+ More portable handling of 'overshoot' declaration.
+
+2005-10-21 06:53 dts12
+
+ * agent/helpers/: table_container.c, table_data.c,
+ table_iterator.c:
+
+ Preliminary implementation of the "Table maintenance" section
+ of the generic table API.
+
+2005-10-21 06:49 dts12
+
+ * agent/helpers/table_generic.c:
+
+ Minor tweaks to generic table API names,
+ and correct a couple of flawed function prototypes.
+
+2005-10-21 05:22 tanders
+
+ * dist/nsb-functions:
+
+ more generalized exception regex to let any "testing ... failure ..." go through, e.g. the new snmptrapd test recently introduced
+
+2005-10-21 01:53 hardaker
+
+ * snmplib/snmp_api.c:
+
+ init vacm
+
+2005-10-21 01:42 hardaker
+
+ * apps/snmptrapd_log.h:
+
+ include the new snmptrapd_ds.h file
+
+2005-10-21 01:41 hardaker
+
+ * include/net-snmp/agent/ds_agent.h:
+
+ Added a warning note about potential conflicts with snmptrapd, which
+ had actually been bypassed recently and no one noticed.
+
+2005-10-21 01:41 hardaker
+
+ * testing/tests/T057trapdauthtest:
+
+ test trapd authorization failures
+
+2005-10-21 01:40 hardaker
+
+ * testing/tests/: T049snmpv3inform, T050snmpv3trap,
+ T051snmpv2ctrap, T052snmpv2cinform, T053agentv1trap
+, T054agentv2ctrap, T055agentv1mintrap,
+ T056agentv2cmintrap, T058agentauthtrap,
+ T113agentxtrap:
+
+ Modified the tests to accommodate the new trapd auth scheme
+
+2005-10-21 01:38 hardaker
+
+ * apps/: Makefile.in, snmptrapd.c, snmptrapd_auth.c
+, snmptrapd_auth.h, snmptrapd_ds.h,
+ snmptrapd_handlers.c, snmptrapd_handlers.h:
+
+ Added a new authorization handler and related configuration tokens to
+ allow snmptrapd to accept or drop notifications based on the
+ authorization assigned to a community/user paired with the action to
+ be taken (log, forward, execute). There are a number of configuration
+ tokens that were added to achieve this. 3 of the VACM ones can be
+ used as normal (view, com2sec, group) and one additional one
+ (setaccess) needs to be used to set individual views for access to
+ bind everything together. There are a number of convenience wrappers
+ as well for these token sets. Finally, there is a
+ disableAuthorization token that can be set to true to simply allow
+ everything through.
+
+2005-10-21 01:29 hardaker
+
+ * agent/mibgroup/mibII/vacm_conf.c,
+ agent/mibgroup/mibII/vacm_conf.h,
+ agent/mibgroup/mibII/vacm_vars.c,
+ include/net-snmp/library/vacm.h, snmplib/vacm.c:
+
+ - restructured the VACM code to provide for the notion of additional
+ views besides the standard read/write/notify views
+ - much of the checking code was restructured to be more modular
+ - added a new setaccess config token that can set the view name for
+ a particular access level
+ - added 3 new access levels: log, execute, net
+ - added enum structure for these
+
+2005-10-20 13:22 tanders
+
+ * agent/mibgroup/mibII/udpTable.c:
+
+ fix remaining IP address byte order bug
+
+2005-10-20 08:26 dts12
+
+ * mibs/Makefile.in:
+
+ Install the Event MIB.
+
+ (Qn: where does 'default_mibs_install' get set?)
+
+2005-10-20 08:25 dts12
+
+ * configure, configure.in:
+
+ Add schedule MIB implementation to the default list.
+
+ This qualifies for both:
+ 'Traditionally it's been "turn it on if it compiles 100%
+ of the time....'
+ since it's all non-architecture-specific code, and:
+ '... and if it requires run time enabling as well"
+
+2005-10-20 08:03 dts12
+
+ * agent/mibgroup/disman/event.h:
+
+ Add the Event MIB to the list of MIBs to load.
+
+2005-10-20 07:33 rstory
+
+ * testing/RUNTESTS:
+
+ - rmdir -> rm -fR, since directory isn't empty
+ - add -p/SNMP_TEST_PREFIX to allow non-standard tests to be run
+
+2005-10-20 05:31 tanders
+
+ * Makefile.in:
+
+ propagate test-mibs target
+
+2005-10-20 04:31 tanders
+
+ * dist/nsb-functions:
+
+ further tweak exception regex
+
+2005-10-19 23:36 rstory
+
+ * agent/mibgroup/if-mib/ifTable/: ifTable_constants.h,
+ ifTable_data_access.c, ifTable_interface.c,
+ ifTable_interface.h:
+
+ add ifTableLastChange scalar
+
+2005-10-19 17:59 tanders
+
+ * configure.in:
+
+ document that --enable-embedded-perl affects snmptrapd also
+
+2005-10-19 11:01 rstory
+
+ * dist/nsb-functions:
+
+ tweak error regexp exceptions
+
+2005-10-19 07:04 dts12
+
+ * agent/helpers/all_helpers.c:
+
+ Withdraw 'table_dataset2' helper
+
+2005-10-19 01:14 hardaker
+
+ * man/snmptrapd.conf.5.def:
+
+ add 'default' as the oid for execing the example traphandle
+
+2005-10-19 01:06 hardaker
+
+ * agent/agent_trap.c:
+
+ Fix bug #1313667: informs are sent asychronously to avoid crashing the agent when the receiver is down
+
+2005-10-18 22:24 alex_b
+
+ * win32/dist/: README.build.win32.txt, README.txt,
+ installer/net-snmp.nsi:
+
+ Win32: Rename Net-SNMP.ppd to NetSNMP.ppd, add a couple
+ header files to Win32 uninstaller.
+
+2005-10-18 18:22 tanders
+
+ * apps/snmptrapd.c:
+
+ add #ifdefs for MIB module dependent code
+
+2005-10-18 17:11 rstory
+
+ * agent/helpers/table_dataset.c:
+
+ fix index generation for fixed length octet strings
+
+2005-10-18 12:00 dts12
+
+ * agent/helpers/Makefile.in, agent/helpers/table_dataset2.c
+, include/net-snmp/agent/all_helpers.h,
+ include/net-snmp/agent/table_dataset2.h,
+ win32/libhelpers/Makefile.in,
+ win32/libhelpers/libhelpers.dsp:
+
+ Withdraw 'table_dataset2' helper.
+
+2005-10-18 11:55 dts12
+
+ * agent/mibgroup/disman/: mteEventNotificationTable.c,
+ mteEventNotificationTable.h, mteEventTable.c:
+
+ Revert to original 'table_dataset' helper.
+
+2005-10-18 11:43 rstory
+
+ * README.osX:
+
+ sync readme in all branches
+
+2005-10-18 11:33 dts12
+
+ * agent/mibgroup/notification-log-mib/notification_log.c:
+
+ Revert to using the original 'table_dataset' helper.
+
+2005-10-18 11:32 dts12
+
+ * agent/helpers/table_dataset.c,
+ include/net-snmp/agent/table_dataset.h:
+
+ Provide missing table-traversal routines.
+
+2005-10-18 10:51 dts12
+
+ * agent/mibgroup/disman/schedule/schedConf.h:
+
+ Oops! One location change got overlooked!
+
+2005-10-18 10:43 rstory
+
+ * dist/nsb-functions:
+
+ make greps for error case insensitive
+
+2005-10-18 10:30 rstory
+
+ * snmplib/Makefile.in:
+
+ do not install removed/redundant header
+
+2005-10-18 10:23 dts12
+
+ * agent/helpers/Makefile.in, agent/helpers/table_data2.c
+, agent/helpers/table_tdata.c,
+ include/net-snmp/agent/all_helpers.h,
+ include/net-snmp/agent/table_data2.h,
+ include/net-snmp/agent/table_tdata.h,
+ win32/libhelpers/Makefile.in:
+
+ Rename 'table_data2' helper as 'table_tdata'
+
+2005-10-18 07:41 dts12
+
+ * agent/helpers/table_data2.c, agent/helpers/table_dataset2.c
+, include/net-snmp/agent/table_data2.h:
+
+ Prepare the way for renaming 'table_data2' more sensibly.
+
+2005-10-18 07:38 dts12
+
+ * agent/helpers/table_data2.c,
+ agent/mibgroup/disman/event/mteEvent.c,
+ agent/mibgroup/disman/event/mteObjects.c,
+ agent/mibgroup/disman/event/mteTrigger.c,
+ agent/mibgroup/disman/expr/expExpression.c,
+ agent/mibgroup/disman/expr/expObject.c,
+ include/net-snmp/agent/table_data2.h:
+
+ Remove unwanted vestigates of 'table_data' structures, and bring
+ table creation more closely into line with the generic API template.
+
+2005-10-18 07:23 dts12
+
+ * agent/mibgroup/utilities/iquery.c:
+
+ Missing return value.
+
+2005-10-18 07:21 dts12
+
+ * agent/mibgroup/disman/event/mteObjects.c:
+
+ Missing return values.
+
+2005-10-18 07:20 dts12
+
+ * agent/mibgroup/disman/event/mteEvent.c:
+
+ If no iquery session is configured for a particular event,
+ try the settings from the trigger, before falling back to
+ the default internal query session.
+
+2005-10-18 07:18 dts12
+
+ * agent/mibgroup/disman/event/mteTriggerConf.c:
+
+ Use 'iquerySecName' settings at configure time, rather than when
+ the trigger is actually invoked. This allows:
+ iquerySecName me
+ monitor myMonitor .....
+ monitor myOtherMonitor .....
+ iquerySecName you
+ monitor yourMonitor .....
+ to work in the most natural manner.
+ If no iquery security name is available at configure time,
+ this will be evaluated at run time instead.
+
+2005-10-18 07:07 dts12
+
+ * agent/mibgroup/disman/: schedConf.c, schedConf.h,
+ schedCore.c, schedCore.h, schedTable.c,
+ schedTable.h:
+
+ Remove previous Schedule MIB implementation.
+
+2005-10-18 07:06 dts12
+
+ * agent/mibgroup/disman/: schedule.h, schedule/.cvsignore
+, schedule/schedConf.c, schedule/schedConf.h,
+ schedule/schedCore.c, schedule/schedCore.h,
+ schedule/schedTable.c, schedule/schedTable.h:
+
+ Re-worked Schedule MIB implementation.
+ Cleaner, leaner, and more complete.
+ Now with added vitamins.
+
+2005-10-17 18:24 rstory
+
+ * snmplib/callback.c:
+
+ add move verbose debugging; init inner loop counter after each iteration
+
+2005-10-17 17:02 rstory
+
+ * testing/TESTCONF.sh:
+
+ portable export of env var
+
+2005-10-17 16:56 nba
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Fix a flipping lo interface by fixing getKstatInt to do as documented
+
+2005-10-17 14:17 rstory
+
+ * agent/helpers/table_container.c:
+
+ add prototype before use; check status of correct struct member
+
+2005-10-17 12:52 rstory
+
+ * README.osX:
+
+ - note ld flags for 10.4.x building w/perl
+
+2005-10-17 11:31 dts12
+
+ * agent/mibgroup/disman/event/mteTriggerConf.c:
+
+ Ensure the event name buffer is properly cleared before use.
+
+2005-10-17 07:36 dts12
+
+ * agent/helpers/table_container.c,
+ agent/helpers/table_data.c, agent/helpers/table_data2.c
+, agent/helpers/table_dataset.c,
+ agent/helpers/table_iterator.c,
+ include/net-snmp/agent/table_container.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_data2.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/agent/table_iterator.h:
+
+ Modify existing table helpers in line with the proposed generic API.
+
+ This does *NOT* change any existing code (at least not intentionally),
+ or add any of the "missing" API routines. I've simply re-shuffled
+ the order of the existing routines to match the generic template.
+
+2005-10-17 07:29 dts12
+
+ * agent/helpers/table_generic.c:
+
+ Proper definition/documentation of a generic table API framework.
+ The exact details may not be directly appropriate in full for every
+ table helper, but this should provde a useful basic design template.
+
+2005-10-17 00:09 hardaker
+
+ * configure, configure.in:
+
+ removed forced debugging output
+
+2005-10-14 19:37 bshaw666
+
+ * configure, configure.in:
+
+ autoconf recognition
+
+2005-10-14 18:45 tanders
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in,
+ mibs/NET-SNMP-TC.txt:
+
+ support NetBSD 1.x and 2.x under the (common) "netbsd" sysObjectID.0
+
+2005-10-14 17:20 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c:
+
+ - update comments and debug messages
+ - don't release row on err (it's still in the container!)
+ - don't insert row on success (it's already in the container!)
+
+2005-10-14 17:07 rstory
+
+ * agent/: snmp_agent.c, mibgroup/util_funcs.c,
+ mibgroup/utilities/iquery.c:
+
+ replace hardcoded "snmpd" w/NETSNMP_DS_LIB_APPTYPE
+
+2005-10-14 11:25 tanders
+
+ * apps/snmptrapd.c:
+
+ register the snmpEngine MIB group under the "snmptrapd" context to allow for engineID probes via the master agent, e.g. by snmpusm
+
+2005-10-14 11:25 tanders
+
+ * agent/mibgroup/snmpv3/: snmpEngine.c, snmpEngine.h:
+
+ allow subagents (like snmptrapd) to register the snmpEngine MIB group under a context by introducing register_snmpEngine_scalars_context()
+
+2005-10-14 09:55 dts12
+
+ * agent/mibgroup/disman/: expression.h, expr/.cvsignore
+, expr/expErrorTable.c, expr/expErrorTable.h,
+ expr/expExpression.c, expr/expExpression.h,
+ expr/expExpressionConf.c, expr/expExpressionConf.h,
+ expr/expExpressionTable.c, expr/expExpressionTable.h,
+ expr/expObject.c, expr/expObject.h,
+ expr/expObjectConf.c, expr/expObjectConf.h,
+ expr/expObjectTable.c, expr/expObjectTable.h,
+ expr/expScalars.c, expr/expScalars.h, expr/expValue.c
+, expr/expValue.h, expr/expValueTable.c,
+ expr/expValueTable.h:
+
+ Preliminary (re-)implementation of the Expression MIB.
+ The expExpressionTable and expObjectTable are reasonably complete.
+ The expValueTable (and expression evaluation) is still just a
+ basic framework - expressions are displayed rather than evaluated.
+ And there's no user-level configuration of expressions yet.
+
+ But there's enough working code to be worth committing - even if
+ only as a safety mechanism.
+
+2005-10-13 17:07 rstory
+
+ * agent/helpers/table.c:
+
+ fix sparse handler case: no more rows, last column
+
+2005-10-13 12:49 rstory
+
+ * agent/helpers/table_dataset.c:
+
+ - fix table token table indexes for augmented table
+ - tweak debug
+ - add warning if too much data specified for add_row
+
+2005-10-13 11:28 rstory
+
+ * dotgdbinit:
+
+ add printindex for netsnmp_index structs
+
+2005-10-13 10:12 rstory
+
+ * dist/nsb-functions:
+
+ configure prefix (instead of using install prefix=)
+
+2005-10-13 05:15 dts12
+
+ * configure, configure.in:
+
+ Switch to using the new Event-MIB implementation by default.
+
+ The previous version is still available for those that prefer
+ to use that, but I'm sure someone will complain anyway:-(
+
+2005-10-12 18:59 tanders
+
+ * acconfig.h:
+
+ openbsd sysObjectID.0 for OpenBSD 3.x
+
+2005-10-12 18:16 tanders
+
+ * configure, configure.in, net-snmp-config.in
+:
+
+ enhance recently introduced "net-snmp-config --snmpconfpath" to output full config path
+
+2005-10-12 10:46 rstory
+
+ * man/Makefile.in:
+
+ def files are in srcdir
+
+2005-10-12 06:28 rstory
+
+ * snmplib/asn1.c:
+
+ change no-op macro def to empty isntead of (void)
+
+2005-10-11 19:17 rstory
+
+ * snmplib/asn1.c:
+
+ rework 64 bit overflow checking, accounting for signededness
+
+2005-10-11 16:30 rstory
+
+ * dist/nsb-functions:
+
+ fix variations in tail parameter format
+
+2005-10-11 14:53 rstory
+
+ * configure.in:
+
+ remove leftover EOF from rev 1.314
+
+2005-10-11 07:52 rstory
+
+ * dist/nsb-nightly:
+
+ ok, linux mail doesn't like [censored] solaris style; fix
+
+2005-10-11 07:49 rstory
+
+ * Makefile.in:
+
+ make sure net-snmp-config is executeable before building perl make files
+
+2005-10-11 05:27 dts12
+
+ * perl/: SNMP/examples/bulkwalk.pl,
+ SNMP/examples/trap-example.pl, SNMP/t/bulkwalk.t,
+ manager/manager.pm:
+
+ Be consistent in how various perl scripts are invoked.
+
+2005-10-10 19:42 tanders
+
+ * acconfig.h, mibs/NET-SNMP-TC.txt, ov/oid_to_sym.in
+, ov/oid_to_type.in:
+
+ add sysObjectID value for Mac OS X
+
+2005-10-10 18:33 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ update linux get_if_speed function name
+
+2005-10-10 18:01 tanders
+
+ * ov/: oid_to_sym.in, oid_to_type.in:
+
+ add sysObjectID value for AIX
+
+2005-10-10 17:54 rstory
+
+ * snmplib/read_config.c:
+
+ - break apart reading of config files and persistent config files (allows
+ proper handling of persistentDir token in config files)
+ - remove commented out code
+
+2005-10-10 17:51 rstory
+
+ * Makefile.in, mibs/Makefile.in:
+
+ repalce perl w/ $(PERL)
+
+2005-10-10 17:44 tanders
+
+ * acconfig.h, mibs/NET-SNMP-TC.txt:
+
+ add sysObjectID value for AIX
+
+2005-10-10 17:09 rstory
+
+ * dist/nsb-nightly:
+
+ fix from optarg processing
+
+2005-10-10 16:28 rstory
+
+ * dist/nsb-nightly:
+
+ add option for from address for email results
+
+2005-10-10 16:25 rstory
+
+ * dist/nsb-nightly:
+
+ - add distinct email addresses for success/error cases
+ - fixes for #%@$*& solaris mail exe
+ - don't remove directory til very end
+
+2005-10-10 16:24 rstory
+
+ * dist/nsb-functions:
+
+ exclude error lines for 'In function' (eg func name contains word error)
+
+2005-10-10 14:56 rstory
+
+ * man/Makefile.in:
+
+ - base mib2c.conf generation on $PERL, not -d CVS
+ - if no perl, touch file so install doesn't fail
+
+2005-10-10 14:47 rstory
+
+ * Makefile.rules, Makefile.top, local/Makefile.in
+, testing/Makefile.in:
+
+ - define PERL in all makefiles (via Makefile.top)
+ - replace all calls to perl with $(PERL)
+ - replace existing PERLPROG with PERL in makefiles
+
+2005-10-10 14:38 rstory
+
+ * net-snmp-config.in:
+
+ add PERLLDOPTS to agent libs
+
+2005-10-10 09:37 dts12
+
+ * agent/mibgroup/disman/event/mteEvent.c,
+ agent/mibgroup/disman/event/mteEventConf.c,
+ include/net-snmp/agent/ds_agent.h:
+
+ Allow the administrator to choose between following the DisMan
+ specifications strictly, or using an approach that actually works!
+ (The official ordering for adding varbinds to a notification
+ payload list makes it impossible to use specify Trigger and
+ Event objects in a sensible fashion).
+
+2005-10-10 09:30 dts12
+
+ * agent/mibgroup/disman/event/mteTrigger.c:
+
+ Don't report rows that haven't finished being created, and
+ don't keep scheduling samples for rows that are disabled or removed.
+
+2005-10-10 09:27 dts12
+
+ * agent/mibgroup/disman/event/mteTriggerDeltaTable.c:
+
+ Redundent (auto-)comment.
+
+2005-10-10 09:23 dts12
+
+ * agent/helpers/table_data2.c,
+ include/net-snmp/agent/table_data2.h:
+
+ Converting between index representations is not part of the public API.
+
+2005-10-10 08:11 dts12
+
+ * agent/mibgroup/utilities/iquery.c:
+
+ Cope with a missing internal query username
+ (rather than forcing a hardwired one)
+
+2005-10-10 07:54 dts12
+
+ * snmplib/snmp_client.c:
+
+ Return the full list of results from an internal query,
+ rather than truncating it after the first varbind.
+ (Why 'clone_var' stomps on the next link is a mystery to me!)
+
+2005-10-10 07:44 dts12
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ Indicate that 'if_speed' APIs are Linux-specific
+ (and not part of the generic IF-MIB data_access framework)
+
+2005-10-07 17:18 rstory
+
+ * agent/mibgroup/notification/snmpNotifyFilterTable.c:
+
+ ifdef out code if module not enabled
+
+2005-10-07 16:48 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c:
+
+ move misapplied patch to correct location
+
+2005-10-07 16:47 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c:
+
+ typo
+
+2005-10-07 16:46 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c:
+
+ only save settable cols
+
+2005-10-07 16:45 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable_constants.h:
+
+ define settable cols
+
+2005-10-07 16:45 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ get rid of old persistent save funcs, in favor of new generated stuff
+
+2005-10-07 16:42 rstory
+
+ * agent/helpers/table_container.c:
+
+ typo
+
+2005-10-07 16:38 tanders
+
+ * FAQ:
+
+ Major overhaul of list of supported platforms based on 5.2.2.preX testing
+
+2005-10-07 16:25 tanders
+
+ * NEWS:
+
+ fix typos in 5.2 NEWS
+
+2005-10-07 10:14 dts12
+
+ * agent/mibgroup/disman/event/mteTriggerConf.c:
+
+ Hmmmm.... removing the object entries following a duplicate trigger
+ seems to be problematical. (As in the agent crashes!) It's not
+ clear whether this is appropriate behaviour anyway.
+
+ Need to think about this a bit more.
+
+2005-10-07 09:27 dts12
+
+ * agent/mibgroup/disman/event/: mteTriggerConf.c,
+ mteTriggerConf.h:
+
+ Configure monitoring of UCD-specific tables
+ (compatability with previous Event-MIB implementation).
+
+ Not yet fully tested, but seems to be OK.
+
+2005-10-07 09:25 dts12
+
+ * agent/mibgroup/disman/: event.h, event/mteScalars.c,
+ event/mteScalars.h:
+
+ Implement the Event-MIB scalar objects.
+
+2005-10-07 09:20 dts12
+
+ * agent/mibgroup/disman/event/: mteTrigger.c, mteTrigger.h
+:
+
+ API for counting the number of values being monitored.
+
+2005-10-07 08:42 tanders
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ get rid of C++ keyword "new". MfD-based code still needs to be regenerated.
+
+2005-10-07 05:55 tanders
+
+ * Makefile.in:
+
+ add missing darwin8.h and solaris2.10.h
+
+2005-10-06 20:31 tanders
+
+ * net-snmp-config.in:
+
+ improve help output
+
+2005-10-06 20:21 tanders
+
+ * configure, configure.in, net-snmp-config.in
+:
+
+ Add net-snmp-config options --default-mibs, --default-mibdirs, --persistent-directory and --snmpconfpath
+
+2005-10-06 19:01 rstory
+
+ * testing/: TESTCONF.sh, tests/Sv3config,
+ tests/Sv3vacmconfig, tests/Svacmconfig,
+ tests/Svanyconfig:
+
+ - create and use persistent dir in test directory (so make test as root
+ doesn't muck with system persistent conf)
+
+2005-10-06 18:58 rstory
+
+ * snmplib/snmp_api.c:
+
+ counter64 support to snmp_add_var (so they can be sent w/snmptrap)
+
+2005-10-06 18:56 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_common.c:
+
+ explicit braces to keep compiler happy
+
+2005-10-06 18:55 rstory
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ include utmp/utmpx header (fix for one of the BSDs)
+
+2005-10-06 18:49 rstory
+
+ * agent/mibgroup/hardware/memory/memory_linux.c:
+
+ - increase default buffer size
+ - check open rc
+ - log err if no data available
+
+2005-10-06 18:44 rstory
+
+ * agent/mibgroup/hardware/: cpu/cpu.c, memory/hw_mem.c:
+
+ this (C++ reserved word) -> this_ptr
+
+2005-10-06 18:42 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ call init_agentx_config instead of registering handler directly
+
+2005-10-06 18:42 rstory
+
+ * agent/mibgroup/agentx/agentx_config.c:
+
+ - slight reorg of init_agentx_config()
+ - ifdef some stuff based on master agent support
+ - move agentx(perms|timeout) in conditional for agent role == master
+
+2005-10-06 08:45 rstory
+
+ * dist/nsb-functions:
+
+ cat correct file on errors
+
+2005-10-06 08:32 rstory
+
+ * dist/nsb-nightly:
+
+ add option to email results
+
+2005-10-06 07:39 tanders
+
+ * agent/mibgroup/mibII/tcpTable.c,
+ include/net-snmp/system/irix.h:
+
+ IRIX tcp-mib cleanup patch (from Albert Chin)
+
+2005-10-06 05:30 dts12
+
+ * agent/mibgroup/disman/event/mteTrigger.c:
+
+ Preliminary handling of errors.
+
+2005-10-06 05:28 dts12
+
+ * agent/mibgroup/disman/event/mteTriggerConf.c:
+
+ Block configuration of delta-thresholds on delta-samples.
+
+2005-10-06 05:17 dts12
+
+ * agent/mibgroup/disman/event/: mteTrigger.c, mteTrigger.h
+, mteTriggerConf.c, mteTriggerDeltaTable.c:
+
+ Consolidate handling of sysUpTime instance discontinuity marker.
+
+2005-10-06 05:12 dts12
+
+ * agent/mibgroup/disman/event/mteTriggerConf.c:
+
+ Support the configuration of *just* delta threshold tests.
+
+2005-10-06 05:09 dts12
+
+ * agent/mibgroup/disman/event/: mteTrigger.c,
+ mteTriggerConf.c:
+
+ Implement delta-threshold tests.
+
+2005-10-06 05:06 dts12
+
+ * agent/mibgroup/disman/event/mteTriggerConf.c:
+
+ Accept negative values (rather than rejecting them as invalid options)
+
+2005-10-06 05:05 dts12
+
+ * agent/mibgroup/disman/event/mteTrigger.c:
+
+ Don't bother trying to fire missing threshold events.
+
+2005-10-05 08:26 tanders
+
+ * perl/SNMP/SNMP.xs:
+
+ get rid of C++ keyword "class"
+
+2005-10-05 04:43 dts12
+
+ * agent/mibgroup/mibII/mta_sendmail.c:
+
+ Sigh - read the whole email message, Dave!
+
+2005-10-05 04:41 dts12
+
+ * agent/mibgroup/mibII/mta_sendmail.c:
+
+ Remove bogus trailing comma (reported by Albert Chin)
+
+2005-10-04 17:51 hardaker
+
+ * dist/makerelease:
+
+ check results of every system call instead of just special ones.
+
+2005-10-04 10:32 dts12
+
+ * agent/mibgroup/disman/event/: mteTrigger.c, mteTrigger.h
+, mteTriggerConf.c, mteTriggerDeltaTable.c:
+
+ Implement support for delta-valued samples.
+ Only tested with Boolean entries, and a basic sysUpTime.0
+ discontinuity marker. Threshold delta-valued samples and
+ wildcarded discontinuity OIDs ought to work, but still need testing.
+
+2005-10-04 10:26 dts12
+
+ * agent/mibgroup/disman/event/mteTrigger.c:
+
+ Canonicalise previous/current results - matching entries leads to
+ simpler test code. Adjust Existence tests to take advantage of this.
+
+2005-10-03 19:47 alex_b
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ Win32 installer: Fix typo in script, fix %windir% env var check.
+
+2005-10-03 07:51 dts12
+
+ * agent/mibgroup/ucd-snmp/pass_persist.c:
+
+ Run SET assignments during the ACTION pass, so errors can be reported.
+ (Should fix Bug #864281, and be consistent with pass.c behaviour)
+
+2005-10-01 16:51 rstory
+
+ * dist/nsb-nightly:
+
+ add option for email of error results
+
+2005-10-01 15:50 rstory
+
+ * agent/mibgroup/host/hr_system.c:
+
+ fix utmp include ifdef logic
+
+2005-10-01 12:25 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-10-01 12:23 rstory
+
+ * configure.in, agent/mibgroup/host/hr_storage.c:
+
+ check for mbstat.m_mbufs before using
+
+2005-09-29 18:51 hardaker
+
+ * acconfig.h:
+
+ Fix bug #1150018: Dynamic allocation of disk storage array.
+
+2005-09-29 18:48 hardaker
+
+ * agent/mibgroup/ucd-snmp/disk.c,
+ include/net-snmp/net-snmp-config.h.in:
+
+ Fix bug #1150018: Dynamic allocation of disk storage array.
+
+2005-09-29 18:28 hardaker
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c:
+
+ Patch from bug#1234834: fixes targetaddrtimeout so its writable
+
+2005-09-29 18:16 hardaker
+
+ * local/mib2c.column_enums.conf:
+
+ added generation of enums for scalars
+
+2005-09-29 13:16 rstory
+
+ * snmplib/snmpUnixDomain.c:
+
+ set sock buf size for unix domain sockets
+
+2005-09-29 06:06 dts12
+
+ * agent/mibgroup/disman/event/: mteTrigger.c,
+ mteTriggerConf.c:
+
+ Implement single-valued threshold triggers.
+
+2005-09-28 18:28 alex_b
+
+ * win32/net-snmp/: net-snmp-config.h, net-snmp-config.h.in
+:
+
+ Win32 MSVC: Enable AES encryption when SSL is enabled.
+
+2005-09-28 17:22 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_common.c:
+
+ swap reversed if/else code
+
+2005-09-28 15:36 rstory
+
+ * agent/mibgroup/utilities/iquery.c:
+
+ provide default for internal secname
+
+2005-09-28 12:38 tanders
+
+ * configure, configure.in:
+
+ Fix last remaining "present, but cannot be compiled" warning on Solaris 9
+
+2005-09-28 11:36 dts12
+
+ * agent/mibgroup/disman/: event.h, event/.cvsignore,
+ event/mteEvent.c, event/mteEvent.h,
+ event/mteEventConf.c, event/mteEventConf.h,
+ event/mteEventNotificationTable.c,
+ event/mteEventNotificationTable.h, event/mteEventSetTable.c
+, event/mteEventSetTable.h, event/mteEventTable.c
+, event/mteEventTable.h, event/mteObjects.c,
+ event/mteObjects.h, event/mteObjectsConf.c,
+ event/mteObjectsConf.h, event/mteObjectsTable.c,
+ event/mteObjectsTable.h, event/mteTrigger.c,
+ event/mteTrigger.h, event/mteTriggerBooleanTable.c,
+ event/mteTriggerBooleanTable.h, event/mteTriggerConf.c
+, event/mteTriggerConf.h, event/mteTriggerDeltaTable.c
+, event/mteTriggerDeltaTable.h,
+ event/mteTriggerExistenceTable.c,
+ event/mteTriggerExistenceTable.h, event/mteTriggerTable.c
+, event/mteTriggerTable.h,
+ event/mteTriggerThresholdTable.c,
+ event/mteTriggerThresholdTable.h:
+
+ New implementation of the DisMan Event MIB.
+
+2005-09-28 10:26 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ added documentation describing the exec() path requirement
+
+2005-09-28 10:21 hardaker
+
+ * man/snmpcmd.1.def:
+
+ Updated docs on -Ib to document extra limitations
+
+2005-09-28 06:09 dts12
+
+ * agent/helpers/table_data2.c,
+ include/net-snmp/agent/table_data2.h:
+
+ Extend table interface with row comparison API routines.
+
+2005-09-28 06:07 dts12
+
+ * agent/mibgroup/utilities/: iquery.c, iquery.h:
+
+ Use the default query session from the library.
+
+2005-09-28 06:03 dts12
+
+ * include/net-snmp/library/snmp_client.h,
+ snmplib/snmp_client.c:
+
+ Support the idea of a "default session" for the query convenience routines.
+
+2005-09-28 05:00 tanders
+
+ * README:
+
+ reveal my continued presence around here
+
+2005-09-28 04:53 dts12
+
+ * snmplib/snmp_api.c:
+
+ Callback to report establishment of a connection (from Magnus Fromreide)
+
+2005-09-27 22:02 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_linux.c:
+
+ - convert mask to network byte order
+ - update pfx_len counting for network byte order
+ - add little endian /proc/net/route example line
+ - only set route policy for default gateway routes
+ - update for new static policy flag
+ - new route create/delete functions
+
+2005-09-27 19:25 rstory
+
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.c
+:
+
+ - move active row set restriction to dependency check function
+ - update assert to test against new expected value
+
+2005-09-27 19:12 tanders
+
+ * include/net-snmp/system/solaris2.10.h:
+
+ add Solaris 10 support
+
+2005-09-27 19:08 rstory
+
+ * NEWS:
+
+ mention dynamic ipv4 route creation/deletion
+
+2005-09-27 17:45 tanders
+
+ * README.tru64, agent/mibgroup/mibII/tcpTable.c,
+ agent/mibgroup/mibII/udpTable.c:
+
+ Tru64 Unix 5.x build fixes (bug #1217509)
+
+2005-09-27 14:51 hardaker
+
+ * local/mib2c.genhtml.conf:
+
+ print range information
+
+2005-09-27 13:14 rstory
+
+ * agent/mibgroup/ip-forward-mib/inetCidrRouteTable/:
+ inetCidrRouteTable.c, inetCidrRouteTable.h,
+ inetCidrRouteTable_constants.h,
+ inetCidrRouteTable_data_access.c,
+ inetCidrRouteTable_data_access.h,
+ inetCidrRouteTable_interface.c,
+ inetCidrRouteTable_interface.h:
+
+ - update generated code
+ - use new route_entry functions for dynamic ipv4 route creation/deletion
+ - nuke generated column undo funcs, use new table level one instead
+ - add some depedency validation (addr type & expected addr len)
+
+2005-09-27 13:05 rstory
+
+ * local/mib2c-conf.d/generic-ctx-get.m2i:
+
+ remove debugging comments
+
+2005-09-27 12:53 hardaker
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ patch #1304400: better hrSWRunType support
+
+2005-09-27 12:45 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ patch #1225360 to fix the smux encoding of the requestid to a signed int
+
+2005-09-27 12:14 rstory
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ key vacm "no access" warning off agent_mode instead of app type
+
+2005-09-27 12:05 rstory
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ remove unnecessary sock startup
+
+2005-09-27 12:04 rstory
+
+ * include/net-snmp/data_access/route.h:
+
+ - document that addresses are in network byte order
+ - bump max policy oid length to 2, to handle default null oid case
+ - move policy static flag definition with other flags
+ - change policy static flag so as not to conflict with item changed flags
+ - add new policy deep copy flag
+ - add macro of 'change item' flags mask
+
+2005-09-27 12:01 rstory
+
+ * local/mib2c-update:
+
+ add --forward flag to patch command
+
+2005-09-27 12:00 rstory
+
+ * local/mib2c-conf.d/generic-ctx-get.m2i:
+
+ - use new mib2c left/right hand length units for proper sizes when copying
+ and comparing data
+
+2005-09-27 11:59 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes-set.m2i:
+
+ - override default left/right hand length units; both are elements
+ - update initial set of max len to be elements
+
+2005-09-27 11:58 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ define default left/right hand lenght units (bytes/elements)
+
+2005-09-27 11:56 rstory
+
+ * local/mib2c-conf.d/generic-table-oids.m2c:
+
+ - define separate settable flags
+ - define settable column macro
+
+2005-09-27 11:54 rstory
+
+ * local/mib2c-conf.d/mfd-data-access.m2c:
+
+ fix incorrect return define suggestion in comment
+
+2005-09-27 11:53 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - always track if data context was provided by user
+ - don't call data ctx init routine for user provided data
+ - remove internal/verbose prefix from all debug error cases
+ - don't try to copy indexes if index check failed (and ctx was released!)
+ - call row_prep for newly created rows (dynamic row creation)
+ - call new table undo before column undo
+
+2005-09-27 11:47 rstory
+
+ * local/mib2c-conf.d/mfd-persistence.m2i:
+
+ - only include settable object when calculating tmp storage size
+ - don't call col_save routine if column isn't settable
+
+2005-09-27 11:43 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ add table level undo before column level undo
+
+2005-09-27 11:42 rstory
+
+ * local/mib2c-conf.d/syntax-RowStatus-dependencies.m2i:
+
+ handle newly created row w/row status of destroy
+
+2005-09-27 11:39 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_common.c:
+
+ - don't free rt_policy if static flag set
+ - new function to set route changes
+ - new function to copy route_entries
+
+2005-09-27 11:37 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route.h:
+
+ require new route_ioctl for linux
+
+2005-09-27 11:36 rstory
+
+ * agent/mibgroup/agent/nsCache.c:
+
+ - update timeout for auto-update caches when mib value changed
+
+2005-09-27 11:34 rstory
+
+ * agent/snmpd.c:
+
+ - move code for help case after all command line args have been processed
+ - add new command line option (-n) for 'application name'; very useful for
+ having multiple configs, and works well with persistent store too. Open
+ for suggestions on a different char (or merge w/some existing multi-char
+ set; maybe -C).
+
+2005-09-27 11:26 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-09-27 11:26 rstory
+
+ * configure.in:
+
+ - add disman/event-mib to default module list
+ - add host to default module list for
+ linux* | mingw32* | cygwin* | freebsd* | dynix* | solaris2* | hpux*
+
+2005-09-27 10:44 rstory
+
+ * agent/mibgroup/: if-mib/ifTable/.cvsignore,
+ if-mib/ifXTable/.cvsignore,
+ ip-forward-mib/inetCidrRouteTable/.cvsignore,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/.cvsignore:
+
+ ignore some non-source files generated by MFD
+
+2005-09-27 10:41 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/: route_ioctl.c,
+ route_ioctl.h, route_linux.h:
+
+ copy route ioctls from mibII/route_write & update for route_entry
+
+2005-09-26 19:42 hardaker
+
+ * snmplib/mib.c:
+
+ Fix bug 1292896 checking for -1 before searching for TC type
+
+2005-09-26 18:54 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-09-26 18:40 rstory
+
+ * configure.in:
+
+ don't make decisions based on target_os until after it's set!
+
+2005-09-26 18:37 hardaker
+
+ * snmplib/vacm.c:
+
+ Bug Patch #1296842: don't return from void function
+
+2005-09-26 16:21 tanders
+
+ * testing/tests/Sv3config:
+
+ fix SNMPv3 config if AES isn't available
+
+2005-09-26 13:00 tanders
+
+ * testing/RUNTESTS:
+
+ Fix "-x" option
+
+2005-09-26 08:25 tanders
+
+ * configure, configure.in:
+
+ OpenBSD build fix: bring in sys/timeout.h
+
+2005-09-24 15:02 alex_b
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ Win32 installer: Put back missing 'Are you sure you want to completely
+ remove' message when uninstalling.
+
+2005-09-23 21:45 alex_b
+
+ * win32/dist/: README.build.win32.txt,
+ installer/net-snmp.nsi:
+
+ Win32 installer: Add optional check for OpenSSL DLL (libeay32.dll)
+
+2005-09-23 12:24 rstory
+
+ * NEWS:
+
+ note that snmpd now implemented notification logging and filtering
+
+2005-09-23 10:41 tanders
+
+ * configure:
+
+ Rerun autoconf
+
+2005-09-23 10:20 rstory
+
+ * agent/mibgroup/host/hr_system.c:
+
+ shrink buffer size so MIB size limit not exceeded
+
+2005-09-22 19:02 rstory
+
+ * configure.in:
+
+ move socketvar.h after socket.h
+
+2005-09-22 17:21 alex_b
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ Win32 installer: Default to dislabed for development files.
+
+2005-09-22 15:35 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ put var name in braces to separate from appended text
+
+2005-09-20 09:23 dts12
+
+ * snmplib/read_config.c:
+
+ Since the length parameter isn't always required when storing data,
+ allow it to be omitted (and correct the misleading comment as to
+ how this is actually used!)
+
+2005-09-16 15:30 hardaker
+
+ * configure, configure.in:
+
+ Patch from Patrick Welche to fix quoting for newer autoconfs
+
+2005-09-16 15:24 hardaker
+
+ * agent/mibgroup/disman/mteEventTable.c:
+
+ correct missing function calls now replaced by tdata.
+
+2005-09-16 14:38 hardaker
+
+ * snmplib/read_config.c:
+
+ support for string parsing of counter64s
+
+2005-09-16 14:34 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-09-16 14:33 rstory
+
+ * configure.in, dist/net-snmp.spec:
+
+ update out-of-sync version numbers
+
+2005-09-16 13:00 rstory
+
+ * agent/mibgroup/mibII/route_write.c:
+
+ don't try to use SIOC(ADD|DEL)RT if they aren't defined
+
+2005-09-16 12:45 rstory
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ HRSWRUNPERF_MEM don't work on darwin8
+
+2005-09-16 12:41 rstory
+
+ * agent/Makefile.in, apps/Makefile.in:
+
+ use new configure var PERLLDOPTS
+
+2005-09-16 12:10 tanders
+
+ * configure, configure.in:
+
+ add missing second semicolon
+
+2005-09-16 11:51 dts12
+
+ * snmplib/: check_varbind.c, snmp_api.c,
+ snmp_logging.c:
+
+ Pick up a couple of stray 'strings' that slipped through.
+ (and a bogus ASN type name)
+
+2005-09-16 10:55 rstory
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ refine conditional includes logic
+
+2005-09-16 10:46 rstory
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ include sys/socketvar.h iff available
+
+2005-09-16 10:43 rstory
+
+ * configure.in:
+
+ break perl ld opts into its own var
+
+2005-09-16 10:41 rstory
+
+ * configure:
+
+ update for configure.in
+
+2005-09-16 10:31 rstory
+
+ * configure.in:
+
+ configure.in
+
+2005-09-16 08:52 dts12
+
+ * agent/mibgroup/notification-log-mib/notification_log.c:
+
+ Tweak to use the revised 'tdata' API.
+
+2005-09-16 07:48 dts12
+
+ * local/: mib2c.container.conf, mib2c.table_data.conf:
+
+ Use the appropriate library utility routines for returning a
+ column value, and checking the validity of an assignment.
+
+2005-09-16 07:33 dts12
+
+ * local/mib2c.table_data.conf:
+
+ Use the (revised) container-based 'table_data2' helper.
+
+2005-09-16 07:21 dts12
+
+ * local/: mib2c.container.conf, mib2c.table_data.conf:
+
+ Fix typo when defining range of valid columns.
+
+2005-09-16 07:18 dts12
+
+ * agent/helpers/table_data2.c, agent/helpers/table_dataset2.c
+, include/net-snmp/agent/table_data2.h,
+ include/net-snmp/agent/table_dataset2.h:
+
+ I've never like the renaming of the container-based table_data
+ API calls and data structures. If we're starting to think about
+ releasing this code, then any alterations must be made *before*
+ this goes live, or else it'll be too late.
+
+ I've finally come up with a form of naming for the table_data2
+ code that I'm reasonably happy with (based around 'tdata'),
+ so this patch rewrites this helper to use that style (as well
+ as tweaking the dataset2 code to match).
+ The main dataset2 API hasn't been properly updated, but this
+ should probably also be addressed before 5.3 goes out of the door.
+
+ This version also illustrates a suitable "generic table API",
+ that could usefully be considered for other table helpers as
+ well. Some aspects of it may be specific to the table_data
+ framework, but the basic ideas are more widely relevant.
+
+2005-09-16 06:44 dts12
+
+ * agent/helpers/table_dataset2.c:
+
+ A container-based 'dataset' implementation will automatically convert
+ GETNEXT/BULK requests into an equivalent GET request (including updating
+ the OID). So all that's required is to return the appropriate value.
+ The 'netsnmp_table_data2_build_result' routine is therefore redundent.
+
+2005-09-16 06:37 dts12
+
+ * include/net-snmp/library/check_varbind.h,
+ snmplib/check_varbind.c:
+
+ Define a new check utility routine for unsigned integers.
+ Integers are meant to be represented as 'long' rather than 'int' values.
+
+2005-09-16 06:30 dts12
+
+ * snmplib/: asn1.c, int64.c, parse.c,
+ read_config.c, snmp-tc.c, snmpAAL5PVCDomain.c,
+ snmpIPXDomain.c, snmpTCPDomain.c,
+ snmpTCPIPv6Domain.c, snmpUDPDomain.c,
+ snmpUDPIPv6Domain.c, snmp_api.c, snmp_logging.c
+, snmp_transport.c:
+
+ Blitz use of 'string' as a variable name.
+
+2005-09-16 05:49 dts12
+
+ * configure:
+
+ Regenerate to match updated 'configure.in'
+
+2005-09-16 01:16 hardaker
+
+ * snmplib/snmpksm.c:
+
+ Use a security model number defined in the global header instead of a
+ hard-coded number
+
+2005-09-16 01:14 hardaker
+
+ * include/net-snmp/library/snmp_secmod.h:
+
+ define security model numbers for net-snmp specific security models
+ here to keep a registry in a central place.
+
+2005-09-16 01:13 hardaker
+
+ * include/net-snmp/library/snmplocalsm.h,
+ snmplib/snmplocalsm.c:
+
+ - Defined a local security model that assumes the person that executed
+ the agent is the one who should be authorized. It requires that a
+ transport was used that was not a direct network transport (EG,
+ currently this means it was tunneled or sent through stdin/out
+ channel). Authentication and encryption level, being unknown, is
+ left at noAuthNoPriv.
+
+ This model is expected to be used for experimental and purposes only
+ at this time and should probably not be used in production.
+
+2005-09-16 00:45 hardaker
+
+ * include/net-snmp/library/snmp.h:
+
+ define a PDU tunneled flag
+
+2005-09-15 11:58 rstory
+
+ * configure.in:
+
+ check for mnt_dir in statvfs
+
+2005-09-15 09:50 hardaker
+
+ * mibs/makehtml.pl:
+
+ Added a link to the conformance summary.
+
+2005-09-15 09:48 hardaker
+
+ * snmplib/snmp_transport.c:
+
+ - Added STD init
+
+2005-09-15 09:46 hardaker
+
+ * include/net-snmp/library/snmpSTDDomain.h,
+ include/net-snmp/library/snmp_transport.h,
+ snmplib/snmpSTDDomain.c:
+
+ - Added ability for STD handler to call external things to pipe to/from
+ - Beginning support for a transport being known as "tunneled".
+
+2005-09-15 09:45 hardaker
+
+ * dist/makerelease:
+
+ minor fixes
+
+2005-09-15 09:44 hardaker
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ Definitions for new features (std and a future SM model)
+
+2005-09-14 23:04 rstory
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ check for struct member before using
+
+2005-09-14 20:24 rstory
+
+ * configure.in:
+
+ - check for sys/socketvar.h earlier
+ - include sys/socketvar.h in network header tests
+ - fix without-elf test
+
+2005-09-14 20:06 rstory
+
+ * include/net-snmp/system/darwin8.h:
+
+ missing defines for darwin8 (OS X 10.4.2)
+
+2005-09-14 14:18 hardaker
+
+ * include/net-snmp/library/snmpSTDDomain.h,
+ snmplib/snmpSTDDomain.c:
+
+ Added a odd transport to do stuff through stdin/out
+
+2005-09-13 14:49 rstory
+
+ * include/net-snmp/library/snmp_locking.h:
+
+ remove unused file
+
+2005-09-12 11:36 dts12
+
+ * testing/Makefile.in:
+
+ Provide a make target for testing the MIBs implemented by an agent.
+ The behaviour of this target may need some adjustment, but it's a start...
+
+2005-09-12 11:24 dts12
+
+ * include/net-snmp/agent/table_array.h:
+
+ Document that 'delete_row' hook doesn't return a useful result.
+
+2005-09-12 11:16 dts12
+
+ * include/net-snmp/agent/all_helpers.h:
+
+ Include the table_array helper (as used by the "mib2c.array-user.conf"
+ template) in the combined helper header file.
+ (Now we'll find out why it was omitted.....)
+
+2005-09-12 10:50 dts12
+
+ * snmplib/: check_varbind.c, snmp-tc.c:
+
+ Ensure that invalid RowStatus assignments return a 'wrongValue' error.
+
+2005-09-12 10:46 dts12
+
+ * include/net-snmp/library/check_varbind.h,
+ snmplib/check_varbind.c:
+
+ Additional SET validation utility routines
+ (for OID and general INTEGER assignments)
+
+2005-09-12 10:29 dts12
+
+ * agent/mibgroup/: utilities.h, utilities/iquery.h:
+
+ Include the new "internal query" module
+
+2005-09-09 07:11 dts12
+
+ * local/Makefile.in:
+
+ Install new mib2c config files. (Bug #1284315)
+
+2005-09-09 06:09 dts12
+
+ * perl/OID/OID.xs:
+
+ Ensure that the MIB internals are initialised before using them. (Bug #705536)
+
+2005-09-08 14:56 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ remove shutdown code (handled by ifTable)
+
+2005-09-07 10:30 dts12
+
+ * perl/agent/default_store/Makefile.PL:
+
+ Fix a 'my' list declaration that slipped through the net.
+ Can finally close bugs #579705 & #601190.
+
+2005-09-07 07:28 dts12
+
+ * agent/helpers/table.c:
+
+ Report errors for invalid table OIDs appropriately for the type of request.
+ (Based on patch #1276999 by Robert Wilcox)
+
+2005-09-07 05:13 dts12
+
+ * snmplib/snmpusm.c:
+
+ Tweak to USM debugging - help detect engineID mismatches
+
+2005-09-06 21:48 alex_b
+
+ * win32/: libsnmp_dll/libsnmp.def,
+ libsnmp_dll/libsnmp.def.in, netsnmpmibs/Makefile.in,
+ netsnmpmibs/netsnmpmibs.dsp, netsnmpmibssdk/Makefile.in
+, netsnmpmibssdk/netsnmpmibssdk.dsp:
+
+ Win32 build fixes
+
+2005-09-06 20:37 alex_b
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ Win32 MSVC compile fix - declare variables at the top of the function.
+
+2005-09-06 20:07 alex_b
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ Change default version for binary.
+
+2005-09-06 20:06 alex_b
+
+ * README.win32, win32/Makefile.in, win32/build.pl
+, win32/dist/installer/net-snmp.nsi:
+
+ Add 'Development files' section to win32 binary
+
+2005-09-06 19:29 alex_b
+
+ * win32/dist/README.txt:
+
+ Win32: Update binary README.txt to reference README.win32
+
+2005-09-06 19:17 tanders
+
+ agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/.cvsignore
+:
+
+ add .libs and *.lo
+
+2005-09-06 16:23 rstory
+
+ * agent/mibgroup/:
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c
+, mibII/udpTable.c:
+
+ fix reversed ipAddress on little endian architectures
+
+2005-09-06 11:19 rstory
+
+ * Makefile.top:
+
+ move to libtool recommended versioning
+
+2005-09-05 19:00 rstory
+
+ * agent/mibgroup/if-mib/: ifTable/ifTable.c,
+ ifTable/ifTable.h, ifTable/ifTable_constants.h,
+ ifTable/ifTable_data_access.c,
+ ifTable/ifTable_data_access.h, ifTable/ifTable_interface.c
+, ifTable/ifTable_interface.h, ifXTable/ifXTable.c
+, ifXTable/ifXTable.h, ifXTable/ifXTable_constants.h
+, ifXTable/ifXTable_data_access.c,
+ ifXTable/ifXTable_data_access.h,
+ ifXTable/ifXTable_interface.c,
+ ifXTable/ifXTable_interface.h:
+
+ update generated code
+
+2005-09-05 16:16 rstory
+
+ * testing/tests/Sv3config:
+
+ check for OpenSSL before trying to use AES
+
+2005-09-04 12:08 rstory
+
+ * testing/RUNTESTS:
+
+ use existing SNMP_VERBOSE env value, if set
+
+2005-09-04 11:56 rstory
+
+ * man/Makefile.in:
+
+ test conditional instead of ignoring execution error
+
+2005-09-02 20:33 hardaker
+
+ * apps/: snmptrapd_auth.c, snmptrapd_auth.h:
+
+ added template functions for authorization decisions
+
+2005-09-02 19:32 hardaker
+
+ * remove-files:
+
+ remove .cvsignore files
+
+2005-09-01 17:07 rstory
+
+ * local/mib2c-conf.d/mfd-persistence.m2i:
+
+ extra paranoid length checks
+
+2005-09-01 16:45 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ account for hexified text len on persistent store save
+
+2005-08-31 22:29 alex_b
+
+ * NEWS, perl/SNMP/SNMP.xs:
+
+ Apply patch for bug 1206712: Perl getnext doesn't honor explicit reference
+ to MIB file
+
+2005-08-30 11:40 rstory
+
+ * testing/tests/: T160rfc1213, T161rfc1213, T162rfc1213
+:
+
+ remove non-conditional tests of potentially unimplemented objects
+
+2005-08-30 08:21 rstory
+
+ * agent/mibgroup/examples/notification.c:
+
+ keep running count of traps sent
+
+2005-08-30 08:19 rstory
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ add notification filtering per RFC 3413, section 6
+
+2005-08-30 08:11 rstory
+
+ * agent/mibgroup/notification.h:
+
+ use new mfd snmpNotifyFilterTable
+
+2005-08-30 08:06 rstory
+
+ agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_constants.h
+:
+
+ new file
+
+2005-08-29 21:03 rstory
+
+ * agent/mibgroup/: if-mib/ifTable/.cvsignore,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/.cvsignore,
+ tcp-mib/tcpConnectionTable/.cvsignore,
+ tcp-mib/tcpListenerTable/.cvsignore:
+
+ ignore txt files
+
+2005-08-29 21:00 rstory
+
+ * agent/mibgroup/: snmp-notification-mib.h,
+ snmp-notification-mib/snmpNotifyFilterTable.h,
+ snmp-notification-mib/snmpNotifyFilterTable/.cvsignore,
+ snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.c
+,
+ snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+,
+ snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.c
+,
+ snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.h
+,
+ snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.c
+,
+ snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.h
+:
+
+ - new MFD snmpNotifyFilterTable
+
+2005-08-29 20:53 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ - remove commented out mib2c code
+ - set row dirty flag on succesfful commit
+ - clear row dirty flag on successful undo commit
+
+2005-08-29 20:52 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - change dirty flag to u_int
+ - always generated interface irreversible_commit
+ - move auto row insert/delete to irreversible_commit
+ - release deleted rows in post_request, before calling user
+ - warning if dirty flag set on unsuccessful packet
+ - memset local struct to 0x00 before use
+ - copy indexes to rowreq oid_idx on create
+ - set (incr) global dirty if user set row dirty
+ - clear (decr) global dirty if use cleared flag on undo
+
+2005-08-29 20:47 rstory
+
+ * local/mib2c-update:
+
+ autocreate current dir, if needed
+
+2005-08-29 20:47 rstory
+
+ * include/net-snmp/agent/mfd.h:
+
+ - fix comments on user flags
+ - add user flag mask
+ - add mfd row mask
+ - add MFD_ROW_DIRTY flag
+
+2005-08-29 20:46 rstory
+
+ * local/mib2c-conf.d/mfd-persistence.m2i:
+
+ add comments
+
+2005-08-29 20:45 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ - add comments
+ - move flag clear a little later
+
+2005-08-29 20:38 rstory
+
+ * local/mib2c-conf.d/node-get.m2i:
+
+ tweak comment
+
+2005-08-29 20:38 rstory
+
+ * local/mib2c-conf.d/syntax-RowStatus-dependencies.m2i:
+
+ - fix required columns test (they are a min, not exact requirement)
+ - auto-transition createAndGo to active
+ - set MFD_ROW_DELETED on destroy
+ - tweak log message on creation errors
+
+2005-08-29 20:36 rstory
+
+ * include/net-snmp/library/vacm.h, snmplib/vacm.c:
+
+ - rework view list functions to take pointer to head (vs hardcoded head)
+
+2005-08-29 20:32 rstory
+
+ * snmplib/container_binary_array.c:
+
+ add iterator support
+
+2005-08-29 20:31 rstory
+
+ * include/net-snmp/library/container.h:
+
+ - fix some comments
+ - tweaks for iterator support
+ - remove unused soted_container typedef
+
+2005-08-29 20:29 rstory
+
+ * snmplib/system.c:
+
+ remove unused var
+
+2005-08-29 20:26 rstory
+
+ * agent/mibgroup/target/target.c:
+
+ - set new target paramName in session
+ - fix bug: strdup securityName, since it will be freed on session close
+
+2005-08-29 20:24 rstory
+
+ * include/net-snmp/library/snmp_api.h, snmplib/snmp_api.c
+:
+
+ add target paramName
+
+2005-08-29 20:20 rstory
+
+ * agent/mibgroup/notification/: snmpNotifyFilterProfileTable.c
+, snmpNotifyFilterProfileTable.h:
+
+ rename get_FilterName -> get_FilgerProfileName
+
+2005-08-29 20:18 rstory
+
+ * agent/mibgroup/header_complex.c:
+
+ log warning on duplicate add_data
+
+2005-08-29 20:16 rstory
+
+ * agent/helpers/bulk_to_next.c:
+
+ add debug
+
+2005-08-29 20:15 rstory
+
+ * agent/mib_modules.c:
+
+ - move mib module shutdowns to a SHUTDOWN callback so they are called
+ after the last snmp_store() and can release table data
+ - add logic for testing extra init_mib_modules() calls
+
+2005-08-29 20:12 rstory
+
+ * agent/snmpd.c:
+
+ - move mib module shutdowns to a SHUTDOWN callback so they are called
+ after the last snmp_store(), and can release table data
+
+2005-08-29 20:09 rstory
+
+ * include/net-snmp/library/snmp_client.h,
+ snmplib/snmp_client.c:
+
+ move find_varbind_int_list to snmp_client.c
+
+2005-08-29 20:08 rstory
+
+ * agent/agent_trap.c:
+
+ - move find_varbind_int_list to snmp_client.c
+ - remove extraneous text in debug msg
+
+2005-08-29 20:06 rstory
+
+ * agent/agent_trap.c:
+
+ if sink contains ':', pass whole thing as peername. (allows tcp sinks)
+
+2005-08-29 18:25 tanders
+
+ * agent/mibgroup/ucd-snmp/logmatch.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ include/net-snmp/library/default_store.h,
+ snmplib/data_list.c, snmplib/read_config.c,
+ snmplib/snmp_api.c:
+
+ introduce granular config/persistent file disablement (Patch #1259257 by Steven Friedl)
+
+2005-08-26 09:15 dts12
+
+ * dist/net-snmp.spec:
+
+ Advertise the main RPM as providing the equivalent of the RedHat/Fedora
+ 'net-snmp-utils' RPM. Bring the main information settings into line
+ with current rpmbuild expectations ('License' rather than 'Copyright')
+
+2005-08-25 05:16 dts12
+
+ * agent/mibgroup/mibII/: vacm_conf.c, vacm_vars.c:
+
+ The view mask is not necessarily the same length as the OID it's
+ masking against. Configure and report this properly. (Bug #1202692)
+
+2005-08-25 05:06 dts12
+
+ * snmplib/check_varbind.c:
+
+ Varbind checks should return an SNMPv2 error (wrongValue)
+ rather than the equivalent SNMPv1 error (badValue).
+
+2005-08-23 10:05 dts12
+
+ * agent/mibgroup/mibII/ip.c:
+
+ Use 'ips_fragments' field of IP statistics structure, if available
+ (See patch #1103739)
+
+2005-08-23 10:04 dts12
+
+ * configure, configure.in:
+
+ Test for 'ips_fragments' field in IP statistics structure.
+ (See patch #1103739)
+
+2005-08-23 09:51 dts12
+
+ * apps/snmptrapd.c:
+
+ Remove '-l' option from optarg processing
+ (since the corresponding case statement was deleted months ago!)
+ Reported by John Pfaff.
+
+2005-08-22 21:17 alex_b
+
+ * NEWS, apps/snmpdelta.c:
+
+ win32: Fix for 'select: No such file or directory' in snmpdelta
+
+2005-08-22 14:08 tanders
+
+ * local/snmpconf.dir/snmp-data/authopts:
+
+ add missing AES support
+
+2005-08-22 13:49 tanders
+
+ * man/: snmp.conf.5.def, snmpd.conf.5.def,
+ snmptrapd.conf.5.def:
+
+ fully document AES
+
+2005-08-19 19:06 rstory
+
+ * agent/mibgroup/ip-mib/data_access/systemstats_linux.c:
+
+ grrr; *really* fix typo
+
+2005-08-19 19:05 rstory
+
+ * agent/mibgroup/ip-mib/data_access/systemstats_linux.c:
+
+ fix typo
+
+2005-08-19 10:35 tanders
+
+ * man/snmpd.conf.5.def:
+
+ emphasize to use "proxy ... .1.3" (not just .1) to proxy the entire MIB tree (Bug #1249594)
+
+2005-08-19 10:06 tanders
+
+ * agent/snmpd.c:
+
+ improve help output for "-D" (Bug #1249556) and "-c"
+
+2005-08-19 09:24 tanders
+
+ * snmplib/check_varbind.c:
+
+ add missing return statement to netsnmp_check_vb_size_range() (Bug #1263523)
+
+2005-08-19 07:59 tanders
+
+ * man/snmpdelta.1.def:
+
+ fix typo
+
+2005-08-19 05:55 tanders
+
+ * agent/mibgroup/notification-log-mib/.cvsignore:
+
+ initial .cvsignore
+
+2005-08-19 05:43 tanders
+
+ * agent/mibgroup/: hardware/cpu/.cvsignore,
+ hardware/memory/.cvsignore, if-mib/ifTable/.cvsignore
+, if-mib/ifXTable/.cvsignore,
+ ip-forward-mib/inetCidrRouteTable/.cvsignore,
+ ip-forward-mib/ipCidrRouteTable/.cvsignore,
+ ip-mib/inetNetToMediaTable/.cvsignore,
+ ip-mib/ipAddressTable/.cvsignore,
+ ip-mib/ipSystemStatsTable/.cvsignore:
+
+ ignore .libs at more places
+
+2005-08-19 05:08 tanders
+
+ * README.agent-mibs:
+
+ list context support and fix typo
+
+2005-08-18 18:51 alex_b
+
+ * snmplib/snmp_client.c:
+
+ Win32 MSVC: Use __int64 instead of long long.
+
+2005-08-18 18:05 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ - move test after foreach loop
+ - set interactive flat after overwrite
+
+2005-08-18 18:00 rstory
+
+ * snmplib/asn1.c:
+
+ return error if asn buffer exceeds objid dest buffer
+
+2005-08-18 17:53 rstory
+
+ * agent/helpers/table_data2.c:
+
+ - remove unused index_oid/len
+ - restore netsnmp_table_data2_build_result
+
+2005-08-18 17:52 rstory
+
+ * include/net-snmp/agent/table_data2.h:
+
+ remove unused index_oid/len
+
+2005-08-18 17:50 rstory
+
+ * agent/snmpd.c:
+
+ quiet compiler
+
+2005-08-18 17:35 rstory
+
+ * dist/nsb-functions:
+
+ - don't overwrite existing configure extras
+ - add make extras
+
+2005-08-18 17:35 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ bring hpux function decl in line w/protype
+
+2005-08-18 17:13 rstory
+
+ * agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.c
+:
+
+ fix bug 1259049: snmpd segfaults in IP-MIB during snmpwalk
+
+2005-08-18 09:44 rstory
+
+ * snmplib/: asn1.c, int64.c, snmp_client.c:
+
+ - lots of 64 bit checks added iff SIZEOF_LONG != 4
+ - check counter64 high/low overflows (int64.c)
+ - truncate received values to 32 bits (asn1.c)
+ - truncate sent values to 32 bits before encoding (asn1.c)
+ - update set_var_value (snmp_client.c)
+ - truncate varbind value sets to 32 bits
+ - handle set of integers of various lengths (1, 2, 4, 8 bytes)
+
+2005-08-18 06:05 dts12
+
+ * agent/agent_trap.c:
+
+ Don't generate authFail traps if these are not required.
+ (Bug #1226788, reported by Wang Tek Kee)
+
+2005-08-17 20:44 alex_b
+
+ * agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ win32/libsnmp/Makefile.in, win32/libsnmp/libsnmp.dsp
+, win32/libsnmp_dll/Makefile.in,
+ win32/libsnmp_dll/libsnmp_dll.dsp:
+
+ Win32 MSVC build fixes: LONG_MIN not defined (limits.h) and added
+ fd_event_manager.c to build files.
+
+2005-08-17 20:29 alex_b
+
+ * README.win32:
+
+ Add 'Co-existence with Microsoft SNMP services' section and update the
+ 'Interactions with Other Vendor's Products' section.
+
+2005-08-17 17:50 tanders
+
+ * man/snmp.conf.5.def:
+
+ Improve documentation on clientAddr token: also used by snmpd when sending notifications
+
+2005-08-17 09:41 dts12
+
+ * include/net-snmp/types.h:
+
+ Fix problems with 32/64-bit type definitions (Bug #1254990)
+
+2005-08-17 08:36 dts12
+
+ * agent/agent_index.c, agent/agent_read_config.c,
+ agent/agent_registry.c, agent/agent_trap.c,
+ agent/auto_nlist.c, agent/mib_modules.c,
+ agent/snmp_agent.c, agent/snmp_vars.c,
+ agent/snmpd.c, agent/helpers/baby_steps.c,
+ agent/helpers/bulk_to_next.c, agent/helpers/cache_handler.c
+, agent/helpers/debug_handler.c,
+ agent/helpers/instance.c, agent/helpers/mode_end_call.c
+, agent/helpers/multiplexer.c, agent/helpers/null.c
+, agent/helpers/old_api.c, agent/helpers/read_only.c
+, agent/helpers/row_merge.c, agent/helpers/scalar.c
+, agent/helpers/scalar_group.c,
+ agent/helpers/serialize.c, agent/helpers/stash_cache.c
+, agent/helpers/stash_to_next.c, agent/helpers/table.c
+, agent/helpers/table_array.c,
+ agent/helpers/table_container.c,
+ agent/helpers/table_data.c, agent/helpers/table_dataset.c
+, agent/helpers/table_iterator.c,
+ agent/helpers/watcher.c,
+ include/net-snmp/net-snmp-includes.h, snmplib/data_list.c
+, snmplib/oid_stash.c,
+ agent/mibgroup/agentx/client.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/mibII/at.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/route_headers.h,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/udp.c,
+ agent/mibgroup/mibII/vacm_conf.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/logmatch.c,
+ agent/mibgroup/ucd-snmp/memory_aix4.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/memory_hpux.c,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proc.c:
+
+ Remove redundant '#include <dmalloc.h>' statements, since this is handled in
+ the header file which is included anyway. (Patch #1108053 by Jun Kuriyama)
+
+2005-08-17 07:50 dts12
+
+ * testing/tests/: T110agentxget, T111agentxset,
+ T112agentxsetfail, T113agentxtrap:
+
+ Support running AgentX tests when configured using separate
+ 'agentx/master agentx/subagent' modules (Patch #1049794 from magfr)
+
+2005-08-17 05:54 dts12
+
+ * snmplib/snmpUDPDomain.c:
+
+ Extend length of com2sec "source" buffer (Patch #1225130 from Andrew Steets)
+
+2005-08-17 04:45 dts12
+
+ * snmplib/winpipe.c:
+
+ Fix typo (patch #1255713 by Bernhard Penz)
+
+2005-08-16 20:09 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c:
+
+ fix bug 1259051: snmpd segfaults on amd64
+
+2005-08-16 17:16 rstory
+
+ * agent/mibgroup/ip-mib/data_access/systemstats_linux.c:
+
+ allow ipv4 stats to work if v6 stats are not available
+
+2005-08-16 16:56 rstory
+
+ * agent/mibgroup/ip-mib/data_access/systemstats_linux.c:
+
+ fix bug 1259054: snmpd: cannot open /proc/net/snmp6
+
+2005-08-16 12:29 dts12
+
+ * configure, configure.in:
+
+ Typo in the description of --enable-mib-config-checking (bug #1238301)
+
+2005-08-16 11:59 rstory
+
+ * local/snmpconf:
+
+ always specify perms to mkdir, as it is not option for older perl versions
+
+2005-08-15 18:42 rstory
+
+ * agent/agent_trap.c:
+
+ set timeout/retries to default for inform sessions
+
+2005-08-15 18:37 rstory
+
+ * agent/helpers/scalar_group.c:
+
+ fix typo
+
+2005-08-15 18:21 rstory
+
+ * agent/helpers/: instance.c, scalar_group.c, table.c
+:
+
+ wait for delegated requests before retries
+
+2005-08-14 17:22 alex_b
+
+ * win32/net-snmp/: net-snmp-config.h, net-snmp-config.h.in
+:
+
+ Fix spelling mistake in description of a define.
+
+2005-08-11 13:39 rstory
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ fix length of sysObjectID
+
+2005-08-01 07:39 alex_b
+
+ * agent/snmpd.c:
+
+ -don't use getdtablesize() for WIN32
+
+2005-08-01 07:39 alex_b
+
+ * win32/: libhelpers/libhelpers.dsp,
+ libnetsnmptrapd/Makefile.in,
+ libnetsnmptrapd/libnetsnmptrapd.dsp, snmptrapd/Makefile.in
+, snmptrapd/snmptrapd.dsp:
+
+ -Win32: Update project files with new location for notification_log.c and
+ missing table_data2.c for MSVC GUI
+
+2005-08-01 07:37 alex_b
+
+ * snmplib/data_list.c:
+
+ -Fix win32 build problem - declare variables before using.
+
+2005-07-28 07:47 dts12
+
+ * local/mib2c:
+
+ Simple 'while' loop, and (non-error) quit statement.
+
+2005-07-26 08:06 dts12
+
+ * apps/snmpusm.c:
+
+ Probe for engineID initially, so that it's available for constructing
+ the usmUserTable OIDs.
+
+2005-07-26 06:19 tanders
+
+ * FAQ:
+
+ Update OS support section. Still likely to be outdated for some platforms.
+
+2005-07-25 19:53 tanders
+
+ * testing/TESTCONF.sh:
+
+ fix bug 1230366: add "-n" to "netstat -a" to make it work even if port numbers have corresponding service names
+
+2005-07-25 19:28 rstory
+
+ * agent/: mibgroup/if-mib/data_access/interface_ioctl.c,
+ auto_nlist.c:
+
+ keep compiler happy; include header w/prototype
+
+2005-07-25 19:27 rstory
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ keep compiler happy; move param type decl into param decl list
+
+2005-07-25 19:26 rstory
+
+ * local/mib2c-conf.d/generic-value-map-reverse.m2i:
+
+ - move comment end out of conditional (since start is as well)
+ - include ctx set for non-enum types
+
+2005-07-25 19:25 rstory
+
+ * local/mib2c-conf.d/: generic-ctx-get.m2i,
+ generic-ctx-set.m2i:
+
+ deal with oid length vs size during get/set
+
+2005-07-25 15:57 rstory
+
+ * configure:
+
+ run autoconf
+
+2005-07-25 15:56 rstory
+
+ * configure.in:
+
+ add notification-log-mib to default mib list
+
+2005-07-25 15:55 rstory
+
+ * apps/: snmptrapd.c, snmptrapd_handlers.c:
+
+ - fix notifcation log include path
+ - only include notification log code if module included
+
+2005-07-25 14:35 marz
+
+ * agent/mibgroup/hardware/: cpu/.cvsignore, memory/.cvsignore
+:
+
+ fixing cvs ignore for shared libs
+
+2005-07-25 13:22 rstory
+
+ * apps/Makefile.depend:
+
+ remove dependencies on/for notification_log
+
+2005-07-25 11:39 dts12
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+
+ Generate different code for caching and non-caching container frameworks
+ (rather than including caching support regardless)
+
+2005-07-25 11:37 dts12
+
+ * local/mib2c-conf.d/: default-mfd-top.m2c,
+ m2c_table_save_defaults.m2i, mfd-interactive-setup.m2c
+, mfd-makefile.m2m, mfd-top.m2c:
+
+ AgentX makefile and subagent driver code weren't getting generated
+ (even if they were requested). Fix this.
+
+2005-07-25 11:34 dts12
+
+ * include/net-snmp/library/snmp_client.h,
+ snmplib/snmp_client.c:
+
+ Convenience routine for setting an integer varbind value.
+
+2005-07-21 21:54 rstory
+
+ * include/net-snmp/agent/ds_agent.h:
+
+ add NETSNMP_DS_NOTIF_LOG_CTX string
+
+2005-07-21 21:52 rstory
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ log notification if using notification log mib module
+
+2005-07-21 21:51 rstory
+
+ * agent/helpers/table_container.c:
+
+ add todo commen
+
+2005-07-21 21:49 rstory
+
+ * apps/snmptrapd.c:
+
+ - remove commented out var decl
+ - remove unused num_received
+ - set snmptrapd context for notification log module
+
+2005-07-21 21:47 rstory
+
+ * apps/: snmptrapd_handlers.c, snmptrapd_handlers.h:
+
+ add interface to notification log agent module
+
+2005-07-21 21:47 rstory
+
+ * apps/: Makefile.in, notification_log.c,
+ notification_log.h:
+
+ remove unused notification_log files
+
+2005-07-21 21:36 rstory
+
+ * agent/mibgroup/notification-log-mib/notification_log.c:
+
+ - make num_received static
+ - add local enabled flag, set when module init called
+ - return immediately from log_notification if not enabled
+ - use correct index in compare, so we have a chance at finding the right row
+ (this fixes the varbind memory leak)
+
+2005-07-21 20:13 rstory
+
+ * agent/mibgroup/agentx/master.c:
+
+ strdup tmp ds string that will be released
+
+2005-07-21 19:04 rstory
+
+ * agent/mibgroup/notification-log-mib/notification_log.c:
+
+ add missing semi-colon
+
+2005-07-21 19:01 rstory
+
+ * agent/mibgroup/notification-log-mib/: notification_log.c,
+ notification_log.h:
+
+ - remove agentx conditional compile
+ - remove snmptrapd headers
+ - re-work log size management
+ - add context parameter for table init routines
+ - new ds_app for module init to determine context
+ - remove dontRetainLogs config (use -I -notification_log)
+ - chg debug symbol (log_notification->notification_log)
+ - remove extraneous comments
+ - make sure transport ptr has value before using
+
+2005-07-21 18:47 rstory
+
+ * agent/mibgroup/: notification-log-mib/notification_log.c,
+ notification-log-mib/notification_log.h,
+ notification-log-mib.h:
+
+ original versions
+
+2005-07-20 20:34 alex_b
+
+ * local/snmpconf:
+
+ -Add wrapper for environment variables (my_getenv) to add Windows registry
+ support for persistent folder/file check
+ -Fix bug in get_persistentDir call (it was not passing the filename of
+ snmp.conf
+
+2005-07-20 18:19 rstory
+
+ * snmplib/system.c:
+
+ move header include to top of file
+
+2005-07-20 18:17 rstory
+
+ * snmplib/snmp_client.c:
+
+ add missing header
+
+2005-07-20 18:14 rstory
+
+ * snmplib/container_null.c:
+
+ fix include of own header (cut-n-paste error)
+
+2005-07-20 18:10 rstory
+
+ * include/net-snmp/library/: mib.h, snmp_api.h:
+
+ add missing prototype
+
+2005-07-20 18:09 rstory
+
+ * include/net-snmp/agent/table_data2.h:
+
+ remove prototype for non-existent func; add missing prototype
+
+2005-07-20 18:08 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ tweak parameters for nsb-config example
+
+2005-07-20 18:07 rstory
+
+ * agent/mibgroup/hardware/cpu/cpu_linux.c:
+
+ keep compiler happy; remove redundant semicolon
+
+2005-07-20 18:02 rstory
+
+ * agent/helpers/all_helpers.c:
+
+ keep compiler happy; add missing includes/prototype
+
+2005-07-20 18:00 rstory
+
+ * configure.in:
+
+ check for bad option [with|enable]-ssl
+
+2005-07-20 17:59 rstory
+
+ * Makefile.in:
+
+ make sure check run find on srcdir
+
+2005-07-20 11:30 dts12
+
+ * snmplib/data_list.c:
+
+ Guard against using nameless data lists. This still
+ won't work properly, but at least the agent won't crash.
+ (Yes, I know this should never happen - but you can't trust
+ some people not to do something stupid - naming no names)
+
+2005-07-20 11:27 dts12
+
+ * agent/helpers/table_array.c:
+
+ Include the handler name when registering a table_array.
+
+2005-07-19 13:44 rstory
+
+ * README.agent-mibs:
+
+ fix cut-n-paste; new tables are linux only
+
+2005-07-19 10:52 dts12
+
+ * local/mib2c.container.conf:
+
+ Improve handling of variable-length index and column values.
+
+2005-07-19 10:52 dts12
+
+ * local/mib2c.table_data.conf:
+
+ Fix handling of variable-length indexes.
+
+2005-07-19 10:49 dts12
+
+ * agent/helpers/table_array.c,
+ include/net-snmp/agent/table_array.h:
+
+ Provide another registration API to hide the helper internals
+ from user-level code.
+
+2005-07-18 17:57 rstory
+
+ * NEWS, README.agent-mibs:
+
+ update for new tcpConnectionTable and tcpListenerTable
+
+2005-07-18 17:53 rstory
+
+ * agent/mibgroup/tcp-mib/tcpListenerTable/: tcpListenerTable.c
+, tcpListenerTable.h, tcpListenerTable_data_access.c
+:
+
+ initial working version
+
+2005-07-18 17:39 rstory
+
+ * agent/mibgroup/: tcp-mib.h,
+ tcp-mib/tcpListenerTable/tcpListenerTable.c,
+ tcp-mib/tcpListenerTable/tcpListenerTable.h,
+ tcp-mib/tcpListenerTable/tcpListenerTable_constants.h,
+ tcp-mib/tcpListenerTable/tcpListenerTable_data_access.c,
+ tcp-mib/tcpListenerTable/tcpListenerTable_data_access.h,
+ tcp-mib/tcpListenerTable/tcpListenerTable_interface.c,
+ tcp-mib/tcpListenerTable/tcpListenerTable_interface.h:
+
+ initial code for tcpListenerTable
+
+2005-07-18 17:31 rstory
+
+ * agent/mibgroup/tcp-mib/tcpConnectionTable/: tcpConnectionTable.c
+, tcpConnectionTable.h, tcpConnectionTable_constants.h
+, tcpConnectionTable_data_access.c,
+ tcpConnectionTable_data_access.h,
+ tcpConnectionTable_interface.c,
+ tcpConnectionTable_interface.h:
+
+ - load cache from data access
+ - map address type
+ - shrink storage for indexes
+
+2005-07-18 17:28 rstory
+
+ * agent/mibgroup/tcp-mib/data_access/tcpConn_common.c:
+
+ - fix index oid pointer
+ - add update of pid
+
+2005-07-18 17:28 rstory
+
+ * agent/mibgroup/tcp-mib/data_access/tcpConn_linux.c:
+
+ - use new private header
+ - fix load prototypes
+ - check new listen state require/exclude load flag
+ - fix copy of remote address
+
+2005-07-18 16:26 rstory
+
+ * local/mib2c:
+
+ print bad line when bailing on error
+
+2005-07-18 16:25 rstory
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+
+ fix cut-n-paste flub
+
+2005-07-18 16:24 rstory
+
+ * local/mib2c-conf.d/node-get.m2i:
+
+ remove duplicate comment block
+
+2005-07-18 16:23 rstory
+
+ * include/net-snmp/data_access/tcpConn.h:
+
+ - remove unused defines/comments
+ - add pid to struct
+ - add load flags to require/exlude listen state
+
+2005-07-18 16:20 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ add debug to freeBSD (esp error cases)
+
+2005-07-18 15:50 rstory
+
+ * agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.c
+:
+
+ correct data struct name
+
+2005-07-18 15:41 rstory
+
+ * agent/mibgroup/tcp-mib/: tcpConnectionTable.h,
+ tcpConnectionTable/tcpConnectionTable.c,
+ tcpConnectionTable/tcpConnectionTable.h,
+ tcpConnectionTable/tcpConnectionTable_constants.h,
+ tcpConnectionTable/tcpConnectionTable_data_access.c,
+ tcpConnectionTable/tcpConnectionTable_data_access.h,
+ tcpConnectionTable/tcpConnectionTable_interface.c,
+ tcpConnectionTable/tcpConnectionTable_interface.h:
+
+ initial versions
+
+2005-07-18 14:08 rstory
+
+ * agent/mibgroup/tcp-mib/data_access/tcpConn_private.h:
+
+ private implementation header
+
+2005-07-15 18:41 rstory
+
+ * local/mib2c-conf.d/: generic-table-constants.m2c,
+ generic-table-enums.m2c, generic-table-oids.m2c,
+ mfd-interface.m2c:
+
+ quote string argument in assignment
+
+2005-07-15 18:27 rstory
+
+ * snmplib/snmp_api.c:
+
+ clear session from callback client args on free
+
+2005-07-14 19:01 rstory
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ fix intr/ctx overflows
+
+2005-07-14 18:50 rstory
+
+ * agent/mibgroup/utilities.h:
+
+ config_require utilities/execute (for snmptrapd)
+
+2005-07-07 12:30 rstory
+
+ * snmplib/system.c:
+
+ do not close all non-std fds in daemonize (as we have probably opened some)
+
+2005-07-07 12:25 rstory
+
+ * agent/snmpd.c:
+
+ - close all non-standard fds inherited from shell immediately
+ - register signal handlers much sooner, so early signal doesn't core
+
+2005-07-06 12:34 rstory
+
+ * agent/Makefile.in:
+
+ tweak target to build (all) libs to use existing INSTALLLIBS
+
+2005-07-01 18:58 rstory
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ - use utility routine to clear delegated flag
+ - don't set error for timeout on get-next
+ - release delegated cache when undelegating requests
+
+2005-06-30 11:40 rstory
+
+ * snmplib/snmp_api.c:
+
+ - iff not applied, fix free of pkt to use alloc'd ptr, not offset in pkt
+ - iff applied, remove redundant prt clear after SNMP_FREE
+
+2005-06-30 05:27 tanders
+
+ * man/: snmp.conf.5.def, snmpcmd.1.def, snmpd.8.def
+, snmptrapd.conf.5.def:
+
+ Patch 1226187: document missing config file tokens and cmdline options
+
+2005-06-30 04:39 dts12
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ Calculate "cooked" values from historical data.
+ This changes the meaning of these figures from a system
+ life-time average to a (more useful) one-minute average,
+ and brings the Linux implementation into line with most
+ other architectures.
+
+2005-06-30 04:35 dts12
+
+ * agent/mibgroup/hardware/cpu/cpu.c,
+ include/net-snmp/agent/hardware/cpu.h:
+
+ Standard (system-independent) mechanism for tracking historical CPU
+ statistics, in order to calculate rolling averages.
+
+2005-06-29 17:27 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Do proper checks for zero return and wait rather than closing the connection
+
+2005-06-29 13:40 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Patch from Roman Tsiroulnikov to catch -1 return code from check_packet functions
+
+2005-06-28 08:37 dts12
+
+ * agent/mibgroup/hardware/memory/memory_linux.h:
+
+ Tweak the name of the core HAL memory module.
+
+2005-06-27 14:08 hardaker
+
+ * perl/SNMP/: SNMP.xs, examples/trap-example.pl:
+
+ Patch from David Beattie to fix trap reception
+
+2005-06-27 05:07 dts12
+
+ * agent/mibgroup/: host/hr_storage.c, host/hr_storage.h
+, ucd-snmp/memory.c, ucd-snmp/memory.h:
+
+ Use Hardware Abstraction Layer to implement Memory monitoring on Linux systems.
+
+2005-06-27 05:06 dts12
+
+ * agent/mibgroup/: host/hr_proc.c, host/hr_proc.h,
+ ucd-snmp/vmstat.c, ucd-snmp/vmstat.h:
+
+ Use Hardware Abstraction Layer to implement CPU monitoring on Linux systems.
+
+2005-06-27 04:57 dts12
+
+ * agent/mibgroup/hardware/cpu.h,
+ agent/mibgroup/hardware/memory.h,
+ agent/mibgroup/hardware/cpu/cpu.c,
+ agent/mibgroup/hardware/cpu/cpu.h,
+ agent/mibgroup/hardware/cpu/cpu_linux.c,
+ agent/mibgroup/hardware/cpu/cpu_linux.h,
+ agent/mibgroup/hardware/memory/hw_mem.c,
+ agent/mibgroup/hardware/memory/hw_mem.h,
+ agent/mibgroup/hardware/memory/memory_linux.c,
+ agent/mibgroup/hardware/memory/memory_linux.h,
+ include/net-snmp/agent/hardware/cpu.h,
+ include/net-snmp/agent/hardware/memory.h:
+
+ Preliminary implementation of a Hardware Abstraction Layer
+ (Just covering CPU and memory information for now, and
+ only implemented on Linux-based systems. But it's a start!)
+
+2005-06-27 04:53 dts12
+
+ * agent/mibgroup/disman/schedCore.c:
+
+ Handle week-day bit specifications.
+
+2005-06-27 04:50 dts12
+
+ * agent/mibgroup/disman/schedCore.c:
+
+ Handle reverse-day bit specifications.
+
+2005-06-24 06:18 dts12
+
+ * agent/mibgroup/disman/schedCore.c:
+
+ Initial implementation of calandar-based scheduling.
+ This doesn't handle reverse-day or weekday bits yet,
+ but should provide the basic functionality needed for
+ the "cron" and "at" configure directives.
+
+2005-06-23 08:55 dts12
+
+ * agent/mibgroup/disman/schedCore.c:
+
+ More meaningful debug output.
+
+2005-06-22 20:16 rstory
+
+ * man/snmpd.conf.5.def:
+
+ - document logmatch, agentxperms, com2secunix, engineIDType, engineIDNic
+ and leave_pidfile tokens
+
+2005-06-22 20:05 rstory
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ remove snmpd diskio token and the unused static variable it sets
+
+2005-06-22 19:48 rstory
+
+ * snmplib/system.c:
+
+ oops. declare variable used in new code.
+
+2005-06-22 19:35 rstory
+
+ * testing/eval_tools.sh:
+
+ apply patch from 1219548: don't use deprecated option
+
+2005-06-22 19:31 rstory
+
+ * snmplib/snmpUnixDomain.c:
+
+ apply patch from 1219548: don't unlink null filename
+
+2005-06-22 19:08 rstory
+
+ * snmplib/system.c:
+
+ close all fds after daemonizing
+
+2005-06-22 17:03 rstory
+
+ * Makefile.in:
+
+ new check target for full paths in dependency files
+
+2005-06-22 16:04 rstory
+
+ * agent/snmpd.c:
+
+ apply slightly modified version of 1225440: register singal handlers earlier
+
+2005-06-22 15:57 rstory
+
+ * apps/snmptrapd.c:
+
+ apply slightly modified version of 1225440: register singla handles earlier
+
+2005-06-22 13:22 rstory
+
+ * apps/notification_log.c:
+
+ move ifdef test after header with define is included
+
+2005-06-22 06:08 dts12
+
+ * agent/mibgroup/disman/: schedConf.c, schedTable.c:
+
+ Use the new schedTable entry creation routines.
+
+2005-06-22 06:07 dts12
+
+ * agent/mibgroup/disman/schedCore.c:
+
+ Ensure sensible default settings for an internal session.
+
+2005-06-22 05:41 dts12
+
+ * agent/mibgroup/utilities/iquery.c,
+ include/net-snmp/agent/ds_agent.h:
+
+ Support configuration of the version and security level
+ used to make internal queries.
+ Unfortunately, community-based requests don't currently
+ work over the callback transport, but I'm working on that.
+
+2005-06-22 05:39 dts12
+
+ * include/net-snmp/library/snmpv3.h, snmplib/snmpv3.c:
+
+ Separate out parsing security level tokens into a separate routine.
+
+2005-06-21 17:39 rstory
+
+ * configure:
+
+ run autoconf
+
+2005-06-21 17:36 rstory
+
+ * snmplib/snmp_api.c:
+
+ remove redundant assert
+
+2005-06-21 17:34 rstory
+
+ * include/net-snmp/library/snmp_logging.h:
+
+ prototype for netsnmp_logging_restart
+
+2005-06-21 17:33 rstory
+
+ * include/net-snmp/agent/snmp_vars.h:
+
+ prototypes for should_init and add_to_init_list
+
+2005-06-21 17:32 rstory
+
+ * acconfig.h, configure.in, apps/notification_log.c
+, apps/snmptrapd.c,
+ include/net-snmp/net-snmp-config.h.in:
+
+ - new --disable-snmptrapd-subagent configure option
+ - check new option to disable sub-agent code
+ - add 'I' option to command line processing, to disable modules
+ - use should_init to determine if notification log mib is disabled
+ - use new snmp_logging_restart on HUP
+
+2005-06-21 11:46 rstory
+
+ * include/net-snmp/library/snmp_logging.h:
+
+ prototype for snmp_stderrlog_status
+
+2005-06-21 11:40 dts12
+
+ * agent/mibgroup/disman/: schedCore.c, schedCore.h:
+
+ A cleaner approach to creating entries in the schedTable
+
+2005-06-21 11:38 dts12
+
+ * agent/mibgroup/utilities/: iquery.c, iquery.h:
+
+ Consistently work with SNMP versions, not "processing models".
+
+2005-06-21 11:33 dts12
+
+ * local/mib2c.table_data.conf:
+
+ Correct template for cached table_data registration.
+
+2005-06-21 10:45 dts12
+
+ * EXAMPLE.conf.def:
+
+ Refer to the correct location for config files.
+ (Spotted by Leo Lei)
+
+2005-06-21 10:09 rstory
+
+ * apps/snmptrapd.c:
+
+ - only add notification handler iff we are an agentx subagent
+
+2005-06-20 18:07 rstory
+
+ * snmplib/snmp_api.c:
+
+ - fix setting of expect response pdu flag (I broke it fixing the SNMPv3
+ delayed engineID probe)
+
+2005-06-20 18:04 rstory
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ fix proxy handling of NOSUCHNAME on a get-next, noted on users by John Hardin
+
+2005-06-20 17:38 rstory
+
+ * agent/snmpd.c, snmplib/snmp_logging.c:
+
+ - remove unused log flags in agent
+ - set no default log flag for syslog cases
+ - new snmp_stderrlog_status() checks for enabled stderr log handlers
+ - fix re-enable of syslog in logging restart function
+ - use correct function name to re-enabe file logs
+ - C++ comments -> C comments
+
+2005-06-20 16:38 rstory
+
+ * agent/snmpd.c, snmplib/snmp_logging.c:
+
+ - new netsnmp_logging_restart() to close/reopen file based logs
+ - purge agent setup_log
+ - only enable default LOGFILE if no other log option defined
+
+2005-06-18 11:14 rstory
+
+ * configure:
+
+ run autoconf
+
+2005-06-18 10:44 rstory
+
+ * configure.in:
+
+ -move some arg checks earlier
+ -move libwrap/rpm checks back after setting NONAGENTLIBS, so they aren't
+ listed in app libs by net-snmp-config
+
+2005-06-16 13:58 rstory
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ oops- pass addr of var to sscanf
+
+2005-06-15 17:39 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ add prototype for func used before defined
+
+2005-06-15 08:05 dts12
+
+ * snmplib/mib.c:
+
+ Free the same pointer that was returned by 'strdup'
+
+2005-06-14 16:29 rstory
+
+ * snmplib/snmp_api.c:
+
+ - rework snmpv3 engineID probe delay to fix problems noted on coders
+ - set up/check sess/pdu version a little earlier
+ - set EXPECT_RESPONSE flag correctly initially, instead of global set
+ and unset for certain cases. also do it a little earlier
+ - move check for probe higher up call stack - now will be done the first
+ time a session sends a v3 pdu that expects a response
+
+2005-06-14 12:56 dts12
+
+ * agent/mibgroup/disman/schedConf.c:
+
+ Use "agentSecName" for retrieving schedule information.
+
+2005-06-14 12:00 rstory
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ fix bug 1197183: ssRawCpu* stays on 2^32-1 instead of rolling over
+
+2005-06-14 11:54 rstory
+
+ * snmplib/read_config.c:
+
+ oops- move var decl to func that var was moved to
+
+2005-06-14 11:09 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ fix bug 1217261: IF-MIB reports incorrect stats on AMD64
+
+2005-06-14 10:41 rstory
+
+ * snmplib/read_config.c:
+
+ - process optional config files during pre-mib config too
+ - if optional configs prefixed with '-', process before default configs
+
+2005-06-14 07:44 dts12
+
+ * agent/mibgroup/: disman/mteTriggerTable.c,
+ disman/mteTriggerTable.h, utilities/iquery.c:
+
+ Move "agentSecName" config directive to the iquery utility module.
+
+2005-06-14 07:37 dts12
+
+ * snmplib/snmp_client.c:
+
+ Distinguish snmp_send errors from SNMP errStat errors
+
+2005-06-14 07:37 dts12
+
+ * snmplib/snmpCallbackDomain.c:
+
+ Populate callback PDU with SNMPv3 defaults from the session structure.
+
+2005-06-13 19:25 rstory
+
+ * configure, include/net-snmp/net-snmp-config.h.in:
+
+ run autoheader, autoconf
+
+2005-06-13 19:20 rstory
+
+ * configure.in,
+ agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ apply patch 1198210: using ethtool for gigabit NICs
+
+2005-06-13 19:01 rstory
+
+ * agent/helpers/stash_cache.c:
+
+ update for previous cache_hint method
+
+2005-06-13 17:25 rstory
+
+ * agent/helpers/cache_handler.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ alway pass hints to lower handlers
+
+2005-06-13 17:15 rstory
+
+ * snmplib/mib.c:
+
+ - make mibs, mibdirs and mibfiles handling consistent:
+ - '-XXX' adds XXX before existing
+ - '+XXX' adds XXX after existing
+ NOTE: this restores original behavior of '+' to that of 5.0.1. After
+ 5.0.2, if I read the code right, '+' behaviour on the cmd line and
+ in MIBDIRS was reversed and not consistent with handle_mibs_conf.
+
+2005-06-13 15:34 rstory
+
+ * README.tru64:
+
+ new read me for Tru64
+
+2005-06-13 12:30 dts12
+
+ * agent/mibgroup/mibII/: ifTable.c, ifTable.h,
+ ifTable_columns.h, ifXTable_columns.h:
+
+ Remove obsolete ifTable rewrite.
+
+2005-06-13 12:25 dts12
+
+ * apps/snmptrapd_handlers.c:
+
+ Run trap handlers using 'system()' rather than 'execv()',
+ to support trap handler shell scripts.
+
+2005-06-13 12:16 dts12
+
+ * snmplib/: container_binary_array.c, parse.c,
+ snmpUDPIPv6Domain.c, snmp_parse_args.c, system.c
+, winservice.c:
+
+ Guard against assorted malloc failures.
+ Reported by Andreas Moroder.
+
+2005-06-13 11:38 dts12
+
+ * snmplib/mib.c:
+
+ Remove bogus handling of zero-width hints.
+ These might be pointless, but they are strictly valid.
+ (See RFC 2579, Section 3.1 (1))
+
+2005-06-13 10:52 dts12
+
+ * include/net-snmp/library/parse.h, snmplib/parse.c,
+ snmplib/mib.c:
+
+ Possible mechanism for addressing namespace clashes
+ (in response to Matthew Boehm' Asterisk problem)
+
+2005-06-10 16:04 hardaker
+
+ * mibs/UDP-MIB.txt:
+
+ update from RFC4113
+
+2005-06-10 16:02 rstory
+
+ * testing/rfc1213/run:
+
+ apply testing-rfc1213-run.diff from patch 1217475: build fixes
+
+2005-06-10 15:57 hardaker
+
+ * mibs/rfclist:
+
+ update the UDP-MIB to just published RFC4113
+
+2005-06-10 15:54 rstory
+
+ * testing/TESTCONF.sh:
+
+ apply testing-testconf.diff from patch 1217475: build fixes
+
+2005-06-10 15:51 rstory
+
+ * agent/helpers/Makefile.in:
+
+ apply agent-helpers-makefile.diff from patch 1217475: build fixes
+
+2005-06-10 13:07 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ init handler for agentxsocket for subagents too
+
+2005-06-10 10:55 dts12
+
+ * configure.in, configure:
+
+ Yet Another Attempt to find the correct quoting of configure options.
+
+2005-06-10 07:33 dts12
+
+ * agent/mibgroup/disman/schedCore.c:
+
+ Update to use the renamed internal and library query API calls.
+
+2005-06-10 07:32 dts12
+
+ * agent/mibgroup/utilities/: iquery.c, iquery.h:
+
+ Tweak the specifically agent-internal query routines to use the SNMP
+ library versions.
+
+2005-06-10 07:29 dts12
+
+ * include/net-snmp/library/snmp_client.h,
+ snmplib/snmp_client.c:
+
+ Move (and rename) session-based "internal query" API calls into the SNMP
+ library, so they're available as a convenience to all SNMP applications.
+
+2005-06-10 05:30 dts12
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Move special handling for "ip" interfaces to SUNV3-only code block.
+ No-one can remember what this was intended for, and it breaks
+ Linux IPv6 tunnel interfaces.
+
+2005-06-10 04:23 dts12
+
+ * net-snmp-config.in:
+
+ Bring authentication/encryption flags into line with the other commands.
+ In fact, treats '-A/-a' as equivalent, and uses the value to distinguish
+ between protocols and pass phrases. (And similarly for -X/-x)
+
+2005-06-09 17:45 rstory
+
+ * snmplib/snmp_api.c:
+
+ fix bug 1207023: snmpd crash on tcp disconnect
+
+2005-06-09 17:19 rstory
+
+ * snmplib/: snmp_api.c, snmp_client.c:
+
+ - move snmp_varlist_add_variable size checks to snmp_set_var_value
+ - use snmp_set_var_value in snmp_varlist_add_variable
+
+2005-06-09 11:52 rstory
+
+ * agent/mibgroup/tcp-mib/data_access/tcpConn_common.c,
+ include/net-snmp/data_access/tcpConn.h,
+ agent/mibgroup/tcp-mib/data_access/tcpConn_linux.c:
+
+ add ipv6 support
+
+2005-06-09 11:45 rstory
+
+ * include/net-snmp/library/tools.h, snmplib/tools.c:
+
+ rename param, update docs, to reduce confusion
+
+2005-06-09 05:13 dts12
+
+ * agent/mibgroup/disman/schedConf.c:
+
+ Implement parsing of the "at" and "cron" config directives.
+ These still don't actually work, but you can't have everything....
+
+2005-06-09 05:12 dts12
+
+ * agent/mibgroup/disman/schedConf.c:
+
+ Fix parsing of "repeat" directive.
+
+2005-06-09 05:09 dts12
+
+ * agent/mibgroup/disman/: schedConf.c, schedCore.h:
+
+ It would be vaguely helpful if I knew the difference between
+ hours and months, and how many of each there were!
+
+2005-06-09 05:06 dts12
+
+ * agent/mibgroup/disman/schedCore.c:
+
+ Disable testing code.
+ (initialising the library too early breaks config file processing:-()
+
+2005-06-08 15:57 rstory
+
+ * agent/mibgroup/ip-mib/data_access/systemstats_linux.c:
+
+ skip ipv6 code if ipv6 not enabled; noted on coders by eirik nordbroden
+
+2005-06-07 10:17 dts12
+
+ * agent/mibgroup/: disman.h, disman/schedConf.c,
+ disman/schedConf.h, disman/schedCore.c,
+ disman/schedCore.h, disman/schedTable.c,
+ disman/schedTable.h, disman/schedule.h:
+
+ Preliminary (and incomplete) implementation of the DisMan Schedule MIB.
+
+2005-06-06 05:31 dts12
+
+ * agent/mibgroup/utilities/: iquery.c, iquery.h:
+
+ Utility routines for making "internal queries", to retrieve or assign
+ values from elsewhere in the current agent.
+
+2005-06-06 05:23 dts12
+
+ * snmplib/snmpCallbackDomain.c:
+
+ Populate callback PDU with defaults from the session structure.
+ This allows community-based PDUs to be sent over a callback transport.
+
+2005-06-02 19:14 rstory
+
+ * snmplib/snmp_api.c:
+
+ delay SNMPv3 EngineID probe until needed
+
+2005-06-02 19:10 rstory
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ apply/re-apply fix for bug 1103644, FreeBSD memory leak
+
+2005-06-02 18:38 rstory
+
+ * agent/helpers/: cache_handler.c, multiplexer.c,
+ null.c, read_only.c:
+
+ apply patch 1210632: Replace netsnmp_set_all_requests_error
+
+2005-05-30 17:21 nba
+
+ * mibs/rfclist:
+
+ RFC 4044: FC-MGMT-MIB
+
+2005-05-30 17:17 nba
+
+ * mibs/IANAifType-MIB.txt:
+
+ Current IANA version
+
+2005-05-27 14:08 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ commit missing strtok_r changes *cough*
+
+2005-05-23 18:48 hardaker
+
+ * apps/snmp_perl_trapd.pl, perl/ASN/ASN.pm,
+ perl/agent/default_store/default_store.pm,
+ perl/default_store/default_store.pm, snmplib/snmp_debug.c
+, snmplib/snmpv3.c:
+
+ Applied minor bug fix/doc patches from Thomas Anders in #1206982
+
+2005-05-23 16:42 hardaker
+
+ * local/fixproc:
+
+ Use mkstemp appropriate to generate temp files
+
+2005-05-20 10:03 dts12
+
+ * apps/snmptrapd.c:
+
+ Bring '-H' initialisation into line with normal startup.
+
+2005-05-16 15:50 hardaker
+
+ * dist/net-snmp.spec:
+
+ Don't auto-build dependencies. Specify a list instead.
+
+2005-05-16 15:49 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ A bit of renumbering.
+
+2005-05-16 15:43 hardaker
+
+ * dist/makerelease:
+
+ automatted release producer script
+
+2005-05-11 19:51 driehuis
+
+ * configure.in:
+
+ Fix typo in comment
+
+2005-05-11 10:02 alex_b
+
+ * win32/dist/: htmlhelp/Net-SNMP.hhc, htmlhelp/Net-SNMP.hhp
+, scripts/readme2html:
+
+ Add README.agent-mibs to Windows binary
+
+2005-05-11 05:20 nba
+
+ * mibs/rfclist:
+
+ More RFCs with MIBs
+
+2005-05-10 21:13 alex_b
+
+ * local/: Makefile.in, snmpconf:
+
+ snmpconf: Allow SNMPCONFPATH to have multiple paths defined such as when the
+ persistent folder is included. snmpconf will also determine the configured
+ persistent folder and prevent it from being treated as a regular configuration
+ file.
+
+2005-05-10 20:44 alex_b
+
+ * NEWS:
+
+ Add fixes to NEWS for next release
+
+2005-05-09 21:07 driehuis
+
+ * configure:
+
+ Autoupdate
+
+2005-05-09 20:53 driehuis
+
+ * configure.in:
+
+ The kernel lives in /boot/kernel/kernel on recent FreeBSD's
+
+2005-05-09 19:35 alex_b
+
+ * win32/dist/: README.txt,
+ htmlhelp/Configuration_Overview.html,
+ installer/net-snmp.nsi:
+
+ Win32 binary: Add persist folder to SNMPCONFPATH
+
+2005-05-09 19:00 alex_b
+
+ * man/snmp_config.5.def, man/snmpd.8.def,
+ snmplib/snmp_api.c:
+
+ -Persistent files were not being read at startup when using
+ snmp.conf persistentDir
+ -Update persistent storage sections of snmp_config and snmpd
+ man pages
+
+2005-05-09 18:55 hardaker
+
+ * local/mib2c.genhtml.conf:
+
+ use more flexible css for markup and allow a passed in file
+
+2005-05-09 18:12 alex_b
+
+ * COPYING:
+
+ Add Fabasoft R&D Software (c) notice
+
+2005-05-09 16:37 nba
+
+ * apps/snmpdf.c:
+
+ detect extra arguments
+
+2005-05-09 16:33 nba
+
+ * apps/snmpdf.c:
+
+ snmpget => snmpdf
+
+2005-05-09 16:21 nba
+
+ * mibs/rfclist:
+
+ RFC 4008 is NAT-MIB
+
+2005-05-09 16:20 nba
+
+ * apps/snmpnetstat/if.c:
+
+ Find declarations for sighold/sigset/sigpause
+
+2005-05-09 16:18 nba
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+
+ Ensure 0-termination of read file data
+
+2005-05-09 16:16 nba
+
+ * agent/mibgroup/smux/smux.c:
+
+ Detect too many defined peers. Properly parse symbolic peers
+
+2005-05-09 16:13 nba
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ Needed external
+
+2005-05-09 16:10 nba
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ Fix format warning
+
+2005-05-09 16:09 nba
+
+ * local/Makefile.in:
+
+ Fix for installing remote from source dir
+
+2005-05-09 16:06 nba
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Fix for NetBSD
+
+2005-05-09 16:01 nba
+
+ * configure, include/net-snmp/net-snmp-config.h.in:
+
+ Generated
+
+2005-05-09 15:45 nba
+
+ * configure.in, agent/mibgroup/ucd_snmp.h,
+ agent/mibgroup/host/hr_storage.c,
+ include/net-snmp/system/netbsd.h:
+
+ Fixes for NetBSD/FreeBSD for swap data
+
+2005-05-09 15:17 nba
+
+ * acconfig.h:
+
+ Fix mingw test that was only applied to net-snmp-config.h.in
+
+2005-05-09 15:13 nba
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Fix bogus preprocessor if
+
+2005-05-09 04:59 dts12
+
+ * local/mib2c.table_data.conf:
+
+ Illustrate handling of cached tables using the table_data helper.
+ (Activate using "mib2c -Scache=true ...")
+
+2005-05-09 04:58 dts12
+
+ * local/mib2c.table_data.conf:
+
+ Extract required table structures when processing RowStatus assignments.
+
+2005-05-09 04:13 dts12
+
+ * local/mib2c.iterate.conf:
+
+ Fix table max/min column registration.
+
+2005-05-06 15:14 driehuis
+
+ * configure:
+
+ Autoupdate
+
+2005-05-06 15:11 driehuis
+
+ * configure.in:
+
+ Placate autoconf259 by testing and including <vm/vm.h> before testing
+ <vm/swap_pager.h>
+
+2005-05-05 20:14 hardaker
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Applied patch #1106443 from tolga ceylan to use a proper return code check for getKstatInt
+
+2005-05-05 20:04 hardaker
+
+ * Makefile.top, snmplib/Makefile.in:
+
+ Applied patch #1109712 to fix VPATH for rc files on cygwin
+
+2005-05-05 19:58 hardaker
+
+ * snmplib/snmpTCPIPv6Domain.c:
+
+ Patch #1110571 from Katsuhisa ABE to set ipv6 tcp sockets to ipv6 only if possible
+
+2005-05-05 19:51 hardaker
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c,
+ snmplib/container.c:
+
+ Applied part of patch #1110610 from Peter Breitenlohner for compiler warnings
+
+2005-05-05 19:29 hardaker
+
+ * apps/snmptranslate.c, man/snmptranslate.1.def,
+ snmplib/mib.c:
+
+ Applied patch #1123242 from Mike McHenry to add mib2schema compliant output to snmptranslate
+
+2005-05-05 19:25 hardaker
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ Applied patch #1124569 from Marcus Meissner to dynamically decide how
+ many cpus there on linux and to better parse information about them.
+ - modified to be compliant with ANSI and the coding style.
+
+2005-05-05 19:11 hardaker
+
+ * perl/agent/agent.xs:
+
+ Patch #1062114 by "snmpportal" to clean up a few memory leaks.
+
+2005-05-05 07:19 dts12
+
+ * include/net-snmp/library/snmp.h, snmplib/mib.c:
+
+ Patch #1117271 (variant) - check the buffer length when formatting
+ an uptime string (though without changing the existing API call).
+
+2005-05-05 05:07 dts12
+
+ * man/.cvsignore:
+
+ Ignore additional generated client man pages
+
+2005-05-04 20:58 driehuis
+
+ * configure:
+
+ Autoupdate
+
+2005-05-04 20:56 driehuis
+
+ * configure.in:
+
+ Use the accumulated wisdom of the previous AC_HEADERCHECKS for
+ HAVE_NETINET_IP_H, HAVE_NETINET_IF_H, HAVE_NETINET_IP_ICMP_H and
+ HAVE_NETINET_UDP_H (in addition to the ones already present).
+ This unbreaks the build on FreeBSD 5.3 and 4.10 (but the latter
+ still isn't playing with the full vm_swap deck).
+
+2005-05-04 20:48 driehuis
+
+ * include/net-snmp/system/freebsd5.h:
+
+ FreeBSD 5.3 is really unhappy about getting _KERNEL defined. By forcing
+ IFNET_NEEDS_KERNEL off we fix that (after all, defining _KERNEL really
+ is a gross hack for platforms that don't properly export system
+ internals -- famous last words:-)
+
+2005-05-04 11:48 dts12
+
+ * configure.in, configure:
+
+ Patch #1124652: options to explicitly include/exclude elf and bzip libraries
+
+2005-05-04 11:12 dts12
+
+ * snmplib/snmp_client.c:
+
+ Patch #1042447 - clone zero-length, non-NULL-pointer strings.
+
+2005-05-04 08:57 dts12
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Patch #1051001 - skip unnecessary call to 'auto_nlist' under NetBSD
+
+2005-05-04 08:50 dts12
+
+ * agent/mibgroup/examples/scalar_int.h:
+
+ Patch #1096479 - fix declaration of initialisation routine.
+
+2005-05-04 08:45 dts12
+
+ * agent/mibgroup/examples/notification.c:
+
+ Patch #1096483 - fix a minor inconstistency
+
+2005-05-04 08:22 dts12
+
+ * snmplib/parse.c:
+
+ Patch #1103751 - skip editor backups when loading MIB files.
+
+2005-05-04 08:07 dts12
+
+ * configure, configure.in:
+
+ Patch #1109719: Remove (apparently) redundant quoting of configure options.
+ This quoting was introduced early in the v5 lifetime to support "options
+ containing spaces" (see revision 5.26). Simple testing seems to indicate
+ that it's no longer needed, and it breaks AIX (possibly among others), so
+ let's try without it.
+ If no-one complains, this patch may need to be applied to the other branches
+ as well.
+
+2005-05-04 07:13 dts12
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ Patch #1118132 - handle disappearing Linux processes.
+
+2005-05-04 06:42 alex_b
+
+ * agent/mibgroup/util_funcs.c:
+
+ Fixed #ifdef typo
+
+2005-05-04 06:13 dts12
+
+ * snmplib/scapi.c:
+
+ Patch #1117276 - tweak EVP_DigestFinal parameters to match expected types.
+
+2005-05-04 06:00 dts12
+
+ * agent/mibgroup/host/hr_partition.c:
+
+ Patch #1117265 - open devices with NDELAY when possible.
+ Avoids agent hanging on missing removable devices.
+
+2005-05-03 18:26 alex_b
+
+ * NEWS, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ win32/net-snmp/agent/mib_module_config.h:
+
+ Win32: Apply patch 1153271 by Ekkehard Domning for snmpd pass_persist support
+ for MSVC. Apply patch based on 1153271 for pass support for MSVC and MinGW.
+
+2005-05-03 10:38 dts12
+
+ * local/mib2c.int_watch.conf:
+
+ Use the watched scalar helper (rather than specialised instance helpers)
+ for implementing integer-based scalar objects. Picks up on unsigned
+ integer objects, as well as distinguishing between read-only/read-write
+ MIB definitions.
+
+2005-05-03 10:28 dts12
+
+ * local/mib2c.iterate.conf:
+
+ Illustrate handling of cached tables using the iterator helper.
+ (Activate using "mib2c -Scache=true ...")
+
+2005-05-03 10:23 dts12
+
+ * snmplib/oid_stash.c:
+
+ Stash lookup debugging code.
+
+2005-05-03 10:19 dts12
+
+ * agent/helpers/watcher.c, include/net-snmp/agent/watcher.h
+:
+
+ Convenience single-call APIs for integer-based watched scalars.
+ (Modelled on the existing instance-based calls).
+
+2005-05-03 09:07 dts12
+
+ * agent/helpers/table_data.c,
+ include/net-snmp/agent/table_data.h:
+
+ Provide a (trivial) get_{first,next} API.
+ Not strictly necessary in itself, but should aid the
+ transition to a container-based table_data style.
+
+2005-05-02 20:42 alex_b
+
+ * agent/mibgroup/ucd-snmp/: pass.c, pass_persist.c:
+
+ Add limits.h header file
+
+2005-05-02 18:46 alex_b
+
+ * win32/: libsnmp/Makefile.in, libsnmp/libsnmp.dsp,
+ libsnmp_dll/Makefile.in, libsnmp_dll/libsnmp_dll.dsp
+:
+
+ Win32 MSVC support for fd_event_manager.[ch]
+
+2005-05-01 13:47 alex_b
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ Fix sysDescr support for MinGW
+
+2005-05-01 09:20 alex_b
+
+ * local/passtest.pl:
+
+ Added Perl version of /local/passtest shell script
+
+2005-04-30 20:38 alex_b
+
+ * snmplib/tools.c:
+
+ Cygwin: Add missing registry support for SNMPCONFPATH etc.
+
+2005-04-30 20:36 alex_b
+
+ * README.win32, agent/mibgroup/mibII/at.c,
+ agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/ip.c, agent/mibgroup/mibII/ipAddr.c
+, agent/mibgroup/mibII/mibII_common.h,
+ agent/mibgroup/mibII/route_headers.h,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/tcp.c,
+ agent/mibgroup/mibII/tcpTable.c,
+ agent/mibgroup/mibII/udpTable.c,
+ agent/mibgroup/mibII/var_route.c, perl/SNMP/README:
+
+ -Remove 'define WIN32' for Cygwin and change ifdefs to check for either
+ WIN32 or cygwin.
+ -Add section to README.win32 describing the various Windows defines.
+ -Add note to README files about spaces in folder names when compiling.
+
+2005-04-30 18:36 alex_b
+
+ * win32/libhelpers/: Makefile.in, libhelpers.dsp:
+
+ Win32 MSVC build fixes
+
+2005-04-29 12:14 dts12
+
+ * apps/snmptrapd.c:
+
+ Patch #1149420 - use new external fd handler routines,
+ to pave the way for more integrated trap handlers.
+
+2005-04-29 12:12 dts12
+
+ * agent/agent_registry.c, agent/snmpd.c,
+ include/net-snmp/agent/agent_registry.h,
+ snmplib/Makefile.in, snmplib/fd_event_manager.c,
+ include/net-snmp/library/fd_event_manager.h:
+
+ Patch #1149420 - separate external fd handling off into
+ a distinct library module. Submitted by Sten J. Olsson
+
+2005-04-29 11:56 dts12
+
+ * agent/mibgroup/ucd-snmp/pass.c, man/snmpd.conf.5.def
+, agent/mibgroup/ucd-snmp/pass_persist.c:
+
+ Patch #1154488 - option to specify priority of "pass" processing
+
+2005-04-29 11:48 dts12
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Apply patch #1155337 - fix diskIO average support for FreeBSD5
+
+2005-04-27 20:22 alex_b
+
+ * perl/: Makefile.PL, Makefile.subs.pl, ASN/Makefile.PL
+, OID/Makefile.PL, SNMP/Makefile.PL,
+ TrapReceiver/Makefile.PL, agent/Makefile.PL,
+ agent/default_store/Makefile.PL, default_store/Makefile.PL
+:
+
+ Win32 MSVC: Abort compile if a space is detected in the base folder
+ when compiling.
+
+2005-04-27 20:10 hardaker
+
+ * perl/TrapReceiver/TrapReceiver.xs:
+
+ Massive debugging of memory leaks. It is now memory-leak free!
+
+2005-04-27 20:09 hardaker
+
+ * perl/OID/OID.xs:
+
+ free the sub-name if not attached to the parent structure.
+
+2005-04-27 18:55 alex_b
+
+ * NEWS, agent/mibgroup/host_res.h,
+ agent/mibgroup/host/hr_swrun.c:
+
+ Cygwin: Replace PID_ZOMBIE references as the flag was removed from
+ Cygwin in mid Jan 2005.
+
+2005-04-26 18:13 rstory
+
+ * local/mib2c.array-user.conf:
+
+ - sync some comments
+ - fix handling of OIDs in row_copy code, noted on IRC by davej_
+
+2005-04-25 12:32 rstory
+
+ * agent/helpers/table_iterator.c:
+
+ update table_iterator to use valid_column info
+
+2005-04-22 11:18 dts12
+
+ * local/mib2c.table_data.conf:
+
+ Improve handling of non-integer-based objects in table_data template code.
+
+2005-04-22 11:11 dts12
+
+ * agent/helpers/instance.c:
+
+ If an instance-based handler returns an error for a GetNext request,
+ we need to skip on to the next valid instance.
+
+2005-04-22 10:54 dts12
+
+ * snmplib/snmpusm.c:
+
+ Protect against failure to create initial user.
+
+2005-04-21 12:52 rstory
+
+ * snmplib/snmp_debug.c:
+
+ don't track debug stats by default; add stats prototypes
+
+2005-04-21 10:57 rstory
+
+ * agent/mibgroup/ucd-snmp/diskio.h, mibs/UCD-DISKIO-MIB.txt
+, agent/mibgroup/ucd-snmp/diskio.c:
+
+ apply patch 1085243: Add 64-bit counters to diskIOTable
+
+2005-04-21 10:55 rstory
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ init stat ptr to null
+
+2005-04-21 10:26 rstory
+
+ * include/net-snmp/library/callback.h, snmplib/callback.c
+:
+
+ - static delete_duplicates -> public netsnmp_callback_clear_client_arg
+ - tabs to spaces
+
+2005-04-21 10:12 rstory
+
+ * include/net-snmp/library/callback.h, snmplib/callback.c
+:
+
+ add/use callback priority macros
+
+2005-04-21 10:05 rstory
+
+ * snmplib/snmp_debug.c:
+
+ add debug token exclusion
+
+2005-04-21 09:32 rstory
+
+ * agent/mibgroup/agent/nsDebug.c:
+
+ skip excluded tokens (til mib is updated)
+
+2005-04-20 23:07 rstory
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+
+ update for change to ctx init default
+
+2005-04-20 23:06 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ add code for DEFVALs in ctx init
+
+2005-04-20 23:06 rstory
+
+ * local/mib2c-conf.d/default-mfd-top.m2c:
+
+ default to generate ctx init
+
+2005-04-20 19:23 rstory
+
+ * local/mib2c-conf.d/mfd-data-access.m2c:
+
+ add note on index attributes already tested
+
+2005-04-20 18:50 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - fix comments
+ - revamp check_indexes to do basic validation before calling user func
+ - explicit not writable case for index/read-only vars in set cols
+
+2005-04-20 18:47 rstory
+
+ * local/mib2c-conf.d/mfd-data-access.m2c:
+
+ add comments in index handling function headers
+
+2005-04-20 18:47 rstory
+
+ * local/mib2c-conf.d/mfd-access-container-cached-defines.m2i
+:
+
+ - remove hardcoded table name
+ - remove redundant prototype
+ - add some comments
+ - define prototype before use
+ - fix back function name
+ - fix too many params for function
+
+2005-04-20 18:45 rstory
+
+ * local/mib2c-conf.d/: node-validate.m2i,
+ node-varbind-validate.m2i:
+
+ - break value validation out of varbind-validate
+ - compare values/lengths directly, instead of calling function
+ - detect/handle ranges that are really single values
+
+2005-04-20 18:39 rstory
+
+ * local/mib2c-update:
+
+ fix directory copy
+
+2005-04-20 15:08 hardaker
+
+ * perl/TrapReceiver/TrapReceiver.xs:
+
+ free string passed to perl after it's passed
+
+2005-04-20 14:44 rstory
+
+ * agent/mibgroup/examples.h:
+
+ add watched example
+
+2005-04-20 14:03 rstory
+
+ * agent/mibgroup/examples/watched.c,
+ mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ - add example string to mib
+ - add example of a watched string
+
+2005-04-19 16:51 rstory
+
+ * local/mib2c-conf.d/generic-value-map-reverse.m2i:
+
+ quiet compiler (%d -> %ld)
+
+2005-04-18 18:14 rstory
+
+ * local/mib2c-conf.d/generic-value-map-func.m2i:
+
+ quiet compiler (%d -> %ld)
+
+2005-04-18 18:12 rstory
+
+ * local/mib2c-conf.d/mfd-makefile.m2m:
+
+ - fixes for create_fewer_files setting
+ - define table name once, at top, for quicker updating
+
+2005-04-18 18:11 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ - revamp defaults handling
+ - generate defaults in top, instead of setup_table
+ - add top/table level shutdown functions
+ - define user context
+
+2005-04-18 18:10 rstory
+
+ * local/mib2c-conf.d/: mfd-interface.m2c,
+ mfd-access-container-cached-defines.m2i:
+
+ - use new m2c_data_cache to determine if we should generate cache code
+ - add function to get table container
+ - most cache_* functions renamed to container_*; remaining cache versions
+ call container versions
+ - add table/container shutdown functions
+
+2005-04-18 18:05 rstory
+
+ * local/mib2c-conf.d/mfd-readme.m2c:
+
+ move indexes_set readme here (from container-cached)
+
+2005-04-18 18:04 rstory
+
+ * local/mib2c-conf.d/syntax-RowStatus-get.m2i:
+
+ - quiet compiler (%d -> %ld)
+ - remove hardcoded node name
+
+2005-04-18 18:01 rstory
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+
+ - revamp defaults handling
+ - generate defaults in top, instead of setup_table
+ - always write defaults, so new options appear for user
+ - new options: data_cache, data_sparse
+ - more interactive questions:
+ skip mapping, sparse, uncached container, generate makefile/agentx
+
+2005-04-18 17:58 rstory
+
+ * local/mib2c-conf.d/mfd-data-get.m2c:
+
+ tweak exclusion of mapping functions
+
+2005-04-18 17:54 rstory
+
+ * local/mib2c-conf.d/m2c_table_save_defaults.m2i:
+
+ new m2i to save all table defaults
+
+2005-04-18 17:53 rstory
+
+ * local/mib2c-conf.d/: default-mfd-top.m2c,
+ m2c_setup_table.m2i:
+
+ - revamp defaults handling
+ - generate defaults in top, instead of setup_table
+ - always write defaults, so new options appear for user
+
+2005-04-18 17:49 rstory
+
+ * local/mib2c.array-user.conf:
+
+ - check for bad hdr len
+ - don't free NULL ptr
+
+2005-04-18 17:46 rstory
+
+ * local/mib2c-update:
+
+ - use named vars instead of positional, for clarity
+ - tweaks to copy updated defaults files
+
+2005-04-15 17:26 rstory
+
+ * agent/mibgroup/tcp-mib.h:
+
+ add config_add_mib
+
+2005-04-14 18:18 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2005-04-14 17:14 rstory
+
+ * configure.in:
+
+ move generation of empty includes outside of agent enabled conditional
+
+2005-04-13 22:52 rstory
+
+ * local/mib2c-conf.d/syntax-DateAndTime-get.m2i:
+
+ update parameter names to be inline w/everyone else
+
+2005-04-13 22:51 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - generate index check routines if table persistent is set
+ - don't refernce set_columns unless table settable
+ - don't check/insert new rows unnless row creation is set
+
+2005-04-13 22:47 rstory
+
+ * local/mib2c-conf.d/: mfd-data-access.m2c, mfd-data-set.m2c
+, parent-set.m2i:
+
+ - generate index check routines if table persistent is set
+ - move index check functions to data access file so they can be used by
+ the persistence routines
+
+2005-04-13 09:30 rstory
+
+ * agent/mibgroup/: if-mib.h, ip-forward-mib.h, ip-mib.h
+:
+
+ add appropriate mibs to default load list
+
+2005-04-08 10:38 alex_b
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ Change index and rindex defines for MinGW to fix compile problem.
+
+2005-04-07 19:29 rstory
+
+ * local/mib2c-conf.d/: mfd-interface.m2c, mfd-top.m2c
+, syntax-RowStatus-dependencies.m2i:
+
+ - add api for reference counting
+ - add api to find row from table mib index struct
+
+2005-04-07 18:23 rstory
+
+ * agent/helpers/table_iterator.c:
+
+ pass in hint to get_first if sorted (suggested by Mike Thatcher on coders)
+
+2005-04-07 13:02 rstory
+
+ * snmplib/snmp_logging.c:
+
+ - don't disable all filelogs when a new one is enabled.
+ - again with the C++ comments, so this is re-thought before 5.3
+
+2005-04-06 12:39 rstory
+
+ * local/mib2c-update:
+
+ exclude cvs Id lines from diff
+
+2005-04-06 11:45 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ remove extraneous ;
+
+2005-04-06 11:44 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ add missing comment close
+
+2005-04-06 11:19 rstory
+
+ * local/mib2c-conf.d/: mfd-interface.m2c, mfd-top.m2c
+, parent-set.m2i:
+
+ - add function to get container size
+ - track table level dirty flag for settable tables
+ - check dirty & success to call snmp_store for settable persistent tables
+
+2005-04-05 12:46 rstory
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+
+ - update interactive setup to prompt for persistent store
+
+2005-04-05 12:39 hardaker
+
+ * agent/helpers/table_data2.c:
+
+ remove old code not used for the container version
+
+2005-04-05 12:37 rstory
+
+ * local/mib2c-conf.d/: m2c_setup_table.m2i,
+ mfd-interface.m2c, mfd-persistence.m2i, mfd-top.m2c
+:
+
+ - move persistent store code to its own file
+ - update interactive setup to prompt for persistent store
+ - move should_save() out of interface code, into *Table.c
+ - log error if no columns found during restore
+
+2005-04-04 15:10 rstory
+
+ * snmplib/callback.c:
+
+ remove unused variable
+
+2005-04-04 14:49 rstory
+
+ * snmplib/callback.c:
+
+ clear duplicates so they aren't double-freed
+
+2005-04-01 13:58 rstory
+
+ * dist/snmptrapd-init.d:
+
+ new startup script
+
+2005-04-01 03:06 nba
+
+ * man/mib2c.conf.5:
+
+ This is a generated file
+
+2005-03-31 19:06 hardaker
+
+ * COPYING:
+
+ year update
+
+2005-03-31 18:22 hardaker
+
+ * man/snmpcmd.1.def:
+
+ mention AES too
+
+2005-03-31 17:42 hardaker
+
+ * apps/snmptrap.c:
+
+ call snmp_shutdown
+
+2005-03-31 17:41 hardaker
+
+ * agent/helpers/row_merge.c:
+
+ add result code to snmp_log message
+
+2005-03-31 17:35 hardaker
+
+ * agent/helpers/Makefile.in, agent/helpers/all_helpers.c
+, agent/helpers/table_data.c,
+ agent/helpers/table_data2.c, agent/helpers/table_dataset.c
+, agent/helpers/table_dataset2.c,
+ agent/mibgroup/disman/mteEventNotificationTable.c,
+ agent/mibgroup/disman/mteEventNotificationTable.h,
+ agent/mibgroup/disman/mteEventTable.c,
+ apps/notification_log.c,
+ include/net-snmp/agent/all_helpers.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_data2.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/agent/table_dataset2.h:
+
+ The new data and dataset helper implementations break older code and
+ thus break backwards compatibility.
+ - Mark the old data and dataset implementations as obsolete but restore
+ them from previous CVS versions. Reference the new ones in the docs
+ for the old ones.
+ - Create new data2 and dataset2 versions which are the new container
+ implementations.
+ - Make the current dataset implementations use the newer version.
+ - except the table and add_row implementations which broke
+ entirely under the new code.
+
+2005-03-30 23:21 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ Fix row creation for vacm family tree rows that are beneath a parent row.
+
+2005-03-30 18:45 rstory
+
+ * agent/helpers/row_merge.c:
+
+ - add debug
+ - don't assert on condition for next/bulk
+ - the whole mode counting idea needs re-thinking..
+ - use SNMP_FREE instead of free, now that null ptrs are a possibility
+
+2005-03-30 15:12 hardaker
+
+ * agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c
+:
+
+ run htonl on the index addrs
+
+2005-03-29 22:38 alex_b
+
+ * win32/libhelpers/: Makefile.in, libhelpers.dsp:
+
+ Add stash_to_next to WIN32 MSVC Makefile and workspace.
+
+2005-03-29 20:11 rstory
+
+ * agent/snmpd.c:
+
+ - comment out default disable of stderr log, since it makes it impossible
+ to use stdout/stderr for logging (now that log->enabled is checked). use
+ C++ comments, since the whole log setup needs re-thinking before 5.3.
+
+2005-03-29 16:04 nba
+
+ * agent/mibgroup/: if-mib/ifTable/ifTable_interface.c,
+ if-mib/ifXTable/ifXTable_interface.c,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c
+,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c
+,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c,
+ ip-mib/ipAddressTable/ipAddressTable.c,
+ ip-mib/ipAddressTable/ipAddressTable_interface.c,
+ ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c:
+
+ Fix bad format parameters to snmp_log
+
+2005-03-29 15:05 nba
+
+ * include/net-snmp/library/cmu_compat.h,
+ include/net-snmp/library/snmp_api.h, snmplib/cmu_compat.c
+, snmplib/snmp_api.c, snmplib/snmp_client.c:
+
+ Detect and report invalid PDUs sent as response
+
+2005-03-28 15:24 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - use new check_all_requests_error to check the rc in ALL varbinds, not just
+ current row/handler varbinds
+
+2005-03-28 15:12 rstory
+
+ * snmplib/snmp_logging.c:
+
+ - fix bug 1170604 snmp_disable_stderrlog() is ignored
+ - chec for null before deref (fix snmptrapd crash noted on irc)
+
+2005-03-28 14:29 rstory
+
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.c
+:
+
+ fix address type in index oid
+
+2005-03-28 14:27 rstory
+
+ * agent/snmp_agent.c, include/net-snmp/agent/snmp_agent.h
+:
+
+ new function to really really check error status of all requests
+
+2005-03-25 20:56 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ check size of array in gettable before assuming it has something in it
+
+2005-03-25 09:49 alex_b
+
+ * man/snmp.conf.5.def:
+
+ Add hexOutputLength to man page.
+
+2005-03-24 22:08 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - pass NULL to config handler reg, to use current apptype
+ - add seperators and headers when saving persistent data
+ - remove extraneous newline in persistent data
+
+2005-03-24 22:06 rstory
+
+ * snmplib/read_config.c:
+
+ new env var: SNMP_PERSISTENT_DIR
+
+2005-03-24 16:48 rstory
+
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_access.c
+:
+
+ don't disable cache, just force reload for every request
+
+2005-03-23 19:42 rstory
+
+ * local/mib2c-conf.d/details-table.m2i:
+
+ add module name
+
+2005-03-23 19:41 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ - fix typo
+ - update config_require() path to something better for configure
+
+2005-03-23 19:34 rstory
+
+ * local/mib2c-conf.d/default-mfd-top.m2c:
+
+ remove * from default context reg type (typedef is for struct, not ptr)
+
+2005-03-22 17:30 rstory
+
+ * local/mib2c-conf.d/node-get.m2i:
+
+ match up todo with actual generated code
+
+2005-03-22 17:27 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes-to-oid.m2i:
+
+ add missing param to snmp_log
+
+2005-03-18 18:09 rstory
+
+ * apps/snmptrapd.c:
+
+ make signal calls conditional based on definition of signal (like snmpd)
+
+2005-03-18 18:08 rstory
+
+ * local/mib2c-conf.d/m2c_setup_table.m2i:
+
+ - add default (0) for sparse tables
+ - only mkdir if it doesn't already exist
+ - don't ignore mkdir errors
+
+2005-03-18 18:06 rstory
+
+ * local/mib2c-conf.d/mfd-access-container-cached-defines.m2i
+:
+
+ move temp storage for indexes outside of example conditional
+
+2005-03-18 18:04 rstory
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+
+ fix default for data transient (off by 1)
+
+2005-03-18 18:04 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ don't generate column_exists_flags code if sparse table not set
+
+2005-03-18 18:03 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ fix generated rowreq_ctx_init prototype
+
+2005-03-18 18:01 rstory
+
+ * local/mib2c-conf.d/: details-enums.m2i,
+ generic-get-char.m2i, generic-value-map-func.m2i,
+ generic-value-map-reverse.m2i, syntax-RowStatus-get.m2i
+:
+
+ change INTERNAL_* enum defines to include context (table) name
+
+2005-03-18 17:51 rstory
+
+ * local/mib2c.iterate.conf:
+
+ fix some typos noted on mailing lists
+
+2005-03-18 17:50 rstory
+
+ * local/mib2c-update:
+
+ - detect first run so we know to copy generate defaults to curr dir
+ - diff individual files instead of recursive diff w/excludes
+ - updates for new default directory style defaults
+
+2005-03-18 17:46 rstory
+
+ * local/mib2c:
+
+ - add table test for lastchange and storagetype tc
+ - tweak doc comments
+ - document ifconf and new ifdir
+
+2005-03-18 05:31 nba
+
+ * mibs/: Makefile.mib, TCP-MIB.txt, rfclist:
+
+ Update TCP-MIB to RFC 4022
+
+2005-03-18 05:30 nba
+
+ * mibs/IANAifType-MIB.txt:
+
+ Updated IANA-ifType-MIB
+
+2005-03-18 05:26 nba
+
+ * snmplib/system.c:
+
+ Fix a warning from BSD systems
+
+2005-03-18 04:52 nba
+
+ * man/.cvsignore:
+
+ mib2c.conf.5 is a generated file
+
+2005-03-17 05:32 nba
+
+ * perl/TrapReceiver/const-c.inc:
+
+ Ups, unintended patch undone
+
+2005-03-17 04:30 nba
+
+ * agent/agent_handler.c, agent/snmp_agent.c,
+ agent/mibgroup/if-mib/data_access/interface_linux.c,
+ include/net-snmp/library/snmp_logging.h,
+ perl/TrapReceiver/const-c.inc, snmplib/snmp_api.c,
+ snmplib/snmp_secmod.c:
+
+ Add format checking to calls to snmp_log, and fix the uncovered errors
+
+2005-03-15 01:13 nba
+
+ * agent/snmpd.c:
+
+ Include smux headers when needed
+
+2005-03-14 16:14 nba
+
+ * configure:
+
+ Sync to configure.in
+
+2005-03-14 15:53 nba
+
+ * mibs/: INET-ADDRESS-MIB.txt, Makefile.mib, rfclist
+:
+
+ Update to current INET-ADDRESS-MIB
+
+2005-03-14 15:48 nba
+
+ * configure.in:
+
+ Fix configure header alerts for Solaris 8 and 9, NetBSD 2 and FreeBSD 5
+
+2005-03-04 15:26 rstory
+
+ * local/mib2c-conf.d/mfd-makefile.m2m:
+
+ - don't overwrite existing makefile
+ - indention changes
+ - explicit close of file
+
+2005-03-04 15:24 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - add function to get/set user context
+ - use new row_merge first/last api to make sure pre/post called 1/per handler
+ - add rc param to post_request (yum, my own words were delicious)
+ - use asp status, not status of handlers requests, when checking for
+ successful request completion
+ - add support for skipping non-existent rows in sparse tables
+ - add more info to some debug msgs
+ - use SNMP_NOSUCHINSTANCE instead of ASN_PRIV_RETRY
+ - add more debugs msgs
+ - don't clear set flags til post commit
+ - remove redundant varbind length check
+ - update for new column flag names
+
+2005-03-04 15:19 rstory
+
+ * local/mib2c-conf.d/m2c_setup_table.m2i:
+
+ - fix test for defaults in old location
+ - add option to re-run interactive setup if existin defaults
+
+2005-03-04 15:16 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ - add support for skipping non-existent rows in sparse tables
+ - add rc param to post_request (yum, my own words were delicious)
+ - check new vars to determine whether or not to generate support files
+ (doxygen, makefile, subagent)
+
+2005-03-04 15:10 rstory
+
+ * local/mib2c-conf.d/node-set.m2i:
+
+ - add comments on node lengths
+ - update for changes in value map reverse
+
+2005-03-04 15:07 rstory
+
+ * local/mib2c-conf.d/: generic-get-char.m2i,
+ generic-value-map-reverse.m2i:
+
+ - update BITS fields to use define INTERNAL_*_FLAG defines, instead of IS_SET_*
+ - add obvious note on the difference between C bit order and SNMP bit order
+ - add BITS mapping to reverse value map
+
+2005-03-04 15:02 rstory
+
+ * local/mib2c-conf.d/: generic-table-oids.m2c,
+ parent-dependencies.m2i, parent-set.m2i,
+ syntax-RowStatus-dependencies.m2i:
+
+ change column flag names to reduce confusion with other defined names
+
+2005-03-04 14:59 rstory
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+
+ add new m2c_table_sparse to defaults
+
+2005-03-04 14:58 rstory
+
+ * local/mib2c-conf.d/m2c_setup_enum.m2i:
+
+ use new var for enum suffix
+
+2005-03-04 14:57 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ new var for enum suffix, set to _flag for bits objects
+
+2005-03-04 13:24 rstory
+
+ * local/mib2c-conf.d/details-enums.m2i:
+
+ - move INTERNAL_* enum macros inside ifdefs for TC
+ - generate INTERNAL_* enums flags for BITS
+
+2005-03-03 19:45 rstory
+
+ * include/net-snmp/agent/agent_handler.h:
+
+ update comments
+
+2005-03-03 19:13 rstory
+
+ * snmplib/check_varbind.c:
+
+ fix netsnmp_check_vb_range (check values, not sizes)
+
+2005-03-03 19:11 rstory
+
+ * agent/helpers/row_merge.c,
+ include/net-snmp/agent/row_merge.h:
+
+ - keep saved status data between mode calls (in reqinfo), so we can..
+ - build all temporary request lists before calling next handler, so we can..
+ - track number of requests and number of rows, so we can..
+ - provide api for lower handler to know if current call is for first/last row
+ - log a warning if handler for row returns error, but DONT exit loop
+ - if lower handler returns err, pass it to parent
+ - add more debugging
+
+2005-03-03 15:33 rstory
+
+ * agent/helpers/watcher.c, include/net-snmp/agent/watcher.h
+:
+
+ add option to watched timestamp to have a pointer to a direct value
+
+2005-03-02 18:56 rstory
+
+ * local/mib2c-conf.d/generic-table-oids.m2c:
+
+ - move column bit flag macros up with column number macros
+ - bail iff more than 32 columns. fix this later...
+
+2005-03-02 18:54 rstory
+
+ * local/mib2c.mfd.conf:
+
+ - don't run extra file from top; move down so can be controlled by defaults
+
+2005-03-02 18:52 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ - remove unused setup of m2c_nvv_sizeof
+
+2005-03-02 18:50 rstory
+
+ * local/mib2c-conf.d/node-varbind-validate.m2i:
+
+ - rework initial check_vb_* logic, checking max_size for octet strings
+ - fix range checks for octet strings
+ - use m2c data_item and node directory, eliminating a var from node setup
+ - remove generated comment and some commented out conf stuff
+
+2005-03-02 18:19 rstory
+
+ * snmplib/check_varbind.c:
+
+ proper implementation for check_vb_size_range
+
+2005-03-02 16:56 rstory
+
+ * local/mib2c-conf.d/node-get.m2i:
+
+ - move TODO comment away from linke likely to be deleted
+ - a log message indicating a node is not implemented
+
+2005-03-02 15:02 rstory
+
+ * snmplib/read_config.c:
+
+ - allow octest string read to fill buffer
+ - don't null terminate octet string if buffer full
+ - warn if input is larger than buffer
+
+2005-03-02 14:59 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ change default registration typedef to struct (not a ptr to struct)
+
+2005-03-02 14:56 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ change default registration typedef to struct (not a ptr to struct)
+
+2005-03-02 14:35 rstory
+
+ * local/mib2c-conf.d/: mfd-access-unsorted-external-defines.m2i
+, mfd-data-access.m2c, mfd-readme.m2c,
+ parent-set.m2i:
+
+ change default registration typedef to struct (not a ptr to struct)
+
+2005-03-02 14:24 rstory
+
+ * include/net-snmp/library/check_varbind.h,
+ snmplib/check_varbind.c:
+
+ fix mis-named function; add proto for correct name
+
+2005-03-02 14:18 rstory
+
+ * agent/mibgroup/smux/smux.c:
+
+ allow snmpd.conf smux OIDs to be text, not just numeric
+
+2005-03-02 14:05 rstory
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - fix library dependencies
+ - use new sysOR registration callback instead of direct function calls
+
+2005-03-02 13:58 rstory
+
+ * agent/mibgroup/mibII/sysORTable.c:
+
+ add/register callbacks for reg/unreg sysOR entries
+
+2005-03-02 13:56 rstory
+
+ * include/net-snmp/agent/agent_callbacks.h:
+
+ add callbacks for reg/unreg sysOR entries
+
+2005-03-02 13:51 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - log INFO message on successful connect to master
+ - always log peername on unsuccessful connect attempt
+
+2005-03-02 13:48 rstory
+
+ * agent/mibgroup/agentx/master.c:
+
+ always log agentx peer name on connect failure
+
+2005-03-02 13:45 rstory
+
+ * agent/mibgroup/agentx/client.c:
+
+ - log message on failed registration
+ - update for new version_sysoid location
+
+2005-03-02 13:43 rstory
+
+ * agent/mibgroup/util_funcs.c:
+
+ more debug/error log for problems with cache file
+
+2005-03-02 13:36 rstory
+
+ * agent/: snmp_agent.c, mibgroup/mibII/system_mib.c:
+
+ - fix library dependencies
+ - move version_sysoid into the agent (fix library dependencies)
+ - update system_mib for new sysoid location
+ - don't call hosts_ctl for callback connection
+ - log addr_string for UNKNOWN connections
+
+2005-03-02 12:17 rstory
+
+ * local/mib2c-conf.d/syntax-RowStatus-dependencies.m2i:
+
+ add debug
+
+2005-03-02 12:14 rstory
+
+ * local/mib2c-conf.d/subagent.m2c:
+
+ - add -x param for master address
+ - add windows SOCK_* macros
+
+2005-03-02 12:03 rstory
+
+ * local/mib2c-conf.d/mfd-doxygen.m2c:
+
+ don't overwrite existing conf file
+
+2005-03-02 11:58 rstory
+
+ * dist/net-snmp.spec:
+
+ - fix spec so rpmbuild w/parameters should work ok
+ - make sure perl uses RPM prefix, instea of hardcoded /usr (config, pathsub)
+ - make sure makeinstall uses proper include dir path
+
+2005-02-28 07:52 wasmith32
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ Added WIN32 ifdef blocks to accomodate compiling the HOST-RESOURCE mib on
+ Windows.
+
+2005-02-28 07:50 wasmith32
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ Windows HOST-RESOURCE mib implementation. struct win_statfs has been moved
+ to hr_storage.h.
+
+2005-02-28 07:48 wasmith32
+
+ * agent/mibgroup/host/hr_storage.h:
+
+ Windows HR mib implementation.
+
+2005-02-27 22:34 alex_b
+
+ * perl/SNMP/: SNMP.pm, t/mib.t, t/startagent.pl:
+
+ Apply Max Baker's patch 1117696 which fixes a regex that splits a tag from
+ an iid. Also added additional tests to mib.t test script.
+
+2005-02-26 07:21 wasmith32
+
+ * agent/mibgroup/host/hr_network.c:
+
+ This is part of the HOST-RESOURCE Windows implementation. hr_network.c will
+ now compile with MinGW but much of the functionality still needs to be implemented.
+
+2005-02-25 17:45 rstory
+
+ * agent/snmpd.c:
+
+ set a good example and call SOCK_CLEANUP before exit
+
+2005-02-25 17:36 rstory
+
+ * local/mib2c-conf.d/: generic-data-allocate.m2i,
+ m2c_setup_table.m2i, mfd-interface.m2c:
+
+ fix typo in variable name
+
+2005-02-25 17:06 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ - fix prototypes, noted by niels
+ - don't generate doxygen conf file
+
+2005-02-25 17:03 rstory
+
+ * local/mib2c-update:
+
+ ignore cvs Id tags when performaing diff
+
+2005-02-25 16:46 rstory
+
+ * agent/: mibgroup/smux/smux.h, mib_modules.c,
+ snmp_vars.c:
+
+ - eliminate libnetsnmpagent refs to libnetsnmpmibs
+ - move module_init_list stuff into agent libs
+ - move smux code into agent libs
+
+2005-02-25 16:31 rstory
+
+ * agent/agent_registry.c:
+
+ - add context to register_mib debug
+ - warn if passed context doesn't match reginfo->contextName
+
+2005-02-25 16:18 rstory
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ register with context, if specified
+
+2005-02-25 16:10 rstory
+
+ * net-snmp-config.in:
+
+ - fix library orders in link lines
+ - add windows SOCK_* macros to generated subagent
+
+2005-02-19 07:00 wasmith32
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ Part of the HOST-RESOURCE implementation for Windows.
+
+ * Defined win_statfs structure.
+ * Defined pagesize for Windows as 4096 (4k is what I have found through my
+ research. There is probably a variable or function to get the information
+ on Windows but I have not found it yet.)
+ * Added functions win_statfs() and win_realpath().
+
+2005-02-16 16:48 nba
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ Killing warnings
+
+2005-02-16 16:48 nba
+
+ * mibs/: NET-SNMP-EXAMPLES-MIB.txt, NET-SNMP-EXTEND-MIB.txt
+, NET-SNMP-TC.txt:
+
+ smilint'ing
+
+2005-02-15 11:23 dts12
+
+ * agent/mibgroup/agent/extend.c:
+
+ Implement proper SET support for nsExtendRunType.
+
+2005-02-12 08:45 nba
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ Move variable unused when <picl.h> unavailable for Solaris
+
+2005-02-12 08:32 nba
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c,
+ include/net-snmp/system/solaris.h,
+ snmplib/snmpTCPIPv6Domain.c:
+
+ Fix warnings
+
+2005-02-12 08:07 nba
+
+ * agent/: helpers/instance.c, helpers/watcher.c,
+ mibgroup/agent/extend.c, mibgroup/mibII/ipAddr.c:
+
+ Solaris gcc -m64 fixes
+
+2005-02-12 06:42 nba
+
+ * agent/snmp_agent.c:
+
+ More details when response fails. Good for locating 64-bit problems
+
+2005-02-12 05:58 nba
+
+ * agent/mibgroup/host/hr_system.c:
+
+ Fixing warnings
+
+2005-02-12 05:17 nba
+
+ * agent/mibgroup/ucd_snmp.h, agent/mibgroup/mibII/tcpTable.c
+, include/net-snmp/system/netbsd.h:
+
+ Integrate fixes from NetBSD port
+
+2005-02-10 14:53 nba
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ Fix misleading comment. Thanks to bug 1086870
+
+2005-02-10 13:43 nba
+
+ * agent/snmp_agent.c:
+
+ Include syslog.h also if not using libwrap
+
+2005-02-10 13:24 nba
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ Fix sysIORawSent/Received which are reversed for Linux. Bug 1102518
+
+2005-02-10 10:45 nba
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Fix FreeBSD memory leak, thanks to John Sellens, bug 1103644
+
+2005-02-10 08:10 nba
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ Fixing warnings
+
+2005-02-10 07:35 nba
+
+ * snmplib/container.c:
+
+ Fixing warnings
+
+2005-02-10 07:22 nba
+
+ * snmplib/mib.c:
+
+ Fix an extraneous newline ending hexstrings
+
+2005-02-09 16:34 nba
+
+ * man/snmpcmd.1.def:
+
+ Fix bad index, pointed out in bug 1116652
+
+2005-02-09 16:30 nba
+
+ * apps/snmptable.c:
+
+ Fix a bad error message
+
+2005-02-09 16:25 nba
+
+ * agent/snmpd.c, apps/snmptrapd.c:
+
+ Remove warnings
+
+2005-02-09 16:15 nba
+
+ * snmplib/mib.c:
+
+ Remove warnings
+
+2005-02-09 16:01 nba
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c,
+ agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c,
+ include/net-snmp/data_access/interface.h:
+
+ Another hunt fixing warnings
+
+2005-02-09 14:46 nba
+
+ * include/net-snmp/library/snmp_enum.h,
+ include/net-snmp/library/snmp_logging.h,
+ snmplib/snmp_enum.c, snmplib/snmp_logging.c:
+
+ Add some missing const-ness for parameters
+
+2005-02-08 16:56 nba
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c,
+ agent/mibgroup/if-mib/ifTable/ifTable.h,
+ agent/mibgroup/if-mib/ifTable/ifTable_interface.c,
+ agent/mibgroup/ip-forward-mib/data_access/route_linux.c,
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.c
+,
+ agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.c
+, agent/mibgroup/ip-mib/data_access/ipaddress_common.c
+, agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.h,
+ agent/mibgroup/ip-mib/data_access/systemstats_common.c,
+ agent/mibgroup/ip-mib/data_access/systemstats_linux.c,
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.c
+,
+ agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c
+, agent/mibgroup/utilities/execute.c,
+ include/net-snmp/agent/table_container.h,
+ include/net-snmp/library/snmpUDPDomain.h,
+ snmplib/snmpUDPDomain.c, snmplib/snmp_auth.c:
+
+ Fix a bunch of trivial warnings
+
+2005-02-08 15:06 nba
+
+ * mibs/: IANAifType-MIB.txt, SMUX-MIB.txt, ianalist
+, rfclist, smistrip:
+
+ Update to current versions
+
+2005-02-08 14:54 nba
+
+ * mibs/NET-SNMP-AGENT-MIB.txt:
+
+ Fixes to allow it to pass smilint
+
+2005-01-27 22:52 rstory
+
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_access.c
+:
+
+ disable caching since other code modifies underlying data
+
+2005-01-25 16:24 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ remove note on cvs2cl workaround, add note on how to get current version
+
+2005-01-25 08:51 dts12
+
+ * mibs/NET-SNMP-EXTEND-MIB.txt:
+
+ Fix misnamed row structure.
+
+2005-01-22 16:49 alex_b
+
+ * local/FAQ2HTML, local/html-add-header-footer.pl,
+ man/make_index.pl, man/man_sections.txt,
+ mibs/Makefile.in, mibs/makehtml.pl:
+
+ Updated scripts etc for generating web content.
+
+2005-01-22 15:38 alex_b
+
+ * README.win32, win32/dist/README.txt,
+ win32/dist/htmlhelp/Configuration_Overview.html:
+
+ Win32 registry documentation improvements
+
+2005-01-22 10:42 wasmith32
+
+ * agent/mibgroup/host/hr_system.c:
+
+ Added count_users functionality for Windows. The function currently returns
+ 0 for a failed call to NetWkstaGetInfo() and may require more error checking
+ on Windows systems to return a correct value for failure.
+
+2005-01-21 11:08 dts12
+
+ * agent/mibgroup/disman/mteEventTable.c:
+
+ Use the (new) table_dataset iterator API routines,
+ rather than the internal fields directly.
+
+ (I wonder how many more bits I broke?)
+
+2005-01-21 05:13 dts12
+
+ * agent/helpers/stash_to_next.c:
+
+ Don't be such an impatient child, Dave! If I've
+ told you once, I've told you a thousand times:
+
+ Tidy up properly after one request before starting on the next.
+
+ <shakes head sorrowfully>
+ Some people! - I blame the parents.....
+
+2005-01-20 09:25 dts12
+
+ * agent/helpers/table_data.c,
+ include/net-snmp/agent/table_data.h:
+
+ Re-implement 'table_data' using the 'table_container' helper.
+ The two are almost identical in behaviour anyway - just with
+ different expectations over the format of a per-row structure.
+
+2005-01-20 09:09 dts12
+
+ * apps/notification_log.c:
+
+ Use the (new) table_dataset iteration API,
+ rather than fiddling with the internal implementation.
+
+2005-01-20 09:07 dts12
+
+ * agent/helpers/table_data.c, agent/helpers/table_dataset.c
+, include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h:
+
+ Provide a clean API for walking through the rows of a table
+ (Rather than relying on a particular internal representation).
+
+2005-01-20 09:02 dts12
+
+ * agent/helpers/table_dataset.c,
+ include/net-snmp/agent/table_dataset.h:
+
+ The API for counting the number of rows was confusingly
+ named, and not actually declared in the header file.
+ Introduce a more sensible version.
+
+2005-01-19 09:14 dts12
+
+ * agent/helpers/table_container.c,
+ include/net-snmp/agent/table_container.h:
+
+ We seem to have an inconsistently named API, depending on whether it
+ is being defined inline or not. This does not feel like a Good Idea.
+ Ensure that the same names work, regardless of inlining.
+ (That introduces a certain duplication of code, but such is life)
+
+2005-01-13 11:29 hardaker
+
+ * agent/mibgroup/mibII/ipCidrRouteTable.h:
+
+ Newer IP-FORWARD-MIB from an ID set to become an RFC
+
+2005-01-13 11:24 hardaker
+
+ * mibs/: IP-FORWARD-MIB.txt, IANA-RTPROTO-MIB.txt,
+ Makefile.in:
+
+ Newer IP-FORWARD-MIB from an ID set to become an RFC
+
+2005-01-12 11:50 dts12
+
+ * apps/snmptrapd.c:
+
+ Provide a means for snmptrapd to report /etc/hosts.{allow,deny}
+ style access control activity.
+ This should perhaps be logged via 'snmp_log' (c.f agent/snmp_agent.c)
+ but I seem to recall problems with duplicate symbols. But a debug
+ message should be safe enough....
+
+2005-01-12 11:26 rstory
+
+ * agent/mibgroup/utilities/execute.c:
+
+ define setPerrorstatus until proper fix implemented
+
+2005-01-12 09:43 alex_b
+
+ * snmplib/tools.c:
+
+ Apply patch from Philip W Gillis and Daniel Kerns for win32 getenv crash.
+
+2005-01-12 06:36 dts12
+
+ * agent/helpers/stash_cache.c,
+ include/net-snmp/agent/stash_cache.h:
+
+ Support configuration of stash-cache timeouts, both at
+ registration and via the NET-SNMP-AGENT-MIB::nsCacheTable.
+ (Don't much like the API names, though - improved suggestions
+ gratefully received).
+
+2005-01-12 06:23 dts12
+
+ * agent/helpers/stash_cache.c:
+
+ Use the standard cache helper, rather than handling this internally.
+
+2005-01-12 06:22 dts12
+
+ * agent/helpers/cache_handler.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ Make the handler chain information available to the cache load routine.
+ (And fix a broken debug message)
+
+2005-01-12 05:16 dts12
+
+ * agent/helpers/Makefile.in:
+
+ Include the new 'stash_to_next' helper in the helper library.
+
+2005-01-11 10:11 dts12
+
+ * include/net-snmp/agent/stash_cache.h,
+ agent/helpers/stash_cache.c, agent/helpers/stash_to_next.c
+:
+
+ Automatically inject the stash_to_next helper at registration,
+ rather than dynamically during request processing.
+ (We must try to keep our beloved leader happy and content and unsuspecting....)
+
+2005-01-11 10:02 dts12
+
+ * agent/agent_handler.c:
+
+ Support the injection of a handler sub-chain
+ (rather than just a single handler)
+
+2005-01-09 11:31 rstory
+
+ * man/snmpd.conf.5.def:
+
+ config.h -> net-snmp-config.h
+
+2005-01-08 10:10 rstory
+
+ * local/mib2c-conf.d/m2c_setup_table.m2i:
+
+ read/create default files from/in subdir
+
+2005-01-08 10:01 rstory
+
+ * local/mib2c-conf.d/: default-mfd-top.m2c,
+ generic-value-map-func.m2i, m2c_setup_node.m2i,
+ mfd-interactive-setup.m2c, mfd-readme.m2c:
+
+ read/create default files from/in subdir
+
+2005-01-08 07:45 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - rename some of the new persistent functions/vars
+ - fix length handling for BITS
+ - use stack for line buffer
+ - add/tweak some debug msgs
+
+2005-01-07 07:22 dts12
+
+ * agent/helpers/stash_cache.c, agent/helpers/stash_to_next.c
+, agent/helpers/table_iterator.c,
+ include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/stash_to_next.h:
+
+ Extend the applicability of Wes' "stash_cache" helper, by
+ automatically converting a GETSTASH request into a GETNEXT
+ walk for those chains that don't support this mode directly.
+ (And provide a way for chains that do, to say so!)
+
+2005-01-07 04:37 dts12
+
+ * local/mib2c.scalar.conf:
+
+ Use netsnmp_check_vb_type for checking SET requests.
+
+2005-01-06 12:33 rstory
+
+ * NEWS:
+
+ not persistence support for mfd
+
+2005-01-06 12:31 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - add include to quite warning
+ - add persistence
+
+2005-01-06 12:26 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ remove condition on prototype gen now that function is always generated
+
+2005-01-06 10:16 rstory
+
+ * NEWS:
+
+ mention new option to disable set requests
+
+2005-01-06 10:10 rstory
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ new option to disable set requests (does not exclude set processing code - yet)
+
+2005-01-06 10:08 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2005-01-06 09:57 rstory
+
+ * configure.in, agent/snmp_agent.c:
+
+ new option to disable set requests (does not exclude set processing code - yet)
+
+2005-01-06 09:53 rstory
+
+ * local/mib2c-conf.d/generic-value-map-func.m2i:
+
+ remove conditional for var decl, since use isn't conditional
+
+2005-01-06 09:51 rstory
+
+ * local/mib2c-conf.d/mfd-access-container-cached-defines.m2i
+:
+
+ add comment on how to disable caching
+
+2005-01-06 09:49 rstory
+
+ * local/mib2c-conf.d/syntax-InetAddress-get.m2i:
+
+ - add missing % spec in log msg
+ - gen code to copy value once addrType is known
+
+2005-01-05 17:28 rstory
+
+ * local/mib2c-conf.d/subagent.m2c:
+
+ init mibs before snmp so conf file registrations work
+
+2005-01-05 15:29 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ always generate row undo_setup/undo_cleanup
+
+2005-01-05 10:12 rstory
+
+ * net-snmp-config.in:
+
+ add case label to match lablel given in usage msg
+
+2005-01-03 10:51 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ comment out override checks where we don't have the interface name
+
+2005-01-02 20:34 rstory
+
+ * snmplib/mib.c:
+
+ Recognise whitespace characters as printable.
+
+2005-01-02 20:32 rstory
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ Only issue "access control not configured" warning for the agent
+ (not snmptrapd)
+
+2005-01-02 19:50 rstory
+
+ * local/mib2c-conf.d/: generic-data-allocate.m2i,
+ mfd-data-get.m2c, mfd-interface.m2c:
+
+ don't generate TODO item for code in interfaces file
+
+2005-01-02 18:24 rstory
+
+ * agent/agent_trap.c:
+
+ - don't bind local trapsinks to localhost if clientAddr is set
+
+2004-12-31 09:28 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ comment clarification
+
+2004-12-28 18:49 rstory
+
+ * local/mib2c.mfd.conf:
+
+ fix logic for mfd table test
+
+2004-12-28 17:28 rstory
+
+ * agent/snmp_agent.c:
+
+ update rfc reference
+
+2004-12-28 16:02 rstory
+
+ * agent/helpers/instance.c:
+
+ - don't register ronly handlers as RWRITE
+ - add missing netsnmp_register_int_instance_context
+
+2004-12-28 15:54 rstory
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ use macro constants for return values, instead of hardcoded values
+
+2004-12-28 15:53 rstory
+
+ * snmplib/snmpUDPDomain.c:
+
+ debug msg w/errno when sendto fails
+
+2004-12-28 15:52 rstory
+
+ * snmplib/snmp_api.c:
+
+ add netsnmp_assert on bad ASN build
+
+2004-12-28 15:16 rstory
+
+ * agent/: agent_registry.c, helpers/old_api.c:
+
+ - always specify context, if available) for register callbacks
+ (so disconnected agentx subagents reconnect w/proper context)
+ - memset struct on stack to 0
+
+2004-12-28 12:02 rstory
+
+ * net-snmp-config.in:
+
+ fix bug 1049607: net-snmp-config --compile-subagent broken
+
+2004-12-27 10:55 rstory
+
+ * local/mib2c-conf.d/mfd-readme.m2c:
+
+ add pointer to tutorial and commandline to generate pseudo-todo list
+
+2004-12-25 00:34 rstory
+
+ * local/mib2c.mfd.conf:
+
+ bail on non-table OID until multiple tables per file are supported
+
+2004-12-25 00:21 rstory
+
+ * agent/mibgroup/ucd-snmp/pass_persist.c:
+
+ fix bug 1062986: pass and pass_persist fail and crash snmpd
+
+2004-12-24 23:51 rstory
+
+ * snmplib/system.c:
+
+ fix bug 1072406: invalid operator precedence in opendir()
+
+2004-12-24 10:52 rstory
+
+ * snmplib/snmp_logging.c:
+
+ fix bug 1084413: Can't disable file logging
+
+2004-12-24 10:32 rstory
+
+ * apps/snmptrapd_handlers.c:
+
+ fix bug 1040711: snmptrapd: SIGHUP duplicates traphandlers (repeatedly)
+
+2004-12-24 09:50 rstory
+
+ * local/mib2c-update:
+
+ add -p to mkdir parm
+
+2004-12-24 09:42 rstory
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ remove hardcoded HAVE_IFNAMETOINDEX now that configure checks for it
+
+2004-12-24 09:05 rstory
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+
+ - don't open stdout til we need it
+ - explicit close for opened file
+ - change default to asking questions instead of using defaults
+
+2004-12-24 09:01 rstory
+
+ * local/mib2c.mfd.conf:
+
+ - change default for interactive setup to on
+ - don't override report progress var if already set
+
+2004-12-23 17:57 alex_b
+
+ * README.win32, agent/mibgroup/mibII/system_mib.c,
+ win32/Configure, win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/net-snmp-config.h.in:
+
+ Win32: Fix compiling without PSDK.
+
+2004-12-23 14:19 alex_b
+
+ * agent/mibgroup/mibII/interfaces.c,
+ win32/libsnmp_dll/libsnmp.def,
+ win32/libsnmp_dll/libsnmp.def.in,
+ win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/net-snmp-config.h.in,
+ win32/netsnmpmibssdk/Makefile.in,
+ win32/netsnmpmibssdk/netsnmpmibssdk.dsp:
+
+ Win32 MSVC compile fixes
+
+2004-12-22 18:09 rstory
+
+ * agent/agent_trap.c:
+
+ fix bug 1088765: Agent fails to send traps to remote target
+
+2004-12-22 16:28 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2004-12-22 16:12 rstory
+
+ * configure.in, include/net-snmp/net-snmp-config.h.in
+:
+
+ - test for if_nametoindex
+
+2004-12-22 13:37 hardaker
+
+ * FAQ, README.thread:
+
+ mention that v3 isn't thread safe
+
+2004-12-16 21:08 rstory
+
+ * snmplib/read_config.c:
+
+ log warning on bad hex length (higher routines don't get error indication)
+
+2004-12-16 20:55 rstory
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ ifdef out v1/v2 code when both disabled
+
+2004-12-16 18:14 rstory
+
+ * agent/helpers/table_dataset.c:
+
+ -check for duplicate table defs in snmpd.conf
+ -more informative error messages
+ -support run-time tables which are augmentations
+ -log error if run-time row add fails
+
+2004-12-16 17:03 rstory
+
+ * agent/helpers/table_data.c:
+
+ more informative error messages
+
+2004-12-16 14:59 rstory
+
+ * snmplib/snmp_transport.c:
+
+ check for null var before deref
+
+2004-12-16 14:55 rstory
+
+ * agent/agent_registry.c:
+
+ cache next ptr b4 object could be freed
+
+2004-12-16 14:42 rstory
+
+ * ltmain.sh:
+
+ more helpful error message on missing library
+
+2004-12-16 14:40 rstory
+
+ * Makefile.rules:
+
+ add INSTALL_PREFIX to progress messages
+
+2004-12-15 11:17 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2004-12-14 08:16 rstory
+
+ * agent/mibgroup/utilities/execute.c:
+
+ delete extra ';'
+
+2004-12-14 06:42 rstory
+
+ * configure.in:
+
+ fix quoting on eval lines
+
+2004-12-13 12:40 hardaker
+
+ * agent/agent_registry.c:
+
+ registration lookup optimization allowing incoming requests to more quickly search through the linked list and do single int compares instead of full OID compares for much of the search tree. Should signficantly increase the search speed for new requests.
+
+2004-12-13 12:37 rstory
+
+ * perl/TrapReceiver/TrapReceiver.pm, perl/ASN/ASN.pm,
+ perl/AnyData_SNMP/Storage.pm, perl/OID/OID.pm,
+ perl/SNMP/SNMP.pm, perl/agent/agent.pm,
+ perl/agent/default_store/default_store.pm,
+ perl/default_store/default_store.pm, FAQ, README
+, sedscript.in, dist/net-snmp.spec,
+ snmplib/snmp_version.c:
+
+ - (): version tag ( 5.3.dev )
+
+2004-12-13 12:32 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Added a new oid-compare function which returns where the OIDs differed
+
+2004-12-13 12:27 hardaker
+
+ * include/net-snmp/agent/var_struct.h:
+
+ add an extra sorting variable: oid_off
+
+2004-12-13 08:25 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2004-12-13 08:24 rstory
+
+ * configure.in:
+
+ fix missing end quote
+
+2004-12-10 15:15 rstory
+
+ * NEWS:
+
+ update for recent checkins
+
+2004-12-10 15:00 rstory
+
+ * agent/helpers/table.c:
+
+ -comment tweaks
+ -free varbind indexes before parsing new ones
+ -add/use proper data_list free function for row stashes
+
+2004-12-10 14:44 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.c:
+
+ fix for using ifName for ifDescr when ifDescr not available
+
+2004-12-10 14:41 rstory
+
+ * agent/helpers/table_dataset.c:
+
+ -fix bug 1034008: memory leak using SET for table_dataset
+ -remove unsupportd % spec in config_pwarn
+
+2004-12-10 13:14 rstory
+
+ * agent/mibgroup/utilities/execute.c:
+
+ apply patch 1052460: agent deadlock on exec
+
+2004-12-10 13:01 rstory
+
+ * agent/mibgroup/if-mib/: ifXTable/ifXTable.c,
+ ifXTable/ifXTable_interface.c, ifTable/ifTable_interface.c
+, ifTable/ifTable_interface.h:
+
+ apply patch 1055036: if-mib init order fix
+
+2004-12-10 12:56 rstory
+
+ * agent/mibgroup/ip-mib/data_access/systemstats_linux.c:
+
+ apply patch 1057057: ipSystemStatsTable index fix, add ipv6
+
+2004-12-10 11:06 rstory
+
+ * agent/Makefile.in:
+
+ -new targets to make agentlib, miblib or both
+ -remove agent lib dependency on mib lib
+
+2004-12-10 11:04 rstory
+
+ * Makefile.in:
+
+ new targets to make snmplib, agent, all or individual apps
+
+2004-12-10 11:01 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2004-12-10 11:00 rstory
+
+ * configure.in:
+
+ -fix disable snmpv2c
+ -add partial target os to module cflags
+ -restore missing var init (fix configure slowdown)
+ -more debugging
+
+2004-12-10 10:15 rstory
+
+ * testing/rfc1213/snmpfun.sh:
+
+ fix table checks by adding missing null parameter
+
+2004-12-10 10:07 rstory
+
+ * snmplib/asn1.c:
+
+ comment change only- document why test may not always be false
+
+2004-12-10 09:57 rstory
+
+ * local/mib2c-conf.d/mfd-readme.m2c:
+
+ consistent table naming in example flow, noted on coders by Dave
+
+2004-12-10 09:48 rstory
+
+ * include/net-snmp/agent/mfd.h,
+ local/mib2c-conf.d/mfd-interface.m2c:
+
+ -add flag for row deleted
+ -if no errors, insert/delete new/deleted row into container
+
+2004-12-10 09:46 rstory
+
+ * local/mib2c-conf.d/generic-value-map.m2i:
+
+ fix case of missing get code
+
+2004-12-10 09:41 rstory
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ use same cache timeout on all platforms
+
+2004-12-10 09:33 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - apply patch 1056927: 5.2-p03: freebsd interface bugs
+ - fix bug 1055781: get-next fails to step into interfaces group correctly
+ - fix bug 1056760: agent ignores ifspeed, type settings in snmpd.conf
+ - also fix bug 1056760 fo HP-UX, solaris, Win32 and others
+
+2004-12-10 08:49 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c:
+
+ apply patch 1073897: fix if-mib data access 64bit counter wrap detection
+
+2004-12-09 22:39 rstory
+
+ * agent/helpers/table_array.c:
+
+ - delete removed row after user commit function called
+ - remove row insert/delete in undo - handled in commit
+
+2004-12-09 22:15 rstory
+
+ * agent/helpers/baby_steps.c:
+
+ check requests for errors on get modes too
+
+2004-12-09 21:01 rstory
+
+ * snmplib/snmp_client.c:
+
+ don't free null pointer
+
+2004-12-09 11:57 dts12
+
+ * man/: snmp.conf.5.def, snmp_config.5.def,
+ snmpd.conf.5.def, snmptrapd.conf.5.def:
+
+ Slightly cleaner summaries of config file handling.
+
+2004-12-09 11:53 dts12
+
+ * apps/snmptrapd.c:
+
+ Allow the trap daemon to specify a non-default AgentX socket.
+
+2004-12-09 11:52 dts12
+
+ * include/net-snmp/library/check_varbind.h,
+ snmplib/check_varbind.c:
+
+ New utility routines for checking maximum (rather than exact) size limits.
+
+2004-12-09 11:49 dts12
+
+ * agent/helpers/row_merge.c:
+
+ Use the length supplied during registration when deciding how
+ much of the OID to skip before comparing instance subidentifiers,
+ rather than trying to second-guess what the MIB implementer wanted.
+
+ The MfD framework (which is the only place this helper is currently
+ used) already takes the object subidentifier into account when
+ inserting the helper, thus doing so again will break things.
+
+-------------------------------------------------------------------------------
+
+Changes: V5.1 -> V5.2
+
+2004-11-24 17:34 hardaker
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.2 )
+
+2004-11-24 17:34 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.2 )
+
+2004-11-24 17:34 hardaker
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.2 )
+
+2004-11-24 17:33 hardaker
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.2 )
+
+2004-11-24 17:33 hardaker
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.2 )
+
+2004-11-24 17:33 hardaker
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.2 )
+
+2004-11-24 17:33 hardaker
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.2 )
+
+2004-11-24 17:33 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.2 )
+
+2004-11-24 17:33 hardaker
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.2 )
+
+2004-11-24 17:33 hardaker
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.2 )
+
+2004-11-24 17:32 hardaker
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.2 )
+
+2004-11-24 17:32 hardaker
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.2 )
+
+2004-11-24 17:15 hardaker
+
+ * NEWS:
+
+ wording changes suggested by Robert
+
+2004-11-24 17:12 hardaker
+
+ * perl/OID/OID.pm:
+
+ document get_indexes() by example
+
+2004-11-24 17:09 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ document gettable()
+
+2004-11-24 16:44 hardaker
+
+ * agent/helpers/Makefile.in:
+
+ Convert GNU specific make hacks to portable version
+
+2004-11-24 16:42 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ minor updates
+
+2004-11-24 16:41 hardaker
+
+ * NEWS:
+
+ Update for 5.2 adding a ton of new stuff
+
+2004-11-24 14:35 hardaker
+
+ * ChangeLog:
+
+ Update for 5.2
+
+2004-11-24 10:55 hardaker
+
+ * README:
+
+ update for 5.2. Added a few references to the other README files
+
+2004-11-24 10:33 hardaker
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3,
+ netsnmp_agent_registry.3, netsnmp_agent_trap.3,
+ netsnmp_asn1_packet_parse.3, netsnmp_baby_steps.3,
+ netsnmp_bulk_to_next.3, netsnmp_cache_handler.3,
+ netsnmp_callback.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_default_store.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3, netsnmp_oid_stash.3
+, netsnmp_old_api.3, netsnmp_read_config.3,
+ netsnmp_read_only.3, netsnmp_row_merge.3,
+ netsnmp_scalar.3, netsnmp_scalar_group_group.3,
+ netsnmp_serialize.3, netsnmp_snmp_agent.3,
+ netsnmp_snmp_alarm.3, netsnmp_snmp_client.3,
+ netsnmp_snmp_logging.3, netsnmp_snmp_pdu.3,
+ netsnmp_snmp_session.3, netsnmp_stash_cache.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ Man page update for 5.2
+
+2004-11-24 10:18 hardaker
+
+ * configure, configure.in, doxygen.conf:
+
+ update to 5.2
+
+2004-11-24 08:40 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ strict man page fixes from Eric S. Raymond
+
+2004-11-18 05:27 rstory
+
+ * README.osX:
+
+ fix type noted on coders
+
+2004-11-17 10:17 rstory
+
+ * README.osX:
+
+ - document flags to use to install over Apple's version (which has a bad
+ copy of net-snmp-config
+ - document exluding the unsupported icmp table
+
+2004-11-17 06:49 dts12
+
+ * AGENT.txt:
+
+ Fix typo and missing config directive, reported by William Buckley.
+ Emphasise (in an understated British sort of way) that this is primarily
+ describing the v4 agent, and things may be different with the v5 toolkit.
+
+2004-11-17 05:29 rstory
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.2.rc4 )
+
+2004-11-17 05:29 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.2.rc4 )
+
+2004-11-17 05:28 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.2.rc4 )
+
+2004-11-17 05:28 rstory
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.2.rc4 )
+
+2004-11-17 05:28 rstory
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.2.rc4 )
+
+2004-11-17 05:28 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.2.rc4 )
+
+2004-11-17 05:28 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.2.rc4 )
+
+2004-11-17 05:28 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.2.rc4 )
+
+2004-11-17 05:27 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.2.rc4 )
+
+2004-11-17 05:27 rstory
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.2.rc4 )
+
+2004-11-17 05:27 rstory
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.2.rc4 )
+
+2004-11-17 05:26 rstory
+
+ * README:
+
+ - (README): version tag ( 5.2.rc4 )
+
+2004-11-17 05:26 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.2.rc4 )
+
+2004-11-16 16:56 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2004-11-16 16:55 rstory
+
+ * configure.in, doxygen.conf:
+
+ update version to rc4
+
+2004-11-16 15:42 rstory
+
+ * agent/mibgroup/if-mib/data_access/: interface.h,
+ interface_common.c:
+
+ - don't configure in interface ioctl code by default
+ - ifdef out arch dependent code in interface common
+
+2004-11-12 07:36 hardaker
+
+ * NEWS:
+
+ minor tweaks
+
+2004-11-11 06:36 rstory
+
+ * NEWS:
+
+ mention more changes and fixes
+
+2004-11-09 08:21 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Document the non-optional nature of snmpd.conf
+ (spotted by William Buckley)
+
+2004-11-09 08:12 dts12
+
+ * FAQ:
+
+ Raid Robert's FAQ for some useful entries.
+
+2004-11-09 05:16 dts12
+
+ * TODO:
+
+ It's about time we had a fresh TODO list.
+ There may well be bits that can be salvaged from the
+ old version, but I'll leave that to someone else.
+
+2004-11-05 21:35 hardaker
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.2.rc3 )
+
+2004-11-05 21:34 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.2.rc3 )
+
+2004-11-05 21:34 hardaker
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.2.rc3 )
+
+2004-11-05 21:34 hardaker
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.2.rc3 )
+
+2004-11-05 21:34 hardaker
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.2.rc3 )
+
+2004-11-05 21:34 hardaker
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.2.rc3 )
+
+2004-11-05 21:34 hardaker
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.2.rc3 )
+
+2004-11-05 21:34 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.2.rc3 )
+
+2004-11-05 21:33 hardaker
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.2.rc3 )
+
+2004-11-05 21:33 hardaker
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.2.rc3 )
+
+2004-11-05 21:33 hardaker
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.2.rc3 )
+
+2004-11-05 21:33 hardaker
+
+ * README:
+
+ - (README): version tag ( 5.2.rc3 )
+
+2004-11-05 21:33 hardaker
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.2.rc3 )
+
+2004-11-05 21:31 hardaker
+
+ * doxygen.conf, man/netsnmp_Container_iterator.3,
+ man/netsnmp_agent.3, man/netsnmp_agent_registry.3,
+ man/netsnmp_agent_trap.3, man/netsnmp_asn1_packet_parse.3
+, man/netsnmp_baby_steps.3, man/netsnmp_bulk_to_next.3
+, man/netsnmp_cache_handler.3, man/netsnmp_callback.3
+, man/netsnmp_container.3, man/netsnmp_data_list.3
+, man/netsnmp_debug.3, man/netsnmp_default_store.3
+, man/netsnmp_handler.3, man/netsnmp_instance.3
+, man/netsnmp_iterator_info_s.3, man/netsnmp_leaf.3
+, man/netsnmp_library.3, man/netsnmp_mib_utilities.3
+, man/netsnmp_mode_end_call.3,
+ man/netsnmp_multiplexer.3,
+ man/netsnmp_netsnmp_agent_request_info_s.3,
+ man/netsnmp_netsnmp_column_info_t.3,
+ man/netsnmp_netsnmp_data_list_s.3,
+ man/netsnmp_netsnmp_handler_registration_s.3,
+ man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_access_methods.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_netsnmp_mib_handler_s.3,
+ man/netsnmp_netsnmp_request_info_s.3,
+ man/netsnmp_netsnmp_table_registration_info_s.3,
+ man/netsnmp_netsnmp_table_request_info_s.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_config.3, man/netsnmp_read_only.3,
+ man/netsnmp_row_merge.3, man/netsnmp_scalar.3,
+ man/netsnmp_scalar_group_group.3, man/netsnmp_serialize.3
+, man/netsnmp_snmp_agent.3, man/netsnmp_snmp_alarm.3
+, man/netsnmp_snmp_client.3,
+ man/netsnmp_snmp_logging.3, man/netsnmp_snmp_pdu.3,
+ man/netsnmp_snmp_session.3, man/netsnmp_stash_cache.3
+, man/netsnmp_table.3, man/netsnmp_table_array.3
+, man/netsnmp_table_container.3,
+ man/netsnmp_table_data.3, man/netsnmp_table_dataset.3
+, man/netsnmp_table_iterator.3, man/netsnmp_util.3
+, man/netsnmp_utilities.3,
+ man/netsnmp_variable_list.3, man/netsnmp_watcher.3:
+
+ version update
+
+2004-11-05 21:21 hardaker
+
+ * configure, configure.in:
+
+ version update
+
+2004-11-05 20:27 hardaker
+
+ * README.solaris:
+
+ update from Bruce
+
+2004-11-05 13:08 wasmith32
+
+ * agent/mibgroup/mibII/interfaces.h:
+
+ This patch fixes a configure problem when compiling with some Windows compilers.
+ The affected platforms were MinGW and Cygwin, the patch should not effect MSVC++
+ builds.
+
+2004-11-05 02:05 dts12
+
+ * man/: Makefile.in, snmpdelta.1, snmpdelta.1.def
+, snmpdf.1, snmpdf.1.def, snmpnetstat.1,
+ snmpnetstat.1.def:
+
+ Generate "fixed information" command man pages dynamically
+ (so they pick up the version header) rather than have them static.
+
+2004-11-05 01:28 dts12
+
+ * man/: mib2c.1.def, snmpbulkget.1.def,
+ snmpbulkwalk.1.def, snmpcmd.1.def, snmpdelta.1
+, snmpdf.1, snmpget.1.def, snmpgetnext.1.def
+, snmpnetstat.1, snmpset.1.def, snmpstatus.1.def
+, snmptable.1.def, snmptranslate.1.def,
+ snmptrap.1.def, snmpusm.1.def, snmpvacm.1.def,
+ snmpwalk.1.def:
+
+ Tweak the one-line descriptions of various commands to improve
+ consistency and clarity
+
+2004-11-04 21:38 rstory
+
+ * README.agent-mibs:
+
+ updates (mostly stuff we don't support)
+
+2004-10-29 22:16 hardaker
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.2.rc2 )
+
+2004-10-29 22:15 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.2.rc2 )
+
+2004-10-29 22:15 hardaker
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.2.rc2 )
+
+2004-10-29 22:15 hardaker
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.2.rc2 )
+
+2004-10-29 22:15 hardaker
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.2.rc2 )
+
+2004-10-29 22:15 hardaker
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.2.rc2 )
+
+2004-10-29 22:15 hardaker
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.2.rc2 )
+
+2004-10-29 22:15 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.2.rc2 )
+
+2004-10-29 22:14 hardaker
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.2.rc2 )
+
+2004-10-29 22:14 hardaker
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.2.rc2 )
+
+2004-10-29 22:14 hardaker
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.2.rc2 )
+
+2004-10-29 22:14 hardaker
+
+ * README:
+
+ - (README): version tag ( 5.2.rc2 )
+
+2004-10-29 22:14 hardaker
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.2.rc2 )
+
+2004-10-29 22:10 hardaker
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3,
+ netsnmp_agent_registry.3, netsnmp_agent_trap.3,
+ netsnmp_asn1_packet_parse.3, netsnmp_baby_steps.3,
+ netsnmp_bulk_to_next.3, netsnmp_cache_handler.3,
+ netsnmp_callback.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_default_store.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3, netsnmp_oid_stash.3
+, netsnmp_old_api.3, netsnmp_read_config.3,
+ netsnmp_read_only.3, netsnmp_row_merge.3,
+ netsnmp_scalar.3, netsnmp_scalar_group_group.3,
+ netsnmp_serialize.3, netsnmp_snmp_agent.3,
+ netsnmp_snmp_alarm.3, netsnmp_snmp_client.3,
+ netsnmp_snmp_logging.3, netsnmp_snmp_pdu.3,
+ netsnmp_snmp_session.3, netsnmp_stash_cache.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ -> 5.2.rc2
+
+2004-10-29 22:05 hardaker
+
+ * configure, configure.in, doxygen.conf:
+
+ -> 5.2.rc2
+
+2004-10-29 13:28 rstory
+
+ * README.agent-mibs:
+
+ first pass at agent mibs readme
+
+2004-10-26 05:40 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2004-10-26 05:37 rstory
+
+ * configure.in:
+
+ don't unconditionally add libraries (freebsd doesn't have libdl)
+
+2004-10-22 18:06 hardaker
+
+ * dist/net-snmp.spec:
+
+ fix conflict
+
+2004-10-22 18:02 hardaker
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.2.rc1 )
+
+2004-10-22 18:01 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.2.rc1 )
+
+2004-10-22 18:01 hardaker
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.2.rc1 )
+
+2004-10-22 18:01 hardaker
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.2.rc1 )
+
+2004-10-22 18:01 hardaker
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.2.rc1 )
+
+2004-10-22 18:01 hardaker
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.2.rc1 )
+
+2004-10-22 18:00 hardaker
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.2.rc1 )
+
+2004-10-22 18:00 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.2.rc1 )
+
+2004-10-22 18:00 hardaker
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.2.rc1 )
+
+2004-10-22 17:59 hardaker
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.2.rc1 )
+
+2004-10-22 17:59 hardaker
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.2.rc1 )
+
+2004-10-22 17:59 hardaker
+
+ * README:
+
+ - (README): version tag ( 5.2.rc1 )
+
+2004-10-22 17:59 hardaker
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.2.rc1 )
+
+2004-10-22 17:57 hardaker
+
+ * agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, agent/Makefile.depend
+, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend
+:
+
+ make depend
+
+2004-10-22 17:46 hardaker
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3,
+ netsnmp_agent_registry.3, netsnmp_agent_trap.3,
+ netsnmp_asn1_packet_parse.3, netsnmp_baby_steps.3,
+ netsnmp_bulk_to_next.3, netsnmp_cache_handler.3,
+ netsnmp_callback.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_default_store.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3, netsnmp_oid_stash.3
+, netsnmp_old_api.3, netsnmp_read_config.3,
+ netsnmp_read_only.3, netsnmp_row_merge.3,
+ netsnmp_scalar.3, netsnmp_scalar_group_group.3,
+ netsnmp_serialize.3, netsnmp_snmp_agent.3,
+ netsnmp_snmp_alarm.3, netsnmp_snmp_client.3,
+ netsnmp_snmp_logging.3, netsnmp_snmp_pdu.3,
+ netsnmp_snmp_session.3, netsnmp_stash_cache.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ make docs
+
+2004-10-22 17:41 hardaker
+
+ * include/net-snmp/net-snmp-config.h.in, configure,
+ configure.in, doxygen.conf:
+
+ version update
+
+2004-10-22 11:41 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2004-10-22 11:40 rstory
+
+ * configure.in:
+
+ - move PIC check after module processing, & check against complete module list
+ - check diskio and lmSensors against complete module list
+
+2004-10-22 11:37 rstory
+
+ * agent/mibgroup/if-mib/ifTable/: ifTable.c,
+ ifTable_data_access.c:
+
+ fixes for building ifTable w/out ifXTable
+
+2004-10-22 02:17 dts12
+
+ * mibs/Makefile.in:
+
+ If we're going to include the NET-SNMP-EXTEND-MIB support by default,
+ (and load it automatically), it would be even more useful to actually
+ install it, so it was available to _be_ loaded!
+
+2004-10-22 02:17 dts12
+
+ * agent/mibgroup/agent/extend.h:
+
+ If we're going to include the NET-SNMP-EXTEND-MIB support by default,
+ it would be sensible to load that MIB automatically.
+
+2004-10-21 15:57 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.c:
+
+ ifdef use of variable that isn't always defined
+
+2004-10-21 11:42 rstory
+
+ * agent/helpers/table_dataset.c:
+
+ fix for multiple rows/tables set problem, noted by Sven Jonas on coders
+
+2004-10-20 21:02 slif
+
+ * Makefile.in:
+
+ invoke perlrealclean first in the distclean sequence.
+
+2004-10-20 19:55 slif
+
+ * Makefile.in:
+
+ perform deep cleaning on Perl tree to fix bug #894425.
+
+2004-10-20 19:35 slif
+
+ * apps/snmpnetstat/if.c:
+
+ fix table overflow (inspired by Debian patch to 5.1.2).
+
+2004-10-20 18:52 slif
+
+ * man/mib_api.3.def:
+
+ remove second read_objid from methods list (Inspired by current Debian patch)
+
+2004-10-20 16:52 slif
+
+ * agent/mibgroup/ucd-snmp/memory.c,
+ include/net-snmp/library/system.h, snmplib/snmpUDPDomain.c
+, snmplib/system.c:
+
+ fix bug#1043197 (2) - test os version and release using uname to qualify action
+
+2004-10-19 16:26 rstory
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ move rpm header includes inside HAVE_LIBRPM because of header dependencies
+
+2004-10-19 16:23 rstory
+
+ * configure.in:
+
+ - move rpm checks back after module processing, since rpm only included
+ iff hr_swinst gets configured in
+
+2004-10-19 14:04 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c:
+
+ remove cpp warning
+
+2004-10-19 14:01 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2004-10-19 14:00 rstory
+
+ * configure.in:
+
+ - update release
+ - for every AC_ARG_ENABLE, add corresponding AC_ARG_WITH with error message
+ - for every AC_ARG_WITH, add corresponding AC_ARG_ENABLE with error message
+ - move librwap/rpm checks earlier, so they will fail before module processing
+ - check mbstat struct for m_clusters (freebsd apparently dropped it)
+
+2004-10-19 03:19 dts12
+
+ * local/mib2c.array-user.conf:
+
+ Don't generate 'Get' code for inaccessible objects.
+
+2004-10-19 03:13 dts12
+
+ * agent/helpers/table_array.c:
+
+ Protect against the agent crashing if no 'delete_row' or
+ 'duplicate_row' routines were configured.
+
+2004-10-19 03:12 dts12
+
+ * agent/helpers/table_array.c:
+
+ Prevent the agent from spinning in an infinite loop
+ at the end of the table.
+
+2004-10-19 03:05 dts12
+
+ * agent/mibgroup/agentx/master.c:
+
+ Report *which* agentx socket couldn't be opened.
+
+2004-10-18 20:24 rstory
+
+ * doxygen.conf:
+
+ update release
+
+2004-10-18 20:23 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c:
+
+ replace incorrect comment block w/note about possible future optimization
+
+2004-10-18 20:23 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c:
+
+ - use new ioctl ifIndex find
+ - make next alias func static
+
+2004-10-18 20:21 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c:
+
+ - use new ipaddress entry copy function for table level undo setup
+ - remove node level undo setup
+ - implement undo_commit
+
+2004-10-18 20:20 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_common.c,
+ include/net-snmp/data_access/ipaddress.h:
+
+ new netsnmp_access_ipaddress_entry_copy to copy entries
+
+2004-10-17 20:56 rstory
+
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.c
+:
+
+ - update generated code
+ - fix slight memory leak
+
+2004-10-17 20:53 rstory
+
+ * agent/mibgroup/:
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c
+,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.c
+,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c
+,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.c
+, ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c
+, ip-mib/ipAddressTable/ipAddressTable_data_access.c,
+ ip-mib/ipAddressTable/ipAddressTable_interface.c,
+ ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c,
+ ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_access.c
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_access.h
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.h
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_interface.c
+:
+
+ update generated code
+
+2004-10-17 20:49 rstory
+
+ * agent/mibgroup/if-mib/data_access/: interface_ioctl.h,
+ interface_linux.c:
+
+ add fd parameter to netsnmp_access_interface_ioctl_ifindex_get
+
+2004-10-17 19:56 rstory
+
+ * local/mib2c-conf.d/: mfd-access-container-cached-defines.m2i
+, mfd-interface.m2c:
+
+ only track whether user allocated data context for non-transient data
+
+2004-10-16 19:53 alex_b
+
+ * win32/dist/scripts/mandir2html:
+
+ Win32 mandir2html script was cutting off the bottom the man pages. Fixed.
+
+2004-10-16 19:00 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_linux.c:
+
+ - use new fd param for ifindex lookup, with local socket
+ - don't lookup interface if no name
+
+2004-10-16 18:59 rstory
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ don't use m_clusters if not available
+
+2004-10-16 18:53 rstory
+
+ * agent/mibgroup/mibII/interfaces.h:
+
+ simply require interface, let it decide about specific arch requires
+
+2004-10-16 18:52 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_ioctl.c:
+
+ - always define ifindex function; simply return 0 if SIOCGIFINDEX not avail
+ - add fd param to ifindex get, for optimization
+
+2004-10-16 18:51 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c:
+
+ - separate interface_common init from access_interface init
+ - call access function, not arch (so unsupported arches work)
+
+2004-10-16 18:49 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface.h:
+
+ always include ioctl w/interface stuff
+
+2004-10-16 18:48 rstory
+
+ * agent/: mib_modules.c, snmp_vars.c:
+
+ move access init from agent to mib init
+
+2004-10-16 13:44 rstory
+
+ * testing/rfc1213/test_fun:
+
+ - comment out ansi colors (inconsistent use)
+ - prefix sub-tests & summary with main test number to reduce confusion
+
+2004-10-16 13:43 rstory
+
+ * testing/rfc1213/snmpfun.sh:
+
+ use snmpgetnext instead of snmptable testing tables
+
+2004-10-16 13:42 rstory
+
+ * testing/eval_tools.sh:
+
+ - check for no pid files found
+ - check for pidfile vanishing
+
+2004-10-16 13:40 rstory
+
+ * testing/RUNTESTS:
+
+ remove stray quote
+
+2004-10-16 10:32 rstory
+
+ * testing/TESTCONF.sh:
+
+ if netstat is available, test for port in use and try 2 more random ports
+
+2004-10-15 21:01 rstory
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.2.pre3 )
+
+2004-10-15 21:00 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.2.pre3 )
+
+2004-10-15 21:00 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.2.pre3 )
+
+2004-10-15 21:00 rstory
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.2.pre3 )
+
+2004-10-15 20:59 rstory
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.2.pre3 )
+
+2004-10-15 20:59 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.2.pre3 )
+
+2004-10-15 20:58 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.2.pre3 )
+
+2004-10-15 20:58 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.2.pre3 )
+
+2004-10-15 20:58 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.2.pre3 )
+
+2004-10-15 20:57 rstory
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.2.pre3 )
+
+2004-10-15 20:57 rstory
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.2.pre3 )
+
+2004-10-15 20:57 rstory
+
+ * README:
+
+ - (README): version tag ( 5.2.pre3 )
+
+2004-10-15 20:56 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.2.pre3 )
+
+2004-10-15 20:48 rstory
+
+ * agent/Makefile.depend, agent/mibgroup/Makefile.depend
+, snmplib/Makefile.depend,
+ agent/helpers/Makefile.depend, apps/Makefile.depend
+, apps/snmpnetstat/Makefile.depend:
+
+ make depend
+
+2004-10-15 20:48 rstory
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3,
+ netsnmp_agent_registry.3, netsnmp_agent_trap.3,
+ netsnmp_asn1_packet_parse.3, netsnmp_baby_steps.3,
+ netsnmp_bulk_to_next.3, netsnmp_cache_handler.3,
+ netsnmp_callback.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_default_store.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3,
+ netsnmp_multiplexer.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_netsnmp_mib_handler_methods.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3, netsnmp_oid_stash.3
+, netsnmp_old_api.3, netsnmp_read_config.3,
+ netsnmp_read_only.3, netsnmp_row_merge.3,
+ netsnmp_scalar.3, netsnmp_scalar_group_group.3,
+ netsnmp_serialize.3, netsnmp_snmp_agent.3,
+ netsnmp_snmp_alarm.3, netsnmp_snmp_client.3,
+ netsnmp_snmp_logging.3, netsnmp_snmp_pdu.3,
+ netsnmp_snmp_session.3, netsnmp_stash_cache.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_container.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_variable_list.3, netsnmp_watcher.3:
+
+ update for 5.2.pre3
+
+2004-10-15 20:35 rstory
+
+ * agent/mibgroup/tcp-mib/data_access/tcpConn_linux.c:
+
+ remove C++ style comments
+
+2004-10-15 20:14 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.c:
+
+ update for data acccess change
+
+2004-10-15 20:04 rstory
+
+ * README.solaris, agent/mibgroup/ucd-snmp/lmSensors.c
+:
+
+ lmSensors changes from Bruce
+
+2004-10-15 18:00 alex_b
+
+ * win32/dist/scripts/mandir2html:
+
+ Win32 mandir2html script was cutting off the top of the man pages. Fixed.
+
+2004-10-15 17:35 rstory
+
+ * agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/:
+ usmDHUserKeyTable.h, usmDHUserKeyTable_data_access.c,
+ usmDHUserKeyTable_data_access.h,
+ usmDHUserKeyTable_data_get.c, usmDHUserKeyTable_data_get.h
+, usmDHUserKeyTable_data_set.c,
+ usmDHUserKeyTable_data_set.h, usmDHUserKeyTable_interface.c
+, usmDHUserKeyTable_interface.h,
+ usmDHUserKeyTable_oids.h:
+
+ update generated code; run indent
+
+2004-10-15 17:31 rstory
+
+ * agent/mibgroup/ip-mib/ipSystemStatsTable/: ipSystemStatsTable.c
+, ipSystemStatsTable.h, ipSystemStatsTable_constants.h
+, ipSystemStatsTable_data_access.c,
+ ipSystemStatsTable_data_access.h,
+ ipSystemStatsTable_interface.c,
+ ipSystemStatsTable_interface.h:
+
+ regenerate code; run indent
+
+2004-10-15 17:25 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/: ipAddressTable.c,
+ ipAddressTable.h, ipAddressTable_data_access.c,
+ ipAddressTable_data_access.h, ipAddressTable_interface.c
+, ipAddressTable_interface.h:
+
+ update generated code; run indent
+
+2004-10-15 17:21 rstory
+
+ * agent/mibgroup/ip-mib/inetNetToMediaTable/: inetNetToMediaTable.c
+, inetNetToMediaTable.h,
+ inetNetToMediaTable_data_access.c,
+ inetNetToMediaTable_data_access.h,
+ inetNetToMediaTable_interface.c,
+ inetNetToMediaTable_interface.h:
+
+ update generated code; run indent
+
+2004-10-15 17:15 rstory
+
+ * agent/mibgroup/ip-forward-mib/ipCidrRouteTable/:
+ ipCidrRouteTable.c, ipCidrRouteTable.h,
+ ipCidrRouteTable_data_access.c,
+ ipCidrRouteTable_data_access.h,
+ ipCidrRouteTable_interface.c, ipCidrRouteTable_interface.h
+:
+
+ update generated code; run indent
+
+2004-10-15 17:00 rstory
+
+ * agent/mibgroup/ip-forward-mib/inetCidrRouteTable/:
+ inetCidrRouteTable.c, inetCidrRouteTable.h,
+ inetCidrRouteTable_data_access.c,
+ inetCidrRouteTable_data_access.h,
+ inetCidrRouteTable_interface.c,
+ inetCidrRouteTable_interface.h:
+
+ update generated code; run indent
+
+2004-10-15 16:52 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/: ifXTable.c, ifXTable.h
+, ifXTable_data_access.c, ifXTable_interface.c
+, ifXTable_interface.h:
+
+ update generated code; run indent
+
+2004-10-15 16:34 rstory
+
+ * agent/mibgroup/if-mib/ifTable/: ifTable.c, ifTable.h
+, ifTable_data_access.c, ifTable_interface.c,
+ ifTable_interface.h:
+
+ update generated code; run indent
+
+2004-10-15 15:23 rstory
+
+ * agent/mibgroup/ip-mib/ipSystemStatsTable/:
+ ipSystemStatsTable-README-FIRST.txt,
+ ipSystemStatsTable-README-ipSystemStatsTable.txt:
+
+ remove non-source files
+
+2004-10-15 15:20 rstory
+
+ * agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+:
+
+ fix max index len
+
+2004-10-15 15:18 rstory
+
+ * agent/mibgroup/ip-forward-mib/:
+ ipCidrRouteTable/ipCidrRouteTable_data_access.c,
+ inetCidrRouteTable/inetCidrRouteTable_data_access.c:
+
+ fix cut-n-paste in log msg
+
+2004-10-15 15:13 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_linux.c,
+ include/net-snmp/data_access/interface.h,
+ agent/mibgroup/mibII/ipAddr.c:
+
+ use SIOCGIFINDEX ioctl for ifIndex
+
+2004-10-15 15:09 rstory
+
+ * agent/mibgroup/if-mib/data_access/: interface_common.c,
+ interface_ioctl.c, interface_ioctl.h,
+ interface_linux.c:
+
+ use SIOCGIFINDEX ioctl for ifIndex
+
+2004-10-15 11:52 rstory
+
+ * include/net-snmp/library/default_store.h,
+ man/snmp.conf.5.def, snmplib/snmpTCPDomain.c,
+ snmplib/snmpTCPIPv6Domain.c, snmplib/snmpUDPDomain.c
+, snmplib/snmpUDPIPv6Domain.c, snmplib/snmp_api.c
+:
+
+ tweak buffer size code and apply to tcp sockets too
+
+2004-10-14 20:29 wasmith32
+
+ * agent/mibgroup/host_res.h:
+
+ Modified includes for Windows builds to include winsock rather than Unix sockets.
+
+2004-10-14 18:15 rstory
+
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+:
+
+ optimize mib index size defs (reduce cache size by half!)
+
+2004-10-14 18:04 rstory
+
+ * agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/:
+ usmDHUserKeyTable.h, usmDHUserKeyTable_data_access.c,
+ usmDHUserKeyTable_data_get.c, usmDHUserKeyTable_data_set.c
+, usmDHUserKeyTable_interface.c,
+ usmDHUserKeyTable_interface.h:
+
+ update generated code; don't use struct ptr as data context
+
+2004-10-14 17:53 rstory
+
+ * include/net-snmp/data_access/route.h:
+
+ define max policy length
+
+2004-10-14 17:52 rstory
+
+ * local/mib2c-conf.d/node-get.m2i:
+
+ minor tweak to comments, reduce diffs on switch from embedded->allocated data
+
+2004-10-14 17:51 rstory
+
+ * include/net-snmp/agent/mfd.h,
+ local/mib2c-conf.d/mfd-access-container-cached-defines.m2i
+, local/mib2c-conf.d/mfd-interface.m2c:
+
+ don't free a data context we didn't allocate
+
+2004-10-14 17:50 rstory
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+
+ clarify that a pointer shouldn't be used as the data context type
+
+2004-10-14 17:49 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes.m2i:
+
+ account for ipaddres->OID conversion in index space allocations
+
+2004-10-14 17:48 rstory
+
+ * local/mib2c-conf.d/: generic-ctx-set.m2i,
+ m2c_setup_table.m2i, syntax-COUNTER64-get.m2i:
+
+ minor tweak to comments, reduce diffs on switch from embedded->allocated data
+
+2004-10-14 17:45 rstory
+
+ * local/mib2c-conf.d/node-set.m2i:
+
+ fix var name
+
+2004-10-14 05:57 dts12
+
+ * local/: mib2c.access_functions.conf, mib2c.container.conf
+, mib2c.iterate.conf, mib2c.scalar.conf,
+ mib2c.table_data.conf:
+
+ Return 'SNMP_ERR_NOERROR' on "normal" SET errors.
+ (Such errors should only be reported via netsnmp_set_request_error)
+
+2004-10-13 19:21 slif
+
+ * snmplib/snmp_logging.c:
+
+ use correct facility when initializing syslog log handler.
+
+2004-10-13 18:36 alex_b
+
+ * win32/dist/: README.build.win32.txt,
+ installer/net-snmp.nsi:
+
+ Remove reboot warning from register scripts and clarify step in build steps
+
+2004-10-13 15:24 alex_b
+
+ * README.win32, win32/Configure,
+ win32/libsnmp_dll/libsnmp.def,
+ win32/libsnmp_dll/libsnmp.def.in:
+
+ Create libsnmp.def.in file for snmplib_dll and modify win32\Configure to
+ generate libsnmp.def if dynamic is specified and with or without the IPv6
+ lines in libsnmp.def.
+
+2004-10-12 21:10 hardaker
+
+ * agent/snmp_agent.c, apps/snmptrapd.c:
+
+ Fix bug [ 1045605 ] syntax error in snmptrapd.c (wrong arg order)
+
+2004-10-12 17:04 rstory
+
+ * snmplib/mib.c:
+
+ allow build_oid_noalloc to completely fill incoming buffer
+
+2004-10-12 16:14 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ -move initialization of internals back before we use them
+ (ah, the joys of automated patching)
+
+2004-10-12 14:56 rstory
+
+ * agent/mibgroup/: if-mib/ifTable/.mib2c-updaterc,
+ if-mib/ifTable/default-table-ifTable.m2d,
+ if-mib/ifXTable/.mib2c-updaterc,
+ if-mib/ifXTable/default-table-ifXTable.m2d,
+ ip-forward-mib/inetCidrRouteTable/.mib2c-updaterc,
+ ip-forward-mib/inetCidrRouteTable/default-table-inetCidrRouteTable.m2d
+, ip-forward-mib/ipCidrRouteTable/.mib2c-updaterc,
+ ip-forward-mib/ipCidrRouteTable/default-table-ipCidrRouteTable.m2d
+, ip-mib/inetNetToMediaTable/.mib2c-updaterc,
+ ip-mib/inetNetToMediaTable/default-table-inetNetToMediaTable.m2d
+, ip-mib/ipAddressTable/.mib2c-updaterc,
+ ip-mib/ipAddressTable/default-table-ipAddressTable.m2d,
+ ip-mib/ipSystemStatsTable/.mib2c-updaterc,
+ ip-mib/ipSystemStatsTable/default-table-ipSystemStatsTable.m2d
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/default-table-usmDHUserKeyTable.m2d
+:
+
+ remove files used for code gen (moved to netsnmp/module-templates cvs tree)
+
+2004-10-12 13:24 alex_b
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ Fix IPV6 compile issues with Perl
+
+2004-10-12 13:03 alex_b
+
+ * win32/: libsnmp_dll/libsnmp.def,
+ netsnmpmibssdk/Makefile.in,
+ netsnmpmibssdk/netsnmpmibssdk.dsp:
+
+ Fix Perl compile issue with dbg_tokens and debug_num_tokens. Fix snmptrapd
+ compile issue by adding iphlapi.lib to netsnmpmibssdk.
+
+2004-10-12 10:40 wasmith32
+
+ * snmplib/winservice.c:
+
+ Some versions of gcc with MinGW do not like a lable with no statements following.
+ The sollution was to add an empty statement in the sudo exception handling
+ code in winservice.c. Net-SNMP will now compile using a Linux hosted Windows
+ cross compiler.
+
+2004-10-11 21:06 slif
+
+ * agent/agent_registry.c:
+
+ fix signed/unsigned compare of range_subid
+
+2004-10-11 21:03 slif
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ remove unused var sess_community
+
+2004-10-11 21:02 slif
+
+ * agent/snmp_vars.c:
+
+ get definition of should_init
+
+2004-10-11 21:02 slif
+
+ * apps/snmpnetstat/winstub.c,
+ include/net-snmp/library/system.h:
+
+ pickup new definition of strtok_r as needed.
+
+2004-10-10 21:28 bshaw666
+
+ * README.solaris, configure, configure.in,
+ agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ LM-SENSORS-MIB for Solaris
+
+2004-10-09 07:41 rstory
+
+ * agent/snmp_agent.c:
+
+ move var decl to top of func; remove extra }
+
+2004-10-09 04:48 slif
+
+ * agent/mibgroup/ucd-snmp/memory.c,
+ include/net-snmp/library/system.h, snmplib/snmpUDPDomain.c
+, snmplib/snmpUDPIPv6Domain.c, snmplib/system.c
+:
+
+ remove bugfix #1043197 - wrong patch done the wrong way at the wrong time
+
+2004-10-08 22:02 hardaker
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.2.pre2 )
+
+2004-10-08 22:02 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.2.pre2 )
+
+2004-10-08 22:01 hardaker
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.2.pre2 )
+
+2004-10-08 22:01 hardaker
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.2.pre2 )
+
+2004-10-08 22:01 hardaker
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.2.pre2 )
+
+2004-10-08 22:01 hardaker
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.2.pre2 )
+
+2004-10-08 22:01 hardaker
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.2.pre2 )
+
+2004-10-08 22:01 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.2.pre2 )
+
+2004-10-08 22:00 hardaker
+
+ * dist/Makefile:
+
+ - (dist/Makefile): version tag ( 5.2.pre2 )
+
+2004-10-08 22:00 hardaker
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.2.pre2 )
+
+2004-10-08 22:00 hardaker
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.2.pre2 )
+
+2004-10-08 22:00 hardaker
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.2.pre2 )
+
+2004-10-08 21:59 hardaker
+
+ * README:
+
+ - (README): version tag ( 5.2.pre2 )
+
+2004-10-08 21:59 hardaker
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.2.pre2 )
+
+2004-10-08 21:58 hardaker
+
+ * NEWS:
+
+ minor edits
+
+2004-10-08 21:58 hardaker
+
+ * agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, agent/Makefile.depend
+, apps/snmpnetstat/Makefile.depend,
+ apps/Makefile.depend, snmplib/Makefile.depend:
+
+ make depend
+
+2004-10-08 21:54 hardaker
+
+ * configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in:
+
+ update autoconf version req; update net-snmp version to .pro2
+
+2004-10-08 21:44 hardaker
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ change the anon groups/etc created by the simple tokens to be more descriptive and unique
+
+2004-10-08 21:42 hardaker
+
+ * local/mib2c-conf.d/node-set.m2i:
+
+ test the right variable
+
+2004-10-08 21:40 hardaker
+
+ * local/mib2c.genhtml.conf:
+
+ make the background of the obsolete section pinkish
+
+2004-10-08 21:38 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ enable stderrlog
+
+2004-10-08 20:09 hardaker
+
+ * man/mib_api.3.def:
+
+ fix inconsistencies pointed out by Patrick Welche
+
+2004-10-08 20:05 hardaker
+
+ * snmplib/snmpv3.c:
+
+ make sure snmpEngineTime calculations don't wrap past an uint size
+
+2004-10-08 19:27 rstory
+
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_interface.c
+:
+
+ remove duplicate function
+
+2004-10-08 19:25 rstory
+
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_interface.c
+:
+
+ fix typo
+
+2004-10-08 19:12 rstory
+
+ * agent/helpers/table_container.c,
+ include/net-snmp/agent/table_container.h:
+
+ tweak some macro and fuction names/values
+
+2004-10-08 19:07 rstory
+
+ * agent/mibgroup/: if-mib/ifTable/ifTable.c,
+ if-mib/ifTable/ifTable.h,
+ if-mib/ifTable/ifTable_constants.h,
+ if-mib/ifTable/ifTable_data_access.c,
+ if-mib/ifTable/ifTable_data_access.h,
+ if-mib/ifTable/ifTable_interface.c,
+ if-mib/ifTable/ifTable_interface.h,
+ if-mib/ifXTable/ifXTable.c, if-mib/ifXTable/ifXTable.h
+, if-mib/ifXTable/ifXTable_constants.h,
+ if-mib/ifXTable/ifXTable_data_access.c,
+ if-mib/ifXTable/ifXTable_data_access.h,
+ if-mib/ifXTable/ifXTable_interface.c,
+ if-mib/ifXTable/ifXTable_interface.h,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.c,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_constants.h
+,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.c
+,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.h
+,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c
+,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h
+, ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_constants.h
+,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.c
+,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.h
+,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c
+,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.h
+, ip-mib/inetNetToMediaTable/inetNetToMediaTable.c,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable.h,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.c
+,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h
+, ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c
+, ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h
+, ip-mib/ipAddressTable/ipAddressTable.c,
+ ip-mib/ipAddressTable/ipAddressTable.h,
+ ip-mib/ipAddressTable/ipAddressTable_constants.h,
+ ip-mib/ipAddressTable/ipAddressTable_data_access.c,
+ ip-mib/ipAddressTable/ipAddressTable_data_access.h,
+ ip-mib/ipAddressTable/ipAddressTable_interface.c,
+ ip-mib/ipAddressTable/ipAddressTable_interface.h,
+ ip-mib/ipSystemStatsTable/ipSystemStatsTable.c,
+ ip-mib/ipSystemStatsTable/ipSystemStatsTable.h,
+ ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h,
+ ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c,
+ ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.h,
+ ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c,
+ ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable.c
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable.h
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_access.c
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_access.h
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_get.c
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_get.h
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.c
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.h
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_enums.h
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_interface.c
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_interface.h
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_oids.h
+:
+
+ update genereated cod
+
+2004-10-08 19:02 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes.m2i:
+
+ tweak max oid guesswork
+
+2004-10-08 16:46 rstory
+
+ * local/mib2c-conf.d/node-set.m2i:
+
+ -revamp/add comments (give diff more context; facilitate auto-gen of task list)
+ -reduce some generated comments if verbose not set
+
+2004-10-08 16:44 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ -revamp/add comments (give diff more context; facilitate auto-gen of task list)
+ -use new macro for size of index oid buffer
+
+2004-10-08 16:43 rstory
+
+ * local/mib2c-conf.d/m2c_setup_table.m2i:
+
+ -init irreversible commit to 0
+
+2004-10-08 16:43 hardaker
+
+ * apps/snmptrapd.c, snmplib/snmpTCPDomain.c,
+ snmplib/snmpTCPIPv6Domain.c, snmplib/snmpUDPDomain.c
+, snmplib/snmpUDPIPv6Domain.c, agent/snmp_agent.c
+:
+
+ Apply patch found in bug #1040431 to include transport information in the dump output
+
+2004-10-08 16:43 rstory
+
+ * local/mib2c-conf.d/mfd-access-container-cached-defines.m2i
+:
+
+ -revamp/add comments (give diff more context; facilitate auto-gen of task list)
+ -use new define in header for cache timouet
+
+2004-10-08 16:41 rstory
+
+ * local/mib2c-conf.d/generic-value-map-func.m2i:
+
+ -revamp/add comments (give diff more context; facilitate auto-gen of task list)
+ -remove some redundant comments
+
+2004-10-08 16:41 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes.m2i:
+
+ -revamp/add comments (give diff more context; facilitate auto-gen of task list)
+ -try to shorten size of oid buffers for indexes
+
+2004-10-08 16:40 rstory
+
+ * local/mib2c-conf.d/details-enums.m2i:
+
+ -revamp/add comments (give diff more context; facilitate auto-gen of task list)
+ -don't gen internal enums if not mapping
+
+2004-10-08 16:39 rstory
+
+ * local/mib2c-conf.d/: generic-ctx-copy.m2i,
+ generic-ctx-set.m2i, generic-data-allocate.m2i,
+ generic-data-context.m2i, generic-get-char.m2i,
+ generic-table-indexes-from-oid.m2i,
+ generic-table-indexes-set.m2i,
+ generic-table-indexes-to-oid.m2i, generic-table-oids.m2c
+, generic-value-map-reverse.m2i,
+ generic-value-map.m2i,
+ mfd-access-unsorted-external-defines.m2i,
+ mfd-data-access.m2c, mfd-data-get.m2c,
+ mfd-data-set.m2c, mfd-interface.m2c, node-get.m2i
+, parent-dependencies.m2i, parent-set.m2i,
+ syntax-COUNTER64-get.m2i, syntax-DateAndTime-get.m2i,
+ syntax-InetAddress-get.m2i, syntax-InetAddressType-get.m2i
+, syntax-InetAddressType-set.m2i,
+ syntax-RowStatus-get.m2i, syntax-TestAndIncr-get.m2i:
+
+ revamp/add comments (give diff more context; facilitate auto-gen of task list)
+
+2004-10-08 16:02 slif
+
+ * net-snmp-config.in:
+
+ From Debian patch net-snmp_5.1.2-5.diff.gz -- propagate WRAPLIBS
+
+2004-10-08 15:32 hardaker
+
+ * net-snmp-config.in:
+
+ apply the intent of patch 947033 from Claus Klein to allow for cross compilation support through the use of --prefix= and --exec-prefix= flags. Didn't apply the white space, reformatting, etc portions since its against our patch acceptance standards. Also made a small fix so that --perfix=/something doesn't add a /net-snmp suffix to the include directory
+
+2004-10-08 15:16 hardaker
+
+ * acconfig.h, configure.in,
+ include/net-snmp/net-snmp-config.h.in,
+ snmplib/snmpUDPDomain.c:
+
+ [ 1022787 ] Patch (from Geert De Peuter) that allows UDP buffer tuning... Take 2 after discussion on -coders
+
+2004-10-08 14:15 slif
+
+ * perl/: ASN/ASN.pm, OID/OID.pm,
+ TrapReceiver/TrapReceiver.pm, agent/agent.pm,
+ agent/netsnmp_request_infoPtr.pm,
+ agent/default_store/default_store.pm,
+ default_store/default_store.pm, manager/displaytable.pm
+:
+
+ Seen in a Debian patch. Insert required blank line following __END__ cut mark.
+
+2004-10-08 13:50 slif
+
+ * agent/mibgroup/smux/smux.c:
+
+ Don't show smux peer password in connect accept/refuse log messages.
+
+2004-10-08 11:52 slif
+
+ * testing/: rfc1213/README, rfc1213/run,
+ rfc1213/snmpfun.sh, rfc1213/test_fun,
+ rfc1213/testmib1.sh, rfc1213/testmib2.sh,
+ rfc1213/testmib3.sh, tests/T160rfc1213,
+ tests/T161rfc1213, tests/T162rfc1213:
+
+ patch #689757 - add test cases for accessing RFC-1213 MIB variables.
+ thanks to Ling Xiaofeng for the original work.
+
+2004-10-08 10:43 rstory
+
+ * agent/helpers/table_data.c:
+
+ initialize ptr to NULL
+
+2004-10-08 10:31 slif
+
+ * agent/mibgroup/ucd-snmp/memory.c,
+ include/net-snmp/library/system.h, snmplib/snmpUDPDomain.c
+, snmplib/snmpUDPIPv6Domain.c, snmplib/system.c
+:
+
+ fix bug#1043197 - provide a function to test os version and release
+
+2004-10-08 10:22 rstory
+
+ * agent/: mib_modules.c, snmp_vars.c:
+
+ - fix bug [ 1025454 ] undefined symbols in snmptrapd
+ - move include "agent_module_inits.h" include inside init_agent
+
+2004-10-08 09:29 wasmith32
+
+ * include/net-snmp/system/mingw32msvc.h:
+
+ The Linux hosted version of MinGW reports itself as mingw32msvc. This system
+ header does nothing more than define mingw32 and include mingw32.h. All changes
+ should be made in mingw32.h.
+
+2004-10-08 09:04 alex_b
+
+ * snmplib/tools.c:
+
+ netsnmp_getenv(): Move variable declaration into WIN32 IFDEF
+
+2004-10-08 09:01 alex_b
+
+ * include/net-snmp/library/tools.h, local/snmpconf,
+ snmplib/mib.c, snmplib/read_config.c,
+ snmplib/tools.c, win32/dist/README.txt,
+ win32/dist/htmlhelp/Configuration_Overview.html,
+ win32/dist/installer/net-snmp.nsi:
+
+ Add netsnmp_getenv() which is a wrapper for getenv() to add
+ basic Windows registry support.
+
+2004-10-07 19:31 slif
+
+ * include/ucd-snmp/snmp_impl.h:
+
+ include net-snmp-config.h and net-snmp/types.h
+ for improved UCD_COMPATIBLE uses (from Fedora net-snmp-5.0.6-compat.patch).
+
+2004-10-07 18:44 alex_b
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ Remove mib2c.iterate2.conf
+
+2004-10-07 17:15 alex_b
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ Re-install path fix, prompt overwrite snmp.conf
+
+2004-10-07 16:15 alex_b
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ Win32 DLL support for strtok_r
+
+2004-10-07 15:21 alex_b
+
+ * snmplib/strtok_r.c, win32/libsnmp/Makefile.in,
+ win32/libsnmp/libsnmp.dsp, win32/libsnmp_dll/Makefile.in
+, win32/libsnmp_dll/libsnmp_dll.dsp:
+
+ Win32 MSVC support for strtok_r
+
+2004-10-07 14:57 alex_b
+
+ * win32/net-snmp/: net-snmp-config.h, net-snmp-config.h.in
+:
+
+ defined NETSNMP_* defines
+
+2004-10-07 05:12 rstory
+
+ * snmplib/: Makefile.in, strtok_r.c:
+
+ add strtok_r
+
+2004-10-06 21:08 hardaker
+
+ * snmplib/snmp_parse_args.c, agent/mibgroup/ucd-snmp/proxy.c
+, include/net-snmp/library/default_store.h:
+
+ make proxy no-community support using -Cc instead of assuming you wanted it that way
+
+2004-10-06 19:22 slif
+
+ * agent/snmp_agent.c:
+
+ include temp var "i" introduced by recent ipv6 patch.
+
+2004-10-06 19:13 hardaker
+
+ * include/net-snmp/library/snmpv3.h:
+
+ rename to NETSNMP_RND. (forgot to check this file in from earlier checkin
+
+2004-10-06 17:57 hardaker
+
+ * configure, configure.in:
+
+ fix ksm patch problem pointed out by Buck Huppmann
+
+2004-10-06 17:49 slif
+
+ * include/net-snmp/library/snmpv3.h:
+
+ add missing define ENGINEID_TYPE_NETSNMP_RND 256
+
+2004-10-06 16:54 rstory
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ fix bug [ 986238 ] snmpd loops forever
+
+2004-10-06 16:01 slif
+
+ * agent/snmp_agent.c, apps/snmpstatus.c,
+ apps/snmptest.c, apps/snmptrapd_handlers.c,
+ apps/snmptrapd_log.c:
+
+ fix bug#1040429: test every f_fmtaddr call before dereferencing or freeing.
+ Catch memory leaks in snmptest, snmptrapd, and snmpstatus.
+
+2004-10-06 15:24 hardaker
+
+ * snmplib/snmpksm.c, configure, configure.in,
+ acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ Patch [ 923494 ] from Buck: improved autoconf support and heimdal support for ksm.
+
+2004-10-06 14:51 hardaker
+
+ * agent/snmp_agent.c, apps/snmptrapd.c:
+
+ Patch [ 942155 ] From Dai.H; IPv6 addr_string fix for libwrap
+
+2004-10-06 14:50 rstory
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ fix bug [ 615744 ] Spurious DISMAN-EVENT trap
+
+2004-10-06 14:45 hardaker
+
+ * agent/mibgroup/agentx/master.c:
+
+ Patch [ 1040718 ] from Ben Rogers: Agentx error propagation and infinite loop
+
+2004-10-06 14:11 rstory
+
+ * agent/snmpd.c:
+
+ restore ptr init before dereference; no idea how this has been working for the
+ last 6 months, and why it started crashing on me today.
+
+2004-10-06 13:15 rstory
+
+ * agent/mibgroup/mibII/interfaces.h:
+
+ - back out all of fix for bug 865415
+ - header_ifEntry depends on contiguous ifIndex values, and I'm not about
+ to try and fix that in this ifdef hell-hole. Those wanting non-changing
+ ifIndexes will just have to move to the mfd-rewrite.
+
+2004-10-06 13:10 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - back out all of fix for bug 865415
+ - header_ifEntry depends on contiguous ifIndex values, and I'm not about
+ to try and fix that in this ifdef hell-hole. Those wanting non-changing
+ ifIndexes will just have to move to the mfd-rewrite.
+
+2004-10-06 12:44 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - back out part of fix for bug 865415, it broke solaris & probably others
+ (not all platforms have Interface_Scan_Init,Interface_Scan_Next)
+
+2004-10-06 10:37 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ Patch #1041378 from Thomas Anders to fix the description of how engeIDs are created.
+
+2004-10-06 10:36 hardaker
+
+ * snmplib/snmpv3.c:
+
+ Fix the complaint outlined by Thomas Anders in Patch 104378 using the net-snmp enterprise number instead of the UCD one for randomly composed engineIDs
+
+2004-10-06 10:35 hardaker
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ defined NETSNMP_* defines
+
+2004-10-05 22:27 rstory
+
+ * README:
+
+ add Magnus Fromreide, Marcus Meissner, Andrew Rucker Jones, Dai.H.
+
+2004-10-05 21:51 rstory
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ apply part of patch [ 939595 ] from sun (update cache times)
+
+2004-10-05 21:37 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ - apply tiny piece of patch [ 836390 ]
+ - applied more ifname to iftype mappings
+
+2004-10-05 21:04 rstory
+
+ * agent/mibgroup/ucd-snmp/proxy.c, snmplib/snmp_parse_args.c
+:
+
+ - apply patch [ 811687 ] Proxy support ignores community string if -c option omitted
+
+2004-10-05 20:47 rstory
+
+ * agent/snmp_agent.c:
+
+ - apply patch [ 551183 ] LRU replacement for address cache
+
+2004-10-05 20:06 alex_b
+
+ * configure, configure.in:
+
+ Add missing reference for winservicerc in MinGW section
+
+2004-10-05 19:24 rstory
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - apply patch [ 996462 ] agentx fails on little endian 64bit
+
+2004-10-05 19:15 rstory
+
+ * agent/agent_registry.c:
+
+ - apply patch [ 1009799 ] AgentX Register-PDU with multiple items
+
+2004-10-05 19:02 rstory
+
+ * agent/: agent_read_config.c, snmp_vars.c:
+
+ - apply [ 1011471 ] More SCO Unixware 7 patches + inline macro problems
+ - define macro for unixware includes
+
+2004-10-05 19:01 rstory
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ remove extraneous endif
+
+2004-10-05 18:38 rstory
+
+ * configure:
+
+ update configure for new configure.in
+
+2004-10-05 17:46 rstory
+
+ * acconfig.h, configure.in:
+
+ - apply [ 1011471 ] More SCO Unixware 7 patches + inline macro problems
+ - check for nested static inline support
+
+2004-10-05 17:38 alex_b
+
+ * Makefile.top, configure, configure.in,
+ agent/Makefile.in, apps/Makefile.in,
+ snmplib/winservicerc.rc:
+
+ Apply patch 1040325 - win32 MinGW agent/trapd service Eventlog fixes
+
+2004-10-05 16:35 rstory
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ apply patch [ 1040254 ] Strengthen AGENTX OID checks
+
+2004-10-05 16:26 rstory
+
+ * testing/eval_tools.sh:
+
+ apply patch [ 1040261 ] Make it possible to select tests on agent modules
+
+2004-10-05 16:15 rstory
+
+ * configure:
+
+ update configure for new configure.in
+
+2004-10-05 16:14 rstory
+
+ * configure.in, include/net-snmp/net-snmp-config.h.in
+:
+
+ add check for strtok_r and run autoheader
+
+2004-10-05 16:13 rstory
+
+ * README:
+
+ add Geert De Peuter to contributors
+
+2004-10-05 16:12 rstory
+
+ * agent/agent_trap.c, agent/mib_modules.c,
+ agent/snmp_agent.c, agent/mibgroup/agentx/agentx_config.c
+, agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/if-mib/data_access/interface_common.c,
+ agent/mibgroup/mibII/vacm_conf.c,
+ agent/mibgroup/ucd-snmp/dlmod.c, apps/snmpvacm.c,
+ apps/snmpnetstat/winstub.c, snmplib/container.c,
+ snmplib/default_store.c, snmplib/mib.c,
+ snmplib/parse.c, snmplib/read_config.c,
+ snmplib/snmp_api.c, snmplib/snmp_debug.c,
+ snmplib/system.c:
+
+ apply patch [ 1040330 ] Getting rid of strtok
+
+2004-10-05 10:35 hardaker
+
+ * snmplib/snmpv3.c:
+
+ remove attribution comment
+
+2004-10-05 07:06 alex_b
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ Remove -C and -c register options and add note about reboot
+
+2004-10-05 00:50 slif
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ patch from jprakashbabu: move endfsent call near setfsent to avoid compile error
+
+2004-10-04 20:18 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ elminate use of TODO_find_* undefined macros
+
+2004-10-04 20:17 rstory
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+
+ put irreversible_commit setting in generated default-table-*
+
+2004-10-04 20:11 rstory
+
+ * local/mib2c-conf.d/: mfd-access-container-cached-defines.m2i
+, mfd-access-unsorted-external-defines.m2i:
+
+ elminate use of TODO_find_* undefined macros
+
+2004-10-04 15:09 alex_b
+
+ * agent/snmpd.c, apps/snmptrapd.c,
+ snmplib/winservice.c:
+
+ Rename g_szAppName to app_name to follow naming standards
+
+2004-10-04 11:54 rstory
+
+ * local/mib2c-conf.d/: generic-ctx-get.m2i, node-set.m2i
+:
+
+ - make comments more unique (help out diff)
+ - remove some extraneous comments
+
+2004-10-04 11:52 rstory
+
+ * local/mib2c-update:
+
+ use full paths instead of relative
+
+2004-10-04 11:51 rstory
+
+ * agent/mibgroup/utilities/execute.c:
+
+ add debug tokens
+
+2004-10-04 09:53 rstory
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ store permanent rows too
+
+2004-10-04 09:52 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ don't reset oper_status flags, ioctl code has already set them
+
+2004-10-04 09:49 rstory
+
+ * agent/helpers/baby_steps.c,
+ local/mib2c-conf.d/parent-set.m2i:
+
+ list all locations to update in flowchart comments
+
+2004-10-03 18:22 alex_b
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ Unregister services on uninstall, add missing mibs, mib2c and header files.
+
+2004-10-03 14:20 slif
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ from Corey Wright: fix sensor_array size limit test
+
+2004-10-03 10:19 rstory
+
+ * agent/helpers/table_data.c:
+
+ apply missed bit from previous patch
+
+2004-10-03 08:47 rstory
+
+ * agent/helpers/table_data.c,
+ include/net-snmp/agent/table_data.h:
+
+ - apply patch from Geert De Peuter [ 1022941 ] Speed up adding a row to a table
+ - (slightly modified version)
+ - test for append before linear search
+ - save rc instead of repeating function call
+
+2004-10-03 07:52 rstory
+
+ * snmplib/mib.c:
+
+ patch from Patrick Welche; check for NULL before deref
+
+2004-10-02 20:51 alex_b
+
+ * win32/dist/README.build.win32.txt:
+
+ Add step to compare compiled and installed folders to locate missing files
+
+2004-10-01 20:52 hardaker
+
+ * configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in:
+
+ Check for sysconf and times functions and sys/times.h header
+
+2004-10-01 20:51 hardaker
+
+ * snmplib/: lcd_time.c, snmpv3.c:
+
+ Proper fix it v3 enginetime wrapping problem. Fairly portable && uses times().
+
+2004-10-01 20:50 hardaker
+
+ * snmplib/system.c, include/net-snmp/library/system.h:
+
+ create a new calculate_sectime_diff function
+
+2004-10-01 20:44 hardaker
+
+ * snmplib/snmpv3.c:
+
+ set hent variable to NULL to squash bogus compiler warning
+
+2004-10-01 15:50 rstory
+
+ * agent/mibgroup/mibII/: interfaces.c, interfaces.h:
+
+ fix bug [ 865415 ] incorrect ifAdEntIfIndex field
+
+2004-10-01 08:58 alex_b
+
+ * win32/dist/README.build.win32.txt:
+
+ Simplify build steps
+
+2004-10-01 05:28 dts12
+
+ * local/mib2c.iterate.conf, local/mib2c.iterate2.conf,
+ local/mib2c.conf, NEWS:
+
+ Break the habit of a lifetime, have the courage of my convictions,
+ and push the new (fuller) iterate config in preference to the earlier
+ (relatively empty) framework.
+ [I just know I'm going to regret doing this.....]
+
+2004-09-30 20:10 wasmith32
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ Updated the service registration batch files for the Windows installer script.
+ Applied a modified patch [ 1037695 ] with edits made by Alex Burger and myself.
+ The patch also removes configuration files from the script that were not
+ being installed.
+
+2004-09-30 11:12 hardaker
+
+ * COPYING:
+
+ change 5 -> various so we stop getting it wrong
+
+2004-09-30 08:59 alex_b
+
+ * win32/build.pl:
+
+ For bug 1037524: Set path to .DLL for Perl build / test
+
+2004-09-30 05:48 dts12
+
+ * snmplib/read_config.c:
+
+ Have 'read_config_read_octet_string' take note of the
+ initial length when using existing buffers.
+
+2004-09-30 02:55 slif
+
+ * man/Makefile.in:
+
+ ignore errors for any missing MAN5G files (e.g., mib2c.conf.5)
+
+2004-09-30 02:43 slif
+
+ * testing/tests/T113agentxtrap:
+
+ add DELAY after set to allow time for trap to fire and be logged.
+
+2004-09-30 01:38 slif
+
+ * Makefile.rules:
+
+ fix "Inconsistent operator for test" which was introduced when
+ whitespace at the beginning of the line in installsubdirheaders.
+ Indent lines of rule bodies using tab only (a requirement for some "make").
+ Remove extraneous whitespace near the end of continuation lines.
+
+2004-09-29 23:18 slif
+
+ * Makefile.in:
+
+ don't try to install ucd-snmp/agent_module_config.h (no such file)
+
+2004-09-29 18:02 alex_b
+
+ * snmplib/winservice.c:
+
+ snprintf now uses sizeof(object)
+
+2004-09-29 17:35 slif
+
+ * snmplib/snmp_logging.c:
+
+ note importance of matching MessageId value for ReportEvent.
+
+2004-09-29 15:49 hardaker
+
+ * snmplib/snmpUnixDomain.c:
+
+ Patch: 1031046 white space tab damage
+
+2004-09-29 15:45 hardaker
+
+ * include/net-snmp/library/default_store.h,
+ man/snmp.conf.5.def, snmplib/snmpUDPDomain.c,
+ snmplib/snmp_api.c:
+
+ [no log message]
+
+2004-09-29 15:38 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ Patch: [ 1034156 ] Clarify OpenSSL req. in snmpd.conf.5
+
+2004-09-29 15:36 alex_b
+
+ * README.win32:
+
+ Update service registration section to mention the need for a reboot to
+ allow system environment variables to be used.
+
+2004-09-29 15:20 hardaker
+
+ * snmplib/vacm.c:
+
+ [ 1011331 ] vacm_destroyAccessEntry was double checking a value and missnig another.
+
+2004-09-29 15:01 hardaker
+
+ * FAQ, README:
+
+ remove japan mirror as the maintainer passed away
+
+2004-09-29 14:23 hardaker
+
+ * FAQ:
+
+ fix bug #IForgot to fix agentx usage on windows to use a real snmpd.conf token for socket address support
+
+2004-09-29 12:58 hardaker
+
+ * Makefile.rules:
+
+ remove non-portable (but nice goal) optimized header installation. Breaks on freebsd systems where cmp exits with status 2
+
+2004-09-29 10:34 alex_b
+
+ * agent/snmpd.c, apps/snmptrapd.c,
+ include/net-snmp/library/snmp_logging.h,
+ man/netsnmp_snmp_logging.3, snmplib/snmp_logging.c,
+ win32/libsnmp_dll/libsnmp.def:
+
+ Apply patch in bug 926389 by Mike Slifcak to fix Win32 event log logging
+ for snmptrapd and snmpd. Adds snmp_log_syslogname() function which
+ is now used by openlog().
+
+2004-09-29 07:47 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - remove xxx comments in generated code
+ - update for rename table_container functions
+
+2004-09-29 07:46 rstory
+
+ * local/mib2c-conf.d/: generic-table-indexes-set.m2i,
+ mfd-top.m2c:
+
+ remove xxx comments in generated code
+
+2004-09-29 07:29 rstory
+
+ * snmplib/parse.c:
+
+ convert missing dir error msg to debug msg
+
+2004-09-28 18:46 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2004-09-28 18:45 rstory
+
+ * configure.in, include/net-snmp/net-snmp-config.h.in
+:
+
+ - check for net/if_arp.h header
+ - run autoheader to update net-snmp-config.h.in
+
+2004-09-28 18:41 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ add vmnet to type-by-name detection
+
+2004-09-28 18:39 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_ioctl.c:
+
+ - include net/if_arp.h so arp type detection has a chance to work
+ - ifdef arphrd types that aren't common (pretty much all of them)
+ - debug msg on unknown type
+
+2004-09-28 15:24 slif
+
+ * snmplib/snmpTCPDomain.c:
+
+ use the correct htons function to assign to a NBO object.
+
+2004-09-28 13:54 rstory
+
+ * local/mib2c-conf.d/mfd-readme.m2c:
+
+ - first update in a while
+ - use create_fewer_files to determine correct file name
+ - chg index context to mib context
+ - chg table context to row request context
+ - remove assumptions about data access method
+ - add example function flow (w/source file) for various request scenarios
+
+2004-09-28 06:01 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ add debug
+
+2004-09-28 05:59 rstory
+
+ * agent/helpers/scalar_group.c:
+
+ fix length for memcpy
+
+2004-09-27 17:23 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - fix a few debug messages
+ - log error on uknown column
+ - don't put undo_(setup|cleanup) in interface code for generated structures
+ - call node undo_setup functions after row undo_setup
+
+2004-09-27 17:18 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ remove a blank line that snuck in
+
+2004-09-27 17:18 rstory
+
+ * local/mib2c-conf.d/generic-table-oids.m2c:
+
+ fix logic test (defval is a string, not a flag)
+
+2004-09-27 17:15 rstory
+
+ * agent/helpers/baby_steps.c:
+
+ skip undo_cleanup if undo_setup wasn't run
+
+2004-09-27 14:36 alex_b
+
+ * win32/dist/README.build.win32.txt:
+
+ Remove mention of fixing SYNOPSIS in snmpnetstat, snmpdelta and snmpdf
+
+2004-09-27 14:21 alex_b
+
+ * man/: snmpdelta.1, snmpdf.1, snmpnetstat.1:
+
+ Make commands in SYNOPSIS / DESCRIPTION section bold
+
+2004-09-27 12:06 rstory
+
+ * agent/helpers/table.c:
+
+ allow for finer grained debug control
+
+2004-09-27 10:44 alex_b
+
+ * snmplib/winservice.c:
+
+ Merged most WriteToEventLog and DisplayError calls into ProcessError so event, console & pop-up messages are consistent. Changed all stprintf's to snprintfs.
+
+2004-09-27 06:05 rstory
+
+ * agent/helpers/table_container.c:
+
+ fix typo
+
+2004-09-27 05:51 rstory
+
+ * agent/helpers/table_container.c:
+
+ don't modify table request data if no next column
+
+2004-09-26 13:40 rstory
+
+ * local/mib2c-conf.d/mfd-data-set.m2c:
+
+ - debug token consistency
+ - remove duplicate value map for indexes
+
+2004-09-26 13:38 rstory
+
+ * local/mib2c-conf.d/: generic-data-allocate.m2i,
+ generic-table-indexes-from-oid.m2i,
+ generic-table-indexes-set.m2i,
+ generic-table-indexes-to-oid.m2i,
+ generic-value-map-func.m2i,
+ mfd-access-container-cached-defines.m2i,
+ mfd-access-unsorted-external-defines.m2i,
+ mfd-data-access.m2c, mfd-interface.m2c, mfd-top.m2c
+, node-get.m2i, parent-dependencies.m2i,
+ parent-set.m2i:
+
+ - debug token consistency
+ - add missing debugs
+
+2004-09-26 13:30 rstory
+
+ * agent/mibgroup/tcp-mib/data_access/tcpConn.h:
+
+ fix paths
+
+2004-09-24 12:03 slif
+
+ * snmplib/snmpTCPDomain.c:
+
+ when creating address from ostring, convert port to network byte order
+
+2004-09-24 09:15 rstory
+
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c
+:
+
+ - fix commas in commented out items
+
+2004-09-24 07:54 slif
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ Linux memory buffers patch from Kaj Niemi (Fedora *hr_storage-mbuf-v2.patch)
+
+2004-09-24 07:46 slif
+
+ * agent/mibgroup/smux/smux.c:
+
+ init input/output variable sa_enterpriseoid_len (Fedora *smux-stack-var.patch)
+
+2004-09-24 07:38 rstory
+
+ * snmplib/snmpUDPDomain.c:
+
+ when creating address from ostring, convert port to network byte order
+
+2004-09-24 06:18 slif
+
+ * include/net-snmp/library/default_store.h,
+ snmplib/snmpksm.c:
+
+ patch 923511 adds support for non-host service principal for ksm
+
+2004-09-24 05:50 slif
+
+ * configure.in, configure:
+
+ patch 1010395 remove duplicate checks for snprintf and strtoul
+ patch 1009712 check for gethostbyname in -lsocket for Unixware
+
+2004-09-24 05:30 slif
+
+ * configure.in, configure:
+
+ patch 1032602 supports Linux cross compiler for Windows (target mingw32msvc).
+
+2004-09-23 16:15 slif
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c,
+ mibs/LM-SENSORS-MIB.txt:
+
+ undo patch #1027522 as it violates RFC 1902 section 10.2
+ when the MIB objects were changed.
+
+2004-09-23 14:57 hardaker
+
+ * include/net-snmp/library/scapi.h, snmplib/scapi.c:
+
+ new function to return the required length of a privacy key
+
+2004-09-23 13:24 rstory
+
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.c
+:
+
+ - remove unused variable
+ - fix function call
+ - fix renamed var missed in merge
+
+2004-09-23 09:18 slif
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c,
+ mibs/LM-SENSORS-MIB.txt:
+
+ apply patch #1027522 to permit reporting negative sensor values
+
+2004-09-23 09:08 slif
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ apply modified patch #1027521 to fix problems with sensor categories (types).
+
+2004-09-23 08:58 slif
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ apply part of patch #960269 to release memory returned from sensor_get_label
+
+2004-09-22 17:51 slif
+
+ * win32/dist/htmlhelp/: snmp.conf.win32.html,
+ snmpd.conf.win32.html, snmptrapd.conf.win32.html:
+
+ patch 1033052 from Alex Burger: Win32: Updated htmlhelp files for *.conf
+
+2004-09-22 11:20 slif
+
+ * agent/snmpd.c, apps/snmptrapd.c,
+ include/net-snmp/library/winservice.h, snmplib/winservice.c
+:
+
+ apply patch #1030913 to suppress windows popups for service reg/unreg errors.
+ errors are printed to stderr if -quiet parameter is supplied.
+
+2004-09-22 11:06 slif
+
+ * win32/dist/: README.build.win32.txt,
+ htmlhelp/Introduction.html:
+
+ apply patch#103900 so that intro more closely matches current web site home page.
+ also adjust build instructions to remove example and demo MIBs from build.
+
+2004-09-22 11:01 slif
+
+ * perl/SNMP/SNMP.xs:
+
+ apply patch#1028976 check values for label, iid before dereference.
+ Fixes perl module fault, async callback. See RedHat bug #111319
+
+2004-09-22 09:36 hardaker
+
+ * man/snmpusm.1.def:
+
+ patch from Abhijit Hayatnagarkar to support key changing for localized-only keys
+
+2004-09-22 07:06 slif
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ patch 1028927 from Andy Smith fixes bug 972797; registering win32
+ snmpd/snmptrapd services includes paths to config file and to log file.
+
+2004-09-22 07:06 rstory
+
+ * agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/:
+ usmDHUserKeyTable.c, usmDHUserKeyTable.h,
+ usmDHUserKeyTable_data_access.c,
+ usmDHUserKeyTable_data_access.h,
+ usmDHUserKeyTable_data_get.c, usmDHUserKeyTable_data_get.h
+, usmDHUserKeyTable_data_set.c,
+ usmDHUserKeyTable_data_set.h, usmDHUserKeyTable_interface.c
+:
+
+ update for generated code
+
+2004-09-21 19:51 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/: ipAddressTable.c,
+ ipAddressTable.h, ipAddressTable_constants.h,
+ ipAddressTable_data_access.c, ipAddressTable_data_access.h
+, ipAddressTable_interface.c,
+ ipAddressTable_interface.h:
+
+ update for generated code
+
+2004-09-21 19:32 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ don't generate macros that are in mfd.h
+
+2004-09-21 19:31 rstory
+
+ * local/mib2c-conf.d/parent-dependencies.m2i:
+
+ fix typo
+
+2004-09-21 19:30 rstory
+
+ * local/mib2c-conf.d/syntax-RowStatus-dependencies.m2i:
+
+ only generate row creation check if m2c_table_row_creation set
+
+2004-09-21 19:29 rstory
+
+ * local/mib2c-conf.d/generic-table-oids.m2c:
+
+ - set up macro w/required columns for row creation
+
+2004-09-21 16:48 rstory
+
+ * local/mib2c.column_storage.conf:
+
+ storage for table indexes and columns
+
+2004-09-21 16:32 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - move row_merge after table_container in handler chain
+
+2004-09-21 16:30 rstory
+
+ * local/mib2c-update:
+
+ - increase context for diff
+ - increase fuzz for patch
+
+2004-09-21 16:28 rstory
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ - allocate tag storage earlier, with space for null termination
+ - alloc space for null termination of name
+ - return error if allocations fail
+
+2004-09-21 16:25 rstory
+
+ * agent/helpers/table_container.c:
+
+ set endofmibview when getnext goes beyond last item in table
+
+2004-09-21 16:23 rstory
+
+ * agent/helpers/row_merge.c:
+
+ mark processed requests as DONE so they aren't merged
+
+2004-09-21 14:59 rstory
+
+ * snmplib/callback.c:
+
+ ifdef/comment some debug assert code that gets hit in rare cases
+
+2004-09-21 12:56 hardaker
+
+ * apps/snmpusm.c:
+
+ patch from Abhijit Hayatnagarkar to support key changing for localized-only keys
+
+2004-09-21 06:55 hardaker
+
+ * apps/snmpusm.c:
+
+ Patch from Abhijit Hayatna to fix DH key lengths
+
+2004-09-21 06:43 hardaker
+
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_get.c
+:
+
+ check a few pointers before using them
+
+2004-09-17 01:22 nba
+
+ * configure, configure.in,
+ agent/mibgroup/host/hr_swinst.c,
+ include/net-snmp/net-snmp-config.h.in:
+
+ Check for and include rpm/rpmdb.h
+
+2004-09-17 01:04 nba
+
+ * agent/mibgroup/agent/extend.c:
+
+ This was not always an unused variable
+
+2004-09-17 00:58 nba
+
+ * apps/snmpusm.c:
+
+ Fix OpenSSL chech to work on 64-bit Solaris compile with 32-bit OpenSSL
+ installed ...
+
+2004-09-16 10:34 rstory
+
+ * local/Makefile.in:
+
+ install mib2c.column_storage.conf
+
+2004-09-16 10:34 rstory
+
+ * snmplib/snmp_client.c:
+
+ - don't free NULL pointer
+ - upcase first word in sentence
+ - expand more on noCreation explanitory message
+ - add explanitory message for inconsistentName
+
+2004-09-16 10:27 rstory
+
+ * snmplib/parse.c:
+
+ log error message if a MIB directory cannot be opened
+
+2004-09-16 08:31 rstory
+
+ * agent/mibgroup/tcp-mib.h,
+ agent/mibgroup/tcp-mib/tcpConnTable.h,
+ agent/mibgroup/tcp-mib/data_access/.cvsignore,
+ agent/mibgroup/tcp-mib/data_access/Makefile,
+ agent/mibgroup/tcp-mib/data_access/tcpConn.h,
+ agent/mibgroup/tcp-mib/data_access/tcpConn_common.c,
+ agent/mibgroup/tcp-mib/data_access/tcpConn_linux.c,
+ include/net-snmp/data_access/tcpConn.h:
+
+ data access for tcp-mib tcp connections (ipv4 only)
+
+2004-09-16 08:18 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ - remove unused vars
+ - create default-node-${node}.m2d w/current values, iff doesn't exist
+
+2004-09-16 08:17 rstory
+
+ * local/mib2c-conf.d/syntax-RowStatus-get.m2i:
+
+ don't generate mapping code if skip mapping set
+
+2004-09-15 17:22 slif
+
+ * Makefile.in:
+
+ install freebsd5/6 headers
+
+2004-09-15 15:57 hardaker
+
+ * snmplib/snmpusm.c:
+
+ Fix an opps. Delete the usm state ref before the handling of reports since it didn't need it before
+
+2004-09-15 09:57 hardaker
+
+ * include/net-snmp/library/snmp_secmod.h:
+
+ make the HandleReport callback take a transport pointer
+
+2004-09-15 09:55 hardaker
+
+ * snmplib/snmpusm.c:
+
+ Make the usm module handle its own reprots
+
+2004-09-15 09:54 hardaker
+
+ * snmplib/snmp_api.c:
+
+ don't free the state reference till after the handle_report_pdu callback is called. Also pass in the transport to the same hook.
+
+2004-09-15 09:19 rstory
+
+ * Makefile.in:
+
+ install darwin7 header
+
+2004-09-15 07:26 rstory
+
+ * local/mib2c-conf.d/syntax-RowStatus-dependencies.m2i:
+
+ - check column_set_flags to see if rowstatus set
+ - only check transition if set
+ - check required rows on createAndGo
+ - don't allow destroy if other columns set
+ - don't allow creation if rowstatus not set
+
+2004-09-15 07:21 rstory
+
+ * local/mib2c-conf.d/: parent-dependencies.m2i,
+ parent-set.m2i:
+
+ - rename set_flags
+ - add comment about row created flag in rowreq_flags
+
+2004-09-15 07:20 rstory
+
+ * local/mib2c-conf.d/node-set.m2i:
+
+ comment grammar tweak
+
+2004-09-15 07:19 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ - add rowreq_flags
+ - rename set_flags to column_set_flags
+ - use context name for example user context data list
+
+2004-09-15 07:17 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - use new macro to validate SNMP error codes
+ - use new rowreq_flags to set/clear new row flag
+ - set request error on invalid oid for new row
+ - clear undo pointer after releasing it
+ - set WRONGLENGTH for bad variable size
+
+2004-09-15 07:14 rstory
+
+ * snmplib/snmp_alarm.c:
+
+ add include to quiet compiler
+
+2004-09-15 07:13 rstory
+
+ * include/net-snmp/library/snmp_enum.h:
+
+ - add prototype for se_find_slist
+ - tweak comment
+
+2004-09-15 07:12 rstory
+
+ * include/net-snmp/library/snmp.h:
+
+ new macro to validate SNMP error codes
+
+2004-09-15 07:11 rstory
+
+ * include/net-snmp/agent/mfd.h:
+
+ - define flags for rowreq_flags
+
+2004-09-15 07:11 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/: ipAddressTable.c,
+ ipAddressTable.h, ipAddressTable_constants.h,
+ ipAddressTable_data_access.c, ipAddressTable_interface.c
+:
+
+ - update generated code
+ - rename arch functions
+ - move storage type into data access interface
+ - add/use undo storage for LastChanged
+ - add support for creation/deletion of ipaddresses via RowStatus
+ - add flags for required columns
+
+2004-09-15 06:59 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - rename arch functions
+
+2004-09-15 06:58 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ - rename arch functions
+ - tweak log message, comments
+
+2004-09-15 06:58 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_common.c,
+ agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c,
+ agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.h,
+ agent/mibgroup/ip-mib/data_access/ipaddress_linux.c,
+ include/net-snmp/data_access/ipaddress.h:
+
+ - rename arch functions
+ - remove arch flags, add data list for arch data
+ - add & call arch functions on create, copy, delete ipaddress entry
+ - add prototype to fix compiler warning
+ - new ipaddress set (create/delete ip address aliases)
+ - change macro name
+ - add flag for aliases
+
+2004-09-15 06:51 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c,
+ include/net-snmp/data_access/interface.h:
+
+ - rename arch functions
+ - add prototype to fix compiler warning
+ - new function to find interface name from ifIndex
+
+2004-09-14 15:01 hardaker
+
+ * include/net-snmp/library/snmp_secmod.h, snmplib/snmp_api.c
+:
+
+ Update to modularize a bit more the security model infrastructure: report handling outsourced to the secmod
+
+2004-09-13 19:29 rstory
+
+ * agent/mibgroup/util_funcs.h,
+ agent/mibgroup/if-mib/data_access/interface_ioctl.h,
+ agent/mibgroup/if-mib/ifTable/ifTable.h,
+ agent/mibgroup/if-mib/ifTable/ifTable_constants.h,
+ agent/mibgroup/if-mib/ifTable/ifTable_data_access.h,
+ agent/mibgroup/if-mib/ifTable/ifTable_interface.h,
+ agent/mibgroup/if-mib/ifXTable/ifXTable.h,
+ agent/mibgroup/if-mib/ifXTable/ifXTable_constants.h,
+ agent/mibgroup/if-mib/ifXTable/ifXTable_data_access.h,
+ agent/mibgroup/if-mib/ifXTable/ifXTable_interface.h,
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+,
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_constants.h
+,
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.h
+,
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h
+,
+ agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+,
+ agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_constants.h
+,
+ agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.h
+,
+ agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.h
+,
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+,
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h
+,
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h
+,
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h
+, agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+,
+ agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h
+,
+ agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.h
+,
+ agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.h
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.h
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_access.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_get.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_enums.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_interface.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_oids.h
+, include/net-snmp/types.h,
+ include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/agent_registry.h,
+ include/net-snmp/agent/baby_steps.h,
+ include/net-snmp/agent/cache_handler.h,
+ include/net-snmp/agent/instance.h,
+ include/net-snmp/agent/row_merge.h,
+ include/net-snmp/agent/scalar.h,
+ include/net-snmp/agent/scalar_group.h,
+ include/net-snmp/agent/serialize.h,
+ include/net-snmp/agent/table.h,
+ include/net-snmp/agent/table_array.h,
+ include/net-snmp/agent/table_container.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/agent/table_iterator.h,
+ include/net-snmp/agent/watcher.h,
+ include/net-snmp/data_access/arp.h,
+ include/net-snmp/data_access/interface.h,
+ include/net-snmp/data_access/ipaddress.h,
+ include/net-snmp/data_access/ipstats.h,
+ include/net-snmp/data_access/route.h,
+ include/net-snmp/data_access/systemstats.h,
+ include/net-snmp/library/container.h,
+ include/net-snmp/library/container_iterator.h,
+ include/net-snmp/library/container_list_ssll.h,
+ include/net-snmp/library/container_null.h,
+ include/net-snmp/library/factory.h,
+ local/mib2c.array-user.conf,
+ local/mib2c-conf.d/generic-header-bottom.m2i,
+ snmplib/mt_support.c:
+
+ - patch from Magnus Fromreide to remove ';' from extern 'C' header contructs
+ (allow g++ 3.4 and above to compile net-snmp)
+
+2004-09-13 03:34 slif
+
+ * testing/: eval_tools.sh, tests/Sv3config:
+
+ when matching CPP defines, match the ones which begin the source header line.
+
+2004-09-13 03:20 slif
+
+ * README.win32, win32/dist/README.build.win32.txt,
+ win32/dist/README.txt, win32/dist/htmlhelp/Net-SNMP.hhc
+, win32/dist/htmlhelp/Net-SNMP.hhp,
+ win32/dist/scripts/poddir2html,
+ win32/dist/scripts/readme2html:
+
+ apply patch #102669 Win32 5.2 build updates`
+
+2004-09-12 22:23 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_common.c:
+
+ - include ipAddressTable_constants
+ - initialize defaults per the mib
+
+2004-09-12 22:20 rstory
+
+ * include/net-snmp/data_access/ipaddress.h:
+
+ - change comment
+ - add storage type
+ - define flags for set support
+
+2004-09-12 22:18 rstory
+
+ * agent/helpers/table_container.c:
+
+ fix data lookup when there are multiple varbinds
+
+2004-09-12 22:18 rstory
+
+ * agent/helpers/baby_steps.c,
+ include/net-snmp/agent/snmp_agent.h:
+
+ - fix skipping of un-registered modes
+ - remove request next_mode stuff (never used)
+ - shorten mux debug token
+
+2004-09-10 15:51 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.c
+:
+
+ don't mask return codes in internal functions
+
+2004-09-10 15:11 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.h:
+
+ add undo storage for rowstatus and storage type
+
+2004-09-10 14:47 rstory
+
+ * agent/helpers/baby_steps.c,
+ include/net-snmp/agent/baby_steps.h:
+
+ - new function netsnmp_baby_step_mode2flag
+ - use new function, so skipping unregistered modes works
+
+2004-09-10 14:42 rstory
+
+ * local/mib2c-conf.d/parent-dependencies.m2i:
+
+ - use mfd succe macro instead of snmp macro
+ - if check returns an error, return immediately
+
+2004-09-10 14:39 rstory
+
+ * local/mib2c-conf.d/syntax-StorageType-dependencies.m2i:
+
+ use correct function name
+
+2004-09-10 13:01 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.c
+:
+
+ - update generated code
+ - add define to allow row-creation
+
+2004-09-10 12:58 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/: ipAddressTable.c,
+ ipAddressTable.h, ipAddressTable_data_access.c,
+ ipAddressTable_data_access.h:
+
+ update generated code
+
+2004-09-10 05:30 dts12
+
+ * local/mib2c:
+
+ Check that a variable corresponds to a valid MIB object,
+ before trying to look at characteristics of this object.
+ (Fixes a problem with the MFD scripts, which use the mib2c
+ variable expansions for non-MIB-object names as well).
+
+2004-09-09 16:17 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - fix log msg typo
+ - set request errors instead of returning error from handler
+ - debug msgs for request errors
+
+2004-09-09 16:15 rstory
+
+ * local/mib2c-conf.d/node-varbind-validate.m2i:
+
+ add missing quote
+
+2004-09-09 09:17 dts12
+
+ * NEWS:
+
+ Mention new NET-SNMP-EXTEND-MIB support
+ (plus minor grammar and formatting tweaks)
+
+2004-09-09 07:01 slif
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ apply patch #1024352 Changes Windows installer to allow snmptrapd as service.
+
+2004-09-09 06:49 slif
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ formatting patch #1024746 (one-liner) from Alex Burger.
+
+2004-09-09 03:43 slif
+
+ * agent/agent_read_config.c, agent/helpers/old_api.c,
+ agent/helpers/table.c, agent/helpers/table_data.c,
+ agent/mibgroup/agent/extend.c, snmplib/container.c,
+ snmplib/container_list_ssll.c:
+
+ fix bug#1025014 - remove unuseds, quell signed/unsigned warnings in 5.2.pre1
+
+2004-09-09 03:31 slif
+
+ * apps/snmptrapd.c:
+
+ declare external function within scope used.
+
+2004-09-09 03:22 slif
+
+ * agent/snmpd.c, apps/snmptrapd.c:
+
+ fix bug#1025004 apply minor comment and grammar fixes to snmpd,snmptrapd
+
+2004-09-08 20:52 slif
+
+ * snmplib/snmp_logging.c:
+
+ partial fix bug #909222 - move win32 changes inside _disable_syslog{entry},
+ dont write standard error on failure to close event log from disable_syslog.
+
+2004-09-08 18:43 slif
+
+ * win32/: agent_module_dot_conf.h, agent_module_includes.h
+, agent_module_inits.h, build.pl,
+ mib_module_includes.h, mib_module_inits.h,
+ mib_module_shutdown.h, libsnmp_dll/libsnmp.def,
+ net-snmp/net-snmp-config.h, net-snmp/net-snmp-config.h.in
+, net-snmp/agent/agent_module_config.h,
+ net-snmp/agent/mib_module_config.h, netsnmpmibs/Makefile.in
+, netsnmpmibs/netsnmpmibs.dsp,
+ netsnmpmibssdk/Makefile.in,
+ netsnmpmibssdk/netsnmpmibssdk.dsp:
+
+ Apply mods in patch #1024810 in order to build 5.2.pre1 on win32 MSVC+MinGW.
+
+2004-09-08 08:39 rstory
+
+ * include/net-snmp/agent/baby_steps.h:
+
+ fix backwards compatability macro name
+
+2004-09-07 20:48 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c:
+
+ map data access if address type to mib type in index
+
+2004-09-07 20:46 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c
+:
+
+ pass correct container to update check functionso missing addrs are removed
+
+2004-09-07 20:42 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ null rowreq_ctx is valid in undo_cleanup; simply return success
+
+2004-09-07 20:39 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c:
+
+ - fix ifIndex lookup for interface aliases
+ - add debug message
+ - new function to set ipaddress
+
+2004-09-07 20:35 rstory
+
+ * agent/agent_handler.c:
+
+ add se pairs for baby step modes
+
+2004-09-07 20:32 rstory
+
+ * agent/helpers/baby_steps.c:
+
+ - keep registered modes with mib handler
+ - skip lower handlers for modes that handler didnt register for
+ - skip undo commit if handler wasnt called for commit
+ - dont break on request error in final steps (equivalent of commit/undo/free)
+ - more debug msgs
+
+2004-09-07 20:25 rstory
+
+ * include/net-snmp/agent/baby_steps.h:
+
+ - sync names of BABY_STEP_* with MODE_BSTEP_*
+ - define structure for baby steps handler mode tracking
+
+2004-09-07 20:19 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ add debug msg
+
+2004-09-06 20:21 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ - add persistence for ifAlias, ifLinkUpDownTrapEnable
+ - don't allow set of promiscuous mode, since it's not implemented
+
+2004-09-06 19:28 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c:
+
+ - fix fixed size check
+ - add access to container pointer
+
+2004-09-06 19:25 rstory
+
+ * local/mib2c-conf.d/node-varbind-validate.m2i:
+
+ don't generate fixed size check for octet strings
+
+2004-09-06 19:00 rstory
+
+ * local/mib2c-conf.d/node-set.m2i:
+
+ set up vars for lengths to be copied correctly
+
+2004-09-05 18:57 rstory
+
+ * agent/mibgroup/agentx/subagent.h:
+
+ remove extern of non-existant var
+
+2004-09-02 07:22 slif
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c:
+
+ dont include byteorder.h -- avoids warning seen on RedHat
+
+2004-09-02 06:58 dts12
+
+ * NEWS:
+
+ Mention the other new mib2c config templates, and provide a little
+ more explanation. (Plus fixing a couple of typos)
+
+2004-09-02 06:52 slif
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ fix #995489 by obtaining sysDescr and sysContact through windows native methods.
+
+2004-09-02 00:59 rstory
+
+ * agent/mibgroup/mibII/interfaces.h:
+
+ - require all if-mib interface for linux
+
+2004-09-02 00:04 rstory
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.2.pre1 )
+
+2004-09-02 00:04 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.2.pre1 )
+
+2004-09-02 00:03 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.2.pre1 )
+
+2004-09-02 00:03 rstory
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.2.pre1 )
+
+2004-09-02 00:03 rstory
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.2.pre1 )
+
+2004-09-02 00:02 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.2.pre1 )
+
+2004-09-02 00:02 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.2.pre1 )
+
+2004-09-02 00:02 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.2.pre1 )
+
+2004-09-02 00:01 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.2.pre1 )
+
+2004-09-02 00:01 rstory
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.2.pre1 )
+
+2004-09-02 00:00 rstory
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.2.pre1 )
+
+2004-09-02 00:00 rstory
+
+ * README:
+
+ - (README): version tag ( 5.2.pre1 )
+
+2004-09-02 00:00 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.2.pre1 )
+
+2004-09-01 23:55 rstory
+
+ * agent/mibgroup/mibII.h:
+
+ require explicit configure flag for experimental mfd rewrite modules
+
+2004-09-01 23:51 rstory
+
+ * NEWS:
+
+ - merge 5.1.2 news
+ - add other tidbits gleaned from Changelog
+
+2004-09-01 23:51 rstory
+
+ * ChangeLog:
+
+ update for 5.2.pre1
+
+2004-09-01 22:57 rstory
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3,
+ netsnmp_baby_steps.3, netsnmp_bulk_to_next.3,
+ netsnmp_cache_handler.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_handler.3, netsnmp_instance.3,
+ netsnmp_iterator_info_s.3, netsnmp_leaf.3,
+ netsnmp_library.3, netsnmp_mib_utilities.3,
+ netsnmp_mode_end_call.3, netsnmp_multiplexer.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_methods.3, netsnmp_oid_stash.3
+, netsnmp_old_api.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_stash_cache.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_util.3, netsnmp_utilities.3,
+ netsnmp_watcher.3:
+
+ update man pages
+
+2004-09-01 22:51 rstory
+
+ * man/: netsnmp_netsnmp_mib_handler_access_methods.3,
+ netsnmp_table_container.3, netsnmp_agent_registry.3,
+ netsnmp_agent_trap.3, netsnmp_asn1_packet_parse.3,
+ netsnmp_callback.3, netsnmp_default_store.3,
+ netsnmp_netsnmp_agent_request_info_s.3,
+ netsnmp_netsnmp_column_info_t.3,
+ netsnmp_netsnmp_data_list_s.3,
+ netsnmp_netsnmp_handler_registration_s.3,
+ netsnmp_netsnmp_mib_handler_s.3,
+ netsnmp_netsnmp_request_info_s.3,
+ netsnmp_netsnmp_table_registration_info_s.3,
+ netsnmp_netsnmp_table_request_info_s.3,
+ netsnmp_read_config.3, netsnmp_snmp_agent.3,
+ netsnmp_snmp_alarm.3, netsnmp_snmp_client.3,
+ netsnmp_snmp_logging.3, netsnmp_snmp_pdu.3,
+ netsnmp_snmp_session.3, netsnmp_variable_list.3:
+
+ check in new man pages
+
+2004-09-01 22:37 rstory
+
+ * agent/Makefile.depend, agent/mibgroup/Makefile.depend
+, snmplib/Makefile.depend,
+ agent/helpers/Makefile.depend, apps/Makefile.depend
+, apps/snmpnetstat/Makefile.depend:
+
+ make depend
+
+2004-09-01 22:16 rstory
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ update after running autoheader
+
+2004-09-01 22:14 rstory
+
+ * doxygen.conf:
+
+ - update for 5.2.pre1
+
+2004-09-01 22:12 rstory
+
+ * agent/mibgroup/: if-mib/data_access/interface_common.c,
+ if-mib/data_access/interface_linux.c,
+ if-mib/ifTable/ifTable.h, if-mib/ifXTable/ifXTable.h
+, ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.c
+, ip-mib/data_access/arp_linux.c,
+ ip-mib/data_access/ipaddress_common.c,
+ ip-mib/data_access/ipaddress_linux.c,
+ ip-mib/data_access/systemstats_common.c,
+ ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c:
+
+ - convert C++ style comments to C style comments (or remove them)
+
+2004-09-01 22:05 rstory
+
+ * README.osX:
+
+ readme for Mac OS X
+
+2004-09-01 22:04 rstory
+
+ * configure:
+
+ update configure for new configure.in
+
+2004-09-01 22:03 rstory
+
+ * configure.in:
+
+ update version to 5.2.pre1
+
+2004-09-01 21:28 rstory
+
+ * agent/mibgroup/disman/: expression/gnuc.h, expression/in6.h
+, expression/ip_var.h, expression/ipv6.h,
+ expression/udp_var.h, ping/gnuc.h, ping/in6.h,
+ ping/ip_var.h, ping/ipv6.h, ping/udp_var.h,
+ traceroute/gnuc.h, traceroute/in6.h,
+ traceroute/ip_var.h, traceroute/ipv6.h,
+ traceroute/udp_var.h, nslookup/gnuc.h, nslookup/in6.h
+, nslookup/ip_var.h, nslookup/ipv6.h,
+ nslookup/udp_var.h:
+
+ remove GPL license code, plus some guilty-by-association files
+
+2004-09-01 20:14 rstory
+
+ * configure:
+
+ configure to match new configure.in
+
+2004-09-01 20:13 rstory
+
+ * configure.in:
+
+ openbsd needs sys/types before tcpd.h
+
+2004-09-01 19:33 rstory
+
+ * agent/mibgroup/ip-mib/data_access/systemstats_linux.c:
+
+ tweak comment and log message format
+
+2004-09-01 19:32 rstory
+
+ * snmplib/snmpUDPDomain.c:
+
+ - whitespace change to add real log message (last checking had wrong log message)
+ - add port number to debug statement
+
+2004-09-01 19:28 rstory
+
+ * snmplib/snmpUDPDomain.c,
+ agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ - increase max_sensors
+ - break when number of sensors exceeds max_sensors
+ - add debug
+
+2004-09-01 19:25 rstory
+
+ * configure:
+
+ configure to match configure.in
+
+2004-09-01 19:24 rstory
+
+ * configure.in:
+
+ bail if lm_sensors header/lib checks fail
+
+2004-09-01 17:16 rstory
+
+ * agent/helpers/scalar_group.c:
+
+ - don't return handler if can't allocate sgroup
+ - use local var for rootoid machinations, instead of reginfo rootoid
+ (realloc of extra suboids doesn't survive registration, when subtree_split
+ calls netsnmp_subtree_deepcopy()) [score one for libefence]
+
+2004-09-01 17:09 rstory
+
+ * agent/mibgroup/mibII/interfaces.h:
+
+ only config_require if-mib interface_common, not all of if-mib interface
+
+2004-09-01 17:08 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route.h:
+
+ remove config_require for platforms which haven't been ported yet
+
+2004-09-01 17:06 rstory
+
+ * agent/mibgroup/if-mib/data_access/: interface.h,
+ interface_common.c:
+
+ ifdef out arch specific functions if arch not supported
+
+2004-09-01 17:03 rstory
+
+ * agent/mibgroup/mibII.h:
+
+ only require new mfd modules for linux, until other platforms are ported
+
+2004-09-01 15:27 slif
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c:
+
+ include asm/types.h so that agent will build on Mandrake flavored Linux.
+
+2004-09-01 14:51 rstory
+
+ * snmplib/callback.c:
+
+ - remove C++ style comment
+ - document use of simplistic _lock
+
+2004-09-01 14:30 slif
+
+ * include/net-snmp/system/freebsd6.h:
+
+ provide header for FreeBSD 6. fixes bug#1018209
+
+2004-09-01 14:12 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c:
+
+ - only log open err once (until success, then reset flag)
+
+2004-09-01 14:07 rstory
+
+ * agent/mibgroup/:
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.c
+,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.c
+,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.c
+:
+
+ check for NULL pointer from data access routines, & return resource unavailable
+
+2004-09-01 11:31 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_linux.c:
+
+ - only log file open error once (until a successful open)
+ - return no error if couldn't open ipv6, so we can continue w/ipv4
+
+2004-09-01 10:46 rstory
+
+ * agent/agent_registry.c:
+
+ - eliminate double free on duplicate registration
+ - fix potential memory leaks on failed registration
+ (i.e. always free reginfo if registration fails)
+
+2004-09-01 10:44 rstory
+
+ * agent/helpers/old_api.c:
+
+ eliminate double free on duplicate registration
+
+2004-09-01 08:25 dts12
+
+ * acconfig.h, configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/types.h:
+
+ Attempt to ensure that 'int32_t' and (if appropriate) 'int64_t'
+ types (plus unsigned equivalents) are available.
+
+2004-09-01 06:19 dts12
+
+ * local/mib2c.array-user.conf:
+
+ Remove unbalanced "@end@" statements.
+
+2004-09-01 05:57 dts12
+
+ * local/mib2c.conf:
+
+ Provide additional options for table config templates, and
+ describe the differences between them a little more fully.
+
+2004-09-01 05:54 dts12
+
+ * local/mib2c.iterate2.conf:
+
+ Fix minor typo
+
+2004-08-31 21:36 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ - update libtool version information
+ - add note on running cvs2cl on a branch
+
+2004-08-31 21:26 rstory
+
+ * man/mib2c.1.def, local/mib2c.conf:
+
+ add information about mib2c.mfd.conf
+
+2004-08-31 20:04 rstory
+
+ * Makefile.top:
+
+ - update comments on libtool versioning
+ - update for 5.2
+
+2004-08-31 16:43 slif
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ fix float calc in var_extensible_disk per Harald Straßberger <hs@syslog.at>
+
+2004-08-31 14:02 hardaker
+
+ * agent/Makefile.in:
+
+ install agent_module_config.h
+
+2004-08-31 03:28 dts12
+
+ * local/mib2c.array-user.conf:
+
+ Declare handlers as RWRITE/RONLY as appropriate.
+ Suppress SET handling code for read-only tables.
+
+2004-08-31 03:25 dts12
+
+ * local/: snmpconf, mib2c-conf.d/details-node.m2i,
+ mib2c-conf.d/details-table.m2i,
+ mib2c-conf.d/generic-value-map-func.m2i,
+ mib2c-conf.d/mfd-access-unsorted-external-defines.m2i,
+ mib2c-conf.d/mfd-readme.m2c:
+
+ Dave's being pernickity about grammar again.
+ "It's" is short for "it is".
+ "Belonging to it" is "its" - no apostrophe.
+
+2004-08-31 03:23 dts12
+
+ * local/mib2c.iterate_access.conf:
+
+ Improve error handling for invalid SET requests.
+
+2004-08-31 03:20 dts12
+
+ * local/mib2c.iterate_access.conf:
+
+ Suppress SET handling code for read-only tables.
+
+2004-08-31 03:18 dts12
+
+ * local/: mib2c.iterate.conf, mib2c.iterate_access.conf
+:
+
+ Oops! mib2c config typo
+
+2004-08-31 03:16 dts12
+
+ * local/: mib2c.iterate.conf, mib2c.iterate_access.conf
+:
+
+ Declare handlers as RWRITE/RONLY as appropriate.
+
+2004-08-31 03:11 dts12
+
+ * local/mib2c.iterate2.conf:
+
+ Alternative iterator template. Based on a single handler (unlike
+ 'iterator_access'), but somewhat more complete than the original,
+ particularly w.r.t. SET handling.
+
+2004-08-31 03:09 dts12
+
+ * local/: mib2c.container.conf, mib2c.table_data.conf:
+
+ Improve the example data structure definition (esp. w.r.t. index values)
+
+2004-08-31 00:37 rstory
+
+ * include/net-snmp/agent/agent_handler.h:
+
+ new struct typedef, netsnmp_handler_args
+
+2004-08-31 00:36 rstory
+
+ * agent/helpers/cache_handler.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ - add new void pointer for cache hint
+ - define new flag for handler args cache hint
+ - pass handler args cache hint when flag set
+
+2004-08-28 15:54 rstory
+
+ * agent/mibgroup/mibII/interfaces.h:
+
+ config_require mibII/var_route (USE_SYSCTL_IF needs get_address)
+
+2004-08-28 12:38 rstory
+
+ * agent/agent_handler.c:
+
+ - netsnmp_assert on self-reference in linked list
+
+2004-08-28 12:33 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c
+:
+
+ - add comments
+
+2004-08-28 12:31 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface.h:
+
+ - comment out config_require macros for unwritten modules
+
+2004-08-28 12:28 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ - document scanline format
+
+2004-08-28 12:25 rstory
+
+ * snmplib/container_iterator.c:
+
+ - remove extraneous ';'
+ (issue noted in bug/patch 1011471 More SCO Unixware 7 patches)
+
+2004-08-28 12:17 rstory
+
+ * agent/helpers/table_container.c,
+ include/net-snmp/agent/table_container.h,
+ include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ - inline fixes from Stephen J. Friedl, plus a few I found
+ (issues noted in bug/patch 1011471 More SCO Unixware 7 patches)
+
+2004-08-28 12:10 rstory
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ update for new acconfig.h
+
+2004-08-28 12:08 rstory
+
+ * acconfig.h:
+
+ - only define inline macros if enabled
+ (issue noted in bug 1011471 More SCO Unixware 7 patches)
+
+2004-08-27 23:27 rstory
+
+ * agent/snmp_agent.c:
+
+ - fix 1/2 of bug 702435: memory leak [...] for agentx subagents
+ - Patch supplied by Franz G. Fischer
+
+2004-08-27 23:24 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - remove unused var and prototypes
+ - add comment documenting scan line format
+
+2004-08-27 23:22 rstory
+
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.c
+:
+
+ - omit routes that are down
+ - hardcode active row status for newly discovered routes
+
+2004-08-27 23:19 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_linux.c:
+
+ - tweak log messages syntax
+ - fix ipv4 mask calculation
+ - implement ipv6 routes
+ - common function to set route type from flags
+ - set policy oid based on arbitrary index
+
+2004-08-27 23:16 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_common.c:
+
+ dont free policy oid if static flag set
+
+2004-08-27 23:15 rstory
+
+ * include/net-snmp/data_access/route.h:
+
+ - add flag for static policy oid
+ - change internal index type to oid
+
+2004-08-27 07:29 dts12
+
+ * agent/agent_read_config.c, snmplib/read_config.c,
+ agent/mibgroup/agentx/agentx_config.c:
+
+ Try a different approach to multi-type config handling.
+ Don't automatically register config tokens against multiple types.
+ Instead, explicitly register AgentX-related config tokens as such.
+ (The config mechanism will already automatically load any config
+ file types that it knows about).
+
+2004-08-27 03:15 dts12
+
+ * agent/snmp_agent.c:
+
+ Use a consistent "hosts.{allow,deny}" token for known and unknown addresses.
+
+2004-08-27 03:14 dts12
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ If we're reading in the multicast stats, then the scan line needs to be
+ tweaked not to skip this value!
+
+2004-08-26 07:31 dts12
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ Suppress 32-bit shift warnings on 32-bit systems.
+ (Though this may not be the best way to detect such systems!)
+
+2004-08-26 07:24 dts12
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ Declare missing variable on non-SCNuMAX systems.
+
+2004-08-25 12:35 rstory
+
+ * include/net-snmp/data_access/interface.h:
+
+ - rename netsnmp_interface_entry members to avoid namespace conflicts
+ - noted on users by Akihiro IIJIMA
+
+2004-08-25 09:25 rstory
+
+ * agent/mibgroup/: if-mib/data_access/interface_linux.c,
+ mibII/interfaces.c:
+
+ - apply revised patch for bug 897002: snmpd cannot handle 64 bit interface counters
+ (had been marked as fixed but wasn't)
+
+2004-08-25 08:38 dts12
+
+ * man/mib2c.conf.5:
+
+ Document the new mib2c node tags.
+
+2004-08-25 08:35 dts12
+
+ * mibs/: DISMAN-EXPRESSION-MIB.txt, DISMAN-NSLOOKUP-MIB.txt
+, DISMAN-PING-MIB.txt, DISMAN-TRACEROUTE-MIB.txt
+:
+
+ Add DisMan Remote Operations MIB files
+
+2004-08-25 08:30 dts12
+
+ * agent/mibgroup/disman/: expression/gnuc.h, expression/in6.h
+, expression/ip_var.h, expression/ipv6.h,
+ expression/udp_var.h, nslookup/gnuc.h, nslookup/in6.h
+, nslookup/ip_var.h, nslookup/ipv6.h,
+ nslookup/udp_var.h, ping/gnuc.h, ping/in6.h,
+ ping/ip_var.h, ping/ipv6.h, ping/udp_var.h,
+ traceroute/gnuc.h, traceroute/in6.h,
+ traceroute/ip_var.h, traceroute/ipv6.h,
+ traceroute/udp_var.h:
+
+ Locally-tweaked versions of standard header files.
+ This is not the most appropriate way to proceed,
+ but is needed to get the initial implementation working.
+
+2004-08-25 07:31 dts12
+
+ * local/mib2c.iterate_access.conf:
+
+ Support holes in "iterate_access" tables.
+
+2004-08-25 01:11 dts12
+
+ * agent/mibgroup/Rmon/event.c:
+
+ Fix a memory leak in the Rmon code. (Reported by Fong Tsui)
+
+2004-08-24 18:27 rstory
+
+ * agent/mibgroup/if-mib/: data_access/interface_common.c,
+ data_access/interface_ioctl.c,
+ data_access/interface_linux.c, ifTable/ifTable.c,
+ ifTable/ifTable.h, ifTable/ifTable_data_access.c:
+
+ - rename netsnmp_interface_entry members to avoid namespace conflicts
+ - noted on users by Akihiro IIJIMA
+
+2004-08-24 09:28 dts12
+
+ * testing/tests/: T055agentv1mintrap, T056agentv2cmintrap
+:
+
+ Fix the minimal config tests to use the correct set of MIB modules.
+ (Reported by Magnus Fromreide)
+
+2004-08-24 09:24 dts12
+
+ * testing/: README, RUNTESTS, eval_tools.sh:
+
+ Support additional trapd flags (patch from Magnus Fromreide)
+ (And update the README to keep Mike happy!)
+
+2004-08-24 09:19 dts12
+
+ * apps/snmptrapd.c:
+
+ Log reconfig/shutdown messages more reliably. (Patch from Magnus Fromreide)
+
+2004-08-24 09:16 dts12
+
+ * COPYING:
+
+ Add Cisco/BUPTNIC copyright notice, to cover the new DisMan RemOps code.
+
+2004-08-24 08:15 dts12
+
+ * agent/mibgroup/: disman.h, disman/expression-mib.h,
+ disman/nslookup-mib.h, disman/ping-mib.h,
+ disman/traceroute-mib.h, disman/expression/expErrorTable.c
+, disman/expression/expErrorTable.h,
+ disman/expression/expExpressionTable.c,
+ disman/expression/expExpressionTable.h,
+ disman/expression/expObjectTable.c,
+ disman/expression/expObjectTable.h,
+ disman/expression/expValueTable.c,
+ disman/expression/expValueTable.h,
+ disman/nslookup/lookupCtlTable.c,
+ disman/nslookup/lookupCtlTable.h,
+ disman/nslookup/lookupResultsTable.c,
+ disman/nslookup/lookupResultsTable.h,
+ disman/ping/pingCtlTable.c, disman/ping/pingCtlTable.h
+, disman/ping/pingProbeHistoryTable.c,
+ disman/ping/pingProbeHistoryTable.h,
+ disman/ping/pingResultsTable.c,
+ disman/ping/pingResultsTable.h,
+ disman/traceroute/traceRouteCtlTable.c,
+ disman/traceroute/traceRouteCtlTable.h,
+ disman/traceroute/traceRouteHopsTable.c,
+ disman/traceroute/traceRouteHopsTable.h,
+ disman/traceroute/traceRouteProbeHistoryTable.c,
+ disman/traceroute/traceRouteProbeHistoryTable.h,
+ disman/traceroute/traceRouteResultsTable.c,
+ disman/traceroute/traceRouteResultsTable.h:
+
+ Preliminary implementation of the DisMan Remote Operation MIB groups.
+ Note that these are not yet ready for production use.
+
+2004-08-23 08:06 rstory
+
+ * Makefile.rules:
+
+ new target to only make objects for current directory (no subdirs)
+
+2004-08-23 07:35 dts12
+
+ * apps/snmpwalk.c, man/snmpwalk.1.def:
+
+ Option to exclude the final GET request when walking a single instance.
+
+2004-08-23 02:39 dts12
+
+ * local/: mib2c.container.conf, mib2c.table_data.conf:
+
+ New template configs for row-based "internal-data" implementations.
+
+2004-08-23 02:29 dts12
+
+ * local/mib2c:
+
+ New variable tokens to identify "creatable" or RowStatus column objects.
+ Extend these two tokens, plus "settable" to apply to tables as well
+ (reporting on the constituent column objects).
+
+2004-08-23 01:59 dts12
+
+ * agent/mibgroup/target/target_counters.c:
+
+ Implement context error counters as proper scalar objects
+ (rather than simply instances)
+
+2004-08-23 01:58 dts12
+
+ * agent/mibgroup/mibII/setSerialNo.c:
+
+ Fuller implementation of snmpSetSerialNo object, including persistance across
+ agent restart, random initialisation value (both per TestAndIncr description)
+ and proper object instance behaviour.
+
+2004-08-23 01:56 dts12
+
+ * agent/agent_registry.c:
+
+ Don't invoke callback registrations if the original registration fails.
+ (See bug #990070)
+
+2004-08-20 08:51 rstory
+
+ * doxygen.conf:
+
+ update project number to 5.2.dev
+
+2004-08-20 08:48 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - remove static attribute for function
+ - fix paren grouping
+
+2004-08-20 08:47 rstory
+
+ * include/net-snmp/agent/net-snmp-agent-includes.h:
+
+ - do not include data access headers, as they are not installed
+
+2004-08-20 08:18 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface.h:
+
+ include interface data access header
+
+2004-08-20 01:53 dts12
+
+ * apps/snmptrapd.c:
+
+ Tidy up handling of pid_file. (Patches from Magnus Fromreide)
+
+2004-08-19 02:23 dts12
+
+ * apps/snmptrapd.c:
+
+ Improved handling of snmptrapd PID file.
+ Patch from Magnus Fromreide.
+
+2004-08-19 02:17 dts12
+
+ * Makefile.in:
+
+ Handle agent_module header files in the same way as mib_module ones.
+ (Removing them when cleaning up, and installing the config header)
+
+2004-08-19 02:12 dts12
+
+ * include/net-snmp/agent/net-snmp-agent-includes.h:
+
+ Add agent_module configuration tokens to the list of
+ standard agent includes. (Reported by Magnus Fromreide)
+
+2004-08-19 02:10 dts12
+
+ * agent/mibgroup/snmpv3/usmConf.h:
+
+ Correct agent_module config setting.
+ (Spotted by Magnus Fromreide)
+
+2004-08-18 15:12 nba
+
+ * snmplib/parse.c:
+
+ Allow TOKENRING-MIB and DS1-MIB to override older RFC mibs
+
+2004-08-18 02:21 dts12
+
+ * agent/mibgroup/agentx/master.c:
+
+ Use the context name from the registration call,
+ rather than the context from the incoming request.
+ These ought to be the same, but are subtly different when
+ no context is specified. (Patch supplied by Magnus Fromreide)
+
+2004-08-17 08:40 dts12
+
+ * Makefile.rules:
+
+ More portable approach to avoiding unnecessary header installs.
+ (Thanks to both Ben Rogers and Stephen J. Friedl)
+
+2004-08-17 02:08 dts12
+
+ * include/net-snmp/library/default_store.h,
+ snmplib/read_config.c:
+
+ Attempt to support multiple '{xxxx}.conf' application types.
+
+2004-08-17 02:06 dts12
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ Include the new 'NET-SNMP-EXTEND-MIB' module in a default config.
+
+2004-08-17 02:04 dts12
+
+ * apps/snmptrapd_handlers.c:
+
+ Allow "traphandle" directives to match a subtree rather
+ than just a single trap. (Suggested by Bosko Milekic)
+
+2004-08-17 01:59 dts12
+
+ * snmplib/snmpv3.c:
+
+ Don't bother looking up the hostname unless it'll actually
+ be needed for generating the engineID. Suggested by Joe C.
+
+2004-08-17 01:51 dts12
+
+ * snmplib/: snmpUDPDomain.c, snmpUDPIPv6Domain.c,
+ snmpUnixDomain.c:
+
+ Ensure that a non-matching com2sec lookup will return a NULL 'secName'
+ (Based on a suggestion by Oleg Ivanov)
+
+2004-08-17 01:41 dts12
+
+ * agent/snmp_agent.c:
+
+ Don't apply 'hosts.{allow,deny}' checking to callback connections
+ (which typically won't match anything other than "ALL")
+
+2004-08-17 01:38 dts12
+
+ * agent/agent_registry.c:
+
+ Protect against missing parameters. (Suggested by John Lash)
+
+2004-08-17 01:32 dts12
+
+ * agent/helpers/table_container.c,
+ include/net-snmp/agent/table_container.h:
+
+ API for adding a (newly created) row to the varbind request list,
+ so it's available during later SET passes. There's probably
+ a better way of comparing index values, but this seems to work.
+
+2004-08-17 01:27 dts12
+
+ * agent/mibgroup/: snmpv3mibs.h, snmpv3/usmConf.c,
+ snmpv3/usmConf.h, snmpv3/usmUser.c:
+
+ Split off USM config handling into a separate module
+ (and move this into the agent library)
+
+2004-08-17 01:25 dts12
+
+ * agent/mibgroup/: agentx/agentx_config.h, agentx/client.h
+, agentx/master.h, agentx/master_admin.h,
+ agentx/protocol.h, agentx/subagent.h,
+ mibII/vacm_conf.h:
+
+ Move VACM config handling and AgentX support into the agent library.
+
+2004-08-17 01:23 dts12
+
+ * agent/: agent_read_config.c, mib_modules.c:
+
+ Pick up agent_module initialisation and dot_conf routines.
+ (Not convinced this is the best place for the agent_module
+ init routines to be called, but it'll do for now.)
+
+2004-08-17 01:21 dts12
+
+ * agent/Makefile.in:
+
+ Switch linking order of agent and mib libraries (since libnetsnmpmibs
+ may well use routines defined in libnetsnmpagent, but not vice versa)
+
+2004-08-17 01:15 dts12
+
+ * configure.in, configure:
+
+ Ensure agent vs mib modules are picked up correctly (esp. for modules
+ without a header file, which should default to 'mib_modules')
+
+2004-08-17 01:11 dts12
+
+ * agent/mibgroup/agent/extend.c,
+ agent/mibgroup/ucd-snmp/extensible.c, man/snmpd.conf.5.def
+:
+
+ Slightly preferable config token for the new extensible scripting mib,
+ document this feature, and add a warning regarding the old (invalid)
+ relocatable output format.
+
+2004-08-16 20:25 rstory
+
+ * agent/snmp_agent.c:
+
+ - don't drop re-attached head (patch from Tommy Christensen)
+ - fix typo
+
+2004-08-16 14:57 rstory
+
+ * agent/helpers/Makefile.in:
+
+ install mfd.h
+
+2004-08-16 14:45 rstory
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ new version from autoconf
+
+2004-08-16 14:23 rstory
+
+ * acconfig.h:
+
+ - add undef for STRUCT_TM_HAS_TM_GMTOFFF
+ - define config_belongs_in to nothing
+
+2004-08-16 12:13 nba
+
+ * mibs/: Makefile.mib, mibfetch, smistrip:
+
+ More automatic installation of RFC based mibs
+
+2004-08-13 06:59 dts12
+
+ * include/net-snmp/agent/.cvsignore:
+
+ Ignore config-generated 'agent_module' files
+
+2004-08-13 06:51 dts12
+
+ * agent/mibgroup/.cvsignore:
+
+ Ignore config-generated 'agent_module' files
+
+2004-08-13 06:43 dts12
+
+ * apps/snmptrapd.c, local/Makefile.in,
+ local/snmpconf.dir/snmptrapd-data/authentication,
+ local/snmpconf.dir/snmptrapd-data/logging,
+ local/snmpconf.dir/snmptrapd-data/runtime,
+ man/snmptrapd.conf.5.def, win32/dist/installer/net-snmp.nsi
+:
+
+ Add snmptrapd config support for logging, authentication and runtime options.
+ (Patch #981319 from Alex Burger)
+
+2004-08-13 06:33 dts12
+
+ * snmplib/snmpksm.c:
+
+ Strip port-number specification from "peername" when constructing KSM credentials.
+ (Based on patch #992440)
+
+2004-08-13 03:08 dts12
+
+ * agent/mibgroup/agentx/master.c:
+
+ Handle "general" AgentX errors, not associated with a specific varbind.
+ (Based on patch #983972 from lorenzim)
+
+2004-08-13 02:54 dts12
+
+ * Makefile.rules:
+
+ Provide missing definition of 'installsubdirheaders' rule.
+ (Patch #991664 from Ben Rogers)
+
+2004-08-13 02:53 dts12
+
+ * Makefile.rules:
+
+ "Lazy" installation of header files. Only install a header file if
+ it's newer than the existing one. (Patch #991664 from Ben Rogers)
+
+2004-08-13 02:50 dts12
+
+ * configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in, snmplib/snmp-tc.c
+:
+
+ Use an explicit check for 'tm_gmtoff', rather than per-architecture #defines
+ (Patch #1006298 from Stephen J. Friedl)
+
+2004-08-13 02:17 nba
+
+ * mibs/: IANAifType-MIB.txt, ianalist, rfclist:
+
+ Updated RFC MIB information
+
+2004-08-12 07:49 dts12
+
+ * snmplib/read_config.c:
+
+ Handle a colon-separated list of "application-type" config files.
+ (e.g. "agentx:snmpd" to search *both* 'snmpd.conf' *and* 'agentx.conf')
+ See coders-thread "AgentX configuration" - Jul '04
+
+2004-08-12 05:20 dts12
+
+ * agent/mibgroup/utilities/execute.h:
+
+ An example of configuring code into the agent rather than the mib library.
+
+2004-08-12 05:18 dts12
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ include/net-snmp/net-snmp-config.h.in, configure.in
+, configure:
+
+ Support a mechanism for including particular code modules within either
+ the mib library or the agent library (or potentially elsewhere as well).
+ (See coders-thread "Moving AgentX out of the mibmodules" - June '04)
+
+2004-08-12 05:12 dts12
+
+ * include/net-snmp/agent/all_helpers.h:
+
+ Include an oft-overlooked helper.
+
+2004-08-12 05:11 dts12
+
+ * apps/notification_log.c:
+
+ Protect against following NULL pointers
+ (plus some petty grammaticastigation)
+
+2004-08-11 13:57 rstory
+
+ * man/Makefile.in:
+
+ look for .in file in srcdir, which may != current dir
+
+2004-08-11 05:54 dts12
+
+ * agent/helpers/table_data.c:
+
+ Only store the table structure on the first pass through.
+ Subsequent passes can retrieve this stored value anyway.
+
+2004-08-11 04:55 dts12
+
+ * man/Makefile.in:
+
+ remove deleted man pages (todo & deprecated)
+
+2004-08-10 08:53 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ update libtool versioning a bit
+
+2004-08-04 05:51 dts12
+
+ * Makefile.in, man/netsnmp_deprecated.3,
+ man/netsnmp_todo.3:
+
+ Don't install 'todo' or 'deprecated' man pages
+ (since these are constructed with suspect formatting)
+
+2004-08-03 08:12 dts12
+
+ * snmplib/snmpv3.c:
+
+ Specify the correct length of string for AES 'strncmp' comparisons.
+ (See bug #996894)
+
+2004-08-02 14:17 hardaker
+
+ * agent/agent_registry.c:
+
+ fix context registration so new context trees get properly initialized.
+
+2004-08-02 14:13 hardaker
+
+ * mibs/makehtml.pl:
+
+ Don't double-produce HTML output for repeated MIBs.
+
+2004-07-30 17:32 hardaker
+
+ * NEWS:
+
+ - document AgentX context fixing
+ - document the usmUser table population under snmptrapd
+
+2004-07-30 17:31 hardaker
+
+ * snmplib/: snmpUDPDomain.c, snmpUDPIPv6Domain.c,
+ snmpUnixDomain.c:
+
+ Double check that the contextName array is properly initialize.
+
+2004-07-30 17:30 hardaker
+
+ * include/net-snmp/agent/agent_registry.h:
+
+ Add contextName to the registration paramaters structure.
+
+2004-07-30 17:29 hardaker
+
+ * apps/snmptrapd.c:
+
+ Register the usmUserTable under the "snmptrapd" context
+
+2004-07-30 17:28 hardaker
+
+ * apps/notification_log.c:
+
+ - register all the snmptrapd mib nodes under the "snmptrapd" context
+
+2004-07-30 17:26 hardaker
+
+ * agent/mibgroup/snmpv3/: usmUser.c, usmUser.h:
+
+ Create a function to register the usmUser table other a different context.
+
+2004-07-30 17:26 hardaker
+
+ * agent/mibgroup/agentx/: client.c, client.h, master.c
+, subagent.c:
+
+ - Fix agentx to work properly under non-default contexts.
+
+2004-07-30 17:24 hardaker
+
+ * agent/helpers/instance.c, include/net-snmp/agent/instance.h
+:
+
+ Add a bunch of functions to register instances under non default contexts.
+
+2004-07-30 17:23 hardaker
+
+ * agent/agent_registry.c:
+
+ - fix add_subtree so it registers top level null handlers too
+ - fixes a number of context problems
+ - pass context information down into registration info struct (used by agentx)
+
+2004-07-30 17:21 hardaker
+
+ * agent/helpers/null.c, include/net-snmp/agent/null.h:
+
+ - add a null registration function for contexts other than the default.
+
+2004-07-30 14:44 hardaker
+
+ * apps/snmpusm.c, snmplib/snmpusm.c, snmplib/snmpv3.c
+:
+
+ Patch from Abhijit Hayatnagarkar to fix USM privacy key lengths
+
+2004-07-30 13:36 hardaker
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ I was sleeping earlier when I fixed code that wasn't broken.
+
+2004-07-30 13:07 hardaker
+
+ * NEWS:
+
+ mention community string -> context mappings
+
+2004-07-30 13:04 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ document the new com2sec token options.
+
+2004-07-30 13:01 hardaker
+
+ * agent/mibgroup/mibII/vacm_conf.c,
+ include/net-snmp/library/snmpUDPDomain.h,
+ include/net-snmp/library/snmpUDPIPv6Domain.h,
+ include/net-snmp/library/snmpUnixDomain.h,
+ snmplib/snmpUDPDomain.c, snmplib/snmpUDPIPv6Domain.c
+, snmplib/snmpUnixDomain.c:
+
+ Make the com2sec* tokens accept a -Cn CONTEXT flag to allow the
+ mapping of community strings to SNMPv3 contexts.
+
+2004-07-30 12:57 hardaker
+
+ * agent/snmp_agent.c:
+
+ Pass the actual pdu being processed into check_access instead of the copy
+
+2004-07-30 11:21 hardaker
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ Fix context checking so it actually works for non default contexts
+
+2004-07-28 12:52 hardaker
+
+ * agent/mibgroup/if-mib/data_access/interface.h:
+
+ configure_require -> config_require
+
+2004-07-28 05:40 dts12
+
+ * README.win32:
+
+ OpenSSL is needed for SHA-based authentication, rather than MD5.
+ (It's used for both if available, but it's only *needed* for SHA)
+
+2004-07-28 02:17 dts12
+
+ * FAQ:
+
+ Discuss RPM-dependecy problems.
+
+2004-07-28 01:04 dts12
+
+ * local/mib2c.old-api.conf:
+
+ Per-object switch statement is missing the "case" keyword.
+ (Reported by William Buckley)
+
+2004-07-22 17:55 slif
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ for win32 agent, interpret ifOperStatus correctly,
+ and set ifLastChange to zero. These changes fixes bug #907716.
+
+2004-07-22 13:06 slif
+
+ * win32/net-snmp/: net-snmp-config.h, net-snmp-config.h.in
+:
+
+ typedef long int32_t to succeed building with MSVC++.
+
+2004-07-22 10:45 slif
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ patch #982628 applied to fix leak on errors in netsnmp_udp6_transport
+
+2004-07-22 08:49 dts12
+
+ * FAQ:
+
+ Emphasise the need to explicitly create users.
+
+2004-07-20 23:26 slif
+
+ * agent/mibgroup/mibII/: tcpTable.c, udpTable.c:
+
+ fix bug #992735 OSX 10.3.4 make fails by including darwin in #if expressions.
+
+2004-07-20 22:29 slif
+
+ * include/net-snmp/system/darwin7.h:
+
+ create system header for -Ddarwin7. partial fix for bug 992735.
+
+2004-07-20 19:40 slif
+
+ * agent/helpers/table_iterator.c:
+
+ fix bug 994194 by checking for null before de-referencing pointer argument.
+
+2004-07-20 13:31 slif
+
+ * README.solaris:
+
+ patch 988286 from Bruce Shaw - Lots of updates on README.solaris
+
+2004-07-20 13:22 slif
+
+ * testing/eval_tools.sh:
+
+ use kill.exe only iff OSTYPE = msys (patch #987626 applied)
+
+2004-07-19 09:28 dts12
+
+ * man/snmpvacm.1.def:
+
+ Fix erroneous troff macro, as reported by Eric Raymond
+
+2004-07-16 22:53 hardaker
+
+ * agent/mibgroup/mibII/: mibII_common.h, tcpTable.c:
+
+ Attempted fixes for darwin
+
+2004-07-16 11:52 hardaker
+
+ * agent/mibgroup/ip-mib/ipSystemStatsTable.h:
+
+ Added missing ipSystemStatsTable.h file which Robert probably forgot to check in. I'm guessing at the propercontents, but it should be right
+
+2004-07-16 09:08 dts12
+
+ * FAQ:
+
+ A few additional entries (esp. relating to generating traps)
+ plus some minor restructuring and wordsmithing.
+
+2004-07-10 21:29 rstory
+
+ * agent/mibgroup/ip-mib/data_access/systemstats_linux.c:
+
+ - remove debug msg
+ - log warning if header length isn't what we expect
+
+2004-07-10 21:28 rstory
+
+ * snmplib/int64.c:
+
+ - fix inverted conditional test
+ - don't assume 64 if wrapcheck skipped
+
+2004-07-10 19:52 rstory
+
+ * include/net-snmp/data_access/interface.h:
+
+ - add comment to document structure var
+
+2004-07-10 19:51 rstory
+
+ agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.c
+:
+
+ - bump up timeout to 30 seconds, instead of 3
+
+2004-07-10 19:50 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_linux.c:
+
+ - remove reminder comment
+ - fix typo, indententation
+
+2004-07-10 19:48 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ use uintmax_t vars for parsing data
+
+2004-07-10 13:07 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c:
+
+ make local function more generic and move to netsnmp_c64_check32_and_update
+
+2004-07-10 13:06 rstory
+
+ * agent/mibgroup/ip-mib/: inetNetToMediaTable.h,
+ ipAddressTable.h, inetNetToMediaTable/inetNetToMediaTable.h
+, ipAddressTable/ipAddressTable.h:
+
+ move config requires up a level
+
+2004-07-10 13:02 rstory
+
+ * include/net-snmp/data_access/net-snmp-data-access-includes.h
+:
+
+ add ipstats/systemstats headers
+
+2004-07-10 13:01 rstory
+
+ * include/net-snmp/library/int64.h, snmplib/int64.c:
+
+ new function netsnmp_c64_check32_and_update
+
+2004-07-10 12:58 rstory
+
+ * agent/mibgroup/ip-mib.h:
+
+ add ipSystemStatsTable
+
+2004-07-10 11:05 rstory
+
+ * agent/mibgroup/ip-mib/data_access/systemstats.h,
+ agent/mibgroup/ip-mib/data_access/systemstats_common.c,
+ agent/mibgroup/ip-mib/data_access/systemstats_linux.c,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/.cvsignore,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/.mib2c-updaterc,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/default-table-ipSystemStatsTable.m2d
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable-README-FIRST.txt
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable-README-ipSystemStatsTable.txt
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.h
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c
+,
+ agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h
+, include/net-snmp/data_access/ipstats.h,
+ include/net-snmp/data_access/systemstats.h:
+
+ implement ipSystemStatsTable
+
+2004-07-09 22:58 hardaker
+
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.c
+:
+
+ - remove my quick // comments
+ - remove a few XXX comments that were feedback for Robert (now emailed).
+
+2004-07-09 15:29 hardaker
+
+ * apps/snmpusm.c:
+
+ - Pull the DH parameters from the agent to use its currently configured params.
+ - protect against !openssl users
+
+2004-07-09 15:28 hardaker
+
+ * apps/snmpusm.c:
+
+ Pull the DH parameters from the agent to use its currently configured params.
+
+2004-07-09 15:28 hardaker
+
+ * agent/mibgroup/: snmp-usm-dh-objects-mib.h,
+ snmp-usm-dh-objects-mib/usmDHParameters.h,
+ snmp-usm-dh-objects-mib/usmDHParameters/.cvsignore,
+ snmp-usm-dh-objects-mib/usmDHParameters/usmDHParameters.c,
+ snmp-usm-dh-objects-mib/usmDHParameters/usmDHParameters.h,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable.c
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_get.c
+,
+ snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_get.h
+:
+
+ Added the usmDHParameters object for management of the DH parameters
+
+2004-07-09 11:18 hardaker
+
+ * snmplib/read_config.c:
+
+ Make the persistent file warning a bit, um, more strong
+
+2004-07-09 09:58 hardaker
+
+ * NEWS, agent/mibgroup/snmp-usm-dh-objects-mib.h,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable.h,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/default-table-usmDHUserKeyTable.m2d
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable.c
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_access.c
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_access.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_get.c
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_get.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.c
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_doxygen.conf
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_enums.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_interface.c
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_interface.h
+,
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_oids.h
+:
+
+ Implemented the SNMP-USM-DH-OBJECTS-MIB usmDHUserKeyTable table.
+
+2004-07-09 09:57 hardaker
+
+ agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/.cvsignore
+:
+
+ ignore file
+
+2004-07-09 09:32 hardaker
+
+ * apps/snmpusm.c, man/snmpusm.1.def:
+
+ Support a diffie-helman based "changekey" command.
+
+2004-07-09 09:26 hardaker
+
+ * include/net-snmp/library/snmpusm.h:
+
+ Add diffie-helman void * container pointers.
+
+2004-07-09 09:24 hardaker
+
+ * mibs/: SNMP-USM-DH-OBJECTS-MIB.txt, Makefile.in:
+
+ rfc2786: dh usm mib
+
+2004-07-09 09:22 hardaker
+
+ * configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in:
+
+ Test for openssl/dh.h
+
+2004-07-08 17:31 rstory
+
+ * agent/mibgroup/mibII/route_write.c:
+
+ - Linux: use non 0 socket protocol when creating socket (or call fails)
+ - don't return success if socket call fails
+ - close socket before returning
+ - fix typo in comment
+
+2004-07-08 17:29 rstory
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ - move write_method assignment before check for existing node, so row creation
+ can be supported
+
+2004-07-08 17:27 rstory
+
+ * local/mib2c-conf.d/node-get.m2i:
+
+ update test for correct node decl type
+
+2004-07-08 17:26 rstory
+
+ * local/mib2c-conf.d/generic-ctx-get.m2i:
+
+ generate high & low assignments for counter64 nodes
+
+2004-07-08 15:38 rstory
+
+ * local/mib2c:
+
+ close files before exit, to flush pending output
+
+2004-07-08 09:09 rstory
+
+ * agent/mibgroup/mibII/route_write.c:
+
+ - assign dst addr to new cache entry, so we can find it in next pass
+
+2004-07-08 08:37 rstory
+
+ * agent/agent_trap.c:
+
+ - back our previous trap binding change
+ - set new session.localname to localhost for v1/v2c traps (but not informs)
+
+2004-07-08 08:36 rstory
+
+ * include/net-snmp/library/snmp_api.h, snmplib/snmp_api.c
+:
+
+ - allow per session binding to specific local address for udp transports
+
+2004-07-08 07:18 rstory
+
+ * agent/agent_trap.c:
+
+ - bind v1 trap sessions client address to localhost
+
+2004-07-08 06:52 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c:
+
+ - close file when done with it
+
+2004-07-07 16:56 rstory
+
+ * local/mib2c-update:
+
+ - switch to unified diff
+
+2004-07-07 16:50 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - remove some duplicated code (use interface data access versions)
+ - remove unused var
+
+2004-07-07 16:24 hardaker
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ Properly quote mib2c variable in a @if@ clause.
+
+2004-07-07 16:23 rstory
+
+ * agent/mibgroup/ip-forward-mib/ipCidrRouteTable/:
+ ipCidrRouteTable.h, ipCidrRouteTable_data_access.c:
+
+ - change row status object name to match mib (which doesn't end in RowStatus)
+
+2004-07-07 16:15 rstory
+
+ * agent/mibgroup/ip-forward-mib/inetCidrRouteTable/:
+ inetCidrRouteTable.c, inetCidrRouteTable.h,
+ inetCidrRouteTable_constants.h,
+ inetCidrRouteTable_data_access.c,
+ inetCidrRouteTable_data_access.h,
+ inetCidrRouteTable_interface.c,
+ inetCidrRouteTable_interface.h:
+
+ - update generated code
+
+2004-07-07 13:56 rstory
+
+ * agent/mibgroup/ip-forward-mib/ipCidrRouteTable/:
+ ipCidrRouteTable.h, ipCidrRouteTable_data_access.c:
+
+ - agree on variable name
+
+2004-07-07 13:41 rstory
+
+ agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c
+:
+
+ - register table as CAN_RONLY
+
+2004-07-07 13:41 rstory
+
+ * agent/mibgroup/ip-forward-mib/ipCidrRouteTable/:
+ ipCidrRouteTable.c, ipCidrRouteTable.h,
+ ipCidrRouteTable_data_access.c:
+
+ - implement row status (hardcoded as active)
+
+2004-07-07 13:31 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_linux.c,
+ agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.h,
+ agent/mibgroup/mibII/ipv6.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ include/net-snmp/data_access/route.h:
+
+ - replace u_intN_t with more portable uintN_t
+
+2004-07-07 10:41 rstory
+
+ * agent/mibgroup/mibII/ifTable.h:
+
+ - include interface data access header for struct/enums
+
+2004-07-07 10:41 rstory
+
+ * agent/mibgroup/mibII/ifTable.c:
+
+ - initialise container via data access library
+
+2004-07-07 10:26 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c:
+
+ - use enums from mib instead of hardcoded values
+
+2004-07-07 10:21 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h
+:
+
+ - add missing TC value
+
+2004-07-07 10:21 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_linux.c:
+
+ - update ipv6 implementation (take a stab at status, type, origin)
+
+2004-07-07 07:13 rstory
+
+ * Makefile.in:
+
+ tweak comment check pattern to exclude logs of mfd matches
+
+2004-07-07 07:02 rstory
+
+ * include/net-snmp/library/container_list_ssll.h,
+ snmplib/container_list_ssll.c:
+
+ - add unsorted singly linked list (fifo or lifo)
+
+2004-07-07 05:24 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ Quote "r[ow]community" string before passing to com2sec-style parser,
+ to retain any internal whitespace.
+
+2004-07-07 05:21 dts12
+
+ * snmplib/: snmpUDPDomain.c, snmpUDPIPv6Domain.c:
+
+ Use copy_nword rather than strtok for parsing com2sec entries.
+ (To handle quoted strings properly)
+
+2004-07-07 02:14 dts12
+
+ * agent/helpers/table_data.c:
+
+ Convert to use the non-recursive 'AUTO_NEXT' approach
+ for all bar GETNEXT/GETBULK requests.
+
+2004-07-07 02:12 dts12
+
+ * agent/helpers/: table_data.c, table_iterator.c:
+
+ Sparse tables are handled within the tabler helper,
+ so don't need to be considered here.
+
+2004-07-07 02:11 dts12
+
+ * agent/agent_handler.c:
+
+ Don't throw an error if the final handler registration didn't
+ include an explicit handler routine. This is perfectly reasonable
+ if the MIB object is handled internally by the preceding helpers.
+
+2004-07-06 21:18 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/: ipAddressTable.c,
+ ipAddressTable.h, ipAddressTable_data_access.c,
+ ipAddressTable_interface.c:
+
+ - implement/enable ipAddressType, ipAddressCreated, ipAddressLastChanged
+ ipAddressRowStatus (hardcoded active), ipAddressStorageType (hardcoded volatile)
+ - return not writable/no creation until set support implemented
+ - config_require interface data access
+ - update cache policy to auto reload, for last changed/created
+
+2004-07-06 21:12 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_common.c,
+ include/net-snmp/data_access/ipaddress.h:
+
+ - new func to compare and update ipaddress entries
+ - new flag/code for second container index, by address
+
+2004-07-06 21:07 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_data_access.c:
+
+ - return resource unavailable on empty interface container
+ - log malloc failure
+
+2004-07-06 21:00 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c,
+ include/net-snmp/data_access/interface.h:
+
+ - rename interface data access init routine
+ - create container once during init, to discover ifIndexes
+
+2004-07-06 20:58 rstory
+
+ * agent/snmp_vars.c:
+
+ init interface data access in init_agent
+
+2004-07-06 17:33 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ increase default oid printing size.
+
+2004-07-06 17:15 hardaker
+
+ * snmplib/mib.c:
+
+ increase default buffer size passed to get_symbol_realloc (useful
+ for long OIDs when realloc is actually off).
+
+2004-07-06 15:58 rstory
+
+ * include/net-snmp/agent/all_helpers.h:
+
+ add new mfd header
+
+2004-07-06 15:57 rstory
+
+ * include/net-snmp/agent/mfd.h:
+
+ common mfd include
+
+2004-07-06 15:54 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ initialize variable before use
+
+2004-07-06 14:24 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ Only print one of the error messages if the result was an array.
+
+2004-07-06 14:23 hardaker
+
+ * perl/OID/OID.xs:
+
+ - fix a few "whoops" (remove debugging; properly {} multi if statements).
+
+2004-07-06 14:11 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ - if a table is composed of only indexes, walk at least one so results
+ are returned for gettable().
+
+2004-07-06 14:08 hardaker
+
+ * perl/OID/OID.xs:
+
+ - properly return NULLs when appropriate.
+ - make get_indexes return indexes from augmented tables.
+
+2004-07-06 14:00 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c,
+ agent/mibgroup/if-mib/ifTable/ifTable.c,
+ include/net-snmp/data_access/interface.h:
+
+ - add inucast, onucast counters to stats struct
+ - move inucast, onucast calculations into linux interface data_access
+
+2004-07-06 11:53 rstory
+
+ * Makefile.in:
+
+ - update make checks to check for cpp #warnings
+
+2004-07-05 20:01 rstory
+
+ * local/Version-Munge.pl:
+
+ - document -T option in usage
+
+2004-07-05 20:00 rstory
+
+ * include/net-snmp/data_access/interface.h:
+
+ - remove nasty kernel trick defines
+ - add backwards compatability typedef for conf_if_list
+
+2004-07-05 19:59 rstory
+
+ * include/net-snmp/agent/net-snmp-agent-includes.h:
+
+ - include new data access include
+
+2004-07-05 19:52 rstory
+
+ * include/net-snmp/data_access/net-snmp-data-access-includes.h
+:
+
+ new header for all data access includes
+
+2004-07-05 15:09 rstory
+
+ * agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c
+:
+
+ - remove row status for now; warning to remind before 5.2
+
+2004-07-05 15:08 rstory
+
+ * agent/mibgroup/mibII/interfaces.h:
+
+ add config_require of data_access/interface
+
+2004-07-05 14:50 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ remove conf_if_list declaration (it's in data_access/intefaces.h now)
+
+2004-07-05 14:12 rstory
+
+ * agent/mibgroup/: ip-forward-mib/data_access/route_linux.c,
+ ip-mib/data_access/arp_linux.c,
+ ip-mib/data_access/ipaddress_ioctl.c:
+
+ asserts should be netsnmp_asserts
+
+2004-07-05 14:10 rstory
+
+ * agent/mibgroup/if-mib/: data_access/interface_common.c,
+ data_access/interface_linux.c, ifTable/ifTable.c,
+ ifTable/ifTable.h:
+
+ - don't use nasty kernel trick (avoid unexpected macro substitutions)
+
+2004-07-05 09:21 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2004-07-05 09:20 rstory
+
+ * configure.in:
+
+ update version to 5.2.dev
+
+2004-07-05 09:04 rstory
+
+ * perl/TrapReceiver/TrapReceiver.pm:
+
+ - (perl/TrapReceiver/TrapReceiver.pm): version tag ( 5.2.dev )
+
+2004-07-05 09:04 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.2.dev )
+
+2004-07-05 09:04 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.2.dev )
+
+2004-07-05 09:03 rstory
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.2.dev )
+
+2004-07-05 09:03 rstory
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.2.dev )
+
+2004-07-05 09:03 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.2.dev )
+
+2004-07-05 09:03 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.2.dev )
+
+2004-07-05 09:02 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.2.dev )
+
+2004-07-05 09:02 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.2.dev )
+
+2004-07-05 09:01 rstory
+
+ * dist/net-snmp.spec:
+
+ - (dist/net-snmp.spec): version tag ( 5.2.dev )
+
+2004-07-05 09:01 rstory
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.2.dev )
+
+2004-07-05 09:01 rstory
+
+ * README:
+
+ - (README): version tag ( 5.2.dev )
+
+2004-07-05 09:00 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.2.dev )
+
+2004-07-05 08:31 rstory
+
+ * dist/nsb-functions:
+
+ add make test results to upload
+
+2004-07-05 05:59 dts12
+
+ * agent/helpers/: cache_handler.c, read_only.c,
+ table_dataset.c, watcher.c:
+
+ Use "AUTO_NEXT"-style handling for the trivial cases
+ (noting this behaviour within the handler itself).
+
+2004-07-05 05:53 dts12
+
+ * agent/helpers/multiplexer.c:
+
+ Use switch fallthrough to handler GetBulk->GetNext->Get handler fallbacks.
+ The previous code didn't cope with a missing GET helper for GetBulk/GetNext.
+
+2004-07-04 18:27 rstory
+
+ * agent/helpers/bulk_to_next.c:
+
+ - convert to use AUTO_NEXT
+
+2004-07-04 18:25 rstory
+
+ * agent/mibgroup/mibII/udpTable.h:
+
+ - restore config_reqire of old table (enable-mfd-rewrites coexistence)
+
+2004-07-04 18:23 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_interface.c:
+
+ - ifdef out table registration iff ! enable-mfd-rewrites
+ - init cache earlier (it happens even if ! enable-mfd-rewrites, for ifXTable)
+
+2004-07-04 18:21 rstory
+
+ * agent/mibgroup/if-mib/ifTable/: ifTable.h,
+ ifTable_data_access.c:
+
+ - add flag to indicate if a cached interface is not missing
+ - set admin (and maybe oper) status down first time interface goes missing
+ - set ifLastChanged when oper status changes
+ - set ifCounterDiscontinuityTime when missing interface returns
+
+2004-07-04 18:18 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.c:
+
+ - use ifName for description iff NULL description
+ - return empty string for physaddr iff all 0s
+
+2004-07-04 18:16 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - document that SIOCGIFHWADDR ioctl might not return full 6 bytes
+ - add memset to 0 before SIOCGIFHWADDR ioctl, if needed
+ - use standard IFHWADDRLEN macro instead of hardcoded 6
+ - trivial optimization (don't assign var twice in certain cases)
+ - comment out all ifTable from variable struct iff --enable-mfd-rewrites
+
+2004-07-04 18:12 rstory
+
+ * agent/mibgroup/: if-mib/data_access/interface_ioctl.c,
+ tunnel/tunnel.c:
+
+ - document that SIOCGIFHWADDR ioctl might not return full 6 bytes
+ - add memset to 0 before SIOCGIFHWADDR ioctl, if needed
+ - use standard IFHWADDRLEN macro instead of local one
+
+2004-07-04 18:08 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c:
+
+ - don't assume oper status is up
+ - remove gratuitous log message
+
+2004-07-04 18:07 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface.h:
+
+ remove prototypes causing compile err (find fix later)
+
+2004-07-04 18:06 rstory
+
+ * agent/mibgroup/ip-forward-mib/:
+ inetCidrRouteTable/inetCidrRouteTable_interface.c,
+ ipCidrRouteTable/ipCidrRouteTable_interface.c:
+
+ update for generated code
+
+2004-07-04 18:04 rstory
+
+ * agent/mibgroup/: mibII.h, if-mib/ifTable.h,
+ if-mib/ifXTable.h, if-mib/ifXTable/ifXTable.h,
+ ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h,
+ ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h:
+
+ - re-enable old implementations for --enable-mfd-rewrites
+ (except for ifTable; turns out the rest are all new tables)
+ - ifdef out ifTable registration for enable-mfd-rewrites, leaving the rest
+ of the code intact for other tables/object that need it.
+
+2004-07-04 10:15 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ - set if type to tunnel if not set & if name starts with 'sit'
+
+2004-07-04 10:13 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_ioctl.c:
+
+ - set physaddr len to 0 if physaddr not known
+ - set oper status from if flags
+
+2004-07-04 10:11 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c:
+
+ - leave if_descr NULL until we can determine it.
+
+2004-07-04 10:07 rstory
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+
+ Linux: only log missing /proc/meminfo errors once, at startup
+
+2004-07-04 10:03 rstory
+
+ * dist/nsb-functions:
+
+ init var before using it
+
+2004-07-04 10:02 rstory
+
+ * agent/agent_registry.c:
+
+ add netsnmp assert on duplicate registration
+
+2004-07-03 17:37 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c:
+
+ - update generated code
+ - fix cache lookup oid param
+
+2004-07-03 17:25 rstory
+
+ * include/net-snmp/agent/cache_handler.h:
+
+ update comments; document that magic is for user handler
+
+2004-07-03 17:08 rstory
+
+ * agent/mibgroup/if-mib/: ifTable/ifTable.c,
+ ifTable/ifTable.h, ifXTable/ifXTable.c,
+ ifXTable/ifXTable.h:
+
+ - update generated code
+
+2004-07-03 17:04 rstory
+
+ * agent/mibgroup/: if-mib/ifTable/ifTable_interface.c,
+ if-mib/ifXTable/ifXTable_data_access.h,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable.c,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable.h,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.c
+,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h
+, ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c
+, ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h
+, ip-mib/ipAddressTable/ipAddressTable.c,
+ ip-mib/ipAddressTable/ipAddressTable.h,
+ ip-mib/ipAddressTable/ipAddressTable_constants.h,
+ ip-mib/ipAddressTable/ipAddressTable_data_access.c,
+ ip-mib/ipAddressTable/ipAddressTable_data_access.h,
+ ip-mib/ipAddressTable/ipAddressTable_interface.c,
+ ip-mib/ipAddressTable/ipAddressTable_interface.h:
+
+ - update generated code
+ - some warnings for stuff to be done before 5.2
+
+2004-07-03 15:53 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ fix conditional test for skipping mapping
+
+2004-07-03 15:51 rstory
+
+ * local/mib2c-conf.d/generic-value-map-func.m2i:
+
+ only declare var if it will be used
+
+2004-07-03 13:46 rstory
+
+ * include/net-snmp/agent/agent_handler.h:
+
+ add note in struct to update _clone_handler when not items added
+
+2004-07-03 13:44 rstory
+
+ * local/mib2c-update:
+
+ - don't use ':' in file name
+ - add --show-c-function to diff params
+
+2004-07-03 13:37 rstory
+
+ * dist/nsb-nightly:
+
+ fix upload for nsb-package abort case
+
+2004-07-03 13:36 rstory
+
+ * dist/nsb-functions:
+
+ more verbose info on upload
+
+2004-07-03 10:51 rstory
+
+ * snmplib/snmpusm.c:
+
+ return error from usm_check_secLevel if userStatus is not active
+
+2004-07-03 10:48 rstory
+
+ * include/net-snmp/library/tools.h, snmplib/tools.c:
+
+ -new netsnmp_hex_to_binary (allows specifying delimiters for hex string)
+ -add doxygen docs; move some comments to function docs
+
+2004-07-03 10:17 rstory
+
+ * local/mib2c-conf.d/syntax-RowStatus-get.m2i:
+
+ upcase constants
+
+2004-07-03 10:16 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ don't include deleted header
+
+2004-07-03 10:15 rstory
+
+ * local/mib2c-conf.d/mfd-access-container-cached-defines.m2i
+:
+
+ - consistency between non-index and index var references
+
+2004-07-03 10:14 rstory
+
+ * local/mib2c-conf.d/m2c_setup_table.m2i:
+
+ - allow table to specify no mapping for nodes
+ - new option to generate table defaults & exit
+
+2004-07-03 10:13 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes-set.m2i:
+
+ - move assignment later to get correct value
+
+2004-07-03 10:10 rstory
+
+ * local/mib2c-conf.d/: generic-get-char.m2i,
+ generic-get-oid.m2i, m2c_setup_node.m2i,
+ mfd-data-get.m2c, mfd-interactive-setup.m2c,
+ mfd-readme.m2c:
+
+ - allow table to specify no mapping for nodes
+
+2004-07-02 10:07 slif
+
+ * agent/mibgroup/ucd-snmp/: pass.c, pass_persist.c:
+
+ fix bug#819154 by allowing getnext failure to continue traversing the extensible lists.
+
+2004-07-02 07:18 slif
+
+ * agent/mibgroup/ucd-snmp/pass_persist.c:
+
+ make a safe copy of the command string to the name string.
+
+2004-07-02 06:50 slif
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ apply patch #910094 Solaris can only see some disks -- increase LUN range 0-7
+
+2004-07-02 06:38 slif
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ fix bug #984061 - check limits, build device type spans properly
+
+2004-07-02 06:12 slif
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ warn, then prevent adding more devices than the disks array will hold.
+
+2004-07-02 05:24 slif
+
+ * agent/mibgroup/host/hr_print.c:
+
+ apply patch # 983851 Check return value for cgetnext() and fix #ifdef
+
+2004-07-02 04:47 nba
+
+ * mibs/: Makefile.mib, README.mibs, smistrip:
+
+ Notes and tweaks that should make it easier to a full rfc mib complement
+ under Solaris
+
+2004-07-02 04:37 nba
+
+ * mibs/: rfclist, rfcmibs.diff:
+
+ New version og Printer-MIB
+
+2004-07-02 03:19 nba
+
+ * mibs/Makefile.mib:
+
+ Update tp correct RFC for Etherlike-MIB
+
+2004-06-30 20:04 slif
+
+ * agent/mibgroup/ucd-snmp/: pass.c, pass_persist.c:
+
+ avoid sort when only one pass or pass_persist directive is instantiated.
+ prevent overflowing bin2asc's buffer, and remove a set but not used "itmp" variable.
+
+2004-06-30 19:38 slif
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ fix bug 981275 by OID sorting the "exec" and "sh" directives.
+
+2004-06-30 07:34 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ fix cut-n-pastes to use correct function/var names
+
+2004-06-30 06:35 slif
+
+ * agent/mibgroup/mibII/ipv6.c:
+
+ fix bug# 502215 "oid not increasing" bugs for IPv6 UDP/TCP on FreeBSD
+
+2004-06-30 06:09 rstory
+
+ * agent/mibgroup/if-mib/: ifTable/ifTable.c,
+ ifTable/ifTable.h, ifTable/ifTable_constants.h,
+ ifTable/ifTable_data_access.c, ifTable/ifTable_interface.c
+, ifTable/ifTable_interface.h, ifXTable/ifXTable.c
+, ifXTable/ifXTable.h, ifXTable/ifXTable_interface.c
+, ifXTable/ifXTable_interface.h:
+
+ update generated code
+
+2004-06-29 16:05 slif
+
+ * agent/mibgroup/mibII/ipv6.c:
+
+ fix name (udbtable --> tcbtable) in TCP6 version of var_tcp6.
+
+2004-06-29 05:14 slif
+
+ * agent/mibgroup/ucd-snmp/vmstat_freebsd2.c:
+
+ apply patch 979436 to make sys/dkstat.h obsolete when building recent FreeBSD5
+
+2004-06-29 04:57 slif
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ apply patch 979434 to Support FreeBSD 5.0 and 5.1 in diskio.c
+
+2004-06-29 04:00 slif
+
+ * agent/mibgroup/ucd-snmp/memory_freebsd2.c:
+
+ Use u_long for phys_mem in memory_freebsd2.c (patch #979034)
+
+2004-06-29 03:48 slif
+
+ * perl/OID/test.pl, win32/libnetsnmptrapd/Makefile.in,
+ win32/libsnmp_dll/libsnmp.def:
+
+ per Alex Burger, apply patch #980118 to fix MSVC Perl module build and
+ prevent test from stopping in Windows due to an un-initialized variable.
+
+2004-06-29 03:36 slif
+
+ * win32/: mib_module_includes.h, mib_module_inits.h,
+ net-snmp/agent/mib_module_config.h, netsnmpmibs/Makefile.in
+, netsnmpmibs/netsnmpmibs.dsp,
+ netsnmpmibssdk/Makefile.in,
+ netsnmpmibssdk/netsnmpmibssdk.dsp:
+
+ MSVC builds vacm_conf object in order to fix bug #981377. Good Call, Dave.
+
+2004-06-29 00:03 slif
+
+ * testing/tests/: T053agentv1trap, T054agentv2ctrap,
+ T055agentv1mintrap, T056agentv2cmintrap:
+
+ use AUTHTESTARGS to fix bug#973673
+
+2004-06-28 17:04 rstory
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ update for new acconfig.h
+
+2004-06-28 16:59 rstory
+
+ * acconfig.h:
+
+ - add NETSNMP_ENABLE_MFD_REWRITES
+ - add '(incomplete)' to comment for NS_REENTRANT
+
+2004-06-28 16:56 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2004-06-28 16:55 rstory
+
+ * configure.in, agent/mibgroup/mibII.h,
+ agent/mibgroup/mibII/ipAddr.h,
+ agent/mibgroup/mibII/route_write.h,
+ agent/mibgroup/mibII/tcpTable.h,
+ agent/mibgroup/mibII/udpTable.h,
+ agent/mibgroup/mibII/var_route.h:
+
+ - new configure flage: --enable-mfd-rewrites will turn on rewritten modules.
+ - currently has the side effect of disabling deprecated tables
+
+2004-06-28 15:18 rstory
+
+ * man/mib2c.conf.5:
+
+ - update for auto-gen from mib2c
+
+2004-06-28 15:11 rstory
+
+ agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h
+:
+
+ - update oid changed in ietf draft
+
+2004-06-28 15:08 rstory
+
+ * agent/mibgroup/ip-forward-mib/:
+ inetCidrRouteTable/inetCidrRouteTable.h,
+ ipCidrRouteTable/ipCidrRouteTable.h:
+
+ config exclude mibII/ip, not mibII/var_route
+
+2004-06-28 15:07 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c:
+
+ remove unused (due to data sharing w/ifTable) functions
+
+2004-06-28 15:06 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.h:
+
+ use local, not sytem, style include for mibgroup header
+
+2004-06-28 15:05 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_data_access.c:
+
+ move var decl before first statement
+
+2004-06-28 11:54 slif
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ fix setting of OSTYPE for FreeBSD build platforms (consider acconfig.h).
+
+2004-06-28 11:44 slif
+
+ * agent/agent_trap.c:
+
+ use int for atoi, cast to unsigned short;
+ this fixes bug 981438 trapsink port range checks are wrong
+
+2004-06-28 05:34 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2004-06-28 05:32 rstory
+
+ * configure.in:
+
+ - new --enable-mib-config-checking to fail on module conflicts
+
+2004-06-28 05:22 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ - add name to container structure
+ - new macro to find named container in list
+
+2004-06-28 05:21 rstory
+
+ * local/mib2c-conf.d/mfd-data-access.m2c:
+
+ remove condition for header function prototype generation
+
+2004-06-28 05:20 rstory
+
+ * snmplib/data_list.c:
+
+ - remove deprecated label from func, add note on preferred func instead
+ - add some netsnmp_asserts & debug output
+ - reduce duplicated code
+ - netsnmp_data_list_add_data now calls netsnmp_data_list_add_node
+ - log warning if duplicate key added to a data list
+ - netsnmp_add_list_data now calls preferred netsnmp_data_list_add_node
+
+2004-06-28 05:14 rstory
+
+ * local/mib2c-update:
+
+ add missing default
+
+2004-06-28 05:13 rstory
+
+ * agent/mibgroup/: if-mib/ifTable/.mib2c-updaterc,
+ if-mib/ifXTable/.mib2c-updaterc,
+ ip-forward-mib/inetCidrRouteTable/.mib2c-updaterc,
+ ip-forward-mib/ipCidrRouteTable/.mib2c-updaterc,
+ ip-mib/inetNetToMediaTable/.mib2c-updaterc,
+ ip-mib/ipAddressTable/.mib2c-updaterc:
+
+ rc file used for code generation
+
+2004-06-28 05:06 rstory
+
+ * agent/mibgroup/: if-mib/ifTable/.cvsignore,
+ if-mib/ifXTable/.cvsignore,
+ ip-forward-mib/inetCidrRouteTable/.cvsignore,
+ ip-forward-mib/ipCidrRouteTable/.cvsignore,
+ ip-mib/inetNetToMediaTable/.cvsignore,
+ ip-mib/ipAddressTable/.cvsignore:
+
+ ignore mib2c-update dirs
+
+2004-06-28 05:02 dts12
+
+ * agent/mibgroup/ucd-snmp/: proxy.c, proxy.h:
+
+ Automatically unregister proxy settings on agent shutdown or restart.
+ (Bug #748733)
+
+2004-06-28 04:59 dts12
+
+ * agent/mibgroup/ucd-snmp/: proxy.c, proxy.h:
+
+ Unregister proxy registrations when freeing the config settings.
+
+2004-06-28 04:52 dts12
+
+ * agent/mibgroup/agent/nsModuleTable.c:
+
+ Skip empty contexts when dumping the internal MIB registry.
+ (Probably as a result of removing registrations).
+
+2004-06-28 04:39 dts12
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ Drop special-case handling of "lo/lo0" since this gives bogus results
+ (Bug #422394)
+
+2004-06-28 04:21 dts12
+
+ * agent/helpers/bulk_to_next.c:
+
+ Don't try to set the OID of a variable that isn't there.
+ (Probably triggered by running GetBulk on a "non-simple"
+ view - see Bug #706089)
+
+2004-06-27 18:34 rstory
+
+ * agent/helpers/cache_handler.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ - rename netsnmp_cache_extract_from_reqinfo to netsnmp_cache_reqinfo_extract
+
+2004-06-27 18:33 rstory
+
+ * agent/mibgroup/mibII/: icmp.c, ip.c, tcp.c,
+ udp.c:
+
+ - use netsnmp_cache_is_valid instead of netsnmp_is_cache_valid
+
+2004-06-27 18:25 rstory
+
+ * agent/helpers/cache_handler.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ - add name parameter to netsnmp_cache_is_valid
+ - new netsnmp_cache_reqinfo_insert, netsnmp_cache_reqinfo_extract
+ - use CACHE_NAME:handlerName as data_list key for cache
+ - this fixes Bug #973728 the right way. see bug report for details
+
+2004-06-27 17:11 rstory
+
+ * agent/agent_handler.c,
+ include/net-snmp/agent/agent_handler.h:
+
+ - add netsnmp_request_remove_list_data
+
+2004-06-27 17:10 rstory
+
+ * agent/snmp_agent.c, include/net-snmp/agent/snmp_agent.h
+:
+
+ - add netsnmp_agent_remove_list_data
+
+2004-06-26 15:11 rstory
+
+ * snmplib/parse.c:
+
+ - add debug msg when module path changes
+ - tweak debug msg output indent
+
+2004-06-26 15:09 rstory
+
+ * snmplib/mib.c:
+
+ - make netsnmp_set_mib_directory and handle_mibs_conf consistent:
+ - '-/dir' adds /dir before existing dirs
+ - '+/dir' adds /dir after existing dirs
+ NOTE: this restores original behavior of '+' to that of 5.0.1. After
+ 5.0.2, if I read the code right, '+' behaviour on the cmd line and
+ in MIBDIRS was reversed and not consistent with handle_mibs_conf.
+
+2004-06-26 06:51 rstory
+
+ * snmplib/mib.c:
+
+ - make multiple mibdirs in conf files work with 'least surprise' (ie completely
+ replace mibdirs, unless + specified
+ - new mibdir behaviour: if - specified, add specified dirs before existing
+ ones instead of after
+
+2004-06-26 05:11 dts12
+
+ * agent/mibgroup/mibII/vacm_conf.c:
+
+ Support "multi-token" masks - i.e. using space (rather than
+ '.' or ':') to separate the mask octets. (See bug #706089)
+
+2004-06-26 05:05 dts12
+
+ * agent/helpers/cache_handler.c:
+
+ Work with the same cache structure consistently,
+ rather than re-extracting it from the reqinfo structure.
+ (Should fix Bug #973728)
+
+2004-06-25 04:47 dts12
+
+ * agent/mibgroup/mibII/icmp.c:
+
+ Fix the check for a valid ICMP cache
+ (Spotted by Oleg Ivanov)
+
+2004-06-25 02:10 dts12
+
+ * agent/mibgroup/mibII/ip.c:
+
+ A missing 'ipOutNoRoutes' value should throw an exception (not an error)
+ and allow any other IP-related varbinds in the same request to be processed.
+
+2004-06-24 13:04 nba
+
+ * snmplib/mib.c:
+
+ Make -Ir effective for a NetworkAddress
+
+2004-06-24 09:01 rstory
+
+ * agent/agent_handler.c:
+
+ - make clone_handler static, rename to _clone_handler
+ - delete handler & return null on create if name strdup fails
+ - possible fix fo 973728 ] main branch fails to load tcpConnect and udp Table
+ - copy flags in _clone_handler
+ - update netsnmp_handler_dup to use _clone_handler, netsnmp_handler_free
+
+2004-06-24 04:56 rstory
+
+ * agent/snmp_agent.c:
+
+ fix debug statement parameter
+
+2004-06-23 11:57 nba
+
+ * snmplib/asn1.c:
+
+ Doxygen internal documentation contributed by Cyril MARGARIA
+
+2004-06-23 10:45 nba
+
+ * snmplib/mib.c:
+
+ Fix bug 978087: bad index check for NetworkAddress
+
+2004-06-22 15:57 nba
+
+ * apps/snmptrapd.c:
+
+ Fix cpu-burning by running alarms. Diagnosed by rgreab@users.sourceforge.net
+
+2004-06-22 15:32 rstory
+
+ * local/mib2c-conf.d/mfd-access-container-cached-defines.m2i
+:
+
+ check for null pointer after allocation
+
+2004-06-22 15:32 rstory
+
+ * local/mib2c-conf.d/: mfd-interface.m2c, mfd-top.m2c
+:
+
+ - move data_init call into interface code
+ - call data_init before container_init
+
+2004-06-22 15:13 nba
+
+ * acconfig.h, configure, configure.in,
+ agent/mibgroup/ucd-snmp/diskio.c,
+ include/net-snmp/net-snmp-config.h.in:
+
+ Autodetect -ldevstat for FreeBSD 5 (as was done for 4)
+
+2004-06-22 06:38 dts12
+
+ * agent/helpers/old_api.c, snmplib/snmp_debug.c:
+
+ Fix handling of table row registration in old-API (Bug #702458)
+
+2004-06-22 02:03 dts12
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ Perl API for setting MIB parsing options (Bug #554749)
+
+2004-06-21 11:40 rstory
+
+ * agent/Makefile.in:
+
+ install mib_modules.h
+
+2004-06-21 10:51 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - add function to set valid_columns
+
+2004-06-21 06:31 dts12
+
+ * snmplib/snmp_enum.c:
+
+ Fix duplicate allocation of memory when defining enumeration lists
+ (Bug #923766)
+
+2004-06-21 03:12 dts12
+
+ * local/mib2c.access_functions.conf:
+
+ Correct description of return values to use (Bug #947926)
+
+2004-06-21 03:01 dts12
+
+ * snmplib/snmp_api.c:
+
+ Set the size for parsing an integer correctly (Bug #947403)
+
+2004-06-19 16:56 hardaker
+
+ * include/net-snmp/library/transform_oids.h:
+
+ Fix comment typo.
+
+2004-06-19 06:34 slif
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ modify patch 956272 to make it Solaris2 specific
+
+2004-06-18 13:38 rstory
+
+ * local/Makefile.in:
+
+ - install new mib2c-update bash script
+ - install top level mfd conf file
+ - make install target depend on 'made' perl scripts
+
+2004-06-18 12:48 hardaker
+
+ * snmplib/mib.c:
+
+ change u_int32_t to int32 to make it more portable
+
+2004-06-18 11:46 hardaker
+
+ * snmplib/read_config.c:
+
+ Removed a skip_token that was causing a follow-on token to be skipped.
+
+2004-06-18 11:45 hardaker
+
+ * mibs/rfclist:
+
+ updated rfc list for usm-aes
+
+2004-06-18 11:42 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/host/hr_storage.c,
+ include/net-snmp/net-snmp-config.h.in:
+
+ - Fixed usage of f_frsize under architectures that had it for statvfs
+ but not statfs.
+
+2004-06-18 10:35 hardaker
+
+ * include/net-snmp/library/transform_oids.h, mibs/Makefile.in
+, mibs/SNMP-USM-AES-MIB.txt, snmplib/snmpusm.c:
+
+ - Updated the AES OID to match the recently published USM/AES draft
+ - Added the USM-AES MIB to the list of mibs.
+
+2004-06-18 09:41 rstory
+
+ * local/mib2c:
+
+ - add new mib2c-data dir to search path
+
+2004-06-18 09:41 rstory
+
+ * local/Makefile.in:
+
+ - add install/uninstall for mfd mib2c files
+
+2004-06-18 07:30 dts12
+
+ * snmplib/mib.c:
+
+ Support for interpreting InetAddressType/InetAddress indexes within an OID.
+ (Patch #841625 from Yixiong Zou)
+
+2004-06-18 07:03 dts12
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Recognise Infiniband interfaces
+ (Patch #970617 from Kanoj Sarcar)
+
+2004-06-18 06:54 dts12
+
+ * configure.in, configure:
+
+ Fix handling of --enable-local-smux option
+ (Patch #949808 from Erik Änggård)
+
+2004-06-18 06:46 dts12
+
+ * apps/snmpusm.c:
+
+ Add support for activating and deactivating users,
+ necessary for full compliance with RFC 3414. (Patch #943762)
+
+2004-06-18 06:38 dts12
+
+ * testing/tests/: T150solarishostcpu, T151solarishostdisk
+, T152hostuptime, T153solarisswap:
+
+ Use transport variables for testing rather than hardwiring udp:localhost
+ (Patch #940302 from Mike Slifcak)
+
+2004-06-18 06:31 dts12
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Use /dev/arp rather than /dev/ip, since this works properly with multiple zones.
+ (Patch #940025 from Bob Rowlands)
+ [No idea what this means, but it sounds impressive....]
+
+2004-06-18 06:25 dts12
+
+ * snmplib/pkcs.c:
+
+ Initialise pSlotList to guard against freeing garbage.
+ (Patch #938139 from Bob Rowlands)
+
+ If garbage isn't kept strictly controlled,
+ who knows what state society might get into....
+ (Homespun philosophical musings from Dave Shield)
+
+2004-06-18 06:17 dts12
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c:
+
+ Don't set the index value until we've checked this is a valid request.
+ (Patch #930712 from Jochen/Christopher Price)
+
+2004-06-18 06:09 dts12
+
+ * snmplib/vacm.c:
+
+ Don't include the viewTree length when saving a persistent vacmView
+ (Patch #921279 from Bob Rowlands)
+
+2004-06-18 05:58 dts12
+
+ * agent/mibgroup/: util_funcs.c, util_funcs.h:
+
+ Pass *pointers* to reload/compare functions into Initialise_Table
+ (Patch #922519 from Robert Wilcox)
+
+2004-06-17 20:57 slif
+
+ * testing/tests/T150solarishostcpu:
+
+ per Bruce Shaw, include the OID for CPU device in the match string.
+
+2004-06-17 19:42 slif
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ apply patch 956272 - use correct structure member for Solaris hrPartitionSize
+
+2004-06-17 19:09 rstory
+
+ * local/mib2c:
+
+ - document node.description
+
+2004-06-17 19:09 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c:
+
+ - fix return code for malloc failure
+
+2004-06-17 19:02 rstory
+
+ * agent/helpers/table_container.c:
+
+ - convert debug code that should have never been checked in to netsnmp_assert
+
+2004-06-17 18:58 rstory
+
+ * agent/helpers/table.c:
+
+ - add lots of debug for tracking index processing
+ - make code and comments consistent with each other
+ - fix a 0-based vs 1-based problems when using valid_column verification
+ - fix comparison to wrong variable
+ - due to other fixes, init tbl_req_info->colnum earlier
+
+2004-06-17 18:50 rstory
+
+ * agent/helpers/baby_steps.c:
+
+ - update flow chart
+ - swap row create / check values; not quite sure if I should, though
+
+2004-06-17 18:46 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/: ifXTable.c, ifXTable.h
+, ifXTable_interface.c:
+
+ - update generated code
+ - ifdef out commit code (coming soon)
+
+2004-06-17 18:39 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.h:
+
+ - update generated code
+
+2004-06-17 18:39 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_data_access.c:
+
+ - update generated code
+ - make sure to set dont invalidateon set cache flag
+
+2004-06-17 18:38 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.c:
+
+ - update generated code
+ - implement set of admin status
+
+2004-06-17 18:36 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_interface.c:
+
+ - update generated code
+ - special case processing for ifadmin status (bypass sizeof check)
+
+2004-06-17 18:26 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_linux.c:
+
+ -use new functions netsnmp_access_interface_ioctl_flags_set,
+ netsnmp_access_interface_ioctl_mtu_get
+ -new function netsnmp_arch_set_admin_status
+
+2004-06-17 18:25 rstory
+
+ * agent/mibgroup/if-mib/data_access/: interface_ioctl.c,
+ interface_ioctl.h:
+
+ -new functions netsnmp_access_interface_ioctl_flags_set,
+ netsnmp_access_interface_ioctl_mtu_get
+ -move whole functions inside ifdef conditional, to force link errors instead
+ of a false sense of security that an ioctl is available
+
+2004-06-17 18:22 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface.h:
+
+ define private 'arch' function prototypes to quell compiler warnings
+
+2004-06-17 18:20 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c,
+ include/net-snmp/data_access/interface.h:
+
+ -rename stats struct members to not match macro names
+ -add pointer & macros for old stats to interface entry
+ -move conf override struct/routines here
+ -add init routine for configure to detect & call
+ -add netsnmp_access_interface_set_admin_status
+ -add netsnmp_access_interface_entry_update_stats to deal with 32bit counter
+ wraps, unless 64bit counters are detected
+
+2004-06-17 18:12 rstory
+
+ * include/net-snmp/library/int64.h, snmplib/int64.c:
+
+ new functions u64Incr, u64UpdateCounter, u64Copy, netsnmp_c64_check_for_32bit_wrap
+
+2004-06-17 17:36 slif
+
+ * snmplib/snmp_api.c:
+
+ test session ptr before using. fixes bug #975063 snmp_sess_close NULL deref
+
+2004-06-17 09:51 hardaker
+
+ * perl/agent/agent.pm:
+
+ Updated the documentation to make it much more extensive and complete.
+
+2004-06-17 06:39 hardaker
+
+ * net-snmp-config.in:
+
+ Patch 968839: net-snmp-config fails to print -lwrap
+
+2004-06-17 06:38 hardaker
+
+ * perl/agent/agent.pm:
+
+ Patch #973702: POD documentation patch from Toni Willberg
+
+2004-06-16 07:42 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ gettable changes:
+ - Don't retrieve indexes since we calculate them.
+ - Bug fix for self-specified column lists.
+
+2004-06-16 07:22 hardaker
+
+ * snmplib/read_config.c:
+
+ Use copy_nword for all read_config auto-parsing of tokens to help
+ strip quotes if they were used even for integers.
+
+2004-06-15 19:55 rstory
+
+ * snmplib/mt_support.c:
+
+ fix library resource locks, as noted on coders by Ying Hu
+
+2004-06-15 17:27 slif
+
+ * testing/tests/: T023snmpv3getMD5AES, T023snmpv3getMD5DES
+:
+
+ correct var PRIVTESTARGS (was PRIVTESTFLAGS)
+
+2004-06-15 15:40 slif
+
+ * win32/dist/README.build.win32.txt:
+
+ apply patch #973572 per Alex Burger to clarify naming of the package, etc.
+
+2004-06-15 07:27 dts12
+
+ * local/mib2c:
+
+ Consistency tweaks to the usage output message.
+
+2004-06-15 06:43 slif
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ apply updated patch attached to bug#758437
+ use SNMP_FREE to manage buffer pointer
+ open socket before increasing buffer size
+
+2004-06-15 05:55 dts12
+
+ * agent/mibgroup/examples/notification.c,
+ mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ Define the example notification as a notification (using an RFC2576-safe
+ OID), rather than a MIB object, and define example compulsory and optional
+ payload objects. Tweak the example code to use these new definitions.
+
+2004-06-15 04:29 slif
+
+ * agent/mibgroup/host/: hr_filesys.c, hr_storage.c:
+
+ apply patch from trontor to fix bug 942498 NetBSD 2.0D and above use statvfs
+
+2004-06-14 12:02 slif
+
+ * win32/: Makefile.in, dist/README.build.win32.txt,
+ dist/installer/net-snmp.nsi:
+
+ apply patch #972715 Win32 build: makefile, readme and .nsi script changes
+ these back out two previous changes and fixes a problem creating snmpconf.bat
+
+2004-06-14 10:34 hardaker
+
+ * perl/agent/: agent.pm, agent.xs, test.pl:
+
+ Implemented $request->setError() to set error codes for requests.
+
+2004-06-14 10:03 slif
+
+ * agent/mibgroup/mibII/ipv6.c:
+
+ patch from Mathias Scheler fixes bug #805956 by altering conditional
+ checks for NetBSD and Darwin defines.
+
+2004-06-12 08:04 slif
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ dyslexic s-M-n-p to s-n-M-p
+
+2004-06-12 08:01 slif
+
+ * README.win32, win32/dist/README.txt,
+ win32/dist/installer/net-snmp.nsi:
+
+ patch 971263 Windows installer script change component label+descr
+
+2004-06-12 07:55 slif
+
+ * win32/: build.bat, install-net-snmp.bat,
+ nmakeperl.bat, dist/installer/net-snmp.nsi,
+ local/mib2c.bat, local/snmpconf.bat,
+ local/traptoemail.bat:
+
+ convert .bat files to use DOS CR-LF line termination.
+ apply patch 971471 NSI installer script fixes addressing line-end problems.
+
+2004-06-11 17:38 slif
+
+ * win32/libnetsnmptrapd/Makefile.in:
+
+ remove "erase watcher.obj", for a file that is managed in libhelpers project.
+
+2004-06-11 15:45 rstory
+
+ * local/mib2c-conf.d/mfd-access-container-cached-defines.m2i:
+
+ default cache to not invalidate on set
+
+2004-06-11 15:39 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - default to allocated undo context, even if data context is embedded
+ - fix misassigned callback function
+ - add missing braces for multiline conditional
+
+2004-06-11 15:37 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ - default to allocated undo context, even if data context is embedded
+ - add code to handle per column behavior on commit
+ - add note on undo context when data init is set
+
+2004-06-11 15:35 rstory
+
+ * local/mib2c-conf.d/: m2c_setup_table.m2i, mfd-data-get.m2c
+, mfd-interactive-setup.m2c, mfd-top.m2c:
+
+ - default to allocated undo context, even if data context is embedded
+
+2004-06-11 15:32 rstory
+
+ * local/mib2c-conf.d/generic-data-allocate.m2i:
+
+ - tweak to work even for generated data contexts
+ - fix var typo, comment typo
+
+2004-06-11 15:30 rstory
+
+ * local/mib2c-conf.d/default-mfd-top.m2c:
+
+ - remove overly confusing method for changing defaults, because it was
+ conflicting w/command line version. maybe revisit later
+ - default (false) for new undo_embed
+
+2004-06-11 13:14 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ Return already gathered results even if getbulk fails to return the
+ expected data (typically due to end-of-mib conditions).
+
+2004-06-11 13:13 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ Mention that the configure script version number needs changing.
+
+2004-06-11 10:18 slif
+
+ * win32/Makefile.in:
+
+ patch 971113 "nmake clean" visits libsnmp and libsnmp_dll every time.
+
+2004-06-10 21:05 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c,
+ include/net-snmp/data_access/interface.h:
+
+ - new netsnmp_access_interface_entry_guess_speed
+ - new netsnmp_access_interface_entry_overrides
+ - restore if_admin_status
+ - add platform specific if_flags, & define for flags to indicate availability
+ - specify all 4 hex byes for flag defines
+
+2004-06-10 21:01 rstory
+
+ * agent/mibgroup/if-mib/data_access/: interface.h,
+ interface_linux.c:
+
+ - linux requires new ioctl interface access
+ - use ioctl for hwaddr, if_flags
+ - guess if type based on name if not known
+ - move getIfSpeed code & rename netsnmp_access_interface_linux_get_if_speed
+
+2004-06-10 20:47 rstory
+
+ * agent/mibgroup/if-mib/data_access/: interface_ioctl.c,
+ interface_ioctl.h:
+
+ - new ioctl interface access
+
+2004-06-10 20:44 rstory
+
+ * agent/mibgroup/if-mib/ifTable/: ifTable.c, ifTable.h:
+
+ - move admin status back to interface entry
+ - use description from interface entry
+
+2004-06-10 10:59 slif
+
+ * win32/dist/README.build.win32.txt:
+
+ per Andy Smith, apply patch #970480 Win32 README.build.win32.txt update
+
+2004-06-09 20:28 slif
+
+ * agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/ucd-snmp/diskio.c,
+ include/net-snmp/system/freebsd4.h,
+ include/net-snmp/system/freebsd5.h:
+
+ apply changes identified in patch #969338 patches for FreeBSD 5.x successful build
+
+2004-06-09 18:55 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/: ifXTable.c, ifXTable.h
+, ifXTable_constants.h, ifXTable_data_access.c,
+ ifXTable_data_access.h, ifXTable_interface.c,
+ ifXTable_interface.h:
+
+ - Update for MFD generated code changes + switch to a mixed-mode data context +
+ IF-MIB changes
+ - remove ability to build independent of ifTable
+
+2004-06-09 18:48 rstory
+
+ * agent/mibgroup/if-mib/ifTable/: ifTable.c, ifTable.h,
+ ifTable_constants.h, ifTable_data_access.c,
+ ifTable_data_access.h, ifTable_interface.c,
+ ifTable_interface.h:
+
+ - Update for MFD generated code changes + switch to a mixed-mode data context +
+ IF-MIB changes
+ - use new param to save interface entry w/generated context
+ - for data from netsnmp_interface_entry, use #defines so generated code doesn't
+ change (eg define ifName ifentry.if_name). works for most cases
+ - add generated storage/defines for ifXTable columns to data context
+ - change cache timeout to 30 seconds
+ - use new cache features to auto load and auto refresh cache
+ - use new UNKNOWN ifOperStatus for interfaces that vanish
+ - use new interface copy function when updating cache
+ - only update LastChanged on ifOperStatus changes
+
+2004-06-09 18:37 slif
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ per Andy Smith, apply patch#968800 SNMPCONFPATH fix for Win32 binary installer
+ and patch #970012 Remove snmpconf.pl from Windows installer
+
+2004-06-09 18:30 rstory
+
+ * agent/mibgroup/if-mib/: ifTable/default-table-ifTable.m2d,
+ ifXTable/default-table-ifXTable.m2d:
+
+ - switch to a mixed-mode data context
+ - chg data context to default generated
+ - don't allocate data context
+ - do request a init call for new contexts
+
+2004-06-09 18:26 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c,
+ include/net-snmp/data_access/interface.h:
+
+ - remove mib specific stuff (if_alias, if_admin_status, if_link_updown_trap)
+ (still not sure about last changed and discontinuity)
+ - new function to copy interface entry data
+ - make callback functions static
+
+2004-06-09 17:53 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - if data_init set, add user void pointer to allocate_rowreq_ctx, and pass it
+ to rowreq_ctx_init
+ - fix two typos in code only generated when data_init is set
+ - release undo data in free_rowreq_ctx
+ - don't generate undo setup code for non-settable columns
+
+2004-06-09 17:49 rstory
+
+ * local/mib2c-conf.d/: mfd-access-container-cached-defines.m2i
+, mfd-access-unsorted-external-defines.m2i,
+ mfd-top.m2c:
+
+ - if data_init set, add user void pointer to allocate_rowreq_ctx, and pass it
+ to rowreq_ctx_init
+
+2004-06-09 17:46 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ - convert contant prefixes to uppercase
+ - add '_val' suffix to all node parameter names
+
+2004-06-09 17:44 rstory
+
+ * local/mib2c-conf.d/details-node.m2i:
+
+ add description
+
+2004-06-09 02:37 slif
+
+ * agent/mibgroup/util_funcs.c:
+
+ per Mike Heisler, fix bug #936483 (restore ssize_t).
+
+2004-06-08 21:55 slif
+
+ * acconfig.h:
+
+ Update to win32 ifdef to include other environments
+
+2004-06-08 13:56 slif
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ fix build failure (no such member kp_comm, etc.) for FreeBSD 5.x
+
+2004-06-08 13:53 slif
+
+ * agent/mibgroup/mibII/tcpTable.c:
+
+ fix build failure (no such member xt_tp) for FreeBSD 4.x and FreeBSD 5.x
+
+2004-06-08 13:50 slif
+
+ * agent/mibgroup/mibII/udpTable.c:
+
+ fix compile failure (no inp_next in struct inpcb) for FreeBSD 4.x and 5.x
+
+2004-06-08 13:36 slif
+
+ * agent/mibgroup/host/hr_print.c:
+
+ fix bug 895679 by ensuring upper limit tracks buffer allocation/free actions.
+
+2004-06-08 12:03 slif
+
+ * include/net-snmp/system/freebsd5.h:
+
+ remove unnecessary undef of STRUCT_STATFS_HAS_F_FAVAIL (never is defined).
+
+2004-06-08 10:50 rstory
+
+ * local/mib2c-conf.d/: mfd-data-set.m2c, parent-set.m2i
+:
+
+ - comments about flag and defines for tracking which columns have been set
+ - missed a few error define updates
+
+2004-06-08 10:49 rstory
+
+ * local/mib2c-conf.d/: generic-table-oids.m2c,
+ mfd-interface.m2c, mfd-top.m2c,
+ parent-dependencies.m2i:
+
+ add flag and defines for tracking which columns have been set
+
+2004-06-07 19:52 slif
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ fix setting of OSTYPE for FreeBSD build platforms.
+
+2004-06-07 19:47 slif
+
+ * include/net-snmp/system/freebsd5.h:
+
+ create system include file for FreeBSD 5.x build platforms.
+
+2004-06-07 19:44 slif
+
+ * agent/mibgroup/ucd-snmp/memory_freebsd2.c:
+
+ remove unused code in swapmode
+
+2004-06-07 12:31 rstory
+
+ * snmplib/read_config.c:
+
+ recheck persistent path in loop, since it might change
+
+2004-06-07 12:24 rstory
+
+ * include/net-snmp/agent/agent_handler.h:
+
+ specify full 32 bits for handler flags
+
+2004-06-07 12:15 rstory
+
+ * agent/helpers/cache_handler.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ - always consider cache w/timeout of -1 as expired (load cache every request)
+ - add NETSNMP_CACHE_DONT_FREE_BEFORE_LOAD & NETSNMP_CACHE_AUTO_RELOAD flags
+ - add example usages scenarios and suggested flags
+ - add netsnmp_cache_timer_start & netsnmp_cache_timer_stop
+ - clear expired flag after cache_load
+ - add another note about potential cache issue w/delegated requests
+ (some locking/reference count mechanism is needed)
+
+2004-06-07 11:50 rstory
+
+ * net-snmp-config.in:
+
+ - accept abbreviated versions of some flags
+ - point indent-optoins at a real directory
+ - don't substitute prefix multiple times
+
+2004-06-07 11:40 rstory
+
+ * snmplib/snmp_alarm.c:
+
+ fix comment ref for integer from NULL to 0
+
+2004-06-07 11:39 rstory
+
+ * dist/cvsup:
+
+ skip scp if bac rc from cvs command
+
+2004-06-07 11:38 rstory
+
+ * local/mib2c.array-user.conf:
+
+ reame $i_IDX2 to $I_CUSTOM_SORT to reduce confusion
+
+2004-06-07 11:36 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ - use new simplified errors
+ - add missing undo_commit, undo_cleanup states
+ - move pre/post request init outside mib2c conditional
+ - move undo data context release to undo_cleanup
+ - validate rc from node check value routine
+
+2004-06-07 11:32 rstory
+
+ * local/mib2c-conf.d/node-set.m2i:
+
+ - use new simplified errors
+ - more help text for distinction between wrongValue/inconsistentValue
+
+2004-06-07 11:31 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ - use new simplified errors
+ - more help text for validate_index
+ - include baby-steps flow-chart before set functions
+ - add missing undo_commit, undo_cleanup states
+
+2004-06-07 11:26 rstory
+
+ * local/mib2c-conf.d/node-varbind-validate.m2i:
+
+ use SNMPv2 errors instead of v1 errors
+
+2004-06-07 11:25 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ - turn off indent around config_require (doesn't like '/' or '-' chars)
+ - simplify some error define names
+
+2004-06-07 11:21 rstory
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+
+ update some question/help text
+
+2004-06-07 11:20 rstory
+
+ * local/mib2c-conf.d/generic-table-constants.m2c:
+
+ restore foreach table
+
+2004-06-07 11:17 rstory
+
+ * local/mib2c.mfd.conf:
+
+ revert changes for setting some mib2c defaults (use mib2c -S xxx instead)
+
+2004-06-07 11:13 rstory
+
+ * local/mib2c-update:
+
+ pass extra args to mib2c
+
+2004-06-07 11:10 rstory
+
+ * local/mib2c:
+
+ - change example comment block so indent will indent it
+ - skip substitution checks if they won't match
+ - apply dave's hack for 939041: ... bad macro name iff enum contains hyphen
+
+2004-06-07 08:30 dts12
+
+ * agent/mibgroup/agent/: extend.c, extend.h:
+
+ Backwards-compatability implementation of the UCD-SNMP-MIB::extTable
+ (if the ucd-snmp/extensible module isn't configured in).
+
+2004-06-07 01:21 dts12
+
+ * agent/mibgroup/: util_funcs.c, util_funcs.h,
+ ucd-snmp/extensible.c, ucd-snmp/extensible.h,
+ ucd-snmp/pass.h, ucd-snmp/pass_persist.h:
+
+ Move 'get_exten_instance' into the utility function file,
+ so that the two pass handlers aren't dependent on 'extensible'
+
+2004-06-06 23:47 nba
+
+ * snmplib/parse.c:
+
+ Fix warnings about missing modules when there are replacements for them
+
+2004-06-06 16:41 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ cvs server name change
+
+2004-06-04 13:44 hardaker
+
+ * local/mib2c.genhtml.conf:
+
+ remove redundant reference row from output
+
+2004-06-04 13:39 hardaker
+
+ * mibs/nodemap:
+
+ added a nodemap for html output generation
+
+2004-06-04 13:38 hardaker
+
+ * local/mib2c.genhtml.conf:
+
+ make html output display the reference in italics in the description fields.
+
+2004-06-04 13:37 hardaker
+
+ * local/mib2c, man/mib2c.conf.5:
+
+ make $x.reference expand to a objects reference
+
+2004-06-04 13:36 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ make SNMP::MIB objects handle a 'reference' keyword.
+
+2004-06-04 13:34 hardaker
+
+ * include/net-snmp/library/parse.h, snmplib/parse.c:
+
+ - Saved the value of parsed reference clauses.
+
+2004-06-04 05:51 nba
+
+ * apps/snmptrapd_handlers.c:
+
+ A little error-checking when forwarding, and change fprintf to snmp_log
+
+2004-06-04 03:17 nba
+
+ * apps/snmptrapd_handlers.c:
+
+ Properly free printbuffer
+
+2004-06-04 03:09 nba
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ Make sure all registration are removed for exec's
+
+2004-06-04 02:45 nba
+
+ * snmplib/snmp_api.c:
+
+ Protect against garbled packets with bad packet types
+
+2004-06-04 01:57 nba
+
+ * man/snmp_api.3.def:
+
+ Simple spelling fix
+
+2004-06-04 01:15 nba
+
+ * Makefile.in:
+
+ Remove dup installation of scripts after addition of --disable-scripts
+
+2004-06-04 00:20 slif
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ undo previous change, since introduction of freebsd5.h header defines freebsd4.
+
+2004-06-03 12:59 slif
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ fix bug #943351 by considering freebsd5 when declaring "hz".
+
+2004-06-02 17:18 rstory
+
+ * local/mib2c-conf.d/: default-mfd-top.m2c, mfd-data-get.m2c
+, mfd-readme.m2c:
+
+ fix a few missed processing_type tweaks
+
+2004-06-02 05:37 slif
+
+ * README.win32, perl/SNMP/README, win32/Configure
+, win32/build.pl, win32/install-net-snmp.bat,
+ win32/nmakeperl.bat, win32/dist/README.build.win32.txt
+, win32/dist/README.txt,
+ win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/net-snmp-config.h.in:
+
+ for win32 doc and scripts, match the base directory used as current default.
+
+2004-06-01 02:32 dts12
+
+ * agent/mibgroup/agent/extend.c:
+
+ Handle row deletion (and failed row creation) properly.
+ Move row creation and new value assignments to their natural
+ passes, with a second (separate) check for row validity.
+ (following Robert's suggestion)
+
+2004-06-01 02:29 dts12
+
+ * agent/mibgroup/agent/extend.c:
+
+ Fix compilation problems following the addition of 'relocatability'.
+ Ensure that the "standard" location is registered automatically
+ (so the numRows object is present, even with an otherwise empty table).
+
+2004-05-27 20:06 slif
+
+ * README.win32:
+
+ update status to reflect snmptrapd can be run as a Windows service.
+
+2004-05-27 05:37 dts12
+
+ * COPYING:
+
+ Correct the number of copyright notices
+ listed, and the text of the Sparta one.
+ (I trust this is OK, Wes!)
+
+2004-05-26 01:39 dts12
+
+ * README.agentx:
+
+ Remove warnings of AgentX "beta-status".
+ (I know I'm going to regret doing this....)
+
+2004-05-25 08:54 dts12
+
+ * snmplib/snmp_parse_args.c:
+
+ Accept the same security level tokens as used in the
+ "r[wo]user" and "access" directives.
+
+2004-05-24 03:39 dts12
+
+ * agent/mibgroup/agent/: extend.c, extend.h:
+
+ Implement relocatable form of agent extension table.
+
+2004-05-24 03:35 dts12
+
+ * agent/mibgroup/agent/extend.c:
+
+ Implement 'run-on-write' support, and use it to handle a
+ new 'execFix'-style directive.
+
+2004-05-23 10:41 slif
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ per Andy Smith: apply patch [957942] Win32 service install pause
+
+2004-05-21 10:10 rstory
+
+ * agent/snmp_agent.c:
+
+ check for/process delegated requests in agent_check_and_process
+
+2004-05-20 21:09 slif
+
+ * man/Makefile.in:
+
+ ignore failure result should cvs checkout condition not apply.
+ This permits builds outside CVS tree to succeed.
+
+2004-05-20 16:01 hardaker
+
+ * local/mib2c.genhtml.conf:
+
+ Minor wording: added table name to "index" and "other columns" line.
+
+2004-05-20 15:47 hardaker
+
+ * local/Version-Munge.pl:
+
+ remove changes accidentially applied that weren't ready
+
+2004-05-20 15:05 hardaker
+
+ * local/: Version-Munge.pl, mib2c.genhtml.conf:
+
+ - added support for notification descriptions
+
+2004-05-19 18:09 slif
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ add get_tc_description and init_usm_conf to the exported symbols list.
+
+2004-05-19 18:02 slif
+
+ * snmplib/system.c:
+
+ Permit Cygwin build to take advantage of backslash pruning and single letter volume specifier.
+
+2004-05-19 17:54 slif
+
+ * README.win32, win32/dist/README.txt,
+ win32/dist/htmlhelp/Configuration_Overview.html:
+
+ per Alex Burger: snmpconf dash little-eye
+
+2004-05-19 16:26 rstory
+
+ * snmplib/read_config.c:
+
+ fix parsing of explicit handler types
+
+2004-05-19 13:14 hardaker
+
+ * man/mib2c.conf.5:
+
+ update after a mib2c update
+
+2004-05-19 13:13 hardaker
+
+ * local/mib2c.genhtml.conf:
+
+ - support a table of contents
+ - name all nodes using html names
+ - support a tree-view
+ - misc bug fixes
+
+2004-05-19 13:12 hardaker
+
+ * local/mib2c:
+
+ - support "foreach $i stuff LIST"
+ - use unshift instead of push for calldefine to ensure proper recursion
+ - regexp munging
+
+2004-05-19 10:30 rstory
+
+ * agent/helpers/cache_handler.c:
+
+ load the cache for reserve1 (otherwise a get is required before set works)
+
+2004-05-18 13:52 rstory
+
+ * local/mib2c-conf.d/default-mfd-top.m2c:
+
+ allow for user override of mfd option defaults
+
+2004-05-18 13:51 rstory
+
+ * local/mib2c-conf.d/mfd-interactive-setup.m2c:
+
+ allow for interactive setup of mfd options
+
+2004-05-18 13:50 rstory
+
+ * local/mib2c-conf.d/m2c_setup_table.m2i:
+
+ allow for interactive setup of options; use $context instead of $table
+
+2004-05-18 13:48 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ use $context instead of $table
+
+2004-05-18 13:46 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ set varbind error on column set error; always call row_prep; comment tweaks; use $context
+ instead of $table
+
+2004-05-18 13:41 rstory
+
+ * local/mib2c-conf.d/mfd-data-set.m2c:
+
+ set varbind error on column set error; comment tweaks; use $context instead of
+ $table; separate mfd_processing_types from m2c_processing_type
+
+2004-05-18 13:39 rstory
+
+ * local/mib2c-conf.d/: mfd-data-get.m2c, mfd-top.m2c:
+
+ comment tweaks; use $context instead of $table; separate mfd_processing_types
+ from m2c_processing_type
+
+2004-05-18 13:10 rstory
+
+ * local/mib2c-conf.d/mfd-data-access.m2c:
+
+ comment tweaks; use $context instead of $table; remove data setup from row_prep
+
+2004-05-18 11:43 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-defines.m2i
+:
+
+ comment tweaks; use $context instead of $table
+
+2004-05-18 11:38 rstory
+
+ * local/mib2c-conf.d/mfd-access-container-cached-defines.m2i:
+
+ comment tweaks; use $context instead of $table; default to setting up data
+ context in cache_load, instead of row_prep
+
+2004-05-18 11:27 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes-set.m2i:
+
+ comment tweaks; assume mapping already done; set len to max size before
+ checking if it is large enough to hold a value
+
+2004-05-18 11:20 rstory
+
+ * local/mib2c-conf.d/generic-ctx-get.m2i:
+
+ comment tweaks; log error if not enough space for var
+
+2004-05-18 11:20 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes.m2i:
+
+ use $context instead of $table; comment tweaks
+
+2004-05-18 11:12 rstory
+
+ * local/mib2c-conf.d/syntax-RowStatus-get.m2i:
+
+ fix case of some constants
+
+2004-05-18 10:44 rstory
+
+ * local/mib2c-conf.d/: generic-table-constants.m2c,
+ generic-table-enums.m2c, generic-table-oids.m2c:
+
+ use $context instead of $table; make generic-table-(enums|oids) only run on current
+ table; add table loop in generic-table-constants
+
+2004-05-18 10:37 rstory
+
+ * local/mib2c-conf.d/node-set.m2i:
+
+ add debug tracing for set functions
+
+2004-05-18 10:35 rstory
+
+ * local/mib2c-conf.d/: details-table.m2i,
+ generic-ctx-copy.m2i, generic-data-allocate.m2i,
+ generic-data-context.m2i,
+ generic-table-indexes-varbind-setup.m2i, mfd-readme.m2c
+:
+
+ comment tweaks; chg $table to $context
+
+2004-05-18 02:08 dts12
+
+ * agent/mibgroup/agent/: extend.c, extend.h:
+
+ Write support, including RowStatus-based creation of new (volatile) rows.
+ The code needs a bit of tidying up, but seems to be reasonably functional.
+
+2004-05-18 02:01 dts12
+
+ * mibs/NET-SNMP-EXTEND-MIB.txt:
+
+ Minor tweaks.
+
+2004-05-17 20:06 slif
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ per Andy Smith, apply patch # 955579 to complete minor changes to install tabs.
+
+2004-05-17 19:58 slif
+
+ * win32/dist/: README.build.win32.txt,
+ htmlhelp/Introduction.html, htmlhelp/Net-SNMP.hhc,
+ htmlhelp/Net-SNMP.hhp:
+
+ Adjust usage to account for removed space from pathnames of HTML help files.
+
+2004-05-17 19:52 slif
+
+ * win32/dist/htmlhelp/: Configuration Overview.html,
+ Configuration_Overview.html, Developer FAQ.html,
+ Developer_FAQ.html, Help Caveats.html,
+ Help_Caveats.html:
+
+ remove space from pathnames of HTML help files.
+
+2004-05-17 15:45 slif
+
+ * win32/dist/README.txt:
+
+ per Alex Burger, one-line change (line 159, change period to colon).
+
+2004-05-17 07:13 slif
+
+ * README.win32, win32/Makefile.in,
+ win32/install-net-snmp.bat,
+ win32/dist/README.build.win32.txt, win32/dist/README.txt
+, win32/dist/htmlhelp/Configuration Overview.html,
+ win32/local/Makefile.in, win32/local/mib2c.bat,
+ win32/local/snmpconf.bat, win32/local/traptoemail.bat
+:
+
+ per Alex Burger: test existence of perl; provide access to more Perl programs.
+
+2004-05-17 06:44 slif
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ per Andy Smith: apply patch #955255 to enhance the NSIS installer.
+
+2004-05-17 05:35 dts12
+
+ * agent/mibgroup/agent/: extend.c, extend.h:
+
+ Implement the multi-row output MIB table.
+
+2004-05-14 04:22 dts12
+
+ * mibs/NET-SNMP-EXTEND-MIB.txt:
+
+ Oops! Close - but it's a good job I don't smoke....
+
+2004-05-13 21:23 slif
+
+ * win32/dist/README.build.win32.txt:
+
+ per AlexB: describe further details of building (creating empty files, etc).
+
+2004-05-13 21:13 slif
+
+ * win32/dist/README.txt:
+
+ per AlexB: added section "co-existing with m$ services"
+
+2004-05-13 20:29 slif
+
+ * win32/dist/installer/: Add2Path.nsi, SetEnVar.nsi,
+ net-snmp-header1.bmp, net-snmp.nsi:
+
+ Per Andy Smith: patch [952509] to fix link names for the service registration batch files.
+
+2004-05-13 20:12 slif
+
+ * win32/dist/README.build.win32.txt:
+
+ Per Alex Burger and Andy Smith: updated instructions for creating a win32 installable package.
+
+2004-05-13 20:04 slif
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/data_access/interface.h,
+ include/net-snmp/data_access/ipaddress.h,
+ include/net-snmp/data_access/route.h:
+
+ remove NETSNMP_CPP_WRAP macros
+
+2004-05-13 05:09 dts12
+
+ * agent/mibgroup/agent/: extend.c, extend.h:
+
+ Split new extension table into two (configuration and output).
+ Implement scalar to track the number of entries.
+ Parse multi-line output to implement 'nsExtendOutput1Line' object.
+
+2004-05-13 04:06 dts12
+
+ * mibs/NET-SNMP-EXTEND-MIB.txt:
+
+ Separate configuration and output into separate tables, as suggested.
+ Drop 'output length' object as probably unnecessary.
+ New scalar to track the number of entries in the table.
+ This also means that this group will not be empty,
+ even when no extensions are configured for a given agent.
+ (I'm still not happy with some of the names, though!)
+
+2004-05-11 03:59 slif
+
+ * snmplib/winservice.c:
+
+ cleanup error messages. clarify SCM interactions with worker thread in comments.
+
+2004-05-11 03:12 dts12
+
+ * mibs/NET-SNMP-EXTEND-MIB.txt:
+
+ Fix some SMI errors.
+ Wes can be a picky beggar at times....
+
+2004-05-10 17:50 slif
+
+ * win32/dist/scripts/net-snmp-perl-test.pl:
+
+ per Alex Burger - add missing test script.
+
+2004-05-10 13:49 hardaker
+
+ * win32/dist/README.build.win32.txt:
+
+ Another doc update from Alex
+
+2004-05-10 03:45 dts12
+
+ * agent/mibgroup/agent/: extend.c, extend.h:
+
+ Preliminary implemtation of new nsExtendTable
+
+2004-05-10 03:44 dts12
+
+ * mibs/NET-SNMP-EXTEND-MIB.txt:
+
+ Revised MIB for scripted extensions.
+ (To replace UCD-SNMP-MIB::extTable)
+
+2004-05-10 03:41 dts12
+
+ * snmplib/read_config.c:
+
+ Defensive programming - don't crash on NULL parameters.
+
+2004-05-10 03:40 dts12
+
+ * agent/helpers/cache_handler.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ External API for checking and reloading a cached value.
+ Weaken the links between this helper and 'nsCacheTable'.
+
+2004-05-07 15:41 nba
+
+ * mibs/rfclist:
+
+ Remove duplicate entry for FRNETSERV-MIB
+
+2004-05-07 15:19 nba
+
+ * mibs/: EtherLike-MIB.txt, IANAifType-MIB.txt,
+ rfcmibs.diff:
+
+ Update to current MIB versions
+
+2004-05-07 15:04 nba
+
+ * man/snmpcmd.1.def:
+
+ The word PREFIX is not endangered for substitution, so make it look normal
+
+2004-05-07 14:34 nba
+
+ * snmplib/mib.c:
+
+ Fix for truncated oid when using OBJECT IDENTIFIER as index
+
+2004-05-07 14:15 nba
+
+ * apps/snmptable.c:
+
+ Fix to allow specifying numeric oid for table
+
+2004-05-06 20:15 slif
+
+ * perl/SNMP/: README, SNMP.pm:
+
+ Per Alex Burger, add names to acknowledge the individual contributors.
+
+2004-05-06 19:41 slif
+
+ * win32/dist/: README.build.win32.txt, installer/net-snmp.nsi
+:
+
+ reflect that README-FIRST.txt and Installation.html have been merged into README.txt
+
+2004-05-06 19:02 slif
+
+ * win32/dist/installer/net-snmp.nsi:
+
+ Per Andy Smith, patch #942766 creates SNMPCONFPATH and SNMPSHAREPATH as system env vars.
+
+2004-05-06 18:54 slif
+
+ * snmplib/winservice.c:
+
+ Per Andy Smith, don't show message dialogs when reg/unreg OK (patch 948926 fixes bug 948146).
+
+2004-05-06 18:01 slif
+
+ * win32/dist/: README-FIRST.txt, README.build.win32.txt
+, README.txt, htmlhelp/Configuration Overview.html
+, htmlhelp/Help Caveats.html,
+ htmlhelp/Installation.html, htmlhelp/Net-SNMP.hhc,
+ htmlhelp/Net-SNMP.hhp, htmlhelp/snmp.conf.win32.html:
+
+ patch windows build packaging per Alex Burger's patch-win32-5.1.2-cleanup.diff
+
+2004-05-06 08:31 rstory
+
+ * agent/snmp_agent.c:
+
+ move var decl to top of block scope; add header to quiet prototype warning
+
+2004-05-05 14:41 nba
+
+ * mibs/ianalist:
+
+ Add IANA-MALLOC-MIB
+
+2004-05-05 13:49 nba
+
+ * apps/snmpdelta.c:
+
+ Protect oid table against overflow
+
+2004-05-05 07:34 rstory
+
+ * agent/snmp_agent.c:
+
+ check should_init before initializing smux
+
+2004-05-04 16:34 hardaker
+
+ * local/mib2c.check_values_local.conf:
+
+ Fix a header prototype declaration
+
+2004-05-04 07:14 dts12
+
+ * agent/mibgroup/mibII/: vacm_vars.c, vacm_conf.c,
+ vacm_conf.h, vacm_vars.h:
+
+ Split VACM handling into two - one concerned with configuration directives
+ and validating access, the other to handle the MIB table representation.
+ This allow the agent to support VACM-based access control without necessarily
+ including the VACM-related tables.
+
+2004-05-04 07:11 dts12
+
+ * agent/mibgroup/snmpv3/usmUser.c,
+ include/net-snmp/library/snmpusm.h, snmplib/snmpusm.c
+, apps/snmptrapd.c:
+
+ Move USM config handling into the library, so it can be shared between
+ agent and trap handler. This also paves the way for separating
+ config-based handling of setting up users from the USM MIB handler.
+
+2004-05-04 01:13 dts12
+
+ * local/mib2c:
+
+ Configure indent to recognise 'size_t' as a type name (Bug #946939)
+
+2004-05-03 15:08 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ Set no repeat-count to 1 when nogetbulk is specified for math purposes.
+
+2004-05-03 14:19 nba
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ Solaris CPU_WAIT looks strange on some servers. Update to same algorith top uses
+
+2004-04-30 17:00 hardaker
+
+ * mibs/makehtml.pl:
+
+ Many misc changes and improvements.
+ - Now takes command line arguments for changing MIBDIRs and output dirs.
+ - accepts a nodemap to map MIBs to other nodes.
+
+2004-04-30 15:52 hardaker
+
+ * local/mib2c.genhtml.conf:
+
+ Added a touch of color.
+
+2004-04-30 15:52 hardaker
+
+ * local/Makefile.in:
+
+ install mib2c.genhtml.conf
+
+2004-04-30 11:19 hardaker
+
+ * mibs/: Makefile.in, makehtml.pl:
+
+ - A make routine to generate a HTML dump of our Distributed MIBs.
+ - Installed at http://www.Net-SNMP.org/mibs/
+
+2004-04-28 17:24 hardaker
+
+ * man/mib2c.conf.5:
+
+ update after extraction
+
+2004-04-28 17:23 hardaker
+
+ * local/mib2c:
+
+ many more updates and documentation for mib2c commands.
+
+2004-04-28 16:58 hardaker
+
+ * local/mib2c:
+
+ - document more and clean up $var.XXX comments
+
+2004-04-28 16:47 hardaker
+
+ * man/Makefile.in:
+
+ Only build the mib2c.conf man page if coming from a cvs checkout
+ - avoids perl dependencies on end-user machines.
+
+2004-04-28 16:45 hardaker
+
+ * man/: Makefile.in, mib2c.conf.5, mib2c.conf.5.in
+, mib2c.extract.pl:
+
+ New documentation for how to write mib2c.conf files.
+ - note, much is auto-extracted from comments in mib2c.
+
+2004-04-28 16:44 hardaker
+
+ * local/mib2c:
+
+ construct comments better for auto-extraction into a manual page.
+
+2004-04-28 15:47 hardaker
+
+ * local/mib2c.genhtml.conf:
+
+ New mib2c.genhtml.conf code to generate a HTML document from a MIB
+ document to make it easier to read.
+
+2004-04-28 15:47 hardaker
+
+ * local/mib2c:
+
+ - new @startperl@ / @endperl@ definitions to completely outsource some
+ text to a large block of perl.
+ - added mib2c_output() to output a line of text to the right place
+ from anywhere in perl (evaled) code.
+
+2004-04-28 15:45 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ support the ability to get TC descriptions from perl
+
+2004-04-28 15:38 hardaker
+
+ * perl/OID/OID.xs:
+
+ fix output to respect the output length returned by the variable
+ printing routines.
+
+2004-04-28 15:34 hardaker
+
+ * include/net-snmp/library/parse.h, snmplib/parse.c:
+
+ - Save textual convention description's
+ - Implement +const char *get_tc_description(int tc_index)
+
+2004-04-28 15:33 hardaker
+
+ * snmplib/mib.c:
+
+ change variable to const var to avoid warning.
+
+2004-04-27 11:44 hardaker
+
+ * configure, configure.in:
+
+ fix auto-enabling of --with-perl-modules when --enable-embedded-perl is selected
+
+2004-04-26 03:24 dts12
+
+ * apps/snmpusm.c, man/snmpusm.1.def:
+
+ Restore the distinction between 'cloneFrom' and 'create'(+clone)
+ subcommands. Fix handling of bare 'create' subcommand (since an
+ uncloned user can't be marked as ACTIVE with the Net-SNMP agent)
+ Document the behaviour more clearly.
+
+2004-04-23 08:15 dts12
+
+ * agent/helpers/table_container.c, agent/helpers/table_data.c
+, include/net-snmp/agent/table_container.h,
+ include/net-snmp/agent/table_data.h:
+
+ Provide an API for retrieving the table container (or 'table_data')
+ structure from within a handler routine.
+ This avoids the need for using global variables.
+
+2004-04-23 04:20 slif
+
+ * win32/dist/tosock1.sh:
+
+ script that converts back to winsock 1 library. no undo is explained.
+
+2004-04-22 19:01 rstory
+
+ * local/mib2c-conf.d/: generic-data-allocate.m2i,
+ generic-table-indexes-from-oid.m2i,
+ generic-table-indexes-set.m2i,
+ generic-table-indexes-to-oid.m2i,
+ generic-value-map-func.m2i,
+ mfd-access-container-cached-defines.m2i,
+ mfd-access-unsorted-external-defines.m2i,
+ mfd-data-access.m2c, mfd-interface.m2c, mfd-top.m2c
+, node-set.m2i, parent-set.m2i:
+
+ change all DEBUGTRACE to DEBUGMSTL(("verbose:function_name"...
+
+2004-04-22 07:13 slif
+
+ * apps/snmptrapd.c, win32/snmptrapd/Makefile.in,
+ win32/snmptrapd/snmptrapd.dsp:
+
+ patch from Andy Smith: [931673] Run snmptrapd as a Windows service;
+ slif did the makefile/project file touches.
+
+2004-04-22 07:11 slif
+
+ * agent/snmpd.c:
+
+ match application name with display name to improve event log legibility.
+
+2004-04-22 07:08 slif
+
+ * win32/: snmpd/Makefile.in, snmpdsdk/Makefile.in:
+
+ Change include search path for snmplib to "..\.." [was pointing elsewhere].
+
+2004-04-21 19:50 rstory
+
+ * local/mib2c-conf.d/subagent.m2c:
+
+ remove unused var; update help message
+
+2004-04-21 19:48 rstory
+
+ * local/mib2c-conf.d/: default-mfd-top.m2c, mfd-top.m2c
+:
+
+ use # instead of * for special char, since perl doesn't like the *
+
+2004-04-21 19:44 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ use unused var
+
+2004-04-21 19:41 rstory
+
+ * local/mib2c-conf.d/mfd-data-set.m2c:
+
+ fix quoting problem
+
+2004-04-21 19:39 rstory
+
+ * local/mib2c-conf.d/mfd-data-get.m2c:
+
+ add missing prototype for non-index map functions
+
+2004-04-21 19:37 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-defines.m2i
+:
+
+ get rid of loop_init_context, moving it's work into get_first; fix test
+ for code gen for transient data
+
+2004-04-21 19:25 rstory
+
+ * local/mib2c-conf.d/m2c_setup_enum.m2i:
+
+ don't use uc function, as it barfs on enums w/hyphens
+
+2004-04-21 05:53 slif
+
+ * win32/dist/installer/: Add2Path.nsi, SetEnVar.nsi,
+ net-snmp.nsi:
+
+ from Andy Smith: installer components
+
+2004-04-20 20:48 slif
+
+ * include/ucd-snmp/version.h:
+
+ fix [807349] ucd-snmp/version.h tries to use a mutable variable [#define]
+
+2004-04-20 20:23 slif
+
+ * README.win32:
+
+ update status, change build menu, and manual build ipv6 instructions.
+
+2004-04-20 18:57 slif
+
+ * snmplib/system.c:
+
+ patch-bug-919465-4 applied to fix [919465] bug in system.c
+
+2004-04-20 17:28 hardaker
+
+ * testing/tests/: T030snmpv3usercreation, T110agentxget
+, T111agentxset, T112agentxsetfail,
+ T113agentxtrap, T120proxyget, T121proxyset,
+ T122proxysetfail:
+
+ Use new global Sv3config master param setup
+
+2004-04-20 17:24 hardaker
+
+ * testing/tests/: T023snmpv3getMD5AES, T026snmpv3getSHAAES
+:
+
+ New tests for AES support
+
+2004-04-20 17:24 hardaker
+
+ * testing/tests/: T022snmpv3getMD5, T023snmpv3getMD5DES
+, T024snmpv3getSHA1, T025snmpv3getSHADES:
+
+ Use new global Sv3config master param setup
+
+2004-04-20 17:19 hardaker
+
+ * testing/tests/Sv3config:
+
+ determine the best auth/encr type available and use it.
+
+2004-04-20 17:19 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ fix for disabled snmpv1/2c and md5/des
+
+2004-04-20 15:13 rstory
+
+ * local/mib2c.conf:
+
+ fix unbalanced if/endif noted on coders by Oleg Ivanov
+
+2004-04-20 12:09 slif
+
+ * apps/snmpnetstat/inet.c, apps/snmpnetstat/inet6.c,
+ include/net-snmp/system/cygwin.h,
+ include/net-snmp/system/mingw32.h, snmplib/inet_ntop.c
+, snmplib/inet_pton.c, snmplib/snmpTCPDomain.c,
+ snmplib/snmpTCPIPv6Domain.c, snmplib/snmpUDPDomain.c
+, snmplib/snmpUDPIPv6Domain.c,
+ win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/net-snmp-config.h.in:
+
+ fix errors building IPv6 support for MSVC++, MinGW, and Cygwin.
+
+2004-04-20 07:18 hardaker
+
+ * local/snmpconf:
+
+ fix broken usage of qw()
+
+2004-04-20 06:20 slif
+
+ * win32/EXAMPLE.conf.win32:
+
+ add sample config file
+
+2004-04-20 04:39 nba
+
+ * agent/mibgroup/agent/: nsCache.c, nsDebug.c,
+ nsLogging.c:
+
+ Fix int/long mixup for 64-bit Solaris
+
+2004-04-20 04:33 nba
+
+ * agent/snmp_agent.c, snmplib/snmp.c:
+
+ Ensure diagnostics with ASN.1 encoding errors
+
+2004-04-20 03:51 slif
+
+ * perl/SNMP/SNMP.xs:
+
+ cleanup "reading MIB file" verbose message (compiled MIBDIRS/MIBS not useful/discernable).
+
+2004-04-20 02:51 slif
+
+ * snmplib/mib.c:
+
+ fix unsigned compare of len to line_len in sprint_realloc_hexstring
+
+2004-04-20 02:48 slif
+
+ * snmplib/parse.c:
+
+ add_mibdir variable 'token' is not used on win32. move to under the ifdef.
+
+2004-04-19 23:40 slif
+
+ * win32/: Configure, Makefile.in, local/Makefile.in
+:
+
+ patch from Alex Burger: [928872] Win32 build.bat snmpconf,mib2c,traptoemail
+
+2004-04-19 23:20 slif
+
+ * win32/dist/: README-FIRST.txt, README.build.win32.txt
+, README.txt, htmlhelp/Configuration Overview.html
+, htmlhelp/Developer FAQ.html, htmlhelp/FAQ.html
+, htmlhelp/Help Caveats.html,
+ htmlhelp/Installation.html, htmlhelp/Introduction.html
+, htmlhelp/Net-SNMP.hhc, htmlhelp/Net-SNMP.hhp,
+ htmlhelp/net-snmp-4.2-800.jpg,
+ htmlhelp/snmp.conf.win32.html,
+ htmlhelp/snmpd.conf.win32.html,
+ htmlhelp/snmptrapd.conf.win32.html, scripts/create-toc
+, scripts/mandir2html, scripts/poddir2html,
+ scripts/readme2html, scripts/txt2html:
+
+ patch from Alex Burger: [938214] Win32 dist folder - building a binary release
+
+2004-04-19 23:05 slif
+
+ * local/snmpconf:
+
+ patch from Alex Burger: [918410] SNMPCONF dynamic paths
+
+2004-04-19 21:52 slif
+
+ * snmplib/: snmpTCPIPv6Domain.c, snmpUDPIPv6Domain.c:
+
+ conditionally compile for platforms with static object lists [no configure].
+
+2004-04-19 21:49 slif
+
+ * apps/snmpnetstat/: inet6.c, netstat.h:
+
+ reduce warnings for undecl'd struct; declare inet6print only where it is needed.
+
+2004-04-19 21:41 slif
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ don't expose getaddrinfo if not supported by the platform.
+
+2004-04-19 21:39 slif
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ fix unsigned int compare
+
+2004-04-19 21:38 slif
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ trade in a single typedef uint8_t for the widely used u_char.
+
+2004-04-19 21:36 slif
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ cleanup when finished with addrinfo structure.
+
+2004-04-19 20:09 slif
+
+ * configure.in, configure:
+
+ add inet_ntop,inet_pton to snmplib objects for win32 builds.
+
+2004-04-19 20:08 slif
+
+ * win32/Configure:
+
+ more robust change for NETSNMP_USE_DLL.
+
+2004-04-19 18:37 hardaker
+
+ * apps/encode_keychange.c:
+
+ fix #ifdef bug
+
+2004-04-19 16:47 slif
+
+ * snmplib/parse.c:
+
+ add comment from Niels B. reason for win32 ifdefs in add_mibdir.
+
+2004-04-19 15:57 slif
+
+ * win32/: Configure, build.pl, mib_module_inits.h
+, net-snmp/net-snmp-config.h,
+ net-snmp/net-snmp-config.h.in, snmpnetstat/Makefile.in
+, snmpnetstat/snmpnetstat.dsp:
+
+ selective build of IPv6 transport for MSVC++ build
+
+2004-04-19 15:08 hardaker
+
+ * NEWS, configure, configure.in,
+ agent/mibgroup/snmpv3/usmUser.c, apps/encode_keychange.c
+, apps/snmpusm.c,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/library/snmp_api.h,
+ include/net-snmp/library/transform_oids.h,
+ snmplib/keytools.c, snmplib/lcd_time.c, snmplib/md5.c
+, snmplib/scapi.c, snmplib/snmp_parse_args.c,
+ snmplib/snmpusm.c, snmplib/snmpv3.c,
+ testing/tests/Sv3config, testing/tests/Sv3vacmconfig,
+ testing/tests/T020snmpv3get,
+ testing/tests/T021snmpv3getnext,
+ testing/tests/T0220snmpv3bulkget,
+ testing/tests/T022snmpv3getMD5,
+ testing/tests/T023snmpv3getMD5DES,
+ testing/tests/T025snmpv3getSHADES,
+ testing/tests/T049snmpv3inform,
+ testing/tests/T050snmpv3trap:
+
+ New configure flags: --disable-md5 and --disable-des to completely remove support for the less trusted/secure algorithms
+
+2004-04-19 13:01 slif
+
+ * agent/snmp_agent.c:
+
+ move debug statement after variable definition.
+
+2004-04-19 12:36 slif
+
+ * win32/Configure:
+
+ use a more robust search for undef USE_OPENSSL.
+
+2004-04-19 08:28 dts12
+
+ * include/net-snmp/library/default_store.h,
+ snmplib/snmp_api.c, snmplib/mib.c:
+
+ More flexible output of hex strings - don't hardcode 16-octets-per-line
+
+2004-04-19 07:58 slif
+
+ * apps/snmpnetstat/winstub.c:
+
+ comment out variables which are not used.
+
+2004-04-19 07:58 rstory
+
+ * agent/snmp_agent.c:
+
+ add alarm to age addr cache every 5 min; add debug for asp->reqinfo
+
+2004-04-19 07:53 rstory
+
+ * agent/snmpd.c:
+
+ remove 'sched'uled timeout processing; move addr cache aging into alarm;
+ change deafult timeout from TIMETICK to LONG_MAX
+
+2004-04-19 07:49 rstory
+
+ * snmplib/snmp_api.c:
+
+ remove unused var; add timeout debugging
+
+2004-04-19 07:36 slif
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ patch [ 918948 ] fix cygwin config problem
+
+2004-04-16 17:06 hardaker
+
+ * snmplib/snmp_parse_args.c:
+
+ fixed a v1/v2c exclusion bug
+
+2004-04-16 16:45 hardaker
+
+ * configure, configure.in:
+
+ Output message now contains versions supported
+
+2004-04-16 16:37 hardaker
+
+ * NEWS, configure, configure.in,
+ agent/agent_read_config.c, agent/agent_registry.c,
+ agent/agent_trap.c, agent/snmp_agent.c,
+ agent/helpers/table_iterator.c,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/target/target.c, apps/snmptable.c,
+ apps/snmptrap.c, apps/snmptrapd_log.c,
+ apps/snmpnetstat/main.c,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/library/default_store.h,
+ include/net-snmp/library/snmp.h, snmplib/snmpUDPDomain.c
+, snmplib/snmpUDPIPv6Domain.c,
+ snmplib/snmpUnixDomain.c, snmplib/snmp_api.c,
+ snmplib/snmp_auth.c, snmplib/snmp_parse_args.c,
+ snmplib/snmpv3.c, testing/eval_tools.sh,
+ testing/tests/T001snmpv1get, testing/tests/T014snmpv2cget
+, testing/tests/T015snmpv2cgetnext,
+ testing/tests/T0160snmpv2cbulkget,
+ testing/tests/T016snmpv2cgetfail,
+ testing/tests/T017snmpv2ctov1getfail,
+ testing/tests/T018snmpv1tov2cgetfail,
+ testing/tests/T019snmpv2cnosuch,
+ testing/tests/T051snmpv2ctrap,
+ testing/tests/T052snmpv2cinform,
+ testing/tests/T058agentauthtrap, testing/tests/T100agenthup
+, testing/tests/T120proxyget,
+ testing/tests/T121proxyset, testing/tests/T122proxysetfail
+, testing/tests/T130snmpv1vacmget,
+ testing/tests/T131snmpv2cvacmget,
+ testing/tests/T140snmpv1vacmgetfail,
+ testing/tests/T141snmpv2cvacmgetfail,
+ testing/tests/T150solarishostcpu,
+ testing/tests/T151solarishostdisk,
+ testing/tests/T152hostuptime, testing/tests/T153solarisswap
+:
+
+ New flags for configure: --disable-snmpv1 --disable-snmpv2c
+
+2004-04-16 16:21 hardaker
+
+ * testing/tests/: T020snmpv3get, T021snmpv3getnext:
+
+ remove duplicate and conflicting VACM entry. It's amazing this hasn't
+ causes false problems before now.
+
+2004-04-16 12:46 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c:
+
+ address issues noted by dave on coders
+
+2004-04-16 12:42 rstory
+
+ * include/net-snmp/library/snmp_debug.h, snmplib/snmp_debug.c
+:
+
+ new 'no check' debug macro/functions
+
+2004-04-15 14:52 rstory
+
+ * include/net-snmp/data_access/arp.h:
+
+ header for arp data access
+
+2004-04-15 05:50 dts12
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ Variables used for returning values need to be 'static'. (oops!)
+
+2004-04-15 05:47 dts12
+
+ * agent/snmp_vars.c, include/net-snmp/agent/snmp_vars.h
+, agent/mibgroup/mibII/var_route.c:
+
+ Move the definition of 'ipaddr_return' to the (only) routine where
+ it's actually used. (See Bug #934422)
+
+2004-04-15 05:29 dts12
+
+ * local/mib2c.notify.conf:
+
+ Remove extraneous ';' in notification generation routine (Bug #895800)
+
+2004-04-15 05:14 dts12
+
+ * agent/snmp_agent.c:
+
+ Remove duplicate code (Bug #934411)
+
+2004-04-14 21:59 hardaker
+
+ * snmplib/snmpv3.c:
+
+ fixed cut-n-paste typos pointed out to me by Mike S.
+
+2004-04-14 17:25 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ - support local/master SNMPv3 key settings directly
+ - have gettable() parse indexes out of the OID when NetSNMP::OID is available
+ - not extensively tested yet.
+
+2004-04-14 15:41 slif
+
+ * man/mib_api.3.def:
+
+ Specify correct default value for MIBDIRS.
+
+2004-04-14 15:32 nba
+
+ * agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/ucd-snmp/vmstat.h, mibs/UCD-SNMP-MIB.txt
+:
+
+ Support for Linux 2.6 incl SoftIRQ CPU state
+
+2004-04-14 15:29 nba
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Overhaul to remove fixed table size and support Linux 2.6 kernel
+
+2004-04-14 15:21 nba
+
+ * agent/mibgroup/ucd-snmp/: vmstat_hpux.c, vmstat_solaris2.c
+:
+
+ Clean up comments mishandled ny indent
+
+2004-04-14 14:49 hardaker
+
+ * man/snmpd.conf.5.def, snmplib/snmpv3.c:
+
+ Added support to the createUser directive for specifying manual local
+ or master keys rather than relying on password derivations.
+
+2004-04-14 13:21 rstory
+
+ * agent/helpers/cache_handler.c:
+
+ null check before using pointer
+
+2004-04-14 13:11 hardaker
+
+ * include/net-snmp/library/default_store.h:
+
+ Added support for new snmp.conf tokens to directly set SNMPv3 hex keys
+
+2004-04-14 12:27 hardaker
+
+ * man/snmp.conf.5.def, man/snmpcmd.1.def,
+ snmplib/default_store.c, snmplib/snmp_api.c,
+ snmplib/snmpv3.c:
+
+ Added support for new snmp.conf tokens to directly set SNMPv3 hex keys
+
+2004-04-14 09:40 hardaker
+
+ * include/net-snmp/library/snmp_api.h, snmplib/snmp_api.c
+, snmplib/snmpv3.c, man/snmpcmd.1.def:
+
+ Added support for directly specifying SNMPv3 hex keys using new flags (-3[mMkK])
+
+2004-04-14 08:24 rstory
+
+ * configure:
+
+ new configure for configure.in
+
+2004-04-14 08:23 rstory
+
+ * configure.in:
+
+ more debug; simplify two conflict tests into one; revert conflict messages
+ back to warning, but add obnoxious warning to summary cache
+
+2004-04-14 03:25 dts12
+
+ * perl/SNMP/t/bulkwalk.t:
+
+ A non-zero repeat count with no non-repeating varbinds confuses the
+ perl 'bulkwalk' routine. This should really be fixed properly,
+ but this at least allows the rest of the tests to run successfully.
+
+2004-04-14 03:15 dts12
+
+ * snmplib/snmp_logging.c:
+
+ Support per-loghandler shutdown processing in 'snmp_disable_log'.
+ This should allow logfiles to be rotated properly.
+
+ However, I'm not convinced that the 'enabled' flag is being used
+ consistently, particularly by other styles of logging configuration.
+ Some cleanup work is probably needed.
+
+2004-04-14 03:09 dts12
+
+ * include/net-snmp/library/default_store.h, snmplib/mib.c
+:
+
+ Support "01:02:03:04:05:06" style hex output - i.e. leading 0's
+ on single-digit hex values. (Suggested by Glenn Andrews)
+
+2004-04-14 03:06 dts12
+
+ * include/net-snmp/library/parse.h, snmplib/mib.c,
+ snmplib/parse.c:
+
+ Identify which MIB modules are present in the MIBFILES list before
+ starting to load anything. This allows IMPORT statements to work
+ correctly, regardless of the order in which such files appear.
+
+2004-04-14 02:53 dts12
+
+ * include/net-snmp/system/: aix.h, bsd.h, cygwin.h
+, dynix.h, irix.h, mingw32.h, osf5.h
+, sunos.h, svr5.h, sysv.h, ultrix4.h
+:
+
+ Include "generic.h" using the full name, rather than
+ relying on the include path being set correctly.
+ (Suggested by Nagaraj Narayanaswamy)
+
+2004-04-14 02:42 dts12
+
+ * apps/snmpdelta.c:
+
+ Catch SNMPv2 exception values.
+
+2004-04-14 02:37 dts12
+
+ * agent/mibgroup/mibII/route_write.c:
+
+ Avoid crashing the agent when backing out of an invalid SET request.
+
+2004-04-14 02:33 dts12
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ Allow 'monitor' directives to specify a single instance rather than
+ always monitoring all rows.
+
+2004-04-14 02:28 dts12
+
+ * FAQ:
+
+ Update list of supported MIBs, advice on running as non-root
+ and bring into line with 5.1.x branch version.
+
+2004-04-13 13:50 rstory
+
+ * local/mib2c-conf.d/mfd-access-container-cached-defines.m2i:
+
+ tweak assert condition to allow for valid but expired cache
+
+2004-04-13 13:48 rstory
+
+ * local/mib2c-conf.d/details-enums.m2i:
+
+ fix comment typo
+
+2004-04-13 12:35 rstory
+
+ * agent/mibgroup/: ip-mib.h, ip-mib/inetNetToMediaTable.h
+,
+ ip-mib/inetNetToMediaTable/default-table-inetNetToMediaTable.m2d
+, ip-mib/inetNetToMediaTable/inetNetToMediaTable.c,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable.h,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.c
+,
+ ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h
+, ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c
+, ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h
+:
+
+ new inetNetToMediaTable
+
+2004-04-13 12:32 rstory
+
+ * agent/mibgroup/ip-mib/data_access/: arp.h, arp_common.c
+, arp_linux.c, ipaddress_ioctl.h:
+
+ new files
+
+2004-04-13 11:44 rstory
+
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c
+:
+
+ remove unused var
+
+2004-04-13 11:43 rstory
+
+ agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.c
+:
+
+ use access routine to allocate/free route entries
+
+2004-04-13 11:42 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable.c:
+
+ use access routine to allocate/free interface entries
+
+2004-04-13 11:41 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c:
+
+ default admin/oper status to up
+
+2004-04-13 11:39 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_data_access.c:
+
+ invert order for cache refresh; set new preload flag on cache to init ifIndex
+ enum list (used by other modules); set oper_status down if interface vanishes;
+ more robust handling of comparing/swiping pointers
+
+2004-04-13 11:34 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_constants.h:
+
+ remove unused mapping defines
+
+2004-04-13 11:33 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.c:
+
+ remove unused mapping functions
+
+2004-04-13 11:31 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.h:
+
+ revert external defintion change
+
+2004-04-13 11:29 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c:
+
+ use access routine to allocate/free ipaddress_entry
+
+2004-04-13 11:26 rstory
+
+ * agent/mibgroup/ip-mib/data_access/: ipaddress_common.c,
+ ipaddress_ioctl.c, ipaddress_linux.c:
+
+ tweak internal index usage; use net-snmp ifIndex based on name instead of ioctl
+ if_index; add/tweak comments
+
+2004-04-13 11:23 rstory
+
+ * agent/helpers/cache_handler.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ new flag for preloading cache; move cache load/free to static subroutines for
+ code reuse; add some debug msgs
+
+2004-04-13 11:15 rstory
+
+ * include/net-snmp/data_access/interface.h:
+
+ add defines for admin/oper status enums
+
+2004-04-13 10:31 hardaker
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ entries for have_mktime nad have_stime
+
+2004-04-13 10:31 hardaker
+
+ * dist/net-snmp.spec:
+
+ version change.
+
+2004-04-10 05:59 dts12
+
+ * apps/snmpusm.c:
+
+ Cloning a user requires using the usmUserStatus column object.
+
+2004-04-10 05:57 dts12
+
+ * configure, configure.in:
+
+ Remove duplicate entry from list of default MIB modules.
+
+2004-04-09 18:50 slif
+
+ * snmplib/snmp_transport.c:
+
+ fix two SNMP_FREE candidates in tdomain_unregister, clear_tdomain_list.
+
+2004-04-09 18:47 slif
+
+ * snmplib/inet_pton.c:
+
+ fix a sign compare warning.
+
+2004-04-09 18:37 slif
+
+ * win32/: libsnmp/Makefile.in, libsnmp/libsnmp.dsp,
+ libsnmp_dll/Makefile.in, libsnmp_dll/libsnmp.def,
+ libsnmp_dll/libsnmp_dll.dsp, net-snmp/net-snmp-config.h
+, net-snmp/net-snmp-config.h.in:
+
+ add IPv6 transports to msvc++ builds.
+
+2004-04-09 18:27 slif
+
+ * perl/SNMP/t/get.t:
+
+ don't require interface layer of agent in order to pass these tests.
+
+2004-04-09 18:24 slif
+
+ * win32/libnetsnmptrapd/Makefile.in:
+
+ undo last change to restore proper construction of Perl modules.
+
+2004-04-08 21:11 slif
+
+ * testing/tests/T122proxysetfail:
+
+ match snmpset output to fix bug [919267] testnum 34 T122proxysetfail failing
+
+2004-04-08 20:25 slif
+
+ * testing/RUNTESTS:
+
+ change usage comment for "-XM" to match its function
+
+2004-04-08 20:19 slif
+
+ * win32/libnetsnmptrapd/Makefile.in:
+
+ do not build snmptrapd.obj as part of netsnmptrapd library (MSVC++ build).
+
+2004-04-08 20:17 slif
+
+ * win32/libhelpers/: Makefile.in, libhelpers.dsp:
+
+ add table_container.obj to list of objects to be built using MSVC++
+
+2004-04-08 20:12 slif
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ Patch from Michael Slifcak: [ 918948 ] fix cygwin config problem
+
+2004-04-08 20:07 slif
+
+ * agent/mibgroup/host/hr_system.c:
+
+ apply nba's Feb.2004 pututline fixes to main branch.
+
+2004-04-08 15:54 hardaker
+
+ * testing/eval_tools.sh:
+
+ Use -Lf and -Lf in the main trunk to match the proper code use
+
+2004-04-08 13:08 hardaker
+
+ * agent/mibgroup/utilities/override.c, man/snmpd.conf.5.def
+:
+
+ Support for the -rw flag to the override token allowing read/write
+ access to the bogus mib objects.
+
+2004-04-08 13:01 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Fix enum lists for unsigned and bit strings to remove duplicate types
+
+2004-04-07 19:50 slif
+
+ * testing/: RUNTESTS, TESTCONF.sh:
+
+ patch [917646] test using installed MIBs first
+
+2004-04-07 15:57 rstory
+
+ * configure:
+
+ configure to match new config.in
+
+2004-04-07 15:55 rstory
+
+ * configure.in:
+
+ add lots of debug to module processing; use new var for excluded modules; make
+ conflicts errors instead of warnings; don't try to re-process a src only module
+
+2004-04-07 15:52 rstory
+
+ * local/mib2c-conf.d/details-enums.m2i:
+
+ typo in comments
+
+2004-04-07 15:51 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ only gen release undo code if settable
+
+2004-04-07 15:47 rstory
+
+ * include/net-snmp/data_access/route.h:
+
+ tweak comments
+
+2004-04-07 15:47 rstory
+
+ * agent/mibgroup/ip-mib/data_access/.cvsignore:
+
+ files to ignore
+
+2004-04-07 15:46 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c:
+
+ remove unused/undefined vars
+
+2004-04-07 15:44 rstory
+
+ * agent/mibgroup/: if-mib.h, ip-forward-mib.h:
+
+ fix config_require paths
+
+2004-04-07 15:44 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable.h:
+
+ config_exclude mibII/interfaces; tweak external oid def
+
+2004-04-07 15:43 rstory
+
+ * agent/mibgroup/if-mib/data_access/interface_common.c:
+
+ remove references to ifTable
+
+2004-04-07 15:38 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/.cvsignore:
+
+ files to ignore
+
+2004-04-07 15:37 rstory
+
+ * agent/mibgroup/ip-mib/ipAddressTable/:
+ default-table-ipAddressTable.m2d, ipAddressTable.c,
+ ipAddressTable.h, ipAddressTable_constants.h,
+ ipAddressTable_data_access.c, ipAddressTable_data_access.h
+, ipAddressTable_interface.c,
+ ipAddressTable_interface.h:
+
+ new MFD ipAddressTable
+
+2004-04-07 15:36 rstory
+
+ * agent/mibgroup/ip-mib/data_access/ipaddress.h,
+ agent/mibgroup/ip-mib/data_access/ipaddress_common.c,
+ agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c,
+ agent/mibgroup/ip-mib/data_access/ipaddress_linux.c,
+ agent/mibgroup/ip-mib/data_access/ipaddress_linux.h,
+ include/net-snmp/data_access/ipaddress.h:
+
+ ipaddress data access (v4 & v6)
+
+2004-04-07 15:29 rstory
+
+ * agent/mibgroup/: ip-mib.h, ip-mib/ipAddressTable.h:
+
+ new config modules
+
+2004-04-07 06:38 dts12
+
+ * snmplib/mib.c:
+
+ Remove a superfluous trailing comma (bug #930708)
+
+2004-04-07 03:23 dts12
+
+ * agent/helpers/table_data.c, agent/helpers/table_dataset.c
+, include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h:
+
+ Routines to indicate the number of rows in a data-helper-based table
+
+2004-04-07 02:13 slif
+
+ * testing/eval_tools.sh:
+
+ CAPTURE returns exit code from command that was run.
+
+2004-04-06 23:33 slif
+
+ * win32/net-snmp/: net-snmp-config.h, net-snmp-config.h.in
+:
+
+ patch [930880] don't build CMU compatible functions on win32
+
+2004-04-06 23:19 slif
+
+ * README.win32, perl/TrapReceiver/Makefile.PL,
+ win32/Configure, win32/Makefile.in, win32/libsdll.dsw
+, win32/win32.dsw, win32/win32sdk.dsw,
+ win32/libnetsnmptrapd/.cvsignore,
+ win32/libnetsnmptrapd/Makefile.in,
+ win32/libnetsnmptrapd/libnetsnmptrapd.dsp,
+ win32/snmptrapd/Makefile.in, win32/snmptrapd/snmptrapd.dsp
+:
+
+ patch [915615] Perl TrapReceiver does not compile on Win32 MSVC
+ also fixes bug [896012] win32 Perl build dies at TrapReceiver
+
+2004-04-06 21:59 slif
+
+ * agent/mibgroup/mibII/: tcpTable.c, udpTable.c:
+
+ fix [907716] win32 agent shows tcp,udp connect OIDs in host byte order
+
+2004-04-06 17:35 slif
+
+ * testing/eval_tools.sh:
+
+ patch [919122] test should allow time for programs to settle
+
+2004-04-06 17:34 slif
+
+ * testing/eval_tools.sh:
+
+ patch [919114] preserve test result when stopping
+
+2004-04-06 17:32 slif
+
+ * testing/eval_tools.sh:
+
+ patch [919105] better pid check
+
+2004-04-06 10:43 rstory
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ include stdint, if available
+
+2004-04-06 09:46 dts12
+
+ * agent/agent_handler.c,
+ include/net-snmp/agent/agent_handler.h:
+
+ Register new API modules using the default priority (127)
+ and provide an API for unregistering them again.
+
+2004-04-05 16:04 slif
+
+ * testing/eval_tools.sh:
+
+ reverse patch-test-deprecated-options to permit testing versions before 5.1.
+
+2004-04-04 11:17 rstory
+
+ * agent/mibgroup/ip-forward-mib/ipCidrRouteTable/:
+ ipCidrRouteTable_data_access.c,
+ ipCidrRouteTable_interface.c:
+
+ don't share cache w/inetCidrRoute, which can't work, since indexes don't match
+
+2004-04-04 11:15 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/: ifXTable.h,
+ ifXTable_data_access.c, ifXTable_interface.c:
+
+ share data structures/cache w/ifTable if enabled
+
+2004-04-04 11:05 rstory
+
+ * agent/mibgroup/if-mib/ifXTable/: default-table-ifXTable.m2d
+, ifXTable.c, ifXTable.h, ifXTable_interface.h
+:
+
+ update to use new interface data access
+
+2004-04-04 10:59 rstory
+
+ * agent/mibgroup/ip-forward-mib/data_access/route_common.c,
+ agent/mibgroup/ip-forward-mib/data_access/route_linux.c,
+ include/net-snmp/data_access/route.h:
+
+ update to support inetCidrRouteTable
+
+2004-04-04 10:58 rstory
+
+ * agent/mibgroup/ip-forward-mib.h:
+
+ add inetCidrRouteTable
+
+2004-04-04 10:57 rstory
+
+ * agent/mibgroup/ip-forward-mib/inetCidrRouteTable/:
+ inetCidrRouteTable.c, inetCidrRouteTable.h,
+ inetCidrRouteTable_constants.h,
+ inetCidrRouteTable_data_access.c,
+ inetCidrRouteTable_data_access.h,
+ inetCidrRouteTable_interface.c,
+ inetCidrRouteTable_interface.h, .cvsignore,
+ default-table-inetCidrRouteTable.m2d:
+
+ new inetCidrRouteTable. only does ipv4 so far.
+
+2004-04-04 07:14 rstory
+
+ * agent/mibgroup/ip-forward-mib/ipCidrRouteTable/:
+ ipCidrRouteTable_data_access.c,
+ ipCidrRouteTable_interface.c:
+
+ share cache w/inetCidrRouteTable, if it is enabled
+
+2004-04-04 07:09 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ use unused var
+
+2004-04-04 07:08 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ fix missed case for allocate parm; remove unused var
+
+2004-04-04 07:07 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-defines.m2i
+:
+
+ fix missed case for allocate parm
+
+2004-04-04 07:06 rstory
+
+ * local/mib2c-conf.d/mfd-access-container-cached-defines.m2i:
+
+ add debug
+
+2004-04-03 05:15 rstory
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ fix bug 928481 - consistency in vacm_vars.c
+
+2004-04-02 19:02 rstory
+
+ * agent/mibgroup/: if-mib/ifTable.h, if-mib/ifXTable.h,
+ ip-forward-mib/inetCidrRouteTable.h,
+ ip-forward-mib/ipCidrRouteTable.h:
+
+ configure_require files for individual modules
+
+2004-04-02 12:52 rstory
+
+ * snmplib/container.c:
+
+ default to netsnmp_index compare if no compare provided
+
+2004-04-02 12:51 rstory
+
+ * snmplib/: cmu_compat.c, snmp_version.c:
+
+ include net-snmp-config.h
+
+2004-04-02 12:40 rstory
+
+ * snmplib/callback.c:
+
+ new static lock var to detect when a callback is added/removed during callback
+ processing; don't call free on client arg of callback w/NULL callback ptr
+ (i.e. one that was removed while callbacks were being processed)
+
+2004-04-02 12:36 rstory
+
+ * local/mib2c-update:
+
+ make temp dir names configureable, w/defaults now prefixed w/'.'; tweak diff
+ exclude patterns; other misc tweaks
+
+2004-04-02 12:34 rstory
+
+ * include/net-snmp/library/tools.h:
+
+ fix macros to be safely useable as a single statement; new SNMP_SWIPE_MEM macro
+
+2004-04-02 08:20 rstory
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ new config.h.in to match acconfig.h (autoheader hadn't been run in a while):
+ pcks, croptyki, config_exclude, agentx domain socket, cppwrap macro
+
+2004-04-02 08:06 rstory
+
+ * agent/helpers/cache_handler.c:
+
+ reduce redundancy
+
+2004-04-02 08:02 rstory
+
+ * agent/agent_handler.c:
+
+ add asserts on illegal handler calls
+
+2004-04-02 06:46 hardaker
+
+ * apps/snmptrapd_handlers.c:
+
+ Fix inclusion of utilities/execute.h, since Robert's Makefile changes
+ broke the path lookups.
+
+2004-04-01 22:08 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ make gettable use getbulk when possible
+
+2004-04-01 19:41 rstory
+
+ * configure:
+
+ configure for new configure.in
+
+2004-04-01 19:32 rstory
+
+ * Makefile.in:
+
+ move VPATH to individual Makefile.in files; new makefilecheck target to check
+ for gnu make constructs; new 'checks' target runs checks for comment/makefile
+
+2004-04-01 19:29 rstory
+
+ * acconfig.h:
+
+ empty define for config_exclude; new NETSNMP_CPP_WRAP macros
+
+2004-04-01 19:27 rstory
+
+ * configure.in:
+
+ new config_exclude; config_require tweaks:
+ don't process the same module twice; allow c file w/no header; move
+ module list add, config_load_mib check inside header conditional
+
+2004-04-01 18:38 rstory
+
+ * configure:
+
+ new configure to match configure.in
+
+2004-04-01 18:37 rstory
+
+ * Makefile.top, configure.in, agent/Makefile.in
+, agent/helpers/Makefile.in,
+ agent/mibgroup/Makefile.in, apps/Makefile.in,
+ apps/snmpnetstat/Makefile.in, local/Makefile.in,
+ man/Makefile.in, mibs/Makefile.in,
+ snmplib/Makefile.in, testing/Makefile.in:
+
+ rework VPATH so people with GNU make can share a source directory for multiple
+ build (including one in the source directory); completely rework CPPFLAGS for a
+ common, consistent order (that is also correct for non sourcedir builds)
+
+2004-04-01 18:26 rstory
+
+ * agent/mibgroup/ip-forward-mib/ipCidrRouteTable.h:
+
+ new file
+
+2004-04-01 18:15 rstory
+
+ * agent/mibgroup/ip-forward-mib/ipCidrRouteTable/:
+ default-table-ipCidrRouteTable.m2d, ipCidrRouteTable.c
+, ipCidrRouteTable.h, ipCidrRouteTable_data_access.c
+, ipCidrRouteTable_data_access.h,
+ ipCidrRouteTable_interface.c, ipCidrRouteTable_interface.h
+:
+
+ update for mfd generated code changes; update to use new data access stuff;
+
+2004-04-01 18:10 rstory
+
+ * agent/mibgroup/if-mib/ifTable/ifTable_data_access.c:
+
+ update to use new data access stuff; add todo comments
+
+2004-04-01 18:10 rstory
+
+ * agent/mibgroup/: if-mib/data_access/.cvsignore,
+ if-mib/ifTable/.cvsignore, if-mib/ifXTable/.cvsignore
+, ip-forward-mib/data_access/.cvsignore,
+ ip-forward-mib/ipCidrRouteTable/.cvsignore:
+
+ new cvsingore files
+
+2004-04-01 18:07 rstory
+
+ * agent/mibgroup/if-mib/: ifTable/ifTable.c,
+ ifTable/ifTable.h, ifXTable/ifXTable.h:
+
+ update to use new data access stuff
+
+2004-04-01 18:04 rstory
+
+ * agent/mibgroup/: if-mib/data_access/interface.h,
+ if-mib/data_access/interface_common.c,
+ if-mib/data_access/interface_linux.c,
+ ip-forward-mib/data_access/route.h,
+ ip-forward-mib/data_access/route_common.c,
+ ip-forward-mib/data_access/route_linux.c:
+
+ new data access files
+
+2004-04-01 18:00 rstory
+
+ * include/net-snmp/data_access/: interface.h, route.h:
+
+ move config_require stuff back into mibgroup, since that's the only place
+ configure will look for them
+
+2004-04-01 16:58 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ Remove duplicate coloid setting (was done above as well)
+
+2004-04-01 16:54 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ Another iterator fix: initialize a variable properly for every request
+
+2004-04-01 16:21 rstory
+
+ * include/net-snmp/data_access/: interface.h, route.h:
+
+ new data access headers
+
+2004-04-01 15:52 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ Another iterator problem with getbulk's: make it not set RETRY if its going to be out of scope next time around still (> maxcol)
+
+2004-04-01 09:18 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ - Various patches to fix iterator problems with multiple varbinds.
+
+2004-03-31 12:13 hardaker
+
+ * agent/helpers/cache_handler.c:
+
+ Properly set the auto_next flag.
+
+2004-03-30 21:22 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ A new implementation of gettable that uses better structured GETNEXT
+ packets for faster retrieval across slow links.
+ - getbulk not yet used, but should be.
+
+2004-03-30 21:19 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ - minor changes to the cvs2cl command line flags
+
+2004-03-30 21:16 hardaker
+
+ * agent/mibgroup/host/: hr_system.c, hr_system.h:
+
+ change set_solaris_time to ns_set_time and enable it on any
+ architecture that supports mktime() and stime()
+
+2004-03-30 21:15 hardaker
+
+ * configure, configure.in:
+
+ check for stime functions
+
+2004-03-30 21:14 hardaker
+
+ * acconfig.h:
+
+ - undef ssize_t
+
+2004-03-30 17:06 slif
+
+ * snmplib/snmp_logging.c:
+
+ remove commented and unused variables. flag static variable as problem for threads.
+
+2004-03-30 16:56 slif
+
+ * win32/install-net-snmp.bat:
+
+ mildly enforce running from base source directory.
+
+2004-03-30 16:53 slif
+
+ * win32/mib_module_includes.h:
+
+ init examples modules
+
+2004-03-30 10:45 hardaker
+
+ * perl/SNMP/t/mib.t:
+
+ include previously-broken tests again
+
+2004-03-30 10:41 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ Fix a really old and annoying bug: use set_boolean instead of toggle_boolean for telling the library when to replace old MIBs while parsing. Affected a bunch of stuff in odd ways.
+
+2004-03-30 05:01 dts12
+
+ * include/net-snmp/library/snmp_logging.h,
+ snmplib/snmp_logging.c:
+
+ New logging option '-Ln' to explicitly turn off logging
+
+2004-03-29 20:20 rstory
+
+ * agent/mibgroup/: if-mib.h, ip-forward-mib.h:
+
+ config-require headers
+
+2004-03-29 20:18 rstory
+
+ * agent/mibgroup/if-mib/: ifTable/default-table-ifTable.m2d,
+ ifTable/ifTable.c, ifTable/ifTable.h,
+ ifTable/ifTable_constants.h, ifTable/ifTable_data_access.c
+, ifTable/ifTable_data_access.h,
+ ifTable/ifTable_interface.c, ifTable/ifTable_interface.h
+, ifXTable/default-table-ifXTable.m2d,
+ ifXTable/ifXTable.c, ifXTable/ifXTable.h,
+ ifXTable/ifXTable_constants.h,
+ ifXTable/ifXTable_data_access.c,
+ ifXTable/ifXTable_data_access.h,
+ ifXTable/ifXTable_interface.c,
+ ifXTable/ifXTable_interface.h:
+
+ new implementations of ifTable and ifXTable, based on generated code from
+ mib2c MFD + container-cached conf files
+
+2004-03-29 16:28 slif
+
+ * perl/SNMP/SNMP.pm:
+
+ fix spell Acknowledgements, add blank before =cut so that it will be parsed correctly.
+
+2004-03-29 15:40 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ use unused vars
+
+2004-03-29 15:40 rstory
+
+ * local/mib2c-conf.d/node-get.m2i:
+
+ tweak comment
+
+2004-03-29 15:39 rstory
+
+ * local/mib2c-conf.d/mfd-makefile.m2m:
+
+ slight re-org; include (commented out) gnu make stuff
+
+2004-03-29 15:37 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ rework data_context so we don't use a typedef to a pointer
+ (e.g. typedef x* x_data); use unused vars; allow user to pass existing data
+ ptr when creating row context; set val_len to buf size iff not already set
+
+2004-03-29 15:33 rstory
+
+ * local/mib2c-conf.d/: mfd-data-access.m2c, mfd-data-get.m2c
+:
+
+ move table index functions to data-get; include data_access header
+
+2004-03-29 15:31 rstory
+
+ * local/mib2c-conf.d/: mfd-access-container-cached-defines.m2i
+, mfd-access-unsorted-external-defines.m2i:
+
+ rework data_context so we don't use a typedef to a pointer
+ (e.g. typedef x* x_data); tweak m2c_procesing type; remove unused var
+
+2004-03-29 15:28 rstory
+
+ * local/mib2c-conf.d/generic-table-constants.m2c:
+
+ tweak m2c_processing_type
+
+2004-03-29 15:26 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ rework data_context so we don't use a typedef to a pointer
+ (e.g. typedef x* x_data); include mib_modules header; tweak m2c_processing_type
+
+2004-03-29 15:25 rstory
+
+ * local/mib2c-conf.d/: generic-data-allocate.m2i,
+ generic-data-context.m2i, m2c_setup_table.m2i:
+
+ rework data_context so we don't use a typedef to a pointer
+ (e.g. typedef x* x_data)
+
+2004-03-29 14:26 hardaker
+
+ * snmplib/mib.c:
+
+ make parse_one_oid_index properly decode IP addresses in the right byte order.
+
+2004-03-29 12:58 slif
+
+ * win32/mib_module_inits.h:
+
+ init examples modules
+
+2004-03-29 09:19 slif
+
+ * testing/tests/: T110agentxget, T111agentxset,
+ T112agentxsetfail, T113agentxtrap:
+
+ patch [918838] test agentx using TCP sockets - iff transport not "unix"
+
+2004-03-29 07:54 rstory
+
+ * apps/snmptrapd.c:
+
+ sync w/5.1.1 (move var decls to top of functional block)
+
+2004-03-26 08:41 slif
+
+ * testing/eval_tools.sh:
+
+ apply patch #920234 to start programs in minimized window (mingw only).
+
+2004-03-26 08:03 slif
+
+ * win32/build.pl:
+
+ patch to fix [921423] install test sequence not right for perl build
+
+2004-03-26 07:53 slif
+
+ * configure.in:
+
+ patch #901434 tosock2.sh -- use Winsock 2.x for Windows socket library
+
+2004-03-22 15:37 rstory
+
+ * dist/cvsup:
+
+ fix path for cleanup of uploaded tarball
+
+2004-03-22 13:44 hardaker
+
+ * man/: Makefile.in, make_index.pl, man_sections.txt
+:
+
+ man/index.html generation stuff
+
+2004-03-20 21:43 hardaker
+
+ * man/Makefile.in:
+
+ newer man2html usage
+
+2004-03-20 10:02 slif
+
+ * testing/eval_onescript.sh:
+
+ patch [919132] test stop before finish is superfluous
+
+2004-03-19 16:18 hardaker
+
+ * configure.in:
+
+ Part of patch 917726 to fix a few windows config problems.
+
+2004-03-19 16:01 hardaker
+
+ * testing/tests/T100agenthup:
+
+ Patch from Michael Slifcak: [ 918828 ] conditional skip HUP test
+
+2004-03-19 15:58 hardaker
+
+ * configure.in, include/net-snmp/net-snmp-config.h.in
+:
+
+ Patch from Michael Slifcak: [ 918948 ] fix cygwin config problem
+
+2004-03-19 08:29 hardaker
+
+ * include/net-snmp/agent/watcher.h:
+
+ Added a missing prototype: netsnmp_register_watched_spinlock
+
+2004-03-19 08:23 hardaker
+
+ * snmplib/snmpv3.c:
+
+ Missed a AES128 -> AES conversion.
+
+2004-03-19 03:00 dts12
+
+ * README.win32:
+
+ Brief description of adding Win32 IPv6 transport support.
+
+2004-03-18 18:32 slif
+
+ * testing/eval_tools.sh:
+
+ patch [919116] minor diff in invoked log
+
+2004-03-18 15:44 slif
+
+ * testing/eval_tools.sh:
+
+ apply patch_915178.redux to finish the second part of that patch.
+
+2004-03-18 08:51 slif
+
+ * testing/tests/: T120proxyget, T121proxyset,
+ T122proxysetfail:
+
+ apply patch [918824] fix proxy tests
+
+2004-03-18 07:05 slif
+
+ * include/net-snmp/system/: cygwin.h, mingw32.h:
+
+ patch [917649] find uint32_t in win32-gcc build environments
+
+2004-03-16 13:05 rstory
+
+ * snmplib/Makefile.in:
+
+ merge configure substituted srs/obs def w/previous line, to avoid having a
+ continuation line followed by a blank line;
+ fixes for building outside of source dir (reorder include in CPPFLAGS so that
+ relative dirs come before srcdirs)
+
+2004-03-16 07:49 slif
+
+ * win32/: build.bat, build.pl:
+
+ synch with working version, delta install base, of course.
+
+2004-03-16 06:53 slif
+
+ * win32/net-snmp/: net-snmp-config.h, net-snmp-config.h.in
+:
+
+ add typedef for uint32_t -- absent from MSVS
+
+2004-03-16 05:15 slif
+
+ * win32/: Makefile.in, install-net-snmp.bat:
+
+ partial fix for bug 915178: adjust to accommodate 'make test' verification.
+
+2004-03-15 16:42 hardaker
+
+ * testing/tests/T151solarishostdisk:
+
+ Patch from Bruce Shaw: [ 894711 ] Solaris disk test fails on some OS's [second fix to his previous patch for even better support]
+
+2004-03-15 15:56 hardaker
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ Bug/patch from Bob Rowlands: [ 815361 ] override token in snmpd.conf does not allow snmpset on OID [really, this just returns proper error codes from system_mib variables]
+
+2004-03-15 15:52 hardaker
+
+ * agent/snmp_agent.c:
+
+ Bug/patch from Bob Rowlands: [ 815333 ] snmpvacm app not working with SNMP v1 [ really just fixing mib error codes remembered in snmp_agent.c]
+
+2004-03-15 15:43 hardaker
+
+ * agent/helpers/mode_end_call.c:
+
+ Bug/Patch from Bob Rowlands: [ 809282 ] netsnmp_mode_end_call_add_mode_callback called repeatedly
+
+2004-03-15 15:36 hardaker
+
+ * snmplib/snmpusm.c:
+
+ Patch from Bob Rowlands: [ 808881 ] Log a authentication failure message when authentication fails.
+
+2004-03-15 15:27 hardaker
+
+ * agent/snmp_vars.c, agent/mibgroup/mibII/at.c,
+ agent/mibgroup/mibII/tcpTable.c,
+ agent/mibgroup/mibII/udpTable.c,
+ agent/mibgroup/mibII/var_route.c,
+ include/net-snmp/agent/snmp_vars.h:
+
+ Patch from Bob Rowlands: [ 807333 ] 64 bit agent returns incorrect values for IpAddress
+
+2004-03-15 14:18 rstory
+
+ * agent/mibgroup/ip-forward-mib/ipCidrRouteTable/:
+ default-table-ipCidrRouteTable.m2d, ipCidrRouteTable.c
+, ipCidrRouteTable.h, ipCidrRouteTable_constants.h
+, ipCidrRouteTable_data_access.c,
+ ipCidrRouteTable_data_access.h,
+ ipCidrRouteTable_interface.c, ipCidrRouteTable_interface.h
+:
+
+ re-implement existing ipCidrRouteTable functionality w/MFD helper
+ (i.e. read-only support; use var_route function to get data)
+
+2004-03-15 12:10 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ tweaks for row-creation case
+
+2004-03-15 12:08 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ default to inconsistentName instead of noCreation
+
+2004-03-15 06:27 dts12
+
+ * win32/build.pl:
+
+ Tweak the option prompt slightly.
+ (Dave's being picky again!)
+
+2004-03-15 06:20 dts12
+
+ * apps/snmptrapd.c:
+
+ Listen on port 162 (rather than 161) if a (bare) interface
+ address is specified.
+
+2004-03-13 22:05 rstory
+
+ * agent/helpers/table_array.c:
+
+ null free'd pointer (better safe than sorry)
+
+2004-03-13 21:59 rstory
+
+ * agent/helpers/table_array.c:
+
+ plug memory leak
+
+2004-03-13 19:21 rstory
+
+ * agent/mibgroup/mibII/mibII_common.h:
+
+ fix for compiling w/dmalloc
+
+2004-03-13 06:40 slif
+
+ * win32/build.bat:
+
+ set temp var empty to remove from env
+
+2004-03-12 15:52 slif
+
+ * win32/net-snmp/net-snmp-config.h.in:
+
+ clean up base poop.
+
+2004-03-12 13:07 slif
+
+ * README.win32, win32/build.bat:
+
+ doc change for patch 912447
+
+2004-03-12 12:13 slif
+
+ * testing/: RUNTESTS, eval_tools.sh:
+
+ apply patch[915178] to fix MinGW (MSYS) make test freezes
+
+2004-03-12 11:29 slif
+
+ * win32/: Makefile-apps.in, libsnmp_dll/Makefile.in,
+ net-snmp/net-snmp-config.h.in, snmpd/Makefile.in,
+ snmpdsdk/Makefile.in, snmpnetstat/Makefile.in,
+ snmptrapd/Makefile.in:
+
+ modify patch[912447] to use correct winsock library
+
+2004-03-12 11:16 slif
+
+ * win32/: Configure, Makefile-apps.in, Makefile.in
+, build.bat, build.pl, libagent/Makefile.in
+, libhelpers/Makefile.in, libsnmp/Makefile.in,
+ libsnmp_dll/Makefile.in, net-snmp/net-snmp-config.h.in
+, netsnmpmibs/Makefile.in, netsnmpmibssdk/Makefile.in
+, snmpd/Makefile.in, snmpdsdk/Makefile.in,
+ snmpnetstat/Makefile.in, snmptrapd/Makefile.in:
+
+ apply patch [912447] Win32 MSVC Makefile system
+
+2004-03-10 19:24 slif
+
+ * testing/RUNTESTS:
+
+ aggressive search for executables below the base directory.
+
+2004-03-10 19:15 slif
+
+ * README.win32, win32/net-snmp/net-snmp-config.h:
+
+ don't set global snmp_errno; do provide undef USE_OPENSSL;
+ replace NETSNMP_NO_DLL with NETSNMP_USE_DLL;
+ document the change.
+
+2004-03-10 19:09 slif
+
+ * testing/eval_tools.sh:
+
+ invoke snmpd, snmptrapd with non-deprecated parameters for PID and logfile.
+
+2004-03-10 15:09 slif
+
+ * snmplib/scapi.c:
+
+ fix signed mismatch when testing proper length of keyed hash.
+
+2004-03-10 15:03 slif
+
+ * README.win32, win32/net-snmp/net-snmp-config.h:
+
+ mods for building win32 with OpenSSL support.
+
+2004-03-10 08:23 slif
+
+ * README.win32:
+
+ per AlexB - change instructions to use MinGW developer's recommended OpenSSL.
+
+2004-03-10 07:21 dts12
+
+ * perl/SNMP/t/startagent.pl:
+
+ Use the same testing ports as the main agent test suite
+ (somewhat less likely to clash with other services)
+
+2004-03-10 07:08 dts12
+
+ * man/snmpd.8.def:
+
+ Document support for multiple "optional" config files via -c
+
+2004-03-10 05:01 dts12
+
+ * agent/helpers/table.c:
+
+ Retry unfulfilled GETNEXT requests that simply haven't been attempted
+ (e.g. due to a missing column object), but not ones that have been
+ explicitly marked as failed (e.g. at the end of the table).
+
+ I'm not 100% convinced this is correct, but it seems to have the
+ right effect for both 'table_data' and 'table_dataset' based modules.
+
+2004-03-10 04:52 dts12
+
+ * agent/helpers/table_data.c:
+
+ Check for problems with all of the requested varbinds
+ (not just the first one), and handle 'noSuchObject' exceptions.
+ [Though in fact, this code isn't actually used]
+
+2004-03-09 12:50 rstory
+
+ * configure:
+
+ update to match new configure.in
+
+2004-03-09 11:34 rstory
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ debugging isn't platform specific
+
+2004-03-09 07:55 rstory
+
+ * configure.in, apps/Makefile.in:
+
+ separate traplibs from agent libs for dependencies
+
+2004-03-09 07:12 slif
+
+ * win32/install-net-snmp.bat:
+
+ make SNMPCONFPATH consistent with other platforms ("$prefix/etc/snmp")
+
+2004-03-09 07:09 slif
+
+ * snmplib/: snmp_api.c, snmp_client.c:
+
+ add comment MTCRITICAL_RESOURCE to use of snmp_errno in three places.
+
+2004-03-09 05:10 dts12
+
+ * snmplib/read_config.c:
+
+ Handle multiple "optional config" files.
+
+2004-03-09 04:24 slif
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ make SNMPCONFPATH consistent with other platforms ("$prefix/etc/snmp")
+
+2004-03-08 20:26 rstory
+
+ * README.aix:
+
+ new file
+
+2004-03-08 17:53 slif
+
+ * README.win32, perl/SNMP/README:
+
+ patch [911439] Updates to the README.win32 and SNMP README for Win32
+
+2004-03-08 16:14 hardaker
+
+ * apps/notification_log.c:
+
+ ifdef out routines that only available when agentx is going to be used.
+
+2004-03-08 16:09 rstory
+
+ * apps/Makefile.in:
+
+ use app libs for snmptrapd when agent disabled; move wraplib substitution to
+ a more reasonable place. snmptrapd still doesn't link, but it's closer...
+
+2004-03-08 14:38 rstory
+
+ * configure:
+
+ new configure for new configure.in
+
+2004-03-08 14:37 rstory
+
+ * configure.in:
+
+ add comments in hairy agent module processing; don't munge default mibs until
+ we are don't building it; tweaks for --disable-agent: use same default mibset
+ as --enable-mini-agent, don't to hairy agent module processing
+
+2004-03-08 13:24 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ Fix syntax errors.
+
+2004-03-08 12:42 slif
+
+ * agent/helpers/cache_handler.c:
+
+ remove unused local var cache_timeout
+
+2004-03-08 12:41 slif
+
+ * perl/TrapReceiver/TrapReceiver.xs:
+
+ use quotes to search local include paths for perl_snmptrapd.h
+
+2004-03-08 11:43 slif
+
+ * README.win32:
+
+ patch [910903] Updates to the README.win32 for GCC
+
+2004-03-08 09:37 hardaker
+
+ * perl/TrapReceiver/TrapReceiver.xs:
+
+ Patch from Andrew Hood to include proper headers and {} wrap perl special declrs
+
+2004-03-08 08:51 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ use default library values instead of hard-coded defaults for auth/priv protocols
+
+2004-03-06 19:23 rstory
+
+ * include/net-snmp/agent/table.h:
+
+ remove duplicate prototype
+
+2004-03-06 19:17 rstory
+
+ * local/mib2c-update:
+
+ tweak pattern for new doxygen conf files
+
+2004-03-06 19:16 rstory
+
+ * include/net-snmp/agent/table.h:
+
+ add prototype to get sparse table mib handler, netsnmp_table_next_column;
+ rename netsnmp_register_sparse_table to netsnmp_sparse_table_register; add
+ netsnmp_sparse_table_handler_get
+
+2004-03-06 19:12 rstory
+
+ * agent/helpers/table.c:
+
+ make sparse table helper static; add method to get sparse table mib handler;
+ warn if sparse table handler has a next pointer. use new handler custom bit
+ to only log once, if possible.
+
+2004-03-06 18:47 rstory
+
+ * include/net-snmp/agent/agent_handler.h:
+
+ reserver last 4 bits of flag for handler use
+
+2004-03-06 17:12 rstory
+
+ * local/mib2c-conf.d/: mfd-doxygen.m2c, mfd-top.m2c:
+
+ generate simply doxygen.conf file
+
+2004-03-05 21:48 hardaker
+
+ * agent/helpers/table_dataset.c:
+
+ Fixed the add_row token by sorting incoming columns from the parser
+
+2004-03-05 17:03 rstory
+
+ * local/mib2c-conf.d/mfd-readme.m2c:
+
+ updates from older changes; still slightly out of date
+
+2004-03-05 17:02 rstory
+
+ * local/mib2c-update:
+
+ don't recurse on diff; cp defaults instead of moving
+
+2004-03-05 17:01 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ new var for param calls by val
+
+2004-03-05 17:00 rstory
+
+ * local/mib2c-conf.d/m2c_setup_table.m2i:
+
+ fix evaluation problem in generated default file
+
+2004-03-05 16:59 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-defines.m2i
+:
+
+ tweaks to comments for better doxygen docs; use multiple passes to keep header
+ and source in same include; move indexes_set, init_data into data_access.m2c
+
+2004-03-05 16:58 rstory
+
+ * local/mib2c-conf.d/mfd-access-container-cached-defines.m2i:
+
+ tweaks to comments for better doxygen docs; use multiple passes to keep header
+ and source in same include; add example code; move as much cache stuff as
+ possible into interface
+
+2004-03-05 16:56 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes-set.m2i:
+
+ tweaks to comments for better doxygen docs; use multiple passes to keep header
+ and source in same include; break set_indexes into 2 pieces
+
+2004-03-05 16:55 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ tweaks to comments for better doxygen docs; use multiple passes to keep header
+ and source in same include; re-add pre/post; define MFD return code here, since
+ table_mfd no longer exists;
+
+2004-03-05 16:53 rstory
+
+ * local/mib2c-conf.d/mfd-makefile.m2m:
+
+ fix syntax error
+
+2004-03-05 16:53 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ tweaks to comments for better doxygen docs; use multiple passes to keep header
+ and source in same include; re-add pre/post wrapper; call new row_prep
+
+2004-03-05 16:51 rstory
+
+ * local/mib2c-conf.d/: mfd-data-get.m2c, mfd-data-set.m2c
+:
+
+ tweaks to comments for better doxygen docs; use multiple passes to keep header
+ and source in same include
+
+2004-03-05 16:51 rstory
+
+ * local/mib2c-conf.d/mfd-data-access.m2c:
+
+ tweaks to comments for better doxygen docs; use multiple passes to keep header
+ and source in same include; mov init_data here; add row_prep
+
+2004-03-05 16:48 rstory
+
+ * local/mib2c-conf.d/: generic-table-indexes-from-oid.m2i,
+ generic-value-map-func.m2i, node-get.m2i,
+ node-set.m2i, parent-set.m2i:
+
+ tweaks to comments for better doxygen docs; use multiple passes to keep header
+ and souce in same include
+
+2004-03-05 16:44 rstory
+
+ * agent/helpers/cache_handler.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ add flags; add expired; only use default timeout when cache created;
+
+2004-03-05 16:42 hardaker
+
+ * snmplib/mib.c:
+
+ have mib_to_asn_type return ASN_UNSIGNED instead of ASN_UINTEGER,
+ which is the proper data type.
+
+2004-03-05 16:41 hardaker
+
+ * agent/helpers/table_data.c:
+
+ Remove the sparse table registration and register it as a normal table.
+ 1) the higher table handler always calls the sparse table handler
+ anyway, so it would be redundant even if it did work.
+ 2) The sparse table handler doesn't call any children, and doesn't
+ set the autonext flag so its alway the end of the line (this took
+ me an hour to find).
+
+2004-03-05 16:40 hardaker
+
+ * agent/helpers/table_dataset.c:
+
+ change the help information for add_row to mention that you need the
+ table name you want to add the data to.
+
+2004-03-05 14:58 hardaker
+
+ * agent/: agent_registry.c, snmp_agent.c:
+
+ Fix the oid registration cache not being invalidated properly. Bug #900967
+
+2004-03-05 11:29 slif
+
+ * apps/snmptrapd.c:
+
+ fix [706093] by not defining variables a second time.
+
+2004-03-05 10:03 slif
+
+ * perl/TrapReceiver/MANIFEST:
+
+ quell manifest check errors (makefile, pm_to_blib, .c file).
+
+2004-03-05 10:03 slif
+
+ * include/net-snmp/library/snmp_impl.h:
+
+ use of SET_SNMP_ERRNO requires -- enable DLL decoration for snmp_errno
+
+2004-03-05 10:02 slif
+
+ * include/net-snmp/agent/table.h:
+
+ add missing declaration for netsnmp_table_next_column
+
+2004-03-05 10:00 slif
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ add symbol usmAESPrivProtocol
+
+2004-03-05 08:23 rstory
+
+ * include/net-snmp/library/snmp-tc.h:
+
+ fix macro name, as noted on users
+
+2004-03-05 05:51 slif
+
+ * agent/mibgroup/ucd-snmp/file.c:
+
+ remove unused var 'space'
+
+2004-03-05 05:30 slif
+
+ * configure.in, snmplib/system.c,
+ win32/encode_keychange/encode_keychange.dsp,
+ win32/libsnmp_dll/libsnmp_dll.dsp,
+ win32/snmpbulkget/snmpbulkget.dsp,
+ win32/snmpbulkwalk/snmpbulkwalk.dsp, win32/snmpd/snmpd.dsp
+, win32/snmpdelta/snmpdelta.dsp,
+ win32/snmpdf/snmpdf.dsp, win32/snmpdsdk/snmpd.dsp,
+ win32/snmpget/snmpget.dsp,
+ win32/snmpgetnext/snmpgetnext.dsp,
+ win32/snmpnetstat/snmpnetstat.dsp,
+ win32/snmpset/snmpset.dsp, win32/snmpstatus/snmpstatus.dsp
+, win32/snmptable/snmptable.dsp,
+ win32/snmptest/snmptest.dsp,
+ win32/snmptranslate/snmptranslate.dsp,
+ win32/snmptrap/snmptrap.dsp, win32/snmptrapd/snmptrapd.dsp
+, win32/snmpusm/snmpusm.dsp,
+ win32/snmpvacm/snmpvacm.dsp, win32/snmpwalk/snmpwalk.dsp
+, configure:
+
+ patch [901434] apply useWinsock2.sh [undo by using useWinsock1.sh]
+
+2004-03-04 22:27 hardaker
+
+ * agent/helpers/all_helpers.c:
+
+ initialize the table_dataset helper (again... I *know* it was initialized in the past. What happened?)
+
+2004-03-04 22:05 rstory
+
+ * agent/snmp_agent.c:
+
+ turn off caching until real fix found for bug 900967: agentx, caching
+
+2004-03-04 20:28 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ *finally* fix agentx hang when master disappears
+
+2004-03-04 15:41 rstory
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ fix execfix for relocatable execs; add fix cmd to relocatable tree
+
+2004-03-04 09:45 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ minor wording changes about version number changing
+
+2004-03-04 09:43 hardaker
+
+ * configure, configure.in, apps/Makefile.in:
+
+ - fix building trapd when the agent isn't being built
+
+2004-03-04 09:12 hardaker
+
+ * perl/TrapReceiver/Makefile.PL:
+
+ update to the way we normally do perl Makefiles, which is not normal.
+
+2004-03-04 08:53 hardaker
+
+ * perl/: OID/OID.xs, TrapReceiver/TrapReceiver.xs,
+ agent/agent.xs:
+
+ - convert fprintf(stderr to snmp_log(LOG_ERR
+
+2004-03-04 08:48 rstory
+
+ * agent/helpers/null.c:
+
+ fix syntax errors
+
+2004-03-04 05:39 slif
+
+ * configure.in, snmplib/Makefile.in, configure
+:
+
+ patch [909459] Configure patch to allow for Win32 objects.
+
+2004-03-03 22:11 slif
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ change "progra~1" to "Program Files" to avoid problem with DOS name warping.
+
+2004-03-03 21:22 slif
+
+ * perl/: Makefile.PL, Makefile.subs.pl, ASN/Makefile.PL
+, OID/Makefile.PL, SNMP/Makefile.PL,
+ SNMP/README, agent/Makefile.PL,
+ agent/default_store/Makefile.PL, default_store/Makefile.PL
+:
+
+ patch [906274] Win32 Perl compile with release/debug path changes
+
+2004-03-03 14:15 rstory
+
+ * agent/helpers/null.c:
+
+ specify mode in reginfo
+
+2004-03-03 13:05 hardaker
+
+ * agent/mibgroup/ucd-snmp/: file.c, file.h:
+
+ - make the file token accept a default size like the docs say it will.
+
+2004-03-03 12:07 rstory
+
+ * snmplib/snmp_api.c:
+
+ comment out pdu double free check til better (non-leaking) solution found
+
+2004-03-03 08:56 rstory
+
+ * man/: Makefile.in, netsnmp_mfd_pdu_context_s.3:
+
+ remove man page for removed structure
+
+2004-03-03 08:52 rstory
+
+ * local/mib2c-update:
+
+ new utility to regenerate mib2c code, preserving existing customizations
+
+2004-03-03 07:52 slif
+
+ * win32/libhelpers/libhelpers.dsp:
+
+ table_mfd removed -- dont build it.
+
+2004-03-03 07:46 slif
+
+ * win32/: install-net-snmp.bat, nmakeperl.bat:
+
+ per AlexB - add "-help" descriptions. create BASE/temp subdir.
+
+2004-03-02 13:45 slif
+
+ * agent/snmpd.c:
+
+ patch [753894] catch SIGXFSZ w/o strsignal
+
+2004-03-02 12:56 rstory
+
+ * local/mib2c.mfd.conf:
+
+ top level mfd conf file
+
+2004-03-02 04:18 slif
+
+ * agent/snmpd.c:
+
+ patch [753894] catch SIGXFSZ, log message and exit, do not coredump
+
+2004-03-02 04:06 slif
+
+ * agent/mibgroup/mibII/sysORTable.c:
+
+ fix [771315] Agent coredumps during shutdown
+
+2004-03-01 21:09 rstory
+
+ * agent/mibgroup/agentx/master.c:
+
+ PC police - tone down error message
+
+2004-03-01 21:05 rstory
+
+ * agent/mibgroup/agent/nsCache.c:
+
+ change globals to use functions to access cache_handler vars, or use new
+ datastore values
+
+2004-03-01 21:03 rstory
+
+ * include/net-snmp/library/container_binary_array.h:
+
+ fix typo in comment; remove noalloc prototype
+
+2004-03-01 21:01 rstory
+
+ * include/net-snmp/agent/ds_agent.h:
+
+ fix typo in comment; add NO_CACHING and CACHE_TIMEOUT
+
+2004-03-01 21:00 rstory
+
+ * agent/helpers/baby_steps.c,
+ include/net-snmp/agent/baby_steps.h:
+
+ new baby_steps access multiplexer handler; make actual helper routines static;
+ rename functions, defines for backwards compatability
+
+2004-03-01 20:53 rstory
+
+ * agent/snmp_vars.c:
+
+ protect against multiple calls to init_agent
+
+2004-03-01 20:52 rstory
+
+ * agent/snmpd.c:
+
+ set default agent cache timeout; debug msg for errno on select error
+
+2004-03-01 20:51 rstory
+
+ * agent/snmp_agent.c:
+
+ merge common case in switch
+
+2004-03-01 20:50 rstory
+
+ * agent/helpers/cache_handler.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ replace globals w/local static + access function; use datastore for caching
+ enabled, cache timeout; test cache_free for NULL before calling it; don't
+ use goto; use new auto-next functionality to call child handlers; new
+ cache_create, cache_handler_register, cache_find_by_oid; don't reload cache
+ more than once per request; note possibility of cache being free'd mid-
+ request for delegated requests, w/proposed solution
+
+2004-03-01 20:19 rstory
+
+ * agent/mibgroup/mibII/: ifTable.c, ifTable.h:
+
+ switch from iterator to new table_container handler.
+
+2004-03-01 19:55 rstory
+
+ * agent/mibgroup/mibII/ifTable.c:
+
+ run through indent
+
+2004-03-01 06:06 slif
+
+ * perl/SNMP/t/bulkwalk.t:
+
+ undo patch at r5.3 -- restore (16) in test to get only non-repeaters
+
+2004-02-29 21:13 rstory
+
+ * agent/helpers/table_container.c:
+
+ move netsnmp_table_index_find_next_row here from table.c
+
+2004-02-29 21:12 rstory
+
+ * include/net-snmp/agent/all_helpers.h:
+
+ add table_container; remove table_mfd
+
+2004-02-29 21:07 rstory
+
+ * agent/Makefile.depend, agent/mibgroup/Makefile.depend
+, apps/Makefile.depend:
+
+ remove mfd dependencies
+
+2004-02-29 20:54 rstory
+
+ * agent/agent_handler.c,
+ include/net-snmp/agent/agent_handler.h:
+
+ add flags field to mib handler structure; new handler AUTO_NEXT flags for
+ handlers that don't want to bother with calling sub-handlers (also reduces
+ stack depth); new netsnmp_handler_registration_create which resigers existing
+ handler; log warning for handlers registering w/no modes; handle injection to a
+ registration w/out a handler; new modes HANDLER_CAN_NOT_CREATE,
+ HANDLER_CAN_SET_ONLY; or in HANDLER_CAN_NOT_CREATE w/ DEFAULT; add void pointer
+ to handler registration
+
+2004-02-29 20:39 rstory
+
+ * agent/helpers/Makefile.depend:
+
+ remove table_mfd.h dependencies
+
+2004-02-29 20:24 rstory
+
+ * agent/helpers/table.c:
+
+ sync closest_column w/fixes in 5-1-patches; check for existing tbl_req_info in
+ requests; call sparse table handler after normal table processing; move
+ netsnmp_table_index_find_next_row to table_container.c
+
+2004-02-29 17:14 rstory
+
+ * include/net-snmp/agent/table_container.h:
+
+ prototype for handler get; make inline func static inline
+
+2004-02-29 17:13 rstory
+
+ * agent/helpers/Makefile.in:
+
+ out w/the old, in w/the new (remove mfd helper, add table_container)
+
+2004-02-29 17:11 rstory
+
+ * agent/helpers/table_mfd.c,
+ include/net-snmp/agent/table_mfd.h:
+
+ remove mfd helper; mfd conf files now user new table_container helper
+
+2004-02-29 17:06 rstory
+
+ * agent/helpers/table_container.c:
+
+ remove grouping option (user can use row_merge instead); new function go get
+ handler w/out register; break complex condition into simpler conditionals so
+ breakpoints can be set on condition; don't call lower handlers if no requests
+ need processing
+
+2004-02-29 17:01 rstory
+
+ * snmplib/: container_iterator.c, container_list_ssll.c
+, container_null.c:
+
+ add support for container clear
+
+2004-02-29 16:33 rstory
+
+ * agent/mibgroup/ucd-snmp/dlmod.c:
+
+ enable dlmod support if HAVE_LIBDL
+
+2004-02-29 16:25 rstory
+
+ * snmplib/snmp_api.c:
+
+ catch bad size for fixed size types
+
+2004-02-29 16:20 rstory
+
+ * snmplib/container_binary_array.c:
+
+ new function to support CONTAINER_CLEAR; make some functions static inline
+
+2004-02-29 16:14 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ fix insert/remove/free inlines to properly deal with multiple indexes; add new
+ CONTAINER_CLEAR macro/callback; add notes on freeing returned array from
+ get_subset
+
+2004-02-29 16:05 rstory
+
+ * local/mib2c-conf.d/node-get.m2i:
+
+ use mfd error instead of snmp error
+
+2004-02-29 16:05 rstory
+
+ * local/mib2c-conf.d/node-set.m2i:
+
+ setup size names before including generic file
+
+2004-02-29 16:04 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ remove extraneous end; add comments
+
+2004-02-29 16:01 rstory
+
+ * local/mib2c-conf.d/subagent.m2c:
+
+ add exit() call
+
+2004-02-29 16:00 rstory
+
+ * local/mib2c-conf.d/mfd-makefile.m2m:
+
+ tweaks to support new generate fewer files flag
+
+2004-02-29 15:58 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ tweaks to support new generate fewer files flag; use gloabl table oid/size var;
+ switch mfd wrapper functions to use standard new api parameters; new optional
+ cache; use two new helpers: netsnmp_baby_steps_access_multiplexer and
+ netsnmp_container_table_handler; look for data/put created row data in request
+ ala container table handler for lower handlers; tweaks for using new single
+ file access methods
+
+2004-02-29 15:52 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ tweaks to support new generate fewer files flag; make table oid/size a global
+ var; switch mfd wrapper functions to use standard new api parameters
+
+2004-02-29 15:49 rstory
+
+ * local/mib2c-conf.d/: mfd-data-get.m2c, mfd-data-set.m2c
+:
+
+ use report progress flag; tweaks to support new generate fewer files flag
+
+2004-02-29 15:30 rstory
+
+ * local/mib2c-conf.d/mfd-data-access.m2c:
+
+ tweaks to use new single file access methods (processing type flag)
+
+2004-02-29 15:28 rstory
+
+ * local/mib2c-conf.d/m2c_setup_table.m2i:
+
+ test new flag for less verbose output; document transient values in comments
+ and generated table default file; make sure mfd defaults have been processed
+
+2004-02-29 15:19 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ default to no mapping, except for nodes w/enums; use param names for node
+ names; properly escape len var name
+
+2004-02-29 15:05 rstory
+
+ * local/mib2c-conf.d/generic-value-map.m2i:
+
+ tweak order of testing conditionals
+
+2004-02-29 15:03 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes-set.m2i:
+
+ comment tweaks; make sure to clear tmp var before use
+
+2004-02-29 15:02 rstory
+
+ * local/mib2c-conf.d/: generic-table-enums.m2c,
+ generic-table-oids.m2c:
+
+ tweaks to support generating fewer files
+
+2004-02-29 15:01 rstory
+
+ * local/mib2c-conf.d/generic-table-constants.m2c:
+
+ new file to generate combined oid/enum header
+
+2004-02-29 14:59 rstory
+
+ * local/mib2c-conf.d/default-mfd-top.m2c:
+
+ init new flag for creating fewer files; init new flag for processing parts
+ of files (until I can figure out if I can convert to new define/calldefine)
+
+2004-02-29 14:55 rstory
+
+ * local/mib2c-conf.d/mfd-access-container-cached-defines.m2i:
+
+ new access method defines
+
+2004-02-29 14:54 rstory
+
+ * local/mib2c-conf.d/: mfd-access-unsorted-external-body.m2i
+, mfd-access-unsorted-external-header.m2i,
+ mfd-access-unsorted-external-interface.m2i,
+ mfd-access-unsorted-external-readme.m2i,
+ mfd-access-unsorted-external-setup.m2i:
+
+ remove files (merged int mfd-access-undorted-external-defines.m2i)
+
+2004-02-29 14:53 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-defines.m2i
+:
+
+ merge multiple access files into one file
+
+2004-02-27 22:32 hardaker
+
+ * agent/snmp_agent.c:
+
+ - fix the case where incoming getbulks with no repeating varbinds is received.
+
+2004-02-27 15:04 slif
+
+ * include/net-snmp/system/mingw32.h, perl/Makefile.PL,
+ perl/ASN/Makefile.PL, perl/OID/Makefile.PL,
+ perl/SNMP/Makefile.PL, perl/agent/Makefile.PL,
+ perl/agent/default_store/Makefile.PL,
+ perl/default_store/Makefile.PL:
+
+ patch [ 905465 ] MinGW Perl module compiling with ActiveState Perl
+
+2004-02-27 07:18 slif
+
+ * perl/SNMP/Makefile.PL:
+
+ construct install tree similar to install tree that gcc builds use.
+
+2004-02-27 06:05 slif
+
+ * win32/install-net-snmp.bat:
+
+ build MSVS release and debug versions having the same name.
+
+2004-02-27 05:42 slif
+
+ * win32/: encode_keychange/encode_keychange.dsp,
+ libagent/libagent.dsp, libhelpers/libhelpers.dsp,
+ libsnmp/libsnmp.dsp, libsnmp_dll/libsnmp_dll.dsp,
+ netsnmpmibs/netsnmpmibs.dsp,
+ netsnmpmibssdk/netsnmpmibssdk.dsp,
+ snmpbulkget/snmpbulkget.dsp, snmpbulkwalk/snmpbulkwalk.dsp
+, snmpd/snmpd.dsp, snmpdelta/snmpdelta.dsp,
+ snmpdf/snmpdf.dsp, snmpdsdk/snmpd.dsp,
+ snmpget/snmpget.dsp, snmpgetnext/snmpgetnext.dsp,
+ snmpnetstat/snmpnetstat.dsp, snmpset/snmpset.dsp,
+ snmpstatus/snmpstatus.dsp, snmptable/snmptable.dsp,
+ snmptest/snmptest.dsp, snmptranslate/snmptranslate.dsp
+, snmptrap/snmptrap.dsp, snmptrapd/snmptrapd.dsp
+, snmpusm/snmpusm.dsp, snmpvacm/snmpvacm.dsp,
+ snmpwalk/snmpwalk.dsp:
+
+ build MSVS release and debug versions having the same name.
+
+2004-02-27 05:11 slif
+
+ * win32/: install-net-snmp.bat, net-snmp/net-snmp-config.h
+:
+
+ construct install tree similar to install tree that gcc builds use.
+
+2004-02-27 04:50 slif
+
+ * agent/snmpd.c, snmplib/Makefile.in,
+ snmplib/winservice.c:
+
+ enable gcc builds of Windows service code for the agent.
+
+2004-02-26 17:20 slif
+
+ * agent/mibgroup/tunnel/tunnel.c:
+
+ remove unnecessary setting of NETSNMP_DS_LIB_APPTYPE.
+
+2004-02-26 16:44 hardaker
+
+ * local/mib2c:
+
+ common-ize loop and saving of state variables through a creative use
+ of references.
+
+2004-02-26 16:21 hardaker
+
+ * local/mib2c:
+
+ support for @define sections which can be later referred to by @calldefine
+
+2004-02-26 16:11 hardaker
+
+ * local/Version-Munge.pl:
+
+ - doxygen config file.
+ - TrapRecevier perl mod.
+
+2004-02-26 06:50 dts12
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ Don't call 'TCP_Count_Connections' if the tcpTable module isn't included.
+
+2004-02-26 06:32 dts12
+
+ * FAQ:
+
+ Minor wordsmithing tweaks to Bruce's FAQ changes.
+ Gosh, but Dave's a picky bugger at times.
+ Never mind, perhaps if you let him amuse himself with the documentation,
+ you might be able to keep him away from more critical bits of the project....
+
+2004-02-25 23:47 slif
+
+ * agent/mibgroup/agent/nsLogging.c:
+
+ remove CR accidentally inserted previously.
+
+2004-02-25 21:42 slif
+
+ * snmplib/system.c:
+
+ use RFC 3330 permitted address for this host when looking in get_myaddr
+
+2004-02-25 16:59 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ Enable AES support for the SNMP module (can't believe it's been missing)
+
+2004-02-25 14:46 slif
+
+ * perl/SNMP/SNMP.xs:
+
+ remove unneeded workaround patch [ 840830 ] SNMP.xs Free to wrong pool crash on Windows
+
+2004-02-25 13:06 slif
+
+ * README.win32, perl/SNMP/README:
+
+ patch [901944] win32 doc updates from Alex Burger
+
+2004-02-24 10:39 slif
+
+ * include/net-snmp/system/mingw32.h:
+
+ use winsock gethostbyname, getservbyname on mingw32.
+
+2004-02-24 09:58 slif
+
+ * win32/install-net-snmp.bat:
+
+ per Bernhard Penz: deep copy of include tree
+
+2004-02-24 06:26 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ Patch from Bob Rowlands: [ bug 902722 ] Able to delete view even when storage type = permanent
+
+2004-02-24 05:43 slif
+
+ * agent/mibgroup/mibII/tcpTable.c:
+
+ patch [903424] per Andy Smith: ifdef win32 fix for tcpTable.c (cygwin)
+
+2004-02-23 16:32 hardaker
+
+ * FAQ:
+
+ Patch #901460 from Bruce Shaw: updating misc FAQ information
+
+2004-02-23 16:21 hardaker
+
+ * INSTALL:
+
+ updated perl build info
+
+2004-02-23 16:13 hardaker
+
+ * INSTALL:
+
+ patch #901375 from Bruce Shaw: some information on INSTALL is stale
+
+2004-02-23 13:29 slif
+
+ * configure.in, configure:
+
+ undo previous patch -- no semi-colons in DEFAULT_MIB{FILES,DIRS}
+
+2004-02-23 10:57 slif
+
+ * configure.in, configure:
+
+ convert other list-oriented settings to consider semi-colon delimiter for mingw32
+
+2004-02-22 09:48 slif
+
+ * win32/install-net-snmp.bat:
+
+ per AlexB: also install snmpconf files
+
+2004-02-21 13:56 slif
+
+ * README.win32, acconfig.h,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/library/getopt.h, snmplib/tools.c,
+ win32/libsnmp_dll/libsnmp.def,
+ win32/net-snmp/net-snmp-config.h, win32/libsdll.dsw:
+
+ Apply patch #898464 to fix bugs #896030 and #773412
+
+2004-02-20 07:18 slif
+
+ * configure.in, include/net-snmp/net-snmp-config.h.in
+, configure:
+
+ per AlexB: fix DEFAULT_MIBS to use ';' separator on Win32.
+
+2004-02-19 20:46 hardaker
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ Whoops. That would not have worked. Silly me.
+
+2004-02-19 20:42 hardaker
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ check number of support processors properly
+
+2004-02-19 20:37 hardaker
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ [ 900244 ] support up to 32 CPUs on linux from Michal Luczak
+
+2004-02-19 19:41 slif
+
+ * agent/mibgroup/notification/: snmpNotifyFilterTable.h,
+ snmpNotifyTable.h:
+
+ fix bug 898509 function pointer prototypes defined twice
+
+2004-02-19 18:50 slif
+
+ * configure.in, configure:
+
+ allow DOS volume name [A-Z]: to begin the path spec for prefixes
+
+2004-02-19 09:41 slif
+
+ * net-snmp-config.in:
+
+ fix spell NSC_EXEC_PREFIX
+
+2004-02-18 23:35 slif
+
+ * perl/SNMP/t/mibload.t:
+
+ per AlexB: -win32 support
+
+2004-02-18 23:35 slif
+
+ * perl/SNMP/t/startagent.pl:
+
+ per AlexB:
+ -add Win32 support for starting / stopping snmpd and snmptrapd
+ -allow spaces in snmptest.cmd file
+
+2004-02-18 23:34 slif
+
+ * perl/SNMP/Makefile.PL:
+
+ -make $my opts global so it's visible to GetTestInfo()
+ -re-write win32 code create snmptest.cmd file
+
+2004-02-18 23:27 slif
+
+ * perl/SNMP/t/: bulkwalk.t, notify.t:
+
+ per AlexB: test that variables are defined before using them.
+
+2004-02-18 23:17 slif
+
+ * perl/SNMP/t/: async.t, bulkwalk.t:
+
+ per AlexB: disable asynch tests when run on win32 platform.
+
+2004-02-18 23:00 slif
+
+ * perl/SNMP/t/: bulkwalk.t, mibload.t:
+
+ per AlexB: add missing snmptest_cleanup call
+
+2004-02-18 22:45 slif
+
+ * perl/SNMP/t/conf.t:
+
+ per AlexB: typo fix "compiled the"
+
+2004-02-18 22:40 slif
+
+ * perl/: Makefile.PL, Makefile.subs.pl, ASN/Makefile.PL
+, OID/Makefile.PL, SNMP/Makefile.PL,
+ agent/Makefile.PL, default_store/Makefile.PL:
+
+ from Alex Burger: case insensitive check for -NET-SNMP-IN-SOURCE command param.
+
+2004-02-18 12:35 hardaker
+
+ * Makefile.in:
+
+ Remove a v3-security auto-built header during distclean
+
+2004-02-18 11:58 rstory
+
+ * dist/nsb-package:
+
+ document -C option in usage
+
+2004-02-18 11:57 rstory
+
+ * dist/nsb-nightly:
+
+ fix path in usage; use new nsg-suffic in upload path
+
+2004-02-18 11:40 slif
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ use INSTALL_BASE -relative mktemp file pattern.
+
+2004-02-18 09:24 rstory
+
+ * dist/nsb-functions:
+
+ make # err lines reported configurable. default to 25
+
+2004-02-18 06:14 dts12
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ Provide a definition for 'in6addr_any' under Windows
+ (Although there's an external declaration mentioned in
+ <ws2tcpip.h>, there no actual variable in the library)
+
+2004-02-17 10:33 hardaker
+
+ * makenosysdepend.pl:
+
+ regexp touchups
+
+2004-02-17 07:27 rstory
+
+ * snmplib/parse.c:
+
+ bump MAXTC up to 4096
+
+2004-02-17 07:25 rstory
+
+ * dist/nsb-functions:
+
+ only append suffic to build dir when building default build dir; remove
+ system specific tweaks for sf cf, they should go in ~/.snmp/nsb-rc
+
+2004-02-17 05:54 slif
+
+ * snmplib/mib.c:
+
+ fix error after change for Fix [801928]
+
+2004-02-17 04:39 slif
+
+ * snmplib/mib.c:
+
+ Fix [801928] wrong call of strlcpy in uptime_string
+
+2004-02-17 03:23 dts12
+
+ * snmplib/: snmpTCPIPv6Domain.c, snmpUDPIPv6Domain.c:
+
+ Tweak IPv6 transports so that they compile under Windows.
+
+2004-02-17 02:42 dts12
+
+ * snmplib/: inet_ntop.c, inet_pton.c:
+
+ Provide implementations of 'inet_ntop' and 'inet_pton' for
+ systems that don't support them natively.
+
+2004-02-17 02:29 slif
+
+ * agent/mibgroup/ucd-snmp/loadave.c:
+
+ Fix [896793] loadave.c includes sys/stat.h twice
+
+2004-02-17 00:45 slif
+
+ * agent/mibgroup/notification/snmpNotifyFilterProfileTable.h:
+
+ fix bug 898509 function pointer prototypes defined twice
+
+2004-02-16 21:40 hardaker
+
+ * agent/mibgroup/ucd-snmp/proc.c:
+
+ removed unused function from last patch
+
+2004-02-16 21:35 hardaker
+
+ * agent/mibgroup/: host/hr_swrun.c, host/hr_system.c,
+ ucd-snmp/proc.c:
+
+ patch [ 836393 ] More proc improvements for Linux from Howard Wilkinson
+
+2004-02-16 18:28 slif
+
+ * win32/nmakeperl.bat:
+
+ note sub-directory where "nmake" output files are written.
+
+2004-02-16 15:03 hardaker
+
+ * testing/: README, RUNTESTS, TESTCONF.sh,
+ eval_tools.sh, tests/Svacmconfig, tests/Svanyconfig
+, tests/T001snmpv1get, tests/T014snmpv2cget,
+ tests/T015snmpv2cgetnext, tests/T0160snmpv2cbulkget,
+ tests/T016snmpv2cgetfail, tests/T017snmpv2ctov1getfail
+, tests/T018snmpv1tov2cgetfail,
+ tests/T019snmpv2cnosuch, tests/T020snmpv3get,
+ tests/T021snmpv3getnext, tests/T0220snmpv3bulkget,
+ tests/T022snmpv3getMD5, tests/T023snmpv3getMD5DES,
+ tests/T024snmpv3getSHA1, tests/T025snmpv3getSHADES,
+ tests/T028snmpv3getfail, tests/T030snmpv3usercreation
+, tests/T049snmpv3inform, tests/T050snmpv3trap,
+ tests/T051snmpv2ctrap, tests/T052snmpv2cinform,
+ tests/T053agentv1trap, tests/T054agentv2ctrap,
+ tests/T055agentv1mintrap, tests/T056agentv2cmintrap,
+ tests/T058agentauthtrap, tests/T100agenthup,
+ tests/T110agentxget, tests/T111agentxset,
+ tests/T112agentxsetfail, tests/T113agentxtrap,
+ tests/T120proxyget, tests/T121proxyset,
+ tests/T122proxysetfail, tests/T130snmpv1vacmget,
+ tests/T131snmpv2cvacmget, tests/T132snmpv3vacmget,
+ tests/T140snmpv1vacmgetfail, tests/T141snmpv2cvacmgetfail
+, tests/T142snmpv3vacmgetfail:
+
+ Patch #702835 (plus tweaks): patch to enable test cases run on different transport domain from Xiaofeng Ling
+
+2004-02-16 14:39 hardaker
+
+ * agent/mibgroup/ucd-snmp/errormib.c:
+
+ Fix bug [ 896777 ] errormib.c includes sys/stat/h twice
+
+2004-02-16 14:20 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ [no log message]
+
+2004-02-16 14:09 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ Bug [ 897550 ] Perl SNMP.pm missing documentation and attached patch from Alex Burger
+
+2004-02-16 12:45 hardaker
+
+ * doxygen.conf, agent/agent_handler.c,
+ agent/agent_registry.c, agent/agent_trap.c,
+ agent/snmp_agent.c, agent/snmp_vars.c,
+ agent/helpers/instance.c, agent/helpers/scalar.c,
+ agent/helpers/table.c, agent/helpers/table_iterator.c
+, include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/table.h,
+ include/net-snmp/agent/table_iterator.h,
+ include/net-snmp/library/data_list.h,
+ include/net-snmp/library/default_store.h,
+ include/net-snmp/library/snmp_api.h, snmplib/callback.c
+, snmplib/default_store.c, snmplib/read_config.c
+, snmplib/snmp_alarm.c, snmplib/snmp_api.c,
+ snmplib/snmp_client.c, snmplib/snmp_logging.c:
+
+ Patch: [ 819241 ] Add to the API documentation from Bob Rowlands
+
+2004-02-16 11:41 hardaker
+
+ * apps/snmptable.c:
+
+ Patch [ 898160 ] Snmptable loops if table is at the end of the mib from Crispin Flowerday
+
+2004-02-16 10:30 slif
+
+ * README.win32:
+
+ make menu path to register PSDK more complete.
+
+2004-02-16 10:01 slif
+
+ * win32/: libsnmp/libsnmp.dsp, libsnmp_dll/libsnmp_dll.dsp
+:
+
+ remove platform SDK header Snmp.h from SOURCES list.
+
+2004-02-16 06:39 hardaker
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ Fix a missing variable from the previous patch.
+
+2004-02-15 18:19 slif
+
+ * win32/install-net-snmp.bat:
+
+ copy dll to system32 cache
+
+2004-02-15 15:47 slif
+
+ * win32/: win32.dsw, win32sdk.dsw:
+
+ the project dependencies are not reliable. remove them.
+
+2004-02-15 12:00 slif
+
+ * perl/SNMP/SNMP.xs:
+
+ remove XYX comments; note that snmp_init_mib_internals does nothing.
+
+2004-02-15 10:39 rstory
+
+ * dist/nsb-functions:
+
+ fix syntax error
+
+2004-02-15 10:32 rstory
+
+ * dist/nsb-functions:
+
+ check for and source new common config file
+
+2004-02-14 09:41 slif
+
+ * win32/: win32.dsw, win32sdk.dsw:
+
+ remove dependencies for libsnmp project
+
+2004-02-14 06:20 slif
+
+ * README:
+
+ Add Noah Friedman, fixing bug 887291
+
+2004-02-14 02:51 slif
+
+ * win32/win32sdk.dsw:
+
+ Remove global dependency for libsnmp project (not necessary).
+
+2004-02-13 16:02 slif
+
+ * win32/nmakeperl.bat:
+
+ better explanatory messages, and improved test results collected.
+
+2004-02-13 13:33 hardaker
+
+ * agent/mibgroup/mibII/ipAddr.c,
+ include/net-snmp/library/cmu_compat.h:
+
+ Patch [ 812034 ] ipAdEntReasmMaxSize does not return data on snmpget from Bob Rowlands
+
+2004-02-13 12:31 hardaker
+
+ * configure, configure.in:
+
+ fix AES note output broken by last patch
+
+2004-02-13 12:18 hardaker
+
+ * acconfig.h, configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in, snmplib/Makefile.in
+, snmplib/keytools.c, snmplib/pkcs.c,
+ snmplib/scapi.c:
+
+ Patch [ 807375 ] add standard PKCS#11 interface support for usm: alternative security library (openssl no longer needed on future solaris) from Bob Rowlands
+
+2004-02-13 11:59 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ Part of patch (some had been done) for [ 767316 ] fix handling of augmented tables in perl module from Randy Couey
+
+2004-02-13 11:48 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Second part of diskio load average patch
+
+2004-02-13 11:46 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c,
+ agent/mibgroup/ucd-snmp/diskio.h, mibs/UCD-DISKIO-MIB.txt
+:
+
+ patch [ 795424 ] diskioLA - disk load average for FreeBSD (devstat) from Rojer
+
+2004-02-13 11:19 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ patch [ 799050 ] AIX patches - ucd-snmp/diskio from Michael Kukat
+
+2004-02-13 11:14 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Missed a portion of patch #815439 fixing auth failure traps. patch got confused by previously existing code before.
+
+2004-02-13 10:48 slif
+
+ * perl/SNMP/SNMP.xs:
+
+ one line change to properly terminate a comment injected by the previous patch.
+
+2004-02-13 10:39 hardaker
+
+ * README:
+
+ Added Nick Barkas to the README
+
+2004-02-13 10:36 slif
+
+ * perl/SNMP/SNMP.xs:
+
+ Replace get_tree_head() for references to variables Mib and tree_head.
+ Remove DLL_IMPORT lines, and BOOT section, as they are not needed.
+ Mark questionable commented code with XYX for possible removal.
+
+2004-02-13 10:36 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+
+ Patch [ 895509 ] memory info from ucd-snmp mib on linux 2.6 from Nick Barkas
+
+2004-02-13 10:20 hardaker
+
+ * testing/tests/T151solarishostdisk:
+
+ Patch [ 894711 ] Solaris disk test fails on some OS's from Bruce Shaw
+
+2004-02-13 10:05 hardaker
+
+ * include/net-snmp/library/asn1.h,
+ include/net-snmp/library/check_varbind.h,
+ include/net-snmp/library/int64.h, snmplib/asn1.c,
+ snmplib/check_varbind.c, snmplib/int64.c:
+
+ [ 849158 ] 5.1: /const/ fixes for the API from Stephen J. Friedl
+
+2004-02-12 20:08 rstory
+
+ * agent/helpers/table_container.c:
+
+ update for renamed defines
+
+2004-02-12 17:13 hardaker
+
+ * agent/snmp_agent.c:
+
+ Patch [ 815439 ] snmagent does not send auth failure traps for v3 from Bob Rowlands
+
+2004-02-12 17:06 hardaker
+
+ * apps/snmptable.c:
+
+ remove copyright comment accidentically placed
+
+2004-02-12 17:03 hardaker
+
+ * apps/snmptable.c:
+
+ [ 812005 ] segmentation fault in snmptable
+
+2004-02-12 16:52 hardaker
+
+ * acconfig.h, configure, configure.in,
+ agent/mibgroup/agentx/master.c:
+
+ patch [ 811278 ] make agentx udp/tcp transports configurable from Bob Rowlands
+
+2004-02-12 16:37 hardaker
+
+ * agent/mibgroup/host/hr_system.c:
+
+ Patch [ 809438 ] Fix several problems with host resources MIB from Bob Rowlands (fixes multiple bugs)
+
+2004-02-12 15:02 hardaker
+
+ * NEWS:
+
+ note about snmptrapd perl
+
+2004-02-12 14:41 slif
+
+ * README.win32:
+
+ Add a section "Building with MinGW"
+
+2004-02-12 11:35 slif
+
+ * README.win32, win32/nmakeperl.bat:
+
+ Add how to (with script) for building Perl SNMP modules using MSVC.
+
+2004-02-12 08:36 slif
+
+ * apps/Makefile.in:
+
+ create snmplibsdir for snmp_perl_trapd.pl, before installing there.
+
+2004-02-12 08:31 slif
+
+ * win32/: libagent/libagent.dsp, libhelpers/libhelpers.dsp
+, libsnmp/libsnmp.dsp, netsnmpmibs/netsnmpmibs.dsp
+, netsnmpmibssdk/netsnmpmibssdk.dsp, snmpd/snmpd.dsp
+, snmpdsdk/snmpd.dsp, snmptrapd/snmptrapd.dsp:
+
+ remove unused compile constant that Slif created during his DLL experiments.
+
+2004-02-12 06:45 rstory
+
+ * agent/helpers/table_container.c,
+ include/net-snmp/agent/table_container.h:
+
+ new table container helper
+
+2004-02-12 05:32 slif
+
+ * perl/OID/OID.xs, perl/SNMP/SNMP.xs,
+ perl/agent/agent.xs, win32/net-snmp/net-snmp-config.h
+:
+
+ cleanup Perl SNMP module build through type casting and
+ removing unused variables.
+ For SNMP.xs, there was a named variable 'best_guess' that blocked
+ the calling param of "snmp_get_type", removed with this update.
+ The win32 config.h no longer tries to define bcopy,bzero,bcmp,strcasecmp.
+
+2004-02-12 01:22 slif
+
+ * perl/SNMP/t/bulkwalk.t:
+
+ use a reasonable value (1) for non-repeater in first bulkwalk.
+
+2004-02-12 00:32 slif
+
+ * perl/SNMP/SNMP.xs:
+
+ include net-snmp-config.h before using HAVE_REGEX_H.
+ replace compute_match with the non-regex savvy version from snmplib/parse.c.
+ Finally, disable Win32 DLL decoration, as DLL build is not supported.
+
+2004-02-11 20:54 slif
+
+ * win32/win32sdk.dsw:
+
+ snmptrapd builds using the same project file for PSDK or non-PSDK
+
+2004-02-11 18:26 slif
+
+ * perl/: Makefile.subs.pl, ASN/Makefile.PL,
+ OID/Makefile.PL, SNMP/Makefile.PL, agent/Makefile.PL
+, agent/default_store/Makefile.PL,
+ default_store/Makefile.PL:
+
+ fix bug [ 895367 ] Win32 Perl build -NET-SNMP-PATH and paths with spaces
+
+2004-02-11 17:42 slif
+
+ * win32/netsnmpmibssdk/netsnmpmibssdk.dsp,
+ win32/snmpdsdk/snmpd.dsp, perl/agent/Makefile.PL:
+
+ netsnmpmibssdk.lib renamed to netsnmpmibs.lib
+
+2004-02-11 17:16 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ Do not have gettable return hex encoded strings if not printable. No
+ other function does this, so why would gettable be any different.
+
+2004-02-11 17:11 slif
+
+ * README.win32:
+
+ MSVC build requires using but one workspace.
+
+2004-02-11 11:07 hardaker
+
+ * perl/TrapReceiver/: .cvsignore, Changes, MANIFEST
+, Makefile.PL, README, TrapReceiver.pm,
+ TrapReceiver.xs, const-c.inc, const-xs.inc,
+ perl_snmptrapd.h, ppport.h, typemap,
+ fallback/const-c.inc, fallback/const-xs.inc, t/1.t
+:
+
+ Initial pass at an embedded perl module for snmptrapd.
+ Whats odd for typical initial code from me is that it's fully
+ functional and documented even!
+
+2004-02-11 10:57 hardaker
+
+ * perl/Makefile.PL:
+
+ Add the TrapReceiver module to the list of defaults.
+
+2004-02-11 10:56 hardaker
+
+ * apps/snmp_perl_trapd.pl:
+
+ A perl bootstrapping startup file.
+
+2004-02-11 10:54 hardaker
+
+ * apps/Makefile.in:
+
+ Install the perl startup file.
+
+2004-02-11 10:53 hardaker
+
+ * apps/snmptrapd.c:
+
+ Initialize perl
+
+2004-02-11 10:53 hardaker
+
+ * apps/snmptrapd_handlers.h:
+
+ create a handler_data field.
+
+2004-02-11 07:28 slif
+
+ * configure, configure.in:
+
+ Show AES only to reflect previous changes -- Use AES instead of AES128,192,256
+
+2004-02-11 06:08 slif
+
+ * perl/OID/test.pl:
+
+ announce correct number of tests (was 36, now 38)
+
+2004-02-11 06:06 slif
+
+ * perl/default_store/test.pl:
+
+ update to reflect change in value of NETSNMP_DS_MAX_SUBIDS
+
+2004-02-10 17:05 rstory
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ fix always false test
+
+2004-02-10 16:17 rstory
+
+ * agent/helpers/table.c:
+
+ new netsnmp_table_next_column
+
+2004-02-10 14:36 rstory
+
+ * agent/helpers/table.c:
+
+ remove code before variable declarations
+
+2004-02-10 13:23 slif
+
+ * README.win32:
+
+ touch up instructions for MSVC builds that use OpenSSL
+
+2004-02-10 09:09 rstory
+
+ * README.solaris:
+
+ merge update from Bruce from 5-1-patches
+
+2004-02-10 08:33 slif
+
+ * local/snmpconf:
+
+ apply snmpconf3 of patch 837967; add close to read_config
+
+2004-02-10 03:50 slif
+
+ * perl/agent/Makefile.PL:
+
+ fix bug 892616
+
+2004-02-09 15:03 nba
+
+ * apps/snmpnetstat/main.c, snmplib/snmp_parse_args.c:
+
+ Enable stderrlog if no other logging is enabled - to avoid warning
+
+2004-02-09 14:16 rstory
+
+ * dist/nsb-functions:
+
+ export CPP=cpp on Darwin so Apple's gcc doesn't break config_require
+
+2004-02-09 08:55 rstory
+
+ * agent/mibgroup/mibII/ifTable.c:
+
+ fix column names
+
+2004-02-09 08:54 rstory
+
+ * agent/mibgroup/mibII/: ifTable_columns.h,
+ ifXTable_columns.h:
+
+ add missing files
+
+2004-02-09 08:24 dts12
+
+ * agent/snmp_agent.c, agent/helpers/table.c,
+ agent/helpers/table_data.c, include/net-snmp/agent/table.h
+:
+
+ Implement a new helper to cope with skipping "holes" in a table
+ (and tweak the 'table_data' helper to make use of it).
+ Note that this requires the _request_set_error() routine to be
+ a bit flexible in accepting exceptions that aren't strictly valid.
+
+2004-02-09 07:57 dts12
+
+ * agent/helpers/old_api.c:
+
+ Ensure one object's 'write_method' isn't picked up by anything else.
+
+2004-02-09 07:34 dts12
+
+ * snmplib/snmpusm.c:
+
+ Guard against passing NULL parameters to strcmp/strlen.
+ Probably shouldn't ever happen, but Dave's in a suspicious mood.
+ Qn: Should these changes be applied to the 5.1.x (?& 5.0.x) line?
+
+2004-02-09 04:05 slif
+
+ * agent/snmpd.c:
+
+ build agent on mingw, without win32 SCM glue.
+
+2004-02-09 03:26 slif
+
+ * win32/: win32.dsw, win32sdk.dsw:
+
+ add dependency for libsnmp to build snmpd.
+
+2004-02-08 19:50 slif
+
+ * snmplib/winservice.c:
+
+ cleaned up, ready for mainstream. However, not gcc-friendly, just yet.
+
+2004-02-08 18:55 slif
+
+ * configure, configure.in:
+
+ regen configure from correct configure.in
+
+2004-02-08 18:24 rstory
+
+ * include/net-snmp/system/bsd.h:
+
+ new define UTMP_HAS_NO_PID
+
+2004-02-08 18:22 rstory
+
+ * agent/mibgroup/host/hr_system.c:
+
+ use new define UTMP_HAS_NO_PID; simplify loop logic
+
+2004-02-08 17:44 rstory
+
+ * agent/mibgroup/host/hr_system.c:
+
+ don't put open brace in ifdef if close brace has no ifdef
+
+2004-02-08 16:21 rstory
+
+ * dist/nsb-functions:
+
+ extra transports should be empty; Callback should be in dist transports
+
+2004-02-08 15:50 slif
+
+ * README.win32:
+
+ Include sample display from running install-net-snmp.bat
+
+2004-02-08 10:16 slif
+
+ * include/net-snmp/library/winservice.h,
+ include/net-snmp/system/mingw32.h, snmplib/Makefile.in
+, snmplib/winpipe.c:
+
+ With input from Alex Smith, apply changes to improve mingw builds.
+
+2004-02-08 10:12 slif
+
+ * win32/: install-net-snmp.bat, net-snmp/net-snmp-config.h
+:
+
+ Move the directory from /usr to C:\Program Files\Net-SNMP.
+
+2004-02-08 10:11 slif
+
+ * README.win32, win32/install-net-snmp.bat:
+
+ MSVC build instructions are simpler, thanks to Alex Burger's project/workspace changes.
+ Also, introduced a batch command file to simplify installation after building.
+
+2004-02-08 09:34 slif
+
+ * win32/: win32.dsw, win32sdk.dsw:
+
+ Apply changes offered by Alex Burger to clean up projects and workspaces
+ and to build snmptrapd using the Platform-SDK workspace (win32sdk).
+
+2004-02-06 15:48 rstory
+
+ * dist/nsb-functions:
+
+ only config w/libwrap if we can find the header
+
+2004-02-06 11:21 hardaker
+
+ * COPYING:
+
+ Year update for Sparta
+
+2004-02-06 10:12 slif
+
+ * agent/mibgroup/utilities/execute.c:
+
+ patch 843924 run_shell_command to quote redirected parameters.
+
+2004-02-06 08:51 dts12
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ Re-instate the 'hz' variable for FreeBSD (but *only* FreeBSD)
+
+2004-02-06 05:58 dts12
+
+ * agent/agent_trap.c:
+
+ Provide missing agent_address/snmpTrapAddress information
+ (Bugs #865178 & #877587 and Patch #883028)
+
+2004-02-05 08:04 slif
+
+ * README.win32:
+
+ revised per peer review.
+
+2004-02-05 05:45 slif
+
+ * README.win32:
+
+ Current status appears immediately after the introduction
+ Removed references to building/using/installing netsnmp.DLL
+ Added registering as windows service
+ Noted new dependency of snmptrapd on netsnmpmibs
+ Noted snmptrapd builds only using win32.dsw workspace
+ Added How to change external project settings to match
+ Clarified what other project settings should be unmodified.
+
+2004-02-05 05:27 slif
+
+ * win32/: win32.dsw, win32sdk.dsw:
+
+ unregister DLL library project from workspaces.
+
+2004-02-05 05:16 slif
+
+ * agent/mibgroup/util_funcs.c,
+ include/net-snmp/library/default_store.h,
+ include/net-snmp/library/read_config.h, man/snmp.conf.5.def
+, snmplib/read_config.c, snmplib/snmp_api.c:
+
+ Apply patch 843919 - new tempFilePattern snmp.conf option
+
+2004-02-05 04:45 dts12
+
+ * agent/mibgroup/examples/netSnmpHostsTable.h:
+
+ Add the NET-SNMP-EXAMPLES-MIB to the load list
+ (Patch #890839 from Yixiong Zou)
+
+2004-02-05 04:39 dts12
+
+ * agent/mibgroup/agentx/master.c:
+
+ Correct the use of a wrong debug token (Patch #889777 by Dirk Balcerczak)
+
+2004-02-05 04:38 slif
+
+ * README.win32:
+
+ Apply patch 850785 - instructions to copy header files following build.
+
+2004-02-05 03:41 slif
+
+ * win32/: net-snmp/agent/mib_module_config.h,
+ netsnmpmibs/netsnmpmibs.dsp,
+ netsnmpmibssdk/netsnmpmibssdk.dsp:
+
+ Don't build the Rmon modules.
+
+2004-02-05 01:49 slif
+
+ * configure.in:
+
+ Apply patch 843679
+
+2004-02-04 20:11 slif
+
+ * agent/mibgroup/agent/nsLogging.c,
+ include/net-snmp/library/snmp_logging.h,
+ snmplib/snmp_logging.c, win32/libsnmp_dll/libsnmp.def
+:
+
+ expose one less static data variable (logh_head); list two others for DLL.
+
+2004-02-04 20:07 slif
+
+ * win32/: libagent/libagent.dsp, libhelpers/libhelpers.dsp
+, libsnmp/libsnmp.dsp, netsnmpmibs/netsnmpmibs.dsp
+, netsnmpmibssdk/netsnmpmibssdk.dsp, snmpd/snmpd.dsp
+, snmpdsdk/snmpd.dsp, snmptrapd/snmptrapd.dsp:
+
+ clean up BASE CPP settings.
+
+2004-02-04 14:15 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ Don't operate on a null pointer for indexes that don't exist.
+
+2004-02-04 14:14 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ Mention that Robert has the ability to sign packages now.
+
+2004-02-04 14:13 hardaker
+
+ * include/net-snmp/library/scapi.h,
+ include/net-snmp/library/transform_oids.h, snmplib/scapi.c
+, snmplib/snmp_parse_args.c, snmplib/snmpusm.c
+, snmplib/snmpv3.c:
+
+ Use AES instead of AES128,192,256
+
+2004-02-04 14:13 hardaker
+
+ * net-snmp-config.in:
+
+ create the persistent directory if it hasn't been created yet.
+
+2004-02-04 13:01 slif
+
+ * snmplib/scapi.c:
+
+ cast to quiet msvc compiler.
+
+2004-02-04 05:31 slif
+
+ * agent/helpers/table_mfd.c, snmplib/container_iterator.c
+:
+
+ use Niels' choices for names substituting __FUNCTION__
+
+2004-02-04 05:29 slif
+
+ * snmplib/snmp_transport.c:
+
+ avoid void casting in free to keep gcc happy.
+
+2004-02-03 17:13 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ merge patch from 5.0-patches
+
+2004-02-03 16:53 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ strdup value from netsnmp_ds_get_string, since it is free'd later
+
+2004-02-03 14:30 slif
+
+ * agent/mibgroup/smux/smux.c:
+
+ quiet compiler warnings using appropriate type casting.
+
+2004-02-03 14:29 slif
+
+ * include/net-snmp/: types.h, system/mingw32.h:
+
+ move ifndef HAVE_SSIZE_T from MinGW specific header to types header,
+ to benefit other platforms that do not define ssize_t (e.g., msvc).
+
+2004-02-03 14:25 slif
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ export symbols for functions when SNMP_TRANSPORT_CALLBACK_DOMAIN is defined.
+
+2004-02-03 14:24 slif
+
+ * win32/mib_module_inits.h:
+
+ dont initialize ucd-snmp init_disk for msvc builds.
+
+2004-02-03 14:21 slif
+
+ * win32/net-snmp/agent/mib_module_config.h:
+
+ enable AgentX, Rmon, disman-event-mib, and ucd-snmp module groups.
+
+2004-02-03 14:19 slif
+
+ * win32/: netsnmpmibssdk/netsnmpmibssdk.dsp,
+ netsnmpmibs/netsnmpmibs.dsp:
+
+ don't build the ucd-snmp disk module (not implemented for m$ builds)
+
+2004-02-03 09:16 slif
+
+ * include/net-snmp/library/winpipe.h, snmplib/winpipe.c
+:
+
+ Finish applying patch 852682 for callback transport support under Win32
+
+2004-02-03 08:00 slif
+
+ * snmplib/snmpCallbackDomain.c, win32/libsnmp/libsnmp.dsp
+, win32/libsnmp_dll/libsnmp_dll.dsp,
+ win32/net-snmp/net-snmp-config.h:
+
+ Applied patch 852682 for callback transport on Win32; touched up MSVC project files, too.
+
+2004-02-03 07:14 slif
+
+ * agent/mibgroup/utilities/execute.c:
+
+ move #if HAVE_EXECV to head of run_exec_command for quieter MSVC builds.
+
+2004-02-03 03:25 nba
+
+ * apps/snmpnetstat/main.c:
+
+ Remove positional community from usage
+
+2004-02-03 02:09 nba
+
+ * snmplib/mib.c:
+
+ Fix bug returning only four characters for uptime string
+
+2004-02-03 02:07 nba
+
+ * mibs/rfclist:
+
+ Update for re-issued ATM and EtherLike RFCs
+
+2004-02-03 02:06 nba
+
+ * man/snmpcmd.1.def:
+
+ Fix reference to -Le to -LE
+
+2004-02-03 02:05 nba
+
+ * local/traptoemail:
+
+ Fix stupid bug fetching the trap oid
+
+2004-02-03 02:04 nba
+
+ * apps/snmpnetstat/main.c:
+
+ A bit of cleanup and properly default community from conf file
+
+2004-02-03 02:01 nba
+
+ * apps/snmptrapd_log.c, man/snmptrapd.8.def:
+
+ Allow %V to take more than one character
+
+2004-02-03 01:59 nba
+
+ * agent/mibgroup/utilities/execute.c:
+
+ Apply (modified) patch 860443 which also fixes bug 848284 by properly
+ terminating the input buffer.
+
+2004-02-03 01:56 nba
+
+ * agent/mibgroup/ucd-snmp/: disk.c, disk.h:
+
+ Try to untangle an #ifdef mess that hinders compilation on OS/X
+
+2004-02-03 01:55 nba
+
+ * agent/mibgroup/mibII/mta_sendmail.c:
+
+ Remove a bunch of superfluous newlines in messages
+
+2004-02-03 01:53 nba
+
+ * agent/mibgroup/mibII/: ipAddr.c, at.c:
+
+ Fix return of IPv4 address on 64-bit Solaris
+
+2004-02-02 23:40 nba
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ ifdef a linux specific variable
+
+2004-02-02 23:38 nba
+
+ * snmplib/snmp_api.c:
+
+ Apply patch 841705 to fix bug 817386
+
+2004-02-02 23:37 nba
+
+ * snmplib/vacm.c:
+
+ Apply patch 836568 to fix bug 829119
+
+2004-02-02 23:36 nba
+
+ * snmplib/snmpUDPDomain.c:
+
+ Apply patch 845798 to fix bug 831299
+
+2004-02-02 23:32 nba
+
+ * snmplib/mib.c:
+
+ Properly reset wildcardmatcher between calls
+
+2004-02-02 23:23 nba
+
+ * snmplib/mib.c:
+
+ Applied patch from bug 849153
+
+2004-02-02 23:21 nba
+
+ * snmplib/parse.c:
+
+ Give error message when module not available
+
+2004-02-02 23:18 nba
+
+ * snmplib/asn1.c:
+
+ Do not cast unsigned to signed
+
+2004-02-02 23:17 nba
+
+ * include/net-snmp/utilities.h:
+
+ Use system getopt.h when available
+
+2004-02-02 23:16 nba
+
+ * apps/snmpdf.c:
+
+ Protect against buffer overrun for extrame disk names
+
+2004-02-02 23:16 nba
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ Apply patch 850716 to fix bug 850185
+
+2004-02-02 16:10 nba
+
+ * apps/: snmptest.c, snmptrapd_log.c:
+
+ Quell a bunch of warnings from Solaris 8 and gcc -m64
+
+2004-02-02 16:05 nba
+
+ * agent/agent_trap.c:
+
+ Quell a bunch of warnings from Solaris 8 and gcc -m64
+
+2004-02-02 15:59 nba
+
+ * agent/mibgroup/ucd-snmp/dlmod.c:
+
+ Quell a bunch of warnings from Solaris 8 and gcc -m64
+
+2004-02-02 15:58 nba
+
+ * agent/mibgroup/ucd-snmp/memory_solaris2.c:
+
+ Better error message
+
+2004-02-02 15:56 nba
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ Correctly loop around missing entries
+
+2004-02-02 15:55 nba
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ Better file system types
+
+2004-02-02 15:52 nba
+
+ * agent/agent_trap.c:
+
+ Fix setting of community len
+
+2004-02-02 15:40 nba
+
+ * agent/mibgroup/mibII/system_mib.c, snmplib/container.c
+:
+
+ Quell a bunch of warnings from Solaris 8 and gcc -m64
+
+2004-02-02 15:36 nba
+
+ * include/net-snmp/library/snmpTCPDomain.h,
+ snmplib/snmpTCPDomain.c:
+
+ Proper OID for TCP4
+
+2004-02-02 15:35 nba
+
+ * snmplib/snmp_logging.c:
+
+ FIx newline handling in file logger
+
+2004-02-02 15:34 nba
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Fix some warnings, and make some better error messages
+
+2004-02-02 15:33 nba
+
+ * agent/mibgroup/mibII/ipv6.c:
+
+ Fix a file descriptor leak
+
+2004-02-02 15:32 nba
+
+ * agent/helpers/table_data.c, agent/helpers/table_iterator.c
+, agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c, agent/mibgroup/smux/smux.c
+, agent/mibgroup/ucd-snmp/loadave.c, snmplib/asn1.c
+, snmplib/snmp_debug.c:
+
+ Quell a bunch of warnings from Solaris 8 and gcc -m64
+
+2004-02-02 11:23 rstory
+
+ * local/mib2c:
+
+ require all argument before mibNode; bail on unknown option; warn if multiple
+ mibNodes specified; new 'balanced' flag for process; define/use new m2c_die
+ that spits out current line in conf file; replace 'break' with 'next'; bail
+ on elseif; bail on unbalanced conf file (many tweaks to make that work);
+ remove unused skipif; fix currentline updates in foreach loops; exit w/error
+ if conf file not found
+
+2004-02-02 11:06 rstory
+
+ * local/: mib2c.create-dataset.conf, mib2c.iterate.conf
+:
+
+ add explicit ends for each foreach
+
+2004-02-02 10:44 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ fix up m2c_node_param_* defaults; rename node default file; set defaults for m2c_ctx_[lh|rh];
+ set up node map func defaults
+
+2004-02-02 10:23 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-body.m2i:
+
+ use new indexes_set function in example; move some code outside of example
+ condition; use value map to copy data
+
+2004-02-02 10:19 rstory
+
+ * local/mib2c-conf.d/mfd-data-access.m2c:
+
+ new indexes_set function
+
+2004-02-02 10:17 rstory
+
+ * local/mib2c-conf.d/mfd-data-set.m2c:
+
+ use mib2c next instead of break
+
+2004-02-02 10:17 rstory
+
+ * local/mib2c-conf.d/subagent.m2c:
+
+ add missing var decl
+
+2004-02-02 08:20 rstory
+
+ * local/mib2c-conf.d/generic-value-map.m2i:
+
+ use new function to map between mib/native data
+
+2004-02-02 08:00 rstory
+
+ * local/mib2c-conf.d/generic-value-map-func.m2i:
+
+ new function to map between mib/native data
+
+2004-02-02 07:59 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes-set.m2i:
+
+ new function to set indexes from C types
+
+2004-02-02 07:56 rstory
+
+ * local/mib2c-conf.d/: default-mfd-top.m2c,
+ generic-ctx-copy.m2i, generic-ctx-get.m2i,
+ generic-get-char.m2i, generic-get-decl-bot.m2i,
+ generic-get-decl.m2i, mfd-data-get.m2c,
+ mfd-interface.m2c, node-get.m2i, node-set.m2i,
+ syntax-RowStatus-get.m2i:
+
+ more consistent use of m2c_ctx_[lh|rh|lhs|rhs] and m2c_node_param* vars; new
+ m2c_code_verbose flag for verbose comments in code; new value mapping func for
+ each node instead of duplicated code in mulitple funcs; use mib2c next instead
+ of break;
+
+2004-02-02 04:15 slif
+
+ * snmplib/system.c,
+ win32/encode_keychange/encode_keychange.dsp,
+ win32/libsnmp_dll/libsnmp_dll.dsp,
+ win32/snmpbulkget/snmpbulkget.dsp,
+ win32/snmpbulkwalk/snmpbulkwalk.dsp, win32/snmpd/snmpd.dsp
+, win32/snmpdelta/snmpdelta.dsp,
+ win32/snmpdf/snmpdf.dsp, win32/snmpdsdk/snmpd.dsp,
+ win32/snmpget/snmpget.dsp,
+ win32/snmpgetnext/snmpgetnext.dsp,
+ win32/snmpnetstat/snmpnetstat.dsp,
+ win32/snmpset/snmpset.dsp, win32/snmpstatus/snmpstatus.dsp
+, win32/snmptable/snmptable.dsp,
+ win32/snmptest/snmptest.dsp,
+ win32/snmptranslate/snmptranslate.dsp,
+ win32/snmptrap/snmptrap.dsp, win32/snmptrapd/snmptrapd.dsp
+, win32/snmpusm/snmpusm.dsp,
+ win32/snmpvacm/snmpvacm.dsp, win32/snmpwalk/snmpwalk.dsp
+:
+
+ Restore winsock 1.1 library usage.
+
+2004-01-30 11:37 slif
+
+ * win32/snmptrapd/snmptrapd.dsp:
+
+ move netsnmp.lib to the front of the "Additional Libraries" lists.
+
+2004-01-30 11:31 slif
+
+ * win32/: snmpd/snmpd.dsp, snmpdsdk/snmpd.dsp:
+
+ move netsnmp.lib to the front of the Additional Libraries list.
+
+2004-01-30 10:29 slif
+
+ * win32/: encode_keychange/encode_keychange.dsp,
+ snmpbulkget/snmpbulkget.dsp, snmpbulkwalk/snmpbulkwalk.dsp
+, snmpd/snmpd.dsp, snmpdelta/snmpdelta.dsp,
+ snmpdf/snmpdf.dsp, snmpdsdk/snmpd.dsp,
+ snmpget/snmpget.dsp, snmpgetnext/snmpgetnext.dsp,
+ snmpnetstat/snmpnetstat.dsp, snmpset/snmpset.dsp,
+ snmpstatus/snmpstatus.dsp, snmptable/snmptable.dsp,
+ snmptest/snmptest.dsp, snmptranslate/snmptranslate.dsp
+, snmptrap/snmptrap.dsp, snmptrapd/snmptrapd.dsp
+, snmpusm/snmpusm.dsp, snmpvacm/snmpvacm.dsp,
+ snmpwalk/snmpwalk.dsp:
+
+ enable selection that will generate source browsing information.
+
+2004-01-30 10:08 slif
+
+ * agent/mibgroup/agent/nsLogging.c,
+ include/net-snmp/library/snmp_logging.h:
+
+ move extern logh_head into the logging module's header file.
+
+2004-01-30 07:25 dts12
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ Remove an unwanted 'else' clause that clashes with the "common" 'else'
+ clause later in this tangle of unreadable code. (Bug #857257)
+
+2004-01-30 07:01 slif
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ restore the DATA hints that were accidentally removed.
+
+2004-01-30 06:45 dts12
+
+ * snmplib/mib.c:
+
+ Whitespace (C/R & L/F) shouldn't trigger hex string behaviour (Bug #864367)
+
+2004-01-30 06:33 dts12
+
+ * include/net-snmp/library/snmp_logging.h,
+ snmplib/snmp_logging.c:
+
+ Define a "dummy" log handler that simply discards all messages.
+ Not really a sensible thing to do, but could be used to prevent
+ turning on the "last ditch" logging to stderr (see Bug #867574)
+
+2004-01-30 06:19 dts12
+
+ * snmplib/snmp_logging.c:
+
+ Issue a warning when turning on "last ditch" logging (Bug #867574)
+
+2004-01-30 03:22 dts12
+
+ * agent/snmp_agent.c:
+
+ Handle completely empty GetBulk requests properly (Bug #877419)
+
+2004-01-30 02:50 slif
+
+ * win32/: .cvsignore, win32.opt:
+
+ fix bug #887140
+
+2004-01-30 01:39 dts12
+
+ * snmplib/tools.c:
+
+ Use 'snprint_hexstring' in the engine testing code, rather
+ than the (non-existent) 'sprint_hexstring' (Bug #886110)
+
+2004-01-29 13:03 slif
+
+ * agent/mibgroup/ucd-snmp/: pass.c, pass_persist.c:
+
+ fix counts for certain uses of strncasecmp (i must be bored!).
+
+2004-01-29 12:32 slif
+
+ * agent/snmpd.c:
+
+ for windows service, match display name to service name.
+ for windows service description, mention mibII objects if built using SDK.
+
+2004-01-29 12:14 slif
+
+ * apps/: snmpget.c, snmpgetnext.c, snmpset.c:
+
+ use correct constant that previously applied patch refers to.
+
+2004-01-29 06:38 dts12
+
+ * apps/snmpnetstat/main.c:
+
+ Bring version handling into line with the 'snmp_parse_args' legerdemain
+
+2004-01-29 06:26 dts12
+
+ * apps/snmpget.c, apps/snmpgetnext.c, apps/snmpset.c
+, include/net-snmp/library/tools.h:
+
+ Validate the request against the maximum number of varbinds supported
+ (Patch #826714 from Jeremy Puhlman)
+
+2004-01-29 06:13 dts12
+
+ * include/net-snmp/library/snmpTCPDomain.h,
+ include/net-snmp/library/snmpTCPIPv6Domain.h,
+ include/net-snmp/library/snmpUDPIPv6Domain.h,
+ include/net-snmp/library/snmpUnixDomain.h,
+ snmplib/snmpTCPDomain.c, snmplib/snmpTCPIPv6Domain.c,
+ mibs/Makefile.in, mibs/NET-SNMP-TC.txt,
+ mibs/TRANSPORT-ADDRESS-MIB.txt, snmplib/snmpUDPIPv6Domain.c
+, snmplib/snmpUnixDomain.c:
+
+ Use the officially defined transport OIDs
+ (Patch #828766 from Juergen Schoenwaelder)
+
+2004-01-29 05:53 dts12
+
+ * agent/mibgroup/: host/hr_device.c, host/hr_disk.c,
+ host/hr_filesys.c, host/hr_network.c,
+ host/hr_partition.c, host/hr_storage.c,
+ host/hr_swrun.c, host/hr_system.c,
+ ucd-snmp/logmatch.c, ucd-snmp/memory.c,
+ ucd-snmp/memory_aix4.c, ucd-snmp/memory_dynix.c,
+ ucd-snmp/memory_freebsd2.c, ucd-snmp/memory_hpux.c,
+ ucd-snmp/memory_netbsd1.c, ucd-snmp/memory_solaris2.c
+:
+
+ Increase assorted fixed buffer sizes. (Patch #836395 from Howard Wilkinson)
+
+2004-01-29 05:35 dts12
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ Reject attempts to delete a 'permanent' row
+ (Patch #837427 from Bob Rowlands)
+
+2004-01-29 04:23 dts12
+
+ * perl/SNMP/SNMP.xs:
+
+ Protect against freeing an empty contextEngineID
+ (Which shouldn't happen, but seems to occur under Windows)
+ (Patch #840830 from Alex Burger)
+
+2004-01-29 03:47 dts12
+
+ * include/net-snmp/library/default_store.h,
+ snmplib/read_config.c:
+
+ Mechanism to completely disable the handling of persistent configuration files.
+ Note that enabling this would break the functionality of an SNMPv3 agent.
+ (Patch #849159 from Stephen J. Friedl)
+
+2004-01-29 03:39 dts12
+
+ * snmplib/: snmp_api.c, snmp_enum.c:
+
+ Properly release various resources when shutting down the library.
+ (Patch #849154 from Stephen J. Friedl)
+
+2004-01-29 01:44 dts12
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ Provide missing config definition template for 'ssize_t' flag
+ (Patch #886655 from Andy Smith)
+
+2004-01-28 20:39 slif
+
+ * win32/: encode_keychange/encode_keychange.dsp,
+ libsnmp_dll/libsnmp_dll.dsp, snmpbulkget/snmpbulkget.dsp
+, snmpbulkwalk/snmpbulkwalk.dsp, snmpd/snmpd.dsp
+, snmpdelta/snmpdelta.dsp, snmpdf/snmpdf.dsp,
+ snmpdsdk/snmpd.dsp, snmpget/snmpget.dsp,
+ snmpgetnext/snmpgetnext.dsp, snmpnetstat/snmpnetstat.dsp
+, snmpset/snmpset.dsp, snmpstatus/snmpstatus.dsp
+, snmptable/snmptable.dsp, snmptest/snmptest.dsp
+, snmptranslate/snmptranslate.dsp,
+ snmptrap/snmptrap.dsp, snmptrapd/snmptrapd.dsp,
+ snmpusm/snmpusm.dsp, snmpvacm/snmpvacm.dsp,
+ snmpwalk/snmpwalk.dsp:
+
+ no incremental link on Debug (prevents generation of .ilk file)
+
+2004-01-28 18:44 slif
+
+ * agent/mibgroup/agentx/master.c:
+
+ ifdef around variables used only when UNIX transports are supported.
+
+2004-01-28 17:57 slif
+
+ * snmplib/system.c:
+
+ invoke winsock ver 2.2
+
+2004-01-28 17:34 slif
+
+ * win32/: mib_module_includes.h, mib_module_inits.h,
+ encode_keychange/encode_keychange.dsp,
+ libagent/libagent.dsp, libhelpers/libhelpers.dsp,
+ libsnmp/libsnmp.dsp, libsnmp_dll/libsnmp.def,
+ libsnmp_dll/libsnmp_dll.dsp,
+ net-snmp/agent/mib_module_config.h,
+ netsnmpmibs/netsnmpmibs.dsp,
+ netsnmpmibssdk/netsnmpmibssdk.dsp,
+ snmpbulkget/snmpbulkget.dsp, snmpbulkwalk/snmpbulkwalk.dsp
+, snmpd/snmpd.dsp, snmpdelta/snmpdelta.dsp,
+ snmpdf/snmpdf.dsp, snmpdsdk/snmpd.dsp,
+ snmpget/snmpget.dsp, snmpgetnext/snmpgetnext.dsp,
+ snmpnetstat/snmpnetstat.dsp, snmpset/snmpset.dsp,
+ snmpstatus/snmpstatus.dsp, snmptable/snmptable.dsp,
+ snmptest/snmptest.dsp, snmptranslate/snmptranslate.dsp
+, snmptrap/snmptrap.dsp, snmptrapd/snmptrapd.dsp
+, snmpusm/snmpusm.dsp, snmpvacm/snmpvacm.dsp,
+ snmpwalk/snmpwalk.dsp:
+
+ consistent project settings; no C runtime conflicts; link with winsock ver 2.2
+
+2004-01-28 17:28 slif
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ remove unnecessary hack for chown.
+
+2004-01-28 14:56 slif
+
+ * snmplib/snmp_logging.c:
+
+ dereference pri_max to test return from decode_priority
+
+2004-01-28 14:54 slif
+
+ * agent/mibgroup/Rmon/: agutil.c, alarm.c, event.c
+, history.c, rows.c, statistics.c:
+
+ find platform-appropriate substitute for sys/time.h
+ fix minor type cast warnings. remove one unused variable.
+
+2004-01-28 08:40 dts12
+
+ * testing/RUNTESTS:
+
+ Import SNMP_SLEEP time from environment, if available
+ (Patch #850957 from Johannes Schmidt-Fischer,
+ merging a change from the 5.0.x branch)
+
+2004-01-28 08:04 dts12
+
+ * agent/mibgroup/util_funcs.c:
+
+ Ensure the size of the exec-cache is handled correctly on 64-bit systems
+ (Patch #860575 by Bob Rowlands)
+
+2004-01-28 07:55 dts12
+
+ * perl/: OID/OID.xs, SNMP/SNMP.xs, agent/agent.xs
+:
+
+ Be more cautious about the maximum length of OIDs (Patch 862183 by Austin Schutz)
+
+2004-01-28 07:41 dts12
+
+ * snmplib/mib.c:
+
+ Guard against a missing IP address structure (Patch #861939 by Dan Mongrain)
+
+2004-01-28 07:38 dts12
+
+ * snmplib/snmp_logging.c:
+
+ Merge Neils' 5.1.x changes into the main development tree.
+ (Seems to include patches #855170 and #858519)
+
+2004-01-28 06:55 rstory
+
+ * agent/mibgroup/agentx/master.c:
+
+ don't chown/chmod if unix domain support not enabled
+
+2004-01-28 06:54 dts12
+
+ * configure, configure.in:
+
+ Check for perl 5.8 entry point. (Patch #854395)
+
+2004-01-28 06:23 rstory
+
+ * Makefile.rules:
+
+ fix install so that subdir libs are installed before bins, noted by the
+ ever-so-helpful Johannes Schmidt-Fischer.
+
+2004-01-28 04:22 dts12
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Increase the (fixed) number of disks handled (patch #884859)
+
+2004-01-28 04:18 dts12
+
+ * Makefile.in:
+
+ Install the mingw32.h system header file (patch #884100)
+
+2004-01-28 04:13 dts12
+
+ * configure.in, configure,
+ include/net-snmp/system/mingw32.h:
+
+ Check for the existence of ssize_t, and don't redefine it when
+ using the WinGW compiler. (Patch #881752)
+
+2004-01-28 03:55 dts12
+
+ * include/net-snmp/agent/table_mfd.h:
+
+ Remove two redundent forward declarations (patch #873326)
+
+2004-01-28 02:07 slif
+
+ * apps/snmpnetstat/inet.c:
+
+ inetprint allots max 22 chars for address + 8 chars for port.
+ change to 18 address + 12 port, so that more of the port is displayed.
+
+2004-01-27 22:42 slif
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ indicate Win32 has locale.h malloc.h memory.h.
+ do not set bsdlike or USExxMIB or SECURITYEXCEPTIONS
+ re-format like the Net-SNMP configured net-snmp-config.h.
+
+2004-01-27 22:34 slif
+
+ * acconfig.h, ov/oid_to_sym.in, ov/oid_to_type.in
+:
+
+ update support for OpenBSD, HP-UX/11, and Win32 sysObjectID .
+
+2004-01-27 21:49 slif
+
+ * agent/helpers/table_mfd.c, snmplib/container_iterator.c
+:
+
+ provide function hints in lieu of __FUNCTION__
+
+2004-01-27 13:46 slif
+
+ * include/net-snmp/agent/agent_trap.h:
+
+ Add declarations for functions used in apps/snmptrapd_handler.c
+
+2004-01-27 13:15 slif
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ no chown() on Win32 -- compiles to nothing.
+
+2004-01-27 10:55 slif
+
+ * win32/: win32.dsw, win32sdk.dsw:
+
+ build independent projects (libraries) before dependent projects.
+ remove incomplete dependency specification to build all faster.
+
+2004-01-27 10:12 slif
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ Re-arranged the declarations of variables and/or compile constants,
+ so that the variables are declared only if needed.
+
+2004-01-27 10:11 slif
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ Supplied "return 0" to extensible_unregister(), a function returning int.
+
+2004-01-27 09:59 slif
+
+ * snmplib/container.c:
+
+ cast to void the argument to free().
+
+2004-01-27 09:57 slif
+
+ * snmplib/mib.c:
+
+ use u_char type cast instead of masking with 0xFF.
+
+2004-01-27 09:52 slif
+
+ * snmplib/asn1.c:
+
+ move conditional expression within type cast scope,
+ for the benefit of some compilers.
+
+2004-01-27 09:50 slif
+
+ * include/net-snmp/library/container.h:
+
+ spellcheck: netsnmp_container_free_list
+
+2004-01-27 09:46 slif
+
+ * apps/snmptrapd.c:
+
+ declare init_subagent near its only reference.
+
+2004-01-27 09:45 slif
+
+ * snmplib/snmp_logging.c:
+
+ remove unused variable from Win32 code.
+
+2004-01-27 09:44 slif
+
+ * agent/mibgroup/utilities/execute.c:
+
+ move HAVE_EXECV compile test earlier in the function to not introduce unused variables.
+
+2004-01-27 09:41 slif
+
+ * agent/helpers/table_dataset.c,
+ agent/helpers/table_iterator.c,
+ agent/mibgroup/util_funcs.c, agent/mibgroup/agentx/master.c
+, agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/disman/mteEventTable.c,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/mibII/ip.c, agent/mibgroup/mibII/tcp.c
+, agent/mibgroup/mibII/tcpTable.c,
+ agent/mibgroup/mibII/udp.c, agent/mibgroup/mibII/udpTable.c
+, agent/mibgroup/smux/smux.c,
+ agent/mibgroup/utilities/override.c,
+ apps/notification_log.c, apps/snmpvacm.c,
+ snmplib/container_binary_array.c,
+ snmplib/container_list_ssll.c, snmplib/mib.c,
+ snmplib/oid_stash.c, snmplib/snmpUDPDomain.c,
+ snmplib/snmp_api.c, snmplib/snmp_enum.c,
+ snmplib/snmp_transport.c:
+
+ quiet compiler warnings using appropriate type casting.
+
+2004-01-27 09:24 slif
+
+ * agent/mibgroup/ucd-snmp/versioninfo.c,
+ include/net-snmp/version.h, snmplib/snmp_version.c,
+ win32/libsnmp_dll/libsnmp.def:
+
+ Refer to the netsnmp library version string via netsnmp_get_version;
+ Keep direct string reference iff UCD_COMPATIBLE is defined.
+
+2004-01-27 09:07 slif
+
+ * snmplib/: snmpTCPDomain.c, snmpUDPDomain.c:
+
+ Avoid conversion macros when forming host copy of 16-bit port value
+
+2004-01-27 09:07 slif
+
+ * snmplib/snmp-tc.c:
+
+ Dont force unsigned short onto two unsigned chars.
+ Be more explicit in the treatment of the year component.
+
+2004-01-27 09:02 slif
+
+ * agent/mibgroup/mibII/: tcpTable.c, udpTable.c:
+
+ Win32 allocates TCP and UDP connection structures that consist of
+ a 32-bit count followed by a per connection table. When freeing the table,
+ find the beginning of the structure. The TCP table incorrectly counted
+ established TCP connections, fixed with this change.
+
+2004-01-27 08:58 slif
+
+ * include/net-snmp/net-snmp-config.h.in,
+ win32/config.h.borland, win32/net-snmp/net-snmp-config.h
+:
+
+ support Win32 in OSTYPE definition.
+
+2004-01-27 08:54 slif
+
+ * agent/: snmpd.c, mibgroup/agentx/master.c:
+
+ include io.h for Win32 to introduce the close() function
+
+2004-01-27 07:48 slif
+
+ * win32/: libhelpers/.cvsignore, net-snmp/.cvsignore,
+ net-snmp/agent/.cvsignore, net-snmp/library/.cvsignore
+, netsnmpmibs/.cvsignore, netsnmpmibssdk/.cvsignore
+, snmpdsdk/.cvsignore:
+
+ provide a CVS filter to every subdir under win32.
+
+2004-01-27 07:34 slif
+
+ * win32/: libagent/libagent.def, libucdmibs/libucdmibs.def
+:
+
+ convert to DOS format to keep certain IDE happy.
+
+2004-01-27 07:27 slif
+
+ * win32/mib_module_config.h:
+
+ this file is superseded by win32/net-snmp/agent/mib_module_config.h.
+
+2004-01-27 07:23 slif
+
+ * include/net-snmp/library/winservice.h, snmplib/winservice.c
+:
+
+ changes approved by author provide more readable formatting and comments.
+
+2004-01-27 07:22 slif
+
+ * include/net-snmp/library/winservice.h, snmplib/winservice.c
+:
+
+ remove CR characters from these sources.
+
+2004-01-27 07:19 slif
+
+ * README.Panasonic_AM3X.txt:
+
+ convert CRLF to newline
+
+2004-01-27 07:04 dts12
+
+ * apps/snmptrapd_handlers.c:
+
+ Forward traps to port 162 by default.
+
+2004-01-26 15:56 rstory
+
+ * snmplib/data_list.c:
+
+ quiet compiler warning
+
+2004-01-26 15:55 rstory
+
+ * snmplib/container_binary_array.c:
+
+ don't hardcode pointer size; noted on coders by rajesh arumugam
+
+2004-01-26 04:19 dts12
+
+ * apps/snmptrapd_handlers.c:
+
+ Fix the ordering of hostname and IP address as passed to trap handler
+ (Bug #882071 and others)
+
+2004-01-26 04:15 dts12
+
+ * apps/snmptrapd_handlers.c:
+
+ Convert v1 traps to v2 format before passing it to the trap handler
+ (plus merging the other 5.1.x patches into the main development tree)
+
+2004-01-26 02:47 dts12
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ Ensure that hrFSTable indexes are consistent across the lifetime of
+ the agent.
+
+2004-01-26 02:43 dts12
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ Align hrFSStorageIndex values with hrStorageTable (bug #882987)
+
+2004-01-20 05:48 rstory
+
+ * README:
+
+ Add Andy Smith to contributors
+
+2004-01-20 05:40 rstory
+
+ * configure:
+
+ update for new confiure.in
+
+2004-01-20 05:28 rstory
+
+ * include/net-snmp/system/mingw32.h:
+
+ partial application of 860980: Fix for mingw32.h
+
+2004-01-20 05:17 rstory
+
+ * configure.in:
+
+ apply patch 843679: Configure patch for MinGW
+
+2004-01-14 06:03 dts12
+
+ * agent/mibgroup/mibII/ifTable.c:
+
+ Fix handling of 64-bit counters, and use the correct /proc interface file
+ (not the temporary debugging version!)
+
+2004-01-14 05:41 dts12
+
+ * agent/mibgroup/mibII/: ifTable.c, ifTable.h:
+
+ Provisional re-implementation of IF-MIB::ifTable and IF-MIB::ifXTable
+ Linux support only (and some objects are missing),
+ but it should give the general flavour.
+
+2004-01-14 05:37 dts12
+
+ * include/net-snmp/library/snmp_enum.h, snmplib/snmp_enum.c
+:
+
+ New interfaces to find an unused value within an enumeration list.
+
+2004-01-13 20:16 rstory
+
+ * agent/mibgroup/agentx/master.c,
+ win32/net-snmp/agent/mib_module_config.h:
+
+ undo inadvertent checkin
+
+2004-01-13 20:13 rstory
+
+ * agent/helpers/: cache_handler.c, row_merge.c,
+ table_iterator.c:
+
+ undo inadvertent checkin
+
+2004-01-13 20:09 rstory
+
+ * include/net-snmp/agent/cache_handler.h,
+ include/net-snmp/agent/table_array.h,
+ include/net-snmp/library/snmp_debug.h,
+ mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ undo inadvertent checkin
+
+2004-01-13 20:03 rstory
+
+ * Makefile.in, agent/snmp_vars.c:
+
+ undo inadvertent checkin
+
+2004-01-13 10:23 rstory
+
+ * agent/mibgroup/mibII/: interfaces.c, interfaces.h:
+
+ undo inadvertent checkin
+
+2004-01-11 16:45 rstory
+
+ * local/mib2c.conf:
+
+ fix typo, noted on coders by Oleg Ivanov
+
+2004-01-11 16:43 rstory
+
+ * mibs/NET-SNMP-EXAMPLES-MIB.txt, snmplib/container.c,
+ win32/net-snmp/agent/mib_module_config.h, agent/snmp_vars.c
+, agent/helpers/cache_handler.c,
+ agent/helpers/row_merge.c, agent/helpers/table_iterator.c
+, agent/mibgroup/agentx/master.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/interfaces.h,
+ include/net-snmp/agent/cache_handler.h,
+ include/net-snmp/agent/table_array.h,
+ include/net-snmp/library/snmp_debug.h,
+ include/net-snmp/system/netbsd.h,
+ local/mib2c.check_values.conf, Makefile.in:
+
+ fix range checking code, noted on coders by Oleg Ivanov
+
+2004-01-07 09:40 rstory
+
+ * local/mib2c-conf.d/: m2c_setup_node.m2i,
+ mfd-access-unsorted-external-body.m2i,
+ mfd-access-unsorted-external-header.m2i, mfd-data-set.m2c
+, mfd-interface.m2c, mfd-top.m2c,
+ subagent.m2c:
+
+ if needlength not set, set varbind val_len for GETs, validate val_len on set;
+ don't declares functions which can't be inlined as inline; comment tweaks
+
+2004-01-06 14:40 hardaker
+
+ * snmplib/mib.c:
+
+ - translate a MIB type of IPADDR to IPADDRESS instead of OCTET_STRING.
+ - small other bug fix
+
+2004-01-06 14:39 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ change the manual so it doesn't reference UCD-SNMP v3 (ahem)
+
+2004-01-06 14:38 hardaker
+
+ * local/mib2c:
+
+ proper sorting when NetSNMP::OID is available.
+
+2004-01-01 16:53 rstory
+
+ * local/mib2c-conf.d/default-mfd-top.m2c:
+
+ only set defaults if not already set
+
+2003-12-30 20:34 hardaker
+
+ * perl/OID/: OID.xs, test.pl:
+
+ handle implied indexes
+
+2003-12-30 19:33 hardaker
+
+ * perl/OID/: OID.pm, OID.xs, test.pl:
+
+ A new ->get_indexes() method to return the extracted indexes from a OID.
+
+2003-12-30 15:19 rstory
+
+ * local/mib2c:
+
+ allow: separated paths in MIB2C_DIR env var
+
+2003-12-30 15:15 rstory
+
+ * local/mib2c-conf.d/: m2c_setup_enum.m2i, m2c_setup_node.m2i
+:
+
+ unquote uc calls, since eval with interpret as a literal and I can't
+ reproduce the 'bareword' problem that made me quote in the first place
+
+2003-12-29 12:03 rstory
+
+ * local/mib2c-conf.d/: mfd-interface.m2c, mfd-top.m2c
+:
+
+ remove unused request_mode
+
+2003-12-26 12:54 rstory
+
+ * local/mib2c-conf.d/m2c_setup_table.m2i:
+
+ rename vars for clarification: ${table}_ctx* -> ${table}_rowreq_ctx*; add
+ vars for mfd_defaults; use new mib2c push/pop to generate per table defaults
+ file default-table-$table.m2d containing current values of some m2c vars
+
+2003-12-26 12:52 rstory
+
+ * local/mib2c-conf.d/: generic-get-char.m2i,
+ mfd-access-unsorted-external-body.m2i,
+ mfd-access-unsorted-external-header.m2i,
+ mfd-access-unsorted-external-interface.m2i,
+ mfd-access-unsorted-external-readme.m2i, mfd-data-get.m2c
+, mfd-data-set.m2c, mfd-interface.m2c,
+ mfd-readme.m2c, mfd-top.m2c, node-get.m2i,
+ node-set.m2i, parent-dependencies.m2i, parent-set.m2i
+, syntax-InetAddress-get.m2i,
+ syntax-InetAddressType-get.m2i:
+
+ rename vars for clarification: itr_ctx* -> loop_ctx*, loop* -> loop_ctx*,
+ ${table}_ctx* -> ${table}_rowreq_ctx*
+
+2003-12-26 12:32 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ quote assignment of uppercased name, so values that start with a digit don't
+ get interpreted as a bare word; chg debug print to comment
+
+2003-12-26 12:31 rstory
+
+ * local/mib2c-conf.d/: details-enums.m2i,
+ generic-value-map-reverse.m2i, generic-value-map.m2i,
+ m2c_setup_enum.m2i:
+
+ quote assignment of uppercased name, so values that start with a digit don't
+ get interpreted as a bare word; consolidate $m2c_enamey/$m2c_iname processing
+ into m2c_setup_enum.m2i
+
+2003-12-23 07:19 rstory
+
+ * dist/README.build-scripts:
+
+ remove deprecated option from example
+
+2003-12-23 07:18 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ change default rpm build instructions to embed perl
+
+2003-12-23 07:17 rstory
+
+ * dist/net-snmp.spec:
+
+ re-work perl options to fix problem w/configure argument quoting
+
+2003-12-23 02:00 dts12
+
+ * README.win32:
+
+ Note that Cygwin no longer needs a separate regex library
+ Reported by John McCash
+
+2003-12-22 16:56 rstory
+
+ * local/mib2c:
+
+ add push/pop; re-work index/internalindex/externalindex/nonindex setup
+
+2003-12-19 20:38 hardaker
+
+ * local/: Makefile.in, mib2c.access_functions.conf,
+ mib2c.array-user.conf, mib2c.check_values.conf,
+ mib2c.conf:
+
+ Patch from Brian Buesker to fix misc problems (variable {}ing, ...)
+
+2003-12-18 01:58 dts12
+
+ * man/snmpnetstat.1:
+
+ Fix more markup errors, reported by Eric Raymond.
+
+2003-12-16 02:00 dts12
+
+ * include/net-snmp/agent/table_mfd.h:
+
+ Be consistent in use of forward definitions (explicit vs implicit struct)
+ Reported by Magnus Fromreide
+
+2003-12-11 18:56 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ update rpm build instructions
+
+2003-12-11 18:52 rstory
+
+ * dist/Makefile:
+
+ fix updated perl options for new rpm method
+
+2003-12-11 18:41 rstory
+
+ * dist/Makefile:
+
+ remove VER/REL, use VERSION/RELEASE; update perl options for new rpm method;
+ add target to build rpm tree; don't hardcode architecture
+
+2003-12-11 18:38 rstory
+
+ * local/Version-Munge.pl:
+
+ document -D option; add Makefile type
+
+2003-12-11 18:22 rstory
+
+ * dist/net-snmp.spec:
+
+ don't require perl; add note on vendor releases
+
+2003-12-11 08:10 rstory
+
+ * agent/helpers/cache_handler.c:
+
+ run indent
+
+2003-12-11 08:00 rstory
+
+ * agent/helpers/cache_handler.c:
+
+ move logic to skip when caching disable, no cache found or cache disabled
+
+2003-12-10 06:44 rstory
+
+ * dist/nsb-nightly:
+
+ delay sourcing of nsb-functions; mv rc file into ~/.snmp; remove build dir
+ on success
+
+2003-12-10 06:43 rstory
+
+ * dist/nsb-package:
+
+ delay sourcing of nsb-functions; mv rc file into ~/.snmp
+
+2003-12-10 06:17 rstory
+
+ * dist/nsb-functions:
+
+ new vars: NSB_VERSION NSB_BUILD_SUFFIX; don't use hostname -s, since sun
+ doesn't support it; tweak default paths
+
+2003-12-10 02:41 dts12
+
+ * man/: mib_api.3.def, snmp.conf.5.def,
+ snmp_config.5.def:
+
+ Fix assorted markup errors, reported by Eric Raymond.
+
+2003-11-30 14:25 rstory
+
+ * include/net-snmp/library/system.h:
+
+ fix scope of have_dirent ifdef
+
+2003-11-30 14:23 rstory
+
+ * agent/helpers/table_mfd.c:
+
+ add comments; remove assert on valid condition
+
+2003-11-30 14:21 rstory
+
+ * agent/helpers/table.c:
+
+ debug msg when skipping vb with bogus index
+
+2003-11-30 14:19 rstory
+
+ * agent/helpers/baby_steps.c:
+
+ readability fix - use macro instead of hardcoded value
+
+2003-11-28 05:41 dts12
+
+ * agent/helpers/table_data.c,
+ include/net-snmp/agent/table_data.h:
+
+ If a row is created via a SET request, then it needs to be made available
+ to the other columns and passes. Provide a mechanism for inserting this
+ into the request list.
+ (This looks suspiciously similar to another recent patch:-) Does
+ this functionality perhaps belong within the top-level 'table' handler?)
+
+2003-11-25 15:48 hardaker
+
+ * local/mib2c:
+
+ - support $node.description
+ - support @printf ...@
+
+2003-11-25 12:47 rstory
+
+ * dist/nsb-functions:
+
+ tweak default build dirs; default to host/version instead of platform/version
+ (since sf build hosts keep changing platforms)
+
+2003-11-25 12:44 rstory
+
+ * dist/nsb-package:
+
+ move dir munging in nsb-functions
+
+2003-11-24 09:54 hardaker
+
+ * local/Version-Munge.pl:
+
+ version stamp the .spec file
+
+2003-11-24 09:53 hardaker
+
+ * dist/net-snmp.spec:
+
+ version number change
+
+2003-11-24 09:38 hardaker
+
+ * FAQ:
+
+ add a greece mirror
+
+2003-11-24 06:37 dts12
+
+ * snmplib/snmpusm.c:
+
+ Handle invalid (64-bit) values for engine boots & time
+ Patch #827044 by Bob Rowlands, fixing bug #809250
+
+2003-11-24 06:23 dts12
+
+ * apps/snmpusm.c:
+
+ Correct usage information for -Cx options
+ Patch #818766 by Bob Rowlands, fixing bug #818634
+
+2003-11-24 04:00 dts12
+
+ * agent/mibgroup/host/hr_device.c:
+
+ Handle GETNEXT requests on the hrDeviceTable with a "too large" index.
+ Patch #811717 by Bob Rowlands, fixing bug #807315
+
+2003-11-21 09:13 dts12
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Correct handling of UCD diskio values on 64-bit Solaris.
+ Patch #809255 by Bob Rowlands, to fix bug #808975
+
+2003-11-21 09:08 dts12
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Fix Solaris implementation of ifInNUcastPkts & ifOutNUcastPkts
+ Patch #808807 by Bob Rowlands, to fix bugs #808399 & #808417
+
+2003-11-21 08:10 dts12
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Implement ifSpecific object on Solaris.
+ Patch #808746 by Bob Rowlands, fixing bug #808430
+
+2003-11-21 07:23 dts12
+
+ * snmplib/system.c:
+
+ Ensure 32-bit timeticks value returned on Solaris kit.
+ Patch #808074 by Bob Rowlands, to fix bug #807796
+
+2003-11-21 07:18 dts12
+
+ * agent/mibgroup/utilities/override.c:
+
+ Return an error on failed overrride write.
+ Patch #808054 by Bob Rowlands, fixing bug #805254
+
+2003-11-21 06:30 dts12
+
+ * man/: snmp.conf.5.def, snmpd.conf.5.def,
+ snmpusm.1.def:
+
+ Minor clarifications to a few man pages.
+ Patch #807937 from Bob Rowlands
+
+2003-11-21 06:25 dts12
+
+ * apps/snmpdf.c:
+
+ Handle storage units <1024 bytes
+ (Patch #801341 by Bob Rowlands, fixing bug #757448)
+
+2003-11-21 05:21 dts12
+
+ * agent/helpers/table_iterator.c:
+
+ When we reach the end of the last table, make sure that the higher level
+ handlers will realise this, and move on to the next registered module.
+ Also catch missing columns when processing GETNEXT requests.
+
+2003-11-21 04:19 dts12
+
+ * agent/agent_trap.c:
+
+ Support acknowledged notifications (Inform and AgentX Notify) as
+ well as unacknowledged ones. First reported by david@grancanaria
+ Probably doesn't resend if no response is received.
+
+2003-11-20 07:09 dts12
+
+ * agent/mibgroup/examples/netSnmpHostsTable.c:
+
+ Move suffix processing within the request loop, since v5.1 iterator
+ handlers may receive multiple request varbinds. Fix provided by Barb Roesch
+
+2003-11-20 06:36 dts12
+
+ * agent/agent_registry.c:
+
+ Protect 'unregister_mibs_by_session' from being called with a NULL
+ session pointer. (Used when unregistering "internal" MIB modules)
+
+2003-11-20 01:39 dts12
+
+ * agent/mibgroup/mibII/udp.c:
+
+ Be consistent in use of return variable name for HP-UX 11
+ (Fixed bug #845460)
+
+2003-11-19 16:23 rstory
+
+ * configure:
+
+ configure to match new configure.in
+
+2003-11-19 16:21 rstory
+
+ * configure.in, snmplib/Makefile.in:
+
+ don't use non-portable .c=.o type substitutions in makefile; thus put obj/lobj
+ generation back in configure
+
+2003-11-19 07:40 dts12
+
+ * agent/helpers/table_iterator.c:
+
+ Enable retries on GetNext noSuchInstance exceptions. Fixes bug #843842
+
+2003-11-19 07:32 dts12
+
+ * include/net-snmp/agent/watcher.h, agent/helpers/watcher.c
+:
+
+ Fix watched timestamp registration. 'marker_t' is already a pointer,
+ so doesn't need further dereferencing!
+
+2003-11-17 09:17 dts12
+
+ * agent/mibgroup/agent/nsLogging.c:
+
+ Fix creation of new logging entries.
+
+2003-11-17 09:12 dts12
+
+ * agent/helpers/table_iterator.c,
+ include/net-snmp/agent/table_iterator.h:
+
+ If a row is created via a SET request, then it needs to be inserted into
+ the iteration data structures, so that it's available to other columns & passes.
+
+2003-11-17 09:06 dts12
+
+ * snmplib/snmp_logging.c:
+
+ Release the data structure once it's no longer needed.
+
+2003-11-17 02:58 dts12
+
+ * agent/mibgroup/: mibII/tcp.c, ucd-snmp/vmstat.c:
+
+ Avoid using the variable name 'hz' (which gets corrupted on AIX and HPUX
+ by system redefinitions). See bug #842475 & #842483
+
+-------------------------------------------------------------------------------
+
+Changes: V5.0.9 -> V5.1
+
+2003-11-13 18:46 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ reverse 5.x and 4.x listing since, um, this is 5.x (again)
+
+2003-11-13 18:44 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ reverse 5.x and 4.x listing since, um, this is 5.x
+
+2003-11-13 18:42 hardaker
+
+ * man/: netsnmp_Container_iterator.3, netsnmp_agent.3,
+ netsnmp_baby_steps.3, netsnmp_bulk_to_next.3,
+ netsnmp_cache_handler.3, netsnmp_container.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_deprecated.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_iterator_info_s.3,
+ netsnmp_leaf.3, netsnmp_library.3,
+ netsnmp_mfd_pdu_context_s.3, netsnmp_mib_utilities.3,
+ netsnmp_mode_end_call.3, netsnmp_multiplexer.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_methods.3, netsnmp_oid_stash.3
+, netsnmp_old_api.3, netsnmp_read_only.3,
+ netsnmp_row_merge.3, netsnmp_scalar.3,
+ netsnmp_scalar_group_group.3, netsnmp_serialize.3,
+ netsnmp_stash_cache.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_todo.3, netsnmp_util.3, netsnmp_utilities.3
+, netsnmp_watcher.3:
+
+ update for 5.1
+
+2003-11-13 18:21 hardaker
+
+ * NEWS:
+
+ update for 5.1
+
+2003-11-13 18:14 hardaker
+
+ * perl/: ASN/Makefile.PL, OID/Makefile.PL,
+ SNMP/Makefile.PL, agent/Makefile.PL,
+ agent/default_store/Makefile.PL, default_store/Makefile.PL
+:
+
+ patch #838112 to fix windows perl building
+
+2003-11-13 17:28 rstory
+
+ * local/mib2c:
+
+ fix regexp for duplicate index exclusion to only match whole words
+
+2003-11-13 15:03 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ document stash_cache
+
+2003-11-13 14:47 hardaker
+
+ * agent/mibgroup/agent/: nsCache.c, nsDebug.c,
+ nsLogging.c:
+
+ - properly check for the ->processed flag.
+ - (fixes a bug pointed out by Bruce where a getnext returned noSuchInstance)
+
+2003-11-13 12:11 rstory
+
+ * agent/helpers/table.c:
+
+ don't call handlers for error recovery if they hadn't been called for at least
+ reserve1 (e.g. set w/invalid indexes)
+
+2003-11-13 11:34 rstory
+
+ * include/net-snmp/library/snmp_assert.h:
+
+ fix void definition for netsnmp_assert when debugging disabled, noted on coders
+
+2003-11-13 11:32 rstory
+
+ * README.win32:
+
+ apply patch [ 841463 ] 5.1rc1 README.win32 changes
+
+2003-11-12 09:25 dts12
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ Providee missing declaration for Route_Scan_Reload
+ HP-UX 11 only. Latest in the saga of bug # 840615
+
+2003-11-12 04:55 dts12
+
+ * agent/mibgroup/mibII/: icmp.c, ip.c, tcpTable.c
+:
+
+ Fix more HP-UX 11 specific bogus code.
+ Tracking Bug #840615
+
+2003-11-12 02:38 dts12
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ Use correct variable for detecting which object is being processed.
+ (HPUX-11 only - fixes bug #840615)
+
+2003-11-10 14:39 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.1.rc1 )
+
+2003-11-10 14:39 hardaker
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.1.rc1 )
+
+2003-11-10 14:39 hardaker
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.1.rc1 )
+
+2003-11-10 14:39 hardaker
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.1.rc1 )
+
+2003-11-10 14:38 hardaker
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.1.rc1 )
+
+2003-11-10 14:38 hardaker
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.1.rc1 )
+
+2003-11-10 14:38 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.1.rc1 )
+
+2003-11-10 14:38 hardaker
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.1.rc1 )
+
+2003-11-10 14:38 hardaker
+
+ * README:
+
+ - (README): version tag ( 5.1.rc1 )
+
+2003-11-10 14:38 hardaker
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.1.rc1 )
+
+2003-11-10 14:28 hardaker
+
+ * agent/Makefile.depend, agent/mibgroup/Makefile.depend
+, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend
+:
+
+ make depend
+
+2003-11-10 08:47 rstory
+
+ * snmplib/system.c:
+
+ don't double create temp directory
+
+2003-11-10 08:46 rstory
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ always use inline, now that it works (needed extern)
+
+2003-11-07 16:34 rstory
+
+ * local/mib2c-conf.d/: generic-data-allocate.m2i,
+ generic-table-indexes-from-oid.m2i,
+ generic-table-indexes-to-oid.m2i,
+ mfd-access-unsorted-external-body.m2i,
+ mfd-access-unsorted-external-interface.m2i, mfd-interface.m2c
+, mfd-top.m2c, node-set.m2i, parent-set.m2i
+:
+
+ use DEBUGTRACE instead of hardcoded __FUNCTION__
+
+2003-11-07 10:34 hardaker
+
+ * local/mib2c:
+
+ much better error message when a MIB node can't be found in the
+ command line arguments
+
+2003-11-07 10:27 hardaker
+
+ * local/Version-Munge.pl:
+
+ - fix sed script regexp for odd versions (pre2b, eg).
+ - make -h actually print help.
+
+2003-11-07 09:03 rstory
+
+ * local/mib2c.array-user.conf:
+
+ braces around var name
+
+2003-11-06 20:46 rstory
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ use inline to __inline from main net-snmp-config file; add extern to basic
+ NETSNMP_INLINE def, per MS tech note 123768
+
+2003-11-06 20:42 rstory
+
+ * include/net-snmp/library/system.h,
+ include/net-snmp/system/mingw32.h, snmplib/system.c:
+
+ apply patch [ 828362 ] First pass at MinGW32
+
+2003-11-06 20:29 rstory
+
+ * snmplib/: system.c (V5-0-patches.2), system.c:
+
+ apply patch [ 836162 ] 5.1pre3 win32 mkdirhier()
+
+2003-11-06 20:00 rstory
+
+ * win32/: encode_keychange/encode_keychange.dsp,
+ libsnmp/libsnmp.dsp, libsnmp_dll/libsnmp.def,
+ libsnmp_dll/libsnmp_dll.dsp, snmpbulkget/snmpbulkget.dsp
+, snmpbulkwalk/snmpbulkwalk.dsp, snmpd/snmpd.dsp,
+ snmpdelta/snmpdelta.dsp, snmpdf/snmpdf.dsp,
+ snmpdsdk/snmpd.dsp, snmpget/snmpget.dsp,
+ snmpgetnext/snmpgetnext.dsp, snmpnetstat/snmpnetstat.dsp
+, snmpset/snmpset.dsp, snmpstatus/snmpstatus.dsp,
+ snmptable/snmptable.dsp, snmptest/snmptest.dsp,
+ snmptranslate/snmptranslate.dsp, snmptrap/snmptrap.dsp,
+ snmptrapd/snmptrapd.dsp, snmpusm/snmpusm.dsp,
+ snmpvacm/snmpvacm.dsp, snmpwalk/snmpwalk.dsp:
+
+ apply patch [ 837633 ] 5.1pre3 win32 lib rename
+
+2003-11-06 16:05 rstory
+
+ * include/net-snmp/library/snmp_debug.h:
+
+ restore accidentally deleted \n in trace macro
+
+2003-11-05 19:13 rstory
+
+ * snmplib/snmp_client.c:
+
+ comment for possible future optimization
+
+2003-11-05 19:13 rstory
+
+ * agent/mibgroup/util_funcs.c:
+
+ apply spirit of patch 836721: use new tmp file pattern macro; use _open on
+ windows; add err log & debug msg; include sys/stat.h iff exists
+
+2003-11-05 19:05 rstory
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ apply spirit of patch 836721: define HAVE_SYSTEM; add new tmp file pattern macro
+
+2003-11-05 19:02 rstory
+
+ * agent/mibgroup/utilities/execute.c:
+
+ apply spirit of patch 836721 for run_shell_command: test for bad return codes
+ from functions; don't touch out_len if output not set or out_len is null
+
+2003-11-05 18:55 rstory
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ regenerate from aclocal.h, which reveals that we can't do an ifdef test
+ to prevent redefining PACKAGE_* unless it is manually re-added each time
+ this file is regenerated from acconfig.h. Blech.
+
+2003-11-05 18:50 rstory
+
+ * acconfig.h:
+
+ add macro for temp file name (configure option tbd)
+
+2003-11-05 18:14 rstory
+
+ * README.win32:
+
+ apply patch [ 833216 ] 5.1.pre3 Win32 compile patch
+
+2003-11-05 18:13 rstory
+
+ * configure:
+
+ configure to match new config.in
+
+2003-11-05 18:11 rstory
+
+ * configure.in:
+
+ include mibgroup utilities for mini-agent (run_shell_command for snmptrapd)
+
+2003-11-05 09:36 rstory
+
+ * local/mib2c-conf.d/: generic-ctx-copy.m2i,
+ generic-ctx-get.m2i, generic-ctx-set.m2i,
+ generic-data-context.m2i, generic-table-indexes-from-oid.m2i
+, generic-table-indexes-to-oid.m2i, mfd-interface.m2c
+:
+
+ always convert generated array len to array element count (not bytes)
+
+2003-11-05 02:52 dts12
+
+ * apps/: snmptable.c (V5-0-patches.1), snmptable.c:
+
+ Don't try searching for column objects if there isn't anything to search.
+ Report problems using the object name originally specified, rather than
+ a temporary internal buffer.
+
+2003-11-04 15:06 rstory
+
+ * win32/: libsnmp_dll/libsnmp_dll.dsp,
+ net-snmp/net-snmp-config.h:
+
+ INLINE changes - don't use inline for the DLL version, as it's reported to
+ cause errors
+
+2003-11-04 14:45 rstory
+
+ * win32/: win32.dsw, win32sdk.dsw,
+ libhelpers/libhelpers.dsp, libsnmp_dll/libsnmp.def,
+ netsnmpmibs/netsnmpmibs.dsp:
+
+ apply patch [ 833216 ] 5.1.pre3 Win32 compile patch
+
+2003-11-04 08:58 rstory
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ don't define configure PACKAGE_* macros if already defines.
+
+2003-11-04 08:04 dts12
+
+ * FAQ:
+
+ A new entry discussing tables with >256 columns.
+
+2003-11-04 07:33 rstory
+
+ * local/mib2c-conf.d/generic-ctx-set.m2i:
+
+ always generate code when data context is generated
+
+2003-11-04 07:32 rstory
+
+ * local/mib2c-conf.d/syntax-InetAddress-set.m2i:
+
+ clarify comments
+
+2003-11-04 07:31 rstory
+
+ * local/mib2c-conf.d/syntax-InetAddressType-set.m2i:
+
+ clarify comments; use generic-set instead of get
+
+2003-11-04 07:22 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ clarify comments
+
+2003-11-04 07:19 rstory
+
+ * README:
+
+ sync contributors w/5.0.x
+
+2003-11-04 01:28 dts12
+
+ * man/snmpd.8.def:
+
+ Document the effect of -C on persistent config files.
+
+2003-11-03 14:29 rstory
+
+ * local/mib2c-conf.d/node-set.m2i:
+
+ fix generated code for undo_setup
+
+2003-11-03 12:57 rstory
+
+ * local/mib2c-conf.d/mfd-data-set.m2c:
+
+ clarify comments; remove bogus asserts
+
+2003-11-03 10:31 rstory
+
+ * local/mib2c-conf.d/generic-get-char.m2i:
+
+ make IS_SET macros unique per node
+
+2003-11-03 10:30 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes-from-oid.m2i:
+
+ fix var name typo
+
+2003-11-03 10:28 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes-to-oid.m2i:
+
+ must use addr of local var to get ptr
+
+2003-11-03 10:24 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes-varbind-setup.m2i:
+
+ must use addr of local var to get ptr
+
+2003-11-03 10:22 rstory
+
+ * local/mib2c-conf.d/default-mfd-top.m2c:
+
+ set up defaults for mfd tables
+
+2003-11-03 07:50 rstory
+
+ * include/net-snmp/agent/snmp_agent.h:
+
+ recognize SNMP_MSG_SET is not a valid GET mode; comment tweaks
+
+2003-11-03 07:26 dts12
+
+ * include/net-snmp/agent/snmp_agent.h:
+
+ Recognise SNMP_MSG_SET as a valid SET mode
+ (so that the varbind caching doesn't lose the assigned values!)
+
+2003-11-02 09:51 rstory
+
+ * include/net-snmp/system/hpux.h:
+
+ restore accidentaly deleted hpux define; add comment
+
+2003-11-02 04:55 nba
+
+ * man/.cvsignore:
+
+ Fix a bunch of compiler warnings: const-ness, casts, missing protoypes,
+ unused variables, cvs ignore ignorable files
+
+2003-11-02 04:50 nba
+
+ * .cvsignore, agent/agent_trap.c, agent/snmpd.c,
+ agent/mibgroup/agent/nsLogging.c,
+ agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/mibII/interfaces.c, apps/.cvsignore,
+ apps/snmptrapd_handlers.c, apps/snmptrapd_log.c,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/library/container.h,
+ include/net-snmp/library/container_binary_array.h,
+ include/net-snmp/library/snmp_enum.h, snmplib/mib.c,
+ snmplib/snmp_enum.c:
+
+ Fix a bunch of compiler warnings: const-ness, casts, missing protoypes,
+ unused variables, cvs ignore ignorable files
+
+2003-11-02 04:44 nba
+
+ * configure.in, configure:
+
+ Fix a bad syntax when testing for perl modules
+
+2003-11-02 04:42 nba
+
+ * apps/snmpnetstat/main.c, man/snmpnetstat.1:
+
+ Another left over -p option
+
+2003-11-01 16:04 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ always quote both sides of perl ne/eq tests; allow override of varbind variable
+ name; add subid to node summary
+
+2003-11-01 16:02 rstory
+
+ * local/mib2c-conf.d/default-mfd-top.m2c:
+
+ move example and transient defaults to table setup
+
+2003-11-01 16:02 rstory
+
+ * local/mib2c-conf.d/m2c_setup_table.m2i:
+
+ change default reg ctx from void* to netsnmp_data_list *; move example
+ and transient defaults here (from top)
+
+2003-11-01 15:58 rstory
+
+ * local/mib2c-conf.d/node-get.m2i:
+
+ add 'TODO' comment; don't generate code if example not set & not generated data
+ context; default to returning no data for node;
+
+2003-11-01 15:56 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ put 'TODO' comment on it's own line(removable w/out disrupting code comments);
+ use quotes on both sides of perl eq/ne tests; fix reg ptr dcl
+
+2003-11-01 15:55 rstory
+
+ * local/mib2c-conf.d/mfd-makefile.m2m:
+
+ add users target to only build user code
+
+2003-11-01 15:54 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ use quotes on both sides of perl eq/ne tests; check_indexs is only for row
+ creation; data not found only ok for row creation, not settable; sanity
+ check for bogus index oid size before memcpy; set ASN_PRIV_RETRY for no data,
+ so sparse tables work
+
+2003-11-01 15:51 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-interface.m2i
+:
+
+ set oid size to max before trying to parse oid
+
+2003-11-01 15:50 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-body.m2i:
+
+ put 'TODO' comment on it's own line(removable w/out disrupting code comments);
+ rename ref to loop_ref; more asserts; move TODO outside of conditional; move
+ itr_ctr free outside of example conditional
+
+2003-11-01 15:48 rstory
+
+ * local/mib2c-conf.d/generic-get-decl.m2i:
+
+ tweak indention
+
+2003-11-01 15:47 rstory
+
+ * local/mib2c-conf.d/generic-ctx-set.m2i:
+
+ put 'TODO' comment on it's own line(removable w/out disrupting code comments);
+ move TODO outside of conditional; don't include code if examples not set
+
+2003-11-01 15:45 rstory
+
+ * local/mib2c-conf.d/generic-ctx-get.m2i:
+
+ put 'TODO' comment on it's own line(removable w/out disrupting code comments);
+ quote both sides of perl eq/ne tests; document include in comments
+
+2003-11-01 15:44 rstory
+
+ * local/mib2c-conf.d/generic-ctx-copy.m2i:
+
+ put 'TODO' comment on it's own line(removable w/out disrupting code comments);
+ move TODO outside of conditional; tweak conditional
+
+2003-11-01 15:43 rstory
+
+ * local/mib2c-conf.d/node-set.m2i:
+
+ put 'TODO' comment on it's own line(removable w/out disrupting code comments);
+ move conditional inside include
+
+2003-11-01 15:41 rstory
+
+ * local/mib2c-conf.d/: mfd-data-get.m2c, mfd-readme.m2c
+, parent-set.m2i:
+
+ put 'TODO' comment on it's own line(removable w/out disrupting code comments);
+ quote both sides of perl eq/ne tests
+
+2003-11-01 15:37 rstory
+
+ * local/mib2c-conf.d/syntax-RowStatus-get.m2i:
+
+ put 'TODO' comment on it's own line(removable w/out disrupting code comments)
+
+2003-11-01 15:37 rstory
+
+ * local/mib2c-conf.d/: syntax-COUNTER64-get.m2i,
+ syntax-DateAndTime-get.m2i, syntax-InetAddress-get.m2i,
+ syntax-InetAddressType-get.m2i, syntax-TestAndIncr-get.m2i
+:
+
+ put 'TODO' comment on it's own line(removable w/out disrupting code comments);
+ default to returning no data for nodes
+
+2003-11-01 15:21 rstory
+
+ * local/mib2c-conf.d/: details-enums.m2i,
+ generic-data-context.m2i, generic-get-char.m2i,
+ generic-value-map-reverse.m2i, generic-value-map.m2i,
+ mfd-access-unsorted-external-header.m2i, mfd-data-set.m2c
+, parent-dependencies.m2i:
+
+ put 'TODO' comment on it's own line(removable w/out disrupting code comments)
+
+2003-11-01 15:16 rstory
+
+ * local/mib2c-conf.d/: generic-table-indexes-from-oid.m2i,
+ generic-table-indexes-to-oid.m2i,
+ generic-table-indexes-varbind-setup.m2i:
+
+ new code for indexes and oid conversions
+
+2003-11-01 10:43 rstory
+
+ * snmplib/container_iterator.c:
+
+ use endofmibview instead of no_vars
+
+2003-10-30 17:38 rstory
+
+ * agent/mibgroup/host/hr_swrun.c, local/mib2c.array-user.conf
+:
+
+ add comments
+
+2003-10-30 17:37 rstory
+
+ * agent/snmp_agent.c:
+
+ test func parameter, not variable we're about to overwrite
+
+2003-10-30 17:36 rstory
+
+ * agent/snmp_vars.c:
+
+ declare callback_master_num even if SNMP_TRANSPORT_CALLBACK_DOMAIN is not
+ defined (so I don't need to add more ifdef's in other code)
+
+2003-10-30 17:34 rstory
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ log warning and don't open callback transport if SNMP_TRANSPORT_CALLBACK_DOMAIN
+ is not defined
+
+2003-10-30 17:33 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ log warning and don't open callback transport if SNMP_TRANSPORT_CALLBACK_DOMAIN
+ is not defined; fix test for agentx_open_session
+
+2003-10-30 17:29 rstory
+
+ * snmplib/snmpCallbackDomain.c:
+
+ don't compile code if SNMP_TRANSPORT_CALLBACK_DOMAIN not defined
+
+2003-10-30 16:51 rstory
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ merge transport comments from non-win net-snmp-config.h; undef callback
+ transport instead of def of 0, so it actually turns off code; undef inline
+ macros before redefining them
+
+2003-10-30 16:49 rstory
+
+ * win32/config.h:
+
+ replace contents w/include of net-snmp/net-snmp-config.h so only one header
+ needs to be maintained. Everyone should be using the new one anyway, right?
+
+2003-10-30 01:31 dts12
+
+ * configure, configure.in:
+
+ Don't configure the Host-Resources support by default.
+ It's a good idea, but we're too close to 5.1 for this to be safe.
+
+2003-10-29 10:51 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ inline -> NETSNMP_INLINE
+
+2003-10-29 03:10 dts12
+
+ * man/: snmpcmd.1.def, snmpd.8.def, snmptrapd.8.def
+:
+
+ Document new -Lx logging option block, and assorted deprecated options.
+
+2003-10-29 02:59 dts12
+
+ * FAQ:
+
+ Various updates to the FAQ.
+ Highlights include better explanation of access control and timeout
+ problems, discussion of what traps are sent and where to (including
+ Disman Event-MIB support) and more on mib2c usage (including the
+ differences between configs, and pointers to examples).
+ Separate sections for compilation and coding new modules
+ (restructuring existing entries)
+ Refer to project as 'Net-SNMP' rather than 'UCD' throughout
+ (except where specifically v4 or UCD-SNMP-MIB are meant)
+
+2003-10-29 02:33 dts12
+
+ * agent/mibgroup/mibII/: sysORTable.h (V5-0-patches.1),
+ sysORTable.h (V4-2-patches.[1,2]), sysORTable.h:
+
+ Fix null definition of REGISTER_SYSOR_TABLE (when not using this table).
+ Reported by Mark Hopkins
+
+2003-10-28 18:16 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.1.pre3 )
+
+2003-10-28 18:16 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.1.pre3 )
+
+2003-10-28 18:16 rstory
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.1.pre3 )
+
+2003-10-28 18:16 rstory
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.1.pre3 )
+
+2003-10-28 18:16 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.1.pre3 )
+
+2003-10-28 18:16 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.1.pre3 )
+
+2003-10-28 18:16 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.1.pre3 )
+
+2003-10-28 18:16 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.1.pre3 )
+
+2003-10-28 18:15 rstory
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.1.pre3 )
+
+2003-10-28 18:15 rstory
+
+ * README:
+
+ - (README): version tag ( 5.1.pre3 )
+
+2003-10-28 18:15 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.1.pre3 )
+
+2003-10-28 18:14 rstory
+
+ * doxygen.conf, man/netsnmp_Container_iterator.3,
+ man/netsnmp_agent.3, man/netsnmp_baby_steps.3,
+ man/netsnmp_bulk_to_next.3, man/netsnmp_cache_handler.3
+, man/netsnmp_container.3, man/netsnmp_data_list.3
+, man/netsnmp_debug.3, man/netsnmp_handler.3,
+ man/netsnmp_instance.3, man/netsnmp_iterator_info_s.3,
+ man/netsnmp_leaf.3, man/netsnmp_library.3,
+ man/netsnmp_mfd_pdu_context_s.3, man/netsnmp_mib_utilities.3
+, man/netsnmp_mode_end_call.3, man/netsnmp_multiplexer.3
+, man/netsnmp_netsnmp_iterator_info_s.3,
+ man/netsnmp_netsnmp_mib_handler_methods.3,
+ man/netsnmp_oid_stash.3, man/netsnmp_old_api.3,
+ man/netsnmp_read_only.3, man/netsnmp_row_merge.3,
+ man/netsnmp_scalar.3, man/netsnmp_scalar_group_group.3
+, man/netsnmp_serialize.3, man/netsnmp_stash_cache.3
+, man/netsnmp_table.3, man/netsnmp_table_array.3
+, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_iterator.3
+, man/netsnmp_todo.3, man/netsnmp_util.3,
+ man/netsnmp_utilities.3, man/netsnmp_watcher.3:
+
+ update for 5.1.pre3
+
+2003-10-28 18:05 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend
+, agent/mibgroup/Makefile.depend, apps/Makefile.depend
+, apps/snmpnetstat/Makefile.depend,
+ snmplib/Makefile.depend:
+
+ make depend
+
+2003-10-28 17:31 hardaker
+
+ * Makefile.top:
+
+ fix version for 5.1 release
+
+2003-10-28 12:47 rstory
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ regenerate from new acconfig.h
+
+2003-10-28 12:45 rstory
+
+ * acconfig.h:
+
+ fix bug [ 830852 ] Build doesn't work on HP-UX 11i
+ undef macro before redefining it
+
+2003-10-28 10:32 rstory
+
+ * agent/mibgroup/mibII/: route_write.c (V5-0-patches.1),
+ route_write.c:
+
+ apply patch [ 812019 ] snmpset on ipRouteDest.127.0.0.1 kill agent dumps core
+ fixes bug [ 808958 ] OSSun snmpset on ipRouteDest.127.0.0.1 kill agent dumps ...
+
+2003-10-28 10:16 rstory
+
+ * agent/helpers/: debug_handler.c (V5-0-patches.1), debug_handler.c
+:
+
+ apply patch [ 831161 ] netsnmp_get_debug_helper crashes snmpd
+ fixes bug [ 826963 ] netsnmp_get_debug_helper crashes snmpd
+
+2003-10-28 10:05 rstory
+
+ * perl/SNMP/SNMP.xs:
+
+ apply patch [ 829633 ] 5.1pre1 Perl translateObj fix
+
+2003-10-28 07:32 rstory
+
+ * dist/: net-snmp.spec (V5-0-patches.3), net-snmp.spec:
+
+ apparently nested %if's are a no-no
+
+2003-10-28 07:22 rstory
+
+ * dist/net-snmp.spec:
+
+ fix perl conditional builds after read rpm docs
+
+2003-10-26 00:34 hardaker
+
+ * snmplib/oid_stash.c:
+
+ inline -> NETSNMP_INLINE as pointed out by Alex Burger
+
+2003-10-24 16:49 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-readme.m2i:
+
+ rename loop_ctx loop_context; prefix all loop functions w/loop
+
+2003-10-24 16:46 rstory
+
+ * local/mib2c-conf.d/mfd-readme.m2c:
+
+ move defaults to an easier to spot place
+
+2003-10-24 16:45 rstory
+
+ * local/mib2c-conf.d/: generic-table-indexes.m2i,
+ mfd-access-unsorted-external-body.m2i,
+ mfd-access-unsorted-external-header.m2i,
+ mfd-access-unsorted-external-interface.m2i, mfd-top.m2c
+:
+
+ rename table_idx table_mib_index; rename loop_ctx loop_context; prefix all
+ loop functions w/loop; remove index2oid
+
+2003-10-24 06:02 dts12
+
+ * configure, configure.in:
+
+ Add Host-Resources support to the list of default MIB modules.
+ We've talked about this for years - it's about time we did so!
+
+2003-10-24 05:49 dts12
+
+ * agent/snmpd.c, apps/snmptrapd.c:
+
+ New choices for some command-line options, to improve consistency
+ between agent and trap handler usage. The previous options still
+ work but are now marked as "deprecated". These should probably
+ be removed completely in a future release (e.g. 5.2).
+
+2003-10-23 15:58 rstory
+
+ * include/net-snmp/library/container.h:
+
+ fix bug 828671: The lib isn't C++ compatible; remove 'struct' before typdef
+
+2003-10-23 15:54 rstory
+
+ * snmplib/container_null.c:
+
+ fix bug 828671: The lib isn't C++ compatible; rename structure
+ remove unused noalloc function
+
+2003-10-23 15:53 rstory
+
+ * include/net-snmp/library/container.h,
+ snmplib/container_binary_array.c:
+
+ fix bug 828671: The lib isn't C++ compatible; rename structure
+
+2003-10-23 15:39 rstory
+
+ * snmplib/: parse.c (V5-0-patches.3), parse.c:
+
+ fix bug 767753: snmpwalk crash (adopt_orphans)
+
+2003-10-23 10:34 rstory
+
+ * configure:
+
+ configure to match new configure.in
+
+2003-10-23 10:32 rstory
+
+ * configure.in:
+
+ apparently configure translates '_' to '-' in arguments/enables, so use -
+ consistently; move common module arg mistake checks with other module
+ checks, and add a few more; add check for enable perl-modules too
+
+2003-10-23 10:24 rstory
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ move comment fixes to acconfig.h and regenerate net-snmp-config.h.in
+
+2003-10-23 08:52 rstory
+
+ * snmplib/container.c:
+
+ remove nonstd NDEBUG ifdef tst; use DBGMSGSUBOID instead of DBGMSDOID; add
+ debug for comparison result
+
+2003-10-23 08:45 rstory
+
+ * snmplib/container_iterator.c:
+
+ add comments; fix get_next w/null key (get-first); remove redundant debugs
+
+2003-10-22 17:10 rstory
+
+ * snmplib/: snmpusm.c (V5-0-patches.2), snmpusm.c:
+
+ fix bug 822870 (usmStatsDecryptionErrors did not increment on failed get req)
+ with patch 827056 from browlands
+
+2003-10-22 09:43 rstory
+
+ * include/net-snmp/library/snmp_assert.h:
+
+ define __STRING if not defined
+
+2003-10-22 06:14 rstory
+
+ * Makefile.top:
+
+ increment libtool revision
+
+2003-10-22 06:13 rstory
+
+ * Makefile.in:
+
+ fix commentcheck pattern to exclude ftp and http urls
+
+2003-10-22 02:08 dts12
+
+ * snmplib/snmp_api.c:
+
+ The variables 'do_hint' and 'check' are only declared
+ or needed when 'DISABLE_MIB_LOADING' is not defined.
+ There's no point in giving them dummy values otherwise.
+
+2003-10-21 12:16 rstory
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ remove c++ style comment
+
+2003-10-21 12:12 rstory
+
+ * acconfig.h, agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/ucd-snmp/diskio.c:
+
+ remove c++ style comment
+
+2003-10-21 11:51 rstory
+
+ * local/Version-Munge.pl:
+
+ move usage sub to top so it actually does something; print usage for param
+ errors, instead of just dying
+
+2003-10-21 11:51 rstory
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.1.pre2 )
+
+2003-10-21 11:51 rstory
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.1.pre2 )
+
+2003-10-21 11:51 rstory
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.1.pre2 )
+
+2003-10-21 11:51 rstory
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.1.pre2 )
+
+2003-10-21 11:51 rstory
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.1.pre2 )
+
+2003-10-21 11:51 rstory
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.1.pre2 )
+
+2003-10-21 11:50 rstory
+
+ * perl/SNMP/SNMP.pm:
+
+ - (perl/SNMP/SNMP.pm): version tag ( 5.1.pre2 )
+
+2003-10-21 11:50 rstory
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.1.pre2 )
+
+2003-10-21 11:50 rstory
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.1.pre2 )
+
+2003-10-21 11:50 rstory
+
+ * README:
+
+ - (README): version tag ( 5.1.pre2 )
+
+2003-10-21 11:50 rstory
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.1.pre2 )
+
+2003-10-21 11:42 rstory
+
+ * Makefile.rules:
+
+ remove bogus install target
+
+2003-10-21 11:18 rstory
+
+ * configure:
+
+ configure for new config.in
+
+2003-10-21 11:16 rstory
+
+ * configure.in:
+
+ fix cut-n-paste error in perl uninstall support; update version in init
+
+2003-10-21 01:54 dts12
+
+ * snmplib/system.c:
+
+ Include <fcntl.h> for definition of O_RDWR. Reported by SebNob.
+
+2003-10-21 01:47 dts12
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ Ensure that multi-line comments aren't broken when the active
+ net-snmp-config.h file is generated. Reported by SebNob.
+ (Possibly being a bit over-cautious here, but you can't be too careful!)
+
+2003-10-17 22:52 hardaker
+
+ * NEWS:
+
+ more updates
+
+2003-10-17 22:39 hardaker
+
+ * agent/snmp_agent.c:
+
+ turn on the lookup cache.
+
+2003-10-17 16:35 hardaker
+
+ * man/: Makefile.in, netsnmp_Container_iterator.3,
+ netsnmp_baby_steps.3, netsnmp_cache_handler.3,
+ netsnmp_container.3, netsnmp_deprecated.3,
+ netsnmp_iterator_info_s.3, netsnmp_leaf.3,
+ netsnmp_mfd_pdu_context_s.3, netsnmp_row_merge.3,
+ netsnmp_scalar_group_group.3, netsnmp_stash_cache.3,
+ netsnmp_utilities.3:
+
+ more (new) updates from doxygen
+
+2003-10-17 16:33 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_bulk_to_next.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_handler.3, netsnmp_instance.3,
+ netsnmp_library.3, netsnmp_mib_utilities.3,
+ netsnmp_mode_end_call.3, netsnmp_multiplexer.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_methods.3, netsnmp_oid_stash.3
+, netsnmp_old_api.3, netsnmp_read_only.3,
+ netsnmp_scalar.3, netsnmp_serialize.3,
+ netsnmp_set_data.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_todo.3, netsnmp_util.3, netsnmp_watcher.3
+:
+
+ updates from doxygen
+
+2003-10-17 16:16 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - (perl/AnyData_SNMP/Storage.pm): version tag ( 5.1.pre1 )
+
+2003-10-17 16:15 hardaker
+
+ * perl/ASN/ASN.pm:
+
+ - (perl/ASN/ASN.pm): version tag ( 5.1.pre1 )
+
+2003-10-17 16:15 hardaker
+
+ * perl/OID/OID.pm:
+
+ - (perl/OID/OID.pm): version tag ( 5.1.pre1 )
+
+2003-10-17 16:15 hardaker
+
+ * perl/default_store/default_store.pm:
+
+ - (perl/default_store/default_store.pm): version tag ( 5.1.pre1 )
+
+2003-10-17 16:15 hardaker
+
+ * perl/agent/default_store/default_store.pm:
+
+ - (perl/agent/default_store/default_store.pm): version tag ( 5.1.pre1 )
+
+2003-10-17 16:15 hardaker
+
+ * perl/agent/agent.pm:
+
+ - (perl/agent/agent.pm): version tag ( 5.1.pre1 )
+
+2003-10-17 16:15 hardaker
+
+ * sedscript.in:
+
+ - (sedscript.in): version tag ( 5.1.pre1 )
+
+2003-10-17 16:15 hardaker
+
+ * FAQ:
+
+ - (FAQ): version tag ( 5.1.pre1 )
+
+2003-10-17 16:15 hardaker
+
+ * README:
+
+ - (README): version tag ( 5.1.pre1 )
+
+2003-10-17 15:51 hardaker
+
+ * local/Version-Munge.pl:
+
+ added anydata modules
+
+2003-10-17 15:44 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ make gettable return a hash instead.
+
+2003-10-17 15:03 hardaker
+
+ * apps/snmptrapd_handlers.c:
+
+ add oid/default portion to help text for the forward token
+
+2003-10-17 15:02 hardaker
+
+ * COPYING:
+
+ Add sparta
+
+2003-10-17 14:59 hardaker
+
+ * man/snmptrapd.conf.5.def:
+
+ document the forward token
+
+2003-10-17 14:41 hardaker
+
+ * Makefile.in:
+
+ use new version modification script
+
+2003-10-17 14:40 hardaker
+
+ * local/Version-Munge.pl:
+
+ new version messing-with script
+
+2003-10-17 14:39 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ remove portions old script replaced by newer Version-Munge.pl
+
+2003-10-17 14:37 hardaker
+
+ * snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c): version tag ( 5.1.pre1 )
+
+2003-10-15 09:25 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-body.m2i:
+
+ remove hardcoded context name
+
+2003-10-14 16:42 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-header.m2i:
+
+ add note that example code is base on a data file
+
+2003-10-14 16:32 rstory
+
+ * local/mib2c-conf.d/: mfd-access-unsorted-external-body.m2i,
+ mfd-access-unsorted-external-readme.m2i:
+
+ add not that iterator get/get-next don't correspond to pdu types, and they
+ shouldn't be ordering their data
+
+2003-10-14 16:09 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-header.m2i:
+
+ sync comments w/readme
+
+2003-10-14 16:08 rstory
+
+ * local/mib2c-conf.d/mfd-makefile.m2m:
+
+ as long as we're using gnu-make specifics, only process config vars once (also
+ lets make output represent actual values, instead of script)
+
+2003-10-14 16:07 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ use big obnoxious warning; set error for no context if table not settable
+
+2003-10-14 16:06 rstory
+
+ * local/mib2c-conf.d/m2c-internal-warning.m2i:
+
+ big obnoxious warning for top of implementation files
+
+2003-10-14 16:06 rstory
+
+ * local/mib2c-conf.d/: mfd-access-unsorted-external-body.m2i,
+ mfd-access-unsorted-external-readme.m2i:
+
+ sync function header summary comments w/readme summary header comments;
+ present function in same order in both files
+
+2003-10-14 16:04 rstory
+
+ * local/mib2c-conf.d/m2c_setup_table.m2i:
+
+ init m2c_data_init
+
+2003-10-14 13:34 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-body.m2i:
+
+ use new common setup; wrappers for all container functions, to convert
+ between interface context and user context; some param tweaks; remove
+ unused prototype; keep ptr to table context in example; rename some vars
+ use new MFD_* error codes; rename example function; documenation updates;
+
+2003-10-14 13:32 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-header.m2i:
+
+ use new common setup; wrappers for all container functions, to convert
+ between interface context and user context; some param tweaks; remove
+ unused prototype; keep ptr to table context in example; rename some vars
+
+2003-10-14 13:30 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-interface.m2i
+:
+
+ use new common setup; wrappers for all container functions, to convert
+ between interface context and user context; some param tweaks; don't auto
+ allocate context for get data, so user could use one they've allocated
+
+2003-10-14 13:28 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-setup.m2i:
+
+ common setup for unsorted external, which has 3 parts included at different
+ times
+
+2003-10-14 13:27 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-readme.m2i:
+
+ invert verbose logic test; add quick overview of iteration loop; reorder
+ some text/blank lines; update for renamed vars
+
+2003-10-14 13:11 rstory
+
+ * local/mib2c-conf.d/syntax-COUNTER64-get.m2i:
+
+ handle counter64 vars
+
+2003-10-14 13:10 rstory
+
+ * local/mib2c-conf.d/node-get.m2i:
+
+ use new MFD_* error codes; update for m2c param rename; handle counter64 vars
+
+2003-10-14 13:09 rstory
+
+ * local/mib2c-conf.d/mfd-makefile.m2m:
+
+ name deps files explicity, since .c=.deps isn't portable
+
+2003-10-14 13:08 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ update base param from mfd reg to mfd pdu ctx; update for renamed mfd/m2c vars;
+ rename user reg typedef; no undo in table ctx if table not settable; add user
+ reg ptr, request mode and data list to table context; mv container init proto
+ and other interface prototypes to their own header; add protos for pre/post
+ requests, table context init/cleanup; add set prototypes; include new headers
+ at bottom of main header; move as mush of init routine as possible into
+ interface code; use new MFD_* return codes; don't run makefile/subagent
+ conf files if they've already been run
+
+2003-10-14 12:59 rstory
+
+ * local/mib2c-conf.d/mfd-readme.m2c:
+
+ add mfd overview of SNMP and mfd data structures; document m2c configuration
+ variables; indent some comments to be more consistent; docs for set support
+
+2003-10-14 12:57 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ replace hardcoded header name w/$name.h; documentation updates; use MFD_*
+ return codes instead of SNMP_*; update renamed m2c params; remove local static
+ prototypes from headers; new per table interface context; rename interface init;
+ use table reg in local table context instead of malloc; remove _ prefix from
+ public table allocate & release ctx funcs; init vars in allocate_ctx; call
+ table ctx init func in allocate, if defined; wrappers for all mfd functions, to
+ convert from our table context to the users registration pointer; after object
+ lookup set users indexes back to the varbind oid and set context vars; only
+ do get routines for accessable internal indexes; prefix wrappers w/mfd_;
+ detect if user get routines munges vb value pointer; check for null ptr before
+ free; merge check_index into check_indexes; add set values, commit, undo
+ and irreversible commit wrappers; update for renamed commit mode names;
+ simplify param for internal index check funcs
+
+2003-10-14 12:34 rstory
+
+ * local/mib2c-conf.d/mfd-data-get.m2c:
+
+ put prototypes in $name_data_get.h
+
+2003-10-14 12:33 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ update m2c node params to be based on var/val/ref instead of function name
+
+2003-10-14 12:31 rstory
+
+ * local/mib2c-conf.d/generic-get-decl.m2i:
+
+ update for rename m2c var names
+
+2003-10-14 12:31 rstory
+
+ * local/mib2c-conf.d/: generic-data-context.m2i,
+ generic-table-indexes.m2i:
+
+ use m2c_node_summary in comment
+
+2003-10-14 12:30 rstory
+
+ * local/mib2c-conf.d/mfd-data-set.m2c:
+
+ documentation updates; use MFD_* return codes instead of SNMP_*; put prototypes
+ in $name_data_set.h; update renamed m2c params; add external index check func
+ if table has external index; simplify param for internal index check funcs
+
+2003-10-14 12:27 rstory
+
+ * local/mib2c-conf.d/parent-dependencies.m2i:
+
+ remove mfd reg param && assert
+
+2003-10-14 12:26 rstory
+
+ * local/mib2c-conf.d/node-set.m2i:
+
+ documentation updates; use MFD_* return codes instead of SNMP_*; add per node
+ undo_setup ; update for renamed commit mode names; update renamed mfd params
+
+2003-10-14 12:24 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ documentation updates; chg mfd_reg params to table_reg; use MFD_* return
+ codes instead of SNMP_*; no per node code in table undo_setup (will be in
+ new per node undo_setup); update for renamed commit mode names
+
+2003-10-14 12:20 rstory
+
+ * local/mib2c-conf.d/syntax-DateAndTime-readme.m2i:
+
+ indent to match other readmes
+
+2003-10-14 12:18 rstory
+
+ * local/mib2c-conf.d/m2c_setup_table.m2i:
+
+ rename m2c_table_writable to m2c_table_settable (consistent w/node.settable);
+ base m2c_table_row_creation on new function table_has_create; new
+ m2c_table_external_indexes base on new function count_external_indexes
+
+2003-10-14 12:15 rstory
+
+ * local/mib2c-conf.d/details-table.m2i:
+
+ remove unused lines; add oid length in output
+
+2003-10-14 12:14 rstory
+
+ * local/mib2c-conf.d/default-mfd-top.m2c:
+
+ only set defaults if value is empty
+
+2003-10-14 11:48 rstory
+
+ * snmplib/container_iterator.c:
+
+ if sorted, skip iteration on find first; add new reuse param to save_pos
+
+2003-10-14 11:38 rstory
+
+ * agent/mibgroup/agentx/agentx_config.c:
+
+ log each agentxperms part separtely, so as not to crash if any of the optional
+ items are left out; update help to show that optional parms must be in order
+
+2003-10-14 11:18 rstory
+
+ * local/mib2c:
+
+ change counter 64 type from 'counter64' to 'U64', since the former can't be
+ used as a variable declaration type; process $HOME/.snmp/mib2c.conf, if it
+ exists; new foreach internalindex and externalindex; new sub table_has_create
+ and count_external_indexes
+
+2003-10-14 09:49 rstory
+
+ * include/net-snmp/library/snmp_assert.h:
+
+ don't require DEBUG dfine for asserts; new logic: use assert if
+ NETSNMP_USE_ASSERT defines. otherwise, failed asserts will use snmp_log
+ to log a message (unless SNMP_NO_DEBUGGING is defined).
+
+2003-10-14 09:45 rstory
+
+ * agent/helpers/table_mfd.c,
+ include/net-snmp/agent/table_mfd.h:
+
+ update for renamed modes; chg callback param to use new mfd_pdu_ctx; don't
+ split callbacks into two structures; define mfd specific error codes as a
+ subset of existing error codes; add documentation; remove table registration
+ from registration param list, since it's in the mfd reg obj; handle get request
+ split into object_lookup and get values; only call next handler if next handler
+ has access method; tweak lookup params: return error code and set found row
+ in new pdu ctx param
+
+2003-10-14 09:35 rstory
+
+ * include/net-snmp/library/container_iterator.h:
+
+ add reuse flag to ctx dup params
+
+2003-10-14 09:25 rstory
+
+ * include/net-snmp/agent/snmp_agent.h:
+
+ add mode msg defines for baby step modes; simplify mode test macros; add
+ next_mode to agent_request_info
+
+2003-10-14 09:24 rstory
+
+ * include/net-snmp/library/snmp.h:
+
+ add internal msg defines for baby step modes; renumber get stash mode; fix typo
+ in comment; reserve modes < 128 for set processing to simplify mode tests
+
+2003-10-14 09:20 rstory
+
+ * include/net-snmp/agent/baby_steps.h:
+
+ rename a few modes
+
+2003-10-14 09:20 rstory
+
+ * agent/helpers/baby_steps.c:
+
+ update for renamed modes; add mode map for get-requests as well
+
+2003-10-14 09:19 rstory
+
+ * agent/snmpd.c:
+
+ const correctness
+
+2003-10-14 09:18 rstory
+
+ * agent/snmp_agent.c:
+
+ remove ifdef'd code after restoring some of it; update new reqinfo ptr in
+ requests; fix enless loop; fix typos in asserts
+
+2003-10-14 09:15 rstory
+
+ * net-snmp-config.in:
+
+ check for relative path to src dir for build-dir checks
+
+2003-10-14 06:29 rstory
+
+ * agent/: Makefile.in (V5-0-patches.3), Makefile.in:
+
+ don't leave possibly empty configure @var@ on continuation line by itself
+
+2003-10-08 22:12 hardaker
+
+ * agent/mibgroup/mibII/: var_route.c (V5-0-patches.2), var_route.c
+:
+
+ patch from Johannes Schmidt-Fischer to fix HPUX 11
+
+2003-10-08 14:08 rstory
+
+ * agent/helpers/table.c:
+
+ add detail on improperyly registered table message, and chg to ERR (from INFO);
+ fix valid column search for ranges; go straight to first row if no indexes
+
+2003-10-07 15:10 rstory
+
+ * agent/mibgroup/agentx/agentx_config.c:
+
+ more useful help text for agentxperms
+
+2003-10-07 14:43 rstory
+
+ * agent/snmpd.c:
+
+ fix logic check of DS_AGENT_QUIT_IMMEDIATELY so that parent and child don't
+ both try to become the master agent. Logic seems backwards to me - do we have
+ all these DS vars document somewhere?
+
+2003-10-07 14:39 rstory
+
+ * snmplib/system.c:
+
+ netsnmp_daemonize: init local var; chg return code to be fork result; add docs
+
+2003-10-07 07:00 hardaker
+
+ * local/: mib2c (V5-0-patches.3), mib2c:
+
+ Check for ^-S instead of -S, as reported by Jean-Marc Ranger on -users
+
+2003-10-07 03:13 dts12
+
+ * local/mib2c:
+
+ There are no statistics printed, so there's no point in having
+ a flag to turn them off.
+
+2003-10-04 11:01 rstory
+
+ * dist/net-snmp.spec:
+
+ merge changes from 5.0 patches branch; fix to build without requiring arguments;
+ separate embedded perl and perl modules options; fix fix for init.d script
+ for non-/usr/local installation
+
+2003-10-03 07:43 rstory
+
+ * agent/mibgroup/examples/ucdDemoPublic.conf:
+
+ change v1 demo community to match what is actualt configured on the
+ soon-to-be-reopened test.net-snmp.org
+
+2003-10-02 19:30 rstory
+
+ * agent/mibgroup/examples/ucdDemoPublic.conf:
+
+ add explanatory text and lines/arrows showing relationship between entries;
+ add createUser lines, w/note explaining they might be better suited for
+ the persistentdir snmpd.conf for security purposes.
+
+2003-10-02 11:04 hardaker
+
+ * man/mib2c.1.def:
+
+ document the -I switch
+
+2003-10-02 10:54 hardaker
+
+ * Makefile.rules, Makefile.top, NEWS, configure
+, configure.in, agent/Makefile.in,
+ apps/Makefile.in, local/Makefile.in, man/Makefile.in
+, mibs/Makefile.in, testing/Makefile.in:
+
+ Robert told me to keep going, so I added support for a --with-install-prefix
+ flag to configure (and thus a INSTALL_PREFIX make variable as well).
+
+2003-10-01 16:30 hardaker
+
+ * Makefile.in, Makefile.rules, Makefile.top,
+ NEWS, configure, configure.in,
+ agent/Makefile.in, apps/Makefile.in, local/Makefile.in
+, man/Makefile.in, mibs/Makefile.in:
+
+ Support for "make uninstall"
+
+2003-10-01 14:51 hardaker
+
+ * apps/snmptranslate.c:
+
+ Added -L support for output logging.
+
+2003-10-01 14:49 hardaker
+
+ * agent/mibgroup/disman/mteEventTable.h:
+
+ updated prototypes to match earlier trap -> notification string replacements.
+
+2003-09-30 17:20 rstory
+
+ * local/mib2c-conf.d/syntax-RowStatus-varbind-validate.m2i:
+
+ syntax specific varbind validation
+
+2003-09-30 17:20 rstory
+
+ * local/mib2c-conf.d/: syntax-RowStatus-dependencies.m2i,
+ syntax-StorageType-dependencies.m2i:
+
+ syntax specific dependency checks
+
+2003-09-30 17:19 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-readme.m2i:
+
+ fix typos
+
+2003-09-30 17:19 rstory
+
+ * local/mib2c-conf.d/: syntax-DateAndTime-get.m2i,
+ syntax-DateAndTime-readme.m2i:
+
+ set emags tag for c; update variable name
+
+2003-09-30 17:18 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ set emags tag for c; add/correct doxygen style docs; new validate_index,
+ undo_setup, reversible_commit, final_commit
+
+2003-09-30 17:17 rstory
+
+ * local/mib2c-conf.d/parent-dependencies.m2i:
+
+ set emags tag for c; in check_dependencies, remove non-existant param and
+ include any node specific syntax dependencies
+
+2003-09-30 17:15 rstory
+
+ * local/mib2c-conf.d/node-varbind-validate.m2i:
+
+ new include to do basicy syntax validation against an incoming varbind
+
+2003-09-30 17:14 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-body.m2i:
+
+ add/correct doxygen style docs in comments; change example from linked list
+ to flat file; use var for func params so it's easy to change; check new
+ m2c_include_examples before including example code;
+
+2003-09-30 17:12 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-header.m2i:
+
+ add/correct doxygen style docs in comments; change example from linked list
+ to flat file; use var for func params so it's easy to change
+
+2003-09-30 17:11 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-interface.m2i
+:
+
+ set emacs tag to c; add/correct doxygen style docs in comments; use local
+ static variable_list for index to oid conversion; free memory used in that
+ conversion, eventually; don't ignore rc from build_oid_noalloc here (return
+ it and let someone else ignore it); prefix some internal functions names w/'_';
+ wrapper around get_data to allocate new context
+
+2003-09-30 17:08 rstory
+
+ * local/mib2c-conf.d/: node-get.m2i, node-set.m2i:
+
+ set emacs tag to c; add/correct doxygen style docs in comments
+
+2003-09-30 17:06 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ new mfd_base_params var so it's easy to change params; chg comments so that
+ indent won't not indent; don't include some prototypes here if the function
+ is in *_interfaces; new pre/post request functions; moved bulk of table
+ init into interfaces, just a little function setup here
+
+2003-09-30 16:54 rstory
+
+ * local/mib2c-conf.d/mfd-makefile.m2m:
+
+ set emacs mode to Makefile; turn off strict token checks til wes gets @ escape;
+ expand deps includes since $(x:.c=.deps) isn't portable
+
+2003-09-30 16:46 rstory
+
+ * local/mib2c:
+
+ only put MIB2C_DIR env var in search path if it isn't empty
+
+2003-09-30 16:45 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ create new $name_interface.h header; move table initialization here; prefix a
+ bunch of interface functions w/'_'; use new m2c_node_summary; use new
+ m2c_node_var_* variables; change some accessible tests to settable tests; use
+ new node-varbind-validate include; always call user $node_check_value; new
+ functions to check new index syntax; new _set_values, _undo_setup and
+ _undo_values to call user functions
+
+2003-09-30 16:36 rstory
+
+ * local/mib2c-conf.d/mfd-data-set.m2c:
+
+ set emacs mode to c; tweak processing msgs; always include parent-set; move
+ parent dependencies to bottom of file; add $node_check_index
+
+2003-09-30 16:25 rstory
+
+ * local/mib2c-conf.d/mfd-data-get.m2c:
+
+ tweak processing msgs
+
+2003-09-30 16:23 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ set emacs mode to c; add some sanity checks; set up new $m2c_enum_mask,
+ $m2c_node_var_val, $m2c_node_var_ref, $m2c_node_var_val_ptr, $m2c_node_summary
+
+2003-09-30 16:18 rstory
+
+ * local/mib2c-conf.d/generic-data-allocate.m2i:
+
+ set emacs mode to c; remove unused create_undo_context
+
+2003-09-30 16:15 rstory
+
+ * local/mib2c-conf.d/: generic-ctx-copy.m2i,
+ generic-ctx-get.m2i, generic-ctx-set.m2i,
+ m2c_setup_table.m2i:
+
+ set emacs mode to c; suck 'ctx->' or 'ctx.' into $m2c_data_item
+
+2003-09-30 16:11 rstory
+
+ * local/mib2c-conf.d/details-table.m2i:
+
+ set emacs mode to c
+
+2003-09-30 16:10 rstory
+
+ * local/mib2c-conf.d/details-enums.m2i:
+
+ set emacs mode to c; generate define for mask of all bits
+
+2003-09-30 14:27 hardaker
+
+ * local/mib2c-conf.d/mfd-readme.m2c:
+
+ xxx tagging.
+
+2003-09-30 14:26 hardaker
+
+ * local/mib2c-conf.d/mfd-makefile.m2m:
+
+ create the Makefile to either reference a Net-SNMP source dir or not
+ (and require gnu-make or not).
+
+2003-09-30 06:50 rstory
+
+ * local/mib2c:
+
+ new flag/token strict_unk_token will abort on unknow @token
+
+2003-09-30 06:38 rstory
+
+ * include/net-snmp/library/check_varbind.h:
+
+ add netsnmp_check_vb_size, netsnmp_check_vb_size_range
+ and netsnmp_check_vb_rowstatus_value
+
+2003-09-30 06:37 rstory
+
+ * snmplib/check_varbind.c:
+
+ more null ptr checks; add netsnmp_check_vb_size, netsnmp_check_vb_size_range
+ and netsnmp_check_vb_rowstatus_value
+
+2003-09-30 06:34 rstory
+
+ * local/mib2c-conf.d/: generic-data-context.m2i,
+ generic-get-char.m2i, generic-get-decl-bot.m2i,
+ generic-get-decl.m2i, generic-get-long.m2i,
+ generic-get-oid.m2i, generic-header-bottom.m2i,
+ generic-header-top.m2i, generic-source-includes.m2i,
+ generic-table-indexes.m2i, generic-value-map-reverse.m2i
+, generic-value-map.m2i, m2c_setup_enum.m2i,
+ mfd-data-access.m2c, node-storage.m2i,
+ syntax-InetAddress-get.m2i, syntax-InetAddress-set.m2i,
+ syntax-InetAddressType-get.m2i,
+ syntax-InetAddressType-set.m2i, syntax-RowStatus-get.m2i
+, syntax-TestAndIncr-get.m2i:
+
+ set emacs mode to c
+
+2003-09-30 06:19 rstory
+
+ * local/mib2c-conf.d/details-node.m2i:
+
+ set emacs mode to c; fix generated comment
+
+2003-09-30 06:18 rstory
+
+ * local/mib2c-conf.d/default-mfd-top.m2c:
+
+ new flag for including example code
+
+2003-09-29 22:45 hardaker
+
+ * local/mib2c-conf.d/: mfd-access-unsorted-external-readme.m2i
+, mfd-readme.m2c:
+
+ Misc updates for readability, etc.
+
+2003-09-29 16:43 hardaker
+
+ * local/mib2c-conf.d/mfd-readme.m2c:
+
+ Initial word smithing of the global README.
+
+2003-09-29 15:41 hardaker
+
+ * local/mib2c:
+
+ Support a -I switch to specify config file search paths.
+
+2003-09-29 15:30 hardaker
+
+ * local/mib2c.iterate_access.conf:
+
+ missing some end statements
+
+2003-09-29 14:27 hardaker
+
+ * NEWS:
+
+ reference new disman features
+
+2003-09-29 14:25 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ document (poorly of course) new monitoring features.
+
+2003-09-29 14:16 hardaker
+
+ * agent/mibgroup/disman/mteEventTable.c:
+
+ - trapEvent -> notificationEvent
+
+2003-09-29 14:13 hardaker
+
+ * agent/mibgroup/disman/mteEventTable.c:
+
+ - linkUpDownTraps -> linkUpDownNotifications
+
+2003-09-29 14:09 hardaker
+
+ * agent/mibgroup/disman/: mteEventTable.c, mteEventTable.h
+, mteTriggerTable.c:
+
+ - A new snmpd.conf token (trapEvent) for generating traps of any kind
+ on a monitoring event and a -e switch to monitor token to reference it.
+ - A new snmpd.conf token linkUpDownTraps to enable linkUp/linkDown
+ traps using the above piece.
+
+2003-09-29 07:00 hardaker
+
+ * dist/snmpd-init.d:
+
+ /etc/init.d -> /etc/rc.d/init.d
+
+2003-09-28 21:58 hardaker
+
+ * include/net-snmp/agent/snmp_agent.h:
+
+ remove comment in comment problem.
+
+2003-09-28 19:58 hardaker
+
+ * man/snmp_trap_api.3.def:
+
+ Added Dave's really coll ascii diagram from -users explaining how
+ traps are sent to their destinations over any SNMP version.
+
+2003-09-28 19:39 hardaker
+
+ * agent/mibgroup/examples/notification.c:
+
+ Added Dave's really coll ascii diagram from -users explaining how
+ traps are sent to their destinations over any SNMP version.
+
+2003-09-26 22:29 hardaker
+
+ * agent/agent_trap.c:
+
+ properly malloc the enterprise pointer before using it.
+
+2003-09-26 21:27 hardaker
+
+ * perl/SNMP/: SNMP.xs (V5-0-patches.4), SNMP.xs:
+
+ correct length in string fixed string comparison
+
+2003-09-26 16:19 hardaker
+
+ * dist/net-snmp.spec:
+
+ misc install fixes (mostly perl) and one perl patch.
+
+2003-09-26 10:31 hardaker
+
+ * perl/SNMP/: SNMP.xs (V5-0-patches.3), SNMP.xs:
+
+ fix useNumeric once and for all (maybe)
+
+2003-09-20 22:38 hardaker
+
+ * agent/mibgroup/host/: hr_swrun.c (V5-0-patches.1), hr_swrun.c
+:
+
+ Patch #809243 for bug #808920 from Bob R. for fixing process name discrepency (ps vs SNMP)
+
+2003-09-20 22:29 hardaker
+
+ * agent/helpers/: instance.c (V5-0-patches.1), instance.c:
+
+ patch #807414 for bug #757923 by Bob Rowlands to fix int watching on 64 bit systems
+
+2003-09-17 20:16 rstory
+
+ * agent/helpers/table_mfd.c:
+
+ use net data_list_add_data
+
+2003-09-17 17:48 rstory
+
+ * include/net-snmp/agent/table_mfd.h:
+
+ change mfd api parameters
+
+2003-09-17 17:47 rstory
+
+ * agent/snmp_agent.c:
+
+ use new inline macros; always create agent_req_info when creating asp; move
+ getbulk reorder code into an inline function for code readability; deprecate
+ netsnmp_set_request_error and netsnmp_set_mode_request_error in favor
+ of new netsnmp_request_set_error; deprecate netsnmp_set_all_requests_error in
+ favor of new netsnmp_request_set_error_all; try and return useful error codes
+
+2003-09-17 17:29 rstory
+
+ * include/net-snmp/library/snmp-tc.h:
+
+ make sure params are unique
+
+2003-09-17 17:24 rstory
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ autoheader update for new acconfig.h
+
+2003-09-17 17:07 rstory
+
+ * local/mib2c-conf.d/m2c_setup_enum.m2i:
+
+ setup for enum vars
+
+2003-09-17 17:05 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ remove create_undo_context (assuming undo_context == data_context for now);
+ fix log level macro; allocate_data_context moved elsewhere
+
+2003-09-17 17:03 rstory
+
+ * local/mib2c-conf.d/parent-dependencies.m2i:
+
+ fix paramater type;
+
+2003-09-17 16:57 rstory
+
+ * local/mib2c-conf.d/mfd-makefile.m2m:
+
+ don't need source dir if we use new net-snmp-config --build-includes; add
+ build/src dir -I paths before base cflags
+
+2003-09-17 16:55 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ use new inline macros; add object_syntax_check processing;
+
+2003-09-17 16:54 rstory
+
+ * local/mib2c-conf.d/mfd-data-set.m2c:
+
+ only include parent-set if data context is generated & allocated
+
+2003-09-17 16:50 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ per node setup for enums
+
+2003-09-17 16:47 rstory
+
+ * local/mib2c-conf.d/: generic-get-char.m2i,
+ generic-value-map.m2i:
+
+ new file to setup enums vars
+
+2003-09-17 16:43 rstory
+
+ * local/mib2c-conf.d/generic-table-enums.m2c:
+
+ new file to generate enums header file
+
+2003-09-17 16:40 rstory
+
+ * local/mib2c-conf.d/: generic-ctx-get.m2i,
+ generic-ctx-set.m2i, generic-data-context.m2i,
+ m2c_setup_table.m2i, mfd-access-unsorted-external-body.m2i
+:
+
+ new m2c_data_item for getting to data items, so includes don't need to know
+ whether or not to use data->item or data.item.
+
+2003-09-17 16:34 rstory
+
+ * local/mib2c-conf.d/details-enums.m2i:
+
+ move some setup for enums to m2c_setup_node and new m2c_setup_enum; add some
+ comments and examples to document process flow; move some comments to the
+ top of the header instead for each node; make sure internal mapping
+ defines are unique per node
+
+2003-09-17 16:32 rstory
+
+ * snmplib/data_list.c:
+
+ use doxygen deprecated tag instead of simple comments
+
+2003-09-17 16:29 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c,
+ include/net-snmp/library/container.h:
+
+ use new inline macros; change FIRST to use find_next instead of find; add
+ func pointer for item memory free
+
+2003-09-17 16:11 rstory
+
+ * include/net-snmp/library/check_varbind.h:
+
+ prototype for new check_vb_type
+
+2003-09-17 13:09 rstory
+
+ * include/net-snmp/agent/snmp_agent.h:
+
+ add comments; add agent_request_info ptr to request_info; add
+ netsnmp_request_set_error; deprecate netsnmp_set_request_error and
+ netsnmp_set_mode_request_error; use new inline macros; remove unused pdu
+ pointer from agent_request_info
+
+2003-09-17 13:05 rstory
+
+ * agent/helpers/table_mfd.c:
+
+ for set, save row in first request; chg mfd param list; don't call later
+ modes unless row exists; call lower handlers;
+
+2003-09-17 12:34 rstory
+
+ * include/net-snmp/library/data_list.h, snmplib/data_list.c
+:
+
+ use new inline macros; add data_list_add_node, data_list_add_data
+
+2003-09-17 12:08 rstory
+
+ * agent/agent_handler.c, agent/agent_registry.c,
+ agent/helpers/table.c, agent/helpers/table_data.c,
+ agent/helpers/table_dataset.c,
+ include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h:
+
+ use new inline macros
+
+2003-09-17 12:02 rstory
+
+ * include/net-snmp/library/snmp-tc.h:
+
+ new netsnmp_dateandtime_set_buf_from_vars
+
+2003-09-17 11:58 rstory
+
+ * snmplib/snmp-tc.c:
+
+ new netsnmp_dateandtime_set_buf_from_vars
+
+2003-09-17 09:49 rstory
+
+ * snmplib/container.c:
+
+ use new inline macro
+
+2003-09-17 09:49 rstory
+
+ * snmplib/check_varbind.c:
+
+ use new inline macros; new check_vb_type
+
+2003-09-17 09:48 rstory
+
+ * snmplib/.cvsignore:
+
+ ignore binary array test binary
+
+2003-09-17 09:46 rstory
+
+ * win32/: config.h, net-snmp/net-snmp-config.h:
+
+ update for new inline macros (I think microsloth supports inline)
+
+2003-09-17 09:43 rstory
+
+ * include/net-snmp/system/: aix.h, hpux.h, irix.h
+, osf5.h:
+
+ turn off net-snmp use of inline for non-gcc compilers (don't undef inline)
+
+2003-09-17 09:38 rstory
+
+ * acconfig.h:
+
+ define (and comment) macros for handling inline use in net-snmp
+
+2003-09-17 09:37 rstory
+
+ * net-snmp-config.in:
+
+ mv build dir check to subroutine; add missing NSC_SRC_LIBDIRS; add new
+ --build-includes
+
+2003-09-17 09:33 rstory
+
+ * configure.in:
+
+ add -Winline to dev flags
+
+2003-09-17 09:33 rstory
+
+ * Makefile.in:
+
+ give reason when re-running config.status
+
+2003-09-16 17:25 hardaker
+
+ * README:
+
+ peter hicks
+
+2003-09-16 17:24 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ Patch from Peter Hicks for a new get_table function
+
+2003-09-16 17:09 hardaker
+
+ * snmplib/: snmpUDPIPv6Domain.c (V5-0-patches.1),
+ snmpUDPIPv6Domain.c:
+
+ Patch from Katsuhisa ABE from -users to fix a masking problem
+
+2003-09-12 12:43 hardaker
+
+ * dist/: RELEASE-INSTRUCTIONS, net-snmp.spec:
+
+ - minor changes for improved perl Makefile.PL argument support (>= 5.0.9)
+
+2003-09-12 11:03 hardaker
+
+ * Makefile.in (V5-0-patches.2), Makefile.in:
+
+ Patch for --with-perl-modules extra argument support
+
+2003-09-12 06:28 rstory
+
+ * configure:
+
+ configure to match config.in
+
+2003-09-12 06:25 rstory
+
+ * configure.in:
+
+ fix mis-matched parens
+
+2003-09-11 15:50 rstory
+
+ * agent/snmpd.c:
+
+ use new netsnmp_daemonize library call
+
+2003-09-11 15:48 rstory
+
+ * local/mib2c.access_functions.conf:
+
+ move comments about routines closer to routines to reduce confusion
+
+2003-09-11 15:47 rstory
+
+ * local/mib2c:
+
+ add @debug@ token to turn debug on/off; print locations for more warnings/errors
+
+2003-09-11 15:45 rstory
+
+ * local/mib2c-conf.d/default-mfd-top.m2c:
+
+ defaults for two new flags: readme_verbose and data_transient
+
+2003-09-11 15:44 rstory
+
+ * local/mib2c-conf.d/syntax-DateAndTime-readme.m2i:
+
+ readme for DateAndTime
+
+2003-09-11 15:44 rstory
+
+ * local/mib2c-conf.d/syntax-DateAndTime-get.m2i:
+
+ add buf len param to netsnmp_dateandtime_set
+
+2003-09-11 15:33 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ un-comment include of enums header; move all data context processing into
+ include; don't assume pointers to data/undo contexts; only define prototype
+ for allocate_data if needed; run enum header conf file; run new readme conf file
+
+2003-09-11 14:12 rstory
+
+ * net-snmp-config.in:
+
+ add build-lib-deps
+
+2003-09-11 14:04 rstory
+
+ * local/mib2c-conf.d/mfd-makefile.m2m:
+
+ open file earlier; use new var for default NETSNMPDIR; don't assume NETSNMPDIR
+ is sourcedir; use new net-snmp-config options for get lib dirs/deps
+
+2003-09-11 13:58 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ include new generic-data-allocate if data_allocate set and data_context is
+ generated; move table_(allocate|release)_ctx here
+
+2003-09-11 13:55 rstory
+
+ * local/mib2c-conf.d/generic-data-allocate.m2i:
+
+ new file for allocate/release of data context
+
+2003-09-11 13:54 rstory
+
+ * local/mib2c-conf.d/mfd-data-get.m2c:
+
+ move data allocate/release to it's own include; only include it if data_allocate
+ set and data_context isn't generated
+
+2003-09-11 13:52 rstory
+
+ * local/mib2c-conf.d/: mfd-access-unsorted-external-readme.m2i
+, mfd-readme.m2c:
+
+ new readme generation
+
+2003-09-11 13:52 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-interface.m2i
+:
+
+ wrap get_first/get_next so we can move index2oid here and make it static
+
+2003-09-11 13:51 rstory
+
+ * local/mib2c-conf.d/mfd-access-unsorted-external-body.m2i:
+
+ only generate tabe_get_data for transient data; move index2oid into interface
+ code; gen different code based on data transient setting
+
+2003-09-11 13:44 rstory
+
+ * local/mib2c-conf.d/m2c_setup_table.m2i:
+
+ default to generated, non-allocated data_context
+
+2003-09-11 13:40 rstory
+
+ * local/mib2c-conf.d/generic-value-map-reverse.m2i:
+
+ fix renamed var
+
+2003-09-11 13:40 rstory
+
+ * local/mib2c-conf.d/generic-table-oids.m2c:
+
+ don't include enum stuff in oid header
+
+2003-09-11 13:39 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes.m2i:
+
+ remove unused owner ptr
+
+2003-09-11 13:39 rstory
+
+ * local/mib2c-conf.d/generic-get-decl-bot.m2i:
+
+ fix len_ptr variable name
+
+2003-09-11 13:39 rstory
+
+ * local/mib2c-conf.d/generic-get-char.m2i:
+
+ define IS_SET_* macros here instead of in header
+
+2003-09-11 13:37 rstory
+
+ * local/mib2c-conf.d/generic-data-context.m2i:
+
+ merge data struct back into single typedef; don't generate struct if user
+ specified existing struct; add * in typedef if data_allocate set
+
+2003-09-11 13:35 rstory
+
+ * local/mib2c-conf.d/generic-ctx-copy.m2i:
+
+ remove example start/end (parent decides that)
+
+2003-09-11 13:35 rstory
+
+ * local/mib2c-conf.d/details-table.m2i:
+
+ more distinctive separator before tables
+
+2003-09-11 13:18 rstory
+
+ * local/mib2c-conf.d/details-enums.m2i:
+
+ remove IS_SET_* macros; tweak conditions for generating enums and mapping
+ macros
+
+2003-09-11 13:09 rstory
+
+ * snmplib/system.c:
+
+ new netsnmp_daemonize
+
+2003-09-11 13:05 rstory
+
+ * include/net-snmp/library/system.h:
+
+ reduce scope of sun's copyright claim; bail if net-snmp-config not included;
+ prototype for new netsnmp_daemonize
+
+2003-09-11 12:57 rstory
+
+ * agent/mibgroup/examples/netSnmpHostsTable_access.c:
+
+ fix comment typo; document possible race condition and move one line to
+ make window smaller
+
+2003-09-11 12:55 rstory
+
+ * net-snmp-config.in:
+
+ use vars to make it easier to understand what flags are what in generated
+ version; group similar options together; add options to to get source
+ directory and lib path in build dir; add --base-subagent-libs (no lib path),
+ --libdir
+
+2003-09-11 08:33 rstory
+
+ * configure:
+
+ configure to match config.in
+
+2003-09-11 08:26 rstory
+
+ * configure.in:
+
+ trap bad options --with-modules or --with-out-modules
+
+2003-09-05 23:37 hardaker
+
+ * README (V5-0-patches.7), README:
+
+ added Bob Rowlands
+
+2003-09-05 22:36 hardaker
+
+ * agent/helpers/: table.c, table_iterator.c (V5-0-patches.[2,2]),
+ table.c, table_iterator.c:
+
+ Patch #800561 from Bob Rowlands to fix 64bit problems (-> size_t)
+
+2003-09-05 22:30 hardaker
+
+ * agent/mibgroup/agentx/: protocol.c (V5-0-patches.1), protocol.c
+:
+
+ Patch #800485 from Bob Rowlands for 64 bit agentx problems
+
+2003-09-05 22:16 hardaker
+
+ * snmplib/: snmpusm.c (V5-0-patches.1), snmpusm.c:
+
+ Patch #792008 from Thomas? to allow usmUser tokens to override previous entries
+
+2003-09-05 22:04 hardaker
+
+ * man/: mib2c.1.def, snmpcmd.1.def, snmpdelta.1, snmpdf.1,
+ snmpnetstat.1, snmpstatus.1.def, snmptable.1.def, snmptest.1.def,
+ snmptranslate.1.def (V5-0-patches.[2,2,1,1,1,1,1,1,1]), mib2c.1.def
+, netsnmp_agent.3, netsnmp_bulk_to_next.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_handler.3, netsnmp_instance.3,
+ netsnmp_library.3, netsnmp_mib_utilities.3,
+ netsnmp_mode_end_call.3, netsnmp_multiplexer.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_methods.3, netsnmp_oid_stash.3
+, netsnmp_old_api.3, netsnmp_read_only.3,
+ netsnmp_scalar.3, netsnmp_serialize.3,
+ netsnmp_set_data.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_todo.3, netsnmp_util.3, netsnmp_watcher.3
+, snmpcmd.1.def, snmpdelta.1, snmpdf.1,
+ snmpnetstat.1, snmpstatus.1.def, snmptable.1.def,
+ snmptest.1.def, snmptranslate.1.def:
+
+ Patch #789485 from Bob Rowlands for a long needed overhaul of the manual pages.
+
+2003-09-05 21:21 hardaker
+
+ * Makefile.in, configure, configure.in (V5-0-patches.[9,9,9]),
+ Makefile.in, configure, configure.in:
+
+ Add optional arguments to the --with-perl-modules flag for passing down
+
+2003-09-05 16:56 hardaker
+
+ * agent/snmp_agent.c, include/net-snmp/agent/snmp_agent.h
+ (V5-0-patches.[4,2]), agent/snmp_agent.c,
+ include/net-snmp/agent/snmp_agent.h:
+
+ - fix a getbulk bug pointed out by Jurij Smakov.
+
+2003-09-05 06:25 dts12
+
+ * include/net-snmp/agent/agent_trap.h, agent/agent_trap.c
+:
+
+ Re-written internals of agent trap generation.
+ Work with separate v1 and v2 template PDUs, and separate
+ (standalone) routines to convert between them, following RFC 2576,
+ Hopefully a somewhat cleaner approach than before,
+
+2003-09-02 23:09 hardaker
+
+ * dist/net-snmp.spec:
+
+ - new spec to include building the perl modules.
+ - done in sort of a temporary hacky way till proper support is put
+ directly into the master Makefile to support optional arguments
+ being passed to the Makefile.PL script.
+
+2003-09-02 23:07 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ update to include RPM building instructions.
+
+2003-09-02 23:07 hardaker
+
+ * dist/Makefile:
+
+ Modifications to support perl and building source and binary at once.
+
+2003-09-02 14:53 rstory
+
+ * dist/nsb-nightly:
+
+ add option to not source ~/.nsb-nightly; don't remobe build dir on success here
+
+2003-09-02 14:52 rstory
+
+ * dist/nsb-functions:
+
+ allow env vars to override defaults for more options; rename DATE to
+ NSB_DATE; only scp make files from this run; add uname to output
+
+2003-09-01 16:45 hardaker
+
+ * Makefile.in:
+
+ prune dist/rpm from etags results
+
+2003-08-28 02:02 dts12
+
+ * apps/snmptrapd.c:
+
+ A configure token to control the addresses/ports that trapd listens on.
+
+2003-08-22 02:38 dts12
+
+ * perl/SNMP/SNMP.pm:
+
+ Document the default version change.
+
+2003-08-21 14:28 rstory
+
+ * dist/cvsup:
+
+ make upload tarball name based on date
+
+2003-08-21 01:55 dts12
+
+ * agent/snmp_agent.c:
+
+ If a GETBULK hits the end of the MIB tree, make sure any empty varbinds
+ are returned as 'endOfMibView' exceptions, rather than (.0.0 = NULL)
+
+ If *all* the repeating varbinds hit the end of the MIB tree, truncate
+ after the first full empty row.
+
+2003-08-21 01:50 dts12
+
+ * agent/snmp_agent.c:
+
+ If there's a mixture of "still active" repetitions, and ones that have
+ already reached the end of the OID tree, then some of the varbind structures
+ may well be NULL.
+ It's preferable to skip these, and continue processing everything else,
+ rather than crash the server:-)
+
+2003-08-21 01:29 dts12
+
+ * acconfig.h, configure, configure.in,
+ agent/mibgroup/smux/smux.c,
+ include/net-snmp/net-snmp-config.h.in:
+
+ Default to global SMUX access (as currently), but supply a configure
+ option to set default SMUX access to be localhost only.
+ Happy now?
+
+2003-08-21 01:24 dts12
+
+ * acconfig.h:
+
+ Ensure that the SNMP_TRANSPORT_CALLBACK_DOMAIN token remains available
+ when configure system files are recreated.
+
+2003-08-20 02:39 dts12
+
+ * agent/snmp_agent.c:
+
+ Expand the description of the post-BULK re-organisation, so it's somewhat
+ clearer what's happening. It took me best part of an hour (plus inserting
+ assorted debugging statements) to make sense of this!
+
+2003-08-20 02:36 dts12
+
+ * agent/agent_handler.c:
+
+ Register MIBs using the lowest-level available name, rather than the
+ first handler in the chain. This no longer results in the whole MIB
+ registry being identified as "bulk_to_get"!
+
+2003-08-20 02:26 dts12
+
+ * agent/mibgroup/ucd-snmp/: extensible.c, extensible.h:
+
+ Unregister (relocatable) extensions when re-reading the configuration file.
+ This allows "exec" lines to be re-loaded without causing the agent to crash!
+
+2003-08-19 08:12 dts12
+
+ * perl/SNMP/SNMP.xs:
+
+ Better fix for Bug #630348. Treat all DBPRT calls consistently, and
+ make sure the PerlIO_printf call is passed the correct parameter list.
+
+2003-08-19 07:31 dts12
+
+ * perl/SNMP/SNMP.xs:
+
+ Whatever the cause of bug #630348 was, this isn't the answer.
+ With 'PerlIO_fprintf', it doesn't compile! More investigation needed.
+
+2003-08-19 01:56 dts12
+
+ * agent/mibgroup/smux/smux.c:
+
+ Allow the (compile-time) option of restoring global access to SMUX services.
+ If the consensus is that this should be the default (as currently), then
+ I've no strong feelings either way. Feel free to adjust accordingly.
+
+2003-08-19 01:53 dts12
+
+ * agent/helpers/cache_handler.c:
+
+ Automatically release expired cache resources.
+
+2003-08-19 01:52 dts12
+
+ * agent/helpers/cache_handler.c:
+
+ Invalidate the cache on (successful) SET requests.
+ This is currently done regardless - it would be sensible to make it
+ configurable on a per-cache basis.
+
+2003-08-18 15:14 rstory
+
+ * snmplib/container_iterator.c:
+
+ comment out code that shouldn't have been checked in yet
+
+2003-08-18 15:13 rstory
+
+ * snmplib/container.c:
+
+ update for correct method to cleanup container factory list; remove
+ release_if_top and _ba_* functions
+
+2003-08-18 15:11 rstory
+
+ * include/net-snmp/library/container.h:
+
+ update prototype for correct function to cleanup container factory list; fix
+ comment typos; remove release_if_top prototype and call in CONTAINER_FREE
+
+2003-08-18 15:09 rstory
+
+ * agent/snmp_vars.c:
+
+ call correct function to cleanup container factory list
+
+2003-08-18 15:08 rstory
+
+ * agent/agent_handler.c:
+
+ document segfault location for future fixing
+
+2003-08-18 09:12 dts12
+
+ * agent/mibgroup/agent/nsCache.c:
+
+ Bring into line with new cache release API definition.
+
+2003-08-18 08:49 rstory
+
+ * agent/helpers/table_mfd.c:
+
+ source for table_mfd
+
+2003-08-18 08:30 hardaker
+
+ * include/net-snmp/agent/stash_cache.h:
+
+ opps. missed the header
+
+2003-08-18 08:04 rstory
+
+ * include/net-snmp/agent/table_mfd.h:
+
+ don't reference non-existent file
+
+2003-08-18 08:01 rstory
+
+ * include/net-snmp/agent/table_mfd.h:
+
+ header for table_mfd
+
+2003-08-18 06:35 rstory
+
+ * include/net-snmp/library/container_iterator.h:
+
+ header for container iterator
+
+2003-08-18 05:42 dts12
+
+ * agent/mibgroup/mibII/: icmp.c, ip.c, tcp.c,
+ tcpTable.c, udp.c, udpTable.c:
+
+ New v5-style handlers should only ever receive MODE_GET requests.
+ Log a warning for other unexpected (or unrecognised) request modes.
+
+2003-08-18 03:19 dts12
+
+ * agent/mibgroup/mibII/: icmp.c, ip.c, tcp.c,
+ tcpTable.c, udp.c, udpTable.c:
+
+ Use the new (internal) cache validity checking.
+ Qn: How can we access the request-information structure (or similar)
+ from within iterator data_point routines?
+
+2003-08-18 03:17 dts12
+
+ * agent/helpers/cache_handler.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ Provide an API for determining whether a given cache is currently valid.
+ Release old cache resources before loading the new values.
+ NB: This involves a change in the 'free' hook API.
+
+2003-08-18 03:14 dts12
+
+ * include/net-snmp/library/container.h:
+
+ The macro function definitions rely on logging routines from 'snmp_logging.c'
+ so the appropriate declarations and defined constants need to be available.
+
+2003-08-18 03:12 dts12
+
+ * include/net-snmp/agent/ds_agent.h, agent/snmp_agent.c
+, agent/mibgroup/smux/smux.c,
+ agent/mibgroup/smux/smux.h:
+
+ Support configuration of the socket address to listen for SMUX connections on.
+
+ Note: Change of behaviour - this patch defaults to listening for connections
+ from the localhost only.
+
+2003-08-18 02:55 dts12
+
+ * include/net-snmp/library/default_store.h,
+ snmplib/snmpUDPDomain.c, snmplib/snmp_api.c:
+
+ Provisional support for sending client requests from a specified interface
+ or socket address.
+ Qn: Should this be applied to TCP connections too?
+ What about other transports?
+
+2003-08-18 02:53 dts12
+
+ * include/net-snmp/library/mib.h, snmplib/mib.c:
+
+ Implement 'snprintf_description' routines,
+ to output MIB definitions to a string rather than a file.
+
+2003-08-17 16:49 rstory
+
+ * local/mib2c-conf.d/syntax-RowStatus-get.m2i:
+
+ fix hardcoded var names/constants (eek!)
+
+2003-08-17 16:47 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ rename some typedefs; add *_ref_* typedefs; make netsnmp_index first item
+ in ctx; make index local instead of ptr; run new mfd-access-*-header; add
+ some prototypes, debug msgs; update init to set up mfd_registration, container,
+ *_get_values; fix renames mfd registration routine; run new makefile and
+ subagent conf files
+
+2003-08-17 16:43 rstory
+
+ * local/mib2c-conf.d/mfd-interface.m2c:
+
+ include mfd header; new *_get_values; tweak *_get_column: include accessible
+ indexes, push var memory check up a level *_get_values (should go up one
+ more, into helper instead of generated code); run new mfd_access_*_interface
+
+2003-08-17 16:40 rstory
+
+ * local/mib2c-conf.d/mfd-data-set.m2c:
+
+ move process print after noaccess test
+
+2003-08-17 16:39 rstory
+
+ * local/mib2c-conf.d/mfd-data-get.m2c:
+
+ new *_(allocate|release)_(data|ctx); move process print after noaccess test
+
+2003-08-17 16:38 rstory
+
+ * local/mib2c-conf.d/mfd-data-access.m2c:
+
+ rename access-* to mfd-access-*
+
+2003-08-17 16:37 rstory
+
+ * local/mib2c-conf.d/generic-table-oids.m2c:
+
+ add header; include enums too
+
+2003-08-17 16:33 rstory
+
+ * local/mib2c-conf.d/: mfd-access-unsorted-external-body.m2i,
+ mfd-access-unsorted-external-header.m2i,
+ mfd-access-unsorted-external-interface.m2i, mfd-makefile.m2m
+, subagent.m2c:
+
+ new mfd data access conf files (wrap around new container iterator); new mfd
+ conf files to generate makefile/subagent main
+
+2003-08-17 16:31 rstory
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ use config.h define to temporarily disable win callback transport, instead
+ of win specific ifdefs in code
+
+2003-08-17 16:21 rstory
+
+ * snmplib/snmp_debug.c:
+
+ new debugmsg_suboid
+
+2003-08-17 16:21 rstory
+
+ * snmplib/read_config.c:
+
+ check for null ptr
+
+2003-08-17 16:21 rstory
+
+ * snmplib/container_list_ssll.c:
+
+ remove noalloc functions; rename typedef
+
+2003-08-17 16:18 rstory
+
+ * snmplib/container_binary_array.c:
+
+ remove noalloc functions
+
+2003-08-17 16:17 rstory
+
+ * snmplib/container.c:
+
+ remove unused var and noalloc functions
+
+2003-08-17 16:17 rstory
+
+ * dist/cvsup:
+
+ add optional upload of src tarball after update
+
+2003-08-17 15:22 rstory
+
+ * snmplib/mib.c:
+
+ new netsnmp_sprint_realloc_objid (doesn't use mibs); rework ifdefs for
+ netsnmp_sprint_realloc_objid_tree & DISABLE_MIB_LOADING
+
+2003-08-17 15:20 rstory
+
+ * snmplib/: Makefile.in, container_iterator.c:
+
+ add new container iterator
+
+2003-08-17 15:19 rstory
+
+ * local/mib2c:
+
+ don't run indent on files unless they end w/ .c or .h; print more info when
+ die of unexpected else
+
+2003-08-17 15:18 rstory
+
+ * include/net-snmp/library/snmp_debug.h:
+
+ new DEBUGMSGSUBOID & supporting cast
+
+2003-08-17 15:17 rstory
+
+ * include/net-snmp/library/snmp.h:
+
+ fix comments which exceed 80 chars
+
+2003-08-17 15:16 rstory
+
+ * include/net-snmp/library/mib.h:
+
+ new netsnmp_sprint_realloc_objid prototype
+
+2003-08-17 15:15 rstory
+
+ * include/net-snmp/agent/table.h:
+
+ new netsnmp_table_find_next_row prototype
+
+2003-08-17 15:15 rstory
+
+ * include/net-snmp/agent/snmp_vars.h:
+
+ new netsnmp_enable_subagent prototype
+
+2003-08-17 15:14 rstory
+
+ * include/net-snmp/agent/snmp_agent.h:
+
+ new netsnmp_check_requests_error prototype
+
+2003-08-17 15:12 rstory
+
+ * agent/helpers/baby_steps.c,
+ include/net-snmp/agent/baby_steps.h:
+
+ new (temporary?) baby steps helper
+
+2003-08-17 15:10 rstory
+
+ * include/net-snmp/agent/all_helpers.h:
+
+ add baby_steps.h, row_merge.h, table_mfd.h
+
+2003-08-17 15:10 rstory
+
+ * include/net-snmp/agent/agent_handler.h:
+
+ define new can baby step mode flag
+
+2003-08-17 15:10 rstory
+
+ * include/net-snmp/types.h:
+
+ new netsnmp_ref_void, netsnmp_ref_size_t typedefs
+
+2003-08-17 15:09 rstory
+
+ * include/net-snmp/utilities.h:
+
+ bail if net-snmp-config hasn't been included; add container/assert headers
+
+2003-08-17 15:08 rstory
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ bail if net-snmp-config hasn't been included; don't inlcude utilities twice
+
+2003-08-17 15:06 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ new netsnmp_enable_subagent, only defined if USING_AGENTX_SUBAGENT_MODULE, so
+ a link error will occur if agentx support not compiled in
+
+2003-08-17 15:05 rstory
+
+ * agent/helpers/table_array.c:
+
+ remove find_next_row, use new netsnmp_table_index_find_next_row; fix typo
+
+2003-08-17 15:03 rstory
+
+ * agent/helpers/table.c:
+
+ notes for future enhancements; fix potential memory leak; new
+ netsnmp_table_index_find_next_row
+
+2003-08-17 15:02 rstory
+
+ * agent/helpers/row_merge.c:
+
+ skip grouping if only 1 varbind; note for future enhancements
+
+2003-08-17 15:02 rstory
+
+ * agent/helpers/Makefile.in:
+
+ add new baby_steps, table_mfd helpers; build objs/lobjs from srcs
+
+2003-08-17 14:59 rstory
+
+ * agent/snmp_agent.c:
+
+ new netsmp_check_requests_errors
+
+2003-08-17 14:58 rstory
+
+ * agent/agent_handler.c:
+
+ code reuse (call_handlers uses call_handler); add new mode text for
+ handler_can_mode slist
+
+2003-08-16 07:27 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ - move some pointer saving for STASH related stuff outside the more
+ frequently called loop.
+
+2003-08-15 04:24 dts12
+
+ * include/net-snmp/library/mib.h, man/snmpcmd.1.def,
+ snmplib/mib.c, snmplib/snmp_parse_args.c:
+
+ Move prefix/suffix options under -I
+
+2003-08-15 03:33 dts12
+
+ * snmplib/mib.c:
+
+ Don't add a trailing dot if we're setting a prefix, but not a suffix.
+
+2003-08-14 01:13 dts12
+
+ * agent/helpers/: all_helpers.c, bulk_to_next.c,
+ cache_handler.c, debug_handler.c, instance.c,
+ mode_end_call.c, multiplexer.c, read_only.c,
+ row_merge.c, scalar.c, scalar_group.c,
+ serialize.c, watcher.c:
+
+ Reorganise the agent helper 'doxygen' structure, to make it less "flat".
+ Group "leaf-object" helpers together, and internal "utility" helpers similarly.
+
+2003-08-14 01:09 dts12
+
+ * snmplib/snmp_api.c:
+
+ Try to catch (some) PDU dual-free's.
+
+2003-08-14 00:15 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ 1 of 2 memory leaks found (ok, I said I wasn't going to find it but...)
+
+2003-08-13 23:40 hardaker
+
+ * agent/helpers/: Makefile.in, all_helpers.c,
+ stash_cache.c, table_iterator.c:
+
+ - added a new helper to auto-cache data. Currently the only
+ sub-module supported by this is the table_iterator, but significant
+ speed improvements can be seen when caching of iterator data is
+ turned on.
+ - to test add to snmpd.conf:
+ injectHandler stash_cache MODULE table_iterator
+ (a good test module is the nsModuleTable which has a lot of rows)
+ - warning: not heavily tested. Seems ok for at least the simple cases.
+
+2003-08-13 23:36 hardaker
+
+ * include/net-snmp/: agent/snmp_agent.h, library/snmp.h
+:
+
+ - define a new internal-use mode: MODE_GET_CACHE
+
+2003-08-13 23:36 hardaker
+
+ * snmplib/snmp_enum.c:
+
+ use calloc to initialize and zero memory (fixes an error spotted by valgrind).
+
+2003-08-13 23:35 hardaker
+
+ * snmplib/oid_stash.c:
+
+ spotted one memory leak.
+
+2003-08-13 23:15 hardaker
+
+ * apps/snmpwalk.c, man/snmpwalk.1.def:
+
+ - added a -Ct option to snmpwalk to display walk clock timer results
+
+2003-08-13 22:40 hardaker
+
+ * include/net-snmp/library/oid_stash.h, snmplib/oid_stash.c
+:
+
+ - added a parent node for upward traversal.
+ - a getnext implementation that actually works (fairly heavily tested).
+
+2003-08-13 22:36 hardaker
+
+ * agent/mibgroup/mibII/icmp.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/tcp.c,
+ agent/mibgroup/mibII/tcpTable.c, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/mibII/udpTable.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ - modified the free function pointer to take a cache argument for
+ generalizing it a bit more.
+
+2003-08-13 22:33 hardaker
+
+ * agent/agent_handler.c,
+ include/net-snmp/agent/agent_handler.h:
+
+ - Implement netsnmp_inject_handler_before() which takes an argument to
+ determine where in the handler chain it should inject something.
+ - Modify the injectHandler .conf token to taken an optional final
+ BEFORE argument.
+
+2003-08-10 11:39 hardaker
+
+ * include/net-snmp/library/system.h, snmplib/Makefile.in
+, snmplib/mib.c, snmplib/parse.c:
+
+ misc high level copyright notes added (IE, see the COPYING file, ...).
+
+2003-08-10 11:38 hardaker
+
+ * configure.in, agent/snmpd.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/logmatch.c:
+
+ misc copyright notes added.
+
+2003-08-05 01:42 dts12
+
+ * net-snmp-config.in:
+
+ Catch missing parameters in compile-subagent handling too
+
+2003-08-05 01:38 dts12
+
+ * net-snmp-config.in:
+
+ Catch missing parameters in create-snmpv3-user handling
+
+2003-08-05 01:32 dts12
+
+ * net-snmp-config.in:
+
+ Use $1 parameter directly in create-snmpv3-user processing.
+ Somewhat less confusing than with the additional $arg parameter,
+ and less chance of shifting a non-existent value.
+ (Relevant to bug #755571)
+
+2003-08-02 06:45 rstory
+
+ * local/mib2c-conf.d/mfd-top.m2c:
+
+ reog/update code generation; run mfd-data-access; set handler RWRITE if table
+ writable; chg table registration type; include new table setup
+
+2003-08-02 06:39 rstory
+
+ * local/mib2c-conf.d/parent-set.m2i:
+
+ simplify param lists; update code generation
+
+2003-08-02 06:37 rstory
+
+ * local/mib2c-conf.d/m2c_setup_node.m2i:
+
+ setup node srh independent of get temp use
+
+2003-08-02 06:36 rstory
+
+ * local/mib2c-conf.d/generic-table-oids.m2c:
+
+ be more paranoid about temporary override of $name
+
+2003-08-02 06:35 rstory
+
+ * local/mib2c-conf.d/generic-table-indexes.m2i:
+
+ chg indention on some comment blocks; use new node-storage.m2i; rmv data ptr
+
+2003-08-02 06:33 rstory
+
+ * local/mib2c-conf.d/: m2c_setup_table.m2i,
+ mfd-data-access.m2c, node-storage.m2i:
+
+ new code templates
+
+2003-08-02 06:31 rstory
+
+ * local/mib2c-conf.d/: generic-ctx-get.m2i,
+ generic-ctx-set.m2i, generic-data-context.m2i,
+ generic-get-oid.m2i, generic-value-map.m2i,
+ mfd-data-get.m2c, mfd-data-set.m2c, node-get.m2i,
+ node-set.m2i, syntax-DateAndTime-get.m2d:
+
+ data at ctx->data, not ctx; chg indention on block comments; fix some missed
+ name changes; update for renamed conf files; simplify some param lists;
+ add some asserts
+
+2003-07-31 07:23 dts12
+
+ * net-snmp-config.in:
+
+ Don't shift away command-line parameters that probably aren't there
+ (and certainly aren't relevant to the action being handled)
+ Reported by Vinod Johnson
+
+2003-07-31 03:12 dts12
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ Handle proxied SETs in the ACTION pass, rather than the commit pass.
+ This allows failures here to back out assignments in other modules.
+ We can't process UNDO requests successfully, but we can at least report
+ this fact. Which is preferable to claiming failure but (silently)
+ acting on some assignments.
+
+2003-07-31 03:08 dts12
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ Don't log warnings for deliberately unused SET passes.
+
+2003-07-31 03:04 dts12
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ Handle SNMP errors from proxied servers correctly.
+ Passing the error back up the chain seems to Do The Right Thing.
+
+2003-07-31 03:03 dts12
+
+ * agent/snmp_agent.c:
+
+ Problems in MIB processing are indicated via the 'asp->status' field,
+ rather than the return value. So use that when downgrading v2-style
+ errors for v1 responses.
+
+2003-07-30 10:55 rstory
+
+ * local/mib2c-conf.d/: default-mfd-top.m2c, mfd-data-get.m2c
+, mfd-data-set.m2c, mfd-interface.m2c, mfd-top.m2c
+:
+
+ new MIBs For Dummies (mfd) conf files
+
+2003-07-30 10:51 rstory
+
+ * local/mib2c:
+
+ add example_(start/end); fix $x.ranges; allow literal var names in user code
+ via $@var; add table_is_writable function
+
+2003-07-30 10:45 rstory
+
+ * local/mib2c-conf.d/: generic-ctx-copy.m2i,
+ generic-ctx-get.m2i, generic-ctx-set.m2i,
+ generic-data-context.m2i, generic-get-char.m2i,
+ generic-get-decl-bot.m2i, generic-get-decl.m2i,
+ generic-get-long.m2i, generic-get-oid.m2i,
+ generic-header-bottom.m2i, generic-header-top.m2i,
+ generic-source-includes.m2i, generic-table-indexes.m2i,
+ generic-table-oids.m2c, generic-value-map-reverse.m2i,
+ generic-value-map.m2i, m2c_setup_node.m2i, node-get.m2i
+, node-set.m2i, parent-dependencies.m2i,
+ parent-set.m2i, syntax-DateAndTime-get.m2d,
+ syntax-DateAndTime-get.m2i, syntax-InetAddress-get.m2i,
+ syntax-InetAddress-set.m2i, syntax-InetAddressType-get.m2i
+, syntax-InetAddressType-set.m2i,
+ syntax-RowStatus-get.m2i, syntax-TestAndIncr-get.m2i:
+
+ lots of new mib2c helpers (includes)
+
+2003-07-30 10:38 rstory
+
+ * local/mib2c-conf.d/: details-enums.m2i, details-node.m2i
+, details-table.m2i:
+
+ mostly variable renames; some reorg
+
+2003-07-30 06:25 dts12
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ Discard values received from the proxy if the OID is invalid.
+ (Typically when a GetNext walks past the end of the proxied subtree).
+ Also update the comments to describe the behaviour in a bit more detail.
+
+2003-07-30 06:11 dts12
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ Respond to SNMP errors from the proxied agent.
+ (The response is much too simplistic, and is likely to prove an
+ over-reaction in many cases. But it's a start)
+ Note that the indentation has not been adjusted - wait until things
+ settle down first.
+
+2003-07-29 08:13 dts12
+
+ * apps/: snmpdf.c (V4-2-patches.6), snmpdf.c:
+
+ Fix a typo in an error message (Patch #769221)
+
+2003-07-29 05:07 dts12
+
+ * include/net-snmp/library/snmp.h:
+
+ Correct the comments identifying hex/ascii values for PDU types.
+ Reported by Oleg Ivanov.
+
+2003-07-29 02:06 dts12
+
+ * agent/mibgroup/: ucd-snmp/extensible.c, utilities/execute.c
+:
+
+ Support for multi-command directives for 'sh' extensibility.
+ (i.e. running "this; that; the other")
+ Retained the original behaviour of truncating at the first ';' for
+ 'exec' directives (following the Principle of Least Astonishment)
+
+2003-07-29 01:54 dts12
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ Log failure to set up proxy command (rather than ploughing on regardless!)
+
+2003-07-29 01:53 dts12
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ Fix support for multi-line (relocatable) output.
+
+2003-07-27 16:54 rstory
+
+ * local/: mib2c (V5-0-patches.2), mib2c:
+
+ fix filename in error msg, as noted in coders
+
+2003-07-24 19:29 rstory
+
+ * local/mib2c:
+
+ fix oidlength function
+
+2003-07-24 17:55 rstory
+
+ * local/mib2c:
+
+ add cvs id tag; add comment documenting nonindex; indexes loop will now
+ include index for tables using augments
+
+2003-07-24 17:52 rstory
+
+ * perl/SNMP/SNMP.xs:
+
+ add access to the AUGMENTS attribute
+
+2003-07-23 16:43 rstory
+
+ * local/mib2c:
+
+ add warning for unknown $var.tag tags to catch typos; watch for unmatched
+ @ in skipvars; don't open new file it it's already open; add flag to
+ process_file for save/restore of vars; fix process again so it will catch
+ unmatches @@; add new @foreach nonindex@
+
+2003-07-22 09:07 jbpn
+
+ * include/net-snmp/library/snmp_parse_args.h,
+ snmplib/snmp_parse_args.c:
+
+ - zero out sensitive command-line arguments (community string, user name,
+ authentication passphrase, privacy passphrase).
+
+ NOTE: this does not work for all plaforms -- certainly it doesn't
+ work for Solaris. A different, more gross method is needed
+ for these platforms (see sendmail code for details -- need
+ I say more?).
+
+2003-07-22 08:45 dts12
+
+ * man/snmpvacm.1.def:
+
+ Improved descriptions of the various subcommands.
+ Based on material supplied by Nick DiRico.
+
+2003-07-22 08:08 dts12
+
+ * agent/mibgroup/mibII/tcpTable.c:
+
+ Various fixes to the recent TCP table redesign, supplied by Katsuhisa ABE.
+ (Some others still outstanding, awaiting discussion. But these are clear
+ mistakes, which need fixing).
+
+2003-07-22 08:04 dts12
+
+ * agent/mibgroup/mibII/: tcpTable.c, udpTable.c:
+
+ Use the table information 'colnum' field to identify the requested column
+ object(s) rather than pulling stuff out of the OID. Suggested by Oleg Ivanov.
+
+2003-07-22 07:59 dts12
+
+ * apps/snmpvacm.c:
+
+ Make the createView mask parameter optional
+ (as with the 'view' config directive)
+
+2003-07-22 07:57 dts12
+
+ * apps/snmpvacm.c:
+
+ Correct the layout of the usage message.
+
+2003-07-22 07:56 dts12
+
+ * apps/snmpvacm.c:
+
+ Use the more flexible API call for handling view OIDs
+
+2003-07-19 10:55 rstory
+
+ * local/mib2c-conf.d/: details-enums.m2i, details-node.m2i
+, details-table.m2i:
+
+ mib2c include files to generate node details
+
+2003-07-19 10:52 rstory
+
+ * local/mib2c:
+
+ track current line and file name; new find_conf, process_file subs; remove
+ @skip N@ ability; skip @token@ search if line doesn't begin with @;
+ add @skipif@, @break@; dont require spaces for @close@; add -ifexists param to
+ @include@; new @ifconf@ + rework code to make other @ifXXX@ tokens easy; merge
+ else/elsif in process loop
+
+2003-07-18 13:58 rstory
+
+ * local/mib2c:
+
+ add parsing of initial default file; delay processing of cmd line vars til
+ after processing default file; add new $c.needslength, $c.hasdefval, $c.defval,
+ $c.module, $c.accessible, $c.children (needs work), $c.hashint, $c.hint,
+ $c.ranges,$c.enumrange (needs work) and various code to support them; add
+ parameter to skip to allow one to break out of multiple levels (needs work);
+ allow spaces after @cmd@ to allow for better control of indention; move file
+ open/close to subroutines; new @append file@, @close file@, @include file@;
+ allow writing to multiple files at once; new @print text@ (to stdout);
+ whew! more to come...
+
+2003-07-16 03:29 dts12
+
+ * net-snmp-config.in:
+
+ Support processing of compile-subagent sub-options in any order
+
+2003-07-16 03:28 dts12
+
+ * net-snmp-config.in:
+
+ Handle compile-subagent called with no parameters
+
+2003-07-16 03:24 dts12
+
+ * net-snmp-config.in:
+
+ Fix inconsistent usage within compile-subagent
+
+2003-07-16 03:21 dts12
+
+ * net-snmp-config.in:
+
+ Handle --create-snmpv3-user called with no parameters
+
+2003-07-16 02:07 dts12
+
+ * README:
+
+ Clarify the roles of the various mailing lists, and which ones to use
+ (or not use). Also updated the project web page along the same lines.
+
+2003-07-15 21:50 rstory
+
+ * local/mib2c:
+
+ rename istable to iscolumn; add enums; add currentvar; fix enum dump to work
+ for scalars
+
+2003-07-15 08:06 dts12
+
+ * agent/helpers/table.c:
+
+ Fix a varargs type specification. Spotted by Oleg Ivanov.
+
+2003-07-15 07:35 dts12
+
+ * agent/mibgroup/mibII/sysORTable.c:
+
+ Avoid referencing freed memory. (Reported by Steve Bennett)
+
+2003-07-15 07:26 dts12
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ Run pass-through scripts in the ACTION pass, not COMMIT, so any errors
+ can be reported back properly.
+ Also tweak the error-checking code to recognise the error strings properly.
+
+2003-07-14 17:00 rstory
+
+ * configure:
+
+ configure to mach configure.in
+
+2003-07-14 16:52 rstory
+
+ * configure.in:
+
+ apply patch from Steve Bennett <steveb@snapgear.com> to allow one to disable
+ the callback transport and reduce agent size. Tweaked by me a bit. disable
+ agentx if callbacks disabled
+
+ remove (transport|security)_[l]obj_list, as [l]obj lists are now generated
+ from srcs; remove AgentX beta code warning from help
+
+2003-07-14 16:50 rstory
+
+ * agent/snmp_vars.c, include/net-snmp/net-snmp-config.h.in
+, include/net-snmp/library/snmpCallbackDomain.h:
+
+ apply patch from Steve Bennett <steveb@snapgear.com> to allow one to disable
+ the callback transport and reduce agent size. Tweaked by me a bit. disable
+ agentx if callbacks disabled.
+
+2003-07-13 11:19 rstory
+
+ * include/net-snmp/library/callback.h, snmplib/callback.c
+:
+
+ add priority to callback so user can determine callback order
+
+2003-07-13 09:44 rstory
+
+ * agent/mibgroup/mibII/tcpTable.h:
+
+ restore inpcb struct for linux (until it shows up somewhere else in cvs)
+
+2003-07-11 05:08 dts12
+
+ * man/snmpvacm.1.def:
+
+ Fix errors in the examples, spotted by Nick DiRico
+
+2003-07-10 06:11 rstory
+
+ * dist/: nsb-functions, nsb-nightly, nsb-package
+:
+
+ sync w/patches
+
+2003-07-10 05:57 dts12
+
+ * agent/mibgroup/mibII/: tcp.c, tcp.h, tcpTable.c
+, tcpTable.h, udp.c, udp.h, udpTable.c
+, udpTable.h:
+
+ New-API implementation of UDP and TCP tables, using cache and iterator helpers.
+ Works on Linux and HP-UX 10, compiles (but untested) on Solaris & Windows.
+
+2003-07-10 03:55 dts12
+
+ * include/net-snmp/library/container_binary_array.h:
+
+ Colon? semicolon? What's a pixel or two between friends....
+
+2003-07-10 02:12 dts12
+
+ * win32/: win32sdk.dsw, libagent/libagent.def,
+ libhelpers/libhelpers.dsp, libsnmp/libsnmp.dsp,
+ libsnmp_dll/libsnmp.def, libsnmp_dll/libsnmp_dll.dsp,
+ netsnmpmibssdk/netsnmpmibssdk.dsp, snmpdsdk/snmpd.dsp:
+
+ Visual C++ tweaks, to get everything to compile cleanly.
+
+2003-07-09 08:40 dts12
+
+ * agent/mibgroup/agentx/master.c:
+
+ Missing header protection checks
+
+2003-07-09 08:14 dts12
+
+ * agent/mibgroup/agentx/agentx_config.c:
+
+ Handle systems without getpwnam or getgrnam
+
+2003-07-09 08:06 dts12
+
+ * snmplib/snmp_logging.c:
+
+ Provide default definitions of syslog constants if not already present.
+
+2003-07-09 08:05 dts12
+
+ * include/net-snmp/library/container_binary_array.h,
+ snmplib/container.c:
+
+ Provide missing forward declarations
+
+2003-07-09 05:25 dts12
+
+ * agent/snmpd.c:
+
+ Support for the old '-L' option.
+ (Incredibly clunky, but necessary)
+
+2003-07-09 05:24 dts12
+
+ * include/net-snmp/library/snmp_enum.h, snmplib/snmp_api.c
+, snmplib/snmp_enum.c:
+
+ Support for "persistent enumerations".
+
+2003-07-08 06:02 dts12
+
+ * agent/mibgroup/mibII/: icmp.c, ip.c, tcp.c,
+ udp.c:
+
+ Improved debugging for new scalar_group implementations.
+
+2003-07-07 15:49 hardaker
+
+ * agent/mibgroup/mibII/mta_sendmail.c:
+
+ Patch from Chuck Yerkes to make the MTA-MIB work with newer sendmail versions, including FFR_QUARANTINE support
+
+2003-07-07 06:04 dts12
+
+ * agent/mibgroup/util_funcs.h:
+
+ Export the 'make_tempfile' routine.
+
+2003-07-06 20:41 rstory
+
+ * snmplib/: Makefile.in, container_binary_array.c:
+
+ fix typos
+
+2003-07-04 10:35 hardaker
+
+ * snmplib/snmp_enum.c:
+
+ added sys/types
+
+2003-07-03 21:21 rstory
+
+ * snmplib/container_binary_array.c:
+
+ free container on free; sort before for_each executes; add init to register
+
+2003-07-03 21:20 rstory
+
+ * snmplib/Makefile.in:
+
+ add new containers
+
+2003-07-03 21:20 rstory
+
+ * include/net-snmp/library/container.h:
+
+ update CONTAINER_FREE for new requirement that containers free themselves
+
+2003-07-03 21:20 rstory
+
+ * snmplib/container.c:
+
+ add init for list_ssll and null containers; add aliases for list and
+ binary containers; update CONTAINER_FREE for new requirement that
+ containers free themselves
+
+2003-07-03 20:53 rstory
+
+ * snmplib/container_list_ssll.c, snmplib/container_null.c
+, include/net-snmp/library/container_list_ssll.h,
+ include/net-snmp/library/container_null.h:
+
+ new files
+
+2003-07-03 20:26 rstory
+
+ * snmplib/container_list_ssll.c:
+
+ file container_list_ssll.c was initially added on branch V5-0-patches.
+
+2003-07-03 20:26 rstory
+
+ * snmplib/container_null.c:
+
+ file container_null.c was initially added on branch V5-0-patches.
+
+2003-07-02 14:57 hardaker
+
+ * testing/tests/: T023snmpv3getMD5DES, T025snmpv3getSHADES
+:
+
+ Use a SKIPIFNOT for real tokens (typo).
+
+2003-07-02 14:55 hardaker
+
+ * testing/tests/: T150solarishostcpu, T151solarishostdisk
+, T152hostuptime, T153solarisswap:
+
+ fix new tests in various ways
+
+2003-07-02 14:45 hardaker
+
+ * snmplib/oid_stash.c:
+
+ free the root pointer.
+
+2003-07-02 14:45 hardaker
+
+ * snmplib/snmpv3.c:
+
+ free the engineid at *shutdown* not *startup*:-/
+
+2003-07-02 14:41 hardaker
+
+ * agent/snmpd.c:
+
+ don't call the cleanup routines at shutdown since they're filled with
+ double frees()
+
+2003-07-02 14:32 hardaker
+
+ * agent/mibgroup/examples/netSnmpHostsTable.h:
+
+ require needs examples/ prefix
+
+2003-07-02 14:13 hardaker
+
+ * agent/agent_registry.c:
+
+ Use a for loop instead of a recursive function.
+
+2003-07-02 14:13 hardaker
+
+ * agent/mibgroup/agent/nsDebug.c:
+
+ protect against empty rows.
+
+2003-07-02 13:52 hardaker
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ fix container code from the last patch
+
+2003-07-02 13:29 hardaker
+
+ * agent/agent_handler.c, agent/agent_registry.c,
+ agent/snmp_agent.c, agent/snmpd.c,
+ snmplib/container_binary_array.c, snmplib/mib.c,
+ snmplib/read_config.c, snmplib/snmpCallbackDomain.c,
+ snmplib/snmp_api.c, snmplib/snmp_transport.c,
+ snmplib/snmpusm.c, snmplib/snmpv3.c:
+
+ Patch: 756286: A global free -> SNMP_FREE replacement
+
+2003-07-02 13:20 hardaker
+
+ * README, agent/agent_handler.c,
+ agent/agent_read_config.c, agent/agent_registry.c,
+ agent/snmp_agent.c, agent/snmp_vars.c, agent/snmpd.c
+, include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/agent_registry.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/snmp_vars.h,
+ include/net-snmp/library/callback.h,
+ include/net-snmp/library/container.h,
+ include/net-snmp/library/container_binary_array.h,
+ include/net-snmp/library/lcd_time.h,
+ include/net-snmp/library/snmpCallbackDomain.h,
+ include/net-snmp/library/snmp_enum.h,
+ include/net-snmp/library/snmp_secmod.h,
+ include/net-snmp/library/snmp_transport.h,
+ include/net-snmp/library/snmpusm.h,
+ include/net-snmp/library/snmpv3.h, snmplib/callback.c,
+ snmplib/container.c, snmplib/container_binary_array.c,
+ snmplib/lcd_time.c, snmplib/read_config.c,
+ snmplib/snmpCallbackDomain.c, snmplib/snmp_enum.c,
+ snmplib/snmp_secmod.c, snmplib/snmp_transport.c,
+ snmplib/snmpusm.c, snmplib/snmpv3.c:
+
+ Patch #724925 from Peter Warasin to free lots of memory for a really clean shutdown
+
+2003-07-02 13:02 hardaker
+
+ * agent/: agent_registry.c (V5-0-patches.2), agent_registry.c
+:
+
+ Patch #724925 from Peter Warasin to fix netsnmp_subtree_unload() to update the root pointer
+
+2003-07-02 12:59 hardaker
+
+ * testing/tests/: T150solarishostcpu, T151solarishostdisk
+, T152hostuptime, T153solarisswap:
+
+ Patch: 756286: New solaris specific HR tests from Bruce Shaw
+
+2003-07-02 12:47 hardaker
+
+ * agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/logmatch.c, snmplib/parse.c
+ (V5-0-patches.[1,2,1]), agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/logmatch.c, snmplib/parse.c:
+
+ Patch #760448 from Bob Rowlands/Sun to fix bug #751913 to protect a few minor security violations
+
+2003-07-02 10:58 hardaker
+
+ * COPYING, configure, configure.in,
+ agent/snmpd.c, include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/library/system.h, snmplib/Makefile.in
+, snmplib/mib.c, snmplib/strlcpy.c:
+
+ Patch #760417 from Bob Rowlands/Sun for fixing Bug #751920 for minor security problems (PID file unliked first, and use strlcpy instead of strcpy. A new strlcpy file was defined if not defined for a system.
+
+2003-07-02 10:44 hardaker
+
+ * snmplib/strlcpy.c:
+
+ file strlcpy.c was initially added on branch V5-0-patches.
+
+2003-07-02 10:26 hardaker
+
+ * include/net-snmp/library/: snmp_debug.h (V5-0-patches.1),
+ snmp_debug.h:
+
+ Patch #764047 from Stephen J. Friedl: Remove redundant declaration from snmp_debug.h and fix a few comments
+
+2003-07-02 10:21 hardaker
+
+ * configure, configure.in (V5-0-patches.[7,7]), configure,
+ configure.in:
+
+ Patch #759309 from Stephen Friedl to add prompt over-ride flag descriptions to prompt output
+
+2003-07-02 10:15 hardaker
+
+ * configure, configure.in:
+
+ patch #759298: fix spelling error
+
+2003-07-01 05:33 dts12
+
+ * agent/helpers/scalar1.c:
+
+ Remove redundent file.
+
+2003-07-01 03:13 dts12
+
+ * agent/mibgroup/mibII/: icmp.c, icmp.h, ip.c,
+ ip.h, kernel_linux.c, kernel_linux.h,
+ mibII_common.h, tcp.c, tcp.h, udp.c, udp.h
+:
+
+ Re-implement the scalar network statistics using new API features.
+ This serves as an example of the 'scalar_group' and 'cache_handler'
+ helpers, as well as (hopefully) simplifying the code somewhat.
+
+2003-07-01 02:57 dts12
+
+ * agent/helpers/: scalar.c, scalar_group.c:
+
+ Minor tweaks to handle walking from one scalar to another correctly,
+ and deal with internal missing objects within a scalar group.
+
+2003-06-30 22:34 hardaker
+
+ * local/mib2c.iterate_access.conf,
+ agent/mibgroup/examples/netSnmpHostsTable_access.c,
+ agent/mibgroup/examples/netSnmpHostsTable.c,
+ agent/mibgroup/examples/netSnmpHostsTable.h:
+
+ update for row deletion
+
+2003-06-30 17:15 hardaker
+
+ * local/: mib2c.access_functions.conf,
+ mib2c.iterate_access.conf:
+
+ update to support row creation. Deletion support still coming, as is
+ a separate handler.
+
+2003-06-30 17:10 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ remove more "not serialized" code.
+
+2003-06-30 17:08 hardaker
+
+ * agent/mibgroup/examples/: netSnmpHostsTable.c,
+ netSnmpHostsTable.h, netSnmpHostsTable_access.c,
+ netSnmpHostsTable_access.h:
+
+ Updated for row creation.
+
+2003-06-30 10:53 hardaker
+
+ * agent/mibgroup/Rmon/alarm.c:
+
+ patch from Fong Tsui for fixing NULL references
+
+2003-06-30 10:43 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - make the default agentx ping interval be 15 seconds.
+
+2003-06-30 09:26 dts12
+
+ * agent/mibgroup/: util_funcs.c, ucd-snmp/extensible.h,
+ utilities/execute.h:
+
+ Make sure the dependencies for the new approach to sub-command
+ invocation are properly acknowledged.
+
+2003-06-30 07:40 dts12
+
+ * agent/agent_handler.c:
+
+ Check for validity of parameters before using them. (Paranoid? Who, me?)
+
+2003-06-30 06:51 dts12
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Caching of interface data is actually Linux-specific.
+
+2003-06-30 05:05 dts12
+
+ * agent/helpers/Makefile.in,
+ include/net-snmp/agent/all_helpers.h:
+
+ Include recent helper modules in the helper library and meta-include file.
+
+2003-06-27 04:43 dts12
+
+ * apps/snmptrapd_handlers.c:
+
+ Simplify the processing of "traphandle" directives
+ (using the new generic sub-command execution utility routines,
+ and the improved varlist logging configuration)
+
+2003-06-27 04:39 dts12
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ Use the new generic sub-command execution utility routines instead
+ of the extensible-specific ones.
+
+2003-06-27 04:37 dts12
+
+ * agent/helpers/cache_handler.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ Include a general 'magic' parameter in both cache data structure
+ and cache loading routine. Just In Case It Might Come In Useful.
+ Happy, Wes?
+
+2003-06-27 04:09 dts12
+
+ * agent/: Makefile.in, mibgroup/utilities/execute.c,
+ mibgroup/utilities/execute.h:
+
+ Generalised sub-command execution utility routines.
+ (The current 'exec_command' and 'shell_command' routines are very specific
+ to the details of the 'struct extensible' data structure).
+ These routines can be used more widely, wherever a sub-process is needed.
+
+ Questions:
+ a) Should these utilise the "realloc" mechanism, rather than
+ enforce a fixed size output buffer?
+ b) Do they belong in the main library (or possibly the agent library)
+ rather than a mibgroup?
+
+2003-06-27 01:42 dts12
+
+ * apps/snmptrapd_log.c:
+
+ More flexible handling of formatting varbind lists.
+ "%V" configures the varbind separator character (alt_format => added space)
+ "%v" uses this separator (alt_format => separator also printed before the list)
+ Defaults to using the earlier '\t' or ", " if no separator is specified.
+
+2003-06-26 02:27 dts12
+
+ * local/mib2c.notify.conf:
+
+ Use the new features of mib2c to tidy up the output a bit.
+
+2003-06-26 02:26 dts12
+
+ * local/mib2c:
+
+ Extend mib2c's new counter routines to cover "subloops" as well
+ (i.e. the number of columns/indexes in a particular table,
+ and the number of objects to be included with a given notification)
+
+2003-06-25 23:15 hardaker
+
+ * local/: mib2c, mib2c.conf:
+
+ - prompt support for mib2c to ask questions to the user.
+ - A new top-level wrapper around all the other mib2c files that walks
+ you through selecting the right mib2c configuration file you wish to
+ use and then sources it for you.
+ - todo: generate unique file names if both scalar and table creation
+ is done, eg.
+
+2003-06-25 23:13 hardaker
+
+ * local/mib2c.vartypes.conf:
+
+ boy is that not needed any more
+
+2003-06-25 14:41 hardaker
+
+ * local/mib2c:
+
+ Dave asks, dave gets:
+ - new functions returning 1 or 2: $var.isscalar, $var.iscolumn
+ - $var.parent returns the parent label string of the node.
+
+2003-06-25 14:28 hardaker
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ fix request -> requests as pointed out by Steve Benett
+
+2003-06-25 07:38 dts12
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ Stamp on a trailing '.' when specifying VACM OIDs.
+
+2003-06-25 07:30 dts12
+
+ * snmplib/snmp_enum.c:
+
+ Calls to release enumeration lists when no longer required.
+ Normally this would be handled automatically when an application
+ exists, but it might be useful to release resources earlier.
+
+2003-06-25 07:24 dts12
+
+ * agent/Makefile.in:
+
+ Install the 'dlmod.h' header file
+
+2003-06-24 06:20 dts12
+
+ * local/: mib2c, mib2c.notify.conf:
+
+ Initial support for code to send out traps and informs.
+ This still doesn't address *when* such notifications should
+ be generated, but it at least helps with doing so.
+
+2003-06-23 22:30 nba
+
+ * apps/snmptrapd_handlers.c:
+
+ Remove too much memdup'ing in inform reply
+
+2003-06-23 14:33 nba
+
+ * mibs/rfclist:
+
+ Add APS-MIB and MALLOC-MIB
+
+2003-06-23 14:31 nba
+
+ * mibs/IANAifType-MIB.txt:
+
+ Update from IANA
+
+2003-06-23 14:30 nba
+
+ * apps/snmptrapd.c:
+
+ remove now unused snmp_clone_pdu2
+
+2003-06-23 12:37 nba
+
+ * apps/snmptrapd_handlers.c:
+
+ include wait.h for waitpid, and re-instate the code that responds to an inform
+
+2003-06-23 06:47 dts12
+
+ * agent/agent_trap.c, include/net-snmp/agent/agent_trap.h
+:
+
+ Utility routine to convert v1 traps to v2-notification-style varbind list.
+
+2003-06-23 06:35 dts12
+
+ * apps/Makefile.in:
+
+ Construct a library containing the core trapd handling functionality.
+
+2003-06-23 06:23 dts12
+
+ * agent/mibgroup/mibII/sysORTable.h:
+
+ The sysORTable module is dependent on system_mib, so ensure this is available.
+
+2003-06-23 06:13 dts12
+
+ * apps/: notification_log.c, snmptrapd_handlers.c,
+ snmptrapd_handlers.h, notification_log.h:
+
+ Consolidate the notification handler in with the rest of the
+ NOTIFICATION-MIB related code.
+
+2003-06-23 06:01 dts12
+
+ * apps/: snmptrapd.c, snmptrapd_handlers.c,
+ snmptrapd_handlers.h:
+
+ Shuffle code around a bit. The three files 'snmptrapd_handlers.c',
+ 'snmptrapd_log.c' and 'notification.c' now contain all the code
+ needed to process an incoming trap.
+ It should be possible to embed this functionality within an larger
+ application, rather than having to use the 'snmptrapd.c' wrapper.
+
+2003-06-22 16:20 hardaker
+
+ * local/.cvsignore:
+
+ ignore *.c and *.h files.
+
+2003-06-22 16:18 hardaker
+
+ * agent/mibgroup/examples/: netSnmpHostsTable.c,
+ netSnmpHostsTable.h, netSnmpHostsTable_access.c,
+ netSnmpHostsTable_access.h, netSnmpHostsTable_checkfns.c
+, netSnmpHostsTable_checkfns.h,
+ netSnmpHostsTable_checkfns_local.c,
+ netSnmpHostsTable_checkfns_local.h,
+ netSnmpHostsTable_columns.h, netSnmpHostsTable_enums.h:
+
+ - A netSnmpHostsTable implementation that implements a table_iterator
+ wrapper around /etc/hosts. Note that although this is the first check
+ in, it is not entirely complete yet. Specifically:
+ - It doesn't support row creation yet (my next target) and deletion yet.
+ - It implements a bunch of stuff itself in netSnmpHostsTable.c that
+ will eventually go into a more generic helper.
+ - It doesn't support anything but ipv4 yet but doesn't ignore it in
+ the hosts file (inet_aton returns a -1 thus all ipv6 address get
+ mapped to 255.255.255.255).
+ - It is still useful just to show how SET operations can be performed
+ using a table_iterator.
+ - Plus I needed to check it in before I start messing with it again
+ just for archival purposes.
+
+2003-06-22 16:14 hardaker
+
+ * mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ Create an example table that is a wrapper around /etc/hosts data.
+
+2003-06-22 12:53 nba
+
+ * snmplib/snmp_logging.c:
+
+ INFO is not a facility - USER could be
+
+2003-06-22 12:50 nba
+
+ * snmplib/snmp_parse_args.c:
+
+ Add the new -L option to the usage message
+
+2003-06-22 12:49 nba
+
+ * include/net-snmp/library/snmpUnixDomain.h,
+ snmplib/snmpUnixDomain.c:
+
+ Add some missing prototypes, and use them
+
+2003-06-22 12:46 nba
+
+ * apps/snmptable.c:
+
+ Do away with some warnings
+
+2003-06-22 12:44 nba
+
+ * include/net-snmp/library/snmp_logging.h,
+ snmplib/snmp_logging.c:
+
+ constify a few arguments, make sure that we defalt output to stderr
+
+2003-06-22 12:42 nba
+
+ * agent/mibgroup/host/hr_print.c,
+ agent/mibgroup/ucd-snmp/logmatch.c,
+ agent/mibgroup/ucd-snmp/proc.c, apps/snmptrapd_handlers.c
+, snmplib/scapi.c, snmplib/vacm.c:
+
+ Do away with some warnings
+
+2003-06-22 12:38 nba
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Untangle a most extrordinary web og FreeBSD and Linux
+
+2003-06-22 07:22 hardaker
+
+ * apps/snmpvacm.c:
+
+ fix help usage for flag ordering.
+
+2003-06-22 07:22 hardaker
+
+ * include/net-snmp/library/default_store.h, snmplib/mib.c
+, snmplib/snmp_parse_args.c:
+
+ - add -s SUFFIX and -S PREFIX flags
+ - doxygen document snmp_parse_oid
+ - Add a proper L: token to getopt for a missing accepted flag
+
+2003-06-20 16:50 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ fix the loop free before call-sub-hook ordering problem Dave pointed out
+
+2003-06-20 11:58 dts12
+
+ * agent/helpers/table_iterator.c,
+ include/net-snmp/agent/table_iterator.h:
+
+ Support the option for sorted iterator-based tables, too.
+
+2003-06-20 11:53 dts12
+
+ * agent/helpers/table_iterator.c:
+
+ Stop searching once we've found all "exact" requested rows.
+
+2003-06-19 01:54 dts12
+
+ * man/: snmpset.1.def, snmptrap.1.def:
+
+ Clarify the ASN.1 type mappings for command-line type specifications.
+
+2003-06-17 05:54 dts12
+
+ * agent/snmpd.c:
+
+ Start using the new -Lx style logging output.
+ Unfortunately, this doesn't seem to support the old -L format
+ (see comments in snmplib/snmp_logging.c for details).
+
+ It may prove necessary to reverse this patch:-(
+ But I'm committing it anyway, in case anyone can spot a suitable workaround.
+
+2003-06-17 05:52 dts12
+
+ * snmplib/snmp_logging.c:
+
+ Minor tweak to stdout/stderr handling, to improve the appearance of
+ MIB group output.
+
+2003-06-17 05:50 dts12
+
+ * agent/mibgroup/agent_mibs.h,
+ agent/mibgroup/agent/nsLogging.c,
+ agent/mibgroup/agent/nsLogging.h, mibs/NET-SNMP-AGENT-MIB.txt
+:
+
+ MIB group to manage agent logging configuration.
+
+2003-06-16 14:59 hardaker
+
+ * testing/: RUNTESTS (V5-0-patches.4), RUNTESTS:
+
+ remove no longer needed comment about it being broken, as pointed out
+ by Bruce.
+
+2003-06-16 14:55 hardaker
+
+ * testing/: RUNTESTS (V5-0-patches.3), RUNTESTS:
+
+ support , separated arguments to -T like -h says it will.
+
+2003-06-16 14:54 hardaker
+
+ * testing/RUNTESTS:
+
+ Patch from Bruce Shaw to fix output numbering when using -T or
+ interactively picked sub-series of tests.
+
+2003-06-16 14:44 hardaker
+
+ * agent/mibgroup/: kernel_sunos5.c (V5-0-patches.2),
+ kernel_sunos5.c:
+
+ Patch #755540 from Bruce Shaw and IRC:SebNob to fix bug #701439 for 64 bit solaris systems and 64 bit integers returned by getKstat
+
+2003-06-16 13:17 hardaker
+
+ * testing/tests/: T055agentv1mintrap, T056agentv2cmintrap
+:
+
+ Patch #754105 from Bruce Shaw to fix some spelling errors
+
+2003-06-16 07:23 hardaker
+
+ * local/mib2c.iterate_access.conf:
+
+ yet more improvements working toward the end-goal.
+
+2003-06-16 07:17 hardaker
+
+ * README.Panasonic_AM3X.txt, README.Matsushita.txt:
+
+ renamed to Panasonic_AM3X by request
+
+2003-06-13 22:45 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ Ok, there was 1 memory leak. But its gone now.
+
+2003-06-13 22:02 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ A complete rewrite of the iterator from scratch.
+ - 60 lines or so less code.
+ - no longer forced-serialized
+ - memory-leak free
+ - better commented (though more could always be useful).
+ - significantly simpler in design.
+ - demonstration example mib module code to be checked in early next week.
+
+2003-06-13 11:18 hardaker
+
+ * local/mib2c.check_values.conf:
+
+ fix range checks now that its no longer the last thing called.
+
+2003-06-13 11:17 hardaker
+
+ * local/mib2c.access_functions.conf:
+
+ misc minor fixes.
+
+2003-06-13 11:17 hardaker
+
+ * local/mib2c:
+
+ fix else clauses within if statements.
+
+2003-06-13 08:36 dts12
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ Handle problems with reading process information on Solaris kit, consistently and cleanly.
+
+2003-06-13 06:28 dts12
+
+ * include/net-snmp/library/snmp_logging.h,
+ snmplib/snmp_logging.c, snmplib/snmp_parse_args.c,
+ apps/snmptrapd.c:
+
+ Implement '-Lx' command-line meta-option for configuring logging settings.
+ Not 100% convinced this is fully working, but does seem to support
+ multiple output locations.
+
+2003-06-10 15:48 nba
+
+ * snmplib/: snmp_api.c (V5-0-patches.7), snmp_api.c:
+
+ Beware of dereferencing a NULL pointer
+
+2003-06-10 10:46 hardaker
+
+ * agent/helpers/Makefile.in:
+
+ add caching handler file
+
+2003-06-10 08:48 dts12
+
+ * include/net-snmp/library/snmp_logging.h,
+ snmplib/snmp_logging.c:
+
+ Initial bash at a modular "log_handler" implementation.
+ Laying the foundations for more flexible logging configuration.
+
+2003-06-10 08:31 hardaker
+
+ * snmplib/snmp_api.c:
+
+ remove the unused function as pointed out by Bob Rowlands
+
+2003-06-09 16:10 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c, agent/snmp_agent.c,
+ include/net-snmp/library/vacm.h, snmplib/vacm.c
+ (V5-0-patches.[1,3,1,1]), agent/mibgroup/mibII/vacm_vars.c,
+ agent/snmp_agent.c, include/net-snmp/library/vacm.h,
+ snmplib/vacm.c:
+
+ Long overdue patch #695192 from Ron Tabor to fix the VACM spinning problem that I didn't quite fix before
+
+2003-06-09 15:57 hardaker
+
+ * configure.in, testing/tests/T023snmpv3getMD5DES,
+ testing/tests/T025snmpv3getSHADES, configure:
+
+ fix bug #706710 to show when privacy has been disabled
+
+2003-06-09 15:47 hardaker
+
+ * snmplib/md5.c:
+
+ fix bug #706741 from Sean Burke: check for word boundaries based on a
+ proper size (sizeof(long)).
+
+2003-06-09 15:35 hardaker
+
+ * include/net-snmp/library/snmp_api.h, snmplib/snmp_api.c
+:
+
+ bug #748431 from John Shiver: fix thread-safe problems with snmp_get_fd_for_session (which was missing in the 5.x line anyway). Also separate out union structure into a separate typedef rather than use it inline in the variable list structure
+
+2003-06-09 15:22 hardaker
+
+ * snmplib/mib.c:
+
+ fix bug # 751197 pointed out by Tom Evans where isspace is used to check for hex characters when isprint() is all that is needed
+
+2003-06-09 15:11 hardaker
+
+ * agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/memory_aix4.c,
+ agent/mibgroup/ucd-snmp/memory_aix4.h,
+ agent/mibgroup/ucd_snmp.h,
+ agent/mibgroup/ucd-snmp/vmstat_aix4.c,
+ agent/mibgroup/ucd-snmp/vmstat_aix4.h, acconfig.h,
+ configure.in, include/net-snmp/net-snmp-config.h.in:
+
+ patch #749552 from vaxpower (with modifications by Wes): much improved AIX support
+
+2003-06-09 14:49 hardaker
+
+ * README.Matsushita.txt (V5-0-patches.1), README.Matsushita.txt
+:
+
+ Patch #748305 from srinivasa rao gurusu describing how to build net-snmp on Matsushita embedded systems
+
+2003-06-09 14:44 hardaker
+
+ * agent/mibgroup/mibII/: ipAddr.c (V5-0-patches.3), ipAddr.c:
+
+ Patch 746339: Otto Solares fixes a file descriptor leak on linux
+
+2003-06-09 14:31 hardaker
+
+ * agent/mibgroup/: kernel_sunos5.c (V5-0-patches.1),
+ kernel_sunos5.c:
+
+ Patch #749062 to fix caching crashing and clashing under Solaris
+
+2003-06-09 14:28 hardaker
+
+ * agent/mibgroup/ucd-snmp/: proxy.c (V5-0-patches.2), proxy.c
+:
+
+ patch #749103 from Garry C Marshall to fix the proxy when a timeout occurs from the target
+
+2003-06-09 04:01 dts12
+
+ * agent/helpers/cache_handler.c, agent/mibgroup/agent_mibs.h
+, include/net-snmp/agent/cache_handler.h,
+ agent/mibgroup/agent/nsCache.c,
+ agent/mibgroup/agent/nsCache.h, mibs/NET-SNMP-AGENT-MIB.txt
+:
+
+ MIB objects to manage configuration of MIB data caching.
+
+2003-06-09 03:56 dts12
+
+ * agent/mibgroup/agent/nsDebug.c,
+ agent/mibgroup/agent/nsDebug.h, mibs/NET-SNMP-AGENT-MIB.txt
+, snmplib/snmp_debug.c:
+
+ Rework nsDebugTokenTable to be indexed by the debug token string values.
+
+2003-06-06 08:45 dts12
+
+ * apps/: snmptrapd.c, snmptrapd_handlers.c,
+ snmptrapd_handlers.h:
+
+ Implement various separate lists of "global" handlers, to support
+ pre- and post-specific global processing, as well as "authentication"
+ handlers, which are guaranteed to be called first.
+ Also support for terminating trap processing early.
+
+ Don't let me hear you say that I never listen to you, Wes!
+
+2003-06-06 06:42 nba
+
+ * snmplib/mib.c:
+
+ Fix missing length byte when setting index with checks disabled
+
+2003-06-06 01:32 dts12
+
+ * man/snmpd.conf.5.def, agent/mibgroup/mibII/vacm_vars.c
+:
+
+ Clarify which "r[ow]{user,community}" parameters are optional, and in which combinations.
+
+2003-06-04 05:56 dts12
+
+ * agent/helpers/cache_handler.c,
+ include/net-snmp/agent/cache_handler.h:
+
+ First pass at a data-caching helper - independent of individual MIB modules.
+ (i.e. it's up to each MIB module to provide "load data" and "free data"
+ routines, but the handling of when to load these caches is done here).
+
+ The intention is that this functionality will be SNMP-manageable (including
+ configuration of validity timeouts, invalidation of cached values, etc).
+ But for now, this is just the basic handler.
+
+2003-06-04 05:50 dts12
+
+ * agent/helpers/scalar_group.c,
+ include/net-snmp/agent/scalar_group.h:
+
+ Single helper to implement a group of scalar objects in one go.
+ (Closer to the model of the earlier v4 API)
+
+2003-06-03 17:14 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ mention where "later" actually is.
+
+2003-06-02 05:46 dts12
+
+ * agent/mibgroup/host/hr_proc.h:
+
+ Declarations for improved Solaris CPU support from patch #738465)
+ (Oops!)
+
+2003-06-02 05:35 dts12
+
+ * apps/snmptrapd_handlers.c:
+
+ Simple implementation of forwarding traps to another destination.
+ (I've got a number of ideas of how this could be done more flexibly,
+ but this serves as a basic proof-of-concept, for feedback & comment)
+
+2003-06-02 05:33 dts12
+
+ * apps/: snmptrapd.c, snmptrapd_handlers.c,
+ snmptrapd_handlers.h:
+
+ Modularised approach to different styles of handling incoming traps.
+ This seems to retain the same behaviour and output formats as the
+ earlier code, but should be much more flexible to extend and adapt.
+
+2003-05-30 17:12 hardaker
+
+ * agent/mibgroup/agent/nsDebug.c:
+
+ make use of new exported items from snmp_debug.
+
+2003-05-30 17:11 hardaker
+
+ * local/: mib2c.access_functions.conf,
+ mib2c.check_values.conf:
+
+ more cleanups
+
+2003-05-30 16:53 hardaker
+
+ * local/: Makefile.in, mib2c.access_functions.conf,
+ mib2c.check_values.conf, mib2c.check_values_local.conf,
+ mib2c.iterate.conf, mib2c.iterate_access.conf:
+
+ Update to mib2c code for producing what I think should be an easier to
+ use API set (that is not all wrapped into a single function).
+
+2003-05-30 16:51 hardaker
+
+ * mibs/NET-SNMP-AGENT-MIB.txt:
+
+ fix mib typo
+
+2003-05-30 16:51 hardaker
+
+ * include/net-snmp/library/oid_stash.h, snmplib/oid_stash.c
+:
+
+ define a noop free function.
+
+2003-05-30 16:50 hardaker
+
+ * include/net-snmp/library/snmp_debug.h, snmplib/snmp_debug.c
+:
+
+ export information needed by the new debug modules.
+
+2003-05-30 14:48 hardaker
+
+ * FAQ:
+
+ added a compiling section with one new question about libelf. Other questions probably should be moved to the new section
+
+2003-05-30 05:14 dts12
+
+ * man/: Makefile.in, snmpvacm.1.def:
+
+ Preliminary man page for snmpvacm
+
+2003-05-30 03:59 dts12
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ Handle block sizes <1K when converting block counts to Kb.
+ Reported by Eugene V. Chupriyanov (way back in October!).
+ Flaws with the implementation of this patch are my responsibility.
+ (I'm not totally happy about casting to float in this way,
+ but it seemed the best of a bad lot).
+
+2003-05-30 03:38 dts12
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ Significantly improved support for Solaris CPU information
+ (including description, status and multi-CPU support).
+ Thanks to James Irwin for implementing it (see patch #738465)
+ No thanks to Dave Shield for sitting on it for a couple of weeks.
+ Bad Dave! Bad Dave!
+
+2003-05-28 17:25 hardaker
+
+ * agent/helpers/: old_api.c (V5-0-patches.1), old_api.c:
+
+ remove unused code as pointed out by Peter Warasin
+
+2003-05-28 16:03 hardaker
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ fix getbulk operations (hopefully), as pointed out by Ron Tabor.
+
+2003-05-28 06:12 dts12
+
+ * apps/snmpdelta.c:
+
+ Clear the output buffer before displaying the second (or subsequent)
+ varbind in a multi-value table format. Bug spotted by Stefano Bodrato.
+
+2003-05-28 05:14 dts12
+
+ * include/net-snmp/agent/row_merge.h,
+ agent/helpers/Makefile.in, agent/helpers/row_merge.c:
+
+ Helper to group related requests for the same row together. Sub-handlers
+ can therefore work with multiple varbinds, all relating to the same row.
+
+ This was originally intended for use with the iterator helper, but
+ that helper is apparently being reworked at the moment. But this seems
+ a potentially useful feature anyway, so I'm committing it regardless!
+
+2003-05-28 04:19 dts12
+
+ * apps/snmptrapd.c:
+
+ Remove stray ^M line endings
+
+2003-05-28 02:21 dts12
+
+ * agent/mibgroup/misc/: dlmod.c, dlmod.h:
+
+ Remove redundent version of 'dlmod'. This was moved to 'ucd-snmp'
+ in 2000, and this 'misc' version has been effectively untouched since.
+ Leaving it around is just asking for people to get confused.
+
+2003-05-27 08:56 dts12
+
+ * AGENT.txt:
+
+ Mention that this describes the v4 API, rather than the v5 helper mechanism.
+
+2003-05-21 10:58 hardaker
+
+ * dist/Makefile:
+
+ rpm fixes
+
+2003-05-21 10:58 hardaker
+
+ * dist/net-snmp.spec:
+
+ install the spec file
+
+2003-05-21 10:56 hardaker
+
+ * agent/mibgroup/: agent/nsTransactionTable.c,
+ mibII/vacm_context.c:
+
+ Fix for proper non-serialized iterator usage.
+
+2003-05-21 06:04 dts12
+
+ * agent/mibgroup/agent_mibs.h, agent/mibgroup/agent/nsDebug.c
+, agent/mibgroup/agent/nsDebug.h,
+ mibs/NET-SNMP-AGENT-MIB.txt:
+
+ New MIB group to monitor and control debugging output from the agent.
+ Note that this is a provisional implementation, and the MIB definitions
+ are currently subject to change (at least until we make a full release
+ including this group)
+
+2003-05-21 04:36 dts12
+
+ * agent/mibgroup/ucd-snmp/: pass.c (V4-2-patches.7), pass.c:
+
+ Fix passing of "set" parameters to a pass-through script
+ (Bug #689936, fixed by Eric Bowles)
+
+2003-05-20 07:37 dts12
+
+ * snmplib/snmp_debug.c:
+
+ Manu Sharma's dynamically-configurable debug token handling.
+
+2003-05-20 05:16 dts12
+
+ * agent/helpers/watcher.c, include/net-snmp/agent/watcher.h
+:
+
+ Implement a "watched spinlock" helper.
+
+2003-05-20 04:23 dts12
+
+ * agent/mibgroup/ucd-snmp/loadave.c:
+
+ Fix load average support for AIX5 (Bug #563978 reported by Jeff Cunningham)
+
+2003-05-20 03:29 dts12
+
+ * README.win32:
+
+ Incorporate Nikolai Devereaux's overview of the Visual C++ organisation,
+ plus some minor rearrangement of sections, and tone down a somewhat
+ overly enthusiastic comment.
+
+2003-05-15 22:42 hardaker
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ osf5 patch that never got added.
+
+2003-05-15 22:42 hardaker
+
+ * snmplib/data_list.c:
+
+ Minor fix.
+
+2003-05-14 18:19 hardaker
+
+ * snmplib/snmpUnixDomain.c:
+
+ oopsie doosie floosie woozie
+
+2003-05-14 18:13 hardaker
+
+ * snmplib/snmpUnixDomain.c:
+
+ opps
+
+2003-05-14 15:17 hardaker
+
+ * local/Makefile.in:
+
+ install some other .conf files
+
+2003-05-14 15:17 hardaker
+
+ * local/mib2c.check_values.conf:
+
+ remove unneeded var
+
+2003-05-14 15:17 hardaker
+
+ * local/mib2c:
+
+ misc minor changes
+
+2003-05-14 15:12 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ caching support from a patch #726418 from Larry Simmons.
+
+2003-05-14 15:09 hardaker
+
+ * man/snmptable.1.def:
+
+ 2nd Patch 702711 by Ron Tabor documenting new snmptable options
+
+2003-05-14 15:07 hardaker
+
+ * NEWS, agent/mibgroup/mibII/vacm_vars.c,
+ snmplib/snmpUnixDomain.c:
+
+ Patch #713072 from Xiaofeng Ling for com2sec mappings on unix sockets
+ with per-socket mappings.
+
+2003-05-14 14:56 hardaker
+
+ * agent/mibgroup/host/hr_other.c:
+
+ Patch #735480 from Bruce Shaw: assume no co-processor for Suns, as is the more common case
+
+2003-05-14 08:44 dts12
+
+ * agent/mibgroup/host/hr_print.c:
+
+ Use /etc/printcap to detect printers in preference to running lpstat
+ (or the cgetnext() API). This seems more in keeping of our general
+ principle of trying to avoid invoking sub-processes wherever possible.
+
+2003-05-12 23:11 hardaker
+
+ * README:
+
+ Add Ron Tabor
+
+2003-05-12 23:10 hardaker
+
+ * NEWS:
+
+ document new snmptable options
+
+2003-05-12 23:08 hardaker
+
+ * apps/snmptable.c:
+
+ patch #702711 from Ron Tabor: Add new command line flags to snmptable for various new features
+
+2003-05-12 22:58 hardaker
+
+ * apps/: snmptrapd.c (V5-0-patches.5), snmptrapd.c:
+
+ Patch #735511 from Alex Burger: fix snmptrapd to ensure there are the correct number of varbinds
+
+2003-05-12 22:55 hardaker
+
+ * agent/mibgroup/ucd-snmp/: proxy.c (V5-0-patches.1), proxy.c
+:
+
+ Patch #736784 from Ron Tabor: fix proxies for restarted NSMPv3 sub-agents
+
+2003-05-09 08:47 dts12
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ Add various missing function names, supplied by Alex Burger
+
+2003-05-09 08:41 dts12
+
+ * win32/: win32.dsw, win32.opt, win32sdk.dsw,
+ libagent/libagent.dsp, libhelpers/libhelpers.dsp,
+ libsnmp/libsnmp.dsp, netsnmpmibs/netsnmpmibs.dsp,
+ netsnmpmibssdk/netsnmpmibssdk.dsp, snmpd/snmpd.dsp,
+ snmpdsdk/snmpd.dsp:
+
+ Apply Nikolai Devereaux's VC++ cleanup patch (#694766)
+ It appears to work OK - I just hope the line terminations
+ don't screw things up!
+
+2003-05-08 16:32 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ Patch #733880 from Alex Burger to fix useNumeric
+
+2003-05-08 16:21 hardaker
+
+ * perl/SNMP/t/startagent.pl:
+
+ Patch #734774 from Andrew Findlay: fix the test environment for snmpd to give it fully qualified path names for configuration files since snmpd now chdir's to /
+
+2003-05-08 16:15 hardaker
+
+ * README (V5-0-patches.6), README:
+
+ mention Andrew Findlay
+
+2003-05-08 16:14 hardaker
+
+ * perl/agent/: agent.xs (V5-0-patches.1), agent.xs:
+
+ (excellent) patch #705566 from Andrew Findlay on perl agent support:
+
+ 1) Agent cannot return MAC addresses containing zero octet.
+
+ 2) Agent coredumps when trying to return IP addresses
+ if these are supplied as dotted-quad or as a hostname
+ that fails to resolve.
+
+ 3) Agent corrupts OID values.
+
+ 4) Agent truncates any OCTET_STRING or BIT_STRING that
+ contains a zero octet (this is the root cause of (1) above)
+
+ API changes introduced:
+
+ a) IP addresses now passed as binary strings (4 octets
+ for IPv4) rather than dotted-quad or name. This
+ sidesteps the IPv4/IPv6 problem and leaves the calling
+ script to deal with name->address resolution and
+ associated error handling.
+
+2003-05-08 09:32 hardaker
+
+ * include/net-snmp/library/mib.h, include/net-snmp/library/parse.h,
+ include/net-snmp/library/snmp_api.h,
+ include/net-snmp/library/snmp_client.h, snmplib/mib.c,
+ snmplib/snmp_api.c, snmplib/snmp_client.c
+ (V5-0-patches.[1,1,1,1,3,4,1]), include/net-snmp/library/mib.h
+, include/net-snmp/library/parse.h,
+ include/net-snmp/library/snmp_api.h,
+ include/net-snmp/library/snmp_client.h, snmplib/mib.c,
+ snmplib/snmp_api.c, snmplib/snmp_client.c:
+
+ patch #710275 from Stephen J. Friedl: const fixes for APIs that don't modify their arguments
+
+2003-05-08 09:28 hardaker
+
+ * include/net-snmp/library/: system.h (V5-0-patches.1), system.h
+:
+
+ missed a commit for a perl patch
+
+2003-05-08 09:22 hardaker
+
+ * agent/mibgroup/mibII/: ipAddr.c (V5-0-patches.2), ipAddr.c:
+
+ Applied patch #712101: minor irix fix
+
+2003-05-08 09:12 hardaker
+
+ * perl/: Makefile.PL, Makefile.subs.pl, ASN/Makefile.PL
+, OID/Makefile.PL, SNMP/Makefile.PL, SNMP/README
+, SNMP/SNMP.xs, agent/Makefile.PL,
+ agent/default_store/Makefile.PL, default_store/Makefile.PL
+:
+
+ patch #715603: fix perl module builds under windows
+
+2003-05-08 08:31 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ apply patch [ 724927 ] to fix log msg; add \n to log msgs
+
+2003-05-08 08:29 rstory
+
+ * include/net-snmp/library/snmp_assert.h:
+
+ chg NET_SNMP_USE_ASSERT define to NETSNMP_USE_ASSERT to be consistent
+
+2003-05-05 15:36 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ move in agentx documentation someone only added to the patches branch (bad someone)
+
+2003-05-05 15:33 hardaker
+
+ * man/: snmpd.conf.5.def (V5-0-patches.4), snmpd.conf.5.def:
+
+ document agentxPingInterval
+
+2003-04-29 16:31 hardaker
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ Really fix solaris by removing support for the cidr table function.
+
+2003-04-29 16:29 hardaker
+
+ * agent/mibgroup/mibII/: var_route.c, var_route.h:
+
+ attempt to fix solaris by removing support for the cidr table function.
+
+2003-04-29 01:53 dts12
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ Linux Multi-CPU detection (hopefully!).
+ Done at initialisation, so won't detect changes during run time.
+ (probably fairly unlikely!).
+ Also changes device index value for single CPU device on other archs.
+
+2003-04-29 01:51 dts12
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ First draft of Linux CPU detection (still only supports one CPU).
+
+2003-04-29 01:49 dts12
+
+ * agent/mibgroup/host/: hr_proc.c, hr_other.c:
+
+ Consolidate all hrProcessorTable implementation into one place.
+ (Basically just moving code from hr_other.c to hr_proc.c)
+
+2003-04-28 23:40 hardaker
+
+ * snmplib/data_list.c:
+
+ - doxygen documentation for everything (gasp)
+ - Support for saving/restoring of entire data_lists.
+
+2003-04-28 23:38 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_bulk_to_next.3,
+ netsnmp_data_list.3, netsnmp_debug.3,
+ netsnmp_handler.3, netsnmp_instance.3,
+ netsnmp_library.3, netsnmp_mib_utilities.3,
+ netsnmp_mode_end_call.3, netsnmp_multiplexer.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_methods.3, netsnmp_oid_stash.3
+, netsnmp_old_api.3, netsnmp_read_only.3,
+ netsnmp_scalar.3, netsnmp_serialize.3,
+ netsnmp_set_data.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_todo.3, netsnmp_util.3, netsnmp_watcher.3
+:
+
+ make docs.
+
+2003-04-28 23:37 hardaker
+
+ * include/net-snmp/library/data_list.h:
+
+ added prototypes for save/restore of data lists.
+
+2003-04-28 23:36 hardaker
+
+ * include/net-snmp/utilities.h:
+
+ put data_list.h below callback.h
+
+2003-04-28 23:35 hardaker
+
+ * NEWS:
+
+ document snmptrapd -t and diskio on linux
+
+2003-04-25 11:23 hardaker
+
+ * README:
+
+ opps
+
+2003-04-25 08:01 dts12
+
+ * local/mib2c:
+
+ Fix typo in 'WriteOnly' (see bug #711324)
+
+2003-04-25 07:13 hardaker
+
+ * README:
+
+ added people
+
+2003-04-25 07:12 hardaker
+
+ * configure, configure.in:
+
+ document diskio support for linux
+
+2003-04-25 07:11 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Patch #712259 from James Knitter: diskio support for linux
+
+2003-04-25 07:02 hardaker
+
+ * man/read_config.3.def:
+
+ patch #710687: fix formatting bug
+
+2003-04-25 06:57 hardaker
+
+ * agent/mibgroup/: kernel_sunos5.c, kernel_sunos5.h:
+
+ patch #702351 from James Irwin: a new getKstatString() function.
+
+2003-04-25 06:00 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ mention the -e ENGINEID flag for createUser.
+ - pointed out by Dana Cook
+
+2003-04-24 08:19 dts12
+
+ * apps/: snmpusm.c, snmpvacm.c:
+
+ Fix a typo in output messages. (See Bug #726943)
+
+2003-04-24 06:00 dts12
+
+ * snmplib/snmpCallbackDomain.c:
+
+ Report back failures in netsnmp_callback_close correctly.
+ Patch #724928 by Peter Warasin
+
+2003-04-23 07:38 dts12
+
+ * apps/snmptable.c:
+
+ Patch #725141 by Peter Warasin: Fix segmentation fault on snmptable
+
+2003-04-23 06:56 dts12
+
+ * snmplib/: container_binary_array.c, snmpusm.c:
+
+ Patch #724913 by Peter Warasin - removes 2 compiler warnings
+
+2003-04-23 06:46 dts12
+
+ * Makefile.in:
+
+ Substitute sysconfdir correctly when building sedscript.
+ Patch #710689 by Peter Breitenlohner
+
+2003-04-23 06:31 dts12
+
+ * Makefile.rules, man/Makefile.in:
+
+ Install header files and man pages with appropriate permissions.
+ From patch #710685 by Peter Breitenlohner
+
+2003-04-23 06:22 dts12
+
+ * FAQ:
+
+ Fix references to incorrect API calls
+
+2003-04-23 03:06 dts12
+
+ * man/snmpd.conf.5.def:
+
+ Add an explicit example for com2sec address masking, as suggested by Andy Hood.
+
+2003-04-22 06:48 dts12
+
+ * snmplib/snmp_api.c:
+
+ Restore the original debug indentation level when dumping an SNMPv1/v2c
+ request PDU. Reported by Peter Warasin
+
+2003-04-17 07:23 dts12
+
+ * agent/snmp_agent.c:
+
+ Propagate error status values back up to the main agent processing
+ (so that e.g. failed SNMPv2 set requests using a read-only community
+ report a failure, rather than appearing to succeed!)
+
+2003-04-16 06:37 dts12
+
+ * mibs/NET-SNMP-MIB.txt:
+
+ Define a "private experimentation" area of the OID tree,
+ for those who wish to have a play with things, and don't
+ yet have an enterprise OID of their own.
+
+ See the net-snmp-users thread 'OID registration', from March/April 2003.
+
+2003-04-16 06:32 dts12
+
+ * perl/SNMP/SNMP.xs:
+
+ Twaek the default output format to be bare the suffix form
+ (as expected by SNMP::OID test harness).
+ We should probably default to MIB::variable form, to match
+ the C library, and provide a flag for the bare suffix.
+
+2003-04-16 02:46 dts12
+
+ * perl/SNMP/SNMP.xs:
+
+ Fix handling of 'UseNumeric' and 'UseLongNames' for get/getnext/getbulk methods.
+
+ Fixing 'getnext'/'getbulk' mostly involved updating the consolidated
+ NETSNMP_DS_LIB_OID_OUTPUT_FORMAT' setting, rather than the individual booleans.
+ Fixing 'get' required more significant changes to the output code, so I simply
+ copied the 'getnext' routine en-masse, and tweaked it appropriately.
+ There is a large amount of overlap between these three routines, and it might
+ be worth looking at consolidating the common code in some way.
+
+2003-04-16 02:42 dts12
+
+ * include/net-snmp/library/parse.h, snmplib/parse.c,
+ perl/SNMP/README, perl/SNMP/SNMP.pm, perl/SNMP/SNMP.xs
+:
+
+ Apply Alex Burger's perl 'translateObj' handling patch (#722075)
+
+2003-04-15 10:56 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Patch from Kirill Semenkov for one more fix to linux interface speed
+ determination.
+
+2003-04-10 08:16 dts12
+
+ * agent/mibgroup/host/: hr_disk.c, hr_disk.h,
+ hr_partition.c:
+
+ Fix handling of hrPartitionTable, broken during
+ The Great SUSE 'printf' Hunt.
+ Thanks to Johannes Schmidt-Fischer for this patch.
+
+2003-04-09 01:52 dts12
+
+ * mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ Import SnmpAdminString, as suggested by Vadim Tarassov.
+
+2003-04-08 07:57 dts12
+
+ * local/mib2c.scalar.conf:
+
+ Fix the error code used for unavailable resources.
+ Spotted by chichien.
+
+2003-04-02 09:23 sradman
+
+ * configure.in:
+
+ improve lmSensors support
+ - check for headers
+ - check for libs
+
+2003-04-02 06:31 sradman
+
+ * agent/mibgroup/ucd-snmp/lmSensors.h:
+
+ add LM-SENSORS-MIB when module is included
+
+2003-03-28 06:48 hardaker
+
+ * README.krb5 (V5-0-patches.1), README.krb5:
+
+ Ken Hornstein noted that the rwuser -s flag was missing it's argument
+
+2003-03-28 06:47 hardaker
+
+ * snmplib/: snmpksm.c (V5-0-patches.1), snmpksm.c:
+
+ Patch from Ken for misc krb5 fixes (encryption types, New crypto support,...
+
+2003-03-20 11:18 sradman
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ fix bug #672464: ifAdminStatus must change to down
+ - ifAdminStatus up if interface is UP
+ - ifOperStatus up if interface is UP and RUNNING
+ - added support for the "link_up" kstat
+ - added Cassini Gigabit-Ethernet (ce) support
+
+2003-03-19 11:45 rstory
+
+ * Makefile.in:
+
+ remove trailing \ from last line of perl rules
+
+2003-03-13 16:03 hardaker
+
+ * agent/: snmp_agent.c (V5-0-patches.1), snmp_agent.c:
+
+ patch from Tommy Christensen to fix some AgentX (mostly) memory leaks
+
+2003-03-12 10:39 hardaker
+
+ * net-snmp-config.in (V5-0-patches.3), net-snmp-config.in:
+
+ patch #699380: From Christophe Kalt: make net-snmp-config do what it's document to do (add -L@libdir@)
+
+2003-03-12 08:48 hardaker
+
+ * snmplib/: snmp_api.c (V5-0-patches.3), snmp_api.c:
+
+ patch #700672: reset itmp to the new value length after decoding a hex string
+
+2003-03-12 08:41 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ return indexes for augmented tables
+
+2003-03-12 08:33 hardaker
+
+ * agent/snmp_vars.c, agent/mibgroup/mibII/vacm_vars.c,
+ snmplib/snmpUnixDomain.c, README:
+
+ Patch #701398: com2secunix token from Xiaofeng Ling for unix sockets
+
+2003-03-12 07:58 hardaker
+
+ * testing/: README, RUNTESTS:
+
+ update to real world and add better -h output
+
+2003-03-10 17:20 hardaker
+
+ * snmplib/scapi.c:
+
+ attempt to correct for dynamic loading of a older openssl library, which is common if you have the mod_ssl rpm installed and a newer libcrypto library at the same time
+
+2003-03-10 14:45 hardaker
+
+ * snmplib/scapi.c:
+
+ attempt to fix the openssl free bug for the last time
+
+2003-03-05 22:42 rstory
+
+ * configure (V5-0-patches.2), configure:
+
+ update for new configure.in
+
+2003-03-05 22:36 rstory
+
+ * configure.in:
+
+ fix for libwrap w/nsl
+
+2003-03-04 09:47 hardaker
+
+ * agent/mibgroup/agent/: nsModuleTable.c (V5-0-patches.1),
+ nsModuleTable.c:
+
+ wrong type returned for nsModuleModes as reported by Michael Kirkham
+
+2003-03-04 01:54 dts12
+
+ * INSTALL:
+
+ Mention the need to configure the agent.
+
+2003-03-01 07:27 rstory
+
+ * agent/mibgroup/agentx/: subagent.c (V5-0-patches.1), subagent.c
+:
+
+ agentx patch from Tommy Christensen: better error checking
+
+2003-03-01 06:59 rstory
+
+ * agent/mibgroup/agentx/: master.c (V5-0-patches.1), master.c
+:
+
+ agentx patch from Tommy Christensen: don't create delegated cache for CLEANUPSET
+
+2003-02-28 20:45 hardaker
+
+ * perl/SNMP/: Makefile.PL (V5-0-patches.3), Makefile.PL:
+
+ typo
+
+2003-02-28 20:35 hardaker
+
+ * agent/mibgroup/host/hr_system.c:
+
+ Patch #551909 from Gary Edwards: detect zombie processes and prevent
+ them from being counted as valid users.
+
+2003-02-28 20:10 hardaker
+
+ * perl/SNMP/: Makefile.PL (V5-0-patches.2), Makefile.PL:
+
+ Patch #597629 from Matt Selsky to fix man page installation
+
+2003-02-28 20:02 hardaker
+
+ * dist/net-snmp-solaris-build/: DEVENV, elfdepend.sh,
+ net-snmp-5.0.6-build:
+
+ patch #654581 from Stefan Radman: Solaris Packaging build scripts
+
+2003-02-28 19:40 hardaker
+
+ * apps/snmptrapd.c:
+
+ Patch #695312 from Alex Burger: add -t switch to disable syslog.
+
+2003-02-28 19:39 hardaker
+
+ * man/snmptrapd.8.def:
+
+ document -t
+
+2003-02-28 02:08 dts12
+
+ * snmplib/parse.c:
+
+ Simple patch to catch re-declarations of the "top-level" objects.
+ Supplied by Sean Burke
+
+2003-02-28 01:13 dts12
+
+ * agent/mibgroup/mibII/ipv6.c:
+
+ Return the correct values for ipv6Forwarding.
+ Patch supplied by Yixiong Zou (Bug #694745)
+
+2003-02-26 21:56 rstory
+
+ * local/mib2c.array-user.conf:
+
+ default octet strings to unsigned char arrays; fix example; fix logic of
+ conditional; make code referencing can_(de)activate conditional with same logic
+ used to generate the functions themselves
+
+2003-02-26 10:34 hardaker
+
+ * testing/tests/: Sv3vacmconfig, Svacmconfig,
+ T130snmpv1vacmget, T131snmpv2cvacmget,
+ T132snmpv3vacmget, T140snmpv1vacmgetfail,
+ T141snmpv2cvacmgetfail, T142snmpv3vacmgetfail:
+
+ Patch #687837 from Xiaofeng Ling for VACM test cases
+
+2003-02-26 10:19 hardaker
+
+ * Makefile.in, acconfig.h, win32/config.h,
+ agent/mibgroup/mibII/interfaces.c, win32/config.h.borland
+, agent/mibgroup/mibII/tcp.c,
+ agent/mibgroup/mibII/tcpTable.c,
+ agent/mibgroup/mibII/udpTable.c,
+ include/net-snmp/net-snmp-config.h.in, README,
+ include/net-snmp/system/osf5.h:
+
+ patch #690353 from Kevin Graham: port to Tru64 v5 / osf5
+
+2003-02-26 10:10 hardaker
+
+ * configure.in, configure:
+
+ patch #692834 from David Vrabel: add --without-rpm for disabling rpm checks
+
+2003-02-26 08:28 dts12
+
+ * Makefile.top:
+
+ Oops - missed the definition of 'INSTALL_DATA' from Peter's original patch.
+ Sorry!
+
+2003-02-26 07:11 hardaker
+
+ * README:
+
+ Thanks to Srikanth Pindiproli
+
+2003-02-26 07:10 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ update to patch #655444: document includeAllDisks from Srikanth Pindiproli
+
+2003-02-26 04:45 dts12
+
+ * snmplib/read_config.c:
+
+ Stomp on trailing whitespace in config lines.
+ This allows token comparisons to work as expected.
+ (See bug #690770)
+
+2003-02-26 04:25 dts12
+
+ * apps/snmptrapd.c:
+
+ Fix getopt handling of -S (see bug #693167)
+
+2003-02-25 11:46 rstory
+
+ * Makefile.in, Makefile.top:
+
+ don't try and run autoconf/autoheader if not installed
+
+2003-02-25 06:48 dts12
+
+ * Makefile.in:
+
+ Apply Peter Breitenlohner's net-snmp-config patch (#692373)
+
+2003-02-25 06:41 dts12
+
+ * snmplib/snmpv3.c:
+
+ Recognise "defVersion v3" as well as "defVersion 3" as documented
+ in the man pages (prior to Peter Breitenlohner's correction)
+ [We might as well support both styles....]
+
+2003-02-25 06:06 dts12
+
+ * man/: mib2c.1.def, read_config.3.def, snmp.conf.5.def
+, snmp_config.5.def, snmpcmd.1.def,
+ snmpconf.1.def, snmpd.conf.5.def, snmptrapd.8.def
+, snmptrapd.conf.5.def:
+
+ Apply Peter Breitenlohner's documentation changes
+ (patches #692381, 692382 and 692388)
+
+2003-02-25 06:04 dts12
+
+ * EXAMPLE.conf.def, FAQ, sedscript.in,
+ local/Makefile.in, mibs/Makefile.in, man/Makefile.in
+, man/snmpd.1.def, man/snmpd.8.def:
+
+ Apply Peter Breitenlohner's configuration-related documentation and installation changes.
+ (patches #692372, 692377, 692379 and 692386)
+
+2003-02-25 05:17 dts12
+
+ * agent/mibgroup/host/: hr_storage.c, hr_storage.h:
+
+ List "fixed type" storage entries first, so that there isn't an
+ arbitrary limit of 100 disk-based storage entries.
+
+2003-02-25 05:07 dts12
+
+ * agent/mibgroup/agentx/agentx_config.c:
+
+ Handle user/group names when setting AgentX socket ownership.
+
+2003-02-25 03:44 dts12
+
+ * agent/mibgroup/agentx/agentx_config.c,
+ agent/mibgroup/agentx/master.c,
+ include/net-snmp/agent/ds_agent.h:
+
+ Preliminary patch to support configuration of AgentX socket permissions.
+
+ Personally, I'm not convinced that this is ready for committing to the
+ CVS tree yet, but My Master Has Spoken, and I Must Obey.......
+
+2003-02-21 20:19 hardaker
+
+ * agent/mibgroup/mibII/: ipCidrRouteTable.c,
+ ipCidrRouteTable.h, ipCidrRouteTable_access.c,
+ ipCidrRouteTable_access.h, ipCidrRouteTable_checkfns.c,
+ ipCidrRouteTable_checkfns.h, ipCidrRouteTable_columns.h
+, ipCidrRouteTable_enums.h:
+
+ A beginning implementation of the IP-FORWARD-MIB::ipCidrRouteTable.
+ - this table is a replacement for the obsolete ipRouteTable, which
+ isn't even implemented by most vendors any more.
+ - not complete. Write support not implemented yet. Read-support
+ working though.
+ - Should work on everything but hpux11? testing needed.
+ - this is another example of a table_iterator application (different
+ than the rest using accessors).
+
+2003-02-21 20:14 hardaker
+
+ * agent/mibgroup/mibII/: route_headers.h, var_route.c:
+
+ moved headers to a separate file usable by other modules.
+ exported the collected route table.
+
+2003-02-21 20:14 hardaker
+
+ * agent/mibgroup/mibII/var_route.h:
+
+ moved headers to a separate file usable by other modules
+
+2003-02-21 20:12 hardaker
+
+ * local/mib2c.iterate_access.conf:
+
+ An alternate table_iterator .conf file (that may eventually become the
+ default). This one uses accessor functions to get/set data and should
+ take care of most other SNMP specific stuff for you. Not complete,
+ and a good percentage of the code repetition will likely move into
+ another sub-iterator handler in the future. The ipCidrRouteTable is
+ an example of this output.
+
+2003-02-21 20:10 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ - comment additions and cleanups.
+ - put the free/etc function pointers in an #ifdef clause
+
+2003-02-21 20:09 hardaker
+
+ * local/mib2c.column_enums.conf:
+
+ comment move for better formatting.
+
+2003-02-21 20:08 hardaker
+
+ * local/mib2c.check_values.conf:
+
+ - generate and use the enums header file.
+ - generate a .h file.
+ - misc fixes.
+
+2003-02-21 20:08 hardaker
+
+ * local/mib2c.access_functions.conf:
+
+ A .conf file to generate get_/set_ access functions for each column.
+ - iterator specific.
+
+2003-02-21 20:07 hardaker
+
+ * local/mib2c:
+
+ - enum fix.
+ - don't source (run) .conf files twice.
+
+2003-02-21 20:06 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_bulk_to_next.3,
+ netsnmp_debug.3, netsnmp_handler.3, netsnmp_instance.3
+, netsnmp_library.3, netsnmp_mib_utilities.3,
+ netsnmp_mode_end_call.3, netsnmp_multiplexer.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_methods.3, netsnmp_oid_stash.3
+, netsnmp_old_api.3, netsnmp_read_only.3,
+ netsnmp_scalar.3, netsnmp_serialize.3,
+ netsnmp_set_data.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_todo.3, netsnmp_util.3, netsnmp_watcher.3
+:
+
+ - doxygen update.
+ - includes new netsnmp_oid_stash man page.
+
+2003-02-21 20:06 hardaker
+
+ * include/net-snmp/library/oid_stash.h, snmplib/oid_stash.c
+:
+
+ - doxygen comment everything
+ - started (not complete) a getnext function.
+ - implemented a "free the tree" function.
+
+2003-02-21 20:04 hardaker
+
+ * .cvsignore:
+
+ added autom4te.cache
+
+2003-02-21 20:04 hardaker
+
+ * configure, configure.in:
+
+ add the include directory to the module egrep cpp -I list.
+
+2003-02-21 01:50 dts12
+
+ * local/FAQ2HTML:
+
+ HTML-escape '<' and '>' characters in FAQ entries
+
+2003-02-20 08:17 dts12
+
+ * local/mib2c.scalar.conf:
+
+ Use 'netsnmp_register_scalar' instead of 'netsnmp_register_instance'
+ for handling scalar objects.
+
+2003-02-19 21:39 hardaker
+
+ * NEWS:
+
+ patch #657808: calculate a proper ifSpeed under linux when possible
+ and do more proper ifOperStatus state determination.
+
+2003-02-19 21:36 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ patch #657808: calculate a proper ifSpeed under linux when possible
+ and do more proper ifOperStatus state determination.
+
+2003-02-19 16:53 hardaker
+
+ * snmplib/snmp.c:
+
+ top level doxygen web page text
+
+2003-02-19 16:52 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_bulk_to_next.3,
+ netsnmp_debug.3, netsnmp_handler.3, netsnmp_instance.3
+, netsnmp_library.3, netsnmp_mib_utilities.3,
+ netsnmp_mode_end_call.3, netsnmp_multiplexer.3,
+ netsnmp_netsnmp_iterator_info_s.3,
+ netsnmp_netsnmp_mib_handler_methods.3, netsnmp_old_api.3
+, netsnmp_read_only.3, netsnmp_scalar.3,
+ netsnmp_serialize.3, netsnmp_set_data.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_data.3, netsnmp_table_dataset.3,
+ netsnmp_table_iterator.3, netsnmp_table_iterator.h.3,
+ netsnmp_todo.3, netsnmp_util.3, netsnmp_watcher.3
+:
+
+ doxygen update.
+
+2003-02-19 16:52 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ run the column_enum and column_define .conf files and include those headers.
+
+2003-02-19 16:51 hardaker
+
+ * local/mib2c:
+
+ Add a @run@ tag to run other mib2c configuration files from the
+ current one.
+
+2003-02-19 16:51 hardaker
+
+ * agent/helpers/table_iterator.c,
+ include/net-snmp/agent/table_iterator.h:
+
+ more (bad) documentation for the iterator (gasp)
+
+2003-02-19 16:50 hardaker
+
+ * doxygen.conf:
+
+ add include directories for processing.
+
+2003-02-19 16:50 hardaker
+
+ * agent/mibgroup/examples/notification.c:
+
+ remove old unused comment.
+
+2003-02-19 13:11 hardaker
+
+ * snmplib/tools.c:
+
+ converted a bunch of non-doxygen docs to doxygen docs.
+
+2003-02-19 13:03 hardaker
+
+ * include/net-snmp/library/tools.h:
+
+ doxygenize a few defines.
+
+2003-02-18 07:56 hardaker
+
+ * configure:
+
+ run configure
+
+2003-02-17 11:20 rstory
+
+ * dist/nsb-functions:
+
+ add smux to list of modules for distribution; move test for make inside of
+ nsb-make; add blank line above ABORT; remove tee to logfile, as it eats
+ rc from command; add NOAUTODEPS=y to all make steps; do make touchit when
+ target = all; use nsb-make for distclean
+
+2003-02-17 11:18 rstory
+
+ * Makefile.in:
+
+ don't do any of the autoconf/autoheader deps if NOAUTODEP=* specified
+
+2003-02-17 11:15 rstory
+
+ * Makefile.rules:
+
+ add another dir level for make depends (per DS, from a while back - thought
+ this was already checked in)
+
+2003-02-17 07:30 nba
+
+ * README.solaris:
+
+ Note about bad /usr/xpg4/bin/sed
+
+2003-02-17 06:31 nba
+
+ * agent/mibgroup/ucd-snmp/logmatch.c:
+
+ The include for dmalloc better come after the std includes
+
+2003-02-17 05:36 nba
+
+ * configure.in:
+
+ Dont search /usr/local for dmalloc unless user explicitly asks for it
+
+2003-02-17 05:34 nba
+
+ * configure.in:
+
+ Bring back the developer warnings
+
+2003-02-17 05:33 nba
+
+ * configure.in:
+
+ Fix text for socklen_t
+
+2003-02-17 05:31 nba
+
+ * agent/mibgroup/ucd-snmp/proc.c:
+
+ Some error messages for Solaris
+
+2003-02-17 04:23 nba
+
+ * mibs/Makefile.in:
+
+ Install NET-SNMP-TC mib
+
+2003-02-14 07:41 hardaker
+
+ * NEWS:
+
+ includeAllDisks
+
+2003-02-14 07:38 hardaker
+
+ * agent/mibgroup/ucd-snmp/: disk.c, disk.h:
+
+ Patch #655444 from Srikanth Pindiproli:
+ Implement a new includeAllDisks snmpd.conf token to place all found
+ disks into the dskTable listing.
+
+2003-02-13 17:02 hardaker
+
+ * agent/mibgroup/mibII/: var_route.c (V5-0-patches.1), var_route.c
+:
+
+ Patch #654329: double check lengths when copying
+
+2003-02-13 14:59 hardaker
+
+ * configure, configure.in, agent/agent_read_config.c
+, agent/helpers/all_helpers.c,
+ agent/helpers/table_dataset.c, apps/snmptable.c,
+ apps/snmptranslate.c, apps/snmpnetstat/main.c,
+ include/net-snmp/mib_api.h,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/library/mib.h, snmplib/mib.c,
+ snmplib/oid_stash.c, snmplib/parse.c, snmplib/scapi.c
+, snmplib/snmp_api.c, snmplib/snmp_parse_args.c:
+
+ --disable-mib-lodaing removes the mib loading code from builds.
+ (oid printing are forced numeric)
+ This saves about about 200k in binary size on a linux box.
+ This saves about about 100k in running size on a linux box (assuming
+ the with-mib-loading is actually not loading anything just to be
+ fair, otherwise its about >500k).
+
+2003-02-13 08:01 hardaker
+
+ * Makefile.in, NEWS, aclocal.m4, configure
+, configure.in, include/net-snmp/net-snmp-config.h.in
+:
+
+ - Misc configure changes/fixes (eg, output the disabled states for perl)
+ - A bunch of new configure options:
+ --disable-applications Do not build the apps (snmpget, ...).
+ --disable-agent Do not build the agent (snmpd).
+ --disable-manuals Do not install the manuals.
+ --disable-scripts Do not install the scripts (mib2c, ...).
+ --disable-mibs Do not install the mib files.
+
+2003-02-13 06:54 hardaker
+
+ * agent/helpers/table_data.c:
+
+ check entry node as suggested by Irfan Sheriff
+
+2003-02-13 05:59 dts12
+
+ * configure:
+
+ Remove invalid 'testing' config_file target.
+ Since this is a directory, 'config.status' fails to create it.
+
+ I'm not quite sure where this appeared from. It's not part of
+ the configure script generated by autoconf 2.53, but it might
+ have been introduced between there and 2.57.
+
+2003-02-13 02:10 dts12
+
+ * testing/Makefile.in:
+
+ Mechanism for passing additional options to the test run.
+ Suggested by Andy Hood.
+
+2003-02-12 11:30 rstory
+
+ * configure, configure.in:
+
+ include agent/mibgroup headers from ${srcdir}
+
+2003-02-12 09:57 hardaker
+
+ * configure, configure.in:
+
+ - upgrade configure to autoconf 2.57
+ - This is functional now, but not all flags, features and tests have
+ been tested. Please report errors! There are more things to do,
+ like conversion of local macros (eg, STRUCT_FOR) to autoconf
+ newer standard macros.
+
+2003-02-12 06:01 hardaker
+
+ * agent/mibgroup/tunnel/: tunnel.h (V5-0-patches.1), tunnel.h
+ (V4-2-patches.[1,1]), tunnel.h:
+
+ update
+
+2003-02-11 18:05 hardaker
+
+ * agent/mibgroup/ucd-snmp/logmatch.c:
+
+ only define stuff if have_regex is defined
+
+2003-02-11 18:03 hardaker
+
+ * configure, configure.in:
+
+ run config_require checks through cpp
+
+2003-02-11 15:46 hardaker
+
+ * agent/helpers/table_data.c:
+
+ Irfan Sheriff pointed out a bug with getnext requests directly to
+ a column.
+
+2003-02-11 15:36 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ patch from Christophe Varoqui to fix dropping state change for thresholds.
+
+2003-02-11 08:26 dts12
+
+ * snmplib/: system.c (V4-2-patches.5), system.c:
+
+ Remove last remaining use of 'nlist' under HP-UX 10 & 11.
+ As per patch #656773 from Johannes Schmidt-Fischer
+
+2003-02-11 08:17 dts12
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ Checking the length of a string buffer once is sufficient.
+ Using 'strnncpy' [sic] to check this length twice is unnecessary...
+
+2003-02-11 08:05 hardaker
+
+ * agent/snmpd.c:
+
+ ifdef out unlikely-correct-code on win32
+
+2003-02-11 07:55 hardaker
+
+ * Makefile.in:
+
+ Mess with output of doxygen to add sf logos, etc, to the bottom of the
+ generated html files.
+
+2003-02-11 07:50 hardaker
+
+ * agent/snmpd.c:
+
+ Patch #655154 from Joel Rosdahl: more proper demonization:
+ - close stdin/stdout/stderr if appropriate.
+ - double fork.
+ - chdir / [I'm not convinced this is correct under windows? Anyone?]
+
+2003-02-11 07:30 hardaker
+
+ * agent/mibgroup/ucd-snmp/: pass.c, pass_persist.c:
+
+ patch #667694 (anon) to add back newlines to pass code
+
+2003-02-11 07:25 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Patch #662169 from Jan Willem Luiten: diskio support for Darwin
+
+2003-02-11 06:14 dts12
+
+ * perl/SNMP/t/: bulkwalk.t, set.t:
+
+ Fix tests for bulkwalk (duplicate header) and set (invalid OID constant)
+
+2003-02-11 04:44 dts12
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ Accommodate a fussy IRIX environment, which is picky about <unistd.h>
+ See bug #667726
+
+2003-02-10 16:58 hardaker
+
+ * agent/mibgroup/ucd-snmp/logmatch.c:
+
+ fix indent comment damage.
+
+2003-02-10 16:38 hardaker
+
+ * agent/mibgroup/ucd-snmp/logmatch.c:
+
+ EXTENSIBLE -> UCDAVIS_MIB
+
+2003-02-10 15:38 hardaker
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ Bruce Shaw pointed out a comment typo
+
+2003-02-10 15:38 hardaker
+
+ * perl/: ASN/Makefile.PL, OID/Makefile.PL,
+ agent/Makefile.PL, default_store/Makefile.PL,
+ SNMP/Makefile.PL:
+
+ fix my declarations as pointed out by Andrew Page
+
+2003-02-10 09:16 hardaker
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ file name typo
+
+2003-02-10 07:57 nba
+
+ * Makefile.in, aclocal.m4, ltmain.sh,
+ config.guess, config.sub, configure.in,
+ configure:
+
+ Update libtool to 1.4.3
+
+2003-02-10 07:09 hardaker
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ turn on log_match by default
+
+2003-02-10 06:39 hardaker
+
+ * README:
+
+ Added Christophe Varoqui to the thanks for his DISMAN patches
+
+2003-02-09 10:02 nba
+
+ * snmplib/mib.c:
+
+ An additional change to support 't' hints
+
+2003-02-06 21:17 hardaker
+
+ * agent/mibgroup/ucd-snmp/proc.c,
+ include/net-snmp/system/linux.h:
+
+ For linux, use /proc/X/status instead. It has the name of processes
+ when /proc/cmdline does not. A define (commented out) was put in
+ system/linux.h to revert to previous behavior if desired. I'm not
+ sure at which kernel release the status file was added.
+
+2003-02-06 20:04 hardaker
+
+ * agent/mibgroup/ucd-snmp/proc.c:
+
+ Add a debugging tag "proc" which prints process names as found in solaris.
+ (this should be nice when searching for unknown exact process names)
+
+2003-02-06 11:32 hardaker
+
+ * apps/snmptrapd.c, man/snmptrapd.8.def:
+
+ patch #674218: reopen log files on HUP.
+
+2003-02-06 10:42 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ document monitor -t for threshold monitoring
+
+2003-02-06 10:33 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ Patch from Christophe to support monitor -t for threshold monitoring
+
+2003-02-05 22:07 hardaker
+
+ * local/mib2c.check_values.conf:
+
+ A mib2c file that generates a bunch of functions to check the value of
+ incoming SET requests.
+ (not complete yet. Needs support for BITS enums and a header file
+ with prototypes)
+
+ Happy Birthday (late) to Robert.
+
+2003-02-05 22:05 hardaker
+
+ * local/mib2c:
+
+ Support for foreach on ranges.
+
+2003-02-05 03:25 dts12
+
+ * FAQ:
+
+ Clarify the local-only access for non-standard port AgentX connections.
+
+2003-02-05 01:13 dts12
+
+ * net-snmp-config.in:
+
+ Don't prompt for an authentication pass-phrase, if one has already
+ been supplied. Reported by Darren Gamble.
+
+2003-02-04 06:25 dts12
+
+ * FAQ:
+
+ Add an entry describing configuring AgentX on a non-standard port.
+
+2003-02-03 07:25 hardaker
+
+ * snmplib/: snmp_api.c (V5-0-patches.2), snmp_api.c:
+
+ From Richard Laing: change value check of a string to use a proper length.
+
+2003-01-29 07:19 hardaker
+
+ * INSTALL, perl/SNMP/README:
+
+ perl documentation updates from Harrie
+
+2003-01-24 07:38 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ patch #672021 from Joshua Giles: large set request fixes
+
+2003-01-22 14:45 dts12
+
+ * agent/helpers/: table.c, table_iterator.c:
+
+ Having found a new row to work with, update the index values as well.
+ This seems to fix the mismatch between the OID being processed
+ and the index varbinds.
+
+2003-01-20 19:11 rstory
+
+ * snmplib/test_binary_array.c:
+
+ add string test case for binary array testing
+
+2003-01-20 19:11 rstory
+
+ * snmplib/container_binary_array.c:
+
+ fixes for array_qsort - not quite sure why/how it worked before..:-/
+
+2003-01-20 19:07 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ new netsnmp_compare_mem; fix typo in debug message
+
+2003-01-20 19:05 rstory
+
+ * agent/mibgroup/versiontag:
+
+ create md5sums after creating gzipped tarball
+
+2003-01-14 06:14 dts12
+
+ * include/net-snmp/library/default_store.h,
+ snmplib/snmp_api.c:
+
+ Add support for 16-bit requestIDs, etc - for talking to broken agents.
+ (As per a suggestion of Niels, in discussion with Henrik Ostergaard Madsen)
+
+2003-01-14 05:56 hardaker
+
+ * agent/snmpd.c, doxygen.conf, agent/agent_handler.c
+, dist/RELEASE-INSTRUCTIONS:
+
+ doxygen changes
+
+2003-01-13 18:49 rstory
+
+ * man/: netsnmp_agent.3, netsnmp_handler.3:
+
+ update for 5.0.7
+
+2003-01-13 17:30 rstory
+
+ * snmplib/mib.c:
+
+ recognize new 't' code in display hints
+
+2003-01-13 17:07 rstory
+
+ * agent/helpers/table_iterator.c:
+
+ patch for memory leaks sent to coders by Jay Parlar
+
+2003-01-10 22:27 rstory
+
+ * FAQ, README, sedscript.in, perl/SNMP/SNMP.pm
+, snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.7 )
+
+2003-01-10 22:26 rstory
+
+ * ChangeLog, NEWS:
+
+ update for 5.0.7
+
+2003-01-10 22:15 rstory
+
+ * .cvsignore:
+
+ ignore configure-summary
+
+2003-01-10 22:14 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend
+, agent/mibgroup/Makefile.depend, apps/Makefile.depend
+, apps/snmpnetstat/Makefile.depend,
+ snmplib/Makefile.depend:
+
+ make depend
+
+2003-01-10 22:08 rstory
+
+ * .cvsignore:
+
+ ignore variations of changelog.add
+
+2003-01-10 17:09 hardaker
+
+ * snmplib/: mib.c, snmp_api.c:
+
+ doxygen output tags to put the recently defined functions into groups.
+
+2003-01-10 17:09 hardaker
+
+ * man/: Makefile.in, netsnmp_agent.3,
+ netsnmp_bulk_to_next.3, netsnmp_debug.3,
+ netsnmp_handler.3, netsnmp_instance.3,
+ netsnmp_library.3, netsnmp_mib_utilities.3,
+ netsnmp_mode_end_call.3, netsnmp_multiplexer.3,
+ netsnmp_old_api.3, netsnmp_read_only.3,
+ netsnmp_scalar.3, netsnmp_serialize.3, netsnmp_table.3
+, netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_todo.3, netsnmp_watcher.3:
+
+ doxygen updates
+
+2003-01-10 14:38 hardaker
+
+ * configure, configure.in:
+
+ opps
+
+2003-01-10 14:29 hardaker
+
+ * configure, configure.in:
+
+ remove double checking output
+
+2003-01-10 11:33 hardaker
+
+ * testing/tests/T0160snmpv2cbulkget:
+
+ fix positional arguments
+
+2003-01-10 06:04 dts12
+
+ * FAQ:
+
+ Reference Bruce Shaw's discussion of the perl compilation problems
+ (see README.solaris)
+
+2003-01-10 05:31 dts12
+
+ * FAQ:
+
+ Mention AgentX under windows, and beef up the perl stuff a bit.
+ Add a missing entry in the contents list.
+ (This may prove too late for 5.0.8, but at least it'll be ready for next time!)
+
+2003-01-09 15:41 hardaker
+
+ * man/Makefile.in:
+
+ make doc update.
+
+2003-01-09 15:38 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_bulk_to_next.3,
+ netsnmp_debug.3, netsnmp_handler.3, netsnmp_instance.3
+, netsnmp_mode_end_call.3, netsnmp_multiplexer.3,
+ netsnmp_old_api.3, netsnmp_read_only.3,
+ netsnmp_scalar.3, netsnmp_serialize.3, netsnmp_table.3
+, netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_todo.3, netsnmp_watcher.3:
+
+ make doc update.
+
+2003-01-09 15:37 hardaker
+
+ * agent/helpers/Makefile.in, agent/helpers/mode_end_call.c
+, include/net-snmp/agent/all_helpers.h,
+ include/net-snmp/agent/mode_end_call.h:
+
+ end-of-mode helper to call more handlers after processing the main
+ line. Functionally allows parallel handler trees and callbacks after
+ a particular mode is completed (useful for things registered under a
+ serialize handler when you don't know when the mode is over).
+ (not used anywhere in production code yet.).
+
+2003-01-09 08:55 dts12
+
+ * FAQ:
+
+ Mention the perl shared/static library problem,
+ the unresponsive agent problem (and fix), and
+ disclaim all knowledge of David Town's Net::SNMP module,
+
+2003-01-09 07:27 hardaker
+
+ * testing/tests/: T0160snmpv2cbulkget, T0220snmpv3bulkget
+:
+
+ GetBulk testing supplied by Xiaofeng Ling
+
+2003-01-09 07:26 hardaker
+
+ * testing/RUNTESTS:
+
+ Add -x flag for calling subtests with "sh -x".
+ Fix number counting for interactive output.
+
+2003-01-07 15:49 hardaker
+
+ * COPYING (V4-2-patches.8), COPYING:
+
+ year update
+
+2003-01-07 10:18 hardaker
+
+ * FAQ (V4-2-patches.8), FAQ:
+
+ irc server name change
+
+2003-01-07 08:01 hardaker
+
+ * snmplib/mib.c:
+
+ bug #663628 and patch: fix ip address index parsing from OIDs
+
+2003-01-07 01:53 dts12
+
+ * agent/helpers/table_iterator.c:
+
+ Remove redundant code to free 'callback_data_keep' data.
+ This branch would never be invoked, and is in the wrong
+ place anyway. Patch supplied by Jay Parlar
+
+2003-01-06 08:16 nba
+
+ * Makefile.in:
+
+ Install Solaris 9 header
+
+2003-01-05 15:14 nba
+
+ * win32/win32.opt:
+
+ Make it compile with VC++
+
+2003-01-05 14:28 nba
+
+ * win32/: encode_keychange/encode_keychange.dsp, win32.opt
+, libsnmp_dll/libsnmp.def:
+
+ Make it compile with VC++
+
+2003-01-05 12:45 nba
+
+ * mibs/: Makefile.mib, SNMP-FRAMEWORK-MIB.txt,
+ SNMP-MPD-MIB.txt, SNMP-NOTIFICATION-MIB.txt,
+ SNMP-PROXY-MIB.txt, SNMP-TARGET-MIB.txt,
+ SNMP-USER-BASED-SM-MIB.txt, SNMP-VIEW-BASED-ACM-MIB.txt
+, SNMPv2-MIB.txt, SNMPv2-TM.txt, rfclist:
+
+ Update to current RFC versions
+
+2003-01-03 12:50 rstory
+
+ * configure, configure.in:
+
+ don't call AC_DISABLE_SHARED, as sets the default to disabled (it's very
+ presence in configure.in generates a configure with shared disabled, even
+ if it was in an if block; for developer default, set enable_shared directly
+ unless it was previously set; test that enable_shared=yes for embedded-perl
+
+2003-01-03 05:02 dts12
+
+ * FAQ (V4-2-patches.7), FAQ:
+
+ Mention the Stratus VOS port. (Thanks to Brandon Hall)
+
+2003-01-02 15:00 rstory
+
+ * include/net-snmp/library/container.h:
+
+ parens around x in macro in case x is multiple C tokens
+
+2002-12-22 09:32 rstory
+
+ * sedscript.in, snmplib/snmp_version.c, FAQ,
+ README, perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.7.pre2 )
+
+2002-12-22 09:31 rstory
+
+ * ChangeLog, NEWS:
+
+ update for 5.0.7.pre2
+
+2002-12-22 09:20 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend
+, agent/mibgroup/Makefile.depend, apps/Makefile.depend
+, apps/snmpnetstat/Makefile.depend,
+ snmplib/Makefile.depend:
+
+ make depend
+
+2002-12-20 04:58 nba
+
+ * Makefile.in:
+
+ clean away net-snmp-config on make clean
+
+2002-12-20 04:57 nba
+
+ * include/net-snmp/mib_api.h,
+ include/net-snmp/library/oid_stash.h, snmplib/oid_stash.c
+:
+
+ stash the oid_stash ...
+
+2002-12-20 01:49 nba
+
+ * snmplib/snmp_api.c:
+
+ A patch from V4 that didn't make it ... allow list of numeric bits setting BITS
+
+2002-12-19 23:50 hardaker
+
+ * include/net-snmp/library/oid_stash.h, snmplib/oid_stash.c
+:
+
+ add a global callback function for registering directly via a callback.
+
+2002-12-19 23:35 hardaker
+
+ * include/net-snmp/utilities.h:
+
+ add callback.h
+
+2002-12-19 23:22 hardaker
+
+ * snmplib/read_config.c:
+
+ fix persistent storage file renaming. (snprintf change mistake)
+
+2002-12-19 23:21 hardaker
+
+ * include/net-snmp/library/oid_stash.h, snmplib/oid_stash.c
+:
+
+ some new routines for saving oid stash data to persistent storage.
+ (not used anywhere in current production code)
+
+2002-12-19 14:51 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ - watch for undefs passed in as a value to a SET clause.
+ - change BITS to a Octet String as it should be.
+ - on a side note, do you know that the Net-SNMP parser doesn't
+ distinguish between BITS and BIT STRING in it's list of types? I
+ don't think it's possible to use both types in the code today
+ (which is fine, since BIT STRING is not used in SNMPv2 and beyond).
+
+2002-12-19 14:49 hardaker
+
+ * perl/OID/OID.xs:
+
+ print a warning when you can't parse an OID (err, not ideal)
+
+2002-12-19 14:48 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - misc bug fixes.
+ - skip SETing columns with no value passed in.
+
+2002-12-19 11:43 nba
+
+ * agent/mibgroup/: examples/example.c, host/hr_network.c
+, host/hr_swinst.c:
+
+ Being a bit quick, eh, Dave ...
+
+2002-12-19 08:14 dts12
+
+ * agent/mibgroup/mibII/: at.c (V4-2-patches.2), at.c:
+
+ Ensure the ifname buffer is big enough to read in a full-length name.
+ (From the SUSE "audit" patch)
+
+2002-12-19 08:05 dts12
+
+ * agent/snmpd.c, agent/mibgroup/host/hr_print.c,
+ apps/encode_keychange.c, apps/snmptrapd_handlers.c, snmplib/mib.c
+ (V4-2-patches.[8,9,3,3,0]), agent/snmpd.c,
+ agent/mibgroup/host/hr_print.c, apps/encode_keychange.c
+, apps/snmptrapd_handlers.c, snmplib/mib.c:
+
+ Detect when memory allocations fail, and don't plough on regardless.
+ (Based on changes within the SUSE "audit" patch)
+
+2002-12-19 07:07 dts12
+
+ * agent/agent_trap.c, agent/snmp_agent.c,
+ agent/mibgroup/util_funcs.c,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/host/hr_device.c,
+ agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/mta_sendmail.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/dlmod.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proc.c, apps/encode_keychange.c
+, apps/snmptrapd.c, apps/snmptrapd_handlers.c,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/inet6.c,
+ snmplib/asn1.c, snmplib/mib.c, snmplib/parse.c,
+ snmplib/read_config.c, snmplib/snmp_api.c,
+ snmplib/snmpv3.c, snmplib/vacm.c:
+
+ The Great SUSE 'sprintf' Hunt.....
+
+2002-12-19 03:02 jbpn
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ - code with BSDi4
+
+2002-12-19 02:50 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - change a comment that doesn't take into account the transport stuff
+ - fix some particularly bad formatting in snmp_open_ex
+
+2002-12-18 10:50 hardaker
+
+ * agent/mibgroup/agent/nsModuleTable.c:
+
+ remove mem-leak comment. Out of date and was fixed
+
+2002-12-18 10:47 hardaker
+
+ * agent/mibgroup/agentx/agentx_config.c, man/snmpd.conf.5.def
+:
+
+ delete experimental warning about agentx
+
+2002-12-18 10:40 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ fix bug#655488: descriptions of ssIORawReceived and ssRawInterrupts were reversed
+
+2002-12-18 05:19 jbpn
+
+ * agent/snmpd.c:
+
+ - restart stderr logging on HUP (if -L was given on command line)
+
+2002-12-17 16:33 rstory
+
+ * local/mib2c.array-user.conf:
+
+ remove ';' from define; if table has a storage type, check that it's not
+ read only before allowing sets
+
+2002-12-17 16:26 rstory
+
+ * local/mib2c.array-persistent.conf:
+
+ never mind
+
+2002-12-17 16:02 hardaker
+
+ * perl/OID/test.pl:
+
+ Don't check for prefixes in test. They don't exist. However, do set SNMPCONFPATH in test initialization to a bogus value
+
+2002-12-17 15:58 hardaker
+
+ * perl/OID/OID.xs:
+
+ remove direct call to init_snmp(). This is already called by the .pm file
+
+2002-12-17 07:22 rstory
+
+ * local/mib2c.array-persistent.conf:
+
+ persistence for array-tables
+
+2002-12-17 07:07 rstory
+
+ * include/net-snmp/library/read_config.h,
+ snmplib/read_config.c:
+
+ add read_config_store_data_prefix; add ASN_TIMETICKS w/ASN_UNSIGNED cases
+
+2002-12-17 06:44 rstory
+
+ * snmplib/snmpUDPDomain.c:
+
+ don't use SO_REUSE_ADDR so agent port can't be hijacked
+
+2002-12-17 06:43 rstory
+
+ * net-snmp-config.in:
+
+ use local var for base agent libs; reorder base agent libs so static linking
+ works
+
+2002-12-16 15:32 nba
+
+ * snmplib/scapi.c, agent/mibgroup/mibII/mta_sendmail.c,
+ agent/mibgroup/mibII/mta_sendmail.h:
+
+ Yet another compiler warning ...
+
+2002-12-16 14:50 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ remove bogus comment reference to table_dataset helper.
+
+2002-12-16 14:42 nba
+
+ * agent/mibgroup/disman/mteEventNotificationTable.c,
+ agent/mibgroup/disman/mteEventTable.c,
+ agent/mibgroup/disman/mteEventTable.h,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/disman/mteTriggerTable.h, apps/snmptrapd.c
+, include/net-snmp/library/tools.h, snmplib/tools.c
+:
+
+ Spread some magic dust to quell compiler warnings (why isn't --enable-slient-libtool the default ...)
+
+2002-12-16 08:44 jbpn
+
+ * agent/mibgroup/agentx/master.c:
+
+ - fix small memory leak (peername is copied by snmp_open_ex)
+
+2002-12-16 08:31 jbpn
+
+ * snmplib/mib.c:
+
+ - fix small memory leak
+
+2002-12-16 08:19 jbpn
+
+ * snmplib/parse.c:
+
+ - fix memory leak
+
+2002-12-16 07:02 rstory
+
+ * snmplib/container.c:
+
+ remove redundant include (caused problems on Sun 5.7, reported by jbpn)
+
+2002-12-16 05:22 rstory
+
+ * dist/nsb-functions:
+
+ configure w/out developer
+
+2002-12-16 05:18 rstory
+
+ * configure, configure.in:
+
+ DEVFLAGS="" if not developer
+
+2002-12-15 23:39 nba
+
+ * snmplib/: oid_stash.c, scapi.c, snmpAAL5PVCDomain.c
+, snmpIPXDomain.c, snmpTCPIPv6Domain.c,
+ snmpUDPIPv6Domain.c:
+
+ dmalloc support
+
+2002-12-15 23:39 nba
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ Possible leak of fd on error return
+
+2002-12-14 07:22 rstory
+
+ * FAQ, README, sedscript.in, perl/SNMP/SNMP.pm
+, snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.7.pre1 )
+
+2002-12-14 07:21 rstory
+
+ * ChangeLog, NEWS:
+
+ update for 5.0.7.pre1
+
+2002-12-14 06:59 rstory
+
+ * dist/nsb-functions:
+
+ check for agent/mibgroup; fix modules for config_dist
+
+2002-12-14 06:58 rstory
+
+ * man/: netsnmp_bulk_to_next.3, netsnmp_debug.3,
+ netsnmp_handler.3, netsnmp_old_api.3,
+ netsnmp_read_only.3, netsnmp_serialize.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_data.3, netsnmp_table_dataset.3,
+ netsnmp_todo.3:
+
+ update for 5.0.7.pre1
+
+2002-12-14 06:54 rstory
+
+ * Makefile.top:
+
+ bump rev to 5.0.7
+
+2002-12-14 06:49 rstory
+
+ * Makefile.in:
+
+ add -n to grep for C++ comments
+
+2002-12-14 06:47 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, apps/Makefile.depend,
+ snmplib/Makefile.depend:
+
+ make depend
+
+2002-12-14 06:45 rstory
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ remove C++ comments
+
+2002-12-14 06:30 rstory
+
+ * include/net-snmp/agent/snmp_agent.h:
+
+ add comments to some structure members
+
+2002-12-14 06:29 rstory
+
+ * agent/helpers/table_array.c:
+
+ errors during commit undo should be xxFAILED; use set_request_error instead of
+ set_mode_request_error; remove incorrect comment; more debugging; check for
+ and call lower handlers
+
+2002-12-14 06:27 rstory
+
+ * agent/helpers/table.c:
+
+ always process later passes of a set request
+
+2002-12-13 13:06 nba
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ Quell compiler warnings
+
+2002-12-13 12:47 nba
+
+ * agent/mibgroup/mibII/var_route.c, snmplib/default_store.c
+:
+
+ Quell compiler warnings
+
+2002-12-13 12:40 nba
+
+ * snmplib/scapi.c:
+
+ Fix incomplete zeroing of security data
+
+2002-12-13 12:39 nba
+
+ * snmplib/parse.c:
+
+ Fix a possible freeing of a NULL pointer
+
+2002-12-13 12:38 nba
+
+ * agent/helpers/table_dataset.c,
+ agent/mibgroup/mibII/ipAddr.c, apps/snmptrapd.c,
+ include/net-snmp/agent/table_data.h, snmplib/snmp_api.c
+:
+
+ Quell compiler warnings
+
+2002-12-13 08:38 dts12
+
+ * agent/agent_handler.c:
+
+ Clear the 'processed' flag between passes, so that handlers
+ can correctly clean up after errors have been detected.
+
+2002-12-13 08:06 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ add asser to try and cath intermittent crash i've been seeing
+
+2002-12-13 08:04 rstory
+
+ * agent/mibgroup/agentx/master.c:
+
+ log unknown agentx operation
+
+2002-12-13 07:12 rstory
+
+ * agent/helpers/table_array.c:
+
+ if no row create callback on set, use NOTWRITABLE instead of NOSUCHINSTANCE
+
+2002-12-13 07:04 rstory
+
+ * agent/helpers/debug_handler.c:
+
+ fix cut-n-paste so delegated flag displayed properly
+
+2002-12-13 07:01 rstory
+
+ * snmplib/default_store.c:
+
+ log text (APP|LIB|TOK) instead of store id in debug msgs
+
+2002-12-13 06:53 rstory
+
+ * dist/nsb-functions:
+
+ add --with-libwrap
+
+2002-12-13 06:49 rstory
+
+ * FAQ:
+
+ grammar/indention tweak + mention strip for memory footprint question
+
+2002-12-13 06:32 dts12
+
+ * perl/SNMP/Makefile.PL:
+
+ Remove explicit mention of SNMP module documentation.
+ This setting doesn't seem to be necessary, and without it,
+ the man page is installed automatically.
+
+2002-12-13 04:47 jbpn
+
+ * apps/snmptrapd.c:
+
+ - make -S do the same as snmpd -S (set the syslog facility)
+ - make -l print a warning saying that it is deprecated and -S should
+ be used instead
+
+2002-12-13 04:14 jbpn
+
+ * snmplib/read_config.c:
+
+ - increase width of token field to improve legibility of
+ configuration directive help output
+
+2002-12-12 14:46 nba
+
+ * apps/snmptable.c:
+
+ Protect against unknown -O options
+
+2002-12-12 12:56 nba
+
+ * agent/mibgroup/smux/smux.c:
+
+ Fix some size_t that really should be int
+
+2002-12-12 11:18 nba
+
+ * include/net-snmp/library/default_store.h,
+ include/net-snmp/library/mib.h, man/snmp.conf.5.def,
+ man/snmpcmd.1.def, snmplib/mib.c, snmplib/snmp_api.c
+:
+
+ A long overdue patch (#415252) from Robert Hastings that implements
+ reverse DISPLAY-HINT processing, i.e. it allows you to input data
+ formatted like the DISPLAY-HINT prescribes. Enabled by default, but
+ can be disabled with the -Ih option or noDisplayHint in snmp.conf
+
+2002-12-12 10:56 nba
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ parse oids in view statements the same way the apps do it (consistency, he said)
+
+2002-12-12 10:35 hardaker
+
+ * perl/agent/agent.xs:
+
+ Add a getRootOID function to the reginfo pointer passed into handlers.
+
+2002-12-12 10:34 rstory
+
+ * local/mib2c.array-user.conf:
+
+ change create and duplicate row to return specific context instead of generic
+ netsnmp_index; catch error from parse_oid_indexes on row creation
+
+2002-12-12 10:34 hardaker
+
+ * perl/SNMP/t/mib.t:
+
+ Print errors to STDERR instead.
+ (actually don't because these statements are commented out in the
+ first place)
+
+2002-12-12 10:33 hardaker
+
+ * agent/agent_registry.c:
+
+ Reverse the context of a context if statement so if not the context
+ then don't use the context in the given context.
+
+2002-12-12 09:56 jbpn
+
+ * apps/snmptrapd.c:
+
+ - drop long-deprecated -q and -S options
+ - minor formatting fixes
+
+2002-12-12 09:35 jbpn
+
+ * agent/snmpd.c:
+
+ - remove duplicate message in usage
+
+2002-12-12 08:37 dts12
+
+ * man/snmpd.1.def, agent/snmpd.c:
+
+ Implement a command-line option (-S) to set the facility to use when
+ logging via syslog. Based on an idea by Joel Rosdahl (Patch #627701)
+ Note that -l and -L are already taken:-(
+
+ ToDo:
+ Provide configuration directives for both this, and the syslog token ('snmpd').
+
+2002-12-12 08:18 dts12
+
+ * man/snmpd.conf.5.def, agent/mibgroup/mibII/system_mib.c
+:
+
+ Support setting of sysDescr and sysObjectID via snmpd.conf
+ configuration directives (though not via SNMP SET reqests).
+ Patches supplied by Joel Rosdahl (#627702 and #628011)
+
+2002-12-12 07:58 dts12
+
+ * agent/helpers/: all_helpers.c, table.c:
+
+ Suppress some compiler warnings.
+ Based on patch supplied by Chris Johns (#644041)
+
+2002-12-12 07:42 dts12
+
+ * agent/mibgroup/ucd-snmp/: memory_solaris2.c (V4-2-patches.6),
+ memory_solaris2.c:
+
+ Use 'sysconf' to report on Solaris memory usage.
+ Based on patch supplied by Ben Stern (#651182)
+
+2002-12-12 07:00 dts12
+
+ * agent/mibgroup/agentx/master.c:
+
+ Basic support for multiple AgentX sockets (on the master side at least).
+ See Feature Request #632556
+
+2002-12-12 05:57 rstory
+
+ * dist/Makefile:
+
+ create version tag from version so cvs export works; fix REL; add tar.gz
+ of source as dependency for rpmfiles
+
+2002-12-12 05:04 nba
+
+ * snmplib/: data_list.c, snmpCallbackDomain.c,
+ snmpTCPDomain.c, snmpUDPDomain.c, snmpUnixDomain.c
+, snmp_enum.c, snmp_secmod.c, snmp_transport.c
+:
+
+ dmalloc support
+
+2002-12-12 04:18 dts12
+
+ * snmplib/mib.c:
+
+ Document the -OU option, and alphabetise the handling of options.
+
+2002-12-12 03:25 dts12
+
+ * apps/Makefile.in:
+
+ Install 'snmpinform' as a relative link, rather than an absolute one.
+ Fix provided by the indefatigable Stefan Radman (Bug #652587)
+
+2002-12-12 02:56 dts12
+
+ * configure, configure.in:
+
+ Quote configure options when contructing net-snmp-configure and net-snmp-configure.h
+ This allows options containing spaces, etc, to be handled correctly.
+ (See Feature Request #547152)
+
+2002-12-11 13:52 nba
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ Patch for FreeBSD. Thanks to Jun Kuriyama
+
+2002-12-11 09:16 dts12
+
+ * snmplib/: snmp_logging.c (V4-2-patches.4), snmp_logging.c:
+
+ Try disabling line-buffering on Windows systems (since it
+ apparently enables full-buffering instead). See Bug #558837.
+
+2002-12-11 08:25 dts12
+
+ * perl/SNMP/t/: async.t, get.t, getnext.t,
+ notify.t, set.t:
+
+ Explicitly set SNMP version = 1 (the original default as expected by the tests)
+ This should now pass all tests apart from conf.t #3
+
+2002-12-11 03:46 dts12
+
+ * include/net-snmp/agent/auto_nlist.h:
+
+ Be more selective in using the 64-bit version of nlist. (Bug #611655)
+
+2002-12-11 03:27 dts12
+
+ * README.solaris:
+
+ Mention the non-functionality of one of the suggested approaches.
+ (Bug #617119). Reported by Quanah Gibson-Mount
+
+2002-12-11 03:20 dts12
+
+ * agent/Makefile.in:
+
+ Ensure that the destination directory exists before installing the
+ embedded perl script. (Bug #617891) Fix provided by Stefan Radman.
+
+2002-12-11 02:56 dts12
+
+ * README.snmpv3 (V4-2-patches.4), README.snmpv3:
+
+ Document the location assumptions being made in this description.
+
+2002-12-11 01:47 dts12
+
+ * include/net-snmp/library/default_store.h,
+ include/net-snmp/library/mib.h, snmplib/mib.c,
+ man/snmpcmd.1.def:
+
+ Provide a mechanism for forcing strings to be displayed in either
+ ASCII or Hex format, bypassing the "guess" mechanism as to which
+ is more appropriate. Suggested by Nick Kanakakorn.
+ Note that this does not affect objects with a Display-Hint in
+ their MIB definition.
+
+2002-12-11 01:30 dts12
+
+ * agent/ds_agent.h, agent/snmpd.c, testing/eval_tools.sh
+ (V4-2-patches.[2,6,6]), agent/agent_read_config.c,
+ agent/snmpd.c, include/net-snmp/agent/ds_agent.h,
+ testing/eval_tools.sh:
+
+ Command-line option to control whether to unlink the PID file or not.
+ Necessary for correct test operation.
+
+2002-12-11 01:21 dts12
+
+ * perl/OID/test.pl:
+
+ The latest library defaults to MODULE::name style output,
+ so adjust the expected output checks accordingly.
+ Also, there are actually 36 tests, not 35!
+
+2002-12-11 01:17 dts12
+
+ * perl/OID/OID.xs:
+
+ Initialise the SNMP libraries, to set up the OID tree.
+ Addresses bugs #638024 and #627643
+ [Qn: Do we need to supply an 'appname' (c.d the SNMP module) ?]
+
+2002-12-10 16:29 nba
+
+ * man/snmp.conf.5.def, snmplib/snmp_api.c,
+ agent/mibgroup/util_funcs.c,
+ agent/mibgroup/ucd-snmp/logmatch.c:
+
+ Allow runtime configuration of persistent directory
+
+2002-12-10 16:24 nba
+
+ * snmplib/read_config.c:
+
+ Report errors handling persistent storage files
+
+2002-12-10 16:23 nba
+
+ * snmplib/system.c:
+
+ Pass up error on directory creation
+
+2002-12-10 14:27 nba
+
+ * snmplib/mib.c:
+
+ Better respect for the max width option (snmptranslate -Td)
+
+2002-12-10 14:26 nba
+
+ * man/snmp.conf.5.def:
+
+ Document the oidOutputFormat option
+
+2002-12-10 14:25 nba
+
+ * apps/snmptable.c:
+
+ Clean up. Remove calls to obsolete functions snmp_set_quick_print,
+ snmp_get_dump_packet, snmp_get_suffix_only. Remove last traces of the
+ non_sequential backwards hack. Make sure it works for all -O options.
+
+2002-12-10 08:58 dts12
+
+ * agent/mibgroup/mibII/: interfaces.c (V4-2-patches.6),
+ interfaces.c:
+
+ Protect against empty lines in /proc/net/dev (Bug #625426)
+
+2002-12-10 08:41 dts12
+
+ * snmplib/: snmpv3.c (V4-2-patches.5), snmpv3.c:
+
+ Free destination memory before cloning SNMP Engine ID.
+ Fix provided by Martin Carlsson. (Bug #835481)
+
+2002-12-10 08:07 dts12
+
+ * perl/: ASN/Makefile.PL, OID/Makefile.PL,
+ SNMP/Makefile.PL, agent/Makefile.PL,
+ agent/default_store/Makefile.PL, default_store/Makefile.PL
+:
+
+ Add "$Config{ccflags}" to CCFLAGS. (See bug #640899)
+
+2002-12-10 07:46 dts12
+
+ * agent/mibgroup/mibII/: ipAddr.c (V4-2-patches.8), ipAddr.c:
+
+ Add support for Linux virtual interfaces in the ipAddressTable.
+ (Note this does *not* include separate per-v-interface statistics
+ in the interfaces table).
+
+ Patch supplied by Jens Sittner (#621274)
+
+2002-12-10 01:59 dts12
+
+ * agent/agent_handler.c:
+
+ Remove a couple of extraneous ^M characters.
+
+2002-12-09 23:36 nba
+
+ * snmplib/mib.c:
+
+ When using -Oqv and printing an empty string you could end up with
+ a NULL string and not an empty string leading to some very obscure
+ problems in snmptable and other applications.
+
+2002-12-09 08:12 dts12
+
+ * snmplib/snmp_api.c:
+
+ Handle missing integer values (whether 32- or 64-bit!). Oops!
+
+2002-12-09 07:12 dts12
+
+ * snmplib/: snmp_api.c (V4-2-patches.8), snmp_api.c:
+
+ Handle integer-based values correctly on a 64-bit platform.
+ Patch supplied by Thomas Weber (#561071)
+
+2002-12-09 06:45 dts12
+
+ * agent/mibgroup/agentx/master.c:
+
+ Take note of subagent-requested byte ordering in subsequent communications.
+ Patch supplied by Urban (#632284)
+
+2002-12-09 06:32 dts12
+
+ * agent/: snmpd.c (V4-2-patches.5), snmpd.c:
+
+ Remove the PID file on agent shutdown.
+ Patch supplied by Joel Rosdahl (#627699)
+
+2002-12-09 06:25 dts12
+
+ * snmplib/system.c:
+
+ Handle 'struct sockaddr' that contain 'sa_len' fields differently
+ to those that don't (c.f ifilter_ioctl.c in BIND 9.2.1 sources)
+ Patch supplied by Joel Rosdahl (#627696)
+
+2002-12-09 04:12 dts12
+
+ * acconfig.h, configure, configure.in:
+
+ Recognise BSDi4, and tweak the recognition of 'dlopen'.
+ Patches supplied by Joel Rosdahl.
+
+2002-12-09 03:10 dts12
+
+ * agent/mibgroup/mibII/: at.c, interfaces.c, ip.c
+:
+
+ Remove some warnings, and try to cope with 'sysctl' failures.
+ Patches supplied by Chris Johns.
+
+2002-12-09 01:20 dts12
+
+ * README.solaris:
+
+ Mention the limitations on /usr/ucb/sed,
+ and point people towards /usr/bin/sed instead.
+
+2002-12-07 05:41 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Insert newly-created rows into the per-request lists, so that lower
+ level handlers can access them.
+ [Qn: Should we do something similar with updated lists as well?]
+
+2002-12-07 05:34 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Report back the correct error for rows that couldn't be created.
+
+2002-12-07 05:32 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Protect against freeing a row that never got created in the first place.
+
+2002-12-06 15:05 hardaker
+
+ * testing/tests/T030snmpv3usercreation:
+
+ Skip on non-openssl machines. THis should be changed to just not using encryption on those machines, but I do not have the time at the moment
+
+2002-12-06 10:12 hardaker
+
+ * configure.in:
+
+ remove ucdDemoPublic from --enable-mini-agent
+
+2002-12-06 10:02 hardaker
+
+ * configure:
+
+ remove ucdDemoPublic from --enable-mini-agent
+
+2002-12-06 09:01 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Don't delete the "old" (non-existent) row, when tidying up after
+ creating a new row.
+
+2002-12-06 08:40 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Tweak handling of (invalid) RowStatus creation requests in an
+ "automatic creation" table. These should return wrongValue or
+ inconsistentValue, rather than notWritable.
+
+2002-12-05 02:47 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Support use of RowStatus object to control creation of new rows
+ (i.e. when the 'allow_creation' flag is not set).
+ This should deal with everything except determining whether a
+ row is ready to go 'active' (e.g. via 'createAndGo'). Such a
+ decision is inherently specific to each individual MIB, so must
+ really be done in the lower-level handler.
+
+2002-12-05 02:41 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Stop processing when a 'non-writable create' is detected.
+
+2002-12-04 16:35 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ - BIT_STR -> OCTET_STR, which is what it should be.
+ - run eventTable entries.
+
+2002-12-04 16:34 hardaker
+
+ * agent/mibgroup/disman/mteTriggerExistenceTable.c:
+
+ BIT_STR -> OCTET_STR, which is what it should be.
+
+2002-12-04 16:33 hardaker
+
+ * agent/mibgroup/disman/: mteObjectsTable.c,
+ mteTriggerBooleanTable.c:
+
+ use netsnmp_strdup_and_null to get real strings from mib data.
+
+2002-12-04 16:32 hardaker
+
+ * agent/mibgroup/disman/: event-mib.h,
+ mteEventNotificationTable.c, mteEventNotificationTable.h
+, mteEventTable.c, mteEventTable.h:
+
+ - implemented the mteEventTable and the mteEventNotificationTable
+ - FYI, total implementation time: about 4 hours
+ - no easy-to-use .conf wrappers yet though. snmpset support only.
+
+2002-12-04 16:29 hardaker
+
+ * local/mib2c.create-dataset.conf:
+
+ - use the netsnmp_table_set_add_indexes function which actually works.
+
+2002-12-04 16:29 hardaker
+
+ * agent/helpers/table_dataset.c,
+ include/net-snmp/agent/table_dataset.h:
+
+ - create a netsnmp_table_set_add_indexes function.
+ - Allow row creation using rowStatus when the data column exists, but
+ there is no assigned value (ie, is NULL).
+ - use netsnmp_strdup_and_null instead of memdup to make sure an
+ implicit NULL is in place for things that use the data and need it
+ as a real string.
+
+2002-12-04 16:27 hardaker
+
+ * net-snmp-config.in:
+
+ document --prefix
+
+2002-12-04 10:16 hardaker
+
+ * NEWS (V4-2-patches.9), NEWS:
+
+ document 4.2.6
+
+2002-12-03 01:44 dts12
+
+ * agent/mibgroup/host/hr_print.c:
+
+ Close printer file handle with 'fclose' rather than 'pclose' to avoid
+ a memory leak on Solaris 2.6. Fix provided by Jacobo Matute.
+
+2002-12-03 01:33 dts12
+
+ * agent/helpers/: table_data.c, table_dataset.c:
+
+ Translate GetNext (and GetBulk) requests into simple Get requests,
+ when passing them from the table_data handler to table_dataset.
+ This is analogous to how the iterate handler works, and allows
+ lower level handlers to override the basic behaviour (without
+ having to duplicate all of the "find next row" code every time).
+
+2002-12-02 01:48 dts12
+
+ * agent/helpers/table.c:
+
+ Return SNMPv2-style exceptions, rather than the SNMPv1 'noSuchName' error.
+ This used to break AgentX subagents, but the latest change to snmp_agent.c
+ (to catch noSuch{Instance,Object} exceptions) seems to have fixed that problem.
+
+2002-12-02 01:40 dts12
+
+ * agent/snmp_agent.c:
+
+ Explicitly parenthesise a comparison, to keep the compiler happy.
+
+2002-12-02 01:39 dts12
+
+ * agent/snmp_agent.c:
+
+ Inclusive-range GetNext requests are transmitted as Get requests, so may
+ well return noSuch{Instance,Object} exceptions. Catch these as well.
+
+2002-12-02 01:36 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Catch (and reject) attempts to create a new row via a non-writable object.
+
+2002-11-28 01:24 dts12
+
+ * agent/helpers/table_iterator.c:
+
+ Null out one final loop_context pointer after being freed.
+ (Patch provided by Roger McCalman)
+
+2002-11-26 14:59 nba
+
+ * snmplib/parse.c:
+
+ Discard the secondary (GROUP) DESCRIPTION insize a MODULE-COMPLIANCE
+ to avoid leaking memory. Thanks to Eugene_Bruk@bmc.com
+
+2002-11-26 14:53 nba
+
+ * apps/snmptranslate.c:
+
+ Reinstate the -w options that was lost in the indent fury
+
+2002-11-26 07:50 hardaker
+
+ * agent/mibgroup/examples/notification.c:
+
+ The notification variable shouldn't be static. A bug found while
+ tracking down a problem pointed out by Venice on IRC.
+
+2002-11-26 01:10 dts12
+
+ * snmplib/snmp_enum.c:
+
+ Fix incorrect usage of SE_MAX_IDS vs SE_MAX_SUBIDS.
+ Reported by 'shinepeak'
+
+2002-11-25 19:41 hardaker
+
+ * local/FAQ2HTML:
+
+ hack of a hack of a hack, or: fix multi-line FAQ questions
+
+2002-11-25 07:08 hardaker
+
+ * README.agentx:
+
+ mention agentxPingInterval
+
+2002-11-18 18:39 hardaker
+
+ * agent/mibgroup/smux/smux.h:
+
+ applied patch #527650
+
+2002-11-11 14:10 nba
+
+ * snmplib/mib.c:
+
+ Respect the mibdirs conf directive. Thanks to Stefan Radman (sradman)
+
+2002-11-11 13:57 nba
+
+ * apps/snmptrapd_log.c:
+
+ Fix a missing error return
+
+2002-11-11 11:26 hardaker
+
+ * snmplib/: snmpTCPDomain.c, snmpUDPDomain.c:
+
+ fix taddr generation/parsing for port based transports to properly use
+ network byte ordering.
+
+2002-11-11 11:25 hardaker
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c:
+
+ fix write support for the timeout column
+
+2002-11-09 07:06 nba
+
+ * agent/mib_modules.c, agent/snmp_vars.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/subagent.c,
+ include/net-snmp/agent/mib_modules.h,
+ include/net-snmp/library/snmpUDPIPv6Domain.h:
+
+ Do away with a bunch of compiler warnings
+
+2002-11-09 06:59 nba
+
+ * agent/mibgroup/: util_funcs.c, ucd-snmp/extensible.c,
+ ucd-snmp/memory.c, ucd-snmp/memory_freebsd2.c,
+ ucd-snmp/pass.c, ucd-snmp/proc.c, host/hr_print.c
+:
+
+ Zero is an OK file descriptor. -1 is the error return
+
+2002-11-09 06:54 nba
+
+ * include/net-snmp/library/parse.h, snmplib/parse.c:
+
+ More to the point message for undefined identifiers. Brought forward from 4.2
+
+2002-11-09 06:52 nba
+
+ * apps/snmpvacm.c:
+
+ Print the error information in case of error
+
+2002-11-09 06:51 nba
+
+ * apps/snmpnetstat/route.c:
+
+ Protect against v2 exception results
+
+2002-11-09 06:49 nba
+
+ * sedscript.in, man/snmpcmd.1.def:
+
+ Protect PREFIX when it is the env var. Thanks to Stefan Radman (sradman)
+
+2002-11-09 06:47 nba
+
+ * mibs/rfclist:
+
+ Add RFC 3371 L2TP-MIB
+
+2002-11-09 06:46 nba
+
+ * mibs/IANAifType-MIB.txt:
+
+ Updated from IANA
+
+2002-11-07 02:55 jbpn
+
+ * apps/snmptable.c:
+
+ - fix -Cf and -Cw option processing (previously would core dump if
+ no option passed), as pointed out by hampa on #net-snmp
+
+2002-11-06 12:35 rstory
+
+ * net-snmp-config.in:
+
+ fix cut/paste
+
+2002-11-06 12:04 rstory
+
+ * configure:
+
+ configure to match configure.in & makefiles
+
+2002-11-06 11:08 rstory
+
+ * net-snmp-config.in:
+
+ add missing end quote
+
+2002-11-06 10:35 rstory
+
+ * net-snmp-config.in:
+
+ add @DEVFLAGS@ weherver there is a @CFLAGS@, except for the new --base-cflags
+
+2002-11-06 10:22 rstory
+
+ * Makefile.top:
+
+ add @DEVFLAGS@ to CFLAGS
+
+2002-11-06 10:21 rstory
+
+ * configure.in:
+
+ seperate developer cflags from normal cflags
+
+2002-11-06 09:55 rstory
+
+ * agent/mibgroup/util_funcs.h:
+
+ change struct.h include to use "" instead of <net-snmp/>, since it it a local
+ include, not a system include
+
+2002-11-06 09:39 rstory
+
+ * acconfig.h, agent/mibgroup/util_funcs.h,
+ agent/mibgroup/ucd-snmp/lmSensors.c,
+ include/net-snmp/net-snmp-config.h.in,
+ snmplib/ucd-snmp-includes.h, win32/config.h,
+ win32/net-snmp/net-snmp-config.h:
+
+ purge IN_UCD_SNMP_SOURCE
+
+2002-11-05 09:24 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ added a xmlshort delimiter as requested by lands on IRC
+
+2002-11-05 08:59 rstory
+
+ * dist/cvsup:
+
+ tabs -> spaces only try to chmod RO src dir if owner of dirs
+
+2002-11-05 08:56 rstory
+
+ * mkinstalldirs:
+
+ making a directory is not an error, so don't send output to stderr
+
+2002-11-04 08:15 hardaker
+
+ * agent/mibgroup/target/snmpTargetParamsEntry.c:
+
+ allow unregistered security models <= 2
+
+2002-11-04 08:14 hardaker
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ enable row creation to be better supported (rowstatus no longer has to
+ be first in the list, ...)
+
+2002-11-04 08:13 hardaker
+
+ * net-snmp-config.in:
+
+ add cppflags to --cflags
+
+2002-11-04 08:13 hardaker
+
+ * NEWS:
+
+ add stuff for 5.0.7 (or whatever) mentioning a few new features.
+
+2002-11-01 09:06 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Fixed bug #632094 using the suggested method: watch for NULL strerror() return
+
+2002-11-01 07:09 rstory
+
+ * Makefile.in:
+
+ undo my changes from r 5.17, attempting to reduce runs of config.status
+ by using explicit paths to srcdir, and let VPATH do it's thing
+
+2002-10-29 11:30 rstory
+
+ * snmplib/Makefile.in:
+
+ target to build binary array test app; tweak to parse test target (reduces most
+ but not all external references)
+
+2002-10-29 11:27 rstory
+
+ * snmplib/container_binary_array.c:
+
+ fix for binary search problem noted by Romy Christensen on coders; partial
+ (ifdef'd out) code for a binary array iterator
+
+2002-10-29 11:25 rstory
+
+ * snmplib/test_binary_array.c:
+
+ simple test program for binary array
+
+2002-10-29 06:28 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ Fix debugging as noted in bug #630348
+
+2002-10-28 16:47 hardaker
+
+ * configure, configure.in:
+
+ changed .1.6.3 to 1.3.6 as noted in comp.protocols.snmp
+
+2002-10-28 12:01 hardaker
+
+ * agent/mibgroup/examples/ucdDemoPublic.conf:
+
+ changed password
+
+2002-10-28 11:57 hardaker
+
+ * agent/mibgroup/examples/ucdDemoPublic.conf:
+
+ misc vacm fixes
+
+2002-10-28 05:41 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - remove erroneous free() of rxbuf
+
+2002-10-25 09:35 hardaker
+
+ * snmplib/snmp_api.c:
+
+ fixed SNMP_CALLBACK_OP_DISCONNECT -> NETSNMP_OP_CALLBACK_DISCONNECT as noted by TrogL on IRC
+
+2002-10-25 04:34 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - perform a NETSNMP_CALLBACK_OP_DISCONNECT type callback if we
+ decide to shutdown a stream type connection because we received
+ an excessively large packet.
+
+2002-10-24 07:41 hardaker
+
+ * README:
+
+ Added the super-bug-patch generator Stefan Radman to the THANKS list
+
+2002-10-24 07:40 hardaker
+
+ * configure.in:
+
+ bug #617508: added the mta_sendmail module to --help
+
+2002-10-24 07:35 hardaker
+
+ * local/Makefile.in:
+
+ update install list for mib2c conf files and remove old one
+
+2002-10-23 17:34 hardaker
+
+ * configure, configure.in:
+
+ fix incorrect variable name I noticed when copying to a different configure script in another package
+
+2002-10-23 17:28 hardaker
+
+ * Makefile.in:
+
+ Fixed bug#617838: versiontag isn't distributed and shouldn't be always
+ used in the make distclean calls.
+
+2002-10-23 17:12 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ inconsequencial memory leaks fixed (init time leaks).
+
+2002-10-23 17:10 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ Fixed various memory leaks in the table_iterator as pointed out by
+ Roger McCalman and Jay Parlar on the -coders list (including their patches)
+
+2002-10-23 15:44 hardaker
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ snmpNotifyTable.c
+
+2002-10-23 15:40 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ free a previously malloced pointer to the watch variable before replacing it.
+
+2002-10-23 15:40 hardaker
+
+ * agent/mibgroup/examples/delayed_instance.c:
+
+ remove duplicate unused malloc.
+
+2002-10-21 09:43 jbpn
+
+ * include/net-snmp/system/solaris2.9.h:
+
+ - add system file for Solaris 9
+
+2002-10-17 19:44 hardaker
+
+ * agent/agent_registry.c, agent/snmp_agent.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/vacm_vars.h,
+ include/net-snmp/agent/agent_callbacks.h,
+ include/net-snmp/agent/agent_registry.h,
+ include/net-snmp/library/vacm.h, snmplib/vacm.c:
+
+ Optimized the VACM checks in the case of getnext/getbulk so that when
+ large portions of the mib tree are excluded, the sub-mib access code
+ won't be called at all (finally implementing a very long needed optimization).
+
+2002-10-17 19:41 hardaker
+
+ * include/net-snmp/library/snmp_api.h, snmplib/snmp_api.c
+:
+
+ new function to find the commonality between two oids: netsnmp_oid_find_prefix
+
+2002-10-17 19:39 hardaker
+
+ * Makefile.in, aclocal.m4, configure,
+ configure.in:
+
+ Print out a "summary" at the end of a run
+
+2002-10-17 02:40 dts12
+
+ * local/mib2c.old-api.conf:
+
+ Properly terminate a loop construct (missing '@end@')
+ Spotted by Karl Cooper. Oops!
+
+2002-10-16 14:19 rstory
+
+ * agent/snmpd.c:
+
+ restore continue after EINTR caused by signal we handled (instead of falling
+ thorough to exit!)
+
+2002-10-16 14:00 rstory
+
+ * agent/snmpd.c:
+
+ check for our signal flags on EINTR, and only relesect if not changed;
+ debug msg when signals registered and for select/fdsets;
+
+2002-10-16 12:52 rstory
+
+ * Makefile.top:
+
+ move CPPFLAGS before user configure CFLAGS.. so if a user adds something
+ like /usr/local/include to CFLAGS, we will pick up our local includes first,
+ instead of includes from a previous release..
+
+2002-10-15 21:06 rstory
+
+ * apps/: snmptrapd.c, snmptrapd_log.c, snmptrapd_log.h
+:
+
+ make sure snmptrapd always honors DS_APP_NUMERIC_IP for logging
+
+2002-10-15 14:09 rstory
+
+ * snmplib/mib.c:
+
+ netsnmp_get_boolean -> netsnmp_ds_get_boolean
+
+2002-10-15 11:08 rstory
+
+ * agent/helpers/table.c:
+
+ fix constant used in assert, noted on coders
+
+2002-10-15 11:07 rstory
+
+ * agent/snmp_agent.c:
+
+ include syslog for libwrap log levels
+
+2002-10-15 07:39 hardaker
+
+ * man/snmpcmd.1.def:
+
+ Add yet another way to specify v6 addresses
+
+2002-10-14 08:54 hardaker
+
+ * man/snmpcmd.1.def:
+
+ fix ipv6 transport address specs
+
+2002-10-11 16:18 hardaker
+
+ * README.cmu, dist/net-snmp.spec:
+
+ Remove the README.cmu file (entirely out of date at this point).
+
+2002-10-11 13:57 hardaker
+
+ * acconfig.h, configure, configure.in,
+ agent/mibgroup/ucd-snmp/disk.c,
+ include/net-snmp/net-snmp-config.h.in:
+
+ patch #600933 from Donal Diamond: dskPercentNode for FreeBSD4
+
+2002-10-11 13:49 hardaker
+
+ * snmplib/mib.c:
+
+ Patch #598280 from Jeff Watson: make -OQ not print type warnings.
+
+2002-10-11 13:43 hardaker
+
+ * dist/Makefile:
+
+ fix include directory
+
+2002-10-11 13:42 hardaker
+
+ * dist/.cvsignore:
+
+ ignore rpm subdir
+
+2002-10-11 13:32 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ better docs about auto-extracted SF news
+
+2002-10-11 13:04 hardaker
+
+ * dist/: Makefile, net-snmp.spec:
+
+ merge in patch #598869: Mark Harig's better rpm stuff
+
+2002-10-11 12:21 hardaker
+
+ * include/net-snmp/library/default_store.h, snmplib/mib.c
+:
+
+ Alternative to a patch suggestion: add -OU to not print UNITS suffixes.
+
+2002-10-11 12:18 hardaker
+
+ * man/snmpcmd.1.def:
+
+ ../agent/snmp_agent.c
+
+2002-10-11 12:14 hardaker
+
+ * man/snmp.conf.5.def:
+
+ document dontPrintUnits
+
+2002-10-11 11:48 hardaker
+
+ * agent/snmp_agent.c:
+
+ Patch #617151 from Andrew Rucker Jones: fix libwrap headers.
+ - I'm still unhappy with how libwrap functions... needs thinking about.
+
+2002-10-11 10:53 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Patch #312694 from John Surveyor: fix diskio on solaris.
+
+2002-10-11 10:37 hardaker
+
+ * agent/mibgroup/mibII/at.c:
+
+ Applied patch #621398 from Matthew Krenzer to fix linux arp table.
+
+2002-10-11 06:47 rstory
+
+ * win32/snmpdsdk/snmpd.dsp:
+
+ chg netsnmpmibs -> netsnmpmibsskd (noted on coders by Jed Whitten)
+
+2002-10-11 06:45 jbpn
+
+ * man/snmpcmd.1.def:
+
+ - note square brackets for IPv6 addresses
+
+2002-10-11 06:40 jbpn
+
+ * agent/snmpd.c:
+
+ - restart select() more quickly if an EINTR happens
+
+2002-10-10 22:51 hardaker
+
+ * FAQ:
+
+ applied Harrie's patch describing low memory footprints
+
+2002-10-10 08:38 hardaker
+
+ * snmplib/snmpksm.c:
+
+ Patch from Ken Horstein to fix KSM module
+
+2002-10-10 03:22 jbpn
+
+ * agent/helpers/table_array.c:
+
+ - remove bad inlines which cause file not to compile with Sun CC.
+ See bug #620827.
+
+2002-10-09 23:03 hardaker
+
+ * dist/net-snmp.spec:
+
+ add .la files
+
+2002-10-09 23:00 hardaker
+
+ * dist/net-snmp.spec:
+
+ make the .spec file almost usable.
+
+2002-10-08 15:55 hardaker
+
+ * FAQ:
+
+ FAQ updates for download sites.
+
+2002-10-08 07:36 hardaker
+
+ * perl/OID/OID.pm:
+
+ Patch from Joshua Keroes for string comparisons
+
+2002-10-07 10:57 hardaker
+
+ * FAQ:
+
+ added a statement about the COPYING file (suggested by Harrie)
+
+2002-10-06 11:32 rstory
+
+ * dist/README.build-scripts:
+
+ nsb-* likes full paths, update examples; fix sourceforge upload site
+
+2002-10-05 14:42 hardaker
+
+ * README, sedscript.in, snmplib/snmp_version.c
+, FAQ, perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.6 )
+
+2002-10-05 14:42 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_bulk_to_next.3,
+ netsnmp_debug.3, netsnmp_handler.3, netsnmp_instance.3
+, netsnmp_multiplexer.3, netsnmp_old_api.3,
+ netsnmp_read_only.3, netsnmp_scalar.3,
+ netsnmp_serialize.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_todo.3, netsnmp_watcher.3:
+
+ make docs
+
+2002-10-05 14:41 hardaker
+
+ * ChangeLog, NEWS:
+
+ update for 5.0.6
+
+2002-10-05 14:38 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ misc updates
+
+2002-10-05 14:29 hardaker
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend
+:
+
+ make depend
+
+2002-10-05 14:09 hardaker
+
+ * Makefile.top:
+
+ update for 5.0.6
+
+2002-10-05 14:08 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ remove illegal flag from nsb-config
+
+2002-10-05 13:41 rstory
+
+ * agent/snmp_agent.c:
+
+ efence is your friend: don't allocate 0 bytes
+
+2002-10-05 12:58 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ efence is your friend: don't reference ptr after is has been free'd.
+
+2002-10-04 07:17 hardaker
+
+ * agent/snmp_agent.c:
+
+ fix secondary effect of bug 613983 and really fix it this time.
+
+2002-10-02 10:56 hardaker
+
+ * agent/mibgroup/tunnel/: tunnel.c (V4-2-patches.2), tunnel.c
+:
+
+ Patch from Frank Strauss to fix some coding errors
+
+2002-10-01 07:39 rstory
+
+ * agent/snmp_vars.c:
+
+ offical patch 617049: initialize container list earlier (in init_agent)
+
+2002-10-01 07:35 rstory
+
+ * agent/snmp_vars.c:
+
+ remove ^M characters (damn windows editors)
+
+2002-09-30 15:17 rstory
+
+ * FAQ, README, sedscript.in, perl/SNMP/SNMP.pm
+, snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.5 )
+
+2002-09-30 15:16 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ add info on md5sums and gpg signing
+
+2002-09-30 15:15 rstory
+
+ * dist/cvsup:
+
+ fix chmod to do what I wanted, not what I told it
+
+2002-09-30 15:14 rstory
+
+ * ChangeLog, Makefile.top, NEWS:
+
+ update for 5.0.5
+
+2002-09-30 14:27 rstory
+
+ * ChangeLog:
+
+ merge pre changes into 5.0.4 comments
+
+2002-09-30 14:25 rstory
+
+ * NEWS:
+
+ update for 5.0.4
+
+2002-09-30 14:23 hardaker
+
+ * NEWS:
+
+ NEWS updates for 5.0.4
+
+2002-09-30 14:03 rstory
+
+ * README:
+
+ update my email address
+
+2002-09-30 14:03 rstory
+
+ * ChangeLog:
+
+ update for release 5.0.4
+
+2002-09-30 13:08 rstory
+
+ * agent/helpers/table.c:
+
+ make len a size_t to fix problem on 64 bit system, reported by sebnod` in IRC
+
+2002-09-30 13:05 rstory
+
+ * agent/helpers/table.c:
+
+ don't use static local vars, as they are likely to cause problems with threads
+
+2002-09-30 12:48 rstory
+
+ * dist/nsb-package:
+
+ make sure install dir is relative to build dir
+
+2002-09-30 12:20 rstory
+
+ * snmplib/vacm.c:
+
+ add missing newline in debug
+
+2002-09-30 12:19 rstory
+
+ * dist/: nsb-functions, nsb-package:
+
+ fix typos
+
+2002-09-30 12:18 rstory
+
+ * agent/snmp_agent.c:
+
+ avoid infinite loop
+
+2002-09-30 11:59 rstory
+
+ * dist/nsb-functions:
+
+ don't assume make is GNU make, and search for it. require user to set an
+ env var if no GNU make is found in PATH
+
+2002-09-30 11:58 rstory
+
+ * dist/cvsup:
+
+ if CVS dir is ro, automagically make it rw before update and ro after update
+
+2002-09-27 11:03 hardaker
+
+ * agent/snmp_agent.c:
+
+ make get_set_cache() return an error if no previous SET has been started.
+
+2002-09-27 11:02 hardaker
+
+ * agent/agent_registry.c:
+
+ double check against some null pointers before using them in the cache code.
+
+2002-09-27 10:36 hardaker
+
+ * agent/snmp_agent.c:
+
+ set treecache_num to -1 at init of memory, to be extra safe.
+
+2002-09-26 11:58 hardaker
+
+ * agent/: snmp_agent.c, snmpd.c:
+
+ move libwrap variables
+
+2002-09-26 11:57 hardaker
+
+ * perl/agent/agent.xs:
+
+ ok, remove tcpwrappers vars
+
+2002-09-26 10:44 hardaker
+
+ * perl/agent/agent.xs:
+
+ define stupid variables needed by tcpwrappers because they don't get
+ concepts of encapsulation. arg.
+
+2002-09-26 08:26 hardaker
+
+ * perl/agent/agent.xs:
+
+ change call_pv to perl_call_pv for older versions of perl.
+
+2002-09-26 08:10 hardaker
+
+ * snmplib/mib.c:
+
+ run strdup() on get_mib_dir() results to fix bug pointed out by Eugene Bruk.
+
+2002-09-23 10:14 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ mention freshmeat
+
+2002-09-23 10:13 hardaker
+
+ * agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/versioninfo.h, mibs/UCD-SNMP-MIB.txt
+:
+
+ - implement a (long needed) settable variable to store the current
+ persistent information.
+
+2002-09-23 09:47 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - make not in time window reports trigger a resend of informs.
+ (suggestion from Erik Anggard)
+
+2002-09-20 08:28 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.h:
+
+ - remove functions vacm_parse_security and vacm_free_security which
+ don't exist
+
+2002-09-19 14:01 hardaker
+
+ * perl/agent/agent.xs:
+
+ - support agent shutdowns (well, ok it's just an api since it doesn't work).
+ - misc bug fixes.
+
+2002-09-19 13:38 hardaker
+
+ * perl/agent/: agent.xs, netsnmp_request_infoPtr.pm:
+
+ fix agent request_infoPtr problems.
+
+2002-09-19 09:04 dts12
+
+ * win32/snmptranslate/snmptranslate.dsp:
+
+ Compile and link with 'getopt.c' explicitly.
+
+ This should not be necessary, but for some reason
+ (that completely escapes me!), using command-line options
+ (such as -IR) with the Release version of snmptranslate
+ causes a run-time DLL error. (The Debug version is fine).
+ The other applications seem to be OK - this problem only
+ seems to hit snmptranslate. So as a sticking-plaster,
+ compiliing getopt.c in as part of the project, keeps both
+ versions of the application happy.
+ Someone with better Windows knowledge than me needs to
+ look at this and fix it properly.
+
+2002-09-19 03:14 jbpn
+
+ * include/net-snmp/library/snmp_api.h:
+
+ - undo worst of indent damage
+
+2002-09-19 03:03 jbpn
+
+ * include/net-snmp/library/snmp_api.h:
+
+ - remove _dparse functions (which don't exist)
+
+2002-09-18 07:55 hardaker
+
+ * testing/eval_tools.sh:
+
+ reset SNMP_SLEEP after loop
+
+2002-09-18 07:41 jbpn
+
+ * snmplib/snmp_client.c:
+
+ - remove very obsolete (and not used anywhere) #definitions of
+ PARTY_MIB_BASE and CONTEXT_MIB_BASE
+
+2002-09-17 23:59 rstory
+
+ * ChangeLog:
+
+ tweak for 5.0.4 last minute update
+
+2002-09-17 23:48 rstory
+
+ * testing/eval_tools.sh:
+
+ chg > to -gt to achieve intended result
+
+2002-09-17 22:39 rstory
+
+ * NEWS:
+
+ update for 5.0.4
+
+2002-09-17 22:33 rstory
+
+ * FAQ, README, sedscript.in, perl/SNMP/SNMP.pm
+, snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.4 )
+
+2002-09-17 22:32 rstory
+
+ * ChangeLog:
+
+ update for 5.0.4
+
+2002-09-17 21:59 rstory
+
+ * Makefile.in:
+
+ add $(srcdir) to a few dependencies to try and reduce the # of times that
+ config.status is run when building outside the src dir
+
+2002-09-17 21:54 rstory
+
+ * README.win32:
+
+ visually provocative section headers; add recent status (all bad news);
+ not to use new win32sdk.dsw to get additonal functionality with platform sdk;
+ remove info on removing agentx, as it's been around now for a while; add
+ section on what files to edit to add mib2c generated code to agent; remove
+ reference to specific release number in example
+
+2002-09-17 21:25 rstory
+
+ * win32/snmpdsdk/snmpd.dsp:
+
+ take 'sdk' out of exe name
+
+2002-09-17 21:25 rstory
+
+ * win32/win32sdk.dsw:
+
+ swap snmpdsdk for snmpd
+
+2002-09-17 21:14 rstory
+
+ * win32/: encode_keychange/encode_keychange.dsp,
+ libsnmp/libsnmp.dsp, libsnmp_dll/libsnmp_dll.dsp,
+ snmpbulkget/snmpbulkget.dsp, snmpbulkwalk/snmpbulkwalk.dsp
+, snmpd/snmpd.dsp, snmpdelta/snmpdelta.dsp,
+ snmpdf/snmpdf.dsp, snmpget/snmpget.dsp,
+ snmpgetnext/snmpgetnext.dsp, snmpnetstat/snmpnetstat.dsp
+, snmpset/snmpset.dsp, snmpstatus/snmpstatus.dsp,
+ snmptable/snmptable.dsp, snmptest/snmptest.dsp,
+ snmptranslate/snmptranslate.dsp, snmptrap/snmptrap.dsp,
+ snmptrapd/snmptrapd.dsp, snmpusm/snmpusm.dsp,
+ snmpvacm/snmpvacm.dsp, snmpwalk/snmpwalk.dsp:
+
+ get all our ducks in a row: add advapi32.lib to link lines, make sure all
+ Release and Debug libs/apps are compile with same C++ settings
+
+2002-09-17 21:12 rstory
+
+ * win32/netsnmpmibs/netsnmpmibs.dsp:
+
+ remove sdk dependent modules
+
+2002-09-17 21:10 rstory
+
+ * win32/mib_module_inits.h:
+
+ group modules that depend on win32 sdk together, with ifdef
+
+2002-09-17 21:08 rstory
+
+ * agent/snmp_vars.c:
+
+ no callback for win32 until pipe fd problem is fixed
+
+2002-09-17 21:07 rstory
+
+ * win32/: netsnmpmibssdk/netsnmpmibssdk.dsp,
+ snmpdsdk/snmpd.dsp:
+
+ new versions for sdk users
+
+2002-09-17 21:05 rstory
+
+ * win32/win32sdk.dsw:
+
+ new workspace for sdk users
+
+2002-09-16 13:27 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ mib module loading fixes by calling init_snmp first
+
+2002-09-13 12:05 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ tweak example nsb-config command; add -b back to cvs2cl, otherwise you
+ get changelog msgs from other branches and have to weed them out
+
+2002-09-13 09:33 hardaker
+
+ * perl/OID/: OID.pm, OID.xs, test.pl:
+
+ fix illegal oids to not return a pointer.
+
+2002-09-13 07:40 jbpn
+
+ * snmplib/snmpUDPDomain.c:
+
+ - minor optimisation; we don't need a zero-terminated community
+ string except for debugging output.
+
+2002-09-13 07:35 hardaker
+
+ * local/mib2c:
+
+ added -i option to request indent not be run
+
+2002-09-13 07:06 jbpn
+
+ * COPYING:
+
+ - add missing verb in introduction
+
+2002-09-12 12:58 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ protect calling some SvIV dereference functions if it's not an IV.
+ - eliminates the remaining perl warnings.
+
+2002-09-12 11:45 hardaker
+
+ * net-snmp-config.in:
+
+ include ldflags where appropriate (--libs, --agent-libs, ...)
+
+2002-09-11 22:48 rstory
+
+ * dist/: nsb-nightly, nsb-package:
+
+ add/use new option to remove build dir after successful build
+
+2002-09-11 22:47 rstory
+
+ * dist/nsb-functions:
+
+ print build dir
+
+2002-09-11 22:19 hardaker
+
+ * testing/tests/: Sv3config, T030snmpv3usercreation:
+
+ much more complex tests of USM user creation/modification.
+
+2002-09-11 22:07 hardaker
+
+ * testing/: eval_tools.sh, tests/T001snmpv1get,
+ tests/T002snmpv1getnext, tests/T003snmpv1getfail,
+ tests/T004snmpv1nosuch:
+
+ - support for multiple tests at once.
+ - merge v1 tests into a single (faster) test.
+
+2002-09-11 21:34 rstory
+
+ * dist/nsb-functions:
+
+ don't monkey around with returning error codes, just exit; more regexp tweaks
+
+2002-09-11 16:36 hardaker
+
+ * testing/eval_tools.sh:
+
+ - use sub-second sleeps if available
+ - sleep 1 (sub-)second at a time when waiting for particular tests
+ rather than the full SNMP_SLEEP duration.
+
+2002-09-11 16:24 hardaker
+
+ * apps/snmptrapd.c:
+
+ use snmp_log instead of printf for shutdown message.
+
+2002-09-11 15:42 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ missing variable decl pointed out by irc:df
+
+2002-09-10 13:16 rstory
+
+ * dist/nsb-functions:
+
+ tweak error regexps & error messages
+
+2002-09-10 12:28 rstory
+
+ * local/mib2c.array-user.conf:
+
+ compiler warnings are your friend!; fix embeded comments; fix non-void
+ functions w/no rtn values; code reorg to fix emacs indent complaints
+
+2002-09-10 12:26 rstory
+
+ * Makefile.in:
+
+ new start-flag end-flag targets to help nightly build script determine
+ if a make completed successfully
+
+2002-09-10 12:12 rstory
+
+ * dist/nsb-functions:
+
+ tweaks for new script for automated nightly builds; ad nsb-abort, nsb-flow;
+ direct some messages to stderr; use new start-flag end-flag make targets;
+ update error grep to include '***'; check for new value to rm -fR build dir
+
+2002-09-10 12:08 rstory
+
+ * dist/nsb-nightly:
+
+ new script for automated nightly builds
+
+2002-09-10 12:08 rstory
+
+ * dist/nsb-package:
+
+ add option to rm -fR build dir at start; check scrip path for nsb-functions;
+ prefix default build dir w/version; exit w/rc from nsb-build
+
+2002-09-10 12:05 rstory
+
+ * dist/: nsb-config, nsb-platform:
+
+ add current path to script to nsb-function search path
+
+2002-09-09 06:28 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - fix bug pointed out by Jared Smith-Mickelson (bug #605147)
+ whereby passing an unknown type character to snmp_add_var would
+ cause a segfault.
+
+2002-09-09 06:09 hardaker
+
+ * apps/snmptranslate.c:
+
+ double check a pointer value before using it.
+
+2002-09-09 06:09 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ include/net-snmp/net-snmp-config.h.in:
+
+ Current header update patch for netbsd from Patrick Welche.
+
+2002-09-06 15:30 driehuis
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ Mark the non-raw variants of objects that are accessable as raw counters
+ as deprecated, to (hopefully!) cut down on the number of users that get
+ bitten by it..
+
+2002-09-04 11:36 hardaker
+
+ * README.solaris:
+
+ added Bruce's email address
+
+2002-09-04 11:27 hardaker
+
+ * Makefile.in, Makefile.rules:
+
+ fix perlclean
+
+2002-09-04 11:10 hardaker
+
+ * agent/snmpd.c:
+
+ Fix process grouping by calling setsid() (reported by irc:TrogL)
+
+2002-09-04 11:09 hardaker
+
+ * configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in:
+
+ check for setsid().
+
+2002-09-03 10:51 hardaker
+
+ * local/mib2c:
+
+ fix cases where there either are no tables or no scalars.
+
+2002-09-03 10:23 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ don't use NULL variables.
+
+2002-09-02 19:33 rstory
+
+ * FAQ, README, sedscript.in, perl/SNMP/SNMP.pm
+, snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.4.pre2 )
+
+2002-09-02 19:33 rstory
+
+ * ChangeLog:
+
+ update for release 5.0.4.pre2
+
+2002-09-02 19:22 rstory
+
+ * man/netsnmp_handler.3:
+
+ updated docs
+
+2002-09-02 19:19 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend
+:
+
+ make depend
+
+2002-09-02 19:16 rstory
+
+ * dist/nsb-config:
+
+ try and guess at src dir if not specified
+
+2002-09-02 19:15 rstory
+
+ * dist/README.build-scripts:
+
+ add note about err when building in and out of source tree
+
+2002-09-02 18:55 rstory
+
+ * Makefile.in:
+
+ full path to versiontag, in case we are buildint outside of src directory
+
+2002-09-02 18:37 rstory
+
+ * dist/nsb-functions:
+
+ remove forced prompt on errors
+
+2002-09-02 18:36 rstory
+
+ * Makefile.in:
+
+ add warnings when VERSION is required; add tarclean target; add tarclean to
+ distclean target
+
+2002-09-02 18:34 rstory
+
+ * agent/mibgroup/versiontag:
+
+ add msg on error; add clean target
+
+2002-09-02 17:27 rstory
+
+ * NEWS:
+
+ update win32 & AgentX status
+
+2002-09-02 17:20 rstory
+
+ * agent/snmp_agent.c, agent/mibgroup/agentx/master_admin.c
+, include/net-snmp/agent/snmp_agent.h:
+
+ fix to avoid locking up the agent when a sugagent dies during a set request. We
+ must clean up the delegated requests when the session(s) are closed, so that
+ they will be processed and removed, allowing further requests to be processed.
+
+2002-09-01 10:43 rstory
+
+ * snmplib/container_binary_array.c:
+
+ change result type back to int, as it may receive a negative value
+
+ PLEASE check the use of a variable before changing is signedness, especially
+ areound release time!
+
+2002-08-30 12:18 rstory
+
+ * include/net-snmp/utilities.h:
+
+ include check_varbind.h
+
+2002-08-30 12:18 rstory
+
+ * agent/helpers/table_array.c:
+
+ change NOSUCHNAME to NOSUCHINSTANCE again, as it seems the agentX fix also
+ correctly deals with this error code
+
+2002-08-30 06:14 hardaker
+
+ * FAQ, README:
+
+ - delete sunsite.cnlab-switch.ch mirror, as it isn't one anymore.
+
+2002-08-29 10:32 rstory
+
+ * dist/nsb-functions:
+
+ check for modules before configuring them
+
+2002-08-29 07:52 hardaker
+
+ * snmplib/scapi.c:
+
+ Fix the last AES bug I know of. AES128 works great.
+ I still Need to fix 192/256 for longer key generation from MD5/SHA
+
+2002-08-29 07:52 hardaker
+
+ * perl/agent/agent.pm:
+
+ use the right perl module name in the use line.
+
+2002-08-29 03:47 dts12
+
+ * agent/agent_handler.c, agent/mibgroup/agentx/master.c
+, include/net-snmp/agent/agent_registry.h,
+ win32/config.h:
+
+ More Win32-related tidying up.
+ The agent now compiles with relatively few warnings.
+
+2002-08-29 01:50 dts12
+
+ * agent/agent_trap.c, agent/mibgroup/agentx/client.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/utilities/override.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/library/mt_support.h,
+ snmplib/container_binary_array.c, snmplib/snmpusm.c,
+ win32/config.h, win32/libsnmp_dll/libsnmp.def:
+
+ Declare new routine 'netsnmp_oid_equals', and assorted Win32 cleanup fixes.
+
+2002-08-28 11:15 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ clarify cvs2cl script name; remove -b flag from cvs2cl per Dave; a little
+ reorganization; put commands on separate lines prefixed with $; note 5.x/4.x
+ differences per Dave's email; plug my new scripts where appropriate
+
+2002-08-27 11:48 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ add URL for cvs2cl; update cvs2cl cmds to cvs2cl.pl, since that's the file
+ that's actually distributed
+
+2002-08-26 21:59 rstory
+
+ * Makefile.top:
+
+ update for release 5.0.4.pre1
+
+2002-08-26 21:25 rstory
+
+ * snmplib/snmp_version.c, FAQ, README,
+ sedscript.in, perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.4.pre1 )
+
+2002-08-26 21:24 rstory
+
+ * ChangeLog:
+
+ update for release 5.0.4.pre1
+
+2002-08-26 21:19 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend
+:
+
+ make depend
+
+2002-08-26 21:17 rstory
+
+ * man/: netsnmp_agent.3, netsnmp_bulk_to_next.3,
+ netsnmp_debug.3, netsnmp_handler.3, netsnmp_instance.3
+, netsnmp_multiplexer.3, netsnmp_old_api.3,
+ netsnmp_read_only.3, netsnmp_scalar.3,
+ netsnmp_serialize.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_todo.3, netsnmp_watcher.3:
+
+ update man pages for 5.0.4.pre1
+
+2002-08-26 21:10 rstory
+
+ * dist/nsb-config:
+
+ new file to configure using same options as nsb-package for test or dist
+
+2002-08-26 21:09 rstory
+
+ * dist/nsb-package:
+
+ don't append sys-name when building in src tree
+
+2002-08-26 21:09 rstory
+
+ * dist/nsb-functions:
+
+ fix typo
+
+2002-08-26 21:06 rstory
+
+ * dist/nsb-functions:
+
+ rename nsb-get-confg -> nsb-config-dist; use double quotes cuz of some
+ wierd shell thing I don't yet understand; check for src dir in config*
+
+2002-08-26 20:34 rstory
+
+ * Makefile.in:
+
+ tweak commentcheck target to work outside the source tree
+
+2002-08-26 20:33 rstory
+
+ * agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/ucd-snmp/proxy.c,
+ include/net-snmp/library/asn1.h,
+ include/net-snmp/library/oid_stash.h, snmplib/winservice.c
+:
+
+ remove C++ style comments (and anything that even remotely resembles one)
+
+2002-08-26 14:47 rstory
+
+ * dist/nsb-functions:
+
+ pass make params to make, so we don't try to install in /usr/local/bin of
+ the compile servers...:-/
+
+2002-08-26 14:39 rstory
+
+ * dist/nsb-functions:
+
+ make dist & extra transports; no ipv6 on Darwin; make touchit before make
+
+2002-08-26 14:04 rstory
+
+ * agent/mibgroup/Rmon/event.c:
+
+ replace u_int32_t, which doesn't compile on Sun 5.8, with u_int
+
+2002-08-26 13:53 rstory
+
+ * agent/mibgroup/Rmon/rows.c:
+
+ fix undeclared variable error spotted on Sun, which linux missed completely.
+ I have no idea how this compiled before!!
+
+2002-08-26 13:43 rstory
+
+ * dist/nsb-functions:
+
+ cleaner way to add system specific modules; disable perl, as it breaks
+ builds outside of the source tree
+
+2002-08-26 12:45 rstory
+
+ * dist/nsb-functions:
+
+ only configure IPX on Linux
+
+2002-08-26 12:44 rstory
+
+ * dist/nsb-functions:
+
+ only configure IPX on Linux; bail on configure errors
+
+2002-08-26 12:04 rstory
+
+ * dist/README.build-scripts:
+
+ add suggestion to symlink nsb-* in local bin dir
+
+2002-08-26 12:03 rstory
+
+ * dist/: nsb-package, nsb-functions:
+
+ add option for pre-release test configure options
+
+2002-08-26 12:02 rstory
+
+ * README.snmpv3:
+
+ make section headers stand out more; move note about encryption not being
+ enabled to a more prominent place.
+
+2002-08-22 05:31 jbpn
+
+ * include/net-snmp/system/solaris2.7.h:
+
+ - DONT_USE_NLIST reinstated, so NO_KMEM_USAGE redundant
+
+2002-08-22 05:29 jbpn
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ - reinstate test for DONT_USE_NLIST
+
+2002-08-22 04:11 jbpn
+
+ * agent/snmpd.c:
+
+ - stop and restart logging when HUPped. This allows logfiles to be
+ rotated and so forth.
+
+2002-08-22 01:31 dts12
+
+ * README.snmpv3:
+
+ Add the missing '-x/X' options to the example authPriv command line
+ (reported by Prasada R Vankayalapati)
+
+2002-08-20 08:04 hardaker
+
+ * agent/mibgroup/agentx/subagent.c, apps/snmptrapd.c,
+ include/net-snmp/agent/ds_agent.h, FAQ:
+
+ quiet snmptrapd when it can't connect to the agentx master.
+
+2002-08-20 05:54 jbpn
+
+ * include/net-snmp/system/solaris2.7.h:
+
+ - add #define NO_KMEM_USAGE 1 since net-snmp-config.h.in no longer
+ pays attention to the DONT_USE_NLIST token. Omission of this
+ causes the agent to exit with the message "init_kmem: kvm_open
+ failed: error 0".
+
+ NOTE: this may need applying to other members of the Solaris 2
+ family, but I don't have machines to hand to test this.
+
+2002-08-20 05:48 jbpn
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - detect gigabit ethernet devices (geN)
+ - undo indent mayhem
+
+2002-08-20 02:57 jbpn
+
+ * include/net-snmp/utilities.h:
+
+ - for now, don't #include snmp_locking.h since it breaks re-entrant
+ support (because mutex_type gets multiply-defined). Furthermore, the
+ functions it declares are never used anywhere, nor defined anywhere.
+
+2002-08-20 02:56 jbpn
+
+ * include/net-snmp/library/mt_support.h:
+
+ - don't define "do nothing" macros for snmp_res_lock et al. functions
+ on Win32 platform (since real "do nothing" functions are required for
+ reasons best known to someone else).
+ - unmangling
+
+2002-08-20 02:54 jbpn
+
+ * include/net-snmp/library/snmp_locking.h:
+
+ - fix highly bogus non-C syntax
+
+2002-08-20 02:53 jbpn
+
+ * snmplib/mt_support.c:
+
+ - snmp_res_lock et al. functions no longer #defined to "do nothing"
+ targets for Win32 in mt_support.h, therefore no need to #undef them
+ here.
+ - unmangling
+
+2002-08-19 22:13 hardaker
+
+ * include/net-snmp/agent/agent_registry.h:
+
+ headers for cache enabling functions.
+
+2002-08-19 22:12 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ don't use non-existent memory pointers to the response data (eg: "timeout")
+
+2002-08-19 14:46 nba
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ Change a few conditionals to use #if in place of #ifdef
+
+2002-08-19 14:28 nba
+
+ * snmplib/: mib.c, parse.c:
+
+ Align with 4.2 branch
+
+2002-08-19 14:26 nba
+
+ * mibs/: DISMAN-SCHEDULE-MIB.txt,
+ IANA-ADDRESS-FAMILY-NUMBERS-MIB.txt, IANAifType-MIB.txt
+, INET-ADDRESS-MIB.txt, Makefile.mib, ianalist
+, mibfetch, rfclist:
+
+ Update to current MIBs
+
+2002-08-19 14:25 nba
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ Bail out for bad snmpAdminString value
+
+2002-08-19 07:43 jbpn
+
+ * FAQ (V4-2-patches.3), FAQ:
+
+ - don't use positional community parameter in examples
+ - break a couple of over-long lines
+ - mention netsnmp_ variant of ds_set_ function
+
+2002-08-19 02:44 dts12
+
+ * FAQ (V4-2-patches.2), FAQ:
+
+ Add an entry about the snmptrapd/AgentX warning message.
+
+2002-08-18 18:24 rstory
+
+ * dist/nsb-functions:
+
+ don't configure with build install dir, it is already specified on cmd line
+ for make install
+
+2002-08-18 10:59 rstory
+
+ * agent/helpers/table.c:
+
+ more debugging - log value request is trying to set
+
+2002-08-16 15:13 hardaker
+
+ * README:
+
+ added Bruce Shaw to the thanks list
+
+2002-08-16 15:12 hardaker
+
+ * README.solaris:
+
+ A great update talking about perl and solaris from Bruce Shaw
+
+2002-08-16 01:51 dts12
+
+ * agent/helpers/table_iterator.c:
+
+ Catch explicitly 'noSuchInstance' exceptions, when walking an
+ iterator-handled module, so that holes can be skipped and the
+ next real instance retrieved. (This was already handled for
+ modules that didn't mark missing instances explicitly).
+
+2002-08-16 00:17 hardaker
+
+ * agent/snmp_agent.c:
+
+ turn off caching by default, since the agentx code appears broken.
+
+2002-08-16 00:03 hardaker
+
+ * agent/: agent_registry.c, snmp_agent.c:
+
+ speed enhancements via implementing a registration subtree lookup
+ cache. greatly speeds things up when similar requests come in
+ (snmpwalk, ...).
+
+2002-08-15 10:35 hardaker
+
+ * snmplib/parse.c:
+
+ protect against NULL labels in subtrees
+
+2002-08-15 08:14 hardaker
+
+ * agent/agent_index.c, agent/agent_registry.c,
+ agent/agent_trap.c, agent/helpers/old_api.c,
+ agent/mibgroup/header_complex.c, agent/mibgroup/testhandler.c
+, snmplib/snmp_transport.c, snmplib/snmpusm.c:
+
+ use netsnmp_oid_equals (which is sometimes faster than
+ snmp_oid_compare) in a few places to achieve barely noticeable speed gains.
+
+2002-08-15 08:12 hardaker
+
+ * snmplib/parse.c:
+
+ double check a pointer exists before passing it to strcmp()
+
+2002-08-15 08:05 hardaker
+
+ * perl/SNMP/Makefile.PL:
+
+ change MAN3PODS to something compliant with the perl manuals. I think.
+
+2002-08-14 10:42 rstory
+
+ * apps/snmpset.c:
+
+ add debug for local parsing of args
+
+2002-08-14 09:26 rstory
+
+ * agent/mibgroup/agentx/: master.c, master_admin.c,
+ subagent.c:
+
+ add more detailed in debug messages; add a few new debugs
+
+2002-08-14 09:23 rstory
+
+ * agent/snmp_agent.c:
+
+ when all delegated requests have finished, check all requests status so that
+ asp status is set, which is necessary for correct agentx set processing.
+ (now if I can just get all this hair off the floor, and glue it back to my
+ head, and then fix that dent in the wall where I've been banging my head....)
+
+2002-08-13 14:25 hardaker
+
+ * snmplib/snmp_api.c:
+
+ fix a length comparison problem with netsnmp_oid_is_subtree()
+
+2002-08-13 14:24 hardaker
+
+ * NEWS:
+
+ document a few recent changes.
+
+2002-08-13 14:05 hardaker
+
+ * agent/mibgroup/host/hr_print.c:
+
+ Fix open file runaway on solaris. See bug #592806 reported by James Irwin.
+
+2002-08-13 12:05 rstory
+
+ * include/net-snmp/types.h:
+
+ array of pointers = pointer to a pointer
+
+2002-08-09 16:32 hardaker
+
+ * local/FAQ2HTML:
+
+ misc doc fixes.
+
+2002-08-09 16:31 hardaker
+
+ * snmplib/snmp_parse_args.c,
+ include/net-snmp/library/transform_oids.h, snmplib/snmpusm.c
+, snmplib/snmpv3.c:
+
+ initial AES support.
+
+2002-08-09 16:31 hardaker
+
+ * include/net-snmp/library/snmp_api.h, snmplib/snmp_api.c
+:
+
+ slight speed ups for snmp_oid_compare() to do single int compares till !=
+
+2002-08-09 16:29 hardaker
+
+ * snmplib/scapi.c:
+
+ - openssl 0.9.7 support for DES changes.
+ - initial AES support.
+
+2002-08-09 16:28 hardaker
+
+ * snmplib/keytools.c:
+
+ indent fixes.
+
+2002-08-09 16:27 hardaker
+
+ * include/net-snmp/library/: scapi.h, snmpusm.h:
+
+ define AES key specifics
+
+2002-08-09 16:26 hardaker
+
+ * acconfig.h, configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in:
+
+ - check for openssl .0.9.7 DES structures and functions.
+ - check for AES support in openssl (> 0.9.7)
+
+2002-08-09 16:10 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ fix mode processing for RESERVE1/RESERVE2 test failures
+
+2002-08-09 15:29 rstory
+
+ * agent/snmp_agent.c:
+
+ log msg when we ignore/fix illegal error_values for the client APIs
+
+2002-08-09 15:28 rstory
+
+ * local/mib2c.array-user.conf:
+
+ corrections to example code
+
+2002-08-09 15:27 rstory
+
+ * agent/helpers/table.c:
+
+ revert errors to uninformative SNMPv1 noSuchName for AgentX get-next/inclusive
+ processing; also add more comments here and there
+
+2002-08-09 14:08 rstory
+
+ * agent/mibgroup/agentx/master.c:
+
+ debug msg for agentx oid for cases other than get/getnext
+
+2002-08-09 08:45 rstory
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ don't free registration info on failure, as netsnmp_register_mib already did it
+
+2002-08-09 06:57 jbpn
+
+ * snmplib/: snmpAAL5PVCDomain.c, snmpCallbackDomain.c,
+ snmpIPXDomain.c, snmpTCPDomain.c, snmpTCPIPv6Domain.c
+, snmpUDPDomain.c, snmpUDPIPv6Domain.c,
+ snmpUnixDomain.c, snmp_transport.c:
+
+ - rename snmp_<domain>_blah functions to netsnmp_<domain>_blah
+ - make transport member functions static, to emphasise that they should
+ not be used directly
+ - handle EINTR in send and recv functions (as pointed out by Antti Kuntsi
+ in bug report #576806)
+ - formatting fixes
+
+2002-08-09 06:54 jbpn
+
+ * include/net-snmp/library/: snmpAAL5PVCDomain.h,
+ snmpIPXDomain.h, snmpTCPDomain.h, snmpTCPIPv6Domain.h
+, snmpUDPDomain.h:
+
+ - minor formatting fixes
+
+2002-08-09 06:54 jbpn
+
+ * include/net-snmp/library/snmpUnixDomain.h:
+
+ - don't export netsnmp_unix_blah() functions
+
+2002-08-09 06:53 jbpn
+
+ * include/net-snmp/library/snmp_transport.h:
+
+ - fix nasty formatting
+
+2002-08-08 09:14 rstory
+
+ * snmplib/snmpv3.c:
+
+ reword config_perror msgs to remove "Error", as it is redundant
+
+2002-08-08 09:11 rstory
+
+ * snmplib/keytools.c:
+
+ remove ifdef to log msg to user, after making msg more informative; remove
+ annoying blank lines
+
+2002-08-08 08:33 hardaker
+
+ * acconfig.h, configure, configure.in:
+
+ Patch from Harrie to completely disable kmem usage
+
+2002-08-06 00:30 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - set main_session to NULL in subagent_shutdown(). This (along with the
+ deregistration of all alarms) allows AgentX functionality to be
+ stopped and restarted in subagents.
+ - Thanks to Vishal Verma for original patch
+
+2002-08-06 00:27 jbpn
+
+ * include/net-snmp/library/snmp_alarm.h:
+
+ - add snmp_alarm_unregister_all() function
+
+2002-08-06 00:26 jbpn
+
+ * snmplib/: snmp_alarm.c, snmp_api.c:
+
+ - add snmp_alarm_unregister_all() function
+ - call it from snmp_shutdown()
+ - thanks to Vishal Verma for original patch
+
+2002-08-05 07:06 rstory
+
+ * local/mib2c.iterate.conf:
+
+ match function definition w/Netsnmp_*_DataPoint typedefs; add cvs Id
+
+2002-08-03 08:52 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ break up lines long than 80 chars; abcde, not abcdd
+
+2002-08-03 00:21 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ more updates about things Wes does at 12:30 am
+
+2002-08-02 23:44 hardaker
+
+ * FAQ, README, sedscript.in, perl/SNMP/SNMP.pm
+, snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.3 )
+
+2002-08-02 23:44 hardaker
+
+ * ChangeLog:
+
+ Update for 5.0.3
+
+2002-08-02 23:41 hardaker
+
+ * agent/mibgroup/agent/.cvsignore:
+
+ add .libs
+
+2002-08-02 23:40 hardaker
+
+ * agent/mibgroup/Rmon/.cvsignore:
+
+ ignore file
+
+2002-08-02 23:39 hardaker
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend
+:
+
+ make depend
+
+2002-08-02 23:37 hardaker
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ forgotten to check in test for perl_ev changes
+
+2002-08-02 23:35 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ remove debugging print (opps)
+
+2002-08-02 23:35 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ fix default version usage.
+
+2002-08-02 23:34 hardaker
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ Patch #572394 from Katsuhisa ABE:
+ - support link local addresses
+ - bind to ipv6 only if IPV6_V6ONLY is defined.
+
+2002-08-02 23:31 hardaker
+
+ * snmplib/snmp_parse_args.c:
+
+ fix configure specified default versioning
+
+2002-08-02 22:58 hardaker
+
+ * configure, configure.in:
+
+ Patch #572394: add ipv6 transports when --enable-ipv6 defined. Thanks to Katsuhisa ABE.
+
+2002-08-02 14:59 hardaker
+
+ * NEWS:
+
+ update for 5.0.3
+
+2002-08-02 14:55 hardaker
+
+ * man/snmp_agent_api.3.def:
+
+ update
+
+2002-08-02 14:39 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ more docs.
+
+2002-08-02 14:29 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_bulk_to_next.3,
+ netsnmp_debug.3, netsnmp_handler.3, netsnmp_instance.3
+, netsnmp_multiplexer.3, netsnmp_old_api.3,
+ netsnmp_read_only.3, netsnmp_scalar.3,
+ netsnmp_serialize.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_todo.3, netsnmp_watcher.3, Makefile.in:
+
+ doxygen update.
+
+2002-08-02 14:26 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ update for yet more stuff.
+
+2002-08-02 14:26 hardaker
+
+ * remove-files:
+
+ remove a few more dist related files.
+
+2002-08-02 14:23 hardaker
+
+ * snmplib/snmp_api.c:
+
+ error message change to remove DES specific error msg.
+
+2002-08-02 14:23 hardaker
+
+ * perl/agent/typemap:
+
+ spacing fixes.
+
+2002-08-02 14:22 hardaker
+
+ * perl/agent/: Makefile.PL, agent.xs:
+
+ renamed file.
+
+2002-08-02 14:22 hardaker
+
+ * perl/agent/: netsnmp_request_info.pm,
+ netsnmp_request_infoPtr.pm:
+
+ renamed file
+
+2002-08-02 14:20 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ Add a "evalvars" directive to do simply replacements.
+
+2002-08-02 14:16 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ use CVSUSER variable when doing stuff instead of my hard-coded name.
+
+2002-08-02 14:14 hardaker
+
+ * Makefile.top:
+
+ update libtool version for 5.0.3
+
+2002-08-02 14:13 hardaker
+
+ * Makefile.in:
+
+ change checkcomment tag to exclude win32 files.
+
+2002-08-02 14:13 hardaker
+
+ * ChangeLog:
+
+ update changelog build notes at the bottom of the file.
+
+2002-08-02 14:01 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ created a how-to file for making releases
+
+2002-08-02 14:01 hardaker
+
+ * dist/changelogfix:
+
+ changelog fix-up script
+
+2002-08-02 10:21 rstory
+
+ * dist/nsb-functions:
+
+ translate '/' in system name to '_' (for cygwin)
+
+2002-08-02 09:56 rstory
+
+ * dist/README.build-scripts:
+
+ fix section cvs get command example
+
+2002-08-02 09:06 dts12
+
+ * include/net-snmp/system/hpux.h:
+
+ Suppress 'inline' when not using GCC. Suggested by Johannes Schmidt-Fischer
+
+2002-08-02 08:59 rstory
+
+ * dist/README.build-scripts:
+
+ fix section on skipping make test; add -p flag to examples
+
+2002-08-02 08:52 rstory
+
+ * dist/README.build-scripts:
+
+ describe use of nsb-package script. Testers and comments appreciated...
+
+2002-08-02 08:33 rstory
+
+ * dist/nsb-platform:
+
+ output platform info
+
+2002-08-02 08:18 rstory
+
+ * dist/nsb-build:
+
+ renamed to nsb-package
+
+2002-08-02 08:18 rstory
+
+ * dist/nsb-package:
+
+ renamed nsb-build to avoid confusion with script function
+
+2002-08-02 08:15 hardaker
+
+ * dist/nsb-functions:
+
+ Change location name to Unknown
+
+2002-08-02 08:08 hardaker
+
+ * perl/: ASN/ASN.pm, agent/agent.pm,
+ agent/netsnmp_request_info.pm:
+
+ more old perl fixes
+
+2002-08-02 08:04 hardaker
+
+ * perl/: OID/OID.pm, agent/default_store/default_store.pm
+:
+
+ more old perl fixes
+
+2002-08-02 08:00 hardaker
+
+ * perl/default_store/default_store.pm:
+
+ more old perl fixes
+
+2002-08-02 07:48 rstory
+
+ * dist/nsb-functions:
+
+ fix return code
+
+2002-08-02 07:48 rstory
+
+ * dist/nsb-build:
+
+ don't pull first arg til after getopts/shift; move set of default opts
+
+2002-08-02 07:37 rstory
+
+ * dist/nsb-functions:
+
+ add option to skip build or test steps; add -f option to prompt to override
+ no prompt flag (useful for errors); new nsb-make method; check rc of
+ make clean
+
+2002-08-02 07:36 rstory
+
+ * dist/nsb-build:
+
+ add option to skip build or test steps; tweak usage
+
+2002-08-02 07:10 rstory
+
+ * dist/nsb-build:
+
+ fix typo; remove extra trailing slash in dir
+
+2002-08-02 06:33 rstory
+
+ * dist/nsb-build:
+
+ check more places to source nsb-functions; fix for cmd line build path
+
+2002-08-02 06:28 rstory
+
+ * dist/nsb-functions:
+
+ just show errors after build, not warnings
+
+2002-08-01 17:04 hardaker
+
+ * perl/OID/OID.xs:
+
+ revert to non-ansi prototypes for older perl with older compilers on
+ older systems. Not that I'm grumpy, of course.
+
+2002-08-01 16:25 hardaker
+
+ * configure.in, agent/snmp_perl.c:
+
+ check for older and new embedded perl call functions
+
+2002-08-01 14:07 rstory
+
+ * dist/nsb-functions:
+
+ don't symlink to src from build; update nsb-get-config
+
+2002-08-01 14:06 rstory
+
+ * dist/nsb-build:
+
+ fix for cmd line build dir
+
+2002-08-01 12:58 rstory
+
+ * dist/nsb-functions:
+
+ fix config install path; remove platform specific from nsb-build
+
+2002-08-01 12:56 rstory
+
+ * dist/nsb-build:
+
+ remove hard coded info
+
+2002-08-01 12:22 rstory
+
+ * dist/nsb-functions:
+
+ add option to skip prompts; remove previous installs; tweak err pattern
+
+2002-08-01 12:14 jbpn
+
+ * man/snmp_alarm.3.def:
+
+ - use netsnmp_ds_set_boolean() instead of ds_set_boolean()
+
+2002-08-01 12:12 jbpn
+
+ * man/snmp_agent_api.3.def:
+
+ - change code sample to use netsnmp_ds_set_boolean()
+ - update references to libraries (which were still talking about
+ libucdagent et al.) -- PLEASE REVIEW BEFORE 5.0.3
+
+2002-08-01 12:07 rstory
+
+ * dist/nsb-functions:
+
+ lots of fixes to previouse untested scripts
+
+2002-08-01 12:04 rstory
+
+ * dist/nsb-build:
+
+ script to build releases... still some hardcoding while testing, but its
+ getting there...
+
+2002-08-01 11:51 rstory
+
+ * dist/: cvsshow, cvsup:
+
+ utility scripts
+
+2002-08-01 09:30 dts12
+
+ * agent/helpers/: scalar.c, scalar2.c:
+
+ Go with the "scalar as super-handler of instance" implementation.
+ Scalar1.c is probably redundent, but we can remove this later.
+ (Yup - I'm a coward....)
+
+2002-08-01 01:11 dts12
+
+ * README.win32:
+
+ Minor typos, plus emphasise the need for the IpHlpAPI library.
+
+2002-07-30 08:26 dts12
+
+ * local/snmpconf.dir/snmp-data/output:
+
+ Recognise '0' as a valid setting for suffixPrinting, and update the
+ prompts to match the v5 output formats defaults. See Bug #567451
+
+2002-07-30 07:59 dts12
+
+ * apps/snmptable.c:
+
+ First attempt at tackling Bug #574434
+ Recognise that default output format is equivalent to -OS.
+ Snmptable still crashes with -Of or -Ou, but at least the
+ default invocation works.
+
+2002-07-30 05:41 dts12
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ Export newly-defined public names, and re-export some routines that
+ have changed name. This should now compile under Visual C++ again.
+
+2002-07-30 02:27 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Don't remove a Row-Status auto-deleted row until the last minute,
+ in case other (lower) handlers try to access it.
+
+2002-07-30 01:38 dts12
+
+ * FAQ (V4-2-patches.1), FAQ:
+
+ Mention the need to escape quotes when querying string-indexed tables.
+
+2002-07-29 23:56 rstory
+
+ * include/net-snmp/agent/table_array.h:
+
+ update register function name
+
+2002-07-29 23:55 rstory
+
+ * local/mib2c.array-user.conf:
+
+ autogen example code for index checking in extract_index; update register
+ function name; use container in *_get_by_idx()
+
+2002-07-29 16:23 rstory
+
+ * local/mib2c.array-user.conf:
+
+ update for new struct name; add example code as comments instead of var_XXX
+ and such; in a few important places add code which will allow a newly
+ generated module to be compiled if -DTABLE_CONTAINER_TODO is specified;
+ probably a few other tweaks I forgot
+
+2002-07-29 03:06 dts12
+
+ * agent/helpers/: table_array.c, table.c, table_data.c
+, table_dataset.c, table_iterator.c:
+
+ Protect against deferencing NULL pointers.
+ (Most of these Should Never Happen but You Can't Be Too Careful!)
+
+2002-07-29 03:03 jbpn
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - detect `dmfe' ethernet cards as found on Netra X1 machines.
+ Thanks to John Olson for verifying this fix.
+
+ Also note that `indent' has ----ed the formatting of this file
+ beyond legibility in several places. I don't think we want to
+ do *that* again.
+
+2002-07-29 02:40 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Fuller validation of RowStatus values wrt row creation/existing rows.
+
+2002-07-29 01:25 dts12
+
+ * win32/: libsnmp/libsnmp.dsp, libsnmp_dll/libsnmp_dll.dsp
+, netsnmpmibs/netsnmpmibs.dsp:
+
+ Take account of recent changes in library files.
+ 'Release' applications still don't link properly, but at least
+ the libraries compile, and the 'Debug' side seems to work.
+
+2002-07-29 01:23 dts12
+
+ * include/net-snmp/system/aix.h:
+
+ Tweak inline handling for AIX - suggested by Andy Hood.
+
+2002-07-26 10:52 rstory
+
+ * snmplib/Makefile.in:
+
+ remove autodependencies until portable solution can be found
+
+2002-07-26 08:41 dts12
+
+ * win32/: mib_module_config.h, mib_module_includes.h,
+ mib_module_inits.h:
+
+ Remove mention of the (obsolete) ucd-snmp/registry module.
+
+2002-07-26 07:32 dts12
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ Protect the Win32 version of the config file, so that the other header
+ files recognise that it has indeed been included.
+
+2002-07-26 07:24 dts12
+
+ * FAQ (V4-2-patches.0), FAQ:
+
+ A bit more detail on mib2c, plus the non-writeability of sys{Location,Contact}
+
+2002-07-26 05:22 dts12
+
+ * FAQ (V4-2-patches.9), FAQ:
+
+ Another entry about invalid use of mib2c.
+
+2002-07-26 05:16 dts12
+
+ * snmplib/Makefile.in:
+
+ Suppress the "non-standard" conditional construct,
+ since it's not recognised by some versions of 'make'.
+
+2002-07-25 05:00 dts12
+
+ * agent/helpers/Makefile.in:
+
+ Add the 'scalar' and 'watcher' helpers to the helper library.
+
+2002-07-25 03:28 dts12
+
+ * agent/helpers/watcher.c, include/net-snmp/agent/watcher.h
+:
+
+ Support for watching a sysUpTime marker.
+
+2002-07-25 03:24 dts12
+
+ * agent/helpers/table_dataset.c,
+ include/net-snmp/agent/table_dataset.h:
+
+ New routine for retrieving a column value directly from a request structure.
+
+2002-07-24 13:17 rstory
+
+ * snmplib/default_store.c:
+
+ check for setting same value in ds_set_string, since it frees the old
+ value before duping the new one
+
+2002-07-24 11:58 rstory
+
+ * dist/snmpd-init.d:
+
+ first stab at init.d startup script for snmpd
+
+2002-07-24 06:48 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ When running off the end of one column, and moving on to the next
+ (in a GetNext), we need to start again with the first row.
+ This is probably the intention of the conditional block at the start
+ of this loop, but I can't see how this test could ever possibly match.
+
+ Note that there is also a reference to the row data accessible via
+ the 'request->parent_data' data list. This will also need to be
+ rewound. Suggestions as to how best to do so gratefully received.
+
+2002-07-24 06:39 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Use SNMPv2-style exceptions rather than the uninformative SNMPv1
+ 'noSuchName' error for missing table objects.
+
+2002-07-24 06:37 dts12
+
+ * agent/helpers/table_data.c:
+
+ Protect against the possibility of failing to extract a row structure.
+
+2002-07-24 06:35 dts12
+
+ * agent/helpers/table_data.c:
+
+ Use SNMPv2-style exceptions rather than the uninformative SNMPv1
+ 'noSuchName' error for missing table objects.
+
+2002-07-24 06:32 dts12
+
+ * agent/helpers/table.c:
+
+ Use SNMPv2-style exceptions rather than the uninformative SNMPv1
+ 'noSuchName' error for invalid table objects.
+
+2002-07-23 14:59 rstory
+
+ * include/net-snmp/library/snmp_assert.h:
+
+ missing comment terminator.:-(
+
+2002-07-23 12:02 rstory
+
+ * agent/object_monitor.c, agent/snmp_agent.c,
+ agent/helpers/table.c, agent/helpers/table_array.c,
+ snmplib/container_binary_array.c:
+
+ use new netsnmp_assert instead of assert
+
+2002-07-23 12:00 rstory
+
+ * include/net-snmp/library/snmp_assert.h, snmplib/Makefile.in
+:
+
+ add new netsnmp_assert, which defaults to logging a message
+
+2002-07-23 07:43 dts12
+
+ * man/: mib_api.3 (V4-2-patches.3), mib_api.3.def:
+
+ Fix the descriptions of the 'sprint_realloc' calls, to include the 'allow_realloc' parameter.
+
+2002-07-22 10:58 rstory
+
+ * dist/: net-snmp.spec, nsb-functions:
+
+ new (almost empty) spec file; start creating functions for automated builds
+
+2002-07-22 01:46 dts12
+
+ * agent/helpers/watcher.c, include/net-snmp/agent/watcher.h
+:
+
+ A more generalised form of the 'ns_register_{type}_instance' routines,
+ implemented as a separate helper module, and useable with both the
+ instance and scalar helpers.
+ This also supports arbitrary ASN types (including strings and OIDs).
+
+2002-07-22 01:43 dts12
+
+ * agent/helpers/scalar1.c, agent/helpers/scalar2.c,
+ include/net-snmp/agent/scalar.h:
+
+ Agent helper module for support of scalar objects.
+ Very similar to the "instance" helper, except that this deals with
+ invalid instance subidentifiers as well (reporting noSuchInstance
+ rather that noSuchObject).
+
+ There are two parallel implementations as the moment:
+ - scalar1 is essentially an enhanced copy of the instance helper,
+ but is completely independent of it.
+ - scalar2 sits above the instance helper, and uses that to do most
+ of the real processing.
+ Scalar1 is probably slightly more efficient, while scalar2 feels more
+ in keeping with the general ethos of the handler mechanism.
+ We probably need to decide which to adopt, and junk the other.
+
+2002-07-19 14:24 rstory
+
+ * agent/mibgroup/agentx/master.c:
+
+ use net agentx retires/timeout ds values
+
+2002-07-19 14:22 rstory
+
+ * agent/mibgroup/agentx/agentx_config.c:
+
+ register parser for agentxTimeout and agentxRetries tokens
+
+2002-07-19 14:15 rstory
+
+ * agent/mibgroup/Makefile.depend:
+
+ remove refs to non-existent nstAgent* files
+
+2002-07-19 14:14 rstory
+
+ * agent/snmpd.c:
+
+ move ONE_SEC to definitions.h; add AGENTX_TIMEOUT and AGENTX_RETRIES defaults
+
+2002-07-19 14:10 rstory
+
+ * include/net-snmp/agent/ds_agent.h:
+
+ add AGENTX_TIMEOUT and AGENTX_RETRIES
+
+2002-07-19 14:10 rstory
+
+ * include/net-snmp/definitions.h:
+
+ move definition of ONE_SEC here from snmpd.c
+
+2002-07-19 11:23 rstory
+
+ * snmplib/container.c:
+
+ pass local obj, not random unitialized pointer.:-(
+
+2002-07-19 04:04 dts12
+
+ * include/net-snmp/library/tools.h:
+
+ Handle systems where MAXPATHLEN isn't defined.
+
+2002-07-19 03:31 dts12
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ Use the "system-independent" SNMP_MAXPATH length definition instead of MAXPATHLEN
+
+2002-07-18 22:00 rstory
+
+ * agent/Makefile.depend:
+
+ remove refs to nonexistent mibgroup/nstAgentModuleObject.h
+
+2002-07-18 19:44 hardaker
+
+ * FAQ, README, sedscript.in, perl/SNMP/SNMP.pm
+, snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.2 )
+
+2002-07-18 19:43 hardaker
+
+ * ChangeLog:
+
+ update for 5.0.2
+
+2002-07-18 19:41 hardaker
+
+ * testing/eval_tools.sh:
+
+ minor patch for non-existent (died) log files.
+
+2002-07-18 19:41 hardaker
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend
+:
+
+ make depend
+
+2002-07-18 19:40 hardaker
+
+ * NEWS:
+
+ update for 5.0.2
+
+2002-07-18 19:40 hardaker
+
+ * Makefile.rules:
+
+ make depend fixes.
+
+2002-07-18 18:57 hardaker
+
+ * agent/mibgroup/Rmon/: alarm.c, event.c:
+
+ make the rmon code compile.
+ - new subtree pointer structure.
+ - sprint_objid -> snprint_objid
+
+2002-07-18 18:32 hardaker
+
+ * Makefile.in:
+
+ silence perl subdirectory build commands.
+
+2002-07-18 18:31 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ - Use netsh -t -d xml to get xml output from netsh.
+ (Ok, I'm sitting here at an IETF conference having an argument about
+ xml vs BER and needed a XML(-like) example of a huge data set, so I
+ made netsh do it.)
+
+2002-07-18 17:54 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - initial support for doing requests from multiple hosts (retrieval, not sets)
+
+2002-07-18 17:50 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ more fixes to still ugly colorized text (well, the text is pretty but
+ the support is ugly).
+
+2002-07-18 17:42 hardaker
+
+ * include/net-snmp/library/container.h:
+
+ change text string error to match function name called.
+
+2002-07-18 15:31 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+, snmplib/container_binary_array.c:
+
+ rename free -> cfree to avoid some problem wes had... ;-)
+
+2002-07-18 14:41 rstory
+
+ * snmplib/mib.c:
+
+ two people fixing memory leak in different places = segfault
+
+2002-07-18 11:02 rstory
+
+ * local/mib2c.array-user.conf:
+
+ $name -> $i
+
+2002-07-18 10:56 rstory
+
+ * agent/object_monitor.c,
+ include/net-snmp/agent/object_monitor.h:
+
+ update to use containers
+
+2002-07-18 09:40 rstory
+
+ * net-snmp-config.in:
+
+ add --debug-tokens, --indent-options
+
+2002-07-18 09:18 dts12
+
+ * include/net-snmp/agent/auto_nlist.h, snmplib/snmp-tc.c
+, include/net-snmp/system/irix.h:
+
+ Apply patch from Bug #582347, for Irix 6.5 support.
+ Submitted by Jan Yenya Kasprzak
+
+2002-07-18 09:12 dts12
+
+ * man/: snmptrapd.8 (V4-2-patches.5), snmptrapd.8.def:
+
+ Fix markup problem on snmptrapd man page (Bug #583329)
+
+2002-07-18 09:10 dts12
+
+ * snmplib/snmp-tc.c:
+
+ The fix for the tm_gmtoff problem on AIX (Bug #565769) also applies to AIX 5
+
+2002-07-18 09:06 dts12
+
+ * apps/: encode_keychange.c (V4-2-patches.1), encode_keychange.c
+:
+
+ Fix off-by-one buffer overflow (patch #577261)
+
+2002-07-18 08:51 dts12
+
+ * local/mib2c.array-user.conf:
+
+ Generate one code-file per table (to match the header structure).
+ My apologies if this isn't correct, Robert - but the previous behaviour
+ seemed to be broken.
+
+2002-07-18 08:37 dts12
+
+ * local/mib2c.old-api.conf:
+
+ Tackle some of the immediate deficiencies in the first draft old-api config.
+ (Now that Wes has pointed me in the direction of the documentation!)
+
+2002-07-18 08:22 dts12
+
+ * local/mib2c:
+
+ Fix the 'decl' substitution handling (so it doesn't include the internal token as well).
+
+2002-07-18 07:18 dts12
+
+ * local/mib2c.scalar.conf:
+
+ Provide the missing parameter in a read_only instance registration.
+
+2002-07-18 07:09 dts12
+
+ * agent/helpers/instance.c, include/net-snmp/agent/instance.h
+:
+
+ Bring the 'read_only_int' instance handler in line with the rest of
+ the convenience instance handlers.
+ (and even break the habit of a lifetime and declare the thing....)
+
+2002-07-18 05:48 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ fix another memory leak due to an improper ifdefed out section of code
+
+2002-07-18 04:45 hardaker
+
+ * snmplib/scapi.c:
+
+ I'm beginning to regret ever running indent on the code base...
+
+2002-07-17 15:43 hardaker
+
+ * local/: Makefile.in, mib2c.conf:
+
+ document and install mib2c.old-api.conf
+
+2002-07-17 13:07 rstory
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ fix segfault (possibly creating memory leak); author needs to examine code
+
+2002-07-17 07:41 dts12
+
+ * local/: mib2c.array-user.conf, mib2c.conf,
+ mib2c.create-dataset.conf, mib2c.int_watch.conf,
+ mib2c.iterate.conf, mib2c.scalar.conf:
+
+ Dave's being unreasonably picky about grammar & spelling again.
+ Just ignore him, and he'll go away.....
+
+2002-07-17 07:20 dts12
+
+ * local/mib2c.old-api.conf:
+
+ Initial support for the old 4x-style agent API using the new version of mib2c.
+ It doesn't handle types properly, and I'm sure I'll have buggered up some of
+ the control structure handling, but it seems to generate something that's
+ pretty close to the old output. It's better than nothing.....
+
+2002-07-16 22:40 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ restore inline functions (sigh. I feel like I'm playing ring-around-the-rosie)
+
+2002-07-16 21:58 rstory
+
+ * agent/helpers/table_array.c,
+ include/net-snmp/agent/table_array.h,
+ local/mib2c.array-user.conf:
+
+ rename some struct members to make code easier to read; a bit of re-ordering
+ in the set code; new flags for new and deleted rows; row deletes now
+ actualy work!
+
+2002-07-16 19:32 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ change complex macros into functions. would be nice if C had inline.
+
+2002-07-16 18:07 rstory
+
+ * include/net-snmp/types.h:
+
+ umm, try using correct define.:-/
+
+2002-07-16 18:05 rstory
+
+ * include/net-snmp/types.h:
+
+ test that net-snmp-config.h has been included, instead of actually including it..
+ (shouldn't this really be in all the header files?)
+
+2002-07-16 12:14 rstory
+
+ * local/mib2c.array-user.conf:
+
+ update for containers
+
+2002-07-16 11:20 rstory
+
+ * snmplib/snmpTCPIPv6Domain.c:
+
+ fix compiler warning
+
+2002-07-16 11:16 rstory
+
+ * apps/snmpnetstat/Makefile.depend:
+
+ remove oid_array related dependencies (grumble grumble)
+
+2002-07-16 11:14 rstory
+
+ * apps/Makefile.depend:
+
+ remove oid_array related dependencies
+
+2002-07-16 11:02 rstory
+
+ * agent/: Makefile.depend, mibgroup/Makefile.depend:
+
+ remove oid_array related dependencies
+
+2002-07-16 10:52 rstory
+
+ * snmplib/Makefile.depend, agent/helpers/Makefile.depend
+:
+
+ remove oid_array related dependencies
+
+2002-07-16 10:50 rstory
+
+ * snmplib/Makefile.in:
+
+ remove factory.c
+
+2002-07-16 10:29 rstory
+
+ * snmplib/snmp_api.c:
+
+ add netsnmp_container_init_list() in startup inits
+
+2002-07-16 10:21 rstory
+
+ * include/net-snmp/library/oid_array.h, snmplib/oid_array.c
+:
+
+ remove unused files
+
+2002-07-16 10:21 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ chg param type from void* to struct *
+
+2002-07-16 10:03 rstory
+
+ * snmplib/Makefile.in:
+
+ remove recently deleted oid_array.h; add factory, binary array .[ch]; derive
+ OBJS and LOBJS from CSRCS; add (optional) auto dependency generation
+
+2002-07-16 09:53 rstory
+
+ * include/net-snmp/mib_api.h:
+
+ remove recently deleted oid_array.h
+
+2002-07-16 09:52 rstory
+
+ * agent/mibgroup/ucd-snmp/extensible.h:
+
+ struct subtree -> netsnmp_subtree
+
+2002-07-16 09:46 rstory
+
+ * agent/helpers/table_array.c,
+ include/net-snmp/agent/table_array.h:
+
+ remove last remaining refs to now defunct oid_array
+
+2002-07-16 09:40 rstory
+
+ * include/net-snmp/library/container_binary_array.h,
+ snmplib/container_binary_array.c:
+
+ generic binary array container extracted from oid_array
+
+2002-07-16 09:40 rstory
+
+ * include/net-snmp/types.h:
+
+ include net-snmp-config.h; new typedef struct netsnmp_index (oid ptr + len)
+
+2002-07-16 09:38 rstory
+
+ * agent/helpers/table_array.c,
+ include/net-snmp/agent/table_array.h:
+
+ use generic container interface; use new netsnmp_index instead of
+ oid_array_header; rename array_group -> request_group
+
+2002-07-16 09:34 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ add iterators; more function typedefs; rename some func ptrs, add find_next,
+ get_subset, get_iterator, for_each, ncompare; add ability to have nested
+ containers; more utility routines; convenience marcros; start adding comments
+
+2002-07-16 09:29 rstory
+
+ * include/net-snmp/library/factory.h:
+
+ declarations for a generic factory
+
+2002-07-16 08:48 dts12
+
+ * agent/mibgroup/ucd-snmp/: memory_dynix.c, memory_hpux.c
+, vmstat_dynix.c, vmstat_hpux.c:
+
+ Apply patch from bug report 581618 (also applicable to dynix)
+ Provided by Nicholas L. Nigay
+
+2002-07-16 06:54 hardaker
+
+ * perl/: ASN/ASN.pm, OID/OID.pm, agent/agent.pm,
+ agent/default_store/default_store.pm,
+ default_store/default_store.pm:
+
+ remove "our" problem and use older "use vars" instead for older perl.
+ (this should make it work with perl 5.005. Could some one test this
+ for me?)
+
+2002-07-15 06:45 jbpn
+
+ * agent/mibgroup/agentx/master.c:
+
+ - names of netsnmp_subtree elements changed
+
+2002-07-15 06:42 jbpn
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ - struct subtree renamed to netsnmp_subtree
+
+2002-07-15 05:25 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ Some really nasty hacks to get colorized tables to work.
+
+2002-07-14 20:51 hardaker
+
+ * perl/SNMP/t/: bulkwalk.t, mib.t:
+
+ comment out broken tests for now (XXX marked)
+
+2002-07-14 20:50 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ fix getbulk.
+
+2002-07-14 20:20 hardaker
+
+ * agent/agent_handler.c,
+ include/net-snmp/agent/agent_handler.h:
+
+ A new function to call a sub-handler but passing it only one request to handle.
+
+2002-07-10 21:21 rstory
+
+ * win32/: config.h, net-snmp/net-snmp-config.h:
+
+ define LOG_DAEMON, since windows doesn't have it
+
+2002-07-10 21:07 rstory
+
+ * win32/: config.h, net-snmp/net-snmp-config.h:
+
+ remove define of in_addr_t, which can be found in net-snmp/types.h
+
+2002-07-10 02:36 jbpn
+
+ * agent/agent_handler.c:
+
+ - struct subtree renamed to netsnmp_subtree
+
+2002-07-10 02:35 jbpn
+
+ * agent/agent_index.c:
+
+ - don't use 0 in %p format specifiers
+
+2002-07-10 02:34 jbpn
+
+ * agent/snmp_agent.c:
+
+ - struct subtree renamed to netsnmp_subtree
+ - fix some horrible indent broken formatting
+
+2002-07-10 02:33 jbpn
+
+ * agent/snmp_vars.c:
+
+ - struct subtree renamed to netsnmp_subtree
+ - remove some obsolete variables
+
+2002-07-10 02:33 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - reflect changed function names from agent_registry
+
+2002-07-10 02:32 jbpn
+
+ * agent/mibgroup/agent/nsModuleTable.c:
+
+ - changes due to renaming of struct subtree to netsnmp_subtree
+ - NOTE MEMORY LEAK (which I can't see how to fix -- new agent API
+ experts please examine)
+
+2002-07-10 02:29 jbpn
+
+ * agent/agent_registry.c:
+
+ - struct subtree renamed to netsnmp_subtree
+ - name, start, end members are now dynamically allocated to reduce
+ wasted memory (by a factor of 5 or so)
+ - functions are renamed consistently
+
+2002-07-10 02:20 jbpn
+
+ * include/net-snmp/agent/: agent_registry.h,
+ net-snmp-agent-includes.h, snmp_agent.h, snmp_vars.h
+, var_struct.h:
+
+ - struct subtree renamed to netsnmp_subtree
+
+2002-07-09 06:02 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - free cache_id storage when closing session
+
+2002-07-09 05:56 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - just call netsnmp_ds_shutdown() once in snmp_shutdown()
+
+2002-07-09 04:15 jbpn
+
+ * snmplib/mib.c:
+
+ - fix memory leak in netsnmp_fixup_mib_directory()
+
+2002-07-09 03:14 jbpn
+
+ * agent/snmpd.c:
+
+ - add a cast to quell compiler warning
+
+2002-07-08 22:09 rstory
+
+ * agent/mibgroup/util_funcs.h:
+
+ extern C for C++ compiles
+
+2002-07-08 07:21 jbpn
+
+ * include/net-snmp/agent/snmp_vars.h:
+
+ - remove obsolete function prototypes
+
+2002-07-07 19:45 rstory
+
+ * local/mib2c.array-user.conf:
+
+ update to use containers
+
+2002-07-07 19:38 rstory
+
+ * include/net-snmp/library/oid_array.h:
+
+ fix typo
+
+2002-07-07 19:37 rstory
+
+ * agent/mibgroup/ucd-snmp/: disk.c, proc.c:
+
+ fix compiler warning
+
+2002-07-07 19:33 rstory
+
+ * agent/mibgroup/: agent/nsModuleTable.c,
+ agent/nsTransactionTable.c, host/hr_swinst.c:
+
+ fix compiler warning
+
+2002-07-07 19:03 rstory
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ remove unused vars
+
+2002-07-07 19:00 rstory
+
+ * snmplib/oid_stash.c:
+
+ fix compiler warnings
+
+2002-07-07 18:53 rstory
+
+ * snmplib/asn1.c:
+
+ fix compiler warnings
+
+2002-07-07 18:50 rstory
+
+ * include/net-snmp/library/snmp_api.h, snmplib/snmp_api.c
+:
+
+ make param const; fix compile const warning
+
+2002-07-07 18:27 rstory
+
+ * snmplib/mib.c:
+
+ fix compiler warning; fix memory leak; prep a few comments for indent
+
+2002-07-06 14:11 hardaker
+
+ * README, sedscript.in, snmplib/snmp_version.c,
+ FAQ, perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.2.pre1 )
+
+2002-07-06 14:10 hardaker
+
+ * doxygen.conf:
+
+ change project version to 5.0.2
+
+2002-07-06 14:09 hardaker
+
+ * perl/SNMP/Makefile.PL:
+
+ snmptrapd is actually built in the apps directory, not the agent directory.
+
+2002-07-05 11:55 rstory
+
+ * local/mib2c:
+
+ clarify directions for obtaining perl/SNMP module.
+
+2002-07-05 05:18 jbpn
+
+ * agent/mibgroup/agentx/client.c:
+
+ - I must not check in code without compiling it
+ - I must not check in code without compiling it
+ - I must not check in code without compiling it
+ - I must not check in code without compiling it
+ - ...
+
+2002-07-05 03:23 jbpn
+
+ * agent/mibgroup/: agentx/client.c, mibII/system_mib.c:
+
+ - sysObjectID was being returned minus its last sub-identifier because
+ the length variable had not been updated to reflect the fact that it
+ is now longer. Code changed to use sizeof() instead, so this won't
+ happen again. Reported by Stian Soiland (bug #577439).
+
+2002-07-04 10:13 rstory
+
+ * snmplib/read_config.c:
+
+ ucd-snmp -> net-snmp
+
+2002-07-04 07:06 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - modified handling of opaque pointer for stream-based transports to
+ avoid both multiple free() problem and unnecessary copying.
+
+2002-07-04 06:00 dts12
+
+ * man/snmpd.conf.5.def, agent/mibgroup/host/hr_storage.c
+ (V4-2-patches.[5,9]), man/snmpd.conf.5.def,
+ agent/mibgroup/host/hr_storage.c:
+
+ Apply Johannes Schmidt-Fischer's NetworkDisk patch #554554
+
+2002-07-04 05:56 dts12
+
+ * agent/mibgroup/host/: hr_filesys.c, hr_filesys.h
+ (V4-2-patches.[5,1]), hr_filesys.c, hr_filesys.h:
+
+ Apply Johannes Schmidt-Fischer's NFS filesystem patch #554553
+ (simplified to avoid the re-indentation - which makes it easier to see
+ what's changed. The whole HostRes group needs cleaning up anyway!)
+
+2002-07-04 05:52 dts12
+
+ * snmplib/snmp_api.c:
+
+ Ensure transport opaque data isn't multiply assigned
+ (and hence multiply freed) for stream-based transports.
+ Datagram-based transports don't suffer from this problem.
+ Based on Patch 573771
+
+2002-07-03 16:28 rstory
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ be precise about what file needs to be configured for access control
+
+2002-07-03 14:13 rstory
+
+ * local/mib2c.conf:
+
+ fix minor grammar errors; add descr for mib2c.array-user; add section header
+ for generating header definition files
+
+2002-07-03 13:11 rstory
+
+ * include/net-snmp/: types.h, library/system.h:
+
+ move include for in_addr_t to net-snmp/types.h, where in_addr_t is defined
+ for systems w/out netinet/in.h
+
+2002-07-03 12:51 rstory
+
+ * local/mib2c.scalar.conf:
+
+ more tweaks noticed on the mailing list
+
+2002-07-03 08:23 hardaker
+
+ * perl/agent/test.pl:
+
+ make test cleanups test.pl
+
+2002-07-03 03:42 dts12
+
+ * agent/mibgroup/: util_funcs.c (V4-2-patches.1), util_funcs.c
+:
+
+ Shut the agent down cleanly before restarting.
+ This closes any SNMP/AgentX ports as well.
+
+2002-07-03 03:26 dts12
+
+ * agent/mibgroup/util_funcs.c:
+
+ OID sub-identifiers are unsigned, so treating them as signed can
+ give the wrong results with large values.
+
+2002-07-03 03:20 dts12
+
+ * snmplib/system.h (V4-2-patches.5),
+ include/net-snmp/library/system.h:
+
+ Ensure in_addr_t is defined.
+
+2002-07-03 02:34 dts12
+
+ * acconfig.h, configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in:
+
+ Testing for <sys/disklabel.h> requires <machine/types.h> on NetBSD 1.5.
+ Reported by Felicia Neff.
+ (Apparently from the NetBSD bug database - why they didn't tell us about
+ it is a mystery to me....)
+
+2002-07-03 02:19 dts12
+
+ * configure.in:
+
+ Fix the default value for sysObjectID as reported in the configure --help output.
+ (The actual value used is correct - it's just the help output that's wrong).
+ Spotted by Sandhya Satyanarayan.
+
+2002-07-02 23:15 hardaker
+
+ * local/mib2c.conf:
+
+ update text for various .conf files
+
+2002-07-02 13:46 rstory
+
+ * local/mib2c.scalar.conf:
+
+ fixes noted on the mailing list by Patrice Kadionik <kadionik@enseirb.fr>
+
+2002-07-02 02:39 dts12
+
+ * perl/SNMP/Makefile.PL:
+
+ Add the 'snmpd' and 'snmptrapd' binary names to the appropriate paths
+ when setting up the testing framework.
+
+2002-07-01 07:53 dts12
+
+ * snmplib/: asn1.c (V4-2-patches.8), asn1.c:
+
+ Encode/Decode OIDs of the form 2.X (X > 40) correctly.
+
+2002-07-01 02:40 jbpn
+
+ * configure, configure.in:
+
+ - fix horrible formatting in help for transports
+
+2002-07-01 02:23 dts12
+
+ * sedscript.in:
+
+ Pick up the changed definition for the root of the UCD extensible agent tables
+ (so that the EXAMPLE.conf file gets set up with the correct numeric OIDs)
+
+2002-06-28 06:46 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ - remove transport specifier and port number from strings returned
+ from snmp_tcp_fmtaddr() which break tcp_wrappers (and perhaps
+ other things).
+
+2002-06-28 04:41 dts12
+
+ * perl/agent/test.pl:
+
+ Update default store retrieval functions to use the correct name.
+
+ Note that this test script appears to include two infinite loops.
+ I'm not clear how this is expected to run successfully ?
+
+2002-06-28 04:39 dts12
+
+ * perl/agent/agent.xs:
+
+ Remove reference to non-existent degugging function.
+
+2002-06-28 04:37 dts12
+
+ * perl/manager/: Makefile.PL, displaytable.pm,
+ getValues.pm, manager.pm, snmptosql:
+
+ Bring perl 'manager' module under the NetSNMP banner
+ (both in terms of module group name, and references to 'ucd-snmp').
+ Remove some UCD-specific settings.
+
+ Note that snmptosql still refers explicitly to Wes' UCD email address,
+ and manager.pm to Wes' UCD filestore path. The relevant lines have
+ been highlighted, to encourage anyone wishing to use this to change them.
+
+2002-06-28 04:12 dts12
+
+ * perl/: AnyData_SNMP/Makefile.PL, OID/Makefile.PL,
+ SNMP/Makefile.PL, agent/Makefile.PL,
+ manager/Makefile.PL:
+
+ Remove checking for "internal" prerequisites, so that "perl Makefile.PL"
+ at the top level will work - even on a pristine system.
+
+ Qn:
+ Is it necessary/desirable to separate the NetSNMP modules to this extent?
+ Would it not be simpler to have all of the main .pm/.xs files in a single
+ NetSNMP directory, and compile/install them all from there?
+
+2002-06-28 01:45 dts12
+
+ * configure, configure.in:
+
+ Check for --with-enterprise (et al) being invoked without a value, and bomb out.
+
+2002-06-27 21:43 rstory
+
+ * README.solaris:
+
+ new README detainling the use of SFIO to circumvent the 255 fd limit on
+ solaris.
+
+2002-06-27 11:09 rstory
+
+ * agent/helpers/table_array.c,
+ include/net-snmp/agent/table_array.h:
+
+ remove changing array; add netsnmp_table_array_remove_row()
+
+2002-06-27 04:15 dts12
+
+ * Makefile.rules:
+
+ Some versions of 'makedepend' (e.g. RedHat 7.1), can't handle "-osuffix"
+ as a single option. All versions seem happy with "-o suffix" so use that.
+
+2002-06-27 03:31 dts12
+
+ * snmplib/mib.c:
+
+ Use ENV_SEPARATOR_CHAR rather than hardwiring ':' in netsnmp_set_mib_directory
+ (as suggested by Robert)
+
+2002-06-27 03:22 jbpn
+
+ * snmplib/snmpUDPDomain.c:
+
+ - remove transport specifier and port number from strings returned
+ from snmp_udp_fmtaddr() which break tcp_wrappers (and perhaps
+ other things).
+
+2002-06-27 03:09 dts12
+
+ * agent/mibgroup/mibII/: snmp_mib.c (V4-2-patches.2), snmp_mib.c
+:
+
+ Validate new snmpEnableAuthenTraps value before trying to use it.
+ Spotted & fixed by Shantha Kumara
+
+2002-06-25 14:09 rstory
+
+ * apps/snmpset.c:
+
+ add APPTOPS (-Cq) for suppressing output of set results on success
+
+2002-06-25 09:28 dts12
+
+ * agent/mibgroup/ucd-snmp/proc.c:
+
+ Apply patch #559848 to use the /proc pseudo-filesystem under Linux
+ (rather than parsing the output of ps)
+
+2002-06-25 08:59 dts12
+
+ * snmplib/snmp-tc.c:
+
+ Check for 'aix4' (which is the token defined in the system header file)
+ rather than 'aix'. See bug #565769
+
+2002-06-25 08:31 dts12
+
+ * agent/mibgroup/util_funcs.c:
+
+ Treat '0' as an invalid index for a "simple table".
+
+2002-06-25 07:36 hardaker
+
+ * local/snmpconf.dir/snmpd-data/system:
+
+ document read-only nature of sysContact.0 and sysLocation.0
+ configuration tokens.
+
+2002-06-25 06:40 jbpn
+
+ * man/: Makefile.in, default_store.3.bot,
+ default_store.3.top:
+
+ - add netsnmp_ prefix to default_store functions
+
+ - clean up manpage a bit
+
+ - fix breakage in generation of default_store.3.h due to auto-indentation
+ of default_store.h
+
+2002-06-25 02:55 jbpn
+
+ * EXAMPLE.conf.def (V4-2-patches.3), EXAMPLE.conf.def:
+
+ - mention that setting sysLocation et al. in snmpd.conf makes them
+ read-only
+
+ - also change syntax of all example command line tools to use newer
+ -c COMMUNITY syntax not positional parameter
+
+2002-06-24 08:03 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ make buffer size increase note a debug statement rather than a generic
+ log statement.
+
+2002-06-23 18:40 driehuis
+
+ * perl/SNMP/SNMP.xs:
+
+ Handle COUNTER64 in __translate_asn_type.
+
+2002-06-23 16:03 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ documentation for the script and the language it houses.
+ (man page auto-generated from the contained pod documentation)
+
+2002-06-23 15:03 hardaker
+
+ * perl/SNMP/README:
+
+ update to reference top level Makefile.PL
+
+2002-06-23 14:51 hardaker
+
+ * perl/SNMP/: SNMP.xs (V4-2-patches.1), SNMP.xs:
+
+ fix reported by Willem Dekker for Windows. Bug #543194 fixed.
+
+2002-06-22 08:37 hardaker
+
+ * README.snmpv3:
+
+ update for recent methodologies
+
+2002-06-21 16:07 rstory
+
+ * snmplib/mib.c:
+
+ final (hopefully!) fix for parsing ip addresses from
+ "Fco. Javier Ridruejo" <acbripef@si.ehu.es>
+
+2002-06-19 14:38 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_bulk_to_next.3,
+ netsnmp_debug.3, netsnmp_handler.3, netsnmp_instance.3
+, netsnmp_multiplexer.3, netsnmp_old_api.3,
+ netsnmp_read_only.3, netsnmp_serialize.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_data.3, netsnmp_table_dataset.3,
+ netsnmp_table_iterator.3, netsnmp_todo.3:
+
+ update from doxygen
+
+2002-06-19 11:50 hardaker
+
+ * local/: mib2c.int_watch.conf, mib2c.scalar.conf:
+
+ scalar mib2c configuration files for generating scalar code.
+
+2002-06-19 11:43 hardaker
+
+ * agent/mibgroup/examples/scalar_int.c:
+
+ clean up multi-line commend which was messed up by indent.
+
+2002-06-19 11:42 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ - add support for prompting of unknown parameters to aliases.
+ - misc other improvements (like "rehash")
+
+2002-06-19 11:38 hardaker
+
+ * net-snmp-config.in:
+
+ fix for new default store API
+
+2002-06-19 11:29 hardaker
+
+ * perl/: Makefile.PL, Makefile.makefiles,
+ Makefile.subs.pl, make-perl-makefiles, ASN/Makefile.PL
+, OID/Makefile.PL, SNMP/Makefile.PL,
+ agent/Makefile.PL, agent/default_store/Makefile.PL,
+ default_store/Makefile.PL:
+
+ ARGGGGGG
+ I love perl.
+ I hate perl's make system.
+ I hate the fact that perl segfaults if GetOptions() is called more
+ than once.
+ sigh.
+ This hopefully will fix the perl module build routines so it at least
+ works (but it's still ugly and could use more cleaning).
+
+2002-06-19 07:45 rstory
+
+ * agent/snmp_agent.c:
+
+ fix infinte loop and add debug in remove_delegated
+
+2002-06-18 07:37 hardaker
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ NULL the priv pointer on session duplication. thanks to rezitoz
+
+2002-06-17 06:23 hardaker
+
+ * README:
+
+ Changed Katsuhisa's email address, on request
+
+2002-06-14 07:44 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ Patch #569021: from Lauri Myllari
+ - fix memory leak in the table iterator support.
+
+2002-06-14 07:02 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Applied patch #569020 from rezitoz on IRC to fix non-initialized variable
+
+2002-06-14 03:57 dts12
+
+ * agent/mibgroup/Rmon/alarm.c:
+
+ Add (null) context, to bring into line with the v5 registry APIs.
+ Fixes bug 568580.
+
+2002-06-14 02:27 dts12
+
+ * aclocal.m4, configure:
+
+ Use matching ' and " quotes for AIX configure test.
+ Mentioned in passing in bug 565769.
+
+2002-06-13 14:32 hardaker
+
+ * perl/SNMP/t/conf.t:
+
+ fix default_store routines
+
+2002-06-12 06:43 dts12
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ Bring Windows OID usage into line with the main config file settings.
+
+2002-06-12 06:37 dts12
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ Correct the default Enterprise OID used in traps, to avoid a repeated 0
+ subidentifier. (Fixes bug #566917)
+
+2002-06-12 05:14 dts12
+
+ * snmplib/snmp_api.c:
+
+ Define 'length' as a signed variable, so it can handle an error value of -1.
+ Reported by Joakim Althini.
+
+2002-06-12 03:11 dts12
+
+ * snmplib/read_config.c:
+
+ Make sure the address of the next link is properly saved, before freeing memory.
+ Problem discovered by Hugo Cacote.
+
+2002-06-12 02:15 dts12
+
+ * include/net-snmp/: agent/agent_index.h, agent/agent_trap.h
+, agent/all_helpers.h, agent/auto_nlist.h,
+ agent/bulk_to_next.h, agent/debug_handler.h,
+ agent/mib_modules.h, agent/multiplexer.h, agent/null.h
+, agent/old_api.h, agent/read_only.h,
+ agent/serialize.h, agent/set_helper.h,
+ library/cmu_compat.h, library/snmpAAL5PVCDomain.h,
+ library/snmpCallbackDomain.h, library/snmpIPXDomain.h,
+ library/snmpTCPDomain.h, library/snmpTCPIPv6Domain.h,
+ library/snmpUDPDomain.h, library/snmpUDPIPv6Domain.h,
+ library/snmpUnixDomain.h, library/snmp_parse_args.h,
+ library/snmp_secmod.h, library/transform_oids.h,
+ library/ucd_compat.h:
+
+ Supply missing #ifndef/#define/#endif and extern "C" {} wrappers
+
+2002-06-11 17:56 rstory
+
+ * snmplib/mib.c:
+
+ remove spurious printf to stderr
+
+2002-06-11 14:21 rstory
+
+ * include/net-snmp/types.h:
+
+ add extern "C"; add void_array struct
+
+2002-06-11 14:20 rstory
+
+ * agent/helpers/table_array.c:
+
+ remove tsearch; use new container instead
+
+2002-06-11 14:19 rstory
+
+ * include/net-snmp/agent/table_array.h:
+
+ use container for secondary index
+
+2002-06-11 14:17 rstory
+
+ * snmplib/Makefile.in:
+
+ add container to headers; add container.c
+
+2002-06-11 14:17 rstory
+
+ * snmplib/container.c:
+
+ init functions for basic/sorted container
+
+2002-06-11 14:15 rstory
+
+ * include/net-snmp/library/container.h:
+
+ more methods for basic container; add sorted (will probably rename) conatiner
+
+2002-06-11 12:22 rstory
+
+ * include/net-snmp/agent/instance.h:
+
+ protect against multiple includes; add extern "C" for __cplusplus
+
+2002-06-11 11:11 hardaker
+
+ * perl/AnyData_SNMP/: INSTALL, Makefile.PL, README
+, netsh, snmpsh:
+
+ renamed snmpsh to netsh, as I like the name better and it appeals to a
+ wider number of people.
+
+2002-06-10 09:53 rstory
+
+ * agent/snmp_agent.c:
+
+ when deleting an asp pointer, make sure it isn't in the delegated list
+
+2002-06-10 08:46 rstory
+
+ * snmplib/mib.c:
+
+ fix parse_one_oid_index to allow too short IP address when complete is
+ specified; add netsnmp_oid2chars & netsnmp_oid2str
+
+2002-06-10 07:42 hardaker
+
+ * perl/default_store/: default_store.pm, default_store.xs
+, test.pl:
+
+ update to latest default_store defines
+
+2002-06-10 07:39 hardaker
+
+ * Makefile.in, perl/.cvsignore, perl/Makefile.PL:
+
+ Top level perl Makefile.PL to install the whole bunch underneath.
+ This should now be used instead of the lower level makefiles for
+ simplicity.
+
+2002-06-10 07:27 dts12
+
+ * perl/SNMP/t/mib.t:
+
+ Acknowledge known failing tests.
+ This message can be removed once the problem has been isolated and fixed.
+
+2002-06-10 07:17 hardaker
+
+ * snmplib/mib.c:
+
+ support for ipaddress building/parsing of OID indexes.
+
+2002-06-10 02:07 dts12
+
+ * FAQ (V4-2-patches.8), FAQ:
+
+ Mention the other perl modules, introduced with v5 (particularly 'default_store')
+
+2002-06-10 01:28 dts12
+
+ * FAQ (V4-2-patches.7), FAQ:
+
+ New entry describing possible problems with trap handlers.
+
+2002-06-08 21:39 hardaker
+
+ * perl/agent/agent.pm:
+
+ default_store fixes
+
+2002-06-08 20:54 rstory
+
+ * Makefile.in:
+
+ break perl makefile creation into seperate step; only clean perl directory
+ if there is a makefile
+
+2002-06-08 20:15 rstory
+
+ * Makefile.in:
+
+ add perltest target to make test in all perl directories
+
+2002-06-08 09:47 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ fix to deal with updated SQL::Statement module.
+
+2002-06-08 07:08 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ update to SQL-Statement requirement of 1.004
+
+2002-06-08 06:45 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ remove mib init code from C snmp_translate_obj call
+
+2002-06-08 06:44 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ init_snmp inside translateObj
+
+2002-06-08 06:44 hardaker
+
+ * perl/OID/OID.pm:
+
+ change version to 0.1
+
+2002-06-08 06:43 hardaker
+
+ * perl/AnyData_SNMP/configs/unix:
+
+ A few cleanups to ifconfig and netstat commands
+
+2002-06-08 06:35 hardaker
+
+ * perl/AnyData_SNMP/snmpsh:
+
+ - beginning support for import/export of data (currently to/from CSV).
+ - support for "diff" which compares old (possibly imported data) to current.
+
+2002-06-08 06:34 hardaker
+
+ * perl/AnyData_SNMP/Makefile.PL:
+
+ change required SNMP module version from 4 to 5
+
+2002-06-08 06:34 hardaker
+
+ * mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ Add a tutorial place holder comment OID.
+
+2002-06-08 06:33 hardaker
+
+ * local/tkmib:
+
+ fix tkmib for newer perl modules.
+
+2002-06-08 06:33 hardaker
+
+ * local/snmpconf:
+
+ turn off extra bold/underline formatting by default.
+
+2002-06-07 15:04 rstory
+
+ * include/net-snmp/library/container.h:
+
+ generic container structure for storing data
+
+2002-06-07 13:01 rstory
+
+ * perl/ASN/ASN.xs:
+
+ include net-snmp-config.h
+
+2002-06-07 10:37 rstory
+
+ * configure:
+
+ update configure to keep in line with configure.in (why? shouldn't
+ configure not be in CVS and be autogenerated? One of these days I'm going
+ to have to learn autoconf....)
+
+2002-06-07 10:35 rstory
+
+ * Makefile.in, Makefile.rules:
+
+ always check return status of make when inside a loop, and exit on errors
+
+2002-06-07 08:17 dts12
+
+ * agent/mibgroup/mibII/: interfaces.c (V4-2-patches.3),
+ interfaces.c:
+
+ Only null-terminate the interface name while it's actually being copied.
+ Restore the data line afterwards, so the debugging output is meaningful.
+
+2002-06-07 01:16 dts12
+
+ * agent/snmp_agent.c:
+
+ Fix for indexing error, that causes a crash if more than 16 varbinds
+ are added to the cache in one go. Spotted by Shanth Kumara
+
+2002-06-06 01:12 dts12
+
+ * aclocal.m4, configure (V4-2-patches.[7,5]), aclocal.m4,
+ configure:
+
+ Don't differenciate between elf- and a.out-based NetBSD systems.
+ (Problem highlighted by Felicia Neff)
+
+2002-06-05 18:50 rstory
+
+ * acconfig.h, configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/types.h:
+
+ put defines for socklen_t and in_addr_t in net-snmp/types.h instead of having
+ configure generate them; configure instead generates HAVE_SOCKLEN_T and
+ HAVE_IN_ADDR_T for systems which don't need the defines; this is primarily
+ for the benefit of the Win32 platform, which doesn't have configure.
+
+2002-06-05 09:20 rstory
+
+ * local/mib2c.iterate.conf:
+
+ don't advance request pointer inside for loop, since for loop does it for
+ us; otherwise for loop may end up dereferencing NULL pointer.
+
+2002-06-05 06:41 hardaker
+
+ * perl/AnyData_SNMP/configs/unix:
+
+ example configuration file to duplicate various unix utilities:
+ - currently: netstat, ps, df, ifconfig
+
+2002-06-05 06:40 hardaker
+
+ * perl/AnyData_SNMP/configs/scli:
+
+ example configuration file to duplicate functionality in Juergen's
+ scli command.
+
+2002-06-05 06:39 hardaker
+
+ * perl/AnyData_SNMP/snmpsh:
+
+ new commands:
+ source file -- sources an rc file
+ watch expression -- repeatedly runs a command and colorizes
+ differences in data
+ eval expression -- evaluates an expression directly in perl
+ - beginnings of overloads in perl so that calling sysContact()
+ will return the sysContact value. tables not returned yet.
+ fixes:
+ turns of ornamental prompt support (ick) by default
+
+2002-06-05 04:43 dts12
+
+ * man/: snmpcmd.1 (V4-2-patches.8), snmpcmd.1.def:
+
+ Brief mention of the need to quote OIDs containing string indexes,
+ to protect the double quotes from the shell.
+
+2002-06-04 10:38 rstory
+
+ * agent/snmp_agent.c:
+
+ test for a null treecache before dereferencing it; noted on the coders
+ list by joakim.althini@reddo.net
+
+2002-06-04 10:33 rstory
+
+ * agent/snmp_agent.c:
+
+ test for asp->pdu == NULL before dereferencing it; noted on the coders
+ list by joakim.althini@reddo.net.
+
+2002-06-04 05:54 hardaker
+
+ * perl/AnyData_SNMP/snmpsh:
+
+ support for printf, single query/sets of scalars, multi-line aliases.
+
+2002-05-30 15:23 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ default_store fixes
+
+2002-05-30 15:23 hardaker
+
+ * perl/OID/OID.pm:
+
+ make new() operator a bit smarter
+
+2002-05-29 19:57 hardaker
+
+ * snmplib/: snmp_alarm.c (V4-2-patches.2), snmp_alarm.c:
+
+ set the storage pointer to NULL, as pointed out by Mark Hoy.
+
+2002-05-29 09:22 hardaker
+
+ * include/net-snmp/library/default_store.h,
+ include/net-snmp/library/mib.h, snmplib/mib.c,
+ snmplib/snmp_parse_args.c:
+
+ Patch from Harrie Hazewinkel to APIify MIBDIRS support
+
+2002-05-29 07:43 dts12
+
+ * FAQ (V4-2-patches.6), FAQ:
+
+ Expand on when OpenSSL is necessary, and how to compile using it.
+
+2002-05-29 06:52 dts12
+
+ * snmplib/snmpUDPDomain.c:
+
+ Set REUSEADDR so that specifying the same port twice doesn't kill the agent.
+ (Suggested by Robert Hastings)
+
+2002-05-29 02:41 dts12
+
+ * FAQ (V4-2-patches.5), FAQ:
+
+ Reference both versions of the tutorial (since this document is used
+ for building the on-line version of the FAQ)
+
+2002-05-29 02:16 dts12
+
+ * FAQ (V4-2-patches.4), FAQ:
+
+ Clarify that trap filtering is not yet operational.
+
+2002-05-28 14:53 rstory
+
+ * snmplib/oid_array.c:
+
+ remove ^M chars
+
+2002-05-28 14:52 rstory
+
+ * local/mib2c.array-user.conf:
+
+ fix logic in can_delete; consolidate use of netsnmp_set_mode_request by setting
+ rc for use at end of loop; don't use removed macros for rowstatus/storagetype,
+ using new netsnmp_check_vb* routines instead; add asserts for error cases that
+ should be caught by earlier routines
+
+2002-05-28 14:47 rstory
+
+ * include/net-snmp/agent/table_array.h:
+
+ add callbacks for row (de)activation
+
+2002-05-28 06:23 dts12
+
+ * agent/helpers/table_array.c:
+
+ Protect "#include <search.h>" with the HAVE_SEARCH_H token. (Suggested by Harrie)
+
+2002-05-28 06:20 dts12
+
+ * include/net-snmp/library/snmp_logging.h:
+
+ Fix the declaration of snmp_enable_syslog_ident. (Spotted by Harrie)
+
+2002-05-27 01:53 dts12
+
+ * apps/snmptrapd.c, include/net-snmp/library/snmp_logging.h
+, snmplib/snmp_logging.c:
+
+ Don't hardwire syslog facility to LOG_DAEMON.
+ Fix provided by Joakim Fallsjo.
+
+2002-05-27 01:32 dts12
+
+ * agent/mibgroup/snmpv3/usmUser.c, apps/snmptrapd.c
+ (V4-2-patches.[2,8]), agent/mibgroup/snmpv3/usmUser.c,
+ apps/snmptrapd.c:
+
+ Tweak 'usmUser' help string to accurately reflect which bits are optional.
+ Reported by Ali Chanaui.
+
+2002-05-27 01:22 dts12
+
+ * man/: snmpd.conf.5.def (V4-2-patches.4), snmpd.conf.5.def:
+
+ Document the limit on the number of "file" directives.
+
+2002-05-27 01:17 dts12
+
+ * local/Makefile.in:
+
+ Remove an extraneous trailing backslash, that confuses some 'make's
+
+2002-05-24 09:54 hardaker
+
+ * perl/agent/netsnmp_request_info.pm:
+
+ Proper creation of returned NetSNMP::OID object.
+
+2002-05-24 09:54 hardaker
+
+ * perl/agent/agent.xs:
+
+ increase reference counts on returned mib registration objects so
+ they're not auto-cleaned by perl (the agent now has a copy of the pointer)
+
+2002-05-24 09:53 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ new default_store netsnmp_ prefixes.
+
+2002-05-24 09:53 hardaker
+
+ * local/mib2c:
+
+ support for scalars (mib2c.scalar.conf file coming shortly)
+
+2002-05-24 09:52 hardaker
+
+ * Makefile.in:
+
+ A new rule called "commentcheck" to grep all sources for // comments.
+
+2002-05-24 08:09 dts12
+
+ * agent/agent_registry.c:
+
+ Declare 'register_mib_detach_node' before it's used for the first time.
+ (Spotted by Xiang Zhang)
+
+2002-05-24 07:44 dts12
+
+ * apps/Makefile.in:
+
+ Remove extraneous trailing backslash.
+ (That *might* be confusing Sun's make, but is wrong anyway)
+
+2002-05-23 01:39 dts12
+
+ * agent/mibgroup/ucd-snmp/: vmstat.c, vmstat_bsdi4.c,
+ vmstat_dynix.c, vmstat_freebsd2.c, vmstat_hpux.c,
+ vmstat_netbsd1.c, vmstat_solaris2.c:
+
+ Bring the various 'var_extensible_vmstat' definitions into line
+ with the declaration in the header file - i.e. non-static.
+
+2002-05-21 15:25 rstory
+
+ * Makefile.in:
+
+ add -I$(srcdir)/include to CPP path for people building outside of src tree
+
+2002-05-21 08:14 rstory
+
+ * agent/mibgroup/tunnel/tunnel.c:
+
+ apply patch [ 558129 ] Make the tunnel mib compile in 5.0.1, submitted
+ by Lorenzo Colitti (lcolitti), which adds missing net-snmp-config.h
+
+2002-05-21 05:32 jbpn
+
+ * agent/snmpd.c:
+
+ - fix core dump in -u option processing, noted by Andreas Maus
+
+2002-05-21 05:20 dts12
+
+ * agent/mibgroup/ucd-snmp/: memory.c (V4-2-patches.9), memory.c
+:
+
+ Latch memory reporting at 2^31-1, rather than 2^32-1 since these
+ objects are defined as (signed) Integer32.
+ Only latch if the value is *greater* than this threshold, not less!
+
+2002-05-21 01:20 jbpn
+
+ * include/ucd-snmp/default_store.h, snmplib/ucd_compat.c
+:
+
+ - add compatibility definitions and functions for newly-renamed
+ default store manipulation functions and constants (defined iff
+ --enable-ucd-compatibility is given to at configuration time)
+
+2002-05-21 00:51 jbpn
+
+ * include/net-snmp/library/default_store.h,
+ snmplib/default_store.c:
+
+ - move definition of netsnmp_ds_read_config type from default_store.h
+ into default_store.c (since it is not, and should not, be used
+ elsewhere).
+
+2002-05-20 03:42 rstory
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ registers tokens for ipv6 ro/rw community, and make sure to parse them
+ as ipv6, not v4.
+
+2002-05-19 11:38 driehuis
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Bugfix for FreeBSD support of the diskIO mib. The original code neglected
+ the device number, which made distinguishing between, say, ad0 and ad1
+ impossible.
+
+2002-05-17 09:05 hardaker
+
+ * agent/mibgroup/mibII/at.c, agent/mibgroup/mibII/icmp.c
+, agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/ip.c, agent/mibgroup/mibII/ipv6.c,
+ agent/mibgroup/mibII/mta_sendmail.c,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c, agent/mibgroup/mibII/tcp.c
+, agent/mibgroup/mibII/udp.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ include/net-snmp/agent/var_struct.h:
+
+ Patch from Harrie Hazewinkel to slightly reduce memory costs of registartions
+
+2002-05-16 17:06 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ fix default store tag names.
+ fix init_snmp() definition to match normal perl non-ansi mode.
+
+2002-05-16 16:39 driehuis
+
+ * net-snmp-config.in:
+
+ Make sure --cflags spits out the required include path when installing
+ in a non-default location, as documented in the usage info in the script.
+
+2002-05-16 15:36 hardaker
+
+ * local/snmpconf.dir/snmpd-data/system:
+
+ add a line to the sysServices prompt saying if you don't know, say no.
+
+2002-05-16 12:55 hardaker
+
+ * perl/agent/default_store/: default_store.pm,
+ default_store.xs:
+
+ update to new define list
+
+2002-05-16 12:55 hardaker
+
+ * perl/agent/default_store/test.pl:
+
+ test script
+
+2002-05-16 12:49 hardaker
+
+ * perl/agent/default_store/gen:
+
+ autogeneration script
+
+2002-05-16 10:58 hardaker
+
+ * perl/default_store/: default_store.pm, default_store.xs
+, test.pl:
+
+ updates to new .h tokens
+
+2002-05-16 10:58 hardaker
+
+ * perl/default_store/gen:
+
+ .h -> perlmodule regeneration script
+
+2002-05-16 07:09 dts12
+
+ * include/net-snmp/library/default_store.h,
+ include/net-snmp/library/mib.h, snmplib/mib.c,
+ snmplib/snmp_api.c, snmplib/ucd_compat.c:
+
+ Consolidate the various OID output configuration mechanisms into one.
+ This does not affect the command-line options (yet!) - just the internals.
+
+2002-05-15 17:44 hardaker
+
+ * snmplib/default_store.c,
+ include/net-snmp/library/default_store.h,
+ include/net-snmp/agent/ds_agent.h:
+
+ fix default_store
+
+2002-05-15 17:20 hardaker
+
+ * configure:
+
+ run autoconf
+
+2002-05-15 17:20 hardaker
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ create a define location for HAVE_GETDEVS
+
+2002-05-15 17:16 hardaker
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend
+:
+
+ depend update, which I meant to check in before the 5.0.1 release
+
+2002-05-15 05:53 jbpn
+
+ * agent/: agent_index.c, agent_read_config.c,
+ agent_registry.c, auto_nlist.c, kernel.c,
+ snmp_agent.c, snmp_perl.c, snmp_vars.c, snmpd.c
+:
+
+ - use new netsnmp_ds_blah functions and constants
+
+2002-05-15 05:39 jbpn
+
+ * apps/notification_log.c, apps/notification_log.h,
+ apps/snmpbulkwalk.c, apps/snmpdelta.c, apps/snmpget.c
+, apps/snmpgetnext.c, apps/snmpstatus.c,
+ apps/snmptable.c, apps/snmptranslate.c, apps/snmptrap.c
+, apps/snmptrapd.c, apps/snmpusm.c,
+ apps/snmpwalk.c, apps/snmpnetstat/main.c,
+ agent/mibgroup/agentx/agentx_config.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c, agent/mibgroup/smux/smux.c
+, agent/mibgroup/tunnel/tunnel.c:
+
+ - use new netsnmp_ds_blah functions and constants
+
+2002-05-15 05:37 jbpn
+
+ * snmplib/: default_store.c, mib.c, parse.c,
+ read_config.c, snmpUDPDomain.c, snmpUDPIPv6Domain.c
+, snmp_alarm.c, snmp_api.c, snmp_logging.c,
+ snmp_parse_args.c, snmp_secmod.c, snmpusm.c,
+ snmpv3.c, ucd_compat.c, vacm.c:
+
+ - rename functions and constants from default_store from ds_blah
+ to netsnmp_ds_blah
+
+2002-05-15 02:02 jbpn
+
+ * agent/mibgroup/smux/: smux.c (V4-2-patches.0), smux.c:
+
+ - initialise smux_listen_sd to avoid problems noted in bug #545448
+ (a bit unreasonable in my view but it can't do any harm).
+
+2002-05-14 12:40 rstory
+
+ * agent/helpers/table_array.c:
+
+ precision extraction of tumor instead of amputation, or, ifdef search.h
+ functions that aren't essential to table_array operation and will probably
+ vanish in the near future anyway.
+
+2002-05-13 20:16 rstory
+
+ * agent/object_monitor.c:
+
+ fix type in sizeof
+
+2002-05-13 13:04 hardaker
+
+ * configure, configure.in, agent/helpers/table_array.c
+, include/net-snmp/net-snmp-config.h.in:
+
+ Check for search.h before compiling the table_array helper
+
+2002-05-13 08:00 hardaker
+
+ * agent/helpers/old_api.c:
+
+ remove C++ comments
+
+2002-05-13 00:39 driehuis
+
+ * ChangeLog:
+
+ Note changes to configure.in.
+
+2002-05-12 10:30 driehuis
+
+ * configure.in:
+
+ Make sure the checks for kvm related stuff happens when -lkvm is in scope.
+ Add detection of the -ldevstat requirement when building with ucd-snmp/diskio.
+
+2002-05-10 23:33 hardaker
+
+ * FAQ, README, sedscript.in,
+ snmplib/snmp_version.c, perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.1 )
+
+2002-05-10 23:05 hardaker
+
+ * Makefile.top:
+
+ libtool version inc
+
+2002-05-10 22:32 hardaker
+
+ * NEWS, ChangeLog:
+
+ update for 5.0.1
+
+2002-05-10 17:09 hardaker
+
+ * FAQ, NEWS, README, README.agentx:
+
+ mention tutorial-5 instead of tutorial
+
+2002-05-10 17:04 hardaker
+
+ * perl/agent/: Makefile.PL, agent.pm,
+ netsnmp_request_info.pm:
+
+ request info perl code moved to separate file.
+
+2002-05-10 17:01 hardaker
+
+ * perl/OID/OID.pm:
+
+ documentation for the OID building overloads.
+
+2002-05-10 16:55 hardaker
+
+ * apps/snmpvacm.c:
+
+ Add proper length segment to the build view OID.
+
+2002-05-10 14:41 hardaker
+
+ * snmplib/mib.c:
+
+ new doc patch from Axel Kittenberg
+
+2002-05-10 14:04 hardaker
+
+ * agent/mibgroup/mibII/: vacm_vars.c (V4-2-patches.0), vacm_vars.c
+:
+
+ fix vacm problem on sets with OIDs containing large numbers as noted
+ by Vinay Gaonkar on the -coders mailing list.
+
+2002-05-10 13:46 hardaker
+
+ * local/mib2c:
+
+ fix calling on multiple tables
+
+2002-05-10 03:23 dts12
+
+ * snmplib/mib.c:
+
+ Merge "STRING: Hex:" type tokens into a single token "Hex-STRING:"
+
+2002-05-10 03:12 dts12
+
+ * agent/helpers/instance.c:
+
+ Report non-exitent subinstances as 'noSuchInstance' rather than 'noSuchObject'.
+ "snmpget .... .1.3.6.1.6.3.12.1.5.0.99" now responds correctly.
+ (though "snmpget .... .1.3.6.1.6.3.12.1.5.1" still returns 'noSuchObject')
+
+ Also guess that failed SET requests are 'noCreation' errors (which is
+ probably the most likely option).
+
+2002-05-09 15:54 hardaker
+
+ * Makefile.rules:
+
+ exit properly when a subdir fails to make properly
+
+2002-05-09 15:30 hardaker
+
+ * snmplib/mib.c:
+
+ create a token for the -Ov equivelant
+
+2002-05-09 09:12 hardaker
+
+ * agent/mibgroup/ucd-snmp/: memory_solaris2.c (V4-2-patches.5),
+ memory_solaris2.c:
+
+ patch from Takumi Kadode to fix memory usage on solaris
+
+2002-05-09 08:54 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ updates from malloced vmstat fixes from patches branch
+
+2002-05-08 16:34 hardaker
+
+ * net-snmp-config.in:
+
+ new --compile-subagent features:
+ --cflags
+ --norm
+ --ldflags
+ includes header files
+ misc other bug fixes.
+
+2002-05-08 13:13 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ make the subagent properly call the reserve2 state again.
+
+2002-05-08 10:02 hardaker
+
+ * agent/mibgroup/examples/notification.c:
+
+ run indent
+
+2002-05-08 09:01 hardaker
+
+ * agent/mibgroup/examples/notification.c:
+
+ um, use 30 seconds like advertised.
+
+2002-05-08 08:59 hardaker
+
+ * agent/mibgroup/examples/notification.c,
+ agent/mibgroup/examples/notification.h,
+ mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ define a better notification example (no requests. just alarm -> send)
+
+2002-05-07 22:45 hardaker
+
+ * local/mib2c:
+
+ update to current indent command
+
+2002-05-07 22:44 hardaker
+
+ * local/mib2c.create-dataset.conf:
+
+ move text in comment left slight (was too long).
+
+2002-05-07 22:43 hardaker
+
+ * local/mib2c:
+
+ enum fixes.
+
+2002-05-07 22:42 hardaker
+
+ * local/: Makefile.in, mib2c.column_defines.conf,
+ mib2c.column_enums.conf, mib2c.conf:
+
+ New mib2c files for generating headers full of column number defines
+ and enum defines.
+
+2002-05-07 22:40 hardaker
+
+ * net-snmp-config.in:
+
+ - --compile-subagent agent library reordering so it actually works.
+ - --compile-subagent now supports .o files (precompiled code).
+
+2002-05-07 22:31 hardaker
+
+ * acconfig.h, configure:
+
+ hmm. missed some checkin files.
+
+2002-05-07 11:15 hardaker
+
+ * perl/SNMP/t/: conftest.conf, startagent.pl, conf.t
+:
+
+ test for configuration file/default_store support
+
+2002-05-07 11:14 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ make init_snmp() take a char * argument like the real API
+
+2002-05-07 11:00 hardaker
+
+ * agent/helpers/instance.c:
+
+ typos.
+
+2002-05-07 09:41 hardaker
+
+ * local/snmpconf:
+
+ fix the -g flag.
+
+2002-05-07 09:16 hardaker
+
+ * agent/helpers/instance.c:
+
+ call netsnmp_set_request_error like a good boy.
+
+2002-05-06 20:43 rstory
+
+ * mibs/Makefile.mib:
+
+ fix missing $ noted by John Mills on the coders list
+
+2002-05-06 16:12 hardaker
+
+ * configure, config.h.in, configure.in, snmplib/snmp_api.c
+ (V4-2-patches.[4,2,3,3]), configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in,
+ snmplib/snmpTCPDomain.c, snmplib/snmpTCPIPv6Domain.c,
+ snmplib/snmpUDPDomain.c, snmplib/snmpUDPIPv6Domain.c,
+ snmplib/snmpUnixDomain.c:
+
+ use size_t when socklen_t is not available (correctly done this time)
+
+2002-05-06 15:59 hardaker
+
+ * snmplib/: snmpTCPDomain.c, snmpTCPIPv6Domain.c,
+ snmpUDPDomain.c, snmpUDPIPv6Domain.c, snmpUnixDomain.c
+:
+
+ use size_t when socklen_t is not available
+
+2002-05-06 15:49 hardaker
+
+ * configure, acconfig.h, config.h.in, configure.in
+ (V4-2-patches.[3,7,1,2]), acconfig.h, configure,
+ configure.in, include/net-snmp/net-snmp-config.h.in:
+
+ use size_t when socklen_t is not available
+
+2002-05-06 15:11 hardaker
+
+ * agent/mibgroup/ucd-snmp/: memory_hpux.c, memory_hpux.h
+, vmstat_hpux.c, vmstat_hpux.h:
+
+ run indent
+
+2002-05-06 15:10 hardaker
+
+ * agent/mibgroup/ucd-snmp/: memory_hpux.c, memory_hpux.h
+, vmstat_hpux.c, vmstat_hpux.h:
+
+ Patches #551914+ from Gary Edwards to support hpux11 for memory and vmstat modules
+
+2002-05-06 15:07 hardaker
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ add new hpux modules
+
+2002-05-06 14:34 hardaker
+
+ * README:
+
+ new contributors.
+
+2002-05-06 14:32 hardaker
+
+ * include/net-snmp/library/default_store.h, man/snmpcmd.1.def
+, snmplib/mib.c:
+
+ Patch #551489: From Jeffrey Watson to add a -Q option for quick but w/ an '='
+
+2002-05-06 14:28 hardaker
+
+ * man/snmpd.1.def:
+
+ change -D documentation to reflect current code.
+
+2002-05-06 14:27 hardaker
+
+ * agent/agent_handler.c:
+
+ misc small bugs and error message wording fixes.
+
+2002-05-06 09:37 hardaker
+
+ * agent/mibgroup/smux/: smux.c (V4-2-patches.9), smux.c:
+
+ bug #547010: fix smux auth bug as reported and fixed by Stefan Radman
+
+2002-05-01 23:01 rstory
+
+ * local/mib2c.array-user.conf:
+
+ tweaks for update to table_array
+
+2002-05-01 23:00 rstory
+
+ * agent/Makefile.in:
+
+ add object_monitor stuff
+
+2002-05-01 22:46 rstory
+
+ * snmplib/Makefile.in:
+
+ add check_varbind stuff
+
+2002-05-01 22:45 rstory
+
+ * include/net-snmp/library/check_varbind.h,
+ snmplib/check_varbind.c:
+
+ convenience functions for validation vabrind info
+
+2002-05-01 22:43 rstory
+
+ * agent/helpers/table_array.c,
+ include/net-snmp/agent/table_array.h:
+
+ do I really have to do this? sigh. Ok, rename debug token; revamp logic to
+ modify rows in place, keeping undo info (vs always changing a copy of a row
+ and swapping rows when set completed successfully) to allow external code
+ to keep pointers that don't disappear on them; add a few callbacks, including
+ row_compare, so table_array can maintain the secondary index tree; don't call
+ can_activate/can_delete unless we are actually trying to activate/delete row;
+ add skeleton (ifdef'd out) code for cooperative notifications of row events;
+ update changing array in commit & undo cases, not just commit; change typdefs
+ for a few callback pointers; ummmm... I *think* that's it....:-)
+
+2002-05-01 17:30 hardaker
+
+ * perl/OID/: OID.pm, OID.xs, test.pl:
+
+ Add index building to the + operator.
+
+2002-05-01 09:52 hardaker
+
+ * perl/: OID/OID.pm, OID/OID.xs, agent/Makefile.PL
+, agent/agent.pm, agent/agent.xs, agent/test.pl
+, agent/typemap:
+
+ Make getOID for requests returned a NetSNMP::OID blessed reference.
+ I'm not happy about how this is done, but all attempts to do it
+ correctly only left me in confusion.
+
+2002-05-01 09:31 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c,
+ include/net-snmp/library/snmpAAL5PVCDomain.h,
+ include/net-snmp/library/snmpTCPIPv6Domain.h,
+ include/net-snmp/library/snmpUDPIPv6Domain.h,
+ include/net-snmp/library/snmpUnixDomain.h,
+ snmplib/snmpAAL5PVCDomain.c, snmplib/snmpTCPIPv6Domain.c
+, snmplib/snmpUDPIPv6Domain.c, snmplib/snmpUnixDomain.c
+:
+
+ Change the domain OIDs to point to the net-snmp domains created by Dave.
+ This fixes bug #544245 as well.
+
+2002-05-01 09:30 hardaker
+
+ * Makefile.in:
+
+ Add the OID perl module to the list of modules.
+
+2002-05-01 07:45 hardaker
+
+ * mibs/: UCD-SNMP-MIB.txt (V4-2-patches.0), UCD-SNMP-MIB.txt:
+
+ remove old (and conflicting with traps) transport domain OIDs
+
+2002-05-01 06:19 dts12
+
+ * man/: snmpbulkget.1.def, snmpbulkwalk.1.def,
+ snmpcmd.1.def, snmpdelta.1, snmpget.1.def,
+ snmpset.1.def, snmpstatus.1.def, snmptest.1.def,
+ snmpwalk.1.def:
+
+ Add type tags "STRING: " and "INTEGER: " to example output.
+ Add explicit setting of protocol version to example commands.
+
+2002-05-01 03:34 jbpn
+
+ * agent/mibgroup/Rmon/: agutil.c, agutil.h,
+ agutil_api.h, alarm.c, alarm.h, event.c,
+ event.h, history.c, history.h, row_api.h,
+ rows.c, rows.h, statistics.c, statistics.h:
+
+ - remove CVS Log: entries which are causing problems since they are
+ embedded in a comment, but some of the log entries contain comment
+ delimiters.
+
+2002-04-30 22:15 rstory
+
+ * agent/snmpd.c:
+
+ remove netsnmp_processing_set, it lives in snmp_agent.c
+
+2002-04-30 22:13 rstory
+
+ * include/net-snmp/library/snmp-tc.h, snmplib/snmp-tc.c
+:
+
+ remove unused parameter; allow NONE as old value for storage type transtions
+
+2002-04-30 22:12 rstory
+
+ * include/net-snmp/agent/table.h:
+
+ remove overly complex macro stuff for rowstatus/storagetype
+
+2002-04-30 09:28 hardaker
+
+ * perl/OID/: Makefile.PL, OID.pm, OID.xs, README
+, test.pl:
+
+ - allow conversions to an array (needs to be tied still).
+ - documentation.
+
+2002-04-30 08:15 jbpn
+
+ * agent/: snmpd.c (V4-2-patches.3), snmpd.c:
+
+ - fix bug #545775, reported by Dave Denson, whereby the PID of an
+ already-running snmpd would be overwritten by starting a new snmpd
+ (which would then exit, leaving the original snmpd running and the
+ wrong PID in the file). Solution is not to write the PID until we
+ have successfully opened all our sockets.
+
+2002-04-30 07:23 hardaker
+
+ * perl/OID/: .cvsignore, Changes, MANIFEST,
+ Makefile.PL, OID.pm, OID.xs, README,
+ test.pl, typemap:
+
+ OID perl module so you can do simple OID manipulations within perl easily:
+ - Example: new NetSNMP::OID('interfaces') > new NetSNMP::OID('system')
+
+2002-04-29 16:52 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ regexp fix for white space checks in indent formatted code
+
+2002-04-29 16:47 hardaker
+
+ * Makefile.in:
+
+ reorder perl module names to reflect (new) dependencies.
+
+2002-04-29 09:42 hardaker
+
+ * perl/SNMP/t/mib.t:
+
+ fix a few warnings on failed tests (just screen cleanups)
+
+2002-04-29 09:41 hardaker
+
+ * perl/SNMP/: Makefile.PL, SNMP.pm:
+
+ Make the perl module respect snmp.conf settings (finally).
+ - Now requires a dependency on the NetSNMP::default_store module though.
+
+2002-04-27 08:19 rstory
+
+ * agent/snmp_agent.c:
+
+ don't process set request till delegated requests are complete, and queue
+ any other received packets until a set has completed processing.
+
+2002-04-27 08:10 rstory
+
+ * snmplib/snmp_api.c:
+
+ clean up comments munged by indent
+
+2002-04-27 08:08 rstory
+
+ * agent/mibgroup/agentx/subagent.h:
+
+ add missing prototype to fix compiler warning
+
+2002-04-27 08:07 rstory
+
+ * agent/: object_monitor.c, helpers/table.c,
+ helpers/table_array.c:
+
+ ifdef gymnastics to make sure asserts are only compiled in only if explicity
+ requested
+
+2002-04-26 21:26 rstory
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ fix unbalanced endif on linux. hope I didn't break anything else.
+
+2002-04-26 19:14 rstory
+
+ * agent/snmpd.c:
+
+ fix unused var warning for !windows
+
+2002-04-26 14:33 hardaker
+
+ * agent/mibgroup/Rmon/event.c,
+ include/net-snmp/library/asn1.h:
+
+ fix OID_LENGTH definitions
+
+2002-04-26 10:53 hardaker
+
+ * Makefile.in, perl/ASN/Makefile.PL,
+ perl/agent/Makefile.PL, perl/agent/default_store/Makefile.PL
+:
+
+ fix --with-perl-modules in makefiles. Make everything use
+ net-snmp-config, ...
+
+2002-04-26 10:27 hardaker
+
+ * perl/SNMP/: Makefile.PL, README, SNMP.pm:
+
+ - Cleanup.
+ - Make buildable from within the source.
+ - Change documentation references for ucd-snmp
+ - Change contact location to net-snmp-users (per Joe's agreement)
+
+2002-04-26 10:19 hardaker
+
+ * perl/default_store/: MANIFEST, Makefile.PL, README
+, default_store.pm, test.pl:
+
+ - cleanup.
+ - Use net-snmp-config to find library, etc.
+ - Make buildable from within the source.
+ - a few more tests added
+ - use correct libraries
+ - add documentation
+
+2002-04-26 04:22 dts12
+
+ * configure, configure.in:
+
+ Extracting the version from 'snmplib/snmp_version.c' needs to take account
+ of blank space. Reported by Stefan Radman (Bug #547379)
+
+2002-04-26 04:11 dts12
+
+ * agent/mibgroup/ucd-snmp/: memory.c (V4-2-patches.8), memory.c
+:
+
+ Handle memory values > 32bit (latching at 2^32-1)
+ Patch #548663 from Rob Myers
+
+2002-04-26 03:55 dts12
+
+ * agent/snmpd.c:
+
+ Remove redundant 'Invalid option' message, since this is typically
+ reported by getopt(). (Suggested by Andrew Rucker Jones - patch #548748 )
+
+2002-04-26 03:51 dts12
+
+ * agent/snmpd.c:
+
+ Add 'v' to the list of valid options (patch #548748)
+ Thanks to Andrew Rucker Jones.
+
+2002-04-26 03:36 dts12
+
+ * README.hpux11, agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_system.c,
+ agent/mibgroup/mibII/var_route.c,
+ include/net-snmp/system/hpux.h,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory.h:
+
+ Apply Johannes Schmidt-Fischer's improved HP-UX 11 patch
+ (#530724) to the main v5 line, as well as the v4-2 branch.
+ The code now compiles cleanly under HP-UX 11 using gcc.
+
+2002-04-25 07:19 hardaker
+
+ * README, include/net-snmp/library/vacm.h,
+ snmplib/vacm.c:
+
+ Patch from Axel Kittenberg to fix possible variable name clash
+
+2002-04-24 22:39 rstory
+
+ * agent/object_monitor.c:
+
+ handle callbacks sending new notifications (while processing notifications)
+
+2002-04-24 21:35 rstory
+
+ * include/net-snmp/agent/object_monitor.h:
+
+ header for new fucntions for monitoring objects
+
+2002-04-24 21:34 rstory
+
+ * agent/object_monitor.c:
+
+ new functions for monitoring object values
+
+2002-04-24 15:02 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ /proc/stat can be larger than 1024
+
+2002-04-24 06:19 dts12
+
+ * snmplib/Makefile.in:
+
+ Install the missing 'md5.h' header file.
+
+2002-04-23 09:43 rstory
+
+ * agent/helpers/: table.c, table_array.c:
+
+ remove last of the #warnings, add xxx-rks if necessary
+
+2002-04-23 07:53 hardaker
+
+ * agent/helpers/table_array.c:
+
+ remove warnings
+
+2002-04-22 19:11 rstory
+
+ * agent/mibgroup/ipfwchains/README:
+
+ update URL to use freenmp.com mirror (unless someone knows a better place?)
+
+2002-04-22 14:10 rstory
+
+ * snmplib/mib.c:
+
+ apply documentatin patch from Axel Kittenberger <Axel.Kittenberger@maxxio.com>
+
+2002-04-22 13:50 rstory
+
+ * local/mib2c.array-user.conf:
+
+ remove extra @end@ (sure would be nice if mib2c would check for unbalanced
+ @end@s)
+
+2002-04-22 09:48 rstory
+
+ * snmplib/oid_array.c:
+
+ update function names to match header (no mixed case)
+
+2002-04-22 08:11 hardaker
+
+ * include/net-snmp/library/snmp_debug.h:
+
+ fix bug #547110: properly spell define
+
+2002-04-21 16:44 hardaker
+
+ * agent/mibgroup/mibII/sysORTable.c:
+
+ add static to a returned variable
+
+2002-04-21 16:42 hardaker
+
+ * configure, configure.in:
+
+ fix --with-perl-modules
+
+2002-04-21 11:37 rstory
+
+ * snmplib/snmp_version.c:
+
+ 5.0.pre3 -> 5.0; (I'm sure there are other places this needs to change,
+ but I wanted to get the first post 5.0 checkin...:-)
+
+2002-04-20 00:37 hardaker
+
+ * FAQ, sedscript.in, perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0 )
+
+2002-04-20 00:32 hardaker
+
+ * NEWS:
+
+ change version to 5.0
+
+2002-04-20 00:29 hardaker
+
+ * .cvsignore, AGENT.txt, COPYING, ChangeLog
+, CodingStyle, EXAMPLE.conf.def, FAQ,
+ INSTALL, Makefile.in, Makefile.rules,
+ Makefile.top, NEWS, PORTING, README,
+ README.agentx, README.cmu, README.hpux11,
+ README.krb5, README.snmpv3, README.thread,
+ README.win32, TODO, acconfig.h, aclocal.m4,
+ config.guess, config.sub, configure, configure.in
+, dotgdbinit, doxygen.conf, install-sh,
+ ltmain.sh, makedepend.in, makefileindepend.pl,
+ makenosysdepend.pl, maketarget, mkinstalldirs,
+ net-snmp-config.in, remove-files, sedscript.in,
+ stamp-h, stamp-h.in, agent/.cvsignore,
+ agent/Makefile.depend, agent/Makefile.in,
+ agent/agent_handler.c, agent/agent_index.c,
+ agent/agent_read_config.c, agent/agent_registry.c,
+ agent/agent_trap.c, agent/auto_nlist.c,
+ agent/autonlist.h, agent/kernel.c, agent/kernel.h
+, agent/m2m.h, agent/mib_modules.c,
+ agent/snmp_agent.c, agent/snmp_perl.c,
+ agent/snmp_perl.pl, agent/snmp_vars.c, agent/snmpd.c
+, agent/snmpd.h, agent/dlmods/.cvsignore,
+ agent/helpers/.cvsignore, agent/helpers/Makefile.depend
+, agent/helpers/Makefile.in, agent/helpers/all_helpers.c
+, agent/helpers/bulk_to_next.c,
+ agent/helpers/debug_handler.c, agent/helpers/instance.c
+, agent/helpers/multiplexer.c, agent/helpers/null.c
+, agent/helpers/old_api.c, agent/helpers/read_only.c
+, agent/helpers/serialize.c, agent/helpers/table.c
+, agent/helpers/table_array.c,
+ agent/helpers/table_data.c, agent/helpers/table_dataset.c
+, agent/helpers/table_iterator.c,
+ agent/mibgroup/.cvsignore, agent/mibgroup/Makefile.depend
+, agent/mibgroup/Makefile.in, agent/mibgroup/README
+, agent/mibgroup/README.smux, agent/mibgroup/Rmon.h
+, agent/mibgroup/agent_mibs.h, agent/mibgroup/agentx.h
+, agent/mibgroup/examples.h,
+ agent/mibgroup/header_complex.c,
+ agent/mibgroup/header_complex.h, agent/mibgroup/host.h,
+ agent/mibgroup/host_res.h, agent/mibgroup/kernel_sunos5.c
+, agent/mibgroup/kernel_sunos5.h, agent/mibgroup/mibII.h
+, agent/mibgroup/mibdefs.h, agent/mibgroup/mibincl.h
+, agent/mibgroup/notification.h, agent/mibgroup/smux.h
+, agent/mibgroup/smux_gated.h,
+ agent/mibgroup/snmpv3mibs.h, agent/mibgroup/struct.h,
+ agent/mibgroup/target.h, agent/mibgroup/testhandler.c,
+ agent/mibgroup/testhandler.h, agent/mibgroup/tunnel.h,
+ agent/mibgroup/ucd_snmp.h, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/util_funcs.h, agent/mibgroup/utilities.h
+, agent/mibgroup/versiontag, agent/mibgroup/Rmon/README
+, agent/mibgroup/Rmon/agutil.c,
+ agent/mibgroup/Rmon/agutil.h,
+ agent/mibgroup/Rmon/agutil_api.h, agent/mibgroup/Rmon/alarm.c
+, agent/mibgroup/Rmon/alarm.h,
+ agent/mibgroup/Rmon/event.c, agent/mibgroup/Rmon/event.h
+, agent/mibgroup/Rmon/history.c,
+ agent/mibgroup/Rmon/history.h, agent/mibgroup/Rmon/row_api.h
+, agent/mibgroup/Rmon/rows.c, agent/mibgroup/Rmon/rows.h
+, agent/mibgroup/Rmon/statistics.c,
+ agent/mibgroup/Rmon/statistics.h,
+ agent/mibgroup/Rmon/test_alarm.sh,
+ agent/mibgroup/Rmon/test_hist.sh,
+ agent/mibgroup/agent/.cvsignore,
+ agent/mibgroup/agent/nsModuleTable.c,
+ agent/mibgroup/agent/nsModuleTable.h,
+ agent/mibgroup/agent/nsTransactionTable.c,
+ agent/mibgroup/agent/nsTransactionTable.h,
+ agent/mibgroup/agentx/.cvsignore,
+ agent/mibgroup/agentx/agentx_config.c,
+ agent/mibgroup/agentx/agentx_config.h,
+ agent/mibgroup/agentx/client.c,
+ agent/mibgroup/agentx/client.h,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master.h,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/master_admin.h,
+ agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/agentx/protocol.h,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/agentx/subagent.h,
+ agent/mibgroup/disman/.cvsignore,
+ agent/mibgroup/disman/event-mib.h,
+ agent/mibgroup/disman/mteObjectsTable.c,
+ agent/mibgroup/disman/mteObjectsTable.h,
+ agent/mibgroup/disman/mteTriggerBooleanTable.c,
+ agent/mibgroup/disman/mteTriggerBooleanTable.h,
+ agent/mibgroup/disman/mteTriggerDeltaTable.c,
+ agent/mibgroup/disman/mteTriggerDeltaTable.h,
+ agent/mibgroup/disman/mteTriggerExistenceTable.c,
+ agent/mibgroup/disman/mteTriggerExistenceTable.h,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/disman/mteTriggerTable.h,
+ agent/mibgroup/disman/mteTriggerThresholdTable.c,
+ agent/mibgroup/disman/mteTriggerThresholdTable.h,
+ agent/mibgroup/dummy/.cvsignore,
+ agent/mibgroup/examples/.cvsignore,
+ agent/mibgroup/examples/Makefile.dlmod,
+ agent/mibgroup/examples/data_set.c,
+ agent/mibgroup/examples/data_set.h,
+ agent/mibgroup/examples/delayed_instance.c,
+ agent/mibgroup/examples/delayed_instance.h,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/examples/example.h,
+ agent/mibgroup/examples/scalar_int.c,
+ agent/mibgroup/examples/scalar_int.h,
+ agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/examples/ucdDemoPublic.cmds,
+ agent/mibgroup/examples/ucdDemoPublic.conf,
+ agent/mibgroup/examples/ucdDemoPublic.h,
+ agent/mibgroup/host/.cvsignore,
+ agent/mibgroup/host/hr_device.c,
+ agent/mibgroup/host/hr_device.h,
+ agent/mibgroup/host/hr_disk.c, agent/mibgroup/host/hr_disk.h
+, agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_filesys.h,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_network.h,
+ agent/mibgroup/host/hr_other.c,
+ agent/mibgroup/host/hr_other.h,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_partition.h,
+ agent/mibgroup/host/hr_print.c,
+ agent/mibgroup/host/hr_print.h, agent/mibgroup/host/hr_proc.c
+, agent/mibgroup/host/hr_proc.h,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_storage.h,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swinst.h,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_swrun.h,
+ agent/mibgroup/host/hr_system.c,
+ agent/mibgroup/host/hr_system.h,
+ agent/mibgroup/ipfwchains/.cvsignore,
+ agent/mibgroup/ipfwchains/README,
+ agent/mibgroup/mibII/.cvsignore, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/at.h, agent/mibgroup/mibII/icmp.c
+, agent/mibgroup/mibII/icmp.h,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/interfaces.h, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/ip.h,
+ agent/mibgroup/mibII/ipAddr.c, agent/mibgroup/mibII/ipAddr.h
+, agent/mibgroup/mibII/ipv6.c,
+ agent/mibgroup/mibII/ipv6.h,
+ agent/mibgroup/mibII/kernel_linux.c,
+ agent/mibgroup/mibII/kernel_linux.h,
+ agent/mibgroup/mibII/mta_sendmail.c,
+ agent/mibgroup/mibII/mta_sendmail.h,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/route_write.h,
+ agent/mibgroup/mibII/setSerialNo.c,
+ agent/mibgroup/mibII/setSerialNo.h,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/snmp_mib.h,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/sysORTable.h,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/system_mib.h, agent/mibgroup/mibII/tcp.c
+, agent/mibgroup/mibII/tcp.h,
+ agent/mibgroup/mibII/tcpTable.c,
+ agent/mibgroup/mibII/tcpTable.h, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/mibII/udp.h,
+ agent/mibgroup/mibII/udpTable.c,
+ agent/mibgroup/mibII/udpTable.h,
+ agent/mibgroup/mibII/vacm_context.c,
+ agent/mibgroup/mibII/vacm_context.h,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/vacm_vars.h,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/mibII/var_route.h,
+ agent/mibgroup/misc/.cvsignore, agent/mibgroup/misc/dlmod.c
+, agent/mibgroup/misc/dlmod.h,
+ agent/mibgroup/misc/ipfwacc.c, agent/mibgroup/misc/ipfwacc.h
+, agent/mibgroup/notification/.cvsignore,
+ agent/mibgroup/notification/snmpNotifyFilterProfileTable.c,
+ agent/mibgroup/notification/snmpNotifyFilterProfileTable.h,
+ agent/mibgroup/notification/snmpNotifyFilterTable.c,
+ agent/mibgroup/notification/snmpNotifyFilterTable.h,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/notification/snmpNotifyTable.h,
+ agent/mibgroup/smux/.cvsignore, agent/mibgroup/smux/smux.c
+, agent/mibgroup/smux/smux.h,
+ agent/mibgroup/smux/snmp_bgp.c,
+ agent/mibgroup/smux/snmp_bgp.h,
+ agent/mibgroup/smux/snmp_ospf.c,
+ agent/mibgroup/smux/snmp_ospf.h,
+ agent/mibgroup/smux/snmp_rip2.c,
+ agent/mibgroup/smux/snmp_rip2.h,
+ agent/mibgroup/snmpv3/.cvsignore,
+ agent/mibgroup/snmpv3/snmpEngine.c,
+ agent/mibgroup/snmpv3/snmpEngine.h,
+ agent/mibgroup/snmpv3/snmpMPDStats.c,
+ agent/mibgroup/snmpv3/snmpMPDStats.h,
+ agent/mibgroup/snmpv3/usmStats.c,
+ agent/mibgroup/snmpv3/usmStats.h,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/snmpv3/usmUser.h,
+ agent/mibgroup/target/.cvsignore,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.h,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.h,
+ agent/mibgroup/target/target.c,
+ agent/mibgroup/target/target.h,
+ agent/mibgroup/target/target_counters.c,
+ agent/mibgroup/target/target_counters.h,
+ agent/mibgroup/tunnel/tunnel.c,
+ agent/mibgroup/tunnel/tunnel.h,
+ agent/mibgroup/ucd-snmp/.cvsignore,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/disk.h,
+ agent/mibgroup/ucd-snmp/diskio.c,
+ agent/mibgroup/ucd-snmp/diskio.h,
+ agent/mibgroup/ucd-snmp/dlmod.c,
+ agent/mibgroup/ucd-snmp/dlmod.h,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/errormib.h,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/extensible.h,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/file.h,
+ agent/mibgroup/ucd-snmp/hpux.c,
+ agent/mibgroup/ucd-snmp/hpux.h,
+ agent/mibgroup/ucd-snmp/lmSensors.c,
+ agent/mibgroup/ucd-snmp/lmSensors.h,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/loadave.h,
+ agent/mibgroup/ucd-snmp/logmatch.c,
+ agent/mibgroup/ucd-snmp/logmatch.h,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory.h,
+ agent/mibgroup/ucd-snmp/memory_dynix.c,
+ agent/mibgroup/ucd-snmp/memory_dynix.h,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.h,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.h,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.h,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass.h,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/pass_persist.h,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/proc.h,
+ agent/mibgroup/ucd-snmp/proxy.c,
+ agent/mibgroup/ucd-snmp/proxy.h,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/versioninfo.h,
+ agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/ucd-snmp/vmstat.h,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.h,
+ agent/mibgroup/ucd-snmp/vmstat_dynix.c,
+ agent/mibgroup/ucd-snmp/vmstat_dynix.h,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.h,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.h,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.h,
+ agent/mibgroup/utilities/.cvsignore,
+ agent/mibgroup/utilities/override.c,
+ agent/mibgroup/utilities/override.h,
+ agent/mibgroup/v2party/.cvsignore,
+ agent/mibgroup/vestinternett/.cvsignore, apps/.cvsignore
+, apps/Makefile.depend, apps/Makefile.in,
+ apps/encode_keychange.c, apps/notification_log.c,
+ apps/notification_log.h, apps/snmpbulkget.c,
+ apps/snmpbulkwalk.c, apps/snmpdelta.c, apps/snmpdf.c
+, apps/snmpget.c, apps/snmpgetnext.c,
+ apps/snmpset.c, apps/snmpstatus.c, apps/snmptable.c
+, apps/snmptest.c, apps/snmptranslate.c,
+ apps/snmptrap.c, apps/snmptrapd.c,
+ apps/snmptrapd_handlers.c, apps/snmptrapd_handlers.h,
+ apps/snmptrapd_log.c, apps/snmptrapd_log.h,
+ apps/snmpusm.c, apps/snmpvacm.c, apps/snmpwalk.c,
+ apps/snmpnetstat/.cvsignore, apps/snmpnetstat/Makefile.depend
+, apps/snmpnetstat/Makefile.in, apps/snmpnetstat/if.c
+, apps/snmpnetstat/inet.c, apps/snmpnetstat/inet6.c
+, apps/snmpnetstat/main.c, apps/snmpnetstat/main.h
+, apps/snmpnetstat/netstat.h, apps/snmpnetstat/route.c
+, apps/snmpnetstat/winstub.c, apps/snmpnetstat/winstub.h
+, include/net-snmp/.cvsignore,
+ include/net-snmp/config_api.h, include/net-snmp/definitions.h
+, include/net-snmp/mib_api.h,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/net-snmp-includes.h,
+ include/net-snmp/output_api.h, include/net-snmp/pdu_api.h
+, include/net-snmp/session_api.h,
+ include/net-snmp/snmpv3_api.h, include/net-snmp/types.h
+, include/net-snmp/utilities.h,
+ include/net-snmp/varbind_api.h, include/net-snmp/version.h
+, include/net-snmp/agent/.cvsignore,
+ include/net-snmp/agent/agent_callbacks.h,
+ include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/agent_index.h,
+ include/net-snmp/agent/agent_read_config.h,
+ include/net-snmp/agent/agent_registry.h,
+ include/net-snmp/agent/agent_trap.h,
+ include/net-snmp/agent/all_helpers.h,
+ include/net-snmp/agent/auto_nlist.h,
+ include/net-snmp/agent/bulk_to_next.h,
+ include/net-snmp/agent/debug_handler.h,
+ include/net-snmp/agent/ds_agent.h,
+ include/net-snmp/agent/instance.h,
+ include/net-snmp/agent/mib_modules.h,
+ include/net-snmp/agent/multiplexer.h,
+ include/net-snmp/agent/net-snmp-agent-includes.h,
+ include/net-snmp/agent/null.h,
+ include/net-snmp/agent/old_api.h,
+ include/net-snmp/agent/read_only.h,
+ include/net-snmp/agent/serialize.h,
+ include/net-snmp/agent/set_helper.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/snmp_vars.h,
+ include/net-snmp/agent/table.h,
+ include/net-snmp/agent/table_array.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/agent/table_iterator.h,
+ include/net-snmp/agent/var_struct.h,
+ include/net-snmp/library/.cvsignore,
+ include/net-snmp/library/README,
+ include/net-snmp/library/asn1.h,
+ include/net-snmp/library/callback.h,
+ include/net-snmp/library/cmu_compat.h,
+ include/net-snmp/library/data_list.h,
+ include/net-snmp/library/default_store.h,
+ include/net-snmp/library/getopt.h,
+ include/net-snmp/library/int64.h,
+ include/net-snmp/library/keytools.h,
+ include/net-snmp/library/lcd_time.h,
+ include/net-snmp/library/libsnmp.h,
+ include/net-snmp/library/md5.h,
+ include/net-snmp/library/mib.h,
+ include/net-snmp/library/mt_support.h,
+ include/net-snmp/library/oid_array.h,
+ include/net-snmp/library/oid_stash.h,
+ include/net-snmp/library/parse.h,
+ include/net-snmp/library/read_config.h,
+ include/net-snmp/library/scapi.h,
+ include/net-snmp/library/snmp-tc.h,
+ include/net-snmp/library/snmp.h,
+ include/net-snmp/library/snmpAAL5PVCDomain.h,
+ include/net-snmp/library/snmpCallbackDomain.h,
+ include/net-snmp/library/snmpIPXDomain.h,
+ include/net-snmp/library/snmpTCPDomain.h,
+ include/net-snmp/library/snmpTCPIPv6Domain.h,
+ include/net-snmp/library/snmpUDPDomain.h,
+ include/net-snmp/library/snmpUDPIPv6Domain.h,
+ include/net-snmp/library/snmpUnixDomain.h,
+ include/net-snmp/library/snmp_alarm.h,
+ include/net-snmp/library/snmp_api.h,
+ include/net-snmp/library/snmp_client.h,
+ include/net-snmp/library/snmp_debug.h,
+ include/net-snmp/library/snmp_enum.h,
+ include/net-snmp/library/snmp_impl.h,
+ include/net-snmp/library/snmp_locking.h,
+ include/net-snmp/library/snmp_logging.h,
+ include/net-snmp/library/snmp_parse_args.h,
+ include/net-snmp/library/snmp_secmod.h,
+ include/net-snmp/library/snmp_transport.h,
+ include/net-snmp/library/snmpksm.h,
+ include/net-snmp/library/snmpusm.h,
+ include/net-snmp/library/snmpv3.h,
+ include/net-snmp/library/system.h,
+ include/net-snmp/library/tools.h,
+ include/net-snmp/library/transform_oids.h,
+ include/net-snmp/library/ucd_compat.h,
+ include/net-snmp/library/vacm.h,
+ include/net-snmp/library/winservice.h,
+ include/net-snmp/machine/generic.h,
+ include/net-snmp/system/aix.h, include/net-snmp/system/bsd.h
+, include/net-snmp/system/bsdi.h,
+ include/net-snmp/system/bsdi3.h,
+ include/net-snmp/system/bsdi4.h,
+ include/net-snmp/system/cygwin.h,
+ include/net-snmp/system/darwin.h,
+ include/net-snmp/system/dynix.h,
+ include/net-snmp/system/freebsd.h,
+ include/net-snmp/system/freebsd2.h,
+ include/net-snmp/system/freebsd3.h,
+ include/net-snmp/system/freebsd4.h,
+ include/net-snmp/system/generic.h,
+ include/net-snmp/system/hpux.h,
+ include/net-snmp/system/irix.h,
+ include/net-snmp/system/linux.h,
+ include/net-snmp/system/mips.h,
+ include/net-snmp/system/netbsd.h,
+ include/net-snmp/system/openbsd.h,
+ include/net-snmp/system/solaris.h,
+ include/net-snmp/system/solaris2.6.h,
+ include/net-snmp/system/solaris2.7.h,
+ include/net-snmp/system/solaris2.8.h,
+ include/net-snmp/system/sunos.h,
+ include/net-snmp/system/svr5.h,
+ include/net-snmp/system/sysv.h,
+ include/net-snmp/system/ultrix4.h,
+ include/ucd-snmp/.cvsignore, include/ucd-snmp/README,
+ include/ucd-snmp/agent_index.h,
+ include/ucd-snmp/agent_read_config.h,
+ include/ucd-snmp/agent_registry.h,
+ include/ucd-snmp/agent_trap.h, include/ucd-snmp/asn1.h,
+ include/ucd-snmp/auto_nlist.h, include/ucd-snmp/callback.h
+, include/ucd-snmp/default_store.h,
+ include/ucd-snmp/ds_agent.h,
+ include/ucd-snmp/header_complex.h, include/ucd-snmp/int64.h
+, include/ucd-snmp/keytools.h, include/ucd-snmp/mib.h
+, include/ucd-snmp/mib_module_config.h,
+ include/ucd-snmp/mibincl.h, include/ucd-snmp/parse.h,
+ include/ucd-snmp/read_config.h, include/ucd-snmp/scapi.h
+, include/ucd-snmp/snmp-tc.h, include/ucd-snmp/snmp.h
+, include/ucd-snmp/snmp_agent.h,
+ include/ucd-snmp/snmp_alarm.h, include/ucd-snmp/snmp_api.h
+, include/ucd-snmp/snmp_client.h,
+ include/ucd-snmp/snmp_debug.h, include/ucd-snmp/snmp_impl.h
+, include/ucd-snmp/snmp_logging.h,
+ include/ucd-snmp/snmp_parse_args.h,
+ include/ucd-snmp/snmp_vars.h, include/ucd-snmp/snmpusm.h
+, include/ucd-snmp/snmpv3.h, include/ucd-snmp/struct.h
+, include/ucd-snmp/system.h, include/ucd-snmp/tools.h
+, include/ucd-snmp/transform_oids.h,
+ include/ucd-snmp/ucd-snmp-agent-includes.h,
+ include/ucd-snmp/ucd-snmp-config.h,
+ include/ucd-snmp/ucd-snmp-includes.h,
+ include/ucd-snmp/util_funcs.h, include/ucd-snmp/var_struct.h
+, include/ucd-snmp/version.h, local/.cvsignore,
+ local/FAQ2HTML, local/Makefile.in, local/README.mib2c
+, local/convertcode, local/fixproc,
+ local/ipf-mod.pl, local/mib2c,
+ local/mib2c.array-user.conf, local/mib2c.conf,
+ local/mib2c.create-dataset.conf, local/mib2c.iterate.conf
+, local/mib2c.vartypes.conf, local/pass_persisttest
+, local/passtest, local/snmp-ucd.sh,
+ local/snmpcheck.def, local/snmpconf, local/tkmib,
+ local/traptoemail, local/snmpconf.dir/snmp-data/authopts
+, local/snmpconf.dir/snmp-data/debugging,
+ local/snmpconf.dir/snmp-data/mibs,
+ local/snmpconf.dir/snmp-data/output,
+ local/snmpconf.dir/snmp-data/snmpconf-config,
+ local/snmpconf.dir/snmpd-data/acl,
+ local/snmpconf.dir/snmpd-data/basic_setup,
+ local/snmpconf.dir/snmpd-data/extending,
+ local/snmpconf.dir/snmpd-data/monitor,
+ local/snmpconf.dir/snmpd-data/operation,
+ local/snmpconf.dir/snmpd-data/snmpconf-config,
+ local/snmpconf.dir/snmpd-data/system,
+ local/snmpconf.dir/snmpd-data/trapsinks,
+ local/snmpconf.dir/snmptrapd-data/formatting,
+ local/snmpconf.dir/snmptrapd-data/snmpconf-config,
+ local/snmpconf.dir/snmptrapd-data/traphandle, man/.cvsignore
+, man/Makefile.in, man/add_mibdir.3,
+ man/add_module_replacement.3, man/default_store.3.bot,
+ man/default_store.3.top, man/get_module_node.3,
+ man/init_mib.3, man/init_mib_internals.3,
+ man/mib2c.1.def, man/mib_api.3.def, man/netsnmp_agent.3
+, man/netsnmp_bulk_to_next.3, man/netsnmp_debug.3,
+ man/netsnmp_example_scalar_int.3, man/netsnmp_handler.3
+, man/netsnmp_instance.3,
+ man/netsnmp_mib_handler_methods.3, man/netsnmp_multiplexer.3
+, man/netsnmp_old_api.3, man/netsnmp_read_only.3,
+ man/netsnmp_serialize.3, man/netsnmp_table.3,
+ man/netsnmp_table_array.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_iterator.3
+, man/netsnmp_todo.3, man/print_description.3,
+ man/print_mib.3, man/print_objid.3, man/print_value.3
+, man/print_variable.3, man/read_all_mibs.3,
+ man/read_config.3.def, man/read_mib.3,
+ man/read_module.3, man/read_module_node.3,
+ man/read_objid.3, man/shutdown_mib.3,
+ man/snmp.conf.5.def, man/snmp_agent_api.3.def,
+ man/snmp_alarm.3.def, man/snmp_api.3.def,
+ man/snmp_api_errstring.3, man/snmp_close.3,
+ man/snmp_config.5.def, man/snmp_error.3,
+ man/snmp_free_pdu.3, man/snmp_open.3, man/snmp_perror.3
+, man/snmp_read.3, man/snmp_select_info.3,
+ man/snmp_send.3, man/snmp_sess_api.3.def,
+ man/snmp_sess_async_send.3, man/snmp_sess_close.3,
+ man/snmp_sess_error.3, man/snmp_sess_init.3,
+ man/snmp_sess_open.3, man/snmp_sess_perror.3,
+ man/snmp_sess_read.3, man/snmp_sess_select_info.3,
+ man/snmp_sess_send.3, man/snmp_sess_session.3,
+ man/snmp_sess_timeout.3, man/snmp_set_mib_warnings.3,
+ man/snmp_set_save_descriptions.3, man/snmp_timeout.3,
+ man/snmp_trap_api.3.def, man/snmpbulkget.1.def,
+ man/snmpbulkwalk.1.def, man/snmpcmd.1.def,
+ man/snmpconf.1.def, man/snmpd.1.def,
+ man/snmpd.conf.5.def, man/snmpdelta.1, man/snmpdf.1
+, man/snmpget.1.def, man/snmpgetnext.1.def,
+ man/snmpinform.1, man/snmpnetstat.1, man/snmpset.1.def
+, man/snmpstatus.1.def, man/snmptable.1.def,
+ man/snmptest.1.def, man/snmptranslate.1.def,
+ man/snmptrap.1.def, man/snmptrapd.8.def,
+ man/snmptrapd.conf.5.def, man/snmpusm.1.def,
+ man/snmpwalk.1.def, man/variables.5.def,
+ mibs/.cvsignore, mibs/AGENTX-MIB.txt,
+ mibs/DISMAN-EVENT-MIB.txt, mibs/DISMAN-SCHEDULE-MIB.txt
+, mibs/DISMAN-SCRIPT-MIB.txt, mibs/EtherLike-MIB.txt
+, mibs/HCNUM-TC.txt, mibs/HOST-RESOURCES-MIB.txt,
+ mibs/HOST-RESOURCES-TYPES.txt,
+ mibs/IANA-ADDRESS-FAMILY-NUMBERS-MIB.txt,
+ mibs/IANA-LANGUAGE-MIB.txt, mibs/IANAifType-MIB.txt,
+ mibs/IF-INVERTED-STACK-MIB.txt, mibs/IF-MIB.txt,
+ mibs/INET-ADDRESS-MIB.txt, mibs/IP-FORWARD-MIB.txt,
+ mibs/IP-MIB.txt, mibs/IPV6-ICMP-MIB.txt,
+ mibs/IPV6-MIB.txt, mibs/IPV6-TC.txt,
+ mibs/IPV6-TCP-MIB.txt, mibs/IPV6-UDP-MIB.txt,
+ mibs/LM-SENSORS-MIB.txt, mibs/MTA-MIB.txt,
+ mibs/Makefile.in, mibs/Makefile.mib,
+ mibs/NET-SNMP-AGENT-MIB.txt, mibs/NET-SNMP-EXAMPLES-MIB.txt
+, mibs/NET-SNMP-MIB.txt, mibs/NET-SNMP-MONITOR-MIB.txt
+, mibs/NET-SNMP-SYSTEM-MIB.txt, mibs/NET-SNMP-TC.txt
+, mibs/NETWORK-SERVICES-MIB.txt,
+ mibs/NOTIFICATION-LOG-MIB.txt, mibs/README.mibs,
+ mibs/RFC-1215.txt, mibs/RFC1155-SMI.txt,
+ mibs/RFC1213-MIB.txt, mibs/RMON-MIB.txt,
+ mibs/SMUX-MIB.txt, mibs/SNMP-COMMUNITY-MIB.txt,
+ mibs/SNMP-FRAMEWORK-MIB.txt, mibs/SNMP-MPD-MIB.txt,
+ mibs/SNMP-NOTIFICATION-MIB.txt, mibs/SNMP-PROXY-MIB.txt
+, mibs/SNMP-TARGET-MIB.txt,
+ mibs/SNMP-USER-BASED-SM-MIB.txt,
+ mibs/SNMP-VIEW-BASED-ACM-MIB.txt, mibs/SNMPv2-CONF.txt,
+ mibs/SNMPv2-MIB.txt, mibs/SNMPv2-SMI.txt,
+ mibs/SNMPv2-TC.txt, mibs/SNMPv2-TM.txt,
+ mibs/TCP-MIB.txt, mibs/TUNNEL-MIB.txt,
+ mibs/UCD-DEMO-MIB.inc, mibs/UCD-DEMO-MIB.txt,
+ mibs/UCD-DISKIO-MIB.inc, mibs/UCD-DISKIO-MIB.txt,
+ mibs/UCD-DLMOD-MIB.inc, mibs/UCD-DLMOD-MIB.txt,
+ mibs/UCD-IPFILTER-MIB.inc, mibs/UCD-IPFILTER-MIB.txt,
+ mibs/UCD-IPFWACC-MIB.inc, mibs/UCD-IPFWACC-MIB.txt,
+ mibs/UCD-SNMP-MIB-OLD.txt, mibs/UCD-SNMP-MIB.inc,
+ mibs/UCD-SNMP-MIB.txt, mibs/UDP-MIB.txt, mibs/ianalist
+, mibs/mibfetch, mibs/rfclist, mibs/rfcmibs.diff
+, mibs/smistrip, ov/.cvsignore, ov/Makefile.in
+, ov/README, ov/UCD-Computer, ov/UCD-fields,
+ ov/oid_to_sym.in, ov/oid_to_type.in,
+ ov/bitmaps/UCD.20.m, ov/bitmaps/UCD.20.p,
+ ov/bitmaps/UCD.26.m, ov/bitmaps/UCD.26.p,
+ ov/bitmaps/UCD.32.m, ov/bitmaps/UCD.32.p,
+ ov/bitmaps/UCD.38.m, ov/bitmaps/UCD.38.p,
+ ov/bitmaps/UCD.44.m, ov/bitmaps/UCD.44.p,
+ ov/bitmaps/UCD.50.m, ov/bitmaps/UCD.50.p,
+ ov/bitmaps/UCD.fields, perl/.cvsignore,
+ perl/ASN/.cvsignore, perl/ASN/ASN.pm, perl/ASN/ASN.xs
+, perl/ASN/Changes, perl/ASN/MANIFEST,
+ perl/ASN/Makefile.PL, perl/ASN/test.pl,
+ perl/AnyData_SNMP/.cvsignore, perl/AnyData_SNMP/Changes
+, perl/AnyData_SNMP/DBD_AnyData.patch,
+ perl/AnyData_SNMP/Format.pm, perl/AnyData_SNMP/INSTALL,
+ perl/AnyData_SNMP/MANIFEST, perl/AnyData_SNMP/Makefile.PL
+, perl/AnyData_SNMP/README, perl/AnyData_SNMP/Storage.pm
+, perl/AnyData_SNMP/snmpsh, perl/SNMP/.cvsignore,
+ perl/SNMP/BUG, perl/SNMP/MANIFEST,
+ perl/SNMP/MANIFEST.SKIP, perl/SNMP/Makefile.PL,
+ perl/SNMP/README, perl/SNMP/SNMP.pm, perl/SNMP/SNMP.xs
+, perl/SNMP/TODO, perl/SNMP/perlsnmp.h,
+ perl/SNMP/typemap, perl/SNMP/examples/async1.pl,
+ perl/SNMP/examples/async2.pl, perl/SNMP/examples/bulkwalk.pl
+, perl/SNMP/examples/ipforward.pl,
+ perl/SNMP/examples/mibtree.pl, perl/SNMP/examples/mibwalk.pl
+, perl/SNMP/examples/pingmib.pl,
+ perl/SNMP/examples/tablewalk.pl,
+ perl/SNMP/examples/testleak.pl,
+ perl/SNMP/examples/trap-example.pl, perl/SNMP/hints/irix.pl
+, perl/SNMP/hints/solaris.pl, perl/SNMP/t/.cvsignore
+, perl/SNMP/t/README, perl/SNMP/t/async.t,
+ perl/SNMP/t/bulkwalk.t, perl/SNMP/t/get.t,
+ perl/SNMP/t/getnext.t, perl/SNMP/t/mib.t,
+ perl/SNMP/t/mib.txt, perl/SNMP/t/mibload.t,
+ perl/SNMP/t/notify.t, perl/SNMP/t/session.t,
+ perl/SNMP/t/set.t, perl/SNMP/t/snmptest.conf,
+ perl/SNMP/t/startagent.pl, perl/agent/.cvsignore,
+ perl/agent/Changes, perl/agent/MANIFEST,
+ perl/agent/Makefile.PL, perl/agent/agent.pm,
+ perl/agent/agent.xs, perl/agent/test.pl,
+ perl/agent/typemap, perl/agent/default_store/.cvsignore
+, perl/agent/default_store/Makefile.PL,
+ perl/agent/default_store/default_store.pm,
+ perl/agent/default_store/default_store.xs,
+ perl/default_store/.cvsignore, perl/default_store/Changes
+, perl/default_store/MANIFEST,
+ perl/default_store/Makefile.PL,
+ perl/default_store/default_store.pm,
+ perl/default_store/default_store.xs,
+ perl/default_store/test.pl, perl/default_store/typemap,
+ perl/manager/.cvsignore, perl/manager/INSTALL,
+ perl/manager/Makefile.PL, perl/manager/displaytable.pm,
+ perl/manager/getValues.pm, perl/manager/green.gif,
+ perl/manager/manager.pm, perl/manager/red.gif,
+ perl/manager/setupauth, perl/manager/setupdb,
+ perl/manager/setupuser, perl/manager/snmptosql,
+ snmplib/.cvsignore, snmplib/MSG00001.bin,
+ snmplib/Makefile.depend, snmplib/Makefile.in,
+ snmplib/asn1.c, snmplib/callback.c,
+ snmplib/cmu_compat.c, snmplib/data_list.c,
+ snmplib/default_store.c, snmplib/getopt.c,
+ snmplib/int64.c, snmplib/keytools.c, snmplib/lcd_time.c
+, snmplib/md5.c, snmplib/mib.c,
+ snmplib/mt_support.c, snmplib/oid_array.c,
+ snmplib/oid_stash.c, snmplib/parse.c,
+ snmplib/read_config.c, snmplib/scapi.c,
+ snmplib/snmp-tc.c, snmplib/snmp.c,
+ snmplib/snmpAAL5PVCDomain.c, snmplib/snmpCallbackDomain.c
+, snmplib/snmpIPXDomain.c, snmplib/snmpTCPDomain.c
+, snmplib/snmpTCPIPv6Domain.c, snmplib/snmpUDPDomain.c
+, snmplib/snmpUDPIPv6Domain.c, snmplib/snmpUnixDomain.c
+, snmplib/snmp_alarm.c, snmplib/snmp_api.c,
+ snmplib/snmp_auth.c, snmplib/snmp_client.c,
+ snmplib/snmp_debug.c, snmplib/snmp_enum.c,
+ snmplib/snmp_logging.c, snmplib/snmp_parse_args.c,
+ snmplib/snmp_secmod.c, snmplib/snmp_transport.c,
+ snmplib/snmp_version.c, snmplib/snmpksm.c,
+ snmplib/snmpusm.c, snmplib/snmpv3.c, snmplib/snprintf.c
+, snmplib/strtol.c, snmplib/strtoul.c,
+ snmplib/system.c, snmplib/tools.c,
+ snmplib/ucd-snmp-includes.h, snmplib/ucd_compat.c,
+ snmplib/vacm.c, snmplib/winservice.c,
+ snmplib/winservice.mc, snmplib/winservice.rc,
+ testing/.cvsignore, testing/Makefile.in, testing/README
+, testing/RUNTESTS, testing/T.c, testing/T2.sh
+, testing/TESTCONF.sh, testing/data.keychange-md5,
+ testing/data.keychange-sha1, testing/data.keychange-sha1-des
+, testing/data.kul-md5, testing/data.kul-sha1,
+ testing/etimetest.c, testing/eval_oneprogram.sh,
+ testing/eval_onescript.sh, testing/eval_suite.sh,
+ testing/eval_testlist, testing/eval_tools.sh,
+ testing/keymanagetest.c, testing/misctest.c,
+ testing/scapitest.c, testing/test_keychange.sh,
+ testing/test_kul.sh, testing/tests/Sv1config,
+ testing/tests/Sv2cconfig, testing/tests/Sv3DESconfig,
+ testing/tests/Sv3SHADESconfig, testing/tests/Sv3config,
+ testing/tests/Sv3configsha, testing/tests/Svanyconfig,
+ testing/tests/T001snmpv1get, testing/tests/T002snmpv1getnext
+, testing/tests/T003snmpv1getfail,
+ testing/tests/T004snmpv1nosuch, testing/tests/T014snmpv2cget
+, testing/tests/T015snmpv2cgetnext,
+ testing/tests/T016snmpv2cgetfail,
+ testing/tests/T017snmpv2ctov1getfail,
+ testing/tests/T018snmpv1tov2cgetfail,
+ testing/tests/T019snmpv2cnosuch, testing/tests/T020snmpv3get
+, testing/tests/T021snmpv3getnext,
+ testing/tests/T022snmpv3getMD5,
+ testing/tests/T023snmpv3getMD5DES,
+ testing/tests/T024snmpv3getSHA1,
+ testing/tests/T025snmpv3getSHADES,
+ testing/tests/T028snmpv3getfail,
+ testing/tests/T030snmpv3usercreation,
+ testing/tests/T049snmpv3inform, testing/tests/T050snmpv3trap
+, testing/tests/T051snmpv2ctrap,
+ testing/tests/T052snmpv2cinform,
+ testing/tests/T053agentv1trap, testing/tests/T054agentv2ctrap
+, testing/tests/T055agentv1mintrap,
+ testing/tests/T056agentv2cmintrap,
+ testing/tests/T058agentauthtrap, testing/tests/T100agenthup
+, testing/tests/T110agentxget,
+ testing/tests/T111agentxset, testing/tests/T112agentxsetfail
+, testing/tests/T113agentxtrap,
+ testing/tests/T120proxyget, testing/tests/T121proxyset,
+ testing/tests/T122proxysetfail, win32/.cvsignore,
+ win32/config.h, win32/config.h.borland,
+ win32/mib_module_config.h, win32/mib_module_dot_conf.h,
+ win32/mib_module_includes.h, win32/mib_module_inits.h,
+ win32/mib_module_shutdown.h, win32/snmpsm_init.h,
+ win32/win32.dsw, win32/win32.opt, win32/bin/.cvsignore
+, win32/encode_keychange/.cvsignore,
+ win32/encode_keychange/encode_keychange.dsp,
+ win32/lib/.cvsignore, win32/libagent/.cvsignore,
+ win32/libagent/libagent.def, win32/libagent/libagent.dsp
+, win32/libhelpers/libhelpers.dsp,
+ win32/libsnmp/.cvsignore, win32/libsnmp/libsnmp.dsp,
+ win32/libsnmp_dll/.cvsignore, win32/libsnmp_dll/libsnmp.def
+, win32/libsnmp_dll/libsnmp_dll.dsp,
+ win32/libucdmibs/.cvsignore, win32/libucdmibs/libucdmibs.def
+, win32/net-snmp/net-snmp-config.h,
+ win32/net-snmp/agent/mib_module_config.h,
+ win32/net-snmp/library/snmpv3-security-includes.h,
+ win32/netsnmpmibs/netsnmpmibs.dsp,
+ win32/snmpbulkget/.cvsignore,
+ win32/snmpbulkget/snmpbulkget.dsp,
+ win32/snmpbulkwalk/.cvsignore,
+ win32/snmpbulkwalk/snmpbulkwalk.dsp, win32/snmpd/.cvsignore
+, win32/snmpd/snmpd.dsp, win32/snmpdelta/.cvsignore
+, win32/snmpdelta/snmpdelta.dsp, win32/snmpdf/.cvsignore
+, win32/snmpdf/snmpdf.dsp, win32/snmpget/.cvsignore
+, win32/snmpget/snmpget.dsp,
+ win32/snmpgetnext/.cvsignore,
+ win32/snmpgetnext/snmpgetnext.dsp,
+ win32/snmpnetstat/.cvsignore,
+ win32/snmpnetstat/snmpnetstat.dsp, win32/snmpset/.cvsignore
+, win32/snmpset/snmpset.dsp, win32/snmpstatus/.cvsignore
+, win32/snmpstatus/snmpstatus.dsp,
+ win32/snmptable/.cvsignore, win32/snmptable/snmptable.dsp
+, win32/snmptest/.cvsignore, win32/snmptest/snmptest.dsp
+, win32/snmptranslate/.cvsignore,
+ win32/snmptranslate/snmptranslate.dsp,
+ win32/snmptrap/.cvsignore, win32/snmptrap/snmptrap.dsp,
+ win32/snmptrapd/.cvsignore, win32/snmptrapd/snmptrapd.dsp
+, win32/snmpusm/.cvsignore, win32/snmpusm/snmpusm.dsp
+, win32/snmpvacm/.cvsignore, win32/snmpvacm/snmpvacm.dsp
+, win32/snmpwalk/.cvsignore, win32/snmpwalk/snmpwalk.dsp
+:
+
+ cvs file version number change
+
+2002-04-20 00:20 hardaker
+
+ * ChangeLog:
+
+ changelog
+
+2002-04-20 00:07 hardaker
+
+ * agent/agent_handler.c, agent/agent_index.c,
+ agent/agent_read_config.c, agent/agent_registry.c,
+ agent/agent_trap.c, agent/auto_nlist.c,
+ agent/autonlist.h, agent/kernel.c, agent/kernel.h
+, agent/m2m.h, agent/mib_modules.c,
+ agent/snmp_agent.c, agent/snmp_perl.c,
+ agent/snmp_vars.c, agent/snmpd.c, agent/snmpd.h
+, agent/helpers/all_helpers.c,
+ agent/helpers/bulk_to_next.c, agent/helpers/debug_handler.c
+, agent/helpers/instance.c,
+ agent/helpers/multiplexer.c, agent/helpers/null.c,
+ agent/helpers/old_api.c, agent/helpers/read_only.c,
+ agent/helpers/serialize.c, agent/helpers/table.c,
+ agent/helpers/table_array.c, agent/helpers/table_data.c
+, agent/helpers/table_dataset.c,
+ agent/helpers/table_iterator.c, agent/mibgroup/Rmon.h,
+ agent/mibgroup/agentx.h, agent/mibgroup/header_complex.c
+, agent/mibgroup/header_complex.h,
+ agent/mibgroup/host.h, agent/mibgroup/host_res.h,
+ agent/mibgroup/kernel_sunos5.c,
+ agent/mibgroup/kernel_sunos5.h, agent/mibgroup/mibII.h
+, agent/mibgroup/mibdefs.h, agent/mibgroup/mibincl.h
+, agent/mibgroup/smux_gated.h,
+ agent/mibgroup/snmpv3mibs.h, agent/mibgroup/struct.h,
+ agent/mibgroup/testhandler.c, agent/mibgroup/testhandler.h
+, agent/mibgroup/ucd_snmp.h,
+ agent/mibgroup/util_funcs.c, agent/mibgroup/util_funcs.h
+, agent/mibgroup/Rmon/agutil.c,
+ agent/mibgroup/Rmon/agutil.h,
+ agent/mibgroup/Rmon/agutil_api.h, agent/mibgroup/Rmon/alarm.c
+, agent/mibgroup/Rmon/alarm.h,
+ agent/mibgroup/Rmon/event.c, agent/mibgroup/Rmon/event.h
+, agent/mibgroup/Rmon/history.c,
+ agent/mibgroup/Rmon/history.h, agent/mibgroup/Rmon/row_api.h
+, agent/mibgroup/Rmon/rows.c, agent/mibgroup/Rmon/rows.h
+, agent/mibgroup/Rmon/statistics.c,
+ agent/mibgroup/Rmon/statistics.h,
+ agent/mibgroup/agent/nsModuleTable.c,
+ agent/mibgroup/agent/nsModuleTable.h,
+ agent/mibgroup/agent/nsTransactionTable.c,
+ agent/mibgroup/agent/nsTransactionTable.h,
+ agent/mibgroup/agentx/agentx_config.c,
+ agent/mibgroup/agentx/agentx_config.h,
+ agent/mibgroup/agentx/client.c,
+ agent/mibgroup/agentx/client.h,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master.h,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/master_admin.h,
+ agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/agentx/protocol.h,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/agentx/subagent.h,
+ agent/mibgroup/disman/event-mib.h,
+ agent/mibgroup/disman/mteObjectsTable.c,
+ agent/mibgroup/disman/mteObjectsTable.h,
+ agent/mibgroup/disman/mteTriggerBooleanTable.c,
+ agent/mibgroup/disman/mteTriggerBooleanTable.h,
+ agent/mibgroup/disman/mteTriggerDeltaTable.c,
+ agent/mibgroup/disman/mteTriggerDeltaTable.h,
+ agent/mibgroup/disman/mteTriggerExistenceTable.c,
+ agent/mibgroup/disman/mteTriggerExistenceTable.h,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/disman/mteTriggerTable.h,
+ agent/mibgroup/disman/mteTriggerThresholdTable.c,
+ agent/mibgroup/disman/mteTriggerThresholdTable.h,
+ agent/mibgroup/examples/data_set.c,
+ agent/mibgroup/examples/data_set.h,
+ agent/mibgroup/examples/delayed_instance.c,
+ agent/mibgroup/examples/delayed_instance.h,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/examples/example.h,
+ agent/mibgroup/examples/scalar_int.c,
+ agent/mibgroup/examples/scalar_int.h,
+ agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/examples/ucdDemoPublic.h,
+ agent/mibgroup/host/hr_device.c,
+ agent/mibgroup/host/hr_device.h,
+ agent/mibgroup/host/hr_disk.c, agent/mibgroup/host/hr_disk.h
+, agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_filesys.h,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_network.h,
+ agent/mibgroup/host/hr_other.c,
+ agent/mibgroup/host/hr_other.h,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_partition.h,
+ agent/mibgroup/host/hr_print.c,
+ agent/mibgroup/host/hr_print.h, agent/mibgroup/host/hr_proc.c
+, agent/mibgroup/host/hr_proc.h,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_storage.h,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swinst.h,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_swrun.h,
+ agent/mibgroup/host/hr_system.c,
+ agent/mibgroup/host/hr_system.h, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/at.h,
+ agent/mibgroup/mibII/icmp.c, agent/mibgroup/mibII/icmp.h
+, agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/interfaces.h, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/ip.h,
+ agent/mibgroup/mibII/ipAddr.c, agent/mibgroup/mibII/ipAddr.h
+, agent/mibgroup/mibII/ipv6.c,
+ agent/mibgroup/mibII/ipv6.h,
+ agent/mibgroup/mibII/kernel_linux.c,
+ agent/mibgroup/mibII/kernel_linux.h,
+ agent/mibgroup/mibII/mta_sendmail.c,
+ agent/mibgroup/mibII/mta_sendmail.h,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/route_write.h,
+ agent/mibgroup/mibII/setSerialNo.c,
+ agent/mibgroup/mibII/setSerialNo.h,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/snmp_mib.h,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/sysORTable.h,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/system_mib.h, agent/mibgroup/mibII/tcp.c
+, agent/mibgroup/mibII/tcp.h,
+ agent/mibgroup/mibII/tcpTable.c,
+ agent/mibgroup/mibII/tcpTable.h, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/mibII/udp.h,
+ agent/mibgroup/mibII/udpTable.c,
+ agent/mibgroup/mibII/udpTable.h,
+ agent/mibgroup/mibII/vacm_context.c,
+ agent/mibgroup/mibII/vacm_context.h,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/vacm_vars.h,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/mibII/var_route.h, agent/mibgroup/misc/dlmod.c
+, agent/mibgroup/misc/dlmod.h,
+ agent/mibgroup/misc/ipfwacc.c, agent/mibgroup/misc/ipfwacc.h
+, agent/mibgroup/notification/snmpNotifyFilterProfileTable.c
+, agent/mibgroup/notification/snmpNotifyFilterProfileTable.h
+, agent/mibgroup/notification/snmpNotifyFilterTable.c,
+ agent/mibgroup/notification/snmpNotifyFilterTable.h,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/notification/snmpNotifyTable.h,
+ agent/mibgroup/smux/smux.c, agent/mibgroup/smux/smux.h
+, agent/mibgroup/smux/snmp_bgp.c,
+ agent/mibgroup/smux/snmp_bgp.h,
+ agent/mibgroup/smux/snmp_ospf.c,
+ agent/mibgroup/smux/snmp_ospf.h,
+ agent/mibgroup/smux/snmp_rip2.c,
+ agent/mibgroup/smux/snmp_rip2.h,
+ agent/mibgroup/snmpv3/snmpEngine.c,
+ agent/mibgroup/snmpv3/snmpEngine.h,
+ agent/mibgroup/snmpv3/snmpMPDStats.c,
+ agent/mibgroup/snmpv3/snmpMPDStats.h,
+ agent/mibgroup/snmpv3/usmStats.c,
+ agent/mibgroup/snmpv3/usmStats.h,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/snmpv3/usmUser.h,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.h,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.h,
+ agent/mibgroup/target/target.c,
+ agent/mibgroup/target/target.h,
+ agent/mibgroup/target/target_counters.c,
+ agent/mibgroup/target/target_counters.h,
+ agent/mibgroup/tunnel/tunnel.c,
+ agent/mibgroup/tunnel/tunnel.h,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/disk.h,
+ agent/mibgroup/ucd-snmp/diskio.c,
+ agent/mibgroup/ucd-snmp/diskio.h,
+ agent/mibgroup/ucd-snmp/dlmod.c,
+ agent/mibgroup/ucd-snmp/dlmod.h,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/errormib.h,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/extensible.h,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/file.h,
+ agent/mibgroup/ucd-snmp/hpux.c,
+ agent/mibgroup/ucd-snmp/hpux.h,
+ agent/mibgroup/ucd-snmp/lmSensors.c,
+ agent/mibgroup/ucd-snmp/lmSensors.h,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/loadave.h,
+ agent/mibgroup/ucd-snmp/logmatch.c,
+ agent/mibgroup/ucd-snmp/logmatch.h,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory.h,
+ agent/mibgroup/ucd-snmp/memory_dynix.c,
+ agent/mibgroup/ucd-snmp/memory_dynix.h,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.h,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.h,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.h,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass.h,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/pass_persist.h,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/proc.h,
+ agent/mibgroup/ucd-snmp/proxy.c,
+ agent/mibgroup/ucd-snmp/proxy.h,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/versioninfo.h,
+ agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/ucd-snmp/vmstat.h,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.h,
+ agent/mibgroup/ucd-snmp/vmstat_dynix.c,
+ agent/mibgroup/ucd-snmp/vmstat_dynix.h,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.h,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.h,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.h,
+ agent/mibgroup/utilities/override.c,
+ agent/mibgroup/utilities/override.h, apps/encode_keychange.c
+, apps/notification_log.c, apps/notification_log.h
+, apps/snmpbulkget.c, apps/snmpbulkwalk.c,
+ apps/snmpdelta.c, apps/snmpdf.c, apps/snmpget.c
+, apps/snmpgetnext.c, apps/snmpset.c,
+ apps/snmpstatus.c, apps/snmptable.c, apps/snmptest.c
+, apps/snmptranslate.c, apps/snmptrap.c,
+ apps/snmptrapd.c, apps/snmptrapd_handlers.c,
+ apps/snmptrapd_handlers.h, apps/snmptrapd_log.c,
+ apps/snmptrapd_log.h, apps/snmpusm.c, apps/snmpvacm.c
+, apps/snmpwalk.c, apps/snmpnetstat/if.c,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/inet6.c,
+ apps/snmpnetstat/main.c, apps/snmpnetstat/main.h,
+ apps/snmpnetstat/netstat.h, apps/snmpnetstat/route.c,
+ apps/snmpnetstat/winstub.c, apps/snmpnetstat/winstub.h
+, include/net-snmp/config_api.h,
+ include/net-snmp/definitions.h, include/net-snmp/mib_api.h
+, include/net-snmp/net-snmp-includes.h,
+ include/net-snmp/output_api.h, include/net-snmp/pdu_api.h
+, include/net-snmp/session_api.h,
+ include/net-snmp/snmpv3_api.h, include/net-snmp/types.h
+, include/net-snmp/utilities.h,
+ include/net-snmp/varbind_api.h, include/net-snmp/version.h
+, include/net-snmp/agent/agent_callbacks.h,
+ include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/agent_index.h,
+ include/net-snmp/agent/agent_read_config.h,
+ include/net-snmp/agent/agent_registry.h,
+ include/net-snmp/agent/agent_trap.h,
+ include/net-snmp/agent/all_helpers.h,
+ include/net-snmp/agent/auto_nlist.h,
+ include/net-snmp/agent/bulk_to_next.h,
+ include/net-snmp/agent/debug_handler.h,
+ include/net-snmp/agent/ds_agent.h,
+ include/net-snmp/agent/instance.h,
+ include/net-snmp/agent/mib_modules.h,
+ include/net-snmp/agent/multiplexer.h,
+ include/net-snmp/agent/net-snmp-agent-includes.h,
+ include/net-snmp/agent/null.h,
+ include/net-snmp/agent/old_api.h,
+ include/net-snmp/agent/read_only.h,
+ include/net-snmp/agent/serialize.h,
+ include/net-snmp/agent/set_helper.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/snmp_vars.h,
+ include/net-snmp/agent/table.h,
+ include/net-snmp/agent/table_array.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/agent/table_iterator.h,
+ include/net-snmp/agent/var_struct.h,
+ include/net-snmp/library/asn1.h,
+ include/net-snmp/library/callback.h,
+ include/net-snmp/library/cmu_compat.h,
+ include/net-snmp/library/data_list.h,
+ include/net-snmp/library/default_store.h,
+ include/net-snmp/library/getopt.h,
+ include/net-snmp/library/int64.h,
+ include/net-snmp/library/keytools.h,
+ include/net-snmp/library/lcd_time.h,
+ include/net-snmp/library/libsnmp.h,
+ include/net-snmp/library/md5.h,
+ include/net-snmp/library/mib.h,
+ include/net-snmp/library/mt_support.h,
+ include/net-snmp/library/oid_array.h,
+ include/net-snmp/library/oid_stash.h,
+ include/net-snmp/library/parse.h,
+ include/net-snmp/library/read_config.h,
+ include/net-snmp/library/scapi.h,
+ include/net-snmp/library/snmp-tc.h,
+ include/net-snmp/library/snmp.h,
+ include/net-snmp/library/snmpAAL5PVCDomain.h,
+ include/net-snmp/library/snmpCallbackDomain.h,
+ include/net-snmp/library/snmpIPXDomain.h,
+ include/net-snmp/library/snmpTCPDomain.h,
+ include/net-snmp/library/snmpTCPIPv6Domain.h,
+ include/net-snmp/library/snmpUDPDomain.h,
+ include/net-snmp/library/snmpUDPIPv6Domain.h,
+ include/net-snmp/library/snmpUnixDomain.h,
+ include/net-snmp/library/snmp_alarm.h,
+ include/net-snmp/library/snmp_api.h,
+ include/net-snmp/library/snmp_client.h,
+ include/net-snmp/library/snmp_debug.h,
+ include/net-snmp/library/snmp_enum.h,
+ include/net-snmp/library/snmp_impl.h,
+ include/net-snmp/library/snmp_locking.h,
+ include/net-snmp/library/snmp_logging.h,
+ include/net-snmp/library/snmp_parse_args.h,
+ include/net-snmp/library/snmp_secmod.h,
+ include/net-snmp/library/snmp_transport.h,
+ include/net-snmp/library/snmpksm.h,
+ include/net-snmp/library/snmpusm.h,
+ include/net-snmp/library/snmpv3.h,
+ include/net-snmp/library/system.h,
+ include/net-snmp/library/tools.h,
+ include/net-snmp/library/transform_oids.h,
+ include/net-snmp/library/ucd_compat.h,
+ include/net-snmp/library/vacm.h,
+ include/net-snmp/library/winservice.h,
+ include/net-snmp/machine/generic.h,
+ include/net-snmp/system/bsd.h,
+ include/net-snmp/system/bsdi3.h,
+ include/net-snmp/system/bsdi4.h,
+ include/net-snmp/system/cygwin.h,
+ include/net-snmp/system/darwin.h,
+ include/net-snmp/system/dynix.h,
+ include/net-snmp/system/freebsd.h,
+ include/net-snmp/system/freebsd2.h,
+ include/net-snmp/system/freebsd3.h,
+ include/net-snmp/system/freebsd4.h,
+ include/net-snmp/system/generic.h,
+ include/net-snmp/system/hpux.h,
+ include/net-snmp/system/irix.h,
+ include/net-snmp/system/linux.h,
+ include/net-snmp/system/mips.h,
+ include/net-snmp/system/netbsd.h,
+ include/net-snmp/system/openbsd.h,
+ include/net-snmp/system/solaris2.6.h,
+ include/net-snmp/system/sunos.h,
+ include/net-snmp/system/svr5.h,
+ include/net-snmp/system/ultrix4.h, include/ucd-snmp/version.h
+, snmplib/asn1.c, snmplib/callback.c,
+ snmplib/cmu_compat.c, snmplib/data_list.c,
+ snmplib/default_store.c, snmplib/getopt.c,
+ snmplib/int64.c, snmplib/keytools.c,
+ snmplib/lcd_time.c, snmplib/md5.c, snmplib/mib.c
+, snmplib/mt_support.c, snmplib/oid_array.c,
+ snmplib/oid_stash.c, snmplib/parse.c,
+ snmplib/read_config.c, snmplib/scapi.c,
+ snmplib/snmp-tc.c, snmplib/snmp.c,
+ snmplib/snmpAAL5PVCDomain.c, snmplib/snmpCallbackDomain.c
+, snmplib/snmpIPXDomain.c, snmplib/snmpTCPDomain.c
+, snmplib/snmpTCPIPv6Domain.c, snmplib/snmpUDPDomain.c
+, snmplib/snmpUDPIPv6Domain.c,
+ snmplib/snmpUnixDomain.c, snmplib/snmp_alarm.c,
+ snmplib/snmp_api.c, snmplib/snmp_auth.c,
+ snmplib/snmp_client.c, snmplib/snmp_debug.c,
+ snmplib/snmp_enum.c, snmplib/snmp_logging.c,
+ snmplib/snmp_parse_args.c, snmplib/snmp_secmod.c,
+ snmplib/snmp_transport.c, snmplib/snmp_version.c,
+ snmplib/snmpksm.c, snmplib/snmpusm.c,
+ snmplib/snmpv3.c, snmplib/snprintf.c, snmplib/strtol.c
+, snmplib/strtoul.c, snmplib/system.c,
+ snmplib/tools.c, snmplib/ucd-snmp-includes.h,
+ snmplib/ucd_compat.c, snmplib/vacm.c,
+ snmplib/winservice.c, testing/T.c, testing/etimetest.c
+, testing/keymanagetest.c, testing/misctest.c,
+ testing/scapitest.c:
+
+ White space, oh glorious white space.
+ How great our though?
+ The code is fine.
+ We agree on functionality easily.
+ What really troubles us?
+ Something we can't see.
+ Something between the code.
+ We bow down to your magnificence,
+ For you are everywhere,
+ Between everything.
+ Pretty nothingness you are.
+
+2002-04-20 00:01 hardaker
+
+ * configure, configure.in:
+
+ turn on ucd compat by default.
+
+2002-04-20 00:00 hardaker
+
+ * NEWS:
+
+ last updates
+
+2002-04-19 23:33 hardaker
+
+ * agent/mibgroup/testdelayed.h:
+
+ remove testdelayed
+
+2002-04-19 23:18 hardaker
+
+ * agent/mibgroup/utilities/: .cvsignore, .cvsignore:
+
+ cvs ignore file
+
+2002-04-19 23:17 hardaker
+
+ * agent/snmp_perl.c:
+
+ don't die if perl doesn't init.
+
+2002-04-19 23:03 hardaker
+
+ * perl/SNMP/: README, README, SNMP.pm:
+
+ change warning.
+
+2002-04-19 22:29 hardaker
+
+ * agent/snmp_agent.c:
+
+ double check that multiple inserts into the delegated chain don't
+ happen (read: they shouldn't anyway, but.....).
+
+2002-04-19 22:29 hardaker
+
+ * CodingStyle:
+
+ typedef update
+
+2002-04-19 22:16 hardaker
+
+ * snmplib/snmpCallbackDomain.c:
+
+ Fix the callback build hook to turn off the expect response flag when
+ not appropriate.
+
+2002-04-19 19:09 rstory
+
+ * include/net-snmp/library/oid_array.h:
+
+ spelling misteak; remove capital letters in function names
+
+2002-04-19 19:08 rstory
+
+ * agent/helpers/table_array.c:
+
+ update for function name changed in oid_array.h
+
+2002-04-19 18:20 hardaker
+
+ * agent/snmp_perl.c:
+
+ make the perlInitFile and disablePerl tokens register as premib such
+ that when passed as a --FLAG it'll actually do the right thing and
+ disable the later "perl" token handlers.
+
+2002-04-19 17:29 hardaker
+
+ * Makefile.in, man/Makefile.in, man/netsnmp_agent.3
+, man/netsnmp_bulk_to_next.3, man/netsnmp_debug.3,
+ man/netsnmp_example_scalar_int.3, man/netsnmp_handler.3
+, man/netsnmp_instance.3,
+ man/netsnmp_mib_handler_methods.3, man/netsnmp_multiplexer.3
+, man/netsnmp_old_api.3, man/netsnmp_read_only.3,
+ man/netsnmp_serialize.3, man/netsnmp_table.3,
+ man/netsnmp_table_array.3, man/netsnmp_table_data.3,
+ man/netsnmp_table_dataset.3, man/netsnmp_table_iterator.3
+, man/netsnmp_todo.3:
+
+ documentation. Can't get enough.
+ - make docs now installs man pages into the man dir, which are then installed.
+
+2002-04-19 17:14 hardaker
+
+ * testing/tests/: T111agentxset, T121proxyset:
+
+ Correct for new STRING prefix.
+
+2002-04-19 17:03 hardaker
+
+ * README:
+
+ Add Katsuhisa ABE
+
+2002-04-19 17:03 hardaker
+
+ * perl/: ASN/ASN.xs, default_store/default_store.xs:
+
+ fix header files for new paths.
+
+2002-04-19 17:00 hardaker
+
+ * agent/snmp_vars.c, agent/mibgroup/mibII/vacm_vars.c
+, include/net-snmp/library/snmpUDPIPv6Domain.h,
+ man/snmpd.conf.5.def, snmplib/snmpUDPIPv6Domain.c:
+
+ Apply patch #532555: ipv6 com2sec support, thanks to Katsuhisa ABE.
+
+2002-04-19 16:19 hardaker
+
+ * agent/agent_trap.c, agent/snmp_agent.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/library/tools.h, snmplib/tools.c:
+
+ fix sysUpTime (and related functions) to handle much larger upTime
+ values (ie, fix signed integer wrapping).
+
+2002-04-19 11:37 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ document embedded perl support.
+
+2002-04-19 11:34 hardaker
+
+ * configure, configure.in, agent/Makefile.in
+, agent/snmp_perl.c, agent/snmp_perl.pl,
+ include/net-snmp/agent/ds_agent.h, perl/agent/Makefile.PL
+:
+
+ Add some new snmpd.conf tokens for controlling perl better.
+ Fix embedded perl support so it actually works.
+
+2002-04-19 11:32 hardaker
+
+ * perl/agent/default_store/: .cvsignore, Makefile.PL,
+ default_store.pm, default_store.xs:
+
+ Added missing agent default_store stuff. (they existed on my machine,
+ I don't know why everyone else was having problems)
+
+2002-04-19 10:30 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ Protect against things that should never ever happen
+
+2002-04-19 03:10 dts12
+
+ * Makefile.in:
+
+ <Sigh> A little learning is a dangerous thing.
+ Apply the rest of the patch from Axel - sorry.
+
+2002-04-19 01:49 dts12
+
+ * Makefile.in, doxygen.conf:
+
+ Handle generating documenation when srcdir != configdir
+ (Patch supplied by Axel Kittenberger)
+
+2002-04-18 17:38 hardaker
+
+ * snmplib/snmpIPXDomain.c:
+
+ fix snmpIPXDomain (again)
+
+2002-04-18 17:31 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ Patch from Vishal Verma: only open subagent connections once at startup
+
+2002-04-18 17:28 hardaker
+
+ * agent/agent_registry.c:
+
+ Patch from Vishal Verma: for down subagent cases, mark registrations as detached
+
+2002-04-18 17:17 hardaker
+
+ * snmplib/snmp_api.c:
+
+ define a maximum packet size we can accept to protect certain error
+ conditions (-1 after conversion is now too large).
+
+2002-04-18 16:28 hardaker
+
+ * acconfig.h:
+
+ change the enterprise OIDs in the proper place (net-snmp-config.h.in
+ is generated from this file).
+
+2002-04-18 13:51 hardaker
+
+ * configure, configure.in, net-snmp-config.in
+:
+
+ - Add two new options to net-snmp-config as requested on the IRC channel.
+ --configure-options
+ --snmpd-module-list
+
+2002-04-18 11:43 rstory
+
+ * mibs/NET-SNMP-AGENT-MIB.txt:
+
+ add missing comma
+
+2002-04-18 07:39 dts12
+
+ * configure, configure.in:
+
+ Calculate the length of supplied enterprise OIDs correctly
+ (and use a more meaningful output message)
+
+ Shame these settings aren't cached for later re-use....
+
+2002-04-18 07:18 dts12
+
+ * agent/snmpd.c:
+
+ Notify on agent reconfiguration.
+
+2002-04-18 07:16 dts12
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ Use the Net-SNMP notifications by default, rather than the ucdavis ones.
+
+2002-04-18 07:08 dts12
+
+ * mibs/NET-SNMP-AGENT-MIB.txt:
+
+ Fix the table-of-contents sequence for the nsModuleTable, add notification
+ definitions for the agent, and define groups for everything.
+
+2002-04-18 02:52 dts12
+
+ * snmplib/mib.c:
+
+ Bring integer and string output formats into line with the other types
+ by printing a type token before the value (unless supressed by 'quick print')
+ Thanks to Erik for the patch
+
+2002-04-18 01:46 dts12
+
+ * FAQ:
+
+ Replace the dlmod 'WHERE' with something more meaningful....
+
+2002-04-17 12:12 hardaker
+
+ * snmplib/snmpIPXDomain.c:
+
+ define the ipxDomain variables
+
+2002-04-17 12:12 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ Error condition tests
+
+2002-04-17 10:10 hardaker
+
+ * agent/agent_registry.c, agent/snmp_agent.c,
+ agent/mibgroup/agentx/master_admin.c,
+ include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/var_struct.h:
+
+ Oh, just a small patch to make it possible to make modules request
+ that all queries to a set of registrations get passed all at once
+ (which apparently is important for, oh, agentx)
+
+2002-04-17 10:09 hardaker
+
+ * agent/mibgroup/agentx/master.c:
+
+ misc non-change clean ups
+
+2002-04-17 10:03 hardaker
+
+ * include/net-snmp/agent/table.h:
+
+ rename structures beginning with _ to ending with _s
+
+2002-04-17 10:02 hardaker
+
+ * include/net-snmp/library/snmp_api.h:
+
+ add a void * pointer for the session creator to use at will (different
+ from the callback magic).
+
+2002-04-17 09:00 dts12
+
+ * configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in:
+
+ Use the Net-SNMP sysOIDs by default, rather than the ucdavis ones.
+
+2002-04-17 08:26 dts12
+
+ * apps/snmpnetstat/Makefile.in:
+
+ Blank continuation lines confuse HP's version of make.
+
+2002-04-17 08:16 dts12
+
+ * agent/Makefile.in:
+
+ Blank continuation lines confuse HP's version of make
+
+2002-04-17 06:56 hardaker
+
+ * agent/mibgroup/agent/nsModuleTable.c,
+ mibs/NET-SNMP-AGENT-MIB.txt:
+
+ move nsModuleTable into Dave's structure.
+
+2002-04-17 06:54 hardaker
+
+ * include/net-snmp/library/: snmpAAL5PVCDomain.h,
+ snmpTCPIPv6Domain.h, snmpUDPIPv6Domain.h:
+
+ fix declarations of Domain objects (const -> extern)
+
+2002-04-17 06:31 hardaker
+
+ * local/snmpconf.dir/: snmp-data/snmpconf-config,
+ snmpd-data/snmpconf-config, snmptrapd-data/snmpconf-config
+:
+
+ snmpconf configuration data
+
+2002-04-17 03:01 dts12
+
+ * configure, configure.in:
+
+ Bring the reported default settings for sysoid & notification OIDs
+ back into line with what we actually use (i.e. the ucdavis OIDs).
+
+ Qn: Do we want to switch to using the net-snmp equivalent sysOIDs?
+ Qn: What about defining net-snmp notifications?
+
+2002-04-17 02:55 dts12
+
+ * configure, configure.in:
+
+ Fix --with-enterprise-sysoid and --with-enterprise-notification-oid,
+ and try to clarify that these are OIDs, while --with-enterprise-oid
+ is actually just the enterprise *number*
+
+ Qn: should we change the name of the configure option to reflect this?
+
+2002-04-16 10:04 hardaker
+
+ * sedscript.in, snmplib/snmp_version.c, FAQ,
+ perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.pre3 )
+
+2002-04-16 10:02 hardaker
+
+ * README:
+
+ delete top disclaimers
+
+2002-04-16 10:02 hardaker
+
+ * NEWS:
+
+ misc updates
+
+2002-04-16 10:01 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ misc bug fixes
+
+2002-04-16 08:19 dts12
+
+ * FAQ:
+
+ Add an entry concerning the 'libcrypto' RPM dependency.
+
+2002-04-16 08:00 hardaker
+
+ * agent/mibgroup/agent/nsModuleTable.c:
+
+ fix memory leak
+
+2002-04-16 07:13 hardaker
+
+ * agent/snmp_agent.c:
+
+ remove a no longer appropriate todo comment
+
+2002-04-16 07:12 hardaker
+
+ * configure:
+
+ I guess I forgot to run autoconf
+
+2002-04-15 08:58 hardaker
+
+ * local/: snmpconf, Makefile.in:
+
+ move snmpconf data directories to different names to avoid confusion
+
+2002-04-15 08:36 hardaker
+
+ * local/snmpconf.dir/: snmp-data/authopts,
+ snmp-data/debugging, snmp-data/mibs, snmp-data/output
+, snmpd-data/acl, snmpd-data/basic_setup,
+ snmpd-data/extending, snmpd-data/monitor,
+ snmpd-data/operation, snmpd-data/system,
+ snmpd-data/trapsinks, snmptrapd-data/formatting,
+ snmptrapd-data/traphandle:
+
+ data file moving
+
+2002-04-12 14:38 hardaker
+
+ * local/snmpconf:
+
+ Massive cleanup effort. It should now respect ordering in the
+ snmpconf configuration files as well.
+
+2002-04-12 13:00 rstory
+
+ * include/net-snmp/agent/agent_registry.h:
+
+ fix for overzealous perl script
+
+2002-04-12 09:47 hardaker
+
+ * Makefile.in, configure, configure.in:
+
+ copy ucd persisent directory to net-snmp (prompts, flags and other fun)
+
+2002-04-12 07:57 hardaker
+
+ * local/Makefile.in:
+
+ install traptoemail
+
+2002-04-12 07:55 hardaker
+
+ * local/trapnotif:
+
+ remove trapnotif
+
+2002-04-12 07:51 hardaker
+
+ * local/: Makefile.in, rsnmp:
+
+ remove rsnmp, which is very very old and out of date
+
+2002-04-12 07:47 hardaker
+
+ * man/: .cvsignore, Makefile.in, mib2c.1.def:
+
+ A manual page for mib2c (help, I'm turning into Dave)
+
+2002-04-12 07:28 hardaker
+
+ * dotgdbinit:
+
+ a gdb initialization file with helpful functions
+
+2002-04-12 02:42 dts12
+
+ * local/Makefile.in:
+
+ Add 'snmpconf' and 'mib2c' to the list of scripts to install.
+
+ I've left 'traptoemail' off this list, since it says it's not intended
+ as a directly user-invoked command, so probably ought not to be installed
+ into a binary directory.
+
+2002-04-12 02:41 dts12
+
+ * local/rsnmp:
+
+ Fix the path of snmpwalk to be something more plausible.
+ (I'm not convinced about the validity of that initial 'rtopmib' OID mind!)
+
+2002-04-12 02:36 dts12
+
+ * local/mib2c.conf:
+
+ Fix typo in reference to 'mib2c.iterate.conf'
+
+2002-04-12 02:33 dts12
+
+ * Makefile.rules, snmplib/Makefile.in:
+
+ Install the main library as 'libsnmp' if configured using UCD compatibility.
+ This should handle the requirements of application compatibility.
+ Agent library compatibility is likely to prove a harder problem
+ (since there are now three libraries, not just two...)
+
+2002-04-11 22:29 hardaker
+
+ * perl/SNMP/t/startagent.pl:
+
+ set SNMPCONFPATH iff [sic] not set
+
+2002-04-11 22:27 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ return from initMib before doing anything.
+
+2002-04-11 22:26 hardaker
+
+ * perl/SNMP/Makefile.PL:
+
+ turn off complier warnings
+
+2002-04-11 22:26 hardaker
+
+ * perl/AnyData_SNMP/snmpsh:
+
+ support "show columns from TABLE"
+
+2002-04-11 22:25 hardaker
+
+ * mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ Add a new demo scalar: the sleeper. (dah dah dah dummmmm)
+
+2002-04-11 22:25 hardaker
+
+ * agent/mibgroup/examples/scalar_int.c:
+
+ indent.
+
+2002-04-11 22:25 hardaker
+
+ * agent/mibgroup/: examples.h, examples/delayed_instance.c
+, examples/delayed_instance.h:
+
+ Add a delayed instance example, showing how to return mib request
+ results later rather than immediately.
+
+2002-04-11 22:24 hardaker
+
+ * agent/mibgroup/testdelayed.c:
+
+ remove legacy example.
+
+2002-04-11 22:23 hardaker
+
+ * agent/snmp_agent.c:
+
+ add comment about possibly fixing inclusive requests in the future.
+
+2002-04-11 17:08 hardaker
+
+ * README.win32:
+
+ change modukes-> modules
+
+2002-04-11 07:23 hardaker
+
+ * snmplib/snmp_logging.c:
+
+ turn off debugging when calling logging callbacks
+
+2002-04-10 12:51 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ fix perl module in many many places. most tests now pass.
+
+2002-04-10 12:50 hardaker
+
+ * perl/SNMP/t/startagent.pl:
+
+ force setting to a "bogus" SNMPCONFPATH.
+
+2002-04-10 12:48 hardaker
+
+ * include/net-snmp/library/mib.h, snmplib/mib.c:
+
+ Exporting functions good. Internalizing bad.
+
+2002-04-10 09:28 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ opps. sigh.
+
+2002-04-10 09:27 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ opps. remove debugging statements.
+
+2002-04-10 09:23 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ - Make the perl module call init_snmp()
+ - this is a fairly major change, is it now will read .conf files.
+ - many people have asked for this.
+ - misc clean ups.
+
+2002-04-10 09:18 dts12
+
+ * Makefile.rules:
+
+ Don't recurse into subdirectories for the consituent subtargets of "make install"
+
+2002-04-10 09:09 hardaker
+
+ * NEWS:
+
+ added a few things, separated perl stuff into it's own section.
+
+2002-04-10 08:46 dts12
+
+ * configure, configure.in:
+
+ Bring the help message for the UCD compatability option into line with
+ what's actually recognised.
+
+2002-04-10 07:52 hardaker
+
+ * Makefile.top:
+
+ change libtool versioning to their recommended method of doing things
+ (which I hate, but is still better than what we were doing, I guess)
+
+2002-04-10 07:10 dts12
+
+ * Makefile.rules:
+
+ Bring use of BUILTSUBDIR within 'installlocalheaders' into line
+ with the preceding comment, and actual usage.
+ (i.e. INSTALLBUILTSUBDIR rather than INCLUDEBUILTSUBDIR)
+
+2002-04-10 05:58 dts12
+
+ * snmplib/Makefile.in:
+
+ Typo in security-include header destination directory variable
+
+2002-04-10 05:55 dts12
+
+ * local/Makefile.in:
+
+ Ensure the destination directory exists before installing mib2c conf files.
+
+2002-04-10 01:55 dts12
+
+ * testing/tests/: T004snmpv1nosuch, T019snmpv2cnosuch:
+
+ Two new tests to check handling of GETing non-existant instances
+
+2002-04-10 01:54 dts12
+
+ * agent/snmp_agent.c:
+
+ A fix for SNMPv1 errors that doesn't end up breaking AgentX error handling.
+
+2002-04-09 10:38 hardaker
+
+ * agent/snmp_agent.c:
+
+ Patch from Dave to fix v1 error results.
+
+2002-04-08 21:08 rstory
+
+ * snmplib/oid_array.c:
+
+ fix incorrect length return value
+
+2002-04-08 18:00 hardaker
+
+ * agent/mibgroup/mibII/: vacm_vars.c, vacm_vars.h:
+
+ don't allow no-configuration access anymore.
+
+2002-04-08 17:59 hardaker
+
+ * include/net-snmp/library/transform_oids.h,
+ snmplib/snmpAAL5PVCDomain.c, snmplib/snmpTCPIPv6Domain.c
+, snmplib/snmpUDPIPv6Domain.c, snmplib/snmpusm.c
+:
+
+ more unconst correctness
+
+2002-04-08 17:31 hardaker
+
+ * include/net-snmp/library/snmp_transport.h:
+
+ size_t externs for exported oids
+
+2002-04-08 17:30 hardaker
+
+ * snmplib/snmp_api.c:
+
+ remove temporary debugging statements that accidentally became permanent.
+
+2002-04-08 17:26 hardaker
+
+ * snmplib/: snmpUDPDomain.c, snmp_transport.c:
+
+ define length size_t's for oid variables.
+
+2002-04-08 16:53 hardaker
+
+ * agent/mibgroup/utilities/override.c:
+
+ support "null" types.
+
+2002-04-08 16:52 hardaker
+
+ * apps/snmptrapd.c:
+
+ initialize notification log mib support before -H usage.
+
+2002-04-08 16:49 hardaker
+
+ * agent/helpers/serialize.c:
+
+ fix a few things and make subhandlers not able to tell there were more requests.
+
+2002-04-08 16:43 hardaker
+
+ * INSTALL:
+
+ A co-worker pointed out that the INSTALL script still said to edit config.h
+
+2002-04-08 15:13 hardaker
+
+ * include/net-snmp/library/snmpTCPDomain.h,
+ include/net-snmp/library/snmpUnixDomain.h,
+ include/net-snmp/library/snmp_transport.h,
+ snmplib/snmpTCPDomain.c, snmplib/snmpUnixDomain.c,
+ snmplib/snmp_transport.c:
+
+ unstatic-ize a few oids that should have been external
+
+2002-04-08 14:23 hardaker
+
+ * snmplib/: snmpAAL5PVCDomain.c, snmpTCPDomain.c,
+ snmpTCPIPv6Domain.c, snmpUDPIPv6Domain.c,
+ snmpUnixDomain.c, snmp_api.c, snmp_transport.c
+, snmpusm.c:
+
+ Change const oid declarations into static ones since shared libraries
+ have a problem with initializing them on linux systems at least.
+
+2002-04-08 11:45 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ minimal documentation for debugging and the injectHandler token
+
+2002-04-05 14:32 hardaker
+
+ * man/: snmptrapd.8.def, snmptrapd.conf.5.def:
+
+ documentation for the NOTIFICATION-LOG-MIB support.
+
+2002-04-05 14:09 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ document context name support in proxy code.
+
+2002-04-05 13:51 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ document the disman event mib support for sending traps via monitored OIDs.
+
+2002-04-05 10:12 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ put trap config into its own section.
+ document the "override" token.
+
+2002-04-05 06:39 hardaker
+
+ * README.snmpv3:
+
+ change default context to an empty string
+
+2002-04-04 15:14 hardaker
+
+ * agent/: agent_registry.c (V4-2-patches.5), agent_registry.c
+:
+
+ deal with fd unregistrations properly.
+
+2002-04-03 09:12 hardaker
+
+ * agent/helpers/table_dataset.c, agent/mibgroup/examples.h
+, agent/mibgroup/testhandler.c,
+ agent/mibgroup/examples/data_set.c,
+ agent/mibgroup/examples/data_set.h,
+ agent/mibgroup/examples/scalar_int.c,
+ include/net-snmp/agent/table_dataset.h,
+ mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ Make an example dataset table to hold and store data in (admittedly
+ useless data from a network management point of view, but it's an example).
+
+2002-04-02 22:12 hardaker
+
+ * man/Makefile.in:
+
+ fix installation from subdir build case.
+
+2002-04-02 21:45 hardaker
+
+ * snmplib/Makefile.in:
+
+ install snmpv3-security-includes from from build dir.
+
+2002-04-02 21:45 hardaker
+
+ * agent/Makefile.in:
+
+ install mib_module_config.h and mib_module_includes.h from build dir.
+
+2002-04-02 21:43 hardaker
+
+ * Makefile.in:
+
+ install net-snmp-config.h from the build dir.
+
+2002-04-02 21:43 hardaker
+
+ * Makefile.rules:
+
+ create some install from built header rules.
+
+2002-04-02 17:27 hardaker
+
+ * local/: Makefile.in, mib2c.conf:
+
+ remove deleted array-auto from .conf install/reference lists
+
+2002-04-02 15:03 hardaker
+
+ * agent/mibgroup/: ucd_snmp.h, ucd-snmp/registry.c,
+ ucd-snmp/registry.h:
+
+ remove the registry module, as it's obsolete due to contexts. Use the nsModuleTable instead
+
+2002-04-02 14:57 hardaker
+
+ * agent/mibgroup/ucd-snmp/disk.c (V4-2-patches.7),
+ agent/mibgroup/ucd-snmp/disk.c,
+ include/net-snmp/system/darwin.h:
+
+ Apply patch #524424 for darwin fixes for ucd-snmp/disk.c
+
+2002-04-02 14:47 hardaker
+
+ * agent/mibgroup/: kernel_sunos5.c (V4-2-patches.8),
+ kernel_sunos5.c:
+
+ apply patch 527573 to fix 64 bit types on solaris
+
+2002-04-02 07:04 hardaker
+
+ * snmplib/snmp_transport.c:
+
+ check char for NULL before setting to:
+
+2002-04-01 22:28 hardaker
+
+ * snmplib/: snmp_api.c (V4-2-patches.9), cmu_compat.c,
+ snmp_api.c:
+
+ Let init_snmp protect itself.
+
+2002-03-29 15:04 rstory
+
+ * local/mib2c.array-user.conf:
+
+ tweaks & updates
+
+2002-03-29 10:40 rstory
+
+ * snmplib/mib.c:
+
+ add comment
+
+2002-03-29 08:36 hardaker
+
+ * local/mib2c.create-dataset.conf:
+
+ add a allow_creation definition.
+
+2002-03-29 08:22 hardaker
+
+ * Makefile.in:
+
+ make net-snmp-config executable after it's built
+
+2002-03-29 08:13 hardaker
+
+ * agent/mibgroup/mibII/: setSerialNo.c, setSerialNo.h:
+
+ opps. forgot to check the setSerial code in
+
+2002-03-28 23:48 hardaker
+
+ * agent/mibgroup/ucd-snmp/: pass.c (V4-2-patches.4), pass.c:
+
+ enable row creation for pass modules. Patch #482005
+
+2002-03-28 23:44 hardaker
+
+ * agent/mibgroup/mibII/: interfaces.c (V4-2-patches.2),
+ interfaces.c:
+
+ patch #517340: freebsd5 support
+
+2002-03-28 23:38 hardaker
+
+ * agent/mibgroup/host/: hr_filesys.c (V4-2-patches.4), hr_filesys.c
+:
+
+ apply freebsd5 patch #517333
+
+2002-03-28 23:32 hardaker
+
+ * agent/mibgroup/: host/hr_system.c, mibII/interfaces.c
+, mibII/ipAddr.c:
+
+ Apply netbsd fix patch #529733
+
+2002-03-28 23:01 hardaker
+
+ * snmplib/: snmp_api.c (V4-2-patches.8), snmp_api.c,
+ snmp_api.c:
+
+ use a static variable for init checking. Bug #536386.
+
+2002-03-28 15:25 dts12
+
+ * man/: default_store.3.top, read_config.3.def,
+ snmp_api.3.def:
+
+ Tweak to use the new include structure.
+
+2002-03-28 15:23 dts12
+
+ * FAQ (V4-2-patches.8), FAQ:
+
+ Add a few new entries (mostly relating to traps)
+
+2002-03-28 14:56 rstory
+
+ * agent/helpers/table_array.c:
+
+ rename/prefix functions; add doxygen documentation
+
+2002-03-28 13:00 rstory
+
+ * doxygen.conf:
+
+ add define for excluding stuff (DOXYGEN_SHOULD_SKIP_THIS)
+
+2002-03-28 12:50 hardaker
+
+ * agent/mibgroup/mibII.h:
+
+ add setSerialNo
+
+2002-03-28 12:47 hardaker
+
+ * snmplib/ucd_compat.c:
+
+ fix a never-seen-but-very-old-bug using the wrong default_store token.
+
+2002-03-28 12:46 hardaker
+
+ * snmplib/snmp_api.c:
+
+ only set the default output style if it's not already set to something.
+
+2002-03-28 12:45 hardaker
+
+ * agent/agent_read_config.c:
+
+ wrapping.
+
+2002-03-28 12:17 hardaker
+
+ * doxygen.conf:
+
+ change version number
+
+2002-03-28 12:08 rstory
+
+ * apps/snmptranslate.c:
+
+ back out change from version 1.65 until better solution can be found;
+ bug #535029
+
+2002-03-28 12:03 rstory
+
+ * agent/agent_registry.c:
+
+ return specific result code for registration failure if available.
+
+2002-03-28 11:57 hardaker
+
+ * agent/: agent_registry.c, mibgroup/agentx/master_admin.c
+:
+
+ perl typo
+
+2002-03-27 15:48 rstory
+
+ * local/mib2c.array-auto.conf:
+
+ delete old, unused conf file
+
+2002-03-27 08:27 hardaker
+
+ * apps/: notification_log.c, notification_log.h,
+ snmptrapd.c:
+
+ add "dontRetainLogs" token to snmptrapd.conf to not enable the
+ notification log mib.
+
+2002-03-27 01:54 dts12
+
+ * configure.in, configure (V4-2-patches.[1,1]), configure,
+ configure.in:
+
+ Use the correct name of the Windows IP Helper API library.
+ (Computers can be soooo picky!)
+
+2002-03-26 23:23 hardaker
+
+ * agent/snmp_agent.c, agent/snmpd.c,
+ agent/helpers/all_helpers.c, agent/helpers/bulk_to_next.c
+, agent/helpers/debug_handler.c,
+ agent/helpers/read_only.c, agent/mibgroup/agentx/master.c
+, include/net-snmp/agent/bulk_to_next.h,
+ include/net-snmp/agent/debug_handler.h,
+ include/net-snmp/agent/read_only.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/var_struct.h:
+
+ - Really fix the "undo failed" problem. IE, not just any old error
+ will cause an undo failed message to get sent back. Only varbinds
+ with an undo failed error code will cause an undo failed result.
+ undo failed results do still supersede all other error codes,
+ however, which is what the original problem was all about. We still
+ have to depend on the modules returning the right error code (but
+ that's their fault if they don't).
+ - misc cleanups and renames
+
+2002-03-26 23:20 hardaker
+
+ * README:
+
+ add Craig Setera
+
+2002-03-26 14:07 rstory
+
+ * TODO:
+
+ add creating src rpm spec file
+
+2002-03-26 08:29 hardaker
+
+ * agent/mibgroup/ucd-snmp/: diskio.c (V4-2-patches.2), diskio.c
+:
+
+ enable diskio on freebsd5. Implements patch 517328 in a different way.
+
+2002-03-26 07:58 hardaker
+
+ * mibs/Makefile.in:
+
+ fix for other-dir builds
+
+2002-03-26 07:57 hardaker
+
+ * agent/agent_registry.c:
+
+ duplicate registration info in split_subtree
+
+2002-03-26 07:43 dts12
+
+ * configure, configure.in (V4-2-patches.[0,0]), configure,
+ configure.in:
+
+ Add /etc/filesystems to list of mount table files (for AIX)
+ Should fix bugs 232588 and (?)517113
+
+2002-03-26 07:39 dts12
+
+ * configure, configure.in (V4-2-patches.[9,9]), configure,
+ configure.in:
+
+ Remove trailing ':' from list of MIB module names in configure output,
+ to avoid confusion (see Bug #491129)
+
+2002-03-26 06:41 dts12
+
+ * configure, configure.in:
+
+ Add '-lhlpapi' to the list of agent libraries, when running on Windows
+ (using Cygwin). Should fix Bug #534409.
+
+2002-03-25 22:33 rstory
+
+ * snmplib/: parse.c (V4-2-patches.3), parse.c:
+
+ fix bug#520478 showMibErrors token is inverted
+
+2002-03-25 15:18 rstory
+
+ * include/net-snmp/version.h:
+
+ remove ^M characters
+
+2002-03-25 14:53 hardaker
+
+ * agent/snmp_agent.c, include/net-snmp/agent/snmp_agent.h
+:
+
+ use emacs to fix perl search and replace errors, of course
+
+2002-03-25 14:47 hardaker
+
+ * agent/agent_registry.c, agent/snmp_agent.c,
+ agent/helpers/old_api.c, agent/helpers/table.c,
+ agent/helpers/table_data.c, agent/helpers/table_dataset.c
+, agent/mibgroup/testhandler.c,
+ agent/mibgroup/agentx/master_admin.c,
+ apps/notification_log.c,
+ include/net-snmp/agent/agent_registry.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/table.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/library/mib.h,
+ local/mib2c.create-dataset.conf, snmplib/mib.c,
+ snmplib/snmp_api.c:
+
+ use perl to search and replace perl search and replace errors, of course
+
+2002-03-25 14:23 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ api changes
+
+2002-03-25 08:43 dts12
+
+ * win32/: win32.opt, libsnmp_dll/libsnmp.def,
+ snmpbulkget/snmpbulkget.dsp, snmpbulkwalk/snmpbulkwalk.dsp
+, snmpd/snmpd.dsp, snmpdelta/snmpdelta.dsp,
+ snmpdf/snmpdf.dsp, snmpget/snmpget.dsp,
+ snmpgetnext/snmpgetnext.dsp, snmpnetstat/snmpnetstat.dsp
+, snmpset/snmpset.dsp, snmpstatus/snmpstatus.dsp
+, snmptable/snmptable.dsp, snmptest/snmptest.dsp
+, snmptranslate/snmptranslate.dsp,
+ snmptrap/snmptrap.dsp, snmptrapd/snmptrapd.dsp,
+ snmpusm/snmpusm.dsp, snmpvacm/snmpvacm.dsp,
+ snmpwalk/snmpwalk.dsp:
+
+ Remove redundant declarations of 'getopt.c' and 'snmp_parse_args.c' in
+ each individual application project. These routines are included within
+ the libraries, so we might as well use those.
+
+2002-03-25 05:53 dts12
+
+ * win32/: mib_module_inits.h, win32.opt,
+ libsnmp_dll/libsnmp.def, libsnmp_dll/libsnmp_dll.dsp,
+ snmpd/snmpd.dsp:
+
+ Gotcha! Everything now builds (more-or-less) cleanly under Visual C++.
+ You still have to use the "Batch Build" mechanism (or else be careful which
+ of libsnmp/libsnmp_dll you build in each of the Debug & Release modes),
+ and you need to build twice in order to get encode_keychange linking.
+ But things *do* finally build.
+
+2002-03-24 05:21 nba
+
+ * snmplib/mib.c:
+
+ Oops - snprint_* cannot realloc
+
+2002-03-23 09:40 hardaker
+
+ * apps/Makefile.in:
+
+ really fix snmpinform installs this time.
+
+2002-03-22 22:32 hardaker
+
+ * apps/notification_log.c:
+
+ final cleanups of notification log support
+
+2002-03-22 22:32 hardaker
+
+ * apps/Makefile.in:
+
+ fix installation of snmpinform
+
+2002-03-22 22:32 hardaker
+
+ * agent/helpers/table_data.c, agent/mibgroup/testhandler.c
+, include/net-snmp/agent/agent_registry.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h:
+
+ Rename stuff. Fix stuff. You know, normal routine.
+
+2002-03-22 22:31 hardaker
+
+ * configure, configure.in:
+
+ fix version file location for non-sourcedir builds
+
+2002-03-22 14:13 hardaker
+
+ * include/net-snmp/library/snmp_api.h:
+
+ forgot to commit a prototype.
+
+2002-03-22 14:12 hardaker
+
+ * agent/agent_handler.c, agent/agent_registry.c,
+ agent/mibgroup/agentx/master_admin.c,
+ include/net-snmp/agent/agent_registry.h:
+
+ register_mib_context2 -> netsnmp_register_mib (and marked as internal)
+
+2002-03-22 14:01 hardaker
+
+ * agent/mibgroup/agentx/: master.c, subagent.c:
+
+ use new error logging api when !root
+
+2002-03-22 14:00 hardaker
+
+ * snmplib/snmp_api.c:
+
+ enable logging session errors to some log level other than ERR.
+
+2002-03-22 13:55 hardaker
+
+ * agent/mibgroup/agentx/: master.c, subagent.c:
+
+ better agentx connection related error messages.
+
+2002-03-22 09:35 dts12
+
+ * win32/: win32.dsw, win32.opt,
+ libhelpers/libhelpers.dsp, libsnmp_dll/libsnmp.def,
+ netsnmpmibs/netsnmpmibs.dsp, snmpd/snmpd.dsp:
+
+ Slowly making progress on 5.0 Windows build.
+ Everything now compiles, though the Release version doesn't link.
+ (complains about assorted unknown routines that are there,
+ staring it in the face. Grrr!!!!)
+
+2002-03-22 08:24 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - do not "tweak" range_subid when dealing with compressed OIDs.
+ Thanks to Craig Setera for pointing out this deviation from RFC
+ 2741.
+
+2002-03-22 07:50 dts12
+
+ * include/net-snmp/library/snmpUDPDomain.h,
+ include/net-snmp/library/snmp_client.h, snmplib/oid_array.c
+, snmplib/snmpTCPDomain.c, snmplib/snmpUDPDomain.c
+, snmplib/snmp_api.c, snmplib/snmp_client.c:
+
+ Various minor inconsistencies (mostly to do with subtle variations in types)
+
+2002-03-22 07:31 rstory
+
+ * snmplib/snmp_parse_args.c:
+
+ fix typo
+
+2002-03-22 07:29 dts12
+
+ * win32/: mib_module_includes.h, mib_module_inits.h,
+ net-snmp/net-snmp-config.h,
+ net-snmp/library/snmpv3-security-includes.h:
+
+ Bring Windows versions of "automatically-generated" header files up to date.
+
+2002-03-22 02:23 jbpn
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - don't use "reg" as a parameter name in kernel_sunos5_cache_age()
+ as /usr/include/inet/common.h says:
+ #define reg register
+ (!) which the compiler then barfs on. Reported as bug #533336 by
+ Anonymous.
+
+2002-03-21 09:24 hardaker
+
+ * include/net-snmp/library/read_config.h,
+ include/net-snmp/library/snmp_api.h, snmplib/read_config.c
+, snmplib/snmp_api.c, snmplib/snmp_parse_args.c
+:
+
+ - snmp_config* -> netsnmp_config (for new functions only)
+ - fix bug where snmp_config() strings were getting parsed twice.
+
+2002-03-21 09:23 hardaker
+
+ * apps/snmptrapd.c:
+
+ wrap agentx stuff in a still unused variable (at this point).
+
+2002-03-21 09:23 hardaker
+
+ * apps/snmptranslate.c:
+
+ remove unused variable.
+
+2002-03-21 09:23 hardaker
+
+ * agent/mibgroup/utilities/override.c:
+
+ fix oid parsing.
+
+2002-03-21 09:22 hardaker
+
+ * agent/mibgroup/: Rmon/alarm.c, Rmon/statistics.c,
+ mibII/at.c:
+
+ change // coments to /* */ comments (bad bad bad)
+
+2002-03-21 06:40 hardaker
+
+ * snmplib/snmp-tc.c:
+
+ change // coments to /* */ comments (bad bad bad)
+
+2002-03-20 20:12 hardaker
+
+ * snmplib/snmp_api.c:
+
+ add a list of registered text enums to ASN_* values.
+ (In probably the wrong place.)
+
+2002-03-20 20:11 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/utilities.h,
+ agent/mibgroup/utilities/override.c,
+ agent/mibgroup/utilities/override.h:
+
+ create a new "override" directive to force an OID to a particular value
+ - not finished. It's designed to do read-write as well, but doesn't.
+
+2002-03-20 20:08 hardaker
+
+ * agent/helpers/instance.c:
+
+ check for inclusive
+
+2002-03-20 11:37 hardaker
+
+ * include/net-snmp/agent/table_dataset.h:
+
+ include new delete/remove breakdown APIs
+
+2002-03-20 11:36 hardaker
+
+ * apps/notification_log.c:
+
+ API change.
+
+2002-03-20 11:36 hardaker
+
+ * agent/helpers/table_dataset.c:
+
+ some "this will change" early row status implementation.
+ - (this will move to a separate handler)
+
+2002-03-20 11:35 hardaker
+
+ * agent/helpers/table_data.c:
+
+ pointer checking against illegal adds (ie, shouldn't happen but check anyway)
+
+2002-03-20 08:42 hardaker
+
+ * local/mib2c.create-dataset.conf:
+
+ Ok, I make mistakes. I admit it. It really should have been a NULL.
+
+2002-03-20 08:37 hardaker
+
+ * local/mib2c.create-dataset.conf:
+
+ add missing comma
+
+2002-03-20 08:36 hardaker
+
+ * agent/helpers/table_data.c,
+ include/net-snmp/agent/table_data.h:
+
+ separate out delete/remove row functionality
+
+2002-03-20 07:47 hardaker
+
+ * agent/mibgroup/mibII/: system_mib.c (V4-2-patches.6),
+ system_mib.c:
+
+ remove illegal SET support for sysDescr.
+
+2002-03-20 06:27 hardaker
+
+ * CodingStyle, local/mib2c:
+
+ - add many many -T flags for defining types.
+
+2002-03-19 21:13 hardaker
+
+ * apps/snmptrapd.c:
+
+ force setting of '!root' flag so that it will run for non-privileged
+ users or when an agentx master simply has never existed.
+
+2002-03-19 16:02 hardaker
+
+ * agent/helpers/table_dataset.c,
+ include/net-snmp/agent/table_dataset.h:
+
+ - allow tables to be marked whether they should support creation or not.
+ - bug fixes
+
+2002-03-19 07:32 hardaker
+
+ * agent/helpers/: table_data.c, table_dataset.c:
+
+ documentation clean up
+
+2002-03-19 07:28 hardaker
+
+ * agent/: agent_handler.c, helpers/table_data.c:
+
+ documentation clean up
+
+2002-03-19 07:17 hardaker
+
+ * agent/: agent_handler.c, helpers/bulk_to_next.c,
+ helpers/table_dataset.c, mibgroup/examples/scalar_int.c
+:
+
+ documentation clean up
+
+2002-03-19 06:43 hardaker
+
+ * agent/agent_handler.c, agent/agent_registry.c,
+ agent/snmp_agent.c, agent/helpers/instance.c,
+ agent/helpers/old_api.c, agent/helpers/table.c,
+ agent/helpers/table_array.c, agent/helpers/table_data.c
+, agent/helpers/table_dataset.c,
+ agent/helpers/table_iterator.c, agent/mibgroup/testdelayed.c
+, agent/mibgroup/testhandler.c,
+ agent/mibgroup/agentx/master_admin.c,
+ apps/notification_log.c, include/net-snmp/utilities.h,
+ include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/table.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/library/data_list.h,
+ local/mib2c.create-dataset.conf, perl/agent/agent.xs,
+ snmplib/data_list.c:
+
+ - renamed a few badly named functions (netsnmp_ appeared twice).
+ - implemented the beginning of creation support for datasets.
+
+2002-03-19 06:35 hardaker
+
+ * configure:
+
+ Apparently I ran autoconf earlier and missed checking in the results.
+
+2002-03-19 06:35 hardaker
+
+ * CodingStyle:
+
+ add -nfca
+
+2002-03-17 16:25 hardaker
+
+ * apps/snmptrap.c:
+
+ Set default port to 162.
+
+2002-03-17 15:51 hardaker
+
+ * snmplib/: snmpTCPDomain.c, snmpUDPDomain.c:
+
+ improved formatting strings showing both transport type and port number.
+
+2002-03-13 23:30 hardaker
+
+ * Makefile.rules:
+
+ add missing "installsubdirs" target missing (thanks to Katsuhisa ABE)
+
+2002-03-13 23:27 hardaker
+
+ * configure.in, net-snmp-config.in:
+
+ add --create-snmpv3-user to automate adding a v3 user to both the usm
+ and vacm tables (by adding lines to both the persistent and normal
+ conf files).
+
+2002-03-13 16:30 hardaker
+
+ * agent/mibgroup/agent/nsModuleTable.c:
+
+ bug fix for pre-processed requests.
+
+2002-03-13 16:30 hardaker
+
+ * Makefile.rules, configure, configure.in,
+ agent/Makefile.in, agent/mibgroup/agent_mibs.h,
+ include/ucd-snmp/agent_index.h,
+ include/ucd-snmp/agent_read_config.h,
+ include/ucd-snmp/agent_registry.h,
+ include/ucd-snmp/agent_trap.h, include/ucd-snmp/asn1.h,
+ include/ucd-snmp/auto_nlist.h, include/ucd-snmp/callback.h
+, include/ucd-snmp/default_store.h,
+ include/ucd-snmp/ds_agent.h,
+ include/ucd-snmp/header_complex.h, include/ucd-snmp/int64.h
+, include/ucd-snmp/keytools.h, include/ucd-snmp/mib.h
+, include/ucd-snmp/mib_module_config.h,
+ include/ucd-snmp/mibincl.h, include/ucd-snmp/parse.h,
+ include/ucd-snmp/read_config.h, include/ucd-snmp/scapi.h
+, include/ucd-snmp/snmp-tc.h, include/ucd-snmp/snmp.h
+, include/ucd-snmp/snmp_agent.h,
+ include/ucd-snmp/snmp_alarm.h, include/ucd-snmp/snmp_api.h
+, include/ucd-snmp/snmp_client.h,
+ include/ucd-snmp/snmp_debug.h, include/ucd-snmp/snmp_impl.h
+, include/ucd-snmp/snmp_logging.h,
+ include/ucd-snmp/snmp_parse_args.h,
+ include/ucd-snmp/snmp_vars.h, include/ucd-snmp/snmpusm.h
+, include/ucd-snmp/snmpv3.h, include/ucd-snmp/struct.h
+, include/ucd-snmp/system.h, include/ucd-snmp/tools.h
+, include/ucd-snmp/transform_oids.h,
+ include/ucd-snmp/ucd-snmp-agent-includes.h,
+ include/ucd-snmp/ucd-snmp-includes.h,
+ include/ucd-snmp/util_funcs.h, include/ucd-snmp/var_struct.h
+, include/ucd-snmp/version.h:
+
+ - --enable-ucd-snmp-compatibility actually installs headers (as opposed
+ to always, which is what it used to do).
+ - add agent_mibs to configure default mib modules and document.
+ - change help documentation a bit for the mib modules.
+ - add a forced dependency for mib_modules.lo
+
+2002-03-13 16:13 hardaker
+
+ * agent/mibgroup/agent.h:
+
+ opps. duplicates existing agent_mibs.h
+
+2002-03-13 15:50 hardaker
+
+ * mibs/: UCD-DEMO-MIB.txt, UCD-DISKIO-MIB.txt, UCD-DLMOD-MIB.txt,
+ UCD-IPFILTER-MIB.txt, UCD-IPFWACC-MIB.txt, UCD-SNMP-MIB.txt
+ (V4-2-patches.[1,1,1,1,1,9]), UCD-DEMO-MIB.txt,
+ UCD-DISKIO-MIB.txt, UCD-DLMOD-MIB.txt,
+ UCD-IPFILTER-MIB.txt, UCD-IPFWACC-MIB.txt,
+ UCD-SNMP-MIB.txt:
+
+ address changes for ucd-snmp -> net-snmp note saying these mibs are no
+ longer supported by UCD.
+
+2002-03-13 15:39 hardaker
+
+ * agent/mibgroup/agent.h,
+ agent/mibgroup/agent/nsModuleTable.c,
+ agent/mibgroup/agent/nsModuleTable.h,
+ mibs/NET-SNMP-AGENT-MIB.txt:
+
+ Added a nsModuleTable table which replaces the older mrTable.
+ Functionally, this is a list of all registered items within the MIB
+ tree just like the mrTable was, but with support for contexts and for
+ duplicate registrations with different priorities.
+
+2002-03-13 15:21 hardaker
+
+ * snmplib/: tools.c (V4-2-patches.4), tools.c:
+
+ malloc at least one byte in hex_to_binary2
+
+2002-03-13 15:11 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ remove unneeded debug statement
+
+2002-03-13 14:10 hardaker
+
+ * snmplib/mib.c:
+
+ Use local variable name buffers by default when building oid segments.
+
+2002-03-13 14:09 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ /* stop water from flowing through dam */
+ finger->insert("hole")
+
+2002-03-13 04:03 dts12
+
+ * FAQ (V4-2-patches.7), FAQ:
+
+ Add a description of "unlinked OIDs".
+
+2002-03-12 21:30 hardaker
+
+ * local/: mib2c.create-dataset.conf, mib2c.iterate.conf
+:
+
+ fix headers.
+
+2002-03-12 21:15 hardaker
+
+ * local/mib2c:
+
+ add don't format comments option
+
+2002-03-12 21:10 hardaker
+
+ * agent/helpers/table_dataset.c:
+
+ fix for tables with holes.
+
+2002-03-12 21:09 hardaker
+
+ * mibs/Makefile.in:
+
+ move default mibs to their own variable.
+
+2002-03-12 21:06 hardaker
+
+ * perl/: SNMP/Makefile.PL, agent/Makefile.PL,
+ agent/agent.xs, agent/typemap:
+
+ - use net-snmp-config to figure things out.
+ - update headers and typeinfo for recent changes.
+
+2002-03-12 20:34 hardaker
+
+ * local/: FAQ2HTML, README.mib2c, mib2c, tkmib
+, mib2c.array-auto.conf, mib2c.array-user.conf:
+
+ ucd-snmp -> net-snmp changes.
+
+2002-03-12 20:33 hardaker
+
+ * local/mib2c.storage.conf:
+
+ remove obsolete mib2c.conf file
+
+2002-03-12 18:11 hardaker
+
+ * agent/helpers/table_data.c:
+
+ don't forget to set row->next->prev to something when removing row.
+
+2002-03-12 17:54 hardaker
+
+ * agent/snmp_agent.c:
+
+ fix agentx inclusive searches to ignore get errors.
+
+2002-03-12 17:53 hardaker
+
+ * snmplib/snmpCallbackDomain.c:
+
+ some minimal dump debugging.
+
+2002-03-12 08:34 dts12
+
+ * FAQ (V4-2-patches.6), FAQ:
+
+ Updating of the FAQ ready for the next release.
+ (Mostly rephrasing of existing entries, but a few new questions)
+
+2002-03-11 18:00 rstory
+
+ * agent/helpers/table_dataset.c:
+
+ cast -1 to u_char so test doesn't always fail (fix compiler warning)
+
+2002-03-11 17:27 hardaker
+
+ * agent/mibgroup/agentx/master.c:
+
+ treat (illegal) errors from subagents specially for getnext cases.
+
+2002-03-11 13:41 hardaker
+
+ * net-snmp-config.in:
+
+ add our snmp libraries to output
+
+2002-03-11 10:34 hardaker
+
+ * include/net-snmp/agent/: table_data.h, table_dataset.h
+:
+
+ delete/remove support header changes.
+
+2002-03-11 09:13 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - allow compilation --with-out-transports=TCP
+
+2002-03-11 08:21 jbpn
+
+ * include/net-snmp/library/snmp_debug.h:
+
+ - fixes for --disable-debugging
+
+2002-03-11 07:41 dts12
+
+ * FAQ (V4-2-patches.5), FAQ:
+
+ Bring the 4x- and main-branch FAQs into agreement.
+
+2002-03-11 06:51 jbpn
+
+ * agent/mibgroup/agentx/master.c:
+
+ - use correct session ID when talking to subagents. Thanks to Craig
+ Setera for this fix.
+
+2002-03-11 05:20 jbpn
+
+ * snmplib/parse.c:
+
+ - fix bad type assignment in build_translation_table(), noticed by
+ Peter Stevens.
+
+2002-03-11 00:13 hardaker
+
+ * apps/snmptrapd.c:
+
+ check for NULL frees, even though it's supposed to be ok according to ansi.
+
+2002-03-11 00:12 hardaker
+
+ * apps/notification_log.c:
+
+ beginning support for maximum logged checking.
+
+2002-03-11 00:11 hardaker
+
+ * agent/helpers/table_dataset.c:
+
+ - remove/delete row support.
+ - null check
+ - doc comments.
+
+2002-03-11 00:10 hardaker
+
+ * agent/helpers/table_data.c:
+
+ remove/delete row support.
+
+2002-03-11 00:08 hardaker
+
+ * agent/helpers/instance.c:
+
+ call next handlers (opps).
+
+2002-03-10 14:11 nba
+
+ * man/mib_api.3.def:
+
+ Fix one sprint_variable => snprint_variable
+
+2002-03-10 14:06 nba
+
+ * include/net-snmp/library/mib.h, snmplib/mib.c:
+
+ Add snprint_* functions that were sprint_* in ucd-snmp 4
+
+2002-03-10 14:05 nba
+
+ * include/net-snmp/session_api.h, snmplib/snmpIPXDomain.c
+, snmplib/snmp_transport.c:
+
+ Fix compilation when IPX-transport enabled
+
+2002-03-10 14:03 nba
+
+ * apps/snmpnetstat/Makefile.in:
+
+ Fix compilation outside source directory
+
+2002-03-08 22:26 hardaker
+
+ * FAQ, sedscript.in, perl/SNMP/SNMP.pm,
+ snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.pre2 )
+
+2002-03-08 18:23 hardaker
+
+ * README:
+
+ misc changes.
+
+2002-03-08 18:23 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ new api changes
+
+2002-03-08 17:20 hardaker
+
+ * agent/mibgroup/mibII/mta_sendmail.c:
+
+ Patch from Lawrence Greenfield to deal with Sendmail 8.12 queuegroups.
+
+2002-03-08 16:59 hardaker
+
+ * apps/snmpnetstat/Makefile.in:
+
+ patch from csete to fix win32 builds
+
+2002-03-08 16:55 hardaker
+
+ * configure, configure.in:
+
+ add Callback transport to cygwin
+
+2002-03-08 16:49 hardaker
+
+ * NEWS:
+
+ mention rmon support.
+
+2002-03-08 16:39 hardaker
+
+ * snmplib/snmp_api.c:
+
+ patch from Harrie Hazewinkel to remove old an unused pointer
+
+2002-03-08 16:28 hardaker
+
+ * agent/agent_index.c, agent/agent_registry.c,
+ agent/agent_trap.c, agent/snmp_agent.c,
+ agent/snmp_vars.c, agent/snmpd.c,
+ agent/helpers/instance.c, agent/helpers/old_api.c,
+ agent/helpers/table.c, agent/helpers/table_array.c,
+ agent/helpers/table_data.c, agent/helpers/table_dataset.c
+, agent/helpers/table_iterator.c,
+ agent/mibgroup/header_complex.c,
+ agent/mibgroup/header_complex.h, agent/mibgroup/testhandler.c
+, agent/mibgroup/Rmon/event.c,
+ agent/mibgroup/agent/nsTransactionTable.c,
+ agent/mibgroup/agentx/client.c,
+ agent/mibgroup/agentx/client.h,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/master_admin.h,
+ agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/agentx/protocol.h,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/agentx/subagent.h,
+ agent/mibgroup/disman/mteObjectsTable.c,
+ agent/mibgroup/disman/mteObjectsTable.h,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/disman/mteTriggerTable.h,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/sysORTable.h,
+ agent/mibgroup/mibII/vacm_context.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/vacm_vars.h,
+ agent/mibgroup/notification/snmpNotifyFilterProfileTable.c,
+ agent/mibgroup/notification/snmpNotifyFilterTable.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/smux/smux.c, agent/mibgroup/smux/smux.h
+, agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.h,
+ agent/mibgroup/target/target.c,
+ agent/mibgroup/target/target.h,
+ agent/mibgroup/ucd-snmp/proxy.c,
+ agent/mibgroup/ucd-snmp/proxy.h, apps/notification_log.c
+, apps/notification_log.h, apps/snmpbulkget.c,
+ apps/snmpbulkwalk.c, apps/snmpdelta.c, apps/snmpdf.c
+, apps/snmpget.c, apps/snmpgetnext.c,
+ apps/snmpset.c, apps/snmpstatus.c, apps/snmptable.c
+, apps/snmptest.c, apps/snmptrap.c,
+ apps/snmptrapd.c, apps/snmptrapd_log.c,
+ apps/snmptrapd_log.h, apps/snmpusm.c, apps/snmpvacm.c
+, apps/snmpwalk.c, apps/snmpnetstat/if.c,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/inet6.c,
+ apps/snmpnetstat/main.c, apps/snmpnetstat/netstat.h,
+ apps/snmpnetstat/route.c,
+ include/net-snmp/agent/agent_index.h,
+ include/net-snmp/agent/agent_registry.h,
+ include/net-snmp/agent/agent_trap.h,
+ include/net-snmp/agent/old_api.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/snmp_vars.h,
+ include/net-snmp/agent/table.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_iterator.h,
+ include/net-snmp/agent/var_struct.h,
+ include/net-snmp/library/cmu_compat.h,
+ include/net-snmp/library/libsnmp.h,
+ include/net-snmp/library/mib.h,
+ include/net-snmp/library/oid_array.h,
+ include/net-snmp/library/parse.h,
+ include/net-snmp/library/snmpCallbackDomain.h,
+ include/net-snmp/library/snmp_api.h,
+ include/net-snmp/library/snmp_client.h,
+ include/net-snmp/library/snmp_debug.h,
+ include/net-snmp/library/snmp_parse_args.h,
+ include/net-snmp/library/snmp_secmod.h,
+ include/net-snmp/library/snmpusm.h,
+ local/mib2c.array-user.conf, local/mib2c.iterate.conf,
+ local/mib2c.storage.conf, perl/SNMP/SNMP.xs,
+ snmplib/cmu_compat.c, snmplib/mib.c,
+ snmplib/snmpCallbackDomain.c, snmplib/snmp_api.c,
+ snmplib/snmp_client.c, snmplib/snmp_debug.c,
+ snmplib/snmp_parse_args.c, snmplib/snmp_secmod.c,
+ snmplib/snmpksm.c, snmplib/snmpusm.c, snmplib/snmpv3.c
+, snmplib/ucd_compat.c:
+
+ struct snmp_session typedefed to netsnmp_session. & pdu. & ...
+
+2002-03-08 14:00 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ get_symbol -> get_tree
+
+2002-03-08 07:45 hardaker
+
+ * perl/: SNMP/SNMP.xs, agent/agent.pm, agent/agent.xs
+, agent/test.pl:
+
+ missed updates
+
+2002-03-08 07:43 hardaker
+
+ * snmplib/: data_list.c, default_store.c, mib.c
+, oid_array.c, oid_stash.c, read_config.c
+, snmpAAL5PVCDomain.c, snmpCallbackDomain.c,
+ snmpIPXDomain.c, snmpTCPDomain.c, snmpTCPIPv6Domain.c
+, snmpUDPDomain.c, snmpUDPIPv6Domain.c,
+ snmpUnixDomain.c, snmp_api.c, snmp_debug.c,
+ snmp_transport.c, snmpv3.c:
+
+ missing updated code
+
+2002-03-08 02:07 jbpn
+
+ * include/net-snmp/library/snmp_api.h,
+ include/net-snmp/library/snmp_transport.h, snmplib/snmp_api.c
+:
+
+ - some snmp -> netsnmp fixes
+
+2002-03-07 13:42 hardaker
+
+ * agent/snmp_agent.c, agent/snmp_vars.c,
+ agent/snmpd.c, agent/helpers/table.c,
+ agent/helpers/table_array.c, agent/helpers/table_data.c
+, agent/helpers/table_dataset.c,
+ agent/helpers/table_iterator.c, agent/mibgroup/testhandler.c
+, agent/mibgroup/agent/nsTransactionTable.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/mibII/vacm_context.c,
+ agent/mibgroup/mibII/vacm_vars.c, apps/notification_log.c
+, apps/snmptrapd.c, apps/snmptrapd_log.c,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/table.h,
+ include/net-snmp/agent/table_array.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/agent/table_iterator.h,
+ include/net-snmp/library/snmpAAL5PVCDomain.h,
+ include/net-snmp/library/snmpCallbackDomain.h,
+ include/net-snmp/library/snmpIPXDomain.h,
+ include/net-snmp/library/snmpTCPDomain.h,
+ include/net-snmp/library/snmpTCPIPv6Domain.h,
+ include/net-snmp/library/snmpUDPDomain.h,
+ include/net-snmp/library/snmpUDPIPv6Domain.h,
+ include/net-snmp/library/snmpUnixDomain.h,
+ local/mib2c.array-auto.conf, local/mib2c.array-user.conf
+, local/mib2c.create-dataset.conf,
+ local/mib2c.iterate.conf:
+
+ massive netsnmp_ prefixing of stuff (pass 4)
+
+2002-03-07 13:29 hardaker
+
+ * agent/agent_handler.c, agent/agent_read_config.c,
+ agent/agent_registry.c, agent/snmp_vars.c,
+ agent/helpers/all_helpers.c, agent/helpers/bulk_to_next.c
+, agent/helpers/debug_handler.c,
+ agent/helpers/instance.c, agent/helpers/multiplexer.c,
+ agent/helpers/null.c, agent/helpers/old_api.c,
+ agent/helpers/read_only.c, agent/helpers/serialize.c,
+ agent/helpers/table.c, agent/helpers/table_array.c,
+ agent/helpers/table_data.c, agent/helpers/table_dataset.c
+, agent/helpers/table_iterator.c,
+ agent/mibgroup/testdelayed.c, agent/mibgroup/testhandler.c
+, agent/mibgroup/agent/nsTransactionTable.c,
+ agent/mibgroup/agent/nsTransactionTable.h,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/examples/scalar_int.c,
+ agent/mibgroup/mibII/vacm_context.c,
+ agent/mibgroup/target/target.c,
+ agent/mibgroup/target/target_counters.c,
+ apps/notification_log.c,
+ include/net-snmp/agent/agent_registry.h,
+ include/net-snmp/agent/all_helpers.h,
+ include/net-snmp/agent/bulk_to_next.h,
+ include/net-snmp/agent/debug_handler.h,
+ include/net-snmp/agent/instance.h,
+ include/net-snmp/agent/multiplexer.h,
+ include/net-snmp/agent/null.h,
+ include/net-snmp/agent/old_api.h,
+ include/net-snmp/agent/read_only.h,
+ include/net-snmp/agent/serialize.h,
+ include/net-snmp/agent/table.h,
+ include/net-snmp/agent/table_array.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/agent/table_iterator.h,
+ include/net-snmp/library/snmpTCPDomain.h,
+ local/mib2c.array-auto.conf, local/mib2c.array-user.conf
+, local/mib2c.create-dataset.conf,
+ local/mib2c.iterate.conf:
+
+ massive netsnmp_ prefixing of stuff (pass 3)
+
+2002-03-07 13:13 hardaker
+
+ * agent/agent_handler.c, agent/agent_registry.c,
+ agent/snmp_agent.c, agent/helpers/debug_handler.c,
+ agent/helpers/instance.c, agent/helpers/old_api.c,
+ agent/helpers/table.c, agent/helpers/table_array.c,
+ agent/helpers/table_data.c, agent/helpers/table_dataset.c
+, agent/helpers/table_iterator.c,
+ agent/mibgroup/testdelayed.c, agent/mibgroup/testhandler.c
+, agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/target/target.c, apps/snmptrapd.c,
+ include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/table_array.h,
+ include/net-snmp/library/data_list.h,
+ include/net-snmp/library/oid_array.h,
+ include/net-snmp/library/oid_stash.h,
+ local/mib2c.array-user.conf:
+
+ massive netsnmp_ prefixing of stuff (pass 2)
+
+2002-03-07 08:56 hardaker
+
+ * agent/agent_handler.c, agent/agent_read_config.c,
+ agent/agent_registry.c, agent/snmp_agent.c,
+ agent/snmp_vars.c, agent/snmpd.c,
+ agent/helpers/bulk_to_next.c, agent/helpers/debug_handler.c
+, agent/helpers/instance.c,
+ agent/helpers/multiplexer.c, agent/helpers/null.c,
+ agent/helpers/old_api.c, agent/helpers/read_only.c,
+ agent/helpers/serialize.c, agent/helpers/table.c,
+ agent/helpers/table_array.c, agent/helpers/table_data.c
+, agent/helpers/table_dataset.c,
+ agent/helpers/table_iterator.c, agent/mibgroup/testdelayed.c
+, agent/mibgroup/testdelayed.h,
+ agent/mibgroup/testhandler.c, agent/mibgroup/testhandler.h
+, agent/mibgroup/agent/nsTransactionTable.c,
+ agent/mibgroup/agent/nsTransactionTable.h,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master.h,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/vacm_context.c,
+ agent/mibgroup/mibII/vacm_context.h,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.h,
+ agent/mibgroup/target/target.c,
+ agent/mibgroup/target/target_counters.c,
+ agent/mibgroup/target/target_counters.h,
+ agent/mibgroup/ucd-snmp/proxy.c,
+ agent/mibgroup/ucd-snmp/proxy.h, apps/notification_log.c
+, apps/notification_log.h, apps/snmpstatus.c,
+ apps/snmptest.c, apps/snmptrapd.c,
+ apps/snmptrapd_log.c, apps/snmptrapd_log.h,
+ include/net-snmp/session_api.h,
+ include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/agent_registry.h,
+ include/net-snmp/agent/bulk_to_next.h,
+ include/net-snmp/agent/debug_handler.h,
+ include/net-snmp/agent/instance.h,
+ include/net-snmp/agent/multiplexer.h,
+ include/net-snmp/agent/null.h,
+ include/net-snmp/agent/old_api.h,
+ include/net-snmp/agent/read_only.h,
+ include/net-snmp/agent/serialize.h,
+ include/net-snmp/agent/set_helper.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/snmp_vars.h,
+ include/net-snmp/agent/table.h,
+ include/net-snmp/agent/table_array.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/agent/table_iterator.h,
+ include/net-snmp/agent/var_struct.h,
+ include/net-snmp/library/mib.h,
+ include/net-snmp/library/read_config.h,
+ include/net-snmp/library/snmpAAL5PVCDomain.h,
+ include/net-snmp/library/snmpCallbackDomain.h,
+ include/net-snmp/library/snmpIPXDomain.h,
+ include/net-snmp/library/snmpTCPDomain.h,
+ include/net-snmp/library/snmpTCPIPv6Domain.h,
+ include/net-snmp/library/snmpUDPDomain.h,
+ include/net-snmp/library/snmpUDPIPv6Domain.h,
+ include/net-snmp/library/snmpUnixDomain.h,
+ include/net-snmp/library/snmp_api.h,
+ include/net-snmp/library/snmp_transport.h,
+ local/mib2c.array-auto.conf, local/mib2c.array-user.conf
+, local/mib2c.create-dataset.conf,
+ local/mib2c.iterate.conf:
+
+ massive netsnmp_ prefixing of stuff (pass 1)
+
+2002-03-07 06:21 jbpn
+
+ * man/snmp_sess_api.3.def:
+
+ - style update
+
+2002-03-07 05:47 jbpn
+
+ * man/snmp_trap_api.3.def:
+
+ - minor updates
+
+2002-03-07 05:39 jbpn
+
+ * man/snmp_alarm.3.def:
+
+ - style update
+
+2002-03-07 05:00 jbpn
+
+ * man/read_config.3.def:
+
+ - make prototypes match header
+
+ - make style consistent with mib_api
+
+2002-03-07 03:07 jbpn
+
+ * man/mib_api.3.def:
+
+ - fix up snprint_ declarations, fix small typo. Patch by Guy
+ Harris.
+
+2002-03-07 02:44 jbpn
+
+ * include/net-snmp/library/mib.h:
+
+ - remove duplicate declaration of sprint_realloc_by_type, as noted
+ by Guy Harris.
+
+2002-03-06 17:15 hardaker
+
+ * include/net-snmp/agent/.cvsignore,
+ include/net-snmp/library/.cvsignore, perl/SNMP/t/.cvsignore
+:
+
+ new ignore files
+
+2002-03-06 17:13 hardaker
+
+ * .cvsignore:
+
+ ignore docs
+
+2002-03-06 17:08 hardaker
+
+ * agent/mibgroup/examples.h:
+
+ examples module wrapper to include all (new) examples.
+
+2002-03-06 16:58 hardaker
+
+ * agent/mibgroup/examples/scalar_int.c:
+
+ document better.
+
+2002-03-06 16:58 hardaker
+
+ * doxygen.conf:
+
+ search examples for docs.
+
+2002-03-06 16:29 hardaker
+
+ * mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ example MIB template (and one node)
+
+2002-03-06 16:28 hardaker
+
+ * mibs/NET-SNMP-MIB.txt:
+
+ instantiate examples
+
+2002-03-06 16:27 hardaker
+
+ * mibs/Makefile.in:
+
+ install some NS mibs
+
+2002-03-06 16:27 hardaker
+
+ * agent/mibgroup/examples/: scalar_int.c, scalar_int.h:
+
+ Example implementation of a SNMP enabled int registered at a scalar.
+
+2002-03-06 16:25 hardaker
+
+ * agent/helpers/instance.c, include/net-snmp/agent/instance.h
+:
+
+ many changes for instances. Specificically:
+ - allow for subhandlers.
+ - provide an int wrapper.
+ - reuse more code.
+ - numerous bug fixes.
+
+2002-03-06 14:05 hardaker
+
+ * NEWS:
+
+ remove a blank line.
+
+2002-03-06 14:05 hardaker
+
+ * agent/mibgroup/agentx/: master.c, master_admin.c:
+
+ Fix master agent getbulk support. this has to be independently of the
+ normal bulk->next fixes due to delegation. Long story.
+
+2002-03-06 14:03 hardaker
+
+ * agent/helpers/bulk_to_next.c:
+
+ move bulk_to_next fixing functionality into a separate function for reuse.
+
+2002-03-06 10:26 jbpn
+
+ * include/net-snmp/library/mib.h, snmplib/mib.c:
+
+ - sprinkle magic const dust
+
+2002-03-06 10:18 jbpn
+
+ * man/mib_api.3.def:
+
+ - document changed API, incorporating patches by Guy Harris.
+
+2002-03-06 09:34 hardaker
+
+ * testing/tests/: T112agentxsetfail, T122proxysetfail:
+
+ fix tests.
+
+2002-03-06 09:24 hardaker
+
+ * snmplib/snmp_parse_args.c:
+
+ re-enable setting optind to 1 till Dave tells me where this breaks.
+
+2002-03-06 09:08 hardaker
+
+ * testing/tests/: T051snmpv2ctrap, T052snmpv2cinform,
+ T058agentauthtrap:
+
+ fixes for new command line usage.
+
+2002-03-06 09:07 hardaker
+
+ * snmplib/snmp_client.c:
+
+ more improved error messages (mostly)
+
+2002-03-06 08:54 hardaker
+
+ * configure:
+
+ autoconf
+
+2002-03-06 08:41 dts12
+
+ * snmplib/: snmpv3.c (V4-2-patches.3), snmpv3.c:
+
+ Fix a confusion between defAuthType and defPrivType.
+
+2002-03-06 08:36 hardaker
+
+ * agent/mibgroup/agentx/: master.c, protocol.c:
+
+ proper fix for not requiring responses to CLEANUP messages.
+
+2002-03-06 06:07 jbpn
+
+ * agent/snmp_agent.c:
+
+ - zero the name of elements of the bulk cache
+
+2002-03-06 06:06 jbpn
+
+ * snmplib/mib.c:
+
+ - calloc() not malloc() in a few places to initialise some buffers
+ to zeroes.
+
+2002-03-06 05:52 dts12
+
+ * snmplib/: snmp_api.c (V4-2-patches.6), snmp_api.c:
+
+ Actually use the common 'defPassphrase' value if 'def{Auth,Priv}Passphrase' isn't set.
+ Qn: Should the AuthPassphrase also be used for privacy if no other value is available?
+
+2002-03-06 05:45 jbpn
+
+ * agent/mibgroup/agentx/master.c:
+
+ - don't send requests for OIDs preceeding the start of a region
+ (this can lead to loops if e.g. a subagent has registered two
+ adjacent rows).
+
+2002-03-06 05:07 jbpn
+
+ * testing/Makefile.in:
+
+ - ignore errors doing rm -rf /tmp/snmp-test* when making testclean
+
+2002-03-06 02:26 jbpn
+
+ * snmplib/mib.c:
+
+ - use more efficient get_tree() in sprint_realloc_value()
+
+2002-03-05 18:28 hardaker
+
+ * testing/tests/: T015snmpv2cgetnext, T001snmpv1get,
+ T002snmpv1getnext, T003snmpv1getfail, T014snmpv2cget
+, T016snmpv2cgetfail, T017snmpv2ctov1getfail,
+ T018snmpv1tov2cgetfail, T100agenthup:
+
+ fixes for new forced -c flags
+
+2002-03-05 18:21 hardaker
+
+ * include/net-snmp/agent/snmp_agent.h:
+
+ remove no longer appropriate comment.
+
+2002-03-05 18:20 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ fix duplicate free by cloning the pdu before sending it out again
+ (thought I had done this once in the past already, but I got 1/2 functions).
+
+2002-03-05 18:19 hardaker
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ Temporary fix to fix for agentx SET requests. This reverses a
+ previous John change where responses to cleanups are now expected
+ again. This took me a good 2 days to track down, sigh...
+
+2002-03-05 18:07 hardaker
+
+ * agent/mibgroup/agentx/master.c:
+
+ - add (ascii) agentx state diagram
+
+2002-03-05 18:07 hardaker
+
+ * agent/snmp_agent.c:
+
+ - multiple free bug fixes.
+ - improved debugging statements.
+
+2002-03-05 10:44 hardaker
+
+ * agent/mibgroup/agentx/: master_request.c, master_request.h
+:
+
+ removed unused files
+
+2002-03-05 10:31 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - oops, fix bad cut and paste
+
+2002-03-05 10:25 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - reintroduce scope processing (see RFC 2741, p. 66, section 7.2.3.2
+ paragraph 2): "If the subagent can't locate an appropriate
+ variable, __v.name_is_set_to_the_starting_OID__ [the important
+ bit] and the VarBind is set to `endOfMibView'"
+
+2002-03-05 09:54 hardaker
+
+ * agent/mibgroup/ucd-snmp/versioninfo.c:
+
+ impose max length restriction supplied by mib for configuration options.
+
+2002-03-05 08:48 jbpn
+
+ * agent/: agent_index.c, snmp_agent.c,
+ helpers/debug_handler.c, mibgroup/agentx/master.c:
+
+ - use new DEBUGMSGVAR macro in a few places
+
+2002-03-05 08:45 jbpn
+
+ * snmplib/snmp_debug.c,
+ include/net-snmp/library/snmp_debug.h:
+
+ - add DEBUGMSGVAR macro to print out a variable
+
+2002-03-05 08:34 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ print_value function updates.
+
+2002-03-05 08:05 dts12
+
+ * agent/mibgroup/examples/: ucdDemoPublic.c (V4-2-patches.2),
+ ucdDemoPublic.c:
+
+ Add missing "standard" headers, and tweak a type slightly.
+ (Based on requests from Gregory Toth).
+
+2002-03-05 08:04 jbpn
+
+ * agent/snmp_agent.c:
+
+ - grrr, botched last fix
+
+2002-03-05 08:01 hardaker
+
+ * agent/mibgroup/agentx/subagent.c,
+ snmplib/snmpCallbackDomain.c:
+
+ Set the default callback session version number to the generic -1
+ version allowing the pdu to passed without version checking.
+
+2002-03-05 07:59 hardaker
+
+ * agent/mibgroup/agentx/master.c:
+
+ move NULL check to *before* you actually use the pointer.
+
+2002-03-05 07:59 jbpn
+
+ * agent/snmp_agent.c:
+
+ - mark INCLUSIVE requests as such
+
+2002-03-05 07:58 hardaker
+
+ * agent/helpers/old_api.c:
+
+ - use a for loop instead of a while loop, just a precaution for future problems.
+
+2002-03-05 07:56 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (snmp_check_parse) allow internal set transactions to be passed to
+ the agent, since agentx sends them.
+
+2002-03-05 07:21 jbpn
+
+ * snmplib/mib.c:
+
+ - don't add the "module ID" to OIDs if it is numeric because we
+ couldn't look it up properly (to avoid horrible looking output
+ like this: "OID: #-1::iso.2.3.4.5.")
+
+2002-03-05 07:05 jbpn
+
+ * configure.in:
+
+ - remove reference to 2c in error message from version prompt
+
+2002-03-05 07:01 jbpn
+
+ * configure.in:
+
+ - remove duplicate tests
+
+2002-03-05 06:51 hardaker
+
+ * configure, configure.in:
+
+ - re-emphasis a suggestion to switch to a secure version of the protocol.
+ - delete notion that v3 without auth/priv provides better security (it doesn't).
+ - Don't accept v2c as an accepted value, as it's used as an int.
+ - but do change help messages, etc, to reflect that 2 = v2c.
+
+2002-03-05 06:50 dts12
+
+ * agent/mibgroup/ucd-snmp/dlmod.c:
+
+ Cast a calloc appropriately (requested by Gregory Toth)
+
+2002-03-05 06:20 jbpn
+
+ * snmplib/Makefile.in:
+
+ - fix typo in OBJS definition
+
+2002-03-05 06:18 jbpn
+
+ * agent/Makefile.in:
+
+ - clean target depends on $(OBJS) and $(LOBJS), so define them
+
+2002-03-05 03:52 jbpn
+
+ * configure.in:
+
+ - fix default version tests (splitting them over several lines
+ confuses sh on Solaris, at least).
+
+ - disambiguate some instances of "version" in default version
+ prompt text.
+
+2002-03-05 02:34 dts12
+
+ * configure, configure.in:
+
+ Correctly detect when no initial default version has been set.
+ Accept '2c' as well as '2' for a default version choice.
+ Fix the title for this prompt, and reword the description to
+ make it a *slightly* less leading question, m'lud.
+
+ Qn: Should we support a "no default version" option ?
+ (hence allow the admin to force the decision down to the user)
+
+2002-03-04 18:14 hardaker
+
+ * agent/mibgroup/agentx/client.c:
+
+ ucd-snmp -> net-snmp change
+
+2002-03-04 18:10 hardaker
+
+ * agent/agent_handler.c:
+
+ (To John): do not free the myvoid pointer in a handler. You can not
+ assume that it's a freeable resource. For instance, the agentx master
+ agent was using it to store the master session pointer in it (which
+ would exist in multiple registered nodes).
+
+2002-03-04 17:26 hardaker
+
+ * configure.in, include/net-snmp/snmpv3_api.h,
+ snmplib/Makefile.in:
+
+ use a configure generated wrapper header for v3 security modules.
+
+2002-03-04 11:58 hardaker
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ add dmalloc.h to the proper place.
+
+2002-03-04 11:53 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ string clean ups.
+
+2002-03-04 11:52 hardaker
+
+ * acconfig.h, aclocal.m4, configure,
+ configure.in, include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/library/default_store.h,
+ snmplib/snmp_parse_args.c, snmplib/snmpv3.c:
+
+ Implement a default version prompt for configure.
+ - (Wes ducks as this is currently set to '3' which he may have to
+ change as it hasn't exactly been agreed upon as the proper default yet).
+ - --with-default-snmp-version also created.
+ - changed handling of default store / snmp.conf usage but impact
+ should be low, hopefully.
+
+2002-03-04 11:49 hardaker
+
+ * snmplib/snmp_api.c:
+
+ a few error strings slightly improved. We really need to change the
+ way these are handled to get better improvement.
+
+2002-03-04 07:49 hardaker
+
+ * testing/Makefile.in:
+
+ separate out the cleaning of /tmp from the main cleaning to provide it
+ as a special target.
+
+2002-03-04 07:38 hardaker
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ -Wall fixes.
+
+2002-03-04 05:32 jbpn
+
+ * man/: snmpbulkget.1.def, snmpbulkwalk.1.def,
+ snmpget.1.def, snmpgetnext.1.def, snmpstatus.1.def
+, snmptest.1.def, snmptrap.1.def:
+
+ - remove further instances of positional community string parameter,
+ after Patrick Welche
+
+2002-03-04 05:25 jbpn
+
+ * man/: snmpd.conf.5.def, snmpwalk.1.def:
+
+ - patches from Patrick Welche
+
+2002-03-04 01:16 dts12
+
+ * agent/mibgroup/ucd-snmp/: memory.c (V4-2-patches.6), memory.c
+:
+
+ Correct debug output message (thanks to Jeroen Ruigrok)
+
+2002-03-01 22:45 hardaker
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ making the (same) debugging statement more useful.
+
+2002-03-01 22:43 hardaker
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ add missing newline to a debugging statement.
+
+2002-03-01 12:49 hardaker
+
+ * snmplib/: keytools.c, mib.c, snmp_api.c,
+ snmp_client.c, snmp_parse_args.c, snmpv3.c:
+
+ First pass at a few better error messages.
+
+2002-03-01 12:01 hardaker
+
+ * mibs/Makefile.in:
+
+ don't install headers here.
+
+2002-03-01 05:41 jbpn
+
+ * include/net-snmp/library/mib.h, snmplib/mib.c:
+
+ - add snprint_value, snprint_variable, snprint_objid
+
+2002-02-28 06:54 dts12
+
+ * agent/snmp_vars.c, snmplib/snmpCallbackDomain.c,
+ win32/libsnmp/libsnmp.dsp, win32/net-snmp/net-snmp-config.h
+:
+
+ Add back the 'snmpCallback' domain under Windows.
+
+2002-02-27 10:04 jbpn
+
+ * apps/: snmpbulkget.c, snmpbulkwalk.c, snmpget.c
+, snmpgetnext.c, snmpset.c, snmpstatus.c
+, snmptable.c, snmptest.c, snmptranslate.c
+, snmptrap.c, snmpusm.c, snmpwalk.c:
+
+ - tart up usage messages, make them more consistent and bring in line
+ with manual pages
+
+2002-02-27 10:03 jbpn
+
+ * man/: snmpset.1.def, snmptable.1.def, snmptrap.1.def
+, snmpusm.1.def:
+
+ - minor formatting changes
+
+2002-02-27 10:03 jbpn
+
+ * snmplib/: mib.c, parse.c, snmp_parse_args.c
+:
+
+ - drop community positional parameter
+
+ - tart up usage messages to be more consistent and in line with manual
+ pages
+
+2002-02-27 09:47 dts12
+
+ * snmplib/: vacm.c (V4-2-patches.4), vacm.c:
+
+ Handle views that specify a full instance OID.
+ (Since the internally stored OID prepends the length as well,
+ the apparent length is one greater than it really is)
+
+2002-02-27 06:50 jbpn
+
+ * apps/snmptrapd.c:
+
+ - [ADDRESSES] -> [LISTENING ADDRESSES] in usage message, to match
+ manual page.
+
+2002-02-27 06:09 jbpn
+
+ * man/snmpd.conf.5.def:
+
+ - drop optional positional community parameter from trapsess
+ description.
+
+2002-02-27 05:51 jbpn
+
+ * include/net-snmp/library/mib.h, snmplib/mib.c:
+
+ - drop sprint_blah functions
+
+ - no snprint_blah yet
+
+2002-02-27 05:43 jbpn
+
+ * snmplib/asn1.c:
+
+ - don't use sprint_blah functions
+
+2002-02-27 05:40 jbpn
+
+ * snmplib/snmp_debug.c:
+
+ - don't use sprint_blah functions
+
+ - drop archaic DEBUGP functions
+
+2002-02-27 05:37 dts12
+
+ * agent/mibgroup/host/: hr_storage.c, hr_swrun.c:
+
+ Use the more informative 'output_api.h' header file name
+ (I must have missed these earlier)
+
+2002-02-27 05:35 jbpn
+
+ * man/snmpcmd.1.def:
+
+ - drop community positional parameter
+
+ - yes, for once the documentation has been updated *before* the
+ code!
+
+2002-02-27 05:12 jbpn
+
+ * agent/mibgroup/mibII/ipv6.c:
+
+ - don't use obsolete DEBUGP function
+
+2002-02-27 05:11 jbpn
+
+ * include/net-snmp/library/: snmp_api.h, snmp_debug.h,
+ system.h:
+
+ - drop archaic DEBUGP functions
+
+2002-02-27 05:10 jbpn
+
+ * include/net-snmp/library/scapi.h:
+
+ - don't use obsolete DEBUGPL function
+
+2002-02-27 04:32 jbpn
+
+ * apps/snmpbulkwalk.c, apps/snmpdelta.c,
+ apps/snmptable.c, apps/snmpusm.c, apps/snmpwalk.c
+, agent/agent_index.c, agent/helpers/table.c:
+
+ - don't use sprint_blah functions
+
+2002-02-27 02:26 jbpn
+
+ * agent/mibgroup/agentx/master.c:
+
+ - don't use sprint_variable
+
+2002-02-27 02:08 jbpn
+
+ * agent/snmp_agent.c:
+
+ - don't use sprint_variable, no, I MEAN it this time
+
+2002-02-27 02:05 jbpn
+
+ * agent/snmp_agent.c:
+
+ - don't use sprint_variable
+
+2002-02-26 12:46 rstory
+
+ * agent/snmp_agent.c:
+
+ clear new memory after realloc() since realloc doesn't do it.
+
+2002-02-26 12:30 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ add UNSIGNED32
+
+2002-02-26 08:55 jbpn
+
+ * agent/mibgroup/: kernel_sunos5.c, kernel_sunos5.h,
+ mibII/at.c, mibII/icmp.c, mibII/interfaces.c,
+ mibII/ip.c, mibII/tcp.c, mibII/udp.c,
+ mibII/var_route.c:
+
+ - change cache implementation after some interesting profiling (see
+ lengthy new comment in kernel_sunos5.c)
+
+2002-02-26 08:13 dts12
+
+ * agent/helpers/all_helpers.c, agent/helpers/table.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/ucd-snmp/proxy.c, snmplib/snmp-tc.c,
+ snmplib/ucd_compat.c:
+
+ Remove assorted extraneous ^M's
+
+2002-02-26 07:14 dts12
+
+ * README.win32:
+
+ A quick guide to installing the Core Platform SDK, needed for the Windows agent.
+
+2002-02-26 07:03 dts12
+
+ * agent/agent_trap.c, agent/snmp_vars.c,
+ agent/snmpd.c, agent/helpers/table_dataset.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/udp.c, agent/mibgroup/mibII/vacm_vars.c
+, apps/snmptrapd_log.c,
+ include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/agent_trap.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/library/mib.h,
+ include/net-snmp/library/snmp_enum.h, snmplib/mib.c,
+ snmplib/snmp_parse_args.c, snmplib/snmpv3.c,
+ snmplib/winservice.c:
+
+ Assorted minor tweaks to ensure that the project builds under Visual C++.
+ Mostly because VC++ is fussy about sort-of-compatible data types
+ (e.g. signed vs unsigned integers).
+
+2002-02-26 07:00 dts12
+
+ * win32/: mib_module_inits.h, win32.dsw, win32.opt
+, libagent/libagent.dsp, libsnmp/libsnmp.dsp,
+ libucdmibs/libucdmibs.dsp, netsnmpmibs/netsnmpmibs.dsp,
+ snmpd/snmpd.dsp, snmptrapd/snmptrapd.dsp:
+
+ Rename 'libucdmibs' to reflect the change of project name,
+ and assorted tweaks so that the full project builds under Visual C++.
+ (N.B: The agent requires "Microsoft Platform Core SDK" in order
+ to build the 'netsnmpmibs' project)
+
+2002-02-26 06:53 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ remove duplicate variable in a warning
+
+2002-02-26 06:40 jbpn
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ - include net-snmp-config.h
+
+2002-02-25 21:09 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ more install changes
+
+2002-02-25 21:08 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ mention installing DBD::File.
+
+2002-02-25 20:38 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ one too many '0's in a url.
+
+2002-02-25 20:33 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ reword.
+
+2002-02-25 20:30 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ move warning outside secondary warning augmentation loop.
+
+2002-02-25 20:29 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ update SQL::Statement module.
+
+2002-02-25 16:25 rstory
+
+ * agent/helpers/table_array.c:
+
+ add find_table_array_handler(); remove debugging code/comments;
+ make sure we have the right handler before using the void pointer;
+ remove ^M characters
+
+2002-02-25 11:57 hardaker
+
+ * snmplib/data_list.c, include/net-snmp/library/data_list.h
+:
+
+ 2 new functions.
+
+2002-02-25 11:18 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ set security model
+
+2002-02-25 08:15 dts12
+
+ * agent/helpers/all_helpers.c, agent/helpers/old_api.c
+, agent/helpers/table.c, agent/helpers/table_array.c
+, agent/helpers/table_dataset.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/ucd-snmp/proxy.c,
+ include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/table.h, win32/win32.dsw:
+
+ Continuing improvements to compilation of the latest code under Visual C++.
+ The 'libhelpers' project now compiles, and this also addresses a number
+ of warnings and errors in the libagent and libucdmibs projects.
+ But these two still fail on 'OID_LENGTH' and 'iphlpapi.h'
+
+2002-02-25 07:00 dts12
+
+ * win32/net-snmp/agent/mib_module_config.h:
+
+ Provide a plausible module configuration list for the Windows agent.
+
+2002-02-25 06:04 jbpn
+
+ * mibs/NET-SNMP-AGENT-MIB.txt:
+
+ - resolve conflicting SYNTAXes for nsTransactionMode
+
+ - add range for index nsTransactionID
+
+2002-02-25 03:23 dts12
+
+ * win32/: libsnmp/libsnmp.dsp, libsnmp_dll/libsnmp_dll.dsp
+:
+
+ Ensure the main library compiles and works under Windows.
+
+2002-02-25 03:19 dts12
+
+ * apps/: notification_log.h, snmptrapd.c:
+
+ Ensure snmptrapd compiles under Windows.
+
+2002-02-25 03:09 dts12
+
+ * snmplib/: oid_array.c, oid_stash.c, snmp-tc.c,
+ ucd_compat.c:
+
+ Minor tweaks to keep Visual C++ happy.
+
+2002-02-25 02:57 dts12
+
+ * include/net-snmp/version.h:
+
+ Wrap with "extern C"
+
+2002-02-25 02:56 dts12
+
+ * include/net-snmp/library/cmu_compat.h:
+
+ Pander to CPP's incredibly fussy nature, and provide the correct header file name.
+
+2002-02-25 01:21 dts12
+
+ * agent/: snmpd.c (V4-2-patches.1), snmpd.c:
+
+ Specify the correct debug token for displaying the list of modules
+ (spotted by Brian Shaver)
+
+2002-02-22 10:56 hardaker
+
+ * local/mib2c:
+
+ support @foreach $var1 $var2 enums@
+
+2002-02-22 10:56 hardaker
+
+ * perl/AnyData_SNMP/snmpsh:
+
+ remove trailing ;'s from sql statements.
+
+2002-02-22 10:55 hardaker
+
+ * include/net-snmp/library/tools.h, snmplib/tools.c:
+
+ define netsnmp_strdup_and_null
+
+2002-02-22 10:53 hardaker
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ include utilities.
+
+2002-02-22 10:51 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ - don't loop again for secondary SET modes and cache information instead.
+ - various fixes.
+
+2002-02-22 10:49 hardaker
+
+ * agent/helpers/Makefile.in:
+
+ fix install directories for headers
+
+2002-02-22 10:49 hardaker
+
+ * net-snmp-config.in:
+
+ add --compile-subagent for automatted subagent compilation from
+ mibmodule .c files ;-)
+
+2002-02-22 09:27 dts12
+
+ * snmplib/: MSG00001.bin, winservice.mc (V4-2-patches.[1,1]),
+ MSG00001.bin, winservice.mc:
+
+ Add missing files for Windows service operation.
+
+2002-02-22 08:55 dts12
+
+ * agent/snmpd.c:
+
+ Just close the main session when shutting down under Windows,
+ not everything (so that it can still generate the shutdown trap).
+
+2002-02-22 08:40 dts12
+
+ * include/net-snmp/types.h,
+ include/net-snmp/library/snmp_impl.h, snmplib/asn1.c,
+ snmplib/mib.c, snmplib/parse.c, snmplib/snmp_api.c
+, snmplib/snmp_enum.c, snmplib/snmpv3.c:
+
+ Tweaks required to get the library compiling under Windows VC++
+
+2002-02-22 08:37 dts12
+
+ * win32/: snmpsm_init.h,
+ encode_keychange/encode_keychange.dsp,
+ net-snmp/net-snmp-config.h, libagent/libagent.dsp,
+ libhelpers/libhelpers.dsp, libsnmp/libsnmp.dsp,
+ libsnmp_dll/libsnmp_dll.dsp, libucdmibs/libucdmibs.dsp
+, snmpbulkget/snmpbulkget.dsp,
+ snmpbulkwalk/snmpbulkwalk.dsp, snmpd/snmpd.dsp,
+ snmpdelta/snmpdelta.dsp, snmpdf/snmpdf.dsp,
+ snmpget/snmpget.dsp, snmpgetnext/snmpgetnext.dsp,
+ snmpnetstat/snmpnetstat.dsp, snmpset/snmpset.dsp,
+ snmpstatus/snmpstatus.dsp, snmptable/snmptable.dsp,
+ snmptest/snmptest.dsp, snmptranslate/snmptranslate.dsp
+, snmptrap/snmptrap.dsp, snmptrapd/snmptrapd.dsp
+, snmpusm/snmpusm.dsp, snmpvacm/snmpvacm.dsp,
+ snmpwalk/snmpwalk.dsp:
+
+ Provide Windows-specific versions of automatically-generated header files,
+ and add the new include structure to the project files.
+
+2002-02-22 07:24 dts12
+
+ * include/net-snmp/library/transform_oids.h:
+
+ Define standard OID lengths here (where they're available to any
+ file wanting to access the OID structures)
+
+2002-02-22 03:24 dts12
+
+ * snmplib/: snmp_parse_args.c, snmpv3.c:
+
+ Support ".... -3u {secName} ...." syntax
+ (in the normal getopt style - i.e. no need for surrounding quotes)
+
+ It should now be possible to switch to this as the recommended form
+ for SNMPv3 options - if that's what we want to do.
+ Qn: Do we want to?
+
+2002-02-21 08:39 dts12
+
+ * snmplib/snmpv3.c:
+
+ Support "-3u {secName}" syntax (*with* the quotes, unfortunately).
+ Now comes the fun bit.....
+
+2002-02-21 07:54 dts12
+
+ * win32/snmpd/snmpd.dsp:
+
+ Fix bogus structure comments in the snmpd project file.
+
+2002-02-21 07:30 jbpn
+
+ * agent/mibgroup/: notification/snmpNotifyTable.c,
+ target/snmpTargetAddrEntry.c:
+
+ - drop inline (more trouble than it is worth)
+
+2002-02-21 05:00 dts12
+
+ * snmplib/: snmp_parse_args.c, snmpv3.c:
+
+ First pass at an SNMPv3 "combined-option" command-line flag (-3x).
+ (In *addition* to the current command-line flags, I hasten to add!)
+
+ Supports "... -3u{secName} ..." and "... -3u={secName} ..." syntax,
+ but not the separate "... -3u {secName} ..." style.
+
+ I haven't touched the documentation or usage message to mention this.
+
+2002-02-20 18:15 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ use for instead of continue for loops.
+
+2002-02-20 13:42 hardaker
+
+ * README.snmpv3, agent/agent_read_config.c,
+ agent/snmpd.c, apps/snmptrapd.c,
+ include/net-snmp/agent/ds_agent.h:
+
+ - Add a --quit option (and a configuration token) so that you can now
+ create new users by simply calling snmpd as:
+ snmpd --createUser="myuser MD5 mypassword" --quit
+ - Change README.snmpv3 documentation to make use of this feature.
+
+2002-02-20 06:16 jbpn
+
+ * apps/Makefile.in, apps/snmptrapd.c, configure
+, configure.in, agent/snmp_agent.c:
+
+ - add libwrap support to snmptrapd (untested)
+
+ - minor changes to snmpd libwrap support
+
+ - configure fixes for libwrap
+
+2002-02-20 03:07 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - use calloc instead of malloc to make sure buffer is initially
+ zero-terminated (in case of 0 varbinds). Bug #518700, noted by
+ Andreas Hartmann.
+
+2002-02-20 03:06 jbpn
+
+ * apps/snmpdelta.c:
+
+ - initialise some buffers, to avoid garbage printing problems, as
+ noted by Anonymous in bug #520220.
+
+2002-02-20 03:03 dts12
+
+ * apps/Makefile.in:
+
+ Clean up the object files as well
+
+2002-02-20 01:41 dts12
+
+ * man/.cvsignore:
+
+ Ignore the new crop of generated man pages.
+
+2002-02-20 01:37 dts12
+
+ * mibs/NET-SNMP-AGENT-MIB.txt:
+
+ Supply missing double-quote (oops)
+
+2002-02-19 04:01 dts12
+
+ * apps/snmptranslate.c:
+
+ Initialise the library internals *before* parsing the command line,
+ so that defaults can be overridden by command line options.
+ Qn: Should '_init_snmp' be invoked by 'snmp_parse_args' itself?
+
+2002-02-19 03:59 dts12
+
+ * snmplib/mib.c:
+
+ Make sure that multiple output format flags work in a consistent manner.
+ (i.e. the last one is used, rather than relying on internal ordering).
+
+2002-02-18 21:58 hardaker
+
+ * agent/mibgroup/: testdelayed.c, testhandler.c:
+
+ include stdlib.h
+
+2002-02-18 21:52 hardaker
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ fix includes
+
+2002-02-18 21:51 hardaker
+
+ * agent/helpers/table_iterator.c,
+ include/net-snmp/agent/table_iterator.h:
+
+ - make capability to create data contexts from a loop context (less
+ mallocs when mallocs aren't otherwise avoidable).
+ - don't double free the data context pointer.
+
+2002-02-18 21:50 hardaker
+
+ * include/net-snmp/agent/net-snmp-agent-includes.h:
+
+ include all agent helpers.
+
+2002-02-18 21:49 hardaker
+
+ * include/net-snmp/agent/multiplexer.h:
+
+ protect include from double include
+
+2002-02-18 08:38 hardaker
+
+ * agent/mibgroup/mibincl.h:
+
+ fix include paths
+
+2002-02-18 02:35 dts12
+
+ * agent/Makefile.in, snmplib/Makefile.in:
+
+ Tweak the list of header files to be installed (thanks to Christoph Mammitzsch)
+
+2002-02-18 02:29 dts12
+
+ * agent/mibgroup/host/: hr_storage.c (V4-2-patches.7), hr_storage.c
+:
+
+ Remove a couple of unhelpful OSF definitions (thanks to Jeroen Ruigrok)
+
+2002-02-18 00:13 hardaker
+
+ * snmplib/: asn1.c (V4-2-patches.3), asn1.c:
+
+ don't build oid's with >128 length subids. (see bug #518855)
+
+2002-02-16 23:18 hardaker
+
+ * mibs/: NET-SNMP-MIB.txt, NET-SNMP-MONITOR-MIB.txt,
+ NET-SNMP-SYSTEM-MIB.txt, NET-SNMP-TC.txt:
+
+ white space clean up. (AGENT-MIB not checked in due to other
+ incomplete changes).
+
+2002-02-16 00:17 hardaker
+
+ * NEWS, agent/snmpd.c, apps/snmptrapd.c,
+ include/net-snmp/library/default_store.h,
+ include/net-snmp/library/read_config.h, snmplib/read_config.c
+, snmplib/snmp_parse_args.c:
+
+ - finish implementing snmp_config("my config line")
+ - was done before, but previously had to be called only after
+ configuration files had been read. Now can be called at any time.
+ - make all configuration options available as --longopts command line options.
+ - --something=value -> "something value"
+ - --something -> "something 1" (works for setting booleans to true)
+
+2002-02-16 00:02 hardaker
+
+ * agent/Makefile.in:
+
+ install mib_module_config.h
+
+2002-02-16 00:01 hardaker
+
+ * configure, configure.in:
+
+ fix rpm for 4.0.3 and above (or whenever it was that we now need librpmdb)
+
+2002-02-16 00:01 hardaker
+
+ * Makefile.in, Makefile.rules:
+
+ fix net-snmp-config install/clean/etc.
+
+2002-02-15 22:34 hardaker
+
+ * Makefile.in, Makefile.rules:
+
+ install all system and machine files, since they include each other
+
+2002-02-15 09:28 dts12
+
+ * agent/mibgroup/agent/nsTransactionTable.c,
+ mibs/NET-SNMP-AGENT-MIB.txt, mibs/NET-SNMP-MIB.txt,
+ mibs/NET-SNMP-MONITOR-MIB.txt, mibs/NET-SNMP-SYSTEM-MIB.txt
+, mibs/NET-SNMP-TC.txt:
+
+ Skeleton framework for the Net-SNMP enterprise tree.
+ (incorporating the initial 'nsTransactionTable', but nothing else as yet)
+
+2002-02-15 09:10 dts12
+
+ * apps/snmptable.c, apps/snmptranslate.c,
+ snmplib/snmp_parse_args.c:
+
+ Remove support for deprecated command-line options.
+
+2002-02-15 07:28 dts12
+
+ * include/net-snmp/library/winservice.h, snmplib/winservice.c
+, agent/snmpd.c, snmplib/Makefile.in,
+ snmplib/winservice.rc, win32/snmpd/snmpd.dsp:
+
+ Support for running as a Windows service.
+ (Supplied by Raju Krishnappa & Lathu Prabhu)
+
+2002-02-15 07:25 dts12
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ Stoke Wes' sense of paranoia by conceding without comment.
+ (What might Shield be plotting now......)
+
+2002-02-15 07:19 jbpn
+
+ * man/snmpusm.1.def:
+
+ - fix tiny formatting error
+
+2002-02-15 07:17 dts12
+
+ * mibs/Makefile.in:
+
+ Install NOTIFICATION-LOG-MIB (since it's one of the default load list!)
+
+2002-02-15 06:47 dts12
+
+ * snmplib/winservice.rc:
+
+ file winservice.rc was initially added on branch V4-2-patches.
+
+2002-02-15 06:47 dts12
+
+ * snmplib/winservice.h:
+
+ file winservice.h was initially added on branch V4-2-patches.
+
+2002-02-15 06:47 dts12
+
+ * snmplib/winservice.c:
+
+ file winservice.c was initially added on branch V4-2-patches.
+
+2002-02-15 06:08 dts12
+
+ * include/net-snmp/types.h:
+
+ Include the <sys/time.h> cascade, to pick up the definition of 'timeval'
+
+2002-02-15 04:29 jbpn
+
+ * agent/snmpd.c:
+
+ - minor change to bring usage message in line with manpage
+
+2002-02-15 03:29 dts12
+
+ * snmplib/snmp_parse_args.c:
+
+ Catch use of the transport and port options, and issue an appropriate
+ error message, describing use of the <hostname> parameter instead.
+
+2002-02-15 03:11 dts12
+
+ * snmplib/: mib.c, snmp_api.c:
+
+ Set the default output format *before* processing command line options,
+ rather than after. That's probably a bit more flexible:-)
+
+2002-02-15 02:37 dts12
+
+ * include/net-snmp/: config_api.h, definitions.h,
+ mib_api.h, output_api.h, pdu_api.h, session_api.h
+, snmpv3_api.h, types.h, utilities.h,
+ varbind_api.h:
+
+ Remove 'net-snmp-config.h' from the main API header files.
+ This will have to be #included separately (either explicitly
+ or via the all-in-one 'net-snmp-includes.h' header)
+
+2002-02-15 02:31 dts12
+
+ * snmplib/Makefile.in:
+
+ Install the README to describe the status of <net-snmp/library> and <net-snmp> header files.
+
+2002-02-15 02:13 dts12
+
+ * man/Makefile.in, mibs/Makefile.in:
+
+ Install the {system,machine}/*.h header files as well.
+
+ Doing this via the 'man' & 'mibs' Makefiles is a gross hack,
+ and really needs to be handled more cleanly. But it's the
+ best I can come up with at the moment. Sorry - Dave.
+
+2002-02-15 01:59 dts12
+
+ * snmplib/Makefile.in, agent/Makefile.in:
+
+ Install the UCD-compatability headers as well.
+
+2002-02-15 01:57 dts12
+
+ * Makefile.rules:
+
+ Only install subdirectory stuff *once*. (Don't be so enthusiastic, Dave!)
+
+2002-02-15 01:31 dts12
+
+ * README.snmpv3:
+
+ Remove redundent '-CN' and '-CO' options from the example snmpusm command.
+ (as mentioned by Wes on the users mailing list 2002-02-13)
+ Qn: Does this need to be done on the V4-2-patches branch as well?
+
+2002-02-15 01:15 dts12
+
+ * include/net-snmp/utilities.h, include/net-snmp/version.h
+, include/net-snmp/library/version.h,
+ include/ucd-snmp/version.h, snmplib/snmp_parse_args.c,
+ snmplib/snmp_version.c:
+
+ Restore 'version.h' as being a "top-level" header file.
+
+2002-02-15 01:13 dts12
+
+ * snmplib/Makefile.in:
+
+ Install the full set of library header files,
+ retaining the top-level vs library subdirectory split.
+
+2002-02-15 01:10 dts12
+
+ * configure, configure.in:
+
+ Look for transport-related header files in the correct location.
+
+2002-02-15 01:09 dts12
+
+ * Makefile.rules:
+
+ Ensure partial install targets recurse properly.
+
+2002-02-14 08:18 dts12
+
+ * testing/eval_tools.sh:
+
+ Look for mib_module_config.h in the correct location
+
+2002-02-14 08:06 hardaker
+
+ * man/Makefile.in:
+
+ fix man8 install definitions
+
+2002-02-14 07:48 dts12
+
+ * Makefile.rules, net-snmp-config.in:
+
+ Substitute values into 'net-snmp-config' properly, and don't 'make clean' it away.
+
+2002-02-14 07:22 dts12
+
+ * man/Makefile.in:
+
+ Tidy up after moving the library header files
+
+2002-02-14 07:14 dts12
+
+ * configure, configure.in:
+
+ Tidy up after moving the library header files (including Makefile dependencies)
+
+2002-02-14 07:10 dts12
+
+ * include/net-snmp/agent/agent_registry.h,
+ snmplib/Makefile.depend, snmplib/default_store.c,
+ snmplib/read_config.c, snmplib/snmp_debug.c,
+ snmplib/snmp_logging.c, snmplib/snmp_parse_args.c,
+ snmplib/system.c, snmplib/tools.c,
+ agent/Makefile.depend, apps/Makefile.depend,
+ apps/snmpbulkget.c, apps/snmpget.c, apps/snmpstatus.c
+, apps/snmptranslate.c,
+ apps/snmpnetstat/Makefile.depend, apps/snmpnetstat/main.c
+, include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/snmp_vars.h,
+ include/net-snmp/agent/table_array.h,
+ include/net-snmp/library/data_list.h,
+ include/net-snmp/library/oid_array.h,
+ include/net-snmp/library/snmpAAL5PVCDomain.h,
+ include/net-snmp/library/snmpCallbackDomain.h,
+ include/net-snmp/library/snmpIPXDomain.h,
+ include/net-snmp/library/snmpTCPDomain.h,
+ include/net-snmp/library/snmpTCPIPv6Domain.h,
+ include/net-snmp/library/snmpUDPDomain.h,
+ include/net-snmp/library/snmpUDPIPv6Domain.h,
+ include/net-snmp/library/snmpUnixDomain.h,
+ include/net-snmp/library/snmp_transport.h, agent/agent_trap.c
+, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, agent/mibgroup/host_res.h
+, agent/mibgroup/mibII/vacm_vars.h,
+ agent/mibgroup/snmpv3/usmUser.h:
+
+ Tidy up after moving the library header files (including Makefile dependencies)
+
+2002-02-14 07:08 dts12
+
+ * agent/helpers/Makefile.in:
+
+ Remove an extraneous space from CPPFLAGS
+
+2002-02-14 06:23 dts12
+
+ * include/net-snmp/: config_api.h, definitions.h,
+ mib_api.h, net-snmp-includes.h, output_api.h,
+ pdu_api.h, session_api.h, snmpv3_api.h, types.h
+, utilities.h, varbind_api.h:
+
+ Separate out top-level "public API" library header files from the "internal"
+ library header files. These are still available for use by application
+ developers, but this split makes it clearer what may change in the future
+ and what can be relied upon to be stable.
+
+2002-02-14 06:19 dts12
+
+ * include/net-snmp/asn1.h, include/net-snmp/callback.h,
+ include/net-snmp/cmu_compat.h, include/net-snmp/data_list.h
+, include/net-snmp/default_store.h,
+ include/net-snmp/getopt.h, include/net-snmp/int64.h,
+ include/net-snmp/keytools.h, include/net-snmp/lcd_time.h
+, include/net-snmp/libsnmp.h, include/net-snmp/md5.h
+, include/net-snmp/mib.h, include/net-snmp/mt_support.h
+, include/net-snmp/oid_array.h,
+ include/net-snmp/oid_stash.h, include/net-snmp/parse.h,
+ include/net-snmp/read_config.h, include/net-snmp/scapi.h
+, include/net-snmp/snmp-tc.h, include/net-snmp/snmp.h
+, include/net-snmp/snmpAAL5PVCDomain.h,
+ include/net-snmp/snmpCallbackDomain.h,
+ include/net-snmp/snmpIPXDomain.h,
+ include/net-snmp/snmpTCPDomain.h,
+ include/net-snmp/snmpTCPIPv6Domain.h,
+ include/net-snmp/snmpUDPDomain.h,
+ include/net-snmp/snmpUDPIPv6Domain.h,
+ include/net-snmp/snmpUnixDomain.h,
+ include/net-snmp/snmp_alarm.h, include/net-snmp/snmp_api.h
+, include/net-snmp/snmp_client.h,
+ include/net-snmp/snmp_debug.h, include/net-snmp/snmp_enum.h
+, include/net-snmp/snmp_impl.h,
+ include/net-snmp/snmp_locking.h,
+ include/net-snmp/snmp_logging.h,
+ include/net-snmp/snmp_parse_args.h,
+ include/net-snmp/snmp_secmod.h,
+ include/net-snmp/snmp_transport.h, include/net-snmp/snmpksm.h
+, include/net-snmp/snmpusm.h, include/net-snmp/snmpv3.h
+, include/net-snmp/system.h, include/net-snmp/tools.h
+, include/net-snmp/transform_oids.h,
+ include/net-snmp/ucd_compat.h, include/net-snmp/vacm.h,
+ include/net-snmp/version.h, include/net-snmp/library/README
+, include/net-snmp/library/asn1.h,
+ include/net-snmp/library/callback.h,
+ include/net-snmp/library/cmu_compat.h,
+ include/net-snmp/library/data_list.h,
+ include/net-snmp/library/default_store.h,
+ include/net-snmp/library/getopt.h,
+ include/net-snmp/library/int64.h,
+ include/net-snmp/library/keytools.h,
+ include/net-snmp/library/lcd_time.h,
+ include/net-snmp/library/libsnmp.h,
+ include/net-snmp/library/md5.h,
+ include/net-snmp/library/mib.h,
+ include/net-snmp/library/mt_support.h,
+ include/net-snmp/library/oid_array.h,
+ include/net-snmp/library/oid_stash.h,
+ include/net-snmp/library/parse.h,
+ include/net-snmp/library/read_config.h,
+ include/net-snmp/library/scapi.h,
+ include/net-snmp/library/snmp-tc.h,
+ include/net-snmp/library/snmp.h,
+ include/net-snmp/library/snmpAAL5PVCDomain.h,
+ include/net-snmp/library/snmpCallbackDomain.h,
+ include/net-snmp/library/snmpIPXDomain.h,
+ include/net-snmp/library/snmpTCPDomain.h,
+ include/net-snmp/library/snmpTCPIPv6Domain.h,
+ include/net-snmp/library/snmpUDPDomain.h,
+ include/net-snmp/library/snmpUDPIPv6Domain.h,
+ include/net-snmp/library/snmpUnixDomain.h,
+ include/net-snmp/library/snmp_alarm.h,
+ include/net-snmp/library/snmp_api.h,
+ include/net-snmp/library/snmp_client.h,
+ include/net-snmp/library/snmp_debug.h,
+ include/net-snmp/library/snmp_enum.h,
+ include/net-snmp/library/snmp_impl.h,
+ include/net-snmp/library/snmp_locking.h,
+ include/net-snmp/library/snmp_logging.h,
+ include/net-snmp/library/snmp_parse_args.h,
+ include/net-snmp/library/snmp_secmod.h,
+ include/net-snmp/library/snmp_transport.h,
+ include/net-snmp/library/snmpksm.h,
+ include/net-snmp/library/snmpusm.h,
+ include/net-snmp/library/snmpv3.h,
+ include/net-snmp/library/system.h,
+ include/net-snmp/library/tools.h,
+ include/net-snmp/library/transform_oids.h,
+ include/net-snmp/library/ucd_compat.h,
+ include/net-snmp/library/vacm.h,
+ include/net-snmp/library/version.h, include/ucd-snmp/asn1.h
+, include/ucd-snmp/callback.h,
+ include/ucd-snmp/default_store.h, include/ucd-snmp/int64.h
+, include/ucd-snmp/keytools.h, include/ucd-snmp/mib.h
+, include/ucd-snmp/mibincl.h, include/ucd-snmp/parse.h
+, include/ucd-snmp/read_config.h,
+ include/ucd-snmp/scapi.h, include/ucd-snmp/snmp-tc.h,
+ include/ucd-snmp/snmp.h, include/ucd-snmp/snmp_alarm.h,
+ include/ucd-snmp/snmp_api.h, include/ucd-snmp/snmp_client.h
+, include/ucd-snmp/snmp_debug.h,
+ include/ucd-snmp/snmp_impl.h, include/ucd-snmp/snmp_logging.h
+, include/ucd-snmp/snmp_parse_args.h,
+ include/ucd-snmp/snmp_vars.h, include/ucd-snmp/snmpusm.h
+, include/ucd-snmp/snmpv3.h, include/ucd-snmp/system.h
+, include/ucd-snmp/tools.h,
+ include/ucd-snmp/transform_oids.h, include/ucd-snmp/version.h
+, snmplib/asn1.c, snmplib/callback.c,
+ snmplib/data_list.c, snmplib/default_store.c,
+ snmplib/int64.c, snmplib/keytools.c,
+ snmplib/lcd_time.c, snmplib/md5.c, snmplib/mib.c
+, snmplib/mt_support.c, snmplib/oid_array.c,
+ snmplib/oid_stash.c, snmplib/parse.c,
+ snmplib/read_config.c, snmplib/scapi.c,
+ snmplib/snmp-tc.c, snmplib/snmp.c,
+ snmplib/snmpAAL5PVCDomain.c, snmplib/snmpCallbackDomain.c
+, snmplib/snmpIPXDomain.c, snmplib/snmpTCPDomain.c
+, snmplib/snmpTCPIPv6Domain.c, snmplib/snmpUDPDomain.c
+, snmplib/snmpUDPIPv6Domain.c,
+ snmplib/snmpUnixDomain.c, snmplib/snmp_alarm.c,
+ snmplib/snmp_api.c, snmplib/snmp_auth.c,
+ snmplib/snmp_client.c, snmplib/snmp_debug.c,
+ snmplib/snmp_enum.c, snmplib/snmp_logging.c,
+ snmplib/snmp_parse_args.c, snmplib/snmp_secmod.c,
+ snmplib/snmp_transport.c, snmplib/snmp_version.c,
+ snmplib/snmpksm.c, snmplib/snmpusm.c, snmplib/snmpv3.c
+, snmplib/system.c, snmplib/tools.c,
+ snmplib/vacm.c:
+
+ Separate out top-level "public API" library header files from the "internal"
+ library header files. These are still available for use by application
+ developers, but this split makes it clearer what may change in the future
+ and what can be relied upon to be stable.
+
+2002-02-14 04:41 dts12
+
+ * include/net-snmp/definitions.h,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/output_api.h, include/net-snmp/snmp_impl.h
+, include/net-snmp/snmpv3_api.h, snmplib/asn1.c,
+ snmplib/callback.c, snmplib/default_store.c,
+ snmplib/int64.c, snmplib/keytools.c,
+ snmplib/lcd_time.c, snmplib/md5.c, snmplib/mib.c
+, snmplib/oid_stash.c, snmplib/parse.c,
+ snmplib/read_config.c, snmplib/scapi.c,
+ snmplib/snmp-tc.c, snmplib/snmp.c,
+ snmplib/snmpAAL5PVCDomain.c, snmplib/snmpCallbackDomain.c
+, snmplib/snmpIPXDomain.c, snmplib/snmpTCPDomain.c
+, snmplib/snmpTCPIPv6Domain.c, snmplib/snmpUDPDomain.c
+, snmplib/snmpUDPIPv6Domain.c,
+ snmplib/snmpUnixDomain.c, snmplib/snmp_alarm.c,
+ snmplib/snmp_api.c, snmplib/snmp_auth.c,
+ snmplib/snmp_client.c, snmplib/snmp_debug.c,
+ snmplib/snmp_logging.c, snmplib/snmp_parse_args.c,
+ snmplib/snmp_secmod.c, snmplib/snmp_transport.c,
+ snmplib/snmpksm.c, snmplib/snmpusm.c, snmplib/snmpv3.c
+, snmplib/system.c, snmplib/tools.c,
+ snmplib/vacm.c:
+
+ First moves towards using the "public" API header files in the library
+ code as well (concentrating on output/config/utility header files).
+
+2002-02-14 03:17 dts12
+
+ * configure, configure.in:
+
+ Close a dangling "if" block. (oops!)
+
+2002-02-14 01:47 dts12
+
+ * apps/snmpnetstat/: if.c (V4-2-patches.4), if.c:
+
+ Check for running off the end of I/F table (patch from RedHat)
+
+2002-02-14 01:43 dts12
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ Latest RedHat rpm-related patch
+
+2002-02-14 01:39 dts12
+
+ * configure, configure.in:
+
+ Adopt RedHat's configure testing for RPM libraries
+
+2002-02-13 08:39 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ Make John trust his code
+
+2002-02-13 08:34 jbpn
+
+ * perl/SNMP/SNMP.xs:
+
+ - transport fixes (untested, still #if 0)
+
+2002-02-13 08:03 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ mark some John-to-do-sections
+
+2002-02-13 07:57 dts12
+
+ * include/net-snmp/default_store.h, man/snmpcmd.1.def,
+ snmplib/mib.c:
+
+ Switch to using -OS style output by default, and drop the requirement
+ for full OIDs to start with '.', plus command-line options to restore
+ the original UCD-style behaviour.
+
+2002-02-13 07:36 dts12
+
+ * apps/snmptable.c:
+
+ Apply John's fix for bugs #489336 and #508146 (duplicate columns and
+ columns in wrong order) to the main branch as well.
+
+2002-02-12 16:40 hardaker
+
+ * snmplib/snmp_client.c:
+
+ const changes.
+
+2002-02-12 16:39 hardaker
+
+ * perl/: .cvsignore, ASN/.cvsignore, agent/.cvsignore
+, default_store/.cvsignore:
+
+ add .cvsignore file.
+
+2002-02-12 16:38 hardaker
+
+ * include/net-snmp/agent/net-snmp-agent-includes.h:
+
+ add agent/agent_handler.h
+
+2002-02-12 16:38 hardaker
+
+ * include/net-snmp/snmp_client.h:
+
+ const additions.
+
+2002-02-12 16:37 hardaker
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ Add string.h
+
+2002-02-12 16:37 hardaker
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ add header.
+
+2002-02-12 16:37 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ fixes to reenable disman event stuff for 5.0 code. Not done the
+ "right" way, but it works.
+
+2002-02-12 16:36 hardaker
+
+ * agent/helpers/old_api.c:
+
+ - -Wall fixes
+
+2002-02-12 16:36 hardaker
+
+ * agent/helpers/instance.c:
+
+ - add stdlib.h
+ - remove unused variable.
+
+2002-02-12 16:35 hardaker
+
+ * agent/snmp_agent.c:
+
+ remove no longer used "dump_var" routine.
+
+2002-02-12 16:35 hardaker
+
+ * agent/agent_handler.c,
+ include/net-snmp/agent/agent_handler.h:
+
+ const specific changes.
+
+2002-02-12 16:34 hardaker
+
+ * NEWS:
+
+ added new perl specific features.
+
+2002-02-12 16:34 hardaker
+
+ * Makefile.in:
+
+ .PHNOY mods
+
+2002-02-12 07:22 dts12
+
+ * agent/Makefile.depend, apps/Makefile.depend,
+ apps/snmptranslate.c, apps/snmptrapd_handlers.c,
+ apps/snmpnetstat/Makefile.depend,
+ include/net-snmp/net-snmp-includes.h,
+ include/net-snmp/logging_api.h, include/net-snmp/output_api.h
+:
+
+ Rename the logging & related output API header file, to better
+ reflect the scope of this API. (As suggested by Wes & John)
+
+2002-02-12 07:21 jbpn
+
+ * configure.in:
+
+ - amend fix to bug #516389 (ucd-snmp 4.2.3 libwrap support broken) to
+ actually add -lnsl to link parameters!
+
+2002-02-12 05:39 jbpn
+
+ * configure.in:
+
+ - fix bug #516389 (ucd-snmp 4.2.3 libwrap support broken) -- USE_LIBWRAP
+ was not being #defined in the case where -lnsl is needed in addition
+ to -lwrap.
+
+2002-02-11 15:56 hardaker
+
+ * agent/Makefile.in:
+
+ lib dependency fix for snmpd target
+
+2002-02-11 08:29 dts12
+
+ * include/net-snmp/cmu_compat.h, include/net-snmp/mib.h
+, include/net-snmp/mib_api.h,
+ include/net-snmp/net-snmp-includes.h,
+ include/net-snmp/parse.h, include/net-snmp/session_api.h
+, include/net-snmp/snmp.h, include/net-snmp/snmp_api.h
+, include/net-snmp/snmp_impl.h,
+ include/net-snmp/ucd_compat.h, snmplib/cmu_compat.c,
+ snmplib/Makefile.in, snmplib/mib.c, snmplib/parse.c
+, snmplib/snmp_api.c, snmplib/ucd_compat.c:
+
+ Extract CMU_COMPATABILITY code, and explicitly deprecated UCD code into separate files.
+
+2002-02-11 08:23 dts12
+
+ * snmplib/: snmp_parse_args.c (V4-2-patches.2), snmp_parse_args.c
+:
+
+ Use the 'ds_set_xxx' library routines, rather than the old 'snmp_set_xxx' calls
+
+2002-02-11 04:45 jbpn
+
+ * man/: snmp.conf.5.def, snmp_config.5.def,
+ snmptrapd.conf.5.def:
+
+ minor spelling tweaks
+
+2002-02-11 04:27 jbpn
+
+ * man/: Makefile.in, default_store.3.top, mib_api.3
+, mib_api.3.def, snmp_agent_api.3,
+ snmp_agent_api.3.def, snmp_alarm.3, snmp_alarm.3.def
+, snmp_api.3, snmp_api.3.def, snmp_sess_api.3
+, snmp_sess_api.3.def, snmp_trap_api.3,
+ snmp_trap_api.3.def, variables.5, variables.5.def
+:
+
+ - generate the rest of the manual pages (to get version in footer)
+
+2002-02-08 15:56 hardaker
+
+ * win32/: config.h, mib_module_config.h,
+ mib_module_inits.h, libsnmp/libsnmp.dsp,
+ libsnmp_dll/libsnmp.def, libsnmp_dll/libsnmp_dll.dsp,
+ libucdmibs/libucdmibs.dsp, snmpd/snmpd.dsp:
+
+ win32 specific portions of patch 503256
+
+2002-02-08 15:53 hardaker
+
+ * win32/libhelpers/libhelpers.dsp:
+
+ patch#503256: helpers library definition for win32
+
+2002-02-08 09:08 jbpn
+
+ * man/snmpd.conf.5.def:
+
+ - minor format tweakage
+
+2002-02-08 08:22 dts12
+
+ * man/: mib_api.3, snmp_agent_api.3, snmp_alarm.3
+, snmp_api.3, snmp_sess_api.3, snmp_trap_api.3
+:
+
+ Reference the new header-files in section 3 man page synopses.
+
+2002-02-08 07:50 jbpn
+
+ * man/: mib_api.3, read_config.3.def, snmp_agent_api.3
+, snmp_config.5.def, snmp_trap_api.3,
+ snmpcmd.1.def, snmpconf.1.def, snmpd.conf.5.def,
+ variables.5:
+
+ - more minor tweaks (ucd-snmp -> Net-SNMP etc.)
+
+2002-02-08 07:48 hardaker
+
+ * agent/Makefile.depend:
+
+ remove local modules from dependency list
+
+2002-02-08 07:45 dts12
+
+ * agent/: agent_handler.c, agent_index.c,
+ agent_read_config.c, agent_registry.c, agent_trap.c
+, auto_nlist.c, kernel.c, mib_modules.c,
+ snmp_agent.c, snmp_vars.c, snmpd.c,
+ helpers/bulk_to_next.c, helpers/debug_handler.c,
+ helpers/instance.c, helpers/multiplexer.c,
+ helpers/null.c, helpers/old_api.c, helpers/read_only.c
+, helpers/serialize.c, helpers/table.c,
+ helpers/table_array.c, helpers/table_data.c,
+ helpers/table_dataset.c, helpers/table_iterator.c,
+ mibgroup/header_complex.c, mibgroup/kernel_sunos5.c,
+ mibgroup/testdelayed.c, mibgroup/testhandler.c,
+ mibgroup/util_funcs.c, mibgroup/Rmon/agutil.c,
+ mibgroup/Rmon/alarm.c, mibgroup/Rmon/event.c,
+ mibgroup/Rmon/history.c, mibgroup/Rmon/rows.c,
+ mibgroup/Rmon/statistics.c,
+ mibgroup/agent/nsTransactionTable.c,
+ mibgroup/agentx/agentx_config.c, mibgroup/agentx/client.c
+, mibgroup/agentx/master.c,
+ mibgroup/agentx/master_admin.c,
+ mibgroup/agentx/master_request.c, mibgroup/agentx/protocol.c
+, mibgroup/agentx/subagent.c,
+ mibgroup/disman/mteObjectsTable.c,
+ mibgroup/disman/mteTriggerBooleanTable.c,
+ mibgroup/disman/mteTriggerDeltaTable.c,
+ mibgroup/disman/mteTriggerExistenceTable.c,
+ mibgroup/disman/mteTriggerTable.c,
+ mibgroup/disman/mteTriggerThresholdTable.c,
+ mibgroup/examples/example.c,
+ mibgroup/examples/ucdDemoPublic.c,
+ mibgroup/host/hr_filesys.c, mibgroup/host/hr_storage.c
+, mibgroup/host/hr_swinst.c, mibgroup/host/hr_swrun.c
+, mibgroup/host/hr_system.c, mibgroup/mibII/at.c
+, mibgroup/mibII/icmp.c, mibgroup/mibII/interfaces.c
+, mibgroup/mibII/ip.c, mibgroup/mibII/ipAddr.c,
+ mibgroup/mibII/ipv6.c, mibgroup/mibII/kernel_linux.c,
+ mibgroup/mibII/mta_sendmail.c, mibgroup/mibII/route_write.c
+, mibgroup/mibII/snmp_mib.c,
+ mibgroup/mibII/sysORTable.c, mibgroup/mibII/system_mib.c
+, mibgroup/mibII/tcp.c, mibgroup/mibII/tcpTable.c
+, mibgroup/mibII/udp.c, mibgroup/mibII/udpTable.c
+, mibgroup/mibII/vacm_context.c,
+ mibgroup/mibII/vacm_vars.c, mibgroup/mibII/var_route.c
+, mibgroup/misc/dlmod.c, mibgroup/misc/ipfwacc.c
+, mibgroup/notification/snmpNotifyFilterProfileTable.c,
+ mibgroup/notification/snmpNotifyFilterTable.c,
+ mibgroup/notification/snmpNotifyTable.c,
+ mibgroup/smux/smux.c, mibgroup/smux/snmp_bgp.c,
+ mibgroup/smux/snmp_ospf.c, mibgroup/smux/snmp_rip2.c,
+ mibgroup/snmpv3/snmpEngine.c, mibgroup/snmpv3/snmpMPDStats.c
+, mibgroup/snmpv3/usmStats.c,
+ mibgroup/snmpv3/usmUser.c,
+ mibgroup/target/snmpTargetAddrEntry.c,
+ mibgroup/target/snmpTargetParamsEntry.c,
+ mibgroup/target/target.c, mibgroup/target/target_counters.c
+, mibgroup/tunnel/tunnel.c, mibgroup/ucd-snmp/disk.c
+, mibgroup/ucd-snmp/diskio.c, mibgroup/ucd-snmp/dlmod.c
+, mibgroup/ucd-snmp/errormib.c,
+ mibgroup/ucd-snmp/extensible.c, mibgroup/ucd-snmp/file.c
+, mibgroup/ucd-snmp/hpux.c,
+ mibgroup/ucd-snmp/lmSensors.c, mibgroup/ucd-snmp/loadave.c
+, mibgroup/ucd-snmp/logmatch.c,
+ mibgroup/ucd-snmp/memory.c, mibgroup/ucd-snmp/memory_dynix.c
+, mibgroup/ucd-snmp/memory_freebsd2.c,
+ mibgroup/ucd-snmp/memory_netbsd1.c,
+ mibgroup/ucd-snmp/memory_solaris2.c,
+ mibgroup/ucd-snmp/pass.c, mibgroup/ucd-snmp/pass_persist.c
+, mibgroup/ucd-snmp/proc.c, mibgroup/ucd-snmp/proxy.c
+, mibgroup/ucd-snmp/registry.c,
+ mibgroup/ucd-snmp/versioninfo.c, mibgroup/ucd-snmp/vmstat.c
+, mibgroup/ucd-snmp/vmstat_bsdi4.c,
+ mibgroup/ucd-snmp/vmstat_dynix.c,
+ mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ Use the new 'net-snmp-includes' single-include header files,
+ in place of the (uninstalled) 'mibincl.h'.
+ Wheeeee......
+
+2002-02-08 07:17 jbpn
+
+ * man/: snmp.conf.5.def, snmp_agent_api.3,
+ snmp_alarm.3, snmp_api.3, snmp_config.5.def,
+ snmp_sess_api.3, snmpd.1.def, snmpd.conf.5.def,
+ snmptrapd.conf.5.def:
+
+ - some editing to make style consistent, add some missing options,
+ change ucd-snmp to Net-SNMP and things like that.
+
+2002-02-08 07:14 jbpn
+
+ * man/Makefile.in:
+
+ - generate man pages at compile time
+
+2002-02-08 07:14 jbpn
+
+ * man/: snmpbulkget.1, snmpbulkwalk.1,
+ snmpbulkget.1.def, snmpbulkwalk.1.def, snmpcmd.1
+, snmpcmd.1.def, snmpconf.1, snmpconf.1.def
+, snmpget.1, snmpget.1.def, snmpgetnext.1,
+ snmpgetnext.1.def, snmpset.1, snmpset.1.def,
+ snmpstatus.1, snmpstatus.1.def, snmptable.1,
+ snmptable.1.def, snmptest.1, snmptest.1.def,
+ snmptranslate.1, snmptranslate.1.def, snmptrap.1
+, snmptrap.1.def, snmpusm.1, snmpusm.1.def,
+ snmpwalk.1, snmpwalk.1.def, snmptrapd.8,
+ snmptrapd.8.def:
+
+ - rename man pages which are now generated at compile time in order
+ to pick up the version (which gets put in the footer).
+
+ - also some editing to make style consistent, add some missing options,
+ change ucd-snmp to Net-SNMP and things like that.
+
+2002-02-08 06:48 dts12
+
+ * agent/mibgroup/mibJJ.h:
+
+ Remove the attempted 'mibII' re-write.
+ If we want to tidy up mibII, it makes more sense to use the new agent APIs.
+
+2002-02-08 06:45 dts12
+
+ * include/net-snmp/: net-snmp-includes.h,
+ agent/net-snmp-agent-includes.h:
+
+ Bring single-include header files closer in line with the existing "mibincl.h" file
+
+2002-02-08 06:09 dts12
+
+ * agent/mibgroup/mibII/: sysORTable.h (V4-2-patches.1),
+ sysORTable.h:
+
+ Ensure the null versions of the two REGISTER macros swallow their parameters.
+
+2002-02-08 04:36 dts12
+
+ * agent/snmp_agent.c:
+
+ Implement the missing outgoing error statistics counters
+ (patch #510194 from Latha Prabhu)
+
+2002-02-08 02:42 dts12
+
+ * agent/mibgroup/: host/hr_storage.c, ucd-snmp/memory.c
+ (V4-2-patches.[6,3]), host/hr_storage.c, ucd-snmp/memory.c
+:
+
+ Added support for memory and swap entries in hrStorageTable for Solaris
+ (from patch #505498 - thanks to Johannes Schmidt-Fischer)
+
+2002-02-08 02:07 dts12
+
+ * agent/mibgroup/mibII/ip.c:
+
+ Consolidate identical MIB object entries (WIN32/non-WIN32)
+
+2002-02-08 00:50 jbpn
+
+ * man/README:
+
+ - remove chronically dated unhelpful README
+
+2002-02-07 13:33 hardaker
+
+ * Makefile.in, Makefile.rules, configure,
+ configure.in, makefileindepend.pl,
+ agent/Makefile.depend, agent/Makefile.in,
+ agent/agent_trap.c, agent/mib_modules.c,
+ agent/snmp_agent.c, agent/snmpd.c,
+ agent/helpers/Makefile.depend, agent/helpers/Makefile.in
+, agent/mibgroup/Makefile.depend,
+ agent/mibgroup/Makefile.in, agent/mibgroup/mibincl.h,
+ agent/mibgroup/agentx/agentx_config.c,
+ agent/mibgroup/agentx/subagent.c, apps/Makefile.depend
+, apps/Makefile.in, apps/snmpnetstat/Makefile.depend
+, apps/snmpnetstat/Makefile.in, local/Makefile.in
+, man/Makefile.in, mibs/Makefile.in,
+ snmplib/Makefile.depend, snmplib/Makefile.in:
+
+ remake make's Makefile's to make better making
+
+2002-02-07 13:31 hardaker
+
+ * perl/SNMP/Makefile.PL:
+
+ check local pathes
+
+2002-02-07 12:54 dts12
+
+ * agent/snmp_agent.c:
+
+ Ensure agent returns the correct error codes for UNDO and COMMIT failures.
+
+2002-02-07 11:18 hardaker
+
+ * perl/SNMP/: Makefile.PL, SNMP.xs, t/startagent.pl
+:
+
+ attempt at porting Joe's SNMP module to net-snmp.
+ It compiles, but only some of the tests succeed.
+
+2002-02-07 10:09 jbpn
+
+ * man/: default_store.3.top, mib_api.3,
+ read_config.3.def, snmp.conf.5.def, snmp_agent_api.3
+, snmp_alarm.3, snmp_api.3, snmp_config.5.def
+, snmp_sess_api.3, snmp_trap_api.3, snmpbulkget.1
+, snmpbulkwalk.1, snmpconf.1, snmpd.conf.5.def
+, snmpdelta.1, snmpdf.1, snmpget.1,
+ snmpgetnext.1, snmpnetstat.1, snmpset.1,
+ snmpstatus.1, snmptable.1, snmptest.1,
+ snmptranslate.1, snmptrap.1, snmptrapd.conf.5.def
+, snmpusm.1, snmpwalk.1, variables.5:
+
+ - add Net-SNMP in header of all man pages
+
+2002-02-07 09:52 jbpn
+
+ * man/snmpcmd.1:
+
+ - update style to match snmpd and snmptrapd man pages
+
+2002-02-07 08:15 jbpn
+
+ * man/snmptrapd.8:
+
+ - fix speeling mistake
+
+2002-02-07 08:00 jbpn
+
+ * man/snmptrapd.8:
+
+ - bring up to date with snmptrapd
+
+2002-02-07 07:28 dts12
+
+ * README.hpux11, acconfig.h,
+ agent/mibgroup/ucd_snmp.h, agent/mibgroup/host/hr_network.c
+, agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/interfaces.h, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/ipAddr.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/tcpTable.c
+, agent/mibgroup/mibII/tcpTable.h,
+ agent/mibgroup/mibII/udp.c, agent/mibgroup/mibII/udpTable.c
+, agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/mibII/var_route.h,
+ agent/mibgroup/ucd-snmp/memory.c,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/system/hpux.h, mibs/UCD-SNMP-MIB.txt:
+
+ Support for HP-UX 11, courtesy of Johannes Schmidt-Fischer.
+
+2002-02-07 06:30 jbpn
+
+ * man/snmpd.1.def:
+
+ - alphabetise options
+
+ - bring man page in line with new positional arguments listening
+ address specification and add section describing that
+
+ - put Net-SNMP in header
+
+2002-02-06 10:06 jbpn
+
+ * include/net-snmp/scapi.h:
+
+ - fix bug noted by Niels
+
+2002-02-06 09:25 jbpn
+
+ * apps/: encode_keychange.c, snmpusm.c:
+
+ - minor tweaks due to change in definition of USM OIDs.
+
+2002-02-06 09:17 jbpn
+
+ * include/net-snmp/snmpusm.h, include/net-snmp/snmpv3.h
+, include/net-snmp/transform_oids.h,
+ snmplib/snmp_parse_args.c, snmplib/snmpusm.c,
+ snmplib/snmpv3.c:
+
+ - move USM OID definitions into snmpusm.c, make them const
+
+ - consequent increase in const-ness in some function prototypes
+
+2002-02-06 09:12 hardaker
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ remove internal note about v3 api, which should be public
+
+2002-02-06 09:12 hardaker
+
+ * include/net-snmp/snmpusm_init.h:
+
+ removed unneeded file
+
+2002-02-06 09:06 jbpn
+
+ * include/net-snmp/keytools.h, include/net-snmp/scapi.h
+, snmplib/keytools.c, snmplib/scapi.c:
+
+ - add const-ness for transform type args
+
+2002-02-06 09:01 jbpn
+
+ * include/net-snmp/mib.h, include/net-snmp/snmp_debug.h
+, snmplib/mib.c, snmplib/snmp_debug.c:
+
+ - add some const-ness for OID args (mainly so that debugmsg_oid takes
+ const).
+
+2002-02-06 08:44 dts12
+
+ * agent/agent_read_config.c, agent/mibgroup/ucd_snmp.h
+, agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/memory_dynix.c,
+ agent/mibgroup/ucd-snmp/memory_dynix.h,
+ agent/mibgroup/ucd-snmp/vmstat_dynix.c,
+ agent/mibgroup/ucd-snmp/vmstat_dynix.h,
+ include/net-snmp/system/dynix.h,
+ agent/mibgroup/host/hr_swrun.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/var_route.c, snmplib/snmp_api.c
+:
+
+ Support for Dynix/PTX 4.4, courtesy of Patrick Hess.
+
+2002-02-06 07:41 jbpn
+
+ * include/net-snmp/snmp_api.h, snmplib/snmp_api.c:
+
+ - make first argument of snmp_dup_objid() const.
+
+ - better handle NULL values in snmp_dup_objid().
+
+2002-02-06 07:09 dts12
+
+ * FAQ, man/snmp_trap_api.3:
+
+ Clarify the applicability of 'snmp_trap_api(3)' routines to AgentX subagents.
+
+2002-02-06 05:58 dts12
+
+ * apps/: encode_keychange.c, notification_log.c,
+ snmpbulkget.c, snmpbulkwalk.c, snmpdelta.c,
+ snmpdf.c, snmpget.c, snmpgetnext.c, snmpset.c
+, snmpstatus.c, snmptable.c, snmptest.c,
+ snmptranslate.c, snmptrap.c, snmptrapd.c,
+ snmptrapd_handlers.c, snmptrapd_log.c, snmpusm.c
+, snmpvacm.c, snmpwalk.c, snmpnetstat/if.c
+, snmpnetstat/inet.c, snmpnetstat/inet6.c,
+ snmpnetstat/main.c, snmpnetstat/route.c:
+
+ Applications amended to use the new-style library header structure.
+ (In most cases, simply including the single "full API" header file)
+
+2002-02-06 05:55 dts12
+
+ * include/net-snmp/: asn1.h, config_api.h,
+ definitions.h, logging_api.h, mib_api.h,
+ net-snmp-includes.h, pdu_api.h, session_api.h,
+ snmpv3_api.h, types.h, utilities.h, varbind_api.h
+:
+
+ Framework for new library header file organisation, with eight main groups
+ of API routines. Currently these still refer to the UCD-style style header
+ files for the actual function declarations.
+
+2002-02-06 05:31 jbpn
+
+ * man/Makefile.in:
+
+ - replace use of $< with explicit filename, since non-GNU makes seem
+ to barf on it
+
+2002-02-06 03:31 dts12
+
+ * Makefile.in:
+
+ Fix incorrect directory specification in 'make clean'
+
+2002-02-06 03:18 dts12
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ Protect the project config file against multiple inclusion.
+
+2002-02-06 03:07 jbpn
+
+ * agent/auto_nlist.c:
+
+ - remove #include "../snmplib/system.h" which no longer exists and
+ is apparently unnecessary anyway.
+
+2002-02-06 02:51 jbpn
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - remove #include "../../snmplib/system.h" which no longer exists
+ and is apparently unnecessary anyway.
+
+2002-02-05 11:44 hardaker
+
+ * COPYING (V4-2-patches.7), COPYING:
+
+ copyright year update for NAI and Cambridge
+
+2002-02-05 09:54 hardaker
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ perl fixes
+
+2002-02-05 09:54 hardaker
+
+ * agent/agent_registry.c, agent/mibgroup/Rmon/alarm.c,
+ agent/mibgroup/smux/smux.c, include/net-snmp/snmp_api.h
+, snmplib/snmp_api.c:
+
+ Patch from Harrie Hazewinkel to move the oidtree_compare function to
+ the main library.
+
+2002-02-05 09:52 hardaker
+
+ * configure, configure.in, agent/Makefile.in
+:
+
+ perl build fixes.
+
+2002-02-05 07:19 hardaker
+
+ * agent/Makefile.in:
+
+ opps. Removed forced perl embedding
+
+2002-02-04 16:22 hardaker
+
+ * include/net-snmp/net-snmp-config.h:
+
+ this file shouldn't be checked in
+
+2002-02-04 16:22 hardaker
+
+ * Makefile.in, acconfig.h, configure,
+ configure.in, agent/Makefile.in, agent/snmp_perl.c
+, agent/snmp_perl.pl, agent/snmp_vars.c:
+
+ - Support for embedding perl subroutines into the agent to be called
+ as handlers.
+ - New configure options:
+ --with-perl-modules attempts to build contained modules (poorly currently).
+ --enable-embedded-perl actually specifies to do perl embedding
+ within the agent.
+
+2002-02-04 16:16 hardaker
+
+ * perl/: ASN/ASN.pm, ASN/ASN.xs, ASN/Changes,
+ ASN/MANIFEST, ASN/Makefile.PL, ASN/test.pl,
+ agent/Changes, agent/MANIFEST, agent/Makefile.PL,
+ agent/agent.pm, agent/agent.xs, agent/test.pl,
+ agent/typemap, default_store/Changes,
+ default_store/MANIFEST, default_store/Makefile.PL,
+ default_store/default_store.pm,
+ default_store/default_store.xs, default_store/test.pl,
+ default_store/typemap:
+
+ Beginnings of new perl modules needed to implement an SNMP agent (or
+ agentx subagent) inside perl.
+ - not complete yet.
+ - may change.
+ - but works.
+
+2002-02-04 04:39 jbpn
+
+ * snmplib/mib.c:
+
+ - correct processing for timeticks when DS_LIB_NUMERIC_TIMETICKS is
+ set (corrects bug #511793, reported by Anonymous).
+
+2002-02-01 01:50 dts12
+
+ * FAQ:
+
+ Clarify the procedure for compiling with 'cc' rather than 'gcc'
+
+2002-01-31 14:58 hardaker
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ s/snmplib\///;
+
+2002-01-31 06:55 hardaker
+
+ * Makefile.in, agent/helpers/Makefile.in:
+
+ fix make clean as reported by Bradley Bozarth.
+
+2002-01-30 08:06 dts12
+
+ * agent/mibgroup/ucd-snmp/versioninfo.c:
+
+ Bring MIB variable versionTag into line with the new <net-snmp/version.h> usage
+
+2002-01-29 17:53 hardaker
+
+ * version.h, agent/snmpd.c,
+ agent/mibgroup/versiontag, apps/snmptranslate.c,
+ apps/snmptrapd.c, apps/snmpnetstat/main.c,
+ include/net-snmp/version.h, include/ucd-snmp/version.h,
+ snmplib/Makefile.in, snmplib/snmp_parse_args.c,
+ snmplib/snmp_version.c:
+
+ Moved versioning information from version.h to:
+ - snmplib/snmp_version.c:
+ - define netsnmp_get_version();
+ - create a const char *NetSnmpVersionInfo
+ - include/net-snmp/version.h:
+ - extern the above char *
+ - prototype the function
+ - include/ucd-snmp/version.h:
+ - create a static variable (the old way) and set it to NetSnmpVersionInfo
+
+2002-01-29 16:09 hardaker
+
+ * testing/: eval_tools.sh, tests/T049snmpv3inform,
+ tests/T050snmpv3trap, tests/T051snmpv2ctrap,
+ tests/T052snmpv2cinform, tests/T053agentv1trap,
+ tests/T054agentv2ctrap, tests/T055agentv1mintrap,
+ tests/T056agentv2cmintrap, tests/T058agentauthtrap,
+ tests/T113agentxtrap:
+
+ trap test fixes so the majority of the tests now work.
+
+2002-01-29 16:08 hardaker
+
+ * Makefile.in:
+
+ don't generate ucd-snmp-config.h any longer.
+
+2002-01-29 15:23 hardaker
+
+ * acconfig.h, configure, configure.in,
+ include/net-snmp/net-snmp-config.h,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/machine/generic.h,
+ include/net-snmp/system/aix.h, include/net-snmp/system/bsd.h
+, include/net-snmp/system/bsdi.h,
+ include/net-snmp/system/bsdi3.h,
+ include/net-snmp/system/bsdi4.h,
+ include/net-snmp/system/cygwin.h,
+ include/net-snmp/system/darwin.h,
+ include/net-snmp/system/freebsd.h,
+ include/net-snmp/system/freebsd2.h,
+ include/net-snmp/system/freebsd3.h,
+ include/net-snmp/system/freebsd4.h,
+ include/net-snmp/system/generic.h,
+ include/net-snmp/system/hpux.h,
+ include/net-snmp/system/irix.h,
+ include/net-snmp/system/linux.h,
+ include/net-snmp/system/mips.h,
+ include/net-snmp/system/netbsd.h,
+ include/net-snmp/system/openbsd.h,
+ include/net-snmp/system/solaris.h,
+ include/net-snmp/system/solaris2.6.h,
+ include/net-snmp/system/solaris2.7.h,
+ include/net-snmp/system/solaris2.8.h,
+ include/net-snmp/system/sunos.h,
+ include/net-snmp/system/svr5.h,
+ include/net-snmp/system/sysv.h,
+ include/net-snmp/system/ultrix4.h:
+
+ moved s/*.h files to include/net-snmp/system/*.h
+ moved m/generic.h files to include/net-snmp/machine/generic.h
+
+2002-01-29 09:24 hardaker
+
+ * apps/snmptrapd.c:
+
+ fix -c argument parsing.
+
+2002-01-29 09:10 hardaker
+
+ * testing/eval_tools.sh:
+
+ reference include/net-snmp/net-snmp-config.h instead of just config.h
+
+2002-01-29 09:05 hardaker
+
+ * snmplib/snmpusm.c:
+
+ attempt to fix the unknown engineid/unknown user problems once and for all.
+
+2002-01-28 21:11 hardaker
+
+ * configure, configure.in:
+
+ whoops. Missed some .h file checks in configure. Thanks Robert.
+
+2002-01-28 21:03 hardaker
+
+ * local/convertcode:
+
+ minor fix.
+
+2002-01-28 21:02 hardaker
+
+ * local/convertcode:
+
+ added code convert script for ucd-snmp -> net-snmp header conversion
+
+2002-01-28 20:59 hardaker
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/target/target.c,
+ agent/mibgroup/target/target_counters.c,
+ agent/mibgroup/tunnel/tunnel.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/dlmod.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/logmatch.c,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/proxy.c,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c,
+ apps/encode_keychange.c, apps/notification_log.c,
+ apps/snmpbulkget.c, apps/snmpbulkwalk.c,
+ apps/snmpdelta.c, apps/snmpdf.c, apps/snmpget.c
+, apps/snmpgetnext.c, apps/snmpset.c,
+ apps/snmpstatus.c, apps/snmptable.c, apps/snmptest.c
+, apps/snmptranslate.c, apps/snmptrap.c,
+ apps/snmptrapd.c, apps/snmptrapd_handlers.c,
+ apps/snmptrapd_log.c, apps/snmpusm.c, apps/snmpvacm.c
+, apps/snmpwalk.c, apps/snmpnetstat/Makefile.in
+, apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c
+, apps/snmpnetstat/inet6.c, apps/snmpnetstat/main.c
+, apps/snmpnetstat/route.c, include/net-snmp/asn1.h
+, include/net-snmp/callback.h,
+ include/net-snmp/data_list.h,
+ include/net-snmp/default_store.h, include/net-snmp/getopt.h
+, include/net-snmp/int64.h, include/net-snmp/keytools.h
+, include/net-snmp/lcd_time.h,
+ include/net-snmp/libsnmp.h, include/net-snmp/md5.h,
+ include/net-snmp/mib.h, include/net-snmp/mt_support.h,
+ include/net-snmp/net-snmp-config.h,
+ include/net-snmp/oid_array.h, include/net-snmp/oid_stash.h
+, include/net-snmp/parse.h,
+ include/net-snmp/read_config.h, include/net-snmp/scapi.h
+, include/net-snmp/snmp-tc.h, include/net-snmp/snmp.h
+, include/net-snmp/snmpAAL5PVCDomain.h,
+ include/net-snmp/snmpCallbackDomain.h,
+ include/net-snmp/snmpIPXDomain.h,
+ include/net-snmp/snmpTCPDomain.h,
+ include/net-snmp/snmpTCPIPv6Domain.h,
+ include/net-snmp/snmpUDPDomain.h,
+ include/net-snmp/snmpUDPIPv6Domain.h,
+ include/net-snmp/snmpUnixDomain.h,
+ include/net-snmp/snmp_alarm.h, include/net-snmp/snmp_api.h
+, include/net-snmp/snmp_client.h,
+ include/net-snmp/snmp_debug.h, include/net-snmp/snmp_enum.h
+, include/net-snmp/snmp_impl.h,
+ include/net-snmp/snmp_locking.h,
+ include/net-snmp/snmp_logging.h,
+ include/net-snmp/snmp_parse_args.h,
+ include/net-snmp/snmp_secmod.h,
+ include/net-snmp/snmp_transport.h, include/net-snmp/snmpksm.h
+, include/net-snmp/snmpusm.h,
+ include/net-snmp/snmpusm_init.h, include/net-snmp/snmpv3.h
+, include/net-snmp/system.h, include/net-snmp/tools.h
+, include/net-snmp/transform_oids.h,
+ include/net-snmp/vacm.h, include/net-snmp/agent/snmp_agent.h
+, man/Makefile.in, snmplib/Makefile.in,
+ snmplib/asn1.c, snmplib/asn1.h, snmplib/callback.c
+, snmplib/callback.h, snmplib/data_list.c,
+ snmplib/data_list.h, snmplib/default_store.c,
+ snmplib/default_store.h, snmplib/getopt.h,
+ snmplib/int64.c, snmplib/int64.h, snmplib/keytools.c
+, snmplib/keytools.h, snmplib/lcd_time.c,
+ snmplib/lcd_time.h, snmplib/libsnmp.h, snmplib/md5.c
+, snmplib/md5.h, snmplib/mib.c, snmplib/mib.h
+, snmplib/mt_support.c, snmplib/mt_support.h,
+ snmplib/oid_array.c, snmplib/oid_array.h,
+ snmplib/oid_stash.c, snmplib/oid_stash.h,
+ snmplib/parse.c, snmplib/parse.h,
+ snmplib/read_config.c, snmplib/read_config.h,
+ snmplib/scapi.c, snmplib/scapi.h, snmplib/snmp-tc.c
+, snmplib/snmp-tc.h, snmplib/snmp.c,
+ snmplib/snmp.h, snmplib/snmpAAL5PVCDomain.c,
+ snmplib/snmpAAL5PVCDomain.h, snmplib/snmpCallbackDomain.c
+, snmplib/snmpCallbackDomain.h, snmplib/snmpIPXDomain.c
+, snmplib/snmpIPXDomain.h, snmplib/snmpTCPDomain.c
+, snmplib/snmpTCPDomain.h, snmplib/snmpTCPIPv6Domain.c
+, snmplib/snmpTCPIPv6Domain.h, snmplib/snmpUDPDomain.c
+, snmplib/snmpUDPDomain.h, snmplib/snmpUDPIPv6Domain.c
+, snmplib/snmpUDPIPv6Domain.h, snmplib/snmpUnixDomain.c
+, snmplib/snmpUnixDomain.h, snmplib/snmp_alarm.c
+, snmplib/snmp_alarm.h, snmplib/snmp_api.c,
+ snmplib/snmp_api.h, snmplib/snmp_auth.c,
+ snmplib/snmp_client.c, snmplib/snmp_client.h,
+ snmplib/snmp_debug.c, snmplib/snmp_debug.h,
+ snmplib/snmp_enum.c, snmplib/snmp_enum.h,
+ snmplib/snmp_impl.h, snmplib/snmp_logging.c,
+ snmplib/snmp_logging.h, snmplib/snmp_parse_args.c,
+ snmplib/snmp_parse_args.h, snmplib/snmp_secmod.c,
+ snmplib/snmp_secmod.h, snmplib/snmp_transport.c,
+ snmplib/snmp_transport.h, snmplib/snmpksm.c,
+ snmplib/snmpksm.h, snmplib/snmpusm.c,
+ snmplib/snmpusm.h, snmplib/snmpv3.c, snmplib/snmpv3.h
+, snmplib/system.c, snmplib/system.h,
+ snmplib/tools.c, snmplib/tools.h,
+ snmplib/transform_oids.h, snmplib/vacm.c,
+ snmplib/vacm.h, testing/RUNTESTS,
+ testing/eval_tools.sh, include/ucd-snmp/asn1.h,
+ include/ucd-snmp/callback.h, include/ucd-snmp/default_store.h
+, include/ucd-snmp/int64.h, include/ucd-snmp/keytools.h
+, include/ucd-snmp/mib.h, include/ucd-snmp/mibincl.h
+, include/ucd-snmp/parse.h,
+ include/ucd-snmp/read_config.h, include/ucd-snmp/scapi.h
+, include/ucd-snmp/snmp-tc.h, include/ucd-snmp/snmp.h
+, include/ucd-snmp/snmp_alarm.h,
+ include/ucd-snmp/snmp_api.h, include/ucd-snmp/snmp_client.h
+, include/ucd-snmp/snmp_debug.h,
+ include/ucd-snmp/snmp_impl.h, include/ucd-snmp/snmp_logging.h
+, include/ucd-snmp/snmp_parse_args.h,
+ include/ucd-snmp/snmp_vars.h, include/ucd-snmp/snmpusm.h
+, include/ucd-snmp/snmpv3.h, include/ucd-snmp/system.h
+, include/ucd-snmp/tools.h,
+ include/ucd-snmp/transform_oids.h,
+ include/ucd-snmp/util_funcs.h:
+
+ Major file moving and editing of include directives.
+ - essentially adds up to:
+ - mv snmplib/*.h include/net-snmp/
+ - local/convertcode `find . -name \*.c \*.h`
+
+2002-01-28 20:54 hardaker
+
+ * agent/: agent_handler.c, agent_index.c,
+ agent_read_config.c, agent_registry.c, agent_trap.c
+, auto_nlist.c, kernel.c, mib_modules.c,
+ snmp_agent.c, snmp_vars.c, snmpd.c,
+ helpers/bulk_to_next.c, helpers/debug_handler.c,
+ helpers/instance.c, helpers/multiplexer.c,
+ helpers/null.c, helpers/old_api.c, helpers/read_only.c
+, helpers/serialize.c, helpers/table.c,
+ helpers/table_array.c, helpers/table_dataset.c,
+ helpers/table_iterator.c, mibgroup/host_res.h,
+ mibgroup/kernel_sunos5.c, mibgroup/mibincl.h,
+ mibgroup/testdelayed.c, mibgroup/testhandler.c,
+ mibgroup/util_funcs.c, mibgroup/Rmon/alarm.c,
+ mibgroup/Rmon/event.c, mibgroup/Rmon/history.c,
+ mibgroup/Rmon/rows.c, mibgroup/agentx/agentx_config.c,
+ mibgroup/agentx/client.c, mibgroup/agentx/master.c,
+ mibgroup/agentx/master_admin.c,
+ mibgroup/agentx/master_request.c, mibgroup/agentx/protocol.c
+, mibgroup/agentx/subagent.c,
+ mibgroup/disman/mteObjectsTable.c,
+ mibgroup/disman/mteTriggerBooleanTable.c,
+ mibgroup/disman/mteTriggerDeltaTable.c,
+ mibgroup/disman/mteTriggerExistenceTable.c,
+ mibgroup/disman/mteTriggerTable.c,
+ mibgroup/disman/mteTriggerThresholdTable.c,
+ mibgroup/examples/ucdDemoPublic.c, mibgroup/host/hr_disk.c
+, mibgroup/host/hr_filesys.c,
+ mibgroup/host/hr_storage.c, mibgroup/host/hr_swinst.c
+, mibgroup/host/hr_swrun.c, mibgroup/host/hr_system.c
+, mibgroup/mibII/at.c, mibgroup/mibII/icmp.c,
+ mibgroup/mibII/interfaces.c, mibgroup/mibII/ip.c,
+ mibgroup/mibII/ipAddr.c, mibgroup/mibII/ipv6.c,
+ mibgroup/mibII/kernel_linux.c, mibgroup/mibII/route_write.c
+, mibgroup/mibII/snmp_mib.c,
+ mibgroup/mibII/sysORTable.c, mibgroup/mibII/system_mib.c
+, mibgroup/mibII/tcp.c, mibgroup/mibII/tcpTable.c
+, mibgroup/mibII/udp.c, mibgroup/mibII/udpTable.c
+, mibgroup/mibII/vacm_context.c,
+ mibgroup/mibII/vacm_vars.c, mibgroup/mibII/vacm_vars.h
+, mibgroup/mibII/var_route.c, mibgroup/misc/dlmod.c
+, mibgroup/notification/snmpNotifyFilterProfileTable.c,
+ mibgroup/notification/snmpNotifyFilterTable.c,
+ mibgroup/notification/snmpNotifyTable.c,
+ mibgroup/smux/smux.c, mibgroup/smux/snmp_bgp.c,
+ mibgroup/smux/snmp_ospf.c, mibgroup/smux/snmp_rip2.c,
+ mibgroup/snmpv3/snmpEngine.c, mibgroup/snmpv3/usmUser.c
+, mibgroup/snmpv3/usmUser.h:
+
+ Major file moving and editing of include directives.
+ - essentially adds up to:
+ - mv snmplib/*.h include/net-snmp/
+ - local/convertcode `find . -name \*.c \*.h`
+
+2002-01-28 19:42 hardaker
+
+ * include/ucd-snmp/ucd-snmp-config.h:
+
+ remove UCD_COMPAT flag and DEFINE IT instead
+
+2002-01-28 19:41 hardaker
+
+ * include/ucd-snmp/ucd-snmp-config.h:
+
+ remove UCD_COMPAT flag and define it instead
+
+2002-01-25 11:29 hardaker
+
+ * snmplib/mib.c:
+
+ - parse_one_oid_index:
+ - use an unsigned int for length's pulled from the oid.
+ - Make sure they're always < 128
+
+2002-01-25 09:12 jbpn
+
+ * agent/mibgroup/snmpv3/usmUser.c:
+
+ - closer adherence to state machines described in RFC 2574
+
+2002-01-25 09:10 jbpn
+
+ * snmplib/snmpusm.c:
+
+ - cause usmDecryptionError reports to be sent in a couple of extra
+ cases: bad salt (length != 8) and length of encrypted data not a
+ multiple of 8 octets (per RFC 2574).
+
+2002-01-25 09:04 jbpn
+
+ * agent/snmp_agent.c:
+
+ - for unknown message types, increment snmpInASNParseErrs and fail
+ at the post-parse stage.
+
+ - for notification types, increment snmpUnknownPDUHandlers and bail
+ out early.
+
+2002-01-25 09:01 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - for unhandled messages (e.g. RESPONSE messages sent to agents),
+ increment the snmpUnknownPDUHandlers counter.
+
+ - try to free securityStateRefs when post-parse fails.
+
+2002-01-25 06:26 jbpn
+
+ * agent/mibgroup/mibII/: vacm_vars.c (V4-2-patches.6), vacm_vars.c
+:
+
+ - fix minor problem with storageType (always okay to set to current
+ value).
+
+ - don't reset some variables to old value unless we actually set
+ them in the first place!
+
+2002-01-25 05:00 jbpn
+
+ * agent/helpers/table.c:
+
+ - don't print out debugging info in a further case where it has been
+ free()d.
+
+ - set the exception noSuchInstance rather than error noSuchName when
+ we have the incorrect number of indices.
+
+2002-01-25 04:54 dts12
+
+ * snmplib/README.newlib:
+
+ file README.newlib was initially added on branch NEW-LIBRARY-API.
+
+2002-01-25 04:49 jbpn
+
+ * agent/helpers/table.c:
+
+ - move debugging output to before where (potentially) the data it is
+ trying to print gets free()d.
+
+2002-01-25 04:40 jbpn
+
+ * agent/snmp_agent.c:
+
+ - keep asp->vbcount correct in create_subtree_cache() if we dump
+ varbinds in the GETNEXT case because numvarbinds > non-repeaters.
+ Failing to do this will cause problems later when you iterate over
+ 0 .. asp->vbcount - 1 in reassign_requests().
+
+2002-01-24 15:11 rstory
+
+ * include/net-snmp/agent/table.h:
+
+ update macros to put parens around parameters when used, in case a parameter is an expression, which might muck about with operator precedence rules and cause unexpected and undesirable behavior.
+
+2002-01-24 11:07 rstory
+
+ * local/mib2c.array-user.conf:
+
+ try to find & handle external indexes; use new style net-snmp includes; add
+ row_copy; use context types & casts in parameters instead of generic types
+ recast inside method
+
+2002-01-24 06:03 jbpn
+
+ * snmplib/: read_config.c (V4-2-patches.3), read_config.c:
+
+ - avoid format string nasties in read_config_store() when writing to
+ files (exposed e.g. by the persistent sysName.0 stuff -- try
+ snmpset host sysName.0 s "%08x" -- oops)
+
+2002-01-24 04:34 jbpn
+
+ * snmplib/snmpusm.c:
+
+ - don't automatically accept a msgUserName of "" when processing
+ incoming messages.
+
+2002-01-24 04:30 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - bigger buffer for msgAuthoritativeEngineID field since it is not
+ limited to 32 bytes like SnmpEngineTC. Really this needs to be
+ allocated by the security module but for now we'll just make it
+ twice as big.
+
+2002-01-24 03:19 dts12
+
+ * agent/mibgroup/host/hr_swrun.c, snmplib/snmp-tc.c:
+
+ AIX support for the Host Resources module.
+ (Thanks to Andy Hood)
+
+2002-01-23 08:28 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - set viewType to the DEFVAL included(1) for new rows
+
+2002-01-23 07:40 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - secModel of 0 is a parse error in HeaderData
+
+2002-01-23 07:23 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - be careful to free securityStateRef in a couple of error cases in
+ snmpv3_parse -- fixes memory leaks when malformed PDUs are
+ received.
+
+2002-01-22 19:49 rstory
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ chg api for snmp_oid_ncompare, don't implement it vi snmp_oid_compare
+
+2002-01-22 19:46 rstory
+
+ * snmplib/: oid_array.c, oid_array.h:
+
+ add Get_oid_data_count(); add subset support
+
+2002-01-22 19:44 rstory
+
+ * snmplib/: mib.c, mib.h:
+
+ add netsnmp_str2oid()
+
+2002-01-22 19:41 rstory
+
+ * include/net-snmp/agent/table_array.h:
+
+ add subset function
+
+2002-01-22 19:40 rstory
+
+ * agent/helpers/table_array.c:
+
+ add subset function; add preliminary locking code; add ta_check_row_status
+
+2002-01-22 06:33 jbpn
+
+ * agent/mibgroup/mibII/: vacm_vars.c (V4-2-patches.4), vacm_vars.c
+:
+
+ - fix bug just introduced where setting an existing row's status to
+ createAndGo(4) or createAndWait(5) would delete the row.
+
+2002-01-22 04:58 jbpn
+
+ * snmplib/snmpusm.c:
+
+ - cause a parse error if we receive UsmSecurityParameters with a
+ msgUserName that is illegally long.
+
+2002-01-22 03:10 jbpn
+
+ * agent/mibgroup/target/snmpTargetParamsEntry.c:
+
+ - oops, left old code in #if 0 branch AGAIN. I am getting into bad
+ habits!
+
+2002-01-22 03:08 jbpn
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ - fix memory leaks in row creation/destruction
+
+ - more aggressive validity checking of snmpNotifyTag, snmpNotifyType
+ and snmpNotifyStorageType.
+
+ - passes 6.5.1.0 -- 6.5.8.3
+
+2002-01-22 01:47 jbpn
+
+ * agent/mibgroup/target/: snmpTargetAddrEntry.c,
+ snmpTargetParamsEntry.c, snmpTargetParamsEntry.h:
+
+ - correct state machines for snmpTargetParamsTable
+
+2002-01-21 23:48 jbpn
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c:
+
+ - tidy things up a bit (had left some old code sitting if #if 0
+ branch).
+
+ - remember to close (target->sess) when we move a target to
+ notInService(2).
+
+2002-01-21 11:04 jbpn
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c:
+
+ - correct state machines for snmpTargetAddrTable
+
+2002-01-21 06:47 jbpn
+
+ * agent/mibgroup/target/: snmpTargetAddrEntry.c,
+ snmpTargetAddrEntry.h:
+
+ - implement snmpTargetSpinLock object
+
+2002-01-18 09:19 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - correct state machine for vacmViewTreeFamilyTable. Passes all the
+ relevant Silvercreek VACM tetst.
+
+2002-01-18 08:49 jbpn
+
+ * snmplib/: vacm.c, vacm.h:
+
+ - add a switch to vacm_getViewEntry() to allow the mask entries
+ to be ignore (which is what you want when you are just using this
+ function to look up an entry in the table in order to write some new
+ value to one of the columnar objects).
+
+2002-01-18 06:09 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - correct state machine for vacmAccessTable. Passes all the relevant
+ Silvercreek VACM tetst.
+
+2002-01-18 04:11 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - correct state machine for vacmSecurityToGroupTable (i.e. don't
+ just do everything in the COMMIT phase). Passes all the relevant
+ Silvercreek VACM tetst.
+
+2002-01-18 04:08 jbpn
+
+ * agent/snmp_agent.c:
+
+ - don't overwrite an existing error status after COMMIT or UNDO
+ phases with commitFailed or undoFailed (but do translate error
+ returns from those phases into those errors when we don't have an
+ existing error status).
+
+2002-01-17 06:57 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - handle illegal values of msgID correctly (by dropping the packet
+ and incrementing snmpInASNParseErrs)
+
+2002-01-17 06:38 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - handle illegal values of msgMaxSize correctly (by dropping the
+ packet and incrementing snmpInASNParseErrs)
+
+2002-01-15 08:17 rstory
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ top level include which includes useful snmplib headers
+
+2002-01-15 08:15 rstory
+
+ * include/ucd-snmp/: agent_index.h, agent_read_config.h
+, agent_registry.h, agent_trap.h, asn1.h,
+ auto_nlist.h, callback.h, default_store.h,
+ ds_agent.h, header_complex.h, int64.h, keytools.h
+, mib.h, mib_module_config.h, mibincl.h,
+ parse.h, read_config.h, scapi.h, snmp-tc.h,
+ snmp.h, snmp_agent.h, snmp_alarm.h, snmp_api.h
+, snmp_client.h, snmp_debug.h, snmp_impl.h,
+ snmp_logging.h, snmp_parse_args.h, snmp_vars.h,
+ snmpusm.h, snmpv3.h, struct.h, system.h,
+ tools.h, transform_oids.h, ucd-snmp-agent-includes.h
+, ucd-snmp-config.h, ucd-snmp-includes.h,
+ util_funcs.h, var_struct.h, version.h:
+
+ create 4.x headers that are wrappers pointing to new headers
+
+2002-01-14 15:08 rstory
+
+ * include/net-snmp/agent/table_array.h:
+
+ add UserRowAction and void pointer
+
+2002-01-14 13:41 hardaker
+
+ * agent/: mibgroup/ucd-snmp/lmSensors.c, Makefile.in:
+
+ -> net-snmp/agent/net-snmp-agent-includes.h
+
+2002-01-14 13:40 hardaker
+
+ * include/net-snmp/agent/ucd-snmp-agent-includes.h:
+
+ removed
+
+2002-01-14 13:29 rstory
+
+ * include/net-snmp/agent/net-snmp-agent-includes.h:
+
+ copy ucd-snmp-agent-includes.h and update to net-snmp use new agent dir
+
+2002-01-14 08:04 hardaker
+
+ * agent/Makefile.in, agent/agent_callbacks.h,
+ agent/agent_handler.c, agent/agent_handler.h,
+ agent/agent_index.c, agent/agent_index.h,
+ agent/agent_read_config.c, agent/agent_read_config.h,
+ agent/agent_registry.c, agent/agent_registry.h,
+ agent/agent_trap.c, agent/agent_trap.h,
+ agent/auto_nlist.c, agent/auto_nlist.h,
+ agent/ds_agent.h, agent/kernel.c, agent/mib_modules.c
+, agent/mib_modules.h, agent/snmp_agent.c,
+ agent/snmp_agent.h, agent/snmp_vars.c,
+ agent/snmp_vars.h, agent/snmpd.c,
+ agent/ucd-snmp-agent-includes.h, agent/var_struct.h,
+ agent/helpers/Makefile.in, agent/helpers/bulk_to_next.c
+, agent/helpers/debug_handler.c,
+ agent/helpers/instance.c, agent/helpers/multiplexer.c,
+ agent/helpers/null.c, agent/helpers/old_api.c,
+ agent/helpers/read_only.c, agent/helpers/serialize.c,
+ agent/helpers/table.c, agent/helpers/table_array.c,
+ agent/helpers/table_iterator.c, agent/mibgroup/host_res.h
+, agent/mibgroup/mibincl.h,
+ agent/mibgroup/testdelayed.c, agent/mibgroup/testhandler.c
+, agent/mibgroup/agentx/agentx_config.c,
+ agent/mibgroup/agentx/client.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/master_request.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/host/hr_disk.c, agent/mibgroup/host/hr_proc.c
+, agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/ipAddr.c,
+ agent/mibgroup/mibII/ipv6.c,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/tcpTable.c
+, agent/mibgroup/mibII/udp.c,
+ agent/mibgroup/mibII/udpTable.c,
+ agent/mibgroup/mibII/vacm_context.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/misc/dlmod.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/smux/smux.c, agent/mibgroup/smux/snmp_bgp.c
+, agent/mibgroup/smux/snmp_ospf.c,
+ agent/mibgroup/smux/snmp_rip2.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/target/target_counters.c,
+ agent/mibgroup/tunnel/tunnel.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/diskio.c,
+ agent/mibgroup/ucd-snmp/dlmod.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/logmatch.c,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ apps/notification_log.h, apps/snmptrapd.c,
+ include/net-snmp/agent/agent_callbacks.h,
+ include/net-snmp/agent/agent_handler.h,
+ include/net-snmp/agent/agent_index.h,
+ include/net-snmp/agent/agent_read_config.h,
+ include/net-snmp/agent/agent_registry.h,
+ include/net-snmp/agent/agent_trap.h,
+ include/net-snmp/agent/auto_nlist.h,
+ include/net-snmp/agent/ds_agent.h,
+ include/net-snmp/agent/mib_modules.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/snmp_vars.h,
+ include/net-snmp/agent/ucd-snmp-agent-includes.h,
+ include/net-snmp/agent/var_struct.h:
+
+ moved the /agent installed headers to ../include/net-snmp/agent
+
+2002-01-13 09:22 hardaker
+
+ * agent/Makefile.in:
+
+ add a couple more install headers.
+
+2002-01-11 14:18 hardaker
+
+ * apps/: Makefile.in, notification_log.c:
+
+ Move all agent/helpers/*.h files to include/net-snmp/agent/ and change
+ references.
+
+2002-01-11 14:12 hardaker
+
+ * agent/Makefile.in, agent/agent_handler.c,
+ agent/agent_index.c, agent/agent_read_config.c,
+ agent/agent_registry.c, agent/mib_modules.c,
+ agent/snmp_vars.c, agent/snmpd.c,
+ agent/helpers/all_helpers.h, agent/helpers/bulk_to_next.c
+, agent/helpers/bulk_to_next.h,
+ agent/helpers/debug_handler.c, agent/helpers/debug_handler.h
+, agent/helpers/instance.c, agent/helpers/instance.h
+, agent/helpers/multiplexer.c,
+ agent/helpers/multiplexer.h, agent/helpers/null.c,
+ agent/helpers/null.h, agent/helpers/old_api.c,
+ agent/helpers/old_api.h, agent/helpers/read_only.c,
+ agent/helpers/read_only.h, agent/helpers/serialize.c,
+ agent/helpers/serialize.h, agent/helpers/set_helper.h,
+ agent/helpers/table.c, agent/helpers/table.h,
+ agent/helpers/table_array.c, agent/helpers/table_array.h
+, agent/helpers/table_data.c, agent/helpers/table_data.h
+, agent/helpers/table_dataset.c,
+ agent/helpers/table_dataset.h, agent/helpers/table_iterator.c
+, agent/helpers/table_iterator.h,
+ agent/mibgroup/Makefile.in, agent/mibgroup/testdelayed.c
+, agent/mibgroup/testhandler.c,
+ agent/mibgroup/agent/nsTransactionTable.c,
+ agent/mibgroup/mibII/vacm_context.c,
+ agent/mibgroup/target/target_counters.c,
+ include/net-snmp/agent/all_helpers.h,
+ include/net-snmp/agent/bulk_to_next.h,
+ include/net-snmp/agent/debug_handler.h,
+ include/net-snmp/agent/instance.h,
+ include/net-snmp/agent/multiplexer.h,
+ include/net-snmp/agent/null.h,
+ include/net-snmp/agent/old_api.h,
+ include/net-snmp/agent/read_only.h,
+ include/net-snmp/agent/serialize.h,
+ include/net-snmp/agent/set_helper.h,
+ include/net-snmp/agent/table.h,
+ include/net-snmp/agent/table_array.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/agent/table_iterator.h:
+
+ Move all agent/helpers/*.h files to include/net-snmp/agent/ and change
+ references.
+
+2002-01-11 08:41 hardaker
+
+ * agent/Makefile.in, agent/helpers/Makefile.in,
+ agent/mibgroup/Makefile.in, apps/Makefile.in,
+ snmplib/Makefile.in:
+
+ - Add -I$(top_srcdir)/include to include path.
+ - Rename 3 agent libraries from libucd* -> libnetsnmp*
+
+2002-01-11 07:58 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - don't use while(x-- >= 0) loops for new unsigned index components
+
+2002-01-11 05:27 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - be careful about signedess of index components in tables
+
+2002-01-10 13:12 nba
+
+ * configure, configure.in:
+
+ Create the include directory when building outside source directory
+
+2002-01-10 08:20 jbpn
+
+ * agent/mibgroup/mibII/sysORTable.c:
+
+ - use an unsigned long loop variable in var_sysORTable() to avoid
+ incorrect lexi-ordering when doing requests like GETNEXT
+ sysORDescr.4294967295.
+
+ - minor debugging output changes
+
+2002-01-10 07:32 jbpn
+
+ * agent/snmp_agent.c:
+
+ - fix minor memory leak in reassign_requests()
+
+2002-01-10 07:21 jbpn
+
+ * agent/snmp_agent.c:
+
+ - set type for unhandled GET requests in handle_pdu() to be
+ noSuchInstance rather than noSuchObject (noSuchObject exceptions
+ are detected and explicitly set earlier).
+
+2002-01-10 05:52 jbpn
+
+ * agent/helpers/old_api.c:
+
+ - correct typo that meant error returns from old-api write methods
+ were ignored.
+
+2002-01-10 05:04 jbpn
+
+ * snmplib/snmp_api.h:
+
+ - change value of STAT_TARGET_STATS_END so that mibII/snmp_mib.c can
+ return values of mandatory objects snmpSilentDrops and
+ snmpProxyDrops.
+
+2002-01-09 08:50 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - make unknown/illegal varbind types in v1/v2c PDUs cause
+ snmpInASNParseErrs to be incremented.
+
+2002-01-09 07:55 jbpn
+
+ * agent/helpers/debug_handler.c:
+
+ - fix memory leak
+
+2002-01-09 07:32 jbpn
+
+ * apps/snmpbulkget.c:
+
+ - bring app-specific options in line with snmpbulkwalk (-C rather
+ than -B)
+
+2002-01-09 07:31 jbpn
+
+ * apps/snmpbulkwalk.c:
+
+ - formatting change to usage message
+
+2002-01-09 06:35 jbpn
+
+ * agent/helpers/table_iterator.c:
+
+ - fix minor memory leak
+
+2002-01-08 08:55 jbpn
+
+ * apps/snmpbulkwalk.c:
+
+ - add options from snmpwalk
+
+ - allow non-repeaters and max-repeaters to be set
+
+ - change default value of max-repeaters to a lower value to avoid
+ timeouts with slower agents
+
+2002-01-08 08:17 jbpn
+
+ * agent/snmp_agent.c:
+
+ - don't try to malloc() a zero-length buffer, in case some malloc()s
+ complain.
+
+2002-01-08 08:15 jbpn
+
+ * agent/snmp_agent.c:
+
+ - hopefully final GETBULK fix -- passes all SilverCreek's GETBULK
+ tests (incl. negative non-repeaters and max-repeaters)
+
+2002-01-08 06:59 jbpn
+
+ * agent/: snmp_agent.c, snmp_agent.h,
+ helpers/bulk_to_next.c:
+
+ - GETBULK fix to ignore varbinds for which zero repetitions are
+ called for
+
+ - drop asp->start and asp->end which are hardly used and which get
+ in the way of this type of processing
+
+ - ignore negative repetitions in bulk_to_next handler
+
+2002-01-07 08:39 hardaker
+
+ * perl/manager/.cvsignore:
+
+ ignore file
+
+2002-01-07 08:38 hardaker
+
+ * perl/manager/INSTALL:
+
+ PNGGraph -> GD::Graph
+
+2002-01-04 13:48 hardaker
+
+ * Makefile.in:
+
+ fix dependencies
+
+2002-01-04 13:24 hardaker
+
+ * acconfig.h, include/net-snmp/acconfig.h:
+
+ move acconfig.h back to the top dir where its apparently supposed to live.
+
+2002-01-04 13:18 hardaker
+
+ * configure, configure.in:
+
+ more ucd-snmp -> net-snmp translations. warning: includes the default persistent store.
+
+2002-01-04 13:04 hardaker
+
+ * include/: net-snmp/.cvsignore, ucd-snmp/.cvsignore:
+
+ ignore files
+
+2002-01-04 13:02 hardaker
+
+ * .cvsignore:
+
+ ignore built net-snmp-config
+
+2002-01-04 13:00 hardaker
+
+ * apps/: Makefile.in, encode_keychange.c,
+ notification_log.c, snmpbulkget.c, snmpbulkwalk.c
+, snmpdelta.c, snmpdf.c, snmpget.c,
+ snmpgetnext.c, snmpset.c, snmpstatus.c,
+ snmptable.c, snmptest.c, snmptranslate.c,
+ snmptrap.c, snmptrapd.c, snmptrapd_handlers.c
+, snmptrapd_log.c, snmpusm.c, snmpvacm.c
+, snmpwalk.c:
+
+ beginnings of ucd-snmp -> net-snmp structural changes.
+ - config.h -> include/net-snmp/net-snmp-config.h
+ - this, of course, changes just about every file in the repository.
+
+2002-01-04 12:56 hardaker
+
+ * agent/mibgroup/notification/snmpNotifyFilterProfileTable.c,
+ agent/mibgroup/notification/snmpNotifyFilterTable.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/smux/smux.c, agent/mibgroup/smux/snmp_bgp.c
+, agent/mibgroup/smux/snmp_ospf.c,
+ agent/mibgroup/smux/snmp_rip2.c,
+ agent/mibgroup/snmpv3/snmpEngine.c,
+ agent/mibgroup/snmpv3/snmpMPDStats.c,
+ agent/mibgroup/snmpv3/usmStats.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/target/target.c,
+ agent/mibgroup/target/target_counters.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/diskio.c,
+ agent/mibgroup/ucd-snmp/dlmod.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/hpux.c,
+ agent/mibgroup/ucd-snmp/lmSensors.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/logmatch.c,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/proxy.c,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c,
+ apps/snmpnetstat/Makefile.in, apps/snmpnetstat/if.c,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/inet6.c,
+ apps/snmpnetstat/main.c, apps/snmpnetstat/route.c,
+ apps/snmpnetstat/winstub.c:
+
+ beginnings of ucd-snmp -> net-snmp structural changes.
+ - config.h -> include/net-snmp/net-snmp-config.h
+ - this, of course, changes just about every file in the repository.
+
+2002-01-04 12:52 hardaker
+
+ * agent/mibgroup/misc/dlmod.c, agent/mibgroup/misc/ipfwacc.c
+, include/net-snmp/acconfig.h,
+ include/net-snmp/net-snmp-config.h.in,
+ include/ucd-snmp/README, snmplib/Makefile.in,
+ snmplib/asn1.c, snmplib/callback.c,
+ snmplib/data_list.c, snmplib/default_store.c,
+ snmplib/int64.c, snmplib/keytools.c,
+ snmplib/lcd_time.c, snmplib/md5.c, snmplib/mib.c
+, snmplib/mt_support.c, snmplib/oid_array.c,
+ snmplib/oid_stash.c, snmplib/parse.c,
+ snmplib/read_config.c, snmplib/scapi.c,
+ snmplib/snmp-tc.c, snmplib/snmp.c,
+ snmplib/snmpAAL5PVCDomain.c, snmplib/snmpCallbackDomain.c
+, snmplib/snmpIPXDomain.c, snmplib/snmpTCPDomain.c
+, snmplib/snmpTCPIPv6Domain.c, snmplib/snmpUDPDomain.c
+, snmplib/snmpUDPIPv6Domain.c, snmplib/snmpUnixDomain.c
+, snmplib/snmp_alarm.c, snmplib/snmp_api.c,
+ snmplib/snmp_auth.c, snmplib/snmp_client.c,
+ snmplib/snmp_debug.c, snmplib/snmp_enum.c,
+ snmplib/snmp_logging.c, snmplib/snmp_parse_args.c,
+ snmplib/snmp_secmod.c, snmplib/snmp_transport.c,
+ snmplib/snmpksm.c, snmplib/snmpusm.c, snmplib/snmpv3.c
+, snmplib/snprintf.c, snmplib/strtol.c,
+ snmplib/strtoul.c, snmplib/system.c, snmplib/tools.c
+, snmplib/vacm.c, testing/T.c,
+ testing/etimetest.c, testing/keymanagetest.c,
+ testing/misctest.c, testing/scapitest.c:
+
+ beginnings of ucd-snmp -> net-snmp structural changes.
+ - config.h -> include/net-snmp/net-snmp-config.h
+ - this, of course, changes just about every file in the repository.
+
+2002-01-04 12:49 hardaker
+
+ * Makefile.in, Makefile.top, configure,
+ configure.in, sedscript.in, agent/Makefile.in
+, agent/agent_handler.c, agent/agent_index.c,
+ agent/agent_read_config.c, agent/agent_registry.c,
+ agent/agent_trap.c, agent/auto_nlist.c,
+ agent/kernel.c, agent/mib_modules.c,
+ agent/snmp_agent.c, agent/snmp_vars.c,
+ agent/snmpd.c, agent/helpers/Makefile.in,
+ agent/helpers/bulk_to_next.c, agent/helpers/debug_handler.c
+, agent/helpers/instance.c, agent/helpers/multiplexer.c
+, agent/helpers/null.c, agent/helpers/old_api.c,
+ agent/helpers/read_only.c, agent/helpers/serialize.c,
+ agent/helpers/table.c, agent/helpers/table_array.c,
+ agent/helpers/table_data.c, agent/helpers/table_dataset.c
+, agent/helpers/table_iterator.c,
+ agent/mibgroup/Makefile.in, agent/mibgroup/header_complex.c
+, agent/mibgroup/kernel_sunos5.c,
+ agent/mibgroup/testdelayed.c, agent/mibgroup/testhandler.c
+, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/Rmon/agutil.c, agent/mibgroup/Rmon/alarm.c
+, agent/mibgroup/Rmon/event.c,
+ agent/mibgroup/Rmon/history.c, agent/mibgroup/Rmon/rows.c
+, agent/mibgroup/Rmon/statistics.c,
+ agent/mibgroup/agent/nsTransactionTable.c,
+ agent/mibgroup/agentx/agentx_config.c,
+ agent/mibgroup/agentx/client.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/disman/mteObjectsTable.c,
+ agent/mibgroup/disman/mteTriggerBooleanTable.c,
+ agent/mibgroup/disman/mteTriggerDeltaTable.c,
+ agent/mibgroup/disman/mteTriggerExistenceTable.c,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/disman/mteTriggerThresholdTable.c,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/host/hr_device.c,
+ agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_other.c,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_print.c,
+ agent/mibgroup/host/hr_proc.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/ipAddr.c,
+ agent/mibgroup/mibII/ipv6.c,
+ agent/mibgroup/mibII/kernel_linux.c,
+ agent/mibgroup/mibII/mta_sendmail.c,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/tcpTable.c
+, agent/mibgroup/mibII/udp.c,
+ agent/mibgroup/mibII/udpTable.c,
+ agent/mibgroup/mibII/vacm_context.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/var_route.c:
+
+ beginnings of ucd-snmp -> net-snmp structural changes.
+ - config.h -> include/net-snmp/net-snmp-config.h
+ - this, of course, changes just about every file in the repository.
+
+2002-01-04 12:47 hardaker
+
+ * acconfig.h, config.h.in:
+
+ removed uneeded older files
+
+2002-01-03 14:15 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ patch #492072 to main branch
+
+2002-01-03 14:00 hardaker
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ check results of setmntent before using them.
+
+2002-01-03 13:57 hardaker
+
+ * apps/snmpnetstat/if.c:
+
+ check against growing server returns as pointed out by bug #498956
+
+2002-01-03 11:40 hardaker
+
+ * perl/manager/displaytable.pm:
+
+ PNGGraph -> GDGraph
+
+2002-01-03 11:39 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ change export name to "net-snmp" from "ucd-snmp"
+
+2002-01-03 11:39 hardaker
+
+ * agent/mibgroup/testhandler.c,
+ local/mib2c.create-dataset.conf, local/mib2c.iterate.conf
+:
+
+ make use of the new multi-add functions.
+
+2002-01-03 11:38 hardaker
+
+ * agent/helpers/: table_dataset.c, table_dataset.h:
+
+ add multiple default row column definitions using one function call (varargs).
+
+2002-01-03 11:38 hardaker
+
+ * agent/helpers/: table.c, table.h:
+
+ add multiple indexes using one function call (varargs).
+
+2002-01-03 11:37 hardaker
+
+ * agent/snmp_vars.h:
+
+ remove no longer defined v4 api functions (getStatPtr no less).
+
+2002-01-03 11:37 hardaker
+
+ * agent/snmp_agent.h:
+
+ remove no longer defined v4 api functions.
+
+2002-01-03 10:31 hardaker
+
+ * snmplib/: Makefile.in, oid_stash.c, oid_stash.h
+:
+
+ data stashing based on an oid caching tree.
+
+2001-12-26 15:36 hardaker
+
+ * perl/manager/: INSTALL, Makefile.PL, manager.pm
+:
+
+ update to make it a bit easier to install (including a Makefile for
+ automated installation).
+
+2001-12-26 13:20 hardaker
+
+ * perl/manager/: INSTALL, displaytable.pm, getValues.pm
+, green.gif, manager.pm, red.gif, setupauth
+, setupdb, setupuser, snmptosql:
+
+ moving manager to perl/manager
+
+2001-12-24 16:10 hardaker
+
+ * FAQ, sedscript.in, version.h,
+ perl/SNMP/SNMP.pm:
+
+ - (version.h sedscript.in): version tag ( 5.0.pre1 )
+
+2001-12-24 16:04 hardaker
+
+ * local/: Makefile.in, mib2c, mib2c.conf:
+
+ Update to make people understand that it's not finished and you must
+ reference a particular configuration file at this point.
+
+2001-12-24 15:51 hardaker
+
+ * FAQ, sedscript.in, version.h,
+ perl/SNMP/SNMP.pm:
+
+ - (version.h sedscript.in): version tag ( 5.0.not.even.close )
+
+2001-12-24 15:50 hardaker
+
+ * README:
+
+ more comments.
+
+2001-12-24 15:41 hardaker
+
+ * FAQ, README:
+
+ more updates
+
+2001-12-24 15:20 hardaker
+
+ * agent/helpers/old_api.c:
+
+ doxygen comments
+
+2001-12-24 15:20 hardaker
+
+ * NEWS, README:
+
+ 5.0 comment updates.
+
+2001-12-24 15:19 hardaker
+
+ * agent/agent_handler.c:
+
+ doxygen comments on a few functions.
+
+2001-12-24 15:09 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ memory leaks.
+
+2001-12-24 10:06 hardaker
+
+ * agent/Makefile.in:
+
+ remove dependencies for non-existent modules
+
+2001-12-23 15:47 hardaker
+
+ * net-snmp-config:
+
+ opps. Don't check in generated files.
+
+2001-12-23 15:46 hardaker
+
+ * config.h.in, configure, configure.in,
+ agent/mibgroup/host/hr_swinst.c:
+
+ fix rpm usage (I hope).
+
+2001-12-23 14:50 hardaker
+
+ * agent/mibgroup/agent/.cvsignore:
+
+ added .cvsignore file
+
+2001-12-23 14:49 hardaker
+
+ * Makefile.in:
+
+ install net-snmp-config.
+
+2001-12-23 14:47 hardaker
+
+ * NEWS, configure, configure.in,
+ net-snmp-config, net-snmp-config.in, agent/Makefile.in
+, apps/Makefile.in:
+
+ - created a net-snmp-config script to report compiled libs.
+ - separated libs needed by agent from those needed by the rest of the
+ applications.
+
+2001-12-21 16:53 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ mention how to install DBI
+
+2001-12-21 16:44 hardaker
+
+ * perl/AnyData_SNMP/Makefile.PL:
+
+ remove version requirement for AnyData
+
+2001-12-21 16:37 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ make install as root.
+
+2001-12-21 16:32 hardaker
+
+ * perl/AnyData_SNMP/: INSTALL, INSTALL, INSTALL,
+ INSTALL:
+
+ better descr
+
+2001-12-21 16:09 hardaker
+
+ * perl/AnyData_SNMP/README:
+
+ minor wording change.
+
+2001-12-21 16:07 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ mention it's very alpha code.
+
+2001-12-21 16:06 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ new instructions
+
+2001-12-21 10:18 hardaker
+
+ * NEWS:
+
+ mention doxygen.
+
+2001-12-21 10:17 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/agent_mibs.h:
+
+ compile in agent specific support mibs.
+
+2001-12-21 09:49 hardaker
+
+ * NEWS:
+
+ (still incomplete) 2nd update for 5.0
+
+2001-12-21 09:44 hardaker
+
+ * NEWS:
+
+ (incomplete) update for 5.0
+
+2001-12-19 17:10 hardaker
+
+ * snmplib/asn1.c:
+
+ fix realloc float and double builds.
+
+2001-12-19 16:34 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ misc fixes.
+
+2001-12-19 16:33 hardaker
+
+ * local/mib2c:
+
+ define a C datatype as $var.decl (per Robert's suggestion. Robert: we
+ probably want pointers for things like strings, no? maybe one type
+ that is always a pointer and another that is sometimes depending on
+ the type?)
+
+2001-12-19 16:32 hardaker
+
+ * apps/snmpbulkwalk.c:
+
+ change default bulk number to 100 from the ridiculous 1000.
+
+2001-12-19 16:32 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, snmplib/Makefile.in:
+
+ make depend
+
+2001-12-19 08:10 hardaker
+
+ * agent/: snmp_agent.c, helpers/bulk_to_next.c:
+
+ getbulk updates to make it the modules responsibility to update the
+ varbind chain an the repeat counter.
+
+2001-12-19 07:57 hardaker
+
+ * agent/: agent_handler.c, snmp_agent.c, snmp_agent.h
+, helpers/Makefile.in, helpers/all_helpers.c,
+ helpers/all_helpers.h, helpers/bulk_to_next.c,
+ helpers/bulk_to_next.h:
+
+ GETBULK support for the new API.
+ - may need to make some slight modifications.
+ - defaults to GETNEXT for any handler that doesn't set HANDLER_CAN_GETBULK.
+ - doesn't deal properly yet with end-of-mib condition removal.
+
+2001-12-19 06:05 jbpn
+
+ * apps/snmptrapd.c:
+
+ - drop -p option. Addresses to listen on now come as optional
+ arguments at the end of the command line.
+
+ - drop (long-deprecated) -q option.
+
+ - re-ordered options in usage message to be alphabetical, and
+ changed description of some options to be more similar to snmpd
+ options (where appropriate).
+
+2001-12-19 04:38 jbpn
+
+ * agent/snmpd.c:
+
+ - drop -p and -T options. Addresses to listen on now come as
+ optional arguments at the end of the command line.
+
+ - re-ordered options in usage message to be alphabetical, plus
+ minor formatting tweaks.
+
+ - re-written options processing loop to use optarg().
+
+2001-12-18 08:44 jbpn
+
+ * mibs/: UCD-SNMP-MIB.txt (V4-2-patches.5), UCD-SNMP-MIB.txt
+:
+
+ - add OBJECT IDENTIFIER for win32 agent
+
+2001-12-18 08:16 hardaker
+
+ * agent/helpers/old_api.c:
+
+ warning -> debug.
+
+2001-12-17 10:15 jbpn
+
+ * agent/snmp_agent.c:
+
+ - handle getNext queries where the initial varbind->type is
+ ASN_PRIV_INCL_RANGE (these currently arise only in AgentX
+ subagents but the handling is not specific to AgentX).
+
+ Basically this is done by performing a GET first on all the
+ variables in a request. For variables that had an initial type of
+ ASN_PRIV_INCL_RANGE and were satisfied by this initial GET, we use
+ this value as the result. For variables that did not have an
+ initial type of ASN_PRIV_INCL_RANGE, or variable that had and
+ initial type of ASN_PRIV_INCL_RANGE but were not satisfied by this
+ GET request, we proceed to perform a GET-NEXT type request as
+ normal.
+
+2001-12-17 10:04 jbpn
+
+ * agent/helpers/old_api.c:
+
+ - add function register_mib_table_row() which emulates old
+ functionality.
+
+ - use snmp_handler_registration_free() in register_old_api().
+
+2001-12-17 09:39 jbpn
+
+ * snmplib/mib.c:
+
+ - fix bogus indent
+
+2001-12-17 09:38 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - right number of arguments for register_mib_context2() in
+ register_agentx_list().
+
+ - use snmp_handler_registration_free() in ditto.
+
+2001-12-13 19:22 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ remove handler injection order (serialize needs to be called first)
+
+2001-12-13 19:22 hardaker
+
+ * agent/snmp_agent.c:
+
+ remove unneeded check for already answered ASN_NULLs in first pass.
+
+2001-12-12 09:31 hardaker
+
+ * perl/AnyData_SNMP/: .cvsignore, INSTALL, MANIFEST
+, README, snmpsh:
+
+ - doc update.
+ - snmpsh now supports aliases so you can define command sets.
+ - snmpsh now reads a ~/.snmpshrc file for storing these defined aliases.
+
+2001-12-12 06:42 jbpn
+
+ * agent/agent_registry.c:
+
+ - new function join_subtree() which repairs "punctured" subtrees
+ (these arise in particular when AgentX row registrations are
+ withdrawn).
+
+ - copy reginfo when doing a range registration (as we used to do
+ with the variable structure), since each node must stand alone.
+
+ - add parameter to register_mib_context2 to allow REGISTER_OID
+ callbacks to be withheld (for instance, you need this to avoid
+ excess AgentX traffic for row registrations).
+
+ - remove register_mib_table_row() -- this has moved to old_api.c
+
+ - call join_subtree() in unregister_mibs_by_session().
+
+2001-12-12 06:33 jbpn
+
+ * agent/: agent_handler.c, agent_handler.h:
+
+ - add functions snmp_handler_free(), snmp_handler_dup(),
+ snmp_handler_registration_dup() and
+ snmp_handler_registration_free().
+
+2001-12-11 18:41 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ Fix bug where pdu->contextName is NULL.
+
+2001-12-11 07:34 hardaker
+
+ * local/mib2c:
+
+ BITS: ipaddr -> octet_str
+
+2001-12-11 04:11 jbpn
+
+ * agent/: snmp_agent.c, snmp_agent.h,
+ mibgroup/agentx/master.c:
+
+ - send INCLUSIVE search ranges if appropriate
+
+2001-12-10 20:43 rstory
+
+ * local/mib2c:
+
+ add noaccess flag for not-accessible nodes
+
+2001-12-10 14:51 hardaker
+
+ * perl/AnyData_SNMP/: Changes, DBD_AnyData.patch,
+ Format.pm, INSTALL, MANIFEST, Makefile.PL,
+ Storage.pm, snmpsh:
+
+ First version
+
+2001-12-10 03:20 jbpn
+
+ * agent/agent_read_config.c:
+
+ - don't strdup arg to ds_set_string
+
+2001-12-10 03:19 jbpn
+
+ * snmplib/read_config.c:
+
+ - ditto in set_persistent_directory()
+
+2001-12-10 03:18 jbpn
+
+ * snmplib/read_config.c:
+
+ - don't strdup() in set_configuration_directory() because
+ ds_set_string() already does that for you.
+
+2001-12-07 09:43 hardaker
+
+ * agent/: helpers/table_iterator.c, helpers/table_iterator.h
+, mibgroup/agent/nsTransactionTable.c,
+ mibgroup/mibII/vacm_context.c:
+
+ - Implement new mantra: "always pass more information, rather than less".
+ - fix table iterater GETNEXTs for missing data points.
+ - add a new hook to free loop contexts at the end of the entire iteration.
+
+2001-12-06 06:58 jbpn
+
+ * agent/mibgroup/agentx/: client.c (JBPN-CBL-4.1), client.c:
+
+ - if request IDs don't match, then call handle_agentx_packet() --
+ copes better with unexpected packets, in particular fixes
+ intermittent duplicate trap issue (due to resent
+ agentx-Notify-PDU).
+
+2001-12-05 13:46 hardaker
+
+ * snmplib/snmp-tc.c:
+
+ Ahem. Opps. Missing includes.
+ - note to self: compile first, *then* check in changes.
+
+2001-12-05 13:41 hardaker
+
+ * snmplib/snmp-tc.c:
+
+ add in the missing functions from the NEW-AGENT-API branch.
+ (and to answer Robert's pending question of what happened, it was
+ likely one of the files that failed to commit on my side that you
+ tried to fix and somewhere between the two of us the changes were lost).
+
+2001-12-05 10:03 jbpn
+
+ * man/snmpcmd.1:
+
+ - minor tweaks
+
+2001-12-05 09:14 jbpn
+
+ * man/snmpcmd.1:
+
+ - add TCP/IPv6 domain to AGENT SPEC section
+
+ - incorporate suggestions from rstory
+
+2001-12-05 08:47 jbpn
+
+ * snmplib/snmpTCPIPv6Domain.c:
+
+ - use SOCK_STREAM not SOCK_DGRAM (duh!). You wouldn't believe how
+ confusing this was -- e.g. how on *earth* can that connect() be
+ succeeding!
+
+2001-12-05 08:36 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ - make sure to close socket if you can't malloc the encoded far-end
+ address in snmp_tcp_transport()
+
+2001-12-05 08:27 hardaker
+
+ * win32/: snmptranslate/snmptranslate.dsp,
+ snmptrap/snmptrap.dsp, snmptrapd/snmptrapd.dsp,
+ snmpusm/snmpusm.dsp, snmpvacm/snmpvacm.dsp:
+
+ merge from 4.2 patches to main line
+
+2001-12-05 08:23 hardaker
+
+ * ChangeLog, FAQ, NEWS, README,
+ README.win32, acconfig.h, config.h.in,
+ configure, configure.in, sedscript.in,
+ agent/agent_callbacks.h, agent/agent_read_config.c,
+ agent/snmpd.c, agent/mibgroup/kernel_sunos5.c,
+ agent/mibgroup/versiontag, agent/mibgroup/host/hr_disk.c
+, agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_system.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/ipAddr.c,
+ agent/mibgroup/mibII/kernel_linux.c,
+ agent/mibgroup/mibII/kernel_linux.h,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/tcpTable.c
+, agent/mibgroup/mibII/udp.c,
+ agent/mibgroup/mibII/udpTable.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c,
+ apps/snmpnetstat/if.c, local/mib2c, local/tkmib
+, man/snmpd.conf.5.def, mibs/UCD-SNMP-MIB.txt,
+ perl/SNMP/SNMP.pm, snmplib/asn1.c,
+ snmplib/default_store.h, snmplib/mib.c,
+ snmplib/read_config.c, snmplib/read_config.h,
+ snmplib/snmp.h, snmplib/snmp_api.c,
+ win32/snmpwalk/snmpwalk.dsp, win32/config.h,
+ win32/mib_module_config.h, win32/mib_module_includes.h,
+ win32/mib_module_inits.h, win32/win32.dsw,
+ win32/win32.opt, win32/encode_keychange/encode_keychange.dsp
+, win32/libagent/libagent.dsp, win32/libsnmp/libsnmp.dsp
+, win32/libsnmp_dll/libsnmp.def,
+ win32/libsnmp_dll/libsnmp_dll.dsp,
+ win32/libucdmibs/libucdmibs.dsp,
+ win32/snmpbulkget/snmpbulkget.dsp,
+ win32/snmpbulkwalk/snmpbulkwalk.dsp, win32/snmpd/snmpd.dsp
+, win32/snmpdelta/snmpdelta.dsp, win32/snmpdf/snmpdf.dsp
+, win32/snmpget/snmpget.dsp,
+ win32/snmpgetnext/snmpgetnext.dsp,
+ win32/snmpnetstat/snmpnetstat.dsp, win32/snmpset/snmpset.dsp
+, win32/snmpstatus/snmpstatus.dsp,
+ win32/snmptable/snmptable.dsp, win32/snmptest/snmptest.dsp
+:
+
+ merge from 4.2 patches to main line
+
+2001-12-05 07:51 jbpn
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ - fix bug in address parser
+
+2001-12-05 07:48 jbpn
+
+ * snmplib/: snmpTCPIPv6Domain.c, snmpUDPIPv6Domain.c:
+
+ - minor changes to, ahem, make it compile
+
+2001-12-05 07:42 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ - conditionalise #include <fcntl.h>
+
+2001-12-05 07:38 jbpn
+
+ * snmplib/snmp_transport.c:
+
+ - fix typo
+
+2001-12-05 07:29 jbpn
+
+ * acconfig.h, configure.in:
+
+ - mention the TCP/IPv6 transport in config, and add a #define for it
+ if appropriate
+
+2001-12-05 07:28 jbpn
+
+ * snmplib/snmp_transport.c:
+
+ - call snmp_tcp6_ctor() if appropriate
+
+2001-12-05 07:27 jbpn
+
+ * snmplib/: snmpTCPIPv6Domain.c, snmpTCPIPv6Domain.h:
+
+ - TCP/IPv6 transport domain. Untested.
+
+2001-12-05 07:19 jbpn
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ - make encoded addresses at transport open time
+
+2001-12-05 07:17 jbpn
+
+ * snmplib/: snmpTCPDomain.c, snmp_transport.h:
+
+ - move #definition of SNMP_STREAM_QUEUE_LEN from snmpTCPDomain.c
+ to snmp_transport.h
+
+2001-12-05 07:10 hardaker
+
+ * agent/: snmp_agent.c, snmp_vars.c:
+
+ remove some unneeded functions like, oh, I don't know, getStatPtr().
+
+2001-12-05 05:43 jbpn
+
+ * snmplib/snmp_api.h:
+
+ - remove legacy callback operation names
+
+2001-12-05 05:06 jbpn
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ - changed textual address parsing
+
+2001-12-04 22:52 nba
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ Fix bind parameters, so that the agent works
+
+2001-12-04 13:36 hardaker
+
+ * agent/helpers/table.h, agent/helpers/table_iterator.c
+, agent/helpers/table_iterator.h,
+ agent/mibgroup/agent/nsTransactionTable.c,
+ agent/mibgroup/mibII/vacm_context.c, local/mib2c.iterate.conf
+:
+
+ - move forgotten function typedefs to iterator specific header file.
+ - add a void * pointer for the callbacks to make functions more reusable.
+
+2001-12-04 13:11 hardaker
+
+ * agent/helpers/table.h, agent/helpers/table_iterator.c
+, agent/helpers/table_iterator.h,
+ agent/mibgroup/agent/nsTransactionTable.c,
+ agent/mibgroup/mibII/vacm_context.c, local/mib2c.iterate.conf
+:
+
+ move iterator specific table information into its own structure.
+
+2001-12-04 12:16 hardaker
+
+ * agent/helpers/all_helpers.h:
+
+ Fix prototype as pointed out by Jerome Peducasse
+
+2001-12-04 10:10 jbpn
+
+ * man/snmpcmd.1:
+
+ - mention that not all transport domains are always available.
+
+2001-12-04 09:55 jbpn
+
+ * man/snmpcmd.1:
+
+ - remove -p and -T options from documentation.
+
+ - add lengthy new section describing new transport address
+ specification format, with examples and everything!
+
+2001-12-04 07:14 jbpn
+
+ * snmplib/snmp_parse_args.c:
+
+ - drop -p and -T options for apps.
+
+2001-12-04 03:10 jbpn
+
+ * snmplib/: snmpUDPIPv6Domain.c, snmpUDPIPv6Domain.h:
+
+ - add create_ostring method, export ucdSnmpUDPIPv6Domain[]
+
+2001-12-04 02:19 jbpn
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - mention IPv6 transport domain OIDs in relevant comment.
+
+2001-12-03 15:07 nba
+
+ * snmplib/snmpUDPDomain.c:
+
+ Quell a const cast warning.
+
+2001-12-03 15:07 nba
+
+ * snmplib/snmp_api.c:
+
+ Fix debug output from retries.
+
+2001-12-03 15:06 nba
+
+ * apps/notification_log.c, snmplib/oid_array.c:
+
+ HAVE_SYS_TYPES_H is not conditional.
+
+2001-12-03 15:04 nba
+
+ * apps/Makefile.in:
+
+ Fix to allow compilations outside source directory.
+
+2001-12-03 15:03 nba
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, snmplib/snmpUDPIPv6Domain.c,
+ snmplib/snmp_transport.c:
+
+ Fixes to make UDPIPv6 transport work for Solaris, Linux and FreeBSD.
+ It compiles, and the apps send v6 packets. Agent not yet tested.
+
+2001-12-03 09:48 hardaker
+
+ * local/: mib2c.iterate.conf, mib2c.create-dataset.conf
+:
+
+ copy roberts spiffy header text
+
+2001-12-03 08:36 hardaker
+
+ * apps/notification_log.c:
+
+ datentime column.
+
+2001-12-03 08:01 hardaker
+
+ * agent/snmp_agent.c:
+
+ fix problem with double delegated requests after getnext loop.
+
+2001-12-03 08:00 hardaker
+
+ * configure, configure.in,
+ mibs/NOTIFICATION-LOG-MIB.txt:
+
+ notification log mib added to default list.
+
+2001-12-03 05:33 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - remove spurious debugging output ("blah")
+
+2001-11-30 23:26 hardaker
+
+ * agent/: agent_handler.c, snmp_agent.c, snmp_agent.h
+:
+
+ Change how request processing gets done such that request objects are
+ all calloced at once and get reused instead of reallocated. Big speed
+ improvements.
+
+2001-11-30 15:22 hardaker
+
+ * Makefile.in, doxygen.conf:
+
+ "make doc" to run doxygen.
+
+2001-11-30 10:31 hardaker
+
+ * agent/helpers/: debug_handler.c, multiplexer.h:
+
+ doxygen fixes
+
+2001-11-30 09:26 jbpn
+
+ * agent/agent_handler.c:
+
+ - use DEBUGMSGOIDRANGE in register_handler() if appropriate.
+
+2001-11-30 09:24 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - fix memory leak in register_agentx_list() when subagent tries to
+ register a MIB region that fails either because it is a duplicate
+ or because of some other reason.
+
+2001-11-30 08:44 jbpn
+
+ * agent/helpers/old_api.c:
+
+ - fix memory leak of old_info (that never seems to get used for
+ anything anyway?)
+
+ - fix memory leak that arises during row registration (in AgentX
+ subagents) because successive vars cause apparent duplicate
+ registrations (this is a deficiency) -- but it would appear this
+ could arise in other situations too (genuine duplicate
+ registrations).
+
+2001-11-30 06:33 jbpn
+
+ * agent/agent_trap.c:
+
+ - fix broken parsing in snmpd_parse_config_trapsess() -- loop was
+ copying the same (first) token MAX_ARGS times.
+
+ - eliminate memory leak in ditto.
+
+ - fix typo ("Pausible cause" -> "Possible cause) in ditto.
+
+2001-11-30 06:29 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - print fd in sess_process_packet() -- useful for debugging
+
+2001-11-30 06:28 jbpn
+
+ * snmplib/: snmpCallbackDomain.c, snmpCallbackDomain.h:
+
+ - remove a couple of unnecessary #includes from snmpCallbackDomain.h
+
+ - set *opaque to NULL after we free it -- it might matter.
+
+2001-11-30 03:47 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - clone PDU in handle_agentx_subagent() before sending it on callback
+ session to avoid double free() and free()d memory reads.
+
+ - more concise (ahem) declaration of mycallback in handle_agentx_packet().
+
+2001-11-29 05:51 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - put session and subsession in subagent description (helpful for
+ debugging)
+
+2001-11-29 05:49 jbpn
+
+ * agent/helpers/Makefile.in:
+
+ - fix INSTALLHEADERS
+
+2001-11-29 05:48 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - add some debugging to init_subagent() (which showed that it wasn't
+ being called, so...).
+
+ - fix cast in handle_subagent_set_response()
+
+2001-11-29 05:46 jbpn
+
+ * agent/snmp_vars.c:
+
+ - make sure init_subagent() gets called
+
+2001-11-28 09:28 hardaker
+
+ * agent/agent_registry.c:
+
+ check for session registrations in all contexts.
+
+2001-11-28 06:39 hardaker
+
+ * apps/notification_log.c, snmplib/oid_array.c:
+
+ Add sys/types.h for bug #486277.
+
+2001-11-28 04:03 jbpn
+
+ * apps/notification_log.c:
+
+ - #include <netdb.h>
+
+2001-11-28 04:03 jbpn
+
+ * configure.in, snmplib/Makefile.in:
+
+ - install snmp_transport.h and snmp*Domain.h (for the configured
+ transport domains)
+
+2001-11-28 03:29 jbpn
+
+ * snmplib/ucd-snmp-includes.h:
+
+ - reverse mystery removal of #include <netinet/in.h> and #include
+ <sys/time.h>
+
+2001-11-27 17:28 hardaker
+
+ * agent/: snmp_agent.c, snmp_agent.h:
+
+ more intelligently allocate tree space based on number of varbinds in request.
+
+2001-11-27 14:26 hardaker
+
+ * agent/: snmp_agent.c, snmp_agent.h:
+
+ malloc one large tree_cache array rather than an array of tree_cache pointers.
+
+2001-11-27 12:19 hardaker
+
+ * agent/helpers/all_helpers.h:
+
+ include file name change.
+
+2001-11-27 11:43 hardaker
+
+ * agent/snmp_agent.c:
+
+ comment changes.
+
+2001-11-27 07:52 hardaker
+
+ * apps/Makefile.in:
+
+ fixed Makefile for snmptrapd.
+
+2001-11-27 07:48 hardaker
+
+ * agent/helpers/: Makefile.in, all_helpers.c,
+ all_helpers.h, debug_handler.c, debug_handler.h:
+
+ debug handler created for inserting debugging output into the calling chain.
+
+2001-11-27 07:47 hardaker
+
+ * agent/agent_handler.c:
+
+ enum definitions for modes and can_modes.
+
+2001-11-26 15:29 hardaker
+
+ * agent/snmp_agent.c:
+
+ set PDU variable to NULL to avoid freeing it twice.
+
+2001-11-26 11:20 hardaker
+
+ * snmplib/snmpCallbackDomain.c:
+
+ plug another memory leak.
+
+2001-11-26 09:07 hardaker
+
+ * testing/tests/: T020snmpv3get, T021snmpv3getnext,
+ T022snmpv3getMD5, T023snmpv3getMD5DES,
+ T024snmpv3getSHA1, T025snmpv3getSHADES,
+ T028snmpv3getfail, T030snmpv3usercreation,
+ T053agentv1trap, T054agentv2ctrap, T055agentv1mintrap
+, T056agentv2cmintrap, T110agentxget,
+ T111agentxset, T112agentxsetfail, T113agentxtrap,
+ T120proxyget, T121proxyset, T122proxysetfail:
+
+ don't use contexts in tests.
+
+2001-11-26 08:57 hardaker
+
+ * snmplib/snmpCallbackDomain.c:
+
+ fix memory leak.
+
+2001-11-26 08:49 hardaker
+
+ * agent/mibgroup/: testdelayed.c, agentx/master.c,
+ ucd-snmp/proxy.c:
+
+ use free_delegated_cache() to plug memory leaks.
+
+2001-11-26 08:48 hardaker
+
+ * agent/: agent_handler.c, agent_handler.h:
+
+ free_delegated_cache() routine
+
+2001-11-26 08:19 jbpn
+
+ * apps/snmptrapd.c:
+
+ - add the ability to listen for traps on multiple transports via the
+ -p option (consistent with snmpd).
+
+2001-11-26 05:44 jbpn
+
+ * agent/mibgroup/target/target.c:
+
+ - use snmp_tdomain_transport_oid() to do session creation from
+ <tDomain-oid, tAddress-octet-string> pair, to allow creation of
+ non-IPv4 sessions in snmpTargetAddrTable.
+
+2001-11-26 04:45 jbpn
+
+ * snmplib/: snmpAAL5PVCDomain.c, snmpIPXDomain.c,
+ snmpTCPDomain.c, snmpUDPDomain.c, snmpUnixDomain.c
+, snmp_transport.c, snmp_transport.h:
+
+ - add support for creating a transport from a
+ <tDomain-oid, tAddress-octet-string> pair.
+
+2001-11-26 03:06 jbpn
+
+ * agent/mibgroup/target/target.c:
+
+ - use snmp_tdomain_support() to determine whether a transport domain
+ is supported.
+
+2001-11-23 10:24 jbpn
+
+ * apps/snmptrapd.c:
+
+ - add multiple transport domain support for trapd -- this was really
+ REALLY easy!
+
+2001-11-23 09:25 jbpn
+
+ * agent/mibgroup/disman/mteTriggerTable.c,
+ snmplib/snmp_transport.c, snmplib/snmp_transport.h:
+
+ - remove legacy function snmp_transport_support() (replaced with
+ snmp_tdomain_support()).
+
+2001-11-23 08:57 jbpn
+
+ * snmplib/snmpAAL5PVCDomain.c:
+
+ - use network order for AAL5PVC transport address encoding
+
+2001-11-23 08:47 jbpn
+
+ * snmplib/: snmpAAL5PVCDomain.c, snmpIPXDomain.c,
+ snmpUnixDomain.c:
+
+ - set local_length, remote_length as appropriate
+
+2001-11-23 08:39 jbpn
+
+ * snmplib/Makefile.in:
+
+ - fix typo
+
+2001-11-23 08:34 jbpn
+
+ * agent/: agent_trap.c,
+ mibgroup/notification/snmpNotifyTable.c:
+
+ - make traps work with new-style addresses, use domain-based address
+ encodings in snmpTargetAddrTable. Note you can now send traps/informs
+ over any supported transport type by using the trapsess directive and
+ a transport:address type specification.
+
+2001-11-23 08:31 jbpn
+
+ * snmplib/: snmpAAL5PVCDomain.c, snmpIPXDomain.c,
+ snmpTCPDomain.c, snmpUDPDomain.c, snmpUnixDomain.c
+:
+
+ - create appropriately-encoded local or remote endpoint addresses at
+ transport open time.
+
+2001-11-23 06:50 jbpn
+
+ * snmplib/Makefile.in:
+
+ - update dependencies for transports
+
+2001-11-22 09:08 jbpn
+
+ * testing/: TESTCONF.sh, eval_tools.sh,
+ tests/T001snmpv1get, tests/T002snmpv1getnext,
+ tests/T003snmpv1getfail, tests/T014snmpv2cget,
+ tests/T015snmpv2cgetnext, tests/T016snmpv2cgetfail,
+ tests/T017snmpv2ctov1getfail, tests/T018snmpv1tov2cgetfail
+, tests/T020snmpv3get, tests/T021snmpv3getnext,
+ tests/T022snmpv3getMD5, tests/T023snmpv3getMD5DES,
+ tests/T024snmpv3getSHA1, tests/T025snmpv3getSHADES,
+ tests/T028snmpv3getfail, tests/T030snmpv3usercreation,
+ tests/T049snmpv3inform, tests/T050snmpv3trap,
+ tests/T051snmpv2ctrap, tests/T052snmpv2cinform,
+ tests/T053agentv1trap, tests/T054agentv2ctrap,
+ tests/T055agentv1mintrap, tests/T056agentv2cmintrap,
+ tests/T058agentauthtrap, tests/T100agenthup,
+ tests/T110agentxget, tests/T111agentxset,
+ tests/T112agentxsetfail, tests/T113agentxtrap,
+ tests/T120proxyget, tests/T121proxyset,
+ tests/T122proxysetfail:
+
+ - use udp:<hostname>:<port> instead of -p to make tests work again
+
+2001-11-22 00:20 hardaker
+
+ * apps/: notification_log.c, notification_log.h:
+
+ mork wore on the notification log mib. It now supports variable
+ storage, but segfaults on access due to pdu cloning problems I'm not
+ going to work out right now.
+
+2001-11-21 23:15 hardaker
+
+ * apps/Makefile.in:
+
+ fix snmptrapd linking.
+
+2001-11-21 22:58 rstory
+
+ * snmplib/asn1.h:
+
+ remove duplicate OID_LENGTH; use actual oid type in calculation
+
+2001-11-21 22:49 hardaker
+
+ * snmplib/snmpCallbackDomain.c:
+
+ add NULL pointer for rbuild in session creation.
+
+2001-11-21 22:49 hardaker
+
+ * agent/mibgroup/ucd-snmp/proxy.c, apps/notification_log.c
+:
+
+ netinet/in.h needed.
+
+2001-11-21 22:49 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ variable clean ups.
+
+2001-11-21 22:33 hardaker
+
+ * agent/mibgroup/agentx/master_request.c,
+ agent/mibgroup/mibII/icmp.c, agent/mibgroup/mibII/tcpTable.c
+, agent/mibgroup/mibII/udpTable.c,
+ agent/mibgroup/ucd-snmp/file.c, local/mib2c,
+ local/mib2c.array-auto.conf, local/mib2c.array-user.conf
+, local/mib2c.create-dataset.conf,
+ local/mib2c.iterate.conf, local/mib2c.vartypes.conf,
+ man/Makefile.in, mibs/Makefile.in,
+ mibs/NET-SNMP-AGENT-MIB.txt, perl/SNMP/SNMP.xs,
+ snmplib/Makefile.in, snmplib/mib.c, snmplib/mib.h
+, snmplib/read_config.c, snmplib/read_config.h,
+ snmplib/snmp-tc.h, snmplib/snmpUnixDomain.h,
+ snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmp_client.c, snmplib/snmp_client.h,
+ snmplib/snmp_transport.c, snmplib/snmp_transport.h,
+ snmplib/tools.c, snmplib/tools.h, snmplib/vacm.c
+:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 22:08 rstory
+
+ * snmplib/: vacm.h, asn1.h:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 21:43 rstory
+
+ * snmplib/: snmpCallbackDomain.c, snmpCallbackDomain.h:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 21:40 rstory
+
+ * snmplib/snmp.h:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 21:33 rstory
+
+ * snmplib/: oid_array.c, oid_array.h:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 21:30 rstory
+
+ * snmplib/: data_list.c, data_list.h:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 18:56 hardaker
+
+ * Makefile.in, config.h.in, configure,
+ configure.in, version.h, agent/Makefile.in,
+ agent/agent_handler.c, agent/agent_handler.h,
+ agent/agent_index.c, agent/agent_read_config.c,
+ agent/agent_registry.c, agent/agent_registry.h,
+ agent/mib_modules.c, agent/snmp_agent.c,
+ agent/snmp_agent.h, agent/snmp_vars.c, agent/snmpd.c
+, agent/ucd-snmp-agent-includes.h, agent/var_struct.h
+, agent/helpers/.cvsignore, agent/helpers/Makefile.in
+, agent/helpers/all_helpers.c,
+ agent/helpers/all_helpers.h, agent/helpers/instance.c,
+ agent/helpers/instance.h, agent/helpers/multiplexer.c,
+ agent/helpers/multiplexer.h, agent/helpers/null.c,
+ agent/helpers/null.h, agent/helpers/old_api.c,
+ agent/helpers/old_api.h, agent/helpers/read_only.c,
+ agent/helpers/read_only.h, agent/helpers/serialize.c,
+ agent/helpers/serialize.h, agent/helpers/set_helper.h,
+ agent/helpers/table.c, agent/helpers/table.h,
+ agent/helpers/table_array.c, agent/helpers/table_array.h
+, agent/helpers/table_data.c, agent/helpers/table_data.h
+, agent/helpers/table_dataset.c,
+ agent/helpers/table_dataset.h, agent/helpers/table_iterator.c
+, agent/helpers/table_iterator.h,
+ agent/mibgroup/Makefile.in, agent/mibgroup/host_res.h
+, agent/mibgroup/mibincl.h, agent/mibgroup/target.h
+, agent/mibgroup/testdelayed.c,
+ agent/mibgroup/testdelayed.h, agent/mibgroup/testhandler.c
+, agent/mibgroup/testhandler.h,
+ agent/mibgroup/util_funcs.c, agent/mibgroup/util_funcs.h
+, agent/mibgroup/agent/nsTransactionTable.c,
+ agent/mibgroup/agent/nsTransactionTable.h,
+ agent/mibgroup/agentx/.cvsignore,
+ agent/mibgroup/agentx/client.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master.h,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/disman/.cvsignore,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/examples/.cvsignore,
+ agent/mibgroup/host/hr_disk.c, agent/mibgroup/host/hr_disk.h
+, agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_partition.h,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/mibII/.cvsignore,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/mibII/vacm_context.c,
+ agent/mibgroup/mibII/vacm_context.h,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/vacm_vars.h,
+ agent/mibgroup/target/target_counters.c,
+ agent/mibgroup/target/target_counters.h,
+ agent/mibgroup/ucd-snmp/proxy.c,
+ agent/mibgroup/ucd-snmp/proxy.h,
+ agent/mibgroup/ucd-snmp/registry.c, apps/Makefile.in,
+ apps/notification_log.c, apps/notification_log.h,
+ apps/snmptrapd.c:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 06:43 jbpn
+
+ * config.h.in:
+
+ - IPv6 config defs
+
+2001-11-21 06:36 jbpn
+
+ * agent/snmp_agent.c, snmplib/snmp_api.c:
+
+ - remove now-extraneous #include "snmpBlahDomain.h" lines
+
+2001-11-21 03:39 jbpn
+
+ * apps/.cvsignore:
+
+ [no log message]
+
+2001-11-20 09:38 jbpn
+
+ * snmplib/: snmpIPXDomain.c, snmpIPXDomain.h:
+
+ - duh. Forgot a couple of things to do with domain-based transport
+ address parsing.
+
+2001-11-20 09:29 jbpn
+
+ * agent/snmp_agent.c:
+
+ - use new domain-based transport address parsing for agent NSAPs
+
+2001-11-20 09:27 jbpn
+
+ * snmplib/: snmpAAL5PVCDomain.c, snmpAAL5PVCDomain.h,
+ snmpIPXDomain.c, snmpTCPDomain.c, snmpTCPDomain.h
+, snmpUDPDomain.c, snmpUDPDomain.h,
+ snmpUnixDomain.c, snmpUnixDomain.h, snmp_api.c,
+ snmp_transport.c, snmp_transport.h:
+
+ - domain-based transport address parsing
+
+2001-11-20 09:16 jbpn
+
+ * snmplib/: snmpUDPIPv6Domain.c, snmpUDPIPv6Domain.h:
+
+ - UDP/IPv6 transport domain. Note: incomplete!
+
+2001-11-20 08:29 jbpn
+
+ * agent/: agent_index.c, agent_index.h:
+
+ - unregister_{string,int,oid}_index() utility functions contributed
+ by Damian Gilmurray.
+
+2001-11-20 02:26 jbpn
+
+ * snmplib/: snmp_api.h (V4-2-patches.1), snmp_api.h:
+
+ - remove duplicate definition of SNMP_MAX_SEC_NAME_SIZE, noted by
+ Karl M. Hegbloom.
+
+2001-11-19 16:59 driehuis
+
+ * snmplib/asn1.h:
+
+ Fix typo in comment [karlheg@microsharp.com]
+
+2001-11-16 08:34 jbpn
+
+ * apps/snmptest.c:
+
+ - add support for Unsigned32/Gauge32 types
+
+2001-11-15 10:03 jbpn
+
+ * agent/mibgroup/agentx/: protocol.c (V4-2-patches.5), protocol.c
+:
+
+ - stricter test for null OIDs
+
+2001-11-15 08:44 jbpn
+
+ * man/snmpd.conf.5.def:
+
+ - document read-only nature of snmpEnableAuthenTraps.0 if value is
+ configured via the authtrapenable token
+
+2001-11-15 08:44 jbpn
+
+ * agent/: agent_read_config.c, agent_trap.c,
+ mibgroup/mibII/snmp_mib.c:
+
+ - make value of snmpEnableAuthenTraps.0 persistent. Setting via
+ a read-only configuration file also makes object notWritable (as
+ sysContact.0 et al.).
+
+2001-11-15 06:57 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - let VACM checks succeed for non-IPv4 transports
+
+2001-11-15 05:19 jbpn
+
+ * testing/tests/: T111agentxset, T121proxyset:
+
+ - use psyscontact not syscontact to set initial value of sysContact.0
+ object since the latter also makes the object read-only.
+
+2001-11-15 05:07 jbpn
+
+ * agent/: snmpd.c (V4-2-patches.6), snmpd.c:
+
+ - minor fix to formatting of usage message
+
+2001-11-15 04:05 jbpn
+
+ * agent/mibgroup/agentx/agentx_config.c:
+
+ - add missing #include "snmpd.h" (for #definition of MASTER_AGENT)
+ - don't strdup() agentxsocket value -- ds_set_string does it for you
+ - change debugging to fit in better with rest of module
+
+2001-11-14 16:05 hardaker
+
+ * configure, configure.in (V4-2-patches.[7,7]), config.h.in
+, configure, configure.in:
+
+ patch from Harrie to fix init function checking in modules
+
+2001-11-14 16:00 hardaker
+
+ * agent/mibgroup/agentx/: agentx_config.c, agentx_config.h
+, master.c, master.h, subagent.h:
+
+ slightly modified patch from Harrie to move agentx configuration into
+ a separate file.
+
+2001-11-13 13:57 hardaker
+
+ * apps/notification_log.h:
+
+ file notification_log.h was initially added on branch NEW-AGENT-API.
+
+2001-11-13 13:57 hardaker
+
+ * apps/notification_log.c:
+
+ file notification_log.c was initially added on branch NEW-AGENT-API.
+
+2001-11-13 13:55 hardaker
+
+ * mibs/NET-SNMP-AGENT-MIB.txt:
+
+ file NET-SNMP-AGENT-MIB.txt was initially added on branch NEW-AGENT-API.
+
+2001-11-13 13:55 hardaker
+
+ * agent/mibgroup/agent/nsTransactionTable.c:
+
+ file nsTransactionTable.c was initially added on branch NEW-AGENT-API.
+
+2001-11-13 13:55 hardaker
+
+ * agent/mibgroup/agent/nsTransactionTable.h:
+
+ file nsTransactionTable.h was initially added on branch NEW-AGENT-API.
+
+2001-11-13 05:29 jbpn
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ - patch from Jochen Kmietsch to quieten some noisy logging
+
+2001-11-13 04:13 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - use unregister_mib_table_row() when appropriate in
+ unregister_agentx_list().
+
+2001-11-13 03:23 jbpn
+
+ * agent/agent_registry.c:
+
+ - reset vr->namelen when we've finished with it
+
+2001-11-12 23:19 hardaker
+
+ * agent/helpers/all_helpers.c:
+
+ file all_helpers.c was initially added on branch NEW-AGENT-API.
+
+2001-11-12 23:19 hardaker
+
+ * agent/helpers/all_helpers.h:
+
+ file all_helpers.h was initially added on branch NEW-AGENT-API.
+
+2001-11-08 08:09 jbpn
+
+ * agent/agent_registry.c:
+
+ - better implementation of unregister_mib_table_row(), which uses
+ ranges properly in the callback (hence much more efficient for
+ AgentX).
+
+2001-11-07 09:56 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - remove now-redundant agentx_build functions
+
+2001-11-07 06:31 jbpn
+
+ * agent/mibgroup/agentx/: client.c, master_admin.c,
+ protocol.c:
+
+ - use DEBUGMSGOIDRANGE() in a couple of places for more comprehensive
+ debugging output.
+
+ - parse unregister ranges properly, and use the range properly for
+ passing to unregister_mib_context().
+
+2001-11-07 03:33 jbpn
+
+ * snmplib/: snmp_debug.c, snmp_debug.h:
+
+ - add DEBUGSMSGOIDRANGE() macro for debugging OID ranges
+
+2001-11-06 06:04 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - reset the inclusive flag in a couple of cases, to prevent spurious
+ INCLUSIVE getNext behaviour
+
+2001-11-05 08:09 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - correct bug in range_subid tweak code
+
+2001-11-05 05:00 jbpn
+
+ * agent/agent_registry.c:
+
+ - calculate upper bound for table row registrations slightly differently
+
+2001-11-01 09:35 jbpn
+
+ * agent/mibgroup/agentx/: master.c, protocol.c,
+ protocol.h, subagent.c:
+
+ - implement relocating buffer version of agentx_build() routines,
+ and use them.
+
+2001-11-01 09:33 jbpn
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - support for relocatable buffer build callbacks via open_ex calls
+
+2001-10-30 07:19 jbpn
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - fix bug whereby interface counter is not reset, noted by (amongst
+ others) Victor Kirhenshtein in patch #474064.
+
+2001-10-30 03:24 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - make the initial buffer size 2048 in snmp_resend_request (as in
+ _sess_async_send) to make success/fail behaviour for AgentX more
+ predictable (since AgentX STILL doesn't use relocating buffers,
+ boo hiss).
+
+2001-10-29 23:16 rstory
+
+ * local/mib2c.array-user.conf:
+
+ file mib2c.array-user.conf was initially added on branch NEW-AGENT-API.
+
+2001-10-29 23:16 rstory
+
+ * local/mib2c.array-auto.conf:
+
+ file mib2c.array-auto.conf was initially added on branch NEW-AGENT-API.
+
+2001-10-28 14:53 rstory
+
+ * agent/helpers/table_array.c:
+
+ file table_array.c was initially added on branch NEW-AGENT-API.
+
+2001-10-28 14:53 rstory
+
+ * agent/helpers/table_array.h:
+
+ file table_array.h was initially added on branch NEW-AGENT-API.
+
+2001-10-28 14:50 rstory
+
+ * snmplib/oid_array.h:
+
+ file oid_array.h was initially added on branch NEW-AGENT-API.
+
+2001-10-28 14:50 rstory
+
+ * snmplib/oid_array.c:
+
+ file oid_array.c was initially added on branch NEW-AGENT-API.
+
+2001-10-26 19:41 hardaker
+
+ * agent/mibgroup/agentx/master.c:
+
+ patch from Harrie to fix function name in error message
+
+2001-10-26 06:05 jbpn
+
+ * agent/mibgroup/mibII/: interfaces.c, interfaces.h:
+
+ - add support for rx and tx drop counts (ifInDiscards and
+ ifOutDiscards) for Linux (2.2+)
+
+2001-10-26 05:57 jbpn
+
+ * aclocal.m4:
+
+ - add if_iqdrops member to struct ifnet
+
+2001-10-26 04:03 jbpn
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - add translation for atm(37) type interfaces for Linux
+
+2001-10-26 03:43 jbpn
+
+ * man/snmpd.conf.5.def:
+
+ - document the fact that setting sysLocation.0 (et al.) via a
+ syslocation (or equivalent) token makes the object read-only,
+ returning a notWritable error response if an attempt is made to
+ SET it.
+
+2001-10-24 10:07 jbpn
+
+ * agent/mibgroup/mibII/: system_mib.c (V4-2-patches.4),
+ system_mib.c:
+
+ - fix typo noted by Tim Dietz
+
+2001-10-24 08:43 jbpn
+
+ * agent/mibgroup/mibII/: system_mib.c, system_mib.h:
+
+ - implement persistence for sysLocation.0, sysContact.0 and sysName.0
+
+ - presence of a syslocation token in snmpd.conf makes sysLocation.0
+ non-writable (returns notWritable on SET attempts)
+
+2001-10-24 05:08 jbpn
+
+ * agent/mibgroup/host/: hr_swinst.c (V4-2-patches.2), hr_swinst.c
+:
+
+ - fix small memory leak just introduced
+
+2001-10-24 03:42 jbpn
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ - use pkginfo interface to determine type of software package more
+ specifically if possible. Slight variation on patch #473669, submitted
+ by Stefan Radman.
+
+2001-10-24 03:38 jbpn
+
+ * acconfig.h, configure.in:
+
+ - autoconf support for detecting pkginfo interface in libadm. Thanks
+ to Stefan Radman (patch #473669).
+
+2001-10-21 07:26 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ file mib2c.iterate.conf was initially added on branch NEW-AGENT-API.
+
+2001-10-19 09:51 hardaker
+
+ * local/mib2c.create-dataset.conf:
+
+ file mib2c.create-dataset.conf was initially added on branch NEW-AGENT-API.
+
+2001-10-17 07:52 dts12
+
+ * FAQ (V4-2-patches.2), FAQ:
+
+ Mention the MRTG tutorial web pages
+ (as suggested by Christian Robottom Reis)
+
+2001-10-15 06:49 jbpn
+
+ * snmplib/: snmpIPXDomain.c, snmpUDPDomain.c:
+
+ - zero socket address structures. Hopefully fixes problems on NetBSD
+ noted by Joakim Althini (related to sa_len member probably??).
+
+2001-10-11 16:30 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ snmplib/mib.c, snmplib/snmp_api.c:
+
+ Oppses.
+
+2001-10-11 14:15 hardaker
+
+ * man/Makefile.in, man/snmp_api_errstring.3,
+ man/snmp_config.5.def, man/snmp_error.3,
+ man/snmp_perror.3, man/snmp_sess_perror.3,
+ man/snmpcmd.1, man/snmpd.1.def, man/snmpd.conf.5.def
+, man/snmpset.1, man/snmptranslate.1,
+ man/snmptrapd.8, man/snmptrapd.conf.5.def,
+ man/snmpwalk.1, mibs/DISMAN-SCRIPT-MIB.txt,
+ mibs/IANAifType-MIB.txt, mibs/Makefile.mib,
+ mibs/README.mibs, mibs/SMUX-MIB.txt,
+ mibs/UCD-SNMP-MIB.txt, mibs/mibfetch, mibs/rfclist
+, mibs/smistrip, perl/SNMP/SNMP.xs,
+ snmplib/Makefile.in, snmplib/asn1.c,
+ snmplib/default_store.c, snmplib/int64.c,
+ snmplib/mib.c, snmplib/mib.h, snmplib/mt_support.c
+, snmplib/mt_support.h, snmplib/parse.c,
+ snmplib/scapi.c, snmplib/scapi.h, snmplib/snmp_api.c
+, snmplib/snmp_auth.c, snmplib/snmp_client.c,
+ snmplib/snmp_debug.c, snmplib/snmpusm.c,
+ snmplib/snmpv3.c, snmplib/system.c, snmplib/tools.c
+, snmplib/ucd-snmp-includes.h, testing/Makefile.in
+, win32/config.h, win32/config.h.borland:
+
+ massive merge from the patches branch to the main line.
+
+2001-10-11 14:01 hardaker
+
+ * COPYING, ChangeLog, FAQ, Makefile.in,
+ NEWS, README, acconfig.h, aclocal.m4,
+ config.guess, config.h.in, config.sub,
+ configure, configure.in, ltconfig, ltmain.sh
+, makefileindepend.pl, sedscript.in, version.h
+, agent/Makefile.in, agent/agent_index.c,
+ agent/agent_read_config.c, agent/agent_read_config.h,
+ agent/agent_registry.c, agent/agent_trap.c,
+ agent/snmp_agent.h, agent/snmp_vars.c,
+ agent/snmp_vars.h, agent/snmpd.c,
+ agent/mibgroup/Makefile.in, agent/mibgroup/kernel_sunos5.c
+, agent/mibgroup/mibincl.h, agent/mibgroup/ucd_snmp.h
+, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_print.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/at.h,
+ agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/ipAddr.c,
+ agent/mibgroup/mibII/mta_sendmail.h,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/tcpTable.c
+, agent/mibgroup/mibII/udp.c,
+ agent/mibgroup/mibII/udpTable.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/notification/snmpNotifyFilterProfileTable.c,
+ agent/mibgroup/notification/snmpNotifyFilterTable.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/smux/smux.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/ucd-snmp/diskio.c,
+ agent/mibgroup/ucd-snmp/dlmod.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory.h,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.h,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.h,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.h,
+ agent/mibgroup/ucd-snmp/proxy.c,
+ agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.h,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c, apps/Makefile.in
+, apps/snmpdelta.c, apps/snmpdf.c,
+ apps/snmpget.c, apps/snmpgetnext.c, apps/snmpset.c
+, apps/snmpstatus.c, apps/snmptable.c,
+ apps/snmptest.c, apps/snmptranslate.c,
+ apps/snmptrap.c, apps/snmptrapd.c,
+ apps/snmptrapd_log.c, apps/snmpusm.c, apps/snmpvacm.c
+, apps/snmpwalk.c, apps/snmpnetstat/Makefile.in
+, local/mib2c.conf, local/mib2c.vartypes.conf,
+ local/pass_persisttest, local/tkmib:
+
+ massive merge from the patches branch to the main line.
+
+2001-10-09 07:14 hardaker
+
+ * CodingStyle:
+
+ Sometimes we feel like a -nut
+
+2001-10-09 06:15 jbpn
+
+ * agent/agent_registry.c:
+
+ - properly account for the length of the suffix in the variable
+ table in register_mib_table_row()
+
+2001-10-08 08:53 jbpn
+
+ * agent/mibgroup/agentx/client.c:
+
+ - declare version_sysoid_len as extern INT not extern oid, so as to
+ match its actual definition in sytem_mib.c. This caused all kinds of
+ fun & games on Linux on a Alpha.
+
+2001-10-04 08:31 jbpn
+
+ * snmplib/: callback.c, callback.h:
+
+ - add function snmp_callback_list() to return list of callbacks for a
+ given <major, minor> pair.
+
+2001-10-04 07:14 hardaker
+
+ * local/pass_persisttest:
+
+ file pass_persisttest was initially added on branch V4-2-patches.
+
+2001-10-03 05:42 jbpn
+
+ * snmplib/keytools.c:
+
+ - change expression at l. 415 from:
+
+ *kcstring++ = *kcstring ^ *newkey++;
+
+ which has undefined behaviour to:
+
+ *kcstring++ ^= *newkey++;
+
+ which is okay (since *kcstring is only evaluated once). Similarly
+ at l. 530. The previous constructs cause warnings with GCC3 and
+ some other compilers. Thanks to Niel Markwick who noted this in
+ bug #465969.
+
+2001-10-03 03:11 jbpn
+
+ * agent/agent_registry.c:
+
+ - do SNMPD_CALLBACK_UNREGISTER_OID callbacks in
+ unregister_mibs_by_session() -- called when AgentX subagents
+ disappear.
+
+2001-10-02 06:01 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - don't send ASN_PRIV_INCL_RANGE and ASN_PRIV_EXCL_RANGE on-the-wire
+
+2001-09-26 08:03 jbpn
+
+ * agent/agent_registry.c:
+
+ - allow split_subtree() to do a split in the middle of a column,
+ keeping the relevant variable in both the old tree and the new
+ tree (arises in AgentX row registrations).
+
+ - patch from Damian Gilmurray for register_mib_table_row() which
+ allows it to cope with non-zero length variables and also
+ non-contiguous OIDs for adjacent columns.
+
+ - rewritten dump_registry() that uses reallocating print functions
+ and also prints out variable lists.
+
+2001-09-26 07:45 jbpn
+
+ * agent/snmp_vars.c:
+
+ - allow for the possibility of subtree name being longer than
+ requested name when calculating the suffix for variable matching.
+
+ - be strict about subtree chunks being inclusive of the start OID
+ and exclusive of the end OID (shows up big time in AgentX).
+
+2001-09-26 07:22 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - don't do getNext requests on exclusive searchRanges that begin in
+ a tree marked as a fully-qualified instance (they are doomed to
+ fail). Skip to the next part of the tree straight away.
+
+2001-09-26 07:19 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - bring debugging tokens into line with rest of AgentX code
+
+2001-09-25 08:15 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - reinstate a missing space character
+
+2001-09-25 03:58 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - remove spurious cast
+
+2001-09-25 03:45 jbpn
+
+ * apps/snmptrapd.c:
+
+ - fix possible infelicity when printing and syslogging (not sure this is
+ actually possible but)
+
+2001-09-25 03:09 jbpn
+
+ * snmplib/mib.c:
+
+ - integrate some changes from the V4-2-patches branch: Harrie's
+ prototypes and Wes's fix for bug #463226.
+
+2001-09-25 03:01 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - fix signedness of time stuff
+
+2001-09-25 02:47 jbpn
+
+ * snmplib/: snmp_logging.c, snmp_logging.h:
+
+ - make argument of snmp_enable_syslog_ident const
+
+ - don't strdup DEFAULT_LOG_ID if a NULL arg is given
+
+2001-09-24 09:39 jbpn
+
+ * apps/snmptrapd.c:
+
+ - make use of rewritten output functions in snmptrapd_log.c which
+ avoid fixed length buffers.
+
+ - fix bug noted in support request #456646 (custom trap format was
+ being ignored for v2 traps and informs). Thanks to
+ G.Principato@motorola.com for spotting this one.
+
+ - correct usage for -P option to reflect that it causes output on
+ stderr not stdout.
+
+2001-09-24 09:36 jbpn
+
+ * apps/: snmptrapd_log.c, snmptrapd_log.h:
+
+ - rewrite of output functions to avoid use of fixed-length buffers
+
+2001-09-20 13:04 hardaker
+
+ * README, agent/mibgroup/ucd-snmp/logmatch.c,
+ agent/mibgroup/ucd-snmp/logmatch.h, mibs/UCD-SNMP-MIB.txt
+:
+
+ new logmatch mib from Stephan Wenzel.
+
+2001-09-15 08:40 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - override exclusive searchRange getNext operations when retrying
+ operations
+
+2001-09-15 08:39 jbpn
+
+ * agent/: snmp_agent.c, snmp_agent.h:
+
+ - improved support for AgentX-style inclusive searchRange getNext
+
+2001-09-14 14:43 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ patch #443115 from Yimin Ge: diskio support for freebsd4
+
+2001-09-14 14:34 hardaker
+
+ * apps/snmptrapd.c, snmplib/snmp_logging.c,
+ snmplib/snmp_logging.h:
+
+ Patch #440320 from Mark Ferlatte:
+
+ 1) Adds a new function to the snmp_logging API
+ (snmp_enable_syslog_ident(char *ident))
+
+ 2) Ports snmptrapd to use the existing snmp_logging API instead of
+ using syslog directly.
+
+ 3) Ports snmp_logging.[ch] to use the Win32 Event Log when compiled on
+ Win32. I didn't update the Visual C project files, because I only
+ have access to a newer version of VC, and I didn't know if you
+ wanted them updated. The advapi32 library needs to be added to the
+ project in order for this to work on Win32 (that's where the event
+ log API is).
+
+2001-09-14 14:22 hardaker
+
+ * config.h.in, configure:
+
+ I, uh, cough, uh forgot to run autoconf/autoheader. Dave: don't kill me.
+
+2001-09-14 14:19 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ Patch #428884: Add -PR like option to perl module (from Joe Clarke).
+
+2001-09-14 14:08 hardaker
+
+ * README, acconfig.h, configure.in,
+ agent/agent_trap.c, agent/mibgroup/agentx/client.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c,
+ snmplib/snmpAAL5PVCDomain.c, snmplib/snmpAAL5PVCDomain.h
+, snmplib/snmpUnixDomain.c, snmplib/snmpUnixDomain.h
+, snmplib/snmp_api.h, snmplib/snmpv3.c,
+ snmplib/asn1.h:
+
+ Applied a modified version of patch #427343 from Harrie:
+ make enterprise ID relocatable where legal to do so
+
+2001-09-14 12:09 hardaker
+
+ * agent/: Makefile.in, mibgroup/Makefile.in:
+
+ Alternative solution to patch #312694:
+ move date_n_time utilities to snmplib/snmp-tc.c.
+
+2001-09-14 12:08 hardaker
+
+ * agent/mibgroup/host/: hr_utils.c, hr_utils.h:
+
+ removed. Functionality moved to snmplib/snmp-tc.[ch]
+
+2001-09-14 12:06 hardaker
+
+ * agent/mibgroup/host.h, agent/mibgroup/host/hr_filesys.c
+, agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_system.c,
+ agent/mibgroup/host/hr_system.h,
+ agent/mibgroup/host/hr_utils.c, snmplib/Makefile.in,
+ snmplib/snmp-tc.c, snmplib/snmp-tc.h:
+
+ Alternative solution to patch #312694:
+ move date_n_time utilities to snmplib/snmp-tc.c.
+
+2001-09-14 09:48 hardaker
+
+ * win32/config.h.borland:
+
+ file config.h.borland was initially added on branch V4-2-patches.
+
+2001-09-14 06:19 jbpn
+
+ * agent/mibgroup/agentx/: master.c, master_request.c,
+ master_request.h:
+
+ - use inclusive search range only when appropriate for getNext
+ queries
+
+2001-09-12 06:47 hardaker
+
+ * snmplib/snmpCallbackDomain.c:
+
+ file snmpCallbackDomain.c was initially added on branch NEW-AGENT-API.
+
+2001-09-12 06:47 hardaker
+
+ * snmplib/snmpCallbackDomain.h:
+
+ file snmpCallbackDomain.h was initially added on branch NEW-AGENT-API.
+
+2001-09-06 07:40 jbpn
+
+ * agent/: snmp_agent.c, snmp_vars.c:
+
+ - if include bit is set in an AgentX SearchRange (hence type of varbind
+ is ASN_PRIV_INCL_RANGE), try an exact query first because an object
+ whose name is lexi-equal is a valid response; if exact query fails
+ then fall back to an inexact query.
+
+2001-09-06 07:38 jbpn
+
+ * agent/mibgroup/agentx/: master.c, master_request.c,
+ protocol.c, subagent.c:
+
+ - oops, used INCL/EXCL wrong way round in a couple of places
+
+ - better test for scoping requirements in subagent
+
+2001-09-04 07:14 jbpn
+
+ * agent/snmpd.c:
+
+ - add missing break; after processing -P option, noted by Botond
+ Tarnay (see patch #458327)
+
+2001-08-28 03:04 jbpn
+
+ * agent/: snmp_agent.c (V4-2-patches.7), snmp_agent.c:
+
+ - add missing #include <tcpd.h> if using libwrap, noted by Nathan
+ Neulinger (patch #453831).
+
+2001-08-28 02:38 jbpn
+
+ * agent/: snmpd.c (V4-2-patches.1), snmpd.c:
+
+ - avoid use of pre-processor directives inside printf() call, which
+ is a macro in glibc, making this an undefined behaviour
+ construct (which GCC 3.0 refuses to compile). See bug #455804 for
+ further details.
+
+2001-08-24 10:00 rstory
+
+ * snmplib/data_list.h:
+
+ file data_list.h was initially added on branch NEW-AGENT-API.
+
+2001-08-24 10:00 rstory
+
+ * snmplib/data_list.c:
+
+ file data_list.c was initially added on branch NEW-AGENT-API.
+
+2001-08-22 08:45 jbpn
+
+ * agent/: snmp_vars.c, mibgroup/agentx/master.c,
+ mibgroup/agentx/master_request.c, mibgroup/agentx/protocol.c
+, mibgroup/agentx/subagent.c:
+
+ - add checking that results to be returned to master agent are in
+ requested scope (if any) (getBulk not yet done)
+
+2001-08-15 09:31 jbpn
+
+ * snmplib/snmp_debug.c:
+
+ - use sprint_realloc_objid in debugmsg_oid to print long OIDs.
+
+2001-08-15 08:37 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - increment the value of snmpInBadCommunityUses when attempting an
+ operation not permitted by the given community, per RFC 1907.
+
+2001-08-15 08:34 jbpn
+
+ * agent/snmp_agent.c:
+
+ - when translating the v2+ error-status value authorizationError
+ into noSuchName for a v1 session, increment the value of
+ snmpInBadCommunityUses, per RFC 2576.
+
+2001-08-14 03:22 jbpn
+
+ * snmplib/snmp_client.c:
+
+ - in snmp_set_var_objid(), try to detect a previously-malloc()ed
+ buffer for the variable name, and free() it, to avoid memory
+ leaks.
+
+2001-08-13 03:47 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ - use Win32 calls to change blocking state of sockets if
+ appropriate. Thanks to Joerg Mattes for help debugging this.
+
+2001-08-13 03:37 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - perform an SNMP_CALLBACK_OP_DISCONNECT and close the connection if
+ we get an error on a stream receive, as well as if it is closed in
+ an orderly fashion. This makes life easier on Win32 inparticular.
+ Thanks to Joerg Mattes for help with debugging this.
+
+2001-08-09 03:10 hardaker
+
+ * agent/helpers/table_dataset.c:
+
+ file table_dataset.c was initially added on branch NEW-AGENT-API.
+
+2001-08-09 03:10 hardaker
+
+ * agent/helpers/table_dataset.h:
+
+ file table_dataset.h was initially added on branch NEW-AGENT-API.
+
+2001-08-08 01:42 hardaker
+
+ * agent/helpers/table_data.c:
+
+ file table_data.c was initially added on branch NEW-AGENT-API.
+
+2001-08-08 01:42 hardaker
+
+ * agent/helpers/table_data.h:
+
+ file table_data.h was initially added on branch NEW-AGENT-API.
+
+2001-08-07 13:59 nba
+
+ * man/snmp_api_errstring.3:
+
+ file snmp_api_errstring.3 was initially added on branch V4-2-patches.
+
+2001-08-07 13:59 nba
+
+ * man/snmp_error.3:
+
+ file snmp_error.3 was initially added on branch V4-2-patches.
+
+2001-08-07 13:59 nba
+
+ * man/snmp_perror.3:
+
+ file snmp_perror.3 was initially added on branch V4-2-patches.
+
+2001-08-07 13:59 nba
+
+ * man/snmp_sess_perror.3:
+
+ file snmp_sess_perror.3 was initially added on branch V4-2-patches.
+
+2001-08-06 04:29 jbpn
+
+ * agent/snmpd.c:
+
+ - fix for potential buffer overflow in logfile argument handling,
+ noted by Anonymous (bug #448243). Also use a large enough buffer
+ to handle filenames of length PATH_MAX (if possible).
+
+2001-07-30 10:05 jbpn
+
+ * agent/mibgroup/mibII/var_route.c, snmplib/snmp_api.c
+, snmplib/snmp_api.h:
+
+ - move snmp_socket_length function to agent/mibgroup/mibII/var_route.c
+ from snmp_api.c -- this is the only remaining place that uses this
+ function, which certainly doesn't belong in snmp_api.c after the
+ transport abstraction malarkey.
+
+2001-07-30 09:22 hardaker
+
+ * agent/agent_handler.c:
+
+ file agent_handler.c was initially added on branch NEW-AGENT-API.
+
+2001-07-30 09:22 hardaker
+
+ * agent/agent_handler.h:
+
+ file agent_handler.h was initially added on branch NEW-AGENT-API.
+
+2001-07-30 07:06 jbpn
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ - try to return invalid(2) for the ipRouteType column if the route
+ is not up. See bug #426710, reported by pjweber.
+
+2001-07-27 07:32 jbpn
+
+ * snmplib/snmpv3.c:
+
+ - set defaultAuthType to usmHMACSHA1AuthProtocol if SHA specified
+ (was set to usmHMACMD5AuthProtocol in this case). Spotted by
+ William Kennemer (bug #444860)
+
+2001-07-27 06:59 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - change to handle_agentx_response ONLY to send NEWLY delegated
+ requests after processing a successful response. This is achieved
+ by saving the value of asp->outstanding_requests and temporarily
+ setting it to NULL. After processing all varbinds in the
+ response, therefore, asp->outstanding_requests contains only newly
+ delegated requests, if any. After sending these, the new requests
+ are merged with the saved queue.
+
+ This fixes a bug that arises if you request variables from two or
+ more separate subagents simultaneously. What used to happen is
+ that, upon receiving the first response, the master agent would
+ notice that it had an outstanding request, and retransmit it.
+ Then the second response arrives, and the master agent sends the
+ reply to the (SNMP) requester and frees the requests (including
+ callback data). Finally, another AgentX response (to the
+ erroneously transmitted request) arrives and the callback is
+ called referencing deallocated memory, which causes a segfault.
+
+2001-07-26 07:28 dts12
+
+ * snmplib/: snmp_api.c (NEW-LIBRARY-API.4), snmp_api.c:
+
+ Adding a 'double'-valued varbind isn't inherently an internal error!
+
+2001-07-25 05:47 jbpn
+
+ * agent/snmpd.c:
+
+ - disable stderr logging (if requested) before calling init_mib_modules().
+ This should fix the problem noted by Nigel Metheringham in bug #418857
+ whereby the AgentX master module prints a message to stderr which causes
+ a SIGPIPE when the agent is started as a daemon.
+
+2001-07-25 02:18 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - initialise buffers to zero in handle_wrap_fmt, to avoid garbage in
+ display of security parameters, as noted by William Frauenhofer
+ (bug #437231).
+
+ - add closing parenthesis after (via <address> in format_plain_trap
+
+2001-07-23 07:53 jbpn
+
+ * snmplib/tools.c:
+
+ - remove excessive debugging from snmp_(re)alloc functions
+
+2001-07-23 04:37 jbpn
+
+ * snmplib/snmpUnixDomain.c:
+
+ - minor fix to debugging output to print losing path correctly when
+ a remote connect fails.
+
+2001-07-17 09:56 hardaker
+
+ * CodingStyle:
+
+ update for naming conventions and for structure definitions.
+
+2001-07-17 09:07 hardaker
+
+ * CodingStyle:
+
+ initial coding style guideline document.
+
+2001-07-17 09:02 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - remember to remove_trap_session(our-session-with-master-agent)
+ if the master agent session goes away, because otherwise you
+ may subsequently try to use it, which will probably dump core,
+ and is certainly an error.
+
+ - also change when trap session is registered to being immediately
+ the session is opened so traps can be sent, e.g. from the
+ INDEX_START callback (for example linkUp traps in subagents that
+ register a row of ifTable).
+
+2001-07-17 08:48 jbpn
+
+ * agent/agent_trap.c:
+
+ - change to remove_trap_session(), so as not to close an SNMP
+ session simply because we are removing it from the trap_sink
+ list. The rationale is that the session may still be in use for
+ other purposes, or (more to the point) you may be calling this
+ function from the session's callback (from where closing the
+ session isn't a good idea).
+
+2001-07-13 06:02 dts12
+
+ * snmplib/netsnmp.h:
+
+ file netsnmp.h was initially added on branch NEW-LIBRARY-API.
+
+2001-07-12 12:09 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ file table_iterator.c was initially added on branch NEW-AGENT-API.
+
+2001-07-12 12:09 hardaker
+
+ * agent/helpers/table_iterator.h:
+
+ file table_iterator.h was initially added on branch NEW-AGENT-API.
+
+2001-07-12 02:21 jbpn
+
+ * agent/: snmp_agent.c, mibgroup/agentx/client.c,
+ mibgroup/agentx/master_request.c, mibgroup/agentx/protocol.c
+, mibgroup/agentx/subagent.c:
+
+ - fix for bug #439094, reported by Evert-Jan van Tuijl, whereby
+ the AgentX master agent expects a response to an agentx-CleanupSet-PDU
+ message (incorrectly). This only shows up when testing against other
+ subagents (e.g. jax) because the net-snmp subagent sends a response
+ to the agentx-CleanupSet-PDU (incorrectly).
+
+2001-07-10 16:10 hardaker
+
+ * agent/mibgroup/mibII/vacm_context.c:
+
+ file vacm_context.c was initially added on branch NEW-AGENT-API.
+
+2001-07-10 16:10 hardaker
+
+ * agent/mibgroup/mibII/vacm_context.h:
+
+ file vacm_context.h was initially added on branch NEW-AGENT-API.
+
+2001-07-10 16:06 hardaker
+
+ * agent/mibgroup/target/target_counters.h:
+
+ file target_counters.h was initially added on branch NEW-AGENT-API.
+
+2001-07-10 16:06 hardaker
+
+ * agent/mibgroup/target/target_counters.c:
+
+ file target_counters.c was initially added on branch NEW-AGENT-API.
+
+2001-07-05 06:11 jbpn
+
+ * agent/mibgroup/mibII/: interfaces.c, interfaces.h:
+
+ - make Interface_Scan_Get_Count non-static as it's very useful
+
+2001-07-05 03:40 jbpn
+
+ * snmplib/snmpusm.c:
+
+ - free the cached security parameters when we have a parse error
+ on input, otherwise we leak memory (triggered by SC 3.0.13.{2,3}).
+
+2001-07-04 09:51 uid44810
+
+ * snmplib/snmp_api.c:
+
+ - catch some malformed SNMPv3 packets
+
+2001-07-04 07:42 uid44810
+
+ * snmplib/snmp_api.c:
+
+ - fix bad mistake in snmpv3_scopedPDU_header_realloc_rbuild which
+ was encoding the wrong length into the ScopedPDU SEQUENCE header
+ (wasn't including length of actual data, i.e. PDU!). Totally my
+ fault -- introduced when changing over to reallocating buffer
+ type functions. Amazing this hasn't caused all sorts of trouble
+ for people!
+
+2001-07-02 18:04 rstory
+
+ * snmplib/snmp-tc.c:
+
+ file snmp-tc.c was initially added on branch NEW-AGENT-API.
+
+2001-07-02 09:33 jbpn
+
+ * agent/snmp_agent.c:
+
+ - slight change to generation of error-index:
+
+ - explicitly test for error-status == noError, and set error-index
+ to zero in this case;
+
+ - otherwise use the cached value;
+
+ - don't zero the cached value in handle_var_list if handle_one_var
+ returns noError
+
+ - this copes properly with SET requests, where a failing SET will have
+ a FREE phase which will typically return noError. Previously this
+ would erroneously cause the error-index to be set to zero.
+
+2001-07-02 08:14 jbpn
+
+ * agent/mibgroup/util_funcs.c:
+
+ - fix bad behaviour in header_simple_table when the index is
+ equal to ULONG_MAX
+
+2001-06-28 10:01 jbpn
+
+ * agent/mibgroup/snmpv3/usmUser.c:
+
+ - change sense of snmp_oid_compare() result check in var_usmUser
+ to do lexi-ordering correctly
+
+2001-06-28 07:20 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - count more v1/v2c parse errors (SC 1.1.12.10)
+
+2001-06-28 05:56 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - check that version field of PDU is of integer type rather than just
+ assuming it is (SC 1.1.12.2.1)
+
+2001-06-28 04:40 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - increment snmpInBadCommunityNames when we see unknown community
+ names, per RFC1907
+
+2001-06-27 08:09 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - make use of new function register_mib_detach() to mark all our
+ nodes as detached when we get a transport disconnect indication.
+
+2001-06-27 08:07 jbpn
+
+ * agent/: agent_registry.c, agent_registry.h,
+ var_struct.h:
+
+ - add additional flag to subtree structure that subagents can use
+ to determine whether an attempt has been made to register and OID
+ with a master agent during a session's lifetime. This allows
+ manual re-registration and automatic re-registration to be mixed
+ within a subagent (perhaps because you are doing index stuff).
+
+ - add function register_mib_detach() which unsets this flag for
+ all known nodes (subagent would typically call this on disconnect
+ indication).
+
+ - add function unregister_mib_table_row()
+
+ - correct bad recursive behaviour in register_mib_reattach() which
+ used to try to re-register N nodes N! times. Once will normally
+ be enough.
+
+ - change to dump_registry() format to include hex display of
+ flags field.
+
+2001-06-26 09:26 dts12
+
+ * FAQ:
+
+ Fix error in SNMPv2 trap examples (Identified by Diwakar Shetty).
+
+2001-06-26 02:35 jbpn
+
+ * snmplib/mib.c:
+
+ - corrected sense of dump_realloc_oid_to_string() return value
+ checks, as spotted by Robert Story.
+
+2001-06-25 06:30 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - small tweak in handle_agentx_response() when retrying unfulfilled
+ requests: continue from the "start" OID of the next node of the
+ tree, not from the "name" OID, which causes looping.
+
+2001-06-21 09:51 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - handle "holes" in rows of tables that are handled by subagents
+
+ Since the fully-qualified instance is registered, we interpret
+ a return of noSuchInstance when doing an inexact query as meaning
+ we should retry the query.
+
+2001-06-21 02:50 jbpn
+
+ * snmplib/mib.h:
+
+ - forgot to commit at the same time as last mib.c commit; updated
+ prototype for sprint_realloc_hinted_integer
+
+2001-06-20 06:44 jbpn
+
+ * agent/: agent_index.c, agent_index.h:
+
+ - add function count_indexes which returns the number of indexes
+ allocated for a given OID. This can be useful for implementing
+ "row count" objects, e.g. ifNumber.
+
+2001-06-20 05:37 jbpn
+
+ * agent/: agent_callbacks.h, mibgroup/agentx/subagent.c
+:
+
+ - add SNMPD_CALLBACK_INDEX_START and SNMPD_CALLBACK_INDEX_STOP
+ callbacks which may be used to manage index allocations.
+
+ Master agent should probably call these callbacks too, although
+ it's a bit of a degenerate case.
+
+2001-06-19 09:44 jbpn
+
+ * agent/agent_index.c:
+
+ - use an explicit fieled "allocated" in snmp_index structure to
+ indicate whether or not a value is currently allocated, rather
+ than overloading a NULL session to mean that it is not.
+
+ This allows startup code in a master agent to pre-register indices
+ when there are no sessions open.
+
+2001-06-19 08:34 jbpn
+
+ * agent/mibgroup/agentx/: master_admin.c, master_request.c
+:
+
+ - keep the value of NETWORK_BYTE_ORDER from h.flags in the
+ agentx-Open-PDU and use it for subsequent master-initiated
+ AgentX protocol operations, per RFC 2741 (section 7.1.1,
+ paragraph 4).
+
+ For now, we are storing this in the flags field of a
+ subsession. This is likely to stop working if the flags
+ definitions change (i.e. it's not a great solution)
+
+ - Thanks to Peter Korsten (severityone at users.sourceforge.net)
+ for identifying this bug, and for help debugging this fix.
+
+2001-06-19 02:35 jbpn
+
+ * snmplib/mib.c:
+
+ - reinstate space between numbers and units.
+
+ - respect DISPLAY-HINTs for Unsigned32, Gauge, Gauge32 types.
+
+2001-06-13 03:29 jbpn
+
+ * agent/snmp_vars.c:
+
+ - minor change to debugging to reduce "noise level" from Purify
+
+2001-06-12 10:35 jbpn
+
+ * agent/snmp_agent.c:
+
+ - handle non-repeaters and max-repetitions field values of < 0 (by
+ setting them to 0, per RFC 1905)
+
+2001-06-12 10:05 jbpn
+
+ * agent/snmp_agent.c:
+
+ - fix bug that caused a null pointer to be followed when processing a
+ GETBULK request with non-repeaters > 0, max-repetitions == 0 and no
+ varbinds in the request.
+
+2001-06-12 07:24 dts12
+
+ * snmplib/: read_config.c (V4-2-patches.1), read_config.c:
+
+ Fix 'unregister_config_handler' to handle tags other
+ than the first in the list. (Thanks to Paul Serice).
+
+2001-06-06 07:39 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - free() return value from register_index() calls
+
+2001-06-06 07:37 jbpn
+
+ * agent/agent_index.c:
+
+ - more uniform return value from register_index(): make it always a
+ varbind which the caller is responsible for free()ing, or else NULL.
+
+2001-06-05 03:10 jbpn
+
+ * agent/agent_index.c:
+
+ - fix for index allocation, such that requests for specific indices which
+ have previously been allocated, but are not currently in use, succeed.
+
+ - more debugging output.
+
+2001-06-01 08:37 hardaker
+
+ * agent/mibgroup/testhandler.c:
+
+ file testhandler.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:37 hardaker
+
+ * agent/mibgroup/testdelayed.c:
+
+ file testdelayed.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:37 hardaker
+
+ * agent/mibgroup/testdelayed.h:
+
+ file testdelayed.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:37 hardaker
+
+ * agent/mibgroup/testhandler.h:
+
+ file testhandler.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/multiplexer.h:
+
+ file multiplexer.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/instance.c:
+
+ file instance.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/null.h:
+
+ file null.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/read_only.h:
+
+ file read_only.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/.cvsignore:
+
+ file .cvsignore was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/multiplexer.c:
+
+ file multiplexer.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/serialize.c:
+
+ file serialize.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/table.h:
+
+ file table.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/instance.h:
+
+ file instance.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/table.c:
+
+ file table.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/serialize.h:
+
+ file serialize.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/set_helper.h:
+
+ file set_helper.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/null.c:
+
+ file null.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/Makefile.in:
+
+ file Makefile.in was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/old_api.h:
+
+ file old_api.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/read_only.c:
+
+ file read_only.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/old_api.c:
+
+ file old_api.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 07:39 hardaker
+
+ * local/tkmib:
+
+ misc fixes for oid formatting problems.
+
+2001-06-01 07:37 hardaker
+
+ * README:
+
+ add Martin Oldfield.
+
+2001-06-01 02:50 jbpn
+
+ * agent/: snmp_agent.c, snmp_agent.h,
+ mibgroup/agentx/master_request.c:
+
+ - fix for absolutely mind-bending memory leak when AgentX sessions
+ timeout. agent_session_list holds a queue of sessions with outstanding
+ requests. When a session times out, this must be scavenged to make
+ sure the sessions that have timed out, and their associated requests
+ are free()d.
+
+2001-05-30 03:28 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - retry initial open of AgentX master socket if AgentX pings are
+ enabled (should really be a separate default_store option but
+ never mind)
+
+2001-05-30 03:27 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - more aggressive handling of timeout conditions (also fix memory
+ leak)
+
+2001-05-30 03:19 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - more informative debugging
+
+2001-05-30 02:37 jbpn
+
+ * snmplib/snmp_alarm.c:
+
+ - remove noisy debugging
+
+2001-05-30 02:37 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - more compact debugging in _sess_select_info
+
+2001-05-30 02:34 jbpn
+
+ * agent/agent_registry.c:
+
+ - copy flags in reattach_subtree (needed for AgentX row registration)
+
+2001-05-28 08:54 jbpn
+
+ * agent/mibgroup/agentx/: client.c, client.h,
+ master_admin.c, master_request.c, subagent.c:
+
+ - stuff from patch #416026 (submitted by anonymous) for AgentX row
+ registration
+
+2001-05-28 08:49 jbpn
+
+ * agent/snmp_vars.c:
+
+ - tweak to getStatPtr to handle getNext operations in combination with
+ FULLY_QUALIFIED_INSTANCE nodes (which arise in AgentX row registration).
+
+2001-05-28 08:46 jbpn
+
+ * agent/: agent_registry.c, agent_registry.h,
+ var_struct.h:
+
+ - stuff from patch #416026 (submitted by anonymous) for AgentX row
+ registration
+
+2001-05-28 08:42 jbpn
+
+ * agent/mibgroup/agentx/master.c:
+
+ - small tweak to debugging output
+
+2001-05-28 08:39 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - do parsing/building of ASN_PRIV_EXCL_RANGE and
+ ASN_PRIV_INCL_RANGE types *properly*.
+
+2001-05-28 04:40 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - fix possible memory leak in _sess_async_send error cases
+
+2001-05-28 04:27 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - add parsing/building of ASN_PRIV_EXCL_RANGE and
+ ASN_PRIV_INCL_RANGE types.
+
+2001-05-23 09:20 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - respect msgMaxSize in received v3 PDUs (in the weak sense that if
+ the serialized response PDU is more than it, we don't send it)
+
+ - removed functions ascii_to_binary, hex_to_binary. Using these
+ functions is really bad, since they will happily overflow buffers.
+ The superior alternatives, defined in tools.h, are
+ snmp_{decimal, hex}_to_binary.
+
+2001-05-23 09:00 jbpn
+
+ * apps/snmpstatus.c:
+
+ - remove unused variable struct sockaddr_in respIp
+
+2001-05-23 08:58 jbpn
+
+ * agent/snmp_agent.c:
+
+ - early bail out of handle_snmp_packet() if the callback operation
+ type is not SNMP_CALLBACK_OP_RECEIVED_MESSAGE. In practice, the
+ only way this arises currently is when a stream transport based
+ connection goes away and a SNMP_CALLBACK_OP_DISCONNECT occurs.
+
+2001-05-23 08:44 jbpn
+
+ * snmplib/snmp_api.h:
+
+ - new fields rcvMsgMaxSize and sndMsgMaxSize in snmp_session
+ structure to support v3 msgMaxSize
+
+ - removed functions ascii_to_binary, hex_to_binary from public
+ interface. Using these functions is really bad, since they
+ will happily overflow buffers. The superior alternatives,
+ defined in tools.h, are snmp_{decimal, hex}_to_binary.
+
+2001-05-23 08:37 jbpn
+
+ * snmplib/: snmpAAL5PVCDomain.c, snmpIPXDomain.c,
+ snmpTCPDomain.c, snmpUDPDomain.c, snmpUnixDomain.c
+, snmp_transport.c, snmp_transport.h:
+
+ - add msgMaxSize field to snmp_transport structure to support
+ msgMaxSize negotiation for v3
+
+2001-05-23 07:14 jbpn
+
+ * snmplib/scapi.c:
+
+ - use sprint_realloc_hexstring instead of sprint_hexstring for
+ SNMP_TESTING_CODE debugging output of IV, key and plaintext
+
+2001-05-23 05:25 jbpn
+
+ * apps/snmptest.c:
+
+ - free() buffers in a couple of error cases; no big deal
+
+2001-05-23 04:39 jbpn
+
+ * snmplib/snmpv3.c:
+
+ - use new snmp_hex_to_binary function for engine ID parsing in -e
+ option, rather than archaic hex_to_binary
+
+2001-05-23 04:22 jbpn
+
+ * snmplib/snmp_parse_args.c:
+
+ - free() buffers in a couple of error cases; no big deal
+
+2001-05-23 04:14 jbpn
+
+ * snmplib/snmp_parse_args.c:
+
+ - use new snmp_hex_to_binary function for engine ID parsing in -e
+ and -E options, rather than archaic hex_to_binary
+
+2001-05-23 03:56 jbpn
+
+ * apps/snmptest.c:
+
+ - use new snmp_{decimal, hex}_to_binary functions for input string
+ to OCTET STRING conversion, rather than archaic ascii_to_binary
+ and hex_to_binary
+
+ - omit trailing newline from string (helpful for objects that don't
+ allow non-printing characters, e.g. sysLocation.0)
+
+2001-05-20 08:12 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - rewritten _sess_read() function:
+
+ - better handling of long packets
+ - zero-copy reception of packets on stream transports
+ - lower memory overheads for packet fragment handling for stream
+ transports
+
+ - allow parsing of large objects (>8192 octets)
+
+2001-05-20 05:48 jbpn
+
+ * snmplib/snmp_parse_args.c:
+
+ - don't strdup() contextName, securityName -- causes minor memory
+ leak.
+
+2001-05-20 05:04 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ - test return of fcntl(F_GETFL), so as not to set flags to garbage
+
+ - correction to comment -- set socket to *blocking*!
+
+ - check opaque before writing to it in recv
+
+2001-05-20 05:02 jbpn
+
+ * snmplib/snmp_client.c:
+
+ - proper handling of SNMP_CALLBACK_OP_DISCONNECT in snmp_synch_input:
+ set an error condition, with errno SNMPERR_ABORT ("Session abort
+ failure"), which seems like a good enough match.
+
+2001-05-18 09:54 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ - make newly-accept()ed sockets blocking; otherwise problems arise
+ later when send()ing large PDUs (since only a single socket buffer's
+ worth of data at most can be sent without blocking).
+
+2001-05-18 07:17 jbpn
+
+ * agent/snmp_agent.c:
+
+ - use sprint_realloc_objid and sprint_realloc_variable instead of
+ sprint_objid and sprint_variable respectively, to allow large PDUs
+ to be printed when debugging
+
+2001-05-18 07:16 jbpn
+
+ * snmplib/tools.c:
+
+ - improved debugging output from snmp_realloc()
+
+2001-05-18 07:15 jbpn
+
+ * snmplib/: mib.c, mib.h:
+
+ - remove debugging from output routines
+
+ - new function sprint_realloc_objid
+
+ - make sprint_realloc_objid and sprint_realloc_variable externally
+ visible
+
+2001-05-18 06:28 jbpn
+
+ * snmplib/asn1.c:
+
+ - improved debugging output from asn_realloc()
+
+2001-05-15 04:10 jbpn
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - add OIDs for UDP/IPv6 and TCP/IPv6
+
+2001-05-14 02:20 jbpn
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ - added \n to text of snmp_log() messages (bug #422978)
+
+2001-05-11 07:30 jbpn
+
+ * snmplib/: mib.c, mib.h:
+
+ - added sprint_realloc_<type> family of functions which take extra
+ parameters and use relocating buffers to remove limitations due to
+ fixed-size buffers (e.g. see bug #409181).
+
+ - also fixes potential problem noted as bug #414803
+
+ - fprint_variable, fprint_objid and fprint_value use new functions
+ such that snmpget etc. are improved immediately
+
+ - old functions remain *FOR NOW* -- but really they should be
+ considered to be deprecated (new functions provide a superset of
+ their functionality).
+
+2001-05-11 07:14 jbpn
+
+ * snmplib/parse.h:
+
+ - added additional function pointer to struct tree to point at
+ relocating buffer compatible output function
+
+2001-05-11 06:57 jbpn
+
+ * snmplib/: tools.c, tools.h:
+
+ - added utility function snmp_strcat, which appends a string to a
+ relocatable buffer
+
+2001-05-10 11:20 rstory
+
+ * snmplib/mib.c:
+
+ fix bug #423109 incorrect index parsing
+
+2001-05-09 16:43 rstory
+
+ * snmplib/snmp_client.c:
+
+ fix snmp_client.c:569: warning: control reaches end of non-void function
+
+2001-05-09 12:36 slif
+
+ * agent/mibgroup/: Rmon.h, Rmon/README, Rmon/agutil.c
+, Rmon/agutil.h, Rmon/agutil_api.h, Rmon/alarm.c
+, Rmon/alarm.h, Rmon/event.c, Rmon/event.h,
+ Rmon/history.c, Rmon/history.h, Rmon/row_api.h,
+ Rmon/rows.c, Rmon/rows.h, Rmon/statistics.c,
+ Rmon/statistics.h, Rmon/test_alarm.sh,
+ Rmon/test_hist.sh:
+
+ Include Alex Rozin's Rmon.
+
+2001-05-07 10:41 hardaker
+
+ * snmplib/: snmp_client.c, snmp_client.h:
+
+ Added a couple of convenience functions for manipulating varbindlists:
+ int snmp_set_var_typed_value(struct variable_list *newvar, u_char type,
+ u_char *val_str, size_t val_len);
+ void snmp_replace_var_types(struct variable_list *vbl, int old_type,
+ int new_type);
+ void snmp_reset_var_types(struct variable_list *vbl, int new_type);
+
+2001-05-07 10:36 hardaker
+
+ * snmplib/tools.h:
+
+ define SNMP_MALLOC_TYPEDEF()
+
+2001-05-05 07:28 rstory
+
+ * local/mib2c.storage.conf:
+
+ fix store_ name; don't cast to asny type if parm expecting u_char*; fix _variable_oid
+ naming; cast parm 2 of memdup to u_char*
+
+2001-05-03 14:16 hardaker
+
+ * snmplib/asn1.c:
+
+ fixed rauth offset incrementing: was incrementing the pointer, not the value.
+ -- more instances of the same problem found.
+
+2001-05-03 14:15 hardaker
+
+ * snmplib/asn1.c:
+
+ fixed rauth offset incrementing: was incrementing the pointer, not the value.
+
+2001-05-03 10:08 hardaker
+
+ * aclocal.m4, config.guess, config.sub,
+ configure, ltmain.sh:
+
+ updated to libtool 1.4
+
+2001-05-01 13:31 hardaker
+
+ * snmplib/snmpksm.c:
+
+ use realloc routines.
+
+2001-05-01 13:31 hardaker
+
+ * snmplib/read_config.c:
+
+ fix variable declaration.
+
+2001-05-01 13:30 hardaker
+
+ * snmplib/mib.c:
+
+ Don't print hex for string lengths less than 4. Should have died ages ago.
+
+2001-05-01 13:29 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat.h:
+
+ Fix prototype so its not static (it shouldn't be).
+
+2001-05-01 13:29 hardaker
+
+ * agent/mibgroup/mibII/ip.c:
+
+ make RONLY variables writable (which may or may not work. I'm betting not.)
+
+2001-05-01 13:28 hardaker
+
+ * agent/snmp_agent.c:
+
+ remove unused variables.
+
+2001-05-01 13:28 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ check for an rpm subdirectory.
+
+2001-04-23 20:41 hardaker
+
+ * local/tkmib:
+
+ big cleanup and other fixes I've already forgotten in the last few minutes.
+
+2001-04-23 20:34 hardaker
+
+ * local/tkmib:
+
+ Don't walk off end of mib tree (sigh).
+
+2001-04-23 20:19 hardaker
+
+ * local/tkmib:
+
+ fix the mib info display options.
+ save them appropriately.
+
+2001-04-23 18:23 hardaker
+
+ * local/tkmib:
+
+ more savable option items.
+ use Data::Dumper to save most stuff.
+
+2001-04-23 17:26 hardaker
+
+ * local/tkmib:
+
+ Don't save session options twice.
+ Make color of writable objects a variable.
+
+2001-04-23 17:08 hardaker
+
+ * local/: tkmib (V4-2-patches.2), tkmib:
+
+ fix walk problem once and for all.
+
+2001-04-23 16:36 hardaker
+
+ * local/tkmib:
+
+ reduce screen realestate all over the place
+
+2001-04-23 16:35 hardaker
+
+ * local/tkmib:
+
+ test against version 5
+
+2001-04-18 08:46 hardaker
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c,
+ agent/mibgroup/ucd-snmp/lmSensors.h, mibs/LM-SENSORS-MIB.txt
+, mibs/UCD-SNMP-MIB.txt:
+
+ Added LM-SENSORS-MIB support (diskio extension) from Martin Oldfield
+
+2001-04-18 05:40 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - hacking on snmp_add_var to handle long values
+
+ - use snmp_{hex,decimal}_to_binary instead of hex_to_binary
+ and ascii_to_binary; these should be removed
+
+ - don't use strtok in processing bitstrings
+
+2001-04-18 04:58 jbpn
+
+ * snmplib/asn1.c:
+
+ - use the generic snmp_realloc function in asn_realloc
+
+2001-04-18 02:40 jbpn
+
+ * snmplib/: tools.c, tools.h:
+
+ - new, reallocating utility functions snmp_hex_to_binary and
+ snmp_decimal_to_binary to convert hex and decimal strings to octet
+ strings respectively.
+
+ - new utility function snmp_realloc to perform buffer (re-)allocation
+
+2001-04-12 05:12 dts12
+
+ * agent/: snmp_agent.c (V4-2-patches.6), snmp_agent.c:
+
+ Better fix for bug #414855 from arajesh
+ Handles non-repeaters=0 as well, and avoids memory leaks.
+
+2001-04-11 10:06 jbpn
+
+ * snmplib/asn1.h:
+
+ - second incarnation of asn_realloc_rbuild_<type> functions, which
+ now take an additional argument that may be used to indicate that
+ reallocation should not be done.
+
+ - old _rbuild API is gone.
+
+ - extended (and corrected!) commentary on correct usage of new API.
+
+2001-04-11 10:05 jbpn
+
+ * snmplib/: snmp.c, snmp.h:
+
+ - use second incarnation of _realloc_rbuild functions.
+
+ - old _rbuild_var_op API is gone.
+
+2001-04-11 10:04 jbpn
+
+ * snmplib/snmpusm.c:
+
+ - use second incarnation of asn_realloc_rbuild_<type> functions.
+
+2001-04-11 10:03 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - use second incarnation of _realloc_rbuild functions.
+
+ - old _rbuild API is gone.
+
+2001-04-11 10:02 jbpn
+
+ * snmplib/asn1.c:
+
+ - second incarnation of asn_realloc_rbuild_<type> functions, which
+ now take an additional argument that may be used to indicate that
+ reallocation should not be done.
+
+ - old _rbuild API is gone.
+
+ - asn_realloc() function checks whether it has been passed a NULL
+ pointer and uses malloc() in that case (thanks to Michael Slifcak
+ for pointing out the danger here).
+
+2001-04-11 06:13 dts12
+
+ * agent/snmp_agent.c:
+
+ Handle GetBulk requests with max-repetitions=0 properly (bug #414855)
+
+2001-04-10 04:47 jbpn
+
+ * snmplib/snmpUDPDomain.c:
+
+ - set SO_SNDBUF and SO_RCVBUF to 128Kb for newly-opened UDP sockets,
+ to enable large PDUs to be sent and received. Some
+ implementations default very low (Solaris 2.7 8Kb, Linux 2.4
+ 64Kb).
+
+2001-04-09 10:05 jbpn
+
+ * snmplib/snmpusm.c:
+
+ - modified usm_rgenerate_out_msg() to make use of reallocating
+ reverse encode functions.
+
+2001-04-09 10:03 jbpn
+
+ * snmplib/snmpusm.h:
+
+ - additional parameter to usm_rgenerate_out_msg() to enable use of
+ reallocating reverse encode functions.
+
+2001-04-09 09:57 jbpn
+
+ * snmplib/snmp_secmod.h:
+
+ - allow additional parameter for outgoing params to enable use of
+ reallocating reverse encode functions.
+
+2001-04-09 09:55 jbpn
+
+ * snmplib/snmp_api.h:
+
+ - prototypes for reallocating reverse encode functions
+
+2001-04-09 09:54 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - modified to use reallocating reverse ASN.1 encoder functions if
+ using reverse encoding at all.
+
+2001-04-09 09:49 jbpn
+
+ * snmplib/snmp.c:
+
+ - add new function snmp_realloc_rbuild_var_op() which uses
+ reallocating reverse ASN.1 encoder functions to encode varbinds.
+
+2001-04-09 09:47 jbpn
+
+ * snmplib/asn1.h:
+
+ - prototype for new suite of functions asn_realloc_rebuild_<type>,
+ which perform reverse encoding into a buffer and grow it if there
+ is not enough space for the encoding.
+
+ - commentary on correct usage of above.
+
+2001-04-09 09:43 jbpn
+
+ * snmplib/asn1.c:
+
+ - new suite of functions asn_realloc_rebuild_<type>, which perform
+ reverse encoding into a buffer and grow it if there is not enough
+ space for the encoding.
+
+2001-04-06 12:12 hardaker
+
+ * AGENT.txt, COPYING, ChangeLog,
+ EXAMPLE.conf.def, FAQ, NEWS, PORTING,
+ README, README.agentx, README.snmpv3, configure
+, configure.in, sedscript.in, version.h
+, agent/agent_trap.c, agent/ds_agent.h,
+ agent/snmp_agent.c, agent/snmpd.c,
+ agent/mibgroup/ucd_snmp.h, agent/mibgroup/util_funcs.c
+, agent/mibgroup/agentx/README.agentx,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master.h,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_utils.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/at.h,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/udp.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/notification/snmpNotifyFilterProfileTable.c,
+ agent/mibgroup/notification/snmpNotifyFilterTable.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/target/target.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/proxy.c,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c, apps/snmpdelta.c
+, apps/snmptest.c, apps/snmptrapd.c,
+ local/Makefile.in, local/mib2c, local/snmpconf
+, local/tkmib, local/wesrestart, man/snmpcmd.1
+, man/snmpd.conf.5.def, man/snmpdelta.1,
+ mibs/rfclist, mibs/rfcmibs.diff, snmplib/mib.c,
+ snmplib/parse.c, snmplib/snmp_api.c,
+ snmplib/snmp_debug.c, snmplib/snmpusm.c,
+ testing/eval_tools.sh, testing/tests/T120proxyget:
+
+ merge3 -> merge4. I don't *think* I broke anything.
+ - The main line should now contain all the 4.2.1 patches.
+ - I may double check this at a later date.
+
+2001-04-05 06:37 dts12
+
+ * snmplib/parse.c:
+
+ Change 'Line' variable name, to assist with Mac port.
+
+2001-04-05 06:14 dts12
+
+ * agent/mibgroup/ucd-snmp/: pass.c, pass_persist.c:
+
+ Handle setting null string values via the 'pass' mechanism. (Support#406728)
+ Also handle embedded whitespace in such values.
+ Also applied to 'pass_persist'.
+
+2001-04-05 06:07 dts12
+
+ * agent/: agent_registry.c, agent_trap.c, kernel.c
+, mib_modules.c, snmp_agent.c, snmp_agent.h
+, snmp_vars.c, mibgroup/util_funcs.c,
+ mibgroup/agentx/master_admin.c, mibgroup/agentx/protocol.c
+, mibgroup/host/hr_disk.c, mibgroup/host/hr_network.c
+, mibgroup/host/hr_print.c, mibgroup/host/hr_proc.c
+, mibgroup/host/hr_system.c, mibgroup/host/hr_utils.c
+, mibgroup/mibII/vacm_vars.c,
+ mibgroup/mibII/var_route.c,
+ mibgroup/notification/snmpNotifyFilterProfileTable.c,
+ mibgroup/notification/snmpNotifyFilterTable.c,
+ mibgroup/notification/snmpNotifyTable.c,
+ mibgroup/target/snmpTargetAddrEntry.c,
+ mibgroup/target/target.c, mibgroup/ucd-snmp/file.c,
+ mibgroup/ucd-snmp/hpux.c, mibgroup/ucd-snmp/proxy.c,
+ mibgroup/ucd-snmp/registry.c,
+ mibgroup/ucd-snmp/versioninfo.c:
+
+ Keep one of the pickier compilers (HP's aCC) happy.
+
+2001-04-05 06:06 dts12
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ Ensure that checking for 'statvfs' is done consistently
+
+2001-04-05 06:05 dts12
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ ensure that 'exec_command' is used consistently with the availability of execv
+ (A cleaner approach than the previous patch)
+
+2001-04-05 06:01 dts12
+
+ * agent/: auto_nlist.c, auto_nlist.h:
+
+ fix for auto_nlist bogus definitions for machines without nlist.
+
+2001-04-05 04:51 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - save a strcpy() and allow long octet string values without crashing
+ (though there are still problems due to the liberal use of fixed
+ size buffers with no bounds checking all over the place. Sigh).
+
+2001-04-04 06:46 jbpn
+
+ * agent/snmpd.c:
+
+ - call external signal handlers before calling snmp_select_info(),
+ rather than after calling snmp_select_info() but before select().
+ This fixes a potential problem that could arise if a signal handler
+ closed a session, which would cause select() to return -1 with
+ EBADF, and thus terminate the agent.
+
+2001-04-03 09:31 dts12
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ Ensure that the 'extmp' command variable is accessible on systems without EXECV.
+
+2001-04-03 09:29 dts12
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Keep one of the pickier compilers (HP's aCC) happy.
+
+2001-04-03 09:22 dts12
+
+ * apps/: snmptrapd.c, snmptrapd_log.c:
+
+ Keep one of the pickier compilers (HP's aCC) happy.
+
+2001-04-03 09:15 dts12
+
+ * snmplib/: mib.c, read_config.c, snmpTCPDomain.h
+, snmpUDPDomain.c, snmpUnixDomain.c,
+ snmpUnixDomain.h, snmp_api.c, snmp_logging.c,
+ snmp_transport.c, snmp_transport.h, system.c:
+
+ Keep one of the pickier compilers (HP's aCC) happy.
+
+2001-04-03 06:30 dts12
+
+ * agent/mibgroup/mibII/kernel_linux.c:
+
+ Plug file-descriptor leak when using cached data. (Bug#412000)
+
+2001-04-02 10:11 jbpn
+
+ * agent/snmp_agent.c:
+
+ - check for limits.h properly
+
+2001-04-02 10:10 jbpn
+
+ * man/snmp_agent_api.3:
+
+ - minor typeface changes
+
+2001-03-31 06:27 jbpn
+
+ * man/snmp_agent_api.3:
+
+ - update documentation of agent_check_and_process to reflect
+ current behaviour
+
+ ** NOTE: currently returns control to user when an alarms runs **
+ ** **
+ ** This may change **
+
+2001-03-31 06:25 jbpn
+
+ * man/snmp_alarm.3:
+
+ - document the snmp_alarm_register_hr function
+
+ - expand the NOTES section discussing use of SIGALRM (or not)
+
+2001-03-31 06:17 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - Make use of SNMP_CALLBACK_OP_DISCONNECT transport disconnect
+ indication to shut down AgentX sessions cleanly and cancel all
+ callbacks which make refernce to the AgentX session.
+
+2001-03-31 06:15 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - Fix multiple free() of parts of the subsession by zeroing out
+ fields that we don't use.
+
+ - Make use of SNMP_CALLBACK_OP_DISCONNECT transport disconnect
+ indication to shut down AgentX sessions cleanly.
+
+2001-03-31 06:13 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - Make use of SNMP_CALLBACK_OP_DISCONNECT transport disconnect
+ indication to shut down AgentX sessions cleanly.
+
+2001-03-31 06:11 jbpn
+
+ * agent/snmp_agent.c:
+
+ - Fix memory leak in handle_one_var where long varbinds weren't
+ correctly free()d.
+
+ - Change behaviour of agent_check_and_process so that alarms run
+ correctly.
+
+ ** NOTE: currently returns control to user when an alarms runs **
+ ** **
+ ** This may change **
+
+2001-03-31 06:05 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - Changed packet handling on stream-like transports so that all
+ complete received packets are processed:
+
+ _sess_read is refactored into two functions: _sess_read remains
+ responsible for reading data from the transport layer, but then
+ calls (perhaps more than once) _sess_process_packet to dispatch
+ each packet read.
+
+ - The presence of a session with a buffered partial packet no longer
+ causes snmp_select_info to return with a timeout of zero.
+
+ - Free the subsessions of a session when doing an snmp_sess_close;
+ this fixes an AgentX memory leak when subagents come and go.
+
+ - Perform callbacks with an operation argument of
+ SNMP_CALLBACK_OP_DISCONNECT when you get a transport disconnect
+ indication.
+
+2001-03-31 05:56 jbpn
+
+ * snmplib/snmp_api.h:
+
+ Made transport domain const
+
+2001-03-31 05:55 jbpn
+
+ * snmplib/callback.c:
+
+ Fix memory leak that can occur when deregistering callbacks
+
+2001-03-30 08:05 hardaker
+
+ * README.agentx:
+
+ file README.agentx was initially added on branch V4-2-patches.
+
+2001-03-29 21:43 hardaker
+
+ * ISSUES (V4-2-patches.1), ISSUES:
+
+ rm ISSUES
+
+2001-03-29 08:21 slif
+
+ * win32/libsnmp_dll/: libsnmp.def (V4-2-patches.3), libsnmp.def
+:
+
+ Add vacm_is_configured.
+
+2001-03-28 06:19 jbpn
+
+ * agent/mibgroup/agentx/: client.c, master_request.c:
+
+ - use SNMP_CALLBACK_OP_<name> callback operation names
+
+2001-03-28 06:00 jbpn
+
+ * apps/snmptrapd.c:
+
+ - use SNMP_CALLBACK_OP_<name> callback operation names
+
+2001-03-28 05:36 jbpn
+
+ * agent/: snmp_agent.c, snmpd.c:
+
+ - use SNMP_CALLBACK_OP_<name> callback operation names
+
+2001-03-28 05:06 jbpn
+
+ * snmplib/: snmp_client.c, snmp_api.c:
+
+ - use SNMP_CALLBACK_OP_<name> callback operation names
+
+2001-03-28 05:04 jbpn
+
+ * snmplib/snmp_api.h:
+
+ - rename callback operations to SNMP_CALLBACK_OP_<name>
+ - add new operations SNMP_CALLBACK_OP_CONNECT, SNMP_CALLBACK_OP_DISCONNECT
+ - add legacy definitions for RECEIVED_MESSAGE, TIMED_OUT, SEND_FAILED
+
+2001-03-27 15:57 hardaker
+
+ * agent/mibgroup/disman/: mteObjectsTable.c,
+ mteTriggerTable.c:
+
+ change fprintf -> snmp_log.
+ Don't allow modifications of read-only rows in mteObjectsTable.
+
+2001-03-27 10:55 hardaker
+
+ * agent/: ds_agent.h, mibgroup/disman/mteObjectsTable.c
+, mibgroup/disman/mteObjectsTable.h,
+ mibgroup/disman/mteTriggerBooleanTable.c,
+ mibgroup/disman/mteTriggerDeltaTable.c,
+ mibgroup/disman/mteTriggerExistenceTable.c,
+ mibgroup/disman/mteTriggerTable.c,
+ mibgroup/disman/mteTriggerTable.h,
+ mibgroup/disman/mteTriggerThresholdTable.c:
+
+ Support for new features in the DISMAN-EVENT-MIB code:
+ New snmpd.conf tokens:
+ - monitor [-o oid...] [-u user] oid [(=|!=|<=|...) VALUE].
+ - defaultMonitors yes
+
+2001-03-27 10:53 hardaker
+
+ * snmplib/mib.c:
+
+ Moved * from beginning of routine to the same line as the return
+ variable declaration. Was causing etags grief the other way.
+
+2001-03-27 10:52 hardaker
+
+ * local/Makefile.in:
+
+ patch from Ken Hornstein: use %s instead of @s for search/replace delimiters.
+
+2001-03-27 10:29 hardaker
+
+ * apps/snmptrapd.c:
+
+ Use snmp_log with %s to prevent % expansion in octet strings containing a %s.
+ trap_fmt_free needs ()s.
+
+2001-03-27 08:13 dts12
+
+ * agent/: snmp_agent.c, mibgroup/agentx/master_request.c
+:
+
+ Handle non-responsive AgentX sub-agents more robustly.
+ (Based on suggestions from Harrie Hazewinkel & Paul Rasmussen)
+
+2001-03-27 08:03 dts12
+
+ * agent/snmp_agent.c:
+
+ Avoid double-freeing of cached address strings.
+ (John's improvement to my suggested fix).
+
+2001-03-27 02:39 dts12
+
+ * agent/mibgroup/smux/smux.c:
+
+ Reset count of authorized peers on closedown. (Thanks to Vlad Tunik)
+
+2001-03-26 18:01 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c, snmplib/vacm.c, snmplib/vacm.h
+ (V4-2-patches.[1,2,1]), agent/mibgroup/mibII/vacm_vars.c,
+ snmplib/vacm.c, snmplib/vacm.h:
+
+ Fixed vacm to drop v1/v2c packets properly when no com2sec entries are found.
+
+2001-03-26 11:04 hardaker
+
+ * local/: ipf-mod.pl (V4-2-patches.1), ipf-mod.pl:
+
+ add usage comment at top
+
+2001-03-22 07:55 dts12
+
+ * snmplib/snmp_api.c:
+
+ Use ASN_OCTET_STR rather than the historic ASN_BIT_STR for 'b' object values
+ Patch from Frank Strauss.
+
+2001-03-22 07:46 dts12
+
+ * agent/: agent_trap.c (V4-2-patches.3), agent_trap.c:
+
+ Fix for minor memory leak with trap-related varbind values.
+ Thanks to John Villalovos (and the Intel SNMP team)
+
+2001-03-21 17:30 driehuis
+
+ * snmplib/mib.c:
+
+ Avoid crash in snmp_shutdown on platforms that check pointer validity
+ in free(3), e.g. FreeBSD.
+
+2001-03-21 08:46 hardaker
+
+ * agent/agent_trap.c, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/mibII/mta_sendmail.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/target/target.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/proxy.c, apps/snmptrapd_handlers.c
+, snmplib/default_store.c, snmplib/read_config.c
+, snmplib/read_config.h, snmplib/snmpusm.c,
+ snmplib/snmpv3.c:
+
+ copy_nword created that checks buffer lengths.
+ Made everything use it.
+
+2001-03-21 08:38 hardaker
+
+ * snmplib/snmpksm.c:
+
+ KSM patch from Ken Hornstein
+
+2001-03-20 09:13 jbpn
+
+ * agent/.cvsignore:
+
+ Ignore Purify and NFS stuff
+
+2001-03-16 10:14 hardaker
+
+ * config.h.in:
+
+ added MIT_NEW_CRYPTO (for ksm) definition which was missing
+
+2001-03-16 02:51 jbpn
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ fix ridiculous memory leak in discontinuity processing
+
+2001-03-15 11:04 hardaker
+
+ * testing/tests/T056agentv2cmintrap:
+
+ whoops. Missed a merge conflict line
+
+2001-03-15 10:59 hardaker
+
+ * README, README.win32, agent/mib_modules.c,
+ agent/mibgroup/header_complex.c,
+ agent/mibgroup/agentx/client.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/master_request.c,
+ agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/host/hr_filesys.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/ip.c,
+ agent/mibgroup/notification/snmpNotifyFilterProfileTable.c,
+ agent/mibgroup/notification/snmpNotifyFilterTable.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/target/target.c,
+ agent/mibgroup/ucd-snmp/dlmod.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proxy.c, apps/snmptrapd.c,
+ apps/snmptrapd_log.c, apps/snmpnetstat/if.c,
+ man/snmp.conf.5.def, man/snmpcmd.1, man/snmptrapd.8
+, mibs/IANAifType-MIB.txt, mibs/MTA-MIB.txt,
+ mibs/Makefile.mib, mibs/README.mibs,
+ mibs/TUNNEL-MIB.txt, mibs/ianalist, mibs/mibfetch
+, mibs/rfclist, mibs/rfcmibs.diff, mibs/smistrip
+, perl/SNMP/SNMP.xs, snmplib/asn1.c,
+ snmplib/default_store.c, snmplib/mib.c,
+ snmplib/mib.h, snmplib/parse.c, snmplib/snmp_api.c
+, snmplib/snmp_logging.c, snmplib/snmp_parse_args.c
+, snmplib/snmp_parse_args.h, snmplib/snmpv3.c,
+ snmplib/system.h, testing/eval_tools.sh,
+ testing/tests/T054agentv2ctrap,
+ testing/tests/T056agentv2cmintrap,
+ testing/tests/T058agentauthtrap, testing/tests/T100agenthup
+, win32/config.h, win32/mib_module_config.h,
+ win32/mib_module_includes.h, win32/mib_module_inits.h,
+ win32/libsnmp_dll/libsnmp.def,
+ win32/libucdmibs/libucdmibs.def,
+ win32/libucdmibs/libucdmibs.dsp:
+
+ merge from patches branch: merge2->3.
+
+2001-03-15 10:22 jbpn
+
+ * agent/mibgroup/disman/mteTriggerTable.h:
+
+ extra members for discontinuity processing
+
+2001-03-15 07:46 hardaker
+
+ * agent/snmpd.c:
+
+ Patch from Frank Strauss to run signal handlers earlier
+
+2001-03-14 14:37 hardaker
+
+ * agent/: agent_trap.h (V4-2-patches.2), agent_trap.h:
+
+ Patch from Harrie Hazewinkel: make send_enterprise_trap_vars a public fn.
+
+2001-03-14 12:16 slif
+
+ * agent/mibgroup/tunnel/tunnel.c:
+
+ Use config.h, don't use ucd-snmp directory to build in the mibgroup tree.
+
+2001-03-14 11:05 slif
+
+ * testing/: Makefile.in, RUNTESTS, TESTCONF.sh
+, eval_onescript.sh, eval_tools.sh:
+
+ merge the test script changes made in the V4-2-patches branch.
+
+2001-03-14 10:57 jbpn
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ Change to discontinuity processing to stop it returning TRUE all the
+ time
+
+2001-03-14 10:52 jbpn
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ - rough stab at discontinuity processing
+ - bail out of getNext-type loops on a badType condition
+
+2001-03-14 10:34 hardaker
+
+ * README.krb5:
+
+ kerberos README file from Ken Hornstein
+
+2001-03-14 10:28 jbpn
+
+ * agent/mibgroup/disman/mteTriggerDeltaTable.c:
+
+ Get returned *var_len right for mteTriggerDeltaDiscontinuityID
+
+2001-03-14 10:19 slif
+
+ * agent/snmpd.c, agent/mibgroup/examples/ucdDemoPublic.c
+, apps/snmpvacm.c, apps/snmpnetstat/winstub.c,
+ snmplib/parse.c, snmplib/snmpUnixDomain.c:
+
+ patch submitted by Harrie Hazewinkel to quiet some warnings.
+
+2001-03-14 10:19 hardaker
+
+ * acconfig.h, configure, configure.in,
+ snmplib/snmp_api.c, snmplib/snmpksm.c,
+ snmplib/snmpksm.h:
+
+ KSM patch from Ken Hornstein.
+
+2001-03-14 05:45 dts12
+
+ * agent/mibgroup/host/: hr_swrun.c (V4-2-patches.5), hr_swrun.c
+:
+
+ Fix Linux file descriptor leak (reported by Oliver Fänger)
+
+2001-03-14 05:22 jbpn
+
+ * agent/mibgroup/disman/.cvsignore:
+
+ [no log message]
+
+2001-03-14 02:20 jbpn
+
+ * agent/mibgroup/disman/: mteTriggerTable.c,
+ mteTriggerTable.h:
+
+ - save original PDU's transport domain -- necessary for
+ community string processing
+
+ CAUTION: incompatible change in format of mteTriggerTable
+ configuration entry
+
+ - fix memory leak in mte_run_trigger by releasing PDUs
+
+ - send "bad type" notifications in some cases
+
+ - other minor memory leaks
+
+ - "delta" sampleType handled for boolean triggers
+
+ - more "XXX:" comments!
+
+2001-03-13 13:52 marz
+
+ * perl/SNMP/SNMP.xs:
+
+ fix support for Integer32
+
+2001-03-11 08:43 jbpn
+
+ * snmplib/: snmp_transport.c, snmp_transport.h:
+
+ Add a function to test whether an OID corresponds to a supported transport
+ domain.
+
+2001-03-11 07:55 jbpn
+
+ * snmplib/snmpTCPDomain.h:
+
+ Add #includes to make struct sockaddr_in complete
+
+2001-03-11 07:54 jbpn
+
+ * snmplib/snmpAAL5PVCDomain.h:
+
+ Remove spurious #include
+
+2001-03-09 07:32 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ Fix rwuser -s model to actually work.
+
+2001-03-09 05:52 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ Set a PDU's opaque data on a tcp_recv; this isn't necessary to send
+ replies (because the underlying socket is strongly connected) but if
+ you don't do this then you can't do "com2sec" type processing for PDUs
+ received on TCP sessions... interesting.
+
+2001-03-09 03:33 jbpn
+
+ * snmplib/snmpUDPDomain.c:
+
+ Fix bad assumption that community string is zero-terminated
+
+2001-03-08 15:36 hardaker
+
+ * agent/snmpd.c:
+
+ - correct version statements to indicate net-snmp.
+ - remove my name as author (I'm certainly not the only one)
+ - add web address.
+
+2001-03-08 15:31 hardaker
+
+ * README:
+
+ - Added Ken Hornstein's name to contributers list.
+ - Removed mine from being listed separately.
+
+2001-03-08 14:51 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/mibII/vacm_vars.c, snmplib/snmpksm.c,
+ snmplib/snmpksm.h:
+
+ Added a kerberos based security module (ksm).
+ However, Needs libraries (-lkrb5 -lcom_err) not being checked for currently.
+
+2001-03-08 14:48 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Whoops. Shouldnt have a negation sign on the most recent checkin.
+
+2001-03-08 14:38 hardaker
+
+ * snmplib/snmp_api.c:
+
+ If NO_PROBE is set, don't do any post probing activities either like
+ time updating and user creation.
+
+2001-03-08 08:14 jbpn
+
+ * agent/mibgroup/target/target.c:
+
+ Remove strdup()s on some session parameters which cause memory leaks
+ (since snmp_open deep copies the input session anyway)
+
+2001-03-08 08:11 jbpn
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c:
+
+ Make sure sess field of new entries is initialised to NULL.
+
+2001-03-08 07:49 jbpn
+
+ * agent/mibgroup/target/snmpTargetParamsEntry.c:
+
+ Make config token parser update timestamp on entry it creates;
+ move update_timestamp function.
+
+2001-03-07 07:45 hardaker
+
+ * perl/SNMP/: README, SNMP.pm, SNMP.xs:
+
+ Patch from Karl Schilke to remove unneeded timestamp support
+
+2001-03-06 20:58 hardaker
+
+ * snmplib/: snmp_api.c, snmp_client.c, snmp_secmod.c
+, snmp_secmod.h, snmpusm.c:
+
+ secmod struct symbol name changes to something more intelligible.
+
+2001-03-06 16:46 hardaker
+
+ * snmplib/: snmp_api.c, snmp_client.c:
+
+ - set the default pdu security model to SNMP_DEFAULT_SECMODEL (not 0).
+ - don't force the security model of the session on the pdu if already set.
+
+2001-03-06 16:11 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ hopefully fix to allow other (registered) security models to be used.
+
+2001-03-06 09:23 hardaker
+
+ * README:
+
+ Added John Naylon to the README file.
+
+2001-03-06 09:22 hardaker
+
+ * snmplib/: snmp_api.c, snmp_secmod.h:
+
+ Create a new secmod callback when a timeout on a pdu occurs.
+
+2001-03-06 09:18 hardaker
+
+ * configure, configure.in:
+
+ properly install secmod header list.
+
+2001-03-06 08:43 hardaker
+
+ * snmplib/: snmp_api.c, snmp_secmod.h:
+
+ - bug fixes for secmod related stuff (it compiles now (opps)).
+
+2001-03-06 08:38 hardaker
+
+ * snmplib/: snmp_api.c, snmp_secmod.h:
+
+ - two new secmod callbacks for freeing a pdu and a session.
+ - move transport closing in snmp_sess_close() to after pending
+ requests are freed/closed in case something needs to make use of the
+ transport before it closes.
+
+2001-03-06 07:56 hardaker
+
+ * snmplib/: snmp_api.c, snmp_secmod.h:
+
+ Pass in pdu to secmod encode/decode routines.
+
+2001-03-06 03:35 jbpn
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Modified function Interface_Index_By_Name (Solaris specific) to cope more
+ gracefully with large numbers of interfaces. Also stops Purify on Solaris
+ complaining about uninitialised memory reads.
+
+2001-03-05 16:33 hardaker
+
+ * snmplib/snmp_api.c:
+
+ reverse callback ordering of normal callback/secmod callback
+ processing in sess_copy().
+
+2001-03-05 16:26 hardaker
+
+ * snmplib/snmp_secmod.c:
+
+ remove unused free function calls for security module unregistrations.
+
+2001-03-05 16:17 hardaker
+
+ * snmplib/: snmp_api.c, snmp_secmod.h:
+
+ minor API changes to the pluggable security model handling.
+
+2001-03-05 16:11 hardaker
+
+ * snmplib/snmp_api.c:
+
+ properly respect the DONT_PROBE_FLAG.
+
+2001-03-05 15:36 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h, snmp_secmod.h
+:
+
+ add a session pointer to the v3 build routines.
+
+2001-03-05 15:23 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ Add a krb5 specific error code.
+
+2001-03-05 14:58 hardaker
+
+ * configure, configure.in:
+
+ make configure properly handle pluggable security modules
+
+2001-03-05 14:49 hardaker
+
+ * configure, configure.in:
+
+ make configure mkdir snmplib before creating a file in it
+
+2001-03-05 14:44 hardaker
+
+ * configure, configure.in:
+
+ make configure respect non-local srcdirs for transport/secmods
+
+2001-03-05 10:40 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/agent_index.c,
+ agent/agent_read_config.c, agent/agent_registry.c,
+ agent/mib_modules.c, agent/snmp_vars.c,
+ agent/snmpd.c, agent/mibgroup/examples/ucdDemoPublic.c
+, agent/mibgroup/snmpv3/usmUser.c, apps/snmptrapd.c
+, snmplib/.cvsignore, snmplib/Makefile.in,
+ snmplib/callback.h, snmplib/default_store.h,
+ snmplib/lcd_time.c, snmplib/scapi.c,
+ snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmpusm.c, snmplib/snmpusm.h,
+ snmplib/snmpv3.c:
+
+ support for pluggable security models. Currently only the USM is
+ available, but a new kerberos based security model will be available
+ shortly. These changes simply make it possible to use more than one
+ security service.
+
+2001-03-05 10:36 hardaker
+
+ * snmplib/: snmp_secmod.c, snmp_secmod.h:
+
+ Added John Naylon to the authors list.
+
+2001-03-05 10:33 hardaker
+
+ * snmplib/snmp_enum.h:
+
+ Comment re-arranging to actually be near the functions they're describing.
+
+2001-03-05 06:10 jbpn
+
+ * snmplib/system.c:
+
+ Modified get_myaddr() function to cope more gracefully with large numbers
+ of interfaces, and with the possibility of non-IPv4 addresses on some
+ interfaces. Also stops Purify on Solaris complaining about uninitialised
+ memory reads. Use "official" definition of INADDR_LOOPBACK.
+
+2001-03-03 14:34 nba
+
+ * mibs/README.mibs:
+
+ file README.mibs was initially added on branch V4-2-patches.
+
+2001-03-03 14:34 nba
+
+ * mibs/ianalist:
+
+ file ianalist was initially added on branch V4-2-patches.
+
+2001-03-03 14:34 nba
+
+ * mibs/rfclist:
+
+ file rfclist was initially added on branch V4-2-patches.
+
+2001-03-03 14:34 nba
+
+ * mibs/rfcmibs.diff:
+
+ file rfcmibs.diff was initially added on branch V4-2-patches.
+
+2001-03-01 19:23 hardaker
+
+ * snmplib/: asn1.c, snmp_api.c:
+
+ Fix snmp_oid_compare and reverse encodings to deal with numbers > 2^31.
+
+2001-02-28 23:02 hardaker
+
+ * snmplib/: read_config.c, read_config.h,
+ snmp_parse_args.c:
+
+ - implemented snmp_config(char *line) to parse a .conf configuration
+ line at any time in the code (handlers must be registered before hand).
+ - implemented snmp_config_remember(char *line) to memorize it for
+ later use.
+ - read_configs, et al, will automatically call them after reading
+ everything else.
+ - Added a -Y flag to snmp_parse_args to store read config directives
+ for later use, thus allowing you to specify .conf directives on the
+ command line.
+
+2001-02-27 07:28 dts12
+
+ * agent/snmp_vars.c:
+
+ Avoid infinite loop with AgentX subagents and VACM checking interaction.
+ (Fix provided by Frank Strauss)
+
+2001-02-21 15:21 hardaker
+
+ * snmplib/: ucd-snmp-includes.h (V4-2-patches.1),
+ ucd-snmp-includes.h:
+
+ Applied patch #103805 from bcollar: add sys/time.h to ucd-snmp-includes.h
+
+2001-02-21 15:15 hardaker
+
+ * snmplib/: int64.c (V4-2-patches.2), int64.c:
+
+ fix bug #133416 (u64Subtraction math) as suggested by the submittor
+
+2001-02-16 15:12 hardaker
+
+ * agent/: var_struct.h (V4-2-patches.1), var_struct.h:
+
+ - increase UCD_REGISTRY_OID_MAX_LEN to 128 at Frank's request
+
+2001-02-16 04:16 jbpn
+
+ * configure.in:
+
+ Change behaviour on cygwin to exclude Unix domain transports by default
+ on cygwin, and also fix a minor bug, thanks to suggestions by Peter Folk.
+
+2001-02-14 18:14 hardaker
+
+ * apps/: snmptrapd.c (V4-2-patches.1), snmptrapd.c:
+
+ removed unused snmp_alarm.h include
+
+2001-02-12 14:11 marz
+
+ * perl/SNMP/SNMP.pm:
+
+ added Karl's patch for usenumeric
+
+2001-02-12 13:54 marz
+
+ * perl/SNMP/: MANIFEST, SNMP.pm, SNMP.xs,
+ examples/trap-example.pl:
+
+ added trap reception API from Philip Prindeville <philipp@cisco.com>
+
+2001-02-11 08:23 jbpn
+
+ * apps/snmptrapd.c:
+
+ Use snmp_add not snmp_sess_add (the latter doesn't add a session to
+ the Session list, and it therefore won't get included in the select()
+ fdset, hence snmptrapd will never receive very much).
+
+2001-02-11 08:20 jbpn
+
+ * snmplib/snmpUDPDomain.c:
+
+ Fix improperly-terminated list in com2sec handling.
+
+2001-02-11 07:45 jbpn
+
+ * agent/snmpd.c:
+
+ Clean up merge (>>>>>>, ====== etc. left behind).
+
+2001-02-10 09:26 jbpn
+
+ * configure.in:
+
+ Fix typo.
+
+2001-02-10 09:11 jbpn
+
+ * agent/mibgroup/agentx/: master.c, master_admin.c,
+ subagent.c:
+
+ Memory leak patches (sourceforge patch #103605).
+ Remove a few strdup()s, and call free_agent_snmp_session() rather than
+ free() in subagent.c:handle_agentx_packet() for AGENTX_MSG_RESPONSE
+ and default cases, to ensure free()ing of cloned PDU allocated by
+ init_agent_snmp_session.
+
+2001-02-10 07:28 hardaker
+
+ * snmplib/: snmpAAL5PVCDomain.c, snmpAAL5PVCDomain.h,
+ snmpIPXDomain.c, snmpIPXDomain.h, snmpTCPDomain.c
+, snmpTCPDomain.h, snmpUDPDomain.c,
+ snmpUDPDomain.h, snmpUnixDomain.c, snmpUnixDomain.h
+, snmp_transport.c, snmp_transport.h:
+
+ Whoops. Forgot the new files associated with the pluggable transport stuff.
+
+2001-02-09 11:22 hardaker
+
+ * agent/mibgroup/disman/: event-mib.h, mteObjectsTable.c
+, mteObjectsTable.h, mteTriggerBooleanTable.c,
+ mteTriggerExistenceTable.c, mteTriggerTable.c,
+ mteTriggerTable.h, mteTriggerThresholdTable.c:
+
+ Implemented and made use of mteObjectsTable to send additional objects out with traps generated. Also, don't return data for misc tables when that trigger isn't defined to use that test type.
+
+2001-02-09 11:16 hardaker
+
+ * agent/: snmpd.c (V4-2-patches.2), snmpd.c:
+
+ Applied patch #103613: fix memory leak in snmpd port specification -> default_store.
+
+2001-02-09 11:14 hardaker
+
+ * agent/: mib_modules.c (V4-2-patches.2), mib_modules.c:
+
+ Applied patch #103612: fix memory leak in mib_module init code
+
+2001-02-09 11:12 hardaker
+
+ * agent/: agent_registry.c (V4-2-patches.1), agent_registry.c
+:
+
+ Applied patch #103611: fix memory leak for duplicate oid registrations.
+
+2001-02-09 11:05 hardaker
+
+ * agent/mibgroup/ucd-snmp/: memory_freebsd2.c, proxy.c
+ (V4-2-patches.[1,4]), memory_freebsd2.c:
+
+ Applied patch #103702: fix swap reporting on freebsd 4.2
+
+2001-02-09 10:12 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/agent_trap.c, agent/snmp_agent.c
+, agent/snmp_agent.h, agent/snmp_vars.c,
+ agent/snmpd.c, agent/mibgroup/mibII/vacm_vars.c,
+ apps/snmpstatus.c, apps/snmptest.c, apps/snmptrap.c
+, apps/snmptrapd.c, apps/snmptrapd_log.c,
+ apps/snmptrapd_log.h, mibs/UCD-SNMP-MIB.txt,
+ snmplib/Makefile.in, snmplib/snmp_alarm.c,
+ snmplib/snmp_alarm.h, snmplib/snmp_api.c,
+ snmplib/snmp_api.h, snmplib/snmp_client.c,
+ snmplib/vacm.h:
+
+ Applied patch 103510: domain transport independence. Note: Traps/VACM broken.
+
+2001-02-09 08:54 hardaker
+
+ * testing/tests/: T001snmpv1get, T002snmpv1getnext,
+ T003snmpv1getfail, T014snmpv2cget, T015snmpv2cgetnext
+, T016snmpv2cgetfail, T017snmpv2ctov1getfail,
+ T018snmpv1tov2cgetfail, T020snmpv3get,
+ T021snmpv3getnext, T022snmpv3getMD5,
+ T023snmpv3getMD5DES, T024snmpv3getSHA1,
+ T025snmpv3getSHADES, T028snmpv3getfail,
+ T030snmpv3usercreation, T053agentv1trap,
+ T054agentv2ctrap, T055agentv1mintrap,
+ T056agentv2cmintrap, T058agentauthtrap, T100agenthup
+, T110agentxget, T111agentxset, T112agentxsetfail
+, T113agentxtrap, T120proxyget, T121proxyset
+, T122proxysetfail:
+
+ updated most tests to use numeric OIDs so as to not rely on mib parsing
+
+2001-02-09 07:18 hardaker
+
+ * agent/mibgroup/agentx/master.h:
+
+ remove unused prototype: get_agentx_transID
+
+2001-02-08 14:15 hardaker
+
+ * local/Makefile.in, local/traptoemail,
+ man/snmptrapd.conf.5.def:
+
+ traptoemail perl script created as an example traphandle script
+
+2001-02-08 14:01 hardaker
+
+ * Makefile.in, acconfig.h, config.h.in,
+ agent/Makefile.in, agent/agent_trap.c,
+ agent/mib_modules.c, agent/snmpd.c,
+ agent/mibgroup/kernel_sunos5.c,
+ agent/mibgroup/agentx/client.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/master_admin.h,
+ agent/mibgroup/agentx/master_request.c,
+ agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/host/hr_print.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/smux/smux.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/proxy.c,
+ agent/mibgroup/ucd-snmp/vmstat.h,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.h,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.h,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.h,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.h, apps/snmpdelta.c
+, apps/snmpset.c, apps/snmptrap.c,
+ apps/snmpvacm.c, apps/snmpnetstat/Makefile.in,
+ local/mib2c, man/snmpcmd.1, mibs/RMON-MIB.txt,
+ mibs/UCD-SNMP-MIB.txt, perl/SNMP/SNMP.pm,
+ snmplib/int64.c, snmplib/parse.c, snmplib/snmp_api.c
+:
+
+ Merge from V4-2-patches: merge 1->2
+
+2001-01-30 17:13 hardaker
+
+ * agent/mibgroup/ucd-snmp/: disk.c (V4-2-patches.1), disk.c:
+
+ Applied patch #103414: fix disk info for block sizes other than 1024.
+
+2001-01-30 13:28 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ use snmp_enum's properly (strdup() the strings first)
+
+2001-01-30 13:28 hardaker
+
+ * snmplib/: snmp_enum.c, snmp_enum.h:
+
+ proper constness for some of the function arguments.
+
+2001-01-30 13:27 hardaker
+
+ * snmplib/read_config.c:
+
+ fix bug I just introduced (returning proper saveto pointer)
+
+2001-01-30 13:17 hardaker
+
+ * local/tkmib:
+
+ - snmpsets are supported
+ - A new "set" button has been added to perform sets on an oid.
+ - All writable objects in a table are now buttons that bring up the
+ set window with the current value instated.
+ - All writable objects in the output of snmp{get,walk,getnext}
+ buttons are displayed as blue and are clickable to change their
+ values.
+ - settings configured via the options menu can now be saved.
+ - use Getopt::Std now.
+ - supports most of the important snmpcmd(1) flags for session setup.
+
+2001-01-30 13:12 hardaker
+
+ * agent/mibgroup/disman/: event-mib.h,
+ mteTriggerBooleanTable.c, mteTriggerBooleanTable.h,
+ mteTriggerDeltaTable.c, mteTriggerDeltaTable.h,
+ mteTriggerExistenceTable.c, mteTriggerExistenceTable.h,
+ mteTriggerTable.c, mteTriggerTable.h,
+ mteTriggerThresholdTable.c, mteTriggerThresholdTable.h:
+
+ Initial (not-complete) implementation of the DISMAN-EVENT-MIB:
+ - Implements all 3 tests (boolean, threshold and existence).
+ - not rigorously tested.
+ - Currently only supports querying the local agent
+ (mteTriggerTargetTag must be '').
+ - Currently only supports sending traps and the mteObjectsTable is
+ not implemented (my next todo item)
+ - Only the default traps are sent. The mteEvent* objects haven't
+ been implemented (no self-defined traps/sets).
+ - no easy to use configuration yet (soon).
+ - configure with --with-mib-modules=disman/event-mib
+
+2001-01-30 13:03 hardaker
+
+ * snmplib/read_config.c:
+
+ Use memcpy instead of sprintf for strings that may not be null terminated.
+
+2001-01-30 12:58 hardaker
+
+ * agent/: snmp_agent.c, snmp_agent.h:
+
+ Implemented get_current_agent_session() and set_current_agent_session():
+ - These allow a mib module to retrieve the current
+ agent_snmp_session pointer for the current transaction.
+ - This should probably done differently later when we change the mib
+ module api.
+ - This will completely fail to work properly in a multi-threaded
+ agent (which we currently don't support anyway).
+
+2001-01-29 11:58 hardaker
+
+ * snmplib/callback.c:
+
+ debugging statement at initialization time.
+
+2001-01-29 11:58 hardaker
+
+ * snmplib/read_config.c:
+
+ properly malloc a 1 byte, NULL character string for "" read strings.
+
+2001-01-29 11:54 hardaker
+
+ * agent/mibgroup/: header_complex.c, header_complex.h:
+
+ data seperation and new functions:
+ header_complex_get_from_oid()
+ header_complex_add_data_by_oid()
+
+2001-01-12 08:22 hardaker
+
+ * mibs/DISMAN-EVENT-MIB.txt:
+
+ - DISMAN-EVENT-MIB added to mib repository. (Or, guess what I did during a 6 hour plane flight?)
+
+2001-01-12 08:16 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ support bit strings
+
+2001-01-12 08:00 hardaker
+
+ * snmplib/: snmp_api.c (V4-2-patches.5), snmp_api.c:
+
+ - bit_string fixes
+ - make snmp_add_var call snmp_parse_oid() instead of read_objid().
+
+2001-01-12 07:58 hardaker
+
+ * snmplib/read_config.c:
+
+ - new data types supported for read_config routines: unsigned, bit_str.
+
+2001-01-12 07:56 hardaker
+
+ * snmplib/: asn1.c (V4-2-patches.3), asn1.c:
+
+ comment out really odd (and broken) check from asn_bitstring_check???
+
+2001-01-12 07:53 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ move config string initializer above subagent check so its known even
+ if not used.
+
+2001-01-12 07:51 hardaker
+
+ * local/: mib2c.storage.conf, mib2c.vartypes.conf
+ (V4-2-patches.[1,1]), mib2c.storage.conf,
+ mib2c.vartypes.conf:
+
+ - misc bug fixes.
+ - new data types (uint32, unsigned, bits).
+
+2001-01-09 17:08 hardaker
+
+ * agent/: agent_registry.c, agent_registry.h,
+ ds_agent.h, var_struct.h, mibgroup/mibincl.h,
+ mibgroup/agentx/client.c, mibgroup/agentx/master_admin.c
+, mibgroup/agentx/master_request.c,
+ mibgroup/agentx/subagent.c, mibgroup/agentx/subagent.h
+:
+
+ SubAgent ping support:
+ - agentxPingInterval specifies SECONDS between when the subagent
+ tries to ping the master agent.
+ - if no response is received, it tries to reconnect.
+ - failing that it tries every SECONDS again till it succeeds.
+ - re-registers its oid's based on the current subtree list.
+ - may need some thought. Assumes *all* need to be re-registered.
+ - needs to re-register sysortable entries too, but doesn't.
+ - currently seg-faults on about the 2-4th time or so. Not sure why.
+ - Should make Dave smile or cringe or giggle, not sure which.
+
+2001-01-09 17:02 hardaker
+
+ * snmplib/: callback.c, callback.h:
+
+ Allow deregistering of callbacks
+
+2001-01-09 06:20 hardaker
+
+ * win32/snmpnetstat/: snmpnetstat.dsp (V4-2-patches.1),
+ snmpnetstat.dsp:
+
+ added getopt.c to list
+
+2001-01-04 16:44 hardaker
+
+ * snmplib/: snmp_enum.c, snmp_enum.h:
+
+ - generic snmp enum list support. Not used anywhere (yet).
+
+2001-01-04 16:43 hardaker
+
+ * configure, configure.in, agent/agent_callbacks.h
+, agent/agent_trap.c, agent/agent_trap.h,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/notification/snmpNotifyTable.h,
+ apps/snmpnetstat/main.c, snmplib/Makefile.in,
+ snmplib/asn1.c, snmplib/callback.c,
+ snmplib/callback.h, snmplib/mib.c,
+ snmplib/snmp_api.c, snmplib/snmp_logging.c,
+ testing/tests/T053agentv1trap, testing/tests/T054agentv2ctrap
+, testing/tests/T055agentv1mintrap,
+ testing/tests/T056agentv2cmintrap,
+ testing/tests/T113agentxtrap:
+
+ - merged patches from V4-2-patches branch to main branch.
+
+2001-01-04 10:37 hardaker
+
+ * man/snmp.conf.5.def, man/snmpcmd.1, snmplib/mib.c
+:
+
+ - added new printHexText snmp.conf token.
+ - documented -OT, and the token.
+
+2001-01-04 10:27 hardaker
+
+ * snmplib/: default_store.h, mib.c:
+
+ Patch #103091 applied:
+ - Added -OT option to view hex strings with text in them.
+
+2000-12-27 16:47 hardaker
+
+ * testing/tests/T055agentv1mintrap:
+
+ file T055agentv1mintrap was initially added on branch V4-2-patches.
+
+2000-12-27 16:47 hardaker
+
+ * testing/tests/T056agentv2cmintrap:
+
+ file T056agentv2cmintrap was initially added on branch V4-2-patches.
+
+2000-12-22 07:02 hardaker
+
+ * snmplib/vacm.c:
+
+ fix view processing to watch for length prefix. The length prefix
+ really really shouldn't be stored directly in the oid. Niels?
+
+2000-12-19 07:22 hardaker
+
+ * snmplib/snmpv3.c:
+
+ make init_snmpv3() deal with a NULL argument properly.
+
+2000-12-18 14:37 hardaker
+
+ * local/.cvsignore:
+
+ - (.cvsignore): remove passtest from the .cvsignore file (bug #12694)
+
+2000-12-18 10:45 marz
+
+ * perl/SNMP/: README, SNMP.pm:
+
+ minor doc fix
+
+2000-12-14 13:46 nba
+
+ * snmplib/system.c:
+
+ - system.c: fix uptime for 64-bit Solaris
+
+2000-12-14 13:45 nba
+
+ * agent/mibgroup/ucd-snmp/dlmod.c:
+
+ - dlmod.c: fix stupid spelling error
+
+2000-12-13 21:52 nba
+
+ * agent/mibgroup/ucd-snmp/dlmod.c:
+
+ - dlmod.c: fix confusion between int, size_t, long for 64-bit compiles.
+
+2000-12-13 08:40 hardaker
+
+ * man/Makefile.in:
+
+ - (Makefile.in): add snmpconf.1
+
+2000-12-08 14:49 nba
+
+ * agent/mibgroup/mibII/vacm_vars.c, snmplib/vacm.c:
+
+ - vacm_vars.c, vacm.c: indexing of vacmViewTreeFamilyEntry was hosed, assuming
+ that the Subtree index had an IMPLIED attribute.
+
+2000-12-08 14:46 nba
+
+ * agent/mibgroup/host/: hr_filesys.c, hr_partition.c:
+
+ - hr_filesys.c, hr_partition.c: fix some zero index values.
+
+2000-12-08 14:43 nba
+
+ * agent/snmp_vars.c:
+
+ - snmp_vars.c: fix returns of zeroDotZero (such as ifSpecific)
+
+2000-12-08 14:38 nba
+
+ * agent/agent_trap.c:
+
+ - agent_trapd.c: security model values are not the same is snmp version values
+
+2000-12-06 14:45 nba
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - interfaces.c: Linux kernel 2.0.x has no ARPHRD_HIPPI
+
+2000-12-05 07:00 hardaker
+
+ * local/Makefile.in:
+
+ - (Makefile.in): Fix rsnmp's /usr/local hardcoded path.
+
+2000-12-04 17:03 hardaker
+
+ * testing/tests/T112agentxsetfail:
+
+ - (T112agentxsetfail): fix
+
+2000-12-04 16:33 hardaker
+
+ * README, sedscript.in, version.h:
+
+ - (version.h sedscript.in): version tag ( 4.2 )
+
+2000-12-04 16:30 hardaker
+
+ * ChangeLog:
+
+ - (ChangeLog): update.
+
+2000-12-04 15:30 hardaker
+
+ * NEWS, README:
+
+ - (NEWS, README): updates.
+
+2000-12-04 14:48 marz
+
+ * perl/SNMP/: Makefile.PL, SNMP.xs, t/mibload.t
+, t/startagent.pl:
+
+ ensure mibload.t uses correct MIBDIR for testing
+
+2000-12-04 11:05 hardaker
+
+ * AGENT.txt, FAQ, README:
+
+ - (AGENT.txt, FAQ, README): convert url's to www.netsnmp.org.
+
+2000-12-04 08:45 hardaker
+
+ * NEWS:
+
+ - (NEWS): agentx note changes.
+
+2000-12-03 07:29 nba
+
+ * man/snmptrapd.8, apps/snmptrapd_log.c:
+
+ - snmptrapd_log.c: fox missing leading zeroes for %.2d like formats.
+ Add an alternate format for up-time displays.
+
+2000-12-02 18:22 marz
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs, t/bulkwalk.t,
+ t/notify.t, t/session.t:
+
+ found the uninitialized data bug...must have been in there dormant for a while, other test fixes - good to go!
+
+2000-12-01 16:36 hardaker
+
+ * agent/snmpd.c:
+
+ - (agent/snmpd.c): reference sourceforge.
+
+2000-12-01 16:35 hardaker
+
+ * AGENT.txt:
+
+ - (AGENT.txt): reference sourceforge.
+
+2000-12-01 16:34 hardaker
+
+ * TODO:
+
+ - (TODO): reference net-snmp-coders.
+
+2000-12-01 16:34 hardaker
+
+ * README:
+
+ - (README): update.
+
+2000-12-01 16:33 hardaker
+
+ * bug-report, agent/mibgroup/versiontag:
+
+ - (bug-report, agent/mibgroup/versiontag): remove the bug report script.
+
+2000-12-01 16:31 hardaker
+
+ * PORTING:
+
+ - (PORTING): reference sourceforge.
+
+2000-12-01 16:23 hardaker
+
+ * man/snmptrapd.conf.5.def:
+
+ - (man/snmptrapd.conf.5.def): mention the fact that snmpv3 traps are
+ the same as snmpv2 traps.
+
+2000-12-01 16:23 hardaker
+
+ * NEWS:
+
+ - (NEWS): update.
+
+2000-12-01 15:31 hardaker
+
+ * README:
+
+ - (README): update.
+
+2000-12-01 15:16 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def): update for proxy support.
+
+2000-12-01 14:36 hardaker
+
+ * FAQ:
+
+ - (FAQ): update a few things.
+
+2000-12-01 14:28 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: diagnose wrong quoting in indices
+
+2000-12-01 14:23 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: add RFC-1213 as an aliase for RFC1213-MIB (used in many mibs)
+
+2000-12-01 14:19 nba
+
+ * agent/mibgroup/smux/smux.c:
+
+ - smux.c: reformat some debug messages for readability
+
+2000-12-01 14:17 nba
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - interfaces.c: fix ifType values for Linux
+
+2000-12-01 14:14 nba
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - subagent.c: supply a missing return value
+
+2000-12-01 10:04 hardaker
+
+ * local/snmpconf:
+
+ - (snmpconf): quote things with spaces in them.
+
+2000-12-01 09:49 hardaker
+
+ * man/snmpconf.1:
+
+ - (snmpconf.1): quick man page for snmpconf.
+
+2000-12-01 09:14 hardaker
+
+ * snmplib/parse.c:
+
+ - (snmplib/parse.c): change no-parent log message into a warning.
+
+2000-12-01 09:11 hardaker
+
+ * agent/mibgroup/agentx/README.agentx:
+
+ - (agent/mibgroup/agentx/README.agentx): update from Dave.
+
+2000-12-01 09:10 hardaker
+
+ * FAQ:
+
+ - (FAQ): update from Dave.
+
+2000-12-01 07:59 hardaker
+
+ * agent/agent_trap.c:
+
+ - (agent/agent_trap.c): Patch from Dave Shield:
+ - support v2->v1 trap conversion.
+
+2000-12-01 07:56 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): typo.
+
+2000-12-01 07:42 marz
+
+ * perl/SNMP/Makefile.PL, perl/SNMP/SNMP.xs,
+ perl/SNMP/t/notify.t, snmplib/mib.c:
+
+ additional fixes to support targetted builds of perl/SNMP using -NET-SNMP-PATH (and white space removal as my emacs kindly does that for me?)
+
+2000-11-30 14:06 nba
+
+ * snmplib/: getopt.h, snmp_parse_args.h:
+
+ - getopt.h, snmp_parse_args.h: extern "C" bracketing
+
+2000-11-30 14:04 nba
+
+ * man/snmpd.conf.5.def:
+
+ - snmpd.conf.5.def: fix formatting of smuxpeer token
+
+2000-11-30 10:31 hardaker
+
+ * FAQ:
+
+ - (FAQ): Update from Dave.
+
+2000-11-30 10:18 hardaker
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - (master_request.c): Patch from Dave Shield to fix bad sets for agentx.
+
+2000-11-30 09:19 hardaker
+
+ * ov/README:
+
+ - (ov/README): minor corrections, probably still incorrect.
+
+2000-11-30 09:18 hardaker
+
+ * local/: Makefile.in, snmpconf:
+
+ - (local/Makefile.in, snmpconf, acl, basic_setup, monitor, operation,
+ system, trapsinks):
+ - grouping support.
+ - sort-of-quiet output support.
+ - operation mode support (setting user, group, ports...)
+
+2000-11-30 09:13 hardaker
+
+ * snmplib/read_config.c:
+
+ - (snmplib/read_config.c): save a warning header at the top of the
+ persistent data file.
+
+2000-11-30 09:11 hardaker
+
+ * agent/mibgroup/tunnel/tunnel.c:
+
+ - (agent/mibgroup/tunnel/tunnel.c): Cleanup patch from Frank Strauss.
+
+2000-11-30 09:10 hardaker
+
+ * agent/snmpd.c:
+
+ - (agent/snmpd.c): set DS_AGENT_NO_ROOT_ACCESS in -H help output.
+
+2000-11-30 09:08 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): mention the TUNNEL-MIB support.
+
+2000-11-29 18:21 slif
+
+ * README:
+
+ Update e-mail address for Slifcak
+
+2000-11-29 11:34 marz
+
+ * configure:
+
+ fixed order of function checking so that vsnprintf is not found in libdb (BSD db) by mistake
+
+2000-11-29 05:18 marz
+
+ * perl/SNMP/: Makefile.PL, README:
+
+ partial submit to get perl/SNMP tests to pass and update the docs somewhat - still getting cores in notify.t. had to change create_user_from_session to update an existing user incase 2 sessions are started with the same user
+
+2000-11-28 18:00 marz
+
+ * perl/SNMP/Makefile.PL, perl/SNMP/README,
+ perl/SNMP/SNMP.pm, perl/SNMP/SNMP.xs,
+ perl/SNMP/t/async.t, perl/SNMP/t/bulkwalk.t,
+ perl/SNMP/t/mib.t, perl/SNMP/t/notify.t,
+ perl/SNMP/t/session.t, perl/SNMP/t/startagent.pl,
+ snmplib/snmp_api.c, snmplib/snmpusm.c,
+ snmplib/snmpv3.c:
+
+ partial submit to get perl/SNMP tests to pass and update the docs somewhat - still getting cores in notify.t. had to change create_user_from_session to update an existing user incase 2 sessions are started with the same user
+
+2000-11-27 14:36 hardaker
+
+ * local/snmpconf:
+
+ - (local/snmpconf):
+ - add support for "groups" of items.
+ - don't use IO::Dir, as its not in the standard perl module distributions.
+
+2000-11-27 14:34 hardaker
+
+ * agent/mibgroup/ucd-snmp/dlmod.h:
+
+ - (agent/mibgroup/ucd-snmp/dlmod.h): remove unneeded variable reference.
+
+2000-11-27 14:33 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (agent/snmp_agent.c): Patch from John Naylon:
+ - fix auto-set support for the agent (and plug a memory leak).
+
+2000-11-27 13:42 nba
+
+ * man/snmp.conf.5.def:
+
+ - snmp.conf.5.def: document tokens extendedIndex and noRangeCheck
+
+2000-11-27 13:41 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: fix a C++ style comment
+
+2000-11-24 15:14 nba
+
+ * agent/mibgroup/ucd-snmp/: memory_freebsd2.c,
+ vmstat_netbsd1.c:
+
+ - memory_freebsd2.c, vmstat_netbsd1.c: minor fixes for NetBSD 1.5, OPenBSD 2.6
+
+2000-11-22 13:48 hardaker
+
+ * agent/mibgroup/ucd-snmp/dlmod.c:
+
+ - (mibgroup/ucd-snmp/dlmod.c): Patch from Sean Harding:
+ - don't export an internal variable.
+
+2000-11-21 15:17 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: fix parsing of oid like 99.13.\"guf\"8
+
+2000-11-19 13:03 nba
+
+ * perl/SNMP/SNMP.xs, local/mib2c.vartypes.conf:
+
+ - SNMP.xs, mib2c.vartypes.conf: The recent specialisation of the Integer
+ types in the parser created problems for the perl module and in turn
+ for mib2c. Sorry for not catching this before pre2:-(
+
+2000-11-19 12:58 nba
+
+ * Makefile.in, Makefile.top, configure,
+ configure.in, agent/Makefile.in, apps/Makefile.in
+, apps/snmptrap.c, apps/snmpnetstat/Makefile.in
+, apps/snmpnetstat/main.c, snmplib/parse.c:
+
+ - fixes to ./configure --with-defaults --enable-mini-agent; make install
+ and run the tools under cygwin. Haven't tried the agent yet:-)
+
+2000-11-18 07:14 hardaker
+
+ * FAQ, README, bug-report, sedscript.in
+, version.h:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.2.pre2 )
+
+2000-11-18 07:12 hardaker
+
+ * testing/tests/T049snmpv3inform:
+
+ - (T049snmpv3inform): v3 inform test added.
+
+2000-11-17 11:01 nba
+
+ * snmplib/: mib.c, snmp_api.c:
+
+ - mib.c, snmp_api.c: better error messages for bad snmpset calls and bad
+ indices. Also fix a bug with quoted indices.
+
+2000-11-17 10:32 hardaker
+
+ * testing/tests/T050snmpv3trap:
+
+ - (tests/T050snmpv3trap): test for snmpv3 traps.
+
+2000-11-17 10:30 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): fix cases where the format strings are specified.
+
+2000-11-17 10:26 nba
+
+ * mibs/IANAifType-MIB.txt:
+
+ - IANAifType-MIB.txt: update from IANA
+
+2000-11-17 08:32 hardaker
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - (master_request.c): Patch from Dave Shield:
+ - fix memory leaks.
+ - fix agentx problems with bad sets.
+
+2000-11-16 17:55 hardaker
+
+ * snmplib/snmpv3.c:
+
+ - (snmplib/snmpv3.c): added a space in a debugging output statement.
+
+2000-11-16 17:54 hardaker
+
+ * snmplib/read_config.c:
+
+ - (snmplib/read_config.c): simple debugging statement added.
+
+2000-11-16 17:54 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): set DS_LIB_APPTYPE if it hasn't been set yet.
+
+2000-11-16 17:52 hardaker
+
+ * testing/eval_tools.sh:
+
+ - (testing/eval_tools.sh): add CONFIGTRAPD.
+
+2000-11-16 17:50 hardaker
+
+ * snmplib/mib.c, testing/tests/T112agentxsetfail,
+ testing/tests/T122proxysetfail:
+
+ - (snmplib/mib.c, testing/tests/T112agentxsetfail,
+ testing/tests/T122proxysetfail):
+ - support -Ir for "dont check range/type values" (letter r subject to debate).
+
+2000-11-16 17:25 hardaker
+
+ * snmplib/callback.c:
+
+ - (callback.c): better debugging output to display a callback count when done.
+
+2000-11-16 16:52 hardaker
+
+ * testing/tests/T113agentxtrap:
+
+ - (T113agentxtrap): A new test to test trap support from agentx subagents.
+
+2000-11-16 16:50 hardaker
+
+ * testing/tests/T058agentauthtrap:
+
+ - (T058agentauthtrap): sleep some and only perform one get request.
+
+2000-11-16 16:49 hardaker
+
+ * testing/tests/T054agentv2ctrap:
+
+ - (T054agentv2ctrap): sleep a bit and only send one snmp set request.
+
+2000-11-16 15:47 nba
+
+ * snmplib/getopt.c:
+
+ - getopt.c: quell compiler warnings
+
+2000-11-16 15:31 nba
+
+ * snmplib/: parse.c, mib.c, parse.h,
+ snmp_api.c:
+
+ - parse.[ch], mib.c, snmp_api.c: rename TYPE_UINTEGER32 back to TYPE_UINTEGER
+
+2000-11-16 15:16 nba
+
+ * apps/snmptrapd.c, man/snmptrapd.conf.5.def:
+
+ - snmptrapd.c, snmptrapd.conf: new config directives format1 and format2 to
+ set log formats for TRAP1 and TRAP2 pdus.
+
+2000-11-16 13:50 nba
+
+ * snmplib/snmp_api.c:
+
+ - snmp_api.c: add functionality to check value types in addition to ranges
+ for snmpset and snmptrap.
+
+2000-11-16 13:47 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: Fix DEFVAL parsing for OBJECT IDENTIFIER or BITS values
+ (i.e. DEFVAL { { 0 0 } } etc)
+
+2000-11-16 11:39 hardaker
+
+ * testing/tests/T058agentauthtrap:
+
+ - (T058agentauthtrap): add a greater timeout to the get request.
+
+2000-11-16 11:35 hardaker
+
+ * agent/mibgroup/examples/example.c:
+
+ - (example.c):
+ - send a v2c trap using its own data, not the system_mib's.
+ - more debugging statements.
+
+2000-11-16 11:34 hardaker
+
+ * testing/tests/: T053agentv1trap, T054agentv2ctrap,
+ T058agentauthtrap:
+
+ - (T053agentv1trap, T054agentv2ctrap, T058agentauthtrap):
+ - new tests for traps sent by the agent.
+
+2000-11-16 09:56 hardaker
+
+ * agent/mibgroup/target/target.c:
+
+ - (target.c): Don't delete READONLY trap sessions.
+
+2000-11-15 16:37 hardaker
+
+ * testing/tests/T052snmpv2cinform:
+
+ - (testing/tests/T052snmpv2cinform): test inform sending/receiving.
+
+2000-11-15 16:37 hardaker
+
+ * apps/snmptrap.c, man/snmptrap.1:
+
+ - (apps/snmptrap.c, man/snmptrap.1): support -Ci for sending informs.
+
+2000-11-15 15:48 hardaker
+
+ * apps/snmptrapd_log.c:
+
+ - (snmptrapd_log.c): use SNMP_MAXBUF instead of a local length definition.
+
+2000-11-15 14:18 nba
+
+ * local/Makefile.in:
+
+ - Makefile.in: fix make'ing in remote directory
+
+2000-11-15 14:11 nba
+
+ * apps/snmpnetstat/main.c:
+
+ - main.c: update to use getopt for argument parsing.
+
+2000-11-15 14:10 nba
+
+ * agent/snmp_agent.c:
+
+ - snmp_agent.c: fix a confusing indentation.
+
+2000-11-15 14:09 nba
+
+ * agent/agent_trap.c:
+
+ - agent_trap.c: make sure community is \0-terminated in targetParamsTable
+
+2000-11-15 14:03 nba
+
+ * apps/snmptrapd_log.c:
+
+ - snmptrapd_log: fix a buffer that is way too short for a trap with just a
+ single parameter. Fix a bad limit test in str_append.
+
+2000-11-15 14:00 nba
+
+ * apps/snmptranslate.c:
+
+ - snmptranslate.c: fix a stupid perror for snmp_perror
+
+2000-11-15 13:58 nba
+
+ * snmplib/: mib.c, parse.c, parse.h:
+
+ - parse.[ch], mib.c: enhance the parser to distinguish INTEGER, Integer32,
+ Unsigned32, UInteger32.
+
+2000-11-15 13:55 nba
+
+ * snmplib/snmp_api.c:
+
+ snmp_api.c: remove an unused variable
+
+2000-11-15 07:49 hardaker
+
+ * agent/: snmp_vars.c, snmp_vars.h,
+ mibgroup/agentx/subagent.c, mibgroup/agentx/subagent.h
+:
+
+ - (snmp_vars.c, subagent.c): Patch from Lawrence Greenfield:
+ - Don't make init_agent()/subagent_pre_init() exit but return an
+ error condition instead.
+
+2000-11-12 08:08 hardaker
+
+ * agent/mibgroup/examples/ucdDemoPublic.c:
+
+ - (ucdDemoPublic.c): add NULL to end of demo string and check for len=0.
+
+2000-11-12 04:45 nba
+
+ * snmplib/snmp_api.c:
+
+ snmp_api.c: Make sure the noRangeCheck token is a boolean
+
+2000-11-12 04:41 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: give the tree-top a name to protect error message when looking up .foo
+
+2000-11-12 04:36 nba
+
+ * apps/snmptranslate.c:
+
+ - snmptranslate.c: use config_perror for a better error message
+
+2000-11-12 04:34 nba
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ - proxy.c: remove some unused variables.
+
+2000-11-12 04:33 nba
+
+ * agent/agent_trap.c:
+
+ -agent_traps.c: Move a conditionally used variable
+
+2000-11-12 04:32 nba
+
+ * agent/agent_read_config.c:
+
+ Fix a bogus #ifdef
+
+2000-11-10 09:18 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): apply patch #102224 from jbpn for cross-compiling.
+
+2000-11-10 08:56 hardaker
+
+ * testing/: TESTCONF.sh, eval_tools.sh,
+ tests/T051snmpv2ctrap:
+
+ - (testing/TESTCONF.sh, testing/eval_tools.sh, testing/tests/T051snmpv2ctrap):
+ - first pass at a testing script to test trap functionality.
+ - which even uncovered a bug.
+
+2000-11-10 08:55 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (apps/snmptrapd.c):
+ - fork if file logging or syslogging, but not printing.
+ - don't close open file descriptors. There shouldn't be any.
+
+2000-11-10 08:53 hardaker
+
+ * apps/snmptrapd_log.c:
+
+ - (apps/snmptrapd_log.c): properly null terminate log strings.
+
+2000-11-09 16:40 hardaker
+
+ * configure.in:
+
+ - (configure.in): attempt to implement a --with-rsaref flag.
+
+2000-11-09 15:32 hardaker
+
+ * README:
+
+ - (README, perl/SNMP/README): mention Karl.
+
+2000-11-09 15:31 hardaker
+
+ * NEWS, perl/SNMP/README:
+
+ - (NEWS, perl/SNMP/README): mention Karl.
+
+2000-11-09 14:56 hardaker
+
+ * perl/SNMP/: examples/bulkwalk.pl, t/bulkwalk.t:
+
+ - (examples/bulkwalk.pl, t/bulkwalk.t): patch from Karl Schilke:
+ - support bulk requests.
+
+2000-11-09 14:53 hardaker
+
+ * perl/SNMP/: MANIFEST, README, SNMP.pm,
+ SNMP.xs:
+
+ - (MANIFEST, README, SNMP.pm, SNMP.xs): patch from Karl Schilke:
+ - support bulk requests.
+
+2000-11-08 23:33 hardaker
+
+ * snmplib/read_config.c:
+
+ - (read_config.c): fix -H output.
+
+2000-11-08 23:02 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): make agent_check_and_process() call run_alarms().
+
+2000-11-08 22:45 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ - (diskio.c): fix OID.
+
+2000-11-08 17:06 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ - (SNMP.pm, SNMP.xs): patch from Mark Cavage for default value support.
+
+2000-11-08 17:03 hardaker
+
+ * snmplib/: mib.c, parse.c, parse.h:
+
+ - (mib.c, parse.c, parse.h): minimal DEFVAL parsing support.
+
+2000-11-08 16:20 hardaker
+
+ * config.h.in, configure:
+
+ - (config.h.in, configure): check for librsaref, etc, if needed.
+
+2000-11-07 15:15 hardaker
+
+ * config.h.in, configure, configure.in,
+ agent/agent_read_config.c, agent/snmpd.c:
+
+ - (config.h.in, configure, configure.in, agent/agent_read_config.c,
+ agent/snmpd.c):
+ - uid/gid changes.
+
+2000-11-07 15:10 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ - (SNMP.xs): fix TYPE_NOTIF -> TYPE_NOTIFTYPE.
+
+2000-11-07 11:30 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ - (SNMP/SNMP.pm, SNMP/SNMP.xs): Patch from Joe Clarke:
+ - implement best-guess (-Ib) parsing.
+ - access to trap varbinds.
+ - range access.
+
+2000-11-07 11:00 hardaker
+
+ * perl/SNMP/.cvsignore:
+
+ - (.cvsignore): ignore build created files.
+
+2000-11-07 10:58 hardaker
+
+ * perl/SNMP/: README, SNMP.pm, SNMP.xs:
+
+ - (README, SNMP.pm, SNMP.xs): patch from Karl Schilke:
+ - implement a finish() call.
+
+2000-11-07 10:54 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ - (SNMP/SNMP.xs): patch from Karl Schilke:
+ - multiple callback patch for perl/SNMP/SNMP.xs.
+
+2000-11-07 10:48 hardaker
+
+ * snmplib/read_config.c:
+
+ - (read_config.c): log an error message if the optional config file DNE.
+
+2000-11-07 10:41 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ - (SNMP.pm): fix iid parsing with respect to mib nodes with a - in it.
+
+2000-11-07 10:13 hardaker
+
+ * agent/agent_read_config.c, agent/ds_agent.h,
+ agent/snmpd.c, man/snmpd.1.def, man/snmpd.conf.5.def
+:
+
+ - (agent/agent_read_config.c, agent/ds_agent.h, agent/snmpd.c,
+ man/snmpd.1.def, man/snmpd.conf.5.def): Patch from Harrie Hazewinkel:
+ - implement uid/gid changes after startup for the agent.
+
+2000-11-07 08:33 hardaker
+
+ * agent/mibgroup/target/target.c:
+
+ - (target.c): a better sanity check for session deletion.
+
+2000-11-07 07:24 hardaker
+
+ * agent/mibgroup/target/target.c:
+
+ - (target.c): Patch from Dave to sanity check param->updateTime.
+
+2000-11-06 11:00 hardaker
+
+ * snmplib/md5.c:
+
+ - (md5.c): check to see that MDsign() data lies on a 32 byte boundry.
+ - its possible some compilers will choke on this hack.
+ - fixes bug #12175.
+
+2000-11-03 17:54 hardaker
+
+ * local/mib2c:
+
+ - (mib2c): sort OIDs properly.
+
+2000-11-03 16:44 hardaker
+
+ * agent/mibgroup/examples/example.c:
+
+ - (example.c): Patch from Harrie Hazewinkel:
+ - fix mib registrations for duplicate OIDs being used for the trap examples.
+
+2000-11-03 15:31 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): second patch from dougwarz in bug #117273 to fix smux problems.
+ - Um, applied correctly this time (I hope).
+
+2000-11-03 15:29 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): second patch from dougwarz in bug #117273 to fix smux problems.
+
+2000-11-02 22:19 nba
+
+ * agent/mibgroup/mibII/: interfaces.c, ip.c, ipAddr.c
+, tcpTable.c, udpTable.c:
+
+ Clean up some unused variables etc.
+
+2000-11-02 22:16 nba
+
+ * Makefile.in:
+
+ - Makefile.in: fix some $(srcdir) references when running outside source
+
+2000-11-02 22:15 nba
+
+ * apps/snmptrapd.c:
+
+ - snmptrapd.c: fix the format string for format_trap
+
+2000-11-02 22:14 nba
+
+ * man/Makefile.in:
+
+ - Makefile.in: remove some duplicates from file lists
+
+2000-11-02 22:12 nba
+
+ * man/snmpcmd.1:
+
+ Document the -OX output option
+
+2000-11-02 22:11 nba
+
+ * man/snmpd.conf.5.def:
+
+ Document the sysservices token
+
+2000-11-02 16:17 hardaker
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ - (agent/mibgroup/ucd_snmp.h): add ucd-snmp/proxy.
+
+2000-11-02 16:16 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ - (agent/mibgroup/versiontag): change cvs archive site and package name.
+
+2000-11-02 13:23 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ - (smux.c): Patch 102239 from dougwarz to fix a previously bad smux.c patch.
+
+2000-11-01 16:36 hardaker
+
+ * README, bug-report, sedscript.in, version.h
+, FAQ:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.2.pre1 )
+
+2000-11-01 16:14 hardaker
+
+ * testing/tests/: T120proxyget, T121proxyset,
+ T122proxysetfail:
+
+ - (T120proxyget, T121proxyset, T122proxysetfail): proxy test suite.
+
+2000-11-01 16:08 hardaker
+
+ * agent/mibgroup/ucd-snmp/: proxy.c, proxy.h:
+
+ - (agent/mibgroup/ucd-snmp/proxy.c, agent/mibgroup/ucd-snmp/proxy.h):
+ - minimal SET support for the proxy code.
+
+2000-11-01 10:22 hardaker
+
+ * testing/tests/T112agentxsetfail:
+
+ - (T112agentxsetfail): test for agentx sets that should fail properly.
+
+2000-10-31 14:30 nba
+
+ * agent/mibgroup/mibII/tcpTable.c:
+
+ - tcpTable.c: remove an unnescessary #include
+
+2000-10-31 14:28 nba
+
+ * agent/mibgroup/smux/smux.c:
+
+ - smux.c: fix wrong variable length
+
+2000-10-31 14:25 nba
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - protocol.c: fix some suspicious looking code
+
+2000-10-31 14:21 nba
+
+ * man/snmpd.conf.5.def:
+
+ - man/snmpd.conf: fix a typo
+
+2000-10-31 12:41 nba
+
+ * snmplib/default_store.h, snmplib/mib.c,
+ apps/snmptable.c:
+
+ - mib.c: add -OX output format, for just another way of printing indices
+
+2000-10-31 12:27 nba
+
+ * agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/interfaces.h, man/snmpd.conf.5.def
+:
+
+ - interface.c: add "interface" config for unguessable interface type/speed
+
+2000-10-31 12:25 nba
+
+ * apps/: snmpbulkget.c, snmpbulkwalk.c, snmpdelta.c
+, snmpdf.c, snmpget.c, snmpgetnext.c,
+ snmpset.c, snmpstatus.c, snmptable.c,
+ snmptrap.c, snmpusm.c, snmpvacm.c, snmpwalk.c
+:
+
+ - apps/*: make sure we report any errindex/errcode in the response
+
+2000-10-31 12:04 nba
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - protocol.c: clean up unused variables.
+
+2000-10-31 10:13 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ - (smux.c): patch #1 from bug #117273 applied to fix smux socket problems.
+
+2000-10-31 09:24 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ - (SNMP.xs): print counter64's as unsigned.
+
+2000-10-31 07:54 hardaker
+
+ * agent/: agent_trap.c, agent_trap.h,
+ mibgroup/agentx/subagent.c,
+ mibgroup/notification/snmpNotifyTable.c,
+ mibgroup/notification/snmpNotifyTable.h:
+
+ - (agent_trap.c, agent_trap.h, subagent.c, snmpNotifyTable.c,
+ snmpNotifyTable.h): Patch from Dave:
+ - fix notifications from agentx subagents.
+
+2000-10-30 22:03 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ - (smux.c): fix bug #119786: make smux reuse socket address.
+
+2000-10-30 21:42 hardaker
+
+ * testing/: eval_tools.sh, tests/T110agentxget,
+ tests/T111agentxset:
+
+ - (eval_tools.sh, tests/T110agentxget, tests/T111agentxset):
+ - fix bug #382
+ - fix agentx non-root tests to use -x /tmp/blah/agentx_socket.
+
+2000-10-30 13:45 hardaker
+
+ * man/snmpd.1.def:
+
+ - (snmpd.1.def): fix a typo pointed out by Chris Pepper.
+
+2000-10-30 11:46 hardaker
+
+ * testing/tests/T111agentxset:
+
+ - (tests/T111agentxset): test script for AgentX set support.
+
+2000-10-30 11:43 hardaker
+
+ * testing/tests/T110agentxget:
+
+ - (tests/T110agentxget): header changed to include the word GET.
+
+2000-10-30 11:13 nba
+
+ * agent/mibgroup/ucd_snmp.h, agent/mibgroup/ucd-snmp/dlmod.c
+, agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.h,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.h,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c,
+ mibs/UCD-SNMP-MIB.txt:
+
+ - ucd-snmp/vmstat_*, memory_freebsd2.c, dlmod.c: Make ssRawCpu objects Counters,
+ and add support for *BSD (including OpenBSD)
+
+2000-10-30 11:07 nba
+
+ * agent/agent_trap.c, agent/snmp_agent.c,
+ agent/mibgroup/header_complex.c,
+ agent/mibgroup/agentx/client.c,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/master_request.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/mibII/icmp.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/tcp.c,
+ agent/mibgroup/mibII/udp.c, snmplib/asn1.c,
+ snmplib/scapi.c, snmplib/snmpusm.c,
+ agent/mibgroup/notification/snmpNotifyFilterProfileTable.c,
+ agent/mibgroup/notification/snmpNotifyFilterTable.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/target/target.c:
+
+ - Clean up unused variables.
+
+2000-10-30 11:04 hardaker
+
+ * testing/tests/: T101agentx, T110agentxget:
+
+ - (testing/tests/T101agentx, testing/tests/T110agentxget):
+ - renamed the agentx test script.
+
+2000-10-30 11:03 hardaker
+
+ * testing/eval_tools.sh:
+
+ - (testing/eval_tools.sh): don't add -c CONFIGFILE if it doesn't exist.
+
+2000-10-30 10:39 hardaker
+
+ * agent/snmpd.c:
+
+ - (agent/snmpd.c): error when parsing -X for non-agentx builds.
+
+2000-10-27 11:29 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (apps/snmptrapd.c): add -o flag to log to a particular file.
+
+2000-10-27 10:41 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): use mkstemp if available.
+
+2000-10-27 10:40 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in): Search for mkstemp().
+
+2000-10-27 10:08 hardaker
+
+ * FAQ:
+
+ - (FAQ): update linux kernel list to include 2.2.
+
+2000-10-26 17:51 hardaker
+
+ * testing/eval_tools.sh:
+
+ - (eval_tools.sh): make SKIPIFNOT check the mib module list too.
+
+2000-10-26 17:48 hardaker
+
+ * testing/tests/T101agentx:
+
+ - (tests/T101agentx): AgentX subagent test for simple get retrieval.
+
+2000-10-25 17:44 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): Add -X option to snmpd to run as a subagent.
+
+2000-10-25 17:06 hardaker
+
+ * snmplib/read_config.c:
+
+ - (read_config.c): fix for cases whene debugging is always off.
+
+2000-10-17 15:30 hardaker
+
+ * config.h.in:
+
+ - (config.h.in): autoheader run
+
+2000-10-16 03:13 daves
+
+ * agent/mibgroup/agentx/master.c:
+
+ - (agentx/master.c): Specify the length of the (pseudo-)answer to a request.
+ This allows it to be cached correctly for multi-pass SET handling.
+
+2000-10-16 03:11 daves
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - (agentx/subagent.c): Don't overwrite saved mode information
+ This should help with (some of) the SET handling problems.
+
+2000-10-16 01:56 daves
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - (agentx/master_request.c): Don't free callback data structure.
+ This holds information that needs to persist across multi-pass requests.
+ I realise that this introduces a memory leak, but this isn't the
+ correct place to handle this.
+
+2000-10-12 14:52 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): add -I to the help output.
+
+2000-10-12 14:24 hardaker
+
+ * agent/dlmods/: Makefile.in, dlmod_mib.c, dlmod_mib.h
+, example.c, example.h:
+
+ - (agent/dlmods/*): remove obsolete versions
+
+2000-10-12 14:08 hardaker
+
+ * configure:
+
+ - (configure): update.
+
+2000-10-12 14:01 hardaker
+
+ * acconfig.h, config.h.in, configure.in:
+
+ - (acconfig.h, config.h.in, configure.in): Patch from Matt Braithwaite:
+ - udp configuration changes to check for misc structure definitions.
+
+2000-10-12 13:48 hardaker
+
+ * mibs/TUNNEL-MIB.txt:
+
+ - (TUNNEL-MIB.txt): TUNNEL-MIB definition.
+
+2000-10-12 13:48 hardaker
+
+ * agent/mibgroup/tunnel.h:
+
+ - (tunnel.h): config_add_mib(TUNNEL-MIB).
+
+2000-10-12 13:47 hardaker
+
+ * agent/mibgroup/: tunnel.h, tunnel/tunnel.c,
+ tunnel/tunnel.h:
+
+ - (tunnel.h, tunnel.c, tunnel.h): Patch from Frank Strauss:
+ - implement the TUNNEL-MIB.
+
+2000-10-10 14:33 mslifcak
+
+ * snmplib/parse.c:
+
+ Fix unlink_tree for "top level" tree nodes.
+
+2000-10-10 11:02 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): reverse library link ordering again...
+
+2000-10-10 09:03 mslifcak
+
+ * apps/snmptranslate.c:
+
+ Remove relative path to include system.h.
+
+2000-10-10 06:53 mslifcak
+
+ * snmplib/system.h:
+
+ Remove unneeded decl of vsnprintf without stdarg/varargs decl of va_list.
+
+2000-10-10 05:15 mslifcak
+
+ * config.sub:
+
+ Apply patch for DEC Alpha EV6, supplied by Shumon Huque<shuque@isc.upenn.edu>
+
+2000-10-09 17:06 mslifcak
+
+ * snmplib/mib.c:
+
+ patch to fix leading zero error introduced by changes for shutdown_mib.
+
+2000-10-09 15:51 hardaker
+
+ * agent/mibgroup/ucd-snmp/dlmod.c:
+
+ - (dlmod.c): minor debugging output additions.
+
+2000-10-09 15:51 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): move auto_nlist to libucdmibs.
+
+2000-10-09 11:43 hardaker
+
+ * FAQ, README:
+
+ - (FAQ, README): add new mirror.
+
+2000-10-09 10:26 mslifcak
+
+ * snmplib/: mib.c, parse.c, read_config.c,
+ snmp_api.c:
+
+ Move config- and store-related cleanup from shutdown_mib to snmp_shutdown.
+
+2000-10-09 02:36 daves
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (mibII/interfaces.c): Qualify an individual interface type test symbol
+ (Qn: should any/all of the others be qualified as well?)
+
+2000-10-06 08:56 mslifcak
+
+ * man/Makefile.in, man/default_store.3.bot,
+ man/default_store.3.top, man/mib_api.3,
+ man/shutdown_mib.3, snmplib/default_store.c,
+ snmplib/default_store.h, snmplib/mib.c,
+ snmplib/mib.h, snmplib/parse.c, snmplib/parse.h
+, snmplib/read_config.c, snmplib/read_config.h:
+
+ Support for shutdown_mib - clearing the MIB trees and configured registrations.
+
+2000-10-06 05:33 mslifcak
+
+ * snmplib/system.c:
+
+ Plug memory leak for ucd-supplied setenv on Win32 platform.
+
+2000-10-06 04:58 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ Remove unused variables.
+
+2000-10-05 23:45 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: fix silly bug in new oid parser, when leaving the tree and going
+ into sub-ids we know nothing about
+
+2000-10-05 16:03 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): Patch from Harrie Hazewinkel:
+ - fix library dependency order.
+
+2000-10-04 17:59 hardaker
+
+ * local/Makefile.in:
+
+ - (Makefile.in): install "extending" snmpconf file.
+
+2000-10-04 14:50 nba
+
+ * FAQ:
+
+ - FAQ: fix a confusion between "omit" and "include"
+
+2000-10-04 13:25 hardaker
+
+ * agent/mibgroup/ucd-snmp/pass_persist.c:
+
+ - (pass_persist.c): opaques in pass_persist.
+
+2000-10-04 10:35 hardaker
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ - (pass.c): support opaque return types.
+
+2000-10-04 07:15 mslifcak
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, snmplib/mib.c:
+
+ Fix parsing problem for -Pc option; reported by Christian Mautner.
+
+2000-10-04 06:52 mslifcak
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ qualify symbols for new i/f types.
+
+2000-10-04 06:51 mslifcak
+
+ * agent/mibgroup/examples/example.c:
+
+ Terminate list to compile (add a comma).
+
+2000-10-04 00:18 nba
+
+ * apps/snmptable.c:
+
+ - snmptable.c: index columnt (-Ci) width not properly computed when using
+ GETBULK
+
+2000-10-03 18:19 hardaker
+
+ * agent/: agent_registry.c, agent_registry.h, snmpd.c
+:
+
+ - (agent_registry.c, agent_registry.h, snmpd.c): Patch from John Naylon:
+ - add a passback argument to register_readfd() callbacks.
+
+2000-10-03 18:17 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): Patch from Harrie Hazewinkel:
+ - move auto_nlist.o/lo to libucdagent since some mib-modules need it.
+
+2000-10-03 18:07 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ - (smux.c): Patch from Jochen Friedrich:
+ - fix getnext requests to subagents.
+
+2000-10-03 17:24 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (interfaces.c): Patch from Frank Strauss:
+ - better iftype guessing.
+
+2000-10-03 16:52 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ - (smux.c): Patch from Doug Warzecha:
+ - fix oid parsing in traps.
+
+2000-10-03 16:23 hardaker
+
+ * agent/mibgroup/examples/: example.c, example.h:
+
+ - (example.c, example.h): example of coding a v2 trap from someone who
+ I have very sadly forgotten. I've been looking for that message for
+ a while to properly attribute this patch. Sigh.
+
+2000-10-03 16:21 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): Patch from Douglas Warzecha:
+ - snmpd returns wrong error index on SNMPv1 request (BUG#375).
+
+2000-10-03 09:12 mslifcak
+
+ * agent/agent_trap.c:
+
+ Fix null deref of ss->community, reported by Jim Pickering.
+
+2000-10-03 08:03 mslifcak
+
+ * apps/encode_keychange.c, apps/snmpvacm.c,
+ snmplib/parse.c, snmplib/read_config.c,
+ snmplib/snmp_logging.c, snmplib/snmpv3.c,
+ snmplib/snprintf.c, snmplib/vacm.c:
+
+ Casting to fix problems building with aCC
+ Thanks to Markku Laukkanen <pky@moremagic.com>
+
+2000-10-03 05:59 mslifcak
+
+ * agent/snmpd.c, apps/snmptrapd.c:
+
+ Remove chdir to undo fix for (BUG#298)
+
+2000-10-02 21:41 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: Escape " and \ in text strings.
+
+2000-10-02 21:39 nba
+
+ * snmplib/snmp_logging.c:
+
+ - snmp_logging.c: #include <netinet/in.h>
+
+2000-10-02 21:38 nba
+
+ * local/Makefile.in:
+
+ - Makefile.in: fix a missing $(srcdir) during make install of mib2c
+ configuration files
+
+2000-10-02 21:37 nba
+
+ * apps/snmpset.c:
+
+ - snmpset.c: Do a exit(2) for failure in setting the variable.
+
+2000-10-02 21:36 nba
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ - hr_swrun.c: add a safeguard for very long argument lists.
+
+2000-10-02 21:34 nba
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ - hr_disk.c: Add a name pattern that matches x86 IDE disks for Solaris.
+
+2000-10-02 21:33 nba
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - kernel_sunos5.c: make the buffer for SIOCGIFCONF dynamic.
+
+2000-10-02 11:41 hardaker
+
+ * snmplib/Makefile.in:
+
+ - (Makefile.in): install snmpusm.h.
+
+2000-10-02 10:48 hardaker
+
+ * local/snmpconf:
+
+ - (snmpconf):
+ - new options for installing created files.
+ - more comments in the code.
+ - allow reading a .conf directly to writing for auto-commenting .conf files.
+ - misc.
+
+2000-10-02 10:47 hardaker
+
+ * agent/: Makefile.in, mibgroup/Makefile.in:
+
+ - (agent/mibgroup/Makefile.in, agent/Makefile.in): make depend-less.
+
+2000-10-02 09:35 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): protect against 0 byte statP mallocs.
+
+2000-10-02 09:14 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (interfaces.c): Patch from Ted Rule:
+ - fix interfaces.c for variable length number formatting in /proc/net/dev.
+
+2000-10-01 16:40 mslifcak
+
+ * agent/snmpd.c, apps/snmptrapd.c:
+
+ Per Niels recommendation, chdir to PERSISTENT_DIRECTORY (re: bug #298)
+
+2000-09-30 08:57 mslifcak
+
+ * agent/mibgroup/ucd-snmp/dlmod.c:
+
+ Fix DEBUGMSGTL not found error for builds without dlmod support.
+ Thanks to simon@zid.tuwein.ac.at
+
+2000-09-29 14:35 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ snmplib/Makefile.in, testing/Makefile.in:
+
+ - (*/Makefile.in): make depend + .o -> .lo fixes.
+
+2000-09-29 14:27 hardaker
+
+ * makefileindepend.pl:
+
+ - (makefileindepend.pl): skip empty depend lines.
+
+2000-09-29 14:09 hardaker
+
+ * local/snmpconf:
+
+ - (snmpconf): drop duplicate lines from read in snmpd.conf files.
+
+2000-09-29 13:46 hardaker
+
+ * local/snmpconf:
+
+ - (snmpconf): sort unknown directives by filetype (whoops).
+
+2000-09-29 13:42 hardaker
+
+ * local/snmpconf:
+
+ - (snmpconf): print more information/comments to the screen.
+
+2000-09-29 11:31 hardaker
+
+ * agent/var_struct.h:
+
+ - (var_struct.h): increase registration name length to 32 from 16 (Bug #172)
+
+2000-09-29 11:12 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): incorrect val length passed to parse_unsigned_int (Bug #339).
+
+2000-09-29 11:01 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): fix Bug#353 for hostnames that look like "5w".
+ - don't interprete them as an ip-port.
+
+2000-09-29 10:39 hardaker
+
+ * snmplib/snmp_alarm.c:
+
+ - (snmp_alarm.c): Patch from jbpn@cambridgebroadband.com:
+ - There is a peculiarity in the snmp_alarm_unregister function in
+ snmplib/snmp_alarm.c which can cause a segmentation fault. (Bug #367)
+
+2000-09-29 10:34 hardaker
+
+ * agent/mibgroup/target/snmpTargetParamsEntry.c:
+
+ - (snmpTargetParamsEntry.c): Patch from John Naylon:
+ - fix use of NULL timestamp pointer in new row creation (Bug #346)
+
+2000-09-28 14:38 nba
+
+ * man/mib_api.3:
+
+ - mib_api.3: add a few functions to the header
+
+2000-09-28 14:14 nba
+
+ * apps/snmptrap.c:
+
+ - snmptrap.c: remove an extraneous snmp_free_pdu
+
+2000-09-28 14:13 nba
+
+ * man/: Makefile.in, add_mibdir.3,
+ add_module_replacement.3, get_module_node.3, init_mib.3
+, init_mib_internals.3, print_description.3,
+ print_mib.3, print_objid.3, print_value.3,
+ print_variable.3, read_all_mibs.3, read_mib.3,
+ read_module.3, read_module_node.3, read_objid.3,
+ snmp_set_mib_warnings.3, snmp_set_save_descriptions.3:
+
+ - man/: add man entries for many library functions (pointing to snmp_api.3)
+
+2000-09-28 11:09 mslifcak
+
+ * agent/mibgroup/mibII/udpTable.c:
+
+ remove second copy of sys/socket.h
+
+2000-09-27 12:59 hardaker
+
+ * agent/mibgroup/ucd-snmp/dlmod.h:
+
+ - (dlmod.h): add the UCD-DLMOD-MIB to the default load list.
+
+2000-09-27 12:55 hardaker
+
+ * config.h.in, configure, configure.in,
+ agent/mibgroup/ucd_snmp.h, agent/mibgroup/ucd-snmp/dlmod.c
+:
+
+ - (config.h.in, configure, configure.in, ucd_snmp.h, dlmod.c):
+ - include ucd-snmp/dlmod by default.
+ - build code only if dlopen is found.
+
+2000-09-27 08:31 hardaker
+
+ * agent/auto_nlist.c:
+
+ - (auto_nlist.c): Patch from Harrie Hazewinkel:
+ - don't print kernel based warning messages when -r, etc, is specified.
+
+2000-09-26 13:17 mslifcak
+
+ * win32/config.h:
+
+ For Win32 API: Declare strtoul, vsnprintf; Enable reverse BER encoding.
+
+2000-09-26 13:15 mslifcak
+
+ * snmplib/snmp_logging.c:
+
+ Include system.h (vsnprintf decl)
+
+2000-09-26 13:14 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ Fix unsigned comparison.
+
+2000-09-26 13:14 mslifcak
+
+ * snmplib/mib.c:
+
+ Fix unsigned comparisons.
+
+2000-09-26 13:13 mslifcak
+
+ * apps/snmptable.c:
+
+ Fix signed comparison; Remove unused var.
+
+2000-09-26 13:12 mslifcak
+
+ * apps/snmpdf.c:
+
+ Include getopt.h (optarg decl); Remove unused var.
+
+2000-09-26 13:11 mslifcak
+
+ * agent/mibgroup/util_funcs.c:
+
+ Match Initialise_Table args 3,4 declarations with definitions.
+
+2000-09-26 12:58 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (interfaces.c): make the adminstatus RONLY.
+
+2000-09-26 10:21 hardaker
+
+ * local/mib2c:
+
+ - (mib2c): chomp($1) is illegal.
+
+2000-09-26 03:04 mslifcak
+
+ * acconfig.h, config.h.in,
+ agent/mibgroup/util_funcs.c, win32/config.h:
+
+ Explicitly build path to CACHEFILE, as not all C compilers support "##".
+
+2000-09-25 16:56 mslifcak
+
+ * agent/snmpd.c:
+
+ chdir just before sending coldstart trap, to allow for paths to be
+ resolved.
+
+2000-09-25 09:35 mslifcak
+
+ * snmplib/snmp_parse_args.c:
+
+ case insensitive token search (use strcasecmp).
+
+2000-09-22 06:03 nba
+
+ * mibs/: HCNUM-TC.txt, IF-INVERTED-STACK-MIB.txt,
+ INET-ADDRESS-MIB.txt, IP-FORWARD-MIB.txt, smistrip
+:
+
+ -mibs/: MIB updates
+
+2000-09-22 05:55 nba
+
+ * mibs/: IANA-ADDRESS-FAMILY-NUMBERS-MIB.txt,
+ IANAifType-MIB.txt, MTA-MIB.txt, Makefile.in,
+ Makefile.mib, NETWORK-SERVICES-MIB.txt, RFC-1215.txt
+, RFC1155-SMI.txt, RFC1213-MIB.txt:
+
+ - mibs/: MIB updates
+
+2000-09-22 05:52 nba
+
+ * man/snmpset.1, man/snmptrap.1, snmplib/snmp_api.c
+, apps/snmpset.c:
+
+ - snmp_api.c: support setting of BITS variables
+
+2000-09-22 05:50 nba
+
+ * apps/snmpstatus.c:
+
+ - snmpstatus.c: show error object
+
+2000-09-22 04:29 nba
+
+ * apps/snmpusm.c:
+
+ - snmpusm.c: issue error message with object
+
+2000-09-22 04:28 nba
+
+ * snmplib/system.h:
+
+ - system.h: provide prototypes for strtol, strtoul, snprintf, vsnprintf
+
+2000-09-22 04:27 nba
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - vacm_vars.c: protect against overrun of strings
+
+2000-09-21 16:17 nba
+
+ * apps/: snmpbulkget.c, snmpbulkwalk.c, snmpdelta.c
+, snmpget.c, snmpgetnext.c, snmpset.c,
+ snmpstatus.c, snmptable.c, snmptest.c,
+ snmpwalk.c:
+
+ - apps/: display failed object when one is identified by pdu->errindex
+
+2000-09-21 15:59 hardaker
+
+ * man/: Makefile.in, snmpdf.1:
+
+ - (Makefile.in, snmpdf.1): document the snmpdf command.
+
+2000-09-21 15:50 nba
+
+ * man/snmptable.1, apps/snmptable.c:
+
+ - snmptable: use GETBULK to collect data when protocol allows it. Add
+ -CB options to fall back to GETNEXT.
+
+2000-09-21 15:38 nba
+
+ * snmplib/default_store.h, snmplib/mib.c,
+ man/snmpcmd.1:
+
+ - mib.c: rewrite index handling in object ids, to allow symbolic enums.
+ Add Daves suggested -Ov output. Also enhace -Td output to
+ destinguish OBJECT-TYPE from TRAP-TYPE, MODULE-IDENTITY etc.
+
+2000-09-21 15:31 hardaker
+
+ * apps/snmpdf.c:
+
+ - (snmpdf.c): use the UCD-SNMP-MIB's dskTable if the
+ HOST-RESOURCES-MIB is empty or if -Cu is specified on the command line.
+
+2000-09-21 15:28 nba
+
+ * snmplib/: parse.c, parse.h:
+
+ - parse.c: add ability to collect VARIABLES/OBJECTS for TRAP-TYPE
+ and NOTIFICATION-TYPE. Ignore files that does not have DEFINITIONS
+ as their second token. Enhance -Td output accordingly.
+
+2000-09-21 15:22 nba
+
+ * snmplib/snprintf.c, snmplib/strtol.c,
+ snmplib/strtoul.c, snmplib/Makefile.in,
+ snmplib/snmp_logging.c, acconfig.h, configure.in
+, config.h.in, configure:
+
+ - snmplib: add snprintf, strtol, strtoul for systems that don't have them
+
+2000-09-21 15:10 hardaker
+
+ * snmplib/mib.h:
+
+ - (mib.h): add fake struct definition for enums
+
+2000-09-21 14:16 nba
+
+ * snmplib/strtoul.c:
+
+ file strtoul.c was initially added on branch V4-1-1-patches.
+
+2000-09-21 14:16 nba
+
+ * snmplib/strtol.c:
+
+ file strtol.c was initially added on branch V4-1-1-patches.
+
+2000-09-21 14:16 nba
+
+ * snmplib/snprintf.c:
+
+ file snprintf.c was initially added on branch V4-1-1-patches.
+
+2000-09-21 06:16 hardaker
+
+ * snmplib/: mib.c, mib.h:
+
+ - (mib.c, mib.h): make sprint* non-static (bug #132).
+
+2000-09-21 00:25 hardaker
+
+ * snmplib/snmp_alarm.c:
+
+ - (snmp_alarm.c): Patch from John Naylon:
+ - fix bug #360 where a client might remove a alarm registration
+ during a call to the alarm function and invalidate the pointer
+ being used by the calling function.
+
+2000-09-21 00:22 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): --disable-shared by default in cvs checkouts.
+
+2000-09-20 17:31 hardaker
+
+ * local/snmpconf:
+
+ - (snmpconf): space indent tokens if # prepended.
+
+2000-09-20 17:30 hardaker
+
+ * agent/mibgroup/target/: snmpTargetAddrEntry.c,
+ snmpTargetParamsEntry.c:
+
+ - (snmpTargetAddrEntry.c, snmpTargetParamsEntry.c): null internal help lines.
+
+2000-09-20 17:29 hardaker
+
+ * local/Makefile.in:
+
+ - (Makefile.in, monitor): disk, proc, and load checks.
+
+2000-09-20 17:27 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/snmpv3/usmUser.c, snmplib/snmpv3.c:
+
+ - (vacm_vars.c, usmUser.c, snmpv3.c): NULL out help messages for .conf
+ tokens that are either internal or no longer the standard way of
+ doing things.
+
+2000-09-20 17:26 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): export SNMPCONFPATH to Makefiles
+
+2000-09-20 17:25 hardaker
+
+ * EXAMPLE.conf.def:
+
+ - (EXAMPLE.conf.def): minor correction of table name. More errors exist.
+
+2000-09-20 16:46 hardaker
+
+ * local/Makefile.in:
+
+ - (Makefile.in, debugging, mibs, output): more snmp.conf snmpconf config files.
+
+2000-09-20 15:17 hardaker
+
+ * local/Makefile.in:
+
+ - (Makefile.in, authopts): snmp.conf support for basic authentication options.
+
+2000-09-20 14:55 hardaker
+
+ * local/snmpconf:
+
+ - (snmpconf):
+ - don't force reading of /usr/local/share/snmpd.conf.
+ - don't print unknown directive comment headers if there aren't any.
+
+2000-09-20 14:45 hardaker
+
+ * local/snmpconf:
+
+ - (snmpconf): space things out on the screen a bit better.
+
+2000-09-20 14:35 hardaker
+
+ * local/: Makefile.in, snmpconf:
+
+ - (Makefile.in, snmpconf): install snmpconf and its various support files.
+
+2000-09-20 14:20 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmp_api.c, snmp_api.h): do reverse v3 header encoding with a static buffer.
+
+2000-09-20 11:37 hardaker
+
+ * local/snmpconf:
+
+ - (snmpconf): misc updates and improvements.
+
+2000-09-20 08:54 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Fix dynamic array problem pointed out by Jochen Kmietsch.
+
+2000-09-20 02:05 daves
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - (agentx/protocol.c): Don't include context strings on PDUs that shouldn't have them
+ (Thanks to Pedro Pereira for identifying this)
+
+2000-09-19 17:06 hardaker
+
+ * local/snmpconf:
+
+ - (snmpconf): read older configuration files in and merge with new results.
+
+2000-09-19 14:40 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): print pdu type on debugging dump output.
+
+2000-09-19 14:15 hardaker
+
+ * snmplib/: asn1.c, snmp.c:
+
+ - (asn1.c, snmp.c): reverse encoding support for specialized opaque
+ datatypes (float, double, etc).
+
+2000-09-19 14:15 hardaker
+
+ * aclocal.m4:
+
+ - (aclocal.m4): document macros a bit more for submission to the
+ autoconf macro library.
+
+2000-09-19 08:30 mslifcak
+
+ * agent/mibgroup/mibII/at.c:
+
+ Fix bug #295 reported by John Whitney johnw@aiinet.com
+
+2000-09-18 14:59 hardaker
+
+ * agent/: snmp_vars.h, snmpd.h:
+
+ - (snmp_vars.h, snmpd.h): Patch from Harrie Hazewinkel:
+ - move getStatPtr definition to proper .h file.
+
+2000-09-18 14:55 mslifcak
+
+ * apps/Makefile.in:
+
+ Fix bug #347 reported by das_deniz@yahoo.com: make sbin install dir
+
+2000-09-14 09:05 hardaker
+
+ * agent/agent_read_config.c, man/snmpd.conf.5.def:
+
+ - (agent_read_config.c, snmpd.conf.5.def): Patch from Harrie Hazewinkel:
+ - add a port specification snmpd.conf token.
+
+2000-09-14 08:52 hardaker
+
+ * agent/agent_trap.c:
+
+ - (agent_trap.c): ignore output of gethostbyname for trap session adding.
+
+2000-09-13 15:06 hardaker
+
+ * local/snmpconf:
+
+ - (snmpconf): new utility to generate .conf files by prompting the
+ user with questions.
+
+2000-09-08 13:07 hardaker
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ - (proxy.c): Patch from Scott Lipcon:
+ - fix proxy support for null length strings.
+
+2000-09-07 10:12 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in):
+ - fix openssl checks.
+ - run autoheader.
+
+2000-09-05 13:35 mslifcak
+
+ * agent/snmpd.c, agent/mibgroup/util_funcs.c,
+ apps/snmpbulkget.c, apps/snmpbulkwalk.c,
+ apps/snmpdelta.c, apps/snmpdf.c, apps/snmpget.c
+, apps/snmpgetnext.c, apps/snmpset.c,
+ apps/snmpstatus.c, apps/snmptable.c, apps/snmptest.c
+, apps/snmptrap.c, apps/snmpusm.c,
+ apps/snmpvacm.c, apps/snmpwalk.c:
+
+ Minor touchups to build on Win32 platform.
+
+2000-09-05 13:34 mslifcak
+
+ * win32/: win32.dsw, libsnmp_dll/libsnmp.def,
+ snmpdf/.cvsignore, snmpdf/snmpdf.dsp,
+ snmpvacm/.cvsignore, snmpvacm/snmpvacm.dsp:
+
+ Welcome the newest ucd-snmp applications to the Win32 builds.
+
+2000-09-04 15:19 nba
+
+ * snmplib/read_config.c:
+
+ - read_config.c: restart errorcount when reloading config
+
+2000-09-04 15:12 nba
+
+ * man/snmpnetstat.1:
+
+ - snmpnetstat.1: align man page with program
+
+2000-09-04 15:10 nba
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ - ipAddr.c: remove a bad ntohl for OpenBSD
+
+2000-09-04 15:09 nba
+
+ * agent/mibgroup/: mibincl.h, mibII/tcp.c,
+ mibII/tcpTable.c, mibII/udp.c, mibII/udpTable.c:
+
+ - mibincl.h, {tc,ud}p{,Table}.c: ensure just one include of socket.h
+ to make unprotected include file in Ultrix happy
+
+2000-09-04 15:05 nba
+
+ * configure.in, configure:
+
+ - configure.in: make --without-libwrap work
+
+2000-09-01 15:14 hardaker
+
+ * agent/mibgroup/ucd-snmp/: vmstat_solaris2.c,
+ vmstat_solaris2.h:
+
+ - (vmstat_solaris2.c, vmstat_solaris2.h): Patch from Jochen Kmietsch:
+ - updated code.
+
+2000-09-01 11:54 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): Scott Lipcon noted that snmptrapd doesn't support -T.
+
+2000-08-30 13:28 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: fix loop in syntax error in DEFVAL clause. Also fix reading
+ of .index file with filenames containing blanks.
+
+2000-08-28 13:43 marz
+
+ * perl/SNMP/SNMP.pm:
+
+ minor syntax glitch in POD docs
+
+2000-08-24 01:55 daves
+
+ * apps/snmptable.c:
+
+ - (apps/snmptable.c): Fix bug with displaying header-less indexed tables
+ (Thanks to Ernie Miller)
+
+2000-08-19 11:29 mslifcak
+
+ * snmplib/asn1.c:
+
+ Apply patch from <Christoph.Mammitzsch@tu-clausthal.de>
+ to fix sign in asn_rbuild_unsigned_int .
+
+2000-08-18 04:18 mslifcak
+
+ * agent/mibgroup/mibincl.h:
+
+ restore previous version; openbsd, solaris, linux build ok.
+
+2000-08-18 03:44 mslifcak
+
+ * snmplib/read_config.c:
+
+ remove unused printf argument passed to snmp_log.
+
+2000-08-18 03:20 mslifcak
+
+ * perl/SNMP/Makefile.PL:
+
+ fix bug 253 with patch supplied by Jeffrey Honig <jch@bsdi.com>
+
+2000-08-18 02:52 mslifcak
+
+ * testing/tests/: T020snmpv3get, T021snmpv3getnext:
+
+ fix bug 318 - test 9 and 10 explicitly create the test user.
+
+2000-08-17 13:42 mslifcak
+
+ * apps/snmptest.c:
+
+ The battle to trim newlines correctly continues...reduce length by one.
+
+2000-08-16 15:04 hardaker
+
+ * snmplib/: snmp_api.c, snmpusm.c:
+
+ - (snmp_api.c, snmpusm.c): fix various encryption/decryption problems.
+
+2000-08-16 15:03 hardaker
+
+ * snmplib/scapi.c:
+
+ - (scapi.c): fix padding size in encryption.
+
+2000-08-16 14:48 hardaker
+
+ * snmplib/scapi.c:
+
+ - (scapi.c): set plaintext length at the end of sc_decrypt.
+
+2000-08-15 05:08 mslifcak
+
+ * FAQ:
+
+ Fix bug 284 with a short explanation about snmp.conf.
+
+2000-08-15 03:00 mslifcak
+
+ * INSTALL:
+
+ Fix bug 283 - umask 022, make install. Thanks to csaba.toth@szk.bke.hu
+
+2000-08-15 00:08 nba
+
+ * apps/: snmptest.c (V4-1-1-patches.2), snmptest.c:
+
+ - snmptest.c: overhaul input_variable, kill newline
+
+2000-08-14 22:05 nba
+
+ * aclocal.m4, configure.in, configure (V4-1-1-patches.[1,0,0]),
+ aclocal.m4, configure, configure.in:
+
+ - aclocal.m4, configure.in: fixes for configure --silent
+
+2000-08-14 17:27 hardaker
+
+ * Makefile.top, configure, configure.in:
+
+ - (Makefile.top, configure, configure.in):
+ - --enable-silent-libtool to make Niels smile.
+
+2000-08-14 17:17 hardaker
+
+ * snmplib/: snmpv3.c, snmpv3.h:
+
+ - (snmpv3.c, snmpv3.h): implement a new (default) engineID type based
+ on a random number, and a timestamp.
+ - I think it won't invalidate existing installations (heh).
+
+2000-08-14 16:47 hardaker
+
+ * snmplib/read_config.c:
+
+ - (read_config.c):
+ - if -Dread_config, then print even no-help tokens and a * for PREMIB ones.
+
+2000-08-14 14:51 nba
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/agent_trap.c,
+ agent/mib_modules.c, agent/mibgroup/mibincl.h,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_storage.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/snmpv3/snmpEngine.c,
+ agent/mibgroup/snmpv3/snmpMPDStats.c,
+ agent/mibgroup/snmpv3/usmStats.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c, apps/snmpbulkget.c
+, snmplib/getopt.h, snmplib/scapi.c,
+ snmplib/snmp_alarm.c, snmplib/snmp_api.c,
+ snmplib/snmp_logging.c, snmplib/snmpusm.c:
+
+ - (many): portability fixes for OpenBSD 2.6, FreeBSD 4.1, Ultrix 4.5
+
+2000-08-14 11:33 hardaker
+
+ * snmplib/keytools.c:
+
+ - (keytools.c): Patch from Yigal Hochberg:
+ - remove unused context variables.
+
+2000-08-14 11:29 hardaker
+
+ * snmplib/scapi.c:
+
+ - (scapi.c): Patch from Yigal Hochberg:
+ - remove duplicate keylength check.
+
+2000-08-11 13:09 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): optimize reverse encoding of varbindlists.
+
+2000-08-11 08:55 hardaker
+
+ * local/README.mib2c:
+
+ - (README.mib2c): Patch from Jan Alfred Sandven:
+ - typos.
+
+2000-08-11 06:05 nba
+
+ * apps/: snmpbulkget.c, snmpbulkwalk.c, snmpdelta.c
+, snmpdf.c, snmpget.c, snmpgetnext.c,
+ snmpset.c, snmpstatus.c, snmptable.c,
+ snmptest.c, snmptrap.c, snmpusm.c, snmpvacm.c
+, snmpwalk.c:
+
+ - apps/*: snmpapp -V should not give the usage message too.
+
+2000-08-11 00:43 nba
+
+ * man/: snmptrapd.8 (V4-1-1-patches.2), snmptrapd.8:
+
+ - snmptrapd.8: fix typo. Thanks to G. Allen Morris III <gam3@acm.org>
+
+2000-08-10 23:23 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: predefine ObjectSyntax, ApplicationSyntax, SimpleSyntax and
+ ObjectName
+
+2000-08-10 16:20 hardaker
+
+ * local/: Makefile.in, mib2c:
+
+ - (Makefile.in, mib2c):
+ - make mib2c look in $(snmplibdir) for .conf files.
+ - install mib2c and .conf files.
+
+2000-08-10 14:33 hardaker
+
+ * snmplib/: default_store.h, snmp_api.c:
+
+ - (default_store.h, snmp_api.c): dynamically decide to reverse/forward encode.
+
+2000-08-10 14:31 hardaker
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ - (extensible.c): fix CR termination.
+
+2000-08-10 14:25 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in): define reverse encoding on by default.
+
+2000-08-10 13:02 mslifcak
+
+ * configure.in, configure:
+
+ fix bug 252 for configure and sys/socket.h on BSD/OS 4.2
+
+2000-08-10 09:07 hardaker
+
+ * snmplib/: asn1.c, asn1.h, snmp.c, snmp.h
+, snmp_api.c, snmp_api.h, snmpusm.c,
+ snmpusm.h, snmpv3.c:
+
+ - (asn1.c, asn1.h, snmp.c, snmp.h, snmp_api.c, snmp_api.h, snmpusm.c,
+ snmpusm.h, snmpv3.c):
+ - implement reverse encoded messages.
+ - TODO: clean up, run-time determination of weather to use it or not.
+
+2000-08-09 15:40 mslifcak
+
+ * snmplib/read_config.c:
+
+ Fix bug 331 with patch in part provided by John Naylon <jbpn@cambridgebroadband.com>
+
+2000-08-09 15:27 mslifcak
+
+ * agent/mibgroup/smux/smux.c,
+ agent/mibgroup/ucd-snmp/proxy.c, apps/snmpvacm.c:
+
+ no // comment, in deference to non-ANSI-C compilers.
+
+2000-08-09 07:21 nba
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ - hr_swrun.c: fix the RunPath for swapped out Linux process
+
+2000-08-09 07:21 nba
+
+ * agent/mibgroup/host/: hr_print.c (V4-1-1-patches.2), hr_print.c
+:
+
+ - hr_print.c: fix a debug token
+
+2000-08-09 04:44 nba
+
+ * apps/snmpnetstat/main.c:
+
+ - main.c: fix parsing of -v
+
+2000-08-08 10:06 hardaker
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ - (extensible.c): strip newlines.
+
+2000-08-08 08:51 hardaker
+
+ * snmplib/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): Patch from Scott Lipcon: start optind at 1 not 0.
+ -
+
+2000-08-08 06:36 mslifcak
+
+ * snmplib/snmpusm.c:
+
+ Fix bug #295 (free *secStateRef before allocating another one).
+
+2000-08-08 06:05 mslifcak
+
+ * apps/snmptrapd.c, agent/snmpd.c:
+
+ fix bug #298 reported and patch supplied by Conrad Link <clink@ml.com>
+
+2000-08-08 04:59 nba
+
+ * snmplib/snmp_api.c:
+
+ - snmp_api.c: fix a busy loop when alarm queue is active without any
+ outstanding requests
+
+2000-08-08 04:47 nba
+
+ * man/snmpset.1:
+
+ - snmpset.1: cannot set counters
+
+2000-08-08 04:42 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ Fixed (BUG#332) using patch submitted by John Naylon <jbpn@cambridgebroadband.com>
+ Also consolidated comments about the four send PDU functions.
+
+2000-08-07 06:59 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ Fix leak in reportable errors found by John Naylon <jbpn@cambridgebroadband.com>
+
+2000-08-07 05:48 nba
+
+ * man/add_module_replacement.3:
+
+ file add_module_replacement.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 05:48 nba
+
+ * man/read_objid.3:
+
+ file read_objid.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/snmp_set_mib_warnings.3:
+
+ file snmp_set_mib_warnings.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/snmp_set_save_descriptions.3:
+
+ file snmp_set_save_descriptions.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/read_module_node.3:
+
+ file read_module_node.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/read_module.3:
+
+ file read_module.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/read_mib.3:
+
+ file read_mib.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/read_all_mibs.3:
+
+ file read_all_mibs.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/print_variable.3:
+
+ file print_variable.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/print_value.3:
+
+ file print_value.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/print_objid.3:
+
+ file print_objid.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/print_mib.3:
+
+ file print_mib.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/print_description.3:
+
+ file print_description.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/init_mib.3:
+
+ file init_mib.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/init_mib_internals.3:
+
+ file init_mib_internals.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/get_module_node.3:
+
+ file get_module_node.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ * man/add_mibdir.3:
+
+ file add_mibdir.3 was initially added on branch V4-1-1-patches.
+
+2000-08-04 17:13 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): add in the notification group by default.
+
+2000-08-04 17:08 hardaker
+
+ * agent/mibgroup/notification.h:
+
+ - (notification.h): notification mib wrapper.
+
+2000-08-04 17:06 hardaker
+
+ * snmplib/snmp_parse_args.c:
+
+ - (snmp_parse_args.c):
+ - initialize optind before calling getopt.
+ - debugging output.
+
+2000-08-04 16:56 hardaker
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ - (proxy.c): properly set the first (unused) argument to snmp_parse_args().
+
+2000-08-04 16:53 hardaker
+
+ * agent/: agent_trap.c,
+ mibgroup/notification/snmpNotifyTable.h,
+ mibgroup/target/snmpTargetAddrEntry.c,
+ mibgroup/target/snmpTargetAddrEntry.h,
+ mibgroup/target/snmpTargetParamsEntry.c,
+ mibgroup/target/snmpTargetParamsEntry.h,
+ mibgroup/target/target.c:
+
+ - (agent_trap.c, snmpNotifyTable.h, snmpTargetAddrEntry.c,
+ snmpTargetAddrEntry.h, snmpTargetParamsEntry.c,
+ snmpTargetParamsEntry.h, target.c):
+ - if using the snmpNotificationTable, insert non-v1 trap sinks into it.
+
+2000-08-04 05:26 daves
+
+ * agent/mibgroup/mibJJ.h:
+
+ - (mibgroup/mibJJ.h mibgroup/mibJJ/*): Experimental re-write of mibII
+
+2000-08-04 05:21 daves
+
+ * agent/mibgroup/: util_funcs.c, util_funcs.h:
+
+ - (mibgroup/util_funcs.[ch]): New 'cached table' routines
+
+2000-08-03 08:37 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ Fix bug #325 identified by John Naylon <jbpn@cambridgebroadband.com>
+
+2000-08-03 01:24 nba
+
+ * mibs/IP-FORWARD-MIB.txt:
+
+ file IP-FORWARD-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-08-03 01:24 nba
+
+ * mibs/INET-ADDRESS-MIB.txt:
+
+ file INET-ADDRESS-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-08-03 01:24 nba
+
+ * mibs/IF-INVERTED-STACK-MIB.txt:
+
+ file IF-INVERTED-STACK-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-08-03 01:24 nba
+
+ * mibs/HCNUM-TC.txt:
+
+ file HCNUM-TC.txt was initially added on branch V4-1-1-patches.
+
+2000-08-02 07:06 mslifcak
+
+ * testing/eval_tools.sh:
+
+ Silent running grep results.
+
+2000-08-02 06:10 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ Fix BUG #291: allow "255.255.255.255" for text input to ASN_IPADDRESS
+
+2000-08-02 05:20 mslifcak
+
+ * agent/snmp_agent.c, agent/mibgroup/agentx/master_admin.c
+, agent/mibgroup/agentx/subagent.c, apps/snmptest.c
+:
+
+ Fix (BUG#323): free PDU when snmp_send fails.
+
+2000-08-02 05:06 mslifcak
+
+ * testing/TESTCONF.sh:
+
+ Add -p option once to snmpd args.
+ Find MIBDIRS in source tree.
+ Fix condition to set PATH.
+
+2000-08-01 23:30 nba
+
+ * agent/mibgroup/mibII/ip.c:
+
+ - ip.c: One more #if solaris
+
+2000-08-01 23:19 nba
+
+ * agent/mibgroup/mibII/ip.c:
+
+ - ip.c: A bad #if ... the proper define to test for Solaris is solaris2
+
+2000-08-01 16:40 hardaker
+
+ * snmplib/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): remove unused usage() typedef.
+
+2000-08-01 16:40 hardaker
+
+ * agent/mibgroup/ucd-snmp/: proxy.c, proxy.h:
+
+ - (proxy.c, proxy.h): -Wall warning fixes.
+
+2000-08-01 16:39 hardaker
+
+ * FAQ:
+
+ - (FAQ): mention newer versions of Solaris.
+
+2000-08-01 16:37 hardaker
+
+ * testing/TESTCONF.sh, testing/TESTCONF.sh.in,
+ configure, configure.in:
+
+ - (TESTCONF.sh, TESTCONF.sh.in): revert to non-configed TESTCONF.
+
+2000-08-01 16:31 hardaker
+
+ * Makefile.top:
+
+ - (Makefile.top): make un-quiet.
+
+2000-08-01 10:23 hardaker
+
+ * local/snmp-ucd.sh:
+
+ - (snmp-ucd.sh): fix bug #297 (don't kill grep and init script invocations).
+
+2000-08-01 04:45 mslifcak
+
+ * snmplib/snmpusm.c:
+
+ Fix bug found by Yigal Hochberg <hochberg@dmhsoftware.com>
+
+2000-08-01 03:30 daves
+
+ * agent/snmp_vars.c:
+
+ - (agent/snmp_vars.c): Fix building of complete OID
+ (work with the name originally registered,
+ not any subsequent division boundaries)
+
+2000-07-31 20:09 mslifcak
+
+ * agent/mibgroup/util_funcs.c:
+
+ Remove duplicate fopen from shell_command.
+
+2000-07-31 18:58 mslifcak
+
+ * testing/: RUNTESTS, TESTCONF.sh.in:
+
+ (TESTCONF.sh.in) - set MIBDIRS to sibling of the testing directory.
+ (RUNTESTS) - allow binaries to be in the "-D bindir" directory.
+
+2000-07-31 15:25 mslifcak
+
+ * testing/TESTCONF.sh.in:
+
+ Dont adjust PATH if SNMP_PATH is set.
+ Dont add port spec to SNMP_FLAGS if one is already specified.
+
+2000-07-31 13:49 mslifcak
+
+ * testing/eval_tools.sh:
+
+ Remove test directories for skipped tests.
+ Keep test directories for failed tests.
+ Keep test directories for passed tests when "RUNTESTS -s" is specified.
+ Search config.h at the root of the build tree.
+
+2000-07-31 11:32 mslifcak
+
+ * config.guess:
+
+ Merge from automake-1.4: Add for Rhapsody, OpenStep, Cray-T3, SX-4, SX-5
+
+2000-07-31 11:31 mslifcak
+
+ * config.sub:
+
+ Merge from automake-1.4: Add for Rhapsody, OpenStep
+
+2000-07-30 17:38 hardaker
+
+ * agent/mibgroup/: notification/snmpNotifyTable.c,
+ notification/snmpNotifyTable.h, target/target.c,
+ target/target.h:
+
+ - (snmpNotifyTable.c, snmpNotifyTable.h, target.c, target.h):
+ - implement untested filtering function callback for target searches.
+ - delete unused function.
+ - misc warning fixes.
+
+2000-07-30 17:07 hardaker
+
+ * agent/mibgroup/notification/: snmpNotifyFilterProfileTable.c
+, snmpNotifyFilterProfileTable.h,
+ snmpNotifyFilterTable.c, snmpNotifyFilterTable.h:
+
+ - (snmpNotifyFilterProfileTable.c, snmpNotifyFilterProfileTable.h,
+ snmpNotifyFilterTable.c, snmpNotifyFilterTable.h):
+ - more notification table implementations for filtering.
+ - Framework complete, functionality is not.
+
+2000-07-30 17:05 hardaker
+
+ * agent/mibgroup/: header_complex.c, header_complex.h:
+
+ - (header_complex.c, header_complex.h):
+ - handle implied objects.
+ - implement header_complex_get() for simple data retrievals.
+
+2000-07-28 06:14 mslifcak
+
+ * agent/mibgroup/mibII/: var_route.c (V4-1-1-patches.2),
+ var_route.c:
+
+ Cleanup include headers to fix bug #307. Thanks to sandven@research.att.com.
+
+2000-07-27 15:19 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): Patch from Vinay Mohta:
+ - access_hosts() requires an argument so fake one.
+
+2000-07-27 15:00 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (interfaces.c): Patch from Mattias Barthel:
+ - fix for interfaces without an attached IP address.
+
+2000-07-27 14:55 hardaker
+
+ * agent/mibgroup/ucd-snmp/: vmstat_solaris2.c,
+ vmstat_solaris2.h:
+
+ - (vmstat_solaris2.c, vmstat_solaris2.h): Patch from Jochen Kmietsch:
+ - support raw values.
+
+2000-07-27 08:25 hardaker
+
+ * apps/snmpusm.c:
+
+ - (snmpusm.c): print errors to stderr.
+
+2000-07-27 06:20 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: Fix a missing initization when one MIB holds MODULE-COMPLIANCE
+ for another
+
+2000-07-27 01:35 nba
+
+ * snmplib/snmp_api.c:
+
+ - snmp_api.c: Fix pdu->community being overwritten with session->community
+ Thanks to Dana P. Cook <dcook@cabletron.com>
+
+2000-07-26 22:28 mslifcak
+
+ * agent/agent_trap.c, snmplib/parse.c,
+ snmplib/read_config.c, win32/libsnmp_dll/libsnmp.def:
+
+ Update for win32 build: remove unused variables and unpublished method.
+
+2000-07-26 08:53 hardaker
+
+ * local/mib2c.storage.conf:
+
+ - (mib2c.storage.conf): misc changes and improvements.
+
+2000-07-26 08:53 hardaker
+
+ * local/tkmib:
+
+ - (tkmib): Patch from Bert Driehuis:
+ - translateObj hack.
+
+2000-07-26 08:49 hardaker
+
+ * local/tkmib:
+
+ - (tkmib): Patch from Bert Driehuis:
+ - remove beginning newline in description clauses.
+
+2000-07-17 11:00 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.h:
+
+ - (vmstat_solaris2.h): config_require kernel_sunos5.
+
+2000-07-12 09:29 hardaker
+
+ * snmplib/snmpv3.c:
+
+ - (snmpv3.c): copy key length as well as the key when using the same
+ privacy key as the auth key.
+
+2000-07-11 13:34 marz
+
+ * perl/SNMP/: README, SNMP.pm, SNMP.xs, t/mib.t
+:
+
+ added ranges field to SNMP::MIB hash
+
+2000-07-11 10:05 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): Patch from Robert Story:
+ - make null PREFIX variable possible so non-dot-leading oids are accepted.
+
+2000-07-11 09:22 hardaker
+
+ * agent/snmp_agent.c, apps/snmptrapd.c,
+ snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmpusm.c, snmplib/snmpusm.h:
+
+ - (snmp_agent.c, snmptrapd.c, snmp_api.c, snmp_api.h, snmpusm.c, snmpusm.h):
+ - make the session pointers indicate weather or not they are
+ "authoritative", meaning weather they should be learning engineIDs
+ or reporting on them.
+ - pass the received-packet session pointer into snmpv3_parse and
+ usm_proccess_in_msg() to use this flag.
+ - set isAuthoratative = true in the agent, and unknown in the snmptrapd.
+
+2000-07-11 08:32 hardaker
+
+ * snmplib/snmpv3.c:
+
+ - (snmpv3.c): make the createUser token accept an engineid (-e ARG) to use.
+
+2000-07-07 01:37 daves
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (mibII/interfaces.c): Recognise Token Ring interfaces under Linux
+
+2000-07-06 17:19 hardaker
+
+ * snmplib/read_config.c:
+
+ - (read_config.c): print generic strings when saving persistent data
+ where possible. (IE, check for printable characters before printing hex).
+
+2000-07-06 17:05 hardaker
+
+ * testing/: TESTCONF.sh, TESTCONF.sh.in:
+
+ - (TESTCONF.sh, TESTCONF.sh.in): moved TESTCONF.sh to TESTCONF.sh.in
+ and have the MIBS path variable built by configure since it knows
+ where the root level source directory is.
+
+2000-07-06 17:04 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/header_complex.c,
+ agent/mibgroup/notification/snmpNotifyTable.c, snmplib/asn1.h
+, snmplib/snmp_api.c:
+
+ - (configure, configure.in, header_complex.c, snmpNotifyTable.c,
+ asn1.h, snmp_api.c):
+ - implement IMPLIED index handling.
+ - make the created USM entries set the storageType and RowStatus
+ appropriately.
+
+2000-07-06 17:02 hardaker
+
+ * snmplib/snmp_api.h:
+
+ - (snmp_api.h): better comments on a couple of function definitions.
+
+2000-07-05 07:50 mslifcak
+
+ * agent/snmp_agent.c:
+
+ fix (BUG#290) gracefully handle some PDUs that have no variables.
+
+2000-07-05 06:46 mslifcak
+
+ * README.win32:
+
+ [no log message]
+
+2000-07-04 10:21 hardaker
+
+ * agent/snmp_vars.c, apps/snmptrapd.c,
+ snmplib/snmp_api.c, snmplib/snmpusm.c,
+ snmplib/snmpusm.h:
+
+ - (snmp_vars.c, snmptrapd.c, snmp_api.c, snmp_api.h, snmpusm.c, snmpusm.h):
+ - remove last remnants of the "initial" user.
+ - make engineid reports from the usm happen based on the report flag
+ in the message flag.
+ - Note: this is a big issue with the SNMPv3 protocol specs. The
+ specifications note that you send a report if you are
+ "authoritative", but don't describe how to know if you are
+ authoritative or not. For situations like proxies and
+ notification receivers, where you are sometimes authoritative
+ and other times you're not, this is problematic. The SNMPv3
+ ASIs do not pass in enough information to determine this and the
+ WG has proclaimed that the ASIs are not meant to be used as an
+ API, but the initial work done by NAI and TISLabs attempted to
+ implement the USM such that it would be a "reference" release
+ and hence we followed the specifications to the letter and used
+ the ASIs as APIs just to see if we could. We could previously
+ only because we were always either authoritative or
+ non-authoritative. Since beginning to work on proxy and the
+ notification mib, this is no longer possible. For the record, I
+ am hereby changing the initial reference release in such a
+ manner as it no longer conforms exactly to the SNMPv3 ASIs. So
+ as not to confuse anyone, this is an entirely theoretical issue
+ with respect to the SNMPv3 specification and is perfectly legal
+ to do. Though I could easily go on, I'll step off my soap box now.
+
+2000-07-03 10:10 hardaker
+
+ * agent/: agent_callbacks.h, agent_trap.c,
+ agent_trap.h, mibgroup/notification/snmpNotifyTable.c,
+ mibgroup/target/snmpTargetAddrEntry.c,
+ mibgroup/target/snmpTargetAddrEntry.h,
+ mibgroup/target/snmpTargetParamsEntry.c,
+ mibgroup/target/snmpTargetParamsEntry.h,
+ mibgroup/target/target.c:
+
+ - (agent_callbacks.h, agent_trap.c, agent_trap.h, snmpNotifyTable.c,
+ snmpTargetAddrEntry.c, snmpTargetAddrEntry.h,
+ snmpTargetParamsEntry.c, snmpTargetParamsEntry.h, target.c):
+ - Add a new callback for sending traps.
+ - Make the notification mib use it.
+ - make the target mib generate more persistent sessions.
+ - Make the notification mib always ask the target mib for a session
+ list, which is now cached directly by the target mib.
+
+2000-07-03 08:38 mslifcak
+
+ * snmplib/: mib.c, read_config.c, snmp_api.c
+, system.c:
+
+ fix (BUG#262) - (some) statements that cannot be reached.
+
+2000-07-03 07:55 mslifcak
+
+ * snmplib/ucd-snmp-includes.h:
+
+ fix (BUG#287)
+
+2000-07-03 06:11 mslifcak
+
+ * snmplib/snmpusm.c:
+
+ fix bug # 289
+
+2000-06-30 04:45 mslifcak
+
+ * snmplib/read_config.c:
+
+ simplify memory allocation in read_config_read_{octet_string, objid}
+
+2000-06-30 00:47 nba
+
+ * snmplib/read_config.c:
+
+ - read_config.c: Fix a missing initialization for keywords without help
+
+2000-06-28 23:37 nba
+
+ * mibs/: IF-MIB.txt, Makefile.mib:
+
+ - IF-MIB.txt: upgrade to RFC 2863
+
+2000-06-28 00:58 nba
+
+ * acconfig.h, config.h.in, configure.in,
+ configure, agent/mibgroup/mibII/interfaces.c:
+
+ - interfaces.c, configure: Irix 6.5 has ifi_baudrate.ifs_value
+
+2000-06-27 01:34 nba
+
+ * apps/snmpnetstat/main.c:
+
+ - main.c: better option parsing.
+
+2000-06-27 01:34 nba
+
+ * snmplib/snmpv3.c:
+
+ - snmpv3.c: do case insensitive matching of option values.
+
+2000-06-27 00:33 nba
+
+ * man/snmptranslate.1:
+
+ - snmptranslate.1: document that -w is also for -Td
+
+2000-06-27 00:30 nba
+
+ * man/: snmpbulkget.1, snmpbulkwalk.1, snmpcmd.1
+, snmpget.1, snmpgetnext.1, snmpnetstat.1,
+ snmpset.1, snmpstatus.1, snmptest.1, snmptrap.1
+, snmptrapd.8, snmpwalk.1, variables.5:
+
+ - various man page nit-picking
+
+2000-06-27 00:28 nba
+
+ * apps/snmptable.c:
+
+ - snmptable.c: fixes and usage message for -Ch and -CH
+
+2000-06-26 23:43 nba
+
+ * mibs/: AGENTX-MIB.txt, DISMAN-SCHEDULE-MIB.txt,
+ DISMAN-SCRIPT-MIB.txt, EtherLike-MIB.txt,
+ HOST-RESOURCES-MIB.txt, HOST-RESOURCES-TYPES.txt,
+ IANA-ADDRESS-FAMILY-NUMBERS-MIB.txt, IANA-LANGUAGE-MIB.txt
+, IANAifType-MIB.txt, IF-MIB.txt, IP-MIB.txt
+, IPV6-ICMP-MIB.txt, IPV6-MIB.txt, IPV6-TC.txt
+, IPV6-TCP-MIB.txt, Makefile.in, RMON-MIB.txt
+, SMUX-MIB.txt, SNMP-COMMUNITY-MIB.txt,
+ SNMP-FRAMEWORK-MIB.txt, SNMP-MPD-MIB.txt,
+ SNMP-NOTIFICATION-MIB.txt, SNMP-PROXY-MIB.txt,
+ SNMP-TARGET-MIB.txt, SNMP-USER-BASED-SM-MIB.txt,
+ SNMP-VIEW-BASED-ACM-MIB.txt, SNMPv2-CONF.txt,
+ SNMPv2-MIB.txt, SNMPv2-SMI.txt, SNMPv2-TC.txt,
+ SNMPv2-TM.txt, TCP-MIB.txt, UDP-MIB.txt:
+
+ - Makefile.in, *MIB.txt: update to current RFC version
+
+2000-06-26 23:42 nba
+
+ * mibs/: Makefile.mib, mibfetch, smistrip:
+
+ - Makefile.mib, mibfetch, smistrip: tools to extract MIBs from RFC
+ documents.
+
+2000-06-26 23:40 nba
+
+ * snmplib/parse.c, snmplib/mib.c, snmplib/mib.h
+, apps/snmptranslate.c:
+
+ - parse.c, mib.[ch], snmptranslate.c: add parsing of CHOICE and checks for
+ OBJECT-GROUP and AGENT-CAPABILITIES. This allows us to parse
+ complete MIB extracts from RFC documents.
+
+2000-06-26 23:38 nba
+
+ * Makefile.top:
+
+ - Makefile.top: make libtool silent, so we can see those warnings
+
+2000-06-26 23:37 nba
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c:
+
+ - snmpTargetAddrEntry.c: do a cast to kill a warning
+
+2000-06-26 23:32 nba
+
+ * agent/agent_trap.c:
+
+ - agent_trap.c: Fix a leak when request is blocked by VACM and no trap
+ is sent.
+
+2000-06-26 11:56 mslifcak
+
+ * snmplib/read_config.c:
+
+ fix (BUG#233)
+
+2000-06-23 06:42 mslifcak
+
+ * agent/mibgroup/ucd-snmp/proc.c:
+
+ replace malloc/memset 0 with calloc.
+
+2000-06-23 01:08 daves
+
+ * agent/mibgroup/mibII/: kernel_linux.c, kernel_linux.h
+, ip.c:
+
+ - (mibII/kernel_linux.[ch], mibII/ip.c): Added support for ipRoutingDiscards
+ (Thanks to Bryan Blackman)
+
+2000-06-22 17:09 mslifcak
+
+ * agent/mibgroup/ucd-snmp/proc.c:
+
+ remove extra include errormib.h
+
+2000-06-22 16:50 mslifcak
+
+ * agent/mibgroup/util_funcs.c:
+
+ Fix bug #276 - close most file descriptors before exec'ing command.
+
+2000-06-22 15:59 mslifcak
+
+ * agent/mibgroup/: util_funcs.c, ucd-snmp/extensible.c
+, ucd-snmp/memory.c, ucd-snmp/memory_freebsd2.c
+:
+
+ fgets: use sizeof(buf) in lieu of compiler constant STRMAX.
+
+2000-06-22 15:53 mslifcak
+
+ * agent/mibgroup/ucd-snmp/: pass.c, pass_persist.c:
+
+ Use fewer large static buffers. pass_persist uses bigger buffers now.
+
+2000-06-21 12:25 hardaker
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ - (snmpNotifyTable.c): Uh, only if not deleted.
+
+2000-06-21 12:23 hardaker
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ - (snmpNotifyTable.c): change createAndGo/createAndWait states to active/NIS.
+
+2000-06-20 20:01 mslifcak
+
+ * Makefile.in:
+
+ Declare top_builddir to avoid annoying /libtool not found message.
+
+2000-06-20 17:30 mslifcak
+
+ * apps/encode_keychange.c:
+
+ Dont assume ANSI C-preprocessor (replace "##" concatenation with sprintf).
+
+2000-06-20 15:37 mslifcak
+
+ * win32/: libagent/libagent.def, libagent/libagent.dsp,
+ libsnmp_dll/libsnmp.def, snmpbulkget/snmpbulkget.dsp,
+ snmpbulkwalk/snmpbulkwalk.dsp, snmpd/snmpd.dsp,
+ snmpdelta/snmpdelta.dsp, snmpget/snmpget.dsp,
+ snmpgetnext/snmpgetnext.dsp, snmpset/snmpset.dsp,
+ snmpstatus/snmpstatus.dsp, snmptable/snmptable.dsp,
+ snmptest/snmptest.dsp, snmptrap/snmptrap.dsp,
+ snmptrapd/snmptrapd.dsp, snmpusm/snmpusm.dsp,
+ snmpwalk/snmpwalk.dsp:
+
+ Win32 MS-VC++ build fixups.
+
+2000-06-20 15:37 mslifcak
+
+ * snmplib/snmpv3.c:
+
+ Encapsulate local variable "x" to the scope where needed.
+
+2000-06-20 15:36 mslifcak
+
+ * snmplib/snmp_client.c:
+
+ Remove unused var "newvar".
+
+2000-06-20 15:36 mslifcak
+
+ * apps/snmptrapd_log.c:
+
+ Use int vs ulong for array indexing variables to avoid signed/unsigned mismatch.
+
+2000-06-20 15:34 mslifcak
+
+ * apps/snmptrapd.c:
+
+ Remove unused vars struct tm, time_t.
+
+2000-06-20 15:34 mslifcak
+
+ * agent/snmpd.c:
+
+ Remove unused var "initlist".
+
+2000-06-20 15:33 mslifcak
+
+ * agent/snmp_agent.c:
+
+ Declare strncasecmp in system.h ; Remove unused var "status".
+
+2000-06-20 15:31 mslifcak
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ Remove unused vars.
+
+2000-06-20 15:30 mslifcak
+
+ * agent/agent_trap.c:
+
+ Declare optarg in getopt.h.
+
+2000-06-20 14:00 hardaker
+
+ * local/mib2c.storage.conf:
+
+ - (mib2c.storage.conf): misc minor changes.
+
+2000-06-20 13:59 hardaker
+
+ * agent/mibgroup/notification/: .cvsignore, snmpNotifyTable.c
+, snmpNotifyTable.h:
+
+ - (.cvsignore, snmpNotifyTable.c, snmpNotifyTable.h):
+ - SNMP-NOTIFICATION-MIB's snmpNotifyTable implemented:
+ - uses the SNMP-TARGET-MIB to get its addresses from.
+ - uses header_complex to handle the data.
+ - much todo:
+ - dynamic target/notification mib updating without kill -HUP needed.
+ - this will be a real pain.
+ - fix v3 related traps still (same usm bug I've been meaning to fix).
+ - the rest of the SNMP-NOTIFICATION-MIB tables.
+
+2000-06-20 13:53 hardaker
+
+ * agent/mibgroup/target/: snmpTargetAddrEntry.c,
+ snmpTargetAddrEntry.h, snmpTargetParamsEntry.c,
+ snmpTargetParamsEntry.h:
+
+ - (snmpTargetAddrEntry.c, snmpTargetAddrEntry.h,
+ snmpTargetParamsEntry.c, snmpTargetParamsEntry.h):
+ - generic target session creation
+ - misc other minor fixes.
+
+2000-06-20 13:51 hardaker
+
+ * agent/mibgroup/: target.h, target/target.c,
+ target/target.h:
+
+ - (target.h, target.c, target.h): generic target session creation
+ based on entries in the SNMP-TARGET-MIB table.
+
+2000-06-20 13:50 hardaker
+
+ * agent/mibgroup/header_complex.c:
+
+ - (header_complex.c): remove Michael's horriblely wrong "fixes".
+
+2000-06-20 13:48 hardaker
+
+ * agent/: agent_trap.c, agent_trap.h:
+
+ - (agent_trap.c, agent_trap.h): add remove_trap_session().
+
+2000-06-20 13:46 hardaker
+
+ * snmplib/read_config.c:
+
+ - (read_config.c): deal with 0-length persistent strings better.
+
+2000-06-19 12:32 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ Check more alloc failures.
+
+2000-06-19 12:15 mslifcak
+
+ * agent/mibgroup/agentx/: client.c, protocol.c:
+
+ (protocol.c) Use sizeof(oid), not 4!
+ (client.c) Add _all_ of OID value for agentx_register and agentx_unregister.
+
+2000-06-19 11:41 mslifcak
+
+ * snmplib/snmpv3.c:
+
+ Removed sizeof(u_char) and unnecessary (unsigned) casts to malloc params.
+
+2000-06-19 03:04 nba
+
+ * agent/agent_registry.c, apps/snmptrapd.c,
+ apps/snmptrapd_log.c, apps/snmptrapd_log.h,
+ snmplib/mib.c, snmplib/mib.h,
+ snmplib/snmp_parse_args.c, snmplib/snmp_parse_args.h,
+ snmplib/snmp_api.h:
+
+ Prototype fixup.
+
+2000-06-19 03:01 nba
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.h:
+
+ s/conifg/config/ .... Hrrrmmmpf
+
+2000-06-19 02:58 nba
+
+ * makenosysdepend.pl, agent/Makefile.in,
+ agent/mibgroup/Makefile.in, apps/Makefile.in,
+ snmplib/Makefile.in, testing/Makefile.in:
+
+ - makenosysdepend.pl Makefile.in: object files are now named .lo ...
+
+2000-06-16 16:01 hardaker
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.h:
+
+ - (snmpTargetAddrEntry.h): add the SNMPv2-TM mib to the default list.
+
+2000-06-16 16:01 hardaker
+
+ * agent/mibgroup/target/: snmpTargetAddrEntry.c,
+ snmpTargetParamsEntry.c:
+
+ - (snmpTargetAddrEntry.c, snmpTargetParamsEntry.c): fix incorrect OIDs.
+
+2000-06-15 06:45 marz
+
+ * perl/SNMP/Makefile.PL:
+
+ fat fingers
+
+2000-06-15 06:42 marz
+
+ * perl/SNMP/: Makefile.PL, Makefile.PL:
+
+ add defaults to daemon search path...recalc t/snmptest.cmd everytime per makefile.PL is run
+
+2000-06-12 16:43 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def): document trapsess.
+
+2000-06-12 16:39 hardaker
+
+ * agent/: agent_read_config.c, agent_trap.c,
+ agent_trap.h:
+
+ - (agent_read_config.c, agent_trap.c, agent_trap.h):
+ - new snmpd.conf token for trap sessions: "trapsess".
+ - uses snmp_parse_args so any type of trap can be sent with it
+ modified by any of the parameters that are documented in snmpcmd(1).
+ - v3 traps don't work due to the same USM problems found in the
+ recent proxy submissions (my next target).
+ - -Ci in the argument specifies informs should be used.
+
+2000-06-12 16:18 hardaker
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - (master_request.c): re-enable freeing of master request.
+
+2000-06-12 16:17 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in): save exec data to /var/ucd-snmp.
+ - could cause problems for non-root runs. Untested.
+
+2000-06-12 14:12 hardaker
+
+ * apps/snmptrapd_log.c:
+
+ - (snmptrapd_log.c): Patch from Markku Laukkanen:
+ - remove ending commas in enum list.
+
+2000-06-07 13:23 hardaker
+
+ * man/snmp_config.5.def, snmplib/read_config.c,
+ snmplib/read_config.h:
+
+ - (snmp_config.5.def, read_config.c, read_config.h):
+ - the TYPE.conf parser now accepts tokens from a different .conf
+ file TYPE if a special "[TYPE]" keyword is inserted into the
+ .conf file. See snmp_config(5) for a better description.
+
+2000-06-07 13:22 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - map strtoul to atoi if the function isn't found.
+
+2000-06-02 11:41 hardaker
+
+ * local/.cvsignore:
+
+ - (.cvsignore): add *.made.
+
+2000-06-02 11:40 hardaker
+
+ * local/: Makefile.in, fixproc, ipf-mod.pl,
+ mib2c, tkmib:
+
+ - (Makefile.in, fixproc, ipf-mod.pl, mib2c, tkmib):
+ - make (and install) perl scripts differently, without modifying the orig.
+
+2000-06-01 14:48 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): store persistent data immediately after init'ing to
+ ensure we update counters and stuff that must change (eg, engineBoots).
+
+2000-05-31 16:22 hardaker
+
+ * man/snmpd.1.def:
+
+ - (snmpd.1.def): describe -I.
+
+2000-05-31 15:52 hardaker
+
+ * configure, configure.in, agent/mib_modules.c
+, agent/mib_modules.h, agent/snmpd.c:
+
+ - (configure, configure.in, mib_modules.c, mib_modules.h, snmpd.c):
+ - new -I switch to snmpd to do dynamic determinaton of which mib
+ modules to initialize (and hence which mib tree sections to support).
+
+2000-05-31 15:50 hardaker
+
+ * snmplib/: default_store.c, default_store.h:
+
+ - (default_store.c, default_store.h): default store routines for void pointers.
+ - which I immediately decided to do something different for what I
+ originally implemented it for, so its not being used yet.
+
+2000-05-31 05:59 daves
+
+ * agent/mibgroup/mibII/: ip.c, ip.h:
+
+ - (mibII/ip.[ch]): Allow IP support without the At/ipNetToMedia module
+
+2000-05-30 17:11 hardaker
+
+ * agent/mibgroup/ucd-snmp/: proxy.c, proxy.h:
+
+ - (proxy.c, proxy.h): simple proxy support.
+ - maps one oid inside the agent to a possibly-different oid on a target.
+ - uses snmp_parse_args() so it takes standard command line config options.
+ - no set support.
+ - no kill -HUP support.
+ - no SNMPv3 support (sigh).
+
+2000-05-30 15:06 nba
+
+ * mibs/IANA-LANGUAGE-MIB.txt:
+
+ file IANA-LANGUAGE-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-05-30 15:06 nba
+
+ * mibs/IANA-ADDRESS-FAMILY-NUMBERS-MIB.txt:
+
+ file IANA-ADDRESS-FAMILY-NUMBERS-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-05-30 15:06 nba
+
+ * mibs/DISMAN-SCHEDULE-MIB.txt:
+
+ file DISMAN-SCHEDULE-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-05-30 15:06 nba
+
+ * mibs/AGENTX-MIB.txt:
+
+ file AGENTX-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-05-30 07:47 mslifcak
+
+ * agent/mibgroup/ucd-snmp/: pass.c, pass_persist.c:
+
+ Fix problem identified by V. Grenet: new method snmp_oid_min_compare
+
+2000-05-30 01:31 nba
+
+ * mibs/mibfetch:
+
+ file mibfetch was initially added on branch V4-1-1-patches.
+
+2000-05-30 01:31 nba
+
+ * mibs/smistrip:
+
+ file smistrip was initially added on branch V4-1-1-patches.
+
+2000-05-30 01:31 nba
+
+ * mibs/Makefile.mib:
+
+ file Makefile.mib was initially added on branch V4-1-1-patches.
+
+2000-05-26 09:24 daves
+
+ * agent/mibgroup/mibII/: sysORTable.c, system_mib.c:
+
+ - (mibII/sysORTable.c mibII/system_mib.c):
+ - Use new time utility routines to simplify processing
+ - Update sysORLastChange when adding/removing entries
+
+2000-05-26 09:23 daves
+
+ * agent/mibgroup/: util_funcs.c, util_funcs.h:
+
+ - (util_funcs.[ch]): New time-diff utility routines
+
+2000-05-26 08:46 daves
+
+ * agent/: snmpd.c, snmp_agent.c,
+ mibgroup/mibII/var_route.c:
+
+ - (snmpd.c snmp_agent.c mibII/var_route.c): Use 'mibincl.h' header
+
+2000-05-26 07:48 daves
+
+ * agent/: agent_registry.c, agent_registry.h,
+ mibgroup/agentx/client.c, mibgroup/agentx/client.h,
+ mibgroup/agentx/master_request.c, mibgroup/agentx/subagent.c
+:
+
+ - (agent_registry.[ch] agentx/client.[ch]
+ agentx/master_request.c agentx/subagent.c):
+ - Support for MIB region timeouts
+
+2000-05-26 07:46 daves
+
+ * snmplib/: snmp.h, snmp_api.c, snmp_client.c
+:
+
+ - (snmp.h snmp_api.c snmp_client.c): Support for per-request timeout handling
+
+2000-05-26 07:45 daves
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - (agentx/protocol.c): Minor error in AgentX packet dump
+
+2000-05-25 10:07 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+
+ - (memory.c): Patch from Ragnar Kjørstad:
+ - fixed linux problem: wrong params getting returned.
+
+2000-05-25 05:38 mslifcak
+
+ * agent/mibgroup/ucd-snmp/: pass.c, pass_persist.c:
+
+ Fix use of bin2asc to not always show "string"; use snmp_oid_compare, too.
+ See bug #234 for details.
+
+2000-05-25 03:39 daves
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (mibII/interfaces.c): Consolidate header handling.
+
+2000-05-25 03:31 daves
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (mibII/interfaces.c): Correct confusing comment
+
+2000-05-25 01:53 daves
+
+ * configure.in, configure:
+
+ - (configure.in configure): Replace use of 'cut' with equivalent 'sed' calls
+
+2000-05-25 01:30 daves
+
+ * aclocal.m4, configure.in, configure:
+
+ - (configure.in aclocal.m4 configure):
+ - Direct certain checks to the appropriate file descriptor (see BUG#247)
+
+2000-05-22 16:22 hardaker
+
+ * apps/.cvsignore:
+
+ - (apps/.cvsignore): add more stuff to ignore.
+
+2000-05-22 16:21 hardaker
+
+ * apps/Makefile.in, apps/snmp_parse_args.c,
+ apps/snmp_parse_args.h, apps/snmpbulkget.c,
+ apps/snmpbulkwalk.c, apps/snmpdelta.c, apps/snmpdf.c
+, apps/snmpget.c, apps/snmpgetnext.c,
+ apps/snmpset.c, apps/snmpstatus.c, apps/snmptable.c
+, apps/snmptest.c, apps/snmptrap.c,
+ apps/snmpusm.c, apps/snmpvacm.c, apps/snmpwalk.c
+, snmplib/Makefile.in, snmplib/snmp_parse_args.c
+, snmplib/snmp_parse_args.h:
+
+ - (Makefile.in, snmp_parse_args.c, snmp_parse_args.h, snmpbulkget.c,
+ snmpbulkwalk.c, snmpdelta.c, snmpdf.c, snmpget.c, snmpgetnext.c,
+ snmpset.c, snmpstatus.c, snmptable.c, snmptest.c, snmptrap.c,
+ snmpusm.c, snmpvacm.c, snmpwalk.c, Makefile.in, snmp_parse_args.c,
+ snmp_parse_args.h):
+ - moved snmp_parse_args to the library, as I promised to do ages ago.
+ - no longer calls usage() directly, but returns -1 if you should.
+
+2000-05-22 05:47 daves
+
+ * snmplib/: tools.c, tools.h:
+
+ - (snmplib/tools.[ch]): Routine for comparing two markers.
+
+2000-05-22 05:42 daves
+
+ * local/mib2c:
+
+ - (local/mib2c): Generate multiple tables in one code file
+
+2000-05-17 10:28 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/vacm_vars.h, snmplib/vacm.c,
+ snmplib/vacm.h:
+
+ - (vacm_vars.c, vacm_vars.h, vacm.c, vacm.h): Patch from Arne Oesleboe:
+ - writable vacm mib support.
+ - other misc vacm fixes.
+
+2000-05-17 10:26 hardaker
+
+ * apps/snmpusm.c:
+
+ - (snmpusm.c): Patch from Arne Oesleboe:
+ - Don't segfault on an unknown command, instead print a warning..
+
+2000-05-17 10:25 hardaker
+
+ * apps/snmpvacm.c:
+
+ - (snmpvacm.c): Patch from Arne Oesleboe:
+ - added a new command: snmpvacm.
+
+2000-05-17 09:25 hardaker
+
+ * agent/agent_read_config.c:
+
+ - (agent_read_config.c): mention the port number on the trapsink help line.
+
+2000-05-17 09:20 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): use standardized buffer sizes
+
+2000-05-17 09:13 hardaker
+
+ * apps/Makefile.in, apps/snmptrapd.c,
+ apps/snmptrapd_log.c, man/snmptrapd.8:
+
+ - (Makefile.in, snmptrapd.c, snmptrapd_log.c, snmptrapd.8): Patch from
+ Jeff Cours:
+ - customized formatting of trap output.
+
+2000-05-17 09:11 hardaker
+
+ * README:
+
+ - (README): add Jeff and Arne.
+
+2000-05-17 08:15 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): *correctly* associate escapeQuotes with the right default_store bool.
+
+2000-05-17 08:11 hardaker
+
+ * man/snmp.conf.5.def:
+
+ - (snmp.conf.5.def): document escapeQuotes.
+
+2000-05-17 08:09 hardaker
+
+ * man/snmpcmd.1, snmplib/default_store.h,
+ snmplib/mib.c:
+
+ - (snmpcmd.1, default_store.h, mib.c): new option -OE:
+ - shell backslash escape quotations marks for cutting and pasting
+ onto another snmp command line.
+
+2000-05-15 09:24 daves
+
+ * agent/mibgroup/mibII/: kernel_linux.c, kernel_linux.h
+, icmp.c, ip.c, ip.h, icmp.h, tcp.c
+, tcp.h, udp.c, udp.h:
+
+ - (mibII/{ip,icmp,tcp,udp,kernel_linux}.[ch]):
+ - Pull Linux MIB-II statistics gathering into a single routine.
+ - Cache MIB-II statistics on all architectures.
+
+2000-05-15 08:53 hardaker
+
+ * agent/mibgroup/: ucd_snmp.h, ucd-snmp/vmstat_bsdi4.c
+, ucd-snmp/vmstat_bsdi4.h:
+
+ - (ucd_snmp.h, vmstat_bsdi4.c, vmstat_bsdi4.h): Patch from Bert Driehuis:
+ - vmstat support for bsdi4.
+
+2000-05-15 03:06 daves
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): Re-remove redundant PDU clone
+ (It reappeared during a recent change)
+
+2000-05-15 03:00 daves
+
+ * agent/: agent_registry.c, agent_index.c,
+ agent_registry.h, mibgroup/agentx/client.c,
+ mibgroup/agentx/master_admin.c:
+
+ - (agent_registry.[ch] agentx/master_admin.c): Implement missing routine 'unregister_mib_context'
+
+ - (agent_registry.[ch] agent_index.[ch]): Move 'fd' registry handling back to agent_registry
+
+ - (agentx/client.c): Recognise new code file for index handling
+
+2000-05-12 10:15 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): Um, default to port 161. Opps.
+
+2000-05-12 09:00 daves
+
+ * agent/: agent_registry.c, agent_registry.h,
+ var_struct.h, mibgroup/agentx/master_admin.c:
+
+ - (agent_registry.[ch] var_struct.h agentx/master_admin.c):
+ - Preparation for per-MIB region timeout, and context support
+
+2000-05-12 08:45 daves
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - (kernel_sunos5.c): Recognise Solaris ATM LAN Emulation interfaces
+ Thanks to Jay Young
+
+2000-05-12 08:13 daves
+
+ * agent/: agent_index.c, agent_index.h, Makefile.in
+, agent_registry.c, agent_registry.h,
+ mibgroup/agentx/master_admin.c:
+
+ - (agent_index.[ch] agent_registry.[ch] Makefile.in agentx/master_admin.c):
+ - Split index handling out from the MIB registry.
+
+2000-05-12 07:02 daves
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - (kernel_sunos5.c): Add support for recognising QuadFastEther interface
+
+2000-05-12 06:57 daves
+
+ * apps/snmptable.c:
+
+ - (apps/snmptable.c): Fix problem with missing separator (with -Ci -Cf)
+ Thanks to Xavier FOURNET
+
+2000-05-12 04:02 daves
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): Remove redundant PDU clone
+ I'm sure this was put in for a reason, but I can't remember what.
+ It doesn't seem to be needed now, and just leaks memory.
+ Here's hoping.....
+
+2000-05-12 03:11 daves
+
+ * agent/snmpd.c:
+
+ - (agent/snmpd.c): Catch (and ignore) SIGPIPE signals.
+ Disappearing subagents therefor appear as normal I/O failures
+
+2000-05-12 02:24 daves
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - (agentx/protocol.c):
+ - Implement opaque-encoded float & double types
+ - Bring packet dump in line with the main library style
+ - Add packet dump capability for outgoing PDUs
+
+2000-05-10 16:52 hardaker
+
+ * man/snmpd.1.def:
+
+ - (snmpd.1.def): document -p.
+
+2000-05-10 16:43 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): always use the default transport mapping, not the last one.
+
+2000-05-10 16:25 hardaker
+
+ * agent/: ds_agent.h, snmp_agent.c, snmpd.c:
+
+ - (ds_agent.h, snmp_agent.c, snmpd.c): implement multiple transport
+ mappings via -p [transport:]port[@address].
+
+2000-05-10 11:08 mslifcak
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ fix udpstat --> tcpstat
+
+2000-05-10 07:59 daves
+
+ * agent/mibgroup/agentx/: master_admin.c, master_request.c
+:
+
+ - (agentx/master_request, agentx/master_admin.c):
+ - Handle subagent disappearing without warning
+
+2000-05-10 07:57 daves
+
+ * agent/snmp_agent.c, snmplib/snmp_api.h:
+
+ - (agent/snmp_agent.c snmplib/snmp_api.h):
+ - Provide a mechanism to handle asynchronous send failures.
+
+2000-05-10 06:13 daves
+
+ * snmplib/snmp_api.h:
+
+ - (snmp_api.h): Logical NOT? Bitwise NOT? Who'll notice the difference anyway!
+
+2000-05-10 05:34 daves
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - (agentx/master_request.c): Handle non-responsive subagents
+
+2000-05-10 05:33 daves
+
+ * agent/: agent_registry.c, mibgroup/mibII/sysORTable.c
+:
+
+ - (agent_registry.c mibII/sysORTable.c): Don't assume subsession link is valid
+
+2000-05-10 05:29 daves
+
+ * snmplib/snmp_api.h:
+
+ - (snmp_api.h): Definitions for session closedown handling
+
+2000-05-09 14:42 mslifcak
+
+ * agent/Makefile.in, apps/Makefile.in,
+ apps/snmpnetstat/Makefile.in:
+
+ also clean Win32 binary objects, and core files.
+
+2000-05-09 14:34 mslifcak
+
+ * apps/: Makefile.in, snmpnetstat/Makefile.in:
+
+ touch up the "clean" rule.
+
+2000-05-09 11:32 mslifcak
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ until Dave's version wins, need snmp_varlist_add_variable to build Win32 agent.
+
+2000-05-09 11:31 mslifcak
+
+ * agent/agent_registry.c:
+
+ fix some Win32 builds (signals? we don't need no steenking signals!)
+
+2000-05-09 11:30 mslifcak
+
+ * ltmain.sh:
+
+ Remove trailing CR [0x0d] from one line.
+
+2000-05-09 08:50 hardaker
+
+ * apps/snmpnetstat/Makefile.in:
+
+ - (Makefile.top, Makefile.in, Makefile.in): fix link time problems
+ with aCC (or any other unknown compiler).
+
+2000-05-09 08:47 hardaker
+
+ * Makefile.top, agent/Makefile.in, apps/Makefile.in
+:
+
+ - (Makefile.top, Makefile.in, Makefile.in): fix link time problems
+ with aCC (or any other unknown compiler).
+
+2000-05-09 07:43 daves
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - (agentx/master_request.c): Send out re-delegated requests
+ (and fix a problem with specifying the end-of-range value)
+
+2000-05-09 07:40 daves
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - (agentx/subagent.c): Fix handling of error response generation
+ (by analogy with recent changes to snmp_agent.c)
+
+2000-05-09 07:34 daves
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): Handle AgentX "end-of-range" indication.
+ (This is not the cleanest way of doing things,
+ but works for now. We can tidy up later).
+
+2000-05-09 07:16 daves
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): Use MIB registry 'start' values
+ (rather than the original name registered)
+ This handles subsequent part of 'split' ranges properly.
+
+2000-05-08 11:08 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): I can't believe the last checkin even compiled (luck).
+
+2000-05-08 11:03 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): fix library list.
+
+2000-05-05 09:56 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ - (diskio.c): Patch from Bert Driehuis:
+ - disk io support for BSD/OS.
+
+2000-05-05 09:54 hardaker
+
+ * agent/mibgroup/mibII/: at.c (V4-1-1-patches.1), at.c:
+
+ - (at.c): Patch from Bert Driehuis:
+ - fix a zero byte malloc bug (mostly noticed with -lefence).
+
+2000-05-05 09:43 hardaker
+
+ * configure (V4-1-1-patches.5), configure, configure.in
+:
+
+ - (configure, configure.in): Patch from Albert Chin-A-Young:
+ - --with-libwrap improvements.
+
+2000-05-05 09:00 daves
+
+ * agent/mibgroup/agentx/: subagent.c, master_request.c
+:
+
+ - (agentx/subagent.c agentx/master_request.c):
+ - Significant improvements to AgentX processing
+ (Thanks to Reiner Beninga)
+
+2000-05-05 08:58 daves
+
+ * snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmp_client.c, agent/snmp_agent.c,
+ agent/snmp_agent.h:
+
+ - (snmplib/snmp_api.[ch] snmplib/snmp_client.c agent/snmp_agent.[ch]):
+ - Minor changes to assist with AgentX development
+ (These may not be absolutely necessary, but they get things working again!)
+
+2000-05-04 16:21 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): minor unimportant --without-openssl fix.
+
+2000-05-04 16:19 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): Patch from John L. Villalovos:
+ - allow --without-openssl to work.
+
+2000-05-04 16:15 hardaker
+
+ * mibs/: Makefile.in (V4-1-1-patches.2), Makefile.in:
+
+ - (Makefile.in): add the DISMAN-SCRIPT-MIB.txt
+
+2000-05-04 16:01 hardaker
+
+ * mibs/Makefile.in:
+
+ - (Makefile.in): Patch from Albert Chin-A-Young:
+ - install UCD-DISKIO-MIB.txt.
+
+2000-05-04 08:26 daves
+
+ * snmplib/: snmp_client.c, snmp_client.h:
+
+ - (snmplib/snmp_client.[ch]): New routine 'snmp_clone_varbind()'
+ (From a suggestion by Reiner Beninga)
+
+2000-05-04 08:24 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): Various minor fixes
+ (Thanks to Reiner Beninga)
+
+2000-05-04 01:29 daves
+
+ * agent/: snmp_agent.c, snmp_agent.h:
+
+ - (snmp_agent.[ch]): Handle index/status information separately from PDU.
+ Also means that delegated requests have access to variable indexes
+ (Based on a suggestion from Reiner Beninga)
+
+2000-05-04 01:00 daves
+
+ * agent/mibgroup/ucd-snmp/proc.c:
+
+ - (ucd-snmp/proc.c): Initialize newly malloced structure
+ (Thanks to Jeff Wilson - see BUG #231)
+
+2000-05-03 09:06 daves
+
+ * agent/: snmp_agent.c, snmp_agent.h,
+ mibgroup/agentx/master_admin.c:
+
+ - (snmp_agent.[ch] agentx/master_admin.c):
+ - Clone PDU within init_agent_snmp_session.
+ New routine 'free_agent_snmp_session'
+ (Thanks to Reiner Beninga)
+
+2000-05-03 08:17 daves
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): When returning an error response,
+ use a clean copy of the original request PDU.
+
+2000-05-03 08:14 daves
+
+ * agent/: snmp_agent.c, snmp_agent.h:
+
+ - (snmp_agent.[ch]): Routine to handle variables individually
+ (Thanks to Reiner Beninga)
+
+2000-05-03 04:37 daves
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): Check accessibility of exact requests before processing
+ (and remove redundant 'generic' SET handling)
+
+2000-05-01 11:34 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: fix printing of BITS variables
+
+2000-05-01 06:55 marz
+
+ * perl/SNMP/t/mib.t:
+
+ applied patch from Steve Pheran Snodgrass to fix incompatibility with perl5.6 ref stringification
+
+2000-04-29 07:46 hardaker
+
+ * config.h.in, configure.in, agent/agent_registry.c
+:
+
+ - (config.h.in, configure.in, agent_registry.c): Patch from Frank Strauss:
+ - use sigaction when available.
+
+2000-04-28 07:36 hardaker
+
+ * agent/: agent_registry.c, snmpd.c:
+
+ - (agent_registry.c, snmpd.c): Patch from Frank Strauss:
+ - fix signal handling.
+
+2000-04-27 14:58 hardaker
+
+ * apps/: Makefile.in, snmpdf.c:
+
+ - (Makefile.in, snmpdf.c): implement a remote df command via snmp
+ - (needs the host resources mib working on the remote system).
+
+2000-04-27 10:57 hardaker
+
+ * Makefile.top, config.h.in, configure,
+ configure.in:
+
+ - (Makefile.top, config.h.in, configure, configure.in): rpm is now
+ requiring yet another library: libpopt.
+
+2000-04-26 15:20 hardaker
+
+ * Makefile.top:
+
+ - (Makefile.top): run libtool --finish without -n (go ahead and do the cmds)
+
+2000-04-26 15:19 hardaker
+
+ * Makefile.top, configure, configure.in,
+ agent/Makefile.in:
+
+ - (Makefile.top, configure, configure.in, agent/Makefile.in):
+ - more libtool fixes (.so versioning, properly install...)
+
+2000-04-26 14:18 hardaker
+
+ * apps/.cvsignore, apps/Makefile.in,
+ apps/snmpnetstat/.cvsignore, apps/snmpnetstat/Makefile.in
+, local/Makefile.in, man/Makefile.in,
+ mibs/Makefile.in, snmplib/.cvsignore,
+ snmplib/Makefile.in:
+
+ - (*/.cvsignore, */Makefile.in, Makefile.top, aclocal.m4, configure,
+ configure.in, ltconfig, ltmain.sh):
+ - use libtool for building.
+ - Certainly, I must have broke something in the process. (make depend, eg)
+
+2000-04-26 14:15 hardaker
+
+ * .cvsignore, Makefile.in, Makefile.top,
+ aclocal.m4, configure, configure.in,
+ ltconfig, ltmain.sh, agent/.cvsignore,
+ agent/Makefile.in, agent/mibgroup/.cvsignore,
+ agent/mibgroup/Makefile.in, agent/mibgroup/agentx/.cvsignore
+, agent/mibgroup/dummy/.cvsignore,
+ agent/mibgroup/examples/.cvsignore,
+ agent/mibgroup/host/.cvsignore,
+ agent/mibgroup/ipfwchains/.cvsignore,
+ agent/mibgroup/mibII/.cvsignore,
+ agent/mibgroup/misc/.cvsignore,
+ agent/mibgroup/smux/.cvsignore,
+ agent/mibgroup/snmpv3/.cvsignore,
+ agent/mibgroup/target/.cvsignore,
+ agent/mibgroup/ucd-snmp/.cvsignore,
+ agent/mibgroup/v2party/.cvsignore,
+ agent/mibgroup/vestinternett/.cvsignore:
+
+ - (*/.cvsignore, */Makefile.in, Makefile.top, aclocal.m4, configure,
+ configure.in, ltconfig, ltmain.sh):
+ - use libtool for building.
+ - Certainly, I must have broke something in the process. (make depend, eg)
+
+2000-04-26 08:11 hardaker
+
+ * FAQ:
+
+ - (FAQ): new secondary slogan.
+
+2000-04-26 07:22 hardaker
+
+ * snmplib/: snmp_api.c, snmpusm.c:
+
+ - (snmp_api.c, snmpusm.c): Attempt to parse the PDU when a report is
+ being sent so that the requestid can be used in the outgoing report.
+ This should fix a problem where SNMP Research's Emante agent is
+ doing engineID discovery probes based on the request_id (which is a
+ fairly poor choice as the message_id would be a better one to match
+ on in general and is the only possible thing to use in cases where
+ the report is encrypted).
+
+2000-04-25 13:08 hardaker
+
+ * FAQ:
+
+ - (FAQ): mention that the perl module is included with the source.
+
+2000-04-25 08:24 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): misc -Ddump fixes.
+
+2000-04-25 08:02 hardaker
+
+ * apps/: snmptable.c (V4-1-1-patches.4), snmptable.c:
+
+ - (snmptable.c): check for end of mib view exceptions (v2c, v3).
+
+2000-04-24 11:27 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): -D support for those "older" protocols that shouldn't
+ be used anymore (v1, v2c).
+
+2000-04-24 10:36 hardaker
+
+ * snmplib/: asn1.c, default_store.h, mib.c,
+ snmp.c, snmp_api.c, snmp_auth.c, snmp_debug.c
+, snmp_debug.h, snmpusm.c:
+
+ - (asn1.c, default_store.h, mib.c, snmp.c, snmp_api.c, snmp_auth.c,
+ snmp_debug.c, snmp_debug.h, snmpusm.c):
+ - timestamps can be printed as a numeric number only (-Ot).
+ - more configurable packet dumping code for both send and receive.
+ - uses new -D tokens: dumph (headers), dumpx (hex), dumpv
+ (values). dumpx_ and dumpv_ (note the _s) make it eat space
+ (and newline) before the segment in question. Try -Ddump then
+ -Ddumph,dumpv_ to see examples.
+ - todo:
+ - better horizontally formated information (probably using "%NUMs").
+ - USM is called after pdu building (makes sense but is backwards
+ visually in the dumped packet).
+ - option to strip datatype token (ie Integer:).
+
+2000-04-24 09:37 hardaker
+
+ * bug-report, version.h, FAQ, README,
+ sedscript.in:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.2.pre0 )
+
+2000-04-24 09:13 hardaker
+
+ * version.h, README, bug-report, sedscript.in
+, FAQ:
+
+ - (version.h bug-report sedscript.in): version tag ( EXT.4.2.pre0 )
+
+2000-04-21 14:13 hardaker
+
+ * apps/: snmpwalk.c (V4-1-1-patches.1), snmpwalk.c:
+
+ - (snmpwalk.c): fix GET call for an snmpwalk. (was using a GETNEXT PDU, ack).
+
+2000-04-21 10:41 hardaker
+
+ * snmplib/snmpv3.c:
+
+ - (snmpv3.c): more u_long -> size_t for engineID len.
+
+2000-04-21 08:18 hardaker
+
+ * snmplib/: mib.c (V4-1-1-patches.5), mib.c:
+
+ - (mib.c): fix fprint_description to check for null subtrees.
+
+2000-04-21 08:17 hardaker
+
+ * snmplib/: snmpv3.c, snmpv3.h:
+
+ - (snmpv3.c, snmpv3.h): use size_t for engineid lengths.
+
+2000-04-19 11:02 marz
+
+ * win32/config.h:
+
+ changed mode_t typedef to agree with what ActiveState perl uses (anyone have a problem with this?)
+
+2000-04-19 10:59 marz
+
+ * perl/SNMP/SNMP.xs:
+
+ added Marc Lehman patch to ensure alloc/dealloc use same mechanism (perl vs. system default)
+
+2000-04-19 08:26 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): agent_check_and_process() always block if caller requested it.
+
+2000-04-19 04:34 mslifcak
+
+ * snmplib/: snmpv3.c, snmpv3.h:
+
+ move static decl to .c;minor casting about to support aCC
+
+2000-04-18 11:11 mslifcak
+
+ * apps/snmptable.c:
+
+ Synch devel branch with patches branch.
+
+2000-04-18 11:07 mslifcak
+
+ * apps/snmpdelta.c, apps/snmpget.c, apps/snmpgetnext.c,
+ apps/snmpset.c, apps/snmpstatus.c, win32/libsnmp_dll/libsnmp.def
+ (V4-1-1-patches.[3,3,3,2,3,2]), apps/snmpdelta.c,
+ apps/snmpget.c, apps/snmpgetnext.c, apps/snmpset.c
+, apps/snmpstatus.c, win32/libsnmp_dll/libsnmp.def
+:
+
+ Define optarg for apps use; Define vacm_is_configured for agent use.
+
+2000-04-18 07:57 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/ucd-snmp/vmstat.h, mibs/UCD-SNMP-MIB.txt
+:
+
+ - (vmstat.c, vmstat.h, UCD-SNMP-MIB.txt): Patch from Mizuki Honda:
+ - implement raw cpu usage numbers.
+
+2000-04-18 03:18 daves
+
+ * man/snmptable.1, apps/snmptable.c (V4-1-1-patches.[1,3]),
+ man/snmptable.1, apps/snmptable.c:
+
+ - (man/snmptable.1 apps/snmptable.c):
+ - Command-specific '-C' options for snmptable
+
+2000-04-18 02:01 daves
+
+ * apps/: snmp_parse_args.c (V4-1-1-patches.4), snmp_parse_args.c
+:
+
+ - (apps/snmp_parse_args.c): Handle previous form of -Z option as well
+
+2000-04-17 15:36 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): fix -Z if args are wrong.
+
+2000-04-17 15:32 hardaker
+
+ * apps/snmp_parse_args.c, man/snmpcmd.1:
+
+ - (snmp_parse_args.c, snmpcmd.1): fix -Z to use a ','.
+
+2000-04-17 15:06 hardaker
+
+ * agent/mibgroup/mibII/: mta_sendmail.c, mta_sendmail.h
+:
+
+ - (mta_sendmail.c, mta_sendmail.h): Patch from Christoph Mammitzsch:
+ - update on the sendmail module.
+
+2000-04-17 15:00 hardaker
+
+ * agent/mibgroup/ucd-snmp/: vmstat.c (V4-1-1-patches.1), vmstat.c
+:
+
+ - (vmstat.c): Patch from John L. Villalovos:
+ - fix ssCpuSystem, ssCpuUser, ssCpuIdle.
+
+2000-04-17 14:18 hardaker
+
+ * Makefile.top, apps/Makefile.in:
+
+ - (Makefile.top, Makefile.in): properly use LN_S for linking snmpinform.
+
+2000-04-17 13:45 hardaker
+
+ * snmplib/: snmpusm.c, snmpv3.c, snmpv3.h:
+
+ - (snmpusm.c, snmpv3.c, snmpv3.h): engineID changes for better aCC support.
+
+2000-04-17 13:44 hardaker
+
+ * apps/.cvsignore:
+
+ - (.cvsignore): ignore snmpinform.
+
+2000-04-17 09:58 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): fix row creation.
+
+2000-04-17 07:25 daves
+
+ * agent/: auto_nlist.c, snmpd.c, mibgroup/agentx/master.c
+ (V4-1-1-patches.[2,3,2]), auto_nlist.c, snmpd.c,
+ mibgroup/agentx/master.c:
+
+ - (auto_nlist.c snmpd.c agentx/master.c): Don't exit on failure with '-r'
+
+2000-04-14 15:07 hardaker
+
+ * apps/snmp_parse_args.c, apps/snmpdelta.c,
+ apps/snmpget.c, apps/snmpgetnext.c, apps/snmpstatus.c
+, man/snmpcmd.1, man/snmpget.1,
+ snmplib/default_store.h, snmplib/mib.c:
+
+ - (snmp_parse_args.c, snmpdelta.c, snmpget.c, snmpgetnext.c,
+ snmpstatus.c, snmpcmd.1, snmpget.1, default_store.h, mib.c):
+ - move -If to -Cf and invert behaviour.
+
+2000-04-14 15:06 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): remove debugging output (opps).
+
+2000-04-14 09:03 hardaker
+
+ * agent/mibgroup/ucd-snmp/: versioninfo.c (V4-1-1-patches.2),
+ versioninfo.c:
+
+ - (versioinfo.c): alright. Who made versionClearCache RONLY?
+
+2000-04-13 05:49 nba
+
+ * man/snmptranslate.1:
+
+ - snmptranslate.1: decument the -w width option
+
+2000-04-12 12:05 mslifcak
+
+ * bug-report (V4-1-1-patches.1), bug-report:
+
+ hide user's hostname; prompt before sending e-mail; prompt to save as file.
+
+2000-04-12 11:22 mslifcak
+
+ * snmplib/: mib.c (V4-1-1-patches.3), mib.c:
+
+ fix %f(%s)
+
+2000-04-12 09:29 hardaker
+
+ * man/: snmpcmd.1 (V4-1-1-patches.2), snmpcmd.1:
+
+ - (snmpcmd.1): document -If.
+
+2000-04-12 09:17 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): put ++ back in that accidentically got checked in.
+
+2000-04-12 09:16 hardaker
+
+ * apps/snmpset.c:
+
+ - (snmpset.c): put space back in usage line.
+
+2000-04-12 09:12 hardaker
+
+ * apps/snmp_parse_args.c, apps/snmpdelta.c,
+ apps/snmpget.c, apps/snmpgetnext.c, apps/snmpset.c
+, apps/snmpstatus.c, snmplib/default_store.h,
+ snmplib/mib.c:
+
+ - (snmp_parse_args.c, snmpdelta.c, snmpget.c, snmpgetnext.c,
+ snmpset.c, snmpstatus.c, default_store.h, mib.c):
+ - Add a new option -If to specify fixing of PDUs.
+ - Anyone know a better place to put this option?
+ - Applications don't do this by default anymore, and you can't in snmpset.
+
+2000-04-12 07:38 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c, snmplib/vacm.c,
+ snmplib/vacm.h:
+
+ - (vacm_vars.c, vacm.c, vacm.h): fix to allow no v1/v2c requests when
+ configured for just v3.
+
+2000-04-12 06:49 mslifcak
+
+ * win32/: win32.dsw, libsnmp_dll/libsnmp.def
+ (V4-1-1-patches.[1,1]), win32.dsw, libsnmp_dll/libsnmp.def
+:
+
+ fix MSVC build for encode_keychange, and add more symbols for release builds
+
+2000-04-12 05:32 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: correct parsing of sub-types textual conventions. Allow parsing
+ of MACRO invocations for standard symbols
+
+2000-04-12 05:31 nba
+
+ * apps/snmptranslate.c, snmplib/parse.c,
+ snmplib/parse.h:
+
+ - parse.[ch], snmptranslate.c: allow specification of with for -Tp
+
+2000-04-12 05:30 nba
+
+ * mibs/: HOST-RESOURCES-MIB.txt, HOST-RESOURCES-TYPES.txt
+:
+
+ - HOST-RESOURCES-MIB.txt, HOST-RESOURCES-TYPES.txt: align with published
+ RFC 2790
+
+2000-04-11 15:33 hardaker
+
+ * configure, configure.in, mibs/Makefile.in:
+
+ - (configure, configure.in): make config_add_mib() actually look for
+ the mib in $srcdir/mibs/blah and install it if found.
+
+2000-04-11 15:21 hardaker
+
+ * snmplib/: snmpv3.c, snmpv3.h:
+
+ - (snmpv3.c, snmpv3.h): make macaddr engineid setup not linux
+ specific, but #defines are checked instead.
+
+2000-04-11 15:20 hardaker
+
+ * snmplib/snmp_logging.h:
+
+ - (snmp_logging.h): remove old callback typedef no longer needed.
+
+2000-04-11 14:38 hardaker
+
+ * snmplib/: snmpv3.c, snmpv3.h:
+
+ - (snmpv3.c, snmpv3.h): Patch from John L. Villalovos:
+ - enable engineID to be set from MACAddr.
+
+2000-04-11 09:51 hardaker
+
+ * agent/mibgroup/mibII/: mta_sendmail.c, mta_sendmail.h
+:
+
+ - (mta_sendmail.c, mta_sendmail.h): New module from Christoph Mammitzsch:
+ - implements the MTA-MIB for monitoring sendmail.
+
+2000-04-11 09:50 hardaker
+
+ * mibs/: MTA-MIB.txt, NETWORK-SERVICES-MIB.txt:
+
+ - (MTA-MIB.txt, NETWORK-SERVICES-MIB.txt): new mibs for new modules.
+
+2000-04-11 03:25 daves
+
+ * agent/snmp_agent.c:
+
+ - (agent/snmp_agent.c): Save/restore original statP value for SET handling.
+
+2000-04-11 02:35 daves
+
+ * agent/: snmp_agent.c (V4-1-1-patches.2), snmp_agent.c:
+
+ - (agent/snmp_agent.c): Report failures from ACTION phase of SET correctly.
+
+2000-04-11 01:57 daves
+
+ * agent/mibgroup/agentx/: master_request.c (V4-1-1-patches.3),
+ master_request.c:
+
+ - (agentx/master_request.c): Dynamically resize subagent requests
+ (Thanks to Reiner Beninga)
+
+2000-04-10 05:08 daves
+
+ * agent/: snmp_agent.c, mibgroup/agentx/master_request.c
+ (V4-1-1-patches.[0,2]), snmp_agent.c,
+ mibgroup/agentx/master_request.c:
+
+ - (snmp_agent.c agentx/master_request.c): Fix multi-subagent requests
+ (Thanks to Reiner Beninga)
+
+2000-04-07 12:25 hardaker
+
+ * apps/snmptrap.c, snmplib/snmpusm.c (V4-1-1-patches.[2,2]),
+ apps/snmptrap.c, snmplib/snmpusm.c:
+
+ - (snmptrap.c, snmpusm.c):
+ - fix snmpv3 traps to be authoritative from the client side, not the
+ receiver side. snmpv3 informs stay as is. Unfortunately, for
+ command line apps this doesn't make a whole lot of sense but is
+ right in terms of how the protocol works and this is hence
+ somewhat of a hack.
+
+2000-04-07 07:50 daves
+
+ * agent/: snmp_agent.c (V4-1-1-patches.9), snmp_agent.c:
+
+ - (agent/snmp_agent.c): Handle v2 exception types in v1 queries
+
+2000-04-07 07:16 hardaker
+
+ * apps/snmptrapd.c, snmplib/read_config.c, snmplib/snmpv3.c
+ (V4-1-1-patches.[4,2,3]), apps/snmptrapd.c,
+ snmplib/read_config.c, snmplib/snmpv3.c:
+
+ - (snmptrapd.c, read_config.c, snmpv3.c):
+ - allow NULL help lines for config directives and use it to hide
+ internal directives used for persistent storage.
+
+2000-04-06 15:31 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmp_api.c, snmp_api.h):
+ - turn backwards compatibility macros back into functions so
+ default_store.h dependencies go away again.
+ - create a flag to not probe for engineIDs durning sess_open().
+
+2000-04-06 07:20 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): Fix mishandled Counter64 parsing
+
+2000-04-06 03:36 daves
+
+ * agent/snmpd.c:
+
+ - (agent/snmpd.c): Fix usage message alignment.
+
+2000-04-06 03:31 daves
+
+ * man/: snmpd.1.def (V4-1-1-patches.1), snmpd.1.def:
+
+ - (man/snmpd.1.def): Document the AgentX socket command-line option
+
+2000-04-05 08:41 hardaker
+
+ * local/FAQ2HTML:
+
+ - (FAQ2HTML): it's been sitting in my personal src tree for > 2 years.
+
+2000-04-05 08:38 hardaker
+
+ * agent/mibgroup/mibincl.h, agent/mibgroup/snmpv3/usmUser.c
+, apps/snmptrapd.c, snmplib/lcd_time.c,
+ snmplib/scapi.c, snmplib/snmp_api.c,
+ snmplib/snmpusm.c, snmplib/snmpusm.h, snmplib/snmpv3.c
+:
+
+ - (mibincl.h, usmUser.c, snmptrapd.c, lcd_time.c, scapi.c, snmp_api.c,
+ snmpusm.c, snmpusm.h, snmpv3.c):
+ - make snmptrapd handle v3 users properly, (and shutdown properly as well).
+ - a more generic user storage routine added to snmpusm.c and used in
+ usmUser.c with a side effect of needing callback.h above snmpusm.h.
+
+2000-04-05 08:27 hardaker
+
+ * local/rsnmp:
+
+ - (rsnmp): -> /usr/bin/perl
+
+2000-04-05 08:24 hardaker
+
+ * .cvsignore:
+
+ - (.cvsignore): misc minor additions to /
+
+2000-04-04 11:03 daves
+
+ * agent/: snmp_agent.c (V4-1-1-patches.8), snmp_agent.c:
+
+ - (agent/snmp_agent.c): Ensure unimplemented objects return 'noSuchObject'
+
+2000-04-03 14:57 mslifcak
+
+ * agent/snmp_agent.c:
+
+ Initialize statP.
+
+2000-04-03 09:12 daves
+
+ * agent/: snmp_agent.c (V4-1-1-patches.7), snmp_agent.c:
+
+ - (agent/snmp_agent.c): Ensure a v1 SET returns a v1 error status.
+
+2000-04-03 08:32 hardaker
+
+ * ChangeLog:
+
+ - (ChangeLog): Year was "100" for 2000 (noticed by Jay Riddell):
+
+2000-04-03 07:53 daves
+
+ * agent/: snmp_agent.c (V4-1-1-patches.6), snmp_agent.c:
+
+ - (agent/snmp_agent.c): Ensure SETs fail if one varbind does.
+
+2000-03-31 07:25 daves
+
+ * agent/: snmp_vars.c (V4-1-1-patches.2), snmp_vars.c:
+
+ - (agent/snmp_vars.c): Fix to report 'noSuchObject' in certain circumstances
+
+2000-03-31 07:13 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): Don't repeat the first four bytes in a PDU dump
+
+2000-03-31 07:04 daves
+
+ * snmplib/: snmp_logging.c (V4-1-1-patches.2), snmp_logging.c
+:
+
+ - (snmplib/snmp_logging.c): Handle logging empty strings (e.g. a null indent)
+
+2000-03-30 00:15 daves
+
+ * agent/: snmp_agent.c (V4-1-1-patches.5), snmp_agent.c:
+
+ - (agent/snmp_agent.c): Initialise timeout structure properly
+ (Thanks to ashipman@erggroup.com)
+
+2000-03-27 10:32 mslifcak
+
+ * agent/mibgroup/host/: hr_swrun.c (V4-1-1-patches.2), hr_swrun.c
+:
+
+ remove trailing newline from hrSWRunName values.
+
+2000-03-24 09:09 mslifcak
+
+ * man/snmpinform.1:
+
+ to sync with patches branch.
+
+2000-03-24 05:07 nba
+
+ * apps/snmptrapd.c:
+
+ - snmptrapd.c: correctly free the reponse if sending it fails
+
+2000-03-24 04:22 mslifcak
+
+ * snmplib/snmp_client.c:
+
+ xx_synch_response: avoid freeing PDU twice.
+
+2000-03-23 23:29 nba
+
+ * man/Makefile.in, man/snmpcmd.1, man/snmptrap.1
+, apps/Makefile.in, apps/snmptrap.c:
+
+ - snmpcmd.1, snmptrap.1, snmptrap.c, Makefile.in: Install and document
+ snmpinform.
+
+2000-03-23 09:58 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ Enqueue only complete request_list entry; Reduce scoping of callback vars.
+
+2000-03-23 03:02 nba
+
+ * man/snmpinform.1:
+
+ file snmpinform.1 was initially added on branch V4-1-1-patches.
+
+2000-03-22 08:13 mslifcak
+
+ * agent/mibgroup/host/hr_print.c:
+
+ printf ?
+
+2000-03-21 11:12 mslifcak
+
+ * configure, configure.in:
+
+ modify F. Strauss' patch per N. Baggesen's suggestion: remove export-dynamic.
+
+2000-03-21 09:14 mslifcak
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ more smooth sailing with Win32 .DLL . DLLEXPORT, anyone ?
+
+2000-03-21 09:07 mslifcak
+
+ * agent/: agent_registry.c, mibgroup/mibII/system_mib.c
+:
+
+ win32 build check: no sigaction, SIGCLD defined.
+
+2000-03-21 08:47 daves
+
+ * agent/: ds_agent.h, snmpd.c,
+ mibgroup/agentx/master.c, mibgroup/agentx/subagent.c:
+
+ - (ds_agent.h snmpd.c mibgroup/agentx/{master,subagent}.c):
+ - Command-line option for specifying AgentX port
+ (based on patch from Frank Strauss)
+
+2000-03-21 08:38 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Support 'host:port' representation of peernames
+
+2000-03-21 04:05 daves
+
+ * agent/: snmp_agent.c (V4-1-1-patches.4), snmp_agent.c:
+
+ - (snmp_agent.c): Missing new-line on debug output
+
+2000-03-21 02:52 daves
+
+ * agent/mibgroup/mibII/: tcp.c, tcp.h, tcpTable.c
+, tcpTable.h, udp.c, icmp.c, udp.h,
+ udpTable.c, udpTable.h, icmp.h, ip.c,
+ system_mib.c:
+
+ - (mibII/{tcp,udp,ip,icmp}*) Continuing mibII code cleanup
+
+2000-03-20 11:14 mslifcak
+
+ * apps/snmptable.c:
+
+ Comment -C -- do not use this flag.
+
+2000-03-17 15:32 hardaker
+
+ * agent/mibgroup/header_complex.c:
+
+ - (header_complex.c): sizeof(x)*(len+1) not sizeof(x)*len+1
+
+2000-03-16 00:10 nba
+
+ * acconfig.h, configure.in, config.h.in,
+ configure, agent/mibgroup/host/hr_print.c:
+
+ - configure, hr_print.c: detect system printers (SysV/lpstat, *BSD/cgetnext,
+ Linux/printcap)
+
+2000-03-15 18:30 mslifcak
+
+ * agent/agent_registry.c:
+
+ Second part: all members of struct snmp_index are pointers.
+
+2000-03-15 15:07 mslifcak
+
+ * agent/agent_registry.c:
+
+ Fix memory leak with unregister_index.
+
+2000-03-15 15:07 mslifcak
+
+ * agent/mibgroup/smux/smux.c:
+
+ Fix memory leak when cleaning up trap variables.
+
+2000-03-15 08:48 daves
+
+ * snmplib/: snmp_api.c, snmp_client.c:
+
+ - (snmp_api.c snmp_client.c): Initialise varbind data hook elsewhere as well.
+
+2000-03-15 07:57 daves
+
+ * agent/mibgroup/agentx/: master_request.c (V4-1-1-patches.1),
+ master_request.c:
+
+ - (agentx/master_request.c): Fix infinite loop problem when walking subagent.
+
+2000-03-15 06:09 daves
+
+ * agent/snmp_agent.c:
+
+ - (agent/snmp_agent.c): Avoid calling read routine for each SET handling pass.
+ N.B: This hasn't been tested with AgentX subagents yet
+
+2000-03-15 06:07 daves
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmplib/snmp_api.[ch]): Provide hook for internal varbind-related data
+
+2000-03-15 05:22 daves
+
+ * agent/var_struct.h:
+
+ - (agent/var_struct.h): Use a single magic number for MIB registry name lengths.
+
+2000-03-15 01:51 daves
+
+ * snmplib/: system.h (V4-1-1-patches.1), system.h:
+
+ - (snmplib/system.h): Don't declare gettimeofday() if the system provides it.
+ (Fix provided by Ron Mevissen)
+
+2000-03-14 07:57 daves
+
+ * agent/: snmp_agent.c (V4-1-1-patches.3), snmp_agent.c:
+
+ - (agent/snmp_agent.c): Don't overwrite saved status when checking access.
+
+2000-03-14 07:52 daves
+
+ * agent/: snmp_agent.c (V4-1-1-patches.2), snmp_agent.c:
+
+ - (agent/snmp_agent.c): Return a response, even if the request failed.
+
+2000-03-13 15:32 nba
+
+ * agent/mibgroup/misc/ipfwacc.h:
+
+ - ipfwacc.h: fix the MIB name
+
+2000-03-10 12:48 hardaker
+
+ * configure:
+
+ - (configure): autoconf run
+
+2000-03-10 11:09 hardaker
+
+ * agent/mibgroup/examples/Makefile.dlmod:
+
+ - (Makefile.dlmod): Patch from Frank Strauss:
+ - dlmod build Makefile example. Needs incorperation with main configure.
+
+2000-03-10 11:02 hardaker
+
+ * agent/agent_registry.c:
+
+ - (agent_registry.c): better signal check from Michael Slifcak
+
+2000-03-10 10:59 hardaker
+
+ * mibs/UCD-DLMOD-MIB.txt:
+
+ - (UCD-DLMOD-MIB.txt): typo found by Michael Slifcak.
+
+2000-03-10 10:54 hardaker
+
+ * agent/mibgroup/ucd-snmp/dlmod.c,
+ agent/mibgroup/ucd-snmp/dlmod.h, man/snmpd.conf.5.def,
+ mibs/UCD-DLMOD-MIB.txt:
+
+ - (dlmod.c, dlmod.h, snmpd.conf.5.def, UCD-DLMOD-MIB.txt): Patch from
+ Frank Strauss:
+ - Reimplementation of the dlmod mib module:
+ o mibgroup/misc/dlmod + dlmods/dlmod_mib -> mibgroup/ucd-snmp/dlmod
+ o fixed registration (ucdavis.ucdExperimental.14 instead of ucdavis.14)
+ o added configure stuff for HAVE_SNPRINTF, which was used by dlmod.c
+ o removed `_dynamic_' prefixes from init/deinit functions
+ o made dlmodIndex not-accessible (only implementation, not definition)
+ o removed the asn_parse_XXX stuff
+ o made entries with state `error' able to accept state `load'
+ o made the wombat example usable as static and dynamic module
+ o added simple config_parse functionality to the wombat example
+
+2000-03-10 10:52 hardaker
+
+ * agent/: agent_registry.c, agent_registry.h, snmpd.c
+:
+
+ - (agent_registry.c, agent_registry.h, snmpd.c): Patch from Frank Strauss:
+ - signal registry system implemented (needs to be redone allowing
+ multiple callbacks and handlers for all signals).
+ - arbitrary file descriptor/socket registration.
+ - this is not the way it should be done (use sessions instead).
+
+2000-03-10 10:44 hardaker
+
+ * Makefile.in, Makefile.top, acconfig.h,
+ config.h.in, configure.in, agent/Makefile.in
+, agent/mibgroup/Makefile.in, apps/Makefile.in
+, snmplib/Makefile.in, testing/Makefile.in:
+
+ - (Makefile.in, Makefile.top, acconfig.h, config.h.in, configure.in,
+ Makefile.in, Makefile.in, Makefile.in, Makefile.in, Makefile.in):
+ Patch from Frank Strauss:
+ - clean up shared library usage.
+
+2000-03-10 10:16 hardaker
+
+ * config.h.in:
+
+ - (config.h.in): autoheader re-arranged some stuff.
+
+2000-03-07 11:58 mslifcak
+
+ * apps/snmptrapd.c:
+
+ more touchups to allow UnixWare build to complete.
+
+2000-03-07 11:21 hardaker
+
+ * snmplib/default_store.h:
+
+ - (default_store.h): make MAX_SUBIDS larger and a multiple of 8.
+
+2000-03-07 10:13 mslifcak
+
+ * FAQ, configure, configure.in:
+
+ Introduce --enable-mini-agent to configure agent (snmpv3, no mibII interfaces).
+
+2000-03-07 09:03 mslifcak
+
+ * snmplib/snmpv3.c:
+
+ assume "snmpapp" if no arg passed to init_snmpv3.
+
+2000-03-07 08:58 mslifcak
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ remove init_mib() call - not appropriate here.
+
+2000-03-07 08:35 mslifcak
+
+ * agent/mibgroup/ucd-snmp/loadave.c:
+
+ Let the aix4 patch work.
+
+2000-03-07 07:08 mslifcak
+
+ * configure, configure.in, agent/snmp_vars.c
+, agent/mibgroup/ucd-snmp/loadave.c:
+
+ trim fat from recent check-ins.
+
+2000-03-06 20:01 mslifcak
+
+ * config.h.in:
+
+ cleaned up SCO UnixWare build.
+
+2000-03-06 16:40 mslifcak
+
+ * Makefile.in, config.guess, config.h.in,
+ config.sub, configure, configure.in:
+
+ start support for SCO UnixWare 5 as svr5.
+
+2000-03-06 10:56 hardaker
+
+ * snmplib/: default_store.h, snmp_api.c:
+
+ - (default_store.h, snmp_api.c): Patch from Robert Story:
+ - don't check ranges if not requested.
+
+2000-03-06 10:55 hardaker
+
+ * agent/: snmp_agent.c, snmp_agent.h, snmpd.c
+:
+
+ - (snmp_agent.c, snmp_agent.h, snmpd.c): Patch from Robert Story:
+ - fix exit()ing behaviour in the libucdagent library.
+
+2000-03-06 10:36 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): Patch from Robert Story:
+ - -n prints numeric IP addrs.
+
+2000-03-06 10:25 hardaker
+
+ * snmplib/: callback.h, snmp_logging.c, snmp_logging.h
+:
+
+ - (callback.h, snmp_logging.c, snmp_logging.h): Idea from ashipman@erggroup.com:
+ - callback function (using callback.h) added for external logging.
+
+2000-03-05 05:25 marz
+
+ * perl/SNMP/SNMP.pm:
+
+ fix to preserve trailing multi component instance id's at the end of
+ symbolic mib names(e.g., foo.6.7) when doing translateObj.
+
+2000-03-04 11:34 nba
+
+ * configure.in, configure:
+
+ - configure.in, configure: support --without-openssl, even if OpenSSL
+ is available
+
+2000-03-04 11:30 nba
+
+ * agent/: kernel.c, kernel.h, snmp_vars.c,
+ mibgroup/host/hr_swrun.c, mibgroup/mibII/var_route.c,
+ mibgroup/ucd-snmp/loadave.c, mibgroup/ucd-snmp/proc.c
+:
+
+ - agent/(various): globalize the kvm_t *kd variable
+
+2000-03-04 11:26 nba
+
+ * agent/: mib_modules.c, mibgroup/host/hr_storage.c:
+
+ - mib_modules.c, hr_storage.c: pre-processor # should be in column 1
+
+2000-03-04 11:17 nba
+
+ * apps/snmpnetstat/: inet.c, inet6.c:
+
+ - inet.c, inet6.c: survive -v 2c exception replies
+
+2000-03-04 11:17 nba
+
+ * snmplib/snmp_api.c:
+
+ - snmp_api.c: remove a superfluous & in front of an array
+
+2000-03-04 11:15 nba
+
+ * agent/mibgroup/: ucd_snmp.h, ucd-snmp/memory_netbsd1.c
+, ucd-snmp/memory_netbsd1.h, ucd-snmp/vmstat_netbsd1.c
+, ucd-snmp/vmstat_netbsd1.h:
+
+ - ucd_snmp.h, {memory,vmstat}_netbsd1.[ch]: support for NetBSD
+
+2000-03-04 11:14 nba
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ - hr_disk.c: fixes for NetBSD
+
+2000-03-04 11:10 nba
+
+ * agent/mibgroup/ucd-snmp/versioninfo.c:
+
+ - versioninfo.c: don't return the trailing newline
+
+2000-03-04 11:08 nba
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ - hr_swrun.c: fix process size for FreeBSD 3 and NetBSD
+
+2000-03-04 11:05 nba
+
+ * agent/agent_trap.h:
+
+ - agent_trap.h: fix a wrong prototype
+
+2000-03-04 11:04 nba
+
+ * apps/snmptable.c:
+
+ - snmptable.c: fix problems printing table name and headers when using
+ -OS format
+
+2000-03-02 11:50 nba
+
+ * snmplib/snmp_api.c:
+
+ - snmp_api.c: fix address length info for tcp connect
+
+2000-03-02 11:48 nba
+
+ * agent/mibgroup/ucd-snmp/loadave.c:
+
+ - loadave.c: fix for AIX 4
+
+2000-03-02 08:30 daves
+
+ * agent/mibgroup/mibII/: ip.c, ipAddr.c, ipAddr.h
+, ip.h:
+
+ - (mib2/ip.[ch] mib2/ipAddr.[ch]): First stab at tidying up mib2 support.
+
+2000-03-01 08:32 mslifcak
+
+ * snmplib/mt_support.h:
+
+ fix bug 180 for cygwin build with _REENTRANT; per ashipman@erggroup.com
+
+2000-02-29 14:30 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ Invoke snmp_sess_send from within snmp_read to avoid mutex deadlocks.
+
+2000-02-28 14:25 nba
+
+ * agent/: snmpd.h, mibgroup/smux/smux.c:
+
+ - snmpd.h, smux.c: don't initialize smux master in sub agent
+
+2000-02-28 14:16 nba
+
+ * agent/snmp_vars.c:
+
+ - snmp_vars.c: use SUB_AGENT symbol
+
+2000-02-28 14:12 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: sprint_by_type should handle ASN_BIT_STR
+
+2000-02-28 14:10 nba
+
+ * apps/snmp_parse_args.c:
+
+ - snmp_parse_args.c: correctly call the -I options input options
+
+2000-02-28 10:47 mslifcak
+
+ * config.h.in, configure, configure.in,
+ agent/auto_nlist.c:
+
+ fix bug #176 (AIX 4 - use knlist in lieu of nlist)
+
+2000-02-24 17:17 mslifcak
+
+ * configure, configure.in:
+
+ apply patch to fix bug no. 177.
+
+2000-02-24 13:31 hardaker
+
+ * snmplib/: default_store.h, read_config.c,
+ snmp_api.c:
+
+ - (default_store.h, read_config.c, snmp_api.c): new snmp.conf keyword
+ to force the parser to ignore unknown tokens.
+
+2000-02-24 03:59 mslifcak
+
+ * man/snmpset.1:
+
+ document UNSIGNED32 and COUNTER32 ('u' and 'c') in snmpset (gratis ashipman@erggroup.com)
+
+2000-02-24 03:56 mslifcak
+
+ * man/snmptrap.1, snmplib/snmp_api.c:
+
+ add support for COUNTER32 to snmp_add_var; document UNSIGNED32 and COUNTER32
+ ('u' and 'c') in snmptrap (gratis ashipman@erggroup.com)
+
+2000-02-23 23:06 nba
+
+ * agent/mibgroup/ucd-snmp/: pass.c, pass_persist.c:
+
+ - pass.c, pass_persist.c: fix setting of octet strings.
+
+2000-02-23 02:09 nba
+
+ * snmplib/mt_support.h:
+
+ - mt_support.h: a bad ; in the C++ bracketing
+
+2000-02-23 02:09 nba
+
+ * snmplib/system.c:
+
+ - system.c: remove some superfluous indirections in strcasecmp
+
+2000-02-23 02:07 nba
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ - vmstat_solaris.c: make sure we agree with the prototype of getpagesize!
+
+2000-02-22 15:31 nba
+
+ * agent/mibgroup/ucd-snmp/pass_persist.h:
+
+ - pass_persist.h: declare init_pass_persist
+
+2000-02-21 16:17 mslifcak
+
+ * snmplib/system.c, win32/config.h:
+
+ Apply R. Story's patch for mkdirhier and strncasecmp on win32
+
+2000-02-21 07:39 mslifcak
+
+ * man/: read_config.3.def, snmp_alarm.3,
+ snmp_config.5.def, snmptrapd.conf.5.def, snmpusm.1
+:
+
+ fix bug 171 (thanks to Larry Parmelee).
+
+2000-02-21 05:56 mslifcak
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ remove free after snmp_close (don't free twice!)
+
+2000-02-21 04:58 mslifcak
+
+ * man/: mib_api.3, read_config.3.def, snmp_alarm.3
+, snmp_sess_api.3:
+
+ Added description in SH_NAME for several man-pages (c/o ragnark)
+
+2000-02-18 12:14 mslifcak
+
+ * man/: Makefile.in, snmp_close.3, snmp_free_pdu.3
+, snmp_open.3, snmp_read.3, snmp_select_info.3
+, snmp_send.3, snmp_sess_async_send.3,
+ snmp_sess_close.3, snmp_sess_error.3, snmp_sess_init.3
+, snmp_sess_open.3, snmp_sess_read.3,
+ snmp_sess_select_info.3, snmp_sess_send.3,
+ snmp_sess_sess_timeout.3, snmp_sess_session.3,
+ snmp_sess_timeout.3, snmp_timeout.3:
+
+ refer the .so macro to man3; adjust Makefile.in to use the renamed file.
+
+2000-02-17 05:17 mslifcak
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ include pass_persist in the required list.
+
+2000-02-17 02:00 daves
+
+ * configure, configure.in, config.h.in,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ - (configure* ucd-snmp/vmstat_solaris2.c):
+ - Provide missing 'getpagesize' routine for Solaris 2.4
+ (Thanks to Ragnar Kjørstad)
+
+2000-02-16 20:17 mslifcak
+
+ * agent/mibgroup/: host/hr_system.c, mibII/snmp_mib.c
+, mibII/sysORTable.c, mibII/system_mib.c:
+
+ include mibincl.h in hr_system.c to fix bug #159.
+
+2000-02-16 16:35 mslifcak
+
+ * agent/mibgroup/ucd-snmp/memory_freebsd2.c:
+
+ remove auto_nlist of unused "swaplist" symbol.
+
+2000-02-16 15:17 mslifcak
+
+ * snmplib/asn1.c:
+
+ patch suggested by Rick Beaman <beaman@mediaone.net>
+
+2000-02-16 14:58 mslifcak
+
+ * apps/snmptrapd.c:
+
+ remove unused vars
+
+2000-02-16 14:57 mslifcak
+
+ * snmplib/: vacm.c, vacm.h:
+
+ test lengths before allocating memory; use new VACMSTRINGLEN constant.
+
+2000-02-16 08:18 mslifcak
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ include time.h once
+
+2000-02-16 08:02 mslifcak
+
+ * agent/mibgroup/mibII/udp.c:
+
+ restore #if HAVE...IN_PCB_H
+
+2000-02-15 23:47 nba
+
+ * configure, configure.in,
+ agent/mibgroup/mibII/ipv6.c, agent/mibgroup/mibII/ipv6.h
+:
+
+ - configure.in, ipch.[ch]: initial stabs at Linux ipv6 support. A lot is
+ lacking in the kernel statistics though.
+
+2000-02-15 23:40 nba
+
+ * config.h.in, configure.in,
+ agent/agent_read_config.c, agent/snmp_vars.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+:
+
+ - (many): configure check for netinet/ip6.h
+
+2000-02-15 23:34 nba
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ - hr_filesys.c: MNTTYPE defines for FreeBSD-3 and BSDI-4, and moving the
+ return value for Ext2FS to the newly defined OID.
+
+2000-02-15 23:23 nba
+
+ * apps/snmptable.c:
+
+ - snmptable.c: give a sensible output for an empty table.
+
+2000-02-15 23:22 nba
+
+ * agent/mibgroup/mibII/vacm_vars.c, snmplib/vacm.c,
+ snmplib/vacm.h:
+
+ - vacm*: buffer length checking!
+
+2000-02-15 23:20 nba
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ - hr_storage.c: return memory size in pages.
+
+2000-02-15 23:17 nba
+
+ * agent/mibgroup/: ucd_snmp.h, ucd-snmp/memory_freebsd2.c
+:
+
+ - ucd_snmp.h, memory_freebsd2.h: make it work for FreeBSD-3 too
+
+2000-02-15 23:16 nba
+
+ * agent/snmp_agent.c:
+
+ - snmp_agent.c: one more place to send a AUTHFAIL trap
+
+2000-02-15 23:15 nba
+
+ * agent/agent_registry.c:
+
+ - agent_registry.c: fix a return for SNMPv1/Counter64 case
+
+2000-02-15 02:12 daves
+
+ * apps/snmp_parse_args.c:
+
+ - (apps/snmp_parse_args.c): Omit deprecated options from optarg handling.
+
+2000-02-11 15:47 hardaker
+
+ * makedepend.in:
+
+ - (makedepend.in): /usr/local/bin/perl -> /usr/bin/perl
+
+2000-02-11 15:38 hardaker
+
+ * local/rsnmp:
+
+ - (rsnmp): perl5 -> perl
+
+2000-02-11 15:17 hardaker
+
+ * man/Makefile.in:
+
+ - (man/Makefile.in): install snmp_trap_api.3
+
+2000-02-11 14:20 hardaker
+
+ * local/Makefile.in:
+
+ - (local/Makefile.in): last minute makefile touchup
+
+2000-02-11 14:03 hardaker
+
+ * NEWS:
+
+ - (NEWS): update for 4.1.1
+
+2000-02-11 13:47 hardaker
+
+ * ChangeLog:
+
+ - (ChangeLog): Update for 4.1.1
+
+2000-02-11 13:29 hardaker
+
+ * bug-report, sedscript.in, version.h, FAQ
+, README:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.1.1 )
+
+2000-02-11 12:53 hardaker
+
+ * testing/tests/: T016snmpv2cgetfail, T017snmpv2ctov1getfail
+:
+
+ - (T016snmpv2cgetfail, T017snmpv2ctov1getfail): update for Timeout for v2c.
+
+2000-02-11 12:49 hardaker
+
+ * local/Makefile.in:
+
+ - (local/Makefile.in): don't cp for snmpcheck
+
+2000-02-11 12:44 hardaker
+
+ * local/Makefile.in:
+
+ - (local/Makefile.in): fix for seperate build path
+
+2000-02-11 12:30 hardaker
+
+ * agent/mibgroup/mibII/sysORTable.h:
+
+ - (sysORTable.h): Patch from Niels Baggesen:
+ - compiler warning fix.
+
+2000-02-11 12:29 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): patch from Niels:
+ - don't send autherror responses for v2c.
+ - send authFailure trap.
+
+2000-02-11 12:22 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in): change perl path to /usr/bin.
+
+2000-02-11 06:58 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in): Dont define PROCFIXCMD and EXECFIXCMD by default.
+
+2000-02-10 11:14 mslifcak
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ fix for older platforms to use pass_persist; not included by default.
+
+2000-02-10 10:33 mslifcak
+
+ * agent/mibgroup/ucd-snmp/: extensible.c, pass_persist.c
+:
+
+ [no log message]
+
+2000-02-10 10:32 hardaker
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ - (hr_swinst.c): minor fixes pointed out by Michael.
+
+2000-02-10 10:28 hardaker
+
+ * snmplib/snmpv3.c:
+
+ - (snmpv3.c): fix setup engineID buffer overflow found by Mike Baer.
+
+2000-02-10 08:39 nba
+
+ * man/: default_store.3.top, mib_api.3,
+ read_config.3.def, snmp.conf.5.def, snmp_agent_api.3
+, snmp_alarm.3, snmp_api.3, snmp_config.5.def
+, snmp_sess_api.3, snmp_trap_api.3, snmpbulkget.1
+, snmpbulkwalk.1, snmpcmd.1, snmpd.1.def,
+ snmpd.conf.5.def, snmpdelta.1, snmpget.1,
+ snmpgetnext.1, snmpnetstat.1, snmpset.1,
+ snmpstatus.1, snmptable.1, snmptest.1,
+ snmptranslate.1, snmptrap.1, snmptrapd.8,
+ snmptrapd.conf.5.def, snmpusm.1, snmpwalk.1,
+ variables.5:
+
+ - man/*: set the dates on the pages to reflect the revision date
+
+2000-02-10 08:13 mslifcak
+
+ * snmplib/: md5.c, snmp_logging.c, snmp_logging.h
+:
+
+ fix varargs decl/defn of snmp_log
+
+2000-02-10 07:54 hardaker
+
+ * FAQ:
+
+ - (FAQ): mention the tutorial.
+
+2000-02-10 07:14 daves
+
+ * FAQ:
+
+ - (FAQ): Explicit examples of sending traps by hand
+
+2000-02-10 04:41 daves
+
+ * snmplib/snmp_api.c, snmplib/snmp_client.c,
+ apps/snmpnetstat/inet6.c:
+
+ - (snmplib/{snmp_api,snmp_client}.c apps/snmpnetstat/inet6.c):
+ - Comment unused code more informatively as to why it is omitted.
+
+2000-02-09 13:53 hardaker
+
+ * testing/: eval_tools.sh, tests/T023snmpv3getMD5DES,
+ tests/T024snmpv3getSHA1, tests/T025snmpv3getSHADES:
+
+ - (eval_tools.sh, T023snmpv3getMD5DES, T024snmpv3getSHA1, T025snmpv3getSHADES):
+ - skip ssl tests we can't perform.
+
+2000-02-09 13:51 mslifcak
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ include sys/param.h to get PATH_MAX on FreeBSD.
+
+2000-02-09 13:38 hardaker
+
+ * testing/tests/: Sv3SHADESconfig, T024snmpv3getSHA1,
+ T025snmpv3getSHADES:
+
+ - (Sv3SHADESconfig, T024snmpv3getSHA1, T025snmpv3getSHADES):
+ - make SHA tests actually work.
+
+2000-02-09 13:32 hardaker
+
+ * testing/tests/Sv3configsha:
+
+ - (Sv3configsha): sha config support
+
+2000-02-09 13:31 hardaker
+
+ * testing/tests/: T003snmpv1getfail, T016snmpv2cgetfail
+, T017snmpv2ctov1getfail, T018snmpv1tov2cgetfail:
+
+ - (T003snmpv1getfail, T016snmpv2cgetfail, T017snmpv2ctov1getfail,
+ T018snmpv1tov2cgetfail): fix for proper ACM error outputs.
+
+2000-02-09 13:30 mslifcak
+
+ * agent/mibgroup/host/hr_swinst.c, snmplib/system.c,
+ snmplib/tools.h:
+
+ Define SNMP_MAXPATH, and use it.
+
+2000-02-09 13:30 hardaker
+
+ * testing/tests/: T024snmpv3getSHA1, T025snmpv3getSHADES
+:
+
+ - (T024snmpv3getSHA1 T025snmpv3getSHADES): new tests
+
+2000-02-09 13:16 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): mention a new ucdExperimental registration (wavlan).
+
+2000-02-09 13:16 hardaker
+
+ * agent/: agent_callbacks.h, agent_registry.c,
+ agent_registry.h, snmp_agent.c,
+ mibgroup/mibII/vacm_vars.c:
+
+ - (agent_callbacks.h, agent_registry.c, agent_registry.h,
+ snmp_agent.c, vacm_vars.c):
+ - fix posible acm DoS problems by checking access tables early on.
+
+2000-02-09 11:38 hardaker
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ - (hr_swinst.c): patch from redhat for better RPM support.
+
+2000-02-09 10:43 hardaker
+
+ * configure.in:
+
+ - (configure.in): change mode to autoconf.
+
+2000-02-09 10:41 hardaker
+
+ * local/Makefile.in:
+
+ - (Makefile.in): fix rsnmp build. Really. I mean it.
+
+2000-02-09 10:41 hardaker
+
+ * agent/mibgroup/host/: hr_filesys.c, hr_storage.c:
+
+ - (hr_filesys.c, hr_storage.c): Patch from Andy HOOD:
+ - Solaris patches.
+
+2000-02-09 10:37 hardaker
+
+ * local/Makefile.in:
+
+ - (Makefile.in):
+ - fix rsnmp.made.
+ - use $(MAKE).
+
+2000-02-09 08:41 hardaker
+
+ * agent/mibgroup/ucd-snmp/: vmstat_solaris2.c,
+ vmstat_solaris2.h:
+
+ - (vmstat_solaris2.c, vmstat_solaris2.h): Update from Jochen Kmietsch
+
+2000-02-07 11:49 marz
+
+ * perl/SNMP/SNMP.xs:
+
+ oops missing important fix for win32 build - fd_set must be same size as in winsock
+
+2000-02-07 11:18 mslifcak
+
+ * bug-report:
+
+ Undo last change; on Sun, additional platform info was not obtained;
+ the proper solution would be to remove the second token (hostname).
+
+2000-02-07 10:43 mslifcak
+
+ * bug-report:
+
+ Keep customer's nodename out of the published 'uname' information.
+
+2000-02-07 07:20 hardaker
+
+ * PORTING:
+
+ - (PORTING): Michael likes diff -u.
+
+2000-02-06 06:11 nba
+
+ * snmplib/read_config.c:
+
+ - read_config.c: Fix one final ':' to ENV_SEPARATOR_CHAR
+
+2000-02-05 17:39 hardaker
+
+ * snmplib/snmpv3.c:
+
+ - (snmpv3.c): correct some awful text -> engineID creation mistakes.
+
+2000-02-05 08:37 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): fix wrapped line continuation in usage message.
+
+2000-02-05 06:56 marz
+
+ * perl/SNMP/README:
+
+ fix version number
+
+2000-02-04 18:55 marz
+
+ * perl/SNMP/t/: session.t, set.t, startagent.pl:
+
+ weird delay in creation of pid files
+
+2000-02-04 18:21 marz
+
+ * perl/SNMP/t/: notify.t, startagent.pl:
+
+ brain-o
+
+2000-02-04 17:52 hardaker
+
+ * bug-report, sedscript.in, version.h, FAQ
+, README:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.1 )
+
+2000-02-04 17:49 hardaker
+
+ * PORTING, README, README.snmpv3, TODO:
+
+ - (PORTING, README, README.snmpv3, TODO): last minute doc updates.
+
+2000-02-04 17:19 hardaker
+
+ * local/Makefile.in:
+
+ - (Makefile.in): make local fixes for architectures that don't have
+ compliant makefile variables like $<.
+
+2000-02-04 16:47 hardaker
+
+ * ChangeLog:
+
+ - (ChangeLog): update for 4.1
+
+2000-02-04 15:44 marz
+
+ * perl/SNMP/: BUG, hints/solaris.pl:
+
+ updates for perl/SNMP build
+
+2000-02-04 15:21 marz
+
+ * perl/SNMP/: hints/solaris.pl, t/get.t, t/getnext.t
+, t/session.t, t/set.t, t/snmptest.conf:
+
+ build fixes and test enhancements
+
+2000-02-04 15:09 marz
+
+ * perl/SNMP/: MANIFEST, Makefile.PL, SNMP.xs,
+ t/async.t, t/get.t, t/getnext.t, t/mibload.t
+, t/session.t, t/set.t, t/snmpd.conf,
+ t/snmptest.conf:
+
+ build fixes and test enhancements
+
+2000-02-04 14:01 hardaker
+
+ * man/snmptrapd.8:
+
+ - (snmptrapd.8): document -c and -C.
+
+2000-02-04 13:56 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c):
+ - implement -c and -C flags for Joe.
+ - redid the init structure to make it look more like the current agent.
+
+2000-02-04 13:52 marz
+
+ * INSTALL:
+
+ updates for perl/SNMP build
+
+2000-02-04 13:50 hardaker
+
+ * agent/agent_read_config.c:
+
+ - (agent_read_config.c): don't read the opt config file or call
+ post_config callbacks, since the library takes care of that now.
+
+2000-02-04 13:15 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ snmplib/Makefile.in, testing/Makefile.in:
+
+ - (Makefile.in, Makefile.in, Makefile.in, Makefile.in, Makefile.in,
+ Makefile.in): final make depend.
+
+2000-02-04 13:12 hardaker
+
+ * snmplib/read_config.c:
+
+ - (read_config.c): don't print failed access errors (EACCES).
+
+2000-02-04 12:47 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h, snmpv3.c:
+
+ - (snmp_api.c, snmp_api.h, snmpv3.c): provide v3 defaults.
+
+2000-02-04 12:01 hardaker
+
+ * configure, configure.in, local/Makefile.in
+:
+
+ - (configure, configure.in, Makefile.in): find, locate, and use perl if found.
+
+2000-02-04 08:55 marz
+
+ * perl/SNMP/SNMP.pm:
+
+ add defaults for v2 trap params
+
+2000-02-04 06:44 marz
+
+ * perl/SNMP/SNMP.pm:
+
+ have mib loading api return result codes
+
+2000-02-04 04:00 nba
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ - hr_disk.c: really do that FreBSD scsi thing
+
+2000-02-04 01:20 nba
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - vacm_vars.c: slight rewording of warning message
+
+2000-02-04 00:17 nba
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ - hr_disk.c: A little cleanup of the disk device definitions, also adding
+ SCSI to FreeBSD 3
+
+2000-02-04 00:16 nba
+
+ * snmplib/: mib.c, read_config.c:
+
+ - read_config.c, mib.c: fix some PATH separators from constant: to
+ ENV_SEPARATOR{_CHAR}
+
+2000-02-03 23:59 nba
+
+ * snmplib/mt_support.h:
+
+ - mt_support.h: another way of doing nothing, not giving a "null effect"
+ warning from gcc.
+
+2000-02-03 23:57 nba
+
+ * agent/: agent_registry.c, agent_trap.c,
+ mibgroup/agentx/client.c:
+
+ - agent/registry.c, agent_trap.c, client.c: change some type casts from
+ (char *) to (u_char *) top silence some warnings.
+
+2000-02-03 14:51 hardaker
+
+ * agent/mibgroup/README:
+
+ - (README): remove dummy reference.
+
+2000-02-03 14:46 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - (subagent.c): protect sysORTable callbacks with #ifdefs.
+
+2000-02-03 14:44 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - (subagent.c): include mib_module_config.h.
+
+2000-02-03 14:28 hardaker
+
+ * agent/mibgroup/dummy/: AddModuleForDummies.txt,
+ DUMMY-MIB.txt, dummy.c, dummy.h:
+
+ - (dummy/*): removed, use example instead.
+
+2000-02-03 13:28 mslifcak
+
+ * apps/snmptrapd.c:
+
+ Follow condition HAVE_GETPID for pid_file object.
+
+2000-02-03 12:58 mslifcak
+
+ * README, agent/dlmods/example.h,
+ agent/mibgroup/README:
+
+ Note the wombat is replaced by example in more places.
+
+2000-02-03 12:57 mslifcak
+
+ * win32/: mib_module_shutdown.h, libsnmp_dll/libsnmp.def
+, snmpnetstat/snmpnetstat.dsp, snmpset/snmpset.dsp
+:
+
+ Remove DOS-style line termination (CR-LF --> LF).
+ libsnmp.def - remove unneeded comment about obsolete v2party.
+
+2000-02-03 10:48 marz
+
+ * apps/snmptrapd.c:
+
+ add -u PIDFILE to snmptrapd, now we need -c -C:), btw is the value of optarg reliable after getopt has been called again...it seems to work
+
+2000-02-03 09:56 mslifcak
+
+ * acconfig.h, config.h.in,
+ agent/agent_read_config.c, agent/snmp_vars.c,
+ agent/mibgroup/mibincl.h, agent/mibgroup/util_funcs.c
+, agent/mibgroup/mibII/at.c,
+ agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/ipv6.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.h, win32/config.h
+:
+
+ Include mib_module_config.h from mibincl.h, not top level config.h.
+
+2000-02-03 09:44 marz
+
+ * README:
+
+ update my email
+
+2000-02-03 06:43 mslifcak
+
+ * win32/config.h:
+
+ include mib_module_config.h to make the USING_ constants visible.
+
+2000-02-03 04:12 mslifcak
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ Undo uninformed change: load average != average time that CPU is idle.
+
+2000-02-03 01:35 daves
+
+ * FAQ:
+
+ - (FAQ): Document changes to access control stuff.
+
+2000-02-02 16:36 mslifcak
+
+ * agent/mib_modules.c:
+
+ Touchup to build more MIB modules on Win32.
+
+2000-02-02 16:23 mslifcak
+
+ * README.win32, agent/mibgroup/examples/example.c,
+ agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ win32/mib_module_config.h, win32/mib_module_dot_conf.h,
+ win32/mib_module_includes.h, win32/mib_module_inits.h,
+ win32/libsnmp_dll/libsnmp.def,
+ win32/libucdmibs/libucdmibs.dsp:
+
+ Touchup for building more MIB modules in Win32 (MSVC).
+
+2000-02-02 14:18 mslifcak
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ Let hrProcessorLoad out of the genie's bottle.
+
+2000-02-02 14:17 marz
+
+ * perl/SNMP/README, README.win32:
+
+ add instructions for building w/ OpenSSL on VC++
+
+2000-02-02 13:42 marz
+
+ * README.win32:
+
+ add instructions for building w/ OpenSSL on VC++
+
+2000-02-02 10:52 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ - (smux.c): Patch from Robert Miles:
+ - various fixes:
+ 1) The first registration request could be lost.
+ 2) Registration delete requests never received a response.
+ 3) Registration delete requests were not finding the registration when the
+ delete's priority was set to -1.
+ 4) Non-zero values were not being encoded properly in registration
+ responses.
+
+2000-02-02 08:52 mslifcak
+
+ * apps/snmpusm.c:
+
+ fix the fat-fingering patch I just made. feh.
+
+2000-02-02 08:42 mslifcak
+
+ * apps/snmpusm.c:
+
+ Allow -Co to affect the outcome.
+
+2000-02-02 08:02 daves
+
+ * agent/snmp_vars.c:
+
+ - (agent/snmp_vars.c): Correctly handle individually excluded instances
+
+2000-02-02 07:17 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): updated --help
+
+2000-02-02 06:45 nba
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ - hr_disk.c: add NetBSD support
+
+2000-02-02 04:44 mslifcak
+
+ * agent/: Makefile.in, mibgroup/Makefile.in:
+
+ Remove dependencies on (moved) vestinternett/diskio
+
+2000-02-02 01:12 daves
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ - (host/hr_disk.c): Fix solaris initialisation, plus extra debugging info.
+
+2000-02-01 11:26 mslifcak
+
+ * snmplib/: snmpusm.c, snmpv3.c:
+
+ Fixup more signed/unsigned comparisons.
+
+2000-02-01 08:46 hardaker
+
+ * man/snmpusm.1:
+
+ - (snmpusm.1): changed context string in examples to "".
+
+2000-02-01 08:45 hardaker
+
+ * man/snmpcmd.1:
+
+ - (snmpcmd.1): .PP -> .IP for -Ob.
+
+2000-02-01 08:43 hardaker
+
+ * NEWS:
+
+ - (NEWS): update (again).
+
+2000-02-01 08:34 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ - (diskio.c): move to ucdExperimental.15.
+
+2000-02-01 08:34 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.h:
+
+ - (diskio.h): load the mib.
+
+2000-02-01 08:31 hardaker
+
+ * agent/mibgroup/: vestinternett/diskio.c,
+ vestinternett/diskio.h, ucd-snmp/diskio.c,
+ ucd-snmp/diskio.h:
+
+ - (diskio.*): moved to the ucd-snmp directory
+
+2000-02-01 05:27 daves
+
+ * FAQ:
+
+ - (FAQ): Expand the description of generating traps from the agent slightly.
+
+2000-02-01 04:19 daves
+
+ * configure, configure.in:
+
+ - (configure.in configure): Catch common invalid configure options.
+
+2000-02-01 03:37 daves
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - (agentx/master_request.c): Fix session ID handling when delegating requests.
+
+2000-02-01 01:49 daves
+
+ * acconfig.h, config.h.in, configure.in,
+ configure, snmplib/snmp_api.h:
+
+ - (acconfig.h config.h.in configure.in configure snmplib/snmp_api.h):
+ - Fix broken setting of socket address structure choice.
+
+2000-01-31 10:41 marz
+
+ * perl/SNMP/SNMP.xs:
+
+ set DS_LIB_DONT_BREAKDOWN_OIDS to get previoulsy released behaviour of get_symbol wrt octet based instance ids (i.e., no double-quoting)
+
+2000-01-31 07:57 daves
+
+ * agent/mibgroup/examples/: example.c, example.h:
+
+ - (mibgroup/examples/example.[ch]):
+ - Provide an example for how to trigger a trap.
+
+2000-01-31 07:56 daves
+
+ * apps/snmptest.c:
+
+ - (apps/snmptest.c): Don't assume size_t is signed (Pekka Kytolaakso)
+
+2000-01-31 07:55 daves
+
+ * snmplib/: snmpv3.c, snmpv3.h:
+
+ - (snmplib/snmpv3.[ch]): Don't assume size_t is signed (Pekka Kytolaakso)
+ - N.B: This changes the interface of snmpv3_generate_engineID() slightly.
+
+2000-01-31 07:53 daves
+
+ * snmplib/: asn1.c, snmp.c, snmp_api.c,
+ snmpusm.c:
+
+ - (snmplib/asn1.c snmplib/snmp.c snmplib/snmp_api.c snmplib/snmpusm.c):
+ - Don't assume size_t is signed (Pekka Kytolaakso)
+
+2000-01-31 07:51 daves
+
+ * snmplib/snmp_api.h:
+
+ - (snmplib/snmp_api.h): Attempt to mimic Irix-style socket address structure.
+
+2000-01-31 07:49 daves
+
+ * acconfig.h, config.h.in, configure.in,
+ configure:
+
+ - (acconfig.h config.h.in configure.in configure):
+ - Improved checking for Irix-style socket address structure.
+
+2000-01-31 03:41 daves
+
+ * AGENT.txt:
+
+ - (AGENT.txt): Revised and updated version.
+
+2000-01-31 03:14 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): Initialize addrlen in _sess_read(). (Frank Strauss)
+
+2000-01-31 03:03 daves
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h config.h.in configure.in configure):
+ - Attempt to detect non-traditional socket address structure (on Irix 6.x).
+
+2000-01-31 03:00 daves
+
+ * snmplib/snmp_api.h:
+
+ - (snmplib/snmp_api.h): Alternative approach to Irix socket handling.
+
+2000-01-31 02:40 daves
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmplib/snmp_api.[ch]): Restore traditional socket field names.
+
+2000-01-31 01:45 daves
+
+ * agent/agent_trap.c:
+
+ - (agent/agent_trap.c): Include instance subidentifier in snmpTrapOID and
+ snmpTrapEnterprise OID definitions. (Thanks to Gerard Talman)
+
+2000-01-31 01:05 daves
+
+ * agent/agent_registry.h:
+
+ - (agent/agent_registry.h): Log failed MIB registrations.
+
+2000-01-30 10:56 marz
+
+ * perl/SNMP/: README, README:
+
+ clean up before release - update version, release notes etc.
+
+2000-01-30 10:46 marz
+
+ * perl/SNMP/SNMP.pm:
+
+ clean up before release - update version, release notes etc.
+
+2000-01-30 10:44 marz
+
+ * perl/SNMP/SNMP.xs:
+
+ clean up before release - update version, release notes
+
+ Note: KNOWN BUGS
+ the new quoted OCTETSTR instance identifiers returned by get_symbol
+ are not compatible with the perl/SNMP module (__get_label_iid)
+
+ not sure that this ever worked - will have to look at old OCTETSTR
+ behaviour and see how to recreate it
+
+2000-01-30 10:42 marz
+
+ * perl/SNMP/README:
+
+ clean up before release - update version, release notes
+
+ Note: KNOWN BUGS
+ the new quoted OCTETSTR instance identifiers returned by get_symbol
+ are not compatible with the perl/SNMP module (__get_label_iid)
+
+2000-01-30 08:19 marz
+
+ * perl/SNMP/t/snmpd.conf:
+
+ create V3 user entry, cleanup
+
+2000-01-30 03:11 nba
+
+ * apps/snmpnetstat/if.c:
+
+ - if.c: defensive test for missing objects (it might fail to show
+ down status properly)
+
+2000-01-30 03:09 nba
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ - hr_storage.c: convert from pages to 1k blocks
+
+2000-01-30 03:04 nba
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ - hr_disk.c: convert to 1k blocks
+
+2000-01-30 03:01 nba
+
+ * agent/mibgroup/host.h:
+
+ - host.h: config_require_mib(HOST-RESOURCES-TYPES)
+
+2000-01-28 12:52 mslifcak
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ This with previous two changes completes a patch for items 2,3,4
+ for bug #149.
+
+2000-01-28 12:38 mslifcak
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ Change agentx_{build,parse}_short . Thanks to Gerard Talman@hitt.nl.
+
+2000-01-28 12:30 mslifcak
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ Fix spell LITTLE_ENDIAN. Thanks to talman@hitt.nl.
+
+2000-01-28 07:18 mslifcak
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ Some variable renaming for consistency, error checking
+ improved, missing string.h included. Patch supplied by author.
+
+2000-01-27 16:13 mslifcak
+
+ * snmplib/parse.c:
+
+ Remove hack around "SMI" token; keep the good part of the previous patch.
+
+2000-01-27 14:51 mslifcak
+
+ * snmplib/parse.c:
+
+ 1. Fix memory leak when anonymously named nodes are used.
+ 2. Hack around smicng's "SMI " statements to prevent other memory leaks.
+
+2000-01-27 11:14 marz
+
+ * perl/SNMP/SNMP.xs:
+
+ remove no-op snmp_synch_setup
+
+2000-01-27 08:33 hardaker
+
+ * snmplib/default_store.c:
+
+ - (default_store.c): make config parser handle "" (null) parsed strings.
+
+2000-01-26 19:22 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): comma, comma, comma, comma, comma-chameleon.
+
+2000-01-26 17:32 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): allow ',' seperated --with-*-modules flag values.
+
+2000-01-26 17:18 hardaker
+
+ * bug-report, sedscript.in, version.h, FAQ
+, README:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.1.pre2 )
+
+2000-01-26 17:15 hardaker
+
+ * man/: snmpcmd.1, snmptrapd.conf.5.def, snmpusm.1
+:
+
+ - (snmpcmd.1, snmptrapd.conf.5.def, snmpusm.1):
+ - badly done updates.
+
+2000-01-26 16:54 hardaker
+
+ * testing/tests/: Sv3DESconfig, T023snmpv3getMD5DES:
+
+ - (Sv3DESconfig, T023snmpv3getMD5DES): fix DES test so it works.
+
+2000-01-26 16:53 hardaker
+
+ * snmplib/snmpv3.c:
+
+ - (snmpv3.c): fix priv key length extrapolation. Should be done differently?.
+
+2000-01-26 16:27 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, snmplib/Makefile.in:
+
+ - (Makefile.in, Makefile.in, Makefile.in, Makefile.in):
+ - make depend.
+
+2000-01-26 16:06 hardaker
+
+ * agent/agent_trap.c, agent/agent_trap.h,
+ man/snmpd.conf.5.def:
+
+ - (agent_trap.c, agent_trap.h, snmpd.conf.5.def): Patch from Frank Strauss:
+ - add ability to allow sending traps to ports other than 162.
+
+2000-01-26 15:34 hardaker
+
+ * mibs/: UCD-DEMO-MIB.txt, UCD-DISKIO-MIB.txt,
+ UCD-DLMOD-MIB.txt, UCD-IPFILTER-MIB.txt,
+ UCD-IPFWACC-MIB.txt, UCD-SNMP-MIB.txt:
+
+ - (UCD-DEMO-MIB.txt, UCD-DISKIO-MIB.txt, UCD-DLMOD-MIB.txt,
+ UCD-IPFILTER-MIB.txt, UCD-IPFWACC-MIB.txt, UCD-SNMP-MIB.txt):
+ - correct ucd-snmp-coders email address to replace "ece" with "ucd-snmp".
+
+2000-01-26 15:32 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): Patch from Juergen Schoenwaelder:
+ - clean up and reformat sub-registration comments.
+
+2000-01-26 15:31 hardaker
+
+ * mibs/UCD-IPFILTER-MIB.txt:
+
+ - (UCD-IPFILTER-MIB.txt): Patch from Juergen Schoenwaelder:
+ - prefix oids with "ucd".
+
+2000-01-26 15:30 hardaker
+
+ * mibs/UCD-DLMOD-MIB.txt:
+
+ - (UCD-DLMOD-MIB.txt): Patch from Juergen Schoenwaelder:
+ - prefix oid with "ucd".
+
+2000-01-26 15:29 hardaker
+
+ * mibs/: UCD-DISKIO-MIB.inc, UCD-DISKIO-MIB.txt,
+ VEST-INTERNETT-MIB.txt:
+
+ - (UCD-DISKIO-MIB.inc, UCD-DISKIO-MIB.txt, VEST-INTERNETT-MIB.txt):
+ Patch from Juergen Schoenwaelder:
+ - fix the diskio mib, convert to SMIv2, and move to ucdExperimental.
+
+2000-01-26 07:26 mslifcak
+
+ * README:
+
+ Acknowledge more contributors.
+
+2000-01-26 07:14 mslifcak
+
+ * agent/snmpd.c:
+
+ fix compile error when --without-root-access is used (strauss@ibr.cs.tu-bs.de)
+
+2000-01-25 21:46 mslifcak
+
+ * snmplib/: mib.c, parse.c:
+
+ mib.c:print_tree_node - show module name once in -- FROM;
+ parse.c: show "Cannot find module" once per missing module.
+
+2000-01-25 19:30 mslifcak
+
+ * snmplib/: mib.c, parse.c:
+
+ Larger buffer for print_module_name; Fix possible null deref in get_tc.
+
+2000-01-25 14:50 hardaker
+
+ * man/snmp_alarm.3, snmplib/snmp_alarm.c:
+
+ - (snmp_alarm.3, snmp_alarm.c): Patch from Frank Strauss:
+ - fix registration function to do what it says it should do.
+
+2000-01-25 14:47 hardaker
+
+ * configure, configure.in:
+
+ - (configure): help update
+
+2000-01-25 14:12 nba
+
+ * mibs/: HOST-RESOURCES-MIB.txt, HOST-RESOURCES-TYPES.txt
+, Makefile.in:
+
+ - HOST-RESOURCES-MIB.txt, HOST-RESOURCES-TYPES.txt, Makefile.in:
+ Update to the current draft HOST-RESOURCES (draft-ops-hostmib-01)
+
+2000-01-25 13:56 hardaker
+
+ * mibs/VEST-INTERNETT-MIB.txt:
+
+ - (VEST-INTERNETT-MIB.txt): Ragnar Kjrstad's diskio mib.
+
+2000-01-25 13:55 hardaker
+
+ * agent/mibgroup/vestinternett/: diskio.c, diskio.h:
+
+ - (vestinternett/diskio.[ch]): Ragnar Kjrstad's diskio mib.
+
+2000-01-25 13:52 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: fix a missing initialization of tc_index
+
+2000-01-25 12:05 marz
+
+ * README.win32:
+
+ additional win32 install notes
+
+2000-01-25 11:47 marz
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ add missing synbols for perl/SNMP module
+
+2000-01-25 06:49 marz
+
+ * snmplib/parse.c:
+
+ syntax for win32 build
+
+2000-01-24 10:36 marz
+
+ * perl/SNMP/SNMP.pm:
+
+ [no log message]
+
+2000-01-24 10:14 mslifcak
+
+ * snmplib/mib.c:
+
+ Fix printing IMPLIED index (from associate of J. Kmietsch) modified and applied.
+
+2000-01-24 10:05 mslifcak
+
+ * configure, configure.in:
+
+ Itojun's netbsd ELF patch + remove wombat [Dave's example fix]
+
+2000-01-24 09:55 mslifcak
+
+ * apps/snmp_parse_args.c, apps/snmptrapd.c,
+ man/snmpcmd.1, snmplib/mib.c, snmplib/snmp_debug.c
+:
+
+ Fix Bug #144 items 1,3,4: case insensitive check for "all" keyword.
+
+2000-01-24 09:44 mslifcak
+
+ * agent/mibgroup/ucd-snmp/: memory_solaris2.c,
+ vmstat_solaris2.c:
+
+ Make sure kstat_fd is initialized before being used.
+
+2000-01-24 08:59 marz
+
+ * perl/SNMP/SNMP.pm:
+
+ [no log message]
+
+2000-01-24 07:21 daves
+
+ * agent/mibgroup/examples/: example.c, example.h,
+ wombat.c, wombat.h:
+
+ - (examples/{example,wombat}.[ch]):
+ - Consolidated example modules into one, including config and SET support.
+
+2000-01-23 16:41 marz
+
+ * perl/SNMP/SNMP.xs:
+
+ handle adding OPAQUE vars for setting and traps etc.
+
+2000-01-23 12:43 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: errenous => erroneous
+
+2000-01-23 12:42 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: fix merging of anonymous nodes when they are named
+
+2000-01-23 08:51 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: add some more error checking to getoid
+
+2000-01-21 11:19 mslifcak
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ config_arch_require solaris2 version of vmstat.
+
+2000-01-21 10:47 marz
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ [no log message]
+
+2000-01-21 10:23 marz
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ [no log message]
+
+2000-01-21 08:13 marz
+
+ * perl/SNMP/SNMP.pm:
+
+ inform
+
+2000-01-21 08:00 marz
+
+ * perl/SNMP/SNMP.pm:
+
+ inform.
+
+2000-01-21 07:27 marz
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ added v3 inform
+
+2000-01-21 01:49 mslifcak
+
+ * agent/agent_registry.c, agent/agent_registry.h,
+ snmplib/snmp_api.c:
+
+ Minimize data handling and use register variabies in
+ snmp_oid_compare and compare_tree.
+
+2000-01-21 01:46 mslifcak
+
+ * agent/mibgroup/ucd-snmp/: pass_persist.c, pass_persist.h
+:
+
+ Add const to cleanup a few signatures.
+
+2000-01-21 01:46 mslifcak
+
+ * perl/SNMP/README:
+
+ Remove party crud; spell check.
+
+2000-01-20 04:25 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): Support selective binding of server addresses.
+
+2000-01-18 21:37 mslifcak
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ Consistent getpagesize (first divide by 1024).
+
+2000-01-18 21:28 mslifcak
+
+ * agent/mibgroup/mibII/snmp_mib.c,
+ win32/mib_module_includes.h, win32/mib_module_inits.h,
+ win32/libsnmp_dll/libsnmp.def,
+ win32/libucdmibs/libucdmibs.dsp:
+
+ 1.Make snmp_get_do_logging visible from DLL
+ 2.Apply Win32 patch from R.Story to activate mib stats module (snmp_mib).
+
+2000-01-18 21:25 mslifcak
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ Remove commented out objects that are MAX-ACCESS not-accessible.
+
+2000-01-18 21:22 mslifcak
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ Cleanup around ip6_vars.h include (no #if 0)
+
+2000-01-18 14:23 mslifcak
+
+ * agent/mibgroup/ucd-snmp/: vmstat_solaris2.c,
+ vmstat_solaris2.h:
+
+ Latest vmstat_solaris2 from the author Jochen Kmietsch.
+
+2000-01-18 08:14 mslifcak
+
+ * agent/agent_trap.c:
+
+ Prevent array bounds error when creating specific trap oid.
+
+2000-01-18 07:54 marz
+
+ * perl/SNMP/SNMP.xs:
+
+ fix error messages and return vals for trap funcs, clean up pdu
+
+2000-01-18 07:00 marz
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ modified for v2-trap.
+
+2000-01-17 12:47 marz
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ added v2 trap
+
+2000-01-17 09:02 daves
+
+ * agent/snmp_vars.c:
+
+ - (agent/snmp_vars.c): Discard "too-late" responses from overlapped regions.
+
+2000-01-17 06:13 daves
+
+ * man/snmptrapd.8:
+
+ - (man/snmptrapd.8): Describe default logging behaviour.
+
+2000-01-14 16:10 hardaker
+
+ * NEWS:
+
+ - (NEWS): remove export control note about DES.
+
+2000-01-14 16:09 hardaker
+
+ * snmplib/scapi.c:
+
+ - (scapi.c): implement DES encryption.
+
+2000-01-14 11:34 hardaker
+
+ * bug-report:
+
+ - (bug-report): grep for configure flags
+
+2000-01-14 09:33 mslifcak
+
+ * agent/mibgroup/: examples/ucdDemoPublic.c, smux/snmp_bgp.c
+, smux/snmp_ospf.c, smux/snmp_rip2.c:
+
+ Small compile fix and debug message restoration.
+
+2000-01-13 06:33 daves
+
+ * snmplib/parse.c:
+
+ - (snmplib/parse.c): More complete handling of unloading MIB modules.
+
+2000-01-13 06:31 daves
+
+ * snmplib/: parse.c, parse.h:
+
+ - (snmplib/parse.[ch]): Unload MIB module
+ (N.B: Somewhat simplistic with regard to multiply-loaded nodes)
+
+2000-01-13 05:36 mslifcak
+
+ * snmplib/system.c:
+
+ No get_boottime support for cygwin (yet). Hopefully a temporary condition.
+
+2000-01-13 02:46 daves
+
+ * agent/snmp_vars.c:
+
+ - (agent/snmp_vars.c): Remove extraneous bracket.
+
+2000-01-12 21:08 mslifcak
+
+ * agent/agent_registry.c, agent/snmp_vars.c,
+ agent/snmpd.c, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/examples/wombat.c,
+ agent/mibgroup/host/hr_device.c,
+ agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_print.c,
+ agent/mibgroup/host/hr_proc.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/ipv6.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/smux/smux.c,
+ agent/mibgroup/smux/snmp_bgp.c,
+ agent/mibgroup/smux/snmp_ospf.c,
+ agent/mibgroup/smux/snmp_rip2.c,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c, apps/snmpusm.c
+, snmplib/snmp_logging.c, snmplib/snmp_logging.h
+:
+
+ Use DEBUGMSGOID liberally, replacing sprint_objid; small speedup.
+
+2000-01-12 11:16 hardaker
+
+ * snmplib/snmpv3.c:
+
+ - (snmpv3.c): cast malloc returns.
+
+2000-01-11 15:05 mslifcak
+
+ * agent/Makefile.in:
+
+ Use CFLAGS when linking (could have profile switch, etc).
+
+2000-01-11 10:37 marz
+
+ * perl/SNMP/t/get.t:
+
+ remove bad session test - session.t has it already - note the call to gethostbyname can hang for some time if DNS is not setup correctly - anyone know a way arround this?
+
+2000-01-11 09:13 mslifcak
+
+ * agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ apps/snmpstatus.c, snmplib/snmp_api.c,
+ snmplib/snmpv3.c, snmplib/tools.c, snmplib/tools.h
+:
+
+ Restore memdup usage to its former luster.
+
+2000-01-11 08:10 mslifcak
+
+ * snmplib/system.c:
+
+ Init file count at zero, not by incrementing random value.
+
+2000-01-11 07:59 mslifcak
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ Keep win32 release build from breaking.
+
+2000-01-11 07:44 mslifcak
+
+ * win32/config.h:
+
+ Add IN_UCD_SNMP_SOURCE to not break Win32 builds.
+
+2000-01-11 01:53 mslifcak
+
+ * agent/mibgroup/Makefile.in:
+
+ Glean refs to mibII.o from this makefile.
+
+2000-01-11 01:32 mslifcak
+
+ * agent/mibgroup/header_complex.c,
+ agent/mibgroup/util_funcs.c,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/master_request.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.h,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proc.c, apps/snmpstatus.c,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/inet6.c,
+ apps/snmpnetstat/route.c, apps/snmpnetstat/winstub.c,
+ snmplib/keytools.c, snmplib/parse.c,
+ snmplib/snmp_api.c, snmplib/snmpv3.c,
+ snmplib/tools.c, snmplib/tools.h, snmplib/vacm.c
+:
+
+ Trolling for malloc errors; more graceful degradation.
+
+2000-01-10 16:32 mslifcak
+
+ * snmplib/: read_config.c, scapi.h, snmp_api.c
+:
+
+ snmp_api.c - better comment for snmp_oid_compare.
+ read_config.c - remove sizeof(u_char) from malloc size calc.
+ scapi.h - spell check.
+
+2000-01-10 16:31 mslifcak
+
+ * apps/snmptranslate.c:
+
+ snmptranslate.c - simple default case.
+
+2000-01-10 16:31 mslifcak
+
+ * man/snmptranslate.1:
+
+ snmptranslate.1 - remove junk line.
+
+2000-01-10 16:30 mslifcak
+
+ * agent/: snmp_vars.c, snmpd.c,
+ mibgroup/examples/ucdDemoPublic.c:
+
+ ucdDemoPublic.c - remove uninitialized variables from write method.
+ snmp_vars.c - proper oid compare; no copy from save if oids exact match
+ snmpd.c - terminate statement.
+
+2000-01-10 15:38 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in):
+ - make --without-efence work.
+ - check for -lnsl more explicitly.
+
+2000-01-10 15:36 hardaker
+
+ * testing/tests/Sv3config:
+
+ - (Sv3config): remove the trailing space.
+
+2000-01-10 15:36 hardaker
+
+ * agent/mibgroup/mibincl.h:
+
+ - (mibincl.h): include stdlib.h and malloc.h.
+
+2000-01-10 14:40 marz
+
+ * perl/SNMP/MANIFEST:
+
+ add mibload
+
+2000-01-10 14:34 marz
+
+ * perl/SNMP/t/mibload.t:
+
+ [no log message]
+
+2000-01-10 14:20 marz
+
+ * perl/SNMP/: BUG, MANIFEST, MANIFEST.SKIP,
+ Makefile.PL, README, SNMP.pm, SNMP.xs, TODO
+, perlsnmp.h, typemap, examples/async1.pl,
+ examples/async2.pl, examples/ipforward.pl,
+ examples/mibtree.pl, examples/mibwalk.pl,
+ examples/pingmib.pl, examples/tablewalk.pl,
+ examples/testleak.pl, hints/irix.pl, hints/solaris.pl
+, t/README, t/async.t, t/get.t, t/getnext.t
+, t/mib.t, t/mib.txt, t/session.t, t/set.t
+, t/snmpd.conf:
+
+ Checking in SNMP-3.1.0b1
+
+2000-01-10 13:21 mslifcak
+
+ * configure, configure.in:
+
+ Qualify use of withval to define library and include search paths.
+
+2000-01-10 13:14 mslifcak
+
+ * win32/win32.dsw:
+
+ Allow MSVC++ 5.x users to build using this workspace.
+
+2000-01-10 06:12 daves
+
+ * snmplib/system.c:
+
+ - (snmplib/system.c): Re-structure get_uptime() to cache boot time.
+
+2000-01-10 03:06 daves
+
+ * agent/snmp_agent.c:
+
+ - (agent/snmp_agent.c): Count numbers of variables requested/set
+
+2000-01-10 02:31 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): Differentiate max-repetition and non-repeater errors.
+
+2000-01-10 01:37 daves
+
+ * agent/mibgroup/mibII.h:
+
+ - (agent/mibgroup/mibII.h): Re-remove redundant prototype.
+
+2000-01-08 12:07 mslifcak
+
+ * agent/auto_nlist.c:
+
+ Use knlist iff aix4 and HAVE_KNLIST [not complete w/o configure mods]
+
+2000-01-08 11:44 mslifcak
+
+ * configure, configure.in:
+
+ Fix build for Linux RedHat 6.1 (cant link libwrap without libnsl).
+
+2000-01-08 00:56 nba
+
+ * configure.in, configure:
+
+ - configure.in: bugfix for a bugfix bug
+
+2000-01-07 23:43 nba
+
+ * configure, configure.in:
+
+ - configure.in: some missing "x" in tests for --with-openssl and
+ --disable-developer
+
+2000-01-07 16:21 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - (vacm_vars.c): properly group rw/rousers into usm not v1/v2c.
+
+2000-01-07 11:22 hardaker
+
+ * apps/snmptranslate.c:
+
+ - (snmptranslate.c): Patch from Robert Story:
+ - handle multiple translated OIDs.
+
+2000-01-07 10:38 hardaker
+
+ * agent/mibgroup/target/: snmpTargetAddrEntry.c,
+ snmpTargetParamsEntry.c:
+
+ - (snmpTargetAddrEntry.c, snmpTargetParamsEntry.c): update to v4 API set code.
+
+2000-01-07 09:29 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): better handling of write failures.
+
+2000-01-06 15:09 hardaker
+
+ * local/mib2c.conf:
+
+ - (mib2c.conf): unquoted quotes quoted.
+
+2000-01-06 15:08 hardaker
+
+ * local/mib2c:
+
+ - (mib2c): removed a debugging statement.
+
+2000-01-06 15:08 hardaker
+
+ * COPYING:
+
+ - (COPYING): y2k bug.
+
+2000-01-06 13:14 marz
+
+ * testing/tests/: T020snmpv3get, T021snmpv3getnext:
+
+ update config access syntax (exact)
+
+2000-01-06 13:07 marz
+
+ * snmplib/snmp_logging.c:
+
+ we should not print to stderr if stderr logging is diabled - this thows off the alignment of test output for 'make test' in both ucd-snmp and Perl/SNMP
+
+2000-01-06 12:56 marz
+
+ * testing/tests/Svanyconfig:
+
+ update syntax (exact)
+
+2000-01-06 08:57 hardaker
+
+ * agent/mibgroup/util_funcs.h:
+
+ - (util_funcs.h): properly wrap struct.h include directive for
+ non-source-directory include.
+
+2000-01-06 01:58 daves
+
+ * agent/mibgroup/mibII.c:
+
+ - (mibgroup/mibII.c): Remove redundant file
+
+2000-01-04 23:51 nba
+
+ * apps/snmptrapd.c:
+
+ - snmptrapd.c: implement trand handlers for win32
+
+2000-01-04 23:50 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: #ifdef some variables not used under win32
+
+2000-01-04 22:12 nba
+
+ * EXAMPLE.conf.def, FAQ, man/snmpd.conf.5.def:
+
+ - EXAMPLE.conf.def, FAQ, snmpd.conf.5.def: remove all traces of security
+ model "any" in "group" configuration directives
+
+2000-01-04 16:27 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in): Patch from Sander Steffann:
+ - Add -I/usr/include/rpm because of badly written rpm header files.
+
+2000-01-04 10:35 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): deal with blocking better in snmp_agent_check_and_process().
+
+2000-01-04 10:33 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): install struct.h
+
+2000-01-04 08:58 hardaker
+
+ * FAQ, README:
+
+ - (README, FAQ): Japan mirror location change.
+
+2000-01-03 15:39 nba
+
+ * man/: snmpcmd.1, snmptranslate.1,
+ snmptrapd.conf.5.def:
+
+ - snmpcmd.1: add snmpbulkget to list of applications
+ - snmptranslate.1: explain -T outputs
+ - snmptrapd.conf.5.def: defalt traphandler is implemented
+
+2000-01-03 15:34 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: also note TEXTUAL CONVENTION in -Td output
+
+2000-01-03 15:32 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: fix File variable being left pointing into the stack.
+ Ignore .index file on WIN32 platform
+
+2000-01-03 15:30 nba
+
+ * snmplib/system.h:
+
+ - system.h: add prototype for strcasecmp
+
+2000-01-03 15:28 nba
+
+ * agent/mibgroup/examples/: wombat.c, wombat.h:
+
+ - wombat.[ch]: correct prototype for wombat_parse_config
+
+2000-01-03 15:27 nba
+
+ * agent/mibgroup/mibII.h:
+
+ - mibII.h: add prototype for init_mibII
+
+2000-01-03 15:26 nba
+
+ * agent/snmpd.c:
+
+ - snmpd.c: add a missing const specifier
+
+2000-01-03 15:26 nba
+
+ * agent/snmp_vars.c:
+
+ - snmp_vars.c: include agent_registry.h only once
+
+2000-01-03 15:23 nba
+
+ * EXAMPLE.conf.def:
+
+ - EXAMPLE.conf.def: adapt to changes in valid vacm syntax
+
+1999-12-31 13:27 mslifcak
+
+ * configure, configure.in,
+ agent/mibgroup/mibII/interfaces.c, snmplib/snmp_logging.c
+:
+
+ Apply some NetBSD 1.3.x, 1.4 patches c/o Grea A. Woods <woods@planix.com>
+
+1999-12-31 12:43 mslifcak
+
+ * snmplib/system.c, win32/config.h,
+ win32/libsnmp_dll/libsnmp.def:
+
+ Fix bug #48: no strcasecmp/strncasecmp for Sinix
+
+1999-12-31 10:36 mslifcak
+
+ * agent/mibgroup/host/hr_system.c, apps/snmptable.c:
+
+ Fix warnings of uninitialized variables.
+
+1999-12-31 10:33 mslifcak
+
+ * configure.in, configure:
+
+ Autoconf patch c/o Albert Chin-A-Young <china@thewrittenword.com>
+
+1999-12-31 10:11 mslifcak
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ Fix bug #125 - insert underscore into struct snmp_ipaddr member names.
+
+1999-12-31 09:32 mslifcak
+
+ * agent/auto_nlist.c:
+
+ Apply patch provided by Serg Trushnikov <sat@zmail.ru> for AIX 4.2.1 knlist
+
+1999-12-31 09:31 mslifcak
+
+ * agent/mibgroup/host/hr_utils.c:
+
+ Fix bug # 122
+
+1999-12-30 12:00 mslifcak
+
+ * agent/snmpd.c, agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/smux/smux.c, snmplib/tools.c:
+
+ Fix compile errors.
+
+1999-12-30 07:51 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): usage line order messed up, as pointed out by Robert Story.
+
+1999-12-28 15:42 hardaker
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - (master_request.c): remove the ! in front of in_a_view, which changed.
+
+1999-12-23 08:21 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ - (vmstat_solaris2.c): Patch from Jochen Kmietsch:
+ - non 80-column wrapped version.
+
+1999-12-22 16:30 hardaker
+
+ * agent/mibgroup/ucd-snmp/: vmstat_solaris2.c,
+ vmstat_solaris2.h:
+
+ - (vmstat_solaris2.c, vmstat_solaris2.h): Patch from Jochen Kmietsch:
+ - first pass at vmstat support for solaris.
+
+1999-12-22 15:13 hardaker
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - (master_request.c): increase max vars to 64 (was 16). I have a
+ table with more than that number in columns, which breaks snmptable.
+
+1999-12-22 15:12 hardaker
+
+ * agent/mibgroup/agentx/master.c:
+
+ - (master.c): use snmp_sess_open for the second try at opening the
+ master port.
+
+1999-12-22 05:58 nba
+
+ * agent/agent_registry.c, agent/snmp_agent.c,
+ agent/snmp_vars.c, agent/mibgroup/mibII/vacm_vars.c,
+ snmplib/vacm.h:
+
+ - vacm routines: alignment with RFC mibs, preparing for trap generation
+ and a better integration with variable tree walking
+
+1999-12-22 05:47 nba
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ - system_mib.c: use some #defines i place of numbers
+
+1999-12-22 05:46 nba
+
+ * snmplib/system.c:
+
+ - system.c: naughty, naughty Niels, just reindenting ...
+
+1999-12-22 02:43 nba
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ - hr_storage.c: kill a dummy value
+
+1999-12-22 02:41 nba
+
+ * agent/mibgroup/ucd-snmp/memory_freebsd2.c:
+
+ - memory_freebsd2.c: make it work (again) for FreeBSD-2:-)
+
+1999-12-21 02:37 nba
+
+ * agent/snmpd.c, agent/mibgroup/smux/smux.c,
+ snmplib/snmp_api.c:
+
+ - snmpd.c, smux.c, snmp_api.c: take away some unused variables.
+
+1999-12-20 17:34 hardaker
+
+ * bug-report, sedscript.in, version.h, FAQ
+, README:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.1.pre1 )
+
+1999-12-20 17:32 hardaker
+
+ * agent/mibgroup/mibincl.h:
+
+ - (mibincl.h): add agent_trap.h
+
+1999-12-20 17:32 hardaker
+
+ * NEWS:
+
+ - (NEWS): mention SMIv2 updates.
+
+1999-12-20 17:31 hardaker
+
+ * EXAMPLE.conf.def:
+
+ - (EXAMPLE.conf.def): minor note.
+
+1999-12-20 17:20 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Digital Unix hack for bad recvfrom implementation.
+
+1999-12-20 17:20 hardaker
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - (agentx/protocol.c): make a things size_t instead of u_int (for 64bit code).
+
+1999-12-20 17:19 hardaker
+
+ * agent/agent_trap.c:
+
+ - (agent_trap.c): make uptime a long for 64bit architectures.
+
+1999-12-20 15:38 hardaker
+
+ * mibs/Makefile.in:
+
+ - (Makefile.in): IPFWACC-MIB.txt -> UCD-IPFWACC-MIB.txt
+
+1999-12-20 13:30 hardaker
+
+ * agent/mibgroup/misc/ipfwacc.c:
+
+ - (ipfwacc.c): moved table to one level deeper under mib node.
+
+1999-12-20 13:30 hardaker
+
+ * mibs/UCD-IPFWACC-MIB.txt:
+
+ - (UCD-IPFWACC-MIB.txt): moved table to one level deeper under mib node.
+
+1999-12-20 13:26 hardaker
+
+ * mibs/: UCD-IPFWACC-MIB.inc, UCD-IPFWACC-MIB.txt:
+
+ - (UCD-IPFWACC-MIB.txt): moved and updated from IPFWACC-MIB.txt
+
+1999-12-20 13:25 hardaker
+
+ * mibs/IPFWACC-MIB.txt:
+
+ - (IPFWACC-MIB.txt): moved to UCD-IPFWACC-MIB.txt
+
+1999-12-20 13:23 hardaker
+
+ * mibs/IPSEC-MIB.txt:
+
+ - (IPSEC-MIB.txt): removed
+
+1999-12-20 06:48 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): moved kernel.o into the libucdagent library.
+
+1999-12-20 06:43 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): Force set to 1 for -D so multiple switches can
+ be given (ie, don't toggle the value).
+
+1999-12-20 04:15 daves
+
+ * agent/: agent_trap.c, snmp_vars.c,
+ mibgroup/mibII.h, mibgroup/mibII/at.c,
+ mibgroup/mibII/icmp.c, mibgroup/mibII/interfaces.c,
+ mibgroup/mibII/ip.c, mibgroup/mibII/ipv6.c,
+ mibgroup/mibII/snmp_mib.c, mibgroup/mibII/sysORTable.c
+, mibgroup/mibII/system_mib.c, mibgroup/mibII/tcp.c
+, mibgroup/mibII/udp.c, mibgroup/mibII/vacm_vars.c
+, mibgroup/mibII/sysORTable.h:
+
+ - (agent_trap.c snmp_vars.c mibII.[ch] mibII/*.c mibII/sysORTable.h):
+ - Use SNMP_OID prefix definitions in OID specifications.
+ - Register the various MIB-2 modules separately in sysORTable.
+
+1999-12-20 03:01 daves
+
+ * agent/mibgroup/agentx/README.agentx:
+
+ - (agentx/README.agentx): Updated to describe current status.
+
+1999-12-17 15:57 hardaker
+
+ * agent/mibgroup/: header_complex.c, header_complex.h:
+
+ - (header_complex.c, header_complex.h): completely restructured.
+ - drasticly reduces memory usage for large data sets (1/3).
+
+1999-12-17 15:56 hardaker
+
+ * agent/: agent_read_config.c, agent_registry.c,
+ snmp_vars.c:
+
+ - (agent_read_config.c, agent_registry.c, snmp_vars.c):
+ - include "snmp_alarm.h" for mib modules that need the callback def.
+
+1999-12-17 15:55 hardaker
+
+ * NEWS:
+
+ - (NEWS): mention -I.
+
+1999-12-17 15:46 hardaker
+
+ * snmplib/snmp_alarm.c:
+
+ - (snmp_alarm.c): missing ! operater on signal test.
+
+1999-12-17 15:41 mslifcak
+
+ * agent/mibgroup/ucd-snmp/: memory_freebsd2.c, vmstat.c
+, vmstat_freebsd2.c:
+
+ No dummy values for FreeBSD, please.
+
+1999-12-17 15:21 mslifcak
+
+ * agent/mibgroup/: ucd_snmp.h, ucd-snmp/memory_freebsd2.c
+, ucd-snmp/vmstat_freebsd2.c:
+
+ Add Bill Fumerola's patch for FreeBSD 4.x to use swapinfo.
+ Include FreeBSD 4.x specific memory and vmstat when building that agent.
+
+1999-12-17 14:23 mslifcak
+
+ * man/: README, mib_api.3, snmp.conf.5.def,
+ snmpcmd.1, snmpd.1.def, snmpd.conf.5.def,
+ snmpnetstat.1, snmptest.1, snmpusm.1, snmpwalk.1
+:
+
+ Fixed a few spelilng errors.
+
+1999-12-17 10:18 hardaker
+
+ * man/snmp_agent_api.3:
+
+ - (snmp_agent_api.3): re-structure based on recent changes.
+
+1999-12-17 10:18 hardaker
+
+ * NEWS:
+
+ - (NEWS): second pass.
+
+1999-12-17 10:17 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): removed -R from the -h output.
+
+1999-12-17 10:17 hardaker
+
+ * agent/mibgroup/snmpv3/usmUser.c:
+
+ - (usmUser.c): changed help line of createUser to seperate DES token
+ from the passphrase.
+
+1999-12-17 10:16 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): put snmpd.o into the object list, and remove it from
+ direct compilation in the CC link line.
+
+1999-12-17 10:11 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): reorder init() routines for -H to prevent segfaulting.
+
+1999-12-17 10:11 hardaker
+
+ * sedscript.in:
+
+ - (sedscript.in): PERSISTENT_DIRECTORY token added.
+
+1999-12-17 10:10 hardaker
+
+ * NEWS:
+
+ - (NEWS): first pass at changes.
+
+1999-12-17 07:40 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def): document createUser.
+
+1999-12-17 07:28 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def): document the file directive.
+
+1999-12-17 07:26 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def): document rocommunity, rwcommunity, rouser, rwuser.
+
+1999-12-17 07:13 hardaker
+
+ * man/snmp.conf.5.def:
+
+ - (snmp.conf.5.def): document a bunch of new configuration options.
+
+1999-12-17 07:05 hardaker
+
+ * man/snmpcmd.1:
+
+ - (snmpcmd.1): mention that -IR and -Ib are actually used by default.
+
+1999-12-17 07:03 hardaker
+
+ * man/snmpcmd.1:
+
+ - (snmpcmd.1): document -I and -O flags.
+
+1999-12-17 03:22 nba
+
+ * win32/: libsnmp/libsnmp.dsp, libsnmp_dll/libsnmp.def
+:
+
+ - libsnmp.def: add some function names
+
+1999-12-17 02:18 nba
+
+ * apps/snmptrapd.c:
+
+ - snmptrapd.c: make the oids given to trapd handlers properly .0 terminated.
+ Add a SNMP-COMMUNITY-MIB::snmpTrapAddress.0
+ Add syslog of v2 traps and informs
+
+1999-12-17 02:14 nba
+
+ * apps/snmptable.c:
+
+ - snmptable.c: cleanup of the "new" mib walk to determine fields. Make it
+ default (don't even document the -C compatibility option). Ignore
+ not-accessible fields in the walk.
+
+1999-12-17 02:09 nba
+
+ * apps/snmp_parse_args.c:
+
+ - snmp_parse_args.c: remove some superfluous usage() calls.
+
+1999-12-17 02:08 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: kill that tail recursion elimination, it just adds too many
+ conditionals. Properly output an empty string index.
+
+1999-12-16 23:10 nba
+
+ * snmplib/snmpv3.c:
+
+ - snmpv3.c: a more spevific help message for defVersion
+
+1999-12-16 23:09 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: fix a tail recursion elimination problem printing oids
+
+1999-12-16 23:08 nba
+
+ * apps/snmptranslate.c:
+
+ - snmptranslate.c: be explicit in the -t warning
+
+1999-12-16 23:08 nba
+
+ * agent/mibgroup/smux/: smux.c, smux.h:
+
+ - smux.[ch]: fix some prototypes and includes.
+
+1999-12-16 23:06 nba
+
+ * agent/snmpd.c:
+
+ - snmpd.c: \n terminate some log messages
+
+1999-12-16 23:05 nba
+
+ * agent/kernel.c:
+
+ - kernel.c: output error string, not number
+
+1999-12-15 11:08 mslifcak
+
+ * agent/mibgroup/: kernel_sunos5.c,
+ ucd-snmp/memory_solaris2.c:
+
+ Replace kc from memory_solaris2.c with kstat_fd, defined in kernel_sunos5.c.
+
+1999-12-15 09:56 mslifcak
+
+ * snmplib/: tools.c, tools.h:
+
+ Add time marker create, set, and delta time check methods.
+
+1999-12-15 09:42 mslifcak
+
+ * snmplib/: snmp_logging.c, snmp_logging.h:
+
+ Remove snmp_log_syslog, snmp_log_filelog, snmp_log_stderrlog;
+ Simplify snmp_log_string.
+
+1999-12-15 09:19 hardaker
+
+ * mibs/: Makefile.in, SNMPv2-M2M-MIB.txt,
+ SNMPv2-PARTY-MIB.txt:
+
+ - (SNMPv2-PARTY-MIB.txt SNMPv2-M2M-MIB.txt ): removed.
+
+1999-12-15 09:17 hardaker
+
+ * mibs/: EtherLike-MIB.txt, IPFILTER.txt,
+ UCD-IPFILTER-MIB.inc, UCD-IPFILTER-MIB.txt:
+
+ - (EtherLike-MIB.txt, IPFILTER.txt, UCD-IPFILTER-MIB.inc,
+ UCD-IPFILTER-MIB.txt): Patch from Juergen Schoenwaelder:
+ - Even more updates.
+
+1999-12-15 05:51 mslifcak
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Share kstat fd iff ucd-snmp/memory_solaris2 is also configured.
+
+1999-12-15 04:21 mslifcak
+
+ * apps/: snmp_parse_args.c, snmptranslate.c:
+
+ Isolate and retouch deprecated command line options.
+
+1999-12-14 16:05 hardaker
+
+ * agent/mibgroup/header_complex.c:
+
+ - (header_complex.c): get next in link list before deleting root.
+
+1999-12-14 16:05 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): move -lefence check up to front (last in link).
+
+1999-12-14 15:19 hardaker
+
+ * mibs/Makefile.in:
+
+ - (Makefile.in): DLMOD -> UCD-DLMOD
+
+1999-12-14 14:54 hardaker
+
+ * snmplib/keytools.c:
+
+ - (keytools.c): reverse generate_Ku optimizations, as they don't work.
+
+1999-12-14 08:41 hardaker
+
+ * mibs/: IANAifType-MIB.txt, UCD-SNMP-MIB.txt:
+
+ - (IANAifType-MIB.txt, UCD-SNMP-MIB.txt): Patch from Juergen Schoenwaelder:
+ - updates.
+
+1999-12-14 08:07 hardaker
+
+ * apps/snmp_parse_args.c, apps/snmptranslate.c,
+ apps/snmptrapd.c, snmplib/default_store.h,
+ snmplib/mib.c, snmplib/mib.h:
+
+ - (snmp_parse_args.c, snmptranslate.c, snmptrapd.c, default_store.h,
+ mib.c, mib.h):
+ - argument shuffling...
+ -I for input args created, and -OR moved there.
+ -Ib created.
+ -TB created for snmptranslate (was -B).
+
+1999-12-13 16:03 mslifcak
+
+ * snmplib/mib.c:
+
+ Allow sprint_variable to work even if no MIB files were read.
+
+1999-12-13 15:12 mslifcak
+
+ * snmplib/mib.c:
+
+ Finish symbol conversion with numeric when subtree is leaf node.
+
+1999-12-13 14:54 mslifcak
+
+ * snmplib/mib.c:
+
+ Fix problem printing IMPLIED indices of OBJECTID type.
+
+1999-12-13 14:20 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in): --with-efence implemented.
+ - (forced checking for --enable-developer and CVS checkouts)
+
+1999-12-13 13:54 mslifcak
+
+ * snmplib/mib.c:
+
+ Sanity checks added to _get_symbol.
+
+1999-12-13 12:04 mslifcak
+
+ * man/Makefile.in:
+
+ Clean also removes generated default_store.3.h .
+
+1999-12-13 09:57 hardaker
+
+ * mibs/: DLMOD-MIB.txt, UCD-DLMOD-MIB.inc,
+ UCD-DLMOD-MIB.txt:
+
+ - (DLMOD-MIB.txt, UCD-DLMOD-MIB.inc, UCD-DLMOD-MIB.txt):
+ - Juergens patch to move DLMOD-MIB -> UCD-DLMOD-MIB and -> SMIv2.
+ - moved to the experimental tree.
+
+1999-12-13 09:49 mslifcak
+
+ * agent/mibgroup/smux/: smux.c, smux.h:
+
+ Added patch from M.Michaud to use send_enterprise_trap_vars.
+
+1999-12-13 04:43 daves
+
+ * agent/: snmpd.c, mibgroup/smux/smux.c,
+ mibgroup/smux/smux.h:
+
+ - (agent/snmpd.c agent/mibgroup/smux/smux.[ch]):
+ - Patch to get SMUX support working with the new agent architecture.
+ This is probably not The Right Way To Do Things Now, but it works.
+ Thanks to Nick Amato and Mike Michaud.
+
+1999-12-13 03:18 daves
+
+ * agent/agent_trap.c:
+
+ - (agent_trap.c): allow specification of enterprise OID when sending traps
+
+1999-12-13 03:17 daves
+
+ * agent/agent_registry.c:
+
+ - (agent_registry.c): Handle delegated MIB regions properly when split.
+
+1999-12-10 13:03 mslifcak
+
+ * agent/mibgroup/mibII/ip.c:
+
+ Fix HP-UX problem with ipDefaultTTL.
+
+1999-12-10 10:44 marz
+
+ * snmplib/snmp_api.c:
+
+ (snmlib/snmp_api.c): fix bug in _sess_copy where pointers that were not owned by newly created session could get mistakenly freed if errors were encountered during session copy - also eliminate some redundant copying of security{Auth|Priv}Key data
+
+1999-12-10 10:23 mslifcak
+
+ * agent/: snmp_agent.c, mibgroup/agentx/subagent.c:
+
+ Apply Dave's patch to fix max varbinds testing on GETBULK.
+
+1999-12-10 07:28 mslifcak
+
+ * agent/Makefile.in:
+
+ Fix to build executable agent on HP-UX.
+
+1999-12-10 03:19 nba
+
+ * snmplib/system.c, win32/config.h,
+ win32/libagent/libagent.def, win32/libagent/libagent.dsp
+, win32/libsnmp_dll/libsnmp.def,
+ win32/libucdmibs/libucdmibs.def,
+ win32/libucdmibs/libucdmibs.dsp, win32/snmpd/snmpd.dsp:
+
+ - (various): changes to compile snmpd with VC++ 5.0 (Release mode)
+
+1999-12-10 03:10 nba
+
+ * snmplib/read_config.c:
+
+ - read_config.c: add some missing const specifiers
+
+1999-12-10 03:09 nba
+
+ * agent/mibgroup/ucd-snmp/pass_persist.c:
+
+ - pass_persist.c: fix some buf/buf2 confusion
+
+1999-12-10 03:07 nba
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ - pass.c: fix some buf/buf2 confusion
+
+1999-12-10 03:06 nba
+
+ * agent/mibgroup/agentx/master.c:
+
+ - master.c: add a missing #include <netinet/in.h> (at least for Solaris).
+
+1999-12-09 17:09 hardaker
+
+ * agent/: Makefile.in, mibgroup/Makefile.in:
+
+ - (agent/*Makefile.in): fix for --enable-shared on hpux
+
+1999-12-09 16:53 hardaker
+
+ * apps/snmpnetstat/Makefile.in:
+
+ - (snmpnetstat/Makefile.in): fix for --enable-shared
+
+1999-12-09 16:16 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): changed all instances of kb to kB.
+
+1999-12-09 15:26 hardaker
+
+ * snmplib/keytools.c:
+
+ - (keytools.c): Patch from Leonard Gomelsky:
+ - generate_Ku() speed improvements.
+
+1999-12-09 10:08 hardaker
+
+ * Makefile.top, config.h.in, configure,
+ configure.in, agent/Makefile.in, snmplib/Makefile.in
+:
+
+ - (Makefile.top, config.h.in, configure, configure.in,
+ agent/Makefile.in, snmplib/Makefile.in):
+ - fixed --enable-shared (at least on linux).
+
+1999-12-09 08:14 mslifcak
+
+ * mibs/: DISMAN-SCRIPT-MIB.txt, UCD-DEMO-MIB.inc,
+ UCD-DEMO-MIB.txt, UCD-SNMP-MIB.inc, UCD-SNMP-MIB.txt
+:
+
+ Patches supplied by Juergen Schoenwaelder.
+
+1999-12-09 07:49 nba
+
+ * man/snmpcmd.1:
+
+ - snmpcmd.1: support MIB::label
+
+1999-12-09 07:34 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: implement MIB::label
+
+1999-12-09 07:34 daves
+
+ * man/snmp_trap_api.3:
+
+ - (man/snmp_trap_api.3): Initial documentation for agent trap generation.
+
+1999-12-08 17:13 hardaker
+
+ * acconfig.h, config.h.in,
+ agent/mibgroup/agentx/master.c, snmplib/read_config.c
+, snmplib/system.c, snmplib/system.h:
+
+ - (acconfig.h, config.h.in, master.c, read_config.c, system.c, system.h):
+ - implement mkdirhier() and use it for persistent storage and agentx
+ socket file creation.
+
+1999-12-08 15:49 hardaker
+
+ * makefileindepend.pl, makenosysdepend.pl, remove-files
+:
+
+ - (makefileindepend.pl, makenosysdepend.pl, remove-files):
+ - move the make depend perl scripts to the top level where they only
+ need to be edited once.
+
+1999-12-08 15:46 hardaker
+
+ * agent/Makefile.in, agent/dlmods/Makefile.in,
+ agent/mibgroup/Makefile.in, apps/Makefile.in,
+ apps/snmpnetstat/Makefile.in, snmplib/Makefile.in,
+ testing/Makefile.in:
+
+ - (*..Makefile.in): A real make depend with no ssl dependancies, etc.
+
+1999-12-08 15:29 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): move sys/param out of ifdef FD_SET.
+
+1999-12-08 15:28 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ snmplib/Makefile.in, testing/Makefile.in:
+
+ - (*..Makefile.in): make depend.
+
+1999-12-08 15:26 hardaker
+
+ * README:
+
+ - (README): add Juergen.
+
+1999-12-08 15:23 hardaker
+
+ * snmplib/: mib.c, parse.c, parse.h:
+
+ - (mib.c, parse.c, parse.h):
+ - remembered IMPLIED indexes.
+ - properly print OIDs with length prefixes on parsed OIDs so
+ cutting/pasting of them works.
+ - properly print strings and oids that are IMPLIED.
+ - print strings in either ' or " quotes depending on if their IMPLIED.
+
+1999-12-08 15:04 mslifcak
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ Add missing dskPercentNode to DskEntry (thanks to
+ Michael Kirkham <support@iwl.com>).
+
+1999-12-08 15:01 mslifcak
+
+ * apps/snmpwalk.c:
+
+ Include getopt.h to define optarg.
+
+1999-12-08 14:41 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): fix -Os and index based oid printing to work again.
+
+1999-12-08 14:08 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): make mrIndex IMPLIED since it is in the code.
+
+1999-12-08 09:19 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): register a config token for suffix printing.
+
+1999-12-07 15:23 mslifcak
+
+ * agent/mibgroup/agentx/client.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ snmplib/snmpusm.c, snmplib/system.c:
+
+ Eliminate multiplying by sizeof(char) or sizeof(unsigned char);
+ agentx/client.c - snmp_free_varbind replaces free in four places;
+ snmpv3/usmUser.c - usm_free_user replaces free in one place.
+
+1999-12-07 13:54 hardaker
+
+ * man/snmpwalk.1:
+
+ - (snmpwalk.1): document -Ci and -Cp (badly).
+
+1999-12-07 13:45 hardaker
+
+ * apps/snmpwalk.c:
+
+ - (snmpwalk.c):
+ - New ability to peform a get on the requested OID when either no
+ results are returned or when the user requests an inclusive option.
+ - New ability to print number of variables found at the end.
+
+1999-12-07 09:32 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): Patch from Juergen Schoenwaelder:
+ - convert to SMIv2 and cleanup.
+
+1999-12-07 09:17 hardaker
+
+ * agent/mibgroup/mibII/sysORTable.c:
+
+ - (sysORTable.c): make sysOrIndex not-accessible, as it should be.
+
+1999-12-07 09:14 hardaker
+
+ * agent/mibgroup/host/hr_other.c:
+
+ - (hr_other.c): shorten cpu description length.
+
+1999-12-07 08:29 daves
+
+ * agent/agent_read_config.c, agent/agent_read_config.h
+, agent/snmp_vars.c, agent/snmp_vars.h,
+ agent/snmpd.c, agent/snmpd.h, snmplib/read_config.c
+, snmplib/read_config.h, snmplib/snmp_api.c:
+
+ - (agent/agent_read_config.[ch] agent/snmp_vars.[ch] agent/snmpd.[ch]
+ snmplib/read_config.[ch] snmplib/snmp_api.c):
+ - Use the saved application name for registering config handlers
+ (N.B: This change will need to be applied to MIB modules as well)
+
+1999-12-07 08:03 mslifcak
+
+ * apps/: snmp_parse_args.c, snmpusm.c:
+
+ Use argv[0] since the app wont be snmpgetnext, probably.
+
+1999-12-06 16:31 mslifcak
+
+ * agent/agent_registry.c, apps/snmptable.c,
+ apps/snmpusm.c, win32/libsnmp_dll/libsnmp.def:
+
+ More fun updating MS VC build of apps and library.
+
+1999-12-06 15:11 nba
+
+ * snmplib/system.c, win32/config.h, win32/win32.dsw
+, win32/encode_keychange/encode_keychange.dsp,
+ win32/libsnmp/libsnmp.dsp, win32/libsnmp_dll/libsnmp.def
+, win32/libsnmp_dll/libsnmp_dll.dsp,
+ win32/snmpbulkget/snmpbulkget.dsp,
+ win32/snmpbulkwalk/snmpbulkwalk.dsp,
+ win32/snmpdelta/snmpdelta.dsp, win32/snmpget/snmpget.dsp
+, win32/snmpgetnext/snmpgetnext.dsp,
+ win32/snmpstatus/snmpstatus.dsp,
+ win32/snmptable/snmptable.dsp, win32/snmptest/snmptest.dsp
+, win32/snmptranslate/snmptranslate.dsp,
+ win32/snmptrap/snmptrap.dsp, win32/snmptrapd/snmptrapd.dsp
+, win32/snmpusm/snmpusm.dsp, win32/snmpwalk/snmpwalk.dsp
+:
+
+ - system.c, config.h, win32.dsw, *.dsp, libsnmp.def: cleaning up for VC builds
+
+1999-12-06 15:09 mslifcak
+
+ * snmplib/: snmp_api.c, snmpusm.c, snmpusm.h:
+
+ Convert USM_ERR* to SNMPERR_USM*.
+
+1999-12-06 14:58 hardaker
+
+ * apps/snmpusm.c:
+
+ - (snmpusm.c): fix usage for new args.
+
+1999-12-06 14:56 hardaker
+
+ * testing/tests/: Sv3config, T030snmpv3usercreation:
+
+ - (Sv3config, T030snmpv3usercreation): make v3 testing work again.
+
+1999-12-06 14:48 hardaker
+
+ * apps/snmpusm.c:
+
+ - (snmpusm.c):
+ - make snmpusm usable again, changing arguments slightly.
+ - make it also use defaults for passphrases, user, etc.
+
+1999-12-06 14:32 nba
+
+ * win32/: bin/.cvsignore, lib/.cvsignore:
+
+ - .cvsignore: Make CVS silent about installation files
+
+1999-12-06 13:51 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): print error strings returned by generate_Ku().
+
+1999-12-06 13:47 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): default specifications for auth/priv types.
+
+1999-12-06 09:19 mslifcak
+
+ * snmplib/mib.c:
+
+ Show all non-printable subids in dump_oid_to_string.
+ Recurse clear_tree_flags only if necessary.
+
+1999-12-05 21:49 nba
+
+ * agent/mibgroup/ucd-snmp/: pass.c, pass_persist.c:
+
+ - pass.c, pass_persist.c: ensure proper byte ordering when pass'ing
+ ipaddress.
+
+1999-12-03 16:52 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ - (vmstat.c): remove duplicate limits.h include.
+
+1999-12-03 16:52 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): use $(MAKE) instead of make.
+
+1999-12-03 16:51 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): switch to PIC from pic.
+
+1999-12-03 15:05 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: remember to NULL a freed pointer
+
+1999-12-03 15:04 nba
+
+ * apps/snmptrapd_handlers.c:
+
+ - snmptrapd_handlers.c: a little nicer error message
+
+1999-12-03 15:03 nba
+
+ * apps/snmptrapd.c:
+
+ - snmptrapd.c: correct handling of SIGHUP tp reconfigure.
+
+1999-12-02 16:59 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): turn on REGEX_EXTENDED.
+
+1999-12-02 09:21 mslifcak
+
+ * agent/Makefile.in:
+
+ Fix bug #81 - continue install after error creating persistent directory.
+
+1999-12-02 05:06 nba
+
+ * agent/mibgroup/snmpv3/usmUser.c, snmplib/snmpv3.c,
+ snmplib/snmpv3.h:
+
+ - usmUser.c snmpv3.[ch]: move usm_parse_create_usmUser from the agent
+ to the library, so that snmptrapd can use it.
+
+1999-12-02 04:42 nba
+
+ * apps/snmptrapd.c:
+
+ - snmptrapd.c: fix snmp_clone_pdu2 by using the snmplib version
+
+1999-12-02 04:41 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: accessing and freeeing env_var misplaces around NULL test
+
+1999-12-01 16:32 mslifcak
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ Use SNMP_MAXBUF when defining large static buffer storage.
+
+1999-12-01 15:55 mslifcak
+
+ * agent/mibgroup/ucd-snmp/: pass.c, pass_persist.c:
+
+ Fix bug #112 and finish patch supplied by Anthony Shipman.
+
+1999-12-01 10:38 mslifcak
+
+ * snmplib/: mib.c, parse.c:
+
+ Prevent overflow of object ID in get_module_node.
+ In find_best_tree_node, treat result from recursed call same for match = 0.
+
+1999-12-01 06:40 mslifcak
+
+ * snmplib/parse.c:
+
+ Error check and free resources during regex processing.
+
+1999-11-30 16:50 mslifcak
+
+ * apps/snmptranslate.c, snmplib/mib.c, snmplib/mib.h
+, snmplib/parse.c:
+
+ Add multiple match capability to find_best_tree_node, and use it in
+ snmptranslate (new -B option).
+
+1999-11-30 14:47 mslifcak
+
+ * apps/snmptranslate.c:
+
+ Use Wes' cool new get_wild_node match method.
+
+1999-11-30 14:30 hardaker
+
+ * apps/snmp_parse_args.c, snmplib/mib.c,
+ snmplib/mib.h, snmplib/parse.c:
+
+ - (snmp_parse_args.c, mib.c, mib.h, parse.c): implement regex matching
+ everywhere.
+
+1999-11-30 13:11 mslifcak
+
+ * snmplib/system.c:
+
+ Include ctype.h
+
+1999-11-30 13:10 mslifcak
+
+ * apps/snmptranslate.c:
+
+ Fix -Td usage description; use switch when current_name is NULL.
+
+1999-11-30 07:08 daves
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - (agentx/master_request.c): Fix handling of multi-variable requests to subagents.
+
+1999-11-30 07:07 daves
+
+ * agent/mibgroup/agentx/master.c:
+
+ - (agentx/master.c): Remove redundent routine.
+
+1999-11-30 03:01 nba
+
+ * snmplib/snmp_api.h, agent/mibgroup/mibII/snmp_mib.c
+, agent/mibgroup/mibII/snmp_mib.h:
+
+ - snmp_api.h, snmp_mib.[ch]: A couple additional SNMP statistics points
+
+1999-11-29 14:04 hardaker
+
+ * README:
+
+ - (README): another name.
+
+1999-11-29 14:03 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in):
+ - check for regex.h, regcomp, strcasestr.
+
+1999-11-29 14:02 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): make best matching (-b) use regex when available.
+
+1999-11-29 14:02 hardaker
+
+ * snmplib/: system.c, system.h:
+
+ - (system.c, system.h): implement strcasestr (from Michael Slifcak).
+
+1999-11-29 12:43 mslifcak
+
+ * apps/snmpbulkget.c:
+
+ Use size_t for name_len member.
+
+1999-11-29 11:58 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ Free STREAM packet buffer when session is closed;
+ Test for close in progress for read, write, select, and timeout functions.
+
+1999-11-29 10:36 mslifcak
+
+ * apps/: snmptrap.c, snmpwalk.c, snmpnetstat/main.c
+:
+
+ Remove last vestiges of DEBUG_MALLOC_INC fragments.
+
+1999-11-29 10:33 mslifcak
+
+ * win32/snmpbulkget/snmpbulkget.dsp:
+
+ Fix reference to snmplib.
+
+1999-11-29 10:30 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ Use ntohs macro to carefully obtain the default service port.
+
+1999-11-29 05:50 mslifcak
+
+ * apps/snmpbulkget.c, snmplib/asn1.c, snmplib/mib.c
+, snmplib/snmp_api.c:
+
+ More HP-UX aCC fixes supplied by Markku Laukkanen.
+
+1999-11-27 09:18 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - (vacm_vars.c): redo rwuser/rouser to allow specification of auth type.
+
+1999-11-27 06:31 marz
+
+ * agent/kernel.c, testing/eval_tools.sh:
+
+ (agent/kernel.c, testing/eval_tools.sh): fix -r switch to supress error messages about failed kernel and add -r to default testing code so 'make test can be run by user
+
+1999-11-26 11:18 nba
+
+ * snmplib/default_store.c:
+
+ - default_store.c: although read_config is case insensitive, ds_handle_config
+ was not. At the same time it failed to report the problem that
+ it was called but didn't know what to do.
+
+1999-11-25 14:57 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: kill yet another silly warning from gcc
+
+1999-11-25 14:56 nba
+
+ * snmplib/default_store.h, snmplib/snmp_api.c,
+ snmplib/snmp_api.h, apps/snmp_parse_args.c:
+
+ - defaults_store.h, snmp_api.c, snmp_parse_args.c: add defCommunity
+ directive
+ - snmp_api.h, snmp_api.c: add errorcode for malloc failure
+
+1999-11-25 14:52 nba
+
+ * agent/mibgroup/snmpv3/usmUser.c:
+
+ - usmUser.c: new user is not added unless both auth and priv is specified
+ on createUser directive
+
+1999-11-25 14:33 nba
+
+ * agent/mibgroup/mibII/snmp_mib.h:
+
+ - snmp_mib.h: fix misalignment of statistics counters
+
+1999-11-25 14:32 nba
+
+ * snmplib/snmp_api.h, agent/agent_trap.c,
+ agent/snmp_agent.c, agent/mibgroup/mibII/snmp_mib.c:
+
+ - snmp_api.c, agent_trap.c, snmp_agent.c, snmp_mib.h, snmp_mib.c:
+ fix misalignment of statistics counters
+
+1999-11-24 11:07 mslifcak
+
+ * mibs/IPFWACC-MIB.txt:
+
+ Fix BUG#57 using 2/3 of patch supplied by zany@triq.net.
+
+1999-11-24 10:43 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - (vacm_vars.c): Patch from Frank Strauss:
+ - allow seperation of mask with both . and:.
+
+1999-11-24 09:16 hardaker
+
+ * INSTALL:
+
+ - (INSTALL): change editing of config.h note.
+
+1999-11-24 09:08 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/mibgroup/snmpv3/usmUser.c,
+ snmplib/keytools.c, snmplib/keytools.h,
+ snmplib/lcd_time.c, snmplib/scapi.h, snmplib/tools.c
+, testing/keymanagetest.c, testing/scapitest.c,
+ win32/config.h:
+
+ - (acconfig.h, config.h.in, configure, configure.in, usmUser.c,
+ keytools.c, keytools.h, lcd_time.c, scapi.h, tools.c,
+ keymanagetest.c, scapitest.c, config.h):
+ - force --enable-developer for CVS checkouts.
+ - remove all references to KMT.
+
+1999-11-24 09:03 daves
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - (agentx/master_admin.c): Release allocated indexes on subagent shutdown.
+
+1999-11-23 05:40 daves
+
+ * agent/: agent_registry.c, agent_registry.h:
+
+ - (agent_registry.[ch]):
+ - Make index registration API more immediately convenient
+ - Associate such registrations with the main session
+ - new routine to unregister all indexes for a given session
+ - differentiate between ANY index and NEW index
+ - clean up assorted compiler warnings
+
+1999-11-23 05:21 daves
+
+ * agent/: snmp_agent.c, mibgroup/agentx/subagent.c:
+
+ - (snmp_agent.c agentx/subagent.c):
+ Make main session structure visible throughout the agent,
+ and use this for AgentX subagent as well.
+
+1999-11-23 02:20 nba
+
+ * agent/snmp_agent.c:
+
+ - snmp_agent.c: #include <unistd.h> for select prototype
+
+1999-11-23 02:11 daves
+
+ * agent/mibgroup/host/: hr_storage.c, hr_swrun.c:
+
+ - (host/hr_storage.c host/hr_swrun.c): Guard against calculation overflow
+
+1999-11-23 01:37 daves
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ - (host/hr_swrun.c): Fix linux process memory usage figures.
+ (Reported by Mitch Shields)
+
+1999-11-23 01:26 nba
+
+ * agent/mibgroup/ucd-snmp/pass_persist.c:
+
+ - pass_persist.c: fix some arguments (int => size_t). Thanks to
+ Anthony Shipman <ashipman@erggroup.com>
+
+1999-11-23 01:24 nba
+
+ * mibs/IPSEC-MIB.txt:
+
+ - IPSEC-MIB.txt: change some underlines into dashes, and repair the
+ ::= (maybe I should have looked at this file before adding it:-))
+
+1999-11-23 01:23 nba
+
+ * agent/mibgroup/mibII/ipv6.h:
+
+ - ipv6.h: remove an __P that had sneaked in
+
+1999-11-22 17:52 hardaker
+
+ * README.snmpv3:
+
+ - (README.snmpv3): update to reflect new and easier .conf mechanisms.
+
+1999-11-22 17:02 hardaker
+
+ * snmplib/scapi.c:
+
+ - (scapi.c): fix length check of key space.
+
+1999-11-22 16:50 hardaker
+
+ * agent/mibgroup/: mibII/vacm_vars.c, snmpv3/usmUser.c
+:
+
+ - (vacm_vars.c, usmUser.c): new config tokens allowing easy user and
+ vacm/user configuration and setup.
+
+1999-11-22 16:48 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): remove creation of initial and template* users.
+
+1999-11-22 13:04 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/mibgroup/mibII/tcp.c:
+
+ - (acconfig.h, config.h.in, configure, configure.in, tcp.c): Patch
+ from Garrett Wollman:
+ - FreeBSD 4.x fixes.
+
+1999-11-22 12:53 nba
+
+ * agent/agent_read_config.c, agent/agent_read_config.h
+, agent/agent_registry.h, agent/agent_trap.c,
+ agent/agent_trap.h, agent/snmp_vars.c,
+ agent/mibgroup/mibincl.h, agent/mibgroup/mibII/system_mib.c
+, agent/mibgroup/mibII/system_mib.h,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/vacm_vars.h, agent/mibgroup/smux/smux.c
+, agent/mibgroup/smux/smux.h,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.h,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.h,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/disk.h,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/extensible.h,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/file.h,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/loadave.h,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory.h,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.h,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.h,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass.h,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/proc.h, apps/snmptable.c,
+ apps/snmptrapd_handlers.c, apps/snmptrapd_handlers.h,
+ snmplib/default_store.c, snmplib/mib.c,
+ snmplib/read_config.c, snmplib/read_config.h,
+ snmplib/snmp_debug.c, snmplib/snmpusm.c,
+ snmplib/snmpusm.h, snmplib/snmpv3.c, snmplib/snmpv3.h
+:
+
+ - *: change the first argument of the config parser functions to a
+ const string
+
+1999-11-22 12:49 hardaker
+
+ * agent/mibgroup/: mibII/vacm_vars.c, ucd-snmp/pass.c
+:
+
+ - (vacm_vars.c, pass.c): fix oid -> char conversions.
+
+1999-11-22 12:30 hardaker
+
+ * agent/mibgroup/ucd-snmp/: vmstat.c, vmstat_freebsd2.c
+:
+
+ - (vmstat.c, vmstat_freebsd2.c): use header_generic not header_simple_table
+
+1999-11-22 09:24 hardaker
+
+ * testing/tests/: T016snmpv2cgetfail, T017snmpv2ctov1getfail
+:
+
+ - (T016snmpv2cgetfail, T017snmpv2ctov1getfail): update tests for new
+ error messages.
+
+1999-11-22 09:17 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/host_res.h, agent/mibgroup/host/hr_filesys.c
+, agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c:
+
+ - (configure, configure.in, host_res.h, hr_filesys.c, hr_storage.c,
+ hr_swrun.c, hr_system.c, bsdi4.h): Patch from Bert Driehuis:
+ - bsdi support for the host resources mib.
+
+1999-11-22 09:07 hardaker
+
+ * README:
+
+ - (README): added more people to the thanks list.
+
+1999-11-22 09:00 hardaker
+
+ * agent/mibgroup/snmpv3/usmUser.c:
+
+ - (usmUser.c): fix oid -> char conversions pointed out by Michael Slifcak.
+
+1999-11-22 08:29 hardaker
+
+ * apps/snmptable.c:
+
+ - (snmptable.c): Patch from Robert Story:
+ - Added ability to use MIB to query tables with non-sequential column OIDs.
+ - Added code to handle sparse tables.
+
+1999-11-22 08:21 mslifcak
+
+ * win32/libagent/.cvsignore:
+
+ Add CVS ignore list for win32/libagent.
+
+1999-11-22 08:20 mslifcak
+
+ * win32/libagent/libagent.dsp:
+
+ Retry add MSVC++ project file.
+
+1999-11-22 07:30 daves
+
+ * agent/: agent_registry.c, agent_registry.h,
+ mibgroup/agentx/client.c, mibgroup/agentx/client.h,
+ mibgroup/agentx/master_admin.c:
+
+ - (agent_registry.[ch] agentx/client.[ch] agentx/master_admin.c):
+ Index de-allocation, and AgentX index support.
+
+1999-11-22 07:16 nba
+
+ * agent/mibgroup/mibII/ipv6.c:
+
+ - ipv6.c: some more ANSI prototypes
+
+1999-11-22 06:59 nba
+
+ * agent/mibgroup/mibII/ipv6.c:
+
+ - ipv6.c: upgrade to the current Kame patch
+
+1999-11-22 05:32 nba
+
+ * mibs/IPV6-TCP-MIB.txt, mibs/IPV6-UDP-MIB.txt,
+ agent/mibgroup/mibII/ipv6.c, agent/mibgroup/mibII/tcp.c
+:
+
+ - IPV6-TCP-MIB, IPV6-UDP-MIB, ipv6.c, tcp.c: move the IPv6 tcp and udp
+ tables to their proper position in the tree, according to the RFC.
+
+1999-11-22 05:29 nba
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ - pass.c: remove a const casting warning
+
+1999-11-22 05:28 nba
+
+ * agent/snmpd.c:
+
+ - snmpd.c: reinstate snmpd -a functionality
+
+1999-11-22 05:28 nba
+
+ * snmplib/snmp_logging.c:
+
+ snmp_logging.c: only timestamp efter a newline
+
+1999-11-22 05:27 nba
+
+ * configure.in, config.h.in, configure:
+
+ - configure.in: configure test for netinet/ip.h
+
+1999-11-19 15:23 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, sedscript.in,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/disk.h, mibs/UCD-SNMP-MIB.txt:
+
+ - (acconfig.h, config.h.in, configure, configure.in, sedscript.in,
+ disk.c, disk.h, UCD-SNMP-MIB.txt): Patch from Andy HOOD:
+ - monitor disk inode percentages.
+
+1999-11-19 14:20 hardaker
+
+ * agent/snmp_vars.c, agent/snmpd.c,
+ snmplib/snmp_alarm.h, snmplib/snmp_api.c:
+
+ - (snmp_vars.c, snmpd.c, snmp_alarm.h, snmp_api.c):
+ - make snmp_select_info possibly handle alarm timers.
+ - make snmpd use them and call snmp_run_alarms().
+
+1999-11-19 13:47 hardaker
+
+ * local/mib2c.storage.conf:
+
+ - (mib2c.storage.conf): fix mib2c.storage.conf.
+
+1999-11-19 11:06 daves
+
+ * agent/agent_registry.h:
+
+ - (agent/agent_registry.h): Provide missing index allocation defines.
+
+1999-11-18 18:20 mslifcak
+
+ * win32/: mib_module_config.h, mib_module_dot_conf.h,
+ mib_module_includes.h, mib_module_inits.h,
+ mib_module_shutdown.h, libucdmibs/.cvsignore,
+ libucdmibs/libucdmibs.dsp, snmpd/.cvsignore,
+ snmpd/snmpd.dsp:
+
+ More MSVC++ Win32 agent files, gratis Robert Story.
+
+1999-11-18 18:14 mslifcak
+
+ * win32/: config.h, win32.dsw:
+
+ More touchup per MSVC++ Win32 agent work.
+
+1999-11-18 17:57 mslifcak
+
+ * config.h.in, configure, configure.in,
+ agent/agent_read_config.c, agent/agent_registry.c,
+ agent/agent_trap.c, agent/kernel.c,
+ agent/mib_modules.c, agent/snmp_agent.c,
+ agent/snmp_vars.c, agent/snmpd.c,
+ agent/mibgroup/mibincl.h, agent/mibgroup/util_funcs.c
+, agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/vacm_vars.c, agent/mibgroup/smux/smux.c
+, agent/mibgroup/snmpv3/snmpEngine.c,
+ agent/mibgroup/snmpv3/snmpMPDStats.c,
+ agent/mibgroup/snmpv3/usmStats.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass.h,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/pass_persist.h,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c, apps/snmpbulkget.c
+:
+
+ Check-in agent changes to support Win32 agent built with MSVC++.
+ Thanks to Robert Story.
+
+1999-11-17 21:51 nba
+
+ * snmplib/default_store.c:
+
+ - default_store.c: ds_toggle_boolean missed a mask
+
+1999-11-17 13:09 hardaker
+
+ * local/mib2c.storage.conf:
+
+ - (mib2c.storage.conf): update. Deals with RowStatus objects better.
+
+1999-11-17 13:08 hardaker
+
+ * configure:
+
+ - (configure): update.
+
+1999-11-17 13:05 hardaker
+
+ * configure.in:
+
+ - (configure.in): update the so LD for linux to $(CC).
+
+1999-11-17 11:55 hardaker
+
+ * agent/ds_agent.h, agent/kernel.c, agent/snmpd.c
+, man/snmpd.1.def:
+
+ - (ds_agent.h, kernel.c, snmpd.c, snmpd.1.def):
+ - run time rootless running support for snmpd, by reqest of Joe. (-r)
+
+1999-11-17 07:36 mslifcak
+
+ * win32/win32.dsw:
+
+ Add snmpbulkget to list of apps to build.
+
+1999-11-17 07:35 mslifcak
+
+ * win32/snmpbulkget/: .cvsignore, snmpbulkget.dsp:
+
+ Project file for building snmpbulkget using MSVC++ gratis Robert Story.
+
+1999-11-17 05:59 mslifcak
+
+ * agent/mibgroup/mibII/ipv6.c:
+
+ Replace u_int16_t with more universally supported u_short.
+
+1999-11-16 14:56 mslifcak
+
+ * win32/snmptrapd/snmptrapd.dsp:
+
+ Build with getopt.
+
+1999-11-16 14:40 mslifcak
+
+ * apps/snmptranslate.c, snmplib/asn1.c,
+ snmplib/snmp_api.c, win32/win32.dsw,
+ win32/encode_keychange/encode_keychange.dsp,
+ win32/libsnmp/libsnmp.dsp, win32/libsnmp_dll/libsnmp.def
+, win32/libsnmp_dll/libsnmp_dll.dsp,
+ win32/snmpbulkwalk/snmpbulkwalk.dsp,
+ win32/snmpdelta/snmpdelta.dsp, win32/snmpget/snmpget.dsp
+, win32/snmpgetnext/snmpgetnext.dsp,
+ win32/snmpset/snmpset.dsp, win32/snmpstatus/snmpstatus.dsp
+, win32/snmptable/snmptable.dsp,
+ win32/snmptest/snmptest.dsp,
+ win32/snmptranslate/snmptranslate.dsp,
+ win32/snmptrap/snmptrap.dsp, win32/snmpusm/snmpusm.dsp,
+ win32/snmpwalk/snmpwalk.dsp:
+
+ MSVC touchups:
+ Added snmptrapd project .DSP file; All .DS[PW] files CR-LF line terminated;
+ Fix warnings in asn1.c and snmp_api.c; Remove unused var in snmptranslate.c.
+
+1999-11-16 10:26 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): add the T: flag for -T to getopt
+
+1999-11-16 10:24 hardaker
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - (protocol.c): add the header length to the packet length estimate.
+
+1999-11-16 09:13 daves
+
+ * snmplib/asn1.c:
+
+ - (snmplib/asn1.c): Fix encoding of root OIDs.
+
+1999-11-16 08:48 mslifcak
+
+ * config.guess:
+
+ Embrace all HP-9000/6xx,7xx, 8xx series platforms, without regrets.
+
+1999-11-16 06:21 nba
+
+ * apps/snmp_parse_args.c, apps/snmptranslate.c,
+ snmplib/default_store.h, snmplib/mib.c,
+ snmplib/snmp_api.h:
+
+ - snmp_parse_args.c, snmptranslate.c, mib.c: redo the snmptranslate options
+ to follow the common option set. Issue warnings when someone
+ uses the old form, advising about the new.
+
+1999-11-16 03:36 mslifcak
+
+ * snmplib/snmp.h:
+
+ Fix spelling misteak.
+
+1999-11-15 21:57 mslifcak
+
+ * snmplib/asn1.h:
+
+ Fix bug#75: build --without-opaque-types
+
+1999-11-15 17:40 hardaker
+
+ * agent/snmp_agent.c, agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/agentx/protocol.h,
+ agent/mibgroup/agentx/subagent.c, snmplib/snmp_api.c
+, snmplib/snmp_api.h:
+
+ - (snmp_agent.c, master.c, protocol.c, protocol.h, subagent.c,
+ snmp_api.c, snmp_api.h):
+ - make TCP support better for agentx. Still has a problem (I broke agentx).
+
+1999-11-15 16:43 mslifcak
+
+ * agent/snmp_agent.c:
+
+ Don't add NULL varbind when ENDOFMIBVIEW is reached.
+
+1999-11-15 15:41 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmp_api.c, snmp_api.h):
+ - move more options to the ds_* routines.
+ - implement support for TCP broken SNMP packets by storing buffers
+ and dealing with pieces of incoming data till we have a full packet.
+
+1999-11-15 15:38 hardaker
+
+ * snmplib/: default_store.h, mib.c:
+
+ - (default_store.h, mib.c): move more options to the ds_* routines.
+
+1999-11-15 15:35 hardaker
+
+ * apps/: snmpdelta.c, snmptable.c, snmptest.c,
+ snmptranslate.c, snmptrapd.c, snmpnetstat/main.c
+:
+
+ - (snmpdelta.c, snmptable.c, snmptest.c, snmptranslate.c, snmptrapd.c):
+ - add default_store.h
+
+1999-11-15 15:22 hardaker
+
+ * snmplib/: asn1.c, asn1.h:
+
+ - (asn1.c, asn1.h): new function: asn_check_packet().
+
+1999-11-15 15:21 hardaker
+
+ * local/mib2c.storage.conf:
+
+ - (mib2c.storage.conf): debugging statements inserted.
+
+1999-11-15 15:21 hardaker
+
+ * man/snmp_agent_api.3:
+
+ - (snmp_agent_api.3): don't call subagent_pre_init().
+
+1999-11-15 15:21 hardaker
+
+ * local/: mib2c, tkmib:
+
+ - (mib2c, tkmib): remove -w.
+
+1999-11-15 15:20 hardaker
+
+ * agent/mibgroup/header_complex.c:
+
+ - (header_complex.c): set to '\0' instead of NULL for -Wall.
+
+1999-11-15 15:19 hardaker
+
+ * TODO:
+
+ - (TODO): memory int -> uint.
+
+1999-11-15 15:19 hardaker
+
+ * agent/: mib_modules.c, snmp_vars.c:
+
+ - (mib_modules.c, snmp_vars.c): move subagent_pre_init() to init_agent().
+
+1999-11-15 15:18 hardaker
+
+ * FAQ, README:
+
+ - (FAQ, README): new mirror in Australia.
+
+1999-11-15 14:09 nba
+
+ * .cvsignore, apps/.cvsignore:
+
+ - .cvsignore: updates to keep cvs silent about generated files.
+
+1999-11-15 14:05 nba
+
+ * snmplib/parse.c:
+
+ - parse.c: fix a spelling error in the MIB replacement table.
+
+1999-11-15 14:03 nba
+
+ * mibs/: Makefile.in, RFC1271-MIB.txt, RMON-MIB.txt
+:
+
+ - mibs/: replace RFC1271-MIN.txt with RMON-MIB.txt (RFC 1757 version)
+
+1999-11-15 14:00 nba
+
+ * apps/: snmp_parse_args.c, snmpbulkget.c:
+
+ - snmp_parse_args.c: further error checking, courtesy mslifcak
+ snmpbulkget.c: needs #include <getopt.h> (Thanks to Robert Story)
+
+1999-11-15 08:29 mslifcak
+
+ * man/mib_api.3:
+
+ Fix description of read_objid return value.
+
+1999-11-15 07:56 daves
+
+ * agent/snmp_vars.c:
+
+ - (agent/snmp_vars.c): Fix handling of failed GET/SET requests
+
+1999-11-14 06:32 nba
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, maketarget,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/ipv6.c, agent/mibgroup/mibII/ipv6.h
+, agent/mibgroup/mibII/tcp.c,
+ agent/mibgroup/mibII/tcp.h, agent/mibgroup/mibII/var_route.h
+, apps/snmpnetstat/Makefile.in,
+ apps/snmpnetstat/inet6.c, apps/snmpnetstat/main.c,
+ apps/snmpnetstat/netstat.h, mibs/IPSEC-MIB.txt,
+ mibs/IPV6-ICMP-MIB.txt, mibs/IPV6-MIB.txt,
+ mibs/IPV6-TC.txt, mibs/IPV6-TCP-MIB.txt,
+ mibs/IPV6-UDP-MIB.txt, mibs/Makefile.in:
+
+ - ipc6: Add the IPv6 code from the Kame project. I have only massaged
+ it so much as to still compile on non-IPv6 systems, and detect
+ Linux, INRIA, Solaris IPv6. No code for them yet. Original
+ author: itojun@iijlab.net
+
+1999-11-14 06:15 nba
+
+ * man/snmptrapd.8:
+
+ - snmptrapd.8: add the new common -O option set
+
+1999-11-14 06:12 nba
+
+ * apps/snmptrapd.c:
+
+ - snmptrapd.c: add the new common -O option set
+
+1999-11-14 02:42 nba
+
+ * mibs/SNMPv2-CONF.txt:
+
+ - SNMPv2-CONF.txt: comment out the IMPORT clause
+
+1999-11-14 02:04 nba
+
+ * apps/snmptranslate.c, snmplib/mib.c:
+
+ - mib.c, snmptranslate.c: move the MIB:id handling inside read_objid for
+ consistency. Also fixes a buffer overrun in mib.c
+
+1999-11-14 02:01 nba
+
+ * agent/mibgroup/ucd-snmp/pass.c, man/snmpd.conf.5.def
+:
+
+ - pass.c, snmpd.conf.5.def: add an UNSIGNED return type
+
+1999-11-14 02:00 nba
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - vacm_vars.c: kill a warning
+
+1999-11-14 01:59 nba
+
+ * agent/mibgroup/mibII/vacm_vars.h, mibs/Makefile.in,
+ mibs/SNMP-COMMUNITY-MIB.txt, mibs/SNMP-FRAMEWORK-MIB.txt
+, mibs/SNMP-MPD-MIB.txt, mibs/SNMP-NOTIFICATION-MIB.txt
+, mibs/SNMP-PROXY-MIB.txt, mibs/SNMP-TARGET-MIB.txt
+, mibs/SNMP-USER-BASED-SM-MIB.txt,
+ mibs/SNMP-VIEW-BASED-ACM-MIB.txt, mibs/SNMPv2-CONF.txt,
+ mibs/SNMPv2-SMI.txt, mibs/SNMPv2-TC.txt:
+
+ - mibs/*, vacm_vars.h: update the mib files to rfc 2571-2575. Also add
+ SNMP_COMMUNITY_MIB from the coex draft.
+
+1999-11-14 01:54 nba
+
+ * apps/: snmp_parse_args.c, snmp_parse_args.h:
+
+ - snmp_parse_args: changes to support multi-valued options
+
+1999-11-14 01:53 nba
+
+ * apps/Makefile.in, apps/snmpbulkget.c,
+ man/snmpbulkget.1, man/Makefile.in:
+
+ - snmpbulkget: new tool to issue a single GETBULK request
+
+1999-11-14 01:51 nba
+
+ * man/snmptable.1:
+
+ - snmptable: add in the application specific snmptable options between
+ the normal options.
+
+1999-11-14 01:48 nba
+
+ * apps/snmptable.c:
+
+ - snmptable, snmp_parse_args: allow the application specific options to
+
+1999-11-12 13:01 marz
+
+ * snmplib/: lcd_time.c, lcd_time.h, snmpusm.c:
+
+ (lcd_time.[ch], snmpusm.c): fix enginetime update algorithm to conform to spec rfc2574 3.2.7.b.1
+
+1999-11-12 08:46 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): Provide a unique ID for all incoming PDUs
+
+1999-11-11 22:49 nba
+
+ * apps/snmp_parse_args.c, snmplib/mib.c:
+
+ - snmp_parse_args.c, mib.c: alignment of option code.
+ Some enhancements to the snmptranslate -d output.
+
+1999-11-11 22:14 nba
+
+ * man/snmpcmd.1:
+
+ - snmpcmd.1: update man page to correspond to the new getopt situation
+ Note: even though some options have been removed from this
+ page, they still work!
+
+1999-11-11 03:37 daves
+
+ * agent/mibgroup/agentx/client.c:
+
+ - (agentx/client.c): Silly typo in start time synchronisation
+
+1999-11-10 22:10 nba
+
+ * win32/: .cvsignore, encode_keychange/.cvsignore,
+ libsnmp/.cvsignore, libsnmp/libsnmp.plg,
+ libsnmp_dll/.cvsignore, libsnmp_dll/libsnmp_dll.plg,
+ snmpbulkwalk/.cvsignore, snmpbulkwalk/snmpbulkwalk.plg,
+ snmpdelta/.cvsignore, snmpdelta/snmpdelta.plg,
+ snmpget/.cvsignore, snmpget/snmpget.plg,
+ snmpgetnext/.cvsignore, snmpgetnext/snmpgetnext.plg,
+ snmpnetstat/.cvsignore, snmpset/.cvsignore,
+ snmpset/snmpset.plg, snmpstatus/.cvsignore,
+ snmpstatus/snmpstatus.plg, snmptable/.cvsignore,
+ snmptest/.cvsignore, snmptest/snmptest.plg,
+ snmptranslate/.cvsignore, snmptranslate/snmptranslate.plg
+, snmptrap/.cvsignore, snmptrap/snmptrap.plg,
+ snmptrapd/.cvsignore, snmpusm/.cvsignore,
+ snmpwalk/.cvsignore, snmpwalk/snmpwalk.plg:
+
+ - win32/*: clean up repository files, and add proper .cvsignore files
+
+1999-11-10 15:29 nba
+
+ * apps/snmp_parse_args.c, apps/snmp_parse_args.h,
+ apps/snmpbulkwalk.c, apps/snmpdelta.c, apps/snmpget.c
+, apps/snmpgetnext.c, apps/snmpset.c,
+ apps/snmpstatus.c, apps/snmptable.c, apps/snmptest.c
+, apps/snmptrap.c, apps/snmpusm.c,
+ apps/snmpwalk.c, win32/snmpget/snmpget.plg,
+ win32/snmpusm/snmpusm.dsp:
+
+ - apps/*: changes for getopt usage, and reworking of snmp_parse_args
+
+1999-11-10 12:20 nba
+
+ * win32/: win32.dsw, encode_keychange/encode_keychange.dsp
+, libsnmp_dll/libsnmp.def,
+ snmpbulkwalk/snmpbulkwalk.dsp, snmpdelta/snmpdelta.dsp,
+ snmpgetnext/snmpgetnext.dsp, snmpstatus/snmpstatus.dsp,
+ snmptest/snmptest.dsp, snmptrapd/snmptrapd.dsp,
+ snmpusm/snmpusm.dsp, snmpwalk/snmpwalk.dsp:
+
+ - win32/*.dsp: yet another round of making this crap work
+
+1999-11-10 08:59 daves
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - (agentx/subagent.c): Fix AgentX notify support
+
+1999-11-10 08:58 daves
+
+ * agent/: agent_trap.c, agent_trap.h:
+
+ - (agent/agent_trap.[ch]): minor re-structure to allow subagent trap "sinks"
+
+1999-11-10 08:57 daves
+
+ * agent/agent_read_config.c:
+
+ - (agent/agent_read_config.c): Only set up trap sinks on the master agent
+
+1999-11-10 08:31 nba
+
+ * win32/: libsnmp/libsnmp.dsp, libsnmp_dll/libsnmp_dll.dsp
+, snmpget/snmpget.dsp, snmpset/snmpset.dsp,
+ snmpstatus/snmpstatus.dsp, snmptable/snmptable.dsp,
+ snmptranslate/snmptranslate.dsp, snmptrap/snmptrap.dsp,
+ snmptrapd/snmptrapd.dsp:
+
+ - win32/*: VC++ project updates
+
+1999-11-10 08:30 nba
+
+ * win32/: libsnmp/libsnmp.plg, libsnmp_dll/libsnmp.def
+, snmpget/snmpget.plg, snmptrap/snmptrap.dsp,
+ snmptrap/snmptrap.plg:
+
+ - win32/*: fixes to the VC++ build projects
+
+1999-11-09 23:30 nba
+
+ * snmplib/getopt.h:
+
+ - getopt.h: arguments to getopt did not match those in getopt.c
+
+1999-11-09 22:20 nba
+
+ * apps/snmp_parse_args.c:
+
+ . snmp_parse_args.c: a glitch in the conversion to getopt (thanks to
+ driehuis@playbeing.org)
+
+1999-11-09 15:15 nba
+
+ * apps/snmp_parse_args.c, apps/snmpget.c,
+ apps/snmpset.c, apps/snmptable.c,
+ apps/snmptranslate.c, apps/snmptrapd.c,
+ apps/snmpnetstat/main.c, snmplib/getopt.c,
+ snmplib/getopt.h, snmplib/mib.c, snmplib/mib.h
+, snmplib/system.c, snmplib/system.h,
+ win32/win32.dsw, win32/win32.opt,
+ win32/libsnmp/libsnmp.dsp, win32/libsnmp/libsnmp.plg,
+ win32/libsnmp_dll/libsnmp_dll.dsp, win32/snmpget/snmpget.plg
+, win32/snmpstatus/snmpstatus.dsp,
+ win32/snmptable/snmptable.dsp,
+ win32/snmptranslate/snmptranslate.dsp,
+ win32/snmptranslate/snmptranslate.plg,
+ win32/snmptrap/snmptrap.dsp, win32/snmptrap/snmptrap.plg
+:
+
+ - various: adapt tools to use getopt (and put one in for Win32)
+
+1999-11-09 13:09 hardaker
+
+ * mibs/Makefile.in:
+
+ - (Makefile.in): install the DEMO-MIB.
+
+1999-11-09 13:09 hardaker
+
+ * agent/mibgroup/mibII/: vacm_vars.c, vacm_vars.h:
+
+ - (vacm_vars.c, vacm_vars.h): simple new .conf tokens: rocommunity, rwcommity.
+
+1999-11-09 13:02 hardaker
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ - (ucd_snmp.h): require the DEMO-MIB (just for tutorial purposes).
+
+1999-11-09 13:02 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): fix -H.
+
+1999-11-09 12:59 nba
+
+ * win32/snmptrapd/snmptrapd.dsp, apps/snmptrapd.c,
+ apps/snmptrapd_handlers.c:
+
+ - snmptrapd.c,snmptrapd_handlers.c: make it compile with VC++ 5.0
+ (but no handlers (yet))
+
+1999-11-09 01:50 nba
+
+ * snmplib/: default_store.h, mib.c, parse.c,
+ parse.h:
+
+ - mib.c,parse.c: make error reporting in parser work according to spec (-Pe)
+ show defining modules in snmptranslate -d
+ use ds_toggle_boolean
+
+1999-11-05 06:22 mslifcak
+
+ * agent/mibgroup/header_complex.c, apps/encode_keychange.c
+, snmplib/callback.c, snmplib/lcd_time.c,
+ snmplib/parse.c, snmplib/snmp_api.c,
+ snmplib/snmpusm.c, snmplib/tools.c, snmplib/tools.h
+:
+
+ Say goodbye to SNMP_MALLOC, malloc_zero, xcalloc, xmalloc, and xstrdup.
+ Respectively replaced with calloc, calloc, calloc, malloc, and strdup.
+
+1999-11-04 13:43 mslifcak
+
+ * snmplib/mib.c:
+
+ Speed up sprint_variable: halve the number of calls to get_symbol.
+
+1999-11-04 10:28 hardaker
+
+ * apps/snmp_parse_args.c, man/snmpcmd.1:
+
+ - (snmp_parse_args.c, snmpcmd.1): move -q flags to -O.
+
+1999-11-04 10:19 mslifcak
+
+ * acconfig.h, config.h.in,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/mibII/interfaces.c, win32/config.h:
+
+ Redo FreeBSD 4.0: define freebsd3 in s/freebsd4.h; reduce "define" thrashing.
+
+1999-11-04 10:04 hardaker
+
+ * local/mib2c.conf:
+
+ - (mib2c.conf): include headers for compilation for both internal and
+ external to the ucd-snmp source.
+
+1999-11-04 10:03 hardaker
+
+ * Makefile.in, acconfig.h, config.h.in,
+ configure, configure.in, snmplib/mib.c:
+
+ - (Makefile.in, acconfig.h, config.h.in, configure, configure.in, mib.c):
+ - define IN_UCD_SNMP_SOURCE in config.h but not in ucd-snmp-config.h.
+ - move ucd-snmp-config.h up in the build order before subdirs.
+ - Make default MIBDIRS search path include $HOME/.snmp/mibs.
+ - Make MIBDIRS parsing handle $HOME variables in it.
+
+1999-11-04 05:12 mslifcak
+
+ * acconfig.h, config.h.in,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/ucd-snmp/disk.c
+, agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/loadave.c, snmplib/vacm.c:
+
+ First pass support for FreeBSD 4.0 [problems with proc table lookups].
+
+1999-11-04 04:33 mslifcak
+
+ * AGENT.txt:
+
+ Change example away from STDC_HEADERS.
+
+1999-11-04 04:14 mslifcak
+
+ * agent/: agent_registry.c, snmp_vars.c,
+ mibgroup/host/hr_filesys.c, mibgroup/host/hr_utils.c,
+ mibgroup/mibII/at.c, mibgroup/mibII/icmp.c,
+ mibgroup/mibII/interfaces.c, mibgroup/mibII/ip.c,
+ mibgroup/mibII/route_write.c, mibgroup/mibII/tcp.c,
+ mibgroup/mibII/udp.c, mibgroup/misc/dlmod.c,
+ mibgroup/ucd-snmp/disk.c, mibgroup/ucd-snmp/errormib.c
+, mibgroup/ucd-snmp/extensible.c,
+ mibgroup/ucd-snmp/loadave.c, mibgroup/ucd-snmp/memory.c
+, mibgroup/ucd-snmp/memory_solaris2.c,
+ mibgroup/ucd-snmp/registry.c:
+
+ More STDC_HEADERS cleanup: use HAVE_STRING_H, HAVE_STDLIB_H instead.
+
+1999-11-04 02:42 mslifcak
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ Patch to build BSD/OS 4.0.1; from Bert Driehuis -- driehuis@playbeing.org
+
+1999-11-03 13:20 mslifcak
+
+ * agent/mibgroup/host/hr_system.c:
+
+ Fix build problem on Linux RedHat 6.0: key off GNU_LIBRARY value.
+
+1999-11-03 13:18 mslifcak
+
+ * agent/mibgroup/: util_funcs.c, ucd-snmp/extensible.c
+, ucd-snmp/memory.c, ucd-snmp/memory_freebsd2.c
+, ucd-snmp/pass.c, ucd-snmp/proc.c,
+ ucd-snmp/proc.h:
+
+ Following call to fdopen (near get_exec_output), do not close(fd).
+
+1999-11-03 06:49 mslifcak
+
+ * agent/mibgroup/ucd-snmp/proc.c:
+
+ Near line 663: close(fd) before invoking wait_on_exec
+
+1999-11-03 06:11 mslifcak
+
+ * snmplib/parse.c, snmplib/parse.h,
+ win32/libsnmp_dll/libsnmp.def:
+
+ declare find_best_tree_node for MSVC build.
+
+1999-11-02 15:46 mslifcak
+
+ * man/Makefile.in:
+
+ Install snmp_agent_api.3
+
+1999-11-02 15:36 mslifcak
+
+ * config.h.in, configure, configure.in,
+ agent/mibgroup/mibII/route_write.c, snmplib/read_config.c
+, snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmp_debug.c, snmplib/snmp_debug.h,
+ snmplib/snmp_logging.c, snmplib/snmp_logging.h,
+ snmplib/system.h, win32/config.h:
+
+ Use HAVE_STDARG_H when deciding to use varargs vs ANSI-C prototypes.
+
+1999-11-02 09:57 hardaker
+
+ * snmplib/Makefile.in:
+
+ - (Makefile.in): install other header files needed by SNMP.pm.
+
+1999-11-01 13:17 hardaker
+
+ * apps/snmp_parse_args.c, snmplib/default_store.h,
+ snmplib/mib.c, snmplib/snmp_alarm.c:
+
+ - (snmp_parse_args.c, default_store.h, mib.c, snmp_alarm.c):
+ - don't break oids into pieces if quick_print is turned on.
+ - ditto if the new default_store option is turned on.
+ - made a default_store option to not use sigalrm for snmp_alarms.
+
+1999-10-29 19:54 marz
+
+ * apps/snmp_parse_args.c, snmplib/snmpv3.c:
+
+ (apps/snmp_parse_args.c, snmplib/snmpv3.c): make engineID setup conditional on app type to prevent apps from easily ending up with the same engineID as agent on same host
+
+1999-10-29 16:58 hardaker
+
+ * local/tkmib:
+
+ - (tkmib): make it do snmpv3. Added many things to the options menu.
+
+1999-10-29 10:15 hardaker
+
+ * man/.cvsignore:
+
+ - (.cvsignore): ignore default_store.3{,.h}
+
+1999-10-29 10:15 hardaker
+
+ * man/: default_store.3, default_store.3.h:
+
+ -(default_store.3{,.h}): removed from CVS since they are built
+
+1999-10-29 10:13 hardaker
+
+ * man/snmpcmd.1:
+
+ - (snmpcmd.1): document -T and -q[oe]
+
+1999-10-29 10:05 hardaker
+
+ * agent/ds_agent.h, agent/snmp_agent.c, agent/snmpd.c
+, apps/snmp_parse_args.c:
+
+ - (ds_agent.h, snmp_agent.c, snmpd.c, snmp_parse_args.c):
+ - snmp over TCP options: -T TCP.
+ - new quick print options: -qo -qe for numeric oids and enums.
+
+1999-10-29 09:52 hardaker
+
+ * snmplib/: default_store.h, mib.c:
+
+ - (default_store.h, mib.c): two new printing options:
+ - printNumericOids
+ - printNumericEnums
+
+1999-10-29 09:28 hardaker
+
+ * agent/ucd-snmp-agent-includes.h:
+
+ - (ucd-snmp-agent-includes.h): added var_struct.h and agent_read_config.h
+
+1999-10-29 09:28 hardaker
+
+ * FAQ:
+
+ - (FAQ): added reference to an above question for perl installation.
+
+1999-10-29 08:58 hardaker
+
+ * local/: mib2c.conf, mib2c.vartypes.conf:
+
+ - (mib2c.conf, mib2c.vartypes.conf): Patch from Keith Tuson:
+ - misc fixes.
+
+1999-10-28 06:49 mslifcak
+
+ * snmplib/mib.c:
+
+ rephrase subtree not found code in _get_symbol.
+
+1999-10-28 05:25 mslifcak
+
+ * acconfig.h:
+
+ Oops! restore version r1.131.
+
+1999-10-28 05:23 mslifcak
+
+ * acconfig.h, win32/config.h:
+
+ u_int8/16/32_t types no longer needed for WIN32 builds.
+
+1999-10-28 04:55 mslifcak
+
+ * agent/snmp_agent.c:
+
+ Dave's comment about pre_parse etc. was too good to lose in e-mail.
+
+1999-10-27 17:30 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - (vacm_vars.c): watch for null communities when printing debug statements.
+
+1999-10-27 17:12 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): bail if we can't find an index in the mib tree to use for
+ breaking an oid apart.
+
+1999-10-27 17:12 hardaker
+
+ * snmplib/ucd-snmp-includes.h:
+
+ - (ucd-snmp-includes.h): added more include files.
+
+1999-10-27 14:38 hardaker
+
+ * snmplib/ucd-snmp-includes.h:
+
+ - (ucd-snmp-includes.h): add default_store.h and snmp_logging.h
+
+1999-10-27 14:37 hardaker
+
+ * snmplib/lcd_time.h:
+
+ - (lcd_time.h): define and comment LCD_TIME_SYNC_OPT better.
+
+1999-10-27 14:36 hardaker
+
+ * snmplib/default_store.h:
+
+ - (default_store.h):
+ - mark regions to be included in the default_store.3 manual page.
+
+1999-10-27 14:36 hardaker
+
+ * man/: Makefile.in, default_store.3,
+ default_store.3.bot, default_store.3.h,
+ default_store.3.top, snmp_agent_api.3:
+
+ - (Makefile.in, default_store.3, default_store.3.bot,
+ default_store.3.h, default_store.3.top, snmp_agent_api.3):
+ - new manual pages: default_store.3, snmp_agent_api.3.
+
+1999-10-27 14:35 hardaker
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - (master_admin.c): simple debugging so you can watch stuff register.
+
+1999-10-27 14:34 hardaker
+
+ * agent/: Makefile.in, ucd-snmp-agent-includes.h:
+
+ - (Makefile.in, ucd-snmp-agent-includes.h): added a header file to
+ wrap around the various agent include files.
+
+1999-10-27 14:34 hardaker
+
+ * agent/snmp_agent.h:
+
+ - (snmp_agent.h): prototype agent_check_and_process().
+
+1999-10-27 14:33 hardaker
+
+ * Makefile.in:
+
+ - (Makefile.in): fix up ucd-snmp-config.h building.
+
+1999-10-26 10:34 mslifcak
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ Allow unsigned range for counter/gauge/timeticks (fix BUG#84 per Sander Steffann).
+
+1999-10-25 16:04 hardaker
+
+ * apps/snmptranslate.c, snmplib/parse.c:
+
+ - (snmptranslate.c, parse.c): hack to do wild card searches for a mib node.
+
+1999-10-25 14:35 hardaker
+
+ * apps/snmptranslate.c:
+
+ - (snmptranslate.c): enable -p printing of only a section of the mib tree.
+
+1999-10-25 14:12 nba
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/agent_read_config.c,
+ agent/agent_registry.c, agent/auto_nlist.c,
+ agent/snmp_agent.c, agent/snmp_vars.c, agent/snmpd.c
+, agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/subagent.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ apps/snmpnetstat/Makefile.in, snmplib/asn1.c,
+ snmplib/callback.c, snmplib/default_store.c,
+ snmplib/keytools.c, snmplib/lcd_time.c, snmplib/mib.c
+, snmplib/parse.c, snmplib/read_config.c,
+ snmplib/scapi.c, snmplib/scapi.h, snmplib/snmp.c
+, snmplib/snmp_alarm.c, snmplib/snmp_api.c,
+ snmplib/snmp_auth.c, snmplib/snmp_client.c,
+ snmplib/snmp_debug.c, snmplib/snmp_logging.c,
+ snmplib/snmpusm.c, snmplib/snmpv3.c, snmplib/system.c
+, snmplib/tools.c, snmplib/vacm.c:
+
+ - *: configure support for dmalloc malloc debugger (www.dmalloc.com)
+
+1999-10-25 14:08 nba
+
+ * man/snmpd.conf.5.def:
+
+ - snmpd.conf.5.def: minor quirk
+
+1999-10-25 14:07 nba
+
+ * apps/snmpdelta.c:
+
+ - snmpdelta.c: COUNTER64 will dereference freed pointer
+
+1999-10-25 13:56 nba
+
+ * testing/: RUNTESTS, TESTCONF.sh, eval_onescript.sh
+, eval_tools.sh:
+
+ - RUNTESTS, TESTCONF.sh eval_onescript.sh eval_tools.sh: support non-bash
+ shells (echo -n vs echo \\c). Don't require . in PATH
+
+1999-10-25 13:40 nba
+
+ * configure, configure.in,
+ agent/mibgroup/ucd-snmp/proc.c:
+
+ - configure.in, proc.c: support for FreeBSD 2.1 where ps doesn't have c flag
+
+1999-10-25 13:39 nba
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - interfaces.c: fix a memory leak in the Linux part
+
+1999-10-25 08:06 mslifcak
+
+ * snmplib/: keytools.c, mib.c, scapi.c:
+
+ minor rework to clarify signed compares and remove unused variables.
+
+1999-10-24 08:27 hardaker
+
+ * snmplib/read_config.c:
+
+ - (read_config.c):
+ - premib directives weren't getting read due to a missing negation (!).
+ - more parsing debugging statements added.
+
+1999-10-24 08:25 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): fix "mibs" and "mibdirs" .conf directives to properly
+ handle multiple calls (additive) and '+'s and things.
+
+1999-10-24 08:24 hardaker
+
+ * README.snmpv3:
+
+ - (README.snmpv3): typo.
+
+1999-10-24 08:23 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): SNMPCONFPATH uses sysconfdir not datadir.
+
+1999-10-22 15:29 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): print string based OIDs better.
+
+1999-10-22 15:28 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, snmplib/keytools.c, snmplib/keytools.h
+, snmplib/scapi.c:
+
+ - (acconfig.h, config.h.in, configure, configure.in, keytools.c,
+ keytools.h, scapi.c):
+ - use openssl for md5/sha support (from Olafur Gudmundsson).
+
+1999-10-22 10:12 mslifcak
+
+ * snmplib/mib.c:
+
+ Display _some_ octet string indices of object identifiers as quoted printable.
+ Should be expanded to handle other INDEX types.
+
+1999-10-22 09:59 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): enable hex strings inside oids.
+
+1999-10-22 07:39 mslifcak
+
+ * snmplib/mib.c:
+
+ Removed duplicated variable in a nested block. ARg!
+
+1999-10-22 06:29 mslifcak
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ Fix BUG #83.
+
+1999-10-21 12:54 nba
+
+ * agent/mibgroup/ucd-snmp/memory_solaris2.c:
+
+ - memory_solaris2.c: reorder computations to avoid overflow.
+
+1999-10-21 12:31 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ small patch from M. Laukkanen to fix HP aCC build.
+
+1999-10-21 12:09 mslifcak
+
+ * man/: snmp_api.3, snmp_sess_api.3, snmpd.1.def
+, snmpnetstat.1, snmptest.1:
+
+ Fix BUG#78
+
+1999-10-21 10:42 mslifcak
+
+ * agent/: agent_trap.c, snmp_agent.c,
+ mibgroup/agentx/master.c, mibgroup/agentx/subagent.c:
+
+ use snmp_open_ex.
+
+1999-10-21 10:41 mslifcak
+
+ * apps/: snmpbulkwalk.c, snmpdelta.c, snmpget.c
+, snmpgetnext.c, snmpset.c, snmpstatus.c
+, snmptable.c, snmptest.c, snmptrap.c,
+ snmpusm.c, snmpwalk.c, snmpnetstat/main.c:
+
+ reminders for snmp_sess_perror usage after open.
+ snmptable.c - open/close session from main().
+ netstat/main.c - use snmp_sess_perror.
+
+1999-10-21 10:39 mslifcak
+
+ * win32/: config.h, libsnmp/libsnmp.dsp,
+ libsnmp_dll/libsnmp_dll.dsp:
+
+ Fixups for building with MSVC++. (no hpux.c, supply MAX_PERSISTENT_BACKUPS).
+
+1999-10-21 10:37 mslifcak
+
+ * snmplib/: mib.c, read_config.c, snmp_api.c
+, snmp_api.h:
+
+ mib.c - restore line stomped in my last update.
+ read_config.c - drop unused variable.
+ snmp_api.c - new method snmp_open_ex replaces set internal hook functions.
+
+1999-10-21 10:26 mslifcak
+
+ * snmplib/mib.c:
+
+ Note SNMPERR_UNKNOWN_OBJID error from within the library.
+
+1999-10-21 10:20 mslifcak
+
+ * apps/snmp_parse_args.c:
+
+ Note SNMPERR_UNKNOWN_OBJID error without specifying snmp_errno _outside_ the library.
+
+1999-10-21 10:07 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): enable oidname."hi".'there' in get_module_node() as well.
+
+1999-10-20 18:08 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): enable oid parser to handle simple embedded strings in oids
+ and to translate them into oid segments.
+ EG: .1.3.\"hello\".\'hi\' -> .1.3.5.104.101.108.108.111.104.105
+
+1999-10-20 17:26 hardaker
+
+ * agent/mibgroup/header_complex.c:
+
+ - (header_complex.c): parsed strings from oid's include null terminators.
+
+1999-10-15 07:09 mslifcak
+
+ * snmplib/: callback.c, default_store.c:
+
+ -(default_store.c, callback.c) fix
+ bug in array-boundary check in snmplib/callback.c
+ reported by Bert Holstein 15 Oct 1999.
+
+1999-10-13 07:09 nba
+
+ * agent/mibgroup/: agentx/master_admin.c, mibII/system_mib.c
+:
+
+ - master_admin.c, system_mib.h: includes for prototypes
+
+1999-10-13 03:54 mslifcak
+
+ * snmplib/read_config.h:
+
+ add missing proto for save_persistent.
+
+1999-10-12 06:07 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ Define address length for FreeBSD platform.
+
+1999-10-12 05:58 mslifcak
+
+ * snmplib/: lcd_time.c, mib.c:
+
+ mib.c: quick_print is exposed for CMU_COMPATIBLE builds.
+ lcd_time.c: commented unused dump_etimelist_entry under SNMP_TESTING_CODE.
+
+1999-10-07 09:01 daves
+
+ * agent/mibgroup/agentx/: master_admin.c, subagent.c:
+
+ - (agentx/subagent.c agentx/master_admin.c): Notification support
+
+1999-10-07 08:42 daves
+
+ * agent/: agent_trap.c, agent_trap.h:
+
+ - (agent_trap.[ch]): Improve accessibility for subagents
+
+1999-10-07 07:26 daves
+
+ * agent/: agent_read_config.c, agent_trap.c,
+ agent_trap.h, snmpd.h:
+
+ - (agent_trap.c agent_trap.h agent_read_config.c snmpd.h):
+ - Re-write of agent trap handling:
+ Provision for v1 traps with varbinds
+ Consolidate v1 and v2 trap sink lists
+ Preliminary INFORM support
+
+1999-10-06 16:31 hardaker
+
+ * acconfig.h, config.h.in, snmplib/read_config.c
+, snmplib/snmp_api.c, snmplib/snmp_client.c:
+
+ - (acconfig.h, config.h.in, read_config.c, snmp_api.c, snmp_client.c):
+ - Save and parse older persistent storage files to make sure data is
+ not lost during storage crashes.
+ - Fix SNMPv3 engineID probes: PDU's are allowed to have a NULL varbindlist.
+
+1999-10-06 08:57 hardaker
+
+ * local/fixproc:
+
+ - (fixproc): new commented version.
+
+1999-10-05 22:22 nba
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - subagent.c: include system.h for prototype for calculate_time_diff
+
+1999-10-05 22:18 nba
+
+ * apps/snmp_parse_args.c:
+
+ - snmp_parse_args.c: fixes to report invalid engineId
+
+1999-10-05 21:49 nba
+
+ * snmplib/snmp_debug.h:
+
+ - snmp_debug.h: make the DEBUG* macros safe for use in compound statements
+
+1999-10-05 07:23 daves
+
+ * agent/mibgroup/agentx/: master_request.c, subagent.c
+:
+
+ - (agentx/master_request.c agentx/subagent.c): Working SET support
+
+1999-10-04 16:32 hardaker
+
+ * agent/mibgroup/: header_complex.c, header_complex.h:
+
+ - (header_complex.c, header_complex.h): added header_complex_find_entry().
+
+1999-10-04 13:52 nba
+
+ * agent/: mib_modules.c, mibgroup/agentx/subagent.c,
+ mibgroup/agentx/subagent.h:
+
+ - subagent.h, subagent.c, mib_modules.c: pre_init_subagent confuses
+ configure into believing there is a init_subagent function.
+ Rename to subagent_pre_init
+
+1999-10-04 13:51 hardaker
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ - (system_mib.c): make sysServices configurable.
+
+1999-10-04 13:38 nba
+
+ * agent/: agent_registry.h, mibgroup/agentx/master_admin.c
+, mibgroup/agentx/subagent.c,
+ mibgroup/mibII/sysORTable.c, mibgroup/mibII/sysORTable.h
+:
+
+ - various: include additions and fixes to kill warnings
+
+1999-10-04 11:52 nba
+
+ * configure, configure.in:
+
+ - configure.in: remove -pedantic from --with-developer, and the system headers
+ are not prepared for it (at least on Linux and NetBSD)
+
+1999-10-04 11:50 nba
+
+ * Makefile.in:
+
+ - Makefile.in: always use $(MAKE) for make in Makefiles
+
+1999-10-04 11:48 nba
+
+ * snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/int64.c, snmplib/int64.h, apps/snmptrap.c
+:
+
+ - (snmp_api?, int64.? snmptrap.c): add some error checking for variables
+
+1999-10-04 10:22 daves
+
+ * agent/mibgroup/agentx/: client.c, client.h,
+ master_admin.c:
+
+ - (agentx/client.[ch] agentx/master_admin.c): Trivial 'ping' implementation
+
+1999-10-04 10:17 daves
+
+ * agent/: agent_callbacks.h, mibgroup/agentx/master_admin.c
+, mibgroup/agentx/subagent.c,
+ mibgroup/mibII/sysORTable.c, mibgroup/mibII/sysORTable.h
+:
+
+ - (agent_callbacks.h mibgroup/mibII/sysORTable.[ch]
+ mibgroup/agentx/master_admin.c mibgroup/agentx/subagent.c):
+ - Complete subagent handling of Agent Capabilities / sysORTable
+
+1999-10-04 10:15 daves
+
+ * snmplib/callback.h:
+
+ - (snmplib/callback.h): Increase number of application callbacks supported
+
+1999-10-04 09:58 daves
+
+ * agent/: mib_modules.c, mibgroup/agentx/subagent.c,
+ mibgroup/agentx/subagent.h:
+
+ - (mib_modules.c mibgroup/agentx/subagent.[ch]):
+ - Ensure subagent is initialised early (prior to MIB registration, etc)
+
+1999-10-04 09:53 daves
+
+ * agent/: agent_registry.c, agent_registry.h,
+ snmp_vars.h, mibgroup/agentx/client.c,
+ mibgroup/agentx/client.h, mibgroup/agentx/master_admin.c
+, mibgroup/agentx/subagent.c,
+ mibgroup/mibII/sysORTable.c:
+
+ - (agent_registry.[ch] snmp_vars.h mibII/sysORTable.c
+ agentx/client.[ch] agentx/master_admin.c):
+ - Handle MIB range registration, and clean up wrapper interfaces
+
+1999-10-04 03:58 daves
+
+ * agent/: agent_registry.c, agent_registry.h,
+ mibgroup/agentx/client.h:
+
+ - (agent_registry.[ch] mibgroup/agentx/client.h):
+ - consolidate definitions of default MIB registration priority
+
+1999-10-02 14:28 daves
+
+ * agent/mibgroup/agentx/: master_admin.c, subagent.c:
+
+ - (mibgroup/agentx/master_admin.c mibgroup/agentx/subagent.c):
+ - Fix a problem with re-used PDU structures being freed twice.
+
+1999-10-01 09:48 daves
+
+ * agent/Makefile.in:
+
+ - (agent/Makefile.in): Fix incompatability in agent library names
+
+1999-09-30 01:09 daves
+
+ * agent/mibgroup/host/hr_system.c:
+
+ - (mibgroup/host/hr_system.c):
+ - protect against NULL utmp file (from Fabrice Dupre)
+
+1999-09-29 23:42 mslifcak
+
+ * snmplib/hpux.c:
+
+ Remove unused file.. snmplib/hpux.c
+
+1999-09-29 17:01 hardaker
+
+ * agent/mib_modules.c:
+
+ - (mib_modules.c): include netinet/in.h
+
+1999-09-29 17:01 hardaker
+
+ * agent/: agent_registry.c, agent_registry.h:
+
+ - (agent_registry.c, agent_registry.h): fix bugs.
+
+1999-09-29 16:40 hardaker
+
+ * local/mib2c.vartypes.conf:
+
+ - (mib2c.vartypes.conf): removed extra \n.
+
+1999-09-29 16:40 hardaker
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ - (pass.c): run ntohl on ip addresses stored in a long.
+
+1999-09-29 16:39 hardaker
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - (master_admin.c): -Wall fixes and found a missing }.
+
+1999-09-29 16:39 hardaker
+
+ * agent/mibgroup/agentx/client.h:
+
+ - (client.h): define DEFAULT_MIB_PRIORITY to 255.
+
+1999-09-29 16:38 hardaker
+
+ * agent/mibgroup/agentx/client.c:
+
+ - (client.c): thats "timeval" not "timevale" Dave (hehe).
+
+1999-09-29 16:38 hardaker
+
+ * agent/mibgroup/: header_complex.c, header_complex.h:
+
+ - (header_complex.c, header_complex.h):
+ - new extraction and freeing functions.
+ - bug fix, missing a malloc size by one (electric fence is very cool).
+
+1999-09-29 16:36 hardaker
+
+ * README:
+
+ - (README): added Mike Michaud to the thank you list.
+
+1999-09-29 16:35 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in):
+ - fix RANLIB testing for --enable-shared.
+
+1999-09-29 14:31 mslifcak
+
+ * snmplib/parse.c:
+
+ Robust copy of information to tree, import_list, display hints.
+
+1999-09-29 12:19 daves
+
+ * agent/mibgroup/agentx/: client.c, client.h,
+ master_admin.c, master_request.c, protocol.c,
+ protocol.h, subagent.c:
+
+ - (agent/mibgroup/agentx/*): Assorted improvements!
+
+1999-09-29 11:48 daves
+
+ * agent/mibgroup/mibII/sysORTable.c:
+
+ - (agent/mibgroup/mibII/sysORTable.c): Change in MIB registration interface
+
+1999-09-29 11:46 daves
+
+ * agent/snmp_vars.c:
+
+ - (agent/snmp_vars.c):
+ - Move setting agent start time to earlier in the initialisation sequence
+ (so that it can be overridden in subagents with the master's value)
+
+1999-09-29 11:43 daves
+
+ * agent/: agent_registry.c, agent_registry.h:
+
+ - (agent_registry.[ch]): Provision to unregister MIBs by session
+
+1999-09-29 11:38 daves
+
+ * agent/agent_registry.c:
+
+ - (agent_registry.c):
+ - 'Children' nodes now have a different status, and shouldn't be freed. Oops!
+
+1999-09-29 11:36 daves
+
+ * agent/: agent_registry.c, agent_registry.h:
+
+ - (agent_registry.[ch]):
+ - Improve registry error handling
+ - Correctly handle unregistering MIB regions
+
+1999-09-29 11:23 daves
+
+ * agent/agent_registry.c:
+
+ - (agent_registry.c): Correct value of default registration priority
+
+1999-09-29 11:17 daves
+
+ * snmplib/: mt_support.h, snmp_api.c, snmp_api.h
+:
+
+ - (mt_support.h snmp_api.[ch]): Support for session and incoming transaction IDs
+
+1999-09-29 11:14 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): protect snmp_close() against a null Sessions list
+
+1999-09-28 16:52 hardaker
+
+ * agent/: Makefile.in, mib_modules.c, mib_modules.h
+, snmp_vars.c, snmpd.c:
+
+ - (Makefile.in, mib_modules.c, mib_modules.h, snmp_vars.c, snmpd.c):
+ - make libucdagent and libucdmibs as seperate libraries. In theory,
+ you shouldn't need libucdmibs to use libucdagent.
+
+1999-09-27 16:22 hardaker
+
+ * snmplib/read_config.c:
+
+ - (read_config.c): Opps: DS_LIB_DONT_READ_CONFIGS needed an !.
+
+1999-09-22 12:51 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ -(snmp_api.c) - Improved error status aggregation.
+
+1999-09-22 10:01 daves
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - (mibgroup/agentx/master_request.c): Improved AgentX response handling
+
+1999-09-22 10:00 daves
+
+ * agent/agent_registry.c:
+
+ - (agent_registry.c): Ensure registry is initialised correctly on subagents
+
+1999-09-22 09:58 daves
+
+ * agent/agent_registry.c:
+
+ - (agent_registry.c): remove redundant routines
+
+1999-09-22 09:54 daves
+
+ * agent/: agent_registry.c, snmp_vars.c,
+ var_struct.h:
+
+ - (agent_registry.c snmp_vars.c var_struct.h):
+ Change the way the MIB registry handles registered ranges.
+ This should work more reliably (as well as being rather simpler, IMHO)
+
+1999-09-22 09:35 daves
+
+ * agent/mibgroup/mibII/sysORTable.c:
+
+ - (agent/mibgroup/mibII/sysORTable.c):
+ - Ensure local sysORTable takes precedence over subagent versions
+
+1999-09-22 09:33 daves
+
+ * agent/: agent_registry.c, agent_registry.h:
+
+ - (agent/agent_registry.[ch]): Provide method for prioritised registration
+
+1999-09-22 09:31 daves
+
+ * agent/agent_registry.c:
+
+ - (agent/agent_registry.c): stupid typo
+
+1999-09-22 09:27 daves
+
+ * agent/snmpd.c:
+
+ - (agent/snmpd.c): stupid typo
+
+1999-09-21 10:40 mslifcak
+
+ * snmplib/mib.c:
+
+ -(mib.c) undo erroneous change to init_mib (thanks NB!)
+
+1999-09-21 09:32 daves
+
+ * agent/: agent_registry.c, snmpd.c:
+
+ - (agent_registry.c snmpd.c): Simple run-time dump of registered MIBs
+
+1999-09-21 09:25 daves
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - (agent/mibgroup/agentx/protocol.c): Handle parsing null-length variables
+
+1999-09-21 09:21 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): handle adding 'error' type variables to a PDU
+
+1999-09-17 15:37 hardaker
+
+ * configure:
+
+ - (configure): update to 2.13.
+
+1999-09-17 11:42 mslifcak
+
+ * snmplib/parse.c:
+
+ make module_map* and tokens structures static (only used in parse.c ?)
+
+1999-09-17 11:24 mslifcak
+
+ * FAQ, snmplib/parse.c, snmplib/parse.h:
+
+ -remove old-style init for replace mib feature.
+
+1999-09-17 11:19 mslifcak
+
+ * snmplib/parse.c:
+
+ -(parse.c) - remove unneeded use of static var "last"
+
+1999-09-17 07:17 hardaker
+
+ * man/snmp_api.3:
+
+ - (snmp_api.3): Patch from Mark H. Wood:
+ - fix comments.
+
+1999-09-16 14:16 mslifcak
+
+ * config.h.in, configure, configure.in,
+ snmplib/mt_support.c, snmplib/mt_support.h:
+
+ -per agreement with Markku, no support needed for Solaris-specific threads.
+
+1999-09-15 11:30 mslifcak
+
+ * config.h.in, configure, configure.in,
+ snmplib/mib.c, snmplib/mt_support.c,
+ snmplib/mt_support.h, snmplib/snmp_api.c:
+
+ fine tuning mt support
+
+1999-09-15 09:45 hardaker
+
+ * man/: Makefile.in, snmp_close.3, snmp_free_pdu.3
+, snmp_open.3, snmp_read.3, snmp_select_info.3
+, snmp_send.3, snmp_sess_async_send.3,
+ snmp_sess_close.3, snmp_sess_error.3, snmp_sess_init.3
+, snmp_sess_open.3, snmp_sess_read.3,
+ snmp_sess_select_info.3, snmp_sess_send.3,
+ snmp_sess_sess_timeout.3, snmp_sess_session.3,
+ snmp_timeout.3:
+
+ - (Makefile.in, snmp_close.3, snmp_free_pdu.3, snmp_open.3,
+ snmp_read.3, snmp_select_info.3, snmp_send.3,
+ snmp_sess_async_send.3, snmp_sess_close.3, snmp_sess_error.3,
+ snmp_sess_init.3, snmp_sess_open.3, snmp_sess_read.3,
+ snmp_sess_select_info.3, snmp_sess_send.3, snmp_sess_sess_timeout.3,
+ snmp_sess_session.3, snmp_timeout.3): Patch from Mark H. Wood:
+ - create some fake sourcing man pages for functions.
+
+1999-09-15 06:08 mslifcak
+
+ * agent/agent_read_config.c:
+
+ include mibgroup/mib_module_includes.h for benefit of mib_module_dot_conf.h
+
+1999-09-14 13:22 mslifcak
+
+ * snmplib/parse.c:
+
+ parse.c - another fix for node: consider NULL name or NULL parent
+
+1999-09-14 13:00 marz
+
+ * apps/snmp_parse_args.c, snmplib/snmp_api.c,
+ snmplib/snmp_api.h:
+
+ (apps/snmp_parse_args.c, snmplib/snmp_api.[ch]): fix spurious error message when snmp_parse_oid fails
+
+1999-09-14 09:53 mslifcak
+
+ * FAQ, man/snmpcmd.1, snmplib/default_store.h,
+ snmplib/mib.c, snmplib/parse.c, snmplib/parse.h
+:
+
+ -(FAQ, man/snmpcmd.1, snmplib/parse.*) add replace MIB capability(experimental)
+
+1999-09-13 20:20 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ -(snmp_api.c) re-assert Niels' patch to snmp_send to free v2/v1 Trap-PDUs
+
+1999-09-13 15:01 hardaker
+
+ * agent/: agent_callbacks.h, agent_read_config.c,
+ agent_registry.c, agent_registry.h, snmp_agent.c
+, snmp_vars.c, snmpd.c,
+ mibgroup/agentx/subagent.c, mibgroup/agentx/subagent.h,
+ mibgroup/mibII/sysORTable.c, mibgroup/mibII/vacm_vars.c
+, mibgroup/mibII/vacm_vars.h:
+
+ - (agent_callbacks.h, agent_read_config.c, agent_registry.c,
+ agent_registry.h, snmp_agent.c, snmp_vars.c, snmpd.c, subagent.c,
+ subagent.h, sysORTable.c, vacm_vars.c, vacm_vars.h):
+ - further separation of agent church and state:
+ - use callbacks everywhere needed to not call mib module code directly.
+ - get rid of all instances of USING_ in libagent code.
+
+1999-09-12 22:00 nba
+
+ * snmplib/snmp_impl.h:
+
+ - snmp_impl.h: removed some unused/unneeded defines/structs
+
+1999-09-12 21:59 nba
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - protocol.c: add a missing include file.
+
+1999-09-12 21:58 nba
+
+ * testing/TESTCONF.sh:
+
+ - TESTCONF.sh: fix some exports to export the right variable.
+
+1999-09-12 21:57 nba
+
+ * agent/agent_trap.c, agent/snmp_agent.c,
+ snmplib/snmp_api.c, snmplib/snmp_client.c:
+
+ - agent/*, snmplib/*: malloc fixes, some provoked by the corrected
+ snmp_send semantics.
+
+1999-09-12 21:50 nba
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ - var_route.c: Linux cleanup. Required for Linux/SPARC
+
+1999-09-09 13:59 mslifcak
+
+ * snmplib/: mib.c, parse.c:
+
+ -(mib.c, parse.c) mib.c print_tree_node test display null type with range
+ parse.c work around core dump freeing TCs that specify ranges.
+
+1999-09-09 02:31 mslifcak
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, win32/config.h:
+
+ -(*config*) turn on resource locking with --enable-reentrant.
+
+1999-09-09 02:21 mslifcak
+
+ * apps/snmpnetstat/winstub.c:
+
+ -(winstub.c) Hack to allow snmpnetstat -a to work on AIX4 (sic).
+
+1999-09-08 22:34 mslifcak
+
+ * agent/mibgroup/mibincl.h:
+
+ -(mibincl.h) comment out duplicate #include header lines.
+
+1999-09-08 22:30 mslifcak
+
+ * agent/mibgroup/smux/smux.c:
+
+ -(smux.c) var_smux_write fixed per Mike Michaud and Nick Amato
+
+1999-09-08 17:52 mslifcak
+
+ * snmplib/: mt_support.c, mt_support.h:
+
+ -(mt_support.*) Original by Markku Laukkanen, changes by M. Slifcak
+
+1999-09-08 17:48 mslifcak
+
+ * config.h.in, configure, configure.in,
+ snmplib/Makefile.in, snmplib/parse.c,
+ snmplib/parse.h, snmplib/snmp_api.c,
+ win32/libsnmp/libsnmp.dsp, win32/libsnmp_dll/libsnmp.def
+, win32/libsnmp_dll/libsnmp_dll.dsp:
+
+ -(config*,win32/*,snmplib/*) resource locking originally from Markku Laukkanen
+
+1999-09-08 17:02 mslifcak
+
+ * agent/mibgroup/: mibincl.h, mibII/icmp.c,
+ mibII/interfaces.c, mibII/ip.c, mibII/tcp.c,
+ mibII/udp.c:
+
+ mibincl.h, mibgroup/mibII/* - fixup for CygWin32 build
+
+1999-09-08 13:04 mslifcak
+
+ * snmplib/: snmp_client.c, snmp_client.h:
+
+ -(snmplib/snmp_client.*) add snmp_split_pdu, snmp_varbind_len methods.
+
+1999-09-08 13:00 mslifcak
+
+ * testing/RUNTESTS:
+
+ -(testing/RUNTESTS) prefix PATH with . and .. , as the script changes dir.
+
+1999-09-08 07:52 nba
+
+ * apps/snmptrapd.c:
+
+ - apps/snmptrapd.c: fix argument processing (-ld and similar)
+
+1999-09-08 07:51 nba
+
+ * man/snmpd.1.def:
+
+ - snmpd.1.def: fix a formatting problem
+
+1999-09-08 07:50 nba
+
+ * agent/mibgroup/: mibincl.h, agentx/master_admin.c,
+ agentx/master_request.c, agentx/subagent.c,
+ mibII/sysORTable.c:
+
+ - (various): fix compiler warnings
+
+1999-09-08 07:48 nba
+
+ * agent/var_struct.h:
+
+ - var_struct.h: the Agentx code uses unsigned values for the variable type.
+
+1999-09-08 07:46 nba
+
+ * snmplib/snmp_api.h:
+
+ - snmp_api.h: move inclusion protection to the real beginning/end of the file
+
+1999-09-08 07:45 nba
+
+ * configure, config.h.in, configure.in,
+ agent/mibgroup/ucd-snmp/loadave.c:
+
+ - (configure.in, loadave.c): Solaris 2.7 has getloadavg prototype
+
+1999-09-08 05:16 mslifcak
+
+ * agent/agent_trap.c:
+
+ include read_config.h
+
+1999-09-07 20:19 mslifcak
+
+ * apps/snmptrap.c:
+
+ snmptrap.c - rework fix bug #54 (missed else).
+
+1999-09-07 20:12 mslifcak
+
+ * agent/agent_trap.c, apps/snmptrap.c,
+ apps/snmpnetstat/if.c, man/snmp_api.3,
+ snmplib/snmp_api.c:
+
+ -(agent_trap.c,snmptrap.c,snmp_api.[3c]) - snmp_free_pdu fix Bug #54 per Niels B.
+ -(snmpnetstat/if.c) - fix for GETNEXT per Niels B.
+
+1999-09-07 15:57 mslifcak
+
+ * snmplib/parse.c:
+
+ -(parse.c) fix Unlinked OID print when object identifier has no parent.
+
+1999-09-07 15:32 mslifcak
+
+ * snmplib/parse.c:
+
+ -(parse.c) remove unneeded strdup to File variable from init_mib_internals.
+
+1999-09-07 15:32 mslifcak
+
+ * snmplib/snmp_api.h:
+
+ -(snmp_api.h) struct pdu and snmp_session agree: long type for version member.
+
+1999-09-07 15:23 mslifcak
+
+ * win32/: config.h, libsnmp_dll/libsnmp.def:
+
+ (win32/config.h) - set SNMPCONFPATH to succeed compile;
+ (win32*libsnmp.def) - add new snmp_get_token to list.
+
+1999-09-07 15:23 mslifcak
+
+ * snmplib/: default_store.c, default_store.h:
+
+ (default_store.*) - make 3rd param to ds_set_string type of const char *.
+
+1999-09-07 15:22 mslifcak
+
+ * snmplib/snmpv3.c:
+
+ snmpv3.c - silence type warning from MSVC++.
+
+1999-09-07 14:47 mslifcak
+
+ * snmplib/: parse.c, parse.h:
+
+ -(parse.*) fix small memory leaks; allow INDEX{INTEGER...} clauses;
+ allow larger DESCRIPTION clauses [max 8192].
+
+1999-09-03 15:01 hardaker
+
+ * FAQ:
+
+ - (FAQ): more BSDI system versions listed.
+
+1999-09-03 14:28 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): don't fall off the end of the search tree.
+
+1999-09-03 13:30 hardaker
+
+ * snmplib/Makefile.in:
+
+ - (snmplib/Makefile.in): install more library headers.
+
+1999-09-03 13:27 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in):
+ - install libagent.a.
+ - mkdirheir on needed new installation directories.
+
+1999-09-03 13:15 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): install agent header files.
+
+1999-09-03 13:15 hardaker
+
+ * agent/: history.c, history.h, snmp_vars.linux.h
+:
+
+ - (history.c, history.h, snmp_vars.linux.h): removed. No longer needed.
+
+1999-09-02 08:52 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - (subagent.c): opps. Forgot a shutdown name change instance.
+
+1999-09-02 07:07 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - (subagent.c): shutdown_subagent -> subagent_shutdown so configure
+ doesn't find it.
+
+1999-09-02 06:38 daves
+
+ * agent/mibgroup/misc/ipfwacc.c:
+
+ - (agent/mibgroup/misc/ipfwacc.c): Fix MIB location of ipfwacc module
+
+1999-08-31 09:26 mslifcak
+
+ * agent/agent_trap.c:
+
+ -(agent_trap.c) always free PDU after snmp_send.
+
+1999-08-31 08:17 mslifcak
+
+ * agent/agent_trap.c:
+
+ -(agent_trap.c) fix recent memory leak, and sizeof(objid_snmptrap) bug.
+
+1999-08-30 10:30 hardaker
+
+ * agent/mibgroup/agentx/: master.c, master_request.c:
+
+ - (master.c, master_request.c): yet more debugging.
+
+1999-08-30 09:38 hardaker
+
+ * agent/mibgroup/agentx/: client.c, master.c,
+ master_request.c, protocol.c, subagent.c:
+
+ - (client.c, master.c, master_request.c, protocol.c, subagent.c):
+ - debugging statements.
+ - use new default_store settings instead of external variables.
+
+1999-08-30 09:32 hardaker
+
+ * agent/Makefile.in, agent/agent_read_config.c,
+ agent/agent_registry.c, agent/agent_trap.c,
+ agent/agent_trap.h, agent/ds_agent.h,
+ agent/snmp_agent.c, agent/snmp_agent.h,
+ agent/snmp_vars.c, agent/snmpd.c,
+ agent/mibgroup/util_funcs.c,
+ agent/mibgroup/mibII/sysORTable.c, snmplib/callback.c,
+ snmplib/callback.h, snmplib/default_store.h,
+ snmplib/read_config.c, snmplib/snmp_api.c:
+
+ - (Makefile.in, agent_read_config.c, agent_registry.c, agent_trap.c,
+ agent_trap.h, ds_agent.h, snmp_agent.c, snmp_agent.h, snmp_vars.c,
+ snmpd.c, util_funcs.c, sysORTable.c, callback.c, callback.h,
+ default_store.h, read_config.c, snmp_api.c):
+ - restructure the agent into two pieces: a library and a application.
+ - needs much more work.
+ - many parameters are now controlled by new default_store settings
+ to help relieve compile time bindings.
+ - merge init_snmp and the custom version called inside the agent.
+ - add a new place for trap specific agent code (agent_trap.[ch]).
+ - probably other things I've forgotten that I did.
+
+1999-08-28 07:29 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, snmplib/read_config.c:
+
+ - (acconfig.h, config.h.in, configure, configure.in, read_config.c):
+ - add /etc/snmp to default conf file path to make RedHat happy.
+
+1999-08-28 07:19 hardaker
+
+ * man/Makefile.in:
+
+ - (Makefile.in): install snmp_alarm.3.
+
+1999-08-27 09:17 hardaker
+
+ * agent/mibgroup/mibII/: icmp.c, interfaces.c, ip.c
+, route_write.c, tcp.c, udp.c,
+ var_route.c:
+
+ - (icmp.c, interfaces.c, ip.c, route_write.c, tcp.c, udp.c, var_route.c):
+ - Susanne Osted pointed out a lack of #if HAVE_SYS_PARAM_H.
+
+1999-08-27 08:03 mslifcak
+
+ * TODO:
+
+ Howard Spindel suggests an API for traps with pass_persist.
+
+1999-08-27 07:35 mslifcak
+
+ * configure, configure.in, sedscript.in:
+
+ -(configure*, sedscript*) change ...EXTENIS... to ...EXTENSI...
+
+1999-08-26 13:40 mslifcak
+
+ * testing/Makefile.in:
+
+ -(testing/Makefile.in) don't built targets that are no longer used
+
+1999-08-26 13:18 mslifcak
+
+ * testing/RUNTESTS:
+
+ -(testing/RUNTESTS) improved PATH set
+
+1999-08-24 17:43 mslifcak
+
+ * testing/Makefile.in:
+
+ -(testing/Makefile.in) no need to build targets in test rule.
+
+1999-08-24 17:39 mslifcak
+
+ * testing/RUNTESTS:
+
+ -(RUNTESTS) export PATH before use
+
+1999-08-24 17:14 hardaker
+
+ * bug-report, sedscript.in, version.h, FAQ
+, README:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.0.1 )
+
+1999-08-24 17:13 hardaker
+
+ * ChangeLog:
+
+ - (ChangeLog): update for 4.0.1
+
+1999-08-24 16:49 mslifcak
+
+ * testing/: Makefile.in, RUNTESTS, T2.sh,
+ TESTCONF.sh, eval_onescript.sh, eval_tools.sh,
+ test_keychange.sh, test_kul.sh:
+
+ -(testing/*) run tests when package is not installed, and when
+ the build tree is not the same as the source tree.
+
+1999-08-24 16:05 mslifcak
+
+ * configure, configure.in:
+
+ -(configure.*) move statement about ucdDemoPublic into comment field.
+
+1999-08-24 16:01 hardaker
+
+ * NEWS:
+
+ - (NEWS): 4.0.1 update
+
+1999-08-24 15:59 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): remove version setting in snmp_api.c. Not needed there.
+
+1999-08-24 15:14 mslifcak
+
+ * agent/mibgroup/smux/smux.c:
+
+ -(smux.c) apply Nick Amato's patch: prevent SMUX close on parse or error.
+
+1999-08-24 14:17 mslifcak
+
+ * agent/mibgroup/: host/hr_swrun.c, mibII/icmp.c,
+ mibII/ip.c, ucd-snmp/disk.c, ucd-snmp/proc.c:
+
+ -(host/hr_swrun;mibII/icmp,ip;ucd-snmp/disk,proc) log_perror --> snmp_log_perror
+
+1999-08-24 14:15 hardaker
+
+ * snmplib/all_system.h:
+
+ - (all_system.h): remove. again.
+
+1999-08-24 14:05 mslifcak
+
+ * Makefile.in:
+
+ -(top/Makefile.in) - remove more generated files with distclean rule.
+
+1999-08-24 13:41 hardaker
+
+ * TODO:
+
+ - (TODO): remove snmpv3 support:-)
+
+1999-08-24 13:37 hardaker
+
+ * apps/snmp_parse_args.c, snmplib/default_store.h,
+ snmplib/snmp_api.c, snmplib/snmpv3.c:
+
+ - (snmp_parse_args.c, default_store.h, snmp_api.c, snmpv3.c):
+ - provide defVersion token support in snmp.conf (sort of hackish).
+
+1999-08-24 13:36 hardaker
+
+ * apps/snmpusm.c:
+
+ - (snmpusm.c): check for null response pointer.
+
+1999-08-24 12:48 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - (vacm_vars.c): correct sysORTable entry.
+
+1999-08-24 10:25 mslifcak
+
+ * testing/eval_tools.sh:
+
+ -(testing/eval_tools) - let some (AIX) agents settle before firing requests.
+
+1999-08-24 06:19 mslifcak
+
+ * testing/: RUNTESTS, T.c, etimetest.c,
+ keymanagetest.c, misctest.c, scapitest.c:
+
+ Add "." to PATH for RUNTESTS; Drop optreset to build most platforms
+
+1999-08-24 05:11 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ Remove ASN_SHORT_LEN hack - known to dump core in agent.
+
+1999-08-24 04:44 mslifcak
+
+ * snmplib/: read_config.c, snmp_api.c,
+ snmp_logging.c:
+
+ Clean CRs from read_config,snmp_logging; comment define USE_ASN_SHORT_LEN.
+
+1999-08-23 16:44 hardaker
+
+ * man/Makefile.in:
+
+ - (Makefile.in): install the snmpusm.1 manual page.
+
+1999-08-23 16:19 hardaker
+
+ * README, bug-report, sedscript.in, version.h
+, FAQ:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.0 )
+
+1999-08-23 16:17 hardaker
+
+ * INSTALL:
+
+ - (INSTALL): remove version specific information
+
+1999-08-23 16:12 hardaker
+
+ * testing/tests/T028snmpv3getfail:
+
+ - (T028snmpv3getfail): snmpv3 get failure test.
+
+1999-08-23 16:04 hardaker
+
+ * ChangeLog:
+
+ - (ChangeLog): version update
+
+1999-08-23 15:32 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ HACK! fixup short length (first put correct community string in pdu-> ).
+
+1999-08-23 14:02 mslifcak
+
+ * FAQ, snmplib/snmp_api.c:
+
+ Describe USE_ASN_SHORT_LEN in FAQ, and implement in _snmp_build.
+
+1999-08-23 13:54 nba
+
+ * agent/: snmp_agent.c, snmpd.c:
+
+ - agent/snmpd.c, agent/snmp_vars.c: move some -v logging to a more rational
+ place.
+
+1999-08-23 12:28 hardaker
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - (protocol.c): allow NULL strings in agentX packets.
+
+1999-08-23 09:02 mslifcak
+
+ * snmplib/snmpusm.c:
+
+ Test pointer before dereference in usm_free_user
+
+1999-08-23 09:02 mslifcak
+
+ * README.win32:
+
+ Spell check: similar
+
+1999-08-23 09:00 mslifcak
+
+ * snmplib/read_config.c, snmplib/snmp_logging.c,
+ win32/libsnmp_dll/libsnmp.def:
+
+ Win32 build fixes
+
+1999-08-23 07:02 hardaker
+
+ * NEWS:
+
+ - (NEWS): ansi mentioned.
+
+1999-08-23 06:14 mslifcak
+
+ * acconfig.h, config.h.in, win32/config.h:
+
+ Remove last vestiges of config_load_mib
+
+1999-08-22 23:17 nba
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - agentx/master_admin.c: failure when closing first agents session
+ (uninitialized variable).
+
+1999-08-22 17:57 hardaker
+
+ * snmplib/snmp_api.h:
+
+ - (snmp_api.h): version -> u_long.
+
+1999-08-22 17:56 hardaker
+
+ * agent/mibgroup/Makefile.in, snmplib/Makefile.in:
+
+ - (Makefile.in, Makefile.in): make depend.
+
+1999-08-22 17:54 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in):
+ - --without-dummy-values is default again.
+ - cleanup of --help stuff.
+ - fix of peristent directory creation.
+
+1999-08-22 17:32 hardaker
+
+ * agent/mibgroup/ipfwchains/: IPFWCHAINS-MIB.txt, README
+, ipfwc_kernel_headers.h, ipfwchains.c,
+ ipfwchains.h, libipfwc.c, libipfwc.h:
+
+ - (ipfchains): removed from distribution. Newer one in ftp's contrib dir.
+
+1999-08-20 17:10 hardaker
+
+ * README, bug-report, sedscript.in, version.h
+, FAQ:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.0.pre7 )
+
+1999-08-20 17:08 hardaker
+
+ * NEWS:
+
+ - (NEWS): last minute changes
+
+1999-08-20 16:39 hardaker
+
+ * snmplib/: asn1.c, snmp_api.h, snmp_auth.c,
+ snmp_impl.h:
+
+ - (snmp_api.h, snmp_api.c, snmp_auth.c, snmp_impl.h, asn1.c): 64bit cleanup.
+
+1999-08-20 13:56 hardaker
+
+ * man/snmp.conf.5.def, snmplib/default_store.h,
+ snmplib/snmp_logging.c:
+
+ - (snmp.conf.5.def, default_store.h, snmp_logging.c):
+ - turn off time stamp logging by default. It must be explicitly
+ requested in the snmp.conf file to turn it on.
+ (the reason is that a lot of logging is incremental in nature and
+ is not line buffered before being sent to the logging routines.
+ The other solution is to have the logging routines detect when to
+ print timestamps by watching out for \n's. But, not this round.
+
+1999-08-20 13:43 hardaker
+
+ * snmplib/: default_store.h, snmp_api.c,
+ snmp_logging.c, snmp_logging.h:
+
+ - (default_store.h, snmp_api.c, snmp_logging.c, snmp_logging.h):
+ - make logging of timestamps optional by a snmp.conf directive.
+
+1999-08-20 03:43 nba
+
+ * agent/mibgroup/agentx/client.c,
+ agent/mibgroup/agentx/client.h,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/master_request.c,
+ agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/mibII/sysORTable.c, apps/snmptrap.c,
+ snmplib/snmp_client.h:
+
+ - agentx/*: various prototype fixes, to keep number of warnings down
+
+1999-08-19 16:09 hardaker
+
+ * apps/: snmpget.c, snmpgetnext.c, snmpset.c:
+
+ - (snmpget.c, snmpgetnext.c, snmpset.c): Patch from dlengel@home.com:
+ - check argument count for minimum number.
+
+1999-08-19 14:09 nba
+
+ * agent/snmpd.c, apps/snmptrap.c, apps/snmptrapd.c
+, snmplib/snmp_api.c, snmplib/snmp_api.h:
+
+ - snmp_api.?, snmpd.c, snmptrap.c, snmptrapd.c: reinstate agent_addr in
+ the pdu structure (used for v1 traps).
+
+1999-08-19 10:40 nba
+
+ * agent/snmpd.c:
+
+ - snmpd.c: remove some superfluous: from snmp_log_perror.
+ Log when snmpd reconfigures following a SIGHUP
+
+1999-08-19 10:38 nba
+
+ * agent/mibgroup/smux/smux.c:
+
+ - smux.c: remove some extraneous \n from snmp_log_perror calls.
+
+1999-08-19 10:38 nba
+
+ * snmplib/snmp_api.c:
+
+ - snmp_api.c: correcly call pre-parse hook, also when not debugging
+ (this killed the libwrap check in snmpd)
+
+1999-08-19 02:35 nba
+
+ * agent/snmp_agent.c, agent/snmpd.c,
+ snmplib/snmp_logging.c:
+
+ - snmp_logging.c, agent/various: reinstate -a and -V logging (almost).
+ timestamp file and stderr logging.
+
+1999-08-19 02:33 nba
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - interfaces.c: remove some left over debug output
+
+1999-08-18 09:30 nba
+
+ * agent/auto_nlist.c, agent/kernel.c, agent/snmpd.c
+, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/mibII/at.c,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/smux/smux.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/vmstat.c, apps/snmp_parse_args.c
+, apps/snmpdelta.c, apps/snmptrapd.c,
+ apps/snmpnetstat/main.c, snmplib/parse.c,
+ snmplib/read_config.c, snmplib/snmp_debug.c,
+ snmplib/snmp_logging.c, snmplib/snmp_logging.h,
+ snmplib/snmpv3.c:
+
+ - (many): change the names of the logging functions to be snmp_*
+ default do_stderr_logging to 1.
+
+1999-08-18 09:26 nba
+
+ * agent/mibgroup/mibII/: interfaces.c, interfaces.h:
+
+ - interfaces.?: updates for Linux to handle large counters and virtual
+ interfaces.
+
+1999-08-18 02:51 nba
+
+ * agent/: agent_read_config.c, agent_read_config.h,
+ snmpd.c, mibgroup/ucd-snmp/versioninfo.c:
+
+ - snmpd.c, agent_read_config.?, versioninfo.c: move the reconfiguration
+ outside the signal handler.
+
+1999-08-18 02:40 nba
+
+ * agent/snmpd.c:
+
+ agent/snmpd.c: move the termination processing from the signal handler
+ to after the main loop has terminated.
+
+1999-08-16 15:09 hardaker
+
+ * testing/tests/T100agenthup:
+
+ - (T100agenthup): added new agent capability test to test kill -HUP.
+
+1999-08-16 14:59 nba
+
+ * apps/snmpnetstat/main.c:
+
+ snmpnetstat/main.c: enable_stderrlog() so that we get an error message
+ for bad host names.
+
+1999-08-16 14:58 nba
+
+ * apps/snmpnetstat/if.c:
+
+ snmpnetstat/if.c: allow -i and -o outputs even with incomplete responses
+ from snmpd (such as Linux that does not return ifInNUCastPkts
+ with the new DUMMY setup)
+
+1999-08-13 16:06 hardaker
+
+ * bug-report, version.h, FAQ, README,
+ sedscript.in:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.0.pre6 )
+
+1999-08-13 16:05 hardaker
+
+ * remove-files:
+
+ - (remove-files): remove the ISSUES file for releases.
+
+1999-08-13 16:03 hardaker
+
+ * testing/TESTCONF.sh:
+
+ - (TESTCONF.sh): store the peristent data in a temporary file. really.
+
+1999-08-13 15:48 hardaker
+
+ * testing/tests/: T003snmpv1getfail, T016snmpv2cgetfail
+, T017snmpv2ctov1getfail, T018snmpv1tov2cgetfail,
+ T030snmpv3usercreation:
+
+ - (T003snmpv1getfail, T016snmpv2cgetfail, T017snmpv2ctov1getfail,
+ T018snmpv1tov2cgetfail, T030snmpv3usercreation):
+ - fixed to check for "nosuch" errors actually returned.
+ - shortened the snmpusm test description.
+
+1999-08-13 15:35 hardaker
+
+ * Makefile.in:
+
+ - (Makefile.in): don't remove mib_module_loads.h.
+
+1999-08-13 15:22 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): remove config_load_mib parsing.
+
+1999-08-13 12:49 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): properly do what --without-dummy-values
+ should do.
+
+1999-08-13 12:18 mslifcak
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ var_route.c - #ifdef NO_DUMMY --> #if NO_DUMMY (like the other uses).
+
+1999-08-13 11:55 hardaker
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ - (var_route.c): don't do caching for NO_DUMMY_VALUES.
+
+1999-08-13 11:14 mslifcak
+
+ * agent/mibgroup/: host/hr_device.c, host/hr_print.c,
+ host/hr_proc.c, host/hr_storage.c, host/hr_swinst.c
+, host/hr_swrun.c, host/hr_system.c, mibII/at.c
+, mibII/interfaces.c, mibII/ip.c,
+ mibII/system_mib.c, mibII/tcp.c, mibII/udp.c,
+ mibII/var_route.c:
+
+ (host/hr_device.c,host/hr_print.c, host/hr_proc.c,host/hr_storage.c,
+ host/hr_swinst.c,host/hr_swrun.c, host/hr_system.c,mibII/at.c,
+ mibII/interfaces.c,mibII/ip.c, mibII/system_mib.c,mibII/tcp.c,
+ mibII/udp.c,mibII/var_route.c) - #if NO_DUMMY_VALUES (help out configure)
+
+1999-08-13 09:33 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): don't use NO_DUMMY_VALUES by default.
+
+1999-08-13 07:16 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, snmplib/Makefile.in:
+
+ - (Makefile.in, Makefile.in, Makefile.in, Makefile.in): make depend.
+
+1999-08-13 07:12 hardaker
+
+ * NEWS, README.snmpv3, configure, configure.in
+:
+
+ - (NEWS, README.snmpv3, configure, configure.in): documentation updates.
+
+1999-08-13 07:11 hardaker
+
+ * Makefile.in:
+
+ - (Makefile.in): "make test" in top level Makefile.
+
+1999-08-13 02:46 daves
+
+ * agent/mibgroup/: examples/ucdDemoPublic.c,
+ examples/ucdDemoPublic.h, ipfwchains/ipfwchains.c,
+ ipfwchains/ipfwchains.h, misc/ipfwacc.c, misc/ipfwacc.h
+, target/snmpTargetAddrEntry.c,
+ target/snmpTargetAddrEntry.h, target/snmpTargetParamsEntry.c
+, target/snmpTargetParamsEntry.h, smux/snmp_bgp.c
+, smux/snmp_bgp.h, smux/snmp_ospf.c,
+ smux/snmp_ospf.h, smux/snmp_rip2.c, smux/snmp_rip2.h
+:
+
+ - (examples/ucdDemoPublic.[ch]
+ ipfwchains/ipfwchains.[ch] misc/ipfwacc.[ch]
+ target/snmpTarget{Addr,Params}Entry.[ch]
+ smux/snmp_*.[ch]):
+ - Register modules dynamically at run-time
+
+1999-08-13 02:44 daves
+
+ * agent/agent_registry.c:
+
+ - (agent_registry.c): Drop support for 'static' module registration via configure
+
+1999-08-12 16:46 hardaker
+
+ * NEWS, README:
+
+ - (NEWS, README): minor updates.
+
+1999-08-12 16:41 hardaker
+
+ * FAQ, man/snmpcmd.1, man/snmptrap.1:
+
+ - (FAQ, snmpcmd.1, snmptrap.1): minor doc updates.
+
+1999-08-12 16:22 hardaker
+
+ * testing/tests/: Sv3config, T020snmpv3get,
+ T021snmpv3getnext, T030snmpv3usercreation:
+
+ - (Sv3config, T020snmpv3get, T021snmpv3getnext,
+ T030snmpv3usercreation): test updates, including a new snmpusm test.
+
+1999-08-12 16:18 hardaker
+
+ * man/snmpusm.1:
+
+ - (snmpusm.1): no-fill the .conf file entries.
+
+1999-08-12 16:16 hardaker
+
+ * man/snmp.conf.5.def:
+
+ - (snmp.conf.5.def): updated with the newer token list.
+
+1999-08-12 16:15 hardaker
+
+ * man/snmpusm.1:
+
+ - (snmpusm.1): added to describe the snmpusm command.
+
+1999-08-12 09:31 mslifcak
+
+ * snmplib/snmpusm.c:
+
+ -(snmpusm.c) - fix potential repeated "free" on malloc failure.
+
+1999-08-11 21:53 nba
+
+ * apps/snmpnetstat/if.c:
+
+ snmpnetstat/if.c: handle non-contiguous ifTable. Also make the
+ counters unsigned.
+
+1999-08-11 21:52 nba
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ hr_storage.c: remove to forgotten debug lines.
+
+1999-08-11 13:04 hardaker
+
+ * acconfig.h, config.h.in, snmplib/read_config.c
+:
+
+ - (acconfig.h, config.h.in, read_config.c):
+ - Make persistent cache conform to a more secure umask.
+
+1999-08-11 10:50 hardaker
+
+ * README.snmpv3, apps/snmpusm.c:
+
+ - (README.snmpv3, snmpusm.c): use ss session to get probed engineID.
+
+1999-08-10 17:24 hardaker
+
+ * snmplib/lcd_time.c:
+
+ - (lcd_time.c): debugging statements.
+
+1999-08-10 17:23 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): print -H usage to stderr.
+
+1999-08-10 17:23 hardaker
+
+ * README.snmpv3:
+
+ - (README.snmpv3): update.
+
+1999-08-10 15:54 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): force v3 engineID setting to something bogus to
+ get around local configuration data store time synchronization conflicts.
+
+1999-08-10 14:27 hardaker
+
+ * agent/mibgroup/snmpv3/usmUser.c:
+
+ - (usmUser.c): Um, cough, actually register us in the *init* function...
+
+1999-08-10 14:26 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): protect against evil mib modules from modifying
+ memory they shouldn't be modifying yet.
+ - (ifdef'ed for speed profiling later).
+
+1999-08-10 11:05 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): log version number after stderr is optionally closed.
+
+1999-08-10 10:04 mslifcak
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ Fix for build (no pagesize var defined for linux).
+
+1999-08-10 09:19 mslifcak
+
+ * snmplib/: read_config.c, snmp_api.c:
+
+ read_config.c, snmp_api.c - convert fprintf(stderr to snmp_log(LOG_ERR,WARNING)
+
+1999-08-10 04:50 nba
+
+ * agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/var_route.c, snmplib/snmp_logging.c
+:
+
+ interfaces.c var_route.c snmp_logging.c: fix compiler warnings
+
+1999-08-10 04:48 nba
+
+ * apps/snmpnetstat/if.c:
+
+ snmpnetstat/if.c: fixes for snmpnetstat -i on virtual interfaces
+
+1999-08-10 04:47 nba
+
+ * agent/kernel.c:
+
+ agent/kernel.c: abort on kvm_open failures
+
+1999-08-10 04:46 nba
+
+ * snmplib/mib.c:
+
+ snmplib/mib.c: fix handling of numeric oids and reporting errors
+
+1999-08-10 04:45 nba
+
+ * configure.in, config.h.in, configure,
+ agent/mibgroup/host/hr_storage.c:
+
+ configure.in config.h.in configure s/netbsd agent/mibgroup/host/hr_storage.c:
+ support for NetBSD/sparc and NetBSD 1.4
+
+1999-08-09 15:07 mslifcak
+
+ * snmplib/: snmp_api.c, snmpusm.c:
+
+ snmpusm.c - always clear field_len if ref is valid ptr;
+ snmp_api.c - don't overwrite community pointer with securityAuthProto pointer
+
+1999-08-09 14:29 hardaker
+
+ * snmplib/snmpusm.c:
+
+ - (snmpusm.c): error check/null set *after* freeing the old memory.
+
+1999-08-09 14:28 hardaker
+
+ * snmplib/snmpusm.c:
+
+ - (snmpusm.c): more error checking in the MAKE_ENTRY macro.
+
+1999-08-09 13:12 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in): remove /dev/random test.
+
+1999-08-09 11:40 mslifcak
+
+ * snmplib/: md5.c, snmp_api.c:
+
+ -(md5.c) fix read past end problem
+ -(snmp_api.c) fix losing community string problem
+
+1999-08-09 10:43 nba
+
+ * agent/mibgroup/kernel_sunos5.c,
+ agent/mibgroup/kernel_sunos5.h,
+ agent/mibgroup/mibII/system_mib.c, apps/Makefile.in,
+ snmplib/snmp_client.c, snmplib/snmp_client.h,
+ snmplib/snmpv3.c:
+
+ (many): nuke various prototype warnings
+
+1999-08-09 09:45 mslifcak
+
+ * snmplib/snmp.c:
+
+ -(snmp.c) fix buffer overflow in xdump, of all places (77 s/b 78; using 80)
+
+1999-08-09 06:54 mslifcak
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ libsnmp.def - remove print_oid_report disable options
+
+1999-08-09 06:52 mslifcak
+
+ * agent/snmpd.c:
+
+ snmpd.c - list all options in usage
+
+1999-08-09 06:50 mslifcak
+
+ * apps/: snmpdelta.c, snmptranslate.c, snmptrapd.c
+:
+
+ snmpdelta, translate, trapd) - list all options in usage; remove disables for print_oid_report in translate.
+
+1999-08-09 06:48 mslifcak
+
+ * snmplib/: mib.c, mib.h, parse.c, parse.h
+:
+
+ mib.*, parse.* - move print_oid_report and minions wholly into mib.c
+
+1999-08-09 01:02 daves
+
+ * FAQ:
+
+ - (FAQ): Nine new questions, plus assorted tweaks for the new release.
+
+1999-08-09 00:24 nba
+
+ * snmplib/parse.c:
+
+ parse.c: parse agent capabilities
+
+1999-08-06 07:36 mslifcak
+
+ * snmplib/: snmp_logging.c, snmp_logging.h:
+
+ -(snmp_logging.*) -added Ragnar's patch #3 with small touches.
+
+1999-08-06 06:02 daves
+
+ * agent/mibgroup/: mibII/at.c, mibII/interfaces.c,
+ mibII/ip.c, mibII/system_mib.c, mibII/tcp.c,
+ mibII/udp.c, mibII/var_route.c, host/hr_device.c
+, host/hr_print.c, host/hr_proc.c,
+ host/hr_storage.c, host/hr_swinst.c, host/hr_swrun.c
+, host/hr_system.c:
+
+ - (mibII/*.c host/*.c): Don't provide "dummy" values (unless explicitly configured)
+
+1999-08-06 05:59 daves
+
+ * acconfig.h, config.h.in, configure.in,
+ configure:
+
+ - (acconfig.h config.h.in configure.in configure):
+ - configure-time flag to control provision of "dummy" values
+
+1999-08-05 11:11 mslifcak
+
+ * man/snmp_api.3:
+
+ snmp_api.3 - describe snmp_error(), replaces snmp_errno and snmp_get_errno()
+
+1999-08-05 10:44 mslifcak
+
+ * agent/mibgroup/agentx/client.c:
+
+ agentx/client.c - remove refs to snmp_synch{setup,reset} original version
+
+1999-08-05 03:25 mslifcak
+
+ * config.sub:
+
+ config.sub - patch from Markku Laukkanen to support HPUX 11
+
+1999-08-04 12:33 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ snmp_api.c - dummy functions snmp_synch_{setup,reset} and snmp_get_errno.
+
+1999-08-04 09:17 mslifcak
+
+ * configure, configure.in:
+
+ -(configure*) - Ken Hornstein: fix test xxgethostbyname, xxgetservbyname.
+
+1999-08-04 05:03 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ undo patch around Solaris' configure failure to register HAVE_GETHOSTBYNAME.
+
+1999-08-04 03:48 mslifcak
+
+ * agent/mibgroup/smux/smux.c:
+
+ -(smux.c) - patch supplied by Nick Amato to fix ASN_IPADDRESS parse.
+
+1999-08-04 01:46 daves
+
+ * mibs/UCD-DEMO-MIB.txt:
+
+ - (mibs/UCD-DEMO-MIB.txt): Re-resolve file & ucdDemo OID conflict
+
+1999-08-03 14:06 mslifcak
+
+ * snmplib/snmp_debug.c:
+
+ snmp_debug.c - signed comparison for len in debugmsg_hextli.
+
+1999-08-03 12:53 mslifcak
+
+ * snmplib/snmp_debug.h:
+
+ snmp_debug.h - fix "warning: ANSI C forbids conditional expr with only one void side".
+
+1999-08-03 08:37 mslifcak
+
+ * README.win32:
+
+ README.win32 - runtime lib and debug info courtesy of Robert Story.
+
+1999-08-03 07:58 mslifcak
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ vacm_vars.c - copy community string, null terminate, then debug print
+
+1999-08-03 07:03 mslifcak
+
+ * snmplib/snmp_debug.h:
+
+ snmp_debug.h - move DEBUGTRACE from debugmsg_hextli to DEBUGDUMPSETUP
+
+1999-08-03 07:00 mslifcak
+
+ * snmplib/snmp_debug.c:
+
+ snmp_debug.c - remove trace messages from debugmsg_hextli.
+
+1999-08-03 06:59 mslifcak
+
+ * snmplib/asn1.c:
+
+ asn1.c - fix out-of-bound array write and memory leak in parsing strings.
+
+1999-08-03 04:46 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ snmp_api.c - remove "BY" from HAVE_GETHOSTBYNAME (Solaris 2.5.1 wrong!)
+
+1999-08-02 22:29 mslifcak
+
+ * snmplib/snmp_debug.h:
+
+ snmp_debug - DEBUGMSG macros call snmp_get_do_debugging before invoking debugmsg* functions.
+
+1999-08-02 04:37 mslifcak
+
+ * snmplib/parse.c:
+
+ parse - shame on me for not compile testing first!
+
+1999-08-02 04:29 mslifcak
+
+ * snmplib/: asn1.c, parse.c:
+
+ asn1, parse) fixes supplied by Markku Laukkanen (MJS-use xcalloc in parse)
+
+1999-07-30 14:19 hardaker
+
+ * version.h, bug-report, sedscript.in, README
+, FAQ:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.0.pre5 )
+
+1999-07-30 14:18 hardaker
+
+ * agent/Makefile.in, apps/Makefile.in,
+ snmplib/Makefile.in, agent/mibgroup/Makefile.in:
+
+ - (*/Makefile.in): make depend
+
+1999-07-30 14:10 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): make /var/ucd-snmp exist. We should do a permission
+ set as well.
+
+1999-07-30 14:10 hardaker
+
+ * config.h.in:
+
+ - (config.h.in): autoheader run.
+
+1999-07-30 14:09 hardaker
+
+ * README.snmpv3:
+
+ - (README.snmpv3): generic v3 instructions, but has errors.
+
+1999-07-30 08:32 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ no struct sockaddr_dl in AIX 3.
+
+1999-07-30 08:01 mslifcak
+
+ * config.h.in, configure, configure.in:
+
+ add vsnprintf check and HAVE_VSNPRINTF constant
+
+1999-07-30 07:31 daves
+
+ * acconfig.h:
+
+ - (acconfig.h): Check for libdb/libdb1 & librpm separately
+
+1999-07-30 07:01 daves
+
+ * configure, configure.in:
+
+ - (configure.in configure): Check for libdb/libdb1 & librpm separately
+
+1999-07-30 06:58 mslifcak
+
+ * agent/Makefile.in:
+
+ remove references to non-existent snmp_vars_m2m.h
+
+1999-07-30 06:46 mslifcak
+
+ * agent/mibgroup/agentx/master_request.c,
+ apps/encode_keychange.c, snmplib/snmp_debug.c,
+ snmplib/system.h:
+
+ use traditional K&R commenting; not all "C" compilers accept "//" comments.
+
+1999-07-30 06:30 mslifcak
+
+ * win32/config.h:
+
+ win32/config.h - define HAVE_GETHOSTNAME
+
+1999-07-30 06:30 mslifcak
+
+ * snmplib/system.c:
+
+ system - use sizeof
+
+1999-07-30 06:30 mslifcak
+
+ * snmplib/snmpv3.c:
+
+ snmpv3 - key off HAVE_GETHOSTNAME; use sizeof buf
+
+1999-07-30 06:23 daves
+
+ * agent/: agent_read_config.c, agent_registry.c,
+ snmp_vars.c, snmp_vars_m2m.h:
+
+ - (agent_read_config.c agent_registry.c snmp_vars.c snmp_vars_m2m.h):
+ - Removed last traces of obsolete v2party Manager-to-Manager support
+
+1999-07-30 06:19 mslifcak
+
+ * snmplib/snmpv3.c:
+
+ snmpv3 - wrap possibly unused vars in #ifdef HAVE_GETHOSTNAME
+
+1999-07-30 06:00 daves
+
+ * agent/agent_registry.c, agent/snmp_vars.c,
+ agent/snmpd.c, agent/mibgroup/v2party.c,
+ agent/mibgroup/v2party.h, apps/snmp_parse_args.c,
+ apps/snmptest.c, apps/snmptrap.c, apps/snmptrapd.c
+, apps/snmpnetstat/main.c, snmplib/snmp_api.c,
+ snmplib/snmp_api.h, snmplib/snmp_client.c:
+
+ - (agent/agent_registry.c agent/snmp_vars.c agent/snmpd.c
+ apps/snmp_parse_args.c apps/snmptest.c apps/snmptrap.c
+ apps/snmptrapd.c apps/snmpnetstat/main.c snmplib/snmp_api.c
+ snmplib/snmp_api.h snmplib/snmp_client.c
+ agent/mibgroup/v2party.c agent/mibgroup/v2party.h):
+ - Removed last traces of v2p support
+
+1999-07-30 05:42 mslifcak
+
+ * README.win32, agent/Makefile.in,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swrun.c:
+
+ hr_storage.c - auto_nlist for HR_STORE_SIZE
+ hr_swrun.c - fix global shadow decl
+ snmp_logging.c - change filter for openlog per A. Symons patch
+
+1999-07-30 04:42 mslifcak
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ rename sd to ifsd - avoid global shadow decl
+
+1999-07-30 04:39 mslifcak
+
+ * apps/snmptrapd.c:
+
+ decl log_perror
+
+1999-07-30 04:37 mslifcak
+
+ * snmplib/parse.c:
+
+ rename local var 'last' to 'last_ipch' - avoid shadow global decl
+
+1999-07-30 04:00 mslifcak
+
+ * agent/agent_read_config.c, agent/history.c,
+ agent/snmp_vars.c, agent/snmpd.c,
+ snmplib/read_config.c, snmplib/snmp_alarm.c,
+ snmplib/snmp_api.c, snmplib/snmpv3.c,
+ snmplib/system.c:
+
+ -(agent/agent_read_config.c,agent/history.c,agent/snmp_vars.c,
+ agent/snmpd.c,snmplib/read_config.c,snmplib/snmp_alarm.c,
+ snmplib/snmp_api.c,snmplib/snmp_logging.c,snmplib/snmpv3.c,
+ snmplib/system.c) - psos diffs offered by Anthony Symons
+
+1999-07-30 03:57 mslifcak
+
+ * acconfig.h, config.h.in:
+
+ Removed hint of v2party from comment.
+
+1999-07-30 03:51 mslifcak
+
+ * acconfig.h, config.h.in:
+
+ Removed duplicate HAVE_GET???BYNAME; Removed unused _CRTIMP
+
+1999-07-30 03:48 mslifcak
+
+ * README.win32:
+
+ README.win32 - cleaned up, added more acknowledgements
+
+1999-07-29 17:08 hardaker
+
+ * agent/mibgroup/agentxx.h:
+
+ - (agentxx.h): removed
+
+1999-07-29 17:06 hardaker
+
+ * agent/mibgroup/v2party/: acl_vars.c, acl_vars.h,
+ alarm.c, alarm.h, context_vars.c,
+ context_vars.h, event.c, event.h, party_vars.c
+, party_vars.h, view_vars.c, view_vars.h:
+
+ - (mibgroup/v2party): removed files.
+
+1999-07-29 17:03 hardaker
+
+ * configure, configure.in, apps/Makefile.in:
+
+ - (configure, configure.in, Makefile.in): remove trap_special stuff.
+
+1999-07-29 16:05 mslifcak
+
+ * snmplib/snmp_logging.c:
+
+ use fputs, as vsprintf has already done the hard work.
+
+1999-07-29 15:58 mslifcak
+
+ * snmplib/snmp_logging.c:
+
+ flush file and stderr after write.
+
+1999-07-29 15:50 mslifcak
+
+ * snmplib/: snmp_logging.c, snmp_logging.h:
+
+ -(snmp_logging) incorporate Ragnar's improvements with interest
+
+1999-07-29 15:04 mslifcak
+
+ * agent/: auto_nlist.c, kernel.c:
+
+ auto_nlist, kernel: place log_perror to catch errno value in report.
+
+1999-07-29 13:59 mslifcak
+
+ * agent/snmpd.c:
+
+ -(agent/snmpd.c) - log standard error until init is completed.
+
+1999-07-29 13:28 mslifcak
+
+ * apps/Makefile.in:
+
+ -(apps/Makefile.in) - comment unneeded TRAPSPECIAL line
+
+1999-07-29 12:51 mslifcak
+
+ * snmplib/snmp_logging.c:
+
+ -(snmp_logging) - fix log_perror
+
+1999-07-29 08:34 mslifcak
+
+ * agent/mibgroup/: kernel_sunos5.c,
+ ucd-snmp/memory_solaris2.c:
+
+ memory_solaris2: handle malloc errors
+ kernel_sunos5: share kstat fildes [SHARE_KSTAT_FD]
+
+1999-07-29 03:29 daves
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - (mibII/vacm_vars.c): Catch use of unconfigured EXAMPLE.conf files
+
+1999-07-28 13:33 mslifcak
+
+ * README.win32:
+
+ -README.win32 - build guide for Win32. Cygwin friendly script included.
+
+1999-07-28 09:41 mslifcak
+
+ * snmplib/snmp_logging.c:
+
+ snmp_logging.c: adjust headers for that Win32 platform.
+
+1999-07-28 09:05 mslifcak
+
+ * snmplib/snmp_logging.c:
+
+ -(snmp_logging) Support hpux9 and solaris2.5.1 with vsprintf instead.
+
+1999-07-28 06:45 hardaker
+
+ * bug-report:
+
+ - (bug-report): change mail addr to ucd-snmp-bugs
+
+1999-07-28 02:42 mslifcak
+
+ * agent/mibgroup/host/hr_swrun.c, snmplib/snmp_logging.c
+:
+
+ hr_swrun - reset pointer in module init (help HP/UX 9)
+ snmp_logging - use vsprintf for HP/UX-9
+
+1999-07-27 23:58 mslifcak
+
+ * snmplib/: keytools.c, md5.c, md5.h, scapi.c
+, snmp.c, snmp_api.c, snmp_auth.c:
+
+ -(keytools.c,md5.c,md5.h,scapi.c,snmp.c,snmp_api.c,snmp_auth.c) catch MD5 errors
+
+1999-07-27 23:34 mslifcak
+
+ * agent/snmpd.c:
+
+ -(snmpd.c) invoke log functions from child (correct process ID in syslog)
+
+1999-07-27 21:30 mslifcak
+
+ * snmplib/snmp_logging.c:
+
+ -(snmp_logging.c) fix syslog by vsnprintf to buffer.
+
+1999-07-27 19:06 mslifcak
+
+ * snmplib/mib.c:
+
+ -(mib.c) fix walking OID length pointer, numeric sub-id not found
+ in read_objid and parse_subtree.
+
+1999-07-27 19:02 mslifcak
+
+ * apps/snmp_parse_args.c:
+
+ -(snmp_parse_args) in snmp_parse_oid, try get_node if read_objid fails.
+
+1999-07-27 17:15 mslifcak
+
+ * snmplib/asn1.c:
+
+ including mib.h requires stdio.h to define FILE *.
+
+1999-07-27 16:20 hardaker
+
+ * snmplib/asn1.c:
+
+ - (asn1.c): fix header dump.
+
+1999-07-27 16:14 hardaker
+
+ * snmplib/: asn1.c, mib.c, mib.h, snmp_api.c
+, snmp_debug.c, snmp_debug.h, snmpusm.c:
+
+ - (asn1.c, mib.c, mib.h, snmp_api.c, snmp_debug.c, snmp_debug.h, snmpusm.c):
+ - cleaned up debugging dump output.
+ - added more dump parse headers for v3 dumps.
+
+1999-07-27 16:06 mslifcak
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ -(interfaces.c) - fix error setting if_ibytes for Linux 2.0
+
+1999-07-27 12:23 mslifcak
+
+ * apps/encode_keychange.c, apps/snmpdelta.c,
+ apps/snmptable.c, apps/snmpusm.c,
+ snmplib/read_config.c, snmplib/snmpv3.c,
+ win32/libsnmp_dll/libsnmp.def:
+
+ -(apps:encode_keychange.c,snmpdelta.c,snmptable.c, snmpusm.c;
+ snmplib:read_config.c,snmpv3.c; win32/libsnmp_dll/libsnmp.def) -
+ adjust headers, build Win32 snmpusm+encode_keychange
+
+1999-07-27 12:00 mslifcak
+
+ * win32/: win32.dsw, encode_keychange/encode_keychange.dsp
+, snmpusm/snmpusm.dsp:
+
+ -(encode_keychange.dsp,snmpusm.dsp) -build using common Win32 compiler
+
+1999-07-27 09:40 mslifcak
+
+ * agent/mibgroup/agentx/: master.c, subagent.c:
+
+ -(master.c, subagent.c) un-comment init_master and init_subagent.
+
+1999-07-27 09:32 mslifcak
+
+ * agent/kernel.c, agent/snmpd.c,
+ agent/mibgroup/util_funcs.c, agent/mibgroup/agentx/master.c
+, agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/host/hr_swrun.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/ip.c,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/v2party/alarm.c,
+ agent/mibgroup/v2party/event.c, apps/snmpbulkwalk.c,
+ apps/snmpdelta.c, apps/snmpget.c, apps/snmpgetnext.c
+, apps/snmpset.c, apps/snmpstatus.c,
+ apps/snmptable.c, apps/snmptest.c, apps/snmptrap.c
+, apps/snmptrapd.c, apps/snmpusm.c,
+ apps/snmpwalk.c, apps/snmpnetstat/inet.c,
+ apps/snmpnetstat/main.c, apps/snmpnetstat/route.c,
+ snmplib/parse.c, snmplib/read_config.c,
+ snmplib/snmpv3.c:
+
+ -(agent/kernel.c,agent/snmpd.c,agent/mibgroup/util_funcs.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/host/hr_swrun.c,agent/mibgroup/mibII/at.c,
+ agent/mibgroup/mibII/icmp.c,agent/mibgroup/mibII/ip.c,
+ agent/mibgroup/mibII/route_write.c,agent/mibgroup/mibII/tcp.c,
+ agent/mibgroup/mibII/udp.c,agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/v2party/alarm.c,agent/mibgroup/v2party/event.c,
+ apps/snmpbulkwalk.c,apps/snmpdelta.c,apps/snmpget.c,
+ apps/snmpgetnext.c,apps/snmpset.c,apps/snmpstatus.c,
+ apps/snmptable.c,apps/snmptest.c,apps/snmptrap.c,
+ apps/snmptrapd.c,apps/snmpusm.c,apps/snmpwalk.c,
+ apps/snmpnetstat/inet.c,apps/snmpnetstat/main.c,
+ apps/snmpnetstat/route.c,snmplib/parse.c,snmplib/read_config.c,
+ snmplib/snmpv3.c) fix snmp_sess_perror use; use log_perror for perror
+
+1999-07-27 07:50 mslifcak
+
+ * agent/kernel.c, agent/dlmods/dlmod_mib.c,
+ agent/dlmods/example.c, agent/mibgroup/kernel_sunos5.c
+, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/agentx/master_request.c,
+ agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/dummy/dummy.c,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/examples/wombat.c,
+ agent/mibgroup/host/hr_device.c,
+ agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_print.c,
+ agent/mibgroup/host/hr_proc.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c,
+ agent/mibgroup/ipfwchains/ipfwchains.c,
+ agent/mibgroup/mibII/at.c, agent/mibgroup/mibII/icmp.c
+, agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/ip.c,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/misc/dlmod.c,
+ agent/mibgroup/snmpv3/snmpEngine.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/v2party/acl_vars.c,
+ agent/mibgroup/v2party/alarm.c,
+ agent/mibgroup/v2party/context_vars.c,
+ agent/mibgroup/v2party/event.c,
+ agent/mibgroup/v2party/party_vars.c,
+ agent/mibgroup/v2party/view_vars.c, apps/encode_keychange.c
+, snmplib/asn1.c, snmplib/scapi.c,
+ snmplib/snmp_client.c, snmplib/snmp_client.h:
+
+ -(agent/kernel.c,agent/dlmods/dlmod_mib.c,agent/dlmods/example.c,
+ agent/mibgroup/kernel_sunos5.c,agent/mibgroup/util_funcs.c,
+ agent/mibgroup/agentx/master_request.c,
+ agent/mibgroup/agentx/protocol.c,agent/mibgroup/dummy/dummy.c,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/examples/wombat.c,
+ agent/mibgroup/host/hr_device.c,agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_print.c,agent/mibgroup/host/hr_proc.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c,agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c,
+ agent/mibgroup/ipfwchains/ipfwchains.c,
+ agent/mibgroup/mibII/at.c,agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c,agent/mibgroup/mibII/ip.c,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c,agent/mibgroup/mibII/tcp.c,
+ agent/mibgroup/mibII/udp.c,agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/misc/dlmod.c,agent/mibgroup/snmpv3/snmpEngine.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/v2party/acl_vars.c,
+ agent/mibgroup/v2party/alarm.c,
+ agent/mibgroup/v2party/context_vars.c,
+ agent/mibgroup/v2party/event.c,
+ agent/mibgroup/v2party/party_vars.c,
+ agent/mibgroup/v2party/view_vars.c,apps/encode_keychange.c,
+ snmplib/asn1.c,snmplib/scapi.c,snmplib/snmp_client.c,
+ snmplib/snmp_client.h) ERROR_MSG, printf --> DEBUGMSGTL
+
+1999-07-27 06:38 daves
+
+ * agent/mibgroup/ucd-snmp/: disk.c, errormib.c,
+ extensible.c, file.c, hpux.c, loadave.c,
+ memory.c, memory_freebsd2.c, memory_solaris2.c,
+ registry.c:
+
+ - (agent/mibgroup/ucd-snmp/*.c): tweak registry labels
+
+1999-07-27 04:24 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ add include net/if_dl.h suggested by Tom Ivar Helbekkmo
+
+1999-07-26 17:14 hardaker
+
+ * snmplib/scapi.h:
+
+ - (scapi.h): Patch from Markku Laukkanen:
+ - size_t fix.
+
+1999-07-26 17:07 hardaker
+
+ * snmplib/: keytools.c, keytools.h, parse.c,
+ scapi.c:
+
+ - (keytools.c, keytools.h, parse.c, scapi.c): Patch from Markku Laukkanen:
+ - size_t changes.
+
+1999-07-26 17:06 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (interfaces.c): Patch from Markku Laukkanen:
+ - variable naming change.
+
+1999-07-26 15:59 hardaker
+
+ * agent/mibgroup/Makefile.in:
+
+ - (agent/mibgroup/Makefile.in): fix make depend.
+
+1999-07-26 15:12 mslifcak
+
+ * snmplib/: asn1.c, asn1.h, snmp.c, snmp_api.c
+, snmp_auth.c, snmpusm.c:
+
+ -(asn1.c,asn1.h,snmp.c,snmp_api.c,snmp_auth.c,snmpusm.c) more detailed parse error messages.
+
+1999-07-26 14:32 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): BIT_string: -> BITS:
+
+1999-07-26 11:51 hardaker
+
+ * bug-report, version.h, FAQ, README,
+ sedscript.in:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.0.pre4 )
+
+1999-07-26 09:14 hardaker
+
+ * NEWS:
+
+ - (NEWS): updated a bit
+
+1999-07-26 09:03 hardaker
+
+ * agent/Makefile.in, apps/Makefile.in,
+ snmplib/Makefile.in, testing/Makefile.in,
+ agent/mibgroup/Makefile.in, apps/snmpnetstat/Makefile.in
+:
+
+ - (*/Makefile.in): make depend
+
+1999-07-26 07:37 hardaker
+
+ * mibs/SNMPv2-CONF.txt:
+
+ - (SNMPv2-CONF.txt): removed bogus IMPORTS clause
+
+1999-07-24 08:11 mslifcak
+
+ * snmplib/md5.c:
+
+ -(md5.c) - wrap unused MD5print with SNMP_TESTING_CODE ifdef
+
+1999-07-24 08:05 mslifcak
+
+ * snmplib/: callback.h, default_store.h, snmp_alarm.h
+, snmp_logging.h:
+
+ -(callback.h,default_store.h,snmp_alarm.h,snmp_logging.h) extern "C" wrapped
+
+1999-07-24 07:45 mslifcak
+
+ * snmplib/snmp_client.c:
+
+ -(snmp_client.c) - use SET_SNMP_ERROR for restored snmp_errno sets.
+
+1999-07-24 07:18 mslifcak
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ -(libsnmp.def) - add decls for new error logging functions.
+
+1999-07-24 07:11 mslifcak
+
+ * snmplib/asn1.c:
+
+ -(asn1.c) - fix compare error at line 386; remove unused vars elsewhere
+
+1999-07-23 15:21 hardaker
+
+ * apps/snmpbulkwalk.c, apps/snmpdelta.c,
+ apps/snmpget.c, apps/snmpgetnext.c, apps/snmpset.c
+, apps/snmpstatus.c, apps/snmptable.c,
+ apps/snmptest.c, apps/snmptranslate.c,
+ apps/snmptrap.c, apps/snmptrapd.c, apps/snmpusm.c
+, apps/snmpwalk.c, snmplib/snmp_api.c,
+ snmplib/snmp_api.h, snmplib/snmp_client.c:
+
+ - (snmpbulkwalk.c, snmpdelta.c, snmpget.c, snmpgetnext.c, snmpset.c,
+ snmpstatus.c, snmptable.c, snmptest.c, snmptranslate.c, snmptrap.c,
+ snmptrapd.c, snmpusm.c, snmpwalk.c, snmp_api.c, snmp_api.h,
+ snmp_client.c):
+ - make and use snmp_sess_perror(str, sess) for error printing.
+
+1999-07-23 14:31 hardaker
+
+ * testing/: T.sh, T2.sh, demo.remote, demo2
+, demo2.functions, demo2.setupfile:
+
+ - (T.sh, T2.sh, demo.remote, demo2, demo2.functions, demo2.setupfile):
+ - removed some un-needed older demo files.
+
+1999-07-23 14:27 hardaker
+
+ * testing/: TESTCONF.sh, eval_tools.sh,
+ tests/T001snmpv1get, tests/T002snmpv1getnext,
+ tests/T003snmpv1getfail, tests/T014snmpv2cget,
+ tests/T015snmpv2cgetnext, tests/T016snmpv2cgetfail,
+ tests/T017snmpv2ctov1getfail, tests/T018snmpv1tov2cgetfail
+, tests/T020snmpv3get, tests/T021snmpv3getnext,
+ tests/T022snmpv3getMD5, tests/T023snmpv3getMD5DES:
+
+ - (TESTCONF.sh, eval_tools.sh, T001snmpv1get, T002snmpv1getnext,
+ T003snmpv1getfail, T014snmpv2cget, T015snmpv2cgetnext,
+ T016snmpv2cgetfail, T017snmpv2ctov1getfail, T018snmpv1tov2cgetfail,
+ T020snmpv3get, T021snmpv3getnext, T022snmpv3getMD5,
+ T023snmpv3getMD5DES): support a SNMP_FLAGS env variable.
+
+1999-07-23 14:26 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): init debugging.
+
+1999-07-23 14:19 hardaker
+
+ * snmplib/: asn1.c, asn1.h, snmp.c, snmp_api.c
+, snmp_auth.c, snmp_impl.h:
+
+ - (asn1.c, asn1.h, snmp.c, snmp_api.c, snmp_auth.c, snmp_impl.h):
+ - revert to non-dparse versions of asn decoding.
+
+1999-07-23 13:21 hardaker
+
+ * testing/eval_tools.sh:
+
+ - (eval_tools.sh): a little more verbose about what is running.
+
+1999-07-23 13:20 hardaker
+
+ * snmplib/: keytools.c, parse.c, read_config.c
+, snmp_api.c:
+
+ - (keytools.c, parse.c, read_config.c, snmp_api.c): snmp_log conversions.
+
+1999-07-23 13:20 hardaker
+
+ * snmplib/snmp.c:
+
+ - (snmp.c): xdump fixes.
+
+1999-07-23 13:19 hardaker
+
+ * snmplib/asn1.c:
+
+ - (asn1.c): null terminate parsed strings, just in case.
+
+1999-07-23 13:18 hardaker
+
+ * agent/mibgroup/util_funcs.c:
+
+ - (util_funcs.c): change malloc size().
+
+1999-07-23 13:18 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): more snmp_log conversions.
+
+1999-07-23 13:17 hardaker
+
+ * agent/agent_registry.h:
+
+ - (agent_registry.h): added for a prototype definition.
+
+1999-07-23 10:42 hardaker
+
+ * aclocal.m4, config.h.in, configure,
+ configure.in, agent/snmp_agent.c, agent/snmp_vars.c
+, agent/snmpd.c, agent/mibgroup/kernel_sunos5.c
+, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/interfaces.h,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/snmpv3/snmpEngine.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ apps/snmptrapd.c, mibs/HOST-RESOURCES-MIB.txt,
+ mibs/IANAifType-MIB.txt, mibs/IF-MIB.txt,
+ mibs/IP-MIB.txt, mibs/TCP-MIB.txt, mibs/UDP-MIB.txt
+, snmplib/parse.c, snmplib/snmp_alarm.c,
+ snmplib/snmp_logging.c, snmplib/snmp_logging.h:
+
+ - (aclocal.m4, config.h.in, configure, configure.in, snmp_agent.c,
+ snmp_vars.c, snmpd.c, kernel_sunos5.c, util_funcs.c, interfaces.c,
+ interfaces.h, system_mib.c, var_route.c, snmpEngine.c,
+ snmpTargetParamsEntry.c, snmptrapd.c, HOST-RESOURCES-MIB.txt,
+ IANAifType-MIB.txt, IF-MIB.txt, IP-MIB.txt, TCP-MIB.txt,
+ UDP-MIB.txt, parse.c, snmp_alarm.c, snmp_logging.c, snmp_logging.h):
+ - merge from V3-line post 3.6.2 to current.
+ - misc bug fixes.
+ - make apps turn on stderr logging by default.
+
+1999-07-23 10:36 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): log to stderr.
+
+1999-07-21 16:06 hardaker
+
+ * local/: mib2c, mib2c.storage.conf, tkmib:
+
+ - (tkmib, mib2c): udpate to use indexes (requires a perl patch.
+
+1999-07-20 19:33 mslifcak
+
+ * apps/snmptest.c, snmplib/snmp_api.c:
+
+ - no printf in ascii_to_binary
+
+1999-07-20 18:11 mslifcak
+
+ * agent/mibgroup/util_funcs.c, snmplib/asn1.c,
+ snmplib/snmp_alarm.c, snmplib/snmp_debug.c,
+ snmplib/snmp_logging.c, snmplib/snmp_logging.h,
+ win32/libsnmp/libsnmp.dsp, win32/libsnmp_dll/libsnmp.def
+, win32/libsnmp_dll/libsnmp_dll.dsp:
+
+ -minor changes to build Win32 platforms using CygWin-egcs and MSVC compilers.
+
+1999-07-20 17:07 hardaker
+
+ * snmplib/: snmp_logging.c, snmp_logging.h:
+
+ - (snmp_logging.c, snmp_logging.h): -Wall fixes (ANSI).
+
+1999-07-20 17:05 hardaker
+
+ * agent/: auto_nlist.c, snmp_agent.c, snmpd.c
+, dlmods/dlmod_mib.c, mibgroup/kernel_sunos5.c
+, mibgroup/ipfwchains/ipfwchains.c,
+ mibgroup/mibII/interfaces.c, mibgroup/misc/dlmod.c,
+ mibgroup/smux/smux.c, mibgroup/ucd-snmp/versioninfo.c
+, mibgroup/v2party/alarm.c:
+
+ - (auto_nlist.c, snmp_agent.c, snmpd.c, dlmod_mib.c, kernel_sunos5.c,
+ ipfwchains.c, interfaces.c, dlmod.c, smux.c, versioninfo.c,
+ alarm.c):
+ - convert snmp_log(LOG_DEBUG) to DEBUGMSGTL().
+
+1999-07-20 14:00 hardaker
+
+ * agent/auto_nlist.c, agent/history.c, agent/kernel.c
+, agent/snmp_agent.c, agent/snmpd.c,
+ agent/dlmods/dlmod_mib.c, agent/mibgroup/kernel_sunos5.c
+, agent/mibgroup/mibincl.h,
+ agent/mibgroup/util_funcs.c,
+ agent/mibgroup/ipfwchains/ipfwchains.c,
+ agent/mibgroup/mibII/at.c, agent/mibgroup/mibII/interfaces.c
+, agent/mibgroup/mibII/ip.c,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/misc/dlmod.c, agent/mibgroup/smux/smux.c
+, agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/v2party/alarm.c,
+ agent/mibgroup/v2party/event.c, snmplib/Makefile.in,
+ snmplib/parse.c, snmplib/snmp.c, snmplib/snmp_debug.c
+, snmplib/snmp_logging.c, snmplib/snmp_logging.h:
+
+ - (auto_nlist.c, history.c, kernel.c, snmp_agent.c, snmpd.c,
+ dlmod_mib.c, kernel_sunos5.c, mibincl.h, util_funcs.c, ipfwchains.c,
+ at.c, interfaces.c, ip.c, route_write.c, system_mib.c, tcp.c, udp.c,
+ vacm_vars.c, var_route.c, dlmod.c, smux.c, disk.c, extensible.c,
+ loadave.c, memory_solaris2.c, pass.c, pass_persist.c, proc.c,
+ versioninfo.c, alarm.c, event.c, Makefile.in, parse.c, snmp.c,
+ snmp_debug.c, snmp_logging.c, snmp_logging.h): Patch from Ragnar
+ Kjørstad:
+ - do file, stderr, and syslog support.
+
+1999-07-15 08:45 hardaker
+
+ * snmplib/: asn1.c, snmp_api.c, snmp_auth.c,
+ snmp_debug.c, snmp_debug.h:
+
+ - (asn1.c, snmp_api.c, snmp_auth.c, snmp_debug.c, snmp_debug.h):
+ - beginning of a -Ddump version of packet dumping.
+ - needs a lot more work and clean up.
+ - I need comments... Tell me what you think...
+
+1999-07-15 08:44 hardaker
+
+ * snmplib/tools.c:
+
+ - (tools.c): include arpa/inet.h.
+
+1999-07-14 13:46 mslifcak
+
+ * snmplib/mib.c:
+
+ -(snmplib/mib.c) - conditionally allow for not setting snmp_errno
+
+1999-07-14 13:14 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ -(snmp_api.c) - snmp_add_var returns SNMPERR; MAY set snmp_errno
+
+1999-07-14 07:19 daves
+
+ * agent/mibgroup/agentx/README.agentx:
+
+ - (agent/mibgroup/agentx/README.agentx): Warning - here be dragons....
+
+1999-07-12 08:32 daves
+
+ * agent/mibgroup/host/: hr_device.c, hr_device.h,
+ hr_disk.c, hr_disk.h, hr_filesys.c,
+ hr_filesys.h, hr_network.c, hr_network.h,
+ hr_partition.c, hr_partition.h, hr_print.c,
+ hr_print.h, hr_proc.c, hr_proc.h, hr_storage.c
+, hr_storage.h, hr_swinst.c, hr_swinst.h,
+ hr_swrun.c, hr_swrun.h, hr_system.c,
+ hr_system.h:
+
+ - (mibgroup/host/*): Dynamically register all Host Resource modules
+
+1999-07-12 07:14 daves
+
+ * agent/mibgroup/Makefile.in:
+
+ - (agent/mibgroup/Makefile.in): remove dependency on snmplib/agentx.h
+
+1999-07-11 18:35 mslifcak
+
+ * agent/agent_registry.c, agent/snmp_agent.c,
+ agent/mibgroup/agentx/client.c,
+ agent/mibgroup/agentx/protocol.c,
+ agent/mibgroup/mibII/system_mib.c, apps/encode_keychange.c
+, snmplib/keytools.c, snmplib/mib.c,
+ snmplib/read_config.c, snmplib/snmp_alarm.c,
+ snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmp_client.c, snmplib/snmp_client.h:
+
+ Reduce use of snmp_errno - fix memory leak, unused vars, and unset var.
+
+1999-07-09 16:21 hardaker
+
+ * snmplib/snmp_alarm.c:
+
+ - (snmp_alarm.c): fix clientreg error.
+
+1999-07-09 14:19 mslifcak
+
+ * agent/mibgroup/mibII/var_route.c, apps/snmptranslate.c
+, apps/snmpnetstat/main.c, snmplib/asn1.c,
+ snmplib/default_store.c, snmplib/scapi.c,
+ snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/system.h, win32/libsnmp/libsnmp.dsp,
+ win32/libsnmp_dll/libsnmp.def,
+ win32/libsnmp_dll/libsnmp_dll.dsp:
+
+ -(win32,snmplib,apps,agent) add snmp_socket_length to hide sockaddr_un; Win32 touchups
+
+1999-07-09 12:12 mslifcak
+
+ * README.thread, apps/snmpbulkwalk.c, apps/snmpdelta.c
+, apps/snmpget.c, apps/snmpgetnext.c,
+ apps/snmpset.c, apps/snmpstatus.c, apps/snmptable.c
+, apps/snmptest.c, apps/snmptrap.c,
+ apps/snmpusm.c, apps/snmpwalk.c,
+ apps/snmpnetstat/main.c, apps/snmpnetstat/route.c,
+ man/snmp_sess_api.3, snmplib/snmp_api.c,
+ snmplib/snmp_api.h, snmplib/snmp_client.c,
+ snmplib/snmp_client.h, win32/libsnmp_dll/libsnmp.def:
+
+ -(snmp_client.*) remove snmp_synch_setup, snmp_synch_reset
+
+1999-07-09 08:35 daves
+
+ * snmplib/: agentx.c, agentx.h, agentx_client.c:
+
+ - (snmplib/agentx*): Moved AgentX handling out of the main SNMP library
+
+1999-07-09 08:34 daves
+
+ * agent/mibgroup/: agentx.h, agentx/client.c,
+ agentx/client.h, agentx/master.c, agentx/master.h
+, agentx/master_admin.c, agentx/master_request.c,
+ agentx/protocol.c, agentx/protocol.h, agentx/subagent.c
+, agentx/subagent.h:
+
+ - (agent/mibgroup/agentx.h agent/mibgroup/agentx/*):
+ - Move AgentX protocol handling to a (mostly) self-contained module
+
+1999-07-09 08:27 daves
+
+ * snmplib/Makefile.in, snmplib/snmp_api.c,
+ agent/Makefile.in, agent/agent_registry.c,
+ agent/snmp_agent.c, agent/snmp_agent.h,
+ agent/snmp_vars.c, agent/snmp_vars.h, agent/snmpd.c
+, agent/snmpd.h, agent/mibgroup/mibII/sysORTable.c
+, apps/Makefile.in, apps/snmpnetstat/Makefile.in
+:
+
+ - (*/Makefile.in snmplib/snmp_api.c
+ agent/agent_registry.c agent/snmp_agent.[ch] agent/snmp_vars.[ch]
+ agent/snmpd.[ch] agent/mibgroup/mibII/sysORTable.c):
+ - Move AgentX handling out of the main SNMP library
+
+1999-07-09 01:49 daves
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): Clean up gid/uid change logging
+
+1999-07-08 16:02 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): Patch from Ragnar Kjørstad:
+ - Add options for switching to a given uid and gid.
+
+1999-07-08 15:16 hardaker
+
+ * apps/snmpdelta.c, snmplib/int64.c, snmplib/int64.h
+:
+
+ - (snmpdelta.c, int64.c, int64.h): minimal c64 support for snmpdelta. Untested.
+
+1999-07-08 14:48 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ snmplib/Makefile.in, testing/Makefile.in:
+
+ - (*/Makefile.in): make depend
+
+1999-07-08 14:35 hardaker
+
+ * configure, configure.in, agent/Makefile.in
+, agent/snmp2p.c, agent/snmp_agent.c,
+ agent/snmp_vars.c, agent/snmpd.c,
+ agent/view_parse.c, agent/mibgroup/mibII/vacm_vars.c,
+ apps/snmp_parse_args.c, apps/snmptrapd.c,
+ apps/snmptrapd_handlers.c, apps/snmpnetstat/main.c,
+ snmplib/Makefile.in, snmplib/acl.c, snmplib/acl.h
+, snmplib/acl_parse.c, snmplib/context.c,
+ snmplib/context.h, snmplib/context_parse.c,
+ snmplib/libsnmp.h, snmplib/party.c, snmplib/party.h
+, snmplib/party_parse.c, snmplib/snmp.h,
+ snmplib/snmp_api.c, snmplib/snmp_auth.c,
+ snmplib/snmp_client.c, snmplib/view.c, snmplib/view.h
+:
+
+ - (configure, configure.in, Makefile.in, snmp2p.c, snmp_agent.c,
+ snmp_vars.c, snmpd.c, view_parse.c, vacm_vars.c, snmp_parse_args.c,
+ snmptrapd.c, snmptrapd_handlers.c, main.c, Makefile.in, acl.c,
+ acl.h, acl_parse.c, context.c, context.h, context_parse.c,
+ libsnmp.h, party.c, party.h, party_parse.c, snmp.h, snmp_api.c,
+ snmp_auth.c, snmp_client.c, view.c, view.h):
+ - v2party support is finally gone!
+
+1999-07-08 14:30 hardaker
+
+ * snmplib/asn1.c:
+
+ - (asn1.c): -Wall fixes.
+
+1999-07-08 14:30 hardaker
+
+ * snmplib/: agentx.c, agentx.h:
+
+ - (agentx.c, agentx.h): -Wall fixes.
+
+1999-07-08 14:29 hardaker
+
+ * win32/config.h:
+
+ - (config.h): comment change for internal md5.
+
+1999-07-08 14:29 hardaker
+
+ * snmplib/tools.c:
+
+ - (tools.c): typo in #ifdef.
+
+1999-07-08 06:25 daves
+
+ * agent/mibgroup/mibII/: snmp_mib.c, system_mib.c:
+
+ - (mibII/system_mib.c mibII/snmp_mib.c):
+ - Update 'write' routines for V4 architecture,
+ and using the full SET multi-pass algorithm
+
+1999-07-08 02:16 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Retain community string in responses
+
+1999-07-07 06:54 daves
+
+ * snmplib/: asn1.c, asn1.h, snmp.c, snmp.h
+, snmp_api.c, snmp_api.h, snmp_auth.c,
+ agentx.c, snmp_impl.h:
+
+ - (asn1.c asn1.h snmp.c snmp.h snmp_api.c snmp_api.h
+ snmp_auth.c snmp_impl.h agentx.c):
+ - First attempt at formatted display of packet data
+
+1999-07-06 02:20 daves
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): Fix handling of SNMPv1 noSuchName
+
+1999-07-02 08:27 hardaker
+
+ * apps/snmptranslate.c:
+
+ - (snmptranslate.c): register debugging tokens with -D
+
+1999-07-02 05:18 daves
+
+ * agent/mibgroup/: agentxx.h, agentx/master.c,
+ agentx/master.h, agentx/master_admin.c,
+ agentx/master_admin.h, agentx/master_request.c,
+ agentx/master_request.h:
+
+ - (mibgroup/agentxx.h mibgroup.agentx/): Initial implementation of AgentX master
+
+1999-07-02 05:16 daves
+
+ * snmplib/snmp_api.h:
+
+ - (snmp_api.h): support lists of sessions (and subsessions)
+
+1999-07-02 05:15 daves
+
+ * agent/: agent_registry.c, var_struct.h:
+
+ - (var_struct.h agent_registry.c):
+ - map between MIB registrations and the supporting (subagent) session
+
+1999-07-02 05:13 daves
+
+ * snmplib/asn1.h, agent/snmp_agent.c,
+ agent/snmp_vars.h:
+
+ - (snmplib/asn1.h agent/snmp_vars.h agent/snmp_agent.c):
+ - implement an interface for delegating requests to subagents
+
+1999-07-02 02:39 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Fix that last 'sendto' case *correctly* this time
+
+1999-07-02 02:04 daves
+
+ * snmplib/agentx.c:
+
+ - (agentx.c): Better handling of building null strings
+
+1999-06-30 19:37 hardaker
+
+ * snmplib/: default_store.c, default_store.h, mib.c
+, mib.h, snmp_api.c, snmpv3.c, snmpv3.h
+:
+
+ - (default_store.c, default_store.h, mib.c, mib.h, snmp_api.c,
+ snmpv3.c, snmpv3.h):
+ - convert more stuff to the default_store space.
+
+1999-06-30 19:37 hardaker
+
+ * snmplib/: keytools.c, tools.c:
+
+ - (keytools.c, tools.c): -Wall fixes when TESTING_CODE is enabled.
+
+1999-06-30 05:48 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Missed one 'sendto' call
+
+1999-06-30 05:06 daves
+
+ * config.h.in, configure.in, configure:
+
+ - (config.h.in configure.in configure): check for sys/un.h
+
+1999-06-30 05:05 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Provide the correct size of socket addresses
+
+1999-06-30 03:20 daves
+
+ * agent/agent_read_config.h:
+
+ - (agent_read_config.h): omit redundant declarations
+
+1999-06-30 02:32 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Correct the setup of stream-based accepted internal sessions
+
+1999-06-30 01:48 daves
+
+ * agent/: snmp_agent.c, snmp_agent.h:
+
+ - (snmp_agent.c snmp_agent.h): 'agent_snmp_session' initialisation routine
+
+1999-06-30 01:45 daves
+
+ * agent/: agent_registry.c, snmp_vars.h:
+
+ - (agent_registry.c snmp_vars.h): Indicate success/failure of {un}registration
+
+1999-06-30 01:37 daves
+
+ * agent/mibgroup/mibII/: sysORTable.c, sysORTable.h:
+
+ - (sysORTable.c sysORTable.h): Indicate success/failure of {un}registration
+
+1999-06-28 15:01 hardaker
+
+ * apps/: snmpdelta.c, snmptrapd.c:
+
+ - (snmptrapd.c): init_snmp_alarm();
+
+1999-06-28 15:00 hardaker
+
+ * agent/mibgroup/examples/ucdDemoPublic.c:
+
+ - (ucdDemoPublic.c): convert to size_t
+
+1999-06-28 14:59 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): init_snmp_alarm().
+
+1999-06-28 09:52 daves
+
+ * agent/: agent_registry.c, snmp_vars.c, snmp_vars.h
+, var_struct.h:
+
+ - (agent_registry.c snmp_vars.c snmp_vars.h var_struct.h):
+ - Non-recursive MIB registry implementation
+
+1999-06-28 08:37 daves
+
+ * agent/mibgroup/snmpv3/: snmpEngine.c, snmpEngine.h,
+ snmpMPDStats.c, snmpMPDStats.h, usmStats.c,
+ usmStats.h, usmUser.c, usmUser.h:
+
+ - (snmpEngine.c snmpEngine.h snmpMPDStats.c snmpMPDStats.h
+ usmStats.c usmStats.h usmUser.c usmUser.h):
+ - Run-time registration (rather than via 'configure')
+
+1999-06-28 07:48 hardaker
+
+ * testing/tests/: Sv3config, T021snmpv3getnext,
+ T022snmpv3getMD5, T023snmpv3getMD5DES:
+
+ - (Sv3config, T021snmpv3getnext, T022snmpv3getMD5, T023snmpv3getMD5DES):
+ - 3 new v3 tests.
+
+1999-06-28 07:47 hardaker
+
+ * testing/: RUNTESTS, eval_tools.sh:
+
+ - (RUNTESTS, eval_tools.sh): accept agent command line options.
+
+1999-06-28 04:07 daves
+
+ * agent/: Makefile.in, agent_read_config.c,
+ agent_registry.c, snmp_vars.c:
+
+ - {Makefile.in agent_read_config.c snmp_vars.c agent_registry.c):
+ - Consolidate all registry handling into one file
+
+1999-06-28 03:08 daves
+
+ * agent/: snmp_agent.c, snmp_agent.h:
+
+ - (snmp_agent.c snmp_agent.h): make SNMP packet handling routine re-entrant.
+
+1999-06-23 10:08 hardaker
+
+ * testing/: Makefile.in, RUNTESTS, TESTCONF.sh,
+ eval_tools.sh, tests/Sv3config:
+
+ - (Makefile.in, RUNTESTS, TESTCONF.sh, eval_tools.sh, Sv3config):
+ - give RUNTESTS lots of arguments.
+ - "make test" now calls "RUNTESTS -a"
+
+1999-06-22 05:25 nba
+
+ * TODO:
+
+ TODO: need for Counter64 support in snmpdelta
+
+1999-06-22 05:21 mslifcak
+
+ * agent/snmpd.c:
+
+ invoke snmp_sess_init before any MIB processing (fixes master agent).
+
+1999-06-18 12:30 mslifcak
+
+ * snmplib/: agentx.c, agentx_client.c:
+
+ -(agentx*.c) fix headers to compile on CygWin, Win32 MSVC++
+
+1999-06-18 10:02 mslifcak
+
+ * agent/mibgroup/mibII/sysORTable.c:
+
+ -(sysORTable.c) fix ptr test
+
+1999-06-18 09:14 daves
+
+ * agent/: snmpd.c, snmp_agent.c, snmp_vars.c
+, snmpd.h, snmp_agent.h,
+ mibgroup/mibII/sysORTable.c:
+
+ - (snmpd.c snmpd.h snmp_vars.c snmp_agent.c snmp_agent.h
+ mibgroup/mibII/sysORTable.c):
+ - initial AgentX sub-agent implementation
+
+1999-06-18 09:00 daves
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): protocol-independent means of bypassing VACM checks
+
+1999-06-18 08:55 daves
+
+ * snmplib/: agentx.c, agentx.h, agentx_client.c,
+ snmp_api.h, Makefile.in:
+
+ - (snmp_api.h Makefile.in agentx.c agentx.h agentx_client.c):
+ - basic AgentX protocol handling
+
+1999-06-18 08:49 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c):
+ - accomodate servers that require an accessible client-end unix stream socket
+ (in particular, the CMU AgentX master agent)
+
+1999-06-18 08:47 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): protocol-independent non-response handling in 'snmp_sess_read'
+
+1999-06-18 08:44 daves
+
+ * snmplib/snmp_api.h:
+
+ - (snmp_api.h): New socket address structure
+
+1999-06-18 08:04 daves
+
+ * snmplib/: asn1.h, snmp_api.c:
+
+ - (asn1.h snmp_api.c): New private types for OID ranges
+
+1999-06-18 08:00 daves
+
+ * snmplib/snmp_client.c:
+
+ - (snmp_client.c): Enable access to "empty" response PDUs (i.e. header only).
+ (also make 'snmp_clone_mem' accessible to other files)
+
+1999-06-18 07:56 daves
+
+ * snmplib/: snmp.h, snmp_api.c:
+
+ - (snmp.h snmp_api.c): distinguish between SNMP protocol & PDU handling flags
+
+1999-06-18 06:58 daves
+
+ * agent/mibgroup/mibII/: sysORTable.c, sysORTable.h:
+
+ - (sysORTable.c sysORTable.h): new routine for removing sysORTable entries
+
+1999-06-18 05:01 mslifcak
+
+ * apps/encode_keychange.c, apps/snmpusm.c,
+ snmplib/default_store.c, snmplib/keytools.c,
+ snmplib/keytools.h, snmplib/parse.c, snmplib/scapi.c
+, snmplib/scapi.h, snmplib/snmp_alarm.c,
+ snmplib/snmp_api.c, snmplib/snmpusm.c,
+ snmplib/system.c:
+
+ applied fixes from M. Laukkanen
+
+1999-06-17 13:18 mslifcak
+
+ * snmplib/default_store.c, snmplib/snmp_alarm.c,
+ snmplib/snmp_api.c, win32/config.h,
+ win32/libsnmp/libsnmp.dsp, win32/libsnmp_dll/libsnmp.def
+, win32/libsnmp_dll/libsnmp_dll.dsp:
+
+ fixups to build most apps under Win32 (MSVC++ 5.0 or later)
+
+1999-06-17 07:38 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): fix --help.
+
+1999-06-16 16:51 hardaker
+
+ * snmplib/: snmp_api.c, snmp_debug.c, snmp_debug.h
+:
+
+ - (snmp_api.c, snmp_debug.c, snmp_debug.h):
+ - 2 new snmp.conf tokens: doDebugging, debugTokens.
+
+1999-06-16 16:24 hardaker
+
+ * snmplib/: default_store.c, default_store.h, mib.c
+, parse.c:
+
+ - (default_store.c, default_store.h, mib.c, parse.c):
+ - first usage of the default_store() routines: move all the mib
+ parser variables to it, and add snmp.conf tokens for them.
+ - premib auto-registration of default_store needs cleaning up... sigh...
+
+1999-06-16 06:56 daves
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmp_api.c snmp_api.h): Hooks for building/parsing non-SNMP packets
+
+1999-06-16 05:49 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): handle responses in a more protocol-independent manner
+
+1999-06-16 05:11 daves
+
+ * snmplib/: snmp.h, snmp_api.c:
+
+ - (snmp.h snmp_api.c): move PDU validation, etc from 'send' to 'build' routines
+
+1999-06-15 16:27 hardaker
+
+ * testing/tests/T020snmpv3get:
+
+ - (T020snmpv3get): new test: snmpget using v3 and user "initial".
+
+1999-06-15 16:27 hardaker
+
+ * testing/tests/: T001snmpv1get, T002snmpv1getnext,
+ T014snmpv2cget, T015snmpv2cgetnext:
+
+ - (T001snmpv1get, T002snmpv1getnext, T014snmpv2cget, T015snmpv2cgetnext):
+ - Check for Timeticks: in output, since output has changed in 4.0.
+
+1999-06-15 16:26 hardaker
+
+ * testing/eval_tools.sh:
+
+ - (eval_tools.sh): display more output stuff when in verbose mode.
+
+1999-06-15 16:26 hardaker
+
+ * testing/TESTCONF.sh:
+
+ - (TESTCONF.sh): save packet dump.
+
+1999-06-15 16:25 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): fix allowed zerolength pdu->securityName problem for
+ v3 engineID discovery probes.
+
+1999-06-15 08:27 daves
+
+ * agent/: snmp_agent.c, snmp_agent.h:
+
+ - (snmp_agent.c snmp_agent.h):
+ - Move processing from 'handle_next_pass()' to 'handle_snmp_packet()'
+
+1999-06-15 03:59 daves
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): Removed duplicate code
+
+1999-06-11 17:44 hardaker
+
+ * testing/tests/: Sv1config, Sv2cconfig, Svanyconfig
+, T001snmpv1get, T002snmpv1getnext,
+ T003snmpv1getfail, T014snmpv2cget, T015snmpv2cgetnext
+, T016snmpv2cgetfail, T017snmpv2ctov1getfail,
+ T018snmpv1tov2cgetfail:
+
+ - (Sv1config, Sv2cconfig, Svanyconfig, T001snmpv1get,
+ T002snmpv1getnext, T003snmpv1getfail, T014snmpv2cget,
+ T015snmpv2cgetnext, T016snmpv2cgetfail, T017snmpv2ctov1getfail,
+ T018snmpv1tov2cgetfail):
+ - initial pass of testing suite tests... Again, still needs work.
+
+1999-06-11 17:43 hardaker
+
+ * testing/: RUNTESTS, T2.sh, TESTCONF.sh,
+ eval_onescript.sh, eval_tools.sh:
+
+ - (RUNTESTS, T2.sh, TESTCONF.sh, eval_onescript.sh, eval_tools.sh):
+ - testing suite scripts... still need heavy work.
+
+1999-06-09 18:29 hardaker
+
+ * .cvsignore, ChangeLog, EXAMPLE.conf.def, FAQ
+, INSTALL, NEWS, README, config.h.in
+, configure, configure.in, maketarget,
+ agent/agent_read_config.c, agent/kernel.c,
+ agent/snmp_vars.c, agent/snmpd.c,
+ agent/mibgroup/kernel_sunos5.c,
+ agent/mibgroup/kernel_sunos5.h, agent/mibgroup/util_funcs.c
+, agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/smux/smux.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/vmstat.c, apps/snmptrap.c,
+ apps/snmptrapd.c, apps/snmpnetstat/Makefile.in,
+ apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c,
+ man/snmpd.conf.5.def, snmplib/asn1.c, snmplib/mib.c
+, snmplib/mib.h, snmplib/parse.c,
+ snmplib/read_config.c, snmplib/snmp_alarm.c,
+ snmplib/snmp_api.c, snmplib/snmp_auth.c,
+ snmplib/vacm.c:
+
+ - (*): merged 3.6.2 changes into main branch.
+
+1999-06-09 06:32 daves
+
+ * snmplib/snmp_api.h:
+
+ - (snmp_api.h): reorder PDU and session fields more clearly
+
+1999-06-08 09:32 mslifcak
+
+ * agent/mibgroup/ucd-snmp/: memory_freebsd2.c,
+ vmstat_freebsd2.c:
+
+ -(xx__freebsd2.c) - fix size_t to build on FreeBSD 2.2.x
+
+1999-06-08 08:43 daves
+
+ * agent/mibgroup/v2party/alarm.c, snmplib/snmp_api.c
+, snmplib/snmp_api.h, snmplib/snmp_auth.c,
+ snmplib/snmp_impl.h:
+
+ - (agent/mibgroup/v2party/alarm.c
+ snmplib/snmp_api.c snmplib/snmp_api.h
+ snmplib/snmp_auth.c snmplib/snmp_impl.h):
+ - removed all uses of 'struct packet_info' (subsumed into 'struct snmp_pdu')
+
+1999-06-08 07:41 mslifcak
+
+ * agent/mibgroup/host/: hr_filesys.c (V3-line.4), hr_filesys.c
+:
+
+ -(hr_filesys.c) fix memory leak when HAVE_GETFSSTAT is defined.
+
+1999-06-07 13:04 mslifcak
+
+ * apps/snmpnetstat/if.c:
+
+ -(if.c) check for valid pointer before de-referencing.
+
+1999-06-07 07:44 mslifcak
+
+ * agent/mibgroup/mibII/: interfaces.c, ip.c, tcp.c
+, udp.c:
+
+ -(interfaces.c, tcp.c, udp.c, ip.c) clone fixes from 3.6 line (FreeBSD3.1)
+
+1999-06-04 09:51 mslifcak
+
+ * agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+, local/Makefile.in:
+
+ -(hr_filesys.c,interfaces.c,tcp.c,udp.c,freebsd3.h) fix FreeBSD3.1 incl Ken Key's tcp/udp patches
+
+1999-06-02 12:10 hardaker
+
+ * man/snmp_alarm.3:
+
+ - (snmp_alarm.3): document the new snmp_alarm() calls.
+
+1999-06-01 17:21 hardaker
+
+ * snmplib/: Makefile.in, snmp_alarm.c, snmp_alarm.h
+, snmp_api.c:
+
+ - (Makefile.in, snmp_alarm.c, snmp_alarm.h, snmp_api.c):
+ - implemented a generic alarm handler to register alarm functions to
+ be called back after X period of time and it handles figuring out
+ which is next and calling alarm() and signal() appropriately.
+
+1999-06-01 07:30 daves
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmplib/snmp_api.c snmplib/snmp_api.h): Support for stream-based sockets
+
+1999-06-01 02:32 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): Generalise handling of addresses (w.r.t sento/recvfrom)
+
+1999-06-01 02:17 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): Garbage collection for Traditional SAPI sessions
+
+1999-05-28 16:44 hardaker
+
+ * snmplib/: Makefile.in, default_store.c,
+ default_store.h:
+
+ - (Makefile.in, default_store.c, default_store.h):
+ - created generic default value storage space and parsers to reduce
+ the number of functions/etc created for values which configure the
+ library.
+
+1999-05-28 16:17 hardaker
+
+ * snmplib/: mib.c, parse.c, parse.h:
+
+ - (mib.c, parse.c, parse.h): save and use index clauses.
+
+1999-05-28 09:24 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ -(snmp_api.c) -catch one more error close from snmp_sess_copy
+
+1999-05-28 09:12 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): Separate out copying a session and opening a new one
+
+1999-05-28 08:57 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): Unix domain (datagram) socket support
+
+1999-05-28 08:14 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): save local socket address in internal session structure
+
+1999-05-28 07:01 daves
+
+ * agent/: Makefile.in, mibgroup/Makefile.in:
+
+ - (agent/Makefile.in agent/mibgroup/Makefile.in): fix problem with null macro
+
+1999-05-27 14:37 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): document default oid keyword in help line.
+
+1999-05-27 14:37 hardaker
+
+ * man/snmptrapd.conf.5.def:
+
+ - (snmptrapd.conf.5.def): document default oid keyword.
+
+1999-05-27 14:30 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): need an init_mib().
+
+1999-05-27 14:30 hardaker
+
+ * apps/snmptrapd_handlers.c:
+
+ - (snmptrapd_handlers.c): implement the default trap handler.
+
+1999-05-27 05:16 mslifcak
+
+ * apps/encode_keychange.c, snmplib/read_config.c,
+ snmplib/snmpusm.c:
+
+ -(encode_keychange, read_config, snmpusm) aCC fixes by PKY (Markku Laukkanen)
+
+1999-05-26 17:38 hardaker
+
+ * mibs/: IPFWACC-MIB.txt (V3-line.2), IPFWACC-MIB.txt:
+
+ - (IPFWACC-MIB.txt): added SEQUENCE OF.
+
+1999-05-26 15:56 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in): increase MAXREADCOUNT.
+
+1999-05-26 15:20 hardaker
+
+ * agent/mibgroup/misc/: ipfwacc.h (V3-b3.2), ipfwacc.h:
+
+ - (ipfwacc.h): make into counters.
+
+1999-05-26 15:18 hardaker
+
+ * mibs/: IPFWACC-MIB.txt (V3-b3.1), IPFWACC-MIB.txt:
+
+ - (IPFWACC-MIB.txt): change to counters.
+
+1999-05-26 15:14 hardaker
+
+ * agent/mibgroup/host/: hr_swinst.c (V3-b3.1), hr_swinst.c:
+
+ - (hr_swinst.c): make software application type unknown instead of app.
+
+1999-05-26 11:18 hardaker
+
+ * agent/mibgroup/misc/: ipfwacc.h (V3-b3.1), ipfwacc.h:
+
+ - (ipfwacc.h): properly locate the mib.
+
+1999-05-26 08:16 mslifcak
+
+ * snmplib/snmpv3.c:
+
+ - (snmpv3.c) - incl sys/types to fix HP-UX 9.x build
+
+1999-05-24 05:36 mslifcak
+
+ * configure:
+
+ -configure - save one which looks for netdb/socket headers
+
+1999-05-23 08:04 marz
+
+ * testing/packet1.txt:
+
+ file packet1.txt was initially added on branch V3-b3.
+
+1999-05-21 15:29 mslifcak
+
+ * snmplib/asn1.c, snmplib/callback.c,
+ snmplib/callback.h, snmplib/keytools.c,
+ snmplib/lcd_time.c, snmplib/md5.c, snmplib/mib.c
+, snmplib/read_config.c, snmplib/scapi.c,
+ snmplib/snmp.c, snmplib/snmp.h, snmplib/snmp_api.c
+, snmplib/snmpusm.c, snmplib/system.c,
+ snmplib/tools.c, snmplib/vacm.c, snmplib/view.c
+, win32/libsnmp/libsnmp.dsp,
+ win32/libsnmp_dll/libsnmp.def,
+ win32/libsnmp_dll/libsnmp_dll.dsp:
+
+ - library changes to build on Win32.
+
+1999-05-21 11:10 hardaker
+
+ * local/: mib2c.conf, mib2c.storage.conf:
+
+ - (mib2c.conf, mib2c.storage.conf):
+ - convert to size_t storages.
+ - misc eval fixes.
+ - more cleanup of the storage def.
+
+1999-05-21 11:07 hardaker
+
+ * agent/mibgroup/: header_complex.c, header_complex.h:
+
+ - (header_complex.c, header_complex.h):
+ - header_complex_parse_oid() created.
+ - convert everything to size_t.
+
+1999-05-21 05:54 daves
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmp_api.c snmp_api.h):
+ - New API call to close down all open sessions
+ (also called on application shutdown)
+
+1999-05-21 05:24 mslifcak
+
+ * snmplib/read_config.c:
+
+ -(read_config.c) cast fix per Markku Laukkanen
+
+1999-05-21 01:25 daves
+
+ * snmplib/snmpusm.c:
+
+ - (snmpusm.c): Fix incorrect pointer cast
+
+1999-05-20 03:46 daves
+
+ * snmplib/snmp_api.h:
+
+ - (snmp_api.h): Temporary fix to socket address problems
+
+1999-05-19 18:49 mslifcak
+
+ * agent/mibgroup/: host_res.h (V3-line.1), host_res.h:
+
+ - (host_res.h) fix HAVE_NET_IF_VAR_H define (was HAVE_NET_IN_VAR_H)
+
+1999-05-19 18:01 mslifcak
+
+ * agent/mibgroup/mibII/: var_route.c (V3-line.2), var_route.c
+:
+
+ -(mibII/var_route.c) - fix Linux RouteMask c/o "Nancy" nam@cs.cmu.edu
+
+1999-05-19 08:02 marz
+
+ * testing/pktgen.txt:
+
+ file pktgen.txt was initially added on branch V3-b3.
+
+1999-05-19 07:16 marz
+
+ * testing/packet.txt:
+
+ file packet.txt was initially added on branch V3-b3.
+
+1999-05-19 07:14 marz
+
+ * testing/pktgen.pl:
+
+ file pktgen.pl was initially added on branch V3-b3.
+
+1999-05-19 05:11 daves
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): More generalised handling of socket addresses
+
+1999-05-19 02:33 daves
+
+ * config.h.in:
+
+ - (config.h.in): Additional include protection entries
+
+1999-05-18 09:23 daves
+
+ * configure.in, snmplib/context_parse.c,
+ snmplib/read_config.c, snmplib/snmp_api.c,
+ snmplib/snmpv3.c, snmplib/system.c,
+ apps/snmp_parse_args.c, apps/snmpbulkwalk.c,
+ apps/snmpdelta.c, apps/snmpget.c, apps/snmpgetnext.c
+, apps/snmpset.c, apps/snmpstatus.c,
+ apps/snmptable.c, apps/snmptest.c, apps/snmptrap.c
+, apps/snmpusm.c, apps/snmpwalk.c,
+ apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c,
+ apps/snmpnetstat/main.c, apps/snmpnetstat/route.c,
+ apps/snmpnetstat/winstub.c:
+
+ - (configure.in snmplib/context_parse.c snmplib/read_config.c
+ snmplib/snmp_api.c snmplib/snmpv3.c snmplib/system.c
+ apps/snmp_parse_args.c apps/snmpbulkwalk.c apps/snmpdelta.c
+ apps/snmpget.c apps/snmpgetnext.c apps/snmpset.c
+ apps/snmpstatus.c apps/snmptable.c apps/snmptest.c
+ apps/snmptrap.c apps/snmpusm.c apps/snmpwalk.c
+ apps/snmpnetstat/if.c apps/snmpnetstat/inet.c
+ apps/snmpnetstat/main.c apps/snmpnetstat/route.c
+ apps/snmpnetstat/winstub.c):
+ - Clean up conditionals protecting include files
+ ( #if HAVE_WINSOCK_H / #else / #endif )
+
+1999-05-18 09:01 mslifcak
+
+ * agent/: Makefile.in, mibgroup/Makefile.in:
+
+ - (xx/Makefile.in) remove references to as yet missing disman files.
+
+1999-05-18 06:26 daves
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmp_api.c snmp_api.h): More general handling of PDU flags
+
+1999-05-17 07:17 daves
+
+ * snmplib/snmp_api.c, snmplib/snmp_api.h,
+ agent/snmpd.c, apps/snmptrap.c, apps/snmptrapd.c
+:
+
+ - (snmplib/snmp_api.c snmplib/snmp_api.h agent/snmpd.c
+ apps/snmptrap.c apps/snmptrapd.c):
+
+ - Use a single address field within the PDU structure
+ (obsoleting 'agent_addr')
+
+1999-05-17 04:36 daves
+
+ * apps/snmpstatus.c, apps/snmptest.c, apps/snmptrap.c
+, apps/snmptrapd.c, agent/snmpd.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/v2party/alarm.c,
+ agent/mibgroup/v2party/event.c:
+
+ - (snmplib/snmp_api.h snmplib/snmp_api.c snmplib/snmp_client.c
+ agent/snmpd.c agent/mibgroup/mibII/vacm_vars.c
+ agent/mibgroup/v2party/alarm.c agent/mibgroup/v2party/event.c
+ apps/snmpstatus.c apps/snmptest.c apps/snmptrap.c apps/snmptrapd.c):
+
+ - Use the generic socket address 'struct sockaddr',
+ rather than the IP-specific 'struct sockaddr_in'
+
+1999-05-17 04:34 daves
+
+ * snmplib/: snmp_api.c, snmp_api.h, snmp_client.c
+:
+
+ - (snmplib/snmp_api.h snmplib/snmp_api.c snmplib/snmp_client.c
+ agent/snmpd.c agent/mibgroup/mibII/vacm_vars.c
+ agent/mibgroup/v2party/alarm.c agent/mibgroup/v2party/event.c
+ apps/snmpstatus.c apps/snmptest.c apps/snmptrap.c apps/snmptrapd.c):
+
+ - Use the generic socket addresses 'struct sockaddr',
+ rather than the IP-specific 'struct sockaddr_in'
+
+1999-05-17 03:20 daves
+
+ * apps/: snmp_parse_args.c (V3-line.1), snmp_parse_args.c:
+
+ - (snmp_parse_args.c): Initialise session using library routine
+
+1999-05-17 03:17 daves
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): Initialise session using library routine
+
+1999-05-14 13:59 mslifcak
+
+ * agent/mibgroup/mibII/interfaces.c, snmplib/snmpusm.c
+:
+
+ -(agent/mibgroup/mibII/interfaces.c snmplib/snmpusm.c) fixes to build HP & AIX
+
+1999-05-14 09:46 mslifcak
+
+ * agent/mibgroup/examples/wombat.h,
+ agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/snmpv3/usmUser.c, apps/encode_keychange.c
+, snmplib/parse.c:
+
+ - (agent/mibgroup/examples/wombat.h agent/mibgroup/host/hr_disk.c
+ agent/mibgroup/mibII/interfaces.c
+ agent/mibgroup/mibII/var_route.c
+ agent/mibgroup/snmpv3/usmUser.c apps/encode_keychange.c
+ snmplib/parse.c) more ANSI-C touchups
+
+1999-05-14 06:54 mslifcak
+
+ * agent/mibgroup/dummy/dummy.c,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/examples/example.h,
+ agent/mibgroup/examples/wombat.c,
+ agent/mibgroup/misc/ipfwacc.c, agent/mibgroup/smux/smux.c
+, agent/mibgroup/snmpv3/snmpMPDStats.c,
+ agent/mibgroup/snmpv3/usmStats.c,
+ agent/mibgroup/snmpv3/usmUser.c, snmplib/snmp_auth.c:
+
+ - (agent/mibgroup/dummy/dummy.c agent/mibgroup/examples/example.c
+ agent/mibgroup/examples/example.h
+ agent/mibgroup/examples/wombat.c agent/mibgroup/misc/ipfwacc.c
+ agent/mibgroup/smux/smux.c
+ agent/mibgroup/snmpv3/snmpMPDStats.c
+ agent/mibgroup/snmpv3/usmStats.c
+ agent/mibgroup/snmpv3/usmUser.c snmplib/snmp_auth.c) more size_t fixes
+
+1999-05-13 09:07 hardaker
+
+ * agent/mibgroup/mibII/: vacm_vars.c (V3-line.3), vacm_vars.c
+:
+
+ - (vacm_vars.c): Set pointers to NULL after freeing them.
+
+1999-05-13 03:52 daves
+
+ * agent/mibgroup/mibII/: ip.c (V3-line.2), ip.c:
+
+ - (ip.c): Properly register IP module group on Free-BSD systems
+ (thanks to Mitchell Tasman)
+
+1999-05-12 11:22 mslifcak
+
+ * snmplib/: parse.c, party_parse.c, read_config.c
+:
+
+ -(parse.c party_parse.c read_config.c) no exit() from library; return error
+
+1999-05-12 10:53 mslifcak
+
+ * snmplib/: snmp_api.c, snmp_client.c:
+
+ - (snmp_api.c snmp_client.c) call snmp_synch_reset from snmp_sess_close
+
+1999-05-11 14:11 hardaker
+
+ * agent/mibgroup/ucd-snmp/: hpux.c, hpux.h:
+
+ - (hpux.c, hpux.h): int -> size_t conversions.
+
+1999-05-11 14:03 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory.h:
+
+ - (memory.h): remove extern.
+
+1999-05-11 14:02 hardaker
+
+ * agent/mibgroup/util_funcs.c:
+
+ - (util_funcs.c): read returns ssize_t not size_t.
+
+1999-05-10 14:49 nba
+
+ * snmplib/snmp_api.c:
+
+ snmplib/snmp_api.c: Mix-up of V1_IN_V2/V2_IN_V1 error code when GETBULK
+ inside V1 session.
+
+1999-05-10 14:47 nba
+
+ * agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/vmstat.c, apps/snmp_parse_args.c
+, snmplib/keytools.c, snmplib/keytools.h,
+ snmplib/snmp_api.c, snmplib/snmpusm.c,
+ snmplib/tools.c:
+
+ Fixing some more prototypes. Pointed out by Markku Laukkanen.
+
+1999-05-06 09:20 mslifcak
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ - (ucd-snmp/vmstat.c) - conditionally include limits.h per Eduard Koucky.
+
+1999-05-04 11:08 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): Added --enable-developer flag.
+
+1999-05-04 11:08 hardaker
+
+ * snmplib/scapi.c:
+
+ - (scapi.c):
+ - fixes for kmt.
+ - portability enhancements.
+
+1999-05-04 10:31 hardaker
+
+ * snmplib/keytools.c:
+
+ - (keytools.c): don't use ISDF().
+
+1999-05-04 10:31 hardaker
+
+ * snmplib/scapi.c:
+
+ - (scapi.c): don't dump keylist.
+
+1999-05-04 00:50 nba
+
+ * agent/: snmp_agent.c, snmp_vars.c, snmp_vars.h
+, snmpd.c, snmpd.h, mibgroup/kernel_sunos5.c
+, mibgroup/host/hr_device.c, mibgroup/host/hr_disk.c
+, mibgroup/host/hr_filesys.c,
+ mibgroup/host/hr_network.c, mibgroup/host/hr_partition.c
+, mibgroup/host/hr_print.c, mibgroup/host/hr_proc.c
+, mibgroup/host/hr_storage.c,
+ mibgroup/host/hr_swinst.c, mibgroup/host/hr_swrun.c,
+ mibgroup/host/hr_system.c, mibgroup/mibII/at.c,
+ mibgroup/mibII/icmp.c, mibgroup/mibII/interfaces.c,
+ mibgroup/mibII/ip.c, mibgroup/mibII/snmp_mib.c,
+ mibgroup/mibII/sysORTable.c, mibgroup/mibII/system_mib.c
+, mibgroup/mibII/tcp.c, mibgroup/mibII/udp.c,
+ mibgroup/mibII/vacm_vars.c, mibgroup/mibII/var_route.c
+, mibgroup/smux/smux.c, mibgroup/snmpv3/snmpEngine.c
+, mibgroup/snmpv3/snmpMPDStats.c,
+ mibgroup/snmpv3/usmStats.c, mibgroup/snmpv3/usmUser.c,
+ mibgroup/target/snmpTargetAddrEntry.c,
+ mibgroup/target/snmpTargetParamsEntry.c,
+ mibgroup/ucd-snmp/disk.c, mibgroup/ucd-snmp/errormib.c
+, mibgroup/ucd-snmp/extensible.c,
+ mibgroup/ucd-snmp/file.c, mibgroup/ucd-snmp/loadave.c
+, mibgroup/ucd-snmp/memory_solaris2.c,
+ mibgroup/ucd-snmp/pass.c, mibgroup/ucd-snmp/proc.c,
+ mibgroup/ucd-snmp/registry.c,
+ mibgroup/ucd-snmp/versioninfo.c, mibgroup/v2party/acl_vars.c
+, mibgroup/v2party/alarm.c,
+ mibgroup/v2party/context_vars.c, mibgroup/v2party/event.c
+, mibgroup/v2party/party_vars.c,
+ mibgroup/v2party/view_vars.c:
+
+ (many): remove const spec from FindVarMethod. That was wrong
+
+1999-05-04 00:47 nba
+
+ * snmplib/mib.c:
+
+ (mib.c): Fix problem (core dump) with MIBFILES environment variable.
+
+1999-05-03 15:38 nba
+
+ * agent/snmp2p.c, agent/snmp_agent.c,
+ agent/snmp_vars.c, agent/snmp_vars.h, agent/snmpd.c
+, agent/snmpd.h, agent/view_parse.c,
+ agent/mibgroup/host_res.h, agent/mibgroup/kernel_sunos5.c
+, agent/mibgroup/kernel_sunos5.h,
+ agent/mibgroup/struct.h, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/util_funcs.h, agent/mibgroup/host/hr_device.c
+, agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_network.h,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_print.c,
+ agent/mibgroup/host/hr_proc.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c,
+ agent/mibgroup/host/hr_utils.c,
+ agent/mibgroup/host/hr_utils.h, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/sysORTable.h,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/vacm_vars.h,
+ agent/mibgroup/mibII/var_route.c, agent/mibgroup/smux/smux.c
+, agent/mibgroup/smux/smux.h,
+ agent/mibgroup/snmpv3/snmpEngine.c,
+ agent/mibgroup/snmpv3/snmpMPDStats.c,
+ agent/mibgroup/snmpv3/usmStats.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/snmpv3/usmUser.h,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/extensible.h,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/proc.h,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/v2party/acl_vars.c,
+ agent/mibgroup/v2party/alarm.c,
+ agent/mibgroup/v2party/alarm.h,
+ agent/mibgroup/v2party/context_vars.c,
+ agent/mibgroup/v2party/event.c,
+ agent/mibgroup/v2party/event.h,
+ agent/mibgroup/v2party/party_vars.c,
+ agent/mibgroup/v2party/party_vars.h,
+ agent/mibgroup/v2party/view_vars.c, apps/encode_keychange.c
+, apps/snmp_parse_args.c, apps/snmp_parse_args.h
+, apps/snmpbulkwalk.c, apps/snmpdelta.c,
+ apps/snmpget.c, apps/snmpgetnext.c, apps/snmpset.c
+, apps/snmpstatus.c, apps/snmptable.c,
+ apps/snmptest.c, apps/snmptranslate.c,
+ apps/snmptrap.c, apps/snmptrapd.c,
+ apps/snmptrapd_handlers.c, apps/snmptrapd_handlers.h,
+ apps/snmpusm.c, apps/snmpwalk.c, apps/snmpnetstat/if.c
+, apps/snmpnetstat/inet.c, apps/snmpnetstat/main.c
+, apps/snmpnetstat/netstat.h, apps/snmpnetstat/route.c
+, snmplib/acl.h, snmplib/acl_parse.c,
+ snmplib/all_system.h, snmplib/asn1.c, snmplib/asn1.h
+, snmplib/callback.h, snmplib/context.c,
+ snmplib/context.h, snmplib/context_parse.c,
+ snmplib/int64.c, snmplib/int64.h, snmplib/keytools.c
+, snmplib/keytools.h, snmplib/lcd_time.c,
+ snmplib/lcd_time.h, snmplib/libsnmp.h, snmplib/md5.c
+, snmplib/md5.h, snmplib/mib.c, snmplib/mib.h
+, snmplib/parse.h, snmplib/party.c,
+ snmplib/party.h, snmplib/party_parse.c,
+ snmplib/read_config.c, snmplib/read_config.h,
+ snmplib/scapi.c, snmplib/scapi.h, snmplib/snmp-tc.h
+, snmplib/snmp.c, snmplib/snmp.h,
+ snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmp_auth.c, snmplib/snmp_client.c,
+ snmplib/snmp_client.h, snmplib/snmp_debug.c,
+ snmplib/snmp_debug.h, snmplib/snmp_impl.h,
+ snmplib/snmpusm.c, snmplib/snmpusm.h, snmplib/snmpv3.c
+, snmplib/snmpv3.h, snmplib/system.h,
+ snmplib/tools.c, snmplib/tools.h, snmplib/vacm.c
+, snmplib/vacm.h, snmplib/view.c, snmplib/view.h
+:
+
+ (*.[ch]): patches to types to wipe warnings from compilers
+ with more strict noise levels. (also good when compiling
+ with gcc -Wall -pedantic -Wwrite-strings -Wcast-qual)
+
+1999-05-03 12:56 hardaker
+
+ * agent/Makefile.in, agent/agent_read_config.c,
+ agent/mibgroup/Makefile.in, agent/mibgroup/header_complex.c
+, apps/Makefile.in, apps/encode_keychange.c,
+ apps/snmpnetstat/Makefile.in, snmplib/Makefile.in,
+ snmplib/all_general_local.h, snmplib/all_system.h,
+ snmplib/keytools.c, snmplib/lcd_time.c, snmplib/scapi.c
+, snmplib/snmp_auth.c, snmplib/snmpusm.c,
+ snmplib/tools.c, snmplib/tools.h, testing/Makefile.in
+, testing/T.c, testing/etimetest.c,
+ testing/keymanagetest.c, testing/misctest.c,
+ testing/scapitest.c:
+
+ - (Makefile.in, agent_read_config.c, Makefile.in, header_complex.c,
+ Makefile.in, encode_keychange.c, Makefile.in, Makefile.in,
+ all_general_local.h, all_system.h, keytools.c, lcd_time.c, scapi.c,
+ snmp_auth.c, snmpusm.c, tools.c, tools.h, Makefile.in, T.c,
+ etimetest.c, keymanagetest.c, misctest.c, scapitest.c):
+ - nuked all_general_local.h and all_system.h.
+ - makefileindepend as well.
+
+1999-05-03 07:13 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): fix -A flag, which got broken during someones changes.
+
+1999-05-03 07:05 hardaker
+
+ * agent/agent_read_config.c, agent/mibgroup/snmpv3/usmUser.c
+, agent/mibgroup/snmpv3/usmUser.h,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.h,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.h,
+ apps/snmptrapd.c, snmplib/callback.c,
+ snmplib/callback.h, snmplib/scapi.c, snmplib/scapi.h
+, snmplib/snmp_api.c, snmplib/snmpv3.c,
+ snmplib/snmpv3.h:
+
+ - (agent_read_config.c, usmUser.c, usmUser.h, snmpTargetAddrEntry.c,
+ snmpTargetAddrEntry.h, snmpTargetParamsEntry.c,
+ snmpTargetParamsEntry.h, snmptrapd.c, callback.c, callback.h,
+ scapi.c, scapi.h, snmp_api.c, snmpv3.c, snmpv3.h):
+ - shutdown and store callback usage.
+
+1999-05-03 07:05 hardaker
+
+ * snmplib/keytools.c:
+
+ - (keytools.c): -Wall fix initializing a variable.
+
+1999-05-01 07:52 hardaker
+
+ * snmplib/: callback.c, callback.h:
+
+ - (callback.c, callback.h): renamed snmp_callback to snmp_gen_callback.
+
+1999-04-29 08:44 hardaker
+
+ * README.win32:
+
+ - (README.win32): Note change from Robert Story.
+
+1999-04-29 07:38 hardaker
+
+ * agent/agent_read_config.c, agent/snmpd.c,
+ apps/snmptrapd.c, snmplib/snmp_api.c,
+ snmplib/snmpusm.c, snmplib/snmpusm.h, snmplib/snmpv3.c
+, snmplib/snmpv3.h:
+
+ - (agent_read_config.c, snmpd.c, snmptrapd.c, snmp_api.c, snmpusm.c,
+ snmpusm.h, snmpv3.c, snmpv3.h):
+ - use the callback mechanism for post-config stuff.
+
+1999-04-29 07:32 hardaker
+
+ * snmplib/: Makefile.in, callback.c, callback.h:
+
+ - (Makefile.in, callback.c, callback.h): callback API.
+
+1999-04-28 07:59 hardaker
+
+ * local/mib2c.storage.conf:
+
+ - (mib2c.storage.conf): enum #defines created
+
+1999-04-27 09:51 mslifcak
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (interfaces.c) add if_type_from_name to convert interface name to type.
+
+1999-04-26 12:37 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c) - fix other use of request's callback data
+
+1999-04-26 12:11 nba
+
+ * version.h, agent/agent_read_config.c,
+ agent/agent_read_config.h, agent/auto_nlist.c,
+ agent/auto_nlist.h, agent/kernel.c, agent/kernel.h
+, agent/snmp2p.c, agent/snmp_vars.c,
+ agent/snmp_vars.h, agent/snmpd.c, agent/view_parse.c
+, agent/mibgroup/host_res.h,
+ agent/mibgroup/kernel_sunos5.c,
+ agent/mibgroup/kernel_sunos5.h, agent/mibgroup/util_funcs.c
+, agent/mibgroup/util_funcs.h,
+ agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_other.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/sysORTable.h,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/var_route.c, agent/mibgroup/smux/smux.c
+, agent/mibgroup/snmpv3/usmStats.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/errormib.h,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.h,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.h,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/main.c,
+ apps/snmpnetstat/netstat.h, man/snmp.conf.5.def,
+ man/snmpd.1.def, man/snmpd.conf.5.def,
+ mibs/UCD-SNMP-MIB.txt, snmplib/acl_parse.c,
+ snmplib/asn1.c, snmplib/asn1.h,
+ snmplib/context_parse.c, snmplib/mib.c, snmplib/mib.h
+, snmplib/parse.c, snmplib/parse.h,
+ snmplib/party_parse.c, snmplib/read_config.c,
+ snmplib/read_config.h, snmplib/snmp.c, snmplib/snmp.h
+, snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmp_auth.c, snmplib/snmp_client.c,
+ snmplib/snmp_client.h, snmplib/snmp_debug.c,
+ snmplib/snmp_debug.h, snmplib/snmpusm.c,
+ snmplib/snmpusm.h, snmplib/snmpv3.c, snmplib/snmpv3.h
+, snmplib/system.c, snmplib/system.h,
+ snmplib/vacm.c, snmplib/vacm.h, testing/Makefile.in
+:
+
+
+ */*: replace horrible (char *)"string" with const specifiers in relevant
+ functions.
+
+1999-04-26 12:09 nba
+
+ * apps/: encode_keychange.c, snmp_parse_args.c,
+ snmpbulkwalk.c, snmpdelta.c, snmpget.c,
+ snmpgetnext.c, snmpset.c, snmpstatus.c,
+ snmptable.c, snmptrap.c, snmptrapd.c,
+ snmptrapd_handlers.c, snmpusm.c, snmpwalk.c:
+
+
+
+ apps/*.c: use snmp_perror to report errors from read_objid and friends
+ apps/snmptrapd.c: fix a bus error when using -S and receiving an
+ enterprise specific trap.
+
+1999-04-26 12:03 nba
+
+ * apps/snmpnetstat/if.c:
+
+
+ (if.c) make the width of snmpnet -i (and -o) adapt to the length of returned
+ strings
+
+1999-04-26 11:48 nba
+
+ * apps/snmptranslate.c, snmplib/parse.c,
+ snmplib/parse.h, snmplib/snmp_api.c:
+
+
+
+ - snmplib/parse.h, snmplib/parse.c: new mib printer: mib_print_tree
+ inspired by a reference to snmx in comp.protocols.snmp
+ - apps/snmptranslate: let the -p option call this new printer
+ - snmplib/snmp_api.c: some left over __P macros
+
+1999-04-26 11:21 nba
+
+ * snmplib/parse.h:
+
+
+ (parse.h) Silly speling misteak (ACCESS_CRAETE)
+
+1999-04-26 09:21 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib.c) - use request callback's data if request specifies a callback.
+
+1999-04-23 13:05 mslifcak
+
+ * README.thread:
+
+ - README.thread - long needed document describing how to use Single API
+
+1999-04-22 10:50 hardaker
+
+ * snmplib/: keytools.c, snmp_api.c, snmp_api.h
+, snmp_client.c, snmp_client.c:
+
+ - (snmp_client.c, snmp_api.c, snmp_api.h, keytools.c): Another v3 branch update.
+
+1999-04-22 07:57 hardaker
+
+ * local/mib2c.storage.conf:
+
+ - (mib2c.storage.conf): Created a new super-duper mib2c configuration
+ file that takes care of just about everything if you have a mib that
+ does its own storage (rather than having to poke something else for
+ information).
+
+1999-04-22 07:56 hardaker
+
+ * local/: mib2c, mib2c.conf:
+
+ - (mib2c, mib2c.conf): allow NoAccess to be processed, and use skipif:
+ directives where needed because of it.
+
+1999-04-22 07:54 hardaker
+
+ * snmplib/: read_config.c, read_config.h:
+
+ - (read_config.c, read_config.h): created *read_config_store_data();
+
+1999-04-22 07:54 hardaker
+
+ * agent/mibgroup/header_complex.c:
+
+ - (header_complex.c): make header_complex() accept NULLs.
+
+1999-04-20 21:39 hardaker
+
+ * local/mib2c.vartypes.conf:
+
+ - (mib2c.vartypes.conf): remove un-used vtype, parser fields.
+
+1999-04-20 21:38 hardaker
+
+ * local/mib2c.conf:
+
+ - (mib2c.conf): clean up skipif regexps a bit.
+
+1999-04-20 16:10 hardaker
+
+ * local/: mib2c, mib2c.conf:
+
+ - (mib2c, mib2c.conf): a little more clean up.
+
+1999-04-20 16:04 hardaker
+
+ * local/: mib2c, mib2c.conf:
+
+ - (mib2c, mib2c.conf): variable name conversions:
+ - variableTypes -> variables
+ - cname -> NAME
+
+1999-04-20 15:31 hardaker
+
+ * local/: mib2c, mib2c.conf, mib2c.vartypes.conf
+:
+
+ - (mib2c, mib2c.conf, mib2c.vartypes.conf):
+ - completely re-hacked:
+ - entire code base is now put into the .conf files rather than in
+ the mib2c program. This should entitle mib2c to be used more
+ generically, and could produce different types of code templates
+ based on the .conf file it is given. In theory, it should be
+ able to produce C code for a non-ucd-snmp agent, or even better,
+ any type of code (not just C) for something else based on mib
+ information.
+ - The down side, is that the current .conf files are now ambiguous
+ again and difficult to understand without being, well, me. The
+ up side is that I'm sure Dave Shield will go through and clean
+ it up for me like he did last time. Ha ha. I wonder if he'll
+ read this? (If so, see me first).
+
+1999-04-20 11:28 hardaker
+
+ * local/: mib2c, mib2c.conf, mib2c.vartypes.conf
+:
+
+ - (mib2c, mib2c.conf, mib2c.vartypes.conf): more updates.
+
+1999-04-19 21:16 hardaker
+
+ * snmplib/tools.h:
+
+ - (tools.h): new convenience macro: SNMP_MALLOC_STRUCT(structName).
+
+1999-04-19 21:15 hardaker
+
+ * snmplib/snmpusm.c:
+
+ - (snmpusm.c): don't free things that are NULL.
+
+1999-04-19 21:14 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Don't snmp_set_var_objid if name is NULL in
+ snmp_varlist_add_variable().
+
+1999-04-19 21:12 hardaker
+
+ * snmplib/: read_config.c, read_config.h:
+
+ - (read_config.c, read_config.h):
+ - created a more convenient read_config_read_data() function to
+ generically read a token into a given variable.
+ - cleaned up persistent storage parsing routines.
+ - use previously malloced space in some routines, or malloc it for
+ them if the storage area is NULL.
+
+1999-04-19 21:09 hardaker
+
+ * agent/mibgroup/header_complex.c:
+
+ - (header_complex.c): NULL checking.
+
+1999-04-19 21:09 hardaker
+
+ * agent/mibgroup/mibincl.h:
+
+ - (mibincl.h): add read_config.h.
+
+1999-04-19 21:01 hardaker
+
+ * local/: mib2c, mib2c.conf, mib2c.vartypes.conf
+:
+
+ - (mib2c, mib2c.conf, mib2c.vartypes.conf):
+ - rewrote mib2c to be more dependent on .conf files. The main .conf
+ file now contains the code itself.
+ - need to write a foreach(mibnode) type parser next.
+
+1999-04-18 06:54 mslifcak
+
+ * agent/mibgroup/misc/ipfwacc.h:
+
+ - (ipfwacc.h) subdir change per Joe Pruettt: 9 -> 10
+
+1999-04-16 21:34 hardaker
+
+ * bug-report, version.h, FAQ, README,
+ sedscript.in:
+
+ - (version.h bug-report sedscript.in): version tag ( 4.0.pre3 )
+
+1999-04-16 21:27 hardaker
+
+ * man/snmptrapd.8:
+
+ - (snmptrapd.8): man patch from Niels
+
+1999-04-16 21:27 hardaker
+
+ * NEWS:
+
+ - (NEWS): updated
+
+1999-04-16 21:16 hardaker
+
+ * snmplib/snmp_auth.c:
+
+ - (snmp_auth.c): removed fix note.
+
+1999-04-16 21:15 hardaker
+
+ * snmplib/snmp.h:
+
+ - (snmp.h): SNMPADMINLENGTH definition.
+
+1999-04-16 21:13 hardaker
+
+ * mibs/DISMAN-SCRIPT-MIB.txt:
+
+ - (DISMAN-SCRIPT-MIB.txt): added to mibs dir.
+
+1999-04-16 21:12 hardaker
+
+ * agent/mibgroup/header_complex.h:
+
+ - (header_complex.h): prototypes.
+
+1999-04-16 21:11 hardaker
+
+ * configure.in:
+
+ - (configure.in): changed default store location to /var/ucd-snmp
+
+1999-04-16 21:10 hardaker
+
+ * README:
+
+ - (README): Added v3 team members.
+
+1999-04-16 08:33 mslifcak
+
+ * snmplib/mib.c:
+
+ - (mib.c) "-m" or MIBS: can specify MIB module by file name.
+
+1999-04-16 07:54 mslifcak
+
+ * agent/mibgroup/ipfwchains/IPFWCHAINS-MIB.txt:
+
+ - (IPFWCHAINS-MIB.txt) ipfwChainTable {ipfw 1} fix
+
+1999-04-16 07:30 mslifcak
+
+ * mibs/IPFWACC-MIB.txt:
+
+ - (IPFWACC-MIB.txt) change module name from IPFWADM-MIB to IPFWACC-MIB.
+
+1999-04-14 16:56 mslifcak
+
+ * apps/: snmpdelta.c, snmpget.c, snmpgetnext.c
+, snmpset.c, snmpstatus.c:
+
+ - apps that use snmp_fix_pdu must clean up the response PDU !
+
+1999-04-14 16:31 mslifcak
+
+ * agent/snmp_agent.c, snmplib/snmp_api.c,
+ snmplib/snmp_api.h, snmplib/snmp_client.c,
+ snmplib/snmp_client.h:
+
+ - (snmp_agent,c, snmp_api.[ch], snmp_client.[ch]) fix variable_list with built-in storage
+
+1999-04-14 15:52 hardaker
+
+ * apps/snmptranslate.c:
+
+ - (snmptranslate.c): init_snmp("snmpapp").
+
+1999-04-14 15:30 mslifcak
+
+ * snmplib/parse.c:
+
+ - (parse.c) File pointer initialized to "" before first use.
+
+1999-04-14 15:29 mslifcak
+
+ * apps/snmptranslate.c:
+
+ - (snmptranslate.c) init_snmp takes argument; "" used.
+
+1999-04-13 16:03 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): Patch from Niels Baggesen:
+ - snmptrapd option to ignore auth traps, add -S option, log termination.
+
+1999-04-13 16:00 hardaker
+
+ * snmplib/: parse.c, parse.h:
+
+ - (parse.c, parse.h): Patch from Niels Baggesen:
+ - nicer parser messages (include file names). Correct help for -Pc.
+ - Add FRAME-RELAY-DTE-MIB as replacement for RFC-1315
+
+1999-04-13 15:58 hardaker
+
+ * man/: snmp_config.5.def, snmptrap.1,
+ snmptrapd.conf.5.def:
+
+ - (snmp_config.5.def, snmptrap.1, snmptrapd.conf.5.def): Patch from
+ Niels Baggesen:
+ - clean up small bugs.
+
+1999-04-13 15:58 hardaker
+
+ * apps/snmptranslate.c:
+
+ - (snmptranslate.c): Patch from Niels Baggesen:
+ - support -P.
+
+1999-04-13 15:57 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - (vacm_vars.c): Patch from Niels Baggesen:
+ - better checking of .conf file parsing line requirements.
+
+1999-04-13 15:56 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): Patch from Niels Baggesen:
+ - log with timestamp at shutdown.
+
+1999-04-13 15:36 hardaker
+
+ * mibs/: SNMP-NOTIFICATION-MIB.txt, SNMP-PROXY-MIB.txt,
+ SNMP-VIEW-BASED-ACM-MIB.txt:
+
+ - (SNMP-NOTIFICATION-MIB.txt, SNMP-PROXY-MIB.txt,
+ SNMP-VIEW-BASED-ACM-MIB.txt): Patch from Niels Baggesen:
+ - fix module locations for broken mibs.
+
+1999-04-13 15:32 hardaker
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ - (pass.c): Patch from Jim Mar:
+ - add capability for binary octet strings in pass scripts.
+
+1999-04-13 15:20 hardaker
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ - (system_mib.c): make sysDescr read-only.
+
+1999-04-13 15:19 hardaker
+
+ * configure, configure.in, agent/Makefile.in
+:
+
+ - (configure, configure.in, Makefile.in): Patch from Daniel Hagerty:
+ - fix libwrap to only add the library to the agent.
+
+1999-04-13 08:43 hardaker
+
+ * README.win32:
+
+ - (README.win32): Patch from Robert Story:
+ - add a URL reference to cygwin.
+
+1999-04-12 22:23 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmp_api.c): make snmp_varlist_add_variable to possible create a
+ varlist before adding something to it.
+
+1999-04-12 22:16 hardaker
+
+ * local/tkmib:
+
+ - (tkmib): make displayed mib node info into two columns instead of one.
+
+1999-04-12 22:15 hardaker
+
+ * agent/mibgroup/host/hr_utils.h:
+
+ - (hr_utils.h): remove variable names from prototypes (was causing problems).
+
+1999-04-12 22:14 hardaker
+
+ * agent/mibgroup/mibincl.h:
+
+ - (mibincl.h): include sys/time.h.
+
+1999-04-12 22:13 hardaker
+
+ * agent/mibgroup/: header_complex.c, header_complex.h:
+
+ - (header_complex.c, header_complex.h): deal with more complex data
+ structures with multiple and variable length indexes.
+
+1999-04-12 22:12 hardaker
+
+ * README.win32:
+
+ - (README.win32): new README from Joe Marzot.
+
+1999-04-07 15:00 mslifcak
+
+ * agent/mibgroup/snmpv3/usmUser.c, snmplib/snmp_api.c,
+ snmplib/system.c:
+
+ -(usmUser.c,system.c) plug mem leak; (snmp_api.c) enforce array limit.
+
+1999-04-07 12:23 mslifcak
+
+ * apps/encode_keychange.c, snmplib/tools.c:
+
+ -(apps/encode_keychange.c snmplib/tools.c) move keystroke functions to application.
+
+1999-04-07 12:17 mslifcak
+
+ * agent/mibgroup/ipfwchains/ipfwchains.c:
+
+ -(ipfwchains.c) remove multiple definitions of MATCH_FAILED
+
+1999-04-07 11:59 mslifcak
+
+ * agent/snmp2p.c, agent/snmp_agent.c,
+ agent/snmp_vars.h, agent/view_parse.c,
+ agent/mibgroup/util_funcs.c,
+ agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/misc/ipfwacc.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/hpux.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/v2party/context_vars.c,
+ agent/mibgroup/v2party/party_vars.c,
+ agent/mibgroup/v2party/view_vars.c, apps/snmpdelta.c,
+ apps/snmptest.c, apps/snmptrapd.c,
+ apps/snmpnetstat/route.c, apps/snmpnetstat/winstub.c,
+ snmplib/acl_parse.c, snmplib/context.h,
+ snmplib/context_parse.c, snmplib/party.h,
+ snmplib/party_parse.c, snmplib/read_config.c,
+ snmplib/snmp_api.c, snmplib/snmp_auth.c,
+ snmplib/snmp_impl.h, snmplib/vacm.h, snmplib/view.h
+:
+
+ - (agent/snmp2p.c agent/snmp_agent.c agent/snmp_vars.h
+ agent/view_parse.c agent/mibgroup/util_funcs.c
+ agent/mibgroup/examples/ucdDemoPublic.c
+ agent/mibgroup/host/hr_filesys.c
+ agent/mibgroup/host/hr_storage.c
+ agent/mibgroup/host/hr_swrun.c agent/mibgroup/host/hr_system.c
+ agent/mibgroup/mibII/at.c agent/mibgroup/mibII/icmp.c
+ agent/mibgroup/mibII/interfaces.c agent/mibgroup/mibII/ip.c
+ agent/mibgroup/mibII/system_mib.c agent/mibgroup/mibII/tcp.c
+ agent/mibgroup/mibII/udp.c agent/mibgroup/mibII/vacm_vars.c
+ agent/mibgroup/mibII/var_route.c agent/mibgroup/misc/ipfwacc.c
+ agent/mibgroup/snmpv3/usmUser.c
+ agent/mibgroup/ucd-snmp/extensible.c
+ agent/mibgroup/ucd-snmp/hpux.c agent/mibgroup/ucd-snmp/pass.c
+ agent/mibgroup/ucd-snmp/pass_persist.c
+ agent/mibgroup/ucd-snmp/proc.c
+ agent/mibgroup/v2party/context_vars.c
+ agent/mibgroup/v2party/party_vars.c
+ agent/mibgroup/v2party/view_vars.c apps/snmpdelta.c
+ apps/snmptest.c apps/snmptrapd.c apps/snmpnetstat/route.c
+ apps/snmpnetstat/winstub.c snmplib/acl_parse.c
+ snmplib/context.h snmplib/context_parse.c snmplib/party.h
+ snmplib/party_parse.c snmplib/read_config.c snmplib/snmp_api.c
+ snmplib/snmp_auth.c snmplib/snmp_impl.h snmplib/vacm.h
+ snmplib/view.h) fgets use sizeof mostly, oid base size is MAX_OID_LEN
+
+1999-04-07 11:34 hardaker
+
+ * apps/encode_keychange.c:
+
+ - (encode_keychange.c): removal of duplicate functions.
+
+1999-04-07 11:32 hardaker
+
+ * apps/: encode_keychange.c, snmpusm.c:
+
+ - (encode_keychange.c, snmpusm.c): debugging conversions.
+
+1999-04-07 11:27 hardaker
+
+ * agent/mibgroup/: examples/ucdDemoPublic.c,
+ mibII/sysORTable.c, mibII/vacm_vars.c, smux/smux.c
+, snmpv3/snmpEngine.c, snmpv3/usmUser.c,
+ target/snmpTargetAddrEntry.c, target/snmpTargetParamsEntry.c
+:
+
+ - (ucdDemoPublic.c, sysORTable.c, vacm_vars.c, smux.c, snmpEngine.c,
+ usmUser.c, snmpTargetAddrEntry.c, snmpTargetParamsEntry.c):
+ - debugging statement conversion
+
+1999-04-07 11:12 hardaker
+
+ * snmplib/: scapi.c, snmpv3.c:
+
+ - (scapi.c, snmpv3.c): debug typos and include file additions.
+
+1999-04-07 10:48 hardaker
+
+ * agent/mibgroup/mibII/snmp_mib.c:
+
+ - (snmp_mib.c): removed unnneeded header_snmp().
+
+1999-04-07 10:43 hardaker
+
+ * snmplib/debug.h:
+
+ - (debug.h): removed.
+
+1999-04-07 10:41 hardaker
+
+ * config.h.in, agent/snmp_vars.c,
+ apps/encode_keychange.c, apps/snmptrapd.c,
+ snmplib/Makefile.in, snmplib/all_general_local.h,
+ snmplib/keytools.c, snmplib/keytools.h,
+ snmplib/lcd_time.c, snmplib/md5.c,
+ snmplib/read_config.c, snmplib/scapi.c,
+ snmplib/snmp_api.c, snmplib/snmpusm.c,
+ snmplib/snmpv3.c, snmplib/tools.c, snmplib/tools.h
+:
+
+ - (config.h.in, snmp_vars.c, encode_keychange.c, snmptrapd.c,
+ Makefile.in, all_general_local.h, keytools.c, keytools.h,
+ lcd_time.c, md5.c, read_config.c, scapi.c, snmp_api.c, snmpusm.c,
+ snmpv3.c, tools.c, tools.h):
+ - misc merging, including fixes and debugging statement changes to
+ newer model.
+ - a few -Wall fixes.
+
+1999-04-07 06:17 mslifcak
+
+ * agent/snmp_vars.c, agent/snmpd.c,
+ agent/mibgroup/v2party/alarm.c, apps/encode_keychange.c
+, apps/snmpstatus.c, apps/snmptrapd.c,
+ apps/snmpnetstat/if.c, snmplib/all_system.h,
+ snmplib/debug.h, snmplib/keytools.c, snmplib/lcd_time.c
+, snmplib/md5.c, snmplib/mib.c,
+ snmplib/read_config.c, snmplib/scapi.c, snmplib/snmp.h
+, snmplib/snmp_api.c, snmplib/snmp_auth.c,
+ snmplib/snmpusm.c, snmplib/snmpv3.c, snmplib/system.h
+, snmplib/tools.c, snmplib/tools.h,
+ win32/config.h, win32/libsnmp/libsnmp.dsp,
+ win32/libsnmp_dll/libsnmp.def,
+ win32/libsnmp_dll/libsnmp_dll.dsp:
+
+ - () more ANSI header fixups; touchup for M$ Win32 build
+
+1999-04-06 22:14 mslifcak
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c) more v2party rework needed
+
+1999-04-06 22:13 mslifcak
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - (vacm_vars.c) - set global ptrs = 0.
+
+1999-04-06 21:23 mslifcak
+
+ * Makefile.in, agent/snmp_agent.c, agent/snmp_vars.c
+, agent/snmpd.c, agent/mibgroup/dummy/dummy.h,
+ agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/examples/ucdDemoPublic.h,
+ agent/mibgroup/examples/wombat.h,
+ agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/misc/dlmod.c, agent/mibgroup/smux/smux.c
+, agent/mibgroup/snmpv3/snmpEngine.c,
+ agent/mibgroup/snmpv3/snmpEngine.h,
+ agent/mibgroup/snmpv3/snmpMPDStats.c,
+ agent/mibgroup/snmpv3/snmpMPDStats.h,
+ agent/mibgroup/snmpv3/usmStats.c,
+ agent/mibgroup/snmpv3/usmStats.h,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/snmpv3/usmUser.h,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/v2party/context_vars.c, apps/snmpusm.c,
+ apps/snmpnetstat/if.c, apps/snmpnetstat/winstub.c,
+ apps/snmpnetstat/winstub.h, snmplib/lcd_time.c,
+ snmplib/lcd_time.h, snmplib/snmp_api.c,
+ snmplib/snmp_api.h, snmplib/snmpusm.c,
+ snmplib/snmpusm.h, snmplib/system.c, snmplib/tools.c
+:
+
+ - changes for ANSI headers; POSIX(index vs strchr); minor fixes
+
+1999-04-06 15:38 hardaker
+
+ * agent/mibgroup/mibincl.h,
+ agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/mibII/vacm_vars.h, apps/snmptrapd.c,
+ snmplib/snmp_api.c, testing/Makefile.in:
+
+ - (mibincl.h, ucdDemoPublic.c, vacm_vars.h, snmptrapd.c, snmp_api.c,
+ Makefile.in): final merge pieces of recent v3 line changes.
+
+1999-04-06 15:12 hardaker
+
+ * ISSUES, Makefile.in, Makefile.top, acconfig.h
+, aclocal.m4, config.h.in, configure,
+ configure.in, agent/Makefile.in,
+ agent/agent_read_config.c, agent/agent_read_config.h,
+ agent/auto_nlist.h, agent/m2m.h, agent/snmp2p.c,
+ agent/snmp_agent.c, agent/snmp_agent.h,
+ agent/snmp_vars.c, agent/snmp_vars.h, agent/snmpd.c
+, agent/snmpd.h, agent/mibgroup/Makefile.in,
+ agent/mibgroup/mibincl.h, agent/mibgroup/snmpv3mibs.h,
+ agent/mibgroup/util_funcs.c, agent/mibgroup/util_funcs.h
+, agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/examples/ucdDemoPublic.cmds,
+ agent/mibgroup/examples/ucdDemoPublic.conf,
+ agent/mibgroup/examples/ucdDemoPublic.h,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/vacm_vars.h,
+ agent/mibgroup/snmpv3/snmpEngine.c,
+ agent/mibgroup/snmpv3/snmpEngine.h,
+ agent/mibgroup/snmpv3/snmpMPDStats.c,
+ agent/mibgroup/snmpv3/snmpMPDStats.h,
+ agent/mibgroup/snmpv3/usmStats.c,
+ agent/mibgroup/snmpv3/usmStats.h,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/snmpv3/usmUser.h,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c, apps/.cvsignore
+, apps/Makefile.in, apps/encode_keychange.c,
+ apps/snmp_parse_args.c, apps/snmpget.c,
+ apps/snmpset.c, apps/snmptrapd.c, apps/snmpusm.c
+, apps/snmpnetstat/Makefile.in, local/snmp-ucd.sh
+, man/snmpcmd.1, man/snmpd.conf.5.def,
+ mibs/SNMP-TARGET-MIB.txt, mibs/SNMP-USER-BASED-SM-MIB.txt
+, mibs/SNMPv2-TC.txt, mibs/UCD-DEMO-MIB.txt,
+ mibs/UCD-SNMP-MIB.txt, snmplib/Makefile.in,
+ snmplib/all_general_local.h, snmplib/all_system.h,
+ snmplib/asn1.c, snmplib/debug.h, snmplib/keytools.c
+, snmplib/keytools.h, snmplib/lcd_time.c,
+ snmplib/lcd_time.h, snmplib/md5.c, snmplib/md5.h
+, snmplib/mib.c, snmplib/parse.c,
+ snmplib/party.h, snmplib/read_config.c,
+ snmplib/read_config.h, snmplib/scapi.c,
+ snmplib/scapi.h, snmplib/snmp-tc.h, snmplib/snmp.c
+, snmplib/snmp.h, snmplib/snmp_api.c,
+ snmplib/snmp_api.h, snmplib/snmp_auth.c,
+ snmplib/snmp_client.c, snmplib/snmp_client.h,
+ snmplib/snmp_impl.h, snmplib/snmpusm.c,
+ snmplib/snmpusm.h, snmplib/snmpv3.c, snmplib/snmpv3.h
+, snmplib/system.c, snmplib/system.h,
+ snmplib/tools.c, snmplib/tools.h,
+ snmplib/transform_oids.h, snmplib/vacm.h,
+ snmplib/view.c, testing/.cvsignore,
+ testing/Makefile.in, testing/README, testing/T.c,
+ testing/T.sh, testing/data.keychange-md5,
+ testing/data.keychange-sha1, testing/data.keychange-sha1-des
+, testing/data.kul-md5, testing/data.kul-sha1,
+ testing/demo.remote, testing/demo2,
+ testing/demo2.functions, testing/demo2.setupfile,
+ testing/etimetest.c, testing/eval_oneprogram.sh,
+ testing/eval_suite.sh, testing/eval_testlist,
+ testing/eval_tools.sh, testing/keymanagetest.c,
+ testing/misctest.c, testing/scapitest.c,
+ testing/test_keychange.sh, testing/test_kul.sh:
+
+ - (*): Merged the 4.0 line into the 3.6.1 line.
+
+1999-04-06 11:33 mslifcak
+
+ * agent/mibgroup/: host/hr_filesys.c, host/hr_proc.c,
+ ipfwchains/libipfwc.c, mibII/icmp.c, mibII/ip.c
+, mibII/route_write.c, mibII/tcp.c, mibII/udp.c
+, smux/smux.c, target/snmpTargetAddrEntry.c,
+ target/snmpTargetAddrEntry.h, target/snmpTargetParamsEntry.c
+, target/snmpTargetParamsEntry.h,
+ ucd-snmp/memory_solaris2.c, ucd-snmp/memory_solaris2.h:
+
+ - another round of ANSI-fying the agent completed.
+
+1999-04-06 10:59 mslifcak
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ - (extensible.c) quell warning about comparing pointer with non-pointer.
+
+1999-04-06 09:23 hardaker
+
+ * config.guess, config.sub:
+
+ - (config.guess, config.sub): new versions from autoconf 2.13.
+
+1999-04-05 15:59 mslifcak
+
+ * config.h.in, configure, configure.in,
+ agent/agent_read_config.c, agent/snmp_vars.c,
+ agent/mibgroup/ucd-snmp/loadave.c:
+
+ - Build using CygWin32 (includes Niels B.'s snmp_vars.c patch).
+
+1999-04-05 14:22 mslifcak
+
+ * snmplib/system.c:
+
+ - Build with CygWin32
+
+1999-04-05 14:10 mslifcak
+
+ * apps/snmpnetstat/: Makefile.in, if.c, winstub.c
+, winstub.h:
+
+ - build snmpnetstat with CygWin32
+
+1999-04-05 11:06 mslifcak
+
+ * apps/snmp_parse_args.c, apps/snmpnetstat/main.c,
+ snmplib/snmp_api.c:
+
+ - (snmp_api.c, main.c, snmp_parse_args.c) Joe Marzot's fix to copy even an empty community name.
+
+1999-04-01 13:10 mslifcak
+
+ * snmplib/libsnmp.h:
+
+ - (libsnmp.h) Asymptotically closer to supporting CMU constants.
+
+1999-03-28 16:17 hardaker
+
+ * agent/mibgroup/target/: snmpTargetAddrEntry.c,
+ snmpTargetParamsEntry.c:
+
+ - (snmpTargetAddrEntry.c, snmpTargetParamsEntry.c):
+ - when using copy_word() don't skip spaces, since it does that.
+
+1999-03-28 16:11 hardaker
+
+ * agent/mibgroup/target/: snmpTargetAddrEntry.h,
+ snmpTargetParamsEntry.h:
+
+ - (snmpTargetAddrEntry.h, snmpTargetParamsEntry.h): relocate to
+ snmpModules.12, where they should be.
+
+1999-03-23 10:23 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ - (versiontag): regexp fix.
+
+1999-03-23 10:10 hardaker
+
+ * agent/mibgroup/mibdefs.h, agent/mibgroup/struct.h,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/extensible.h,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/proc.h, man/snmpd.conf.5.def,
+ mibs/UCD-SNMP-MIB.txt:
+
+ - (mibdefs.h, struct.h, extensible.c, extensible.h, proc.c, proc.h,
+ snmpd.conf.5.def, UCD-SNMP-MIB.txt):
+ - per-process/exec fix scripts created.
+
+1999-03-23 10:10 hardaker
+
+ * snmplib/read_config.c:
+
+ - (read_config.c): make copy_word() return the next token, not the
+ next space.
+
+1999-03-23 10:09 hardaker
+
+ * man/Makefile.in:
+
+ - (Makefile.in): add more targets.
+
+1999-03-19 09:23 hardaker
+
+ * apps/: snmpget.c, snmpwalk.c:
+
+ - (snmpget.c, snmpwalk.c): fixed initialization and usage of "failures".
+
+1999-03-18 08:37 mslifcak
+
+ * agent/mibgroup/mibII/ip.c:
+
+ - (mibII/ip.c) fix MIB_IPCOUNTER_SYMBOL usage
+
+1999-03-17 13:53 mslifcak
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ -(hr_swrun.c) - prevent SunOS 4.1 core (sunos4 still primitive)
+
+1999-03-16 11:33 mslifcak
+
+ * agent/: snmp_vars.h, mibgroup/mibincl.h,
+ mibgroup/util_funcs.h, mibgroup/dummy/dummy.c,
+ mibgroup/examples/wombat.c, mibgroup/host/hr_device.c,
+ mibgroup/host/hr_disk.c, mibgroup/host/hr_filesys.c,
+ mibgroup/host/hr_network.c, mibgroup/host/hr_partition.c
+, mibgroup/host/hr_print.c, mibgroup/host/hr_proc.c
+, mibgroup/host/hr_storage.c,
+ mibgroup/host/hr_swinst.c, mibgroup/host/hr_swrun.c,
+ mibgroup/host/hr_system.c, mibgroup/mibII/icmp.c,
+ mibgroup/mibII/interfaces.c, mibgroup/mibII/ip.c,
+ mibgroup/mibII/snmp_mib.c, mibgroup/mibII/sysORTable.c
+, mibgroup/mibII/system_mib.c, mibgroup/mibII/tcp.c
+, mibgroup/mibII/udp.c, mibgroup/ucd-snmp/registry.c
+:
+
+ - move MATCH_FAILED/MATCH_SUCCEEDED from util_funcs.h to mibincl.h
+
+1999-03-16 11:23 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ -(snmp_api.c) consistent error return.
+
+1999-03-16 10:34 hardaker
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ - (hr_swrun.c): fix file descriptor leak on freebsd.
+
+1999-03-16 08:15 hardaker
+
+ * agent/mibgroup/misc/dlmod.c:
+
+ - (dlmod.c): removed a bogus new-line.
+
+1999-03-15 16:24 hardaker
+
+ * agent/Makefile.in:
+
+ - (agent/Makefile.in): don't do a make install of dlmods
+
+1999-03-15 16:02 hardaker
+
+ * bug-report, sedscript.in, version.h, FAQ
+, README, FAQ, README:
+
+ - (version.h bug-report sedscript.in): version tag ( 3.6.1 )
+
+1999-03-15 16:02 hardaker
+
+ * README:
+
+ - (README): mark with version num.
+
+1999-03-15 16:00 hardaker
+
+ * ChangeLog:
+
+ - (ChangeLog): update for 3.6.1.
+
+1999-03-15 15:58 hardaker
+
+ * FAQ, NEWS:
+
+ - (FAQ, NEWS): updates to talk about the AGENT.txt file.
+
+1999-03-15 15:55 hardaker
+
+ * agent/: Makefile.in, mibgroup/Makefile.in:
+
+ - (Makefile.in): makefileindepend.
+
+1999-03-15 15:46 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (interfaces.c): fixes for linux 2.2 interface scanning.
+
+1999-03-15 15:31 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/mibII/interfaces.c:
+
+ - (configure, configure.in, interfaces.c, linux.h): detect
+ /proc/net/dev version at run time, not compile time.
+
+1999-03-15 15:20 hardaker
+
+ * agent/mibgroup/: host/hr_proc.c, host/hr_proc.h,
+ ucd-snmp/loadave.c, ucd-snmp/loadave.h:
+
+ - (hr_proc.c, hr_proc.h, loadave.c, loadave.h): fix try_loadave for solaris.
+
+1999-03-15 14:31 hardaker
+
+ * acconfig.h:
+
+ - (acconfig.h): added CMU_COMPATIBLE
+
+1999-03-15 14:30 hardaker
+
+ * snmplib/snmp.h:
+
+ - (snmp.h): remove unneeded commented out define.
+
+1999-03-15 09:42 mslifcak
+
+ * config.h.in, apps/snmpstatus.c, apps/snmptrapd.c
+, snmplib/libsnmp.h, snmplib/snmp.h,
+ snmplib/snmp_api.c, snmplib/snmp_client.c,
+ win32/config.h:
+
+ - second pass at CMU_COMPAT: Disable by default, leave snmp_parse alone.
+
+1999-03-15 08:49 hardaker
+
+ * snmplib/: Makefile.in, snmp_api.c:
+
+ - (Makefile.in, snmp_api.c):
+ - revert to snmp_parse.
+ - don't install libsnmp.h.
+
+1999-03-15 05:54 mslifcak
+
+ * snmplib/: Makefile.in, libsnmp.h, mib.c,
+ snmp.h, snmp_api.c:
+
+ - (Makefile.in libsnmp.h mib.c snmp.h snmp_api.c) update CMU_COMPATIBLE
+
+1999-03-12 15:33 hardaker
+
+ * agent/mibgroup/ipfwchains/: IPFWCHAINS-MIB.txt,
+ ipfwchains.h:
+
+ - (IPFWCHAINS-MIB.txt, ipfwchains.h): move to a sub-oid in the
+ experimental tree.
+
+1999-03-12 15:24 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/ipfwchains/IPFWCHAINS-MIB.txt,
+ agent/mibgroup/ipfwchains/README,
+ agent/mibgroup/ipfwchains/ipfwc_kernel_headers.h,
+ agent/mibgroup/ipfwchains/ipfwchains.c,
+ agent/mibgroup/ipfwchains/ipfwchains.h,
+ agent/mibgroup/ipfwchains/libipfwc.c,
+ agent/mibgroup/ipfwchains/libipfwc.h:
+
+ - (configure, configure.in, IPFWCHAINS-MIB.txt, README,
+ ipfwc_kernel_headers.h, ipfwchains.c, ipfwchains.h, libipfwc.c,
+ libipfwc.h): Patch from Didier Dhaenens:
+ - new modules: ipfwchains.
+
+1999-03-12 15:23 hardaker
+
+ * INSTALL:
+
+ - (INSTALL): don't print module list here... tell them to look at
+ configure --help.
+
+1999-03-12 14:54 mslifcak
+
+ * agent/mibgroup/: target.h, host/hr_system.h,
+ target/snmpTargetAddrEntry.c, target/snmpTargetAddrEntry.h
+, target/snmpTargetParamsEntry.c,
+ target/snmpTargetParamsEntry.h:
+
+ - restore config_require logic; fix sprintf calls to compile under SunOS 4.1.x.
+
+1999-03-12 14:36 hardaker
+
+ * agent/mibgroup/util_funcs.h:
+
+ - (util_funcs.h): MATCH_FAILED -> -1, since some use it.
+
+1999-03-12 14:35 mslifcak
+
+ * agent/mibgroup/: target.h, target/snmpTargetAddrEntry.h
+, target/snmpTargetParamsEntry.h:
+
+ - (target.h, target/*.h) require util_funcs once.
+
+1999-03-12 14:34 mslifcak
+
+ * agent/mibgroup/host/: hr_swrun.c, hr_system.h:
+
+ - (hr_system.h) - don't require hr_util; done in mibgroup/host.h
+ - (hr_swrun.c) - solaris2: make sure kvm_open is called before kd is used.
+ - (hr_swrun.c) - add lame sunos4 equivalent in HRSWRUNPERF_CPU.
+
+1999-03-12 14:17 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ - (smux.c): protect strcpy() against a null password specified on the
+ config line.
+
+1999-03-12 14:17 hardaker
+
+ * NEWS:
+
+ - (NEWS): update.
+
+1999-03-12 12:20 hardaker
+
+ * local/mib2c:
+
+ - (mib2c): fix asn_parse functions to pass a pointer to the size variable.
+
+1999-03-12 11:31 mslifcak
+
+ * agent/dlmods/dlmod_mib.c:
+
+ - (dlmod_mib.c): explicit test for MATCH_FAILED
+
+1999-03-12 09:14 hardaker
+
+ * agent/mibgroup/: mibincl.h, dummy/dummy.c,
+ examples/wombat.c, host/hr_device.c, host/hr_disk.c
+, host/hr_filesys.c, host/hr_network.c,
+ host/hr_partition.c, host/hr_print.c, host/hr_proc.c
+, host/hr_storage.c, host/hr_swinst.c,
+ host/hr_swrun.c, host/hr_system.c, mibII/icmp.c
+, mibII/interfaces.c, mibII/ip.c,
+ mibII/snmp_mib.c, mibII/sysORTable.c,
+ mibII/system_mib.c, mibII/tcp.c, mibII/udp.c,
+ misc/dlmod.c, ucd-snmp/registry.c:
+
+ - (mibincl.h, dummy.c, wombat.c, hr_device.c, hr_disk.c, hr_filesys.c,
+ hr_network.c, hr_partition.c, hr_print.c, hr_proc.c, hr_storage.c,
+ hr_swinst.c, hr_swrun.c, hr_system.c, icmp.c, interfaces.c, ip.c,
+ snmp_mib.c, sysORTable.c, system_mib.c, tcp.c, udp.c, dlmod.c,
+ registry.c): fixed MATCH_FAILED/SUCCEEDED defines -> util_funcs.h.
+
+1999-03-12 07:08 mslifcak
+
+ * agent/dlmods/dlmod_mib.c:
+
+ - (dlmod_mib.c): Use MATCH_FAIL/SUCCEEDED in util_funcs.h
+
+1999-03-11 16:23 hardaker
+
+ * snmplib/: snmp_api.h, snmp_debug.h:
+
+ - (snmp_api.h, snmp_debug.h): Patch from Erik Jacobsen:
+ - fixed prototypes for DEBUGP() and DEBUGPOID().
+
+1999-03-11 16:22 hardaker
+
+ * agent/mibgroup/: util_funcs.c, util_funcs.h:
+
+ - (util_funcs.c, util_funcs.h): move MATCH_SUCCEEDED defs to .h.
+
+1999-03-11 16:10 hardaker
+
+ * local/mib2c:
+
+ - (mib2c): fixed a couple of bugs and ansi'ified things.
+
+1999-03-11 16:10 hardaker
+
+ * AGENT:
+
+ - (AGENT): removed AGENT
+
+1999-03-11 15:48 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory_solaris2.c:
+
+ - (memory_solaris2.c): changed some comments to /* */ instead of //.
+
+1999-03-11 15:48 hardaker
+
+ * README:
+
+ - (README): Added Mike Baer.
+
+1999-03-10 15:14 hardaker
+
+ * AGENT.txt:
+
+ - (AGENT.txt): NAME -> OID.
+
+1999-03-10 15:07 hardaker
+
+ * EXAMPLE.conf.def:
+
+ - (EXAMPLE.conf.def): group lines were backwards.
+
+1999-03-10 15:07 hardaker
+
+ * AGENT.txt:
+
+ - (AGENT.txt): moved from AGENT to avoid non-case-sensitive w32 conflicts.
+
+1999-03-08 14:28 mslifcak
+
+ * apps/snmpnetstat/: if.c, route.c:
+
+ - (snmpnetstat:if.c, route.c) limit interface name sizes to fit fixed length buffers.
+
+1999-03-08 09:58 mslifcak
+
+ * snmplib/parse.c:
+
+ - (snmplib/parse.c) Complete Dave Shields' patch for continue after error.
+
+1999-03-08 05:07 mslifcak
+
+ * AGENT:
+
+ - (AGENT) MAX_NAME_LEN --> MAX_OID_LEN in example
+
+1999-03-08 05:01 mslifcak
+
+ * win32/config.h:
+
+ -(win32/config.h) remove unused SYS_TIME_NAME,GLOBALSECURITY. add new constants.
+
+1999-03-08 04:14 mslifcak
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c) use request data with request callback
+
+1999-03-08 04:02 mslifcak
+
+ * snmplib/parse.c:
+
+ (parse.c) - fix subid init; remove useless '-Pl' option.
+
+1999-03-05 17:36 hardaker
+
+ * FAQ:
+
+ - (FAQ): version update.
+
+1999-03-05 17:35 hardaker
+
+ * FAQ, bug-report, sedscript.in, version.h
+:
+
+ - (version.h bug-report sedscript.in): version tag ( 3.6 )
+
+1999-03-05 17:34 hardaker
+
+ * ChangeLog:
+
+ - (ChangeLog): final update.
+
+1999-03-05 17:25 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ snmplib/Makefile.in:
+
+ - (Makefile.in): make depend.
+
+1999-03-05 17:25 hardaker
+
+ * configure:
+
+ - (configure): autoconf update.
+
+1999-03-05 17:19 hardaker
+
+ * FAQ, NEWS:
+
+ - (FAQ, NEWS): final updates.
+
+1999-03-05 17:12 hardaker
+
+ * AGENT:
+
+ - (AGENT): Dave Shield's new document.
+
+1999-03-05 17:11 hardaker
+
+ * agent/mibgroup/mibII/system.h:
+
+ - (mibII/system.h): removed
+
+1999-03-05 17:08 hardaker
+
+ * FAQ:
+
+ - (FAQ): reference AGENT document.
+
+1999-03-05 16:48 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory_solaris2.c:
+
+ - (memory_solaris2.c): do error reporting for solaris memory support.
+
+1999-03-05 16:10 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat.h:
+
+ - (vmstat.h): declair init_vmstat().
+
+1999-03-05 16:02 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): updated --help's module list.
+
+1999-03-05 15:57 hardaker
+
+ * agent/mibgroup/: kernel_sunos5.c, examples/wombat.c
+, host/hr_network.c, mibII/snmp_mib.h,
+ mibII/system_mib.h, ucd-snmp/disk.h,
+ ucd-snmp/errormib.h, ucd-snmp/extensible.h,
+ ucd-snmp/file.h, ucd-snmp/memory_solaris2.h,
+ ucd-snmp/pass.h, ucd-snmp/proc.h, ucd-snmp/registry.h
+, ucd-snmp/versioninfo.h:
+
+ - (kernel_sunos5.c, wombat.c, hr_network.c, snmp_mib.h, system_mib.h,
+ disk.h, errormib.h, extensible.h, file.h, memory_solaris2.h, pass.h,
+ proc.h, registry.h, versioninfo.h):
+ - -Wall fixes, mostly init_() routines declaired in the appropriate .h files.
+
+1999-03-05 15:38 hardaker
+
+ * local/tkmib:
+
+ - (tkmib): update.
+
+1999-03-05 15:31 hardaker
+
+ * snmplib/snmp_impl.h:
+
+ - (snmp_impl.h): create UNDO
+
+1999-03-05 15:12 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - remove persistent storage info, since its not used this release.
+
+1999-03-05 11:02 mslifcak
+
+ * agent/mibgroup/mibII/tcp.c:
+
+
+ (tcp.c) - break out of infinite loop when klookup fails.
+
+1999-03-05 10:42 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): Patch from Dave Shield:
+ - switch COMMIT and ACTION phases.
+
+1999-03-05 10:21 hardaker
+
+ * FAQ:
+
+ - (FAQ): update from Dave: rearranging and cleaning.
+
+1999-03-05 10:11 hardaker
+
+ * local/: mib2c, mib2c.conf:
+
+ - (mib2c, mib2c.conf): Patch from Dave Shield:
+ - the use of 'header_simple_table' rather than 'checkmib'
+ - explicit comparison with MATCH_FAILED
+ - don't set defaults for 'write_method' and 'var_len'
+ (since both 'header_generic' and 'checkmib' do this anyway)
+ - Use defined constants for variable initialisation in the
+ write routine (similarly in the mib2c.conf patch)
+ [This is one of my hobby-horses with our students, so I don't
+ see why "professional" programmers should be exempt!]
+
+ - Make proper use of the three-phase nature of SETs
+
+1999-03-05 09:40 mslifcak
+
+ * snmplib/system.c:
+
+
+ Fix Win32 version of gettimeofday: tv_usec was millisecs , return now = 0
+
+1999-03-04 18:11 mslifcak
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+
+ (snmp_api.c) - expose snmp_free; snmp_pdu_add_variable returns ptr to var for
+ future improved error recovery.
+
+1999-03-04 17:50 mslifcak
+
+ * agent/history.c, agent/mibgroup/dummy/dummy.c,
+ agent/mibgroup/dummy/dummy.h,
+ agent/mibgroup/examples/example.h,
+ agent/mibgroup/examples/wombat.h,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c, win32/config.h
+:
+
+
+ Replace uses of bzero with memset, bcopy with memcpy.
+ Fix prototypes.
+
+1999-03-04 17:00 mslifcak
+
+ * agent/mibgroup/mibII/sysORTable.c:
+
+
+ (sysORTable.c) - remove static u_long long_return, for consistency.
+
+1999-03-04 16:49 hardaker
+
+ * agent/mibgroup/util_funcs.c, agent/mibgroup/dummy/dummy.c
+, agent/mibgroup/examples/example.c,
+ agent/mibgroup/examples/wombat.c, agent/mibgroup/mibII/tcp.c
+, agent/mibgroup/ucd-snmp/hpux.c,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/v2party/alarm.c, snmplib/snmp_api.c:
+
+ - (util_funcs.c, dummy.c, example.c, wombat.c, tcp.c, hpux.c,
+ memory.c, alarm.c, snmp_api.c):
+ - misc fixes, -Wall mostly.
+
+1999-03-04 16:32 hardaker
+
+ * local/mib2c:
+
+ - (mib2c): Update from Dave Shield.
+
+1999-03-04 16:19 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat_freebsd2.c:
+
+ - (vmstat_freebsd2.c): Patch from Nick Amato:
+ - typo fixed.
+
+1999-03-04 16:14 hardaker
+
+ * agent/mibgroup/README.smux:
+
+ - (README.smux): Patch from Nick Amato:
+ - update.
+
+1999-03-04 15:44 hardaker
+
+ * agent/mibgroup/: util_funcs.c, util_funcs.h,
+ examples/example.c, mibII/sysORTable.c, misc/ipfwacc.c
+, ucd-snmp/disk.c, ucd-snmp/extensible.c,
+ ucd-snmp/file.c, ucd-snmp/loadave.c, ucd-snmp/memory.c
+, ucd-snmp/proc.c, ucd-snmp/vmstat.c,
+ ucd-snmp/vmstat_freebsd2.c:
+
+ - (util_funcs.c, util_funcs.h, example.c, sysORTable.c, ipfwacc.c,
+ disk.c, extensible.c, file.c, loadave.c, memory.c, proc.c, vmstat.c,
+ vmstat_freebsd2.c):
+ - create and use header_simple_table to replace checkmib().
+
+1999-03-04 15:29 mslifcak
+
+ * agent/mibgroup/host/hr_disk.c:
+
+
+ (hr_disk.c) - conditionally use defined DKC disk types
+
+1999-03-04 15:25 mslifcak
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+
+ (disk.c) - explicit braces to avoid ambiguous `else'
+
+1999-03-04 15:12 mslifcak
+
+ * agent/mibgroup/: host/hr_proc.c, ucd-snmp/loadave.c
+:
+
+
+
+ (hr_proc.c, loadave.c) - fixed core on getloadavg in a different way
+
+1999-03-04 13:18 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in): removed void check.
+
+1999-03-04 09:46 hardaker
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ - (hr_swinst.c): Patch from mslifcak@iss.net:
+ - When the agent is compiled with HAVE_LIBRPM set, yet no database
+ is found, agent will core...
+
+1999-03-04 09:38 hardaker
+
+ * remove-files, local/ece-snmpd.conf,
+ local/fixproc.conf:
+
+ - (remove-files, ece-snmpd.conf, fixproc.conf):
+ - removed ece specific config files from the repository.
+ - don't remove local/*.conf in the first place anymore.
+
+1999-03-04 09:33 hardaker
+
+ * agent/mibgroup/ucd-snmp/loadave.c:
+
+ - (loadave.c): Patch from Chris Hughes:
+ - fix load average on solaris.
+
+1999-03-04 09:24 mslifcak
+
+ * Makefile.in:
+
+
+
+ (Makefile.in) - find mibdefs.h when not building in the source tree
+
+1999-03-04 09:20 mslifcak
+
+ * agent/snmpd.c, agent/mibgroup/target/snmpTargetAddrEntry.c
+, agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ apps/snmptrapd_handlers.c, snmplib/snmp_client.c:
+
+
+
+ (agent/snmpd.c, snmplib/snmp_client.c): remove duplicate includes
+
+ (agent/mibgroup/target/snmpTargetAddrEntry.c, agent/mibgroup/target/snmpTargetParamsEntry.c, agent/mibgroup/ucd-snmp/memory_solaris2.c, apps/snmptrapd_handlers.c): change "*word" to "*token" to help some compiler
+
+1999-03-04 09:07 hardaker
+
+ * configure, configure.in:
+
+ - (configure.in, configure): fix void test for ansi compilers.
+
+1999-03-04 08:36 hardaker
+
+ * agent/mibgroup/README.smux:
+
+ - (README.smux): add Nick.
+
+1999-03-04 08:36 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ - (versiontag): repository move.
+
+1999-03-04 04:08 mslifcak
+
+ * apps/snmpnetstat/if.c:
+
+
+ (snmpnetstat/if.c) - add void to empty formal parameter list
+
+1999-03-03 18:02 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre10 )
+
+1999-03-03 18:02 hardaker
+
+ * NEWS:
+
+ - (NEWS): mention SMUX.
+
+1999-03-03 18:00 hardaker
+
+ * NEWS:
+
+ - (NEWS): mention name change.
+
+1999-03-03 17:51 hardaker
+
+ * ChangeLog, FAQ, NEWS, PORTING, README
+, TODO, bug-report, agent/snmpd.c,
+ local/README.mib2c:
+
+ - (ChangeLog, FAQ, NEWS, PORTING, README, TODO, bug-report, snmpd.c,
+ README.mib2c): ece.ucdavis.edu -> ucd-snmp.ucdavis.edu.
+
+1999-03-03 11:40 hardaker
+
+ * agent/mibgroup/ucd-snmp/proc.c:
+
+ - (proc.c, solaris.h): Patch from Chris Hughes:
+ - Use /proc on solaris.
+
+1999-03-03 10:22 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory_solaris2.c:
+
+ - (memory_solaris2.c): ansi'ify the config function.
+
+1999-03-03 08:28 hardaker
+
+ * configure:
+
+ - (configure): ran autoconf...
+
+1999-03-03 08:25 hardaker
+
+ * README:
+
+ - (README): Added Nick.
+
+1999-03-02 15:21 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ - (smux.c): Patch from Michael Slifcak:
+ - Linux compiles die at SO_RCVTIMEO.
+ - -Wall type fixes.
+
+1999-03-02 15:18 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def): typo.
+
+1999-03-02 15:18 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory_solaris2.c:
+
+ - (memory_solaris2.c): typecast function with (void).
+
+1999-03-02 15:18 hardaker
+
+ * agent/mibgroup/smux.h:
+
+ - (smux.h): top level smux fake module header.
+
+1999-03-02 15:17 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, snmplib/snmp_debug.c,
+ snmplib/snmp_debug.h:
+
+ - (acconfig.h, config.h.in, configure, configure.in, snmp_debug.c,
+ snmp_debug.h):
+ - new flag: --disable-debugging to completely turn off its support.
+ - renaming of DODEBUG to SNMP_ALWAYS_DEBUG.
+ - clean up of the configure script options listed, including putting
+ a list of available modules for compilation into the agent.
+
+1999-03-02 13:23 hardaker
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ - (var_route.c): don't return a pointer to a pointer.
+
+1999-03-02 10:42 hardaker
+
+ * agent/mibgroup/: mibII/system_mib.c, mibII/vacm_vars.c
+, misc/ipfwacc.c:
+
+ - (system_mib.c, vacm_vars.c, ipfwacc.c): Patch from Michael Slifcak:
+ - Suggested fixes to eliminate more shadowed global references.
+ - fixups for prototype [(void) replacing ()].
+
+1999-03-02 08:47 hardaker
+
+ * snmplib/asn1.h:
+
+ - (asn1.h): Patch from Dave Shield:
+ - Don't define MAX_NAME_LEN if defined somewhere else.
+
+1999-03-01 17:43 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ - (smux.c):
+ - allow null length passwords.
+ - clean up debugging output.
+
+1999-03-01 16:22 hardaker
+
+ * snmplib/asn1.h:
+
+ - (asn1.h): put back in MAX_NAME_LEN temporarily.
+
+1999-03-01 16:20 hardaker
+
+ * man/: des.1, des.3:
+
+ - (des.1, des.3): removed unused manual pages.
+
+1999-03-01 16:19 hardaker
+
+ * man/: snmp.conf.5.def, snmp_config.5.def, snmpd.1.def
+, snmptrapd.conf.5.def:
+
+ - (snmp.conf.5.def, snmp_config.5.def, snmpd.1.def, snmptrapd.conf.5.def):
+ - remove reference to ECE dept.
+
+1999-03-01 16:19 hardaker
+
+ * man/.cvsignore:
+
+ - (.cvsignore): ignore targets.
+
+1999-03-01 16:17 hardaker
+
+ * man/: mib_api.3, read_config.3.def, snmp.conf.5.def
+, snmp_config.5.def, snmpd.1.def,
+ snmpd.conf.5.def, snmptest.1, snmptrapd.conf.5.def
+, variables.5:
+
+ - (mib_api.3, read_config.3.def, snmp.conf.5.def, snmp_config.5.def,
+ snmpd.1.def, snmpd.conf.5.def, snmptest.1, snmptrapd.conf.5.def,
+ variables.5): Michael Slifcak:
+ - spell check.
+
+1999-03-01 16:11 hardaker
+
+ * snmplib/Makefile.in:
+
+ - (Makefile.in): Patch from David F. Newman:
+ - removed a trailing backslash that wasn't needed.
+
+1999-03-01 16:10 hardaker
+
+ * agent/mibgroup/v2party/alarm.c:
+
+ - (alarm.c): Patch from Michael Slifcak:
+ - Cast to pointer to int may overflow the return buffer.
+
+1999-03-01 14:20 hardaker
+
+ * agent/mibgroup/smux/: smux.c, smux.h:
+
+ - (smux.c, smux.h): 3.6ified.
+
+1999-03-01 14:04 hardaker
+
+ * agent/mibgroup/smux/: smux.c, smux.h:
+
+ - (smux.c, smux.h): Patch from Nick Amato:
+ - completely re-written smux modules.
+
+1999-03-01 13:59 hardaker
+
+ * agent/: snmp_vars.c, snmp_vars.h:
+
+ - (snmp_vars.c, snmp_vars.h): make compare_tree() global.
+
+1999-03-01 13:03 hardaker
+
+ * snmplib/: context_parse.c, mib.c:
+
+ - (context_parse.c, mib.c): Patch from Michael Slifcak:
+ - typecasting for certain functions to (char *).
+
+1999-03-01 12:30 hardaker
+
+ * snmplib/asn1.h:
+
+ - (asn1.h): Patch from Mike Slifcak:
+ - added MIN_OID_LEN for instructional use mostly (its unused).
+
+1999-03-01 12:29 hardaker
+
+ * snmplib/snmp_client.c:
+
+ - (snmp_client.c): Patch from Mike Slifcak:
+ - variable renaming.
+
+1999-03-01 12:29 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): put a proper (void) into the function prototype.
+
+1999-03-01 12:28 hardaker
+
+ * snmplib/read_config.c:
+
+ - (read_config.c): sprintf arg mismatch.
+
+1999-03-01 12:28 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from Mike Slifcak:
+ - remove duplicate case entries.
+
+1999-03-01 12:27 hardaker
+
+ * apps/snmpnetstat/if.c:
+
+ - (if.c): Patch from Mike Slifcak:
+ - free the interface table.
+
+1999-03-01 12:27 hardaker
+
+ * agent/mibgroup/ucd-snmp/errormib.c:
+
+ - (errormib.c): Patch from Mike Slifcak:
+ - remove errno variable.
+
+1999-03-01 12:27 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): Patch from Mike Slifcak:
+ - renaming of variables away from system function names (index -> lindex).
+
+1999-03-01 12:26 hardaker
+
+ * agent/dlmods/dlmod_mib.c:
+
+ - (dlmod_mib.c): Patch from Mike Slifcak:
+ - initialize variable to 0.
+
+1999-03-01 10:48 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): typo: fileMax -> fileErrorFlag name change.
+
+1999-02-26 16:33 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre9 )
+
+1999-02-26 16:11 hardaker
+
+ * man/: Makefile.in, read_config.3.def,
+ snmp.conf.5.def, snmp_config.5.def, snmpd.conf.5.def
+, snmptrapd.8, snmptrapd.conf.5.def:
+
+ - (Makefile.in, read_config.3.def, snmp.conf.5.def, snmp_config.5.def,
+ snmpd.conf.5.def, snmptrapd.8, snmptrapd.conf.5.def):
+ - new documentation on configuration capabilities.
+
+1999-02-26 16:10 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): usage update, and -H support.
+
+1999-02-26 16:10 hardaker
+
+ * NEWS:
+
+ - (NEWS): update for 3.6 release.
+
+1999-02-26 16:06 hardaker
+
+ * EXAMPLE.conf.def:
+
+ - (EXAMPLE.conf.def): update and made better examples.
+
+1999-02-26 15:42 hardaker
+
+ * snmplib/: mib.c, parse.c, parse.h:
+
+ - (mib.c, parse.c, parse.h): Patch from Michael Slifcak:
+ - Unlinked OID ... ccitt 0 fix courtesy of Dave Shield.
+ - Continue after reserved word error fix courtesy of Dave Shield.
+ - Modification to #2 courtesy of Niels Baggesen.
+ - Modification to print sub-identifier == 0
+ - variable renaming.
+ - Instead of re-ordering all singly-linked lists, use a new member
+ that flags when a report has begun.
+
+1999-02-26 15:02 hardaker
+
+ * agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/loadave.h, mibs/UCD-SNMP-MIB.txt
+:
+
+ - (loadave.c, loadave.h, UCD-SNMP-MIB.txt):
+ - implement load average reporting as a integer and as a float.
+
+1999-02-25 10:03 hardaker
+
+ * README, agent/mibgroup/ucd_snmp.h,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c,
+ agent/mibgroup/ucd-snmp/memory_solaris2.h:
+
+ - (README, ucd_snmp.h, memory_solaris2.c, memory_solaris2.h): Patch
+ from David F. Newman:
+ - memory support for solaris2.
+
+1999-02-24 17:10 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in, linux.h):
+ - Check for and handle 2.2 /proc/net/dev changes.
+
+1999-02-24 14:43 hardaker
+
+ * mibs/IANAifType-MIB.txt:
+
+ - (IANAifType-MIB.txt): update.
+
+1999-02-22 09:44 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from Michael Slifcak:
+ - Don't print "can't find module XXX" messages without warnings turned on.
+
+1999-02-22 09:11 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from mslifcak@iss.net:
+ - The command line option to select "allow underscore in MIB
+ symbols" is missing.
+
+1999-02-17 16:23 dreeder
+
+ * local/snmp-ucd.sh:
+
+ file snmp-ucd.sh was initially added on branch V3-b3.
+
+1999-02-17 16:14 hardaker
+
+ * apps/snmpnetstat/: winstub.c, winstub.h:
+
+ - (winstub.c, winstub.h): patch from Michael Slifcak:
+ - generic windows API replacements.
+
+1999-02-17 16:13 hardaker
+
+ * agent/snmpd.c, agent/mibgroup/dummy/dummy.c,
+ agent/mibgroup/examples/wombat.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/vacm_vars.c, agent/mibgroup/misc/dlmod.c
+, agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proc.c, snmplib/mib.c,
+ snmplib/read_config.c:
+
+ - (snmpd.c, dummy.c, wombat.c, system_mib.c, vacm_vars.c, dlmod.c,
+ disk.c, extensible.c, file.c, loadave.c, memory.c,
+ memory_freebsd2.c, pass.c, pass_persist.c, proc.c, mib.c,
+ read_config.c): word -> token ("word" is reserved in some compilers.
+
+1999-02-17 15:28 hardaker
+
+ * win32/: config.h, win32.dsw, libsnmp/libsnmp.dsp
+, libsnmp_dll/libsnmp.def, libsnmp_dll/libsnmp_dll.dsp
+, snmpnetstat/snmpnetstat.dsp, snmptable/snmptable.dsp
+:
+
+ - (config.h, win32.dsw, libsnmp.dsp, libsnmp.def, libsnmp_dll.dsp,
+ snmpnetstat.dsp, snmptable.dsp): Patch from Michael Slifcak:
+ - win32 updates.
+
+1999-02-17 15:23 hardaker
+
+ * snmplib/: parse.c, party_parse.c, snmp_auth.c
+:
+
+ - (parse.c, party_parse.c, snmp_auth.c): Patch from Michael Slifcak:
+ - variable name conflict fixes.
+
+1999-02-17 15:22 hardaker
+
+ * snmplib/snmp_debug.c:
+
+ - (snmp_debug.c): Patch from Michael Slifcak:
+ - debug_args was declared twice.
+ - header fixes for win32.
+
+1999-02-17 15:21 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): Patch from Michael Slifcak:
+ - fix fprint_variable to not recurse.
+
+1999-02-17 15:19 hardaker
+
+ * snmplib/context_parse.c:
+
+ - (context_parse.c): Patch from Michael Slifcak:
+ - don't use a variable called 'time'. Tsk tsk.
+
+1999-02-17 15:19 hardaker
+
+ * snmplib/asn1.c:
+
+ - (asn1.c): Patch from Michael Slifcak:
+ - comment reformatting.
+
+1999-02-17 15:18 hardaker
+
+ * mibs/IANAifType-MIB.txt:
+
+ - (IANAifType-MIB.txt): Patch from Michael Slifcak:
+ - use a '-' instead of a '.' for IEEE802-11.
+
+1999-02-17 15:17 hardaker
+
+ * man/Makefile.in:
+
+ - (Makefile.in): separate target for generated manual pages.
+
+1999-02-17 15:16 hardaker
+
+ * local/: mib2c, mib2c.conf:
+
+ - (mib2c, mib2c.conf): update again for better still output.
+
+1999-02-17 15:15 hardaker
+
+ * apps/snmpnetstat/: if.c, inet.c, main.c,
+ netstat.h, route.c:
+
+ - (if.c, inet.c, main.c, netstat.h, route.c): Patch from Michael Slifcak:
+ - make snmpnetstat win32 compatible.
+
+1999-02-17 15:13 hardaker
+
+ * apps/snmptranslate.c:
+
+ - (snmptranslate.c): Patch from Michael Slifcak:
+ - usage fix.
+
+1999-02-17 15:13 hardaker
+
+ * agent/snmpd.h:
+
+ - (snmpd.h): Patch from Michael Slifcak:
+ - remove reverse_bytes() prototype.
+
+1999-02-17 15:10 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (interfaces.c): Patch from Michael L. Hitch:
+ - fix if_name variable by making it static.
+
+1999-02-16 17:05 hardaker
+
+ * local/: mib2c, mib2c.conf:
+
+ - (mib2c, mib2c.conf): updated mib2c program... still in progress...
+
+1999-02-11 16:48 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ - (versiontag): update.
+
+1999-02-11 16:48 hardaker
+
+ * version.h, bug-report, sedscript.in:
+
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre8 )
+
+1999-02-11 16:46 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ - (version.h bug-report sedscript.in): version tag ( Ext-3-6-pre8 )
+
+1999-02-11 16:34 hardaker
+
+ * agent/mibgroup/mibII/tcp.c:
+
+ - (tcp.c): var_tcpEntry was checking against the incoming oid with the
+ wrong length and could succeed at times when it shouldn't have.
+
+1999-02-11 16:23 hardaker
+
+ * snmplib/: acl_parse.c, context_parse.c,
+ party_parse.c, read_config.c, snmp_api.c:
+
+ - (acl_parse.c, context_parse.c, party_parse.c, read_config.c, snmp_api.c):
+ - More buf size standardizations that Michael missed.
+ - A few MAX_NAME_LEN -> MAX_OID_LEN conversions that Michael missed.
+
+1999-02-11 16:22 hardaker
+
+ * agent/mibgroup/host_res.h:
+
+ - (host_res.h): include snmp_vars.h ahead of var_struct.h.
+
+1999-02-11 16:09 hardaker
+
+ * agent/snmp_agent.c, agent/snmp_vars.c,
+ agent/dlmods/dlmod_mib.c, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/dummy/dummy.c,
+ agent/mibgroup/examples/wombat.c,
+ agent/mibgroup/host/hr_device.c,
+ agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_print.c, agent/mibgroup/host/hr_proc.c
+, agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c, agent/mibgroup/mibII/tcp.c
+, agent/mibgroup/mibII/udp.c, agent/mibgroup/smux/smux.c
+, agent/mibgroup/smux/snmp_bgp.c,
+ agent/mibgroup/smux/snmp_ospf.c,
+ agent/mibgroup/smux/snmp_rip2.c,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/v2party/acl_vars.c,
+ agent/mibgroup/v2party/alarm.c,
+ agent/mibgroup/v2party/context_vars.c,
+ agent/mibgroup/v2party/event.c,
+ agent/mibgroup/v2party/event.h,
+ agent/mibgroup/v2party/party_vars.c,
+ agent/mibgroup/v2party/view_vars.c, apps/snmp_parse_args.c
+, apps/snmpbulkwalk.c, apps/snmpdelta.c,
+ apps/snmpget.c, apps/snmpgetnext.c, apps/snmpset.c
+, apps/snmpstatus.c, apps/snmptable.c,
+ apps/snmptest.c, apps/snmptranslate.c,
+ apps/snmptrap.c, apps/snmptrapd.c, apps/snmpwalk.c
+, apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c
+, apps/snmpnetstat/main.c, snmplib/mib.c,
+ snmplib/snmp_api.c, snmplib/snmp_debug.c,
+ snmplib/snmp_impl.h:
+
+ - (*): Patch from Michael Slifcak:
+ - convert MAX_NAME_LEN -> MAX_OID_LEN.
+ - convert temporary character storage buffers to SPRINT_MAX_LEN.
+ - make the libraries print_ functions use the fprint_ function
+ already defined and pass it stdout.
+
+1999-02-09 14:35 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): increase buffer size for oid printing.
+
+1999-02-09 14:35 hardaker
+
+ * snmplib/snmp_debug.c:
+
+ - (snmp_debug.c): define a symbol for OID printing's storage buffer size.
+
+1999-02-09 14:10 hardaker
+
+ * local/mib2c:
+
+ - (mib2c): typo.
+
+1999-02-09 14:10 hardaker
+
+ * Makefile.in:
+
+ - (Makefile.in): make FAQ.html.
+
+1999-02-08 23:24 hardaker
+
+ * agent/dlmods/: dlmod_mib.c, dlmod_mib.h, example.c
+, example.h:
+
+ - (agent/dlmods): Patch from Michael Slifcak:
+ - misc fixes.
+
+1999-02-08 23:23 hardaker
+
+ * agent/mibgroup/: kernel_sunos5.c, mibincl.h:
+
+ - (kernel_sunos5.c, mibincl.h) Patch from Michael Slifcak:
+ - include updates.
+
+1999-02-08 23:20 hardaker
+
+ * agent/: mibgroup/util_funcs.c, mibgroup/util_funcs.h
+, snmp2p.c, snmp_agent.c, snmp_vars.c,
+ snmp_vars.h, snmpd.h, var_struct.h:
+
+ - (agent/*): Patch from Michael Slifcak:
+ - typedef all of the var_xxx and write method functions.
+
+1999-02-08 23:16 hardaker
+
+ * agent/mibgroup/: dummy/dummy.c, examples/example.c,
+ examples/example.h, examples/wombat.c, host/hr_device.c
+, host/hr_device.h, host/hr_disk.c, host/hr_disk.h
+, host/hr_filesys.c, host/hr_filesys.h,
+ host/hr_network.c, host/hr_network.h,
+ host/hr_partition.c, host/hr_partition.h,
+ host/hr_print.c, host/hr_print.h, host/hr_proc.c,
+ host/hr_proc.h, host/hr_storage.c, host/hr_storage.h
+, host/hr_swinst.c, host/hr_swinst.h,
+ host/hr_swrun.c, host/hr_swrun.h, host/hr_system.c
+, host/hr_system.h, mibII/at.c, mibII/at.h,
+ mibII/icmp.c, mibII/icmp.h, mibII/interfaces.c,
+ mibII/interfaces.h, mibII/ip.c, mibII/ip.h,
+ mibII/route_write.h, mibII/snmp_mib.c, mibII/snmp_mib.h
+, mibII/sysORTable.c, mibII/sysORTable.h,
+ mibII/system.h, mibII/system_mib.c, mibII/system_mib.h
+, mibII/tcp.c, mibII/tcp.h, mibII/udp.c,
+ mibII/udp.h, mibII/vacm_vars.c, mibII/vacm_vars.h
+, mibII/var_route.c, mibII/var_route.h,
+ misc/ipfwacc.c, misc/ipfwacc.h, smux/snmp_bgp.c,
+ smux/snmp_bgp.h, smux/snmp_ospf.c, smux/snmp_ospf.h
+, smux/snmp_rip2.c, smux/snmp_rip2.h,
+ ucd-snmp/disk.c, ucd-snmp/disk.h, ucd-snmp/errormib.c
+, ucd-snmp/errormib.h, ucd-snmp/extensible.c,
+ ucd-snmp/extensible.h, ucd-snmp/file.c, ucd-snmp/file.h
+, ucd-snmp/hpux.c, ucd-snmp/hpux.h,
+ ucd-snmp/loadave.c, ucd-snmp/loadave.h,
+ ucd-snmp/memory.c, ucd-snmp/memory.h,
+ ucd-snmp/memory_freebsd2.c, ucd-snmp/memory_freebsd2.h,
+ ucd-snmp/pass.c, ucd-snmp/pass.h,
+ ucd-snmp/pass_persist.c, ucd-snmp/pass_persist.h,
+ ucd-snmp/proc.c, ucd-snmp/proc.h, ucd-snmp/registry.c
+, ucd-snmp/registry.h, ucd-snmp/versioninfo.c,
+ ucd-snmp/versioninfo.h, ucd-snmp/vmstat.c,
+ ucd-snmp/vmstat.h, ucd-snmp/vmstat_freebsd2.c,
+ ucd-snmp/vmstat_freebsd2.h, v2party/acl_vars.c,
+ v2party/acl_vars.h, v2party/alarm.c, v2party/alarm.h
+, v2party/context_vars.c, v2party/context_vars.h,
+ v2party/event.c, v2party/event.h, v2party/party_vars.c
+, v2party/party_vars.h, v2party/view_vars.c,
+ v2party/view_vars.h:
+
+ - (agent/*): Patch from Michael Slifcak:
+ - typedef all of the var_xxx and write method functions.
+
+1999-02-08 15:21 hardaker
+
+ * snmplib/snmp_debug.c:
+
+ - (snmp_debug.c): sys/types.h
+
+1999-02-08 15:20 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmp_api.c, snmp_api.h): Patch from Michael Slifcak:
+ - make snmp_oid_compare use const's.
+
+1999-02-08 15:19 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from Michael Slifcak:
+ - use size_t instead of "unsigned" for xmalloc, etc.
+
+1999-02-08 15:18 hardaker
+
+ * apps/snmpnetstat/inet.c:
+
+ - (inet.c): proper bracket indentation.
+
+1999-02-08 15:17 hardaker
+
+ * apps/snmpnetstat/route.c:
+
+ - (route.c): Patch from Michael Slifcak:
+ - variable renaming index -> IfIndex.
+
+1999-02-08 15:15 hardaker
+
+ * apps/snmptrapd_handlers.c:
+
+ - (snmptrapd_handlers.c): nothing. really.
+
+1999-02-08 15:14 hardaker
+
+ * apps/snmpdelta.c:
+
+ - (snmpdelta.c): Patch from Michael Slifcak:
+ - variable renaming time -> m_time.
+
+1999-02-08 15:13 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): Patch from Michael Slifcak:
+ - variable renaming index -> iindex.
+
+1999-02-08 15:11 hardaker
+
+ * agent/: agent_read_config.c, agent_read_config.h:
+
+ - (agent_read_config.c, agent_read_config.h): Patch from Michael Slifcak:
+ - make tree_compare() be a real typedef'ed function again now that
+ qsorting is no longer needed.
+
+1999-02-08 15:08 hardaker
+
+ * FAQ:
+
+ - (FAQ): Patch from Michael Slifcak:
+ - Tk.pm mention.
+
+1999-02-08 12:21 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ - (smux.c): Patch from John Polstra:
+ - call accept() to get the socket file descriptor.
+
+1999-02-02 22:02 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt):
+ - mention that the memory section isn't supported on all
+ architectures.
+
+1999-02-02 22:02 hardaker
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ - (hr_proc.c): use [0] index of load average table.
+
+1999-02-02 22:01 hardaker
+
+ * TODO:
+
+ - (TODO): Remove unsuppored mib nodes from output instead of returning 0's.
+
+1999-02-02 22:00 hardaker
+
+ * FAQ:
+
+ - (FAQ): mention lack of solaris memory support.
+
+1999-02-02 14:48 baerm
+
+ * agent/mibgroup/: target.h, target/snmpTargetAddrEntry.c
+, target/snmpTargetAddrEntry.h,
+ target/snmpTargetParamsEntry.c,
+ target/snmpTargetParamsEntry.h:
+
+ - (target.h, snmpTargetAddrEntry.c, snmpTargetAddrEntry.h,
+ snmpTargetParamsEntry.c, snmpTargetParamsEntry.h):
+ - Code added to support the target MIB, specifically the address and
+ params table.
+
+1999-02-02 14:34 baerm
+
+ * snmplib/read_config.c:
+
+ - (read_config.c):
+ - Updated copy_word to accept quoted strings, with included white
+ spaces. '\' escapes the following character.
+
+1999-02-02 13:34 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): typo: -L -> -A in help strings docs.
+
+1999-02-02 13:33 hardaker
+
+ * FAQ:
+
+ 2036 -> 2038
+
+1999-01-26 09:45 hardaker
+
+ * EXAMPLE.conf.def:
+
+ - (EXAMPLE.conf.def): change reference IP net addresses to 10.10.10.0.
+
+1999-01-25 16:25 hardaker
+
+ * README, local/README.mib2c:
+
+ - (README, README.mib2c): mib2c readme file.
+
+1999-01-25 11:15 hardaker
+
+ * agent/agent_read_config.c, agent/snmp_vars.h,
+ agent/snmpd.c, agent/mibgroup/host_res.h,
+ agent/mibgroup/mibincl.h, agent/mibgroup/ucd-snmp/file.c
+, apps/snmpnetstat/inet.c, snmplib/parse.c,
+ snmplib/snmp_debug.c:
+
+ - (agent_read_config.c, snmp_vars.h, snmpd.c, host_res.h, mibincl.h,
+ file.c, inet.c, parse.c, snmp_debug.c):
+ - -Wall fixes.
+
+1999-01-25 11:11 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - test if __FUNCTION__ is supported by the compiler.
+
+1999-01-25 10:35 hardaker
+
+ * snmplib/snmp_debug.h:
+
+ - (snmp_debug.h): special test for __FUNCTION__ before using it.
+
+1999-01-25 10:34 hardaker
+
+ * snmplib/system.c:
+
+ - (system.c): fix strings.h include.
+
+1999-01-25 10:33 hardaker
+
+ * snmplib/: context_parse.c, mib.c, parse.c,
+ read_config.c, snmp_api.c, snmp_client.c,
+ system.c:
+
+ - (context_parse.c, mib.c, parse.c, read_config.c, snmp_api.c,
+ snmp_client.c, system.c): Patch from Markku Laukkanen:
+ - ansi fixes.
+
+1999-01-25 10:28 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ - (versiontag): typo.
+
+1999-01-25 10:27 hardaker
+
+ * apps/: snmpdelta.c, snmpstatus.c, snmptest.c
+, snmptrap.c, snmptrapd_handlers.c,
+ snmpnetstat/inet.c, snmpnetstat/main.c:
+
+ - (snmpdelta.c, snmpstatus.c, snmptest.c, snmptrap.c,
+ snmptrapd_handlers.c, inet.c, main.c): Patch from Markku Laukkanen:
+ - more ansi fixes.
+
+1999-01-22 07:23 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Patch from Michael Slifcak:
+ - Check for NULL on session closes.
+
+1999-01-21 08:42 hardaker
+
+ * agent/mibgroup/Makefile.in:
+
+ - (Makefile.in): remove ucd specific module depends.
+
+1999-01-21 08:40 hardaker
+
+ * acconfig.h, config.h.in, snmplib/snmp_api.c
+, win32/config.h:
+
+ - (acconfig.h, config.h.in, snmp_api.c, config.h): Patch from Michael
+ J. Slifcak:
+ - NO_NULL_COMUNITY -> NO_ZEROLENGTH_COMMUNITY.
+
+1999-01-21 08:39 hardaker
+
+ * FAQ:
+
+ - (FAQ): Patch from Michael J. Slifcak:
+ - typo on Joe's name fixed.
+
+1999-01-20 17:11 hardaker
+
+ * FAQ, README:
+
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre7 )
+
+1999-01-20 17:04 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre7 )
+
+1999-01-20 17:02 hardaker
+
+ * config.h.in:
+
+ - (config.h.in): ran autoheader
+
+1999-01-20 16:40 hardaker
+
+ * acconfig.h, config.h.in, apps/snmp_parse_args.c
+, apps/snmpnetstat/main.c, snmplib/snmp_api.c:
+
+ - (acconfig.h, config.h.in, snmp_parse_args.c, main.c, snmp_api.c):
+ Patch from Michael Slifcak:
+ - allow zero length (legal) community strings.
+
+1999-01-20 15:54 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ - (smux.c): debugging changes.
+
+1999-01-20 15:54 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): export sdlist and sdlen variables.
+
+1999-01-20 15:50 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): remove ucd specific mib module make requirements.
+
+1999-01-20 15:49 hardaker
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ - (hr_swinst): #ifdef RPM protect a free routine.
+
+1999-01-20 15:48 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ - (smux.c): typo
+
+1999-01-20 15:31 hardaker
+
+ * README:
+
+ - (README): helping out changes.
+
+1999-01-20 15:30 hardaker
+
+ * COPYING:
+
+ - (COPYING): It's 1999
+
+1999-01-20 15:22 hardaker
+
+ * FAQ, README:
+
+ - (FAQ, README): added version stamp.
+
+1999-01-20 15:20 hardaker
+
+ * snmplib/Makefile.in, agent/Makefile.in,
+ agent/mibgroup/Makefile.in, apps/Makefile.in,
+ apps/snmpnetstat/Makefile.in:
+
+ - (Makefile.in): make depend.
+
+1999-01-20 15:20 hardaker
+
+ * snmplib/Makefile.in:
+
+ - (Makefile.in): install ucd-snmp-includes.h.
+
+1999-01-20 15:18 hardaker
+
+ * snmplib/ucd-snmp-includes.h:
+
+ - (ucd-snmp-includes.h): minimalish include set for library clients.
+
+1999-01-20 15:17 hardaker
+
+ * agent/mibgroup/ucd-snmp/: disk.c, errormib.c,
+ extensible.c, loadave.c, memory.c:
+
+ - (disk.c, errormib.c, extensible.c, loadave.c, memory.c):
+ - linux 2.1 kernel needs asm/page.h (all includes need to be re-written).
+
+1999-01-20 15:16 hardaker
+
+ * agent/mibgroup/mibII/: at.c, interfaces.c, ip.c
+, route_write.c, tcp.c, udp.c, var_route.c
+:
+
+ - (at.c, interfaces.c, ip.c, route_write.c, tcp.c, udp.c,
+ var_route.c):
+ - sys/stream.h needed by SCO.
+ - interfaces scan fixes for linux 2.0 vs 2.1 can be configured elsewhere now.
+ - protect get_address calls against NULL pointer returns.
+
+1999-01-20 15:14 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ - (versiontag): version tagging ability to do many things.
+
+1999-01-20 15:14 hardaker
+
+ * agent/: agent_read_config.c, snmp_vars.c:
+
+ - (agent_read_config.c, snmp_vars.c): include sys/stream.h for SCO.
+
+1999-01-20 15:14 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in):
+ - check for asm/page.h (linux).
+ - check for sys/stream.h (SCO).
+ - Fix rtentry test.
+
+1999-01-20 15:11 hardaker
+
+ * Makefile.in:
+
+ - (Makefile.in): version tag creation.
+
+1999-01-20 12:23 hardaker
+
+ * agent/agent_read_config.c, agent/auto_nlist.c,
+ agent/snmp_agent.c, agent/snmpd.c,
+ agent/mibgroup/host_res.h, agent/mibgroup/mibincl.h,
+ apps/.cvsignore, apps/snmp_parse_args.c,
+ apps/snmptrapd.c, apps/snmptrapd_handlers.c,
+ apps/snmpnetstat/if.c, snmplib/Makefile.in,
+ snmplib/mib.c, snmplib/parse.c, snmplib/read_config.c
+, snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmp_debug.c, snmplib/snmp_debug.h,
+ snmplib/vacm.c:
+
+ - (agent_read_config.c, auto_nlist.c, snmp_agent.c, snmpd.c,
+ host_res.h, mibincl.h, .cvsignore, snmp_parse_args.c, snmptrapd.c,
+ snmptrapd_handlers.c, if.c, Makefile.in, mib.c, parse.c,
+ read_config.c, snmp_api.c, snmp_api.h, snmp_debug.c, snmp_debug.h,
+ vacm.c): debugging support code moved to snmp_debug.[ch].
+
+1999-01-20 12:21 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (interfaces.c): typo in ansi changes.
+
+1999-01-20 12:21 hardaker
+
+ * acconfig.h:
+
+ - (acconfig.h): unneeded comment removed.
+
+1999-01-20 12:20 hardaker
+
+ * FAQ:
+
+ - (FAQ): perl-SNMP and y2k questions added.
+
+1999-01-20 12:19 hardaker
+
+ * agent/.pure, snmplib/.pure:
+
+ - (.pure, .pure, .pure): removed.
+
+1999-01-19 20:01 hardaker
+
+ * apps/snmptable.c, snmplib/mib.c, snmplib/parse.c
+, snmplib/snmp_auth.c, win32/libsnmp_dll/libsnmp.def
+:
+
+ - (snmptable.c, mib.c, parse.c, snmp_auth.c, libsnmp.def): Patch from
+ Michael J. Slifcak:
+ - apps/snmptable.c - some compilers warn comparing pointer with integer
+ - snmplib/mib.c - already mentioned before; here for complete-ness
+ - snmplib/parse.c - minor touchup of includes; system.h dup removed
+ - snmplib/snmp_api.h - MSVisual C++ doesn't have __FUNCTION__
+ - snmplib/snmp_auth.c - minor fix of comment
+ - win32/libsnmp_dll/libsnmp.def - snmp_parse_args needs a new function
+
+1999-01-19 19:59 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in): remove __P checking.
+
+1999-01-18 10:46 hardaker
+
+ * agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/disk.h,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/errormib.h,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/extensible.h,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/file.h,
+ agent/mibgroup/ucd-snmp/hpux.c,
+ agent/mibgroup/ucd-snmp/hpux.h,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/loadave.h,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory.h,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.h,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass.h,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/pass_persist.h,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/proc.h,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/ucd-snmp/registry.h,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/versioninfo.h,
+ agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/ucd-snmp/vmstat.h,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.h,
+ agent/mibgroup/v2party/acl_vars.c,
+ agent/mibgroup/v2party/acl_vars.h,
+ agent/mibgroup/v2party/alarm.c,
+ agent/mibgroup/v2party/alarm.h,
+ agent/mibgroup/v2party/context_vars.c,
+ agent/mibgroup/v2party/context_vars.h,
+ agent/mibgroup/v2party/event.c,
+ agent/mibgroup/v2party/event.h,
+ agent/mibgroup/v2party/party_vars.c,
+ agent/mibgroup/v2party/party_vars.h,
+ agent/mibgroup/v2party/view_vars.c,
+ agent/mibgroup/v2party/view_vars.h, apps/snmp_parse_args.c
+, apps/snmp_parse_args.h, apps/snmpbulkwalk.c,
+ apps/snmpdelta.c, apps/snmpget.c, apps/snmpgetnext.c
+, apps/snmpset.c, apps/snmpstatus.c,
+ apps/snmptable.c, apps/snmptest.c,
+ apps/snmptranslate.c, apps/snmptrap.c,
+ apps/snmptrapd.c, apps/snmptrapd_handlers.h,
+ apps/snmpwalk.c, apps/snmpnetstat/if.c,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/main.c,
+ apps/snmpnetstat/netstat.h, apps/snmpnetstat/route.c,
+ win32/config.h:
+
+ - (README, apps, agent, acconfig.h): Patch from Markku Laukkanen:
+ - ansi'ify everything.
+
+1999-01-18 10:43 hardaker
+
+ * README, acconfig.h, agent/agent_read_config.c
+, agent/agent_read_config.h, agent/auto_nlist.c,
+ agent/auto_nlist.h, agent/kernel.c, agent/kernel.h
+, agent/snmp2p.c, agent/snmp_agent.c,
+ agent/snmp_agent.h, agent/snmp_vars.c,
+ agent/snmp_vars.h, agent/snmpd.c, agent/snmpd.h
+, agent/var_struct.h, agent/view_parse.c,
+ agent/dlmods/dlmod_mib.c, agent/dlmods/dlmod_mib.h,
+ agent/dlmods/example.c, agent/dlmods/example.h,
+ agent/mibgroup/host_res.h, agent/mibgroup/kernel_sunos5.c
+, agent/mibgroup/mibII.c, agent/mibgroup/mibII.h,
+ agent/mibgroup/util_funcs.c, agent/mibgroup/util_funcs.h
+, agent/mibgroup/v2party.c, agent/mibgroup/v2party.h
+, agent/mibgroup/dummy/dummy.c,
+ agent/mibgroup/dummy/dummy.h,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/examples/example.h,
+ agent/mibgroup/examples/wombat.c,
+ agent/mibgroup/examples/wombat.h,
+ agent/mibgroup/host/hr_device.c,
+ agent/mibgroup/host/hr_device.h,
+ agent/mibgroup/host/hr_disk.c, agent/mibgroup/host/hr_disk.h
+, agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_filesys.h,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_network.h,
+ agent/mibgroup/host/hr_other.c,
+ agent/mibgroup/host/hr_other.h,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_partition.h,
+ agent/mibgroup/host/hr_print.c,
+ agent/mibgroup/host/hr_print.h, agent/mibgroup/host/hr_proc.c
+, agent/mibgroup/host/hr_proc.h,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_storage.h,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swinst.h,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_swrun.h,
+ agent/mibgroup/host/hr_system.c,
+ agent/mibgroup/host/hr_system.h,
+ agent/mibgroup/host/hr_utils.h, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/at.h, agent/mibgroup/mibII/icmp.c
+, agent/mibgroup/mibII/icmp.h,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/interfaces.h, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/ip.h,
+ agent/mibgroup/mibII/route_write.h,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/snmp_mib.h,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/sysORTable.h,
+ agent/mibgroup/mibII/system.h,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/system_mib.h, agent/mibgroup/mibII/tcp.c
+, agent/mibgroup/mibII/tcp.h, agent/mibgroup/mibII/udp.c
+, agent/mibgroup/mibII/udp.h,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/vacm_vars.h,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/mibII/var_route.h, agent/mibgroup/misc/dlmod.c
+, agent/mibgroup/misc/dlmod.h,
+ agent/mibgroup/misc/ipfwacc.c, agent/mibgroup/misc/ipfwacc.h
+, agent/mibgroup/smux/smux.c, agent/mibgroup/smux/smux.h
+, agent/mibgroup/smux/snmp_bgp.c,
+ agent/mibgroup/smux/snmp_bgp.h,
+ agent/mibgroup/smux/snmp_ospf.c,
+ agent/mibgroup/smux/snmp_ospf.h,
+ agent/mibgroup/smux/snmp_rip2.c,
+ agent/mibgroup/smux/snmp_rip2.h:
+
+ - (README, apps, agent, acconfig.h): Patch from Markku Laukkanen:
+ - ansi'ify everything.
+
+1999-01-16 23:13 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre6 )
+
+1999-01-16 23:12 hardaker
+
+ * snmplib/: acl.c, acl.h, acl_parse.c, asn1.c
+, asn1.h, context.c, context.h,
+ context_parse.c, int64.c, int64.h, md5.c,
+ md5.h, mib.c, mib.h, parse.c, parse.h
+, party.c, party.h, party_parse.c,
+ read_config.c, read_config.h, snmp.c, snmp.h
+, snmp_api.c, snmp_api.h, snmp_auth.c,
+ snmp_client.c, snmp_client.h, snmp_impl.h,
+ system.c, system.h, vacm.c, vacm.h,
+ view.c, view.h:
+
+ - (snmplib/*.[ch]): Patch from Markku Laukkanen:
+ - asni'ify all functions.
+
+1999-01-16 23:04 hardaker
+
+ * man/snmpcmd.1:
+
+ - (snmpcmd.1): updated -D description.
+
+1999-01-15 16:17 hardaker
+
+ * agent/mibgroup/smux/: smux.c, smux.h:
+
+ - (smux.c, smux.h): Patch from Nick Amato:
+ - smux patches.
+
+1999-01-15 15:58 hardaker
+
+ * snmplib/vacm.c:
+
+ - (vacm.c): DEBUGMSG typo.
+
+1999-01-15 15:58 hardaker
+
+ * apps/Makefile.in, snmplib/Makefile.in:
+
+ - (Makefile.in, Makefile.in): makefileindepend.
+
+1999-01-15 15:22 hardaker
+
+ * agent/: Makefile.in, agent_read_config.c,
+ snmp_vars.c, snmp_vars.h, mibgroup/Makefile.in
+, mibgroup/mibII.h, mibgroup/dummy/dummy.c,
+ mibgroup/dummy/dummy.h, mibgroup/examples/example.c,
+ mibgroup/examples/example.h, mibgroup/examples/wombat.c
+, mibgroup/examples/wombat.h, mibgroup/mibII/at.c,
+ mibgroup/mibII/at.h, mibgroup/mibII/icmp.c,
+ mibgroup/mibII/icmp.h, mibgroup/mibII/interfaces.c,
+ mibgroup/mibII/interfaces.h, mibgroup/mibII/ip.c,
+ mibgroup/mibII/ip.h, mibgroup/mibII/snmp_mib.c,
+ mibgroup/mibII/snmp_mib.h, mibgroup/mibII/sysORTable.c,
+ mibgroup/mibII/sysORTable.h, mibgroup/mibII/system.c,
+ mibgroup/mibII/system_mib.c, mibgroup/mibII/system_mib.h
+, mibgroup/mibII/tcp.c, mibgroup/mibII/tcp.h,
+ mibgroup/mibII/udp.c, mibgroup/mibII/udp.h,
+ mibgroup/mibII/vacm_vars.c, mibgroup/mibII/vacm_vars.h,
+ mibgroup/ucd-snmp/disk.c, mibgroup/ucd-snmp/disk.h,
+ mibgroup/ucd-snmp/errormib.c, mibgroup/ucd-snmp/errormib.h
+, mibgroup/ucd-snmp/extensible.c,
+ mibgroup/ucd-snmp/extensible.h, mibgroup/ucd-snmp/file.c
+, mibgroup/ucd-snmp/file.h, mibgroup/ucd-snmp/hpux.c
+, mibgroup/ucd-snmp/hpux.h, mibgroup/ucd-snmp/loadave.c
+, mibgroup/ucd-snmp/loadave.h,
+ mibgroup/ucd-snmp/memory.c, mibgroup/ucd-snmp/memory.h,
+ mibgroup/ucd-snmp/memory_freebsd2.c,
+ mibgroup/ucd-snmp/memory_freebsd2.h, mibgroup/ucd-snmp/pass.c
+, mibgroup/ucd-snmp/pass.h,
+ mibgroup/ucd-snmp/pass_persist.c,
+ mibgroup/ucd-snmp/pass_persist.h, mibgroup/ucd-snmp/proc.c
+, mibgroup/ucd-snmp/proc.h, mibgroup/ucd-snmp/registry.c
+, mibgroup/ucd-snmp/registry.h,
+ mibgroup/ucd-snmp/versioninfo.c,
+ mibgroup/ucd-snmp/versioninfo.h, mibgroup/ucd-snmp/vmstat.c
+, mibgroup/ucd-snmp/vmstat.h,
+ mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ mibgroup/ucd-snmp/vmstat_freebsd2.h:
+
+ - (agent/mibgroup/*):
+ - made all (ok, some. !host) mib modules use snmpd_register_config_handler().
+ - made all (ok, some. !host) mib modules use register_mib().
+
+1999-01-15 11:12 hardaker
+
+ * agent/: snmpd.c, snmpd.h:
+
+ - (snmpd.c, snmpd.h):
+ - remove reverse_bytes() usage.
+
+1999-01-15 11:10 hardaker
+
+ * agent/snmp2p.c:
+
+ - (snmp2p.c): Patch from Michael Slifcak:
+ - remove reverse_bytes() usage.
+
+1999-01-14 09:02 hardaker
+
+ * local/mib2c:
+
+ - (mib2c): update for SNMP.pm 1.8.
+
+1999-01-09 21:48 hardaker
+
+ * agent/: agent_read_config.c, auto_nlist.c,
+ snmp_agent.c, snmp_vars.c, snmpd.c,
+ mibgroup/kernel_sunos5.c, mibgroup/util_funcs.c,
+ mibgroup/dummy/dummy.c, mibgroup/examples/wombat.c,
+ mibgroup/host/hr_device.c, mibgroup/host/hr_disk.c,
+ mibgroup/host/hr_filesys.c, mibgroup/host/hr_network.c,
+ mibgroup/host/hr_partition.c, mibgroup/host/hr_print.c,
+ mibgroup/host/hr_proc.c, mibgroup/host/hr_storage.c,
+ mibgroup/host/hr_swinst.c, mibgroup/host/hr_swrun.c,
+ mibgroup/host/hr_system.c, mibgroup/mibII/at.c,
+ mibgroup/mibII/icmp.c, mibgroup/mibII/interfaces.c,
+ mibgroup/mibII/ip.c, mibgroup/mibII/snmp_mib.c,
+ mibgroup/mibII/sysORTable.c, mibgroup/mibII/system.c,
+ mibgroup/mibII/tcp.c, mibgroup/mibII/udp.c,
+ mibgroup/mibII/vacm_vars.c, mibgroup/mibII/var_route.c,
+ mibgroup/smux/smux.c, mibgroup/smux/snmp_bgp.c,
+ mibgroup/smux/snmp_ospf.c, mibgroup/smux/snmp_rip2.c,
+ mibgroup/ucd-snmp/disk.c, mibgroup/ucd-snmp/memory.c,
+ mibgroup/ucd-snmp/pass.c, mibgroup/ucd-snmp/pass_persist.c
+, mibgroup/ucd-snmp/proc.c, mibgroup/ucd-snmp/registry.c
+, mibgroup/ucd-snmp/versioninfo.c:
+
+ - (agent/*.c):
+ - use the new debugging functions.
+ - implement needed -D flag changes.
+
+1999-01-09 20:52 hardaker
+
+ * man/snmpcmd.1:
+
+ - (snmpcmd.1): discuss -D usage change.
+
+1999-01-09 20:52 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmp_api.c, snmp_api.h): DEBUGPOID replacement: DEBUGMSGOID.
+
+1999-01-09 20:51 hardaker
+
+ * snmplib/read_config.c:
+
+ - (read_config.c): remove old token specifier in a debugging statement
+ format line.
+
+1999-01-09 20:50 hardaker
+
+ * apps/snmpnetstat/: if.c, main.c:
+
+ - (if.c, main.c): use the new debugging functions.
+
+1999-01-09 20:50 hardaker
+
+ * apps/: snmptrapd.c, snmptrapd_handlers.c:
+
+ - (snmptrapd.c, snmptrapd_handlers.c): use the new debugging functions.
+
+1999-01-09 20:49 hardaker
+
+ * FAQ, README:
+
+ - (FAQ, README): URL changes.
+
+1999-01-09 20:30 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): make -D register the debugging tokens specified.
+
+1999-01-09 20:30 hardaker
+
+ * apps/snmptable.c:
+
+ - (snmptable.c): change internal debug variable to localdebug.
+
+1999-01-09 20:28 hardaker
+
+ * snmplib/: mib.c, parse.c, read_config.c,
+ snmp_api.c, snmp_api.h, vacm.c:
+
+ - (mib.c, parse.c, read_config.c, snmp_api.c, snmp_api.h, vacm.c):
+ - Implement the new token based debugging message support.
+
+1999-01-05 10:48 hardaker
+
+ * apps/: snmpbulkwalk.c, snmpget.c, snmpgetnext.c
+, snmpset.c, snmpstatus.c, snmptable.c,
+ snmpwalk.c:
+
+ - (snmpbulkwalk.c, snmpget.c, snmpgetnext.c, snmpset.c, snmpstatus.c,
+ snmptable.c, snmpwalk.c): Patch from mslifcak@iss.net:
+ - make main() return an int instead of void.
+
+1999-01-05 10:41 hardaker
+
+ * apps/snmptable.c:
+
+ - (snmptable.c): Make field separator take arguments directly after the -f.
+
+1999-01-02 08:48 hardaker
+
+ * mibs/IANAifType-MIB.txt:
+
+ - (IANAifType-MIB.txt): Patch from Jakob Ellerstedt:
+ - new complete list of ifTypes.
+
+1998-12-31 17:49 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): Patch from David Tiller:
+ - oidLen's were wrong for m2m oids.
+
+1998-12-31 17:48 hardaker
+
+ * snmplib/snmp_client.c:
+
+ - (snmp_client.c): Patch from David Tiller:
+ - need to read_objid() the context oid base, not the party oid base
+ in one location.
+
+1998-12-31 17:46 hardaker
+
+ * agent/mibgroup/v2party/event.c:
+
+ - (event.c): Patch from David Tiller:
+ - memcmp's sizes were wrong.
+
+1998-12-29 17:01 hardaker
+
+ * snmplib/: vacm.c (V3-b3.2), vacm.c:
+
+ - (vacm.c): Enable multiple side by side views in the view family
+ tree. The views already existed, but weren't checked and only the
+ first view was found.
+ - Not done in a clean fashion. Much of the structure definitions
+ should be rewritten with sub-pieces to do it properly with greater
+ speed.
+
+1998-12-29 16:55 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): Patch from Michael Slifcak:
+ - remove newlines from sprint_value() where applicable.
+
+1998-12-26 10:35 hardaker
+
+ * agent/mibgroup/misc/dlmod.c:
+
+ - (dlmod.c): Patch from Michael Slifcak:
+ - fix dlmod compilation in snmpd_register_config_handler() call.
+
+1998-12-22 14:56 hardaker
+
+ * snmplib/: mib.c, snmp_api.c:
+
+ - (mib.c, snmp_api.c): Patch from Michael Slifcak:
+ - fix my broken set_locale stuff.
+
+1998-12-22 08:50 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): don't compile dlmods
+
+1998-12-21 18:20 hardaker
+
+ * snmplib/system.c:
+
+ - (system.c): Patch from Michael Slifcak:
+ - Win32 memory leak fixes for opendir(), etc.
+
+1998-12-21 18:18 hardaker
+
+ * agent/mibgroup/ucd-snmp/file.h, mibs/UCD-SNMP-MIB.txt
+:
+
+ - (file.h, UCD-SNMP-MIB.txt): move the file mib to .15 so it doesn't
+ conflict with the demo mib.
+
+1998-12-21 18:18 hardaker
+
+ * agent/.cvsignore:
+
+ - (.cvsignore): a .gdb file of mine.
+
+1998-12-21 09:54 hardaker
+
+ * local/ipf-mod.pl, mibs/IPFILTER.txt:
+
+ - (ipf-mod.pl, IPFILTER.txt): Patch from Yaroslav Terletsky:
+ - ipfilter pass script and mib file.
+
+1998-12-18 18:16 hardaker
+
+ * agent/mibgroup/ucd-snmp/: versioninfo.c, versioninfo.h
+:
+
+ - (versioninfo.c, versioninfo.h): mib object to display configure options.
+
+1998-12-18 18:16 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - store configure flags to a define.
+
+1998-12-18 18:12 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): include read_config.h.
+
+1998-12-18 18:11 hardaker
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ - (libsnmp.def): update from Michael Slifcak.
+
+1998-12-18 18:10 hardaker
+
+ * snmplib/: parse.c, read_config.c, read_config.h
+:
+
+ - (parse.c, read_config.c, read_config.h):
+ - fixes from Michael Slifcak.
+ - misc read_config functions pulled in from the v3 work.
+
+1998-12-18 11:36 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): Patch from Michael Slifcak:
+ - typo.
+
+1998-12-17 08:05 dreeder
+
+ * local/snmpd-ucd.sh:
+
+ file snmpd-ucd.sh was initially added on branch V3-b3.
+
+1998-12-16 07:31 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Patch from Michael Slifcak:
+ - pointer checks before freeing memory.
+
+1998-12-13 08:59 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre5 )
+
+1998-12-13 08:57 hardaker
+
+ * README:
+
+ - (README): added Jeff Johnson to the contributors list.
+
+1998-12-13 08:48 hardaker
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ - (hr_swinst.c): Patch from Jeff Johnson:
+ - protect against memory leaks with the RPM package info calls.
+
+1998-12-13 08:42 hardaker
+
+ * apps/snmpnetstat/inet.c:
+
+ - (inet.c): init pointer to NULL.
+
+1998-12-13 08:41 hardaker
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ - (hr_filesys.c): watch out for NULL file pointers.
+
+1998-12-13 08:18 hardaker
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - (kernel_sunos5.c): remove a few defines that were messing up solaris 7.
+
+1998-12-13 08:14 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): remove -w/-W flag in usage.
+
+1998-12-13 08:12 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): spacing in mib option usage fixes.
+
+1998-12-13 08:07 hardaker
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ - (disk.c): fix disk size error flag reporting on Solaris.
+
+1998-12-13 08:06 hardaker
+
+ * NEWS:
+
+ - (NEWS): beginning notes for 3.6.
+
+1998-12-13 07:49 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): -P flag for toggling new mib parsing options.
+
+1998-12-13 07:48 hardaker
+
+ * snmplib/: parse.c, parse.h:
+
+ - (parse.c, parse.h): new functions: snmp_mib_toggle_options() and usage.
+
+1998-12-13 07:42 hardaker
+
+ * config.h.in, configure, configure.in,
+ snmplib/mib.c, snmplib/snmp_api.c:
+
+ - (config.h.in, configure, configure.in, mib.c, snmp_api.c):
+ - use setlocale() if available to correct isprint problems.
+
+1998-12-05 16:52 dreeder
+
+ * testing/demo.remote:
+
+ file demo.remote was initially added on branch V3-b1.
+
+1998-12-04 16:50 hardaker
+
+ * agent/mibgroup/examples/ucdDemoPublic.conf:
+
+ file ucdDemoPublic.conf was initially added on branch V3-b1.
+
+1998-12-04 16:50 hardaker
+
+ * agent/mibgroup/examples/ucdDemoPublic.cmds:
+
+ file ucdDemoPublic.cmds was initially added on branch V3-b1.
+
+1998-12-04 16:50 hardaker
+
+ * agent/mibgroup/examples/ucdDemoPublic.c:
+
+ file ucdDemoPublic.c was initially added on branch V3-b1.
+
+1998-12-04 16:50 hardaker
+
+ * agent/mibgroup/examples/ucdDemoPublic.h:
+
+ file ucdDemoPublic.h was initially added on branch V3-b1.
+
+1998-12-04 16:45 hardaker
+
+ * mibs/UCD-DEMO-MIB.txt:
+
+ file UCD-DEMO-MIB.txt was initially added on branch V3-b1.
+
+1998-12-04 11:03 hardaker
+
+ * apps/snmpusm.c:
+
+ file snmpusm.c was initially added on branch V3-b1.
+
+1998-12-03 18:44 dreeder
+
+ * testing/demo2.functions:
+
+ file demo2.functions was initially added on branch V3-b1.
+
+1998-12-03 18:44 dreeder
+
+ * testing/demo2:
+
+ file demo2 was initially added on branch V3-b1.
+
+1998-12-03 18:44 dreeder
+
+ * testing/demo2.setupfile:
+
+ file demo2.setupfile was initially added on branch V3-b1.
+
+1998-12-02 15:19 hardaker
+
+ * man/snmp.conf.5.def:
+
+ file snmp.conf.5.def was initially added on branch V3-b1.
+
+1998-11-27 16:55 hardaker
+
+ * apps/snmppass.c:
+
+ file snmppass.c was initially added on branch V3-b1.
+
+1998-11-24 16:43 dreeder
+
+ * snmplib/transform_oids.h:
+
+ file transform_oids.h was initially added on branch V3-b1.
+
+1998-11-24 16:43 dreeder
+
+ * apps/encode_keychange.c:
+
+ file encode_keychange.c was initially added on branch V3-b1.
+
+1998-11-23 16:35 hardaker
+
+ * snmplib/: mib.c, parse.c, parse.h:
+
+ - (snmp_parse_args.c, mib.c, parse.c, parse.h): Patch from Michael Slifcak:
+ - misc parsing bug fixes.
+ - -w & -W options to default application parse_args.
+ - runtime options to control underscore and comment parsing in mibs.
+
+1998-11-23 16:18 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c, mib.c, parse.c, parse.h): Patch from Michael Slifcak:
+ - misc parsing bug fixes.
+ - -w & -W options to default application parse_args.
+ - runtime options to control underscore and comment parsing in mibs.
+
+1998-11-23 15:42 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (interfaces.c, irix.h): fix location of _KERNEL define for irix.
+
+1998-11-22 07:28 hardaker
+
+ * testing/.cvsignore:
+
+ file .cvsignore was initially added on branch V3-b1.
+
+1998-11-22 07:27 hardaker
+
+ * testing/demo:
+
+ file demo was initially added on branch V3-b1.
+
+1998-11-16 22:10 hardaker
+
+ * local/tkmib:
+
+ - (tkmib): too many improvements to count.
+
+1998-11-06 17:44 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): v2 trap send debugging.
+
+1998-11-06 17:44 hardaker
+
+ * agent/agent_read_config.c:
+
+ - (agent_read_config.h): use trap2sink for v2 handlers
+
+1998-11-06 17:23 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): fix v2 trap generation.
+
+1998-10-24 23:07 dreeder
+
+ * testing/misctest.c:
+
+ file misctest.c was initially added on branch V3-b1.
+
+1998-10-23 15:39 dreeder
+
+ * testing/etimetest.c:
+
+ file etimetest.c was initially added on branch V3-b1.
+
+1998-10-23 13:58 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/agent_read_config.c,
+ agent/agent_read_config.h, agent/snmpd.c,
+ agent/mibgroup/examples/wombat.h,
+ agent/mibgroup/mibII/system.h,
+ agent/mibgroup/mibII/vacm_vars.h, agent/mibgroup/misc/dlmod.c
+, agent/mibgroup/ucd-snmp/disk.h,
+ agent/mibgroup/ucd-snmp/extensible.h,
+ agent/mibgroup/ucd-snmp/file.h,
+ agent/mibgroup/ucd-snmp/loadave.h,
+ agent/mibgroup/ucd-snmp/memory.h,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.h,
+ agent/mibgroup/ucd-snmp/pass.h,
+ agent/mibgroup/ucd-snmp/pass_persist.h,
+ agent/mibgroup/ucd-snmp/proc.h, apps/snmp_parse_args.c
+, apps/snmptrapd.c, snmplib/mib.c,
+ snmplib/read_config.c, snmplib/read_config.h:
+
+ - (acconfig.h, config.h.in, configure, configure.in,
+ agent_read_config.c, agent_read_config.h, snmpd.c, wombat.h,
+ system.h, vacm_vars.h, dlmod.c, disk.h, extensible.h, file.h,
+ loadave.h, memory.h, memory_freebsd2.h, pass.h, pass_persist.h,
+ proc.h, snmp_parse_args.c, snmptrapd.c, mib.c, read_config.c,
+ read_config.h):
+ - new option -H on command line to print out .conf file directives
+ that the application understands.
+ - created a new option to the read config registration to allow
+ specifying of a help line.
+
+1998-10-23 13:56 hardaker
+
+ * local/tkmib:
+
+ - (tkmib): editable oid field.
+
+1998-10-23 13:54 hardaker
+
+ * agent/mibgroup/mibII/: at.c, icmp.c, interfaces.c
+:
+
+ - (at.c, icmp.c, interfaces.c): bug fixes, missing #endif.
+
+1998-10-23 13:54 hardaker
+
+ * Makefile.in:
+
+ - (Makefile.in): insert @ sign.
+
+1998-10-23 09:45 dreeder
+
+ * testing/T.sh:
+
+ file T.sh was initially added on branch V3-b1.
+
+1998-10-23 09:45 dreeder
+
+ * testing/eval_testlist:
+
+ file eval_testlist was initially added on branch V3-b1.
+
+1998-10-23 09:45 dreeder
+
+ * testing/eval_tools.sh:
+
+ file eval_tools.sh was initially added on branch V3-b1.
+
+1998-10-23 09:45 dreeder
+
+ * testing/eval_suite.sh:
+
+ file eval_suite.sh was initially added on branch V3-b1.
+
+1998-10-23 09:45 dreeder
+
+ * testing/eval_oneprogram.sh:
+
+ file eval_oneprogram.sh was initially added on branch V3-b1.
+
+1998-10-23 09:45 dreeder
+
+ * testing/T.c:
+
+ file T.c was initially added on branch V3-b1.
+
+1998-10-23 09:45 dreeder
+
+ * testing/README:
+
+ file README was initially added on branch V3-b1.
+
+1998-10-23 07:57 hardaker
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ - (hr_filesys.c): Patch from Dave Shield:
+ - NULL checking on the filesystem mount point.
+
+1998-10-21 19:55 dreeder
+
+ * testing/test_kul.sh:
+
+ file test_kul.sh was initially added on branch V3-b1.
+
+1998-10-21 19:55 dreeder
+
+ * testing/test_keychange.sh:
+
+ file test_keychange.sh was initially added on branch V3-b1.
+
+1998-10-21 19:55 dreeder
+
+ * testing/test_tools.sh:
+
+ file test_tools.sh was initially added on branch V3-b1.
+
+1998-10-21 19:55 dreeder
+
+ * testing/data.kul-md5:
+
+ file data.kul-md5 was initially added on branch V3-b1.
+
+1998-10-21 19:55 dreeder
+
+ * testing/data.keychange-sha1-des:
+
+ file data.keychange-sha1-des was initially added on branch V3-b1.
+
+1998-10-21 19:55 dreeder
+
+ * testing/data.keychange-sha1:
+
+ file data.keychange-sha1 was initially added on branch V3-b1.
+
+1998-10-21 19:55 dreeder
+
+ * testing/data.keychange-md5:
+
+ file data.keychange-md5 was initially added on branch V3-b1.
+
+1998-10-21 19:55 dreeder
+
+ * testing/data.kul-sha1:
+
+ file data.kul-sha1 was initially added on branch V3-b1.
+
+1998-10-21 17:01 hardaker
+
+ * man/: .cvsignore, Makefile.in, read_config.3.def
+:
+
+ - (.cvsignore, Makefile.in, read_config.3.def):
+ - new unproofread manual on the read_config api (most of it).
+
+1998-10-21 11:08 hardaker
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ - (hr_filesys.c): Patch from Dave Shield:
+ - watch out for empty file names passed in.
+
+1998-10-21 10:54 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from Dave Shield:
+ - Fix parser to deal with anonymous children properly.
+
+1998-10-20 11:38 dreeder
+
+ * testing/keymanagetest.c:
+
+ file keymanagetest.c was initially added on branch V3-b1.
+
+1998-10-18 21:14 dreeder
+
+ * testing/Makefile.in:
+
+ file Makefile.in was initially added on branch V3-b1.
+
+1998-10-18 21:14 dreeder
+
+ * testing/scapitest.c:
+
+ file scapitest.c was initially added on branch V3-b1.
+
+1998-10-16 08:38 hardaker
+
+ * agent/mibgroup/mibII/: at.c, icmp.c, interfaces.c
+:
+
+ - (at.c, icmp.c, interfaces.c, aix.h): aix header file fixes.
+
+1998-10-15 12:02 dreeder
+
+ * snmplib/tools.c:
+
+ file tools.c was initially added on branch V3-b1.
+
+1998-10-15 12:02 dreeder
+
+ * snmplib/tools.h:
+
+ file tools.h was initially added on branch V3-b1.
+
+1998-10-15 12:02 dreeder
+
+ * snmplib/lcd_time.h:
+
+ file lcd_time.h was initially added on branch V3-b1.
+
+1998-10-15 12:02 dreeder
+
+ * snmplib/scapi.c:
+
+ file scapi.c was initially added on branch V3-b1.
+
+1998-10-15 12:02 dreeder
+
+ * snmplib/scapi.h:
+
+ file scapi.h was initially added on branch V3-b1.
+
+1998-10-15 12:02 dreeder
+
+ * snmplib/lcd_time.c:
+
+ file lcd_time.c was initially added on branch V3-b1.
+
+1998-10-15 12:02 dreeder
+
+ * snmplib/keytools.h:
+
+ file keytools.h was initially added on branch V3-b1.
+
+1998-10-15 12:02 dreeder
+
+ * snmplib/keytools.c:
+
+ file keytools.c was initially added on branch V3-b1.
+
+1998-10-15 12:02 dreeder
+
+ * snmplib/all_general_local.h:
+
+ file all_general_local.h was initially added on branch V3-b1.
+
+1998-10-15 12:02 dreeder
+
+ * snmplib/all_system.h:
+
+ file all_system.h was initially added on branch V3-b1.
+
+1998-10-15 12:02 dreeder
+
+ * snmplib/debug.h:
+
+ file debug.h was initially added on branch V3-b1.
+
+1998-10-14 16:52 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+
+ - (memory.c): fix for hpux9.
+
+1998-10-14 16:49 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): Patch from Michael Slifcak:
+ - fix for broken compiler warnings on NT.
+
+1998-10-14 16:42 hardaker
+
+ * man/snmpd.1.def:
+
+ - (snmpd.1.def): document -A.
+
+1998-10-14 16:41 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): document -A.
+
+1998-10-14 16:40 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): -A: append to log file.
+
+1998-10-14 09:42 hardaker
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ - (hr_storage.c): machine/types.h and sys/vmmeter.h for freebsd3.
+
+1998-10-14 09:41 hardaker
+
+ * agent/mibgroup/host_res.h:
+
+ - (host_res.h): net/in_var.h for freebsd3.
+
+1998-10-14 09:41 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in): check for machine/types.h.
+
+1998-10-14 09:17 hardaker
+
+ * EXAMPLE.conf.def:
+
+ - (EXAMPLE.conf.def): change public community examples -> private.
+
+1998-10-09 23:20 hardaker
+
+ * FAQ:
+
+ - (FAQ): Dave Shield explains in wonderous detail all about the VACM module.
+
+1998-10-09 23:12 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from Dave Shield:
+ - support for strict (case sensitive) option to the mib compiler.
+
+1998-10-09 23:08 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from Dave Shield:
+ - Check for fully qualified oid statements.
+
+1998-10-09 08:09 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in): use zlib when using rpm libraries.
+
+1998-10-07 17:00 hardaker
+
+ * win32/: libsnmp/libsnmp.dsp, libsnmp_dll/libsnmp_dll.dsp
+:
+
+ - (libsnmp.dsp, libsnmp_dll.dsp): Patch from Michael Slifcak:
+ - winNT project file updates.
+
+1998-10-07 16:54 hardaker
+
+ * apps/snmpdelta.c:
+
+ - (snmpdelta.c): Patch from Michael Slifcak:
+ - fix exiting problems on NT.
+
+1998-10-07 16:51 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): fix default port problems (again).
+
+1998-10-07 16:50 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from Michael Slifcak:
+ - remove un-needed headers.
+
+1998-10-07 16:49 hardaker
+
+ * man/Makefile.in:
+
+ - (Makefile.in): Patch from Michael Slifcak:
+ - fix make html.
+
+1998-10-07 16:49 hardaker
+
+ * Makefile.in:
+
+ - (Makefile.in): Patch from Michael Slifcak:
+ - properly locate version.h in $(srcdir).
+
+1998-10-06 15:38 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre3 )
+
+1998-10-06 15:38 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ - (versiontag): typo.
+
+1998-10-06 15:35 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ - (versiontag): fix for cvs 1.10.
+
+1998-10-06 15:34 hardaker
+
+ * remove-files:
+
+ - (remove-files): update.
+
+1998-10-06 15:30 hardaker
+
+ * mibs/UCD-SNMP-MIB-OLD.txt:
+
+ - (UCD-SNMP-MIB-OLD.txt): added
+
+1998-10-06 15:18 hardaker
+
+ * config.h.in:
+
+ - (config.h.in): setup define for HAVE_USLEEP.
+
+1998-10-06 15:18 hardaker
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ - (var_route.c): hack fixes for hpux10 and rtentry.
+
+1998-10-05 17:03 hardaker
+
+ * agent/mibgroup/host/hr_proc.c:
+
+ - (hr_proc.c): possible fix for solaris's process percentage.
+
+1998-10-05 16:53 hardaker
+
+ * agent/mibgroup/dummy/: dummy.c, dummy.h:
+
+ - (dummy.c, dummy.h): update to remove common_header.h
+
+1998-09-30 14:56 hardaker
+
+ * ChangeLog, EXAMPLE.conf.def, NEWS, configure
+, configure.in, agent/mibgroup/mibII/interfaces.c
+, agent/mibgroup/ucd-snmp/memory.c, apps/snmptest.c
+, apps/snmptrap.c, snmplib/parse.c:
+
+ - (ChangeLog, EXAMPLE.conf.def, NEWS, configure, configure.in,
+ interfaces.c, memory.c, snmptest.c, snmptrap.c, parse.c):
+ - merge 3.5.3 changes into main trunk.
+
+1998-09-25 18:14 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/util_funcs.c:
+
+ - (configure, configure.in, util_funcs.c): use USLEEP if available for
+ small sleep times while waiting for processes to finish.
+
+1998-09-25 18:04 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): remove unneeded comment-out.
+
+1998-09-25 18:03 hardaker
+
+ * Makefile.in:
+
+ - (Makefile.in): install version.h, and strip includes out of config.h
+
+1998-09-25 17:56 hardaker
+
+ * snmplib/Makefile.in:
+
+ - (Makefile.in): don't install libsnmp.h. It's going to change too
+ much in the future.
+
+1998-09-25 17:55 hardaker
+
+ * snmplib/Makefile.in:
+
+ - (Makefile.in): Patch from Michael Slifcak:
+ - install more headers.
+
+1998-09-25 17:32 hardaker
+
+ * win32/: config.h, win32.dsw, libsnmp/libsnmp.dsp
+, libsnmp_dll/libsnmp.def, libsnmp_dll/libsnmp_dll.dsp
+, snmptable/snmptable.dsp:
+
+ - (config.h, win32.dsw, libsnmp.dsp, libsnmp.def, libsnmp_dll.dsp,
+ snmptable.dsp): Patch from Michael Slifcak:
+ - stupid OS update.
+
+1998-09-25 17:26 hardaker
+
+ * man/snmp_sess_api.3:
+
+ - (snmp_sess_api.3): Patch from Michael Slifcak:
+ - session documentation update.
+
+1998-09-25 17:25 hardaker
+
+ * apps/snmptable.c:
+
+ - (snmptable.c): process args directly instead of relying on get_opt().
+
+1998-09-25 17:24 hardaker
+
+ * snmplib/: mib.c, mib.h, read_config.c,
+ snmp_api.c, snmp_api.h:
+
+ - (mib.c, mib.h, read_config.c, snmp_api.c, snmp_api.h): Patch from
+ Michael Slifcak:
+ - fix compiler warnings, errors.
+
+1998-09-25 17:15 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h, snmp_client.c
+:
+
+ - (snmp_api.c, snmp_api.h, snmp_client.c): Patch from Michael Slifcak:
+ - The CMU library has an optimization in snmp_clone_pdu() that does
+ not copy zero length strings. I had merged this in with changes
+ made for multi-thread support. Unfortunately, I did not make sure
+ the cloned PDU had no pointer for this case. Oops!
+ - Another problem in snmp_clone_pdu() was the test for zero length
+ string was not being performed on the first varbind in the chain.
+
+1998-09-25 17:03 hardaker
+
+ * snmplib/: snmp_api.c (Ext-3-5-patches.5), snmp_api.c:
+
+ - (snmp_api.c): don't rely on the getservbyname pointer to stay around.
+
+1998-09-23 13:06 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, snmplib/parse.c:
+
+ - (acconfig.h, config.h.in, configure, configure.in, parse.c): New flag:
+ - --enable-eol-terminated-comments.
+
+1998-09-23 12:15 hardaker
+
+ * ISSUES:
+
+ file ISSUES was initially added on branch V3-b1.
+
+1998-09-21 11:11 hardaker
+
+ * agent/: snmp_vars.c (Ext-3-5-patches.5), snmp_vars.c
+ (V3-b1.[5,2]), snmp_vars.c:
+
+ - (snmp_vars.c): finally fixed the write_method's for creation problem.
+
+1998-09-21 08:49 hardaker
+
+ * agent/mibgroup/ucd-snmp/: file.c, file.h:
+
+ - (file.c, file.h): allow -1 size to indicate simple size monitoring.
+
+1998-09-18 14:04 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): Change file return code from TruthValue to
+ integer since 1/2 does not fit the current 0/1 return code scheme.
+
+1998-09-18 14:02 hardaker
+
+ * agent/mibgroup/ucd-snmp/file.h:
+
+ - (file.h): remap to the 100/101 conventions of the ucd-snmp tables.
+
+1998-09-18 14:01 hardaker
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ - (ucd_snmp.h): add the file mib module.
+
+1998-09-18 13:58 hardaker
+
+ * agent/mibgroup/ucd-snmp/: file.c, file.h:
+
+ - (file.c, file.h): Patch from Jonas Olsson:
+ - Implement a file size watching mib module (ucd-snmp/file).
+
+1998-09-18 13:20 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): added the FileTable submitted by Jonas Olsson.
+
+1998-09-18 12:42 hardaker
+
+ * snmplib/snmp-tc.h:
+
+ file snmp-tc.h was initially added on branch V3-b1.
+
+1998-09-18 09:59 hardaker
+
+ * snmplib/snmpusm.c:
+
+ file snmpusm.c was initially added on branch V3-b1.
+
+1998-09-18 09:59 hardaker
+
+ * snmplib/snmpusm.h:
+
+ file snmpusm.h was initially added on branch V3-b1.
+
+1998-09-18 09:58 hardaker
+
+ * agent/mibgroup/snmpv3/usmUser.c:
+
+ file usmUser.c was initially added on branch V3-b1.
+
+1998-09-18 09:58 hardaker
+
+ * agent/mibgroup/snmpv3/usmUser.h:
+
+ file usmUser.h was initially added on branch V3-b1.
+
+1998-09-16 07:04 hardaker
+
+ * agent/mibgroup/snmpv3/usmStats.h:
+
+ file usmStats.h was initially added on branch V3-b1.
+
+1998-09-16 07:04 hardaker
+
+ * agent/mibgroup/snmpv3/usmStats.c:
+
+ file usmStats.c was initially added on branch V3-b1.
+
+1998-09-15 13:07 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Patch from Michael Slifcak:
+ - fix init_snmp calls from session routines.
+
+1998-09-15 13:07 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): // comment -> /* */ comment.
+
+1998-09-15 13:02 hardaker
+
+ * apps/snmpnetstat/inet.c:
+
+ - (inet.c): Patch from Michael Slifcak:
+ - memory related fixes.
+
+1998-09-14 22:29 hardaker
+
+ * agent/mibgroup/snmpv3/snmpMPDStats.c:
+
+ file snmpMPDStats.c was initially added on branch V3-b1.
+
+1998-09-14 22:29 hardaker
+
+ * agent/mibgroup/snmpv3/snmpMPDStats.h:
+
+ file snmpMPDStats.h was initially added on branch V3-b1.
+
+1998-09-14 17:49 hardaker
+
+ * agent/mibgroup/snmpv3mibs.h:
+
+ file snmpv3mibs.h was initially added on branch V3-b1.
+
+1998-09-14 12:48 hardaker
+
+ * agent/dlmods/Makefile.in:
+
+ - (Makefile.in): Patch from Michael:
+ - do dlmods compilation better at least on solaris and linux.
+
+1998-09-14 12:40 hardaker
+
+ * agent/agent_read_config.c, agent/snmp_vars.c,
+ agent/dlmods/dlmod_mib.c, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/dummy/dummy.c,
+ agent/mibgroup/examples/wombat.c,
+ agent/mibgroup/host/hr_device.c,
+ agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_print.c, agent/mibgroup/host/hr_proc.c
+, agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/system.c, agent/mibgroup/mibII/tcp.c
+, agent/mibgroup/mibII/udp.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/smux/snmp_bgp.c,
+ agent/mibgroup/smux/snmp_ospf.c,
+ agent/mibgroup/smux/snmp_rip2.c,
+ agent/mibgroup/ucd-snmp/hpux.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/v2party/acl_vars.c,
+ agent/mibgroup/v2party/alarm.c,
+ agent/mibgroup/v2party/context_vars.c,
+ agent/mibgroup/v2party/event.c,
+ agent/mibgroup/v2party/party_vars.c,
+ agent/mibgroup/v2party/view_vars.c, apps/snmptrapd.c,
+ apps/snmptrapd_handlers.c, snmplib/snmp_api.c,
+ snmplib/snmp_api.h:
+
+ - (agent_read_config.c, snmp_vars.c, dlmod_mib.c, util_funcs.c,
+ dummy.c, wombat.c, hr_device.c, hr_disk.c, hr_filesys.c,
+ hr_network.c, hr_partition.c, hr_print.c, hr_proc.c, hr_storage.c,
+ hr_swinst.c, hr_swrun.c, hr_system.c, at.c, icmp.c, interfaces.c,
+ ip.c, snmp_mib.c, system.c, tcp.c, udp.c, var_route.c, snmp_bgp.c,
+ snmp_ospf.c, snmp_rip2.c, hpux.c, pass.c, pass_persist.c,
+ registry.c, acl_vars.c, alarm.c, context_vars.c, event.c,
+ party_vars.c, view_vars.c, snmptrapd.c, snmptrapd_handlers.c,
+ snmp_api.c, snmp_api.h): Patch from Michael Slifcak:
+ - rename compare -> snmp_oid_compare().
+
+1998-09-14 12:35 hardaker
+
+ * man/Makefile.in:
+
+ - (Makefile.in): Patch from Michael Slifcak:
+ - install snmp_sess_api.3.
+
+1998-09-14 09:25 hardaker
+
+ * agent/mibgroup/snmpv3/snmpEngine.c:
+
+ file snmpEngine.c was initially added on branch V3-b1.
+
+1998-09-14 09:25 hardaker
+
+ * agent/mibgroup/snmpv3/snmpEngine.h:
+
+ file snmpEngine.h was initially added on branch V3-b1.
+
+1998-09-14 09:21 hardaker
+
+ * snmplib/snmpv3.c:
+
+ file snmpv3.c was initially added on branch V3-b1.
+
+1998-09-14 09:21 hardaker
+
+ * snmplib/snmpv3.h:
+
+ file snmpv3.h was initially added on branch V3-b1.
+
+1998-09-13 21:09 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version update: 3.6.pre2
+
+1998-09-13 21:06 hardaker
+
+ * snmplib/: mib.c, read_config.c:
+
+ - (mib.c, read_config.c): refix the non-malloced configuration vars.
+
+1998-09-13 21:05 hardaker
+
+ * README:
+
+ - (README): Name addition.
+
+1998-09-13 20:30 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): prevent double init_snmp()s.
+
+1998-09-13 20:28 hardaker
+
+ * snmplib/read_config.c:
+
+ - (read_config.c): not finding a config file is printed with DEBUGP() instead.
+
+1998-09-13 20:18 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): define usage mispelling SNMP_BAD_PARSE -> SNMPERR_BAD_PARSE.
+
+1998-09-13 20:11 hardaker
+
+ * apps/snmptable.c, apps/snmptranslate.c,
+ snmplib/mib.c, snmplib/mib.h, snmplib/parse.c,
+ snmplib/parse.h:
+
+ - (snmptable.c, snmptranslate.c, mib.c, mib.h, parse.c, parse.h):
+ - merge into main line from the 3-6-pre1-trans branch.
+
+1998-09-13 18:24 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Patch from Michael Slifcak:
+ - exit -> return.
+
+1998-09-12 09:08 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in): Move CAN_USE_NLIST tests below arch .h files.
+
+1998-09-12 09:02 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Patch from Michael Slifcak:
+ - bug fix to check for NULL session pointer before using it.
+
+1998-09-12 08:56 hardaker
+
+ * mibs/Makefile.in, ov/Makefile.in:
+
+ - (ov/Makefile.in, mibs/Makefile.in): Patch from Michael Slifcak:
+ - remove duplicate sections already defined in Makefile.top.
+
+1998-09-12 08:54 hardaker
+
+ * agent/mibgroup/.cvsignore:
+
+ - (.cvsignore): add mib_module_shutdown.h
+
+1998-09-12 08:54 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): Don't force cc anymore, allow gcc to go first.
+
+1998-09-12 08:53 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in): move un-configured defines above @TOP@.
+
+1998-09-12 08:46 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): prototype move init_snmp() above init_snmp_session.
+
+1998-09-11 09:24 hardaker
+
+ * acconfig.h, config.h.in, apps/snmp_parse_args.c
+, apps/snmpdelta.c, man/snmp_sess_api.3,
+ snmplib/asn1.c, snmplib/int64.c, snmplib/int64.h
+, snmplib/libsnmp.h, snmplib/md5.c, snmplib/mib.c
+, snmplib/parse.c, snmplib/parse.h,
+ snmplib/party_parse.c, snmplib/snmp_api.c,
+ snmplib/snmp_api.h, snmplib/snmp_auth.c,
+ snmplib/snmp_client.c, snmplib/snmp_client.h,
+ snmplib/system.c, snmplib/system.h, win32/config.h
+, win32/libsnmp_dll/libsnmp.def:
+
+ - (*): Merged the MT changes into the main branch.
+
+1998-09-09 21:37 hardaker
+
+ * snmplib/libsnmp.h:
+
+ file libsnmp.h was initially added on branch Ext-3-5-1-MT.
+
+1998-09-09 21:36 hardaker
+
+ * man/snmp_sess_api.3:
+
+ file snmp_sess_api.3 was initially added on branch Ext-3-5-1-MT.
+
+1998-09-09 16:55 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): fix trap stuff broken by the code merge.
+
+1998-09-09 16:09 hardaker
+
+ * win32/: win32.dsw, win32.opt, libsnmp/libsnmp.dsp
+, libsnmp/libsnmp.plg, libsnmp_dll/libsnmp_dll.dsp
+, libsnmp_dll/libsnmp_dll.plg,
+ snmpbulkwalk/snmpbulkwalk.dsp, snmpbulkwalk/snmpbulkwalk.plg
+, snmpdelta/snmpdelta.dsp, snmpdelta/snmpdelta.plg
+, snmpget/snmpget.dsp, snmpget/snmpget.plg,
+ snmpgetnext/snmpgetnext.dsp, snmpgetnext/snmpgetnext.plg
+, snmpset/snmpset.dsp, snmpset/snmpset.plg,
+ snmpstatus/snmpstatus.dsp, snmpstatus/snmpstatus.plg,
+ snmptest/snmptest.dsp, snmptest/snmptest.plg,
+ snmptranslate/snmptranslate.dsp,
+ snmptranslate/snmptranslate.plg, snmptrap/snmptrap.dsp,
+ snmptrap/snmptrap.plg, snmpwalk/snmpwalk.dsp,
+ snmpwalk/snmpwalk.plg:
+
+ - (*): Merge into main branch from 3.5.1 branch.
+
+1998-09-09 15:37 hardaker
+
+ * snmplib/: Makefile.in, acl.h, asn1.c, asn1.h
+, md5.h, mib.c, parse.c, parse.h,
+ snmp.c, snmp.h, snmp_api.c, snmp_api.h,
+ snmp_client.c, snmp_client.h, snmp_impl.h,
+ system.c, vacm.h, view.h:
+
+ - (*): Merge into main branch from 3.5.1 branch.
+
+1998-09-09 15:34 hardaker
+
+ * agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory.h,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.h,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.h, apps/Makefile.in
+, apps/snmp_parse_args.c, apps/snmpdelta.c,
+ apps/snmptest.c, apps/snmptranslate.c,
+ apps/snmptrap.c, apps/snmptrapd.c,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/main.c,
+ apps/snmpnetstat/netstat.h, man/mib_api.3,
+ man/snmp_api.3, man/snmpd.1.def, man/snmpd.conf.5.def
+, man/snmptranslate.1, man/snmptrapd.8,
+ man/variables.5:
+
+ - (*): Merge into main branch from 3.5.1 branch.
+
+1998-09-09 15:30 hardaker
+
+ * .cvsignore, COPYING, ChangeLog, Makefile.in
+, NEWS, README, acconfig.h, config.h.in
+, configure, configure.in, agent/Makefile.in
+, agent/auto_nlist.c, agent/snmp2p.c,
+ agent/snmp_agent.c, agent/snmp_vars.c, agent/snmpd.c
+, agent/snmpd.h, agent/mibgroup/Makefile.in,
+ agent/mibgroup/ucd_snmp.h, agent/mibgroup/util_funcs.c
+, agent/mibgroup/mibII/at.c,
+ agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/system.h,
+ agent/mibgroup/mibII/tcp.c, agent/mibgroup/smux/smux.c,
+ agent/mibgroup/smux/snmp_bgp.c,
+ agent/mibgroup/smux/snmp_bgp.h,
+ agent/mibgroup/smux/snmp_ospf.c,
+ agent/mibgroup/smux/snmp_ospf.h,
+ agent/mibgroup/smux/snmp_rip2.c,
+ agent/mibgroup/smux/snmp_rip2.h:
+
+ - (*): Merge into main branch from 3.5.1 branch.
+
+1998-09-07 19:42 marz
+
+ * win32/snmpdelta/snmpdelta.dsp:
+
+ file snmpdelta.dsp was initially added on branch Ext-3-5-patches.
+
+1998-09-07 19:42 marz
+
+ * win32/snmpdelta/snmpdelta.plg:
+
+ file snmpdelta.plg was initially added on branch Ext-3-5-patches.
+
+1998-09-07 19:42 marz
+
+ * win32/snmptest/snmptest.plg:
+
+ file snmptest.plg was initially added on branch Ext-3-5-patches.
+
+1998-09-07 19:42 marz
+
+ * win32/snmptrap/snmptrap.dsp:
+
+ file snmptrap.dsp was initially added on branch Ext-3-5-patches.
+
+1998-09-07 19:42 marz
+
+ * win32/snmptest/snmptest.dsp:
+
+ file snmptest.dsp was initially added on branch Ext-3-5-patches.
+
+1998-09-07 19:42 marz
+
+ * win32/snmptrap/snmptrap.plg:
+
+ file snmptrap.plg was initially added on branch Ext-3-5-patches.
+
+1998-09-07 12:27 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat_freebsd2.h:
+
+ file vmstat_freebsd2.h was initially added on branch Ext-3-5-patches.
+
+1998-09-07 12:27 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory_freebsd2.h:
+
+ file memory_freebsd2.h was initially added on branch Ext-3-5-patches.
+
+1998-09-03 14:29 nba
+
+ * local/fixproc:
+
+ - (fixproc): added comment to test CVS.
+
+1998-09-02 18:50 hardaker
+
+ * agent/: agent_read_config.c, agent_read_config.h,
+ snmp_vars.c, snmpd.c, snmpd.h:
+
+ - (agent_read_config.c, agent_read_config.h, snmp_vars.c, snmpd.c,
+ snmpd.h):
+ - support mib-module shutdown functions.
+ - do a minimal persistent cache implementation and read it at start up.
+ - test with beginnings (wrong place) of agentBoots variable.
+
+1998-09-02 18:48 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): use init_snmp instead of init_mib().
+
+1998-09-02 18:48 hardaker
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ - (libsnmp.def): find_module.
+
+1998-09-02 18:47 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmp_api.c, snmp_api.h): init_snmp().
+
+1998-09-02 18:47 hardaker
+
+ * snmplib/: mib.c, mib.h, read_config.c,
+ read_config.h:
+
+ - (mib.c, mib.h, read_config.c, read_config.h):
+ - pre/post mib loading config files.
+ - create init_snmp() to wrap other fuctions.
+ - new snmp.conf directives: mibs, mibdirs, mibfile.
+
+1998-09-02 18:44 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): typo.
+
+1998-09-02 18:44 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - persistent config file question.
+
+1998-09-02 18:43 hardaker
+
+ * TODO:
+
+ - (TODO): added security checks.
+
+1998-08-31 13:32 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): add a blank line to the end of the trapd output for parsing.
+
+1998-08-31 13:02 hardaker
+
+ * agent/mibgroup/mibII/: interfaces.c (Ext-3-5-patches.2),
+ interfaces.c:
+
+ - (interfaces.c): missing return on ifInErrors results.
+
+1998-08-14 08:44 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat_freebsd2.c:
+
+ file vmstat_freebsd2.c was initially added on branch Ext-3-5-patches.
+
+1998-08-14 08:44 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory_freebsd2.c:
+
+ file memory_freebsd2.c was initially added on branch Ext-3-5-patches.
+
+1998-07-22 16:23 hardaker
+
+ * Makefile.in, sedscript.in:
+
+ - (Makefile.in, sedscript.in): fix sedscript includes.
+
+1998-07-22 15:35 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): don't change running environment variables with strtok.
+
+1998-07-20 17:14 hardaker
+
+ * local/snmpcheck.def:
+
+ - (snmpcheck.def): work around for new multi-depth mib tables..
+
+1998-07-17 13:22 hardaker
+
+ * mibs/RFC-1215.txt:
+
+ - (RFC-1215.txt): created an empty mib module for importing of TRAP-TYPE.
+
+1998-07-17 13:11 hardaker
+
+ * mibs/: UCD-SNMP-MIB.inc, UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.inc, UCD-SNMP-MIB.txt):
+ - created smicng input file.
+ - fixed the UCD-SNMP mib to deal with most smic errors.
+
+1998-07-15 15:46 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory.h:
+
+ - (memory.h): MEMSWAPMINIMUM wasn't being used.
+
+1998-07-15 15:46 hardaker
+
+ * sedscript.in:
+
+ - (sedscript.in): using_module changes.
+
+1998-07-10 09:42 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): wrong pdu pointer for snmpv2c traps.
+
+1998-07-08 15:51 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.6.pre1 )
+
+1998-07-08 15:32 hardaker
+
+ * agent/dlmods/dlmod_mib.c:
+
+ - (dlmod_mib.c): -Wall fixes.
+
+1998-07-08 15:31 hardaker
+
+ * agent/: agent_read_config.c, snmpd.c:
+
+ - (agent_read_config.c, snmpd.c): -Wall fixes.
+
+1998-07-08 15:31 hardaker
+
+ * apps/: snmptrapd.c, snmptrapd_handlers.c:
+
+ - (snmptrapd.c, snmptrapd_handlers.c): -Wall fixes.
+
+1998-07-08 15:31 hardaker
+
+ * snmplib/: read_config.c, read_config.h:
+
+ - (read_config.c, read_config.h): -Wall corrections.
+
+1998-07-08 14:45 hardaker
+
+ * snmplib/: read_config.c, read_config.h:
+
+ - (read_config.c, read_config.h): bug fixes.
+
+1998-07-08 14:45 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): include fixes.
+
+1998-07-08 14:45 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): include snmp_api.h
+
+1998-07-08 14:45 hardaker
+
+ * agent/mibgroup/ucd-snmp/: pass_persist.c, pass_persist.h
+:
+
+ - (pass_persist.c, pass_persist.h): cleaned up and -Wall fixes.
+
+1998-07-08 14:44 hardaker
+
+ * agent/mibgroup/ucd-snmp/versioninfo.c:
+
+ - (versioninfo.c): include system.h
+
+1998-07-08 14:44 hardaker
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ - (pass.c): include sys/wait.h
+
+1998-07-08 14:44 hardaker
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ - (ucd_snmp.h): removed ucd-snmp/pass_persist from default include list.
+
+1998-07-08 14:43 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): include fixes.
+
+1998-07-08 14:30 hardaker
+
+ * agent/mibgroup/ucd-snmp/: pass_persist.c, pass_persist.h
+, pass-persist.c, pass-persist.h:
+
+ - (pass-persist.c pass-persist.h): moved to pass_persist.[ch].
+
+1998-07-08 14:21 hardaker
+
+ * snmplib/: read_config.c, read_config.h:
+
+ - (read_config.c, read_config.h): create unregister_read..() function.
+
+1998-07-08 14:20 hardaker
+
+ * agent/mibgroup/misc/dlmod.c:
+
+ - (dlmod.c): use snmpd_ register_read_config() wrappers.
+
+1998-07-08 14:20 hardaker
+
+ * agent/: agent_read_config.c, agent_read_config.h:
+
+ - (agent_read_config.c, agent_read_config.h): wrappers for real read_config()s.
+
+1998-07-08 14:04 hardaker
+
+ * Makefile.in, Makefile.top, configure,
+ configure.in, agent/Makefile.in,
+ agent/dlmods/.cvsignore, agent/dlmods/Makefile.in,
+ agent/dlmods/dlmod_mib.c, agent/dlmods/dlmod_mib.h,
+ agent/dlmods/example.c, agent/dlmods/example.h,
+ agent/mibgroup/misc/dlmod.c, agent/mibgroup/misc/dlmod.h
+, apps/Makefile.in, apps/snmpnetstat/Makefile.in
+, mibs/DLMOD-MIB.txt, mibs/Makefile.in,
+ snmplib/Makefile.in:
+
+ - (Makefile.in, Makefile.top, configure, configure.in, Makefile.in,
+ .cvsignore, Makefile.in, dlmod_mib.c, dlmod_mib.h, example.c,
+ example.h, dlmod.c, dlmod.h, Makefile.in, Makefile.in,
+ DLMOD-MIB.txt, Makefile.in, Makefile.in): Patch from Eugene
+ Polovnikov:
+ - new dlmod set.
+ - fix configure script.
+
+1998-07-08 13:08 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): Patch from Niels Baggesen:
+ - fix for missing object identifier labels.
+
+1998-07-08 13:03 hardaker
+
+ * snmplib/system.c:
+
+ - (system.c): don't free env pointers that are created.
+
+1998-07-08 13:02 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - (interfaces.c): make hp_interfaces structure static.
+
+1998-07-08 12:58 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Patch from Joe Marzot:
+ - fix "number of retries" bug.
+ - remove odd timeout calculation code for retries > 3.
+
+1998-07-08 12:57 hardaker
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ - (ucd_snmp.h): added pass-persist module.
+
+1998-07-08 12:56 hardaker
+
+ * agent/: read_config.c, read_config.h:
+
+ - (read_config.c, read_config.h): removed from agent dir.
+
+1998-07-08 12:34 hardaker
+
+ * agent/mibgroup/: struct.h, util_funcs.c,
+ util_funcs.h, ucd-snmp/pass-persist.c,
+ ucd-snmp/pass-persist.h:
+
+ - (struct.h, util_funcs.c, util_funcs.h, pass-persist.c,
+ pass-persist.h): Patch from Michael Douglass:
+ - create a pass-persist module to handle continuously running pass throughs.
+
+1998-07-08 12:27 hardaker
+
+ * win32/: win32.opt, libsnmp/libsnmp.dsp,
+ libsnmp/libsnmp.plg, libsnmp_dll/libsnmp.def,
+ libsnmp_dll/libsnmp_dll.plg, snmpbulkwalk/snmpbulkwalk.dsp
+, snmpbulkwalk/snmpbulkwalk.plg, snmpget/snmpget.dsp
+, snmpget/snmpget.plg, snmpgetnext/snmpgetnext.dsp
+, snmpgetnext/snmpgetnext.plg, snmpset/snmpset.dsp
+, snmpset/snmpset.plg, snmpstatus/snmpstatus.dsp,
+ snmpstatus/snmpstatus.plg, snmptranslate/snmptranslate.dsp
+, snmptranslate/snmptranslate.plg, snmpwalk/snmpwalk.dsp
+, snmpwalk/snmpwalk.plg:
+
+ - (win32.opt, libsnmp.dsp, libsnmp.plg, libsnmp.def, libsnmp_dll.plg,
+ snmpbulkwalk.dsp, snmpbulkwalk.plg, snmpget.dsp, snmpget.plg,
+ snmpgetnext.dsp, snmpgetnext.plg, snmpset.dsp, snmpset.plg,
+ snmpstatus.dsp, snmpstatus.plg, snmptranslate.dsp,
+ snmptranslate.plg, snmpwalk.dsp, snmpwalk.plg): Patch from Joe
+ Marzot:
+ - win32 update.
+
+1998-07-01 15:57 hardaker
+
+ * apps/: snmptrapd.c, snmptrapd_handlers.c:
+
+ - (snmptrapd.c, snmptrapd_handlers.c):
+ - fix extensiblity checking of oids.
+ - seperate running of external command into new function.
+
+1998-07-01 15:56 hardaker
+
+ * snmplib/: read_config.c, read_config.h:
+
+ - (read_config.c, read_config.h): minor spacing changes.
+
+1998-07-01 15:56 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h, system.h:
+
+ - (snmp_api.c, snmp_api.h, system.h):
+ - added DEBUGPOID(name, namelen);
+ - moved DEBUGP definition into snmp_api.h where it belongs.
+
+1998-07-01 11:28 hardaker
+
+ * snmplib/: Makefile.in, read_config.c, read_config.h
+, snmp_api.c, snmp_api.h:
+
+ - (configure, configure.in, Makefile.in, agent_read_config.c,
+ agent_read_config.h, snmp_vars.c, snmp_vars.h, snmpd.c, Makefile.in,
+ struct.h, pass.h, Makefile.in, snmptrapd.c, snmptrapd_handlers.c,
+ snmptrapd_handlers.h, Makefile.in, read_config.c, read_config.h,
+ snmp_api.c, snmp_api.h):
+ - moved read_config support into the library and use it.
+ - beginnings of snmptrapd extensibility.
+
+1998-07-01 11:23 hardaker
+
+ * configure, configure.in, agent/Makefile.in
+, agent/agent_read_config.c, agent/agent_read_config.h
+, agent/snmp_vars.c, agent/snmp_vars.h,
+ agent/snmpd.c, agent/mibgroup/Makefile.in,
+ agent/mibgroup/struct.h, agent/mibgroup/ucd-snmp/pass.h
+, apps/Makefile.in, apps/snmptrapd.c,
+ apps/snmptrapd_handlers.c, apps/snmptrapd_handlers.h:
+
+ - (configure, configure.in, Makefile.in, agent_read_config.c,
+ agent_read_config.h, snmp_vars.c, snmp_vars.h, snmpd.c, Makefile.in,
+ struct.h, pass.h, Makefile.in, snmptrapd.c, snmptrapd_handlers.c,
+ snmptrapd_handlers.h, Makefile.in, read_config.c, read_config.h,
+ snmp_api.c, snmp_api.h):
+ - moved read_config support into the library and use it.
+ - beginnings of snmptrapd extensibility.
+
+1998-06-28 09:30 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): fix snmp_add_var().
+
+1998-06-26 10:45 hardaker
+
+ * agent/mibgroup/smux/: smux.c, snmp_bgp.c, snmp_ospf.c
+, snmp_rip2.c, snmp_rip2.h:
+
+ - (smux.c, snmp_bgp.c, snmp_ospf.c, snmp_rip2.c, snmp_rip2.h): Patch
+ from Niels Baggesen:
+ - Fix for new defines and proper header includes.
+
+1998-06-26 10:42 hardaker
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ - (disk.c): Patch from Michael Douglass:
+ - fix calculation of totaldisk by doing block division first to
+ protect against 32 bit overflows.
+
+1998-06-24 11:40 hardaker
+
+ * .cvsignore:
+
+ - (.cvsignore): added .index.
+
+1998-06-24 11:40 hardaker
+
+ * agent/: snmpd.c, snmpd.h:
+
+ - (snmpd.c, snmpd.h):
+ - created (poorly) send_trap_pdu() for sending v2 traps from mib modules.
+
+1998-06-24 11:08 hardaker
+
+ * mibs/: .cvsignore, UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): Patch from Niels Baggesen:
+ - shutdown trap specifications.
+ - misc mib fixes.
+
+1998-06-24 10:58 hardaker
+
+ * agent/.cvsignore, apps/.cvsignore:
+
+ - (.cvsignore, .cvsignore): a few updates.
+
+1998-06-24 10:57 hardaker
+
+ * man/.cvsignore:
+
+ - (man/.cvsignore): ignore .html files.
+
+1998-06-24 10:56 hardaker
+
+ * apps/snmpset.c, apps/snmptest.c, apps/snmptrap.c
+, snmplib/snmp_api.c, snmplib/snmp_api.h:
+
+ - (snmpset.c, snmptest.c, snmptrap.c, snmp_api.c, snmp_api.h):
+ - moved hex_to_binary, ascii_to_binary, and snmp_add_var to snmplib.
+
+1998-06-24 10:31 hardaker
+
+ * snmplib/: Makefile.in, snmp_api.c, snmp_api.h
+:
+
+ - (Makefile.in, snmp_api.c, snmp_api.h): create snmp_pdu_add_variable().
+
+1998-06-24 10:30 hardaker
+
+ * man/Makefile.in:
+
+ - (Makefile.in): man->html make specification.
+
+1998-06-22 09:16 hardaker
+
+ * apps/snmpnetstat/main.c:
+
+ - (main.c): Patch from Jerry G. DeLapp:
+ - commented out trailing #endif comment.
+
+1998-06-19 13:14 hardaker
+
+ * ChangeLog:
+
+ - (ChangeLog): update for 3.5.
+
+1998-06-19 13:13 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.5 )
+
+1998-06-19 13:12 hardaker
+
+ * NEWS:
+
+ - (NEWS): Last update for 3.5.
+
+1998-06-19 13:01 hardaker
+
+ * agent/Makefile.in, snmplib/Makefile.in:
+
+ - (Makefile.in): make depend.
+
+1998-06-19 12:53 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): memset to 0 the entire subtree struct.
+
+1998-06-19 12:50 hardaker
+
+ * agent/mibgroup/util_funcs.c:
+
+ - (util_funcs.c): fix checkmib() in case we get called on a get when
+ we really shouldn't (bad artifact of new tree structure).
+
+1998-06-19 12:05 hardaker
+
+ * agent/mibgroup/dummy/dummy.c:
+
+ - (dummy.c): mention auto_nlist().
+
+1998-06-19 12:04 hardaker
+
+ * agent/mibgroup/dummy/AddModuleForDummies.txt:
+
+ - (AddModuleForDummies.txt): update to fix paths and misc stuff.
+
+1998-06-19 12:03 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): fix register_mib() to init pointers to null.
+
+1998-06-19 08:59 hardaker
+
+ * mibs/Makefile.in:
+
+ - (Makefile.in): Patch from Cristian Estan:
+ - install IPFWACC mib.
+
+1998-06-19 08:59 hardaker
+
+ * agent/mibgroup/misc/ipfwacc.h, mibs/IPFWACC-MIB.txt:
+
+ - (ipfwacc.h, IPFWACC-MIB.txt): Patch from Cristian Estan:
+ - turn into a correct table.
+
+1998-06-19 08:58 hardaker
+
+ * EXAMPLE.conf.def:
+
+ - (EXAMPLE.conf.def): Patch from Cristian Estan:
+ - example output corrections.
+
+1998-06-19 08:46 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): warn BSDI users against /usr/ucb/cc.
+
+1998-06-19 08:41 hardaker
+
+ * FAQ:
+
+ - (FAQ): update from Dave Shield: not found modules with configure?.
+
+1998-06-17 15:28 hardaker
+
+ * agent/mibgroup/dummy/dummy.h:
+
+ - (dummy.h): add DUMMY-MIB by default.
+
+1998-06-17 15:27 hardaker
+
+ * agent/mibgroup/README:
+
+ - (README): mention dummy group.
+
+1998-06-17 08:21 hardaker
+
+ * README, agent/mibgroup/dummy/AddModuleForDummies.txt
+, agent/mibgroup/dummy/DUMMY-MIB.txt,
+ agent/mibgroup/dummy/dummy.c, agent/mibgroup/dummy/dummy.h
+:
+
+ - (README, AddModuleForDummies.txt, DUMMY-MIB.txt, dummy.c, dummy.h):
+ Patch from Jakob Ellerstedt:
+ - mib module documentation and example for dummies.
+
+1998-06-17 08:11 hardaker
+
+ * snmplib/mib.h:
+
+ - (mib.h): Patch from Niels Baggesen:
+ - remove 2nd init_mib() prototype.
+
+1998-06-17 08:10 hardaker
+
+ * snmplib/asn1.c:
+
+ - (asn1.c): Patch from Niels Baggesen:
+ - bcopy -> memcpy.
+
+1998-06-17 08:10 hardaker
+
+ * man/: Makefile.in, snmpbulkwalk.1, snmpcmd.1,
+ snmpdelta.1, snmpget.1, snmpgetnext.1, snmpset.1
+, snmpstatus.1, snmptable.1, snmptrap.1,
+ snmpwalk.1:
+
+ - (Makefile.in, snmpbulkwalk.1, snmpcmd.1, snmpdelta.1, snmpget.1,
+ snmpgetnext.1, snmpset.1, snmpstatus.1, snmptable.1, snmptrap.1,
+ snmpwalk.1): Patch from Niels Baggesen:
+ - documentation cleanup and centralization of common options.
+
+1998-06-17 08:08 hardaker
+
+ * apps/snmpdelta.c:
+
+ - (snmpdelta.c): usage() update.
+
+1998-06-17 08:08 hardaker
+
+ * agent/: snmp2p.c, snmpd.c, snmpd.h:
+
+ - (snmp2p.c, snmpd.c, snmpd.h): Patch from Niels Baggesen:
+ - misc type fixes.
+
+1998-06-12 15:17 hardaker
+
+ * agent/mibgroup/misc/ipfwacc.h, mibs/IPFWACC-MIB.txt,
+ mibs/UCD-SNMP-MIB.txt:
+
+ - (ipfwacc.h, IPFWACC-MIB.txt, UCD-SNMP-MIB.txt):
+ - create and use a ucdExperimental section for the ipfwacc mib till
+ it stabilizes.
+
+1998-06-12 13:48 hardaker
+
+ * agent/kernel.c:
+
+ - (kernel.c): don't print klread errors unless in debugging mode.
+
+1998-06-12 13:43 hardaker
+
+ * NEWS:
+
+ - (NEWS): 64bit fix mentioned.
+
+1998-06-12 13:13 hardaker
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ - (libsnmp.def): add setenv to the list.
+
+1998-06-12 13:13 hardaker
+
+ * win32/config.h:
+
+ - (win32/config.h): don't have setenv.
+
+1998-06-12 13:13 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): function name typo.
+
+1998-06-12 13:13 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): trap types were int's not longs (failed under 64bit arch).
+
+1998-06-12 13:12 hardaker
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ - (disk.c): percentage check was backwards.
+
+1998-06-12 10:12 hardaker
+
+ * NEWS:
+
+ - (NEWS): minor update.
+
+1998-06-12 10:12 hardaker
+
+ * EXAMPLE.conf.def:
+
+ - (EXAMPLE.conf.def): show vacm example for public/private from anywhere.
+
+1998-06-12 08:52 hardaker
+
+ * EXAMPLE.conf.def, FAQ:
+
+ - (EXAMPLE.conf.def, FAQ): Patch from Dave Shield:
+ - update for VACM stuff.
+
+1998-06-10 15:47 hardaker
+
+ * agent/: snmp2p.c, snmpd.c, snmpd.h:
+
+ - (snmp2p.c, snmpd.c, snmpd.h): -Wall cleanups.
+
+1998-06-10 15:31 hardaker
+
+ * NEWS:
+
+ - (NEWS): update.
+
+1998-06-10 15:30 hardaker
+
+ * TODO:
+
+ - (TODO): added Dave's list.
+
+1998-06-10 14:15 hardaker
+
+ * version.h, bug-report, sedscript.in:
+
+ version tag ( 3.5.pre2 )
+
+1998-06-10 08:53 hardaker
+
+ * agent/: Makefile.in, snmp2p.c, snmpd.c:
+
+ - (Makefile.in, snmp2p.c, snmpd.c): Patch from Dave Shield:
+ - starts to separate out the historic SNMPv2 stuff.
+ - does a bit of 'code tidying'.
+ - starts to move towards port-specific handlers.
+
+1998-06-10 07:11 hardaker
+
+ * config.h.in:
+
+ - (config.h.in): have_setenv.
+
+1998-06-08 14:55 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): undid redo of comment of gettimeofday().
+
+1998-06-08 14:22 hardaker
+
+ * snmplib/: parse.c, parse.h, snmp_api.c,
+ snmp_api.h, snmp_client.c:
+
+ - (parse.c, parse.h, snmp_api.c, snmp_api.h, snmp_client.c): Patch
+ from Joe Marzot:
+ - async stuff added.
+ - get_tc added.
+ - better comments in some places.
+
+1998-06-08 14:16 hardaker
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ - (libsnmp.def): Patch from Joe Marzot: w32 update.
+
+1998-06-08 14:12 hardaker
+
+ * Makefile.in:
+
+ - (Makefile.in): Patch from Joe Marzot:
+ - remove more config created headers on make configclean.
+
+1998-06-08 13:59 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def): update rfc # for vacm reference.
+
+1998-06-08 13:59 hardaker
+
+ * README:
+
+ - (README): Added Eugene's name.
+
+1998-06-08 12:34 hardaker
+
+ * agent/mibgroup/Makefile.in:
+
+ - (Makefile.in): create a .c -> .o rule to make sure and place the
+ object files in the appropriate subdirectories.
+
+1998-06-08 10:50 hardaker
+
+ * FAQ:
+
+ - (FAQ): url type splitting.
+
+1998-06-05 11:02 hardaker
+
+ * agent/mibgroup/misc/dlmod.c:
+
+ - (dlmod.c):
+ - change {de,}init functions to _dynamic_{de,}init_MODULE.
+ - use SNMPLIBPATH instead of hard coded /usr/local/lib.
+
+1998-06-05 10:54 hardaker
+
+ * snmplib/: asn1.c, mib.c, parse.h, system.c
+, system.h:
+
+ - (asn1.c, mib.c, parse.h, system.c, system.h): Patch from Niels Baggesen:
+ - MIB_ACCESS define changes.
+ - setenv implementation.
+ - ifdef wrappers for OPAQUE_SPECIAL_TYPES.
+
+1998-06-05 10:53 hardaker
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ - (hr_swrun.c): Patch from Niels Baggesen:
+ - test for null pointer.
+
+1998-06-05 10:52 hardaker
+
+ * maketarget:
+
+ - (maketarget): Patch from Niels Baggesen:
+ - support for larger tree depths.
+
+1998-06-05 10:52 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): Patch from Niels Baggesen:
+ - test for setenv.
+
+1998-06-03 14:26 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.5.pre1 )
+
+1998-06-03 14:24 hardaker
+
+ * agent/Makefile.in:
+
+ - (Makefile.in): read_config.o is mibmodule header dependant too.
+
+1998-06-03 14:23 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ snmplib/Makefile.in:
+
+ - (Makefile.in's): make depend.
+
+1998-06-03 14:21 hardaker
+
+ * agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c, apps/snmpset.c,
+ snmplib/asn1.h, snmplib/int64.c, snmplib/int64.h,
+ snmplib/mib.c, snmplib/snmp_api.c:
+
+ - (hr_disk.c, hr_swinst.c, hr_swrun.c, hr_system.c, snmpset.c, asn1.h,
+ int64.c, int64.h, mib.c, snmp_api.c):
+ - -Wall fixes.
+
+1998-06-03 14:02 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): fix new --with-cc and --with-cflags arguments.
+
+1998-06-03 13:52 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in, freebsd2.h):
+ - move configurable defines to configure rather than in freebsd2.h.
+
+1998-06-03 13:43 hardaker
+
+ * config.h.in, configure, configure.in,
+ apps/snmptrapd.c:
+
+ - (config.h.in, configure, configure.in, snmptrapd.c):
+ - check for getdtablesize and use a generic if not available.
+
+1998-06-03 13:39 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): New flags:
+ - --with-cc=CC
+ - --with-cflags=CFLAGS
+
+1998-06-03 12:16 hardaker
+
+ * agent/snmp_agent.c, snmplib/snmp_api.c,
+ snmplib/snmp_auth.c, snmplib/snmp_impl.h:
+
+ - (snmp_agent.c, snmp_api.c, snmp_auth.c, snmp_impl.h):
+ - fix pdu->versions to be all ints.
+
+1998-06-03 11:29 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): missed a needed OPAQUE_SPECIAL_TYPES ifdef.
+
+1998-06-03 11:27 hardaker
+
+ * agent/: snmp_agent.c, snmpd.c:
+
+ - (snmp_agent.c, snmpd.c): include mibII/snmp_mib.h.
+
+1998-06-03 11:10 hardaker
+
+ * agent/mibgroup/: README, example.c, example.h,
+ wombat.c, wombat.h, examples/example.c,
+ examples/example.h, examples/wombat.c,
+ examples/wombat.h:
+
+ - (README, example.c, example.h, wombat.c, wombat.h, example.c,
+ example.h, wombat.c, wombat.h):
+ - moved wombat and example to examples/ directory.
+
+1998-06-03 11:06 hardaker
+
+ * agent/mibgroup/: example.c, example.h, misc/dlmod.c
+, misc/dlmod.h:
+
+ - (example.c, example.h, dlmod.c, dlmod.h): Patch from Eugene Polovnikov:
+ - implement a dynamic loading module for loading shared object mib modules.
+
+1998-06-03 10:58 hardaker
+
+ * README:
+
+ - (README): mention Cristian Estan in the coders list.
+
+1998-06-03 10:58 hardaker
+
+ * INSTALL:
+
+ - (INSTALL): mention ipfwacc
+
+1998-06-03 10:58 hardaker
+
+ * agent/mibgroup/misc/ipfwacc.c,
+ agent/mibgroup/misc/ipfwacc.h, mibs/IPFWACC-MIB.txt,
+ mibs/UCD-SNMP-MIB.txt:
+
+ - (ipfwacc.c, ipfwacc.h, IPFWACC-MIB.txt, UCD-SNMP-MIB.txt):
+ - moved ipfwacc to ucdavis.13 and removed ^Ms and some blank lines.
+
+1998-06-03 10:54 hardaker
+
+ * agent/mibgroup/misc/ipfwacc.h:
+
+ - (ipfwacc.h): config_add_mib(IPFWACC-MIB).
+
+1998-06-03 10:52 hardaker
+
+ * agent/mibgroup/misc/ipfwacc.c,
+ agent/mibgroup/misc/ipfwacc.h, mibs/IPFWACC-MIB.txt:
+
+ - (ipfwacc.c, ipfwacc.h, IPFWACC-MIB.txt): Patch from Cristian Estan:
+ - ip firewall accounting information mib implementation.
+
+1998-06-03 10:51 hardaker
+
+ * agent/mibgroup/: smux.c, smux.h, smux_gated.h,
+ snmp_bgp.c, snmp_bgp.h, snmp_ospf.c, snmp_ospf.h
+, snmp_rip2.c, snmp_rip2.h, smux/smux.c,
+ smux/smux.h, smux/snmp_bgp.c, smux/snmp_bgp.h,
+ smux/snmp_ospf.c, smux/snmp_ospf.h, smux/snmp_rip2.c
+, smux/snmp_rip2.h:
+
+ - (smux.c, smux.h, smux_gated.h, snmp_bgp.c, snmp_bgp.h, snmp_ospf.c,
+ snmp_ospf.h, snmp_rip2.c, snmp_rip2.h, smux.c, smux.h, snmp_bgp.c,
+ snmp_bgp.h, snmp_ospf.c, snmp_ospf.h, snmp_rip2.c, snmp_rip2.h):
+ - moved smux stuff into a smux sub-directory.
+
+1998-06-02 14:21 hardaker
+
+ * agent/auto_nlist.c, agent/auto_nlist.h,
+ agent/kernel.c, agent/snmp_agent.c, agent/snmpd.c
+, agent/mibgroup/host/hr_device.c,
+ agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_other.c,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_print.c, agent/mibgroup/host/hr_proc.c
+, agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c,
+ agent/mibgroup/host/hr_utils.c, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/var_route.c, apps/snmp_parse_args.c
+, apps/snmpdelta.c, apps/snmptable.c,
+ apps/snmptranslate.c, apps/snmptrapd.c,
+ snmplib/asn1.c, snmplib/mib.c, snmplib/parse.c
+, snmplib/parse.h, snmplib/snmp_auth.c,
+ snmplib/snmp_impl.h:
+
+ - (auto_nlist.c, auto_nlist.h, kernel.c, snmp_agent.c, snmpd.c,
+ hr_device.c, hr_disk.c, hr_filesys.c, hr_network.c, hr_other.c,
+ hr_partition.c, hr_print.c, hr_proc.c, hr_storage.c, hr_swinst.c,
+ hr_swrun.c, hr_system.c, hr_utils.c, at.c, interfaces.c,
+ var_route.c, snmp_parse_args.c, snmpdelta.c, snmptable.c,
+ snmptranslate.c, snmptrapd.c, freebsd2.h, hpux.h, linux.h, netbsd.h,
+ solaris.h, sysv.h, asn1.c, mib.c, parse.c, parse.h, snmp_auth.c,
+ snmp_impl.h): Patch from Niels Baggensen:
+ - make host resources work under NetBSD, FreeBSD, Solaris and Linux.
+ - SunOS4 almost works.
+ - Add -s/-S to command line options for printing of shorter oids.
+ - numerous bug fixes.
+
+1998-05-31 17:56 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - make it possible not to use opaque special types with new cmd line flag.
+
+1998-05-31 17:56 hardaker
+
+ * apps/snmpset.c:
+
+ - (snmpset.c): enable setting of opaque floats, doubles, int64s, uint64s.
+
+1998-05-31 17:55 hardaker
+
+ * snmplib/: asn1.c, asn1.h, int64.c, int64.h
+, mib.c, snmp.c, snmp_api.c, snmp_api.h
+, snmp_impl.h:
+
+ - (asn1.c, asn1.h, int64.c, int64.h, mib.c, snmp.c, snmp_api.c,
+ snmp_api.h, snmp_impl.h):
+ - implement special data types via opaques: float, double, int64, uint64s.
+
+1998-05-29 16:21 hardaker
+
+ * snmplib/snmp_impl.h:
+
+ - (snmp_impl.h): change pdu version from long to int.
+
+1998-05-29 16:20 hardaker
+
+ * configure, configure.in, agent/common_header.h
+, agent/snmp_agent.c, agent/snmp_vars.c,
+ agent/snmpd.c, agent/mibgroup/Makefile.in,
+ agent/mibgroup/acl_vars.c, agent/mibgroup/acl_vars.h,
+ agent/mibgroup/alarm.c, agent/mibgroup/alarm.h,
+ agent/mibgroup/at.c, agent/mibgroup/at.h,
+ agent/mibgroup/context_vars.c, agent/mibgroup/context_vars.h
+, agent/mibgroup/disk.c, agent/mibgroup/disk.h,
+ agent/mibgroup/errormib.c, agent/mibgroup/errormib.h,
+ agent/mibgroup/event.c, agent/mibgroup/event.h,
+ agent/mibgroup/extensible.c, agent/mibgroup/extensible.h
+, agent/mibgroup/host.h, agent/mibgroup/hpux.c,
+ agent/mibgroup/hpux.h, agent/mibgroup/hr_device.c,
+ agent/mibgroup/hr_device.h, agent/mibgroup/hr_disk.c,
+ agent/mibgroup/hr_disk.h, agent/mibgroup/hr_filesys.c,
+ agent/mibgroup/hr_filesys.h, agent/mibgroup/hr_network.c
+, agent/mibgroup/hr_network.h,
+ agent/mibgroup/hr_other.c, agent/mibgroup/hr_other.h,
+ agent/mibgroup/hr_partition.c, agent/mibgroup/hr_partition.h
+, agent/mibgroup/hr_print.c, agent/mibgroup/hr_print.h
+, agent/mibgroup/hr_proc.c, agent/mibgroup/hr_proc.h
+, agent/mibgroup/hr_storage.c,
+ agent/mibgroup/hr_storage.h, agent/mibgroup/hr_swinst.c
+, agent/mibgroup/hr_swinst.h, agent/mibgroup/hr_swrun.c
+, agent/mibgroup/hr_swrun.h, agent/mibgroup/hr_system.c
+, agent/mibgroup/hr_system.h, agent/mibgroup/hr_utils.c
+, agent/mibgroup/hr_utils.h, agent/mibgroup/icmp.c
+, agent/mibgroup/icmp.h, agent/mibgroup/interfaces.c
+, agent/mibgroup/interfaces.h, agent/mibgroup/ip.c
+, agent/mibgroup/ip.h, agent/mibgroup/loadave.c
+, agent/mibgroup/loadave.h, agent/mibgroup/memory.c
+, agent/mibgroup/memory.h, agent/mibgroup/mibII.c
+, agent/mibgroup/mibII.h, agent/mibgroup/party_vars.c
+, agent/mibgroup/party_vars.h, agent/mibgroup/pass.c
+, agent/mibgroup/pass.h, agent/mibgroup/proc.c,
+ agent/mibgroup/proc.h, agent/mibgroup/registry.c,
+ agent/mibgroup/registry.h, agent/mibgroup/route_write.c
+, agent/mibgroup/route_write.h,
+ agent/mibgroup/snmp_mib.c, agent/mibgroup/snmp_mib.h,
+ agent/mibgroup/sysORTable.c, agent/mibgroup/sysORTable.h
+, agent/mibgroup/system.c, agent/mibgroup/system.h
+, agent/mibgroup/tcp.c, agent/mibgroup/tcp.h,
+ agent/mibgroup/ucd_snmp.h, agent/mibgroup/udp.c,
+ agent/mibgroup/udp.h, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/v2party.c, agent/mibgroup/v2party.h,
+ agent/mibgroup/vacm_vars.c, agent/mibgroup/vacm_vars.h
+, agent/mibgroup/var_route.c,
+ agent/mibgroup/var_route.h, agent/mibgroup/versioninfo.c
+, agent/mibgroup/versioninfo.h,
+ agent/mibgroup/view_vars.c, agent/mibgroup/view_vars.h,
+ agent/mibgroup/vmstat.c, agent/mibgroup/vmstat.h,
+ agent/mibgroup/host/hr_device.c,
+ agent/mibgroup/host/hr_device.h,
+ agent/mibgroup/host/hr_disk.c, agent/mibgroup/host/hr_disk.h
+, agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_filesys.h,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_network.h,
+ agent/mibgroup/host/hr_other.c,
+ agent/mibgroup/host/hr_other.h,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_partition.h,
+ agent/mibgroup/host/hr_print.c,
+ agent/mibgroup/host/hr_print.h, agent/mibgroup/host/hr_proc.c
+, agent/mibgroup/host/hr_proc.h,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_storage.h,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swinst.h,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_swrun.h,
+ agent/mibgroup/host/hr_system.c,
+ agent/mibgroup/host/hr_system.h,
+ agent/mibgroup/host/hr_utils.c,
+ agent/mibgroup/host/hr_utils.h, agent/mibgroup/mibII/at.c
+, agent/mibgroup/mibII/at.h, agent/mibgroup/mibII/icmp.c
+, agent/mibgroup/mibII/icmp.h,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/interfaces.h, agent/mibgroup/mibII/ip.c
+, agent/mibgroup/mibII/ip.h,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/route_write.h,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/snmp_mib.h,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/sysORTable.h,
+ agent/mibgroup/mibII/system.c, agent/mibgroup/mibII/system.h
+, agent/mibgroup/mibII/tcp.c, agent/mibgroup/mibII/tcp.h
+, agent/mibgroup/mibII/udp.c, agent/mibgroup/mibII/udp.h
+, agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/vacm_vars.h,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/mibII/var_route.h,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/disk.h,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/errormib.h,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/extensible.h,
+ agent/mibgroup/ucd-snmp/hpux.c,
+ agent/mibgroup/ucd-snmp/hpux.h,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/loadave.h,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory.h,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass.h,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/proc.h,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/ucd-snmp/registry.h,
+ agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/versioninfo.h,
+ agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/ucd-snmp/vmstat.h,
+ agent/mibgroup/v2party/acl_vars.c,
+ agent/mibgroup/v2party/acl_vars.h,
+ agent/mibgroup/v2party/alarm.c,
+ agent/mibgroup/v2party/alarm.h,
+ agent/mibgroup/v2party/context_vars.c,
+ agent/mibgroup/v2party/context_vars.h,
+ agent/mibgroup/v2party/event.c,
+ agent/mibgroup/v2party/event.h,
+ agent/mibgroup/v2party/party_vars.c,
+ agent/mibgroup/v2party/party_vars.h,
+ agent/mibgroup/v2party/view_vars.c,
+ agent/mibgroup/v2party/view_vars.h:
+
+ - (configure, configure.in, agent/mibgroup/*):
+ - moved most mibgroup pieces into relevent sub-directories.
+ - changed all header file and #ifdef USING_* lines to reflect this.
+
+1998-05-29 15:21 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): add ability to specify mib information on the cmd line.
+
+1998-05-29 15:20 hardaker
+
+ * TODO:
+
+ - (TODO): winSNMP mention.
+
+1998-05-29 11:34 hardaker
+
+ * configure, configure.in, agent/Makefile.in
+:
+
+ - (configure, configure.in, Makefile.in):
+ - Add a dependancy line for snmp_vars.o for all the module includes.
+
+1998-05-29 11:27 hardaker
+
+ * configure:
+
+ - (configure): make of configure.
+
+1998-05-29 11:26 hardaker
+
+ * configure.in:
+
+ - (configure.in): patch from Niels: include sys/socket in if_mtu test.
+
+1998-05-29 10:24 hardaker
+
+ * snmplib/: snmp_api.c, snmp_impl.h:
+
+ - (snmp_api.c, snmp_impl.h): Patch from Joe Marzot:
+ - fix community name length problems and increase size.
+
+1998-05-29 10:14 hardaker
+
+ * agent/mibgroup/at.c:
+
+ - (at.c): Patch from Chris Smith: fix for irix.
+
+1998-05-24 15:22 hardaker
+
+ * agent/mibgroup/ip.c:
+
+ - (ip.c): Patch from Niels Baggesen:
+ - fix for netbsd < 1.3.
+
+1998-05-24 15:22 hardaker
+
+ * NEWS:
+
+ - (NEWS): change vacm news wording.
+
+1998-05-24 15:22 hardaker
+
+ * FAQ:
+
+ - (FAQ): update to change a few things.
+
+1998-05-20 08:33 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.4 )
+
+1998-05-20 08:30 hardaker
+
+ * ChangeLog:
+
+ - (ChangeLog): update.
+
+1998-05-20 08:27 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ snmplib/Makefile.in:
+
+ - (*/Makefile.in): make depend.
+
+1998-05-20 08:25 hardaker
+
+ * agent/read_config.c:
+
+ - (read_config.c): config_perror() -> config_pwarn() for missing tokens.
+
+1998-05-20 07:37 hardaker
+
+ * snmplib/snmp_impl.h:
+
+ - (snmp_impl.h): version should be a long.
+
+1998-05-20 07:36 hardaker
+
+ * agent/mibgroup/util_funcs.c:
+
+ - (util_funcs.c): make checmib() use oid not int for newname.
+
+1998-05-20 07:34 hardaker
+
+ * FAQ:
+
+ - (FAQ): Update from Dave Shield.
+
+1998-05-20 07:33 hardaker
+
+ * snmplib/: mib.c, parse.c:
+
+ - (mib.c, parse.c): Patch from Niels Baggesen:
+ - extend random lookups further.
+
+1998-05-19 10:41 hardaker
+
+ * agent/mibgroup/memory.c:
+
+ - (memory.c): fix swapinfo on hpux10 systems. (/etc/swapinfo -r).
+
+1998-05-19 10:41 hardaker
+
+ * agent/mibgroup/at.c:
+
+ - (at.c): set to do nothing when CAN_USE_SYSCTL.
+
+1998-05-18 18:14 hardaker
+
+ * snmplib/int64.c:
+
+ - (int64.c):
+ - include header changes for win32.
+
+1998-05-18 15:39 hardaker
+
+ * version.h, bug-report, sedscript.in:
+
+ version tag ( 3.4.pre9 )
+
+1998-05-18 13:13 hardaker
+
+ * agent/mibgroup/hr_swinst.c:
+
+ - (hr_swinst.c): protect using the date pointer against NULL settings.
+
+1998-05-18 12:52 hardaker
+
+ * mibs/.index:
+
+ - (mibs/.index): removed.
+
+1998-05-18 11:17 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - fix rtentry structure test on re-configures.
+
+1998-05-15 11:18 hardaker
+
+ * win32/: config.h, win32.opt, libsnmp/libsnmp.dsp
+, libsnmp/libsnmp.plg, libsnmp_dll/libsnmp.def,
+ libsnmp_dll/libsnmp_dll.dsp, libsnmp_dll/libsnmp_dll.plg
+, snmpbulkwalk/snmpbulkwalk.plg, snmpget/snmpget.plg
+, snmpgetnext/snmpgetnext.plg, snmpset/snmpset.plg
+, snmpstatus/snmpstatus.plg,
+ snmptranslate/snmptranslate.plg, snmpwalk/snmpwalk.plg:
+
+ - (config.h, win32.opt, libsnmp.dsp, libsnmp.plg, libsnmp.def,
+ libsnmp_dll.dsp, libsnmp_dll.plg, snmpbulkwalk.plg, snmpget.plg,
+ snmpgetnext.plg, snmpset.plg, snmpstatus.plg, snmptranslate.plg,
+ snmpwalk.plg): Patch from Joe Marzot:
+ - win32 file updates.
+
+1998-05-15 11:17 hardaker
+
+ * FAQ, snmplib/mib.c:
+
+ - (FAQ, mib.c): Patch from Dave Shield:
+ - handle random lookups with multiple oid segments.
+
+1998-05-15 10:19 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): Patch from Dave Shield:
+ - provide ability to do random searches specifying a module name to look in.
+
+1998-05-15 10:17 hardaker
+
+ * agent/read_config.c, agent/mibgroup/hr_filesys.c,
+ agent/mibgroup/hr_storage.c, agent/mibgroup/hr_swrun.c
+, agent/mibgroup/hr_system.c,
+ agent/mibgroup/hr_system.h, agent/mibgroup/hr_utils.c,
+ agent/mibgroup/util_funcs.c, agent/mibgroup/var_route.c
+, apps/snmp_parse_args.c, apps/snmptable.c,
+ apps/snmptranslate.c, man/snmptranslate.1,
+ snmplib/int64.h, snmplib/mib.c, snmplib/mib.h,
+ snmplib/parse.c, snmplib/parse.h:
+
+ - (read_config.c, hr_filesys.c, hr_storage.c, hr_swrun.c, hr_system.c,
+ hr_system.h, hr_utils.c, util_funcs.c, var_route.c,
+ snmp_parse_args.c, snmptable.c, snmptranslate.c, snmptranslate.1,
+ bsd.h, solaris.h, sunos.h, int64.h, mib.c, mib.h, parse.c, parse.h):
+ Patch from Niels Baggesen:
+ - snmptranslate supports -R and -r.
+ - miscellaneous warning fixes.
+ - oid searcher always ignores case.
+ - fixed hr_system to compile on SunOS4.
+
+1998-05-15 10:13 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): single quote missing module names.
+
+1998-05-14 08:25 hardaker
+
+ * configure, configure.in:
+
+ - (configure.in, configure): typos.
+
+1998-05-14 08:22 hardaker
+
+ * NEWS:
+
+ - (NEWS): mib2c mentioned.
+
+1998-05-14 08:21 hardaker
+
+ * FAQ:
+
+ - (FAQ): new FAQ from Dave Shields.
+
+1998-05-14 07:17 hardaker
+
+ * agent/mibgroup/memory.c:
+
+ - (memory.c): move sys/param.h up above fs.h headers.
+
+1998-05-13 21:25 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): sprint_by_type() didn't handle counter64's.
+
+1998-05-13 21:22 hardaker
+
+ * agent/mibgroup/memory.c:
+
+ - (memory.c): include sys/param.h for bsdi
+
+1998-05-13 21:22 hardaker
+
+ * agent/mibgroup/ip.c:
+
+ - (ip.c): include net/route.h and syslog.h for bsdi.
+
+1998-05-13 21:21 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): don't return a counter64 to a snmpv1 request.
+
+1998-05-13 21:21 hardaker
+
+ * snmplib/: int64.c, int64.h, mib.c:
+
+ - (int64.c, int64.h, mib.c): make int64.c use counter64's structure.
+
+1998-05-12 15:15 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.4.pre8 )
+
+1998-05-12 15:14 hardaker
+
+ * agent/mibgroup/: disk.c, example.c, interfaces.c
+, loadave.c, memory.c, pass.c, proc.c
+, util_funcs.h, vmstat.c:
+
+ - (disk.c, example.c, interfaces.c, loadave.c, memory.c, pass.c,
+ proc.c, util_funcs.h, vmstat.c):
+ - include time.h properly instead of relying on util_funcs.h to do it.
+
+1998-05-12 11:45 hardaker
+
+ * snmplib/: snmp_api.c, system.c:
+
+ - (snmp_api.c, system.c):
+ - move debugging code from system.c to snmp_api.c, where it should be.
+
+1998-05-12 11:45 hardaker
+
+ * agent/mibgroup/vmstat.c:
+
+ - (vmstat.c): correct strings inclusion.
+
+1998-05-12 11:11 hardaker
+
+ * agent/mibgroup/disk.c:
+
+ - (disk.c): NULL -> 0.
+
+1998-05-12 11:11 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - munge rpm lib check to link with -ldb as well.
+
+1998-05-12 11:10 hardaker
+
+ * NEWS:
+
+ - (NEWS): more updates.
+
+1998-05-12 10:52 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): Patch from Dave Shield:
+ - include a getdtablesize() function for hpux9.
+
+1998-05-12 10:52 hardaker
+
+ * agent/mibgroup/hr_swinst.c:
+
+ - (hr_swinst.c): Patch from Dave Shield:
+ - more swinst fixes for rpm modules.
+
+1998-05-11 10:34 hardaker
+
+ * snmplib/: mib.c, parse.c, parse.h,
+ snmp_api.h, vacm.c, vacm.h:
+
+ - (mib.c, parse.c, parse.h, snmp_api.h, vacm.c, vacm.h): Patch from
+ Niels Baggesen:
+ - free routines for vacm (to allow -HUP)
+ - fix the parser to report unlinked OIDs. This did reveal an error in a
+ Cisco MIB (CISCO-IPMCAST-MIB) that I had been using (it needs an
+ IMPORTS ciscoExperiment FROM CISCO-SMI)
+ Actually the parser worked ok, except for the missing error messages.
+ - rewrite of the parsers lexical analyser, to correct the errors that
+ Dave Perkins and others have pointed out recently (name::= , DESCRIPTION"
+ and proper handling of -- partial line comments --). Watch out! this last
+ may find errors in old MIBs (including the version of SNMPv2-TC that
+ we ship). My Fore Systems MIBs had errors with this.
+ - implement the long since announced -H option to snmptable
+
+1998-05-11 10:32 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): Patch from Niels Baggesen:
+ - Corrections of disk entry capitilazation problems.
+
+1998-05-11 10:31 hardaker
+
+ * mibs/SNMPv2-TC.txt:
+
+ - (SNMPv2-TC.txt): Patch from Niels Baggesen:
+ - this last [parser] may find errors in old MIBs (including the
+ version of SNMPv2-TC that we ship).
+
+1998-05-11 10:30 hardaker
+
+ * man/snmptranslate.1:
+
+ - (snmptranslate.1): Patch from Niels Baggesen:
+ - implement the long since announced -H option to snmptable.
+
+1998-05-11 10:30 hardaker
+
+ * apps/snmptranslate.c:
+
+ - (snmptranslate.c): Patch from Niels Baggesen:
+ - implement the long since announced -H option to snmptable
+
+1998-05-11 10:30 hardaker
+
+ * agent/mibgroup/: hr_disk.c, hr_filesys.c,
+ hr_partition.c, vacm_vars.c:
+
+ - (hr_disk.c, hr_filesys.c, hr_partition.c, vacm_vars.c): Patch from
+ Niels Baggesen:
+ - some prototypes for the hr_*.c files (needs Dave's recent patch)
+ Warning: the proc part still does not work with Solaris!
+
+1998-05-11 10:29 hardaker
+
+ * agent/: read_config.c, snmp_vars.h, snmpd.c,
+ snmpd.h, var_struct.h:
+
+ - (read_config.c, snmp_vars.h, snmpd.c, snmpd.h, var_struct.h): Patch
+ from Niels Baggesen:
+ - free routines for vacm (to allow -HUP)
+ - free routines for the trapsink directives in snmpd
+
+1998-05-11 08:10 hardaker
+
+ * snmplib/int64.c:
+
+ - (int64.c): add incrByU32().
+
+1998-05-11 08:10 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): opaque's can have a size specifier.
+
+1998-05-11 08:09 hardaker
+
+ * local/mib2c:
+
+ - (mib2c):
+ - counter64s.
+ - consolodation of variable declarations.
+ - more error stings in all files for unknown variable types.
+
+1998-05-11 08:08 hardaker
+
+ * local/tkmib:
+
+ - (tkmib): optional port number.
+
+1998-05-11 08:08 hardaker
+
+ * agent/mibgroup/util_funcs.c:
+
+ - (util_funcs.c): blank line removal.
+
+1998-05-08 14:53 hardaker
+
+ * agent/mibgroup/disk.c:
+
+ - (disk.c): wording change.
+
+1998-05-08 11:01 hardaker
+
+ * agent/mibgroup/: hr_disk.c, hr_swinst.c:
+
+ - (hr_swinst.c, hr_disk.c): Patch from Dave Shields.
+
+1998-05-08 10:57 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config*): check for pkglocs.h.
+
+1998-05-07 09:07 hardaker
+
+ * agent/read_config.c:
+
+ - (read_config.c): debug info for config files read.
+
+1998-05-07 09:07 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): sys/stat inclusion in fs checks.
+
+1998-05-07 09:05 hardaker
+
+ * COPYING:
+
+ - (COPYING): correction for dates.
+
+1998-05-06 22:28 hardaker
+
+ * win32/config.h:
+
+ - (win32/config.h): update from Joe Marzot.
+
+1998-05-06 21:08 hardaker
+
+ * local/mib2c:
+
+ - (mib2c): created a mib2c template creator.
+
+1998-05-06 21:08 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): make bogus index's be 0.
+
+1998-05-06 21:07 hardaker
+
+ * agent/mibgroup/: util_funcs.c, util_funcs.h:
+
+ - (util_funcs.c, util_funcs.h):
+ - new function: calculate_time_diff(t1, t2).
+
+1998-05-06 21:06 hardaker
+
+ * NEWS:
+
+ - (NEWS): minor wording change.
+
+1998-05-06 14:58 hardaker
+
+ * agent/mibgroup/: disk.c, errormib.c, example.c
+, example.h, extensible.c, loadave.c,
+ memory.c, proc.c, sysORTable.c, system.c
+, util_funcs.c, util_funcs.h, versioninfo.c
+, vmstat.c:
+
+ - (disk.c, errormib.c, example.c, example.h, extensible.c, loadave.c,
+ memory.c, proc.c, sysORTable.c, system.c, util_funcs.c,
+ util_funcs.h, versioninfo.c, vmstat.c):
+ - remove the newname requirement from checkmib().
+ - create header_generic() for simple scalar tests.
+ - use header_generic() in all ucd specific scalar mibs, and example.[ch].
+
+1998-05-06 14:06 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt):
+ - added internal table section.
+ - mib number corrections to match the source.
+
+1998-05-06 11:22 hardaker
+
+ * local/Makefile.in:
+
+ - (Makefile.in): install tkmib.
+
+1998-04-29 11:41 hardaker
+
+ * local/tkmib:
+
+ - (tkmib):
+ - display unloaded module error.
+ - don't try to load a file on a cancel.
+
+1998-04-29 11:32 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): put vmstat back in and renamed to systemStats.
+
+1998-04-29 11:31 hardaker
+
+ * agent/mibgroup/: vmstat.c, vmstat.h:
+
+ - (vmstat.c, vmstat.h): moves, changes, removals, and fixes.
+
+1998-04-29 10:43 hardaker
+
+ * agent/mibgroup/: example.c, example.h, wombat.c
+, wombat.h:
+
+ - (example.c, example.h, wombat.c, wombat.h): more clean ups.
+
+1998-04-29 10:34 hardaker
+
+ * agent/mibgroup/: example.c, proc.c, var_route.c
+, wombat.c:
+
+ - (example.c, proc.c, var_route.c, wombat.c):
+ - nlist cleanups.
+
+1998-04-29 10:26 hardaker
+
+ * agent/mibgroup/tcp.c:
+
+ - (tcp.c): don't use TCPSTAT_SYMBOL unless defined.
+
+1998-04-29 08:56 hardaker
+
+ * apps/snmptable.c:
+
+ - (snmptable.c): Patch from Niels Baggesen:
+ - fix -H header printing.
+
+1998-04-27 16:48 hardaker
+
+ * local/tkmib:
+
+ - (tkmib): bug fixes.
+
+1998-04-27 16:46 hardaker
+
+ * local/tkmib:
+
+ - (tkmib): New mib menu command: load a mib module by ID name.
+
+1998-04-27 16:24 hardaker
+
+ * local/tkmib:
+
+ - (tkmib): bug fixes and new mib menu to load new mibs.
+
+1998-04-27 13:31 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.4.pre7 )
+
+1998-04-27 11:00 hardaker
+
+ * apps/: snmpbulkwalk.c, snmpdelta.c, snmpget.c
+, snmpgetnext.c, snmpset.c, snmpstatus.c
+, snmptable.c, snmptest.c, snmpwalk.c:
+
+ - (snmpbulkwalk.c, snmpdelta.c, snmpget.c, snmpgetnext.c, snmpset.c,
+ snmpstatus.c, snmptable.c, snmptest.c, snmpwalk.c):
+ - Put the word "Timeout: " in front of the "No Response" errors.
+
+1998-04-27 11:00 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): define SHLIB_LDCONFIG_CMD as ":" for
+ static library cases.
+
+1998-04-27 10:59 hardaker
+
+ * Makefile.top:
+
+ - (Makefile.top): removed unneeded variable.
+
+1998-04-24 16:40 hardaker
+
+ * agent/mibgroup/var_route.c:
+
+ - (var_route.c): watch out for single route loops.
+
+1998-04-24 16:32 hardaker
+
+ * agent/: auto_nlist.c, auto_nlist.h:
+
+ - (auto_nlist.c, auto_nlist.h): n_value is a long:
+ - return the value from auto_nlist_value as an unsigned long.
+
+1998-04-24 16:31 hardaker
+
+ * agent/mibgroup/tcp.c:
+
+ - (tcp.c): include netinet/tcpip.h for DU4.0.
+
+1998-04-24 14:33 hardaker
+
+ * agent/mibgroup/disk.c:
+
+ - (disk.c): calculate vfs block size if possible and size > 255 bytes.
+
+1998-04-24 14:33 hardaker
+
+ * agent/mibgroup/hr_partition.c:
+
+ - (hr_partition.c): close file descriptor just opened.
+
+1998-04-24 14:33 hardaker
+
+ * agent/mibgroup/hr_filesys.c:
+
+ - (hr_filesys.c): include sys/param.h to define MAXPATHLEN.
+
+1998-04-24 14:32 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - check statvfs.h for f_bavail.
+
+1998-04-24 14:03 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): more cleaning and renaming.
+
+1998-04-24 10:22 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): the textual descriptions were updated some.
+
+1998-04-24 10:02 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt):
+ - renamed labels to be unique from the old definitions.
+ - renumbered again.
+ - commented on the desgin of the mib at the top.
+ - Changed back to SMIv1.
+ - removed lockd section.
+ - removed vmstat section till it gets implemented.
+ - removed sequences of scalers.
+
+1998-04-24 10:00 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in): mib oid location updates for ucd-snmp mib.
+
+1998-04-22 08:35 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from Niels Baggesen:
+ - parse BITS keywords.
+
+1998-04-22 07:49 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): changed wording, cleaned up a bit.
+
+1998-04-20 16:07 hardaker
+
+ * snmplib/snmp_client.c:
+
+ - (snmp_client.c): Patch from Niels Baggesen:
+ - needed pointer copies.
+
+1998-04-20 16:06 hardaker
+
+ * agent/mibgroup/: tcp.c, udp.c, var_route.c:
+
+ - (tcp.c, udp.c, var_route.c): Patch from Niels Baggesen:
+ - #ifdef checks on symbols and header movement.
+
+1998-04-20 16:05 hardaker
+
+ * agent/mibgroup/vacm_vars.c:
+
+ - (vacm_vars.c): Patch from Niels Baggesen:
+ - typecast a pointer.
+
+1998-04-20 16:05 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): Patch from Niels Baggesen:
+ - gethostbyaddr moves up.
+ - include sys/wait.h.
+ - syslog %d -> %ld for long specific_type.
+
+1998-04-20 16:03 hardaker
+
+ * apps/snmptable.c:
+
+ - (snmptable.c): Patch from Niels Baggesen:
+ - prototyping and other cleanups.
+
+1998-04-20 16:02 hardaker
+
+ * agent/mibgroup/ip.c:
+
+ - (ip.c): Patch from Niels Baggesen:
+ - test symbol defines and cleanup.
+
+1998-04-20 16:00 hardaker
+
+ * agent/mibgroup/interfaces.c:
+
+ - (interfaces.c): Patch from Niels Baggesen:
+ - header moves.
+
+1998-04-20 16:00 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): Patch from Niels Baggesen:
+ - appropriate use of strdup during startup and better flag checking.
+
+1998-04-20 15:59 hardaker
+
+ * agent/mibgroup/: hr_filesys.c, hr_swrun.c:
+
+ - (hr_filesys.c, hr_swrun.c): Patch from Niels Baggesen:
+ - fix some host resources for solaris.
+
+1998-04-20 15:56 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in): check for sys/dkio.h
+
+1998-04-20 15:54 hardaker
+
+ * agent/mibgroup/: host_res.h, hr_disk.c,
+ hr_filesys.c, hr_partition.c, hr_storage.c:
+
+ - (host_res.h, hr_disk.c, hr_filesys.c, hr_partition.c, hr_storage.c):
+ - Patch from Dave Shield:
+ - consolidate the system-specific stuff a bit (should make it easier
+ to follow)
+ - Re-structures the Disk searching, in such a way that it can set up
+ via the config file. (which I still need to do)
+ - Speed up disk searching (by caching invalid results - a *major* win!)
+ - Handle partitions sensibly (arther than one per disk)
+ - Improve Solaris support for the Device group
+
+1998-04-20 10:31 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): change oid from textual to numeric to allow now mibs to
+ be loaded.
+
+1998-04-01 16:35 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): always send enterprise and trapoid to scripts.
+
+1998-04-01 14:43 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.4.pre6 )
+
+1998-04-01 14:40 hardaker
+
+ * agent/: snmp_vars.c, snmp_vars.h:
+
+ - (snmp_vars.c, snmp_vars.h): make unregestering of mibs work.
+ - (in most cases:-?)
+
+1998-04-01 14:11 hardaker
+
+ * snmplib/Makefile.in, apps/Makefile.in,
+ agent/mibgroup/Makefile.in, agent/Makefile.in:
+
+ - (Makefile.in): make depend.
+
+1998-04-01 14:10 hardaker
+
+ * TODO:
+
+ - (TODO): removed a few things!
+
+1998-04-01 13:54 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def): moved the view example section above the access section.
+
+1998-04-01 13:53 hardaker
+
+ * EXAMPLE.conf.def:
+
+ - (EXAMPLE.conf.def): added vacm example configuration.
+
+1998-04-01 13:47 hardaker
+
+ * FAQ, README:
+
+ - (FAQ, README): more 3.4 updates.
+
+1998-04-01 13:31 hardaker
+
+ * NEWS, PORTING:
+
+ - (NEWS, PORTING): updates for 3.4.
+
+1998-04-01 13:27 hardaker
+
+ * agent/auto_nlist.c:
+
+ - (auto_nlist.c):
+ - remove no longer needed debugging statements of tree traversal.
+
+1998-04-01 09:52 hardaker
+
+ * snmplib/snmp_client.c:
+
+ - (snmp_client.c): enterprise_length is sizeof(oid) dependent.
+
+1998-03-27 16:43 hardaker
+
+ * agent/: snmp_vars.c, snmp_vars.h,
+ mibgroup/interfaces.c, mibgroup/ip.c,
+ mibgroup/registry.c:
+
+ - (snmp_vars.c, snmp_vars.h, interfaces.c, ip.c, registry.c):
+ - prototyping and -Wall fixes.
+
+1998-03-27 16:42 hardaker
+
+ * INSTALL:
+
+ - (INSTALL): document libwrap.
+
+1998-03-27 16:23 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/snmpd.c:
+
+ - (acconfig.h, config.h.in, configure, configure.in, snmpd.c):
+ - correctly #ifdef out the tcpwrappers patch.
+
+1998-03-27 16:23 hardaker
+
+ * agent/mibgroup/interfaces.c:
+
+ - (interfaces.c): Interfaces_Scan_Next needed a 4th (NULL) argument.
+
+1998-03-27 16:10 hardaker
+
+ * README, config.h.in, configure,
+ configure.in, agent/snmpd.c:
+
+ - (README, config.h.in, configure, configure.in, snmpd.c): Patch from
+ Arthur Hyun:
+ - tcpwrappers support.
+
+1998-03-27 11:22 hardaker
+
+ * agent/mibgroup/hr_device.c:
+
+ - (hr_device.c): check device index against maximum (segfault on HPUX).
+
+1998-03-27 11:20 hardaker
+
+ * agent/mibgroup/disk.c:
+
+ - (disk.c): use config_pwarn() for missing disks.
+
+1998-03-27 11:20 hardaker
+
+ * agent/: read_config.c, read_config.h:
+
+ - (read_config.c, read_config.h):
+ - create config_pwarn() that doesn't increase the error count to
+ prevent exiting. Used for disks, since some might by process or
+ nfs mounted.
+
+1998-03-27 09:20 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c):
+ - Beta version of an extensible trap demon.
+ - -C 'command' on the command line runs the command and feeds it
+ stdin information about the trap.
+ - v1 traps are converted to v2 traps for consistancy of
+ information sent to the scripts.
+
+1998-03-26 07:22 hardaker
+
+ * config.h.in, configure, configure.in,
+ agent/auto_nlist.c, agent/auto_nlist.h,
+ agent/common_header.h, agent/kernel.c,
+ agent/read_config.c, agent/snmp_vars.c,
+ agent/snmp_vars.h, agent/snmpd.c,
+ agent/mibgroup/alarm.c, agent/mibgroup/at.c,
+ agent/mibgroup/context_vars.c, agent/mibgroup/disk.c,
+ agent/mibgroup/errormib.c, agent/mibgroup/event.c,
+ agent/mibgroup/extensible.c, agent/mibgroup/hr_device.c
+, agent/mibgroup/hr_network.c,
+ agent/mibgroup/hr_partition.c, agent/mibgroup/hr_storage.c
+, agent/mibgroup/hr_swinst.c, agent/mibgroup/hr_swrun.c
+, agent/mibgroup/icmp.c, agent/mibgroup/interfaces.c
+, agent/mibgroup/interfaces.h, agent/mibgroup/ip.c
+, agent/mibgroup/loadave.c, agent/mibgroup/memory.c
+, agent/mibgroup/party_vars.c, agent/mibgroup/pass.c
+, agent/mibgroup/proc.c, agent/mibgroup/smux.c,
+ agent/mibgroup/snmp_bgp.c, agent/mibgroup/snmp_ospf.c,
+ agent/mibgroup/snmp_rip2.c, agent/mibgroup/sysORTable.c
+, agent/mibgroup/tcp.c, agent/mibgroup/udp.c,
+ agent/mibgroup/util_funcs.c, agent/mibgroup/vacm_vars.c
+, agent/mibgroup/var_route.c, agent/mibgroup/vmstat.c
+, apps/snmp_parse_args.c, apps/snmpbulkwalk.c,
+ apps/snmpdelta.c, apps/snmpget.c, apps/snmpgetnext.c
+, apps/snmpset.c, apps/snmpstatus.c,
+ apps/snmptable.c, apps/snmptest.c,
+ apps/snmptranslate.c, apps/snmptrap.c,
+ apps/snmptrapd.c, apps/snmpwalk.c, snmplib/asn1.c
+, snmplib/mib.c, snmplib/snmp_api.c,
+ snmplib/snmp_auth.c, snmplib/snmp_client.c,
+ snmplib/system.c, snmplib/vacm.c, snmplib/view.c
+:
+
+ - (*.c): Patch from Niels Baggesen:
+ - misc porting improvements (the bsd groups, sunos, ...).
+ - switch auto_nlists calling order of _ vs non _ lookups.
+ - reverse all string.h/strings.h include possibilities.
+
+1998-03-25 16:49 hardaker
+
+ * agent/mibgroup/hpux.c:
+
+ - (hpux.c): fix write_method declaration.
+
+1998-03-25 13:07 hardaker
+
+ * agent/mibgroup/: mibII.c, v2party.c, vacm_vars.c
+:
+
+ - (v2party.c, mibII.c, vacm_vars.c): declair registration variables staticly.
+
+1998-03-25 12:48 hardaker
+
+ * snmplib/: Makefile.in, int64.c, int64.h, mib.c
+:
+
+ - (Makefile.in, int64.c, int64.h, mib.c): Code from David T. Perkins:
+ - integrated David's code to print counter64s as integers rather than hex.
+
+1998-03-25 10:59 hardaker
+
+ * agent/mibgroup/interfaces.c:
+
+ - (interfaces.c): Patch from Niels Baggesen:
+ - Add an & to arpcom.ac_enaddr in memset.
+
+1998-03-25 10:46 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in, linux.h): new define: DONT_USE_NLIST.
+
+1998-03-25 10:44 hardaker
+
+ * agent/snmpd.c, snmplib/snmp_api.c:
+
+ - (snmpd.c, snmp_api.c): Spelling errors from the CMU code fixed.
+
+1998-03-25 10:39 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in): simply don't define CAN_USE_NLIST on linux.
+
+1998-03-25 10:39 hardaker
+
+ * agent/: read_config.c, read_config.h, snmp_vars.c
+, mibgroup/registry.c, mibgroup/registry.h:
+
+ - (read_config.c, read_config.h, snmp_vars.c, registry.c, registry.h):
+ - fix the registry mib to use the new module structure.
+ - create a working find_subtree() and find_subtree_next().
+
+1998-03-25 09:15 hardaker
+
+ * agent/mibgroup/tcp.c:
+
+ - (tcp.c): include tcpip.h for digital unix.
+
+1998-03-22 18:13 hardaker
+
+ * agent/mibgroup/: pass.c, proc.c, vacm_vars.c:
+
+ - (pass.c, proc.c, vacm_vars.c): Patch from Simon Burge:
+ - move sys/types.h up for ultrix.
+
+1998-03-18 14:09 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.4.pre5 )
+
+1998-03-18 13:56 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/read_config.c, agent/snmpd.c
+, apps/snmp_parse_args.c, apps/snmptrapd.c,
+ apps/snmpnetstat/main.c, man/mib_api.3,
+ win32/config.h:
+
+ - (acconfig.h, config.h.in, configure, configure.in, read_config.c,
+ snmpd.c, snmp_parse_args.c, snmptrapd.c, main.c, mib_api.3,
+ config.h):
+ - SNMPLIBPATH -> SNMPSHAREPATH
+ - a real SNMPLIBPATH
+ - make the agent read .conf files from SNMPSHAREPATH:SNMPLIBPATH.
+
+1998-03-18 13:26 hardaker
+
+ * agent/mibgroup/: extensible.c, memory.c, pass.c
+, proc.c, util_funcs.c, util_funcs.h:
+
+ - (extensible.c, memory.c, pass.c, proc.c, util_funcs.c, util_funcs.h):
+ - wait for pid after get_exec_output() with new wait_on_exec() function.
+
+1998-03-18 13:10 hardaker
+
+ * acconfig.h, config.h.in, sedscript.in,
+ mibs/UCD-SNMP-MIB.txt:
+
+ - (acconfig.h, config.h.in, sedscript.in, UCD-SNMP-MIB.txt):
+ - re-numbering of the new table modules.
+
+1998-03-18 09:17 hardaker
+
+ * ov/README:
+
+ - (README): changed OV path's to newer release paths.
+
+1998-03-11 17:05 hardaker
+
+ * agent/mibgroup/system.c:
+
+ - (system.c): don't chomp new line on read_config utils.
+
+1998-03-11 15:57 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ snmplib/Makefile.in:
+
+ - (*/Makefile.in): depend update.
+
+1998-03-11 15:56 hardaker
+
+ * README:
+
+ - (README): name update.
+
+1998-03-11 15:42 hardaker
+
+ * agent/auto_nlist.c:
+
+ - (auto_nlist.c): better debugging printfs
+
+1998-03-11 14:40 hardaker
+
+ * agent/: read_config.c, read_config.h, snmp_agent.c
+, snmp_vars.c, snmpd.c, mibgroup/host_res.h
+, mibgroup/hr_device.c, mibgroup/hr_device.h,
+ mibgroup/hr_disk.c, mibgroup/hr_disk.h,
+ mibgroup/hr_filesys.c, mibgroup/hr_filesys.h,
+ mibgroup/hr_network.c, mibgroup/hr_network.h,
+ mibgroup/hr_other.c, mibgroup/hr_partition.c,
+ mibgroup/hr_partition.h, mibgroup/hr_print.c,
+ mibgroup/hr_print.h, mibgroup/hr_proc.c,
+ mibgroup/hr_proc.h, mibgroup/hr_storage.c,
+ mibgroup/hr_storage.h, mibgroup/hr_swinst.c,
+ mibgroup/hr_swinst.h, mibgroup/hr_swrun.c,
+ mibgroup/hr_swrun.h, mibgroup/hr_system.c,
+ mibgroup/hr_system.h, mibgroup/interfaces.c,
+ mibgroup/ip.c, mibgroup/mibII.c, mibgroup/mibII.h
+, mibgroup/sysORTable.c, mibgroup/v2party.c,
+ mibgroup/v2party.h, mibgroup/vacm_vars.c,
+ mibgroup/vacm_vars.h:
+
+ - (read_config.c, read_config.h, snmp_agent.c, snmp_vars.c, snmpd.c,
+ host_res.h, hr_device.c, hr_device.h, hr_disk.c, hr_disk.h,
+ hr_filesys.c, hr_filesys.h, hr_network.c, hr_network.h, hr_other.c,
+ hr_partition.c, hr_partition.h, hr_print.c, hr_print.h, hr_proc.c,
+ hr_proc.h, hr_storage.c, hr_storage.h, hr_swinst.c, hr_swinst.h,
+ hr_swrun.c, hr_swrun.h, hr_system.c, hr_system.h, interfaces.c,
+ ip.c, mibII.c, mibII.h, sysORTable.c, v2party.c, v2party.h,
+ vacm_vars.c, vacm_vars.h):
+ - massive prototyping and --Wall fixes.
+ - fixed things broken by the freebsd patch (only some I'm sure).
+
+1998-03-11 12:56 hardaker
+
+ * aclocal.m4, config.h.in, configure,
+ configure.in, agent/mibgroup/icmp.c,
+ agent/mibgroup/interfaces.c, agent/mibgroup/ip.c,
+ agent/mibgroup/tcp.c, agent/mibgroup/udp.c,
+ agent/mibgroup/var_route.c:
+
+ - (aclocal.m4, config.h.in, configure, configure.in, icmp.c,
+ interfaces.c, ip.c, tcp.c, udp.c, var_route.c): Patch from Garrett
+ Wollman:
+ - freebsd 3 sysctl implementations.
+
+1998-03-11 12:27 hardaker
+
+ * agent/mibgroup/: interfaces.c, tcp.c, udp.c,
+ var_route.c, var_route.h:
+
+ - (interfaces.c, tcp.c, udp.c, var_route.c, var_route.h): Patch from
+ Craig Bevins:
+ - port to OpenBSD.
+
+1998-03-11 10:30 hardaker
+
+ * agent/mibgroup/: sysORTable.c, sysORTable.h, system.c
+, system.h:
+
+ - (sysORTable.c, sysORTable.h, system.c, system.h):
+ - fix time values and move sysORLastChanged to the system group.
+
+1998-03-11 09:40 hardaker
+
+ * agent/mibgroup/: hpux.h, hr_filesys.h, memory.h
+, snmp_bgp.h, snmp_ospf.h, snmp_rip2.h,
+ sysORTable.h, vmstat.h:
+
+ - (hpux.h, hr_filesys.h, memory.h, snmp_bgp.h, snmp_ospf.h,
+ snmp_rip2.h, sysORTable.h, vmstat.h):
+ - finish converting a few of the files that Niels missed.
+
+1998-03-11 08:06 hardaker
+
+ * mibs/.index:
+
+ - (mibs/.index): update...
+
+1998-03-11 08:05 hardaker
+
+ * agent/auto_nlist.c, agent/common_header.h,
+ agent/snmp_agent.c, agent/snmpd.c,
+ agent/mibgroup/acl_vars.h, agent/mibgroup/alarm.c,
+ agent/mibgroup/alarm.h, agent/mibgroup/at.h,
+ agent/mibgroup/context_vars.h, agent/mibgroup/disk.h,
+ agent/mibgroup/errormib.h, agent/mibgroup/event.c,
+ agent/mibgroup/event.h, agent/mibgroup/example.h,
+ agent/mibgroup/extensible.c, agent/mibgroup/extensible.h
+, agent/mibgroup/hr_device.h, agent/mibgroup/hr_disk.h
+, agent/mibgroup/hr_filesys.h,
+ agent/mibgroup/hr_network.h, agent/mibgroup/hr_partition.h
+, agent/mibgroup/hr_print.h, agent/mibgroup/hr_proc.h
+, agent/mibgroup/hr_storage.h,
+ agent/mibgroup/hr_swinst.h, agent/mibgroup/hr_swrun.h,
+ agent/mibgroup/hr_system.h, agent/mibgroup/icmp.c,
+ agent/mibgroup/icmp.h, agent/mibgroup/interfaces.c,
+ agent/mibgroup/interfaces.h, agent/mibgroup/ip.c,
+ agent/mibgroup/ip.h, agent/mibgroup/loadave.h,
+ agent/mibgroup/party_vars.h, agent/mibgroup/pass.c,
+ agent/mibgroup/proc.c, agent/mibgroup/proc.h,
+ agent/mibgroup/registry.h, agent/mibgroup/snmp_mib.c,
+ agent/mibgroup/snmp_mib.h, agent/mibgroup/system.c,
+ agent/mibgroup/system.h, agent/mibgroup/tcp.c,
+ agent/mibgroup/tcp.h, agent/mibgroup/udp.c,
+ agent/mibgroup/udp.h, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/vacm_vars.c, agent/mibgroup/vacm_vars.h,
+ agent/mibgroup/versioninfo.c, agent/mibgroup/versioninfo.h
+, agent/mibgroup/view_vars.h, apps/snmpbulkwalk.c
+, apps/snmpdelta.c, apps/snmpget.c,
+ apps/snmpgetnext.c, apps/snmpset.c, apps/snmpstatus.c
+, apps/snmptable.c, apps/snmptest.c,
+ apps/snmptrap.c, apps/snmptrapd.c, apps/snmpwalk.c
+, apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c
+, apps/snmpnetstat/route.c, snmplib/mib.c,
+ snmplib/snmp.c, snmplib/snmp.h, snmplib/snmp_api.c
+, snmplib/snmp_auth.c, snmplib/snmp_client.c,
+ snmplib/snmp_impl.h, man/Makefile.in:
+
+ - (*/*/*/*): Patch from Niels Baggesen:
+ - fix auto_nlist on preceeding _ architectures.
+ - Change *all* define usage to new SNMP_ and ASN_ prefixes.
+ - leave mib access open if no com2sec statements were found in snmpd.conf.
+
+1998-03-09 17:40 hardaker
+
+ * agent/mibgroup/: mibII.c, mibII.h, sysORTable.c
+, sysORTable.h, system.c, v2party.c,
+ vacm_vars.c, vacm_vars.h:
+
+ - (mibII.c, mibII.h, sysORTable.c, sysORTable.h, system.c, v2party.c,
+ vacm_vars.c, vacm_vars.h):
+ - implement sysORTable.
+ - register mibs under it.
+
+1998-03-06 15:48 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - remove security type prompts.
+
+1998-03-06 15:47 hardaker
+
+ * agent/mibgroup/host_res.h:
+
+ - (host_res.h): move snmp_api.h up above snmp_impl.h.
+
+1998-03-06 15:47 hardaker
+
+ * agent/mibgroup/mibII.h:
+
+ - (mibII.h): add vacm_vars.
+
+1998-03-06 15:47 hardaker
+
+ * agent/mibgroup/util_funcs.c:
+
+ - (util_funcs.c):
+ - remove GLOBAL-SECURITY checks.
+
+1998-03-06 14:01 hardaker
+
+ * Makefile.in, agent/kernel.c, agent/read_config.c
+, agent/read_config.h, agent/snmp_agent.c,
+ agent/snmp_vars.c, agent/snmpd.c,
+ agent/mibgroup/acl_vars.c, agent/mibgroup/alarm.c,
+ agent/mibgroup/context_vars.c, agent/mibgroup/disk.c,
+ agent/mibgroup/event.c, agent/mibgroup/extensible.c,
+ agent/mibgroup/icmp.c, agent/mibgroup/interfaces.c,
+ agent/mibgroup/ip.c, agent/mibgroup/mibincl.h,
+ agent/mibgroup/party_vars.c, agent/mibgroup/pass.c,
+ agent/mibgroup/proc.c, agent/mibgroup/registry.c,
+ agent/mibgroup/registry.h, agent/mibgroup/route_write.c
+, agent/mibgroup/snmp_mib.c, agent/mibgroup/system.c
+, agent/mibgroup/tcp.c, agent/mibgroup/udp.c,
+ agent/mibgroup/vacm_vars.c, agent/mibgroup/vacm_vars.h,
+ agent/mibgroup/var_route.c, agent/mibgroup/versioninfo.c
+, agent/mibgroup/view_vars.c, apps/snmp_parse_args.c
+, apps/snmpdelta.c, apps/snmpget.c,
+ apps/snmpgetnext.c, apps/snmpset.c, apps/snmpstatus.c
+, apps/snmptable.c, apps/snmptest.c,
+ apps/snmptranslate.c, apps/snmptrap.c,
+ apps/snmptrapd.c, apps/snmpnetstat/if.c,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/route.c,
+ man/snmpd.conf.5.def, man/snmptable.1, mibs/.index
+, mibs/Makefile.in, mibs/SNMP-FRAMEWORK-MIB.txt,
+ mibs/SNMP-MPD-MIB.txt, mibs/SNMP-NOTIFICATION-MIB.txt,
+ mibs/SNMP-PROXY-MIB.txt, mibs/SNMP-TARGET-MIB.txt,
+ mibs/SNMP-USER-BASED-SM-MIB.txt,
+ mibs/SNMP-VIEW-BASED-ACM-MIB.txt, snmplib/Makefile.in,
+ snmplib/acl.h, snmplib/acl_parse.c, snmplib/asn1.c
+, snmplib/context.h, snmplib/context_parse.c,
+ snmplib/mib.c, snmplib/party.h, snmplib/party_parse.c
+, snmplib/snmp.c, snmplib/snmp.h,
+ snmplib/snmp_api.c, snmplib/snmp_auth.c,
+ snmplib/snmp_client.c, snmplib/snmp_impl.h,
+ snmplib/system.c, snmplib/vacm.c, snmplib/vacm.h
+, snmplib/view.c:
+
+ - (Makefile.in, kernel.c, read_config.c, read_config.h, snmp_agent.c,
+ snmp_vars.c, snmpd.c, acl_vars.c, alarm.c, context_vars.c, disk.c,
+ event.c, extensible.c, icmp.c, interfaces.c, ip.c, mibincl.h,
+ party_vars.c, pass.c, proc.c, registry.c, registry.h, route_write.c,
+ snmp_mib.c, system.c, tcp.c, udp.c, vacm_vars.c, vacm_vars.h,
+ var_route.c, versioninfo.c, view_vars.c, snmp_parse_args.c,
+ snmpdelta.c, snmpget.c, snmpgetnext.c, snmpset.c, snmpstatus.c,
+ snmptable.c, snmptest.c, snmptranslate.c, snmptrap.c, snmptrapd.c,
+ if.c, inet.c, route.c, snmpd.conf.5.def, snmptable.1, .index,
+ Makefile.in, SNMP-FRAMEWORK-MIB.txt, SNMP-MPD-MIB.txt,
+ SNMP-NOTIFICATION-MIB.txt, SNMP-PROXY-MIB.txt, SNMP-TARGET-MIB.txt,
+ SNMP-USER-BASED-SM-MIB.txt, SNMP-VIEW-BASED-ACM-MIB.txt,
+ Makefile.in, acl.h, acl_parse.c, asn1.c, context.h, context_parse.c,
+ mib.c, party.h, party_parse.c, snmp.c, snmp.h, snmp_api.c,
+ snmp_auth.c, snmp_client.c, snmp_impl.h, system.c, vacm.c, vacm.h,
+ view.c): Patch from Niels Baggesen:
+ - Implement the SNMPv3 View Based Access Control Model (RFC 2275).
+ - header fixes.
+ - better header-file #define names to include SNMP_, ASN_, etc. prefixes.
+
+1998-03-04 15:49 hardaker
+
+ * COPYING:
+
+ - (COPYING): documentation requirement change.
+
+1998-02-25 07:27 hardaker
+
+ * agent/: read_config.c, snmpd.c:
+
+ - (read_config.c, snmpd.c): Patch from Niels Baggesen:
+ - fix read_config parser's end of line problems.
+
+1998-02-20 11:15 hardaker
+
+ * apps/snmpnetstat/Makefile.in, snmplib/Makefile.in:
+
+ - (*/Makefile.in): fix make depend to look for and strip /usr/lib/*.
+
+1998-02-20 11:11 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in:
+
+ - (*/Makefile.in): fix make depend to look for and strip /usr/lib/*.
+
+1998-02-20 09:19 hardaker
+
+ * agent/mibgroup/interfaces.c:
+
+ - (interfaces.c): Patch from Simon Leinen:
+ - fix include file dependancies on irix with _KERNEL defined.
+
+1998-02-18 16:51 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.4.pre4 )
+
+1998-02-18 16:33 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ snmplib/Makefile.in:
+
+ - (*/Makefile.in): make depend.
+
+1998-02-18 16:33 hardaker
+
+ * config.h.in:
+
+ - (config.h.in): openbsd defines.
+
+1998-02-18 16:30 hardaker
+
+ * agent/mibgroup/: at.c, proc.c, tcp.c, udp.c
+, var_route.c:
+
+ - (at.c, proc.c, tcp.c, udp.c, var_route.c, bsd.h, bsdi.h, freebsd.h,
+ generic.h, hpux.h, netbsd.h):
+ - tried to merge some things into s/*.h defines instead. There is a
+ lot to go still.
+
+1998-02-18 16:29 hardaker
+
+ * acconfig.h, mibs/UCD-SNMP-MIB.txt:
+
+ - (acconfig.h, UCD-SNMP-MIB.txt):
+ - removed unneeded stuff.
+ - added openbsd.
+
+1998-02-18 14:32 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmp_api.c, snmp_api.h): prototyping checks.
+
+1998-02-18 14:32 hardaker
+
+ * agent/: read_config.c, snmp_vars.c:
+
+ - (read_config.c, snmp_vars.c):
+ - prototyping and --Wall checks.
+
+1998-02-18 14:25 hardaker
+
+ * agent/mibgroup/: acl_vars.c, at.c, context_vars.c
+, disk.c, host_res.h, hr_disk.c,
+ hr_filesys.c, hr_storage.c, hr_swinst.c,
+ hr_swrun.c, hr_utils.c, icmp.c, interfaces.c
+, interfaces.h, ip.c, memory.c,
+ mibincl.h, party_vars.c, pass.c, proc.c,
+ registry.c, smux.c, snmp_mib.c, system.c
+, tcp.c, udp.c, var_route.c,
+ versioninfo.c, view_vars.c, vmstat.c:
+
+ - (acl_vars.c, at.c, context_vars.c, disk.c, host_res.h, hr_disk.c,
+ hr_filesys.c, hr_storage.c, hr_swinst.c, hr_swrun.c, hr_utils.c,
+ icmp.c, interfaces.c, interfaces.h, ip.c, memory.c, mibincl.h,
+ party_vars.c, pass.c, proc.c, registry.c, smux.c, snmp_mib.c,
+ system.c, tcp.c, udp.c, var_route.c, versioninfo.c, view_vars.c,
+ vmstat.c):
+ - massive -Wall and --strict-prototypes checking.
+ - bzero -> memset.
+
+1998-02-18 13:44 hardaker
+
+ * agent/mibgroup/: at.c, example.c, hpux.c,
+ hr_device.c, hr_disk.c, hr_filesys.c,
+ hr_network.c, hr_partition.c, hr_print.c,
+ hr_proc.c, hr_storage.c, hr_swinst.c,
+ hr_swrun.c, hr_system.c, icmp.c, interfaces.c
+, ip.c, pass.c, registry.c, smux.c
+, snmp_mib.c, system.c, tcp.c, udp.c
+, var_route.c, wombat.c:
+
+ - (at.c, example.c, hpux.c, hr_device.c, hr_disk.c, hr_filesys.c,
+ hr_network.c, hr_partition.c, hr_print.c, hr_proc.c, hr_storage.c,
+ hr_swinst.c, hr_swrun.c, hr_system.c, icmp.c, interfaces.c, ip.c,
+ pass.c, registry.c, smux.c, snmp_mib.c, system.c, tcp.c, udp.c,
+ var_route.c, wombat.c):
+ - all bcopys -> memcpy.
+ - include a few extra headers for DEBUGP statements.
+
+1998-02-18 13:34 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def): authtrapsenable -> authtrapenable.
+
+1998-02-18 13:30 hardaker
+
+ * agent/mibgroup/disk.h, agent/mibgroup/extensible.h,
+ agent/mibgroup/loadave.h, agent/mibgroup/proc.h,
+ mibs/UCD-SNMP-MIB.txt:
+
+ - (disk.h, extensible.h, loadave.h, proc.h, UCD-SNMP-MIB.txt):
+ - turn these mibs into real tables. Required changing the mib though.
+
+1998-02-18 11:46 hardaker
+
+ * man/: snmpd.1.def, snmpd.conf.5.def:
+
+ - (snmpd.1.def, snmpd.conf.5.def): change to DATADIR from LIBDIR.
+
+1998-02-18 11:45 hardaker
+
+ * sedscript.in:
+
+ - (sedscript.in): define LIBDIR and DATADIR.
+
+1998-02-18 08:16 hardaker
+
+ * agent/mibgroup/: at.c, icmp.c, interfaces.c,
+ ip.c, tcp.c, udp.c:
+
+ - (at.c, icmp.c, interfaces.c, ip.c, tcp.c, udp.c, irix.h):
+ Patch from Simon Leinen:
+ - port to irix.
+
+1998-02-18 08:16 hardaker
+
+ * agent/auto_nlist.c:
+
+ - (auto_nlist.c): Patch from Simon Leinen:
+ - fix a debugging statement (missing a variable).
+
+1998-02-18 08:15 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in): Patch from Simon Leinen:
+ - check for sys/sysmp.h.
+
+1998-02-18 08:05 hardaker
+
+ * EXAMPLE.conf.def, mibs/UCD-SNMP-MIB.txt,
+ agent/mibgroup/ucd_snmp.h, agent/mibgroup/vmstat.c,
+ agent/mibgroup/vmstat.h:
+
+ - (EXAMPLE.conf.def, vmstat.c, vmstat.h, ucd_snmp.h,
+ UCD-SNMP-MIB.txt): Patch from Luuk de Boer:
+ - implment a vmstat mib group on linux.
+
+1998-02-17 09:54 hardaker
+
+ * agent/mibgroup/: tcp.c, udp.c:
+
+ - (tcp.c, udp.c):
+ - nlist symbol name errors.
+
+1998-02-17 09:53 hardaker
+
+ * agent/: auto_nlist.c, autonlist.h, snmp_vars.c
+:
+
+ - (auto_nlist.c, autonlist.h, snmp_vars.c):
+ - use appropriate mallocs, and NULL initialization of pointers.
+ - malloc the symbol rather than using a fixed length.
+ - insert debugging code.
+ - enable printing of the nlist tree if TESTING is defined.
+
+1998-02-17 09:50 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmp_api.c, snmp_api.h):
+ - use snmp_ipaddr instead of ipaddr to avoid hpux conflicts.
+
+1998-02-13 09:07 hardaker
+
+ * FAQ:
+
+ - (FAQ): typo: authtrapsenable -> authtrapenable.
+
+1998-02-11 16:44 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): sed doesn't like [a-z]+ type expressions.
+
+1998-02-11 09:28 hardaker
+
+ * agent/mibgroup/hr_network.c:
+
+ - (hr_network.c): Patch from Dave Shield:
+ - solaris fixes.
+
+1998-02-11 09:28 hardaker
+
+ * agent/mibgroup/host_res.h:
+
+ - (host_res.h): Patch from Dave Shield:
+ - don't include config.h
+
+1998-02-11 09:28 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in):
+ - ps aux should define aux not -aux.
+
+1998-02-11 09:19 hardaker
+
+ * agent/: mibgroup/at.c, mibgroup/hr_proc.c,
+ mibgroup/hr_storage.c, mibgroup/memory.c,
+ mibgroup/tcp.c, mibgroup/udp.c, mibgroup/var_route.c
+, auto_nlist.c:
+
+ - (generic.h, auto_nlist.c, at.c, hr_proc.c, hr_storage.c, memory.c,
+ tcp.c, udp.c, var_route.c): Patch from Dave Shield:
+ - fix all my typos ;-).
+ - create auto_nlist_value to return the looked-up value.
+
+1998-02-09 11:19 hardaker
+
+ * config.h.in, configure:
+
+ - (config.h.in, configure): check for ioctls.h.
+
+1998-02-09 11:18 hardaker
+
+ * agent/mibgroup/interfaces.c:
+
+ - (interfaces.c): include ioctls.h if available.
+
+1998-02-09 11:18 hardaker
+
+ * configure.in:
+
+ - (configure.in): check for ioctls.h
+
+1998-02-09 11:17 hardaker
+
+ * sedscript.in, version.h, bug-report:
+
+ version tag ( 3.4.pre3 )
+
+1998-02-09 11:06 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): Patch from Dave Shield:
+ - fix prototypes on my broken table walking routines.
+
+1998-02-09 11:03 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in):
+ - changed --with-shared-libraries to --enable-shared to match other pkgs.
+ - display arguments found for --enable-shared.
+
+1998-02-09 11:03 hardaker
+
+ * agent/auto_nlist.h:
+
+ - (auto_nlist.h): prototype wrapper.
+
+1998-02-09 11:03 hardaker
+
+ * agent/mibgroup/: at.c, disk.c, errormib.c,
+ extensible.c, hpux.c, hr_proc.c, hr_storage.c
+, hr_swrun.c, hr_system.c, icmp.c,
+ interfaces.c, ip.c, kernel_sunos5.c, loadave.c
+, memory.c, proc.c, tcp.c, udp.c,
+ var_route.c:
+
+ - (at.c, disk.c, errormib.c, extensible.c, hpux.c, hr_proc.c,
+ hr_storage.c, hr_swrun.c, hr_system.c, icmp.c, interfaces.c, ip.c,
+ kernel_sunos5.c, loadave.c, memory.c, proc.c, tcp.c, udp.c,
+ var_route.c):
+ - use auto_nlist.
+
+1998-02-06 17:10 hardaker
+
+ * Makefile.in, acconfig.h, config.h.in,
+ configure, configure.in, agent/Makefile.in,
+ agent/auto_nlist.c, agent/auto_nlist.h,
+ agent/autonlist.h, agent/kernel.c, agent/snmp_vars.c
+, agent/mibgroup/ip.c:
+
+ - (Makefile.in, acconfig.h, config.h.in, configure, configure.in,
+ auto_nlist.c, auto_nlist.h, autonlist.h, kernel.c, snmp_vars.c, ip.c):
+ - created a new auto_nlist function and use it in ip.c.
+
+1998-02-06 13:44 hardaker
+
+ * agent/mibgroup/hr_disk.c:
+
+ - (hr_disk.c): close() got caught inside an else it shouldn't have due
+ to an ifdef error.
+
+1998-02-06 13:29 hardaker
+
+ * agent/mibgroup/: at.c, icmp.c, interfaces.c,
+ ip.c, tcp.c, udp.c:
+
+ - (at.c, icmp.c, interfaces.c, ip.c, tcp.c, udp.c): protect against nlist.h
+
+1998-02-02 08:57 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): Patch from John Hawkinson:
+ - fix typo in configure for shared library extension w/o shared libraries.
+
+1998-01-30 15:25 hardaker
+
+ * apps/: snmp_parse_args.c, snmptrap.c:
+
+ - (snmp_parse_args.c, snmptrap.c): fix default port for snmptrap.
+
+1998-01-30 14:32 hardaker
+
+ * agent/mibgroup/interfaces.c:
+
+ - (interfaces.c): finish linux problems and use if_speed.
+
+1998-01-30 14:31 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in): check for if_speed.
+
+1998-01-30 13:50 hardaker
+
+ * aclocal.m4, configure:
+
+ - (aclocal.m4, configure): define ifnet for linux.
+
+1998-01-30 13:49 hardaker
+
+ * README:
+
+ - (README): I can't really have forgotten Simon's name in the list
+ could I?
+
+1998-01-30 10:55 hardaker
+
+ * version.h, bug-report, sedscript.in:
+
+ version tag ( 3.4.pre2 )
+
+1998-01-30 10:49 hardaker
+
+ * agent/mibgroup/disk.c, agent/mibgroup/host_res.h,
+ agent/mibgroup/pass.c, agent/mibgroup/registry.c,
+ agent/mibgroup/snmp_mib.c, agent/mibgroup/system.c,
+ agent/mibgroup/versioninfo.c, snmplib/snmp_api.h:
+
+ - (disk.c, host_res.h, pass.c, registry.c, snmp_mib.c, system.c,
+ versioninfo.c, snmp_api.h):
+ - include netinet/in.h for address structure.
+
+1998-01-30 10:43 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): change module indexing to use oid instead of a numeric.
+
+1998-01-30 10:42 hardaker
+
+ * agent/mibgroup/: registry.c, registry.h:
+
+ - (registry.c, registry.h): begin munging for new hierarchy.
+
+1998-01-30 10:41 hardaker
+
+ * agent/: read_config.c, snmp_vars.c, snmp_vars.h
+, var_struct.h:
+
+ - (read_config.c, snmp_vars.c, snmp_vars.h, var_struct.h):
+ - merge Dave's code with mine. Still a few bugs to work through.
+
+1998-01-30 10:40 hardaker
+
+ * agent/mibgroup/pass.c:
+
+ - (pass.c): put pass_comapre here.
+
+1998-01-30 09:01 hardaker
+
+ * agent/mibgroup/memory.c, agent/mibgroup/memory.h,
+ mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt, memory.c, memory.h): Patch from Luuk de Boer:
+ - report cached, buffer, and shared statistics for linux.
+
+1998-01-30 08:57 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): test for 'ps aux' (redhat 5.0).
+
+1998-01-23 16:34 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt, agent/mibgroup/extensible.c,
+ agent/mibgroup/pass.c, agent/mibgroup/registry.c,
+ agent/mibgroup/registry.h, agent/snmp_vars.c,
+ agent/snmp_vars.h, agent/var_struct.h, configure
+, configure.in:
+
+ - (configure, configure.in, snmp_vars.c, snmp_vars.h, var_struct.h,
+ extensible.c, pass.c, registry.c, registry.h, UCD-SNMP-MIB.txt):
+ - make the mib registry record and display a mib module name as well.
+
+1998-01-23 16:15 hardaker
+
+ * agent/mibgroup/: at.c, disk.c, host_res.h,
+ hr_other.h, icmp.c, interfaces.c, ip.c,
+ snmp_mib.c, system.c, tcp.c, ucd_snmp.h,
+ udp.c, versioninfo.c:
+
+ - (at.c, disk.c, host_res.h, hr_other.h, icmp.c, interfaces.c, ip.c,
+ snmp_mib.c, system.c, tcp.c, ucd_snmp.h, udp.c, versioninfo.c):
+ - #include "snmp_api.h"
+
+1998-01-23 16:14 hardaker
+
+ * agent/mibgroup/registry.c, mibs/UCD-SNMP-MIB.txt,
+ agent/mibgroup/registry.h:
+
+ - (registry.[ch], UCD-SNMP-MIB.txt):
+ - create a new table at ucdavis.103 to display registered mibs.
+
+1998-01-23 16:11 hardaker
+
+ * agent/: mibgroup/extensible.c, read_config.c,
+ read_config.h, snmp_vars.c, snmp_vars.h,
+ mibgroup/pass.c:
+
+ - (read_config.c, read_config.h, snmp_vars.c, snmp_vars.h,
+ extensible.c, pass.c):
+ - create new functions:
+ - register_subtree()
+ - register_mib()
+ - unregister_mib().
+ - get rid of read_config special stuff for extensibility and put it
+ in their own submodules which now call register_mib().
+
+1998-01-23 08:30 hardaker
+
+ * agent/mibgroup/memory.c:
+
+ - (memory.c): Patch from Niels Baggesen:
+ - don't close file descriptor in linux's FILE_TO_BUF macro.
+
+1998-01-21 22:05 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - create m/ and s/ directories and use them for supplemental config
+ include files based on the config.guess output.
+
+1998-01-21 17:32 hardaker
+
+ * Makefile.top, configure, configure.in,
+ agent/Makefile.in, apps/Makefile.in,
+ apps/snmpnetstat/Makefile.in, snmplib/Makefile.in:
+
+ - (Makefile.top, configure, configure.in, */Makefile.in):
+ - Do a better version of shlib support. Should be useable now at least.
+
+1998-01-21 11:12 hardaker
+
+ * agent/mibgroup/: disk.c, errormib.c, extensible.c
+, interfaces.c, loadave.c, memory.c,
+ pass.c, proc.c, system.c, util_funcs.c,
+ var_route.c, versioninfo.c:
+
+ - (disk.c, errormib.c, extensible.c, interfaces.c, loadave.c,
+ memory.c, pass.c, proc.c, system.c, util_funcs.c, var_route.c,
+ versioninfo.c):
+ - include struct.h explicitly.
+
+1998-01-21 11:12 hardaker
+
+ * agent/: read_config.c, snmp_agent.c, snmp_vars.c
+, snmpd.c:
+
+ - (read_config.c, snmp_agent.c, snmp_vars.c, snmpd.c):
+ - include struct.h explicitly.
+
+1998-01-21 11:11 hardaker
+
+ * Makefile.in, Makefile.top, acconfig.h,
+ config.h.in, configure, configure.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ local/Makefile.in, man/Makefile.in,
+ snmplib/Makefile.in, agent/mibgroup/Makefile.in,
+ agent/Makefile.in:
+
+ - (*/Makefile.in, Makefile.top, acconfig.h, config.h.in, configure,
+ configure.in):
+ - begin support for creating and using shared libraries.
+ - all Makefiles now include a Makefile.top for easier future global changes.
+
+1998-01-21 11:08 hardaker
+
+ * COPYING:
+
+ - (COPYING): update.
+
+1998-01-16 09:44 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): Patch from Sheshadri Yagati:
+ - signal a trap (2) when the agent is shut down.
+
+1998-01-12 09:56 hardaker
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - (kernel_sunos5.c): Patch from Niels Baggesen:
+ - increase buffer size to increase max interfaces reported on Solaris.
+
+1998-01-12 09:51 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): Undid anon-children change.
+
+1998-01-12 09:44 hardaker
+
+ * snmplib/: asn1.c, mib.c, snmp_api.h,
+ snmp_impl.h, system.h:
+
+ - (asn1.c, mib.c, snmp_api.h, snmp_impl.h, system.h): Patch from Niels
+ Baggesen:
+ - header changes and boolean check corrections.
+
+1998-01-12 09:41 hardaker
+
+ * agent/: read_config.c, snmp_vars.c, snmpd.c
+:
+
+ - (read_config.c, snmp_vars.c, snmpd.c): Patch from Niels Baggesen:
+ - header fixes.
+ - snmp_perror usage.
+
+1998-01-12 09:40 hardaker
+
+ * FAQ, INSTALL, Makefile.in:
+
+ - (FAQ, INSTALL, Makefile.in): Patch from Niels Baggesen:
+ - Documentation update to fix paths from recent changes.
+
+1998-01-12 09:21 hardaker
+
+ * agent/mibgroup/: alarm.c, at.c, context_vars.c
+, event.c, hr_device.c, hr_filesys.c,
+ hr_partition.c, hr_storage.c, hr_swinst.c,
+ hr_swrun.c, icmp.c, interfaces.c, ip.c,
+ proc.c, system.c, tcp.c, udp.c,
+ var_route.c:
+
+ - (alarm.c, at.c, context_vars.c, event.c, hr_device.c, hr_filesys.c,
+ hr_partition.c, hr_storage.c, hr_swinst.c, hr_swrun.c, icmp.c,
+ interfaces.c, ip.c, proc.c, system.c, tcp.c, udp.c, var_route.c):
+ Patch from Niels Baggesen:
+ - Fix headers for FreeBSD and NetBSD.
+
+1998-01-12 09:19 hardaker
+
+ * apps/: Makefile.in, snmpbulkwalk.c, snmpdelta.c
+, snmpget.c, snmpgetnext.c, snmpset.c,
+ snmpstatus.c, snmptable.c, snmptest.c,
+ snmptrap.c, snmptrapd.c, snmpwalk.c:
+
+ - (Makefile.in, snmpbulkwalk.c, snmpdelta.c, snmpget.c, snmpgetnext.c,
+ snmpset.c, snmpstatus.c, snmptable.c, snmptest.c, snmptrap.c,
+ snmptrapd.c, snmpwalk.c): Patch from Niels Baggesen:
+ - remove unused headers.
+ - snmp_perror changes.
+
+1998-01-12 09:19 hardaker
+
+ * apps/snmpnetstat/Makefile.in:
+
+ - (Makefile.in): Patch from Niels Baggesen: link directly to lib.
+
+1998-01-12 09:18 hardaker
+
+ * man/: mib_api.3, snmp_api.3:
+
+ - (mib_api.3, snmp_api.3): Patch from Niels Baggesen:
+ - doc update to reflect moved headers.
+
+1998-01-12 09:14 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from Dave Shield: fix anon_children invalid memory access.
+
+1998-01-05 17:33 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): swap args to merge_anon_children().
+
+1998-01-05 16:29 hardaker
+
+ * snmplib/asn1.c:
+
+ - (asn1.c): Patch from Niels Baggesen:
+ - fix asn1_build_objid.
+
+1998-01-05 13:28 hardaker
+
+ * TODO:
+
+ - (TODO): snmpv3
+
+1998-01-05 13:28 hardaker
+
+ * apps/snmptranslate.c:
+
+ - (snmptranslate.c): put init_mib back in place (opps).
+
+1998-01-05 13:28 hardaker
+
+ * snmplib/: mib.c, parse.c, parse.h:
+
+ - (mib.c, parse.c, parse.h): add a find_module() routine.
+
+1998-01-05 13:27 hardaker
+
+ * man/mib_api.3:
+
+ - (mib_api.3): change "all" to "ALL".
+
+1997-12-30 17:01 hardaker
+
+ * local/tkmib:
+
+ - (tkmib): Create a graphing widget.
+
+1997-12-30 14:00 hardaker
+
+ * local/tkmib:
+
+ - (tkmib):
+ - new command: table to display snmptables as a table.
+ - misc...
+
+1997-12-29 09:37 hardaker
+
+ * local/tkmib:
+
+ - (tkmib): First implementation.
+
+1997-12-23 16:30 hardaker
+
+ * version.h, sedscript.in, bug-report:
+
+ version tag ( 3.4.pre1 )
+
+1997-12-23 15:59 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): Create a mib variable to set/report if debugging
+ is on or off.
+
+1997-12-23 15:56 hardaker
+
+ * agent/mibgroup/: versioninfo.c, versioninfo.h:
+
+ - (versioninfo.c, versioninfo.h): Create a mib variable to set/report
+ if debugging is on or off.
+
+1997-12-23 15:27 hardaker
+
+ * agent/: mibgroup/at.c, mibgroup/at.h,
+ mibgroup/host_res.h, mibgroup/icmp.h,
+ mibgroup/interfaces.c, mibgroup/interfaces.h,
+ mibgroup/ip.h, mibgroup/tcp.c, mibgroup/tcp.h,
+ mibgroup/udp.c, mibgroup/udp.h, read_config.c,
+ snmp_vars.c:
+
+ - (at.c, at.h, host_res.h, icmp.h, interfaces.c, interfaces.h, ip.h,
+ tcp.c, tcp.h, udp.c, udp.h, read_config.c, snmp_vars.c):
+ - clean up required headers for linux.
+
+1997-12-23 14:46 hardaker
+
+ * agent/: mibgroup/at.c, mibgroup/icmp.c,
+ mibgroup/interfaces.c, mibgroup/ip.c,
+ mibgroup/snmp_mib.c, mibgroup/system.c, mibgroup/tcp.c
+, mibgroup/udp.c, read_config.c, snmp_vars.c
+:
+
+ - (at.c, icmp.c, interfaces.c, ip.c, snmp_mib.c, system.c, tcp.c, udp.c):
+ - Patch from Dave Shield to break up common_header.h.
+
+1997-12-23 14:44 hardaker
+
+ * man/: snmpd.1.def, snmptrapd.8:
+
+ - (snmpd.1.def, snmptrapd.8): debugging flag additions.
+
+1997-12-23 14:42 hardaker
+
+ * acconfig.h, config.h.in, agent/snmp_vars.c,
+ agent/snmpd.c, agent/mibgroup/at.c,
+ agent/mibgroup/disk.c, agent/mibgroup/example.c,
+ agent/mibgroup/hpux.c, agent/mibgroup/hr_device.c,
+ agent/mibgroup/hr_disk.c, agent/mibgroup/hr_filesys.c,
+ agent/mibgroup/hr_network.c, agent/mibgroup/hr_partition.c
+, agent/mibgroup/hr_print.c, agent/mibgroup/hr_proc.c
+, agent/mibgroup/hr_storage.c,
+ agent/mibgroup/hr_swinst.c, agent/mibgroup/hr_swrun.c,
+ agent/mibgroup/hr_system.c, agent/mibgroup/icmp.c,
+ agent/mibgroup/interfaces.c, agent/mibgroup/ip.c,
+ agent/mibgroup/kernel_sunos5.c, agent/mibgroup/pass.c,
+ agent/mibgroup/proc.c, agent/mibgroup/smux.c,
+ agent/mibgroup/snmp_bgp.c, agent/mibgroup/snmp_mib.c,
+ agent/mibgroup/snmp_ospf.c, agent/mibgroup/snmp_rip2.c,
+ agent/mibgroup/system.c, agent/mibgroup/tcp.c,
+ agent/mibgroup/udp.c, agent/mibgroup/wombat.c,
+ apps/snmp_parse_args.c, apps/snmpbulkwalk.c,
+ apps/snmpdelta.c, apps/snmpget.c, apps/snmpgetnext.c
+, apps/snmpset.c, apps/snmpstatus.c,
+ apps/snmptable.c, apps/snmptest.c,
+ apps/snmptranslate.c, apps/snmptrap.c,
+ apps/snmptrapd.c, apps/snmpwalk.c,
+ apps/snmpnetstat/if.c, apps/snmpnetstat/main.c,
+ snmplib/parse.c, snmplib/snmp_impl.h,
+ snmplib/system.c, snmplib/system.h:
+
+ - (*): Turn all debugging routines into library calls that can be
+ turned on and off at run time.
+ - DEBUGP() is now a typical printf style function and is used everywhere.
+ - void snmp_set_do_debugging(int).
+ - int snmp_get_do_debugging().
+
+1997-12-23 14:40 hardaker
+
+ * README:
+
+ - (README): Add Ted Rule to coders list.
+
+1997-12-23 12:48 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c):
+ - Change -f flag to -l and make -f no-fork.
+ - fix patch which munged ability to generate both -P and -s simultaneously.
+
+1997-12-23 12:32 hardaker
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): Patch from Ted Rule:
+ - Use syslog option LOG_PID on startup.
+ - fork if syslog enabled.
+ - Enable logging to other syslog facilities.
+ - print all trap data to a single syslog line.
+
+1997-12-23 11:46 hardaker
+
+ * agent/mibgroup/hpux.c:
+
+ - (hpux.c): #ifdef'ed out unused writeHP function.
+
+1997-12-23 11:42 hardaker
+
+ * snmplib/system.c:
+
+ - (snmplib/system.c): Patch from Johannes Grosen:
+ - fix non-existent nlist.h problems under linux redhat 5.0.
+
+1997-12-23 11:42 hardaker
+
+ * apps/snmptrap.c:
+
+ - (snmptrap.c): Patch from Johannes Grosen:
+ - fix non-existent nlist.h problems under linux redhat 5.0.
+
+1997-12-23 11:42 hardaker
+
+ * agent/: mibgroup/disk.c, mibgroup/errormib.c,
+ mibgroup/extensible.c, mibgroup/hr_filesys.c,
+ mibgroup/hr_proc.c, mibgroup/hr_storage.c,
+ mibgroup/hr_swrun.c, mibgroup/hr_system.c,
+ mibgroup/loadave.c, mibgroup/memory.c,
+ common_header.h:
+
+ - (mibgroup/*.c, common_header.h): Patch from Johannes Grosen:
+ - fix non-existent nlist.h problems under linux redhat 5.0.
+
+1997-12-23 11:41 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config.h.in, configure, configure.in): Patch from Johannes Grosen:
+ - fix non-existent nlist.h problems under linux redhat 5.0.
+
+1997-12-23 11:35 hardaker
+
+ * acconfig.h, config.h.in, sedscript.in:
+
+ - (acconfig.h, config.h.in, sedscript.in): BSDI definition fixes.
+
+1997-12-23 11:33 hardaker
+
+ * agent/mibgroup/hr_filesys.c:
+
+ - (hr_filesys.c): Solaris specific fixes.
+
+1997-12-23 11:20 hardaker
+
+ * agent/mibgroup/hr_swrun.c:
+
+ - (hr_swrun.c): Correct a non-casted malloc.
+
+1997-12-15 15:07 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (UCD-fields, oid_to_sym.in, oid_to_type.in, snmp_parse_args.c, acconfig.h):
+ - Patch from TANAKA Takashi:
+ - support more OS types in the ov/ directory files.
+ - mistake: bsdi was getting defined as irix.
+ - don't core dump on -v without any arguments.
+
+1997-12-15 15:07 hardaker
+
+ * ov/: UCD-fields, oid_to_sym.in, oid_to_type.in:
+
+ - (UCD-fields, oid_to_sym.in, oid_to_type.in): Patch from TANAKA Takashi:
+ - support more OS types in the ov/ directory files.
+ - mistake: bsdi was getting defined as irix.
+ - don't core dump on -v without any arguments.
+
+1997-12-15 11:14 hardaker
+
+ * agent/: mibgroup/at.c, mibgroup/example.c,
+ mibgroup/hr_proc.c, mibgroup/hr_storage.c,
+ mibgroup/hr_swrun.c, mibgroup/hr_system.c,
+ mibgroup/icmp.c, mibgroup/interfaces.c,
+ mibgroup/interfaces.h, mibgroup/ip.c,
+ mibgroup/loadave.c, mibgroup/memory.c,
+ mibgroup/route_write.c, mibgroup/tcp.c, mibgroup/udp.c
+, mibgroup/var_route.c, mibgroup/wombat.c,
+ common_header.h:
+
+ - (at.c, example.c, hr_proc.c, hr_storage.c, hr_swrun.c, hr_system.c,
+ icmp.c, interfaces.c, interfaces.h, ip.c, loadave.c, memory.c,
+ route_write.c, tcp.c, udp.c, var_route.c, wombat.c, common_header.h):
+ - Patch from Simon Leinen to improve irix 6.2 support.
+
+1997-12-15 11:08 hardaker
+
+ * agent/mibgroup/: host.h, ucd_snmp.h, v2party.h:
+
+ - (host.h, ucd_snmp.h, v2party.h):
+ - use config_add_mib().
+
+1997-12-15 11:08 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - new macro to change default MIBS when modules are compiled:
+ config_add_mib().
+
+1997-12-05 14:30 hardaker
+
+ * configure, configure.in:
+
+ - (configure, configure.in): warn instead of error for config_require macro's.
+
+1997-12-05 11:58 hardaker
+
+ * apps/: snmp_parse_args.c, snmp_parse_args.h,
+ snmpbulkwalk.c, snmpdelta.c, snmpget.c,
+ snmpgetnext.c, snmpset.c, snmptable.c,
+ snmptest.c, snmptrap.c, snmpwalk.c:
+
+ - (apps/*.c): support random access requests on all apps via -R switch.
+
+1997-12-05 08:46 hardaker
+
+ * snmplib/snmp_api.h:
+
+ - (snmp_api.h): Patch from Niels Baggesen:
+ - make trap variables long's not ints for 64bit machines to match
+ asn_build_int functions.
+
+1997-12-01 12:44 hardaker
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ - (*): 3.3.1 branch merged into main development branch.
+
+1997-12-01 12:39 hardaker
+
+ * apps/snmptable.c, apps/snmptrapd.c, man/snmp_api.3
+, mibs/RFC1271-MIB.txt, snmplib/Makefile.in,
+ snmplib/mib.c, snmplib/mib.h, snmplib/snmp.h,
+ snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmp_client.c:
+
+ - (*): 3.3.1 branch merged into main development branch.
+
+1997-12-01 12:32 hardaker
+
+ * FAQ, INSTALL, NEWS, README,
+ acconfig.h, bug-report, config.h.in, configure
+, configure.in, sedscript.in, version.h
+, agent/mibgroup/hr_disk.c, agent/mibgroup/hr_filesys.c
+, agent/mibgroup/hr_storage.c, agent/mibgroup/hr_swrun.c
+, agent/mibgroup/hr_utils.c, agent/mibgroup/proc.c
+, agent/mibgroup/smux.c:
+
+ - (*): 3.3.1 branch merged into main development branch.
+
+1997-11-17 08:10 hardaker
+
+ * agent/mibgroup/: party_vars.c (Ext-3-3-patches.1), party_vars.c
+:
+
+ - (party_vars.c): use strings.h define not string.h.
+
+1997-11-14 12:36 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.3 )
+
+1997-11-14 12:36 hardaker
+
+ * ChangeLog:
+
+ - (ChangeLog): version update.
+
+1997-11-14 12:35 hardaker
+
+ * FAQ, NEWS, README:
+
+ - (FAQ, NEWS, README): last documentation updates.
+
+1997-11-14 12:21 hardaker
+
+ * agent/mibgroup/wombat.c:
+
+ - (wombat.c): quick doc change.
+
+1997-11-14 08:32 hardaker
+
+ * README:
+
+ - (README): coder list update.
+
+1997-11-14 08:31 hardaker
+
+ * agent/mibgroup/wombat.c:
+
+ - (wombat.c): code comments from Alan Batie.
+
+1997-11-12 20:47 hardaker
+
+ * agent/: mibgroup/var_route.c, read_config.c:
+
+ - (var_route.c, read_config.c): STDC typos.
+
+1997-11-12 20:43 hardaker
+
+ * agent/: read_config.c, mibgroup/var_route.c:
+
+ - (var_route.c, read_config.c): fix qsort params for STDC.
+
+1997-11-12 20:35 hardaker
+
+ * agent/mibgroup/var_route.c, agent/read_config.c,
+ snmplib/acl_parse.c, snmplib/context_parse.c,
+ snmplib/party_parse.c, snmplib/snmp_auth.c:
+
+ - (var_route.c, read_config.c, snmpdelta.c): Patch from David Zimmerman:
+ - Fixes for AIX.
+
+1997-11-12 20:35 hardaker
+
+ * apps/snmpdelta.c:
+
+ - (): Patch from David Zimmerman:
+ - Fixes for AIX.
+
+1997-11-12 20:27 hardaker
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ - (win32/libsnmp_dll/libsnmp.def): Patch from Joe Marzot: function changes.
+
+1997-11-12 16:05 hardaker
+
+ * sedscript.in, version.h, bug-report:
+
+ version tag ( 3.3.pre11 )
+
+1997-11-12 15:41 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ snmplib/Makefile.in:
+
+ - (*/Makefile.in): make depend.
+
+1997-11-12 15:21 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): include STDC_HEADERS for AIX.
+
+1997-11-12 15:16 hardaker
+
+ * agent/mibgroup/party_vars.c:
+
+ - (party_vars.c): include STDC_HEADERS for AIX.
+
+1997-11-12 15:10 hardaker
+
+ * snmplib/system.h:
+
+ - (system.h): Don't include config.h!
+
+1997-11-12 11:49 hardaker
+
+ * apps/.cvsignore:
+
+ - (apps/.cvsignore): added snmptable.
+
+1997-11-12 10:44 hardaker
+
+ * NEWS:
+
+ - (NEWS): doc update.
+
+1997-11-12 10:38 hardaker
+
+ * snmplib/: parse.c, parse.h, snmp_api.c,
+ snmp_client.c:
+
+ - (parse.c, parse.h): Patch from Niels Baggesen:
+ - parser improvements.
+ - parser directory caching.
+ - save_descriptions/mib_warnings set functions.
+
+1997-11-12 10:33 hardaker
+
+ * man/: snmpdelta.1, snmptable.1, snmptrapd.8:
+
+ - (man/snmpdelta.1,snmptable.1,snmptrapd.8): Patch from Niels Baggesen:
+ - documentation changes and additions.
+
+1997-11-12 10:32 hardaker
+
+ * apps/snmpnetstat/main.c:
+
+ - (snmpnetstat/main.c): Patch from Niels Baggesen:
+ - snmpv2c support and argument parsing changes.
+
+1997-11-12 10:30 hardaker
+
+ * apps/: snmp_parse_args.c, snmpdelta.c, snmpgetnext.c
+, snmptable.c, snmptest.c, snmptranslate.c
+, snmptrap.c, snmptrapd.c:
+
+ - (apps/*.c): Patch from Niels Baggesen:
+ - various (remove unneeded vars, etc).
+ - add snmptable.
+ - make snmptrapd multi-lingual.
+
+1997-11-12 10:29 hardaker
+
+ * apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ man/Makefile.in:
+
+ - (Makefile.in): Patch from Niels Baggesen:
+ - add @datadir@ to files that needed it.
+
+1997-11-12 10:28 hardaker
+
+ * agent/mibgroup/party_vars.c:
+
+ - (party_vars.c): Patch from Niels Baggesen:
+ - include netinet/in.h if available.
+
+1997-11-12 10:27 hardaker
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - (kernel_sunos5.c): Patch from Niels Baggesen:
+ - solaris patches.
+
+1997-11-12 10:27 hardaker
+
+ * agent/Makefile.in:
+
+ - (*/Makefile.in): Patch from Niels Baggesen:
+ - add @datadir@ to files that needed it.
+
+1997-11-12 10:25 hardaker
+
+ * NEWS, TODO:
+
+ - (NEWS, TODO): Patch from Niels Baggesen:
+ - doc update.
+
+1997-11-12 09:18 hardaker
+
+ * agent/mibgroup/hr_swrun.c:
+
+ - (hr_swrun.c): Patch from Dave Shield for linux/hpux10 problems.
+
+1997-11-12 09:17 hardaker
+
+ * man/mib_api.3:
+
+ - (mib_api.3): Doc update from Dave Shield.
+
+1997-11-12 09:17 hardaker
+
+ * FAQ:
+
+ - (FAQ): Doc update from Dave Shield.
+
+1997-11-12 08:26 hardaker
+
+ * snmplib/snmp_client.c:
+
+ - (snmp_client.c): Patch from Joe Marzot:
+ - Free a pdu in a spot that should technically never be needed, but
+ is nice for people reading the code.
+
+1997-11-12 07:42 hardaker
+
+ * apps/snmptranslate.c:
+
+ - (snmptranslate.c): Patch from Joe Marzot: W32 specific fixes.
+
+1997-11-07 16:38 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.3.pre10 )
+
+1997-11-07 16:37 hardaker
+
+ * NEWS, README, TODO:
+
+ - (NEWS, README, TODO): Documentation updates.
+
+1997-11-07 16:14 hardaker
+
+ * configure, configure.in, configure,
+ configure.in:
+
+ - (configure.in): watch out for /usr/ucb/cc on solaris and don't use it.
+
+1997-11-07 15:28 hardaker
+
+ * acconfig.h, config.h.in, apps/snmpgetnext.c,
+ snmplib/parse.c, snmplib/parse.h,
+ snmplib/snmp_client.c, win32/config.h, win32/win32.opt
+, win32/libsnmp/libsnmp.plg,
+ win32/libsnmp_dll/libsnmp.def,
+ win32/libsnmp_dll/libsnmp_dll.dsp,
+ win32/libsnmp_dll/libsnmp_dll.plg,
+ win32/snmpbulkwalk/snmpbulkwalk.dsp,
+ win32/snmpbulkwalk/snmpbulkwalk.plg,
+ win32/snmpget/snmpget.dsp, win32/snmpget/snmpget.plg,
+ win32/snmpgetnext/snmpgetnext.dsp,
+ win32/snmpgetnext/snmpgetnext.plg, win32/snmpset/snmpset.dsp
+, win32/snmpset/snmpset.plg,
+ win32/snmpstatus/snmpstatus.dsp,
+ win32/snmpstatus/snmpstatus.plg,
+ win32/snmptranslate/snmptranslate.dsp,
+ win32/snmptranslate/snmptranslate.plg,
+ win32/snmpwalk/snmpwalk.dsp, win32/snmpwalk/snmpwalk.plg
+:
+
+ - (*): merge to main branch: patches from Joe Marzot.
+
+1997-11-07 13:38 hardaker
+
+ * apps/snmpwalk.c:
+
+ - (snmpwalk.c): stop on no response from host.
+
+1997-11-07 13:37 hardaker
+
+ * agent/mibgroup/hr_network.c:
+
+ - (hr_network.c): don't pass char ** to interfaces_scan_next().
+
+1997-11-07 13:37 hardaker
+
+ * agent/: read_config.c, snmp_agent.c, snmpd.c:
+
+ - (read_config.c, snmp_agent.c, snmpd.c): USING.*_MIB_MODULE -> USING.*_MODULE.
+
+1997-11-07 12:28 hardaker
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - (kernel_sunos5.c): patch from Niels for solaris >2.6.
+
+1997-11-07 12:25 hardaker
+
+ * agent/mibgroup/hr_swrun.c:
+
+ - (hr_swrun.c): don't print a variable that doesn't exist under linux.
+
+1997-11-07 12:24 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (configure.in): check for linux/hdreg.h
+
+1997-11-05 15:29 hardaker
+
+ * sedscript.in, version.h, bug-report:
+
+ version tag ( 3.3.pre9 )
+
+1997-11-05 14:40 hardaker
+
+ * agent/mibgroup/memory.c:
+
+ - (memory.c): protect vmmeter.h from multiple inclusions on netbsd.
+
+1997-11-05 13:59 hardaker
+
+ * Makefile.in, agent/Makefile.in,
+ agent/mibgroup/kernel_sunos5.c, snmplib/mib.c:
+
+ - (Makefile.in, kernel_sunos5.c, mib.c): Patch from Niels Baggesen:
+ - octet counters for solaris.
+ - Makefile.in patches.
+
+1997-11-05 13:56 hardaker
+
+ * agent/mibgroup/: at.c, icmp.c, interfaces.c,
+ ip.c, tcp.c, udp.c:
+
+ - (at.c, icmp.c, interfaces.c, ip.c, tcp.c, udp.c):
+ - #include "mib_module_config.h"
+
+1997-11-05 13:51 hardaker
+
+ * agent/: snmp_agent.c, snmp_vars.c, snmpd.c,
+ mibgroup/disk.c, mibgroup/proc.c,
+ mibgroup/util_funcs.c:
+
+ - (snmp_agent.c, snmp_vars.c, snmpd.c, disk.c, proc.c, util_funcs.c):
+ - #include "mib_module_config.h".
+
+1997-11-05 13:48 hardaker
+
+ * agent/: common_header.h, mibgroup/hr_disk.c,
+ mibgroup/hr_filesys.c, mibgroup/hr_swrun.c,
+ mibgroup/hr_utils.c, mibgroup/var_route.c:
+
+ - (*): merge from Dave's pre6 patches.
+
+1997-11-05 13:42 hardaker
+
+ * apps/Makefile.in:
+
+ - (apps/Makefile.in): put snmptrapd in @sbindir@
+
+1997-11-04 12:47 hardaker
+
+ * configure, configure.in:
+
+ - (configure.in):
+ - Check for $prefix being defined as NONE for other vars.
+
+1997-11-04 12:47 hardaker
+
+ * agent/read_config.c:
+
+ - (read_config.c):
+ - #include mib_module_config.h
+ - USING_EXTENSIBLE_MIB_MODULE -> USING_EXTENSIBLE_MIB_MODULE
+
+1997-10-29 14:00 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.3.pre8 )
+
+1997-10-29 12:58 hardaker
+
+ * agent/mibgroup/host_res.h:
+
+ - (host_res.h): don't include config.h twice.
+
+1997-10-29 12:57 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (config*): check and include sys/cdefs.h in config.h.
+
+1997-10-29 12:42 hardaker
+
+ * acconfig.h, configure.in, agent/common_header.h
+, agent/kernel.c, agent/kernel.h,
+ agent/read_config.c, agent/read_config.h,
+ agent/snmp_agent.c, agent/snmp_agent.h,
+ agent/snmp_vars.c, agent/snmp_vars.h, agent/snmpd.c
+, agent/snmpd.h, agent/var_struct.h,
+ agent/view_parse.c, agent/mibgroup/acl_vars.c,
+ agent/mibgroup/acl_vars.h, agent/mibgroup/alarm.c,
+ agent/mibgroup/alarm.h, agent/mibgroup/at.c,
+ agent/mibgroup/at.h, agent/mibgroup/context_vars.c,
+ agent/mibgroup/context_vars.h, agent/mibgroup/disk.c,
+ agent/mibgroup/disk.h, agent/mibgroup/errormib.c,
+ agent/mibgroup/errormib.h, agent/mibgroup/event.c,
+ agent/mibgroup/event.h, agent/mibgroup/example.c,
+ agent/mibgroup/example.h, agent/mibgroup/extensible.c,
+ agent/mibgroup/extensible.h, agent/mibgroup/hpux.h,
+ agent/mibgroup/hr_device.c, agent/mibgroup/hr_filesys.c
+, agent/mibgroup/hr_storage.c, agent/mibgroup/hr_utils.h
+, agent/mibgroup/icmp.c, agent/mibgroup/icmp.h,
+ agent/mibgroup/interfaces.c, agent/mibgroup/interfaces.h
+, agent/mibgroup/ip.c, agent/mibgroup/ip.h,
+ agent/mibgroup/loadave.c, agent/mibgroup/loadave.h,
+ agent/mibgroup/memory.c, agent/mibgroup/memory.h,
+ agent/mibgroup/party_vars.c, agent/mibgroup/party_vars.h
+, agent/mibgroup/pass.c, agent/mibgroup/pass.h,
+ agent/mibgroup/proc.c, agent/mibgroup/proc.h,
+ agent/mibgroup/route_write.h, agent/mibgroup/smux.c,
+ agent/mibgroup/smux.h, agent/mibgroup/snmp_mib.c,
+ agent/mibgroup/snmp_mib.h, agent/mibgroup/system.c,
+ agent/mibgroup/system.h, agent/mibgroup/tcp.c,
+ agent/mibgroup/tcp.h, agent/mibgroup/udp.c,
+ agent/mibgroup/udp.h, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/util_funcs.h, agent/mibgroup/var_route.c
+, agent/mibgroup/var_route.h,
+ agent/mibgroup/versioninfo.c, agent/mibgroup/versioninfo.h
+, agent/mibgroup/view_vars.c, agent/mibgroup/view_vars.h
+, agent/mibgroup/wombat.c, agent/mibgroup/wombat.h
+, apps/.cvsignore, apps/snmp_parse_args.c,
+ apps/snmp_parse_args.h, apps/snmpbulkwalk.c,
+ apps/snmpdelta.c, apps/snmpget.c, apps/snmpgetnext.c
+, apps/snmpset.c, apps/snmpstatus.c,
+ apps/snmptest.c, apps/snmptranslate.c,
+ apps/snmptrap.c, apps/snmptrapd.c, apps/snmpwalk.c
+, apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c
+, apps/snmpnetstat/main.c, apps/snmpnetstat/netstat.h
+, apps/snmpnetstat/route.c, snmplib/acl.c,
+ snmplib/acl.h, snmplib/acl_parse.c, snmplib/asn1.h
+, snmplib/context.c, snmplib/context.h,
+ snmplib/context_parse.c, snmplib/md5.c, snmplib/md5.h
+, snmplib/mib.c, snmplib/mib.h, snmplib/parse.c
+, snmplib/parse.h, snmplib/party.h,
+ snmplib/party_parse.c, snmplib/snmp.h,
+ snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmp_auth.c, snmplib/snmp_client.c,
+ snmplib/snmp_client.h, snmplib/snmp_impl.h,
+ snmplib/system.c, snmplib/system.h, snmplib/view.h
+, win32/config.h:
+
+ - (*.*.*): __UCD_P -> __P, and a configure check to look for it.
+
+1997-10-29 12:23 hardaker
+
+ * snmplib/parse.h:
+
+ - (parse.h): STATUS_KW_OPTIONAL -> STATUS_OPTIONAL
+
+1997-10-29 11:20 hardaker
+
+ * acconfig.h, config.h.in, agent/snmp_agent.c,
+ agent/snmp_vars.c, agent/mibgroup/disk.c,
+ agent/mibgroup/errormib.c, agent/mibgroup/extensible.c,
+ agent/mibgroup/loadave.c, apps/Makefile.in,
+ apps/snmpbulkwalk.c, apps/snmpdelta.c, apps/snmpget.c
+, apps/snmpgetnext.c, apps/snmpset.c,
+ apps/snmpstatus.c, apps/snmptest.c,
+ apps/snmptranslate.c, apps/snmptrapd.c,
+ apps/snmpwalk.c, man/Makefile.in, man/snmpdelta.1
+, snmplib/asn1.c, snmplib/mib.c, snmplib/mib.h
+, snmplib/parse.h:
+
+ - (acconfig.h, asn1.c, mib.[ch], parse.h,apps/*,errormib.c,loadave.c,
+ extensible.c, disk.c, snmpdelta*): Patch from Niels Baggesen:
+ - the now wellknown NetBSD fix,
+ - SunOS4 cc doesn't like unsigned literals or strtoul,
+ - added a char version of ";",
+ - added fprint_variable, fprint_objid etc
+ - changed the apps to print all error messages to stderr,
+ - completed the access and status values in snmplib/parse.h
+ - added a roughly patched version of snmpdelta.
+
+1997-10-29 10:54 hardaker
+
+ * agent/Makefile.in:
+
+ - (agent/Makefile.in): opps, forgot to put in @exec_path@.
+
+1997-10-29 10:47 hardaker
+
+ * Makefile.in, acconfig.h, config.h.in,
+ configure, configure.in, agent/Makefile.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ local/Makefile.in, man/Makefile.in, mibs/Makefile.in
+, ov/Makefile.in:
+
+ - (config*, */Makefile.in):
+ - Move snmplibpath to @datadir@ which defaults to /usr/local/share/snmp.
+
+1997-10-29 10:25 hardaker
+
+ * Makefile.in, configure.in, agent/Makefile.in
+, apps/Makefile.in, apps/snmpnetstat/Makefile.in
+, local/Makefile.in, man/Makefile.in,
+ man/mib_api.3, man/snmpd.1.def, man/snmpd.conf.5.def
+, mibs/Makefile.in, ov/Makefile.in:
+
+ - (*/Makefile.in, man/*):
+ - Patch from Simon Burge to change installation paths.
+ - (modified to point agent to sbindir instead of etcdir).
+
+1997-10-29 10:06 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def): remove space before % sign.
+
+1997-10-29 10:06 hardaker
+
+ * agent/mibgroup/disk.c:
+
+ - (disk.c): fix pointer problems from old read_config form to new.
+
+1997-10-29 09:57 hardaker
+
+ * sedscript.in, agent/mibgroup/disk.c,
+ agent/mibgroup/disk.h, agent/mibgroup/struct.h,
+ man/snmpd.conf.5.def, mibs/UCD-SNMP-MIB.txt:
+
+ - (disk.[ch], struct.h, sedscript.in, snmpd.conf.5.def, UCD-SNMP-MIB.txt):
+ - Patch from Simon Burge to allow a minimum percentage on disk space.
+ - (was originally a maximum, but I changed it to minimum instead).
+
+1997-10-29 09:42 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): add sys/select.h for aix.
+
+1997-10-29 09:41 hardaker
+
+ * apps/snmptrap.c:
+
+ - (snmptrap.c): remove unused nlist struct.
+
+1997-10-28 17:12 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.3.pre7 )
+
+1997-10-28 17:10 hardaker
+
+ * agent/mibgroup/util_funcs.c:
+
+ - (util_funcs.c): Patch from Nobuo_Okabe@yokogawa.co.jp:
+ - fix unwrapped fopen() by adding return NULL check.
+
+1997-10-28 17:09 hardaker
+
+ * acconfig.h, config.h.in, mibs/UCD-SNMP-MIB.txt
+:
+
+ - (acconfig.h, UCD-SNMP-MIB.txt): define bsdi agent type.
+
+1997-10-28 15:49 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/mibgroup/route_write.c,
+ agent/mibgroup/var_route.c:
+
+ - (config*, route_write.c, var_route.c):
+ - fix rtentry problems once and for probably never.
+
+1997-10-28 14:53 hardaker
+
+ * acconfig.h, agent/common_header.h, agent/kernel.c
+, agent/kernel.h, agent/read_config.c,
+ agent/read_config.h, agent/snmp_agent.c,
+ agent/snmp_agent.h, agent/snmp_vars.c,
+ agent/snmp_vars.h, agent/snmpd.c, agent/snmpd.h
+, agent/var_struct.h, agent/view_parse.c,
+ agent/mibgroup/acl_vars.c, agent/mibgroup/acl_vars.h,
+ agent/mibgroup/alarm.c, agent/mibgroup/alarm.h,
+ agent/mibgroup/at.c, agent/mibgroup/at.h,
+ agent/mibgroup/context_vars.c, agent/mibgroup/context_vars.h
+, agent/mibgroup/disk.c, agent/mibgroup/disk.h,
+ agent/mibgroup/errormib.c, agent/mibgroup/errormib.h,
+ agent/mibgroup/event.c, agent/mibgroup/event.h,
+ agent/mibgroup/example.c, agent/mibgroup/example.h,
+ agent/mibgroup/extensible.c, agent/mibgroup/extensible.h
+, agent/mibgroup/hpux.h, agent/mibgroup/hr_device.c
+, agent/mibgroup/hr_filesys.c,
+ agent/mibgroup/hr_storage.c, agent/mibgroup/hr_utils.h,
+ agent/mibgroup/icmp.c, agent/mibgroup/icmp.h,
+ agent/mibgroup/interfaces.c, agent/mibgroup/interfaces.h
+, agent/mibgroup/ip.c, agent/mibgroup/ip.h,
+ agent/mibgroup/loadave.c, agent/mibgroup/loadave.h,
+ agent/mibgroup/memory.c, agent/mibgroup/memory.h,
+ agent/mibgroup/party_vars.c, agent/mibgroup/party_vars.h
+, agent/mibgroup/pass.c, agent/mibgroup/pass.h,
+ agent/mibgroup/proc.c, agent/mibgroup/proc.h,
+ agent/mibgroup/route_write.h, agent/mibgroup/smux.c,
+ agent/mibgroup/smux.h, agent/mibgroup/snmp_mib.c,
+ agent/mibgroup/snmp_mib.h, agent/mibgroup/system.c,
+ agent/mibgroup/system.h, agent/mibgroup/tcp.c,
+ agent/mibgroup/tcp.h, agent/mibgroup/udp.c,
+ agent/mibgroup/udp.h, agent/mibgroup/util_funcs.c,
+ agent/mibgroup/util_funcs.h, agent/mibgroup/var_route.c
+, agent/mibgroup/var_route.h,
+ agent/mibgroup/versioninfo.c, agent/mibgroup/versioninfo.h
+, agent/mibgroup/view_vars.c, agent/mibgroup/view_vars.h
+, agent/mibgroup/wombat.c, agent/mibgroup/wombat.h
+, apps/snmp_parse_args.c, apps/snmp_parse_args.h,
+ apps/snmpbulkwalk.c, apps/snmpget.c,
+ apps/snmpgetnext.c, apps/snmpset.c, apps/snmpstatus.c
+, apps/snmptest.c, apps/snmptranslate.c,
+ apps/snmptrap.c, apps/snmptrapd.c, apps/snmpwalk.c
+, apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c
+, apps/snmpnetstat/main.c, apps/snmpnetstat/netstat.h
+, apps/snmpnetstat/route.c, snmplib/acl.c,
+ snmplib/acl.h, snmplib/acl_parse.c, snmplib/asn1.h
+, snmplib/context.c, snmplib/context.h,
+ snmplib/context_parse.c, snmplib/md5.c, snmplib/md5.h
+, snmplib/mib.c, snmplib/mib.h, snmplib/parse.c
+, snmplib/parse.h, snmplib/party.h,
+ snmplib/party_parse.c, snmplib/snmp.h,
+ snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmp_auth.c, snmplib/snmp_client.c,
+ snmplib/snmp_client.h, snmplib/snmp_impl.h,
+ snmplib/system.c, snmplib/system.h, snmplib/view.h
+, win32/config.h:
+
+ - (*.*.*.*): rename macro __P -> __UCD_P to reduce stupid conflicts.
+
+1997-10-28 14:42 hardaker
+
+ * configure, configure.in:
+
+ - (config*): fix rtentry structure checks for the *bsd groups.
+
+1997-10-28 14:30 hardaker
+
+ * acconfig.h, config.h.in, snmplib/mib.c:
+
+ - (acconfig.h, mib.c): use ';'s for DOS env paths.
+
+1997-10-28 09:56 hardaker
+
+ * acconfig.h, snmplib/snmp.c, snmplib/system.c
+, snmplib/system.h:
+
+ - (acconfig.h, system.[ch], snmp.c): move strdup def to system.[ch].
+
+1997-10-27 18:31 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.3.pre6 )
+
+1997-10-27 18:26 hardaker
+
+ * configure, configure.in:
+
+ - (configure.in): fix config_arch_require macro to actually work.
+
+1997-10-27 18:18 hardaker
+
+ * snmplib/: acl_parse.c, context_parse.c, party_parse.c
+, snmp_api.c, snmp_api.h, snmp_client.c:
+
+ - (snmplib/*.c): use snmp_set_detail to handle malloc/free of snmp_detail.
+
+1997-10-27 18:18 hardaker
+
+ * apps/snmpwalk.c:
+
+ - (snmpwalk.c): remove gotroot var.
+
+1997-10-27 18:05 hardaker
+
+ * win32/: libsnmp/libsnmp.dsp, libsnmp/libsnmp.plg,
+ libsnmp_dll/libsnmp.def, libsnmp_dll/libsnmp_dll.dsp,
+ libsnmp_dll/libsnmp_dll.plg, snmpbulkwalk/snmpbulkwalk.dsp
+, snmpbulkwalk/snmpbulkwalk.plg, snmpget/snmpget.dsp
+, snmpget/snmpget.plg, snmpgetnext/snmpgetnext.dsp
+, snmpgetnext/snmpgetnext.plg, snmpset/snmpset.dsp
+, snmpset/snmpset.plg, snmpstatus/snmpstatus.dsp,
+ snmpstatus/snmpstatus.plg, snmptranslate/snmptranslate.dsp
+, snmptranslate/snmptranslate.plg, snmpwalk/snmpwalk.dsp
+, snmpwalk/snmpwalk.plg:
+
+ - (win32): add files on main branch.
+
+1997-10-27 18:02 hardaker
+
+ * win32/: config.h, win32.dsw, win32.opt:
+
+ win32 files
+
+1997-10-27 17:47 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): merge bugs: else check against pdu command type.
+
+1997-10-27 17:44 hardaker
+
+ * snmplib/snmp_auth.c:
+
+ - (snmp_auth.c): merge bugs. Missing brackets.
+
+1997-10-27 17:43 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): missing a else statement (sigh).
+
+1997-10-27 17:43 hardaker
+
+ * agent/mibgroup/: hr_device.h, hr_disk.h, hr_filesys.h
+, hr_network.h, hr_print.h, hr_proc.h,
+ hr_swinst.h, hr_swrun.h, hr_system.h:
+
+ - (agent/mibgroup/hr_*.h): proper init_ prototypes.
+
+1997-10-27 17:42 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): two modules for extensible count.
+
+1997-10-27 17:05 hardaker
+
+ * apps/snmpstatus.c:
+
+ - (snmpstatus.c): remove duplicate declairation.
+
+1997-10-27 17:04 hardaker
+
+ * agent/mibgroup/: hr_device.c, hr_disk.c, hr_filesys.c
+, hr_network.c, hr_partition.c, hr_print.c,
+ hr_proc.c, hr_storage.c, hr_swinst.c, hr_swrun.c
+, hr_system.c:
+
+ - (hr_*.c): ERROR -> ERROR_MSG.
+
+1997-10-27 16:34 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ - (snmp_api.[ch]): fix perror losses from merge.
+
+1997-10-27 16:26 hardaker
+
+ * config.h.in, configure, configure.in,
+ agent/kernel.c, agent/snmp_agent.c, agent/snmp_vars.c
+, agent/mibgroup/acl_vars.c, agent/mibgroup/alarm.c
+, agent/mibgroup/at.c, agent/mibgroup/context_vars.c
+, agent/mibgroup/event.c, agent/mibgroup/example.c
+, agent/mibgroup/icmp.c, agent/mibgroup/interfaces.c
+, agent/mibgroup/ip.c, agent/mibgroup/party_vars.c
+, agent/mibgroup/snmp_mib.c, agent/mibgroup/system.c
+, agent/mibgroup/tcp.c, agent/mibgroup/udp.c,
+ agent/mibgroup/var_route.c, agent/mibgroup/view_vars.c,
+ agent/mibgroup/wombat.c, apps/snmp_parse_args.c,
+ apps/snmpbulkwalk.c, apps/snmpget.c,
+ apps/snmpgetnext.c, apps/snmpset.c, apps/snmpstatus.c
+, apps/snmptranslate.c, apps/snmptrap.c,
+ apps/snmptrapd.c, apps/snmpwalk.c,
+ apps/snmpnetstat/main.c, snmplib/acl.c,
+ snmplib/acl_parse.c, snmplib/asn1.c, snmplib/asn1.h
+, snmplib/context.c, snmplib/context_parse.c,
+ snmplib/md5.c, snmplib/mib.c, snmplib/parse.c,
+ snmplib/parse.h, snmplib/party.c,
+ snmplib/party_parse.c, snmplib/snmp.c, snmplib/snmp.h
+, snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmp_auth.c, snmplib/snmp_client.c,
+ snmplib/snmp_impl.h, snmplib/system.c,
+ snmplib/system.h, snmplib/view.c:
+
+ - (*): merge of W32 port and main version branch.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmpwalk/snmpwalk.plg:
+
+ file snmpwalk.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmpwalk/snmpwalk.dsp:
+
+ file snmpwalk.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmptranslate/snmptranslate.dsp:
+
+ file snmptranslate.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmptranslate/snmptranslate.plg:
+
+ file snmptranslate.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmpstatus/snmpstatus.dsp:
+
+ file snmpstatus.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmpstatus/snmpstatus.plg:
+
+ file snmpstatus.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmpset/snmpset.plg:
+
+ file snmpset.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmpset/snmpset.dsp:
+
+ file snmpset.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmpgetnext/snmpgetnext.dsp:
+
+ file snmpgetnext.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmpgetnext/snmpgetnext.plg:
+
+ file snmpgetnext.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmpget/snmpget.dsp:
+
+ file snmpget.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmpget/snmpget.plg:
+
+ file snmpget.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmpbulkwalk/snmpbulkwalk.plg:
+
+ file snmpbulkwalk.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/snmpbulkwalk/snmpbulkwalk.dsp:
+
+ file snmpbulkwalk.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ file libsnmp.def was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/libsnmp_dll/libsnmp_dll.dsp:
+
+ file libsnmp_dll.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/libsnmp_dll/libsnmp_dll.plg:
+
+ file libsnmp_dll.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/libsnmp/libsnmp.dsp:
+
+ file libsnmp.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/libsnmp/libsnmp.plg:
+
+ file libsnmp.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/win32.dsw:
+
+ file win32.dsw was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/config.h:
+
+ file config.h was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 14:19 hardaker
+
+ * win32/win32.opt:
+
+ file win32.opt was initially added on branch V2C-WIN32-3-3-pre3.
+
+1997-10-27 09:56 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/mibgroup/at.h,
+ agent/mibgroup/icmp.h, agent/mibgroup/interfaces.c,
+ agent/mibgroup/interfaces.h, agent/mibgroup/ip.h,
+ agent/mibgroup/tcp.h, agent/mibgroup/ucd_snmp.h,
+ agent/mibgroup/udp.h, agent/mibgroup/var_route.c,
+ agent/mibgroup/var_route.h:
+
+ - (config*, agent/mibgroup/*.h):
+ - new config macro: config_arch_require(arch, module).
+ - moved arch dependant modules (memory, hpux, kernel_sunos5) loads
+ from the configure into the appropriate .h files.
+ - (interfaces.c, var_route.c):
+ - typecast klookup calls for freebsd2.
+
+1997-10-22 11:39 hardaker
+
+ * agent/common_header.h, agent/read_config.c,
+ agent/mibgroup/disk.c, apps/snmp_parse_args.c:
+
+ - (common_header.h, read_config.c, disk.c, snmp_parse_args.c):
+ - Typo's fixed by Niels.
+
+1997-10-21 12:36 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.3.pre5 )
+
+1997-10-21 12:36 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ snmplib/Makefile.in:
+
+ - (*/Makefile.in): did a make depend.
+
+1997-10-21 12:32 hardaker
+
+ * apps/snmpnetstat/Makefile.in, snmplib/Makefile.in:
+
+ - (*/Makefile.in): make makefileindepend..
+
+1997-10-21 12:31 hardaker
+
+ * Makefile.in, agent/Makefile.in,
+ agent/mibgroup/Makefile.in, apps/Makefile.in:
+
+ - (*/Makefile.in): make makefileindepend setup.
+
+1997-10-21 12:24 hardaker
+
+ * agent/: Makefile.in, read_config.c, read_config.h
+, snmp_agent.c, snmp_vars.c, snmpd.c,
+ mibgroup/disk.h, mibgroup/extensible.c,
+ mibgroup/extensible.h, mibgroup/loadave.h,
+ mibgroup/pass.h, mibgroup/proc.c, mibgroup/proc.h
+, mibgroup/read_config.c, mibgroup/read_config.h,
+ mibgroup/system.c, mibgroup/util_funcs.c,
+ mibgroup/util_funcs.h:
+
+ - (agent/read_config.[ch], snmpd.c, snmp_vars.c, mibgroup/*):
+ - moved read_config.[ch] up a level to always be compiled in.
+
+1997-10-21 11:02 hardaker
+
+ * bug-report, sedscript.in, version.h:
+
+ version tag ( 3.3.pre4 )
+
+1997-10-21 11:01 hardaker
+
+ * NEWS:
+
+ - (NEWS): beginnings of NEWS updates.
+
+1997-10-21 11:00 hardaker
+
+ * agent/mibgroup/: hr_storage.c, hr_swrun.c, memory.c
+:
+
+ - (hr_storage.c, hr_swrun.c, memory.c): close open files on linux.
+
+1997-10-21 10:45 hardaker
+
+ * apps/snmp_parse_args.c:
+
+ - (snmp_parse_args.c): allow -v 2h and 2p for party code.
+
+1997-10-21 10:15 hardaker
+
+ * PORTING, README:
+
+ - (PORTING, README): minor updates.
+
+1997-10-20 19:43 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): define at least blank func nlist_init() on linux.
+
+1997-10-20 19:42 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in): define linux's OS type.
+
+1997-10-20 18:01 hardaker
+
+ * INSTALL, configure, configure.in,
+ agent/mibgroup/example.c, agent/mibgroup/mibII.h,
+ agent/mibgroup/smux_gated.h, agent/mibgroup/ucd_snmp.h,
+ agent/mibgroup/v2party.h, agent/mibgroup/wombat.c,
+ agent/mibgroup/wombat.h:
+
+ - (config*, agent/mibgroup/v2party.h, ucd_snmp.h, smux_gated.h):
+ - created new wrappers for the various modules to make them easy to
+ add and remove as needed.
+
+1997-10-20 17:16 hardaker
+
+ * agent/mibgroup/: host.c, host.h, hr_device.c,
+ hr_disk.c, hr_filesys.c, hr_network.c, hr_other.c
+, hr_partition.c, hr_print.c, hr_proc.c,
+ hr_storage.c, hr_swinst.c, hr_swrun.c,
+ hr_system.c:
+
+ - (config*, agent/mibgroup/hr_*.c):
+ - A module.c file is no longer required. Only the .h file is
+ necessary, for people who want to have one module wrap a bunch of others.
+ - removed host.c
+ - renamed all hr_init functions to be auto-called.
+
+1997-10-20 17:15 hardaker
+
+ * agent/mibgroup/: README, wombat.c, wombat.h:
+
+ - (agent/mibgroup/README, wombat.[ch]):
+ - documentation update to reflect config_parse_dot_conf() usage.
+
+1997-10-20 17:01 hardaker
+
+ * configure, configure.in:
+
+ - (config*, agent/mibgroup/hr_*.c):
+ - A module.c file is no longer required. Only the .h file is
+ necessary, for people who want to have one module wrap a bunch of others.
+ - removed host.c
+ - renamed all hr_init functions to be auto-called.
+
+1997-10-20 16:44 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): patch all other env-vars to take '+' in front.
+
+1997-10-20 16:38 hardaker
+
+ * snmplib/mib.c:
+
+ - (mib.c): From Dave: patch DEFAULT_MIBS to take '+' in front.
+
+1997-10-20 16:06 hardaker
+
+ * agent/mibgroup/read_config.c:
+
+ - (read_config.c):
+ - don't report an error if you can't find a snmpd.conf file.
+ - don't report all lines as an error (opps).
+
+1997-10-20 16:05 hardaker
+
+ * agent/mibgroup/pass.c:
+
+ - (pass.c) don't null last char in command line.
+
+1997-10-20 11:51 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/snmp_agent.c, agent/snmp_agent.h
+, agent/snmpd.c, agent/snmpd.h,
+ agent/mibgroup/.cvsignore, agent/mibgroup/disk.c,
+ agent/mibgroup/disk.h, agent/mibgroup/event.c,
+ agent/mibgroup/extensible.c, agent/mibgroup/extensible.h
+, agent/mibgroup/hr_device.c, agent/mibgroup/hr_disk.c
+, agent/mibgroup/hr_network.c,
+ agent/mibgroup/hr_network.h, agent/mibgroup/hr_print.c,
+ agent/mibgroup/hr_proc.c, agent/mibgroup/hr_storage.c,
+ agent/mibgroup/hr_system.c, agent/mibgroup/loadave.c,
+ agent/mibgroup/loadave.h, agent/mibgroup/memory.c,
+ agent/mibgroup/memory.h, agent/mibgroup/pass.c,
+ agent/mibgroup/pass.h, agent/mibgroup/proc.c,
+ agent/mibgroup/proc.h, agent/mibgroup/read_config.c,
+ agent/mibgroup/read_config.h, agent/mibgroup/snmp_mib.c
+, agent/mibgroup/system.c, agent/mibgroup/system.h
+:
+
+ - (config*, agent/snmp*, agent/mibgroup/*.[ch]):
+ - Created a new mibmodule.h configuration macro called
+ config_parse_dot_conf() which can be called to request parsing of
+ the snmpd.conf file(s) on a per module basis.
+ - All related parsing has been striped from read_config.c and move
+ to their correct module instead.
+ - New function: config_perror(char *): print error with file & line #.
+ - basic -Wall cleanups in hr* as well (not nearly done yet).
+
+1997-10-20 11:45 hardaker
+
+ * FAQ:
+
+ - (FAQ): Changes from Dave.
+
+1997-10-15 18:40 hardaker
+
+ * config.h.in, configure, configure.in,
+ agent/mibgroup/host.c, agent/mibgroup/host.h,
+ agent/mibgroup/host_res.h, agent/mibgroup/hr_device.c,
+ agent/mibgroup/hr_device.h, agent/mibgroup/hr_disk.c,
+ agent/mibgroup/hr_disk.h, agent/mibgroup/hr_filesys.c,
+ agent/mibgroup/hr_filesys.h, agent/mibgroup/hr_network.c
+, agent/mibgroup/hr_network.h, agent/mibgroup/hr_other.c
+, agent/mibgroup/hr_other.h,
+ agent/mibgroup/hr_partition.c, agent/mibgroup/hr_partition.h
+, agent/mibgroup/hr_print.c, agent/mibgroup/hr_print.h
+, agent/mibgroup/hr_proc.c, agent/mibgroup/hr_proc.h
+, agent/mibgroup/hr_storage.c,
+ agent/mibgroup/hr_storage.h, agent/mibgroup/hr_swinst.c
+, agent/mibgroup/hr_swinst.h, agent/mibgroup/hr_swrun.c
+, agent/mibgroup/hr_swrun.h, agent/mibgroup/hr_system.c
+, agent/mibgroup/hr_system.h, agent/mibgroup/hr_utils.c
+, agent/mibgroup/hr_utils.h, agent/mibgroup/memory.c
+:
+
+ - (config*, agent/mibgroup/hr*): Host resources mib from Dave Shield.
+ - minor patches by me, mostly pointer errors.
+ - (memory.c): fixed a null pointer problem under linux.
+
+1997-10-15 12:12 hardaker
+
+ * mibs/.cvsignore:
+
+ - (mibs/.cvsignore): added Makefile.
+
+1997-10-15 12:11 hardaker
+
+ * agent/snmpd.c, snmplib/acl_parse.c,
+ snmplib/context_parse.c, snmplib/party_parse.c,
+ snmplib/snmp_api.c, snmplib/snmp_api.h,
+ apps/snmpnetstat/main.c, apps/snmpnetstat/route.c,
+ apps/snmp_parse_args.c, apps/snmpbulkwalk.c,
+ apps/snmpget.c, apps/snmpgetnext.c, apps/snmpset.c
+, apps/snmpstatus.c, apps/snmptest.c,
+ apps/snmptrap.c, apps/snmptrapd.c, apps/snmpwalk.c
+:
+
+ - (apps/*.c, agent/snmpd.c, snmplib/*.c):
+ - create and use new function: snmp_perror(char *)
+ - free allocated space of snmp_detail upon usage by snmp_api_errstring().
+
+1997-10-15 09:58 hardaker
+
+ * agent/snmpd.c, snmplib/acl_parse.c,
+ snmplib/context_parse.c, snmplib/parse.c,
+ snmplib/party_parse.c, snmplib/snmp.c,
+ snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmp_auth.c, snmplib/snmp_client.c,
+ snmplib/snmp_impl.h, snmplib/view.c,
+ apps/snmpnetstat/main.c, apps/snmpnetstat/route.c,
+ apps/snmp_parse_args.c, apps/snmp_parse_args.h,
+ apps/snmpbulkwalk.c, apps/snmpget.c,
+ apps/snmpgetnext.c, apps/snmpset.c, apps/snmpstatus.c
+, apps/snmptest.c, apps/snmptrap.c,
+ apps/snmptrapd.c, apps/snmpwalk.c:
+
+ - (apps/*.c, agent/snmpd.c, snmplib/*.c): Patch from Niels:
+ - warning fixes.
+ - remove the printf's from the library and set a snmp 'errno' equivalent.
+
+1997-10-15 09:50 hardaker
+
+ * agent/: view_parse.c, snmp_vars.c:
+
+ - (view_parse.c, snmp_vars.c): From Niels: warning removals and standardization.
+
+1997-10-14 15:33 hardaker
+
+ * agent/mibgroup/: acl_vars.c, alarm.c, context_vars.c
+, event.c, event.h, interfaces.c,
+ kernel_sunos5.c, memory.c, memory.h, party_vars.c
+, read_config.c, var_route.c, versioninfo.c
+, view_vars.c:
+
+ - (agent/mibgroup/*.c): YMWRAMFSFN:
+ - (yet more warning removals and memory function standardizations from Niels).
+ - minor linux/netbsd/bsdi clean ups.
+
+1997-10-14 15:21 hardaker
+
+ * FAQ:
+
+ - (FAQ): From Dave Shields: refer reader to another answer as well.
+
+1997-10-14 15:18 hardaker
+
+ * config.h.in, configure, configure.in,
+ agent/common_header.h:
+
+ - (config*, common_header.h): dynix doesn't have net/route.h.
+
+1997-10-14 15:16 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): From Dave Shields:
+ - self contained mib .txt files with multiple modules.
+
+1997-10-14 15:15 hardaker
+
+ * man/mib_api.3:
+
+ - (mib_api.3): doc addition: add_mibdir() return value.
+
+1997-08-25 00:22 whardake
+
+ * agent/mibgroup/interfaces.c:
+
+ - (interfaces.c): Patch from Dave Shields for netbsd.
+
+1997-08-25 00:21 whardake
+
+ * agent/mibgroup/versiontag:
+
+ - (versiontag): checkin version.h.
+
+1997-08-25 00:21 whardake
+
+ * agent/mibgroup/memory.c:
+
+ - (memory.c): typo in ifdef.
+
+1997-08-15 06:45 whardake
+
+ * sedscript.in, bug-report, version.h:
+
+ version tag ( 3.3.pre3 )
+
+1997-08-15 02:30 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, snmplib/snmp_client.c,
+ snmplib/snmp_client.h, snmplib/system.c, agent/snmpd.c
+, snmplib/system.h:
+
+ - (config*, snmpd.c, snmp_client.[ch], system.[ch]):
+ - fix more long/int problems on 64 bit machines u_long -> in_addr_t.
+ - Check for SIOCGIFADDR in sys/ioctl.h and use it in get_myaddr() if
+ defined.
+
+1997-08-14 08:21 whardake
+
+ * agent/mibgroup/interfaces.c:
+
+ - (interfaces.c): Patch from David C. Lawrence for netbsd * bsd/os 2.0.
+
+1997-08-14 08:16 whardake
+
+ * agent/mibgroup/proc.c:
+
+ - (proc.c): don't use seterrorstatus() if not using the errormib.
+
+1997-08-14 08:16 whardake
+
+ * agent/mibgroup/README:
+
+ - (agent/mibgroup/README): Point out that mib list must be in descending order.
+
+1997-08-14 08:15 whardake
+
+ * configure, configure.in:
+
+ - (configure*):
+ - Typo's when copying in a autoconf test.
+ - Add errormib to default module list (since its no longer required).
+ - backquote a . in a sed regexp to watch out for module names
+ beginning with the letter o.
+
+1997-08-14 07:37 whardake
+
+ * FAQ, README, config.h.in, configure,
+ configure.in, agent/common_header.h,
+ agent/snmp_agent.c, agent/snmpd.c,
+ agent/mibgroup/alarm.c, agent/mibgroup/disk.c,
+ agent/mibgroup/errormib.c, agent/mibgroup/event.c,
+ agent/mibgroup/extensible.c, agent/mibgroup/extensible.h
+, agent/mibgroup/loadave.c, agent/mibgroup/read_config.c
+, agent/mibgroup/var_route.c, apps/snmpbulkwalk.c
+, apps/snmpget.c, apps/snmpgetnext.c,
+ apps/snmpset.c, apps/snmpstatus.c, apps/snmptest.c
+, apps/snmptranslate.c, apps/snmptrap.c,
+ apps/snmptrapd.c, apps/snmpwalk.c,
+ apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c,
+ apps/snmpnetstat/main.c, apps/snmpnetstat/route.c:
+
+ - (config*, FAQ, README, agent/mibgroup/*.c, apps/*.c):
+ - Patch from David Paul Zimmerman:
+ - port to AIX 4.1.5.
+ - fix more type casting problems.
+
+1997-08-14 00:46 whardake
+
+ * apps/: snmp_parse_args.c, snmptrap.c, snmptrapd.c
+, snmpnetstat/main.c:
+
+ - (snmp_parse_args.c, snmptrap.c, snmptrapd.c, main.c):
+ - add -V version flage.
+
+1997-08-13 08:10 whardake
+
+ * version.h, agent/common_header.h, agent/snmp_agent.c
+, agent/snmp_vars.c, agent/snmpd.c,
+ agent/mibgroup/disk.c, agent/mibgroup/disk.h,
+ agent/mibgroup/interfaces.c, agent/mibgroup/interfaces.h
+, agent/mibgroup/proc.c, agent/mibgroup/proc.h,
+ agent/mibgroup/util_funcs.c, agent/mibgroup/util_funcs.h
+, agent/mibgroup/var_route.c, agent/mibgroup/var_route.h
+, agent/mibgroup/versioninfo.c,
+ agent/mibgroup/versioninfo.h, agent/mibgroup/versiontag
+, snmplib/context.h, snmplib/party.h:
+
+ - (version.h, agent/*, agent/mibgroup/*):
+ - move version string to a global header.
+ - insert USING_*_MODULE macro's in many places to make module
+ removal more possible. You can now compile with almost no modules
+ installed.
+
+1997-08-13 04:47 whardake
+
+ * apps/snmpstatus.c:
+
+ - (snmpstatus.c): optarg/optind need to be declaired under ultrix4.
+
+1997-08-07 02:34 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/mibgroup/memory.c:
+
+ - (config*, memory.c):
+ - fix swap on HPUX 10.20
+
+1997-08-07 01:33 whardake
+
+ * agent/: kernel.c, mibgroup/proc.c:
+
+ - (kernel.c, proc.c): Patch from Simon Burge:
+ - Implement real process table walks on Ultrix.
+
+1997-08-07 01:10 whardake
+
+ * README, acconfig.h, config.h.in, configure
+, configure.in, agent/mibgroup/disk.c,
+ agent/mibgroup/loadave.c, snmplib/parse.c,
+ snmplib/snmp.c:
+
+ - (config*, load.c, disk.c, parse.c, snmp.c): Patch from Simon Burge:
+ - Ultrix fixes for statfs, loadave.
+ - implement strdup if not found in system.
+ - test for test flags for kernel checking.
+ - watch out for ps'es that return egrep with the ps arg on the line.
+ - up maximum disks to 50.
+
+1997-08-07 00:29 whardake
+
+ * TODO:
+
+ - (TODO): better error messages by apps.
+
+1997-07-24 23:50 whardake
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Patch from Eddy J. Gurney: uncomment gettimeofday() call.
+
+1997-07-03 23:34 whardake
+
+ * agent/mibgroup/versioninfo.c, bug-report,
+ sedscript.in:
+
+ version tag ( 3.3.pre2 )
+
+1997-07-03 23:33 whardake
+
+ * apps/snmptranslate.c, snmplib/mib.c, snmplib/mib.h
+, snmplib/parse.c, snmplib/parse.h:
+
+ - (snmptranslate.c, mib.[ch], parse.[ch]):
+ - New option to snmptranslate (-a) to output a ascii dump of the mib
+ database capable of being used by the parser for quick OID translations.
+
+1997-07-01 08:37 whardake
+
+ * agent/mibgroup/versioninfo.c, sedscript.in,
+ bug-report:
+
+ version tag ( 3.3.pre1 )
+
+1997-07-01 07:20 whardake
+
+ * config.h.in, configure, configure.in:
+
+ - (config*): bsdi3 specific headers.
+
+1997-07-01 06:41 whardake
+
+ * agent/mibgroup/: disk.c, errormib.c, loadave.c,
+ memory.c:
+
+ - (disk.c, errormib.c, loadave.c, memory.c): bsdi3 specific headers.
+
+1997-07-01 06:02 whardake
+
+ * apps/: snmp_parse_args.c, snmp_parse_args.h,
+ snmpbulkwalk.c, snmpget.c, snmpgetnext.c,
+ snmpset.c, snmpstatus.c, snmptest.c,
+ snmpwalk.c:
+
+ - (apps/*.c): Better usage information and usage() standarization.
+
+1997-07-01 05:41 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/common_header.h,
+ agent/mibgroup/interfaces.c, agent/mibgroup/var_route.c
+, mibs/UCD-SNMP-MIB.txt:
+
+ - (config*, common_header.h, interfaces.c, var_route.c, UCD-SNMP-MIB.txt):
+ - fix freebsd3 specific problems (based on suggestions from Bill Fenner).
+
+1997-07-01 01:10 whardake
+
+ * agent/mibgroup/smux.c:
+
+ - (smux.c): fix prototyping failures.
+
+1997-06-30 07:19 whardake
+
+ * snmplib/: mib.c, parse.c, snmp_api.c:
+
+ - (mib.c, parse.c, snmp_api.c): Suggestions from Laukkanen Markku NRC/Hki:
+ - Malloc typecasts and other corrections in casting.
+
+1997-06-30 06:58 whardake
+
+ * man/mib_api.3, snmplib/parse.c, snmplib/parse.h
+:
+
+ - (mib_api.3, parse.[ch]): Patch from Dave Shield:
+ - Handle mib module replacements through new function and replacement table.
+
+1997-06-30 06:49 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/mibgroup/memory.c:
+
+ - (config*, memory.c): Patch from vlad@misery.rosprint.ru:
+ - implement memory section of ucd mib on linux.
+
+1997-06-30 06:38 whardake
+
+ * agent/mibgroup/wombat.h:
+
+ - (wombat.h): better document config_load_mib() example.
+
+1997-06-30 06:33 whardake
+
+ * apps/snmptest.c:
+
+ - (snmptest.c): Patch from Niels Baggesen to fix get -> fget '\n' problem.
+ - Also makes sure it handles up and lower cases.
+
+1997-06-30 05:54 whardake
+
+ * agent/mibgroup/interfaces.c:
+
+ - (agent/mibgroup/interfaces.c): Don't put & in front of osf4 ac_enaddr.
+
+1997-06-30 05:53 whardake
+
+ * agent/snmp_agent.c, agent/snmp_vars.c,
+ agent/mibgroup/alarm.c, agent/mibgroup/event.c,
+ apps/Makefile.in, apps/snmp_parse_args.c,
+ apps/snmp_parse_args.h, apps/snmpbulkwalk.c,
+ apps/snmpget.c, apps/snmpgetnext.c, apps/snmpset.c
+, apps/snmpstatus.c, apps/snmptest.c,
+ apps/snmptrap.c, apps/snmptrapd.c, apps/snmpwalk.c
+, apps/snmpnetstat/main.c, snmplib/snmp.h,
+ snmplib/snmp_api.c, snmplib/snmp_auth.c:
+
+ - (agent/snmp_{agent,vars}.c, alarm.c, event.c, apps/*,
+ snmplib/snmp{,_api,_auth}.c):
+ - Added basic (mostly conforming?) v2c support.
+ - Merged arg parsing of apps/* clients into one file.
+
+1997-06-26 23:39 whardake
+
+ * agent/mibgroup/smux.c:
+
+ - (smux.c): __P macros were called with too many arguments (needed (args)).
+
+1997-06-23 23:42 whardake
+
+ * agent/mibgroup/README:
+
+ - (agent/mibgroup/README): need 2 leading '-'s on --with-mib-modules flag.
+
+1997-06-23 23:41 whardake
+
+ * configure, configure.in:
+
+ - (configure*): bsdi3 needs to define bsdi2, not itself (duh).
+
+1997-06-23 23:40 whardake
+
+ * Makefile.in:
+
+ - (Makefile.in): Patch from John Charlton to fix leading spaces in sedscript.
+
+1997-06-11 05:46 whardake
+
+ * ChangeLog:
+
+ - (ChangeLog): whoops.
+
+1997-06-11 04:53 whardake
+
+ * snmplib/mib.c:
+
+ - (mib.c): Patch from Niels Baggesen to make MIBFILES env var work correctly.
+
+1997-05-26 02:38 whardake
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from niels Baggesen to:
+ - close mibfiles for MIBS=ALL.
+ - Allow SYNTAX DisplayString (SIZE) inside OBJECT-TYPE.
+
+1997-05-26 01:58 whardake
+
+ * agent/mibgroup/versioninfo.c, bug-report,
+ sedscript.in:
+
+ version tag ( 3.2 )
+
+1997-05-26 01:57 whardake
+
+ * ChangeLog:
+
+ - (ChangeLog): Update for 3.2.
+
+1997-05-26 01:56 whardake
+
+ * local/snmpcheck.def:
+
+ - (snmpcheck.def): new variables to set walk/get/set command line usage.
+
+1997-05-26 01:52 whardake
+
+ * snmplib/snmp_api.h:
+
+ - (snmp_api.h): trap long's back to ints, bad solution.
+
+1997-05-26 01:50 whardake
+
+ * INSTALL, configure, configure.in:
+
+ - (INSTALL, configure): default mibs listed correctly.
+
+1997-05-23 07:34 whardake
+
+ * man/mib_api.3:
+
+ - (mib_api.3): Modifiy to note default mibs.
+
+1997-05-23 07:23 whardake
+
+ * agent/mibgroup/versioninfo.c, bug-report,
+ sedscript.in:
+
+ version tag ( 3.1.4.pre8 )
+
+1997-05-23 04:40 whardake
+
+ * snmplib/snmp_api.h:
+
+ - (snmp_api.h): Change trap types from int to long.
+
+1997-05-23 04:40 whardake
+
+ * snmplib/mib.c:
+
+ - (mib.c): Patch from Dave Shields to fix SNMP perl again.
+
+1997-05-23 04:38 whardake
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Patch from Niels Bagessen to fix multiple frees in v2 pdu's.
+
+1997-05-23 04:37 whardake
+
+ * snmplib/snmp_client.c:
+
+ - (snmp_client.c): Patch from Niels Bagessen to fix endiennes problems.
+
+1997-05-23 04:36 whardake
+
+ * mibs/: HOST-RESOURCES-MIB.txt, SNMPv2-TC.txt:
+
+ - (HOST-RESOURCES-MIB.txt, SNMPv2-TC.txt): From Niels: change import clauses.
+
+1997-05-23 04:36 whardake
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): Patch from Niels Bagessen to fix endiannes problems.
+
+1997-05-23 04:35 whardake
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in): Set default MIB list.
+
+1997-05-22 04:13 whardake
+
+ * mibs/SNMPv2-M2M-MIB.txt:
+
+ - (SNMPv2-M2M-MIB.txt): restored. Got truncated.
+
+1997-05-21 06:40 whardake
+
+ * FAQ:
+
+ - (FAQ): Changes from Dave.
+
+1997-05-21 06:38 whardake
+
+ * NEWS:
+
+ - (NEWS): Changes from Dave.
+
+1997-05-21 01:13 whardake
+
+ * NEWS:
+
+ - (NEWS): Update for 3.2.
+
+1997-05-20 07:50 whardake
+
+ * snmplib/parse.c:
+
+ - (parse.c): code from Dave Shield: add back in find_node() for perl usage.
+
+1997-05-20 07:50 whardake
+
+ * TODO:
+
+ - (TODO): snmpset should check against size defined in mib.
+
+1997-05-20 02:24 whardake
+
+ * agent/mibgroup/udp.c:
+
+ - (udp.c): Patch from Martin Jacobsson: Fix my cpp stupidity.
+
+1997-05-20 01:08 whardake
+
+ * agent/mibgroup/versioninfo.c, bug-report,
+ sedscript.in:
+
+ version tag ( 3.1.4.pre7 )
+
+1997-05-19 23:19 whardake
+
+ * snmplib/: mib.c, snmp_auth.c:
+
+ - (mib.c, snmp_auth.c): include sys/select.h for AIX.
+
+1997-05-19 23:19 whardake
+
+ * snmplib/parse.c:
+
+ - (parse.c): protect against 0 import calls.
+
+1997-05-19 23:18 whardake
+
+ * mibs/SNMPv2-TC.txt:
+
+ - (SNMPv2-TC.txt): Comment out ObjectSyntax import.
+
+1997-05-19 23:03 whardake
+
+ * agent/mibgroup/udp.c:
+
+ - (udp.c): Only do Martin Jacobssen's fixes for freebsd2.
+
+1997-05-16 02:25 whardake
+
+ * snmplib/parse.c:
+
+ - (parse.c): Protect malloc against 0 external imports.
+
+1997-05-15 07:43 whardake
+
+ * agent/mibgroup/udp.c:
+
+ - (udp.c): Patch from Martin Jacobssen:
+ - Fix udp_inpcb structures.
+
+1997-05-15 07:26 whardake
+
+ * INSTALL, configure, configure.in:
+
+ - (configure*, INSTALL):
+ - Wording and order changes in configure --help lines.
+
+1997-05-15 07:22 whardake
+
+ * INSTALL, configure, configure.in:
+
+ - (configure*, INSTALL):
+ - Display defaults in configure --help lines.
+
+1997-05-15 07:01 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, snmplib/mib.c:
+
+ - (config*, mib.c):
+ - Changed env variable MIBFILE -> MIBFILES (since it is a list now).
+ (will accept MIBFILE for backwards compatibility).
+ - By default, *no* additional mibfiles are loaded (ie, mib.txt is no
+ longer loaded) and must be turned on through configure or the env var.
+ - New configure options to set default MIBS, MIBFILES, MIBDIRS.
+
+1997-05-15 06:22 whardake
+
+ * snmplib/: mib.c, parse.h:
+
+ - (parse.h): Patch from Dave Shield: Add new node structure entries.
+
+1997-05-15 05:37 whardake
+
+ * snmplib/parse.c:
+
+ - (parse.c): patch from Dave Shield:
+ - deal with multiple module ID's being referenced or nodes defined.
+ - supress "name clash" warnings for anonymous nodes.
+
+1997-05-15 02:32 whardake
+
+ * snmplib/: mib.c, parse.c:
+
+ - (mib.c, parse.c): patch from Niels Baggesen:
+ - prototyping and null checking.
+ - if MIBS is set to ALL, parse everything found.
+
+1997-05-15 02:31 whardake
+
+ * mibs/SNMPv2-SMI.txt:
+
+ - (SNMPv2-SMI.txt): patch from Niels Baggesen: ccitt -> 0.
+
+1997-05-15 02:30 whardake
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): patch from Niels Baggesen: import indentifiers.
+
+1997-05-15 02:29 whardake
+
+ * man/mib_api.3:
+
+ - (mib_api.3): patch from Niels Baggesen: MIBS variable can be set to ALL.
+
+1997-05-15 02:28 whardake
+
+ * INSTALL:
+
+ - (INSTALL): patch from Niels Baggesen to reference the maketarget script.
+
+1997-05-15 02:23 whardake
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from Dave Shield to fix purely numeric OIDs.
+
+1997-05-15 02:22 whardake
+
+ * agent/mibgroup/interfaces.c:
+
+ - (interfaces.c): patch from Martin Jacobsson for FreeBSD
+
+1997-05-14 06:00 whardake
+
+ * agent/mibgroup/versioninfo.c, bug-report,
+ sedscript.in:
+
+ version tag ( 3.1.4.pre6 )
+
+1997-05-14 04:45 whardake
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): Typecast malloc.
+
+1997-05-14 04:17 whardake
+
+ * Makefile.in, apps/Makefile.in:
+
+ - (Makefile.in, agent/Makefile.in): Patch from Oddbjorn Steffensen:
+ - Protect against bash needing ';'s on multiple subdir makes.
+
+1997-05-14 04:13 whardake
+
+ * Makefile.in:
+
+ - (Makefile.in): warn if mib.txt is installed from a previous release.
+
+1997-05-14 02:41 whardake
+
+ * mib.txt, Makefile.in:
+
+ - (Makefile.in, mib.txt): removed mib.txt from distribution. No longer needed.
+
+1997-05-13 07:22 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, snmplib/mib.c:
+
+ - (config*,mib.c): New configure option --with-default-mibs="list:list".
+
+1997-05-13 06:38 whardake
+
+ * mibs/Makefile.in:
+
+ - (mibs/Makefile.in): ucd-snmp.txt -> UCD-SNMP-MIB.txt.
+
+1997-05-13 06:36 whardake
+
+ * mibs/ucd-snmp.txt:
+
+ - (ucd-snmp.txt): moved to UCD-SNMP-MIB.txt
+
+1997-05-13 06:36 whardake
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - (UCD-SNMP-MIB.txt): moved from ucd-snmp.txt.
+
+1997-05-13 06:05 whardake
+
+ * README:
+
+ - (README): architecture list update.
+
+1997-05-13 06:05 whardake
+
+ * INSTALL, configure, configure.in:
+
+ - (config*, INSTALL): New flags to set prompted values instead of prompting.
+
+1997-05-13 05:48 whardake
+
+ * mibs/ucd-snmp.txt:
+
+ - (ucd-snmp.txt): Changed ID to UCD-SNMP
+
+1997-05-13 03:03 whardake
+
+ * mibs/Makefile.in:
+
+ - (mibs/Makefile.in): removed snmpv2.txt, rfc1271.txt.
+
+1997-05-13 03:02 whardake
+
+ * mibs/snmpv2.txt:
+
+ - (snmpv2.txt): removed.
+
+1997-05-13 02:57 whardake
+
+ * mibs/rfc1271.txt:
+
+ - (rfc1271.txt): removed.
+
+1997-05-13 01:52 whardake
+
+ * mibs/: ucd-snmp.txt, ucd.txt:
+
+ - (ucd.txt): whoops. Removed.
+
+1997-05-13 01:51 whardake
+
+ * mibs/RFC1213-MIB.txt:
+
+ - (RFC1213-MIB.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/RFC1155-SMI.txt:
+
+ - (RFC1155-SMI.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/RFC1271-MIB.txt:
+
+ - (RFC1271-MIB.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/SNMPv2-M2M-MIB.txt:
+
+ - (SNMPv2-M2M-MIB.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/SNMPv2-PARTY-MIB.txt:
+
+ - (SNMPv2-PARTY-MIB.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/UDP-MIB.txt:
+
+ - (UDP-MIB.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/TCP-MIB.txt:
+
+ - (TCP-MIB.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/SNMPv2-TM.txt:
+
+ - (SNMPv2-TM.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/SNMPv2-TC.txt:
+
+ - (SNMPv2-TC.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/SNMPv2-SMI.txt:
+
+ - (SNMPv2-SMI.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/SNMPv2-MIB.txt:
+
+ - (SNMPv2-MIB.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/SNMPv2-CONF.txt:
+
+ - (SNMPv2-CONF.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/IP-MIB.txt:
+
+ - (IP-MIB.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/IANAifType-MIB.txt:
+
+ - (IANAifType-MIB.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/HOST-RESOURCES-MIB.txt:
+
+ - (HOST-RESOURCES-MIB.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/EtherLike-MIB.txt:
+
+ - (EtherLike-MIB.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/ucd.txt:
+
+ - (ucd.txt): New mib file from Niels Baggesen.
+
+1997-05-13 01:51 whardake
+
+ * mibs/IF-MIB.txt:
+
+ - (IF-MIB.txt): New mib file from Niels Baggesen.
+
+1997-05-11 23:52 whardake
+
+ * mibs/ucd-snmp.txt:
+
+ - (mibs/ucd-snmp.txt): Patch from Mario DeFazio to fix typos.
+ - compiles under SNMPc 4.1g.
+
+1997-05-11 23:49 whardake
+
+ * man/Makefile.in:
+
+ - (man/Makefile.in): install mib_api.3.
+
+1997-05-11 23:48 whardake
+
+ * INSTALL, README, TODO:
+
+ - (INSTALL, README, TODO): documentation update.
+
+1997-05-11 23:44 whardake
+
+ * agent/Makefile.in:
+
+ - (agent/Makefile.in): removed CCHACK ???.
+
+1997-05-11 23:43 whardake
+
+ * config.h.in, configure, configure.in,
+ agent/mibgroup/extensible.c:
+
+ - (config*, extensible.c): BSDI3 specific headers and defines.
+
+1997-05-10 08:23 whardake
+
+ * agent/: snmpd.c, mibgroup/read_config.c,
+ mibgroup/system.c:
+
+ - (snmpd.c, read_config.c, system.c): Patch from Niels Baggesen:
+ - default trap community.
+ - multiple trap sinks.
+
+1997-05-10 07:52 whardake
+
+ * man/mib_api.3:
+
+ - (mib_api.3): New file from Dave Shield.
+
+1997-05-10 07:45 whardake
+
+ * FAQ:
+
+ - (FAQ): Patch from Dave Shields: update.
+
+1997-05-10 07:41 whardake
+
+ * bug-report:
+
+ - (bug-report): Patch from Dave Shields: don't submit blank bug-reports.
+
+1997-05-09 15:50 whardake
+
+ * snmplib/: mib.c, parse.c, parse.h:
+
+ - (parse.c): Patch from Dave Shields: deal with anonymous IDs (even better).
+
+1997-05-09 15:46 whardake
+
+ * snmplib/: mib.c, parse.c:
+
+ - (parse.c): Patch from Dave Shields: deal with anonymous IDs.
+
+1997-05-09 15:28 whardake
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from Dave Shields: negative numbers in mibs.
+
+1997-05-09 15:03 whardake
+
+ * snmplib/: mib.c, parse.c:
+
+ - (mib.c, parse.c): patches from Niels Baggesen: prototyping (mostly).
+
+1997-05-09 14:52 whardake
+
+ * agent/mibgroup/: smux.c, smux.h:
+
+ - (smux.[ch]): patches from Niels Baggesen: prototyping.
+
+1997-05-09 13:46 whardake
+
+ * TODO:
+
+ - (TODO): Update.
+
+1997-05-09 13:46 whardake
+
+ * agent/mibgroup/smux.c, configure.in, configure
+, config.h.in:
+
+ - (smux.c, config*):
+ - check for sgtty.h and prototype better.
+
+1997-05-09 13:38 whardake
+
+ * snmplib/: Makefile.in, mib.c, mib.h, parse.c
+, parse.h:
+
+ - (mib.[ch], parse.[ch], Makefile.in): New parser from Dave Shield:
+ - Run-time control of initial module loading
+ (uses env variables MIBDIRS, MIBS, and MIBFILE)
+ - Defined interfaces for loading modules and retreiving entries
+ - Module scoping now includes Textual Conventions
+ - Tokens implemented internally no longer require importing the
+ corresponding modules
+
+1997-04-22 11:49 whardake
+
+ * agent/mibgroup/versioninfo.c, bug-report,
+ sedscript.in:
+
+ version tag ( 3.1.4.pre5 )
+
+1997-04-22 08:43 whardake
+
+ * config.h.in, configure, configure.in,
+ agent/mibgroup/smux.c:
+
+ - (config*, smux.c): Check for headers and define FD_COPY if not defined.
+
+1997-04-22 07:41 whardake
+
+ * agent/mibgroup/: smux.c, smux.h, snmp_bgp.c,
+ snmp_ospf.c, snmp_rip2.c:
+
+ - (snmp_bgp.c, snmp_rip2.c, snmp_ospf.c, smux.[ch]):
+ - standardize headers for autoconf.
+ - smux_init() -> init_smux().
+ - SMUXDEBUG -> DODEBUG (--enable-debugging turns this on automatically).
+
+1997-04-22 06:51 whardake
+
+ * agent/mibgroup/: snmp_bgp.c, snmp_bgp.h, snmp_ospf.c
+, snmp_ospf.h, snmp_rip2.c, snmp_rip2.h:
+
+ - (snmp_bgp.[ch], snmp_rip2.[ch], snmp_ospf.[ch]):
+ - conform to new module standards of coding.
+
+1997-04-22 06:47 whardake
+
+ * agent/common_header.h:
+
+ - (common_header.h): remove duplicate (warning) TCP defines on osf4 systems.
+
+1997-04-22 06:20 whardake
+
+ * agent/mibgroup/: README.smux, smux.c, smux.h,
+ snmp_bgp.c, snmp_ospf.c, snmp_rip2.c:
+
+ - (README.smux, smux.c, smux.h, snmp_bgp.c, snmp_ospf.c, snmp_rip2.c):
+ - smux support for gated from Rohit Dube.
+
+1997-04-22 06:02 whardake
+
+ * apps/snmpbulkwalk.c, apps/snmpget.c,
+ apps/snmpgetnext.c, apps/snmpset.c, apps/snmptest.c
+, apps/snmptrap.c, apps/snmptrapd.c,
+ apps/snmpwalk.c, apps/snmpnetstat/if.c,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/main.c,
+ apps/snmpnetstat/route.c, snmplib/mib.c,
+ snmplib/snmp_api.c, snmplib/snmp_api.h:
+
+ - (many): Patch from Niels Baggesen to fix various things, mostly on linux.
+
+1997-04-22 05:59 whardake
+
+ * maketarget, agent/common_header.h, agent/kernel.c
+, agent/snmp_agent.c, agent/snmp_vars.linux.h,
+ agent/snmpd.c, agent/mibgroup/at.c,
+ agent/mibgroup/disk.c, agent/mibgroup/errormib.c,
+ agent/mibgroup/icmp.c, agent/mibgroup/icmp.h,
+ agent/mibgroup/interfaces.c, agent/mibgroup/interfaces.h
+, agent/mibgroup/ip.c, agent/mibgroup/ip.h,
+ agent/mibgroup/loadave.c, agent/mibgroup/memory.c,
+ agent/mibgroup/route_write.c, agent/mibgroup/snmp_mib.c
+, agent/mibgroup/snmp_mib.h, agent/mibgroup/system.c
+, agent/mibgroup/tcp.c, agent/mibgroup/tcp.h,
+ agent/mibgroup/udp.c, agent/mibgroup/udp.h,
+ agent/mibgroup/var_route.c, agent/mibgroup/var_route.h:
+
+ - (many): Patch from Niels Baggesen to fix various things, mostly on linux.
+
+1997-04-21 23:42 whardake
+
+ * FAQ:
+
+ - (FAQ): various updates.
+
+1997-03-26 08:05 whardake
+
+ * agent/mibgroup/system.c:
+
+ - (mibgroup/system.c): report agent uptime rather than system uptime.
+
+1997-03-25 04:30 whardake
+
+ * INSTALL:
+
+ - (INSTALL): minor doc update for new flags.
+
+1997-03-25 00:39 whardake
+
+ * EXAMPLE.conf.def:
+
+ - (EXAMPLE.conf.def): added syslocation and syscontact examples.
+
+1997-03-24 04:56 whardake
+
+ * FAQ:
+
+ - (FAQ): Patch from Dave Shield.
+
+1997-03-24 00:51 whardake
+
+ * README:
+
+ - (README): runs on bsdi 2.1.
+
+1997-03-24 00:51 whardake
+
+ * Makefile.in:
+
+ - (Makefile.in): Watch out for multiple spaces in C defs.
+
+1997-03-24 00:50 whardake
+
+ * agent/mibgroup/: example.c, example.h:
+
+ - (example.c,.h): New example mib module duplicating the passtest
+ script in C code.
+
+1997-03-24 00:49 whardake
+
+ * agent/mibgroup/memory.c:
+
+ - (memory.c): prototype write function better.
+
+1997-03-18 07:53 whardake
+
+ * FAQ:
+
+ - (FAQ): snmp.conf -> snmpd.conf
+
+1997-03-18 07:52 whardake
+
+ * FAQ:
+
+ - (FAQ): Update from Dave Shield.
+
+1997-03-14 07:16 whardake
+
+ * agent/mibgroup/README:
+
+ - (mibgroup/README): Update from Dave Shield.
+
+1997-03-14 04:55 whardake
+
+ * agent/mibgroup/versioninfo.c, sedscript.in,
+ bug-report:
+
+ version tag ( 3.1.4.pre4 )
+
+1997-03-14 04:54 whardake
+
+ * acconfig.h, config.h.in, mibs/ucd-snmp.txt:
+
+ - (acconfig.h, ucd-snmp.txt): recognize new hosts for sysObjectId.
+
+1997-03-14 04:53 whardake
+
+ * snmplib/context_parse.c, snmplib/party_parse.c,
+ snmplib/system.c, snmplib/system.h, agent/snmpd.c
+:
+
+ - (snmpd.c, context_parse.c, party_parse.c, system.[ch]):
+ - 64bit fix: get_myaddr() should return int not long.
+
+1997-03-14 04:51 whardake
+
+ * configure, configure.in, apps/Makefile.in:
+
+ - (configure.in, apps/Makefile.in): fix trap by including optional .o files.
+
+1997-03-14 02:22 whardake
+
+ * agent/snmp_groupvars.h:
+
+ - (snmp_groupvars.h): axe.
+
+1997-03-14 02:20 whardake
+
+ * agent/snmp_vars_event.h:
+
+ - (snmp_vars_event.h): axe.
+
+1997-03-14 02:18 whardake
+
+ * agent/Makefile.in, apps/snmpnetstat/Makefile.in:
+
+ - (agent/Makefile.in, apps/snmpnetstat/Makefile.in): make depend.
+
+1997-03-14 02:17 whardake
+
+ * makedepend.in:
+
+ - (makedepend.in): run on snmpnetstat dir also.
+
+1997-03-14 02:07 whardake
+
+ * Makefile.in:
+
+ - (Makefile.in): Fix sedscript to include s# as well as s/ commands.
+
+1997-03-14 02:01 whardake
+
+ * man/snmpd.1.def:
+
+ - (snmpd.1.def): Updated to include -c/-C and SNMPCONFPATH env var.
+
+1997-03-14 01:49 whardake
+
+ * mibs/ucd-snmp.txt:
+
+ - (ucd-snmp.txt): remove the last of the sed script defs.
+
+1997-03-14 01:48 whardake
+
+ * Makefile.in, configure, configure.in,
+ mibs/Makefile.in:
+
+ - (Makefile.in, config*, mibs/Makefile.in): enable mibs/ make install.
+
+1997-03-14 00:49 whardake
+
+ * mibs/: rfc1271.txt, snmpv2.txt, ucd-snmp.txt:
+
+ - (mibs/{rfc1271,snmpv2,ucd-snmp}.txt): New mibs directory for sub-mibs.
+
+1997-03-14 00:47 whardake
+
+ * mib.txt:
+
+ - (mib.txt): streamed down.
+
+1997-03-14 00:46 whardake
+
+ * ucd-snmp.txt:
+
+ - (ucd-snmp.txt): moved to mibs/.
+
+1997-03-14 00:38 whardake
+
+ * Makefile.in, ece-mib.def, mib.txt, mibII.txt
+, ucd-snmp.txt:
+
+ - (ucd-snmp.txt, mib.txt, Makefile.in): Don't build mib files anymore.
+
+1997-03-13 08:45 whardake
+
+ * maketarget, agent/kernel.c, agent/kernel.h,
+ agent/snmp_agent.c, agent/snmp_vars.c, agent/snmpd.c
+, agent/snmpd.h, agent/mibgroup/at.c,
+ agent/mibgroup/icmp.c, agent/mibgroup/interfaces.c,
+ agent/mibgroup/interfaces.h, agent/mibgroup/ip.c,
+ agent/mibgroup/loadave.c, agent/mibgroup/tcp.c,
+ agent/mibgroup/udp.c, agent/mibgroup/var_route.c,
+ apps/snmpstatus.c, apps/snmptrap.c, apps/snmptrapd.c
+, apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c
+, apps/snmpnetstat/main.c, apps/snmpnetstat/netstat.h
+, apps/snmpnetstat/route.c, man/snmpd.1.def,
+ man/snmpnetstat.1, snmplib/mib.c, snmplib/snmp_api.c
+, snmplib/snmp_client.c:
+
+ - (many): Patch from Niels Baggensen:
+ - A large number of problems with the Linux port
+ - Some problems with NetBSD 1.2C, but it's still not perfect
+ - More (symbolic) debug output from snmpd, when using -V. -d implies -V
+ Shows you variable requested and value returned
+ - Return ipRouteMask under Solaris
+ - snmpnetstat -r shows non-standard netmasks
+ - snmpnetstat -o (new) shows interface octets, without enquiring for mtu
+ and other variables not present for a Cisco Frame-Relay virtual circuit
+ interface
+ - snmpnetstat tcp/udp print-out had ntohs/htons in wrong places for port
+ numbers (shows up on little-endian architectures)
+ - adds a maketarget script that can be used to create a parallel symlinked
+ source directory. Useful if your make does not support VPATH
+
+1997-03-13 08:17 whardake
+
+ * agent/common_header.h:
+
+ - (common_header.h): fix path to alarm.h.
+
+1997-03-13 07:17 whardake
+
+ * apps/: Makefile.in, snmpnetstat/Makefile.in:
+
+ - (apps/*/Makefile.in): depend problems fix.
+
+1997-03-13 07:10 whardake
+
+ * configure, configure.in:
+
+ - (config*): remove duplicate gethostname check.
+
+1997-03-13 07:07 whardake
+
+ * Makefile.in, agent/Makefile.in,
+ agent/mibgroup/Makefile.in, apps/Makefile.in,
+ apps/snmpnetstat/Makefile.in, snmplib/Makefile.in:
+
+ - (*/Makefile.in): make depend and rule fixes as well.
+
+1997-03-13 06:45 whardake
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in,
+ apps/Makefile.in, apps/snmpnetstat/Makefile.in,
+ snmplib/Makefile.in:
+
+ - (*/Makefile.in): New make depend rules to seperate system/non dependent stuff.
+
+1997-03-13 06:45 whardake
+
+ * configure, configure.in:
+
+ - (config*): check for system dependent modules.
+
+1997-03-13 06:36 whardake
+
+ * agent/mibgroup/: view_vars.c, context_vars.c,
+ acl_vars.c:
+
+ - (view_vars.c, context_vars.c, acl_vars.c): don't include snmpv2_vars.h.
+
+1997-03-13 06:35 whardake
+
+ * agent/mibgroup/: hpux.c, memory.c, memory.h:
+
+ - (hpux.c, memory.c, memory.h): Patch from Dave Shields to fix minor problems.
+
+1997-03-13 05:44 whardake
+
+ * agent/: Makefile.in, acl.conf, kernel_sunos5.c
+, kernel_sunos5.h, route_write.c,
+ snmp_var_route.c, mibgroup/kernel_sunos5.c,
+ mibgroup/kernel_sunos5.h:
+
+ - (kernel_sunos5.[ch]): moved to mibgroup/.
+ - (route_write.c, snmp_var_route.c): delete from agent dir.
+
+1997-03-13 05:34 whardake
+
+ * agent/: Makefile.in, acl_vars.c, alarm.c,
+ alarm.h, common_header.h, context_vars.c, event.c
+, event.h, party_vars.c, snmp_vars.c,
+ snmpd.c, view_vars.c, mibgroup/acl_vars.c,
+ mibgroup/acl_vars.h, mibgroup/alarm.c, mibgroup/alarm.h
+, mibgroup/context_vars.c, mibgroup/context_vars.h
+, mibgroup/event.c, mibgroup/event.h,
+ mibgroup/party_vars.c, mibgroup/party_vars.h,
+ mibgroup/snmpv2_subtrees.h, mibgroup/snmpv2_vars.h,
+ mibgroup/view_vars.c, mibgroup/view_vars.h:
+
+ - (agent/*, mibgroup/*): moved alarm, context, views, event, party,
+ and acl variable groups to mibgroup/.
+
+1997-03-13 01:14 whardake
+
+ * agent/mibgroup/extensible_subtrees.h:
+
+ - (extensible_subtrees.h): Removed file.
+
+1997-03-13 00:37 whardake
+
+ * apps/snmpnetstat/main.c, snmplib/party_parse.c:
+
+ - (config*): check for in_addr_t and define as u_int (32 bits) if not present.
+ - (apps/*.c, party_parse.c): use it.
+
+1997-03-13 00:32 whardake
+
+ * Makefile.in, acconfig.h, config.h.in,
+ configure, configure.in, apps/snmpbulkwalk.c,
+ apps/snmpget.c, apps/snmpgetnext.c, apps/snmpset.c
+, apps/snmpstatus.c, apps/snmptest.c,
+ apps/snmptrap.c, apps/snmpwalk.c:
+
+ - (config*): check for in_addr_t and define as u_int (32 bits) if not present.
+ - (apps/*.c, party_parse.c): use it.
+
+1997-03-12 08:15 whardake
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): returns from inet_addr are in_addr_t (u_int) not u_long.
+
+1997-03-12 06:55 whardake
+
+ * agent/mibgroup/README:
+
+ - (mibgroup/README): doc update from Dave Shield.
+
+1997-03-12 06:48 whardake
+
+ * apps/snmpnetstat/Makefile.in, apps/Makefile.in,
+ agent/Makefile.in:
+
+ - (*/Makefile.in): make depend update.
+
+1997-03-12 06:45 whardake
+
+ * configure, configure.in, agent/snmp_agent.c,
+ agent/snmpd.c, agent/mibgroup/Makefile.in,
+ agent/mibgroup/ip.c, agent/mibgroup/ip.h,
+ agent/mibgroup/route_write.c, agent/mibgroup/route_write.h
+, agent/mibgroup/snmp.c, agent/mibgroup/snmp.h,
+ agent/mibgroup/snmp_mib.c, agent/mibgroup/var_route.c,
+ agent/mibgroup/var_route.h:
+
+ - (configure.in, snmpd.c, snmp_agent.c, route_write.[ch],
+ var_route.[ch], ip.[ch], snmp.[ch] -> snmp_mib.[ch]):
+ - Moved snmp mib module -> snmp_mib for naming conflicts with snmplib.
+ - Moved snmp_var_route.c -> mibgroup/var_route.c
+ - Moved write_route.c -> mibgroup/write_route.c
+
+1997-03-12 00:28 whardake
+
+ * agent/mibgroup/: snmp_mib.c, snmp_mib.h:
+
+ - (mibgroup/snmp.[hc] -> mibgroup/snmp_mib.[hc]): Moved due to name clashes.
+
+1997-03-11 08:36 whardake
+
+ * agent/mibgroup/at.h, agent/mibgroup/icmp.c,
+ agent/mibgroup/interfaces.c, agent/mibgroup/ip.c,
+ agent/mibgroup/snmp.c, agent/mibgroup/snmp.h,
+ agent/mibgroup/system.c, agent/mibgroup/tcp.c,
+ agent/mibgroup/udp.c, agent/mibgroup/wombat.c,
+ acconfig.h, config.h.in, configure,
+ configure.in, agent/route_write.c,
+ agent/snmp_var_route.c, snmplib/mib.c:
+
+ - (mibgroup/*):
+ - remove trailing ;s on bunches of functions.
+ - make everything but interfaces.c compile on irix6.3.
+ - (config*,system.c): use uname and gethostname if available.
+ - (configure.in, configure): Don't check _KERNEL if ifnet.if_mtu already works.
+
+1997-03-11 00:04 whardake
+
+ * agent/mibgroup/ip.c:
+
+ - (ip.c): freebsd2 patch.
+
+1997-03-10 08:28 whardake
+
+ * configure, configure.in:
+
+ - (configure.in): space protect modules when checking for with grep.
+
+1997-03-10 07:55 whardake
+
+ * configure, configure.in:
+
+ - (configure.in): New configure option: --with-out-mib-modules="list".
+
+1997-03-07 07:11 whardake
+
+ * agent/common_header.h:
+
+ - (common_header.h): comment out end of #endif.
+
+1997-03-07 07:09 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (config*): make new configure options respect $(srcdir).
+
+1997-03-07 06:02 whardake
+
+ * configure, configure.in:
+
+ - (configure): removed {} requirement from config_load_mib() calls.
+
+1997-03-07 06:00 whardake
+
+ * agent/mibgroup/: at.h, disk.h, errormib.h,
+ extensible.h, icmp.h, interfaces.h, ip.h,
+ loadave.h, memory.h, proc.h, snmp.h,
+ system.h, tcp.h, udp.h, versioninfo.h,
+ wombat.h:
+
+ - (mibgroup/*): removed {} requirement from config_load_mib() calls.
+
+1997-03-07 05:01 whardake
+
+ * agent/mibgroup/versioninfo.c, sedscript.in,
+ bug-report:
+
+ version tag ( 3.1.4.pre3 )
+
+1997-03-07 04:51 whardake
+
+ * snmplib/snmp.c:
+
+ - (snmplib/snmp.c): remove second ctype.h include.
+
+1997-03-07 04:50 whardake
+
+ * agent/mibgroup/hpux.c:
+
+ - (hpux.c): ifdef a few headers for correct make depend.
+
+1997-03-07 04:49 whardake
+
+ * agent/mibgroup/Makefile.in, snmplib/Makefile.in,
+ apps/Makefile.in:
+
+ - (mibgroup/Makefile.in, apps/Makefile.in, snmplib/Makefile.in): depend.
+
+1997-03-07 04:48 whardake
+
+ * agent/: snmp_agent.c, snmp_vars.c, snmpd.c:
+
+ - (snmp_agent.c, snmp_vars.c, snmpd.c): remove extproto.h include.
+
+1997-03-07 04:47 whardake
+
+ * agent/Makefile.in:
+
+ - (agent/Makefile.in): make depend and extensible/ removes.
+
+1997-03-07 04:46 whardake
+
+ * Makefile.in, config.h.in, sedscript.in:
+
+ - (Makefile.in, sedscript.in): Fix sedscript generation. sigh.
+
+1997-03-07 04:44 whardake
+
+ * .cvsignore:
+
+ - (.cvsignore): add mib_module_config.h
+
+1997-03-07 04:40 whardake
+
+ * remove-files:
+
+ - (remove-files): add makedepend.in
+
+1997-03-07 04:39 whardake
+
+ * makedepend.in:
+
+ - (makedepend.in): new make depend script
+
+1997-03-07 02:42 whardake
+
+ * acconfig.h, configure, configure.in:
+
+ - (config*): generate a mib_module_config.h with defines of whats being used.
+
+1997-03-07 01:49 whardake
+
+ * agent/mibgroup/struct.h:
+
+ - (mibgroup/struct.h): moved to here.
+
+1997-03-07 01:34 whardake
+
+ * agent/mibgroup/: hpux.c, hpux.h:
+
+ - (hpux.[ch]): Added hpux specific files from extensible dir.
+
+1997-03-07 01:07 whardake
+
+ * agent/mibgroup/versiontag:
+
+ - (mibmodule/versiontag): moved into place from extensible/
+
+1997-03-07 00:58 whardake
+
+ * agent/: snmp_vars.h, mibgroup/disk.c, mibgroup/disk.h
+, mibgroup/errormib.c, mibgroup/errormib.h,
+ mibgroup/extensible.c, mibgroup/extensible.h,
+ mibgroup/ip.c, mibgroup/ip.h, mibgroup/loadave.c,
+ mibgroup/loadave.h, mibgroup/pass.c, mibgroup/pass.h
+, mibgroup/proc.c, mibgroup/proc.h,
+ mibgroup/read_config.c, mibgroup/read_config.h,
+ mibgroup/snmp.c, mibgroup/system.c,
+ mibgroup/util_funcs.c, mibgroup/util_funcs.h:
+
+ - (snmp_vars.h, mibgroup/*): strict-prototyping and config_require()s.
+
+1997-03-07 00:07 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): removed more non-mibgroup specific calls and headers.
+
+1997-03-07 00:05 whardake
+
+ * agent/: mibgroup/Makefile.in, mibgroup/disk.c,
+ mibgroup/disk.h, mibgroup/errormib.c,
+ mibgroup/errormib.h, mibgroup/extensible.c,
+ mibgroup/extensible.h, mibgroup/loadave.c,
+ mibgroup/loadave.h, mibgroup/memory.c,
+ mibgroup/memory.h, mibgroup/mibdefs.h,
+ mibgroup/mibincl.h, mibgroup/pass.c, mibgroup/pass.h
+, mibgroup/proc.c, mibgroup/proc.h,
+ mibgroup/read_config.c, mibgroup/read_config.h,
+ mibgroup/system.c, mibgroup/system.h,
+ mibgroup/util_funcs.c, mibgroup/util_funcs.h,
+ mibgroup/versioninfo.c, mibgroup/versioninfo.h,
+ Makefile.in:
+
+ - (extensible/* -> mibgroup/*): moved extensible stuff to mib modules.
+
+1997-03-05 07:29 whardake
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Yep. It was wrong. Tested and works now.
+
+1997-03-05 07:15 whardake
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): fixed prototyping errors in snmp_parse. Possibly wrong.
+
+1997-03-05 07:13 whardake
+
+ * agent/acl_vars.c:
+
+ - (acl_vars.c): incorrectly fixed prototyping errors for write_acl().
+
+1997-03-05 06:05 whardake
+
+ * snmplib/: acl.c, acl.h, acl_parse.c, asn1.c
+, asn1.h, context.c, context.h,
+ context_parse.c, md5.c, md5.h, mib.c,
+ mib.h, parse.c, parse.h, party.c, party.h
+, party_parse.c, snmp.h, snmp_api.c,
+ snmp_api.h, snmp_auth.c, snmp_client.c,
+ snmp_client.h, snmp_impl.h, system.c, system.h
+, view.c, view.h:
+
+ - (*.c, *.h): Patch from Niels Baggesen to prototype *everything*.
+
+1997-03-05 06:01 whardake
+
+ * agent/mibgroup/at.c, agent/mibgroup/at.h,
+ agent/mibgroup/icmp.c, agent/mibgroup/icmp.h,
+ agent/mibgroup/interfaces.c, agent/mibgroup/interfaces.h
+, agent/mibgroup/ip.c, agent/mibgroup/ip.h,
+ agent/mibgroup/snmp.c, agent/mibgroup/snmp.h,
+ agent/mibgroup/snmpv2_vars.h, agent/mibgroup/system.c,
+ agent/mibgroup/system.h, agent/mibgroup/tcp.c,
+ agent/mibgroup/tcp.h, agent/mibgroup/udp.c,
+ agent/mibgroup/udp.h, apps/snmpbulkwalk.c,
+ apps/snmpget.c, apps/snmpgetnext.c, apps/snmpset.c
+, apps/snmpstatus.c, apps/snmptest.c,
+ apps/snmptranslate.c, apps/snmptrap.c,
+ apps/snmptrapd.c, apps/snmpwalk.c,
+ apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c,
+ apps/snmpnetstat/main.c, apps/snmpnetstat/route.c:
+
+ - (*.c, *.h): Patch from Niels Baggesen to prototype *everything*.
+
+1997-03-05 05:58 whardake
+
+ * acconfig.h, config.h.in, agent/acl_vars.c,
+ agent/alarm.c, agent/alarm.h, agent/common_header.h
+, agent/context_vars.c, agent/event.c,
+ agent/event.h, agent/kernel.h, agent/party_vars.c
+, agent/route_write.c, agent/snmp_agent.c,
+ agent/snmp_var_route.c, agent/snmp_vars.c,
+ agent/snmp_vars.h, agent/snmp_vars_event.h,
+ agent/snmpd.c, agent/snmpd.h, agent/var_struct.h
+, agent/view_parse.c, agent/view_vars.c:
+
+ - (*.c, *.h): Patch from Niels Baggesen to prototype *everything*.
+
+1997-03-05 02:37 whardake
+
+ * README:
+
+ - (README): Contributer name addition.
+
+1997-03-05 02:28 whardake
+
+ * agent/snmpd.h:
+
+ file snmpd.h was initially added on branch Ext-3-1-4-pre2-niels.
+
+1997-03-05 02:28 whardake
+
+ * agent/kernel.h:
+
+ file kernel.h was initially added on branch Ext-3-1-4-pre2-niels.
+
+1997-03-05 02:17 whardake
+
+ * snmplib/snmp_client.c:
+
+ - (snmp_client.c): Patch from Elwyn B Davies:
+ - Fix a PDU cloning bug.
+
+1997-03-05 01:04 whardake
+
+ * agent/mibgroup/.cvsignore:
+
+ - (mibgroup/.cvsignore): new to ignore created .h files.
+
+1997-03-05 01:03 whardake
+
+ * agent/mibgroup/system.c:
+
+ - (system.c): removed system nlist (unused).
+
+1997-03-05 00:48 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/Makefile.in,
+ agent/common_header.h, agent/snmp_vars.c,
+ agent/snmp_vars.h, agent/mibgroup/Makefile.in,
+ agent/mibgroup/at.h, agent/mibgroup/icmp.h,
+ agent/mibgroup/interfaces.h, agent/mibgroup/ip.h,
+ agent/mibgroup/snmp.c, agent/mibgroup/snmp.h,
+ agent/mibgroup/system.c, agent/mibgroup/system.h,
+ agent/mibgroup/tcp.h, agent/mibgroup/udp.h,
+ agent/mibgroup/wombat.h:
+
+ - (config*, agent/*, agent/mibgroup/*):
+ - Added .o file list to agent/Makefile.in generated by configure.
+ - new files generated by configure:
+ - mibgroup/mib_module_includes.h: A list of mib .h files for snmp_vars.h.
+ (every module *must* have a .h file)
+ - mibgroup/mib_module_inits.h: A list of init_wombat() type functions.
+ (only present if exist in wombat.c).
+ - mibgroup/mib_module_loads.h: This file is generated by a new macro in
+ the mib.h files called
+ config_load_mib(), which simplifies
+ the loading of the mib sections.
+
+1997-03-04 06:44 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/mibgroup/Makefile.in:
+
+ - (config*, mibgroup/Makefile.in):
+ - mibgroup compile list is build by configure and can be augmented
+ by the --with-mib-modules="list of modules" command line to configure.
+
+1997-02-17 07:11 whardake
+
+ * sedscript.in, bug-report:
+
+ version tag ( 3.1.4.pre2 )
+
+1997-02-17 06:32 whardake
+
+ * agent/mibgroup/interfaces.c:
+
+ - (interfaces.c): Remove MAX_NAME_LENGTH requirements.
+
+1997-02-17 06:31 whardake
+
+ * agent/mibgroup/icmp.c:
+
+ - (icmp.c): don't use ret variable, since it's not defined.
+
+1997-02-17 06:30 whardake
+
+ * agent/event.c:
+
+ - (event.c): Was passing an int to bcopy instead of &int.
+
+1997-02-17 06:30 whardake
+
+ * agent/alarm.c:
+
+ - (alarm.c): typedef for getStatPtr().
+
+1997-02-17 05:53 whardake
+
+ * agent/: Makefile.in, mibgroup/Makefile.in:
+
+ - (agent/*Makefile.in): Make depend.
+
+1997-02-17 05:47 whardake
+
+ * snmplib/: mib.c, snmp_api.c, snmp_api.h:
+
+ - (mib.c, snmp_api.c, snmp_api.h): Patch from Dave Shield to remove
+ ANSI specific requirements.
+
+1997-02-17 05:46 whardake
+
+ * agent/mibgroup/.cvsignore:
+
+ - (agent/mibgroup/.cvsignore): Added.
+
+1997-02-17 05:38 whardake
+
+ * configure, configure.in, agent/Makefile.in,
+ agent/common_header.h, agent/snmp_agent.c,
+ agent/snmp_var_route.c, agent/snmp_vars.c,
+ agent/snmp_vars.h, agent/snmpd.c, agent/var_struct.h
+, agent/mibgroup/Makefile.in, agent/mibgroup/README
+, agent/mibgroup/at.c, agent/mibgroup/at.h,
+ agent/mibgroup/extensible_subtrees.h, agent/mibgroup/icmp.c
+, agent/mibgroup/icmp.h, agent/mibgroup/interfaces.c
+, agent/mibgroup/interfaces.h, agent/mibgroup/ip.c
+, agent/mibgroup/ip.h, agent/mibgroup/snmp.c,
+ agent/mibgroup/snmp.h, agent/mibgroup/snmpv2_subtrees.h
+, agent/mibgroup/snmpv2_vars.h, agent/mibgroup/system.c
+, agent/mibgroup/system.h, agent/mibgroup/tcp.c,
+ agent/mibgroup/tcp.h, agent/mibgroup/udp.c,
+ agent/mibgroup/udp.h, agent/mibgroup/wombat.c,
+ agent/mibgroup/wombat.h:
+
+ - (agent/snmp_vars, agent/mibgroup): Dave Shield split up the
+ snmp_vars.c and related files into pieces for easier management.
+ The results of his work are in the new agent/mibgroup directory.
+
+1997-02-11 08:00 whardake
+
+ * Makefile.in:
+
+ - (Makefile.in): Rest of Philip's patch to fix srcdir problems (sh vars).
+
+1997-02-11 07:44 whardake
+
+ * man/Makefile.in:
+
+ - (man/Makefile.in): Patch from Simon Leinin to fix srcdir problems.
+
+1997-02-11 07:42 whardake
+
+ * apps/Makefile.in:
+
+ - (apps/Makefile.in): Patch from Simon Leinin to descend when make cleaning.
+
+1997-02-11 05:14 whardake
+
+ * sedscript.in, bug-report:
+
+ version tag ( 3.1.4.pre1 )
+
+1997-02-11 05:13 whardake
+
+ * snmplib/snmp_auth.c:
+
+ - (snmp_auth.c): remove non-static md5digest prototype.
+
+1997-02-11 05:11 whardake
+
+ * local/Makefile.in, man/Makefile.in, ov/Makefile.in
+:
+
+ - ({local,man,ov}/Makefile.in): Remove spaces in front of tabs.
+
+1997-02-11 05:10 whardake
+
+ * agent/snmp_vars.linux.h:
+
+ - (snmp_vars.linux.h): Fix #ifdef.
+
+1997-02-11 04:17 whardake
+
+ * agent/snmpd.c, apps/snmpbulkwalk.c, apps/snmpget.c
+, apps/snmpgetnext.c, apps/snmpset.c,
+ apps/snmpstatus.c, apps/snmptest.c,
+ apps/snmptranslate.c, apps/snmptrap.c, apps/snmptrapd.c
+, apps/snmpwalk.c, apps/snmpnetstat/main.c,
+ snmplib/acl.c, snmplib/acl.h, snmplib/acl_parse.c
+, snmplib/context.c, snmplib/context.h,
+ snmplib/context_parse.c, snmplib/md5.c, snmplib/mib.c
+, snmplib/party.c, snmplib/party.h,
+ snmplib/party_parse.c, snmplib/snmp.c,
+ snmplib/snmp_api.c, snmplib/snmp_api.h,
+ snmplib/snmp_auth.c, snmplib/view.c, snmplib/view.h
+:
+
+ - (all .c with main(), snmplib/*): Patch from Philip Guenther:
+ - Make better support for shared lib possibilities.
+
+1997-02-11 04:12 whardake
+
+ * README:
+
+ - (README): Update people supplying patches list.
+
+1997-02-11 04:10 whardake
+
+ * Makefile.in, agent/Makefile.in, apps/Makefile.in
+, apps/snmpnetstat/Makefile.in, local/Makefile.in
+, man/Makefile.in, ov/Makefile.in,
+ snmplib/Makefile.in:
+
+ - (*Makefile.in): Patch from Philip Guenther:
+ - Fix all Makefile.in's to support a different src dir.
+
+1997-02-11 03:54 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): Patch from Dave Shield: Fix hpux specific problems.
+
+1997-02-11 03:50 whardake
+
+ * agent/snmp_vars.linux.h:
+
+ - (snmp_vars.linux.h): Removed non-linux specific stuff.
+
+1997-02-11 03:47 whardake
+
+ * agent/: snmp_var_route.c, snmp_vars.c,
+ snmp_vars.linux.h:
+
+ - (snmp_vars.c, snmp_var_route.c, snmp_vars.linux.h): Patch from Jennifer Bray:
+ - Get agent working on linux.
+
+1997-02-10 00:54 whardake
+
+ * NEWS:
+
+ - (NEWS): Whoops.
+
+1997-02-10 00:51 whardake
+
+ * sedscript.in, bug-report:
+
+ version tag ( 3.1.3 )
+
+1997-02-10 00:50 whardake
+
+ * ChangeLog:
+
+ - (ChangeLog): Update for 3.1.3
+
+1997-02-10 00:22 whardake
+
+ * apps/snmpnetstat/main.c:
+
+ - (snmpnetstat/main.c): Remove malloc prototype, now in stdlib.h.
+
+1997-02-10 00:22 whardake
+
+ * FAQ:
+
+ - (FAQ): Dave Shields' additions: finding more info.
+
+1997-02-05 08:41 whardake
+
+ * sedscript.in, bug-report:
+
+ version tag ( 3.1.3.pre4 )
+
+1997-02-05 08:29 whardake
+
+ * Makefile.in, configure, configure.in:
+
+ - (Makefile.in, configure.in): removed tcl stuff.
+
+1997-02-05 08:24 whardake
+
+ * NEWS, local/snmpcheck.def:
+
+ - (NEWS): removed tcl stuff.
+
+1997-02-05 08:20 whardake
+
+ * bug-report:
+
+ - (bug-report): Change subject line to shorten and force better description.
+
+1997-02-05 08:13 whardake
+
+ * snmplib/system.c:
+
+ - (system.c): Patch from Dave Shield to fix nlist problems.
+
+1997-02-05 08:09 whardake
+
+ * agent/snmp_agent.c, agent/snmp_groupvars.h,
+ agent/snmp_var_route.c, agent/snmp_vars.c,
+ agent/snmpd.c, apps/snmpnetstat/if.c,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/main.c,
+ apps/snmpnetstat/route.c, man/snmpd.conf.5.def:
+
+ - (many): Patch from Niels Baggesen:
+ - snmp mib group cleanups.
+ - trap generation cleanups.
+ - added man entries for trap generation.
+ - improved agent debugging output with agent's -d flag.
+
+1997-02-05 08:07 whardake
+
+ * configure, configure.in:
+
+ - (configure, configure.in): Put /dev/ksyms ahead of /kernel/unix.
+
+1997-02-05 07:33 whardake
+
+ * TODO:
+
+ - (TODO): misc requested additions.
+
+1997-02-05 07:33 whardake
+
+ * FAQ:
+
+ - (FAQ): Dave updated architecture lists.
+
+1997-02-04 00:41 whardake
+
+ * FAQ:
+
+ - (FAQ): Added TOC and autor notes ;-).
+
+1997-02-04 00:37 whardake
+
+ * snmplib/mib.c:
+
+ - (mib.c): Patch from Simon: comment #ifdef endings for ANSI compliers.
+
+1997-02-04 00:36 whardake
+
+ * configure, configure.in:
+
+ - (configure, configure.in): Fix hpux problems, *again*.
+
+1997-02-04 00:35 whardake
+
+ * TODO:
+
+ - (TODO): Added suggestions from ucd-snmp-coders.
+
+1997-02-04 00:35 whardake
+
+ * FAQ:
+
+ - (FAQ): Dave's latest revision.
+
+1997-02-03 04:55 whardake
+
+ * sedscript.in, bug-report:
+
+ version tag ( 3.1.3.pre3 )
+
+1997-02-03 04:53 whardake
+
+ * bug-report:
+
+ - (bug-report): move config.cache to end of message.
+
+1997-02-03 04:33 whardake
+
+ * NEWS, README, TODO:
+
+ - (README, NEWS, TODO): Update for 3.1.3.
+
+1997-02-03 04:15 whardake
+
+ * README:
+
+ - (README):
+ - added FAQ pointer.
+ - Dave's English pointers (ie, he proofed it and I, uh, don't...).
+ - switch ftp mirror.
+ - bug-report script mentioned.
+ - I -> We, me -> us...
+
+1997-02-03 03:51 whardake
+
+ * README:
+
+ - (README): remove project history.
+
+1997-02-03 03:47 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): add some irix appropriate includes.
+
+1997-02-03 03:44 whardake
+
+ * snmplib/system.c:
+
+ - (snmplib/system.c): typo: needs a space between 'static' and 'struct'.
+
+1997-02-03 02:50 whardake
+
+ * acconfig.h, aclocal.m4, config.h.in,
+ configure, configure.in:
+
+ - (config*):
+ - Check for irix 6.2 headers.
+ - Check if _KERNEL needs to be defined for irix and ifnet usage.
+ - Use the found UNAME program instead of assuming we have it.
+
+1997-02-03 01:48 whardake
+
+ * snmplib/system.c:
+
+ - (snmplib/system.c): Use CAN_USE_SYSCTL instead of bsdlike.
+
+1997-02-03 01:47 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): Patch from Dave Shield
+ - Mark stuff for later changes.
+
+1997-02-03 01:45 whardake
+
+ * configure, configure.in:
+
+ - (configure.in):
+ - Check for whoami, logname.
+ - Don't pass null args to ksh.
+
+1997-02-03 01:03 whardake
+
+ * EXAMPLE.conf.def:
+
+ - (EXAMPLE.conf.def): comment out possible security problem lines.
+
+1997-02-03 01:02 whardake
+
+ * bug-report:
+
+ - (bug-report): Patch from Dave Shield:
+ - domain name fix and editor bomb out.
+
+1997-01-31 02:03 whardake
+
+ * bug-report, sedscript.in:
+
+ version tag update
+
+1997-01-31 01:59 whardake
+
+ * configure.in, configure:
+
+ - (configure.in, configure): changed arch to hppa and make sure /bin/ksh exists.
+
+1997-01-31 01:49 whardake
+
+ * configure, configure.in:
+
+ - (configure.in, configure): fire off ksh if hpux && sh.
+
+1997-01-31 01:01 whardake
+
+ * agent/: snmp_var_route.c, snmp_vars.c:
+
+ - (snmp_var_route.c, snmp_vars.c): Patch from Martin Jacobsson:
+ - Change some system specific ifdefs to CAN_USE_SYSCTL.
+ - Fix compliation errors on bsdi2.
+ - Fix routing tables for similar.
+
+1997-01-31 00:57 whardake
+
+ * configure.in, configure, config.h.in,
+ acconfig.h:
+
+ - (config*): Check for kstat.h and if sysctl can read the boottime.
+
+1997-01-29 04:08 whardake
+
+ * bug-report:
+
+ - (bug-report):
+ - change to address (back) to ucd-snmp-coders.
+ - Add a trap on signals to remove tmp files.
+
+1997-01-29 03:58 whardake
+
+ * agent/: kernel.c, snmp_agent.c, snmpd.c:
+
+ - (kernel.c, snmp_agent.c, snmpd.c): Patch from Niels Baggesen:
+ - Fix various warnings/errors.
+ - Implement real traps.
+
+1997-01-29 03:11 whardake
+
+ * config.h.in, configure:
+
+ - (config.h.in, configure): update
+
+1997-01-29 03:11 whardake
+
+ * FAQ:
+
+ - (FAQ): revision one!
+
+1997-01-29 03:10 whardake
+
+ * configure.in:
+
+ - (configure.in): New ps options to check for.
+
+1997-01-29 03:09 whardake
+
+ * aclocal.m4:
+
+ - (aclocal.m4): Fix check_struct_for to define things correctly.
+
+1997-01-29 03:08 whardake
+
+ * .cvsignore:
+
+ - (.cvsignore): ignore .software.db.sh
+
+1997-01-29 03:07 whardake
+
+ * acconfig.h:
+
+ - (acconfig.h):
+ - SNMPBLOCK = !SNMPBLOCK
+
+1997-01-29 03:07 whardake
+
+ * bug-report:
+
+ - (bug-report):
+ - Always use multipart: version info and config.cache are one.
+ - re-arranged a bit.
+ - Added introduction.
+ - Guess at domain name if possible.
+
+1997-01-29 01:47 whardake
+
+ * bug-report:
+
+ bug reporting script add
+
+1997-01-21 00:17 whardake
+
+ * agent/: snmp_var_route.c, snmp_vars.c:
+
+ - (snmp_var_route.c, snmp_vars.c):
+ - Patch from Karl Lehenbauer <karl@hammer1.ops.NeoSoft.com>
+ - handle multiple interface names > 10 properly.
+
+1997-01-20 23:34 whardake
+
+ * snmplib/snmp_client.h:
+
+ - (snmp_client.h): remove second (wrong) function prototype.
+
+1997-01-20 23:33 whardake
+
+ * agent/snmpd.c:
+
+ - (snmpd.c): remove second char definition.
+
+1997-01-20 07:59 whardake
+
+ * sedscript.in:
+
+ version tag ( 3.1.3.pre1 )
+
+1997-01-20 07:43 whardake
+
+ * snmplib/: snmp_api.c, snmp_client.c, snmp_client.h
+:
+
+ - (snmp_api.c, snmp_client.[ch]):
+ - Patch from Patrice VANACKER <vanacker@worldnet.fr>:
+ - fix request deletions in snmp_read().
+ - added return argument to snmp_add_null_var().
+
+1997-01-20 06:55 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): Patch from Martin Jacobsson <martin@exmandato.se>:
+ - add bsdi to some #ifdefs.
+
+1997-01-20 06:38 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c, extensible.c, read_config.c): Remove ANSI cpp #elif's.
+
+1997-01-20 06:36 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (config*): Autoheader is dumb: Put macro defines belowe @BOTTOM@ symbol.
+
+1997-01-20 06:22 whardake
+
+ * snmplib/snmp_client.c:
+
+ - Patches from Niels Baggesen <Niels.Baggesen@uni-c.dk>:
+ - (snmp_client.c): Wait 120 seconds before returning.
+
+1997-01-20 06:08 whardake
+
+ * apps/snmpnetstat/if.c, apps/snmpnetstat/route.c,
+ man/snmptrapd.8, snmplib/acl.h, snmplib/asn1.c,
+ snmplib/context.h, snmplib/mib.c, snmplib/mib.h,
+ snmplib/parse.c, snmplib/party.c, snmplib/party.h
+, snmplib/snmp.c, snmplib/snmp.h,
+ snmplib/snmp_api.c, snmplib/snmp_auth.c,
+ snmplib/snmp_client.c, snmplib/snmp_client.h,
+ snmplib/system.c, snmplib/view.h:
+
+ - Patches from Dave Shield <D.T.Shield@csc.liv.ac.uk>:
+ - implemented: interfaces.ifTable.ifEntry.ifSpecific,
+ ip.ipRoutingDiscards,
+ ip.ipAddrTable.ipAddrEntry.ipAdEntReasmMaxSize,
+ ip.ipRouteTable.ipRouteEntry.ipRouteMask ,
+ ip.ipRouteTable.ipRouteEntry.ipRouteMetric5,
+ ip.ipRouteTable.ipRouteEntry.ipRouteInfo, ip.ipNetToMediaTable,
+ udp.udpTable.
+ - udp connection table.
+ - ipNetToMedia.
+
+ - Patches from Niels Baggesen <Niels.Baggesen@uni-c.dk>:
+ - udpNoPort, tcpInErrs fixes for Solaris.
+ - linux application support.
+ - snmp variable group.
+ - simple cold start traps via exec('snmptrap').
+ - MIB parser fixes.
+ - Memory/free allocation fixes.
+
+1997-01-20 06:04 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/alarm.h, agent/event.c,
+ agent/event.h, agent/kernel.c, agent/kernel_sunos5.c
+, agent/snmp_agent.c, agent/snmp_groupvars.h,
+ agent/snmp_var_route.c, agent/snmp_vars.c,
+ agent/snmp_vars.h, agent/snmpd.c, agent/var_struct.h
+, apps/snmpbulkwalk.c, apps/snmpget.c,
+ apps/snmpgetnext.c, apps/snmpset.c, apps/snmpstatus.c
+, apps/snmptest.c, apps/snmptranslate.c,
+ apps/snmptrap.c, apps/snmptrapd.c, apps/snmpwalk.c
+:
+
+ - Patches from Dave Shield <D.T.Shield@csc.liv.ac.uk>:
+ - implemented: interfaces.ifTable.ifEntry.ifSpecific,
+ ip.ipRoutingDiscards,
+ ip.ipAddrTable.ipAddrEntry.ipAdEntReasmMaxSize,
+ ip.ipRouteTable.ipRouteEntry.ipRouteMask ,
+ ip.ipRouteTable.ipRouteEntry.ipRouteMetric5,
+ ip.ipRouteTable.ipRouteEntry.ipRouteInfo, ip.ipNetToMediaTable,
+ udp.udpTable.
+ - udp connection table.
+ - ipNetToMedia.
+
+ - Patches from Niels Baggesen <Niels.Baggesen@uni-c.dk>:
+ - udpNoPort, tcpInErrs fixes for Solaris.
+ - linux application support.
+ - snmp variable group.
+ - simple cold start traps via exec('snmptrap').
+ - MIB parser fixes.
+ - Memory/free allocation fixes.
+
+1997-01-17 02:58 whardake
+
+ * agent/snmpd.c:
+
+ - (snmpd.c):
+ - Usage() update and version printout update.
+
+1997-01-17 02:51 whardake
+
+ * agent/snmpd.c:
+
+ - (snmpd.c, extensible.c):
+ - New arg -c FILE: Read FILE as a configuration file as well.
+ - New arg -C: Don't read default configuration files.
+ - New env SNMPCONFPATH: Read snmpd{,.local}.conf files in: seperated path.
+
+1997-01-14 07:45 whardake
+
+ * PORTING, README, TODO:
+
+ - (PORTING, README, TODO): Added ucd-snmp-coders as default mail address.
+
+1997-01-09 23:46 whardake
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): Remove broken FD_SET code.
+
+1997-01-09 23:45 whardake
+
+ * configure, configure.in:
+
+ - (config*): Check for /dev/ksyms for solaris kernel.
+
+1997-01-09 23:43 whardake
+
+ * COPYING:
+
+ - (COPYING): Update for 97.
+
+1996-12-05 00:19 whardake
+
+ * sedscript.in:
+
+ version tag ( 3.1.2.1 )
+
+1996-12-05 00:19 whardake
+
+ * ChangeLog:
+
+ - (ChangeLog): Update.
+
+1996-12-05 00:14 whardake
+
+ * snmplib/md5.c:
+
+ - (md5.c): remove ansi specific C features (unsigned constants).
+
+1996-12-05 00:13 whardake
+
+ * apps/snmpnetstat/if.c:
+
+ - (if.c): #ifndef -> #ifdef for sigset.
+
+1996-12-04 01:03 whardake
+
+ * sedscript.in:
+
+ version tag ( 3.1.2 )
+
+1996-12-04 01:01 whardake
+
+ * ChangeLog, NEWS:
+
+ - (ChangeLog, NEWS): Update for release 3.1.2.
+
+1996-12-04 00:49 whardake
+
+ * PORTING, README:
+
+ - (PORTING, README): Update for release 3.1.2.
+
+1996-12-04 00:15 whardake
+
+ * snmplib/: asn1.c, parse.c, snmp_api.c,
+ snmp_client.c:
+
+ - (asn1.c, parse.c, snmp_api.c, snmp_client.c):
+ - Patch from Niels Baggesen <Niels.Baggesen@uni-c.dk>:
+ - Parser fixes for multiple nodes.
+ - memmove/copy deletes.
+
+1996-12-03 05:51 whardake
+
+ * ece-mib.def:
+
+ - (ece-mib.def): Used -> Avail in memory sequence.
+
+1996-12-03 02:14 whardake
+
+ * EXAMPLE.conf.def, local/passtest:
+
+ - (EXAMPLE.conf.def, passtest): Move passtest to ucdavis subtree.
+
+1996-12-03 02:03 whardake
+
+ * acconfig.h, configure, configure.in,
+ agent/snmp_vars.c:
+
+ - (snmp_vars.c): From Dave Shield <D.T.Shield@csc.liv.ac.uk>:
+ - Fix arp table for hpux.
+ - (config*): Check for arphd.at_next and use in above.
+
+1996-12-03 01:05 whardake
+
+ * snmplib/md5.c:
+
+ - (md5.c): Put 'U'nsigned marker at end of constants to remove gcc warns.
+
+1996-12-03 01:03 whardake
+
+ * acconfig.h, aclocal.m4, config.h.in,
+ configure, configure.in, agent/snmp_vars.c:
+
+ - (config*, snmp_vars.c):
+ - Wrote AC_CHECK_STRUCT_FOR and use it.
+ - Make AC_CHECK_IFNET_FOR use above.
+ - Changequote '[]' -> '' around sed expression with []s (-Dostype).
+
+1996-12-01 23:55 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): Patch from Dave Shield <D.T.Shield@csc.liv.ac.uk>:
+ - ifPhysAddr - in Interface_Get_Ether_By_Index, HP-UX has the same
+ EtherAddr strucure as MIPS.
+
+ - ipAdEntIfIndex - in var_ipAddrEntry, there is a false match on
+ the loopback interface, giving the wrong answer of the first
+ interface index.
+
+ - udpInErrors - in var_udp, the count of UDP errors omits discarded
+ packets. Some systems (i.e. HP-UX) have extended the udpstat
+ structure to include these. I'v tweaked this analogous to a
+ similar addition in the tcpstat structure.
+
+ - tcpConnState - HP-UX has added an extra state into the list, which
+ throws the rest of them out.
+
+1996-11-26 23:56 whardake
+
+ * configure, configure.in:
+
+ - (configure.in, configure): Truncate system names beyond [-_].*.
+
+1996-11-26 23:45 whardake
+
+ * apps/snmpnetstat/if.c:
+
+ - (if.c): Reset signal on all types of signal implementations.
+
+1996-11-26 23:34 whardake
+
+ * apps/snmpnetstat/if.c:
+
+ - (if.c): Patch from Dave Shield <D.T.Shield@csc.liv.ac.uk>:
+ - Watch out for interface names with ' ' in them.
+ - Reset signal on BSD signal implementations.
+
+1996-11-26 23:21 whardake
+
+ * README:
+
+ - (README): Update.
+
+1996-11-26 23:21 whardake
+
+ * INSTALL:
+
+ - (INSTALL): Typo: 3.1.3 -> 3.0.3.
+
+1996-11-26 23:05 whardake
+
+ * configure, configure.in:
+
+ - (configure, configure.in): Default sysloc UCDavis -> Unknown.
+
+1996-11-26 23:02 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): Patch from Dave Shield <D.T.Shield@csc.liv.ac.uk>:
+ - Change comments to reflect what its actually looking at.
+ - Remove ifdef around ifnet declarations.
+
+1996-11-25 00:15 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, snmplib/snmp_impl.h:
+
+ - (config*, snmp_impl.h): Moved void -> char define to a configure test.
+
+1996-11-24 23:43 whardake
+
+ * agent/Makefile.in, apps/Makefile.in:
+
+ - ({agent,apps}/Makefile.in): Put libsnmp.a in front of -l libs.
+
+1996-11-24 07:45 whardake
+
+ * sedscript.in:
+
+ version tag ( 3.1.2.pre1 )
+
+1996-11-24 07:24 whardake
+
+ * agent/kernel.c, INSTALL, acconfig.h,
+ config.h.in, configure, configure.in:
+
+ - (kernel.c, config*, INSTALL): New configure switch: --without-root-access.
+ - The agent doesn't exit if it can't open /dev/kmem.
+
+1996-11-22 05:37 whardake
+
+ * config.guess, config.h.in, config.sub,
+ configure, install-sh, mkinstalldirs:
+
+ - (config*, install-sh, mkinstalldirs): Upgraded to autoconf 2.11.
+
+1996-11-22 00:14 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (config*): Add checks for ifnet.[io]bytes.
+
+1996-11-22 00:06 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): Merge from FreeBSD2-3-1-1.
+ - Add checks for ifnet.[io]bytes.
+
+1996-11-21 23:18 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): Trash interface caching.
+
+1996-11-15 07:44 whardake
+
+ * snmplib/parse.c:
+
+ - (parse.c): Add back in "reading mib..." debugging statments.
+
+1996-11-15 07:43 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (config*, extensible.c): Make uname calls work correctly.
+
+1996-11-14 06:24 whardake
+
+ * apps/: snmptrap.c, snmpnetstat/inet.c,
+ snmpnetstat/route.c:
+
+ - (snmptrap.c, inet.c, route.c): typecasting warning fixes.
+
+1996-11-14 06:17 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (config*):
+ - Check for existance of tcpstat.tcps_rcvmemdrop.
+ - Check for sys/vfs.h.
+
+1996-11-14 06:16 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c):
+ - #ifdef typo.
+ - prototype for Interface_Scan_Init().
+ - Check for existance of tcpstat.tcps_rcvmemdrop before using.
+
+1996-11-08 08:06 whardake
+
+ * Makefile.in:
+
+ - (Makefile.in): Fixed 'touchit'.
+
+1996-11-08 08:03 whardake
+
+ * Makefile.in:
+
+ - (Makefile.in): Created a 'touchit' to touch config files properly.
+
+1996-11-07 05:19 whardake
+
+ * snmplib/mib.c:
+
+ - (mib.c): typecast for sprint_objid().
+
+1996-11-07 05:17 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): ifdef typos.
+
+1996-11-07 05:16 whardake
+
+ * agent/snmp_var_route.c:
+
+ - (snmp_var_route.c): ifdef's around strings.h.
+
+1996-11-07 05:15 whardake
+
+ * configure.in, configure:
+
+ - (configure.in, configure): Changed default SNMPV2AUTH to SNMPV1.
+
+1996-11-07 00:34 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/route_write.c,
+ agent/snmp_var_route.c, agent/snmp_vars.c:
+
+ - BSDi2 3.1.1 branch merge.
+
+1996-11-07 00:22 whardake
+
+ * agent/kernel.c, agent/snmpd.c, apps/snmpbulkwalk.c
+, apps/snmpget.c, apps/snmpgetnext.c,
+ apps/snmpset.c, apps/snmptest.c, apps/snmptranslate.c
+, apps/snmptrap.c, apps/snmptrapd.c,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/main.c,
+ apps/snmpnetstat/route.c, man/snmptranslate.1,
+ snmplib/mib.c, snmplib/mib.h, snmplib/parse.c,
+ snmplib/parse.h:
+
+ - Niels 3.1.1 branch merge.
+
+1996-11-07 00:15 whardake
+
+ * acconfig.h, aclocal.m4, config.h.in,
+ configure, configure.in, sedscript.in,
+ agent/snmp_var_route.c, agent/snmp_vars.c,
+ agent/snmp_vars.h:
+
+ - NetBSD 3.1.0.1 branch merge.
+
+1996-11-04 01:08 whardake
+
+ * config.h.in, configure, configure.in:
+
+ - (config*): Check for nlist in -lmld (irix).
+
+1996-11-04 00:30 whardake
+
+ * config.h.in, configure, configure.in,
+ agent/snmp_vars.c:
+
+ - (config*, snmp_vars.c, extensible.c): More include checks for linux.
+
+1996-10-31 23:54 whardake
+
+ * snmplib/asn1.c:
+
+ - (asn1.c): Patch from Simon Leinen <simon@switch.ch>:
+ - asn_build_unsigned_int, asn_build_unsigned_int64:
+ - Don't try to strip FFs from the high end of unsigned values.
+ - Skip the stripping code entirely if we have to add a null byte.
+
+1996-10-30 04:48 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, ece-mib.def:
+
+ - (config*, ece-mib.def):
+ - Change extensible mib location to ucdavis enterprise mib: 2021.
+ - Remove associated prompting from configure script and etc.
+
+1996-10-30 04:47 whardake
+
+ * PORTING, README:
+
+ - (PORTING,README): Add a new PORTING file to reference autoconf plee.
+
+1996-10-16 23:02 whardake
+
+ * sedscript.in:
+
+ version tag ( 3.1.1.BSDI )
+
+1996-10-09 07:46 whardake
+
+ * sedscript.in:
+
+ version tag ( 3.1.1 )
+
+1996-10-09 07:45 whardake
+
+ * ChangeLog, NEWS:
+
+ - (ChangeLog, NEWS): update for 3.1.1.
+
+1996-10-09 07:22 whardake
+
+ * README:
+
+ - (README): Added thanks name.
+
+1996-10-09 07:18 whardake
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): From: gah@bellcore.com (Gary A. Hayward)
+ - Free pdu community to quelch purify.
+
+1996-10-09 00:30 whardake
+
+ * snmplib/parse.c:
+
+ - (parse.c):
+ - print a new line in print_error() if debugging is turned on.
+ - tossObjectIdentifier(): catch multiple bracket clauses (IE { {0 0} } ).
+
+1996-10-09 00:04 whardake
+
+ * snmplib/parse.c:
+
+ - (parse.c):
+ - Parse OBJECT-IDENTY as OBJECT-GROUP (saves only description).
+ - Change print_error(), read_mib() to reflect file and correct line number.
+
+1996-10-07 04:23 whardake
+
+ * man/snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def): Added syscontact and syslocation.
+
+1996-10-07 04:23 whardake
+
+ * man/snmpd.1.def:
+
+ - (snmpd.1.def): Changed to reflect SNMPLIB/mibs.
+
+1996-10-07 03:06 whardake
+
+ * .cvsignore:
+
+ - (.cvsignore): Added ucd-snmp.txt
+
+1996-10-07 03:00 whardake
+
+ * configure.in, configure:
+
+ - (configure.in):
+ - timestamp stamp-h at end.
+ - emacs local vars.
+
+1996-10-07 02:22 whardake
+
+ * Makefile.in:
+
+ - (Makefile.in):
+ - added --recheck to config.status call to regenerate self.
+ - Changed ece-mib.txt -> ucd-snmp.txt and install (and generate) properly.
+
+1996-10-07 01:11 whardake
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c): Removed snmp version check on error return from set.
+
+1996-10-07 00:52 whardake
+
+ * config.h.in, configure, configure.in:
+
+ - (config*): check correctly for get/setmntent.
+
+1996-10-07 00:01 whardake
+
+ * Makefile.in:
+
+ - (Makefile.in): Mib installation changed to reflect new mib directory.
+
+1996-10-06 23:49 whardake
+
+ * snmplib/parse.c:
+
+ - (parse.c): Proper autoconf dirent headers.
+
+1996-10-06 23:41 whardake
+
+ * snmplib/parse.c:
+
+ - (parse.c): Now loads all mibs (files) in the directory SNMPLIB/mibs.
+
+1996-10-04 02:01 whardake
+
+ * man/: snmpd.1.def, snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def): lib -> lib/snmp path correction in FILES section.
+ - (snmpd.1.def):
+ - Added a FILES section.
+ - General clean up.
+
+1996-10-04 01:46 whardake
+
+ * man/snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def):
+ - Cleaned up man page formatting.
+ - Added note about SNMPset community strings.
+ - minor proof-reading (major proofing needed still).
+ - Re-organized a bit.
+
+1996-10-04 01:44 whardake
+
+ * Makefile.in:
+
+ - (Makefile.in): Remove spaces from sedscript when using broken cpp (gcc).
+
+1996-10-04 01:43 whardake
+
+ * EXAMPLE.conf.def:
+
+ - (EXAMPLE.conf.def): Added snmpget/set to pass example.
+
+1996-10-03 08:10 whardake
+
+ * snmplib/snmp_impl.h:
+
+ - (snmp_impl.h): Turn on old CMU debugging statments with --enable-debugging.
+
+1996-10-03 08:05 whardake
+
+ * agent/snmp_agent.c:
+
+ - (snmp_agent.c):
+ - Make agent properly check snmpset exit codes and use them (on COMMIT).
+
+1996-10-01 08:28 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (config*, read_config.c):
+ - Check for mntent.h and include it.
+ - Check for /etc/mnttab or /etc/mtab and use appropriately.
+ - (read_config.c):
+ - pick getmntent over getfsfile if both are available.
+ - debug cleanup (ofile -> stderr, check for DODEBUG instead of const var).
+
+1996-10-01 07:30 whardake
+
+ * snmplib/: parse.c, parse.h:
+
+ - (parse.c, parse.h): From Joe Marzot:
+ - allows the CMU lib to retain the TC information associated with a
+ particular object. In particular this allows DisplayStrings to be
+ differentiated from OctetStrings when they are looked up in the
+ Mib Tree.
+
+1996-09-25 05:14 whardake
+
+ * agent/snmp_var_route.c:
+
+ - (snmp_var_route.c): freebsd2 typecast.
+
+1996-09-24 08:16 whardake
+
+ * agent/snmp_var_route.c:
+
+ - (snmp_var_route.c): typo fixing a typo (sigh..).
+
+1996-09-24 08:02 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): Moved a variable declairation.
+
+1996-09-24 07:59 whardake
+
+ * agent/: snmp_var_route.c, snmp_vars.c:
+
+ - (snmp_var_route.c, snmp_vars.c): typos.
+
+1996-09-24 07:54 whardake
+
+ * config.h.in, configure, configure.in,
+ snmplib/snmp_api.c, snmplib/snmp_client.c:
+
+ - (config*, snmp_api.c, snmp_client.c): Added sys/select.h for AIX.
+
+1996-08-30 02:51 whardake
+
+ * ChangeLog:
+
+ - (ChangeLog): More minor bugs listed
+
+1996-08-30 02:49 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): removed malloc prototype due to conflictions.
+
+1996-08-30 01:15 whardake
+
+ * README:
+
+ - (README): Updated for 3.1.0.1
+
+1996-08-30 00:34 whardake
+
+ * sedscript.in:
+
+ version tag ( 3.1.0.1 )
+
+1996-08-30 00:34 whardake
+
+ * ChangeLog, NEWS:
+
+ - (NEWS, ChangeLog): Updated for 3.1.0.1
+
+1996-08-30 00:24 whardake
+
+ * apps/Makefile.in:
+
+ - (apps/Makefile.in): Added kernel_sunos5.o to snmptrap for getKstat.
+
+1996-08-30 00:23 whardake
+
+ * apps/snmptrap.c:
+
+ - (snmptrap.c): patch screwed up.
+
+1996-08-30 00:22 whardake
+
+ * configure.in, configure:
+
+ - (configure, configure.in):
+ - removed -Xs flag for gcc on solaris.
+ - logfile checks for existance of /var/log and /usr/adm.
+
+1996-08-29 07:29 whardake
+
+ * README, TODO:
+
+ - Changed my email address to my new one.
+
+1996-08-29 07:20 whardake
+
+ * config.h.in, configure, configure.in,
+ agent/snmp_vars.c:
+
+ - (autoconf*, snmp_vars.c): Removed some solaris ifdefs.
+
+1996-08-29 07:03 whardake
+
+ * apps/snmpwalk.c:
+
+ - (snmpwalk.c): Removed SVR4 ifdefs
+
+1996-08-29 06:58 whardake
+
+ * apps/snmpstatus.c:
+
+ - (snmpstatus.c): Patch from Trevor Bourget <tbourget@qualcomm.com>
+ - malloc sysdesc instead of assuming < 128 bytes.
+
+1996-08-29 06:08 whardake
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - gcc warnings NULL -> 0
+
+1996-08-29 06:07 whardake
+
+ * snmplib/parse.c:
+
+ - (parse.c): Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - save mib descriptions for snmptranslate and other apps that need it.
+
+1996-08-29 06:06 whardake
+
+ * snmplib/mib.c:
+
+ - (mib.c): Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - prototypes for gcc warnings
+
+1996-08-29 06:06 whardake
+
+ * snmplib/asn1.c:
+
+ - (asn1.c): Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - uchar(s) can't be less than 0.
+
+1996-08-29 06:03 whardake
+
+ * man/: Makefile.in, snmptrap.1:
+
+ - (man/snmptrap.1): added by Niels Baggesen <recnba@mediator.uni-c.dk>
+
+1996-08-29 05:59 whardake
+
+ * apps/: snmpbulkwalk.c, snmpget.c, snmpgetnext.c
+, snmpset.c, snmptranslate.c, snmptrap.c,
+ snmptrapd.c, snmpwalk.c:
+
+ - (apps/*.c): Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - set exit codes of 0 for all apps.
+ - Removed SVR4 #ifdefs.
+ - Greatly improved snmptrap.
+
+1996-08-27 01:04 whardake
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (autoconf*):
+ - FreeBSD additions.
+ - New kernel location: /kernel (ick).
+ - Log file default intelligently checks for /var/log and /usr/adm.
+ - Checks for getloadavg().
+
+1996-08-27 01:00 whardake
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): More warped FreeBSD changes
+
+1996-08-27 00:38 whardake
+
+ * agent/snmp_var_route.c:
+
+ - (snmp_var_route.c): FreeBSD specific changes.
+
+1996-08-27 00:01 whardake
+
+ * apps/snmptrap.c:
+
+ - (snmptrap.c):
+ - FreeBSD specific changes.
+ - more autoconf complete: paths to libraries and kernel location.
+
+1996-08-26 23:47 whardake
+
+ * apps/snmptrapd.c:
+
+ - (snmptrapd.c): Fix byte order problem (convert to network before sending).
+
+1996-08-26 07:57 whardake
+
+ * agent/: event.c, kernel.c, route_write.c:
+
+ - (event.c, kernel.c, route_write.c): FreeBSD modifications
+
+1996-08-26 07:55 whardake
+
+ * snmplib/snmp_api.c:
+
+ - (snmp_api.c): Fixed a gcc/FreeBSD optimization bug (stupid compiler)
+
+1996-08-26 01:37 whardake
+
+ * ece-mib.def:
+
+ - (ece-mib.def): commas out of place.
+
+1996-08-26 01:37 whardake
+
+ * TODO:
+
+ - (TODO) Extra mib parsing ideas added.
+
+1996-08-26 01:36 whardake
+
+ * NEWS:
+
+ - (NEWS) Typo, extra quotation mark.
+
+1996-08-21 06:30 hardaker
+
+ * local/passtest:
+
+ Added passtest!
+
+1996-05-24 15:46 hardaker
+
+ * sedscript.in:
+
+ version tag ( 3.1 )
+
+1996-05-24 15:44 hardaker
+
+ * COPYING:
+
+ copyright update
+
+1996-05-24 15:43 hardaker
+
+ * ChangeLog, NEWS:
+
+ - (ChangeLog, NEWS): 3.1 release info update.
+
+1996-05-24 15:29 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (snmp_vars.c): removed some ifdef requirements.
+
+1996-05-24 15:28 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (accconfig.h, config.h.in): #ifdef typos
+
+1996-05-24 14:02 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config*): check for memmove before you define it.
+
+1996-05-24 13:55 hardaker
+
+ * apps/snmpnetstat/: if.c, route.c:
+
+ - (if.c, route.c): cast returns from index to char *.
+
+1996-05-24 13:54 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in): define memmove if not defined and memcpy is.
+
+1996-05-24 13:13 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ - (snmpd.conf.5.def): note on creating comments added.
+
+1996-05-24 13:10 hardaker
+
+ * snmplib/parse.c:
+
+ - (parse.c): declarations cleanup
+
+1996-05-24 13:09 hardaker
+
+ * mibII.txt:
+
+ - (mibII.txt): removed ;s at the end of the BEGIN lines.
+
+1996-05-24 13:08 hardaker
+
+ * configure.in, configure, config.h.in:
+
+ - (config*): Check for sys/mnttab.h
+
+1996-05-24 13:08 hardaker
+
+ * EXAMPLE.conf.def:
+
+ - (EXAMPLE.conf.def): minor example file changes.
+
+1996-05-24 12:39 hardaker
+
+ * README:
+
+ - (README): Added a thanks section.
+
+1996-05-24 12:23 hardaker
+
+ * snmplib/parse.c:
+
+ - (snmplib/parse.c): parsing fixes from Mike Perik <mikep@crt.com>
+
+1996-05-23 17:47 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (config*): check for getmntent.
+
+1996-05-23 17:09 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (config*, extensible.c): fixed disk checks on Solaris and alpha's
+ - use statvfs over fstab if both present.
+
+1996-05-23 16:27 hardaker
+
+ * snmplib/: acl.c, party.c, view.c:
+
+ - (acl.c, party.c): include stdio.h
+
+1996-05-23 14:56 hardaker
+
+ * apps/snmpnetstat/if.c:
+
+ - (if.c): type casting bugs.
+
+1996-05-23 14:44 hardaker
+
+ * snmplib/: acl.c, party.c, view.c:
+
+ - (acl.c, party.c, view.c): removed NULL defines.
+
+1996-05-23 14:43 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.h.in): Don't define random if it already exists.
+
+1996-05-22 12:55 hardaker
+
+ * apps/snmpnetstat/if.c:
+
+ - (apps/snmpnetstat/if.c): Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - reworked the way snmpnetstat -i works.
+
+1996-05-22 12:49 hardaker
+
+ * agent/: kernel_sunos5.c, snmp_vars.c:
+
+ - (agent/kernel_sunos5.c, snmp_vars.c,
+ agent/extensible/extensible.c,readconfig.c,snmp_vars.c):
+ - Patch from Niels Baggesen <recnba@mediator.uni-c.dk>:
+ - finally nailed that missing initialization that gave problems
+ with the AT subtree
+ - I also implemented the disk part of the extensibility in the
+ attached patch.
+
+1996-05-22 08:50 hardaker
+
+ * config.guess, configure, install-sh,
+ mkinstalldirs:
+
+ - (config.guess, configure, install-sh, mkinstalldirs): Autoconf-2.10
+
+1996-05-22 08:50 hardaker
+
+ * man/Makefile.in:
+
+ - (man/Makefile.in) Updated the way sedscript is used.
+
+1996-05-15 12:35 hardaker
+
+ * sedscript.in:
+
+ - (sedscript.in) Fixed a horrible typo. P -> PREFIX
+
+1996-05-15 12:23 hardaker
+
+ * apps/snmpnetstat/if.c:
+
+ - (apps/snmpnetstat/if.c) removed & in front of array passed as arg.
+
+1996-05-15 12:03 hardaker
+
+ * README:
+
+ - (README) Added a note (pointer to docs) on the agent's extensiblity.
+
+1996-05-15 12:00 hardaker
+
+ * INSTALL:
+
+ - (INSTALL) make install as root.
+
+1996-05-15 09:51 hardaker
+
+ * sedscript.in:
+
+ version tag ( 3.1.A1 )
+
+1996-05-15 09:50 hardaker
+
+ * agent/kernel_sunos5.c:
+
+ - (agent/kernel_sunos5.c) patch mistake.
+
+1996-05-15 09:29 hardaker
+
+ * COPYING, README, TODO:
+
+ - (COPYING, README, TODO) Release docs updated.
+
+1996-05-15 09:07 hardaker
+
+ * EXAMPLE.conf.def, man/snmpd.conf.5.def:
+
+ - (EXAMPLE.conf.def, man/snmpd.conf.5.def): documented pass thru mibs.
+
+1996-05-15 09:06 hardaker
+
+ * Makefile.in, sedscript.in:
+
+ - (Makefile.in,sedscript.in) Added PREFIX to the sedscript.
+
+1996-05-15 09:05 hardaker
+
+ * .cvsignore, agent/.cvsignore, apps/.cvsignore,
+ local/.cvsignore:
+
+ - (*/.cvsignore) ignore file update.
+
+1996-05-15 09:01 hardaker
+
+ * agent/: kernel_sunos5.c, kernel_sunos5.h:
+
+ - (agent/kernel_sunos5.c) Patch from "Dan A. Dickey" <ddickey@transition.com>
+ - Better caching algorithm for improved speed.
+
+1996-05-15 08:59 hardaker
+
+ * apps/snmpnetstat/if.c:
+
+ - (agent/extensible/pass.c) Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - Implemented missing parts of interface address and network output (-i)
+
+1996-05-13 15:59 hardaker
+
+ * snmplib/snmp_impl.h:
+
+ - (snmplib/snmp_impl.h): Change RWRITE to include Write for V2 bits.
+
+1996-05-13 15:58 hardaker
+
+ * agent/: snmp_agent.c, snmp_vars.c:
+
+ - (agent/snmp_agent.c, agent/snmp_vars.c, agent/extensible/extensible.c):
+ - Bug fix: GLOBALSECURITY bug: save rightmost two bits in acl.
+
+1996-05-10 18:16 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/Makefile.in,
+ agent/kernel_sunos5.c, agent/snmp_vars.c,
+ agent/snmpd.c, apps/Makefile.in, apps/snmpstatus.c
+, apps/snmptrapd.c, apps/snmpnetstat/Makefile.in,
+ apps/snmpnetstat/if.c, apps/snmpnetstat/main.c,
+ man/Makefile.in, man/snmpstatus.1, snmplib/parse.c
+:
+
+ - (many): Mereged baggesen-3-0-7-2 branch into main trunk.
+
+1996-05-10 17:06 hardaker
+
+ * man/snmpstatus.1:
+
+ file snmpstatus.1 was initially added on branch Baggesen-3-0-7-2.
+
+1996-05-10 17:05 hardaker
+
+ * apps/snmpstatus.c:
+
+ file snmpstatus.c was initially added on branch Baggesen-3-0-7-2.
+
+1996-05-10 10:27 hardaker
+
+ * agent/kernel_sunos5.c:
+
+ - (kernel_sunos5.c): A patch to fix a virtual interface problem.
+ - patch supplied by "Dan A. Dickey" <ddickey@transition.com>
+
+1996-05-09 16:13 hardaker
+
+ * configure, configure.in, agent/snmp_vars.c,
+ agent/snmpd.c, snmplib/mib.c, snmplib/snmp_client.c
+:
+
+ - (configure.in): Solaris specific cpp flags added for SUNspro's cpp.
+ - (agent/{snmp_vars,snmpd}.c,agent/extensible/{extensible,misc,pass}.c,
+ snmplib/{mib,snmp_client}.c):
+ - Cleaned up prototypes to match more carefully (with Solaris's spro cc).
+
+1996-05-09 13:32 hardaker
+
+ * acconfig.h, config.h.in, agent/Makefile.in,
+ agent/snmp_vars.c:
+
+ - (acconfig.h,agent/{Makefile,snmp_vars.c},agent/extensible/many):
+ - Added support for passthru mibs. Total control is handed to exec's.
+
+1996-05-09 13:27 hardaker
+
+ * configure:
+
+ - (acconfig.h, configure.in, snmplib/Makefile.in)
+ - Added a check for various random functions.
+ - Included another ifdef to ensure no #define loops occur with str/index fns.
+
+1996-05-09 13:24 hardaker
+
+ * apps/snmpset.c:
+
+ - (apps/snmpset.c) Added '.' as a delimiter for decimal encoded strings.
+
+1996-05-03 14:40 hardaker
+
+ * apps/snmptrap.c:
+
+ - (apps/snmptrap.c) Added #include<sys/sockio.h>
+
+1996-05-03 14:37 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (agent/snmp_vars.c) Solaris fix for interfaces.
+ - From Dan A. Dickey <ddickey@transition.com>
+
+1996-05-03 14:35 hardaker
+
+ * agent/: snmp_var_route.c, snmp_vars.c:
+
+ - (agent/snmp_var_route.c,snmp_vars.c)
+ - Changed the interface counter to a short for all architectures (bus err)
+ - Undefed a function that is never used.
+
+1996-05-03 14:33 hardaker
+
+ * acconfig.h, configure.in, snmplib/Makefile.in
+:
+
+ - (acconfig.h, configure.in, snmplib/Makefile.in)
+ - Added a check for various random functions.
+ - Included another ifdef to ensure no #define loops occur with str/index fns.
+
+1996-05-01 14:59 hardaker
+
+ * sedscript.in:
+
+ version tag ( 3.0.7.2 )
+
+1996-05-01 14:59 hardaker
+
+ * ChangeLog, NEWS:
+
+ - (ChangeLog,NEWS) version update 3.0.7.2
+
+1996-05-01 14:56 hardaker
+
+ * acconfig.h:
+
+ - (acconfig.h,agent/extensible/mibdefs.h): removed coments/spaces from defines.
+
+1996-05-01 14:37 hardaker
+
+ * sedscript.in:
+
+ - (sedscript.in) forgot NETBSD1ID def.
+
+1996-05-01 14:37 hardaker
+
+ * local/snmpcheck.def:
+
+ - (local/snmpcheck) Tk-b10 fixes.
+
+1996-05-01 14:35 hardaker
+
+ * agent/route_write.c:
+
+ - (agent/route_write.c,agent/extensible/extensible.c):
+ - netbsd1.1B specific fixes: clash with sys_errlist and rt_dst defines.
+
+1996-05-01 13:55 hardaker
+
+ * man/: snmpd.1.def, snmpd.conf.5.def:
+
+ - (man/snmpd.1.def,snmpd.conf.5.def) .C -> .B, to increase nroff portability.
+
+1996-05-01 13:54 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (configure*, agent/extensible/{read_config,extenisble}.c):
+ - configurified (new word) some of Niels' changes and the bcopy/memmove stuff.
+
+1996-05-01 12:37 hardaker
+
+ * agent/: kernel.c, kernel_sunos5.c, snmp_vars.c
+, snmpd.c:
+
+ - (many) Fixes for Solaris (2.5) submitted by
+ Niels Baggesen <recnba@mediator.uni-c.dk>:
+ "Some are my own, others are from Yuri Rabover who originally
+ created the patch. Some of this is there to eliminate the
+ dependency on the ucblib compatibility stuff, some is "cosmetic",
+ but it also fixes a serious problem in the agent, where walking
+ the mib tree can loop endlessly if you have multiple network
+ interfaces."
+
+1996-04-25 12:19 hardaker
+
+ * sedscript.in:
+
+ version tag ( 3.0.7.1 )
+
+1996-04-25 12:18 hardaker
+
+ * ChangeLog, acconfig.h, config.h.in:
+
+ - (ChangeLog, acconfig.h, config.h.in) Defined DEBUGP if DODEBUG is not defined.
+
+1996-04-24 14:54 hardaker
+
+ * sedscript.in:
+
+ version tag ( 3.0.7 )
+
+1996-04-24 14:53 hardaker
+
+ * ChangeLog, NEWS:
+
+ - (ChangeLog,NEWS) update for 3.0.7
+
+1996-04-24 14:37 hardaker
+
+ * local/snmpcheck.def:
+
+ - (local/snmpcheck) new pref: don't pop forward on new problems.
+
+1996-04-24 13:25 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in, agent/snmp_var_route.c:
+
+ - (config*,agent/snmp_var_route.c) config checking for rtentry.rt_next
+
+1996-04-24 11:55 hardaker
+
+ * agent/snmp_var_route.c:
+
+ - (agent/snmp_var_route.c) @#$%ing solaris
+
+1996-04-24 11:46 hardaker
+
+ * agent/snmp_var_route.c:
+
+ - (agent/snmp_var_route.c) Checked for sys/mbuf for determining rtentry.rt_next
+
+1996-04-24 09:07 hardaker
+
+ * INSTALL:
+
+ - (INSTALL) updated
+
+1996-04-24 09:00 hardaker
+
+ * README:
+
+ - (README) updated
+
+1996-04-24 08:54 hardaker
+
+ * man/.cvsignore:
+
+ - (man/.cvsignore) added snmpd.1
+
+1996-04-24 08:53 hardaker
+
+ * acconfig.h, config.h.in, ece-mib.def,
+ ov/UCD-fields, ov/oid_to_sym.in, ov/oid_to_type.in
+:
+
+ - (acconfig.h, config.h.in, ece-mib.def, ov/*) Added NetBSD to sys-OID returned.
+
+1996-04-24 08:44 hardaker
+
+ * agent/: snmp_var_route.c, snmp_vars.c:
+
+ - (agent/snmp_var_route.c,snmp_vars.c) more config files for NetBSD.
+ - (agent/snmp_vars.c) removed arp tables for netbsd.
+
+1996-04-24 08:38 hardaker
+
+ * agent/alarm.c:
+
+ - (agent/alarm.c) Fixed some define naming conflicts for NetBSD (timeradd()).
+
+1996-04-24 08:37 hardaker
+
+ * agent/Makefile.in:
+
+ - (agent/Makefile.in) Forgot a quote. (why hasn't this appeared before?)
+
+1996-04-24 08:36 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (configure.in) More header file checks (vm/vm.h (+ others) and ufs/ffs/fs.h)
+
+1996-04-16 18:08 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c) Added fflush calls after printing packet dumps
+
+1996-04-16 09:48 hardaker
+
+ * agent/: route_write.c, snmp_var_route.c:
+
+ - (agent/{route_write.c,snmp_var_route.c}) OSF3.2 specific changes. arg.
+
+1996-04-16 09:47 hardaker
+
+ * configure, configure.in:
+
+ - (configure) I forgot DMEM_LOC needs to be #undef'ed if not found
+
+1996-04-15 14:36 hardaker
+
+ * agent/snmpd.c:
+
+ - (agent/snmpd.c) Fixed 2 gettimeofday calls -- added a NULL timezone ptr.
+
+1996-04-15 14:11 hardaker
+
+ * Makefile.in, aclocal.m4, configure,
+ configure.in:
+
+ - (configure) New command line option: --with-defaults. Don't prompt the user.
+ - (configure) bug fixes: wasn't quoting kernel and dmem location.
+ - (configure) gcc cpp requires -x c to accept .in file suffix.
+
+1996-04-15 12:53 hardaker
+
+ * acconfig.h, config.h.in, configure,
+ configure.in:
+
+ - (configure) New command line option: --enable-debugging. Turns on debugging.
+ - (configure) Fixes for type checking of 4.4 rtentry structures on alphas.
+
+1996-04-12 16:48 hardaker
+
+ * acconfig.h, aclocal.m4, config.h.in,
+ configure, configure.in, ece-mib.def,
+ sedscript.in, agent/route_write.c,
+ agent/snmp_var_route.c, ov/UCD-fields,
+ ov/oid_to_sym.in, ov/oid_to_type.in,
+ ov/bitmaps/UCD.fields:
+
+ - (snmp_var_route.c)
+ - Changed nlist warnings to only print if DODEBUG is defined in config.h
+ - (many) Added support for hppa1.1-hp-hpux10.01
+ - totally! redid the routing tables for BSD 4.4 derived systems
+ (alpha, hpux10.01+, netbsd) since hpux10 doesn't have 4.3 compat structs.
+ - (ece-mib.def) Capitalization problem.
+ - (configure.in)
+ - Cleaned up kernel checking
+ - Started using a autoconf 2.8 feature to check for cache values.
+
+1996-04-12 14:51 hardaker
+
+ * agent/snmp_vars.c:
+
+ - (agent/snmp_vars.c, agent/extensible.c)
+ - Changed nlist warnings to only print if DODEBUG is defined in config.h
+
+1996-04-05 16:19 hardaker
+
+ * man/Makefile.in:
+
+ - (man/Makefile.in) Added a 'clean' definition to the Makefile.
+
+1996-04-05 16:15 hardaker
+
+ * snmplib/asn1.c:
+
+ - (snmplib/asn1.c) removed a required 'unix' define surrounding a header file.
+
+1996-04-05 16:12 hardaker
+
+ * configure:
+
+ - (configure) autoconf-2.7 -> autoconf-2.9
+
+1996-04-05 16:11 hardaker
+
+ * local/snmpcheck.def:
+
+ - (local/snmpcheck.def) Tk-b8 => Tk-b10 changes
+
+1996-03-11 15:58 hardaker
+
+ * ChangeLog:
+
+ small ChangeLog update
+
+1996-03-11 15:56 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - (snmplib/snmp_api.c): fixed a timeout bug caused by architectures
+ with an unsigned timeval.tv_sec value.
+ - Thanks goes to Giovanni S. Marzot <gmarzot@baynetworks.com> for
+ the patch!
+
+1996-03-11 15:41 hardaker
+
+ * sedscript.in:
+
+ version tag ( 3.0.6 )
+
+1996-03-11 15:41 hardaker
+
+ * ChangeLog, NEWS:
+
+ - (ChangeLog/NEWS): updated for 3.0.6
+
+1996-03-11 15:39 hardaker
+
+ * README:
+
+ - (README): more clean up and added reference to the ucd-snmp mailing list.
+
+1996-03-11 15:17 hardaker
+
+ * README:
+
+ - (README): cleaned up, re-arranged, shortened (sections moved to man/* docs).
+
+1996-03-11 15:17 hardaker
+
+ * man/Makefile.in, man/snmpd.1.def,
+ man/snmpd.conf.5.def, sedscript.in:
+
+ - (man/{Makefile.in,snmpd.1.def,snmpd.conf.5.def},versiontag,sedscript.in):
+ - cleaned up documentation more and added the version number to the trailers.
+
+1996-03-11 13:37 hardaker
+
+ * agent/: snmp_var_route.c, snmp_vars.c:
+
+ - (snmp_var_route.c, snmp_vars.c, extensible.c): commented out nlist warnings.
+
+1996-03-08 10:31 hardaker
+
+ * snmplib/snmp_api.h:
+
+ - (snmplib/snmp_api.h) fixed a fix that shouldn't have been fixed.
+
+1996-03-08 10:31 hardaker
+
+ * snmplib/snmp_client.c:
+
+ - (snmplib/snmp_client.c) Check if variable content is NULL before using.
+
+1996-03-06 16:58 hardaker
+
+ * snmplib/mib.c:
+
+ - (snmplib/mib.c) printed values for timeticks are no longer negative.
+
+1996-03-06 16:38 hardaker
+
+ * ece-mib.def:
+
+ - (ece-mib.def)
+ - Changed capitalization schemes to be mosy compliant.
+ - Made the memory mib SYNTAX point to the Memory sequence like it should.
+
+1996-03-06 09:09 hardaker
+
+ * agent/snmpd.c:
+
+ - (agent/snmpd.c) Added O_TRUNC to the logfile open() call.
+
+1996-02-21 16:24 hardaker
+
+ * snmplib/snmp_api.h:
+
+ - (snmplib/snmp_api.h)
+ - Changed trap_type & specific_type to long from int for 64 bit architectures.
+ - suggested by francus@metsny.delphi.com.
+
+1996-02-21 16:15 hardaker
+
+ * apps/: .cvsignore, Makefile.in, snmptrap.c:
+
+ - (apps/Makefile.in, apps/snmptrap.c)
+ - Added apps/snmptrap
+ - code taken from 2.0.1 and submitted to me by francus@metsny.delphi.com.
+ - I have yet to test it.
+
+1996-02-21 16:12 hardaker
+
+ * Makefile.in, sedscript.in, man/.cvsignore,
+ man/Makefile.in, man/snmpd.conf.5.def:
+
+ - (Makefile.in, sedscript.in, man/Makefile.in, man/snmpd.conf.5.def)
+ - Added the beginnings of a snmpd.conf manual page.
+
+1996-02-16 16:32 hardaker
+
+ * acconfig.h, config.h.in, agent/snmp_agent.c:
+
+ - (acconfig.h,config.h.in, agent/snmp_agent.c, agent/extensible/read_config.c)
+ - .conf file addition: "community N STRING" to change community names
+
+1996-02-12 14:28 hardaker
+
+ * acconfig.h, config.h.in:
+
+ - (acconfig.h, config.hin, agent/extensible/misc.c)
+ - The agent now sets an alarm to restart rather than doing at the
+ snmpset time to return a value to the snmpset request.
+
+1996-02-09 17:04 hardaker
+
+ * .cvsignore, Makefile.in, acconfig.h,
+ config.h.in, configure, configure.in,
+ ece-mib.def, sedscript.in, agent/snmp_vars.c,
+ ov/.cvsignore, ov/Makefile.in, ov/README,
+ ov/UCD-Computer, ov/UCD-fields, ov/oid_to_sym.in,
+ ov/oid_to_type.in, ov/bitmaps/UCD.20.m,
+ ov/bitmaps/UCD.20.p, ov/bitmaps/UCD.26.m,
+ ov/bitmaps/UCD.26.p, ov/bitmaps/UCD.32.m,
+ ov/bitmaps/UCD.32.p, ov/bitmaps/UCD.38.m,
+ ov/bitmaps/UCD.38.p, ov/bitmaps/UCD.44.m,
+ ov/bitmaps/UCD.44.p, ov/bitmaps/UCD.50.m,
+ ov/bitmaps/UCD.50.p, ov/bitmaps/UCD.fields:
+
+ - Better OpenView support
+ - Returns different sysObjectID's for each architecture
+ - Added a 'ov' directory for OpenView support files
+ - currently contains necessary files to support a UCD bitmap file
+ for hosts using the ucd-snmp agent. See the ov/README file for details.
+
+1996-01-26 08:25 hardaker
+
+ * configure, configure.in:
+
+ - The Solaris 2.5 kernel has moved to /kernel/genunix
+ - Thanks goes to pommier@volnay.stortek.com (Vincent Pommier (Toulouse))
+
+1996-01-24 16:36 hardaker
+
+ * Makefile.in, acconfig.h, config.h.in,
+ ece-mib.def, sedscript.in:
+
+ - (Makefile, config.h, ece-mib.*, sedscript.in)
+ - changed the way mib.txt is built
+ - split the command into two parts to build a ece-mib.txt as well
+ - added a new ObjectID addition to ece-mib.txt
+ - DEFMAXLOADAVE -> DREMOVEMEEFMAXLOADAVE
+
+1996-01-24 16:33 hardaker
+
+ * agent/snmpd.c:
+
+ - Patch from Dave Shield <D.T.Shield@csc.liv.ac.uk>
+ - fixes -p PORT command line option to actually use the requested port.
+ - fixes the -l LOGFILE command line option to actually use it.
+
+1996-01-24 16:31 hardaker
+
+ * agent/snmp_vars.c:
+
+ - Returning EXTENSIBLEDOTMIB.AGENTID as the new objectid
+
+1996-01-22 17:30 hardaker
+
+ * ChangeLog, NEWS:
+
+ - (ChangeLog,NEWS)
+ - Preped for 3.0.5 release
+
+1996-01-22 17:23 hardaker
+
+ * local/snmpcheck.def:
+
+ - (local/snmpcheck)
+ - added agent controls: restart, updateconfig, clearcache.
+ - removed an old debugging printf.
+ - ctrl-f => fixall.
+ - Added keyboard accelerators to the associated menu items.
+ - Made highlightThickness a global parameter via $window->option('add').
+ - Added a entry box to the executable commands with the command to run.
+
+1996-01-22 17:18 hardaker
+
+ * local/Makefile.in:
+
+ - (local/Makefile.in) Added a chmod to make the snmpcheck script executable
+
+1996-01-22 16:27 hardaker
+
+ * Makefile.in, acconfig.h, config.h.in,
+ agent/snmp_vars.c:
+
+ - (acconfig.h, agent/snmp_vars.c, agent/extensible/*.c)
+ - Added new defines to turn on/off sections of the extensible mib.
+ - This also fixes the mib.txt file definitions if something is turned off.
+ - (Makefile.in) removed ${srcdir} from the front of stamp-h.in
+
+1996-01-19 17:31 hardaker
+
+ * Makefile.in, configure, configure.in,
+ remove-files:
+
+ - (configure*)
+ - updated to autoconf v2.7
+ - Hopefully now using correct 'make' definitions
+
+1995-12-28 15:24 hardaker
+
+ * Makefile.in, local/Makefile.in:
+
+ - (Makefile.in, local/Makefile.in) Minor cleanups.
+
+1995-12-28 12:14 hardaker
+
+ * ChangeLog, EXAMPLE.conf.def:
+
+ - (ChangeLog,EXAMPLE.conf.def) spell check (sigh)
+
+1995-12-28 12:09 hardaker
+
+ * .cvsignore, ChangeLog, EXAMPLE.conf.def,
+ Makefile.in, NEWS, README, sedscript.in:
+
+ - Created a EXAMPLE.conf file for example usage.
+
+1995-12-28 10:44 hardaker
+
+ * ChangeLog, NEWS:
+
+ - (ChangeLog, NEWS): Updated these for 3.0.4 release.
+
+1995-12-28 10:30 hardaker
+
+ * local/Makefile.in:
+
+ - (local/Makefile.in): Never finished the install item.
+
+1995-12-28 10:22 hardaker
+
+ * Makefile.in, TODO, acconfig.h, config.h.in
+, configure, configure.in, ece-mib.def,
+ sedscript.in, local/.cvsignore, local/Makefile.in
+, local/snmpcheck.def, TODO:
+
+ - Added a sedscript which is built from config.h and agent/extensible/mibdefs.h
+ - used to dynamically build mib.txt and local/snmpcheck.
+
+1995-12-28 10:01 hardaker
+
+ * .cvsignore:
+
+ - Added sedscript to the .cvsignore file.
+
+1995-12-20 15:56 hardaker
+
+ * agent/snmp_var_route.c:
+
+ - Found and fixed a memory leak in the routing table mib.
+
+1995-12-20 09:53 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - snmp_open calls getservbyname only once now, at the request of Gary
+ Hayward <gah@dirac.bellcore.com>.
+
+1995-12-05 15:01 hardaker
+
+ * local/snmpcheck.def:
+
+ - (snmpcheck)
+ - New flag: -d, don't start checking anything. Just bring up interface.
+ - check for blank output of snmpget before parsing with s///g
+ constructs.
+
+1995-12-05 14:57 hardaker
+
+ * config.h.in, configure, configure.in:
+
+ - (configure*) added AC_TYPE_PID_T to the configure checks
+
+1995-12-01 16:20 hardaker
+
+ * local/snmpcheck.def:
+
+ - local/snmpcheck: *new features*
+ - handles failed snmpwalk/get/sets much more gracefully now
+ - new preference: You can pick what types of problems to check for
+ - -f on the command line only checks for fixable problems
+ - no longer ping::echos hosts before checking them
+ - instead relies on 'No Response' type replies from snmpwalk/get to
+ determine if a host is up.
+ - ping the host is still an option (through the command line and menus)
+ - converted from Tk-b4 to Tk-b8
+ - Added a logging window for debugging and tracking of actions.
+ - new command line options: -V NUM initial log verbosity level
+ -L show the log window at startup
+ - Now translates mib numbers into more reasonable names
+
+1995-11-20 16:10 hardaker
+
+ * local/trapnotif:
+
+ - (trapnotif) Logs no-responce errors.
+ - (trapnotif) Better string checking (quotes all variables now)
+
+1995-11-20 16:09 hardaker
+
+ * config.guess, config.sub, configure,
+ mkinstalldirs:
+
+ - (all autoconf built files) Updated everything to autoconf 2.5
+
+1995-11-20 16:08 hardaker
+
+ * config.h.in:
+
+ - (config.h.in) Check for -lelf for solaris 2.3 and younger
+
+1995-11-20 16:07 hardaker
+
+ * configure.in:
+
+ - (configure.in) Check for -lelf for solaris 2.3 and younger
+ - (configure.in) More solaris specifics: -DSVR4
+ - (configure.in) Caches initial prompt in the configure script so you
+ won't be bugged twice by the initial question.
+
+1995-11-20 16:05 hardaker
+
+ * TODO:
+
+ - (TODO) Find and fix memory leak sometime
+
+1995-11-20 16:04 hardaker
+
+ * README:
+
+ - (README) Added pointer to this file via ftp
+
+1995-10-17 17:27 hardaker
+
+ * ChangeLog:
+
+ ChangeLog update
+
+1995-10-17 17:10 hardaker
+
+ * remove-files:
+
+ remove-files needs to 'cd' to the correct directory first
+
+1995-10-17 16:57 hardaker
+
+ * remove-files:
+
+ added the remove-files export command
+
+1995-10-16 17:23 hardaker
+
+ * configure.in:
+
+ - (configure) One last echo -n vs \c fix
+
+1995-10-16 16:43 hardaker
+
+ * apps/: snmpbulkwalk.c, snmpget.c, snmpgetnext.c
+, snmpset.c, snmptest.c, snmptrapd.c,
+ snmpwalk.c:
+
+ - (apps) all apps were still looking in /etc/ for .conf files
+
+1995-10-16 16:41 hardaker
+
+ * aclocal.m4, configure:
+
+ - (configure) fixed \c vs -n dependency
+
+1995-10-16 16:21 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c) was still looking in /etc for two .conf files.
+
+1995-10-16 15:55 hardaker
+
+ * TODO:
+
+ - Added info request to bottom of TODO
+
+1995-10-16 15:55 hardaker
+
+ * ChangeLog:
+
+ - ChangeLog update
+
+1995-10-16 15:05 hardaker
+
+ * TODO:
+
+ - (TODO) marked install as finished and solaris port as close
+
+1995-10-16 15:01 hardaker
+
+ * INSTALL, Makefile.in, README,
+ agent/Makefile.in, apps/Makefile.in, man/Makefile.in
+, snmplib/Makefile.in:
+
+ - (Makefiles) make install echos what its doing in a more clear fashion
+ - (INSTALL) added better instructions to the INSTALL file.
+ - (README) minor wording changes
+
+1995-10-16 13:01 hardaker
+
+ * Makefile.in, NEWS, configure, configure.in
+, agent/Makefile.in, apps/Makefile.in,
+ man/.cvsignore, man/Makefile.in:
+
+ - (Makefiles) Fairly decent 'make install' now possible. Installs
+ into the directory specified by --prefix for the ./configure script.
+ - (extensible.c) config file re-location: now uses the SNMPLIBPATH
+ defined loosely as $(prefix)/lib/snmp/.
+
+1995-10-13 15:44 hardaker
+
+ * TODO, acconfig.h, config.h.in, configure
+, configure.in, stamp-h, agent/snmpd.c,
+ snmplib/mib.c:
+
+ - (snmpd.c) Added -p port to --help output
+ - (config) Setup to use --prefix to look for config files.
+
+1995-10-11 17:33 hardaker
+
+ * Makefile.in, acconfig.h, aclocal.m4,
+ config.h.in, configure, configure.in,
+ agent/Makefile.in, apps/Makefile.in:
+
+ - The configure script now prompts for important values to be put in
+ config.h. Some things need to use $(prefix) instead however.
+ - (Makefile.in, agent/Makefile.in, apps/Makefile.in)
+ + linking to ../snmplib/libsnmp.a instead of ../lib/libsnmp.a to
+ remove install requirement.
+ + put ../lib/libsnmp.a in application
+
+1995-10-06 16:41 hardaker
+
+ * NEWS, TODO:
+
+ - (NEWS/-TODO) -h/--help, -v/--version command line options
+
+1995-10-06 16:40 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c) Usage of --help and --version should work now... GNU standard.
+
+1995-10-06 16:32 hardaker
+
+ * snmplib/: Makefile.in, parse.c, snmp.c:
+
+ - (parse.c, snmp.c) added config.h to the list of includes.
+
+1995-10-06 16:32 hardaker
+
+ * agent/snmpd.c:
+
+ - (snmpd.c) Added two new flags:
+ -h for help
+ -v for version information
+
+1995-10-06 11:37 hardaker
+
+ * README:
+
+ - (README) Moved INSTALLATION instructions to INSTALL
+ Changed listing of supported architectures
+ Updated AVAILABILITY section
+
+1995-10-06 11:26 hardaker
+
+ * configure.in, configure:
+
+ - (configure, configure.in) now caches more values (ps args, etc) and
+ checks for the location of ps (no longer assuming to be /bin/ps)
+
+1995-10-06 11:24 hardaker
+
+ * INSTALL:
+
+ - (INSTALL) installation instructions moved to here
+
+1995-10-05 15:22 hardaker
+
+ * .cvsignore, TODO, config.h.in, configure,
+ configure.in, stamp-h.in, agent/Makefile.in,
+ agent/kernel_sunos5.c, agent/kernel_sunos5.h,
+ agent/route_write.c, agent/snmp_var_route.c,
+ agent/snmp_vars.c, apps/Makefile.in,
+ apps/snmpnetstat/Makefile.in:
+
+ - More Solaris porting.
+ - Most mibII entries now work.
+ - Haven't checked returned information for accuracy
+ - sysUpTime still fails.
+ - cc and gcc both compile everything now.
+
+1995-10-03 09:42 hardaker
+
+ * stamp-h, stamp-h.in:
+
+ (.cvsignore) removed files stamp-h stamp-h.in files since makefile needed them.
+
+1995-10-03 09:35 hardaker
+
+ * Makefile.in:
+
+ (Makefile.in) Removed ./configure and ./config.h.in from "all:" dependencies
+
+1995-10-03 09:31 hardaker
+
+ * .cvsignore:
+
+ (.cvsignore) removed config.h.in from cvs ignore list (bad bad)
+
+1995-10-03 09:31 hardaker
+
+ * config.h.in:
+
+ (config.h.in) Added file.
+
+1995-10-03 09:24 hardaker
+
+ * TODO:
+
+ (TODO) Update of the TODO list: included snmpv1 config ideas
+
+1995-10-03 09:24 hardaker
+
+ * acconfig.h:
+
+ (acconfig.h) Minor bug: recursive comments not correct for compilers (AIX)
+
+1995-09-29 13:46 hardaker
+
+ * NEWS:
+
+ - (NEWS) updated the news file.
+
+1995-09-29 13:41 hardaker
+
+ * .cvsignore, Makefile.in, TODO, acconfig.h
+, config.guess, config.sub, configure,
+ configure.in, install-sh, mkinstalldirs,
+ agent/.cvsignore, agent/Makefile.in, agent/acl_vars.c
+, agent/alarm.c, agent/context_vars.c,
+ agent/event.c, agent/kernel.c, agent/party_vars.c
+, agent/route_write.c, agent/snmp_agent.c,
+ agent/snmp_var_route.c, agent/snmp_vars.c,
+ agent/snmp_vars.h, agent/snmpd.c, agent/view_parse.c
+, agent/view_vars.c, apps/.cvsignore,
+ apps/Makefile.in, apps/snmpbulkwalk.c, apps/snmpget.c
+, apps/snmpgetnext.c, apps/snmpset.c,
+ apps/snmptest.c, apps/snmptranslate.c, apps/snmptrapd.c
+, apps/snmpwalk.c, apps/snmpnetstat/.cvsignore,
+ apps/snmpnetstat/Makefile.in, apps/snmpnetstat/if.c,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/main.c,
+ apps/snmpnetstat/route.c, snmplib/.cvsignore,
+ snmplib/Makefile.in, snmplib/acl.c, snmplib/acl_parse.c
+, snmplib/asn1.c, snmplib/context.c,
+ snmplib/context_parse.c, snmplib/md5.c, snmplib/mib.c
+, snmplib/party.c, snmplib/party_parse.c,
+ snmplib/snmp.c, snmplib/snmp_api.c, snmplib/snmp_auth.c
+, snmplib/snmp_client.c, snmplib/system.c,
+ snmplib/view.c:
+
+ - ported to GNU's autoconfig2.4
+ - to install, you must now run ./configure first to generate the
+ Makefiles and config.h
+ - almost all of the code is now dynamically checked for problems
+ rather than being dependant on architecture names.
+ - system name now dynamically determined at run time (from uname -n)
+ - created a 'make depend' call (finally).
+ - (agent/snmp_vars.h) changed SYSNAME define to SYSTEMNAME define to
+ avoid a conflict with a solaris header file.
+ - protecting better against include header files twice.
+ - Most of port to Solaris 2.4 finished. The kernel reads still need work.
+
+1995-09-21 09:29 hardaker
+
+ * ChangeLog, NEWS:
+
+ 3.0.2.1 release (compilation bug fix)
+
+1995-09-21 09:27 hardaker
+
+ * snmplib/md5.c:
+
+ (snmplib/md5.c) Forgot to include sys/types.h for u_long definition.
+
+1995-09-18 16:24 hardaker
+
+ * ChangeLog, NEWS:
+
+ News/Changelog updates
+
+1995-09-18 16:14 hardaker
+
+ * man/snmpd.1.def:
+
+ Beginnings of a manual page for snmpd
+
+1995-09-18 16:09 hardaker
+
+ * README:
+
+ Minor mods to README file.
+
+1995-09-01 14:52 hardaker
+
+ * NEWS:
+
+ Added a NEWS file to report/record major changes
+
+1995-09-01 11:57 hardaker
+
+ * agent/: kernel.c, snmp_var_route.c, snmp_vars.c
+:
+
+ - Fixed alpha's kernel lookups:
+ * CMU code was passing ints into lseek (needs long).
+
+1995-07-31 16:27 hardaker
+
+ * local/snmpcheck.def:
+
+ - snmpcheck changes:
+ - terminal (ascii) based supported fixed.
+ - Detects presence of a DISPLAY variable.
+ - Now requires the Term::Readkey package.
+ - asks users weather to fix problems
+ - raises and deiconifies when new problems are found
+ - sets the background color of new problems to pinkish
+ - new prefence: ping host?
+ - global key bindings:
+ ctrl-q = quit; ctrl-h = hide; ctrl-s = seen all
+
+1995-07-28 14:23 hardaker
+
+ * acconfig.h, agent/snmp_vars.c:
+
+ Yet more problems fixed in the alpha port.
+ -- more int -> long checking.
+
+1995-07-26 16:30 hardaker
+
+ * acconfig.h, agent/kernel.c, agent/route_write.c
+, agent/snmp_var_route.c, agent/snmp_vars.c,
+ agent/snmpd.c, snmplib/asn1.c, snmplib/md5.c,
+ snmplib/snmp_auth.c:
+
+ - Added a new #define: EXIT_ON_BAD_KLREAD to config.h
+ If defined, and an error occurs while reading the kernel contents,
+ the agent will exit. This was the default. I wanted it to
+ continue.
+
+ - Port to dec-alpha/OSF 3.1
+ - alpha's long is 8 bytes, not 4.
+ - should be (mostly) 64 bit clean now.
+ - cleaned up a LOT of bugs CMU code in the process.
+
+1995-07-14 15:20 hardaker
+
+ * ChangeLog:
+
+ Changelog update
+
+1995-07-14 15:15 hardaker
+
+ * local/snmpcheck.def:
+
+ - snmpcheck (tk-perl-b4 script) is pretty stable at this point. I
+ lost curses support, and need to re-add it still, so it is still
+ beta. It does expect a log file of problems to exist (point it to
+ /dev/null), and needs to know the locations of the mibs to check
+ (which aren't configured by 'make'), so it needs some work.
+ However, it will query an agent, check its problems based on the
+ status of the error flag (or return code) being >1 and report them
+ with neat GUI-buttons and stuff (oh wow). No documentation on it though.
+
+1995-07-14 15:12 hardaker
+
+ * agent/snmpd.c:
+
+ - Finished the restart mib. This is a setable sub-mib of the version
+ mib, default to VERSION.12(.1). If snmp-set to '1', it will restart
+ the agent.
+
+ * A side effect of this is that it restarts 3 times or so, since it
+ never returns a responce to the program generating the request.
+ If said program tries to resend the request (which most do), it
+ will AGAIN restart the agent... oh well.
+
+1995-07-10 12:30 hardaker
+
+ * acconfig.h:
+
+ Minor comment change in config.h
+
+1995-07-10 11:27 hardaker
+
+ * agent/snmpd.c:
+
+ Two new command line options:
+ -l LOGFILE Outputs stderr/out to LOGFILE (overrides config.h def)
+ -L Do NOT write to a log file (overrides config.h)
+
+1995-06-21 09:20 hardaker
+
+ * snmplib/snmp_client.c:
+
+ snmplib:
+ Bug fix: fdset -> (int *) fdset in select call.
+
+1995-06-21 09:19 hardaker
+
+ * snmplib/Makefile.in:
+
+ Changed default CC to cc again.
+
+1995-06-21 09:18 hardaker
+
+ * ece-mib.def:
+
+ ece-mib.def:
+ Bug Fix:
+ Loadave mib: Integer -> DisplayString
+ versionClearCache: -> read-write (was read-only)
+
+ Feature:
+ Added a setable mib entry to the version mib to re-read the config file(s).
+
+1995-06-21 09:11 hardaker
+
+ * agent/snmp_agent.c:
+
+ Changed another "empty" error message in the CMU code to a real warning.
+
+1995-06-16 14:20 hardaker
+
+ * agent/snmp_vars.c:
+
+ House Cleaning:
+ Missed a VERSION_ID
+
+1995-06-16 14:02 hardaker
+
+ * agent/Makefile.in:
+
+ House Cleaning:
+ Took out gcc/ansi requirement for the agent.
+ perror() is called more frequently for log archival
+
+ New Bug/Haven't solved:
+ HP-UX: if agent/*.c and agent/extensible/*.c are built with gcc,
+ DisplayStrings return garbage. No clue as to why.
+
+1995-06-16 10:15 hardaker
+
+ * agent/: snmp_var_route.c, snmp_vars.c, snmp_vars.h
+, snmpd.c:
+
+ House cleaning
+ - Compiles cleanly on hpux/gcc
+ (except one include file error I don't have control over.)
+ - Change VERSION_ID -> VERSIONID to avoid conflicts with HP's includes.
+
+1995-06-16 10:13 hardaker
+
+ * agent/Makefile.in:
+
+ Removed 'gmake' -> 'make' in agent/Makefile
+
+1995-06-14 14:09 hardaker
+
+ * README:
+
+ Added AVAILABILITY section to the README file.
+
+1995-06-14 13:56 hardaker
+
+ * ChangeLog, README:
+
+ Updated the ChangeLog
+ Added a "real" disclaimer to the README file.
+
+1995-06-14 13:43 hardaker
+
+ * README:
+
+ - Added more documentation to the README file.
+ - Created a mailing list to handle announcements
+ (ucd-snmp-announce@ece.ucdavis.edu)
+
+1995-06-14 12:56 hardaker
+
+ * acconfig.h, agent/snmp_vars.c:
+
+ - Cleaned up/Added more documentation to config.h
+ - GLOBALSECURITY now uses the left most four bits in the MIB acl.
+ This is more compatible with the CMU code than using the left most
+ 2, which was done previously.
+
+1995-06-14 11:24 hardaker
+
+ * agent/snmp_vars.c:
+
+ agent:
+ - Mib table is now qsorted at run time and the extensible variables are
+ sorted in at this time. This brings the agent up to correct
+ SNMPwalk/getnext protocols. You can now walk the entire tree
+ including the extensible sections and it won't stop.
+ * This has an added bonus of checking the mib table
+ (agent/snmp_vars.c) for correct order. I have added things to the
+ wrong location too many times and caused the agent to function
+ incorrectly. Major win.
+
+1995-06-12 10:35 hardaker
+
+ * local/trapnotif:
+
+ local/trapnotif:
+ -- uses snmpv2 now (correctly)
+
+1995-06-09 14:08 hardaker
+
+ * snmplib/Makefile.in:
+
+ Changed test -x to test -f in snmplib/Makefile. Not all OSes
+ (ie ultrix) handle this.
+
+1995-06-09 13:21 hardaker
+
+ * snmplib/md5.c:
+
+ Fixed Authentication error (again) (correct this time) between
+ reversed byte order machines.
+ -- #ifdef hpux/SYSV/sun in md5.c reverses byte order
+
+1995-06-09 12:39 hardaker
+
+ * snmplib/md5.c:
+
+ Fixed Authentication error between reversed byte order machines.
+ -- #ifdef hpux/SYSV in md5.c reverses byte order
+
+1995-06-09 10:21 hardaker
+
+ * agent/snmp_vars.c:
+
+ Correctly ordered the mib table list.
+ -- Need to write a dynamic checker/re-orderer.
+
+1995-06-09 10:20 hardaker
+
+ * acconfig.h, snmplib/Makefile.in,
+ snmplib/snmp_client.c:
+
+ Added a SNMPBLOCK option to the config.h file. Supposedily setting
+ this to zero (now the default) will allow snmp requests to time out.
+ Haven't tested it throughly.
+ -- Contributed by Sanjai Narain <narain@thumper.bellcore.com>
+
+1995-06-05 12:44 hardaker
+
+ * ChangeLog, README, agent/snmp_vars.c:
+
+ * agent/extensible/Makefile:
+ -- no longer requires GNU make
+ -- etags no longer run by default
+
+ * SunOS additions:
+ -- loadaverage checking MIB enabled
+ -- disk checking MIB enabled
+
+1995-06-02 16:21 hardaker
+
+ * README:
+
+ Final modification for inital release
+
+1995-06-02 15:41 hardaker
+
+ * agent/snmp_vars.c:
+
+ #ifdef hpux around hpux specific mibs
+
+1995-06-02 15:31 hardaker
+
+ * snmplib/snmp_impl.h:
+
+ ERROR() define now flushes stdout
+
+1995-06-02 15:30 hardaker
+
+ * local/trapnotif:
+
+ Now uses v2 request protocol.
+
+1995-06-02 15:28 hardaker
+
+ * agent/snmp_agent.c:
+
+ Prints MIB to stdout for existent mibs
+
+1995-06-02 15:27 hardaker
+
+ * agent/snmp_vars.c:
+
+ Added a check for SNMPV2/SNMPV2AUTH type authorization.
+
+1995-06-02 15:27 hardaker
+
+ * acconfig.h:
+
+ Reorganized config.h in more or less order of importance
+ Added definitions for SNMPV2ONLY type authorization.
+
+1995-06-02 15:26 hardaker
+
+ * ece-mib.def:
+
+ removed bogus two lines
+
+1995-05-31 16:30 hardaker
+
+ * agent/snmp_vars.c:
+
+ New:
+
+ Added two new ACL types: PRIVAUTHRW and PRIVAUTHRO which will only
+ work if the request is authenticated (by anything).
+
+1995-05-31 14:49 hardaker
+
+ * README:
+
+ New:
+
+ Added -f option to README
+
+1995-05-31 14:49 hardaker
+
+ * ece-mib.def:
+
+ New:
+
+ New MIB: snmpErrors to log problems with the agent
+
+1995-05-31 14:47 hardaker
+
+ * agent/: Makefile.in, snmp_vars.c, snmpd.c:
+
+ New:
+
+ New definition included for a default place to log messages: LOGFILE
+ New MIB: snmpErrors to log problems with the agent
+ Forks away from calling shell by default now unless -f specified.
+
+ Misc:
+
+ Ifdefs around all added sections of code to disable durning compilation
+
+1995-05-31 14:45 hardaker
+
+ * acconfig.h:
+
+ New:
+
+ New definition included for a default place to log messages: LOGFILE
+ New MIB: snmpErrors to log problems with the agent
+
+ Bugs:
+
+ hpux compliers don't define SYSV by default...
+
+1995-05-19 15:45 hardaker
+
+ * local/snmpcheck.def:
+
+ Added menus and moved some commands there as well as prefrences.
+ Now rescans after 5 minutes and checks the log.
+
+1995-05-19 15:44 hardaker
+
+ * local/trapnotif:
+
+ egreping for an exact match for hosts now.
+
+1995-05-19 15:43 hardaker
+
+ * agent/snmp_vars.c:
+
+ More defines moved to config.h
+
+1995-05-19 15:42 hardaker
+
+ * README, acconfig.h, ece-mib.def:
+
+ Working toward an exportable version.
+
+1995-05-17 12:45 hardaker
+
+ * local/snmpcheck.def:
+
+ Working version.
+ -- now operates on a selection
+ -- still has a lot of room for improvement.
+
+1995-05-08 16:25 hardaker
+
+ * local/snmpcheck.def:
+
+ Fairly functioning version.
+ Need to port to perl5.001 & tk4b3
+
+1995-05-05 17:01 hardaker
+
+ * agent/snmp_vars.c:
+
+ Opps. Set tp->namelen to be -1, when it is a unsigned char. Using 0 now.
+
+1995-05-05 16:18 hardaker
+
+ * acconfig.h, agent/Makefile.in, agent/snmp_vars.c
+:
+
+ Re-arranging and Re-naming stuff for external distribution
+
+1995-05-03 13:05 hardaker
+
+ * agent/snmp_vars.c:
+
+ Major bug:
+ Changing tree size caused problems.
+ extensible tree now adds a halt condition (namelen = -1) to check for
+
+1995-05-03 12:23 hardaker
+
+ * agent/snmp_vars.c:
+
+ Added prototype declairation for find_extensible()
+
+1995-05-03 09:23 hardaker
+
+ * local/trapnotif:
+
+ Changed timeout to be 30 seconds.
+
+1995-05-03 09:21 hardaker
+
+ * local/rsnmp:
+
+ New script:
+ walks an extensible (or any) mib tree. Has built in knowledge of
+ the mibs for lay-peoples useage.
+
+1995-05-03 09:19 hardaker
+
+ * local/fixproc:
+
+ Fixed bug: Using a wrong variable
+
+1995-05-03 09:12 hardaker
+
+ * agent/snmp_vars.c:
+
+ Added extensible mib entry.
+ -- find_extensible now returns the default mib tree or an
+ appropriate mib tree with the created extensible entry in it.
+
+1995-05-03 09:10 hardaker
+
+ * ece-mib.def:
+
+ Added load average mib entry
+
+1995-04-17 12:25 hardaker
+
+ * local/snmpcheck.def:
+
+ Started writting a Tk interface... Code is still very very ugly, but works.
+
+1995-04-17 12:24 hardaker
+
+ * local/trapnotif:
+
+ Now logs itself correctly.
+
+1995-04-13 14:12 hardaker
+
+ * agent/Makefile.in:
+
+ Added a dependancy for wes/mibdefs.h to snmp_vars.c
+
+1995-04-07 12:46 hardaker
+
+ * agent/snmp_vars.c, agent/snmpd.c, apps/snmptrapd.c
+, apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c,
+ apps/snmpnetstat/main.c, snmplib/system.c:
+
+ -- Ported to dec 5000/200 Ultrix 4.2 architectures
+ TODO: memory/swap in wes.c
+
+1995-03-31 15:33 hardaker
+
+ * local/snmpcheck.def:
+
+ Bugs:
+ Was acting slow since it was checking each mib location twice.
+ Removed perl -w warnings
+
+1995-03-15 16:48 hardaker
+
+ * local/snmpcheck.def:
+
+ snmpcheck is now written using perl5's object oriented routines.
+
+1995-03-15 14:19 hardaker
+
+ * snmplib/parse.c:
+
+ CMU Bug fixes:
+ -- better job than my previous hack fixing get_token.
+ + get_token now requires a third argument dictating the max string
+ length the token can hold.
+
+1995-03-15 09:26 hardaker
+
+ * README:
+
+ Updated README.hpux file from HP-port-1-1-1...
+
+1995-03-15 09:23 hardaker
+
+ * local/snmpcheck.def:
+
+ perl -> perl5
+ No longer depends on OVs snmpset, can now use CMUs snmpset (/usr/local/etc)
+
+1995-03-10 13:34 hardaker
+
+ * snmplib/mib.c:
+
+ Added /etc as another path to search when looking for mib.txt
+
+1995-03-10 13:30 hardaker
+
+ * snmplib/parse.c:
+
+ Major hacking to parse() to work at all.
+ -- Now I don't unstand why it ever successfully parsed the mib.txt file.
+ -- get_token was constantly called to read DESCRIPTION strings into
+ a char array of either 64 (MAXTOKEN) or 4096 (MAXQUOTESTR) in
+ length. MANY of the DESCRIPTION strings are longer than this.
+ -- Hacked parseQuotedString to make sure returned are strings < MAXQUOTESTR
+
+1995-03-10 13:18 hardaker
+
+ * apps/snmptrapd.c, snmplib/system.c:
+
+ #include <socketio.h> is not needed on HPUX
+
+1995-03-10 13:18 hardaker
+
+ * apps/.cvsignore:
+
+ Added snmpgetnext and snmpset to .cvsignore
+
+1995-03-09 13:22 hardaker
+
+ * agent/Makefile.in, agent/snmpd.c, snmplib/Makefile.in
+, snmplib/party_parse.c, snmplib/snmp_client.c:
+
+ CMU 2.1.2 -> 2.1.2.1 Merge.
+
+1995-03-08 16:07 hardaker
+
+ * apps/snmpset.c, apps/snmpgetnext.c,
+ man/snmpbulkwalk.1, man/snmpget.1, man/snmpgetnext.1
+, man/snmpnetstat.1, man/snmpset.1,
+ man/snmptranslate.1, man/snmptrapd.8:
+
+ Initial revision
+
+1995-03-08 16:06 hardaker
+
+ * Makefile.in, README.cmu, agent/Makefile.in
+, agent/snmpd.c, apps/Makefile.in,
+ apps/snmpget.c, apps/snmptest.c,
+ apps/snmpbulkwalk.c, apps/snmptrapd.c,
+ apps/snmpwalk.c, apps/snmpset.c,
+ apps/snmptranslate.c, apps/snmpgetnext.c,
+ apps/snmpnetstat/Makefile.in, apps/snmpnetstat/if.c
+, apps/snmpnetstat/inet.c,
+ apps/snmpnetstat/main.c, apps/snmpnetstat/route.c
+, man/README, man/snmptest.1,
+ man/snmpwalk.1, man/snmpbulkwalk.1,
+ man/snmpget.1, man/snmpgetnext.1,
+ man/snmpnetstat.1, man/snmpset.1,
+ man/snmptranslate.1, man/snmptrapd.8,
+ snmplib/Makefile.in, snmplib/acl.c,
+ snmplib/acl.h, snmplib/asn1.c,
+ snmplib/context.c, snmplib/context.h,
+ snmplib/context_parse.c, snmplib/mib.c,
+ snmplib/parse.c, snmplib/parse.h,
+ snmplib/party.c, snmplib/party.h,
+ snmplib/party_parse.c, snmplib/snmp_api.c,
+ snmplib/snmp_api.h, snmplib/snmp_auth.c,
+ snmplib/snmp_client.c, snmplib/snmp_impl.h,
+ snmplib/system.c, snmplib/view.c,
+ snmplib/view.h:
+
+ New release of CMU's code:
+ -- See README for specific details
+ -- snmpset,snmpgetnext added
+ -- -q flag added "quick print"
+ -- bug fixes
+ -- Man pages updated
+
+1995-03-02 14:09 hardaker
+
+ * local/snmpcheck.def:
+
+ Minor backspace changes...
+ Removed -w switch for perl
+
+1995-03-02 14:09 hardaker
+
+ * local/fixproc:
+
+ Fix from Tim: correctly finds pid now
+
+1995-02-09 12:33 hardaker
+
+ * local/snmpcheck.def:
+
+ perl -w produces no warnings now if no cmd line args are given.
+ Added two more status indicators (sleeping, checking) for fix routine.
+ Now sleeps for 2 seconds instead of 1 (not quick enough to catch X restarts)
+
+1995-02-09 12:31 hardaker
+
+ * local/fixproc:
+
+ Changed ps -el to ps -e: ps -el reported X as being alive instead of <defunct>
+
+1995-02-08 15:20 hardaker
+
+ * ece-mib.def:
+
+ Added a mib to provide capability for ignoring the exec cache.
+ -- Needed immediately following a 'fix' to check to see if the 'fix' worked.
+
+1995-02-08 15:04 hardaker
+
+ * local/snmpcheck.def:
+
+ Pokes the reset-cache mib to ensure a new 'ps' output for fixed problems.
+
+1995-02-08 14:46 hardaker
+
+ * local/snmpcheck.def:
+
+ New options:
+ -y: always try to fix the problems
+ -n: never try to fix the problems
+ Currently defaults to never (should prompt) till I can get perl's
+ getc(STDIN) to work...
+ Uses snmpset to accomplish this, which is OVs and only licenced for one host.
+
+1995-02-08 10:34 hardaker
+
+ * agent/: kernel.c, snmpd.c:
+
+ Added 'close on exec' flags to open files (/dev/*mem*) and sockets.
+ -- Prevents spawned processes from keeping snmpd from restarting.
+ (Errors were: Can't bind socket (in use) and Can't open /dev/dmem)
+ Set O_RDONLY flag on /dev/*mem* files, required by the 'man page' (else undef)
+
+1995-02-03 13:51 hardaker
+
+ * agent/Makefile.in:
+
+ Added wes/exec.o
+
+1995-02-03 13:49 hardaker
+
+ * ece-mib.def:
+
+ Added mib defs for the read/write fix for procs and exec functions
+
+1995-02-03 13:38 hardaker
+
+ * local/: ece-snmpd.conf, fixproc, fixproc.conf:
+
+ Added fixproc and its database (installed in /local/scripts and /local/etc)
+ Copied the current /etc/ece-snmpd.conf to this directory, for
+ archiving.
+
+1995-02-01 14:24 hardaker
+
+ * agent/: Makefile.in, snmp_agent.c:
+
+ Added write-mib ability to fix a given process
+ -- will eventually call Tim's script to fix the process
+ -- Defined in wes.h
+
+1995-02-01 11:57 hardaker
+
+ * agent/Makefile.in:
+
+ Fixed Makefile bug: calles $(MAKE) now instead of explicit make.
+
+1995-01-30 13:33 hardaker
+
+ * ece-mib.def:
+
+ Version information now contains a CVS tag info mib
+ VERCDATE now works properly.
+
+1995-01-30 11:19 hardaker
+
+ * ece-mib.def:
+
+ Added version mib to definitions.
+
+1995-01-30 11:08 hardaker
+
+ * agent/: Makefile.in, snmp_vars.c:
+
+ Added version mib (VERIDENT,VERDATE,VERCDATE)
+ Added mibincl.h and mibdefs.h to start splitting up mibs in wes.c into
+ seperate files. Include these two files to include necessary defs
+ ERRORMSG defs now ALL return current numerical result with the msg.
+
+1995-01-27 17:10 hardaker
+
+ * agent/snmp_vars.c:
+
+ Put in defines for the sub mib nums {snmp_vars.c, wes.h}
+
+1995-01-27 13:17 hardaker
+
+ * local/snmpcheck.def:
+
+ Added paths (/usr/local/etc) to snmp{get,walk}
+
+1995-01-27 12:45 hardaker
+
+ * agent/snmp_vars.c:
+
+ Made nlist entry changes. no longer dies from a ArpTable query.
+
+1995-01-27 12:26 hardaker
+
+ * agent/snmp_vars.c:
+
+ Moved kernel/nlist printout of not found nlist entries out of #ifdef hpux
+
+1995-01-27 11:42 hardaker
+
+ * agent/snmp_vars.c:
+
+ cpp Mistake fix: #ifdef HPUX -> #ifdef hpux
+
+1995-01-25 17:14 hardaker
+
+ * agent/snmp_vars.c:
+
+ Ported (back) to Sun4:
+ -- swap and disk mibs not supported yet
+ -- found numerous bugs I hadn't noticed under HPUX, mostly type
+ casting.
+
+1995-01-25 16:19 hardaker
+
+ * local/snmpcheck.def:
+
+ Added Swap/Memory mib check (.4), now that it conforms to .{1,2,100,101} specs.
+ Changed formating to use %-n.ns specifications instead of tab seperations.
+
+1995-01-23 16:02 hardaker
+
+ * local/trapnotif:
+
+ Bug fix: Polled wrong mib (100 instead of 101) for errmsg string.
+
+1995-01-23 12:57 hardaker
+
+ * ece-mib.def:
+
+ Typo fixes in the mib def file for OV.
+
+1995-01-23 12:00 hardaker
+
+ * local/snmpcheck.def:
+
+ Won't check down hosts:-)
+
+1995-01-23 10:57 hardaker
+
+ * ece-mib.def:
+
+ All (watched) mibs now use:
+ 1: MIBINDEX, just an index to the number of vars
+ 2: ERRORNAME, a generic one word name for the cause of ERROR{FLAG,MSG}.
+
+1995-01-23 10:37 hardaker
+
+ * local/trapnotif:
+
+ Added /1/OV/bin to the path to find the snmp utils without path extensions.
+ More variable usage: removed use of command line args directly.
+ If the error flag has changed back to normal, only log it in the
+ ece-total log file instead.
+
+1995-01-23 10:26 hardaker
+
+ * local/snmpcheck.def:
+
+ Will take hosts from the log file if none specified on the command line.
+ -- or if the first arg is a '-a' will (A)dd to the command line list.
+ Displays what host it is checking as it checks it.
+ Changed the output format (I've yet to see if it actually looks good though).
+
+1995-01-18 15:22 hardaker
+
+ * local/snmpcheck.def:
+
+ Beginning of a script to check errors with a machine and report them
+ via snmp
+ TODO: option to fix the errors if root on clover (need to rsh to the machine)
+
+1995-01-05 14:51 hardaker
+
+ * local/trapnotif:
+
+ Changed the trapnotif file to reflect recent source changes:
+ -- removed mem error section... They are handled via the normal err
+ route since they now have an error msg like the rest
+ -- Error flag is now at 100, and error message is at 101.
+
+1995-01-05 14:45 hardaker
+
+ * ece-mib.def:
+
+ Changed the mib file to reflect the current source code.
+ All mibs now have ErrorFlag and ErrorMsg as 100,101
+
+1995-01-05 14:44 hardaker
+
+ * local/: trapnotif, wesrestart:
+
+ copied the restart and trapnotif scripts to the src tree for cvs archiving.
+
+1995-01-04 16:32 hardaker
+
+ * ece-mib.def:
+
+ Initial release.
+ Needs to be updated.
+
+1995-01-04 16:30 hardaker
+
+ * apps/: .cvsignore, snmpnetstat/.cvsignore:
+
+ Just a .cvsignore file
+
+1995-01-04 16:26 hardaker
+
+ * agent/: .cvsignore, snmp_vars.c:
+
+ Feature:
+ Added the disk watching facilities to report disk space
+ -- new config option 'disk DISK MINAVAIL'
+ Added support for a second config file as CONFIGFILETWO
+ -- defaults to /etc/ece-snmpd.local.conf
+ -- intent: one is rdisted and one is machine specific
+ -- TODO: Needs to erase previous definitions rather than adding
+ two wit the same name
+
+ Change:
+ MIB definition change:
+ -- All mibs with error flags now use ERRORFLAG/ERRORMSG instead.
+ -- These default to 100 and 101, and are set by only two defines
+ Shortened error message for process errors to fit on the screen.
+ Swap mib code cleanup
+
+ TODO:
+ Added beginnings of kernal locking tests. Need to find a machine
+ with a broken rpc.lockd to test the code though.
+
+ Bugs:
+ My nlist array didn't have a NULL ending.
+
+1994-12-14 17:13 hardaker
+
+ * README:
+
+ Added the README file
+
+1994-12-14 17:02 hardaker
+
+ * snmplib/hpux.c:
+
+ Added hpux.c
+
+1994-12-14 16:55 hardaker
+
+ * snmplib/: Makefile.in, party_parse.c, snmp_client.c
+:
+
+ HP-UX port of the CMU code
+
+1994-12-14 15:43 hardaker
+
+ * Makefile.in, README.cmu, mibII.txt,
+ snmplib/asn1.c, snmplib/mib.c, snmplib/parse.c
+, snmplib/snmp.c, snmplib/snmp_api.c,
+ snmplib/snmp_auth.c, snmplib/asn1.h,
+ snmplib/mib.h, snmplib/parse.h,
+ snmplib/snmp_client.c, snmplib/Makefile.in,
+ snmplib/acl_parse.c, snmplib/snmp.h,
+ snmplib/snmp_api.h, snmplib/snmp_client.h,
+ snmplib/snmp_impl.h, snmplib/acl.c,
+ snmplib/acl.h, snmplib/party.c, snmplib/party.h
+, snmplib/party_parse.c, snmplib/view.c
+, snmplib/context.c, snmplib/context.h
+, snmplib/context_parse.c, snmplib/md5.c
+, snmplib/md5.h, snmplib/view.h,
+ apps/Makefile.in, apps/snmpget.c, snmplib/.pure
+, snmplib/system.c, snmplib/system.h,
+ apps/snmpbulkwalk.c, apps/snmptest.c,
+ apps/snmptranslate.c, apps/snmpwalk.c,
+ apps/snmptrapd.c, apps/snmpnetstat/Makefile.in,
+ apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c,
+ apps/snmpnetstat/main.c, apps/snmpnetstat/main.h
+, apps/snmpnetstat/route.c, man/snmp_api.3
+, man/snmptest.1, man/snmpwalk.1,
+ man/variables.5, man/README, man/des.1
+, man/des.3:
+
+ Initial CMU snmp code, version 2.1.2
+
+1994-12-14 15:43 hardaker
+
+ * Makefile.in, README.cmu, mibII.txt,
+ snmplib/asn1.c, snmplib/mib.c, snmplib/parse.c,
+ snmplib/snmp.c, snmplib/snmp_api.c, snmplib/snmp_auth.c
+, snmplib/asn1.h, snmplib/mib.h, snmplib/parse.h
+, snmplib/snmp_client.c, snmplib/Makefile.in,
+ snmplib/acl_parse.c, snmplib/snmp.h, snmplib/snmp_api.h
+, snmplib/snmp_client.h, snmplib/snmp_impl.h,
+ snmplib/acl.c, snmplib/acl.h, snmplib/party.c,
+ snmplib/party.h, snmplib/party_parse.c, snmplib/view.c
+, snmplib/context.c, snmplib/context.h,
+ snmplib/context_parse.c, snmplib/md5.c, snmplib/md5.h
+, snmplib/view.h, apps/Makefile.in, apps/snmpget.c
+, snmplib/.pure, snmplib/system.c,
+ snmplib/system.h, apps/snmpbulkwalk.c, apps/snmptest.c
+, apps/snmptranslate.c, apps/snmpwalk.c,
+ apps/snmptrapd.c, apps/snmpnetstat/Makefile.in,
+ apps/snmpnetstat/if.c, apps/snmpnetstat/inet.c,
+ apps/snmpnetstat/main.c, apps/snmpnetstat/main.h,
+ apps/snmpnetstat/route.c, man/snmp_api.3,
+ man/snmptest.1, man/snmpwalk.1, man/variables.5,
+ man/README, man/des.1, man/des.3:
+
+ Initial revision
+
+1994-11-18 15:59 hardaker
+
+ * agent/: Makefile.in, snmp_agent.c, snmp_vars.c,
+ snmpd.c:
+
+ Added some hp-mibs
+
+1994-11-04 15:47 hardaker
+
+ * agent/snmp_vars.c:
+
+ Added Virtual Memory mib (currently only total and used)
+
+1994-10-28 13:35 hardaker
+
+ * agent/: snmp_var_route.c, snmp_vars.c:
+
+ hp-ux machines now return the correct mib location for their arch type.
+ Added hp-ux to the ifdefs for Route_Scan_Reload() function for correct
+ kernal reading.
+
+1994-10-26 13:31 hardaker
+
+ * agent/: party_vars.c, snmp_vars.c:
+
+ Dec compilation achived, though its not opening any ports when run.
+
+1994-10-24 14:57 hardaker
+
+ * agent/snmp_vars.c:
+
+ Added the extensible mib section.
+
+1994-10-20 16:09 hardaker
+
+ * agent/: Makefile.in, snmp_vars.c, var_struct.h:
+
+ Added the remaining hp-ux symbols
+ put all dependancies for my stuff under wes/
+ moved the variable declairations (structs) to var_structs.h so they could be
+ referenced by other files.
+ Changed the default values to hp-ux from BSD and other misc strings
+ Added appropriate dependancies to the makefile
+ Changed errors and added stuff to the variable declairations for my stuff
+
+1994-10-14 10:46 hardaker
+
+ * agent/: Makefile.in, kernel.c, snmp_var_route.c
+, snmp_vars.c:
+
+ fixed nlist for the hps. Not sure of three particular nlist
+ references (for the arp table). The rest are working.
+ Also added wes/* do the dependances for snmp_vars.c
+
+1994-10-14 08:39 hardaker
+
+ * agent/: kernel.c, snmp_vars.c:
+
+ I fixed the source for compilation and began adding my own mib defs.
+ Any included mibs which make kernal reads still fail.
+
+1994-10-13 13:55 hardaker
+
+ * agent/: Makefile.in, history.h, kernel.c
+, snmp_agent.c, snmp_var_route.c,
+ snmp_vars.h, snmpd.c, alarm.c,
+ event.c, history.c, party_vars.c,
+ snmp_vars.c, snmp_vars_event.h, view_vars.c
+, acl.conf, acl_vars.c, alarm.h
+, context_vars.c, event.h, m2m.h
+, snmp_vars_m2m.h, view_parse.c, .pure
+, route_write.c:
+
+ Inital CMU source.
+
+
+
+-------------------------------------------------------------------------------
+
+Changes: V5.0.8 -> V5.0.9
+
+2003-09-05 23:42 hardaker
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend
+, agent/mibgroup/Makefile.depend,
+ apps/Makefile.depend, apps/snmpnetstat/Makefile.depend
+, snmplib/Makefile.depend:
+
+ make depend
+
+2003-09-05 23:41 hardaker
+
+ * configure, configure.in:
+
+ forgot a test after the if
+
+2003-09-05 23:37 hardaker
+
+ * README:
+
+ added Bob Rowlands
+
+2003-09-05 23:30 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_bulk_to_next.3
+, netsnmp_debug.3, netsnmp_handler.3,
+ netsnmp_instance.3, netsnmp_library.3,
+ netsnmp_mib_utilities.3, netsnmp_mode_end_call.3
+, netsnmp_multiplexer.3, netsnmp_old_api.3
+, netsnmp_read_only.3, netsnmp_scalar.3
+, netsnmp_serialize.3, netsnmp_table.3
+, netsnmp_table_array.3, netsnmp_table_data.3
+, netsnmp_table_dataset.3,
+ netsnmp_table_iterator.3, netsnmp_todo.3,
+ netsnmp_watcher.3:
+
+ doxygen update
+
+2003-09-05 23:25 hardaker
+
+ * Makefile.top:
+
+ update for 5.0.9
+
+2003-09-05 22:36 hardaker
+
+ * agent/helpers/: table.c, table_iterator.c:
+
+ Patch #800561 from Bob Rowlands to fix 64bit problems (-> size_t)
+
+2003-09-05 22:30 hardaker
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ Patch #800485 from Bob Rowlands for 64 bit agentx problems
+
+2003-09-05 22:16 hardaker
+
+ * snmplib/snmpusm.c:
+
+ Patch #792008 from Thomas? to allow usmUser tokens to override previous entries
+
+2003-09-05 22:04 hardaker
+
+ * man/: mib2c.1.def, snmpcmd.1.def,
+ snmpdelta.1, snmpdf.1, snmpnetstat.1,
+ snmpstatus.1.def, snmptable.1.def,
+ snmptest.1.def, snmptranslate.1.def:
+
+ Patch #789485 from Bob Rowlands for a long needed overhaul of the manual pages.
+
+2003-09-05 22:00 hardaker
+
+ * Makefile.in, snmplib/Makefile.in:
+
+ one run-away patch
+
+2003-09-05 21:58 hardaker
+
+ * Makefile.in, configure.in, agent/snmpd.c
+, agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/logmatch.c,
+ include/net-snmp/library/system.h, snmplib/mib.c
+, snmplib/parse.c:
+
+ high level comments about contained copyrights moved from the main branch
+
+2003-09-05 21:54 hardaker
+
+ * NEWS:
+
+ minor updates
+
+2003-09-05 21:21 hardaker
+
+ * Makefile.in, configure, configure.in
+:
+
+ Add optional arguments to the --with-perl-modules flag for passing down
+
+2003-09-05 16:57 hardaker
+
+ * agent/snmp_agent.c,
+ include/net-snmp/agent/snmp_agent.h:
+
+ - fix a getbulk bug pointed out by Jurij Smakov.
+
+2003-07-27 16:54 rstory
+
+ * local/mib2c:
+
+ fix filename in error msg, as noted in coders
+
+2003-07-24 18:14 rstory
+
+ * perl/SNMP/SNMP.xs:
+
+ add access to augments tag (fix bug 740082: mib2c handles AUGMENTing tables
+ incorrectly)
+
+2003-07-24 18:13 rstory
+
+ * local/mib2c:
+
+ add indexes from augmented table for tables using augments (fix
+ bug 740082: mib2c handles AUGMENTing tables incorrectly)
+
+2003-07-24 05:27 rstory
+
+ * acconfig.h:
+
+ define NETSNMP_INLINE as empty if not defined
+
+2003-07-10 09:32 rstory
+
+ * dist/nsb-functions:
+
+ fix typo; use which to find scp; add extra config to other config
+
+2003-07-09 20:56 rstory
+
+ * dist/nsb-functions:
+
+ add host/path upload; try to extract more info from make log on error
+
+2003-07-09 20:54 rstory
+
+ * dist/: nsb-package, nsb-nightly:
+
+ add host/path upload params; use new nsb-default-paths
+
+2003-07-03 20:52 rstory
+
+ * snmplib/: container_list_ssll.c, container_null.c
+:
+
+ oops - no new features for 5.0.8
+
+2003-07-03 20:26 rstory
+
+ * snmplib/container_list_ssll.c:
+
+ file container_list_ssll.c was initially added on branch V5-0-patches.
+
+2003-07-03 20:26 rstory
+
+ * snmplib/container_null.c:
+
+ file container_null.c was initially added on branch V5-0-patches.
+
+2003-07-03 20:26 rstory
+
+ * snmplib/: container_list_ssll.c, container_null.c
+:
+
+ new containers
+
+2003-07-02 13:02 hardaker
+
+ * agent/agent_registry.c:
+
+ Patch #724925 from Peter Warasin to fix netsnmp_subtree_unload() to update the root pointer
+
+2003-07-02 12:47 hardaker
+
+ * agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/logmatch.c, snmplib/parse.c
+:
+
+ Patch #760448 from Bob Rowlands/Sun to fix bug #751913 to protect a few minor security violations
+
+2003-07-02 10:44 hardaker
+
+ * snmplib/strlcpy.c:
+
+ file strlcpy.c was initially added on branch V5-0-patches.
+
+2003-07-02 10:44 hardaker
+
+ * COPYING, configure, configure.in,
+ agent/snmpd.c, include/net-snmp/net-snmp-config.h.in
+, include/net-snmp/library/system.h,
+ snmplib/Makefile.in, snmplib/mib.c,
+ snmplib/strlcpy.c:
+
+ Patch #760417 from Bob Rowlands/Sun for fixing Bug #751920 for minor security problems (PID file unliked first, and use strlcpy instead of strcpy. A new strlcpy file was defined if not defined for a system.
+
+2003-07-02 10:37 hardaker
+
+ * snmplib/mib.c:
+
+ don't use isspace and isprint simultaniously
+
+2003-07-02 10:36 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ comment change for clarification
+
+2003-07-02 10:26 hardaker
+
+ * include/net-snmp/library/snmp_debug.h:
+
+ Patch #764047 from Stephen J. Friedl: Remove redundant declaration from snmp_debug.h and fix a few comments
+
+2003-07-02 10:21 hardaker
+
+ * configure, configure.in:
+
+ Patch #759309 from Stephen Friedl to add prompt over-ride flag descriptions to prompt output
+
+2003-07-02 10:19 hardaker
+
+ * configure, configure.in:
+
+ patch #759298: fix spelling error
+
+2003-06-25 14:29 hardaker
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ fix proxying for getbulk
+
+2003-06-22 07:23 hardaker
+
+ * apps/snmpvacm.c:
+
+ fix usage for flag ordering
+
+2003-06-16 14:59 hardaker
+
+ * testing/RUNTESTS:
+
+ remove no longer needed comment about it being broken, as pointed out
+ by Bruce.
+
+2003-06-16 14:58 hardaker
+
+ * testing/RUNTESTS:
+
+ support , separated arguments to -T like -h says it will.
+
+2003-06-16 14:57 hardaker
+
+ * testing/RUNTESTS:
+
+ Bruce Shaw's patch 755553 to fix RUNTESTS test number reporting when
+ testing subsets are used.
+
+2003-06-16 14:44 hardaker
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Patch #755540 from Bruce Shaw and IRC:SebNob to fix bug #701439 for 64 bit solaris systems and 64 bit integers returned by getKstat
+
+2003-06-16 14:43 hardaker
+
+ * testing/tests/: T055agentv1mintrap, T056agentv2cmintrap
+:
+
+ Patch #754105 from Bruce Shaw to fix some spelling errors
+
+2003-06-10 15:48 nba
+
+ * snmplib/snmp_api.c:
+
+ Beware of dereferencing a NULL pointer
+
+2003-06-10 10:45 hardaker
+
+ * snmplib/snmp_api.c:
+
+ remove the unused function as pointed out by Bob Rowlands
+
+2003-06-09 16:11 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c, agent/snmp_agent.c
+, include/net-snmp/library/vacm.h,
+ snmplib/vacm.c:
+
+ Long overdue patch #695192 from Ron Tabor to fix the VACM spinning problem that I didn't quite fix before
+
+2003-06-09 16:01 hardaker
+
+ * configure.in, testing/tests/T023snmpv3getMD5DES
+, testing/tests/T025snmpv3getSHADES:
+
+ fix bug #706710 to show when privacy has been disabled
+
+2003-06-09 15:33 hardaker
+
+ * snmplib/snmp_api.c:
+
+ bug #748431 from John Shiver: fix thread-safe problems with snmp_get_fd_for_session (which was missing in the 5.x line anyway)
+
+2003-06-09 14:49 hardaker
+
+ * README.Matsushita.txt, README.Matsushita.txt:
+
+ Patch #748305 from srinivasa rao gurusu describing how to build net-snmp on Matsushita embedded systems
+
+2003-06-09 14:44 hardaker
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ Patch 746339: Otto Solares fixes a file descriptor leak on linux
+
+2003-06-09 14:38 hardaker
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ patch #740918 from Eric E. Bowles: fix pass through invocation for SETs
+
+2003-06-09 14:31 hardaker
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Patch #749062 to fix caching crashing and clashing under Solaris
+
+2003-06-09 14:28 hardaker
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ patch #749103 from Garry C Marshall to fix the proxy when a timeout occurs from the target
+
+2003-06-06 23:17 nba
+
+ * snmplib/mib.c:
+
+ Fix missing length byte when setting index with checks disabled
+
+2003-05-28 17:25 hardaker
+
+ * agent/helpers/old_api.c:
+
+ remove unused code as pointed out by Peter Warasin
+
+2003-05-28 14:29 hardaker
+
+ * AGENT.txt:
+
+ added V4/V5 note from main branch to patches
+
+2003-05-23 11:25 rstory
+
+ * snmplib/container_binary_array.c:
+
+ free container after freeing contents
+
+2003-05-23 11:24 rstory
+
+ * include/net-snmp/library/container.h,
+ snmplib/container.c:
+
+ update container free macro/code to deal w/pointer being deleted
+
+2003-05-23 11:22 rstory
+
+ * agent/mibgroup/ucd-snmp/logmatch.c:
+
+ EXTENSIBLEMIB -> UCDAVIS_MIB
+
+2003-05-14 10:30 rstory
+
+ * configure:
+
+ configure to match config.in
+
+2003-05-14 10:28 rstory
+
+ * configure.in:
+
+ fix net-snmp-config chmod to work from configure and config.status
+
+2003-05-12 22:58 hardaker
+
+ * apps/snmptrapd.c:
+
+ Patch #735511 from Alex Burger: fix snmptrapd to ensure there are the correct number of varbinds
+
+2003-05-12 22:55 hardaker
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ Patch #736784 from Ron Tabor: fix proxies for restarted NSMPv3 sub-agents
+
+2003-05-08 16:16 hardaker
+
+ * README:
+
+ mention Andrew Findlay
+
+2003-05-08 16:15 hardaker
+
+ * perl/agent/agent.xs:
+
+ (excellent) patch #705566 from Andrew Findlay on perl agent support:
+
+ 1) Agent cannot return MAC addresses containing zero octet.
+
+ 2) Agent coredumps when trying to return IP addresses
+ if these are supplied as dotted-quad or as a hostname
+ that fails to resolve.
+
+ 3) Agent corrupts OID values.
+
+ 4) Agent truncates any OCTET_STRING or BIT_STRING that
+ contains a zero octet (this is the root cause of (1) above)
+
+ API changes introduced:
+
+ a) IP addresses now passed as binary strings (4 octets
+ for IPv4) rather than dotted-quad or name. This
+ sidesteps the IPv4/IPv6 problem and leaves the calling
+ script to deal with name->address resolution and
+ associated error handling.
+
+2003-05-08 09:42 hardaker
+
+ * README:
+
+ mention Alex Burger, who submitted the perl win32 patches
+
+2003-05-08 09:32 hardaker
+
+ * README:
+
+ mention Stephen
+
+2003-05-08 09:32 hardaker
+
+ * include/net-snmp/library/mib.h,
+ include/net-snmp/library/parse.h,
+ include/net-snmp/library/snmp_api.h,
+ include/net-snmp/library/snmp_client.h, snmplib/mib.c
+, snmplib/snmp_api.c, snmplib/snmp_client.c
+:
+
+ patch #710275 from Stephen J. Friedl: const fixes for APIs that don't modify their arguments
+
+2003-05-08 09:28 hardaker
+
+ * include/net-snmp/library/system.h:
+
+ missed a commit for a perl patch
+
+2003-05-08 09:22 hardaker
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ Applied patch #712101: minor irix fix
+
+2003-05-08 09:21 hardaker
+
+ * NEWS:
+
+ Mention patch #715603
+
+2003-05-08 09:18 hardaker
+
+ * perl/: Makefile.PL, Makefile.subs.pl,
+ ASN/Makefile.PL, OID/Makefile.PL,
+ SNMP/Makefile.PL, SNMP/README, SNMP/SNMP.xs
+, agent/Makefile.PL,
+ agent/default_store/Makefile.PL,
+ default_store/Makefile.PL:
+
+ patch #715603: fix perl module builds under windows
+
+2003-05-08 07:10 rstory
+
+ * agent/helpers/table_array.c:
+
+ try to use default container if none specified; non-existent row status not
+ legal for a new row; sanity check asserts; remove unused cooperative
+ notification code; check for null table container
+
+2003-05-08 07:06 rstory
+
+ * agent/Makefile.in:
+
+ remove object_monitor as it doesn't do anything and would be a new feature if
+ it did
+
+2003-05-08 07:05 rstory
+
+ * dist/nsb-functions:
+
+ fix sysname translation for /; allow extra config to be specified in
+ environment var
+
+2003-05-08 07:02 rstory
+
+ * include/net-snmp/library/snmp_assert.h:
+
+ chg NET_SNMP_USE_ASSERT define to NETSNMP_USE_ASSERT to be consistent
+
+2003-05-08 06:58 rstory
+
+ * include/net-snmp/library/container.h,
+ snmplib/container.c:
+
+ apply patch [ 724927 ] to fix log msg; add \n to log msgs
+
+2003-05-05 15:35 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ document agentxPingInterval
+
+2003-05-05 10:35 rstory
+
+ * configure:
+
+ configure to match configure.in
+
+2003-05-05 10:29 rstory
+
+ * Makefile.in, configure.in:
+
+ chmod net-snmp-config after configure, instead in make
+
+2003-04-03 15:12 rstory
+
+ * include/net-snmp/library/tools.h:
+
+ wrap SNMP_FREE macro w/do while, so it won't affect if/then flow
+
+2003-03-28 06:48 hardaker
+
+ * README.krb5:
+
+ Ken Hornstein noted that the rwuser -s flag was missing it's argument
+
+2003-03-28 06:47 hardaker
+
+ * snmplib/snmpksm.c:
+
+ Patch from Ken for misc krb5 fixes (encryption types, New crypto support,...
+
+2003-03-19 11:46 rstory
+
+ * Makefile.in:
+
+ remove trailing \ from perl rules
+
+-------------------------------------------------------------------------------
+
+Changes: V5.0.7 -> V5.0.8
+
+2003-03-17 17:33 rstory
+
+ * NEWS, man/netsnmp_handler.3,
+ man/netsnmp_table.3, man/netsnmp_table_data.3:
+
+ update for 5.0.8
+
+2003-03-17 17:20 rstory
+
+ * sedscript.in, snmplib/snmp_version.c, FAQ
+, README, perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.8 )
+
+2003-03-14 14:55 rstory
+
+ * FAQ, README, sedscript.in,
+ agent/Makefile.depend, agent/helpers/Makefile.depend
+, agent/mibgroup/Makefile.depend,
+ apps/Makefile.depend, apps/snmpnetstat/Makefile.depend
+, perl/SNMP/SNMP.pm, snmplib/Makefile.depend
+, snmplib/snmp_version.c:
+
+ update for 5.0.8.pre2
+
+2003-03-14 14:40 rstory
+
+ * ChangeLog, NEWS:
+
+ update for 5.0.8.pre2
+
+2003-03-14 13:53 rstory
+
+ * man/: netsnmp_table.3, netsnmp_table_dataset.3
+:
+
+ update for 5.0.8.pre2
+
+2003-03-14 13:45 rstory
+
+ * Makefile.in:
+
+ trailing slash on srcdir for comment checks
+
+2003-03-14 13:44 rstory
+
+ * dist/nsb-functions:
+
+ more extra modules and transports
+
+2003-03-14 12:44 rstory
+
+ * include/net-snmp/agent/agent_handler.h:
+
+ use new macro for inlining; fix some indent madness
+
+2003-03-14 12:43 rstory
+
+ * include/net-snmp/library/container.h:
+
+ use new macro for testing if inlining is on
+
+2003-03-14 12:40 rstory
+
+ * include/net-snmp/system/: aix.h, hpux.h,
+ irix.h:
+
+ don't undef inline
+
+2003-03-14 12:40 rstory
+
+ * snmplib/container.c:
+
+ rename macro used to test for inlining
+
+2003-03-14 12:39 rstory
+
+ * win32/: config.h, net-snmp/net-snmp-config.h:
+
+ if inline macro not defined, define as empty
+
+2003-03-14 12:37 rstory
+
+ * agent/agent_handler.c, agent/agent_registry.c
+, agent/object_monitor.c, agent/snmp_agent.c
+, agent/helpers/table.c,
+ agent/helpers/table_array.c, agent/helpers/table_data.c
+, agent/helpers/table_dataset.c,
+ agent/helpers/table_iterator.c,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/table_data.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/library/data_list.h, snmplib/data_list.c
+, snmplib/oid_stash.c:
+
+ replace inline w/macro
+
+2003-03-13 19:03 hardaker
+
+ * agent/snmp_agent.c:
+
+ patch from Tommy Christensen to fix some AgentX (mostly) memory leaks
+
+2003-03-12 13:40 hardaker
+
+ * net-snmp-config.in:
+
+ patch #699380: From Christophe Kalt: make net-snmp-config do what it's document to do (add -L@libdir@)
+
+2003-03-12 11:48 hardaker
+
+ * snmplib/snmp_api.c:
+
+ patch #700672: reset itmp to the new value length after decoding a hex string
+
+2003-03-11 17:37 hardaker
+
+ * snmplib/scapi.c:
+
+ Applied openssl dynamic version hack/fix
+
+2003-03-11 15:14 rstory
+
+ * agent/Makefile.in:
+
+ add WRAPLIBS var instead of direct substitution
+
+2003-03-11 15:12 rstory
+
+ * net-snmp-config.in:
+
+ add WRAPLIBS to --agent-libs and --external-agent-libs
+
+2003-03-11 00:31 rstory
+
+ * configure:
+
+ revert to 2.13
+
+2003-03-06 01:44 rstory
+
+ * configure:
+
+ update for new configure.in
+
+2003-03-06 01:41 rstory
+
+ * configure.in:
+
+ fix libwrap w/nsl; make sure all quotes restored before using AC macros. This
+ seems to mess up the config output while checking for modules, but w/out it,
+ I get errors from m4 when running autoconf.
+
+2003-03-05 20:51 rstory
+
+ * .cvsignore:
+
+ ignore net-snmp-config-x
+
+2003-03-05 20:49 rstory
+
+ * agent/mibgroup/versiontag:
+
+ check for an optional 3rd param, nocvs, to not commit after updating version
+
+2003-03-05 20:48 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ put all the version number changes in the same step
+
+2003-03-05 20:21 rstory
+
+ * FAQ, README:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.8.pre1 )
+
+2003-03-05 20:00 rstory
+
+ * sedscript.in, perl/SNMP/SNMP.pm,
+ snmplib/snmp_version.c:
+
+ update version to 5.0.8.pre1
+
+2003-03-05 19:04 rstory
+
+ * man/snmpd.conf.5.def:
+
+ back out docs for new functionality accidentally added when applying patch
+
+2003-03-05 18:40 rstory
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ back out new functionality accidentally added when applying patch
+
+2003-03-05 18:20 rstory
+
+ * README.solaris:
+
+ updates from Bruce Shaw
+
+2003-03-05 18:18 rstory
+
+ * man/.cvsignore:
+
+ add snmpd.8
+
+2003-03-05 18:12 rstory
+
+ * man/: netsnmp_agent.3, netsnmp_handler.3,
+ netsnmp_library.3, netsnmp_mib_utilities.3,
+ netsnmp_table_data.3:
+
+ updates for 5.0.8
+
+2003-03-05 18:04 rstory
+
+ * doxygen.conf:
+
+ update to 5.0.8
+
+2003-03-05 17:58 rstory
+
+ * dist/README.build-scripts:
+
+ remove obsolete argument; fix typo
+
+2003-03-05 17:58 rstory
+
+ * Makefile.in:
+
+ exclude ftp from comment check; use egrep
+
+2003-03-05 17:55 rstory
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ chg C++ style comment
+
+2003-03-05 17:50 rstory
+
+ * testing/TESTCONF.sh:
+
+ argh! FreeBSD is driving me crazy! set RANDOM=2 if RANDOM not defined; use test
+
+2003-03-05 17:22 rstory
+
+ * testing/TESTCONF.sh:
+
+ simplify netstat args & tweak grep regex for multi platform compatability
+
+2003-03-05 17:11 rstory
+
+ * testing/TESTCONF.sh:
+
+ check /bin and /usr/bin for netstat (probably a good job for configure)
+
+2003-03-05 17:02 rstory
+
+ * testing/TESTCONF.sh:
+
+ missed one, re: (( )) -> expr
+
+2003-03-05 16:58 rstory
+
+ * testing/TESTCONF.sh:
+
+ use more portable expr instead of (( )) for arithmetic expressions
+
+2003-03-05 16:16 rstory
+
+ * testing/TESTCONF.sh:
+
+ for systems with /bin/netstat, check that snmpd port is not in use. If it is,
+ try up to three random others before giving up.
+
+2003-03-05 15:16 rstory
+
+ * dist/: nsb-functions, nsb-package:
+
+ don't prompt between steps by default
+
+2003-03-05 15:11 rstory
+
+ * testing/RUNTESTS:
+
+ import SNMP_SLEEP time from environment, if available
+
+2003-03-05 15:10 rstory
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ don't redefine inline
+
+2003-03-05 15:08 rstory
+
+ * Makefile.top:
+
+ version 5.0.8
+
+2003-03-05 15:07 rstory
+
+ * .cvsignore:
+
+ ignore some files autoconf may create
+
+2003-03-05 13:42 nba
+
+ * aclocal.m4, config.guess, config.sub
+, ltmain.sh, configure:
+
+ Update libtool to version 1.4.3, for the benefit of Darwin
+
+2003-03-05 13:39 nba
+
+ * configure.in:
+
+ Dont force -I/usr/local/include for --with-dmalloc
+
+2003-03-04 12:47 hardaker
+
+ * agent/mibgroup/agent/nsModuleTable.c:
+
+ wrong type returned for nsModuleModes as reported by Michael Kirkham
+
+2003-03-03 15:03 nba
+
+ * man/snmpd.conf.5.def:
+
+ Mention the AgentXAddress, AgentsRetries and AgentXTimeout parameters
+
+2003-03-03 14:25 nba
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ Add support for OpenBSD 3. Sort some lines for easier reference.
+
+2003-03-01 10:27 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ agentx patch from Tommy Christensen: better error checking
+
+2003-03-01 09:59 rstory
+
+ * agent/mibgroup/agentx/master.c:
+
+ agentx patch from Tommy Christensen: don't create delegated cache for CLEANUPSET
+
+2003-02-28 23:46 hardaker
+
+ * perl/SNMP/Makefile.PL:
+
+ typo
+
+2003-02-28 23:11 hardaker
+
+ * perl/SNMP/Makefile.PL:
+
+ Patch #597629 from Matt Selsky to fix man page installation
+
+2003-02-28 13:18 nba
+
+ * agent/snmpd.c, apps/snmptrapd.c:
+
+ Better error message if we cannot create pid file
+
+2003-02-28 13:17 nba
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ Use FS types with Linux
+
+2003-02-27 00:59 rstory
+
+ * local/mib2c.array-user.conf:
+
+ sync w/main
+
+2003-02-26 18:52 rstory
+
+ * Makefile.top:
+
+ sync w/main: put in missing INSTALL_DATA
+
+2003-02-26 18:05 nba
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ Implement sysRawInterrupts and sysRawContext for Solaris
+
+2003-02-26 14:30 nba
+
+ * snmplib/mib.c:
+
+ Fix a C precedence botch-up, thanks to Fabrício Las Casas <Fabricio@atan.com.br>
+
+2003-02-26 14:14 nba
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ Implement the ssRawInterrupts and ssRawContext counters in Linux
+
+2003-02-26 14:13 nba
+
+ * apps/snmptrapd.c:
+
+ Fix the -S option
+
+2003-02-25 14:38 rstory
+
+ * Makefile.in:
+
+ fix logic of test operation
+
+2003-02-25 14:33 rstory
+
+ * Makefile.in, Makefile.top:
+
+ use AUTO(CONF|HEADER) from configure, instead of hardcoded; don't try and run
+ AUTO(CONF|HEADER) if not found
+
+2003-02-25 14:11 rstory
+
+ * man/snmpd.8.def:
+
+ sync w/main branch: new file
+
+2003-02-25 14:03 rstory
+
+ * apps/snmptrapd.c:
+
+ sync w/main branch (correctly, this time)
+
+2003-02-25 13:49 rstory
+
+ * Makefile.in:
+
+ sync w/main branch: add NOAUTODEPS
+
+2003-02-25 13:38 rstory
+
+ * dist/nsb-functions:
+
+ sync w/main branch: add smux to dist modules; move make test into nsb-make;
+ remove tee so rc is preserved; use new NOAUTODEPS
+
+2003-02-25 13:29 rstory
+
+ * snmplib/snmpv3.c:
+
+ sync w/main branch:
+ Recognise "defVersion v3" as well as "defVersion 3" as documented
+ in the man pages (prior to Peter Breitenlohner's correction)
+ [We might as well support both styles....]
+
+2003-02-25 13:20 rstory
+
+ * EXAMPLE.conf.def, sedscript.in,
+ man/Makefile.in, man/mib2c.1.def,
+ man/read_config.3.def, man/snmp.conf.5.def,
+ man/snmp_config.5.def, man/snmpcmd.1.def,
+ man/snmpconf.1.def, man/snmpd.1.def,
+ man/snmptrapd.conf.5.def, mibs/Makefile.in:
+
+ sync w/main branch: (I hope I got this right)
+ -Apply Peter Breitenlohner's documentation changes
+ (patches #692381, 692382 and 692388)
+
+2003-02-25 13:16 rstory
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ sync w/main branch:
+ patch #657808: calculate a proper ifSpeed under linux when possible
+ and do more proper ifOperStatus state determination.
+
+2003-02-25 13:15 rstory
+
+ * agent/helpers/table_data.c:
+
+ sync w/main branch:
+ - Irfan Sheriff pointed out a bug with getnext requests directly to a column.
+ - check entry node as suggested by Irfan Sheriff
+
+2003-02-25 13:14 rstory
+
+ * snmplib/system.c:
+
+ sync w/main branch:
+ Remove last remaining use of 'nlist' under HP-UX 10 & 11.
+ As per patch #656773 from Johannes Schmidt-Fischer
+
+2003-02-25 13:13 rstory
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ sync w/main branch:
+ Checking the length of a string buffer once is sufficient.
+ Using 'strnncpy' [sic] to check this length twice is unnecessary...
+
+2003-02-25 13:12 rstory
+
+ * Makefile.in:
+
+ sync w/main branch:
+ - Mess with output of doxygen to add sf logos, etc, to the bottom of the
+ generated html files.
+ - Apply Peter Breitenlohner's net-snmp-config patch (#692373)
+
+2003-02-25 13:11 rstory
+
+ * agent/snmpd.c:
+
+ sync w/main branch:
+ Patch #655154 from Joel Rosdahl: more proper demonization:
+ - close stdin/stdout/stderr if appropriate.
+ - double fork.
+ - chdir / [except under windows]
+
+2003-02-25 13:10 rstory
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ sync w/main branch:
+ Patch #662169 from Jan Willem Luiten: diskio support for Darwin
+
+2003-02-25 13:10 rstory
+
+ * perl/SNMP/t/: bulkwalk.t, set.t:
+
+ sync w/main branch:
+ Fix tests for bulkwalk (duplicate header) and set (invalid OID constant)
+
+2003-02-25 13:09 rstory
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ sync w/main branch:
+ Accommodate a fussy IRIX environment, which is picky about <unistd.h>
+ See bug #667726
+
+2003-02-25 13:04 rstory
+
+ * acconfig.h:
+
+ sync w/main branch:
+ Bruce Shaw pointed out a comment typo
+
+2003-02-25 13:02 rstory
+
+ * perl/: ASN/Makefile.PL, OID/Makefile.PL,
+ SNMP/Makefile.PL, agent/Makefile.PL,
+ default_store/Makefile.PL:
+
+ sync w/main branch:
+ fix my declarations as pointed out by Andrew Page
+
+2003-02-25 13:01 rstory
+
+ * snmplib/mib.c:
+
+ sync w/main branch:
+ An additional change to support 't' hints
+
+2003-02-25 13:00 rstory
+
+ * man/snmptrapd.8.def:
+
+ sync w/main branch:
+ -document patch #674218: reopen log files on HUP.
+ -Apply Peter Breitenlohner's documentation changes
+ (patches #692381, 692382 and 692388)
+
+2003-02-25 12:59 rstory
+
+ * man/snmpd.conf.5.def:
+
+ sync w/main branch:
+ -document monitor -t for threshold monitoring
+ -Apply Peter Breitenlohner's documentation changes
+ (patches #692381, 692382 and 692388)
+
+2003-02-25 12:57 rstory
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ sync w/main branch:
+ Patch from Christophe to support monitor -t for threshold monitoring
+
+2003-02-25 12:55 rstory
+
+ * FAQ:
+
+ sync w/main branch:
+ Clarify the local-only access for non-standard port AgentX connections
+
+2003-02-25 12:54 rstory
+
+ * apps/snmptrapd.c:
+
+ sync w/main branch:
+ - close and re-open log file on receiving a HUP (patch 674218, submitted
+ by anonymous)
+
+2003-02-25 12:52 rstory
+
+ * net-snmp-config.in:
+
+ sync w/main branch: Bruce Shaw pointed out a comment typo
+
+2003-02-25 09:04 dts12
+
+ * man/snmpd.8.def:
+
+ Apply Peter Breitenlohner's configuration-related documentation and installation changes.
+ (patches #692372, 692377, 692379 and 692386)
+
+2003-02-13 20:02 hardaker
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ Patch #654329: double check lengths when copying
+
+2003-02-12 09:01 hardaker
+
+ * agent/mibgroup/tunnel/tunnel.h:
+
+ update
+
+2003-02-11 11:13 hardaker
+
+ * agent/mibgroup/ucd-snmp/: pass.c, pass_persist.c
+:
+
+ patch #667694 (anon) to add back newlines to pass code
+
+2003-02-03 10:27 hardaker
+
+ * snmplib/snmp_api.c:
+
+ From Richard Laing: change value check of a string to use a proper length.
+
+2003-01-24 10:47 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ patch #672021 from Joshua Giles: large set request fixes
+
+2003-01-20 23:21 rstory
+
+ * snmplib/container_binary_array.c:
+
+ add missing brace
+
+2003-01-20 23:13 rstory
+
+ * agent/mibgroup/versiontag:
+
+ add back (accidentally deleted) creation of gzipped tarball
+
+2003-01-20 23:09 rstory
+
+ * snmplib/test_binary_array.c:
+
+ add string test case
+
+2003-01-20 23:09 rstory
+
+ * snmplib/container_binary_array.c:
+
+ fix array_qsort; fix binary search; con't recurse on insert, del, etc since
+ the INSERT/DELETE macros already handle multiple indexes
+
+2003-01-20 22:54 rstory
+
+ * include/net-snmp/library/default_store.h,
+ snmplib/snmp_api.c:
+
+ official patch [ 669707 ] 5.0.7: 16-Bit Request IDs
+
+2003-01-20 22:52 rstory
+
+ * include/net-snmp/library/container.h,
+ snmplib/container.c:
+
+ fix typo in log message; add netsnmp_compare_mem
+
+2003-01-20 22:51 rstory
+
+ * agent/mibgroup/versiontag:
+
+ create md5sums after creating gzipped tarball
+
+2003-01-20 22:51 rstory
+
+ * Makefile.rules:
+
+ add another level of directories to make depend, per dts on coders
+ (thought this was in 5.0.7, but apparently not!)
+
+2003-01-14 08:56 hardaker
+
+ * agent/snmpd.c, doxygen.conf, agent/agent_handler.c
+, dist/RELEASE-INSTRUCTIONS:
+
+ doxygen changes
+
+2003-01-13 21:49 rstory
+
+ * man/: netsnmp_agent.3, netsnmp_handler.3:
+
+ update for 5.0.7
+
+2003-01-13 20:30 rstory
+
+ * snmplib/mib.c:
+
+ recognize new 't' code in display hints
+
+2003-01-13 20:07 rstory
+
+ * agent/helpers/table_iterator.c:
+
+ patch for memory leaks sent to coders by Jay Parlar
+
+-------------------------------------------------------------------------------
+
+Changes: V5.0.6 -> V5.0.7
+
+2003-01-11 01:15 rstory
+
+ * .cvsignore:
+
+ ignore configure-summary
+
+2003-01-11 01:14 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend
+, agent/mibgroup/Makefile.depend, apps/Makefile.depend
+, apps/snmpnetstat/Makefile.depend,
+ snmplib/Makefile.depend:
+
+ make depend
+
+2003-01-11 01:08 rstory
+
+ * .cvsignore:
+
+ ignore variations of changelog.add
+
+2003-01-10 20:09 hardaker
+
+ * snmplib/: mib.c, snmp_api.c:
+
+ doxygen output tags to put the recently defined functions into groups.
+
+2003-01-10 20:09 hardaker
+
+ * man/: Makefile.in, netsnmp_agent.3,
+ netsnmp_bulk_to_next.3, netsnmp_debug.3,
+ netsnmp_handler.3, netsnmp_instance.3,
+ netsnmp_library.3, netsnmp_mib_utilities.3,
+ netsnmp_mode_end_call.3, netsnmp_multiplexer.3,
+ netsnmp_old_api.3, netsnmp_read_only.3,
+ netsnmp_scalar.3, netsnmp_serialize.3, netsnmp_table.3
+, netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_todo.3, netsnmp_watcher.3:
+
+ doxygen updates
+
+2003-01-10 17:38 hardaker
+
+ * configure, configure.in:
+
+ opps
+
+2003-01-10 17:29 hardaker
+
+ * configure, configure.in:
+
+ remove double checking output
+
+2003-01-10 14:33 hardaker
+
+ * testing/tests/T0160snmpv2cbulkget:
+
+ fix positional arguments
+
+2003-01-10 09:04 dts12
+
+ * FAQ:
+
+ Reference Bruce Shaw's discussion of the perl compilation problems
+ (see README.solaris)
+
+2003-01-10 08:31 dts12
+
+ * FAQ:
+
+ Mention AgentX under windows, and beef up the perl stuff a bit.
+ Add a missing entry in the contents list.
+ (This may prove too late for 5.0.8, but at least it'll be ready for next time!)
+
+2003-01-09 18:41 hardaker
+
+ * man/Makefile.in:
+
+ make doc update.
+
+2003-01-09 18:38 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_bulk_to_next.3,
+ netsnmp_debug.3, netsnmp_handler.3, netsnmp_instance.3
+, netsnmp_mode_end_call.3, netsnmp_multiplexer.3,
+ netsnmp_old_api.3, netsnmp_read_only.3,
+ netsnmp_scalar.3, netsnmp_serialize.3, netsnmp_table.3
+, netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_todo.3, netsnmp_watcher.3:
+
+ make doc update.
+
+2003-01-09 18:37 hardaker
+
+ * agent/helpers/Makefile.in, agent/helpers/mode_end_call.c
+, include/net-snmp/agent/all_helpers.h,
+ include/net-snmp/agent/mode_end_call.h:
+
+ end-of-mode helper to call more handlers after processing the main
+ line. Functionally allows parallel handler trees and callbacks after
+ a particular mode is completed (useful for things registered under a
+ serialize handler when you don't know when the mode is over).
+ (not used anywhere in production code yet.).
+
+2003-01-09 11:55 dts12
+
+ * FAQ:
+
+ Mention the perl shared/static library problem,
+ the unresponsive agent problem (and fix), and
+ disclaim all knowledge of David Town's Net::SNMP module,
+
+2003-01-09 10:27 hardaker
+
+ * testing/tests/: T0160snmpv2cbulkget, T0220snmpv3bulkget
+:
+
+ GetBulk testing supplied by Xiaofeng Ling
+
+2003-01-09 10:26 hardaker
+
+ * testing/RUNTESTS:
+
+ Add -x flag for calling subtests with "sh -x".
+ Fix number counting for interactive output.
+
+2003-01-07 18:49 hardaker
+
+ * COPYING (V4-2-patches.8), COPYING:
+
+ year update
+
+2003-01-07 13:18 hardaker
+
+ * FAQ (V4-2-patches.58), FAQ:
+
+ irc server name change
+
+2003-01-07 11:01 hardaker
+
+ * snmplib/mib.c:
+
+ bug #663628 and patch: fix ip address index parsing from OIDs
+
+2003-01-07 04:53 dts12
+
+ * agent/helpers/table_iterator.c:
+
+ Remove redundant code to free 'callback_data_keep' data.
+ This branch would never be invoked, and is in the wrong
+ place anyway. Patch supplied by Jay Parlar
+
+2003-01-06 11:16 nba
+
+ * Makefile.in:
+
+ Install Solaris 9 header
+
+2003-01-05 18:14 nba
+
+ * win32/win32.opt:
+
+ Make it compile with VC++
+
+2003-01-05 17:28 nba
+
+ * win32/: encode_keychange/encode_keychange.dsp, win32.opt
+, libsnmp_dll/libsnmp.def:
+
+ Make it compile with VC++
+
+2003-01-05 15:45 nba
+
+ * mibs/: Makefile.mib, SNMP-FRAMEWORK-MIB.txt,
+ SNMP-MPD-MIB.txt, SNMP-NOTIFICATION-MIB.txt,
+ SNMP-PROXY-MIB.txt, SNMP-TARGET-MIB.txt,
+ SNMP-USER-BASED-SM-MIB.txt, SNMP-VIEW-BASED-ACM-MIB.txt
+, SNMPv2-MIB.txt, SNMPv2-TM.txt, rfclist:
+
+ Update to current RFC versions
+
+2003-01-03 15:50 rstory
+
+ * configure, configure.in:
+
+ don't call AC_DISABLE_SHARED, as sets the default to disabled (it's very
+ presence in configure.in generates a configure with shared disabled, even
+ if it was in an if block; for developer default, set enable_shared directly
+ unless it was previously set; test that enable_shared=yes for embedded-perl
+
+2003-01-03 08:02 dts12
+
+ * FAQ (V4-2-patches.57), FAQ:
+
+ Mention the Stratus VOS port. (Thanks to Brandon Hall)
+
+2003-01-02 18:00 rstory
+
+ * include/net-snmp/library/container.h:
+
+ parens around x in macro in case x is multiple C tokens
+
+2002-12-22 12:32 rstory
+
+ * sedscript.in, snmplib/snmp_version.c, FAQ,
+ README, perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.7.pre2 )
+
+2002-12-22 12:31 rstory
+
+ * ChangeLog, NEWS:
+
+ update for 5.0.7.pre2
+
+2002-12-22 12:20 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend
+, agent/mibgroup/Makefile.depend, apps/Makefile.depend
+, apps/snmpnetstat/Makefile.depend,
+ snmplib/Makefile.depend:
+
+ make depend
+
+2002-12-20 07:58 nba
+
+ * Makefile.in:
+
+ clean away net-snmp-config on make clean
+
+2002-12-20 07:57 nba
+
+ * include/net-snmp/mib_api.h,
+ include/net-snmp/library/oid_stash.h, snmplib/oid_stash.c
+:
+
+ stash the oid_stash ...
+
+2002-12-20 04:49 nba
+
+ * snmplib/snmp_api.c:
+
+ A patch from V4 that didn't make it ... allow list of numeric bits setting BITS
+
+2002-12-20 02:50 hardaker
+
+ * include/net-snmp/library/oid_stash.h, snmplib/oid_stash.c
+:
+
+ add a global callback function for registering directly via a callback.
+
+2002-12-20 02:35 hardaker
+
+ * include/net-snmp/utilities.h:
+
+ add callback.h
+
+2002-12-20 02:22 hardaker
+
+ * snmplib/read_config.c:
+
+ fix persistent storage file renaming. (snprintf change mistake)
+
+2002-12-20 02:21 hardaker
+
+ * include/net-snmp/library/oid_stash.h, snmplib/oid_stash.c
+:
+
+ some new routines for saving oid stash data to persistent storage.
+ (not used anywhere in current production code)
+
+2002-12-19 17:51 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ - watch for undefs passed in as a value to a SET clause.
+ - change BITS to a Octet String as it should be.
+ - on a side note, do you know that the Net-SNMP parser doesn't
+ distinguish between BITS and BIT STRING in it's list of types? I
+ don't think it's possible to use both types in the code today
+ (which is fine, since BIT STRING is not used in SNMPv2 and beyond).
+
+2002-12-19 17:49 hardaker
+
+ * perl/OID/OID.xs:
+
+ print a warning when you can't parse an OID (err, not ideal)
+
+2002-12-19 17:48 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - misc bug fixes.
+ - skip SETing columns with no value passed in.
+
+2002-12-19 14:43 nba
+
+ * agent/mibgroup/: examples/example.c, host/hr_network.c
+, host/hr_swinst.c:
+
+ Being a bit quick, eh, Dave ...
+
+2002-12-19 11:14 dts12
+
+ * agent/mibgroup/mibII/: at.c (V4-2-patches.12), at.c:
+
+ Ensure the ifname buffer is big enough to read in a full-length name.
+ (From the SUSE "audit" patch)
+
+2002-12-19 11:05 dts12
+
+ * agent/snmpd.c, agent/mibgroup/host/hr_print.c,
+ apps/encode_keychange.c, apps/snmptrapd_handlers.c, snmplib/mib.c
+ (V4-2-patches.[28,9,3,3,30]), agent/snmpd.c,
+ agent/mibgroup/host/hr_print.c, apps/encode_keychange.c
+, apps/snmptrapd_handlers.c, snmplib/mib.c:
+
+ Detect when memory allocations fail, and don't plough on regardless.
+ (Based on changes within the SUSE "audit" patch)
+
+2002-12-19 10:07 dts12
+
+ * agent/agent_trap.c, agent/snmp_agent.c,
+ agent/mibgroup/util_funcs.c,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/host/hr_device.c,
+ agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/mta_sendmail.c,
+ agent/mibgroup/mibII/system_mib.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/dlmod.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/extensible.c,
+ agent/mibgroup/ucd-snmp/pass.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proc.c, apps/encode_keychange.c
+, apps/snmptrapd.c, apps/snmptrapd_handlers.c,
+ apps/snmpnetstat/inet.c, apps/snmpnetstat/inet6.c,
+ snmplib/asn1.c, snmplib/mib.c, snmplib/parse.c,
+ snmplib/read_config.c, snmplib/snmp_api.c,
+ snmplib/snmpv3.c, snmplib/vacm.c:
+
+ The Great SUSE 'sprintf' Hunt.....
+
+2002-12-19 06:02 jbpn
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ - code with BSDi4
+
+2002-12-19 05:50 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - change a comment that doesn't take into account the transport stuff
+ - fix some particularly bad formatting in snmp_open_ex
+
+2002-12-18 13:50 hardaker
+
+ * agent/mibgroup/agent/nsModuleTable.c:
+
+ remove mem-leak comment. Out of date and was fixed
+
+2002-12-18 13:47 hardaker
+
+ * agent/mibgroup/agentx/agentx_config.c, man/snmpd.conf.5.def
+:
+
+ delete experimental warning about agentx
+
+2002-12-18 13:40 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ fix bug#655488: descriptions of ssIORawReceived and ssRawInterrupts were reversed
+
+2002-12-18 08:19 jbpn
+
+ * agent/snmpd.c:
+
+ - restart stderr logging on HUP (if -L was given on command line)
+
+2002-12-17 19:33 rstory
+
+ * local/mib2c.array-user.conf:
+
+ remove ';' from define; if table has a storage type, check that it's not
+ read only before allowing sets
+
+2002-12-17 19:26 rstory
+
+ * local/mib2c.array-persistent.conf:
+
+ never mind
+
+2002-12-17 19:02 hardaker
+
+ * perl/OID/test.pl:
+
+ Don't check for prefixes in test. They don't exist. However, do set SNMPCONFPATH in test initialization to a bogus value
+
+2002-12-17 18:58 hardaker
+
+ * perl/OID/OID.xs:
+
+ remove direct call to init_snmp(). This is already called by the .pm file
+
+2002-12-17 10:22 rstory
+
+ * local/mib2c.array-persistent.conf:
+
+ persistence for array-tables
+
+2002-12-17 10:07 rstory
+
+ * include/net-snmp/library/read_config.h,
+ snmplib/read_config.c:
+
+ add read_config_store_data_prefix; add ASN_TIMETICKS w/ASN_UNSIGNED cases
+
+2002-12-17 09:44 rstory
+
+ * snmplib/snmpUDPDomain.c:
+
+ don't use SO_REUSE_ADDR so agent port can't be hijacked
+
+2002-12-17 09:43 rstory
+
+ * net-snmp-config.in:
+
+ use local var for base agent libs; reorder base agent libs so static linking
+ works
+
+2002-12-16 18:32 nba
+
+ * snmplib/scapi.c, agent/mibgroup/mibII/mta_sendmail.c,
+ agent/mibgroup/mibII/mta_sendmail.h:
+
+ Yet another compiler warning ...
+
+2002-12-16 17:50 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ remove bogus comment reference to table_dataset helper.
+
+2002-12-16 17:42 nba
+
+ * agent/mibgroup/disman/mteEventNotificationTable.c,
+ agent/mibgroup/disman/mteEventTable.c,
+ agent/mibgroup/disman/mteEventTable.h,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/disman/mteTriggerTable.h, apps/snmptrapd.c
+, include/net-snmp/library/tools.h, snmplib/tools.c
+:
+
+ Spread some magic dust to quell compiler warnings (why isn't --enable-slient-libtool the default ...)
+
+2002-12-16 11:44 jbpn
+
+ * agent/mibgroup/agentx/master.c:
+
+ - fix small memory leak (peername is copied by snmp_open_ex)
+
+2002-12-16 11:31 jbpn
+
+ * snmplib/mib.c:
+
+ - fix small memory leak
+
+2002-12-16 11:19 jbpn
+
+ * snmplib/parse.c:
+
+ - fix memory leak
+
+2002-12-16 10:02 rstory
+
+ * snmplib/container.c:
+
+ remove redundant include (caused problems on Sun 5.7, reported by jbpn)
+
+2002-12-16 08:22 rstory
+
+ * dist/nsb-functions:
+
+ configure w/out developer
+
+2002-12-16 08:18 rstory
+
+ * configure, configure.in:
+
+ DEVFLAGS="" if not developer
+
+2002-12-16 02:39 nba
+
+ * snmplib/: oid_stash.c, scapi.c, snmpAAL5PVCDomain.c
+, snmpIPXDomain.c, snmpTCPIPv6Domain.c,
+ snmpUDPIPv6Domain.c:
+
+ dmalloc support
+
+2002-12-16 02:39 nba
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ Possible leak of fd on error return
+
+2002-12-14 10:22 rstory
+
+ * FAQ, README, sedscript.in, perl/SNMP/SNMP.pm
+, snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.7.pre1 )
+
+2002-12-14 10:21 rstory
+
+ * ChangeLog, NEWS:
+
+ update for 5.0.7.pre1
+
+
+
+-------------------------------------------------------------------------------
+
+Changes: V5.0.6 -> V5.0.7pre1
+
+2002-12-14 09:59 rstory
+
+ * dist/nsb-functions:
+
+ check for agent/mibgroup; fix modules for config_dist
+
+2002-12-14 09:58 rstory
+
+ * man/: netsnmp_bulk_to_next.3, netsnmp_debug.3,
+ netsnmp_handler.3, netsnmp_old_api.3,
+ netsnmp_read_only.3, netsnmp_serialize.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_data.3, netsnmp_table_dataset.3,
+ netsnmp_todo.3:
+
+ update for 5.0.7.pre1
+
+2002-12-14 09:54 rstory
+
+ * Makefile.top:
+
+ bump rev to 5.0.7
+
+2002-12-14 09:49 rstory
+
+ * Makefile.in:
+
+ add -n to grep for C++ comments
+
+2002-12-14 09:47 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, apps/Makefile.depend,
+ snmplib/Makefile.depend:
+
+ make depend
+
+2002-12-14 09:45 rstory
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ remove C++ comments
+
+2002-12-14 09:30 rstory
+
+ * include/net-snmp/agent/snmp_agent.h:
+
+ add comments to some structure members
+
+2002-12-14 09:29 rstory
+
+ * agent/helpers/table_array.c:
+
+ errors during commit undo should be xxFAILED; use set_request_error instead of
+ set_mode_request_error; remove incorrect comment; more debugging; check for
+ and call lower handlers
+
+2002-12-14 09:27 rstory
+
+ * agent/helpers/table.c:
+
+ always process later passes of a set request
+
+2002-12-13 16:06 nba
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ Quell compiler warnings
+
+2002-12-13 15:47 nba
+
+ * agent/mibgroup/mibII/var_route.c, snmplib/default_store.c
+:
+
+ Quell compiler warnings
+
+2002-12-13 15:40 nba
+
+ * snmplib/scapi.c:
+
+ Fix incomplete zeroing of security data
+
+2002-12-13 15:39 nba
+
+ * snmplib/parse.c:
+
+ Fix a possible freeing of a NULL pointer
+
+2002-12-13 15:38 nba
+
+ * agent/helpers/table_dataset.c,
+ agent/mibgroup/mibII/ipAddr.c, apps/snmptrapd.c,
+ include/net-snmp/agent/table_data.h, snmplib/snmp_api.c
+:
+
+ Quell compiler warnings
+
+2002-12-13 11:38 dts12
+
+ * agent/agent_handler.c:
+
+ Clear the 'processed' flag between passes, so that handlers
+ can correctly clean up after errors have been detected.
+
+2002-12-13 11:06 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ add asser to try and cath intermittent crash i've been seeing
+
+2002-12-13 11:04 rstory
+
+ * agent/mibgroup/agentx/master.c:
+
+ log unknown agentx operation
+
+2002-12-13 10:12 rstory
+
+ * agent/helpers/table_array.c:
+
+ if no row create callback on set, use NOTWRITABLE instead of NOSUCHINSTANCE
+
+2002-12-13 10:04 rstory
+
+ * agent/helpers/debug_handler.c:
+
+ fix cut-n-paste so delegated flag displayed properly
+
+2002-12-13 10:01 rstory
+
+ * snmplib/default_store.c:
+
+ log text (APP|LIB|TOK) instead of store id in debug msgs
+
+2002-12-13 09:53 rstory
+
+ * dist/nsb-functions:
+
+ add --with-libwrap
+
+2002-12-13 09:49 rstory
+
+ * FAQ:
+
+ grammar/indention tweak + mention strip for memory footprint question
+
+2002-12-13 09:32 dts12
+
+ * perl/SNMP/Makefile.PL:
+
+ Remove explicit mention of SNMP module documentation.
+ This setting doesn't seem to be necessary, and without it,
+ the man page is installed automatically.
+
+2002-12-13 07:47 jbpn
+
+ * apps/snmptrapd.c:
+
+ - make -S do the same as snmpd -S (set the syslog facility)
+ - make -l print a warning saying that it is deprecated and -S should
+ be used instead
+
+2002-12-13 07:14 jbpn
+
+ * snmplib/read_config.c:
+
+ - increase width of token field to improve legibility of
+ configuration directive help output
+
+2002-12-12 17:46 nba
+
+ * apps/snmptable.c:
+
+ Protect against unknown -O options
+
+2002-12-12 15:56 nba
+
+ * agent/mibgroup/smux/smux.c:
+
+ Fix some size_t that really should be int
+
+2002-12-12 14:18 nba
+
+ * include/net-snmp/library/default_store.h,
+ include/net-snmp/library/mib.h, man/snmp.conf.5.def,
+ man/snmpcmd.1.def, snmplib/mib.c, snmplib/snmp_api.c
+:
+
+ A long overdue patch (#415252) from Robert Hastings that implements
+ reverse DISPLAY-HINT processing, i.e. it allows you to input data
+ formatted like the DISPLAY-HINT prescribes. Enabled by default, but
+ can be disabled with the -Ih option or noDisplayHint in snmp.conf
+
+2002-12-12 13:56 nba
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ parse oids in view statements the same way the apps do it (consistency, he said)
+
+2002-12-12 13:35 hardaker
+
+ * perl/agent/agent.xs:
+
+ Add a getRootOID function to the reginfo pointer passed into handlers.
+
+2002-12-12 13:34 rstory
+
+ * local/mib2c.array-user.conf:
+
+ change create and duplicate row to return specific context instead of generic
+ netsnmp_index; catch error from parse_oid_indexes on row creation
+
+2002-12-12 13:34 hardaker
+
+ * perl/SNMP/t/mib.t:
+
+ Print errors to STDERR instead.
+ (actually don't because these statements are commented out in the
+ first place)
+
+2002-12-12 13:33 hardaker
+
+ * agent/agent_registry.c:
+
+ Reverse the context of a context if statement so if not the context
+ then don't use the context in the given context.
+
+2002-12-12 12:56 jbpn
+
+ * apps/snmptrapd.c:
+
+ - drop long-deprecated -q and -S options
+ - minor formatting fixes
+
+2002-12-12 12:35 jbpn
+
+ * agent/snmpd.c:
+
+ - remove duplicate message in usage
+
+2002-12-12 11:37 dts12
+
+ * man/snmpd.1.def, agent/snmpd.c:
+
+ Implement a command-line option (-S) to set the facility to use when
+ logging via syslog. Based on an idea by Joel Rosdahl (Patch #627701)
+ Note that -l and -L are already taken:-(
+
+ ToDo:
+ Provide configuration directives for both this, and the syslog token ('snmpd').
+
+2002-12-12 11:18 dts12
+
+ * man/snmpd.conf.5.def, agent/mibgroup/mibII/system_mib.c
+:
+
+ Support setting of sysDescr and sysObjectID via snmpd.conf
+ configuration directives (though not via SNMP SET reqests).
+ Patches supplied by Joel Rosdahl (#627702 and #628011)
+
+2002-12-12 10:58 dts12
+
+ * agent/helpers/: all_helpers.c, table.c:
+
+ Suppress some compiler warnings.
+ Based on patch supplied by Chris Johns (#644041)
+
+2002-12-12 10:42 dts12
+
+ * agent/mibgroup/ucd-snmp/: memory_solaris2.c (V4-2-patches.6),
+ memory_solaris2.c:
+
+ Use 'sysconf' to report on Solaris memory usage.
+ Based on patch supplied by Ben Stern (#651182)
+
+2002-12-12 10:00 dts12
+
+ * agent/mibgroup/agentx/master.c:
+
+ Basic support for multiple AgentX sockets (on the master side at least).
+ See Feature Request #632556
+
+2002-12-12 08:57 rstory
+
+ * dist/Makefile:
+
+ create version tag from version so cvs export works; fix REL; add tar.gz
+ of source as dependency for rpmfiles
+
+2002-12-12 08:04 nba
+
+ * snmplib/: data_list.c, snmpCallbackDomain.c,
+ snmpTCPDomain.c, snmpUDPDomain.c, snmpUnixDomain.c
+, snmp_enum.c, snmp_secmod.c, snmp_transport.c
+:
+
+ dmalloc support
+
+2002-12-12 07:18 dts12
+
+ * snmplib/mib.c:
+
+ Document the -OU option, and alphabetise the handling of options.
+
+2002-12-12 06:25 dts12
+
+ * apps/Makefile.in:
+
+ Install 'snmpinform' as a relative link, rather than an absolute one.
+ Fix provided by the indefatigable Stefan Radman (Bug #652587)
+
+2002-12-12 05:56 dts12
+
+ * configure, configure.in:
+
+ Quote configure options when contructing net-snmp-configure and net-snmp-configure.h
+ This allows options containing spaces, etc, to be handled correctly.
+ (See Feature Request #547152)
+
+2002-12-11 16:52 nba
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ Patch for FreeBSD. Thanks to Jun Kuriyama
+
+2002-12-11 12:16 dts12
+
+ * snmplib/: snmp_logging.c (V4-2-patches.4), snmp_logging.c:
+
+ Try disabling line-buffering on Windows systems (since it
+ apparently enables full-buffering instead). See Bug #558837.
+
+2002-12-11 11:25 dts12
+
+ * perl/SNMP/t/: async.t, get.t, getnext.t,
+ notify.t, set.t:
+
+ Explicitly set SNMP version = 1 (the original default as expected by the tests)
+ This should now pass all tests apart from conf.t #3
+
+2002-12-11 06:46 dts12
+
+ * include/net-snmp/agent/auto_nlist.h:
+
+ Be more selective in using the 64-bit version of nlist. (Bug #611655)
+
+2002-12-11 06:27 dts12
+
+ * README.solaris:
+
+ Mention the non-functionality of one of the suggested approaches.
+ (Bug #617119). Reported by Quanah Gibson-Mount
+
+2002-12-11 06:20 dts12
+
+ * agent/Makefile.in:
+
+ Ensure that the destination directory exists before installing the
+ embedded perl script. (Bug #617891) Fix provided by Stefan Radman.
+
+2002-12-11 05:56 dts12
+
+ * README.snmpv3 (V4-2-patches.4), README.snmpv3:
+
+ Document the location assumptions being made in this description.
+
+2002-12-11 04:47 dts12
+
+ * include/net-snmp/library/default_store.h,
+ include/net-snmp/library/mib.h, snmplib/mib.c,
+ man/snmpcmd.1.def:
+
+ Provide a mechanism for forcing strings to be displayed in either
+ ASCII or Hex format, bypassing the "guess" mechanism as to which
+ is more appropriate. Suggested by Nick Kanakakorn.
+ Note that this does not affect objects with a Display-Hint in
+ their MIB definition.
+
+2002-12-11 04:30 dts12
+
+ * agent/ds_agent.h, agent/snmpd.c, testing/eval_tools.sh
+ (V4-2-patches.[2,26,6]), agent/agent_read_config.c,
+ agent/snmpd.c, include/net-snmp/agent/ds_agent.h,
+ testing/eval_tools.sh:
+
+ Command-line option to control whether to unlink the PID file or not.
+ Necessary for correct test operation.
+
+2002-12-11 04:21 dts12
+
+ * perl/OID/test.pl:
+
+ The latest library defaults to MODULE::name style output,
+ so adjust the expected output checks accordingly.
+ Also, there are actually 36 tests, not 35!
+
+2002-12-11 04:17 dts12
+
+ * perl/OID/OID.xs:
+
+ Initialise the SNMP libraries, to set up the OID tree.
+ Addresses bugs #638024 and #627643
+ [Qn: Do we need to supply an 'appname' (c.d the SNMP module) ?]
+
+2002-12-10 19:29 nba
+
+ * man/snmp.conf.5.def, snmplib/snmp_api.c,
+ agent/mibgroup/util_funcs.c,
+ agent/mibgroup/ucd-snmp/logmatch.c:
+
+ Allow runtime configuration of persistent directory
+
+2002-12-10 19:24 nba
+
+ * snmplib/read_config.c:
+
+ Report errors handling persistent storage files
+
+2002-12-10 19:23 nba
+
+ * snmplib/system.c:
+
+ Pass up error on directory creation
+
+2002-12-10 17:27 nba
+
+ * snmplib/mib.c:
+
+ Better respect for the max width option (snmptranslate -Td)
+
+2002-12-10 17:26 nba
+
+ * man/snmp.conf.5.def:
+
+ Document the oidOutputFormat option
+
+2002-12-10 17:25 nba
+
+ * apps/snmptable.c:
+
+ Clean up. Remove calls to obsolete functions snmp_set_quick_print,
+ snmp_get_dump_packet, snmp_get_suffix_only. Remove last traces of the
+ non_sequential backwards hack. Make sure it works for all -O options.
+
+2002-12-10 11:58 dts12
+
+ * agent/mibgroup/mibII/: interfaces.c (V4-2-patches.26),
+ interfaces.c:
+
+ Protect against empty lines in /proc/net/dev (Bug #625426)
+
+2002-12-10 11:41 dts12
+
+ * snmplib/: snmpv3.c (V4-2-patches.5), snmpv3.c:
+
+ Free destination memory before cloning SNMP Engine ID.
+ Fix provided by Martin Carlsson. (Bug #835481)
+
+2002-12-10 11:07 dts12
+
+ * perl/: ASN/Makefile.PL, OID/Makefile.PL,
+ SNMP/Makefile.PL, agent/Makefile.PL,
+ agent/default_store/Makefile.PL, default_store/Makefile.PL
+:
+
+ Add "$Config{ccflags}" to CCFLAGS. (See bug #640899)
+
+2002-12-10 10:46 dts12
+
+ * agent/mibgroup/mibII/: ipAddr.c (V4-2-patches.8), ipAddr.c:
+
+ Add support for Linux virtual interfaces in the ipAddressTable.
+ (Note this does *not* include separate per-v-interface statistics
+ in the interfaces table).
+
+ Patch supplied by Jens Sittner (#621274)
+
+2002-12-10 04:59 dts12
+
+ * agent/agent_handler.c:
+
+ Remove a couple of extraneous ^M characters.
+
+2002-12-10 02:36 nba
+
+ * snmplib/mib.c:
+
+ When using -Oqv and printing an empty string you could end up with
+ a NULL string and not an empty string leading to some very obscure
+ problems in snmptable and other applications.
+
+2002-12-09 11:12 dts12
+
+ * snmplib/snmp_api.c:
+
+ Handle missing integer values (whether 32- or 64-bit!). Oops!
+
+2002-12-09 10:12 dts12
+
+ * snmplib/: snmp_api.c (V4-2-patches.38), snmp_api.c:
+
+ Handle integer-based values correctly on a 64-bit platform.
+ Patch supplied by Thomas Weber (#561071)
+
+2002-12-09 09:45 dts12
+
+ * agent/mibgroup/agentx/master.c:
+
+ Take note of subagent-requested byte ordering in subsequent communications.
+ Patch supplied by Urban (#632284)
+
+2002-12-09 09:32 dts12
+
+ * agent/: snmpd.c (V4-2-patches.25), snmpd.c:
+
+ Remove the PID file on agent shutdown.
+ Patch supplied by Joel Rosdahl (#627699)
+
+2002-12-09 09:25 dts12
+
+ * snmplib/system.c:
+
+ Handle 'struct sockaddr' that contain 'sa_len' fields differently
+ to those that don't (c.f ifilter_ioctl.c in BIND 9.2.1 sources)
+ Patch supplied by Joel Rosdahl (#627696)
+
+2002-12-09 07:12 dts12
+
+ * acconfig.h, configure, configure.in:
+
+ Recognise BSDi4, and tweak the recognition of 'dlopen'.
+ Patches supplied by Joel Rosdahl.
+
+2002-12-09 06:10 dts12
+
+ * agent/mibgroup/mibII/: at.c, interfaces.c, ip.c
+:
+
+ Remove some warnings, and try to cope with 'sysctl' failures.
+ Patches supplied by Chris Johns.
+
+2002-12-09 04:20 dts12
+
+ * README.solaris:
+
+ Mention the limitations on /usr/ucb/sed,
+ and point people towards /usr/bin/sed instead.
+
+2002-12-07 08:41 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Insert newly-created rows into the per-request lists, so that lower
+ level handlers can access them.
+ [Qn: Should we do something similar with updated lists as well?]
+
+2002-12-07 08:34 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Report back the correct error for rows that couldn't be created.
+
+2002-12-07 08:32 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Protect against freeing a row that never got created in the first place.
+
+2002-12-06 18:05 hardaker
+
+ * testing/tests/T030snmpv3usercreation:
+
+ Skip on non-openssl machines. THis should be changed to just not using encryption on those machines, but I do not have the time at the moment
+
+2002-12-06 13:12 hardaker
+
+ * configure.in:
+
+ remove ucdDemoPublic from --enable-mini-agent
+
+2002-12-06 13:02 hardaker
+
+ * configure:
+
+ remove ucdDemoPublic from --enable-mini-agent
+
+2002-12-06 12:01 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Don't delete the "old" (non-existent) row, when tidying up after
+ creating a new row.
+
+2002-12-06 11:40 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Tweak handling of (invalid) RowStatus creation requests in an
+ "automatic creation" table. These should return wrongValue or
+ inconsistentValue, rather than notWritable.
+
+2002-12-05 05:47 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Support use of RowStatus object to control creation of new rows
+ (i.e. when the 'allow_creation' flag is not set).
+ This should deal with everything except determining whether a
+ row is ready to go 'active' (e.g. via 'createAndGo'). Such a
+ decision is inherently specific to each individual MIB, so must
+ really be done in the lower-level handler.
+
+2002-12-05 05:41 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Stop processing when a 'non-writable create' is detected.
+
+2002-12-04 19:35 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ - BIT_STR -> OCTET_STR, which is what it should be.
+ - run eventTable entries.
+
+2002-12-04 19:34 hardaker
+
+ * agent/mibgroup/disman/mteTriggerExistenceTable.c:
+
+ BIT_STR -> OCTET_STR, which is what it should be.
+
+2002-12-04 19:33 hardaker
+
+ * agent/mibgroup/disman/: mteObjectsTable.c,
+ mteTriggerBooleanTable.c:
+
+ use netsnmp_strdup_and_null to get real strings from mib data.
+
+2002-12-04 19:32 hardaker
+
+ * agent/mibgroup/disman/: event-mib.h,
+ mteEventNotificationTable.c, mteEventNotificationTable.h
+, mteEventTable.c, mteEventTable.h:
+
+ - implemented the mteEventTable and the mteEventNotificationTable
+ - FYI, total implementation time: about 4 hours
+ - no easy-to-use .conf wrappers yet though. snmpset support only.
+
+2002-12-04 19:29 hardaker
+
+ * local/mib2c.create-dataset.conf:
+
+ - use the netsnmp_table_set_add_indexes function which actually works.
+
+2002-12-04 19:29 hardaker
+
+ * agent/helpers/table_dataset.c,
+ include/net-snmp/agent/table_dataset.h:
+
+ - create a netsnmp_table_set_add_indexes function.
+ - Allow row creation using rowStatus when the data column exists, but
+ there is no assigned value (ie, is NULL).
+ - use netsnmp_strdup_and_null instead of memdup to make sure an
+ implicit NULL is in place for things that use the data and need it
+ as a real string.
+
+2002-12-04 19:27 hardaker
+
+ * net-snmp-config.in:
+
+ document --prefix
+
+2002-12-04 13:16 hardaker
+
+ * NEWS (V4-2-patches.9), NEWS:
+
+ document 4.2.6
+
+2002-12-03 04:44 dts12
+
+ * agent/mibgroup/host/hr_print.c:
+
+ Close printer file handle with 'fclose' rather than 'pclose' to avoid
+ a memory leak on Solaris 2.6. Fix provided by Jacobo Matute.
+
+2002-12-03 04:33 dts12
+
+ * agent/helpers/: table_data.c, table_dataset.c:
+
+ Translate GetNext (and GetBulk) requests into simple Get requests,
+ when passing them from the table_data handler to table_dataset.
+ This is analogous to how the iterate handler works, and allows
+ lower level handlers to override the basic behaviour (without
+ having to duplicate all of the "find next row" code every time).
+
+2002-12-02 04:48 dts12
+
+ * agent/helpers/table.c:
+
+ Return SNMPv2-style exceptions, rather than the SNMPv1 'noSuchName' error.
+ This used to break AgentX subagents, but the latest change to snmp_agent.c
+ (to catch noSuch{Instance,Object} exceptions) seems to have fixed that problem.
+
+2002-12-02 04:40 dts12
+
+ * agent/snmp_agent.c:
+
+ Explicitly parenthesise a comparison, to keep the compiler happy.
+
+2002-12-02 04:39 dts12
+
+ * agent/snmp_agent.c:
+
+ Inclusive-range GetNext requests are transmitted as Get requests, so may
+ well return noSuch{Instance,Object} exceptions. Catch these as well.
+
+2002-12-02 04:36 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Catch (and reject) attempts to create a new row via a non-writable object.
+
+2002-11-28 04:24 dts12
+
+ * agent/helpers/table_iterator.c:
+
+ Null out one final loop_context pointer after being freed.
+ (Patch provided by Roger McCalman)
+
+2002-11-26 17:59 nba
+
+ * snmplib/parse.c:
+
+ Discard the secondary (GROUP) DESCRIPTION insize a MODULE-COMPLIANCE
+ to avoid leaking memory. Thanks to Eugene_Bruk@bmc.com
+
+2002-11-26 17:53 nba
+
+ * apps/snmptranslate.c:
+
+ Reinstate the -w options that was lost in the indent fury
+
+2002-11-26 10:50 hardaker
+
+ * agent/mibgroup/examples/notification.c:
+
+ The notification variable shouldn't be static. A bug found while
+ tracking down a problem pointed out by Venice on IRC.
+
+2002-11-26 04:10 dts12
+
+ * snmplib/snmp_enum.c:
+
+ Fix incorrect usage of SE_MAX_IDS vs SE_MAX_SUBIDS.
+ Reported by 'shinepeak'
+
+2002-11-25 22:41 hardaker
+
+ * local/FAQ2HTML:
+
+ hack of a hack of a hack, or: fix multi-line FAQ questions
+
+2002-11-25 10:08 hardaker
+
+ * README.agentx:
+
+ mention agentxPingInterval
+
+2002-11-18 21:39 hardaker
+
+ * agent/mibgroup/smux/smux.h:
+
+ applied patch #527650
+
+2002-11-11 17:10 nba
+
+ * snmplib/mib.c:
+
+ Respect the mibdirs conf directive. Thanks to Stefan Radman (sradman)
+
+2002-11-11 16:57 nba
+
+ * apps/snmptrapd_log.c:
+
+ Fix a missing error return
+
+2002-11-11 14:26 hardaker
+
+ * snmplib/: snmpTCPDomain.c, snmpUDPDomain.c:
+
+ fix taddr generation/parsing for port based transports to properly use
+ network byte ordering.
+
+2002-11-11 14:25 hardaker
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c:
+
+ fix write support for the timeout column
+
+2002-11-09 10:06 nba
+
+ * agent/mib_modules.c, agent/snmp_vars.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/subagent.c,
+ include/net-snmp/agent/mib_modules.h,
+ include/net-snmp/library/snmpUDPIPv6Domain.h:
+
+ Do away with a bunch of compiler warnings
+
+2002-11-09 09:59 nba
+
+ * agent/mibgroup/: util_funcs.c, ucd-snmp/extensible.c,
+ ucd-snmp/memory.c, ucd-snmp/memory_freebsd2.c,
+ ucd-snmp/pass.c, ucd-snmp/proc.c, host/hr_print.c
+:
+
+ Zero is an OK file descriptor. -1 is the error return
+
+2002-11-09 09:54 nba
+
+ * include/net-snmp/library/parse.h, snmplib/parse.c:
+
+ More to the point message for undefined identifiers. Brought forward from 4.2
+
+2002-11-09 09:52 nba
+
+ * apps/snmpvacm.c:
+
+ Print the error information in case of error
+
+2002-11-09 09:51 nba
+
+ * apps/snmpnetstat/route.c:
+
+ Protect against v2 exception results
+
+2002-11-09 09:49 nba
+
+ * sedscript.in, man/snmpcmd.1.def:
+
+ Protect PREFIX when it is the env var. Thanks to Stefan Radman (sradman)
+
+2002-11-09 09:47 nba
+
+ * mibs/rfclist:
+
+ Add RFC 3371 L2TP-MIB
+
+2002-11-09 09:46 nba
+
+ * mibs/IANAifType-MIB.txt:
+
+ Updated from IANA
+
+2002-11-07 05:55 jbpn
+
+ * apps/snmptable.c:
+
+ - fix -Cf and -Cw option processing (previously would core dump if
+ no option passed), as pointed out by hampa on #net-snmp
+
+2002-11-06 15:35 rstory
+
+ * net-snmp-config.in:
+
+ fix cut/paste
+
+2002-11-06 15:04 rstory
+
+ * configure:
+
+ configure to match configure.in & makefiles
+
+2002-11-06 14:08 rstory
+
+ * net-snmp-config.in:
+
+ add missing end quote
+
+2002-11-06 13:35 rstory
+
+ * net-snmp-config.in:
+
+ add @DEVFLAGS@ weherver there is a @CFLAGS@, except for the new --base-cflags
+
+2002-11-06 13:22 rstory
+
+ * Makefile.top:
+
+ add @DEVFLAGS@ to CFLAGS
+
+2002-11-06 13:21 rstory
+
+ * configure.in:
+
+ seperate developer cflags from normal cflags
+
+2002-11-06 12:55 rstory
+
+ * agent/mibgroup/util_funcs.h:
+
+ change struct.h include to use "" instead of <net-snmp/>, since it it a local
+ include, not a system include
+
+2002-11-06 12:39 rstory
+
+ * acconfig.h, agent/mibgroup/util_funcs.h,
+ agent/mibgroup/ucd-snmp/lmSensors.c,
+ include/net-snmp/net-snmp-config.h.in,
+ snmplib/ucd-snmp-includes.h, win32/config.h,
+ win32/net-snmp/net-snmp-config.h:
+
+ purge IN_UCD_SNMP_SOURCE
+
+2002-11-05 12:24 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ added a xmlshort delimiter as requested by lands on IRC
+
+2002-11-05 11:59 rstory
+
+ * dist/cvsup:
+
+ tabs -> spaces only try to chmod RO src dir if owner of dirs
+
+2002-11-05 11:56 rstory
+
+ * mkinstalldirs:
+
+ making a directory is not an error, so don't send output to stderr
+
+2002-11-04 11:15 hardaker
+
+ * agent/mibgroup/target/snmpTargetParamsEntry.c:
+
+ allow unregistered security models <= 2
+
+2002-11-04 11:14 hardaker
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ enable row creation to be better supported (rowstatus no longer has to
+ be first in the list, ...)
+
+2002-11-04 11:13 hardaker
+
+ * net-snmp-config.in:
+
+ add cppflags to --cflags
+
+2002-11-04 11:13 hardaker
+
+ * NEWS:
+
+ add stuff for 5.0.7 (or whatever) mentioning a few new features.
+
+2002-11-01 12:06 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Fixed bug #632094 using the suggested method: watch for NULL strerror() return
+
+2002-11-01 10:09 rstory
+
+ * Makefile.in:
+
+ undo my changes from r 5.17, attempting to reduce runs of config.status
+ by using explicit paths to srcdir, and let VPATH do it's thing
+
+2002-10-29 14:30 rstory
+
+ * snmplib/Makefile.in:
+
+ target to build binary array test app; tweak to parse test target (reduces most
+ but not all external references)
+
+2002-10-29 14:27 rstory
+
+ * snmplib/container_binary_array.c:
+
+ fix for binary search problem noted by Romy Christensen on coders; partial
+ (ifdef'd out) code for a binary array iterator
+
+2002-10-29 14:25 rstory
+
+ * snmplib/test_binary_array.c:
+
+ simple test program for binary array
+
+2002-10-29 09:28 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ Fix debugging as noted in bug #630348
+
+2002-10-28 19:47 hardaker
+
+ * configure, configure.in:
+
+ changed .1.6.3 to 1.3.6 as noted in comp.protocols.snmp
+
+2002-10-28 15:01 hardaker
+
+ * agent/mibgroup/examples/ucdDemoPublic.conf:
+
+ changed password
+
+2002-10-28 14:57 hardaker
+
+ * agent/mibgroup/examples/ucdDemoPublic.conf:
+
+ misc vacm fixes
+
+2002-10-28 08:41 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - remove erroneous free() of rxbuf
+
+2002-10-25 12:35 hardaker
+
+ * snmplib/snmp_api.c:
+
+ fixed SNMP_CALLBACK_OP_DISCONNECT -> NETSNMP_OP_CALLBACK_DISCONNECT as noted by TrogL on IRC
+
+2002-10-25 07:34 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - perform a NETSNMP_CALLBACK_OP_DISCONNECT type callback if we
+ decide to shutdown a stream type connection because we received
+ an excessively large packet.
+
+2002-10-24 10:41 hardaker
+
+ * README:
+
+ Added the super-bug-patch generator Stefan Radman to the THANKS list
+
+2002-10-24 10:40 hardaker
+
+ * configure.in:
+
+ bug #617508: added the mta_sendmail module to --help
+
+2002-10-24 10:35 hardaker
+
+ * local/Makefile.in:
+
+ update install list for mib2c conf files and remove old one
+
+2002-10-23 20:34 hardaker
+
+ * configure, configure.in:
+
+ fix incorrect variable name I noticed when copying to a different configure script in another package
+
+2002-10-23 20:28 hardaker
+
+ * Makefile.in:
+
+ Fixed bug#617838: versiontag isn't distributed and shouldn't be always
+ used in the make distclean calls.
+
+2002-10-23 20:12 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ inconsequencial memory leaks fixed (init time leaks).
+
+2002-10-23 20:10 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ Fixed various memory leaks in the table_iterator as pointed out by
+ Roger McCalman and Jay Parlar on the -coders list (including their patches)
+
+2002-10-23 18:44 hardaker
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ snmpNotifyTable.c
+
+2002-10-23 18:40 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ free a previously malloced pointer to the watch variable before replacing it.
+
+2002-10-23 18:40 hardaker
+
+ * agent/mibgroup/examples/delayed_instance.c:
+
+ remove duplicate unused malloc.
+
+2002-10-21 12:43 jbpn
+
+ * include/net-snmp/system/solaris2.9.h:
+
+ - add system file for Solaris 9
+
+2002-10-17 22:44 hardaker
+
+ * agent/agent_registry.c, agent/snmp_agent.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/mibII/vacm_vars.h,
+ include/net-snmp/agent/agent_callbacks.h,
+ include/net-snmp/agent/agent_registry.h,
+ include/net-snmp/library/vacm.h, snmplib/vacm.c:
+
+ Optimized the VACM checks in the case of getnext/getbulk so that when
+ large portions of the mib tree are excluded, the sub-mib access code
+ won't be called at all (finally implementing a very long needed optimization).
+
+2002-10-17 22:41 hardaker
+
+ * include/net-snmp/library/snmp_api.h, snmplib/snmp_api.c
+:
+
+ new function to find the commonality between two oids: netsnmp_oid_find_prefix
+
+2002-10-17 22:39 hardaker
+
+ * Makefile.in, aclocal.m4, configure,
+ configure.in:
+
+ Print out a "summary" at the end of a run
+
+2002-10-17 05:40 dts12
+
+ * local/mib2c.old-api.conf:
+
+ Properly terminate a loop construct (missing '@end@')
+ Spotted by Karl Cooper. Oops!
+
+2002-10-16 17:19 rstory
+
+ * agent/snmpd.c:
+
+ restore continue after EINTR caused by signal we handled (instead of falling
+ thorough to exit!)
+
+2002-10-16 17:00 rstory
+
+ * agent/snmpd.c:
+
+ check for our signal flags on EINTR, and only relesect if not changed;
+ debug msg when signals registered and for select/fdsets;
+
+2002-10-16 15:52 rstory
+
+ * Makefile.top:
+
+ move CPPFLAGS before user configure CFLAGS.. so if a user adds something
+ like /usr/local/include to CFLAGS, we will pick up our local includes first,
+ instead of includes from a previous release..
+
+2002-10-16 00:06 rstory
+
+ * apps/: snmptrapd.c, snmptrapd_log.c, snmptrapd_log.h
+:
+
+ make sure snmptrapd always honors DS_APP_NUMERIC_IP for logging
+
+2002-10-15 17:09 rstory
+
+ * snmplib/mib.c:
+
+ netsnmp_get_boolean -> netsnmp_ds_get_boolean
+
+2002-10-15 14:08 rstory
+
+ * agent/helpers/table.c:
+
+ fix constant used in assert, noted on coders
+
+2002-10-15 14:07 rstory
+
+ * agent/snmp_agent.c:
+
+ include syslog for libwrap log levels
+
+2002-10-15 10:39 hardaker
+
+ * man/snmpcmd.1.def:
+
+ Add yet another way to specify v6 addresses
+
+2002-10-14 11:54 hardaker
+
+ * man/snmpcmd.1.def:
+
+ fix ipv6 transport address specs
+
+2002-10-11 19:18 hardaker
+
+ * README.cmu, dist/net-snmp.spec:
+
+ Remove the README.cmu file (entirely out of date at this point).
+
+2002-10-11 16:57 hardaker
+
+ * acconfig.h, configure, configure.in,
+ agent/mibgroup/ucd-snmp/disk.c,
+ include/net-snmp/net-snmp-config.h.in:
+
+ patch #600933 from Donal Diamond: dskPercentNode for FreeBSD4
+
+2002-10-11 16:49 hardaker
+
+ * snmplib/mib.c:
+
+ Patch #598280 from Jeff Watson: make -OQ not print type warnings.
+
+2002-10-11 16:43 hardaker
+
+ * dist/Makefile:
+
+ fix include directory
+
+2002-10-11 16:42 hardaker
+
+ * dist/.cvsignore:
+
+ ignore rpm subdir
+
+2002-10-11 16:32 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ better docs about auto-extracted SF news
+
+2002-10-11 16:04 hardaker
+
+ * dist/: Makefile, net-snmp.spec:
+
+ merge in patch #598869: Mark Harig's better rpm stuff
+
+2002-10-11 15:21 hardaker
+
+ * include/net-snmp/library/default_store.h, snmplib/mib.c
+:
+
+ Alternative to a patch suggestion: add -OU to not print UNITS suffixes.
+
+2002-10-11 15:18 hardaker
+
+ * man/snmpcmd.1.def:
+
+ ../agent/snmp_agent.c
+
+2002-10-11 15:14 hardaker
+
+ * man/snmp.conf.5.def:
+
+ document dontPrintUnits
+
+2002-10-11 14:48 hardaker
+
+ * agent/snmp_agent.c:
+
+ Patch #617151 from Andrew Rucker Jones: fix libwrap headers.
+ - I'm still unhappy with how libwrap functions... needs thinking about.
+
+2002-10-11 13:53 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Patch #312694 from John Surveyor: fix diskio on solaris.
+
+2002-10-11 13:37 hardaker
+
+ * agent/mibgroup/mibII/at.c:
+
+ Applied patch #621398 from Matthew Krenzer to fix linux arp table.
+
+2002-10-11 09:47 rstory
+
+ * win32/snmpdsdk/snmpd.dsp:
+
+ chg netsnmpmibs -> netsnmpmibsskd (noted on coders by Jed Whitten)
+
+2002-10-11 09:45 jbpn
+
+ * man/snmpcmd.1.def:
+
+ - note square brackets for IPv6 addresses
+
+2002-10-11 09:40 jbpn
+
+ * agent/snmpd.c:
+
+ - restart select() more quickly if an EINTR happens
+
+2002-10-11 01:51 hardaker
+
+ * FAQ:
+
+ applied Harrie's patch describing low memory footprints
+
+2002-10-10 11:38 hardaker
+
+ * snmplib/snmpksm.c:
+
+ Patch from Ken Horstein to fix KSM module
+
+2002-10-10 06:22 jbpn
+
+ * agent/helpers/table_array.c:
+
+ - remove bad inlines which cause file not to compile with Sun CC.
+ See bug #620827.
+
+2002-10-10 02:03 hardaker
+
+ * dist/net-snmp.spec:
+
+ add .la files
+
+2002-10-10 02:00 hardaker
+
+ * dist/net-snmp.spec:
+
+ make the .spec file almost usable.
+
+2002-10-08 18:55 hardaker
+
+ * FAQ:
+
+ FAQ updates for download sites.
+
+2002-10-08 10:36 hardaker
+
+ * perl/OID/OID.pm:
+
+ Patch from Joshua Keroes for string comparisons
+
+2002-10-07 13:57 hardaker
+
+ * FAQ:
+
+ added a statement about the COPYING file (suggested by Harrie)
+
+2002-10-06 14:32 rstory
+
+ * dist/README.build-scripts:
+
+ nsb-* likes full paths, update examples; fix sourceforge upload site
+
+2002-10-05 17:42 hardaker
+
+ * README, sedscript.in, snmplib/snmp_version.c
+, FAQ, perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.6 )
+
+
+-------------------------------------------------------------------------------
+
+Changes: V5.0.5 -> V5.0.6
+
+2002-10-05 14:29 hardaker
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend
+:
+
+ make depend
+
+2002-10-05 14:09 hardaker
+
+ * Makefile.top:
+
+ update for 5.0.6
+
+2002-10-05 14:08 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ remove illegal flag from nsb-config
+
+2002-10-05 13:41 rstory
+
+ * agent/snmp_agent.c:
+
+ efence is your friend: don't allocate 0 bytes
+
+2002-10-05 12:58 rstory
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ efence is your friend: don't reference ptr after is has been free'd.
+
+2002-10-04 07:17 hardaker
+
+ * agent/snmp_agent.c:
+
+ fix secondary effect of bug 613983 and really fix it this time.
+
+2002-10-02 10:56 hardaker
+
+ * agent/mibgroup/tunnel/: tunnel.c (V4-2-patches.2), tunnel.c
+:
+
+ Patch from Frank Strauss to fix some coding errors
+
+2002-10-01 07:39 rstory
+
+ * agent/snmp_vars.c:
+
+ offical patch 617049: initialize container list earlier (in init_agent)
+
+2002-10-01 07:35 rstory
+
+ * agent/snmp_vars.c:
+
+ remove ^M characters (damn windows editors)
+
+2002-09-30 15:17 rstory
+
+ * FAQ, README, sedscript.in, perl/SNMP/SNMP.pm
+, snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.5 )
+
+2002-09-30 15:16 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ add info on md5sums and gpg signing
+
+2002-09-30 15:15 rstory
+
+ * dist/cvsup:
+
+ fix chmod to do what I wanted, not what I told it
+
+2002-09-30 15:14 rstory
+
+ * ChangeLog, Makefile.top, NEWS:
+
+ update for 5.0.5
+
+2002-09-30 14:27 rstory
+
+ * ChangeLog:
+
+ merge pre changes into 5.0.4 comments
+
+2002-09-30 14:25 rstory
+
+ * NEWS:
+
+ update for 5.0.4
+
+2002-09-30 14:23 hardaker
+
+ * NEWS:
+
+ NEWS updates for 5.0.4
+
+2002-09-30 14:03 rstory
+
+ * README:
+
+ update my email address
+
+2002-09-30 14:03 rstory
+
+ * ChangeLog:
+
+ update for release 5.0.4
+
+
+-------------------------------------------------------------------------------
+
+Changes: V5.0.3 -> V5.0.5
+
+2002-09-30 16:08 rstory
+
+ * agent/helpers/table.c:
+
+ make len a size_t to fix problem on 64 bit system, reported by sebnod` in IRC
+
+2002-09-30 16:05 rstory
+
+ * agent/helpers/table.c:
+
+ don't use static local vars, as they are likely to cause problems with threads
+
+2002-09-30 15:48 rstory
+
+ * dist/nsb-package:
+
+ make sure install dir is relative to build dir
+
+2002-09-30 15:20 rstory
+
+ * snmplib/vacm.c:
+
+ add missing newline in debug
+
+2002-09-30 15:19 rstory
+
+ * dist/: nsb-functions, nsb-package:
+
+ fix typos
+
+2002-09-30 15:18 rstory
+
+ * agent/snmp_agent.c:
+
+ avoid infinite loop
+
+2002-09-30 14:59 rstory
+
+ * dist/nsb-functions:
+
+ don't assume make is GNU make, and search for it. require user to set an
+ env var if no GNU make is found in PATH
+
+2002-09-30 14:58 rstory
+
+ * dist/cvsup:
+
+ if CVS dir is ro, automagically make it rw before update and ro after update
+
+2002-09-27 14:03 hardaker
+
+ * agent/snmp_agent.c:
+
+ make get_set_cache() return an error if no previous SET has been started.
+
+2002-09-27 14:02 hardaker
+
+ * agent/agent_registry.c:
+
+ double check against some null pointers before using them in the cache code.
+
+2002-09-27 13:36 hardaker
+
+ * agent/snmp_agent.c:
+
+ set treecache_num to -1 at init of memory, to be extra safe.
+
+2002-09-26 14:58 hardaker
+
+ * agent/: snmp_agent.c, snmpd.c:
+
+ move libwrap variables
+
+2002-09-26 14:57 hardaker
+
+ * perl/agent/agent.xs:
+
+ ok, remove tcpwrappers vars
+
+2002-09-26 13:44 hardaker
+
+ * perl/agent/agent.xs:
+
+ define stupid variables needed by tcpwrappers because they don't get
+ concepts of encapsulation. arg.
+
+2002-09-26 11:26 hardaker
+
+ * perl/agent/agent.xs:
+
+ change call_pv to perl_call_pv for older versions of perl.
+
+2002-09-26 11:10 hardaker
+
+ * snmplib/mib.c:
+
+ run strdup() on get_mib_dir() results to fix bug pointed out by Eugene Bruk.
+
+2002-09-23 13:14 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ mention freshmeat
+
+2002-09-23 13:13 hardaker
+
+ * agent/mibgroup/ucd-snmp/versioninfo.c,
+ agent/mibgroup/ucd-snmp/versioninfo.h, mibs/UCD-SNMP-MIB.txt
+:
+
+ - implement a (long needed) settable variable to store the current
+ persistent information.
+
+2002-09-23 12:47 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - make not in time window reports trigger a resend of informs.
+ (suggestion from Erik Anggard)
+
+2002-09-20 11:28 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.h:
+
+ - remove functions vacm_parse_security and vacm_free_security which
+ don't exist
+
+2002-09-19 17:01 hardaker
+
+ * perl/agent/agent.xs:
+
+ - support agent shutdowns (well, ok it's just an api since it doesn't work).
+ - misc bug fixes.
+
+2002-09-19 16:38 hardaker
+
+ * perl/agent/: agent.xs, netsnmp_request_infoPtr.pm:
+
+ fix agent request_infoPtr problems.
+
+2002-09-19 12:04 dts12
+
+ * win32/snmptranslate/snmptranslate.dsp:
+
+ Compile and link with 'getopt.c' explicitly.
+
+ This should not be necessary, but for some reason
+ (that completely escapes me!), using command-line options
+ (such as -IR) with the Release version of snmptranslate
+ causes a run-time DLL error. (The Debug version is fine).
+ The other applications seem to be OK - this problem only
+ seems to hit snmptranslate. So as a sticking-plaster,
+ compiliing getopt.c in as part of the project, keeps both
+ versions of the application happy.
+ Someone with better Windows knowledge than me needs to
+ look at this and fix it properly.
+
+2002-09-19 06:14 jbpn
+
+ * include/net-snmp/library/snmp_api.h:
+
+ - undo worst of indent damage
+
+2002-09-19 06:03 jbpn
+
+ * include/net-snmp/library/snmp_api.h:
+
+ - remove _dparse functions (which don't exist)
+
+2002-09-18 10:55 hardaker
+
+ * testing/eval_tools.sh:
+
+ reset SNMP_SLEEP after loop
+
+2002-09-18 10:41 jbpn
+
+ * snmplib/snmp_client.c:
+
+ - remove very obsolete (and not used anywhere) #definitions of
+ PARTY_MIB_BASE and CONTEXT_MIB_BASE
+
+2002-09-18 02:59 rstory
+
+ * ChangeLog:
+
+ tweak for 5.0.4 last minute update
+
+2002-09-18 02:48 rstory
+
+ * testing/eval_tools.sh:
+
+ chg > to -gt to achieve intended result
+
+2002-09-18 01:39 rstory
+
+ * NEWS:
+
+ update for 5.0.4
+
+2002-09-18 01:33 rstory
+
+ * FAQ, README, sedscript.in, perl/SNMP/SNMP.pm
+, snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.4 )
+
+2002-09-18 01:32 rstory
+
+ * ChangeLog:
+
+ update for 5.0.4
+
+2002-09-18 00:59 rstory
+
+ * Makefile.in:
+
+ add $(srcdir) to a few dependencies to try and reduce the # of times that
+ config.status is run when building outside the src dir
+
+2002-09-18 00:54 rstory
+
+ * README.win32:
+
+ visually provocative section headers; add recent status (all bad news);
+ not to use new win32sdk.dsw to get additonal functionality with platform sdk;
+ remove info on removing agentx, as it's been around now for a while; add
+ section on what files to edit to add mib2c generated code to agent; remove
+ reference to specific release number in example
+
+2002-09-18 00:25 rstory
+
+ * win32/snmpdsdk/snmpd.dsp:
+
+ take 'sdk' out of exe name
+
+2002-09-18 00:25 rstory
+
+ * win32/win32sdk.dsw:
+
+ swap snmpdsdk for snmpd
+
+2002-09-18 00:14 rstory
+
+ * win32/: encode_keychange/encode_keychange.dsp,
+ libsnmp/libsnmp.dsp, libsnmp_dll/libsnmp_dll.dsp,
+ snmpbulkget/snmpbulkget.dsp, snmpbulkwalk/snmpbulkwalk.dsp
+, snmpd/snmpd.dsp, snmpdelta/snmpdelta.dsp,
+ snmpdf/snmpdf.dsp, snmpget/snmpget.dsp,
+ snmpgetnext/snmpgetnext.dsp, snmpnetstat/snmpnetstat.dsp
+, snmpset/snmpset.dsp, snmpstatus/snmpstatus.dsp,
+ snmptable/snmptable.dsp, snmptest/snmptest.dsp,
+ snmptranslate/snmptranslate.dsp, snmptrap/snmptrap.dsp,
+ snmptrapd/snmptrapd.dsp, snmpusm/snmpusm.dsp,
+ snmpvacm/snmpvacm.dsp, snmpwalk/snmpwalk.dsp:
+
+ get all our ducks in a row: add advapi32.lib to link lines, make sure all
+ Release and Debug libs/apps are compile with same C++ settings
+
+2002-09-18 00:12 rstory
+
+ * win32/netsnmpmibs/netsnmpmibs.dsp:
+
+ remove sdk dependent modules
+
+2002-09-18 00:10 rstory
+
+ * win32/mib_module_inits.h:
+
+ group modules that depend on win32 sdk together, with ifdef
+
+2002-09-18 00:08 rstory
+
+ * agent/snmp_vars.c:
+
+ no callback for win32 until pipe fd problem is fixed
+
+2002-09-18 00:07 rstory
+
+ * win32/: netsnmpmibssdk/netsnmpmibssdk.dsp,
+ snmpdsdk/snmpd.dsp:
+
+ new versions for sdk users
+
+2002-09-18 00:05 rstory
+
+ * win32/win32sdk.dsw:
+
+ new workspace for sdk users
+
+2002-09-16 16:27 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ mib module loading fixes by calling init_snmp first
+
+2002-09-13 15:05 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ tweak example nsb-config command; add -b back to cvs2cl, otherwise you
+ get changelog msgs from other branches and have to weed them out
+
+2002-09-13 12:33 hardaker
+
+ * perl/OID/: OID.pm, OID.xs, test.pl:
+
+ fix illegal oids to not return a pointer.
+
+2002-09-13 10:40 jbpn
+
+ * snmplib/snmpUDPDomain.c:
+
+ - minor optimisation; we don't need a zero-terminated community
+ string except for debugging output.
+
+2002-09-13 10:35 hardaker
+
+ * local/mib2c:
+
+ added -i option to request indent not be run
+
+2002-09-13 10:06 jbpn
+
+ * COPYING:
+
+ - add missing verb in introduction
+
+2002-09-12 15:58 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ protect calling some SvIV dereference functions if it's not an IV.
+ - eliminates the remaining perl warnings.
+
+2002-09-12 14:45 hardaker
+
+ * net-snmp-config.in:
+
+ include ldflags where appropriate (--libs, --agent-libs, ...)
+
+2002-09-12 01:48 rstory
+
+ * dist/: nsb-nightly, nsb-package:
+
+ add/use new option to remove build dir after successful build
+
+2002-09-12 01:47 rstory
+
+ * dist/nsb-functions:
+
+ print build dir
+
+2002-09-12 01:19 hardaker
+
+ * testing/tests/: Sv3config, T030snmpv3usercreation:
+
+ much more complex tests of USM user creation/modification.
+
+2002-09-12 01:07 hardaker
+
+ * testing/: eval_tools.sh, tests/T001snmpv1get,
+ tests/T002snmpv1getnext, tests/T003snmpv1getfail,
+ tests/T004snmpv1nosuch:
+
+ - support for multiple tests at once.
+ - merge v1 tests into a single (faster) test.
+
+2002-09-12 00:34 rstory
+
+ * dist/nsb-functions:
+
+ don't monkey around with returning error codes, just exit; more regexp tweaks
+
+2002-09-11 19:36 hardaker
+
+ * testing/eval_tools.sh:
+
+ - use sub-second sleeps if available
+ - sleep 1 (sub-)second at a time when waiting for particular tests
+ rather than the full SNMP_SLEEP duration.
+
+2002-09-11 19:24 hardaker
+
+ * apps/snmptrapd.c:
+
+ use snmp_log instead of printf for shutdown message.
+
+2002-09-11 18:42 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ missing variable decl pointed out by irc:df
+
+2002-09-10 16:16 rstory
+
+ * dist/nsb-functions:
+
+ tweak error regexps & error messages
+
+2002-09-10 15:28 rstory
+
+ * local/mib2c.array-user.conf:
+
+ compiler warnings are your friend!; fix embeded comments; fix non-void
+ functions w/no rtn values; code reorg to fix emacs indent complaints
+
+2002-09-10 15:26 rstory
+
+ * Makefile.in:
+
+ new start-flag end-flag targets to help nightly build script determine
+ if a make completed successfully
+
+2002-09-10 15:12 rstory
+
+ * dist/nsb-functions:
+
+ tweaks for new script for automated nightly builds; ad nsb-abort, nsb-flow;
+ direct some messages to stderr; use new start-flag end-flag make targets;
+ update error grep to include '***'; check for new value to rm -fR build dir
+
+2002-09-10 15:08 rstory
+
+ * dist/nsb-nightly:
+
+ new script for automated nightly builds
+
+2002-09-10 15:08 rstory
+
+ * dist/nsb-package:
+
+ add option to rm -fR build dir at start; check scrip path for nsb-functions;
+ prefix default build dir w/version; exit w/rc from nsb-build
+
+2002-09-10 15:05 rstory
+
+ * dist/: nsb-config, nsb-platform:
+
+ add current path to script to nsb-function search path
+
+2002-09-09 09:28 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - fix bug pointed out by Jared Smith-Mickelson (bug #605147)
+ whereby passing an unknown type character to snmp_add_var would
+ cause a segfault.
+
+2002-09-09 09:09 hardaker
+
+ * apps/snmptranslate.c:
+
+ double check a pointer value before using it.
+
+2002-09-09 09:09 hardaker
+
+ * configure, configure.in,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ include/net-snmp/net-snmp-config.h.in:
+
+ Current header update patch for netbsd from Patrick Welche.
+
+2002-09-06 18:30 driehuis
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ Mark the non-raw variants of objects that are accessable as raw counters
+ as deprecated, to (hopefully!) cut down on the number of users that get
+ bitten by it..
+
+2002-09-04 14:36 hardaker
+
+ * README.solaris:
+
+ added Bruce's email address
+
+2002-09-04 14:27 hardaker
+
+ * Makefile.in, Makefile.rules:
+
+ fix perlclean
+
+2002-09-04 14:10 hardaker
+
+ * agent/snmpd.c:
+
+ Fix process grouping by calling setsid() (reported by irc:TrogL)
+
+2002-09-04 14:09 hardaker
+
+ * configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in:
+
+ check for setsid().
+
+2002-09-03 13:51 hardaker
+
+ * local/mib2c:
+
+ fix cases where there either are no tables or no scalars.
+
+2002-09-03 13:23 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ don't use NULL variables.
+
+2002-09-02 22:33 rstory
+
+ * FAQ, README, sedscript.in, perl/SNMP/SNMP.pm
+, snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.4.pre2 )
+
+2002-09-02 22:33 rstory
+
+ * ChangeLog:
+
+ update for release 5.0.4.pre2
+
+2002-09-02 22:22 rstory
+
+ * man/netsnmp_handler.3:
+
+ updated docs
+
+2002-09-02 22:19 rstory
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend
+:
+
+ make depend
+
+2002-09-02 22:16 rstory
+
+ * dist/nsb-config:
+
+ try and guess at src dir if not specified
+
+2002-09-02 22:15 rstory
+
+ * dist/README.build-scripts:
+
+ add note about err when building in and out of source tree
+
+2002-09-02 21:55 rstory
+
+ * Makefile.in:
+
+ full path to versiontag, in case we are buildint outside of src directory
+
+2002-09-02 21:37 rstory
+
+ * dist/nsb-functions:
+
+ remove forced prompt on errors
+
+2002-09-02 21:36 rstory
+
+ * Makefile.in:
+
+ add warnings when VERSION is required; add tarclean target; add tarclean to
+ distclean target
+
+2002-09-02 21:34 rstory
+
+ * agent/mibgroup/versiontag:
+
+ add msg on error; add clean target
+
+2002-09-02 20:27 rstory
+
+ * NEWS:
+
+ update win32 & AgentX status
+
+2002-09-02 20:20 rstory
+
+ * agent/snmp_agent.c, agent/mibgroup/agentx/master_admin.c
+, include/net-snmp/agent/snmp_agent.h:
+
+ fix to avoid locking up the agent when a sugagent dies during a set request. We
+ must clean up the delegated requests when the session(s) are closed, so that
+ they will be processed and removed, allowing further requests to be processed.
+
+2002-09-01 13:43 rstory
+
+ * snmplib/container_binary_array.c:
+
+ change result type back to int, as it may receive a negative value
+
+ PLEASE check the use of a variable before changing is signedness, especially
+ areound release time!
+
+2002-08-30 15:18 rstory
+
+ * include/net-snmp/utilities.h:
+
+ include check_varbind.h
+
+2002-08-30 15:18 rstory
+
+ * agent/helpers/table_array.c:
+
+ change NOSUCHNAME to NOSUCHINSTANCE again, as it seems the agentX fix also
+ correctly deals with this error code
+
+2002-08-30 09:14 hardaker
+
+ * FAQ, README:
+
+ - delete sunsite.cnlab-switch.ch mirror, as it isn't one anymore.
+
+2002-08-29 13:32 rstory
+
+ * dist/nsb-functions:
+
+ check for modules before configuring them
+
+2002-08-29 10:52 hardaker
+
+ * snmplib/scapi.c:
+
+ Fix the last AES bug I know of. AES128 works great.
+ I still Need to fix 192/256 for longer key generation from MD5/SHA
+
+2002-08-29 10:52 hardaker
+
+ * perl/agent/agent.pm:
+
+ use the right perl module name in the use line.
+
+2002-08-29 06:47 dts12
+
+ * agent/agent_handler.c, agent/mibgroup/agentx/master.c
+, include/net-snmp/agent/agent_registry.h,
+ win32/config.h:
+
+ More Win32-related tidying up.
+ The agent now compiles with relatively few warnings.
+
+2002-08-29 04:50 dts12
+
+ * agent/agent_trap.c, agent/mibgroup/agentx/client.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/utilities/override.h,
+ include/net-snmp/agent/snmp_agent.h,
+ include/net-snmp/agent/table_dataset.h,
+ include/net-snmp/library/mt_support.h,
+ snmplib/container_binary_array.c, snmplib/snmpusm.c,
+ win32/config.h, win32/libsnmp_dll/libsnmp.def:
+
+ Declare new routine 'netsnmp_oid_equals', and assorted Win32 cleanup fixes.
+
+2002-08-28 14:15 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ clarify cvs2cl script name; remove -b flag from cvs2cl per Dave; a little
+ reorganization; put commands on separate lines prefixed with $; note 5.x/4.x
+ differences per Dave's email; plug my new scripts where appropriate
+
+2002-08-27 14:48 rstory
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ add URL for cvs2cl; update cvs2cl cmds to cvs2cl.pl, since that's the file
+ that's actually distributed
+
+2002-08-27 00:59 rstory
+
+ * Makefile.top:
+
+ update for release 5.0.4.pre1
+
+2002-08-27 00:25 rstory
+
+ * snmplib/snmp_version.c, FAQ, README,
+ sedscript.in, perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.4.pre1 )
+
+2002-08-27 00:24 rstory
+
+ * ChangeLog:
+
+ update for release 5.0.4.pre1
+
+2002-08-27 00:19 rstory
+
+ * agent/Makefile.depend (5.6), agent/helpers/Makefile.depend (5.5),
+ agent/mibgroup/Makefile.depend (5.6), apps/Makefile.depend (5.5),
+ apps/snmpnetstat/Makefile.depend (5.5), snmplib/Makefile.depend
+ (5.5):
+
+ make depend
+
+2002-08-27 00:17 rstory
+
+ * man/: netsnmp_agent.3 (5.3), netsnmp_bulk_to_next.3 (5.3),
+ netsnmp_debug.3 (5.3), netsnmp_handler.3 (5.3), netsnmp_instance.3
+ (5.3), netsnmp_multiplexer.3 (5.3), netsnmp_old_api.3 (5.3),
+ netsnmp_read_only.3 (5.3), netsnmp_scalar.3 (5.2),
+ netsnmp_serialize.3 (5.3), netsnmp_table.3 (5.3),
+ netsnmp_table_array.3 (5.3), netsnmp_table_data.3 (5.3),
+ netsnmp_table_dataset.3 (5.3), netsnmp_table_iterator.3 (5.3),
+ netsnmp_todo.3 (5.3), netsnmp_watcher.3 (5.2):
+
+ update man pages for 5.0.4.pre1
+
+2002-08-27 00:10 rstory
+
+ * dist/nsb-config (1.1):
+
+ new file to configure using same options as nsb-package for test or dist
+
+2002-08-27 00:09 rstory
+
+ * dist/nsb-package (1.3):
+
+ don't append sys-name when building in src tree
+
+2002-08-27 00:09 rstory
+
+ * dist/nsb-functions (1.19):
+
+ fix typo
+
+2002-08-27 00:06 rstory
+
+ * dist/nsb-functions (1.18):
+
+ rename nsb-get-confg -> nsb-config-dist; use double quotes cuz of some
+ wierd shell thing I don't yet understand; check for src dir in config*
+
+2002-08-26 23:34 rstory
+
+ * Makefile.in (5.12):
+
+ tweak commentcheck target to work outside the source tree
+
+2002-08-26 23:33 rstory
+
+ * agent/mibgroup/mibII/interfaces.c (5.3),
+ agent/mibgroup/ucd-snmp/proxy.c (5.1),
+ include/net-snmp/library/asn1.h (5.2),
+ include/net-snmp/library/oid_stash.h (5.1), snmplib/winservice.c
+ (5.1):
+
+ remove C++ style comments (and anything that even remotely resembles one)
+
+2002-08-26 17:47 rstory
+
+ * dist/nsb-functions (1.17):
+
+ pass make params to make, so we don't try to install in /usr/local/bin of
+ the compile servers... :-/
+
+2002-08-26 17:39 rstory
+
+ * dist/nsb-functions (1.16):
+
+ make dist & extra transports; no ipv6 on Darwin; make touchit before make
+
+2002-08-26 17:04 rstory
+
+ * agent/mibgroup/Rmon/event.c (5.4):
+
+ replace u_int32_t, which doesn't compile on Sun 5.8, with u_int
+
+2002-08-26 16:53 rstory
+
+ * agent/mibgroup/Rmon/rows.c (5.2):
+
+ fix undeclared variable error spotted on Sun, which linux missed completely.
+ I have no idea how this compiled before!!
+
+2002-08-26 16:43 rstory
+
+ * dist/nsb-functions (1.15):
+
+ cleaner way to add system specific modules; disable perl, as it breaks
+ builds outside of the source tree
+
+2002-08-26 15:45 rstory
+
+ * dist/nsb-functions (1.14):
+
+ only configure IPX on Linux
+
+2002-08-26 15:44 rstory
+
+ * dist/nsb-functions (1.13):
+
+ only configure IPX on Linux; bail on configure errors
+
+2002-08-26 15:04 rstory
+
+ * dist/README.build-scripts (1.4):
+
+ add suggestion to symlink nsb-* in local bin dir
+
+2002-08-26 15:03 rstory
+
+ * dist/: nsb-package (1.2), nsb-functions (1.12):
+
+ add option for pre-release test configure options
+
+2002-08-26 15:02 rstory
+
+ * README.snmpv3 (5.3):
+
+ make section headers stand out more; move note about encryption not being
+ enabled to a more prominent place.
+
+2002-08-24 21:24 driehuis
+
+ * configure.in, agent/mibgroup/ucd-snmp/diskio.c
+ (V4-2-patches.[37,3]):
+
+ Merge from HEAD: detect the requirement for linking with -ldevstat.
+ Ugly hack to make sure diskio device names include the device number.
+
+2002-08-23 11:46 dts12
+
+ * snmplib/Makefile.in (V4-2-patches.3):
+
+ make depend
+
+2002-08-22 08:31 jbpn
+
+ * include/net-snmp/system/solaris2.7.h (5.2):
+
+ - DONT_USE_NLIST reinstated, so NO_KMEM_USAGE redundant
+
+2002-08-22 08:29 jbpn
+
+ * acconfig.h (5.9), include/net-snmp/net-snmp-config.h.in (5.10):
+
+ - reinstate test for DONT_USE_NLIST
+
+2002-08-22 07:11 jbpn
+
+ * agent/snmpd.c (5.10):
+
+ - stop and restart logging when HUPped. This allows logfiles to be
+ rotated and so forth.
+
+2002-08-22 07:06 jbpn
+
+ * agent/snmpd.c (V4-2-patches.24):
+
+ - stop and restart logging when HUPped. This allows logfiles to be
+ rotated and so forth.
+
+2002-08-22 04:31 dts12
+
+ * README.snmpv3 (5.2):
+
+ Add the missing '-x/X' options to the example authPriv command line
+ (reported by Prasada R Vankayalapati)
+
+2002-08-20 11:04 hardaker
+
+ * agent/mibgroup/agentx/subagent.c (5.6), apps/snmptrapd.c (5.4),
+ include/net-snmp/agent/ds_agent.h (5.3), FAQ (5.17):
+
+ quiet snmptrapd when it can't connect to the agentx master.
+
+2002-08-20 08:54 jbpn
+
+ * include/net-snmp/system/solaris2.7.h (5.1):
+
+ - add #define NO_KMEM_USAGE 1 since net-snmp-config.h.in no longer
+ pays attention to the DONT_USE_NLIST token. Omission of this
+ causes the agent to exit with the message "init_kmem: kvm_open
+ failed: error 0".
+
+ NOTE: this may need applying to other members of the Solaris 2
+ family, but I don't have machines to hand to test this.
+
+2002-08-20 08:48 jbpn
+
+ * agent/mibgroup/kernel_sunos5.c (5.2):
+
+ - detect gigabit ethernet devices (geN)
+ - undo indent mayhem
+
+2002-08-20 05:57 jbpn
+
+ * include/net-snmp/utilities.h (5.1):
+
+ - for now, don't #include snmp_locking.h since it breaks re-entrant
+ support (because mutex_type gets multiply-defined). Furthermore, the
+ functions it declares are never used anywhere, nor defined anywhere.
+
+2002-08-20 05:56 jbpn
+
+ * include/net-snmp/library/mt_support.h (5.1):
+
+ - don't define "do nothing" macros for snmp_res_lock et al. functions
+ on Win32 platform (since real "do nothing" functions are required for
+ reasons best known to someone else).
+ - unmangling
+
+2002-08-20 05:54 jbpn
+
+ * include/net-snmp/library/snmp_locking.h (5.1):
+
+ - fix highly bogus non-C syntax
+
+2002-08-20 05:53 jbpn
+
+ * snmplib/mt_support.c (5.1):
+
+ - snmp_res_lock et al. functions no longer #defined to "do nothing"
+ targets for Win32 in mt_support.h, therefore no need to #undef them
+ here.
+ - unmangling
+
+2002-08-20 01:13 hardaker
+
+ * include/net-snmp/agent/agent_registry.h (5.2):
+
+ headers for cache enabling functions.
+
+2002-08-20 01:12 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c (5.3):
+
+ don't use non-existent memory pointers to the response data (eg: "timeout")
+
+2002-08-19 17:46 nba
+
+ * include/net-snmp/net-snmp-includes.h (5.1):
+
+ Change a few conditionals to use #if in place of #ifdef
+
+2002-08-19 17:28 nba
+
+ * snmplib/: mib.c (5.17), parse.c (5.4):
+
+ Align with 4.2 branch
+
+2002-08-19 17:26 nba
+
+ * mibs/: DISMAN-SCHEDULE-MIB.txt (5.1),
+ IANA-ADDRESS-FAMILY-NUMBERS-MIB.txt (5.1), IANAifType-MIB.txt
+ (5.1), INET-ADDRESS-MIB.txt (5.1), Makefile.mib (5.2), ianalist
+ (5.1), mibfetch (5.1), rfclist (5.1):
+
+ Update to current MIBs
+
+2002-08-19 17:25 nba
+
+ * agent/mibgroup/mibII/vacm_vars.c (5.7):
+
+ Bail out for bad snmpAdminString value
+
+2002-08-19 10:43 jbpn
+
+ * FAQ (V4-2-patches.53), FAQ (5.16):
+
+ - don't use positional community parameter in examples
+ - break a couple of over-long lines
+ - mention netsnmp_ variant of ds_set_ function
+
+2002-08-19 05:44 dts12
+
+ * FAQ (V4-2-patches.52), FAQ (5.15):
+
+ Add an entry about the snmptrapd/AgentX warning message.
+
+2002-08-18 21:24 rstory
+
+ * dist/nsb-functions (1.11):
+
+ don't configure with build install dir, it is already specified on cmd line
+ for make install
+
+2002-08-18 13:59 rstory
+
+ * agent/helpers/table.c (5.7):
+
+ more debugging - log value request is trying to set
+
+2002-08-16 18:13 hardaker
+
+ * README (5.9):
+
+ added Bruce Shaw to the thanks list
+
+2002-08-16 18:12 hardaker
+
+ * README.solaris (1.2):
+
+ A great update talking about perl and solaris from Bruce Shaw
+
+2002-08-16 04:51 dts12
+
+ * agent/helpers/table_iterator.c (5.4):
+
+ Catch explicitly 'noSuchInstance' exceptions, when walking an
+ iterator-handled module, so that holes can be skipped and the
+ next real instance retrieved. (This was already handled for
+ modules that didn't mark missing instances explicitly).
+
+2002-08-16 03:17 hardaker
+
+ * agent/snmp_agent.c (5.13):
+
+ turn off caching by default, since the agentx code appears broken.
+
+2002-08-16 03:03 hardaker
+
+ * agent/: agent_registry.c (5.5), snmp_agent.c (5.12):
+
+ speed enhancements via implementing a registration subtree lookup
+ cache. greatly speeds things up when similar requests come in
+ (snmpwalk, ...).
+
+2002-08-15 13:35 hardaker
+
+ * snmplib/parse.c (5.3):
+
+ protect against NULL labels in subtrees
+
+2002-08-15 11:14 hardaker
+
+ * agent/agent_index.c (5.3), agent/agent_registry.c (5.4),
+ agent/agent_trap.c (5.1), agent/helpers/old_api.c (5.2),
+ agent/mibgroup/header_complex.c (5.1), agent/mibgroup/testhandler.c
+ (5.1), snmplib/snmp_transport.c (5.2), snmplib/snmpusm.c (5.3):
+
+ use netsnmp_oid_equals (which is sometimes faster than
+ snmp_oid_compare) in a few places to achieve barely noticeable speed gains.
+
+2002-08-15 11:12 hardaker
+
+ * snmplib/parse.c (5.2):
+
+ double check a pointer exists before passing it to strcmp()
+
+2002-08-15 11:05 hardaker
+
+ * perl/SNMP/Makefile.PL (5.7):
+
+ change MAN3PODS to something compliant with the perl manuals. I think.
+
+2002-08-14 13:42 rstory
+
+ * apps/snmpset.c (5.2):
+
+ add debug for local parsing of args
+
+2002-08-14 12:26 rstory
+
+ * agent/mibgroup/agentx/: master.c (5.5), master_admin.c (5.4),
+ subagent.c (5.5):
+
+ add more detailed in debug messages; add a few new debugs
+
+2002-08-14 12:23 rstory
+
+ * agent/snmp_agent.c (5.11):
+
+ when all delegated requests have finished, check all requests status so that
+ asp status is set, which is necessary for correct agentx set processing.
+ (now if I can just get all this hair off the floor, and glue it back to my
+ head, and then fix that dent in the wall where I've been banging my head....)
+
+2002-08-13 17:25 hardaker
+
+ * snmplib/snmp_api.c (5.14):
+
+ fix a length comparison problem with netsnmp_oid_is_subtree()
+
+2002-08-13 17:24 hardaker
+
+ * NEWS (5.6):
+
+ document a few recent changes.
+
+2002-08-13 17:05 hardaker
+
+ * agent/mibgroup/host/hr_print.c (5.1):
+
+ Fix open file runaway on solaris. See bug #592806 reported by James Irwin.
+
+2002-08-13 15:05 rstory
+
+ * include/net-snmp/types.h (5.7):
+
+ array of pointers = pointer to a pointer
+
+2002-08-09 19:32 hardaker
+
+ * local/FAQ2HTML (5.1):
+
+ misc doc fixes.
+
+2002-08-09 19:31 hardaker
+
+ * snmplib/snmp_parse_args.c (5.4),
+ include/net-snmp/library/transform_oids.h (5.2), snmplib/snmpusm.c
+ (5.2), snmplib/snmpv3.c (5.3):
+
+ initial AES support.
+
+2002-08-09 19:31 hardaker
+
+ * include/net-snmp/library/snmp_api.h (5.2), snmplib/snmp_api.c
+ (5.13):
+
+ slight speed ups for snmp_oid_compare() to do single int compares till !=
+
+2002-08-09 19:29 hardaker
+
+ * snmplib/scapi.c (5.2):
+
+ - openssl 0.9.7 support for DES changes.
+ - initial AES support.
+
+2002-08-09 19:28 hardaker
+
+ * snmplib/keytools.c (5.2):
+
+ indent fixes.
+
+2002-08-09 19:27 hardaker
+
+ * include/net-snmp/library/: scapi.h (5.1), snmpusm.h (5.1):
+
+ define AES key specifics
+
+2002-08-09 19:26 hardaker
+
+ * acconfig.h (5.8), configure (5.17), configure.in (5.15),
+ include/net-snmp/net-snmp-config.h.in (5.9):
+
+ - check for openssl .0.9.7 DES structures and functions.
+ - check for AES support in openssl (> 0.9.7)
+
+2002-08-09 19:10 hardaker
+
+ * agent/mibgroup/agentx/subagent.c (5.4):
+
+ fix mode processing for RESERVE1/RESERVE2 test failures
+
+2002-08-09 18:29 rstory
+
+ * agent/snmp_agent.c (5.10):
+
+ log msg when we ignore/fix illegal error_values for the client APIs
+
+2002-08-09 18:28 rstory
+
+ * local/mib2c.array-user.conf (5.12):
+
+ corrections to example code
+
+2002-08-09 18:27 rstory
+
+ * agent/helpers/table.c (5.6):
+
+ revert errors to uninformative SNMPv1 noSuchName for AgentX get-next/inclusive
+ processing; also add more comments here and there
+
+2002-08-09 17:08 rstory
+
+ * agent/mibgroup/agentx/master.c (5.4):
+
+ debug msg for agentx oid for cases other than get/getnext
+
+2002-08-09 11:45 rstory
+
+ * agent/mibgroup/agentx/master_admin.c (5.3):
+
+ don't free registration info on failure, as netsnmp_register_mib already did it
+
+2002-08-09 09:57 jbpn
+
+ * snmplib/: snmpAAL5PVCDomain.c (5.2), snmpCallbackDomain.c (5.1),
+ snmpIPXDomain.c (5.1), snmpTCPDomain.c (5.4), snmpTCPIPv6Domain.c
+ (5.5), snmpUDPDomain.c (5.6), snmpUDPIPv6Domain.c (5.7),
+ snmpUnixDomain.c (5.4), snmp_transport.c (5.1):
+
+ - rename snmp_<domain>_blah functions to netsnmp_<domain>_blah
+ - make transport member functions static, to emphasise that they should
+ not be used directly
+ - handle EINTR in send and recv functions (as pointed out by Antti Kuntsi
+ in bug report #576806)
+ - formatting fixes
+
+2002-08-09 09:54 jbpn
+
+ * include/net-snmp/library/: snmpAAL5PVCDomain.h (5.3),
+ snmpIPXDomain.h (5.2), snmpTCPDomain.h (5.2), snmpTCPIPv6Domain.h
+ (5.3), snmpUDPDomain.h (5.2):
+
+ - minor formatting fixes
+
+2002-08-09 09:54 jbpn
+
+ * include/net-snmp/library/snmpUnixDomain.h (5.3):
+
+ - don't export netsnmp_unix_blah() functions
+
+2002-08-09 09:53 jbpn
+
+ * include/net-snmp/library/snmp_transport.h (5.1):
+
+ - fix nasty formatting
+
+2002-08-08 12:14 rstory
+
+ * snmplib/snmpv3.c (5.2):
+
+ reword config_perror msgs to remove "Error", as it is redundant
+
+2002-08-08 12:11 rstory
+
+ * snmplib/keytools.c (5.1):
+
+ remove ifdef to log msg to user, after making msg more informative; remove
+ annoying blank lines
+
+2002-08-08 11:33 hardaker
+
+ * acconfig.h (5.7), configure (5.16), configure.in (5.14):
+
+ Patch from Harrie to completely disable kmem usage
+
+2002-08-06 03:30 jbpn
+
+ * agent/mibgroup/agentx/subagent.c (5.3):
+
+ - set main_session to NULL in subagent_shutdown(). This (along with the
+ deregistration of all alarms) allows AgentX functionality to be
+ stopped and restarted in subagents.
+ - Thanks to Vishal Verma for original patch
+
+2002-08-06 03:27 jbpn
+
+ * include/net-snmp/library/snmp_alarm.h (5.1):
+
+ - add snmp_alarm_unregister_all() function
+
+2002-08-06 03:26 jbpn
+
+ * snmplib/: snmp_alarm.c (5.3), snmp_api.c (5.12):
+
+ - add snmp_alarm_unregister_all() function
+ - call it from snmp_shutdown()
+ - thanks to Vishal Verma for original patch
+
+2002-08-06 03:17 jbpn
+
+ * snmplib/snmp_alarm.c (V4-2-patches.4):
+
+ - add debugging output when all alarms unregistered
+
+2002-08-06 03:10 jbpn
+
+ * agent/mibgroup/agentx/subagent.c (V4-2-patches.4):
+
+ - set main_session to NULL in subagent_shutdown(). This (along with the
+ deregistration of all alarms) allows AgentX functionality to be
+ stopped and restarted in subagents.
+ - Thanks to Vishal Verma for this patch (#558517)
+
+2002-08-06 03:08 jbpn
+
+ * snmplib/: snmp_alarm.c, snmp_alarm.h, snmp_api.c
+ (V4-2-patches.[3,1,36]):
+
+ - add snmp_alarm_unregister_all() function
+ - call it from snmp_shutdown()
+ - thanks to Vishal Verma for providing this patch
+
+2002-08-05 10:06 rstory
+
+ * local/mib2c.iterate.conf (5.3):
+
+ match function definition w/Netsnmp_*_DataPoint typedefs; add cvs Id
+
+2002-08-03 11:52 rstory
+
+ * dist/RELEASE-INSTRUCTIONS (1.5):
+
+ break up lines long than 80 chars; abcde, not abcdd
+
+2002-08-03 03:21 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS (1.4):
+
+ more updates about things Wes does at 12:30 am
+
+2002-08-03 02:44 hardaker
+
+ * FAQ (5.14), README (5.8), sedscript.in (5.6), perl/SNMP/SNMP.pm
+ (5.12), snmplib/snmp_version.c (5.5):
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.3 )
+
+-------------------------------------------------------------------------------
+
+Changes: V5.0.2 -> V5.0.3
+
+2002-08-02 23:41 hardaker
+
+ * agent/mibgroup/agent/.cvsignore:
+
+ add .libs
+
+2002-08-02 23:40 hardaker
+
+ * agent/mibgroup/Rmon/.cvsignore:
+
+ ignore file
+
+2002-08-02 23:39 hardaker
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend
+:
+
+ make depend
+
+2002-08-02 23:37 hardaker
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ forgotten to check in test for perl_ev changes
+
+2002-08-02 23:35 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ remove debugging print (opps)
+
+2002-08-02 23:35 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ fix default version usage.
+
+2002-08-02 23:34 hardaker
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ Patch #572394 from Katsuhisa ABE:
+ - support link local addresses
+ - bind to ipv6 only if IPV6_V6ONLY is defined.
+
+2002-08-02 23:31 hardaker
+
+ * snmplib/snmp_parse_args.c:
+
+ fix configure specified default versioning
+
+2002-08-02 22:58 hardaker
+
+ * configure, configure.in:
+
+ Patch #572394: add ipv6 transports when --enable-ipv6 defined. Thanks to Katsuhisa ABE.
+
+2002-08-02 14:59 hardaker
+
+ * NEWS:
+
+ update for 5.0.3
+
+2002-08-02 14:55 hardaker
+
+ * man/snmp_agent_api.3.def:
+
+ update
+
+2002-08-02 14:39 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ more docs.
+
+2002-08-02 14:29 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_bulk_to_next.3,
+ netsnmp_debug.3, netsnmp_handler.3, netsnmp_instance.3
+, netsnmp_multiplexer.3, netsnmp_old_api.3,
+ netsnmp_read_only.3, netsnmp_scalar.3,
+ netsnmp_serialize.3, netsnmp_table.3,
+ netsnmp_table_array.3, netsnmp_table_data.3,
+ netsnmp_table_dataset.3, netsnmp_table_iterator.3,
+ netsnmp_todo.3, netsnmp_watcher.3, Makefile.in:
+
+ doxygen update.
+
+2002-08-02 14:26 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ update for yet more stuff.
+
+2002-08-02 14:26 hardaker
+
+ * remove-files:
+
+ remove a few more dist related files.
+
+2002-08-02 14:23 hardaker
+
+ * snmplib/snmp_api.c:
+
+ error message change to remove DES specific error msg.
+
+2002-08-02 14:23 hardaker
+
+ * perl/agent/typemap:
+
+ spacing fixes.
+
+2002-08-02 14:22 hardaker
+
+ * perl/agent/: Makefile.PL, agent.xs:
+
+ renamed file.
+
+2002-08-02 14:22 hardaker
+
+ * perl/agent/: netsnmp_request_info.pm,
+ netsnmp_request_infoPtr.pm:
+
+ renamed file
+
+2002-08-02 14:20 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ Add a "evalvars" directive to do simply replacements.
+
+2002-08-02 14:16 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ use CVSUSER variable when doing stuff instead of my hard-coded name.
+
+2002-08-02 14:14 hardaker
+
+ * Makefile.top:
+
+ update libtool version for 5.0.3
+
+2002-08-02 14:13 hardaker
+
+ * Makefile.in:
+
+ change checkcomment tag to exclude win32 files.
+
+2002-08-02 14:13 hardaker
+
+ * ChangeLog:
+
+ update changelog build notes at the bottom of the file.
+
+2002-08-02 14:01 hardaker
+
+ * dist/RELEASE-INSTRUCTIONS:
+
+ created a how-to file for making releases
+
+2002-08-02 14:01 hardaker
+
+ * dist/changelogfix:
+
+ changelog fix-up script
+
+2002-08-02 10:21 rstory
+
+ * dist/nsb-functions:
+
+ translate '/' in system name to '_' (for cygwin)
+
+2002-08-02 09:56 rstory
+
+ * dist/README.build-scripts:
+
+ fix section cvs get command example
+
+2002-08-02 09:06 dts12
+
+ * include/net-snmp/system/hpux.h:
+
+ Suppress 'inline' when not using GCC. Suggested by Johannes Schmidt-Fischer
+
+2002-08-02 08:59 rstory
+
+ * dist/README.build-scripts:
+
+ fix section on skipping make test; add -p flag to examples
+
+2002-08-02 08:52 rstory
+
+ * dist/README.build-scripts:
+
+ describe use of nsb-package script. Testers and comments appreciated...
+
+2002-08-02 08:33 rstory
+
+ * dist/nsb-platform:
+
+ output platform info
+
+2002-08-02 08:18 rstory
+
+ * dist/nsb-build:
+
+ renamed to nsb-package
+
+2002-08-02 08:18 rstory
+
+ * dist/nsb-package:
+
+ renamed nsb-build to avoid confusion with script function
+
+2002-08-02 08:15 hardaker
+
+ * dist/nsb-functions:
+
+ Change location name to Unknown
+
+2002-08-02 08:08 hardaker
+
+ * perl/: ASN/ASN.pm, agent/agent.pm,
+ agent/netsnmp_request_info.pm:
+
+ more old perl fixes
+
+2002-08-02 08:04 hardaker
+
+ * perl/: OID/OID.pm, agent/default_store/default_store.pm
+:
+
+ more old perl fixes
+
+2002-08-02 08:00 hardaker
+
+ * perl/default_store/default_store.pm:
+
+ more old perl fixes
+
+2002-08-02 07:48 rstory
+
+ * dist/nsb-functions:
+
+ fix return code
+
+2002-08-02 07:48 rstory
+
+ * dist/nsb-build:
+
+ don't pull first arg til after getopts/shift; move set of default opts
+
+2002-08-02 07:37 rstory
+
+ * dist/nsb-functions:
+
+ add option to skip build or test steps; add -f option to prompt to override
+ no prompt flag (useful for errors); new nsb-make method; check rc of
+ make clean
+
+2002-08-02 07:36 rstory
+
+ * dist/nsb-build:
+
+ add option to skip build or test steps; tweak usage
+
+2002-08-02 07:10 rstory
+
+ * dist/nsb-build:
+
+ fix typo; remove extra trailing slash in dir
+
+2002-08-02 06:33 rstory
+
+ * dist/nsb-build:
+
+ check more places to source nsb-functions; fix for cmd line build path
+
+2002-08-02 06:28 rstory
+
+ * dist/nsb-functions:
+
+ just show errors after build, not warnings
+
+2002-08-01 17:04 hardaker
+
+ * perl/OID/OID.xs:
+
+ revert to non-ansi prototypes for older perl with older compilers on
+ older systems. Not that I'm grumpy, of course.
+
+2002-08-01 16:25 hardaker
+
+ * configure.in, agent/snmp_perl.c:
+
+ check for older and new embedded perl call functions
+
+2002-08-01 14:07 rstory
+
+ * dist/nsb-functions:
+
+ don't symlink to src from build; update nsb-get-config
+
+2002-08-01 14:06 rstory
+
+ * dist/nsb-build:
+
+ fix for cmd line build dir
+
+2002-08-01 12:58 rstory
+
+ * dist/nsb-functions:
+
+ fix config install path; remove platform specific from nsb-build
+
+2002-08-01 12:56 rstory
+
+ * dist/nsb-build:
+
+ remove hard coded info
+
+2002-08-01 12:22 rstory
+
+ * dist/nsb-functions:
+
+ add option to skip prompts; remove previous installs; tweak err pattern
+
+2002-08-01 12:14 jbpn
+
+ * man/snmp_alarm.3.def:
+
+ - use netsnmp_ds_set_boolean() instead of ds_set_boolean()
+
+2002-08-01 12:12 jbpn
+
+ * man/snmp_agent_api.3.def:
+
+ - change code sample to use netsnmp_ds_set_boolean()
+ - update references to libraries (which were still talking about
+ libucdagent et al.) -- PLEASE REVIEW BEFORE 5.0.3
+
+2002-08-01 12:07 rstory
+
+ * dist/nsb-functions:
+
+ lots of fixes to previouse untested scripts
+
+2002-08-01 12:04 rstory
+
+ * dist/nsb-build:
+
+ script to build releases... still some hardcoding while testing, but its
+ getting there...
+
+2002-08-01 11:51 rstory
+
+ * dist/: cvsshow, cvsup:
+
+ utility scripts
+
+2002-08-01 09:30 dts12
+
+ * agent/helpers/: scalar.c, scalar2.c:
+
+ Go with the "scalar as super-handler of instance" implementation.
+ Scalar1.c is probably redundent, but we can remove this later.
+ (Yup - I'm a coward....)
+
+2002-08-01 01:11 dts12
+
+ * README.win32:
+
+ Minor typos, plus emphasise the need for the IpHlpAPI library.
+
+2002-07-30 08:26 dts12
+
+ * local/snmpconf.dir/snmp-data/output:
+
+ Recognise '0' as a valid setting for suffixPrinting, and update the
+ prompts to match the v5 output formats defaults. See Bug #567451
+
+2002-07-30 07:59 dts12
+
+ * apps/snmptable.c:
+
+ First attempt at tackling Bug #574434
+ Recognise that default output format is equivalent to -OS.
+ Snmptable still crashes with -Of or -Ou, but at least the
+ default invocation works.
+
+2002-07-30 05:41 dts12
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ Export newly-defined public names, and re-export some routines that
+ have changed name. This should now compile under Visual C++ again.
+
+2002-07-30 02:27 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Don't remove a Row-Status auto-deleted row until the last minute,
+ in case other (lower) handlers try to access it.
+
+2002-07-30 01:38 dts12
+
+ * FAQ (V4-2-patches.1), FAQ:
+
+ Mention the need to escape quotes when querying string-indexed tables.
+
+2002-07-29 23:56 rstory
+
+ * include/net-snmp/agent/table_array.h:
+
+ update register function name
+
+2002-07-29 23:55 rstory
+
+ * local/mib2c.array-user.conf:
+
+ autogen example code for index checking in extract_index; update register
+ function name; use container in *_get_by_idx()
+
+2002-07-29 16:23 rstory
+
+ * local/mib2c.array-user.conf:
+
+ update for new struct name; add example code as comments instead of var_XXX
+ and such; in a few important places add code which will allow a newly
+ generated module to be compiled if -DTABLE_CONTAINER_TODO is specified;
+ probably a few other tweaks I forgot
+
+2002-07-29 03:06 dts12
+
+ * agent/helpers/: table_array.c, table.c, table_data.c
+, table_dataset.c, table_iterator.c:
+
+ Protect against deferencing NULL pointers.
+ (Most of these Should Never Happen but You Can't Be Too Careful!)
+
+2002-07-29 03:03 jbpn
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - detect `dmfe' ethernet cards as found on Netra X1 machines.
+ Thanks to John Olson for verifying this fix.
+
+ Also note that `indent' has ----ed the formatting of this file
+ beyond legibility in several places. I don't think we want to
+ do *that* again.
+
+2002-07-29 02:40 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Fuller validation of RowStatus values wrt row creation/existing rows.
+
+2002-07-29 01:25 dts12
+
+ * win32/: libsnmp/libsnmp.dsp, libsnmp_dll/libsnmp_dll.dsp
+, netsnmpmibs/netsnmpmibs.dsp:
+
+ Take account of recent changes in library files.
+ 'Release' applications still don't link properly, but at least
+ the libraries compile, and the 'Debug' side seems to work.
+
+2002-07-29 01:23 dts12
+
+ * include/net-snmp/system/aix.h:
+
+ Tweak inline handling for AIX - suggested by Andy Hood.
+
+2002-07-26 10:52 rstory
+
+ * snmplib/Makefile.in:
+
+ remove autodependencies until portable solution can be found
+
+2002-07-26 08:41 dts12
+
+ * win32/: mib_module_config.h, mib_module_includes.h,
+ mib_module_inits.h:
+
+ Remove mention of the (obsolete) ucd-snmp/registry module.
+
+2002-07-26 07:32 dts12
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ Protect the Win32 version of the config file, so that the other header
+ files recognise that it has indeed been included.
+
+2002-07-26 07:24 dts12
+
+ * FAQ (V4-2-patches.0), FAQ:
+
+ A bit more detail on mib2c, plus the non-writeability of sys{Location,Contact}
+
+2002-07-26 05:22 dts12
+
+ * FAQ (V4-2-patches.9), FAQ:
+
+ Another entry about invalid use of mib2c.
+
+2002-07-26 05:16 dts12
+
+ * snmplib/Makefile.in:
+
+ Suppress the "non-standard" conditional construct,
+ since it's not recognised by some versions of 'make'.
+
+2002-07-25 05:00 dts12
+
+ * agent/helpers/Makefile.in:
+
+ Add the 'scalar' and 'watcher' helpers to the helper library.
+
+2002-07-25 03:28 dts12
+
+ * agent/helpers/watcher.c, include/net-snmp/agent/watcher.h
+:
+
+ Support for watching a sysUpTime marker.
+
+2002-07-25 03:24 dts12
+
+ * agent/helpers/table_dataset.c,
+ include/net-snmp/agent/table_dataset.h:
+
+ New routine for retrieving a column value directly from a request structure.
+
+2002-07-24 13:17 rstory
+
+ * snmplib/default_store.c:
+
+ check for setting same value in ds_set_string, since it frees the old
+ value before duping the new one
+
+2002-07-24 11:58 rstory
+
+ * dist/snmpd-init.d:
+
+ first stab at init.d startup script for snmpd
+
+2002-07-24 06:48 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ When running off the end of one column, and moving on to the next
+ (in a GetNext), we need to start again with the first row.
+ This is probably the intention of the conditional block at the start
+ of this loop, but I can't see how this test could ever possibly match.
+
+ Note that there is also a reference to the row data accessible via
+ the 'request->parent_data' data list. This will also need to be
+ rewound. Suggestions as to how best to do so gratefully received.
+
+2002-07-24 06:39 dts12
+
+ * agent/helpers/table_dataset.c:
+
+ Use SNMPv2-style exceptions rather than the uninformative SNMPv1
+ 'noSuchName' error for missing table objects.
+
+2002-07-24 06:37 dts12
+
+ * agent/helpers/table_data.c:
+
+ Protect against the possibility of failing to extract a row structure.
+
+2002-07-24 06:35 dts12
+
+ * agent/helpers/table_data.c:
+
+ Use SNMPv2-style exceptions rather than the uninformative SNMPv1
+ 'noSuchName' error for missing table objects.
+
+2002-07-24 06:32 dts12
+
+ * agent/helpers/table.c:
+
+ Use SNMPv2-style exceptions rather than the uninformative SNMPv1
+ 'noSuchName' error for invalid table objects.
+
+2002-07-23 14:59 rstory
+
+ * include/net-snmp/library/snmp_assert.h:
+
+ missing comment terminator.:-(
+
+2002-07-23 12:02 rstory
+
+ * agent/object_monitor.c, agent/snmp_agent.c,
+ agent/helpers/table.c, agent/helpers/table_array.c,
+ snmplib/container_binary_array.c:
+
+ use new netsnmp_assert instead of assert
+
+2002-07-23 12:00 rstory
+
+ * include/net-snmp/library/snmp_assert.h, snmplib/Makefile.in
+:
+
+ add new netsnmp_assert, which defaults to logging a message
+
+2002-07-23 07:43 dts12
+
+ * man/: mib_api.3 (V4-2-patches.3), mib_api.3.def:
+
+ Fix the descriptions of the 'sprint_realloc' calls, to include the 'allow_realloc' parameter.
+
+2002-07-22 10:58 rstory
+
+ * dist/: net-snmp.spec, nsb-functions:
+
+ new (almost empty) spec file; start creating functions for automated builds
+
+2002-07-22 01:46 dts12
+
+ * agent/helpers/watcher.c, include/net-snmp/agent/watcher.h
+:
+
+ A more generalised form of the 'ns_register_{type}_instance' routines,
+ implemented as a separate helper module, and useable with both the
+ instance and scalar helpers.
+ This also supports arbitrary ASN types (including strings and OIDs).
+
+2002-07-22 01:43 dts12
+
+ * agent/helpers/scalar1.c, agent/helpers/scalar2.c,
+ include/net-snmp/agent/scalar.h:
+
+ Agent helper module for support of scalar objects.
+ Very similar to the "instance" helper, except that this deals with
+ invalid instance subidentifiers as well (reporting noSuchInstance
+ rather that noSuchObject).
+
+ There are two parallel implementations as the moment:
+ - scalar1 is essentially an enhanced copy of the instance helper,
+ but is completely independent of it.
+ - scalar2 sits above the instance helper, and uses that to do most
+ of the real processing.
+ Scalar1 is probably slightly more efficient, while scalar2 feels more
+ in keeping with the general ethos of the handler mechanism.
+ We probably need to decide which to adopt, and junk the other.
+
+2002-07-19 14:24 rstory
+
+ * agent/mibgroup/agentx/master.c:
+
+ use net agentx retires/timeout ds values
+
+2002-07-19 14:22 rstory
+
+ * agent/mibgroup/agentx/agentx_config.c:
+
+ register parser for agentxTimeout and agentxRetries tokens
+
+2002-07-19 14:15 rstory
+
+ * agent/mibgroup/Makefile.depend:
+
+ remove refs to non-existent nstAgent* files
+
+2002-07-19 14:14 rstory
+
+ * agent/snmpd.c:
+
+ move ONE_SEC to definitions.h; add AGENTX_TIMEOUT and AGENTX_RETRIES defaults
+
+2002-07-19 14:10 rstory
+
+ * include/net-snmp/agent/ds_agent.h:
+
+ add AGENTX_TIMEOUT and AGENTX_RETRIES
+
+2002-07-19 14:10 rstory
+
+ * include/net-snmp/definitions.h:
+
+ move definition of ONE_SEC here from snmpd.c
+
+2002-07-19 11:23 rstory
+
+ * snmplib/container.c:
+
+ pass local obj, not random unitialized pointer.:-(
+
+2002-07-19 04:04 dts12
+
+ * include/net-snmp/library/tools.h:
+
+ Handle systems where MAXPATHLEN isn't defined.
+
+2002-07-19 03:31 dts12
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ Use the "system-independent" SNMP_MAXPATH length definition instead of MAXPATHLEN
+
+2002-07-18 22:00 rstory
+
+ * agent/Makefile.depend:
+
+ remove refs to nonexistent mibgroup/nstAgentModuleObject.h
+
+2002-07-18 19:44 hardaker
+
+ * FAQ, README, sedscript.in, perl/SNMP/SNMP.pm
+, snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.2 )
+
+-------------------------------------------------------------------------------
+
+Changes: V5.0.1 -> V5.0.2
+
+2002-07-18 19:41 hardaker
+
+ * testing/eval_tools.sh:
+
+ minor patch for non-existent (died) log files.
+
+2002-07-18 19:41 hardaker
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend:
+
+ make depend
+
+2002-07-18 19:40 hardaker
+
+ * NEWS:
+
+ update for 5.0.2
+
+2002-07-18 19:40 hardaker
+
+ * Makefile.rules:
+
+ make depend fixes.
+
+2002-07-18 18:57 hardaker
+
+ * agent/mibgroup/Rmon/: alarm.c, event.c:
+
+ make the rmon code compile.
+ - new subtree pointer structure.
+ - sprint_objid -> snprint_objid
+
+2002-07-18 18:32 hardaker
+
+ * Makefile.in:
+
+ silence perl subdirectory build commands.
+
+2002-07-18 18:31 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ - Use netsh -t -d xml to get xml output from netsh.
+ (Ok, I'm sitting here at an IETF conference having an argument about
+ xml vs BER and needed a XML(-like) example of a huge data set, so I
+ made netsh do it.)
+
+2002-07-18 17:54 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ - initial support for doing requests from multiple hosts (retrieval, not sets)
+
+2002-07-18 17:50 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ more fixes to still ugly colorized text (well, the text is pretty but
+ the support is ugly).
+
+2002-07-18 17:42 hardaker
+
+ * include/net-snmp/library/container.h:
+
+ change text string error to match function name called.
+
+2002-07-18 15:31 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+, snmplib/container_binary_array.c:
+
+ rename free -> cfree to avoid some problem wes had... ;-)
+
+2002-07-18 14:41 rstory
+
+ * snmplib/mib.c:
+
+ two people fixing memory leak in different places = segfault
+
+2002-07-18 11:02 rstory
+
+ * local/mib2c.array-user.conf:
+
+ $name -> $i
+
+2002-07-18 10:56 rstory
+
+ * agent/object_monitor.c,
+ include/net-snmp/agent/object_monitor.h:
+
+ update to use containers
+
+2002-07-18 09:40 rstory
+
+ * net-snmp-config.in:
+
+ add --debug-tokens, --indent-options
+
+2002-07-18 09:18 dts12
+
+ * include/net-snmp/agent/auto_nlist.h, snmplib/snmp-tc.c
+, include/net-snmp/system/irix.h:
+
+ Apply patch from Bug #582347, for Irix 6.5 support.
+ Submitted by Jan Yenya Kasprzak
+
+2002-07-18 09:12 dts12
+
+ * man/: snmptrapd.8 (V4-2-patches.5), snmptrapd.8.def:
+
+ Fix markup problem on snmptrapd man page (Bug #583329)
+
+2002-07-18 09:10 dts12
+
+ * snmplib/snmp-tc.c:
+
+ The fix for the tm_gmtoff problem on AIX (Bug #565769) also applies to AIX 5
+
+2002-07-18 09:06 dts12
+
+ * apps/: encode_keychange.c (V4-2-patches.1), encode_keychange.c
+:
+
+ Fix off-by-one buffer overflow (patch #577261)
+
+2002-07-18 08:51 dts12
+
+ * local/mib2c.array-user.conf:
+
+ Generate one code-file per table (to match the header structure).
+ My apologies if this isn't correct, Robert - but the previous behaviour
+ seemed to be broken.
+
+2002-07-18 08:37 dts12
+
+ * local/mib2c.old-api.conf:
+
+ Tackle some of the immediate deficiencies in the first draft old-api config.
+ (Now that Wes has pointed me in the direction of the documentation!)
+
+2002-07-18 08:22 dts12
+
+ * local/mib2c:
+
+ Fix the 'decl' substitution handling (so it doesn't include the internal token as well).
+
+2002-07-18 07:18 dts12
+
+ * local/mib2c.scalar.conf:
+
+ Provide the missing parameter in a read_only instance registration.
+
+2002-07-18 07:09 dts12
+
+ * agent/helpers/instance.c, include/net-snmp/agent/instance.h
+:
+
+ Bring the 'read_only_int' instance handler in line with the rest of
+ the convenience instance handlers.
+ (and even break the habit of a lifetime and declare the thing....)
+
+2002-07-18 05:48 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ fix another memory leak due to an improper ifdefed out section of code
+
+2002-07-18 04:45 hardaker
+
+ * snmplib/scapi.c:
+
+ I'm beginning to regret ever running indent on the code base...
+
+2002-07-17 15:43 hardaker
+
+ * local/: Makefile.in, mib2c.conf:
+
+ document and install mib2c.old-api.conf
+
+2002-07-17 13:07 rstory
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ fix segfault (possibly creating memory leak); author needs to examine code
+
+2002-07-17 07:41 dts12
+
+ * local/: mib2c.array-user.conf, mib2c.conf,
+ mib2c.create-dataset.conf, mib2c.int_watch.conf,
+ mib2c.iterate.conf, mib2c.scalar.conf:
+
+ Dave's being unreasonably picky about grammar & spelling again.
+ Just ignore him, and he'll go away.....
+
+2002-07-17 07:20 dts12
+
+ * local/mib2c.old-api.conf:
+
+ Initial support for the old 4x-style agent API using the new version of mib2c.
+ It doesn't handle types properly, and I'm sure I'll have buggered up some of
+ the control structure handling, but it seems to generate something that's
+ pretty close to the old output. It's better than nothing.....
+
+2002-07-16 22:40 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ restore inline functions (sigh. I feel like I'm playing ring-around-the-rosie)
+
+2002-07-16 21:58 rstory
+
+ * agent/helpers/table_array.c,
+ include/net-snmp/agent/table_array.h,
+ local/mib2c.array-user.conf:
+
+ rename some struct members to make code easier to read; a bit of re-ordering
+ in the set code; new flags for new and deleted rows; row deletes now
+ actualy work!
+
+2002-07-16 19:32 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ change complex macros into functions. would be nice if C had inline.
+
+2002-07-16 18:07 rstory
+
+ * include/net-snmp/types.h:
+
+ umm, try using correct define.:-/
+
+2002-07-16 18:05 rstory
+
+ * include/net-snmp/types.h:
+
+ test that net-snmp-config.h has been included, instead of actually including it..
+ (shouldn't this really be in all the header files?)
+
+2002-07-16 12:14 rstory
+
+ * local/mib2c.array-user.conf:
+
+ update for containers
+
+2002-07-16 11:20 rstory
+
+ * snmplib/snmpTCPIPv6Domain.c:
+
+ fix compiler warning
+
+2002-07-16 11:16 rstory
+
+ * apps/snmpnetstat/Makefile.depend:
+
+ remove oid_array related dependencies (grumble grumble)
+
+2002-07-16 11:14 rstory
+
+ * apps/Makefile.depend:
+
+ remove oid_array related dependencies
+
+2002-07-16 11:02 rstory
+
+ * agent/: Makefile.depend, mibgroup/Makefile.depend:
+
+ remove oid_array related dependencies
+
+2002-07-16 10:52 rstory
+
+ * snmplib/Makefile.depend, agent/helpers/Makefile.depend
+:
+
+ remove oid_array related dependencies
+
+2002-07-16 10:50 rstory
+
+ * snmplib/Makefile.in:
+
+ remove factory.c
+
+2002-07-16 10:29 rstory
+
+ * snmplib/snmp_api.c:
+
+ add netsnmp_container_init_list() in startup inits
+
+2002-07-16 10:21 rstory
+
+ * include/net-snmp/library/oid_array.h, snmplib/oid_array.c
+:
+
+ remove unused files
+
+2002-07-16 10:21 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ chg param type from void* to struct *
+
+2002-07-16 10:03 rstory
+
+ * snmplib/Makefile.in:
+
+ remove recently deleted oid_array.h; add factory, binary array .[ch]; derive
+ OBJS and LOBJS from CSRCS; add (optional) auto dependency generation
+
+2002-07-16 09:53 rstory
+
+ * include/net-snmp/mib_api.h:
+
+ remove recently deleted oid_array.h
+
+2002-07-16 09:52 rstory
+
+ * agent/mibgroup/ucd-snmp/extensible.h:
+
+ struct subtree -> netsnmp_subtree
+
+2002-07-16 09:46 rstory
+
+ * agent/helpers/table_array.c,
+ include/net-snmp/agent/table_array.h:
+
+ remove last remaining refs to now defunct oid_array
+
+2002-07-16 09:40 rstory
+
+ * include/net-snmp/library/container_binary_array.h,
+ snmplib/container_binary_array.c:
+
+ generic binary array container extracted from oid_array
+
+2002-07-16 09:40 rstory
+
+ * include/net-snmp/types.h:
+
+ include net-snmp-config.h; new typedef struct netsnmp_index (oid ptr + len)
+
+2002-07-16 09:38 rstory
+
+ * agent/helpers/table_array.c,
+ include/net-snmp/agent/table_array.h:
+
+ use generic container interface; use new netsnmp_index instead of
+ oid_array_header; rename array_group -> request_group
+
+2002-07-16 09:34 rstory
+
+ * include/net-snmp/library/container.h, snmplib/container.c
+:
+
+ add iterators; more function typedefs; rename some func ptrs, add find_next,
+ get_subset, get_iterator, for_each, ncompare; add ability to have nested
+ containers; more utility routines; convenience marcros; start adding comments
+
+2002-07-16 09:29 rstory
+
+ * include/net-snmp/library/factory.h:
+
+ declarations for a generic factory
+
+2002-07-16 08:48 dts12
+
+ * agent/mibgroup/ucd-snmp/: memory_dynix.c, memory_hpux.c
+, vmstat_dynix.c, vmstat_hpux.c:
+
+ Apply patch from bug report 581618 (also applicable to dynix)
+ Provided by Nicholas L. Nigay
+
+2002-07-16 06:54 hardaker
+
+ * perl/: ASN/ASN.pm, OID/OID.pm, agent/agent.pm,
+ agent/default_store/default_store.pm,
+ default_store/default_store.pm:
+
+ remove "our" problem and use older "use vars" instead for older perl.
+ (this should make it work with perl 5.005. Could some one test this
+ for me?)
+
+2002-07-15 06:45 jbpn
+
+ * agent/mibgroup/agentx/master.c:
+
+ - names of netsnmp_subtree elements changed
+
+2002-07-15 06:42 jbpn
+
+ * agent/mibgroup/ucd-snmp/extensible.c:
+
+ - struct subtree renamed to netsnmp_subtree
+
+2002-07-15 05:25 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ Some really nasty hacks to get colorized tables to work.
+
+2002-07-14 20:51 hardaker
+
+ * perl/SNMP/t/: bulkwalk.t, mib.t:
+
+ comment out broken tests for now (XXX marked)
+
+2002-07-14 20:50 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ fix getbulk.
+
+2002-07-14 20:20 hardaker
+
+ * agent/agent_handler.c,
+ include/net-snmp/agent/agent_handler.h:
+
+ A new function to call a sub-handler but passing it only one request to handle.
+
+2002-07-10 21:21 rstory
+
+ * win32/: config.h, net-snmp/net-snmp-config.h:
+
+ define LOG_DAEMON, since windows doesn't have it
+
+2002-07-10 21:07 rstory
+
+ * win32/: config.h, net-snmp/net-snmp-config.h:
+
+ remove define of in_addr_t, which can be found in net-snmp/types.h
+
+2002-07-10 02:36 jbpn
+
+ * agent/agent_handler.c:
+
+ - struct subtree renamed to netsnmp_subtree
+
+2002-07-10 02:35 jbpn
+
+ * agent/agent_index.c:
+
+ - don't use 0 in %p format specifiers
+
+2002-07-10 02:34 jbpn
+
+ * agent/snmp_agent.c:
+
+ - struct subtree renamed to netsnmp_subtree
+ - fix some horrible indent broken formatting
+
+2002-07-10 02:33 jbpn
+
+ * agent/snmp_vars.c:
+
+ - struct subtree renamed to netsnmp_subtree
+ - remove some obsolete variables
+
+2002-07-10 02:33 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - reflect changed function names from agent_registry
+
+2002-07-10 02:32 jbpn
+
+ * agent/mibgroup/agent/nsModuleTable.c:
+
+ - changes due to renaming of struct subtree to netsnmp_subtree
+ - NOTE MEMORY LEAK (which I can't see how to fix -- new agent API
+ experts please examine)
+
+2002-07-10 02:29 jbpn
+
+ * agent/agent_registry.c:
+
+ - struct subtree renamed to netsnmp_subtree
+ - name, start, end members are now dynamically allocated to reduce
+ wasted memory (by a factor of 5 or so)
+ - functions are renamed consistently
+
+2002-07-10 02:20 jbpn
+
+ * include/net-snmp/agent/: agent_registry.h,
+ net-snmp-agent-includes.h, snmp_agent.h, snmp_vars.h
+, var_struct.h:
+
+ - struct subtree renamed to netsnmp_subtree
+
+2002-07-09 06:02 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - free cache_id storage when closing session
+
+2002-07-09 05:56 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - just call netsnmp_ds_shutdown() once in snmp_shutdown()
+
+2002-07-09 04:15 jbpn
+
+ * snmplib/mib.c:
+
+ - fix memory leak in netsnmp_fixup_mib_directory()
+
+2002-07-09 03:14 jbpn
+
+ * agent/snmpd.c:
+
+ - add a cast to quell compiler warning
+
+2002-07-08 22:09 rstory
+
+ * agent/mibgroup/util_funcs.h:
+
+ extern C for C++ compiles
+
+2002-07-08 07:21 jbpn
+
+ * include/net-snmp/agent/snmp_vars.h:
+
+ - remove obsolete function prototypes
+
+2002-07-07 19:45 rstory
+
+ * local/mib2c.array-user.conf:
+
+ update to use containers
+
+2002-07-07 19:38 rstory
+
+ * include/net-snmp/library/oid_array.h:
+
+ fix typo
+
+2002-07-07 19:37 rstory
+
+ * agent/mibgroup/ucd-snmp/: disk.c, proc.c:
+
+ fix compiler warning
+
+2002-07-07 19:33 rstory
+
+ * agent/mibgroup/: agent/nsModuleTable.c,
+ agent/nsTransactionTable.c, host/hr_swinst.c:
+
+ fix compiler warning
+
+2002-07-07 19:03 rstory
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ remove unused vars
+
+2002-07-07 19:00 rstory
+
+ * snmplib/oid_stash.c:
+
+ fix compiler warnings
+
+2002-07-07 18:53 rstory
+
+ * snmplib/asn1.c:
+
+ fix compiler warnings
+
+2002-07-07 18:50 rstory
+
+ * include/net-snmp/library/snmp_api.h, snmplib/snmp_api.c
+:
+
+ make param const; fix compile const warning
+
+2002-07-07 18:27 rstory
+
+ * snmplib/mib.c:
+
+ fix compiler warning; fix memory leak; prep a few comments for indent
+
+2002-07-06 14:11 hardaker
+
+ * README, sedscript.in, snmplib/snmp_version.c,
+ FAQ, perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.2.pre1 )
+
+2002-07-06 14:10 hardaker
+
+ * doxygen.conf:
+
+ change project version to 5.0.2
+
+2002-07-06 14:09 hardaker
+
+ * perl/SNMP/Makefile.PL:
+
+ snmptrapd is actually built in the apps directory, not the agent directory.
+
+2002-07-05 11:55 rstory
+
+ * local/mib2c:
+
+ clarify directions for obtaining perl/SNMP module.
+
+2002-07-05 05:18 jbpn
+
+ * agent/mibgroup/agentx/client.c:
+
+ - I must not check in code without compiling it
+ - I must not check in code without compiling it
+ - I must not check in code without compiling it
+ - I must not check in code without compiling it
+ - ...
+
+2002-07-05 03:23 jbpn
+
+ * agent/mibgroup/: agentx/client.c, mibII/system_mib.c:
+
+ - sysObjectID was being returned minus its last sub-identifier because
+ the length variable had not been updated to reflect the fact that it
+ is now longer. Code changed to use sizeof() instead, so this won't
+ happen again. Reported by Stian Soiland (bug #577439).
+
+2002-07-04 10:13 rstory
+
+ * snmplib/read_config.c:
+
+ ucd-snmp -> net-snmp
+
+2002-07-04 07:06 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - modified handling of opaque pointer for stream-based transports to
+ avoid both multiple free() problem and unnecessary copying.
+
+2002-07-04 06:00 dts12
+
+ * man/snmpd.conf.5.def, agent/mibgroup/host/hr_storage.c
+ (V4-2-patches.[5,9]), man/snmpd.conf.5.def,
+ agent/mibgroup/host/hr_storage.c:
+
+ Apply Johannes Schmidt-Fischer's NetworkDisk patch #554554
+
+2002-07-04 05:56 dts12
+
+ * agent/mibgroup/host/: hr_filesys.c, hr_filesys.h
+ (V4-2-patches.[5,1]), hr_filesys.c, hr_filesys.h:
+
+ Apply Johannes Schmidt-Fischer's NFS filesystem patch #554553
+ (simplified to avoid the re-indentation - which makes it easier to see
+ what's changed. The whole HostRes group needs cleaning up anyway!)
+
+2002-07-04 05:52 dts12
+
+ * snmplib/snmp_api.c:
+
+ Ensure transport opaque data isn't multiply assigned
+ (and hence multiply freed) for stream-based transports.
+ Datagram-based transports don't suffer from this problem.
+ Based on Patch 573771
+
+2002-07-03 16:28 rstory
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ be precise about what file needs to be configured for access control
+
+2002-07-03 14:13 rstory
+
+ * local/mib2c.conf:
+
+ fix minor grammar errors; add descr for mib2c.array-user; add section header
+ for generating header definition files
+
+2002-07-03 13:11 rstory
+
+ * include/net-snmp/: types.h, library/system.h:
+
+ move include for in_addr_t to net-snmp/types.h, where in_addr_t is defined
+ for systems w/out netinet/in.h
+
+2002-07-03 12:51 rstory
+
+ * local/mib2c.scalar.conf:
+
+ more tweaks noticed on the mailing list
+
+2002-07-03 08:23 hardaker
+
+ * perl/agent/test.pl:
+
+ make test cleanups test.pl
+
+2002-07-03 03:42 dts12
+
+ * agent/mibgroup/: util_funcs.c (V4-2-patches.1), util_funcs.c
+:
+
+ Shut the agent down cleanly before restarting.
+ This closes any SNMP/AgentX ports as well.
+
+2002-07-03 03:26 dts12
+
+ * agent/mibgroup/util_funcs.c:
+
+ OID sub-identifiers are unsigned, so treating them as signed can
+ give the wrong results with large values.
+
+2002-07-03 03:20 dts12
+
+ * snmplib/system.h (V4-2-patches.5),
+ include/net-snmp/library/system.h:
+
+ Ensure in_addr_t is defined.
+
+2002-07-03 02:34 dts12
+
+ * acconfig.h, configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in:
+
+ Testing for <sys/disklabel.h> requires <machine/types.h> on NetBSD 1.5.
+ Reported by Felicia Neff.
+ (Apparently from the NetBSD bug database - why they didn't tell us about
+ it is a mystery to me....)
+
+2002-07-03 02:19 dts12
+
+ * configure.in:
+
+ Fix the default value for sysObjectID as reported in the configure --help output.
+ (The actual value used is correct - it's just the help output that's wrong).
+ Spotted by Sandhya Satyanarayan.
+
+2002-07-02 23:15 hardaker
+
+ * local/mib2c.conf:
+
+ update text for various .conf files
+
+2002-07-02 13:46 rstory
+
+ * local/mib2c.scalar.conf:
+
+ fixes noted on the mailing list by Patrice Kadionik <kadionik@enseirb.fr>
+
+2002-07-02 02:39 dts12
+
+ * perl/SNMP/Makefile.PL:
+
+ Add the 'snmpd' and 'snmptrapd' binary names to the appropriate paths
+ when setting up the testing framework.
+
+2002-07-01 07:53 dts12
+
+ * snmplib/: asn1.c (V4-2-patches.8), asn1.c:
+
+ Encode/Decode OIDs of the form 2.X (X > 40) correctly.
+
+2002-07-01 02:40 jbpn
+
+ * configure, configure.in:
+
+ - fix horrible formatting in help for transports
+
+2002-07-01 02:23 dts12
+
+ * sedscript.in:
+
+ Pick up the changed definition for the root of the UCD extensible agent tables
+ (so that the EXAMPLE.conf file gets set up with the correct numeric OIDs)
+
+2002-06-28 06:46 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ - remove transport specifier and port number from strings returned
+ from snmp_tcp_fmtaddr() which break tcp_wrappers (and perhaps
+ other things).
+
+2002-06-28 04:41 dts12
+
+ * perl/agent/test.pl:
+
+ Update default store retrieval functions to use the correct name.
+
+ Note that this test script appears to include two infinite loops.
+ I'm not clear how this is expected to run successfully ?
+
+2002-06-28 04:39 dts12
+
+ * perl/agent/agent.xs:
+
+ Remove reference to non-existent degugging function.
+
+2002-06-28 04:37 dts12
+
+ * perl/manager/: Makefile.PL, displaytable.pm,
+ getValues.pm, manager.pm, snmptosql:
+
+ Bring perl 'manager' module under the NetSNMP banner
+ (both in terms of module group name, and references to 'ucd-snmp').
+ Remove some UCD-specific settings.
+
+ Note that snmptosql still refers explicitly to Wes' UCD email address,
+ and manager.pm to Wes' UCD filestore path. The relevant lines have
+ been highlighted, to encourage anyone wishing to use this to change them.
+
+2002-06-28 04:12 dts12
+
+ * perl/: AnyData_SNMP/Makefile.PL, OID/Makefile.PL,
+ SNMP/Makefile.PL, agent/Makefile.PL,
+ manager/Makefile.PL:
+
+ Remove checking for "internal" prerequisites, so that "perl Makefile.PL"
+ at the top level will work - even on a pristine system.
+
+ Qn:
+ Is it necessary/desirable to separate the NetSNMP modules to this extent?
+ Would it not be simpler to have all of the main .pm/.xs files in a single
+ NetSNMP directory, and compile/install them all from there?
+
+2002-06-28 01:45 dts12
+
+ * configure, configure.in:
+
+ Check for --with-enterprise (et al) being invoked without a value, and bomb out.
+
+2002-06-27 21:43 rstory
+
+ * README.solaris:
+
+ new README detainling the use of SFIO to circumvent the 255 fd limit on
+ solaris.
+
+2002-06-27 11:09 rstory
+
+ * agent/helpers/table_array.c,
+ include/net-snmp/agent/table_array.h:
+
+ remove changing array; add netsnmp_table_array_remove_row()
+
+2002-06-27 04:15 dts12
+
+ * Makefile.rules:
+
+ Some versions of 'makedepend' (e.g. RedHat 7.1), can't handle "-osuffix"
+ as a single option. All versions seem happy with "-o suffix" so use that.
+
+2002-06-27 03:31 dts12
+
+ * snmplib/mib.c:
+
+ Use ENV_SEPARATOR_CHAR rather than hardwiring ':' in netsnmp_set_mib_directory
+ (as suggested by Robert)
+
+2002-06-27 03:22 jbpn
+
+ * snmplib/snmpUDPDomain.c:
+
+ - remove transport specifier and port number from strings returned
+ from snmp_udp_fmtaddr() which break tcp_wrappers (and perhaps
+ other things).
+
+2002-06-27 03:09 dts12
+
+ * agent/mibgroup/mibII/: snmp_mib.c (V4-2-patches.2), snmp_mib.c
+:
+
+ Validate new snmpEnableAuthenTraps value before trying to use it.
+ Spotted & fixed by Shantha Kumara
+
+2002-06-25 14:09 rstory
+
+ * apps/snmpset.c:
+
+ add APPTOPS (-Cq) for suppressing output of set results on success
+
+2002-06-25 09:28 dts12
+
+ * agent/mibgroup/ucd-snmp/proc.c:
+
+ Apply patch #559848 to use the /proc pseudo-filesystem under Linux
+ (rather than parsing the output of ps)
+
+2002-06-25 08:59 dts12
+
+ * snmplib/snmp-tc.c:
+
+ Check for 'aix4' (which is the token defined in the system header file)
+ rather than 'aix'. See bug #565769
+
+2002-06-25 08:31 dts12
+
+ * agent/mibgroup/util_funcs.c:
+
+ Treat '0' as an invalid index for a "simple table".
+
+2002-06-25 07:36 hardaker
+
+ * local/snmpconf.dir/snmpd-data/system:
+
+ document read-only nature of sysContact.0 and sysLocation.0
+ configuration tokens.
+
+2002-06-25 06:40 jbpn
+
+ * man/: Makefile.in, default_store.3.bot,
+ default_store.3.top:
+
+ - add netsnmp_ prefix to default_store functions
+
+ - clean up manpage a bit
+
+ - fix breakage in generation of default_store.3.h due to auto-indentation
+ of default_store.h
+
+2002-06-25 02:55 jbpn
+
+ * EXAMPLE.conf.def (V4-2-patches.3), EXAMPLE.conf.def:
+
+ - mention that setting sysLocation et al. in snmpd.conf makes them
+ read-only
+
+ - also change syntax of all example command line tools to use newer
+ -c COMMUNITY syntax not positional parameter
+
+2002-06-24 08:03 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ make buffer size increase note a debug statement rather than a generic
+ log statement.
+
+2002-06-23 18:40 driehuis
+
+ * perl/SNMP/SNMP.xs:
+
+ Handle COUNTER64 in __translate_asn_type.
+
+2002-06-23 16:03 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ documentation for the script and the language it houses.
+ (man page auto-generated from the contained pod documentation)
+
+2002-06-23 15:03 hardaker
+
+ * perl/SNMP/README:
+
+ update to reference top level Makefile.PL
+
+2002-06-23 14:51 hardaker
+
+ * perl/SNMP/: SNMP.xs (V4-2-patches.1), SNMP.xs:
+
+ fix reported by Willem Dekker for Windows. Bug #543194 fixed.
+
+2002-06-22 08:37 hardaker
+
+ * README.snmpv3:
+
+ update for recent methodologies
+
+2002-06-21 16:07 rstory
+
+ * snmplib/mib.c:
+
+ final (hopefully!) fix for parsing ip addresses from
+ "Fco. Javier Ridruejo" <acbripef@si.ehu.es>
+
+2002-06-19 14:38 hardaker
+
+ * man/: netsnmp_agent.3, netsnmp_bulk_to_next.3,
+ netsnmp_debug.3, netsnmp_handler.3, netsnmp_instance.3
+, netsnmp_multiplexer.3, netsnmp_old_api.3,
+ netsnmp_read_only.3, netsnmp_serialize.3,
+ netsnmp_table.3, netsnmp_table_array.3,
+ netsnmp_table_data.3, netsnmp_table_dataset.3,
+ netsnmp_table_iterator.3, netsnmp_todo.3:
+
+ update from doxygen
+
+2002-06-19 11:50 hardaker
+
+ * local/: mib2c.int_watch.conf, mib2c.scalar.conf:
+
+ scalar mib2c configuration files for generating scalar code.
+
+2002-06-19 11:43 hardaker
+
+ * agent/mibgroup/examples/scalar_int.c:
+
+ clean up multi-line commend which was messed up by indent.
+
+2002-06-19 11:42 hardaker
+
+ * perl/AnyData_SNMP/netsh:
+
+ - add support for prompting of unknown parameters to aliases.
+ - misc other improvements (like "rehash")
+
+2002-06-19 11:38 hardaker
+
+ * net-snmp-config.in:
+
+ fix for new default store API
+
+2002-06-19 11:29 hardaker
+
+ * perl/: Makefile.PL, Makefile.makefiles,
+ Makefile.subs.pl, make-perl-makefiles, ASN/Makefile.PL
+, OID/Makefile.PL, SNMP/Makefile.PL,
+ agent/Makefile.PL, agent/default_store/Makefile.PL,
+ default_store/Makefile.PL:
+
+ ARGGGGGG
+ I love perl.
+ I hate perl's make system.
+ I hate the fact that perl segfaults if GetOptions() is called more
+ than once.
+ sigh.
+ This hopefully will fix the perl module build routines so it at least
+ works (but it's still ugly and could use more cleaning).
+
+2002-06-19 07:45 rstory
+
+ * agent/snmp_agent.c:
+
+ fix infinte loop and add debug in remove_delegated
+
+2002-06-18 07:37 hardaker
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ NULL the priv pointer on session duplication. thanks to rezitoz
+
+2002-06-17 06:23 hardaker
+
+ * README:
+
+ Changed Katsuhisa's email address, on request
+
+2002-06-14 07:44 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ Patch #569021: from Lauri Myllari
+ - fix memory leak in the table iterator support.
+
+2002-06-14 07:02 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Applied patch #569020 from rezitoz on IRC to fix non-initialized variable
+
+2002-06-14 03:57 dts12
+
+ * agent/mibgroup/Rmon/alarm.c:
+
+ Add (null) context, to bring into line with the v5 registry APIs.
+ Fixes bug 568580.
+
+2002-06-14 02:27 dts12
+
+ * aclocal.m4, configure:
+
+ Use matching ' and " quotes for AIX configure test.
+ Mentioned in passing in bug 565769.
+
+2002-06-13 14:32 hardaker
+
+ * perl/SNMP/t/conf.t:
+
+ fix default_store routines
+
+2002-06-12 06:43 dts12
+
+ * win32/net-snmp/net-snmp-config.h:
+
+ Bring Windows OID usage into line with the main config file settings.
+
+2002-06-12 06:37 dts12
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ Correct the default Enterprise OID used in traps, to avoid a repeated 0
+ subidentifier. (Fixes bug #566917)
+
+2002-06-12 05:14 dts12
+
+ * snmplib/snmp_api.c:
+
+ Define 'length' as a signed variable, so it can handle an error value of -1.
+ Reported by Joakim Althini.
+
+2002-06-12 03:11 dts12
+
+ * snmplib/read_config.c:
+
+ Make sure the address of the next link is properly saved, before freeing memory.
+ Problem discovered by Hugo Cacote.
+
+2002-06-12 02:15 dts12
+
+ * include/net-snmp/: agent/agent_index.h, agent/agent_trap.h
+, agent/all_helpers.h, agent/auto_nlist.h,
+ agent/bulk_to_next.h, agent/debug_handler.h,
+ agent/mib_modules.h, agent/multiplexer.h, agent/null.h
+, agent/old_api.h, agent/read_only.h,
+ agent/serialize.h, agent/set_helper.h,
+ library/cmu_compat.h, library/snmpAAL5PVCDomain.h,
+ library/snmpCallbackDomain.h, library/snmpIPXDomain.h,
+ library/snmpTCPDomain.h, library/snmpTCPIPv6Domain.h,
+ library/snmpUDPDomain.h, library/snmpUDPIPv6Domain.h,
+ library/snmpUnixDomain.h, library/snmp_parse_args.h,
+ library/snmp_secmod.h, library/transform_oids.h,
+ library/ucd_compat.h:
+
+ Supply missing #ifndef/#define/#endif and extern "C" {} wrappers
+
+2002-06-11 17:56 rstory
+
+ * snmplib/mib.c:
+
+ remove spurious printf to stderr
+
+2002-06-11 14:21 rstory
+
+ * include/net-snmp/types.h:
+
+ add extern "C"; add void_array struct
+
+2002-06-11 14:20 rstory
+
+ * agent/helpers/table_array.c:
+
+ remove tsearch; use new container instead
+
+2002-06-11 14:19 rstory
+
+ * include/net-snmp/agent/table_array.h:
+
+ use container for secondary index
+
+2002-06-11 14:17 rstory
+
+ * snmplib/Makefile.in:
+
+ add container to headers; add container.c
+
+2002-06-11 14:17 rstory
+
+ * snmplib/container.c:
+
+ init functions for basic/sorted container
+
+2002-06-11 14:15 rstory
+
+ * include/net-snmp/library/container.h:
+
+ more methods for basic container; add sorted (will probably rename) conatiner
+
+2002-06-11 12:22 rstory
+
+ * include/net-snmp/agent/instance.h:
+
+ protect against multiple includes; add extern "C" for __cplusplus
+
+2002-06-11 11:11 hardaker
+
+ * perl/AnyData_SNMP/: INSTALL, Makefile.PL, README
+, netsh, snmpsh:
+
+ renamed snmpsh to netsh, as I like the name better and it appeals to a
+ wider number of people.
+
+2002-06-10 09:53 rstory
+
+ * agent/snmp_agent.c:
+
+ when deleting an asp pointer, make sure it isn't in the delegated list
+
+2002-06-10 08:46 rstory
+
+ * snmplib/mib.c:
+
+ fix parse_one_oid_index to allow too short IP address when complete is
+ specified; add netsnmp_oid2chars & netsnmp_oid2str
+
+2002-06-10 07:42 hardaker
+
+ * perl/default_store/: default_store.pm, default_store.xs
+, test.pl:
+
+ update to latest default_store defines
+
+2002-06-10 07:39 hardaker
+
+ * Makefile.in, perl/.cvsignore, perl/Makefile.PL:
+
+ Top level perl Makefile.PL to install the whole bunch underneath.
+ This should now be used instead of the lower level makefiles for
+ simplicity.
+
+2002-06-10 07:27 dts12
+
+ * perl/SNMP/t/mib.t:
+
+ Acknowledge known failing tests.
+ This message can be removed once the problem has been isolated and fixed.
+
+2002-06-10 07:17 hardaker
+
+ * snmplib/mib.c:
+
+ support for ipaddress building/parsing of OID indexes.
+
+2002-06-10 02:07 dts12
+
+ * FAQ (V4-2-patches.8), FAQ:
+
+ Mention the other perl modules, introduced with v5 (particularly 'default_store')
+
+2002-06-10 01:28 dts12
+
+ * FAQ (V4-2-patches.7), FAQ:
+
+ New entry describing possible problems with trap handlers.
+
+2002-06-08 21:39 hardaker
+
+ * perl/agent/agent.pm:
+
+ default_store fixes
+
+2002-06-08 20:54 rstory
+
+ * Makefile.in:
+
+ break perl makefile creation into seperate step; only clean perl directory
+ if there is a makefile
+
+2002-06-08 20:15 rstory
+
+ * Makefile.in:
+
+ add perltest target to make test in all perl directories
+
+2002-06-08 09:47 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ fix to deal with updated SQL::Statement module.
+
+2002-06-08 07:08 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ update to SQL-Statement requirement of 1.004
+
+2002-06-08 06:45 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ remove mib init code from C snmp_translate_obj call
+
+2002-06-08 06:44 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ init_snmp inside translateObj
+
+2002-06-08 06:44 hardaker
+
+ * perl/OID/OID.pm:
+
+ change version to 0.1
+
+2002-06-08 06:43 hardaker
+
+ * perl/AnyData_SNMP/configs/unix:
+
+ A few cleanups to ifconfig and netstat commands
+
+2002-06-08 06:35 hardaker
+
+ * perl/AnyData_SNMP/snmpsh:
+
+ - beginning support for import/export of data (currently to/from CSV).
+ - support for "diff" which compares old (possibly imported data) to current.
+
+2002-06-08 06:34 hardaker
+
+ * perl/AnyData_SNMP/Makefile.PL:
+
+ change required SNMP module version from 4 to 5
+
+2002-06-08 06:34 hardaker
+
+ * mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ Add a tutorial place holder comment OID.
+
+2002-06-08 06:33 hardaker
+
+ * local/tkmib:
+
+ fix tkmib for newer perl modules.
+
+2002-06-08 06:33 hardaker
+
+ * local/snmpconf:
+
+ turn off extra bold/underline formatting by default.
+
+2002-06-07 15:04 rstory
+
+ * include/net-snmp/library/container.h:
+
+ generic container structure for storing data
+
+2002-06-07 13:01 rstory
+
+ * perl/ASN/ASN.xs:
+
+ include net-snmp-config.h
+
+2002-06-07 10:37 rstory
+
+ * configure:
+
+ update configure to keep in line with configure.in (why? shouldn't
+ configure not be in CVS and be autogenerated? One of these days I'm going
+ to have to learn autoconf....)
+
+2002-06-07 10:35 rstory
+
+ * Makefile.in, Makefile.rules:
+
+ always check return status of make when inside a loop, and exit on errors
+
+2002-06-07 08:17 dts12
+
+ * agent/mibgroup/mibII/: interfaces.c (V4-2-patches.3),
+ interfaces.c:
+
+ Only null-terminate the interface name while it's actually being copied.
+ Restore the data line afterwards, so the debugging output is meaningful.
+
+2002-06-07 01:16 dts12
+
+ * agent/snmp_agent.c:
+
+ Fix for indexing error, that causes a crash if more than 16 varbinds
+ are added to the cache in one go. Spotted by Shanth Kumara
+
+2002-06-06 01:12 dts12
+
+ * aclocal.m4, configure (V4-2-patches.[7,5]), aclocal.m4,
+ configure:
+
+ Don't differenciate between elf- and a.out-based NetBSD systems.
+ (Problem highlighted by Felicia Neff)
+
+2002-06-05 18:50 rstory
+
+ * acconfig.h, configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in,
+ include/net-snmp/types.h:
+
+ put defines for socklen_t and in_addr_t in net-snmp/types.h instead of having
+ configure generate them; configure instead generates HAVE_SOCKLEN_T and
+ HAVE_IN_ADDR_T for systems which don't need the defines; this is primarily
+ for the benefit of the Win32 platform, which doesn't have configure.
+
+2002-06-05 09:20 rstory
+
+ * local/mib2c.iterate.conf:
+
+ don't advance request pointer inside for loop, since for loop does it for
+ us; otherwise for loop may end up dereferencing NULL pointer.
+
+2002-06-05 06:41 hardaker
+
+ * perl/AnyData_SNMP/configs/unix:
+
+ example configuration file to duplicate various unix utilities:
+ - currently: netstat, ps, df, ifconfig
+
+2002-06-05 06:40 hardaker
+
+ * perl/AnyData_SNMP/configs/scli:
+
+ example configuration file to duplicate functionality in Juergen's
+ scli command.
+
+2002-06-05 06:39 hardaker
+
+ * perl/AnyData_SNMP/snmpsh:
+
+ new commands:
+ source file -- sources an rc file
+ watch expression -- repeatedly runs a command and colorizes
+ differences in data
+ eval expression -- evaluates an expression directly in perl
+ - beginnings of overloads in perl so that calling sysContact()
+ will return the sysContact value. tables not returned yet.
+ fixes:
+ turns of ornamental prompt support (ick) by default
+
+2002-06-05 04:43 dts12
+
+ * man/: snmpcmd.1 (V4-2-patches.8), snmpcmd.1.def:
+
+ Brief mention of the need to quote OIDs containing string indexes,
+ to protect the double quotes from the shell.
+
+2002-06-04 10:38 rstory
+
+ * agent/snmp_agent.c:
+
+ test for a null treecache before dereferencing it; noted on the coders
+ list by joakim.althini@reddo.net
+
+2002-06-04 10:33 rstory
+
+ * agent/snmp_agent.c:
+
+ test for asp->pdu == NULL before dereferencing it; noted on the coders
+ list by joakim.althini@reddo.net.
+
+2002-06-04 05:54 hardaker
+
+ * perl/AnyData_SNMP/snmpsh:
+
+ support for printf, single query/sets of scalars, multi-line aliases.
+
+2002-05-30 15:23 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ default_store fixes
+
+2002-05-30 15:23 hardaker
+
+ * perl/OID/OID.pm:
+
+ make new() operator a bit smarter
+
+2002-05-29 19:57 hardaker
+
+ * snmplib/: snmp_alarm.c (V4-2-patches.2), snmp_alarm.c:
+
+ set the storage pointer to NULL, as pointed out by Mark Hoy.
+
+2002-05-29 09:22 hardaker
+
+ * include/net-snmp/library/default_store.h,
+ include/net-snmp/library/mib.h, snmplib/mib.c,
+ snmplib/snmp_parse_args.c:
+
+ Patch from Harrie Hazewinkel to APIify MIBDIRS support
+
+2002-05-29 07:43 dts12
+
+ * FAQ (V4-2-patches.6), FAQ:
+
+ Expand on when OpenSSL is necessary, and how to compile using it.
+
+2002-05-29 06:52 dts12
+
+ * snmplib/snmpUDPDomain.c:
+
+ Set REUSEADDR so that specifying the same port twice doesn't kill the agent.
+ (Suggested by Robert Hastings)
+
+2002-05-29 02:41 dts12
+
+ * FAQ (V4-2-patches.5), FAQ:
+
+ Reference both versions of the tutorial (since this document is used
+ for building the on-line version of the FAQ)
+
+2002-05-29 02:16 dts12
+
+ * FAQ (V4-2-patches.4), FAQ:
+
+ Clarify that trap filtering is not yet operational.
+
+2002-05-28 14:53 rstory
+
+ * snmplib/oid_array.c:
+
+ remove ^M chars
+
+2002-05-28 14:52 rstory
+
+ * local/mib2c.array-user.conf:
+
+ fix logic in can_delete; consolidate use of netsnmp_set_mode_request by setting
+ rc for use at end of loop; don't use removed macros for rowstatus/storagetype,
+ using new netsnmp_check_vb* routines instead; add asserts for error cases that
+ should be caught by earlier routines
+
+2002-05-28 14:47 rstory
+
+ * include/net-snmp/agent/table_array.h:
+
+ add callbacks for row (de)activation
+
+2002-05-28 06:23 dts12
+
+ * agent/helpers/table_array.c:
+
+ Protect "#include <search.h>" with the HAVE_SEARCH_H token. (Suggested by Harrie)
+
+2002-05-28 06:20 dts12
+
+ * include/net-snmp/library/snmp_logging.h:
+
+ Fix the declaration of snmp_enable_syslog_ident. (Spotted by Harrie)
+
+2002-05-27 01:53 dts12
+
+ * apps/snmptrapd.c, include/net-snmp/library/snmp_logging.h
+, snmplib/snmp_logging.c:
+
+ Don't hardwire syslog facility to LOG_DAEMON.
+ Fix provided by Joakim Fallsjo.
+
+2002-05-27 01:32 dts12
+
+ * agent/mibgroup/snmpv3/usmUser.c, apps/snmptrapd.c
+ (V4-2-patches.[2,8]), agent/mibgroup/snmpv3/usmUser.c,
+ apps/snmptrapd.c:
+
+ Tweak 'usmUser' help string to accurately reflect which bits are optional.
+ Reported by Ali Chanaui.
+
+2002-05-27 01:22 dts12
+
+ * man/: snmpd.conf.5.def (V4-2-patches.4), snmpd.conf.5.def:
+
+ Document the limit on the number of "file" directives.
+
+2002-05-27 01:17 dts12
+
+ * local/Makefile.in:
+
+ Remove an extraneous trailing backslash, that confuses some 'make's
+
+2002-05-24 09:54 hardaker
+
+ * perl/agent/netsnmp_request_info.pm:
+
+ Proper creation of returned NetSNMP::OID object.
+
+2002-05-24 09:54 hardaker
+
+ * perl/agent/agent.xs:
+
+ increase reference counts on returned mib registration objects so
+ they're not auto-cleaned by perl (the agent now has a copy of the pointer)
+
+2002-05-24 09:53 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ new default_store netsnmp_ prefixes.
+
+2002-05-24 09:53 hardaker
+
+ * local/mib2c:
+
+ support for scalars (mib2c.scalar.conf file coming shortly)
+
+2002-05-24 09:52 hardaker
+
+ * Makefile.in:
+
+ A new rule called "commentcheck" to grep all sources for // comments.
+
+2002-05-24 08:09 dts12
+
+ * agent/agent_registry.c:
+
+ Declare 'register_mib_detach_node' before it's used for the first time.
+ (Spotted by Xiang Zhang)
+
+2002-05-24 07:44 dts12
+
+ * apps/Makefile.in:
+
+ Remove extraneous trailing backslash.
+ (That *might* be confusing Sun's make, but is wrong anyway)
+
+2002-05-23 01:39 dts12
+
+ * agent/mibgroup/ucd-snmp/: vmstat.c, vmstat_bsdi4.c,
+ vmstat_dynix.c, vmstat_freebsd2.c, vmstat_hpux.c,
+ vmstat_netbsd1.c, vmstat_solaris2.c:
+
+ Bring the various 'var_extensible_vmstat' definitions into line
+ with the declaration in the header file - i.e. non-static.
+
+2002-05-21 15:25 rstory
+
+ * Makefile.in:
+
+ add -I$(srcdir)/include to CPP path for people building outside of src tree
+
+2002-05-21 08:14 rstory
+
+ * agent/mibgroup/tunnel/tunnel.c:
+
+ apply patch [ 558129 ] Make the tunnel mib compile in 5.0.1, submitted
+ by Lorenzo Colitti (lcolitti), which adds missing net-snmp-config.h
+
+2002-05-21 05:32 jbpn
+
+ * agent/snmpd.c:
+
+ - fix core dump in -u option processing, noted by Andreas Maus
+
+2002-05-21 05:20 dts12
+
+ * agent/mibgroup/ucd-snmp/: memory.c (V4-2-patches.9), memory.c
+:
+
+ Latch memory reporting at 2^31-1, rather than 2^32-1 since these
+ objects are defined as (signed) Integer32.
+ Only latch if the value is *greater* than this threshold, not less!
+
+2002-05-21 01:20 jbpn
+
+ * include/ucd-snmp/default_store.h, snmplib/ucd_compat.c
+:
+
+ - add compatibility definitions and functions for newly-renamed
+ default store manipulation functions and constants (defined iff
+ --enable-ucd-compatibility is given to at configuration time)
+
+2002-05-21 00:51 jbpn
+
+ * include/net-snmp/library/default_store.h,
+ snmplib/default_store.c:
+
+ - move definition of netsnmp_ds_read_config type from default_store.h
+ into default_store.c (since it is not, and should not, be used
+ elsewhere).
+
+2002-05-20 03:42 rstory
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ registers tokens for ipv6 ro/rw community, and make sure to parse them
+ as ipv6, not v4.
+
+2002-05-19 11:38 driehuis
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ Bugfix for FreeBSD support of the diskIO mib. The original code neglected
+ the device number, which made distinguishing between, say, ad0 and ad1
+ impossible.
+
+2002-05-17 09:05 hardaker
+
+ * agent/mibgroup/mibII/at.c, agent/mibgroup/mibII/icmp.c
+, agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/ip.c, agent/mibgroup/mibII/ipv6.c,
+ agent/mibgroup/mibII/mta_sendmail.c,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c, agent/mibgroup/mibII/tcp.c
+, agent/mibgroup/mibII/udp.c,
+ agent/mibgroup/mibII/vacm_vars.c,
+ include/net-snmp/agent/var_struct.h:
+
+ Patch from Harrie Hazewinkel to slightly reduce memory costs of registartions
+
+2002-05-16 17:06 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ fix default store tag names.
+ fix init_snmp() definition to match normal perl non-ansi mode.
+
+2002-05-16 16:39 driehuis
+
+ * net-snmp-config.in:
+
+ Make sure --cflags spits out the required include path when installing
+ in a non-default location, as documented in the usage info in the script.
+
+2002-05-16 15:36 hardaker
+
+ * local/snmpconf.dir/snmpd-data/system:
+
+ add a line to the sysServices prompt saying if you don't know, say no.
+
+2002-05-16 12:55 hardaker
+
+ * perl/agent/default_store/: default_store.pm,
+ default_store.xs:
+
+ update to new define list
+
+2002-05-16 12:55 hardaker
+
+ * perl/agent/default_store/test.pl:
+
+ test script
+
+2002-05-16 12:49 hardaker
+
+ * perl/agent/default_store/gen:
+
+ autogeneration script
+
+2002-05-16 10:58 hardaker
+
+ * perl/default_store/: default_store.pm, default_store.xs
+, test.pl:
+
+ updates to new .h tokens
+
+2002-05-16 10:58 hardaker
+
+ * perl/default_store/gen:
+
+ .h -> perlmodule regeneration script
+
+2002-05-16 07:09 dts12
+
+ * include/net-snmp/library/default_store.h,
+ include/net-snmp/library/mib.h, snmplib/mib.c,
+ snmplib/snmp_api.c, snmplib/ucd_compat.c:
+
+ Consolidate the various OID output configuration mechanisms into one.
+ This does not affect the command-line options (yet!) - just the internals.
+
+2002-05-15 17:44 hardaker
+
+ * snmplib/default_store.c,
+ include/net-snmp/library/default_store.h,
+ include/net-snmp/agent/ds_agent.h:
+
+ fix default_store
+
+2002-05-15 17:20 hardaker
+
+ * configure:
+
+ run autoconf
+
+2002-05-15 17:20 hardaker
+
+ * acconfig.h, include/net-snmp/net-snmp-config.h.in:
+
+ create a define location for HAVE_GETDEVS
+
+2002-05-15 17:16 hardaker
+
+ * agent/Makefile.depend, agent/helpers/Makefile.depend,
+ agent/mibgroup/Makefile.depend, apps/Makefile.depend,
+ apps/snmpnetstat/Makefile.depend, snmplib/Makefile.depend
+:
+
+ depend update, which I meant to check in before the 5.0.1 release
+
+2002-05-15 05:53 jbpn
+
+ * agent/: agent_index.c, agent_read_config.c,
+ agent_registry.c, auto_nlist.c, kernel.c,
+ snmp_agent.c, snmp_perl.c, snmp_vars.c, snmpd.c
+:
+
+ - use new netsnmp_ds_blah functions and constants
+
+2002-05-15 05:39 jbpn
+
+ * apps/notification_log.c, apps/notification_log.h,
+ apps/snmpbulkwalk.c, apps/snmpdelta.c, apps/snmpget.c
+, apps/snmpgetnext.c, apps/snmpstatus.c,
+ apps/snmptable.c, apps/snmptranslate.c, apps/snmptrap.c
+, apps/snmptrapd.c, apps/snmpusm.c,
+ apps/snmpwalk.c, apps/snmpnetstat/main.c,
+ agent/mibgroup/agentx/agentx_config.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/disman/mteTriggerTable.c,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c, agent/mibgroup/smux/smux.c
+, agent/mibgroup/tunnel/tunnel.c:
+
+ - use new netsnmp_ds_blah functions and constants
+
+2002-05-15 05:37 jbpn
+
+ * snmplib/: default_store.c, mib.c, parse.c,
+ read_config.c, snmpUDPDomain.c, snmpUDPIPv6Domain.c
+, snmp_alarm.c, snmp_api.c, snmp_logging.c,
+ snmp_parse_args.c, snmp_secmod.c, snmpusm.c,
+ snmpv3.c, ucd_compat.c, vacm.c:
+
+ - rename functions and constants from default_store from ds_blah
+ to netsnmp_ds_blah
+
+2002-05-15 02:02 jbpn
+
+ * agent/mibgroup/smux/: smux.c (V4-2-patches.0), smux.c:
+
+ - initialise smux_listen_sd to avoid problems noted in bug #545448
+ (a bit unreasonable in my view but it can't do any harm).
+
+2002-05-14 12:40 rstory
+
+ * agent/helpers/table_array.c:
+
+ precision extraction of tumor instead of amputation, or, ifdef search.h
+ functions that aren't essential to table_array operation and will probably
+ vanish in the near future anyway.
+
+2002-05-13 20:16 rstory
+
+ * agent/object_monitor.c:
+
+ fix type in sizeof
+
+2002-05-13 13:04 hardaker
+
+ * configure, configure.in, agent/helpers/table_array.c
+, include/net-snmp/net-snmp-config.h.in:
+
+ Check for search.h before compiling the table_array helper
+
+2002-05-13 08:00 hardaker
+
+ * agent/helpers/old_api.c:
+
+ remove C++ comments
+
+2002-05-13 00:39 driehuis
+
+ * ChangeLog:
+
+ Note changes to configure.in.
+
+2002-05-12 10:30 driehuis
+
+ * configure.in:
+
+ Make sure the checks for kvm related stuff happens when -lkvm is in scope.
+ Add detection of the -ldevstat requirement when building with ucd-snmp/diskio.
+
+
+
+-------------------------------------------------------------------------------
+
+Changes: V5.0 -> V5.0.1
+
+20020-05-12 17:30 driehuis
+
+ * configure.in:
+
+ detect -ldevstat when needed; fix -lkvm detection
+
+2002-05-10 17:09 hardaker
+
+ * FAQ, NEWS, README, README.agentx:
+
+ mention tutorial-5 instead of tutorial
+
+2002-05-10 17:04 hardaker
+
+ * perl/agent/: Makefile.PL, agent.pm,
+ netsnmp_request_info.pm:
+
+ request info perl code moved to separate file.
+
+2002-05-10 17:01 hardaker
+
+ * perl/OID/OID.pm:
+
+ documentation for the OID building overloads.
+
+2002-05-10 16:55 hardaker
+
+ * apps/snmpvacm.c:
+
+ Add proper length segment to the build view OID.
+
+2002-05-10 14:41 hardaker
+
+ * snmplib/mib.c:
+
+ new doc patch from Axel Kittenberg
+
+2002-05-10 14:04 hardaker
+
+ * agent/mibgroup/mibII/: vacm_vars.c (V4-2-patches.0), vacm_vars.c
+:
+
+ fix vacm problem on sets with OIDs containing large numbers as noted
+ by Vinay Gaonkar on the -coders mailing list.
+
+2002-05-10 13:46 hardaker
+
+ * local/mib2c:
+
+ fix calling on multiple tables
+
+2002-05-10 03:23 dts12
+
+ * snmplib/mib.c:
+
+ Merge "STRING: Hex:" type tokens into a single token "Hex-STRING:"
+
+2002-05-10 03:12 dts12
+
+ * agent/helpers/instance.c:
+
+ Report non-exitent subinstances as 'noSuchInstance' rather than 'noSuchObject'.
+ "snmpget .... .1.3.6.1.6.3.12.1.5.0.99" now responds correctly.
+ (though "snmpget .... .1.3.6.1.6.3.12.1.5.1" still returns 'noSuchObject')
+
+ Also guess that failed SET requests are 'noCreation' errors (which is
+ probably the most likely option).
+
+2002-05-09 15:54 hardaker
+
+ * Makefile.rules:
+
+ exit properly when a subdir fails to make properly
+
+2002-05-09 15:30 hardaker
+
+ * snmplib/mib.c:
+
+ create a token for the -Ov equivelant
+
+2002-05-09 09:12 hardaker
+
+ * agent/mibgroup/ucd-snmp/: memory_solaris2.c (V4-2-patches.5),
+ memory_solaris2.c:
+
+ patch from Takumi Kadode to fix memory usage on solaris
+
+2002-05-09 08:54 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ updates from malloced vmstat fixes from patches branch
+
+2002-05-08 16:34 hardaker
+
+ * net-snmp-config.in:
+
+ new --compile-subagent features:
+ --cflags
+ --norm
+ --ldflags
+ includes header files
+ misc other bug fixes.
+
+2002-05-08 13:13 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ make the subagent properly call the reserve2 state again.
+
+2002-05-08 10:02 hardaker
+
+ * agent/mibgroup/examples/notification.c:
+
+ run indent
+
+2002-05-08 09:01 hardaker
+
+ * agent/mibgroup/examples/notification.c:
+
+ um, use 30 seconds like advertised.
+
+2002-05-08 08:59 hardaker
+
+ * agent/mibgroup/examples/notification.c,
+ agent/mibgroup/examples/notification.h,
+ mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ define a better notification example (no requests. just alarm -> send)
+
+2002-05-07 22:45 hardaker
+
+ * local/mib2c:
+
+ update to current indent command
+
+2002-05-07 22:44 hardaker
+
+ * local/mib2c.create-dataset.conf:
+
+ move text in comment left slight (was too long).
+
+2002-05-07 22:43 hardaker
+
+ * local/mib2c:
+
+ enum fixes.
+
+2002-05-07 22:42 hardaker
+
+ * local/: Makefile.in, mib2c.column_defines.conf,
+ mib2c.column_enums.conf, mib2c.conf:
+
+ New mib2c files for generating headers full of column number defines
+ and enum defines.
+
+2002-05-07 22:40 hardaker
+
+ * net-snmp-config.in:
+
+ - --compile-subagent agent library reordering so it actually works.
+ - --compile-subagent now supports .o files (precompiled code).
+
+2002-05-07 22:31 hardaker
+
+ * acconfig.h, configure:
+
+ hmm. missed some checkin files.
+
+2002-05-07 11:15 hardaker
+
+ * perl/SNMP/t/: conftest.conf, startagent.pl, conf.t
+:
+
+ test for configuration file/default_store support
+
+2002-05-07 11:14 hardaker
+
+ * perl/SNMP/: SNMP.pm, SNMP.xs:
+
+ make init_snmp() take a char * argument like the real API
+
+2002-05-07 11:00 hardaker
+
+ * agent/helpers/instance.c:
+
+ typos.
+
+2002-05-07 09:41 hardaker
+
+ * local/snmpconf:
+
+ fix the -g flag.
+
+2002-05-07 09:16 hardaker
+
+ * agent/helpers/instance.c:
+
+ call netsnmp_set_request_error like a good boy.
+
+2002-05-06 20:43 rstory
+
+ * mibs/Makefile.mib:
+
+ fix missing $ noted by John Mills on the coders list
+
+2002-05-06 16:12 hardaker
+
+ * configure, config.h.in, configure.in, snmplib/snmp_api.c
+ (V4-2-patches.[4,2,3,3]), configure, configure.in,
+ include/net-snmp/net-snmp-config.h.in,
+ snmplib/snmpTCPDomain.c, snmplib/snmpTCPIPv6Domain.c,
+ snmplib/snmpUDPDomain.c, snmplib/snmpUDPIPv6Domain.c,
+ snmplib/snmpUnixDomain.c:
+
+ use size_t when socklen_t is not available (correctly done this time)
+
+2002-05-06 15:59 hardaker
+
+ * snmplib/: snmpTCPDomain.c, snmpTCPIPv6Domain.c,
+ snmpUDPDomain.c, snmpUDPIPv6Domain.c, snmpUnixDomain.c
+:
+
+ use size_t when socklen_t is not available
+
+2002-05-06 15:49 hardaker
+
+ * configure, acconfig.h, config.h.in, configure.in
+ (V4-2-patches.[3,7,1,2]), acconfig.h, configure,
+ configure.in, include/net-snmp/net-snmp-config.h.in:
+
+ use size_t when socklen_t is not available
+
+2002-05-06 15:11 hardaker
+
+ * agent/mibgroup/ucd-snmp/: memory_hpux.c, memory_hpux.h
+, vmstat_hpux.c, vmstat_hpux.h:
+
+ run indent
+
+2002-05-06 15:10 hardaker
+
+ * agent/mibgroup/ucd-snmp/: memory_hpux.c, memory_hpux.h
+, vmstat_hpux.c, vmstat_hpux.h:
+
+ Patches #551914+ from Gary Edwards to support hpux11 for memory and vmstat modules
+
+2002-05-06 15:07 hardaker
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ add new hpux modules
+
+2002-05-06 14:34 hardaker
+
+ * README:
+
+ new contributors.
+
+2002-05-06 14:32 hardaker
+
+ * include/net-snmp/library/default_store.h, man/snmpcmd.1.def
+, snmplib/mib.c:
+
+ Patch #551489: From Jeffrey Watson to add a -Q option for quick but w/ an '='
+
+2002-05-06 14:28 hardaker
+
+ * man/snmpd.1.def:
+
+ change -D documentation to reflect current code.
+
+2002-05-06 14:27 hardaker
+
+ * agent/agent_handler.c:
+
+ misc small bugs and error message wording fixes.
+
+2002-05-06 09:37 hardaker
+
+ * agent/mibgroup/smux/: smux.c (V4-2-patches.9), smux.c:
+
+ bug #547010: fix smux auth bug as reported and fixed by Stefan Radman
+
+2002-05-01 23:01 rstory
+
+ * local/mib2c.array-user.conf:
+
+ tweaks for update to table_array
+
+2002-05-01 23:00 rstory
+
+ * agent/Makefile.in:
+
+ add object_monitor stuff
+
+2002-05-01 22:46 rstory
+
+ * snmplib/Makefile.in:
+
+ add check_varbind stuff
+
+2002-05-01 22:45 rstory
+
+ * include/net-snmp/library/check_varbind.h,
+ snmplib/check_varbind.c:
+
+ convenience functions for validation vabrind info
+
+2002-05-01 22:43 rstory
+
+ * agent/helpers/table_array.c,
+ include/net-snmp/agent/table_array.h:
+
+ do I really have to do this? sigh. Ok, rename debug token; revamp logic to
+ modify rows in place, keeping undo info (vs always changing a copy of a row
+ and swapping rows when set completed successfully) to allow external code
+ to keep pointers that don't disappear on them; add a few callbacks, including
+ row_compare, so table_array can maintain the secondary index tree; don't call
+ can_activate/can_delete unless we are actually trying to activate/delete row;
+ add skeleton (ifdef'd out) code for cooperative notifications of row events;
+ update changing array in commit & undo cases, not just commit; change typdefs
+ for a few callback pointers; ummmm... I *think* that's it....:-)
+
+2002-05-01 17:30 hardaker
+
+ * perl/OID/: OID.pm, OID.xs, test.pl:
+
+ Add index building to the + operator.
+
+2002-05-01 09:52 hardaker
+
+ * perl/: OID/OID.pm, OID/OID.xs, agent/Makefile.PL
+, agent/agent.pm, agent/agent.xs, agent/test.pl
+, agent/typemap:
+
+ Make getOID for requests returned a NetSNMP::OID blessed reference.
+ I'm not happy about how this is done, but all attempts to do it
+ correctly only left me in confusion.
+
+2002-05-01 09:31 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c,
+ include/net-snmp/library/snmpAAL5PVCDomain.h,
+ include/net-snmp/library/snmpTCPIPv6Domain.h,
+ include/net-snmp/library/snmpUDPIPv6Domain.h,
+ include/net-snmp/library/snmpUnixDomain.h,
+ snmplib/snmpAAL5PVCDomain.c, snmplib/snmpTCPIPv6Domain.c
+, snmplib/snmpUDPIPv6Domain.c, snmplib/snmpUnixDomain.c
+:
+
+ Change the domain OIDs to point to the net-snmp domains created by Dave.
+ This fixes bug #544245 as well.
+
+2002-05-01 09:30 hardaker
+
+ * Makefile.in:
+
+ Add the OID perl module to the list of modules.
+
+2002-05-01 07:45 hardaker
+
+ * mibs/: UCD-SNMP-MIB.txt (V4-2-patches.0), UCD-SNMP-MIB.txt:
+
+ remove old (and conflicting with traps) transport domain OIDs
+
+2002-05-01 06:19 dts12
+
+ * man/: snmpbulkget.1.def, snmpbulkwalk.1.def,
+ snmpcmd.1.def, snmpdelta.1, snmpget.1.def,
+ snmpset.1.def, snmpstatus.1.def, snmptest.1.def,
+ snmpwalk.1.def:
+
+ Add type tags "STRING: " and "INTEGER: " to example output.
+ Add explicit setting of protocol version to example commands.
+
+2002-05-01 03:34 jbpn
+
+ * agent/mibgroup/Rmon/: agutil.c, agutil.h,
+ agutil_api.h, alarm.c, alarm.h, event.c,
+ event.h, history.c, history.h, row_api.h,
+ rows.c, rows.h, statistics.c, statistics.h:
+
+ - remove CVS Log: entries which are causing problems since they are
+ embedded in a comment, but some of the log entries contain comment
+ delimiters.
+
+2002-04-30 22:15 rstory
+
+ * agent/snmpd.c:
+
+ remove netsnmp_processing_set, it lives in snmp_agent.c
+
+2002-04-30 22:13 rstory
+
+ * include/net-snmp/library/snmp-tc.h, snmplib/snmp-tc.c
+:
+
+ remove unused parameter; allow NONE as old value for storage type transtions
+
+2002-04-30 22:12 rstory
+
+ * include/net-snmp/agent/table.h:
+
+ remove overly complex macro stuff for rowstatus/storagetype
+
+2002-04-30 09:28 hardaker
+
+ * perl/OID/: Makefile.PL, OID.pm, OID.xs, README
+, test.pl:
+
+ - allow conversions to an array (needs to be tied still).
+ - documentation.
+
+2002-04-30 08:15 jbpn
+
+ * agent/: snmpd.c (V4-2-patches.3), snmpd.c:
+
+ - fix bug #545775, reported by Dave Denson, whereby the PID of an
+ already-running snmpd would be overwritten by starting a new snmpd
+ (which would then exit, leaving the original snmpd running and the
+ wrong PID in the file). Solution is not to write the PID until we
+ have successfully opened all our sockets.
+
+2002-04-30 07:23 hardaker
+
+ * perl/OID/: .cvsignore, Changes, MANIFEST,
+ Makefile.PL, OID.pm, OID.xs, README,
+ test.pl, typemap:
+
+ OID perl module so you can do simple OID manipulations within perl easily:
+ - Example: new NetSNMP::OID('interfaces') > new NetSNMP::OID('system')
+
+2002-04-29 16:52 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ regexp fix for white space checks in indent formatted code
+
+2002-04-29 16:47 hardaker
+
+ * Makefile.in:
+
+ reorder perl module names to reflect (new) dependencies.
+
+2002-04-29 09:42 hardaker
+
+ * perl/SNMP/t/mib.t:
+
+ fix a few warnings on failed tests (just screen cleanups)
+
+2002-04-29 09:41 hardaker
+
+ * perl/SNMP/: Makefile.PL, SNMP.pm:
+
+ Make the perl module respect snmp.conf settings (finally).
+ - Now requires a dependency on the NetSNMP::default_store module though.
+
+2002-04-27 08:19 rstory
+
+ * agent/snmp_agent.c:
+
+ don't process set request till delegated requests are complete, and queue
+ any other received packets until a set has completed processing.
+
+2002-04-27 08:10 rstory
+
+ * snmplib/snmp_api.c:
+
+ clean up comments munged by indent
+
+2002-04-27 08:08 rstory
+
+ * agent/mibgroup/agentx/subagent.h:
+
+ add missing prototype to fix compiler warning
+
+2002-04-27 08:07 rstory
+
+ * agent/: object_monitor.c, helpers/table.c,
+ helpers/table_array.c:
+
+ ifdef gymnastics to make sure asserts are only compiled in only if explicity
+ requested
+
+2002-04-26 21:26 rstory
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ fix unbalanced endif on linux. hope I didn't break anything else.
+
+2002-04-26 19:14 rstory
+
+ * agent/snmpd.c:
+
+ fix unused var warning for !windows
+
+2002-04-26 14:33 hardaker
+
+ * agent/mibgroup/Rmon/event.c,
+ include/net-snmp/library/asn1.h:
+
+ fix OID_LENGTH definitions
+
+2002-04-26 10:53 hardaker
+
+ * Makefile.in, perl/ASN/Makefile.PL,
+ perl/agent/Makefile.PL, perl/agent/default_store/Makefile.PL:
+
+ fix --with-perl-modules in makefiles. Make everything use
+ net-snmp-config, ...
+
+2002-04-26 10:27 hardaker
+
+ * perl/SNMP/: Makefile.PL, README, SNMP.pm:
+
+ - Cleanup.
+ - Make buildable from within the source.
+ - Change documentation references for ucd-snmp
+ - Change contact location to net-snmp-users (per Joe's agreement)
+
+2002-04-26 10:19 hardaker
+
+ * perl/default_store/: MANIFEST, Makefile.PL, README,
+ default_store.pm, test.pl:
+
+ - cleanup.
+ - Use net-snmp-config to find library, etc.
+ - Make buildable from within the source.
+ - a few more tests added
+ - use correct libraries
+ - add documentation
+
+2002-04-26 04:22 dts12
+
+ * configure, configure.in:
+
+ Extracting the version from 'snmplib/snmp_version.c' needs to take account
+ of blank space. Reported by Stefan Radman (Bug #547379)
+
+2002-04-26 04:11 dts12
+
+ * agent/mibgroup/ucd-snmp/: memory.c (V4-2-patches.8), memory.c
+:
+
+ Handle memory values > 32bit (latching at 2^32-1)
+ Patch #548663 from Rob Myers
+
+2002-04-26 03:55 dts12
+
+ * agent/snmpd.c:
+
+ Remove redundant 'Invalid option' message, since this is typically
+ reported by getopt(). (Suggested by Andrew Rucker Jones - patch #548748 )
+
+2002-04-26 03:51 dts12
+
+ * agent/snmpd.c:
+
+ Add 'v' to the list of valid options (patch #548748)
+ Thanks to Andrew Rucker Jones.
+
+2002-04-26 03:36 dts12
+
+ * README.hpux11, agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_system.c,
+ agent/mibgroup/mibII/var_route.c,
+ include/net-snmp/system/hpux.h,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/memory.c,
+ agent/mibgroup/ucd-snmp/memory.h:
+
+ Apply Johannes Schmidt-Fischer's improved HP-UX 11 patch
+ (#530724) to the main v5 line, as well as the v4-2 branch.
+ The code now compiles cleanly under HP-UX 11 using gcc.
+
+2002-04-25 07:19 hardaker
+
+ * README, include/net-snmp/library/vacm.h,
+ snmplib/vacm.c:
+
+ Patch from Axel Kittenberg to fix possible variable name clash
+
+2002-04-24 22:39 rstory
+
+ * agent/object_monitor.c:
+
+ handle callbacks sending new notifications (while processing notifications)
+
+2002-04-24 21:35 rstory
+
+ * include/net-snmp/agent/object_monitor.h:
+
+ header for new fucntions for monitoring objects
+
+2002-04-24 21:34 rstory
+
+ * agent/object_monitor.c:
+
+ new functions for monitoring object values
+
+2002-04-24 15:02 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ /proc/stat can be larger than 1024
+
+2002-04-24 06:19 dts12
+
+ * snmplib/Makefile.in:
+
+ Install the missing 'md5.h' header file.
+
+2002-04-23 09:43 rstory
+
+ * agent/helpers/: table.c, table_array.c:
+
+ remove last of the #warnings, add xxx-rks if necessary
+
+2002-04-23 07:53 hardaker
+
+ * agent/helpers/table_array.c:
+
+ remove warnings
+
+2002-04-22 19:11 rstory
+
+ * agent/mibgroup/ipfwchains/README:
+
+ update URL to use freenmp.com mirror (unless someone knows a better place?)
+
+2002-04-22 14:10 rstory
+
+ * snmplib/mib.c:
+
+ apply documentatin patch from Axel Kittenberger <Axel.Kittenberger@maxxio.com>
+
+2002-04-22 13:50 rstory
+
+ * local/mib2c.array-user.conf:
+
+ remove extra @end@ (sure would be nice if mib2c would check for unbalanced
+ @end@s)
+
+2002-04-22 09:48 rstory
+
+ * snmplib/oid_array.c:
+
+ update function names to match header (no mixed case)
+
+2002-04-22 08:11 hardaker
+
+ * include/net-snmp/library/snmp_debug.h:
+
+ fix bug #547110: properly spell define
+
+2002-04-21 16:44 hardaker
+
+ * agent/mibgroup/mibII/sysORTable.c:
+
+ add static to a returned variable
+
+2002-04-21 16:42 hardaker
+
+ * configure, configure.in:
+
+ fix --with-perl-modules
+
+2002-04-21 11:37 rstory
+
+ * snmplib/snmp_version.c:
+
+ 5.0.pre3 -> 5.0; (I'm sure there are other places this needs to change,
+ but I wanted to get the first post 5.0 checkin...:-)
+
+2002-04-20 00:37 hardaker
+
+ * FAQ, sedscript.in, perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0 )
+
+-------------------------------------------------------------------------------
+
+Changes: V4.2 -> V5.0
+
+2002-04-20 00:27 hardaker
+
+ * everything:
+
+ set all CVS/RCS revision control numbers to 5.0
+
+2002-04-20 00:07 hardaker
+
+ * everything:
+
+ White space, oh glorious white space.
+ How great our though?
+ The code is fine.
+ We agree on functionality easily.
+ What really troubles us?
+ Something we can't see.
+ Something between the code.
+ We bow down to your magnificence,
+ For you are everywhere,
+ Between everything.
+ Pretty nothingness you are.
+
+2002-04-20 00:01 hardaker
+
+ * configure , configure.in:
+
+ turn on ucd compat by default.
+
+2002-04-20 00:00 hardaker
+
+ * NEWS:
+
+ last updates
+
+2002-04-19 23:33 hardaker
+
+ * agent/mibgroup/testdelayed.h:
+
+ remove testdelayed
+
+2002-04-19 23:18 hardaker
+
+ * agent/mibgroup/utilities/: .cvsignore , .cvsignore:
+
+ cvs ignore file
+
+2002-04-19 23:17 hardaker
+
+ * agent/snmp_perl.c:
+
+ don't die if perl doesn't init.
+
+2002-04-19 23:03 hardaker
+
+ * perl/SNMP/: README , README , SNMP.pm:
+
+ change warning.
+
+2002-04-19 22:29 hardaker
+
+ * agent/snmp_agent.c:
+
+ double check that multiple inserts into the delegated chain don't
+ happen (read: they shouldn't anyway, but.....).
+
+2002-04-19 22:29 hardaker
+
+ * CodingStyle:
+
+ typedef update
+
+2002-04-19 22:16 hardaker
+
+ * snmplib/snmpCallbackDomain.c:
+
+ Fix the callback build hook to turn off the expect response flag when
+ not appropriate.
+
+2002-04-19 19:09 rstory
+
+ * include/net-snmp/library/oid_array.h:
+
+ spelling misteak; remove capital letters in function names
+
+2002-04-19 19:08 rstory
+
+ * agent/helpers/table_array.c:
+
+ update for function name changed in oid_array.h
+
+2002-04-19 18:20 hardaker
+
+ * agent/snmp_perl.c:
+
+ make the perlInitFile and disablePerl tokens register as premib such
+ that when passed as a --FLAG it'll actually do the right thing and
+ disable the later "perl" token handlers.
+
+2002-04-19 17:29 hardaker
+
+ * Makefile.in , man/Makefile.in , man/netsnmp_agent.3
+ , man/netsnmp_bulk_to_next.3 , man/netsnmp_debug.3 ,
+ man/netsnmp_example_scalar_int.3 , man/netsnmp_handler.3
+ , man/netsnmp_instance.3 ,
+ man/netsnmp_mib_handler_methods.3 , man/netsnmp_multiplexer.3
+ , man/netsnmp_old_api.3 , man/netsnmp_read_only.3 ,
+ man/netsnmp_serialize.3 , man/netsnmp_table.3 ,
+ man/netsnmp_table_array.3 , man/netsnmp_table_data.3 ,
+ man/netsnmp_table_dataset.3 , man/netsnmp_table_iterator.3
+ , man/netsnmp_todo.3:
+
+ documentation. Can't get enough.
+ - make docs now installs man pages into the man dir, which are then installed.
+
+2002-04-19 17:14 hardaker
+
+ * testing/tests/: T111agentxset , T121proxyset:
+
+ Correct for new STRING prefix.
+
+2002-04-19 17:03 hardaker
+
+ * README:
+
+ Add Katsuhisa ABE
+
+2002-04-19 17:03 hardaker
+
+ * perl/: ASN/ASN.xs , default_store/default_store.xs:
+
+ fix header files for new paths.
+
+2002-04-19 17:00 hardaker
+
+ * agent/snmp_vars.c , agent/mibgroup/mibII/vacm_vars.c
+ , include/net-snmp/library/snmpUDPIPv6Domain.h ,
+ man/snmpd.conf.5.def , snmplib/snmpUDPIPv6Domain.c:
+
+ Apply patch #532555: ipv6 com2sec support, thanks to Katsuhisa ABE.
+
+2002-04-19 16:19 hardaker
+
+ * agent/agent_trap.c , agent/snmp_agent.c ,
+ agent/mibgroup/mibII/sysORTable.c ,
+ agent/mibgroup/mibII/system_mib.c ,
+ include/net-snmp/agent/snmp_agent.h ,
+ include/net-snmp/library/tools.h , snmplib/tools.c:
+
+ fix sysUpTime (and related functions) to handle much larger upTime
+ values (ie, fix signed integer wrapping).
+
+2002-04-19 11:37 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ document embedded perl support.
+
+2002-04-19 11:34 hardaker
+
+ * configure , configure.in , agent/Makefile.in
+ , agent/snmp_perl.c , agent/snmp_perl.pl ,
+ include/net-snmp/agent/ds_agent.h , perl/agent/Makefile.PL:
+
+ Add some new snmpd.conf tokens for controlling perl better.
+ Fix embedded perl support so it actually works.
+
+2002-04-19 11:32 hardaker
+
+ * perl/agent/default_store/: .cvsignore , Makefile.PL ,
+ default_store.pm , default_store.xs:
+
+ Added missing agent default_store stuff. (they existed on my machine,
+ I don't know why everyone else was having problems)
+
+2002-04-19 10:30 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ Protect against things that should never ever happen
+
+2002-04-19 03:10 dts12
+
+ * Makefile.in:
+
+ <Sigh> A little learning is a dangerous thing.
+ Apply the rest of the patch from Axel - sorry.
+
+2002-04-19 01:49 dts12
+
+ * Makefile.in , doxygen.conf:
+
+ Handle generating documenation when srcdir != configdir
+ (Patch supplied by Axel Kittenberger)
+
+2002-04-18 17:38 hardaker
+
+ * snmplib/snmpIPXDomain.c:
+
+ fix snmpIPXDomain (again)
+
+2002-04-18 17:31 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ Patch from Vishal Verma: only open subagent connections once at startup
+
+2002-04-18 17:28 hardaker
+
+ * agent/agent_registry.c:
+
+ Patch from Vishal Verma: for down subagent cases, mark registrations as detached
+
+2002-04-18 17:17 hardaker
+
+ * snmplib/snmp_api.c:
+
+ define a maximum packet size we can accept to protect certain error
+ conditions (-1 after conversion is now too large).
+
+2002-04-18 16:28 hardaker
+
+ * acconfig.h:
+
+ change the enterprise OIDs in the proper place (net-snmp-config.h.in
+ is generated from this file).
+
+2002-04-18 13:51 hardaker
+
+ * configure , configure.in , net-snmp-config.in:
+
+ - Add two new options to net-snmp-config as requested on the IRC channel.
+ --configure-options
+ --snmpd-module-list
+
+2002-04-18 11:43 rstory
+
+ * mibs/NET-SNMP-AGENT-MIB.txt:
+
+ add missing comma
+
+2002-04-18 07:39 dts12
+
+ * configure , configure.in:
+
+ Calculate the length of supplied enterprise OIDs correctly
+ (and use a more meaningful output message)
+
+ Shame these settings aren't cached for later re-use....
+
+2002-04-18 07:18 dts12
+
+ * agent/snmpd.c:
+
+ Notify on agent reconfiguration.
+
+2002-04-18 07:16 dts12
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ Use the Net-SNMP notifications by default, rather than the ucdavis ones.
+
+2002-04-18 07:08 dts12
+
+ * mibs/NET-SNMP-AGENT-MIB.txt:
+
+ Fix the table-of-contents sequence for the nsModuleTable, add notification
+ definitions for the agent, and define groups for everything.
+
+2002-04-18 02:52 dts12
+
+ * snmplib/mib.c:
+
+ Bring integer and string output formats into line with the other types
+ by printing a type token before the value (unless supressed by 'quick print')
+ Thanks to Erik for the patch
+
+2002-04-18 01:46 dts12
+
+ * FAQ:
+
+ Replace the dlmod 'WHERE' with something more meaningful....
+
+2002-04-17 12:12 hardaker
+
+ * snmplib/snmpIPXDomain.c:
+
+ define the ipxDomain variables
+
+2002-04-17 12:12 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ Error condition tests
+
+2002-04-17 10:10 hardaker
+
+ * agent/agent_registry.c , agent/snmp_agent.c ,
+ agent/mibgroup/agentx/master_admin.c ,
+ include/net-snmp/agent/agent_handler.h ,
+ include/net-snmp/agent/snmp_agent.h ,
+ include/net-snmp/agent/var_struct.h:
+
+ Oh, just a small patch to make it possible to make modules request
+ that all queries to a set of registrations get passed all at once
+ (which apparently is important for, oh, agentx)
+
+2002-04-17 10:09 hardaker
+
+ * agent/mibgroup/agentx/master.c:
+
+ misc non-change clean ups
+
+2002-04-17 10:03 hardaker
+
+ * include/net-snmp/agent/table.h:
+
+ rename structures beginning with _ to ending with _s
+
+2002-04-17 10:02 hardaker
+
+ * include/net-snmp/library/snmp_api.h:
+
+ add a void * pointer for the session creator to use at will (different
+ from the callback magic).
+
+2002-04-17 09:00 dts12
+
+ * configure , configure.in ,
+ include/net-snmp/net-snmp-config.h.in:
+
+ Use the Net-SNMP sysOIDs by default, rather than the ucdavis ones.
+
+2002-04-17 08:26 dts12
+
+ * apps/snmpnetstat/Makefile.in:
+
+ Blank continuation lines confuse HP's version of make.
+
+2002-04-17 08:16 dts12
+
+ * agent/Makefile.in:
+
+ Blank continuation lines confuse HP's version of make
+
+2002-04-17 06:56 hardaker
+
+ * agent/mibgroup/agent/nsModuleTable.c ,
+ mibs/NET-SNMP-AGENT-MIB.txt:
+
+ move nsModuleTable into Dave's structure.
+
+2002-04-17 06:54 hardaker
+
+ * include/net-snmp/library/: snmpAAL5PVCDomain.h ,
+ snmpTCPIPv6Domain.h , snmpUDPIPv6Domain.h:
+
+ fix declarations of Domain objects (const -> extern)
+
+2002-04-17 06:31 hardaker
+
+ * local/snmpconf.dir/: snmp-data/snmpconf-config ,
+ snmpd-data/snmpconf-config , snmptrapd-data/snmpconf-config:
+
+ snmpconf configuration data
+
+2002-04-17 03:01 dts12
+
+ * configure , configure.in:
+
+ Bring the reported default settings for sysoid & notification OIDs
+ back into line with what we actually use (i.e. the ucdavis OIDs).
+
+ Qn: Do we want to switch to using the net-snmp equivalent sysOIDs?
+ Qn: What about defining net-snmp notifications?
+
+2002-04-17 02:55 dts12
+
+ * configure , configure.in:
+
+ Fix --with-enterprise-sysoid and --with-enterprise-notification-oid,
+ and try to clarify that these are OIDs, while --with-enterprise-oid
+ is actually just the enterprise *number*
+
+ Qn: should we change the name of the configure option to reflect this?
+
+2002-04-16 10:04 hardaker
+
+ * sedscript.in , snmplib/snmp_version.c , FAQ ,
+ perl/SNMP/SNMP.pm:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.pre3 )
+
+2002-04-16 10:02 hardaker
+
+ * README:
+
+ delete top disclaimers
+
+2002-04-16 10:02 hardaker
+
+ * NEWS:
+
+ misc updates
+
+2002-04-16 10:01 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ misc bug fixes
+
+2002-04-16 08:19 dts12
+
+ * FAQ:
+
+ Add an entry concerning the 'libcrypto' RPM dependency.
+
+2002-04-16 08:00 hardaker
+
+ * agent/mibgroup/agent/nsModuleTable.c:
+
+ fix memory leak
+
+2002-04-16 07:13 hardaker
+
+ * agent/snmp_agent.c:
+
+ remove a no longer appropriate todo comment
+
+2002-04-16 07:12 hardaker
+
+ * configure:
+
+ I guess I forgot to run autoconf
+
+2002-04-15 08:58 hardaker
+
+ * local/: snmpconf , Makefile.in:
+
+ move snmpconf data directories to different names to avoid confusion
+
+2002-04-15 08:36 hardaker
+
+ * local/snmpconf.dir/: snmp-data/authopts ,
+ snmp-data/debugging , snmp-data/mibs , snmp-data/output
+ , snmpd-data/acl , snmpd-data/basic_setup ,
+ snmpd-data/extending , snmpd-data/monitor ,
+ snmpd-data/operation , snmpd-data/system ,
+ snmpd-data/trapsinks , snmptrapd-data/formatting ,
+ snmptrapd-data/traphandle:
+
+ data file moving
+
+2002-04-12 14:38 hardaker
+
+ * local/snmpconf:
+
+ Massive cleanup effort. It should now respect ordering in the
+ snmpconf configuration files as well.
+
+2002-04-12 13:00 rstory
+
+ * include/net-snmp/agent/agent_registry.h:
+
+ fix for overzealous perl script
+
+2002-04-12 09:47 hardaker
+
+ * Makefile.in , configure , configure.in:
+
+ copy ucd persisent directory to net-snmp (prompts, flags and other fun)
+
+2002-04-12 07:57 hardaker
+
+ * local/Makefile.in:
+
+ install traptoemail
+
+2002-04-12 07:55 hardaker
+
+ * local/trapnotif:
+
+ remove trapnotif
+
+2002-04-12 07:51 hardaker
+
+ * local/: Makefile.in , rsnmp:
+
+ remove rsnmp, which is very very old and out of date
+
+2002-04-12 07:47 hardaker
+
+ * man/: .cvsignore , Makefile.in , mib2c.1.def:
+
+ A manual page for mib2c (help, I'm turning into Dave)
+
+2002-04-12 07:28 hardaker
+
+ * dotgdbinit:
+
+ a gdb initialization file with helpful functions
+
+2002-04-12 02:42 dts12
+
+ * local/Makefile.in:
+
+ Add 'snmpconf' and 'mib2c' to the list of scripts to install.
+
+ I've left 'traptoemail' off this list, since it says it's not intended
+ as a directly user-invoked command, so probably ought not to be installed
+ into a binary directory.
+
+2002-04-12 02:41 dts12
+
+ * local/rsnmp:
+
+ Fix the path of snmpwalk to be something more plausible.
+ (I'm not convinced about the validity of that initial 'rtopmib' OID mind!)
+
+2002-04-12 02:36 dts12
+
+ * local/mib2c.conf:
+
+ Fix typo in reference to 'mib2c.iterate.conf'
+
+2002-04-12 02:33 dts12
+
+ * Makefile.rules , snmplib/Makefile.in:
+
+ Install the main library as 'libsnmp' if configured using UCD compatibility.
+ This should handle the requirements of application compatibility.
+ Agent library compatibility is likely to prove a harder problem
+ (since there are now three libraries, not just two...)
+
+2002-04-11 22:29 hardaker
+
+ * perl/SNMP/t/startagent.pl:
+
+ set SNMPCONFPATH iff [sic] not set
+
+2002-04-11 22:27 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ return from initMib before doing anything.
+
+2002-04-11 22:26 hardaker
+
+ * perl/SNMP/Makefile.PL:
+
+ turn off complier warnings
+
+2002-04-11 22:26 hardaker
+
+ * perl/AnyData_SNMP/snmpsh:
+
+ support "show columns from TABLE"
+
+2002-04-11 22:25 hardaker
+
+ * mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ Add a new demo scalar: the sleeper. (dah dah dah dummmmm)
+
+2002-04-11 22:25 hardaker
+
+ * agent/mibgroup/examples/scalar_int.c:
+
+ indent.
+
+2002-04-11 22:25 hardaker
+
+ * agent/mibgroup/: examples.h , examples/delayed_instance.c
+ , examples/delayed_instance.h:
+
+ Add a delayed instance example, showing how to return mib request
+ results later rather than immediately.
+
+2002-04-11 22:24 hardaker
+
+ * agent/mibgroup/testdelayed.c:
+
+ remove legacy example.
+
+2002-04-11 22:23 hardaker
+
+ * agent/snmp_agent.c:
+
+ add comment about possibly fixing inclusive requests in the future.
+
+2002-04-11 17:08 hardaker
+
+ * README.win32:
+
+ change modukes-> modules
+
+2002-04-11 07:23 hardaker
+
+ * snmplib/snmp_logging.c:
+
+ turn off debugging when calling logging callbacks
+
+2002-04-10 12:51 hardaker
+
+ * perl/SNMP/: SNMP.pm , SNMP.xs:
+
+ fix perl module in many many places. most tests now pass.
+
+2002-04-10 12:50 hardaker
+
+ * perl/SNMP/t/startagent.pl:
+
+ force setting to a "bogus" SNMPCONFPATH.
+
+2002-04-10 12:48 hardaker
+
+ * include/net-snmp/library/mib.h , snmplib/mib.c:
+
+ Exporting functions good. Internalizing bad.
+
+2002-04-10 09:28 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ opps. sigh.
+
+2002-04-10 09:27 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ opps. remove debugging statements.
+
+2002-04-10 09:23 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ - Make the perl module call init_snmp()
+ - this is a fairly major change, is it now will read .conf files.
+ - many people have asked for this.
+ - misc clean ups.
+
+2002-04-10 09:18 dts12
+
+ * Makefile.rules:
+
+ Don't recurse into subdirectories for the consituent subtargets of "make install"
+
+2002-04-10 09:09 hardaker
+
+ * NEWS:
+
+ added a few things, separated perl stuff into it's own section.
+
+2002-04-10 08:46 dts12
+
+ * configure , configure.in:
+
+ Bring the help message for the UCD compatability option into line with
+ what's actually recognised.
+
+2002-04-10 07:52 hardaker
+
+ * Makefile.top:
+
+ change libtool versioning to their recommended method of doing things
+ (which I hate, but is still better than what we were doing, I guess)
+
+2002-04-10 07:10 dts12
+
+ * Makefile.rules:
+
+ Bring use of BUILTSUBDIR within 'installlocalheaders' into line
+ with the preceding comment, and actual usage.
+ (i.e. INSTALLBUILTSUBDIR rather than INCLUDEBUILTSUBDIR)
+
+2002-04-10 05:58 dts12
+
+ * snmplib/Makefile.in:
+
+ Typo in security-include header destination directory variable
+
+2002-04-10 05:55 dts12
+
+ * local/Makefile.in:
+
+ Ensure the destination directory exists before installing mib2c conf files.
+
+2002-04-10 01:55 dts12
+
+ * testing/tests/: T004snmpv1nosuch , T019snmpv2cnosuch:
+
+ Two new tests to check handling of GETing non-existant instances
+
+2002-04-10 01:54 dts12
+
+ * agent/snmp_agent.c:
+
+ A fix for SNMPv1 errors that doesn't end up breaking AgentX error handling.
+
+2002-04-09 10:38 hardaker
+
+ * agent/snmp_agent.c:
+
+ Patch from Dave to fix v1 error results.
+
+2002-04-08 21:08 rstory
+
+ * snmplib/oid_array.c:
+
+ fix incorrect length return value
+
+2002-04-08 18:00 hardaker
+
+ * agent/mibgroup/mibII/: vacm_vars.c , vacm_vars.h:
+
+ don't allow no-configuration access anymore.
+
+2002-04-08 17:59 hardaker
+
+ * include/net-snmp/library/transform_oids.h ,
+ snmplib/snmpAAL5PVCDomain.c , snmplib/snmpTCPIPv6Domain.c
+ , snmplib/snmpUDPIPv6Domain.c , snmplib/snmpusm.c:
+
+ more unconst correctness
+
+2002-04-08 17:31 hardaker
+
+ * include/net-snmp/library/snmp_transport.h:
+
+ size_t externs for exported oids
+
+2002-04-08 17:30 hardaker
+
+ * snmplib/snmp_api.c:
+
+ remove temporary debugging statements that accidentally became permanent.
+
+2002-04-08 17:26 hardaker
+
+ * snmplib/: snmpUDPDomain.c , snmp_transport.c:
+
+ define length size_t's for oid variables.
+
+2002-04-08 16:53 hardaker
+
+ * agent/mibgroup/utilities/override.c:
+
+ support "null" types.
+
+2002-04-08 16:52 hardaker
+
+ * apps/snmptrapd.c:
+
+ initialize notification log mib support before -H usage.
+
+2002-04-08 16:49 hardaker
+
+ * agent/helpers/serialize.c:
+
+ fix a few things and make subhandlers not able to tell there were more requests.
+
+2002-04-08 16:43 hardaker
+
+ * INSTALL:
+
+ A co-worker pointed out that the INSTALL script still said to edit config.h
+
+2002-04-08 15:13 hardaker
+
+ * include/net-snmp/library/snmpTCPDomain.h ,
+ include/net-snmp/library/snmpUnixDomain.h ,
+ include/net-snmp/library/snmp_transport.h ,
+ snmplib/snmpTCPDomain.c , snmplib/snmpUnixDomain.c ,
+ snmplib/snmp_transport.c:
+
+ unstatic-ize a few oids that should have been external
+
+2002-04-08 14:23 hardaker
+
+ * snmplib/: snmpAAL5PVCDomain.c , snmpTCPDomain.c ,
+ snmpTCPIPv6Domain.c , snmpUDPIPv6Domain.c ,
+ snmpUnixDomain.c , snmp_api.c , snmp_transport.c
+ , snmpusm.c:
+
+ Change const oid declarations into static ones since shared libraries
+ have a problem with initializing them on linux systems at least.
+
+2002-04-08 11:45 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ minimal documentation for debugging and the injectHandler token
+
+2002-04-05 14:32 hardaker
+
+ * man/: snmptrapd.8.def , snmptrapd.conf.5.def:
+
+ documentation for the NOTIFICATION-LOG-MIB support.
+
+2002-04-05 14:09 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ document context name support in proxy code.
+
+2002-04-05 13:51 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ document the disman event mib support for sending traps via monitored OIDs.
+
+2002-04-05 10:12 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ put trap config into its own section.
+ document the "override" token.
+
+2002-04-05 06:39 hardaker
+
+ * README.snmpv3:
+
+ change default context to an empty string
+
+2002-04-04 15:14 hardaker
+
+ * agent/: agent_registry.c (V4-2-patches.5), agent_registry.c:
+
+ deal with fd unregistrations properly.
+
+2002-04-03 09:12 hardaker
+
+ * agent/helpers/table_dataset.c , agent/mibgroup/examples.h
+ , agent/mibgroup/testhandler.c ,
+ agent/mibgroup/examples/data_set.c ,
+ agent/mibgroup/examples/data_set.h ,
+ agent/mibgroup/examples/scalar_int.c ,
+ include/net-snmp/agent/table_dataset.h ,
+ mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ Make an example dataset table to hold and store data in (admittedly
+ useless data from a network management point of view, but it's an example).
+
+2002-04-02 22:12 hardaker
+
+ * man/Makefile.in:
+
+ fix installation from subdir build case.
+
+2002-04-02 21:45 hardaker
+
+ * snmplib/Makefile.in:
+
+ install snmpv3-security-includes from from build dir.
+
+2002-04-02 21:45 hardaker
+
+ * agent/Makefile.in:
+
+ install mib_module_config.h and mib_module_includes.h from build dir.
+
+2002-04-02 21:43 hardaker
+
+ * Makefile.in:
+
+ install net-snmp-config.h from the build dir.
+
+2002-04-02 21:43 hardaker
+
+ * Makefile.rules:
+
+ create some install from built header rules.
+
+2002-04-02 17:27 hardaker
+
+ * local/: Makefile.in , mib2c.conf:
+
+ remove deleted array-auto from .conf install/reference lists
+
+2002-04-02 15:03 hardaker
+
+ * agent/mibgroup/: ucd_snmp.h , ucd-snmp/registry.c ,
+ ucd-snmp/registry.h:
+
+ remove the registry module, as it's obsolete due to contexts. Use the nsModuleTable instead
+
+2002-04-02 14:57 hardaker
+
+ * agent/mibgroup/ucd-snmp/disk.c (V4-2-patches.7),
+ agent/mibgroup/ucd-snmp/disk.c ,
+ include/net-snmp/system/darwin.h:
+
+ Apply patch #524424 for darwin fixes for ucd-snmp/disk.c
+
+2002-04-02 14:47 hardaker
+
+ * agent/mibgroup/: kernel_sunos5.c (V4-2-patches.8),
+ kernel_sunos5.c:
+
+ apply patch 527573 to fix 64 bit types on solaris
+
+2002-04-02 07:04 hardaker
+
+ * snmplib/snmp_transport.c:
+
+ check char for NULL before setting to:
+
+2002-04-01 22:28 hardaker
+
+ * snmplib/: snmp_api.c (V4-2-patches.9), cmu_compat.c ,
+ snmp_api.c:
+
+ Let init_snmp protect itself.
+
+2002-03-29 15:04 rstory
+
+ * local/mib2c.array-user.conf:
+
+ tweaks & updates
+
+2002-03-29 10:40 rstory
+
+ * snmplib/mib.c:
+
+ add comment
+
+2002-03-29 08:36 hardaker
+
+ * local/mib2c.create-dataset.conf:
+
+ add a allow_creation definition.
+
+2002-03-29 08:22 hardaker
+
+ * Makefile.in:
+
+ make net-snmp-config executable after it's built
+
+2002-03-29 08:13 hardaker
+
+ * agent/mibgroup/mibII/: setSerialNo.c , setSerialNo.h:
+
+ opps. forgot to check the setSerial code in
+
+2002-03-28 23:48 hardaker
+
+ * agent/mibgroup/ucd-snmp/: pass.c (V4-2-patches.4), pass.c:
+
+ enable row creation for pass modules. Patch #482005
+
+2002-03-28 23:44 hardaker
+
+ * agent/mibgroup/mibII/: interfaces.c (V4-2-patches.2),
+ interfaces.c:
+
+ patch #517340: freebsd5 support
+
+2002-03-28 23:38 hardaker
+
+ * agent/mibgroup/host/: hr_filesys.c (V4-2-patches.4), hr_filesys.c:
+
+ apply freebsd5 patch #517333
+
+2002-03-28 23:32 hardaker
+
+ * agent/mibgroup/: host/hr_system.c , mibII/interfaces.c
+ , mibII/ipAddr.c:
+
+ Apply netbsd fix patch #529733
+
+2002-03-28 23:01 hardaker
+
+ * snmplib/: snmp_api.c (V4-2-patches.8), snmp_api.c ,
+ snmp_api.c:
+
+ use a static variable for init checking. Bug #536386.
+
+2002-03-28 15:25 dts12
+
+ * man/: default_store.3.top , read_config.3.def ,
+ snmp_api.3.def:
+
+ Tweak to use the new include structure.
+
+2002-03-28 15:23 dts12
+
+ * FAQ (V4-2-patches.8), FAQ:
+
+ Add a few new entries (mostly relating to traps)
+
+2002-03-28 14:56 rstory
+
+ * agent/helpers/table_array.c:
+
+ rename/prefix functions; add doxygen documentation
+
+2002-03-28 13:00 rstory
+
+ * doxygen.conf:
+
+ add define for excluding stuff (DOXYGEN_SHOULD_SKIP_THIS)
+
+2002-03-28 12:50 hardaker
+
+ * agent/mibgroup/mibII.h:
+
+ add setSerialNo
+
+2002-03-28 12:47 hardaker
+
+ * snmplib/ucd_compat.c:
+
+ fix a never-seen-but-very-old-bug using the wrong default_store token.
+
+2002-03-28 12:46 hardaker
+
+ * snmplib/snmp_api.c:
+
+ only set the default output style if it's not already set to something.
+
+2002-03-28 12:45 hardaker
+
+ * agent/agent_read_config.c:
+
+ wrapping.
+
+2002-03-28 12:17 hardaker
+
+ * doxygen.conf:
+
+ change version number
+
+2002-03-28 12:08 rstory
+
+ * apps/snmptranslate.c:
+
+ back out change from version 1.65 until better solution can be found;
+ bug #535029
+
+2002-03-28 12:03 rstory
+
+ * agent/agent_registry.c:
+
+ return specific result code for registration failure if available.
+
+2002-03-28 11:57 hardaker
+
+ * agent/: agent_registry.c , mibgroup/agentx/master_admin.c:
+
+ perl typo
+
+2002-03-27 15:48 rstory
+
+ * local/mib2c.array-auto.conf:
+
+ delete old, unused conf file
+
+2002-03-27 08:27 hardaker
+
+ * apps/: notification_log.c , notification_log.h ,
+ snmptrapd.c:
+
+ add "dontRetainLogs" token to snmptrapd.conf to not enable the
+ notification log mib.
+
+2002-03-27 01:54 dts12
+
+ * configure.in, configure (V4-2-patches.[1,1]), configure ,
+ configure.in:
+
+ Use the correct name of the Windows IP Helper API library.
+ (Computers can be soooo picky!)
+
+2002-03-26 23:23 hardaker
+
+ * agent/snmp_agent.c , agent/snmpd.c ,
+ agent/helpers/all_helpers.c , agent/helpers/bulk_to_next.c
+ , agent/helpers/debug_handler.c ,
+ agent/helpers/read_only.c , agent/mibgroup/agentx/master.c
+ , include/net-snmp/agent/bulk_to_next.h ,
+ include/net-snmp/agent/debug_handler.h ,
+ include/net-snmp/agent/read_only.h ,
+ include/net-snmp/agent/snmp_agent.h ,
+ include/net-snmp/agent/var_struct.h:
+
+ - Really fix the "undo failed" problem. IE, not just any old error
+ will cause an undo failed message to get sent back. Only varbinds
+ with an undo failed error code will cause an undo failed result.
+ undo failed results do still supersede all other error codes,
+ however, which is what the original problem was all about. We still
+ have to depend on the modules returning the right error code (but
+ that's their fault if they don't).
+ - misc cleanups and renames
+
+2002-03-26 23:20 hardaker
+
+ * README:
+
+ add Craig Setera
+
+2002-03-26 14:07 rstory
+
+ * TODO:
+
+ add creating src rpm spec file
+
+2002-03-26 08:29 hardaker
+
+ * agent/mibgroup/ucd-snmp/: diskio.c (V4-2-patches.2), diskio.c:
+
+ enable diskio on freebsd5. Implements patch 517328 in a different way.
+
+2002-03-26 07:58 hardaker
+
+ * mibs/Makefile.in:
+
+ fix for other-dir builds
+
+2002-03-26 07:57 hardaker
+
+ * agent/agent_registry.c:
+
+ duplicate registration info in split_subtree
+
+2002-03-26 07:43 dts12
+
+ * configure, configure.in (V4-2-patches.[0,0]), configure ,
+ configure.in:
+
+ Add /etc/filesystems to list of mount table files (for AIX)
+ Should fix bugs 232588 and (?)517113
+
+2002-03-26 07:39 dts12
+
+ * configure, configure.in (V4-2-patches.[9,9]), configure ,
+ configure.in:
+
+ Remove trailing ':' from list of MIB module names in configure output,
+ to avoid confusion (see Bug #491129)
+
+2002-03-26 06:41 dts12
+
+ * configure , configure.in:
+
+ Add '-lhlpapi' to the list of agent libraries, when running on Windows
+ (using Cygwin). Should fix Bug #534409.
+
+2002-03-25 22:33 rstory
+
+ * snmplib/: parse.c (V4-2-patches.3), parse.c:
+
+ fix bug#520478 showMibErrors token is inverted
+
+2002-03-25 15:18 rstory
+
+ * include/net-snmp/version.h:
+
+ remove ^M characters
+
+2002-03-25 14:53 hardaker
+
+ * agent/snmp_agent.c , include/net-snmp/agent/snmp_agent.h:
+
+ use emacs to fix perl search and replace errors, of course
+
+2002-03-25 14:47 hardaker
+
+ * agent/agent_registry.c , agent/snmp_agent.c ,
+ agent/helpers/old_api.c , agent/helpers/table.c ,
+ agent/helpers/table_data.c , agent/helpers/table_dataset.c
+ , agent/mibgroup/testhandler.c ,
+ agent/mibgroup/agentx/master_admin.c ,
+ apps/notification_log.c ,
+ include/net-snmp/agent/agent_registry.h ,
+ include/net-snmp/agent/snmp_agent.h ,
+ include/net-snmp/agent/table.h ,
+ include/net-snmp/agent/table_data.h ,
+ include/net-snmp/agent/table_dataset.h ,
+ include/net-snmp/library/mib.h ,
+ local/mib2c.create-dataset.conf , snmplib/mib.c ,
+ snmplib/snmp_api.c:
+
+ use perl to search and replace perl search and replace errors, of course
+
+2002-03-25 14:23 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ api changes
+
+2002-03-25 08:43 dts12
+
+ * win32/: win32.opt , libsnmp_dll/libsnmp.def ,
+ snmpbulkget/snmpbulkget.dsp , snmpbulkwalk/snmpbulkwalk.dsp
+ , snmpd/snmpd.dsp , snmpdelta/snmpdelta.dsp ,
+ snmpdf/snmpdf.dsp , snmpget/snmpget.dsp ,
+ snmpgetnext/snmpgetnext.dsp , snmpnetstat/snmpnetstat.dsp
+ , snmpset/snmpset.dsp , snmpstatus/snmpstatus.dsp
+ , snmptable/snmptable.dsp , snmptest/snmptest.dsp
+ , snmptranslate/snmptranslate.dsp ,
+ snmptrap/snmptrap.dsp , snmptrapd/snmptrapd.dsp ,
+ snmpusm/snmpusm.dsp , snmpvacm/snmpvacm.dsp ,
+ snmpwalk/snmpwalk.dsp:
+
+ Remove redundant declarations of 'getopt.c' and 'snmp_parse_args.c' in
+ each individual application project. These routines are included within
+ the libraries, so we might as well use those.
+
+2002-03-25 05:53 dts12
+
+ * win32/: mib_module_inits.h , win32.opt ,
+ libsnmp_dll/libsnmp.def , libsnmp_dll/libsnmp_dll.dsp ,
+ snmpd/snmpd.dsp:
+
+ Gotcha! Everything now builds (more-or-less) cleanly under Visual C++.
+ You still have to use the "Batch Build" mechanism (or else be careful which
+ of libsnmp/libsnmp_dll you build in each of the Debug & Release modes),
+ and you need to build twice in order to get encode_keychange linking.
+ But things *do* finally build.
+
+2002-03-24 05:21 nba
+
+ * snmplib/mib.c:
+
+ Oops - snprint_* cannot realloc
+
+2002-03-23 09:40 hardaker
+
+ * apps/Makefile.in:
+
+ really fix snmpinform installs this time.
+
+2002-03-22 22:32 hardaker
+
+ * apps/notification_log.c:
+
+ final cleanups of notification log support
+
+2002-03-22 22:32 hardaker
+
+ * apps/Makefile.in:
+
+ fix installation of snmpinform
+
+2002-03-22 22:32 hardaker
+
+ * agent/helpers/table_data.c , agent/mibgroup/testhandler.c
+ , include/net-snmp/agent/agent_registry.h ,
+ include/net-snmp/agent/table_data.h ,
+ include/net-snmp/agent/table_dataset.h:
+
+ Rename stuff. Fix stuff. You know, normal routine.
+
+2002-03-22 22:31 hardaker
+
+ * configure , configure.in:
+
+ fix version file location for non-sourcedir builds
+
+2002-03-22 14:13 hardaker
+
+ * include/net-snmp/library/snmp_api.h:
+
+ forgot to commit a prototype.
+
+2002-03-22 14:12 hardaker
+
+ * agent/agent_handler.c , agent/agent_registry.c ,
+ agent/mibgroup/agentx/master_admin.c ,
+ include/net-snmp/agent/agent_registry.h:
+
+ register_mib_context2 -> netsnmp_register_mib (and marked as internal)
+
+2002-03-22 14:01 hardaker
+
+ * agent/mibgroup/agentx/: master.c , subagent.c:
+
+ use new error logging api when !root
+
+2002-03-22 14:00 hardaker
+
+ * snmplib/snmp_api.c:
+
+ enable logging session errors to some log level other than ERR.
+
+2002-03-22 13:55 hardaker
+
+ * agent/mibgroup/agentx/: master.c , subagent.c:
+
+ better agentx connection related error messages.
+
+2002-03-22 09:35 dts12
+
+ * win32/: win32.dsw , win32.opt ,
+ libhelpers/libhelpers.dsp , libsnmp_dll/libsnmp.def ,
+ netsnmpmibs/netsnmpmibs.dsp , snmpd/snmpd.dsp:
+
+ Slowly making progress on 5.0 Windows build.
+ Everything now compiles, though the Release version doesn't link.
+ (complains about assorted unknown routines that are there,
+ staring it in the face. Grrr!!!!)
+
+2002-03-22 08:24 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - do not "tweak" range_subid when dealing with compressed OIDs.
+ Thanks to Craig Setera for pointing out this deviation from RFC
+ 2741.
+
+2002-03-22 07:50 dts12
+
+ * include/net-snmp/library/snmpUDPDomain.h ,
+ include/net-snmp/library/snmp_client.h , snmplib/oid_array.c
+ , snmplib/snmpTCPDomain.c , snmplib/snmpUDPDomain.c
+ , snmplib/snmp_api.c , snmplib/snmp_client.c:
+
+ Various minor inconsistencies (mostly to do with subtle variations in types)
+
+2002-03-22 07:31 rstory
+
+ * snmplib/snmp_parse_args.c:
+
+ fix typo
+
+2002-03-22 07:29 dts12
+
+ * win32/: mib_module_includes.h , mib_module_inits.h ,
+ net-snmp/net-snmp-config.h ,
+ net-snmp/library/snmpv3-security-includes.h:
+
+ Bring Windows versions of "automatically-generated" header files up to date.
+
+2002-03-22 02:23 jbpn
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - don't use "reg" as a parameter name in kernel_sunos5_cache_age()
+ as /usr/include/inet/common.h says:
+ #define reg register
+ (!) which the compiler then barfs on. Reported as bug #533336 by
+ Anonymous.
+
+2002-03-21 09:24 hardaker
+
+ * include/net-snmp/library/read_config.h ,
+ include/net-snmp/library/snmp_api.h , snmplib/read_config.c
+ , snmplib/snmp_api.c , snmplib/snmp_parse_args.c:
+
+ - snmp_config* -> netsnmp_config (for new functions only)
+ - fix bug where snmp_config() strings were getting parsed twice.
+
+2002-03-21 09:23 hardaker
+
+ * apps/snmptrapd.c:
+
+ wrap agentx stuff in a still unused variable (at this point).
+
+2002-03-21 09:23 hardaker
+
+ * apps/snmptranslate.c:
+
+ remove unused variable.
+
+2002-03-21 09:23 hardaker
+
+ * agent/mibgroup/utilities/override.c:
+
+ fix oid parsing.
+
+2002-03-21 09:22 hardaker
+
+ * agent/mibgroup/: Rmon/alarm.c , Rmon/statistics.c ,
+ mibII/at.c:
+
+ change // coments to /* */ comments (bad bad bad)
+
+2002-03-21 06:40 hardaker
+
+ * snmplib/snmp-tc.c:
+
+ change // coments to /* */ comments (bad bad bad)
+
+2002-03-20 20:12 hardaker
+
+ * snmplib/snmp_api.c:
+
+ add a list of registered text enums to ASN_* values.
+ (In probably the wrong place.)
+
+2002-03-20 20:11 hardaker
+
+ * configure , configure.in ,
+ agent/mibgroup/utilities.h ,
+ agent/mibgroup/utilities/override.c ,
+ agent/mibgroup/utilities/override.h:
+
+ create a new "override" directive to force an OID to a particular value
+ - not finished. It's designed to do read-write as well, but doesn't.
+
+2002-03-20 20:08 hardaker
+
+ * agent/helpers/instance.c:
+
+ check for inclusive
+
+2002-03-20 11:37 hardaker
+
+ * include/net-snmp/agent/table_dataset.h:
+
+ include new delete/remove breakdown APIs
+
+2002-03-20 11:36 hardaker
+
+ * apps/notification_log.c:
+
+ API change.
+
+2002-03-20 11:36 hardaker
+
+ * agent/helpers/table_dataset.c:
+
+ some "this will change" early row status implementation.
+ - (this will move to a separate handler)
+
+2002-03-20 11:35 hardaker
+
+ * agent/helpers/table_data.c:
+
+ pointer checking against illegal adds (ie, shouldn't happen but check anyway)
+
+2002-03-20 08:42 hardaker
+
+ * local/mib2c.create-dataset.conf:
+
+ Ok, I make mistakes. I admit it. It really should have been a NULL.
+
+2002-03-20 08:37 hardaker
+
+ * local/mib2c.create-dataset.conf:
+
+ add missing comma
+
+2002-03-20 08:36 hardaker
+
+ * agent/helpers/table_data.c ,
+ include/net-snmp/agent/table_data.h:
+
+ separate out delete/remove row functionality
+
+2002-03-20 07:47 hardaker
+
+ * agent/mibgroup/mibII/: system_mib.c (V4-2-patches.6),
+ system_mib.c:
+
+ remove illegal SET support for sysDescr.
+
+2002-03-20 06:27 hardaker
+
+ * CodingStyle , local/mib2c:
+
+ - add many many -T flags for defining types.
+
+2002-03-19 21:13 hardaker
+
+ * apps/snmptrapd.c:
+
+ force setting of '!root' flag so that it will run for non-privileged
+ users or when an agentx master simply has never existed.
+
+2002-03-19 16:02 hardaker
+
+ * agent/helpers/table_dataset.c ,
+ include/net-snmp/agent/table_dataset.h:
+
+ - allow tables to be marked whether they should support creation or not.
+ - bug fixes
+
+2002-03-19 07:32 hardaker
+
+ * agent/helpers/: table_data.c , table_dataset.c:
+
+ documentation clean up
+
+2002-03-19 07:28 hardaker
+
+ * agent/: agent_handler.c , helpers/table_data.c:
+
+ documentation clean up
+
+2002-03-19 07:17 hardaker
+
+ * agent/: agent_handler.c , helpers/bulk_to_next.c ,
+ helpers/table_dataset.c , mibgroup/examples/scalar_int.c:
+
+ documentation clean up
+
+2002-03-19 06:43 hardaker
+
+ * agent/agent_handler.c , agent/agent_registry.c ,
+ agent/snmp_agent.c , agent/helpers/instance.c ,
+ agent/helpers/old_api.c , agent/helpers/table.c ,
+ agent/helpers/table_array.c , agent/helpers/table_data.c
+ , agent/helpers/table_dataset.c ,
+ agent/helpers/table_iterator.c , agent/mibgroup/testdelayed.c
+ , agent/mibgroup/testhandler.c ,
+ agent/mibgroup/agentx/master_admin.c ,
+ apps/notification_log.c , include/net-snmp/utilities.h ,
+ include/net-snmp/agent/agent_handler.h ,
+ include/net-snmp/agent/snmp_agent.h ,
+ include/net-snmp/agent/table.h ,
+ include/net-snmp/agent/table_data.h ,
+ include/net-snmp/agent/table_dataset.h ,
+ include/net-snmp/library/data_list.h ,
+ local/mib2c.create-dataset.conf , perl/agent/agent.xs ,
+ snmplib/data_list.c:
+
+ - renamed a few badly named functions (netsnmp_ appeared twice).
+ - implemented the beginning of creation support for datasets.
+
+2002-03-19 06:35 hardaker
+
+ * configure:
+
+ Apparently I ran autoconf earlier and missed checking in the results.
+
+2002-03-19 06:35 hardaker
+
+ * CodingStyle:
+
+ add -nfca
+
+2002-03-17 16:25 hardaker
+
+ * apps/snmptrap.c:
+
+ Set default port to 162.
+
+2002-03-17 15:51 hardaker
+
+ * snmplib/: snmpTCPDomain.c , snmpUDPDomain.c:
+
+ improved formatting strings showing both transport type and port number.
+
+2002-03-13 23:30 hardaker
+
+ * Makefile.rules:
+
+ add missing "installsubdirs" target missing (thanks to Katsuhisa ABE)
+
+2002-03-13 23:27 hardaker
+
+ * configure.in , net-snmp-config.in:
+
+ add --create-snmpv3-user to automate adding a v3 user to both the usm
+ and vacm tables (by adding lines to both the persistent and normal
+ conf files).
+
+2002-03-13 16:30 hardaker
+
+ * agent/mibgroup/agent/nsModuleTable.c:
+
+ bug fix for pre-processed requests.
+
+2002-03-13 16:30 hardaker
+
+ * Makefile.rules , configure , configure.in ,
+ agent/Makefile.in , agent/mibgroup/agent_mibs.h ,
+ include/ucd-snmp/agent_index.h ,
+ include/ucd-snmp/agent_read_config.h ,
+ include/ucd-snmp/agent_registry.h ,
+ include/ucd-snmp/agent_trap.h , include/ucd-snmp/asn1.h ,
+ include/ucd-snmp/auto_nlist.h , include/ucd-snmp/callback.h
+ , include/ucd-snmp/default_store.h ,
+ include/ucd-snmp/ds_agent.h ,
+ include/ucd-snmp/header_complex.h , include/ucd-snmp/int64.h
+ , include/ucd-snmp/keytools.h , include/ucd-snmp/mib.h
+ , include/ucd-snmp/mib_module_config.h ,
+ include/ucd-snmp/mibincl.h , include/ucd-snmp/parse.h ,
+ include/ucd-snmp/read_config.h , include/ucd-snmp/scapi.h
+ , include/ucd-snmp/snmp-tc.h , include/ucd-snmp/snmp.h
+ , include/ucd-snmp/snmp_agent.h ,
+ include/ucd-snmp/snmp_alarm.h , include/ucd-snmp/snmp_api.h
+ , include/ucd-snmp/snmp_client.h ,
+ include/ucd-snmp/snmp_debug.h , include/ucd-snmp/snmp_impl.h
+ , include/ucd-snmp/snmp_logging.h ,
+ include/ucd-snmp/snmp_parse_args.h ,
+ include/ucd-snmp/snmp_vars.h , include/ucd-snmp/snmpusm.h
+ , include/ucd-snmp/snmpv3.h , include/ucd-snmp/struct.h
+ , include/ucd-snmp/system.h , include/ucd-snmp/tools.h
+ , include/ucd-snmp/transform_oids.h ,
+ include/ucd-snmp/ucd-snmp-agent-includes.h ,
+ include/ucd-snmp/ucd-snmp-includes.h ,
+ include/ucd-snmp/util_funcs.h , include/ucd-snmp/var_struct.h
+ , include/ucd-snmp/version.h:
+
+ - --enable-ucd-snmp-compatibility actually installs headers (as opposed
+ to always, which is what it used to do).
+ - add agent_mibs to configure default mib modules and document.
+ - change help documentation a bit for the mib modules.
+ - add a forced dependency for mib_modules.lo
+
+2002-03-13 16:13 hardaker
+
+ * agent/mibgroup/agent.h:
+
+ opps. duplicates existing agent_mibs.h
+
+2002-03-13 15:50 hardaker
+
+ * mibs/: UCD-DEMO-MIB.txt, UCD-DISKIO-MIB.txt, UCD-DLMOD-MIB.txt,
+ UCD-IPFILTER-MIB.txt, UCD-IPFWACC-MIB.txt, UCD-SNMP-MIB.txt
+ (V4-2-patches.[1,1,1,1,1,9]), UCD-DEMO-MIB.txt ,
+ UCD-DISKIO-MIB.txt , UCD-DLMOD-MIB.txt ,
+ UCD-IPFILTER-MIB.txt , UCD-IPFWACC-MIB.txt ,
+ UCD-SNMP-MIB.txt:
+
+ address changes for ucd-snmp -> net-snmp note saying these mibs are no
+ longer supported by UCD.
+
+2002-03-13 15:39 hardaker
+
+ * agent/mibgroup/agent.h ,
+ agent/mibgroup/agent/nsModuleTable.c ,
+ agent/mibgroup/agent/nsModuleTable.h ,
+ mibs/NET-SNMP-AGENT-MIB.txt:
+
+ Added a nsModuleTable table which replaces the older mrTable.
+ Functionally, this is a list of all registered items within the MIB
+ tree just like the mrTable was, but with support for contexts and for
+ duplicate registrations with different priorities.
+
+2002-03-13 15:21 hardaker
+
+ * snmplib/: tools.c (V4-2-patches.4), tools.c:
+
+ malloc at least one byte in hex_to_binary2
+
+2002-03-13 15:11 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ remove unneeded debug statement
+
+2002-03-13 14:10 hardaker
+
+ * snmplib/mib.c:
+
+ Use local variable name buffers by default when building oid segments.
+
+2002-03-13 14:09 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ /* stop water from flowing through dam */
+ finger->insert("hole")
+
+2002-03-13 04:03 dts12
+
+ * FAQ (V4-2-patches.7), FAQ:
+
+ Add a description of "unlinked OIDs".
+
+2002-03-12 21:30 hardaker
+
+ * local/: mib2c.create-dataset.conf , mib2c.iterate.conf:
+
+ fix headers.
+
+2002-03-12 21:15 hardaker
+
+ * local/mib2c:
+
+ add don't format comments option
+
+2002-03-12 21:10 hardaker
+
+ * agent/helpers/table_dataset.c:
+
+ fix for tables with holes.
+
+2002-03-12 21:09 hardaker
+
+ * mibs/Makefile.in:
+
+ move default mibs to their own variable.
+
+2002-03-12 21:06 hardaker
+
+ * perl/: SNMP/Makefile.PL , agent/Makefile.PL ,
+ agent/agent.xs , agent/typemap:
+
+ - use net-snmp-config to figure things out.
+ - update headers and typeinfo for recent changes.
+
+2002-03-12 20:34 hardaker
+
+ * local/: FAQ2HTML , README.mib2c , mib2c , tkmib
+ , mib2c.array-auto.conf , mib2c.array-user.conf:
+
+ ucd-snmp -> net-snmp changes.
+
+2002-03-12 20:33 hardaker
+
+ * local/mib2c.storage.conf:
+
+ remove obsolete mib2c.conf file
+
+2002-03-12 18:11 hardaker
+
+ * agent/helpers/table_data.c:
+
+ don't forget to set row->next->prev to something when removing row.
+
+2002-03-12 17:54 hardaker
+
+ * agent/snmp_agent.c:
+
+ fix agentx inclusive searches to ignore get errors.
+
+2002-03-12 17:53 hardaker
+
+ * snmplib/snmpCallbackDomain.c:
+
+ some minimal dump debugging.
+
+2002-03-12 08:34 dts12
+
+ * FAQ (V4-2-patches.6), FAQ:
+
+ Updating of the FAQ ready for the next release.
+ (Mostly rephrasing of existing entries, but a few new questions)
+
+2002-03-11 18:00 rstory
+
+ * agent/helpers/table_dataset.c:
+
+ cast -1 to u_char so test doesn't always fail (fix compiler warning)
+
+2002-03-11 17:27 hardaker
+
+ * agent/mibgroup/agentx/master.c:
+
+ treat (illegal) errors from subagents specially for getnext cases.
+
+2002-03-11 13:41 hardaker
+
+ * net-snmp-config.in:
+
+ add our snmp libraries to output
+
+2002-03-11 10:34 hardaker
+
+ * include/net-snmp/agent/: table_data.h , table_dataset.h:
+
+ delete/remove support header changes.
+
+2002-03-11 09:13 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - allow compilation --with-out-transports=TCP
+
+2002-03-11 08:21 jbpn
+
+ * include/net-snmp/library/snmp_debug.h:
+
+ - fixes for --disable-debugging
+
+2002-03-11 07:41 dts12
+
+ * FAQ (V4-2-patches.5), FAQ:
+
+ Bring the 4x- and main-branch FAQs into agreement.
+
+2002-03-11 06:51 jbpn
+
+ * agent/mibgroup/agentx/master.c:
+
+ - use correct session ID when talking to subagents. Thanks to Craig
+ Setera for this fix.
+
+2002-03-11 05:20 jbpn
+
+ * snmplib/parse.c:
+
+ - fix bad type assignment in build_translation_table(), noticed by
+ Peter Stevens.
+
+2002-03-11 00:13 hardaker
+
+ * apps/snmptrapd.c:
+
+ check for NULL frees, even though it's supposed to be ok according to ansi.
+
+2002-03-11 00:12 hardaker
+
+ * apps/notification_log.c:
+
+ beginning support for maximum logged checking.
+
+2002-03-11 00:11 hardaker
+
+ * agent/helpers/table_dataset.c:
+
+ - remove/delete row support.
+ - null check
+ - doc comments.
+
+2002-03-11 00:10 hardaker
+
+ * agent/helpers/table_data.c:
+
+ remove/delete row support.
+
+2002-03-11 00:08 hardaker
+
+ * agent/helpers/instance.c:
+
+ call next handlers (opps).
+
+2002-03-10 14:11 nba
+
+ * man/mib_api.3.def:
+
+ Fix one sprint_variable => snprint_variable
+
+2002-03-10 14:06 nba
+
+ * include/net-snmp/library/mib.h , snmplib/mib.c:
+
+ Add snprint_* functions that were sprint_* in ucd-snmp 4
+
+2002-03-10 14:05 nba
+
+ * include/net-snmp/session_api.h , snmplib/snmpIPXDomain.c
+ , snmplib/snmp_transport.c:
+
+ Fix compilation when IPX-transport enabled
+
+2002-03-10 14:03 nba
+
+ * apps/snmpnetstat/Makefile.in:
+
+ Fix compilation outside source directory
+
+2002-03-08 22:26 hardaker
+
+ * FAQ , sedscript.in , perl/SNMP/SNMP.pm ,
+ snmplib/snmp_version.c:
+
+ - (snmplib/snmp_version.c sedscript.in): version tag ( 5.0.pre2 )
+
+2002-03-08 18:23 hardaker
+
+ * README:
+
+ misc changes.
+
+2002-03-08 18:23 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ new api changes
+
+2002-03-08 17:20 hardaker
+
+ * agent/mibgroup/mibII/mta_sendmail.c:
+
+ Patch from Lawrence Greenfield to deal with Sendmail 8.12 queuegroups.
+
+2002-03-08 16:59 hardaker
+
+ * apps/snmpnetstat/Makefile.in:
+
+ patch from csete to fix win32 builds
+
+2002-03-08 16:55 hardaker
+
+ * configure , configure.in:
+
+ add Callback transport to cygwin
+
+2002-03-08 16:49 hardaker
+
+ * NEWS:
+
+ mention rmon support.
+
+2002-03-08 16:39 hardaker
+
+ * snmplib/snmp_api.c:
+
+ patch from Harrie Hazewinkel to remove old an unused pointer
+
+2002-03-08 16:28 hardaker
+
+ * agent/agent_index.c , agent/agent_registry.c ,
+ agent/agent_trap.c , agent/snmp_agent.c ,
+ agent/snmp_vars.c , agent/snmpd.c ,
+ agent/helpers/instance.c , agent/helpers/old_api.c ,
+ agent/helpers/table.c , agent/helpers/table_array.c ,
+ agent/helpers/table_data.c , agent/helpers/table_dataset.c
+ , agent/helpers/table_iterator.c ,
+ agent/mibgroup/header_complex.c ,
+ agent/mibgroup/header_complex.h , agent/mibgroup/testhandler.c
+ , agent/mibgroup/Rmon/event.c ,
+ agent/mibgroup/agent/nsTransactionTable.c ,
+ agent/mibgroup/agentx/client.c ,
+ agent/mibgroup/agentx/client.h ,
+ agent/mibgroup/agentx/master.c ,
+ agent/mibgroup/agentx/master_admin.c ,
+ agent/mibgroup/agentx/master_admin.h ,
+ agent/mibgroup/agentx/protocol.c ,
+ agent/mibgroup/agentx/protocol.h ,
+ agent/mibgroup/agentx/subagent.c ,
+ agent/mibgroup/agentx/subagent.h ,
+ agent/mibgroup/disman/mteObjectsTable.c ,
+ agent/mibgroup/disman/mteObjectsTable.h ,
+ agent/mibgroup/disman/mteTriggerTable.c ,
+ agent/mibgroup/disman/mteTriggerTable.h ,
+ agent/mibgroup/examples/example.c ,
+ agent/mibgroup/mibII/sysORTable.c ,
+ agent/mibgroup/mibII/sysORTable.h ,
+ agent/mibgroup/mibII/vacm_context.c ,
+ agent/mibgroup/mibII/vacm_vars.c ,
+ agent/mibgroup/mibII/vacm_vars.h ,
+ agent/mibgroup/notification/snmpNotifyFilterProfileTable.c ,
+ agent/mibgroup/notification/snmpNotifyFilterTable.c ,
+ agent/mibgroup/notification/snmpNotifyTable.c ,
+ agent/mibgroup/smux/smux.c , agent/mibgroup/smux/smux.h
+ , agent/mibgroup/target/snmpTargetAddrEntry.c ,
+ agent/mibgroup/target/snmpTargetAddrEntry.h ,
+ agent/mibgroup/target/target.c ,
+ agent/mibgroup/target/target.h ,
+ agent/mibgroup/ucd-snmp/proxy.c ,
+ agent/mibgroup/ucd-snmp/proxy.h , apps/notification_log.c
+ , apps/notification_log.h , apps/snmpbulkget.c ,
+ apps/snmpbulkwalk.c , apps/snmpdelta.c , apps/snmpdf.c
+ , apps/snmpget.c , apps/snmpgetnext.c ,
+ apps/snmpset.c , apps/snmpstatus.c , apps/snmptable.c
+ , apps/snmptest.c , apps/snmptrap.c ,
+ apps/snmptrapd.c , apps/snmptrapd_log.c ,
+ apps/snmptrapd_log.h , apps/snmpusm.c , apps/snmpvacm.c
+ , apps/snmpwalk.c , apps/snmpnetstat/if.c ,
+ apps/snmpnetstat/inet.c , apps/snmpnetstat/inet6.c ,
+ apps/snmpnetstat/main.c , apps/snmpnetstat/netstat.h ,
+ apps/snmpnetstat/route.c ,
+ include/net-snmp/agent/agent_index.h ,
+ include/net-snmp/agent/agent_registry.h ,
+ include/net-snmp/agent/agent_trap.h ,
+ include/net-snmp/agent/old_api.h ,
+ include/net-snmp/agent/snmp_agent.h ,
+ include/net-snmp/agent/snmp_vars.h ,
+ include/net-snmp/agent/table.h ,
+ include/net-snmp/agent/table_data.h ,
+ include/net-snmp/agent/table_iterator.h ,
+ include/net-snmp/agent/var_struct.h ,
+ include/net-snmp/library/cmu_compat.h ,
+ include/net-snmp/library/libsnmp.h ,
+ include/net-snmp/library/mib.h ,
+ include/net-snmp/library/oid_array.h ,
+ include/net-snmp/library/parse.h ,
+ include/net-snmp/library/snmpCallbackDomain.h ,
+ include/net-snmp/library/snmp_api.h ,
+ include/net-snmp/library/snmp_client.h ,
+ include/net-snmp/library/snmp_debug.h ,
+ include/net-snmp/library/snmp_parse_args.h ,
+ include/net-snmp/library/snmp_secmod.h ,
+ include/net-snmp/library/snmpusm.h ,
+ local/mib2c.array-user.conf , local/mib2c.iterate.conf ,
+ local/mib2c.storage.conf , perl/SNMP/SNMP.xs ,
+ snmplib/cmu_compat.c , snmplib/mib.c ,
+ snmplib/snmpCallbackDomain.c , snmplib/snmp_api.c ,
+ snmplib/snmp_client.c , snmplib/snmp_debug.c ,
+ snmplib/snmp_parse_args.c , snmplib/snmp_secmod.c ,
+ snmplib/snmpksm.c , snmplib/snmpusm.c , snmplib/snmpv3.c
+ , snmplib/ucd_compat.c:
+
+ struct snmp_session typedefed to netsnmp_session. & pdu. & ...
+
+2002-03-08 14:00 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ get_symbol -> get_tree
+
+2002-03-08 07:45 hardaker
+
+ * perl/: SNMP/SNMP.xs , agent/agent.pm , agent/agent.xs
+ , agent/test.pl:
+
+ missed updates
+
+2002-03-08 07:43 hardaker
+
+ * snmplib/: data_list.c , default_store.c , mib.c
+ , oid_array.c , oid_stash.c , read_config.c
+ , snmpAAL5PVCDomain.c , snmpCallbackDomain.c ,
+ snmpIPXDomain.c , snmpTCPDomain.c , snmpTCPIPv6Domain.c
+ , snmpUDPDomain.c , snmpUDPIPv6Domain.c ,
+ snmpUnixDomain.c , snmp_api.c , snmp_debug.c ,
+ snmp_transport.c , snmpv3.c:
+
+ missing updated code
+
+2002-03-08 02:07 jbpn
+
+ * include/net-snmp/library/snmp_api.h ,
+ include/net-snmp/library/snmp_transport.h , snmplib/snmp_api.c:
+
+ - some snmp -> netsnmp fixes
+
+2002-03-07 13:42 hardaker
+
+ * agent/snmp_agent.c , agent/snmp_vars.c ,
+ agent/snmpd.c , agent/helpers/table.c ,
+ agent/helpers/table_array.c , agent/helpers/table_data.c
+ , agent/helpers/table_dataset.c ,
+ agent/helpers/table_iterator.c , agent/mibgroup/testhandler.c
+ , agent/mibgroup/agent/nsTransactionTable.c ,
+ agent/mibgroup/agentx/subagent.c ,
+ agent/mibgroup/disman/mteTriggerTable.c ,
+ agent/mibgroup/mibII/vacm_context.c ,
+ agent/mibgroup/mibII/vacm_vars.c , apps/notification_log.c
+ , apps/snmptrapd.c , apps/snmptrapd_log.c ,
+ include/net-snmp/agent/snmp_agent.h ,
+ include/net-snmp/agent/table.h ,
+ include/net-snmp/agent/table_array.h ,
+ include/net-snmp/agent/table_data.h ,
+ include/net-snmp/agent/table_dataset.h ,
+ include/net-snmp/agent/table_iterator.h ,
+ include/net-snmp/library/snmpAAL5PVCDomain.h ,
+ include/net-snmp/library/snmpCallbackDomain.h ,
+ include/net-snmp/library/snmpIPXDomain.h ,
+ include/net-snmp/library/snmpTCPDomain.h ,
+ include/net-snmp/library/snmpTCPIPv6Domain.h ,
+ include/net-snmp/library/snmpUDPDomain.h ,
+ include/net-snmp/library/snmpUDPIPv6Domain.h ,
+ include/net-snmp/library/snmpUnixDomain.h ,
+ local/mib2c.array-auto.conf , local/mib2c.array-user.conf
+ , local/mib2c.create-dataset.conf ,
+ local/mib2c.iterate.conf:
+
+ massive netsnmp_ prefixing of stuff (pass 4)
+
+2002-03-07 13:29 hardaker
+
+ * agent/agent_handler.c , agent/agent_read_config.c ,
+ agent/agent_registry.c , agent/snmp_vars.c ,
+ agent/helpers/all_helpers.c , agent/helpers/bulk_to_next.c
+ , agent/helpers/debug_handler.c ,
+ agent/helpers/instance.c , agent/helpers/multiplexer.c ,
+ agent/helpers/null.c , agent/helpers/old_api.c ,
+ agent/helpers/read_only.c , agent/helpers/serialize.c ,
+ agent/helpers/table.c , agent/helpers/table_array.c ,
+ agent/helpers/table_data.c , agent/helpers/table_dataset.c
+ , agent/helpers/table_iterator.c ,
+ agent/mibgroup/testdelayed.c , agent/mibgroup/testhandler.c
+ , agent/mibgroup/agent/nsTransactionTable.c ,
+ agent/mibgroup/agent/nsTransactionTable.h ,
+ agent/mibgroup/agentx/master_admin.c ,
+ agent/mibgroup/disman/mteTriggerTable.c ,
+ agent/mibgroup/examples/scalar_int.c ,
+ agent/mibgroup/mibII/vacm_context.c ,
+ agent/mibgroup/target/target.c ,
+ agent/mibgroup/target/target_counters.c ,
+ apps/notification_log.c ,
+ include/net-snmp/agent/agent_registry.h ,
+ include/net-snmp/agent/all_helpers.h ,
+ include/net-snmp/agent/bulk_to_next.h ,
+ include/net-snmp/agent/debug_handler.h ,
+ include/net-snmp/agent/instance.h ,
+ include/net-snmp/agent/multiplexer.h ,
+ include/net-snmp/agent/null.h ,
+ include/net-snmp/agent/old_api.h ,
+ include/net-snmp/agent/read_only.h ,
+ include/net-snmp/agent/serialize.h ,
+ include/net-snmp/agent/table.h ,
+ include/net-snmp/agent/table_array.h ,
+ include/net-snmp/agent/table_data.h ,
+ include/net-snmp/agent/table_dataset.h ,
+ include/net-snmp/agent/table_iterator.h ,
+ include/net-snmp/library/snmpTCPDomain.h ,
+ local/mib2c.array-auto.conf , local/mib2c.array-user.conf
+ , local/mib2c.create-dataset.conf ,
+ local/mib2c.iterate.conf:
+
+ massive netsnmp_ prefixing of stuff (pass 3)
+
+2002-03-07 13:13 hardaker
+
+ * agent/agent_handler.c , agent/agent_registry.c ,
+ agent/snmp_agent.c , agent/helpers/debug_handler.c ,
+ agent/helpers/instance.c , agent/helpers/old_api.c ,
+ agent/helpers/table.c , agent/helpers/table_array.c ,
+ agent/helpers/table_data.c , agent/helpers/table_dataset.c
+ , agent/helpers/table_iterator.c ,
+ agent/mibgroup/testdelayed.c , agent/mibgroup/testhandler.c
+ , agent/mibgroup/agentx/master_admin.c ,
+ agent/mibgroup/disman/mteTriggerTable.c ,
+ agent/mibgroup/target/target.c , apps/snmptrapd.c ,
+ include/net-snmp/agent/agent_handler.h ,
+ include/net-snmp/agent/snmp_agent.h ,
+ include/net-snmp/agent/table_array.h ,
+ include/net-snmp/library/data_list.h ,
+ include/net-snmp/library/oid_array.h ,
+ include/net-snmp/library/oid_stash.h ,
+ local/mib2c.array-user.conf:
+
+ massive netsnmp_ prefixing of stuff (pass 2)
+
+2002-03-07 08:56 hardaker
+
+ * agent/agent_handler.c , agent/agent_read_config.c ,
+ agent/agent_registry.c , agent/snmp_agent.c ,
+ agent/snmp_vars.c , agent/snmpd.c ,
+ agent/helpers/bulk_to_next.c , agent/helpers/debug_handler.c
+ , agent/helpers/instance.c ,
+ agent/helpers/multiplexer.c , agent/helpers/null.c ,
+ agent/helpers/old_api.c , agent/helpers/read_only.c ,
+ agent/helpers/serialize.c , agent/helpers/table.c ,
+ agent/helpers/table_array.c , agent/helpers/table_data.c
+ , agent/helpers/table_dataset.c ,
+ agent/helpers/table_iterator.c , agent/mibgroup/testdelayed.c
+ , agent/mibgroup/testdelayed.h ,
+ agent/mibgroup/testhandler.c , agent/mibgroup/testhandler.h
+ , agent/mibgroup/agent/nsTransactionTable.c ,
+ agent/mibgroup/agent/nsTransactionTable.h ,
+ agent/mibgroup/agentx/master.c ,
+ agent/mibgroup/agentx/master.h ,
+ agent/mibgroup/agentx/master_admin.c ,
+ agent/mibgroup/agentx/subagent.c ,
+ agent/mibgroup/disman/mteTriggerTable.c ,
+ agent/mibgroup/mibII/sysORTable.c ,
+ agent/mibgroup/mibII/system_mib.c ,
+ agent/mibgroup/mibII/vacm_context.c ,
+ agent/mibgroup/mibII/vacm_context.h ,
+ agent/mibgroup/mibII/vacm_vars.c ,
+ agent/mibgroup/notification/snmpNotifyTable.c ,
+ agent/mibgroup/target/snmpTargetAddrEntry.h ,
+ agent/mibgroup/target/target.c ,
+ agent/mibgroup/target/target_counters.c ,
+ agent/mibgroup/target/target_counters.h ,
+ agent/mibgroup/ucd-snmp/proxy.c ,
+ agent/mibgroup/ucd-snmp/proxy.h , apps/notification_log.c
+ , apps/notification_log.h , apps/snmpstatus.c ,
+ apps/snmptest.c , apps/snmptrapd.c ,
+ apps/snmptrapd_log.c , apps/snmptrapd_log.h ,
+ include/net-snmp/session_api.h ,
+ include/net-snmp/agent/agent_handler.h ,
+ include/net-snmp/agent/agent_registry.h ,
+ include/net-snmp/agent/bulk_to_next.h ,
+ include/net-snmp/agent/debug_handler.h ,
+ include/net-snmp/agent/instance.h ,
+ include/net-snmp/agent/multiplexer.h ,
+ include/net-snmp/agent/null.h ,
+ include/net-snmp/agent/old_api.h ,
+ include/net-snmp/agent/read_only.h ,
+ include/net-snmp/agent/serialize.h ,
+ include/net-snmp/agent/set_helper.h ,
+ include/net-snmp/agent/snmp_agent.h ,
+ include/net-snmp/agent/snmp_vars.h ,
+ include/net-snmp/agent/table.h ,
+ include/net-snmp/agent/table_array.h ,
+ include/net-snmp/agent/table_data.h ,
+ include/net-snmp/agent/table_dataset.h ,
+ include/net-snmp/agent/table_iterator.h ,
+ include/net-snmp/agent/var_struct.h ,
+ include/net-snmp/library/mib.h ,
+ include/net-snmp/library/read_config.h ,
+ include/net-snmp/library/snmpAAL5PVCDomain.h ,
+ include/net-snmp/library/snmpCallbackDomain.h ,
+ include/net-snmp/library/snmpIPXDomain.h ,
+ include/net-snmp/library/snmpTCPDomain.h ,
+ include/net-snmp/library/snmpTCPIPv6Domain.h ,
+ include/net-snmp/library/snmpUDPDomain.h ,
+ include/net-snmp/library/snmpUDPIPv6Domain.h ,
+ include/net-snmp/library/snmpUnixDomain.h ,
+ include/net-snmp/library/snmp_api.h ,
+ include/net-snmp/library/snmp_transport.h ,
+ local/mib2c.array-auto.conf , local/mib2c.array-user.conf
+ , local/mib2c.create-dataset.conf ,
+ local/mib2c.iterate.conf:
+
+ massive netsnmp_ prefixing of stuff (pass 1)
+
+2002-03-07 06:21 jbpn
+
+ * man/snmp_sess_api.3.def:
+
+ - style update
+
+2002-03-07 05:47 jbpn
+
+ * man/snmp_trap_api.3.def:
+
+ - minor updates
+
+2002-03-07 05:39 jbpn
+
+ * man/snmp_alarm.3.def:
+
+ - style update
+
+2002-03-07 05:00 jbpn
+
+ * man/read_config.3.def:
+
+ - make prototypes match header
+
+ - make style consistent with mib_api
+
+2002-03-07 03:07 jbpn
+
+ * man/mib_api.3.def:
+
+ - fix up snprint_ declarations, fix small typo. Patch by Guy
+ Harris.
+
+2002-03-07 02:44 jbpn
+
+ * include/net-snmp/library/mib.h:
+
+ - remove duplicate declaration of sprint_realloc_by_type, as noted
+ by Guy Harris.
+
+2002-03-06 17:15 hardaker
+
+ * include/net-snmp/agent/.cvsignore ,
+ include/net-snmp/library/.cvsignore , perl/SNMP/t/.cvsignore:
+
+ new ignore files
+
+2002-03-06 17:13 hardaker
+
+ * .cvsignore:
+
+ ignore docs
+
+2002-03-06 17:08 hardaker
+
+ * agent/mibgroup/examples.h:
+
+ examples module wrapper to include all (new) examples.
+
+2002-03-06 16:58 hardaker
+
+ * agent/mibgroup/examples/scalar_int.c:
+
+ document better.
+
+2002-03-06 16:58 hardaker
+
+ * doxygen.conf:
+
+ search examples for docs.
+
+2002-03-06 16:29 hardaker
+
+ * mibs/NET-SNMP-EXAMPLES-MIB.txt:
+
+ example MIB template (and one node)
+
+2002-03-06 16:28 hardaker
+
+ * mibs/NET-SNMP-MIB.txt:
+
+ instantiate examples
+
+2002-03-06 16:27 hardaker
+
+ * mibs/Makefile.in:
+
+ install some NS mibs
+
+2002-03-06 16:27 hardaker
+
+ * agent/mibgroup/examples/: scalar_int.c , scalar_int.h:
+
+ Example implementation of a SNMP enabled int registered at a scalar.
+
+2002-03-06 16:25 hardaker
+
+ * agent/helpers/instance.c , include/net-snmp/agent/instance.h:
+
+ many changes for instances. Specificically:
+ - allow for subhandlers.
+ - provide an int wrapper.
+ - reuse more code.
+ - numerous bug fixes.
+
+2002-03-06 14:05 hardaker
+
+ * NEWS:
+
+ remove a blank line.
+
+2002-03-06 14:05 hardaker
+
+ * agent/mibgroup/agentx/: master.c , master_admin.c:
+
+ Fix master agent getbulk support. this has to be independently of the
+ normal bulk->next fixes due to delegation. Long story.
+
+2002-03-06 14:03 hardaker
+
+ * agent/helpers/bulk_to_next.c:
+
+ move bulk_to_next fixing functionality into a separate function for reuse.
+
+2002-03-06 10:26 jbpn
+
+ * include/net-snmp/library/mib.h , snmplib/mib.c:
+
+ - sprinkle magic const dust
+
+2002-03-06 10:18 jbpn
+
+ * man/mib_api.3.def:
+
+ - document changed API, incorporating patches by Guy Harris.
+
+2002-03-06 09:34 hardaker
+
+ * testing/tests/: T112agentxsetfail , T122proxysetfail:
+
+ fix tests.
+
+2002-03-06 09:24 hardaker
+
+ * snmplib/snmp_parse_args.c:
+
+ re-enable setting optind to 1 till Dave tells me where this breaks.
+
+2002-03-06 09:08 hardaker
+
+ * testing/tests/: T051snmpv2ctrap , T052snmpv2cinform ,
+ T058agentauthtrap:
+
+ fixes for new command line usage.
+
+2002-03-06 09:07 hardaker
+
+ * snmplib/snmp_client.c:
+
+ more improved error messages (mostly)
+
+2002-03-06 08:54 hardaker
+
+ * configure:
+
+ autoconf
+
+2002-03-06 08:41 dts12
+
+ * snmplib/: snmpv3.c (V4-2-patches.3), snmpv3.c:
+
+ Fix a confusion between defAuthType and defPrivType.
+
+2002-03-06 08:36 hardaker
+
+ * agent/mibgroup/agentx/: master.c , protocol.c:
+
+ proper fix for not requiring responses to CLEANUP messages.
+
+2002-03-06 06:07 jbpn
+
+ * agent/snmp_agent.c:
+
+ - zero the name of elements of the bulk cache
+
+2002-03-06 06:06 jbpn
+
+ * snmplib/mib.c:
+
+ - calloc() not malloc() in a few places to initialise some buffers
+ to zeroes.
+
+2002-03-06 05:52 dts12
+
+ * snmplib/: snmp_api.c (V4-2-patches.6), snmp_api.c:
+
+ Actually use the common 'defPassphrase' value if 'def{Auth,Priv}Passphrase' isn't set.
+ Qn: Should the AuthPassphrase also be used for privacy if no other value is available?
+
+2002-03-06 05:45 jbpn
+
+ * agent/mibgroup/agentx/master.c:
+
+ - don't send requests for OIDs preceeding the start of a region
+ (this can lead to loops if e.g. a subagent has registered two
+ adjacent rows).
+
+2002-03-06 05:07 jbpn
+
+ * testing/Makefile.in:
+
+ - ignore errors doing rm -rf /tmp/snmp-test* when making testclean
+
+2002-03-06 02:26 jbpn
+
+ * snmplib/mib.c:
+
+ - use more efficient get_tree() in sprint_realloc_value()
+
+2002-03-05 18:28 hardaker
+
+ * testing/tests/: T015snmpv2cgetnext , T001snmpv1get ,
+ T002snmpv1getnext , T003snmpv1getfail , T014snmpv2cget
+ , T016snmpv2cgetfail , T017snmpv2ctov1getfail ,
+ T018snmpv1tov2cgetfail , T100agenthup:
+
+ fixes for new forced -c flags
+
+2002-03-05 18:21 hardaker
+
+ * include/net-snmp/agent/snmp_agent.h:
+
+ remove no longer appropriate comment.
+
+2002-03-05 18:20 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ fix duplicate free by cloning the pdu before sending it out again
+ (thought I had done this once in the past already, but I got 1/2 functions).
+
+2002-03-05 18:19 hardaker
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ Temporary fix to fix for agentx SET requests. This reverses a
+ previous John change where responses to cleanups are now expected
+ again. This took me a good 2 days to track down, sigh...
+
+2002-03-05 18:07 hardaker
+
+ * agent/mibgroup/agentx/master.c:
+
+ - add (ascii) agentx state diagram
+
+2002-03-05 18:07 hardaker
+
+ * agent/snmp_agent.c:
+
+ - multiple free bug fixes.
+ - improved debugging statements.
+
+2002-03-05 10:44 hardaker
+
+ * agent/mibgroup/agentx/: master_request.c , master_request.h:
+
+ removed unused files
+
+2002-03-05 10:31 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - oops, fix bad cut and paste
+
+2002-03-05 10:25 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - reintroduce scope processing (see RFC 2741, p. 66, section 7.2.3.2
+ paragraph 2): "If the subagent can't locate an appropriate
+ variable, __v.name_is_set_to_the_starting_OID__ [the important
+ bit] and the VarBind is set to `endOfMibView'"
+
+2002-03-05 09:54 hardaker
+
+ * agent/mibgroup/ucd-snmp/versioninfo.c:
+
+ impose max length restriction supplied by mib for configuration options.
+
+2002-03-05 08:48 jbpn
+
+ * agent/: agent_index.c , snmp_agent.c ,
+ helpers/debug_handler.c , mibgroup/agentx/master.c:
+
+ - use new DEBUGMSGVAR macro in a few places
+
+2002-03-05 08:45 jbpn
+
+ * snmplib/snmp_debug.c ,
+ include/net-snmp/library/snmp_debug.h:
+
+ - add DEBUGMSGVAR macro to print out a variable
+
+2002-03-05 08:34 hardaker
+
+ * perl/SNMP/: SNMP.pm , SNMP.xs:
+
+ print_value function updates.
+
+2002-03-05 08:05 dts12
+
+ * agent/mibgroup/examples/: ucdDemoPublic.c (V4-2-patches.2),
+ ucdDemoPublic.c:
+
+ Add missing "standard" headers, and tweak a type slightly.
+ (Based on requests from Gregory Toth).
+
+2002-03-05 08:04 jbpn
+
+ * agent/snmp_agent.c:
+
+ - grrr, botched last fix
+
+2002-03-05 08:01 hardaker
+
+ * agent/mibgroup/agentx/subagent.c ,
+ snmplib/snmpCallbackDomain.c:
+
+ Set the default callback session version number to the generic -1
+ version allowing the pdu to passed without version checking.
+
+2002-03-05 07:59 hardaker
+
+ * agent/mibgroup/agentx/master.c:
+
+ move NULL check to *before* you actually use the pointer.
+
+2002-03-05 07:59 jbpn
+
+ * agent/snmp_agent.c:
+
+ - mark INCLUSIVE requests as such
+
+2002-03-05 07:58 hardaker
+
+ * agent/helpers/old_api.c:
+
+ - use a for loop instead of a while loop, just a precaution for future problems.
+
+2002-03-05 07:56 hardaker
+
+ * agent/snmp_agent.c:
+
+ - (snmp_check_parse) allow internal set transactions to be passed to
+ the agent, since agentx sends them.
+
+2002-03-05 07:21 jbpn
+
+ * snmplib/mib.c:
+
+ - don't add the "module ID" to OIDs if it is numeric because we
+ couldn't look it up properly (to avoid horrible looking output
+ like this: "OID: #-1::iso.2.3.4.5.")
+
+2002-03-05 07:05 jbpn
+
+ * configure.in:
+
+ - remove reference to 2c in error message from version prompt
+
+2002-03-05 07:01 jbpn
+
+ * configure.in:
+
+ - remove duplicate tests
+
+2002-03-05 06:51 hardaker
+
+ * configure , configure.in:
+
+ - re-emphasis a suggestion to switch to a secure version of the protocol.
+ - delete notion that v3 without auth/priv provides better security (it doesn't).
+ - Don't accept v2c as an accepted value, as it's used as an int.
+ - but do change help messages, etc, to reflect that 2 = v2c.
+
+2002-03-05 06:50 dts12
+
+ * agent/mibgroup/ucd-snmp/dlmod.c:
+
+ Cast a calloc appropriately (requested by Gregory Toth)
+
+2002-03-05 06:20 jbpn
+
+ * snmplib/Makefile.in:
+
+ - fix typo in OBJS definition
+
+2002-03-05 06:18 jbpn
+
+ * agent/Makefile.in:
+
+ - clean target depends on $(OBJS) and $(LOBJS), so define them
+
+2002-03-05 03:52 jbpn
+
+ * configure.in:
+
+ - fix default version tests (splitting them over several lines
+ confuses sh on Solaris, at least).
+
+ - disambiguate some instances of "version" in default version
+ prompt text.
+
+2002-03-05 02:34 dts12
+
+ * configure , configure.in:
+
+ Correctly detect when no initial default version has been set.
+ Accept '2c' as well as '2' for a default version choice.
+ Fix the title for this prompt, and reword the description to
+ make it a *slightly* less leading question, m'lud.
+
+ Qn: Should we support a "no default version" option ?
+ (hence allow the admin to force the decision down to the user)
+
+2002-03-04 18:14 hardaker
+
+ * agent/mibgroup/agentx/client.c:
+
+ ucd-snmp -> net-snmp change
+
+2002-03-04 18:10 hardaker
+
+ * agent/agent_handler.c:
+
+ (To John): do not free the myvoid pointer in a handler. You can not
+ assume that it's a freeable resource. For instance, the agentx master
+ agent was using it to store the master session pointer in it (which
+ would exist in multiple registered nodes).
+
+2002-03-04 17:26 hardaker
+
+ * configure.in , include/net-snmp/snmpv3_api.h ,
+ snmplib/Makefile.in:
+
+ use a configure generated wrapper header for v3 security modules.
+
+2002-03-04 11:58 hardaker
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ add dmalloc.h to the proper place.
+
+2002-03-04 11:53 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ string clean ups.
+
+2002-03-04 11:52 hardaker
+
+ * acconfig.h , aclocal.m4 , configure ,
+ configure.in , include/net-snmp/net-snmp-config.h.in ,
+ include/net-snmp/library/default_store.h ,
+ snmplib/snmp_parse_args.c , snmplib/snmpv3.c:
+
+ Implement a default version prompt for configure.
+ - (Wes ducks as this is currently set to '3' which he may have to
+ change as it hasn't exactly been agreed upon as the proper default yet).
+ - --with-default-snmp-version also created.
+ - changed handling of default store / snmp.conf usage but impact
+ should be low, hopefully.
+
+2002-03-04 11:49 hardaker
+
+ * snmplib/snmp_api.c:
+
+ a few error strings slightly improved. We really need to change the
+ way these are handled to get better improvement.
+
+2002-03-04 07:49 hardaker
+
+ * testing/Makefile.in:
+
+ separate out the cleaning of /tmp from the main cleaning to provide it
+ as a special target.
+
+2002-03-04 07:38 hardaker
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ -Wall fixes.
+
+2002-03-04 05:32 jbpn
+
+ * man/: snmpbulkget.1.def , snmpbulkwalk.1.def ,
+ snmpget.1.def , snmpgetnext.1.def , snmpstatus.1.def
+ , snmptest.1.def , snmptrap.1.def:
+
+ - remove further instances of positional community string parameter,
+ after Patrick Welche
+
+2002-03-04 05:25 jbpn
+
+ * man/: snmpd.conf.5.def , snmpwalk.1.def:
+
+ - patches from Patrick Welche
+
+2002-03-04 01:16 dts12
+
+ * agent/mibgroup/ucd-snmp/: memory.c (V4-2-patches.6), memory.c:
+
+ Correct debug output message (thanks to Jeroen Ruigrok)
+
+2002-03-01 22:45 hardaker
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ making the (same) debugging statement more useful.
+
+2002-03-01 22:43 hardaker
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ add missing newline to a debugging statement.
+
+2002-03-01 12:49 hardaker
+
+ * snmplib/: keytools.c , mib.c , snmp_api.c ,
+ snmp_client.c , snmp_parse_args.c , snmpv3.c:
+
+ First pass at a few better error messages.
+
+2002-03-01 12:01 hardaker
+
+ * mibs/Makefile.in:
+
+ don't install headers here.
+
+2002-03-01 05:41 jbpn
+
+ * include/net-snmp/library/mib.h , snmplib/mib.c:
+
+ - add snprint_value, snprint_variable, snprint_objid
+
+2002-02-28 06:54 dts12
+
+ * agent/snmp_vars.c , snmplib/snmpCallbackDomain.c ,
+ win32/libsnmp/libsnmp.dsp , win32/net-snmp/net-snmp-config.h:
+
+ Add back the 'snmpCallback' domain under Windows.
+
+2002-02-27 10:04 jbpn
+
+ * apps/: snmpbulkget.c , snmpbulkwalk.c , snmpget.c
+ , snmpgetnext.c , snmpset.c , snmpstatus.c
+ , snmptable.c , snmptest.c , snmptranslate.c
+ , snmptrap.c , snmpusm.c , snmpwalk.c:
+
+ - tart up usage messages, make them more consistent and bring in line
+ with manual pages
+
+2002-02-27 10:03 jbpn
+
+ * man/: snmpset.1.def , snmptable.1.def , snmptrap.1.def
+ , snmpusm.1.def:
+
+ - minor formatting changes
+
+2002-02-27 10:03 jbpn
+
+ * snmplib/: mib.c , parse.c , snmp_parse_args.c:
+
+ - drop community positional parameter
+
+ - tart up usage messages to be more consistent and in line with manual
+ pages
+
+2002-02-27 09:47 dts12
+
+ * snmplib/: vacm.c (V4-2-patches.4), vacm.c:
+
+ Handle views that specify a full instance OID.
+ (Since the internally stored OID prepends the length as well,
+ the apparent length is one greater than it really is)
+
+2002-02-27 06:50 jbpn
+
+ * apps/snmptrapd.c:
+
+ - [ADDRESSES] -> [LISTENING ADDRESSES] in usage message, to match
+ manual page.
+
+2002-02-27 06:09 jbpn
+
+ * man/snmpd.conf.5.def:
+
+ - drop optional positional community parameter from trapsess
+ description.
+
+2002-02-27 05:51 jbpn
+
+ * include/net-snmp/library/mib.h , snmplib/mib.c:
+
+ - drop sprint_blah functions
+
+ - no snprint_blah yet
+
+2002-02-27 05:43 jbpn
+
+ * snmplib/asn1.c:
+
+ - don't use sprint_blah functions
+
+2002-02-27 05:40 jbpn
+
+ * snmplib/snmp_debug.c:
+
+ - don't use sprint_blah functions
+
+ - drop archaic DEBUGP functions
+
+2002-02-27 05:37 dts12
+
+ * agent/mibgroup/host/: hr_storage.c , hr_swrun.c:
+
+ Use the more informative 'output_api.h' header file name
+ (I must have missed these earlier)
+
+2002-02-27 05:35 jbpn
+
+ * man/snmpcmd.1.def:
+
+ - drop community positional parameter
+
+ - yes, for once the documentation has been updated *before* the
+ code!
+
+2002-02-27 05:12 jbpn
+
+ * agent/mibgroup/mibII/ipv6.c:
+
+ - don't use obsolete DEBUGP function
+
+2002-02-27 05:11 jbpn
+
+ * include/net-snmp/library/: snmp_api.h , snmp_debug.h ,
+ system.h:
+
+ - drop archaic DEBUGP functions
+
+2002-02-27 05:10 jbpn
+
+ * include/net-snmp/library/scapi.h:
+
+ - don't use obsolete DEBUGPL function
+
+2002-02-27 04:32 jbpn
+
+ * apps/snmpbulkwalk.c , apps/snmpdelta.c ,
+ apps/snmptable.c , apps/snmpusm.c , apps/snmpwalk.c
+ , agent/agent_index.c , agent/helpers/table.c:
+
+ - don't use sprint_blah functions
+
+2002-02-27 02:26 jbpn
+
+ * agent/mibgroup/agentx/master.c:
+
+ - don't use sprint_variable
+
+2002-02-27 02:08 jbpn
+
+ * agent/snmp_agent.c:
+
+ - don't use sprint_variable, no, I MEAN it this time
+
+2002-02-27 02:05 jbpn
+
+ * agent/snmp_agent.c:
+
+ - don't use sprint_variable
+
+2002-02-26 12:46 rstory
+
+ * agent/snmp_agent.c:
+
+ clear new memory after realloc() since realloc doesn't do it.
+
+2002-02-26 12:30 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ add UNSIGNED32
+
+2002-02-26 08:55 jbpn
+
+ * agent/mibgroup/: kernel_sunos5.c , kernel_sunos5.h ,
+ mibII/at.c , mibII/icmp.c , mibII/interfaces.c ,
+ mibII/ip.c , mibII/tcp.c , mibII/udp.c ,
+ mibII/var_route.c:
+
+ - change cache implementation after some interesting profiling (see
+ lengthy new comment in kernel_sunos5.c)
+
+2002-02-26 08:13 dts12
+
+ * agent/helpers/all_helpers.c , agent/helpers/table.c ,
+ agent/mibgroup/notification/snmpNotifyTable.c ,
+ agent/mibgroup/target/snmpTargetAddrEntry.c ,
+ agent/mibgroup/ucd-snmp/proxy.c , snmplib/snmp-tc.c ,
+ snmplib/ucd_compat.c:
+
+ Remove assorted extraneous ^M's
+
+2002-02-26 07:14 dts12
+
+ * README.win32:
+
+ A quick guide to installing the Core Platform SDK, needed for the Windows agent.
+
+2002-02-26 07:03 dts12
+
+ * agent/agent_trap.c , agent/snmp_vars.c ,
+ agent/snmpd.c , agent/helpers/table_dataset.c ,
+ agent/mibgroup/mibII/system_mib.c ,
+ agent/mibgroup/mibII/udp.c , agent/mibgroup/mibII/vacm_vars.c
+ , apps/snmptrapd_log.c ,
+ include/net-snmp/agent/agent_handler.h ,
+ include/net-snmp/agent/agent_trap.h ,
+ include/net-snmp/agent/table_dataset.h ,
+ include/net-snmp/library/mib.h ,
+ include/net-snmp/library/snmp_enum.h , snmplib/mib.c ,
+ snmplib/snmp_parse_args.c , snmplib/snmpv3.c ,
+ snmplib/winservice.c:
+
+ Assorted minor tweaks to ensure that the project builds under Visual C++.
+ Mostly because VC++ is fussy about sort-of-compatible data types
+ (e.g. signed vs unsigned integers).
+
+2002-02-26 07:00 dts12
+
+ * win32/: mib_module_inits.h , win32.dsw , win32.opt
+ , libagent/libagent.dsp , libsnmp/libsnmp.dsp ,
+ libucdmibs/libucdmibs.dsp , netsnmpmibs/netsnmpmibs.dsp ,
+ snmpd/snmpd.dsp , snmptrapd/snmptrapd.dsp:
+
+ Rename 'libucdmibs' to reflect the change of project name,
+ and assorted tweaks so that the full project builds under Visual C++.
+ (N.B: The agent requires "Microsoft Platform Core SDK" in order
+ to build the 'netsnmpmibs' project)
+
+2002-02-26 06:53 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ remove duplicate variable in a warning
+
+2002-02-26 06:40 jbpn
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ - include net-snmp-config.h
+
+2002-02-25 21:09 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ more install changes
+
+2002-02-25 21:08 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ mention installing DBD::File.
+
+2002-02-25 20:38 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ one too many '0's in a url.
+
+2002-02-25 20:33 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ reword.
+
+2002-02-25 20:30 hardaker
+
+ * perl/AnyData_SNMP/Storage.pm:
+
+ move warning outside secondary warning augmentation loop.
+
+2002-02-25 20:29 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ update SQL::Statement module.
+
+2002-02-25 16:25 rstory
+
+ * agent/helpers/table_array.c:
+
+ add find_table_array_handler(); remove debugging code/comments;
+ make sure we have the right handler before using the void pointer;
+ remove ^M characters
+
+2002-02-25 11:57 hardaker
+
+ * snmplib/data_list.c , include/net-snmp/library/data_list.h:
+
+ 2 new functions.
+
+2002-02-25 11:18 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ set security model
+
+2002-02-25 08:15 dts12
+
+ * agent/helpers/all_helpers.c , agent/helpers/old_api.c
+ , agent/helpers/table.c , agent/helpers/table_array.c
+ , agent/helpers/table_dataset.c ,
+ agent/mibgroup/notification/snmpNotifyTable.c ,
+ agent/mibgroup/target/snmpTargetAddrEntry.c ,
+ agent/mibgroup/ucd-snmp/proxy.c ,
+ include/net-snmp/agent/agent_handler.h ,
+ include/net-snmp/agent/table.h , win32/win32.dsw:
+
+ Continuing improvements to compilation of the latest code under Visual C++.
+ The 'libhelpers' project now compiles, and this also addresses a number
+ of warnings and errors in the libagent and libucdmibs projects.
+ But these two still fail on 'OID_LENGTH' and 'iphlpapi.h'
+
+2002-02-25 07:00 dts12
+
+ * win32/net-snmp/agent/mib_module_config.h:
+
+ Provide a plausible module configuration list for the Windows agent.
+
+2002-02-25 06:04 jbpn
+
+ * mibs/NET-SNMP-AGENT-MIB.txt:
+
+ - resolve conflicting SYNTAXes for nsTransactionMode
+
+ - add range for index nsTransactionID
+
+2002-02-25 03:23 dts12
+
+ * win32/: libsnmp/libsnmp.dsp , libsnmp_dll/libsnmp_dll.dsp:
+
+ Ensure the main library compiles and works under Windows.
+
+2002-02-25 03:19 dts12
+
+ * apps/: notification_log.h , snmptrapd.c:
+
+ Ensure snmptrapd compiles under Windows.
+
+2002-02-25 03:09 dts12
+
+ * snmplib/: oid_array.c , oid_stash.c , snmp-tc.c ,
+ ucd_compat.c:
+
+ Minor tweaks to keep Visual C++ happy.
+
+2002-02-25 02:57 dts12
+
+ * include/net-snmp/version.h:
+
+ Wrap with "extern C"
+
+2002-02-25 02:56 dts12
+
+ * include/net-snmp/library/cmu_compat.h:
+
+ Pander to CPP's incredibly fussy nature, and provide the correct header file name.
+
+2002-02-25 01:21 dts12
+
+ * agent/: snmpd.c (V4-2-patches.1), snmpd.c:
+
+ Specify the correct debug token for displaying the list of modules
+ (spotted by Brian Shaver)
+
+2002-02-22 10:56 hardaker
+
+ * local/mib2c:
+
+ support @foreach $var1 $var2 enums@
+
+2002-02-22 10:56 hardaker
+
+ * perl/AnyData_SNMP/snmpsh:
+
+ remove trailing ;'s from sql statements.
+
+2002-02-22 10:55 hardaker
+
+ * include/net-snmp/library/tools.h , snmplib/tools.c:
+
+ define netsnmp_strdup_and_null
+
+2002-02-22 10:53 hardaker
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ include utilities.
+
+2002-02-22 10:51 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ - don't loop again for secondary SET modes and cache information instead.
+ - various fixes.
+
+2002-02-22 10:49 hardaker
+
+ * agent/helpers/Makefile.in:
+
+ fix install directories for headers
+
+2002-02-22 10:49 hardaker
+
+ * net-snmp-config.in:
+
+ add --compile-subagent for automatted subagent compilation from
+ mibmodule .c files ;-)
+
+2002-02-22 09:27 dts12
+
+ * snmplib/: MSG00001.bin, winservice.mc (V4-2-patches.[1,1]),
+ MSG00001.bin , winservice.mc:
+
+ Add missing files for Windows service operation.
+
+2002-02-22 08:55 dts12
+
+ * agent/snmpd.c:
+
+ Just close the main session when shutting down under Windows,
+ not everything (so that it can still generate the shutdown trap).
+
+2002-02-22 08:40 dts12
+
+ * include/net-snmp/types.h ,
+ include/net-snmp/library/snmp_impl.h , snmplib/asn1.c ,
+ snmplib/mib.c , snmplib/parse.c , snmplib/snmp_api.c
+ , snmplib/snmp_enum.c , snmplib/snmpv3.c:
+
+ Tweaks required to get the library compiling under Windows VC++
+
+2002-02-22 08:37 dts12
+
+ * win32/: snmpsm_init.h ,
+ encode_keychange/encode_keychange.dsp ,
+ net-snmp/net-snmp-config.h , libagent/libagent.dsp ,
+ libhelpers/libhelpers.dsp , libsnmp/libsnmp.dsp ,
+ libsnmp_dll/libsnmp_dll.dsp , libucdmibs/libucdmibs.dsp
+ , snmpbulkget/snmpbulkget.dsp ,
+ snmpbulkwalk/snmpbulkwalk.dsp , snmpd/snmpd.dsp ,
+ snmpdelta/snmpdelta.dsp , snmpdf/snmpdf.dsp ,
+ snmpget/snmpget.dsp , snmpgetnext/snmpgetnext.dsp ,
+ snmpnetstat/snmpnetstat.dsp , snmpset/snmpset.dsp ,
+ snmpstatus/snmpstatus.dsp , snmptable/snmptable.dsp ,
+ snmptest/snmptest.dsp , snmptranslate/snmptranslate.dsp
+ , snmptrap/snmptrap.dsp , snmptrapd/snmptrapd.dsp
+ , snmpusm/snmpusm.dsp , snmpvacm/snmpvacm.dsp ,
+ snmpwalk/snmpwalk.dsp:
+
+ Provide Windows-specific versions of automatically-generated header files,
+ and add the new include structure to the project files.
+
+2002-02-22 07:24 dts12
+
+ * include/net-snmp/library/transform_oids.h:
+
+ Define standard OID lengths here (where they're available to any
+ file wanting to access the OID structures)
+
+2002-02-22 03:24 dts12
+
+ * snmplib/: snmp_parse_args.c , snmpv3.c:
+
+ Support ".... -3u {secName} ...." syntax
+ (in the normal getopt style - i.e. no need for surrounding quotes)
+
+ It should now be possible to switch to this as the recommended form
+ for SNMPv3 options - if that's what we want to do.
+ Qn: Do we want to?
+
+2002-02-21 08:39 dts12
+
+ * snmplib/snmpv3.c:
+
+ Support "-3u {secName}" syntax (*with* the quotes, unfortunately).
+ Now comes the fun bit.....
+
+2002-02-21 07:54 dts12
+
+ * win32/snmpd/snmpd.dsp:
+
+ Fix bogus structure comments in the snmpd project file.
+
+2002-02-21 07:30 jbpn
+
+ * agent/mibgroup/: notification/snmpNotifyTable.c ,
+ target/snmpTargetAddrEntry.c:
+
+ - drop inline (more trouble than it is worth)
+
+2002-02-21 05:00 dts12
+
+ * snmplib/: snmp_parse_args.c , snmpv3.c:
+
+ First pass at an SNMPv3 "combined-option" command-line flag (-3x).
+ (In *addition* to the current command-line flags, I hasten to add!)
+
+ Supports "... -3u{secName} ..." and "... -3u={secName} ..." syntax,
+ but not the separate "... -3u {secName} ..." style.
+
+ I haven't touched the documentation or usage message to mention this.
+
+2002-02-20 18:15 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ use for instead of continue for loops.
+
+2002-02-20 13:42 hardaker
+
+ * README.snmpv3 , agent/agent_read_config.c ,
+ agent/snmpd.c , apps/snmptrapd.c ,
+ include/net-snmp/agent/ds_agent.h:
+
+ - Add a --quit option (and a configuration token) so that you can now
+ create new users by simply calling snmpd as:
+ snmpd --createUser="myuser MD5 mypassword" --quit
+ - Change README.snmpv3 documentation to make use of this feature.
+
+2002-02-20 06:16 jbpn
+
+ * apps/Makefile.in , apps/snmptrapd.c , configure
+ , configure.in , agent/snmp_agent.c:
+
+ - add libwrap support to snmptrapd (untested)
+
+ - minor changes to snmpd libwrap support
+
+ - configure fixes for libwrap
+
+2002-02-20 03:07 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - use calloc instead of malloc to make sure buffer is initially
+ zero-terminated (in case of 0 varbinds). Bug #518700, noted by
+ Andreas Hartmann.
+
+2002-02-20 03:06 jbpn
+
+ * apps/snmpdelta.c:
+
+ - initialise some buffers, to avoid garbage printing problems, as
+ noted by Anonymous in bug #520220.
+
+2002-02-20 03:03 dts12
+
+ * apps/Makefile.in:
+
+ Clean up the object files as well
+
+2002-02-20 01:41 dts12
+
+ * man/.cvsignore:
+
+ Ignore the new crop of generated man pages.
+
+2002-02-20 01:37 dts12
+
+ * mibs/NET-SNMP-AGENT-MIB.txt:
+
+ Supply missing double-quote (oops)
+
+2002-02-19 04:01 dts12
+
+ * apps/snmptranslate.c:
+
+ Initialise the library internals *before* parsing the command line,
+ so that defaults can be overridden by command line options.
+ Qn: Should '_init_snmp' be invoked by 'snmp_parse_args' itself?
+
+2002-02-19 03:59 dts12
+
+ * snmplib/mib.c:
+
+ Make sure that multiple output format flags work in a consistent manner.
+ (i.e. the last one is used, rather than relying on internal ordering).
+
+2002-02-18 21:58 hardaker
+
+ * agent/mibgroup/: testdelayed.c , testhandler.c:
+
+ include stdlib.h
+
+2002-02-18 21:52 hardaker
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ fix includes
+
+2002-02-18 21:51 hardaker
+
+ * agent/helpers/table_iterator.c ,
+ include/net-snmp/agent/table_iterator.h:
+
+ - make capability to create data contexts from a loop context (less
+ mallocs when mallocs aren't otherwise avoidable).
+ - don't double free the data context pointer.
+
+2002-02-18 21:50 hardaker
+
+ * include/net-snmp/agent/net-snmp-agent-includes.h:
+
+ include all agent helpers.
+
+2002-02-18 21:49 hardaker
+
+ * include/net-snmp/agent/multiplexer.h:
+
+ protect include from double include
+
+2002-02-18 08:38 hardaker
+
+ * agent/mibgroup/mibincl.h:
+
+ fix include paths
+
+2002-02-18 02:35 dts12
+
+ * agent/Makefile.in , snmplib/Makefile.in:
+
+ Tweak the list of header files to be installed (thanks to Christoph Mammitzsch)
+
+2002-02-18 02:29 dts12
+
+ * agent/mibgroup/host/: hr_storage.c (V4-2-patches.7), hr_storage.c:
+
+ Remove a couple of unhelpful OSF definitions (thanks to Jeroen Ruigrok)
+
+2002-02-18 00:13 hardaker
+
+ * snmplib/: asn1.c (V4-2-patches.3), asn1.c:
+
+ don't build oid's with >128 length subids. (see bug #518855)
+
+2002-02-16 23:18 hardaker
+
+ * mibs/: NET-SNMP-MIB.txt , NET-SNMP-MONITOR-MIB.txt ,
+ NET-SNMP-SYSTEM-MIB.txt , NET-SNMP-TC.txt:
+
+ white space clean up. (AGENT-MIB not checked in due to other
+ incomplete changes).
+
+2002-02-16 00:17 hardaker
+
+ * NEWS , agent/snmpd.c , apps/snmptrapd.c ,
+ include/net-snmp/library/default_store.h ,
+ include/net-snmp/library/read_config.h , snmplib/read_config.c
+ , snmplib/snmp_parse_args.c:
+
+ - finish implementing snmp_config("my config line")
+ - was done before, but previously had to be called only after
+ configuration files had been read. Now can be called at any time.
+ - make all configuration options available as --longopts command line options.
+ - --something=value -> "something value"
+ - --something -> "something 1" (works for setting booleans to true)
+
+2002-02-16 00:02 hardaker
+
+ * agent/Makefile.in:
+
+ install mib_module_config.h
+
+2002-02-16 00:01 hardaker
+
+ * configure , configure.in:
+
+ fix rpm for 4.0.3 and above (or whenever it was that we now need librpmdb)
+
+2002-02-16 00:01 hardaker
+
+ * Makefile.in , Makefile.rules:
+
+ fix net-snmp-config install/clean/etc.
+
+2002-02-15 22:34 hardaker
+
+ * Makefile.in , Makefile.rules:
+
+ install all system and machine files, since they include each other
+
+2002-02-15 09:28 dts12
+
+ * agent/mibgroup/agent/nsTransactionTable.c ,
+ mibs/NET-SNMP-AGENT-MIB.txt , mibs/NET-SNMP-MIB.txt ,
+ mibs/NET-SNMP-MONITOR-MIB.txt , mibs/NET-SNMP-SYSTEM-MIB.txt
+ , mibs/NET-SNMP-TC.txt:
+
+ Skeleton framework for the Net-SNMP enterprise tree.
+ (incorporating the initial 'nsTransactionTable', but nothing else as yet)
+
+2002-02-15 09:10 dts12
+
+ * apps/snmptable.c , apps/snmptranslate.c ,
+ snmplib/snmp_parse_args.c:
+
+ Remove support for deprecated command-line options.
+
+2002-02-15 07:28 dts12
+
+ * include/net-snmp/library/winservice.h , snmplib/winservice.c
+ , agent/snmpd.c , snmplib/Makefile.in ,
+ snmplib/winservice.rc , win32/snmpd/snmpd.dsp:
+
+ Support for running as a Windows service.
+ (Supplied by Raju Krishnappa & Lathu Prabhu)
+
+2002-02-15 07:25 dts12
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ Stoke Wes' sense of paranoia by conceding without comment.
+ (What might Shield be plotting now......)
+
+2002-02-15 07:19 jbpn
+
+ * man/snmpusm.1.def:
+
+ - fix tiny formatting error
+
+2002-02-15 07:17 dts12
+
+ * mibs/Makefile.in:
+
+ Install NOTIFICATION-LOG-MIB (since it's one of the default load list!)
+
+2002-02-15 06:47 dts12
+
+ * snmplib/winservice.h:
+
+ file winservice.h was initially added on branch V4-2-patches.
+
+2002-02-15 06:47 dts12
+
+ * snmplib/winservice.rc:
+
+ file winservice.rc was initially added on branch V4-2-patches.
+
+2002-02-15 06:47 dts12
+
+ * snmplib/winservice.c:
+
+ file winservice.c was initially added on branch V4-2-patches.
+
+2002-02-15 06:08 dts12
+
+ * include/net-snmp/types.h:
+
+ Include the <sys/time.h> cascade, to pick up the definition of 'timeval'
+
+2002-02-15 04:29 jbpn
+
+ * agent/snmpd.c:
+
+ - minor change to bring usage message in line with manpage
+
+2002-02-15 03:29 dts12
+
+ * snmplib/snmp_parse_args.c:
+
+ Catch use of the transport and port options, and issue an appropriate
+ error message, describing use of the <hostname> parameter instead.
+
+2002-02-15 03:11 dts12
+
+ * snmplib/: mib.c , snmp_api.c:
+
+ Set the default output format *before* processing command line options,
+ rather than after. That's probably a bit more flexible:-)
+
+2002-02-15 02:37 dts12
+
+ * include/net-snmp/: config_api.h , definitions.h ,
+ mib_api.h , output_api.h , pdu_api.h , session_api.h
+ , snmpv3_api.h , types.h , utilities.h ,
+ varbind_api.h:
+
+ Remove 'net-snmp-config.h' from the main API header files.
+ This will have to be #included separately (either explicitly
+ or via the all-in-one 'net-snmp-includes.h' header)
+
+2002-02-15 02:31 dts12
+
+ * snmplib/Makefile.in:
+
+ Install the README to describe the status of <net-snmp/library> and <net-snmp> header files.
+
+2002-02-15 02:13 dts12
+
+ * man/Makefile.in , mibs/Makefile.in:
+
+ Install the {system,machine}/*.h header files as well.
+
+ Doing this via the 'man' & 'mibs' Makefiles is a gross hack,
+ and really needs to be handled more cleanly. But it's the
+ best I can come up with at the moment. Sorry - Dave.
+
+2002-02-15 01:59 dts12
+
+ * snmplib/Makefile.in , agent/Makefile.in:
+
+ Install the UCD-compatability headers as well.
+
+2002-02-15 01:57 dts12
+
+ * Makefile.rules:
+
+ Only install subdirectory stuff *once*. (Don't be so enthusiastic, Dave!)
+
+2002-02-15 01:31 dts12
+
+ * README.snmpv3:
+
+ Remove redundent '-CN' and '-CO' options from the example snmpusm command.
+ (as mentioned by Wes on the users mailing list 2002-02-13)
+ Qn: Does this need to be done on the V4-2-patches branch as well?
+
+2002-02-15 01:15 dts12
+
+ * include/net-snmp/utilities.h , include/net-snmp/version.h
+ , include/net-snmp/library/version.h ,
+ include/ucd-snmp/version.h , snmplib/snmp_parse_args.c ,
+ snmplib/snmp_version.c:
+
+ Restore 'version.h' as being a "top-level" header file.
+
+2002-02-15 01:13 dts12
+
+ * snmplib/Makefile.in:
+
+ Install the full set of library header files,
+ retaining the top-level vs library subdirectory split.
+
+2002-02-15 01:10 dts12
+
+ * configure , configure.in:
+
+ Look for transport-related header files in the correct location.
+
+2002-02-15 01:09 dts12
+
+ * Makefile.rules:
+
+ Ensure partial install targets recurse properly.
+
+2002-02-14 08:18 dts12
+
+ * testing/eval_tools.sh:
+
+ Look for mib_module_config.h in the correct location
+
+2002-02-14 08:06 hardaker
+
+ * man/Makefile.in:
+
+ fix man8 install definitions
+
+2002-02-14 07:48 dts12
+
+ * Makefile.rules , net-snmp-config.in:
+
+ Substitute values into 'net-snmp-config' properly, and don't 'make clean' it away.
+
+2002-02-14 07:22 dts12
+
+ * man/Makefile.in:
+
+ Tidy up after moving the library header files
+
+2002-02-14 07:14 dts12
+
+ * configure , configure.in:
+
+ Tidy up after moving the library header files (including Makefile dependencies)
+
+2002-02-14 07:10 dts12
+
+ * include/net-snmp/agent/agent_registry.h ,
+ snmplib/Makefile.depend , snmplib/default_store.c ,
+ snmplib/read_config.c , snmplib/snmp_debug.c ,
+ snmplib/snmp_logging.c , snmplib/snmp_parse_args.c ,
+ snmplib/system.c , snmplib/tools.c ,
+ agent/Makefile.depend , apps/Makefile.depend ,
+ apps/snmpbulkget.c , apps/snmpget.c , apps/snmpstatus.c
+ , apps/snmptranslate.c ,
+ apps/snmpnetstat/Makefile.depend , apps/snmpnetstat/main.c
+ , include/net-snmp/agent/snmp_agent.h ,
+ include/net-snmp/agent/snmp_vars.h ,
+ include/net-snmp/agent/table_array.h ,
+ include/net-snmp/library/data_list.h ,
+ include/net-snmp/library/oid_array.h ,
+ include/net-snmp/library/snmpAAL5PVCDomain.h ,
+ include/net-snmp/library/snmpCallbackDomain.h ,
+ include/net-snmp/library/snmpIPXDomain.h ,
+ include/net-snmp/library/snmpTCPDomain.h ,
+ include/net-snmp/library/snmpTCPIPv6Domain.h ,
+ include/net-snmp/library/snmpUDPDomain.h ,
+ include/net-snmp/library/snmpUDPIPv6Domain.h ,
+ include/net-snmp/library/snmpUnixDomain.h ,
+ include/net-snmp/library/snmp_transport.h , agent/agent_trap.c
+ , agent/helpers/Makefile.depend ,
+ agent/mibgroup/Makefile.depend , agent/mibgroup/host_res.h
+ , agent/mibgroup/mibII/vacm_vars.h ,
+ agent/mibgroup/snmpv3/usmUser.h:
+
+ Tidy up after moving the library header files (including Makefile dependencies)
+
+2002-02-14 07:08 dts12
+
+ * agent/helpers/Makefile.in:
+
+ Remove an extraneous space from CPPFLAGS
+
+2002-02-14 06:23 dts12
+
+ * include/net-snmp/: config_api.h , definitions.h ,
+ mib_api.h , net-snmp-includes.h , output_api.h ,
+ pdu_api.h , session_api.h , snmpv3_api.h , types.h
+ , utilities.h , varbind_api.h:
+
+ Separate out top-level "public API" library header files from the "internal"
+ library header files. These are still available for use by application
+ developers, but this split makes it clearer what may change in the future
+ and what can be relied upon to be stable.
+
+2002-02-14 06:19 dts12
+
+ * include/net-snmp/asn1.h , include/net-snmp/callback.h ,
+ include/net-snmp/cmu_compat.h , include/net-snmp/data_list.h
+ , include/net-snmp/default_store.h ,
+ include/net-snmp/getopt.h , include/net-snmp/int64.h ,
+ include/net-snmp/keytools.h , include/net-snmp/lcd_time.h
+ , include/net-snmp/libsnmp.h , include/net-snmp/md5.h
+ , include/net-snmp/mib.h , include/net-snmp/mt_support.h
+ , include/net-snmp/oid_array.h ,
+ include/net-snmp/oid_stash.h , include/net-snmp/parse.h ,
+ include/net-snmp/read_config.h , include/net-snmp/scapi.h
+ , include/net-snmp/snmp-tc.h , include/net-snmp/snmp.h
+ , include/net-snmp/snmpAAL5PVCDomain.h ,
+ include/net-snmp/snmpCallbackDomain.h ,
+ include/net-snmp/snmpIPXDomain.h ,
+ include/net-snmp/snmpTCPDomain.h ,
+ include/net-snmp/snmpTCPIPv6Domain.h ,
+ include/net-snmp/snmpUDPDomain.h ,
+ include/net-snmp/snmpUDPIPv6Domain.h ,
+ include/net-snmp/snmpUnixDomain.h ,
+ include/net-snmp/snmp_alarm.h , include/net-snmp/snmp_api.h
+ , include/net-snmp/snmp_client.h ,
+ include/net-snmp/snmp_debug.h , include/net-snmp/snmp_enum.h
+ , include/net-snmp/snmp_impl.h ,
+ include/net-snmp/snmp_locking.h ,
+ include/net-snmp/snmp_logging.h ,
+ include/net-snmp/snmp_parse_args.h ,
+ include/net-snmp/snmp_secmod.h ,
+ include/net-snmp/snmp_transport.h , include/net-snmp/snmpksm.h
+ , include/net-snmp/snmpusm.h , include/net-snmp/snmpv3.h
+ , include/net-snmp/system.h , include/net-snmp/tools.h
+ , include/net-snmp/transform_oids.h ,
+ include/net-snmp/ucd_compat.h , include/net-snmp/vacm.h ,
+ include/net-snmp/version.h , include/net-snmp/library/README
+ , include/net-snmp/library/asn1.h ,
+ include/net-snmp/library/callback.h ,
+ include/net-snmp/library/cmu_compat.h ,
+ include/net-snmp/library/data_list.h ,
+ include/net-snmp/library/default_store.h ,
+ include/net-snmp/library/getopt.h ,
+ include/net-snmp/library/int64.h ,
+ include/net-snmp/library/keytools.h ,
+ include/net-snmp/library/lcd_time.h ,
+ include/net-snmp/library/libsnmp.h ,
+ include/net-snmp/library/md5.h ,
+ include/net-snmp/library/mib.h ,
+ include/net-snmp/library/mt_support.h ,
+ include/net-snmp/library/oid_array.h ,
+ include/net-snmp/library/oid_stash.h ,
+ include/net-snmp/library/parse.h ,
+ include/net-snmp/library/read_config.h ,
+ include/net-snmp/library/scapi.h ,
+ include/net-snmp/library/snmp-tc.h ,
+ include/net-snmp/library/snmp.h ,
+ include/net-snmp/library/snmpAAL5PVCDomain.h ,
+ include/net-snmp/library/snmpCallbackDomain.h ,
+ include/net-snmp/library/snmpIPXDomain.h ,
+ include/net-snmp/library/snmpTCPDomain.h ,
+ include/net-snmp/library/snmpTCPIPv6Domain.h ,
+ include/net-snmp/library/snmpUDPDomain.h ,
+ include/net-snmp/library/snmpUDPIPv6Domain.h ,
+ include/net-snmp/library/snmpUnixDomain.h ,
+ include/net-snmp/library/snmp_alarm.h ,
+ include/net-snmp/library/snmp_api.h ,
+ include/net-snmp/library/snmp_client.h ,
+ include/net-snmp/library/snmp_debug.h ,
+ include/net-snmp/library/snmp_enum.h ,
+ include/net-snmp/library/snmp_impl.h ,
+ include/net-snmp/library/snmp_locking.h ,
+ include/net-snmp/library/snmp_logging.h ,
+ include/net-snmp/library/snmp_parse_args.h ,
+ include/net-snmp/library/snmp_secmod.h ,
+ include/net-snmp/library/snmp_transport.h ,
+ include/net-snmp/library/snmpksm.h ,
+ include/net-snmp/library/snmpusm.h ,
+ include/net-snmp/library/snmpv3.h ,
+ include/net-snmp/library/system.h ,
+ include/net-snmp/library/tools.h ,
+ include/net-snmp/library/transform_oids.h ,
+ include/net-snmp/library/ucd_compat.h ,
+ include/net-snmp/library/vacm.h ,
+ include/net-snmp/library/version.h , include/ucd-snmp/asn1.h
+ , include/ucd-snmp/callback.h ,
+ include/ucd-snmp/default_store.h , include/ucd-snmp/int64.h
+ , include/ucd-snmp/keytools.h , include/ucd-snmp/mib.h
+ , include/ucd-snmp/mibincl.h , include/ucd-snmp/parse.h
+ , include/ucd-snmp/read_config.h ,
+ include/ucd-snmp/scapi.h , include/ucd-snmp/snmp-tc.h ,
+ include/ucd-snmp/snmp.h , include/ucd-snmp/snmp_alarm.h ,
+ include/ucd-snmp/snmp_api.h , include/ucd-snmp/snmp_client.h
+ , include/ucd-snmp/snmp_debug.h ,
+ include/ucd-snmp/snmp_impl.h , include/ucd-snmp/snmp_logging.h
+ , include/ucd-snmp/snmp_parse_args.h ,
+ include/ucd-snmp/snmp_vars.h , include/ucd-snmp/snmpusm.h
+ , include/ucd-snmp/snmpv3.h , include/ucd-snmp/system.h
+ , include/ucd-snmp/tools.h ,
+ include/ucd-snmp/transform_oids.h , include/ucd-snmp/version.h
+ , snmplib/asn1.c , snmplib/callback.c ,
+ snmplib/data_list.c , snmplib/default_store.c ,
+ snmplib/int64.c , snmplib/keytools.c ,
+ snmplib/lcd_time.c , snmplib/md5.c , snmplib/mib.c
+ , snmplib/mt_support.c , snmplib/oid_array.c ,
+ snmplib/oid_stash.c , snmplib/parse.c ,
+ snmplib/read_config.c , snmplib/scapi.c ,
+ snmplib/snmp-tc.c , snmplib/snmp.c ,
+ snmplib/snmpAAL5PVCDomain.c , snmplib/snmpCallbackDomain.c
+ , snmplib/snmpIPXDomain.c , snmplib/snmpTCPDomain.c
+ , snmplib/snmpTCPIPv6Domain.c , snmplib/snmpUDPDomain.c
+ , snmplib/snmpUDPIPv6Domain.c ,
+ snmplib/snmpUnixDomain.c , snmplib/snmp_alarm.c ,
+ snmplib/snmp_api.c , snmplib/snmp_auth.c ,
+ snmplib/snmp_client.c , snmplib/snmp_debug.c ,
+ snmplib/snmp_enum.c , snmplib/snmp_logging.c ,
+ snmplib/snmp_parse_args.c , snmplib/snmp_secmod.c ,
+ snmplib/snmp_transport.c , snmplib/snmp_version.c ,
+ snmplib/snmpksm.c , snmplib/snmpusm.c , snmplib/snmpv3.c
+ , snmplib/system.c , snmplib/tools.c ,
+ snmplib/vacm.c:
+
+ Separate out top-level "public API" library header files from the "internal"
+ library header files. These are still available for use by application
+ developers, but this split makes it clearer what may change in the future
+ and what can be relied upon to be stable.
+
+2002-02-14 04:41 dts12
+
+ * include/net-snmp/definitions.h ,
+ include/net-snmp/net-snmp-config.h.in ,
+ include/net-snmp/output_api.h , include/net-snmp/snmp_impl.h
+ , include/net-snmp/snmpv3_api.h , snmplib/asn1.c ,
+ snmplib/callback.c , snmplib/default_store.c ,
+ snmplib/int64.c , snmplib/keytools.c ,
+ snmplib/lcd_time.c , snmplib/md5.c , snmplib/mib.c
+ , snmplib/oid_stash.c , snmplib/parse.c ,
+ snmplib/read_config.c , snmplib/scapi.c ,
+ snmplib/snmp-tc.c , snmplib/snmp.c ,
+ snmplib/snmpAAL5PVCDomain.c , snmplib/snmpCallbackDomain.c
+ , snmplib/snmpIPXDomain.c , snmplib/snmpTCPDomain.c
+ , snmplib/snmpTCPIPv6Domain.c , snmplib/snmpUDPDomain.c
+ , snmplib/snmpUDPIPv6Domain.c ,
+ snmplib/snmpUnixDomain.c , snmplib/snmp_alarm.c ,
+ snmplib/snmp_api.c , snmplib/snmp_auth.c ,
+ snmplib/snmp_client.c , snmplib/snmp_debug.c ,
+ snmplib/snmp_logging.c , snmplib/snmp_parse_args.c ,
+ snmplib/snmp_secmod.c , snmplib/snmp_transport.c ,
+ snmplib/snmpksm.c , snmplib/snmpusm.c , snmplib/snmpv3.c
+ , snmplib/system.c , snmplib/tools.c ,
+ snmplib/vacm.c:
+
+ First moves towards using the "public" API header files in the library
+ code as well (concentrating on output/config/utility header files).
+
+2002-02-14 03:17 dts12
+
+ * configure , configure.in:
+
+ Close a dangling "if" block. (oops!)
+
+2002-02-14 01:47 dts12
+
+ * apps/snmpnetstat/: if.c (V4-2-patches.4), if.c:
+
+ Check for running off the end of I/F table (patch from RedHat)
+
+2002-02-14 01:43 dts12
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ Latest RedHat rpm-related patch
+
+2002-02-14 01:39 dts12
+
+ * configure , configure.in:
+
+ Adopt RedHat's configure testing for RPM libraries
+
+2002-02-13 08:39 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ Make John trust his code
+
+2002-02-13 08:34 jbpn
+
+ * perl/SNMP/SNMP.xs:
+
+ - transport fixes (untested, still #if 0)
+
+2002-02-13 08:03 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ mark some John-to-do-sections
+
+2002-02-13 07:57 dts12
+
+ * include/net-snmp/default_store.h , man/snmpcmd.1.def ,
+ snmplib/mib.c:
+
+ Switch to using -OS style output by default, and drop the requirement
+ for full OIDs to start with '.', plus command-line options to restore
+ the original UCD-style behaviour.
+
+2002-02-13 07:36 dts12
+
+ * apps/snmptable.c:
+
+ Apply John's fix for bugs #489336 and #508146 (duplicate columns and
+ columns in wrong order) to the main branch as well.
+
+2002-02-12 16:40 hardaker
+
+ * snmplib/snmp_client.c:
+
+ const changes.
+
+2002-02-12 16:39 hardaker
+
+ * perl/: .cvsignore , ASN/.cvsignore , agent/.cvsignore
+ , default_store/.cvsignore:
+
+ add .cvsignore file.
+
+2002-02-12 16:38 hardaker
+
+ * include/net-snmp/agent/net-snmp-agent-includes.h:
+
+ add agent/agent_handler.h
+
+2002-02-12 16:38 hardaker
+
+ * include/net-snmp/snmp_client.h:
+
+ const additions.
+
+2002-02-12 16:37 hardaker
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ Add string.h
+
+2002-02-12 16:37 hardaker
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ add header.
+
+2002-02-12 16:37 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ fixes to reenable disman event stuff for 5.0 code. Not done the
+ "right" way, but it works.
+
+2002-02-12 16:36 hardaker
+
+ * agent/helpers/old_api.c:
+
+ - -Wall fixes
+
+2002-02-12 16:36 hardaker
+
+ * agent/helpers/instance.c:
+
+ - add stdlib.h
+ - remove unused variable.
+
+2002-02-12 16:35 hardaker
+
+ * agent/snmp_agent.c:
+
+ remove no longer used "dump_var" routine.
+
+2002-02-12 16:35 hardaker
+
+ * agent/agent_handler.c ,
+ include/net-snmp/agent/agent_handler.h:
+
+ const specific changes.
+
+2002-02-12 16:34 hardaker
+
+ * NEWS:
+
+ added new perl specific features.
+
+2002-02-12 16:34 hardaker
+
+ * Makefile.in:
+
+ .PHNOY mods
+
+2002-02-12 07:22 dts12
+
+ * agent/Makefile.depend , apps/Makefile.depend ,
+ apps/snmptranslate.c , apps/snmptrapd_handlers.c ,
+ apps/snmpnetstat/Makefile.depend ,
+ include/net-snmp/net-snmp-includes.h ,
+ include/net-snmp/logging_api.h , include/net-snmp/output_api.h:
+
+ Rename the logging & related output API header file, to better
+ reflect the scope of this API. (As suggested by Wes & John)
+
+2002-02-12 07:21 jbpn
+
+ * configure.in:
+
+ - amend fix to bug #516389 (ucd-snmp 4.2.3 libwrap support broken) to
+ actually add -lnsl to link parameters!
+
+2002-02-12 05:39 jbpn
+
+ * configure.in:
+
+ - fix bug #516389 (ucd-snmp 4.2.3 libwrap support broken) -- USE_LIBWRAP
+ was not being #defined in the case where -lnsl is needed in addition
+ to -lwrap.
+
+2002-02-11 15:56 hardaker
+
+ * agent/Makefile.in:
+
+ lib dependency fix for snmpd target
+
+2002-02-11 08:29 dts12
+
+ * include/net-snmp/cmu_compat.h , include/net-snmp/mib.h
+ , include/net-snmp/mib_api.h ,
+ include/net-snmp/net-snmp-includes.h ,
+ include/net-snmp/parse.h , include/net-snmp/session_api.h
+ , include/net-snmp/snmp.h , include/net-snmp/snmp_api.h
+ , include/net-snmp/snmp_impl.h ,
+ include/net-snmp/ucd_compat.h , snmplib/cmu_compat.c ,
+ snmplib/Makefile.in , snmplib/mib.c , snmplib/parse.c
+ , snmplib/snmp_api.c , snmplib/ucd_compat.c:
+
+ Extract CMU_COMPATABILITY code, and explicitly deprecated UCD code into separate files.
+
+2002-02-11 08:23 dts12
+
+ * snmplib/: snmp_parse_args.c (V4-2-patches.2), snmp_parse_args.c:
+
+ Use the 'ds_set_xxx' library routines, rather than the old 'snmp_set_xxx' calls
+
+2002-02-11 04:45 jbpn
+
+ * man/: snmp.conf.5.def , snmp_config.5.def ,
+ snmptrapd.conf.5.def:
+
+ minor spelling tweaks
+
+2002-02-11 04:27 jbpn
+
+ * man/: Makefile.in , default_store.3.top , mib_api.3
+ , mib_api.3.def , snmp_agent_api.3 ,
+ snmp_agent_api.3.def , snmp_alarm.3 , snmp_alarm.3.def
+ , snmp_api.3 , snmp_api.3.def , snmp_sess_api.3
+ , snmp_sess_api.3.def , snmp_trap_api.3 ,
+ snmp_trap_api.3.def , variables.5 , variables.5.def:
+
+ - generate the rest of the manual pages (to get version in footer)
+
+2002-02-08 15:56 hardaker
+
+ * win32/: config.h , mib_module_config.h ,
+ mib_module_inits.h , libsnmp/libsnmp.dsp ,
+ libsnmp_dll/libsnmp.def , libsnmp_dll/libsnmp_dll.dsp ,
+ libucdmibs/libucdmibs.dsp , snmpd/snmpd.dsp:
+
+ win32 specific portions of patch 503256
+
+2002-02-08 15:53 hardaker
+
+ * win32/libhelpers/libhelpers.dsp:
+
+ patch#503256: helpers library definition for win32
+
+2002-02-08 09:08 jbpn
+
+ * man/snmpd.conf.5.def:
+
+ - minor format tweakage
+
+2002-02-08 08:22 dts12
+
+ * man/: mib_api.3 , snmp_agent_api.3 , snmp_alarm.3
+ , snmp_api.3 , snmp_sess_api.3 , snmp_trap_api.3:
+
+ Reference the new header-files in section 3 man page synopses.
+
+2002-02-08 07:50 jbpn
+
+ * man/: mib_api.3 , read_config.3.def , snmp_agent_api.3
+ , snmp_config.5.def , snmp_trap_api.3 ,
+ snmpcmd.1.def , snmpconf.1.def , snmpd.conf.5.def ,
+ variables.5:
+
+ - more minor tweaks (ucd-snmp -> Net-SNMP etc.)
+
+2002-02-08 07:48 hardaker
+
+ * agent/Makefile.depend:
+
+ remove local modules from dependency list
+
+2002-02-08 07:45 dts12
+
+ * agent/: agent_handler.c , agent_index.c ,
+ agent_read_config.c , agent_registry.c , agent_trap.c
+ , auto_nlist.c , kernel.c , mib_modules.c ,
+ snmp_agent.c , snmp_vars.c , snmpd.c ,
+ helpers/bulk_to_next.c , helpers/debug_handler.c ,
+ helpers/instance.c , helpers/multiplexer.c ,
+ helpers/null.c , helpers/old_api.c , helpers/read_only.c
+ , helpers/serialize.c , helpers/table.c ,
+ helpers/table_array.c , helpers/table_data.c ,
+ helpers/table_dataset.c , helpers/table_iterator.c ,
+ mibgroup/header_complex.c , mibgroup/kernel_sunos5.c ,
+ mibgroup/testdelayed.c , mibgroup/testhandler.c ,
+ mibgroup/util_funcs.c , mibgroup/Rmon/agutil.c ,
+ mibgroup/Rmon/alarm.c , mibgroup/Rmon/event.c ,
+ mibgroup/Rmon/history.c , mibgroup/Rmon/rows.c ,
+ mibgroup/Rmon/statistics.c ,
+ mibgroup/agent/nsTransactionTable.c ,
+ mibgroup/agentx/agentx_config.c , mibgroup/agentx/client.c
+ , mibgroup/agentx/master.c ,
+ mibgroup/agentx/master_admin.c ,
+ mibgroup/agentx/master_request.c , mibgroup/agentx/protocol.c
+ , mibgroup/agentx/subagent.c ,
+ mibgroup/disman/mteObjectsTable.c ,
+ mibgroup/disman/mteTriggerBooleanTable.c ,
+ mibgroup/disman/mteTriggerDeltaTable.c ,
+ mibgroup/disman/mteTriggerExistenceTable.c ,
+ mibgroup/disman/mteTriggerTable.c ,
+ mibgroup/disman/mteTriggerThresholdTable.c ,
+ mibgroup/examples/example.c ,
+ mibgroup/examples/ucdDemoPublic.c ,
+ mibgroup/host/hr_filesys.c , mibgroup/host/hr_storage.c
+ , mibgroup/host/hr_swinst.c , mibgroup/host/hr_swrun.c
+ , mibgroup/host/hr_system.c , mibgroup/mibII/at.c
+ , mibgroup/mibII/icmp.c , mibgroup/mibII/interfaces.c
+ , mibgroup/mibII/ip.c , mibgroup/mibII/ipAddr.c ,
+ mibgroup/mibII/ipv6.c , mibgroup/mibII/kernel_linux.c ,
+ mibgroup/mibII/mta_sendmail.c , mibgroup/mibII/route_write.c
+ , mibgroup/mibII/snmp_mib.c ,
+ mibgroup/mibII/sysORTable.c , mibgroup/mibII/system_mib.c
+ , mibgroup/mibII/tcp.c , mibgroup/mibII/tcpTable.c
+ , mibgroup/mibII/udp.c , mibgroup/mibII/udpTable.c
+ , mibgroup/mibII/vacm_context.c ,
+ mibgroup/mibII/vacm_vars.c , mibgroup/mibII/var_route.c
+ , mibgroup/misc/dlmod.c , mibgroup/misc/ipfwacc.c
+ , mibgroup/notification/snmpNotifyFilterProfileTable.c ,
+ mibgroup/notification/snmpNotifyFilterTable.c ,
+ mibgroup/notification/snmpNotifyTable.c ,
+ mibgroup/smux/smux.c , mibgroup/smux/snmp_bgp.c ,
+ mibgroup/smux/snmp_ospf.c , mibgroup/smux/snmp_rip2.c ,
+ mibgroup/snmpv3/snmpEngine.c , mibgroup/snmpv3/snmpMPDStats.c
+ , mibgroup/snmpv3/usmStats.c ,
+ mibgroup/snmpv3/usmUser.c ,
+ mibgroup/target/snmpTargetAddrEntry.c ,
+ mibgroup/target/snmpTargetParamsEntry.c ,
+ mibgroup/target/target.c , mibgroup/target/target_counters.c
+ , mibgroup/tunnel/tunnel.c , mibgroup/ucd-snmp/disk.c
+ , mibgroup/ucd-snmp/diskio.c , mibgroup/ucd-snmp/dlmod.c
+ , mibgroup/ucd-snmp/errormib.c ,
+ mibgroup/ucd-snmp/extensible.c , mibgroup/ucd-snmp/file.c
+ , mibgroup/ucd-snmp/hpux.c ,
+ mibgroup/ucd-snmp/lmSensors.c , mibgroup/ucd-snmp/loadave.c
+ , mibgroup/ucd-snmp/logmatch.c ,
+ mibgroup/ucd-snmp/memory.c , mibgroup/ucd-snmp/memory_dynix.c
+ , mibgroup/ucd-snmp/memory_freebsd2.c ,
+ mibgroup/ucd-snmp/memory_netbsd1.c ,
+ mibgroup/ucd-snmp/memory_solaris2.c ,
+ mibgroup/ucd-snmp/pass.c , mibgroup/ucd-snmp/pass_persist.c
+ , mibgroup/ucd-snmp/proc.c , mibgroup/ucd-snmp/proxy.c
+ , mibgroup/ucd-snmp/registry.c ,
+ mibgroup/ucd-snmp/versioninfo.c , mibgroup/ucd-snmp/vmstat.c
+ , mibgroup/ucd-snmp/vmstat_bsdi4.c ,
+ mibgroup/ucd-snmp/vmstat_dynix.c ,
+ mibgroup/ucd-snmp/vmstat_freebsd2.c ,
+ mibgroup/ucd-snmp/vmstat_netbsd1.c ,
+ mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ Use the new 'net-snmp-includes' single-include header files,
+ in place of the (uninstalled) 'mibincl.h'.
+ Wheeeee......
+
+2002-02-08 07:17 jbpn
+
+ * man/: snmp.conf.5.def , snmp_agent_api.3 ,
+ snmp_alarm.3 , snmp_api.3 , snmp_config.5.def ,
+ snmp_sess_api.3 , snmpd.1.def , snmpd.conf.5.def ,
+ snmptrapd.conf.5.def:
+
+ - some editing to make style consistent, add some missing options,
+ change ucd-snmp to Net-SNMP and things like that.
+
+2002-02-08 07:14 jbpn
+
+ * man/Makefile.in:
+
+ - generate man pages at compile time
+
+2002-02-08 07:14 jbpn
+
+ * man/: snmpbulkget.1 , snmpbulkwalk.1 ,
+ snmpbulkget.1.def , snmpbulkwalk.1.def , snmpcmd.1
+ , snmpcmd.1.def , snmpconf.1 , snmpconf.1.def
+ , snmpget.1 , snmpget.1.def , snmpgetnext.1 ,
+ snmpgetnext.1.def , snmpset.1 , snmpset.1.def ,
+ snmpstatus.1 , snmpstatus.1.def , snmptable.1 ,
+ snmptable.1.def , snmptest.1 , snmptest.1.def ,
+ snmptranslate.1 , snmptranslate.1.def , snmptrap.1
+ , snmptrap.1.def , snmpusm.1 , snmpusm.1.def ,
+ snmpwalk.1 , snmpwalk.1.def , snmptrapd.8 ,
+ snmptrapd.8.def:
+
+ - rename man pages which are now generated at compile time in order
+ to pick up the version (which gets put in the footer).
+
+ - also some editing to make style consistent, add some missing options,
+ change ucd-snmp to Net-SNMP and things like that.
+
+2002-02-08 06:48 dts12
+
+ * agent/mibgroup/: mibJJ.h , mibJJ/icmp.c , mibJJ/icmp.h
+ , mibJJ/if_fields.h , mibJJ/interfaces.c ,
+ mibJJ/interfaces.h , mibJJ/ip.c , mibJJ/ip.h ,
+ mibJJ/ipAddr.c , mibJJ/ipAddr.h , mibJJ/ipMedia.c ,
+ mibJJ/ipMedia.h , mibJJ/ipRoute.c , mibJJ/ipRoute.h
+ , mibJJ/ipv6.c , mibJJ/ipv6.h , mibJJ/kernel_hpux.c
+ , mibJJ/kernel_hpux.h , mibJJ/kernel_linux.c ,
+ mibJJ/kernel_linux.h , mibJJ/snmp_mib.c ,
+ mibJJ/snmp_mib.h , mibJJ/sysORTable.c ,
+ mibJJ/sysORTable.h , mibJJ/system_mib.c ,
+ mibJJ/system_mib.h , mibJJ/tcp.c , mibJJ/tcp.h ,
+ mibJJ/tcpTable.c , mibJJ/tcpTable.h , mibJJ/udp.c ,
+ mibJJ/udp.h , mibJJ/udpTable.c , mibJJ/udpTable.h ,
+ mibJJ/vacm_vars.c , mibJJ/vacm_vars.h:
+
+ Remove the attempted 'mibII' re-write.
+ If we want to tidy up mibII, it makes more sense to use the new agent APIs.
+
+2002-02-08 06:45 dts12
+
+ * include/net-snmp/: net-snmp-includes.h ,
+ agent/net-snmp-agent-includes.h:
+
+ Bring single-include header files closer in line with the existing "mibincl.h" file
+
+2002-02-08 06:09 dts12
+
+ * agent/mibgroup/mibII/: sysORTable.h (V4-2-patches.1),
+ sysORTable.h:
+
+ Ensure the null versions of the two REGISTER macros swallow their parameters.
+
+2002-02-08 04:36 dts12
+
+ * agent/snmp_agent.c:
+
+ Implement the missing outgoing error statistics counters
+ (patch #510194 from Latha Prabhu)
+
+2002-02-08 02:42 dts12
+
+ * agent/mibgroup/: host/hr_storage.c, ucd-snmp/memory.c
+ (V4-2-patches.[6,3]), host/hr_storage.c , ucd-snmp/memory.c:
+
+ Added support for memory and swap entries in hrStorageTable for Solaris
+ (from patch #505498 - thanks to Johannes Schmidt-Fischer)
+
+2002-02-08 02:07 dts12
+
+ * agent/mibgroup/mibII/ip.c:
+
+ Consolidate identical MIB object entries (WIN32/non-WIN32)
+
+2002-02-08 00:50 jbpn
+
+ * man/README:
+
+ - remove chronically dated unhelpful README
+
+2002-02-07 13:33 hardaker
+
+ * Makefile.in , Makefile.rules , configure ,
+ configure.in , makefileindepend.pl ,
+ agent/Makefile.depend , agent/Makefile.in ,
+ agent/agent_trap.c , agent/mib_modules.c ,
+ agent/snmp_agent.c , agent/snmpd.c ,
+ agent/helpers/Makefile.depend , agent/helpers/Makefile.in
+ , agent/mibgroup/Makefile.depend ,
+ agent/mibgroup/Makefile.in , agent/mibgroup/mibincl.h ,
+ agent/mibgroup/agentx/agentx_config.c ,
+ agent/mibgroup/agentx/subagent.c , apps/Makefile.depend
+ , apps/Makefile.in , apps/snmpnetstat/Makefile.depend
+ , apps/snmpnetstat/Makefile.in , local/Makefile.in
+ , man/Makefile.in , mibs/Makefile.in ,
+ snmplib/Makefile.depend , snmplib/Makefile.in:
+
+ remake make's Makefile's to make better making
+
+2002-02-07 13:31 hardaker
+
+ * perl/SNMP/Makefile.PL:
+
+ check local pathes
+
+2002-02-07 12:54 dts12
+
+ * agent/snmp_agent.c:
+
+ Ensure agent returns the correct error codes for UNDO and COMMIT failures.
+
+2002-02-07 11:18 hardaker
+
+ * perl/SNMP/: Makefile.PL , SNMP.xs , t/startagent.pl:
+
+ attempt at porting Joe's SNMP module to net-snmp.
+ It compiles, but only some of the tests succeed.
+
+2002-02-07 10:09 jbpn
+
+ * man/: default_store.3.top , mib_api.3 ,
+ read_config.3.def , snmp.conf.5.def , snmp_agent_api.3
+ , snmp_alarm.3 , snmp_api.3 , snmp_config.5.def
+ , snmp_sess_api.3 , snmp_trap_api.3 , snmpbulkget.1
+ , snmpbulkwalk.1 , snmpconf.1 , snmpd.conf.5.def
+ , snmpdelta.1 , snmpdf.1 , snmpget.1 ,
+ snmpgetnext.1 , snmpnetstat.1 , snmpset.1 ,
+ snmpstatus.1 , snmptable.1 , snmptest.1 ,
+ snmptranslate.1 , snmptrap.1 , snmptrapd.conf.5.def
+ , snmpusm.1 , snmpwalk.1 , variables.5:
+
+ - add Net-SNMP in header of all man pages
+
+2002-02-07 09:52 jbpn
+
+ * man/snmpcmd.1:
+
+ - update style to match snmpd and snmptrapd man pages
+
+2002-02-07 08:15 jbpn
+
+ * man/snmptrapd.8:
+
+ - fix speeling mistake
+
+2002-02-07 08:00 jbpn
+
+ * man/snmptrapd.8:
+
+ - bring up to date with snmptrapd
+
+2002-02-07 07:28 dts12
+
+ * README.hpux11 , acconfig.h ,
+ agent/mibgroup/ucd_snmp.h , agent/mibgroup/host/hr_network.c
+ , agent/mibgroup/host/hr_storage.c ,
+ agent/mibgroup/host/hr_swinst.c ,
+ agent/mibgroup/host/hr_swrun.c , agent/mibgroup/mibII/at.c
+ , agent/mibgroup/mibII/icmp.c ,
+ agent/mibgroup/mibII/interfaces.c ,
+ agent/mibgroup/mibII/interfaces.h , agent/mibgroup/mibII/ip.c
+ , agent/mibgroup/mibII/ipAddr.c ,
+ agent/mibgroup/mibII/tcp.c , agent/mibgroup/mibII/tcpTable.c
+ , agent/mibgroup/mibII/tcpTable.h ,
+ agent/mibgroup/mibII/udp.c , agent/mibgroup/mibII/udpTable.c
+ , agent/mibgroup/mibII/var_route.c ,
+ agent/mibgroup/mibII/var_route.h ,
+ agent/mibgroup/ucd-snmp/memory.c ,
+ include/net-snmp/net-snmp-config.h.in ,
+ include/net-snmp/system/hpux.h , mibs/UCD-SNMP-MIB.txt:
+
+ Support for HP-UX 11, courtesy of Johannes Schmidt-Fischer.
+
+2002-02-07 06:30 jbpn
+
+ * man/snmpd.1.def:
+
+ - alphabetise options
+
+ - bring man page in line with new positional arguments listening
+ address specification and add section describing that
+
+ - put Net-SNMP in header
+
+2002-02-06 10:06 jbpn
+
+ * include/net-snmp/scapi.h:
+
+ - fix bug noted by Niels
+
+2002-02-06 09:25 jbpn
+
+ * apps/: encode_keychange.c , snmpusm.c:
+
+ - minor tweaks due to change in definition of USM OIDs.
+
+2002-02-06 09:17 jbpn
+
+ * include/net-snmp/snmpusm.h , include/net-snmp/snmpv3.h
+ , include/net-snmp/transform_oids.h ,
+ snmplib/snmp_parse_args.c , snmplib/snmpusm.c ,
+ snmplib/snmpv3.c:
+
+ - move USM OID definitions into snmpusm.c, make them const
+
+ - consequent increase in const-ness in some function prototypes
+
+2002-02-06 09:12 hardaker
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ remove internal note about v3 api, which should be public
+
+2002-02-06 09:12 hardaker
+
+ * include/net-snmp/snmpusm_init.h:
+
+ removed unneeded file
+
+2002-02-06 09:06 jbpn
+
+ * include/net-snmp/keytools.h , include/net-snmp/scapi.h
+ , snmplib/keytools.c , snmplib/scapi.c:
+
+ - add const-ness for transform type args
+
+2002-02-06 09:01 jbpn
+
+ * include/net-snmp/mib.h , include/net-snmp/snmp_debug.h
+ , snmplib/mib.c , snmplib/snmp_debug.c:
+
+ - add some const-ness for OID args (mainly so that debugmsg_oid takes
+ const).
+
+2002-02-06 08:44 dts12
+
+ * agent/agent_read_config.c , agent/mibgroup/ucd_snmp.h
+ , agent/mibgroup/host/hr_filesys.c ,
+ agent/mibgroup/host/hr_storage.c ,
+ agent/mibgroup/ucd-snmp/loadave.c ,
+ agent/mibgroup/ucd-snmp/memory_dynix.c ,
+ agent/mibgroup/ucd-snmp/memory_dynix.h ,
+ agent/mibgroup/ucd-snmp/vmstat_dynix.c ,
+ agent/mibgroup/ucd-snmp/vmstat_dynix.h ,
+ include/net-snmp/system/dynix.h ,
+ agent/mibgroup/host/hr_swrun.c , agent/mibgroup/mibII/at.c
+ , agent/mibgroup/mibII/interfaces.c ,
+ agent/mibgroup/mibII/route_write.c ,
+ agent/mibgroup/mibII/var_route.c , snmplib/snmp_api.c:
+
+ Support for Dynix/PTX 4.4, courtesy of Patrick Hess.
+
+2002-02-06 07:41 jbpn
+
+ * include/net-snmp/snmp_api.h , snmplib/snmp_api.c:
+
+ - make first argument of snmp_dup_objid() const.
+
+ - better handle NULL values in snmp_dup_objid().
+
+2002-02-06 07:09 dts12
+
+ * FAQ , man/snmp_trap_api.3:
+
+ Clarify the applicability of 'snmp_trap_api(3)' routines to AgentX subagents.
+
+2002-02-06 05:58 dts12
+
+ * apps/: encode_keychange.c , notification_log.c ,
+ snmpbulkget.c , snmpbulkwalk.c , snmpdelta.c ,
+ snmpdf.c , snmpget.c , snmpgetnext.c , snmpset.c
+ , snmpstatus.c , snmptable.c , snmptest.c ,
+ snmptranslate.c , snmptrap.c , snmptrapd.c ,
+ snmptrapd_handlers.c , snmptrapd_log.c , snmpusm.c
+ , snmpvacm.c , snmpwalk.c , snmpnetstat/if.c
+ , snmpnetstat/inet.c , snmpnetstat/inet6.c ,
+ snmpnetstat/main.c , snmpnetstat/route.c:
+
+ Applications amended to use the new-style library header structure.
+ (In most cases, simply including the single "full API" header file)
+
+2002-02-06 05:55 dts12
+
+ * include/net-snmp/: asn1.h , config_api.h ,
+ definitions.h , logging_api.h , mib_api.h ,
+ net-snmp-includes.h , pdu_api.h , session_api.h ,
+ snmpv3_api.h , types.h , utilities.h , varbind_api.h:
+
+ Framework for new library header file organisation, with eight main groups
+ of API routines. Currently these still refer to the UCD-style style header
+ files for the actual function declarations.
+
+2002-02-06 05:31 jbpn
+
+ * man/Makefile.in:
+
+ - replace use of $< with explicit filename, since non-GNU makes seem
+ to barf on it
+
+2002-02-06 03:31 dts12
+
+ * Makefile.in:
+
+ Fix incorrect directory specification in 'make clean'
+
+2002-02-06 03:18 dts12
+
+ * acconfig.h , include/net-snmp/net-snmp-config.h.in:
+
+ Protect the project config file against multiple inclusion.
+
+2002-02-06 03:07 jbpn
+
+ * agent/auto_nlist.c:
+
+ - remove #include "../snmplib/system.h" which no longer exists and
+ is apparently unnecessary anyway.
+
+2002-02-06 02:51 jbpn
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - remove #include "../../snmplib/system.h" which no longer exists
+ and is apparently unnecessary anyway.
+
+2002-02-05 11:44 hardaker
+
+ * COPYING (V4-2-patches.7), COPYING:
+
+ copyright year update for NAI and Cambridge
+
+2002-02-05 09:54 hardaker
+
+ * include/net-snmp/net-snmp-config.h.in:
+
+ perl fixes
+
+2002-02-05 09:54 hardaker
+
+ * agent/agent_registry.c , agent/mibgroup/Rmon/alarm.c ,
+ agent/mibgroup/smux/smux.c , include/net-snmp/snmp_api.h
+ , snmplib/snmp_api.c:
+
+ Patch from Harrie Hazewinkel to move the oidtree_compare function to
+ the main library.
+
+2002-02-05 09:52 hardaker
+
+ * configure , configure.in , agent/Makefile.in:
+
+ perl build fixes.
+
+2002-02-05 07:19 hardaker
+
+ * agent/Makefile.in:
+
+ opps. Removed forced perl embedding
+
+2002-02-04 16:22 hardaker
+
+ * include/net-snmp/net-snmp-config.h:
+
+ this file shouldn't be checked in
+
+2002-02-04 16:22 hardaker
+
+ * Makefile.in , acconfig.h , configure ,
+ configure.in , agent/Makefile.in , agent/snmp_perl.c
+ , agent/snmp_perl.pl , agent/snmp_vars.c:
+
+ - Support for embedding perl subroutines into the agent to be called
+ as handlers.
+ - New configure options:
+ --with-perl-modules attempts to build contained modules (poorly currently).
+ --enable-embedded-perl actually specifies to do perl embedding
+ within the agent.
+
+2002-02-04 16:16 hardaker
+
+ * perl/: ASN/ASN.pm , ASN/ASN.xs , ASN/Changes ,
+ ASN/MANIFEST , ASN/Makefile.PL , ASN/test.pl ,
+ agent/Changes , agent/MANIFEST , agent/Makefile.PL ,
+ agent/agent.pm , agent/agent.xs , agent/test.pl ,
+ agent/typemap , default_store/Changes ,
+ default_store/MANIFEST , default_store/Makefile.PL ,
+ default_store/default_store.pm ,
+ default_store/default_store.xs , default_store/test.pl ,
+ default_store/typemap:
+
+ Beginnings of new perl modules needed to implement an SNMP agent (or
+ agentx subagent) inside perl.
+ - not complete yet.
+ - may change.
+ - but works.
+
+2002-02-04 04:39 jbpn
+
+ * snmplib/mib.c:
+
+ - correct processing for timeticks when DS_LIB_NUMERIC_TIMETICKS is
+ set (corrects bug #511793, reported by Anonymous).
+
+2002-02-01 01:50 dts12
+
+ * FAQ:
+
+ Clarify the procedure for compiling with 'cc' rather than 'gcc'
+
+2002-01-31 14:58 hardaker
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ s/snmplib\///;
+
+2002-01-31 06:55 hardaker
+
+ * Makefile.in , agent/helpers/Makefile.in:
+
+ fix make clean as reported by Bradley Bozarth.
+
+2002-01-30 08:06 dts12
+
+ * agent/mibgroup/ucd-snmp/versioninfo.c:
+
+ Bring MIB variable versionTag into line with the new <net-snmp/version.h> usage
+
+2002-01-29 17:53 hardaker
+
+ * version.h , agent/snmpd.c ,
+ agent/mibgroup/versiontag , apps/snmptranslate.c ,
+ apps/snmptrapd.c , apps/snmpnetstat/main.c ,
+ include/net-snmp/version.h , include/ucd-snmp/version.h ,
+ snmplib/Makefile.in , snmplib/snmp_parse_args.c ,
+ snmplib/snmp_version.c:
+
+ Moved versioning information from version.h to:
+ - snmplib/snmp_version.c:
+ - define netsnmp_get_version();
+ - create a const char *NetSnmpVersionInfo
+ - include/net-snmp/version.h:
+ - extern the above char *
+ - prototype the function
+ - include/ucd-snmp/version.h:
+ - create a static variable (the old way) and set it to NetSnmpVersionInfo
+
+2002-01-29 16:09 hardaker
+
+ * testing/: eval_tools.sh , tests/T049snmpv3inform ,
+ tests/T050snmpv3trap , tests/T051snmpv2ctrap ,
+ tests/T052snmpv2cinform , tests/T053agentv1trap ,
+ tests/T054agentv2ctrap , tests/T055agentv1mintrap ,
+ tests/T056agentv2cmintrap , tests/T058agentauthtrap ,
+ tests/T113agentxtrap:
+
+ trap test fixes so the majority of the tests now work.
+
+2002-01-29 16:08 hardaker
+
+ * Makefile.in:
+
+ don't generate ucd-snmp-config.h any longer.
+
+2002-01-29 15:23 hardaker
+
+ * acconfig.h , configure , configure.in ,
+ include/net-snmp/net-snmp-config.h ,
+ include/net-snmp/net-snmp-config.h.in ,
+ include/net-snmp/machine/generic.h ,
+ include/net-snmp/system/aix.h , include/net-snmp/system/bsd.h
+ , include/net-snmp/system/bsdi.h ,
+ include/net-snmp/system/bsdi3.h ,
+ include/net-snmp/system/bsdi4.h ,
+ include/net-snmp/system/cygwin.h ,
+ include/net-snmp/system/darwin.h ,
+ include/net-snmp/system/freebsd.h ,
+ include/net-snmp/system/freebsd2.h ,
+ include/net-snmp/system/freebsd3.h ,
+ include/net-snmp/system/freebsd4.h ,
+ include/net-snmp/system/generic.h ,
+ include/net-snmp/system/hpux.h ,
+ include/net-snmp/system/irix.h ,
+ include/net-snmp/system/linux.h ,
+ include/net-snmp/system/mips.h ,
+ include/net-snmp/system/netbsd.h ,
+ include/net-snmp/system/openbsd.h ,
+ include/net-snmp/system/solaris.h ,
+ include/net-snmp/system/solaris2.6.h ,
+ include/net-snmp/system/solaris2.7.h ,
+ include/net-snmp/system/solaris2.8.h ,
+ include/net-snmp/system/sunos.h ,
+ include/net-snmp/system/svr5.h ,
+ include/net-snmp/system/sysv.h ,
+ include/net-snmp/system/ultrix4.h:
+
+ moved s/*.h files to include/net-snmp/system/*.h
+ moved m/generic.h files to include/net-snmp/machine/generic.h
+
+2002-01-29 09:24 hardaker
+
+ * apps/snmptrapd.c:
+
+ fix -c argument parsing.
+
+2002-01-29 09:10 hardaker
+
+ * testing/eval_tools.sh:
+
+ reference include/net-snmp/net-snmp-config.h instead of just config.h
+
+2002-01-29 09:05 hardaker
+
+ * snmplib/snmpusm.c:
+
+ attempt to fix the unknown engineid/unknown user problems once and for all.
+
+2002-01-28 21:11 hardaker
+
+ * configure , configure.in:
+
+ whoops. Missed some .h file checks in configure. Thanks Robert.
+
+2002-01-28 21:03 hardaker
+
+ * local/convertcode:
+
+ minor fix.
+
+2002-01-28 21:02 hardaker
+
+ * local/convertcode:
+
+ added code convert script for ucd-snmp -> net-snmp header conversion
+
+2002-01-28 20:59 hardaker
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c ,
+ agent/mibgroup/target/snmpTargetParamsEntry.c ,
+ agent/mibgroup/target/target.c ,
+ agent/mibgroup/target/target_counters.c ,
+ agent/mibgroup/tunnel/tunnel.c ,
+ agent/mibgroup/ucd-snmp/disk.c ,
+ agent/mibgroup/ucd-snmp/dlmod.c ,
+ agent/mibgroup/ucd-snmp/extensible.c ,
+ agent/mibgroup/ucd-snmp/loadave.c ,
+ agent/mibgroup/ucd-snmp/logmatch.c ,
+ agent/mibgroup/ucd-snmp/memory.c ,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c ,
+ agent/mibgroup/ucd-snmp/pass.c ,
+ agent/mibgroup/ucd-snmp/pass_persist.c ,
+ agent/mibgroup/ucd-snmp/proc.c ,
+ agent/mibgroup/ucd-snmp/proxy.c ,
+ agent/mibgroup/ucd-snmp/registry.c ,
+ agent/mibgroup/ucd-snmp/versioninfo.c ,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c ,
+ apps/encode_keychange.c , apps/notification_log.c ,
+ apps/snmpbulkget.c , apps/snmpbulkwalk.c ,
+ apps/snmpdelta.c , apps/snmpdf.c , apps/snmpget.c
+ , apps/snmpgetnext.c , apps/snmpset.c ,
+ apps/snmpstatus.c , apps/snmptable.c , apps/snmptest.c
+ , apps/snmptranslate.c , apps/snmptrap.c ,
+ apps/snmptrapd.c , apps/snmptrapd_handlers.c ,
+ apps/snmptrapd_log.c , apps/snmpusm.c , apps/snmpvacm.c
+ , apps/snmpwalk.c , apps/snmpnetstat/Makefile.in
+ , apps/snmpnetstat/if.c , apps/snmpnetstat/inet.c
+ , apps/snmpnetstat/inet6.c , apps/snmpnetstat/main.c
+ , apps/snmpnetstat/route.c , include/net-snmp/asn1.h
+ , include/net-snmp/callback.h ,
+ include/net-snmp/data_list.h ,
+ include/net-snmp/default_store.h , include/net-snmp/getopt.h
+ , include/net-snmp/int64.h , include/net-snmp/keytools.h
+ , include/net-snmp/lcd_time.h ,
+ include/net-snmp/libsnmp.h , include/net-snmp/md5.h ,
+ include/net-snmp/mib.h , include/net-snmp/mt_support.h ,
+ include/net-snmp/net-snmp-config.h ,
+ include/net-snmp/oid_array.h , include/net-snmp/oid_stash.h
+ , include/net-snmp/parse.h ,
+ include/net-snmp/read_config.h , include/net-snmp/scapi.h
+ , include/net-snmp/snmp-tc.h , include/net-snmp/snmp.h
+ , include/net-snmp/snmpAAL5PVCDomain.h ,
+ include/net-snmp/snmpCallbackDomain.h ,
+ include/net-snmp/snmpIPXDomain.h ,
+ include/net-snmp/snmpTCPDomain.h ,
+ include/net-snmp/snmpTCPIPv6Domain.h ,
+ include/net-snmp/snmpUDPDomain.h ,
+ include/net-snmp/snmpUDPIPv6Domain.h ,
+ include/net-snmp/snmpUnixDomain.h ,
+ include/net-snmp/snmp_alarm.h , include/net-snmp/snmp_api.h
+ , include/net-snmp/snmp_client.h ,
+ include/net-snmp/snmp_debug.h , include/net-snmp/snmp_enum.h
+ , include/net-snmp/snmp_impl.h ,
+ include/net-snmp/snmp_locking.h ,
+ include/net-snmp/snmp_logging.h ,
+ include/net-snmp/snmp_parse_args.h ,
+ include/net-snmp/snmp_secmod.h ,
+ include/net-snmp/snmp_transport.h , include/net-snmp/snmpksm.h
+ , include/net-snmp/snmpusm.h ,
+ include/net-snmp/snmpusm_init.h , include/net-snmp/snmpv3.h
+ , include/net-snmp/system.h , include/net-snmp/tools.h
+ , include/net-snmp/transform_oids.h ,
+ include/net-snmp/vacm.h , include/net-snmp/agent/snmp_agent.h
+ , man/Makefile.in , snmplib/Makefile.in ,
+ snmplib/asn1.c , snmplib/asn1.h , snmplib/callback.c
+ , snmplib/callback.h , snmplib/data_list.c ,
+ snmplib/data_list.h , snmplib/default_store.c ,
+ snmplib/default_store.h , snmplib/getopt.h ,
+ snmplib/int64.c , snmplib/int64.h , snmplib/keytools.c
+ , snmplib/keytools.h , snmplib/lcd_time.c ,
+ snmplib/lcd_time.h , snmplib/libsnmp.h , snmplib/md5.c
+ , snmplib/md5.h , snmplib/mib.c , snmplib/mib.h
+ , snmplib/mt_support.c , snmplib/mt_support.h ,
+ snmplib/oid_array.c , snmplib/oid_array.h ,
+ snmplib/oid_stash.c , snmplib/oid_stash.h ,
+ snmplib/parse.c , snmplib/parse.h ,
+ snmplib/read_config.c , snmplib/read_config.h ,
+ snmplib/scapi.c , snmplib/scapi.h , snmplib/snmp-tc.c
+ , snmplib/snmp-tc.h , snmplib/snmp.c ,
+ snmplib/snmp.h , snmplib/snmpAAL5PVCDomain.c ,
+ snmplib/snmpAAL5PVCDomain.h , snmplib/snmpCallbackDomain.c
+ , snmplib/snmpCallbackDomain.h , snmplib/snmpIPXDomain.c
+ , snmplib/snmpIPXDomain.h , snmplib/snmpTCPDomain.c
+ , snmplib/snmpTCPDomain.h , snmplib/snmpTCPIPv6Domain.c
+ , snmplib/snmpTCPIPv6Domain.h , snmplib/snmpUDPDomain.c
+ , snmplib/snmpUDPDomain.h , snmplib/snmpUDPIPv6Domain.c
+ , snmplib/snmpUDPIPv6Domain.h , snmplib/snmpUnixDomain.c
+ , snmplib/snmpUnixDomain.h , snmplib/snmp_alarm.c
+ , snmplib/snmp_alarm.h , snmplib/snmp_api.c ,
+ snmplib/snmp_api.h , snmplib/snmp_auth.c ,
+ snmplib/snmp_client.c , snmplib/snmp_client.h ,
+ snmplib/snmp_debug.c , snmplib/snmp_debug.h ,
+ snmplib/snmp_enum.c , snmplib/snmp_enum.h ,
+ snmplib/snmp_impl.h , snmplib/snmp_logging.c ,
+ snmplib/snmp_logging.h , snmplib/snmp_parse_args.c ,
+ snmplib/snmp_parse_args.h , snmplib/snmp_secmod.c ,
+ snmplib/snmp_secmod.h , snmplib/snmp_transport.c ,
+ snmplib/snmp_transport.h , snmplib/snmpksm.c ,
+ snmplib/snmpksm.h , snmplib/snmpusm.c ,
+ snmplib/snmpusm.h , snmplib/snmpv3.c , snmplib/snmpv3.h
+ , snmplib/system.c , snmplib/system.h ,
+ snmplib/tools.c , snmplib/tools.h ,
+ snmplib/transform_oids.h , snmplib/vacm.c ,
+ snmplib/vacm.h , testing/RUNTESTS ,
+ testing/eval_tools.sh , include/ucd-snmp/asn1.h ,
+ include/ucd-snmp/callback.h , include/ucd-snmp/default_store.h
+ , include/ucd-snmp/int64.h , include/ucd-snmp/keytools.h
+ , include/ucd-snmp/mib.h , include/ucd-snmp/mibincl.h
+ , include/ucd-snmp/parse.h ,
+ include/ucd-snmp/read_config.h , include/ucd-snmp/scapi.h
+ , include/ucd-snmp/snmp-tc.h , include/ucd-snmp/snmp.h
+ , include/ucd-snmp/snmp_alarm.h ,
+ include/ucd-snmp/snmp_api.h , include/ucd-snmp/snmp_client.h
+ , include/ucd-snmp/snmp_debug.h ,
+ include/ucd-snmp/snmp_impl.h , include/ucd-snmp/snmp_logging.h
+ , include/ucd-snmp/snmp_parse_args.h ,
+ include/ucd-snmp/snmp_vars.h , include/ucd-snmp/snmpusm.h
+ , include/ucd-snmp/snmpv3.h , include/ucd-snmp/system.h
+ , include/ucd-snmp/tools.h ,
+ include/ucd-snmp/transform_oids.h ,
+ include/ucd-snmp/util_funcs.h:
+
+ Major file moving and editing of include directives.
+ - essentially adds up to:
+ - mv snmplib/*.h include/net-snmp/
+ - local/convertcode `find . -name \*.c \*.h`
+
+2002-01-28 20:54 hardaker
+
+ * agent/: agent_handler.c , agent_index.c ,
+ agent_read_config.c , agent_registry.c , agent_trap.c
+ , auto_nlist.c , kernel.c , mib_modules.c ,
+ snmp_agent.c , snmp_vars.c , snmpd.c ,
+ helpers/bulk_to_next.c , helpers/debug_handler.c ,
+ helpers/instance.c , helpers/multiplexer.c ,
+ helpers/null.c , helpers/old_api.c , helpers/read_only.c
+ , helpers/serialize.c , helpers/table.c ,
+ helpers/table_array.c , helpers/table_dataset.c ,
+ helpers/table_iterator.c , mibgroup/host_res.h ,
+ mibgroup/kernel_sunos5.c , mibgroup/mibincl.h ,
+ mibgroup/testdelayed.c , mibgroup/testhandler.c ,
+ mibgroup/util_funcs.c , mibgroup/Rmon/alarm.c ,
+ mibgroup/Rmon/event.c , mibgroup/Rmon/history.c ,
+ mibgroup/Rmon/rows.c , mibgroup/agentx/agentx_config.c ,
+ mibgroup/agentx/client.c , mibgroup/agentx/master.c ,
+ mibgroup/agentx/master_admin.c ,
+ mibgroup/agentx/master_request.c , mibgroup/agentx/protocol.c
+ , mibgroup/agentx/subagent.c ,
+ mibgroup/disman/mteObjectsTable.c ,
+ mibgroup/disman/mteTriggerBooleanTable.c ,
+ mibgroup/disman/mteTriggerDeltaTable.c ,
+ mibgroup/disman/mteTriggerExistenceTable.c ,
+ mibgroup/disman/mteTriggerTable.c ,
+ mibgroup/disman/mteTriggerThresholdTable.c ,
+ mibgroup/examples/ucdDemoPublic.c , mibgroup/host/hr_disk.c
+ , mibgroup/host/hr_filesys.c ,
+ mibgroup/host/hr_storage.c , mibgroup/host/hr_swinst.c
+ , mibgroup/host/hr_swrun.c , mibgroup/host/hr_system.c
+ , mibgroup/mibII/at.c , mibgroup/mibII/icmp.c ,
+ mibgroup/mibII/interfaces.c , mibgroup/mibII/ip.c ,
+ mibgroup/mibII/ipAddr.c , mibgroup/mibII/ipv6.c ,
+ mibgroup/mibII/kernel_linux.c , mibgroup/mibII/route_write.c
+ , mibgroup/mibII/snmp_mib.c ,
+ mibgroup/mibII/sysORTable.c , mibgroup/mibII/system_mib.c
+ , mibgroup/mibII/tcp.c , mibgroup/mibII/tcpTable.c
+ , mibgroup/mibII/udp.c , mibgroup/mibII/udpTable.c
+ , mibgroup/mibII/vacm_context.c ,
+ mibgroup/mibII/vacm_vars.c , mibgroup/mibII/vacm_vars.h
+ , mibgroup/mibII/var_route.c , mibgroup/mibJJ/icmp.c
+ , mibgroup/mibJJ/interfaces.c , mibgroup/mibJJ/ip.c
+ , mibgroup/mibJJ/ipAddr.c , mibgroup/mibJJ/ipMedia.c
+ , mibgroup/mibJJ/ipv6.c , mibgroup/mibJJ/kernel_linux.c
+ , mibgroup/mibJJ/snmp_mib.c , mibgroup/mibJJ/sysORTable.c
+ , mibgroup/mibJJ/system_mib.c , mibgroup/mibJJ/tcp.c
+ , mibgroup/mibJJ/tcpTable.c , mibgroup/mibJJ/udp.c ,
+ mibgroup/mibJJ/udpTable.c , mibgroup/mibJJ/vacm_vars.c ,
+ mibgroup/misc/dlmod.c ,
+ mibgroup/notification/snmpNotifyFilterProfileTable.c ,
+ mibgroup/notification/snmpNotifyFilterTable.c ,
+ mibgroup/notification/snmpNotifyTable.c ,
+ mibgroup/smux/smux.c , mibgroup/smux/snmp_bgp.c ,
+ mibgroup/smux/snmp_ospf.c , mibgroup/smux/snmp_rip2.c ,
+ mibgroup/snmpv3/snmpEngine.c , mibgroup/snmpv3/usmUser.c
+ , mibgroup/snmpv3/usmUser.h:
+
+ Major file moving and editing of include directives.
+ - essentially adds up to:
+ - mv snmplib/*.h include/net-snmp/
+ - local/convertcode `find . -name \*.c \*.h`
+
+2002-01-28 19:42 hardaker
+
+ * include/ucd-snmp/ucd-snmp-config.h:
+
+ remove UCD_COMPAT flag and DEFINE IT instead
+
+2002-01-28 19:41 hardaker
+
+ * include/ucd-snmp/ucd-snmp-config.h:
+
+ remove UCD_COMPAT flag and define it instead
+
+2002-01-25 11:29 hardaker
+
+ * snmplib/mib.c:
+
+ - parse_one_oid_index:
+ - use an unsigned int for length's pulled from the oid.
+ - Make sure they're always < 128
+
+2002-01-25 09:12 jbpn
+
+ * agent/mibgroup/snmpv3/usmUser.c:
+
+ - closer adherence to state machines described in RFC 2574
+
+2002-01-25 09:10 jbpn
+
+ * snmplib/snmpusm.c:
+
+ - cause usmDecryptionError reports to be sent in a couple of extra
+ cases: bad salt (length != 8) and length of encrypted data not a
+ multiple of 8 octets (per RFC 2574).
+
+2002-01-25 09:04 jbpn
+
+ * agent/snmp_agent.c:
+
+ - for unknown message types, increment snmpInASNParseErrs and fail
+ at the post-parse stage.
+
+ - for notification types, increment snmpUnknownPDUHandlers and bail
+ out early.
+
+2002-01-25 09:01 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - for unhandled messages (e.g. RESPONSE messages sent to agents),
+ increment the snmpUnknownPDUHandlers counter.
+
+ - try to free securityStateRefs when post-parse fails.
+
+2002-01-25 06:26 jbpn
+
+ * agent/mibgroup/mibII/: vacm_vars.c (V4-2-patches.6), vacm_vars.c:
+
+ - fix minor problem with storageType (always okay to set to current
+ value).
+
+ - don't reset some variables to old value unless we actually set
+ them in the first place!
+
+2002-01-25 05:00 jbpn
+
+ * agent/helpers/table.c:
+
+ - don't print out debugging info in a further case where it has been
+ free()d.
+
+ - set the exception noSuchInstance rather than error noSuchName when
+ we have the incorrect number of indices.
+
+2002-01-25 04:54 dts12
+
+ * snmplib/README.newlib:
+
+ file README.newlib was initially added on branch NEW-LIBRARY-API.
+
+2002-01-25 04:49 jbpn
+
+ * agent/helpers/table.c:
+
+ - move debugging output to before where (potentially) the data it is
+ trying to print gets free()d.
+
+2002-01-25 04:40 jbpn
+
+ * agent/snmp_agent.c:
+
+ - keep asp->vbcount correct in create_subtree_cache() if we dump
+ varbinds in the GETNEXT case because numvarbinds > non-repeaters.
+ Failing to do this will cause problems later when you iterate over
+ 0 .. asp->vbcount - 1 in reassign_requests().
+
+2002-01-24 15:11 rstory
+
+ * include/net-snmp/agent/table.h:
+
+ update macros to put parens around parameters when used, in case a parameter is an expression, which might muck about with operator precedence rules and cause unexpected and undesirable behavior.
+
+2002-01-24 11:07 rstory
+
+ * local/mib2c.array-user.conf:
+
+ try to find & handle external indexes; use new style net-snmp includes; add
+ row_copy; use context types & casts in parameters instead of generic types
+ recast inside method
+
+2002-01-24 06:03 jbpn
+
+ * snmplib/: read_config.c (V4-2-patches.3), read_config.c:
+
+ - avoid format string nasties in read_config_store() when writing to
+ files (exposed e.g. by the persistent sysName.0 stuff -- try
+ snmpset host sysName.0 s "%08x" -- oops)
+
+2002-01-24 04:34 jbpn
+
+ * snmplib/snmpusm.c:
+
+ - don't automatically accept a msgUserName of "" when processing
+ incoming messages.
+
+2002-01-24 04:30 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - bigger buffer for msgAuthoritativeEngineID field since it is not
+ limited to 32 bytes like SnmpEngineTC. Really this needs to be
+ allocated by the security module but for now we'll just make it
+ twice as big.
+
+2002-01-24 03:19 dts12
+
+ * agent/mibgroup/host/hr_swrun.c , snmplib/snmp-tc.c:
+
+ AIX support for the Host Resources module.
+ (Thanks to Andy Hood)
+
+2002-01-23 08:28 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - set viewType to the DEFVAL included(1) for new rows
+
+2002-01-23 07:40 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - secModel of 0 is a parse error in HeaderData
+
+2002-01-23 07:23 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - be careful to free securityStateRef in a couple of error cases in
+ snmpv3_parse -- fixes memory leaks when malformed PDUs are
+ received.
+
+2002-01-22 19:49 rstory
+
+ * snmplib/: snmp_api.c , snmp_api.h:
+
+ chg api for snmp_oid_ncompare, don't implement it vi snmp_oid_compare
+
+2002-01-22 19:46 rstory
+
+ * snmplib/: oid_array.c , oid_array.h:
+
+ add Get_oid_data_count(); add subset support
+
+2002-01-22 19:44 rstory
+
+ * snmplib/: mib.c , mib.h:
+
+ add netsnmp_str2oid()
+
+2002-01-22 19:41 rstory
+
+ * include/net-snmp/agent/table_array.h:
+
+ add subset function
+
+2002-01-22 19:40 rstory
+
+ * agent/helpers/table_array.c:
+
+ add subset function; add preliminary locking code; add ta_check_row_status
+
+2002-01-22 06:33 jbpn
+
+ * agent/mibgroup/mibII/: vacm_vars.c (V4-2-patches.4), vacm_vars.c:
+
+ - fix bug just introduced where setting an existing row's status to
+ createAndGo(4) or createAndWait(5) would delete the row.
+
+2002-01-22 04:58 jbpn
+
+ * snmplib/snmpusm.c:
+
+ - cause a parse error if we receive UsmSecurityParameters with a
+ msgUserName that is illegally long.
+
+2002-01-22 03:10 jbpn
+
+ * agent/mibgroup/target/snmpTargetParamsEntry.c:
+
+ - oops, left old code in #if 0 branch AGAIN. I am getting into bad
+ habits!
+
+2002-01-22 03:08 jbpn
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ - fix memory leaks in row creation/destruction
+
+ - more aggressive validity checking of snmpNotifyTag, snmpNotifyType
+ and snmpNotifyStorageType.
+
+ - passes 6.5.1.0 -- 6.5.8.3
+
+2002-01-22 01:47 jbpn
+
+ * agent/mibgroup/target/: snmpTargetAddrEntry.c ,
+ snmpTargetParamsEntry.c , snmpTargetParamsEntry.h:
+
+ - correct state machines for snmpTargetParamsTable
+
+2002-01-21 23:48 jbpn
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c:
+
+ - tidy things up a bit (had left some old code sitting if #if 0
+ branch).
+
+ - remember to close (target->sess) when we move a target to
+ notInService(2).
+
+2002-01-21 11:04 jbpn
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c:
+
+ - correct state machines for snmpTargetAddrTable
+
+2002-01-21 06:47 jbpn
+
+ * agent/mibgroup/target/: snmpTargetAddrEntry.c ,
+ snmpTargetAddrEntry.h:
+
+ - implement snmpTargetSpinLock object
+
+2002-01-18 09:19 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - correct state machine for vacmViewTreeFamilyTable. Passes all the
+ relevant Silvercreek VACM tetst (5.4.0.1 -- 5.4.9.7 inclusive).
+
+2002-01-18 08:49 jbpn
+
+ * snmplib/: vacm.c , vacm.h:
+
+ - add a switch to vacm_getViewEntry() to allow the mask entries
+ to be ignore (which is what you want when you are just using this
+ function to look up an entry in the table in order to write some new
+ value to one of the columnar objects).
+
+2002-01-18 06:09 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - correct state machine for vacmAccessTable. Passes all the relevant
+ Silvercreek VACM tetst (5.3.0 -- 5.3.9.7 inclusive).
+
+2002-01-18 04:11 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - correct state machine for vacmSecurityToGroupTable (i.e. don't
+ just do everything in the COMMIT phase). Passes all the relevant
+ Silvercreek VACM tetst (5.2.0 -- 5.2.9.7 inclusive).
+
+2002-01-18 04:08 jbpn
+
+ * agent/snmp_agent.c:
+
+ - don't overwrite an existing error status after COMMIT or UNDO
+ phases with commitFailed or undoFailed (but do translate error
+ returns from those phases into those errors when we don't have an
+ existing error status).
+
+2002-01-17 06:57 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - handle illegal values of msgID correctly (by dropping the packet
+ and incrementing snmpInASNParseErrs)
+
+2002-01-17 06:38 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - handle illegal values of msgMaxSize correctly (by dropping the
+ packet and incrementing snmpInASNParseErrs)
+
+2002-01-15 08:17 rstory
+
+ * include/net-snmp/net-snmp-includes.h:
+
+ top level include which includes useful snmplib headers
+
+2002-01-15 08:15 rstory
+
+ * include/ucd-snmp/: agent_index.h , agent_read_config.h
+ , agent_registry.h , agent_trap.h , asn1.h ,
+ auto_nlist.h , callback.h , default_store.h ,
+ ds_agent.h , header_complex.h , int64.h , keytools.h
+ , mib.h , mib_module_config.h , mibincl.h ,
+ parse.h , read_config.h , scapi.h , snmp-tc.h ,
+ snmp.h , snmp_agent.h , snmp_alarm.h , snmp_api.h
+ , snmp_client.h , snmp_debug.h , snmp_impl.h ,
+ snmp_logging.h , snmp_parse_args.h , snmp_vars.h ,
+ snmpusm.h , snmpv3.h , struct.h , system.h ,
+ tools.h , transform_oids.h , ucd-snmp-agent-includes.h
+ , ucd-snmp-config.h , ucd-snmp-includes.h ,
+ util_funcs.h , var_struct.h , version.h:
+
+ create 4.x headers that are wrappers pointing to new headers
+
+2002-01-14 15:08 rstory
+
+ * include/net-snmp/agent/table_array.h:
+
+ add UserRowAction and void pointer
+
+2002-01-14 13:41 hardaker
+
+ * agent/: mibgroup/ucd-snmp/lmSensors.c , Makefile.in:
+
+ -> net-snmp/agent/net-snmp-agent-includes.h
+
+2002-01-14 13:40 hardaker
+
+ * include/net-snmp/agent/ucd-snmp-agent-includes.h:
+
+ removed
+
+2002-01-14 13:29 rstory
+
+ * include/net-snmp/agent/net-snmp-agent-includes.h:
+
+ copy ucd-snmp-agent-includes.h and update to net-snmp use new agent dir
+
+2002-01-14 08:04 hardaker
+
+ * agent/Makefile.in , agent/agent_callbacks.h ,
+ agent/agent_handler.c , agent/agent_handler.h ,
+ agent/agent_index.c , agent/agent_index.h ,
+ agent/agent_read_config.c , agent/agent_read_config.h ,
+ agent/agent_registry.c , agent/agent_registry.h ,
+ agent/agent_trap.c , agent/agent_trap.h ,
+ agent/auto_nlist.c , agent/auto_nlist.h ,
+ agent/ds_agent.h , agent/kernel.c , agent/mib_modules.c
+ , agent/mib_modules.h , agent/snmp_agent.c ,
+ agent/snmp_agent.h , agent/snmp_vars.c ,
+ agent/snmp_vars.h , agent/snmpd.c ,
+ agent/ucd-snmp-agent-includes.h , agent/var_struct.h ,
+ agent/helpers/Makefile.in , agent/helpers/bulk_to_next.c
+ , agent/helpers/debug_handler.c ,
+ agent/helpers/instance.c , agent/helpers/multiplexer.c ,
+ agent/helpers/null.c , agent/helpers/old_api.c ,
+ agent/helpers/read_only.c , agent/helpers/serialize.c ,
+ agent/helpers/table.c , agent/helpers/table_array.c ,
+ agent/helpers/table_iterator.c , agent/mibgroup/host_res.h
+ , agent/mibgroup/mibincl.h ,
+ agent/mibgroup/testdelayed.c , agent/mibgroup/testhandler.c
+ , agent/mibgroup/agentx/agentx_config.c ,
+ agent/mibgroup/agentx/client.c ,
+ agent/mibgroup/agentx/master.c ,
+ agent/mibgroup/agentx/master_admin.c ,
+ agent/mibgroup/agentx/master_request.c ,
+ agent/mibgroup/agentx/subagent.c ,
+ agent/mibgroup/disman/mteTriggerTable.c ,
+ agent/mibgroup/examples/example.c ,
+ agent/mibgroup/examples/ucdDemoPublic.c ,
+ agent/mibgroup/host/hr_disk.c , agent/mibgroup/host/hr_proc.c
+ , agent/mibgroup/host/hr_storage.c ,
+ agent/mibgroup/host/hr_swrun.c ,
+ agent/mibgroup/host/hr_system.c , agent/mibgroup/mibII/at.c
+ , agent/mibgroup/mibII/icmp.c ,
+ agent/mibgroup/mibII/interfaces.c , agent/mibgroup/mibII/ip.c
+ , agent/mibgroup/mibII/ipAddr.c ,
+ agent/mibgroup/mibII/ipv6.c ,
+ agent/mibgroup/mibII/route_write.c ,
+ agent/mibgroup/mibII/sysORTable.c ,
+ agent/mibgroup/mibII/system_mib.c ,
+ agent/mibgroup/mibII/tcp.c , agent/mibgroup/mibII/tcpTable.c
+ , agent/mibgroup/mibII/udp.c ,
+ agent/mibgroup/mibII/udpTable.c ,
+ agent/mibgroup/mibII/vacm_context.c ,
+ agent/mibgroup/mibII/vacm_vars.c ,
+ agent/mibgroup/mibII/var_route.c ,
+ agent/mibgroup/mibJJ/icmp.c ,
+ agent/mibgroup/mibJJ/interfaces.c , agent/mibgroup/mibJJ/ip.c
+ , agent/mibgroup/mibJJ/ipAddr.c ,
+ agent/mibgroup/mibJJ/ipMedia.c ,
+ agent/mibgroup/mibJJ/ipRoute.c , agent/mibgroup/mibJJ/ipv6.c
+ , agent/mibgroup/mibJJ/sysORTable.c ,
+ agent/mibgroup/mibJJ/system_mib.c , agent/mibgroup/mibJJ/tcp.c
+ , agent/mibgroup/mibJJ/tcpTable.c ,
+ agent/mibgroup/mibJJ/udp.c , agent/mibgroup/mibJJ/udpTable.c
+ , agent/mibgroup/mibJJ/vacm_vars.c ,
+ agent/mibgroup/misc/dlmod.c ,
+ agent/mibgroup/notification/snmpNotifyTable.c ,
+ agent/mibgroup/smux/smux.c , agent/mibgroup/smux/snmp_bgp.c
+ , agent/mibgroup/smux/snmp_ospf.c ,
+ agent/mibgroup/smux/snmp_rip2.c ,
+ agent/mibgroup/snmpv3/usmUser.c ,
+ agent/mibgroup/target/target_counters.c ,
+ agent/mibgroup/tunnel/tunnel.c ,
+ agent/mibgroup/ucd-snmp/disk.c ,
+ agent/mibgroup/ucd-snmp/diskio.c ,
+ agent/mibgroup/ucd-snmp/dlmod.c ,
+ agent/mibgroup/ucd-snmp/errormib.c ,
+ agent/mibgroup/ucd-snmp/extensible.c ,
+ agent/mibgroup/ucd-snmp/file.c ,
+ agent/mibgroup/ucd-snmp/loadave.c ,
+ agent/mibgroup/ucd-snmp/logmatch.c ,
+ agent/mibgroup/ucd-snmp/memory.c ,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c ,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c ,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c ,
+ agent/mibgroup/ucd-snmp/pass.c ,
+ agent/mibgroup/ucd-snmp/proc.c ,
+ agent/mibgroup/ucd-snmp/versioninfo.c ,
+ agent/mibgroup/ucd-snmp/vmstat.c ,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c ,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c ,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c ,
+ apps/notification_log.h , apps/snmptrapd.c ,
+ include/net-snmp/agent/agent_callbacks.h ,
+ include/net-snmp/agent/agent_handler.h ,
+ include/net-snmp/agent/agent_index.h ,
+ include/net-snmp/agent/agent_read_config.h ,
+ include/net-snmp/agent/agent_registry.h ,
+ include/net-snmp/agent/agent_trap.h ,
+ include/net-snmp/agent/auto_nlist.h ,
+ include/net-snmp/agent/ds_agent.h ,
+ include/net-snmp/agent/mib_modules.h ,
+ include/net-snmp/agent/snmp_agent.h ,
+ include/net-snmp/agent/snmp_vars.h ,
+ include/net-snmp/agent/ucd-snmp-agent-includes.h ,
+ include/net-snmp/agent/var_struct.h:
+
+ moved the /agent installed headers to ../include/net-snmp/agent
+
+2002-01-13 09:22 hardaker
+
+ * agent/Makefile.in:
+
+ add a couple more install headers.
+
+2002-01-11 14:18 hardaker
+
+ * apps/: Makefile.in , notification_log.c:
+
+ Move all agent/helpers/*.h files to include/net-snmp/agent/ and change
+ references.
+
+2002-01-11 14:12 hardaker
+
+ * agent/Makefile.in , agent/agent_handler.c ,
+ agent/agent_index.c , agent/agent_read_config.c ,
+ agent/agent_registry.c , agent/mib_modules.c ,
+ agent/snmp_vars.c , agent/snmpd.c ,
+ agent/helpers/all_helpers.h , agent/helpers/bulk_to_next.c
+ , agent/helpers/bulk_to_next.h ,
+ agent/helpers/debug_handler.c , agent/helpers/debug_handler.h
+ , agent/helpers/instance.c , agent/helpers/instance.h
+ , agent/helpers/multiplexer.c ,
+ agent/helpers/multiplexer.h , agent/helpers/null.c ,
+ agent/helpers/null.h , agent/helpers/old_api.c ,
+ agent/helpers/old_api.h , agent/helpers/read_only.c ,
+ agent/helpers/read_only.h , agent/helpers/serialize.c ,
+ agent/helpers/serialize.h , agent/helpers/set_helper.h ,
+ agent/helpers/table.c , agent/helpers/table.h ,
+ agent/helpers/table_array.c , agent/helpers/table_array.h
+ , agent/helpers/table_data.c , agent/helpers/table_data.h
+ , agent/helpers/table_dataset.c ,
+ agent/helpers/table_dataset.h , agent/helpers/table_iterator.c
+ , agent/helpers/table_iterator.h ,
+ agent/mibgroup/Makefile.in , agent/mibgroup/testdelayed.c
+ , agent/mibgroup/testhandler.c ,
+ agent/mibgroup/agent/nsTransactionTable.c ,
+ agent/mibgroup/mibII/vacm_context.c ,
+ agent/mibgroup/target/target_counters.c ,
+ include/net-snmp/agent/all_helpers.h ,
+ include/net-snmp/agent/bulk_to_next.h ,
+ include/net-snmp/agent/debug_handler.h ,
+ include/net-snmp/agent/instance.h ,
+ include/net-snmp/agent/multiplexer.h ,
+ include/net-snmp/agent/null.h ,
+ include/net-snmp/agent/old_api.h ,
+ include/net-snmp/agent/read_only.h ,
+ include/net-snmp/agent/serialize.h ,
+ include/net-snmp/agent/set_helper.h ,
+ include/net-snmp/agent/table.h ,
+ include/net-snmp/agent/table_array.h ,
+ include/net-snmp/agent/table_data.h ,
+ include/net-snmp/agent/table_dataset.h ,
+ include/net-snmp/agent/table_iterator.h:
+
+ Move all agent/helpers/*.h files to include/net-snmp/agent/ and change
+ references.
+
+2002-01-11 08:41 hardaker
+
+ * agent/Makefile.in , agent/helpers/Makefile.in ,
+ agent/mibgroup/Makefile.in , apps/Makefile.in ,
+ snmplib/Makefile.in:
+
+ - Add -I$(top_srcdir)/include to include path.
+ - Rename 3 agent libraries from libucd* -> libnetsnmp*
+
+2002-01-11 07:58 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - don't use while(x-- >= 0) loops for new unsigned index components
+
+2002-01-11 05:27 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - be careful about signedess of index components in tables
+
+2002-01-10 13:12 nba
+
+ * configure , configure.in:
+
+ Create the include directory when building outside source directory
+
+2002-01-10 08:20 jbpn
+
+ * agent/mibgroup/mibII/sysORTable.c:
+
+ - use an unsigned long loop variable in var_sysORTable() to avoid
+ incorrect lexi-ordering when doing requests like GETNEXT
+ sysORDescr.4294967295.
+
+ - minor debugging output changes
+
+2002-01-10 07:32 jbpn
+
+ * agent/snmp_agent.c:
+
+ - fix minor memory leak in reassign_requests()
+
+2002-01-10 07:21 jbpn
+
+ * agent/snmp_agent.c:
+
+ - set type for unhandled GET requests in handle_pdu() to be
+ noSuchInstance rather than noSuchObject (noSuchObject exceptions
+ are detected and explicitly set earlier).
+
+2002-01-10 05:52 jbpn
+
+ * agent/helpers/old_api.c:
+
+ - correct typo that meant error returns from old-api write methods
+ were ignored.
+
+2002-01-10 05:04 jbpn
+
+ * snmplib/snmp_api.h:
+
+ - change value of STAT_TARGET_STATS_END so that mibII/snmp_mib.c can
+ return values of mandatory objects snmpSilentDrops and
+ snmpProxyDrops.
+
+2002-01-09 08:50 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - make unknown/illegal varbind types in v1/v2c PDUs cause
+ snmpInASNParseErrs to be incremented.
+
+2002-01-09 07:55 jbpn
+
+ * agent/helpers/debug_handler.c:
+
+ - fix memory leak
+
+2002-01-09 07:32 jbpn
+
+ * apps/snmpbulkget.c:
+
+ - bring app-specific options in line with snmpbulkwalk (-C rather
+ than -B)
+
+2002-01-09 07:31 jbpn
+
+ * apps/snmpbulkwalk.c:
+
+ - formatting change to usage message
+
+2002-01-09 06:35 jbpn
+
+ * agent/helpers/table_iterator.c:
+
+ - fix minor memory leak
+
+2002-01-08 08:55 jbpn
+
+ * apps/snmpbulkwalk.c:
+
+ - add options from snmpwalk
+
+ - allow non-repeaters and max-repeaters to be set
+
+ - change default value of max-repeaters to a lower value to avoid
+ timeouts with slower agents
+
+2002-01-08 08:17 jbpn
+
+ * agent/snmp_agent.c:
+
+ - don't try to malloc() a zero-length buffer, in case some malloc()s
+ complain.
+
+2002-01-08 08:15 jbpn
+
+ * agent/snmp_agent.c:
+
+ - hopefully final GETBULK fix -- passes all SilverCreek's GETBULK
+ tests (incl. negative non-repeaters and max-repeaters)
+
+2002-01-08 06:59 jbpn
+
+ * agent/: snmp_agent.c , snmp_agent.h ,
+ helpers/bulk_to_next.c:
+
+ - GETBULK fix to ignore varbinds for which zero repetitions are
+ called for
+
+ - drop asp->start and asp->end which are hardly used and which get
+ in the way of this type of processing
+
+ - ignore negative repetitions in bulk_to_next handler
+
+2002-01-07 08:39 hardaker
+
+ * perl/manager/.cvsignore:
+
+ ignore file
+
+2002-01-07 08:38 hardaker
+
+ * perl/manager/INSTALL:
+
+ PNGGraph -> GD::Graph
+
+2002-01-04 13:48 hardaker
+
+ * Makefile.in:
+
+ fix dependencies
+
+2002-01-04 13:24 hardaker
+
+ * acconfig.h , include/net-snmp/acconfig.h:
+
+ move acconfig.h back to the top dir where its apparently supposed to live.
+
+2002-01-04 13:18 hardaker
+
+ * configure , configure.in:
+
+ more ucd-snmp -> net-snmp translations. warning: includes the default persistent store.
+
+2002-01-04 13:04 hardaker
+
+ * include/: net-snmp/.cvsignore , ucd-snmp/.cvsignore:
+
+ ignore files
+
+2002-01-04 13:02 hardaker
+
+ * .cvsignore:
+
+ ignore built net-snmp-config
+
+2002-01-04 13:00 hardaker
+
+ * apps/: Makefile.in , encode_keychange.c ,
+ notification_log.c , snmpbulkget.c , snmpbulkwalk.c
+ , snmpdelta.c , snmpdf.c , snmpget.c ,
+ snmpgetnext.c , snmpset.c , snmpstatus.c ,
+ snmptable.c , snmptest.c , snmptranslate.c ,
+ snmptrap.c , snmptrapd.c , snmptrapd_handlers.c
+ , snmptrapd_log.c , snmpusm.c , snmpvacm.c
+ , snmpwalk.c:
+
+ beginnings of ucd-snmp -> net-snmp structural changes.
+ - config.h -> include/net-snmp/net-snmp-config.h
+ - this, of course, changes just about every file in the repository.
+
+2002-01-04 12:56 hardaker
+
+ * agent/mibgroup/mibJJ/icmp.c ,
+ agent/mibgroup/mibJJ/interfaces.c , agent/mibgroup/mibJJ/ip.c
+ , agent/mibgroup/mibJJ/ipAddr.c ,
+ agent/mibgroup/mibJJ/ipMedia.c ,
+ agent/mibgroup/mibJJ/ipRoute.c , agent/mibgroup/mibJJ/ipv6.c
+ , agent/mibgroup/mibJJ/kernel_linux.c ,
+ agent/mibgroup/mibJJ/snmp_mib.c ,
+ agent/mibgroup/mibJJ/sysORTable.c ,
+ agent/mibgroup/mibJJ/system_mib.c , agent/mibgroup/mibJJ/tcp.c
+ , agent/mibgroup/mibJJ/tcpTable.c ,
+ agent/mibgroup/mibJJ/udp.c , agent/mibgroup/mibJJ/udpTable.c
+ , agent/mibgroup/mibJJ/vacm_vars.c ,
+ agent/mibgroup/notification/snmpNotifyFilterProfileTable.c ,
+ agent/mibgroup/notification/snmpNotifyFilterTable.c ,
+ agent/mibgroup/notification/snmpNotifyTable.c ,
+ agent/mibgroup/smux/smux.c , agent/mibgroup/smux/snmp_bgp.c
+ , agent/mibgroup/smux/snmp_ospf.c ,
+ agent/mibgroup/smux/snmp_rip2.c ,
+ agent/mibgroup/snmpv3/snmpEngine.c ,
+ agent/mibgroup/snmpv3/snmpMPDStats.c ,
+ agent/mibgroup/snmpv3/usmStats.c ,
+ agent/mibgroup/snmpv3/usmUser.c ,
+ agent/mibgroup/target/snmpTargetAddrEntry.c ,
+ agent/mibgroup/target/snmpTargetParamsEntry.c ,
+ agent/mibgroup/target/target.c ,
+ agent/mibgroup/target/target_counters.c ,
+ agent/mibgroup/ucd-snmp/disk.c ,
+ agent/mibgroup/ucd-snmp/diskio.c ,
+ agent/mibgroup/ucd-snmp/dlmod.c ,
+ agent/mibgroup/ucd-snmp/errormib.c ,
+ agent/mibgroup/ucd-snmp/extensible.c ,
+ agent/mibgroup/ucd-snmp/file.c ,
+ agent/mibgroup/ucd-snmp/hpux.c ,
+ agent/mibgroup/ucd-snmp/lmSensors.c ,
+ agent/mibgroup/ucd-snmp/loadave.c ,
+ agent/mibgroup/ucd-snmp/logmatch.c ,
+ agent/mibgroup/ucd-snmp/memory.c ,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c ,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c ,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c ,
+ agent/mibgroup/ucd-snmp/pass.c ,
+ agent/mibgroup/ucd-snmp/pass_persist.c ,
+ agent/mibgroup/ucd-snmp/proc.c ,
+ agent/mibgroup/ucd-snmp/proxy.c ,
+ agent/mibgroup/ucd-snmp/registry.c ,
+ agent/mibgroup/ucd-snmp/versioninfo.c ,
+ agent/mibgroup/ucd-snmp/vmstat.c ,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c ,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c ,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c ,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c ,
+ apps/snmpnetstat/Makefile.in , apps/snmpnetstat/if.c ,
+ apps/snmpnetstat/inet.c , apps/snmpnetstat/inet6.c ,
+ apps/snmpnetstat/main.c , apps/snmpnetstat/route.c ,
+ apps/snmpnetstat/winstub.c:
+
+ beginnings of ucd-snmp -> net-snmp structural changes.
+ - config.h -> include/net-snmp/net-snmp-config.h
+ - this, of course, changes just about every file in the repository.
+
+2002-01-04 12:52 hardaker
+
+ * agent/mibgroup/misc/dlmod.c , agent/mibgroup/misc/ipfwacc.c
+ , include/net-snmp/acconfig.h ,
+ include/net-snmp/net-snmp-config.h.in ,
+ include/ucd-snmp/README , snmplib/Makefile.in ,
+ snmplib/asn1.c , snmplib/callback.c ,
+ snmplib/data_list.c , snmplib/default_store.c ,
+ snmplib/int64.c , snmplib/keytools.c ,
+ snmplib/lcd_time.c , snmplib/md5.c , snmplib/mib.c
+ , snmplib/mt_support.c , snmplib/oid_array.c ,
+ snmplib/oid_stash.c , snmplib/parse.c ,
+ snmplib/read_config.c , snmplib/scapi.c ,
+ snmplib/snmp-tc.c , snmplib/snmp.c ,
+ snmplib/snmpAAL5PVCDomain.c , snmplib/snmpCallbackDomain.c
+ , snmplib/snmpIPXDomain.c , snmplib/snmpTCPDomain.c
+ , snmplib/snmpTCPIPv6Domain.c , snmplib/snmpUDPDomain.c
+ , snmplib/snmpUDPIPv6Domain.c , snmplib/snmpUnixDomain.c
+ , snmplib/snmp_alarm.c , snmplib/snmp_api.c ,
+ snmplib/snmp_auth.c , snmplib/snmp_client.c ,
+ snmplib/snmp_debug.c , snmplib/snmp_enum.c ,
+ snmplib/snmp_logging.c , snmplib/snmp_parse_args.c ,
+ snmplib/snmp_secmod.c , snmplib/snmp_transport.c ,
+ snmplib/snmpksm.c , snmplib/snmpusm.c , snmplib/snmpv3.c
+ , snmplib/snprintf.c , snmplib/strtol.c ,
+ snmplib/strtoul.c , snmplib/system.c , snmplib/tools.c
+ , snmplib/vacm.c , testing/T.c ,
+ testing/etimetest.c , testing/keymanagetest.c ,
+ testing/misctest.c , testing/scapitest.c:
+
+ beginnings of ucd-snmp -> net-snmp structural changes.
+ - config.h -> include/net-snmp/net-snmp-config.h
+ - this, of course, changes just about every file in the repository.
+
+2002-01-04 12:49 hardaker
+
+ * Makefile.in , Makefile.top , configure ,
+ configure.in , sedscript.in , agent/Makefile.in
+ , agent/agent_handler.c , agent/agent_index.c ,
+ agent/agent_read_config.c , agent/agent_registry.c ,
+ agent/agent_trap.c , agent/auto_nlist.c ,
+ agent/kernel.c , agent/mib_modules.c ,
+ agent/snmp_agent.c , agent/snmp_vars.c ,
+ agent/snmpd.c , agent/helpers/Makefile.in ,
+ agent/helpers/bulk_to_next.c , agent/helpers/debug_handler.c
+ , agent/helpers/instance.c , agent/helpers/multiplexer.c
+ , agent/helpers/null.c , agent/helpers/old_api.c ,
+ agent/helpers/read_only.c , agent/helpers/serialize.c ,
+ agent/helpers/table.c , agent/helpers/table_array.c ,
+ agent/helpers/table_data.c , agent/helpers/table_dataset.c
+ , agent/helpers/table_iterator.c ,
+ agent/mibgroup/Makefile.in , agent/mibgroup/header_complex.c
+ , agent/mibgroup/kernel_sunos5.c ,
+ agent/mibgroup/testdelayed.c , agent/mibgroup/testhandler.c
+ , agent/mibgroup/util_funcs.c ,
+ agent/mibgroup/Rmon/agutil.c , agent/mibgroup/Rmon/alarm.c
+ , agent/mibgroup/Rmon/event.c ,
+ agent/mibgroup/Rmon/history.c , agent/mibgroup/Rmon/rows.c
+ , agent/mibgroup/Rmon/statistics.c ,
+ agent/mibgroup/agent/nsTransactionTable.c ,
+ agent/mibgroup/agentx/agentx_config.c ,
+ agent/mibgroup/agentx/client.c ,
+ agent/mibgroup/agentx/master.c ,
+ agent/mibgroup/agentx/master_admin.c ,
+ agent/mibgroup/agentx/protocol.c ,
+ agent/mibgroup/agentx/subagent.c ,
+ agent/mibgroup/disman/mteObjectsTable.c ,
+ agent/mibgroup/disman/mteTriggerBooleanTable.c ,
+ agent/mibgroup/disman/mteTriggerDeltaTable.c ,
+ agent/mibgroup/disman/mteTriggerExistenceTable.c ,
+ agent/mibgroup/disman/mteTriggerTable.c ,
+ agent/mibgroup/disman/mteTriggerThresholdTable.c ,
+ agent/mibgroup/examples/example.c ,
+ agent/mibgroup/examples/ucdDemoPublic.c ,
+ agent/mibgroup/host/hr_device.c ,
+ agent/mibgroup/host/hr_disk.c ,
+ agent/mibgroup/host/hr_filesys.c ,
+ agent/mibgroup/host/hr_network.c ,
+ agent/mibgroup/host/hr_other.c ,
+ agent/mibgroup/host/hr_partition.c ,
+ agent/mibgroup/host/hr_print.c ,
+ agent/mibgroup/host/hr_proc.c ,
+ agent/mibgroup/host/hr_storage.c ,
+ agent/mibgroup/host/hr_swinst.c ,
+ agent/mibgroup/host/hr_swrun.c ,
+ agent/mibgroup/host/hr_system.c , agent/mibgroup/mibII/at.c
+ , agent/mibgroup/mibII/icmp.c ,
+ agent/mibgroup/mibII/interfaces.c , agent/mibgroup/mibII/ip.c
+ , agent/mibgroup/mibII/ipAddr.c ,
+ agent/mibgroup/mibII/ipv6.c ,
+ agent/mibgroup/mibII/kernel_linux.c ,
+ agent/mibgroup/mibII/mta_sendmail.c ,
+ agent/mibgroup/mibII/route_write.c ,
+ agent/mibgroup/mibII/snmp_mib.c ,
+ agent/mibgroup/mibII/sysORTable.c ,
+ agent/mibgroup/mibII/system_mib.c ,
+ agent/mibgroup/mibII/tcp.c , agent/mibgroup/mibII/tcpTable.c
+ , agent/mibgroup/mibII/udp.c ,
+ agent/mibgroup/mibII/udpTable.c ,
+ agent/mibgroup/mibII/vacm_context.c ,
+ agent/mibgroup/mibII/vacm_vars.c ,
+ agent/mibgroup/mibII/var_route.c:
+
+ beginnings of ucd-snmp -> net-snmp structural changes.
+ - config.h -> include/net-snmp/net-snmp-config.h
+ - this, of course, changes just about every file in the repository.
+
+2002-01-04 12:47 hardaker
+
+ * acconfig.h , config.h.in:
+
+ removed uneeded older files
+
+2002-01-03 14:15 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ patch #492072 to main branch
+
+2002-01-03 14:00 hardaker
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ check results of setmntent before using them.
+
+2002-01-03 13:57 hardaker
+
+ * apps/snmpnetstat/if.c:
+
+ check against growing server returns as pointed out by bug #498956
+
+2002-01-03 11:40 hardaker
+
+ * perl/manager/displaytable.pm:
+
+ PNGGraph -> GDGraph
+
+2002-01-03 11:39 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ change export name to "net-snmp" from "ucd-snmp"
+
+2002-01-03 11:39 hardaker
+
+ * agent/mibgroup/testhandler.c ,
+ local/mib2c.create-dataset.conf , local/mib2c.iterate.conf:
+
+ make use of the new multi-add functions.
+
+2002-01-03 11:38 hardaker
+
+ * agent/helpers/: table_dataset.c , table_dataset.h:
+
+ add multiple default row column definitions using one function call (varargs).
+
+2002-01-03 11:38 hardaker
+
+ * agent/helpers/: table.c , table.h:
+
+ add multiple indexes using one function call (varargs).
+
+2002-01-03 11:37 hardaker
+
+ * agent/snmp_vars.h:
+
+ remove no longer defined v4 api functions (getStatPtr no less).
+
+2002-01-03 11:37 hardaker
+
+ * agent/snmp_agent.h:
+
+ remove no longer defined v4 api functions.
+
+2002-01-03 10:31 hardaker
+
+ * snmplib/: Makefile.in , oid_stash.c , oid_stash.h:
+
+ data stashing based on an oid caching tree.
+
+2001-12-26 15:36 hardaker
+
+ * perl/manager/: INSTALL , Makefile.PL , manager.pm:
+
+ update to make it a bit easier to install (including a Makefile for
+ automated installation).
+
+2001-12-26 13:20 hardaker
+
+ * perl/manager/: INSTALL , displaytable.pm , getValues.pm
+ , green.gif , manager.pm , red.gif , setupauth
+ , setupdb , setupuser , snmptosql:
+
+ moving manager to perl/manager
+
+2001-12-24 16:10 hardaker
+
+ * FAQ , sedscript.in , version.h ,
+ perl/SNMP/SNMP.pm:
+
+ - (version.h sedscript.in): version tag ( 5.0.pre1 )
+
+2001-12-24 16:04 hardaker
+
+ * local/: Makefile.in , mib2c , mib2c.conf:
+
+ Update to make people understand that it's not finished and you must
+ reference a particular configuration file at this point.
+
+2001-12-24 15:51 hardaker
+
+ * FAQ , sedscript.in , version.h ,
+ perl/SNMP/SNMP.pm:
+
+ - (version.h sedscript.in): version tag ( 5.0.not.even.close )
+
+2001-12-24 15:50 hardaker
+
+ * README:
+
+ more comments.
+
+2001-12-24 15:41 hardaker
+
+ * FAQ , README:
+
+ more updates
+
+2001-12-24 15:20 hardaker
+
+ * agent/helpers/old_api.c:
+
+ doxygen comments
+
+2001-12-24 15:20 hardaker
+
+ * NEWS , README:
+
+ 5.0 comment updates.
+
+2001-12-24 15:19 hardaker
+
+ * agent/agent_handler.c:
+
+ doxygen comments on a few functions.
+
+2001-12-24 15:09 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ memory leaks.
+
+2001-12-24 10:06 hardaker
+
+ * agent/Makefile.in:
+
+ remove dependencies for non-existent modules
+
+2001-12-23 15:47 hardaker
+
+ * net-snmp-config:
+
+ opps. Don't check in generated files.
+
+2001-12-23 15:46 hardaker
+
+ * config.h.in , configure , configure.in ,
+ agent/mibgroup/host/hr_swinst.c:
+
+ fix rpm usage (I hope).
+
+2001-12-23 14:50 hardaker
+
+ * agent/mibgroup/agent/.cvsignore:
+
+ added .cvsignore file
+
+2001-12-23 14:49 hardaker
+
+ * Makefile.in:
+
+ install net-snmp-config.
+
+2001-12-23 14:47 hardaker
+
+ * NEWS , configure , configure.in ,
+ net-snmp-config , net-snmp-config.in , agent/Makefile.in
+ , apps/Makefile.in:
+
+ - created a net-snmp-config script to report compiled libs.
+ - separated libs needed by agent from those needed by the rest of the
+ applications.
+
+2001-12-21 16:53 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ mention how to install DBI
+
+2001-12-21 16:44 hardaker
+
+ * perl/AnyData_SNMP/Makefile.PL:
+
+ remove version requirement for AnyData
+
+2001-12-21 16:37 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ make install as root.
+
+2001-12-21 16:32 hardaker
+
+ * perl/AnyData_SNMP/: INSTALL , INSTALL , INSTALL ,
+ INSTALL:
+
+ better descr
+
+2001-12-21 16:09 hardaker
+
+ * perl/AnyData_SNMP/README:
+
+ minor wording change.
+
+2001-12-21 16:07 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ mention it's very alpha code.
+
+2001-12-21 16:06 hardaker
+
+ * perl/AnyData_SNMP/INSTALL:
+
+ new instructions
+
+2001-12-21 10:18 hardaker
+
+ * NEWS:
+
+ mention doxygen.
+
+2001-12-21 10:17 hardaker
+
+ * configure , configure.in ,
+ agent/mibgroup/agent_mibs.h:
+
+ compile in agent specific support mibs.
+
+2001-12-21 09:49 hardaker
+
+ * NEWS:
+
+ (still incomplete) 2nd update for 5.0
+
+2001-12-21 09:44 hardaker
+
+ * NEWS:
+
+ (incomplete) update for 5.0
+
+2001-12-19 17:10 hardaker
+
+ * snmplib/asn1.c:
+
+ fix realloc float and double builds.
+
+2001-12-19 16:34 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ misc fixes.
+
+2001-12-19 16:33 hardaker
+
+ * local/mib2c:
+
+ define a C datatype as $var.decl (per Robert's suggestion. Robert: we
+ probably want pointers for things like strings, no? maybe one type
+ that is always a pointer and another that is sometimes depending on
+ the type?)
+
+2001-12-19 16:32 hardaker
+
+ * apps/snmpbulkwalk.c:
+
+ change default bulk number to 100 from the ridiculous 1000.
+
+2001-12-19 16:32 hardaker
+
+ * agent/Makefile.in , agent/mibgroup/Makefile.in ,
+ apps/Makefile.in , snmplib/Makefile.in:
+
+ make depend
+
+2001-12-19 08:10 hardaker
+
+ * agent/: snmp_agent.c , helpers/bulk_to_next.c:
+
+ getbulk updates to make it the modules responsibility to update the
+ varbind chain an the repeat counter.
+
+2001-12-19 07:57 hardaker
+
+ * agent/: agent_handler.c , snmp_agent.c , snmp_agent.h
+ , helpers/Makefile.in , helpers/all_helpers.c ,
+ helpers/all_helpers.h , helpers/bulk_to_next.c ,
+ helpers/bulk_to_next.h:
+
+ GETBULK support for the new API.
+ - may need to make some slight modifications.
+ - defaults to GETNEXT for any handler that doesn't set HANDLER_CAN_GETBULK.
+ - doesn't deal properly yet with end-of-mib condition removal.
+
+2001-12-19 06:05 jbpn
+
+ * apps/snmptrapd.c:
+
+ - drop -p option. Addresses to listen on now come as optional
+ arguments at the end of the command line.
+
+ - drop (long-deprecated) -q option.
+
+ - re-ordered options in usage message to be alphabetical, and
+ changed description of some options to be more similar to snmpd
+ options (where appropriate).
+
+2001-12-19 04:38 jbpn
+
+ * agent/snmpd.c:
+
+ - drop -p and -T options. Addresses to listen on now come as
+ optional arguments at the end of the command line.
+
+ - re-ordered options in usage message to be alphabetical, plus
+ minor formatting tweaks.
+
+ - re-written options processing loop to use optarg().
+
+2001-12-18 08:44 jbpn
+
+ * mibs/: UCD-SNMP-MIB.txt (V4-2-patches.5), UCD-SNMP-MIB.txt:
+
+ - add OBJECT IDENTIFIER for win32 agent
+
+2001-12-18 08:16 hardaker
+
+ * agent/helpers/old_api.c:
+
+ warning -> debug.
+
+2001-12-17 10:15 jbpn
+
+ * agent/snmp_agent.c:
+
+ - handle getNext queries where the initial varbind->type is
+ ASN_PRIV_INCL_RANGE (these currently arise only in AgentX
+ subagents but the handling is not specific to AgentX).
+
+ Basically this is done by performing a GET first on all the
+ variables in a request. For variables that had an initial type of
+ ASN_PRIV_INCL_RANGE and were satisfied by this initial GET, we use
+ this value as the result. For variables that did not have an
+ initial type of ASN_PRIV_INCL_RANGE, or variable that had and
+ initial type of ASN_PRIV_INCL_RANGE but were not satisfied by this
+ GET request, we proceed to perform a GET-NEXT type request as
+ normal.
+
+2001-12-17 10:04 jbpn
+
+ * agent/helpers/old_api.c:
+
+ - add function register_mib_table_row() which emulates old
+ functionality.
+
+ - use snmp_handler_registration_free() in register_old_api().
+
+2001-12-17 09:39 jbpn
+
+ * snmplib/mib.c:
+
+ - fix bogus indent
+
+2001-12-17 09:38 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - right number of arguments for register_mib_context2() in
+ register_agentx_list().
+
+ - use snmp_handler_registration_free() in ditto.
+
+2001-12-13 19:22 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ remove handler injection order (serialize needs to be called first)
+
+2001-12-13 19:22 hardaker
+
+ * agent/snmp_agent.c:
+
+ remove unneeded check for already answered ASN_NULLs in first pass.
+
+2001-12-12 09:31 hardaker
+
+ * perl/AnyData_SNMP/: .cvsignore , INSTALL , MANIFEST
+ , README , snmpsh:
+
+ - doc update.
+ - snmpsh now supports aliases so you can define command sets.
+ - snmpsh now reads a ~/.snmpshrc file for storing these defined aliases.
+
+2001-12-12 06:42 jbpn
+
+ * agent/agent_registry.c:
+
+ - new function join_subtree() which repairs "punctured" subtrees
+ (these arise in particular when AgentX row registrations are
+ withdrawn).
+
+ - copy reginfo when doing a range registration (as we used to do
+ with the variable structure), since each node must stand alone.
+
+ - add parameter to register_mib_context2 to allow REGISTER_OID
+ callbacks to be withheld (for instance, you need this to avoid
+ excess AgentX traffic for row registrations).
+
+ - remove register_mib_table_row() -- this has moved to old_api.c
+
+ - call join_subtree() in unregister_mibs_by_session().
+
+2001-12-12 06:33 jbpn
+
+ * agent/: agent_handler.c , agent_handler.h:
+
+ - add functions snmp_handler_free(), snmp_handler_dup(),
+ snmp_handler_registration_dup() and
+ snmp_handler_registration_free().
+
+2001-12-11 18:41 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ Fix bug where pdu->contextName is NULL.
+
+2001-12-11 07:34 hardaker
+
+ * local/mib2c:
+
+ BITS: ipaddr -> octet_str
+
+2001-12-11 04:11 jbpn
+
+ * agent/: snmp_agent.c , snmp_agent.h ,
+ mibgroup/agentx/master.c:
+
+ - send INCLUSIVE search ranges if appropriate
+
+2001-12-10 20:43 rstory
+
+ * local/mib2c:
+
+ add noaccess flag for not-accessible nodes
+
+2001-12-10 14:51 hardaker
+
+ * perl/AnyData_SNMP/: Changes , DBD_AnyData.patch ,
+ Format.pm , INSTALL , MANIFEST , Makefile.PL ,
+ Storage.pm , snmpsh:
+
+ First version
+
+2001-12-10 03:20 jbpn
+
+ * agent/agent_read_config.c:
+
+ - don't strdup arg to ds_set_string
+
+2001-12-10 03:19 jbpn
+
+ * snmplib/read_config.c:
+
+ - ditto in set_persistent_directory()
+
+2001-12-10 03:18 jbpn
+
+ * snmplib/read_config.c:
+
+ - don't strdup() in set_configuration_directory() because
+ ds_set_string() already does that for you.
+
+2001-12-07 09:43 hardaker
+
+ * agent/: helpers/table_iterator.c , helpers/table_iterator.h
+ , mibgroup/agent/nsTransactionTable.c ,
+ mibgroup/mibII/vacm_context.c:
+
+ - Implement new mantra: "always pass more information, rather than less".
+ - fix table iterater GETNEXTs for missing data points.
+ - add a new hook to free loop contexts at the end of the entire iteration.
+
+2001-12-06 06:58 jbpn
+
+ * agent/mibgroup/agentx/: client.c (JBPN-CBL-4.1), client.c:
+
+ - if request IDs don't match, then call handle_agentx_packet() --
+ copes better with unexpected packets, in particular fixes
+ intermittent duplicate trap issue (due to resent
+ agentx-Notify-PDU).
+
+2001-12-05 13:46 hardaker
+
+ * snmplib/snmp-tc.c:
+
+ Ahem. Opps. Missing includes.
+ - note to self: compile first, *then* check in changes.
+
+2001-12-05 13:41 hardaker
+
+ * snmplib/snmp-tc.c:
+
+ add in the missing functions from the NEW-AGENT-API branch.
+ (and to answer Robert's pending question of what happened, it was
+ likely one of the files that failed to commit on my side that you
+ tried to fix and somewhere between the two of us the changes were lost).
+
+2001-12-05 10:03 jbpn
+
+ * man/snmpcmd.1:
+
+ - minor tweaks
+
+2001-12-05 09:14 jbpn
+
+ * man/snmpcmd.1:
+
+ - add TCP/IPv6 domain to AGENT SPEC section
+
+ - incorporate suggestions from rstory
+
+2001-12-05 08:47 jbpn
+
+ * snmplib/snmpTCPIPv6Domain.c:
+
+ - use SOCK_STREAM not SOCK_DGRAM (duh!). You wouldn't believe how
+ confusing this was -- e.g. how on *earth* can that connect() be
+ succeeding!
+
+2001-12-05 08:36 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ - make sure to close socket if you can't malloc the encoded far-end
+ address in snmp_tcp_transport()
+
+2001-12-05 08:27 hardaker
+
+ * win32/: snmptranslate/snmptranslate.dsp ,
+ snmptrap/snmptrap.dsp , snmptrapd/snmptrapd.dsp ,
+ snmpusm/snmpusm.dsp , snmpvacm/snmpvacm.dsp:
+
+ merge from 4.2 patches to main line
+
+2001-12-05 08:23 hardaker
+
+ * ChangeLog , FAQ , NEWS , README ,
+ README.win32 , acconfig.h , config.h.in ,
+ configure , configure.in , sedscript.in ,
+ agent/agent_callbacks.h , agent/agent_read_config.c ,
+ agent/snmpd.c , agent/mibgroup/kernel_sunos5.c ,
+ agent/mibgroup/versiontag , agent/mibgroup/host/hr_disk.c
+ , agent/mibgroup/host/hr_partition.c ,
+ agent/mibgroup/host/hr_system.c , agent/mibgroup/mibII/at.c
+ , agent/mibgroup/mibII/icmp.c ,
+ agent/mibgroup/mibII/interfaces.c , agent/mibgroup/mibII/ip.c
+ , agent/mibgroup/mibII/ipAddr.c ,
+ agent/mibgroup/mibII/kernel_linux.c ,
+ agent/mibgroup/mibII/kernel_linux.h ,
+ agent/mibgroup/mibII/route_write.c ,
+ agent/mibgroup/mibII/system_mib.c ,
+ agent/mibgroup/mibII/tcp.c , agent/mibgroup/mibII/tcpTable.c
+ , agent/mibgroup/mibII/udp.c ,
+ agent/mibgroup/mibII/udpTable.c ,
+ agent/mibgroup/mibII/var_route.c ,
+ agent/mibgroup/notification/snmpNotifyTable.c ,
+ agent/mibgroup/ucd-snmp/disk.c ,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c ,
+ apps/snmpnetstat/if.c , local/mib2c , local/tkmib
+ , man/snmpd.conf.5.def , mibs/UCD-SNMP-MIB.txt ,
+ perl/SNMP/SNMP.pm , snmplib/asn1.c ,
+ snmplib/default_store.h , snmplib/mib.c ,
+ snmplib/read_config.c , snmplib/read_config.h ,
+ snmplib/snmp.h , snmplib/snmp_api.c ,
+ win32/snmpwalk/snmpwalk.dsp , win32/config.h ,
+ win32/mib_module_config.h , win32/mib_module_includes.h ,
+ win32/mib_module_inits.h , win32/win32.dsw ,
+ win32/win32.opt , win32/encode_keychange/encode_keychange.dsp
+ , win32/libagent/libagent.dsp , win32/libsnmp/libsnmp.dsp
+ , win32/libsnmp_dll/libsnmp.def ,
+ win32/libsnmp_dll/libsnmp_dll.dsp ,
+ win32/libucdmibs/libucdmibs.dsp ,
+ win32/snmpbulkget/snmpbulkget.dsp ,
+ win32/snmpbulkwalk/snmpbulkwalk.dsp , win32/snmpd/snmpd.dsp
+ , win32/snmpdelta/snmpdelta.dsp , win32/snmpdf/snmpdf.dsp
+ , win32/snmpget/snmpget.dsp ,
+ win32/snmpgetnext/snmpgetnext.dsp ,
+ win32/snmpnetstat/snmpnetstat.dsp , win32/snmpset/snmpset.dsp
+ , win32/snmpstatus/snmpstatus.dsp ,
+ win32/snmptable/snmptable.dsp , win32/snmptest/snmptest.dsp:
+
+ merge from 4.2 patches to main line
+
+2001-12-05 07:51 jbpn
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ - fix bug in address parser
+
+2001-12-05 07:48 jbpn
+
+ * snmplib/: snmpTCPIPv6Domain.c , snmpUDPIPv6Domain.c:
+
+ - minor changes to, ahem, make it compile
+
+2001-12-05 07:42 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ - conditionalise #include <fcntl.h>
+
+2001-12-05 07:38 jbpn
+
+ * snmplib/snmp_transport.c:
+
+ - fix typo
+
+2001-12-05 07:29 jbpn
+
+ * acconfig.h , configure.in:
+
+ - mention the TCP/IPv6 transport in config, and add a #define for it
+ if appropriate
+
+2001-12-05 07:28 jbpn
+
+ * snmplib/snmp_transport.c:
+
+ - call snmp_tcp6_ctor() if appropriate
+
+2001-12-05 07:27 jbpn
+
+ * snmplib/: snmpTCPIPv6Domain.c , snmpTCPIPv6Domain.h:
+
+ - TCP/IPv6 transport domain. Untested.
+
+2001-12-05 07:19 jbpn
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ - make encoded addresses at transport open time
+
+2001-12-05 07:17 jbpn
+
+ * snmplib/: snmpTCPDomain.c , snmp_transport.h:
+
+ - move #definition of SNMP_STREAM_QUEUE_LEN from snmpTCPDomain.c
+ to snmp_transport.h
+
+2001-12-05 07:10 hardaker
+
+ * agent/: snmp_agent.c , snmp_vars.c:
+
+ remove some unneeded functions like, oh, I don't know, getStatPtr().
+
+2001-12-05 05:43 jbpn
+
+ * snmplib/snmp_api.h:
+
+ - remove legacy callback operation names
+
+2001-12-05 05:06 jbpn
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ - changed textual address parsing
+
+2001-12-04 22:52 nba
+
+ * snmplib/snmpUDPIPv6Domain.c:
+
+ Fix bind parameters, so that the agent works
+
+2001-12-04 13:36 hardaker
+
+ * agent/helpers/table.h , agent/helpers/table_iterator.c
+ , agent/helpers/table_iterator.h ,
+ agent/mibgroup/agent/nsTransactionTable.c ,
+ agent/mibgroup/mibII/vacm_context.c , local/mib2c.iterate.conf:
+
+ - move forgotten function typedefs to iterator specific header file.
+ - add a void * pointer for the callbacks to make functions more reusable.
+
+2001-12-04 13:11 hardaker
+
+ * agent/helpers/table.h , agent/helpers/table_iterator.c
+ , agent/helpers/table_iterator.h ,
+ agent/mibgroup/agent/nsTransactionTable.c ,
+ agent/mibgroup/mibII/vacm_context.c , local/mib2c.iterate.conf:
+
+ move iterator specific table information into its own structure.
+
+2001-12-04 12:16 hardaker
+
+ * agent/helpers/all_helpers.h:
+
+ Fix prototype as pointed out by Jerome Peducasse
+
+2001-12-04 10:10 jbpn
+
+ * man/snmpcmd.1:
+
+ - mention that not all transport domains are always available.
+
+2001-12-04 09:55 jbpn
+
+ * man/snmpcmd.1:
+
+ - remove -p and -T options from documentation.
+
+ - add lengthy new section describing new transport address
+ specification format, with examples and everything!
+
+2001-12-04 07:14 jbpn
+
+ * snmplib/snmp_parse_args.c:
+
+ - drop -p and -T options for apps.
+
+2001-12-04 03:10 jbpn
+
+ * snmplib/: snmpUDPIPv6Domain.c , snmpUDPIPv6Domain.h:
+
+ - add create_ostring method, export ucdSnmpUDPIPv6Domain[]
+
+2001-12-04 02:19 jbpn
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - mention IPv6 transport domain OIDs in relevant comment.
+
+2001-12-03 15:07 nba
+
+ * snmplib/snmpUDPDomain.c:
+
+ Quell a const cast warning.
+
+2001-12-03 15:07 nba
+
+ * snmplib/snmp_api.c:
+
+ Fix debug output from retries.
+
+2001-12-03 15:06 nba
+
+ * apps/notification_log.c , snmplib/oid_array.c:
+
+ HAVE_SYS_TYPES_H is not conditional.
+
+2001-12-03 15:04 nba
+
+ * apps/Makefile.in:
+
+ Fix to allow compilations outside source directory.
+
+2001-12-03 15:03 nba
+
+ * acconfig.h , config.h.in , configure ,
+ configure.in , snmplib/snmpUDPIPv6Domain.c ,
+ snmplib/snmp_transport.c:
+
+ Fixes to make UDPIPv6 transport work for Solaris, Linux and FreeBSD.
+ It compiles, and the apps send v6 packets. Agent not yet tested.
+
+2001-12-03 09:48 hardaker
+
+ * local/: mib2c.iterate.conf , mib2c.create-dataset.conf:
+
+ copy roberts spiffy header text
+
+2001-12-03 08:36 hardaker
+
+ * apps/notification_log.c:
+
+ datentime column.
+
+2001-12-03 08:01 hardaker
+
+ * agent/snmp_agent.c:
+
+ fix problem with double delegated requests after getnext loop.
+
+2001-12-03 08:00 hardaker
+
+ * configure , configure.in ,
+ mibs/NOTIFICATION-LOG-MIB.txt:
+
+ notification log mib added to default list.
+
+2001-12-03 05:33 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - remove spurious debugging output ("blah")
+
+2001-11-30 23:26 hardaker
+
+ * agent/: agent_handler.c , snmp_agent.c , snmp_agent.h:
+
+ Change how request processing gets done such that request objects are
+ all calloced at once and get reused instead of reallocated. Big speed
+ improvements.
+
+2001-11-30 15:22 hardaker
+
+ * Makefile.in , doxygen.conf:
+
+ "make doc" to run doxygen.
+
+2001-11-30 10:31 hardaker
+
+ * agent/helpers/: debug_handler.c , multiplexer.h:
+
+ doxygen fixes
+
+2001-11-30 09:26 jbpn
+
+ * agent/agent_handler.c:
+
+ - use DEBUGMSGOIDRANGE in register_handler() if appropriate.
+
+2001-11-30 09:24 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - fix memory leak in register_agentx_list() when subagent tries to
+ register a MIB region that fails either because it is a duplicate
+ or because of some other reason.
+
+2001-11-30 08:44 jbpn
+
+ * agent/helpers/old_api.c:
+
+ - fix memory leak of old_info (that never seems to get used for
+ anything anyway?)
+
+ - fix memory leak that arises during row registration (in AgentX
+ subagents) because successive vars cause apparent duplicate
+ registrations (this is a deficiency) -- but it would appear this
+ could arise in other situations too (genuine duplicate
+ registrations).
+
+2001-11-30 06:33 jbpn
+
+ * agent/agent_trap.c:
+
+ - fix broken parsing in snmpd_parse_config_trapsess() -- loop was
+ copying the same (first) token MAX_ARGS times.
+
+ - eliminate memory leak in ditto.
+
+ - fix typo ("Pausible cause" -> "Possible cause) in ditto.
+
+2001-11-30 06:29 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - print fd in sess_process_packet() -- useful for debugging
+
+2001-11-30 06:28 jbpn
+
+ * snmplib/: snmpCallbackDomain.c , snmpCallbackDomain.h:
+
+ - remove a couple of unnecessary #includes from snmpCallbackDomain.h
+
+ - set *opaque to NULL after we free it -- it might matter.
+
+2001-11-30 03:47 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - clone PDU in handle_agentx_subagent() before sending it on callback
+ session to avoid double free() and free()d memory reads.
+
+ - more concise (ahem) declaration of mycallback in handle_agentx_packet().
+
+2001-11-29 05:51 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - put session and subsession in subagent description (helpful for
+ debugging)
+
+2001-11-29 05:49 jbpn
+
+ * agent/helpers/Makefile.in:
+
+ - fix INSTALLHEADERS
+
+2001-11-29 05:48 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - add some debugging to init_subagent() (which showed that it wasn't
+ being called, so...).
+
+ - fix cast in handle_subagent_set_response()
+
+2001-11-29 05:46 jbpn
+
+ * agent/snmp_vars.c:
+
+ - make sure init_subagent() gets called
+
+2001-11-28 09:28 hardaker
+
+ * agent/agent_registry.c:
+
+ check for session registrations in all contexts.
+
+2001-11-28 06:39 hardaker
+
+ * apps/notification_log.c , snmplib/oid_array.c:
+
+ Add sys/types.h for bug #486277.
+
+2001-11-28 04:03 jbpn
+
+ * apps/notification_log.c:
+
+ - #include <netdb.h>
+
+2001-11-28 04:03 jbpn
+
+ * configure.in , snmplib/Makefile.in:
+
+ - install snmp_transport.h and snmp*Domain.h (for the configured
+ transport domains)
+
+2001-11-28 03:29 jbpn
+
+ * snmplib/ucd-snmp-includes.h:
+
+ - reverse mystery removal of #include <netinet/in.h> and #include
+ <sys/time.h>
+
+2001-11-27 17:28 hardaker
+
+ * agent/: snmp_agent.c , snmp_agent.h:
+
+ more intelligently allocate tree space based on number of varbinds in request.
+
+2001-11-27 14:26 hardaker
+
+ * agent/: snmp_agent.c , snmp_agent.h:
+
+ malloc one large tree_cache array rather than an array of tree_cache pointers.
+
+2001-11-27 12:19 hardaker
+
+ * agent/helpers/all_helpers.h:
+
+ include file name change.
+
+2001-11-27 11:43 hardaker
+
+ * agent/snmp_agent.c:
+
+ comment changes.
+
+2001-11-27 07:52 hardaker
+
+ * apps/Makefile.in:
+
+ fixed Makefile for snmptrapd.
+
+2001-11-27 07:48 hardaker
+
+ * agent/helpers/: Makefile.in , all_helpers.c ,
+ all_helpers.h , debug_handler.c , debug_handler.h:
+
+ debug handler created for inserting debugging output into the calling chain.
+
+2001-11-27 07:47 hardaker
+
+ * agent/agent_handler.c:
+
+ enum definitions for modes and can_modes.
+
+2001-11-26 15:29 hardaker
+
+ * agent/snmp_agent.c:
+
+ set PDU variable to NULL to avoid freeing it twice.
+
+2001-11-26 11:20 hardaker
+
+ * snmplib/snmpCallbackDomain.c:
+
+ plug another memory leak.
+
+2001-11-26 09:07 hardaker
+
+ * testing/tests/: T020snmpv3get , T021snmpv3getnext ,
+ T022snmpv3getMD5 , T023snmpv3getMD5DES ,
+ T024snmpv3getSHA1 , T025snmpv3getSHADES ,
+ T028snmpv3getfail , T030snmpv3usercreation ,
+ T053agentv1trap , T054agentv2ctrap , T055agentv1mintrap
+ , T056agentv2cmintrap , T110agentxget ,
+ T111agentxset , T112agentxsetfail , T113agentxtrap ,
+ T120proxyget , T121proxyset , T122proxysetfail:
+
+ don't use contexts in tests.
+
+2001-11-26 08:57 hardaker
+
+ * snmplib/snmpCallbackDomain.c:
+
+ fix memory leak.
+
+2001-11-26 08:49 hardaker
+
+ * agent/mibgroup/: testdelayed.c , agentx/master.c ,
+ ucd-snmp/proxy.c:
+
+ use free_delegated_cache() to plug memory leaks.
+
+2001-11-26 08:48 hardaker
+
+ * agent/: agent_handler.c , agent_handler.h:
+
+ free_delegated_cache() routine
+
+2001-11-26 08:19 jbpn
+
+ * apps/snmptrapd.c:
+
+ - add the ability to listen for traps on multiple transports via the
+ -p option (consistent with snmpd).
+
+2001-11-26 05:44 jbpn
+
+ * agent/mibgroup/target/target.c:
+
+ - use snmp_tdomain_transport_oid() to do session creation from
+ <tDomain-oid, tAddress-octet-string> pair, to allow creation of
+ non-IPv4 sessions in snmpTargetAddrTable.
+
+2001-11-26 04:45 jbpn
+
+ * snmplib/: snmpAAL5PVCDomain.c , snmpIPXDomain.c ,
+ snmpTCPDomain.c , snmpUDPDomain.c , snmpUnixDomain.c
+ , snmp_transport.c , snmp_transport.h:
+
+ - add support for creating a transport from a
+ <tDomain-oid, tAddress-octet-string> pair.
+
+2001-11-26 03:06 jbpn
+
+ * agent/mibgroup/target/target.c:
+
+ - use snmp_tdomain_support() to determine whether a transport domain
+ is supported.
+
+2001-11-23 10:24 jbpn
+
+ * apps/snmptrapd.c:
+
+ - add multiple transport domain support for trapd -- this was really
+ REALLY easy!
+
+2001-11-23 09:25 jbpn
+
+ * agent/mibgroup/disman/mteTriggerTable.c ,
+ snmplib/snmp_transport.c , snmplib/snmp_transport.h:
+
+ - remove legacy function snmp_transport_support() (replaced with
+ snmp_tdomain_support()).
+
+2001-11-23 08:57 jbpn
+
+ * snmplib/snmpAAL5PVCDomain.c:
+
+ - use network order for AAL5PVC transport address encoding
+
+2001-11-23 08:47 jbpn
+
+ * snmplib/: snmpAAL5PVCDomain.c , snmpIPXDomain.c ,
+ snmpUnixDomain.c:
+
+ - set local_length, remote_length as appropriate
+
+2001-11-23 08:39 jbpn
+
+ * snmplib/Makefile.in:
+
+ - fix typo
+
+2001-11-23 08:34 jbpn
+
+ * agent/: agent_trap.c ,
+ mibgroup/notification/snmpNotifyTable.c:
+
+ - make traps work with new-style addresses, use domain-based address
+ encodings in snmpTargetAddrTable. Note you can now send traps/informs
+ over any supported transport type by using the trapsess directive and
+ a transport:address type specification.
+
+2001-11-23 08:31 jbpn
+
+ * snmplib/: snmpAAL5PVCDomain.c , snmpIPXDomain.c ,
+ snmpTCPDomain.c , snmpUDPDomain.c , snmpUnixDomain.c:
+
+ - create appropriately-encoded local or remote endpoint addresses at
+ transport open time.
+
+2001-11-23 06:50 jbpn
+
+ * snmplib/Makefile.in:
+
+ - update dependencies for transports
+
+2001-11-22 09:08 jbpn
+
+ * testing/: TESTCONF.sh , eval_tools.sh ,
+ tests/T001snmpv1get , tests/T002snmpv1getnext ,
+ tests/T003snmpv1getfail , tests/T014snmpv2cget ,
+ tests/T015snmpv2cgetnext , tests/T016snmpv2cgetfail ,
+ tests/T017snmpv2ctov1getfail , tests/T018snmpv1tov2cgetfail
+ , tests/T020snmpv3get , tests/T021snmpv3getnext ,
+ tests/T022snmpv3getMD5 , tests/T023snmpv3getMD5DES ,
+ tests/T024snmpv3getSHA1 , tests/T025snmpv3getSHADES ,
+ tests/T028snmpv3getfail , tests/T030snmpv3usercreation ,
+ tests/T049snmpv3inform , tests/T050snmpv3trap ,
+ tests/T051snmpv2ctrap , tests/T052snmpv2cinform ,
+ tests/T053agentv1trap , tests/T054agentv2ctrap ,
+ tests/T055agentv1mintrap , tests/T056agentv2cmintrap ,
+ tests/T058agentauthtrap , tests/T100agenthup ,
+ tests/T110agentxget , tests/T111agentxset ,
+ tests/T112agentxsetfail , tests/T113agentxtrap ,
+ tests/T120proxyget , tests/T121proxyset ,
+ tests/T122proxysetfail:
+
+ - use udp:<hostname>:<port> instead of -p to make tests work again
+
+2001-11-22 00:20 hardaker
+
+ * apps/: notification_log.c , notification_log.h:
+
+ mork wore on the notification log mib. It now supports variable
+ storage, but segfaults on access due to pdu cloning problems I'm not
+ going to work out right now.
+
+2001-11-21 23:15 hardaker
+
+ * apps/Makefile.in:
+
+ fix snmptrapd linking.
+
+2001-11-21 22:58 rstory
+
+ * snmplib/asn1.h:
+
+ remove duplicate OID_LENGTH; use actual oid type in calculation
+
+2001-11-21 22:49 hardaker
+
+ * snmplib/snmpCallbackDomain.c:
+
+ add NULL pointer for rbuild in session creation.
+
+2001-11-21 22:49 hardaker
+
+ * agent/mibgroup/ucd-snmp/proxy.c , apps/notification_log.c:
+
+ netinet/in.h needed.
+
+2001-11-21 22:49 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ variable clean ups.
+
+2001-11-21 22:33 hardaker
+
+ * agent/mibgroup/agentx/master_request.c ,
+ agent/mibgroup/mibII/icmp.c , agent/mibgroup/mibII/tcpTable.c
+ , agent/mibgroup/mibII/udpTable.c ,
+ agent/mibgroup/ucd-snmp/file.c , local/mib2c ,
+ local/mib2c.array-auto.conf , local/mib2c.array-user.conf
+ , local/mib2c.create-dataset.conf ,
+ local/mib2c.iterate.conf , local/mib2c.vartypes.conf ,
+ man/Makefile.in , mibs/Makefile.in ,
+ mibs/NET-SNMP-AGENT-MIB.txt , perl/SNMP/SNMP.xs ,
+ snmplib/Makefile.in , snmplib/mib.c , snmplib/mib.h
+ , snmplib/read_config.c , snmplib/read_config.h ,
+ snmplib/snmp-tc.h , snmplib/snmpUnixDomain.h ,
+ snmplib/snmp_api.c , snmplib/snmp_api.h ,
+ snmplib/snmp_client.c , snmplib/snmp_client.h ,
+ snmplib/snmp_transport.c , snmplib/snmp_transport.h ,
+ snmplib/tools.c , snmplib/tools.h , snmplib/vacm.c:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 22:08 rstory
+
+ * snmplib/: vacm.h , asn1.h:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 21:43 rstory
+
+ * snmplib/: snmpCallbackDomain.c , snmpCallbackDomain.h:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 21:40 rstory
+
+ * snmplib/snmp.h:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 21:33 rstory
+
+ * snmplib/: oid_array.c , oid_array.h:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 21:30 rstory
+
+ * snmplib/: data_list.c , data_list.h:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 18:56 hardaker
+
+ * Makefile.in , config.h.in , configure ,
+ configure.in , version.h , agent/Makefile.in ,
+ agent/agent_handler.c , agent/agent_handler.h ,
+ agent/agent_index.c , agent/agent_read_config.c ,
+ agent/agent_registry.c , agent/agent_registry.h ,
+ agent/mib_modules.c , agent/snmp_agent.c ,
+ agent/snmp_agent.h , agent/snmp_vars.c , agent/snmpd.c
+ , agent/ucd-snmp-agent-includes.h , agent/var_struct.h
+ , agent/helpers/.cvsignore , agent/helpers/Makefile.in
+ , agent/helpers/all_helpers.c ,
+ agent/helpers/all_helpers.h , agent/helpers/instance.c ,
+ agent/helpers/instance.h , agent/helpers/multiplexer.c ,
+ agent/helpers/multiplexer.h , agent/helpers/null.c ,
+ agent/helpers/null.h , agent/helpers/old_api.c ,
+ agent/helpers/old_api.h , agent/helpers/read_only.c ,
+ agent/helpers/read_only.h , agent/helpers/serialize.c ,
+ agent/helpers/serialize.h , agent/helpers/set_helper.h ,
+ agent/helpers/table.c , agent/helpers/table.h ,
+ agent/helpers/table_array.c , agent/helpers/table_array.h
+ , agent/helpers/table_data.c , agent/helpers/table_data.h
+ , agent/helpers/table_dataset.c ,
+ agent/helpers/table_dataset.h , agent/helpers/table_iterator.c
+ , agent/helpers/table_iterator.h ,
+ agent/mibgroup/Makefile.in , agent/mibgroup/host_res.h
+ , agent/mibgroup/mibincl.h , agent/mibgroup/target.h
+ , agent/mibgroup/testdelayed.c ,
+ agent/mibgroup/testdelayed.h , agent/mibgroup/testhandler.c
+ , agent/mibgroup/testhandler.h ,
+ agent/mibgroup/util_funcs.c , agent/mibgroup/util_funcs.h
+ , agent/mibgroup/agent/nsTransactionTable.c ,
+ agent/mibgroup/agent/nsTransactionTable.h ,
+ agent/mibgroup/agentx/.cvsignore ,
+ agent/mibgroup/agentx/client.c ,
+ agent/mibgroup/agentx/master.c ,
+ agent/mibgroup/agentx/master.h ,
+ agent/mibgroup/agentx/master_admin.c ,
+ agent/mibgroup/agentx/subagent.c ,
+ agent/mibgroup/disman/.cvsignore ,
+ agent/mibgroup/disman/mteTriggerTable.c ,
+ agent/mibgroup/examples/.cvsignore ,
+ agent/mibgroup/host/hr_disk.c , agent/mibgroup/host/hr_disk.h
+ , agent/mibgroup/host/hr_partition.c ,
+ agent/mibgroup/host/hr_partition.h ,
+ agent/mibgroup/host/hr_swinst.c ,
+ agent/mibgroup/mibII/.cvsignore ,
+ agent/mibgroup/mibII/interfaces.c , agent/mibgroup/mibII/ip.c
+ , agent/mibgroup/mibII/system_mib.c ,
+ agent/mibgroup/mibII/tcp.c , agent/mibgroup/mibII/udp.c
+ , agent/mibgroup/mibII/vacm_context.c ,
+ agent/mibgroup/mibII/vacm_context.h ,
+ agent/mibgroup/mibII/vacm_vars.c ,
+ agent/mibgroup/mibII/vacm_vars.h ,
+ agent/mibgroup/target/target_counters.c ,
+ agent/mibgroup/target/target_counters.h ,
+ agent/mibgroup/ucd-snmp/proxy.c ,
+ agent/mibgroup/ucd-snmp/proxy.h ,
+ agent/mibgroup/ucd-snmp/registry.c , apps/Makefile.in ,
+ apps/notification_log.c , apps/notification_log.h ,
+ apps/snmptrapd.c:
+
+ Death: UCD-SNMP
+ Birth: NET-SNMP
+ (new agent API merged to the main branch)
+
+2001-11-21 06:43 jbpn
+
+ * config.h.in:
+
+ - IPv6 config defs
+
+2001-11-21 06:36 jbpn
+
+ * agent/snmp_agent.c , snmplib/snmp_api.c:
+
+ - remove now-extraneous #include "snmpBlahDomain.h" lines
+
+2001-11-21 03:39 jbpn
+
+ * apps/.cvsignore:
+
+ [no log message]
+
+2001-11-20 09:38 jbpn
+
+ * snmplib/: snmpIPXDomain.c , snmpIPXDomain.h:
+
+ - duh. Forgot a couple of things to do with domain-based transport
+ address parsing.
+
+2001-11-20 09:29 jbpn
+
+ * agent/snmp_agent.c:
+
+ - use new domain-based transport address parsing for agent NSAPs
+
+2001-11-20 09:27 jbpn
+
+ * snmplib/: snmpAAL5PVCDomain.c , snmpAAL5PVCDomain.h ,
+ snmpIPXDomain.c , snmpTCPDomain.c , snmpTCPDomain.h
+ , snmpUDPDomain.c , snmpUDPDomain.h ,
+ snmpUnixDomain.c , snmpUnixDomain.h , snmp_api.c ,
+ snmp_transport.c , snmp_transport.h:
+
+ - domain-based transport address parsing
+
+2001-11-20 09:16 jbpn
+
+ * snmplib/: snmpUDPIPv6Domain.c , snmpUDPIPv6Domain.h:
+
+ - UDP/IPv6 transport domain. Note: incomplete!
+
+2001-11-20 08:29 jbpn
+
+ * agent/: agent_index.c , agent_index.h:
+
+ - unregister_{string,int,oid}_index() utility functions contributed
+ by Damian Gilmurray.
+
+2001-11-20 02:26 jbpn
+
+ * snmplib/: snmp_api.h (V4-2-patches.1), snmp_api.h:
+
+ - remove duplicate definition of SNMP_MAX_SEC_NAME_SIZE, noted by
+ Karl M. Hegbloom.
+
+2001-11-19 16:59 driehuis
+
+ * snmplib/asn1.h:
+
+ Fix typo in comment [karlheg@microsharp.com]
+
+2001-11-16 08:34 jbpn
+
+ * apps/snmptest.c:
+
+ - add support for Unsigned32/Gauge32 types
+
+2001-11-15 10:03 jbpn
+
+ * agent/mibgroup/agentx/: protocol.c (V4-2-patches.5), protocol.c:
+
+ - stricter test for null OIDs
+
+2001-11-15 08:44 jbpn
+
+ * man/snmpd.conf.5.def:
+
+ - document read-only nature of snmpEnableAuthenTraps.0 if value is
+ configured via the authtrapenable token
+
+2001-11-15 08:44 jbpn
+
+ * agent/: agent_read_config.c , agent_trap.c ,
+ mibgroup/mibII/snmp_mib.c:
+
+ - make value of snmpEnableAuthenTraps.0 persistent. Setting via
+ a read-only configuration file also makes object notWritable (as
+ sysContact.0 et al.).
+
+2001-11-15 06:57 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - let VACM checks succeed for non-IPv4 transports
+
+2001-11-15 05:19 jbpn
+
+ * testing/tests/: T111agentxset , T121proxyset:
+
+ - use psyscontact not syscontact to set initial value of sysContact.0
+ object since the latter also makes the object read-only.
+
+2001-11-15 05:07 jbpn
+
+ * agent/: snmpd.c (V4-2-patches.6), snmpd.c:
+
+ - minor fix to formatting of usage message
+
+2001-11-15 04:05 jbpn
+
+ * agent/mibgroup/agentx/agentx_config.c:
+
+ - add missing #include "snmpd.h" (for #definition of MASTER_AGENT)
+ - don't strdup() agentxsocket value -- ds_set_string does it for you
+ - change debugging to fit in better with rest of module
+
+2001-11-14 16:05 hardaker
+
+ * configure, configure.in (V4-2-patches.[7,7]), config.h.in
+ , configure , configure.in:
+
+ patch from Harrie to fix init function checking in modules
+
+2001-11-14 16:00 hardaker
+
+ * agent/mibgroup/agentx/: agentx_config.c , agentx_config.h
+ , master.c , master.h , subagent.h:
+
+ slightly modified patch from Harrie to move agentx configuration into
+ a separate file.
+
+2001-11-13 13:57 hardaker
+
+ * apps/notification_log.h:
+
+ file notification_log.h was initially added on branch NEW-AGENT-API.
+
+2001-11-13 13:57 hardaker
+
+ * apps/notification_log.c:
+
+ file notification_log.c was initially added on branch NEW-AGENT-API.
+
+2001-11-13 13:55 hardaker
+
+ * agent/mibgroup/agent/nsTransactionTable.c:
+
+ file nsTransactionTable.c was initially added on branch NEW-AGENT-API.
+
+2001-11-13 13:55 hardaker
+
+ * agent/mibgroup/agent/nsTransactionTable.h:
+
+ file nsTransactionTable.h was initially added on branch NEW-AGENT-API.
+
+2001-11-13 13:55 hardaker
+
+ * mibs/NET-SNMP-AGENT-MIB.txt:
+
+ file NET-SNMP-AGENT-MIB.txt was initially added on branch NEW-AGENT-API.
+
+2001-11-13 05:29 jbpn
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ - patch from Jochen Kmietsch to quieten some noisy logging
+
+2001-11-13 04:13 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - use unregister_mib_table_row() when appropriate in
+ unregister_agentx_list().
+
+2001-11-13 03:23 jbpn
+
+ * agent/agent_registry.c:
+
+ - reset vr->namelen when we've finished with it
+
+2001-11-12 23:19 hardaker
+
+ * agent/helpers/all_helpers.c:
+
+ file all_helpers.c was initially added on branch NEW-AGENT-API.
+
+2001-11-12 23:19 hardaker
+
+ * agent/helpers/all_helpers.h:
+
+ file all_helpers.h was initially added on branch NEW-AGENT-API.
+
+2001-11-08 08:09 jbpn
+
+ * agent/agent_registry.c:
+
+ - better implementation of unregister_mib_table_row(), which uses
+ ranges properly in the callback (hence much more efficient for
+ AgentX).
+
+2001-11-07 09:56 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - remove now-redundant agentx_build functions
+
+2001-11-07 06:31 jbpn
+
+ * agent/mibgroup/agentx/: client.c , master_admin.c ,
+ protocol.c:
+
+ - use DEBUGMSGOIDRANGE() in a couple of places for more comprehensive
+ debugging output.
+
+ - parse unregister ranges properly, and use the range properly for
+ passing to unregister_mib_context().
+
+2001-11-07 03:33 jbpn
+
+ * snmplib/: snmp_debug.c , snmp_debug.h:
+
+ - add DEBUGSMSGOIDRANGE() macro for debugging OID ranges
+
+2001-11-06 06:04 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - reset the inclusive flag in a couple of cases, to prevent spurious
+ INCLUSIVE getNext behaviour
+
+2001-11-05 08:09 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - correct bug in range_subid tweak code
+
+2001-11-05 05:00 jbpn
+
+ * agent/agent_registry.c:
+
+ - calculate upper bound for table row registrations slightly differently
+
+2001-11-01 09:35 jbpn
+
+ * agent/mibgroup/agentx/: master.c , protocol.c ,
+ protocol.h , subagent.c:
+
+ - implement relocating buffer version of agentx_build() routines,
+ and use them.
+
+2001-11-01 09:33 jbpn
+
+ * snmplib/: snmp_api.c , snmp_api.h:
+
+ - support for relocatable buffer build callbacks via open_ex calls
+
+2001-10-30 07:19 jbpn
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - fix bug whereby interface counter is not reset, noted by (amongst
+ others) Victor Kirhenshtein in patch #474064.
+
+2001-10-30 03:24 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - make the initial buffer size 2048 in snmp_resend_request (as in
+ _sess_async_send) to make success/fail behaviour for AgentX more
+ predictable (since AgentX STILL doesn't use relocating buffers,
+ boo hiss).
+
+2001-10-29 23:16 rstory
+
+ * local/mib2c.array-auto.conf:
+
+ file mib2c.array-auto.conf was initially added on branch NEW-AGENT-API.
+
+2001-10-29 23:16 rstory
+
+ * local/mib2c.array-user.conf:
+
+ file mib2c.array-user.conf was initially added on branch NEW-AGENT-API.
+
+2001-10-28 14:53 rstory
+
+ * agent/helpers/table_array.c:
+
+ file table_array.c was initially added on branch NEW-AGENT-API.
+
+2001-10-28 14:53 rstory
+
+ * agent/helpers/table_array.h:
+
+ file table_array.h was initially added on branch NEW-AGENT-API.
+
+2001-10-28 14:50 rstory
+
+ * snmplib/oid_array.h:
+
+ file oid_array.h was initially added on branch NEW-AGENT-API.
+
+2001-10-28 14:50 rstory
+
+ * snmplib/oid_array.c:
+
+ file oid_array.c was initially added on branch NEW-AGENT-API.
+
+2001-10-26 19:41 hardaker
+
+ * agent/mibgroup/agentx/master.c:
+
+ patch from Harrie to fix function name in error message
+
+2001-10-26 06:05 jbpn
+
+ * agent/mibgroup/mibII/: interfaces.c , interfaces.h:
+
+ - add support for rx and tx drop counts (ifInDiscards and
+ ifOutDiscards) for Linux (2.2+)
+
+2001-10-26 05:57 jbpn
+
+ * aclocal.m4:
+
+ - add if_iqdrops member to struct ifnet
+
+2001-10-26 04:03 jbpn
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - add translation for atm(37) type interfaces for Linux
+
+2001-10-26 03:43 jbpn
+
+ * man/snmpd.conf.5.def:
+
+ - document the fact that setting sysLocation.0 (et al.) via a
+ syslocation (or equivalent) token makes the object read-only,
+ returning a notWritable error response if an attempt is made to
+ SET it.
+
+2001-10-24 10:07 jbpn
+
+ * agent/mibgroup/mibII/: system_mib.c (V4-2-patches.4),
+ system_mib.c:
+
+ - fix typo noted by Tim Dietz
+
+2001-10-24 08:43 jbpn
+
+ * agent/mibgroup/mibII/: system_mib.c , system_mib.h:
+
+ - implement persistence for sysLocation.0, sysContact.0 and sysName.0
+
+ - presence of a syslocation token in snmpd.conf makes sysLocation.0
+ non-writable (returns notWritable on SET attempts)
+
+2001-10-24 05:08 jbpn
+
+ * agent/mibgroup/host/: hr_swinst.c (V4-2-patches.2), hr_swinst.c:
+
+ - fix small memory leak just introduced
+
+2001-10-24 03:42 jbpn
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ - use pkginfo interface to determine type of software package more
+ specifically if possible. Slight variation on patch #473669, submitted
+ by Stefan Radman.
+
+2001-10-24 03:38 jbpn
+
+ * acconfig.h , configure.in:
+
+ - autoconf support for detecting pkginfo interface in libadm. Thanks
+ to Stefan Radman (patch #473669).
+
+2001-10-21 07:26 hardaker
+
+ * local/mib2c.iterate.conf:
+
+ file mib2c.iterate.conf was initially added on branch NEW-AGENT-API.
+
+2001-10-19 09:51 hardaker
+
+ * local/mib2c.create-dataset.conf:
+
+ file mib2c.create-dataset.conf was initially added on branch NEW-AGENT-API.
+
+2001-10-17 07:52 dts12
+
+ * FAQ (V4-2-patches.2), FAQ:
+
+ Mention the MRTG tutorial web pages
+ (as suggested by Christian Robottom Reis)
+
+2001-10-15 06:49 jbpn
+
+ * snmplib/: snmpIPXDomain.c , snmpUDPDomain.c:
+
+ - zero socket address structures. Hopefully fixes problems on NetBSD
+ noted by Joakim Althini (related to sa_len member probably??).
+
+2001-10-11 16:30 hardaker
+
+ * agent/Makefile.in , agent/mibgroup/Makefile.in ,
+ snmplib/mib.c , snmplib/snmp_api.c:
+
+ Oppses.
+
+2001-10-11 14:15 hardaker
+
+ * man/Makefile.in , man/snmp_api_errstring.3 ,
+ man/snmp_config.5.def , man/snmp_error.3 ,
+ man/snmp_perror.3 , man/snmp_sess_perror.3 ,
+ man/snmpcmd.1 , man/snmpd.1.def , man/snmpd.conf.5.def
+ , man/snmpset.1 , man/snmptranslate.1 ,
+ man/snmptrapd.8 , man/snmptrapd.conf.5.def ,
+ man/snmpwalk.1 , mibs/DISMAN-SCRIPT-MIB.txt ,
+ mibs/IANAifType-MIB.txt , mibs/Makefile.mib ,
+ mibs/README.mibs , mibs/SMUX-MIB.txt ,
+ mibs/UCD-SNMP-MIB.txt , mibs/mibfetch , mibs/rfclist
+ , mibs/smistrip , perl/SNMP/SNMP.xs ,
+ snmplib/Makefile.in , snmplib/asn1.c ,
+ snmplib/default_store.c , snmplib/int64.c ,
+ snmplib/mib.c , snmplib/mib.h , snmplib/mt_support.c
+ , snmplib/mt_support.h , snmplib/parse.c ,
+ snmplib/scapi.c , snmplib/scapi.h , snmplib/snmp_api.c
+ , snmplib/snmp_auth.c , snmplib/snmp_client.c ,
+ snmplib/snmp_debug.c , snmplib/snmpusm.c ,
+ snmplib/snmpv3.c , snmplib/system.c , snmplib/tools.c
+ , snmplib/ucd-snmp-includes.h , testing/Makefile.in
+ , win32/config.h , win32/config.h.borland:
+
+ massive merge from the patches branch to the main line.
+
+2001-10-11 14:01 hardaker
+
+ * COPYING , ChangeLog , FAQ , Makefile.in ,
+ NEWS , README , acconfig.h , aclocal.m4 ,
+ config.guess , config.h.in , config.sub ,
+ configure , configure.in , ltconfig , ltmain.sh
+ , makefileindepend.pl , sedscript.in , version.h
+ , agent/Makefile.in , agent/agent_index.c ,
+ agent/agent_read_config.c , agent/agent_read_config.h ,
+ agent/agent_registry.c , agent/agent_trap.c ,
+ agent/snmp_agent.h , agent/snmp_vars.c ,
+ agent/snmp_vars.h , agent/snmpd.c ,
+ agent/mibgroup/Makefile.in , agent/mibgroup/kernel_sunos5.c
+ , agent/mibgroup/mibincl.h , agent/mibgroup/ucd_snmp.h
+ , agent/mibgroup/util_funcs.c ,
+ agent/mibgroup/examples/example.c ,
+ agent/mibgroup/host/hr_disk.c ,
+ agent/mibgroup/host/hr_partition.c ,
+ agent/mibgroup/host/hr_print.c ,
+ agent/mibgroup/host/hr_storage.c ,
+ agent/mibgroup/host/hr_swrun.c ,
+ agent/mibgroup/host/hr_system.c , agent/mibgroup/mibII/at.c
+ , agent/mibgroup/mibII/at.h ,
+ agent/mibgroup/mibII/icmp.c ,
+ agent/mibgroup/mibII/interfaces.c , agent/mibgroup/mibII/ip.c
+ , agent/mibgroup/mibII/ipAddr.c ,
+ agent/mibgroup/mibII/mta_sendmail.h ,
+ agent/mibgroup/mibII/route_write.c ,
+ agent/mibgroup/mibII/sysORTable.c ,
+ agent/mibgroup/mibII/system_mib.c ,
+ agent/mibgroup/mibII/tcp.c , agent/mibgroup/mibII/tcpTable.c
+ , agent/mibgroup/mibII/udp.c ,
+ agent/mibgroup/mibII/udpTable.c ,
+ agent/mibgroup/mibII/var_route.c ,
+ agent/mibgroup/notification/snmpNotifyFilterProfileTable.c ,
+ agent/mibgroup/notification/snmpNotifyFilterTable.c ,
+ agent/mibgroup/notification/snmpNotifyTable.c ,
+ agent/mibgroup/smux/smux.c ,
+ agent/mibgroup/target/snmpTargetAddrEntry.c ,
+ agent/mibgroup/target/snmpTargetParamsEntry.c ,
+ agent/mibgroup/ucd-snmp/diskio.c ,
+ agent/mibgroup/ucd-snmp/dlmod.c ,
+ agent/mibgroup/ucd-snmp/file.c ,
+ agent/mibgroup/ucd-snmp/memory.c ,
+ agent/mibgroup/ucd-snmp/memory.h ,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c ,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.h ,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c ,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.h ,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c ,
+ agent/mibgroup/ucd-snmp/memory_solaris2.h ,
+ agent/mibgroup/ucd-snmp/proxy.c ,
+ agent/mibgroup/ucd-snmp/vmstat.c ,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c ,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.h ,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c ,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c ,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c , apps/Makefile.in
+ , apps/snmpdelta.c , apps/snmpdf.c ,
+ apps/snmpget.c , apps/snmpgetnext.c , apps/snmpset.c
+ , apps/snmpstatus.c , apps/snmptable.c ,
+ apps/snmptest.c , apps/snmptranslate.c ,
+ apps/snmptrap.c , apps/snmptrapd.c ,
+ apps/snmptrapd_log.c , apps/snmpusm.c , apps/snmpvacm.c
+ , apps/snmpwalk.c , apps/snmpnetstat/Makefile.in
+ , local/mib2c.conf , local/mib2c.vartypes.conf ,
+ local/pass_persisttest , local/tkmib:
+
+ massive merge from the patches branch to the main line.
+
+2001-10-09 07:14 hardaker
+
+ * CodingStyle:
+
+ Sometimes we feel like a -nut
+
+2001-10-09 06:15 jbpn
+
+ * agent/agent_registry.c:
+
+ - properly account for the length of the suffix in the variable
+ table in register_mib_table_row()
+
+2001-10-08 08:53 jbpn
+
+ * agent/mibgroup/agentx/client.c:
+
+ - declare version_sysoid_len as extern INT not extern oid, so as to
+ match its actual definition in sytem_mib.c. This caused all kinds of
+ fun & games on Linux on a Alpha.
+
+2001-10-04 08:31 jbpn
+
+ * snmplib/: callback.c , callback.h:
+
+ - add function snmp_callback_list() to return list of callbacks for a
+ given <major, minor> pair.
+
+2001-10-04 07:14 hardaker
+
+ * local/pass_persisttest:
+
+ file pass_persisttest was initially added on branch V4-2-patches.
+
+2001-10-03 05:42 jbpn
+
+ * snmplib/keytools.c:
+
+ - change expression at l. 415 from:
+
+ *kcstring++ = *kcstring ^ *newkey++;
+
+ which has undefined behaviour to:
+
+ *kcstring++ ^= *newkey++;
+
+ which is okay (since *kcstring is only evaluated once). Similarly
+ at l. 530. The previous constructs cause warnings with GCC3 and
+ some other compilers. Thanks to Niel Markwick who noted this in
+ bug #465969.
+
+2001-10-03 03:11 jbpn
+
+ * agent/agent_registry.c:
+
+ - do SNMPD_CALLBACK_UNREGISTER_OID callbacks in
+ unregister_mibs_by_session() -- called when AgentX subagents
+ disappear.
+
+2001-10-02 06:01 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - don't send ASN_PRIV_INCL_RANGE and ASN_PRIV_EXCL_RANGE on-the-wire
+
+2001-09-26 08:03 jbpn
+
+ * agent/agent_registry.c:
+
+ - allow split_subtree() to do a split in the middle of a column,
+ keeping the relevant variable in both the old tree and the new
+ tree (arises in AgentX row registrations).
+
+ - patch from Damian Gilmurray for register_mib_table_row() which
+ allows it to cope with non-zero length variables and also
+ non-contiguous OIDs for adjacent columns.
+
+ - rewritten dump_registry() that uses reallocating print functions
+ and also prints out variable lists.
+
+2001-09-26 07:45 jbpn
+
+ * agent/snmp_vars.c:
+
+ - allow for the possibility of subtree name being longer than
+ requested name when calculating the suffix for variable matching.
+
+ - be strict about subtree chunks being inclusive of the start OID
+ and exclusive of the end OID (shows up big time in AgentX).
+
+2001-09-26 07:22 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - don't do getNext requests on exclusive searchRanges that begin in
+ a tree marked as a fully-qualified instance (they are doomed to
+ fail). Skip to the next part of the tree straight away.
+
+2001-09-26 07:19 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - bring debugging tokens into line with rest of AgentX code
+
+2001-09-25 08:15 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - reinstate a missing space character
+
+2001-09-25 03:58 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - remove spurious cast
+
+2001-09-25 03:45 jbpn
+
+ * apps/snmptrapd.c:
+
+ - fix possible infelicity when printing and syslogging (not sure this is
+ actually possible but)
+
+2001-09-25 03:09 jbpn
+
+ * snmplib/mib.c:
+
+ - integrate some changes from the V4-2-patches branch: Harrie's
+ prototypes and Wes's fix for bug #463226.
+
+2001-09-25 03:01 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - fix signedness of time stuff
+
+2001-09-25 02:47 jbpn
+
+ * snmplib/: snmp_logging.c , snmp_logging.h:
+
+ - make argument of snmp_enable_syslog_ident const
+
+ - don't strdup DEFAULT_LOG_ID if a NULL arg is given
+
+2001-09-24 09:39 jbpn
+
+ * apps/snmptrapd.c:
+
+ - make use of rewritten output functions in snmptrapd_log.c which
+ avoid fixed length buffers.
+
+ - fix bug noted in support request #456646 (custom trap format was
+ being ignored for v2 traps and informs). Thanks to
+ G.Principato@motorola.com for spotting this one.
+
+ - correct usage for -P option to reflect that it causes output on
+ stderr not stdout.
+
+2001-09-24 09:36 jbpn
+
+ * apps/: snmptrapd_log.c , snmptrapd_log.h:
+
+ - rewrite of output functions to avoid use of fixed-length buffers
+
+2001-09-20 13:04 hardaker
+
+ * README , agent/mibgroup/ucd-snmp/logmatch.c ,
+ agent/mibgroup/ucd-snmp/logmatch.h , mibs/UCD-SNMP-MIB.txt:
+
+ new logmatch mib from Stephan Wenzel.
+
+2001-09-15 08:40 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - override exclusive searchRange getNext operations when retrying
+ operations
+
+2001-09-15 08:39 jbpn
+
+ * agent/: snmp_agent.c , snmp_agent.h:
+
+ - improved support for AgentX-style inclusive searchRange getNext
+
+2001-09-14 14:43 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ patch #443115 from Yimin Ge: diskio support for freebsd4
+
+2001-09-14 14:34 hardaker
+
+ * apps/snmptrapd.c , snmplib/snmp_logging.c ,
+ snmplib/snmp_logging.h:
+
+ Patch #440320 from Mark Ferlatte:
+
+ 1) Adds a new function to the snmp_logging API
+ (snmp_enable_syslog_ident(char *ident))
+
+ 2) Ports snmptrapd to use the existing snmp_logging API instead of
+ using syslog directly.
+
+ 3) Ports snmp_logging.[ch] to use the Win32 Event Log when compiled on
+ Win32. I didn't update the Visual C project files, because I only
+ have access to a newer version of VC, and I didn't know if you
+ wanted them updated. The advapi32 library needs to be added to the
+ project in order for this to work on Win32 (that's where the event
+ log API is).
+
+2001-09-14 14:22 hardaker
+
+ * config.h.in , configure:
+
+ I, uh, cough, uh forgot to run autoconf/autoheader. Dave: don't kill me.
+
+2001-09-14 14:19 hardaker
+
+ * perl/SNMP/: SNMP.pm , SNMP.xs:
+
+ Patch #428884: Add -PR like option to perl module (from Joe Clarke).
+
+2001-09-14 14:08 hardaker
+
+ * README , acconfig.h , configure.in ,
+ agent/agent_trap.c , agent/mibgroup/agentx/client.c ,
+ agent/mibgroup/host/hr_filesys.c ,
+ agent/mibgroup/host/hr_swinst.c ,
+ agent/mibgroup/mibII/system_mib.c ,
+ agent/mibgroup/mibJJ/system_mib.c ,
+ agent/mibgroup/ucd-snmp/disk.c ,
+ agent/mibgroup/ucd-snmp/errormib.c ,
+ agent/mibgroup/ucd-snmp/extensible.c ,
+ agent/mibgroup/ucd-snmp/file.c ,
+ agent/mibgroup/ucd-snmp/loadave.c ,
+ agent/mibgroup/ucd-snmp/memory.c ,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c ,
+ agent/mibgroup/ucd-snmp/memory_netbsd1.c ,
+ agent/mibgroup/ucd-snmp/memory_solaris2.c ,
+ agent/mibgroup/ucd-snmp/proc.c ,
+ agent/mibgroup/ucd-snmp/versioninfo.c ,
+ agent/mibgroup/ucd-snmp/vmstat.c ,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c ,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c ,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c ,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c ,
+ snmplib/snmpAAL5PVCDomain.c , snmplib/snmpAAL5PVCDomain.h
+ , snmplib/snmpUnixDomain.c , snmplib/snmpUnixDomain.h
+ , snmplib/snmp_api.h , snmplib/snmpv3.c ,
+ snmplib/asn1.h:
+
+ Applied a modified version of patch #427343 from Harrie:
+ make enterprise ID relocatable where legal to do so
+
+2001-09-14 12:09 hardaker
+
+ * agent/: Makefile.in , mibgroup/Makefile.in:
+
+ Alternative solution to patch #312694:
+ move date_n_time utilities to snmplib/snmp-tc.c.
+
+2001-09-14 12:08 hardaker
+
+ * agent/mibgroup/host/: hr_utils.c , hr_utils.h:
+
+ removed. Functionality moved to snmplib/snmp-tc.[ch]
+
+2001-09-14 12:06 hardaker
+
+ * agent/mibgroup/host.h , agent/mibgroup/host/hr_filesys.c
+ , agent/mibgroup/host/hr_swinst.c ,
+ agent/mibgroup/host/hr_system.c ,
+ agent/mibgroup/host/hr_system.h ,
+ agent/mibgroup/host/hr_utils.c , snmplib/Makefile.in ,
+ snmplib/snmp-tc.c , snmplib/snmp-tc.h:
+
+ Alternative solution to patch #312694:
+ move date_n_time utilities to snmplib/snmp-tc.c.
+
+2001-09-14 09:48 hardaker
+
+ * win32/config.h.borland:
+
+ file config.h.borland was initially added on branch V4-2-patches.
+
+2001-09-14 06:19 jbpn
+
+ * agent/mibgroup/agentx/: master.c , master_request.c ,
+ master_request.h:
+
+ - use inclusive search range only when appropriate for getNext
+ queries
+
+2001-09-12 06:47 hardaker
+
+ * snmplib/snmpCallbackDomain.c:
+
+ file snmpCallbackDomain.c was initially added on branch NEW-AGENT-API.
+
+2001-09-12 06:47 hardaker
+
+ * snmplib/snmpCallbackDomain.h:
+
+ file snmpCallbackDomain.h was initially added on branch NEW-AGENT-API.
+
+2001-09-06 07:40 jbpn
+
+ * agent/: snmp_agent.c , snmp_vars.c:
+
+ - if include bit is set in an AgentX SearchRange (hence type of varbind
+ is ASN_PRIV_INCL_RANGE), try an exact query first because an object
+ whose name is lexi-equal is a valid response; if exact query fails
+ then fall back to an inexact query.
+
+2001-09-06 07:38 jbpn
+
+ * agent/mibgroup/agentx/: master.c , master_request.c ,
+ protocol.c , subagent.c:
+
+ - oops, used INCL/EXCL wrong way round in a couple of places
+
+ - better test for scoping requirements in subagent
+
+2001-09-04 07:14 jbpn
+
+ * agent/snmpd.c:
+
+ - add missing break; after processing -P option, noted by Botond
+ Tarnay (see patch #458327)
+
+2001-08-28 03:04 jbpn
+
+ * agent/: snmp_agent.c (V4-2-patches.7), snmp_agent.c:
+
+ - add missing #include <tcpd.h> if using libwrap, noted by Nathan
+ Neulinger (patch #453831).
+
+2001-08-28 02:38 jbpn
+
+ * agent/: snmpd.c (V4-2-patches.1), snmpd.c:
+
+ - avoid use of pre-processor directives inside printf() call, which
+ is a macro in glibc, making this an undefined behaviour
+ construct (which GCC 3.0 refuses to compile). See bug #455804 for
+ further details.
+
+2001-08-24 10:00 rstory
+
+ * snmplib/data_list.h:
+
+ file data_list.h was initially added on branch NEW-AGENT-API.
+
+2001-08-24 10:00 rstory
+
+ * snmplib/data_list.c:
+
+ file data_list.c was initially added on branch NEW-AGENT-API.
+
+2001-08-22 08:45 jbpn
+
+ * agent/: snmp_vars.c , mibgroup/agentx/master.c ,
+ mibgroup/agentx/master_request.c , mibgroup/agentx/protocol.c
+ , mibgroup/agentx/subagent.c:
+
+ - add checking that results to be returned to master agent are in
+ requested scope (if any) (getBulk not yet done)
+
+2001-08-15 09:31 jbpn
+
+ * snmplib/snmp_debug.c:
+
+ - use sprint_realloc_objid in debugmsg_oid to print long OIDs.
+
+2001-08-15 08:37 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - increment the value of snmpInBadCommunityUses when attempting an
+ operation not permitted by the given community, per RFC 1907.
+
+2001-08-15 08:34 jbpn
+
+ * agent/snmp_agent.c:
+
+ - when translating the v2+ error-status value authorizationError
+ into noSuchName for a v1 session, increment the value of
+ snmpInBadCommunityUses, per RFC 2576.
+
+2001-08-14 03:22 jbpn
+
+ * snmplib/snmp_client.c:
+
+ - in snmp_set_var_objid(), try to detect a previously-malloc()ed
+ buffer for the variable name, and free() it, to avoid memory
+ leaks.
+
+2001-08-13 03:47 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ - use Win32 calls to change blocking state of sockets if
+ appropriate. Thanks to Joerg Mattes for help debugging this.
+
+2001-08-13 03:37 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - perform an SNMP_CALLBACK_OP_DISCONNECT and close the connection if
+ we get an error on a stream receive, as well as if it is closed in
+ an orderly fashion. This makes life easier on Win32 inparticular.
+ Thanks to Joerg Mattes for help with debugging this.
+
+2001-08-09 03:10 hardaker
+
+ * agent/helpers/table_dataset.c:
+
+ file table_dataset.c was initially added on branch NEW-AGENT-API.
+
+2001-08-09 03:10 hardaker
+
+ * agent/helpers/table_dataset.h:
+
+ file table_dataset.h was initially added on branch NEW-AGENT-API.
+
+2001-08-08 01:42 hardaker
+
+ * agent/helpers/table_data.h:
+
+ file table_data.h was initially added on branch NEW-AGENT-API.
+
+2001-08-08 01:42 hardaker
+
+ * agent/helpers/table_data.c:
+
+ file table_data.c was initially added on branch NEW-AGENT-API.
+
+2001-08-07 13:59 nba
+
+ * man/snmp_perror.3:
+
+ file snmp_perror.3 was initially added on branch V4-2-patches.
+
+2001-08-07 13:59 nba
+
+ * man/snmp_api_errstring.3:
+
+ file snmp_api_errstring.3 was initially added on branch V4-2-patches.
+
+2001-08-07 13:59 nba
+
+ * man/snmp_sess_perror.3:
+
+ file snmp_sess_perror.3 was initially added on branch V4-2-patches.
+
+2001-08-07 13:59 nba
+
+ * man/snmp_error.3:
+
+ file snmp_error.3 was initially added on branch V4-2-patches.
+
+2001-08-06 04:29 jbpn
+
+ * agent/snmpd.c:
+
+ - fix for potential buffer overflow in logfile argument handling,
+ noted by Anonymous (bug #448243). Also use a large enough buffer
+ to handle filenames of length PATH_MAX (if possible).
+
+2001-07-30 10:05 jbpn
+
+ * agent/mibgroup/mibII/var_route.c , snmplib/snmp_api.c
+ , snmplib/snmp_api.h:
+
+ - move snmp_socket_length function to agent/mibgroup/mibII/var_route.c
+ from snmp_api.c -- this is the only remaining place that uses this
+ function, which certainly doesn't belong in snmp_api.c after the
+ transport abstraction malarkey.
+
+2001-07-30 09:22 hardaker
+
+ * agent/agent_handler.c:
+
+ file agent_handler.c was initially added on branch NEW-AGENT-API.
+
+2001-07-30 09:22 hardaker
+
+ * agent/agent_handler.h:
+
+ file agent_handler.h was initially added on branch NEW-AGENT-API.
+
+2001-07-30 07:06 jbpn
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ - try to return invalid(2) for the ipRouteType column if the route
+ is not up. See bug #426710, reported by pjweber.
+
+2001-07-27 07:32 jbpn
+
+ * snmplib/snmpv3.c:
+
+ - set defaultAuthType to usmHMACSHA1AuthProtocol if SHA specified
+ (was set to usmHMACMD5AuthProtocol in this case). Spotted by
+ William Kennemer (bug #444860)
+
+2001-07-27 06:59 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - change to handle_agentx_response ONLY to send NEWLY delegated
+ requests after processing a successful response. This is achieved
+ by saving the value of asp->outstanding_requests and temporarily
+ setting it to NULL. After processing all varbinds in the
+ response, therefore, asp->outstanding_requests contains only newly
+ delegated requests, if any. After sending these, the new requests
+ are merged with the saved queue.
+
+ This fixes a bug that arises if you request variables from two or
+ more separate subagents simultaneously. What used to happen is
+ that, upon receiving the first response, the master agent would
+ notice that it had an outstanding request, and retransmit it.
+ Then the second response arrives, and the master agent sends the
+ reply to the (SNMP) requester and frees the requests (including
+ callback data). Finally, another AgentX response (to the
+ erroneously transmitted request) arrives and the callback is
+ called referencing deallocated memory, which causes a segfault.
+
+2001-07-26 07:28 dts12
+
+ * snmplib/: snmp_api.c (NEW-LIBRARY-API.4), snmp_api.c:
+
+ Adding a 'double'-valued varbind isn't inherently an internal error!
+
+2001-07-25 05:47 jbpn
+
+ * agent/snmpd.c:
+
+ - disable stderr logging (if requested) before calling init_mib_modules().
+ This should fix the problem noted by Nigel Metheringham in bug #418857
+ whereby the AgentX master module prints a message to stderr which causes
+ a SIGPIPE when the agent is started as a daemon.
+
+2001-07-25 02:18 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - initialise buffers to zero in handle_wrap_fmt, to avoid garbage in
+ display of security parameters, as noted by William Frauenhofer
+ (bug #437231).
+
+ - add closing parenthesis after (via <address> in format_plain_trap
+
+2001-07-23 07:53 jbpn
+
+ * snmplib/tools.c:
+
+ - remove excessive debugging from snmp_(re)alloc functions
+
+2001-07-23 04:37 jbpn
+
+ * snmplib/snmpUnixDomain.c:
+
+ - minor fix to debugging output to print losing path correctly when
+ a remote connect fails.
+
+2001-07-17 09:56 hardaker
+
+ * CodingStyle:
+
+ update for naming conventions and for structure definitions.
+
+2001-07-17 09:07 hardaker
+
+ * CodingStyle:
+
+ initial coding style guideline document.
+
+2001-07-17 09:02 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - remember to remove_trap_session(our-session-with-master-agent)
+ if the master agent session goes away, because otherwise you
+ may subsequently try to use it, which will probably dump core,
+ and is certainly an error.
+
+ - also change when trap session is registered to being immediately
+ the session is opened so traps can be sent, e.g. from the
+ INDEX_START callback (for example linkUp traps in subagents that
+ register a row of ifTable).
+
+2001-07-17 08:48 jbpn
+
+ * agent/agent_trap.c:
+
+ - change to remove_trap_session(), so as not to close an SNMP
+ session simply because we are removing it from the trap_sink
+ list. The rationale is that the session may still be in use for
+ other purposes, or (more to the point) you may be calling this
+ function from the session's callback (from where closing the
+ session isn't a good idea).
+
+2001-07-13 06:02 dts12
+
+ * snmplib/netsnmp.h:
+
+ file netsnmp.h was initially added on branch NEW-LIBRARY-API.
+
+2001-07-12 12:09 hardaker
+
+ * agent/helpers/table_iterator.c:
+
+ file table_iterator.c was initially added on branch NEW-AGENT-API.
+
+2001-07-12 12:09 hardaker
+
+ * agent/helpers/table_iterator.h:
+
+ file table_iterator.h was initially added on branch NEW-AGENT-API.
+
+2001-07-12 02:21 jbpn
+
+ * agent/: snmp_agent.c , mibgroup/agentx/client.c ,
+ mibgroup/agentx/master_request.c , mibgroup/agentx/protocol.c
+ , mibgroup/agentx/subagent.c:
+
+ - fix for bug #439094, reported by Evert-Jan van Tuijl, whereby
+ the AgentX master agent expects a response to an agentx-CleanupSet-PDU
+ message (incorrectly). This only shows up when testing against other
+ subagents (e.g. jax) because the net-snmp subagent sends a response
+ to the agentx-CleanupSet-PDU (incorrectly).
+
+2001-07-10 16:10 hardaker
+
+ * agent/mibgroup/mibII/vacm_context.c:
+
+ file vacm_context.c was initially added on branch NEW-AGENT-API.
+
+2001-07-10 16:10 hardaker
+
+ * agent/mibgroup/mibII/vacm_context.h:
+
+ file vacm_context.h was initially added on branch NEW-AGENT-API.
+
+2001-07-10 16:06 hardaker
+
+ * agent/mibgroup/target/target_counters.c:
+
+ file target_counters.c was initially added on branch NEW-AGENT-API.
+
+2001-07-10 16:06 hardaker
+
+ * agent/mibgroup/target/target_counters.h:
+
+ file target_counters.h was initially added on branch NEW-AGENT-API.
+
+2001-07-05 06:11 jbpn
+
+ * agent/mibgroup/mibII/: interfaces.c , interfaces.h:
+
+ - make Interface_Scan_Get_Count non-static as it's very useful
+
+2001-07-05 03:40 jbpn
+
+ * snmplib/snmpusm.c:
+
+ - free the cached security parameters when we have a parse error
+ on input, otherwise we leak memory (triggered by SC 3.0.13.{2,3}).
+
+2001-07-04 09:51 uid44810
+
+ * snmplib/snmp_api.c:
+
+ - catch some malformed SNMPv3 packets
+
+2001-07-04 07:42 uid44810
+
+ * snmplib/snmp_api.c:
+
+ - fix bad mistake in snmpv3_scopedPDU_header_realloc_rbuild which
+ was encoding the wrong length into the ScopedPDU SEQUENCE header
+ (wasn't including length of actual data, i.e. PDU!). Totally my
+ fault -- introduced when changing over to reallocating buffer
+ type functions. Amazing this hasn't caused all sorts of trouble
+ for people!
+
+2001-07-02 18:04 rstory
+
+ * snmplib/snmp-tc.c:
+
+ file snmp-tc.c was initially added on branch NEW-AGENT-API.
+
+2001-07-02 09:33 jbpn
+
+ * agent/snmp_agent.c:
+
+ - slight change to generation of error-index:
+
+ - explicitly test for error-status == noError, and set error-index
+ to zero in this case;
+
+ - otherwise use the cached value;
+
+ - don't zero the cached value in handle_var_list if handle_one_var
+ returns noError
+
+ - this copes properly with SET requests, where a failing SET will have
+ a FREE phase which will typically return noError. Previously this
+ would erroneously cause the error-index to be set to zero.
+
+2001-07-02 08:14 jbpn
+
+ * agent/mibgroup/util_funcs.c:
+
+ - fix bad behaviour in header_simple_table when the index is
+ equal to ULONG_MAX
+
+2001-06-28 10:01 jbpn
+
+ * agent/mibgroup/snmpv3/usmUser.c:
+
+ - change sense of snmp_oid_compare() result check in var_usmUser
+ to do lexi-ordering correctly
+
+2001-06-28 07:20 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - count more v1/v2c parse errors (SC 1.1.12.10)
+
+2001-06-28 05:56 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - check that version field of PDU is of integer type rather than just
+ assuming it is (SC 1.1.12.2.1)
+
+2001-06-28 04:40 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - increment snmpInBadCommunityNames when we see unknown community
+ names, per RFC1907
+
+2001-06-27 08:09 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - make use of new function register_mib_detach() to mark all our
+ nodes as detached when we get a transport disconnect indication.
+
+2001-06-27 08:07 jbpn
+
+ * agent/: agent_registry.c , agent_registry.h ,
+ var_struct.h:
+
+ - add additional flag to subtree structure that subagents can use
+ to determine whether an attempt has been made to register and OID
+ with a master agent during a session's lifetime. This allows
+ manual re-registration and automatic re-registration to be mixed
+ within a subagent (perhaps because you are doing index stuff).
+
+ - add function register_mib_detach() which unsets this flag for
+ all known nodes (subagent would typically call this on disconnect
+ indication).
+
+ - add function unregister_mib_table_row()
+
+ - correct bad recursive behaviour in register_mib_reattach() which
+ used to try to re-register N nodes N! times. Once will normally
+ be enough.
+
+ - change to dump_registry() format to include hex display of
+ flags field.
+
+2001-06-26 09:26 dts12
+
+ * FAQ:
+
+ Fix error in SNMPv2 trap examples (Identified by Diwakar Shetty).
+
+2001-06-26 02:35 jbpn
+
+ * snmplib/mib.c:
+
+ - corrected sense of dump_realloc_oid_to_string() return value
+ checks, as spotted by Robert Story.
+
+2001-06-25 06:30 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - small tweak in handle_agentx_response() when retrying unfulfilled
+ requests: continue from the "start" OID of the next node of the
+ tree, not from the "name" OID, which causes looping.
+
+2001-06-21 09:51 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - handle "holes" in rows of tables that are handled by subagents
+
+ Since the fully-qualified instance is registered, we interpret
+ a return of noSuchInstance when doing an inexact query as meaning
+ we should retry the query.
+
+2001-06-21 02:50 jbpn
+
+ * snmplib/mib.h:
+
+ - forgot to commit at the same time as last mib.c commit; updated
+ prototype for sprint_realloc_hinted_integer
+
+2001-06-20 06:44 jbpn
+
+ * agent/: agent_index.c , agent_index.h:
+
+ - add function count_indexes which returns the number of indexes
+ allocated for a given OID. This can be useful for implementing
+ "row count" objects, e.g. ifNumber.
+
+2001-06-20 05:37 jbpn
+
+ * agent/: agent_callbacks.h , mibgroup/agentx/subagent.c:
+
+ - add SNMPD_CALLBACK_INDEX_START and SNMPD_CALLBACK_INDEX_STOP
+ callbacks which may be used to manage index allocations.
+
+ Master agent should probably call these callbacks too, although
+ it's a bit of a degenerate case.
+
+2001-06-19 09:44 jbpn
+
+ * agent/agent_index.c:
+
+ - use an explicit fieled "allocated" in snmp_index structure to
+ indicate whether or not a value is currently allocated, rather
+ than overloading a NULL session to mean that it is not.
+
+ This allows startup code in a master agent to pre-register indices
+ when there are no sessions open.
+
+2001-06-19 08:34 jbpn
+
+ * agent/mibgroup/agentx/: master_admin.c , master_request.c:
+
+ - keep the value of NETWORK_BYTE_ORDER from h.flags in the
+ agentx-Open-PDU and use it for subsequent master-initiated
+ AgentX protocol operations, per RFC 2741 (section 7.1.1,
+ paragraph 4).
+
+ For now, we are storing this in the flags field of a
+ subsession. This is likely to stop working if the flags
+ definitions change (i.e. it's not a great solution)
+
+ - Thanks to Peter Korsten (severityone at users.sourceforge.net)
+ for identifying this bug, and for help debugging this fix.
+
+2001-06-19 02:35 jbpn
+
+ * snmplib/mib.c:
+
+ - reinstate space between numbers and units.
+
+ - respect DISPLAY-HINTs for Unsigned32, Gauge, Gauge32 types.
+
+2001-06-13 03:29 jbpn
+
+ * agent/snmp_vars.c:
+
+ - minor change to debugging to reduce "noise level" from Purify
+
+2001-06-12 10:35 jbpn
+
+ * agent/snmp_agent.c:
+
+ - handle non-repeaters and max-repetitions field values of < 0 (by
+ setting them to 0, per RFC 1905)
+
+2001-06-12 10:05 jbpn
+
+ * agent/snmp_agent.c:
+
+ - fix bug that caused a null pointer to be followed when processing a
+ GETBULK request with non-repeaters > 0, max-repetitions == 0 and no
+ varbinds in the request.
+
+2001-06-12 07:24 dts12
+
+ * snmplib/: read_config.c (V4-2-patches.1), read_config.c:
+
+ Fix 'unregister_config_handler' to handle tags other
+ than the first in the list. (Thanks to Paul Serice).
+
+2001-06-06 07:39 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - free() return value from register_index() calls
+
+2001-06-06 07:37 jbpn
+
+ * agent/agent_index.c:
+
+ - more uniform return value from register_index(): make it always a
+ varbind which the caller is responsible for free()ing, or else NULL.
+
+2001-06-05 03:10 jbpn
+
+ * agent/agent_index.c:
+
+ - fix for index allocation, such that requests for specific indices which
+ have previously been allocated, but are not currently in use, succeed.
+
+ - more debugging output.
+
+2001-06-01 08:37 hardaker
+
+ * agent/mibgroup/testdelayed.h:
+
+ file testdelayed.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:37 hardaker
+
+ * agent/mibgroup/testhandler.h:
+
+ file testhandler.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:37 hardaker
+
+ * agent/mibgroup/testdelayed.c:
+
+ file testdelayed.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:37 hardaker
+
+ * agent/mibgroup/testhandler.c:
+
+ file testhandler.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/table.c:
+
+ file table.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/multiplexer.h:
+
+ file multiplexer.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/old_api.c:
+
+ file old_api.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/null.h:
+
+ file null.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/instance.c:
+
+ file instance.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/set_helper.h:
+
+ file set_helper.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/table.h:
+
+ file table.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/read_only.c:
+
+ file read_only.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/serialize.c:
+
+ file serialize.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/old_api.h:
+
+ file old_api.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/instance.h:
+
+ file instance.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/read_only.h:
+
+ file read_only.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/.cvsignore:
+
+ file .cvsignore was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/multiplexer.c:
+
+ file multiplexer.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/Makefile.in:
+
+ file Makefile.in was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/serialize.h:
+
+ file serialize.h was initially added on branch NEW-AGENT-API.
+
+2001-06-01 08:36 hardaker
+
+ * agent/helpers/null.c:
+
+ file null.c was initially added on branch NEW-AGENT-API.
+
+2001-06-01 07:39 hardaker
+
+ * local/tkmib:
+
+ misc fixes for oid formatting problems.
+
+2001-06-01 07:37 hardaker
+
+ * README:
+
+ add Martin Oldfield.
+
+2001-06-01 02:50 jbpn
+
+ * agent/: snmp_agent.c , snmp_agent.h ,
+ mibgroup/agentx/master_request.c:
+
+ - fix for absolutely mind-bending memory leak when AgentX sessions
+ timeout. agent_session_list holds a queue of sessions with outstanding
+ requests. When a session times out, this must be scavenged to make
+ sure the sessions that have timed out, and their associated requests
+ are free()d.
+
+2001-05-30 03:28 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - retry initial open of AgentX master socket if AgentX pings are
+ enabled (should really be a separate default_store option but
+ never mind)
+
+2001-05-30 03:27 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - more aggressive handling of timeout conditions (also fix memory
+ leak)
+
+2001-05-30 03:19 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - more informative debugging
+
+2001-05-30 02:37 jbpn
+
+ * snmplib/snmp_alarm.c:
+
+ - remove noisy debugging
+
+2001-05-30 02:37 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - more compact debugging in _sess_select_info
+
+2001-05-30 02:34 jbpn
+
+ * agent/agent_registry.c:
+
+ - copy flags in reattach_subtree (needed for AgentX row registration)
+
+2001-05-28 08:54 jbpn
+
+ * agent/mibgroup/agentx/: client.c , client.h ,
+ master_admin.c , master_request.c , subagent.c:
+
+ - stuff from patch #416026 (submitted by anonymous) for AgentX row
+ registration
+
+2001-05-28 08:49 jbpn
+
+ * agent/snmp_vars.c:
+
+ - tweak to getStatPtr to handle getNext operations in combination with
+ FULLY_QUALIFIED_INSTANCE nodes (which arise in AgentX row registration).
+
+2001-05-28 08:46 jbpn
+
+ * agent/: agent_registry.c , agent_registry.h ,
+ var_struct.h:
+
+ - stuff from patch #416026 (submitted by anonymous) for AgentX row
+ registration
+
+2001-05-28 08:42 jbpn
+
+ * agent/mibgroup/agentx/master.c:
+
+ - small tweak to debugging output
+
+2001-05-28 08:39 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - do parsing/building of ASN_PRIV_EXCL_RANGE and
+ ASN_PRIV_INCL_RANGE types *properly*.
+
+2001-05-28 04:40 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - fix possible memory leak in _sess_async_send error cases
+
+2001-05-28 04:27 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - add parsing/building of ASN_PRIV_EXCL_RANGE and
+ ASN_PRIV_INCL_RANGE types.
+
+2001-05-23 09:20 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - respect msgMaxSize in received v3 PDUs (in the weak sense that if
+ the serialized response PDU is more than it, we don't send it)
+
+ - removed functions ascii_to_binary, hex_to_binary. Using these
+ functions is really bad, since they will happily overflow buffers.
+ The superior alternatives, defined in tools.h, are
+ snmp_{decimal, hex}_to_binary.
+
+2001-05-23 09:00 jbpn
+
+ * apps/snmpstatus.c:
+
+ - remove unused variable struct sockaddr_in respIp
+
+2001-05-23 08:58 jbpn
+
+ * agent/snmp_agent.c:
+
+ - early bail out of handle_snmp_packet() if the callback operation
+ type is not SNMP_CALLBACK_OP_RECEIVED_MESSAGE. In practice, the
+ only way this arises currently is when a stream transport based
+ connection goes away and a SNMP_CALLBACK_OP_DISCONNECT occurs.
+
+2001-05-23 08:44 jbpn
+
+ * snmplib/snmp_api.h:
+
+ - new fields rcvMsgMaxSize and sndMsgMaxSize in snmp_session
+ structure to support v3 msgMaxSize
+
+ - removed functions ascii_to_binary, hex_to_binary from public
+ interface. Using these functions is really bad, since they
+ will happily overflow buffers. The superior alternatives,
+ defined in tools.h, are snmp_{decimal, hex}_to_binary.
+
+2001-05-23 08:37 jbpn
+
+ * snmplib/: snmpAAL5PVCDomain.c , snmpIPXDomain.c ,
+ snmpTCPDomain.c , snmpUDPDomain.c , snmpUnixDomain.c
+ , snmp_transport.c , snmp_transport.h:
+
+ - add msgMaxSize field to snmp_transport structure to support
+ msgMaxSize negotiation for v3
+
+2001-05-23 07:14 jbpn
+
+ * snmplib/scapi.c:
+
+ - use sprint_realloc_hexstring instead of sprint_hexstring for
+ SNMP_TESTING_CODE debugging output of IV, key and plaintext
+
+2001-05-23 05:25 jbpn
+
+ * apps/snmptest.c:
+
+ - free() buffers in a couple of error cases; no big deal
+
+2001-05-23 04:39 jbpn
+
+ * snmplib/snmpv3.c:
+
+ - use new snmp_hex_to_binary function for engine ID parsing in -e
+ option, rather than archaic hex_to_binary
+
+2001-05-23 04:22 jbpn
+
+ * snmplib/snmp_parse_args.c:
+
+ - free() buffers in a couple of error cases; no big deal
+
+2001-05-23 04:14 jbpn
+
+ * snmplib/snmp_parse_args.c:
+
+ - use new snmp_hex_to_binary function for engine ID parsing in -e
+ and -E options, rather than archaic hex_to_binary
+
+2001-05-23 03:56 jbpn
+
+ * apps/snmptest.c:
+
+ - use new snmp_{decimal, hex}_to_binary functions for input string
+ to OCTET STRING conversion, rather than archaic ascii_to_binary
+ and hex_to_binary
+
+ - omit trailing newline from string (helpful for objects that don't
+ allow non-printing characters, e.g. sysLocation.0)
+
+2001-05-20 08:12 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - rewritten _sess_read() function:
+
+ - better handling of long packets
+ - zero-copy reception of packets on stream transports
+ - lower memory overheads for packet fragment handling for stream
+ transports
+
+ - allow parsing of large objects (>8192 octets)
+
+2001-05-20 05:48 jbpn
+
+ * snmplib/snmp_parse_args.c:
+
+ - don't strdup() contextName, securityName -- causes minor memory
+ leak.
+
+2001-05-20 05:04 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ - test return of fcntl(F_GETFL), so as not to set flags to garbage
+
+ - correction to comment -- set socket to *blocking*!
+
+ - check opaque before writing to it in recv
+
+2001-05-20 05:02 jbpn
+
+ * snmplib/snmp_client.c:
+
+ - proper handling of SNMP_CALLBACK_OP_DISCONNECT in snmp_synch_input:
+ set an error condition, with errno SNMPERR_ABORT ("Session abort
+ failure"), which seems like a good enough match.
+
+2001-05-18 09:54 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ - make newly-accept()ed sockets blocking; otherwise problems arise
+ later when send()ing large PDUs (since only a single socket buffer's
+ worth of data at most can be sent without blocking).
+
+2001-05-18 07:17 jbpn
+
+ * agent/snmp_agent.c:
+
+ - use sprint_realloc_objid and sprint_realloc_variable instead of
+ sprint_objid and sprint_variable respectively, to allow large PDUs
+ to be printed when debugging
+
+2001-05-18 07:16 jbpn
+
+ * snmplib/tools.c:
+
+ - improved debugging output from snmp_realloc()
+
+2001-05-18 07:15 jbpn
+
+ * snmplib/: mib.c , mib.h:
+
+ - remove debugging from output routines
+
+ - new function sprint_realloc_objid
+
+ - make sprint_realloc_objid and sprint_realloc_variable externally
+ visible
+
+2001-05-18 06:28 jbpn
+
+ * snmplib/asn1.c:
+
+ - improved debugging output from asn_realloc()
+
+2001-05-15 04:10 jbpn
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - add OIDs for UDP/IPv6 and TCP/IPv6
+
+2001-05-14 02:20 jbpn
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ - added \n to text of snmp_log() messages (bug #422978)
+
+2001-05-11 07:30 jbpn
+
+ * snmplib/: mib.c , mib.h:
+
+ - added sprint_realloc_<type> family of functions which take extra
+ parameters and use relocating buffers to remove limitations due to
+ fixed-size buffers (e.g. see bug #409181).
+
+ - also fixes potential problem noted as bug #414803
+
+ - fprint_variable, fprint_objid and fprint_value use new functions
+ such that snmpget etc. are improved immediately
+
+ - old functions remain *FOR NOW* -- but really they should be
+ considered to be deprecated (new functions provide a superset of
+ their functionality).
+
+2001-05-11 07:14 jbpn
+
+ * snmplib/parse.h:
+
+ - added additional function pointer to struct tree to point at
+ relocating buffer compatible output function
+
+2001-05-11 06:57 jbpn
+
+ * snmplib/: tools.c , tools.h:
+
+ - added utility function snmp_strcat, which appends a string to a
+ relocatable buffer
+
+2001-05-10 11:20 rstory
+
+ * snmplib/mib.c:
+
+ fix bug #423109 incorrect index parsing
+
+2001-05-09 16:43 rstory
+
+ * snmplib/snmp_client.c:
+
+ fix snmp_client.c:569: warning: control reaches end of non-void function
+
+2001-05-09 12:36 slif
+
+ * agent/mibgroup/: Rmon.h , Rmon/README , Rmon/agutil.c
+ , Rmon/agutil.h , Rmon/agutil_api.h , Rmon/alarm.c
+ , Rmon/alarm.h , Rmon/event.c , Rmon/event.h ,
+ Rmon/history.c , Rmon/history.h , Rmon/row_api.h ,
+ Rmon/rows.c , Rmon/rows.h , Rmon/statistics.c ,
+ Rmon/statistics.h , Rmon/test_alarm.sh ,
+ Rmon/test_hist.sh:
+
+ Include Alex Rozin's Rmon.
+
+2001-05-07 10:41 hardaker
+
+ * snmplib/: snmp_client.c , snmp_client.h:
+
+ Added a couple of convenience functions for manipulating varbindlists:
+ int snmp_set_var_typed_value(struct variable_list *newvar, u_char type,
+ u_char *val_str, size_t val_len);
+ void snmp_replace_var_types(struct variable_list *vbl, int old_type,
+ int new_type);
+ void snmp_reset_var_types(struct variable_list *vbl, int new_type);
+
+2001-05-07 10:36 hardaker
+
+ * snmplib/tools.h:
+
+ define SNMP_MALLOC_TYPEDEF()
+
+2001-05-05 07:28 rstory
+
+ * local/mib2c.storage.conf:
+
+ fix store_ name; don't cast to asny type if parm expecting u_char*; fix _variable_oid
+ naming; cast parm 2 of memdup to u_char*
+
+2001-05-03 14:16 hardaker
+
+ * snmplib/asn1.c:
+
+ fixed rauth offset incrementing: was incrementing the pointer, not the value.
+ -- more instances of the same problem found.
+
+2001-05-03 14:15 hardaker
+
+ * snmplib/asn1.c:
+
+ fixed rauth offset incrementing: was incrementing the pointer, not the value.
+
+2001-05-03 10:08 hardaker
+
+ * aclocal.m4 , config.guess , config.sub ,
+ configure , ltmain.sh:
+
+ updated to libtool 1.4
+
+2001-05-01 13:31 hardaker
+
+ * snmplib/snmpksm.c:
+
+ use realloc routines.
+
+2001-05-01 13:31 hardaker
+
+ * snmplib/read_config.c:
+
+ fix variable declaration.
+
+2001-05-01 13:30 hardaker
+
+ * snmplib/mib.c:
+
+ Don't print hex for string lengths less than 4. Should have died ages ago.
+
+2001-05-01 13:29 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat.h:
+
+ Fix prototype so its not static (it shouldn't be).
+
+2001-05-01 13:29 hardaker
+
+ * agent/mibgroup/mibII/ip.c:
+
+ make RONLY variables writable (which may or may not work. I'm betting not.)
+
+2001-05-01 13:28 hardaker
+
+ * agent/snmp_agent.c:
+
+ remove unused variables.
+
+2001-05-01 13:28 hardaker
+
+ * config.h.in , configure , configure.in:
+
+ check for an rpm subdirectory.
+
+2001-04-23 20:41 hardaker
+
+ * local/tkmib:
+
+ big cleanup and other fixes I've already forgotten in the last few minutes.
+
+2001-04-23 20:34 hardaker
+
+ * local/tkmib:
+
+ Don't walk off end of mib tree (sigh).
+
+2001-04-23 20:19 hardaker
+
+ * local/tkmib:
+
+ fix the mib info display options.
+ save them appropriately.
+
+2001-04-23 18:23 hardaker
+
+ * local/tkmib:
+
+ more savable option items.
+ use Data::Dumper to save most stuff.
+
+2001-04-23 17:26 hardaker
+
+ * local/tkmib:
+
+ Don't save session options twice.
+ Make color of writable objects a variable.
+
+2001-04-23 17:08 hardaker
+
+ * local/: tkmib (V4-2-patches.2), tkmib:
+
+ fix walk problem once and for all.
+
+2001-04-23 16:36 hardaker
+
+ * local/tkmib:
+
+ reduce screen realestate all over the place
+
+2001-04-23 16:35 hardaker
+
+ * local/tkmib:
+
+ test against version 5
+
+2001-04-18 08:46 hardaker
+
+ * agent/mibgroup/ucd-snmp/lmSensors.c ,
+ agent/mibgroup/ucd-snmp/lmSensors.h , mibs/LM-SENSORS-MIB.txt
+ , mibs/UCD-SNMP-MIB.txt:
+
+ Added LM-SENSORS-MIB support (diskio extension) from Martin Oldfield
+
+2001-04-18 05:40 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - hacking on snmp_add_var to handle long values
+
+ - use snmp_{hex,decimal}_to_binary instead of hex_to_binary
+ and ascii_to_binary; these should be removed
+
+ - don't use strtok in processing bitstrings
+
+2001-04-18 04:58 jbpn
+
+ * snmplib/asn1.c:
+
+ - use the generic snmp_realloc function in asn_realloc
+
+2001-04-18 02:40 jbpn
+
+ * snmplib/: tools.c , tools.h:
+
+ - new, reallocating utility functions snmp_hex_to_binary and
+ snmp_decimal_to_binary to convert hex and decimal strings to octet
+ strings respectively.
+
+ - new utility function snmp_realloc to perform buffer (re-)allocation
+
+2001-04-12 05:12 dts12
+
+ * agent/: snmp_agent.c (V4-2-patches.6), snmp_agent.c:
+
+ Better fix for bug #414855 from arajesh
+ Handles non-repeaters=0 as well, and avoids memory leaks.
+
+2001-04-11 10:06 jbpn
+
+ * snmplib/asn1.h:
+
+ - second incarnation of asn_realloc_rbuild_<type> functions, which
+ now take an additional argument that may be used to indicate that
+ reallocation should not be done.
+
+ - old _rbuild API is gone.
+
+ - extended (and corrected!) commentary on correct usage of new API.
+
+2001-04-11 10:05 jbpn
+
+ * snmplib/: snmp.c , snmp.h:
+
+ - use second incarnation of _realloc_rbuild functions.
+
+ - old _rbuild_var_op API is gone.
+
+2001-04-11 10:04 jbpn
+
+ * snmplib/snmpusm.c:
+
+ - use second incarnation of asn_realloc_rbuild_<type> functions.
+
+2001-04-11 10:03 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - use second incarnation of _realloc_rbuild functions.
+
+ - old _rbuild API is gone.
+
+2001-04-11 10:02 jbpn
+
+ * snmplib/asn1.c:
+
+ - second incarnation of asn_realloc_rbuild_<type> functions, which
+ now take an additional argument that may be used to indicate that
+ reallocation should not be done.
+
+ - old _rbuild API is gone.
+
+ - asn_realloc() function checks whether it has been passed a NULL
+ pointer and uses malloc() in that case (thanks to Michael Slifcak
+ for pointing out the danger here).
+
+2001-04-11 06:13 dts12
+
+ * agent/snmp_agent.c:
+
+ Handle GetBulk requests with max-repetitions=0 properly (bug #414855)
+
+2001-04-10 04:47 jbpn
+
+ * snmplib/snmpUDPDomain.c:
+
+ - set SO_SNDBUF and SO_RCVBUF to 128Kb for newly-opened UDP sockets,
+ to enable large PDUs to be sent and received. Some
+ implementations default very low (Solaris 2.7 8Kb, Linux 2.4
+ 64Kb).
+
+2001-04-09 10:05 jbpn
+
+ * snmplib/snmpusm.c:
+
+ - modified usm_rgenerate_out_msg() to make use of reallocating
+ reverse encode functions.
+
+2001-04-09 10:03 jbpn
+
+ * snmplib/snmpusm.h:
+
+ - additional parameter to usm_rgenerate_out_msg() to enable use of
+ reallocating reverse encode functions.
+
+2001-04-09 09:57 jbpn
+
+ * snmplib/snmp_secmod.h:
+
+ - allow additional parameter for outgoing params to enable use of
+ reallocating reverse encode functions.
+
+2001-04-09 09:55 jbpn
+
+ * snmplib/snmp_api.h:
+
+ - prototypes for reallocating reverse encode functions
+
+2001-04-09 09:54 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - modified to use reallocating reverse ASN.1 encoder functions if
+ using reverse encoding at all.
+
+2001-04-09 09:49 jbpn
+
+ * snmplib/snmp.c:
+
+ - add new function snmp_realloc_rbuild_var_op() which uses
+ reallocating reverse ASN.1 encoder functions to encode varbinds.
+
+2001-04-09 09:47 jbpn
+
+ * snmplib/asn1.h:
+
+ - prototype for new suite of functions asn_realloc_rebuild_<type>,
+ which perform reverse encoding into a buffer and grow it if there
+ is not enough space for the encoding.
+
+ - commentary on correct usage of above.
+
+2001-04-09 09:43 jbpn
+
+ * snmplib/asn1.c:
+
+ - new suite of functions asn_realloc_rebuild_<type>, which perform
+ reverse encoding into a buffer and grow it if there is not enough
+ space for the encoding.
+
+2001-04-06 12:12 hardaker
+
+ * AGENT.txt , COPYING , ChangeLog ,
+ EXAMPLE.conf.def , FAQ , NEWS , PORTING ,
+ README , README.agentx , README.snmpv3 , configure
+ , configure.in , sedscript.in , version.h
+ , agent/agent_trap.c , agent/ds_agent.h ,
+ agent/snmp_agent.c , agent/snmpd.c ,
+ agent/mibgroup/ucd_snmp.h , agent/mibgroup/util_funcs.c
+ , agent/mibgroup/agentx/README.agentx ,
+ agent/mibgroup/agentx/master.c ,
+ agent/mibgroup/agentx/master.h ,
+ agent/mibgroup/examples/example.c ,
+ agent/mibgroup/host/hr_filesys.c ,
+ agent/mibgroup/host/hr_storage.c ,
+ agent/mibgroup/host/hr_swrun.c ,
+ agent/mibgroup/host/hr_utils.c , agent/mibgroup/mibII/at.c
+ , agent/mibgroup/mibII/at.h ,
+ agent/mibgroup/mibII/interfaces.c , agent/mibgroup/mibII/ip.c
+ , agent/mibgroup/mibII/udp.c ,
+ agent/mibgroup/mibII/var_route.c ,
+ agent/mibgroup/notification/snmpNotifyFilterProfileTable.c ,
+ agent/mibgroup/notification/snmpNotifyFilterTable.c ,
+ agent/mibgroup/notification/snmpNotifyTable.c ,
+ agent/mibgroup/target/target.c ,
+ agent/mibgroup/ucd-snmp/disk.c ,
+ agent/mibgroup/ucd-snmp/file.c ,
+ agent/mibgroup/ucd-snmp/loadave.c ,
+ agent/mibgroup/ucd-snmp/pass.c ,
+ agent/mibgroup/ucd-snmp/proxy.c ,
+ agent/mibgroup/ucd-snmp/registry.c ,
+ agent/mibgroup/ucd-snmp/versioninfo.c ,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c , apps/snmpdelta.c
+ , apps/snmptest.c , apps/snmptrapd.c ,
+ local/Makefile.in , local/mib2c , local/snmpconf
+ , local/tkmib , local/wesrestart , man/snmpcmd.1
+ , man/snmpd.conf.5.def , man/snmpdelta.1 ,
+ mibs/rfclist , mibs/rfcmibs.diff , snmplib/mib.c ,
+ snmplib/parse.c , snmplib/snmp_api.c ,
+ snmplib/snmp_debug.c , snmplib/snmpusm.c ,
+ testing/eval_tools.sh , testing/tests/T120proxyget:
+
+ merge3 -> merge4. I don't *think* I broke anything.
+ - The main line should now contain all the 4.2.1 patches.
+ - I may double check this at a later date.
+
+2001-04-05 06:37 dts12
+
+ * snmplib/parse.c:
+
+ Change 'Line' variable name, to assist with Mac port.
+
+2001-04-05 06:14 dts12
+
+ * agent/mibgroup/ucd-snmp/: pass.c , pass_persist.c:
+
+ Handle setting null string values via the 'pass' mechanism. (Support#406728)
+ Also handle embedded whitespace in such values.
+ Also applied to 'pass_persist'.
+
+2001-04-05 06:07 dts12
+
+ * agent/: agent_registry.c , agent_trap.c , kernel.c
+ , mib_modules.c , snmp_agent.c , snmp_agent.h
+ , snmp_vars.c , mibgroup/util_funcs.c ,
+ mibgroup/agentx/master_admin.c , mibgroup/agentx/protocol.c
+ , mibgroup/host/hr_disk.c , mibgroup/host/hr_network.c
+ , mibgroup/host/hr_print.c , mibgroup/host/hr_proc.c
+ , mibgroup/host/hr_system.c , mibgroup/host/hr_utils.c
+ , mibgroup/mibII/vacm_vars.c ,
+ mibgroup/mibII/var_route.c ,
+ mibgroup/notification/snmpNotifyFilterProfileTable.c ,
+ mibgroup/notification/snmpNotifyFilterTable.c ,
+ mibgroup/notification/snmpNotifyTable.c ,
+ mibgroup/target/snmpTargetAddrEntry.c ,
+ mibgroup/target/target.c , mibgroup/ucd-snmp/file.c ,
+ mibgroup/ucd-snmp/hpux.c , mibgroup/ucd-snmp/proxy.c ,
+ mibgroup/ucd-snmp/registry.c ,
+ mibgroup/ucd-snmp/versioninfo.c:
+
+ Keep one of the pickier compilers (HP's aCC) happy.
+
+2001-04-05 06:06 dts12
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ Ensure that checking for 'statvfs' is done consistently
+
+2001-04-05 06:05 dts12
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ ensure that 'exec_command' is used consistently with the availability of execv
+ (A cleaner approach than the previous patch)
+
+2001-04-05 06:01 dts12
+
+ * agent/: auto_nlist.c , auto_nlist.h:
+
+ fix for auto_nlist bogus definitions for machines without nlist.
+
+2001-04-05 04:51 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - save a strcpy() and allow long octet string values without crashing
+ (though there are still problems due to the liberal use of fixed
+ size buffers with no bounds checking all over the place. Sigh).
+
+2001-04-04 06:46 jbpn
+
+ * agent/snmpd.c:
+
+ - call external signal handlers before calling snmp_select_info(),
+ rather than after calling snmp_select_info() but before select().
+ This fixes a potential problem that could arise if a signal handler
+ closed a session, which would cause select() to return -1 with
+ EBADF, and thus terminate the agent.
+
+2001-04-03 09:31 dts12
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ Ensure that the 'extmp' command variable is accessible on systems without EXECV.
+
+2001-04-03 09:29 dts12
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Keep one of the pickier compilers (HP's aCC) happy.
+
+2001-04-03 09:22 dts12
+
+ * apps/: snmptrapd.c , snmptrapd_log.c:
+
+ Keep one of the pickier compilers (HP's aCC) happy.
+
+2001-04-03 09:15 dts12
+
+ * snmplib/: mib.c , read_config.c , snmpTCPDomain.h
+ , snmpUDPDomain.c , snmpUnixDomain.c ,
+ snmpUnixDomain.h , snmp_api.c , snmp_logging.c ,
+ snmp_transport.c , snmp_transport.h , system.c:
+
+ Keep one of the pickier compilers (HP's aCC) happy.
+
+2001-04-03 06:30 dts12
+
+ * agent/mibgroup/mibII/kernel_linux.c:
+
+ Plug file-descriptor leak when using cached data. (Bug#412000)
+
+2001-04-02 10:11 jbpn
+
+ * agent/snmp_agent.c:
+
+ - check for limits.h properly
+
+2001-04-02 10:10 jbpn
+
+ * man/snmp_agent_api.3:
+
+ - minor typeface changes
+
+2001-03-31 06:27 jbpn
+
+ * man/snmp_agent_api.3:
+
+ - update documentation of agent_check_and_process to reflect
+ current behaviour
+
+ ** NOTE: currently returns control to user when an alarms runs **
+ ** **
+ ** This may change **
+
+2001-03-31 06:25 jbpn
+
+ * man/snmp_alarm.3:
+
+ - document the snmp_alarm_register_hr function
+
+ - expand the NOTES section discussing use of SIGALRM (or not)
+
+2001-03-31 06:17 jbpn
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ - Make use of SNMP_CALLBACK_OP_DISCONNECT transport disconnect
+ indication to shut down AgentX sessions cleanly and cancel all
+ callbacks which make refernce to the AgentX session.
+
+2001-03-31 06:15 jbpn
+
+ * agent/mibgroup/agentx/master_admin.c:
+
+ - Fix multiple free() of parts of the subsession by zeroing out
+ fields that we don't use.
+
+ - Make use of SNMP_CALLBACK_OP_DISCONNECT transport disconnect
+ indication to shut down AgentX sessions cleanly.
+
+2001-03-31 06:13 jbpn
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ - Make use of SNMP_CALLBACK_OP_DISCONNECT transport disconnect
+ indication to shut down AgentX sessions cleanly.
+
+2001-03-31 06:11 jbpn
+
+ * agent/snmp_agent.c:
+
+ - Fix memory leak in handle_one_var where long varbinds weren't
+ correctly free()d.
+
+ - Change behaviour of agent_check_and_process so that alarms run
+ correctly.
+
+ ** NOTE: currently returns control to user when an alarms runs **
+ ** **
+ ** This may change **
+
+2001-03-31 06:05 jbpn
+
+ * snmplib/snmp_api.c:
+
+ - Changed packet handling on stream-like transports so that all
+ complete received packets are processed:
+
+ _sess_read is refactored into two functions: _sess_read remains
+ responsible for reading data from the transport layer, but then
+ calls (perhaps more than once) _sess_process_packet to dispatch
+ each packet read.
+
+ - The presence of a session with a buffered partial packet no longer
+ causes snmp_select_info to return with a timeout of zero.
+
+ - Free the subsessions of a session when doing an snmp_sess_close;
+ this fixes an AgentX memory leak when subagents come and go.
+
+ - Perform callbacks with an operation argument of
+ SNMP_CALLBACK_OP_DISCONNECT when you get a transport disconnect
+ indication.
+
+2001-03-31 05:56 jbpn
+
+ * snmplib/snmp_api.h:
+
+ Made transport domain const
+
+2001-03-31 05:55 jbpn
+
+ * snmplib/callback.c:
+
+ Fix memory leak that can occur when deregistering callbacks
+
+2001-03-30 08:05 hardaker
+
+ * README.agentx:
+
+ file README.agentx was initially added on branch V4-2-patches.
+
+2001-03-29 21:43 hardaker
+
+ * ISSUES (V4-2-patches.1), ISSUES:
+
+ rm ISSUES
+
+2001-03-29 08:21 slif
+
+ * win32/libsnmp_dll/: libsnmp.def (V4-2-patches.3), libsnmp.def:
+
+ Add vacm_is_configured.
+
+2001-03-28 06:19 jbpn
+
+ * agent/mibgroup/agentx/: client.c , master_request.c:
+
+ - use SNMP_CALLBACK_OP_<name> callback operation names
+
+2001-03-28 06:00 jbpn
+
+ * apps/snmptrapd.c:
+
+ - use SNMP_CALLBACK_OP_<name> callback operation names
+
+2001-03-28 05:36 jbpn
+
+ * agent/: snmp_agent.c , snmpd.c:
+
+ - use SNMP_CALLBACK_OP_<name> callback operation names
+
+2001-03-28 05:06 jbpn
+
+ * snmplib/: snmp_client.c , snmp_api.c:
+
+ - use SNMP_CALLBACK_OP_<name> callback operation names
+
+2001-03-28 05:04 jbpn
+
+ * snmplib/snmp_api.h:
+
+ - rename callback operations to SNMP_CALLBACK_OP_<name>
+ - add new operations SNMP_CALLBACK_OP_CONNECT, SNMP_CALLBACK_OP_DISCONNECT
+ - add legacy definitions for RECEIVED_MESSAGE, TIMED_OUT, SEND_FAILED
+
+2001-03-27 15:57 hardaker
+
+ * agent/mibgroup/disman/: mteObjectsTable.c ,
+ mteTriggerTable.c:
+
+ change fprintf -> snmp_log.
+ Don't allow modifications of read-only rows in mteObjectsTable.
+
+2001-03-27 10:55 hardaker
+
+ * agent/: ds_agent.h , mibgroup/disman/mteObjectsTable.c
+ , mibgroup/disman/mteObjectsTable.h ,
+ mibgroup/disman/mteTriggerBooleanTable.c ,
+ mibgroup/disman/mteTriggerDeltaTable.c ,
+ mibgroup/disman/mteTriggerExistenceTable.c ,
+ mibgroup/disman/mteTriggerTable.c ,
+ mibgroup/disman/mteTriggerTable.h ,
+ mibgroup/disman/mteTriggerThresholdTable.c:
+
+ Support for new features in the DISMAN-EVENT-MIB code:
+ New snmpd.conf tokens:
+ - monitor [-o oid...] [-u user] oid [(=|!=|<=|...) VALUE].
+ - defaultMonitors yes
+
+2001-03-27 10:53 hardaker
+
+ * snmplib/mib.c:
+
+ Moved * from beginning of routine to the same line as the return
+ variable declaration. Was causing etags grief the other way.
+
+2001-03-27 10:52 hardaker
+
+ * local/Makefile.in:
+
+ patch from Ken Hornstein: use %s instead of @s for search/replace delimiters.
+
+2001-03-27 10:29 hardaker
+
+ * apps/snmptrapd.c:
+
+ Use snmp_log with %s to prevent % expansion in octet strings containing a %s.
+ trap_fmt_free needs ()s.
+
+2001-03-27 08:13 dts12
+
+ * agent/: snmp_agent.c , mibgroup/agentx/master_request.c:
+
+ Handle non-responsive AgentX sub-agents more robustly.
+ (Based on suggestions from Harrie Hazewinkel & Paul Rasmussen)
+
+2001-03-27 08:03 dts12
+
+ * agent/snmp_agent.c:
+
+ Avoid double-freeing of cached address strings.
+ (John's improvement to my suggested fix).
+
+2001-03-27 02:39 dts12
+
+ * agent/mibgroup/smux/smux.c:
+
+ Reset count of authorized peers on closedown. (Thanks to Vlad Tunik)
+
+2001-03-26 18:01 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c, snmplib/vacm.c, snmplib/vacm.h
+ (V4-2-patches.[1,2,1]), agent/mibgroup/mibII/vacm_vars.c ,
+ snmplib/vacm.c , snmplib/vacm.h:
+
+ Fixed vacm to drop v1/v2c packets properly when no com2sec entries are found.
+
+2001-03-26 11:04 hardaker
+
+ * local/: ipf-mod.pl (V4-2-patches.1), ipf-mod.pl:
+
+ add usage comment at top
+
+2001-03-22 07:55 dts12
+
+ * snmplib/snmp_api.c:
+
+ Use ASN_OCTET_STR rather than the historic ASN_BIT_STR for 'b' object values
+ Patch from Frank Strauss.
+
+2001-03-22 07:46 dts12
+
+ * agent/: agent_trap.c (V4-2-patches.3), agent_trap.c:
+
+ Fix for minor memory leak with trap-related varbind values.
+ Thanks to John Villalovos (and the Intel SNMP team)
+
+2001-03-21 17:30 driehuis
+
+ * snmplib/mib.c:
+
+ Avoid crash in snmp_shutdown on platforms that check pointer validity
+ in free(3), e.g. FreeBSD.
+
+2001-03-21 08:46 hardaker
+
+ * agent/agent_trap.c , agent/mibgroup/util_funcs.c ,
+ agent/mibgroup/mibII/mta_sendmail.c ,
+ agent/mibgroup/mibII/vacm_vars.c ,
+ agent/mibgroup/mibJJ/vacm_vars.c ,
+ agent/mibgroup/target/snmpTargetAddrEntry.c ,
+ agent/mibgroup/target/snmpTargetParamsEntry.c ,
+ agent/mibgroup/target/target.c ,
+ agent/mibgroup/ucd-snmp/disk.c ,
+ agent/mibgroup/ucd-snmp/extensible.c ,
+ agent/mibgroup/ucd-snmp/proc.c ,
+ agent/mibgroup/ucd-snmp/proxy.c , apps/snmptrapd_handlers.c
+ , snmplib/default_store.c , snmplib/read_config.c
+ , snmplib/read_config.h , snmplib/snmpusm.c ,
+ snmplib/snmpv3.c:
+
+ copy_nword created that checks buffer lengths.
+ Made everything use it.
+
+2001-03-21 08:38 hardaker
+
+ * snmplib/snmpksm.c:
+
+ KSM patch from Ken Hornstein
+
+2001-03-20 09:13 jbpn
+
+ * agent/.cvsignore:
+
+ Ignore Purify and NFS stuff
+
+2001-03-16 10:14 hardaker
+
+ * config.h.in:
+
+ added MIT_NEW_CRYPTO (for ksm) definition which was missing
+
+2001-03-16 02:51 jbpn
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ fix ridiculous memory leak in discontinuity processing
+
+2001-03-15 11:04 hardaker
+
+ * testing/tests/T056agentv2cmintrap:
+
+ whoops. Missed a merge conflict line
+
+2001-03-15 10:59 hardaker
+
+ * README , README.win32 , agent/mib_modules.c ,
+ agent/mibgroup/header_complex.c ,
+ agent/mibgroup/agentx/client.c ,
+ agent/mibgroup/agentx/master.c ,
+ agent/mibgroup/agentx/master_admin.c ,
+ agent/mibgroup/agentx/master_request.c ,
+ agent/mibgroup/agentx/protocol.c ,
+ agent/mibgroup/agentx/subagent.c ,
+ agent/mibgroup/host/hr_filesys.c , agent/mibgroup/mibII/at.c
+ , agent/mibgroup/mibII/ip.c ,
+ agent/mibgroup/notification/snmpNotifyFilterProfileTable.c ,
+ agent/mibgroup/notification/snmpNotifyFilterTable.c ,
+ agent/mibgroup/notification/snmpNotifyTable.c ,
+ agent/mibgroup/target/target.c ,
+ agent/mibgroup/ucd-snmp/dlmod.c ,
+ agent/mibgroup/ucd-snmp/pass_persist.c ,
+ agent/mibgroup/ucd-snmp/proxy.c , apps/snmptrapd.c ,
+ apps/snmptrapd_log.c , apps/snmpnetstat/if.c ,
+ man/snmp.conf.5.def , man/snmpcmd.1 , man/snmptrapd.8
+ , mibs/IANAifType-MIB.txt , mibs/MTA-MIB.txt ,
+ mibs/Makefile.mib , mibs/README.mibs ,
+ mibs/TUNNEL-MIB.txt , mibs/ianalist , mibs/mibfetch
+ , mibs/rfclist , mibs/rfcmibs.diff , mibs/smistrip
+ , perl/SNMP/SNMP.xs , snmplib/asn1.c ,
+ snmplib/default_store.c , snmplib/mib.c ,
+ snmplib/mib.h , snmplib/parse.c , snmplib/snmp_api.c
+ , snmplib/snmp_logging.c , snmplib/snmp_parse_args.c
+ , snmplib/snmp_parse_args.h , snmplib/snmpv3.c ,
+ snmplib/system.h , testing/eval_tools.sh ,
+ testing/tests/T054agentv2ctrap ,
+ testing/tests/T056agentv2cmintrap ,
+ testing/tests/T058agentauthtrap , testing/tests/T100agenthup
+ , win32/config.h , win32/mib_module_config.h ,
+ win32/mib_module_includes.h , win32/mib_module_inits.h ,
+ win32/libsnmp_dll/libsnmp.def ,
+ win32/libucdmibs/libucdmibs.def ,
+ win32/libucdmibs/libucdmibs.dsp:
+
+ merge from patches branch: merge2->3.
+
+2001-03-15 10:22 jbpn
+
+ * agent/mibgroup/disman/mteTriggerTable.h:
+
+ extra members for discontinuity processing
+
+2001-03-15 07:46 hardaker
+
+ * agent/snmpd.c:
+
+ Patch from Frank Strauss to run signal handlers earlier
+
+2001-03-14 14:37 hardaker
+
+ * agent/: agent_trap.h (V4-2-patches.2), agent_trap.h:
+
+ Patch from Harrie Hazewinkel: make send_enterprise_trap_vars a public fn.
+
+2001-03-14 12:16 slif
+
+ * agent/mibgroup/tunnel/tunnel.c:
+
+ Use config.h, don't use ucd-snmp directory to build in the mibgroup tree.
+
+2001-03-14 11:05 slif
+
+ * testing/: Makefile.in , RUNTESTS , TESTCONF.sh
+ , eval_onescript.sh , eval_tools.sh:
+
+ merge the test script changes made in the V4-2-patches branch.
+
+2001-03-14 10:57 jbpn
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ Change to discontinuity processing to stop it returning TRUE all the
+ time
+
+2001-03-14 10:52 jbpn
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ - rough stab at discontinuity processing
+ - bail out of getNext-type loops on a badType condition
+
+2001-03-14 10:34 hardaker
+
+ * README.krb5:
+
+ kerberos README file from Ken Hornstein
+
+2001-03-14 10:28 jbpn
+
+ * agent/mibgroup/disman/mteTriggerDeltaTable.c:
+
+ Get returned *var_len right for mteTriggerDeltaDiscontinuityID
+
+2001-03-14 10:19 slif
+
+ * agent/snmpd.c , agent/mibgroup/examples/ucdDemoPublic.c
+ , apps/snmpvacm.c , apps/snmpnetstat/winstub.c ,
+ snmplib/parse.c , snmplib/snmpUnixDomain.c:
+
+ patch submitted by Harrie Hazewinkel to quiet some warnings.
+
+2001-03-14 10:19 hardaker
+
+ * acconfig.h , configure , configure.in ,
+ snmplib/snmp_api.c , snmplib/snmpksm.c ,
+ snmplib/snmpksm.h:
+
+ KSM patch from Ken Hornstein.
+
+2001-03-14 05:45 dts12
+
+ * agent/mibgroup/host/: hr_swrun.c (V4-2-patches.5), hr_swrun.c:
+
+ Fix Linux file descriptor leak (reported by Oliver Fänger)
+
+2001-03-14 05:22 jbpn
+
+ * agent/mibgroup/disman/.cvsignore:
+
+ [no log message]
+
+2001-03-14 02:20 jbpn
+
+ * agent/mibgroup/disman/: mteTriggerTable.c ,
+ mteTriggerTable.h:
+
+ - save original PDU's transport domain -- necessary for
+ community string processing
+
+ CAUTION: incompatible change in format of mteTriggerTable
+ configuration entry
+
+ - fix memory leak in mte_run_trigger by releasing PDUs
+
+ - send "bad type" notifications in some cases
+
+ - other minor memory leaks
+
+ - "delta" sampleType handled for boolean triggers
+
+ - more "XXX:" comments!
+
+2001-03-13 13:52 marz
+
+ * perl/SNMP/SNMP.xs:
+
+ fix support for Integer32
+
+2001-03-11 08:43 jbpn
+
+ * snmplib/: snmp_transport.c , snmp_transport.h:
+
+ Add a function to test whether an OID corresponds to a supported transport
+ domain.
+
+2001-03-11 07:55 jbpn
+
+ * snmplib/snmpTCPDomain.h:
+
+ Add #includes to make struct sockaddr_in complete
+
+2001-03-11 07:54 jbpn
+
+ * snmplib/snmpAAL5PVCDomain.h:
+
+ Remove spurious #include
+
+2001-03-09 07:32 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ Fix rwuser -s model to actually work.
+
+2001-03-09 05:52 jbpn
+
+ * snmplib/snmpTCPDomain.c:
+
+ Set a PDU's opaque data on a tcp_recv; this isn't necessary to send
+ replies (because the underlying socket is strongly connected) but if
+ you don't do this then you can't do "com2sec" type processing for PDUs
+ received on TCP sessions... interesting.
+
+2001-03-09 03:33 jbpn
+
+ * snmplib/snmpUDPDomain.c:
+
+ Fix bad assumption that community string is zero-terminated
+
+2001-03-08 15:36 hardaker
+
+ * agent/snmpd.c:
+
+ - correct version statements to indicate net-snmp.
+ - remove my name as author (I'm certainly not the only one)
+ - add web address.
+
+2001-03-08 15:31 hardaker
+
+ * README:
+
+ - Added Ken Hornstein's name to contributers list.
+ - Removed mine from being listed separately.
+
+2001-03-08 14:51 hardaker
+
+ * configure , configure.in ,
+ agent/mibgroup/mibII/vacm_vars.c , snmplib/snmpksm.c ,
+ snmplib/snmpksm.h:
+
+ Added a kerberos based security module (ksm).
+ However, Needs libraries (-lkrb5 -lcom_err) not being checked for currently.
+
+2001-03-08 14:48 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Whoops. Shouldnt have a negation sign on the most recent checkin.
+
+2001-03-08 14:38 hardaker
+
+ * snmplib/snmp_api.c:
+
+ If NO_PROBE is set, don't do any post probing activities either like
+ time updating and user creation.
+
+2001-03-08 08:14 jbpn
+
+ * agent/mibgroup/target/target.c:
+
+ Remove strdup()s on some session parameters which cause memory leaks
+ (since snmp_open deep copies the input session anyway)
+
+2001-03-08 08:11 jbpn
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c:
+
+ Make sure sess field of new entries is initialised to NULL.
+
+2001-03-08 07:49 jbpn
+
+ * agent/mibgroup/target/snmpTargetParamsEntry.c:
+
+ Make config token parser update timestamp on entry it creates;
+ move update_timestamp function.
+
+2001-03-07 07:45 hardaker
+
+ * perl/SNMP/: README , SNMP.pm , SNMP.xs:
+
+ Patch from Karl Schilke to remove unneeded timestamp support
+
+2001-03-06 20:58 hardaker
+
+ * snmplib/: snmp_api.c , snmp_client.c , snmp_secmod.c
+ , snmp_secmod.h , snmpusm.c:
+
+ secmod struct symbol name changes to something more intelligible.
+
+2001-03-06 16:46 hardaker
+
+ * snmplib/: snmp_api.c , snmp_client.c:
+
+ - set the default pdu security model to SNMP_DEFAULT_SECMODEL (not 0).
+ - don't force the security model of the session on the pdu if already set.
+
+2001-03-06 16:11 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ hopefully fix to allow other (registered) security models to be used.
+
+2001-03-06 09:23 hardaker
+
+ * README:
+
+ Added John Naylon to the README file.
+
+2001-03-06 09:22 hardaker
+
+ * snmplib/: snmp_api.c , snmp_secmod.h:
+
+ Create a new secmod callback when a timeout on a pdu occurs.
+
+2001-03-06 09:18 hardaker
+
+ * configure , configure.in:
+
+ properly install secmod header list.
+
+2001-03-06 08:43 hardaker
+
+ * snmplib/: snmp_api.c , snmp_secmod.h:
+
+ - bug fixes for secmod related stuff (it compiles now (opps)).
+
+2001-03-06 08:38 hardaker
+
+ * snmplib/: snmp_api.c , snmp_secmod.h:
+
+ - two new secmod callbacks for freeing a pdu and a session.
+ - move transport closing in snmp_sess_close() to after pending
+ requests are freed/closed in case something needs to make use of the
+ transport before it closes.
+
+2001-03-06 07:56 hardaker
+
+ * snmplib/: snmp_api.c , snmp_secmod.h:
+
+ Pass in pdu to secmod encode/decode routines.
+
+2001-03-06 03:35 jbpn
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Modified function Interface_Index_By_Name (Solaris specific) to cope more
+ gracefully with large numbers of interfaces. Also stops Purify on Solaris
+ complaining about uninitialised memory reads.
+
+2001-03-05 16:33 hardaker
+
+ * snmplib/snmp_api.c:
+
+ reverse callback ordering of normal callback/secmod callback
+ processing in sess_copy().
+
+2001-03-05 16:26 hardaker
+
+ * snmplib/snmp_secmod.c:
+
+ remove unused free function calls for security module unregistrations.
+
+2001-03-05 16:17 hardaker
+
+ * snmplib/: snmp_api.c , snmp_secmod.h:
+
+ minor API changes to the pluggable security model handling.
+
+2001-03-05 16:11 hardaker
+
+ * snmplib/snmp_api.c:
+
+ properly respect the DONT_PROBE_FLAG.
+
+2001-03-05 15:36 hardaker
+
+ * snmplib/: snmp_api.c , snmp_api.h , snmp_secmod.h:
+
+ add a session pointer to the v3 build routines.
+
+2001-03-05 15:23 hardaker
+
+ * snmplib/: snmp_api.c , snmp_api.h:
+
+ Add a krb5 specific error code.
+
+2001-03-05 14:58 hardaker
+
+ * configure , configure.in:
+
+ make configure properly handle pluggable security modules
+
+2001-03-05 14:49 hardaker
+
+ * configure , configure.in:
+
+ make configure mkdir snmplib before creating a file in it
+
+2001-03-05 14:44 hardaker
+
+ * configure , configure.in:
+
+ make configure respect non-local srcdirs for transport/secmods
+
+2001-03-05 10:40 hardaker
+
+ * acconfig.h , config.h.in , configure ,
+ configure.in , agent/agent_index.c ,
+ agent/agent_read_config.c , agent/agent_registry.c ,
+ agent/mib_modules.c , agent/snmp_vars.c ,
+ agent/snmpd.c , agent/mibgroup/examples/ucdDemoPublic.c
+ , agent/mibgroup/snmpv3/usmUser.c , apps/snmptrapd.c
+ , snmplib/.cvsignore , snmplib/Makefile.in ,
+ snmplib/callback.h , snmplib/default_store.h ,
+ snmplib/lcd_time.c , snmplib/scapi.c ,
+ snmplib/snmp_api.c , snmplib/snmp_api.h ,
+ snmplib/snmpusm.c , snmplib/snmpusm.h ,
+ snmplib/snmpv3.c:
+
+ support for pluggable security models. Currently only the USM is
+ available, but a new kerberos based security model will be available
+ shortly. These changes simply make it possible to use more than one
+ security service.
+
+2001-03-05 10:36 hardaker
+
+ * snmplib/: snmp_secmod.c , snmp_secmod.h:
+
+ Added John Naylon to the authors list.
+
+2001-03-05 10:33 hardaker
+
+ * snmplib/snmp_enum.h:
+
+ Comment re-arranging to actually be near the functions they're describing.
+
+2001-03-05 06:10 jbpn
+
+ * snmplib/system.c:
+
+ Modified get_myaddr() function to cope more gracefully with large numbers
+ of interfaces, and with the possibility of non-IPv4 addresses on some
+ interfaces. Also stops Purify on Solaris complaining about uninitialised
+ memory reads. Use "official" definition of INADDR_LOOPBACK.
+
+2001-03-03 14:34 nba
+
+ * mibs/ianalist:
+
+ file ianalist was initially added on branch V4-2-patches.
+
+2001-03-03 14:34 nba
+
+ * mibs/rfclist:
+
+ file rfclist was initially added on branch V4-2-patches.
+
+2001-03-03 14:34 nba
+
+ * mibs/README.mibs:
+
+ file README.mibs was initially added on branch V4-2-patches.
+
+2001-03-03 14:34 nba
+
+ * mibs/rfcmibs.diff:
+
+ file rfcmibs.diff was initially added on branch V4-2-patches.
+
+2001-03-01 19:23 hardaker
+
+ * snmplib/: asn1.c , snmp_api.c:
+
+ Fix snmp_oid_compare and reverse encodings to deal with numbers > 2^31.
+
+2001-02-28 23:02 hardaker
+
+ * snmplib/: read_config.c , read_config.h ,
+ snmp_parse_args.c:
+
+ - implemented snmp_config(char *line) to parse a .conf configuration
+ line at any time in the code (handlers must be registered before hand).
+ - implemented snmp_config_remember(char *line) to memorize it for
+ later use.
+ - read_configs, et al, will automatically call them after reading
+ everything else.
+ - Added a -Y flag to snmp_parse_args to store read config directives
+ for later use, thus allowing you to specify .conf directives on the
+ command line.
+
+2001-02-27 07:28 dts12
+
+ * agent/snmp_vars.c:
+
+ Avoid infinite loop with AgentX subagents and VACM checking interaction.
+ (Fix provided by Frank Strauss)
+
+2001-02-21 15:21 hardaker
+
+ * snmplib/: ucd-snmp-includes.h (V4-2-patches.1),
+ ucd-snmp-includes.h:
+
+ Applied patch #103805 from bcollar: add sys/time.h to ucd-snmp-includes.h
+
+2001-02-21 15:15 hardaker
+
+ * snmplib/: int64.c (V4-2-patches.2), int64.c:
+
+ fix bug #133416 (u64Subtraction math) as suggested by the submittor
+
+2001-02-16 15:12 hardaker
+
+ * agent/: var_struct.h (V4-2-patches.1), var_struct.h:
+
+ - increase UCD_REGISTRY_OID_MAX_LEN to 128 at Frank's request
+
+2001-02-16 04:16 jbpn
+
+ * configure.in:
+
+ Change behaviour on cygwin to exclude Unix domain transports by default
+ on cygwin, and also fix a minor bug, thanks to suggestions by Peter Folk.
+
+2001-02-14 18:14 hardaker
+
+ * apps/: snmptrapd.c (V4-2-patches.1), snmptrapd.c:
+
+ removed unused snmp_alarm.h include
+
+2001-02-12 14:11 marz
+
+ * perl/SNMP/SNMP.pm:
+
+ added Karl's patch for usenumeric
+
+2001-02-12 13:54 marz
+
+ * perl/SNMP/: MANIFEST , SNMP.pm , SNMP.xs ,
+ examples/trap-example.pl:
+
+ added trap reception API from Philip Prindeville <philipp@cisco.com>
+
+2001-02-11 08:23 jbpn
+
+ * apps/snmptrapd.c:
+
+ Use snmp_add not snmp_sess_add (the latter doesn't add a session to
+ the Session list, and it therefore won't get included in the select()
+ fdset, hence snmptrapd will never receive very much).
+
+2001-02-11 08:20 jbpn
+
+ * snmplib/snmpUDPDomain.c:
+
+ Fix improperly-terminated list in com2sec handling.
+
+2001-02-11 07:45 jbpn
+
+ * agent/snmpd.c:
+
+ Clean up merge (>>>>>>, ====== etc. left behind).
+
+2001-02-10 09:26 jbpn
+
+ * configure.in:
+
+ Fix typo.
+
+2001-02-10 09:11 jbpn
+
+ * agent/mibgroup/agentx/: master.c , master_admin.c ,
+ subagent.c:
+
+ Memory leak patches (sourceforge patch #103605).
+ Remove a few strdup()s, and call free_agent_snmp_session() rather than
+ free() in subagent.c:handle_agentx_packet() for AGENTX_MSG_RESPONSE
+ and default cases, to ensure free()ing of cloned PDU allocated by
+ init_agent_snmp_session.
+
+2001-02-10 07:28 hardaker
+
+ * snmplib/: snmpAAL5PVCDomain.c , snmpAAL5PVCDomain.h ,
+ snmpIPXDomain.c , snmpIPXDomain.h , snmpTCPDomain.c
+ , snmpTCPDomain.h , snmpUDPDomain.c ,
+ snmpUDPDomain.h , snmpUnixDomain.c , snmpUnixDomain.h
+ , snmp_transport.c , snmp_transport.h:
+
+ Whoops. Forgot the new files associated with the pluggable transport stuff.
+
+2001-02-09 11:22 hardaker
+
+ * agent/mibgroup/disman/: event-mib.h , mteObjectsTable.c
+ , mteObjectsTable.h , mteTriggerBooleanTable.c ,
+ mteTriggerExistenceTable.c , mteTriggerTable.c ,
+ mteTriggerTable.h , mteTriggerThresholdTable.c:
+
+ Implemented and made use of mteObjectsTable to send additional objects out with traps generated. Also, don't return data for misc tables when that trigger isn't defined to use that test type.
+
+2001-02-09 11:16 hardaker
+
+ * agent/: snmpd.c (V4-2-patches.2), snmpd.c:
+
+ Applied patch #103613: fix memory leak in snmpd port specification -> default_store.
+
+2001-02-09 11:14 hardaker
+
+ * agent/: mib_modules.c (V4-2-patches.2), mib_modules.c:
+
+ Applied patch #103612: fix memory leak in mib_module init code
+
+2001-02-09 11:12 hardaker
+
+ * agent/: agent_registry.c (V4-2-patches.1), agent_registry.c:
+
+ Applied patch #103611: fix memory leak for duplicate oid registrations.
+
+2001-02-09 11:05 hardaker
+
+ * agent/mibgroup/ucd-snmp/: memory_freebsd2.c, proxy.c
+ (V4-2-patches.[1,4]), memory_freebsd2.c:
+
+ Applied patch #103702: fix swap reporting on freebsd 4.2
+
+2001-02-09 10:12 hardaker
+
+ * acconfig.h , config.h.in , configure ,
+ configure.in , agent/agent_trap.c , agent/snmp_agent.c
+ , agent/snmp_agent.h , agent/snmp_vars.c ,
+ agent/snmpd.c , agent/mibgroup/mibII/vacm_vars.c ,
+ apps/snmpstatus.c , apps/snmptest.c , apps/snmptrap.c
+ , apps/snmptrapd.c , apps/snmptrapd_log.c ,
+ apps/snmptrapd_log.h , mibs/UCD-SNMP-MIB.txt ,
+ snmplib/Makefile.in , snmplib/snmp_alarm.c ,
+ snmplib/snmp_alarm.h , snmplib/snmp_api.c ,
+ snmplib/snmp_api.h , snmplib/snmp_client.c ,
+ snmplib/vacm.h:
+
+ Applied patch 103510: domain transport independence. Note: Traps/VACM broken.
+
+2001-02-09 08:54 hardaker
+
+ * testing/tests/: T001snmpv1get , T002snmpv1getnext ,
+ T003snmpv1getfail , T014snmpv2cget , T015snmpv2cgetnext
+ , T016snmpv2cgetfail , T017snmpv2ctov1getfail ,
+ T018snmpv1tov2cgetfail , T020snmpv3get ,
+ T021snmpv3getnext , T022snmpv3getMD5 ,
+ T023snmpv3getMD5DES , T024snmpv3getSHA1 ,
+ T025snmpv3getSHADES , T028snmpv3getfail ,
+ T030snmpv3usercreation , T053agentv1trap ,
+ T054agentv2ctrap , T055agentv1mintrap ,
+ T056agentv2cmintrap , T058agentauthtrap , T100agenthup
+ , T110agentxget , T111agentxset , T112agentxsetfail
+ , T113agentxtrap , T120proxyget , T121proxyset
+ , T122proxysetfail:
+
+ updated most tests to use numeric OIDs so as to not rely on mib parsing
+
+2001-02-09 07:18 hardaker
+
+ * agent/mibgroup/agentx/master.h:
+
+ remove unused prototype: get_agentx_transID
+
+2001-02-08 14:15 hardaker
+
+ * local/Makefile.in , local/traptoemail ,
+ man/snmptrapd.conf.5.def:
+
+ traptoemail perl script created as an example traphandle script
+
+2001-02-08 14:01 hardaker
+
+ * Makefile.in , acconfig.h , config.h.in ,
+ agent/Makefile.in , agent/agent_trap.c ,
+ agent/mib_modules.c , agent/snmpd.c ,
+ agent/mibgroup/kernel_sunos5.c ,
+ agent/mibgroup/agentx/client.c ,
+ agent/mibgroup/agentx/master.c ,
+ agent/mibgroup/agentx/master_admin.c ,
+ agent/mibgroup/agentx/master_admin.h ,
+ agent/mibgroup/agentx/master_request.c ,
+ agent/mibgroup/agentx/protocol.c ,
+ agent/mibgroup/agentx/subagent.c ,
+ agent/mibgroup/host/hr_print.c ,
+ agent/mibgroup/host/hr_swrun.c ,
+ agent/mibgroup/mibII/interfaces.c ,
+ agent/mibgroup/mibII/var_route.c ,
+ agent/mibgroup/notification/snmpNotifyTable.c ,
+ agent/mibgroup/smux/smux.c ,
+ agent/mibgroup/ucd-snmp/loadave.c ,
+ agent/mibgroup/ucd-snmp/proxy.c ,
+ agent/mibgroup/ucd-snmp/vmstat.h ,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c ,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.h ,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c ,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.h ,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c ,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.h ,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c ,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.h , apps/snmpdelta.c
+ , apps/snmpset.c , apps/snmptrap.c ,
+ apps/snmpvacm.c , apps/snmpnetstat/Makefile.in ,
+ local/mib2c , man/snmpcmd.1 , mibs/RMON-MIB.txt ,
+ mibs/UCD-SNMP-MIB.txt , perl/SNMP/SNMP.pm ,
+ snmplib/int64.c , snmplib/parse.c , snmplib/snmp_api.c:
+
+ Merge from V4-2-patches: merge 1->2
+
+2001-01-30 17:13 hardaker
+
+ * agent/mibgroup/ucd-snmp/: disk.c (V4-2-patches.1), disk.c:
+
+ Applied patch #103414: fix disk info for block sizes other than 1024.
+
+2001-01-30 13:28 hardaker
+
+ * agent/mibgroup/disman/mteTriggerTable.c:
+
+ use snmp_enum's properly (strdup() the strings first)
+
+2001-01-30 13:28 hardaker
+
+ * snmplib/: snmp_enum.c , snmp_enum.h:
+
+ proper constness for some of the function arguments.
+
+2001-01-30 13:27 hardaker
+
+ * snmplib/read_config.c:
+
+ fix bug I just introduced (returning proper saveto pointer)
+
+2001-01-30 13:17 hardaker
+
+ * local/tkmib:
+
+ - snmpsets are supported
+ - A new "set" button has been added to perform sets on an oid.
+ - All writable objects in a table are now buttons that bring up the
+ set window with the current value instated.
+ - All writable objects in the output of snmp{get,walk,getnext}
+ buttons are displayed as blue and are clickable to change their
+ values.
+ - settings configured via the options menu can now be saved.
+ - use Getopt::Std now.
+ - supports most of the important snmpcmd(1) flags for session setup.
+
+2001-01-30 13:12 hardaker
+
+ * agent/mibgroup/disman/: event-mib.h ,
+ mteTriggerBooleanTable.c , mteTriggerBooleanTable.h ,
+ mteTriggerDeltaTable.c , mteTriggerDeltaTable.h ,
+ mteTriggerExistenceTable.c , mteTriggerExistenceTable.h ,
+ mteTriggerTable.c , mteTriggerTable.h ,
+ mteTriggerThresholdTable.c , mteTriggerThresholdTable.h:
+
+ Initial (not-complete) implementation of the DISMAN-EVENT-MIB:
+ - Implements all 3 tests (boolean, threshold and existence).
+ - not rigorously tested.
+ - Currently only supports querying the local agent
+ (mteTriggerTargetTag must be '').
+ - Currently only supports sending traps and the mteObjectsTable is
+ not implemented (my next todo item)
+ - Only the default traps are sent. The mteEvent* objects haven't
+ been implemented (no self-defined traps/sets).
+ - no easy to use configuration yet (soon).
+ - configure with --with-mib-modules=disman/event-mib
+
+2001-01-30 13:03 hardaker
+
+ * snmplib/read_config.c:
+
+ Use memcpy instead of sprintf for strings that may not be null terminated.
+
+2001-01-30 12:58 hardaker
+
+ * agent/: snmp_agent.c , snmp_agent.h:
+
+ Implemented get_current_agent_session() and set_current_agent_session():
+ - These allow a mib module to retrieve the current
+ agent_snmp_session pointer for the current transaction.
+ - This should probably done differently later when we change the mib
+ module api.
+ - This will completely fail to work properly in a multi-threaded
+ agent (which we currently don't support anyway).
+
+2001-01-29 11:58 hardaker
+
+ * snmplib/callback.c:
+
+ debugging statement at initialization time.
+
+2001-01-29 11:58 hardaker
+
+ * snmplib/read_config.c:
+
+ properly malloc a 1 byte, NULL character string for "" read strings.
+
+2001-01-29 11:54 hardaker
+
+ * agent/mibgroup/: header_complex.c , header_complex.h:
+
+ data seperation and new functions:
+ header_complex_get_from_oid()
+ header_complex_add_data_by_oid()
+
+2001-01-12 08:22 hardaker
+
+ * mibs/DISMAN-EVENT-MIB.txt:
+
+ - DISMAN-EVENT-MIB added to mib repository. (Or, guess what I did during a 6 hour plane flight?)
+
+2001-01-12 08:16 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ support bit strings
+
+2001-01-12 08:00 hardaker
+
+ * snmplib/: snmp_api.c (V4-2-patches.5), snmp_api.c:
+
+ - bit_string fixes
+ - make snmp_add_var call snmp_parse_oid() instead of read_objid().
+
+2001-01-12 07:58 hardaker
+
+ * snmplib/read_config.c:
+
+ - new data types supported for read_config routines: unsigned, bit_str.
+
+2001-01-12 07:56 hardaker
+
+ * snmplib/: asn1.c (V4-2-patches.3), asn1.c:
+
+ comment out really odd (and broken) check from asn_bitstring_check???
+
+2001-01-12 07:53 hardaker
+
+ * agent/mibgroup/agentx/subagent.c:
+
+ move config string initializer above subagent check so its known even
+ if not used.
+
+2001-01-12 07:51 hardaker
+
+ * local/: mib2c.storage.conf, mib2c.vartypes.conf
+ (V4-2-patches.[1,1]), mib2c.storage.conf ,
+ mib2c.vartypes.conf:
+
+ - misc bug fixes.
+ - new data types (uint32, unsigned, bits).
+
+2001-01-09 17:08 hardaker
+
+ * agent/: agent_registry.c , agent_registry.h ,
+ ds_agent.h , var_struct.h , mibgroup/mibincl.h ,
+ mibgroup/agentx/client.c , mibgroup/agentx/master_admin.c
+ , mibgroup/agentx/master_request.c ,
+ mibgroup/agentx/subagent.c , mibgroup/agentx/subagent.h:
+
+ SubAgent ping support:
+ - agentxPingInterval specifies SECONDS between when the subagent
+ tries to ping the master agent.
+ - if no response is received, it tries to reconnect.
+ - failing that it tries every SECONDS again till it succeeds.
+ - re-registers its oid's based on the current subtree list.
+ - may need some thought. Assumes *all* need to be re-registered.
+ - needs to re-register sysortable entries too, but doesn't.
+ - currently seg-faults on about the 2-4th time or so. Not sure why.
+ - Should make Dave smile or cringe or giggle, not sure which.
+
+2001-01-09 17:02 hardaker
+
+ * snmplib/: callback.c , callback.h:
+
+ Allow deregistering of callbacks
+
+2001-01-09 06:20 hardaker
+
+ * win32/snmpnetstat/: snmpnetstat.dsp (V4-2-patches.1),
+ snmpnetstat.dsp:
+
+ added getopt.c to list
+
+2001-01-04 16:44 hardaker
+
+ * snmplib/: snmp_enum.c , snmp_enum.h:
+
+ - generic snmp enum list support. Not used anywhere (yet).
+
+2001-01-04 16:43 hardaker
+
+ * configure , configure.in , agent/agent_callbacks.h
+ , agent/agent_trap.c , agent/agent_trap.h ,
+ agent/mibgroup/examples/example.c ,
+ agent/mibgroup/host/hr_swrun.c ,
+ agent/mibgroup/mibII/interfaces.c ,
+ agent/mibgroup/notification/snmpNotifyTable.c ,
+ agent/mibgroup/notification/snmpNotifyTable.h ,
+ apps/snmpnetstat/main.c , snmplib/Makefile.in ,
+ snmplib/asn1.c , snmplib/callback.c ,
+ snmplib/callback.h , snmplib/mib.c ,
+ snmplib/snmp_api.c , snmplib/snmp_logging.c ,
+ testing/tests/T053agentv1trap , testing/tests/T054agentv2ctrap
+ , testing/tests/T055agentv1mintrap ,
+ testing/tests/T056agentv2cmintrap ,
+ testing/tests/T113agentxtrap:
+
+ - merged patches from V4-2-patches branch to main branch.
+
+2001-01-04 10:37 hardaker
+
+ * man/snmp.conf.5.def , man/snmpcmd.1 , snmplib/mib.c:
+
+ - added new printHexText snmp.conf token.
+ - documented -OT, and the token.
+
+2001-01-04 10:27 hardaker
+
+ * snmplib/: default_store.h , mib.c:
+
+ Patch #103091 applied:
+ - Added -OT option to view hex strings with text in them.
+
+2000-12-27 16:47 hardaker
+
+ * testing/tests/T056agentv2cmintrap:
+
+ file T056agentv2cmintrap was initially added on branch V4-2-patches.
+
+2000-12-27 16:47 hardaker
+
+ * testing/tests/T055agentv1mintrap:
+
+ file T055agentv1mintrap was initially added on branch V4-2-patches.
+
+2000-12-22 07:02 hardaker
+
+ * snmplib/vacm.c:
+
+ fix view processing to watch for length prefix. The length prefix
+ really really shouldn't be stored directly in the oid. Niels?
+
+2000-12-19 07:22 hardaker
+
+ * snmplib/snmpv3.c:
+
+ make init_snmpv3() deal with a NULL argument properly.
+
+2000-12-18 14:37 hardaker
+
+ * local/.cvsignore:
+
+ - (.cvsignore): remove passtest from the .cvsignore file (bug #12694)
+
+2000-12-18 10:45 marz
+
+ * perl/SNMP/: README , SNMP.pm:
+
+ minor doc fix
+
+2000-12-14 13:46 nba
+
+ * snmplib/system.c:
+
+ - system.c: fix uptime for 64-bit Solaris
+
+2000-12-14 13:45 nba
+
+ * agent/mibgroup/ucd-snmp/dlmod.c:
+
+ - dlmod.c: fix stupid spelling error
+
+2000-12-13 21:52 nba
+
+ * agent/mibgroup/ucd-snmp/dlmod.c:
+
+ - dlmod.c: fix confusion between int, size_t, long for 64-bit compiles.
+
+2000-12-13 08:40 hardaker
+
+ * man/Makefile.in:
+
+ - (Makefile.in): add snmpconf.1
+
+2000-12-08 14:49 nba
+
+ * agent/mibgroup/mibII/vacm_vars.c , snmplib/vacm.c:
+
+ - vacm_vars.c, vacm.c: indexing of vacmViewTreeFamilyEntry was hosed, assuming
+ that the Subtree index had an IMPLIED attribute.
+
+2000-12-08 14:46 nba
+
+ * agent/mibgroup/host/: hr_filesys.c , hr_partition.c:
+
+ - hr_filesys.c, hr_partition.c: fix some zero index values.
+
+2000-12-08 14:43 nba
+
+ * agent/snmp_vars.c:
+
+ - snmp_vars.c: fix returns of zeroDotZero (such as ifSpecific)
+
+2000-12-08 14:38 nba
+
+ * agent/agent_trap.c:
+
+ - agent_trapd.c: security model values are not the same is snmp version values
+
+2000-12-06 14:45 nba
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - interfaces.c: Linux kernel 2.0.x has no ARPHRD_HIPPI
+
+2000-12-05 07:00 hardaker
+
+ * local/Makefile.in:
+
+ - (Makefile.in): Fix rsnmp's /usr/local hardcoded path.
+
+2000-12-04 17:03 hardaker
+
+ * testing/tests/T112agentxsetfail:
+
+ - (T112agentxsetfail): fix
+
+2000-12-04 16:33 hardaker
+
+ * README , sedscript.in , version.h:
+
+ - (version.h sedscript.in): version tag ( 5.2 )
+
+-------------------------------------------------------------------------------
+
+Changes: V4.2.3 -> V4.2.4
+
+2002-04-04 15:24 hardaker
+
+ * snmplib/: snmp_api.c, snmp_api.h:
+
+ patch from Petter Larsen to add a function for extracting the fd associated with a session
+
+2002-04-04 15:14 hardaker
+
+ * agent/agent_registry.c:
+
+ deal with fd unregistrations properly.
+
+2002-04-03 08:32 hardaker
+
+ * FAQ, README, sedscript.in, version.h, perl/SNMP/SNMP.pm:
+
+ - (version.h sedscript.in): version tag ( 4.2.4.pre3 )
+
+2002-04-02 15:02 hardaker
+
+ * agent/mibgroup/ucd-snmp/registry.c:
+
+ Apply patch #515577 to fix one case of a registry problem.
+
+2002-04-02 14:57 hardaker
+
+ * agent/mibgroup/ucd-snmp/disk.c, s/darwin.h:
+
+ Apply patch #524424 for darwin fixes for ucd-snmp/disk.c
+
+2002-04-02 14:48 hardaker
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ apply patch 527573 to fix 64 bit types on solaris
+
+2002-04-01 22:28 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Let init_snmp protect itself.
+
+2002-03-28 23:48 hardaker
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ enable row creation for pass modules. Patch #482005
+
+2002-03-28 23:44 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ patch #517340: freebsd5 support
+
+2002-03-28 23:38 hardaker
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ apply freebsd5 patch #517333
+
+2002-03-28 23:10 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ fix bug #525844. perl SNMP was using a trap address of 0.0.0.0.
+
+2002-03-28 23:03 hardaker
+
+ * snmplib/snmp_api.c:
+
+ use a static variable for init checking. Bug #536386.
+
+2002-03-28 15:23 dts12
+
+ * FAQ:
+
+ Add a few new entries (mostly relating to traps)
+
+2002-03-27 01:55 dts12
+
+ * configure.in, configure:
+
+ Use the correct name of the Windows IP Helper API library.
+ (Computers can be soooo picky!)
+
+2002-03-26 08:29 hardaker
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ enable diskio on freebsd5. Implements patch 517328 in a different way.
+
+2002-03-26 07:44 dts12
+
+ * configure, configure.in:
+
+ Add /etc/filesystems to list of mount table files (for AIX)
+ Should fix bugs 232588 and (?)517113
+
+2002-03-26 07:39 dts12
+
+ * configure, configure.in:
+
+ Remove trailing ':' from list of MIB module names in configure output,
+ to avoid confusion (see Bug #491129)
+
+2002-03-26 06:50 dts12
+
+ * configure, configure.in:
+
+ Add '-lhlpapi' to the agent libraries when compiling under Windows
+ (using Cygwin). DLLIBS is not as suitable as AGENT_LIBS for this
+ (see the equivalent patch on the main branch), but it should do.
+ Should fix Bug #534409.
+
+2002-03-25 22:33 rstory
+
+ * snmplib/parse.c:
+
+ fix bug#520478 showMibErrors token is inverted
+
+2002-03-25 18:47 rstory
+
+ * agent/snmp_vars.c:
+
+ fix bug#502123 agentx infinite loop.
+
+2002-03-24 05:19 nba
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ Restrict hrSWRunParams returns values to 128 octets
+
+2002-03-24 05:04 nba
+
+ * snmplib/mib.c:
+
+ Oops - snprint_* cannot realloc
+
+2002-03-21 07:21 hardaker
+
+ * configure.in, configure:
+
+ fix bug #532696 fixing rpm for newer rpm versions
+
+2002-03-20 07:48 hardaker
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ remove illegal SET support for sysDescr.
+
+2002-03-19 02:01 jbpn
+
+ * agent/mibgroup/smux/smux.h:
+
+ - patch from Joshua Giles to increase the maximum string length
+ (#527650).
+
+2002-03-18 14:38 nba
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ Add missing exports for VC++ build
+
+2002-03-18 13:23 nba
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ Proper test for successful open of ETC_MNTTAB
+
+2002-03-18 13:09 nba
+
+ * agent/agent_read_config.c:
+
+ Fix interchanged parameters for strncpy
+
+2002-03-18 08:51 dts12
+
+ * win32/: win32.dsw, encode_keychange/encode_keychange.dsp,
+ libagent/libagent.dsp, libsnmp/libsnmp.dsp,
+ libsnmp_dll/libsnmp_dll.dsp, libucdmibs/libucdmibs.dsp,
+ snmpbulkget/snmpbulkget.dsp, snmpbulkwalk/snmpbulkwalk.dsp,
+ snmpd/snmpd.dsp, snmpdelta/snmpdelta.dsp, snmpdf/snmpdf.dsp,
+ snmpgetnext/snmpgetnext.dsp, snmpget/snmpget.dsp,
+ snmpnetstat/snmpnetstat.dsp, snmpset/snmpset.dsp,
+ snmpstatus/snmpstatus.dsp, snmptable/snmptable.dsp,
+ snmptest/snmptest.dsp, snmptranslate/snmptranslate.dsp,
+ snmptrap/snmptrap.dsp, snmptrapd/snmptrapd.dsp,
+ snmpusm/snmpusm.dsp, snmpvacm/snmpvacm.dsp, snmpwalk/snmpwalk.dsp:
+
+ Apply DOS-type line endings to the DSW/DSP files.
+
+2002-03-18 08:41 dts12
+
+ * agent/mibgroup/smux/smux.c:
+
+ Use the same variable name for output buffer and size calculation.
+
+2002-03-18 05:39 jbpn
+
+ * README.hpux11, agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_system.c, agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/ucd-snmp/loadave.c,
+ agent/mibgroup/ucd-snmp/memory.c, agent/mibgroup/ucd-snmp/memory.h,
+ s/hpux.h:
+
+ - commit Johannes's update to the HPUX-11 patch
+
+2002-03-18 02:31 jbpn
+
+ * agent/mibgroup/agentx/master.c:
+
+ - extend tcp_wrappers support to AgentX. This makes it more
+ reasonable to implement a distributed subagent architecture
+ without massive security worries.
+
+2002-03-14 07:23 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Fix dont_probe bug pointed out by Stefan Aeschbacher.
+
+2002-03-13 18:58 slif
+
+ * snmplib/asn1.c:
+
+ Clarify unsigned char argument for the noisy or confused compiler.
+
+2002-03-13 18:46 slif
+
+ * agent/mibgroup/mibII/vacm_vars.c, apps/snmptrapd_log.c:
+
+ quell several warnings about signed vs unsigned comparisons.
+
+2002-03-13 18:44 slif
+
+ * win32/win32.dsw:
+
+ remove dependencies to restore building either Debug or Release targets.
+
+2002-03-13 18:43 slif
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ track change setenv --> snmp_setenv
+
+2002-03-13 15:50 hardaker
+
+ * mibs/: UCD-DEMO-MIB.txt, UCD-DISKIO-MIB.txt, UCD-DLMOD-MIB.txt,
+ UCD-IPFILTER-MIB.txt, UCD-IPFWACC-MIB.txt, UCD-SNMP-MIB.txt:
+
+ address changes for ucd-snmp -> net-snmp note saying these mibs are no
+ longer supported by UCD.
+
+2002-03-13 15:21 hardaker
+
+ * snmplib/tools.c:
+
+ malloc at least one byte in hex_to_binary2
+
+2002-03-13 04:03 dts12
+
+ * FAQ:
+
+ Add a description of "unlinked OIDs".
+
+2002-03-12 20:03 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory_solaris2.c:
+
+ Patch from daniel Sully to improve solaris swap info
+
+2002-03-12 08:34 dts12
+
+ * FAQ:
+
+ Updating of the FAQ ready for the next release.
+ (Mostly rephrasing of existing entries, but a few new questions)
+
+2002-03-11 10:06 hardaker
+
+ * agent/: mibgroup/smux/smux.c, mibgroup/ucd-snmp/proxy.c,
+ agent_index.c, agent_read_config.c, agent_registry.c, snmp_agent.c,
+ snmpd.c, mibgroup/agentx/master_request.c:
+
+ better printing apis
+
+2002-03-11 10:06 hardaker
+
+ * apps/snmpvacm.c:
+
+ fix api in a comment (how picky am I?)
+
+2002-03-11 07:41 dts12
+
+ * FAQ:
+
+ Bring the 4x- and main-branch FAQs into agreement.
+
+2002-03-11 05:16 jbpn
+
+ * snmplib/parse.c:
+
+ - fix bad type assignment in build_translation_table(), noticed by
+ Peter Stevens.
+
+2002-03-10 14:07 nba
+
+ * snmplib/mib.h:
+
+ Oops - forgot to remove the #ifdef for unsafe sprint_* functions declarations
+
+2002-03-10 13:54 nba
+
+ * apps/snmpwalk.c:
+
+ Fix up out-of-order error message
+
+2002-03-10 13:44 nba
+
+ * apps/snmpdelta.c:
+
+ Don't die on v2 exceptions
+
+2002-03-10 13:41 nba
+
+ * snmplib/: asn1.c, snmp_debug.c:
+
+ Remove some calls to old sprint_* functions
+
+2002-03-10 13:39 nba
+
+ * snmplib/: mib.c, mib.h:
+
+ Add snprint_* replacement functions for all sprint_* functions
+
+2002-03-10 13:38 nba
+
+ * man/mib_api.3:
+
+ Document snprint_{objid,variable,value}
+
+2002-03-10 08:34 hardaker
+
+ * snmplib/: mib.c, mib.h:
+
+ include the snprintf counterparts from the 5.0 code.
+
+2002-03-08 18:07 hardaker
+
+ * agent/mibgroup/mibII/ipAddr.c:
+
+ redefine a variable on freebsd for 2.2.5
+
+2002-03-08 17:57 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ remove a broken fix I accidentically committed
+
+2002-03-08 17:42 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ patch from Mihail Balikov to support up but no ip interfaces.
+
+2002-03-08 17:27 hardaker
+
+ * configure.in, configure, aclocal.m4:
+
+ patch from Paul Rasmussen to fix --enable-shared
+
+2002-03-08 16:58 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ old patch from Bert Driehuis to fix c64s in perl
+
+2002-03-08 14:53 nba
+
+ * snmplib/mib.c:
+
+ Remove 1000 lines of duplicate code by using the sprint_realloc_* functions
+ in the implementaion of the non-realloc counterparts.
+
+2002-03-08 14:51 nba
+
+ * apps/: snmpdelta.c, snmptable.c, snmpusm.c, snmpwalk.c:
+
+ Remove last sprint_nonrealloc calls
+
+2002-03-07 03:20 jbpn
+
+ * man/mib_api.3:
+
+ - patch from Guy Harris to describe new mib_api
+
+2002-03-07 02:58 jbpn
+
+ * snmplib/mib.h:
+
+ - declare the sprint_realloc_blah functions. Thanks to Guy Harris.
+
+2002-03-06 08:41 dts12
+
+ * snmplib/snmpv3.c:
+
+ Fix a confusion between defAuthType and defPrivType.
+
+2002-03-06 05:52 dts12
+
+ * snmplib/snmp_api.c:
+
+ Actually use the common 'defPassphrase' value if 'def{Auth,Priv}Passphrase' isn't set.
+ Qn: Should the AuthPassphrase also be used for privacy if no other value is available?
+
+2002-03-06 03:19 jbpn
+
+ * testing/Makefile.in:
+
+ - ignore errors doing rm -rf /tmp/snmp-test* when making clean (this
+ happens all the time on the compile farm because e.g. I can't
+ delete Wes's test directories and it's a nuisance because then the
+ rest of the directories don't get cleaned up properly).
+
+2002-03-06 02:24 jbpn
+
+ * snmplib/mib.c:
+
+ - fix another potential buffer overflow problem as reported in bug
+ #526262.
+
+2002-03-05 10:45 hardaker
+
+ * agent/mibgroup/ucd-snmp/versioninfo.c:
+
+ impose max length restriction supplied by mib for configuration options.
+
+2002-03-05 09:52 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ missed a modification to the patch.
+
+2002-03-05 09:51 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ A modified patch from Juergen Schoenwaelder for longer configure strings.
+
+2002-03-05 08:23 dts12
+
+ * agent/snmp_vars.h:
+
+ Reverse my earlier (bogus) fix.
+ Things were fine as they were - I must be cracking up.....
+
+2002-03-05 08:05 dts12
+
+ * agent/mibgroup/examples/ucdDemoPublic.c:
+
+ Add missing "standard" headers, and tweak a type slightly.
+ (Based on requests from Gregory Toth).
+
+2002-03-05 06:56 dts12
+
+ * agent/snmp_vars.h:
+
+ Bring declaration of 'init_agent' into line with code definition.
+
+2002-03-05 06:48 dts12
+
+ * agent/mibgroup/: notification/snmpNotifyTable.c, ucd-snmp/dlmod.c:
+
+ Cast a couple of mallocs appropriately (requested by Gregory Toth)
+
+2002-03-04 21:38 hardaker
+
+ * FAQ, README, sedscript.in, version.h, perl/SNMP/SNMP.pm:
+
+ - (version.h sedscript.in): version tag ( 4.2.4.pre2 )
+
+2002-03-04 01:51 dts12
+
+ * local/mib2c:
+
+ Catch and report invalid node specifications.
+ (This ought to be handled by that test that follows immediately, but
+ "$SNMP::MIB{$oid}" appears to return the core mib-2 object regardless)
+
+2002-03-04 01:16 dts12
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+
+ Correct debug output message (thanks to Jeroen Ruigrok)
+
+2002-03-01 22:37 hardaker
+
+ * snmplib/asn1.c:
+
+ fix bug #524529
+
+2002-03-01 07:17 nba
+
+ * ltmain.sh, aclocal.m4, configure:
+
+ Pull in up-to-date libtool, which should help Darwin
+
+2002-03-01 07:15 nba
+
+ * config.guess, config.sub:
+
+ Pull in up-to-date config scripts
+
+2002-02-27 09:47 dts12
+
+ * snmplib/vacm.c:
+
+ Handle views that specify a full instance OID.
+ (Since the internally stored OID prepends the length as well,
+ the apparent length is one greater than it really is)
+
+2002-02-26 14:18 nba
+
+ * snmplib/: parse.c, parse.h:
+
+ Save File/line for messages about unlinked OIDs
+
+2002-02-25 15:46 nba
+
+ * mibs/: Makefile.mib, mibfetch:
+
+ Make sure that we fetch IANAifType-MIB from the maintained location.
+
+2002-02-25 15:45 nba
+
+ * mibs/DISMAN-SCHEDULE-MIB.txt:
+
+ Update for RFC 3231
+
+2002-02-25 08:59 nba
+
+ * mibs/rfclist:
+
+ New RFC's issued with mibs:
+ 3201 CIRCUIT-IF-MIB
+ 3202 FRSLD-MIB
+ 3231 DISMAN-SCHEDULE-MIB
+
+2002-02-25 08:57 nba
+
+ * agent/mibgroup/host/hr_disk.c:
+
+ FreeBSD4 has new disk names
+
+2002-02-25 08:56 nba
+
+ * agent/mibgroup/host/hr_print.c:
+
+ Properly bracket run_lpstat prototype
+
+2002-02-25 02:48 jbpn
+
+ * snmplib/parse.c:
+
+ - only copy the first DESCRIPTION clause of MODULE-COMPLIANCE
+ statements to avoid a memory leak (see bug #522363).
+
+2002-02-25 01:21 dts12
+
+ * agent/snmpd.c:
+
+ Specify the correct debug token for displaying the list of modules
+ (spotted by Brian Shaver)
+
+2002-02-22 09:27 dts12
+
+ * snmplib/: MSG00001.bin, winservice.mc ,
+ MSG00001.bin (1.1), winservice.mc (1.1):
+
+ Add missing files for Windows service operation.
+
+2002-02-22 08:42 dts12
+
+ * agent/snmpd.c:
+
+ Just close the main session when shutting down under Windows,
+ not everything (so that it can still generate the shutdown trap).
+
+2002-02-22 01:49 jbpn
+
+ * FAQ, README.win32:
+
+ - update comments on Win32 port in FAQ
+
+ - discuss what IPHLPAPI.{LIB,DLL} is and where it can be obtained
+ from in README.win32
+
+2002-02-21 07:02 dts12
+
+ * win32/snmpd/snmpd.dsp:
+
+ Fix bogus structure comments in the snmpd project file.
+
+2002-02-21 03:13 jbpn
+
+ * agent/mibgroup/smux/smux.c:
+
+ - emit error on over-length password instead of writing off end of
+ buffer (bug #520649, noted by John Sellens).
+
+2002-02-20 09:27 jbpn
+
+ * apps/snmptranslate.c, apps/snmptrapd.c,
+ snmplib/snmp_parse_args.c, snmplib/system.c, snmplib/system.h:
+
+ - changes to avoid namespace clash problems with setenv() which are
+ caused by libwrap supplying a function of that name as well as us.
+
+ - all calls in the code to setenv() are replaced with a call to
+ snmp_setenv().
+
+ - snmp_setenv() calls setenv() if such a function exists, otherwise
+ it simulates the effect by calling putenv().
+
+2002-02-20 05:43 jbpn
+
+ * NEWS:
+
+ - mention tcp_wrappers support for snmptrapd
+
+2002-02-20 05:41 jbpn
+
+ * apps/: Makefile.in, snmptrapd.c:
+
+ - add libwrap support for snmptrapd
+
+2002-02-20 05:20 jbpn
+
+ * configure, configure.in:
+
+ - exit with an error if --with-libwrap is given and we can't find it
+
+2002-02-20 03:00 jbpn
+
+ * apps/snmpdelta.c:
+
+ - initialise some buffers, to avoid garbage printing problems, as
+ noted by Anonymous in bug #520220.
+
+2002-02-19 06:47 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+
+ Patch from Jeroen Ruigrok to merge a few ifdefs
+
+2002-02-19 01:51 jbpn
+
+ * agent/auto_nlist.h:
+
+ - add forward declaration of struct nlist to avoid compiler
+ complaints. Thanks to Andy Hood.
+
+2002-02-18 08:17 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory.c:
+
+ patch from Jeroen Ruigrok for minor ifdef clean ups
+
+2002-02-18 02:36 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - use calloc instead of malloc to make sure buffer is initially
+ zero-terminated (in case of 0 varbinds). Bug #518700, noted by
+ Andreas Hartmann.
+
+2002-02-18 02:29 dts12
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ Remove a couple of unhelpful OSF definitions (thanks to Jeroen Ruigrok)
+
+2002-02-18 02:09 jbpn
+
+ * agent/mibgroup/: notification/snmpNotifyTable.c,
+ target/snmpTargetAddrEntry.c:
+
+ - remove troublesome inline qualifiers. Thanks to Andy Hood for
+ noting that these cause problems on AIX.
+
+2002-02-18 02:05 jbpn
+
+ * agent/mibgroup/mibII/at.c:
+
+ - remove //-style comments. Thanks to Andy Hood for pointing this
+ out.
+
+2002-02-18 00:13 hardaker
+
+ * snmplib/asn1.c:
+
+ don't build oid's with >128 length subids. (see bug #518855)
+
+2002-02-15 22:07 hardaker
+
+ * FAQ, README, sedscript.in, version.h, perl/SNMP/SNMP.pm:
+
+ - (version.h sedscript.in): version tag ( 4.2.4.pre1 )
+
+2002-02-15 17:02 hardaker
+
+ * agent/mibgroup/snmpv3/usmUser.c:
+
+ fix bug#508126 which actually led me to another.
+ - oid parsing and searching in getnexts could sometimes loop.
+
+2002-02-15 17:00 hardaker
+
+ * Makefile.top, configure, configure.in:
+
+ support --disable-shared-version concept from Paul Rasmussen.
+
+2002-02-15 16:41 hardaker
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ dynix broke linux. Bad dynix. No bone. Go to your room.
+
+2002-02-15 16:28 hardaker
+
+ * snmplib/ucd-snmp-includes.h:
+
+ add back in netinet/in.h and sys/time.h (in proper protected form)
+ which was deleted from 4.2.3 for some reason we never figured out.
+
+2002-02-15 16:21 hardaker
+
+ * ChangeLog, FAQ, NEWS, README:
+
+ updates for what will be 4.2.4
+
+2002-02-15 15:52 hardaker
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ check end of mibview conditions
+
+2002-02-15 08:01 dts12
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ Populate an empty case statement (spotted by Jeroen Ruigrok)
+
+2002-02-15 07:11 hardaker
+
+ * README.snmpv3:
+
+ remove unneeded -CN and -CO example options
+
+2002-02-15 06:47 dts12
+
+ * agent/snmpd.c, snmplib/winservice.c, snmplib/winservice.h,
+ snmplib/winservice.rc, win32/snmpd/snmpd.dsp:
+
+ Support for running as a Windows service.
+ (Supplied by Raju Krishnappa & Latha Prabhu)
+
+2002-02-14 11:11 nba
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ Make buffer pointer static so it doesn't leak
+
+2002-02-14 11:10 nba
+
+ * snmplib/scapi.h:
+
+ Fix bad paranthesis
+
+2002-02-14 07:40 hardaker
+
+ * agent/snmpd.c:
+
+ fix email address bug #517178
+
+2002-02-14 01:47 dts12
+
+ * apps/snmpnetstat/if.c:
+
+ Check for running off the end of I/F table (patch from RedHat)
+
+2002-02-14 01:44 dts12
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ Include RedHat patches for better RPM support
+
+2002-02-14 01:38 dts12
+
+ * config.h.in, configure, configure.in:
+
+ Adopt RedHat's configure testing for rpm library requirements
+
+2002-02-13 16:41 hardaker
+
+ * configure, configure.in:
+
+ enable shared by default except for developers
+
+2002-02-13 13:51 hardaker
+
+ * agent/mibgroup/target/snmpTargetAddrEntry.c:
+
+ remove inline function from being declared in another function.
+
+2002-02-13 13:27 hardaker
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ remove inline function from being declared in another function.
+
+2002-02-13 08:18 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ fix sets of unsigned32's.
+
+2002-02-13 07:59 dts12
+
+ * snmplib/mib.c:
+
+ DS_LIB_PRINT_SUFFIX_ONLY is an integer option, not a boolean flag.
+ (Attempting to set this via the SUFFIX environmental variable will
+ turn on packet dumping instead!)
+
+2002-02-13 04:15 jbpn
+
+ * agent/mibgroup/host/hr_print.c:
+
+ - fix bug #516904 (snmpd dies if no printcap with cgetent), noted by
+ Anonymous -- check return value of cgetnext() properly in
+ Init_HR_Print().
+
+2002-02-12 07:11 jbpn
+
+ * configure.in, configure:
+
+ - amend fix to bug #516389 (ucd-snmp 4.2.3 libwrap support broken) to
+ actually add -lnsl to link parameters!
+
+2002-02-12 05:29 jbpn
+
+ * configure, configure.in:
+
+ - fix bug #516389 (ucd-snmp 4.2.3 libwrap support broken) -- USE_LIBWRAP
+ was not being #defined in the case where -lnsl is needed in addition
+ to -lwrap.
+
+2002-02-12 01:30 dts12
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ Implement the BadCommunity{Names,Uses} counters.
+
+2002-02-11 10:07 jbpn
+
+ * apps/snmptable.c:
+
+ - fix bugs #489336 and #508146 (duplicate columns and columns in
+ wrong order).
+
+2002-02-11 08:23 dts12
+
+ * snmplib/snmp_parse_args.c:
+
+ Use the 'ds_set_xxx' library routines, rather than the old 'snmp_set_xxx' calls
+
+2002-02-11 05:30 jbpn
+
+ * FAQ:
+
+ - mention HPUX-11 and Dynix/PTX 4.4 support, and some spelling fixes
+
+2002-02-08 06:12 dts12
+
+ * agent/mibgroup/mibII/sysORTable.h:
+
+ Ensure the null versions of the two REGISTER macros swallow their parameters.
+
+2002-02-08 04:42 dts12
+
+ * agent/snmp_agent.c:
+
+ Implement the missing outgoing error statistics counters
+ (patch #510194 from Latha Prabhu)
+
+2002-02-08 02:54 dts12
+
+ * agent/snmp_agent.c:
+
+ Process the full list objects in each pass of a SET, even if one entry fails
+ midway through. This is less efficient than failing immediately, but brings
+ the behaviour in line with the documentation, and ensures that all resources
+ will be released.
+
+2002-02-08 02:50 dts12
+
+ * agent/snmp_agent.c:
+
+ Return the correct error index for problems in SET handling.
+ (patch #467155, from Latha Prabhu)
+
+2002-02-08 02:42 dts12
+
+ * agent/mibgroup/: host/hr_storage.c, ucd-snmp/memory.c:
+
+ Added support for memory and swap entries in hrStorageTable for Solaris
+ (from patch #505498 - thanks to Johannes Schmidt-Fischer)
+
+2002-02-08 02:09 dts12
+
+ * agent/mibgroup/mibII/ip.c:
+
+ Register IP Routing table objects as writable.
+
+2002-02-07 07:39 dts12
+
+ * README.hpux11, acconfig.h, config.h.in,
+ agent/mibgroup/ucd_snmp.h, agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_storage.c, agent/mibgroup/host/hr_swinst.c,
+ agent/mibgroup/host/hr_swrun.c, agent/mibgroup/mibII/at.c,
+ agent/mibgroup/mibII/icmp.c, agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/mibII/interfaces.h, agent/mibgroup/mibII/ip.c,
+ agent/mibgroup/mibII/ipAddr.c, agent/mibgroup/mibII/tcp.c,
+ agent/mibgroup/mibII/tcpTable.c, agent/mibgroup/mibII/tcpTable.h,
+ agent/mibgroup/mibII/udp.c, agent/mibgroup/mibII/udpTable.c,
+ agent/mibgroup/mibII/var_route.c, agent/mibgroup/mibII/var_route.h,
+ agent/mibgroup/ucd-snmp/memory.c, mibs/UCD-SNMP-MIB.txt, s/hpux.h:
+
+ Support for HP-UX 11, courtesy of Johannes Schmidt-Fischer.
+
+2002-02-05 11:45 hardaker
+
+ * COPYING:
+
+ copyright year update for NAI and Cambridge
+
+2002-02-04 03:17 jbpn
+
+ * snmplib/mib.c:
+
+ - correct processing for timeticks when DS_LIB_NUMERIC_TIMETICKS is
+ set (corrects bug #511793, reported by Anonymous).
+
+2002-01-28 12:50 hardaker
+
+ * FAQ:
+
+ mirror section update
+
+2002-01-28 12:49 hardaker
+
+ * agent/agent_trap.h:
+
+ warning added about send_trap_vars and enterprise oid used.
+
+2002-01-25 06:27 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - fix minor problem with storageType (always okay to set to current
+ value).
+
+ - don't reset some variables to old value unless we actually set
+ them in the first place!
+
+2002-01-24 06:06 jbpn
+
+ * snmplib/read_config.c:
+
+ - avoid format string nasties in read_config_store() when writing to
+ files (exposed e.g. by the persistent sysName.0 stuff -- try
+ snmpset host sysName.0 s "%08x" -- oops)
+
+2002-01-24 03:14 dts12
+
+ * agent/mibgroup/host/hr_swrun.c, agent/mibgroup/host/hr_utils.c,
+ s/aix.h:
+
+ AIX support for Host Resources module.
+ (Thanks to Andy Hood)
+
+2002-01-23 08:39 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - set viewType to the DEFVAL included(1) for new rows
+
+2002-01-22 06:36 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c:
+
+ - fix bug just introduced where setting an existing row's status to
+ createAndGo(4) or createAndWait(5) would delete the row.
+
+2002-01-22 04:22 jbpn
+
+ * agent/mibgroup/: notification/snmpNotifyTable.c,
+ target/snmpTargetAddrEntry.c, target/snmpTargetAddrEntry.h,
+ target/snmpTargetParamsEntry.c, target/snmpTargetParamsEntry.h:
+
+ - backport of recent improvements to snmpTargetParamsTable,
+ snmpTargetAddrTable and snmpNotifyTable.
+
+2002-01-21 04:22 jbpn
+
+ * agent/snmp_vars.c:
+
+ - set noSuchObject to FALSE if we have a valid write_method (this
+ causes the correct exception noSuchInstance to be generated if the
+ requested object doesn't exist).
+
+2002-01-21 04:20 jbpn
+
+ * agent/snmp_agent.c:
+
+ - slight change to generation of error-index:
+
+ - explicitly test for error-status == noError, and set error-index
+ to zero in this case;
+
+ - otherwise use the cached value;
+
+ - don't zero the cached value in handle_var_list if handle_one_var
+ returns noError
+
+ - this copes properly with SET requests, where a failing SET will have
+ a FREE phase which will typically return noError. Previously this
+ would erroneously cause the error-index to be set to zero.
+
+2002-01-21 04:11 jbpn
+
+ * agent/mibgroup/mibII/vacm_vars.c, snmplib/vacm.c, snmplib/vacm.h:
+
+ - backport of recent vacmSecurityToGroupTable, vacmAccessTable and
+ vacmViewTreeFamilyTable changes (corrected state machines).
+ Before: passed 20, failed 80, untested 11
+ After: passed 107, failed 1, untested 3
+
+ The still-extant failures are due to the non-implemented
+ vacmContextTable.
+
+2002-01-15 12:44 nba
+
+ * agent/snmp_vars.c:
+
+ Fix stupid missing sizeof(oid) factor in memcpy
+
+2002-01-15 12:42 nba
+
+ * agent/mibgroup/ucd-snmp/vmstat.c:
+
+ Dont use static buffer when reading /proc/stat
+
+2002-01-15 12:41 nba
+
+ * agent/mibgroup/host/hr_system.c, s/solaris2.6.h, s/solaris2.7.h,
+ s/solaris2.8.h:
+
+ Fix hrMaxProcesses for Solaris
+
+2002-01-15 12:39 nba
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Some additional debug statements
+
+2002-01-09 08:27 nba
+
+ * agent/mibgroup/: kernel_sunos5.c, kernel_sunos5.h:
+
+ Add function to acces raw kstat data
+
+2002-01-09 08:26 nba
+
+ * agent/mibgroup/host/hr_storage.c:
+
+ Use that sysconf returns a long, to save large phys mem
+
+2002-01-09 08:24 nba
+
+ * mibs/IANAifType-MIB.txt:
+
+ Update to current IANA version
+
+2002-01-09 08:23 nba
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Care for Linux drivers that maintain octet couters as log long values
+
+2002-01-09 02:20 jbpn
+
+ * FAQ:
+
+ - add OS X to list of supported OSes, to fix bug #501179 (!)
+
+2002-01-03 14:01 hardaker
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ fix bug #498809 (I think) by checking setmntent return value.
+
+2002-01-03 13:52 hardaker
+
+ * apps/snmpnetstat/if.c:
+
+ check against growing server returns as pointed out by bug #498956
+
+2001-12-18 08:49 jbpn
+
+ * acconfig.h, win32/config.h, win32/config.h.borland:
+
+ - add OSTYPE define for win32
+
+2001-12-18 08:44 jbpn
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ - add OBJECT IDENTIFIER for win32 agent
+
+2001-12-18 06:50 jbpn
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ - patch from Latha Prabhu to produce more meaningful sysDescr.0
+ strings for Microsoft platforms.
+
+2001-12-05 07:48 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ patch from Jason Gloudon to fix leaking session structures from snmp_timeout().
+
+2001-12-03 14:52 nba
+
+ * acconfig.h, config.h.in, configure, configure.in:
+
+ Complete the BSD IPSTATS configure tests, as pointed out by Mark Moraes
+ (bug# 487708)
+
+2001-11-29 16:54 hardaker
+
+ * ChangeLog:
+
+ 4.2.3 changes
+
+-------------------------------------------------------------------------------
+
+Changes: V4.2.2 -> V4.2.3
+
+2001-11-29 14:22 hardaker
+
+ * FAQ, README, sedscript.in, version.h, perl/SNMP/SNMP.pm:
+
+ - (version.h sedscript.in): version tag ( 4.2.3 )
+
+2001-11-29 13:25 nba
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Solaris 8 renamed the kstat ifspeed attribute to ifSpeed and somewhere
+ along the line changed its value from Mbps tp bps
+
+2001-11-28 14:43 hardaker
+
+ * NEWS:
+
+ mention improved irix support.
+
+2001-11-28 14:31 hardaker
+
+ * s/irix.h:
+
+ last fixes for irix I think
+
+2001-11-28 14:30 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ create islands in the stream
+
+2001-11-28 14:09 hardaker
+
+ * s/irix.h:
+
+ irix fixes for broken irix headers
+
+2001-11-27 17:05 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ version stamp (4.2.3.pre1 (opps))
+
+2001-11-27 17:05 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ fix for version stamping the perl module.
+
+2001-11-27 17:03 hardaker
+
+ * NEWS:
+
+ update for 4.2.3
+
+2001-11-27 11:09 hardaker
+
+ * win32/win32.dsw:
+
+ use at own risk patch from Harrie to fix dependancies
+
+2001-11-27 06:53 jbpn
+
+ * agent/mibgroup/host/hr_system.c:
+
+ - try harder to get hrSystemMaxProcesses.0 right, drawing on patch
+ #485765, submitted by Johannes Schmidt-Fischer, for Linux, and
+ also using sysctl() more widely.
+
+2001-11-27 06:51 jbpn
+
+ * configure.in, s/linux.h:
+
+ - Look for <linux/tasks.h>, in order to give a better value for
+ hrSystemMaxProcesses.0. From patch #485765, submitted by
+ Johannes Schmidt-Fischer.
+
+2001-11-27 03:56 jbpn
+
+ * agent/mibgroup/mibII/: kernel_linux.c, kernel_linux.h, tcp.c:
+
+ - give correct values for tcpInErrs.0 and tcpOutRsts.0 under Linux
+ if the kernel makes the data available. From patch #485765,
+ submitted by Johannes Schmidt-Fischer.
+
+2001-11-26 09:51 jbpn
+
+ * testing/tests/T110agentxget:
+
+ - longer timeout for initial GET (fix spurious test failures)
+
+2001-11-21 10:49 hardaker
+
+ * FAQ:
+
+ help update to remove the support database
+
+2001-11-21 04:53 jbpn
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ - fix compilation for Ultrix 4.5 (bug # 415197) -- make sure
+ vfs.f_bsize exists in var_extensible_disk(), and default it to
+ 1024.
+
+2001-11-20 02:27 jbpn
+
+ * snmplib/snmp_api.h:
+
+ - remove duplicate definition of SNMP_MAX_SEC_NAME_SIZE, noted by
+ Karl M. Hegbloom.
+
+2001-11-19 05:48 jbpn
+
+ * man/snmpd.conf.5.def:
+
+ - documentation of ignoredisk directive.
+
+2001-11-19 05:48 jbpn
+
+ * agent/mibgroup/host/: hr_disk.c, hr_disk.h, hr_partition.c,
+ hr_partition.h:
+
+ - patch from Johannes Schmidt-Fischer to add directive "ignoredisk" to
+ skip certain devices (and hence avoid the `snmpwalk times out' type
+ problems frequently reported). Also extends search ranges to cope with
+ larger numbers of disks etc.
+
+2001-11-16 05:31 jbpn
+
+ * apps/snmptest.c:
+
+ - add support for Unsigned32/Gauge32 types
+
+2001-11-16 03:21 jbpn
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ - more const-ness in qsort_compare => fewer warnings
+
+2001-11-16 02:54 jbpn
+
+ * apps/snmpnetstat/if.c:
+
+ - patch from Harrie Hazewinkel to add prototypes for timerSet() and
+ timerPause().
+
+2001-11-16 02:52 jbpn
+
+ * agent/snmpd.c:
+
+ - patch from Harrie Hazewinkel to #include <grp.h> if we have it
+
+2001-11-16 02:47 jbpn
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ - patch from Harrie Hazewinkel to return a value from
+ notifyTable_unregister_notifications() to avoid warnings
+
+2001-11-16 02:45 jbpn
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ - patch from Harrie Hazewinkel to make signature of qsort_compare
+ function match that expected by qsort(3) -- adds const to args.
+
+2001-11-16 02:40 jbpn
+
+ * snmplib/mib.c:
+
+ - patch from Harrie Hazewinkel to make definition of print_tree_node
+ static to match forward declaration.
+
+2001-11-15 10:03 jbpn
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ - stricter test for null OIDs
+
+2001-11-15 09:24 jbpn
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ - fix bad-looking expression which was causing problems described in
+ email titled "Defect report on UCD SNMP toolkit (crash in
+ kernel_sunos5.c)" sent to net-snmp-users on 2001-07-17.
+
+2001-11-15 08:33 jbpn
+
+ * man/snmpd.conf.5.def:
+
+ - document read-only nature of snmpEnableAuthenTraps.0 if value is
+ configured via the authtrapenable token
+
+2001-11-15 08:28 jbpn
+
+ * agent/: agent_read_config.c, agent_trap.c,
+ mibgroup/mibII/snmp_mib.c:
+
+ - make value of snmpEnableAuthenTraps.0 persistent. Setting via
+ a read-only configuration file also makes object notWritable (as
+ sysContact.0 et al.).
+
+2001-11-15 05:16 jbpn
+
+ * testing/tests/: T111agentxset, T121proxyset:
+
+ - use psyscontact not syscontact to set initial value of sysContact.0
+ object since the latter also makes the object read-only.
+
+2001-11-15 05:07 jbpn
+
+ * agent/snmpd.c:
+
+ - minor fix to formatting of usage message
+
+2001-11-14 17:54 hardaker
+
+ * FAQ, README, sedscript.in, version.h:
+
+ - (version.h sedscript.in): version tag ( 4.2.3.pre1 )
+
+2001-11-14 17:42 hardaker
+
+ * snmplib/snmp.h:
+
+ numeric comments in both hex and decimal
+
+2001-11-14 17:41 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ include INTEGER32 in INTEGER case checking.
+
+2001-11-14 17:31 hardaker
+
+ * agent/mibgroup/versiontag:
+
+ version tag perl/SNMP/SNMP.pm with the ucd-snmp version number.
+
+2001-11-14 16:30 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ mention snmpconf.
+
+2001-11-14 16:06 hardaker
+
+ * configure, configure.in:
+
+ patch from Harrie to fix init function checking in modules
+
+2001-11-14 11:58 hardaker
+
+ * agent/: agent_callbacks.h, agent_read_config.c,
+ mibgroup/notification/snmpNotifyTable.c:
+
+ - make a new callback for pre-update-config conditions.
+ - make the snmpNotifyTable make use of it to remove "readOnly" entries
+ which should have been generated via configuration parsing.
+ - note that this doesn't remove the generated target entries, which
+ is not ideal, but at least duplicate traps aren't sent.
+
+2001-11-13 11:13 hardaker
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Patch from Jochen Kmietsch to look for eri interfaces.
+
+2001-11-13 05:24 jbpn
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ - patch from Jochen Kmietsch to quieten some noisy logging
+
+2001-11-12 23:14 hardaker
+
+ * snmplib/: asn1.c, mib.c:
+
+ MS C++ warning fixes from Harrie Hazewinkel
+
+2001-11-11 21:48 nba
+
+ * snmplib/system.c, win32/config.h:
+
+ Restore the old value od TIME_WITH_SYS_TIME
+
+2001-11-09 12:21 hardaker
+
+ * FAQ:
+
+ Added a germany based mirror
+
+2001-11-09 11:21 hardaker
+
+ * FAQ:
+
+ mention new mirror
+
+2001-11-09 11:20 hardaker
+
+ * configure, config.h.in, configure.in:
+
+ applied english/typo/changes noted in bug #471179
+
+2001-11-09 09:08 hardaker
+
+ * snmplib/snmp_api.c:
+
+ fix bug 479365: use strncpy in snmp_add_var().
+
+2001-11-09 07:53 hardaker
+
+ * win32/config.h:
+
+ fix bug #474488: add extern C wrappers
+
+2001-11-09 07:47 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ fix OIDs to include entry node
+
+2001-11-08 09:43 hardaker
+
+ * mibs/UCD-SNMP-MIB.txt:
+
+ UNIT specs for the fileTable to say kB explicitly
+
+2001-11-08 09:42 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ mention that the fileTable is in kB.
+
+2001-11-06 08:26 hardaker
+
+ * local/: mib2c, tkmib:
+
+ add fixes to check for the SNMP and Tk perl modules and print a better
+ error message if they're not available telling users how to get them.
+
+2001-11-06 08:16 hardaker
+
+ * snmplib/asn1.c:
+
+ fix asn_build_bitstring to check for NULL values (pointed out by Tata Kalyan).
+
+2001-11-06 07:57 hardaker
+
+ * snmplib/asn1.c:
+
+ length check fixed for wrapped addition. Bug pointed out by Tata Kalyan
+
+2001-10-30 21:42 hardaker
+
+ * snmplib/: default_store.h, read_config.c, read_config.h:
+
+ patch from Harrie to make paths more configurable from within C code.
+
+2001-10-30 07:14 jbpn
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ - fix bug whereby interface counter is not reset, noted by (amongst
+ others) Victor Kirhenshtein in patch #474064.
+
+2001-10-26 09:08 hardaker
+
+ * configure, configure.in:
+
+ patch from Harrie to fix agentx/client -> agentx/subagent help message
+
+2001-10-26 03:34 jbpn
+
+ * man/snmpd.conf.5.def:
+
+ - document the fact that setting sysLocation.0 (et al.) via a
+ syslocation (or equivalent) token makes the object read-only,
+ returning a notWritable error response if an attempt is made to
+ SET it.
+
+2001-10-24 10:08 jbpn
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ - fix typo noted by Tim Dietz
+
+2001-10-24 09:54 jbpn
+
+ * agent/mibgroup/mibII/: system_mib.c, system_mib.h:
+
+ - implement persistence for sysLocation.0, sysContact.0 and sysName.0
+
+ - presence of a syslocation token in snmpd.conf makes sysLocation.0
+ non-writable (returns notWritable on SET attempts)
+
+2001-10-24 05:08 jbpn
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ - fix small memory leak just introduced
+
+2001-10-24 03:33 jbpn
+
+ * acconfig.h, configure.in:
+
+ - autoconf support for detecting pkginfo interface in libadm. Thanks
+ to Stefan Radman (patch #473669).
+
+2001-10-24 03:30 jbpn
+
+ * agent/mibgroup/host/hr_swinst.c:
+
+ - use pkginfo interface to determine type of software package more
+ specifically if possible. Slight variation on patch #473669, submitted
+ by Stefan Radman.
+
+2001-10-17 07:52 dts12
+
+ * FAQ:
+
+ Mention the MRTG tutorial web pages
+ (as suggested by Christian Robottom Reis)
+
+2001-10-08 10:56 hardaker
+
+ * FAQ, README, sedscript.in, version.h:
+
+ - (version.h sedscript.in): version tag ( 4.2.2 )
+
+-------------------------------------------------------------------------------
+
+Changes: V4.2.1 -> V4.2.2
+
+2001-10-08 10:47 hardaker
+
+ * agent/mibgroup/notification/: snmpNotifyFilterProfileTable.c,
+ snmpNotifyFilterTable.c, snmpNotifyTable.c:
+
+ Apply patches suggested in bug #469082 to fix illegal row creations
+ when rowstatus is set to destroy.
+
+2001-10-06 07:49 hardaker
+
+ * FAQ:
+
+ minor tweaks to the download list.
+
+2001-10-06 07:42 hardaker
+
+ * README:
+
+ Add David Lawrence's text about contributing patches.
+
+2001-10-05 18:09 hardaker
+
+ * FAQ, README, sedscript.in, version.h:
+
+ - (version.h sedscript.in): version tag ( 4.2.2.pre6 )
+
+2001-10-05 18:01 hardaker
+
+ * acconfig.h, config.h.in, configure, configure.in,
+ snmplib/mt_support.c, snmplib/mt_support.h:
+
+ Change _REENTRANT define to NS_REENTRANT to not conflict with BSD/OS 4.3.
+
+2001-10-05 17:39 hardaker
+
+ * agent/mibgroup/mibII/at.h, agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c, s/irix.h:
+
+ irix specific fixes mentioned in bug #405454
+
+2001-10-05 17:22 hardaker
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ fix #440808 possibly overwriting a oid buffer.
+
+2001-10-05 16:59 hardaker
+
+ * local/mib2c.vartypes.conf:
+
+ fix unsigned32 return variable usage
+
+2001-10-05 16:51 hardaker
+
+ * agent/mibgroup/mibII/at.c:
+
+ move arptab_current and arptab_size definitions up out of ifdef mess.
+
+2001-10-05 16:47 hardaker
+
+ * agent/mibgroup/notification/: snmpNotifyFilterProfileTable.c,
+ snmpNotifyFilterTable.c, snmpNotifyTable.c:
+
+ don't create rowstatus entries with 'destroy' as initial value.
+
+2001-10-05 16:36 hardaker
+
+ * agent/mibgroup/notification/: snmpNotifyFilterProfileTable.c,
+ snmpNotifyFilterTable.c, snmpNotifyTable.c:
+
+ fixed UNDO clauses.
+
+2001-10-05 08:50 hardaker
+
+ * agent/mibgroup/ucd-snmp/dlmod.c, snmplib/snmp_api.c:
+
+ Patch from Harrie for picky compilers.
+
+2001-10-05 08:49 hardaker
+
+ * agent/agent_trap.c:
+
+ better error description for trapsess
+
+2001-10-05 08:49 hardaker
+
+ * FAQ:
+
+ Added mirror sites.
+
+2001-10-05 07:10 hardaker
+
+ * mibs/: SMUX-MIB.txt, UCD-SNMP-MIB.txt:
+
+ MIB problems pointed out by Marek Malowidziki
+
+2001-10-04 17:09 hardaker
+
+ * snmplib/snmp_auth.c:
+
+ Don't write a null past the end of the community string buffer.
+
+2001-10-04 07:14 hardaker
+
+ * README, local/snmpconf.dir/snmpd.conf/extending,
+ man/snmpd.conf.5.def:
+
+ Patch from T. J. Mather: Documentation of the pass_persist snmpd.conf token.
+
+2001-10-04 07:14 hardaker
+
+ * local/pass_persisttest:
+
+ Patch from T. J. Mather: An example (perl) pass_persist script.
+
+2001-10-04 02:21 jbpn
+
+ * agent/snmpd.c:
+
+ - disable stderr logging (if requested) before calling init_mib_modules().
+ This should fix the problem noted by Nigel Metheringham in bug #418857
+ whereby the AgentX master module prints a message to stderr which causes
+ a SIGPIPE when the agent is started as a daemon.
+
+ Also noted with extensive analysis by Ted Rule in bug #467551.
+
+2001-10-03 11:22 hardaker
+
+ * FAQ, README, sedscript.in, version.h:
+
+ - (version.h sedscript.in): version tag ( 4.2.2.pre5 )
+
+2001-10-03 11:16 hardaker
+
+ * apps/snmptrapd.c, apps/snmptrapd_log.c, snmplib/mib.c,
+ snmplib/tools.c:
+
+ proper const casting in front of Markku's casting patch.
+
+2001-10-03 11:10 hardaker
+
+ * apps/snmptrapd.c, apps/snmptrapd_log.c, snmplib/asn1.c,
+ snmplib/mib.c, snmplib/tools.c:
+
+ Patch: proper casts for picky compilers from Markku Laukkanen.
+
+2001-10-03 09:22 hardaker
+
+ * snmplib/snmp_api.c:
+
+ don't rbuild beyond the end of a buffer (needed buffer + length "- 1").
+
+2001-10-03 05:38 jbpn
+
+ * snmplib/keytools.c:
+
+ - change expression at l. 415 from:
+
+ *kcstring++ = *kcstring ^ *newkey++;
+
+ which has undefined behaviour to:
+
+ *kcstring++ ^= *newkey++;
+
+ which is okay (since *kcstring is only evaluated once). Similarly
+ at l. 530. The previous constructs cause warnings with GCC3 and
+ some other compilers. Thanks to Niel Markwick who noted this in
+ bug #465969.
+
+2001-10-02 18:01 hardaker
+
+ * agent/agent_trap.c:
+
+ Change oid lengths to size_t from int (segfaults on an alpha/linux).
+
+2001-10-02 17:46 hardaker
+
+ * agent/mibgroup/ucd-snmp/memory_solaris2.c:
+
+ Add prototype for getTotalSwap().
+
+2001-10-02 17:15 hardaker
+
+ * agent/mibgroup/target/: snmpTargetAddrEntry.c,
+ snmpTargetParamsEntry.c:
+
+ return NOT_WRITABLE instead of READONLY as pointed out by
+ arajesh@india.adventnet.com.
+
+2001-10-02 17:03 hardaker
+
+ * win32/config.h:
+
+ Patch from Marc Moeller to define snprintf as _snprintf
+
+2001-10-02 17:02 hardaker
+
+ * agent/mibgroup/host/hr_print.c:
+
+ Patch from Marc Moeller to check for HAVE_LPSTAT before calling it.
+
+2001-10-02 17:00 hardaker
+
+ * README:
+
+ add Ron.
+
+2001-10-02 17:00 hardaker
+
+ * snmplib/system.c:
+
+ get_uptime() implementation for windows from Ron Mevissen.
+
+2001-10-01 17:38 hardaker
+
+ * FAQ, README, sedscript.in, version.h:
+
+ - (version.h sedscript.in): version tag ( 4.2.2.pre4 )
+
+2001-10-01 17:38 hardaker
+
+ * agent/Makefile.in, agent/mibgroup/Makefile.in, apps/Makefile.in,
+ apps/snmpnetstat/Makefile.in, snmplib/Makefile.in,
+ testing/Makefile.in:
+
+ make makefileindepend
+
+2001-10-01 17:37 hardaker
+
+ * makefileindepend.pl:
+
+ translate .o -> .lo by hand.
+
+2001-10-01 17:07 hardaker
+
+ * agent/mibgroup/host/: hr_disk.c, hr_print.c:
+
+ Applied patch #465545 to fix delays in host resources mib when looking
+ at devices and printers.
+
+2001-10-01 16:45 hardaker
+
+ * ChangeLog, NEWS:
+
+ New stuff in 4.2.2
+
+2001-10-01 16:39 hardaker
+
+ * apps/snmpwalk.c, man/snmpwalk.1:
+
+ make snmpwalk default to detecting illegal OID increases. -Cc turns
+ it off instead of on.
+
+2001-10-01 10:36 hardaker
+
+ * COPYING:
+
+ editing tweaks by John to count things properly. Wes looses the
+ ability to count beyond the number 2.
+
+2001-10-01 10:26 hardaker
+
+ * COPYING:
+
+ ditto.
+
+2001-10-01 10:22 hardaker
+
+ * COPYING:
+
+ Various copyright updates.
+
+2001-10-01 02:52 jbpn
+
+ * snmplib/scapi.c:
+
+ - add #include "snmp_logging.h" to avoid compilation problems on
+ some platforms introduced by new error messages. See:
+ <URL:http://sourceforge.net/tracker/index.php?func=detail&aid=465807&group_id=12694&atid=112694>
+
+2001-09-29 06:06 nba
+
+ * snmplib/mib.h:
+
+ Add a missing prototype for snmp_realloc_by_type
+
+2001-09-29 06:05 nba
+
+ * agent/mibgroup/ucd-snmp/memory_solaris2.h:
+
+ Fix a bad #ifdef parantheses
+
+2001-09-26 10:21 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ smux is *not* a proper delegation subagent.
+
+2001-09-25 12:46 hardaker
+
+ * FAQ, README, sedscript.in, version.h:
+
+ - (version.h sedscript.in): version tag ( 4.2.2.pre3 )
+
+2001-09-25 11:51 hardaker
+
+ * snmplib/: scapi.c, scapi.h:
+
+ Better error messages when encryption support isn't available.
+
+2001-09-25 07:59 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - reinstate another space that would make the test suite fail
+
+2001-09-25 07:53 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - reinstate a missing space
+
+2001-09-25 05:43 jbpn
+
+ * apps/: snmptrapd.c, snmptrapd_log.c, snmptrapd_log.h:
+
+ - incorporate rewritten output functions from main branch to avoid
+ fixed length buffers
+
+2001-09-25 05:41 jbpn
+
+ * snmplib/scapi.c:
+
+ - use relocating buffer version of sprint functions
+
+2001-09-25 05:40 jbpn
+
+ * snmplib/: mib.c, mib.h, parse.h:
+
+ - add relocating buffer code from main branch
+
+2001-09-25 05:39 jbpn
+
+ * snmplib/: tools.c, tools.h:
+
+ - add snmp_realloc() and snmp_strcat functions which the relocating
+ buffer code uses
+
+2001-09-21 17:16 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Patch from Glenn Mansfield to fix interface counting on interfaces
+ without ip addresses.
+
+2001-09-20 12:47 hardaker
+
+ * agent/mibgroup/util_funcs.c:
+
+ check skip_white() return (as mentioned in patch #462201).
+
+2001-09-20 11:30 hardaker
+
+ * snmplib/mib.c:
+
+ fixed a possible buffer overflow bug in sprint_asciistring as pointed
+ out by bug #463226.
+
+2001-09-20 09:46 hardaker
+
+ * configure, configure.in:
+
+ Don't warn about missing openssl unless explicitly asked (and then error).
+
+2001-09-20 09:12 jbpn
+
+ * agent/: snmp_vars.c, mibgroup/mibII/interfaces.c:
+
+ - move headers around to fix compilation on Solaris 2.7; sys/stream.h
+ needs to be included before sys/socketvar.h for this platform.
+
+2001-09-20 09:09 jbpn
+
+ * agent/mibgroup/ucd-snmp/memory_solaris2.c:
+
+ - remove #include "system.h" which uses the type in_addr_t thereby
+ causing problems, and seems to be unnecessary anyway.
+
+2001-09-20 06:59 hardaker
+
+ * README:
+
+ Make sure Harrie's name is in the patches README as well as the mainline.
+
+2001-09-20 06:58 hardaker
+
+ * snmplib/: default_store.c, mib.c, parse.c, snmp_api.c,
+ snmp_client.c, snmp_debug.c, snmpusm.c:
+
+ Patch from Harrie Hazewinkel:
+ - proper prototypes for some functions.
+
+2001-09-19 17:19 hardaker
+
+ * FAQ, README, sedscript.in, version.h:
+
+ - (version.h sedscript.in): version tag ( 4.2.2.pre2 )
+
+2001-09-19 17:01 hardaker
+
+ * FAQ, README, sedscript.in, version.h:
+
+ - (version.h sedscript.in): version tag ( 4.2.2.pre1 )
+
+2001-09-19 16:59 hardaker
+
+ * FAQ, README, sedscript.in, version.h:
+
+ - (version.h sedscript.in): version tag ( 4.2.2 )
+
+2001-09-18 17:22 hardaker
+
+ * man/snmpcmd.1, snmplib/mib.c, snmplib/snmp_api.c:
+
+ Undo Niels' change to allow command line options to override .conf
+ files. Right goal, wrong branch to do it in as it broke SNMPv3 among
+ other things. The initialization process is rather sensitive to
+ ordering.
+
+2001-09-18 15:08 nba
+
+ * s/darwin.h:
+
+ Fix an oversight in the Darwin patch
+
+2001-09-18 15:08 nba
+
+ * aclocal.m4, configure, configure.in:
+
+ Fix an oversight in the Darwin patches
+
+2001-09-17 09:00 nba
+
+ * s/darwin.h:
+
+ The darwin system file, which I forgot when committing the rest of
+ the darwin patch.
+
+2001-09-17 07:07 hardaker
+
+ * config.h.in:
+
+ autoheader run
+
+2001-09-17 04:13 nba
+
+ * apps/snmptrapd.c:
+
+ Fix newlines inside usage string.
+
+2001-09-16 14:56 nba
+
+ * agent/: snmpd.c, mibgroup/smux/smux.c:
+
+ Move the smux_listen_sd variable to smux.c. This way it will be in the
+ library so the linker wont be upset when you link with the agent library.
+
+2001-09-16 14:52 nba
+
+ * agent/mibgroup/ucd-snmp/memory_netbsd1.h,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c, s/openbsd.h:
+
+ Patches for OpenBSD 2.9
+
+2001-09-16 14:49 nba
+
+ * agent/mibgroup/ucd-snmp/diskio.c:
+
+ diskio support for FreeBSD4. Thanks to Yimin Ge
+
+2001-09-16 14:16 nba
+
+ * aclocal.m4, configure, configure.in, agent/agent_read_config.c,
+ agent/snmp_vars.c, agent/mibgroup/ucd_snmp.h,
+ agent/mibgroup/host/hr_storage.c, agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/mibII/interfaces.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.c,
+ agent/mibgroup/ucd-snmp/memory_freebsd2.h,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c:
+
+ Patches to support Darwin (Mac OS/X)
+ Thanks to Tex Clayton <tex@dartware.com>
+
+2001-09-16 14:03 nba
+
+ * agent/: agent_index.c, agent_registry.c, mibgroup/mibincl.h,
+ mibgroup/util_funcs.c, mibgroup/examples/example.c,
+ mibgroup/mibII/icmp.c, mibgroup/mibII/ip.c,
+ mibgroup/mibII/ipAddr.c, mibgroup/mibII/sysORTable.c,
+ mibgroup/mibII/tcp.c, mibgroup/mibII/tcpTable.c,
+ mibgroup/mibII/udp.c, mibgroup/ucd-snmp/proxy.c:
+
+ Header rearrangements to make BSD's happy after the WIN32 patch
+
+2001-09-15 06:08 jbpn
+
+ * snmplib/asn1.c:
+
+ - add missing argument to snprintf (errpre corresponding to %s) --
+ it was missing from the patch (#452027)
+
+2001-09-14 17:29 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ - debugging compilation fixes
+
+2001-09-14 17:26 hardaker
+
+ * local/tkmib:
+
+ many needed changes from mainline merged into patches branch
+
+2001-09-14 15:24 hardaker
+
+ * snmplib/asn1.c:
+
+ Patch #452027 from Marcus Meissner:
+ security fix to make sure that long asn lengths can't be used and
+ aren't improperly cased to a signed value.
+
+2001-09-14 14:23 hardaker
+
+ * configure, configure.in:
+
+ patch #432982 from Hollis: fix --with-libwrap without a path option
+
+2001-09-14 13:58 nba
+
+ * agent/mibgroup/: kernel_sunos5.c, mibII/udpTable.c:
+
+ Solaris support for udpTable.
+ Thanks to Johannes Schmidt-Fischer <jsf@InterFace-AG.com>
+
+2001-09-14 09:53 hardaker
+
+ * snmplib/ucd-snmp-includes.h:
+
+ from patch #423466: add ability to use this file within the source tree
+
+2001-09-14 09:48 hardaker
+
+ * win32/config.h.borland:
+
+ Added config.h file for borland compilers (which differs slightly).
+ From patch #423466
+
+2001-09-14 09:28 dts12
+
+ * agent/mibgroup/mibII/: at.c, icmp.c, interfaces.c, ip.c,
+ ipAddr.c, tcp.c, tcpTable.c, udp.c, udpTable.c, var_route.c:
+
+ Mib-2 support for Windows systems.
+ *Many* thanks to Latha S, for filling this long-awaited need.
+
+2001-09-14 09:07 dts12
+
+ * agent/mibgroup/mibII/: icmp.c, ip.c, ipAddr.c, tcp.c, tcpTable.c,
+ udp.c, udpTable.c:
+
+ Move package-provided header includes ('mibincl' and 'util_funcs')
+ to after the system includes. This shouldn't affect most systems,
+ but is necessary for the Windows port.
+
+2001-09-14 08:28 dts12
+
+ * configure:
+
+ Propogate test for <netinet/ip_icmp.h> through to the bit that does the work.
+
+ (Our illustrious leader clearly has no confidence in the competance
+ of his minions. I'd take umbrage, if he wasn't right!)
+
+2001-09-14 08:01 dts12
+
+ * config.h.in, configure.in:
+
+ Add test for <netinet/ip_icmp.h>
+
+2001-09-14 07:57 dts12
+
+ * agent/mibgroup/mibII/: at.c, icmp.c, interfaces.c, ip.c,
+ ipAddr.c, route_write.c, tcp.c, tcpTable.c, udp.c, udpTable.c,
+ var_route.c:
+
+ Wrap various #includes with appropriate #if HAVE_XXX_H declarations
+ (where this has not already been done).
+
+2001-09-11 14:47 nba
+
+ * agent/mibgroup/ucd-snmp/: memory.c, memory.h, memory_freebsd2.c,
+ memory_freebsd2.h, memory_netbsd1.c, memory_netbsd1.h,
+ memory_solaris2.c, memory_solaris2.h, vmstat.c, vmstat.h,
+ vmstat_bsdi4.c, vmstat_bsdi4.h, vmstat_freebsd2.c,
+ vmstat_netbsd1.c, vmstat_solaris2.c:
+
+ Make sure that the OID defines are only in one place. No functional change.
+
+2001-09-11 14:45 nba
+
+ * agent/mibgroup/ucd-snmp/file.c:
+
+ Header reordering to allow dmalloc to work.
+
+2001-09-11 14:31 nba
+
+ * agent/mibgroup/host/hr_partition.c:
+
+ Fix a misplaces ; in a loop.
+ Thanks to Mala Ramakrishnan <mala@routescience.com>
+ and Johannes Schmidt-Fischer <jsf@InterFace-AG.com>
+
+2001-09-10 11:20 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ change interface counting to happen more frequently to detect new cards.
+ - see bug #457290
+
+2001-09-10 11:11 hardaker
+
+ * man/snmptrapd.8, apps/snmptrapd.c:
+
+ fix -P to usage it prints to stderr (bug #459372)
+
+2001-09-10 10:55 hardaker
+
+ * agent/mibgroup/util_funcs.c:
+
+ fix whitespace parsing bug reported it bug #457267.
+
+2001-09-10 10:46 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat_freebsd2.c:
+
+ apply freebsd specific patch from bug#455924 to fix vmstat's swap report.
+
+2001-09-10 10:11 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ Use a more portable DBPRT macro.
+
+2001-09-10 09:58 hardaker
+
+ * agent/mibgroup/notification/: snmpNotifyFilterProfileTable.c,
+ snmpNotifyFilterTable.c, snmpNotifyTable.c:
+
+ Remove redundant RowStatus value checks mentioned in bug#449502
+
+2001-09-04 07:21 jbpn
+
+ * agent/snmpd.c:
+
+ - add missing break; after processing -P option, noted by Botond
+ Tarnay (see patch #458327)
+
+2001-08-31 13:19 nba
+
+ * mibs/: DISMAN-SCRIPT-MIB.txt, Makefile.mib, README.mibs, rfclist,
+ smistrip:
+
+ Update to current version of DISMAN-SCRIPT-MIB, and a few cosetic changes
+ to smistrip et al.
+
+2001-08-31 13:18 nba
+
+ * ltconfig:
+
+ Update to libtool 1.4. This ensures that make install will work for NetBSD
+
+2001-08-31 13:17 nba
+
+ * aclocal.m4, configure, ltmain.sh:
+
+ Update to libtool 1.4. This wil ensure that make install work on NetBSD
+
+2001-08-28 15:04 nba
+
+ * agent/snmpd.c:
+
+ Fix a bad fix
+
+2001-08-28 15:03 nba
+
+ * agent/: agent_read_config.h, snmp_agent.h, snmp_vars.h:
+
+ C++ bracket the installed sgent headers
+
+2001-08-28 07:35 nba
+
+ * apps/snmptrapd.c:
+
+ Fix a malformed multi-line string
+
+2001-08-28 03:05 jbpn
+
+ * agent/snmp_agent.c:
+
+ - add missing #include <tcpd.h> if using libwrap, noted by Nathan
+ Neulinger (patch #453831).
+
+2001-08-28 02:38 jbpn
+
+ * agent/snmpd.c:
+
+ - avoid use of pre-processor directives inside printf() call, which
+ is a macro in glibc, making this an undefined behaviour
+ construct (which GCC 3.0 refuses to compile). See bug #455804 for
+ further details.
+
+2001-08-27 22:15 nba
+
+ * man/: snmp_config.5.def, snmpd.conf.5.def, snmptrapd.conf.5.def:
+
+ Fix some places where actual lines started with a period.
+
+2001-08-17 15:12 nba
+
+ * man/Makefile.in:
+
+ Fix misspelled man page name (snmperror => snmp_perror)
+
+2001-08-17 15:09 nba
+
+ * mibs/: Makefile.mib, mibfetch:
+
+ IANA has moved their mibs into an iana.mib directory.
+ Fix RFC number for RMON-MIB.
+ Make "make allmaibs" extract mibs to another directory.
+
+2001-08-17 15:03 nba
+
+ * config.guess, config.sub:
+
+ Yet another update from ftp.gnu.org
+
+2001-08-17 14:09 nba
+
+ * agent/: agent_read_config.c, snmpd.c:
+
+ Add some needed error checking to the uid/gid parsing code.
+ Allow symbolic uid/gid from the command line.
+
+2001-08-17 14:07 nba
+
+ * FAQ:
+
+ Add a missing argument to the snmptrap examples.
+
+2001-08-07 14:55 nba
+
+ * apps/snmptrapd_log.c, snmplib/mib.c:
+
+ Timeticks are unsiged! Thanks to Josh Wilmes <josh-ucd@hitchhiker.org>
+
+2001-08-07 14:42 nba
+
+ * man/snmpcmd.1, snmplib/mib.c, snmplib/snmp_api.c:
+
+ Changes to allow command line arguments to override snmp.conf settings.
+
+2001-08-07 14:02 nba
+
+ * mibs/: IANAifType-MIB.txt, rfclist:
+
+ Update to current version of IANAifType-MIB.
+ Add rfc 3144 INTERFACETOPN-MIB to rfclist.
+
+2001-08-07 14:00 nba
+
+ * config.guess, config.sub:
+
+ Update to current version from ftp.gnu.org
+
+2001-08-07 13:59 nba
+
+ * apps/snmpset.c, apps/snmptranslate.c, apps/snmptrapd.c,
+ man/Makefile.in, man/snmp_api_errstring.3, man/snmp_error.3,
+ man/snmp_perror.3, man/snmp_sess_perror.3, man/snmpcmd.1,
+ man/snmptrapd.8:
+
+ A bunch of minor fixes to usage messages and manual pages.
+
+2001-08-07 13:56 nba
+
+ * apps/snmptest.c:
+
+ Fix parsing of oid values for set
+
+2001-08-07 07:09 jbpn
+
+ * agent/snmpd.c:
+
+ - fix for potential buffer overflow in logfile argument handling,
+ noted by Anonymous (bug #448243). Also use a large enough buffer
+ to handle filenames of length PATH_MAX (if possible).
+
+2001-07-26 01:40 jbpn
+
+ * apps/snmptrapd_log.c:
+
+ - initialise buffers to zero in handle_wrap_fmt, to avoid garbage in
+ display of security parameters, as noted by William Frauenhofer
+ (bug #437231).
+
+2001-07-23 10:53 hardaker
+
+ * agent/mibgroup/util_funcs.c:
+
+ carefully construct tmp file names.
+
+2001-07-23 10:53 hardaker
+
+ * config.h.in, configure, configure.in, agent/snmpd.c:
+
+ use setgroups when available.
+
+2001-07-11 07:34 hardaker
+
+ * agent/mibgroup/mibII/mta_sendmail.h:
+
+ add NETWORK-SERVICES-MIB to mib require list
+
+2001-07-09 11:15 hardaker
+
+ * agent/agent_trap.c:
+
+ fix trapsess parsing so as to:
+ - set the default port to 162
+ - don't free memory passed to snmp_parse_args() since
+ snmp_parse_args is broken and needs to copy memory rather than
+ just make use of it.
+
+2001-06-27 15:48 nba
+
+ * man/snmpd.conf.5.def:
+
+ Simple fix to trapsess argument list
+
+2001-06-25 08:47 hardaker
+
+ * snmplib/mib.c:
+
+ support 'mibs ""'.
+
+2001-06-22 13:07 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Allow interface snmpd.conf tokens to completely override system
+ values. [bug#426975]
+
+2001-06-22 11:38 hardaker
+
+ * local/mib2c.conf:
+
+ define ulong_ret
+
+2001-06-22 01:44 dts12
+
+ * FAQ, man/snmpd.conf.5.def:
+
+ Include a warning of the experimental nature of AgentX in the man page,
+ and update the FAQ to reflect the fuller integration of this support.
+
+2001-06-21 15:22 nba
+
+ * apps/snmpdf.c:
+
+ Eliminate long long variables
+
+2001-06-21 15:22 nba
+
+ * apps/snmptable.c:
+
+ Warn about deprecated -b -w and -i options.
+
+2001-06-21 15:15 nba
+
+ * man/: snmpd.1.def, snmpd.conf.5.def, snmpset.1, snmpwalk.1:
+
+ Update time stamps
+
+2001-06-21 15:09 nba
+
+ * man/snmptranslate.1:
+
+ Add -m and -M options to header. Update SEE ALSO to reference snmpcmd
+ and RFC 2578-80 in place of 1155
+
+2001-06-21 15:01 nba
+
+ * snmplib/parse.c:
+
+ Fix parsing of xx ...::= { yy }
+
+2001-06-21 10:25 hardaker
+
+ * agent/mibgroup/examples/example.c:
+
+ typos (IOD -> OID)
+
+2001-06-21 10:18 hardaker
+
+ * man/snmpd.conf.5.def:
+
+ - mention "master agentx"
+ - fix config file re-reading oid.
+
+2001-06-21 10:10 hardaker
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ make syscontact and syslocation accept "" strings.
+
+2001-06-21 09:34 hardaker
+
+ * apps/snmptranslate.c, man/snmptranslate.1:
+
+ - Applied arg documentation patch from David Eisner
+
+2001-06-14 23:19 nba
+
+ * man/snmptrapd.8:
+
+ Document -n option
+
+2001-06-12 15:14 nba
+
+ * snmplib/default_store.c:
+
+ Properly detect and diagnose bad boolean and integer configuration values
+
+2001-06-12 15:12 nba
+
+ * apps/: snmpdelta.c, snmpdf.c, snmpget.c, snmpgetnext.c,
+ snmpstatus.c, snmptrap.c, snmpusm.c, snmpvacm.c, snmpwalk.c:
+
+ Properly diagnose bad -C options
+
+2001-06-12 07:24 dts12
+
+ * snmplib/read_config.c:
+
+ Fix 'unregister_config_handler' to handle tags other
+ than the first in the list. (Thanks to Paul Serice).
+
+2001-06-11 15:44 nba
+
+ * apps/snmpwalk.c, man/snmpwalk.1:
+
+ Add an options (-Cc) to snmpwalk that will validate that the returned objects
+ are indeed lexicographically increasing.
+
+2001-06-11 15:43 nba
+
+ * apps/snmpset.c, man/snmpset.1, snmplib/snmp_api.c:
+
+ Allow a simpler snmpset notation when MIB data are loaded: Using '=' for
+ type type will infer it from the MIB.
+
+2001-06-11 15:39 nba
+
+ * snmplib/: mib.c, parse.c:
+
+ Fix some long standing bugs when several MIB files define the same objects
+ with different names. Hopefully the results will be consistent now.
+
+2001-06-11 12:12 nba
+
+ * apps/snmpdelta.c, snmplib/int64.c:
+
+ Another try at Counter64 problems, thanks to Jason Gloudon <snmp@gloudon.com>
+
+2001-06-11 11:52 nba
+
+ * apps/snmptrapd_log.c:
+
+ Fix for a missing 0-byte to terminate community string.
+ Thanks to "KUBOTA,Takaya" <takaya@po.ntts.co.jp>.
+
+2001-06-06 21:38 nba
+
+ * config.h.in, configure, configure.in,
+ agent/mibgroup/host/hr_system.c:
+
+ Use <utmpx.h> if available (to fix counting users for Solaris)
+
+2001-06-06 21:33 nba
+
+ * man/snmpd.1.def:
+
+ Mention -s and -P pidfile arguments
+
+2001-06-06 21:32 nba
+
+ * agent/mibgroup/smux/smux.c:
+
+ Fix sending of traps without varbinds
+
+2001-06-06 21:31 nba
+
+ * agent/mibgroup/util_funcs.c:
+
+ More meaningful arguments to setPerrorstatus (true file names)
+
+2001-05-17 12:36 nba
+
+ * snmplib/snmpv3.c:
+
+ Fix a Truly Stupid Bug thanks to Katsuhisa ABE <abekatsu@cysols.com>
+
+2001-05-04 09:45 hardaker
+
+ * apps/snmpdf.c:
+
+ Remove duplicate l from %lld printf syntax
+
+2001-05-04 07:00 hardaker
+
+ * Makefile.in:
+
+ insall mib_module_config.h
+
+2001-05-03 10:15 hardaker
+
+ * snmplib/Makefile.in:
+
+ add snmp-tc.h to install list
+
+2001-05-02 07:08 hardaker
+
+ * apps/snmptrapd.c:
+
+ Add -T flag to usage output.
+
+2001-05-01 12:53 hardaker
+
+ * agent/mibgroup/mibII/at.c:
+
+ Fix use of a -1 assigned to a u_long as a failure checking case.
+
+2001-04-23 17:08 hardaker
+
+ * local/tkmib:
+
+ fix walk problem once and for all.
+
+2001-04-17 12:29 nba
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ Get data for hrSWRunPerfTable for cygwin under NT (or better)
+
+2001-04-17 11:33 nba
+
+ * config.guess, config.sub, configure, configure.in:
+
+ Update to a recent version of config.guess/config.sub. Update configure
+ to handle the new NetBSD variant that include the object format.
+
+2001-04-12 05:12 dts12
+
+ * agent/snmp_agent.c:
+
+ Better fix for bug #414855 from arajesh
+ Handles non-repeaters=0 as well, and avoids memory leaks.
+
+2001-04-11 06:01 dts12
+
+ * agent/snmp_agent.c:
+
+ Handle GetBulk requests with max-repetitions=0 properly (bug #414855)
+
+2001-04-10 09:33 hardaker
+
+ * apps/snmpdf.c:
+
+ fixed segfault when row has holes.
+
+2001-04-06 16:20 hardaker
+
+ * man/snmpcmd.1:
+
+ - Added documentotion for -Ot
+
+2001-04-06 07:32 hardaker
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ traps/informs reversed
+
+2001-04-05 09:34 slif
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ remove unused variable from snmp_oid_min_compare.
+
+2001-04-05 09:13 slif
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ Fix snmp_oid_compare and reverse encodings to deal with numbers > 2^31.
+
+2001-04-05 08:21 slif
+
+ * agent/agent_trap.c:
+
+ use malloc to decrease stack size in snmpd_parse_config_trapsess.
+
+2001-04-05 06:14 dts12
+
+ * agent/mibgroup/ucd-snmp/pass_persist.c:
+
+ Extend recent 'pass' changes to 'pass_persist'. (Thanks, Mike!)
+
+2001-04-05 02:27 dts12
+
+ * agent/mibgroup/ucd-snmp/pass.c:
+
+ Handle setting null string values via the 'pass' mechanism. (Support#406728)
+ Also handle embedded whitespace in such values.
+
+2001-04-04 14:56 hardaker
+
+ * FAQ, README, sedscript.in, version.h:
+
+ - (version.h sedscript.in): version tag ( 4.2.1 )
+
+2001-04-04 14:55 hardaker
+
+ * FAQ, README:
+
+ Change wording to say 4.2 line is the last to use the ucd-snmp name.
+
+2001-04-04 14:51 hardaker
+
+ * ChangeLog:
+
+ ChangeLog
+
+-------------------------------------------------------------------------------
+
+Changes: V4.2 -> V4.2.1
+
+2001-04-04 14:04 hardaker
+
+ * agent/mibgroup/ucd-snmp/loadave.c:
+
+ fix missing variable on solaris 2.6
+
+2001-04-04 14:02 hardaker
+
+ * testing/eval_tools.sh:
+
+ use kill -TERM instead of kill -SIGTERM for portability (breaks on solaris).
+
+2001-04-04 12:39 slif
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ Cleanup debug messages, build.
+
+2001-04-04 09:18 slif
+
+ * agent/mibgroup/examples/example.c:
+
+ Fix network byte order for IpAddress displayed.
+
+2001-04-04 08:50 slif
+
+ * apps/snmptrapd.c:
+
+ quiet exit on SIGTERM/SIGINT, same as snmpd.
+
+2001-04-04 08:49 hardaker
+
+ * agent/: auto_nlist.c, auto_nlist.h:
+
+ fix for auto_nlist bogus definitions for machines without nlist.
+
+2001-04-04 08:49 hardaker
+
+ * README.snmpv3:
+
+ update to when agent removes "createUser" directives.
+
+2001-04-04 08:31 hardaker
+
+ * agent/mibgroup/ucd_snmp.h:
+
+ Applied patch #412080: add freebsd5 to module include list.
+
+2001-04-04 08:12 dts12
+
+ * EXAMPLE.conf.def:
+
+ Document how to enable the AgentX facility in the master agent.
+
+2001-04-04 07:59 hardaker
+
+ * local/tkmib:
+
+ fix bug #411917: change walk end condition as suggested by submitter.
+
+2001-04-04 07:43 dts12
+
+ * snmplib/parse.c:
+
+ Change 'Line' variable name, to assist with Mac port.
+
+2001-04-04 07:42 dts12
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ Fix typo in cast (missing 'struct')
+
+2001-04-04 07:37 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Use a larger malloced buffer when decoding a large incoming encrypted message.
+
+2001-04-04 07:36 hardaker
+
+ * snmplib/snmp_debug.c:
+
+ Limit size of hex messages to 1/5th buffer size (to be safe).
+
+2001-04-04 07:24 jbpn
+
+ * agent/snmpd.c:
+
+ - call external signal handlers before calling snmp_select_info(),
+ rather than after calling snmp_select_info() but before select().
+ This fixes a potential problem that could arise if a signal handler
+ closed a session, which would cause select() to return -1 with
+ EBADF, and thus terminate the agent.
+
+2001-04-04 06:50 dts12
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ Ensure that checking for 'statvfs' is done consistently
+
+2001-04-04 06:48 dts12
+
+ * agent/mibgroup/mibII/system_mib.c:
+
+ ensure that 'exec_command' is used consistently with the availability of execv
+
+2001-04-04 06:45 dts12
+
+ * snmplib/: mib.c, snmp_api.c, snmp_logging.c:
+
+ Keep one of the pickier compilers (HP's aCC) happy.
+
+2001-04-03 22:07 hardaker
+
+ * snmplib/snmpusm.c:
+
+ Fix maximum encrypted packet length support for reverse encoded packets.
+
+2001-04-03 18:07 slif
+
+ * testing/tests/T120proxyget:
+
+ fix rwcommunity
+
+2001-04-03 16:44 hardaker
+
+ * local/wesrestart:
+
+ remove old unused script
+
+2001-04-03 16:41 hardaker
+
+ * local/snmpconf.dir/snmpd.conf/operation:
+
+ Add snmpconf directive support for the new "master" token.
+
+2001-04-03 16:41 hardaker
+
+ * local/snmpconf:
+
+ Fix bug in menus for configuration files containing only "groups".
+
+2001-04-03 16:40 hardaker
+
+ * README:
+
+ Change my name -> net-snmp developers.
+
+2001-04-03 15:36 hardaker
+
+ * EXAMPLE.conf.def:
+
+ mention snmpconf
+
+2001-04-03 15:28 hardaker
+
+ * README:
+
+ url changes mostly.
+
+2001-04-03 15:28 hardaker
+
+ * NEWS:
+
+ 4.2.1 update (please check).
+
+2001-04-03 15:28 hardaker
+
+ * FAQ:
+
+ ftp site update.
+
+2001-04-03 14:04 hardaker
+
+ * configure, configure.in:
+
+ Added agentx to default modules to compile in
+
+2001-04-03 10:12 hardaker
+
+ * local/mib2c:
+
+ add a comment at the end of the mib2c output explaining that its
+ merely a template.
+
+2001-04-03 08:27 hardaker
+
+ * AGENT.txt, FAQ, PORTING, README, README.agentx:
+
+ Web page/ftp site updates. Uses www.net-snmp.org everywhere now.
+
+2001-04-03 06:24 slif
+
+ * agent/mibgroup/util_funcs.c:
+
+ Fix signed/unsigned compare.
+
+2001-04-03 06:21 dts12
+
+ * agent/mibgroup/mibII/kernel_linux.c:
+
+ Plug file-descriptor leak when using cached data. (Bug#412000)
+
+2001-04-02 23:22 nba
+
+ * apps/snmptest.c:
+
+ Fix an incompletely initialized variable
+
+2001-04-02 23:21 nba
+
+ * local/snmpconf:
+
+ The answers for the "load which files" menu are kept secret from the code
+ that loads the files .... fixed.
+
+2001-04-02 20:02 hardaker
+
+ * local/: Makefile.in, snmpconf.dir/snmptrapd.conf/formatting,
+ snmpconf.dir/snmptrapd.conf/traphandle:
+
+ Added snmptrapd configuration file directives to snmpconf.
+
+2001-04-02 10:08 jbpn
+
+ * man/snmp_agent_api.3:
+
+ - update documentation of agent_check_and_process to reflect
+ current behaviour
+
+2001-04-02 09:58 jbpn
+
+ * agent/snmp_agent.c:
+
+ - Fix memory leak in handle_one_var where long varbinds weren't
+ correctly free()d.
+
+ - Change behaviour of agent_check_and_process so that alarms run
+ correctly.
+
+2001-04-02 08:51 dts12
+
+ * agent/mibgroup/agentx/master.c:
+
+ Use the 'standard' config handler registration routine,
+ and recognise the config setting 'master all'
+
+2001-04-02 06:53 nba
+
+ * man/snmpd.conf.5.def:
+
+ Fix some missing quoting on .IP parameters
+
+2001-03-30 08:05 hardaker
+
+ * FAQ, README.agentx, agent/mibgroup/agentx/README.agentx:
+
+ moved agentx README to top
+
+2001-03-30 07:22 dts12
+
+ * FAQ:
+
+ Typo in AgentX README filename
+
+2001-03-30 07:20 dts12
+
+ * agent/: ds_agent.h, snmp_agent.c, snmpd.c,
+ mibgroup/agentx/README.agentx, mibgroup/agentx/master.c,
+ mibgroup/agentx/master.h:
+
+ Provide 'master' config directive to control whether or not to
+ activate extensible subagent support.
+ Initially restricted to AgentX support only.
+
+2001-03-30 03:46 dts12
+
+ * agent/mibgroup/agentx/README.agentx:
+
+ Update to reflect the increased maturity of the AgentX implementation.
+
+2001-03-30 03:34 dts12
+
+ * FAQ:
+
+ Tweaked various entries, and added a few new ones. General Shield meddling.
+
+2001-03-30 01:00 dts12
+
+ * README:
+
+ Add prominent warning regarding ucd-snmp => net-snmp switch.
+
+2001-03-30 00:46 dts12
+
+ * snmplib/snmp_api.c:
+
+ Fix interpretation of "pure numeric" peername strings (i.e. listen on the
+ specified port on all interfaces) - problem identified by Mala Ramakrishnan.
+
+2001-03-30 00:04 nba
+
+ * snmplib/parse.c:
+
+ Replace atoi/atol with strto(u)l which has better out-of-range returns.
+ This is not a perfect solution, but it is better ...
+
+2001-03-29 21:43 hardaker
+
+ * ISSUES:
+
+ rm ISSUES
+
+2001-03-29 14:34 hardaker
+
+ * COPYING:
+
+ minor formatting.
+
+2001-03-29 14:33 hardaker
+
+ * COPYING:
+
+ Um, got the year right this time.
+
+2001-03-29 14:32 hardaker
+
+ * COPYING:
+
+ update for 2001: added my required NAI BSD copyright.
+
+2001-03-29 08:23 slif
+
+ * testing/eval_tools.sh:
+
+ merge change from main branch (return_value=1 statement).
+
+2001-03-29 08:21 slif
+
+ * win32/libsnmp_dll/libsnmp.def:
+
+ Add vacm_is_configured.
+
+2001-03-28 22:12 nba
+
+ * mibs/: rfclist, rfcmibs.diff:
+
+ Add Printer-MIB to the rfclist with the corresponding patch.
+
+2001-03-28 13:06 nba
+
+ * snmplib/snmp_client.c:
+
+ Properly ignore non-response PDU's when doing async transaction.
+
+2001-03-28 13:04 nba
+
+ * man/snmpcmd.1, snmplib/mib.c:
+
+ Fix index handling to properly accept indexing with TimeTicks.
+ Implement -Ir to disable index checks.
+
+2001-03-28 06:20 hardaker
+
+ * FAQ, README, sedscript.in, version.h:
+
+ - (version.h sedscript.in): version tag ( 4.2.1.pre2 )
+
+2001-03-27 10:27 hardaker
+
+ * apps/snmptrapd.c:
+
+ Use snmp_log with %s to prevent % expansion in octet strings containing a %s.
+
+2001-03-27 05:37 dts12
+
+ * agent/: snmp_agent.c, mibgroup/agentx/master_request.c:
+
+ Handle non-responsive AgentX sub-agents more robustly.
+ (Based on suggestions from Harrie Hazewinkel & Paul Rasmussen)
+
+2001-03-27 02:35 dts12
+
+ * agent/mibgroup/smux/smux.c:
+
+ Reset count of authorized peers on closedown. (Thanks to Vlad Tunik)
+
+2001-03-26 18:03 hardaker
+
+ * agent/mibgroup/mibII/vacm_vars.c, snmplib/vacm.c, snmplib/vacm.h:
+
+ Fixed vacm to drop v1/v2c packets properly when no com2sec entries are found.
+
+2001-03-26 11:06 hardaker
+
+ * local/ipf-mod.pl:
+
+ add usage comment at top
+
+2001-03-22 14:34 nba
+
+ * mibs/rfclist:
+
+ New MIB in RFC 3083: DOCS-BPI-MIB
+
+2001-03-22 14:27 nba
+
+ * agent/mibgroup/host/hr_filesys.c, s/cygwin.h,
+ agent/mibgroup/host/hr_storage.c, agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_utils.c:
+
+ Make most of the host resources mib compile under Cygwin. We can now do
+ --with-mib-modules=host --with-out-mib-modules=host/hr_network
+
+2001-03-22 12:27 hardaker
+
+ * agent/mibgroup/util_funcs.c:
+
+ fix header_simple_table() for too long requests
+
+2001-03-22 08:13 hardaker
+
+ * apps/snmptrapd.c:
+
+ Bad Wes: find all instances of cut-n-paste errors before committing.
+
+2001-03-22 08:12 hardaker
+
+ * apps/snmptrapd.c:
+
+ Bad Wes: don't call function without the ()s. (at least in C).
+
+2001-03-22 07:46 dts12
+
+ * agent/agent_trap.c:
+
+ Fix for minor memory leak with trap-related varbind values.
+ Thanks to John Villalovos (and the Intel SNMP team)
+
+2001-03-21 17:22 driehuis
+
+ * snmplib/mib.c:
+
+ Bugfix for crash at snmp_shutdown time with OS's that check pointer
+ validity (e.g., FreeBSD)
+
+2001-03-21 08:16 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ join broken snmp_log lines
+
+2001-03-21 08:15 hardaker
+
+ * apps/snmptrapd.c:
+
+ fix -F (I think)
+
+2001-03-21 07:43 hardaker
+
+ * snmplib/snmp_api.c:
+
+ patch from Harrie to fix variable types (int -> size_t)
+
+2001-03-20 08:25 nba
+
+ * agent/mibgroup/mibII/at.c, agent/mibgroup/mibII/at.h,
+ agent/mibgroup/mibII/interfaces.c, s/linux.h:
+
+ Fix the atTable and ipNetTopMediaTable for Linux to return the ifIndex
+
+2001-03-19 13:14 nba
+
+ * apps/snmpdelta.c, man/snmpdelta.1:
+
+ Major option parsing surgery to cather for the getopt using version of
+ snmp_parse_args. Seems to have been forgotten when the rest of the apps
+ were updated.
+
+2001-03-19 13:13 nba
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ Re-order sys/conf.h and sys/param.h to make FreeBSD-5 happy
+
+2001-03-15 13:44 hardaker
+
+ * agent/mibgroup/mibII/ip.c:
+
+ fixed bug #405000: dropped support for IPOUTNOROUTES, since no
+ calculation of it seems close to correct.
+
+2001-03-15 13:36 hardaker
+
+ * agent/mibgroup/mibII/udp.c:
+
+ fix part 2 of bug 405519 adding fullsock to udpinerrors
+
+2001-03-15 13:31 hardaker
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ fix bug #408388 where memmove is called with too short a length.
+
+2001-03-15 11:21 hardaker
+
+ * FAQ, README, sedscript.in, version.h:
+
+ - (version.h sedscript.in): version tag ( 4.2.1.pre1 )
+
+2001-03-15 03:34 jbpn
+
+ * testing/eval_tools.sh:
+
+ kill -SIGKILL isn't legal syntax on Solaris or Linux; changed to kill -9
+ which is likely safer
+
+ don't set return_value to 1 after killing snmpd, which causes spurious
+ test failures
+
+2001-03-14 14:38 hardaker
+
+ * agent/agent_trap.h:
+
+ Patch from Harrie Hazewinkel: make send_enterprise_trap_vars a public fn.
+
+2001-03-14 11:08 hardaker
+
+ * agent/mibgroup/mibII/at.c:
+
+ fix ipnettomedia indexing on solaris.
+
+2001-03-14 10:27 slif
+
+ * agent/mibgroup/tunnel/tunnel.c:
+
+ Use config.h, don't use ucd-snmp directory to build in the mibgroup tree.
+
+2001-03-14 10:18 slif
+
+ * testing/RUNTESTS:
+
+ quiet "which" output. never ending saga...
+
+2001-03-14 10:08 slif
+
+ * agent/mibgroup/agentx/master_request.c:
+
+ quiet unsigned long compare.
+
+2001-03-14 10:00 slif
+
+ * agent/mibgroup/agentx/client.c:
+
+ Get a decl of in_addr_t from netinet/in.h, where necessary.
+
+2001-03-14 10:00 slif
+
+ * snmplib/parse.c:
+
+ Avoid warnings of struct timeval decl in system.h by including *time.h*.
+
+2001-03-14 09:47 slif
+
+ * agent/snmpd.c, apps/snmpvacm.c, apps/snmpnetstat/winstub.c,
+ snmplib/parse.c:
+
+ patch submitted by Harrie Hazewinkel
+
+2001-03-14 09:40 slif
+
+ * testing/RUNTESTS:
+
+ don't run tests without needed programs: snmpd, snmpget, snmpgetnext.
+
+2001-03-14 08:24 slif
+
+ * configure, configure.in:
+
+ Provide an empty DLLIBS value for non-dlmod uses.
+
+2001-03-14 07:36 slif
+
+ * agent/mibgroup/agentx/protocol.c:
+
+ cast u_long to u_char when storing 8-bit values.
+
+2001-03-14 07:33 slif
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ fix unsigned length compares.
+
+2001-03-14 05:45 dts12
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ Fix Linux file descriptor leak (reported by Oliver Fänger)
+
+2001-03-13 13:20 hardaker
+
+ * snmplib/default_store.c:
+
+ Patch from Harrie Hazewinkel to check for NULLs in DEBUG msg
+
+2001-03-12 14:06 nba
+
+ * agent/mibgroup/agentx/: master_admin.c, subagent.c:
+
+ Fix some minor leaks.
+
+2001-03-12 14:05 nba
+
+ * agent/snmpd.c:
+
+ Some minor fixes to argument processing, including terminating snmpd on
+ extraneous non-option arguments.
+
+2001-03-10 08:13 hardaker
+
+ * agent/mibgroup/mibII/ip.c:
+
+ Bug #404988: don't use ipstat.ips_fragtimout as a number of seconds.
+
+2001-03-07 10:26 slif
+
+ * testing/eval_tools.sh:
+
+
+ new DELAY function; start/stop daemons using new STARTPROG/STOPPROG with DELAY;
+ log commands issued and final result to SNMP_TMPDIR/invoked;
+ suppress "kill" output to help Cygwin users happy.
+
+2001-03-07 10:23 slif
+
+ * testing/RUNTESTS:
+
+
+ add -S parameter for DELAY seconds; add trap for interrupt control;
+ pass test number and display-header-only to eval_onescript.sh;
+ add which test to verbose locating messages (Cygwin uses type, not which).
+
+2001-03-07 10:20 slif
+
+ * testing/: TESTCONF.sh, eval_onescript.sh:
+
+
+
+ Incorporate test number into test results dir name.
+ Provide default values for test number and display-header-only flag.
+
+2001-03-07 10:19 slif
+
+ * testing/Makefile.in:
+
+
+
+ "make clean" removes any test result dirs "/tmp/snmp-test-*".
+
+2001-03-07 10:15 slif
+
+ * testing/tests/: T054agentv2ctrap, T056agentv2cmintrap,
+ T058agentauthtrap:
+
+
+ Replace sleep with commented out DELAY ; each start/stop action now
+ invokes DELAY.
+
+2001-03-07 10:14 slif
+
+ * testing/tests/T100agenthup:
+
+
+ Replace sleep with DELAY.
+
+2001-03-07 10:13 slif
+
+ * win32/config.h:
+
+
+
+ Change element separator to Win32 ';' in DEFAULT_MIBS
+ Declare Win32 has getpid!.
+
+2001-03-07 10:10 slif
+
+ * snmplib/snmp_api.c:
+
+
+
+ Win32 include io.h to declare mktemp.
+ Expand the comment near mktemp usage to explain why it is needed.
+
+2001-03-07 10:09 slif
+
+ * snmplib/snmp_alarm.c:
+
+
+
+ remove unnecessary ifndef WIN32. ifdef SIGALRM is sufficient.
+
+2001-03-07 10:07 slif
+
+ * agent/snmpd.c, apps/snmptrapd.c:
+
+
+
+ Win32 include process.h to declare getpid.
+
+2001-03-07 10:06 slif
+
+ * snmplib/snmp_logging.c:
+
+
+
+ Use proper define to qualify include-ing a header.
+
+2001-03-07 10:04 slif
+
+ * agent/mib_modules.c, apps/snmpnetstat/if.c, snmplib/system.h:
+
+
+
+ Apply the time goo consistently: move header includes out of system.h.
+
+2001-03-06 10:08 hardaker
+
+ * configure, configure.in:
+
+ don't force inclusion of -ldl.
+
+2001-03-05 06:30 slif
+
+ * snmplib/snmpv3.c:
+
+
+
+ Follow method usage, don't declare getHwAddress unless used.
+
+2001-03-05 06:30 slif
+
+ * snmplib/snmp_api.c:
+
+
+
+ Remove nested variable ep - one already exists.
+
+2001-03-05 06:28 slif
+
+ * agent/mibgroup/examples/ucdDemoPublic.c:
+
+
+
+ Comment out example variables that are not used.
+
+2001-03-04 17:41 slif
+
+ * README.win32, win32/config.h, win32/mib_module_config.h,
+ win32/mib_module_includes.h, win32/mib_module_inits.h,
+ win32/libsnmp_dll/libsnmp.def, win32/libucdmibs/libucdmibs.def,
+ win32/libucdmibs/libucdmibs.dsp:
+
+
+
+ patch to build more modules, including agentX, on Win32 using MS-VC.
+
+2001-03-04 17:27 slif
+
+ * agent/mibgroup/header_complex.c, agent/mibgroup/agentx/client.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/master_request.c,
+ agent/mibgroup/agentx/protocol.c, agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/notification/snmpNotifyFilterProfileTable.c,
+ agent/mibgroup/notification/snmpNotifyFilterTable.c,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/target/target.c, agent/mibgroup/ucd-snmp/dlmod.c,
+ agent/mibgroup/ucd-snmp/pass_persist.c,
+ agent/mibgroup/ucd-snmp/proxy.c, apps/snmptrapd_log.c:
+
+
+
+ patch to build more of the agent using MS-VC on Win32 platform.
+
+2001-03-03 14:34 nba
+
+ * mibs/: IANAifType-MIB.txt, MTA-MIB.txt, Makefile.mib,
+ README.mibs, TUNNEL-MIB.txt, ianalist, mibfetch, rfclist,
+ rfcmibs.diff, smistrip:
+
+ Update to current IANAifType-MIB, plus addition of README and tools to get
+ a complete set of IETF MIB files.
+
+2001-03-03 07:11 nba
+
+ * agent/mibgroup/agentx/master.h:
+
+ Remove an unused prototype
+
+2001-03-03 06:36 nba
+
+ * man/snmptrapd.8, apps/snmptrapd_log.c:
+
+ Add a new %P formatting sequence to user specified log formats. It print
+ the security information from the PDU (community, user, context as available)
+ Also modify the default trap output to use it.
+
+2001-03-03 06:21 nba
+
+ * apps/snmptrapd_log.c:
+
+ Fix specifiers like %.3s
+
+2001-03-03 06:10 nba
+
+ * snmplib/parse.c:
+
+ Fix the parser to diagnose oid specs like::= { single }
+ Be silent for internal links when moving nodes to the adoption list. This
+ should help giving only a single message for missing imports of enterprises.
+
+2001-03-02 13:24 slif
+
+ * snmplib/asn1.c, snmplib/mib.c, snmplib/mib.h, snmplib/snmp_api.c,
+ snmplib/snmp_parse_args.c, snmplib/snmp_parse_args.h,
+ win32/libsnmp_dll/libsnmp.def:
+
+
+
+ cleanup for MS-VC Win32 build
+
+2001-03-02 07:36 hardaker
+
+ * README:
+
+ sourcerforge -> sourceforge
+
+2001-03-02 07:25 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ Patch from Karl Schilke to fix timestamps in synchonous cases
+
+2001-03-02 06:31 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Remove unused variable from snmp_oid_compare().
+
+2001-03-01 19:49 hardaker
+
+ * snmplib/: asn1.c, snmp_api.c:
+
+ Fix snmp_oid_compare and reverse encodings to deal with numbers > 2^31.
+
+2001-02-21 15:31 nba
+
+ * man/: snmp.conf.5.def, snmpcmd.1:
+
+ Fix a couple of typos
+
+2001-02-21 15:22 hardaker
+
+ * snmplib/ucd-snmp-includes.h:
+
+ Applied patch #103805 from bcollar: add sys/time.h to ucd-snmp-includes.h
+
+2001-02-21 15:15 hardaker
+
+ * snmplib/int64.c:
+
+ fix bug #133416 (u64Subtraction math) as suggested by the submittor
+
+2001-02-21 14:38 nba
+
+ * agent/mibgroup/host/hr_filesys.c:
+
+ Try fixing inconsistent indexing on BSD
+
+2001-02-19 08:46 slif
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+
+
+ - proxy.c: remove some unused variables.
+
+2001-02-16 15:12 hardaker
+
+ * agent/var_struct.h:
+
+ - increase UCD_REGISTRY_OID_MAX_LEN to 128 at Frank's request
+
+2001-02-14 18:15 hardaker
+
+ * apps/snmptrapd.c:
+
+ removed unused snmp_alarm.h include
+
+2001-02-13 16:21 hardaker
+
+ * snmplib/snmp_api.c:
+
+ fix bug #130740 using suggested close() wrapper around mkstemp()
+
+2001-02-09 11:16 hardaker
+
+ * agent/snmpd.c:
+
+ Applied patch #103613: fix memory leak in snmpd port specification -> default_store.
+
+2001-02-09 11:14 hardaker
+
+ * agent/mib_modules.c:
+
+ Applied patch #103612: fix memory leak in mib_module init code
+
+2001-02-09 11:12 hardaker
+
+ * agent/agent_registry.c:
+
+ Applied patch #103611: fix memory leak for duplicate oid registrations.
+
+2001-02-09 11:08 hardaker
+
+ * perl/SNMP/SNMP.xs:
+
+ Applied patch #103604: Add support for V1 traps and int/int32 differences
+
+2001-02-09 11:06 hardaker
+
+ * agent/mibgroup/ucd-snmp/: memory_freebsd2.c, proxy.c:
+
+ Applied patch #103702: fix swap reporting on freebsd 4.2
+
+2001-02-06 14:26 nba
+
+ * apps/snmpnetstat/Makefile.in:
+
+ Add a dependency for libsnmp
+
+2001-02-06 14:25 nba
+
+ * agent/mibgroup/ucd-snmp/vmstat_freebsd2.c:
+
+ Implement raw interrupt and context switch counters
+
+2001-02-06 14:24 nba
+
+ * agent/mibgroup/notification/snmpNotifyTable.c:
+
+ Make dmalloc happy by fixing a malloc read overrun
+
+2001-02-06 14:16 nba
+
+ * man/snmpcmd.1, snmplib/default_store.h, snmplib/mib.c:
+
+ Backport -OT output to 4-2-patches branch
+
+2001-02-06 06:02 hardaker
+
+ * perl/SNMP/SNMP.pm:
+
+ documentation fix
+
+2001-01-31 23:02 nba
+
+ * snmplib/snmp_api.c:
+
+ Fix value validation for snmpset/snmptrap
+
+2001-01-31 23:00 nba
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ Fix bad return of a pointer to non-static storage
+
+2001-01-31 15:44 hardaker
+
+ * agent/mibgroup/host/hr_print.c:
+
+ Patch from Frank Bartels for freebsd fixes
+
+2001-01-30 17:13 hardaker
+
+ * agent/mibgroup/ucd-snmp/disk.c:
+
+ Applied patch #103414: fix disk info for block sizes other than 1024.
+
+2001-01-29 13:24 hardaker
+
+ * agent/mibgroup/smux/smux.c:
+
+ fix bug #130410: set the write_method in var_smux before returning
+ NULL to make sure that sets happen on OIDs that don't exist first.
+
+2001-01-29 13:15 hardaker
+
+ * local/mib2c:
+
+ fix suggested in bug #129948: check for - arguments at the begginning
+ of the command line token (don't match mib-2, eg).
+
+2001-01-29 13:13 hardaker
+
+ * snmplib/parse.c:
+
+ fix suggested in bug #129876: check for hint != NULL before freeing.
+
+2001-01-26 05:49 nba
+
+ * agent/mibgroup/host/hr_print.c:
+
+ Fix bug on FreeBSD when /etc/printcap is empty
+
+2001-01-25 14:38 nba
+
+ * mibs/RMON-MIB.txt:
+
+ Updated to RFC 2819
+
+2001-01-24 21:37 nba
+
+ * agent/Makefile.in:
+
+ Install libraries before agent so that libtool can relink.
+
+2001-01-20 05:54 nba
+
+ * apps/snmpdelta.c, snmplib/int64.c:
+
+ Two Counter64 glitches detected by Jason Gloudon <snmp@gloudon.com>
+
+2001-01-20 05:44 nba
+
+ * agent/snmpd.c:
+
+ Dont set up the select parameters before calling interrupt handlers!
+ Thanks to Frank Strauss.
+
+2001-01-20 05:42 nba
+
+ * snmplib/snmp_api.c:
+
+ Fix encoding of BITS variable, thanks to Frank Strauss
+
+2001-01-20 05:37 nba
+
+ * agent/mibgroup/ucd-snmp/vmstat_solaris2.c:
+
+ Raw IO counters from Jochen Kmietsch
+
+2001-01-20 05:36 nba
+
+ * agent/mibgroup/ucd-snmp/vmstat.h, mibs/UCD-SNMP-MIB.txt:
+
+ Prepare for more raw counters
+
+2001-01-15 15:14 nba
+
+ * agent/mibgroup/ucd-snmp/proxy.c:
+
+ undo a change that sneaked in by mistake
+
+2001-01-15 14:07 nba
+
+ * agent/mibgroup/ucd-snmp/proxy.c,
+ agent/mibgroup/ucd-snmp/vmstat.h,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.c,
+ agent/mibgroup/ucd-snmp/vmstat_bsdi4.h,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.c,
+ agent/mibgroup/ucd-snmp/vmstat_freebsd2.h,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.c,
+ agent/mibgroup/ucd-snmp/vmstat_netbsd1.h,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.c, mibs/UCD-SNMP-MIB.txt,
+ agent/mibgroup/ucd-snmp/vmstat_solaris2.h:
+
+ Extend the systemStats.cpuRaw section to include more raw counters for various
+ operating systems. Basic testing performed for Solaris and FreeBSD. Code
+ guesstimate for NetBSD and BSDi.
+
+2001-01-12 08:00 hardaker
+
+ * snmplib/snmp_api.c:
+
+ - bit_string fixes
+ - make snmp_add_var call snmp_parse_oid() instead of read_objid().
+
+2001-01-12 07:57 hardaker
+
+ * snmplib/asn1.c:
+
+ comment out really odd (and broken) check from asn_bitstring_check???
+
+2001-01-12 07:52 hardaker
+
+ * local/: mib2c.storage.conf, mib2c.vartypes.conf:
+
+ - misc bug fixes.
+ - new data types (uint32, unsigned, bits).
+
+2001-01-10 21:55 nba
+
+ * snmplib/snmp_api.c:
+
+ Fix calling of init_callbacks even if init_snmp called with NULL parameter
+
+2001-01-10 21:53 nba
+
+ * snmplib/snmp_api.c:
+
+ Fix badly applied previous patch
+
+2001-01-10 21:52 nba
+
+ * apps/snmpvacm.c:
+
+ Fix usage message (-e is now -Ce)
+
+2001-01-10 21:51 nba
+
+ * agent/mibgroup/mibII/var_route.c:
+
+ Fix a bad ipRouteProtocol return
+
+2001-01-10 21:50 nba
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ Fix problem when running --without-root-access for FreeBSD. Thanks to
+ Bert Driehuis.
+
+2001-01-10 21:48 nba
+
+ * agent/mibgroup/kernel_sunos5.c:
+
+ Use the ifspeed attribute from driver when available
+
+2001-01-09 06:29 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Applying patch found in bug #127299:
+ - switch ifAdmin and ifOperStatus meanings to match kernel parameters better.
+
+2001-01-09 06:21 hardaker
+
+ * win32/snmpnetstat/snmpnetstat.dsp:
+
+ added getopt.c to list
+
+2001-01-08 08:19 hardaker
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ Patch from Anders Ellefsrud
+ - fix hr_swrun when programs have exited so we don't truncate
+ getnext queries.
+
+2001-01-08 08:14 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Patch from Frank Strauss:
+ - fix BITS encoding length when mib knowledge is available.
+
+2001-01-04 23:18 nba
+
+ * apps/: snmpset.c, snmptrap.c:
+
+ Try fixing problems with snmpset of negative values
+
+2001-01-04 23:15 nba
+
+ * agent/mibgroup/ucd-snmp/vmstat_bsdi4.c:
+
+ Add the raw cpu couters for BSDi. Courtesy Bert Driehuis.
+
+2001-01-04 23:12 nba
+
+ * agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/ucd-snmp/loadave.c, snmplib/callback.c:
+
+ Save some unused variables
+
+2001-01-04 23:09 nba
+
+ * acconfig.h, config.h.in, agent/agent_trap.c, agent/mib_modules.c,
+ agent/mibgroup/agentx/client.c, agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/master_admin.c,
+ agent/mibgroup/agentx/master_admin.h,
+ agent/mibgroup/agentx/master_request.c,
+ agent/mibgroup/agentx/protocol.c, agent/mibgroup/agentx/subagent.c:
+
+ Add missing dmalloc support for some files
+
+2001-01-04 23:04 nba
+
+ * Makefile.in:
+
+ Ensure sort order for config.h.in
+
+2001-01-04 10:24 hardaker
+
+ * configure, configure.in:
+
+ fix semi-colon problem. Patch #103101.
+
+2001-01-03 07:01 hardaker
+
+ * agent/mibgroup/host/hr_swrun.c:
+
+ /proc/%d/cmdline may be an empty file for some processes. Return "" if so.
+
+2001-01-02 09:47 hardaker
+
+ * snmplib/snmp_logging.c:
+
+ add a "%s" formatting string to the syslog() call (redhat bug #18153).
+
+2000-12-29 13:38 hardaker
+
+ * agent/mibgroup/mibII/interfaces.c:
+
+ Patch from Ted Rule:
+ - better checking for formatting of the /proc/net/dev file to avoid
+ linux core dumps when the kernel mis-behaves.
+
+2000-12-27 16:47 hardaker
+
+ * testing/tests/: T053agentv1trap, T054agentv2ctrap,
+ T055agentv1mintrap, T056agentv2cmintrap, T113agentxtrap:
+
+ - trap API testing suite enhanced to test more cases.
+
+2000-12-27 16:45 hardaker
+
+ * agent/agent_callbacks.h, agent/agent_trap.c, agent/agent_trap.h,
+ agent/mibgroup/notification/snmpNotifyTable.c,
+ agent/mibgroup/notification/snmpNotifyTable.h, snmplib/callback.c,
+ snmplib/callback.h:
+
+ - Make the notification mib work more via callbacks and remove ifdefs in
+ agent_trap.c
+ - Make the agent_trap.c file check for callback registrations and
+ handle it internally using the old trapsink support if no callback
+ is found.
+ - This fixes the problem when init_mib_modules() isn't called in subagents.
+
+2000-12-27 16:42 hardaker
+
+ * agent/mibgroup/examples/example.c:
+
+ make the example traps be sent using a enterprise specific trap of 99
+ rather than 3. We need to define it in the mib still.
+
+2000-12-27 15:26 hardaker
+
+ * snmplib/asn1.c:
+
+ fix broken compiler precedence as reported in support #110473.
+
+2000-12-22 08:54 hardaker
+
+ * snmplib/asn1.c:
+
+ fix counter64 reverse encodings.
+
+2000-12-22 06:58 hardaker
+
+ * snmplib/vacm.c:
+
+ fix view processing to watch for length prefix. The length prefix
+ really really shouldn't be stored directly in the oid. Niels?
+
+2000-12-21 14:43 nba
+
+ * apps/snmpnetstat/main.c:
+
+ - main.c: fix problem with positional community argument to snmpnetstat
+
+2000-12-21 14:37 nba
+
+ * snmplib/mib.c:
+
+ - mib.c: make sure init_mib_internals is called before doing anything
+ serious in init_mib
+
+2000-12-21 08:22 hardaker
+
+ * snmplib/snmp_api.c:
+
+ Patch from Frank Strauss to fix support for BITS
+
+-------------------------------------------------------------------------------
+
+Changes: V4.1.2 -> V4.2
+
+2000-12-04 15:30 hardaker
+
+ - (NEWS, README): updates.
+
+2000-12-04 14:48 marz
+
+ ensure mibload.t uses correct MIBDIR for testing
+
+2000-12-04 11:05 hardaker
+
+ - (AGENT.txt, FAQ, README): convert url's to www.netsnmp.org.
+
+2000-12-04 08:45 hardaker
+
+ - (NEWS): agentx note changes.
+
+2000-12-03 07:29 nba
+
+ - snmptrapd_log.c: fox missing leading zeroes for %.2d like formats.
+ Add an alternate format for up-time displays.
+
+2000-12-02 18:22 marz
+
+ found the uninitialized data bug...must have been in there dormant for a while, other test fixes - good to go!
+
+2000-12-01 16:36 hardaker
+
+ - (agent/snmpd.c): reference sourceforge.
+
+2000-12-01 16:35 hardaker
+
+ - (AGENT.txt): reference sourceforge.
+
+2000-12-01 16:34 hardaker
+
+ - (TODO): reference net-snmp-coders.
+
+2000-12-01 16:34 hardaker
+
+ - (README): update.
+
+2000-12-01 16:33 hardaker
+
+ - (bug-report, agent/mibgroup/versiontag): remove the bug report script.
+
+2000-12-01 16:31 hardaker
+
+ - (PORTING): reference sourceforge.
+
+2000-12-01 16:23 hardaker
+
+ - (man/snmptrapd.conf.5.def): mention the fact that snmpv3 traps are
+ the same as snmpv2 traps.
+
+2000-12-01 16:23 hardaker
+
+ - (NEWS): update.
+
+2000-12-01 15:31 hardaker
+
+ - (README): update.
+
+2000-12-01 15:16 hardaker
+
+ - (snmpd.conf.5.def): update for proxy support.
+
+2000-12-01 14:36 hardaker
+
+ - (FAQ): update a few things.
+
+2000-12-01 14:28 nba
+
+ - mib.c: diagnose wrong quoting in indices
+
+2000-12-01 14:23 nba
+
+ - parse.c: add RFC-1213 as an aliase for RFC1213-MIB (used in many mibs)
+
+2000-12-01 14:19 nba
+
+ - smux.c: reformat some debug messages for readability
+
+2000-12-01 14:17 nba
+
+ - interfaces.c: fix ifType values for Linux
+
+2000-12-01 14:14 nba
+
+ - subagent.c: supply a missing return value
+
+2000-12-01 10:04 hardaker
+
+ - (snmpconf): quote things with spaces in them.
+
+2000-12-01 09:49 hardaker
+
+ - (snmpconf.1): quick man page for snmpconf.
+
+2000-12-01 09:15 hardaker
+
+ - (local/snmpconf.dir/snmpd.conf/monitor): cleanups.
+
+2000-12-01 09:14 hardaker
+
+ - (snmplib/parse.c): change no-parent log message into a warning.
+
+2000-12-01 09:11 hardaker
+
+ - (agent/mibgroup/agentx/README.agentx): update from Dave.
+
+2000-12-01 09:10 hardaker
+
+ - (FAQ): update from Dave.
+
+2000-12-01 07:59 hardaker
+
+ - (agent/agent_trap.c): Patch from Dave Shield:
+ - support v2->v1 trap conversion.
+
+2000-12-01 07:56 hardaker
+
+ - (configure, configure.in): typo.
+
+2000-12-01 07:42 marz
+
+ additional fixes to support targetted builds of perl/SNMP using -NET-SNMP-PATH (and white space removal as my emacs kindly does that for me?)
+
+2000-11-30 14:06 nba
+
+ - getopt.h, snmp_parse_args.h: extern "C" bracketing
+
+2000-11-30 14:04 nba
+
+ - snmpd.conf.5.def: fix formatting of smuxpeer token
+
+2000-11-30 10:31 hardaker
+
+ - (FAQ): Update from Dave.
+
+2000-11-30 10:18 hardaker
+
+ - (master_request.c): Patch from Dave Shield to fix bad sets for agentx.
+
+2000-11-30 09:19 hardaker
+
+ - (ov/README): minor corrections, probably still incorrect.
+
+2000-11-30 09:18 hardaker
+
+ - (local/Makefile.in, snmpconf, acl, basic_setup, monitor, operation,
+ system, trapsinks):
+ - grouping support.
+ - sort-of-quiet output support.
+ - operation mode support (setting user, group, ports...)
+
+2000-11-30 09:13 hardaker
+
+ - (snmplib/read_config.c): save a warning header at the top of the
+ persistent data file.
+
+2000-11-30 09:11 hardaker
+
+ - (agent/mibgroup/tunnel/tunnel.c): Cleanup patch from Frank Strauss.
+
+2000-11-30 09:10 hardaker
+
+ - (agent/snmpd.c): set DS_AGENT_NO_ROOT_ACCESS in -H help output.
+
+2000-11-30 09:08 hardaker
+
+ - (configure, configure.in): mention the TUNNEL-MIB support.
+
+2000-11-29 18:21 slif
+
+ Update e-mail address for Slifcak
+
+2000-11-29 11:34 marz
+
+ fixed order of function checking so that vsnprintf is not found in libdb (BSD db) by mistake
+
+2000-11-29 05:18 marz
+
+ partial submit to get perl/SNMP tests to pass and update the docs somewhat - still getting cores in notify.t. had to change create_user_from_session to update an existing user incase 2 sessions are started with the same user
+
+2000-11-28 18:00 marz
+
+ partial submit to get perl/SNMP tests to pass and update the docs somewhat - still getting cores in notify.t. had to change create_user_from_session to update an existing user incase 2 sessions are started with the same user
+
+2000-11-27 14:37 hardaker
+
+ - (local/snmpconf.dir/snmpd.conf/basic_setup): basic setup series of questions.
+
+2000-11-27 14:36 hardaker
+
+ - (local/snmpconf.dir/snmpd.conf/acl): typos.
+
+2000-11-27 14:36 hardaker
+
+ - (local/snmpconf):
+ - add support for "groups" of items.
+ - don't use IO::Dir, as its not in the standard perl module distributions.
+
+2000-11-27 14:34 hardaker
+
+ - (agent/mibgroup/ucd-snmp/dlmod.h): remove unneeded variable reference.
+
+2000-11-27 14:33 hardaker
+
+ - (agent/snmp_agent.c): Patch from John Naylon:
+ - fix auto-set support for the agent (and plug a memory leak).
+
+2000-11-27 13:42 nba
+
+ - snmp.conf.5.def: document tokens extendedIndex and noRangeCheck
+
+2000-11-27 13:41 nba
+
+ - parse.c: fix a C++ style comment
+
+2000-11-24 15:14 nba
+
+ - memory_freebsd2.c, vmstat_netbsd1.c: minor fixes for NetBSD 1.5, OPenBSD 2.6
+
+2000-11-22 13:48 hardaker
+
+ - (mibgroup/ucd-snmp/dlmod.c): Patch from Sean Harding:
+ - don't export an internal variable.
+
+2000-11-21 15:17 nba
+
+ - mib.c: fix parsing of oid like 99.13.\"guf\"8
+
+2000-11-19 13:03 nba
+
+ - SNMP.xs, mib2c.vartypes.conf: The recent specialisation of the Integer
+ types in the parser created problems for the perl module and in turn
+ for mib2c. Sorry for not catching this before pre2 :-(
+
+2000-11-19 12:58 nba
+
+ - fixes to ./configure --with-defaults --enable-mini-agent; make install
+ and run the tools under cygwin. Haven't tried the agent yet :-)
+
+2000-11-18 07:14 hardaker
+
+ - (version.h bug-report sedscript.in): version tag ( 4.2.pre2 )
+
+2000-11-18 07:12 hardaker
+
+ - (T049snmpv3inform): v3 inform test added.
+
+2000-11-17 11:01 nba
+
+ - mib.c, snmp_api.c: better error messages for bad snmpset calls and bad
+ indices. Also fix a bug with quoted indices.
+
+2000-11-17 10:32 hardaker
+
+ - (tests/T050snmpv3trap): test for snmpv3 traps.
+
+2000-11-17 10:30 hardaker
+
+ - (snmptrapd.c): fix cases where the format strings are specified.
+
+2000-11-17 10:26 nba
+
+ - IANAifType-MIB.txt: update from IANA
+
+2000-11-17 08:32 hardaker
+
+ - (master_request.c): Patch from Dave Shield:
+ - fix memory leaks.
+ - fix agentx problems with bad sets.
+
+2000-11-16 17:55 hardaker
+
+ - (snmplib/snmpv3.c): added a space in a debugging output statement.
+
+2000-11-16 17:54 hardaker
+
+ - (snmplib/read_config.c): simple debugging statement added.
+
+2000-11-16 17:54 hardaker
+
+ - (snmplib/snmp_api.c): set DS_LIB_APPTYPE if it hasn't been set yet.
+
+2000-11-16 17:52 hardaker
+
+ - (testing/eval_tools.sh): add CONFIGTRAPD.
+
+2000-11-16 17:50 hardaker
+
+ - (snmplib/mib.c, testing/tests/T112agentxsetfail,
+ testing/tests/T122proxysetfail):
+ - support -Ir for "dont check range/type values" (letter r subject to debate).
+
+2000-11-16 17:25 hardaker
+
+ - (callback.c): better debugging output to display a callback count when done.
+
+2000-11-16 16:52 hardaker
+
+ - (T113agentxtrap): A new test to test trap support from agentx subagents.
+
+2000-11-16 16:50 hardaker
+
+ - (T058agentauthtrap): sleep some and only perform one get request.
+
+2000-11-16 16:49 hardaker
+
+ - (T054agentv2ctrap): sleep a bit and only send one snmp set request.
+
+2000-11-16 15:47 nba
+
+ - getopt.c: quell compiler warnings
+
+2000-11-16 15:31 nba
+
+ - parse.[ch], mib.c, snmp_api.c: rename TYPE_UINTEGER32 back to TYPE_UINTEGER
+
+2000-11-16 15:16 nba
+
+ - snmptrapd.c, snmptrapd.conf: new config directives format1 and format2 to
+ set log formats for TRAP1 and TRAP2 pdus.
+
+2000-11-16 13:50 nba
+
+ - snmp_api.c: add functionality to check value types in addition to ranges
+ for snmpset and snmptrap.
+
+2000-11-16 13:47 nba
+
+ - parse.c: Fix DEFVAL parsing for OBJECT IDENTIFIER or BITS values
+ (i.e. DEFVAL { { 0 0 } } etc)
+
+2000-11-16 11:39 hardaker
+
+ - (T058agentauthtrap): add a greater timeout to the get request.
+
+2000-11-16 11:35 hardaker
+
+ - (example.c):
+ - send a v2c trap using its own data, not the system_mib's.
+ - more debugging statements.
+
+2000-11-16 11:34 hardaker
+
+ - (T053agentv1trap, T054agentv2ctrap, T058agentauthtrap):
+ - new tests for traps sent by the agent.
+
+2000-11-16 09:56 hardaker
+
+ - (target.c): Don't delete READONLY trap sessions.
+
+2000-11-15 16:37 hardaker
+
+ - (testing/tests/T052snmpv2cinform): test inform sending/receiving.
+
+2000-11-15 16:37 hardaker
+
+ - (apps/snmptrap.c, man/snmptrap.1): support -Ci for sending informs.
+
+2000-11-15 15:48 hardaker
+
+ - (snmptrapd_log.c): use SNMP_MAXBUF instead of a local length definition.
+
+2000-11-15 14:18 nba
+
+ - Makefile.in: fix make'ing in remote directory
+
+2000-11-15 14:11 nba
+
+ - main.c: update to use getopt for argument parsing.
+
+2000-11-15 14:10 nba
+
+ - snmp_agent.c: fix a confusing indentation.
+
+2000-11-15 14:09 nba
+
+ - agent_trap.c: make sure community is \0-terminated in targetParamsTable
+
+2000-11-15 14:03 nba
+
+ - snmptrapd_log: fix a buffer that is way too short for a trap with just a
+ single parameter. Fix a bad limit test in str_append.
+
+2000-11-15 14:00 nba
+
+ - snmptranslate.c: fix a stupid perror for snmp_perror
+
+2000-11-15 13:58 nba
+
+ - parse.[ch], mib.c: enhance the parser to distinguish INTEGER, Integer32,
+ Unsigned32, UInteger32.
+
+2000-11-15 13:55 nba
+
+ snmp_api.c: remove an unused variable
+
+2000-11-15 07:49 hardaker
+
+ - (snmp_vars.c, subagent.c): Patch from Lawrence Greenfield:
+ - Don't make init_agent()/subagent_pre_init() exit but return an
+ error condition instead.
+
+2000-11-12 08:08 hardaker
+
+ - (ucdDemoPublic.c): add NULL to end of demo string and check for len=0.
+
+2000-11-12 04:45 nba
+
+ snmp_api.c: Make sure the noRangeCheck token is a boolean
+
+2000-11-12 04:41 nba
+
+ - mib.c: give the tree-top a name to protect error message when looking up .foo
+
+2000-11-12 04:36 nba
+
+ - snmptranslate.c: use config_perror for a better error message
+
+2000-11-12 04:34 nba
+
+ - proxy.c: remove some unused variables.
+
+2000-11-12 04:33 nba
+
+ -agent_traps.c: Move a conditionally used variable
+
+2000-11-12 04:32 nba
+
+ Fix a bogus #ifdef
+
+2000-11-10 09:18 hardaker
+
+ - (configure, configure.in): apply patch #102224 from jbpn for cross-compiling.
+
+2000-11-10 08:56 hardaker
+
+ - (testing/TESTCONF.sh, testing/eval_tools.sh, testing/tests/T051snmpv2ctrap):
+ - first pass at a testing script to test trap functionality.
+ - which even uncovered a bug.
+
+2000-11-10 08:55 hardaker
+
+ - (apps/snmptrapd.c):
+ - fork if file logging or syslogging, but not printing.
+ - don't close open file descriptors. There shouldn't be any.
+
+2000-11-10 08:53 hardaker
+
+ - (apps/snmptrapd_log.c): properly null terminate log strings.
+
+2000-11-09 16:40 hardaker
+
+ - (configure.in): attempt to implement a --with-rsaref flag.
+
+2000-11-09 15:32 hardaker
+
+ - (README, perl/SNMP/README): mention Karl.
+
+2000-11-09 15:31 hardaker
+
+ - (NEWS, perl/SNMP/README): mention Karl.
+
+2000-11-09 14:56 hardaker
+
+ - (examples/bulkwalk.pl, t/bulkwalk.t): patch from Karl Schilke:
+ - support bulk requests.
+
+2000-11-09 14:53 hardaker
+
+ - (MANIFEST, README, SNMP.pm, SNMP.xs): patch from Karl Schilke:
+ - support bulk requests.
+
+2000-11-08 23:33 hardaker
+
+ - (read_config.c): fix -H output.
+
+2000-11-08 23:02 hardaker
+
+ - (snmp_agent.c): make agent_check_and_process() call run_alarms().
+
+2000-11-08 22:45 hardaker
+
+ - (diskio.c): fix OID.
+
+2000-11-08 17:06 hardaker
+
+ - (SNMP.pm, SNMP.xs): patch from Mark Cavage for default value support.
+
+2000-11-08 17:03 hardaker
+
+ - (mib.c, parse.c, parse.h): minimal DEFVAL parsing support.
+
+2000-11-08 16:20 hardaker
+
+ - (config.h.in, configure): check for librsaref, etc, if needed.
+
+2000-11-07 15:15 hardaker
+
+ - (config.h.in, configure, configure.in, agent/agent_read_config.c,
+ agent/snmpd.c):
+ - uid/gid changes.
+
+2000-11-07 15:10 hardaker
+
+ - (SNMP.xs): fix TYPE_NOTIF -> TYPE_NOTIFTYPE.
+
+2000-11-07 11:30 hardaker
+
+ - (SNMP/SNMP.pm, SNMP/SNMP.xs): Patch from Joe Clarke:
+ - implement best-guess (-Ib) parsing.
+ - access to trap varbinds.
+ - range access.
+
+2000-11-07 11:00 hardaker
+
+ - (.cvsignore): ignore build created files.
+
+2000-11-07 10:58 hardaker
+
+ - (README, SNMP.pm, SNMP.xs): patch from Karl Schilke:
+ - implement a finish() call.
+
+2000-11-07 10:54 hardaker
+
+ - (SNMP/SNMP.xs): patch from Karl Schilke:
+ - multiple callback patch for perl/SNMP/SNMP.xs.
+
+2000-11-07 10:48 hardaker
+
+ - (read_config.c): log an error message if the optional config file DNE.
+
+2000-11-07 10:41 hardaker
+
+ - (SNMP.pm): fix iid parsing with respect to mib nodes with a - in it.
+
+2000-11-07 10:29 hardaker
+
+ - (if_fields.h, interfaces.c, ipMedia.c, ipRoute.c, tcp.c, tcpTable.c,
+ udp.c, udpTable.c): Patch from Bert Driehuis:
+ - mibJJ fixes [FreeBSD/other BSD's].
+
+2000-11-07 10:13 hardaker
+
+ - (agent/agent_read_config.c, agent/ds_agent.h, agent/snmpd.c,
+ man/snmpd.1.def, man/snmpd.conf.5.def): Patch from Harrie Hazewinkel:
+ - implement uid/gid changes after startup for the agent.
+
+2000-11-07 08:33 hardaker
+
+ - (target.c): a better sanity check for session deletion.
+
+2000-11-07 07:24 hardaker
+
+ - (target.c): Patch from Dave to sanity check param->updateTime.
+
+2000-11-06 11:00 hardaker
+
+ - (md5.c): check to see that MDsign() data lies on a 32 byte boundry.
+ - its possible some compilers will choke on this hack.
+ - fixes bug #12175.
+
+2000-11-03 17:54 hardaker
+
+ - (mib2c): sort OIDs properly.
+
+2000-11-03 16:44 hardaker
+
+ - (example.c): Patch from Harrie Hazewinkel:
+ - fix mib registrations for duplicate OIDs being used for the trap examples.
+
+2000-11-03 15:31 hardaker
+
+ - (snmpd.c): second patch from dougwarz in bug #117273 to fix smux problems.
+ - Um, applied correctly this time (I hope).
+
+2000-11-03 15:29 hardaker
+
+ - (snmpd.c): second patch from dougwarz in bug #117273 to fix smux problems.
+
+2000-11-02 22:19 nba
+
+ Clean up some unused variables etc.
+
+2000-11-02 22:16 nba
+
+ - Makefile.in: fix some $(srcdir) references when running outside source
+
+2000-11-02 22:15 nba
+
+ - snmptrapd.c: fix the format string for format_trap
+
+2000-11-02 22:14 nba
+
+ - Makefile.in: remove some duplicates from file lists
+
+2000-11-02 22:12 nba
+
+ Document the -OX output option
+
+2000-11-02 22:11 nba
+
+ Document the sysservices token
+
+2000-11-02 16:17 hardaker
+
+ - (agent/mibgroup/ucd_snmp.h): add ucd-snmp/proxy.
+
+2000-11-02 16:16 hardaker
+
+ - (agent/mibgroup/versiontag): change cvs archive site and package name.
+
+2000-11-02 13:23 hardaker
+
+ - (smux.c): Patch 102239 from dougwarz to fix a previously bad smux.c patch.
+
+2000-11-01 16:36 hardaker
+
+ - (version.h bug-report sedscript.in): version tag ( 4.2.pre1 )
+
+2000-11-01 16:14 hardaker
+
+ - (T120proxyget, T121proxyset, T122proxysetfail): proxy test suite.
+
+2000-11-01 16:08 hardaker
+
+ - (agent/mibgroup/ucd-snmp/proxy.c, agent/mibgroup/ucd-snmp/proxy.h):
+ - minimal SET support for the proxy code.
+
+2000-11-01 10:22 hardaker
+
+ - (T112agentxsetfail): test for agentx sets that should fail properly.
+
+2000-10-31 14:30 nba
+
+ - tcpTable.c: remove an unnescessary #include
+
+2000-10-31 14:28 nba
+
+ - smux.c: fix wrong variable length
+
+2000-10-31 14:25 nba
+
+ - protocol.c: fix some suspicious looking code
+
+2000-10-31 14:21 nba
+
+ - man/snmpd.conf: fix a typo
+
+2000-10-31 12:41 nba
+
+ - mib.c: add -OX output format, for just another way of printing indices
+
+2000-10-31 12:27 nba
+
+ - interface.c: add "interface" config for unguessable interface type/speed
+
+2000-10-31 12:25 nba
+
+ - apps/*: make sure we report any errindex/errcode in the response
+
+2000-10-31 12:04 nba
+
+ - protocol.c: clean up unused variables.
+
+2000-10-31 10:13 hardaker
+
+ - (smux.c): patch #1 from bug #117273 applied to fix smux socket problems.
+
+2000-10-31 09:24 hardaker
+
+ - (SNMP.xs): print counter64's as unsigned.
+
+2000-10-31 07:54 hardaker
+
+ - (agent_trap.c, agent_trap.h, subagent.c, snmpNotifyTable.c,
+ snmpNotifyTable.h): Patch from Dave:
+ - fix notifications from agentx subagents.
+
+2000-10-30 22:03 hardaker
+
+ - (smux.c): fix bug #119786: make smux reuse socket address.
+
+2000-10-30 21:42 hardaker
+
+ - (eval_tools.sh, tests/T110agentxget, tests/T111agentxset):
+ - fix bug #382
+ - fix agentx non-root tests to use -x /tmp/blah/agentx_socket.
+
+2000-10-30 13:45 hardaker
+
+ - (snmpd.1.def): fix a typo pointed out by Chris Pepper.
+
+2000-10-30 11:46 hardaker
+
+ - (tests/T111agentxset): test script for AgentX set support.
+
+2000-10-30 11:43 hardaker
+
+ - (tests/T110agentxget): header changed to include the word GET.
+
+2000-10-30 11:13 nba
+
+ - ucd-snmp/vmstat_*, memory_freebsd2.c, dlmod.c: Make ssRawCpu objects Counters,
+ and add support for *BSD (including OpenBSD)
+
+2000-10-30 11:07 nba
+
+ - Clean up unused variables.
+
+2000-10-30 11:04 hardaker
+
+ - (testing/tests/T101agentx, testing/tests/T110agentxget):
+ - renamed the agentx test script.
+
+2000-10-30 11:03 hardaker
+
+ - (testing/eval_tools.sh): don't add -c CONFIGFILE if it doesn't exist.
+
+2000-10-30 10:39 hardaker
+
+ - (agent/snmpd.c): error when parsing -X for non-agentx builds.
+
+2000-10-27 11:29 hardaker
+
+ - (apps/snmptrapd.c): add -o flag to log to a particular file.
+
+2000-10-27 10:41 hardaker
+
+ - (snmplib/snmp_api.c): use mkstemp if available.
+
+2000-10-27 10:40 hardaker
+
+ - (config.h.in, configure, configure.in): Search for mkstemp().
+
+2000-10-27 10:08 hardaker
+
+ - (FAQ): update linux kernel list to include 2.2.
+
+2000-10-26 17:51 hardaker
+
+ - (eval_tools.sh): make SKIPIFNOT check the mib module list too.
+
+2000-10-26 17:48 hardaker
+
+ - (tests/T101agentx): AgentX subagent test for simple get retrieval.
+
+2000-10-25 17:44 hardaker
+
+ - (snmpd.c): Add -X option to snmpd to run as a subagent.
+
+2000-10-25 17:06 hardaker
+
+ - (read_config.c): fix for cases whene debugging is always off.
+
+2000-10-17 15:30 hardaker
+
+ - (config.h.in): autoheader run
+
+2000-10-16 03:13 daves
+
+ - (agentx/master.c): Specify the length of the (pseudo-)answer to a request.
+ This allows it to be cached correctly for multi-pass SET handling.
+
+2000-10-16 03:11 daves
+
+ - (agentx/subagent.c): Don't overwrite saved mode information
+ This should help with (some of) the SET handling problems.
+
+2000-10-16 01:56 daves
+
+ - (agentx/master_request.c): Don't free callback data structure.
+ This holds information that needs to persist across multi-pass requests.
+ I realise that this introduces a memory leak, but this isn't the
+ correct place to handle this.
+
+2000-10-12 14:52 hardaker
+
+ - (snmpd.c): add -I to the help output.
+
+2000-10-12 14:24 hardaker
+
+ - (agent/dlmods/*): remove obsolete versions
+
+2000-10-12 14:08 hardaker
+
+ - (configure): update.
+
+2000-10-12 14:01 hardaker
+
+ - (acconfig.h, config.h.in, configure.in): Patch from Matt Braithwaite:
+ - udp configuration changes to check for misc structure definitions.
+
+2000-10-12 13:48 hardaker
+
+ - (TUNNEL-MIB.txt): TUNNEL-MIB definition.
+
+2000-10-12 13:48 hardaker
+
+ - (tunnel.h): config_add_mib(TUNNEL-MIB).
+
+2000-10-12 13:47 hardaker
+
+ - (tunnel.h, tunnel.c, tunnel.h): Patch from Frank Strauss:
+ - implement the TUNNEL-MIB.
+
+2000-10-10 14:33 mslifcak
+
+ Fix unlink_tree for "top level" tree nodes.
+
+2000-10-10 11:02 hardaker
+
+ - (Makefile.in): reverse library link ordering again...
+
+2000-10-10 09:03 mslifcak
+
+ Remove relative path to include system.h.
+
+2000-10-10 06:53 mslifcak
+
+ Remove unneeded decl of vsnprintf without stdarg/varargs decl of va_list.
+
+2000-10-10 05:15 mslifcak
+
+ Apply patch for DEC Alpha EV6, supplied by Shumon Huque<shuque@isc.upenn.edu>
+
+2000-10-09 17:06 mslifcak
+
+ patch to fix leading zero error introduced by changes for shutdown_mib.
+
+2000-10-09 15:51 hardaker
+
+ - (dlmod.c): minor debugging output additions.
+
+2000-10-09 15:51 hardaker
+
+ - (Makefile.in): move auto_nlist to libucdmibs.
+
+2000-10-09 11:43 hardaker
+
+ - (FAQ, README): add new mirror.
+
+2000-10-09 10:26 mslifcak
+
+ Move config- and store-related cleanup from shutdown_mib to snmp_shutdown.
+
+2000-10-09 02:36 daves
+
+ - (mibII/interfaces.c): Qualify an individual interface type test symbol
+ (Qn: should any/all of the others be qualified as well?)
+
+2000-10-06 08:56 mslifcak
+
+ Support for shutdown_mib - clearing the MIB trees and configured registrations.
+
+2000-10-06 05:33 mslifcak
+
+ Plug memory leak for ucd-supplied setenv on Win32 platform.
+
+2000-10-06 04:58 mslifcak
+
+ Remove unused variables.
+
+2000-10-05 23:45 nba
+
+ - mib.c: fix silly bug in new oid parser, when leaving the tree and going
+ into sub-ids we know nothing about
+
+2000-10-05 16:03 hardaker
+
+ - (Makefile.in): Patch from Harrie Hazewinkel:
+ - fix library dependency order.
+
+2000-10-04 17:59 hardaker
+
+ - (Makefile.in): install "extending" snmpconf file.
+
+2000-10-04 17:58 hardaker
+
+ - (extending): add snmpconf support for extending the agent (pass, exec, ...)
+
+2000-10-04 17:58 hardaker
+
+ - (monitor): misc updates and add "file" watching.
+
+2000-10-04 17:57 hardaker
+
+ - (acl): don't specify line specifications for default snmpconf usage.
+
+2000-10-04 14:50 nba
+
+ - FAQ: fix a confusion between "omit" and "include"
+
+2000-10-04 13:25 hardaker
+
+ - (pass_persist.c): opaques in pass_persist.
+
+2000-10-04 10:35 hardaker
+
+ - (pass.c): support opaque return types.
+
+2000-10-04 07:15 mslifcak
+
+ Fix parsing problem for -Pc option; reported by Christian Mautner.
+
+2000-10-04 07:02 mslifcak
+
+ qualify new i/f types.
+
+2000-10-04 06:52 mslifcak
+
+ qualify symbols for new i/f types.
+
+2000-10-04 06:51 mslifcak
+
+ Terminate list to compile (add a comma).
+
+2000-10-04 00:18 nba
+
+ - snmptable.c: index columnt (-Ci) width not properly computed when using
+ GETBULK
+
+2000-10-03 18:19 hardaker
+
+ - (agent_registry.c, agent_registry.h, snmpd.c): Patch from John Naylon:
+ - add a passback argument to register_readfd() callbacks.
+
+2000-10-03 18:17 hardaker
+
+ - (Makefile.in): Patch from Harrie Hazewinkel:
+ - move auto_nlist.o/lo to libucdagent since some mib-modules need it.
+
+2000-10-03 18:07 hardaker
+
+ - (smux.c): Patch from Jochen Friedrich:
+ - fix getnext requests to subagents.
+
+2000-10-03 17:26 hardaker
+
+ - (mibJJ/interfaces.c): Patch from Frank Strauss:
+ - better iftype guessing.
+
+2000-10-03 17:24 hardaker
+
+ - (interfaces.c): Patch from Frank Strauss:
+ - better iftype guessing.
+
+2000-10-03 16:52 hardaker
+
+ - (smux.c): Patch from Doug Warzecha:
+ - fix oid parsing in traps.
+
+2000-10-03 16:23 hardaker
+
+ - (example.c, example.h): example of coding a v2 trap from someone who
+ I have very sadly forgotten. I've been looking for that message for
+ a while to properly attribute this patch. Sigh.
+
+2000-10-03 16:21 hardaker
+
+ - (snmp_agent.c): Patch from Douglas Warzecha:
+ - snmpd returns wrong error index on SNMPv1 request (BUG#375).
+
+2000-10-03 09:12 mslifcak
+
+ Fix null deref of ss->community, reported by Jim Pickering.
+
+2000-10-03 08:03 mslifcak
+
+ Casting to fix problems building with aCC
+ Thanks to Markku Laukkanen <pky@moremagic.com>
+
+2000-10-03 05:59 mslifcak
+
+ Remove chdir to undo fix for (BUG#298)
+
+2000-10-02 21:41 nba
+
+ - mib.c: Escape " and \ in text strings.
+
+2000-10-02 21:39 nba
+
+ - snmp_logging.c: #include <netinet/in.h>
+
+2000-10-02 21:38 nba
+
+ - Makefile.in: fix a missing $(srcdir) during make install of mib2c
+ configuration files
+
+2000-10-02 21:37 nba
+
+ - snmpset.c: Do a exit(2) for failure in setting the variable.
+
+2000-10-02 21:36 nba
+
+ - hr_swrun.c: add a safeguard for very long argument lists.
+
+2000-10-02 21:34 nba
+
+ - hr_disk.c: Add a name pattern that matches x86 IDE disks for Solaris.
+
+2000-10-02 21:33 nba
+
+ - kernel_sunos5.c: make the buffer for SIOCGIFCONF dynamic.
+
+2000-10-02 11:41 hardaker
+
+ - (Makefile.in): install snmpusm.h.
+
+2000-10-02 10:48 hardaker
+
+ - (snmpconf):
+ - new options for installing created files.
+ - more comments in the code.
+ - allow reading a .conf directly to writing for auto-commenting .conf files.
+ - misc.
+
+2000-10-02 10:47 hardaker
+
+ - (agent/mibgroup/Makefile.in, agent/Makefile.in): make depend-less.
+
+2000-10-02 09:35 hardaker
+
+ - (snmp_agent.c): protect against 0 byte statP mallocs.
+
+2000-10-02 09:14 hardaker
+
+ - (interfaces.c): Patch from Ted Rule:
+ - fix interfaces.c for variable length number formatting in /proc/net/dev.
+
+2000-10-01 16:40 mslifcak
+
+ Per Niels recommendation, chdir to PERSISTENT_DIRECTORY (re: bug #298)
+
+2000-09-30 08:57 mslifcak
+
+ Fix DEBUGMSGTL not found error for builds without dlmod support.
+ Thanks to simon@zid.tuwein.ac.at
+
+2000-09-30 08:50 mslifcak
+
+ Fix some kernel symbols - thanks to simon@zid.tuwien.ac.at
+
+2000-09-29 14:35 hardaker
+
+ - (*/Makefile.in): make depend + .o -> .lo fixes.
+
+2000-09-29 14:27 hardaker
+
+ - (makefileindepend.pl): skip empty depend lines.
+
+2000-09-29 14:09 hardaker
+
+ - (snmpconf): drop duplicate lines from read in snmpd.conf files.
+
+2000-09-29 13:46 hardaker
+
+ - (snmpconf): sort unknown directives by filetype (whoops).
+
+2000-09-29 13:42 hardaker
+
+ - (monitor): minor wording adjustments.
+
+2000-09-29 13:42 hardaker
+
+ - (snmpconf): print more information/comments to the screen.
+
+2000-09-29 11:31 hardaker
+
+ - (var_struct.h): increase registration name length to 32 from 16 (Bug #172)
+
+2000-09-29 11:12 hardaker
+
+ - (snmp_api.c): incorrect val length passed to parse_unsigned_int (Bug #339).
+
+2000-09-29 11:01 hardaker
+
+ - (snmp_api.c): fix Bug#353 for hostnames that look like "5w".
+ - don't interprete them as an ip-port.
+
+2000-09-29 10:39 hardaker
+
+ - (snmp_alarm.c): Patch from jbpn@cambridgebroadband.com:
+ - There is a peculiarity in the snmp_alarm_unregister function in
+ snmplib/snmp_alarm.c which can cause a segmentation fault. (Bug #367)
+
+2000-09-29 10:34 hardaker
+
+ - (snmpTargetParamsEntry.c): Patch from John Naylon:
+ - fix use of NULL timestamp pointer in new row creation (Bug #346)
+
+2000-09-28 14:38 nba
+
+ - mib_api.3: add a few functions to the header
+
+2000-09-28 14:14 nba
+
+ - snmptrap.c: remove an extraneous snmp_free_pdu
+
+2000-09-28 14:13 nba
+
+ - man/: add man entries for many library functions (pointing to snmp_api.3)
+
+2000-09-28 11:09 mslifcak
+
+ remove second copy of sys/socket.h
+
+2000-09-28 11:08 mslifcak
+
+ For building on Ultrix V4.x
+
+2000-09-27 12:59 hardaker
+
+ - (dlmod.h): add the UCD-DLMOD-MIB to the default load list.
+
+2000-09-27 12:55 hardaker
+
+ - (config.h.in, configure, configure.in, ucd_snmp.h, dlmod.c):
+ - include ucd-snmp/dlmod by default.
+ - build code only if dlopen is found.
+
+2000-09-27 08:31 hardaker
+
+ - (auto_nlist.c): Patch from Harrie Hazewinkel:
+ - don't print kernel based warning messages when -r, etc, is specified.
+
+2000-09-26 16:07 hardaker
+
+ - (displaytable.pm): minor bug fixes.
+
+2000-09-26 14:21 hardaker
+
+ - (displaytable.pm, manager.pm):
+ - displatable supports -mark/-onmarked.
+ - user's oncall schedule is modifiable via the web.
+
+2000-09-26 13:17 mslifcak
+
+ For Win32 API: Declare strtoul, vsnprintf; Enable reverse BER encoding.
+
+2000-09-26 13:15 mslifcak
+
+ Include system.h (vsnprintf decl)
+
+2000-09-26 13:14 mslifcak
+
+ Fix unsigned comparison.
+
+2000-09-26 13:14 mslifcak
+
+ Fix unsigned comparisons.
+
+2000-09-26 13:13 mslifcak
+
+ Fix signed comparison; Remove unused var.
+
+2000-09-26 13:12 mslifcak
+
+ Include getopt.h (optarg decl); Remove unused var.
+
+2000-09-26 13:11 mslifcak
+
+ Match Initialise_Table args 3,4 declarations with definitions.
+
+2000-09-26 12:58 hardaker
+
+ - (interfaces.c): make the adminstatus RONLY.
+
+2000-09-26 10:21 hardaker
+
+ - (mib2c): chomp($1) is illegal.
+
+2000-09-26 03:04 mslifcak
+
+ Explicitly build path to CACHEFILE, as not all C compilers support "##".
+
+2000-09-25 17:49 hardaker
+
+ - (displaytable.pm): Wes actually documented something? you must be kidding!
+
+2000-09-25 16:56 mslifcak
+
+ chdir just before sending coldstart trap, to allow for paths to be
+ resolved.
+
+2000-09-25 15:08 hardaker
+
+ - (displaytable.pm): minor graphing changes
+
+2000-09-25 09:35 mslifcak
+
+ case insensitive token search (use strcasecmp).
+
+2000-09-22 06:03 nba
+
+ -mibs/: MIB updates
+
+2000-09-22 05:55 nba
+
+ - mibs/: MIB updates
+
+2000-09-22 05:52 nba
+
+ - snmp_api.c: support setting of BITS variables
+
+2000-09-22 05:50 nba
+
+ - snmpstatus.c: show error object
+
+2000-09-22 04:29 nba
+
+ - snmpusm.c: issue error message with object
+
+2000-09-22 04:28 nba
+
+ - system.h: provide prototypes for strtol, strtoul, snprintf, vsnprintf
+
+2000-09-22 04:27 nba
+
+ - vacm_vars.c: protect against overrun of strings
+
+2000-09-21 16:17 nba
+
+ - apps/: display failed object when one is identified by pdu->errindex
+
+2000-09-21 15:59 hardaker
+
+ - (Makefile.in, snmpdf.1): document the snmpdf command.
+
+2000-09-21 15:50 nba
+
+ - snmptable: use GETBULK to collect data when protocol allows it. Add
+ -CB options to fall back to GETNEXT.
+
+2000-09-21 15:38 nba
+
+ - mib.c: rewrite index handling in object ids, to allow symbolic enums.
+ Add Daves suggested -Ov output. Also enhace -Td output to
+ destinguish OBJECT-TYPE from TRAP-TYPE, MODULE-IDENTITY etc.
+
+2000-09-21 15:31 hardaker
+
+ - (snmpdf.c): use the UCD-SNMP-MIB's dskTable if the
+ HOST-RESOURCES-MIB is empty or if -Cu is specified on the command line.
+
+2000-09-21 15:28 nba
+
+ - parse.c: add ability to collect VARIABLES/OBJECTS for TRAP-TYPE
+ and NOTIFICATION-TYPE. Ignore files that does not have DEFINITIONS
+ as their second token. Enhance -Td output accordingly.
+
+2000-09-21 15:22 nba
+
+ - snmplib: add snprintf, strtol, strtoul for systems that don't have them
+
+2000-09-21 15:10 hardaker
+
+ - (mib.h): add fake struct definition for enums
+
+2000-09-21 14:16 nba
+
+ file strtoul.c was initially added on branch V4-1-1-patches.
+
+2000-09-21 14:16 nba
+
+ file strtol.c was initially added on branch V4-1-1-patches.
+
+2000-09-21 14:16 nba
+
+ file snprintf.c was initially added on branch V4-1-1-patches.
+
+2000-09-21 06:16 hardaker
+
+ - (mib.c, mib.h): make sprint* non-static (bug #132).
+
+2000-09-21 00:25 hardaker
+
+ - (snmp_alarm.c): Patch from John Naylon:
+ - fix bug #360 where a client might remove a alarm registration
+ during a call to the alarm function and invalidate the pointer
+ being used by the calling function.
+
+2000-09-21 00:22 hardaker
+
+ - (configure, configure.in): --disable-shared by default in cvs checkouts.
+
+2000-09-20 17:31 hardaker
+
+ - (snmpconf): space indent tokens if # prepended.
+
+2000-09-20 17:30 hardaker
+
+ - (snmpTargetAddrEntry.c, snmpTargetParamsEntry.c): null internal help lines.
+
+2000-09-20 17:29 hardaker
+
+ - (Makefile.in, monitor): disk, proc, and load checks.
+
+2000-09-20 17:28 hardaker
+
+ - (authopts): fix valid answers for auth and priv types.
+
+2000-09-20 17:27 hardaker
+
+ - (vacm_vars.c, usmUser.c, snmpv3.c): NULL out help messages for .conf
+ tokens that are either internal or no longer the standard way of
+ doing things.
+
+2000-09-20 17:26 hardaker
+
+ - (configure, configure.in): export SNMPCONFPATH to Makefiles
+
+2000-09-20 17:25 hardaker
+
+ - (EXAMPLE.conf.def): minor correction of table name. More errors exist.
+
+2000-09-20 16:46 hardaker
+
+ - (Makefile.in, debugging, mibs, output): more snmp.conf snmpconf config files.
+
+2000-09-20 15:17 hardaker
+
+ - (Makefile.in, authopts): snmp.conf support for basic authentication options.
+
+2000-09-20 14:55 hardaker
+
+ - (snmpconf):
+ - don't force reading of /usr/local/share/snmpd.conf.
+ - don't print unknown directive comment headers if there aren't any.
+
+2000-09-20 14:45 hardaker
+
+ - (snmpconf): space things out on the screen a bit better.
+
+2000-09-20 14:44 hardaker
+
+ - (trapsinks): add port number option to trapsink directives.
+
+2000-09-20 14:35 hardaker
+
+ - (Makefile.in, snmpconf): install snmpconf and its various support files.
+
+2000-09-20 14:20 hardaker
+
+ - (snmp_api.c, snmp_api.h): do reverse v3 header encoding with a static buffer.
+
+2000-09-20 11:37 hardaker
+
+ - (snmpconf): misc updates and improvements.
+
+2000-09-20 08:54 hardaker
+
+ - (snmp_api.c): Fix dynamic array problem pointed out by Jochen Kmietsch.
+
+2000-09-20 02:05 daves
+
+ - (agentx/protocol.c): Don't include context strings on PDUs that shouldn't have them
+ (Thanks to Pedro Pereira for identifying this)
+
+2000-09-19 17:07 hardaker
+
+ - (acl, system, trapsinks): initial snmpconf description files.
+
+2000-09-19 17:06 hardaker
+
+ - (snmpconf): read older configuration files in and merge with new results.
+
+2000-09-19 14:40 hardaker
+
+ - (snmp_api.c): print pdu type on debugging dump output.
+
+2000-09-19 14:15 hardaker
+
+ - (asn1.c, snmp.c): reverse encoding support for specialized opaque
+ datatypes (float, double, etc).
+
+2000-09-19 14:15 hardaker
+
+ - (aclocal.m4): document macros a bit more for submission to the
+ autoconf macro library.
+
+2000-09-19 08:30 mslifcak
+
+ Fix bug #295 reported by John Whitney johnw@aiinet.com
+
+2000-09-18 14:59 hardaker
+
+ - (snmp_vars.h, snmpd.h): Patch from Harrie Hazewinkel:
+ - move getStatPtr definition to proper .h file.
+
+2000-09-18 14:55 mslifcak
+
+ Fix bug #347 reported by das_deniz@yahoo.com: make sbin install dir
+
+2000-09-14 09:05 hardaker
+
+ - (agent_read_config.c, snmpd.conf.5.def): Patch from Harrie Hazewinkel:
+ - add a port specification snmpd.conf token.
+
+2000-09-14 08:52 hardaker
+
+ - (agent_trap.c): ignore output of gethostbyname for trap session adding.
+
+2000-09-13 15:06 hardaker
+
+ - (snmpconf): new utility to generate .conf files by prompting the
+ user with questions.
+
+2000-09-08 13:07 hardaker
+
+ - (proxy.c): Patch from Scott Lipcon:
+ - fix proxy support for null length strings.
+
+2000-09-07 10:12 hardaker
+
+ - (config.h.in, configure, configure.in):
+ - fix openssl checks.
+ - run autoheader.
+
+2000-09-05 13:35 mslifcak
+
+ Minor touchups to build on Win32 platform.
+
+2000-09-05 13:34 mslifcak
+
+ Welcome the newest ucd-snmp applications to the Win32 builds.
+
+2000-09-04 15:19 nba
+
+ - read_config.c: restart errorcount when reloading config
+
+2000-09-04 15:12 nba
+
+ - snmpnetstat.1: align man page with program
+
+2000-09-04 15:10 nba
+
+ - ipAddr.c: remove a bad ntohl for OpenBSD
+
+2000-09-04 15:09 nba
+
+ - mibincl.h, {tc,ud}p{,Table}.c: ensure just one include of socket.h
+ to make unprotected include file in Ultrix happy
+
+2000-09-04 15:05 nba
+
+ - configure.in: make --without-libwrap work
+
+2000-09-01 15:14 hardaker
+
+ - (vmstat_solaris2.c, vmstat_solaris2.h): Patch from Jochen Kmietsch:
+ - updated code.
+
+2000-09-01 11:54 hardaker
+
+ - (snmptrapd.c): Scott Lipcon noted that snmptrapd doesn't support -T.
+
+2000-08-30 13:28 nba
+
+ - parse.c: fix loop in syntax error in DEFVAL clause. Also fix reading
+ of .index file with filenames containing blanks.
+
+2000-08-28 13:43 marz
+
+ minor syntax glitch in POD docs
+
+2000-08-24 01:55 daves
+
+ - (apps/snmptable.c): Fix bug with displaying header-less indexed tables
+ (Thanks to Ernie Miller)
+
+2000-08-19 11:29 mslifcak
+
+ Apply patch from <Christoph.Mammitzsch@tu-clausthal.de>
+ to fix sign in asn_rbuild_unsigned_int .
+
+2000-08-18 04:18 mslifcak
+
+ restore previous version; openbsd, solaris, linux build ok.
+
+2000-08-18 03:44 mslifcak
+
+ remove unused printf argument passed to snmp_log.
+
+2000-08-18 03:20 mslifcak
+
+ fix bug 253 with patch supplied by Jeffrey Honig <jch@bsdi.com>
+
+2000-08-18 02:52 mslifcak
+
+ fix bug 318 - test 9 and 10 explicitly create the test user.
+
+2000-08-17 13:42 mslifcak
+
+ The battle to trim newlines correctly continues...reduce length by one.
+
+2000-08-16 15:04 hardaker
+
+ - (snmp_api.c, snmpusm.c): fix various encryption/decryption problems.
+
+2000-08-16 15:03 hardaker
+
+ - (scapi.c): fix padding size in encryption.
+
+2000-08-16 14:48 hardaker
+
+ - (scapi.c): set plaintext length at the end of sc_decrypt.
+
+2000-08-15 05:08 mslifcak
+
+ Fix bug 284 with a short explanation about snmp.conf.
+
+2000-08-15 03:00 mslifcak
+
+ Fix bug 283 - umask 022, make install. Thanks to csaba.toth@szk.bke.hu
+
+2000-08-15 00:09 nba
+
+ - snmptest.c: overhaul input_variable, kill newline
+
+2000-08-14 22:05 nba
+
+ - aclocal.m4, configure.in: fixes for configure --silent
+
+2000-08-14 17:27 hardaker
+
+ - (Makefile.top, configure, configure.in):
+ - --enable-silent-libtool to make Niels smile.
+
+2000-08-14 17:17 hardaker
+
+ - (snmpv3.c, snmpv3.h): implement a new (default) engineID type based
+ on a random number, and a timestamp.
+ - I think it won't invalidate existing installations (heh).
+
+2000-08-14 16:47 hardaker
+
+ - (read_config.c):
+ - if -Dread_config, then print even no-help tokens and a * for PREMIB ones.
+
+2000-08-14 14:51 nba
+
+ - (many): portability fixes for OpenBSD 2.6, FreeBSD 4.1, Ultrix 4.5
+
+2000-08-14 11:33 hardaker
+
+ - (keytools.c): Patch from Yigal Hochberg:
+ - remove unused context variables.
+
+2000-08-14 11:29 hardaker
+
+ - (scapi.c): Patch from Yigal Hochberg:
+ - remove duplicate keylength check.
+
+2000-08-11 13:09 hardaker
+
+ - (snmp_api.c): optimize reverse encoding of varbindlists.
+
+2000-08-11 08:55 hardaker
+
+ - (README.mib2c): Patch from Jan Alfred Sandven:
+ - typos.
+
+2000-08-11 06:05 nba
+
+ - apps/*: snmpapp -V should not give the usage message too.
+
+2000-08-11 00:44 nba
+
+ - snmptrapd.8: fix typo. Thanks to G. Allen Morris III <gam3@acm.org>
+
+2000-08-10 23:23 nba
+
+ - parse.c: predefine ObjectSyntax, ApplicationSyntax, SimpleSyntax and
+ ObjectName
+
+2000-08-10 16:20 hardaker
+
+ - (Makefile.in, mib2c):
+ - make mib2c look in $(snmplibdir) for .conf files.
+ - install mib2c and .conf files.
+
+2000-08-10 14:33 hardaker
+
+ - (default_store.h, snmp_api.c): dynamically decide to reverse/forward encode.
+
+2000-08-10 14:31 hardaker
+
+ - (extensible.c): fix CR termination.
+
+2000-08-10 14:25 hardaker
+
+ - (acconfig.h, config.h.in): define reverse encoding on by default.
+
+2000-08-10 13:02 mslifcak
+
+ fix bug 252 for configure and sys/socket.h on BSD/OS 4.2
+
+2000-08-10 09:07 hardaker
+
+ - (asn1.c, asn1.h, snmp.c, snmp.h, snmp_api.c, snmp_api.h, snmpusm.c,
+ snmpusm.h, snmpv3.c):
+ - implement reverse encoded messages.
+ - TODO: clean up, run-time determination of weather to use it or not.
+
+2000-08-09 15:40 mslifcak
+
+ Fix bug 331 with patch in part provided by John Naylon <jbpn@cambridgebroadband.com>
+
+2000-08-09 15:27 mslifcak
+
+ no // comment, in deference to non-ANSI-C compilers.
+
+2000-08-09 07:21 nba
+
+ - hr_swrun.c: fix the RunPath for swapped out Linux process
+
+2000-08-09 07:21 nba
+
+ - hr_print.c: fix a debug token
+
+2000-08-09 04:44 nba
+
+ - main.c: fix parsing of -v
+
+2000-08-09 01:13 daves
+
+ - (mibJJ/ipRoute.h): Omit route_write for now
+
+2000-08-09 00:58 daves
+
+ - (mibJJ/*): Experimental re-write of mibII
+ (Pilot error when trying to commit the changes earlier - sorry!)
+
+2000-08-08 10:06 hardaker
+
+ - (extensible.c): strip newlines.
+
+2000-08-08 08:51 hardaker
+
+ - (snmp_parse_args.c): Patch from Scott Lipcon: start optind at 1 not 0.
+ -
+
+2000-08-08 06:36 mslifcak
+
+ Fix bug #295 (free *secStateRef before allocating another one).
+
+2000-08-08 06:05 mslifcak
+
+ fix bug #298 reported and patch supplied by Conrad Link <clink@ml.com>
+
+2000-08-08 04:59 nba
+
+ - snmp_api.c: fix a busy loop when alarm queue is active without any
+ outstanding requests
+
+2000-08-08 04:47 nba
+
+ - snmpset.1: cannot set counters
+
+2000-08-08 04:42 mslifcak
+
+ Fixed (BUG#332) using patch submitted by John Naylon <jbpn@cambridgebroadband.com>
+ Also consolidated comments about the four send PDU functions.
+
+2000-08-07 06:59 mslifcak
+
+ Fix leak in reportable errors found by John Naylon <jbpn@cambridgebroadband.com>
+
+2000-08-07 05:48 nba
+
+ file add_module_replacement.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 05:48 nba
+
+ file read_objid.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file snmp_set_save_descriptions.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file snmp_set_mib_warnings.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file read_module_node.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file read_module.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file read_all_mibs.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file read_mib.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file print_variable.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file print_value.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file print_objid.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file print_description.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file print_mib.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file init_mib_internals.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file init_mib.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file get_module_node.3 was initially added on branch V4-1-1-patches.
+
+2000-08-07 02:49 nba
+
+ file add_mibdir.3 was initially added on branch V4-1-1-patches.
+
+2000-08-04 17:13 hardaker
+
+ - (configure, configure.in): add in the notification group by default.
+
+2000-08-04 17:08 hardaker
+
+ - (notification.h): notification mib wrapper.
+
+2000-08-04 17:06 hardaker
+
+ - (snmp_parse_args.c):
+ - initialize optind before calling getopt.
+ - debugging output.
+
+2000-08-04 16:56 hardaker
+
+ - (proxy.c): properly set the first (unused) argument to snmp_parse_args().
+
+2000-08-04 16:53 hardaker
+
+ - (agent_trap.c, snmpNotifyTable.h, snmpTargetAddrEntry.c,
+ snmpTargetAddrEntry.h, snmpTargetParamsEntry.c,
+ snmpTargetParamsEntry.h, target.c):
+ - if using the snmpNotificationTable, insert non-v1 trap sinks into it.
+
+2000-08-04 05:26 daves
+
+ - (mibgroup/mibJJ.h mibgroup/mibJJ/*): Experimental re-write of mibII
+
+2000-08-04 05:21 daves
+
+ - (mibgroup/util_funcs.[ch]): New 'cached table' routines
+
+2000-08-03 08:37 mslifcak
+
+ Fix bug #325 identified by John Naylon <jbpn@cambridgebroadband.com>
+
+2000-08-03 01:24 nba
+
+ file IP-FORWARD-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-08-03 01:24 nba
+
+ file INET-ADDRESS-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-08-03 01:24 nba
+
+ file IF-INVERTED-STACK-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-08-03 01:24 nba
+
+ file HCNUM-TC.txt was initially added on branch V4-1-1-patches.
+
+2000-08-02 07:06 mslifcak
+
+ Silent running grep results.
+
+2000-08-02 06:10 mslifcak
+
+ Fix BUG #291 : allow "255.255.255.255" for text input to ASN_IPADDRESS
+
+2000-08-02 05:20 mslifcak
+
+ Fix (BUG#323) : free PDU when snmp_send fails.
+
+2000-08-02 05:06 mslifcak
+
+ Add -p option once to snmpd args.
+ Find MIBDIRS in source tree.
+ Fix condition to set PATH.
+
+2000-08-01 23:30 nba
+
+ - ip.c: One more #if solaris
+
+2000-08-01 23:19 nba
+
+ - ip.c: A bad #if ... the proper define to test for Solaris is solaris2
+
+2000-08-01 16:40 hardaker
+
+ - (snmp_parse_args.c): remove unused usage() typedef.
+
+2000-08-01 16:40 hardaker
+
+ - (proxy.c, proxy.h): -Wall warning fixes.
+
+2000-08-01 16:39 hardaker
+
+ - (FAQ): mention newer versions of Solaris.
+
+2000-08-01 16:37 hardaker
+
+ - (TESTCONF.sh, TESTCONF.sh.in): revert to non-configed TESTCONF.
+
+2000-08-01 16:31 hardaker
+
+ - (Makefile.top): make un-quiet.
+
+2000-08-01 10:23 hardaker
+
+ - (snmp-ucd.sh): fix bug #297 (don't kill grep and init script invocations).
+
+2000-08-01 04:45 mslifcak
+
+ Fix bug found by Yigal Hochberg <hochberg@dmhsoftware.com>
+
+2000-08-01 03:30 daves
+
+ - (agent/snmp_vars.c): Fix building of complete OID
+ (work with the name originally registered,
+ not any subsequent division boundaries)
+
+2000-07-31 20:09 mslifcak
+
+ Remove duplicate fopen from shell_command.
+
+2000-07-31 18:58 mslifcak
+
+ (TESTCONF.sh.in) - set MIBDIRS to sibling of the testing directory.
+ (RUNTESTS) - allow binaries to be in the "-D bindir" directory.
+
+2000-07-31 15:25 mslifcak
+
+ Dont adjust PATH if SNMP_PATH is set.
+ Dont add port spec to SNMP_FLAGS if one is already specified.
+
+2000-07-31 13:49 mslifcak
+
+ Remove test directories for skipped tests.
+ Keep test directories for failed tests.
+ Keep test directories for passed tests when "RUNTESTS -s" is specified.
+ Search config.h at the root of the build tree.
+
+2000-07-31 11:32 mslifcak
+
+ Merge from automake-1.4: Add for Rhapsody, OpenStep, Cray-T3, SX-4, SX-5
+
+2000-07-31 11:31 mslifcak
+
+ Merge from automake-1.4: Add for Rhapsody, OpenStep
+
+2000-07-30 17:38 hardaker
+
+ - (snmpNotifyTable.c, snmpNotifyTable.h, target.c, target.h):
+ - implement untested filtering function callback for target searches.
+ - delete unused function.
+ - misc warning fixes.
+
+2000-07-30 17:07 hardaker
+
+ - (snmpNotifyFilterProfileTable.c, snmpNotifyFilterProfileTable.h,
+ snmpNotifyFilterTable.c, snmpNotifyFilterTable.h):
+ - more notification table implementations for filtering.
+ - Framework complete, functionality is not.
+
+2000-07-30 17:05 hardaker
+
+ - (header_complex.c, header_complex.h):
+ - handle implied objects.
+ - implement header_complex_get() for simple data retrievals.
+
+2000-07-28 06:15 mslifcak
+
+ Cleanup include headers to fix bug #307. Thanks to sandven@research.att.com.
+
+2000-07-27 15:19 hardaker
+
+ - (configure, configure.in): Patch from Vinay Mohta:
+ - access_hosts() requires an argument so fake one.
+
+2000-07-27 15:00 hardaker
+
+ - (interfaces.c): Patch from Mattias Barthel:
+ - fix for interfaces without an attached IP address.
+
+2000-07-27 14:55 hardaker
+
+ - (vmstat_solaris2.c, vmstat_solaris2.h): Patch from Jochen Kmietsch:
+ - support raw values.
+
+2000-07-27 08:25 hardaker
+
+ - (snmpusm.c): print errors to stderr.
+
+2000-07-27 06:20 nba
+
+ - parse.c: Fix a missing initization when one MIB holds MODULE-COMPLIANCE
+ for another
+
+2000-07-27 01:35 nba
+
+ - snmp_api.c: Fix pdu->community being overwritten with session->community
+ Thanks to Dana P. Cook <dcook@cabletron.com>
+
+2000-07-26 22:28 mslifcak
+
+ Update for win32 build: remove unused variables and unpublished method.
+
+2000-07-26 08:53 hardaker
+
+ - (mib2c.storage.conf): misc changes and improvements.
+
+2000-07-26 08:53 hardaker
+
+ - (tkmib): Patch from Bert Driehuis:
+ - translateObj hack.
+
+2000-07-26 08:49 hardaker
+
+ - (tkmib): Patch from Bert Driehuis:
+ - remove beginning newline in description clauses.
+
+2000-07-21 14:00 hardaker
+
+ - (setupdb, snmptosql): only delete history rows once every hour or so.
+ - too CPU intensive for large tables.
+
+2000-07-21 12:59 hardaker
+
+ - (setupdb, snmptosql): record and display sysUpTime and others.
+
+2000-07-21 12:57 hardaker
+
+ - (manager.pm): graphing works again.
+
+2000-07-21 12:57 hardaker
+
+ - (displaytable.pm): comments, legends, and max/min work again.
+
+2000-07-17 11:00 hardaker
+
+ - (vmstat_solaris2.h): config_require kernel_sunos5.
+
+2000-07-12 09:29 hardaker
+
+ - (snmpv3.c): copy key length as well as the key when using the same
+ privacy key as the auth key.
+
+2000-07-11 13:34 marz
+
+ added ranges field to SNMP::MIB hash
+
+2000-07-11 10:05 hardaker
+
+ - (mib.c): Patch from Robert Story:
+ - make null PREFIX variable possible so non-dot-leading oids are accepted.
+
+2000-07-11 09:22 hardaker
+
+ - (snmp_agent.c, snmptrapd.c, snmp_api.c, snmp_api.h, snmpusm.c, snmpusm.h):
+ - make the session pointers indicate weather or not they are
+ "authoritative", meaning weather they should be learning engineIDs
+ or reporting on them.
+ - pass the received-packet session pointer into snmpv3_parse and
+ usm_proccess_in_msg() to use this flag.
+ - set isAuthoratative = true in the agent, and unknown in the snmptrapd.
+
+2000-07-11 08:32 hardaker
+
+ - (snmpv3.c): make the createUser token accept an engineid (-e ARG) to use.
+
+2000-07-07 01:37 daves
+
+ - (mibII/interfaces.c): Recognise Token Ring interfaces under Linux
+
+2000-07-06 17:19 hardaker
+
+ - (read_config.c): print generic strings when saving persistent data
+ where possible. (IE, check for printable characters before printing hex).
+
+2000-07-06 17:05 hardaker
+
+ - (TESTCONF.sh, TESTCONF.sh.in): moved TESTCONF.sh to TESTCONF.sh.in
+ and have the MIBS path variable built by configure since it knows
+ where the root level source directory is.
+
+2000-07-06 17:04 hardaker
+
+ - (configure, configure.in, header_complex.c, snmpNotifyTable.c,
+ asn1.h, snmp_api.c):
+ - implement IMPLIED index handling.
+ - make the created USM entries set the storageType and RowStatus
+ appropriately.
+
+2000-07-06 17:02 hardaker
+
+ - (snmp_api.h): better comments on a couple of function definitions.
+
+2000-07-05 07:50 mslifcak
+
+ fix (BUG#290) gracefully handle some PDUs that have no variables.
+
+2000-07-05 06:46 mslifcak
+
+ [no log message]
+
+2000-07-04 10:21 hardaker
+
+ - (snmp_vars.c, snmptrapd.c, snmp_api.c, snmp_api.h, snmpusm.c, snmpusm.h):
+ - remove last remnants of the "initial" user.
+ - make engineid reports from the usm happen based on the report flag
+ in the message flag.
+ - Note: this is a big issue with the SNMPv3 protocol specs. The
+ specifications note that you send a report if you are
+ "authoritative", but don't describe how to know if you are
+ authoritative or not. For situations like proxies and
+ notification receivers, where you are sometimes authoritative
+ and other times you're not, this is problematic. The SNMPv3
+ ASIs do not pass in enough information to determine this and the
+ WG has proclaimed that the ASIs are not meant to be used as an
+ API, but the initial work done by NAI and TISLabs attempted to
+ implement the USM such that it would be a "reference" release
+ and hence we followed the specifications to the letter and used
+ the ASIs as APIs just to see if we could. We could previously
+ only because we were always either authoritative or
+ non-authoritative. Since beginning to work on proxy and the
+ notification mib, this is no longer possible. For the record, I
+ am hereby changing the initial reference release in such a
+ manner as it no longer conforms exactly to the SNMPv3 ASIs. So
+ as not to confuse anyone, this is an entirely theoretical issue
+ with respect to the SNMPv3 specification and is perfectly legal
+ to do. Though I could easily go on, I'll step off my soap box now.
+
+2000-07-03 10:10 hardaker
+
+ - (agent_callbacks.h, agent_trap.c, agent_trap.h, snmpNotifyTable.c,
+ snmpTargetAddrEntry.c, snmpTargetAddrEntry.h,
+ snmpTargetParamsEntry.c, snmpTargetParamsEntry.h, target.c):
+ - Add a new callback for sending traps.
+ - Make the notification mib use it.
+ - make the target mib generate more persistent sessions.
+ - Make the notification mib always ask the target mib for a session
+ list, which is now cached directly by the target mib.
+
+2000-07-03 08:38 mslifcak
+
+ fix (BUG#262) - (some) statements that cannot be reached.
+
+2000-07-03 07:55 mslifcak
+
+ fix (BUG#287)
+
+2000-07-03 06:11 mslifcak
+
+ fix bug # 289
+
+2000-06-30 04:45 mslifcak
+
+ simplify memory allocation in read_config_read_{octet_string, objid}
+
+2000-06-30 00:47 nba
+
+ - read_config.c: Fix a missing initialization for keywords without help
+
+2000-06-28 23:37 nba
+
+ - IF-MIB.txt: upgrade to RFC 2863
+
+2000-06-28 00:58 nba
+
+ - interfaces.c, configure: Irix 6.5 has ifi_baudrate.ifs_value
+
+2000-06-27 01:34 nba
+
+ - main.c: better option parsing.
+
+2000-06-27 01:34 nba
+
+ - snmpv3.c: do case insensitive matching of option values.
+
+2000-06-27 00:33 nba
+
+ - snmptranslate.1: document that -w is also for -Td
+
+2000-06-27 00:30 nba
+
+ - various man page nit-picking
+
+2000-06-27 00:28 nba
+
+ - snmptable.c: fixes and usage message for -Ch and -CH
+
+2000-06-26 23:43 nba
+
+ - Makefile.in, *MIB.txt: update to current RFC version
+
+2000-06-26 23:42 nba
+
+ - Makefile.mib, mibfetch, smistrip: tools to extract MIBs from RFC
+ documents.
+
+2000-06-26 23:40 nba
+
+ - parse.c, mib.[ch], snmptranslate.c: add parsing of CHOICE and checks for
+ OBJECT-GROUP and AGENT-CAPABILITIES. This allows us to parse
+ complete MIB extracts from RFC documents.
+
+2000-06-26 23:38 nba
+
+ - Makefile.top: make libtool silent, so we can see those warnings
+
+2000-06-26 23:37 nba
+
+ - snmpTargetAddrEntry.c: do a cast to kill a warning
+
+2000-06-26 23:32 nba
+
+ - agent_trap.c: Fix a leak when request is blocked by VACM and no trap
+ is sent.
+
+2000-06-26 11:56 mslifcak
+
+ fix (BUG#233)
+
+2000-06-23 06:42 mslifcak
+
+ replace malloc/memset 0 with calloc.
+
+2000-06-23 01:08 daves
+
+ - (mibII/kernel_linux.[ch], mibII/ip.c): Added support for ipRoutingDiscards
+ (Thanks to Bryan Blackman)
+
+2000-06-22 17:09 mslifcak
+
+ remove extra include errormib.h
+
+2000-06-22 16:50 mslifcak
+
+ Fix bug #276 - close most file descriptors before exec'ing command.
+
+2000-06-22 15:59 mslifcak
+
+ fgets: use sizeof(buf) in lieu of compiler constant STRMAX.
+
+2000-06-22 15:53 mslifcak
+
+ Use fewer large static buffers. pass_persist uses bigger buffers now.
+
+2000-06-21 14:59 hardaker
+
+ - (manager.pm, snmptosql): record and report sysUpTime.
+
+2000-06-21 14:31 hardaker
+
+ - (snmptosql): minor sql caching speed optimizations.
+
+2000-06-21 13:33 hardaker
+
+ - (snmptosql): Ack. Don't delete stuff from the history table that frequently.
+
+2000-06-21 12:51 hardaker
+
+ - (snmptosql): better error description support.
+
+2000-06-21 12:46 hardaker
+
+ - (manager.pm, snmptosql): collect sysDescr, sysObjectId, & versionTag.
+
+2000-06-21 12:46 hardaker
+
+ - (displaytable.pm): add -selectorder.
+
+2000-06-21 12:25 hardaker
+
+ - (snmpNotifyTable.c): Uh, only if not deleted.
+
+2000-06-21 12:23 hardaker
+
+ - (snmpNotifyTable.c): change createAndGo/createAndWait states to active/NIS.
+
+2000-06-20 20:01 mslifcak
+
+ Declare top_builddir to avoid annoying /libtool not found message.
+
+2000-06-20 17:30 mslifcak
+
+ Dont assume ANSI C-preprocessor (replace "##" concatenation with sprintf).
+
+2000-06-20 15:37 mslifcak
+
+ Win32 MS-VC++ build fixups.
+
+2000-06-20 15:37 mslifcak
+
+ Encapsulate local variable "x" to the scope where needed.
+
+2000-06-20 15:36 mslifcak
+
+ Remove unused var "newvar".
+
+2000-06-20 15:36 mslifcak
+
+ Use int vs ulong for array indexing variables to avoid signed/unsigned mismatch.
+
+2000-06-20 15:34 mslifcak
+
+ Remove unused vars struct tm, time_t.
+
+2000-06-20 15:34 mslifcak
+
+ Remove unused var "initlist".
+
+2000-06-20 15:33 mslifcak
+
+ Declare strncasecmp in system.h ; Remove unused var "status".
+
+2000-06-20 15:31 mslifcak
+
+ Remove unused vars.
+
+2000-06-20 15:30 mslifcak
+
+ Declare optarg in getopt.h.
+
+2000-06-20 14:00 hardaker
+
+ - (mib2c.storage.conf): misc minor changes.
+
+2000-06-20 13:59 hardaker
+
+ - (.cvsignore, snmpNotifyTable.c, snmpNotifyTable.h):
+ - SNMP-NOTIFICATION-MIB's snmpNotifyTable implemented:
+ - uses the SNMP-TARGET-MIB to get its addresses from.
+ - uses header_complex to handle the data.
+ - much todo:
+ - dynamic target/notification mib updating without kill -HUP needed.
+ - this will be a real pain.
+ - fix v3 related traps still (same usm bug I've been meaning to fix).
+ - the rest of the SNMP-NOTIFICATION-MIB tables.
+
+2000-06-20 13:53 hardaker
+
+ - (snmpTargetAddrEntry.c, snmpTargetAddrEntry.h,
+ snmpTargetParamsEntry.c, snmpTargetParamsEntry.h):
+ - generic target session creation
+ - misc other minor fixes.
+
+2000-06-20 13:51 hardaker
+
+ - (target.h, target.c, target.h): generic target session creation
+ based on entries in the SNMP-TARGET-MIB table.
+
+2000-06-20 13:50 hardaker
+
+ - (header_complex.c): remove Michael's horriblely wrong "fixes".
+
+2000-06-20 13:48 hardaker
+
+ - (agent_trap.c, agent_trap.h): add remove_trap_session().
+
+2000-06-20 13:46 hardaker
+
+ - (read_config.c): deal with 0-length persistent strings better.
+
+2000-06-19 12:32 mslifcak
+
+ Check more alloc failures.
+
+2000-06-19 12:15 mslifcak
+
+ (protocol.c) Use sizeof(oid), not 4!
+ (client.c) Add _all_ of OID value for agentx_register and agentx_unregister.
+
+2000-06-19 11:41 mslifcak
+
+ Removed sizeof(u_char) and unnecessary (unsigned) casts to malloc params.
+
+2000-06-19 03:04 nba
+
+ Prototype fixup.
+
+2000-06-19 03:01 nba
+
+ s/conifg/config/ .... Hrrrmmmpf
+
+2000-06-19 02:58 nba
+
+ - makenosysdepend.pl Makefile.in: object files are now named .lo ...
+
+2000-06-16 16:01 hardaker
+
+ - (snmpTargetAddrEntry.h): add the SNMPv2-TM mib to the default list.
+
+2000-06-16 16:01 hardaker
+
+ - (snmpTargetAddrEntry.c, snmpTargetParamsEntry.c): fix incorrect OIDs.
+
+2000-06-15 06:45 marz
+
+ fat fingers
+
+2000-06-15 06:42 marz
+
+ add defaults to daemon search path...recalc t/snmptest.cmd everytime per makefile.PL is run
+
+2000-06-14 16:15 hardaker
+
+ - (manager.pm): fix user preferences. Columns are optionally
+ displayable again.
+
+2000-06-14 16:15 hardaker
+
+ - (snmptosql): fix history deletion.
+
+2000-06-12 16:43 hardaker
+
+ - (snmpd.conf.5.def): document trapsess.
+
+2000-06-12 16:39 hardaker
+
+ - (agent_read_config.c, agent_trap.c, agent_trap.h):
+ - new snmpd.conf token for trap sessions: "trapsess".
+ - uses snmp_parse_args so any type of trap can be sent with it
+ modified by any of the parameters that are documented in snmpcmd(1).
+ - v3 traps don't work due to the same USM problems found in the
+ recent proxy submissions (my next target).
+ - -Ci in the argument specifies informs should be used.
+
+2000-06-12 16:18 hardaker
+
+ - (master_request.c): re-enable freeing of master request.
+
+2000-06-12 16:17 hardaker
+
+ - (acconfig.h, config.h.in): save exec data to /var/ucd-snmp.
+ - could cause problems for non-root runs. Untested.
+
+2000-06-12 14:12 hardaker
+
+ - (snmptrapd_log.c): Patch from Markku Laukkanen:
+ - remove ending commas in enum list.
+
+2000-06-12 10:36 hardaker
+
+ - (setupdb, setupuser, snmptosql): use "Table"s instead of "Entry"s.
+
+2000-06-12 10:33 hardaker
+
+ - (manager.pm): save mib descriptions for display purposes (again).
+
+2000-06-12 10:29 hardaker
+
+ - (manager.pm): remove debugging statements.
+
+2000-06-12 10:27 hardaker
+
+ - (manager.pm): properly sort displayed table columns again.
+
+2000-06-07 13:23 hardaker
+
+ - (snmp_config.5.def, read_config.c, read_config.h):
+ - the TYPE.conf parser now accepts tokens from a different .conf
+ file TYPE if a special "[TYPE]" keyword is inserted into the
+ .conf file. See snmp_config(5) for a better description.
+
+2000-06-07 13:22 hardaker
+
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - map strtoul to atoi if the function isn't found.
+
+2000-06-06 14:26 hardaker
+
+ - (INSTALL, green.gif, manager.pm, red.gif, setupauth, setupdb,
+ setupnewhost, setupuser, snmptosql, snmptosqltable, sqltohtml):
+ - management cleanup and installation instructions written.
+ - should be mostly complete (ie, barely functional) for the alpha testers.
+
+2000-06-06 08:03 hardaker
+
+ - (snmptosql): host name changes -> varchar(64)
+
+2000-06-06 08:02 hardaker
+
+ - (manager.pm): many minor fixes and changes.
+
+2000-06-06 08:02 hardaker
+
+ - (displaytable.pm): allow table title setting.
+
+2000-06-02 11:41 hardaker
+
+ - (.cvsignore): add *.made.
+
+2000-06-02 11:40 hardaker
+
+ - (Makefile.in, fixproc, ipf-mod.pl, mib2c, tkmib):
+ - make (and install) perl scripts differently, without modifying the orig.
+
+2000-06-01 16:47 hardaker
+
+ - (snmptosql): typos.
+
+2000-06-01 16:44 hardaker
+
+ - (snmptosql):
+ - debugging to STDERR.
+ - auto deletion of old historical data.
+
+2000-06-01 16:44 hardaker
+
+ - (manager.pm): beginnings of a nicer real interface.
+
+2000-06-01 16:43 hardaker
+
+ - (getValues.pm): some variables were global and hence persistent and
+ were messing things up.
+
+2000-06-01 14:48 hardaker
+
+ - (snmpd.c): store persistent data immediately after init'ing to
+ ensure we update counters and stuff that must change (eg, engineBoots).
+
+2000-05-31 16:22 hardaker
+
+ - (snmpd.1.def): describe -I.
+
+2000-05-31 15:52 hardaker
+
+ - (configure, configure.in, mib_modules.c, mib_modules.h, snmpd.c):
+ - new -I switch to snmpd to do dynamic determinaton of which mib
+ modules to initialize (and hence which mib tree sections to support).
+
+2000-05-31 15:50 hardaker
+
+ - (default_store.c, default_store.h): default store routines for void pointers.
+ - which I immediately decided to do something different for what I
+ originally implemented it for, so its not being used yet.
+
+2000-05-31 05:59 daves
+
+ - (mibII/ip.[ch]): Allow IP support without the At/ipNetToMedia module
+
+2000-05-30 17:11 hardaker
+
+ - (proxy.c, proxy.h): simple proxy support.
+ - maps one oid inside the agent to a possibly-different oid on a target.
+ - uses snmp_parse_args() so it takes standard command line config options.
+ - no set support.
+ - no kill -HUP support.
+ - no SNMPv3 support (sigh).
+
+2000-05-30 15:06 nba
+
+ file IANA-LANGUAGE-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-05-30 15:06 nba
+
+ file IANA-ADDRESS-FAMILY-NUMBERS-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-05-30 15:06 nba
+
+ file DISMAN-SCHEDULE-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-05-30 15:06 nba
+
+ file AGENTX-MIB.txt was initially added on branch V4-1-1-patches.
+
+2000-05-30 07:47 mslifcak
+
+ Fix problem identified by V. Grenet : new method snmp_oid_min_compare
+
+2000-05-30 01:31 nba
+
+ file mibfetch was initially added on branch V4-1-1-patches.
+
+2000-05-30 01:31 nba
+
+ file smistrip was initially added on branch V4-1-1-patches.
+
+2000-05-30 01:31 nba
+
+ file Makefile.mib was initially added on branch V4-1-1-patches.
+
+2000-05-26 09:24 daves
+
+ - (mibII/sysORTable.c mibII/system_mib.c):
+ - Use new time utility routines to simplify processing
+ - Update sysORLastChange when adding/removing entries
+
+2000-05-26 09:23 daves
+
+ - (util_funcs.[ch]): New time-diff utility routines
+
+2000-05-26 08:46 daves
+
+ - (snmpd.c snmp_agent.c mibII/var_route.c): Use 'mibincl.h' header
+
+2000-05-26 07:48 daves
+
+ - (agent_registry.[ch] agentx/client.[ch]
+ agentx/master_request.c agentx/subagent.c):
+ - Support for MIB region timeouts
+
+2000-05-26 07:46 daves
+
+ - (snmp.h snmp_api.c snmp_client.c): Support for per-request timeout handling
+
+2000-05-26 07:45 daves
+
+ - (agentx/protocol.c): Minor error in AgentX packet dump
+
+2000-05-25 10:07 hardaker
+
+ - (memory.c): Patch from Ragnar Kjørstad:
+ - fixed linux problem: wrong params getting returned.
+
+2000-05-25 05:38 mslifcak
+
+ Fix use of bin2asc to not always show "string"; use snmp_oid_compare, too.
+ See bug #234 for details.
+
+2000-05-25 03:39 daves
+
+ - (mibII/interfaces.c): Consolidate header handling.
+
+2000-05-25 03:31 daves
+
+ - (mibII/interfaces.c): Correct confusing comment
+
+2000-05-25 01:53 daves
+
+ - (configure.in configure): Replace use of 'cut' with equivalent 'sed' calls
+
+2000-05-25 01:30 daves
+
+ - (configure.in aclocal.m4 configure):
+ - Direct certain checks to the appropriate file descriptor (see BUG#247)
+
+2000-05-22 16:22 hardaker
+
+ - (apps/.cvsignore): add more stuff to ignore.
+
+2000-05-22 16:21 hardaker
+
+ - (Makefile.in, snmp_parse_args.c, snmp_parse_args.h, snmpbulkget.c,
+ snmpbulkwalk.c, snmpdelta.c, snmpdf.c, snmpget.c, snmpgetnext.c,
+ snmpset.c, snmpstatus.c, snmptable.c, snmptest.c, snmptrap.c,
+ snmpusm.c, snmpvacm.c, snmpwalk.c, Makefile.in, snmp_parse_args.c,
+ snmp_parse_args.h):
+ - moved snmp_parse_args to the library, as I promised to do ages ago.
+ - no longer calls usage() directly, but returns -1 if you should.
+
+2000-05-22 05:47 daves
+
+ - (snmplib/tools.[ch]): Routine for comparing two markers.
+
+2000-05-22 05:42 daves
+
+ - (local/mib2c): Generate multiple tables in one code file
+
+2000-05-17 10:28 hardaker
+
+ - (vacm_vars.c, vacm_vars.h, vacm.c, vacm.h): Patch from Arne Oesleboe:
+ - writable vacm mib support.
+ - other misc vacm fixes.
+
+2000-05-17 10:26 hardaker
+
+ - (snmpusm.c): Patch from Arne Oesleboe:
+ - Don't segfault on an unknown command, instead print a warning..
+
+2000-05-17 10:25 hardaker
+
+ - (snmpvacm.c): Patch from Arne Oesleboe:
+ - added a new command: snmpvacm.
+
+2000-05-17 09:25 hardaker
+
+ - (agent_read_config.c): mention the port number on the trapsink help line.
+
+2000-05-17 09:20 hardaker
+
+ - (snmptrapd.c): use standardized buffer sizes
+
+2000-05-17 09:13 hardaker
+
+ - (Makefile.in, snmptrapd.c, snmptrapd_log.c, snmptrapd.8): Patch from
+ Jeff Cours:
+ - customized formatting of trap output.
+
+2000-05-17 09:11 hardaker
+
+ - (README): add Jeff and Arne.
+
+2000-05-17 08:15 hardaker
+
+ - (mib.c): *correctly* associate escapeQuotes with the right default_store bool.
+
+2000-05-17 08:11 hardaker
+
+ - (snmp.conf.5.def): document escapeQuotes.
+
+2000-05-17 08:09 hardaker
+
+ - (snmpcmd.1, default_store.h, mib.c): new option -OE:
+ - shell backslash escape quotations marks for cutting and pasting
+ onto another snmp command line.
+
+2000-05-15 09:24 daves
+
+ - (mibII/{ip,icmp,tcp,udp,kernel_linux}.[ch]):
+ - Pull Linux MIB-II statistics gathering into a single routine.
+ - Cache MIB-II statistics on all architectures.
+
+2000-05-15 08:53 hardaker
+
+ - (ucd_snmp.h, vmstat_bsdi4.c, vmstat_bsdi4.h): Patch from Bert Driehuis:
+ - vmstat support for bsdi4.
+
+2000-05-15 03:06 daves
+
+ - (snmp_agent.c): Re-remove redundant PDU clone
+ (It reappeared during a recent change)
+
+2000-05-15 03:00 daves
+
+ - (agent_registry.[ch] agentx/master_admin.c): Implement missing routine 'unregister_mib_context'
+
+ - (agent_registry.[ch] agent_index.[ch]): Move 'fd' registry handling back to agent_registry
+
+ - (agentx/client.c): Recognise new code file for index handling
+
+2000-05-12 10:15 hardaker
+
+ - (snmp_agent.c): Um, default to port 161. Opps.
+
+2000-05-12 09:00 daves
+
+ - (agent_registry.[ch] var_struct.h agentx/master_admin.c):
+ - Preparation for per-MIB region timeout, and context support
+
+2000-05-12 08:45 daves
+
+ - (kernel_sunos5.c): Recognise Solaris ATM LAN Emulation interfaces
+ Thanks to Jay Young
+
+2000-05-12 08:13 daves
+
+ - (agent_index.[ch] agent_registry.[ch] Makefile.in agentx/master_admin.c):
+ - Split index handling out from the MIB registry.
+
+2000-05-12 07:02 daves
+
+ - (kernel_sunos5.c): Add support for recognising QuadFastEther interface
+
+2000-05-12 06:57 daves
+
+ - (apps/snmptable.c): Fix problem with missing separator (with -Ci -Cf)
+ Thanks to Xavier FOURNET
+
+2000-05-12 04:02 daves
+
+ - (snmp_agent.c): Remove redundant PDU clone
+ I'm sure this was put in for a reason, but I can't remember what.
+ It doesn't seem to be needed now, and just leaks memory.
+ Here's hoping.....
+
+2000-05-12 03:11 daves
+
+ - (agent/snmpd.c): Catch (and ignore) SIGPIPE signals.
+ Disappearing subagents therefor appear as normal I/O failures
+
+2000-05-12 02:24 daves
+
+ - (agentx/protocol.c):
+ - Implement opaque-encoded float & double types
+ - Bring packet dump in line with the main library style
+ - Add packet dump capability for outgoing PDUs
+
+2000-05-10 16:52 hardaker
+
+ - (snmpd.1.def): document -p.
+
+2000-05-10 16:43 hardaker
+
+ - (snmp_agent.c): always use the default transport mapping, not the last one.
+
+2000-05-10 16:25 hardaker
+
+ - (ds_agent.h, snmp_agent.c, snmpd.c): implement multiple transport
+ mappings via -p [transport:]port[@address].
+
+2000-05-10 11:08 mslifcak
+
+ fix udpstat --> tcpstat
+
+2000-05-10 07:59 daves
+
+ - (agentx/master_request, agentx/master_admin.c):
+ - Handle subagent disappearing without warning
+
+2000-05-10 07:57 daves
+
+ - (agent/snmp_agent.c snmplib/snmp_api.h):
+ - Provide a mechanism to handle asynchronous send failures.
+
+2000-05-10 06:13 daves
+
+ - (snmp_api.h): Logical NOT? Bitwise NOT? Who'll notice the difference anyway!
+
+2000-05-10 05:34 daves
+
+ - (agentx/master_request.c): Handle non-responsive subagents
+
+2000-05-10 05:33 daves
+
+ - (agent_registry.c mibII/sysORTable.c): Don't assume subsession link is valid
+
+2000-05-10 05:29 daves
+
+ - (snmp_api.h): Definitions for session closedown handling
+
+2000-05-09 14:42 mslifcak
+
+ also clean Win32 binary objects, and core files.
+
+2000-05-09 14:34 mslifcak
+
+ touch up the "clean" rule.
+
+2000-05-09 11:32 mslifcak
+
+ until Dave's version wins, need snmp_varlist_add_variable to build Win32 agent.
+
+2000-05-09 11:31 mslifcak
+
+ fix some Win32 builds (signals? we don't need no steenking signals!)
+
+2000-05-09 11:30 mslifcak
+
+ Remove trailing CR [0x0d] from one line.
+
+2000-05-09 08:50 hardaker
+
+ - (Makefile.top, Makefile.in, Makefile.in): fix link time problems
+ with aCC (or any other unknown compiler).
+
+2000-05-09 08:47 hardaker
+
+ - (Makefile.top, Makefile.in, Makefile.in): fix link time problems
+ with aCC (or any other unknown compiler).
+
+2000-05-09 07:43 daves
+
+ - (agentx/master_request.c): Send out re-delegated requests
+ (and fix a problem with specifying the end-of-range value)
+
+2000-05-09 07:40 daves
+
+ - (agentx/subagent.c): Fix handling of error response generation
+ (by analogy with recent changes to snmp_agent.c)
+
+2000-05-09 07:34 daves
+
+ - (snmp_agent.c): Handle AgentX "end-of-range" indication.
+ (This is not the cleanest way of doing things,
+ but works for now. We can tidy up later).
+
+2000-05-09 07:16 daves
+
+ - (snmp_vars.c): Use MIB registry 'start' values
+ (rather than the original name registered)
+ This handles subsequent part of 'split' ranges properly.
+
+2000-05-08 11:08 hardaker
+
+ - (Makefile.in): I can't believe the last checkin even compiled (luck).
+
+2000-05-08 11:03 hardaker
+
+ - (Makefile.in): fix library list.
+
+2000-05-05 09:56 hardaker
+
+ - (diskio.c): Patch from Bert Driehuis:
+ - disk io support for BSD/OS.
+
+2000-05-05 09:54 hardaker
+
+ - (at.c): Patch from Bert Driehuis:
+ - fix a zero byte malloc bug (mostly noticed with -lefence).
+
+2000-05-05 09:43 hardaker
+
+ - (configure, configure.in): Patch from Albert Chin-A-Young:
+ - --with-libwrap improvements.
+
+2000-05-05 09:00 daves
+
+ - (agentx/subagent.c agentx/master_request.c):
+ - Significant improvements to AgentX processing
+ (Thanks to Reiner Beninga)
+
+2000-05-05 08:58 daves
+
+ - (snmplib/snmp_api.[ch] snmplib/snmp_client.c agent/snmp_agent.[ch]):
+ - Minor changes to assist with AgentX development
+ (These may not be absolutely necessary, but they get things working again!)
+
+2000-05-04 16:21 hardaker
+
+ - (configure, configure.in): minor unimportant --without-openssl fix.
+
+2000-05-04 16:19 hardaker
+
+ - (configure, configure.in): Patch from John L. Villalovos:
+ - allow --without-openssl to work.
+
+2000-05-04 16:15 hardaker
+
+ - (Makefile.in): add the DISMAN-SCRIPT-MIB.txt
+
+2000-05-04 16:01 hardaker
+
+ - (Makefile.in): Patch from Albert Chin-A-Young:
+ - install UCD-DISKIO-MIB.txt.
+
+2000-05-04 15:21 hardaker
+
+ - (displaytable.pm, manager.pm): make purdy graphs with history tables.
+
+2000-05-04 08:26 daves
+
+ - (snmplib/snmp_client.[ch]): New routine 'snmp_clone_varbind()'
+ (From a suggestion by Reiner Beninga)
+
+2000-05-04 08:24 daves
+
+ - (snmplib/snmp_api.c): Various minor fixes
+ (Thanks to Reiner Beninga)
+
+2000-05-04 01:29 daves
+
+ - (snmp_agent.[ch]): Handle index/status information separately from PDU.
+ Also means that delegated requests have access to variable indexes
+ (Based on a suggestion from Reiner Beninga)
+
+2000-05-04 01:00 daves
+
+ - (ucd-snmp/proc.c): Initialize newly malloced structure
+ (Thanks to Jeff Wilson - see BUG #231)
+
+2000-05-03 09:06 daves
+
+ - (snmp_agent.[ch] agentx/master_admin.c):
+ - Clone PDU within init_agent_snmp_session.
+ New routine 'free_agent_snmp_session'
+ (Thanks to Reiner Beninga)
+
+2000-05-03 08:17 daves
+
+ - (snmp_agent.c): When returning an error response,
+ use a clean copy of the original request PDU.
+
+2000-05-03 08:14 daves
+
+ - (snmp_agent.[ch]): Routine to handle variables individually
+ (Thanks to Reiner Beninga)
+
+2000-05-03 04:37 daves
+
+ - (snmp_agent.c): Check accessibility of exact requests before processing
+ (and remove redundant 'generic' SET handling)
+
+2000-05-02 09:56 hardaker
+
+ - (manager.pm): lots of small changes.
+
+2000-05-01 11:34 nba
+
+ - mib.c: fix printing of BITS variables
+
+2000-05-01 06:55 marz
+
+ applied patch from Steve Pheran Snodgrass to fix incompatibility with perl5.6 ref stringification
+
+2000-04-29 07:46 hardaker
+
+ - (config.h.in, configure.in, agent_registry.c): Patch from Frank Strauss:
+ - use sigaction when available.
+
+2000-04-28 16:22 hardaker
+
+ - (snmptosql): fix -m/-M the wrong way.
+
+2000-04-28 16:15 hardaker
+
+ - (snmptosql):
+ - do history saving better (different table).
+ - -m/-M mib loading options (which don't appear to be working right yet).
+
+2000-04-28 07:36 hardaker
+
+ - (agent_registry.c, snmpd.c): Patch from Frank Strauss:
+ - fix signal handling.
+
+2000-04-27 14:58 hardaker
+
+ - (Makefile.in, snmpdf.c): implement a remote df command via snmp
+ - (needs the host resources mib working on the remote system).
+
+2000-04-27 10:57 hardaker
+
+ - (Makefile.top, config.h.in, configure, configure.in): rpm is now
+ requiring yet another library: libpopt.
+
+2000-04-26 15:20 hardaker
+
+ - (Makefile.top): run libtool --finish without -n (go ahead and do the cmds)
+
+2000-04-26 15:19 hardaker
+
+ - (Makefile.top, configure, configure.in, agent/Makefile.in):
+ - more libtool fixes (.so versioning, properly install...)
+
+2000-04-26 14:18 hardaker
+
+ - (*/.cvsignore, */Makefile.in, Makefile.top, aclocal.m4, configure,
+ configure.in, ltconfig, ltmain.sh):
+ - use libtool for building.
+ - Certainly, I must have broke something in the process. (make depend, eg)
+
+2000-04-26 14:15 hardaker
+
+ - (*/.cvsignore, */Makefile.in, Makefile.top, aclocal.m4, configure,
+ configure.in, ltconfig, ltmain.sh):
+ - use libtool for building.
+ - Certainly, I must have broke something in the process. (make depend, eg)
+
+2000-04-26 08:11 hardaker
+
+ - (FAQ): new secondary slogan.
+
+2000-04-26 07:22 hardaker
+
+ - (snmp_api.c, snmpusm.c): Attempt to parse the PDU when a report is
+ being sent so that the requestid can be used in the outgoing report.
+ This should fix a problem where SNMP Research's Emante agent is
+ doing engineID discovery probes based on the request_id (which is a
+ fairly poor choice as the message_id would be a better one to match
+ on in general and is the only possible thing to use in cases where
+ the report is encrypted).
+
+2000-04-25 13:08 hardaker
+
+ - (FAQ): mention that the perl module is included with the source.
+
+2000-04-25 08:24 hardaker
+
+ - (snmp_api.c): misc -Ddump fixes.
+
+2000-04-25 08:02 hardaker
+
+ - (snmptable.c): check for end of mib view exceptions (v2c, v3).
+
+2000-04-24 11:27 hardaker
+
+ - (snmp_api.c): -D support for those "older" protocols that shouldn't
+ be used anymore (v1, v2c).
+
+2000-04-24 10:36 hardaker
+
+ - (asn1.c, default_store.h, mib.c, snmp.c, snmp_api.c, snmp_auth.c,
+ snmp_debug.c, snmp_debug.h, snmpusm.c):
+ - timestamps can be printed as a numeric number only (-Ot).
+ - more configurable packet dumping code for both send and receive.
+ - uses new -D tokens: dumph (headers), dumpx (hex), dumpv
+ (values). dumpx_ and dumpv_ (note the _s) make it eat space
+ (and newline) before the segment in question. Try -Ddump then
+ -Ddumph,dumpv_ to see examples.
+ - todo:
+ - better horizontally formated information (probably using "%NUMs").
+ - USM is called after pdu building (makes sense but is backwards
+ visually in the dumped packet).
+ - option to strip datatype token (ie Integer:).
+
+2000-04-24 09:37 hardaker
+
+ - (version.h bug-report sedscript.in): version tag ( 4.2.pre0 )
+
+2000-04-24 09:13 hardaker
+
+ - (version.h bug-report sedscript.in): version tag ( EXT.4.2.pre0 )
+
+2000-04-21 14:13 hardaker
+
+ - (snmpwalk.c): fix GET call for an snmpwalk. (was using a GETNEXT PDU, ack).
+
+2000-04-21 10:41 hardaker
+
+ - (snmpv3.c): more u_long -> size_t for engineID len.
+
+2000-04-21 08:18 hardaker
+
+ - (mib.c): fix fprint_description to check for null subtrees.
+
+2000-04-21 08:17 hardaker
+
+ - (snmpv3.c, snmpv3.h): use size_t for engineid lengths.
+
+2000-04-19 11:02 marz
+
+ changed mode_t typedef to agree with what ActiveState perl uses (anyone have a problem with this?)
+
+2000-04-19 10:59 marz
+
+ added Marc Lehman patch to ensure alloc/dealloc use same mechanism (perl vs. system default)
+
+2000-04-19 08:26 hardaker
+
+ - (snmp_agent.c): agent_check_and_process() always block if caller requested it.
+
+2000-04-19 04:34 mslifcak
+
+ move static decl to .c;minor casting about to support aCC
+
+2000-04-18 11:11 mslifcak
+
+ Synch devel branch with patches branch.
+
+2000-04-18 11:07 mslifcak
+
+ Define optarg for apps use; Define vacm_is_configured for agent use.
+
+2000-04-18 07:57 hardaker
+
+ - (vmstat.c, vmstat.h, UCD-SNMP-MIB.txt): Patch from Mizuki Honda:
+ - implement raw cpu usage numbers.
+
+2000-04-18 03:18 daves
+
+ - (man/snmptable.1 apps/snmptable.c):
+ - Command-specific '-C' options for snmptable
+
+2000-04-18 02:01 daves
+
+ - (apps/snmp_parse_args.c): Handle previous form of -Z option as well
+
+2000-04-17 15:36 hardaker
+
+ - (snmp_parse_args.c): fix -Z if args are wrong.
+
+2000-04-17 15:32 hardaker
+
+ - (snmp_parse_args.c, snmpcmd.1): fix -Z to use a ','.
+
+2000-04-17 15:06 hardaker
+
+ - (mta_sendmail.c, mta_sendmail.h): Patch from Christoph Mammitzsch:
+ - update on the sendmail module.
+
+2000-04-17 15:00 hardaker
+
+ - (vmstat.c): Patch from John L. Villalovos:
+ - fix ssCpuSystem, ssCpuUser, ssCpuIdle.
+
+2000-04-17 14:18 hardaker
+
+ - (Makefile.top, Makefile.in): properly use LN_S for linking snmpinform.
+
+2000-04-17 13:45 hardaker
+
+ - (snmpusm.c, snmpv3.c, snmpv3.h): engineID changes for better aCC support.
+
+2000-04-17 13:44 hardaker
+
+ - (.cvsignore): ignore snmpinform.
+
+2000-04-17 09:58 hardaker
+
+ - (snmp_agent.c): fix row creation.
+
+2000-04-17 07:25 daves
+
+ - (auto_nlist.c snmpd.c agentx/master.c): Don't exit on failure with '-r'
+
+2000-04-14 15:07 hardaker
+
+ - (snmp_parse_args.c, snmpdelta.c, snmpget.c, snmpgetnext.c,
+ snmpstatus.c, snmpcmd.1, snmpget.1, default_store.h, mib.c):
+ - move -If to -Cf and invert behaviour.
+
+2000-04-14 15:06 hardaker
+
+ - (configure, configure.in): remove debugging output (opps).
+
+2000-04-14 09:03 hardaker
+
+ - (versioinfo.c): alright. Who made versionClearCache RONLY?
+
+2000-04-13 05:49 nba
+
+ - snmptranslate.1: decument the -w width option
+
+2000-04-12 12:05 mslifcak
+
+ hide user's hostname; prompt before sending e-mail; prompt to save as file.
+
+2000-04-12 11:22 mslifcak
+
+ fix %f(%s)
+
+2000-04-12 09:29 hardaker
+
+ - (snmpcmd.1): document -If.
+
+2000-04-12 09:17 hardaker
+
+ - (snmp_parse_args.c): put ++ back in that accidentically got checked in.
+
+2000-04-12 09:16 hardaker
+
+ - (snmpset.c): put space back in usage line.
+
+2000-04-12 09:12 hardaker
+
+ - (snmp_parse_args.c, snmpdelta.c, snmpget.c, snmpgetnext.c,
+ snmpset.c, snmpstatus.c, default_store.h, mib.c):
+ - Add a new option -If to specify fixing of PDUs.
+ - Anyone know a better place to put this option?
+ - Applications don't do this by default anymore, and you can't in snmpset.
+
+2000-04-12 07:38 hardaker
+
+ - (vacm_vars.c, vacm.c, vacm.h): fix to allow no v1/v2c requests when
+ configured for just v3.
+
+2000-04-12 06:50 mslifcak
+
+ fix MSVC build for encode_keychange, and add more symbols for release builds
+
+2000-04-12 05:32 nba
+
+ - parse.c: correct parsing of sub-types textual conventions. Allow parsing
+ of MACRO invocations for standard symbols
+
+2000-04-12 05:31 nba
+
+ - parse.[ch], snmptranslate.c: allow specification of with for -Tp
+
+2000-04-12 05:30 nba
+
+ - HOST-RESOURCES-MIB.txt, HOST-RESOURCES-TYPES.txt: align with published
+ RFC 2790
+
+2000-04-11 15:33 hardaker
+
+ - (configure, configure.in): make config_add_mib() actually look for
+ the mib in $srcdir/mibs/blah and install it if found.
+
+2000-04-11 15:21 hardaker
+
+ - (snmpv3.c, snmpv3.h): make macaddr engineid setup not linux
+ specific, but #defines are checked instead.
+
+2000-04-11 15:20 hardaker
+
+ - (snmp_logging.h): remove old callback typedef no longer needed.
+
+2000-04-11 14:38 hardaker
+
+ - (snmpv3.c, snmpv3.h): Patch from John L. Villalovos:
+ - enable engineID to be set from MACAddr.
+
+2000-04-11 09:51 hardaker
+
+ - (mta_sendmail.c, mta_sendmail.h): New module from Christoph Mammitzsch:
+ - implements the MTA-MIB for monitoring sendmail.
+
+2000-04-11 09:50 hardaker
+
+ - (MTA-MIB.txt, NETWORK-SERVICES-MIB.txt): new mibs for new modules.
+
+2000-04-11 03:25 daves
+
+ - (agent/snmp_agent.c): Save/restore original statP value for SET handling.
+
+2000-04-11 02:35 daves
+
+ - (agent/snmp_agent.c): Report failures from ACTION phase of SET correctly.
+
+2000-04-11 01:57 daves
+
+ - (agentx/master_request.c): Dynamically resize subagent requests
+ (Thanks to Reiner Beninga)
+
+2000-04-10 05:08 daves
+
+ - (snmp_agent.c agentx/master_request.c): Fix multi-subagent requests
+ (Thanks to Reiner Beninga)
+
+2000-04-07 12:25 hardaker
+
+ - (snmptrap.c, snmpusm.c):
+ - fix snmpv3 traps to be authoritative from the client side, not the
+ receiver side. snmpv3 informs stay as is. Unfortunately, for
+ command line apps this doesn't make a whole lot of sense but is
+ right in terms of how the protocol works and this is hence
+ somewhat of a hack.
+
+2000-04-07 07:50 daves
+
+ - (agent/snmp_agent.c): Handle v2 exception types in v1 queries
+
+2000-04-07 07:16 hardaker
+
+ - (snmptrapd.c, read_config.c, snmpv3.c):
+ - allow NULL help lines for config directives and use it to hide
+ internal directives used for persistent storage.
+
+2000-04-06 15:31 hardaker
+
+ - (snmp_api.c, snmp_api.h):
+ - turn backwards compatibility macros back into functions so
+ default_store.h dependencies go away again.
+ - create a flag to not probe for engineIDs durning sess_open().
+
+2000-04-06 07:20 daves
+
+ - (snmplib/snmp_api.c): Fix mishandled Counter64 parsing
+
+2000-04-06 03:36 daves
+
+ - (agent/snmpd.c): Fix usage message alignment.
+
+2000-04-06 03:31 daves
+
+ - (man/snmpd.1.def): Document the AgentX socket command-line option
+
+2000-04-05 08:41 hardaker
+
+ - (FAQ2HTML): it's been sitting in my personal src tree for > 2 years.
+
+2000-04-05 08:38 hardaker
+
+ - (mibincl.h, usmUser.c, snmptrapd.c, lcd_time.c, scapi.c, snmp_api.c,
+ snmpusm.c, snmpusm.h, snmpv3.c):
+ - make snmptrapd handle v3 users properly, (and shutdown properly as well).
+ - a more generic user storage routine added to snmpusm.c and used in
+ usmUser.c with a side effect of needing callback.h above snmpusm.h.
+
+2000-04-05 08:27 hardaker
+
+ - (rsnmp): -> /usr/bin/perl
+
+2000-04-05 08:24 hardaker
+
+ - (.cvsignore): misc minor additions to /
+
+2000-04-04 11:03 daves
+
+ - (agent/snmp_agent.c): Ensure unimplemented objects return 'noSuchObject'
+
+2000-04-03 14:57 mslifcak
+
+ Initialize statP.
+
+2000-04-03 09:12 daves
+
+ - (agent/snmp_agent.c): Ensure a v1 SET returns a v1 error status.
+
+2000-04-03 08:32 hardaker
+
+ - (ChangeLog): Year was "100" for 2000 (noticed by Jay Riddell):
+
+2000-04-03 07:53 daves
+
+ - (agent/snmp_agent.c): Ensure SETs fail if one varbind does.
+
+2000-03-31 07:25 daves
+
+ - (agent/snmp_vars.c): Fix to report 'noSuchObject' in certain circumstances
+
+2000-03-31 07:13 daves
+
+ - (snmplib/snmp_api.c): Don't repeat the first four bytes in a PDU dump
+
+2000-03-31 07:04 daves
+
+ - (snmplib/snmp_logging.c): Handle logging empty strings (e.g. a null indent)
+
+2000-03-30 00:15 daves
+
+ - (agent/snmp_agent.c): Initialise timeout structure properly
+ (Thanks to ashipman@erggroup.com)
+
+2000-03-27 10:32 mslifcak
+
+ remove trailing newline from hrSWRunName values.
+
+2000-03-24 09:09 mslifcak
+
+ to sync with patches branch.
+
+2000-03-24 05:07 nba
+
+ - snmptrapd.c: correctly free the reponse if sending it fails
+
+2000-03-24 04:22 mslifcak
+
+ xx_synch_response: avoid freeing PDU twice.
+
+2000-03-23 23:29 nba
+
+ - snmpcmd.1, snmptrap.1, snmptrap.c, Makefile.in: Install and document
+ snmpinform.
+
+2000-03-23 09:58 mslifcak
+
+ Enqueue only complete request_list entry; Reduce scoping of callback vars.
+
+2000-03-23 03:02 nba
+
+ file snmpinform.1 was initially added on branch V4-1-1-patches.
+
+2000-03-22 08:13 mslifcak
+
+ printf ?
+
+2000-03-21 11:12 mslifcak
+
+ modify F. Strauss' patch per N. Baggesen's suggestion: remove export-dynamic.
+
+2000-03-21 09:14 mslifcak
+
+ more smooth sailing with Win32 .DLL . DLLEXPORT, anyone ?
+
+2000-03-21 09:07 mslifcak
+
+ win32 build check: no sigaction, SIGCLD defined.
+
+2000-03-21 08:47 daves
+
+ - (ds_agent.h snmpd.c mibgroup/agentx/{master,subagent}.c):
+ - Command-line option for specifying AgentX port
+ (based on patch from Frank Strauss)
+
+2000-03-21 08:38 daves
+
+ - (snmp_api.c): Support 'host:port' representation of peernames
+
+2000-03-21 04:05 daves
+
+ - (snmp_agent.c): Missing new-line on debug output
+
+2000-03-21 02:52 daves
+
+ - (mibII/{tcp,udp,ip,icmp}*) Continuing mibII code cleanup
+
+2000-03-20 11:14 mslifcak
+
+ Comment -C -- do not use this flag.
+
+2000-03-17 15:32 hardaker
+
+ - (header_complex.c): sizeof(x)*(len+1) not sizeof(x)*len+1
+
+2000-03-16 00:10 nba
+
+ - configure, hr_print.c: detect system printers (SysV/lpstat, *BSD/cgetnext,
+ Linux/printcap)
+
+2000-03-15 18:30 mslifcak
+
+ Second part : all members of struct snmp_index are pointers.
+
+2000-03-15 15:07 mslifcak
+
+ Fix memory leak with unregister_index.
+
+2000-03-15 15:07 mslifcak
+
+ Fix memory leak when cleaning up trap variables.
+
+2000-03-15 08:48 daves
+
+ - (snmp_api.c snmp_client.c): Initialise varbind data hook elsewhere as well.
+
+2000-03-15 07:57 daves
+
+ - (agentx/master_request.c): Fix infinite loop problem when walking subagent.
+
+2000-03-15 06:09 daves
+
+ - (agent/snmp_agent.c): Avoid calling read routine for each SET handling pass.
+ N.B: This hasn't been tested with AgentX subagents yet
+
+2000-03-15 06:07 daves
+
+ - (snmplib/snmp_api.[ch]): Provide hook for internal varbind-related data
+
+2000-03-15 05:22 daves
+
+ - (agent/var_struct.h): Use a single magic number for MIB registry name lengths.
+
+2000-03-15 01:51 daves
+
+ - (snmplib/system.h): Don't declare gettimeofday() if the system provides it.
+ (Fix provided by Ron Mevissen)
+
+2000-03-14 07:57 daves
+
+ - (agent/snmp_agent.c): Don't overwrite saved status when checking access.
+
+2000-03-14 07:52 daves
+
+ - (agent/snmp_agent.c): Return a response, even if the request failed.
+
+2000-03-13 15:32 nba
+
+ - ipfwacc.h: fix the MIB name
+
+2000-03-10 12:48 hardaker
+
+ - (configure): autoconf run
+
+2000-03-10 11:09 hardaker
+
+ - (Makefile.dlmod): Patch from Frank Strauss:
+ - dlmod build Makefile example. Needs incorperation with main configure.
+
+2000-03-10 11:02 hardaker
+
+ - (agent_registry.c): better signal check from Michael Slifcak
+
+2000-03-10 10:59 hardaker
+
+ - (UCD-DLMOD-MIB.txt): typo found by Michael Slifcak.
+
+2000-03-10 10:54 hardaker
+
+ - (dlmod.c, dlmod.h, snmpd.conf.5.def, UCD-DLMOD-MIB.txt): Patch from
+ Frank Strauss:
+ - Reimplementation of the dlmod mib module:
+ o mibgroup/misc/dlmod + dlmods/dlmod_mib -> mibgroup/ucd-snmp/dlmod
+ o fixed registration (ucdavis.ucdExperimental.14 instead of ucdavis.14)
+ o added configure stuff for HAVE_SNPRINTF, which was used by dlmod.c
+ o removed `_dynamic_' prefixes from init/deinit functions
+ o made dlmodIndex not-accessible (only implementation, not definition)
+ o removed the asn_parse_XXX stuff
+ o made entries with state `error' able to accept state `load'
+ o made the wombat example usable as static and dynamic module
+ o added simple config_parse functionality to the wombat example
+
+2000-03-10 10:52 hardaker
+
+ - (agent_registry.c, agent_registry.h, snmpd.c): Patch from Frank Strauss:
+ - signal registry system implemented (needs to be redone allowing
+ multiple callbacks and handlers for all signals).
+ - arbitrary file descriptor/socket registration.
+ - this is not the way it should be done (use sessions instead).
+
+2000-03-10 10:44 hardaker
+
+ - (Makefile.in, Makefile.top, acconfig.h, config.h.in, configure.in,
+ Makefile.in, Makefile.in, Makefile.in, Makefile.in, Makefile.in):
+ Patch from Frank Strauss:
+ - clean up shared library usage.
+
+2000-03-10 10:16 hardaker
+
+ - (config.h.in): autoheader re-arranged some stuff.
+
+2000-03-07 11:58 mslifcak
+
+ more touchups to allow UnixWare build to complete.
+
+2000-03-07 11:21 hardaker
+
+ - (default_store.h): make MAX_SUBIDS larger and a multiple of 8.
+
+2000-03-07 10:13 mslifcak
+
+ Introduce --enable-mini-agent to configure agent (snmpv3, no mibII interfaces).
+
+2000-03-07 09:03 mslifcak
+
+ assume "snmpapp" if no arg passed to init_snmpv3.
+
+2000-03-07 08:58 mslifcak
+
+ remove init_mib() call - not appropriate here.
+
+2000-03-07 08:35 mslifcak
+
+ Let the aix4 patch work.
+
+2000-03-07 07:08 mslifcak
+
+ trim fat from recent check-ins.
+
+2000-03-06 20:01 mslifcak
+
+ cleaned up SCO UnixWare build.
+
+2000-03-06 16:40 mslifcak
+
+ start support for SCO UnixWare 5 as svr5.
+
+2000-03-06 10:56 hardaker
+
+ - (default_store.h, snmp_api.c): Patch from Robert Story:
+ - don't check ranges if not requested.
+
+2000-03-06 10:55 hardaker
+
+ - (snmp_agent.c, snmp_agent.h, snmpd.c): Patch from Robert Story:
+ - fix exit()ing behaviour in the libucdagent library.
+
+2000-03-06 10:36 hardaker
+
+ - (snmptrapd.c): Patch from Robert Story:
+ - -n prints numeric IP addrs.
+
+2000-03-06 10:25 hardaker
+
+ - (callback.h, snmp_logging.c, snmp_logging.h): Idea from ashipman@erggroup.com:
+ - callback function (using callback.h) added for external logging.
+
+2000-03-05 05:25 marz
+
+ fix to preserve trailing multi component instance id's at the end of
+ symbolic mib names(e.g., foo.6.7) when doing translateObj.
+
+2000-03-04 11:34 nba
+
+ - configure.in, configure: support --without-openssl, even if OpenSSL
+ is available
+
+2000-03-04 11:30 nba
+
+ - agent/(various): globalize the kvm_t *kd variable
+
+2000-03-04 11:26 nba
+
+ - mib_modules.c, hr_storage.c: pre-processor # should be in column 1
+
+2000-03-04 11:17 nba
+
+ - inet.c, inet6.c: survive -v 2c exception replies
+
+2000-03-04 11:17 nba
+
+ - snmp_api.c: remove a superfluous & in front of an array
+
+2000-03-04 11:15 nba
+
+ - ucd_snmp.h, {memory,vmstat}_netbsd1.[ch]: support for NetBSD
+
+2000-03-04 11:14 nba
+
+ - hr_disk.c: fixes for NetBSD
+
+2000-03-04 11:10 nba
+
+ - versioninfo.c: don't return the trailing newline
+
+2000-03-04 11:08 nba
+
+ - hr_swrun.c: fix process size for FreeBSD 3 and NetBSD
+
+2000-03-04 11:05 nba
+
+ - agent_trap.h: fix a wrong prototype
+
+2000-03-04 11:04 nba
+
+ - snmptable.c: fix problems printing table name and headers when using
+ -OS format
+
+2000-03-02 11:50 nba
+
+ - snmp_api.c: fix address length info for tcp connect
+
+2000-03-02 11:48 nba
+
+ - loadave.c: fix for AIX 4
+
+2000-03-02 08:30 daves
+
+ - (mib2/ip.[ch] mib2/ipAddr.[ch]): First stab at tidying up mib2 support.
+
+2000-03-01 13:23 hardaker
+
+ - (snmptosql): fix dynamic table testing for creation needed.
+
+2000-03-01 13:22 hardaker
+
+ - (manager.pm, ucd-snmp.pm): Opps. Wrong name. ucd-snmp.pm -> manager.pm.
+
+2000-03-01 13:21 hardaker
+
+ - (ucd-snmp.pm): turned sqltohtml into an apache module. 2x speed improvement.
+
+2000-03-01 08:32 mslifcak
+
+ fix bug 180 for cygwin build with _REENTRANT; per ashipman@erggroup.com
+
+2000-02-29 14:30 mslifcak
+
+ Invoke snmp_sess_send from within snmp_read to avoid mutex deadlocks.
+
+2000-02-28 14:25 nba
+
+ - snmpd.h, smux.c: don't initialize smux master in sub agent
+
+2000-02-28 14:16 nba
+
+ - snmp_vars.c: use SUB_AGENT symbol
+
+2000-02-28 14:12 nba
+
+ - mib.c: sprint_by_type should handle ASN_BIT_STR
+
+2000-02-28 14:10 nba
+
+ - snmp_parse_args.c: correctly call the -I options input options
+
+2000-02-28 10:47 mslifcak
+
+ fix bug #176 (AIX 4 - use knlist in lieu of nlist)
+
+2000-02-24 17:17 mslifcak
+
+ apply patch to fix bug no. 177.
+
+2000-02-24 13:31 hardaker
+
+ - (default_store.h, read_config.c, snmp_api.c): new snmp.conf keyword
+ to force the parser to ignore unknown tokens.
+
+2000-02-24 03:59 mslifcak
+
+ document UNSIGNED32 and COUNTER32 ('u' and 'c') in snmpset (gratis ashipman@erggroup.com)
+
+2000-02-24 03:56 mslifcak
+
+ add support for COUNTER32 to snmp_add_var; document UNSIGNED32 and COUNTER32
+ ('u' and 'c') in snmptrap (gratis ashipman@erggroup.com)
+
+2000-02-23 23:06 nba
+
+ - pass.c, pass_persist.c: fix setting of octet strings.
+
+2000-02-23 02:09 nba
+
+ - mt_support.h: a bad ; in the C++ bracketing
+
+2000-02-23 02:09 nba
+
+ - system.c: remove some superfluous indirections in strcasecmp
+
+2000-02-23 02:07 nba
+
+ - vmstat_solaris.c: make sure we agree with the prototype of getpagesize!
+
+2000-02-22 15:31 nba
+
+ - pass_persist.h: declare init_pass_persist
+
+2000-02-22 09:57 mslifcak
+
+ prune two more symbols not used by auto_nlist for Solaris-built MIB modules.
+
+2000-02-21 16:17 mslifcak
+
+ Apply R. Story's patch for mkdirhier and strncasecmp on win32
+
+2000-02-21 07:39 mslifcak
+
+ fix bug 171 (thanks to Larry Parmelee).
+
+2000-02-21 05:56 mslifcak
+
+ remove free after snmp_close (don't free twice!)
+
+2000-02-21 04:58 mslifcak
+
+ Added description in SH_NAME for several man-pages (c/o ragnark)
+
+2000-02-18 12:14 mslifcak
+
+ refer the .so macro to man3; adjust Makefile.in to use the renamed file.
+
+2000-02-17 05:17 mslifcak
+
+ include pass_persist in the required list.
+
+2000-02-17 02:00 daves
+
+ - (configure* ucd-snmp/vmstat_solaris2.c):
+ - Provide missing 'getpagesize' routine for Solaris 2.4
+ (Thanks to Ragnar Kjørstad)
+
+2000-02-16 20:17 mslifcak
+
+ include mibincl.h in hr_system.c to fix bug #159.
+
+2000-02-16 16:35 mslifcak
+
+ remove auto_nlist of unused "swaplist" symbol.
+
+2000-02-16 15:17 mslifcak
+
+ patch suggested by Rick Beaman <beaman@mediaone.net>
+
+2000-02-16 14:58 mslifcak
+
+ remove unused vars
+
+2000-02-16 14:57 mslifcak
+
+ test lengths before allocating memory; use new VACMSTRINGLEN constant.
+
+2000-02-16 08:18 mslifcak
+
+ include time.h once
+
+2000-02-16 08:02 mslifcak
+
+ restore #if HAVE...IN_PCB_H
+
+2000-02-15 23:47 nba
+
+ - configure.in, ipch.[ch]: initial stabs at Linux ipv6 support. A lot is
+ lacking in the kernel statistics though.
+
+2000-02-15 23:40 nba
+
+ - (many): configure check for netinet/ip6.h
+
+2000-02-15 23:34 nba
+
+ - hr_filesys.c: MNTTYPE defines for FreeBSD-3 and BSDI-4, and moving the
+ return value for Ext2FS to the newly defined OID.
+
+2000-02-15 23:24 nba
+
+ - freebsd3.h: some kernel symbols not to be used for FreeBSD 3
+
+2000-02-15 23:23 nba
+
+ - snmptable.c: give a sensible output for an empty table.
+
+2000-02-15 23:22 nba
+
+ - vacm*: buffer length checking!
+
+2000-02-15 23:20 nba
+
+ - hr_storage.c: return memory size in pages.
+
+2000-02-15 23:17 nba
+
+ - ucd_snmp.h, memory_freebsd2.h: make it work for FreeBSD-3 too
+
+2000-02-15 23:16 nba
+
+ - snmp_agent.c: one more place to send a AUTHFAIL trap
+
+2000-02-15 23:15 nba
+
+ - agent_registry.c: fix a return for SNMPv1/Counter64 case
+
+2000-02-15 02:12 daves
+
+ - (apps/snmp_parse_args.c): Omit deprecated options from optarg handling.
+
+2000-02-11 15:48 hardaker
+
+ - (manager/*): /usr/local/bin/perl -> /usr/bin/perl
+
+2000-02-11 15:47 hardaker
+
+ - (makedepend.in): /usr/local/bin/perl -> /usr/bin/perl
+
+2000-02-11 15:38 hardaker
+
+ - (rsnmp): perl5 -> perl
+
+2000-02-11 15:17 hardaker
+
+ - (man/Makefile.in): install snmp_trap_api.3
+
+2000-02-11 14:20 hardaker
+
+ - (local/Makefile.in): last minute makefile touchup
+
+2000-02-11 14:03 hardaker
+
+ - (NEWS): update for 4.1.1
+
+2000-02-11 13:47 hardaker
+
+ - (ChangeLog): Update for 4.1.1
+
+2000-02-11 13:29 hardaker
+
+ - (version.h bug-report sedscript.in): version tag ( 4.1.1 )
+
+2000-02-11 12:53 hardaker
+
+ - (T016snmpv2cgetfail, T017snmpv2ctov1getfail): update for Timeout for v2c.
+
+2000-02-11 12:49 hardaker
+
+ - (local/Makefile.in): don't cp for snmpcheck
+
+2000-02-11 12:44 hardaker
+
+ - (local/Makefile.in): fix for seperate build path
+
+2000-02-11 12:30 hardaker
+
+ - (sysORTable.h): Patch from Niels Baggesen:
+ - compiler warning fix.
+
+2000-02-11 12:29 hardaker
+
+ - (snmp_agent.c): patch from Niels:
+ - don't send autherror responses for v2c.
+ - send authFailure trap.
+
+2000-02-11 12:22 hardaker
+
+ - (acconfig.h, config.h.in): change perl path to /usr/bin.
+
+2000-02-11 06:58 hardaker
+
+ - (acconfig.h, config.h.in): Dont define PROCFIXCMD and EXECFIXCMD by default.
+
+2000-02-10 11:14 mslifcak
+
+ fix for older platforms to use pass_persist; not included by default.
+
+2000-02-10 10:33 mslifcak
+
+ [no log message]
+
+2000-02-10 10:32 hardaker
+
+ - (hr_swinst.c): minor fixes pointed out by Michael.
+
+2000-02-10 10:28 hardaker
+
+ - (snmpv3.c): fix setup engineID buffer overflow found by Mike Baer.
+
+2000-02-10 08:39 nba
+
+ - man/*: set the dates on the pages to reflect the revision date
+
+2000-02-10 08:13 mslifcak
+
+ fix varargs decl/defn of snmp_log
+
+2000-02-10 08:00 mslifcak
+
+ typedef int ssize_t (one line added) for build on SunOS 4.
+
+2000-02-10 07:54 hardaker
+
+ - (FAQ): mention the tutorial.
+
+2000-02-10 07:14 daves
+
+ - (FAQ): Explicit examples of sending traps by hand
+
+2000-02-10 04:41 daves
+
+ - (snmplib/{snmp_api,snmp_client}.c apps/snmpnetstat/inet6.c):
+ - Comment unused code more informatively as to why it is omitted.
+
+2000-02-09 13:53 hardaker
+
+ - (eval_tools.sh, T023snmpv3getMD5DES, T024snmpv3getSHA1, T025snmpv3getSHADES):
+ - skip ssl tests we can't perform.
+
+2000-02-09 13:51 mslifcak
+
+ include sys/param.h to get PATH_MAX on FreeBSD.
+
+2000-02-09 13:38 hardaker
+
+ - (Sv3SHADESconfig, T024snmpv3getSHA1, T025snmpv3getSHADES):
+ - make SHA tests actually work.
+
+2000-02-09 13:32 hardaker
+
+ - (Sv3configsha): sha config support
+
+2000-02-09 13:31 hardaker
+
+ - (T003snmpv1getfail, T016snmpv2cgetfail, T017snmpv2ctov1getfail,
+ T018snmpv1tov2cgetfail): fix for proper ACM error outputs.
+
+2000-02-09 13:30 mslifcak
+
+ Define SNMP_MAXPATH, and use it.
+
+2000-02-09 13:30 hardaker
+
+ - (T024snmpv3getSHA1 T025snmpv3getSHADES): new tests
+
+2000-02-09 13:16 hardaker
+
+ - (UCD-SNMP-MIB.txt): mention a new ucdExperimental registration (wavlan).
+
+2000-02-09 13:16 hardaker
+
+ - (agent_callbacks.h, agent_registry.c, agent_registry.h,
+ snmp_agent.c, vacm_vars.c):
+ - fix posible acm DoS problems by checking access tables early on.
+
+2000-02-09 11:38 hardaker
+
+ - (hr_swinst.c): patch from redhat for better RPM support.
+
+2000-02-09 10:43 hardaker
+
+ - (configure.in): change mode to autoconf.
+
+2000-02-09 10:41 hardaker
+
+ - (Makefile.in): fix rsnmp build. Really. I mean it.
+
+2000-02-09 10:41 hardaker
+
+ - (hr_filesys.c, hr_storage.c): Patch from Andy HOOD:
+ - Solaris patches.
+
+2000-02-09 10:37 hardaker
+
+ - (Makefile.in):
+ - fix rsnmp.made.
+ - use $(MAKE).
+
+2000-02-09 08:41 hardaker
+
+ - (vmstat_solaris2.c, vmstat_solaris2.h): Update from Jochen Kmietsch
+
+2000-02-07 11:49 marz
+
+ oops missing important fix for win32 build - fd_set must be same size as in winsock
+
+2000-02-07 11:18 mslifcak
+
+ Undo last change; on Sun, additional platform info was not obtained;
+ the proper solution would be to remove the second token (hostname).
+
+2000-02-07 10:43 mslifcak
+
+ Keep customer's nodename out of the published 'uname' information.
+
+2000-02-07 07:20 hardaker
+
+ - (PORTING): Michael likes diff -u.
+
+2000-02-06 06:11 nba
+
+ - read_config.c: Fix one final ':' to ENV_SEPARATOR_CHAR
+
+2000-02-05 17:39 hardaker
+
+ - (snmpv3.c): correct some awful text -> engineID creation mistakes.
+
+2000-02-05 08:37 hardaker
+
+ - (snmptrapd.c): fix wrapped line continuation in usage message.
+
+2000-02-05 06:56 marz
+
+ fix version number
+
+2000-02-04 18:55 marz
+
+ weird delay in creation of pid files
+
+2000-02-04 18:21 marz
+
+ brain-o
+
+-------------------------------------------------------------------------------
+
+Changes: V4.1 -> V4.1.1
+
+marz 5 Feb 00 06:56:43
+ fix version number
+
+hardaker 5 Feb 00 08:37:27
+ - (snmptrapd.c): fix wrapped line continuation in usage message.
+
+hardaker 5 Feb 00 17:39:54
+ - (snmpv3.c): correct some awful text -> engineID creation mistakes.
+
+nba 6 Feb 00 06:11:59
+ - read_config.c: Fix one final ':' to ENV_SEPARATOR_CHAR
+
+hardaker 7 Feb 00 07:20:24
+ - (PORTING): Michael likes diff -u.
+
+mslifcak 7 Feb 00 10:43:29
+ Keep customer's nodename out of the published 'uname' information.
+
+mslifcak 7 Feb 00 11:18:26
+ Undo last change; on Sun, additional platform info was not obtained;
+ the proper solution would be to remove the second token (hostname).
+
+marz 7 Feb 00 11:49:01
+ oops missing important fix for win32 build - fd_set must be same size as in winsock
+
+hardaker 9 Feb 00 08:41:11
+ - (vmstat_solaris2.c, vmstat_solaris2.h): Update from Jochen Kmietsch
+
+hardaker 9 Feb 00 10:37:00
+ - (Makefile.in):
+ - fix rsnmp.made.
+ - use $(MAKE).
+
+hardaker 9 Feb 00 10:41:14
+ - (hr_filesys.c, hr_storage.c): Patch from Andy HOOD:
+ - Solaris patches.
+
+hardaker 9 Feb 00 10:41:44
+ - (Makefile.in): fix rsnmp build. Really. I mean it.
+
+hardaker 9 Feb 00 10:43:05
+ - (configure.in): change mode to autoconf.
+
+hardaker 9 Feb 00 11:38:42
+ - (hr_swinst.c): patch from redhat for better RPM support.
+
+hardaker 9 Feb 00 13:16:17
+ - (agent_callbacks.h, agent_registry.c, agent_registry.h,
+ snmp_agent.c, vacm_vars.c):
+ - fix posible acm DoS problems by checking access tables early on.
+
+hardaker 9 Feb 00 13:16:58
+ - (UCD-SNMP-MIB.txt): mention a new ucdExperimental registration (wavlan).
+
+mslifcak 9 Feb 00 13:31:01
+ Define SNMP_MAXPATH, and use it.
+
+hardaker 9 Feb 00 13:31:24
+ - (T003snmpv1getfail, T016snmpv2cgetfail, T017snmpv2ctov1getfail,
+ T018snmpv1tov2cgetfail): fix for proper ACM error outputs.
+
+mslifcak 9 Feb 00 13:51:12
+ include sys/param.h to get PATH_MAX on FreeBSD.
+
+hardaker 9 Feb 00 13:53:37
+ - (eval_tools.sh, T023snmpv3getMD5DES, T024snmpv3getSHA1, T025snmpv3getSHADES):
+ - skip ssl tests we can't perform.
+
+daves 10 Feb 00 04:41:10
+ - (snmplib/{snmp_api,snmp_client}.c apps/snmpnetstat/inet6.c):
+ - Comment unused code more informatively as to why it is omitted.
+
+daves 10 Feb 00 07:14:51
+ - (FAQ): Explicit examples of sending traps by hand
+
+hardaker 10 Feb 00 07:54:46
+ - (FAQ): mention the tutorial.
+
+mslifcak 10 Feb 00 08:00:26
+ typedef int ssize_t (one line added) for build on SunOS 4.
+
+mslifcak 10 Feb 00 08:13:14
+ fix varargs decl/defn of snmp_log
+
+nba 10 Feb 00 08:40:04
+ - man/*: set the dates on the pages to reflect the revision date
+
+hardaker 10 Feb 00 10:28:21
+ - (snmpv3.c): fix setup engineID buffer overflow found by Mike Baer.
+
+hardaker 10 Feb 00 10:32:08
+ - (hr_swinst.c): minor fixes pointed out by Michael.
+
+mslifcak 10 Feb 00 10:33:47
+ *** empty log message ***
+
+mslifcak 10 Feb 00 11:14:58
+ fix for older platforms to use pass_persist; not included by default.
+
+hardaker 11 Feb 00 06:58:03
+ - (acconfig.h, config.h.in): Dont define PROCFIXCMD and EXECFIXCMD by default.
+
+hardaker 11 Feb 00 12:22:10
+ - (acconfig.h, config.h.in): change perl path to /usr/bin.
+
+hardaker 11 Feb 00 12:29:37
+ - (snmp_agent.c): patch from Niels:
+ - don't send autherror responses for v2c.
+ - send authFailure trap.
+
+hardaker 11 Feb 00 12:30:02
+ - (sysORTable.h): Patch from Niels Baggesen:
+ - compiler warning fix.
+
+hardaker 11 Feb 00 12:44:23
+ - (local/Makefile.in): fix for seperate build path
+
+hardaker 11 Feb 00 12:49:03
+ - (local/Makefile.in): don't cp for snmpcheck
+
+hardaker 11 Feb 00 12:53:15
+ - (T016snmpv2cgetfail, T017snmpv2ctov1getfail): update for Timeout for v2c.
+
+hardaker 11 Feb 00 13:29:29
+ - (version.h bug-report sedscript.in): version tag ( 4.1.1 )
+
+
+-------------------------------------------------------------------------------
+
+Changes: V4.0.1 -> V4.1
+
+mslifcak 24 Aug 99 04:44:47
+ Clean CRs from read_config,snmp_logging; comment define USE_ASN_SHORT_LEN.
+
+mslifcak 24 Aug 99 05:11:13
+ Remove ASN_SHORT_LEN hack - known to dump core in agent.
+
+mslifcak 24 Aug 99 06:19:49
+ Add "." to PATH for RUNTESTS; Drop optreset to build most platforms
+
+mslifcak 24 Aug 99 10:25:53
+ -(testing/eval_tools) - let some (AIX) agents settle before firing requests.
+
+hardaker 24 Aug 99 12:48:21
+ - (vacm_vars.c): correct sysORTable entry.
+
+hardaker 24 Aug 99 13:36:35
+ - (snmpusm.c): check for null response pointer.
+
+hardaker 24 Aug 99 13:37:31
+ - (snmp_parse_args.c, default_store.h, snmp_api.c, snmpv3.c):
+ - provide defVersion token support in snmp.conf (sort of hackish).
+
+hardaker 24 Aug 99 13:41:18
+ - (TODO): remove snmpv3 support :-)
+
+mslifcak 24 Aug 99 14:05:39
+ -(top/Makefile.in) - remove more generated files with distclean rule.
+
+hardaker 24 Aug 99 14:15:40
+ - (all_system.h): remove. again.
+
+mslifcak 24 Aug 99 14:17:33
+ -(host/hr_swrun;mibII/icmp,ip;ucd-snmp/disk,proc) log_perror --> snmp_log_perror
+
+mslifcak 24 Aug 99 15:14:18
+ -(smux.c) apply Nick Amato's patch: prevent SMUX close on parse or error.
+
+hardaker 24 Aug 99 15:59:42
+ - (snmp_api.c): remove version setting in snmp_api.c. Not needed there.
+
+hardaker 24 Aug 99 16:01:55
+ - (NEWS): 4.0.1 update
+
+mslifcak 24 Aug 99 16:05:15
+ -(configure.*) move statement about ucdDemoPublic into comment field.
+
+mslifcak 24 Aug 99 16:49:22
+ -(testing/*) run tests when package is not installed, and when
+ the build tree is not the same as the source tree.
+
+hardaker 24 Aug 99 17:13:25
+ - (ChangeLog): update for 4.0.1
+
+hardaker 24 Aug 99 17:14:50
+ - (version.h bug-report sedscript.in): version tag ( 4.0.1 )
+
+mslifcak 24 Aug 99 17:39:54
+ -(RUNTESTS) export PATH before use
+
+mslifcak 24 Aug 99 17:43:04
+ -(testing/Makefile.in) no need to build targets in test rule.
+
+mslifcak 26 Aug 99 13:18:31
+ -(testing/RUNTESTS) improved PATH set
+
+mslifcak 26 Aug 99 13:40:13
+ -(testing/Makefile.in) don't built targets that are no longer used
+
+mslifcak 27 Aug 99 07:35:10
+ -(configure*, sedscript*) change ...EXTENIS... to ...EXTENSI...
+
+mslifcak 27 Aug 99 08:03:46
+ Howard Spindel suggests an API for traps with pass_persist.
+
+hardaker 27 Aug 99 09:17:08
+ - (icmp.c, interfaces.c, ip.c, route_write.c, tcp.c, udp.c, var_route.c):
+ - Susanne Osted pointed out a lack of #if HAVE_SYS_PARAM_H.
+
+hardaker 28 Aug 99 07:19:16
+ - (Makefile.in): install snmp_alarm.3.
+
+hardaker 28 Aug 99 07:29:48
+ - (acconfig.h, config.h.in, configure, configure.in, read_config.c):
+ - add /etc/snmp to default conf file path to make RedHat happy.
+
+hardaker 30 Aug 99 09:33:41
+ - (Makefile.in, agent_read_config.c, agent_registry.c, agent_trap.c,
+ agent_trap.h, ds_agent.h, snmp_agent.c, snmp_agent.h, snmp_vars.c,
+ snmpd.c, util_funcs.c, sysORTable.c, callback.c, callback.h,
+ default_store.h, read_config.c, snmp_api.c):
+ - restructure the agent into two pieces: a library and a application.
+ - needs much more work.
+ - many parameters are now controlled by new default_store settings
+ to help relieve compile time bindings.
+ - merge init_snmp and the custom version called inside the agent.
+ - add a new place for trap specific agent code (agent_trap.[ch]).
+ - probably other things I've forgotten that I did.
+
+hardaker 30 Aug 99 09:38:18
+ - (client.c, master.c, master_request.c, protocol.c, subagent.c):
+ - debugging statements.
+ - use new default_store settings instead of external variables.
+
+hardaker 30 Aug 99 10:30:56
+ - (master.c, master_request.c): yet more debugging.
+
+nba 30 Aug 99 13:02:18
+ - man/snmpd.conf.5.def: document smuxpeer directive
+
+nba 30 Aug 99 13:03:40
+ - apps/snmp_parse_args.c: properly handle MIB:oid construct
+
+nba 30 Aug 99 13:05:02
+ - apps/snmptrapd.c: fix argument parser
+
+nba 31 Aug 99 00:08:45
+ - agent/snmpd.c: don't try to parse a packet when there is an error in
+ recvfrom
+
+mslifcak 31 Aug 99 08:17:24
+ -(agent_trap.c) fix recent memory leak, and sizeof(objid_snmptrap) bug.
+
+mslifcak 31 Aug 99 09:26:14
+ -(agent_trap.c) always free PDU after snmp_send.
+
+daves 2 Sep 99 06:38:16
+ - (agent/mibgroup/misc/ipfwacc.h): Fix MIB location of ipfwacc module
+
+daves 2 Sep 99 06:38:53
+ - (agent/mibgroup/misc/ipfwacc.c): Fix MIB location of ipfwacc module
+
+hardaker 2 Sep 99 07:07:04
+ - (subagent.c): shutdown_subagent -> subagent_shutdown so configure
+ doesn't find it.
+
+hardaker 2 Sep 99 08:52:48
+ - (subagent.c): opps. Forgot a shutdown name change instance.
+
+hardaker 3 Sep 99 13:15:15
+ - (history.c, history.h, snmp_vars.linux.h): removed. No longer needed.
+
+hardaker 3 Sep 99 13:15:33
+ - (Makefile.in): install agent header files.
+
+hardaker 3 Sep 99 13:27:13
+ - (Makefile.in):
+ - install libagent.a.
+ - mkdirheir on needed new installation directories.
+
+hardaker 3 Sep 99 13:30:36
+ - (snmplib/Makefile.in): install more library headers.
+
+hardaker 3 Sep 99 14:28:46
+ - (snmp_vars.c): don't fall off the end of the search tree.
+
+hardaker 3 Sep 99 15:01:39
+ - (FAQ): more BSDI system versions listed.
+
+nba 6 Sep 99 23:53:07
+ - (man/snmp_api.3 snmplib/snmp_api.c agent/snmpd.c apps/snmptrap.c):
+ fix memory leak when agent sends traps by implementing the missing
+ free of TRAP pdu in snmp_send.
+
+nba 6 Sep 99 23:55:38
+ - if.c: correct calls of snmp_fix_pdu to use GETNEXT
+
+mslifcak 7 Sep 99 14:47:18
+ -(parse.*) fix small memory leaks; allow INDEX{INTEGER...} clauses;
+ allow larger DESCRIPTION clauses [max 8192].
+
+mslifcak 7 Sep 99 15:22:14
+ snmpv3.c - silence type warning from MSVC++.
+
+mslifcak 7 Sep 99 15:23:02
+ (default_store.*) - make 3rd param to ds_set_string type of const char *.
+
+mslifcak 7 Sep 99 15:23:51
+ (win32/config.h) - set SNMPCONFPATH to succeed compile;
+ (win32*libsnmp.def) - add new snmp_get_token to list.
+
+mslifcak 7 Sep 99 15:32:00
+ -(snmp_api.h) struct pdu and snmp_session agree: long type for version member.
+
+mslifcak 7 Sep 99 15:32:59
+ -(parse.c) remove unneeded strdup to File variable from init_mib_internals.
+
+mslifcak 7 Sep 99 15:57:13
+ -(parse.c) fix Unlinked OID print when object identifier has no parent.
+
+mslifcak 7 Sep 99 20:12:57
+ -(agent_trap.c,snmptrap.c,snmp_api.[3c]) - snmp_free_pdu fix Bug #54 per Niels B.
+ -(snmpnetstat/if.c) - fix for GETNEXT per Niels B.
+
+mslifcak 7 Sep 99 20:19:52
+ snmptrap.c - rework fix bug #54 (missed else).
+
+mslifcak 8 Sep 99 05:16:34
+ include read_config.h
+
+nba 8 Sep 99 07:45:54
+ - (configure.in, loadave.c): Solaris 2.7 has getloadavg prototype
+
+nba 8 Sep 99 07:46:51
+ - snmp_api.h: move inclusion protection to the real beginning/end of the file
+
+nba 8 Sep 99 07:48:03
+ - var_struct.h: the Agentx code uses unsigned values for the variable type.
+
+nba 8 Sep 99 07:50:37
+ - (various): fix compiler warnings
+
+nba 8 Sep 99 07:51:26
+ - snmpd.1.def: fix a formatting problem
+
+nba 8 Sep 99 07:52:23
+ - apps/snmptrapd.c: fix argument processing (-ld and similar)
+
+mslifcak 8 Sep 99 13:00:40
+ -(testing/RUNTESTS) prefix PATH with . and .. , as the script changes dir.
+
+mslifcak 8 Sep 99 13:04:55
+ -(snmplib/snmp_client.*) add snmp_split_pdu, snmp_varbind_len methods.
+
+mslifcak 8 Sep 99 17:02:37
+ mibincl.h, mibgroup/mibII/* - fixup for CygWin32 build
+
+mslifcak 8 Sep 99 17:49:13
+ -(config*,win32/*,snmplib/*) resource locking originally from Markku Laukkanen
+
+mslifcak 8 Sep 99 17:52:47
+ -(mt_support.*) Original by Markku Laukkanen, changes by M. Slifcak
+
+mslifcak 8 Sep 99 22:30:29
+ -(smux.c) var_smux_write fixed per Mike Michaud and Nick Amato
+
+mslifcak 8 Sep 99 22:34:37
+ -(mibincl.h) comment out duplicate #include header lines.
+
+daves 9 Sep 99 01:32:15
+ - (mibs/SNMPv2-CONF.txt): Omit unnecessary import clause
+
+mslifcak 9 Sep 99 02:21:50
+ -(winstub.c) Hack to allow snmpnetstat -a to work on AIX4 (sic).
+
+mslifcak 9 Sep 99 02:31:26
+ -(*config*) turn on resource locking with --enable-reentrant.
+
+mslifcak 9 Sep 99 13:59:26
+ -(mib.c, parse.c) mib.c print_tree_node test display null type with range
+ parse.c work around core dump freeing TCs that specify ranges.
+
+nba 12 Sep 99 21:50:23
+ - var_route.c: Linux cleanup. Required for Linux/SPARC
+
+nba 12 Sep 99 21:57:18
+ - agent/*, snmplib/*: malloc fixes, some provoked by the corrected
+ snmp_send semantics.
+
+nba 12 Sep 99 21:58:17
+ - TESTCONF.sh: fix some exports to export the right variable.
+
+nba 12 Sep 99 21:59:34
+ - protocol.c: add a missing include file.
+
+nba 12 Sep 99 22:00:33
+ - snmp_impl.h: removed some unused/unneeded defines/structs
+
+nba 13 Sep 99 04:35:18
+ - var_route.c: Linux cleanup. Required for Linux/SPARC
+
+nba 13 Sep 99 13:32:07
+ - snmpd.c: fix a buffer overflow
+
+hardaker 13 Sep 99 15:01:54
+ - (agent_callbacks.h, agent_read_config.c, agent_registry.c,
+ agent_registry.h, snmp_agent.c, snmp_vars.c, snmpd.c, subagent.c,
+ subagent.h, sysORTable.c, vacm_vars.c, vacm_vars.h):
+ - further separation of agent church and state:
+ - use callbacks everywhere needed to not call mib module code directly.
+ - get rid of all instances of USING_ in libagent code.
+
+mslifcak 13 Sep 99 20:20:54
+ -(snmp_api.c) re-assert Niels' patch to snmp_send to free v2/v1 Trap-PDUs
+
+mslifcak 14 Sep 99 09:54:05
+ -(FAQ, man/snmpcmd.1, snmplib/parse.*) add replace MIB capability(experimental)
+
+marz 14 Sep 99 13:00:12
+ (apps/snmp_parse_args.c, snmplib/snmp_api.[ch]): fix spurious error message when snmp_parse_oid fails
+
+mslifcak 14 Sep 99 13:22:39
+ parse.c - another fix for node: consider NULL name or NULL parent
+
+mslifcak 15 Sep 99 06:08:32
+ include mibgroup/mib_module_includes.h for benefit of mib_module_dot_conf.h
+
+hardaker 15 Sep 99 09:45:35
+ - (Makefile.in, snmp_close.3, snmp_free_pdu.3, snmp_open.3,
+ snmp_read.3, snmp_select_info.3, snmp_send.3,
+ snmp_sess_async_send.3, snmp_sess_close.3, snmp_sess_error.3,
+ snmp_sess_init.3, snmp_sess_open.3, snmp_sess_read.3,
+ snmp_sess_select_info.3, snmp_sess_send.3, snmp_sess_sess_timeout.3,
+ snmp_sess_session.3, snmp_timeout.3): Patch from Mark H. Wood:
+ - create some fake sourcing man pages for functions.
+
+mslifcak 15 Sep 99 11:30:58
+ fine tuning mt support
+
+mslifcak 16 Sep 99 14:16:38
+ -per agreement with Markku, no support needed for Solaris-specific threads.
+
+hardaker 17 Sep 99 07:17:21
+ - (snmp_api.3): Patch from Mark H. Wood:
+ - fix comments.
+
+mslifcak 17 Sep 99 11:19:42
+ -(parse.c) - remove unneeded use of static var "last"
+
+mslifcak 17 Sep 99 11:24:48
+ -remove old-style init for replace mib feature.
+
+mslifcak 17 Sep 99 11:42:17
+ make module_map* and tokens structures static (only used in parse.c ?)
+
+hardaker 17 Sep 99 15:37:41
+ - (configure): update to 2.13.
+
+daves 21 Sep 99 09:21:59
+ - (snmplib/snmp_api.c): handle adding 'error' type variables to a PDU
+
+daves 21 Sep 99 09:25:25
+ - (agent/mibgroup/agentx/protocol.c): Handle parsing null-length variables
+
+daves 21 Sep 99 09:32:27
+ - (agent_registry.c snmpd.c): Simple run-time dump of registered MIBs
+
+mslifcak 21 Sep 99 10:40:43
+ -(mib.c) undo erroneous change to init_mib (thanks NB!)
+
+daves 22 Sep 99 09:27:37
+ - (agent/snmpd.c): stupid typo
+
+daves 22 Sep 99 09:31:08
+ - (agent/agent_registry.c): stupid typo
+
+daves 22 Sep 99 09:33:51
+ - (agent/agent_registry.[ch]): Provide method for prioritised registration
+
+daves 22 Sep 99 09:35:09
+ - (agent/mibgroup/mibII/sysORTable.c):
+ - Ensure local sysORTable takes precedence over subagent versions
+
+daves 22 Sep 99 09:54:02
+ - (agent_registry.c snmp_vars.c var_struct.h):
+ Change the way the MIB registry handles registered ranges.
+ This should work more reliably (as well as being rather simpler, IMHO)
+
+daves 22 Sep 99 09:58:12
+ - (agent_registry.c): remove redundant routines
+
+daves 22 Sep 99 10:00:56
+ - (agent_registry.c): Ensure registry is initialised correctly on subagents
+
+daves 22 Sep 99 10:01:45
+ - (mibgroup/agentx/master_request.c): Improved AgentX response handling
+
+mslifcak 22 Sep 99 12:51:00
+ -(snmp_api.c) - Improved error status aggregation.
+
+hardaker 27 Sep 99 16:22:20
+ - (read_config.c): Opps: DS_LIB_DONT_READ_CONFIGS needed an !.
+
+hardaker 28 Sep 99 16:52:04
+ - (Makefile.in, mib_modules.c, mib_modules.h, snmp_vars.c, snmpd.c):
+ - make libucdagent and libucdmibs as seperate libraries. In theory,
+ you shouldn't need libucdmibs to use libucdagent.
+
+daves 29 Sep 99 11:14:42
+ - (snmplib/snmp_api.c): protect snmp_close() against a null Sessions list
+
+daves 29 Sep 99 11:17:01
+ - (mt_support.h snmp_api.[ch]): Support for session and incoming transaction IDs
+
+daves 29 Sep 99 11:23:40
+ - (agent_registry.c): Correct value of default registration priority
+
+daves 29 Sep 99 11:36:43
+ - (agent_registry.[ch]):
+ - Improve registry error handling
+ - Correctly handle unregistering MIB regions
+
+daves 29 Sep 99 11:38:22
+ - (agent_registry.c):
+ - 'Children' nodes now have a different status, and shouldn't be freed. Oops!
+
+daves 29 Sep 99 11:43:00
+ - (agent_registry.[ch]): Provision to unregister MIBs by session
+
+daves 29 Sep 99 11:46:02
+ - (agent/snmp_vars.c):
+ - Move setting agent start time to earlier in the initialisation sequence
+ (so that it can be overridden in subagents with the master's value)
+
+daves 29 Sep 99 11:48:55
+ - (agent/mibgroup/mibII/sysORTable.c): Change in MIB registration interface
+
+daves 29 Sep 99 12:19:56
+ - (agent/mibgroup/agentx/*): Assorted improvements!
+
+mslifcak 29 Sep 99 14:31:48
+ Robust copy of information to tree, import_list, display hints.
+
+hardaker 29 Sep 99 16:35:43
+ - (config.h.in, configure, configure.in):
+ - fix RANLIB testing for --enable-shared.
+
+hardaker 29 Sep 99 16:36:07
+ - (README): added Mike Michaud to the thank you list.
+
+hardaker 29 Sep 99 16:38:34
+ - (header_complex.c, header_complex.h):
+ - new extraction and freeing functions.
+ - bug fix, missing a malloc size by one (electric fence is very cool).
+
+hardaker 29 Sep 99 16:38:59
+ - (client.c): thats "timeval" not "timevale" Dave (hehe).
+
+hardaker 29 Sep 99 16:39:21
+ - (client.h): define DEFAULT_MIB_PRIORITY to 255.
+
+hardaker 29 Sep 99 16:39:42
+ - (master_admin.c): -Wall fixes and found a missing }.
+
+hardaker 29 Sep 99 16:40:08
+ - (pass.c): run ntohl on ip addresses stored in a long.
+
+hardaker 29 Sep 99 16:40:30
+ - (mib2c.vartypes.conf): removed extra \n.
+
+hardaker 29 Sep 99 17:01:28
+ - (agent_registry.c, agent_registry.h): fix bugs.
+
+hardaker 29 Sep 99 17:01:50
+ - (mib_modules.c): include netinet/in.h
+
+mslifcak 29 Sep 99 23:42:49
+ Remove unused file.. snmplib/hpux.c
+
+daves 30 Sep 99 01:09:25
+ - (mibgroup/host/hr_system.c):
+ - protect against NULL utmp file (from Fabrice Dupre)
+
+daves 1 Oct 99 09:48:20
+ - (agent/Makefile.in): Fix incompatability in agent library names
+
+daves 2 Oct 99 14:28:20
+ - (mibgroup/agentx/master_admin.c mibgroup/agentx/subagent.c):
+ - Fix a problem with re-used PDU structures being freed twice.
+
+daves 4 Oct 99 03:58:22
+ - (agent_registry.[ch] mibgroup/agentx/client.h):
+ - consolidate definitions of default MIB registration priority
+
+daves 4 Oct 99 09:53:48
+ - (agent_registry.[ch] snmp_vars.h mibII/sysORTable.c
+ agentx/client.[ch] agentx/master_admin.c):
+ - Handle MIB range registration, and clean up wrapper interfaces
+
+daves 4 Oct 99 09:58:26
+ - (mib_modules.c mibgroup/agentx/subagent.[ch]):
+ - Ensure subagent is initialised early (prior to MIB registration, etc)
+
+daves 4 Oct 99 10:15:38
+ - (snmplib/callback.h): Increase number of application callbacks supported
+
+daves 4 Oct 99 10:17:53
+ - (agent_callbacks.h mibgroup/mibII/sysORTable.[ch]
+ mibgroup/agentx/master_admin.c mibgroup/agentx/subagent.c):
+ - Complete subagent handling of Agent Capabilities / sysORTable
+
+daves 4 Oct 99 10:22:25
+ - (agentx/client.[ch] agentx/master_admin.c): Trivial 'ping' implementation
+
+nba 4 Oct 99 11:48:51
+ - (snmp_api?, int64.? snmptrap.c): add some error checking for variables
+
+nba 4 Oct 99 11:50:50
+ - Makefile.in: always use $(MAKE) for make in Makefiles
+
+nba 4 Oct 99 11:52:25
+ - configure.in: remove -pedantic from --with-developer, and the system headers
+ are not prepared for it (at least on Linux and NetBSD)
+
+nba 4 Oct 99 13:38:19
+ - various: include additions and fixes to kill warnings
+
+hardaker 4 Oct 99 13:51:51
+ - (system_mib.c): make sysServices configurable.
+
+nba 4 Oct 99 13:52:20
+ - subagent.h, subagent.c, mib_modules.c: pre_init_subagent confuses
+ configure into believing there is a init_subagent function.
+ Rename to subagent_pre_init
+
+hardaker 4 Oct 99 16:32:19
+ - (header_complex.c, header_complex.h): added header_complex_find_entry().
+
+daves 5 Oct 99 07:23:45
+ - (agentx/master_request.c agentx/subagent.c): Working SET support
+
+nba 5 Oct 99 21:49:22
+ - snmp_debug.h: make the DEBUG* macros safe for use in compound statements
+
+nba 5 Oct 99 22:18:46
+ - snmp_parse_args.c: fixes to report invalid engineId
+
+nba 5 Oct 99 22:22:54
+ - subagent.c: include system.h for prototype for calculate_time_diff
+
+hardaker 6 Oct 99 08:57:42
+ - (fixproc): new commented version.
+
+hardaker 6 Oct 99 16:31:53
+ - (acconfig.h, config.h.in, read_config.c, snmp_api.c, snmp_client.c):
+ - Save and parse older persistent storage files to make sure data is
+ not lost during storage crashes.
+ - Fix SNMPv3 engineID probes: PDU's are allowed to have a NULL varbindlist.
+
+daves 7 Oct 99 07:26:20
+ - (agent_trap.c agent_trap.h agent_read_config.c snmpd.h):
+ - Re-write of agent trap handling:
+ Provision for v1 traps with varbinds
+ Consolidate v1 and v2 trap sink lists
+ Preliminary INFORM support
+
+daves 7 Oct 99 08:42:15
+ - (agent_trap.[ch]): Improve accessibility for subagents
+
+daves 7 Oct 99 09:01:25
+ - (agentx/subagent.c agentx/master_admin.c): Notification support
+
+mslifcak 12 Oct 99 05:58:28
+ mib.c : quick_print is exposed for CMU_COMPATIBLE builds.
+ lcd_time.c : commented unused dump_etimelist_entry under SNMP_TESTING_CODE.
+
+mslifcak 12 Oct 99 06:07:44
+ Define address length for FreeBSD platform.
+
+mslifcak 13 Oct 99 03:54:02
+ add missing proto for save_persistent.
+
+nba 13 Oct 99 07:09:36
+ - master_admin.c, system_mib.h: includes for prototypes
+
+mslifcak 15 Oct 99 07:09:14
+ -(default_store.c, callback.c) fix
+ bug in array-boundary check in snmplib/callback.c
+ reported by Bert Holstein 15 Oct 1999.
+
+hardaker 20 Oct 99 17:26:59
+ - (header_complex.c): parsed strings from oid's include null terminators.
+
+hardaker 20 Oct 99 18:08:39
+ - (mib.c): enable oid parser to handle simple embedded strings in oids
+ and to translate them into oid segments.
+ EG: .1.3.\"hello\".\'hi\' -> .1.3.5.104.101.108.108.111.104.105
+
+hardaker 21 Oct 99 10:07:00
+ - (mib.c): enable oidname."hi".'there' in get_module_node() as well.
+
+mslifcak 21 Oct 99 10:20:15
+ Note SNMPERR_UNKNOWN_OBJID error without specifying snmp_errno _outside_ the library.
+
+mslifcak 21 Oct 99 10:26:29
+ Note SNMPERR_UNKNOWN_OBJID error from within the library.
+
+mslifcak 21 Oct 99 10:37:49
+ mib.c - restore line stomped in my last update.
+ read_config.c - drop unused variable.
+ snmp_api.c - new method snmp_open_ex replaces set internal hook functions.
+
+mslifcak 21 Oct 99 10:39:09
+ Fixups for building with MSVC++. (no hpux.c, supply MAX_PERSISTENT_BACKUPS).
+
+mslifcak 21 Oct 99 10:41:38
+ reminders for snmp_sess_perror usage after open.
+ snmptable.c - open/close session from main().
+ netstat/main.c - use snmp_sess_perror.
+
+mslifcak 21 Oct 99 10:42:28
+ use snmp_open_ex.
+
+mslifcak 21 Oct 99 12:09:51
+ Fix BUG#78
+
+mslifcak 21 Oct 99 12:31:28
+ small patch from M. Laukkanen to fix HP aCC build.
+
+nba 21 Oct 99 12:52:26
+ - memory_solaris.c: reorder computations to avoid overflow.
+
+nba 21 Oct 99 12:54:41
+ - memory_solaris2.c: reorder computations to avoid overflow.
+
+mslifcak 22 Oct 99 06:29:16
+ In fixing bug #83 on 4.0 branch, discovered that 3.6 branch
+ did not have "octet" token support. Added.
+
+mslifcak 22 Oct 99 06:29:52
+ Fix BUG #83.
+
+mslifcak 22 Oct 99 07:39:01
+ Removed duplicated variable in a nested block. ARg!
+
+hardaker 22 Oct 99 09:59:39
+ - (mib.c): enable hex strings inside oids.
+
+mslifcak 22 Oct 99 10:12:26
+ Display _some_ octet string indices of object identifiers as quoted printable.
+ Should be expanded to handle other INDEX types.
+
+hardaker 22 Oct 99 15:28:59
+ - (acconfig.h, config.h.in, configure, configure.in, keytools.c,
+ keytools.h, scapi.c):
+ - use openssl for md5/sha support (from Olafur Gudmundsson).
+
+hardaker 22 Oct 99 15:29:38
+ - (mib.c): print string based OIDs better.
+
+hardaker 24 Oct 99 08:24:02
+ - (configure, configure.in): SNMPCONFPATH uses sysconfdir not datadir.
+
+hardaker 24 Oct 99 08:24:21
+ - (README.snmpv3): typo.
+
+hardaker 24 Oct 99 08:25:35
+ - (mib.c): fix "mibs" and "mibdirs" .conf directives to properly
+ handle multiple calls (additive) and '+'s and things.
+
+hardaker 24 Oct 99 08:27:28
+ - (read_config.c):
+ - premib directives weren't getting read due to a missing negation (!).
+ - more parsing debugging statements added.
+
+mslifcak 25 Oct 99 08:06:32
+ minor rework to clarify signed compares and remove unused variables.
+
+nba 25 Oct 99 13:39:27
+ - interfaces.c: fix a memory leak in the Linux part
+
+nba 25 Oct 99 13:41:01
+ - configure.in, proc.c: support for FreeBSD 2.1 where ps doesn't have c flag
+
+nba 25 Oct 99 13:51:22
+ - hr_system.c: play it safe when no utmp file exists
+
+nba 25 Oct 99 13:53:26
+ - snmptrapd.c, snmptrapd_handlers.c: support for traphandle DEFAULT
+
+nba 25 Oct 99 13:56:26
+ - RUNTESTS, TESTCONF.sh eval_onescript.sh eval_tools.sh: support non-bash
+ shells (echo -n vs echo \\c). Don't require . in PATH
+
+nba 25 Oct 99 13:58:03
+ - snmptranslate.c: let ':' in OID do "the right thing"
+
+nba 25 Oct 99 13:59:05
+ - pass.c: do an htonl when passing ip address
+
+nba 25 Oct 99 14:07:11
+ - snmpdelta.c: COUNTER64 will dereference freed pointer
+
+nba 25 Oct 99 14:08:25
+ - snmpd.conf.5.def: minor quirk
+
+nba 25 Oct 99 14:13:57
+ - *: configure support for dmalloc malloc debugger (www.dmalloc.com)
+
+hardaker 25 Oct 99 14:35:51
+ - (snmptranslate.c): enable -p printing of only a section of the mib tree.
+
+hardaker 25 Oct 99 16:05:03
+ - (snmptranslate.c, parse.c): hack to do wild card searches for a mib node.
+
+mslifcak 26 Oct 99 10:34:40
+ Allow unsigned range for counter/gauge/timeticks (fix BUG#84 per Sander Steffann).
+
+hardaker 27 Oct 99 14:33:33
+ - (Makefile.in): fix up ucd-snmp-config.h building.
+
+hardaker 27 Oct 99 14:34:10
+ - (snmp_agent.h): prototype agent_check_and_process().
+
+hardaker 27 Oct 99 14:34:55
+ - (Makefile.in, ucd-snmp-agent-includes.h): added a header file to
+ wrap around the various agent include files.
+
+hardaker 27 Oct 99 14:35:27
+ - (master_admin.c): simple debugging so you can watch stuff register.
+
+hardaker 27 Oct 99 14:36:21
+ - (Makefile.in, default_store.3, default_store.3.bot,
+ default_store.3.h, default_store.3.top, snmp_agent_api.3):
+ - new manual pages: default_store.3, snmp_agent_api.3.
+
+hardaker 27 Oct 99 14:36:55
+ - (default_store.h):
+ - mark regions to be included in the default_store.3 manual page.
+
+hardaker 27 Oct 99 14:37:49
+ - (lcd_time.h): define and comment LCD_TIME_SYNC_OPT better.
+
+hardaker 27 Oct 99 14:38:06
+ - (ucd-snmp-includes.h): add default_store.h and snmp_logging.h
+
+hardaker 27 Oct 99 17:12:01
+ - (ucd-snmp-includes.h): added more include files.
+
+hardaker 27 Oct 99 17:12:59
+ - (mib.c): bail if we can't find an index in the mib tree to use for
+ breaking an oid apart.
+
+hardaker 27 Oct 99 17:30:25
+ - (vacm_vars.c): watch for null communities when printing debug statements.
+
+mslifcak 28 Oct 99 04:55:52
+ Dave's comment about pre_parse etc. was too good to lose in e-mail.
+
+mslifcak 28 Oct 99 05:23:05
+ u_int8/16/32_t types no longer needed for WIN32 builds.
+
+mslifcak 28 Oct 99 05:25:02
+ Oops! restore version r1.131.
+
+mslifcak 28 Oct 99 06:49:03
+ rephrase subtree not found code in _get_symbol.
+
+hardaker 28 Oct 99 13:47:57
+ - (snmptosql): debugging and error checking.
+
+hardaker 29 Oct 99 08:58:17
+ - (mib2c.conf, mib2c.vartypes.conf): Patch from Keith Tuson:
+ - misc fixes.
+
+hardaker 29 Oct 99 09:28:11
+ - (FAQ): added reference to an above question for perl installation.
+
+hardaker 29 Oct 99 09:28:43
+ - (ucd-snmp-agent-includes.h): added var_struct.h and agent_read_config.h
+
+hardaker 29 Oct 99 09:52:18
+ - (default_store.h, mib.c): two new printing options:
+ - printNumericOids
+ - printNumericEnums
+
+hardaker 29 Oct 99 10:06:03
+ - (ds_agent.h, snmp_agent.c, snmpd.c, snmp_parse_args.c):
+ - snmp over TCP options: -T TCP.
+ - new quick print options: -qo -qe for numeric oids and enums.
+
+hardaker 29 Oct 99 10:13:44
+ - (snmpcmd.1): document -T and -q[oe]
+
+hardaker 29 Oct 99 10:15:01
+ -(default_store.3{,.h}): removed from CVS since they are built
+
+hardaker 29 Oct 99 10:15:43
+ - (.cvsignore): ignore default_store.3{,.h}
+
+hardaker 29 Oct 99 16:58:07
+ - (tkmib): make it do snmpv3. Added many things to the options menu.
+
+marz 29 Oct 99 19:54:10
+ (apps/snmp_parse_args.c, snmplib/snmpv3.c): make engineID setup conditional on app type to prevent apps from easily ending up with the same engineID as agent on same host
+
+hardaker 1 Nov 99 13:18:00
+ - (snmp_parse_args.c, default_store.h, mib.c, snmp_alarm.c):
+ - don't break oids into pieces if quick_print is turned on.
+ - ditto if the new default_store option is turned on.
+ - made a default_store option to not use sigalrm for snmp_alarms.
+
+hardaker 2 Nov 99 09:57:31
+ - (Makefile.in): install other header files needed by SNMP.pm.
+
+mslifcak 2 Nov 99 15:37:05
+ Use HAVE_STDARG_H when deciding to use varargs vs ANSI-C prototypes.
+
+mslifcak 2 Nov 99 15:46:08
+ Install snmp_agent_api.3
+
+mslifcak 3 Nov 99 06:11:03
+ declare find_best_tree_node for MSVC build.
+
+mslifcak 3 Nov 99 06:49:30
+ Near line 663 : close(fd) before invoking wait_on_exec
+
+mslifcak 3 Nov 99 13:18:59
+ Following call to fdopen (near get_exec_output), do not close(fd).
+
+mslifcak 3 Nov 99 13:20:16
+ Fix build problem on Linux RedHat 6.0 : key off GNU_LIBRARY value.
+
+mslifcak 4 Nov 99 02:42:15
+ Patch to build BSD/OS 4.0.1; from Bert Driehuis -- driehuis@playbeing.org
+
+mslifcak 4 Nov 99 04:14:28
+ More STDC_HEADERS cleanup: use HAVE_STRING_H, HAVE_STDLIB_H instead.
+
+mslifcak 4 Nov 99 04:33:32
+ Change example away from STDC_HEADERS.
+
+mslifcak 4 Nov 99 05:08:31
+ Every #define is given a value; set to 1 if no value was specified.
+
+mslifcak 4 Nov 99 05:13:05
+ First pass support for FreeBSD 4.0 [problems with proc table lookups].
+
+mslifcak 4 Nov 99 06:11:48
+ Use sysctl(CTL_VM..) to get virtual memory stats.
+
+hardaker 4 Nov 99 10:03:47
+ - (Makefile.in, acconfig.h, config.h.in, configure, configure.in, mib.c):
+ - define IN_UCD_SNMP_SOURCE in config.h but not in ucd-snmp-config.h.
+ - move ucd-snmp-config.h up in the build order before subdirs.
+ - Make default MIBDIRS search path include $HOME/.snmp/mibs.
+ - Make MIBDIRS parsing handle $HOME variables in it.
+
+hardaker 4 Nov 99 10:04:42
+ - (mib2c.conf): include headers for compilation for both internal and
+ external to the ucd-snmp source.
+
+mslifcak 4 Nov 99 10:19:35
+ Redo FreeBSD 4.0: define freebsd3 in s/freebsd4.h; reduce "define" thrashing.
+
+hardaker 4 Nov 99 10:28:44
+ - (snmp_parse_args.c, snmpcmd.1): move -q flags to -O.
+
+mslifcak 4 Nov 99 13:43:40
+ Speed up sprint_variable: halve the number of calls to get_symbol.
+
+mslifcak 5 Nov 99 06:22:52
+ Say goodbye to SNMP_MALLOC, malloc_zero, xcalloc, xmalloc, and xstrdup.
+ Respectively replaced with calloc, calloc, calloc, malloc, and strdup.
+
+nba 9 Nov 99 01:50:09
+ - mib.c,parse.c: make error reporting in parser work according to spec (-Pe)
+ show defining modules in snmptranslate -d
+ use ds_toggle_boolean
+
+nba 9 Nov 99 12:59:52
+ - snmptrapd.c,snmptrapd_handlers.c: make it compile with VC++ 5.0
+ (but no handlers (yet))
+
+hardaker 9 Nov 99 13:02:17
+ - (snmpd.c): fix -H.
+
+hardaker 9 Nov 99 13:02:41
+ - (ucd_snmp.h): require the DEMO-MIB (just for tutorial purposes).
+
+hardaker 9 Nov 99 13:09:21
+ - (vacm_vars.c, vacm_vars.h): simple new .conf tokens: rocommunity, rwcommity.
+
+hardaker 9 Nov 99 13:09:40
+ - (Makefile.in): install the DEMO-MIB.
+
+nba 9 Nov 99 15:16:03
+ - various: adapt tools to use getopt (and put one in for Win32)
+
+nba 9 Nov 99 22:20:52
+ . snmp_parse_args.c: a glitch in the conversion to getopt (thanks to
+ driehuis@playbeing.org)
+
+nba 9 Nov 99 23:30:03
+ - getopt.h: arguments to getopt did not match those in getopt.c
+
+nba 10 Nov 99 08:30:13
+ - win32/*: fixes to the VC++ build projects
+
+nba 10 Nov 99 08:32:00
+ - win32/*: VC++ project updates
+
+daves 10 Nov 99 08:57:00
+ - (agent/agent_read_config.c): Only set up trap sinks on the master agent
+
+daves 10 Nov 99 08:58:38
+ - (agent/agent_trap.[ch]): minor re-structure to allow subagent trap "sinks"
+
+daves 10 Nov 99 08:59:45
+ - (agentx/subagent.c): Fix AgentX notify support
+
+nba 10 Nov 99 12:20:47
+ - win32/*.dsp: yet another round of making this crap work
+
+nba 10 Nov 99 15:29:18
+ - apps/*: changes for getopt usage, and reworking of snmp_parse_args
+
+nba 10 Nov 99 22:12:08
+ - win32/*: clean up repository files, and add proper .cvsignore files
+
+daves 11 Nov 99 03:37:59
+ - (agentx/client.c): Silly typo in start time synchronisation
+
+nba 11 Nov 99 22:14:27
+ - snmpcmd.1: update man page to correspond to the new getopt situation
+ Note: even though some options have been removed from this
+ page, they still work!
+
+nba 11 Nov 99 22:50:00
+ - snmp_parse_args.c, mib.c: alignment of option code.
+ Some enhancements to the snmptranslate -d output.
+
+daves 12 Nov 99 08:46:33
+ - (snmplib/snmp_api.c): Provide a unique ID for all incoming PDUs
+
+marz 12 Nov 99 13:01:08
+ (lcd_time.[ch], snmpusm.c): fix enginetime update algorithm to conform to spec rfc2574 3.2.7.b.1
+
+nba 14 Nov 99 01:48:51
+ - snmptable, snmp_parse_args: allow the application specific options to
+
+nba 14 Nov 99 01:51:57
+ - snmptable: add in the application specific snmptable options between
+ the normal options.
+
+nba 14 Nov 99 01:53:16
+ - snmpbulkget: new tool to issue a single GETBULK request
+
+nba 14 Nov 99 01:54:17
+ - snmp_parse_args: changes to support multi-valued options
+
+nba 14 Nov 99 01:59:20
+ - mibs/*, vacm_vars.h: update the mib files to rfc 2571-2575. Also add
+ SNMP_COMMUNITY_MIB from the coex draft.
+
+nba 14 Nov 99 02:00:00
+ - vacm_vars.c: kill a warning
+
+nba 14 Nov 99 02:01:37
+ - pass.c, snmpd.conf.5.def: add an UNSIGNED return type
+
+nba 14 Nov 99 02:04:46
+ - mib.c, snmptranslate.c: move the MIB:id handling inside read_objid for
+ consistency. Also fixes a buffer overrun in mib.c
+
+nba 14 Nov 99 02:42:38
+ - SNMPv2-CONF.txt: comment out the IMPORT clause
+
+nba 14 Nov 99 06:12:03
+ - snmptrapd.c: add the new common -O option set
+
+nba 14 Nov 99 06:15:01
+ - snmptrapd.8: add the new common -O option set
+
+nba 14 Nov 99 06:32:25
+ - ipc6: Add the IPv6 code from the Kame project. I have only massaged
+ it so much as to still compile on non-IPv6 systems, and detect
+ Linux, INRIA, Solaris IPv6. No code for them yet. Original
+ author: itojun@iijlab.net
+
+daves 15 Nov 99 07:56:06
+ - (agent/snmp_vars.c): Fix handling of failed GET/SET requests
+
+mslifcak 15 Nov 99 08:29:06
+ Fix description of read_objid return value.
+
+nba 15 Nov 99 14:00:20
+ - snmp_parse_args.c: further error checking, courtesy mslifcak
+ snmpbulkget.c: needs #include <getopt.h> (Thanks to Robert Story)
+
+nba 15 Nov 99 14:03:36
+ - mibs/: replace RFC1271-MIN.txt with RMON-MIB.txt (RFC 1757 version)
+
+nba 15 Nov 99 14:05:57
+ - parse.c: fix a spelling error in the MIB replacement table.
+
+nba 15 Nov 99 14:09:29
+ - .cvsignore: updates to keep cvs silent about generated files.
+
+hardaker 15 Nov 99 15:18:46
+ - (FAQ, README): new mirror in Australia.
+
+hardaker 15 Nov 99 15:19:22
+ - (mib_modules.c, snmp_vars.c): move subagent_pre_init() to init_agent().
+
+hardaker 15 Nov 99 15:19:47
+ - (TODO): memory int -> uint.
+
+hardaker 15 Nov 99 15:20:10
+ - (header_complex.c): set to '\0' instead of NULL for -Wall.
+
+hardaker 15 Nov 99 15:21:07
+ - (mib2c, tkmib): remove -w.
+
+hardaker 15 Nov 99 15:21:28
+ - (snmp_agent_api.3): don't call subagent_pre_init().
+
+hardaker 15 Nov 99 15:21:57
+ - (mib2c.storage.conf): debugging statements inserted.
+
+hardaker 15 Nov 99 15:22:24
+ - (asn1.c, asn1.h): new function: asn_check_packet().
+
+hardaker 15 Nov 99 15:36:26
+ - (snmpdelta.c, snmptable.c, snmptest.c, snmptranslate.c, snmptrapd.c):
+ - add default_store.h
+
+hardaker 15 Nov 99 15:38:25
+ - (default_store.h, mib.c): move more options to the ds_* routines.
+
+hardaker 15 Nov 99 15:41:38
+ - (snmp_api.c, snmp_api.h):
+ - move more options to the ds_* routines.
+ - implement support for TCP broken SNMP packets by storing buffers
+ and dealing with pieces of incoming data till we have a full packet.
+
+mslifcak 15 Nov 99 16:43:25
+ Don't add NULL varbind when ENDOFMIBVIEW is reached.
+
+hardaker 15 Nov 99 17:41:10
+ - (snmp_agent.c, master.c, protocol.c, protocol.h, subagent.c,
+ snmp_api.c, snmp_api.h):
+ - make TCP support better for agentx. Still has a problem (I broke agentx).
+
+mslifcak 15 Nov 99 21:57:36
+ Fix bug#75: build --without-opaque-types
+
+mslifcak 16 Nov 99 03:36:09
+ Fix spelling misteak.
+
+nba 16 Nov 99 06:21:25
+ - snmp_parse_args.c, snmptranslate.c, mib.c: redo the snmptranslate options
+ to follow the common option set. Issue warnings when someone
+ uses the old form, advising about the new.
+
+mslifcak 16 Nov 99 08:48:31
+ Embrace all HP-9000/6xx,7xx, 8xx series platforms, without regrets.
+
+daves 16 Nov 99 09:13:59
+ - (snmplib/asn1.c): Fix encoding of root OIDs.
+
+hardaker 16 Nov 99 10:24:59
+ - (protocol.c): add the header length to the packet length estimate.
+
+hardaker 16 Nov 99 10:26:02
+ - (snmp_parse_args.c): add the T: flag for -T to getopt
+
+mslifcak 16 Nov 99 14:41:50
+ MSVC touchups:
+ Added snmptrapd project .DSP file; All .DS[PW] files CR-LF line terminated;
+ Fix warnings in asn1.c and snmp_api.c; Remove unused var in snmptranslate.c.
+
+mslifcak 16 Nov 99 14:56:59
+ Build with getopt.
+
+mslifcak 17 Nov 99 05:59:15
+ Replace u_int16_t with more universally supported u_short.
+
+mslifcak 17 Nov 99 07:35:03
+ Project file for building snmpbulkget using MSVC++ gratis Robert Story.
+
+mslifcak 17 Nov 99 07:36:58
+ Add snmpbulkget to list of apps to build.
+
+hardaker 17 Nov 99 11:55:41
+ - (ds_agent.h, kernel.c, snmpd.c, snmpd.1.def):
+ - run time rootless running support for snmpd, by reqest of Joe. (-r)
+
+hardaker 17 Nov 99 12:21:26
+ - (snmptosql):
+ - move to Net::SMTP.
+ - Make new authgroup and authhost tables to contain SNMP::Session defaults.
+
+hardaker 17 Nov 99 13:05:00
+ - (configure.in): update the so LD for linux to $(CC).
+
+hardaker 17 Nov 99 13:08:17
+ - (configure): update.
+
+hardaker 17 Nov 99 13:09:14
+ - (mib2c.storage.conf): update. Deals with RowStatus objects better.
+
+nba 17 Nov 99 21:51:19
+ - default_store.c: ds_toggle_boolean missed a mask
+
+mslifcak 18 Nov 99 17:58:47
+ Check-in agent changes to support Win32 agent built with MSVC++.
+ Thanks to Robert Story.
+
+mslifcak 18 Nov 99 18:14:58
+ More touchup per MSVC++ Win32 agent work.
+
+mslifcak 18 Nov 99 18:20:45
+ More MSVC++ Win32 agent files, gratis Robert Story.
+
+daves 19 Nov 99 11:06:26
+ - (agent/agent_registry.h): Provide missing index allocation defines.
+
+hardaker 19 Nov 99 13:47:01
+ - (mib2c.storage.conf): fix mib2c.storage.conf.
+
+hardaker 19 Nov 99 14:20:25
+ - (snmp_vars.c, snmpd.c, snmp_alarm.h, snmp_api.c):
+ - make snmp_select_info possibly handle alarm timers.
+ - make snmpd use them and call snmp_run_alarms().
+
+hardaker 19 Nov 99 15:24:15
+ - (acconfig.h, config.h.in, configure, configure.in, sedscript.in,
+ disk.c, disk.h, UCD-SNMP-MIB.txt): Patch from Andy HOOD:
+ - monitor disk inode percentages.
+
+nba 22 Nov 99 05:27:15
+ - configure.in: configure test for netinet/ip.h
+
+nba 22 Nov 99 05:28:09
+ snmp_logging.c: only timestamp efter a newline
+
+nba 22 Nov 99 05:28:45
+ - snmpd.c: reinstate snmpd -a functionality
+
+nba 22 Nov 99 05:29:37
+ - pass.c: remove a const casting warning
+
+nba 22 Nov 99 05:32:05
+ - IPV6-TCP-MIB, IPV6-UDP-MIB, ipv6.c, tcp.c: move the IPv6 tcp and udp
+ tables to their proper position in the tree, according to the RFC.
+
+nba 22 Nov 99 06:59:46
+ - ipv6.c: upgrade to the current Kame patch
+
+nba 22 Nov 99 07:16:59
+ - ipv6.c: some more ANSI prototypes
+
+daves 22 Nov 99 07:30:06
+ - (agent_registry.[ch] agentx/client.[ch] agentx/master_admin.c):
+ Index de-allocation, and AgentX index support.
+
+mslifcak 22 Nov 99 08:20:29
+ Retry add MSVC++ project file.
+
+mslifcak 22 Nov 99 08:21:58
+ Add CVS ignore list for win32/libagent.
+
+hardaker 22 Nov 99 08:29:33
+ - (snmptable.c): Patch from Robert Story:
+ - Added ability to use MIB to query tables with non-sequential column OIDs.
+ - Added code to handle sparse tables.
+
+hardaker 22 Nov 99 09:00:45
+ - (usmUser.c): fix oid -> char conversions pointed out by Michael Slifcak.
+
+hardaker 22 Nov 99 09:07:34
+ - (README): added more people to the thanks list.
+
+hardaker 22 Nov 99 09:18:15
+ - (configure, configure.in, host_res.h, hr_filesys.c, hr_storage.c,
+ hr_swrun.c, hr_system.c, bsdi4.h): Patch from Bert Driehuis:
+ - bsdi support for the host resources mib.
+
+hardaker 22 Nov 99 09:24:51
+ - (T016snmpv2cgetfail, T017snmpv2ctov1getfail): update tests for new
+ error messages.
+
+hardaker 22 Nov 99 12:30:05
+ - (vmstat.c, vmstat_freebsd2.c): use header_generic not header_simple_table
+
+hardaker 22 Nov 99 12:49:21
+ - (vacm_vars.c, pass.c): fix oid -> char conversions.
+
+nba 22 Nov 99 12:54:08
+ - *: change the first argument of the config parser functions to a
+ const string
+
+hardaker 22 Nov 99 13:05:05
+ - (acconfig.h, config.h.in, configure, configure.in, tcp.c): Patch
+ from Garrett Wollman:
+ - FreeBSD 4.x fixes.
+
+hardaker 22 Nov 99 16:48:54
+ - (snmp_vars.c): remove creation of initial and template* users.
+
+hardaker 22 Nov 99 16:50:25
+ - (vacm_vars.c, usmUser.c): new config tokens allowing easy user and
+ vacm/user configuration and setup.
+
+hardaker 22 Nov 99 17:02:11
+ - (scapi.c): fix length check of key space.
+
+hardaker 22 Nov 99 17:52:36
+ - (README.snmpv3): update to reflect new and easier .conf mechanisms.
+
+nba 23 Nov 99 01:23:16
+ - ipv6.h: remove an __P that had sneaked in
+
+nba 23 Nov 99 01:24:37
+ - IPSEC-MIB.txt: change some underlines into dashes, and repair the
+ ::= (maybe I should have looked at this file before adding it :-))
+
+nba 23 Nov 99 01:26:26
+ - pass_persist.c: fix some arguments (int => size_t). Thanks to
+ Anthony Shipman <ashipman@erggroup.com>
+
+daves 23 Nov 99 01:37:29
+ - (host/hr_swrun.c): Fix linux process memory usage figures.
+ (Reported by Mitch Shields)
+
+daves 23 Nov 99 02:11:43
+ - (host/hr_storage.c host/hr_swrun.c): Guard against calculation overflow
+
+nba 23 Nov 99 02:20:13
+ - snmp_agent.c: #include <unistd.h> for select prototype
+
+daves 23 Nov 99 05:21:58
+ - (snmp_agent.c agentx/subagent.c):
+ Make main session structure visible throughout the agent,
+ and use this for AgentX subagent as well.
+
+daves 23 Nov 99 05:40:09
+ - (agent_registry.[ch]):
+ - Make index registration API more immediately convenient
+ - Associate such registrations with the main session
+ - new routine to unregister all indexes for a given session
+ - differentiate between ANY index and NEW index
+ - clean up assorted compiler warnings
+
+hardaker 23 Nov 99 17:51:44
+ - (snmptosql): fix from address line, other misc fixes.
+
+daves 24 Nov 99 09:03:00
+ - (agentx/master_admin.c): Release allocated indexes on subagent shutdown.
+
+hardaker 24 Nov 99 09:09:08
+ - (acconfig.h, config.h.in, configure, configure.in, usmUser.c,
+ keytools.c, keytools.h, lcd_time.c, scapi.h, tools.c,
+ keymanagetest.c, scapitest.c, config.h):
+ - force --enable-developer for CVS checkouts.
+ - remove all references to KMT.
+
+hardaker 24 Nov 99 09:16:02
+ - (INSTALL): change editing of config.h note.
+
+hardaker 24 Nov 99 10:43:08
+ - (vacm_vars.c): Patch from Frank Strauss:
+ - allow seperation of mask with both . and :.
+
+mslifcak 24 Nov 99 11:07:05
+ Fix BUG#57 using modified patch supplied by zany@triq.net.
+
+mslifcak 24 Nov 99 11:07:49
+ Fix BUG#57 using 2/3 of patch supplied by zany@triq.net.
+
+nba 25 Nov 99 14:32:47
+ - snmp_api.c, agent_trap.c, snmp_agent.c, snmp_mib.h, snmp_mib.c:
+ fix misalignment of statistics counters
+
+nba 25 Nov 99 14:33:15
+ - snmp_mib.h: fix misalignment of statistics counters
+
+nba 25 Nov 99 14:52:57
+ - usmUser.c: new user is not added unless both auth and priv is specified
+ on createUser directive
+
+nba 25 Nov 99 14:56:12
+ - defaults_store.h, snmp_api.c, snmp_parse_args.c: add defCommunity
+ directive
+ - snmp_api.h, snmp_api.c: add errorcode for malloc failure
+
+nba 25 Nov 99 14:57:57
+ - mib.c: kill yet another silly warning from gcc
+
+nba 26 Nov 99 11:18:23
+ - default_store.c: although read_config is case insensitive, ds_handle_config
+ was not. At the same time it failed to report the problem that
+ it was called but didn't know what to do.
+
+marz 27 Nov 99 06:31:11
+ (agent/kernel.c, testing/eval_tools.sh): fix -r switch to supress error messages about failed kernel and add -r to default testing code so 'make test can be run by user
+
+hardaker 27 Nov 99 09:18:15
+ - (vacm_vars.c): redo rwuser/rouser to allow specification of auth type.
+
+mslifcak 29 Nov 99 05:50:27
+ More HP-UX aCC fixes supplied by Markku Laukkanen.
+
+mslifcak 29 Nov 99 10:30:51
+ Use ntohs macro to carefully obtain the default service port.
+
+mslifcak 29 Nov 99 10:33:45
+ Fix reference to snmplib.
+
+mslifcak 29 Nov 99 10:36:43
+ Remove last vestiges of DEBUG_MALLOC_INC fragments.
+
+mslifcak 29 Nov 99 11:58:37
+ Free STREAM packet buffer when session is closed;
+ Test for close in progress for read, write, select, and timeout functions.
+
+mslifcak 29 Nov 99 12:43:34
+ Use size_t for name_len member.
+
+hardaker 29 Nov 99 14:02:08
+ - (system.c, system.h): implement strcasestr (from Michael Slifcak).
+
+hardaker 29 Nov 99 14:02:50
+ - (parse.c): make best matching (-b) use regex when available.
+
+hardaker 29 Nov 99 14:03:49
+ - (config.h.in, configure, configure.in):
+ - check for regex.h, regcomp, strcasestr.
+
+hardaker 29 Nov 99 14:04:09
+ - (README): another name.
+
+nba 30 Nov 99 03:01:34
+ - snmp_api.h, snmp_mib.[ch]: A couple additional SNMP statistics points
+
+daves 30 Nov 99 07:07:01
+ - (agentx/master.c): Remove redundent routine.
+
+daves 30 Nov 99 07:08:43
+ - (agentx/master_request.c): Fix handling of multi-variable requests to subagents.
+
+mslifcak 30 Nov 99 13:10:40
+ Fix -Td usage description; use switch when current_name is NULL.
+
+mslifcak 30 Nov 99 13:11:14
+ Include ctype.h
+
+hardaker 30 Nov 99 14:30:32
+ - (snmp_parse_args.c, mib.c, mib.h, parse.c): implement regex matching
+ everywhere.
+
+mslifcak 30 Nov 99 14:47:36
+ Use Wes' cool new get_wild_node match method.
+
+mslifcak 30 Nov 99 16:50:41
+ Add multiple match capability to find_best_tree_node, and use it in
+ snmptranslate (new -B option).
+
+mslifcak 1 Dec 99 06:40:07
+ Error check and free resources during regex processing.
+
+mslifcak 1 Dec 99 10:38:18
+ Prevent overflow of object ID in get_module_node.
+ In find_best_tree_node, treat result from recursed call same for match = 0.
+
+mslifcak 1 Dec 99 15:55:56
+ Fix bug #112 and finish patch supplied by Anthony Shipman.
+
+mslifcak 1 Dec 99 16:32:14
+ Use SNMP_MAXBUF when defining large static buffer storage.
+
+nba 2 Dec 99 04:41:55
+ - mib.c: accessing and freeeing env_var misplaces around NULL test
+
+nba 2 Dec 99 04:42:57
+ - snmptrapd.c: fix snmp_clone_pdu2 by using the snmplib version
+
+nba 2 Dec 99 05:06:55
+ - usmUser.c snmpv3.[ch]: move usm_parse_create_usmUser from the agent
+ to the library, so that snmptrapd can use it.
+
+mslifcak 2 Dec 99 09:21:45
+ Fix bug #81 - continue install after error creating persistent directory.
+
+hardaker 2 Dec 99 16:59:55
+ - (parse.c): turn on REGEX_EXTENDED.
+
+nba 3 Dec 99 15:03:48
+ - snmptrapd.c: correct handling of SIGHUP tp reconfigure.
+
+nba 3 Dec 99 15:04:16
+ - snmptrapd_handlers.c: a little nicer error message
+
+nba 3 Dec 99 15:05:13
+ - parse.c: remember to NULL a freed pointer
+
+hardaker 3 Dec 99 16:51:43
+ - (configure, configure.in): switch to PIC from pic.
+
+hardaker 3 Dec 99 16:52:16
+ - (Makefile.in): use $(MAKE) instead of make.
+
+hardaker 3 Dec 99 16:52:51
+ - (vmstat.c): remove duplicate limits.h include.
+
+nba 5 Dec 99 21:49:50
+ - pass.c, pass_persist.c: ensure proper byte ordering when pass'ing
+ ipaddress.
+
+mslifcak 6 Dec 99 09:19:08
+ Show all non-printable subids in dump_oid_to_string.
+ Recurse clear_tree_flags only if necessary.
+
+hardaker 6 Dec 99 13:47:41
+ - (snmp_parse_args.c): default specifications for auth/priv types.
+
+hardaker 6 Dec 99 13:51:34
+ - (snmp_parse_args.c): print error strings returned by generate_Ku().
+
+nba 6 Dec 99 14:32:22
+ - .cvsignore: Make CVS silent about installation files
+
+hardaker 6 Dec 99 14:48:08
+ - (snmpusm.c):
+ - make snmpusm usable again, changing arguments slightly.
+ - make it also use defaults for passphrases, user, etc.
+
+hardaker 6 Dec 99 14:56:21
+ - (Sv3config, T030snmpv3usercreation): make v3 testing work again.
+
+hardaker 6 Dec 99 14:58:28
+ - (snmpusm.c): fix usage for new args.
+
+mslifcak 6 Dec 99 15:09:53
+ Convert USM_ERR* to SNMPERR_USM*.
+
+nba 6 Dec 99 15:13:21
+ - system.c, config.h, win32.dsw, *.dsp, libsnmp.def: cleaning up for VC builds
+
+mslifcak 6 Dec 99 16:31:26
+ More fun updating MS VC build of apps and library.
+
+mslifcak 7 Dec 99 08:03:06
+ Use argv[0] since the app wont be snmpgetnext, probably.
+
+daves 7 Dec 99 08:29:55
+ - (agent/agent_read_config.[ch] agent/snmp_vars.[ch] agent/snmpd.[ch]
+ snmplib/read_config.[ch] snmplib/snmp_api.c):
+ - Use the saved application name for registering config handlers
+ (N.B: This change will need to be applied to MIB modules as well)
+
+hardaker 7 Dec 99 09:14:30
+ - (hr_other.c): shorten cpu description length.
+
+hardaker 7 Dec 99 09:17:41
+ - (sysORTable.c): make sysOrIndex not-accessible, as it should be.
+
+hardaker 7 Dec 99 09:32:02
+ - (UCD-SNMP-MIB.txt): Patch from Juergen Schoenwaelder:
+ - convert to SMIv2 and cleanup.
+
+hardaker 7 Dec 99 13:45:59
+ - (snmpwalk.c):
+ - New ability to peform a get on the requested OID when either no
+ results are returned or when the user requests an inclusive option.
+ - New ability to print number of variables found at the end.
+
+hardaker 7 Dec 99 13:54:11
+ - (snmpwalk.1): document -Ci and -Cp (badly).
+
+mslifcak 7 Dec 99 15:23:44
+ Eliminate multiplying by sizeof(char) or sizeof(unsigned char);
+ agentx/client.c - snmp_free_varbind replaces free in four places;
+ snmpv3/usmUser.c - usm_free_user replaces free in one place.
+
+hardaker 8 Dec 99 09:19:08
+ - (mib.c): register a config token for suffix printing.
+
+hardaker 8 Dec 99 14:08:20
+ - (UCD-SNMP-MIB.txt): make mrIndex IMPLIED since it is in the code.
+
+hardaker 8 Dec 99 14:41:53
+ - (mib.c): fix -Os and index based oid printing to work again.
+
+mslifcak 8 Dec 99 15:01:20
+ Include getopt.h to define optarg.
+
+mslifcak 8 Dec 99 15:04:54
+ Add missing dskPercentNode to DskEntry (thanks to
+ Michael Kirkham <support@iwl.com>).
+
+hardaker 8 Dec 99 15:23:07
+ - (mib.c, parse.c, parse.h):
+ - remembered IMPLIED indexes.
+ - properly print OIDs with length prefixes on parsed OIDs so
+ cutting/pasting of them works.
+ - properly print strings and oids that are IMPLIED.
+ - print strings in either ' or " quotes depending on if their IMPLIED.
+
+hardaker 8 Dec 99 15:26:51
+ - (README): add Juergen.
+
+hardaker 8 Dec 99 15:28:54
+ - (*..Makefile.in): make depend.
+
+hardaker 8 Dec 99 15:29:52
+ - (snmpd.c): move sys/param out of ifdef FD_SET.
+
+hardaker 8 Dec 99 15:47:02
+ - (*..Makefile.in): A real make depend with no ssl dependancies, etc.
+
+hardaker 8 Dec 99 15:49:32
+ - (makefileindepend.pl, makenosysdepend.pl, remove-files):
+ - move the make depend perl scripts to the top level where they only
+ need to be edited once.
+
+hardaker 8 Dec 99 17:13:17
+ - (acconfig.h, config.h.in, master.c, read_config.c, system.c, system.h):
+ - implement mkdirhier() and use it for persistent storage and agentx
+ socket file creation.
+
+daves 9 Dec 99 07:34:03
+ - (man/snmp_trap_api.3): Initial documentation for agent trap generation.
+
+nba 9 Dec 99 07:34:08
+ - mib.c: implement MIB::label
+
+nba 9 Dec 99 07:49:34
+ - snmpcmd.1: support MIB::label
+
+mslifcak 9 Dec 99 08:14:59
+ Patches supplied by Juergen Schoenwaelder.
+
+hardaker 9 Dec 99 10:08:26
+ - (Makefile.top, config.h.in, configure, configure.in,
+ agent/Makefile.in, snmplib/Makefile.in):
+ - fixed --enable-shared (at least on linux).
+
+hardaker 9 Dec 99 15:26:23
+ - (keytools.c): Patch from Leonard Gomelsky:
+ - generate_Ku() speed improvements.
+
+hardaker 9 Dec 99 16:16:40
+ - (UCD-SNMP-MIB.txt): changed all instances of kb to kB.
+
+hardaker 9 Dec 99 16:53:14
+ - (snmpnetstat/Makefile.in): fix for --enable-shared
+
+hardaker 9 Dec 99 17:09:23
+ - (agent/*Makefile.in): fix for --enable-shared on hpux
+
+nba 10 Dec 99 03:06:18
+ - master.c: add a missing #include <netinet/in.h> (at least for Solaris).
+
+nba 10 Dec 99 03:07:06
+ - pass.c: fix some buf/buf2 confusion
+
+nba 10 Dec 99 03:09:33
+ - pass_persist.c: fix some buf/buf2 confusion
+
+nba 10 Dec 99 03:10:30
+ - read_config.c: add some missing const specifiers
+
+nba 10 Dec 99 03:20:10
+ - (various): changes to compile snmpd with VC++ 5.0 (Release mode)
+
+mslifcak 10 Dec 99 07:28:33
+ Fix to build executable agent on HP-UX.
+
+mslifcak 10 Dec 99 10:23:36
+ Apply Dave's patch to fix max varbinds testing on GETBULK.
+
+marz 10 Dec 99 10:44:29
+ (snmlib/snmp_api.c): fix bug in _sess_copy where pointers that were not owned by newly created session could get mistakenly freed if errors were encountered during session copy - also eliminate some redundant copying of security{Auth|Priv}Key data
+
+mslifcak 10 Dec 99 13:03:58
+ Fix HP-UX problem with ipDefaultTTL.
+
+daves 13 Dec 99 03:17:41
+ - (agent_registry.c): Handle delegated MIB regions properly when split.
+
+daves 13 Dec 99 03:18:38
+ - (agent_trap.c): allow specification of enterprise OID when sending traps
+
+daves 13 Dec 99 04:43:14
+ - (agent/snmpd.c agent/mibgroup/smux/smux.[ch]):
+ - Patch to get SMUX support working with the new agent architecture.
+ This is probably not The Right Way To Do Things Now, but it works.
+ Thanks to Nick Amato and Mike Michaud.
+
+mslifcak 13 Dec 99 09:49:28
+ Added patch from M.Michaud to use send_enterprise_trap_vars.
+
+hardaker 13 Dec 99 09:57:37
+ - (DLMOD-MIB.txt, UCD-DLMOD-MIB.inc, UCD-DLMOD-MIB.txt):
+ - Juergens patch to move DLMOD-MIB -> UCD-DLMOD-MIB and -> SMIv2.
+ - moved to the experimental tree.
+
+mslifcak 13 Dec 99 12:04:15
+ Clean also removes generated default_store.3.h .
+
+mslifcak 13 Dec 99 13:54:27
+ Sanity checks added to _get_symbol.
+
+hardaker 13 Dec 99 14:20:10
+ - (config.h.in, configure, configure.in): --with-efence implemented.
+ - (forced checking for --enable-developer and CVS checkouts)
+
+mslifcak 13 Dec 99 14:54:31
+ Fix problem printing IMPLIED indices of OBJECTID type.
+
+mslifcak 13 Dec 99 15:12:01
+ Finish symbol conversion with numeric when subtree is leaf node.
+
+mslifcak 13 Dec 99 16:03:00
+ Allow sprint_variable to work even if no MIB files were read.
+
+hardaker 14 Dec 99 08:08:00
+ - (snmp_parse_args.c, snmptranslate.c, snmptrapd.c, default_store.h,
+ mib.c, mib.h):
+ - argument shuffling...
+ -I for input args created, and -OR moved there.
+ -Ib created.
+ -TB created for snmptranslate (was -B).
+
+hardaker 14 Dec 99 08:41:41
+ - (IANAifType-MIB.txt, UCD-SNMP-MIB.txt): Patch from Juergen Schoenwaelder:
+ - updates.
+
+hardaker 14 Dec 99 14:54:09
+ - (keytools.c): reverse generate_Ku optimizations, as they don't work.
+
+hardaker 14 Dec 99 15:19:35
+ - (Makefile.in): DLMOD -> UCD-DLMOD
+
+hardaker 14 Dec 99 16:05:08
+ - (configure, configure.in): move -lefence check up to front (last in link).
+
+hardaker 14 Dec 99 16:05:37
+ - (header_complex.c): get next in link list before deleting root.
+
+mslifcak 15 Dec 99 04:21:27
+ Isolate and retouch deprecated command line options.
+
+mslifcak 15 Dec 99 05:51:00
+ Share kstat fd iff ucd-snmp/memory_solaris2 is also configured.
+
+hardaker 15 Dec 99 09:17:03
+ - (EtherLike-MIB.txt, IPFILTER.txt, UCD-IPFILTER-MIB.inc,
+ UCD-IPFILTER-MIB.txt): Patch from Juergen Schoenwaelder:
+ - Even more updates.
+
+hardaker 15 Dec 99 09:19:14
+ - (SNMPv2-PARTY-MIB.txt SNMPv2-M2M-MIB.txt ): removed.
+
+mslifcak 15 Dec 99 09:42:44
+ Remove snmp_log_syslog, snmp_log_filelog, snmp_log_stderrlog;
+ Simplify snmp_log_string.
+
+mslifcak 15 Dec 99 09:56:24
+ Add time marker create, set, and delta time check methods.
+
+mslifcak 15 Dec 99 11:08:19
+ Replace kc from memory_solaris2.c with kstat_fd, defined in kernel_sunos5.c.
+
+nba 16 Dec 99 23:05:47
+ - kernel.c: output error string, not number
+
+nba 16 Dec 99 23:06:58
+ - snmpd.c: \n terminate some log messages
+
+nba 16 Dec 99 23:08:02
+ - smux.[ch]: fix some prototypes and includes.
+
+nba 16 Dec 99 23:08:54
+ - snmptranslate.c: be explicit in the -t warning
+
+nba 16 Dec 99 23:09:42
+ - mib.c: fix a tail recursion elimination problem printing oids
+
+nba 16 Dec 99 23:10:31
+ - snmpv3.c: a more spevific help message for defVersion
+
+nba 17 Dec 99 02:08:17
+ - mib.c: kill that tail recursion elimination, it just adds too many
+ conditionals. Properly output an empty string index.
+
+nba 17 Dec 99 02:09:18
+ - snmp_parse_args.c: remove some superfluous usage() calls.
+
+nba 17 Dec 99 02:14:18
+ - snmptable.c: cleanup of the "new" mib walk to determine fields. Make it
+ default (don't even document the -C compatibility option). Ignore
+ not-accessible fields in the walk.
+
+nba 17 Dec 99 02:18:30
+ - snmptrapd.c: make the oids given to trapd handlers properly .0 terminated.
+ Add a SNMP-COMMUNITY-MIB::snmpTrapAddress.0
+ Add syslog of v2 traps and informs
+
+nba 17 Dec 99 03:22:39
+ - libsnmp.def: add some function names
+
+hardaker 17 Dec 99 07:03:09
+ - (snmpcmd.1): document -I and -O flags.
+
+hardaker 17 Dec 99 07:05:08
+ - (snmpcmd.1): mention that -IR and -Ib are actually used by default.
+
+hardaker 17 Dec 99 07:13:03
+ - (snmp.conf.5.def): document a bunch of new configuration options.
+
+hardaker 17 Dec 99 07:26:05
+ - (snmpd.conf.5.def): document rocommunity, rwcommunity, rouser, rwuser.
+
+hardaker 17 Dec 99 07:28:34
+ - (snmpd.conf.5.def): document the file directive.
+
+hardaker 17 Dec 99 07:40:43
+ - (snmpd.conf.5.def): document createUser.
+
+hardaker 17 Dec 99 10:10:42
+ - (NEWS): first pass at changes.
+
+hardaker 17 Dec 99 10:11:02
+ - (sedscript.in): PERSISTENT_DIRECTORY token added.
+
+hardaker 17 Dec 99 10:11:34
+ - (snmpd.c): reorder init() routines for -H to prevent segfaulting.
+
+hardaker 17 Dec 99 10:16:32
+ - (Makefile.in): put snmpd.o into the object list, and remove it from
+ direct compilation in the CC link line.
+
+hardaker 17 Dec 99 10:17:05
+ - (usmUser.c): changed help line of createUser to seperate DES token
+ from the passphrase.
+
+hardaker 17 Dec 99 10:17:28
+ - (snmp_parse_args.c): removed -R from the -h output.
+
+hardaker 17 Dec 99 10:18:24
+ - (NEWS): second pass.
+
+hardaker 17 Dec 99 10:18:42
+ - (snmp_agent_api.3): re-structure based on recent changes.
+
+mslifcak 17 Dec 99 14:23:25
+ Fixed a few spelilng errors.
+
+mslifcak 17 Dec 99 15:21:39
+ Add Bill Fumerola's patch for FreeBSD 4.x to use swapinfo.
+ Include FreeBSD 4.x specific memory and vmstat when building that agent.
+
+mslifcak 17 Dec 99 15:41:14
+ No dummy values for FreeBSD, please.
+
+hardaker 17 Dec 99 15:46:08
+ - (snmp_alarm.c): missing ! operater on signal test.
+
+hardaker 17 Dec 99 15:55:48
+ - (NEWS): mention -I.
+
+hardaker 17 Dec 99 15:56:27
+ - (agent_read_config.c, agent_registry.c, snmp_vars.c):
+ - include "snmp_alarm.h" for mib modules that need the callback def.
+
+hardaker 17 Dec 99 15:57:10
+ - (header_complex.c, header_complex.h): completely restructured.
+ - drasticly reduces memory usage for large data sets (1/3).
+
+daves 20 Dec 99 03:01:49
+ - (agentx/README.agentx): Updated to describe current status.
+
+daves 20 Dec 99 04:15:55
+ - (agent_trap.c snmp_vars.c mibII.[ch] mibII/*.c mibII/sysORTable.h):
+ - Use SNMP_OID prefix definitions in OID specifications.
+ - Register the various MIB-2 modules separately in sysORTable.
+
+hardaker 20 Dec 99 06:43:40
+ - (snmp_parse_args.c): Force set to 1 for -D so multiple switches can
+ be given (ie, don't toggle the value).
+
+hardaker 20 Dec 99 06:48:24
+ - (Makefile.in): moved kernel.o into the libucdagent library.
+
+hardaker 20 Dec 99 13:23:25
+ - (IPSEC-MIB.txt): removed
+
+hardaker 20 Dec 99 13:25:15
+ - (IPFWACC-MIB.txt): moved to UCD-IPFWACC-MIB.txt
+
+hardaker 20 Dec 99 13:26:09
+ - (UCD-IPFWACC-MIB.txt): moved and updated from IPFWACC-MIB.txt
+
+hardaker 20 Dec 99 13:30:06
+ - (UCD-IPFWACC-MIB.txt): moved table to one level deeper under mib node.
+
+hardaker 20 Dec 99 13:30:36
+ - (ipfwacc.c): moved table to one level deeper under mib node.
+
+hardaker 20 Dec 99 15:38:34
+ - (Makefile.in): IPFWACC-MIB.txt -> UCD-IPFWACC-MIB.txt
+
+hardaker 20 Dec 99 17:19:18
+ - (agent_trap.c): make uptime a long for 64bit architectures.
+
+hardaker 20 Dec 99 17:20:15
+ - (agentx/protocol.c): make a things size_t instead of u_int (for 64bit code).
+
+hardaker 20 Dec 99 17:20:55
+ - (snmp_api.c): Digital Unix hack for bad recvfrom implementation.
+
+hardaker 20 Dec 99 17:31:45
+ - (EXAMPLE.conf.def): minor note.
+
+hardaker 20 Dec 99 17:32:23
+ - (NEWS): mention SMIv2 updates.
+
+hardaker 20 Dec 99 17:32:37
+ - (mibincl.h): add agent_trap.h
+
+hardaker 20 Dec 99 17:34:31
+ - (version.h bug-report sedscript.in): version tag ( 4.1.pre1 )
+
+nba 21 Dec 99 02:37:19
+ - snmpd.c, smux.c, snmp_api.c: take away some unused variables.
+
+nba 22 Dec 99 02:41:42
+ - memory_freebsd2.c: make it work (again) for FreeBSD-2 :-)
+
+nba 22 Dec 99 02:43:15
+ - hr_storage.c: kill a dummy value
+
+nba 22 Dec 99 05:46:21
+ - system.c: naughty, naughty Niels, just reindenting ...
+
+nba 22 Dec 99 05:47:11
+ - system_mib.c: use some #defines i place of numbers
+
+nba 22 Dec 99 05:58:18
+ - vacm routines: alignment with RFC mibs, preparing for trap generation
+ and a better integration with variable tree walking
+
+hardaker 22 Dec 99 15:12:26
+ - (master.c): use snmp_sess_open for the second try at opening the
+ master port.
+
+hardaker 22 Dec 99 15:13:05
+ - (master_request.c): increase max vars to 64 (was 16). I have a
+ table with more than that number in columns, which breaks snmptable.
+
+hardaker 22 Dec 99 16:30:01
+ - (vmstat_solaris2.c, vmstat_solaris2.h): Patch from Jochen Kmietsch:
+ - first pass at vmstat support for solaris.
+
+hardaker 23 Dec 99 08:21:37
+ - (vmstat_solaris2.c): Patch from Jochen Kmietsch:
+ - non 80-column wrapped version.
+
+hardaker 28 Dec 99 15:42:08
+ - (master_request.c): remove the ! in front of in_a_view, which changed.
+
+hardaker 30 Dec 99 07:51:36
+ - (snmpd.c): usage line order messed up, as pointed out by Robert Story.
+
+mslifcak 30 Dec 99 12:00:58
+ Fix compile errors.
+
+mslifcak 31 Dec 99 09:31:12
+ Fix bug # 122
+
+mslifcak 31 Dec 99 09:32:58
+ Apply patch provided by Serg Trushnikov <sat@zmail.ru> for AIX 4.2.1 knlist
+
+mslifcak 31 Dec 99 10:11:12
+ Fix bug #125 - insert underscore into struct snmp_ipaddr member names.
+
+mslifcak 31 Dec 99 10:33:16
+ Autoconf patch c/o Albert Chin-A-Young <china@thewrittenword.com>
+
+mslifcak 31 Dec 99 10:36:46
+ Fix warnings of uninitialized variables.
+
+mslifcak 31 Dec 99 12:43:50
+ Fix bug #48 : no strcasecmp/strncasecmp for Sinix
+
+mslifcak 31 Dec 99 13:27:44
+ Apply some NetBSD 1.3.x, 1.4 patches c/o Grea A. Woods <woods@planix.com>
+
+nba 3 Jan 00 15:23:21
+ - EXAMPLE.conf.def: adapt to changes in valid vacm syntax
+
+nba 3 Jan 00 15:26:07
+ - snmp_vars.c: include agent_registry.h only once
+
+nba 3 Jan 00 15:26:51
+ - snmpd.c: add a missing const specifier
+
+nba 3 Jan 00 15:27:29
+ - mibII.h: add prototype for init_mibII
+
+nba 3 Jan 00 15:28:24
+ - wombat.[ch]: correct prototype for wombat_parse_config
+
+nba 3 Jan 00 15:30:26
+ - system.h: add prototype for strcasecmp
+
+nba 3 Jan 00 15:32:59
+ - parse.c: fix File variable being left pointing into the stack.
+ Ignore .index file on WIN32 platform
+
+nba 3 Jan 00 15:34:22
+ - mib.c: also note TEXTUAL CONVENTION in -Td output
+
+nba 3 Jan 00 15:39:40
+ - snmpcmd.1: add snmpbulkget to list of applications
+ - snmptranslate.1: explain -T outputs
+ - snmptrapd.conf.5.def: defalt traphandler is implemented
+
+hardaker 4 Jan 00 08:58:24
+ - (README, FAQ): Japan mirror location change.
+
+hardaker 4 Jan 00 10:33:54
+ - (Makefile.in): install struct.h
+
+hardaker 4 Jan 00 10:35:06
+ - (snmp_agent.c): deal with blocking better in snmp_agent_check_and_process().
+
+hardaker 4 Jan 00 16:27:45
+ - (config.h.in, configure, configure.in): Patch from Sander Steffann:
+ - Add -I/usr/include/rpm because of badly written rpm header files.
+
+nba 4 Jan 00 22:12:10
+ - EXAMPLE.conf.def, FAQ, snmpd.conf.5.def: remove all traces of security
+ model "any" in "group" configuration directives
+
+nba 4 Jan 00 23:50:27
+ - parse.c: #ifdef some variables not used under win32
+
+nba 4 Jan 00 23:51:11
+ - snmptrapd.c: implement trand handlers for win32
+
+daves 6 Jan 00 01:58:56
+ - (mibgroup/mibII.c): Remove redundant file
+
+hardaker 6 Jan 00 08:57:31
+ - (util_funcs.h): properly wrap struct.h include directive for
+ non-source-directory include.
+
+marz 6 Jan 00 12:56:50
+ update syntax (exact)
+
+marz 6 Jan 00 13:07:03
+ we should not print to stderr if stderr logging is diabled - this thows off the alignment of test output for 'make test' in both ucd-snmp and Perl/SNMP
+
+marz 6 Jan 00 13:14:10
+ update config access syntax (exact)
+
+hardaker 6 Jan 00 15:08:28
+ - (COPYING): y2k bug.
+
+hardaker 6 Jan 00 15:08:48
+ - (mib2c): removed a debugging statement.
+
+hardaker 6 Jan 00 15:09:20
+ - (mib2c.conf): unquoted quotes quoted.
+
+hardaker 7 Jan 00 09:29:06
+ - (snmp_agent.c): better handling of write failures.
+
+hardaker 7 Jan 00 10:38:48
+ - (snmpTargetAddrEntry.c, snmpTargetParamsEntry.c): update to v4 API set code.
+
+hardaker 7 Jan 00 11:22:40
+ - (snmptranslate.c): Patch from Robert Story:
+ - handle multiple translated OIDs.
+
+hardaker 7 Jan 00 16:21:50
+ - (vacm_vars.c): properly group rw/rousers into usm not v1/v2c.
+
+nba 7 Jan 00 23:43:10
+ - configure.in: some missing "x" in tests for --with-openssl and
+ --disable-developer
+
+nba 8 Jan 00 00:56:30
+ - configure.in: bugfix for a bugfix bug
+
+mslifcak 8 Jan 00 11:44:58
+ Fix build for Linux RedHat 6.1 (cant link libwrap without libnsl).
+
+mslifcak 8 Jan 00 12:07:44
+ Use knlist iff aix4 and HAVE_KNLIST [not complete w/o configure mods]
+
+daves 10 Jan 00 01:37:32
+ - (agent/mibgroup/mibII.h): Re-remove redundant prototype.
+
+daves 10 Jan 00 02:31:39
+ - (snmplib/snmp_api.c): Differentiate max-repetition and non-repeater errors.
+
+daves 10 Jan 00 03:06:42
+ - (agent/snmp_agent.c): Count numbers of variables requested/set
+
+daves 10 Jan 00 06:12:40
+ - (snmplib/system.c): Re-structure get_uptime() to cache boot time.
+
+mslifcak 10 Jan 00 13:14:03
+ Allow MSVC++ 5.x users to build using this workspace.
+
+mslifcak 10 Jan 00 13:21:30
+ Qualify use of withval to define library and include search paths.
+
+marz 10 Jan 00 14:21:14
+ Checking in SNMP-3.1.0b1
+
+marz 10 Jan 00 14:34:50
+ *** empty log message ***
+
+marz 10 Jan 00 14:40:04
+ add mibload
+
+hardaker 10 Jan 00 15:36:18
+ - (mibincl.h): include stdlib.h and malloc.h.
+
+hardaker 10 Jan 00 15:36:40
+ - (Sv3config): remove the trailing space.
+
+hardaker 10 Jan 00 15:38:44
+ - (config.h.in, configure, configure.in):
+ - make --without-efence work.
+ - check for -lnsl more explicitly.
+
+mslifcak 10 Jan 00 16:30:51
+ ucdDemoPublic.c - remove uninitialized variables from write method.
+ snmp_vars.c - proper oid compare; no copy from save if oids exact match
+ snmpd.c - terminate statement.
+
+mslifcak 10 Jan 00 16:31:16
+ snmptranslate.1 - remove junk line.
+
+mslifcak 10 Jan 00 16:31:38
+ snmptranslate.c - simple default case.
+
+mslifcak 10 Jan 00 16:32:08
+ snmp_api.c - better comment for snmp_oid_compare.
+ read_config.c - remove sizeof(u_char) from malloc size calc.
+ scapi.h - spell check.
+
+mslifcak 11 Jan 00 01:33:45
+ Trolling for malloc errors; more graceful degradation.
+
+mslifcak 11 Jan 00 01:53:08
+ Glean refs to mibII.o from this makefile.
+
+mslifcak 11 Jan 00 07:44:50
+ Add IN_UCD_SNMP_SOURCE to not break Win32 builds.
+
+mslifcak 11 Jan 00 07:59:23
+ Keep win32 release build from breaking.
+
+mslifcak 11 Jan 00 08:10:10
+ Init file count at zero, not by incrementing random value.
+
+mslifcak 11 Jan 00 09:13:38
+ Restore memdup usage to its former luster.
+
+marz 11 Jan 00 10:37:21
+ remove bad session test - session.t has it already - note the call to gethostbyname can hang for some time if DNS is not setup correctly - anyone know a way arround this?
+
+mslifcak 11 Jan 00 15:05:09
+ Use CFLAGS when linking (could have profile switch, etc).
+
+hardaker 12 Jan 00 11:16:27
+ - (snmpv3.c): cast malloc returns.
+
+mslifcak 12 Jan 00 21:09:47
+ Use DEBUGMSGOID liberally, replacing sprint_objid; small speedup.
+
+daves 13 Jan 00 02:46:47
+ - (agent/snmp_vars.c): Remove extraneous bracket.
+
+mslifcak 13 Jan 00 05:36:21
+ No get_boottime support for cygwin (yet). Hopefully a temporary condition.
+
+daves 13 Jan 00 06:31:44
+ - (snmplib/parse.[ch]): Unload MIB module
+ (N.B: Somewhat simplistic with regard to multiply-loaded nodes)
+
+daves 13 Jan 00 06:33:40
+ - (snmplib/parse.c): More complete handling of unloading MIB modules.
+
+mslifcak 14 Jan 00 09:33:39
+ Small compile fix and debug message restoration.
+
+hardaker 14 Jan 00 11:34:25
+ - (bug-report): grep for configure flags
+
+hardaker 14 Jan 00 16:09:09
+ - (scapi.c): implement DES encryption.
+
+hardaker 14 Jan 00 16:10:29
+ - (NEWS): remove export control note about DES.
+
+daves 17 Jan 00 06:13:39
+ - (man/snmptrapd.8): Describe default logging behaviour.
+
+daves 17 Jan 00 09:02:32
+ - (agent/snmp_vars.c): Discard "too-late" responses from overlapped regions.
+
+marz 17 Jan 00 12:47:58
+ added v2 trap
+
+marz 18 Jan 00 07:00:26
+ modified for v2-trap.
+
+marz 18 Jan 00 07:54:12
+ fix error messages and return vals for trap funcs, clean up pdu
+
+mslifcak 18 Jan 00 08:14:42
+ Prevent array bounds error when creating specific trap oid.
+
+mslifcak 18 Jan 00 14:23:44
+ Latest vmstat_solaris2 from the author Jochen Kmietsch.
+
+mslifcak 18 Jan 00 21:22:06
+ Cleanup around ip6_vars.h include (no #if 0)
+
+mslifcak 18 Jan 00 21:25:53
+ Remove commented out objects that are MAX-ACCESS not-accessible.
+
+mslifcak 18 Jan 00 21:29:01
+ 1.Make snmp_get_do_logging visible from DLL
+ 2.Apply Win32 patch from R.Story to activate mib stats module (snmp_mib).
+
+mslifcak 18 Jan 00 21:37:02
+ Consistent getpagesize (first divide by 1024).
+
+daves 20 Jan 00 04:25:05
+ - (snmplib/snmp_api.c): Support selective binding of server addresses.
+
+mslifcak 21 Jan 00 01:46:04
+ Remove party crud; spell check.
+
+mslifcak 21 Jan 00 01:46:41
+ Add const to cleanup a few signatures.
+
+mslifcak 21 Jan 00 01:49:35
+ Minimize data handling and use register variabies in
+ snmp_oid_compare and compare_tree.
+
+marz 21 Jan 00 07:27:13
+ added v3 inform
+
+marz 21 Jan 00 08:00:27
+ inform.
+
+marz 21 Jan 00 08:13:25
+ inform
+
+marz 21 Jan 00 10:47:24
+ *** empty log message ***
+
+mslifcak 21 Jan 00 11:19:09
+ config_arch_require solaris2 version of vmstat.
+
+nba 23 Jan 00 08:51:39
+ - parse.c: add some more error checking to getoid
+
+nba 23 Jan 00 12:42:11
+ - parse.c: fix merging of anonymous nodes when they are named
+
+nba 23 Jan 00 12:43:54
+ - parse.c: errenous => erroneous
+
+marz 23 Jan 00 16:41:06
+ handle adding OPAQUE vars for setting and traps etc.
+
+daves 24 Jan 00 07:21:34
+ - (examples/{example,wombat}.[ch]):
+ - Consolidated example modules into one, including config and SET support.
+
+marz 24 Jan 00 08:59:32
+ *** empty log message ***
+
+mslifcak 24 Jan 00 09:44:45
+ Make sure kstat_fd is initialized before being used.
+
+mslifcak 24 Jan 00 09:55:32
+ Fix Bug #144 items 1,3,4 : case insensitive check for "all" keyword.
+
+mslifcak 24 Jan 00 10:05:12
+ Itojun's netbsd ELF patch + remove wombat [Dave's example fix]
+
+mslifcak 24 Jan 00 10:14:56
+ Fix printing IMPLIED index (from associate of J. Kmietsch) modified and applied.
+
+marz 24 Jan 00 10:36:43
+ *** empty log message ***
+
+marz 25 Jan 00 06:49:43
+ syntax for win32 build
+
+marz 25 Jan 00 11:47:12
+ add missing synbols for perl/SNMP module
+
+marz 25 Jan 00 12:05:59
+ additional win32 install notes
+
+nba 25 Jan 00 13:52:42
+ - parse.c: fix a missing initialization of tc_index
+
+hardaker 25 Jan 00 13:55:33
+ - (vestinternett/diskio.[ch]): Ragnar Kjrstad's diskio mib.
+
+hardaker 25 Jan 00 13:56:02
+ - (VEST-INTERNETT-MIB.txt): Ragnar Kjrstad's diskio mib.
+
+nba 25 Jan 00 14:12:58
+ - HOST-RESOURCES-MIB.txt, HOST-RESOURCES-TYPES.txt, Makefile.in:
+ Update to the current draft HOST-RESOURCES (draft-ops-hostmib-01)
+
+hardaker 25 Jan 00 14:47:59
+ - (configure): help update
+
+hardaker 25 Jan 00 14:50:56
+ - (snmp_alarm.3, snmp_alarm.c): Patch from Frank Strauss:
+ - fix registration function to do what it says it should do.
+
+mslifcak 25 Jan 00 19:30:51
+ Larger buffer for print_module_name; Fix possible null deref in get_tc.
+
+mslifcak 25 Jan 00 21:46:14
+ mib.c:print_tree_node - show module name once in -- FROM;
+ parse.c: show "Cannot find module" once per missing module.
+
+mslifcak 26 Jan 00 07:14:50
+ fix compile error when --without-root-access is used (strauss@ibr.cs.tu-bs.de)
+
+mslifcak 26 Jan 00 07:26:22
+ Acknowledge more contributors.
+
+hardaker 26 Jan 00 10:24:21
+ - (getValues.pm) getValues.pm was noted missing
+
+hardaker 26 Jan 00 15:29:54
+ - (UCD-DISKIO-MIB.inc, UCD-DISKIO-MIB.txt, VEST-INTERNETT-MIB.txt):
+ Patch from Juergen Schoenwaelder:
+ - fix the diskio mib, convert to SMIv2, and move to ucdExperimental.
+
+hardaker 26 Jan 00 15:30:42
+ - (UCD-DLMOD-MIB.txt): Patch from Juergen Schoenwaelder:
+ - prefix oid with "ucd".
+
+hardaker 26 Jan 00 15:31:00
+ - (UCD-IPFILTER-MIB.txt): Patch from Juergen Schoenwaelder:
+ - prefix oids with "ucd".
+
+hardaker 26 Jan 00 15:32:25
+ - (UCD-SNMP-MIB.txt): Patch from Juergen Schoenwaelder:
+ - clean up and reformat sub-registration comments.
+
+hardaker 26 Jan 00 15:34:20
+ - (UCD-DEMO-MIB.txt, UCD-DISKIO-MIB.txt, UCD-DLMOD-MIB.txt,
+ UCD-IPFILTER-MIB.txt, UCD-IPFWACC-MIB.txt, UCD-SNMP-MIB.txt):
+ - correct ucd-snmp-coders email address to replace "ece" with "ucd-snmp".
+
+hardaker 26 Jan 00 16:06:31
+ - (agent_trap.c, agent_trap.h, snmpd.conf.5.def): Patch from Frank Strauss:
+ - add ability to allow sending traps to ports other than 162.
+
+hardaker 26 Jan 00 16:28:22
+ - (Makefile.in, Makefile.in, Makefile.in, Makefile.in):
+ - make depend.
+
+hardaker 26 Jan 00 16:53:41
+ - (snmpv3.c): fix priv key length extrapolation. Should be done differently?.
+
+hardaker 26 Jan 00 16:54:43
+ - (Sv3DESconfig, T023snmpv3getMD5DES): fix DES test so it works.
+
+hardaker 26 Jan 00 17:15:07
+ - (snmpcmd.1, snmptrapd.conf.5.def, snmpusm.1):
+ - badly done updates.
+
+hardaker 26 Jan 00 17:18:17
+ - (version.h bug-report sedscript.in): version tag ( 4.1.pre2 )
+
+hardaker 26 Jan 00 17:32:41
+ - (configure, configure.in): allow ',' seperated --with-*-modules flag values.
+
+hardaker 26 Jan 00 19:22:53
+ - (configure, configure.in): comma, comma, comma, comma, comma-chameleon.
+
+hardaker 27 Jan 00 08:33:43
+ - (default_store.c): make config parser handle "" (null) parsed strings.
+
+marz 27 Jan 00 11:14:09
+ remove no-op snmp_synch_setup
+
+mslifcak 27 Jan 00 14:51:39
+ 1. Fix memory leak when anonymously named nodes are used.
+ 2. Hack around smicng's "SMI " statements to prevent other memory leaks.
+
+mslifcak 27 Jan 00 16:13:58
+ Remove hack around "SMI" token; keep the good part of the previous patch.
+
+mslifcak 28 Jan 00 07:18:09
+ Some variable renaming for consistency, error checking
+ improved, missing string.h included. Patch supplied by author.
+
+mslifcak 28 Jan 00 12:30:20
+ Fix spell LITTLE_ENDIAN. Thanks to talman@hitt.nl.
+
+mslifcak 28 Jan 00 12:38:22
+ Change agentx_{build,parse}_short . Thanks to Gerard Talman@hitt.nl.
+
+mslifcak 28 Jan 00 12:52:25
+ This with previous two changes completes a patch for items 2,3,4
+ for bug #149.
+
+nba 30 Jan 00 03:01:52
+ - host.h: config_require_mib(HOST-RESOURCES-TYPES)
+
+nba 30 Jan 00 03:04:22
+ - hr_disk.c: convert to 1k blocks
+
+nba 30 Jan 00 03:09:38
+ - hr_storage.c: convert from pages to 1k blocks
+
+nba 30 Jan 00 03:11:28
+ - if.c: defensive test for missing objects (it might fail to show
+ down status properly)
+
+marz 30 Jan 00 08:19:34
+ create V3 user entry, cleanup
+
+marz 30 Jan 00 10:42:36
+ clean up before release - update version, release notes
+
+ Note: KNOWN BUGS
+ the new quoted OCTETSTR instance identifiers returned by get_symbol
+ are not compatible with the perl/SNMP module (__get_label_iid)
+
+marz 30 Jan 00 10:44:37
+ clean up before release - update version, release notes
+
+ Note: KNOWN BUGS
+ the new quoted OCTETSTR instance identifiers returned by get_symbol
+ are not compatible with the perl/SNMP module (__get_label_iid)
+
+ not sure that this ever worked - will have to look at old OCTETSTR
+ behaviour and see how to recreate it
+
+marz 30 Jan 00 10:58:02
+ clean up before release - update version, release notes etc.
+
+daves 31 Jan 00 01:05:16
+ - (agent/agent_registry.h): Log failed MIB registrations.
+
+daves 31 Jan 00 01:45:15
+ - (agent/agent_trap.c): Include instance subidentifier in snmpTrapOID and
+ snmpTrapEnterprise OID definitions. (Thanks to Gerard Talman)
+
+daves 31 Jan 00 02:40:02
+ - (snmplib/snmp_api.[ch]): Restore traditional socket field names.
+
+daves 31 Jan 00 03:00:16
+ - (snmplib/snmp_api.h): Alternative approach to Irix socket handling.
+
+daves 31 Jan 00 03:03:15
+ - (acconfig.h config.h.in configure.in configure):
+ - Attempt to detect non-traditional socket address structure (on Irix 6.x).
+
+daves 31 Jan 00 03:14:50
+ - (snmplib/snmp_api.c): Initialize addrlen in _sess_read(). (Frank Strauss)
+
+daves 31 Jan 00 03:41:08
+ - (AGENT.txt): Revised and updated version.
+
+daves 31 Jan 00 07:49:50
+ - (acconfig.h config.h.in configure.in configure):
+ - Improved checking for Irix-style socket address structure.
+
+daves 31 Jan 00 07:51:54
+ - (snmplib/snmp_api.h): Attempt to mimic Irix-style socket address structure.
+
+daves 31 Jan 00 07:53:52
+ - (snmplib/asn1.c snmplib/snmp.c snmplib/snmp_api.c snmplib/snmpusm.c):
+ - Don't assume size_t is signed (Pekka Kytolaakso)
+
+daves 31 Jan 00 07:55:06
+ - (snmplib/snmpv3.[ch]): Don't assume size_t is signed (Pekka Kytolaakso)
+ - N.B: This changes the interface of snmpv3_generate_engineID() slightly.
+
+daves 31 Jan 00 07:56:38
+ - (apps/snmptest.c): Don't assume size_t is signed (Pekka Kytolaakso)
+
+daves 31 Jan 00 07:57:56
+ - (mibgroup/examples/example.[ch]):
+ - Provide an example for how to trigger a trap.
+
+marz 31 Jan 00 10:41:16
+ set DS_LIB_DONT_BREAKDOWN_OIDS to get previoulsy released behaviour of get_symbol wrt octet based instance ids (i.e., no double-quoting)
+
+daves 1 Feb 00 01:49:55
+ - (acconfig.h config.h.in configure.in configure snmplib/snmp_api.h):
+ - Fix broken setting of socket address structure choice.
+
+daves 1 Feb 00 03:37:25
+ - (agentx/master_request.c): Fix session ID handling when delegating requests.
+
+daves 1 Feb 00 04:19:16
+ - (configure.in configure): Catch common invalid configure options.
+
+daves 1 Feb 00 05:27:03
+ - (FAQ): Expand the description of generating traps from the agent slightly.
+
+hardaker 1 Feb 00 08:32:03
+ - (diskio.*): moved to the ucd-snmp directory
+
+hardaker 1 Feb 00 08:34:09
+ - (diskio.h): load the mib.
+
+hardaker 1 Feb 00 08:34:24
+ - (diskio.c): move to ucdExperimental.15.
+
+hardaker 1 Feb 00 08:43:03
+ - (NEWS): update (again).
+
+hardaker 1 Feb 00 08:45:41
+ - (snmpcmd.1): .PP -> .IP for -Ob.
+
+hardaker 1 Feb 00 08:46:07
+ - (snmpusm.1): changed context string in examples to "".
+
+mslifcak 1 Feb 00 11:26:36
+ Fixup more signed/unsigned comparisons.
+
+daves 2 Feb 00 01:12:37
+ - (host/hr_disk.c): Fix solaris initialisation, plus extra debugging info.
+
+mslifcak 2 Feb 00 04:44:23
+ Remove dependencies on (moved) vestinternett/diskio
+
+nba 2 Feb 00 06:44:31
+ - solaris2.8.h: Solaris 8 seems close to Solaris 7
+
+nba 2 Feb 00 06:45:25
+ - hr_disk.c: add NetBSD support
+
+hardaker 2 Feb 00 07:17:28
+ - (configure, configure.in): updated --help
+
+daves 2 Feb 00 08:02:46
+ - (agent/snmp_vars.c): Correctly handle individually excluded instances
+
+mslifcak 2 Feb 00 08:42:17
+ Allow -Co to affect the outcome.
+
+mslifcak 2 Feb 00 08:52:43
+ fix the fat-fingering patch I just made. feh.
+
+hardaker 2 Feb 00 10:52:33
+ - (smux.c): Patch from Robert Miles:
+ - various fixes:
+ 1) The first registration request could be lost.
+ 2) Registration delete requests never received a response.
+ 3) Registration delete requests were not finding the registration when the
+ delete's priority was set to -1.
+ 4) Non-zero values were not being encoded properly in registration
+ responses.
+
+marz 2 Feb 00 14:18:09
+ add instructions for building w/ OpenSSL on VC++
+
+mslifcak 2 Feb 00 14:18:22
+ Let hrProcessorLoad out of the genie's bottle.
+
+mslifcak 2 Feb 00 16:24:15
+ Touchup for building more MIB modules in Win32 (MSVC).
+
+mslifcak 2 Feb 00 16:36:21
+ Touchup to build more MIB modules on Win32.
+
+daves 3 Feb 00 01:35:12
+ - (FAQ): Document changes to access control stuff.
+
+mslifcak 3 Feb 00 04:12:57
+ Undo uninformed change : load average != average time that CPU is idle.
+
+mslifcak 3 Feb 00 06:43:10
+ include mib_module_config.h to make the USING_ constants visible.
+
+marz 3 Feb 00 09:44:37
+ update my email
+
+mslifcak 3 Feb 00 09:56:48
+ Include mib_module_config.h from mibincl.h, not top level config.h.
+
+marz 3 Feb 00 10:48:37
+ add -u PIDFILE to snmptrapd, now we need -c -C :), btw is the value of optarg reliable after getopt has been called again...it seems to work
+
+mslifcak 3 Feb 00 12:57:20
+ Remove DOS-style line termination (CR-LF --> LF).
+ libsnmp.def - remove unneeded comment about obsolete v2party.
+
+mslifcak 3 Feb 00 12:58:27
+ Note the wombat is replaced by example in more places.
+
+mslifcak 3 Feb 00 13:28:31
+ Follow condition HAVE_GETPID for pid_file object.
+
+hardaker 3 Feb 00 14:29:19
+ - (dummy/*): removed, use example instead.
+
+hardaker 3 Feb 00 14:44:33
+ - (subagent.c): include mib_module_config.h.
+
+hardaker 3 Feb 00 14:46:10
+ - (subagent.c): protect sysORTable callbacks with #ifdefs.
+
+hardaker 3 Feb 00 14:51:40
+ - (README): remove dummy reference.
+
+nba 3 Feb 00 23:57:49
+ - agent/registry.c, agent_trap.c, client.c: change some type casts from
+ (char *) to (u_char *) top silence some warnings.
+
+nba 3 Feb 00 23:59:57
+ - mt_support.h: another way of doing nothing, not giving a "null effect"
+ warning from gcc.
+
+nba 4 Feb 00 00:16:01
+ - read_config.c, mib.c: fix some PATH separators from constant : to
+ ENV_SEPARATOR{_CHAR}
+
+nba 4 Feb 00 00:17:48
+ - hr_disk.c: A little cleanup of the disk device definitions, also adding
+ SCSI to FreeBSD 3
+
+nba 4 Feb 00 01:20:55
+ - vacm_vars.c: slight rewording of warning message
+
+nba 4 Feb 00 04:00:27
+ - hr_disk.c: really do that FreBSD scsi thing
+
+marz 4 Feb 00 06:44:24
+ have mib loading api return result codes
+
+marz 4 Feb 00 08:55:42
+ add defaults for v2 trap params
+
+hardaker 4 Feb 00 12:01:32
+ - (configure, configure.in, Makefile.in): find, locate, and use perl if found.
+
+hardaker 4 Feb 00 12:47:26
+ - (snmp_api.c, snmp_api.h, snmpv3.c): provide v3 defaults.
+
+hardaker 4 Feb 00 13:12:18
+ - (read_config.c): don't print failed access errors (EACCES).
+
+hardaker 4 Feb 00 13:15:51
+ - (Makefile.in, Makefile.in, Makefile.in, Makefile.in, Makefile.in,
+ Makefile.in): final make depend.
+
+hardaker 4 Feb 00 13:50:15
+ - (agent_read_config.c): don't read the opt config file or call
+ post_config callbacks, since the library takes care of that now.
+
+marz 4 Feb 00 13:52:08
+ updates for perl/SNMP build
+
+hardaker 4 Feb 00 13:56:19
+ - (snmptrapd.c):
+ - implement -c and -C flags for Joe.
+ - redid the init structure to make it look more like the current agent.
+
+hardaker 4 Feb 00 14:01:30
+ - (snmptrapd.8): document -c and -C.
+
+marz 4 Feb 00 15:21:41
+ build fixes and test enhancements
+
+marz 4 Feb 00 15:44:44
+ updates for perl/SNMP build
+
+-------------------------------------------------------------------------------
+
+Changes: V4.0 -> V4.0.1
+
+hardaker 23 Aug 99 16:44:27
+ - (Makefile.in): install the snmpusm.1 manual page.
+
+mslifcak 24 Aug 99 04:44:47
+ Clean CRs from read_config,snmp_logging; comment define USE_ASN_SHORT_LEN.
+
+mslifcak 24 Aug 99 05:11:13
+ Remove ASN_SHORT_LEN hack - known to dump core in agent.
+
+mslifcak 24 Aug 99 06:19:49
+ Add "." to PATH for RUNTESTS; Drop optreset to build most platforms
+
+mslifcak 24 Aug 99 10:25:53
+ -(testing/eval_tools) - let some (AIX) agents settle before firing requests.
+
+hardaker 24 Aug 99 12:48:21
+ - (vacm_vars.c): correct sysORTable entry.
+
+hardaker 24 Aug 99 13:36:35
+ - (snmpusm.c): check for null response pointer.
+
+hardaker 24 Aug 99 13:37:31
+ - (snmp_parse_args.c, default_store.h, snmp_api.c, snmpv3.c):
+ - provide defVersion token support in snmp.conf (sort of hackish).
+
+hardaker 24 Aug 99 13:41:18
+ - (TODO): remove snmpv3 support :-)
+
+mslifcak 24 Aug 99 14:05:39
+ -(top/Makefile.in) - remove more generated files with distclean rule.
+
+hardaker 24 Aug 99 14:15:40
+ - (all_system.h): remove. again.
+
+mslifcak 24 Aug 99 14:17:33
+ -(host/hr_swrun;mibII/icmp,ip;ucd-snmp/disk,proc) log_perror --> snmp_log_perror
+
+mslifcak 24 Aug 99 15:14:18
+ -(smux.c) apply Nick Amato's patch: prevent SMUX close on parse or error.
+
+hardaker 24 Aug 99 15:59:42
+ - (snmp_api.c): remove version setting in snmp_api.c. Not needed there.
+
+hardaker 24 Aug 99 16:01:55
+ - (NEWS): 4.0.1 update
+
+mslifcak 24 Aug 99 16:05:15
+ -(configure.*) move statement about ucdDemoPublic into comment field.
+
+mslifcak 24 Aug 99 16:49:22
+ -(testing/*) run tests when package is not installed, and when
+ the build tree is not the same as the source tree.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.6.2 -> V4.0
+
+hardaker 14 Sep 98 09:11:57
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - change the PERSISTENTFILE define to PERSISTENTDIR.
+
+hardaker 14 Sep 98 09:17:45
+ - (agent_read_config.c, snmpd.c, snmpd.h, system.c):
+ - move persistent cache capability into the library from the
+ agent. (snmptrapd, and others will need this as well).
+ - implement some new functions: init_snmpv3(), snmpv3_shutdown(),
+ snmpv3_get_engine_boots(), etc.
+ - agentBoots -> engineBoots.
+
+hardaker 14 Sep 98 09:21:05
+ - (Makefile.in, read_config.c, snmp_api.c, snmp_api.h, snmpv3.c, snmpv3.h):
+ - move persistent cache capability into the library from the
+ agent. (snmptrapd, and others will need this as well).
+ - implement some new functions: init_snmpv3(), snmpv3_shutdown(),
+ snmpv3_get_engine_boots(), etc.
+ - agentBoots -> engineBoots.
+
+hardaker 14 Sep 98 09:23:09
+ - (snmp_parse_args.c, snmp_parse_args.h, snmpbulkwalk.c, snmpdelta.c,
+ snmpget.c, snmpgetnext.c, snmpset.c, snmpstatus.c, snmptable.c,
+ snmptest.c, snmptrap.c, snmpwalk.c):
+ - pass app name to snmp_parse_args, so it can pass it to
+ init_snmp(), which now needs it for persistent cache reading.
+
+hardaker 14 Sep 98 09:25:13
+ - (snmpEngine.c, snmpEngine.h):
+ - Begin implementation of the SNMP-FRAMEWORK-MIB.
+
+hardaker 14 Sep 98 17:43:12
+ - (acconfig.h, config.h.in): define ENTERPRISE_NUMBER to 2021.
+
+hardaker 14 Sep 98 17:43:50
+ - (snmpv3.c, snmpv3.h): implement snmpEngineID creation and configuration.
+
+hardaker 14 Sep 98 17:44:06
+ - (snmpEngine.c): report snmpEngineID properly.
+
+hardaker 14 Sep 98 17:49:15
+ - (snmpv3mibs.h): high-level module created to import v3 releated mibs.
+
+hardaker 14 Sep 98 21:09:41
+ - (util_funcs.[ch], snmpEngine.c, snmpv3.[ch], system.[ch]):
+ - move snmpEngineTime calculation to snmplib/snmpv3.c.
+ - move calculate_time_diff() to system.c from util_funcs.c.
+
+hardaker 14 Sep 98 22:29:55
+ - (snmpMPDStats.c, snmpMPDStats.h):
+ - implement SNMP-MPD-MIB.
+
+hardaker 14 Sep 98 22:30:10
+ - (snmpv3mibs.h): add snmpMPDStats module.
+
+hardaker 14 Sep 98 22:40:24
+ - (snmpEngine.c, snmpMPDStats.c): register the modules in sysORTable.
+
+hardaker 16 Sep 98 07:04:11
+ - (snmpMPDStats.c): double blank -> single.
+
+hardaker 16 Sep 98 07:04:58
+ - (usmStats.c, usmStats.h): implement the usmStats portion of the
+ SNMP-USER-BASED-SM-MIB.
+
+hardaker 16 Sep 98 07:05:43
+ - (snmpv3mibs.h): add usmStats to require list.
+
+hardaker 18 Sep 98 09:54:08
+ - (snmp_api.c): change sprintf_oid buf length in DEBUGPOID to 4096.
+
+hardaker 18 Sep 98 09:55:07
+ - (snmpd.c): init_snmpv3 needs to go above init_agent for engineID creation.
+
+hardaker 18 Sep 98 09:59:20
+ - (snmpv3mibs.h, usmUser.c, usmUser.h, Makefile.in, snmpusm.c,
+ snmpusm.h, snmpv3.c, snmpv3.h):
+ - basic usmUser structure created for the libray with support
+ functions:
+ - struct usmUser *usm_get_user(*engineID, engineIDLen, *name, *userList);
+ - struct usmUser *usm_add_user(*user, *userList);
+ - struct usmUser *usm_free_user(*user);
+ - struct usmUser *usm_clone_user(*from);
+ - struct usmUser *usm_create_initial_user();
+ - first pass at basic USM module support added to the agent.
+
+hardaker 18 Sep 98 12:42:46
+ - (snmp-tc.h): create a new .h file to store common textual convention defines.
+
+hardaker 18 Sep 98 12:46:38
+ - (usmUser.c, snmpusm.c, snmpusm.h):
+ - create and use storageType/userStatus in the usmUser structure.
+ - fix the auth/priv protocol pointer initializations for the "initial" user.
+
+hardaker 20 Sep 98 11:46:13
+ - (snmp_vars.c): include snmpusm.h and snmpv3.h.
+
+hardaker 20 Sep 98 11:47:17
+ - (snmp_agent.c): if a mib module returns an error > SNMP_GEN_ERR,
+ translate the error to SNMP_GEN_ERR for v1 requests.
+
+hardaker 20 Sep 98 11:49:04
+ - (mib2c):
+ - fprintf -> DEBUGP.
+ - __P -> ANSI.
+
+hardaker 20 Sep 98 11:52:08
+ - (usmUser.c, usmUser.h):
+ - getNext bug fixes.
+ - make usmPublic truely writable.
+ - implement usm_parse_oid() to parse an oid into engineID/name.
+ - implement the usmUserSpinLock.
+ - misc other bug fixes.
+
+hardaker 21 Sep 98 11:12:49
+ - (snmp_vars.c): finally fixed the write_method's for creation problem.
+
+hardaker 23 Sep 98 10:40:04
+ - (SNMPv2-TC.txt): rejustify a table.
+
+hardaker 23 Sep 98 10:45:13
+ - (usmUser.c):
+ - Make usmUserStatus actually writable and capable of creating new rows.
+ - Begin (broken) cloneFrom setting.
+ - Fixes:
+ - properly malloc space.
+ - properly use double char name and engineID pointers.
+ - do proper oid comparisons for getNexts.
+ - check to see that uptr is defined before using it to retrieve data.
+ - cloneFrom should always return the ZeroDotZero OID.
+
+hardaker 23 Sep 98 10:46:35
+ - (snmpusm.c):
+ - fix usm_add_user() from always adding the user at the end of the list.
+ - set default values for auth/priv protocols on new users.
+
+hardaker 23 Sep 98 10:47:28
+ - (snmp_api.c, snmp_api.h): create snmp_duplicate_objid() to malloc a new oid.
+
+hardaker 23 Sep 98 12:15:11
+ - (ISSUES): update
+
+hardaker 23 Sep 98 12:24:04
+ - (ISSUES): took one.
+
+hardaker 23 Sep 98 17:58:49
+ - (ISSUES): cloning/malloc issue.
+
+hardaker 23 Sep 98 17:59:40
+ - (snmpusm.c, snmpusm.h): created usm_cloneFrom_user() to clone sec info.
+
+hardaker 23 Sep 98 18:00:21
+ - (usmUser.c): make usmCloneFrom actually work (is setable).
+
+hardaker 23 Sep 98 20:15:57
+ - (ISSUES): storage type issues.
+
+hardaker 23 Sep 98 20:16:24
+ - (usmUser.c): make usmUserAuthProtocol and usmUserPrivProtocol writable.
+
+hardaker 23 Sep 98 20:50:05
+ - (ISSUES): RowStatus question added.
+
+hardaker 23 Sep 98 20:50:45
+ - (snmpusm.c, snmpusm.h): create usm_remove_user() to remove a user
+ from a list.
+
+hardaker 23 Sep 98 20:51:46
+ - (usmUser.c): make usmUserStatus destroy's actually remove a user.
+
+hardaker 27 Sep 98 22:53:53
+ - (ISSUES): more stuff.
+
+hardaker 27 Sep 98 22:55:09
+ - (read_config.c, read_config.h, snmpusm.c, snmpusm.h):
+ - bug fixes.
+ - new support functions for saving users to the persistent cache.
+
+hardaker 27 Sep 98 22:57:00
+ - (usmUser.c, usmUser.h):
+ - bug fixes.
+ - usmUserStatus is setable (to either volatile or nonVolatile).
+ - users created by set's are saved (if set to nonVolatile) on agent shutdown.
+
+hardaker 29 Sep 98 20:11:20
+ - (ISSUES): error mapping (coex work).
+
+marz 1 Oct 98 12:58:42
+ - (snmp.h, snmpusm.[ch], snmp_api.[ch]): added USM api and snmpv3_build, some tweaks to parse in prep for snmpv3_parse
+
+marz 1 Oct 98 14:05:45
+ - (snmp_api.c): fixes to snmpv3_parse
+
+marz 4 Oct 98 17:20:30
+ - (snmp_api.[ch], snmp_client.c, snmpusm.c): added snmpv3 parsing routines
+
+hardaker 5 Oct 98 20:05:03
+ - (ISSUES): more stuff.
+
+hardaker 5 Oct 98 20:06:57
+ - (snmp_api.c, snmp_api.h): breakdown of snmpv3_build() into sub-functions.
+
+hardaker 5 Oct 98 21:59:26
+ - (snmpusm.c): make generateRequestMsg do something generic.
+
+hardaker 5 Oct 98 22:00:22
+ - (snmpv3.c, snmpv3.h): return a u_char * instead of a char * for engineIDs.
+
+hardaker 5 Oct 98 22:01:04
+ - (snmp_api.c): misc bug fixes.
+
+hardaker 5 Oct 98 22:50:10
+ - (snmp_api.c): last of known bugs in snmpv3_build fixed (a pointer
+ was being used twice in overlapping needed time periods).
+
+marz 7 Oct 98 13:02:40
+ -(snmp_parse_args.c): add v3 support
+
+marz 7 Oct 98 13:06:41
+ -(snmp_api.[ch], snmpusm.[ch], snmpv3.c): added pdu field to hold sec state ref, fixed usm prototypes, added check for null hent return
+
+hardaker 7 Oct 98 15:36:05
+ - (snmpusm.c): flush out a generic processIncomingMsg().
+
+hardaker 7 Oct 98 15:36:36
+ - (snmp_impl.h): add securityName to the agent's packet_info structure.
+
+hardaker 7 Oct 98 15:38:00
+ - (snmp_api.c): many many bug fixes to v3 parse/build routines.
+
+hardaker 7 Oct 98 15:39:17
+ - (vacm_vars.c): recognize the securityName when USM model is in use.
+
+hardaker 7 Oct 98 17:17:10
+ - (snmp_agent.c): initial pass at v3. Will fail on sending error messages.
+
+hardaker 7 Oct 98 17:45:22
+ - (snmp_api.c): pass in the sec_parms length to processIncomingMsg
+
+hardaker 7 Oct 98 17:46:04
+ - (snmp_agent.c): bug fix: using an array as a pointer (used to be one).
+
+hardaker 7 Oct 98 22:40:43
+ - (snmp_api.c, snmpv3.c, snmpv3.h):
+ - default snmpv3 parameters can be specified in a snmp.conf file.
+
+hardaker 8 Oct 98 10:13:23
+ - (ISSUES): everyone loves issues!
+
+hardaker 9 Oct 98 08:03:57
+ - (config.h.in, configure, configure.in): use zlib when using rpm libraries.
+
+dreeder 9 Oct 98 13:59:12
+ - (ISSUES): Need a pass for traditional UN*X system programming holes.
+
+hardaker 9 Oct 98 18:23:27
+ - (snmpusm.c): generateRequestMsg() doesn't ASN encode the sec_params.
+
+hardaker 9 Oct 98 18:24:02
+ - (snmp_api.c): restructure the packet building to use less memcpy's.
+
+hardaker 9 Oct 98 18:24:26
+ - (snmp_agent.c): use snmp_build_packet() to construct all v3 data.
+
+dreeder 12 Oct 98 07:18:56
+ - (ISSUES): proof memory invocation/disposal; put time stamps in log files.
+
+hardaker 12 Oct 98 07:19:28
+ - (snmp_api.c, snmp_api.h):
+ - new stats counter API.
+ - bug fixes.
+
+hardaker 12 Oct 98 07:42:28
+ - (snmp_api.c, snmp_api.h): bug fixes with counters (returns u_int, EG).
+
+hardaker 12 Oct 98 07:44:55
+ - (snmp_agent.c):
+ - make v3 code return errors properly.
+ - bug fixes.
+
+hardaker 12 Oct 98 07:45:11
+ - (snmpMPDStats.c, snmpMPDStats.h, usmStats.c, usmStats.h):
+ - use the new stats counter API.
+
+marz 12 Oct 98 07:56:30
+ -(snmp_parse_args.c): merged hex to bin funcs - There can be only One
+
+marz 12 Oct 98 08:11:46
+ -(snmp_api.[ch], snmpusm.[ch]): merged hex to bin funcs, fixed MP/USM api, implemented noAuthNoPriv USM, implemented engine probe algorithm
+
+hardaker 12 Oct 98 09:23:49
+ - (ISSUES): note on David's issue.
+
+hardaker 12 Oct 98 12:26:06
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - look for /dev/random and define HAVE_DEV_RANDOM.
+ - look for libkmt and libcrypto and define HAVE_LIBXXX.
+
+marz 12 Oct 98 15:46:36
+ - (snmpusm.c): fixed header size issues (difference between asn_build_header and asn_build_sequence)
+
+hardaker 12 Oct 98 21:56:42
+ - (system.c, system.h): make calculate_time_diff take a pointer.
+
+hardaker 12 Oct 98 21:59:53
+ - (snmpv3.c): use new calculate_time_diff().
+
+hardaker 12 Oct 98 22:04:06
+ - (snmp_client.c): bug fixes:
+ - snmp_synch_input() needs to clone a report pdu too.
+ - snmp_clone_pdu() needs to copy contextEngineID, contextName, and
+ securityName
+
+hardaker 12 Oct 98 22:12:50
+ - (snmp_api.c, snmp_api.h):
+ - make snmp_increment_statistic() return the changed value.
+ - create new function: snmp_free_varbind() to free a list.
+ - \n's to the end of the new debugging messages for engineID discovery.
+ - Merge response/report handling to make report's call their
+ callback as well (engineID discovery was never returning).
+
+hardaker 12 Oct 98 22:19:54
+ - (configure, configure.in): remove incorrect comment.
+
+hardaker 12 Oct 98 22:22:36
+ - (ISSUES): wierd memory question.
+
+hardaker 12 Oct 98 22:23:16
+ - (system.c): use new calculate_time_diff().
+
+hardaker 12 Oct 98 22:25:06
+ - (snmp_agent.c): handle engineID discovery requests.
+
+hardaker 12 Oct 98 22:58:26
+ - (usmUser.c): new function to return the userList.
+
+hardaker 12 Oct 98 22:58:55
+ - (snmpusm.c, snmpusm.h): new function usm_check_secLevel(int, struct *usmUser);
+
+hardaker 12 Oct 98 22:59:36
+ - (snmp_agent.c): handle unknownSecurityName and unsupportedSecurityLevel.
+
+hardaker 13 Oct 98 13:27:14
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - new options: --disable-privacy, --enable-v2p-md5.
+
+hardaker 13 Oct 98 13:31:22
+ - (acconfig.h, config.h.in): comment formatting.
+
+hardaker 14 Oct 98 13:29:05
+ - (snmp_api.c): make snmp_add_var set the size of the oid buffer.
+
+hardaker 14 Oct 98 13:29:40
+ - (snmpusm.c, snmpusm.h): moved the default userList into the library.
+
+hardaker 14 Oct 98 13:31:29
+ - (usmUser.c): use the new library default user list.
+
+hardaker 14 Oct 98 13:32:58
+ - (snmp_agent.c):
+ - use the new library default user list.
+ - don't free a nonexistent pdu (it only exists for v3 requests).
+
+hardaker 14 Oct 98 13:47:56
+ - (snmp_agent.c): make sure pdu->securityName is null terminated.
+
+hardaker 14 Oct 98 17:52:23
+ - (aclocal.m4, configure, configure.in, Makefile.in):
+ - new arguments to configure to set CFLAGS and LIBS:
+ - --with-KMT=path
+ - --with-SSLeay=path
+ - fix to agent/mibgroup/Makefile to keep the above from getting the
+ wrong asn1.h from the SSLeay package.
+
+hardaker 14 Oct 98 20:41:07
+ - (aclocal.m4, config.h.in, configure, configure.in, */Makefile.in):
+ - check for kmt.h
+ - re-order CPPFLAGS to put -I flags last.
+
+hardaker 14 Oct 98 20:45:51
+ - (usmUser.c, usmUser.h, snmpusm.c, snmpusm.h):
+ - move usm_parse_config_usmUser to the library.
+
+hardaker 14 Oct 98 20:47:48
+ - (agent_read_config.c): include snmpusm.h
+
+dreeder 15 Oct 98 12:02:40
+ - Base for SCAPI + some formatting on the path to snmpv3 startup and shutdown.
+ - Shuffling in header files to defeat warnings of #define redundancies:
+ notably, s/freebsd*.h and snmplib/system.h
+ - Debug & tini toolbag in snmplib/{debug,tools}.*
+ - Changed configure option --enable-v2p-md5 to --enable-internal-md5.
+ - Consolidated library system and local header include sequences into
+ snmplib/all_*.h files. Possibly better solutions for this...
+
+hardaker 15 Oct 98 22:24:52
+ - (usmUser.c): removed usm_parse_config_usmUser that David put back by
+ accident when doing formating.
+
+hardaker 15 Oct 98 22:25:17
+ - (keytools.c, keytools.h): added length to engineID.
+
+hardaker 15 Oct 98 22:25:58
+ - (read_config.c, read_config.h): make copy_word return a pointer.
+
+hardaker 15 Oct 98 22:26:21
+ - (scapi.c, scapi.h): move #includes from .h to .c.
+
+hardaker 15 Oct 98 22:27:03
+ - (snmpusm.c, snmpusm.h): new config options to change keys.
+
+hardaker 15 Oct 98 22:27:58
+ - (snmpv3.c): don't call init_kmt() unless HAVE_LIBKMT is defined.
+
+hardaker 15 Oct 98 22:42:00
+ - (keytools.c, keytools.h): move #include from .h to .c.
+
+hardaker 15 Oct 98 22:47:56
+ - (usmUser.c, usmUser.h):
+ - use do_keychange() to implement the key change write methods.
+ - a bit of -Wall cleanup.
+
+dreeder 16 Oct 98 11:28:12
+ - Updated SCAPI crypting functions to identify transforms OIDs not #define's.
+ - Moved "global" definitions of OID transforms to snmpusm.h, and out of
+ usmUser.c and snmpusm.c.
+ - sc_generate_keyed_hash() stands as a good example of what other functions
+ will look like.
+
+dreeder 16 Oct 98 11:50:09
+ - (scapi.c, scapi.h) Output buffer arguments for (en|de)crypting are
+ single-pointers.
+
+lewis 16 Oct 98 13:15:16
+ - - (snmpusm.h):
+ - Added USM_ERR symbols used by usm_generate_out_msg
+
+lewis 16 Oct 98 13:20:07
+ - - (snmpusm.c)
+ - Rewrote usm_generate_out_msg, renaming old implementation to
+ usm_generate_out_msg_NULL
+ - This code compiled on FreeBSD, not tested for linking or running
+ - Added functions to calculate indicies (asn_predict_int_length,
+ asn_predict_length, usm_calc_offsets) and to make the CBC-DES
+ initialization vector (usm_set_salt).
+
+dreeder 18 Oct 98 21:14:09
+ - SCAPI code complete, but not completely tested.
+ Added testing/ directory.
+ Verified that Ed's recent changes compile cleanly.
+ Tried to patch up "critical" -Wall warnings.
+
+hardaker 19 Oct 98 07:10:27
+ - (Makefile.top): remove -Wall requirement.
+
+dreeder 19 Oct 98 15:12:57
+ - Core SCAPI routines appear sound. testing/ directory is no longer
+ commented out. SNMPv3 style key manipulations untested yet.
+ Created (?) a slew of new warnings from files early in compile sequence.
+
+dreeder 20 Oct 98 11:38:42
+ - Tests for generate_Ku and generate_kul. (testing/ktest -h for help.)
+ Cleaned up new set of "critical" warnings -- mostly adding #include's.
+ Fixed KMT/apps/randtest.c so it compiles under Linux.
+
+marz 21 Oct 98 08:18:03
+ -(snmp_api.[ch]): add fields for authKey and privKey
+
+lewis 21 Oct 98 12:07:16
+ - - (snmp.h)
+ - Added SNMP_ERR_ error symbolic constants for the auth/priv (USM) module
+ reported errors.
+ - Used values 19-27, updated MAX_SNMP_ERR to 27.
+
+lewis 21 Oct 98 12:08:24
+ - - (snmpusm.h)
+ - Added symbolic constants for errors found processing incoming messages.
+ - Equated the symbols with those added to snmp.h
+
+hardaker 21 Oct 98 12:10:03
+ - (snmp_api.h): added ASN/SNMP counters to the counter list.
+
+marz 21 Oct 98 12:50:24
+ -(snmp_api.[ch]): correctly add #define sizes for authKey and privKey
+
+marz 21 Oct 98 13:38:57
+ -(snmp_api.[ch]): added auth/priv protocol type fields to session
+
+marz 21 Oct 98 13:49:11
+ -(snmp_api.c): added cast for internal pdu (internal pdu should be elimianted someday)
+
+hardaker 21 Oct 98 13:53:38
+ - (snmp_api.h): STAT_MAX_STATS -> MAX_STATS.
+
+hardaker 21 Oct 98 17:54:08
+ - (snmpv3.c): remove snmp_perror() defined as perror(). It's a real function.
+
+hardaker 21 Oct 98 17:58:08
+ - (asn1.c): asn_build_string: allow a null string to build a 00 padded string.
+
+hardaker 21 Oct 98 18:00:07
+ - (snmp_api.c):
+ - engineID discovery debugging messages.
+ - zero length contextNames ok.
+ - set max length before usm_generate_out_msg().
+
+hardaker 21 Oct 98 19:04:35
+ - (snmp_api.c): move the engineID discovery to snmp_sess_open().
+
+hardaker 21 Oct 98 19:05:12
+ - (snmp_api.h): synch snmp_pdu and internal_snmp_pdu.
+
+dreeder 21 Oct 98 19:55:15
+ - Shook the bugs out of key manipulation routines (generate_kul, generate_Ku).
+ Completed and tested KeyChange TC code ({encode,decode}_keychange).
+ Created initial elements of an automated test harness in testing/.
+ Created data files and test scripts to demonstrate compliance.
+ Miscellaneous additions to snmplib/tools.?, some temporary/transitional.
+
+marz 21 Oct 98 19:58:11
+ -(snmp_parse_args.c): add auth/priv proto flags, add auth priv key flags
+
+marz 21 Oct 98 20:19:08
+ - (snmp_api.[ch]): updated auth/priv prot and key fileds in session, added suport in snmp_sess_open and close (yanked fields from PDU - did I do that?)
+
+hardaker 21 Oct 98 21:21:41
+ - (lcd_time.c): minor warning fixes.
+
+hardaker 21 Oct 98 21:22:07
+ - (tools.c, tools.h): new tool: memdup().
+
+hardaker 21 Oct 98 22:08:07
+ - (snmp_api.c):
+ - generate a usm user from session data if needed.
+ - check the result from the usm and fail if it does.
+
+marz 22 Oct 98 08:02:11
+ -(snmp_api.c): added DEBUGP code to trace message version and secLevel for demo
+
+lewis 22 Oct 98 13:37:34
+ - - (snmpusm.c)
+ - Not a working/tested version, but it compiles.
+ - Fixed one bug - "&" to "==" in an if()
+ - Did not alter code to deny null engine id users
+ - Added much code in process incoming message
+ - New use of errors and DEBUGP
+ - Still waiting on updates to lcd_time.h to implement
+ step #3 of RFC 2274, s3.2.
+
+dreeder 23 Oct 98 09:45:47
+ - LCD Time API prototypes are complete. 90% stable.
+ Draft of automated testing harness in testing/.
+ Use testing/eval_suite.sh to run all current tests.
+
+lewis 23 Oct 98 11:38:25
+ - - (lcd_time.h)
+ - added definitions for TRUE and FALSE (if not previously defined)
+ - fixed a compilation bug in the ensure entry macro
+
+lewis 23 Oct 98 11:47:37
+ - - (snmpusm.c)
+ - Added the step 3 code to process outgoing messages function
+ - Still un-run
+
+dreeder 23 Oct 98 15:39:02
+ - Complete code for LCD time API. Awaiting serious tests.
+ Changed snmpv3_get_engine{Time,Boots} to snmpv3_local_snmpEngine*
+
+dreeder 24 Oct 98 23:07:54
+ - Shook bugs out of LCD to manage engine IDs/time ("testing/etest -a").
+ Added a function dump_snmpEngineID ("testing/misctest -1").
+ Made sprint_hexstring not-static... (temporary change I think).
+ Added comments/questions about building snmpEngineID. (snmpv3.c)
+ Added TRUE/FALSE defines to snmpusm.c. (These should be standardized.)
+ Added SNMP_MAXBUF_SMALL. (tools.h)
+ Cleaned up (clarified?) test harness description.
+
+marz 25 Oct 98 14:48:06
+ -(snmp_parse_args.c): move key generation (generate_Ku) after init_snmp
+
+hardaker 25 Oct 98 20:59:33
+ - (snmp_agent.c): debugging parse/build statements and errno fixes.
+
+hardaker 25 Oct 98 21:00:15
+ - (system.h): created DEBUGPL to do DEBUGP with file/line statements.
+
+hardaker 25 Oct 98 21:01:00
+ - (tools.c): check memdup() for NULL passed in.
+
+hardaker 25 Oct 98 21:01:58
+ - (read_config.c): bug fixes: misc NULL checks.
+
+hardaker 25 Oct 98 21:02:40
+ - (snmp_client.c): default to setting secNameLen and contextNameLen to -1.
+
+dreeder 25 Oct 98 22:28:18
+ - Mostly shuffling pre-existing things about --
+ Used USE_INTERNAL_MD5 put kmt_hash parallel with v2p MD5 hash.
+ sc_encrypt/sc_decrypt now also return: SNMPERR_SC_NOT_CONFIGURED.
+ Tested and "fixed" build with on&off settings of:
+ USE_V2PARTY_PROTOCOL, SCAPI_AUTHPRIV, USE_INTERNAL_MD5.
+ Greatest damage done in agent/snmp_agent.c, snmplib/snmp_client.c.
+ Repaired use of key manipulation functions in snmpusm.c.
+ (Could use peer review as my expectations of use may differ.)
+ Added (and removed 1) some XXX's in party code...
+
+hardaker 26 Oct 98 13:34:03
+ - (snmpusm.c): enable NULL engineIDs in user storage.
+
+hardaker 26 Oct 98 13:37:03
+ - (snmp_api.c, snmp_api.h):
+ - creating users from a session: create_user_from_session().
+ - make probing use the above twice (once for NULL engineID and once
+ for probed engineID).
+ - bug fix: snmp version printed in debugging was off by -1.
+
+hardaker 26 Oct 98 20:41:19
+ - (snmp_agent.c): set context name on engineID report.
+
+hardaker 26 Oct 98 20:42:06
+ - (snmpd.c): create the "initial" user for engineID:null.
+
+hardaker 26 Oct 98 22:12:17
+ - (keytools.c): check for NULL pointer, not *pointer.
+
+hardaker 26 Oct 98 22:15:01
+ - (snmpusm.c): malloc kul space in usm_set_password().
+
+dreeder 28 Oct 98 09:39:57
+ - get_enginetime() now returns <0,0> tuple for NULL/""/len=0 engineIDs.
+ sc_{check,generate}_keyed_hash() process hashes <= hash output len.
+ (Stable, but expect an expanded test in scapitest.c soon.)
+ Misc: Put MD5_HASHSIZE_BYTES in party.h; SNMP_ZERO in tools.h
+
+lewis 28 Oct 98 13:16:54
+ - - (snmpusm.c)
+ - Debugged running of usm_generate... function so that it runs with no
+ authentication / no privacy options. (Don't have a way yet to test
+ with the fancy security.)
+ - Added a line for debugging which sets all bytes of the security header
+ and the PDU's resting place to FF - for debugging purposes only. This
+ lets me see what bytes remain to be punched in. This line is flush left
+ in the file, indicating that it is to be cut out if we reach release.
+ - Added "emergency_print," an uncalled routine I like to have when running
+ in gdb. It dumps a field of x bytes in hex, 25 values to a line.
+
+dreeder 28 Oct 98 14:19:52
+ - Bounded KMT code with #define's for HAVE_LIBKMT
+ - Will not compile without either HAVE_LIBKMT -or- USE_INTERNAL_MD5.
+ - Added new error code: SNMPERR_KT_NOT_AVAILABLE.
+ - Added a test for previous changes to sc_*_keyed_hash() functions.
+ (Augmented test_dokeyedhash() in keymanagement.c.)
+
+lewis 29 Oct 98 09:56:08
+ - - (snmpusm.c)
+ - Made fixes to process incoming
+ - Began to add code for the security state reference
+
+lewis 29 Oct 98 10:27:37
+ - - (snmpusm.h)
+ - Added prototype for set_reportErrorOnUnknownID
+
+lewis 29 Oct 98 10:29:16
+ - - (snmpusm.c)
+ - Fixed some of Wes' reported problems.
+ - Added code to store secStateRef
+ - Still need to use it in generate_outgoing
+
+lewis 29 Oct 98 14:30:18
+ - - (snmpusm.c)
+ - Now makes use of the stored secStateRef in generate outgoing
+ - I hope - I still haven't been able to get message back and forth,
+ it's time to figure out how to run the snmpd stuff I guess.
+
+marz 29 Oct 98 15:06:49
+ add #idef gaurds for kmt.h and kmt_algs.h dependent on existence of headers rather than libkmt
+
+lewis 30 Oct 98 06:45:24
+ - - (snmpusm.h)
+ - Added a state reference free routine
+ - Changed name of the routine to set the report-on-error flag so that it
+ begins with "usm_".
+
+lewis 30 Oct 98 06:46:52
+ - - (snmpusm.c)
+ - Modified the free state ref routine to take a void * instead of a
+ struct whatever *, this plus adding it to the .h file makes is useable
+ by the Message Processor.
+
+lewis 30 Oct 98 07:34:26
+ - - (snmpusm.c)
+ - Removed a potential memory hole (returning on error from the process
+ incoming routine without freeing the security state reference).
+
+hardaker 30 Oct 98 08:38:53
+ - (snmpv3.c): snmp_perror() -> perror() ["malloc"].
+
+hardaker 30 Oct 98 08:43:52
+ - (snmpd.c):
+ - Make -D a toggle.
+ - use usm_set_reportErrorOnUnknownID().
+
+hardaker 30 Oct 98 08:45:09
+ - (snmp_parse_args.c):
+ - Make -D a toggle.
+
+hardaker 30 Oct 98 16:44:43
+ - (snmp_agent.c): make the agent watch the error status from packet
+ parsing instead of doing checks itself.
+
+hardaker 30 Oct 98 16:52:03
+ - (snmpusm.c): usm_get_user(): allow a null length (but non null
+ pointer) engineID.
+
+marz 1 Nov 98 15:55:11
+ -(asn1.c, lcd_time.c, snmp_api.c, snmp_api.h, snmp_client.c, snmpusm.c, snmpv3.c): remove internal pdu/varlist, pdu_free update, handle initial user as discussed, remove initial user hack, remove engineID probe/Report hack, handle securityStateRef as discussed, handle zero-length context, normalize _enginetime arg order, include wes's patches for null engineid and secNameLen++
+
+hardaker 1 Nov 98 19:32:43
+ - (snmp_parse_args.c, snmp_parse_args.h, snmpbulkwalk.c, snmpdelta.c,
+ snmpget.c, snmpgetnext.c, snmpset.c, snmpstatus.c, snmptable.c,
+ snmptest.c, snmptrap.c, snmpwalk.c):
+ - use "snmpapp" as configuration file name.
+
+hardaker 1 Nov 98 19:36:59
+ - (snmp_api.c): generate user->Kul from session->Ku.
+
+hardaker 1 Nov 98 19:38:29
+ - (snmp_agent.c): generate all sorts of new SNMP reports when needed.
+
+hardaker 1 Nov 98 19:39:29
+ - (snmpd.c): use snmp_perror() if snmp_agent_parse() returns 0.
+
+hardaker 2 Nov 98 09:00:25
+ - (vacm.c): allow a security level >=, not ==.
+
+hardaker 2 Nov 98 09:01:07
+ - (snmpv3.c): remove usm_create_initial() and set_enginetime().
+
+hardaker 2 Nov 98 09:06:04
+ - (snmpusm.c, snmpusm.h):
+ - new function: init_usm_post_config(void);
+ - make usm_get_user_from_list() handle a bogus initial user flag.
+
+hardaker 2 Nov 98 09:09:35
+ - (snmp_api.c):
+ - use init_usm_post_config();
+ - use usm_get_user_from_list to ask not to return the default initial user.
+ - fix snmp_var_add_variable() to allow counters.
+
+hardaker 2 Nov 98 09:10:15
+ - (snmp_parse_args.c): typo on des key initialization, forgot the 'X'.
+
+hardaker 2 Nov 98 09:13:36
+ - (snmp_agent.c):
+ - fix report OIDs to be correct.
+ - debugging statement when sending a report.
+ - added unsupported security level report.
+ - send a counter instead of an integer.
+
+hardaker 2 Nov 98 16:01:24
+ - (snmp_parse_args.c): generate Ku for priv protocol using auth protocol hash.
+
+hardaker 3 Nov 98 09:37:03
+ - (lcd_time.c): first byte==0 engine ID's are valid.
+
+lewis 4 Nov 98 11:35:29
+ - - (snmpusm.c)
+ - Better handling of null and unknown engine IDs.
+
+dreeder 4 Nov 98 11:45:08
+ - (lcd_time.c) Special cases for NULL or 0 length engineIDs.
+
+hardaker 4 Nov 98 21:53:32
+ - (snmp_agent.c): check engineID to make sure its us.
+
+lewis 5 Nov 98 09:52:35
+ - - (snmpusm.c)
+ - Fixed call to predict integer length routine to give it the *whole*
+ number, not just one (first/last depends on endian) of the number.
+ Doh! scale rating 9.
+ - Altered that routine to be more like the asn_build_int ... i.e., no
+ longer assumes the length of the length is 1. Doh! rating a 1.
+
+lewis 5 Nov 98 11:03:24
+ - - (snmpusm.c)
+ - Fixed some DEBUGP calls to show the right function, perhaps these will
+ become DEBUGPL in the future.
+
+dreeder 5 Nov 98 15:37:29
+ - Mostly function header comments in read_config.c, util_funcs.c, snmpv3.c.
+ (Please feel free to check for accuracy...)
+ Check for NULL in register_config_handler().
+ Added length argument to snmpv3_get_engineID().
+ Check for length(P)<USM_LENGTH_P_MIN in generate_Ku().
+ Note: "etest -a" has a new failure; to be fixed when Time LCD re-stabilizes.
+
+marz 6 Nov 98 16:13:37
+ -(snmp_api.[ch], snmp_client.c): handle Reports to trigger resend, except for unknownEngineID, pass secStateRef to receive securityState from USM *WARNING* getting authorization failure in USM* please help - this was not happening before so doubtless it is my fault?
+
+marz 7 Nov 98 12:33:49
+ -(snmp_api.c, lcd_time.[ch], snmpusm.c): clean up problems caused when we began using secStateRef, other USM errors, implement LCD_TIME_SYNC_OPT optimization
+
+marz 7 Nov 98 12:37:21
+ -(snmp_agent.c, snmpd.c): clean up problems caused when we began using secStateRef, set_enginetime in LCD post config read, LCD_TIME_SYNC_OPT time lerning optimization, include file for lcd_time added, moved make_report to snmplib - report generation is still in agent
+
+hardaker 9 Nov 98 13:29:19
+ - (snmp_api.c): generate_kul should use authprotocol.
+
+marz 11 Nov 98 07:51:43
+ -(lcd_time.c, snmpusm.c): fixes to handle null engine ID - tolerated when sending, unknown when receiving
+
+marz 11 Nov 98 08:03:24
+ -(snmp_agent.c): remove workaround to detect unknownEngineID error - now doen in USM as spec'd
+
+hardaker 11 Nov 98 12:37:47
+ - (snmpd.c, snmp_api.c, snmpv3.c, snmpv3.h):
+ - move initial set_enginetime() from agent to snmpv3.c.
+ - new snmp.conf configure file tokens: defAuthType, defPrivType,
+ defPassphrase, defAuthPassphrase, defPrivPassphrase.
+ - minimum boots used is 1, not 0.
+
+hardaker 11 Nov 98 13:09:26
+ - (snmpd.c): added needed init_() routines.
+
+hardaker 11 Nov 98 13:11:02
+ - (snmpv3.c): don't print oids to %s's.
+
+hardaker 13 Nov 98 07:59:04
+ - (snmpd.c): create the correct initial user after engineID configuration.
+
+hardaker 13 Nov 98 08:03:45
+ - (usmUser.c): don't initialize user here.
+
+hardaker 13 Nov 98 08:04:42
+ - (snmpv3.c): make engineID configuration lines get parsed early.
+
+hardaker 13 Nov 98 08:14:04
+ - (snmpusm.c):
+ - more appropriate engineID checking for users (was a bug).
+ - usm_add_user(): don't duplicate users with the same name/engineID.
+
+hardaker 15 Nov 98 10:19:55
+ - (snmpd.c): move post_config init routines to beyond persistent reading.
+
+hardaker 15 Nov 98 12:55:38
+ - (Makefile.in):
+ - new make target: test
+ - make all doesn't compile the testing directory.
+
+hardaker 15 Nov 98 13:00:41
+ - (usmUser.c, snmpusm.c, snmpusm.h):
+ - usm_remove_user():
+ - properly updates the list pointer.
+ - requires a ** pointer to the list to do this.
+ - check against a NULL list pointer.
+ - usm_cloneFrom_user():
+ - the keys were not being properly duplicated.
+ - usm_clone_user(): deleted.
+ - usm_create_user(): created, and used in place of usm_clone_user(NULL).
+
+hardaker 15 Nov 98 13:01:27
+ - (etimetest.c): fix calls to set/get_enginetime().
+
+hardaker 15 Nov 98 14:14:07
+ - (ISSUES): finished a couple of things.
+
+hardaker 15 Nov 98 14:19:21
+ - (ISSUES, snmp_agent.c): fix pdu freeing problem, thanks to Joe's
+ merge of the pdu structures.
+
+hardaker 15 Nov 98 15:50:33
+ - (ISSUES): misc date changes and mark that I'm working on something.
+
+hardaker 15 Nov 98 15:53:24
+ - (snmpd.c, read_config.c, snmp_api.c):
+ - create/call snmp_shutdown().
+ - remove the "persistent." part of the persistent .conf name.
+ - rename instead of unlink old persistent .conf file.
+
+hardaker 15 Nov 98 17:37:00
+ - (ISSUES, snmpv3.c): when engineID changes from the previous run,
+ reset engineBoots to 1. (requires storing the last engineID used).
+
+hardaker 16 Nov 98 20:10:19
+ - (snmp_agent.c, snmpd.c, snmp_mib.c, snmp_mib.h, snmp_api.c,
+ snmp_api.h):
+ - use new library based statistics counter everywhere.
+
+hardaker 16 Nov 98 20:17:01
+ - (util_funcs.c, util_funcs.h, interfaces.c, system.c, registry.c):
+ - use header_generic in a few more places.
+ - standardize the MATCH_FAILED and MATCH_SUCCEEDED definitions.
+
+hardaker 22 Nov 98 07:24:56
+ - (snmpusm.c): usm_create_initial_user() accepts name & auth/priv types.
+
+hardaker 22 Nov 98 07:25:52
+ - (snmpd.c):
+ - log PID to file using -P.
+ - create template users: templateMD5 & templateSHA.
+
+hardaker 22 Nov 98 07:26:30
+ - (keymanagetest.c): new flag: -q = quiet.
+
+hardaker 22 Nov 98 07:27:12
+ - (demo): script to run list of commands required for the demo.
+
+hardaker 22 Nov 98 07:28:58
+ - (.cvsignore): ignore testing targets.
+
+hardaker 22 Nov 98 14:36:53
+ - (demo): quote the pass phrase.
+
+hardaker 22 Nov 98 22:16:44
+ - (demo):
+ - pass/fail type output.
+ - hosts other than localhost.
+ - capability to look for stuff in output of commands.
+
+hardaker 22 Nov 98 22:26:28
+ - (demo): turn encryption on for tests that need it.
+
+hardaker 23 Nov 98 07:14:05
+ - (keymanagetest.c): print MD5/SHA before the keychange string.
+
+hardaker 23 Nov 98 07:16:01
+ - (demo): fix the key change string extraction to look for the MD5 version.
+
+hardaker 23 Nov 98 07:38:44
+ - (keymanagetest.c): bequiet should be 0 by default.
+
+hardaker 23 Nov 98 08:06:34
+ - (demo): bug fixes.
+
+dreeder 24 Nov 98 16:43:50
+ Fixed bug in USM preventing exchange of crypted packets. Code added
+ to properly estimate size of crypted text given un-padded plaintext.
+ Found/fixed KMT prototype conflict that caused the given IV to be
+ ignored at crypt/decrypt time.
+ setup_engineID() has a new argument to allow ID strings to be returned
+ to caller.
+ New file snmplib/transform_oids.h to put static declarations in a single
+ place...
+ Failure of stat increments in USM no longer cause failure in the calling
+ function.
+ Added utility apps/encode_keychange. (-h for usage.)
+ DIFFTIME macro to replace oft repeated code.
+ Shortened some VACM debugging output to a single line from many.
+ More comments. More trouble spots marked XXX.
+ Converted oft used magic numbers to symbolic constants (some pre-existing).
+ Cleaned up some simply fixed build warnings.
+ Updated nonexport/crypto/README. Still needs work.
+
+marz 25 Nov 98 07:44:28
+ -(snmp_parse_args.c): added -T <boots> <time> to set an initial (authenticated) time value for the destination engineIDs boots/time)
+
+marz 25 Nov 98 07:48:49
+ -(snmp_api.[ch], snmp.h, snmp_client.c): handle incoming Reports - propagate STAT_ERROR to apps with approp. error message, handle recoverable error notInTimeWindow and engineId discovery, send reports with secLevel==noAuthNoPriv except notInTimeWindow
+
+marz 25 Nov 98 07:51:50
+ -(tools.c): oops back out little compile workaround I did not mean to commit
+
+marz 25 Nov 98 07:54:01
+ -(snmpd.c, snmp_agent.c): initialize pid_dile, only allocate engineID mem for Reports when sending Report, fix version info in debug message
+
+hardaker 25 Nov 98 07:56:30
+ - (snmpEngine.c, snmpMPDStats.c, usmUser.c, usmUser.h):
+ - Added a couple of DEUBGP statements and a couple of comment clairifications.
+
+hardaker 25 Nov 98 12:39:01
+ - (snmpusm.c): changes in comments for clarification.
+
+hardaker 25 Nov 98 12:40:35
+ - (snmpv3.c): changes in comments for clarification.
+
+hardaker 25 Nov 98 12:54:08
+ - (snmp_agent.c): version checks against v2c/v2p -> !v1.
+
+hardaker 25 Nov 98 13:04:02
+ - (snmpd.c): comment clarification.
+
+hardaker 25 Nov 98 17:12:02
+ - (demo):
+ - encode_keychange usage.
+ - move closer to 42, but leave room for a few more things.
+
+hardaker 25 Nov 98 22:58:43
+ - (config.h.in, configure, configure.in): check for tcgetattr.
+
+hardaker 25 Nov 98 22:59:56
+ - (snmpv3.c, snmpv3.h): create snmpv3_set_engineBootsAndTime().
+
+hardaker 25 Nov 98 23:00:47
+ - (tools.c): dump_engineID should *never ever* modify the passed length param.
+
+hardaker 25 Nov 98 23:02:49
+ - (demo):
+ - -s: 1 sec sleep instead of keypress.
+ - do time tests.
+ - use encode_keychange.
+
+hardaker 25 Nov 98 23:04:10
+ - (snmpEngine.c, snmpEngine.h):
+ - Shhhhh..... boots and time are writable... Don't tell anyone... Shhh...
+
+hardaker 25 Nov 98 23:15:05
+ - (encode_keychange.c):
+ - use u_char's where appropriate.
+ - some debugging statements added.
+
+hardaker 25 Nov 98 23:32:51
+ - (usmUser.c):
+ - keychange needs a temp buffer.
+ - a few debugging statements.
+
+hardaker 27 Nov 98 10:20:45
+ - (snmpusm.c): usm_set_salt() accepts a key which is too long (SHA for DES).
+
+hardaker 27 Nov 98 10:23:03
+ - (snmp_api.c): snmpv3_send_report() removes the secStateReference
+ from the pdu is there is one. It shouldn't be used for reports.
+
+hardaker 27 Nov 98 10:31:12
+ - (demo): final fixes for all current tests to work.
+
+hardaker 27 Nov 98 15:15:25
+ - (demo):
+ - -T: pause after test completions.
+ - **** 42/42 tests passed
+
+hardaker 27 Nov 98 16:55:15
+ - (snmppass.c): beginnings of a snmp password changer:
+ - stole most code from snmpset.c and encode_keychange.c.
+ - need to fix: must specify most everything on the command line (ie,
+ .conf file tokens don't work here).
+ - very unclean and a quick hack.
+ - differs from encode_keychange, in that it actually preforms the set.
+
+hardaker 27 Nov 98 16:55:23
+ - (Makefile.in): add snmppass.c
+
+hardaker 27 Nov 98 16:56:47
+ - (.cvsignore): snmppass and encode_keychange
+
+hardaker 28 Nov 98 11:41:02
+ - (usmUser.c, usmUser.h):
+ - merge write_ keyChange and ownKeyChange functions into one. Since
+ the user name is not passed in, the calling module will have to
+ check for it until we're willing to change the API or the VACM is
+ fixed and the ownKeyChnage objects can be obsoleted.
+
+hardaker 28 Nov 98 11:41:36
+ - (snmppass.c): -o: use the ownKeyChange object.
+
+marz 29 Nov 98 19:32:21
+ (demo): fix time sync test to test for timeout as expected when app clock is set ahead
+
+marz 29 Nov 98 19:34:41
+ -(snmp_api.c): move commandline based boots/time setting code after engineID discovery in case engineID was not supplied on command line as well
+
+hardaker 30 Nov 98 22:00:23
+ - (demo): better document the required .conf file pieces.
+
+hardaker 30 Nov 98 22:12:10
+ - (demo): enable -C: auto-configure the agent.
+
+wbabson 1 Dec 98 07:56:55
+ Fixed a library search order bug which had /usr/local/ssl/lib and /usr/local/lib
+ searched before ../snmplib. This caused unresolved references when trying to
+ link snmpd and the applications. To do this LOCAL_LIBS was created and ../snmplib
+ was removed from LIBS and placed there. Then LOCAL_LIBS was added before
+ LDFLAGS in the link commands. agent/Makefile.in and apps/Makefile.in were modified.
+
+hardaker 1 Dec 98 14:54:28
+ - (snmp_api.c): include kmt.h and related.
+
+hardaker 1 Dec 98 14:55:28
+ - (tools.c): include kmt.h and related.
+
+hardaker 1 Dec 98 14:55:49
+ - (usmUser.c): include kmt.h and related.
+
+hardaker 1 Dec 98 14:55:55
+ - (snmppass.c): include kmt.h and related.
+
+marz 2 Dec 98 08:32:29
+ -(demo.c): test #38 will show the 6 message exchange since it is initialized with a simulated authentic oots/time which defeats the LCD_TINE_SYNC_OPT
+
+hardaker 2 Dec 98 14:26:08
+ - (snmp_agent.c): after detection of snmp version, error codes were reversed.
+
+hardaker 2 Dec 98 15:18:53
+ - (snmpd.conf.5.def): added v3 specific token notes.
+
+hardaker 2 Dec 98 15:19:47
+ - (Makefile.in, snmp.conf.5.def): created a snmp.conf manual page.
+
+hardaker 2 Dec 98 17:03:27
+ - (.cvsignore): snmp.conf.5 ignored.
+
+hardaker 2 Dec 98 17:03:48
+ - (snmp.conf.5.def): mibdirs, mibs, and mibfiles documented.
+
+hardaker 2 Dec 98 19:38:12
+ - (lcd_time.c): comment clairification.
+
+hardaker 2 Dec 98 19:39:22
+ - (mib.c): unneeded XXX removed.
+
+hardaker 2 Dec 98 19:39:47
+ - (read_config.c): make copy_word() skip ahead of space on returned pointer.
+
+dreeder 3 Dec 98 18:44:49
+ Co-checkin with new version of KMT (located in nonexport/KMT-snmp).
+ kmt_random() signature changed in sc_random().
+ Second verson testing/demo at testing/demo2* .
+
+hardaker 3 Dec 98 22:20:06
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - new flag and define --enable-testing-code -> SNMP_TESTING_CODE.
+
+hardaker 3 Dec 98 22:22:59
+ - (keytools.c): use SNMP_TESTING_CODE def to protect some sections.
+
+hardaker 3 Dec 98 22:23:48
+ - (scapi.c): testing DEBUGP for printing out keys.
+
+hardaker 3 Dec 98 22:26:40
+ - (snmpusm.c, snmpusm.h):
+ - protect sections with SNMP_TESTING_CODE.
+ - allow *'s in fields for engineIDs for key setting .conf entries.
+
+hardaker 3 Dec 98 22:32:20
+ - (snmpEngine.c, snmpEngine.h):
+ - only make time/boots setable when SNMP_TESTING_CODE is defined.
+
+hardaker 3 Dec 98 23:17:17
+ - (demo): removed.
+
+marz 4 Dec 98 08:05:59
+ -(snmpcmd.1): update man page for new V3 parse args
+
+hardaker 4 Dec 98 11:03:14
+ - (Makefile.in, snmppass.c, snmpusm.c):
+ - delete snmppass.
+ - create first pass snmpusm.c.
+
+hardaker 4 Dec 98 11:04:09
+ - (snmpd.conf.5.def): document the * for engineID feature.
+
+hardaker 4 Dec 98 16:45:43
+ - (UCD-DEMO-MIB.txt): demo mib objects.
+
+hardaker 4 Dec 98 16:46:09
+ - (UCD-SNMP-MIB.txt): mention/reserve the demo object group in a comment.
+
+hardaker 4 Dec 98 16:49:21
+ - (.cvsignore): .gdb stuff
+
+hardaker 4 Dec 98 16:50:04
+ - (ucdDemoPublic.c, ucdDemoPublic.h):
+ - examples/ucdDemoPublic module: simple objects for doing demos,
+ including remote resetting of keys to a known passwords for a list
+ of users.
+
+hardaker 4 Dec 98 16:50:28
+ - (ucdDemoPublic.cmds): commands to run to set up for the demo.
+
+hardaker 4 Dec 98 16:50:38
+ - (ucdDemoPublic.conf): configuration file lines needed for the demo.
+
+hardaker 4 Dec 98 18:38:05
+ - (version.h, sedscript.in, bug-report): 4.0.pre1 tag
+
+dreeder 5 Dec 98 16:52:49
+ Extended demo2 into demo.remote to allow testing between <here> and
+ ucd-snmp.ucdavis.edu.
+
+marz 13 Dec 98 14:57:02
+ -(snmp_api.[ch], snmp_client.c): add support for msgID which is different from reqid and which increments with each retry. Note: late Responses will be dropped if they arrive after timeout - this is different from v1 behaviour where a late Response to the initial try will be accepted up to the time where the last retry times out
+
+hardaker 13 Dec 98 18:39:02
+ - (mib2c): minor update (needs more) for newer snmp perl mod.
+
+hardaker 13 Dec 98 18:39:44
+ - (.cvsignore): .gdb.auto.init
+
+hardaker 13 Dec 98 18:41:11
+ - (encode_keychange.c): removed unneeded linux ifdef.
+
+hardaker 17 Dec 98 15:59:10
+ - (read_config.c): wrap config line print's in SNMP_TESTING_CODE checks.
+
+hardaker 2 Dec 98 21:55:04
+ - (just about all files): merge of V3-b1 changes into V3-b2 branch.
+
+hardaker 2 Dec 98 22:27:54
+ - (agent_read_config.c, snmpd.c, usmUser.c, snmp_parse_args.c,
+ read_config.h, snmp_api.c, snmpusm.c, snmpv3.c, tools.h):
+ - final changes? to V3-b2 merge.
+
+hardaker 2 Dec 98 22:29:52
+ - (read_config.c): make that 28 errors from whitespace changes.
+
+hardaker 2 Dec 98 22:37:08
+ - (snmpd.c): call init_snmpv3 before -H usage info.
+
+hardaker 13 Dec 98 10:33:45
+ - (*): merge1 to V3-b3.
+
+hardaker 13 Dec 98 18:56:18
+ - (*): merge2 to V3-b3.
+
+dreeder 17 Dec 98 08:05:04
+ Creature comfort: /etc script to (re)start and stop snmpd and snmptrapd
+ and keep (compressed) copies of previous logfiles. Intended to be universal
+ to Linux, Solaris, FreeBSD, ... .
+
+hardaker 21 Dec 98 17:36:37
+ - (configure, configure.in): define USE_INTERNAL_MD5 if KMT isn't available.
+
+hardaker 21 Dec 98 17:49:38
+ - (all_system.h, keytools.c, lcd_time.c, md5.c, md5.h, scapi.c,
+ scapi.h, snmp_api.c, snmp_auth.c, tools.c):
+ - internal MD5 support done.
+ - tested with and without kmt to opposite and same side apps/agents.
+ - tested against older 4.0.pre1 agent on bandit as well.
+ - all but one testing/* test passes (which was failing before anyway).
+ - the older demo script passes as well.
+ - Modified many other routines. Everything should use SCAPI now and
+ KMT should never be called directly outside the scapi.c and
+ keytools.c files.
+ - new scapi routine: sc_hash().
+ - Could, as always, use a bit more clean up, but I needed to check
+ something in that worked before I break it again (ahem).
+
+hardaker 21 Dec 98 17:53:10
+ - (snmpget.c, snmpusm.c): unneeded KMT includes removed.
+
+hardaker 21 Dec 98 17:54:38
+ - (keymanagetest.c): surround a few KMT specific items with #ifdefs.
+
+hardaker 21 Dec 98 17:56:56
+ - (snmp_agent.c): remove unneeded KMT includes.
+
+hardaker 22 Dec 98 19:40:12
+ - (keytools.c): decode_keychange() wasn't setting the returned buffer length.
+
+hardaker 22 Dec 98 19:43:50
+ - (snmp_api.c): DEBUGP of probed engineID printed 00's as 0's.
+
+hardaker 22 Dec 98 21:09:38
+ - (snmp_agent.c, usmStats.c, usmStats.h, usmUser.h,
+ SNMP-USER-BASED-SM-MIB.txt):
+ - updated USM mib, including the move from snmpModules.12 to .15.
+ - make reports generated include the .0 suffix for the instance specifier.
+
+hardaker 22 Dec 98 21:10:28
+ - (tools.c): wrap dump_engineID in #ifdef SNMP_TESTING_CODE.
+
+hardaker 22 Dec 98 21:17:25
+ - (lcd_time.c): wrap dump_etimelist() in #ifdef SNMP_TESTING_CODE.
+
+hardaker 22 Dec 98 21:20:31
+ - (encode_keychange.c):
+ - don't use dump_snmpEngineID() unless testing.
+ - Note: this utility is not really needed anymore.
+
+hardaker 22 Dec 98 22:12:32
+ - (SNMP-USER-BASED-SM-MIB.txt): typo (cut and paste missed a line).
+
+hardaker 23 Dec 98 21:07:33
+ - (snmpusm.c): msgSecurityParams should contain the *salt*, not the IV,
+ as defined by the USM document, section 8.1.1.1 (and common sense).
+
+hardaker 23 Dec 98 21:47:44
+ - (snmp_api.c):
+ - Send only authNoPriv reports for notInTimeWindow reports.
+ - report length check increased by one to accomodate for the .0 suffix.
+
+hardaker 23 Dec 98 22:06:25
+ - (snmpusm.c): allow generate_out_msg() to use unknown security names
+ for secLevel = noAuthNoPriv.
+ - this is required since unknownUser reports need to go out with the
+ same user name as the bad request that came in.
+
+hardaker 29 Dec 98 17:01:24
+ - (vacm.c): Enable multiple side by side views in the view family
+ tree. The views already existed, but weren't checked and only the
+ first view was found.
+ - Not done in a clean fashion. Much of the structure definitions
+ should be rewritten with sub-pieces to do it properly with greater
+ speed.
+
+hardaker 29 Dec 98 17:28:31
+ - (config*): define u_int{8,16,32}_t for KMT headers.
+
+hardaker 31 Dec 98 17:55:39
+ - (snmpusm.c): USM oid's were wrong
+
+hardaker 31 Dec 98 17:58:19
+ - (version.h bug-report sedscript.in): version tag ( 4.0.pre2 )
+
+hardaker 6 Jan 99 07:46:02
+ - (snmpusm.c): usm_set_salt() was using a host specific byte ordering
+ for generating the salt from the enigineBoots value and from the
+ arbitrary integer. This technically shouldn't matter, but since
+ we're shooting to be a reference platform...
+
+hardaker 19 Jan 99 19:20:07
+ - (ISSUES): need random int for IV.
+
+wbabson 26 Jan 99 05:52:19
+ Changed MIN() macro to SNMP_MIN() because we explicitly
+ define that in tools.h... This was needed to allow successful
+ linkage in Solaris 2.6
+
+hardaker 27 Jan 99 20:37:56
+ - (SNMP-TARGET-MIB.txt): target mib was improperly located at .15 not .12.
+
+hardaker 27 Jan 99 20:51:12
+ - (snmp_parse_args.c): accept security level abbreviations.
+
+hardaker 27 Jan 99 21:07:59
+ - (acconfig.h, config.h.in, configure, configure.in, read_config.c):
+ - create --with-persistent-directory configure script flag.
+
+dreeder 29 Jan 99 15:20:51
+ Repaired tests to reflect changes in the codebase.
+
+marz 31 Jan 99 13:57:13
+ -(snmp_api.c): zero lenght user name for enineID discovery
+
+dreeder 2 Feb 99 14:04:48
+ Resolve OID collisions: 1) between demo MIB and UCD enterprise MIB; 2)
+ inside demo MIB.
+
+hardaker 2 Feb 99 22:04:38
+ - (snmptrapd.c): support -H.
+
+hardaker 2 Feb 99 22:13:41
+ - (read_config.c):
+ - allow env variable SNMP_PERSISTENT_FILE to override persistent
+ storage locaction.
+ - merge in Mike's changes to copy_word().
+
+hardaker 2 Feb 99 22:14:46
+ - (target.h): merge mike's target mibgroup into the 4.0 line.
+
+marz 6 Feb 99 15:04:13
+ -(snmp_api.[ch],snmp_parse_args.c,snmpv3.[ch],snmpusm.c,snmpcmd.1): allow contextEngineID and securityEngineID to be different, added -E/-e to parse_args, fixed engineID discovery which broke after name used in probe switched to zero length string
+
+hardaker 7 Feb 99 20:43:15
+ - (read_config.c): -Wall fix.
+
+hardaker 7 Feb 99 20:45:17
+ - (snmpv3.c, snmpv3.h): a few -Wall fixes:
+ - protoype init_snmpv3_post_config(void).
+ - remove unneeded variables.
+ - don't compile in set_engineBootsAndTime interface function if not needed.
+
+hardaker 7 Feb 99 20:47:59
+ - (snmp2p.c, snmp_agent.c, snmp_agent.h, snmp_vars.c, snmp_vars.h,
+ snmpd.c, snmpd.h, vacm_vars.c, vacm_vars.h, snmp_api.c, snmp_api.h,
+ snmp_auth.c, snmp_impl.h): Patch from Dave Shield:
+ - implement agent using libraries parsing and handling routines
+ instead of duplicating it.
+
+hardaker 8 Feb 99 00:11:59
+ - (snmp_agent.c, util_funcs.c, ucdDemoPublic.c, route_write.c,
+ snmp_mib.c, system.c, snmpEngine.c, usmUser.c, extensible.c, pass.c,
+ pass_persist.c, proc.c, versioninfo.c):
+ - modified to work with new write variable api.
+ - fixed a missing feature in Dave's code: creation.
+
+hardaker 8 Feb 99 12:22:13
+ - (COPYING): It's 1999.
+
+wbabson 8 Feb 99 13:34:39
+ Changed the function prototype for snmpv3_set_engineBootsand Time
+ from int f(); to void f(); to match the function definition i
+ snmpv3.c .
+
+wbabson 8 Feb 99 13:40:27
+ fixed casting error... *(long) changed to *(long *)
+
+dreeder 17 Feb 99 16:23:43
+ Random IV; fixed salt construction.
+ Fixed NULL dereference show-stopper introduced by merge of D. Sheld's changes.
+ configure.in+Makefile.in automatically create PERSISTENT_DIRECTORY.
+ Minor compile warnings, out-of-date comments fixed, clarified debug outout,
+ clarified pre-compile code in scapi.c.
+ Discovered where pdu->securityEngineID was being multiply free'd, but not
+ the *first* time... (open problem)
+
+hardaker 17 Feb 99 20:59:29
+ - (snmpd.c): -Wall fixes.
+
+hardaker 17 Feb 99 21:00:07
+ - (snmp_agent.c):
+ - fix getbulks.
+ - fix snmpset's to allow creation.
+
+hardaker 17 Feb 99 21:00:22
+ - (dlmod_mib.c): don't define MATCH_SUCCEEDED at all.
+
+hardaker 17 Feb 99 21:00:36
+ - (util_funcs.c): -Wall variable removing.
+
+hardaker 17 Feb 99 21:00:58
+ - (route_write.c, snmp_mib.c, system.c):
+ - -Wall variable removing.
+
+hardaker 17 Feb 99 21:01:36
+ - (usmUser.c, extensible.c, pass.c, proc.c, versioninfo.c):
+ - -Wall variable removing.
+
+hardaker 17 Feb 99 21:05:28
+ - (keytools.c, md5.c, read_config.c, scapi.h, snmp_api.c, snmp_auth.c,
+ snmp_client.c, snmpusm.c, transform_oids.h):
+ - -Wall fixes.
+
+hardaker 17 Feb 99 21:28:57
+ - (keytools.c): opps. Deleted a variable I shouldn't have.
+
+hardaker 17 Feb 99 21:30:11
+ - (snmp_agent.c): You can't assign a NULL to a union, only to a sub-type.
+
+hardaker 17 Feb 99 21:45:23
+ - (testing/Makefile.in): remove references to subdirs since there are
+ none and it breaks simplier versions of sh when no arguments to
+ foreach exist.
+
+marz 24 Feb 99 09:31:29
+ -(snmplib/snmp_api.[ch],snmplib/snmp.h,agent/snmpd.h,agent/snmp_agent.h): moved Reports into snmplib, conform to spec on criterria for sending Reports, lay ground work for maxMsgSize, default contextEngineID to securityEngineID when not explicitly set itself
+
+marz 25 Feb 99 14:04:05
+ -(snmp_api.c,snmp_client.c): fixed bug in snmp_clone_pdu (not cloning securityEnigineID), uncommented _snmp_free
+
+wbabson 9 Mar 99 08:54:12
+ First cut at snmptrapd modification. Receives authPriv and lower security
+ level traps.
+
+wbabson 9 Mar 99 09:02:07
+ Changed DEBUGP() statement to get securityName from PDU rather than session
+ as session was not yet initialized during engine ID discovery and the NULL
+ value caused a segmentaion fault.
+
+marz 10 Mar 99 08:04:47
+ -(snmp_api.c): fix engineId discovery when context engineID is specified (needed to discover proxy engineID if all you know is proxied agent's engineID)
+
+wbabson 17 Mar 99 13:27:59
+ Changed DEBUGP() statement about Building the SNMP message so that
+ even if securityName is uninitialized (NULL), program will continue
+ without core dumping. Later, someone should see about fixing the logic
+ so that securityName will not be a NULL pointer here, or
+ repair the debugging scheme, if that's valid.
+
+hardaker 24 Mar 99 20:30:12
+ - (mibincl.h): add agent_read_config.h
+
+hardaker 24 Mar 99 20:32:44
+ - (testing/Makefile.in): remove subdirs.
+
+hardaker 28 Mar 99 16:03:04
+ - (vacm_vars.h): relocate VACM node where it should be (13->16).
+
+hardaker 28 Mar 99 16:16:38
+ - (read_config.c): skip space after copying a word in copy_word()
+
+hardaker 30 Mar 99 09:51:21
+ - (ucdDemoPublic.c): added help strings to conf parsers.
+
+hardaker 6 Apr 99 15:27:29
+ - (Makefile.in): remove accidentially comitted conflict.
+
+hardaker 15 Apr 99 07:25:48
+ - (keytools.c): Allow short passphrases when SNMP_TESTING_CODE is set.
+
+marz 19 Apr 99 14:14:23
+ -(snmp_api.[ch],snmp_client.c): fixed bug where msgId and reqId were not treated correctly in responses if orginal request happened to have msgId or reqId equal to arbitrary default(0)
+
+marz 19 May 99 07:14:44
+
+ adding v3 packet generator perl5 script (requires Convert::BER)
+ .
+
+marz 19 May 99 07:16:41
+
+ example data file to generate a V3 packet with pktgen.pl
+
+marz 19 May 99 08:02:24
+ README for pktgen.pl
+
+marz 19 May 99 08:44:03
+ *** empty log message ***
+
+marz 19 May 99 08:45:15
+ pktgen.pl
+
+marz 19 May 99 10:31:14
+ remove last submit
+
+marz 20 May 99 12:35:03
+ *** empty log message ***
+
+marz 23 May 99 08:04:03
+ handle seq_of to allow arbitrary number of varbinds, bug fixes, send/receive, pretty print debugging packet dump
+
+hardaker 26 May 99 11:18:42
+ - (ipfwacc.h): properly locate the mib.
+
+hardaker 26 May 99 11:20:04
+ - (vmstat.c): include limits.h.
+
+hardaker 26 May 99 15:14:32
+ - (hr_swinst.c): make software application type unknown instead of app.
+
+hardaker 26 May 99 15:18:46
+ - (IPFWACC-MIB.txt): change to counters.
+
+hardaker 26 May 99 15:20:11
+ - (ipfwacc.h): make into counters.
+
+hardaker 26 May 99 15:33:05
+ - (agent_read_config.c, hr_filesys.c, interfaces.c, tcp.c, udp.c):
+ Patch from Derek J. Balling:
+ - freebsd2 fixes.
+
+hardaker 26 May 99 15:52:57
+ - (acconfig.h, config.h.in): increase MAXREADCOUNT
+
+hardaker 26 May 99 15:54:22
+ - (snmp_vars.c): include sys/queue.h.
+
+marz 1 Jun 99 07:25:55
+ (pktgen.pl, packet.txt): added authentication support (md5 and sha1)
+
+daves 1 Jun 99 08:37:47
+ - (agent/mibgroup/host/hr_swinst.c): Determine type of RPM packages
+
+marz 16 Jun 99 09:30:55
+ (pktgen.pl, packet.txt): added encryption/privact support (des-cbc)
+
+marz 16 Jun 99 12:50:29
+ (pktgen.pl, packet.txt): latest attempt to fix privacy/encryption
+
+marz 23 Jun 99 08:18:59
+ (pktgen.pl, packet.txt): latest attempt to fix privacy/encryption(working with Crypt::DES/Crypt::CBC+patch)
+
+hardaker 6 Apr 99 15:13:40
+ - (*): Merged the 4.0 line into the 3.6.1 line.
+
+hardaker 6 Apr 99 15:38:45
+ - (mibincl.h, ucdDemoPublic.c, vacm_vars.h, snmptrapd.c, snmp_api.c,
+ Makefile.in): final merge pieces of recent v3 line changes.
+
+mslifcak 6 Apr 99 21:24:22
+ - changes for ANSI headers; POSIX(index vs strchr); minor fixes
+
+mslifcak 6 Apr 99 22:13:59
+ - (vacm_vars.c) - set global ptrs = 0.
+
+mslifcak 6 Apr 99 22:14:43
+ - (snmp_vars.c) more v2party rework needed
+
+mslifcak 7 Apr 99 06:17:28
+ - () more ANSI header fixups; touchup for M$ Win32 build
+
+hardaker 7 Apr 99 10:42:10
+ - (config.h.in, snmp_vars.c, encode_keychange.c, snmptrapd.c,
+ Makefile.in, all_general_local.h, keytools.c, keytools.h,
+ lcd_time.c, md5.c, read_config.c, scapi.c, snmp_api.c, snmpusm.c,
+ snmpv3.c, tools.c, tools.h):
+ - misc merging, including fixes and debugging statement changes to
+ newer model.
+ - a few -Wall fixes.
+
+hardaker 7 Apr 99 10:48:07
+ - (snmp_mib.c): removed unnneeded header_snmp().
+
+hardaker 7 Apr 99 11:28:02
+ - (ucdDemoPublic.c, sysORTable.c, vacm_vars.c, smux.c, snmpEngine.c,
+ usmUser.c, snmpTargetAddrEntry.c, snmpTargetParamsEntry.c):
+ - debugging statement conversion
+
+mslifcak 7 Apr 99 12:00:20
+ - (agent/snmp2p.c agent/snmp_agent.c agent/snmp_vars.h
+ agent/view_parse.c agent/mibgroup/util_funcs.c
+ agent/mibgroup/examples/ucdDemoPublic.c
+ agent/mibgroup/host/hr_filesys.c
+ agent/mibgroup/host/hr_storage.c
+ agent/mibgroup/host/hr_swrun.c agent/mibgroup/host/hr_system.c
+ agent/mibgroup/mibII/at.c agent/mibgroup/mibII/icmp.c
+ agent/mibgroup/mibII/interfaces.c agent/mibgroup/mibII/ip.c
+ agent/mibgroup/mibII/system_mib.c agent/mibgroup/mibII/tcp.c
+ agent/mibgroup/mibII/udp.c agent/mibgroup/mibII/vacm_vars.c
+ agent/mibgroup/mibII/var_route.c agent/mibgroup/misc/ipfwacc.c
+ agent/mibgroup/snmpv3/usmUser.c
+ agent/mibgroup/ucd-snmp/extensible.c
+ agent/mibgroup/ucd-snmp/hpux.c agent/mibgroup/ucd-snmp/pass.c
+ agent/mibgroup/ucd-snmp/pass_persist.c
+ agent/mibgroup/ucd-snmp/proc.c
+ agent/mibgroup/v2party/context_vars.c
+ agent/mibgroup/v2party/party_vars.c
+ agent/mibgroup/v2party/view_vars.c apps/snmpdelta.c
+ apps/snmptest.c apps/snmptrapd.c apps/snmpnetstat/route.c
+ apps/snmpnetstat/winstub.c snmplib/acl_parse.c
+ snmplib/context.h snmplib/context_parse.c snmplib/party.h
+ snmplib/party_parse.c snmplib/read_config.c snmplib/snmp_api.c
+ snmplib/snmp_auth.c snmplib/snmp_impl.h snmplib/vacm.h
+ snmplib/view.h) fgets use sizeof mostly, oid base size is MAX_OID_LEN
+
+mslifcak 7 Apr 99 12:17:23
+ -(ipfwchains.c) remove multiple definitions of MATCH_FAILED
+
+mslifcak 7 Apr 99 15:00:39
+ -(usmUser.c,system.c) plug mem leak; (snmp_api.c) enforce array limit.
+
+hardaker 12 Apr 99 22:14:31
+ - (mibincl.h): include sys/time.h.
+
+hardaker 12 Apr 99 22:15:39
+ - (hr_utils.h): remove variable names from prototypes (was causing problems).
+
+hardaker 12 Apr 99 22:16:45
+ - (tkmib): make displayed mib node info into two columns instead of one.
+
+hardaker 12 Apr 99 22:25:09
+ - (snmp_api.c): make snmp_varlist_add_variable to possible create a
+ varlist before adding something to it.
+
+hardaker 13 Apr 99 15:19:20
+ - (configure, configure.in, Makefile.in): Patch from Daniel Hagerty:
+ - fix libwrap to only add the library to the agent.
+
+hardaker 13 Apr 99 15:20:00
+ - (system_mib.c): make sysDescr read-only.
+
+hardaker 13 Apr 99 15:32:23
+ - (pass.c): Patch from Jim Mar:
+ - add capability for binary octet strings in pass scripts.
+
+hardaker 13 Apr 99 15:36:31
+ - (SNMP-NOTIFICATION-MIB.txt, SNMP-PROXY-MIB.txt,
+ SNMP-VIEW-BASED-ACM-MIB.txt): Patch from Niels Baggesen:
+ - fix module locations for broken mibs.
+
+hardaker 13 Apr 99 15:54:48
+ - (freebsd.h, freebsd2.h): Patch from Niels Baggesen:
+ - freebsd utmp cleanups.
+
+hardaker 13 Apr 99 15:56:53
+ - (snmpd.c): Patch from Niels Baggesen:
+ - log with timestamp at shutdown.
+
+hardaker 13 Apr 99 15:57:24
+ - (vacm_vars.c): Patch from Niels Baggesen:
+ - better checking of .conf file parsing line requirements.
+
+hardaker 13 Apr 99 15:58:02
+ - (snmptranslate.c): Patch from Niels Baggesen:
+ - support -P.
+
+hardaker 13 Apr 99 15:58:27
+ - (snmp_config.5.def, snmptrap.1, snmptrapd.conf.5.def): Patch from
+ Niels Baggesen:
+ - clean up small bugs.
+
+hardaker 13 Apr 99 16:00:49
+ - (parse.c, parse.h): Patch from Niels Baggesen:
+ - nicer parser messages (include file names). Correct help for -Pc.
+ - Add FRAME-RELAY-DTE-MIB as replacement for RFC-1315
+
+hardaker 13 Apr 99 16:03:29
+ - (snmptrapd.c): Patch from Niels Baggesen:
+ - snmptrapd option to ignore auth traps, add -S option, log termination.
+
+mslifcak 14 Apr 99 15:29:58
+ - (snmptranslate.c) init_snmp takes argument; "" used.
+
+mslifcak 14 Apr 99 15:30:34
+ - (parse.c) File pointer initialized to "" before first use.
+
+hardaker 14 Apr 99 15:52:35
+ - (snmptranslate.c): init_snmp("snmpapp").
+
+mslifcak 14 Apr 99 16:31:55
+ - (snmp_agent,c, snmp_api.[ch], snmp_client.[ch]) fix variable_list with built-in storage
+
+mslifcak 14 Apr 99 16:56:37
+ - apps that use snmp_fix_pdu must clean up the response PDU !
+
+mslifcak 16 Apr 99 07:30:29
+ - (IPFWACC-MIB.txt) change module name from IPFWADM-MIB to IPFWACC-MIB.
+
+mslifcak 16 Apr 99 07:54:22
+ - (IPFWCHAINS-MIB.txt) ipfwChainTable {ipfw 1} fix
+
+mslifcak 16 Apr 99 08:33:16
+ - (mib.c) "-m" or MIBS : can specify MIB module by file name.
+
+hardaker 16 Apr 99 21:10:06
+ - (README): Added v3 team members.
+
+hardaker 16 Apr 99 21:11:48
+ - (configure.in): changed default store location to /var/ucd-snmp
+
+hardaker 16 Apr 99 21:15:14
+ - (snmp.h): SNMPADMINLENGTH definition.
+
+hardaker 16 Apr 99 21:16:16
+ - (snmp_auth.c): removed fix note.
+
+hardaker 16 Apr 99 21:27:06
+ - (NEWS): updated
+
+hardaker 16 Apr 99 21:27:41
+ - (snmptrapd.8): man patch from Niels
+
+hardaker 16 Apr 99 21:34:49
+ - (version.h bug-report sedscript.in): version tag ( 4.0.pre3 )
+
+mslifcak 18 Apr 99 06:54:26
+ - (ipfwacc.h) subdir change per Joe Pruettt : 9 -> 10
+
+hardaker 19 Apr 99 21:01:15
+ - (mib2c, mib2c.conf, mib2c.vartypes.conf):
+ - rewrote mib2c to be more dependent on .conf files. The main .conf
+ file now contains the code itself.
+ - need to write a foreach(mibnode) type parser next.
+
+hardaker 19 Apr 99 21:09:27
+ - (mibincl.h): add read_config.h.
+
+hardaker 19 Apr 99 21:12:17
+ - (read_config.c, read_config.h):
+ - created a more convenient read_config_read_data() function to
+ generically read a token into a given variable.
+ - cleaned up persistent storage parsing routines.
+ - use previously malloced space in some routines, or malloc it for
+ them if the storage area is NULL.
+
+hardaker 19 Apr 99 21:14:28
+ - (snmp_api.c): Don't snmp_set_var_objid if name is NULL in
+ snmp_varlist_add_variable().
+
+hardaker 20 Apr 99 11:28:14
+ - (mib2c, mib2c.conf, mib2c.vartypes.conf): more updates.
+
+hardaker 20 Apr 99 15:31:35
+ - (mib2c, mib2c.conf, mib2c.vartypes.conf):
+ - completely re-hacked:
+ - entire code base is now put into the .conf files rather than in
+ the mib2c program. This should entitle mib2c to be used more
+ generically, and could produce different types of code templates
+ based on the .conf file it is given. In theory, it should be
+ able to produce C code for a non-ucd-snmp agent, or even better,
+ any type of code (not just C) for something else based on mib
+ information.
+ - The down side, is that the current .conf files are now ambiguous
+ again and difficult to understand without being, well, me. The
+ up side is that I'm sure Dave Shield will go through and clean
+ it up for me like he did last time. Ha ha. I wonder if he'll
+ read this? (If so, see me first).
+
+hardaker 20 Apr 99 16:04:17
+ - (mib2c, mib2c.conf): variable name conversions:
+ - variableTypes -> variables
+ - cname -> NAME
+
+hardaker 20 Apr 99 16:10:44
+ - (mib2c, mib2c.conf): a little more clean up.
+
+hardaker 20 Apr 99 21:38:42
+ - (mib2c.conf): clean up skipif regexps a bit.
+
+hardaker 22 Apr 99 07:54:44
+ - (read_config.c, read_config.h): created *read_config_store_data();
+
+hardaker 22 Apr 99 07:56:03
+ - (mib2c, mib2c.conf): allow NoAccess to be processed, and use skipif:
+ directives where needed because of it.
+
+hardaker 22 Apr 99 10:51:30
+ - (snmp_client.c, snmp_api.c, snmp_api.h, keytools.c): Another v3 branch update.
+
+mslifcak 26 Apr 99 09:21:06
+ - (snmplib.c) - use request callback's data if request specifies a callback.
+
+nba 26 Apr 99 11:21:10
+
+ (parse.h) Silly speling misteak (ACCESS_CRAETE)
+
+nba 26 Apr 99 11:48:57
+
+
+ - snmplib/parse.h, snmplib/parse.c: new mib printer: mib_print_tree
+ inspired by a reference to snmx in comp.protocols.snmp
+ - apps/snmptranslate: let the -p option call this new printer
+ - snmplib/snmp_api.c: some left over __P macros
+
+nba 26 Apr 99 12:03:47
+
+ (if.c) make the width of snmpnet -i (and -o) adapt to the length of returned
+ strings
+
+nba 26 Apr 99 12:09:35
+
+
+ apps/*.c: use snmp_perror to report errors from read_objid and friends
+ apps/snmptrapd.c: fix a bus error when using -S and receiving an
+ enterprise specific trap.
+
+nba 26 Apr 99 12:13:50
+
+ */*: replace horrible (char *)"string" with const specifiers in relevant
+ functions.
+
+mslifcak 26 Apr 99 12:37:09
+ - (snmp_api.c) - fix other use of request's callback data
+
+mslifcak 27 Apr 99 09:51:35
+ - (interfaces.c) add if_type_from_name to convert interface name to type.
+
+hardaker 29 Apr 99 07:32:39
+ - (Makefile.in, callback.c, callback.h): callback API.
+
+hardaker 29 Apr 99 07:39:45
+ - (agent_read_config.c, snmpd.c, snmptrapd.c, snmp_api.c, snmpusm.c,
+ snmpusm.h, snmpv3.c, snmpv3.h):
+ - use the callback mechanism for post-config stuff.
+
+hardaker 3 May 99 07:07:15
+ - (agent_read_config.c, usmUser.c, usmUser.h, snmpTargetAddrEntry.c,
+ snmpTargetAddrEntry.h, snmpTargetParamsEntry.c,
+ snmpTargetParamsEntry.h, snmptrapd.c, callback.c, callback.h,
+ scapi.c, scapi.h, snmp_api.c, snmpv3.c, snmpv3.h):
+ - shutdown and store callback usage.
+
+hardaker 3 May 99 07:13:31
+ - (snmpd.c): fix -A flag, which got broken during someones changes.
+
+hardaker 3 May 99 12:58:19
+ - (Makefile.in, agent_read_config.c, Makefile.in, header_complex.c,
+ Makefile.in, encode_keychange.c, Makefile.in, Makefile.in,
+ all_general_local.h, all_system.h, keytools.c, lcd_time.c, scapi.c,
+ snmp_auth.c, snmpusm.c, tools.c, tools.h, Makefile.in, T.c,
+ etimetest.c, keymanagetest.c, misctest.c, scapitest.c):
+ - nuked all_general_local.h and all_system.h.
+ - makefileindepend as well.
+
+nba 3 May 99 15:40:11
+ (*.[ch]): patches to types to wipe warnings from compilers
+ with more strict noise levels. (also good when compiling
+ with gcc -Wall -pedantic -Wwrite-strings -Wcast-qual)
+
+nba 4 May 99 00:47:44
+ (mib.c): Fix problem (core dump) with MIBFILES environment variable.
+
+nba 4 May 99 00:51:16
+ (many): remove const spec from FindVarMethod. That was wrong
+
+hardaker 4 May 99 11:08:55
+ - (configure, configure.in): Added --enable-developer flag.
+
+mslifcak 6 May 99 09:20:30
+ - (ucd-snmp/vmstat.c) - conditionally include limits.h per Eduard Koucky.
+
+nba 10 May 99 14:47:22
+ Fixing some more prototypes. Pointed out by Markku Laukkanen.
+
+nba 10 May 99 14:49:49
+ snmplib/snmp_api.c: Mix-up of V1_IN_V2/V2_IN_V1 error code when GETBULK
+ inside V1 session.
+
+hardaker 11 May 99 14:02:48
+ - (util_funcs.c): read returns ssize_t not size_t.
+
+hardaker 11 May 99 14:03:25
+ - (memory.h): remove extern.
+
+hardaker 11 May 99 14:11:40
+ - (hpux.c, hpux.h): int -> size_t conversions.
+
+mslifcak 12 May 99 10:53:23
+ - (snmp_api.c snmp_client.c) call snmp_synch_reset from snmp_sess_close
+
+mslifcak 12 May 99 11:22:16
+ -(parse.c party_parse.c read_config.c) no exit() from library; return error
+
+daves 13 May 99 03:52:19
+ - (ip.c): Properly register IP module group on Free-BSD systems
+ (thanks to Mitchell Tasman)
+
+hardaker 13 May 99 09:09:18
+ - (vacm_vars.c): Set pointers to NULL after freeing them.
+
+mslifcak 14 May 99 06:54:51
+ - (agent/mibgroup/dummy/dummy.c agent/mibgroup/examples/example.c
+ agent/mibgroup/examples/example.h
+ agent/mibgroup/examples/wombat.c agent/mibgroup/misc/ipfwacc.c
+ agent/mibgroup/smux/smux.c
+ agent/mibgroup/snmpv3/snmpMPDStats.c
+ agent/mibgroup/snmpv3/usmStats.c
+ agent/mibgroup/snmpv3/usmUser.c snmplib/snmp_auth.c) more size_t fixes
+
+mslifcak 14 May 99 09:47:10
+ - (agent/mibgroup/examples/wombat.h agent/mibgroup/host/hr_disk.c
+ agent/mibgroup/mibII/interfaces.c
+ agent/mibgroup/mibII/var_route.c
+ agent/mibgroup/snmpv3/usmUser.c apps/encode_keychange.c
+ snmplib/parse.c) more ANSI-C touchups
+
+mslifcak 14 May 99 13:59:37
+ -(agent/mibgroup/mibII/interfaces.c snmplib/snmpusm.c) fixes to build HP & AIX
+
+daves 17 May 99 03:20:53
+ - (snmp_parse_args.c): Initialise session using library routine
+
+daves 17 May 99 04:34:55
+ - (snmplib/snmp_api.h snmplib/snmp_api.c snmplib/snmp_client.c
+ agent/snmpd.c agent/mibgroup/mibII/vacm_vars.c
+ agent/mibgroup/v2party/alarm.c agent/mibgroup/v2party/event.c
+ apps/snmpstatus.c apps/snmptest.c apps/snmptrap.c apps/snmptrapd.c):
+
+ - Use the generic socket addresses 'struct sockaddr',
+ rather than the IP-specific 'struct sockaddr_in'
+
+daves 17 May 99 04:38:00
+ - (snmplib/snmp_api.h snmplib/snmp_api.c snmplib/snmp_client.c
+ agent/snmpd.c agent/mibgroup/mibII/vacm_vars.c
+ agent/mibgroup/v2party/alarm.c agent/mibgroup/v2party/event.c
+ apps/snmpstatus.c apps/snmptest.c apps/snmptrap.c apps/snmptrapd.c):
+
+ - Use the generic socket address 'struct sockaddr',
+ rather than the IP-specific 'struct sockaddr_in'
+
+daves 17 May 99 07:18:02
+ - (snmplib/snmp_api.c snmplib/snmp_api.h agent/snmpd.c
+ apps/snmptrap.c apps/snmptrapd.c):
+
+ - Use a single address field within the PDU structure
+ (obsoleting 'agent_addr')
+
+daves 18 May 99 06:26:16
+ - (snmp_api.c snmp_api.h): More general handling of PDU flags
+
+mslifcak 18 May 99 09:01:46
+ - (xx/Makefile.in) remove references to as yet missing disman files.
+
+daves 18 May 99 09:23:50
+ - (configure.in snmplib/context_parse.c snmplib/read_config.c
+ snmplib/snmp_api.c snmplib/snmpv3.c snmplib/system.c
+ apps/snmp_parse_args.c apps/snmpbulkwalk.c apps/snmpdelta.c
+ apps/snmpget.c apps/snmpgetnext.c apps/snmpset.c
+ apps/snmpstatus.c apps/snmptable.c apps/snmptest.c
+ apps/snmptrap.c apps/snmpusm.c apps/snmpwalk.c
+ apps/snmpnetstat/if.c apps/snmpnetstat/inet.c
+ apps/snmpnetstat/main.c apps/snmpnetstat/route.c
+ apps/snmpnetstat/winstub.c):
+ - Clean up conditionals protecting include files
+ ( #if HAVE_WINSOCK_H / #else / #endif )
+
+daves 19 May 99 02:33:07
+ - (config.h.in): Additional include protection entries
+
+daves 19 May 99 05:11:37
+ - (snmp_api.c): More generalised handling of socket addresses
+
+mslifcak 19 May 99 18:02:55
+ -(mibII/var_route.c) - fix Linux RouteMask c/o "Nancy" nam@cs.cmu.edu
+
+mslifcak 19 May 99 18:50:12
+ - (host_res.h) fix HAVE_NET_IF_VAR_H define (was HAVE_NET_IN_VAR_H)
+
+daves 20 May 99 03:46:24
+ - (snmp_api.h): Temporary fix to socket address problems
+
+mslifcak 21 May 99 05:24:23
+ -(read_config.c) cast fix per Markku Laukkanen
+
+daves 21 May 99 05:54:22
+ - (snmp_api.c snmp_api.h):
+ - New API call to close down all open sessions
+ (also called on application shutdown)
+
+hardaker 21 May 99 11:10:44
+ - (mib2c.conf, mib2c.storage.conf):
+ - convert to size_t storages.
+ - misc eval fixes.
+ - more cleanup of the storage def.
+
+mslifcak 21 May 99 15:29:46
+ - library changes to build on Win32.
+
+mslifcak 24 May 99 05:36:13
+ -configure - save one which looks for netdb/socket headers
+
+hardaker 26 May 99 11:19:03
+ - (ipfwacc.h): properly locate the mib.
+
+hardaker 26 May 99 15:14:55
+ - (hr_swinst.c): make software application type unknown instead of app.
+
+hardaker 26 May 99 15:18:04
+ - (IPFWACC-MIB.txt): change to counters.
+
+hardaker 26 May 99 15:20:32
+ - (ipfwacc.h): make into counters.
+
+hardaker 26 May 99 15:56:03
+ - (acconfig.h, config.h.in): increase MAXREADCOUNT.
+
+hardaker 26 May 99 17:40:28
+ - (IPFWACC-MIB.txt): added SEQUENCE OF.
+
+mslifcak 27 May 99 05:16:25
+ -(encode_keychange, read_config, snmpusm) aCC fixes by PKY (Markku Laukkanen)
+
+hardaker 27 May 99 14:30:03
+ - (snmptrapd_handlers.c): implement the default trap handler.
+
+hardaker 27 May 99 14:30:15
+ - (snmptrapd.c): need an init_mib().
+
+hardaker 27 May 99 14:37:06
+ - (snmptrapd.conf.5.def): document default oid keyword.
+
+hardaker 27 May 99 14:37:32
+ - (snmptrapd.c): document default oid keyword in help line.
+
+daves 28 May 99 07:02:01
+ - (agent/Makefile.in agent/mibgroup/Makefile.in): fix problem with null macro
+
+daves 28 May 99 08:14:05
+ - (snmplib/snmp_api.c): save local socket address in internal session structure
+
+daves 28 May 99 08:57:19
+ - (snmplib/snmp_api.c): Unix domain (datagram) socket support
+
+daves 28 May 99 09:12:20
+ - (snmplib/snmp_api.c): Separate out copying a session and opening a new one
+
+mslifcak 28 May 99 09:24:56
+ -(snmp_api.c) -catch one more error close from snmp_sess_copy
+
+hardaker 28 May 99 16:17:13
+ - (mib.c, parse.c, parse.h): save and use index clauses.
+
+hardaker 28 May 99 16:44:42
+ - (Makefile.in, default_store.c, default_store.h):
+ - created generic default value storage space and parsers to reduce
+ the number of functions/etc created for values which configure the
+ library.
+
+daves 1 Jun 99 02:17:27
+ - (snmplib/snmp_api.c): Garbage collection for Traditional SAPI sessions
+
+daves 1 Jun 99 02:32:13
+ - (snmplib/snmp_api.c): Generalise handling of addresses (w.r.t sento/recvfrom)
+
+daves 1 Jun 99 07:30:42
+ - (snmplib/snmp_api.c snmplib/snmp_api.h): Support for stream-based sockets
+
+hardaker 1 Jun 99 17:21:53
+ - (Makefile.in, snmp_alarm.c, snmp_alarm.h, snmp_api.c):
+ - implemented a generic alarm handler to register alarm functions to
+ be called back after X period of time and it handles figuring out
+ which is next and calling alarm() and signal() appropriately.
+
+mslifcak 4 Jun 99 09:51:13
+ -(hr_filesys.c,interfaces.c,tcp.c,udp.c,freebsd3.h) fix FreeBSD3.1 incl Ken Key's tcp/udp patches
+
+mslifcak 7 Jun 99 07:44:06
+ -(interfaces.c, tcp.c, udp.c, ip.c) clone fixes from 3.6 line (FreeBSD3.1)
+
+mslifcak 7 Jun 99 13:04:21
+ -(if.c) check for valid pointer before de-referencing.
+
+mslifcak 8 Jun 99 07:43:10
+ -(hr_filesys.c) fix memory leak when HAVE_GETFSSTAT is defined.
+
+daves 8 Jun 99 08:43:59
+ - (agent/mibgroup/v2party/alarm.c
+ snmplib/snmp_api.c snmplib/snmp_api.h
+ snmplib/snmp_auth.c snmplib/snmp_impl.h):
+ - removed all uses of 'struct packet_info' (subsumed into 'struct snmp_pdu')
+
+mslifcak 8 Jun 99 09:32:48
+ -(xx__freebsd2.c) - fix size_t to build on FreeBSD 2.2.x
+
+daves 9 Jun 99 06:32:02
+ - (snmp_api.h): reorder PDU and session fields more clearly
+
+hardaker 9 Jun 99 18:31:42
+ - (*): merged 3.6.2 changes into main branch.
+
+daves 15 Jun 99 03:59:23
+ - (snmp_agent.c): Removed duplicate code
+
+daves 15 Jun 99 08:28:00
+ - (snmp_agent.c snmp_agent.h):
+ - Move processing from 'handle_next_pass()' to 'handle_snmp_packet()'
+
+hardaker 15 Jun 99 16:25:57
+ - (snmp_api.c): fix allowed zerolength pdu->securityName problem for
+ v3 engineID discovery probes.
+
+daves 16 Jun 99 05:11:48
+ - (snmp.h snmp_api.c): move PDU validation, etc from 'send' to 'build' routines
+
+daves 16 Jun 99 05:49:38
+ - (snmp_api.c): handle responses in a more protocol-independent manner
+
+daves 16 Jun 99 06:56:14
+ - (snmp_api.c snmp_api.h): Hooks for building/parsing non-SNMP packets
+
+hardaker 16 Jun 99 16:24:58
+ - (default_store.c, default_store.h, mib.c, parse.c):
+ - first usage of the default_store() routines: move all the mib
+ parser variables to it, and add snmp.conf tokens for them.
+ - premib auto-registration of default_store needs cleaning up... sigh...
+
+hardaker 16 Jun 99 16:51:11
+ - (snmp_api.c, snmp_debug.c, snmp_debug.h):
+ - 2 new snmp.conf tokens: doDebugging, debugTokens.
+
+hardaker 17 Jun 99 07:39:01
+ - (configure, configure.in): fix --help.
+
+mslifcak 17 Jun 99 13:18:35
+ fixups to build most apps under Win32 (MSVC++ 5.0 or later)
+
+mslifcak 18 Jun 99 05:01:54
+ applied fixes from M. Laukkanen
+
+daves 18 Jun 99 06:58:53
+ - (sysORTable.c sysORTable.h): new routine for removing sysORTable entries
+
+daves 18 Jun 99 07:56:46
+ - (snmp.h snmp_api.c): distinguish between SNMP protocol & PDU handling flags
+
+daves 18 Jun 99 08:00:34
+ - (snmp_client.c): Enable access to "empty" response PDUs (i.e. header only).
+ (also make 'snmp_clone_mem' accessible to other files)
+
+daves 18 Jun 99 08:04:22
+ - (asn1.h snmp_api.c): New private types for OID ranges
+
+daves 18 Jun 99 08:44:11
+ - (snmp_api.h): New socket address structure
+
+daves 18 Jun 99 08:47:38
+ - (snmp_api.c): protocol-independent non-response handling in 'snmp_sess_read'
+
+daves 18 Jun 99 08:49:52
+ - (snmp_api.c):
+ - accomodate servers that require an accessible client-end unix stream socket
+ (in particular, the CMU AgentX master agent)
+
+daves 18 Jun 99 08:55:32
+ - (snmp_api.h Makefile.in agentx.c agentx.h agentx_client.c):
+ - basic AgentX protocol handling
+
+daves 18 Jun 99 09:00:16
+ - (snmp_vars.c): protocol-independent means of bypassing VACM checks
+
+daves 18 Jun 99 09:14:58
+ - (snmpd.c snmpd.h snmp_vars.c snmp_agent.c snmp_agent.h
+ mibgroup/mibII/sysORTable.c):
+ - initial AgentX sub-agent implementation
+
+mslifcak 18 Jun 99 10:02:03
+ -(sysORTable.c) fix ptr test
+
+mslifcak 22 Jun 99 05:21:03
+ invoke snmp_sess_init before any MIB processing (fixes master agent).
+
+nba 22 Jun 99 05:25:13
+ TODO: need for Counter64 support in snmpdelta
+
+daves 28 Jun 99 03:08:42
+ - (snmp_agent.c snmp_agent.h): make SNMP packet handling routine re-entrant.
+
+daves 28 Jun 99 04:07:36
+ - {Makefile.in agent_read_config.c snmp_vars.c agent_registry.c):
+ - Consolidate all registry handling into one file
+
+daves 28 Jun 99 09:52:08
+ - (agent_registry.c snmp_vars.c snmp_vars.h var_struct.h):
+ - Non-recursive MIB registry implementation
+
+hardaker 28 Jun 99 14:59:41
+ - (snmpd.c): init_snmp_alarm().
+
+hardaker 28 Jun 99 15:01:14
+ - (snmptrapd.c): init_snmp_alarm();
+
+daves 30 Jun 99 01:37:11
+ - (sysORTable.c sysORTable.h): Indicate success/failure of {un}registration
+
+daves 30 Jun 99 01:45:26
+ - (agent_registry.c snmp_vars.h): Indicate success/failure of {un}registration
+
+daves 30 Jun 99 01:48:34
+ - (snmp_agent.c snmp_agent.h): 'agent_snmp_session' initialisation routine
+
+daves 30 Jun 99 02:32:03
+ - (snmp_api.c): Correct the setup of stream-based accepted internal sessions
+
+daves 30 Jun 99 03:20:46
+ - (agent_read_config.h): omit redundant declarations
+
+daves 30 Jun 99 05:05:44
+ - (snmp_api.c): Provide the correct size of socket addresses
+
+daves 30 Jun 99 05:06:52
+ - (config.h.in configure.in configure): check for sys/un.h
+
+daves 30 Jun 99 05:48:40
+ - (snmp_api.c): Missed one 'sendto' call
+
+hardaker 30 Jun 99 19:37:36
+ - (default_store.c, default_store.h, mib.c, mib.h, snmp_api.c,
+ snmpv3.c, snmpv3.h):
+ - convert more stuff to the default_store space.
+
+daves 2 Jul 99 02:39:41
+ - (snmp_api.c): Fix that last 'sendto' case *correctly* this time
+
+daves 2 Jul 99 05:13:42
+ - (snmplib/asn1.h agent/snmp_vars.h agent/snmp_agent.c):
+ - implement an interface for delegating requests to subagents
+
+daves 2 Jul 99 05:15:56
+ - (var_struct.h agent_registry.c):
+ - map between MIB registrations and the supporting (subagent) session
+
+daves 2 Jul 99 05:16:41
+ - (snmp_api.h): support lists of sessions (and subsessions)
+
+hardaker 2 Jul 99 08:27:30
+ - (snmptranslate.c): register debugging tokens with -D
+
+daves 6 Jul 99 02:20:57
+ - (snmp_agent.c): Fix handling of SNMPv1 noSuchName
+
+daves 7 Jul 99 06:54:53
+ - (asn1.c asn1.h snmp.c snmp.h snmp_api.c snmp_api.h
+ snmp_auth.c snmp_impl.h agentx.c):
+ - First attempt at formatted display of packet data
+
+daves 8 Jul 99 02:16:15
+ - (snmp_api.c): Retain community string in responses
+
+daves 8 Jul 99 06:25:07
+ - (mibII/system_mib.c mibII/snmp_mib.c):
+ - Update 'write' routines for V4 architecture,
+ and using the full SET multi-pass algorithm
+
+hardaker 8 Jul 99 14:29:35
+ - (config.h): comment change for internal md5.
+
+hardaker 8 Jul 99 14:30:47
+ - (asn1.c): -Wall fixes.
+
+hardaker 8 Jul 99 14:36:52
+ - (configure, configure.in, Makefile.in, snmp2p.c, snmp_agent.c,
+ snmp_vars.c, snmpd.c, view_parse.c, vacm_vars.c, snmp_parse_args.c,
+ snmptrapd.c, snmptrapd_handlers.c, main.c, Makefile.in, acl.c,
+ acl.h, acl_parse.c, context.c, context.h, context_parse.c,
+ libsnmp.h, party.c, party.h, party_parse.c, snmp.h, snmp_api.c,
+ snmp_auth.c, snmp_client.c, view.c, view.h):
+ - v2party support is finally gone!
+
+hardaker 8 Jul 99 14:49:08
+ - (*/Makefile.in): make depend
+
+hardaker 8 Jul 99 15:16:35
+ - (snmpdelta.c, int64.c, int64.h): minimal c64 support for snmpdelta. Untested.
+
+hardaker 8 Jul 99 16:02:58
+ - (snmpd.c): Patch from Ragnar Kjørstad:
+ - Add options for switching to a given uid and gid.
+
+daves 9 Jul 99 01:49:49
+ - (snmpd.c): Clean up gid/uid change logging
+
+daves 9 Jul 99 08:27:39
+ - (*/Makefile.in snmplib/snmp_api.c
+ agent/agent_registry.c agent/snmp_agent.[ch] agent/snmp_vars.[ch]
+ agent/snmpd.[ch] agent/mibgroup/mibII/sysORTable.c):
+ - Move AgentX handling out of the main SNMP library
+
+mslifcak 9 Jul 99 12:12:50
+ -(snmp_client.*) remove snmp_synch_setup, snmp_synch_reset
+
+mslifcak 9 Jul 99 14:20:23
+ -(win32,snmplib,apps,agent) add snmp_socket_length to hide sockaddr_un; Win32 touchups
+
+mslifcak 11 Jul 99 18:36:24
+ Reduce use of snmp_errno - fix memory leak, unused vars, and unset var.
+
+daves 12 Jul 99 07:14:36
+ - (agent/mibgroup/Makefile.in): remove dependency on snmplib/agentx.h
+
+daves 12 Jul 99 08:32:27
+ - (mibgroup/host/*): Dynamically register all Host Resource modules
+
+mslifcak 14 Jul 99 13:14:30
+ -(snmp_api.c) - snmp_add_var returns SNMPERR; MAY set snmp_errno
+
+mslifcak 14 Jul 99 13:46:53
+ -(snmplib/mib.c) - conditionally allow for not setting snmp_errno
+
+hardaker 15 Jul 99 08:46:00
+ - (asn1.c, snmp_api.c, snmp_auth.c, snmp_debug.c, snmp_debug.h):
+ - beginning of a -Ddump version of packet dumping.
+ - needs a lot more work and clean up.
+ - I need comments... Tell me what you think...
+
+hardaker 20 Jul 99 14:02:26
+ - (auto_nlist.c, history.c, kernel.c, snmp_agent.c, snmpd.c,
+ dlmod_mib.c, kernel_sunos5.c, mibincl.h, util_funcs.c, ipfwchains.c,
+ at.c, interfaces.c, ip.c, route_write.c, system_mib.c, tcp.c, udp.c,
+ vacm_vars.c, var_route.c, dlmod.c, smux.c, disk.c, extensible.c,
+ loadave.c, memory_solaris2.c, pass.c, pass_persist.c, proc.c,
+ versioninfo.c, alarm.c, event.c, Makefile.in, parse.c, snmp.c,
+ snmp_debug.c, snmp_logging.c, snmp_logging.h): Patch from Ragnar
+ Kjørstad:
+ - do file, stderr, and syslog support.
+
+hardaker 20 Jul 99 17:06:53
+ - (auto_nlist.c, snmp_agent.c, snmpd.c, dlmod_mib.c, kernel_sunos5.c,
+ ipfwchains.c, interfaces.c, dlmod.c, smux.c, versioninfo.c,
+ alarm.c):
+ - convert snmp_log(LOG_DEBUG) to DEBUGMSGTL().
+
+mslifcak 20 Jul 99 18:11:50
+ -minor changes to build Win32 platforms using CygWin-egcs and MSVC compilers.
+
+mslifcak 20 Jul 99 19:33:26
+ - no printf in ascii_to_binary
+
+hardaker 21 Jul 99 16:06:52
+ - (tkmib, mib2c): udpate to use indexes (requires a perl patch.
+
+hardaker 23 Jul 99 10:36:54
+ - (snmp_parse_args.c): log to stderr.
+
+hardaker 23 Jul 99 10:44:17
+ - (aclocal.m4, config.h.in, configure, configure.in, snmp_agent.c,
+ snmp_vars.c, snmpd.c, kernel_sunos5.c, util_funcs.c, interfaces.c,
+ interfaces.h, system_mib.c, var_route.c, snmpEngine.c,
+ snmpTargetParamsEntry.c, snmptrapd.c, HOST-RESOURCES-MIB.txt,
+ IANAifType-MIB.txt, IF-MIB.txt, IP-MIB.txt, TCP-MIB.txt,
+ UDP-MIB.txt, parse.c, snmp_alarm.c, snmp_logging.c, snmp_logging.h):
+ - merge from V3-line post 3.6.2 to current.
+ - misc bug fixes.
+ - make apps turn on stderr logging by default.
+
+hardaker 23 Jul 99 13:18:23
+ - (snmpd.c): more snmp_log conversions.
+
+hardaker 23 Jul 99 13:18:44
+ - (util_funcs.c): change malloc size().
+
+hardaker 23 Jul 99 13:19:20
+ - (asn1.c): null terminate parsed strings, just in case.
+
+hardaker 23 Jul 99 13:20:02
+ - (snmp.c): xdump fixes.
+
+hardaker 23 Jul 99 13:20:33
+ - (keytools.c, parse.c, read_config.c, snmp_api.c): snmp_log conversions.
+
+hardaker 23 Jul 99 14:19:39
+ - (asn1.c, asn1.h, snmp.c, snmp_api.c, snmp_auth.c, snmp_impl.h):
+ - revert to non-dparse versions of asn decoding.
+
+hardaker 23 Jul 99 14:26:57
+ - (snmpd.c): init debugging.
+
+hardaker 23 Jul 99 15:22:02
+ - (snmpbulkwalk.c, snmpdelta.c, snmpget.c, snmpgetnext.c, snmpset.c,
+ snmpstatus.c, snmptable.c, snmptest.c, snmptranslate.c, snmptrap.c,
+ snmptrapd.c, snmpusm.c, snmpwalk.c, snmp_api.c, snmp_api.h,
+ snmp_client.c):
+ - make and use snmp_sess_perror(str, sess) for error printing.
+
+mslifcak 24 Jul 99 07:11:30
+ -(asn1.c) - fix compare error at line 386; remove unused vars elsewhere
+
+mslifcak 24 Jul 99 07:18:13
+ -(libsnmp.def) - add decls for new error logging functions.
+
+mslifcak 24 Jul 99 07:45:59
+ -(snmp_client.c) - use SET_SNMP_ERROR for restored snmp_errno sets.
+
+mslifcak 24 Jul 99 08:11:05
+ -(md5.c) - wrap unused MD5print with SNMP_TESTING_CODE ifdef
+
+hardaker 26 Jul 99 07:37:09
+ - (SNMPv2-CONF.txt): removed bogus IMPORTS clause
+
+hardaker 26 Jul 99 09:04:09
+ - (*/Makefile.in): make depend
+
+hardaker 26 Jul 99 09:14:24
+ - (NEWS): updated a bit
+
+hardaker 26 Jul 99 11:51:22
+ - (version.h bug-report sedscript.in): version tag ( 4.0.pre4 )
+
+hardaker 26 Jul 99 14:32:17
+ - (mib.c): BIT_string: -> BITS:
+
+mslifcak 26 Jul 99 15:12:45
+ -(asn1.c,asn1.h,snmp.c,snmp_api.c,snmp_auth.c,snmpusm.c) more detailed parse error messages.
+
+hardaker 26 Jul 99 15:59:10
+ - (agent/mibgroup/Makefile.in): fix make depend.
+
+hardaker 26 Jul 99 17:06:03
+ - (interfaces.c): Patch from Markku Laukkanen:
+ - variable naming change.
+
+hardaker 26 Jul 99 17:06:47
+ - (hpux.h): Patch from Markku Laukkanen:
+ - define hpux
+
+hardaker 26 Jul 99 17:07:31
+ - (keytools.c, keytools.h, parse.c, scapi.c): Patch from Markku Laukkanen:
+ - size_t changes.
+
+mslifcak 27 Jul 99 04:24:08
+ add include net/if_dl.h suggested by Tom Ivar Helbekkmo
+
+daves 27 Jul 99 06:38:09
+ - (agent/mibgroup/ucd-snmp/*.c): tweak registry labels
+
+mslifcak 27 Jul 99 07:52:37
+ -(agent/kernel.c,agent/dlmods/dlmod_mib.c,agent/dlmods/example.c,
+ agent/mibgroup/kernel_sunos5.c,agent/mibgroup/util_funcs.c,
+ agent/mibgroup/agentx/master_request.c,
+ agent/mibgroup/agentx/protocol.c,agent/mibgroup/dummy/dummy.c,
+ agent/mibgroup/examples/example.c,
+ agent/mibgroup/examples/ucdDemoPublic.c,
+ agent/mibgroup/examples/wombat.c,
+ agent/mibgroup/host/hr_device.c,agent/mibgroup/host/hr_disk.c,
+ agent/mibgroup/host/hr_filesys.c,
+ agent/mibgroup/host/hr_network.c,
+ agent/mibgroup/host/hr_partition.c,
+ agent/mibgroup/host/hr_print.c,agent/mibgroup/host/hr_proc.c,
+ agent/mibgroup/host/hr_storage.c,
+ agent/mibgroup/host/hr_swinst.c,agent/mibgroup/host/hr_swrun.c,
+ agent/mibgroup/host/hr_system.c,
+ agent/mibgroup/ipfwchains/ipfwchains.c,
+ agent/mibgroup/mibII/at.c,agent/mibgroup/mibII/icmp.c,
+ agent/mibgroup/mibII/interfaces.c,agent/mibgroup/mibII/ip.c,
+ agent/mibgroup/mibII/route_write.c,
+ agent/mibgroup/mibII/snmp_mib.c,
+ agent/mibgroup/mibII/sysORTable.c,
+ agent/mibgroup/mibII/system_mib.c,agent/mibgroup/mibII/tcp.c,
+ agent/mibgroup/mibII/udp.c,agent/mibgroup/mibII/var_route.c,
+ agent/mibgroup/misc/dlmod.c,agent/mibgroup/snmpv3/snmpEngine.c,
+ agent/mibgroup/snmpv3/usmUser.c,
+ agent/mibgroup/target/snmpTargetAddrEntry.c,
+ agent/mibgroup/target/snmpTargetParamsEntry.c,
+ agent/mibgroup/ucd-snmp/file.c,
+ agent/mibgroup/ucd-snmp/registry.c,
+ agent/mibgroup/v2party/acl_vars.c,
+ agent/mibgroup/v2party/alarm.c,
+ agent/mibgroup/v2party/context_vars.c,
+ agent/mibgroup/v2party/event.c,
+ agent/mibgroup/v2party/party_vars.c,
+ agent/mibgroup/v2party/view_vars.c,apps/encode_keychange.c,
+ snmplib/asn1.c,snmplib/scapi.c,snmplib/snmp_client.c,
+ snmplib/snmp_client.h) ERROR_MSG, printf --> DEBUGMSGTL
+
+mslifcak 27 Jul 99 09:33:43
+ -(agent/kernel.c,agent/snmpd.c,agent/mibgroup/util_funcs.c,
+ agent/mibgroup/agentx/master.c,
+ agent/mibgroup/agentx/subagent.c,
+ agent/mibgroup/host/hr_swrun.c,agent/mibgroup/mibII/at.c,
+ agent/mibgroup/mibII/icmp.c,agent/mibgroup/mibII/ip.c,
+ agent/mibgroup/mibII/route_write.c,agent/mibgroup/mibII/tcp.c,
+ agent/mibgroup/mibII/udp.c,agent/mibgroup/ucd-snmp/disk.c,
+ agent/mibgroup/ucd-snmp/errormib.c,
+ agent/mibgroup/ucd-snmp/proc.c,
+ agent/mibgroup/ucd-snmp/vmstat.c,
+ agent/mibgroup/v2party/alarm.c,agent/mibgroup/v2party/event.c,
+ apps/snmpbulkwalk.c,apps/snmpdelta.c,apps/snmpget.c,
+ apps/snmpgetnext.c,apps/snmpset.c,apps/snmpstatus.c,
+ apps/snmptable.c,apps/snmptest.c,apps/snmptrap.c,
+ apps/snmptrapd.c,apps/snmpusm.c,apps/snmpwalk.c,
+ apps/snmpnetstat/inet.c,apps/snmpnetstat/main.c,
+ apps/snmpnetstat/route.c,snmplib/parse.c,snmplib/read_config.c,
+ snmplib/snmpv3.c) fix snmp_sess_perror use; use log_perror for perror
+
+mslifcak 27 Jul 99 12:00:37
+ -(encode_keychange.dsp,snmpusm.dsp) -build using common Win32 compiler
+
+mslifcak 27 Jul 99 12:24:03
+ -(apps:encode_keychange.c,snmpdelta.c,snmptable.c, snmpusm.c;
+ snmplib:read_config.c,snmpv3.c; win32/libsnmp_dll/libsnmp.def) -
+ adjust headers, build Win32 snmpusm+encode_keychange
+
+mslifcak 27 Jul 99 16:06:35
+ -(interfaces.c) - fix error setting if_ibytes for Linux 2.0
+
+hardaker 27 Jul 99 16:14:28
+ - (asn1.c, mib.c, mib.h, snmp_api.c, snmp_debug.c, snmp_debug.h, snmpusm.c):
+ - cleaned up debugging dump output.
+ - added more dump parse headers for v3 dumps.
+
+hardaker 27 Jul 99 16:20:46
+ - (asn1.c): fix header dump.
+
+mslifcak 27 Jul 99 17:15:01
+ including mib.h requires stdio.h to define FILE *.
+
+mslifcak 27 Jul 99 19:02:31
+ -(snmp_parse_args) in snmp_parse_oid, try get_node if read_objid fails.
+
+mslifcak 27 Jul 99 19:06:08
+ -(mib.c) fix walking OID length pointer, numeric sub-id not found
+ in read_objid and parse_subtree.
+
+mslifcak 27 Jul 99 23:34:59
+ -(snmpd.c) invoke log functions from child (correct process ID in syslog)
+
+mslifcak 27 Jul 99 23:58:51
+ -(keytools.c,md5.c,md5.h,scapi.c,snmp.c,snmp_api.c,snmp_auth.c) catch MD5 errors
+
+mslifcak 28 Jul 99 02:42:32
+ hr_swrun - reset pointer in module init (help HP/UX 9)
+ snmp_logging - use vsprintf for HP/UX-9
+
+hardaker 28 Jul 99 06:45:19
+ - (bug-report): change mail addr to ucd-snmp-bugs
+
+daves 29 Jul 99 03:29:40
+ - (mibII/vacm_vars.c): Catch use of unconfigured EXAMPLE.conf files
+
+mslifcak 29 Jul 99 08:34:59
+ memory_solaris2 : handle malloc errors
+ kernel_sunos5 : share kstat fildes [SHARE_KSTAT_FD]
+
+mslifcak 29 Jul 99 13:28:36
+ -(apps/Makefile.in) - comment unneeded TRAPSPECIAL line
+
+mslifcak 29 Jul 99 13:59:02
+ -(agent/snmpd.c) - log standard error until init is completed.
+
+mslifcak 29 Jul 99 15:04:49
+ auto_nlist, kernel : place log_perror to catch errno value in report.
+
+hardaker 29 Jul 99 17:03:25
+ - (configure, configure.in, Makefile.in): remove trap_special stuff.
+
+hardaker 29 Jul 99 17:06:56
+ - (mibgroup/v2party): removed files.
+
+mslifcak 30 Jul 99 03:51:31
+ Removed duplicate HAVE_GET???BYNAME; Removed unused _CRTIMP
+
+mslifcak 30 Jul 99 03:57:23
+ Removed hint of v2party from comment.
+
+mslifcak 30 Jul 99 04:00:28
+ -(agent/agent_read_config.c,agent/history.c,agent/snmp_vars.c,
+ agent/snmpd.c,snmplib/read_config.c,snmplib/snmp_alarm.c,
+ snmplib/snmp_api.c,snmplib/snmp_logging.c,snmplib/snmpv3.c,
+ snmplib/system.c) - psos diffs offered by Anthony Symons
+
+mslifcak 30 Jul 99 04:37:20
+ rename local var 'last' to 'last_ipch' - avoid shadow global decl
+
+mslifcak 30 Jul 99 04:39:38
+ decl log_perror
+
+mslifcak 30 Jul 99 04:42:48
+ rename sd to ifsd - avoid global shadow decl
+
+mslifcak 30 Jul 99 05:42:34
+ hr_storage.c - auto_nlist for HR_STORE_SIZE
+ hr_swrun.c - fix global shadow decl
+ snmp_logging.c - change filter for openlog per A. Symons patch
+
+daves 30 Jul 99 06:01:08
+ - (agent/agent_registry.c agent/snmp_vars.c agent/snmpd.c
+ apps/snmp_parse_args.c apps/snmptest.c apps/snmptrap.c
+ apps/snmptrapd.c apps/snmpnetstat/main.c snmplib/snmp_api.c
+ snmplib/snmp_api.h snmplib/snmp_client.c
+ agent/mibgroup/v2party.c agent/mibgroup/v2party.h):
+ - Removed last traces of v2p support
+
+daves 30 Jul 99 06:23:06
+ - (agent_read_config.c agent_registry.c snmp_vars.c snmp_vars_m2m.h):
+ - Removed last traces of obsolete v2party Manager-to-Manager support
+
+mslifcak 30 Jul 99 06:30:30
+ system - use sizeof
+
+mslifcak 30 Jul 99 06:30:59
+ win32/config.h - define HAVE_GETHOSTNAME
+
+mslifcak 30 Jul 99 06:46:22
+ use traditional K&R commenting; not all "C" compilers accept "//" comments.
+
+mslifcak 30 Jul 99 06:58:08
+ remove references to non-existent snmp_vars_m2m.h
+
+daves 30 Jul 99 07:01:46
+ - (configure.in configure): Check for libdb/libdb1 & librpm separately
+
+daves 30 Jul 99 07:31:56
+ - (acconfig.h): Check for libdb/libdb1 & librpm separately
+
+mslifcak 30 Jul 99 08:01:18
+ add vsnprintf check and HAVE_VSNPRINTF constant
+
+mslifcak 30 Jul 99 08:32:28
+ no struct sockaddr_dl in AIX 3.
+
+hardaker 30 Jul 99 14:10:05
+ - (config.h.in): autoheader run.
+
+hardaker 30 Jul 99 14:10:30
+ - (Makefile.in): make /var/ucd-snmp exist. We should do a permission
+ set as well.
+
+hardaker 30 Jul 99 14:18:55
+ - (*/Makefile.in): make depend
+
+hardaker 30 Jul 99 14:19:21
+ - (version.h bug-report sedscript.in): version tag ( 4.0.pre5 )
+
+mslifcak 2 Aug 99 04:29:35
+ asn1, parse) fixes supplied by Markku Laukkanen (MJS-use xcalloc in parse)
+
+mslifcak 2 Aug 99 04:37:46
+ parse - shame on me for not compile testing first!
+
+mslifcak 2 Aug 99 22:29:37
+ snmp_debug - DEBUGMSG macros call snmp_get_do_debugging before invoking debugmsg* functions.
+
+mslifcak 3 Aug 99 04:46:41
+ snmp_api.c - remove "BY" from HAVE_GETHOSTBYNAME (Solaris 2.5.1 wrong!)
+
+mslifcak 3 Aug 99 06:59:50
+ asn1.c - fix out-of-bound array write and memory leak in parsing strings.
+
+mslifcak 3 Aug 99 07:00:16
+ snmp_debug.c - remove trace messages from debugmsg_hextli.
+
+mslifcak 3 Aug 99 07:03:14
+ snmp_debug.h - move DEBUGTRACE from debugmsg_hextli to DEBUGDUMPSETUP
+
+mslifcak 3 Aug 99 07:58:49
+ vacm_vars.c - copy community string, null terminate, then debug print
+
+mslifcak 3 Aug 99 12:53:32
+ snmp_debug.h - fix "warning: ANSI C forbids conditional expr with only one void side".
+
+mslifcak 3 Aug 99 14:06:33
+ snmp_debug.c - signed comparison for len in debugmsg_hextli.
+
+mslifcak 4 Aug 99 03:48:02
+ -(smux.c) - patch supplied by Nick Amato to fix ASN_IPADDRESS parse.
+
+mslifcak 4 Aug 99 05:03:11
+ undo patch around Solaris' configure failure to register HAVE_GETHOSTBYNAME.
+
+mslifcak 4 Aug 99 09:17:18
+ -(configure*) - Ken Hornstein: fix test xxgethostbyname, xxgetservbyname.
+
+mslifcak 4 Aug 99 12:33:56
+ snmp_api.c - dummy functions snmp_synch_{setup,reset} and snmp_get_errno.
+
+mslifcak 5 Aug 99 03:25:55
+ config.sub - patch from Markku Laukkanen to support HPUX 11
+
+mslifcak 5 Aug 99 11:11:53
+ snmp_api.3 - describe snmp_error(), replaces snmp_errno and snmp_get_errno()
+
+daves 6 Aug 99 05:59:46
+ - (acconfig.h config.h.in configure.in configure):
+ - configure-time flag to control provision of "dummy" values
+
+daves 6 Aug 99 06:02:15
+ - (mibII/*.c host/*.c): Don't provide "dummy" values (unless explicitly configured)
+
+nba 9 Aug 99 00:24:37
+ parse.c: parse agent capabilities
+
+daves 9 Aug 99 01:02:15
+ - (FAQ): Nine new questions, plus assorted tweaks for the new release.
+
+mslifcak 9 Aug 99 06:48:47
+ mib.*, parse.* - move print_oid_report and minions wholly into mib.c
+
+mslifcak 9 Aug 99 06:50:36
+ snmpdelta, translate, trapd) - list all options in usage; remove disables for print_oid_report in translate.
+
+mslifcak 9 Aug 99 06:52:47
+ snmpd.c - list all options in usage
+
+mslifcak 9 Aug 99 06:54:01
+ libsnmp.def - remove print_oid_report disable options
+
+mslifcak 9 Aug 99 09:45:15
+ -(snmp.c) fix buffer overflow in xdump, of all places (77 s/b 78; using 80)
+
+nba 9 Aug 99 10:43:28
+ (many): nuke various prototype warnings
+
+mslifcak 9 Aug 99 11:40:25
+ -(md5.c) fix read past end problem
+ -(snmp_api.c) fix losing community string problem
+
+hardaker 9 Aug 99 13:12:35
+ - (acconfig.h, config.h.in, configure, configure.in): remove /dev/random test.
+
+mslifcak 9 Aug 99 15:07:24
+ snmpusm.c - always clear field_len if ref is valid ptr;
+ snmp_api.c - don't overwrite community pointer with securityAuthProto pointer
+
+nba 10 Aug 99 04:45:17
+ configure.in config.h.in configure s/netbsd agent/mibgroup/host/hr_storage.c:
+ support for NetBSD/sparc and NetBSD 1.4
+
+nba 10 Aug 99 04:46:35
+ snmplib/mib.c: fix handling of numeric oids and reporting errors
+
+nba 10 Aug 99 04:47:22
+ agent/kernel.c: abort on kvm_open failures
+
+nba 10 Aug 99 04:48:41
+ snmpnetstat/if.c: fixes for snmpnetstat -i on virtual interfaces
+
+nba 10 Aug 99 04:50:52
+ interfaces.c var_route.c snmp_logging.c: fix compiler warnings
+
+mslifcak 10 Aug 99 09:19:10
+ read_config.c, snmp_api.c - convert fprintf(stderr to snmp_log(LOG_ERR,WARNING)
+
+mslifcak 10 Aug 99 10:04:40
+ Fix for build (no pagesize var defined for linux).
+
+hardaker 10 Aug 99 11:05:38
+ - (snmpd.c): log version number after stderr is optionally closed.
+
+hardaker 10 Aug 99 14:26:33
+ - (snmp_vars.c): protect against evil mib modules from modifying
+ memory they shouldn't be modifying yet.
+ - (ifdef'ed for speed profiling later).
+
+hardaker 10 Aug 99 15:54:33
+ - (snmp_parse_args.c): force v3 engineID setting to something bogus to
+ get around local configuration data store time synchronization conflicts.
+
+hardaker 10 Aug 99 17:23:59
+ - (snmpd.c): print -H usage to stderr.
+
+hardaker 11 Aug 99 13:04:50
+ - (acconfig.h, config.h.in, read_config.c):
+ - Make persistent cache conform to a more secure umask.
+
+nba 11 Aug 99 21:52:26
+ hr_storage.c: remove to forgotten debug lines.
+
+nba 11 Aug 99 21:53:31
+ snmpnetstat/if.c: handle non-contiguous ifTable. Also make the
+ counters unsigned.
+
+hardaker 12 Aug 99 16:16:01
+ - (snmp.conf.5.def): updated with the newer token list.
+
+hardaker 12 Aug 99 16:41:22
+ - (FAQ, snmpcmd.1, snmptrap.1): minor doc updates.
+
+hardaker 12 Aug 99 16:46:34
+ - (NEWS, README): minor updates.
+
+daves 13 Aug 99 02:47:00
+ - (examples/ucdDemoPublic.[ch]
+ ipfwchains/ipfwchains.[ch] misc/ipfwacc.[ch]
+ target/snmpTarget{Addr,Params}Entry.[ch]
+ smux/snmp_*.[ch]):
+ - Register modules dynamically at run-time
+
+hardaker 13 Aug 99 07:11:35
+ - (Makefile.in): "make test" in top level Makefile.
+
+hardaker 13 Aug 99 07:12:18
+ - (NEWS, README.snmpv3, configure, configure.in): documentation updates.
+
+hardaker 13 Aug 99 07:16:51
+ - (Makefile.in, Makefile.in, Makefile.in, Makefile.in): make depend.
+
+hardaker 13 Aug 99 09:33:40
+ - (configure, configure.in): don't use NO_DUMMY_VALUES by default.
+
+mslifcak 13 Aug 99 11:14:39
+ (host/hr_device.c,host/hr_print.c, host/hr_proc.c,host/hr_storage.c,
+ host/hr_swinst.c,host/hr_swrun.c, host/hr_system.c,mibII/at.c,
+ mibII/interfaces.c,mibII/ip.c, mibII/system_mib.c,mibII/tcp.c,
+ mibII/udp.c,mibII/var_route.c) - #if NO_DUMMY_VALUES (help out configure)
+
+hardaker 13 Aug 99 11:55:31
+ - (var_route.c): don't do caching for NO_DUMMY_VALUES.
+
+mslifcak 13 Aug 99 12:18:17
+ var_route.c - #ifdef NO_DUMMY --> #if NO_DUMMY (like the other uses).
+
+hardaker 13 Aug 99 12:49:35
+ - (configure, configure.in): properly do what --without-dummy-values
+ should do.
+
+hardaker 13 Aug 99 15:22:53
+ - (configure, configure.in): remove config_load_mib parsing.
+
+hardaker 13 Aug 99 15:35:54
+ - (Makefile.in): don't remove mib_module_loads.h.
+
+hardaker 13 Aug 99 16:05:42
+ - (remove-files): remove the ISSUES file for releases.
+
+hardaker 13 Aug 99 16:06:51
+ - (version.h bug-report sedscript.in): version tag ( 4.0.pre6 )
+
+nba 16 Aug 99 14:58:40
+ snmpnetstat/if.c: allow -i and -o outputs even with incomplete responses
+ from snmpd (such as Linux that does not return ifInNUCastPkts
+ with the new DUMMY setup)
+
+nba 16 Aug 99 14:59:29
+ snmpnetstat/main.c: enable_stderrlog() so that we get an error message
+ for bad host names.
+
+nba 18 Aug 99 02:40:48
+ agent/snmpd.c: move the termination processing from the signal handler
+ to after the main loop has terminated.
+
+nba 18 Aug 99 02:51:57
+ - snmpd.c, agent_read_config.?, versioninfo.c: move the reconfiguration
+ outside the signal handler.
+
+nba 18 Aug 99 09:26:35
+ - interfaces.?: updates for Linux to handle large counters and virtual
+ interfaces.
+
+nba 18 Aug 99 09:31:06
+ - (many): change the names of the logging functions to be snmp_*
+ default do_stderr_logging to 1.
+
+nba 19 Aug 99 02:33:56
+ - interfaces.c: remove some left over debug output
+
+nba 19 Aug 99 02:35:10
+ - snmp_logging.c, agent/various: reinstate -a and -V logging (almost).
+ timestamp file and stderr logging.
+
+nba 19 Aug 99 10:38:02
+ - snmp_api.c: correcly call pre-parse hook, also when not debugging
+ (this killed the libwrap check in snmpd)
+
+nba 19 Aug 99 10:38:48
+ - smux.c: remove some extraneous \n from snmp_log_perror calls.
+
+nba 19 Aug 99 10:40:22
+ - snmpd.c: remove some superfluous : from snmp_log_perror.
+ Log when snmpd reconfigures following a SIGHUP
+
+nba 19 Aug 99 14:09:25
+ - snmp_api.?, snmpd.c, snmptrap.c, snmptrapd.c: reinstate agent_addr in
+ the pdu structure (used for v1 traps).
+
+hardaker 19 Aug 99 16:09:54
+ - (snmpget.c, snmpgetnext.c, snmpset.c): Patch from dlengel@home.com:
+ - check argument count for minimum number.
+
+nba 20 Aug 99 03:43:37
+ - agentx/*: various prototype fixes, to keep number of warnings down
+
+hardaker 20 Aug 99 13:43:56
+ - (default_store.h, snmp_api.c, snmp_logging.c, snmp_logging.h):
+ - make logging of timestamps optional by a snmp.conf directive.
+
+hardaker 20 Aug 99 13:56:57
+ - (snmp.conf.5.def, default_store.h, snmp_logging.c):
+ - turn off time stamp logging by default. It must be explicitly
+ requested in the snmp.conf file to turn it on.
+ (the reason is that a lot of logging is incremental in nature and
+ is not line buffered before being sent to the logging routines.
+ The other solution is to have the logging routines detect when to
+ print timestamps by watching out for \n's. But, not this round.
+
+hardaker 20 Aug 99 16:39:21
+ - (snmp_api.h, snmp_api.c, snmp_auth.c, snmp_impl.h, asn1.c): 64bit cleanup.
+
+hardaker 20 Aug 99 17:08:17
+ - (NEWS): last minute changes
+
+hardaker 20 Aug 99 17:10:26
+ - (version.h bug-report sedscript.in): version tag ( 4.0.pre7 )
+
+hardaker 22 Aug 99 17:33:00
+ - (ipfchains): removed from distribution. Newer one in ftp's contrib dir.
+
+hardaker 22 Aug 99 17:54:57
+ - (configure, configure.in):
+ - --without-dummy-values is default again.
+ - cleanup of --help stuff.
+ - fix of peristent directory creation.
+
+hardaker 22 Aug 99 17:56:27
+ - (Makefile.in, Makefile.in): make depend.
+
+hardaker 22 Aug 99 17:57:27
+ - (snmp_api.h): version -> u_long.
+
+mslifcak 23 Aug 99 06:14:39
+ Remove last vestiges of config_load_mib
+
+hardaker 23 Aug 99 07:02:43
+ - (NEWS): ansi mentioned.
+
+mslifcak 23 Aug 99 09:00:59
+ Win32 build fixes
+
+nba 23 Aug 99 13:54:32
+ - agent/snmpd.c, agent/snmp_vars.c: move some -v logging to a more rational
+ place.
+
+mslifcak 23 Aug 99 14:02:51
+ Describe USE_ASN_SHORT_LEN in FAQ, and implement in _snmp_build.
+
+mslifcak 23 Aug 99 15:32:21
+ HACK! fixup short length (first put correct community string in pdu-> ).
+
+hardaker 23 Aug 99 16:14:00
+ - (T028snmpv3getfail): snmpv3 get failure test.
+
+hardaker 23 Aug 99 16:14:00
+ - (INSTALL): remove version specific information
+
+-------------------------------------------------------------------------------
+
+Changes: V3.6.1 -> V3.6.2
+
+hardaker 16 Mar 99 08:15:18
+ - (dlmod.c): removed a bogus new-line.
+
+hardaker 16 Mar 99 10:34:03
+ - (hr_swrun.c): fix file descriptor leak on freebsd.
+
+mslifcak 16 Mar 99 11:23:30
+ -(snmp_api.c) consistent error return.
+
+mslifcak 16 Mar 99 11:33:52
+ - move MATCH_FAILED/MATCH_SUCCEEDED from util_funcs.h to mibincl.h
+
+mslifcak 17 Mar 99 13:53:48
+ -(hr_swrun.c) - prevent SunOS 4.1 core (sunos4 still primitive)
+
+mslifcak 18 Mar 99 08:37:45
+ - (mibII/ip.c) fix MIB_IPCOUNTER_SYMBOL usage
+
+hardaker 19 Mar 99 09:23:38
+ - (snmpget.c, snmpwalk.c): fixed initialization and usage of "failures".
+
+hardaker 23 Mar 99 10:09:47
+ - (Makefile.in): add more targets.
+
+hardaker 23 Mar 99 10:10:11
+ - (read_config.c): make copy_word() return the next token, not the
+ next space.
+
+hardaker 23 Mar 99 10:11:03
+ - (mibdefs.h, struct.h, extensible.c, extensible.h, proc.c, proc.h,
+ snmpd.conf.5.def, UCD-SNMP-MIB.txt):
+ - per-process/exec fix scripts created.
+
+hardaker 23 Mar 99 10:23:21
+ - (versiontag): regexp fix.
+
+hardaker 28 Mar 99 16:11:32
+ - (snmpTargetAddrEntry.h, snmpTargetParamsEntry.h): relocate to
+ snmpModules.12, where they should be.
+
+hardaker 28 Mar 99 16:17:24
+ - (snmpTargetAddrEntry.c, snmpTargetParamsEntry.c):
+ - when using copy_word() don't skip spaces, since it does that.
+
+mslifcak 1 Apr 99 13:10:47
+ - (libsnmp.h) Asymptotically closer to supporting CMU constants.
+
+mslifcak 5 Apr 99 11:06:27
+ - (snmp_api.c, main.c, snmp_parse_args.c) Joe Marzot's fix to copy even an empty community name.
+
+mslifcak 5 Apr 99 14:10:14
+ - build snmpnetstat with CygWin32
+
+mslifcak 5 Apr 99 14:22:43
+ - Build with CygWin32
+
+mslifcak 5 Apr 99 15:59:20
+ - Build using CygWin32 (includes Niels B.'s snmp_vars.c patch).
+
+hardaker 6 Apr 99 09:23:16
+ - (config.guess, config.sub): new versions from autoconf 2.13.
+
+mslifcak 6 Apr 99 10:59:05
+ - (extensible.c) quell warning about comparing pointer with non-pointer.
+
+mslifcak 6 Apr 99 11:33:54
+ - another round of ANSI-fying the agent completed.
+
+hardaker 6 Apr 99 15:13:40
+ - (*): Merged the 4.0 line into the 3.6.1 line.
+
+hardaker 6 Apr 99 15:38:45
+ - (mibincl.h, ucdDemoPublic.c, vacm_vars.h, snmptrapd.c, snmp_api.c,
+ Makefile.in): final merge pieces of recent v3 line changes.
+
+mslifcak 6 Apr 99 21:24:22
+ - changes for ANSI headers; POSIX(index vs strchr); minor fixes
+
+mslifcak 6 Apr 99 22:13:59
+ - (vacm_vars.c) - set global ptrs = 0.
+
+mslifcak 6 Apr 99 22:14:43
+ - (snmp_vars.c) more v2party rework needed
+
+mslifcak 7 Apr 99 06:17:28
+ - () more ANSI header fixups; touchup for M$ Win32 build
+
+hardaker 7 Apr 99 10:42:10
+ - (config.h.in, snmp_vars.c, encode_keychange.c, snmptrapd.c,
+ Makefile.in, all_general_local.h, keytools.c, keytools.h,
+ lcd_time.c, md5.c, read_config.c, scapi.c, snmp_api.c, snmpusm.c,
+ snmpv3.c, tools.c, tools.h):
+ - misc merging, including fixes and debugging statement changes to
+ newer model.
+ - a few -Wall fixes.
+
+hardaker 7 Apr 99 10:48:07
+ - (snmp_mib.c): removed unnneeded header_snmp().
+
+hardaker 7 Apr 99 11:28:02
+ - (ucdDemoPublic.c, sysORTable.c, vacm_vars.c, smux.c, snmpEngine.c,
+ usmUser.c, snmpTargetAddrEntry.c, snmpTargetParamsEntry.c):
+ - debugging statement conversion
+
+mslifcak 7 Apr 99 12:00:20
+ - (agent/snmp2p.c agent/snmp_agent.c agent/snmp_vars.h
+ agent/view_parse.c agent/mibgroup/util_funcs.c
+ agent/mibgroup/examples/ucdDemoPublic.c
+ agent/mibgroup/host/hr_filesys.c
+ agent/mibgroup/host/hr_storage.c
+ agent/mibgroup/host/hr_swrun.c agent/mibgroup/host/hr_system.c
+ agent/mibgroup/mibII/at.c agent/mibgroup/mibII/icmp.c
+ agent/mibgroup/mibII/interfaces.c agent/mibgroup/mibII/ip.c
+ agent/mibgroup/mibII/system_mib.c agent/mibgroup/mibII/tcp.c
+ agent/mibgroup/mibII/udp.c agent/mibgroup/mibII/vacm_vars.c
+ agent/mibgroup/mibII/var_route.c agent/mibgroup/misc/ipfwacc.c
+ agent/mibgroup/snmpv3/usmUser.c
+ agent/mibgroup/ucd-snmp/extensible.c
+ agent/mibgroup/ucd-snmp/hpux.c agent/mibgroup/ucd-snmp/pass.c
+ agent/mibgroup/ucd-snmp/pass_persist.c
+ agent/mibgroup/ucd-snmp/proc.c
+ agent/mibgroup/v2party/context_vars.c
+ agent/mibgroup/v2party/party_vars.c
+ agent/mibgroup/v2party/view_vars.c apps/snmpdelta.c
+ apps/snmptest.c apps/snmptrapd.c apps/snmpnetstat/route.c
+ apps/snmpnetstat/winstub.c snmplib/acl_parse.c
+ snmplib/context.h snmplib/context_parse.c snmplib/party.h
+ snmplib/party_parse.c snmplib/read_config.c snmplib/snmp_api.c
+ snmplib/snmp_auth.c snmplib/snmp_impl.h snmplib/vacm.h
+ snmplib/view.h) fgets use sizeof mostly, oid base size is MAX_OID_LEN
+
+mslifcak 7 Apr 99 12:17:23
+ -(ipfwchains.c) remove multiple definitions of MATCH_FAILED
+
+mslifcak 7 Apr 99 15:00:39
+ -(usmUser.c,system.c) plug mem leak; (snmp_api.c) enforce array limit.
+
+hardaker 12 Apr 99 22:14:31
+ - (mibincl.h): include sys/time.h.
+
+hardaker 12 Apr 99 22:15:39
+ - (hr_utils.h): remove variable names from prototypes (was causing problems).
+
+hardaker 12 Apr 99 22:16:45
+ - (tkmib): make displayed mib node info into two columns instead of one.
+
+hardaker 12 Apr 99 22:25:09
+ - (snmp_api.c): make snmp_varlist_add_variable to possible create a
+ varlist before adding something to it.
+
+hardaker 13 Apr 99 15:19:20
+ - (configure, configure.in, Makefile.in): Patch from Daniel Hagerty:
+ - fix libwrap to only add the library to the agent.
+
+hardaker 13 Apr 99 15:20:00
+ - (system_mib.c): make sysDescr read-only.
+
+hardaker 13 Apr 99 15:32:23
+ - (pass.c): Patch from Jim Mar:
+ - add capability for binary octet strings in pass scripts.
+
+hardaker 13 Apr 99 15:36:31
+ - (SNMP-NOTIFICATION-MIB.txt, SNMP-PROXY-MIB.txt,
+ SNMP-VIEW-BASED-ACM-MIB.txt): Patch from Niels Baggesen:
+ - fix module locations for broken mibs.
+
+hardaker 13 Apr 99 15:54:48
+ - (freebsd.h, freebsd2.h): Patch from Niels Baggesen:
+ - freebsd utmp cleanups.
+
+hardaker 13 Apr 99 15:56:53
+ - (snmpd.c): Patch from Niels Baggesen:
+ - log with timestamp at shutdown.
+
+hardaker 13 Apr 99 15:57:24
+ - (vacm_vars.c): Patch from Niels Baggesen:
+ - better checking of .conf file parsing line requirements.
+
+hardaker 13 Apr 99 15:58:02
+ - (snmptranslate.c): Patch from Niels Baggesen:
+ - support -P.
+
+hardaker 13 Apr 99 15:58:27
+ - (snmp_config.5.def, snmptrap.1, snmptrapd.conf.5.def): Patch from
+ Niels Baggesen:
+ - clean up small bugs.
+
+hardaker 13 Apr 99 16:00:49
+ - (parse.c, parse.h): Patch from Niels Baggesen:
+ - nicer parser messages (include file names). Correct help for -Pc.
+ - Add FRAME-RELAY-DTE-MIB as replacement for RFC-1315
+
+hardaker 13 Apr 99 16:03:29
+ - (snmptrapd.c): Patch from Niels Baggesen:
+ - snmptrapd option to ignore auth traps, add -S option, log termination.
+
+mslifcak 14 Apr 99 15:29:58
+ - (snmptranslate.c) init_snmp takes argument; "" used.
+
+mslifcak 14 Apr 99 15:30:34
+ - (parse.c) File pointer initialized to "" before first use.
+
+hardaker 14 Apr 99 15:52:35
+ - (snmptranslate.c): init_snmp("snmpapp").
+
+mslifcak 14 Apr 99 16:31:55
+ - (snmp_agent,c, snmp_api.[ch], snmp_client.[ch]) fix variable_list with built-in storage
+
+mslifcak 14 Apr 99 16:56:37
+ - apps that use snmp_fix_pdu must clean up the response PDU !
+
+mslifcak 16 Apr 99 07:30:29
+ - (IPFWACC-MIB.txt) change module name from IPFWADM-MIB to IPFWACC-MIB.
+
+mslifcak 16 Apr 99 07:54:22
+ - (IPFWCHAINS-MIB.txt) ipfwChainTable {ipfw 1} fix
+
+mslifcak 16 Apr 99 08:33:16
+ - (mib.c) "-m" or MIBS : can specify MIB module by file name.
+
+hardaker 16 Apr 99 21:10:06
+ - (README): Added v3 team members.
+
+hardaker 16 Apr 99 21:11:48
+ - (configure.in): changed default store location to /var/ucd-snmp
+
+hardaker 16 Apr 99 21:15:14
+ - (snmp.h): SNMPADMINLENGTH definition.
+
+hardaker 16 Apr 99 21:16:16
+ - (snmp_auth.c): removed fix note.
+
+hardaker 16 Apr 99 21:27:06
+ - (NEWS): updated
+
+hardaker 16 Apr 99 21:27:41
+ - (snmptrapd.8): man patch from Niels
+
+hardaker 16 Apr 99 21:34:49
+ - (version.h bug-report sedscript.in): version tag ( 4.0.pre3 )
+
+mslifcak 18 Apr 99 06:54:26
+ - (ipfwacc.h) subdir change per Joe Pruettt : 9 -> 10
+
+hardaker 19 Apr 99 21:01:15
+ - (mib2c, mib2c.conf, mib2c.vartypes.conf):
+ - rewrote mib2c to be more dependent on .conf files. The main .conf
+ file now contains the code itself.
+ - need to write a foreach(mibnode) type parser next.
+
+hardaker 19 Apr 99 21:09:27
+ - (mibincl.h): add read_config.h.
+
+hardaker 19 Apr 99 21:12:17
+ - (read_config.c, read_config.h):
+ - created a more convenient read_config_read_data() function to
+ generically read a token into a given variable.
+ - cleaned up persistent storage parsing routines.
+ - use previously malloced space in some routines, or malloc it for
+ them if the storage area is NULL.
+
+hardaker 19 Apr 99 21:14:28
+ - (snmp_api.c): Don't snmp_set_var_objid if name is NULL in
+ snmp_varlist_add_variable().
+
+hardaker 20 Apr 99 11:28:14
+ - (mib2c, mib2c.conf, mib2c.vartypes.conf): more updates.
+
+hardaker 20 Apr 99 15:31:35
+ - (mib2c, mib2c.conf, mib2c.vartypes.conf):
+ - completely re-hacked:
+ - entire code base is now put into the .conf files rather than in
+ the mib2c program. This should entitle mib2c to be used more
+ generically, and could produce different types of code templates
+ based on the .conf file it is given. In theory, it should be
+ able to produce C code for a non-ucd-snmp agent, or even better,
+ any type of code (not just C) for something else based on mib
+ information.
+ - The down side, is that the current .conf files are now ambiguous
+ again and difficult to understand without being, well, me. The
+ up side is that I'm sure Dave Shield will go through and clean
+ it up for me like he did last time. Ha ha. I wonder if he'll
+ read this? (If so, see me first).
+
+hardaker 20 Apr 99 16:04:17
+ - (mib2c, mib2c.conf): variable name conversions:
+ - variableTypes -> variables
+ - cname -> NAME
+
+hardaker 20 Apr 99 16:10:44
+ - (mib2c, mib2c.conf): a little more clean up.
+
+hardaker 20 Apr 99 21:38:42
+ - (mib2c.conf): clean up skipif regexps a bit.
+
+hardaker 22 Apr 99 07:54:44
+ - (read_config.c, read_config.h): created *read_config_store_data();
+
+hardaker 22 Apr 99 07:56:03
+ - (mib2c, mib2c.conf): allow NoAccess to be processed, and use skipif:
+ directives where needed because of it.
+
+hardaker 22 Apr 99 10:51:30
+ - (snmp_client.c, snmp_api.c, snmp_api.h, keytools.c): Another v3 branch update.
+
+mslifcak 26 Apr 99 09:21:06
+ - (snmplib.c) - use request callback's data if request specifies a callback.
+
+nba 26 Apr 99 11:21:10
+
+ (parse.h) Silly speling misteak (ACCESS_CRAETE)
+
+nba 26 Apr 99 11:48:57
+
+
+ - snmplib/parse.h, snmplib/parse.c: new mib printer: mib_print_tree
+ inspired by a reference to snmx in comp.protocols.snmp
+ - apps/snmptranslate: let the -p option call this new printer
+ - snmplib/snmp_api.c: some left over __P macros
+
+nba 26 Apr 99 12:03:47
+
+ (if.c) make the width of snmpnet -i (and -o) adapt to the length of returned
+ strings
+
+nba 26 Apr 99 12:09:35
+
+
+ apps/*.c: use snmp_perror to report errors from read_objid and friends
+ apps/snmptrapd.c: fix a bus error when using -S and receiving an
+ enterprise specific trap.
+
+nba 26 Apr 99 12:13:50
+
+ */*: replace horrible (char *)"string" with const specifiers in relevant
+ functions.
+
+mslifcak 26 Apr 99 12:37:09
+ - (snmp_api.c) - fix other use of request's callback data
+
+mslifcak 27 Apr 99 09:51:35
+ - (interfaces.c) add if_type_from_name to convert interface name to type.
+
+hardaker 29 Apr 99 07:32:39
+ - (Makefile.in, callback.c, callback.h): callback API.
+
+hardaker 29 Apr 99 07:39:45
+ - (agent_read_config.c, snmpd.c, snmptrapd.c, snmp_api.c, snmpusm.c,
+ snmpusm.h, snmpv3.c, snmpv3.h):
+ - use the callback mechanism for post-config stuff.
+
+hardaker 3 May 99 07:07:15
+ - (agent_read_config.c, usmUser.c, usmUser.h, snmpTargetAddrEntry.c,
+ snmpTargetAddrEntry.h, snmpTargetParamsEntry.c,
+ snmpTargetParamsEntry.h, snmptrapd.c, callback.c, callback.h,
+ scapi.c, scapi.h, snmp_api.c, snmpv3.c, snmpv3.h):
+ - shutdown and store callback usage.
+
+hardaker 3 May 99 07:13:31
+ - (snmpd.c): fix -A flag, which got broken during someones changes.
+
+hardaker 3 May 99 12:58:19
+ - (Makefile.in, agent_read_config.c, Makefile.in, header_complex.c,
+ Makefile.in, encode_keychange.c, Makefile.in, Makefile.in,
+ all_general_local.h, all_system.h, keytools.c, lcd_time.c, scapi.c,
+ snmp_auth.c, snmpusm.c, tools.c, tools.h, Makefile.in, T.c,
+ etimetest.c, keymanagetest.c, misctest.c, scapitest.c):
+ - nuked all_general_local.h and all_system.h.
+ - makefileindepend as well.
+
+nba 3 May 99 15:40:11
+ (*.[ch]): patches to types to wipe warnings from compilers
+ with more strict noise levels. (also good when compiling
+ with gcc -Wall -pedantic -Wwrite-strings -Wcast-qual)
+
+nba 4 May 99 00:47:44
+ (mib.c): Fix problem (core dump) with MIBFILES environment variable.
+
+nba 4 May 99 00:51:16
+ (many): remove const spec from FindVarMethod. That was wrong
+
+hardaker 4 May 99 11:08:55
+ - (configure, configure.in): Added --enable-developer flag.
+
+mslifcak 6 May 99 09:20:30
+ - (ucd-snmp/vmstat.c) - conditionally include limits.h per Eduard Koucky.
+
+nba 10 May 99 14:47:22
+ Fixing some more prototypes. Pointed out by Markku Laukkanen.
+
+nba 10 May 99 14:49:49
+ snmplib/snmp_api.c: Mix-up of V1_IN_V2/V2_IN_V1 error code when GETBULK
+ inside V1 session.
+
+hardaker 11 May 99 14:02:48
+ - (util_funcs.c): read returns ssize_t not size_t.
+
+hardaker 11 May 99 14:03:25
+ - (memory.h): remove extern.
+
+hardaker 11 May 99 14:11:40
+ - (hpux.c, hpux.h): int -> size_t conversions.
+
+mslifcak 12 May 99 10:53:23
+ - (snmp_api.c snmp_client.c) call snmp_synch_reset from snmp_sess_close
+
+mslifcak 12 May 99 11:22:16
+ -(parse.c party_parse.c read_config.c) no exit() from library; return error
+
+daves 13 May 99 03:52:19
+ - (ip.c): Properly register IP module group on Free-BSD systems
+ (thanks to Mitchell Tasman)
+
+hardaker 13 May 99 09:09:18
+ - (vacm_vars.c): Set pointers to NULL after freeing them.
+
+mslifcak 14 May 99 06:54:51
+ - (agent/mibgroup/dummy/dummy.c agent/mibgroup/examples/example.c
+ agent/mibgroup/examples/example.h
+ agent/mibgroup/examples/wombat.c agent/mibgroup/misc/ipfwacc.c
+ agent/mibgroup/smux/smux.c
+ agent/mibgroup/snmpv3/snmpMPDStats.c
+ agent/mibgroup/snmpv3/usmStats.c
+ agent/mibgroup/snmpv3/usmUser.c snmplib/snmp_auth.c) more size_t fixes
+
+mslifcak 14 May 99 09:47:10
+ - (agent/mibgroup/examples/wombat.h agent/mibgroup/host/hr_disk.c
+ agent/mibgroup/mibII/interfaces.c
+ agent/mibgroup/mibII/var_route.c
+ agent/mibgroup/snmpv3/usmUser.c apps/encode_keychange.c
+ snmplib/parse.c) more ANSI-C touchups
+
+mslifcak 14 May 99 13:59:37
+ -(agent/mibgroup/mibII/interfaces.c snmplib/snmpusm.c) fixes to build HP & AIX
+
+daves 17 May 99 03:20:53
+ - (snmp_parse_args.c): Initialise session using library routine
+
+daves 17 May 99 04:34:55
+ - (snmplib/snmp_api.h snmplib/snmp_api.c snmplib/snmp_client.c
+ agent/snmpd.c agent/mibgroup/mibII/vacm_vars.c
+ agent/mibgroup/v2party/alarm.c agent/mibgroup/v2party/event.c
+ apps/snmpstatus.c apps/snmptest.c apps/snmptrap.c apps/snmptrapd.c):
+
+ - Use the generic socket addresses 'struct sockaddr',
+ rather than the IP-specific 'struct sockaddr_in'
+
+daves 17 May 99 04:38:00
+ - (snmplib/snmp_api.h snmplib/snmp_api.c snmplib/snmp_client.c
+ agent/snmpd.c agent/mibgroup/mibII/vacm_vars.c
+ agent/mibgroup/v2party/alarm.c agent/mibgroup/v2party/event.c
+ apps/snmpstatus.c apps/snmptest.c apps/snmptrap.c apps/snmptrapd.c):
+
+ - Use the generic socket address 'struct sockaddr',
+ rather than the IP-specific 'struct sockaddr_in'
+
+daves 17 May 99 07:18:02
+ - (snmplib/snmp_api.c snmplib/snmp_api.h agent/snmpd.c
+ apps/snmptrap.c apps/snmptrapd.c):
+
+ - Use a single address field within the PDU structure
+ (obsoleting 'agent_addr')
+
+daves 18 May 99 06:26:16
+ - (snmp_api.c snmp_api.h): More general handling of PDU flags
+
+mslifcak 18 May 99 09:01:46
+ - (xx/Makefile.in) remove references to as yet missing disman files.
+
+daves 18 May 99 09:23:50
+ - (configure.in snmplib/context_parse.c snmplib/read_config.c
+ snmplib/snmp_api.c snmplib/snmpv3.c snmplib/system.c
+ apps/snmp_parse_args.c apps/snmpbulkwalk.c apps/snmpdelta.c
+ apps/snmpget.c apps/snmpgetnext.c apps/snmpset.c
+ apps/snmpstatus.c apps/snmptable.c apps/snmptest.c
+ apps/snmptrap.c apps/snmpusm.c apps/snmpwalk.c
+ apps/snmpnetstat/if.c apps/snmpnetstat/inet.c
+ apps/snmpnetstat/main.c apps/snmpnetstat/route.c
+ apps/snmpnetstat/winstub.c):
+ - Clean up conditionals protecting include files
+ ( #if HAVE_WINSOCK_H / #else / #endif )
+
+daves 19 May 99 02:33:07
+ - (config.h.in): Additional include protection entries
+
+daves 19 May 99 05:11:37
+ - (snmp_api.c): More generalised handling of socket addresses
+
+mslifcak 19 May 99 18:02:55
+ -(mibII/var_route.c) - fix Linux RouteMask c/o "Nancy" nam@cs.cmu.edu
+
+mslifcak 19 May 99 18:50:12
+ - (host_res.h) fix HAVE_NET_IF_VAR_H define (was HAVE_NET_IN_VAR_H)
+
+daves 20 May 99 03:46:24
+ - (snmp_api.h): Temporary fix to socket address problems
+
+mslifcak 21 May 99 05:24:23
+ -(read_config.c) cast fix per Markku Laukkanen
+
+daves 21 May 99 05:54:22
+ - (snmp_api.c snmp_api.h):
+ - New API call to close down all open sessions
+ (also called on application shutdown)
+
+hardaker 21 May 99 11:10:44
+ - (mib2c.conf, mib2c.storage.conf):
+ - convert to size_t storages.
+ - misc eval fixes.
+ - more cleanup of the storage def.
+
+mslifcak 21 May 99 15:29:46
+ - library changes to build on Win32.
+
+mslifcak 24 May 99 05:36:13
+ -configure - save one which looks for netdb/socket headers
+
+hardaker 26 May 99 11:19:03
+ - (ipfwacc.h): properly locate the mib.
+
+hardaker 26 May 99 15:14:55
+ - (hr_swinst.c): make software application type unknown instead of app.
+
+hardaker 26 May 99 15:18:04
+ - (IPFWACC-MIB.txt): change to counters.
+
+hardaker 26 May 99 15:20:32
+ - (ipfwacc.h): make into counters.
+
+hardaker 26 May 99 15:56:03
+ - (acconfig.h, config.h.in): increase MAXREADCOUNT.
+
+hardaker 26 May 99 17:40:28
+ - (IPFWACC-MIB.txt): added SEQUENCE OF.
+
+mslifcak 27 May 99 05:16:25
+ -(encode_keychange, read_config, snmpusm) aCC fixes by PKY (Markku Laukkanen)
+
+hardaker 27 May 99 14:30:03
+ - (snmptrapd_handlers.c): implement the default trap handler.
+
+hardaker 27 May 99 14:30:15
+ - (snmptrapd.c): need an init_mib().
+
+hardaker 27 May 99 14:37:06
+ - (snmptrapd.conf.5.def): document default oid keyword.
+
+hardaker 27 May 99 14:37:32
+ - (snmptrapd.c): document default oid keyword in help line.
+
+daves 28 May 99 07:02:01
+ - (agent/Makefile.in agent/mibgroup/Makefile.in): fix problem with null macro
+
+daves 28 May 99 08:14:05
+ - (snmplib/snmp_api.c): save local socket address in internal session structure
+
+daves 28 May 99 08:57:19
+ - (snmplib/snmp_api.c): Unix domain (datagram) socket support
+
+daves 28 May 99 09:12:20
+ - (snmplib/snmp_api.c): Separate out copying a session and opening a new one
+
+mslifcak 28 May 99 09:24:56
+ -(snmp_api.c) -catch one more error close from snmp_sess_copy
+
+hardaker 28 May 99 16:17:13
+ - (mib.c, parse.c, parse.h): save and use index clauses.
+
+hardaker 28 May 99 16:44:42
+ - (Makefile.in, default_store.c, default_store.h):
+ - created generic default value storage space and parsers to reduce
+ the number of functions/etc created for values which configure the
+ library.
+
+daves 1 Jun 99 02:17:27
+ - (snmplib/snmp_api.c): Garbage collection for Traditional SAPI sessions
+
+daves 1 Jun 99 02:32:13
+ - (snmplib/snmp_api.c): Generalise handling of addresses (w.r.t sento/recvfrom)
+
+daves 1 Jun 99 07:30:42
+ - (snmplib/snmp_api.c snmplib/snmp_api.h): Support for stream-based sockets
+
+hardaker 1 Jun 99 17:21:53
+ - (Makefile.in, snmp_alarm.c, snmp_alarm.h, snmp_api.c):
+ - implemented a generic alarm handler to register alarm functions to
+ be called back after X period of time and it handles figuring out
+ which is next and calling alarm() and signal() appropriately.
+
+mslifcak 4 Jun 99 09:51:13
+ -(hr_filesys.c,interfaces.c,tcp.c,udp.c,freebsd3.h) fix FreeBSD3.1 incl Ken Key's tcp/udp patches
+
+mslifcak 7 Jun 99 07:44:06
+ -(interfaces.c, tcp.c, udp.c, ip.c) clone fixes from 3.6 line (FreeBSD3.1)
+
+mslifcak 7 Jun 99 13:04:21
+ -(if.c) check for valid pointer before de-referencing.
+
+mslifcak 11 May 99 14:39:58
+ - (agent/agent_read_config.c agent/snmp_vars.c agent/snmpd.c
+ agent/mibgroup/mibII/interfaces.c agent/mibgroup/mibII/ip.c
+ agent/mibgroup/mibII/vacm_vars.c
+ agent/mibgroup/mibII/vacm_vars.h apps/snmptranslate.c
+ apps/snmptrapd.c local/mib2c local/tkmib man/snmp_config.5.def
+ man/snmpd.1.def man/snmptrap.1 man/snmptrapd.8
+ man/snmptrapd.conf.5.def mibs/SNMP-NOTIFICATION-MIB.txt
+ mibs/SNMP-PROXY-MIB.txt mibs/SNMP-TARGET-MIB.txt
+ mibs/SNMP-USER-BASED-SM-MIB.txt
+ mibs/SNMP-VIEW-BASED-ACM-MIB.txt s/freebsd.h s/freebsd2.h
+ snmplib/mib.c snmplib/parse.c snmplib/parse.h
+ snmplib/snmp_api.c snmplib/vacm.c) - changes c/o Niels Baggesen
+
+mslifcak 11 May 99 18:58:37
+ -(cygwin.h) - use to build on CygWin platform.
+
+mslifcak 11 May 99 19:54:04
+ -(agent/snmp2p.c agent/snmp_vars.h agent/view_parse.c
+ agent/mibgroup/util_funcs.c agent/mibgroup/dummy/dummy.h
+ agent/mibgroup/examples/wombat.h
+ agent/mibgroup/host/hr_filesys.c
+ agent/mibgroup/host/hr_storage.c
+ agent/mibgroup/host/hr_swrun.c agent/mibgroup/host/hr_system.c
+ agent/mibgroup/ipfwchains/ipfwchains.c
+ agent/mibgroup/mibII/at.c agent/mibgroup/mibII/icmp.c
+ agent/mibgroup/mibII/interfaces.c
+ agent/mibgroup/mibII/system_mib.c agent/mibgroup/mibII/tcp.c
+ agent/mibgroup/mibII/udp.c agent/mibgroup/mibII/vacm_vars.c
+ agent/mibgroup/mibII/var_route.c agent/mibgroup/misc/ipfwacc.c
+ agent/mibgroup/misc/ipfwacc.h
+ agent/mibgroup/ucd-snmp/extensible.c
+ agent/mibgroup/ucd-snmp/hpux.c
+ agent/mibgroup/ucd-snmp/loadave.c
+ agent/mibgroup/ucd-snmp/pass.c
+ agent/mibgroup/ucd-snmp/pass_persist.c
+ agent/mibgroup/ucd-snmp/proc.c
+ agent/mibgroup/v2party/context_vars.c
+ agent/mibgroup/v2party/party_vars.c
+ agent/mibgroup/v2party/view_vars.c apps/snmpdelta.c
+ apps/snmptest.c apps/snmptrapd.c apps/snmpnetstat/if.c
+ apps/snmpnetstat/route.c apps/snmpnetstat/winstub.c
+ apps/snmpnetstat/winstub.h snmplib/acl_parse.c
+ snmplib/context.h snmplib/context_parse.c snmplib/party.h
+ snmplib/party_parse.c snmplib/read_config.c snmplib/snmp_api.c)
+ Port some of the fixes from the current development branch
+
+mslifcak 12 May 99 10:45:05
+ - (snmp_api.c snmp_client.c) call snmp_synch_reset from snmp_sess_close
+
+mslifcak 12 May 99 11:28:07
+ -(mib.c parse.c party_parse.c read_config.c) no exit() from library; return error
+
+daves 13 May 99 03:38:03
+
+ (mib.c): Fixed minor typo
+
+daves 13 May 99 03:55:06
+ - (ip.c): Properly register IP module group on Free-BSD systems
+ (thanks to Mitchell Tasman)
+
+hardaker 13 May 99 09:07:13
+ - (vmstat.c): include limits.h.
+
+hardaker 13 May 99 09:07:39
+ - (vacm_vars.c): Set pointers to NULL after freeing them.
+
+hardaker 13 May 99 15:42:48
+ - (version.h bug-report sedscript.in): version tag ( 3.6.2 )
+
+daves 17 May 99 03:20:10
+ - (snmp_parse_args.c): Initialise session using library routine
+
+mslifcak 19 May 99 18:01:48
+ -(mibII/var_route.c) - fix Linux RouteMask c/o "Nancy" nam@cs.cmu.edu
+
+mslifcak 19 May 99 18:49:25
+ - (host_res.h) fix HAVE_NET_IF_VAR_H define (was HAVE_NET_IN_VAR_H)
+
+hardaker 25 May 99 20:20:31
+ - (version.h bug-report sedscript.in): version tag ( 3.6.2.pre1 )
+
+nba 26 May 99 07:57:42
+
+ Tag: V3-line
+
+ if.c: dynamic width for -i and -o option
+
+mslifcak 26 May 99 08:00:07
+ - fix-ups to build Win32 MSVisualC++
+
+nba 26 May 99 08:24:35
+
+
+ Some fixes for Solaris 2.7 (proc access still does not work when compiled
+ with gcc (32-bit compiler)
+
+nba 26 May 99 08:29:26
+
+ Fixes for FreeBSD 2.1 from Derek J. Balling <dballing@yahoo-inc.com>
+
+hardaker 26 May 99 16:07:16
+ - (acconfig.h, config.h.in): increase MAXREADCOUNT.
+
+hardaker 26 May 99 16:07:42
+ - (hr_swinst.c): make swinstall be "unknown" since we can't truly know.
+
+hardaker 26 May 99 16:08:09
+ - (ipfwacc.h): move to correct location.
+
+hardaker 26 May 99 16:08:28
+ - (IPFWACC-MIB.txt): make counters.
+
+hardaker 26 May 99 17:31:25
+ - (proc.c): ultrix fixes.
+
+hardaker 26 May 99 17:38:56
+ - (IPFWACC-MIB.txt): added SEQUENCE OF.
+
+nba 27 May 99 02:56:25
+
+
+ host/hr_swrun.c, ucd-snmp/proc.c: Fixes for Solaris 2.7
+
+nba 27 May 99 02:59:16
+
+ snmpd.c: Properly handle the case of no community specified
+ for agent traps.
+
+nba 27 May 99 23:55:09
+
+ solaris2.?.h: define _SLASH_PROC_METHOD_ as 1
+
+nba 27 May 99 23:55:49
+
+ read_config.c: complain about existing but unreadable config files.
+
+nba 27 May 99 23:59:37
+
+ inet.c: 0 IS a valid short (and port address for remote ends of ports
+ in LISTEN state)
+
+nba 28 May 99 03:25:29
+
+ change the trapsink/trap2sink directives to support a community parameter.
+
+nba 29 May 99 02:49:47
+
+ - smux.c: fix a missing ntohs in a debug message
+
+nba 1 Jun 99 00:27:36
+
+ - proc.c: YAPBO (Yet another possible buffer overflow)
+
+nba 1 Jun 99 00:29:35
+
+ - snmp_agent.c: change noCreation return to noAccess. There are probably
+ situations where the former is correct, but this is less confusing
+
+nba 1 Jun 99 00:33:52
+
+ - kernel_sunos5.?, hr_swrun.c, at.c, interfaces.c: fix at.atTable and
+ ip.ipNetToMediaTable for Solaris. Also a tweak for getKstatInt.
+
+hardaker 2 Jun 99 07:27:46
+ - (version.h bug-report sedscript.in): version tag ( 3.6.2.pre2 )
+
+mslifcak 2 Jun 99 13:46:34
+ -(hr_filesys.c,interfaces.c,freebsd3.h) fix build on FreeBSD 3.1
+
+nba 3 Jun 99 14:31:18
+
+ - kernel.c: add some sanity checks when running without root access.
+
+nba 3 Jun 99 14:34:50
+
+ - hr_swrun.c: add a blank between process parameters
+
+nba 3 Jun 99 14:38:18
+
+ - netbsd.h, tcp.c, udp.c: fix socket tables for NetBSD 1.3/1.4
+
+nba 3 Jun 99 15:12:01
+
+ - snmptrap.c: fix a bad free when calling snmpinform.
+
+nba 3 Jun 99 15:21:09
+ - tcp.c: lost a ';' for the FreeBSD case ....
+
+daves 4 Jun 99 04:51:04
+ - (agent/mibgroup/host/hr_swinst.c): Fix RPM handling
+
+daves 4 Jun 99 05:06:44
+ - (configure.in configure): Additional library for RPM handling
+
+mslifcak 4 Jun 99 09:30:12
+ -(tcp.c, udp.c) apply Ken Key's fix for FreeBSD3.1
+
+nba 4 Jun 99 11:52:38
+ - ip.c: Fix for FreeBSD 3 from Ken Key
+
+nba 4 Jun 99 11:53:32
+ - kernel_sunos5.c, asn1.c: Fixes for 64-bit Solaris 7
+
+nba 5 Jun 99 05:47:20
+ - interfaces.c,tcp.c,udp.c: cleanup of conditionals for FreeBSD
+
+nba 5 Jun 99 06:02:52
+ - configure.in: proper configure check for sys/socketvar.h
+
+mslifcak 7 Jun 99 07:45:10
+ -(ip.c, var_route.c) fix sizeof, CPP #endif
+
+hardaker 7 Jun 99 10:52:32
+ - (Makefile.in): Patch from Chris Smith:
+ - don't put CFLAGS in the link line.
+
+hardaker 7 Jun 99 10:54:21
+ - (README.win32): added to the 3.6.2 line.
+
+hardaker 7 Jun 99 11:25:27
+ - (FAQ, README): update for 3.6.2.
+
+hardaker 7 Jun 99 11:27:15
+ - (NEWS): 3.6.2 update.
+
+hardaker 7 Jun 99 11:30:40
+ - (EXAMPLE.conf.def): update for 3.6.2.
+
+hardaker 7 Jun 99 11:32:54
+ - (INSTALL): update for 3.6.2.
+
+mslifcak 7 Jun 99 13:02:10
+ -(if.c) - check for valid pointer before de-referencing.
+
+hardaker 7 Jun 99 15:46:26
+ - (configure, configure.in): check for libdb1 before libdb for rpm usage.
+
+hardaker 7 Jun 99 15:50:01
+ - (FAQ): merge
+
+hardaker 7 Jun 99 16:03:25
+ - (configure.in, configure): check for -ldb1 then -ldb for rpm usage.
+
+hardaker 7 Jun 99 16:43:50
+ - (config.h.in, configure, configure.in): check for rpmGetPath to help
+ determine which version of RPM we're using (3 or 2).
+
+pjl 7 Jun 99 17:30:33
+ Added RPM v3 support
+
+mslifcak 8 Jun 99 03:40:36
+ -(mibII/*,snmplib/*) Markku L.'s fixes to compile on HP-UX with aCC
+
+mslifcak 8 Jun 99 03:54:50
+ spell check COMMUNITY
+
+-------------------------------------------------------------------------------
+
+Changes: V3.6 -> V3.6.1
+
+mslifcak 8 Mar 99 04:02:01
+ (parse.c) - fix subid init; remove useless '-Pl' option.
+
+mslifcak 8 Mar 99 04:14:41
+ - (snmp_api.c) use request data with request callback
+
+mslifcak 8 Mar 99 05:01:49
+ -(win32/config.h) remove unused SYS_TIME_NAME,GLOBALSECURITY. add new constants.
+
+mslifcak 8 Mar 99 05:07:13
+ - (AGENT) MAX_NAME_LEN --> MAX_OID_LEN in example
+
+mslifcak 8 Mar 99 09:58:17
+ - (snmplib/parse.c) Complete Dave Shields' patch for continue after error.
+
+mslifcak 8 Mar 99 14:28:20
+ - (snmpnetstat:if.c, route.c) limit interface name sizes to fit fixed length buffers.
+
+hardaker 10 Mar 99 15:07:31
+ - (EXAMPLE.conf.def): group lines were backwards.
+
+hardaker 11 Mar 99 15:48:22
+ - (README): Added Mike Baer.
+
+hardaker 11 Mar 99 15:48:52
+ - (memory_solaris2.c): changed some comments to /* */ instead of //.
+
+hardaker 11 Mar 99 16:10:31
+ - (AGENT): removed AGENT
+
+hardaker 11 Mar 99 16:10:47
+ - (mib2c): fixed a couple of bugs and ansi'ified things.
+
+hardaker 11 Mar 99 16:22:43
+ - (util_funcs.c, util_funcs.h): move MATCH_SUCCEEDED defs to .h.
+
+hardaker 11 Mar 99 16:23:44
+ - (snmp_api.h, snmp_debug.h): Patch from Erik Jacobsen:
+ - fixed prototypes for DEBUGP() and DEBUGPOID().
+
+mslifcak 12 Mar 99 07:08:40
+ - (dlmod_mib.c) : Use MATCH_FAIL/SUCCEEDED in util_funcs.h
+
+hardaker 12 Mar 99 09:15:14
+ - (mibincl.h, dummy.c, wombat.c, hr_device.c, hr_disk.c, hr_filesys.c,
+ hr_network.c, hr_partition.c, hr_print.c, hr_proc.c, hr_storage.c,
+ hr_swinst.c, hr_swrun.c, hr_system.c, icmp.c, interfaces.c, ip.c,
+ snmp_mib.c, sysORTable.c, system_mib.c, tcp.c, udp.c, dlmod.c,
+ registry.c): fixed MATCH_FAILED/SUCCEEDED defines -> util_funcs.h.
+
+mslifcak 12 Mar 99 11:31:16
+ - (dlmod_mib.c) : explicit test for MATCH_FAILED
+
+hardaker 12 Mar 99 12:20:12
+ - (mib2c): fix asn_parse functions to pass a pointer to the size variable.
+
+hardaker 12 Mar 99 14:17:08
+ - (NEWS): update.
+
+hardaker 12 Mar 99 14:17:44
+ - (smux.c): protect strcpy() against a null password specified on the
+ config line.
+
+mslifcak 12 Mar 99 14:34:12
+ - (hr_system.h) - don't require hr_util; done in mibgroup/host.h
+ - (hr_swrun.c) - solaris2 : make sure kvm_open is called before kd is used.
+ - (hr_swrun.c) - add lame sunos4 equivalent in HRSWRUNPERF_CPU.
+
+mslifcak 12 Mar 99 14:35:38
+ - (target.h, target/*.h) require util_funcs once.
+
+hardaker 12 Mar 99 14:36:39
+ - (util_funcs.h): MATCH_FAILED -> -1, since some use it.
+
+mslifcak 12 Mar 99 14:54:51
+ - restore config_require logic; fix sprintf calls to compile under SunOS 4.1.x.
+
+hardaker 12 Mar 99 15:23:18
+ - (INSTALL): don't print module list here... tell them to look at
+ configure --help.
+
+hardaker 12 Mar 99 15:24:37
+ - (configure, configure.in, IPFWCHAINS-MIB.txt, README,
+ ipfwc_kernel_headers.h, ipfwchains.c, ipfwchains.h, libipfwc.c,
+ libipfwc.h): Patch from Didier Dhaenens:
+ - new modules: ipfwchains.
+
+mslifcak 15 Mar 99 05:54:07
+ - (Makefile.in libsnmp.h mib.c snmp.h snmp_api.c) update CMU_COMPATIBLE
+
+hardaker 15 Mar 99 08:49:10
+ - (Makefile.in, snmp_api.c):
+ - revert to snmp_parse.
+ - don't install libsnmp.h.
+
+mslifcak 15 Mar 99 09:42:34
+ - second pass at CMU_COMPAT : Disable by default, leave snmp_parse alone.
+
+hardaker 15 Mar 99 14:30:45
+ - (snmp.h): remove unneeded commented out define.
+
+hardaker 15 Mar 99 14:31:23
+ - (acconfig.h): added CMU_COMPATIBLE
+
+hardaker 15 Mar 99 15:21:02
+ - (hr_proc.c, hr_proc.h, loadave.c, loadave.h): fix try_loadave for solaris.
+
+hardaker 15 Mar 99 15:31:51
+ - (configure, configure.in, interfaces.c, linux.h): detect
+ /proc/net/dev version at run time, not compile time.
+
+hardaker 15 Mar 99 15:46:12
+ - (interfaces.c): fixes for linux 2.2 interface scanning.
+
+hardaker 15 Mar 99 15:55:35
+ - (Makefile.in): makefileindepend.
+
+hardaker 15 Mar 99 15:58:07
+ - (FAQ, NEWS): updates to talk about the AGENT.txt file.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.5.3 -> V3.6
+
+hardaker 19 Jun 98 13:14:43
+ - (ChangeLog): update for 3.5.
+
+hardaker 22 Jun 98 09:16:32
+ - (main.c): Patch from Jerry G. DeLapp:
+ - commented out trailing #endif comment.
+
+hardaker 24 Jun 98 10:30:19
+ - (Makefile.in): man->html make specification.
+
+hardaker 24 Jun 98 10:31:22
+ - (Makefile.in, snmp_api.c, snmp_api.h): create snmp_pdu_add_variable().
+
+hardaker 24 Jun 98 10:56:46
+ - (snmpset.c, snmptest.c, snmptrap.c, snmp_api.c, snmp_api.h):
+ - moved hex_to_binary, ascii_to_binary, and snmp_add_var to snmplib.
+
+hardaker 24 Jun 98 11:08:41
+ - (UCD-SNMP-MIB.txt): Patch from Niels Baggesen:
+ - shutdown trap specifications.
+ - misc mib fixes.
+
+hardaker 24 Jun 98 11:40:40
+ - (snmpd.c, snmpd.h):
+ - created (poorly) send_trap_pdu() for sending v2 traps from mib modules.
+
+hardaker 26 Jun 98 10:42:32
+ - (disk.c): Patch from Michael Douglass:
+ - fix calculation of totaldisk by doing block division first to
+ protect against 32 bit overflows.
+
+hardaker 26 Jun 98 10:45:15
+ - (smux.c, snmp_bgp.c, snmp_ospf.c, snmp_rip2.c, snmp_rip2.h): Patch
+ from Niels Baggesen:
+ - Fix for new defines and proper header includes.
+
+hardaker 26 Jun 98 15:03:38
+ - (generic.h): put in a comment to keep compilers from complaining too much.
+
+hardaker 28 Jun 98 09:30:34
+ - (snmp_api.c): fix snmp_add_var().
+
+hardaker 1 Jul 98 11:28:17
+ - (configure, configure.in, Makefile.in, agent_read_config.c,
+ agent_read_config.h, snmp_vars.c, snmp_vars.h, snmpd.c, Makefile.in,
+ struct.h, pass.h, Makefile.in, snmptrapd.c, snmptrapd_handlers.c,
+ snmptrapd_handlers.h, Makefile.in, read_config.c, read_config.h,
+ snmp_api.c, snmp_api.h):
+ - moved read_config support into the library and use it.
+ - beginnings of snmptrapd extensibility.
+
+hardaker 1 Jul 98 15:56:12
+ - (snmp_api.c, snmp_api.h, system.h):
+ - added DEBUGPOID(name, namelen);
+ - moved DEBUGP definition into snmp_api.h where it belongs.
+
+hardaker 1 Jul 98 15:57:53
+ - (snmptrapd.c, snmptrapd_handlers.c):
+ - fix extensiblity checking of oids.
+ - seperate running of external command into new function.
+
+hardaker 8 Jul 98 12:26:25
+ - (freebsd2.h): use _UTMP_PATH if available.
+
+hardaker 8 Jul 98 12:26:34
+ - (irix.h): define _KMEMUSER
+
+hardaker 8 Jul 98 12:27:12
+ - (win32.opt, libsnmp.dsp, libsnmp.plg, libsnmp.def, libsnmp_dll.plg,
+ snmpbulkwalk.dsp, snmpbulkwalk.plg, snmpget.dsp, snmpget.plg,
+ snmpgetnext.dsp, snmpgetnext.plg, snmpset.dsp, snmpset.plg,
+ snmpstatus.dsp, snmpstatus.plg, snmptranslate.dsp,
+ snmptranslate.plg, snmpwalk.dsp, snmpwalk.plg): Patch from Joe
+ Marzot:
+ - win32 update.
+
+hardaker 8 Jul 98 12:34:26
+ - (struct.h, util_funcs.c, util_funcs.h, pass-persist.c,
+ pass-persist.h): Patch from Michael Douglass:
+ - create a pass-persist module to handle continuously running pass throughs.
+
+hardaker 8 Jul 98 12:56:46
+ - (read_config.c, read_config.h): removed from agent dir.
+
+hardaker 8 Jul 98 12:57:06
+ - (ucd_snmp.h): added pass-persist module.
+
+hardaker 8 Jul 98 12:58:03
+ - (snmp_api.c): Patch from Joe Marzot:
+ - fix "number of retries" bug.
+ - remove odd timeout calculation code for retries > 3.
+
+hardaker 8 Jul 98 13:02:06
+ - (interfaces.c): make hp_interfaces structure static.
+
+hardaker 8 Jul 98 13:03:36
+ - (system.c): don't free env pointers that are created.
+
+hardaker 8 Jul 98 13:08:18
+ - (UCD-SNMP-MIB.txt): Patch from Niels Baggesen:
+ - fix for missing object identifier labels.
+
+hardaker 8 Jul 98 14:04:22
+ - (Makefile.in, Makefile.top, configure, configure.in, Makefile.in,
+ .cvsignore, Makefile.in, dlmod_mib.c, dlmod_mib.h, example.c,
+ example.h, dlmod.c, dlmod.h, Makefile.in, Makefile.in,
+ DLMOD-MIB.txt, Makefile.in, Makefile.in): Patch from Eugene
+ Polovnikov:
+ - new dlmod set.
+ - fix configure script.
+
+hardaker 8 Jul 98 14:20:42
+ - (dlmod.c): use snmpd_ register_read_config() wrappers.
+
+hardaker 8 Jul 98 14:43:56
+ - (snmp_vars.c): include fixes.
+
+hardaker 8 Jul 98 14:44:25
+ - (ucd_snmp.h): removed ucd-snmp/pass_persist from default include list.
+
+hardaker 8 Jul 98 14:44:34
+ - (pass.c): include sys/wait.h
+
+hardaker 8 Jul 98 14:44:41
+ - (versioninfo.c): include system.h
+
+hardaker 8 Jul 98 14:45:22
+ - (parse.c): include snmp_api.h
+
+hardaker 8 Jul 98 14:45:42
+ - (snmp_api.c): include fixes.
+
+hardaker 8 Jul 98 15:31:36
+ - (snmptrapd.c, snmptrapd_handlers.c): -Wall fixes.
+
+hardaker 8 Jul 98 15:31:50
+ - (agent_read_config.c, snmpd.c): -Wall fixes.
+
+hardaker 8 Jul 98 15:51:28
+ version tag ( 3.6.pre1 )
+
+hardaker 10 Jul 98 09:42:16
+ - (snmpd.c): wrong pdu pointer for snmpv2c traps.
+
+hardaker 15 Jul 98 15:46:28
+ - (sedscript.in): using_module changes.
+
+hardaker 15 Jul 98 15:46:55
+ - (memory.h): MEMSWAPMINIMUM wasn't being used.
+
+hardaker 17 Jul 98 13:11:10
+ - (UCD-SNMP-MIB.inc, UCD-SNMP-MIB.txt):
+ - created smicng input file.
+ - fixed the UCD-SNMP mib to deal with most smic errors.
+
+hardaker 20 Jul 98 17:14:21
+ - (snmpcheck.def): work around for new multi-depth mib tables..
+
+hardaker 22 Jul 98 15:35:07
+ - (mib.c): don't change running environment variables with strtok.
+
+hardaker 22 Jul 98 16:23:45
+ - (Makefile.in, sedscript.in): fix sedscript includes.
+
+hardaker 31 Aug 98 13:02:27
+ - (interfaces.c): missing return on ifInErrors results.
+
+hardaker 31 Aug 98 13:32:43
+ - (snmptrapd.c): add a blank line to the end of the trapd output for parsing.
+
+hardaker 2 Sep 98 18:43:30
+ - (TODO): added security checks.
+
+hardaker 2 Sep 98 18:44:38
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - persistent config file question.
+
+hardaker 2 Sep 98 18:44:53
+ - (Makefile.in): typo.
+
+hardaker 2 Sep 98 18:47:15
+ - (mib.c, mib.h, read_config.c, read_config.h):
+ - pre/post mib loading config files.
+ - create init_snmp() to wrap other fuctions.
+ - new snmp.conf directives: mibs, mibdirs, mibfile.
+
+hardaker 2 Sep 98 18:47:48
+ - (snmp_api.c, snmp_api.h): init_snmp().
+
+hardaker 2 Sep 98 18:48:25
+ - (libsnmp.def): find_module.
+
+hardaker 2 Sep 98 18:48:40
+ - (snmp_parse_args.c): use init_snmp instead of init_mib().
+
+hardaker 2 Sep 98 18:50:34
+ - (agent_read_config.c, agent_read_config.h, snmp_vars.c, snmpd.c,
+ snmpd.h):
+ - support mib-module shutdown functions.
+ - do a minimal persistent cache implementation and read it at start up.
+ - test with beginnings (wrong place) of agentBoots variable.
+
+nba 3 Sep 98 14:29:03
+ - (fixproc): added comment to test CVS.
+
+hardaker 9 Sep 98 16:12:32
+ - (*): Merge into main branch from 3.5.1 branch.
+
+hardaker 9 Sep 98 16:55:04
+ - (snmpd.c): fix trap stuff broken by the code merge.
+
+hardaker 11 Sep 98 09:26:42
+ - (*): Merged the MT changes into the main branch.
+
+hardaker 12 Sep 98 08:46:01
+ - (snmp_api.c): prototype move init_snmp() above init_snmp_session.
+
+hardaker 12 Sep 98 08:53:23
+ - (acconfig.h, config.h.in): move un-configured defines above @TOP@.
+
+hardaker 12 Sep 98 08:54:24
+ - (configure, configure.in): Don't force cc anymore, allow gcc to go first.
+
+hardaker 12 Sep 98 08:56:51
+ - (ov/Makefile.in, mibs/Makefile.in): Patch from Michael Slifcak:
+ - remove duplicate sections already defined in Makefile.top.
+
+hardaker 12 Sep 98 09:02:37
+ - (snmp_api.c): Patch from Michael Slifcak:
+ - bug fix to check for NULL session pointer before using it.
+
+hardaker 12 Sep 98 09:08:46
+ - (acconfig.h, config.h.in): Move CAN_USE_NLIST tests below arch .h files.
+
+hardaker 13 Sep 98 18:24:00
+ - (snmp_api.c): Patch from Michael Slifcak:
+ - exit -> return.
+
+hardaker 13 Sep 98 20:12:09
+ - (snmptable.c, snmptranslate.c, mib.c, mib.h, parse.c, parse.h):
+ - merge into main line from the 3-6-pre1-trans branch.
+
+hardaker 13 Sep 98 20:18:10
+ - (snmp_api.c): define usage mispelling SNMP_BAD_PARSE -> SNMPERR_BAD_PARSE.
+
+hardaker 13 Sep 98 20:30:38
+ - (snmp_api.c): prevent double init_snmp()s.
+
+hardaker 13 Sep 98 21:05:26
+ - (README): Name addition.
+
+hardaker 13 Sep 98 21:06:52
+ - (mib.c, read_config.c): refix the non-malloced configuration vars.
+
+hardaker 13 Sep 98 21:09:36
+ version update: 3.6.pre2
+
+hardaker 14 Sep 98 12:35:10
+ - (Makefile.in): Patch from Michael Slifcak:
+ - install snmp_sess_api.3.
+
+hardaker 14 Sep 98 12:43:32
+ - (agent_read_config.c, snmp_vars.c, dlmod_mib.c, util_funcs.c,
+ dummy.c, wombat.c, hr_device.c, hr_disk.c, hr_filesys.c,
+ hr_network.c, hr_partition.c, hr_print.c, hr_proc.c, hr_storage.c,
+ hr_swinst.c, hr_swrun.c, hr_system.c, at.c, icmp.c, interfaces.c,
+ ip.c, snmp_mib.c, system.c, tcp.c, udp.c, var_route.c, snmp_bgp.c,
+ snmp_ospf.c, snmp_rip2.c, hpux.c, pass.c, pass_persist.c,
+ registry.c, acl_vars.c, alarm.c, context_vars.c, event.c,
+ party_vars.c, view_vars.c, snmptrapd.c, snmptrapd_handlers.c,
+ snmp_api.c, snmp_api.h): Patch from Michael Slifcak:
+ - rename compare -> snmp_oid_compare().
+
+hardaker 15 Sep 98 13:02:34
+ - (inet.c): Patch from Michael Slifcak:
+ - memory related fixes.
+
+hardaker 15 Sep 98 13:07:05
+ - (mib.c): // comment -> /* */ comment.
+
+hardaker 15 Sep 98 13:07:45
+ - (snmp_api.c): Patch from Michael Slifcak:
+ - fix init_snmp calls from session routines.
+
+hardaker 18 Sep 98 13:20:11
+ - (UCD-SNMP-MIB.txt): added the FileTable submitted by Jonas Olsson.
+
+hardaker 18 Sep 98 14:01:51
+ - (ucd_snmp.h): add the file mib module.
+
+hardaker 18 Sep 98 14:04:43
+ - (UCD-SNMP-MIB.txt): Change file return code from TruthValue to
+ integer since 1/2 does not fit the current 0/1 return code scheme.
+
+hardaker 21 Sep 98 11:11:39
+ - (snmp_vars.c): finally fixed the write_method's for creation problem.
+
+hardaker 23 Sep 98 13:07:07
+ - (acconfig.h, config.h.in, configure, configure.in, parse.c): New flag:
+ - --enable-eol-terminated-comments.
+
+hardaker 25 Sep 98 17:05:40
+ - (snmp_api.c): don't rely on the getservbyname pointer to stay around.
+
+hardaker 25 Sep 98 17:15:22
+ - (snmp_api.c, snmp_api.h, snmp_client.c): Patch from Michael Slifcak:
+ - The CMU library has an optimization in snmp_clone_pdu() that does
+ not copy zero length strings. I had merged this in with changes
+ made for multi-thread support. Unfortunately, I did not make sure
+ the cloned PDU had no pointer for this case. Oops!
+ - Another problem in snmp_clone_pdu() was the test for zero length
+ string was not being performed on the first varbind in the chain.
+
+hardaker 25 Sep 98 17:24:16
+ - (mib.c, mib.h, read_config.c, snmp_api.c, snmp_api.h): Patch from
+ Michael Slifcak:
+ - fix compiler warnings, errors.
+
+hardaker 25 Sep 98 17:25:10
+ - (snmptable.c): process args directly instead of relying on get_opt().
+
+hardaker 25 Sep 98 17:33:06
+ - (config.h, win32.dsw, libsnmp.dsp, libsnmp.def, libsnmp_dll.dsp,
+ snmptable.dsp): Patch from Michael Slifcak:
+ - stupid OS update.
+
+hardaker 25 Sep 98 17:55:50
+ - (Makefile.in): Patch from Michael Slifcak:
+ - install more headers.
+
+hardaker 25 Sep 98 17:56:43
+ - (Makefile.in): don't install libsnmp.h. It's going to change too
+ much in the future.
+
+hardaker 25 Sep 98 18:03:27
+ - (Makefile.in): install version.h, and strip includes out of config.h
+
+hardaker 25 Sep 98 18:04:11
+ - (snmp_api.c): remove unneeded comment-out.
+
+hardaker 25 Sep 98 18:14:20
+ - (configure, configure.in, util_funcs.c): use USLEEP if available for
+ small sleep times while waiting for processes to finish.
+
+hardaker 30 Sep 98 14:57:11
+ - (ChangeLog, EXAMPLE.conf.def, NEWS, configure, configure.in,
+ interfaces.c, memory.c, snmptest.c, snmptrap.c, parse.c):
+ - merge 3.5.3 changes into main trunk.
+
+hardaker 5 Oct 98 16:53:23
+ - (dummy.c, dummy.h): update to remove common_header.h
+
+hardaker 5 Oct 98 17:03:34
+ - (hr_proc.c): possible fix for solaris's process percentage.
+
+hardaker 6 Oct 98 15:18:03
+ - (var_route.c): hack fixes for hpux10 and rtentry.
+
+hardaker 6 Oct 98 15:18:16
+ - (hpux.h): hack fixes for hpux10 and rtentry.
+
+hardaker 6 Oct 98 15:18:55
+ - (config.h.in): setup define for HAVE_USLEEP.
+
+hardaker 6 Oct 98 15:34:58
+ - (remove-files): update.
+
+hardaker 6 Oct 98 15:35:06
+ - (versiontag): fix for cvs 1.10.
+
+hardaker 6 Oct 98 15:38:49
+ - (versiontag): typo.
+
+hardaker 6 Oct 98 15:38:56
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre3 )
+
+hardaker 7 Oct 98 16:49:11
+ - (Makefile.in): Patch from Michael Slifcak:
+ - properly locate version.h in $(srcdir).
+
+hardaker 7 Oct 98 16:49:30
+ - (Makefile.in): Patch from Michael Slifcak:
+ - fix make html.
+
+hardaker 7 Oct 98 16:50:23
+ - (parse.c): Patch from Michael Slifcak:
+ - remove un-needed headers.
+
+hardaker 7 Oct 98 16:51:56
+ - (snmp_api.c): fix default port problems (again).
+
+hardaker 7 Oct 98 16:54:38
+ - (snmpdelta.c): Patch from Michael Slifcak:
+ - fix exiting problems on NT.
+
+hardaker 7 Oct 98 17:00:40
+ - (libsnmp.dsp, libsnmp_dll.dsp): Patch from Michael Slifcak:
+ - winNT project file updates.
+
+hardaker 9 Oct 98 08:09:12
+ - (config.h.in, configure, configure.in): use zlib when using rpm libraries.
+
+hardaker 9 Oct 98 23:08:18
+ - (parse.c): Patch from Dave Shield:
+ - Check for fully qualified oid statements.
+
+hardaker 9 Oct 98 23:12:02
+ - (parse.c): Patch from Dave Shield:
+ - support for strict (case sensitive) option to the mib compiler.
+
+hardaker 9 Oct 98 23:20:25
+ - (FAQ): Dave Shield explains in wonderous detail all about the VACM module.
+
+hardaker 14 Oct 98 09:17:02
+ - (EXAMPLE.conf.def): change public community examples -> private.
+
+hardaker 14 Oct 98 09:41:12
+ - (config.h.in, configure, configure.in): check for machine/types.h.
+
+hardaker 14 Oct 98 09:41:38
+ - (host_res.h): net/in_var.h for freebsd3.
+
+hardaker 14 Oct 98 09:42:20
+ - (hr_storage.c): machine/types.h and sys/vmmeter.h for freebsd3.
+
+hardaker 14 Oct 98 09:50:26
+ - (freebsd3.h): define freebsd2 and MOUNT_NFS.
+
+hardaker 14 Oct 98 09:51:58
+ - (freebsd3.h): opps: define MOUNT_NFS as "nfs".
+
+hardaker 14 Oct 98 16:40:05
+ - (snmpd.c): -A: append to log file.
+
+hardaker 14 Oct 98 16:41:52
+ - (snmpd.c): document -A.
+
+hardaker 14 Oct 98 16:42:10
+ - (snmpd.1.def): document -A.
+
+hardaker 14 Oct 98 16:49:03
+ - (mib.c): Patch from Michael Slifcak:
+ - fix for broken compiler warnings on NT.
+
+hardaker 14 Oct 98 16:52:51
+ - (memory.c): fix for hpux9.
+
+hardaker 16 Oct 98 08:38:39
+ - (at.c, icmp.c, interfaces.c, aix.h): aix header file fixes.
+
+hardaker 21 Oct 98 10:54:49
+ - (parse.c): Patch from Dave Shield:
+ - Fix parser to deal with anonymous children properly.
+
+hardaker 21 Oct 98 11:08:56
+ - (hr_filesys.c): Patch from Dave Shield:
+ - watch out for empty file names passed in.
+
+hardaker 21 Oct 98 17:01:12
+ - (.cvsignore, Makefile.in, read_config.3.def):
+ - new unproofread manual on the read_config api (most of it).
+
+hardaker 23 Oct 98 07:57:17
+ - (hr_filesys.c): Patch from Dave Shield:
+ - NULL checking on the filesystem mount point.
+
+hardaker 23 Oct 98 13:54:11
+ - (Makefile.in): insert @ sign.
+
+hardaker 23 Oct 98 13:54:47
+ - (at.c, icmp.c, interfaces.c): bug fixes, missing #endif.
+
+hardaker 23 Oct 98 13:56:09
+ - (tkmib): editable oid field.
+
+hardaker 23 Oct 98 13:59:44
+ - (acconfig.h, config.h.in, configure, configure.in,
+ agent_read_config.c, agent_read_config.h, snmpd.c, wombat.h,
+ system.h, vacm_vars.h, dlmod.c, disk.h, extensible.h, file.h,
+ loadave.h, memory.h, memory_freebsd2.h, pass.h, pass_persist.h,
+ proc.h, snmp_parse_args.c, snmptrapd.c, mib.c, read_config.c,
+ read_config.h):
+ - new option -H on command line to print out .conf file directives
+ that the application understands.
+ - created a new option to the read config registration to allow
+ specifying of a help line.
+
+hardaker 6 Nov 98 17:23:46
+ - (snmpd.c): fix v2 trap generation.
+
+hardaker 6 Nov 98 17:44:43
+ - (snmpd.c): v2 trap send debugging.
+
+hardaker 16 Nov 98 22:10:08
+ - (tkmib): too many improvements to count.
+
+hardaker 23 Nov 98 15:42:52
+ - (interfaces.c, irix.h): fix location of _KERNEL define for irix.
+
+hardaker 23 Nov 98 16:35:40
+ - (snmp_parse_args.c, mib.c, parse.c, parse.h): Patch from Michael Slifcak:
+ - misc parsing bug fixes.
+ - -w & -W options to default application parse_args.
+ - runtime options to control underscore and comment parsing in mibs.
+
+hardaker 13 Dec 98 07:42:44
+ - (config.h.in, configure, configure.in, mib.c, snmp_api.c):
+ - use setlocale() if available to correct isprint problems.
+
+hardaker 13 Dec 98 07:48:53
+ - (parse.c, parse.h): new functions: snmp_mib_toggle_options() and usage.
+
+hardaker 13 Dec 98 07:49:43
+ - (snmp_parse_args.c): -P flag for toggling new mib parsing options.
+
+hardaker 13 Dec 98 08:06:33
+ - (NEWS): beginning notes for 3.6.
+
+hardaker 13 Dec 98 08:07:24
+ - (disk.c): fix disk size error flag reporting on Solaris.
+
+hardaker 13 Dec 98 08:12:13
+ - (parse.c): spacing in mib option usage fixes.
+
+hardaker 13 Dec 98 08:14:44
+ - (snmp_parse_args.c): remove -w/-W flag in usage.
+
+hardaker 13 Dec 98 08:18:07
+ - (kernel_sunos5.c): remove a few defines that were messing up solaris 7.
+
+hardaker 13 Dec 98 08:41:55
+ - (hr_filesys.c): watch out for NULL file pointers.
+
+hardaker 13 Dec 98 08:42:20
+ - (inet.c): init pointer to NULL.
+
+hardaker 13 Dec 98 08:48:38
+ - (hr_swinst.c): Patch from Jeff Johnson:
+ - protect against memory leaks with the RPM package info calls.
+
+hardaker 13 Dec 98 08:57:52
+ - (README): added Jeff Johnson to the contributors list.
+
+hardaker 13 Dec 98 08:59:16
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre5 )
+
+hardaker 16 Dec 98 07:31:26
+ - (snmp_api.c): Patch from Michael Slifcak:
+ - pointer checks before freeing memory.
+
+hardaker 18 Dec 98 11:36:39
+ - (UCD-SNMP-MIB.txt): Patch from Michael Slifcak:
+ - typo.
+
+hardaker 18 Dec 98 18:10:24
+ - (parse.c, read_config.c, read_config.h):
+ - fixes from Michael Slifcak.
+ - misc read_config functions pulled in from the v3 work.
+
+hardaker 18 Dec 98 18:11:03
+ - (libsnmp.def): update from Michael Slifcak.
+
+hardaker 18 Dec 98 18:12:54
+ - (snmp_parse_args.c): include read_config.h.
+
+hardaker 18 Dec 98 18:16:33
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - store configure flags to a define.
+
+hardaker 18 Dec 98 18:16:53
+ - (versioninfo.c, versioninfo.h): mib object to display configure options.
+
+hardaker 21 Dec 98 18:19:12
+ - (file.h, UCD-SNMP-MIB.txt): move the file mib to .15 so it doesn't
+ conflict with the demo mib.
+
+hardaker 21 Dec 98 18:20:25
+ - (system.c): Patch from Michael Slifcak:
+ - Win32 memory leak fixes for opendir(), etc.
+
+hardaker 22 Dec 98 08:50:29
+ - (Makefile.in): don't compile dlmods
+
+hardaker 22 Dec 98 14:56:44
+ - (mib.c, snmp_api.c): Patch from Michael Slifcak:
+ - fix my broken set_locale stuff.
+
+hardaker 26 Dec 98 10:35:23
+ - (dlmod.c): Patch from Michael Slifcak:
+ - fix dlmod compilation in snmpd_register_config_handler() call.
+
+hardaker 29 Dec 98 16:55:54
+ - (mib.c): Patch from Michael Slifcak:
+ - remove newlines from sprint_value() where applicable.
+
+hardaker 29 Dec 98 17:02:33
+ - (vacm.c): Enable multiple side by side views in the view family
+ tree. The views already existed, but weren't checked and only the
+ first view was found.
+ - Not done in a clean fashion. Much of the structure definitions
+ should be rewritten with sub-pieces to do it properly with greater
+ speed.
+
+hardaker 31 Dec 98 17:46:11
+ - (event.c): Patch from David Tiller:
+ - memcmp's sizes were wrong.
+
+hardaker 31 Dec 98 17:48:57
+ - (snmp_client.c): Patch from David Tiller:
+ - need to read_objid() the context oid base, not the party oid base
+ in one location.
+
+hardaker 31 Dec 98 17:49:51
+ - (snmp_vars.c): Patch from David Tiller:
+ - oidLen's were wrong for m2m oids.
+
+hardaker 2 Jan 99 08:48:29
+ - (IANAifType-MIB.txt): Patch from Jakob Ellerstedt:
+ - new complete list of ifTypes.
+
+hardaker 5 Jan 99 10:41:52
+ - (snmptable.c): Make field separator take arguments directly after the -f.
+
+hardaker 5 Jan 99 10:48:51
+ - (snmpbulkwalk.c, snmpget.c, snmpgetnext.c, snmpset.c, snmpstatus.c,
+ snmptable.c, snmpwalk.c): Patch from mslifcak@iss.net:
+ - make main() return an int instead of void.
+
+hardaker 9 Jan 99 20:28:21
+ - (mib.c, parse.c, read_config.c, snmp_api.c, snmp_api.h, vacm.c):
+ - Implement the new token based debugging message support.
+
+hardaker 9 Jan 99 20:30:12
+ - (snmptable.c): change internal debug variable to localdebug.
+
+hardaker 9 Jan 99 20:30:47
+ - (snmp_parse_args.c): make -D register the debugging tokens specified.
+
+hardaker 9 Jan 99 20:49:29
+ - (FAQ, README): URL changes.
+
+hardaker 9 Jan 99 20:50:15
+ - (snmptrapd.c, snmptrapd_handlers.c): use the new debugging functions.
+
+hardaker 9 Jan 99 20:50:28
+ - (if.c, main.c): use the new debugging functions.
+
+hardaker 9 Jan 99 20:52:10
+ - (snmp_api.c, snmp_api.h): DEBUGPOID replacement: DEBUGMSGOID.
+
+hardaker 9 Jan 99 20:52:22
+ - (snmpcmd.1): discuss -D usage change.
+
+hardaker 9 Jan 99 21:50:13
+ - (agent/*.c):
+ - use the new debugging functions.
+ - implement needed -D flag changes.
+
+hardaker 14 Jan 99 09:02:36
+ - (mib2c): update for SNMP.pm 1.8.
+
+hardaker 15 Jan 99 11:10:09
+ - (snmp2p.c): Patch from Michael Slifcak:
+ - remove reverse_bytes() usage.
+
+hardaker 15 Jan 99 11:12:22
+ - (snmpd.c, snmpd.h):
+ - remove reverse_bytes() usage.
+
+hardaker 15 Jan 99 15:24:02
+ - (agent/mibgroup/*):
+ - made all (ok, some. !host) mib modules use snmpd_register_config_handler().
+ - made all (ok, some. !host) mib modules use register_mib().
+
+hardaker 15 Jan 99 15:58:20
+ - (Makefile.in, Makefile.in): makefileindepend.
+
+hardaker 15 Jan 99 15:58:50
+ - (vacm.c): DEBUGMSG typo.
+
+hardaker 15 Jan 99 16:17:05
+ - (smux.c, smux.h): Patch from Nick Amato:
+ - smux patches.
+
+hardaker 16 Jan 99 23:04:12
+ - (snmpcmd.1): updated -D description.
+
+hardaker 16 Jan 99 23:12:03
+ - (snmplib/*.[ch]): Patch from Markku Laukkanen:
+ - asni'ify all functions.
+
+hardaker 16 Jan 99 23:13:10
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre6 )
+
+hardaker 18 Jan 99 10:47:36
+ - (README, apps, agent, acconfig.h): Patch from Markku Laukkanen:
+ - ansi'ify everything.
+
+hardaker 19 Jan 99 19:59:53
+ - (config.h.in, configure, configure.in): remove __P checking.
+
+hardaker 19 Jan 99 20:01:59
+ - (snmptable.c, mib.c, parse.c, snmp_auth.c, libsnmp.def): Patch from
+ Michael J. Slifcak:
+ - apps/snmptable.c - some compilers warn comparing pointer with integer
+ - snmplib/mib.c - already mentioned before; here for complete-ness
+ - snmplib/parse.c - minor touchup of includes; system.h dup removed
+ - snmplib/snmp_api.h - MSVisual C++ doesn't have __FUNCTION__
+ - snmplib/snmp_auth.c - minor fix of comment
+ - win32/libsnmp_dll/libsnmp.def - snmp_parse_args needs a new function
+
+hardaker 20 Jan 99 12:20:08
+ - (FAQ): perl-SNMP and y2k questions added.
+
+hardaker 20 Jan 99 12:21:35
+ - (acconfig.h): unneeded comment removed.
+
+hardaker 20 Jan 99 12:21:57
+ - (interfaces.c): typo in ansi changes.
+
+hardaker 20 Jan 99 12:24:34
+ - (agent_read_config.c, auto_nlist.c, snmp_agent.c, snmpd.c,
+ host_res.h, mibincl.h, .cvsignore, snmp_parse_args.c, snmptrapd.c,
+ snmptrapd_handlers.c, if.c, Makefile.in, mib.c, parse.c,
+ read_config.c, snmp_api.c, snmp_api.h, snmp_debug.c, snmp_debug.h,
+ vacm.c): debugging support code moved to snmp_debug.[ch].
+
+hardaker 20 Jan 99 15:11:59
+ - (Makefile.in): version tag creation.
+
+hardaker 20 Jan 99 15:14:13
+ - (config.h.in, configure, configure.in):
+ - check for asm/page.h (linux).
+ - check for sys/stream.h (SCO).
+ - Fix rtentry test.
+
+hardaker 20 Jan 99 15:14:42
+ - (agent_read_config.c, snmp_vars.c): include sys/stream.h for SCO.
+
+hardaker 20 Jan 99 15:14:58
+ - (versiontag): version tagging ability to do many things.
+
+hardaker 20 Jan 99 15:16:34
+ - (at.c, interfaces.c, ip.c, route_write.c, tcp.c, udp.c,
+ var_route.c):
+ - sys/stream.h needed by SCO.
+ - interfaces scan fixes for linux 2.0 vs 2.1 can be configured elsewhere now.
+ - protect get_address calls against NULL pointer returns.
+
+hardaker 20 Jan 99 15:17:17
+ - (disk.c, errormib.c, extensible.c, loadave.c, memory.c):
+ - linux 2.1 kernel needs asm/page.h (all includes need to be re-written).
+
+hardaker 20 Jan 99 15:17:41
+ - (linux.h): define LINUX_INTERFACE_SCAN_LINE.
+
+hardaker 20 Jan 99 15:20:04
+ - (Makefile.in): install ucd-snmp-includes.h.
+
+hardaker 20 Jan 99 15:22:08
+ - (Makefile.in): make depend.
+
+hardaker 20 Jan 99 15:22:38
+ - (FAQ, README): added version stamp.
+
+hardaker 20 Jan 99 15:30:58
+ - (COPYING): It's 1999
+
+hardaker 20 Jan 99 15:31:13
+ - (README): helping out changes.
+
+hardaker 20 Jan 99 15:48:53
+ - (smux.c): typo
+
+hardaker 20 Jan 99 15:49:30
+ - (hr_swinst): #ifdef RPM protect a free routine.
+
+hardaker 20 Jan 99 15:50:17
+ - (Makefile.in): remove ucd specific mib module make requirements.
+
+hardaker 20 Jan 99 15:54:02
+ - (snmpd.c): export sdlist and sdlen variables.
+
+hardaker 20 Jan 99 15:54:36
+ - (smux.c): debugging changes.
+
+hardaker 20 Jan 99 16:41:20
+ - (acconfig.h, config.h.in, snmp_parse_args.c, main.c, snmp_api.c):
+ Patch from Michael Slifcak:
+ - allow zero length (legal) community strings.
+
+hardaker 20 Jan 99 17:02:37
+ - (config.h.in): ran autoheader
+
+hardaker 20 Jan 99 17:11:26
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre7 )
+
+hardaker 21 Jan 99 08:39:34
+ - (FAQ): Patch from Michael J. Slifcak:
+ - typo on Joe's name fixed.
+
+hardaker 21 Jan 99 08:40:26
+ - (acconfig.h, config.h.in, snmp_api.c, config.h): Patch from Michael
+ J. Slifcak:
+ - NO_NULL_COMUNITY -> NO_ZEROLENGTH_COMMUNITY.
+
+hardaker 21 Jan 99 08:42:17
+ - (Makefile.in): remove ucd specific module depends.
+
+hardaker 22 Jan 99 07:23:13
+ - (snmp_api.c): Patch from Michael Slifcak:
+ - Check for NULL on session closes.
+
+hardaker 25 Jan 99 10:28:08
+ - (snmpdelta.c, snmpstatus.c, snmptest.c, snmptrap.c,
+ snmptrapd_handlers.c, inet.c, main.c): Patch from Markku Laukkanen:
+ - more ansi fixes.
+
+hardaker 25 Jan 99 10:28:26
+ - (versiontag): typo.
+
+hardaker 25 Jan 99 10:28:41
+ - (linux.h): 2.2 define update.
+
+hardaker 25 Jan 99 10:33:24
+ - (context_parse.c, mib.c, parse.c, read_config.c, snmp_api.c,
+ snmp_client.c, system.c): Patch from Markku Laukkanen:
+ - ansi fixes.
+
+hardaker 25 Jan 99 10:34:11
+ - (system.c): fix strings.h include.
+
+hardaker 25 Jan 99 11:11:49
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - test if __FUNCTION__ is supported by the compiler.
+
+hardaker 25 Jan 99 11:15:53
+ - (agent_read_config.c, snmp_vars.h, snmpd.c, host_res.h, mibincl.h,
+ file.c, inet.c, parse.c, snmp_debug.c):
+ - -Wall fixes.
+
+hardaker 25 Jan 99 11:16:16
+ - (linux.h): comment typo.
+
+hardaker 25 Jan 99 16:25:37
+ - (README, README.mib2c): mib2c readme file.
+
+hardaker 26 Jan 99 09:45:42
+ - (EXAMPLE.conf.def): change reference IP net addresses to 10.10.10.0.
+
+hardaker 2 Feb 99 13:33:25
+ 2036 -> 2038
+
+hardaker 2 Feb 99 13:34:36
+ - (snmpd.c): typo: -L -> -A in help strings docs.
+
+hardaker 2 Feb 99 22:00:13
+ - (FAQ): mention lack of solaris memory support.
+
+hardaker 2 Feb 99 22:01:01
+ - (TODO): Remove unsuppored mib nodes from output instead of returning 0's.
+
+hardaker 2 Feb 99 22:02:04
+ - (hr_proc.c): use [0] index of load average table.
+
+hardaker 2 Feb 99 22:02:41
+ - (UCD-SNMP-MIB.txt):
+ - mention that the memory section isn't supported on all
+ architectures.
+
+hardaker 8 Feb 99 12:21:25
+ - (smux.c): Patch from John Polstra:
+ - call accept() to get the socket file descriptor.
+
+hardaker 8 Feb 99 15:08:57
+ - (FAQ): Patch from Michael Slifcak:
+ - Tk.pm mention.
+
+hardaker 8 Feb 99 15:13:01
+ - (snmpd.c): Patch from Michael Slifcak:
+ - variable renaming index -> iindex.
+
+hardaker 8 Feb 99 15:14:42
+ - (snmpdelta.c): Patch from Michael Slifcak:
+ - variable renaming time -> m_time.
+
+hardaker 8 Feb 99 15:17:50
+ - (route.c): Patch from Michael Slifcak:
+ - variable renaming index -> IfIndex.
+
+hardaker 8 Feb 99 15:18:08
+ - (inet.c): proper bracket indentation.
+
+hardaker 8 Feb 99 15:19:22
+ - (parse.c): Patch from Michael Slifcak:
+ - use size_t instead of "unsigned" for xmalloc, etc.
+
+hardaker 8 Feb 99 15:20:47
+ - (snmp_api.c, snmp_api.h): Patch from Michael Slifcak:
+ - make snmp_oid_compare use const's.
+
+hardaker 8 Feb 99 23:22:33
+ - (agent/*): Patch from Michael Slifcak:
+ - typedef all of the var_xxx and write method functions.
+
+hardaker 8 Feb 99 23:23:41
+ - (kernel_sunos5.c, mibincl.h) Patch from Michael Slifcak:
+ - include updates.
+
+hardaker 9 Feb 99 14:10:33
+ - (Makefile.in): make FAQ.html.
+
+hardaker 9 Feb 99 14:10:52
+ - (mib2c): typo.
+
+hardaker 9 Feb 99 14:35:46
+ - (mib.c): increase buffer size for oid printing.
+
+hardaker 11 Feb 99 16:10:39
+ - (*): Patch from Michael Slifcak:
+ - convert MAX_NAME_LEN -> MAX_OID_LEN.
+ - convert temporary character storage buffers to SPRINT_MAX_LEN.
+ - make the libraries print_ functions use the fprint_ function
+ already defined and pass it stdout.
+
+hardaker 11 Feb 99 16:22:03
+ - (host_res.h): include snmp_vars.h ahead of var_struct.h.
+
+hardaker 11 Feb 99 16:23:16
+ - (acl_parse.c, context_parse.c, party_parse.c, read_config.c, snmp_api.c):
+ - More buf size standardizations that Michael missed.
+ - A few MAX_NAME_LEN -> MAX_OID_LEN conversions that Michael missed.
+
+hardaker 11 Feb 99 16:34:00
+ - (tcp.c): var_tcpEntry was checking against the incoming oid with the
+ wrong length and could succeed at times when it shouldn't have.
+
+hardaker 11 Feb 99 16:46:48
+ - (version.h bug-report sedscript.in): version tag ( Ext-3-6-pre8 )
+
+hardaker 11 Feb 99 16:48:07
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre8 )
+
+hardaker 11 Feb 99 16:48:29
+ - (versiontag): update.
+
+hardaker 16 Feb 99 17:05:45
+ - (mib2c, mib2c.conf): updated mib2c program... still in progress...
+
+hardaker 17 Feb 99 15:10:00
+ - (interfaces.c): Patch from Michael L. Hitch:
+ - fix if_name variable by making it static.
+
+hardaker 17 Feb 99 15:13:38
+ - (snmpd.h): Patch from Michael Slifcak:
+ - remove reverse_bytes() prototype.
+
+hardaker 17 Feb 99 15:13:58
+ - (snmptranslate.c): Patch from Michael Slifcak:
+ - usage fix.
+
+hardaker 17 Feb 99 15:15:59
+ - (if.c, inet.c, main.c, netstat.h, route.c): Patch from Michael Slifcak:
+ - make snmpnetstat win32 compatible.
+
+hardaker 17 Feb 99 15:16:17
+ - (mib2c, mib2c.conf): update again for better still output.
+
+hardaker 17 Feb 99 15:17:13
+ - (Makefile.in): separate target for generated manual pages.
+
+hardaker 17 Feb 99 15:18:06
+ - (IANAifType-MIB.txt): Patch from Michael Slifcak:
+ - use a '-' instead of a '.' for IEEE802-11.
+
+hardaker 17 Feb 99 15:19:03
+ - (asn1.c): Patch from Michael Slifcak:
+ - comment reformatting.
+
+hardaker 17 Feb 99 15:19:52
+ - (context_parse.c): Patch from Michael Slifcak:
+ - don't use a variable called 'time'. Tsk tsk.
+
+hardaker 17 Feb 99 15:21:25
+ - (mib.c): Patch from Michael Slifcak:
+ - fix fprint_variable to not recurse.
+
+hardaker 17 Feb 99 15:23:44
+ - (parse.c, party_parse.c, snmp_auth.c): Patch from Michael Slifcak:
+ - variable name conflict fixes.
+
+hardaker 17 Feb 99 15:28:54
+ - (config.h, win32.dsw, libsnmp.dsp, libsnmp.def, libsnmp_dll.dsp,
+ snmpnetstat.dsp, snmptable.dsp): Patch from Michael Slifcak:
+ - win32 updates.
+
+hardaker 17 Feb 99 16:13:47
+ - (snmpd.c, dummy.c, wombat.c, system_mib.c, vacm_vars.c, dlmod.c,
+ disk.c, extensible.c, file.c, loadave.c, memory.c,
+ memory_freebsd2.c, pass.c, pass_persist.c, proc.c, mib.c,
+ read_config.c): word -> token ("word" is reserved in some compilers.
+
+hardaker 22 Feb 99 09:11:52
+ - (parse.c): Patch from mslifcak@iss.net:
+ - The command line option to select "allow underscore in MIB
+ symbols" is missing.
+
+hardaker 22 Feb 99 09:44:21
+ - (parse.c): Patch from Michael Slifcak:
+ - Don't print "can't find module XXX" messages without warnings turned on.
+
+hardaker 24 Feb 99 14:43:21
+ - (IANAifType-MIB.txt): update.
+
+hardaker 24 Feb 99 17:10:13
+ - (acconfig.h, config.h.in, configure, configure.in, linux.h):
+ - Check for and handle 2.2 /proc/net/dev changes.
+
+hardaker 25 Feb 99 10:03:41
+ - (README, ucd_snmp.h, memory_solaris2.c, memory_solaris2.h): Patch
+ from David F. Newman:
+ - memory support for solaris2.
+
+hardaker 26 Feb 99 15:02:55
+ - (loadave.c, loadave.h, UCD-SNMP-MIB.txt):
+ - implement load average reporting as a integer and as a float.
+
+hardaker 26 Feb 99 15:42:31
+ - (mib.c, parse.c, parse.h): Patch from Michael Slifcak:
+ - Unlinked OID ... ccitt 0 fix courtesy of Dave Shield.
+ - Continue after reserved word error fix courtesy of Dave Shield.
+ - Modification to #2 courtesy of Niels Baggesen.
+ - Modification to print sub-identifier == 0
+ - variable renaming.
+ - Instead of re-ordering all singly-linked lists, use a new member
+ that flags when a report has begun.
+
+hardaker 26 Feb 99 16:06:49
+ - (EXAMPLE.conf.def): update and made better examples.
+
+hardaker 26 Feb 99 16:10:21
+ - (NEWS): update for 3.6 release.
+
+hardaker 26 Feb 99 16:10:47
+ - (snmptrapd.c): usage update, and -H support.
+
+hardaker 26 Feb 99 16:11:49
+ - (Makefile.in, read_config.3.def, snmp.conf.5.def, snmp_config.5.def,
+ snmpd.conf.5.def, snmptrapd.8, snmptrapd.conf.5.def):
+ - new documentation on configuration capabilities.
+
+hardaker 26 Feb 99 16:33:09
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre9 )
+
+hardaker 1 Mar 99 10:48:03
+ - (UCD-SNMP-MIB.txt): typo: fileMax -> fileErrorFlag name change.
+
+hardaker 1 Mar 99 12:27:12
+ - (snmpd.c): Patch from Mike Slifcak:
+ - renaming of variables away from system function names (index -> lindex).
+
+hardaker 1 Mar 99 12:27:30
+ - (errormib.c): Patch from Mike Slifcak:
+ - remove errno variable.
+
+hardaker 1 Mar 99 12:27:45
+ - (if.c): Patch from Mike Slifcak:
+ - free the interface table.
+
+hardaker 1 Mar 99 12:28:17
+ - (parse.c): Patch from Mike Slifcak:
+ - remove duplicate case entries.
+
+hardaker 1 Mar 99 12:29:05
+ - (snmp_api.c): put a proper (void) into the function prototype.
+
+hardaker 1 Mar 99 12:29:45
+ - (snmp_client.c): Patch from Mike Slifcak:
+ - variable renaming.
+
+hardaker 1 Mar 99 12:30:19
+ - (asn1.h): Patch from Mike Slifcak:
+ - added MIN_OID_LEN for instructional use mostly (its unused).
+
+hardaker 1 Mar 99 13:03:15
+ - (context_parse.c, mib.c): Patch from Michael Slifcak:
+ - typecasting for certain functions to (char *).
+
+hardaker 1 Mar 99 13:59:14
+ - (snmp_vars.c, snmp_vars.h): make compare_tree() global.
+
+hardaker 1 Mar 99 14:04:05
+ - (smux.c, smux.h): Patch from Nick Amato:
+ - completely re-written smux modules.
+
+hardaker 1 Mar 99 14:20:11
+ - (smux.c, smux.h): 3.6ified.
+
+hardaker 1 Mar 99 16:10:57
+ - (alarm.c): Patch from Michael Slifcak:
+ - Cast to pointer to int may overflow the return buffer.
+
+hardaker 1 Mar 99 16:11:49
+ - (Makefile.in): Patch from David F. Newman:
+ - removed a trailing backslash that wasn't needed.
+
+hardaker 1 Mar 99 16:17:36
+ - (mib_api.3, read_config.3.def, snmp.conf.5.def, snmp_config.5.def,
+ snmpd.1.def, snmpd.conf.5.def, snmptest.1, snmptrapd.conf.5.def,
+ variables.5): Michael Slifcak:
+ - spell check.
+
+hardaker 1 Mar 99 16:19:56
+ - (snmp.conf.5.def, snmp_config.5.def, snmpd.1.def, snmptrapd.conf.5.def):
+ - remove reference to ECE dept.
+
+hardaker 1 Mar 99 16:22:40
+ - (asn1.h): put back in MAX_NAME_LEN temporarily.
+
+hardaker 1 Mar 99 17:43:49
+ - (smux.c):
+ - allow null length passwords.
+ - clean up debugging output.
+
+hardaker 2 Mar 99 08:47:29
+ - (asn1.h): Patch from Dave Shield:
+ - Don't define MAX_NAME_LEN if defined somewhere else.
+
+hardaker 2 Mar 99 10:42:34
+ - (system_mib.c, vacm_vars.c, ipfwacc.c): Patch from Michael Slifcak:
+ - Suggested fixes to eliminate more shadowed global references.
+ - fixups for prototype [(void) replacing ()].
+
+hardaker 2 Mar 99 13:23:57
+ - (var_route.c): don't return a pointer to a pointer.
+
+hardaker 2 Mar 99 15:17:53
+ - (acconfig.h, config.h.in, configure, configure.in, snmp_debug.c,
+ snmp_debug.h):
+ - new flag: --disable-debugging to completely turn off its support.
+ - renaming of DODEBUG to SNMP_ALWAYS_DEBUG.
+ - clean up of the configure script options listed, including putting
+ a list of available modules for compilation into the agent.
+
+hardaker 2 Mar 99 15:18:59
+ - (snmpd.conf.5.def): typo.
+
+hardaker 2 Mar 99 15:21:34
+ - (smux.c): Patch from Michael Slifcak:
+ - Linux compiles die at SO_RCVTIMEO.
+ - -Wall type fixes.
+
+hardaker 3 Mar 99 08:25:33
+ - (README): Added Nick.
+
+hardaker 3 Mar 99 08:28:05
+ - (configure): ran autoconf...
+
+hardaker 3 Mar 99 11:40:11
+ - (proc.c, solaris.h): Patch from Chris Hughes:
+ - Use /proc on solaris.
+
+hardaker 3 Mar 99 17:51:26
+ - (ChangeLog, FAQ, NEWS, PORTING, README, TODO, bug-report, snmpd.c,
+ README.mib2c): ece.ucdavis.edu -> ucd-snmp.ucdavis.edu.
+
+hardaker 3 Mar 99 18:00:51
+ - (NEWS): mention name change.
+
+hardaker 3 Mar 99 18:02:07
+ - (NEWS): mention SMUX.
+
+hardaker 3 Mar 99 18:02:23
+ - (version.h bug-report sedscript.in): version tag ( 3.6.pre10 )
+
+mslifcak 4 Mar 99 04:08:01
+
+ (snmpnetstat/if.c) - add void to empty formal parameter list
+
+hardaker 4 Mar 99 08:36:39
+ - (versiontag): repository move.
+
+hardaker 4 Mar 99 08:36:46
+ - (README.smux): add Nick.
+
+hardaker 4 Mar 99 09:07:07
+ - (configure.in, configure): fix void test for ansi compilers.
+
+mslifcak 4 Mar 99 09:20:08
+
+
+ (agent/snmpd.c, snmplib/snmp_client.c) : remove duplicate includes
+
+ (agent/mibgroup/target/snmpTargetAddrEntry.c, agent/mibgroup/target/snmpTargetParamsEntry.c, agent/mibgroup/ucd-snmp/memory_solaris2.c, apps/snmptrapd_handlers.c) : change "*word" to "*token" to help some compiler
+
+mslifcak 4 Mar 99 09:24:26
+
+
+ (Makefile.in) - find mibdefs.h when not building in the source tree
+
+hardaker 4 Mar 99 09:33:31
+ - (loadave.c): Patch from Chris Hughes:
+ - fix load average on solaris.
+
+hardaker 4 Mar 99 09:38:28
+ - (remove-files, ece-snmpd.conf, fixproc.conf):
+ - removed ece specific config files from the repository.
+ - don't remove local/*.conf in the first place anymore.
+
+hardaker 4 Mar 99 09:46:37
+ - (hr_swinst.c): Patch from mslifcak@iss.net:
+ - When the agent is compiled with HAVE_LIBRPM set, yet no database
+ is found, agent will core...
+
+hardaker 4 Mar 99 13:18:47
+ - (acconfig.h, config.h.in, configure, configure.in): removed void check.
+
+mslifcak 4 Mar 99 15:13:00
+
+
+ (hr_proc.c, loadave.c) - fixed core on getloadavg in a different way
+
+mslifcak 4 Mar 99 15:25:53
+
+ (disk.c) - explicit braces to avoid ambiguous `else'
+
+mslifcak 4 Mar 99 15:29:24
+
+ (hr_disk.c) - conditionally use defined DKC disk types
+
+hardaker 4 Mar 99 15:45:02
+ - (util_funcs.c, util_funcs.h, example.c, sysORTable.c, ipfwacc.c,
+ disk.c, extensible.c, file.c, loadave.c, memory.c, proc.c, vmstat.c,
+ vmstat_freebsd2.c):
+ - create and use header_simple_table to replace checkmib().
+
+hardaker 4 Mar 99 16:14:16
+ - (README.smux): Patch from Nick Amato:
+ - update.
+
+hardaker 4 Mar 99 16:26:26
+ - (freebsd2.h): Patch from Nick Amato:
+ - fixes for duplicate defines.
+
+hardaker 4 Mar 99 16:32:16
+ - (mib2c): Update from Dave Shield.
+
+hardaker 4 Mar 99 16:50:16
+ - (util_funcs.c, dummy.c, example.c, wombat.c, tcp.c, hpux.c,
+ memory.c, alarm.c, snmp_api.c):
+ - misc fixes, -Wall mostly.
+
+mslifcak 4 Mar 99 17:00:50
+
+ (sysORTable.c) - remove static u_long long_return, for consistency.
+
+mslifcak 4 Mar 99 17:07:10
+
+ (solaris.h) - undo _SLASH_PROC_METHOD_ : another time
+
+mslifcak 4 Mar 99 17:50:29
+
+ Replace uses of bzero with memset, bcopy with memcpy.
+ Fix prototypes.
+
+mslifcak 4 Mar 99 18:11:37
+
+ (snmp_api.c) - expose snmp_free; snmp_pdu_add_variable returns ptr to var for
+ future improved error recovery.
+
+mslifcak 5 Mar 99 09:40:11
+
+ Fix Win32 version of gettimeofday : tv_usec was millisecs , return now = 0
+
+hardaker 5 Mar 99 10:11:29
+ - (mib2c, mib2c.conf): Patch from Dave Shield:
+ - the use of 'header_simple_table' rather than 'checkmib'
+ - explicit comparison with MATCH_FAILED
+ - don't set defaults for 'write_method' and 'var_len'
+ (since both 'header_generic' and 'checkmib' do this anyway)
+ - Use defined constants for variable initialisation in the
+ write routine (similarly in the mib2c.conf patch)
+ [This is one of my hobby-horses with our students, so I don't
+ see why "professional" programmers should be exempt!]
+
+ - Make proper use of the three-phase nature of SETs
+
+hardaker 5 Mar 99 10:21:25
+ - (FAQ): update from Dave: rearranging and cleaning.
+
+hardaker 5 Mar 99 10:42:40
+ - (snmp_agent.c): Patch from Dave Shield:
+ - switch COMMIT and ACTION phases.
+
+mslifcak 5 Mar 99 11:02:34
+
+ (tcp.c) - break out of infinite loop when klookup fails.
+
+hardaker 5 Mar 99 15:13:02
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - remove persistent storage info, since its not used this release.
+
+hardaker 5 Mar 99 15:31:52
+ - (snmp_impl.h): create UNDO
+
+hardaker 5 Mar 99 15:38:32
+ - (tkmib): update.
+
+hardaker 5 Mar 99 15:57:36
+ - (kernel_sunos5.c, wombat.c, hr_network.c, snmp_mib.h, system_mib.h,
+ disk.h, errormib.h, extensible.h, file.h, memory_solaris2.h, pass.h,
+ proc.h, registry.h, versioninfo.h):
+ - -Wall fixes, mostly init_() routines declaired in the appropriate .h files.
+
+hardaker 5 Mar 99 16:02:06
+ - (configure, configure.in): updated --help's module list.
+
+hardaker 5 Mar 99 16:10:30
+ - (vmstat.h): declair init_vmstat().
+
+hardaker 5 Mar 99 17:08:21
+ - (FAQ): reference AGENT document.
+
+hardaker 5 Mar 99 17:11:48
+ - (mibII/system.h): removed
+
+hardaker 5 Mar 99 17:19:14
+ - (FAQ, NEWS): final updates.
+
+
+
+-------------------------------------------------------------------------------
+
+Changes: V3.5.2 -> V3.5.3
+
+hardaker 12 Sep 98 09:02:37
+ - (snmp_api.c): Patch from Michael Slifcak:
+ - bug fix to check for NULL session pointer before using it.
+
+hardaker 20 Sep 98 11:47:17
+ - (snmp_agent.c): if a mib module returns an error > SNMP_GEN_ERR,
+ translate the error to SNMP_GEN_ERR for v1 requests.
+
+hardaker 21 Sep 98 11:13:19
+ - (snmp_vars.c): finally fixed the write_method's for creation problem.
+
+hardaker 25 Sep 98 16:53:31
+ - (EXAMPLE.conf.def): update.
+
+hardaker 25 Sep 98 17:02:39
+ - (configure, configure.in): perl eq -> test = (opps).
+
+hardaker 25 Sep 98 17:08:25
+ - (parse.c): Patch from Michael Slifcak:
+ - check for a null name.
+
+hardaker 25 Sep 98 17:42:10
+ - (parse.c): Patch from Joe Marzot:
+ - use a memset to zero out new pointers instead of doing it by hand.
+
+hardaker 28 Sep 98 13:09:06
+ - (interfaces.c): don't use a & on osf3 for arpcom.ac_enaddr.
+
+hardaker 28 Sep 98 13:09:45
+ - (snmp_api.c): typecast the default community string to (u_char *).
+
+hardaker 28 Sep 98 15:42:21
+ - (memory.c): /etc/swapinfo -> /usr/sbin/swapinfo for hpux10.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.5.1 -> V3.5.2
+
+hardaker 8 Sep 98 09:26:13
+ - (NEWS): update.
+
+hardaker 8 Sep 98 09:33:25
+ - (ChangeLog): update for 3.5.1.
+
+hardaker 8 Sep 98 09:35:55
+ version tag ( 3.5.1 )
+
+hardaker 9 Sep 98 09:45:24
+ - (Makefile.in): Put an @ sign in front of the last echo line.
+
+hardaker 9 Sep 98 09:46:35
+ - (memory.c, memory.h, memory_freebsd2.c, memory_freebsd2.h):
+ - Change all instances of USED -> AVAIL since thats really what
+ we're reporting.
+
+hardaker 9 Sep 98 09:50:22
+ - (memory.c, memory.h, memory_freebsd2.c, memory_freebsd2.h):
+ - correct work I stupidly made when tired.
+
+hardaker 9 Sep 98 11:00:44
+ - (NEWS): update for 3.5.2.
+
+marz 9 Sep 98 18:31:00
+ - (snmptrap.c, snmptest.c): add SOCK_ macros for win32 support
+
+-------------------------------------------------------------------------------
+
+Changes: V3.5 -> V3.5.1
+
+hardaker 22 Jun 98 09:16:32
+ - (main.c): Patch from Jerry G. DeLapp:
+ - commented out trailing #endif comment.
+
+hardaker 24 Jun 98 10:30:19
+ - (Makefile.in): man->html make specification.
+
+hardaker 24 Jun 98 11:08:41
+ - (UCD-SNMP-MIB.txt): Patch from Niels Baggesen:
+ - shutdown trap specifications.
+ - misc mib fixes.
+
+hardaker 26 Jun 98 10:42:32
+ - (disk.c): Patch from Michael Douglass:
+ - fix calculation of totaldisk by doing block division first to
+ protect against 32 bit overflows.
+
+hardaker 26 Jun 98 10:45:15
+ - (smux.c, snmp_bgp.c, snmp_ospf.c, snmp_rip2.c, snmp_rip2.h): Patch
+ from Niels Baggesen:
+ - Fix for new defines and proper header includes.
+
+hardaker 26 Jun 98 15:03:38
+ - (generic.h): put in a comment to keep compilers from complaining too much.
+
+hardaker 8 Jul 98 12:26:25
+ - (freebsd2.h): use _UTMP_PATH if available.
+
+hardaker 8 Jul 98 12:26:34
+ - (irix.h): define _KMEMUSER
+
+hardaker 8 Jul 98 12:27:12
+ - (win32.opt, libsnmp.dsp, libsnmp.plg, libsnmp.def, libsnmp_dll.plg,
+ snmpbulkwalk.dsp, snmpbulkwalk.plg, snmpget.dsp, snmpget.plg,
+ snmpgetnext.dsp, snmpgetnext.plg, snmpset.dsp, snmpset.plg,
+ snmpstatus.dsp, snmpstatus.plg, snmptranslate.dsp,
+ snmptranslate.plg, snmpwalk.dsp, snmpwalk.plg): Patch from Joe
+ Marzot:
+ - win32 update.
+
+hardaker 8 Jul 98 12:58:03
+ - (snmp_api.c): Patch from Joe Marzot:
+ - fix "number of retries" bug.
+ - remove odd timeout calculation code for retries > 3.
+hardaker 8 Jul 98 13:02:06
+ - (interfaces.c): make hp_interfaces structure static.
+
+hardaker 8 Jul 98 13:03:36
+ - (system.c): don't free env pointers that are created.
+
+hardaker 8 Jul 98 13:08:18
+ - (UCD-SNMP-MIB.txt): Patch from Niels Baggesen:
+ - fix for missing object identifier labels.
+
+hardaker 8 Jul 98 14:43:56
+ - (snmp_vars.c): include fixes.
+hardaker 8 Jul 98 14:44:34
+ - (pass.c): include sys/wait.h
+
+hardaker 8 Jul 98 14:44:41
+ - (versioninfo.c): include system.h
+
+hardaker 8 Jul 98 14:45:22
+ - (parse.c): include snmp_api.h
+
+hardaker 8 Jul 98 14:45:42
+ - (snmp_api.c): include fixes.
+
+hardaker 15 Jul 98 15:46:28
+ - (sedscript.in): using_module changes.
+
+hardaker 15 Jul 98 15:46:55
+ - (memory.h): MEMSWAPMINIMUM wasn't being used.
+
+hardaker 17 Jul 98 13:11:10
+ - (UCD-SNMP-MIB.inc, UCD-SNMP-MIB.txt):
+ - created smicng input file.
+ - fixed the UCD-SNMP mib to deal with most smic errors.
+
+hardaker 17 Jul 98 13:22:32
+ - (RFC-1215.txt): created an empty mib module for importing of TRAP-TYPE.
+
+hardaker 17 Jul 98 16:59:51
+ - (*): update for 3.5.1.
+
+hardaker 20 Jul 98 17:14:21
+ - (snmpcheck.def): work around for new multi-depth mib tables..
+
+hardaker 22 Jul 98 15:35:07
+ - (mib.c): don't change running environment variables with strtok.
+
+hardaker 22 Jul 98 16:23:45
+ - (Makefile.in, sedscript.in): fix sedscript includes.
+
+hardaker 24 Jul 98 09:25:33
+ - (disk.c): increment index by 1 so it doesn't start at 0.
+
+hardaker 24 Jul 98 10:02:14
+ - (snmpd.conf.5.def): various documenation updates and notes.
+
+hardaker 24 Jul 98 10:02:25
+ - (snmptranslate.1): nroff error.
+
+hardaker 24 Jul 98 10:25:44
+ - (snmptrapd.8): brought up to date.
+
+hardaker 24 Jul 98 12:10:07
+ - (snmp.c): include sys/select.h for AIX.
+
+hardaker 24 Jul 98 12:24:22
+ - (acl.h, asn1.h, md5.h, mib.h, parse.h, snmp.h, snmp_api.h,
+ snmp_client.h, snmp_impl.h, vacm.h, view.h):
+ - protect against multiple inclusions.
+
+hardaker 29 Jul 98 13:44:22
+ - (Makefile.in): make install should do a real make all first.
+
+hardaker 12 Aug 98 15:57:18
+ - (snmp_vars.c): ifdef fixes for v2part modules.
+
+hardaker 12 Aug 98 15:57:42
+ - (extensible.c, proc.c): fixit problems with array index wrong.
+
+hardaker 12 Aug 98 15:57:52
+ - (libsnmp.def): find_module added.
+
+hardaker 12 Aug 98 16:05:28
+ - (configure, configure.in):
+ - libwrap command line fixes.
+ - --with-ldflags command line option created.
+
+hardaker 12 Aug 98 16:55:32
+ - (mib_api.3, snmpd.1.def, variables.5): updates to remove mib.txt references.
+
+hardaker 12 Aug 98 16:58:11
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - don't include libraries that aren't needed if gethostbyname isn't in one.
+
+hardaker 12 Aug 98 16:59:50
+ - (snmp_impl.h): Patch from Michael Slifcak:
+ - fix the ERROR_MSG() macro to use snmp_set_detail.
+
+hardaker 14 Aug 98 08:21:44
+ - (snmp_parse_args.c, snmptranslate.c): usage fixes and -m/-M to snmptranslate.
+
+hardaker 14 Aug 98 08:42:49
+ - (auto_nlist.c): fix for stupid aix kernels.
+
+hardaker 14 Aug 98 08:44:07
+ - (ucd_snmp.h, memory_freebsd2.c, vmstat_freebsd2.c): Patch from Jonas Olsson:
+ - make the memory and vmstat module work under freebsd2.
+
+hardaker 14 Aug 98 08:44:07
+ file memory_freebsd2.c was initially added on branch Ext-3-5-patches.
+
+hardaker 14 Aug 98 08:44:07
+ file vmstat_freebsd2.c was initially added on branch Ext-3-5-patches.
+
+hardaker 14 Aug 98 08:44:29
+ - (README): Added two new names to the thankyou list.
+
+hardaker 14 Aug 98 08:44:37
+ - (sedscript.in): correct include files.
+
+hardaker 14 Aug 98 08:44:52
+ - (Makefile.in): CPP needs to check agent/mibgroup for headers.
+
+hardaker 14 Aug 98 08:52:32
+ - (mib.c, parse.c): Patch from Dave Shield:
+ - adopt unknown children into the correct place if IMPORTS are screwed up.
+
+hardaker 14 Aug 98 09:32:45
+ - (snmptranslate.c): Patch from James H. Young:
+ - usage output clean up.
+
+hardaker 14 Aug 98 10:13:13
+ - (COPYING): copyright change.
+
+hardaker 14 Aug 98 10:14:06
+ - (parse.c): Patch from Niels Baggesen:
+ - Malloc -> xmalloc.
+ - parser changes.
+
+hardaker 14 Aug 98 10:14:59
+ - (at.c): fixes for linux.
+
+hardaker 31 Aug 98 13:03:02
+ - (interfaces.c): missing return on ifInErrors results.
+
+hardaker 31 Aug 98 13:32:43
+ - (snmptrapd.c): add a blank line to the end of the trapd output for parsing.
+
+hardaker 31 Aug 98 16:10:25
+ - (snmp_vars.c): in_a_view(): create new function, and use it.
+
+hardaker 31 Aug 98 16:10:50
+ - (snmp_agent.c, snmp_impl.h): fix read/write checks.
+
+hardaker 31 Aug 98 13:03:02
+ - (interfaces.c): missing return on ifInErrors results.
+
+hardaker 31 Aug 98 13:32:43
+ - (snmptrapd.c): add a blank line to the end of the trapd output for parsing.
+
+hardaker 31 Aug 98 16:10:25
+ - (snmp_vars.c): in_a_view(): create new function, and use it.
+
+hardaker 31 Aug 98 16:10:50
+ - (snmp_agent.c, snmp_impl.h): fix read/write checks.
+
+hardaker 31 Aug 98 16:37:04
+ - (ChangeLog, NEWS): update for 3.5.1.
+
+hardaker 31 Aug 98 16:37:15
+ version tag ( 3.5.1.pre1 )
+
+hardaker 2 Sep 98 10:55:52
+ - (configure, configure.in, read_config.c, snmp2p.c, snmp_agent.c,
+ snmp_vars.c, snmpd.c, snmpd.h, util_funcs.c, interfaces.c, system.h,
+ tcp.c, smux.c, snmp_bgp.c, snmp_bgp.h, snmp_ospf.c, snmp_ospf.h,
+ snmp_rip2.c, snmp_rip2.h, extensible.c, loadave.c,
+ snmp_parse_args.c, snmpdelta.c, snmptranslate.c, snmptrap.c,
+ snmptrapd.c, inet.c, main.c, netstat.h, mib_api.3, snmp_api.3,
+ snmpd.1.def, freebsd.h, freebsd2.h, netbsd.h, asn1.h, mib.c,
+ parse.c, parse.h, snmp_api.c, snmp_api.h, snmp_client.c): Patch from
+ Niels Baggesen:
+ - prototypes, as usual (when is everybody starting to use -Wall
+ -Wstrict-prototypes ....)
+ - snmpd send an enterprise specific trap when it terminates
+ - possibility for sending v2c traps (or informs), via trap2sink directive
+ - fixes to snmplib and snmptrapd for bugs uncovered when snmpd sends
+ an INFORM instead of a TRAP
+ - -m and -M option for snmptrapd
+ - -D option for snmptranslate
+ - fixes to configure to correctly call ALL module init functions
+ - major rework of tcp.c, for netbsd. I hope this is OK now, I havent had
+ time to test it on all platforms yet - but till friday :-)
+ - snmpnetstat prints udp socket table
+ - some CMU_COMPATIBLE stuff
+ - man page fixes, with an include list that works!
+
+hardaker 2 Sep 98 10:58:10
+ - (tcp.c): Patch from Dave Shield:
+ - Combine the two (almost) identical non-solaris cases
+ - Add support for the missing Linux entries (InErrs/OutRsts)
+ - Add support for the missing Solaris entry (OutRsts)
+
+hardaker 2 Sep 98 11:03:33
+ - (tcp.c): reverse Dave's changes since they conflict with Niels'.
+
+hardaker 2 Sep 98 12:19:03
+ - (extensible.c, proc.c): use correct name index for lookups on writes.
+
+hardaker 2 Sep 98 12:19:33
+ - (snmp_agent.c): check to make sure operation is not a SET when
+ returning an error code such as noSuchName.
+
+hardaker 2 Sep 98 14:04:42
+ - (configure, configure.in): don't include modules not requested even
+ if required by another module.
+
+hardaker 2 Sep 98 14:10:53
+ version tag ( 3.5.1.pre2 )
+
+hardaker 2 Sep 98 18:43:30
+ - (TODO): added security checks.
+
+nba 3 Sep 98 14:29:03
+ - (fixproc): added comment to test CVS.
+
+hardaker 4 Sep 98 10:09:47
+ - (interfaces.c): fix for sgi's.
+
+hardaker 4 Sep 98 14:14:19
+ - (configure, configure.in, Makefile.in, Makefile.in):
+ - fix to allow non-source directory builds.
+
+hardaker 7 Sep 98 10:10:05
+ - (loadave.c): Patch from Niels Baggesen:
+ - ifdef re-ordering fixes for alpha/linux.
+
+hardaker 7 Sep 98 10:47:00
+ - (proc.c): Patch from Michael Slifcak:
+ - solaris 2.6 fixes.
+
+hardaker 7 Sep 98 10:48:09
+ - (asn1.c): Patch from Michael Slifcak:
+ - Catch subidentifier correctly.
+
+hardaker 7 Sep 98 10:49:08
+ - (asn1.h): remove __P() definition.
+
+hardaker 7 Sep 98 10:49:53
+ - (mib.c): Patch from Michael Slifcak:
+ - malloc corrections for ENV vars..
+
+hardaker 7 Sep 98 10:51:22
+ - (parse.c): Patch from Michael Slifcak:
+ - protect against multiple init_mib_internal() calls.
+
+hardaker 7 Sep 98 10:53:11
+ - (system.c): Patch from Michael Slifcak:
+ - exit -> return on win32 system routines.
+
+hardaker 7 Sep 98 10:55:51
+ - (snmp_api.c): Patch from Michael Slifcak:
+ - NULL return by malloc protected.
+
+hardaker 7 Sep 98 12:17:36
+ - (snmpd.conf.5.def): Patch from Niels Baggesen:
+ - better description of the view mask.
+
+hardaker 7 Sep 98 12:27:42
+ - (memory_freebsd2.h, vmstat_freebsd2.h): created from memory.h and vmstat.h
+
+hardaker 7 Sep 98 12:27:42
+ file memory_freebsd2.h was initially added on branch Ext-3-5-patches.
+
+hardaker 7 Sep 98 12:27:42
+ file vmstat_freebsd2.h was initially added on branch Ext-3-5-patches.
+
+hardaker 7 Sep 98 12:47:37
+ - (parse.c): include snmp_api.h for snmp_get_do_debugging().
+
+hardaker 7 Sep 98 12:54:16
+ - (snmp_api.c): Patch from Michael Slifcak:
+ - check malloc calls more carefully.
+ - misc bug fixes.
+
+hardaker 7 Sep 98 13:15:26
+ - (Makefile.in): install config.h as $(includedir)/ucd-snmp-config.h.
+
+hardaker 7 Sep 98 13:21:18
+ - (memory.c, memory.h):
+ - MEMUSEDREAL -> MEMAVAILREAL (typedef renaming to match functionality).
+
+hardaker 7 Sep 98 14:06:21
+ - (tcp.c): back out Niels' changes since they broke other architectures.
+
+hardaker 7 Sep 98 14:19:24
+ - (Makefile.in(s)): make depends.
+
+hardaker 7 Sep 98 16:39:59
+ - (icmp.c, interfaces.c, ip.c, tcp.c): 64bit long return clean ups.
+
+marz 7 Sep 98 19:01:01
+ update headers for win32, add return to main
+
+marz 7 Sep 98 19:02:01
+ update headers for win32, add return to main,fix win32 compile error w/ non integralswitch case
+
+marz 7 Sep 98 19:03:33
+ update headers for win32, add return to main, resolve conflict w/ std lib log function
+
+marz 7 Sep 98 19:30:11
+ rename and static link debug targets, dll to bin dir, added snmptest, snmptrap, snmpdelta projects
+
+marz 7 Sep 98 19:42:35
+ file snmpdelta.dsp was initially added on branch Ext-3-5-patches.
+
+marz 7 Sep 98 19:42:35
+ file snmpdelta.plg was initially added on branch Ext-3-5-patches.
+
+marz 7 Sep 98 19:42:35
+ file snmptest.dsp was initially added on branch Ext-3-5-patches.
+
+marz 7 Sep 98 19:42:35
+ file snmptest.plg was initially added on branch Ext-3-5-patches.
+
+marz 7 Sep 98 19:42:35
+ file snmptrap.dsp was initially added on branch Ext-3-5-patches.
+
+marz 7 Sep 98 19:42:35
+ file snmptrap.plg was initially added on branch Ext-3-5-patches.
+
+marz 7 Sep 98 19:42:35
+ rename and static link debug targets, dll to bin dir, added snmptest, snmptrap, snmpdelta projects
+
+hardaker 8 Sep 98 09:26:13
+ - (NEWS): update.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.4 -> V3.5
+
+hardaker 24 May 98 15:22:21
+ - (FAQ): update to change a few things.
+
+hardaker 24 May 98 15:22:38
+ - (NEWS): change vacm news wording.
+
+hardaker 24 May 98 15:22:57
+ - (ip.c): Patch from Niels Baggesen:
+ - fix for netbsd < 1.3.
+
+hardaker 29 May 98 10:14:32
+ - (at.c): Patch from Chris Smith: fix for irix.
+
+hardaker 29 May 98 10:24:54
+ - (snmp_api.c, snmp_impl.h): Patch from Joe Marzot:
+ - fix community name length problems and increase size.
+
+hardaker 29 May 98 11:26:47
+ - (configure.in): patch from Niels: include sys/socket in if_mtu test.
+
+hardaker 29 May 98 11:27:59
+ - (configure): make of configure.
+
+hardaker 29 May 98 11:34:53
+ - (configure, configure.in, Makefile.in):
+ - Add a dependancy line for snmp_vars.o for all the module includes.
+
+hardaker 29 May 98 15:20:53
+ - (TODO): winSNMP mention.
+
+hardaker 29 May 98 15:21:13
+ - (snmp_parse_args.c): add ability to specify mib information on the cmd line.
+
+hardaker 29 May 98 16:21:08
+ - (configure, configure.in, agent/mibgroup/*):
+ - moved most mibgroup pieces into relevent sub-directories.
+ - changed all header file and #ifdef USING_* lines to reflect this.
+
+hardaker 29 May 98 16:21:51
+ - (snmp_impl.h): change pdu version from long to int.
+
+hardaker 31 May 98 17:55:45
+ - (asn1.c, asn1.h, int64.c, int64.h, mib.c, snmp.c, snmp_api.c,
+ snmp_api.h, snmp_impl.h):
+ - implement special data types via opaques: float, double, int64, uint64s.
+
+hardaker 31 May 98 17:56:07
+ - (snmpset.c): enable setting of opaque floats, doubles, int64s, uint64s.
+
+hardaker 31 May 98 17:56:55
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - make it possible not to use opaque special types with new cmd line flag.
+
+hardaker 2 Jun 98 14:23:15
+ - (auto_nlist.c, auto_nlist.h, kernel.c, snmp_agent.c, snmpd.c,
+ hr_device.c, hr_disk.c, hr_filesys.c, hr_network.c, hr_other.c,
+ hr_partition.c, hr_print.c, hr_proc.c, hr_storage.c, hr_swinst.c,
+ hr_swrun.c, hr_system.c, hr_utils.c, at.c, interfaces.c,
+ var_route.c, snmp_parse_args.c, snmpdelta.c, snmptable.c,
+ snmptranslate.c, snmptrapd.c, freebsd2.h, hpux.h, linux.h, netbsd.h,
+ solaris.h, sysv.h, asn1.c, mib.c, parse.c, parse.h, snmp_auth.c,
+ snmp_impl.h): Patch from Niels Baggensen:
+ - make host resources work under NetBSD, FreeBSD, Solaris and Linux.
+ - SunOS4 almost works.
+ - Add -s/-S to command line options for printing of shorter oids.
+ - numerous bug fixes.
+
+hardaker 3 Jun 98 10:51:10
+ - (smux.c, smux.h, smux_gated.h, snmp_bgp.c, snmp_bgp.h, snmp_ospf.c,
+ snmp_ospf.h, snmp_rip2.c, snmp_rip2.h, smux.c, smux.h, snmp_bgp.c,
+ snmp_bgp.h, snmp_ospf.c, snmp_ospf.h, snmp_rip2.c, snmp_rip2.h):
+ - moved smux stuff into a smux sub-directory.
+
+hardaker 3 Jun 98 10:58:15
+ - (ipfwacc.c, ipfwacc.h, IPFWACC-MIB.txt, UCD-SNMP-MIB.txt):
+ - moved ipfwacc to ucdavis.13 and removed ^Ms and some blank lines.
+
+hardaker 3 Jun 98 10:58:44
+ - (INSTALL): mention ipfwacc
+
+hardaker 3 Jun 98 10:58:59
+ - (README): mention Cristian Estan in the coders list.
+
+hardaker 3 Jun 98 11:06:47
+ - (example.c, example.h, dlmod.c, dlmod.h): Patch from Eugene Polovnikov:
+ - implement a dynamic loading module for loading shared object mib modules.
+
+hardaker 3 Jun 98 11:10:48
+ - (README, example.c, example.h, wombat.c, wombat.h, example.c,
+ example.h, wombat.c, wombat.h):
+ - moved wombat and example to examples/ directory.
+
+hardaker 3 Jun 98 11:27:27
+ - (snmp_agent.c, snmpd.c): include mibII/snmp_mib.h.
+
+hardaker 3 Jun 98 11:29:04
+ - (mib.c): missed a needed OPAQUE_SPECIAL_TYPES ifdef.
+
+hardaker 3 Jun 98 12:17:00
+ - (snmp_agent.c, snmp_api.c, snmp_auth.c, snmp_impl.h):
+ - fix pdu->versions to be all ints.
+
+hardaker 3 Jun 98 13:39:12
+ - (configure, configure.in): New flags:
+ - --with-cc=CC
+ - --with-cflags=CFLAGS
+
+hardaker 3 Jun 98 13:43:47
+ - (config.h.in, configure, configure.in, snmptrapd.c):
+ - check for getdtablesize and use a generic if not available.
+
+hardaker 3 Jun 98 13:52:28
+ - (config.h.in, configure, configure.in, freebsd2.h):
+ - move configurable defines to configure rather than in freebsd2.h.
+
+hardaker 3 Jun 98 13:55:40
+ - (i386.h, i586.h, i686.h): removed these (unused) headers.
+
+hardaker 3 Jun 98 14:02:34
+ - (configure, configure.in): fix new --with-cc and --with-cflags arguments.
+
+hardaker 3 Jun 98 14:21:10
+ - (hr_disk.c, hr_swinst.c, hr_swrun.c, hr_system.c, snmpset.c, asn1.h,
+ int64.c, int64.h, mib.c, snmp_api.c):
+ - -Wall fixes.
+
+hardaker 3 Jun 98 14:23:14
+ - (Makefile.in's): make depend.
+
+hardaker 3 Jun 98 14:24:58
+ - (Makefile.in): read_config.o is mibmodule header dependant too.
+
+hardaker 3 Jun 98 14:26:10
+ version tag ( 3.5.pre1 )
+
+hardaker 5 Jun 98 10:52:11
+ - (configure, configure.in): Patch from Niels Baggesen:
+ - test for setenv.
+
+hardaker 5 Jun 98 10:52:40
+ - (maketarget): Patch from Niels Baggesen:
+ - support for larger tree depths.
+
+hardaker 5 Jun 98 10:54:31
+ - (asn1.c, mib.c, parse.h, system.c, system.h): Patch from Niels Baggesen:
+ - MIB_ACCESS define changes.
+ - setenv implementation.
+ - ifdef wrappers for OPAQUE_SPECIAL_TYPES.
+
+hardaker 8 Jun 98 10:50:12
+ - (FAQ): url type splitting.
+
+hardaker 8 Jun 98 12:34:09
+ - (Makefile.in): create a .c -> .o rule to make sure and place the
+ object files in the appropriate subdirectories.
+
+hardaker 8 Jun 98 13:59:08
+ - (README): Added Eugene's name.
+
+hardaker 8 Jun 98 13:59:25
+ - (snmpd.conf.5.def): update rfc # for vacm reference.
+
+hardaker 8 Jun 98 14:12:37
+ - (Makefile.in): Patch from Joe Marzot:
+ - remove more config created headers on make configclean.
+
+hardaker 8 Jun 98 14:16:26
+ - (libsnmp.def): Patch from Joe Marzot: w32 update.
+
+hardaker 8 Jun 98 14:22:50
+ - (parse.c, parse.h, snmp_api.c, snmp_api.h, snmp_client.c): Patch
+ from Joe Marzot:
+ - async stuff added.
+ - get_tc added.
+ - better comments in some places.
+
+hardaker 8 Jun 98 14:55:53
+ - (snmp_api.c): undid redo of comment of gettimeofday().
+
+hardaker 10 Jun 98 07:11:44
+ - (config.h.in): have_setenv.
+
+hardaker 10 Jun 98 08:53:53
+ - (Makefile.in, snmp2p.c, snmpd.c): Patch from Dave Shield:
+ - starts to separate out the historic SNMPv2 stuff.
+ - does a bit of 'code tidying'.
+ - starts to move towards port-specific handlers.
+
+hardaker 10 Jun 98 14:15:47
+ version tag ( 3.5.pre2 )
+
+hardaker 10 Jun 98 15:30:59
+ - (TODO): added Dave's list.
+
+hardaker 10 Jun 98 15:31:12
+ - (NEWS): update.
+
+hardaker 10 Jun 98 15:47:59
+ - (snmp2p.c, snmpd.c, snmpd.h): -Wall cleanups.
+
+hardaker 12 Jun 98 08:52:28
+ - (EXAMPLE.conf.def, FAQ): Patch from Dave Shield:
+ - update for VACM stuff.
+
+hardaker 12 Jun 98 10:12:27
+ - (EXAMPLE.conf.def): show vacm example for public/private from anywhere.
+
+hardaker 12 Jun 98 10:12:40
+ - (NEWS): minor update.
+
+hardaker 12 Jun 98 13:13:12
+ - (snmp_api.c): trap types were int's not longs (failed under 64bit arch).
+
+hardaker 12 Jun 98 13:13:27
+ - (parse.c): function name typo.
+
+hardaker 12 Jun 98 13:13:39
+ - (win32/config.h): don't have setenv.
+
+hardaker 12 Jun 98 13:13:57
+ - (libsnmp.def): add setenv to the list.
+
+hardaker 12 Jun 98 13:43:41
+ - (NEWS): 64bit fix mentioned.
+
+hardaker 12 Jun 98 13:48:21
+ - (kernel.c): don't print klread errors unless in debugging mode.
+
+hardaker 12 Jun 98 15:17:47
+ - (ipfwacc.h, IPFWACC-MIB.txt, UCD-SNMP-MIB.txt):
+ - create and use a ucdExperimental section for the ipfwacc mib till
+ it stabilizes.
+
+hardaker 17 Jun 98 08:08:23
+ - (snmp2p.c, snmpd.c, snmpd.h): Patch from Niels Baggesen:
+ - misc type fixes.
+
+hardaker 17 Jun 98 08:08:58
+ - (snmpdelta.c): usage() update.
+
+hardaker 17 Jun 98 08:10:02
+ - (Makefile.in, snmpbulkwalk.1, snmpcmd.1, snmpdelta.1, snmpget.1,
+ snmpgetnext.1, snmpset.1, snmpstatus.1, snmptable.1, snmptrap.1,
+ snmpwalk.1): Patch from Niels Baggesen:
+ - documentation cleanup and centralization of common options.
+
+hardaker 17 Jun 98 08:10:54
+ - (asn1.c): Patch from Niels Baggesen:
+ - bcopy -> memcpy.
+
+hardaker 17 Jun 98 08:11:22
+ - (mib.h): Patch from Niels Baggesen:
+ - remove 2nd init_mib() prototype.
+
+hardaker 17 Jun 98 08:21:53
+ - (README, AddModuleForDummies.txt, DUMMY-MIB.txt, dummy.c, dummy.h):
+ Patch from Jakob Ellerstedt:
+ - mib module documentation and example for dummies.
+
+hardaker 17 Jun 98 15:27:13
+ - (README): mention dummy group.
+
+hardaker 19 Jun 98 08:41:00
+ - (FAQ): update from Dave Shield: not found modules with configure?.
+
+hardaker 19 Jun 98 08:46:31
+ - (configure, configure.in): warn BSDI users against /usr/ucb/cc.
+
+hardaker 19 Jun 98 08:58:05
+ - (EXAMPLE.conf.def): Patch from Cristian Estan:
+ - example output corrections.
+
+hardaker 19 Jun 98 08:59:53
+ - (Makefile.in): Patch from Cristian Estan:
+ - install IPFWACC mib.
+
+hardaker 19 Jun 98 12:03:48
+ - (snmp_vars.c): fix register_mib() to init pointers to null.
+
+hardaker 19 Jun 98 12:50:55
+ - (util_funcs.c): fix checkmib() in case we get called on a get when
+ we really shouldn't (bad artifact of new tree structure).
+
+hardaker 19 Jun 98 12:53:22
+ - (snmp_vars.c): memset to 0 the entire subtree struct.
+
+hardaker 19 Jun 98 13:01:47
+ - (Makefile.in): make depend.
+
+hardaker 19 Jun 98 13:12:55
+ - (NEWS): Last update for 3.5.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.3 -> V3.4
+
+hardaker 1 Dec 97 12:44:24
+ - (*): 3.3.1 branch merged into main development branch.
+
+hardaker 5 Dec 97 08:46:50
+ - (snmp_api.h): Patch from Niels Baggesen:
+ - make trap variables long's not ints for 64bit machines to match
+ asn_build_int functions.
+
+hardaker 5 Dec 97 11:58:52
+ - (apps/*.c): support random access requests on all apps via -R switch.
+
+hardaker 5 Dec 97 14:30:06
+ - (configure, configure.in): warn instead of error for config_require macro's.
+
+hardaker 15 Dec 97 11:08:01
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - new macro to change default MIBS when modules are compiled:
+ config_add_mib().
+
+hardaker 15 Dec 97 11:08:19
+ - (host.h, ucd_snmp.h, v2party.h):
+ - use config_add_mib().
+
+hardaker 15 Dec 97 11:14:18
+ - (at.c, example.c, hr_proc.c, hr_storage.c, hr_swrun.c, hr_system.c,
+ icmp.c, interfaces.c, interfaces.h, ip.c, loadave.c, memory.c,
+ route_write.c, tcp.c, udp.c, var_route.c, wombat.c, common_header.h):
+ - Patch from Simon Leinen to improve irix 6.2 support.
+
+hardaker 15 Dec 97 15:07:26
+ - (UCD-fields, oid_to_sym.in, oid_to_type.in): Patch from TANAKA Takashi:
+ - support more OS types in the ov/ directory files.
+ - mistake: bsdi was getting defined as irix.
+ - don't core dump on -v without any arguments.
+
+hardaker 15 Dec 97 15:07:59
+ - (UCD-fields, oid_to_sym.in, oid_to_type.in, snmp_parse_args.c, acconfig.h):
+ - Patch from TANAKA Takashi:
+ - support more OS types in the ov/ directory files.
+ - mistake: bsdi was getting defined as irix.
+ - don't core dump on -v without any arguments.
+
+hardaker 23 Dec 97 11:20:04
+ - (hr_swrun.c): Correct a non-casted malloc.
+
+hardaker 23 Dec 97 11:33:59
+ - (hr_filesys.c): Solaris specific fixes.
+
+hardaker 23 Dec 97 11:35:26
+ - (acconfig.h, config.h.in, sedscript.in): BSDI definition fixes.
+
+hardaker 23 Dec 97 11:41:49
+ - (config.h.in, configure, configure.in): Patch from Johannes Grosen:
+ - fix non-existent nlist.h problems under linux redhat 5.0.
+
+hardaker 23 Dec 97 11:42:28
+ - (mibgroup/*.c, common_header.h): Patch from Johannes Grosen:
+ - fix non-existent nlist.h problems under linux redhat 5.0.
+
+hardaker 23 Dec 97 11:42:39
+ - (snmptrap.c): Patch from Johannes Grosen:
+ - fix non-existent nlist.h problems under linux redhat 5.0.
+
+hardaker 23 Dec 97 11:42:54
+ - (snmplib/system.c): Patch from Johannes Grosen:
+ - fix non-existent nlist.h problems under linux redhat 5.0.
+
+hardaker 23 Dec 97 11:46:08
+ - (hpux.c): #ifdef'ed out unused writeHP function.
+
+hardaker 23 Dec 97 12:32:21
+ - (snmptrapd.c): Patch from Ted Rule:
+ - Use syslog option LOG_PID on startup.
+ - fork if syslog enabled.
+ - Enable logging to other syslog facilities.
+ - print all trap data to a single syslog line.
+
+hardaker 23 Dec 97 12:48:31
+ - (snmptrapd.c):
+ - Change -f flag to -l and make -f no-fork.
+ - fix patch which munged ability to generate both -P and -s simultaneously.
+
+hardaker 23 Dec 97 14:40:36
+ - (README): Add Ted Rule to coders list.
+
+hardaker 23 Dec 97 14:42:47
+ - (*): Turn all debugging routines into library calls that can be
+ turned on and off at run time.
+ - DEBUGP() is now a typical printf style function and is used everywhere.
+ - void snmp_set_do_debugging(int).
+ - int snmp_get_do_debugging().
+
+hardaker 23 Dec 97 14:44:38
+ - (snmpd.1.def, snmptrapd.8): debugging flag additions.
+
+hardaker 23 Dec 97 14:47:08
+ - (at.c, icmp.c, interfaces.c, ip.c, snmp_mib.c, system.c, tcp.c, udp.c):
+ - Patch from Dave Shield to break up common_header.h.
+
+hardaker 23 Dec 97 15:27:54
+ - (at.c, at.h, host_res.h, icmp.h, interfaces.c, interfaces.h, ip.h,
+ tcp.c, tcp.h, udp.c, udp.h, read_config.c, snmp_vars.c):
+ - clean up required headers for linux.
+
+hardaker 23 Dec 97 15:56:18
+ - (versioninfo.c, versioninfo.h): Create a mib variable to set/report
+ if debugging is on or off.
+
+hardaker 23 Dec 97 15:59:03
+ - (UCD-SNMP-MIB.txt): Create a mib variable to set/report if debugging
+ is on or off.
+
+hardaker 23 Dec 97 16:30:47
+ version tag ( 3.4.pre1 )
+
+hardaker 29 Dec 97 09:37:06
+ - (tkmib): First implementation.
+
+hardaker 30 Dec 97 14:00:03
+ - (tkmib):
+ - new command: table to display snmptables as a table.
+ - misc...
+
+hardaker 30 Dec 97 17:01:57
+ - (tkmib): Create a graphing widget.
+
+hardaker 5 Jan 98 13:27:38
+ - (mib_api.3): change "all" to "ALL".
+
+hardaker 5 Jan 98 13:28:00
+ - (mib.c, parse.c, parse.h): add a find_module() routine.
+
+hardaker 5 Jan 98 13:28:22
+ - (snmptranslate.c): put init_mib back in place (opps).
+
+hardaker 5 Jan 98 13:28:42
+ - (TODO): snmpv3
+
+hardaker 5 Jan 98 16:29:39
+ - (asn1.c): Patch from Niels Baggesen:
+ - fix asn1_build_objid.
+
+hardaker 5 Jan 98 17:33:07
+ - (parse.c): swap args to merge_anon_children().
+
+hardaker 12 Jan 98 09:14:54
+ - (parse.c): Patch from Dave Shield: fix anon_children invalid memory access.
+
+hardaker 12 Jan 98 09:18:50
+ - (mib_api.3, snmp_api.3): Patch from Niels Baggesen:
+ - doc update to reflect moved headers.
+
+hardaker 12 Jan 98 09:19:10
+ - (Makefile.in): Patch from Niels Baggesen: link directly to lib.
+
+hardaker 12 Jan 98 09:19:47
+ - (Makefile.in, snmpbulkwalk.c, snmpdelta.c, snmpget.c, snmpgetnext.c,
+ snmpset.c, snmpstatus.c, snmptable.c, snmptest.c, snmptrap.c,
+ snmptrapd.c, snmpwalk.c): Patch from Niels Baggesen:
+ - remove unused headers.
+ - snmp_perror changes.
+
+hardaker 12 Jan 98 09:21:56
+ - (alarm.c, at.c, context_vars.c, event.c, hr_device.c, hr_filesys.c,
+ hr_partition.c, hr_storage.c, hr_swinst.c, hr_swrun.c, icmp.c,
+ interfaces.c, ip.c, proc.c, system.c, tcp.c, udp.c, var_route.c):
+ Patch from Niels Baggesen:
+ - Fix headers for FreeBSD and NetBSD.
+
+hardaker 12 Jan 98 09:40:36
+ - (FAQ, INSTALL, Makefile.in): Patch from Niels Baggesen:
+ - Documentation update to fix paths from recent changes.
+
+hardaker 12 Jan 98 09:41:38
+ - (read_config.c, snmp_vars.c, snmpd.c): Patch from Niels Baggesen:
+ - header fixes.
+ - snmp_perror usage.
+
+hardaker 12 Jan 98 09:44:51
+ - (asn1.c, mib.c, snmp_api.h, snmp_impl.h, system.h): Patch from Niels
+ Baggesen:
+ - header changes and boolean check corrections.
+
+hardaker 12 Jan 98 09:51:27
+ - (parse.c): Undid anon-children change.
+
+hardaker 12 Jan 98 09:56:14
+ - (kernel_sunos5.c): Patch from Niels Baggesen:
+ - increase buffer size to increase max interfaces reported on Solaris.
+
+hardaker 16 Jan 98 09:44:56
+ - (snmpd.c): Patch from Sheshadri Yagati:
+ - signal a trap (2) when the agent is shut down.
+
+hardaker 21 Jan 98 11:08:39
+ - (COPYING): update.
+
+hardaker 21 Jan 98 11:12:01
+ - (*/Makefile.in, Makefile.top, acconfig.h, config.h.in, configure,
+ configure.in):
+ - begin support for creating and using shared libraries.
+ - all Makefiles now include a Makefile.top for easier future global changes.
+
+hardaker 21 Jan 98 11:12:22
+ - (read_config.c, snmp_agent.c, snmp_vars.c, snmpd.c):
+ - include struct.h explicitly.
+
+hardaker 21 Jan 98 11:12:34
+ - (disk.c, errormib.c, extensible.c, interfaces.c, loadave.c,
+ memory.c, pass.c, proc.c, system.c, util_funcs.c, var_route.c,
+ versioninfo.c):
+ - include struct.h explicitly.
+
+hardaker 21 Jan 98 17:33:24
+ - (Makefile.top, configure, configure.in, */Makefile.in):
+ - Do a better version of shlib support. Should be useable now at least.
+
+hardaker 21 Jan 98 22:05:44
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - create m/ and s/ directories and use them for supplemental config
+ include files based on the config.guess output.
+
+hardaker 23 Jan 98 08:30:35
+ - (memory.c): Patch from Niels Baggesen:
+ - don't close file descriptor in linux's FILE_TO_BUF macro.
+
+hardaker 23 Jan 98 11:19:12
+ - (generic.h, i386.h, i586.h, i686.h): m/*.h file beginnings.
+
+hardaker 23 Jan 98 11:19:33
+ - (bsd.h, generic.h, linux.h, sysv.h): s/* beginnings.
+
+hardaker 23 Jan 98 16:12:02
+ - (read_config.c, read_config.h, snmp_vars.c, snmp_vars.h,
+ extensible.c, pass.c):
+ - create new functions:
+ - register_subtree()
+ - register_mib()
+ - unregister_mib().
+ - get rid of read_config special stuff for extensibility and put it
+ in their own submodules which now call register_mib().
+
+hardaker 23 Jan 98 16:14:20
+ - (registry.[ch], UCD-SNMP-MIB.txt):
+ - create a new table at ucdavis.103 to display registered mibs.
+
+hardaker 23 Jan 98 16:15:05
+ - (at.c, disk.c, host_res.h, hr_other.h, icmp.c, interfaces.c, ip.c,
+ snmp_mib.c, system.c, tcp.c, ucd_snmp.h, udp.c, versioninfo.c):
+ - #include "snmp_api.h"
+
+hardaker 23 Jan 98 16:34:43
+ - (configure, configure.in, snmp_vars.c, snmp_vars.h, var_struct.h,
+ extensible.c, pass.c, registry.c, registry.h, UCD-SNMP-MIB.txt):
+ - make the mib registry record and display a mib module name as well.
+
+hardaker 30 Jan 98 08:57:54
+ - (configure, configure.in): test for 'ps aux' (redhat 5.0).
+
+hardaker 30 Jan 98 09:01:06
+ - (UCD-SNMP-MIB.txt, memory.c, memory.h): Patch from Luuk de Boer:
+ - report cached, buffer, and shared statistics for linux.
+
+hardaker 30 Jan 98 09:24:19
+ - (read_config.c, snmp_vars.c, var_struct.h): Patch from Dave Shield:
+ - new subtree structure system.
+
+hardaker 30 Jan 98 10:40:26
+ - (pass.c): put pass_comapre here.
+
+hardaker 30 Jan 98 10:41:53
+ - (read_config.c, snmp_vars.c, snmp_vars.h, var_struct.h):
+ - merge Dave's code with mine. Still a few bugs to work through.
+
+hardaker 30 Jan 98 10:42:17
+ - (registry.c, registry.h): begin munging for new hierarchy.
+
+hardaker 30 Jan 98 10:43:28
+ - (UCD-SNMP-MIB.txt): change module indexing to use oid instead of a numeric.
+
+hardaker 30 Jan 98 10:49:59
+ - (disk.c, host_res.h, pass.c, registry.c, snmp_mib.c, system.c,
+ versioninfo.c, snmp_api.h):
+ - include netinet/in.h for address structure.
+
+hardaker 30 Jan 98 10:55:20
+ version tag ( 3.4.pre2 )
+
+hardaker 30 Jan 98 13:49:56
+ - (README): I can't really have forgotten Simon's name in the list
+ could I?
+
+hardaker 30 Jan 98 13:50:28
+ - (aclocal.m4, configure): define ifnet for linux.
+
+hardaker 30 Jan 98 14:31:58
+ - (acconfig.h, config.h.in, configure, configure.in): check for if_speed.
+
+hardaker 30 Jan 98 14:32:13
+ - (interfaces.c): finish linux problems and use if_speed.
+
+hardaker 30 Jan 98 15:25:02
+ - (snmp_parse_args.c, snmptrap.c): fix default port for snmptrap.
+
+hardaker 2 Feb 98 08:57:41
+ - (configure, configure.in): Patch from John Hawkinson:
+ - fix typo in configure for shared library extension w/o shared libraries.
+
+hardaker 6 Feb 98 13:29:40
+ - (at.c, icmp.c, interfaces.c, ip.c, tcp.c, udp.c): protect against nlist.h
+
+hardaker 6 Feb 98 13:44:44
+ - (hr_disk.c): close() got caught inside an else it shouldn't have due
+ to an ifdef error.
+
+hardaker 6 Feb 98 17:10:53
+ - (Makefile.in, acconfig.h, config.h.in, configure, configure.in,
+ auto_nlist.c, auto_nlist.h, autonlist.h, kernel.c, snmp_vars.c, ip.c):
+ - created a new auto_nlist function and use it in ip.c.
+
+hardaker 6 Feb 98 17:11:25
+ - (generic.h, hpux.h, irix.h, linux.h, solaris.h):
+ - update for auto_nlist symbols.
+
+hardaker 9 Feb 98 11:03:02
+ - (at.c, disk.c, errormib.c, extensible.c, hpux.c, hr_proc.c,
+ hr_storage.c, hr_swrun.c, hr_system.c, icmp.c, interfaces.c, ip.c,
+ kernel_sunos5.c, loadave.c, memory.c, proc.c, tcp.c, udp.c,
+ var_route.c):
+ - use auto_nlist.
+
+hardaker 9 Feb 98 11:03:17
+ - (auto_nlist.h): prototype wrapper.
+
+hardaker 9 Feb 98 11:03:56
+ - (configure, configure.in):
+ - changed --with-shared-libraries to --enable-shared to match other pkgs.
+ - display arguments found for --enable-shared.
+
+hardaker 9 Feb 98 11:04:31
+ - (bsd.h, bsdi.h, freebsd.h, freebsd3.h, generic.h, hpux.h, netbsd.h,
+ solaris.h):
+ - define symbols for auto_nlist to use.
+
+hardaker 9 Feb 98 11:06:53
+ - (snmp_vars.c): Patch from Dave Shield:
+ - fix prototypes on my broken table walking routines.
+
+hardaker 9 Feb 98 11:17:52
+ version tag ( 3.4.pre3 )
+
+hardaker 9 Feb 98 11:18:45
+ - (configure.in): check for ioctls.h
+
+hardaker 9 Feb 98 11:18:59
+ - (interfaces.c): include ioctls.h if available.
+
+hardaker 9 Feb 98 11:20:00
+ - (config.h.in, configure): check for ioctls.h.
+
+hardaker 11 Feb 98 09:19:33
+ - (generic.h, auto_nlist.c, at.c, hr_proc.c, hr_storage.c, memory.c,
+ tcp.c, udp.c, var_route.c): Patch from Dave Shield:
+ - fix all my typos ;-).
+ - create auto_nlist_value to return the looked-up value.
+
+hardaker 11 Feb 98 09:28:09
+ - (configure, configure.in):
+ - ps aux should define aux not -aux.
+
+hardaker 11 Feb 98 09:28:33
+ - (host_res.h): Patch from Dave Shield:
+ - don't include config.h
+
+hardaker 11 Feb 98 09:28:44
+ - (hr_network.c): Patch from Dave Shield:
+ - solaris fixes.
+
+hardaker 11 Feb 98 09:29:06
+ - (solaris.h): Patch from Dave Shield:
+ - undef IP_FORWARDING_SYMBOL before defining it.
+
+hardaker 11 Feb 98 16:44:13
+ - (configure, configure.in): sed doesn't like [a-z]+ type expressions.
+
+hardaker 13 Feb 98 09:07:31
+ - (FAQ): typo: authtrapsenable -> authtrapenable.
+
+hardaker 17 Feb 98 09:50:43
+ - (snmp_api.c, snmp_api.h):
+ - use snmp_ipaddr instead of ipaddr to avoid hpux conflicts.
+
+hardaker 17 Feb 98 09:53:12
+ - (auto_nlist.c, autonlist.h, snmp_vars.c):
+ - use appropriate mallocs, and NULL initialization of pointers.
+ - malloc the symbol rather than using a fixed length.
+ - insert debugging code.
+ - enable printing of the nlist tree if TESTING is defined.
+
+hardaker 17 Feb 98 09:54:01
+ - (tcp.c, udp.c):
+ - nlist symbol name errors.
+
+hardaker 18 Feb 98 08:06:00
+ - (EXAMPLE.conf.def, vmstat.c, vmstat.h, ucd_snmp.h,
+ UCD-SNMP-MIB.txt): Patch from Luuk de Boer:
+ - implment a vmstat mib group on linux.
+
+hardaker 18 Feb 98 08:15:56
+ - (config.h.in, configure, configure.in): Patch from Simon Leinen:
+ - check for sys/sysmp.h.
+
+hardaker 18 Feb 98 08:16:21
+ - (auto_nlist.c): Patch from Simon Leinen:
+ - fix a debugging statement (missing a variable).
+
+hardaker 18 Feb 98 08:18:05
+ - (at.c, icmp.c, interfaces.c, ip.c, tcp.c, udp.c, irix.h):
+ Patch from Simon Leinen:
+ - port to irix.
+
+hardaker 18 Feb 98 11:45:20
+ - (sedscript.in): define LIBDIR and DATADIR.
+
+hardaker 18 Feb 98 11:46:48
+ - (snmpd.1.def, snmpd.conf.5.def): change to DATADIR from LIBDIR.
+
+hardaker 18 Feb 98 13:31:07
+ - (disk.h, extensible.h, loadave.h, proc.h, UCD-SNMP-MIB.txt):
+ - turn these mibs into real tables. Required changing the mib though.
+
+hardaker 18 Feb 98 13:34:55
+ - (snmpd.conf.5.def): authtrapsenable -> authtrapenable.
+
+hardaker 18 Feb 98 13:44:13
+ - (at.c, example.c, hpux.c, hr_device.c, hr_disk.c, hr_filesys.c,
+ hr_network.c, hr_partition.c, hr_print.c, hr_proc.c, hr_storage.c,
+ hr_swinst.c, hr_swrun.c, hr_system.c, icmp.c, interfaces.c, ip.c,
+ pass.c, registry.c, smux.c, snmp_mib.c, system.c, tcp.c, udp.c,
+ var_route.c, wombat.c):
+ - all bcopys -> memcpy.
+ - include a few extra headers for DEBUGP statements.
+
+hardaker 18 Feb 98 14:25:53
+ - (acl_vars.c, at.c, context_vars.c, disk.c, host_res.h, hr_disk.c,
+ hr_filesys.c, hr_storage.c, hr_swinst.c, hr_swrun.c, hr_utils.c,
+ icmp.c, interfaces.c, interfaces.h, ip.c, memory.c, mibincl.h,
+ party_vars.c, pass.c, proc.c, registry.c, smux.c, snmp_mib.c,
+ system.c, tcp.c, udp.c, var_route.c, versioninfo.c, view_vars.c,
+ vmstat.c):
+ - massive -Wall and --strict-prototypes checking.
+ - bzero -> memset.
+
+hardaker 18 Feb 98 14:32:05
+ - (read_config.c, snmp_vars.c):
+ - prototyping and --Wall checks.
+
+hardaker 18 Feb 98 14:32:38
+ - (snmp_api.c, snmp_api.h): prototyping checks.
+
+hardaker 18 Feb 98 16:28:51
+ - (openbsd.h): created.
+
+hardaker 18 Feb 98 16:29:58
+ - (acconfig.h, UCD-SNMP-MIB.txt):
+ - removed unneeded stuff.
+ - added openbsd.
+
+hardaker 18 Feb 98 16:30:47
+ - (at.c, proc.c, tcp.c, udp.c, var_route.c, bsd.h, bsdi.h, freebsd.h,
+ generic.h, hpux.h, netbsd.h):
+ - tried to merge some things into s/*.h defines instead. There is a
+ lot to go still.
+
+hardaker 18 Feb 98 16:33:14
+ - (config.h.in): openbsd defines.
+
+hardaker 18 Feb 98 16:33:43
+ - (*/Makefile.in): make depend.
+
+hardaker 18 Feb 98 16:51:18
+ version tag ( 3.4.pre4 )
+
+hardaker 20 Feb 98 09:19:00
+ - (interfaces.c): Patch from Simon Leinen:
+ - fix include file dependancies on irix with _KERNEL defined.
+
+hardaker 20 Feb 98 11:15:14
+ - (*/Makefile.in): fix make depend to look for and strip /usr/lib/*.
+
+hardaker 25 Feb 98 07:27:09
+ - (read_config.c, snmpd.c): Patch from Niels Baggesen:
+ - fix read_config parser's end of line problems.
+
+hardaker 4 Mar 98 15:49:32
+ - (COPYING): documentation requirement change.
+
+hardaker 6 Mar 98 14:01:52
+ - (Makefile.in, kernel.c, read_config.c, read_config.h, snmp_agent.c,
+ snmp_vars.c, snmpd.c, acl_vars.c, alarm.c, context_vars.c, disk.c,
+ event.c, extensible.c, icmp.c, interfaces.c, ip.c, mibincl.h,
+ party_vars.c, pass.c, proc.c, registry.c, registry.h, route_write.c,
+ snmp_mib.c, system.c, tcp.c, udp.c, vacm_vars.c, vacm_vars.h,
+ var_route.c, versioninfo.c, view_vars.c, snmp_parse_args.c,
+ snmpdelta.c, snmpget.c, snmpgetnext.c, snmpset.c, snmpstatus.c,
+ snmptable.c, snmptest.c, snmptranslate.c, snmptrap.c, snmptrapd.c,
+ if.c, inet.c, route.c, snmpd.conf.5.def, snmptable.1, .index,
+ Makefile.in, SNMP-FRAMEWORK-MIB.txt, SNMP-MPD-MIB.txt,
+ SNMP-NOTIFICATION-MIB.txt, SNMP-PROXY-MIB.txt, SNMP-TARGET-MIB.txt,
+ SNMP-USER-BASED-SM-MIB.txt, SNMP-VIEW-BASED-ACM-MIB.txt,
+ Makefile.in, acl.h, acl_parse.c, asn1.c, context.h, context_parse.c,
+ mib.c, party.h, party_parse.c, snmp.c, snmp.h, snmp_api.c,
+ snmp_auth.c, snmp_client.c, snmp_impl.h, system.c, vacm.c, vacm.h,
+ view.c): Patch from Niels Baggesen:
+ - Implement the SNMPv3 View Based Access Control Model (RFC 2275).
+ - header fixes.
+ - better header-file #define names to include SNMP_, ASN_, etc. prefixes.
+
+hardaker 6 Mar 98 15:47:01
+ - (util_funcs.c):
+ - remove GLOBAL-SECURITY checks.
+
+hardaker 6 Mar 98 15:47:19
+ - (mibII.h): add vacm_vars.
+
+hardaker 6 Mar 98 15:47:40
+ - (host_res.h): move snmp_api.h up above snmp_impl.h.
+
+hardaker 6 Mar 98 15:48:33
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - remove security type prompts.
+
+hardaker 9 Mar 98 17:40:04
+ - (mibII.c, mibII.h, sysORTable.c, sysORTable.h, system.c, v2party.c,
+ vacm_vars.c, vacm_vars.h):
+ - implement sysORTable.
+ - register mibs under it.
+
+hardaker 11 Mar 98 08:06:17
+ - (*/*/*/*): Patch from Niels Baggesen:
+ - fix auto_nlist on preceeding _ architectures.
+ - Change *all* define usage to new SNMP_ and ASN_ prefixes.
+ - leave mib access open if no com2sec statements were found in snmpd.conf.
+
+hardaker 11 Mar 98 09:40:42
+ - (hpux.h, hr_filesys.h, memory.h, snmp_bgp.h, snmp_ospf.h,
+ snmp_rip2.h, sysORTable.h, vmstat.h):
+ - finish converting a few of the files that Niels missed.
+
+hardaker 11 Mar 98 10:30:50
+ - (sysORTable.c, sysORTable.h, system.c, system.h):
+ - fix time values and move sysORLastChanged to the system group.
+
+hardaker 11 Mar 98 12:14:09
+ - (*): Patch from Craig Bevins for OpenBSD
+
+hardaker 11 Mar 98 12:27:01
+ - (interfaces.c, tcp.c, udp.c, var_route.c, var_route.h): Patch from
+ Craig Bevins:
+ - port to OpenBSD.
+
+hardaker 11 Mar 98 12:45:46
+ - (*): patch from Garrett Wollman for FreeBSD.
+
+hardaker 11 Mar 98 12:56:37
+ - (aclocal.m4, config.h.in, configure, configure.in, icmp.c,
+ interfaces.c, ip.c, tcp.c, udp.c, var_route.c): Patch from Garrett
+ Wollman:
+ - freebsd 3 sysctl implementations.
+
+hardaker 11 Mar 98 14:41:11
+ - (read_config.c, read_config.h, snmp_agent.c, snmp_vars.c, snmpd.c,
+ host_res.h, hr_device.c, hr_device.h, hr_disk.c, hr_disk.h,
+ hr_filesys.c, hr_filesys.h, hr_network.c, hr_network.h, hr_other.c,
+ hr_partition.c, hr_partition.h, hr_print.c, hr_print.h, hr_proc.c,
+ hr_proc.h, hr_storage.c, hr_storage.h, hr_swinst.c, hr_swinst.h,
+ hr_swrun.c, hr_swrun.h, hr_system.c, hr_system.h, interfaces.c,
+ ip.c, mibII.c, mibII.h, sysORTable.c, v2party.c, v2party.h,
+ vacm_vars.c, vacm_vars.h):
+ - massive prototyping and --Wall fixes.
+ - fixed things broken by the freebsd patch (only some I'm sure).
+
+hardaker 11 Mar 98 15:42:35
+ - (auto_nlist.c): better debugging printfs
+
+hardaker 11 Mar 98 15:45:22
+ - (hpux.h): switch incorrect arptab symbols.
+
+hardaker 11 Mar 98 15:56:13
+ - (README): name update.
+
+hardaker 11 Mar 98 15:57:16
+ - (*/Makefile.in): depend update.
+
+hardaker 11 Mar 98 17:05:41
+ - (system.c): don't chomp new line on read_config utils.
+
+hardaker 18 Mar 98 09:17:42
+ - (README): changed OV path's to newer release paths.
+
+hardaker 18 Mar 98 13:10:35
+ - (acconfig.h, config.h.in, sedscript.in, UCD-SNMP-MIB.txt):
+ - re-numbering of the new table modules.
+
+hardaker 18 Mar 98 13:26:22
+ - (extensible.c, memory.c, pass.c, proc.c, util_funcs.c, util_funcs.h):
+ - wait for pid after get_exec_output() with new wait_on_exec() function.
+
+hardaker 18 Mar 98 13:56:16
+ - (acconfig.h, config.h.in, configure, configure.in, read_config.c,
+ snmpd.c, snmp_parse_args.c, snmptrapd.c, main.c, mib_api.3,
+ config.h):
+ - SNMPLIBPATH -> SNMPSHAREPATH
+ - a real SNMPLIBPATH
+ - make the agent read .conf files from SNMPSHAREPATH:SNMPLIBPATH.
+
+hardaker 18 Mar 98 14:09:31
+ version tag ( 3.4.pre5 )
+
+hardaker 22 Mar 98 18:13:41
+ - (pass.c, proc.c, vacm_vars.c): Patch from Simon Burge:
+ - move sys/types.h up for ultrix.
+
+hardaker 25 Mar 98 09:15:45
+ - (tcp.c): include tcpip.h for digital unix.
+
+hardaker 25 Mar 98 10:39:13
+ - (read_config.c, read_config.h, snmp_vars.c, registry.c, registry.h):
+ - fix the registry mib to use the new module structure.
+ - create a working find_subtree() and find_subtree_next().
+
+hardaker 25 Mar 98 10:39:50
+ - (acconfig.h, config.h.in): simply don't define CAN_USE_NLIST on linux.
+
+hardaker 25 Mar 98 10:44:06
+ - (snmpd.c, snmp_api.c): Spelling errors from the CMU code fixed.
+
+hardaker 25 Mar 98 10:46:36
+ - (acconfig.h, config.h.in, linux.h): new define: DONT_USE_NLIST.
+
+hardaker 25 Mar 98 10:59:20
+ - (interfaces.c): Patch from Niels Baggesen:
+ - Add an & to arpcom.ac_enaddr in memset.
+
+hardaker 25 Mar 98 12:48:30
+ - (Makefile.in, int64.c, int64.h, mib.c): Code from David T. Perkins:
+ - integrated David's code to print counter64s as integers rather than hex.
+
+hardaker 25 Mar 98 13:07:00
+ - (v2party.c, mibII.c, vacm_vars.c): declair registration variables staticly.
+
+hardaker 25 Mar 98 16:49:56
+ - (hpux.c): fix write_method declaration.
+
+hardaker 26 Mar 98 07:22:30
+ - (*.c): Patch from Niels Baggesen:
+ - misc porting improvements (the bsd groups, sunos, ...).
+ - switch auto_nlists calling order of _ vs non _ lookups.
+ - reverse all string.h/strings.h include possibilities.
+
+hardaker 27 Mar 98 09:20:04
+ - (snmptrapd.c):
+ - Beta version of an extensible trap demon.
+ - -C 'command' on the command line runs the command and feeds it
+ stdin information about the trap.
+ - v1 traps are converted to v2 traps for consistancy of
+ information sent to the scripts.
+
+hardaker 27 Mar 98 11:20:21
+ - (read_config.c, read_config.h):
+ - create config_pwarn() that doesn't increase the error count to
+ prevent exiting. Used for disks, since some might by process or
+ nfs mounted.
+
+hardaker 27 Mar 98 11:20:54
+ - (disk.c): use config_pwarn() for missing disks.
+
+hardaker 27 Mar 98 11:22:35
+ - (hr_device.c): check device index against maximum (segfault on HPUX).
+
+hardaker 27 Mar 98 16:10:05
+ - (README, config.h.in, configure, configure.in, snmpd.c): Patch from
+ Arthur Hyun:
+ - tcpwrappers support.
+
+hardaker 27 Mar 98 16:23:03
+ - (interfaces.c): Interfaces_Scan_Next needed a 4th (NULL) argument.
+
+hardaker 27 Mar 98 16:23:33
+ - (acconfig.h, config.h.in, configure, configure.in, snmpd.c):
+ - correctly #ifdef out the tcpwrappers patch.
+
+hardaker 27 Mar 98 16:42:13
+ - (INSTALL): document libwrap.
+
+hardaker 27 Mar 98 16:43:06
+ - (snmp_vars.c, snmp_vars.h, interfaces.c, ip.c, registry.c):
+ - prototyping and -Wall fixes.
+
+hardaker 1 Apr 98 09:52:32
+ - (snmp_client.c): enterprise_length is sizeof(oid) dependent.
+
+hardaker 1 Apr 98 13:27:07
+ - (auto_nlist.c):
+ - remove no longer needed debugging statements of tree traversal.
+
+hardaker 1 Apr 98 13:31:29
+ - (NEWS, PORTING): updates for 3.4.
+
+hardaker 1 Apr 98 13:47:55
+ - (FAQ, README): more 3.4 updates.
+
+hardaker 1 Apr 98 13:53:27
+ - (EXAMPLE.conf.def): added vacm example configuration.
+
+hardaker 1 Apr 98 13:54:11
+ - (snmpd.conf.5.def): moved the view example section above the access section.
+
+hardaker 1 Apr 98 14:10:07
+ - (TODO): removed a few things!
+
+hardaker 1 Apr 98 14:11:49
+ - (Makefile.in): make depend.
+
+hardaker 1 Apr 98 14:40:44
+ - (snmp_vars.c, snmp_vars.h): make unregestering of mibs work.
+ - (in most cases :-?)
+
+hardaker 1 Apr 98 14:43:14
+ version tag ( 3.4.pre6 )
+
+hardaker 1 Apr 98 16:35:59
+ - (snmptrapd.c): always send enterprise and trapoid to scripts.
+
+hardaker 20 Apr 98 10:31:08
+ - (snmpd.c): change oid from textual to numeric to allow now mibs to
+ be loaded.
+
+hardaker 20 Apr 98 15:54:29
+ - (host_res.h, hr_disk.c, hr_filesys.c, hr_partition.c, hr_storage.c):
+ - Patch from Dave Shield:
+ - consolidate the system-specific stuff a bit (should make it easier
+ to follow)
+ - Re-structures the Disk searching, in such a way that it can set up
+ via the config file. (which I still need to do)
+ - Speed up disk searching (by caching invalid results - a *major* win!)
+ - Handle partitions sensibly (arther than one per disk)
+ - Improve Solaris support for the Device group
+
+hardaker 20 Apr 98 15:56:50
+ - (config.h.in, configure, configure.in): check for sys/dkio.h
+
+hardaker 20 Apr 98 15:59:12
+ - (hr_filesys.c, hr_swrun.c): Patch from Niels Baggesen:
+ - fix some host resources for solaris.
+
+hardaker 20 Apr 98 16:00:36
+ - (snmpd.c): Patch from Niels Baggesen:
+ - appropriate use of strdup during startup and better flag checking.
+
+hardaker 20 Apr 98 16:00:56
+ - (interfaces.c): Patch from Niels Baggesen:
+ - header moves.
+
+hardaker 20 Apr 98 16:02:12
+ - (ip.c): Patch from Niels Baggesen:
+ - test symbol defines and cleanup.
+
+hardaker 20 Apr 98 16:03:03
+ - (snmptable.c): Patch from Niels Baggesen:
+ - prototyping and other cleanups.
+
+hardaker 20 Apr 98 16:05:00
+ - (snmptrapd.c): Patch from Niels Baggesen:
+ - gethostbyaddr moves up.
+ - include sys/wait.h.
+ - syslog %d -> %ld for long specific_type.
+
+hardaker 20 Apr 98 16:05:34
+ - (vacm_vars.c): Patch from Niels Baggesen:
+ - typecast a pointer.
+
+hardaker 20 Apr 98 16:06:03
+ - (tcp.c, udp.c, var_route.c): Patch from Niels Baggesen:
+ - #ifdef checks on symbols and header movement.
+
+hardaker 20 Apr 98 16:06:21
+ - (solaris.h): Patch from Niels Baggesen:
+ - undefine a bunch of nlist symbols.
+
+hardaker 20 Apr 98 16:07:10
+ - (snmp_client.c): Patch from Niels Baggesen:
+ - needed pointer copies.
+
+hardaker 22 Apr 98 07:49:21
+ - (UCD-SNMP-MIB.txt): changed wording, cleaned up a bit.
+
+hardaker 22 Apr 98 08:35:29
+ - (parse.c): Patch from Niels Baggesen:
+ - parse BITS keywords.
+
+hardaker 24 Apr 98 10:00:06
+ - (acconfig.h, config.h.in): mib oid location updates for ucd-snmp mib.
+
+hardaker 24 Apr 98 10:02:29
+ - (UCD-SNMP-MIB.txt):
+ - renamed labels to be unique from the old definitions.
+ - renumbered again.
+ - commented on the desgin of the mib at the top.
+ - Changed back to SMIv1.
+ - removed lockd section.
+ - removed vmstat section till it gets implemented.
+ - removed sequences of scalers.
+
+hardaker 24 Apr 98 10:22:00
+ - (UCD-SNMP-MIB.txt): the textual descriptions were updated some.
+
+hardaker 24 Apr 98 14:03:26
+ - (UCD-SNMP-MIB.txt): more cleaning and renaming.
+
+hardaker 24 Apr 98 14:32:12
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - check statvfs.h for f_bavail.
+
+hardaker 24 Apr 98 14:33:08
+ - (hr_filesys.c): include sys/param.h to define MAXPATHLEN.
+
+hardaker 24 Apr 98 14:33:24
+ - (hr_partition.c): close file descriptor just opened.
+
+hardaker 24 Apr 98 14:33:58
+ - (disk.c): calculate vfs block size if possible and size > 255 bytes.
+
+hardaker 24 Apr 98 16:31:30
+ - (tcp.c): include netinet/tcpip.h for DU4.0.
+
+hardaker 24 Apr 98 16:32:05
+ - (auto_nlist.c, auto_nlist.h): n_value is a long:
+ - return the value from auto_nlist_value as an unsigned long.
+
+hardaker 24 Apr 98 16:40:45
+ - (var_route.c): watch out for single route loops.
+
+hardaker 27 Apr 98 10:59:19
+ - (Makefile.top): removed unneeded variable.
+
+hardaker 27 Apr 98 11:00:08
+ - (configure, configure.in): define SHLIB_LDCONFIG_CMD as ":" for
+ static library cases.
+
+hardaker 27 Apr 98 11:00:44
+ - (snmpbulkwalk.c, snmpdelta.c, snmpget.c, snmpgetnext.c, snmpset.c,
+ snmpstatus.c, snmptable.c, snmptest.c, snmpwalk.c):
+ - Put the word "Timeout: " in front of the "No Response" errors.
+
+hardaker 27 Apr 98 13:31:10
+ version tag ( 3.4.pre7 )
+
+hardaker 27 Apr 98 16:24:34
+ - (tkmib): bug fixes and new mib menu to load new mibs.
+
+hardaker 27 Apr 98 16:46:28
+ - (tkmib): New mib menu command: load a mib module by ID name.
+
+hardaker 27 Apr 98 16:48:02
+ - (tkmib): bug fixes.
+
+hardaker 29 Apr 98 08:56:44
+ - (snmptable.c): Patch from Niels Baggesen:
+ - fix -H header printing.
+
+hardaker 29 Apr 98 10:26:58
+ - (tcp.c): don't use TCPSTAT_SYMBOL unless defined.
+
+hardaker 29 Apr 98 10:34:12
+ - (example.c, proc.c, var_route.c, wombat.c):
+ - nlist cleanups.
+
+hardaker 29 Apr 98 10:43:04
+ - (example.c, example.h, wombat.c, wombat.h): more clean ups.
+
+hardaker 29 Apr 98 11:31:43
+ - (vmstat.c, vmstat.h): moves, changes, removals, and fixes.
+
+hardaker 29 Apr 98 11:32:01
+ - (UCD-SNMP-MIB.txt): put vmstat back in and renamed to systemStats.
+
+hardaker 29 Apr 98 11:41:58
+ - (tkmib):
+ - display unloaded module error.
+ - don't try to load a file on a cancel.
+
+hardaker 6 May 98 11:22:56
+ - (Makefile.in): install tkmib.
+
+hardaker 6 May 98 14:06:57
+ - (UCD-SNMP-MIB.txt):
+ - added internal table section.
+ - mib number corrections to match the source.
+
+hardaker 6 May 98 14:58:23
+ - (disk.c, errormib.c, example.c, example.h, extensible.c, loadave.c,
+ memory.c, proc.c, sysORTable.c, system.c, util_funcs.c,
+ util_funcs.h, versioninfo.c, vmstat.c):
+ - remove the newname requirement from checkmib().
+ - create header_generic() for simple scalar tests.
+ - use header_generic() in all ucd specific scalar mibs, and example.[ch].
+
+hardaker 6 May 98 21:06:59
+ - (NEWS): minor wording change.
+
+hardaker 6 May 98 21:07:28
+ - (util_funcs.c, util_funcs.h):
+ - new function: calculate_time_diff(t1, t2).
+
+hardaker 6 May 98 21:08:00
+ - (UCD-SNMP-MIB.txt): make bogus index's be 0.
+
+hardaker 6 May 98 21:08:37
+ - (mib2c): created a mib2c template creator.
+
+hardaker 6 May 98 22:28:47
+ - (win32/config.h): update from Joe Marzot.
+
+hardaker 7 May 98 09:05:55
+ - (COPYING): correction for dates.
+
+hardaker 7 May 98 09:07:06
+ - (configure, configure.in): sys/stat inclusion in fs checks.
+
+hardaker 7 May 98 09:07:46
+ - (read_config.c): debug info for config files read.
+
+hardaker 8 May 98 10:57:49
+ - (config*): check for pkglocs.h.
+
+hardaker 8 May 98 11:01:24
+ - (hr_swinst.c, hr_disk.c): Patch from Dave Shields.
+
+hardaker 8 May 98 14:53:36
+ - (disk.c): wording change.
+
+hardaker 11 May 98 08:08:37
+ - (util_funcs.c): blank line removal.
+
+hardaker 11 May 98 08:08:53
+ - (tkmib): optional port number.
+
+hardaker 11 May 98 08:09:58
+ - (mib2c):
+ - counter64s.
+ - consolodation of variable declarations.
+ - more error stings in all files for unknown variable types.
+
+hardaker 11 May 98 08:10:30
+ - (parse.c): opaque's can have a size specifier.
+
+hardaker 11 May 98 08:10:46
+ - (int64.c): add incrByU32().
+
+hardaker 11 May 98 10:29:16
+ - (read_config.c, snmp_vars.h, snmpd.c, snmpd.h, var_struct.h): Patch
+ from Niels Baggesen:
+ - free routines for vacm (to allow -HUP)
+ - free routines for the trapsink directives in snmpd
+
+hardaker 11 May 98 10:30:01
+ - (hr_disk.c, hr_filesys.c, hr_partition.c, vacm_vars.c): Patch from
+ Niels Baggesen:
+ - some prototypes for the hr_*.c files (needs Dave's recent patch)
+ Warning: the proc part still does not work with Solaris!
+
+hardaker 11 May 98 10:30:18
+ - (snmptranslate.c): Patch from Niels Baggesen:
+ - implement the long since announced -H option to snmptable
+
+hardaker 11 May 98 10:30:37
+ - (snmptranslate.1): Patch from Niels Baggesen:
+ - implement the long since announced -H option to snmptable.
+
+hardaker 11 May 98 10:31:33
+ - (SNMPv2-TC.txt): Patch from Niels Baggesen:
+ - this last [parser] may find errors in old MIBs (including the
+ version of SNMPv2-TC that we ship).
+
+hardaker 11 May 98 10:32:27
+ - (UCD-SNMP-MIB.txt): Patch from Niels Baggesen:
+ - Corrections of disk entry capitilazation problems.
+
+hardaker 11 May 98 10:34:38
+ - (mib.c, parse.c, parse.h, snmp_api.h, vacm.c, vacm.h): Patch from
+ Niels Baggesen:
+ - free routines for vacm (to allow -HUP)
+ - fix the parser to report unlinked OIDs. This did reveal an error in a
+ Cisco MIB (CISCO-IPMCAST-MIB) that I had been using (it needs an
+ IMPORTS ciscoExperiment FROM CISCO-SMI)
+ Actually the parser worked ok, except for the missing error messages.
+ - rewrite of the parsers lexical analyser, to correct the errors that
+ Dave Perkins and others have pointed out recently (name::= , DESCRIPTION"
+ and proper handling of -- partial line comments --). Watch out! this last
+ may find errors in old MIBs (including the version of SNMPv2-TC that
+ we ship). My Fore Systems MIBs had errors with this.
+ - implement the long since announced -H option to snmptable
+
+hardaker 12 May 98 10:52:16
+ - (hr_swinst.c): Patch from Dave Shield:
+ - more swinst fixes for rpm modules.
+
+hardaker 12 May 98 10:52:57
+ - (snmptrapd.c): Patch from Dave Shield:
+ - include a getdtablesize() function for hpux9.
+
+hardaker 12 May 98 11:10:42
+ - (NEWS): more updates.
+
+hardaker 12 May 98 11:11:10
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - munge rpm lib check to link with -ldb as well.
+
+hardaker 12 May 98 11:11:32
+ - (disk.c): NULL -> 0.
+
+hardaker 12 May 98 11:45:21
+ - (vmstat.c): correct strings inclusion.
+
+hardaker 12 May 98 11:45:51
+ - (snmp_api.c, system.c):
+ - move debugging code from system.c to snmp_api.c, where it should be.
+
+hardaker 12 May 98 15:14:48
+ - (disk.c, example.c, interfaces.c, loadave.c, memory.c, pass.c,
+ proc.c, util_funcs.h, vmstat.c):
+ - include time.h properly instead of relying on util_funcs.h to do it.
+
+hardaker 12 May 98 15:15:01
+ version tag ( 3.4.pre8 )
+
+hardaker 13 May 98 21:21:22
+ - (int64.c, int64.h, mib.c): make int64.c use counter64's structure.
+
+hardaker 13 May 98 21:21:42
+ - (snmp_vars.c): don't return a counter64 to a snmpv1 request.
+
+hardaker 13 May 98 21:22:09
+ - (ip.c): include net/route.h and syslog.h for bsdi.
+
+hardaker 13 May 98 21:22:17
+ - (memory.c): include sys/param.h for bsdi
+
+hardaker 13 May 98 21:25:39
+ - (mib.c): sprint_by_type() didn't handle counter64's.
+
+hardaker 14 May 98 07:17:34
+ - (memory.c): move sys/param.h up above fs.h headers.
+
+hardaker 14 May 98 08:21:55
+ - (FAQ): new FAQ from Dave Shields.
+
+hardaker 14 May 98 08:22:08
+ - (NEWS): mib2c mentioned.
+
+hardaker 14 May 98 08:25:57
+ - (configure.in, configure): typos.
+
+hardaker 15 May 98 10:13:16
+ - (parse.c): single quote missing module names.
+
+hardaker 15 May 98 10:17:36
+ - (read_config.c, hr_filesys.c, hr_storage.c, hr_swrun.c, hr_system.c,
+ hr_system.h, hr_utils.c, util_funcs.c, var_route.c,
+ snmp_parse_args.c, snmptable.c, snmptranslate.c, snmptranslate.1,
+ bsd.h, solaris.h, sunos.h, int64.h, mib.c, mib.h, parse.c, parse.h):
+ Patch from Niels Baggesen:
+ - snmptranslate supports -R and -r.
+ - miscellaneous warning fixes.
+ - oid searcher always ignores case.
+ - fixed hr_system to compile on SunOS4.
+
+hardaker 15 May 98 10:19:05
+ - (mib.c): Patch from Dave Shield:
+ - provide ability to do random searches specifying a module name to look in.
+
+hardaker 15 May 98 11:17:44
+ - (FAQ, mib.c): Patch from Dave Shield:
+ - handle random lookups with multiple oid segments.
+
+hardaker 15 May 98 11:19:10
+ - (config.h, win32.opt, libsnmp.dsp, libsnmp.plg, libsnmp.def,
+ libsnmp_dll.dsp, libsnmp_dll.plg, snmpbulkwalk.plg, snmpget.plg,
+ snmpgetnext.plg, snmpset.plg, snmpstatus.plg, snmptranslate.plg,
+ snmpwalk.plg): Patch from Joe Marzot:
+ - win32 file updates.
+
+hardaker 18 May 98 11:18:21
+ - (acconfig.h, config.h.in, configure, configure.in):
+ - fix rtentry structure test on re-configures.
+
+hardaker 18 May 98 13:13:18
+ - (hr_swinst.c): protect using the date pointer against NULL settings.
+
+hardaker 18 May 98 15:39:38
+ version tag ( 3.4.pre9 )
+
+hardaker 18 May 98 18:14:19
+ - (int64.c):
+ - include header changes for win32.
+
+hardaker 19 May 98 10:41:14
+ - (at.c): set to do nothing when CAN_USE_SYSCTL.
+
+hardaker 19 May 98 10:41:49
+ - (memory.c): fix swapinfo on hpux10 systems. (/etc/swapinfo -r).
+
+hardaker 20 May 98 07:33:02
+ - (mib.c, parse.c): Patch from Niels Baggesen:
+ - extend random lookups further.
+
+hardaker 20 May 98 07:34:31
+ - (FAQ): Update from Dave Shield.
+
+hardaker 20 May 98 07:36:14
+ - (util_funcs.c): make checmib() use oid not int for newname.
+
+hardaker 20 May 98 07:37:33
+ - (snmp_impl.h): version should be a long.
+
+hardaker 20 May 98 08:25:41
+ - (read_config.c): config_perror() -> config_pwarn() for missing tokens.
+
+hardaker 20 May 98 08:27:06
+ - (*/Makefile.in): make depend.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.2 -> V3.3
+
+whardake 11 Jun 97 04:53:53
+ - (mib.c): Patch from Niels Baggesen to make MIBFILES env var work correctly.
+
+whardake 11 Jun 97 05:46:18
+ - (ChangeLog): whoops.
+
+whardake 23 Jun 97 23:40:28
+ - (Makefile.in): Patch from John Charlton to fix leading spaces in sedscript.
+
+whardake 23 Jun 97 23:41:58
+ - (configure*): bsdi3 needs to define bsdi2, not itself (duh).
+
+whardake 23 Jun 97 23:42:36
+ - (agent/mibgroup/README): need 2 leading '-'s on --with-mib-modules flag.
+
+whardake 26 Jun 97 23:39:32
+ - (smux.c): __P macros were called with too many arguments (needed (args)).
+
+whardake 30 Jun 97 05:53:57
+ - (agent/snmp_{agent,vars}.c, alarm.c, event.c, apps/*,
+ snmplib/snmp{,_api,_auth}.c):
+ - Added basic (mostly conforming?) v2c support.
+ - Merged arg parsing of apps/* clients into one file.
+
+whardake 30 Jun 97 05:54:36
+ - (agent/mibgroup/interfaces.c): Don't put & in front of osf4 ac_enaddr.
+
+whardake 30 Jun 97 06:33:08
+ - (snmptest.c): Patch from Niels Baggesen to fix get -> fget '\n' problem.
+ - Also makes sure it handles up and lower cases.
+
+whardake 30 Jun 97 06:38:43
+ - (wombat.h): better document config_load_mib() example.
+
+whardake 30 Jun 97 06:49:45
+ - (config*, memory.c): Patch from vlad@misery.rosprint.ru:
+ - implement memory section of ucd mib on linux.
+
+whardake 30 Jun 97 06:58:49
+ - (mib_api.3, parse.[ch]): Patch from Dave Shield:
+ - Handle mib module replacements through new function and replacement table.
+
+whardake 30 Jun 97 07:19:51
+ - (mib.c, parse.c, snmp_api.c): Suggestions from Laukkanen Markku NRC/Hki:
+ - Malloc typecasts and other corrections in casting.
+
+whardake 1 Jul 97 01:10:00
+ - (smux.c): fix prototyping failures.
+
+whardake 1 Jul 97 05:41:58
+ - (config*, common_header.h, interfaces.c, var_route.c, UCD-SNMP-MIB.txt):
+ - fix freebsd3 specific problems (based on suggestions from Bill Fenner).
+
+whardake 1 Jul 97 06:02:57
+ - (apps/*.c): Better usage information and usage() standarization.
+
+whardake 1 Jul 97 06:41:44
+ - (disk.c, errormib.c, loadave.c, memory.c): bsdi3 specific headers.
+
+whardake 1 Jul 97 07:20:25
+ - (config*): bsdi3 specific headers.
+
+whardake 1 Jul 97 08:37:51
+ version tag ( 3.3.pre1 )
+
+whardake 3 Jul 97 23:33:23
+ - (snmptranslate.c, mib.[ch], parse.[ch]):
+ - New option to snmptranslate (-a) to output a ascii dump of the mib
+ database capable of being used by the parser for quick OID translations.
+
+whardake 3 Jul 97 23:34:14
+ version tag ( 3.3.pre2 )
+
+whardake 24 Jul 97 23:50:48
+ - (snmp_api.c): Patch from Eddy J. Gurney: uncomment gettimeofday() call.
+
+whardake 7 Aug 97 00:29:24
+ - (TODO): better error messages by apps.
+
+whardake 7 Aug 97 01:11:54
+ - (config*, load.c, disk.c, parse.c, snmp.c): Patch from Simon Burge:
+ - Ultrix fixes for statfs, loadave.
+ - implement strdup if not found in system.
+ - test for test flags for kernel checking.
+ - watch out for ps'es that return egrep with the ps arg on the line.
+ - up maximum disks to 50.
+
+whardake 7 Aug 97 01:33:38
+ - (kernel.c, proc.c): Patch from Simon Burge:
+ - Implement real process table walks on Ultrix.
+
+whardake 7 Aug 97 02:34:45
+ - (config*, memory.c):
+ - fix swap on HPUX 10.20
+
+whardake 13 Aug 97 04:47:49
+ - (snmpstatus.c): optarg/optind need to be declaired under ultrix4.
+
+whardake 13 Aug 97 08:11:42
+ - (version.h, agent/*, agent/mibgroup/*):
+ - move version string to a global header.
+ - insert USING_*_MODULE macro's in many places to make module
+ removal more possible. You can now compile with almost no modules
+ installed.
+
+whardake 14 Aug 97 00:46:38
+ - (snmp_parse_args.c, snmptrap.c, snmptrapd.c, main.c):
+ - add -V version flage.
+
+whardake 14 Aug 97 07:38:17
+ - (config*, FAQ, README, agent/mibgroup/*.c, apps/*.c):
+ - Patch from David Paul Zimmerman:
+ - port to AIX 4.1.5.
+ - fix more type casting problems.
+
+whardake 14 Aug 97 08:15:42
+ - (configure*):
+ - Typo's when copying in a autoconf test.
+ - Add errormib to default module list (since its no longer required).
+ - backquote a . in a sed regexp to watch out for module names
+ beginning with the letter o.
+
+whardake 14 Aug 97 08:16:12
+ - (agent/mibgroup/README): Point out that mib list must be in descending order.
+
+whardake 14 Aug 97 08:16:37
+ - (proc.c): don't use seterrorstatus() if not using the errormib.
+
+whardake 14 Aug 97 08:21:26
+ - (interfaces.c): Patch from David C. Lawrence for netbsd * bsd/os 2.0.
+
+whardake 15 Aug 97 02:30:59
+ - (config*, snmpd.c, snmp_client.[ch], system.[ch]):
+ - fix more long/int problems on 64 bit machines u_long -> in_addr_t.
+ - Check for SIOCGIFADDR in sys/ioctl.h and use it in get_myaddr() if
+ defined.
+
+whardake 15 Aug 97 06:46:39
+ version tag ( 3.3.pre3 )
+
+whardake 25 Aug 97 00:21:23
+ - (memory.c): typo in ifdef.
+
+whardake 25 Aug 97 00:21:41
+ - (versiontag): checkin version.h.
+
+whardake 25 Aug 97 00:22:18
+ - (interfaces.c): Patch from Dave Shields for netbsd.
+
+hardaker 14 Oct 97 15:15:23
+ - (mib_api.3): doc addition: add_mibdir() return value.
+
+hardaker 14 Oct 97 15:16:36
+ - (parse.c): From Dave Shields:
+ - self contained mib .txt files with multiple modules.
+
+hardaker 14 Oct 97 15:19:16
+ - (config*, common_header.h): dynix doesn't have net/route.h.
+
+hardaker 14 Oct 97 15:21:57
+ - (FAQ): From Dave Shields: refer reader to another answer as well.
+
+hardaker 14 Oct 97 15:33:03
+ - (agent/mibgroup/*.c): YMWRAMFSFN:
+ - (yet more warning removals and memory function standardizations from Niels).
+ - minor linux/netbsd/bsdi clean ups.
+
+hardaker 15 Oct 97 09:50:08
+ - (view_parse.c, snmp_vars.c): From Niels: warning removals and standardization.
+
+hardaker 15 Oct 97 09:58:36
+ - (apps/*.c, agent/snmpd.c, snmplib/*.c): Patch from Niels:
+ - warning fixes.
+ - remove the printf's from the library and set a snmp 'errno' equivalent.
+
+hardaker 15 Oct 97 12:12:02
+ - (apps/*.c, agent/snmpd.c, snmplib/*.c):
+ - create and use new function: snmp_perror(char *)
+ - free allocated space of snmp_detail upon usage by snmp_api_errstring().
+
+hardaker 15 Oct 97 18:40:38
+ - (config*, agent/mibgroup/hr*): Host resources mib from Dave Shield.
+ - minor patches by me, mostly pointer errors.
+ - (memory.c): fixed a null pointer problem under linux.
+
+hardaker 20 Oct 97 11:45:58
+ - (FAQ): Changes from Dave.
+
+hardaker 20 Oct 97 11:51:34
+ - (config*, agent/snmp*, agent/mibgroup/*.[ch]):
+ - Created a new mibmodule.h configuration macro called
+ config_parse_dot_conf() which can be called to request parsing of
+ the snmpd.conf file(s) on a per module basis.
+ - All related parsing has been striped from read_config.c and move
+ to their correct module instead.
+ - New function: config_perror(char *): print error with file & line #.
+ - basic -Wall cleanups in hr* as well (not nearly done yet).
+
+hardaker 20 Oct 97 16:05:14
+ - (pass.c) don't null last char in command line.
+
+hardaker 20 Oct 97 16:06:16
+ - (read_config.c):
+ - don't report an error if you can't find a snmpd.conf file.
+ - don't report all lines as an error (opps).
+
+hardaker 20 Oct 97 16:38:33
+ - (mib.c): From Dave: patch DEFAULT_MIBS to take '+' in front.
+
+hardaker 20 Oct 97 16:44:37
+ - (mib.c): patch all other env-vars to take '+' in front.
+
+hardaker 20 Oct 97 17:01:48
+ - (config*, agent/mibgroup/hr_*.c):
+ - A module.c file is no longer required. Only the .h file is
+ necessary, for people who want to have one module wrap a bunch of others.
+ - removed host.c
+ - renamed all hr_init functions to be auto-called.
+
+hardaker 20 Oct 97 17:15:51
+ - (agent/mibgroup/README, wombat.[ch]):
+ - documentation update to reflect config_parse_dot_conf() usage.
+
+hardaker 20 Oct 97 17:16:58
+ - (config*, agent/mibgroup/hr_*.c):
+ - A module.c file is no longer required. Only the .h file is
+ necessary, for people who want to have one module wrap a bunch of others.
+ - removed host.c
+ - renamed all hr_init functions to be auto-called.
+
+hardaker 20 Oct 97 18:01:46
+ - (config*, agent/mibgroup/v2party.h, ucd_snmp.h, smux_gated.h):
+ - created new wrappers for the various modules to make them easy to
+ add and remove as needed.
+
+hardaker 20 Oct 97 19:42:46
+ - (acconfig.h, config.h.in): define linux's OS type.
+
+hardaker 20 Oct 97 19:43:13
+ - (snmp_vars.c): define at least blank func nlist_init() on linux.
+
+hardaker 21 Oct 97 10:15:54
+ - (PORTING, README): minor updates.
+
+hardaker 21 Oct 97 10:45:47
+ - (snmp_parse_args.c): allow -v 2h and 2p for party code.
+
+hardaker 21 Oct 97 11:00:57
+ - (hr_storage.c, hr_swrun.c, memory.c): close open files on linux.
+
+hardaker 21 Oct 97 11:01:27
+ - (NEWS): beginnings of NEWS updates.
+
+hardaker 21 Oct 97 11:02:46
+ version tag ( 3.3.pre4 )
+
+hardaker 21 Oct 97 12:25:03
+ - (agent/read_config.[ch], snmpd.c, snmp_vars.c, mibgroup/*):
+ - moved read_config.[ch] up a level to always be compiled in.
+
+hardaker 21 Oct 97 12:31:54
+ - (*/Makefile.in): make makefileindepend setup.
+
+hardaker 21 Oct 97 12:32:08
+ - (*/Makefile.in): make makefileindepend..
+
+hardaker 21 Oct 97 12:36:33
+ - (*/Makefile.in): did a make depend.
+
+hardaker 21 Oct 97 12:36:39
+ version tag ( 3.3.pre5 )
+
+hardaker 22 Oct 97 11:40:06
+ - (common_header.h, read_config.c, disk.c, snmp_parse_args.c):
+ - Typo's fixed by Niels.
+
+hardaker 27 Oct 97 09:56:26
+ - (config*, agent/mibgroup/*.h):
+ - new config macro: config_arch_require(arch, module).
+ - moved arch dependant modules (memory, hpux, kernel_sunos5) loads
+ from the configure into the appropriate .h files.
+ - (interfaces.c, var_route.c):
+ - typecast klookup calls for freebsd2.
+
+hardaker 27 Oct 97 14:03:15
+ - (agent/snmp_agent.c snmp_vars.c): Changes from Joe Marzot and David Perkins:
+ - v2h -> v2p, v2 -> v2c.
+
+hardaker 27 Oct 97 14:04:33
+ - (apps/*.c):
+ - changes for WIN32 support.
+ - support for command line flags without spaces.
+ - v2h -> v2p.
+
+hardaker 27 Oct 97 14:16:42
+ - (snmplib/*.[ch]): Changes from Joe Marzot and David Perkins:
+ - changes for WIN32 support.
+ - v2h -> v2p.
+
+hardaker 27 Oct 97 14:19:18
+ - (win32): Changes from Joe Marzot and David Perkins:
+ - project dir for WIN32 support.
+
+hardaker 27 Oct 97 14:19:18
+ file config.h was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:18
+ file win32.dsw was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:18
+ file win32.opt was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:25
+ - (win32): Changes from Joe Marzot and David Perkins:
+ - project dir for WIN32 support.
+
+hardaker 27 Oct 97 14:19:25
+ file libsnmp.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:25
+ file libsnmp.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:28
+ - (win32): Changes from Joe Marzot and David Perkins:
+ - project dir for WIN32 support.
+
+hardaker 27 Oct 97 14:19:28
+ file libsnmp.def was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:28
+ file libsnmp_dll.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:28
+ file libsnmp_dll.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:31
+ - (win32): Changes from Joe Marzot and David Perkins:
+ - project dir for WIN32 support.
+
+hardaker 27 Oct 97 14:19:31
+ file snmpbulkwalk.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:31
+ file snmpbulkwalk.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:34
+ - (win32): Changes from Joe Marzot and David Perkins:
+ - project dir for WIN32 support.
+
+hardaker 27 Oct 97 14:19:34
+ file snmpget.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:34
+ file snmpget.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:37
+ - (win32): Changes from Joe Marzot and David Perkins:
+ - project dir for WIN32 support.
+
+hardaker 27 Oct 97 14:19:37
+ file snmpgetnext.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:37
+ file snmpgetnext.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:41
+ - (win32): Changes from Joe Marzot and David Perkins:
+ - project dir for WIN32 support.
+
+hardaker 27 Oct 97 14:19:41
+ file snmpset.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:41
+ file snmpset.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:44
+ - (win32): Changes from Joe Marzot and David Perkins:
+ - project dir for WIN32 support.
+
+hardaker 27 Oct 97 14:19:44
+ file snmpstatus.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:44
+ file snmpstatus.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:47
+ - (win32): Changes from Joe Marzot and David Perkins:
+ - project dir for WIN32 support.
+
+hardaker 27 Oct 97 14:19:47
+ file snmptranslate.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:47
+ file snmptranslate.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:52
+ - (win32): Changes from Joe Marzot and David Perkins:
+ - project dir for WIN32 support.
+
+hardaker 27 Oct 97 14:19:52
+ file snmpwalk.dsp was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 14:19:52
+ file snmpwalk.plg was initially added on branch V2C-WIN32-3-3-pre3.
+
+hardaker 27 Oct 97 15:17:11
+ - (config*) win32 header checks.
+
+hardaker 27 Oct 97 15:17:50
+ - (agent/kernel.c, snmp_agent.c):
+ - ERROR() -> ERROR_MSG().
+ - funtion renames.
+
+hardaker 27 Oct 97 15:18:16
+ - (agent/mibgroup/*.c):
+ - ERROR() -> ERROR_MSG().
+
+hardaker 27 Oct 97 15:21:53
+ - (apps/snmp_parse_args.c):
+ - put tabs back in help string.
+ - put version string request back in.
+ - make error strings better and put back in periods.
+ - don't bomb on unknown parameters for future use.
+
+hardaker 27 Oct 97 15:22:21
+ - (snmplib/snmp.c): put strdup declairation back in.
+
+hardaker 27 Oct 97 15:23:20
+ - (snmplib/snmp_auth.c):
+ - remove #ifdef OLD requirement.
+ - change back int->long argument change for snmp_comstr_build.
+
+hardaker 27 Oct 97 15:37:46
+ - (snmplib/snmp.h):
+ - snmp version #define clairification on future implementations.
+ - more clearly state purpose of future SNMPV3.
+
+hardaker 27 Oct 97 16:26:57
+ - (*): merge of W32 port and main version branch.
+
+hardaker 27 Oct 97 16:34:45
+ - (snmp_api.[ch]): fix perror losses from merge.
+
+hardaker 27 Oct 97 17:04:51
+ - (hr_*.c): ERROR -> ERROR_MSG.
+
+hardaker 27 Oct 97 17:05:12
+ - (snmpstatus.c): remove duplicate declairation.
+
+hardaker 27 Oct 97 17:42:55
+ - (snmp_vars.c): two modules for extensible count.
+
+hardaker 27 Oct 97 17:43:22
+ - (agent/mibgroup/hr_*.h): proper init_ prototypes.
+
+hardaker 27 Oct 97 17:43:50
+ - (snmp_parse_args.c): missing a else statement (sigh).
+
+hardaker 27 Oct 97 17:44:27
+ - (snmp_auth.c): merge bugs. Missing brackets.
+
+hardaker 27 Oct 97 17:47:00
+ - (snmp_api.c): merge bugs: else check against pdu command type.
+
+hardaker 27 Oct 97 18:02:56
+ win32 files
+
+hardaker 27 Oct 97 18:05:36
+ - (win32): add files on main branch.
+
+hardaker 27 Oct 97 18:18:36
+ - (snmpwalk.c): remove gotroot var.
+
+hardaker 27 Oct 97 18:18:57
+ - (snmplib/*.c): use snmp_set_detail to handle malloc/free of snmp_detail.
+
+hardaker 27 Oct 97 18:26:41
+ - (configure.in): fix config_arch_require macro to actually work.
+
+hardaker 27 Oct 97 18:31:34
+ version tag ( 3.3.pre6 )
+
+hardaker 28 Oct 97 09:56:11
+ - (acconfig.h, system.[ch], snmp.c): move strdup def to system.[ch].
+
+hardaker 28 Oct 97 14:30:55
+ - (acconfig.h, mib.c): use ';'s for DOS env paths.
+
+hardaker 28 Oct 97 14:42:23
+ - (config*): fix rtentry structure checks for the *bsd groups.
+
+hardaker 28 Oct 97 14:54:24
+ - (*.*.*.*): rename macro __P -> __UCD_P to reduce stupid conflicts.
+
+hardaker 28 Oct 97 15:50:05
+ - (config*, route_write.c, var_route.c):
+ - fix rtentry problems once and for probably never.
+
+hardaker 28 Oct 97 17:09:57
+ - (acconfig.h, UCD-SNMP-MIB.txt): define bsdi agent type.
+
+hardaker 28 Oct 97 17:10:58
+ - (util_funcs.c): Patch from Nobuo_Okabe@yokogawa.co.jp:
+ - fix unwrapped fopen() by adding return NULL check.
+
+hardaker 28 Oct 97 17:12:00
+ version tag ( 3.3.pre7 )
+
+hardaker 29 Oct 97 09:41:54
+ - (snmptrap.c): remove unused nlist struct.
+
+hardaker 29 Oct 97 09:42:07
+ - (snmp_parse_args.c): add sys/select.h for aix.
+
+hardaker 29 Oct 97 09:57:48
+ - (disk.[ch], struct.h, sedscript.in, snmpd.conf.5.def, UCD-SNMP-MIB.txt):
+ - Patch from Simon Burge to allow a minimum percentage on disk space.
+ - (was originally a maximum, but I changed it to minimum instead).
+
+hardaker 29 Oct 97 10:06:11
+ - (disk.c): fix pointer problems from old read_config form to new.
+
+hardaker 29 Oct 97 10:06:34
+ - (snmpd.conf.5.def): remove space before % sign.
+
+hardaker 29 Oct 97 10:25:31
+ - (*/Makefile.in, man/*):
+ - Patch from Simon Burge to change installation paths.
+ - (modified to point agent to sbindir instead of etcdir).
+
+hardaker 29 Oct 97 10:48:18
+ - (config*, */Makefile.in):
+ - Move snmplibpath to @datadir@ which defaults to /usr/local/share/snmp.
+
+hardaker 29 Oct 97 10:54:07
+ - (agent/Makefile.in): opps, forgot to put in @exec_path@.
+
+hardaker 29 Oct 97 11:20:54
+ - (acconfig.h, asn1.c, mib.[ch], parse.h,apps/*,errormib.c,loadave.c,
+ extensible.c, disk.c, snmpdelta*): Patch from Niels Baggesen:
+ - the now wellknown NetBSD fix,
+ - SunOS4 cc doesn't like unsigned literals or strtoul,
+ - added a char version of ";",
+ - added fprint_variable, fprint_objid etc
+ - changed the apps to print all error messages to stderr,
+ - completed the access and status values in snmplib/parse.h
+ - added a roughly patched version of snmpdelta.
+
+hardaker 29 Oct 97 12:23:26
+ - (parse.h): STATUS_KW_OPTIONAL -> STATUS_OPTIONAL
+
+hardaker 29 Oct 97 12:43:44
+ - (*.*.*): __UCD_P -> __P, and a configure check to look for it.
+
+hardaker 29 Oct 97 12:57:48
+ - (config*): check and include sys/cdefs.h in config.h.
+
+hardaker 29 Oct 97 12:58:01
+ - (host_res.h): don't include config.h twice.
+
+hardaker 29 Oct 97 14:00:38
+ version tag ( 3.3.pre8 )
+
+hardaker 4 Nov 97 12:47:12
+ - (read_config.c):
+ - #include mib_module_config.h
+ - USING_EXTENSIBLE_MIB_MODULE -> USING_EXTENSIBLE_MIB_MODULE
+
+hardaker 4 Nov 97 12:47:59
+ - (configure.in):
+ - Check for $prefix being defined as NONE for other vars.
+
+hardaker 5 Nov 97 13:42:57
+ - (apps/Makefile.in): put snmptrapd in @sbindir@
+
+hardaker 5 Nov 97 13:44:58
+ - (common_header.h): Patch from Dave Shields for hpux10 re-defining problems.
+
+hardaker 5 Nov 97 13:45:23
+ - (hr_disk.c): new version for hpux10 support from Dave Shield.
+
+hardaker 5 Nov 97 13:46:17
+ - (hr_filesys.c, hr_swrun.c, hr_utils.c): Patches from Dave Shield:
+ - bug fixes and hpux10 support.
+
+hardaker 5 Nov 97 13:46:46
+ - (var_route.c): from Dave Shield: don't prototype malloc.
+
+hardaker 5 Nov 97 13:48:07
+ - (*): merge from Dave's pre6 patches.
+
+hardaker 5 Nov 97 13:52:00
+ - (snmp_agent.c, snmp_vars.c, snmpd.c, disk.c, proc.c, util_funcs.c):
+ - #include "mib_module_config.h".
+
+hardaker 5 Nov 97 13:56:58
+ - (at.c, icmp.c, interfaces.c, ip.c, tcp.c, udp.c):
+ - #include "mib_module_config.h"
+
+hardaker 5 Nov 97 14:00:09
+ - (Makefile.in, kernel_sunos5.c, mib.c): Patch from Niels Baggesen:
+ - octet counters for solaris.
+ - Makefile.in patches.
+
+hardaker 5 Nov 97 14:40:07
+ - (memory.c): protect vmmeter.h from multiple inclusions on netbsd.
+
+hardaker 5 Nov 97 15:29:50
+ version tag ( 3.3.pre9 )
+
+hardaker 7 Nov 97 12:24:22
+ - (configure.in): check for linux/hdreg.h
+
+hardaker 7 Nov 97 12:25:35
+ - (hr_swrun.c): don't print a variable that doesn't exist under linux.
+
+hardaker 7 Nov 97 12:28:03
+ - (kernel_sunos5.c): patch from Niels for solaris >2.6.
+
+hardaker 7 Nov 97 13:37:14
+ - (read_config.c, snmp_agent.c, snmpd.c): USING.*_MIB_MODULE -> USING.*_MODULE.
+
+hardaker 7 Nov 97 13:37:44
+ - (hr_network.c): don't pass char ** to interfaces_scan_next().
+
+hardaker 7 Nov 97 13:38:36
+ - (snmpwalk.c): stop on no response from host.
+
+hardaker 7 Nov 97 15:19:24
+ - (acconfig.h): patch from Joe Marzot:
+ - define _CRTIMP for unix due to W32 bad OS designs.
+
+hardaker 7 Nov 97 15:19:59
+ - (snmpgetnext.h): patch from Joe Marzot:
+ - use _CRTIMP in front of errno declaration.
+
+hardaker 7 Nov 97 15:20:54
+ - (parse.[ch], snmp_client.c): patch from Joe Marzot:
+ - use _CRTIMP in front of errno declaration.
+ - define find_node externally.
+
+hardaker 7 Nov 97 15:22:09
+ - (win32/*): patch from Joe Marzot:
+ - win32 specific changes.
+
+hardaker 7 Nov 97 15:28:59
+ - (*): merge to main branch: patches from Joe Marzot.
+
+hardaker 7 Nov 97 16:16:53
+ - (configure.in): watch out for /usr/ucb/cc on solaris and don't use it.
+
+hardaker 7 Nov 97 16:37:01
+ - (NEWS, README, TODO): Documentation updates.
+
+hardaker 7 Nov 97 16:38:49
+ version tag ( 3.3.pre10 )
+
+hardaker 12 Nov 97 07:42:24
+ - (snmptranslate.c): Patch from Joe Marzot: W32 specific fixes.
+
+hardaker 12 Nov 97 08:26:45
+ - (snmp_client.c): Patch from Joe Marzot:
+ - Free a pdu in a spot that should technically never be needed, but
+ is nice for people reading the code.
+
+hardaker 12 Nov 97 09:17:08
+ - (FAQ): Doc update from Dave Shield.
+
+hardaker 12 Nov 97 09:17:28
+ - (mib_api.3): Doc update from Dave Shield.
+
+hardaker 12 Nov 97 09:18:02
+ - (hr_swrun.c): Patch from Dave Shield for linux/hpux10 problems.
+
+hardaker 12 Nov 97 10:25:30
+ - (NEWS, TODO): Patch from Niels Baggesen:
+ - doc update.
+
+hardaker 12 Nov 97 10:27:08
+ - (*/Makefile.in): Patch from Niels Baggesen:
+ - add @datadir@ to files that needed it.
+
+hardaker 12 Nov 97 10:27:46
+ - (kernel_sunos5.c): Patch from Niels Baggesen:
+ - solaris patches.
+
+hardaker 12 Nov 97 10:28:11
+ - (party_vars.c): Patch from Niels Baggesen:
+ - include netinet/in.h if available.
+
+hardaker 12 Nov 97 10:29:42
+ - (Makefile.in): Patch from Niels Baggesen:
+ - add @datadir@ to files that needed it.
+
+hardaker 12 Nov 97 10:30:57
+ - (apps/*.c): Patch from Niels Baggesen:
+ - various (remove unneeded vars, etc).
+ - add snmptable.
+ - make snmptrapd multi-lingual.
+
+hardaker 12 Nov 97 10:32:22
+ - (snmpnetstat/main.c): Patch from Niels Baggesen:
+ - snmpv2c support and argument parsing changes.
+
+hardaker 12 Nov 97 10:33:20
+ - (man/snmpdelta.1,snmptable.1,snmptrapd.8): Patch from Niels Baggesen:
+ - documentation changes and additions.
+
+hardaker 12 Nov 97 10:38:36
+ - (parse.c, parse.h): Patch from Niels Baggesen:
+ - parser improvements.
+ - parser directory caching.
+ - save_descriptions/mib_warnings set functions.
+
+hardaker 12 Nov 97 10:44:47
+ - (NEWS): doc update.
+
+hardaker 12 Nov 97 15:10:27
+ - (system.h): Don't include config.h!
+
+hardaker 12 Nov 97 15:16:44
+ - (party_vars.c): include STDC_HEADERS for AIX.
+
+hardaker 12 Nov 97 15:21:41
+ - (parse.c): include STDC_HEADERS for AIX.
+
+hardaker 12 Nov 97 15:42:02
+ - (*/Makefile.in): make depend.
+
+hardaker 12 Nov 97 16:05:47
+ version tag ( 3.3.pre11 )
+
+hardaker 12 Nov 97 20:27:11
+ - (win32/libsnmp_dll/libsnmp.def): Patch from Joe Marzot: function changes.
+
+hardaker 12 Nov 97 20:35:00
+ - (): Patch from David Zimmerman:
+ - Fixes for AIX.
+
+hardaker 12 Nov 97 20:35:27
+ - (var_route.c, read_config.c, snmpdelta.c): Patch from David Zimmerman:
+ - Fixes for AIX.
+
+hardaker 12 Nov 97 20:43:33
+ - (var_route.c, read_config.c): fix qsort params for STDC.
+
+hardaker 12 Nov 97 20:47:47
+ - (var_route.c, read_config.c): STDC typos.
+
+hardaker 14 Nov 97 08:31:41
+ - (wombat.c): code comments from Alan Batie.
+
+hardaker 14 Nov 97 08:32:26
+ - (README): coder list update.
+
+hardaker 14 Nov 97 12:21:10
+ - (wombat.c): quick doc change.
+
+hardaker 14 Nov 97 12:35:19
+ - (FAQ, NEWS, README): last documentation updates.
+
+
+
+-------------------------------------------------------------------------------
+
+Changes: V3.1.3 -> V3.2
+
+whardake 11 Feb 97 12:48:06
+ - (snmp_vars.c, snmp_var_route.c, snmp_vars.linux.h): Patch from Jennifer Bray:
+ - Get agent working on linux.
+
+whardake 11 Feb 97 12:50:46
+ - (snmp_vars.linux.h): Removed non-linux specific stuff.
+
+whardake 11 Feb 97 12:54:36
+ - (snmp_vars.c): Patch from Dave Shield: Fix hpux specific problems.
+
+whardake 11 Feb 97 13:11:21
+ - (*Makefile.in): Patch from Philip Guenther:
+ - Fix all Makefile.in's to support a different src dir.
+
+whardake 11 Feb 97 13:12:19
+ - (README): Update people supplying patches list.
+
+whardake 11 Feb 97 13:19:37
+ - (all .c with main(), snmplib/*): Patch from Philip Guenther:
+ - Make better support for shared lib possibilities.
+
+whardake 11 Feb 97 14:10:11
+ - (snmp_vars.linux.h): Fix #ifdef.
+
+whardake 11 Feb 97 14:11:24
+ - ({local,man,ov}/Makefile.in): Remove spaces in front of tabs.
+
+whardake 11 Feb 97 14:13:34
+ - (snmp_auth.c): remove non-static md5digest prototype.
+
+whardake 11 Feb 97 14:14:05
+ version tag ( 3.1.4.pre1 )
+
+whardake 11 Feb 97 16:42:02
+ - (apps/Makefile.in): Patch from Simon Leinin to descend when make cleaning.
+
+whardake 11 Feb 97 16:44:08
+ - (man/Makefile.in): Patch from Simon Leinin to fix srcdir problems.
+
+whardake 11 Feb 97 17:00:26
+ - (Makefile.in): Rest of Philip's patch to fix srcdir problems (sh vars).
+
+whardake 17 Feb 97 14:41:08
+ - (agent/snmp_vars, agent/mibgroup): Dave Shield split up the
+ snmp_vars.c and related files into pieces for easier management.
+ The results of his work are in the new agent/mibgroup directory.
+
+whardake 17 Feb 97 14:47:13
+ - (mib.c, snmp_api.c, snmp_api.h): Patch from Dave Shield to remove
+ ANSI specific requirements.
+
+whardake 17 Feb 97 14:53:24
+ - (agent/*Makefile.in): Make depend.
+
+whardake 17 Feb 97 15:30:04
+ - (alarm.c): typedef for getStatPtr().
+
+whardake 17 Feb 97 15:30:36
+ - (event.c): Was passing an int to bcopy instead of &int.
+
+whardake 17 Feb 97 15:31:25
+ - (icmp.c): don't use ret variable, since it's not defined.
+
+whardake 17 Feb 97 15:32:30
+ - (interfaces.c): Remove MAX_NAME_LENGTH requirements.
+
+whardake 17 Feb 97 16:11:09
+ version tag ( 3.1.4.pre2 )
+
+whardake 4 Mar 97 15:46:30
+ - (config*, mibgroup/Makefile.in):
+ - mibgroup compile list is build by configure and can be augmented
+ by the --with-mib-modules="list of modules" command line to configure.
+
+whardake 5 Mar 97 09:49:59
+ - (config*, agent/*, agent/mibgroup/*):
+ - Added .o file list to agent/Makefile.in generated by configure.
+ - new files generated by configure:
+ - mibgroup/mib_module_includes.h: A list of mib .h files for snmp_vars.h.
+ (every module *must* have a .h file)
+ - mibgroup/mib_module_inits.h: A list of init_wombat() type functions.
+ (only present if exist in wombat.c).
+ - mibgroup/mib_module_loads.h: This file is generated by a new macro in
+ the mib.h files called
+ config_load_mib(), which simplifies
+ the loading of the mib sections.
+
+whardake 5 Mar 97 10:03:58
+ - (system.c): removed system nlist (unused).
+
+whardake 5 Mar 97 11:17:44
+ - (snmp_client.c): Patch from Elwyn B Davies:
+ - Fix a PDU cloning bug.
+
+whardake 5 Mar 97 11:28:20
+ - (*.c, *.h): Patch from Niels Baggesen to prototype *everything*.
+
+whardake 5 Mar 97 11:28:23
+ file kernel.h was initially added on branch Ext-3-1-4-pre2-niels.
+
+whardake 5 Mar 97 11:28:45
+ - (*.c, *.h): Patch from Niels Baggesen to prototype *everything*.
+
+whardake 5 Mar 97 11:28:48
+ file snmpd.h was initially added on branch Ext-3-1-4-pre2-niels.
+
+whardake 5 Mar 97 11:35:18
+ - (*.c, *.h): Patch from Niels Baggesen to prototype *everything*.
+
+whardake 5 Mar 97 11:37:35
+ - (README): Contributer name addition.
+
+whardake 5 Mar 97 15:06:41
+ - (*.c, *.h): Patch from Niels Baggesen to prototype *everything*.
+
+whardake 5 Mar 97 16:13:38
+ - (acl_vars.c): incorrectly fixed prototyping errors for write_acl().
+
+whardake 5 Mar 97 16:15:54
+ - (snmp_api.c): fixed prototyping errors in snmp_parse. Possibly wrong.
+
+whardake 5 Mar 97 16:29:05
+ - (snmp_api.c): Yep. It was wrong. Tested and works now.
+
+whardake 7 Mar 97 09:06:34
+ - (extensible/* -> mibgroup/*): moved extensible stuff to mib modules.
+
+whardake 7 Mar 97 09:07:07
+ - (snmp_vars.c): removed more non-mibgroup specific calls and headers.
+
+whardake 7 Mar 97 09:59:28
+ - (snmp_vars.h, mibgroup/*): strict-prototyping and config_require()s.
+
+whardake 7 Mar 97 10:07:53
+ - (mibmodule/versiontag): moved into place from extensible/
+
+whardake 7 Mar 97 10:34:53
+ - (hpux.[ch]): Added hpux specific files from extensible dir.
+
+whardake 7 Mar 97 10:43:08
+ - (extensible/*): cvs removing files.
+
+whardake 7 Mar 97 10:49:00
+ - (mibgroup/struct.h): moved to here.
+
+whardake 7 Mar 97 11:43:05
+ - (config*): generate a mib_module_config.h with defines of whats being used.
+
+whardake 7 Mar 97 13:39:24
+ - (makedepend.in): new make depend script
+
+whardake 7 Mar 97 13:40:40
+ - (remove-files): add makedepend.in
+
+whardake 7 Mar 97 13:46:15
+ - (Makefile.in, sedscript.in): Fix sedscript generation. sigh.
+
+whardake 7 Mar 97 13:47:45
+ - (agent/Makefile.in): make depend and extensible/ removes.
+
+whardake 7 Mar 97 13:48:59
+ - (snmp_agent.c, snmp_vars.c, snmpd.c): remove extproto.h include.
+
+whardake 7 Mar 97 13:50:15
+ - (mibgroup/Makefile.in, apps/Makefile.in, snmplib/Makefile.in): depend.
+
+whardake 7 Mar 97 13:50:52
+ - (hpux.c): ifdef a few headers for correct make depend.
+
+whardake 7 Mar 97 13:51:30
+ - (snmplib/snmp.c): remove second ctype.h include.
+
+whardake 7 Mar 97 14:01:51
+ version tag ( 3.1.4.pre3 )
+
+whardake 7 Mar 97 15:01:05
+ - (mibgroup/*): removed {} requirement from config_load_mib() calls.
+
+whardake 7 Mar 97 15:02:18
+ - (configure): removed {} requirement from config_load_mib() calls.
+
+whardake 7 Mar 97 16:09:58
+ - (config*): make new configure options respect $(srcdir).
+
+whardake 7 Mar 97 16:11:50
+ - (common_header.h): comment out end of #endif.
+
+whardake 10 Mar 97 16:55:46
+ - (configure.in): New configure option: --with-out-mib-modules="list".
+
+whardake 10 Mar 97 17:28:29
+ - (configure.in): space protect modules when checking for with grep.
+
+whardake 11 Mar 97 09:04:03
+ - (ip.c): freebsd2 patch.
+
+whardake 11 Mar 97 17:39:23
+ - (mibgroup/*):
+ - remove trailing ;s on bunches of functions.
+ - make everything but interfaces.c compile on irix6.3.
+ - (config*,system.c): use uname and gethostname if available.
+ - (configure.in, configure): Don't check _KERNEL if ifnet.if_mtu already works.
+
+whardake 12 Mar 97 09:28:04
+ - (mibgroup/snmp.[hc] -> mibgroup/snmp_mib.[hc]): Moved due to name clashes.
+
+whardake 12 Mar 97 15:47:00
+ - (configure.in, snmpd.c, snmp_agent.c, route_write.[ch],
+ var_route.[ch], ip.[ch], snmp.[ch] -> snmp_mib.[ch]):
+ - Moved snmp mib module -> snmp_mib for naming conflicts with snmplib.
+ - Moved snmp_var_route.c -> mibgroup/var_route.c
+ - Moved write_route.c -> mibgroup/write_route.c
+
+whardake 12 Mar 97 15:48:37
+ - (*/Makefile.in): make depend update.
+
+whardake 12 Mar 97 15:55:20
+ - (mibgroup/README): doc update from Dave Shield.
+
+whardake 12 Mar 97 17:15:20
+ - (snmp_api.c): returns from inet_addr are in_addr_t (u_int) not u_long.
+
+whardake 13 Mar 97 09:37:37
+ - (config*): check for in_addr_t and define as u_int (32 bits) if not present.
+ - (apps/*.c, party_parse.c): use it.
+
+whardake 13 Mar 97 10:14:59
+ - (extensible_subtrees.h): Removed file.
+
+whardake 13 Mar 97 14:35:05
+ - (agent/*, mibgroup/*): moved alarm, context, views, event, party,
+ and acl variable groups to mibgroup/.
+
+whardake 13 Mar 97 14:44:55
+ - (kernel_sunos5.[ch]): moved to mibgroup/.
+ - (route_write.c, snmp_var_route.c): delete from agent dir.
+
+whardake 13 Mar 97 15:35:26
+ - (hpux.c, memory.c, memory.h): Patch from Dave Shields to fix minor problems.
+
+whardake 13 Mar 97 15:36:14
+ - (view_vars.c, context_vars.c, acl_vars.c): don't include snmpv2_vars.h.
+
+whardake 13 Mar 97 15:45:14
+ - (config*): check for system dependent modules.
+
+whardake 13 Mar 97 15:46:16
+ - (*/Makefile.in): New make depend rules to seperate system/non dependent stuff.
+
+whardake 13 Mar 97 16:07:52
+ - (*/Makefile.in): make depend and rule fixes as well.
+
+whardake 13 Mar 97 16:10:58
+ - (config*): remove duplicate gethostname check.
+
+whardake 13 Mar 97 16:17:59
+ - (apps/*/Makefile.in): depend problems fix.
+
+whardake 13 Mar 97 17:17:32
+ - (common_header.h): fix path to alarm.h.
+
+whardake 13 Mar 97 17:47:32
+ - (many): Patch from Niels Baggensen:
+ - A large number of problems with the Linux port
+ - Some problems with NetBSD 1.2C, but it's still not perfect
+ - More (symbolic) debug output from snmpd, when using -V. -d implies -V
+ Shows you variable requested and value returned
+ - Return ipRouteMask under Solaris
+ - snmpnetstat -r shows non-standard netmasks
+ - snmpnetstat -o (new) shows interface octets, without enquiring for mtu
+ and other variables not present for a Cisco Frame-Relay virtual circuit
+ interface
+ - snmpnetstat tcp/udp print-out had ntohs/htons in wrong places for port
+ numbers (shows up on little-endian architectures)
+ - adds a maketarget script that can be used to create a parallel symlinked
+ source directory. Useful if your make does not support VPATH
+
+whardake 14 Mar 97 09:39:15
+ - (ucd-snmp.txt, mib.txt, Makefile.in): Don't build mib files anymore.
+
+whardake 14 Mar 97 09:46:31
+ - (ucd-snmp.txt): moved to mibs/.
+
+whardake 14 Mar 97 09:47:47
+ - (mib.txt): streamed down.
+
+whardake 14 Mar 97 09:50:03
+ - (mibs/{rfc1271,snmpv2,ucd-snmp}.txt): New mibs directory for sub-mibs.
+
+whardake 14 Mar 97 10:48:35
+ - (Makefile.in, config*, mibs/Makefile.in): enable mibs/ make install.
+
+whardake 14 Mar 97 10:49:03
+ - (ucd-snmp.txt): remove the last of the sed script defs.
+
+whardake 14 Mar 97 11:01:19
+ - (snmpd.1.def): Updated to include -c/-C and SNMPCONFPATH env var.
+
+whardake 14 Mar 97 11:07:16
+ - (Makefile.in): Fix sedscript to include s# as well as s/ commands.
+
+whardake 14 Mar 97 11:17:06
+ - (makedepend.in): run on snmpnetstat dir also.
+
+whardake 14 Mar 97 11:18:17
+ - (agent/Makefile.in, apps/snmpnetstat/Makefile.in): make depend.
+
+whardake 14 Mar 97 11:20:39
+ - (snmp_vars_event.h): axe.
+
+whardake 14 Mar 97 11:22:29
+ - (snmp_groupvars.h): axe.
+
+whardake 14 Mar 97 13:51:59
+ - (configure.in, apps/Makefile.in): fix trap by including optional .o files.
+
+whardake 14 Mar 97 13:53:22
+ - (snmpd.c, context_parse.c, party_parse.c, system.[ch]):
+ - 64bit fix: get_myaddr() should return int not long.
+
+whardake 14 Mar 97 13:54:22
+ - (acconfig.h, ucd-snmp.txt): recognize new hosts for sysObjectId.
+
+whardake 14 Mar 97 13:55:50
+ version tag ( 3.1.4.pre4 )
+
+whardake 14 Mar 97 16:16:52
+ - (mibgroup/README): Update from Dave Shield.
+
+whardake 18 Mar 97 16:52:34
+ - (FAQ): Update from Dave Shield.
+
+whardake 18 Mar 97 16:53:26
+ - (FAQ): snmp.conf -> snmpd.conf
+
+whardake 24 Mar 97 09:49:54
+ - (memory.c): prototype write function better.
+
+whardake 24 Mar 97 09:50:49
+ - (example.c,.h): New example mib module duplicating the passtest
+ script in C code.
+
+whardake 24 Mar 97 09:51:16
+ - (Makefile.in): Watch out for multiple spaces in C defs.
+
+whardake 24 Mar 97 09:51:33
+ - (README): runs on bsdi 2.1.
+
+whardake 24 Mar 97 13:56:50
+ - (FAQ): Patch from Dave Shield.
+
+whardake 25 Mar 97 09:39:01
+ - (EXAMPLE.conf.def): added syslocation and syscontact examples.
+
+whardake 25 Mar 97 13:30:05
+ - (INSTALL): minor doc update for new flags.
+
+whardake 26 Mar 97 17:05:11
+ - (mibgroup/system.c): report agent uptime rather than system uptime.
+
+whardake 22 Apr 97 08:42:01
+ - (FAQ): various updates.
+
+whardake 22 Apr 97 15:02:56
+ - (many): Patch from Niels Baggesen to fix various things, mostly on linux.
+
+whardake 22 Apr 97 15:20:30
+ - (README.smux, smux.c, smux.h, snmp_bgp.c, snmp_ospf.c, snmp_rip2.c):
+ - smux support for gated from Rohit Dube.
+
+whardake 22 Apr 97 15:47:06
+ - (common_header.h): remove duplicate (warning) TCP defines on osf4 systems.
+
+whardake 22 Apr 97 15:51:44
+ - (snmp_bgp.[ch], snmp_rip2.[ch], snmp_ospf.[ch]):
+ - conform to new module standards of coding.
+
+whardake 22 Apr 97 16:41:10
+ - (snmp_bgp.c, snmp_rip2.c, snmp_ospf.c, smux.[ch]):
+ - standardize headers for autoconf.
+ - smux_init() -> init_smux().
+ - SMUXDEBUG -> DODEBUG (--enable-debugging turns this on automatically).
+
+whardake 22 Apr 97 17:45:09
+ - (config*, smux.c): Check for headers and define FD_COPY if not defined.
+
+whardake 22 Apr 97 20:49:15
+ version tag ( 3.1.4.pre5 )
+
+whardake 9 May 97 22:38:15
+ - (mib.[ch], parse.[ch], Makefile.in): New parser from Dave Shield:
+ - Run-time control of initial module loading
+ (uses env variables MIBDIRS, MIBS, and MIBFILE)
+ - Defined interfaces for loading modules and retreiving entries
+ - Module scoping now includes Textual Conventions
+ - Tokens implemented internally no longer require importing the
+ corresponding modules
+
+whardake 9 May 97 22:46:30
+ - (smux.c, config*):
+ - check for sgtty.h and prototype better.
+
+whardake 9 May 97 22:46:46
+ - (TODO): Update.
+
+whardake 9 May 97 23:52:40
+ - (smux.[ch]): patches from Niels Baggesen: prototyping.
+
+whardake 10 May 97 00:03:32
+ - (mib.c, parse.c): patches from Niels Baggesen: prototyping (mostly).
+
+whardake 10 May 97 00:28:25
+ - (parse.c): Patch from Dave Shields: negative numbers in mibs.
+
+whardake 10 May 97 00:46:44
+ - (parse.c): Patch from Dave Shields: deal with anonymous IDs.
+
+whardake 10 May 97 00:50:20
+ - (parse.c): Patch from Dave Shields: deal with anonymous IDs (even better).
+
+whardake 10 May 97 16:41:23
+ - (bug-report): Patch from Dave Shields: don't submit blank bug-reports.
+
+whardake 10 May 97 16:45:14
+ - (FAQ): Patch from Dave Shields: update.
+
+whardake 10 May 97 16:52:11
+ - (mib_api.3): New file from Dave Shield.
+
+whardake 10 May 97 17:23:21
+ - (snmpd.c, read_config.c, system.c): Patch from Niels Baggesen:
+ - default trap community.
+ - multiple trap sinks.
+
+whardake 12 May 97 08:43:59
+ - (config*, extensible.c): BSDI3 specific headers and defines.
+
+whardake 12 May 97 08:44:19
+ - (agent/Makefile.in): removed CCHACK ???.
+
+whardake 12 May 97 08:48:13
+ - (INSTALL, README, TODO): documentation update.
+
+whardake 12 May 97 08:49:23
+ - (man/Makefile.in): install mib_api.3.
+
+whardake 12 May 97 08:52:48
+ - (mibs/ucd-snmp.txt): Patch from Mario DeFazio to fix typos.
+ - compiles under SNMPc 4.1g.
+
+whardake 13 May 97 10:51:28
+ - (IF-MIB.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:29
+ - (ucd.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:31
+ - (EtherLike-MIB.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:32
+ - (HOST-RESOURCES-MIB.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:33
+ - (IANAifType-MIB.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:35
+ - (IP-MIB.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:36
+ - (SNMPv2-CONF.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:37
+ - (SNMPv2-MIB.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:39
+ - (SNMPv2-SMI.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:40
+ - (SNMPv2-TC.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:42
+ - (SNMPv2-TM.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:43
+ - (TCP-MIB.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:45
+ - (UDP-MIB.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:46
+ - (SNMPv2-PARTY-MIB.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:48
+ - (SNMPv2-M2M-MIB.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:49
+ - (RFC1271-MIB.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:51
+ - (RFC1155-SMI.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:51:52
+ - (RFC1213-MIB.txt): New mib file from Niels Baggesen.
+
+whardake 13 May 97 10:52:12
+ - (ucd.txt): whoops. Removed.
+
+whardake 13 May 97 11:57:10
+ - (rfc1271.txt): removed.
+
+whardake 13 May 97 12:02:26
+ - (snmpv2.txt): removed.
+
+whardake 13 May 97 12:03:04
+ - (mibs/Makefile.in): removed snmpv2.txt, rfc1271.txt.
+
+whardake 13 May 97 14:48:59
+ - (ucd-snmp.txt): Changed ID to UCD-SNMP
+
+whardake 13 May 97 15:05:28
+ - (config*, INSTALL): New flags to set prompted values instead of prompting.
+
+whardake 13 May 97 15:05:53
+ - (README): architecture list update.
+
+whardake 13 May 97 15:36:08
+ - (UCD-SNMP-MIB.txt): moved from ucd-snmp.txt.
+
+whardake 13 May 97 15:36:51
+ - (ucd-snmp.txt): moved to UCD-SNMP-MIB.txt
+
+whardake 13 May 97 15:38:47
+ - (mibs/Makefile.in): ucd-snmp.txt -> UCD-SNMP-MIB.txt.
+
+whardake 13 May 97 16:22:13
+ - (config*,mib.c): New configure option --with-default-mibs="list:list".
+
+whardake 14 May 97 11:41:09
+ - (Makefile.in, mib.txt): removed mib.txt from distribution. No longer needed.
+
+whardake 14 May 97 13:13:19
+ - (Makefile.in): warn if mib.txt is installed from a previous release.
+
+whardake 14 May 97 13:18:02
+ - (Makefile.in, agent/Makefile.in): Patch from Oddbjorn Steffensen:
+ - Protect against bash needing ';'s on multiple subdir makes.
+
+whardake 14 May 97 13:45:24
+ - (snmpd.c): Typecast malloc.
+
+whardake 14 May 97 15:00:22
+ version tag ( 3.1.4.pre6 )
+
+whardake 15 May 97 11:22:18
+ - (interfaces.c): patch from Martin Jacobsson for FreeBSD
+
+whardake 15 May 97 11:23:29
+ - (parse.c): Patch from Dave Shield to fix purely numeric OIDs.
+
+whardake 15 May 97 11:28:15
+ - (INSTALL): patch from Niels Baggesen to reference the maketarget script.
+
+whardake 15 May 97 11:29:33
+ - (mib_api.3): patch from Niels Baggesen: MIBS variable can be set to ALL.
+
+whardake 15 May 97 11:30:01
+ - (UCD-SNMP-MIB.txt): patch from Niels Baggesen: import indentifiers.
+
+whardake 15 May 97 11:31:01
+ - (SNMPv2-SMI.txt): patch from Niels Baggesen: ccitt -> 0.
+
+whardake 15 May 97 11:32:56
+ - (mib.c, parse.c): patch from Niels Baggesen:
+ - prototyping and null checking.
+ - if MIBS is set to ALL, parse everything found.
+
+whardake 15 May 97 14:37:39
+ - (parse.c): patch from Dave Shield:
+ - deal with multiple module ID's being referenced or nodes defined.
+ - supress "name clash" warnings for anonymous nodes.
+
+whardake 15 May 97 15:22:51
+ - (parse.h): Patch from Dave Shield: Add new node structure entries.
+
+whardake 15 May 97 16:01:18
+ - (config*, mib.c):
+ - Changed env variable MIBFILE -> MIBFILES (since it is a list now).
+ (will accept MIBFILE for backwards compatibility).
+ - By default, *no* additional mibfiles are loaded (ie, mib.txt is no
+ longer loaded) and must be turned on through configure or the env var.
+ - New configure options to set default MIBS, MIBFILES, MIBDIRS.
+
+whardake 15 May 97 16:22:19
+ - (configure*, INSTALL):
+ - Display defaults in configure --help lines.
+
+whardake 15 May 97 16:26:12
+ - (configure*, INSTALL):
+ - Wording and order changes in configure --help lines.
+
+whardake 15 May 97 16:43:37
+ - (udp.c): Patch from Martin Jacobssen:
+ - Fix udp_inpcb structures.
+
+whardake 16 May 97 11:25:30
+ - (parse.c): Protect malloc against 0 external imports.
+
+whardake 20 May 97 08:03:35
+ - (udp.c): Only do Martin Jacobssen's fixes for freebsd2.
+
+whardake 20 May 97 08:18:49
+ - (SNMPv2-TC.txt): Comment out ObjectSyntax import.
+
+whardake 20 May 97 08:19:12
+ - (parse.c): protect against 0 import calls.
+
+whardake 20 May 97 08:19:28
+ - (mib.c, snmp_auth.c): include sys/select.h for AIX.
+
+whardake 20 May 97 10:08:25
+ version tag ( 3.1.4.pre7 )
+
+whardake 20 May 97 11:24:27
+ - (udp.c): Patch from Martin Jacobsson: Fix my cpp stupidity.
+
+whardake 20 May 97 16:50:18
+ - (TODO): snmpset should check against size defined in mib.
+
+whardake 20 May 97 16:50:55
+ - (parse.c): code from Dave Shield: add back in find_node() for perl usage.
+
+whardake 21 May 97 10:13:38
+ - (NEWS): Update for 3.2.
+
+whardake 21 May 97 15:38:32
+ - (NEWS): Changes from Dave.
+
+whardake 21 May 97 15:40:31
+ - (FAQ): Changes from Dave.
+
+whardake 22 May 97 13:13:59
+ - (SNMPv2-M2M-MIB.txt): restored. Got truncated.
+
+whardake 23 May 97 13:35:14
+ - (acconfig.h, config.h.in): Set default MIB list.
+
+whardake 23 May 97 13:36:17
+ - (snmpd.c): Patch from Niels Bagessen to fix endiannes problems.
+
+whardake 23 May 97 13:37:02
+ - (HOST-RESOURCES-MIB.txt, SNMPv2-TC.txt): From Niels: change import clauses.
+
+whardake 23 May 97 13:37:39
+ - (snmp_client.c): Patch from Niels Bagessen to fix endiennes problems.
+
+whardake 23 May 97 13:38:13
+ - (snmp_api.c): Patch from Niels Bagessen to fix multiple frees in v2 pdu's.
+
+whardake 23 May 97 13:40:09
+ - (mib.c): Patch from Dave Shields to fix SNMP perl again.
+
+whardake 23 May 97 13:40:32
+ - (snmp_api.h): Change trap types from int to long.
+
+whardake 23 May 97 16:23:56
+ version tag ( 3.1.4.pre8 )
+
+whardake 23 May 97 16:34:33
+ - (mib_api.3): Modifiy to note default mibs.
+
+whardake 26 May 97 10:50:20
+ - (INSTALL, configure): default mibs listed correctly.
+
+whardake 26 May 97 10:52:12
+ - (snmp_api.h): trap long's back to ints, bad solution.
+
+whardake 26 May 97 10:56:19
+ - (snmpcheck.def): new variables to set walk/get/set command line usage.
+
+whardake 26 May 97 11:38:41
+ - (parse.c): Patch from niels Baggesen to:
+ - close mibfiles for MIBS=ALL.
+ - Allow SYNTAX DisplayString (SIZE(1..255)) inside OBJECT-TYPE.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.1.2.1 -> V3.1.3
+
+whardake 10 Jan 97 08:43:42
+ - (COPYING): Update for 97.
+
+whardake 10 Jan 97 08:46:00
+ - (config*): Check for /dev/ksyms for solaris kernel.
+
+whardake 10 Jan 97 08:46:36
+ - (snmptrapd.c): Remove broken FD_SET code.
+
+whardake 14 Jan 97 16:45:33
+ - (PORTING, README, TODO): Added ucd-snmp-coders as default mail address.
+
+whardake 17 Jan 97 09:28:56
+ patch niels.0
+
+whardake 17 Jan 97 11:51:40
+ - (snmpd.c, extensible.c):
+ - New arg -c FILE: Read FILE as a configuration file as well.
+ - New arg -C: Don't read default configuration files.
+ - New env SNMPCONFPATH: Read snmpd{,.local}.conf files in : seperated path.
+
+whardake 17 Jan 97 11:58:46
+ - (snmpd.c):
+ - Usage() update and version printout update.
+
+whardake 17 Jan 97 14:55:28
+ Dave Shield patches
+
+whardake 20 Jan 97 11:17:53
+ Niel's patches integrated
+
+whardake 20 Jan 97 15:09:25
+ - Patches from Dave Shield <D.T.Shield@csc.liv.ac.uk>:
+ - implemented: interfaces.ifTable.ifEntry.ifSpecific,
+ ip.ipRoutingDiscards,
+ ip.ipAddrTable.ipAddrEntry.ipAdEntReasmMaxSize,
+ ip.ipRouteTable.ipRouteEntry.ipRouteMask ,
+ ip.ipRouteTable.ipRouteEntry.ipRouteMetric5,
+ ip.ipRouteTable.ipRouteEntry.ipRouteInfo, ip.ipNetToMediaTable,
+ udp.udpTable.
+ - udp connection table.
+ - ipNetToMedia.
+
+ - Patches from Niels Baggesen <Niels.Baggesen@uni-c.dk>:
+ - udpNoPort, tcpInErrs fixes for Solaris.
+ - linux application support.
+ - snmp variable group.
+ - simple cold start traps via exec('snmptrap').
+ - MIB parser fixes.
+ - Memory/free allocation fixes.
+
+whardake 20 Jan 97 15:22:53
+ - Patches from Niels Baggesen <Niels.Baggesen@uni-c.dk>:
+ - (snmp_client.c): Wait 120 seconds before returning.
+
+whardake 20 Jan 97 15:37:08
+ - (config*): Autoheader is dumb: Put macro defines belowe @BOTTOM@ symbol.
+
+whardake 20 Jan 97 15:38:59
+ - (snmp_vars.c, extensible.c, read_config.c): Remove ANSI cpp #elif's.
+
+whardake 20 Jan 97 15:50:37
+ - (snmp_vars.c): bsdi #ifdef fixes.
+
+whardake 20 Jan 97 15:55:45
+ - (snmp_vars.c): Patch from Martin Jacobsson <martin@exmandato.se>:
+ - add bsdi to some #ifdefs.
+
+whardake 20 Jan 97 15:58:51
+ - (extensible.c): Patch from Martin Jacobsson <martin@exmandato.se>:
+ - watch out for string lengths on version desc and sysname.
+
+whardake 20 Jan 97 16:38:20
+ patrice.1 patch
+
+whardake 20 Jan 97 16:43:25
+ - (snmp_api.c, snmp_client.[ch]):
+ - Patch from Patrice VANACKER <vanacker@worldnet.fr>:
+ - fix request deletions in snmp_read().
+ - added return argument to snmp_add_null_var().
+
+whardake 20 Jan 97 16:59:02
+ - (extensible.c): Patch from sxjzhang@sss.ssi1.com:
+ - fix disk reporting on sunos 4.1.3 with ODS 1.0.
+
+whardake 20 Jan 97 16:59:56
+ version tag ( 3.1.3.pre1 )
+
+whardake 21 Jan 97 08:33:04
+ - (read_config.c): Patch from Karl Lehenbauer <karl@hammer1.ops.NeoSoft.com>:
+ - #if DODEBUG -> #ifdef DODEBUG.
+
+whardake 21 Jan 97 08:33:52
+ - (snmpd.c): remove second char definition.
+
+whardake 21 Jan 97 08:34:32
+ - (snmp_client.h): remove second (wrong) function prototype.
+
+whardake 21 Jan 97 09:17:42
+ - (snmp_var_route.c, snmp_vars.c):
+ - Patch from Karl Lehenbauer <karl@hammer1.ops.NeoSoft.com>
+ - handle multiple interface names > 10 properly.
+
+whardake 29 Jan 97 10:47:40
+ bug reporting script add
+
+whardake 29 Jan 97 12:07:00
+ - (bug-report):
+ - Always use multipart: version info and config.cache are one.
+ - re-arranged a bit.
+ - Added introduction.
+ - Guess at domain name if possible.
+
+whardake 29 Jan 97 12:07:59
+ - (acconfig.h):
+ - SNMPBLOCK = !SNMPBLOCK
+
+whardake 29 Jan 97 12:09:05
+ - (aclocal.m4): Fix check_struct_for to define things correctly.
+
+whardake 29 Jan 97 12:10:28
+ - (configure.in): New ps options to check for.
+
+whardake 29 Jan 97 12:11:04
+ - (FAQ): revision one!
+
+whardake 29 Jan 97 12:11:29
+ - (config.h.in, configure): update
+
+whardake 29 Jan 97 12:58:46
+ - (kernel.c, snmp_agent.c, snmpd.c): Patch from Niels Baggesen:
+ - Fix various warnings/errors.
+ - Implement real traps.
+
+whardake 29 Jan 97 13:03:15
+ - (versiontag): Modify ../../bug-report as well.
+
+whardake 29 Jan 97 13:08:11
+ - (bug-report):
+ - change to address (back) to ucd-snmp-coders.
+ - Add a trap on signals to remove tmp files.
+
+whardake 31 Jan 97 09:58:10
+ - (config*): Check for kstat.h and if sysctl can read the boottime.
+
+whardake 31 Jan 97 10:01:59
+ - (snmp_var_route.c, snmp_vars.c): Patch from Martin Jacobsson:
+ - Change some system specific ifdefs to CAN_USE_SYSCTL.
+ - Fix compliation errors on bsdi2.
+ - Fix routing tables for similar.
+
+whardake 31 Jan 97 10:49:07
+ - (versiontag): uh, commit it again.
+
+whardake 31 Jan 97 10:50:04
+ - (configure.in, configure): fire off ksh if hpux && sh.
+
+whardake 31 Jan 97 10:59:43
+ - (configure.in, configure): changed arch to hppa and make sure /bin/ksh exists.
+
+whardake 31 Jan 97 11:03:11
+ version tag update
+
+whardake 3 Feb 97 10:02:12
+ - (bug-report): Patch from Dave Shield:
+ - domain name fix and editor bomb out.
+
+whardake 3 Feb 97 10:03:10
+ - (EXAMPLE.conf.def): comment out possible security problem lines.
+
+whardake 3 Feb 97 10:46:02
+ - (configure.in):
+ - Check for whoami, logname.
+ - Don't pass null args to ksh.
+
+whardake 3 Feb 97 10:47:04
+ - (snmp_vars.c): Patch from Dave Shield
+ - Mark stuff for later changes.
+
+whardake 3 Feb 97 10:48:06
+ - (snmplib/system.c): Use CAN_USE_SYSCTL instead of bsdlike.
+
+whardake 3 Feb 97 11:50:23
+ - (config*):
+ - Check for irix 6.2 headers.
+ - Check if _KERNEL needs to be defined for irix and ifnet usage.
+ - Use the found UNAME program instead of assuming we have it.
+
+whardake 3 Feb 97 12:44:51
+ - (snmplib/system.c): typo: needs a space between 'static' and 'struct'.
+
+whardake 3 Feb 97 12:47:58
+ - (snmp_vars.c): add some irix appropriate includes.
+
+whardake 3 Feb 97 12:51:04
+ - (README): remove project history.
+
+whardake 3 Feb 97 13:15:11
+ - (README):
+ - added FAQ pointer.
+ - Dave's English pointers (ie, he proofed it and I, uh, don't...).
+ - switch ftp mirror.
+ - bug-report script mentioned.
+ - I -> We, me -> us...
+
+whardake 3 Feb 97 13:33:11
+ - (README, NEWS, TODO): Update for 3.1.3.
+
+whardake 3 Feb 97 13:53:04
+ - (bug-report): move config.cache to end of message.
+
+whardake 3 Feb 97 13:55:05
+ version tag ( 3.1.3.pre3 )
+
+whardake 4 Feb 97 09:35:02
+ - (FAQ): Dave's latest revision.
+
+whardake 4 Feb 97 09:35:37
+ - (TODO): Added suggestions from ucd-snmp-coders.
+
+whardake 4 Feb 97 09:36:43
+ - (configure, configure.in): Fix hpux problems, *again*.
+
+whardake 4 Feb 97 09:37:26
+ - (mib.c): Patch from Simon: comment #ifdef endings for ANSI compliers.
+
+whardake 4 Feb 97 09:41:39
+ - (FAQ): Added TOC and autor notes ;-).
+
+whardake 5 Feb 97 16:33:01
+ - (FAQ): Dave updated architecture lists.
+
+whardake 5 Feb 97 16:33:32
+ - (TODO): misc requested additions.
+
+whardake 5 Feb 97 17:07:25
+ - (configure, configure.in): Put /dev/ksyms ahead of /kernel/unix.
+
+whardake 5 Feb 97 17:11:15
+ - (many): Patch from Niels Baggesen:
+ - snmp mib group cleanups.
+ - trap generation cleanups.
+ - added man entries for trap generation.
+ - improved agent debugging output with agent's -d flag.
+
+whardake 5 Feb 97 17:13:09
+ - (system.c): Patch from Dave Shield to fix nlist problems.
+
+whardake 5 Feb 97 17:20:10
+ - (bug-report): Change subject line to shorten and force better description.
+
+whardake 5 Feb 97 17:23:41
+ - (tcl, tk, snmptcl): Nuked.
+
+whardake 5 Feb 97 17:25:03
+ - (NEWS): removed tcl stuff.
+
+whardake 5 Feb 97 17:29:54
+ - (Makefile.in, configure.in): removed tcl stuff.
+
+whardake 5 Feb 97 17:41:50
+ version tag ( 3.1.3.pre4 )
+
+whardake 10 Feb 97 09:22:03
+ - (FAQ): Dave Shields' additions: finding more info.
+
+whardake 10 Feb 97 09:22:53
+ - (snmpnetstat/main.c): Remove malloc prototype, now in stdlib.h.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.1.2 -> V3.1.2.1
+
+whardake 5 Dec 96 09:13:56
+ - (if.c): #ifndef -> #ifdef for sigset.
+
+whardake 5 Dec 96 09:14:59
+ - (md5.c): remove ansi specific C features (unsigned constants).
+
+-------------------------------------------------------------------------------
+
+Changes: V3.1.1 -> V3.1.2
+
+whardake 17 Oct 96 07:02:58
+ version tag ( 3.1.1.BSDI )
+
+whardake 30 Oct 96 13:47:21
+ - (PORTING,README): Add a new PORTING file to reference autoconf plee.
+
+whardake 30 Oct 96 13:49:09
+ - (config*, ece-mib.def):
+ - Change extensible mib location to ucdavis enterprise mib: 2021.
+ - Remove associated prompting from configure script and etc.
+
+whardake 31 Oct 96 17:06:16
+ - (read_config.c): numdisks was being incremented before last usage.
+
+whardake 1 Nov 96 08:54:11
+ - (asn1.c): Patch from Simon Leinen <simon@switch.ch>:
+ - asn_build_unsigned_int, asn_build_unsigned_int64:
+ - Don't try to strip FFs from the high end of unsigned values.
+ - Skip the stripping code entirely if we have to add a null byte.
+
+whardake 4 Nov 96 09:30:46
+ - (config*, snmp_vars.c, extensible.c): More include checks for linux.
+
+whardake 4 Nov 96 10:08:49
+ - (config*): Check for nlist in -lmld (irix).
+
+whardake 7 Nov 96 09:16:45
+ - NetBSD 3.1.0.1 branch merge.
+
+whardake 7 Nov 96 09:24:23
+ - Niels 3.1.1 branch merge.
+
+whardake 7 Nov 96 09:35:52
+ - BSDi2 3.1.1 branch merge.
+
+whardake 7 Nov 96 09:57:16
+ - (versiontag): Only tag release versions (Ext*).
+
+whardake 7 Nov 96 14:16:00
+ - (configure.in, configure): Changed default SNMPV2AUTH to SNMPV1.
+
+whardake 7 Nov 96 14:16:39
+ - (snmp_var_route.c): ifdef's around strings.h.
+
+whardake 7 Nov 96 14:17:17
+ - (snmp_vars.c): ifdef typos.
+
+whardake 7 Nov 96 14:19:33
+ - (mib.c): typecast for sprint_objid().
+
+whardake 8 Nov 96 17:03:47
+ - (Makefile.in): Created a 'touchit' to touch config files properly.
+
+whardake 8 Nov 96 17:06:46
+ - (Makefile.in): Fixed 'touchit'.
+
+whardake 14 Nov 96 15:14:50
+ - (extensible.c): Use statfs if statvfs is unavailable.
+
+whardake 14 Nov 96 15:16:22
+ - (snmp_vars.c):
+ - #ifdef typo.
+ - prototype for Interface_Scan_Init().
+ - Check for existance of tcpstat.tcps_rcvmemdrop before using.
+
+whardake 14 Nov 96 15:17:36
+ - (config*):
+ - Check for existance of tcpstat.tcps_rcvmemdrop.
+ - Check for sys/vfs.h.
+
+whardake 14 Nov 96 15:24:24
+ - (snmptrap.c, inet.c, route.c): typecasting warning fixes.
+
+whardake 15 Nov 96 16:43:33
+ - (config*, extensible.c): Make uname calls work correctly.
+
+whardake 15 Nov 96 16:44:11
+ - (parse.c): Add back in "reading mib..." debugging statments.
+
+whardake 22 Nov 96 08:18:29
+ - (snmp_vars.c): Trash interface caching.
+
+whardake 22 Nov 96 09:06:10
+ - (snmp_vars.c): Merge from FreeBSD2-3-1-1.
+ - Add checks for ifnet.[io]bytes.
+
+whardake 22 Nov 96 09:14:22
+ - (config*): Add checks for ifnet.[io]bytes.
+
+whardake 22 Nov 96 11:35:29
+ - (agent/extensible/*.c, new: extproto.h): Removed all -Wall warnings!
+
+whardake 22 Nov 96 14:38:05
+ - (config*, install-sh, mkinstalldirs): Upgraded to autoconf 2.11.
+
+whardake 22 Nov 96 15:10:36
+ - (extensible.c, read_config.c): removed more -Wall warnings.
+
+whardake 24 Nov 96 16:25:07
+ - (kernel.c, config*, INSTALL): New configure switch: --without-root-access.
+ - The agent doesn't exit if it can't open /dev/kmem.
+
+whardake 24 Nov 96 16:45:27
+ version tag ( 3.1.2.pre1 )
+
+whardake 25 Nov 96 08:44:03
+ - ({agent,apps}/Makefile.in): Put libsnmp.a in front of -l libs.
+
+whardake 25 Nov 96 09:15:57
+ - (config*, snmp_impl.h): Moved void -> char define to a configure test.
+
+whardake 27 Nov 96 08:02:06
+ - (snmp_vars.c): Patch from Dave Shield <D.T.Shield@csc.liv.ac.uk>:
+ - Change comments to reflect what its actually looking at.
+ - Remove ifdef around ifnet declarations.
+
+whardake 27 Nov 96 08:03:47
+ - (extensible.c): Patch from Dave Shield <D.T.Shield@csc.liv.ac.uk>:
+ - Remove return(0) on void init_extensible().
+
+whardake 27 Nov 96 08:06:04
+ - (configure, configure.in): Default sysloc UCDavis -> Unknown.
+
+whardake 27 Nov 96 08:21:20
+ - (INSTALL): Typo: 3.1.3 -> 3.0.3.
+
+whardake 27 Nov 96 08:21:34
+ - (README): Update.
+
+whardake 27 Nov 96 08:34:12
+ - (if.c): Patch from Dave Shield <D.T.Shield@csc.liv.ac.uk>:
+ - Watch out for interface names with ' ' in them.
+ - Reset signal on BSD signal implementations.
+
+whardake 27 Nov 96 08:45:46
+ - (if.c): Reset signal on all types of signal implementations.
+
+whardake 27 Nov 96 08:56:44
+ - (configure.in, configure): Truncate system names beyond [-_].*.
+
+whardake 2 Dec 96 08:55:49
+ - (snmp_vars.c): Patch from Dave Shield <D.T.Shield@csc.liv.ac.uk>:
+ - ifPhysAddr - in Interface_Get_Ether_By_Index, HP-UX has the same
+ EtherAddr strucure as MIPS.
+
+ - ipAdEntIfIndex - in var_ipAddrEntry, there is a false match on
+ the loopback interface, giving the wrong answer of the first
+ interface index.
+
+ - udpInErrors - in var_udp, the count of UDP errors omits discarded
+ packets. Some systems (i.e. HP-UX) have extended the udpstat
+ structure to include these. I'v tweaked this analogous to a
+ similar addition in the tcpstat structure.
+
+ - tcpConnState - HP-UX has added an extra state into the list, which
+ throws the rest of them out.
+
+whardake 3 Dec 96 10:04:02
+ - (config*, snmp_vars.c):
+ - Wrote AC_CHECK_STRUCT_FOR and use it.
+ - Make AC_CHECK_IFNET_FOR use above.
+ - Changequote '[]' -> '' around sed expression with []s (-Dostype).
+
+whardake 3 Dec 96 10:05:17
+ - (md5.c): Put 'U'nsigned marker at end of constants to remove gcc warns.
+
+whardake 3 Dec 96 11:04:33
+ - (snmp_vars.c): From Dave Shield <D.T.Shield@csc.liv.ac.uk>:
+ - Fix arp table for hpux.
+ - (config*): Check for arphd.at_next and use in above.
+
+whardake 3 Dec 96 11:14:43
+ - (EXAMPLE.conf.def, passtest): Move passtest to ucdavis subtree.
+
+whardake 3 Dec 96 14:51:24
+ - (ece-mib.def): Used -> Avail in memory sequence.
+
+whardake 4 Dec 96 09:16:09
+ - (asn1.c, parse.c, snmp_api.c, snmp_client.c):
+ - Patch from Niels Baggesen <Niels.Baggesen@uni-c.dk>:
+ - Parser fixes for multiple nodes.
+ - memmove/copy deletes.
+
+whardake 4 Dec 96 09:49:38
+ - (PORTING, README): Update for release 3.1.2.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.1.0.1 -> V3.1.1
+
+whardake 11 Sep 96 08:49:14
+ - (read_config.c): Fixed community number checks.
+
+whardake 24 Sep 96 16:54:59
+ - (config*, snmp_api.c, snmp_client.c): Added sys/select.h for AIX.
+
+whardake 24 Sep 96 16:59:26
+ - (snmp_var_route.c, snmp_vars.c): typos.
+
+whardake 24 Sep 96 17:02:47
+ - (snmp_vars.c): Moved a variable declairation.
+
+whardake 24 Sep 96 17:16:58
+ - (snmp_var_route.c): typo fixing a typo (sigh..).
+
+whardake 25 Sep 96 14:14:53
+ - (snmp_var_route.c): freebsd2 typecast.
+
+whardake 1 Oct 96 15:30:46
+ - (parse.c, parse.h): From Joe Marzot:
+ - allows the CMU lib to retain the TC information associated with a
+ particular object. In particular this allows DisplayStrings to be
+ differentiated from OctetStrings when they are looked up in the
+ Mib Tree.
+
+whardake 1 Oct 96 15:54:22
+ - (extensible.c): int -> double to support larger disk sizes.
+
+whardake 1 Oct 96 16:28:52
+ - (config*, read_config.c):
+ - Check for mntent.h and include it.
+ - Check for /etc/mnttab or /etc/mtab and use appropriately.
+ - (read_config.c):
+ - pick getmntent over getfsfile if both are available.
+ - debug cleanup (ofile -> stderr, check for DODEBUG instead of const var).
+
+whardake 3 Oct 96 16:05:47
+ - (snmp_agent.c):
+ - Make agent properly check snmpset exit codes and use them (on COMMIT).
+
+whardake 3 Oct 96 16:08:59
+ - (pass.c):
+ - Check for passthru existance before returning ERR_NOERROR, else
+ return ERR_NOSUCHNAME.
+ - Correctly check for and pass "not-writable" and "wrong-type" pass returns.
+
+whardake 3 Oct 96 16:10:38
+ - (snmp_impl.h): Turn on old CMU debugging statments with --enable-debugging.
+
+whardake 4 Oct 96 09:43:40
+ - (EXAMPLE.conf.def): Added snmpget/set to pass example.
+
+whardake 4 Oct 96 09:44:26
+ - (Makefile.in): Remove spaces from sedscript when using broken cpp (gcc).
+
+whardake 4 Oct 96 09:46:09
+ - (snmpd.conf.5.def):
+ - Cleaned up man page formatting.
+ - Added note about SNMPset community strings.
+ - minor proof-reading (major proofing needed still).
+ - Re-organized a bit.
+
+whardake 4 Oct 96 10:01:20
+ - (snmpd.conf.5.def): lib -> lib/snmp path correction in FILES section.
+ - (snmpd.1.def):
+ - Added a FILES section.
+ - General clean up.
+
+whardake 7 Oct 96 07:41:40
+ - (parse.c): Now loads all mibs (files) in the directory SNMPLIB/mibs.
+
+whardake 7 Oct 96 07:49:59
+ - (parse.c): Proper autoconf dirent headers.
+
+whardake 7 Oct 96 08:01:43
+ - (Makefile.in): Mib installation changed to reflect new mib directory.
+
+whardake 7 Oct 96 08:53:06
+ - (config*): check correctly for get/setmntent.
+
+whardake 7 Oct 96 09:11:43
+ - (snmp_agent.c): Removed snmp version check on error return from set.
+
+whardake 7 Oct 96 09:12:23
+ - (read_config.c): Use getmntent correctly. Pain.
+
+whardake 7 Oct 96 10:22:47
+ - (Makefile.in):
+ - added --recheck to config.status call to regenerate self.
+ - Changed ece-mib.txt -> ucd-snmp.txt and install (and generate) properly.
+
+whardake 7 Oct 96 10:23:32
+ - (extensible.c): Chomp newline on uname output.
+
+whardake 7 Oct 96 10:24:12
+ - (read_config.c): Added 'syscontact' and 'syslocation' parsing.
+
+whardake 7 Oct 96 11:00:10
+ - (configure.in):
+ - timestamp stamp-h at end.
+ - emacs local vars.
+
+whardake 7 Oct 96 11:01:25
+ - (read_config.c): Remove extra args from strcpy (was strncpy).
+
+whardake 7 Oct 96 11:02:46
+ - (configure.in):
+ - timestamp stamp-h at end.
+ - emacs local vars.
+
+whardake 7 Oct 96 12:23:05
+ - (snmpd.1.def): Changed to reflect SNMPLIB/mibs.
+
+whardake 7 Oct 96 12:23:27
+ - (snmpd.conf.5.def): Added syscontact and syslocation.
+
+whardake 9 Oct 96 08:04:14
+ - (parse.c):
+ - Parse OBJECT-IDENTY as OBJECT-GROUP (saves only description).
+ - Change print_error(), read_mib() to reflect file and correct line number.
+
+whardake 9 Oct 96 08:30:29
+ - (parse.c):
+ - print a new line in print_error() if debugging is turned on.
+ - tossObjectIdentifier(): catch multiple bracket clauses (IE { {0 0} } ).
+
+whardake 9 Oct 96 14:36:03
+ - (read_config.c):
+ - strncmp -> strncasecmp.
+ - NULL -> 0.
+
+whardake 9 Oct 96 14:38:05
+ - (extensible.c):
+ - sort pass thrus by miboid to prevent passing off to wrong one.
+ - typos: exsten -> exten.
+ - init_extensible() calls update_config() to reduce duplications.
+
+whardake 9 Oct 96 15:18:42
+ - (snmp_api.c): From: gah@bellcore.com (Gary A. Hayward)
+ - Free pdu community to quelch purify.
+
+whardake 9 Oct 96 15:22:23
+ - (README): Added thanks name.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.1 -> V3.1.0.1
+
+whardake 26 Aug 96 10:36:08
+ - (NEWS) Typo, extra quotation mark.
+
+whardake 26 Aug 96 10:37:05
+ - (TODO) Extra mib parsing ideas added.
+
+whardake 26 Aug 96 10:37:36
+ - (ece-mib.def): commas out of place.
+
+whardake 26 Aug 96 16:55:51
+ - (snmp_api.c): Fixed a gcc/FreeBSD optimization bug (stupid compiler)
+
+whardake 26 Aug 96 16:58:03
+ - (event.c, kernel.c, route_write.c): FreeBSD modifications
+
+whardake 27 Aug 96 08:46:43
+ - (extensible.c): FreeBSD changes and use getloadavg if available.
+
+whardake 27 Aug 96 08:47:57
+ - (snmptrapd.c): Fix byte order problem (convert to network before sending).
+
+whardake 27 Aug 96 09:01:10
+ - (snmptrap.c):
+ - FreeBSD specific changes.
+ - more autoconf complete: paths to libraries and kernel location.
+
+whardake 27 Aug 96 09:38:33
+ - (snmp_var_route.c): FreeBSD specific changes.
+
+whardake 27 Aug 96 10:00:15
+ - (snmp_vars.c): More warped FreeBSD changes
+
+whardake 27 Aug 96 10:04:56
+ - (autoconf*):
+ - FreeBSD additions.
+ - New kernel location: /kernel (ick).
+ - Log file default intelligently checks for /var/log and /usr/adm.
+ - Checks for getloadavg().
+
+whardake 29 Aug 96 14:42:20
+ - (extensible/*.c): Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - cleaned up gcc warnings.
+ - fixed a spelling error.
+
+whardake 29 Aug 96 14:59:55
+ - (apps/*.c): Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - set exit codes of 0 for all apps.
+ - Removed SVR4 #ifdefs.
+ - Greatly improved snmptrap.
+
+whardake 29 Aug 96 15:03:12
+ - (man/snmptrap.1): added by Niels Baggesen <recnba@mediator.uni-c.dk>
+
+whardake 29 Aug 96 15:06:21
+ - (asn1.c): Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - uchar(s) can't be less than 0.
+
+whardake 29 Aug 96 15:06:50
+ - (mib.c): Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - prototypes for gcc warnings
+
+whardake 29 Aug 96 15:07:56
+ - (parse.c): Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - save mib descriptions for snmptranslate and other apps that need it.
+
+whardake 29 Aug 96 15:08:28
+ - (snmp_api.c): Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - gcc warnings NULL -> 0
+
+whardake 29 Aug 96 15:58:10
+ - (snmpstatus.c): Patch from Trevor Bourget <tbourget@qualcomm.com>
+ - malloc sysdesc instead of assuming < 128 bytes.
+
+whardake 29 Aug 96 16:03:44
+ - (snmpwalk.c): Removed SVR4 ifdefs
+
+whardake 29 Aug 96 16:22:25
+ - (autoconf*, snmp_vars.c): Removed some solaris ifdefs.
+
+whardake 29 Aug 96 16:29:10
+ - Changed my email address to my new one.
+
+whardake 30 Aug 96 09:23:05
+ - (configure, configure.in):
+ - removed -Xs flag for gcc on solaris.
+ - logfile checks for existance of /var/log and /usr/adm.
+
+whardake 30 Aug 96 09:23:42
+ - (snmptrap.c): patch screwed up.
+
+whardake 30 Aug 96 09:24:31
+ - (apps/Makefile.in): Added kernel_sunos5.o to snmptrap for getKstat.
+
+whardake 30 Aug 96 09:34:09
+ - (NEWS, ChangeLog): Updated for 3.1.0.1
+
+whardake 30 Aug 96 09:34:48
+ version tag ( 3.1.0.1 )
+
+whardake 30 Aug 96 10:15:18
+ - (README): Updated for 3.1.0.1
+
+whardake 30 Aug 96 11:49:38
+ - (snmp_vars.c): removed malloc prototype due to conflictions.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.0.7.2 -> V3.1
+
+hardaker 3 May 96 14:34:03
+ - (acconfig.h, configure.in, snmplib/Makefile.in)
+ - Added a check for various random functions.
+ - Included another ifdef to ensure no #define loops occur with str/index fns.
+
+hardaker 3 May 96 14:35:27
+ - (agent/snmp_var_route.c,snmp_vars.c)
+ - Changed the interface counter to a short for all architectures (bus err)
+ - Undefed a function that is never used.
+
+hardaker 3 May 96 14:37:17
+ - (agent/snmp_vars.c) Solaris fix for interfaces.
+ - From Dan A. Dickey <ddickey@transition.com>
+
+hardaker 3 May 96 14:40:18
+ - (apps/snmptrap.c) Added #include<sys/sockio.h>
+
+hardaker 9 May 96 13:24:00
+ - (apps/snmpset.c) Added '.' as a delimiter for decimal encoded strings.
+
+hardaker 9 May 96 13:27:40
+ - (acconfig.h, configure.in, snmplib/Makefile.in)
+ - Added a check for various random functions.
+ - Included another ifdef to ensure no #define loops occur with str/index fns.
+
+hardaker 9 May 96 13:33:12
+ - (acconfig.h,agent/{Makefile,snmp_vars.c},agent/extensible/many):
+ - Added support for passthru mibs. Total control is handed to exec's.
+
+hardaker 9 May 96 16:14:28
+ - (configure.in): Solaris specific cpp flags added for SUNspro's cpp.
+ - (agent/{snmp_vars,snmpd}.c,agent/extensible/{extensible,misc,pass}.c,
+ snmplib/{mib,snmp_client}.c):
+ - Cleaned up prototypes to match more carefully (with Solaris's spro cc).
+
+hardaker 10 May 96 10:27:14
+ - (kernel_sunos5.c): A patch to fix a virtual interface problem.
+ - patch supplied by "Dan A. Dickey" <ddickey@transition.com>
+
+hardaker 10 May 96 18:16:57
+ - (many): Mereged baggesen-3-0-7-2 branch into main trunk.
+
+hardaker 13 May 96 15:56:45
+ - (agent/extensible/misc.c): exec Names were getting included in the command.
+
+hardaker 13 May 96 15:57:43
+ - (agent/extensible/misc.c): close file descriptors before re-starting agent.
+
+hardaker 13 May 96 15:58:44
+ - (agent/snmp_agent.c, agent/snmp_vars.c, agent/extensible/extensible.c):
+ - Bug fix: GLOBALSECURITY bug: save rightmost two bits in acl.
+
+hardaker 13 May 96 15:59:30
+ - (snmplib/snmp_impl.h): Change RWRITE to include Write for V2 bits.
+
+hardaker 15 May 96 08:59:51
+ - (agent/extensible/pass.c) Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - Implemented missing parts of interface address and network output (-i)
+
+hardaker 15 May 96 09:02:24
+ - (agent/kernel_sunos5.c) Patch from "Dan A. Dickey" <ddickey@transition.com>
+ - Better caching algorithm for improved speed.
+
+hardaker 15 May 96 09:05:49
+ - (*/.cvsignore) ignore file update.
+
+hardaker 15 May 96 09:06:49
+ - (Makefile.in,sedscript.in) Added PREFIX to the sedscript.
+
+hardaker 15 May 96 09:07:35
+ - (EXAMPLE.conf.def, man/snmpd.conf.5.def): documented pass thru mibs.
+
+hardaker 15 May 96 09:29:21
+ - (COPYING, README, TODO) Release docs updated.
+
+hardaker 15 May 96 09:50:15
+ - (agent/kernel_sunos5.c) patch mistake.
+
+hardaker 15 May 96 09:51:12
+ - (agent/extensible/read_config.c): ansi semantic fix for '<'.
+
+hardaker 15 May 96 09:51:37
+ version tag ( 3.1.A1 )
+
+hardaker 15 May 96 12:00:57
+ - (INSTALL) make install as root.
+
+hardaker 15 May 96 12:03:54
+ - (README) Added a note (pointer to docs) on the agent's extensiblity.
+
+hardaker 15 May 96 12:23:40
+ - (apps/snmpnetstat/if.c) removed & in front of array passed as arg.
+
+hardaker 15 May 96 12:35:16
+ - (sedscript.in) Fixed a horrible typo. P -> PREFIX
+
+hardaker 22 May 96 08:50:28
+ - (man/Makefile.in) Updated the way sedscript is used.
+
+hardaker 22 May 96 08:51:01
+ - (config.guess, configure, install-sh, mkinstalldirs): Autoconf-2.10
+
+hardaker 22 May 96 12:50:24
+ - (agent/kernel_sunos5.c, snmp_vars.c,
+ agent/extensible/extensible.c,readconfig.c,snmp_vars.c):
+ - Patch from Niels Baggesen <recnba@mediator.uni-c.dk>:
+ - finally nailed that missing initialization that gave problems
+ with the AT subtree
+ - I also implemented the disk part of the extensibility in the
+ attached patch.
+
+hardaker 22 May 96 12:55:33
+ - (apps/snmpnetstat/if.c): Patch from Niels Baggesen <recnba@mediator.uni-c.dk>
+ - reworked the way snmpnetstat -i works.
+
+hardaker 23 May 96 14:43:49
+ - (acconfig.h, config.h.in): Don't define random if it already exists.
+
+hardaker 23 May 96 14:44:15
+ - (extensible.c): Added a disk warning to stderr.
+
+hardaker 23 May 96 14:44:39
+ - (acl.c, party.c, view.c): removed NULL defines.
+
+hardaker 23 May 96 14:56:42
+ - (if.c): type casting bugs.
+
+hardaker 23 May 96 16:28:08
+ - (acl.c, party.c): include stdio.h
+
+hardaker 23 May 96 17:09:24
+ - (config*, extensible.c): fixed disk checks on Solaris and alpha's
+ - use statvfs over fstab if both present.
+
+hardaker 23 May 96 17:48:09
+ - (config*): check for getmntent.
+
+hardaker 24 May 96 12:23:52
+ - (snmplib/parse.c): parsing fixes from Mike Perik <mikep@crt.com>
+
+hardaker 24 May 96 12:39:51
+ - (README): Added a thanks section.
+
+hardaker 24 May 96 13:08:28
+ - (EXAMPLE.conf.def): minor example file changes.
+
+hardaker 24 May 96 13:09:02
+ - (config*): Check for sys/mnttab.h
+
+hardaker 24 May 96 13:09:52
+ - (read_config.c): ifdef cleanup
+
+hardaker 24 May 96 13:10:34
+ - (parse.c): declarations cleanup
+
+hardaker 24 May 96 13:13:21
+ - (snmpd.conf.5.def): note on creating comments added.
+
+hardaker 24 May 96 13:38:46
+ - (read_config.c): #ifdef typo
+
+hardaker 24 May 96 13:54:25
+ - (acconfig.h, config.h.in): define memmove if not defined and memcpy is.
+
+hardaker 24 May 96 13:55:14
+ - (if.c, route.c): cast returns from index to char *.
+
+hardaker 24 May 96 14:02:53
+ - (config*): check for memmove before you define it.
+
+hardaker 24 May 96 14:53:20
+ - (read_config.c): printf -> DODEBUG check
+
+hardaker 24 May 96 15:28:41
+ - (accconfig.h, config.h.in): #ifdef typos
+
+hardaker 24 May 96 15:29:13
+ - (snmp_vars.c): removed some ifdef requirements.
+
+hardaker 24 May 96 15:29:29
+ - (snmp_vars.h): reorganized
+
+-------------------------------------------------------------------------------
+
+Changes: V3.0.7.1 -> V3.0.7.2
+
+Niels Baggesen <recnba@mediator.uni-c.dk> 1 May 96 12:37:35
+ - (many) Fixes for Solaris (2.5) submitted by
+ Niels Baggesen <recnba@mediator.uni-c.dk>:
+ "Some are my own, others are from Yuri Rabover who originally
+ created the patch. Some of this is there to eliminate the
+ dependency on the ucblib compatibility stuff, some is "cosmetic",
+ but it also fixes a serious problem in the agent, where walking
+ the mib tree can loop endlessly if you have multiple network
+ interfaces."
+
+hardaker 1 May 96 13:54:18
+ - (configure*, agent/extensible/{read_config,extenisble}.c):
+ - configurified (new word) some of Niels' changes and the bcopy/memmove stuff.
+
+hardaker 1 May 96 13:55:16
+ - (man/snmpd.1.def,snmpd.conf.5.def) .C -> .B, to increase nroff portability.
+
+hardaker 1 May 96 14:35:23
+ - (agent/route_write.c,agent/extensible/extensible.c):
+ - netbsd1.1B specific fixes: clash with sys_errlist and rt_dst defines.
+
+hardaker 1 May 96 14:37:09
+ - (local/snmpcheck) Tk-b10 fixes.
+
+hardaker 1 May 96 14:37:25
+ - (sedscript.in) forgot NETBSD1ID def.
+
+hardaker 1 May 96 14:56:21
+ - (acconfig.h,agent/extensible/mibdefs.h): removed coments/spaces from defines.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.0.7 -> V3.0.7.1
+
+hardaker 25 Apr 96 12:18:43
+ - (ChangeLog, acconfig.h, config.h.in) Defined DEBUGP if DODEBUG is not defined.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.0.6 -> V3.0.7
+
+hardaker 5 Apr 96 16:11:39
+ - (local/snmpcheck.def) Tk-b8 => Tk-b10 changes
+
+hardaker 5 Apr 96 16:12:22
+ - (configure) autoconf-2.7 -> autoconf-2.9
+
+hardaker 5 Apr 96 16:15:11
+ - (snmplib/asn1.c) removed a required 'unix' define surrounding a header file.
+
+hardaker 5 Apr 96 16:19:35
+ - (man/Makefile.in) Added a 'clean' definition to the Makefile.
+
+hardaker 12 Apr 96 14:51:08
+ - Changed nlist warnings to only print if DODEBUG is defined in config.h
+
+hardaker 12 Apr 96 14:51:42
+ - (agent/snmp_vars.c, agent/extensible.c)
+ - Changed nlist warnings to only print if DODEBUG is defined in config.h
+
+hardaker 12 Apr 96 16:49:23
+ - (snmp_var_route.c)
+ - Changed nlist warnings to only print if DODEBUG is defined in config.h
+ - (many) Added support for hppa1.1-hp-hpux10.01
+ - totally! redid the routing tables for BSD 4.4 derived systems
+ (alpha, hpux10.01+, netbsd) since hpux10 doesn't have 4.3 compat structs.
+ - (ece-mib.def) Capitalization problem.
+ - (configure.in)
+ - Cleaned up kernel checking
+ - Started using a autoconf 2.8 feature to check for cache values.
+
+hardaker 15 Apr 96 12:53:40
+ - (configure) New command line option: --enable-debugging. Turns on debugging.
+ - (configure) Fixes for type checking of 4.4 rtentry structures on alphas.
+
+hardaker 15 Apr 96 14:11:39
+ - (configure) New command line option: --with-defaults. Don't prompt the user.
+ - (configure) bug fixes: wasn't quoting kernel and dmem location.
+ - (configure) gcc cpp requires -x c to accept .in file suffix.
+
+hardaker 15 Apr 96 14:36:48
+ - (agent/snmpd.c) Fixed 2 gettimeofday calls -- added a NULL timezone ptr.
+
+hardaker 16 Apr 96 09:47:18
+ - (configure) I forgot DMEM_LOC needs to be #undef'ed if not found
+
+hardaker 16 Apr 96 09:48:06
+ - (agent/{route_write.c,snmp_var_route.c}) OSF3.2 specific changes. arg.
+
+hardaker 16 Apr 96 18:08:29
+ - (snmpd.c) Added fflush calls after printing packet dumps
+
+hardaker 24 Apr 96 08:36:06
+ - (configure.in) More header file checks (vm/vm.h (+ others) and ufs/ffs/fs.h)
+
+hardaker 24 Apr 96 08:36:50
+ - (agent/extensible/extensible.c) Include ufs/ffs/fs.h if available.
+
+hardaker 24 Apr 96 08:37:13
+ - (agent/Makefile.in) Forgot a quote. (why hasn't this appeared before?)
+
+hardaker 24 Apr 96 08:38:18
+ - (agent/alarm.c) Fixed some define naming conflicts for NetBSD (timeradd()).
+
+hardaker 24 Apr 96 08:44:45
+ - (agent/snmp_var_route.c,snmp_vars.c) more config files for NetBSD.
+ - (agent/snmp_vars.c) removed arp tables for netbsd.
+
+hardaker 24 Apr 96 08:54:07
+ - (acconfig.h, config.h.in, ece-mib.def, ov/*) Added NetBSD to sys-OID returned.
+
+hardaker 24 Apr 96 08:54:39
+ - (man/.cvsignore) added snmpd.1
+
+hardaker 24 Apr 96 09:00:21
+ - (README) updated
+
+hardaker 24 Apr 96 09:07:40
+ - (INSTALL) updated
+
+hardaker 24 Apr 96 11:46:52
+ - (agent/snmp_var_route.c) Checked for sys/mbuf for determining rtentry.rt_next
+
+hardaker 24 Apr 96 11:55:10
+ - (agent/snmp_var_route.c) @#$%ing solaris
+
+hardaker 24 Apr 96 13:25:48
+ - (config*,agent/snmp_var_route.c) config checking for rtentry.rt_next
+
+hardaker 24 Apr 96 14:37:47
+ - (local/snmpcheck) new pref: don't pop forward on new problems.
+
+-------------------------------------------------------------------------------
+
+Changes: V3.0.5 -> V3.0.6
+
+hardaker 24 Jan 96 16:31:20
+ - Returning EXTENSIBLEDOTMIB.AGENTID as the new objectid
+
+Dave Shield <D.T.Shield@csc.liv.ac.uk> 24 Jan 96 16:33:08
+ - Patch from Dave Shield <D.T.Shield@csc.liv.ac.uk>
+ - fixes -p PORT command line option to actually use the requested port.
+ - fixes the -l LOGFILE command line option to actually use it.
+
+hardaker 24 Jan 96 16:36:51
+ - (Makefile, config.h, ece-mib.*, sedscript.in)
+ - changed the way mib.txt is built
+ - split the command into two parts to build a ece-mib.txt as well
+ - added a new ObjectID addition to ece-mib.txt
+ - DEFMAXLOADAVE -> DREMOVEMEEFMAXLOADAVE
+
+hardaker 26 Jan 96 08:25:08
+ - The Solaris 2.5 kernel has moved to /kernel/genunix
+ - Thanks goes to pommier@volnay.stortek.com (Vincent Pommier (Toulouse))
+
+hardaker 9 Feb 96 17:05:00
+ - Better OpenView support
+ - Returns different sysObjectID's for each architecture
+ - Added a 'ov' directory for OpenView support files
+ - currently contains necessary files to support a UCD bitmap file
+ for hosts using the ucd-snmp agent. See the ov/README file for details.
+
+hardaker 12 Feb 96 14:28:27
+ - (acconfig.h, config.hin, agent/extensible/misc.c)
+ - The agent now sets an alarm to restart rather than doing at the
+ snmpset time to return a value to the snmpset request.
+
+hardaker 16 Feb 96 16:32:41
+ - (acconfig.h,config.h.in, agent/snmp_agent.c, agent/extensible/read_config.c)
+ - .conf file addition: "community N STRING" to change community names
+
+hardaker 21 Feb 96 16:12:39
+ - (Makefile.in, sedscript.in, man/Makefile.in, man/snmpd.conf.5.def)
+ - Added the beginnings of a snmpd.conf manual page.
+
+hardaker 21 Feb 96 16:15:36
+ - (apps/Makefile.in, apps/snmptrap.c)
+ - Added apps/snmptrap
+ - code taken from 2.0.1 and submitted to me by francus@metsny.delphi.com.
+ - I have yet to test it.
+
+hardaker 6 Mar 96 09:09:15
+ - (agent/snmpd.c) Added O_TRUNC to the logfile open() call.
+
+hardaker 6 Mar 96 10:06:24
+ - (agent/extensible/read_config.c) small bugs fixed
+ - disk entries with no size specified caused seg-faults.
+ - better type checking on MIB for 'exec MIB' entries.
+ - more error messages added.
+
+hardaker 6 Mar 96 16:38:16
+ - (ece-mib.def)
+ - Changed capitalization schemes to be mosy compliant.
+ - Made the memory mib SYNTAX point to the Memory sequence like it should.
+
+hardaker 6 Mar 96 16:58:11
+ - (snmplib/mib.c) printed values for timeticks are no longer negative.
+
+hardaker 8 Mar 96 10:31:34
+ - (snmplib/snmp_client.c) Check if variable content is NULL before using.
+
+hardaker 8 Mar 96 16:56:08
+ - (agent/extensible/exec.c)
+ - relocatable exec's failed to close the cache file.
+
+hardaker 11 Mar 96 13:37:25
+ - (snmp_var_route.c, snmp_vars.c, extensible.c): commented out nlist warnings.
+
+hardaker 11 Mar 96 15:17:26
+ - (man/{Makefile.in,snmpd.1.def,snmpd.conf.5.def},versiontag,sedscript.in):
+ - cleaned up documentation more and added the version number to the trailers.
+
+hardaker 11 Mar 96 15:17:57
+ - (README): cleaned up, re-arranged, shortened (sections moved to man/* docs).
+
+hardaker 11 Mar 96 15:40:17
+
+ - (README): more clean up and added reference to the ucd-snmp mailing list.
+
+Giovanni S. Marzot <gmarzot@baynetworks.com> 11 Mar 96 15:57:20
+
+ - (snmplib/snmp_api.c): fixed a timeout bug caused by architectures
+ with an unsigned timeval.tv_sec value.
+ - Thanks goes to Giovanni S. Marzot <gmarzot@baynetworks.com> for
+ the patch!
+
+-------------------------------------------------------------------------------
+
+Changes since V3.0.4
+
+hardaker 19 Jan 96 17:31:16
+ - (configure*)
+ - updated to autoconf v2.7
+ - Hopefully now using correct 'make' definitions
+
+hardaker 19 Jan 96 17:32:57
+ - (agent/extensible/*.c)
+ - Declaired more static variables (long_ret) to fix sun4s exit codes (again).
+
+hardaker 22 Jan 96 16:27:30
+ - (acconfig.h, agent/snmp_vars.c, agent/extensible/*.c)
+ - Added new defines to turn on/off sections of the extensible mib.
+ - This also fixes the mib.txt file definitions if something is turned off.
+ - (Makefile.in) removed ${srcdir} from the front of stamp-h.in
+
+hardaker 22 Jan 96 17:18:58
+ - (local/Makefile.in) Added a chmod to make the snmpcheck script executable
+
+hardaker 22 Jan 96 17:23:17
+ - (local/snmpcheck)
+ - added agent controls: restart, updateconfig, clearcache.
+ - removed an old debugging printf.
+ - ctrl-f => fixall.
+ - Added keyboard accelerators to the associated menu items.
+ - Made highlightThickness a global parameter via $window->option('add').
+ - Added a entry box to the executable commands with the command to run.
+
+
+-------------------------------------------------------------------------------
+
+Changes since V3.0.3
+
+hardaker 23 Oct 95 16:37:43
+ - (extensible.c) stopped reporting anything for the disk mib if no
+ disks were defined in the snmpd.conf file. This was causing an
+ error in the agent's error mib when no disks were defined and
+ someone walks the disk mib.
+
+hardaker 20 Nov 95 16:04:47
+ - (README) Added pointer to this file via ftp
+
+hardaker 20 Nov 95 16:05:12
+ - (TODO) Find and fix memory leak sometime
+
+hardaker 20 Nov 95 16:07:45
+ - (configure.in) Check for -lelf for solaris 2.3 and younger
+ - (configure.in) More solaris specifics: -DSVR4
+ - (configure.in) Caches initial prompt in the configure script so you
+ won't be bugged twice by the initial question.
+
+hardaker 20 Nov 95 16:08:49
+ - (config.h.in) Check for -lelf for solaris 2.3 and younger
+
+hardaker 20 Nov 95 16:09:37
+ - (all autoconf built files) Updated everything to autoconf 2.5
+
+hardaker 20 Nov 95 16:10:49
+ - (trapnotif) Logs no-response errors.
+ - (trapnotif) Better string checking (quotes all variables now)
+
+hardaker 1 Dec 95 16:20:13
+ - local/snmpcheck: *new features*
+ - handles failed snmpwalk/get/sets much more gracefully now
+ - new preference: You can pick what types of problems to check for
+ - -f on the command line only checks for fixable problems
+ - no longer ping::echos hosts before checking them
+ - instead relies on 'No Response' type replies from snmpwalk/get to
+ determine if a host is up.
+ - ping the host is still an option (through the command line and menus)
+ - converted from Tk-b4 to Tk-b8
+ - Added a logging window for debugging and tracking of actions.
+ - new command line options: -V NUM initial log verbosity level
+ -L show the log window at startup
+ - Now translates mib numbers into more reasonable names
+
+hardaker 5 Dec 95 14:57:14
+ - (configure*) added AC_TYPE_PID_T to the configure checks
+
+hardaker 5 Dec 95 15:01:10
+ - (snmpcheck)
+ - New flag: -d, don't start checking anything. Just bring up interface.
+ - check for blank output of snmpget before parsing with s///g
+ constructs.
+
+hardaker 5 Dec 95 15:05:20
+ - (agent/extensible)
+ - Bug fix: alphas and sunoses were reporting incorrect extensible
+ exit codes. (yet another 64/32 bit bug found).
+ - Bug fix: agent-update,restart, and cache mib flush entries were
+ returning values instead of pointers to values.
+
+hardaker 13 Dec 95 15:27:19
+ - (agent/extensible/misc.c) bug fixes for exec items:
+ - a second snmpwalk of the exec item would return the old cache
+ file. Fixed by reseting the last cachetime to 0 to always rescan
+ after fork/pipe/memory/etc errors.
+ - Made lastresult a static var. Was returning wrong exit codes
+ under, strangely enough, only sunos-4 machines.
+
+hardaker 20 Dec 95 09:53:10
+ - snmp_open calls getservbyname only once now, at the request of Gary
+ Hayward <gah@dirac.bellcore.com>.
+
+hardaker 20 Dec 95 15:56:16
+ - Found and fixed a memory leak in the routing table mib.
+
+hardaker 28 Dec 95 10:01:35
+ - Added sedscript to the .cvsignore file.
+
+hardaker 28 Dec 95 10:24:37
+ - Added a sedscript which is built from config.h and agent/extensible/mibdefs.h
+ - used to dynamically build mib.txt and local/snmpcheck.
+
+hardaker 28 Dec 95 12:06:49
+ - Created a EXAMPLE.conf file for example usage.
+
+-------------------------------------------------------------------------------
+
+Changes since V3.0.2.1
+
+hardaker 29 Sep 95 13:43:49
+ - ported to GNU's autoconfig2.4
+ - to install, you must now run ./configure first to generate the
+ Makefiles and config.h
+ - almost all of the code is now dynamically checked for problems
+ rather than being dependant on architecture names.
+ - system name now dynamically determined at run time (from uname -n)
+ - created a 'make depend' call (finally).
+ - (agent/snmp_vars.h) changed SYSNAME define to SYSTEMNAME define to
+ avoid a conflict with a solaris header file.
+ - protecting better against include header files twice.
+ - Most of port to Solaris 2.4 finished. The kernel reads still need work.
+
+hardaker 29 Sep 95 13:46:43
+ - (NEWS) updated the news file.
+
+hardaker 3 Oct 95 09:24:00
+ (acconfig.h) Minor bug: recursive comments not correct for compilers (AIX)
+
+hardaker 3 Oct 95 09:43:54
+ (versioninfo.c) Added 3-0-3-A1 tag
+
+hardaker 4 Oct 95 16:53:39
+ version tag of versioninfo.c
+
+hardaker 5 Oct 95 15:23:05
+ - More Solaris porting.
+ - Most mibII entries now work.
+ - Haven't checked returned information for accuracy
+ - sysUpTime still fails.
+ - cc and gcc both compile everything now.
+
+hardaker 5 Oct 95 15:48:23
+ version tag of versioninfo.c
+
+hardaker 6 Oct 95 11:37:00
+ - (README) Moved INSTALLATION instructions to INSTALL
+ Changed listing of supported architectures
+ Updated AVAILABILITY section
+
+hardaker 6 Oct 95 16:28:48
+ version tag of versioninfo.c
+
+hardaker 6 Oct 95 16:32:04
+ - (snmpd.c) Added two new flags:
+ -h for help
+ -v for version information
+
+hardaker 6 Oct 95 16:32:43
+ - (parse.c, snmp.c) added config.h to the list of includes.
+
+hardaker 6 Oct 95 16:40:38
+ - (snmpd.c) Usage of --help and --version should work now... GNU standard.
+
+hardaker 6 Oct 95 16:41:18
+ - (NEWS/-TODO) -h/--help, -v/--version command line options
+
+hardaker 11 Oct 95 17:33:26
+ - The configure script now prompts for important values to be put in
+ config.h. Some things need to use $(prefix) instead however.
+ - (Makefile.in, agent/Makefile.in, apps/Makefile.in)
+ + linking to ../snmplib/libsnmp.a instead of ../lib/libsnmp.a to
+ remove install requirement.
+ + put ../lib/libsnmp.a in application
+
+hardaker 13 Oct 95 15:45:28
+ - (snmpd.c) Added -p port to --help output
+ - (config) Setup to use --prefix to look for config files.
+
+hardaker 16 Oct 95 13:01:39
+ - (Makefiles) Fairly decent 'make install' now possible. Installs
+ into the directory specified by --prefix for the ./configure script.
+ - (extensible.c) config file re-location: now uses the SNMPLIBPATH
+ defined loosely as $(prefix)/lib/snmp/.
+
+hardaker 16 Oct 95 15:02:01
+ - (Makefiles) make install echos what its doing in a more clear fashion
+ - (INSTALL) added better instructions to the INSTALL file.
+ - (README) minor wording changes
+
+hardaker 16 Oct 95 16:21:43
+ - (snmpd.c) was still looking in /etc for two .conf files.
+
+hardaker 16 Oct 95 16:43:12
+ - (apps) all apps were still looking in /etc/ for .conf files
+
+hardaker 17 Oct 95 16:58:32
+ version tag ( 3.0.3 ) of versioninfo.c
+
+hardaker 17 Oct 95 17:00:22
+ - ChangeLog update
+
+
+-------------------------------------------------------------------------------
+
+Changes since V3.0.2
+
+hardaker 21 Sep 95 09:27:18
+ (snmplib/md5.c) Forgot to include sys/types.h for u_long definition.
+
+-------------------------------------------------------------------------------
+
+Changes since V3.0.1
+
+hardaker 26 Jul 95 16:31:41
+ - Added a new #define: EXIT_ON_BAD_KLREAD to config.h
+ If defined, and an error occurs while reading the kernel contents,
+ the agent will exit. This was the default. I wanted it to
+ continue.
+
+ - Port to dec-alpha/OSF 3.1
+ - alpha's long is 8 bytes, not 4.
+ - should be (mostly) 64 bit clean now.
+ - cleaned up a LOT of bugs CMU code in the process.
+
+hardaker 28 Jul 95 14:23:41
+ Yet more problems fixed in the alpha port.
+ -- more int -> long checking.
+
+hardaker 31 Jul 95 16:27:47
+ - snmpcheck changes:
+ - terminal (ascii) based supported fixed.
+ - Detects presence of a DISPLAY variable.
+ - Now requires the Term::Readkey package.
+ - asks users weather to fix problems
+ - raises and deiconifies when new problems are found
+ - sets the background color of new problems to pinkish
+ - new preference: ping host?
+ - global key bindings:
+ ctrl-q = quit; ctrl-h = hide; ctrl-s = seen all
+
+hardaker 1 Sep 95 11:57:52
+ - Fixed alpha's kernel lookups:
+ * CMU code was passing ints into lseek (needs long).
+
+hardaker 18 Sep 95 16:09:25
+ Minor mods to README file.
+
+hardaker 18 Sep 95 16:13:49
+ Minor bug:
+ (sh_count_procs) check if returned file descriptor > 0 before continuing
+
+-------------------------------------------------------------------------------
+
+Changes since V3.0
+
+hardaker 16 Jun 95 10:13:53
+ Removed 'gmake' -> 'make' in agent/Makefile
+
+hardaker 16 Jun 95 10:15:42
+ House cleaning
+ - Compiles cleanly on hpux/gcc
+ (except one include file error I don't have control over.)
+ - Change VERSION_ID -> VERSIONID to avoid conflicts with HP's includes.
+
+hardaker 16 Jun 95 14:13:53
+ House Cleaning:
+ Took out gcc/ansi requirement for the agent.
+ perror() is called more frequently for log archival
+
+ New Bug/Haven't solved:
+ HP-UX: if agent/*.c and agent/extensible/*.c are built with gcc,
+ DisplayStrings return garbage. No clue as to why.
+
+hardaker 16 Jun 95 14:20:48
+ House Cleaning:
+ Missed a VERSION_ID
+
+hardaker 21 Jun 95 09:11:27
+ Changed another "empty" error message in the CMU code to a real warning.
+
+hardaker 21 Jun 95 09:15:31
+ Bug Fix:
+ Stopped returning a pointer to a non-static char array... (-> static char)
+ Passing wrong pointer to seterrorstatus() in setPerrorstatus()
+
+ Feature:
+ Added a setable mib entry to the version mib to re-read the config file(s).
+
+hardaker 21 Jun 95 09:18:37
+ ece-mib.def:
+ Bug Fix:
+ Loadave mib: Integer -> DisplayString
+ versionClearCache: -> read-write (was read-only)
+
+ Feature:
+ Added a setable mib entry to the version mib to re-read the config file(s).
+
+hardaker 21 Jun 95 09:19:17
+ Changed default CC to cc again.
+
+hardaker 21 Jun 95 09:20:23
+ snmplib:
+ Bug fix: fdset -> (int *) fdset in select call.
+
+hardaker 10 Jul 95 11:27:00
+ Two new command line options:
+ -l LOGFILE Outputs stderr/out to LOGFILE (overrides config.h def)
+ -L Do NOT write to a log file (overrides config.h)
+
+hardaker 10 Jul 95 12:29:32
+ - More perror()s converted to set the snmp error status flag on the agent.
+ - error status flag is now prioritized. perrors get the highest so
+ other errors won't override them if they happen at a later time.
+ - Added the beginnings of a restart mib to the version mib of the
+ agent. Setting this writable mib to one will cause it to exec
+ itself again (for remote restart/updates).
+
+hardaker 10 Jul 95 12:30:19
+ Minor comment change in config.h
+
+hardaker 14 Jul 95 15:12:40
+ - Finished the restart mib. This is a setable sub-mib of the version
+ mib, default to VERSION.12(.1). If snmp-set to '1', it will restart
+ the agent.
+
+ * A side effect of this is that it restarts 3 times or so, since it
+ never returns a responce to the program generating the request.
+ If said program tries to resend the request (which most do), it
+ will AGAIN restart the agent... oh well.
+
+hardaker 14 Jul 95 15:15:31
+ - snmpcheck (tk-perl-b4 script) is pretty stable at this point. I
+ lost curses support, and need to re-add it still, so it is still
+ beta. It does expect a log file of problems to exist (point it to
+ /dev/null), and needs to know the locations of the mibs to check
+ (which aren't configured by 'make'), so it needs some work.
+ However, it will query an agent, check its problems based on the
+ status of the error flag (or return code) being >1 and report them
+ with neat GUI-buttons and stuff (oh wow). No documentation on it though.
+
+-------------------------------------------------------------------------------
+
+Changes since 3-0A1:
+
+hardaker 2 Jun 95 16:23:46
+ - version update
+
+hardaker 5 Jun 95 12:44:46
+ - agent/extensible/Makefile:
+ -- no longer requires GNU make
+ -- etags no longer run by default
+
+ - SunOS additions:
+ -- loadaverage checking MIB enabled
+ -- disk checking MIB enabled
+
+hardaker 9 Jun 95 10:21:07
+ - Added a SNMPBLOCK option to the config.h file. Supposedily setting
+ this to zero (now the default) will allow snmp requests to time out.
+ Haven't tested it throughly.
+ -- Contributed by Sanjai Narain <narain@thumper.bellcore.com>
+
+hardaker 9 Jun 95 10:21:51
+ - Correctly ordered the mib table list.
+ -- Need to write a dynamic checker/re-orderer.
+
+hardaker 9 Jun 95 10:23:35
+ - Correct usage for snmpwalk is now possible. IE, snmpwalk target
+ .1.3.6.1 will now browse the entire tree.
+ -- Still fails on relocatable extensible mibs and will until I
+ write a dynamic tree builder.
+
+hardaker 9 Jun 95 14:08:15
+ - Changed test -x to test -f in snmplib/Makefile. Not all OSes
+ (ie ultrix) handle this.
+
+hardaker 12 Jun 95 10:35:38
+ - local/trapnotif:
+ -- uses snmpv2 now (correctly)
+
+hardaker 12 Jun 95 10:37:46
+ - Reports all errors through the error mib now instead of through perror().
+ - Cleaned up error handling. Shouldn't handle errors nicely if system
+ errors occur when scanning an extensible mib.
+
+hardaker 14 Jun 95 11:24:20
+ agent:
+ - Mib table is now qsorted at run time and the extensible variables are
+ sorted in at this time. This brings the agent up to correct
+ SNMPwalk/getnext protocols. You can now walk the entire tree
+ including the extensible sections and it won't stop.
+ * This has an added bonus of checking the mib table
+ (agent/snmp_vars.c) for correct order. I have added things to the
+ wrong location too many times and caused the agent to function
+ incorrectly. Major win.
+
+hardaker 14 Jun 95 12:56:49
+ - Cleaned up/Added more documentation to config.h
+ - GLOBALSECURITY now uses the left most four bits in the MIB acl.
+ This is more compatible with the CMU code than using the left most
+ 2, which was done previously.
+
+
+hardaker 14 Jun 95 13:43:38
+ - Added more documentation to the README file.
+ - Created a mailing list to handle announcements
+ (ucd-snmp-announce@ucd-snmp.ucdavis.edu)
+
+
+# generated using:
+# cvs2cl -b -r -f ChangeLog.add -F V4-2-patches --no-wrap -S
+# perl dist/changelogfix < ChangeLog.add > ChangeLog.reallyadd
diff --git a/cleopatre/application/spidnetsnmp/CodingStyle b/cleopatre/application/spidnetsnmp/CodingStyle
new file mode 100644
index 0000000000..cb773beeae
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/CodingStyle
@@ -0,0 +1,69 @@
+The discussion about coding style on the net-snmp-coders mailing list
+can be found at the following web address:
+
+ http://sourceforge.net/mailarchive/message.php?msg_id=1009885
+ (Thread "design proposal - coding style" started on 2001-02-08)
+
+----------------------------------------------------------------------
+Indentation:
+
+We've adopted the following indent style:
+
+ indent -orig -nbc -bap -nut -nfca -T netsnmp_mib_handler -T netsnmp_handler_registration -T netsnmp_handler_args -T netsnmp_delegated_cache -T netsnmp_baby_steps_modes -T netsnmp_baby_steps_access_methods -T netsnmp_mode_handler_list -T netsnmp_mib_handler_methods -T netsnmp_monitor_callback_header -T netsnmp_monitor_set_request_data -T netsnmp_monitor_callback_cooperative -T netsnmp_old_api_info -T netsnmp_old_api_cache -T netsnmp_row_merge_status -T netsnmp_scalar_group -T netsnmp_set_info -T netsnmp_request_info -T netsnmp_set_info -T netsnmp_tree_cache -T netsnmp_agent_request_info -T netsnmp_cachemap -T netsnmp_agent_session -T netsnmp_stash_cache_info -T netsnmp_stash_cache_data -T netsnmp_request_group_item -T netsnmp_request_group -T netsnmp_table_array_callbacks -T netsnmp_table_row -T netsnmp_table_data -T netsnmp_table_data_set_storage -T netsnmp_table_data_set -T netsnmp_column_info -T netsnmp_table_registration_info -T netsnmp_table_request_info -T netsnmp_iterator_info -T netsnmp_tdata_row -T netsnmp_tdata -T netsnmp_subtree -T netsnmp_watcher_info -T netsnmp_arp_entry -T netsnmp_interface_stats -T netsnmp_interface_entry -T netsnmp_conf_if_list -T netsnmp_ipaddress_entry -T netsnmp_ipstats -T netsnmp_route_entry -T netsnmp_systemstats_entry -T netsnmp_tcpconn_entry -T netsnmp_udp_endpoint_entry -T netsnmp_container -T netsnmp_iterator -T netsnmp_data_list -T netsnmp_data_list_saveinfo -T netsnmp_factory -T netsnmp_file -T netsnmp_oid_stash_node -T netsnmp_oid_stash_save_info -T netsnmp_pdu -T netsnmp_request_list -T netsnmp_vardata -T netsnmp_callback_pass -T netsnmp_callback_info -T netsnmp_token_descr -T netsnmp_std_data -T netsnmp_transport -T netsnmp_transport_list -T netsnmp_tdomain -T netsnmp_line_info -T netsnmp_line_process_info -T netsnmp_token_value_index
+
+[wow, what an annoying list! The above -T list can be (re)generated by
+running:
+ perl -n -e 'print "-T $1 " if (/}\s*(netsnmp_\w+)\s*;/);' */*.h
+in the include/net-snmp directory]
+
+If possible, please run all new code submitted to the project through
+the above command. However, if sending a patch, please do *not* send
+a patch that reformats the entire file. Just the new sections of code
+should be in the above style to make it easier for us to dissect what
+you did in your patch.
+
+Briefly, here's a description of the style:
+
+ Blank lines:
+ after procedures
+ not (forced) after blocks of declarations or block comments
+ multiple declarations not split onto separate lines
+
+ Comments:
+ Block comments indented 4 spaces from surrounding code
+ Start/End on separate lines
+ Solid '*' on the left of block comments
+ "One-line" comments start in column 33
+
+ Bracing/Indent/etc:
+ K&R-style bracing (including "cuddle-else")
+ 'case' statements in line with 'switch'
+ No space between procedure name and opening parenthesis
+ variable declarations lined up, and start in column 16
+ Procedure return type on a separate line to the procedure name
+ Four character basic and continuation line indent
+ No tabs used in the file, always use 8 spaces instead.
+ Continuation parameters lined up with opening parenthesis
+
+----------------------------------------------------------------------
+Function names and Variable names:
+
+should_be_like_this and notLikeThis
+
+New public functions and defines should ideally start with a netsnmp_
+or NETSNMP_ prefix, respectively.
+
+----------------------------------------------------------------------
+Structures:
+
+We have decided to typedef all structures into names using the
+following convention:
+
+typedef struct netsnmp_wombat_s {
+ int something_cool;
+} netsnmp_wombat;
+
+The important things to note here are that the struct name ends in a
+"_s", the typedef name doesn't end in "_t", and the typedef is not to a
+pointer and everything begins with "netsnmp_".
+
diff --git a/cleopatre/application/spidnetsnmp/EXAMPLE.conf.def b/cleopatre/application/spidnetsnmp/EXAMPLE.conf.def
new file mode 100644
index 0000000000..da1d2c4e1b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/EXAMPLE.conf.def
@@ -0,0 +1,408 @@
+###############################################################################
+#
+# EXAMPLE.conf:
+# An example configuration file for configuring the ucd-snmp snmpd agent.
+#
+###############################################################################
+#
+# This file is intended to only be an example. If, however, you want
+# to use it, it should be placed in SYSCONFDIR/snmp/snmpd.conf.
+# When the snmpd agent starts up, this is where it will look for it.
+#
+# You might be interested in generating your own snmpd.conf file using
+# the "snmpconf" program (perl script) instead. It's a nice menu
+# based interface to writing well commented configuration files. Try it!
+#
+# Note: This file is automatically generated from EXAMPLE.conf.def.
+# Do NOT read the EXAMPLE.conf.def file! Instead, after you have run
+# configure & make, and then make sure you read the EXAMPLE.conf file
+# instead, as it will tailor itself to your configuration.
+
+# All lines beginning with a '#' are comments and are intended for you
+# to read. All other lines are configuration commands for the agent.
+
+#
+# PLEASE: read the snmpd.conf(5) manual page as well!
+#
+
+
+###############################################################################
+# Access Control
+###############################################################################
+
+# YOU SHOULD CHANGE THE "COMMUNITY" TOKEN BELOW TO A NEW KEYWORD ONLY
+# KNOWN AT YOUR SITE. YOU *MUST* CHANGE THE NETWORK TOKEN BELOW TO
+# SOMETHING REFLECTING YOUR LOCAL NETWORK ADDRESS SPACE.
+
+# By far, the most common question I get about the agent is "why won't
+# it work?", when really it should be "how do I configure the agent to
+# allow me to access it?"
+#
+# By default, the agent responds to the "public" community for read
+# only access, if run out of the box without any configuration file in
+# place. The following examples show you other ways of configuring
+# the agent so that you can change the community names, and give
+# yourself write access as well.
+#
+# The following lines change the access permissions of the agent so
+# that the COMMUNITY string provides read-only access to your entire
+# NETWORK (EG: 10.10.10.0/24), and read/write access to only the
+# localhost (127.0.0.1, not its real ipaddress).
+#
+# For more information, read the FAQ as well as the snmpd.conf(5)
+# manual page.
+
+####
+# First, map the community name (COMMUNITY) into a security name
+# (local and mynetwork, depending on where the request is coming
+# from):
+
+# sec.name source community
+com2sec local localhost COMMUNITY
+com2sec mynetwork NETWORK/24 COMMUNITY
+
+####
+# Second, map the security names into group names:
+
+# sec.model sec.name
+group MyRWGroup v1 local
+group MyRWGroup v2c local
+group MyRWGroup usm local
+group MyROGroup v1 mynetwork
+group MyROGroup v2c mynetwork
+group MyROGroup usm mynetwork
+
+####
+# Third, create a view for us to let the groups have rights to:
+
+# incl/excl subtree mask
+view all included .1 80
+
+####
+# Finally, grant the 2 groups access to the 1 view with different
+# write permissions:
+
+# context sec.model sec.level match read write notif
+access MyROGroup "" any noauth exact all none none
+access MyRWGroup "" any noauth exact all all none
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# System contact information
+#
+
+# It is also possible to set the sysContact and sysLocation system
+# variables through the snmpd.conf file. **PLEASE NOTE** that setting
+# the value of these objects here makes these objects READ-ONLY
+# (regardless of any access control settings). Any attempt to set the
+# value of an object whose value is given here will fail with an error
+# status of notWritable.
+
+syslocation Right here, right now.
+syscontact Me <me@somewhere.org>
+
+# Example output of snmpwalk:
+# % snmpwalk -v 1 -c public localhost system
+# system.sysDescr.0 = "SunOS name sun4c"
+# system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.sunos4
+# system.sysUpTime.0 = Timeticks: (595637548) 68 days, 22:32:55
+# system.sysContact.0 = "Me <me@somewhere.org>"
+# system.sysName.0 = "name"
+# system.sysLocation.0 = "Right here, right now."
+# system.sysServices.0 = 72
+
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# Process checks.
+#
+# The following are examples of how to use the agent to check for
+# processes running on the host. The syntax looks something like:
+#
+# proc NAME [MAX=0] [MIN=0]
+#
+# NAME: the name of the process to check for. It must match
+# exactly (ie, http will not find httpd processes).
+# MAX: the maximum number allowed to be running. Defaults to 0.
+# MIN: the minimum number to be running. Defaults to 0.
+
+#
+# Examples:
+#
+
+# Make sure mountd is running
+proc mountd
+
+# Make sure there are no more than 4 ntalkds running, but 0 is ok too.
+proc ntalkd 4
+
+# Make sure at least one sendmail, but less than or equal to 10 are running.
+proc sendmail 10 1
+
+# A snmpwalk of the prTable would look something like this:
+#
+# % snmpwalk -v 1 -c public localhost .EXTENSIBLEDOTMIB.PROCMIBNUM
+# enterprises.ucdavis.procTable.prEntry.prIndex.1 = 1
+# enterprises.ucdavis.procTable.prEntry.prIndex.2 = 2
+# enterprises.ucdavis.procTable.prEntry.prIndex.3 = 3
+# enterprises.ucdavis.procTable.prEntry.prNames.1 = "mountd"
+# enterprises.ucdavis.procTable.prEntry.prNames.2 = "ntalkd"
+# enterprises.ucdavis.procTable.prEntry.prNames.3 = "sendmail"
+# enterprises.ucdavis.procTable.prEntry.prMin.1 = 0
+# enterprises.ucdavis.procTable.prEntry.prMin.2 = 0
+# enterprises.ucdavis.procTable.prEntry.prMin.3 = 1
+# enterprises.ucdavis.procTable.prEntry.prMax.1 = 0
+# enterprises.ucdavis.procTable.prEntry.prMax.2 = 4
+# enterprises.ucdavis.procTable.prEntry.prMax.3 = 10
+# enterprises.ucdavis.procTable.prEntry.prCount.1 = 0
+# enterprises.ucdavis.procTable.prEntry.prCount.2 = 0
+# enterprises.ucdavis.procTable.prEntry.prCount.3 = 1
+# enterprises.ucdavis.procTable.prEntry.prErrorFlag.1 = 1
+# enterprises.ucdavis.procTable.prEntry.prErrorFlag.2 = 0
+# enterprises.ucdavis.procTable.prEntry.prErrorFlag.3 = 0
+# enterprises.ucdavis.procTable.prEntry.prErrMessage.1 = "No mountd process running."
+# enterprises.ucdavis.procTable.prEntry.prErrMessage.2 = ""
+# enterprises.ucdavis.procTable.prEntry.prErrMessage.3 = ""
+# enterprises.ucdavis.procTable.prEntry.prErrFix.1 = 0
+# enterprises.ucdavis.procTable.prEntry.prErrFix.2 = 0
+# enterprises.ucdavis.procTable.prEntry.prErrFix.3 = 0
+#
+# Note that the errorFlag for mountd is set to 1 because one is not
+# running (in this case an rpc.mountd is, but thats not good enough),
+# and the ErrMessage tells you what's wrong. The configuration
+# imposed in the snmpd.conf file is also shown.
+#
+# Special Case: When the min and max numbers are both 0, it assumes
+# you want a max of infinity and a min of 1.
+#
+
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# Executables/scripts
+#
+
+#
+# You can also have programs run by the agent that return a single
+# line of output and an exit code. Here are two examples.
+#
+# exec NAME PROGRAM [ARGS ...]
+#
+# NAME: A generic name.
+# PROGRAM: The program to run. Include the path!
+# ARGS: optional arguments to be passed to the program
+
+# a simple hello world
+exec echotest /bin/echo hello world
+
+# Run a shell script containing:
+#
+# #!/bin/sh
+# echo hello world
+# echo hi there
+# exit 35
+#
+# Note: this has been specifically commented out to prevent
+# accidental security holes due to someone else on your system writing
+# a /tmp/shtest before you do. Uncomment to use it.
+#
+#exec shelltest /bin/sh /tmp/shtest
+
+# Then,
+# % snmpwalk -v 1 -c public localhost .EXTENSIBLEDOTMIB.SHELLMIBNUM
+# enterprises.ucdavis.extTable.extEntry.extIndex.1 = 1
+# enterprises.ucdavis.extTable.extEntry.extIndex.2 = 2
+# enterprises.ucdavis.extTable.extEntry.extNames.1 = "echotest"
+# enterprises.ucdavis.extTable.extEntry.extNames.2 = "shelltest"
+# enterprises.ucdavis.extTable.extEntry.extCommand.1 = "/bin/echo hello world"
+# enterprises.ucdavis.extTable.extEntry.extCommand.2 = "/bin/sh /tmp/shtest"
+# enterprises.ucdavis.extTable.extEntry.extResult.1 = 0
+# enterprises.ucdavis.extTable.extEntry.extResult.2 = 35
+# enterprises.ucdavis.extTable.extEntry.extOutput.1 = "hello world."
+# enterprises.ucdavis.extTable.extEntry.extOutput.2 = "hello world."
+# enterprises.ucdavis.extTable.extEntry.extErrFix.1 = 0
+# enterprises.ucdavis.extTable.extEntry.extErrFix.2 = 0
+
+# Note that the second line of the /tmp/shtest shell script is cut
+# off. Also note that the exit status of 35 was returned.
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# disk checks
+#
+
+# The agent can check the amount of available disk space, and make
+# sure it is above a set limit.
+
+# disk PATH [MIN=DEFDISKMINIMUMSPACE]
+#
+# PATH: mount path to the disk in question.
+# MIN: Disks with space below this value will have the Mib's errorFlag set.
+# Default value = DEFDISKMINIMUMSPACE.
+
+# Check the / partition and make sure it contains at least 10 megs.
+
+disk / 10000
+
+# % snmpwalk -v 1 -c public localhost .EXTENSIBLEDOTMIB.DISKMIBNUM
+# enterprises.ucdavis.diskTable.dskEntry.diskIndex.1 = 0
+# enterprises.ucdavis.diskTable.dskEntry.diskPath.1 = "/" Hex: 2F
+# enterprises.ucdavis.diskTable.dskEntry.diskDevice.1 = "/dev/dsk/c201d6s0"
+# enterprises.ucdavis.diskTable.dskEntry.diskMinimum.1 = 10000
+# enterprises.ucdavis.diskTable.dskEntry.diskTotal.1 = 837130
+# enterprises.ucdavis.diskTable.dskEntry.diskAvail.1 = 316325
+# enterprises.ucdavis.diskTable.dskEntry.diskUsed.1 = 437092
+# enterprises.ucdavis.diskTable.dskEntry.diskPercent.1 = 58
+# enterprises.ucdavis.diskTable.dskEntry.diskErrorFlag.1 = 0
+# enterprises.ucdavis.diskTable.dskEntry.diskErrorMsg.1 = ""
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# load average checks
+#
+
+# load [1MAX=DEFMAXLOADAVE] [5MAX=DEFMAXLOADAVE] [15MAX=DEFMAXLOADAVE]
+#
+# 1MAX: If the 1 minute load average is above this limit at query
+# time, the errorFlag will be set.
+# 5MAX: Similar, but for 5 min average.
+# 15MAX: Similar, but for 15 min average.
+
+# Check for loads:
+load 12 14 14
+
+# % snmpwalk -v 1 -c public localhost .EXTENSIBLEDOTMIB.LOADAVEMIBNUM
+# enterprises.ucdavis.loadTable.laEntry.loadaveIndex.1 = 1
+# enterprises.ucdavis.loadTable.laEntry.loadaveIndex.2 = 2
+# enterprises.ucdavis.loadTable.laEntry.loadaveIndex.3 = 3
+# enterprises.ucdavis.loadTable.laEntry.loadaveNames.1 = "Load-1"
+# enterprises.ucdavis.loadTable.laEntry.loadaveNames.2 = "Load-5"
+# enterprises.ucdavis.loadTable.laEntry.loadaveNames.3 = "Load-15"
+# enterprises.ucdavis.loadTable.laEntry.loadaveLoad.1 = "0.49" Hex: 30 2E 34 39
+# enterprises.ucdavis.loadTable.laEntry.loadaveLoad.2 = "0.31" Hex: 30 2E 33 31
+# enterprises.ucdavis.loadTable.laEntry.loadaveLoad.3 = "0.26" Hex: 30 2E 32 36
+# enterprises.ucdavis.loadTable.laEntry.loadaveConfig.1 = "12.00"
+# enterprises.ucdavis.loadTable.laEntry.loadaveConfig.2 = "14.00"
+# enterprises.ucdavis.loadTable.laEntry.loadaveConfig.3 = "14.00"
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.1 = 0
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.2 = 0
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.3 = 0
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.1 = ""
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.2 = ""
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.3 = ""
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# Extensible sections.
+#
+
+# This alleviates the multiple line output problem found in the
+# previous executable mib by placing each mib in its own mib table:
+
+# Run a shell script containing:
+#
+# #!/bin/sh
+# echo hello world
+# echo hi there
+# exit 35
+#
+# Note: this has been specifically commented out to prevent
+# accidental security holes due to someone else on your system writing
+# a /tmp/shtest before you do. Uncomment to use it.
+#
+# exec .EXTENSIBLEDOTMIB.50 shelltest /bin/sh /tmp/shtest
+
+# % snmpwalk -v 1 -c public localhost .EXTENSIBLEDOTMIB.50
+# enterprises.ucdavis.50.1.1 = 1
+# enterprises.ucdavis.50.2.1 = "shelltest"
+# enterprises.ucdavis.50.3.1 = "/bin/sh /tmp/shtest"
+# enterprises.ucdavis.50.100.1 = 35
+# enterprises.ucdavis.50.101.1 = "hello world."
+# enterprises.ucdavis.50.101.2 = "hi there."
+# enterprises.ucdavis.50.102.1 = 0
+
+# Now the Output has grown to two lines, and we can see the 'hi
+# there.' output as the second line from our shell script.
+#
+# Note that you must alter the mib.txt file to be correct if you want
+# the .50.* outputs above to change to reasonable text descriptions.
+
+# Other ideas:
+#
+# exec .EXTENSIBLEDOTMIB.51 ps /bin/ps
+# exec .EXTENSIBLEDOTMIB.52 top /usr/local/bin/top
+# exec .EXTENSIBLEDOTMIB.53 mailq /usr/bin/mailq
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# Pass through control.
+#
+
+# Usage:
+# pass MIBOID EXEC-COMMAND
+#
+# This will pass total control of the mib underneath the MIBOID
+# portion of the mib to the EXEC-COMMAND.
+#
+# Note: You'll have to change the path of the passtest script to your
+# source directory or install it in the given location.
+#
+# Example: (see the script for details)
+# (commented out here since it requires that you place the
+# script in the right location. (its not installed by default))
+
+# pass .EXTENSIBLEDOTMIB.255 /bin/sh PREFIX/local/passtest
+
+# % snmpwalk -v 1 -c public localhost .EXTENSIBLEDOTMIB.255
+# enterprises.ucdavis.255.1 = "life the universe and everything"
+# enterprises.ucdavis.255.2.1 = 42
+# enterprises.ucdavis.255.2.2 = OID: 42.42.42
+# enterprises.ucdavis.255.3 = Timeticks: (363136200) 42 days, 0:42:42
+# enterprises.ucdavis.255.4 = IpAddress: 127.0.0.1
+# enterprises.ucdavis.255.5 = 42
+# enterprises.ucdavis.255.6 = Gauge: 42
+#
+# % snmpget -v 1 -c public localhost .EXTENSIBLEDOTMIB.255.5
+# enterprises.ucdavis.255.5 = 42
+#
+# % snmpset -v 1 -c public localhost .EXTENSIBLEDOTMIB.255.1 s "New string"
+# enterprises.ucdavis.255.1 = "New string"
+#
+
+# For specific usage information, see the man/snmpd.conf.5 manual page
+# as well as the local/passtest script used in the above example.
+
+###############################################################################
+# Subagent control
+#
+
+# The agent can support subagents using a number of extension mechanisms.
+# From the 4.2.1 release, AgentX support is being compiled in by default.
+# To use this mechanism, simply uncomment the following directive.
+#
+# master agentx
+#
+# Please see the file README.agentx for more details.
+#
+
+
+###############################################################################
+# Further Information
+#
+# See the snmpd.conf manual page, and the output of "snmpd -H".
+# MUCH more can be done with the snmpd.conf than is shown as an
+# example here.
diff --git a/cleopatre/application/spidnetsnmp/FAQ b/cleopatre/application/spidnetsnmp/FAQ
new file mode 100644
index 0000000000..0feb7f9c1b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/FAQ
@@ -0,0 +1,3672 @@
+ Frequently Asked Questions (FAQ) for the UCD/Net-SNMP package
+ =============================================================
+ FAQ Author: Dave Shield
+ net-snmp Version: 5.4.2.1 SVN branch
+ net-snmp/ucd-snmp Project Leader: Wes Hardaker
+ Email: net-snmp-coders@lists.sourceforge.net
+
+TABLE OF CONTENTS
+=================
+
+ TABLE OF CONTENTS
+ GENERAL
+ What is it?
+ Where can I get it?
+ What documentation is available?
+ Are there binaries available?
+ What's the difference between UCD-SNMP and Net-SNMP?
+ What operating systems does it run on?
+ What happens if mine isn't listed?
+ Does it run on Windows?
+ How do I find out about new releases?
+ How can I find out what other people are doing?
+ How do I submit a patch or bug report?
+ Can I reuse the code in my commercial application?
+ What's the difference between SNMPv1, SNMPv2 and SNMPv3?
+ What's the difference between SNMPv2 and SNMPv2c?
+ Which versions of SNMP are supported in this package?
+ Can I use SNMPv1 requests with an SNMPv2 MIB (or vice versa)?
+ Where can I find more information about network management?
+ Is Net-SNMP thread safe?
+ APPLICATIONS
+ How do I add a MIB?
+ How do I add a MIB to the tools?
+ Why can't I see anything from the agent?
+ Why doesn't the agent respond?
+ I can see the system group, but nothing else. Why?
+ Why can't I see values in the <ENTERPRISE> tree?
+ The agent worked for a while, then stopped responding. Why?
+ Requesting an object fails with "Unknown Object Identifier" Why?
+ Why do I get "noSuchName" when asking for "sysUpTime" (or similar)?
+ Why do I sometimes get "End of MIB" when walking a tree, and sometimes not?
+ How do I use SNMPv3?
+ Why can't I set any variables in the MIB?
+ Variables seem to disappear when I try to set them. Why?
+ Why can't I change sysLocation (or sysContact)?
+ I get an error when trying to set a negative value - why?
+ I get an error when trying to get a string-indexed table value - why?
+ How do I send traps and notifications?
+ How do I handle traps and notifications?
+ My traphandler script doesn't work when run like this - why not?
+ How big can an SNMP request (or reply) be?
+ How can I monitor my systems (disk, memory, etc)?
+ Applications complain about entries in your example 'snmp.conf' file. Why?
+ OK, what should I put in snmp.conf?
+ PERL
+ Where can I get the Perl SNMP package?
+ How do I install the Perl SNMP modules?
+ But compiling this fails! Why?
+ Compiling the Perl module works OK, but 'make test' fails. Why?
+ Why can't mib2c (or tkmib) locate SNMP.pm?
+ Why can't mib2c (or tkmib) load SNMP.so?
+ Why can't tkmib locate Tk.pm?
+ Why does your RPM complain about missing Perl modules?
+ I've got a problem with the Net-SNMP module. Can you help?
+ MIBS
+ Where can I find a MIB compiler?
+ Why aren't my mib files being read in?
+ I'm getting answers, but they're all numbers. Why?
+ What does "Cannot find module (XXX-MIB)" mean?
+ What about "unlinked OID"?
+ The parser doesn't handle comments properly. Why not?
+ How can I get more information about problems with MIB files?
+ What's this about "too many imported symbols"?
+ Do I actually need the MIB files?
+ AGENT
+ What MIBs are supported?
+ What protocols are supported?
+ How do I configure the agent?
+ How do I remove a MIB from the agent?
+ I've installed a new MIB file. Why can't I query it?
+ How do I add a MIB to the agent?
+ What's the difference between 'exec', 'sh', 'extend' and 'pass'?
+ What's the difference between AgentX, SMUX and proxied SNMP?
+ What about 'dlmod' - what's that about?
+ Which should I use?
+ Can I use AgentX when running under Windows?
+ Can I use AgentX (or an embedded SNMP agent) in a threaded application?
+ How can I run AgentX with a different socket address?
+ How can I turn off SMUX support?
+ How can I combine two copies of the 'mib2' tree from separate subagents?
+ What traps are sent by the agent?
+ Where are these traps sent to?
+ How can I send a particular trap to selected destinations?
+ When I run the agent it runs and then quits without staying around. Why?
+ After a while the agent stops responding, and starts eating CPU time. Why?
+ How can I stop other people getting at my agent?
+ How can I listen on just one particular interface?
+ How do I configure access control?
+ I don't understand the new access control stuff - what does it mean?
+ How do I configure SNMPv3 users?
+ The 'createUser' line disappears when I start the agent. Why?
+ What's the difference between /var/net-snmp and /usr/local/share/snmp?
+ My new agent is ignoring the old snmpd.conf file. Why?
+ Why am I getting "Connection refused"?
+ Why can't I see values in the UCDavis 'extensible' or 'disk' trees?
+ Why can't I see values in the UCDavis 'memory' or 'vmstat' tree?
+ What do the CPU statistics mean - is this the load average?
+ How do I get percentage CPU utilization using ssCpuRawIdle?
+ What about multi-processor systems?
+ The speed/type of my network interfaces is wrong - how can I fix it?
+ The interface statistics for my subinterfaces are all zero - why?
+ Does the agent support the RMON-MIB?
+ What does "klread: bad address" mean?
+ What does "nlist err: wombat not found" (or similar) mean?
+ How about "Can't open /dev/kmem"?
+ The agent is complaining about 'snmpd.conf'. Where is this?
+ The system uptime (sysUpTime) returned is wrong!
+ Can the agent run multi-threaded?
+ COMPILING
+ How do I compile with 'cc' instead of 'gcc'?
+ The compilation is complaining about missing libraries. Why?
+ I'm getting an error "autoheader: not found" - what's wrong?
+ How can I reduce the memory footprint?
+ How can I reduce the installation footprint or speed up compilation?
+ How can I compile the project to use static linking?
+ Why is the project workspace empty under Visual C++?
+ Why does 'make test' skip five tests?
+ Why does 'make test' complain about a pid file?
+ CODING
+ How do I write C code to integrate with the agent?
+ How does the agent fetch the value of a MIB variable from the system?
+ Mib2c complains about a missing "mib reference" - what does this mean?
+ Mib2c complains about not having a "valid OID" - what does this mean?
+ Why doesn't mib2c like the MIB file I'm giving it?
+ Mib2c ignores my MIB and generates a pair of 'mib-2' code files. Why?
+ What's the difference between the various mib2c configuration files?
+ Which mib2c configuration file should I use?
+ How can I have mib2c generate code for both scalars and tables?
+ Are there any examples, or documentation?
+ Where should I put the files produced by 'mib2c'?
+ I've created a new module with 'mib2c' but it doesn't work. Why not?
+ I've added my code to this template and it still doesn't work. Why not?
+ Why does the iterator call my get_{first,next} routines so often?
+ How can I get the agent to generate a trap (or inform)?
+ How can I get the agent to send an SNMPv1 (or SNMPv2c) trap?
+ How can I get the agent to include varbinds with an SNMPv1 trap?
+ How can I get the agent to send an SNMPv1 enterprise-specific trap?
+ How can I get the agent to send an SNMPv3 trap (or inform)?
+ Why does calling 'send_v2trap' generate an SNMPv1 trap (or vice versa)?
+ What if I'm using an AgentX sub-agent instead?
+ How can I register a MIB module in a different (SNMPv3) context?
+ MISC
+ What ASN.1 parser is used?
+ What is the Official Slogan of the net-snmp-coders list?
+
+
+GENERAL
+=======
+
+What is it?
+----------
+
+ - Various tools relating to the Simple Network Management Protocol
+ including:
+
+ * An extensible agent
+ * An SNMP library
+ * tools to request or set information from SNMP agents
+ * tools to generate and handle SNMP traps
+ * a version of the unix 'netstat' command using SNMP
+ * a graphical Perl/Tk/SNMP based mib browser
+
+ This package is originally based on the Carnegie Mellon University
+ SNMP implementation (version 2.1.2.1), but has developed significantly
+ since then.
+
+
+
+Where can I get it?
+------------------
+
+ Download:
+ - http://www.net-snmp.org/download/
+ - ftp://ftp.net-snmp.org/pub/sourceforge/net-snmp/
+ Web page:
+ - http://www.net-snmp.org/
+ Sourceforge Project page:
+ - http://www.net-snmp.org/project/
+ Mirrors (note that sourceforge download servers are mirrored themselves):
+ - US: ftp://ftp.freesnmp.com/mirrors/net-snmp/
+ - Greece: ftp://ftp.ntua.gr/pub/net/snmp/net-snmp/
+
+
+What documentation is available?
+-------------------------------
+
+ This FAQ (!)
+ README and individual READMEs for various platforms
+ README.thread (discusses threading issues)
+ INSTALL
+ PORTING
+ EXAMPLE.conf
+ man pages for the individual tools, files and the API
+ A guide for extending the agent
+ Tutorials for both ucd-snmp v4 and net-snmp v5
+ at http://www.net-snmp.org/tutorial/
+ and http://www.net-snmp.org/tutorial-5/ respectively
+
+ Most of this documentation (plus archives of the mailing lists)
+ is also available on our web page:
+
+ http://www.net-snmp.org/
+
+ There is also a Wiki (including a community-maintained version
+ of this FAQ) at
+
+ http://www.net-snmp.org/wiki/
+
+
+
+Are there binaries available?
+----------------------------
+
+ There are binaries for some versions/systems available under
+ the "net-snmp binaries" package on the SourceForge "Files"
+ page, which is linked to from the main project download web
+ page at http://www.net-snmp.org/download.html.
+
+ These binaries are also available on the project FTP site,
+ with a link on the same web page.
+
+ There is also a mirror at ftp://ftp.freesnmp.org/mirrors/net-snmp/
+
+
+
+What's the difference between UCD-SNMP and Net-SNMP?
+---------------------------------------------------
+
+ Not a great deal, really.
+ Although the project originally started at UC Davis (hence the name),
+ and it has always been based there, most of the contributors have had
+ little or no connection with this institution.
+
+ The move to SourceForge was intended to provide a more flexible
+ environment for the project, and to distribute the administrative
+ workload more evenly. The change of name simply reflects this move,
+ which was the last remaining link with UC Davis.
+
+ The 4.2.x line saw the last releases made using the ucd-snmp name,
+ and all releases on this line have been been bug-fixes only. Release
+ 5.0 was the first version released under the Net-SNMP name, and all
+ further development is being done on the 5.x code base. The 4.2.x
+ code line is now almost completely dormant, and is due to be closed
+ down altogether.
+
+ Much of the work done for the various 5.x releases has involved
+ some fairly significant changes to the code - in particular the
+ architecture of the agent. However attempts have been made to retain
+ backwards compatibility as much as possible, and most code written
+ for earlier releases should continue to work. The most significant
+ change from the 4.2.x ucd suite to the 5.x Net-SNMP releases was a
+ restructuring of the header file organisation - not least a change
+ from <ucd-snmp/xxx.h> to <net-snmp/yyy.h>.
+
+ But given the maturity of the Net-SNMP code, this should be less
+ of a consideration for most current SNMP development projects.
+
+
+
+What operating systems does it run on?
+-------------------------------------
+
+ Both the applications and the agent have been reported as running
+ (at least in part) on the following operating systems:
+
+ * Linux (kernels 2.6 to 1.3)
+ * Solaris/SPARC (11 to 2.3), Solaris/Intel (10, 9) -- see
+ README.solaris
+ * HP-UX (11.31 to 9.01) -- see README.hpux11
+ * Mac OS X (10.5 to 10.1) -- see README.osX
+ * NetBSD (2.0 to 1.0)
+ * FreeBSD (7.0 to 2.2)
+ * OpenBSD (4.0 to 2.6)
+ * BSDi (4.0.1 to 2.1)
+ * AIX (6.1, 5.3, 5.2, 5.1, 4.3.3, 4.1.5, 3.2.5) -- see README.aix
+ * IRIX (6.5 to 5.1)
+ * OSF (4.0, 3.2 and Tru64 Unix 5.1B) -- see README.tru64
+ * SunOS 4 (4.1.4 to 4.1.2)
+ * Ultrix (4.5 to 4.2)
+ * Dynix/PTX 4.4
+ * QNX 6.2.1A
+
+ We have also been informed about a port to the Stratus VOS.
+ See http://ftp.stratus.com/vos/network/network.html for details.
+
+ See the next question but one for the status of Windows support.
+
+ Certain systems fail to compile particular portions of the agent.
+ These can usually be persuaded to compile (at the loss of some
+ functionality) by omitting the modules affected.
+ See the next question for more details.
+
+ Also note that the presence of a particular configuration in this
+ list does not imply a perfect or complete implementation. This
+ is simply what various people have reported as seeming to work.
+ (Or more frequently, the configurations where people have reported
+ problems that we think we've subsequently fixed!)
+
+
+
+What happens if mine isn't listed?
+---------------------------------
+
+ It's probably worth trying to compile it anyway. Unless your
+ system is significantly different to the supported configurations,
+ most of the code (library, applications and the agent infrastructure)
+ should probably compile with little or no difficulty. The most
+ likely source of problems will be MIB modules within the agent,
+ as this tends to be where the most system-specific code is found.
+
+ If only a few modules fail to compile, try removing them from
+ the agent by running "configure --with-out-mib-module=xxx,yyy",
+ and re-compiling. If a large number of modules fail, then it
+ might be easier to start from a relatively bare system, using
+ "configure --enable-mini-agent --with-defaults". Then if this
+ minimal agent compiles and runs successfully, try adding each of
+ the missing mibgroups individually using the configure option
+ '--with-mib-module'.
+
+ If configure fails with "invalid configuration" messages, or
+ you get completely stuck, contact the coders list for advice.
+ Similarly, if you manage to get this working on a new system,
+ please let us know of any code changes that you needed to make,
+ together with details of the hardware you're using, and what
+ versions of the operating system you've tried it on. The entry
+ 'host' in the file 'config.status' should show this information.
+ Oh, and congratulations!
+
+
+
+Does it run on Windows?
+----------------------
+
+ The suite should compile and run on Win32 platforms, including
+ the library, command-line tools and the basic agent framework.
+ Note that the agent now includes support for the MIB-II module,
+ but this requires Microsoft's Core Platform SDK. Instructions
+ for how to install this are given in README.win32.
+
+ Pre-compiled binaries are available from the project web site.
+
+ As of v5.4, the Net-SNMP agent is able to load the Windows SNMP
+ service extension DLLs by using the Net-SNMP winExtDLL extension.
+
+ Some other Net-SNMP MIB modules, including the UCD pass-through
+ extensions, do not currently work under Windows. Volunteers to assist
+ with these missing modules are likely to welcomed with open arms :-)
+
+ Further details of Windows support (currently Visual C++, MinGW
+ and Cygnus cygwin32) is available in the file README.win32.
+
+
+
+How do I find out about new releases?
+------------------------------------
+
+ There is a mailing list for these announcements
+
+ net-snmp-announce@lists.sourceforge.net
+
+ To be added to (or removed from) this list, visit
+ http://www.net-snmp.org/lists/net-snmp-announce/. Or you can send a
+ message to the address
+ 'net-snmp-announce-request@lists.sourceforge.net' with a subject
+ line of 'subscribe' (or 'unsubscribe' as appropriate).
+
+ Major code revisions may be announced more widely (e.g. on the
+ SNMP mailing lists, or comp.protocols.snmp) but this list is the most
+ reliable way to keep in touch with the status of this package.
+
+ Patches to fix known problems are also made available via the web site:
+
+ http://www.net-snmp.org/patches/
+
+
+
+How can I find out what other people are doing?
+----------------------------------------------
+
+ There is a general purpose discussion list
+
+ net-snmp-users@lists.sourceforge.net
+
+ To be added to (or removed from) this list, visit
+ http://www.net-snmp.org/lists/net-snmp-users. Or you can send a
+ message to the address 'net-snmp-users-request@lists.sourceforge.net'
+ with a subject line of 'subscribe' (or 'unsubscribe' as appropriate).
+
+ To find out what the developers are doing, and to help them out, please
+ read the PORTING file enclosed with the package.
+
+ There is also an net-snmp IRC channel set up on the freenode.net IRC
+ chat servers (you can use irc.freenode.net to connect and/or see
+ http://www.freenode.net/ for getting started with irc). Several
+ core developers hang out there on a regular basis.
+
+
+
+How do I submit a patch or bug report?
+-------------------------------------
+
+ The best way to submit a bug report is via the bug database through
+ the interface found at http://www.net-snmp.org/bugs/. Be sure to
+ include the version of the package that you've been working with,
+ the output of the command 'uname -a', the precise configuration or
+ command that triggers the problem and a copy of any output produced.
+
+ All patches should be submitted to the patch manager at
+ http://www.net-snmp.org/patches/. If possible, submit a
+ bug report describing the patch as well (referencing it by its patch
+ number) since the patch manager doesn't contain a decent description
+ field.
+
+ Questions about using the package should be directed at the
+ net-snmp-users@lists.sourceforge.net mailing list. Note that this
+ mailing list is relatively busy, and the people answering these
+ questions are doing so out of the goodness of their hearts, and in
+ addition to their main employment. Please note the following:
+
+ - use plain text mail, rather than HTML
+ - don't resend questions more than once
+ (even if no-one answered immediately)
+ - include full details of exact commands and error messages
+ ("I've tried everything, and it doesn't work" isn't much use!)
+ - do *NOT* send messages to -users and -coders mailing lists
+ (most developers read both anyway)
+ - don't mail the developers privately - keep everything on the list
+
+ Remember that this is basically an unsupported package. Fundamentally
+ it's Open Source, so you have the source code. If you need something
+ fixing badly enough, it's up to you to do the work.
+
+ We can't promise to be able to solve all problems, but we'll
+ certainly try and help. But remember that this is basically an
+ unsupported package. It's Open Source, so if you need something
+ fixing badly enough, fundamentally it's up to you to do the work.
+
+
+
+Can I reuse the code in my commercial application?
+-------------------------------------------------
+
+ The details of the COPYRIGHTs on the package can be found in the COPYING
+ file. You should have your lawyer read this file if you wish to use the
+ code in your commercial application. We will not summarize here what is
+ in the file, as we're not lawyers and are unqualified to do so.
+
+
+
+What's the difference between SNMPv1, SNMPv2 and SNMPv3?
+-------------------------------------------------------
+What's the difference between SNMPv2 and SNMPv2c?
+------------------------------------------------
+
+ A full description is probably beyond the scope of this FAQ.
+ Very briefly, the original protocol and admin framework was
+ described in RFCs 1155-1157, and is now known as SNMPv1.
+
+ Practical experience showed up various problems and deficiencies
+ with this, and a number of revised frameworks were developed to try
+ and address these problems. Unfortunately, it proved difficult to
+ achieve any sort of agreement - particularly over the details of
+ the administrative framework to use.
+
+ There was less disagreement over the proposed changes to the
+ protocol operations. These included:
+ * increasing the range of errors that could be reported
+ * introducing "exception values"
+ (so a single missing value didn't affect
+ the other varbinds in the same request)
+ * a new GETBULK operation
+ (a supercharged GETNEXT)
+ * new notification PDUs
+ (closer in structure to the other request PDUs)
+
+ Strictly speaking, it's this revised protocol (originally defined
+ in RFC 1905, and most recently in RFC 3416) that is "SNMPv2".
+
+ The only framework based on this protocol that saw a significant
+ level of use was "Community-based SNMPv2" or "SNMPv2c" (defined in
+ RFCs 1901-1908). This retained the same administrative framework
+ as SNMPv1 (with all of the accompanying limitations), but using
+ the new protocol operations.
+
+ More recently, a new administrative framework has been developed,
+ building on the various competing SNMPv2 proposals, and using the
+ same SNMPv2 protocol operations. This is SNMPv3, which is defined
+ in RFCs 3411-3418. It addresses some of the deficiencies of the
+ community-based versions, including significant improvements to
+ the security of SNMP requests (like it finally has some!).
+ SNMPv3 is now a full IETF standard protocol.
+
+ Strictly speaking, SNMPv3 just defines a fairly abstract framework,
+ based around the idea of "Security Models" and "Access Control Models".
+ It's this combination of SNMPv3 plus accompanying models that actually
+ provides a working SNMP system.
+ However, the only models in common use are the "User-based Security
+ Model" (RFC 3414) and the "View-based Access Control Model" (RFC 3415).
+ So "SNMPv3" is frequently used to mean the combination of the basic
+ SNMPv3 framework with these two particular models.
+ This is also sometimes described as "SNMPv3/USM".
+
+
+ So in brief:
+ - SNMPv2c updated the protocol operations
+ but left the administrative framework unchanged.
+ - SNMPv3 updated the administrative framework
+ but left the protocol operations unchanged.
+
+
+
+Which versions of SNMP are supported in this package?
+----------------------------------------------------
+
+ This package currently supports the original SNMPv1, Community-based
+ SNMPv2 (i.e. RFCs 1901-1908), and SNMPv3 (i.e. RFCs 3411-3418).
+ The agent will respond to requests using any of these protocols,
+ and all the tools take a command-line option to determine which
+ version to use.
+
+ Support for SNMPv2 classic (a.k.a. "SNMPv2 historic" - RFCs 1441-1452)
+ was dropped with the 4.0 release of the UCD-snmp package.
+
+
+
+Can I use SNMPv1 requests with an SNMPv2 MIB (or vice versa)?
+------------------------------------------------------------
+
+ Yes.
+
+ The syntax used to specify a MIB file (better referred
+ to as SMIv1 or SMIv2) is purely concerned with how to define
+ the characteristics of various management objects. This is
+ (almost) completely unrelated to the versions of the protocol
+ used to operate on these values. So it is quite reasonable to
+ use SNMPv1 requests on objects defined using SMIv2, or SNMPv2
+ (or SNMPv3) requests on objects defined using SMIv1.
+
+ The one exception is objects of syntax Counter64, which are
+ only accessible using SNMPv2 or higher. SNMPv1 requests will
+ either treat such objects as an error, or skip them completely.
+
+
+
+Where can I find more information about network management?
+----------------------------------------------------------
+
+ There are a number of sites with network management information on
+ the World Wide Web. Some of the most useful are
+
+ http://www.simpleweb.org/
+ http://www.snmplink.org/
+ http://www.mibdepot.com/
+
+ There are two Usenet newsgroups which are relevant.
+ 'comp.dcom.net-management'
+ which discusses general issues relating to network management
+ 'comp.protocols.snmp'
+ which is specifically concerned with use of SNMP in particular
+
+ (though there is a large overlap between these two groups).
+ The SNMP group also has an FAQ (split into two parts) which discusses more
+ general issues related to SNMP, including books, software, other sites,
+ how to get an enterprise number, etc, etc.
+ This is available from
+
+ ftp://rtfm.mit.edu/pub/usenet/comp.protocols.snmp/
+
+ or via any of the Web sites above.
+
+
+
+Is Net-SNMP thread safe?
+-----------------------
+
+ Strictly speaking, no. However, it should be possible to use the
+ library in a thread-safe manner. This is covered in detail in the file
+ README.thread (shipped with the standard distribution), but can be
+ summarised as follows:
+
+ - Call 'snmp_sess_init()' prior to activating any threads.
+ This reads in and parses MIB information (which isn't thread-safe)
+ as well as preparing a session structure for subsequent use.
+
+ - Open an SNMP session using 'snmp_sess_open()' which returns an
+ opaque session handle, which is essentially independent of any
+ other sessions (regardless of thread).
+
+ - Resource locking is not handled within the library, and is the
+ responsibility of the main application.
+
+ The applications and the agent have not been designed for threaded use.
+ It should be safe to use the agent library to embed a subagent within
+ a threaded application as long as *all* SNMP-related activity (including
+ generating traps, and parsing MIBs) is handled within a single thread.
+
+ Unfortunately, the SNMPv3 support was added about the same time as
+ the thread support and since they occurred in parallel the SNMPv3
+ support was never checked for multi-threading correctness. It is
+ most likely that it is not thread-safe at this time.
+
+
+APPLICATIONS
+============
+
+How do I add a MIB?
+------------------
+
+ This is actually two separate questions, depending on whether you
+ are referring to the tools, or the agent (or both).
+ See the next question or the next section respectively.
+
+
+
+How do I add a MIB to the tools?
+-------------------------------
+
+ Adding a MIB to the client-side tools has two main effects:
+
+ - it allows you to refer to MIB objects by name
+ (rather than having to use the numeric OIDs)
+ - it allows the results to be displayed in a more immediately
+ meaningful fashion. Not just giving the object names, but
+ also showing named enumeration values, and interpreting table
+ indexes properly (particularly for string and OID index values).
+
+ Most of the tools (apart from 'snmptable') will work quite happily
+ without any MIB files at all - although the results won't be displayed
+ in quite the same way.
+ The same holds true for the agent - see the AGENT section for details.
+
+
+ There are two steps required to add a new MIB file to the tools.
+ Firstly, copy the MIB file into the appropiate location:
+
+ cp MY-MIB.txt /usr/local/share/snmp/mibs
+ (which makes it available to everyone on the system)
+
+ or
+
+ mkdir $HOME/.snmp
+ mkdir $HOME/.snmp/mibs
+ cp MY-MIB.txt $HOME/.snmp/mibs
+ (which makes it available to you only)
+
+ Note that the location of the shared MIB directory may be different
+ from that given here - particularly if you're working with a vendor
+ supplied distribution. See where the MIBs are currently installed,
+ and copy the new MIB to the same place.
+
+
+ Secondly, tell the tools to load this MIB:
+
+ export MIBS=+MY-MIB
+ (load it for this session only)
+
+ or
+
+ echo "mibs +MY-MIB" >> $HOME/.snmp/snmp.conf
+ (load it every time)
+
+ This will add the new MIB to the list of MIBs loaded by default.
+ Omitting the '+' will *replace* the list of MIBs to be loaded by
+ the specified (colon-separated) list - together with any MIBs that
+ they explicitly rely on.
+ Note that the value for this variable is the name of the MIB
+ module, *not* the name of the MIB file. These are typically the
+ same (apart from the .txt suffix), but if in doubt, check the contents
+ of the file. The value to use is the token immediately before the
+ word DEFINITIONS at the start of the file.
+
+ If you prefer to have the tools load all available MIBs (which
+ may slow them down), then set the MIBS environmental variable
+ (or the snmp.conf token "mibs") to the special value "ALL".
+
+ Note that you need *both* steps.
+
+
+
+Why can't I see anything from the agent?
+---------------------------------------
+
+ There are two main general causes of problems retrieving information
+ from the agent. Either the client tool may not like the request (and
+ refuse to send it at all), or the agent may not respond with anything
+ useful. The simplest way to distinguish between the two is to run the
+ command with the command-line option '-d'.
+
+ If this doesn't display a hex dump of the raw outgoing packet, then
+ it's the client side which is dropping the request. Hopefully you
+ should see some form of error message, to help identify what's wrong.
+
+ If this displays one or more outgoing dumps (but nothing coming back),
+ then the request is failing at the agent end. See the next entry for
+ more details.
+
+ If you see dumps of both the outgoing request, and a response, but
+ no results are displayed, then either there may be a problem with
+ decoding the response (in which case you should see an error message),
+ or the agent may simply not support the requested information (and the
+ response is being discarded as irrelevant).
+
+
+
+Why doesn't the agent respond?
+-----------------------------
+
+ Assuming that the client application is actually sending the request
+ (see the previous entry), there are two main likely causes for the agent
+ not to respond. Either it doesn't receive the request (e.g. it's being
+ blocked by a firewall or packet filtering), or it receives the request,
+ but is unwilling (or unable) to process it. Note that if an agent
+ receives an SNMPv1 or SNMPv2c request with an unknown community string,
+ then it will not return an error response - the request simply times out.
+
+ If the remote system is running the Net-SNMP agent, then the easiest
+ way to check what's going wrong is to shut down the agent, and re-start
+ it using the options:
+ -f -Le -d
+ This will display raw dumps of packets seen (or sent) by the agent,
+ just as the '-d' flag did for the client side in the previous entry.
+
+ Restart the agent with these flags, and send the same query as before.
+ If the agent doesn't display anything in response to this request, then
+ it's probably some form of firewall settings, which are preventing the
+ agent from ever seeing the request.
+
+ If the agent displays a dump of the incoming request, but nothing going
+ out, then the most likely cause is access control settings. See the
+ relevant entries in the AGENT section for details.
+
+ A third possibility is that the agent *is* responding to the request,
+ but only after a long delay. This would be indicated by a series of
+ incoming packet dumps (showing various retries from the client side),
+ followed by several outgoing dumps - possibly long after the client
+ tool has given up in disgust.
+ See the entry
+ The agent worked for a while, then stopped responding. Why?
+ later in this section.
+
+ The same basic causes could also affect other vendors' SNMP agents.
+ Please consult the relevant documentation for how to investigate and
+ address such problems.
+
+
+
+I can see the system group, but nothing else. Why?
+--------------------------------------------------
+
+ This is almost definitely due to the access configuration of the agent.
+ Many pre-configured systems (such as most Linux distributions) will only
+ allow access to the system group by default, and need to be configured
+ to enable more general access.
+
+ The easiest way to test this is to try a GETNEXT request that ought
+ to return the entry of interest.
+ e.g.
+ snmpgetnext -v1 -c public localhost UCD-SNMP-MIB::versionTag
+ instead of
+ snmpget -v1 -c public localhost UCD-SNMP-MIB::versionTag.0
+
+ If the agent responds with "end of MIB" or a different object, then
+ either the agent doesn't implement that particular object at all, or
+ the access control won't allow you access to it.
+
+ See the entries on access control in the AGENT section for how to
+ configure the Net-SNMP agent, or consult the agent's own documentation.
+
+
+
+Why can't I see values in the <ENTERPRISE> tree?
+-----------------------------------------------------------
+
+ If you're walking a specific tree, but failing to see anything in
+ it, then the most likely cause is that the agent simply does not
+ implement those particular MIB objects. Or if it does, that the
+ access control or other configuration settings mean that there's
+ nothing for you to see there.
+
+ However, if you're trying a basic "snmpwalk" with no explicit OID
+ specified, then this would also explain why you're not seeing any
+ enterprise-specific results.
+
+ By default, unless given an explicit starting OID, then the 'snmpwalk'
+ command will display the contents of the 'mib-2' tree, containing most
+ of the IETF-standard management information supported by the agent.
+ When the agent reaches the end of this tree, it will return the first
+ enterprise-specific value, and 'snmpwalk' will recognise that this
+ marks the end of the (implicit) request tree, and stop. No
+ enterprise-specific information will be displayed.
+
+ To walk the whole tree, and see *all* the information that the
+ agent supports, specify a starting point of '.iso' or '.1'.
+ To walk a specific enterprise subtree, specify the root of this tree
+ as the starting point - e.g:
+
+ snmpwalk -v1 -c public localhost UCD-SNMP-MIB::ucdavis
+
+ There is more information about particular UCD-specific subtrees in
+ the AGENT section.
+
+
+
+The agent worked for a while, then stopped responding. Why?
+-----------------------------------------------------------
+
+ There are three basic possibilities:
+ - the agent has crashed
+ - it is hanging
+ - it is temporarily overloaded
+
+ Detecting whether the agent has crashed should be fairly straighforward.
+ If you can reliably reproduce this crash (e.g. by sending a particular
+ SNMP request), then contact the coders list for advice.
+ It's the other two cases that are probably more significant.
+
+ To tell the difference between these two, try leaving the agent
+ undisturbed for a while, and then probe it using a single 'snmpget'
+ request, specifying a longer timeout (e.g. '-t 120'). If it now
+ responds, then something was probably sending requests (including
+ duplicate retries) faster than the agent could process them, and it
+ was building up a backlog. Try adjusting the timeout period and retry
+ frequency of these client requests, or look at improving the efficiency
+ of the implementation of the relevant MIB objects.
+
+ If the agent remains unresponsive (particularly if the load on the
+ system is steadily climbing), then it's probably hanging, and all
+ you can really do is restart the agent. If you can identify what
+ causes this to happen, then contact the coders list for advice.
+
+
+
+Requesting an object fails with "Unknown Object Identifier" Why?
+----------------------------------------------------------------
+
+ If a general snmpwalk shows a particular entry, but asking for it more
+ specifically gives a "sub-identifier not found:" or "Unknown Object
+ Identifier" error, then that's a problem with the tool, rather than
+ the agent.
+
+ Firstly, make sure that you're asking for the object by the right name.
+ Object descriptors are case-sensitive, so asking for 'sysuptime' will
+ not be recognised, but 'sysUpTime' will.
+
+ Alternatively, the object may be defined in a MIB that hasn't been
+ loaded. Try loading in all the MIB files:
+
+ snmpget -m ALL -v1 -c public localhost sysUpTime.0
+
+ or specify the name of the appropriate MIB explicitly:
+
+ snmpget -v1 -c public myhost SNMPv2-MIB::sysUpTime.0
+
+ Note that this uses the name of the *module*, not the name of the file.
+ See the second entry in this section for the distinction. However,
+ if 'snmpwalk' displays the object by name, this is unlikely to be the
+ cause, and you should look closely at the exact object name you are using.
+
+
+
+Why do I get "noSuchName" when asking for "sysUpTime" (or similar)?
+------------------------------------------------------------------
+
+ Assuming that you do have access to this object, the most likely
+ cause is forgetting the "instance subidentifier".
+
+ If you try walking the 'system' group, you should notice that all
+ of the results have a number after the MIB object name. This is
+ the "instance subidentifier" of that particular MIB instance.
+
+ For values from the sysORTable, this basically provides an index into
+ the table, and should be very familiar. But the other values in the
+ system group also have an instance number displayed. For non-table
+ objects ("scalars"), this instance subidentifier will always be '0',
+ and it *must* be included when making a GET request.
+
+ Compare the following:
+
+ $ snmpget -v1 -c public localhost sysUpTime
+ Error in packet
+ Reason: (noSuchName) There is no such variable name in this MIB.
+ This name doesn't exist: system.sysUpTime
+ $ snmpget -v1 -c public localhost sysUpTime.0
+ system.sysUpTime.0 = Timeticks: (69189271) 8 days, 0:11:32.71
+
+ This is a little less obscure when using SNMPv2c or v3 requests:
+
+ $ snmpget -v 2c -c public localhost sysUpTime
+ system.sysUpTime = No Such Instance currently exists
+
+
+
+Why do I sometimes get "End of MIB" when walking a tree, and sometimes not?
+--------------------------------------------------------------------------
+
+ This depends on which MIB modules are supported by the agent you are
+ querying and exactly what you're asking for.
+
+ Note that a tree is walked by repeatedly asking for "the next entry" until
+ all the values under that tree have been retrieved. However, the agent has
+ no idea that this is what's happening - all it sees is a request for "the
+ next entry after X".
+
+ If the object X happens to be the last entry in a sub-tree, the agent will
+ provide the next object supported (as requested) even though this will be
+ in a different subtree. It's up to the querying tool to recognise that
+ this last result lies outside the area of interest, and simply discard it.
+
+ If the object X happens to be the last entry supported by the agent, it
+ doesn't have another object to provide, so returns an "end of MIB"
+ indication. The Net-SNMP tools report this with the message above.
+
+ But in either case, the actual information provided will be the same.
+
+
+
+How do I use SNMPv3?
+-------------------
+
+ The simplest form of SNMPv3 request is unauthenticated and unencrypted
+ (noAuthNoPriv). It still requires a user name (and the agent must be
+ configured to allow unauthenticated requests from that user). Such a
+ request would look something like:
+
+ snmpget -v 3 -l noAuthNoPriv -u dave localhost sysUpTime.0
+
+ An authenticated request (authNoPriv) would specify a pass phrase to
+ authenticate with:
+
+ snmpget -v 3 -l authNoPriv -u dave -A "Open the Door"
+ localhost sysUpTime.0
+
+ A fully secure request (authPriv) would also specify the privacy
+ pass phrase:
+
+ snmpget -v 3 -l authPriv -u dave -A "Open the Door"
+ -X "Bet you can't see me" localhost sysUpTime.0
+
+ In practise, most of these would probably be set via configuration
+ directives in a personal $HOME/.snmp/snmp.conf file (note, *not* the
+ agent's snmpd.conf file). The equivalent settings for the third
+ example would be:
+
+ defSecurityName dave
+ defSecurityLevel authPriv
+ defAuthPassphrase "Open the Door"
+ defPrivPassphrase "Bet you can't see me"
+
+ If the AuthPassphrase and the PrivPassphrase are the same, then you
+ can use the single setting
+ defPassphrase "Open the Door and see me"
+ instead.
+
+ See the AGENT section for how to configure the agent for SNMPv3 access.
+
+
+
+Why can't I set any variables in the MIB?
+----------------------------------------
+
+ There are three possible reasons for this:
+
+ Many MIB objects are defined as "read-only" and inherently cannot be
+ changed via SET requests. Attempts to do so will typically be dropped
+ by the 'snmpset' command without ever being sent to the agent.
+
+ Of those objects that can in principle be changed, the agent may not
+ include the code necessary to support SET requests. (GET and GETNEXT
+ are much easier to handle - particularly for objects relating to the
+ internals of the underlying operating system).
+
+ Even if SET support has been implemented, the agent may not be configured
+ to allow write access to this object.
+
+ Ready-installed distributions (such as those shipped with Linux) tend
+ to be configured with read-only access to part of the mib tree (typically
+ just the system group) and no write access at all.
+
+ To change this, you will need to set up the agent's access control
+ configuration. See the AGENT section for more details.
+
+ Note that neither the community string "public" nor "private" can be
+ used to set variables in a typical default configuration.
+
+
+
+Variables seem to disappear when I try to set them. Why?
+--------------------------------------------------------
+
+ This is actually the same as the previous question - it just isn't
+ particularly obvious, particularly when using SNMPv1. A typical
+ example of this effect would be
+
+ $ snmpget -v1 -c public localhost system.sysLocation.0
+ system.sysLocation.0 = somewhere nearby
+
+ $ snmpset -v1 -c public localhost system.sysLocation.0 s "right here"
+ Error in packet.
+ Reason: (noSuchName) There is no such variable name in this MIB.
+ This name doesn't exist: system.sysLocation.0
+
+ Trying the same request using SNMPv2 or above is somewhat more informative:
+
+ $ snmpset -v 2c -c public localhost system.sysLocation.0 s "right here"
+ Error in packet.
+ Reason: notWritable
+
+ The SNMPv1 error 'noSuchName' actually means:
+
+ "You can't do that to this variable"
+
+ rather than "this variable doesn't exist". It may be the case that it
+ doesn't exist at all. It may exist but you don't have access to it
+ (although someone else with different administrative credentials might do).
+ Or it may exist, but you simply can't perform that particular operation
+ (e.g. changing it).
+ Similarly, the SNMPv2 error 'notWritable' means "not writable in
+ this particular case" rather than "not writable under any circumstances".
+
+ If you are sure that the object is writable (and has been implemented
+ as such), then you probably need to look at the agent access control.
+ See the AGENT section for more details.
+
+
+
+Why can't I change sysLocation (or sysContact)?
+----------------------------------------------
+
+ Assuming that the access control settings should allow this, another
+ possibility for the 'sysLocation' and 'sysContact' objects is that
+ you've got a configuration option in the 'snmpd.conf' file which
+ already sets the corresponding value there.
+
+ Earlier versions of the Net-SNMP agent would allow you to write to
+ these objects, but the new value would be forgotten the next time the
+ agent was re-started. More recent versions of the agent reject such
+ write requests if there's a value configured via the 'snmpd.conf' file.
+ If there isn't such a config setting, then the write request will succeed
+ (assuming suitable access control settings), and the new value will be
+ retained the next time the agent restarts.
+
+
+
+I get an error when trying to set a negative value - why?
+--------------------------------------------------------
+
+ This is a different problem. What's happening here is that the
+ routine that parses the arguments to the 'snmpset' command is seeing
+ the '-' of the new value, and treating it as a command-line option.
+ This normally generates an error (since digits typically aren't valid
+ command line options).
+
+ The easiest way to solve this is include the "end-of-option"
+ indicator '--' in the command line, somewhere before the new value
+ (but after all of the options, obviously). For example:
+
+ snmpset -v 2c -c public localhost -- versionRestartAgent.0 i -1
+
+ (This will also fail, since -1 isn't an acceptable value for this
+ particular object, but that's not the point here!)
+
+
+
+I get an error when trying to get a string-indexed table value - why?
+--------------------------------------------------------------------
+
+ This is probably due to the shell swallowing the quotes, before
+ they ever get to the SNMP command's OID parser. Try escaping them:
+
+ snmpget ..... vacmGroupName.3.\"wes\"
+ or snmpget ..... 'vacmGroupName.3."wes"'
+
+
+
+How do I send traps and notifications?
+---------------------------------------
+
+ Traps and notifications can be sent using the command 'snmptrap'.
+ The following examples generate the generic trap 'coldStart' and a
+ (dummy) enterprise specific trap '99' respectively:
+
+ snmptrap -v 1 -c public localhost "" "" 0 0 ""
+ snmptrap -v 1 -c public localhost "" "" 6 99 ""
+
+ The empty parameters "" will use suitable defaults for the relevant
+ values (enterprise OID, address of sender and current sysUptime).
+
+ An SNMPv2 or SNMPv3 notification (either trap or inform) takes
+ the OID of the trap to send:
+
+ snmptrap -v 2c -c public localhost "" UCD-SNMP-MIB::ucdStart
+ snmptrap -v 2c -c public localhost "" .1.3.6.1.4.1.2021.251.1
+
+ (These two are equivalent ways of specifying the same trap).
+
+ Any of these commands can be followed by one or more varbinds,
+ using the same (OID/type/value) syntax as for 'snmpset':
+
+ snmptrap -v 2c -c public localhost "" ucdStart sysContact.0 s "Dave"
+
+ Generating traps from within the agent is covered in the AGENT and
+ CODING sections.
+
+ You should also read the snmptrap tutorial at
+ http://www.net-snmp.org/tutorial-5/commands/snmptrap.html
+ which will help you understand everything you need to know about traps.
+
+
+
+How do I handle traps and notifications?
+---------------------------------------
+
+ Handling received traps is done using the tool 'snmptrapd'.
+ This can log these traps via the syslog mechanism:
+
+ snmptrapd -Ls 7 (log to 'LOCAL7')
+
+ printed to standard output
+
+ snmptrapd -f -Lo
+
+ or pass them to an external command. This last approach uses
+ a 'traphandle' directive in the configuration file 'snmptrapd.conf'.
+ A typical file might look something like:
+
+ traphandle .1.3.6.1.6.3.1.5.1 page_me up
+ traphandle .1.3.6.1.4.1.2021.251.1 page_me up
+ traphandle .1.3.6.1.4.1.2021.251.2 page_me down
+ traphandle default log_it
+
+ where 'page_me' and 'log_it' are the command to be run. (You probably
+ need to specify full pathnames, to ensure that the commands will be
+ found. They're just short here for readability).
+
+ Note that the first entry uses the OID corresponding to the SNMPv1
+ 'coldStart' trap. See the co-existence RFC (RFC 2576) for details
+ of mapping SNMPv1 traps to SNMPv2 OIDs.
+
+ Starting with net-snmp 5.3, snmptrapd will no longer automatically
+ accept all incoming traps. It must be configured with authorized
+ SNMPv1/v2c community strings and/or SNMPv3 users. Non-authorized
+ traps/informs will be dropped.
+ Please refer to the snmptrapd.conf(5) manual page for details.
+
+ There's a tutorial with more details on the web site at
+ http://www.net-snmp.org/tutorial-5/commands/snmptrap.html
+
+
+
+My traphandler script doesn't work when run like this - why not?
+---------------------------------------------------------------
+
+ If a traphandler script works fine when run manually from the
+ command line, but fails or generates an error when triggered by
+ an incoming notification, then there are two likely causes.
+
+ Firstly, the interactive shell environment may not be precisely
+ the same as that for programs executed by the snmptrapd daemon.
+ In particular, it's quite possible that the PATH environmental
+ variable may not include all the additional directories that are
+ commonly set up for a personal login configuration. To avoid this
+ problem (particularly for traphandler shell scripts), it's worth
+ giving the full path to all programs used within the script.
+
+ Secondly, the snmptrapd daemon may not always recognise the
+ appropriate interpreter to use for a particular trap handler.
+ If this is the case, then you can specify this interpreter
+ explicitly as part of the trap handle directive:
+
+ traphandle default /usr/bin/perl /usr/local/bin/log_it
+
+ In this case, it's almost certain that you'll also
+ need to give the full path to the traphandle script (as shown)
+
+
+
+How big can an SNMP request (or reply) be?
+-----------------------------------------
+
+ The protocol definition specifies a "minimum maximum" packet size
+ (484 bytes for UDP), which all systems must support, but does not
+ attempt to define an upper bound for this maximum size. This is left
+ to each individual implementation.
+
+ The UCD software used a fixed size buffer of 1472 bytes to hold the
+ encoded packet, so all requests and responses had to fit within this.
+ The Net-SNMP releases handle packet buffers rather differently, and
+ are not subject to the same fixed restrictions.
+
+
+
+How can I monitor my systems (disk, memory, etc)?
+------------------------------------------------
+
+ In general, the Net-SNMP suite consists of relatively low-level
+ tools, and there is nothing included that is designed for high-level,
+ long-term monitoring of trends in network traffic, disk or memory
+ usage, etc.
+
+ There are a number of packages available that are designed for this
+ purpose. Two of the most widely used are MRTG (http://www.mrtg.org/)
+ and RRDtool (http://oss.oetiker.ch/rrdtool/). There are also several
+ frontends built on top of RRDtool, including Cacti (http://www.cacti.net/)
+ and Cricket (http://cricket.sourceforge.net/). There are details of
+ how to set up Cricket to monitor some of the UCD extensions at
+ http://www.afn.org/~jam/software/cricket/
+
+ We have also set up a page that describes in detail how MRTG
+ can be set up to monitor disk, memory and cpu activity at
+ http://www.net-snmp.org/tutorial-5/mrtg/index.html
+
+ There is also a web-based network configuration system "Net-Policy",
+ based upon SNMP. This is not strictly connected to the Net-SNMP project,
+ but a number of the core developers are also involved with that system.
+ See http://net-policy.sourceforge.net for more details.
+
+
+
+Applications complain about entries in your example 'snmp.conf' file. Why?
+--------------------------------------------------------------------------
+
+ There *is* no example 'snmp.conf' shipped with the standard distribution.
+
+ The configuration file 'EXAMPLE.conf' is designed as a config for
+ the agent, and should be installed as 'snmpd.conf' (note the 'd').
+ The file 'snmp.conf' is intended for general configuration options,
+ applicable to all applications (via the SNMP library).
+ Rename (or merge) the 'snmp.conf' file to 'snmpd.conf', and this
+ should fix the problem.
+
+
+
+OK, what should I put in snmp.conf?
+----------------------------------
+
+ This is used to set common configuration values for most of the
+ applications, to avoid having to specify them every time. Examples
+ are the SNMPv3 settings mentioned above, defaults for which MIBs to
+ load and where from (see the second entry in this section),
+ and the default SNMP version, port and (if appropriate) community
+ string to use.
+
+ Some of these (such as the MIB file location), might be best put in
+ a shared snmp.conf file (typically /usr/local/share/snmp/snmp.conf or
+ /etc/snmp/snmp.conf) to apply to all users of the system. Others
+ (particularly the SNMPv3 security settings), are more likely to refer
+ to a particular user, and should go in a personal snmp.conf file
+ (typically $HOME/.snmp/snmp.conf).
+
+ See 'snmpget -H' and/or the snmp.conf(5) man page for more details.
+
+ You can also use the "snmpconf" command to help you generate your
+ snmp.conf configuration file (just run it and answer its questions).
+
+
+
+PERL
+====
+
+Where can I get the Perl SNMP package?
+-------------------------------------
+
+ Joe Marzot's excellent Perl 'SNMP' module, is included in the Net-SNMP
+ source releases. It can be found located in the perl/SNMP subdirectory
+ of the source tree. This is accompanied by a number of Perl modules
+ grouped together under the NetSNMP namespace.
+
+ The basic SNMP module (though not the NetSNMP additions), can also
+ be found at any Comprehensive Perl Archive Network (CPAN) mirror site,
+ under modules/by-module/SNMP. To find the CPAN site nearest you,
+ please see http://www.cpan.org/SITES.html.
+
+ These Perl modules need to be used in conjunction with a compatible
+ version of the Net-SNMP library. Consult the README file in the SNMP
+ Perl distribution to find out which version of the library it needs.
+
+
+
+How do I install the Perl SNMP modules?
+--------------------------------------
+
+ Assuming you have a reasonably new (and properly configured) Perl system,
+ this should be simply:
+
+ cd perl
+ perl Makefile.PL
+ (press RETURN when prompted for host and community)
+ make
+ make test
+ make install (probably as root)
+
+
+ It might be possible to install the basic module using
+
+ perl -MCPAN -e shell ; "install SNMP"
+
+ but this has not been reliably tested, and very much relies on
+ having the correct version of the Net-SNMP library.
+
+ There may also be appropriate pre-compiled versions of the Perl modules
+ available from the Net-SNMP project website, or your O/S vendor.
+
+
+
+But compiling this fails! Why?
+-----------------------------
+
+ The Perl module tends to delve quite deeply into the internals of the
+ main Net-SNMP library, and so is quite sensitive to changes within the
+ library. It's important to use the correct version of the module, that
+ corresponds to the version of the library you have installed. If you're
+ working with a Net-SNMP source distribution, the appropriate versions of
+ the Perl modules are shipped as part of the source code, but you *must*
+ have run "make install" on the main Net-SNMP distribution *first*.
+
+ If you're working with a ready-installed version of the library, make
+ sure you obtain a compatible version of the Perl module.
+
+ Note that the Perl modules will be compiled using the compiler
+ (and compiler settings) used for compiling the original perl binary,
+ *not* those used for compiling the Net-SNMP (or UCD) library.
+ If these are different (e.g. 'gcc' used for one and 'cc' for the other)
+ then this may well cause problems. It's much safer to use a consistent
+ environment for both. This issue is discussed in greater detail in
+ the README.solaris file.
+
+ Also note that the v5 Net-SNMP suite *must* be configured to provide
+ shared libraries in order for the Perl modules to work correctly. This
+ is not necessary with the v4 UCD-SNMP libraries.
+
+
+
+Compiling the Perl module works OK, but 'make test' fails. Why?
+--------------------------------------------------------------
+
+ That's difficult to answer in general.
+ Some of the Perl tests are rather picky, so this may simply be
+ some minor inconsistency between your precise setup, and the
+ expectations of the test environment.
+
+ Check that you are working with the Perl distribution that matches
+ the SNMP libraries (use the 'perl/SNMP' in preference to CPAN), and
+ that you have installed the main libraries successfully (uninstall
+ any old versions if you're having trouble).
+
+ If all this looks OK, and if most of the tests pass, then it's
+ probably safe to run 'make install' anyway. Probably.
+
+
+
+Why can't mib2c (or tkmib) locate SNMP.pm?
+-----------------------------------------
+
+ That's probably because the SNMP Perl module hasn't been installed.
+ It's not part of the standard Perl distribution, nor is it included
+ in the default Fedora Linux installation (for example).
+ You'll need to install it yourself.
+
+ See the second entry in this section.
+
+
+
+Why can't mib2c (or tkmib) load SNMP.so?
+---------------------------------------
+
+ This is probably the same problem. Either the SNMP module
+ hasn't been installed, or it's the wrong version. See the
+ previous questions.
+
+
+
+Why can't tkmib locate Tk.pm?
+----------------------------
+
+ Tk.pm is another Perl package that needs to be installed before tkmib
+ will run. It's also available on Perl CPAN. We suggest using version
+ "Tk800.011" or later. It can be installed by issuing the command:
+
+ perl -MCPAN -e shell ; "install Tk"
+
+
+
+I'm trying to install your RPM, but it complains about missing Perl modules. Why?
+--------------------------------------------------------------------------------
+
+ This has been particularly noted on RedHat 9, complaining about the
+ module "perl(Term::ReadKey)" - even if this is actually present (e.g.
+ having been installed directly from CPAN). In fact, this is not
+ specific to Perl modules - the same issue can potentially arise with
+ other RPM dependencies.
+
+ The problem is that the RPM mechanism keeps a local database of what
+ software packages have been installed, and checks this for any other
+ features that this RPM requires. If software is installed "manually"
+ rather than via rpm packages, then it will not appear in this database.
+ Attempting to install another RPM that rely on this functionality will
+ then complain about the "missing" package, because the RPM system doesn't
+ know that's it's actually available.
+
+ The ideal solution is to *always* install software using a consistent
+ mechanism (which may involve building RPMs locally, or looking for a
+ suitable pre-built version).
+
+ Failing this, it's possible to tell the "rpm" command to ignore such
+ dependencies, and install the package anyway. Try:
+
+ rpm -i --nodeps {package}
+
+ In this situation, it's then up to you to make sure that any other
+ necessary packages *are* actually present on the system.
+
+
+
+I've got a problem with the Net-SNMP module. Can you help?
+----------------------------------------------------------
+
+ Sorry, despite the similar-sounding name, the Net-SNMP (or Net::SNMP)
+ module is nothing to do with this package, or the NetSNMP modules.
+ Net::SNMP is a "pure-perl" implementation of SNMP support, developed
+ by David Town. The developers of the (C-based) Net-SNMP suite do
+ not have any significant experience in using this particular module,
+ and you'll probably be better off asking for help via CPAN or some
+ other perl-related forum.
+
+
+
+MIBS
+====
+
+Where can I find a MIB compiler?
+-------------------------------
+
+ That depends what you mean by a "MIB compiler". There are at least two
+ types of tool that are commonly referred to by this name.
+
+ The first is a tool to check MIB files for validity. This functionality
+ is mostly integrated within the MIB parser (part of the Net-SNMP library)
+ and hence included in all the applications. The tool 'snmptranslate' is
+ probably the most appropriate for this purpose.
+ Note that the parser is fairly forgiving (see 'What ASN.1 parser is used'
+ below), so this should not be regarded as a stamp of approval.
+
+ The second type of tool is one to turn a MIB specification into C code,
+ specifically one designed to aid agent implementation. The command 'mib2c'
+ is an example of such a tool for the Net-SNMP agent.
+ See the CODING section for more information.
+
+
+
+Why aren't my mib files being read in?
+-------------------------------------
+
+ The Net-SNMP library only loads a specific subset of MIB files by default.
+ This list is set at when the suite is first configured and compiled,
+ and basically corresponds to the list of modules that the agent supports.
+ (This is a simplification, but is a reasonable first approximation).
+
+ You can override this by using the command-line option '-m', the
+ environmental variable 'MIBS' or the snmp.conf directive 'mibs'.
+ Each of these take a (colon-separated) list of MIB module names
+ to load. Starting the list with a '+' character will add them to
+ the default list - otherwise it replaces the defaults.
+
+ Using the special value 'ALL' will load all the MIB files that
+ the library can find.
+
+
+ Alternatively, the tools may be looking in the wrong place.
+ The default location for the mib files is /usr/local/share/snmp/mibs.
+ Again, this is set when the suite is first configured and compiled.
+ This can be changed using the environmental variable 'MIBDIRS'
+ or the snmp.conf directive 'mibdirs'.
+
+ Note that this may very well affect you if you've installed a
+ new version of the suite manually, replacing one provided by the
+ supplier (which typically would use a more 'central' location).
+
+
+ Finally, are you sure that you've installed the MIB files?
+ If you've compiled the suite from scratch, you need to run
+ "make install" at least once, before the tools will be able to
+ find the MIB files. This is unlikely to be a problem if you've
+ been working with the tools for a while, but can bite those working
+ with a fresh installation.
+
+
+
+I'm getting answers, but they're all numbers. Why?
+-------------------------------------------------
+
+ This is related to the previous question. The results that you
+ receive do not depend on which MIBs are loaded - just on how the
+ agent was compiled and configured.
+
+ Because the tools don't read in every MIB module they can find (and
+ the relevant MIB file may not be installed anyway), it is quite possible
+ for results from an agent to refer to modules that have not been loaded
+ (particularly with GETNEXT requests, or when walking a tree).
+
+ The results will be reported quite correctly, but won't be translated
+ to use named identifiers or enumerations. To fix this, use the
+ environmental variables MIBS or MIBFILES (or the '-m' and '-M' flags)
+ to read in the relevant module files (assuming these are available).
+
+
+
+What does "Cannot find module (XXX-MIB)" mean?
+---------------------------------------------
+
+ If this error is only generated for one or two modules, then it's
+ likely that the named modules are not being found - perhaps they're
+ not installed in the correct location, are not readable, or the
+ name being used is incorrect. Note that the name reported is the
+ name of the MIB module, which is not necessarily the same as the
+ name of the file. See the question 'How do I add a MIB to the tools?'
+ for more details on this.
+
+ If there are a large number of such errors, then it's more likely
+ that either the MIB files haven't been installed at all, or the
+ library is looking in the wrong place for them.
+ Try running "snmptranslate -Dparse-mibs" to see where the MIB files
+ are expected to be found.
+
+
+
+What about "unlinked OID"?
+-------------------------
+
+ This means that the library has been able to find the MIB module,
+ and parse the individual objects defined in it, but is having problems
+ linking them together into a consistent tree. In particular, it
+ can't find an object corresponding to the name within the braces
+ (i.e. the 'xxx' in '{xxx 99}').
+
+ This is probably due either to a typo in this name (remember that
+ names are case sensitive, so a reference to 'xxx' will *not* match
+ a definition of 'Xxx'), or else the name is defined in another MIB
+ file, and this dependency is missing from the IMPORT clause of this
+ MIB file.
+
+
+
+The parser doesn't handle comments properly. Why not?
+----------------------------------------------------
+
+ The most likely reason is that the line in question contains two
+ (or more) sequences of pairs of dashes. This is often used to try
+ and "comment out" an unwanted line that already contains a comment:
+
+ -- broken ::= { myMIB 1 } -- This isn't working yet
+
+ The assumption here is that a comment continues to the end of the line.
+ Unfortunately, this is not correct. A comment will continue either to
+ the end of the line, *or* the next occurance of a pair of dashes.
+
+ Thus in this case, the definition of "broken" is commented out (as
+ intended) but the following text is treated as an active part of the
+ MIB, and will generate an error.
+
+ A similar effect can be obtained when a line of dashes has been used
+ to try and mark separate parts of a MIB file.
+
+ Most of the applications have a command-line option (-Pc) which will
+ work around this problem by treating the whole line as a comment. But
+ this is not strictly legal, and the offending MIB file should really be
+ corrected.
+
+
+
+How can I get more information about problems with MIB files?
+------------------------------------------------------------
+
+ The command 'snmptranslate' is used to translate between numeric
+ and symbolic forms of OIDs. It uses the same MIB parsing routines
+ as the commands that actually communicate with a network management
+ agent, but can be used standalone. As such, it is a useful tool
+ for identifying problems with reading in MIB files.
+
+ In particular, the following options may be useful in
+ identifying problems:
+ -Pw warns about conflicting symbols
+ -PW prints more verbose warnings about other problems as well
+ (in both cases, ignore the 'xmalloc' reports)
+ -T provides sub-options for various views of these entries
+
+ There are other '-P' options to control various aspects of MIB parsing.
+ See the 'snmptranslate(1)' and 'snmpcmd(1)' man pages for more details,
+ or the tutorial at
+ http://www.net-snmp.org/tutorial-5/commands/snmptranslate.html
+
+
+
+What's this about "too many imported symbols"?
+---------------------------------------------
+
+ Any MIB file starts with an (optional) list of identifiers that
+ it "imports" from other files. The parser handles this using
+ a fixed size buffer to hold the import information.
+ There are two circumstances in which this can result in the
+ error message shown above.
+
+ Firstly, if the MIB file refers to an unusually large number
+ of external identifiers. Handling this case requires a (trivial)
+ patch to the parsing code. Contact the coders list for advice.
+ (This is extremely rare - the only example that
+ we've come across is the Cabletron Trap MIB).
+
+ Much more common is a syntax error in the IMPORTS clause of the
+ MIB file in question. In particular, check that this section ends
+ in a semicolon, before going on to the main MIB object definitions.
+
+
+
+Do I actually need the MIB files?
+--------------------------------
+
+ Probably not.
+ The MIB files play two main roles - they are used to translate
+ between numeric OIDs and the corresponding textual names, and
+ they define the structure and syntax of the relevant MIB objects.
+
+ This second role is perhaps best thought of in terms of a design
+ document. It's vital while developing an application (typically
+ the MIB module or handler within the agent), since it defines
+ what the application (MIB) must actually do. But once the code
+ has been written, the design document becomes redundent.
+ The agent then has the same information hardcoded into it
+ (literally!), and no longer needs the MIB file.
+
+ The translation task is not strictly necessary - SNMP will
+ operate fine without any MIB files at all, as long as you're
+ happy to work with numeric OIDs throughout, and know which MIB
+ objects you're interested in. But it's much easier to work with
+ the (hopefully) meaningful names, enumeration tags and the like,
+ and to view the description of a particular object.
+ This requires having the relevant MIB files installed and loaded.
+
+
+
+AGENT
+=====
+
+What MIBs are supported?
+-----------------------
+
+ The following MIBs are supported (at least in part and on some systems):
+
+ - MIB-2 General network statistics
+ (RFC 1213 and subsequent revisions)
+ - Host Resources (RFC 1514 and 2790)
+ - SNMPv3 framework (RFCs 2571-5, 3411-3418)
+ (including USM, VACM, Target
+ and Notification MIBs)
+ - DisMan Event and Schedule MIBs
+ - MTA-MIB (sendmail)
+ - private UCD/Net-SNMP agent extensions
+ (monitor specified processes and disks,
+ memory, CPU, load average, plus extend
+ the agent using shell commands)
+
+ See README.agent-mibs for details.
+
+ Not all MIB modules are included by default on all systems, and some of
+ these may need to be explicitly requested when the software is first
+ configured and built. From Net-SNMP 5.3 and above, this primarily
+ applies to the MTA-MIB of those listed above.
+
+ There are a few other MIB implementations distributed as part of the
+ source tarball, but these are basically unsupported and most of the
+ core developers have little or no experience with using them.
+
+
+
+What protocols are supported?
+----------------------------
+
+ The agent supports all three current versions of SNMP (v1, v2c and v3),
+ over both UDP and TCP transports, as well as acting as a SMUX (RFC 1227)
+ master agent, AgentX (RFC 2741) in both master and subagent roles, and
+ SNMP proxying.
+
+
+
+How do I configure the agent?
+----------------------------
+
+ That depends on what you want it to do, and what stage of the process
+ you have in mind. There are actually two very distinct ways you can
+ configure the agent.
+
+ Firstly, you can determine what capabilities and defaults are included
+ within the library and agent, at the time that the software is first
+ built. This uses suitable flags to the 'configure' script, before
+ compiling the source.
+ As far as the agent is concerned, the most significant option is
+ '--with-mib-modules' (or '--with-out-mib-modules') to control which
+ MIBs will be supported by the agent. See the next few entries for
+ details.
+
+ You can also control various aspects of the agent behaviour (and the
+ information it returns) at run time, via the 'snmpd.conf' configuration
+ file. Various aspects of this are touched on throughout this FAQ. Or
+ see the snmpd.conf(5) manual page for full details.
+ The "snmpconf" script can help in creating this config file.
+ Start off with 'snmpconf -g basic_setup' to get you going.
+
+
+
+How do I remove a MIB from the agent?
+------------------------------------
+
+ Deleting the text file for a MIB does not affect the agent (other than
+ to prevent it from recognising MIB object names in the config files).
+ It's necessary to tell the agent not to activate the relevant code that
+ actually implements these objects. There are three ways to do this:
+
+ 1) re-run 'configure' to exclude the given MIB module(s) from the
+ build configuration, then recompile and reinstall:
+
+ ./configure --with-out-mib-modules=host ....
+ make
+ make install
+
+ 2) use access control to exclude the mib from the view used to
+ query the agent:
+
+ com2sec public default public
+
+ group public v1 public
+ group public v2c public
+
+ view ourmib included system
+ view ourmib included printmib
+ view ourmib excluded host
+ view ourmib included privatemib
+
+ access public "" any noauth exact ourmib none none
+
+ With v5.3 and above, this can also be done by supplying the
+ relevant view name to the "rocommunity" or similar directive:
+
+ rocommunity public default -V ourmib
+
+ 3) disable the MIB at runtime
+
+ snmpd -I -hr_system,hr_storage,hr_device,hr_other,....
+
+ Note that this relies on knowing which modules are used to
+ implement the relevant MIB objects. If you're not sure,
+ you can check which MIB modules are loaded by getting the
+ agent to report them as they are initialised:
+
+ snmpd -Dmib_init -H
+
+ Hopefully it should then be fairly obvious which ones to turn off.
+
+
+
+
+I've installed a new MIB file. Why can't I query it?
+----------------------------------------------------
+
+ Similarly, installing a new MIB file isn't sufficient for the
+ agent to automatically support this MIB. It's necessary to have
+ some form of code which can provide the corresponding information.
+ The next few entries, and the following section (CODING) address
+ this issue in some detail.
+
+
+
+How do I add a MIB to the agent?
+-------------------------------
+
+ As indicated above, this basically involves writing some code to
+ implement the objects defined in the new MIB. There are three basic
+ approaches that can be used to do this:
+
+ - The agent can invoke an external command or shell script to
+ return the necessary information. There are several possible
+ variations on this approach - see the next entry for details.
+
+ - The agent can pass the request off to another (sub-)agent,
+ which already implements the required MIB. Again, there are
+ several ways of doing this - including AgentX, SMUX and
+ proxied SNMP. See the next entry but one for details.
+
+ - You can write code to implement the new MIB objects, and
+ include this within the agent. This is most commonly C
+ (or C++) code, although the agent can also support MIB modules
+ implemented in perl or (from 5.4) python.
+ See the next section (CODING) for more details.
+
+ Note that there is no visible difference between external commands,
+ subagents, and modules implemented within the main agent itself.
+ Tools querying the agent will see a single MIB structure.
+
+
+
+What's the difference between 'exec', 'sh', 'extend' and 'pass'?
+---------------------------------------------------------------
+
+ 'exec' will fork off the specified command and return the exit status
+ and/or the output. Any arguments are passed directly to the command.
+
+ 'sh' is similar, but invokes a shell to run the command line given.
+ This means that quoted arguments will be recognised as such, and also
+ allows redirection, and other similar shell interpretation. The results
+ are returned in exactly the same way.
+
+ 'extend' is also similar, but provides a richer and more flexible MIB
+ framework - both for configuring the exact command to be run, and for
+ displaying the results.
+
+ None of these mechanisms require the command to have any knowledge of
+ the fact that they are being used in this manner. But the output is
+ returned in a fixed format, and it is up to the receiving application
+ to interpret this appropriately.
+
+
+ 'pass' is a more general mechanism for implementing arbitrary MIB
+ objects. The specified command will be invoked for any request within
+ the named MIB subtree, and should return the information relevant to
+ the requested OID.
+
+ 'pass-persist' is similar, but the command will continue running
+ even after the initial request has been answered.
+
+ All of these mechanisms are described in the 'snmpd.conf(5)' man page,
+ in the section entitled "Extending Agent Functionality".
+
+
+
+What's the difference between AgentX, SMUX and proxied SNMP?
+-----------------------------------------------------------
+
+ All three are protocols that can be used to make two or more agents
+ appear as one to the querying application. In each case, one agent
+ takes the role of "master", and delegates requests to one of the others
+ as and where this is appropriate. The differences between them mainly
+ relate to how data is represented, and the mechanisms for communication
+ between master and subagents.
+
+ SMUX and proxy SNMP both essentially use the standard SNMP packet format.
+ The main difference is that a proxy SNMP subagent need not be aware that
+ it is acting in such a role. It typically listens on a non-standard port,
+ and simply receives requests as usual, forwarded from the master agent.
+ The main issue to be aware of is that such requests will appear to come
+ from the local host, and this may affect how the access control mechanisms
+ need to be set up.
+
+ SMUX uses a similar packet format, but the subagent "registers" with
+ the master agent, providing a suitable password. The Net-SNMP (and UCD)
+ agent includes the possibility of acting as a SMUX master agent, but the
+ suite does not include a subagent API. Note that the SMUX protocol has
+ essentially been superceded by AgentX, but is still provided in order to
+ support existing SMUX subagents. However the core developers have little
+ experience (and even less interest!) in this code, so assistance with
+ SMUX-related problems is likely to be somewhat limited.
+ See the file 'agent/mibgroup/README.smux' for details.
+
+ AgentX uses a more compact (and simpler) packet format, with a richer
+ range of administrative commands, and provides a more flexible and reliable
+ extension mechanism. The Net-SNMP agent can be used in both master and
+ subagent roles, and the agent library can also be used to embed an AgentX
+ subagent within another application.
+ See the file 'README.agentx' for details.
+
+ Note that support for SMUX is not configured in by default. You will
+ need to run configure with the option
+
+ --with-mib-modules=smux
+
+ AgentX support is included by default, but needs to be explicitly
+ activated in the master agent. Do this by adding the line
+
+ master agentx
+
+ to the snmpd.conf file before starting the agent.
+
+
+
+What about 'dlmod' - what's that about?
+--------------------------------------
+
+ The choice of which C-coded modules to include within an agent (or
+ subagent) is usually made when the agent is first built. Adding new
+ MIB modules would therefore require re-compiling the agent. This is
+ not always convenient - particularly when working with a production
+ system, and/or pre-installed binaries.
+
+ Dynamically loaded modules are a means of including a MIB implementation
+ module within the main SNMP agent (or an AgentX subagent) without needing
+ to re-compile and re-link the agent binary. Instead, details of the
+ module(s) to load are specified in the configuration file, and the agent
+ locates the files listed, and merges them in at run time.
+
+ See http://www.net-snmp.org/tutorial-5/toolkit/dlmod/ for more information.
+
+
+
+Which should I use?
+------------------
+
+ That's not easy to answer in general.
+
+ If there's an existing agent that already implements the desired new
+ MIB, then it makes sense to re-use that, via whatever extension protocol
+ it might support. Ideally, this would be an AgentX sub-agent, since the
+ AgentX protocol is deliberately designed for this purpose, and provides
+ a fuller and more reliable mechanism than either SMUX or proxied SNMP.
+ But if the target subagent only supports SMUX or basic SNMP, then that
+ would dictate the extension protocol to use.
+
+ Implementing the module directly within the main agent (or via dlmod)
+ is probably the most efficient and reliable (since there's minimal
+ overheads between the code implementing the MIB module, and the agent
+ framework). But it does assume that there's a suitable mechanism for
+ retrieving the necessary information.
+
+ If the new MIB is monitoring or managing some other subsystem, external
+ to the agent, then it may be necessary to embed a subagent within the
+ subsystem itself - particularly if there's no suitable public API to
+ retrieve the necessary information. In this case, AgentX is probably
+ the most appropriate way forward.
+ Unless you prefer to implement the missing public management API,
+ and develop a module within the main agent instead.
+
+
+ In terms of writing C code for the Net-SNMP agent, the way that the
+ (sub-)agent receives the request is more or less irrelevant. The
+ MIB module API was deliberately designed to be independent of any
+ extension mechanism being used - so the exact same module code could
+ be included as part of a pure-SNMP master agent, or an AgentX subagent,
+ either compiled in or dynamically loaded. No modifications should be
+ needed to the MIB module code itself - just to how it's compiled into
+ the appropriate application.
+
+
+
+Can I use AgentX when running under Windows?
+-------------------------------------------
+
+ Yes, but there are a couple of things to be aware of.
+
+ Firstly, by default the AgentX master listens on the Unix domain
+ socket '/var/agentx/master', which doesn't work under Windows.
+ You'll need to tell it to listen on a TCP port, either by using
+ the command-line option "-x localhost:705", or by adding the
+ directive "agentxSocket localhost:705" to the snmpd.conf file.
+
+ Secondly, be aware that the security of AgentX connectivity is not
+ particularly strong. The examples given here would allow any process
+ running on the local machine to register as an AgentX subagent. The
+ more obvious settings "-x 705" or "agentxSocket 705" would allow
+ a system *anywhere* on the network (or even from remote networks) to
+ register as an AgentX subagent. This could potentially be used to
+ hijack the agent, or provide false information.
+
+
+
+Can I use AgentX (or an embedded SNMP agent) in a threaded application?
+-----------------------------------------------------------------------
+
+ With care.
+
+ As mentioned in the earlier "thread-safe" FAQ entry, the Net-SNMP
+ agent (including the AgentX subagent) has not been designed for
+ threaded operation. In particular, it makes use of various global
+ variables without attempting to protect them against simultaneous
+ use. This means that it is *NOT* safe to have SNMP or AgentX
+ related processing in two separate threads. This also applies to
+ handling GET (and SET) processing in one thread, and generating traps
+ in another. This is still vulnerable to the usual threading problems.
+
+ However, as long as *all* of the SNMP-related activity is limited
+ to the one thread, then there should be no reason why this cannot
+ safely communicate with other threads within the same application,
+ using private (thread-safe) mechanisms.
+
+ But in terms of the Net-SNMP-provided code, the agent (and AgentX
+ subagent) should *not* be regarded as thread-safe.
+
+
+
+How can I run AgentX with a different socket address?
+----------------------------------------------------
+
+ There are two sides to an AgentX connection, and they need to
+ agree about which socket address to use. So if you want to use
+ a different socket, you need to configure both parties accordingly.
+
+ The socket that the Net-SNMP master agent uses to listen for AgentX
+ registrations (and send appropriate requests) can be specified using
+ the option '-x'.
+ The command
+ "snmpd -x localhost:705 ...."
+ would start the agent listening on the TCP port 705 for connections
+ from the local system.
+ The same effect can also be obtained by adding the line
+ agentxsocket localhost:705
+ to the file 'snmpd.conf'.
+
+ The same option can be used with the Net-SNMP agent when running in
+ "subagent" mode, to specify the socket to register with (and receive
+ requests from).
+ So a subagent might connect to the master agent above (both running
+ on the same host), using:
+ "snmpd -X -x localhost:705 ...."
+
+ A subagent running embedded within some other application will
+ typically not understand the same command-line options, so would
+ need to set the same configuration programmatically:
+
+ netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCKET, "localhost:705");
+
+ With the example subagent code from the Net-SNMP tutorial, this line
+ would be added immediately before the 'init_agent' call.
+
+ But also see the mention of AgentX security (or the lack of it!)
+ in the earlier entry.
+
+ The same approach can also be used to listen on a different named
+ socket, using:
+ agentxsocket /tmp/agentx
+ agentxperms 770 770 myuser mygroup
+ or
+ snmpd -x /tmp/agentx ....
+ or
+ netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCKET, "/tmp/agentx");
+ as appropriate.
+
+
+
+How can I turn off SMUX support?
+-------------------------------
+
+ Normally, you would use the command-line option '-I -{module}' to
+ disable the initialisation of a particular MIB module within the
+ agent. Unfortunately, it's not currently possible to turn off SMUX
+ support this way.
+
+ The safest approach is to re-run configure with the option
+ "--with-out-mib-modules=smux", and recompile the agent. If this
+ is not possible, an alternative workaround might be to have the
+ agent bind to an invalid IP address.
+
+ If you put a line such as
+
+ smuxsocket 1.0.0.0
+
+ in the snmpd.conf file, the agent will whinge at startup,
+ but won't accept any incoming SMUX requests.
+
+ If the agent complains about not recognising the "smuxsocket"
+ token, then you're out of luck. You'll either have to recompile
+ from source, or use local firewall rules to block connections
+ to port 199.
+
+
+
+How can I combine two copies of the 'mib2' tree from separate subagents?
+-----------------------------------------------------------------------
+
+ This is the purpose of the SNMPv3 'context' field. Register the MIB
+ module a second time in a non-default context (see the relevant entry
+ in the CODING section for details), and specify this context when
+ querying the agent. The MIB module can use this context information
+ to determine which set of information to report.
+ Or you could register two completely different handlers for the same
+ OID (using different contexts), and the agent will invoke the appropriate
+ code. This holds for both MIB modules implemented within the main agent,
+ or AgentX subagents - the same approach will work for both.
+
+ Contexts can also be used with proxied SNMP requests - just specify
+ the option '-Cn {context}' as part of the "proxy" entry. See the
+ 'snmpd.conf(5)' man page for details.
+
+ It's currently not possible to support parallel MIB trees when using
+ SNMPv1 or SNMPv2c. In principle, it should be possible to use the
+ community string in a similar way, but this has not (yet) been implemented.
+
+ This mechanism is only available with the v5 Net-SNMP agent. The v4
+ UCD agent does not support contexts at all. Sorry about that.
+
+ Another way to handle this would be to tweak one of the subagents to
+ use a different set of (non-standard) OID assignments - perhaps by
+ relocating the whole of the subtree to another (private) OID. This
+ is not ideal, but should work with all configurations.
+
+
+
+What traps are sent by the agent?
+--------------------------------
+
+ The agent sends a 'coldStart(0)' trap when it first starts up, and an
+ enterprise-specific trap 'nsNotifyShutdown' (or 'ucdShutdown') when it
+ stops. It can also be configured to send an 'authenticationFailure(4)'
+ trap when it receives an SNMPv1 request using an unknown community name.
+ The Net-SNMP agent generates an enterprise-specific trap 'nsNotifyRestart'
+ (rather than the standard 'coldStart(0)' or 'warmStart(1)' traps) on
+ receiving a HUP signal - typically after being re-configured.
+
+ The agent does not send 'linkUp' or 'linkDown' traps by default. It can
+ be configured to do this using the directive 'linkUpDownNotifications'.
+ See the 'snmpd.conf(5)' man page (under ACTIVE MONITORING) for details.
+
+ Similarly, it does not generate traps by default when one of the
+ monitored characteristics (disk usage, running processes, etc) enters or
+ leaves an error state. This can be configured using the 'defaultMonitors'
+ directive (again documented under ACTIVE MONITORING).
+
+ Note that these facilities are only available with the v5 Net-SNMP
+ agent, and are not supported by the v4 UCD agent.
+
+
+
+Where are these traps sent to?
+-----------------------------
+
+ With all these alerts, the agent needs to be told where to send them,
+ specifying the type of notification (v1 or v2 trap, or v2 inform) and
+ the community name to use. This uses the snmpd.conf directives 'trapsink',
+ 'trap2sink' and 'informsink' for the destination type, and 'trapcommunity'
+ for the community name. SNMPv3 destinations can be configured using the
+ directive 'trapsess'. See the 'snmpd.conf(5)' man page for details.
+
+ Note that the type of trap generated is totally determined by these
+ directives - irrespective of which API call was used to trigger sending
+ the trap. See the trap-related entries in the CODING section for details.
+
+ A configuration block such as
+
+ trapsink localhost
+ trap2sink localhost
+ informsink localhost
+
+ will result in *three* notifications being sent for each call to
+ 'send_easy_trap()' (or 'send_v2trap()'). Probably not what was wanted!
+
+
+
+How can I send a particular trap to selected destinations?
+----------------------------------------------------------
+
+ This is not currently possible. All notifications will be sent to
+ all configured destinations. The agent does not (currently) support
+ notification filtering.
+
+ There is a preliminary implementation of the snmpNotifyFilterTable
+ which is designed to allow this sort of selective trap direction.
+ However this is not currently active. (The tables are present and
+ can be manipulated and updated, but the information is not consulted)
+ Documentation on how to use this mechanism will appear once the
+ functionality is working properly.
+
+
+
+When I run the agent it runs and then quits without staying around. Why?
+-----------------------------------------------------------------------
+
+ Firstly, are you certain that this is what is happening?
+
+ The normal operation of the agent is to 'fork' itself into the
+ background, detaching itself so that it will continue running even
+ when you log out, and freeing the command line for subsequent use.
+ This looks at first sight as if the agent has died, but using 'ps'
+ to show all processes should reveal that the agent is still running.
+
+ To prevent this behaviour (such as when attempting to debug the
+ agent), you can start it with the '-f' flag. This suppresses the
+ fork, and the agent will run as a 'normal' command. It's also often
+ useful to use the '-Le' (or '-L') flag, to log messages to stderr.
+
+ On the other hand, if 'ps' shows that the agent is not running, then
+ this is an error, and probably show that something went wrong in
+ starting the agent up. Check the agent log file for any error messages,
+ or run it with '-f -Le' and see what it reports.
+
+ Another possible cause might be an existing agent (or some other process)
+ that's already listening on the SNMP port. Trying to start a second
+ agent will fail with an error about "opening the specified endpoint".
+
+ If you're starting the agent as a non-root user, then this may also
+ fail with the very same error. By default, the agent (and trap handler)
+ will attempt to listen on the standard SNMP port 161 (or 162 for the
+ trap handler). These are defined as "privileged ports", and processes
+ will need to be running as root in order to open them.
+
+ One way to tackle this is to start the agent as root, but use the -u
+ option to switch to run as another user once the port has been opened.
+ Alternatively, you can specify a different port to use instead.
+ Anything greater than 1024 is available to non-root users. In this case,
+ you'll also need to specify the same port when issuing client commands.
+
+
+
+After a while the agent stops responding, and starts eating CPU time. Why?
+--------------------------------------------------------------------------
+
+ This is basically the same problem described in the APPLICATIONS
+ section, in the entry
+ The agent worked for a while, then stopped responding. Why?
+
+ See that entry for details.
+
+
+
+How can I stop other people getting at my agent?
+-----------------------------------------------
+
+ Firstly, are you concerned with read access or write access?
+
+ As far as changing things on the agent is concerned, there is relatively
+ little that can actually be altered (see the entry "Why can't I set
+ any variables in the MIB?" above).
+
+ If you are using the example config file, this is set up to allow
+ read access from your local network, and write access only from the
+ system itself (accessed as 'localhost'), both using the community name
+ specified. You will need to set appropriate values for both NETWORK
+ and COMMUNITY in this file before using it.
+ This mechanism can also be used to control access much more precisely.
+ (see the next few questions for details)
+
+ Other options include:
+ - Blocking access to port 161 from outside your organisation
+ (using filters on network routers)
+ - Using kernel-level network filtering on the system itself
+ (such as IPTables)
+ - Configuring TCP wrapper support ("--with-libwrap")
+ This uses the TCP 'libwrap' library (available separately)
+ to allow/deny access via /etc/hosts.{allow,deny}
+
+ For strict security you should use only SNMPv3, which is the secure
+ form of the protocol. However, note that the agent access control
+ mechanisms does not restrict SNMPv3 traffic by location - an SNMPv3
+ request will be accepted or rejected based purely on the user
+ authentication, irrespective of where it originated. Source-based
+ restrictions on SNMPv3 requests would need to use one of the "external"
+ mechanisms listed above.
+
+
+
+How can I listen on just one particular interface?
+-------------------------------------------------
+
+ Normally, the agent will bind to the specified port on all interfaces
+ on the system, and accept requests received from any of them. However,
+ if a particular port (or ports) is specified when the agent is first
+ started, then it will only listen for requests on these particular
+ ports.
+ For example:
+ snmpd 127.0.0.1:161
+
+ would listen (on the standard port) on the loopback interface only, and:
+
+ snmpd 10.0.0.1:6161
+
+ would listen on port 6161, on the (internal network) interface with
+ address 10.0.0.1. To listen on both of these interfaces (and no others)
+ provide a list of all the desired addresses:
+
+ snmpd 127.0.0.1:161 127.0.0.1:6161
+
+ The AgentX port option ('-x') works in much the same way.
+
+
+
+How do I configure access control?
+---------------------------------
+
+ The simplest way is to use the configure directives:
+
+ rocommunity public (for SNMPv1/2c)
+ rwcommunity private
+ or
+ rouser user1 (for SNMPv3)
+ rwuser user2
+
+ These specify the community names or security names to accept for
+ read-only and read-write access to the whole of the supported MIB tree.
+ (Obviously you should change these names to match your requirements -
+ which is a particularly good idea in the case of 'rwcommunity'!)
+
+ Note that you should *not* specify the same community name for both
+ rocommunity and rwcommunity directives. The rwcommunity setting
+ automatically provides read access, and having both lines (with the
+ same community name) may result in unexpected behaviour.
+ Only use both settings when specifying *different* community names.
+ The same holds true for rouser and rwuser.
+
+ The two community directives can be restricted to only allow requests
+ from particular sources, and all four can be restricted to a particular
+ subtrees or (from v5.3) a named view. See 'snmpd.conf(5)' for details.
+
+ These directives are effectively wrappers round the core access control
+ mechanism, which uses the four directives 'com2sec', 'group', 'view'
+ and 'access' to provide a more efficient and flexible control
+ over who can access which portions of the tree.
+
+ See the next entry for the gory details.
+
+
+
+I don't understand the new access control stuff - what does it mean?
+-------------------------------------------------------------------
+
+ The idea behind the new access control model is to give a more flexible
+ way of specifying who can see and do what within the MIB tree.
+ It's more complicated to understand than the simple example above, but
+ that's because it can do a whole lot more.
+
+ There are four configuration keywords in the new scheme:
+ 'com2sec', 'group', 'view', and 'access'
+
+ We'll consider these one at a time, starting with 'access'.
+ (Because I feel like starting with the last one, that's why - OK?)
+
+
+ The "access" keyword has the job of specifying who has access to
+ which bits of the MIB tree. This has eight parameters, so can look
+ rather offputting. Most of these can be safely left with default values
+ in most cases (so don't you worry your pretty little head about them).
+ The syntax is
+
+ access {group} "" any noauth exact {read-tree} {write-tree} {notify-tree}
+
+ where the entries in braces need to be defined elsewhere (I'm coming
+ to that - be patient!), and the rest can be left as shown here.
+
+ [ If you really want to know, the 'sec.model' field can
+ be used to have an access line that's only relevant to
+ specific versions of SNMP (such v1 or v2c) rather than
+ "any" version, and the 'sec.level' field to ensure that
+ the request must be authenticated or encrypted.
+ The context and prefix fields can be used to distinguish
+ between parallel versions of the same overall OID tree
+ ]
+
+
+ The "view" keyword is used to define particular bits of the MIB tree,
+ for use in the last three fields of the access entry.
+ This has the syntax
+
+ view {name} included/excluded {subtree} {mask}
+
+ where {name} is the identifier to be used for this view (i.e. what should
+ appear in the access entry), and {subtree} is the portion of the MIB tree
+ that this name refers to (in either numeric or named form).
+ Note that the name of the view does not have to have anything to do
+ with the MIB sub-identifier names - it's purely an identifying tag for
+ use within the config file (though choosing a meaningful name is, as
+ always, a very good idea).
+
+ The {mask} field can be used to control which elements of the OID subtree
+ should be regarded as relevant when determining which view an OID is in.
+ This is most relevant when defining "unusual" views, such as a single
+ row of a table. In most cases, this field should be omitted.
+
+ The third field can be used to include or exclude particular portions
+ of the MIB from the named view. A single view can be built up using
+ several 'view' lines (with the same view name), including or excluding
+ OID subtrees as appropriate.
+
+ The three view fields in the access line are used to control which
+ portions of the MIB tree a particular {group} can see (GET et al),
+ alter (SET), or request NOTIFYs on.
+
+
+
+ That's dealt with the "what" - now for the "who".
+ This is the role of the "group" and "com2sec" entries.
+
+ The "group" keyword gives general control, by mapping between a "security
+ name" (for a particular protocol version), and the internal name used in the
+ access line. Note that the token "any" is no longer acceptable for the
+ security model - the original support for this was due due to a misreading
+ of the RFC. You should replace any such line with separate versions for
+ each of the desired security models ('v1', 'v2c' & 'usm').
+
+ For SNMPv1 and SNMPv2c, the group line is just an intermediate step
+ between the "access" line and the "com2sec" line, which is the last bit
+ of the jigsaw. The "com2sec" entry is used to determine a "security name"
+ from the traditional community string, taking into account where the request
+ has come from. Thus the same community string can give access to different
+ portions of the tree, depending on where the request is sent from.
+
+ For example, in an earlier version of the example config file, there
+ were two com2sec lines with the community string "public" - one was valid
+ from anywhere (with the security name "public") and one was only valid
+ from the local network (using the security name "mynet").
+ The group lines converted these security names into the groups "public"
+ and "mygroup" respectively, and the access lines gave these two groups
+ the ability to GET values in the 'system' sub-tree (from anywhere) or
+ the 'mib-2' sub-tree (from the local network). Neither of these could
+ SET any values though, (since the write-tree was "none" in both cases).
+ Someone on the local machine, using the community string "private",
+ had the security name "local" and the group name "local", and hence had
+ full access (both GET and SET, as well as NOTIFY) to the whole of the
+ MIB tree (or at least everything under .1, which covers most things!)
+
+ Note that the three occurrences of "public", as community string,
+ security name and group name, were three totally separate things.
+ You can't use a community string in a security name field, or either
+ of these as a group name (or vice versa), unless you set up suitable
+ entries to map one name onto the other.
+
+ With SNMPv3, the security name is part of the basic protocol (or
+ near enough), and can be used directly in a group definition.
+
+ And here concludes our tour of the view-based access control mechanism.
+ Phew!
+
+
+
+How do I configure SNMPv3 users?
+-------------------------------
+
+ There are three ways to configure SNMPv3 users:
+
+ 1) Stop the agent, and create a file /var/net-snmp/snmpd.conf,
+ containing the line
+
+ createUser {myUser} MD5 {myPassword} DES
+
+ (where {myUser} and {myPassword} are the appropriate values,
+ _without_ the braces!). Then re-start the snmpd agent.
+
+ 2) Stop the agent, run the command
+
+ net-snmp-config --create-snmpv3-user
+
+ and follow the instructions. This will create an entry
+ in the /var/net-snmp/snmpd.conf file similar to the above.
+ Then re-start the snmpd agent.
+
+ 3) Make sure the agent is running, and will respond to a suitable
+ existing SNMPv3 user (with the same Authentication and Encryption
+ protocols as required for the new user). Then use the 'snmpusm'
+ command to clone this template user, and change the password.
+
+
+ See the access control entries above and the file 'README.snmpv3'
+ for more details about how to use SNMPv3 users,
+
+ Note that simply having a 'rouser' or 'rwuser' line does *not*
+ automatically create the corresponding user. You will need the
+ above 'createUser' line (or an equivalent 'usmUser') as well.
+
+
+
+The 'createUser' line disappears when I start the agent. Why?
+-------------------------------------------------------------
+
+ That's deliberate.
+ The agent removes the (human-readable) 'createUser' directive, and
+ replaces it with an equivalent 'usmUser' entry. This contains the
+ same information, but in a form that's only meaningful internally.
+ Not only is the passphrase no longer visible in the config file, it
+ has actually been converted to a key that is only valid on the local
+ machine. If someone stole the new usmUser line from this system,
+ they could not use that information to access any of your other agents
+ (even if the usernames and passwords were the same).
+
+
+
+What's the difference between /var/net-snmp and /usr/local/share/snmp?
+---------------------------------------------------------------------
+
+ The /var/net-snmp location is primarily used for information set
+ during the running of the agent, which needs to be persistent between
+ one run of the agent and the next. Apart from "createUser" (see
+ the previous entry), you shouldn't need to touch this file.
+
+ All other user-provided configuration should go in the traditional
+ location (typically /usr/local/share/snmp/snmpd.conf or /etc/snmp).
+
+
+
+My new agent is ignoring the old snmpd.conf file. Why?
+-----------------------------------------------------
+
+ The most likely explanation is that the new version of the agent is
+ looking in a different location than the previous one. This is commonly
+ experienced when replacing a ready-installed version (e.g. from a vendor
+ distribution), with the current release installed from the source.
+
+ The default location for this file with the basic distribution is
+ /usr/local/share/snmp/snmpd.conf (or PREFIX/share/snmp/snmpd.conf).
+ Ready-installed versions often look for the file as /etc/snmpd.conf,
+ or /etc/snmp/snmpd.conf. Try moving the old config file to the new
+ location, and restart the agent.
+
+ With release 5.0, the name of the package changed from "ucd-snmp"
+ to "net-snmp", and this change was reflected in the name of the persistent
+ /var directory. So a v5 Net-SNMP agent will not look in
+ /var/ucd-snmp/snmpd.conf for settings from a v4 UCD agent.
+
+
+
+Why am I getting "Connection refused"?
+-------------------------------------
+
+ This is actually nothing to do with the access control mechanism
+ (though that's an understandable mistake). This is the result of
+ the TCP wrapper mechanism using the files 'hosts.allow' and 'hosts.deny'
+ to control access to the service. Some distributions may come with
+ this enabled automatically - otherwise you need to explicitly activate
+ this by configuring using '--with-libwrap'.
+
+ If TCP wrappers are enabled, and both hosts.allow and hosts.deny are
+ empty, then all requests will be rejected (with "Connection refused").
+ The simplest way to avoid this problem and allow incoming requests is
+ to add the line
+
+ snmpd: ALL
+
+ to the file /etc/hosts.allow (or wherever this file is on your system).
+ Though be aware that doing this removes one level of protection and allows
+ anyone to try and query your agent (though the agent's own access control
+ mechanisms can still be used to restrict what - if anything - they can see).
+
+ If you do wish to use the TCP wrappers to restrict access, it's sensible
+ to have an explicit entry:
+
+ snmpd: ALL
+
+ in the file /etc/hosts.deny, which makes it crystal clear that access
+ to the SNMP agent has been denied. This mechanism can also be used to
+ restrict access to specific management hosts, using a hosts.deny entry
+ such as:
+
+ snmpd: ALL EXCEPT 127.
+
+ which will allow connections from localhost, and nothing else.
+
+ Note that personal firewalls (such as Linux' ipchains or iptables
+ mechanism) may have a similar effect (though typically this won't
+ be logged). See the earlier entry
+ Requests always seem to timeout, and don't give me anything back. Why?
+
+
+
+Why can't I see values in the UCDavis 'extensible' or 'disk' trees?
+------------------------------------------------------------------
+
+ Both these trees are designed to report things you ask it to report
+ on. If you don't declare anything in the snmpd.conf file for it to
+ monitor, it will not report anything. See the snmpd.conf manual page
+ and the EXAMPLE.conf file for details on configuring the agent.
+
+ Optionally, run snmpconf -g monitoring to help you set up this
+ section of the snmpd.conf file.
+
+
+
+Why can't I see values in the UCDavis 'memory' or 'vmstat' trees?
+----------------------------------------------------------------
+
+ These mib modules are not supported on all operating systems, and
+ will not be included on any other system. Currently, they are only
+ supported on Linux, HP-UX (memory only), Solaris, BSDi (vmstat on
+ BSDi4 only), Dynix, FreeBSD, NetBSD and OpenBSD.
+ If you want to help port it to other systems, let us know.
+
+ Note that these subtrees only report the current usage when
+ explicitly queried. They do *not* automatically generate traps
+ when the usage strays outside the configured bounds.
+ See the earlier FAQ entry
+ What traps are sent by the agent?
+ for more information.
+
+
+
+What do the CPU statistics mean - is this the load average?
+----------------------------------------------------------
+
+ No. Unfortunately, the original definition of the various CPU
+ statistics was a little vague. It referred to a "percentage",
+ without specifying what period this should be calculated over.
+ It was therefore implemented slightly differently on different
+ architectures.
+
+ The 5.4 release has clarified the situation, and standardised on
+ calculating these percentages over a minute. The relevant MIB
+ descriptions have been updated to make the desired behaviour
+ more explicit.
+
+ The Net-SNMP agent also includes "raw counters", which can be used
+ to calculate the percentage usage over any desired period. This is
+ the "right" way to handle things in the SNMP model. The original
+ percentage objects have been deprecated, and may possibly be removed
+ in a future release of the agent.
+
+ Note that this is different from the Unix load average, which is
+ available via the loadTable, and is supported on all architectures.
+
+
+
+How do I get percentage CPU utilization using ssCpuRawIdle?
+-----------------------------------------------------------
+
+ This one of the "raw counters" mentioned in the previous entry.
+ You need to take two readings of this object and look at the
+ difference between them. That difference divided by the total
+ number of 'ticks' between the two readings (where one tick is
+ probably 0.01 seconds) will give you the percentage utilization
+ over that period.
+
+
+
+What about multi-processor systems?
+----------------------------------
+
+ The CPU objects (both percentages and raw counters) were designed to
+ monitor the overall CPU activity of a system, and typically reflect
+ whatever the underlying operating system reports for the (single)
+ CPU statistics information. How these are handled for a multi-CPU
+ system will probably differ from one O/S to another, and will need
+ to be investigated for each system individually.
+
+ The htProcessorTable was designed to handle monitoring multi-CPU
+ machines, but the Net-SNMP implementation has up to now treated
+ most systems (with the honourable exception of Solaris, and more
+ recently Linux) as implicitly single-CPU.
+
+ With the 5.4 release, there is now a cleaner framework for reporting
+ on multi-CPU equipment, and it is hoped that an increasing number
+ of systems will be able to report suitable processor information.
+ Also with the 5.4 release, for the first time the agent will report
+ the hrProcessorLoad value properly, which should provide some simple
+ per-CPU statistics.
+
+
+
+The speed/type of my network interfaces is wrong - how can I fix it?
+-------------------------------------------------------------------
+
+ Some operating systems will provide a mechanism for determining
+ the speed and type of network interfaces, but many do not. In such
+ cases, the agent attempts to guess the most appropriate values,
+ usually based on the name of the interface.
+
+ The snmpd.conf directive "interface" allows you to override these
+ guessed values, and provide alternative values for the name, type
+ and speed of a particular interface. This is particularly useful
+ for fast-ethernet, or dial-up interfaces, where the speed cannot be
+ guessed from the name.
+
+ See the snmpd.conf(5) man page for details.
+
+
+
+The interface statistics for my subinterfaces are all zero - why?
+----------------------------------------------------------------
+
+ Unfortunately, most kernels that support multiple logical
+ interfaces on a single physical interface, don't keep separate
+ statistics for each of these. They simply report the overall
+ statistics for the physical interface itself.
+
+ There's no easy way around this problem - the agent can only
+ report such values as it can find out. If the kernel doesn't
+ keep track of these figures, the agent can't report them.
+
+ Sorry!
+
+
+
+Does the agent support the RMON-MIB?
+-----------------------------------
+
+ Not really.
+
+ There is an "Rmon" code module included within the agent source
+ code tree, but this is best thought of as a template for the
+ RMON-MIB statistics groups, rather than a full implementation.
+
+ With most MIBs, the hardest part of implementing the MIB is often
+ getting hold of the data to report. This is definitely true of the
+ RMON-MIB, which relies on gathering (and analysing) a potentially
+ large quantity of network traffic. The Rmon code distributed with
+ the Net-SNMP agent code avoids this problem, by using random data.
+
+ Some of the functionality of the RMON-MIB, such as the alarm and
+ event groups, has since been superseded by the work of the DisMan
+ IETF working group. The Net-SNMP agent does implement these (more
+ general) MIB modules. But the statistics gathering aspects of
+ the RMON-MIB are not readily available.
+
+ Note too that none of the core developers have any significant
+ experience with this code, and the person who originally wrote it
+ is no longer active on the mailing lists. So there's no point in
+ asking on the lists whether these modules work or not. You've got
+ the source - how badly do you need this functionality?
+
+
+
+What does "klread: bad address" mean?
+-------------------------------------
+
+ This means that the agent was unable to extract some of the
+ necessary information from the kernel structures. This is
+ possibly due to:
+ - either looking in the wrong place for kernel information
+ (check the value of KERNEL_LOC)
+ - an error in the implementation of part of the MIB tree
+ for that architecture. Try and identify which
+ OID is generating the error, and contact the
+ list 'net-snmp-coders@lists.sourceforge.net'
+ Remember to tell us what architecture you have!
+
+
+
+What does "nlist err: wombat not found" (or similar) mean?
+----------------------------------------------------------
+
+ This means that the agent wasn't able to locate one of the
+ kernel structures it was looking for. This may or may not
+ be important - some systems provide alternative mechanisms
+ for obtaining the necessary information - Solaris, for example,
+ can produce a whole slew of such messages, but still provide
+ the correct information.
+ This error only occurs if you have used the flag
+ '--enable-debugging' as part of the initial configuration.
+ Reconfigure the agent with '--disable-debugging' and these
+ messages will disappear. (It won't fix the underlying problem,
+ but at least you won't be nagged about it).
+
+
+
+How about "Can't open /dev/kmem"?
+--------------------------------
+
+ This device is normally restricted to just being accessible by root
+ (or possibly by a special group such as 'kmem' or 'sys'). The agent
+ must be able to read this device to obtain the necessary information
+ about the running system.
+ Check that the agent was started by root, and is running with UID 0
+ (or suitable GID if appropriate). The agent will normally continue
+ to run without this level of access permission, but won't be able to
+ report values for many of the variables (particularly those relating
+ to network statistics).
+
+
+
+The agent is complaining about 'snmpd.conf'. Where is this?
+-----------------------------------------------------------
+
+ It doesn't exist in the distribution as shipped. You need to
+ create it to reflect your local requirement.
+ To get started, you can either just create this file manually,
+ or run snmpconf to help you create one. At the very least, you
+ will need some form of access control configuration, if the agent
+ is to be of any use whatsoever. This can be as simple as:
+
+ rocommunity public
+
+ See the snmpd.conf(5) manual page or relevant entries in this
+ FAQ for further details.
+
+
+
+The system uptime (sysUpTime) returned is wrong!
+-----------------------------------------------
+
+ Oh no it's not.
+ The defined meaning of 'sysUpTime' is
+ "the time ... since the *network management*
+ portion of the system was re-initialized."
+
+ In other words, when the snmp agent was started, not when the
+ system itself last booted. This latter information is available
+ in the Host Resources MIB as "hrSystemUpTime.0"
+ Note that even if the full Host Resources is not supported on
+ your system, it's worth configuring in the system portion using
+
+ '--with-mib-modules=host/hr_system'
+
+ and recompiling. This particular group is reasonably likely to work,
+ even if some of the other more architecture-specific groups don't.
+
+
+
+Can the agent run multi-threaded?
+--------------------------------
+
+ Short answer - no.
+ Longer answer - not easily.
+
+ Net-SNMP within a single thread of an threaded application is fine,
+ as long as *all* snmp code is kept within the same thread. This lets
+ you add SNMP support to an existing threaded application.
+
+ If you are concerned with the time taken for to process requests for
+ a particular agent, object or subtree, and you want the agent to
+ continue to respond to other requests in the meantime, there are
+ two options.
+
+ The first method is using AgentX sub-agents. If you have several
+ tables, each implemented by a separate subagent, then a single
+ request for entries from each of the tables will be processed
+ in parallel (and the agent will continue to respond to other
+ requests while it waits for the subagents to return the necessary
+ information). But a request for several objects from the same
+ table will be passed off to the relevant subagent, where it will
+ (normally) be processed serially.
+
+ The second method is to use delegated requests + IPC to another
+ process. If takes a long time to retrieve a value for a given object,
+ then the object handler could do whatever necessary to start or
+ communicate with another (non-SNMP) process/thread to actually
+ retrieve the value, and mark the request as delegated.
+ The main agent (or subagent) can then receive and process other
+ requests while waiting for the delegated request to finish.
+ Dealing with resource contention is all up to you.
+
+ All of this only applies to the GET family of requests. A SET
+ request will block until all pending GET requests have finished,
+ and then will not accept new requests until the SET is complete.
+
+ Adding full multi-thread support directly to the agent would be
+ nice. We just need someone with time/money to do/sponsor the work.
+
+
+
+COMPILING
+=========
+
+How do I compile with 'cc' instead of 'gcc'?
+-------------------------------------------
+
+ Run configure with --with-cc=cc
+
+ Note that if you've already run configure once, it will probably have
+ detected the presence of 'gcc', cached this information, and may still
+ try to use this anyway. In which case, simply remove the 'config.cache'
+ file before re-running configure.
+
+
+
+The compilation is complaining about missing libraries. Why?
+-----------------------------------------------------------
+
+ This has been seen in a number of guises over the years - most
+ commonly on Linux systems (although the problem may also occur
+ elsewhere). A typical installation may not always include the full
+ set of library links required for building the Net-SNMP software.
+
+ This problem can usually be fixed by installing the missing packages
+ (typically the development version of a package that is already there).
+
+ Examples of this that we have come across include:
+
+ -lelf elfutils-devel
+ -lbz2 bzip2-devel
+ -lselinux libselinux-devel
+ -lcrypto openssl/openssl-devel
+ -lbeecrypt libbeecrypt/beecrypt/beecrypt-devel.
+
+ These are the names of the RedHat/Fedora RPMs. Other distributions
+ or O/S's may use different names, but the basic idea should be the
+ same.
+
+ If the compilation is complaining about a missing .so file, then an
+ alternative quick fix is to add the missing symbolic link, using
+ something like:
+ ln -s libelf.so.1 /usr/lib/libelf.so
+
+ giving the appropriate generic library name from the error message,
+ and the correct number for whichever version of this library you
+ have installed.
+
+ If the compilation is complaining about a .la file, then you should
+ install the relevant development package, as listed above.
+
+
+
+I'm getting an error "autoheader: not found" - what's wrong?
+-----------------------------------------------------------
+
+ This usually appears when compiling the current development source
+ version, obtained via CVS. Unfortunately, the timestamps on some of
+ the configure files are such that make assumes (mistakenly) that the
+ configure script needs to be re-generated.
+ A similar problem may arise relating to 'autoconf'.
+
+ In both cases, this can be corrected by running the command
+ "make -k touchit" before attempting to make the main package.
+
+
+
+How can I reduce the memory footprint?
+--------------------------------------
+
+ In order to reduce the memory footprint (for instance, to
+ embed the snmpd into a device), the following configure options
+ could be used.
+
+ '--disable-debugging'
+ This turns off the compilation of all debugging statements.
+
+ '--enable-mini-agent' '--with-out-mib-modules=examples/ucdDemoPublic'
+ This creates an agent with just the essential MIB modules included.
+ NOTE: If you need additional MIB modules, then simply add them
+ using the option '--with-mib-modules=...' but this will of course
+ increase the memory footprint.
+
+ '--with-transports=UDP'
+ This option specifies the transport domains to include.
+ For a simple standalone agent, just UDP should be sufficient.
+ (Although the 'disman' and 'agentx' modules may require the
+ Callback, TCP and/or Unix transport domains as well).
+
+ '--without-kmem-usage'
+ This can be used in order to omit the code that operates on the
+ /dev/kmem interface. Clearly, this option cannot be used when
+ one of the configured MIB modules depends on it.
+
+ '--with-mibdirs=' and '--with-mibs='
+ These options tell the agent not to load any MIB modules.
+ This doesn't affect the size of libraries or application
+ binaries, but will reduce the memory footprint during runtime.
+
+ '--disable-mib-loading'
+ This can be used in order to omit the code that loads and
+ parses the MIB files altogether. This will reduce both the
+ runtime memory footprint, and the binary sizes.
+
+ Once the agent (snmpd) has been linked, you might also try running
+ 'strip snmpd' to remove un-necessary debug/symbol information.
+
+
+
+How can I reduce the installation footprint or speed up compilation?
+-------------------------------------------------------------------
+
+ The following configure options may also be useful:
+
+ --disable-agent Do not build the agent (snmpd).
+ --disable-applications Do not build the apps (snmpget, ...).
+ --disable-manuals Do not install the manuals.
+ --disable-scripts Do not install the scripts (mib2c, ...).
+ --disable-mibs Do not install the mib files.
+ --disable-mib-loading Do not include code that parses and
+ manipulates the mib files.
+
+
+
+How can I compile the project to use static linking?
+---------------------------------------------------
+
+ For totally static net-snmp executables, use
+ configure --with-ldflags=-Bstatic
+
+ To compile your application with static libraries (eg for easier
+ debugging), and to link to a non-installed build directory, try the
+ following Makefile fragment:
+
+ NETSNMPDIR=/usr/local/build/snmp/full-clean-cvs-V5-1-patches
+ NETSNMPCONFIG=$(NETSNMPDIR)/net-snmp-config
+
+ NETSNMPBASECFLAGS := $(shell $(NETSNMPCONFIG) --base-cflags)
+ NETSNMPINCLUDES := $(shell $(NETSNMPCONFIG) --build-includes $(NETSNMPDIR))
+ # base flags after build/src include, in case it has /usr/local/include
+ NETSNMPCFLAGS=$(NETSNMPINCLUDES) $(NETSNMPBASECFLAGS)
+
+ NETSNMPBASELIBS := $(shell $(NETSNMPCONFIG) --base-agent-libs)
+ NETSNMPEXTLIBS := $(shell $(NETSNMPCONFIG) --external-agent-libs)
+ NETSNMPLIBDIRS := $(shell $(NETSNMPCONFIG) --build-lib-dirs $(NETSNMPDIR))
+ NETSNMPLIBDEPS := $(shell $(NETSNMPCONFIG) --build-lib-deps $(NETSNMPDIR))
+ LIB_DEPS=$(NETSNMPLIBDEPS)
+ LIBS=$(NETSNMPLIBDIRS) -Wl,-Bstatic $(NETSNMPBASELIBS) -Wl,-Bdynamic $(NETSNMPEXTLIBS)
+
+ STRICT_FLAGS = -Wall -Wstrict-prototypes
+ CFLAGS=-I. $(NETSNMPCFLAGS) $(STRICT_FLAGS)
+
+ This replaces the standard Makefile section, which will used installed
+ libraries:
+
+ NETSNMPCONFIG=net-snmp-config
+
+ # uncomment this if you have GNU make
+ #NETSNMPCFLAGS := $(shell $(NETSNMPCONFIG) --base-cflags)
+ #NETSNMPLIBS := $(shell $(NETSNMPCONFIG) --agent-libs)
+ NETSNMPCFLAGS=`$(NETSNMPCONFIG) --base-cflags`
+ NETSNMPLIBS=`$(NETSNMPCONFIG) --agent-libs`
+
+ LIBS=$(NETSNMPLIBS)
+
+
+
+Why is the project workspace empty under Visual C++?
+---------------------------------------------------
+
+ This is probably due to the different ways that Unix and Windows
+ handle text file line termination. Older versions of WinZip don't
+ handle this properly, and Visual C++ gets confused (poor dear!).
+ The latest version of WinZip is reported to unpack this correctly.
+
+
+
+Why does 'make test' skip five tests?
+-----------------------------------
+
+ You mean T053agentv1trap, T054agentv2ctrap, T055agentv1mintrap,
+ T056agentv2cmintrap and T113agentxtrap?
+
+ These tests rely upon functionality in the NET-SNMP-EXAMPLES-MIB
+ which is not implemented in the default agent configuration. To
+ include these tests, invoke the `configure` script to include
+ '--with-mib-modules="examples/example".
+
+
+
+Why does 'make test' complain about a pid file?
+-----------------------------------------------
+
+ Typically it says something like:
+
+ cat: cannot open /tmp/snmp-test-1-8694/*pid*
+
+ It's trying to tell you the port is blocked - typically because
+ another copy of the agent is still running, left over from from a
+ previous testing run.
+
+ If you type 'ps -ef' you should notice an orphaned process like:
+
+ snmpd -d -r -U -P /tmp/snmp-test-5-27295/snmpd.pid...
+
+ Kill this process.
+
+ This could be happening for several reasons including:
+
+ 1. You are trying to do concurrent runs of 'make test'.
+
+ 2. On a slow machine, the agent might be taking too long to
+ start up. Try changing the value of the variable SNMP_SLEEP
+ in testing/RUNTESTS from 1 to something higher - say 3 or 5.
+
+
+
+CODING
+======
+
+How do I write C code to integrate with the agent?
+-------------------------------------------------
+
+ There are three main methods for integrating external C code
+ within the agent. The code can be compiled directly into the
+ agent itself, it can be loaded dynamically while the agent is
+ running, or it can be compiled into a separate application
+ (a "subagent") which communicates with the main master agent.
+ All three approaches have been touched on elsewhere within this FAQ.
+
+ As far as the module code is concerned, all three mechanisms
+ use exactly the same module API. So a module developed for use
+ directly within the agent, could also be included within a subagent,
+ or loaded dynamically with no (or minimal) code changes needed.
+
+ Most of this section is concerned with more detailed aspects
+ of developing such code - including the 'mib2c' tool, which can
+ handle generating a basic code framework for implementing a
+ given set of MIB objects.
+
+
+
+How does the agent fetch the value of a MIB variable from the system?
+--------------------------------------------------------------------
+
+ That's typically the hardest bit of implementing a new MIB module,
+ and is the one thing that 'mib2c' can't help with. It very much
+ depends on the MIB variable concerned (and often the underlying
+ operating system as well).
+
+ Relatively few MIB modules are completely self-contained, with all
+ the information held internally within the agent, and all updates
+ being done via SNMP requests. Such MIB modules can be implemented
+ fairly easily.
+
+ More commonly, the agent needs to provide an SNMP-based interface to
+ information held elsewhere, perhaps in the operating system kernel or
+ some other application. Handling this is much more complex - since
+ a lot depends on what mechanisms are provided for retrieving (and
+ possibly updating) this information.
+
+ See the existing MIB modules in the Net-SNMP source tree for various
+ examples of assorted approaches to this task.
+
+
+
+Mib2c complains about a missing "mib reference" - what does this mean?
+---------------------------------------------------------------------
+
+ This basically means that it hasn't loaded the MIB file containing
+ the definition of the MIB subtree you're trying to implement. This
+ might be because it hasn't been installed, the name is wrong, or
+ (most likely), because it isn't in the default list. See the MIBS
+ section for more details.
+
+
+
+Mib2c complains about not having a "valid OID" - what does this mean?
+---------------------------------------------------------------------
+
+ This probably means that you gave it the name of a MIB file (or
+ module), rather than the name of an object defined in that file.
+ Mib2c expects the name of a 'root' object, and will generate a
+ template for the sub-tree starting from there.
+
+ If you've got a file 'MY-MIB.txt', defining the MIB module
+ 'MY-MIB' which contains a subtree based on the object 'myMib',
+ then you should invoke mib2c as
+ "mib2c .... myMib"
+ rather than
+ "mib2c .... MY-MIB.txt"
+ or "mib2c .... MY-MIB"
+
+ Note that you'll probably also have to add your MIB to the list of
+ MIBs that are loaded automatically, in order for mib2c to recognise
+ the name of this object. So the command would typically be
+ "MIBS=+MY-MIB mib2c .... myMib"
+ or "MIBS=ALL mib2c .... myMib"
+
+
+
+Why doesn't mib2c like the MIB file I'm giving it?
+-------------------------------------------------
+
+ This is most likely the same problem as above. Mib2c takes the
+ name of a MIB object, not the name of a file (or a MIB module).
+ Try using the name of the MODULE-IDENTITY definition.
+
+ Another possibility is that the MIB may contain syntax errors.
+ Try running it through 'snmptranslate' or a dedicated SMI
+ validation tool (such as 'smilint' or the on-line interface at
+ http://wwwsnmp.cs.utwente.nl/ietf/mibs/validate/)
+
+
+
+Mib2c ignores my MIB and generates a pair of 'mib-2' code files. Why?
+---------------------------------------------------------------------
+
+ This is usually a sign of the same problem as above - giving
+ mib2c the name of the file containing the MIB (or of the MIB
+ itself), rather than an object within it.
+
+ Earlier versions of mib2c didn't detect this situation, and
+ rather than report an error, it merrily constructed a template
+ for a default starting point of the mib-2 node.
+
+ More recent versions issue the error mentioned above instead.
+
+
+
+What's the difference between the various mib2c configuration files?
+-------------------------------------------------------------------
+
+ Most of the mib2c config files are concerned with implementing
+ MIB tables, and generate various alternative code templates.
+ These basically fall into four distinct categories.
+
+ 'mib2c.raw-table.conf' is the lightest of the templates, and
+ just provides a fairly basic table framework. Most of the work
+ of implementing the table - detecting which row is required for a
+ given request, retrieving or updating the relevant column values,
+ and interacting with the underlying subsystem - are all left to
+ the MIB programmer.
+
+ The second group of templates - 'table_data', 'container' and
+ 'tdata' - all share the same basic model (although the internal
+ details are rather different). The MIB implementer should define a
+ data structure to represent a row of the table, and the helper then
+ takes care of holding the table internally, as a collection of such
+ per-row data structures. This includes identifying which row is
+ required for a given request. Retrieving or updating the appropriate
+ column value is left to the MIB programmer, although the generated
+ framework includes most of the necessary code.
+ Allied to this is a fourth "internal data" mib2c configuration
+ file ('create-dataset') which handles the individual columns as
+ well. This is the closest to a Plug-and-Play configuration, and
+ the MIB implementer only needs to be concerned with any special
+ processing, such as linking the table with the underlying subsystem.
+
+ The third style of mib2c config assumes that the table data is
+ held externally to the helper - either within the MIB module code
+ itself, or in the external subsystem. The generated code framework
+ includes routines to "iterate" through the rows of the table, with
+ the iterator helper simply deciding which row is required for a
+ particular request. Once again, the MIB programmer must handle
+ retrieving or updating the appropriate column value, although the
+ generated framework includes most of the necessary code.
+ There is a variant of this config ('iterate_access') which works
+ in basically the same way. However this tries to separate out the
+ standard processing, from the code that needs to be amended by the
+ programmer for retrieving and updating the individual column values.
+
+ This is also the idea behind the final table-oriented mib2c config
+ template - 'mib2c.mfd.conf' (or "MIBs for Dummies"). This is a much
+ more flexible framework, which can be used with either internally
+ held data, or iterating through an external representation. The
+ distinguishing feature of this framework is that it separates out
+ standard and table-specific processing, at a much finer level of
+ detail than the others.
+
+
+ The other mib2c config templates are concerned with implementing
+ scalar objects ('scalar', 'int_watch'), code to generating traps
+ ('notify'), and various specialised requirements. There is also a
+ template ('old-api') to generate code suitable for the previous v4
+ UCD agent - though this is not particularly complete or reliable.
+ It's probably better to use a pure v4 mib2c environment (or switch
+ wholeheartedly to the v5 style).
+
+
+
+Which mib2c configuration file should I use?
+-------------------------------------------
+
+ The answer to that heavily depends on the characteristics of the
+ MIB objects being implemented. Of the handler-based table frameworks,
+ 'tdata' is more appropriate for tables that can be stored (or a copy
+ cached) within the agent itself, while 'iterate' is more relevant to
+ reporting data from outside the agent.
+ The raw interface is only suitable in very specific circumstances,
+ so it's probably sensible to start with one of the other frameworks
+ first, and only look at this if none of the alternatives seem to work.
+
+ The decision between the handler-based configs and MfD is more a
+ matter of the style of programming to use. Most of the frameworks
+ define a single handler routine to process an incoming request, so
+ all of the code is listed together, with the MIB programmer inserting
+ table-specific processing into this single block of code.
+ The MfD provides a series of individual object-specific routines,
+ each concerned with one very specific task, and hides as much as
+ possible from the programmer.
+
+ If you like to understand the broad thrust of what's happening,
+ then one of the handler-based approaches would be the best choice.
+ If you prefer to concentrate on the nitty-gritty of a given table,
+ and are happy to trust that the rest of the processing will work
+ correctly, then the MfD framework would be more appropriate.
+
+ For implementing a group of scalar objects, then the choice is
+ simple - use 'mib2c.scalar.conf'. Similarly, for generating traps
+ or informs, use 'mib2c.notify.conf'.
+
+
+
+How can I have mib2c generate code for both scalars and tables?
+--------------------------------------------------------------
+
+ This uses a very powerful tool called a "text editor" :-)
+
+ The v5 Net-SNMP mib2c tool uses separate configuration files to
+ generate code for scalar objects, and for tables. This means that
+ it's not possible to automatically generate a single code file
+ that supports both scalars and tables.
+
+ Instead, the two code files need to be generated separately, and
+ then combined manually. The handler and supporting routines from
+ one file can simply be included in the other with no changes needed.
+ The corresponding registration of these handlers can then be copied
+ from the first initialisation routine into the second.
+
+
+
+Are there any examples, or documentation?
+-------------------------------------------
+
+ Many of the MIB modules shipped with the Net-SNMP agent still
+ use the v4 "traditional" MIB module API, but an increasing number
+ use one of the newer v5 helper-based handlers. All of these can
+ be found under 'agent/mibgroup'
+
+ The 'tdata' helper is used in the new DisMan Event, Expression
+ and Schedule MIB modules (see 'disman/{event,expr,schedule}/*').
+ The similar 'dataset' helper is used in the older DisMan Event
+ MIB implementation (see 'disman/mteEvent*') and the Notification
+ Log MIB (see 'notification-log-mib/*'), used by 'snmptrapd' to
+ log incoming traps.
+
+ The basic iterator handler is used in a number of modules, such
+ as the TCP and UDP table implementations (mibII/tcpTable &
+ mibII/udpTable), VACM context handling (mibII/vacm_context) and
+ various tables relating to agent internals (agent/*). These show
+ a number of different approaches to using the iterator helper, so
+ it's worth comparing them.
+
+ The two examples/netSnmpHostsTable* modules provide a contrast
+ between the iterator and iterator_access helpers.
+
+ There are an ever-increasing number of examples based on the
+ MfD framework (see '{if,ip,tcp,udp}-mib/'). Much of this code
+ is not intended to be viewed directly, but individual files are
+ clearly commented to distinguish between internal implementation
+ and public code.
+
+ The Net-SNMP agent does not currently include any MIB modules
+ using the array-user container-based helper. The best examples
+ of this are to be found in the net-policy project.
+ See http://net-policy.sourceforge.net/
+
+
+
+Where should I put the files produced by 'mib2c'?
+------------------------------------------------
+
+ If you're using the main source tree to compile your new module, then
+ put these two files (mymib.[ch]) in the directory 'agent/mibgroup'.
+ You should then re-run configure to add in your new module
+ ("configure --with-mib-modules=mymib") and recompile.
+
+ If you've got a number of new modules to add, it might be
+ sensible to put them all into a single subdirectory of 'mibgroup'.
+ Then create a header file, listing the individual components.
+ This might look something like:
+
+ config_require(mymib/myObjects)
+ config_require(mymib/myTable)
+ config_require(mymib/myOtherTable)
+
+ If this was saved as the file 'mymib.h', then the same configure
+ line given above, would pull in all three modules. See the
+ current contents of 'agent/mibgroup' for examples of this.
+
+
+
+I've created a new module with 'mib2c' but it doesn't work. Why not?
+--------------------------------------------------------------------
+
+ Remember that 'mib2c' generates a template for the MIB implementation.
+ It doesn't fill in all the details for you. In particular, it cannot
+ know how to obtain the information needed to answer particular queries.
+ That's the job of the MIB module programmer (you!) - See the previous
+ question for how to proceed.
+
+ Essentially mib2c handles the syntax of the MIB implementation,
+ leaving you to concentrate on the semantics.
+
+
+
+I've added my code to this template and it still doesn't work. Why not?
+-----------------------------------------------------------------------
+
+ It's difficult to provide a definitive answer to that. The
+ best we can do is suggest a checklist that might help pinpoint
+ the source of the problem. Try looking at the following:
+
+ - Is the new module being compiled?
+ (Delete any .o files, and re-run 'make'
+ Are the .o files re-created?)
+
+ - Is it being included in the agent library?
+ (Run 'nm' on the library and look for the names
+ of the initialisation routine and variable handlers)
+
+ - Is the initialisation routine being run?
+ (Activate the debugging code that you put into
+ this routine. You *do* include debugging code
+ as a matter of course, don't you?)
+
+ - Has the module been registered with the agent?
+ (Try walking the NET-SNMP-MIB::nsModuleTable.
+ This will also check whether the agent accepts
+ requests for enterprise-specific OIDs)
+
+ - Is the module handler actually being called at all?
+ (Activate the debugging code that you put into this
+ handler, and do a single 'snmpget' or 'snmpgetnext'
+ for a suitable instance. You *do* include debugging
+ code as a matter of course, don't you?)
+
+ - Is it returning success or an error?
+ (Activate the debugging code.... but you get the idea!)
+
+ That won't actually solve the problem, but at least you'll
+ have some idea where to look.
+
+
+
+Why does the iterator call my get_{first,next} routines so often?
+-----------------------------------------------------------------------
+
+ The first thing to realise is that the 'get_first' and 'get_next'
+ hook routines are concerned with processing a single request, not
+ with walking the whole table. A full "snmpwalk" command will typically
+ involve a series of individual 'GetNext' requests, and every one of
+ these will trigger a separate 'get_first/get_next/get_next/....' cycle.
+
+ It's usually more efficient to use 'snmptable' which will walk
+ each column in parallel (as well as displaying the results in a
+ more natural manner).
+
+ Secondly, the iterator helper was originally designed to handle
+ unsorted data, so will look at every row of the internal table for
+ each request. If the data is actually held in the correct order,
+ then it's worth setting the NETSNMP_ITERATOR_FLAG_SORTED flag:
+ iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+ iinfo->flags |= NETSNMP_ITERATOR_FLAG_SORTED;
+ This will help the situation somewhat.
+
+ But the iterator helper is inherently a relatively inefficient
+ mechanism, and it may be worth looking at one of the other helpers,
+ particularly if the data will be held within the agent itself.
+
+
+
+How can I get the agent to generate a trap (or inform)?
+------------------------------------------------------
+
+ There are two aspects to having the agent generate a trap -
+ knowing *how* to do this, and knowing *when* to do so.
+
+ Actually generating a trap is reasonably simple - just call one
+ of the trap API routines ('send_easy_trap()' or 'send_v2trap()')
+ with the relevant information (generic and specific trap values,
+ or a varbind list respectively).
+
+ The 'mib2c.notify.conf' configuration file can be used to
+ construct a suitable template routine for generating a trap,
+ including building the variable list from the MIB trap
+ definition. These variables can then be given suitable values,
+ before invoking the 'send_v2trap()' call to actually send the trap.
+ See the 'snmp_trap_api(3)' man page for further details.
+
+ Note that these APIs are only available within the agent (or
+ subagents), and are not available to stand-alone applications.
+ The code for 'snmptrap' shows an approach to use in such a case.
+
+
+ Determining *when* to generate the trap (either directly or
+ via the mib2c-generated routine) is often harder. If the trap
+ is generated in response to some action within the agent, (e.g.
+ as the result of a SET), then this isn't too much of a problem.
+
+ But if the trap is intended to report on a change of status
+ (e.g. a network interface going up or down, or a disk filling up),
+ then actually detecting this is non-trivial. It's necessary to
+ poll the value(s) on a regular basis, save the results and compare
+ them with the new values the next time round.
+
+ The simplest way to handle this is via the DisMan Event MIB,
+ which is designed for exactly this purpose. As long as you can
+ specify MIB object(s) to monitor, and the values or thresholds
+ that should trigger a notification, then this module can check
+ these values regularly, and automatically send a suitable trap
+ when appropriate. See the 'snmpd.conf(5)' man page (under
+ ACTIVE MONITORING) for details.
+
+ Otherwise, you'd need to use the routines documented in
+ 'snmp_alarm(3)' to regularly invoke a monitoring routine. This
+ could check the necessary conditions (which need not be MIB
+ objects), and call the 'send_xxx_trap()' routine (as generated
+ by 'mib2c.notify.conf') when appropriate.
+
+
+
+How can I get the agent to send an SNMPv1 (or SNMPv2c) trap?
+-----------------------------------------------------------
+
+ It doesn't make any difference whether you use the v1-style
+ API call 'send_easy_trap()' or the v2-style 'send_v2trap()'.
+ What matters is the directive(s) in the snmpd.conf file.
+
+ If this file contains 'trapsink', then the agent will send
+ an SNMPv1 trap. If this file contains 'trap2sink', then the
+ agent will send an SNMPv2c trap. And if this file contains
+ both, then the agent will send *two* copies of this trap.
+
+ See the entry
+ Where are these traps sent to?
+ in the AGENT section for details.
+
+
+
+How can I get the agent to include varbinds with an SNMPv1 trap?
+---------------------------------------------------------------
+
+ There are two ways to do this. You can either use the
+ 'send_v2trap()' call and give a varbind list, starting with
+ the v2-equivalent of the SNMPv1 trap, followed by the
+ additional varbinds.
+
+ Alternatively, you can use the API call 'send_trap_vars()'
+ which takes the same generic/specific trap values as
+ 'send_easy_trap()', plus the list of additional varbinds.
+
+ In either case, you also need to have 'trapsink' in the
+ snmpd.conf file. The resulting trap will be identical,
+ whichever approach is used.
+
+
+
+How can I get the agent to send an SNMPv1 enterprise-specific trap?
+------------------------------------------------------------------
+
+ There are two ways to do this. You can either use the
+ 'send_v2trap()' call and give a varbind list, starting
+ with the v2-equivalent of the SNMPv1 trap, followed by the
+ additional varbinds.
+
+ Alternatively, you can use the (undocumented) API call
+ 'send_enterprise_trap_vars()' which takes the same parameters
+ as 'send_trap_vars()', plus the enterprise OID to use (in the
+ usual name/length form). See the code file 'agent_trap.c'
+
+ In either case, you also need to have 'trapsink' in the
+ snmpd.conf file. The resulting trap will be identical,
+ whichever approach is used.
+
+
+
+How can I get the agent to send an SNMPv3 trap (or inform)?
+----------------------------------------------------------
+
+ It doesn't matter which API call you use to specify the
+ trap - 'send_easy_trap()', 'send_v2trap()' or one of the other
+ calls mentioned above. Generating an SNMPv3 notification
+ (rather than a community-based one) is controlled by the
+ snmpd.conf file.
+
+ To send an SNMPv3 trap, this file should contain a
+ 'snmpsess' directive, specifying the version, security
+ level, user name and passphrases (if applicable), as
+ well as the destination address. This is basically
+ the same as the command line required for sending the
+ trap manually, using 'snmptrap'.
+
+ Note that (unlike 'snmptrap') this directive does *not*
+ read default settings from an 'snmp.conf' file, so these
+ must be specified explicitly in the 'snmpsess' line.
+
+
+
+Why does calling 'send_v2trap' generate an SNMPv1 trap (or vice versa)?
+----------------------------------------------------------------------
+
+ The two versions of the trap API calls are concerned with how
+ the trap is represented when it is passed *in* to the API, not
+ the version of the trap PDU that will actually be generated by
+ the agent. That is determined by the configuration token used
+ to set up the trap destination.
+
+ Remember that in general, all traps are sent to all destinations.
+ This means that a trap specified using the SNMPv1 trap syntax
+ needs to be converted to the SNMPv2 format before it can be sent
+ to an SNMPv2 (or SNMPv3) destination. Similarly, a trap specified
+ using the SNMPv2 syntax needs to be converted to the SNMPv1 format
+ before it can be sent to an SNMPv1 sink.
+
+ Essentially, the API call to use depends on what you asking for,
+ which is not necessarily what the recipients will actually get!
+ See 'snmp_trap_api(3)' for a fuller explanation.
+
+
+
+What if I'm using an AgentX sub-agent instead?
+---------------------------------------------
+
+ That doesn't matter - the routines described in 'snmp_trap_api(3)'
+ can still be used, and the subagent will do the Right Thing.
+
+ One of the original design aims of the AgentX support was that this
+ should be transparent to a MIB module implementer. The agent-module
+ interface should be independent of the protocol used to receive the
+ original request. So the exact same MIB module code could be used
+ within a traditional SNMP-only agent, or an AgentX subagent, with no
+ changes needed.
+ In fact, the main agent supplied as part of the package can indeed
+ be run as an SNMP agent or an AgentX subagent, simply based on command
+ line flags (or similar configuration options).
+
+
+
+How can I register a MIB module in a different (SNMPv3) context?
+---------------------------------------------------------------
+
+ Contexts are a mechanism within SNMPv3 (and AgentX) whereby
+ an agent can support parallel versions of the same MIB objects,
+ referring to different underlying data sets. By default, a MIB
+ module registrations will use the default empty context of "".
+ But it's also possible to explicitly register an individual MIB
+ module using a different context.
+
+ With the v4 API, this uses the call 'register_mib_context()'
+ rather than the REGISTER_MIB macro. This is significantly more
+ detailed, but most of the additional parameters can take fixed
+ values, if all that's needed is to change the registration context.
+
+ Instead of the macro call:
+ REGISTER_MIB("my_token", my_variables, variable1, my_variables_oid);
+ use the function call:
+ register_mib_context( "my_token",
+ my_variables, sizeof(variable1),
+ sizeof(my_variables)/sizeof(variable1),
+ my_variables_oid,
+ sizeof(my_variables_oid)/sizeof(oid),
+ DEFAULT_MIB_PRIORITY, 0, 0, NULL,
+ "my_context", -1, 0);
+
+ Things are much easier with the v5 helper-based API. Having
+ created the registration structure, this just requires setting the
+ 'contextName' field before actually registering the MIB module:
+ netsnmp_handler_registration *reg;
+ reg = netsnmp_create_handler_registration(.....);
+ reg->contextName = strdup("my_context");
+ netsnmp_register_handler(reg);
+
+ In either case, it will also be necessary to define suitable
+ access control entries to cover requests using the new context.
+ This can either list each context explicitly:
+
+ access {group} "my_context" any noauth exact ......
+
+ or use a single entry to cover all possible contexts:
+
+ access {group} "" any noauth prefix ......
+
+ But note that *both* steps are required. Changing the access
+ control settings won't affect the default context used for MIB
+ registrations, and registering a MIB in a non-default context
+ won't automatically configure the necessary access control settings.
+
+
+
+MISC
+======
+
+What ASN.1 parser is used?
+-------------------------
+
+ The parser used by both the agent and client programs is coded by hand.
+ This parser has recently been re-vamped to allow control of which of
+ the available MIBs should be included, and to handle duplicate object
+ subidentifiers.
+ The source code can be found in the snmplib directory (in 'parse.c'),
+ and the parser is usually bundled into the library 'libnetsnmp.a'
+
+ Note that the parser attempts to be fairly forgiving of some common
+ errors and incompatibilities in MIB files. The Net-SNMP tools accepting
+ a MIB file without complaint does *not* imply that the MIB is strictly
+ correct.
+ Certain MIBs may need some amendments to allow them to be read
+ correctly by the parser. Contact the coders' list for advice.
+
+
+
+What is the Official Slogan of the net-snmp-coders list?
+-------------------------------------------------------
+
+ "The current implementation is non-obvious and may need to be improved."
+ (with thanks to Rohit Dube)
+
+ And an alternate, added 26-Apr-2000:
+
+ "In theory, it shouldn't be that hard, but it just needs to be done."
+
+
+
diff --git a/cleopatre/application/spidnetsnmp/INSTALL b/cleopatre/application/spidnetsnmp/INSTALL
new file mode 100644
index 0000000000..199de64592
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/INSTALL
@@ -0,0 +1,278 @@
+TABLE OF CONTENTS
+=================
+
+ Table Of Contents
+ Quick Instructions
+* Net-SNMP Specific Information
+ Long (but you should read these) Instructions
+ Installing the Perl/SNMP Module
+* Compilers and Options
+ Compiling For Multiple Architectures
+ Installation Names
+ Optional Features
+ Sharing Defaults
+ Operation Controls
+
+ * = required reading
+
+QUICK INSTRUCTIONS
+==================
+
+ 1) Run ./configure
+ (type "./configure --help" for a quick usage summary.)
+ (--prefix=PATH will change the default /usr/local installation path.)
+ (see "Compilers and Options" on changing the compiler to use)
+
+ 2) Optionally edit include/net-snmp/net-snmp-config.h
+ (due to prompting done by the configure script, this is very rarely
+ necessary.)
+
+ 3) make
+
+ 4) Run the next command as root:
+ 5) make install
+
+ 6) configure the agent
+ (either using 'snmpconf' or by crafting an snmpd.conf file manually.
+ The file 'EXAMPLE.conf' may be a suitable starting point)
+
+Note: By default, everything will be installed in /usr/local.
+ (see below for more instructions)
+
+Net-SNMP Specific Information
+=============================
+
+As of UCD-SNMP V3.3.1 the configuration files are now looked for in
+$(prefix)/share/snmp, where ($prefix) is defined as the value passed
+to the --prefix argument of the configure script, or /usr/local if
+undefined. In version 3.0.3 till 3.3, the files were kept in
+$(prefix)/lib/snmp
+
+Optional features to pass to configure for Net-SNMP can be obtained by
+running configure --help.
+
+LONG (but you should read these) INSTRUCTIONS
+=============================================
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, a file `config.log' containing compiler output
+(useful mainly for debugging `configure') and a file `configure-summary'
+containing the summary displayed at the end of the `configure' run.
+
+ The file `include/net-snmp/net-snmp-config.h' is also generated
+at this time. It contains IMPORTANT information such as the location
+of log and configuration files. In some special cases you may need to
+modify this file but it is prefererable to work out a way of getting
+`configure' to set things up for your particular environment.
+
+As the `configure' invocation often gets lengthy and difficult to
+type or if you have several different ways you want to configure a
+system, you may want to create a shell script containing your invocation.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+ The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. While running, it prints some
+ messages telling which features it is checking for. When it
+ completes it prints a short message (also available in configure-summary)
+ indicating what functionality will be available when compiled.
+
+ 2. If necessary, edit include/net-snmp/net-snmp-config.h (see above).
+
+ 3. Type `make' to compile the package.
+
+ 4. Type `make test' which runs a variety of tests to see what functionality
+ has been incorporated and if it works.
+
+ 5. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'.
+
+ 7. You can remove the application by typing `make uninstall'.
+
+There may be additional installation issues discussed in the
+README's for various platforms such as README.solaris.
+
+
+Installing the Perl/SNMP Module
+===============================
+
+ The Perl/SNMP Module is now bundled with the net-snmp package
+(which includes other Net-SNMP specific modules as well), all of which
+are located in the net-snmp/perl directory. The Perl package provides
+a high level abstract interface to the functionality found in the
+Net-SNMP libraries and demon applications.
+
+ It is recommended you install the perl modules as you build the
+ Net-SNMP package. The configure script can be run as follows to
+ automatically find perl and use it to install the perl modules:
+
+ ./configure --with-perl-modules
+
+ If you wish to use the embedded perl support available in the
+ Net-SNMP agent (and starting in Net-SNMP 5.2, the trap receiver),
+ then use the following option instead:
+
+ ./configure --enable-embedded-perl --enable-shared
+
+ Starting with Net-SNMP 5.4, configure enables embedded Perl and the
+ Perl modules by default when possible unless explicitly disabled.
+
+ If you wish to build the perl modules by hand, *install Net-SNMP
+ first* and then change directories to the perl subdirectory and:
+
+ Run:
+ cd perl
+ perl Makefile.PL
+ make
+ make test
+ make install (as root)
+
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, there is a `maketarget' script that will generate a symlink'ed
+shadow-directory for the object files. Do a `sh maketarget', then `cd' into
+targets/`config.guess` and do the configuration and installation.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+ CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+ If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made.
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
+
diff --git a/cleopatre/application/spidnetsnmp/Makefile.in b/cleopatre/application/spidnetsnmp/Makefile.in
new file mode 100644
index 0000000000..077f6bc981
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/Makefile.in
@@ -0,0 +1,375 @@
+#
+# Makefile.in (at the root of net-snmp)
+#
+
+top_builddir = .
+VPATH = @srcdir@
+
+SUBDIRS = snmplib @MAINSUBS@
+TESTDIRS = testing
+
+CPP = @CPP@ \
+ -Iinclude -I$(srcdir)/include -I$(srcdir)/agent/mibgroup -I. -I$(srcdir) \
+ -DDONT_INC_STRUCTS -DBINDIR=$(bindir) \
+ $(EXTRACPPFLAGS)
+
+INSTALLHEADERS=version.h
+INCLUDESUBDIR=system
+INCLUDESUBDIRHEADERS= aix.h bsd.h bsdi3.h bsdi4.h bsdi.h cygwin.h \
+ darwin.h darwin7.h darwin8.h darwin9.h freebsd5.h freebsd6.h \
+ dynix.h freebsd2.h freebsd3.h freebsd4.h freebsd.h generic.h hpux.h \
+ irix.h linux.h mingw32.h mips.h netbsd.h openbsd.h osf5.h \
+ solaris2.3.h solaris2.4.h solaris2.5.h solaris2.6.h \
+ solaris.h sunos.h svr5.h sysv.h ultrix4.h dragonfly.h
+INCLUDESUBDIR2=machine
+INCLUDESUBDIRHEADERS2=generic.h
+INSTALLBUILTHEADERS=include/net-snmp/net-snmp-config.h
+INSTALLBINSCRIPTS=net-snmp-config
+INSTALLUCDHEADERS=ucd-snmp-config.h version.h mib_module_config.h
+
+#
+# other install rules.
+#
+OTHERINSTALL=copypersistentfiles @PERLINSTALLTARGS@ @PYTHONINSTALLTARGS@
+OTHERUNINSTALL=@PERLUNINSTALLTARGS@ @PYTHONUNINSTALLTARGS@
+COPY_PERSISTENT_FILES=@COPY_PERSISTENT_FILES@
+PERSISTENT_DIRECTORY=@PERSISTENT_DIRECTORY@
+UCDPERSISTENT_DIRECTORY=@UCDPERSISTENT_DIRECTORY@
+
+#
+# perl specific
+#
+# yes, order matters here. default_store must occur before anything else
+PERLMODULES=default_store SNMP ASN OID agent
+PERLARGS=@PERLARGS@
+
+#
+# python specific
+#
+PYTHONARGS=@PYTHONARGS@
+
+#
+# libtool
+#
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+
+#
+# targets
+#
+all: sedscript EXAMPLE.conf standardall net-snmp-config-x @PERLTARGS@ @PYTHONTARGS@
+
+start-flag:
+ @touch build-in-progress-flag
+
+end-flag:
+ @rm -f build-in-progress-flag > /dev/null 2>&1
+
+libtool: $(LIBTOOL_DEPS)
+ $(SHELL) ./config.status --recheck
+
+
+snmplib:
+ @(cd snmplib; $(MAKE) )
+
+agent:
+ @(cd snmplib; $(MAKE) )
+ @(cd agent; $(MAKE) )
+
+apps:
+ @(cd snmplib; $(MAKE) )
+ @(cd apps; $(MAKE) )
+
+snmpget snmpbulkget snmpwalk snmpbulkwalk snmptranslate snmpstatus snmpdelta snmptable snmptest snmpset snmpusm snmpvacm snmpgetnext encode_keychange snmpdf snmptrap:
+ @(cd snmplib; $(MAKE) )
+ @(cd apps; $(MAKE) $@ )
+
+snmptrapd:
+ @(cd snmplib; $(MAKE) )
+ @(cd agent; $(MAKE) libs)
+ @(cd apps; $(MAKE) $@ )
+
+#
+# local build rules
+#
+sedscript: sedscript.in include/net-snmp/net-snmp-config.h $(srcdir)/agent/mibgroup/mibdefs.h
+ $(CPP) $(srcdir)/sedscript.in | egrep '^s[/#]' | sed 's/REMOVEME//g;s# */#/#g;s/ *#/#/g;s#/ *#/#g;s/# g/#g/;' > sedscript
+ echo 's#DATADIR#$(datadir)#g' >> sedscript
+ echo 's#LIBDIR#$(libdir)#g' >> sedscript
+ echo 's#BINDIR#$(bindir)#g' >> sedscript
+ echo 's#PERSISTENT_DIRECTORY#$(PERSISTENT_DIRECTORY)#g' >> sedscript
+ echo 's#SYSCONFDIR#@sysconfdir@#g' >> sedscript
+
+EXAMPLE.conf: sedscript EXAMPLE.conf.def
+ $(SED) -f sedscript $(srcdir)/EXAMPLE.conf.def > EXAMPLE.conf
+
+docs: docsdir mancp
+
+docsdir: docsdox
+
+docsdox: doxygen.conf
+ srcdir=$(srcdir) doxygen $(srcdir)/doxygen.conf
+ -rm docs/man/man3/todo.3
+ -rm docs/man/man3/deprecated.3
+
+mancp:
+ @for i in docs/man/man3/* ; do \
+ cp $$i man/netsnmp_`basename $$i` ; \
+ done
+
+net-snmp-config-x: net-snmp-config
+ chmod a+x net-snmp-config
+ touch net-snmp-config-x
+
+#
+# extra install rules
+#
+
+copypersistentfiles:
+ @if test "$(COPY_PERSISTENT_FILES)" = "yes" -a -d $(UCDPERSISTENT_DIRECTORY) -a ! -d $(PERSISTENT_DIRECTORY) ; then \
+ cp -pr $(UCDPERSISTENT_DIRECTORY) $(PERSISTENT_DIRECTORY) ; \
+ echo "copying $(UCDPERSISTENT_DIRECTORY) to $(PERSISTENT_DIRECTORY)" ; \
+ fi
+#
+# test targets
+#
+test: all testdirs
+ ( cd testing; $(MAKE) test )
+
+test-mibs: all testdirs
+ ( cd testing; $(MAKE) test-mibs )
+
+testdirs:
+ for i in $(TESTDIRS) ; do \
+ ( cd $$i ; $(MAKE) ) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi \
+ done
+
+distall: ${srcdir}/configure ${srcdir}/include/net-snmp/net-snmp-config.h
+
+OTHERCLEANTARGETS=EXAMPLE.conf sedscript
+OTHERCLEANTODOS=perlclean @PYTHONCLEANTARGS@
+
+#
+# perl specific build rules
+#
+# override LD_RUN_PATH to avoid dependencies on the build directory
+perlmodules: perlmakefiles subdirs
+ @(cd perl ; $(MAKE) LD_RUN_PATH="$(libdir):`$(PERL) -e 'use Config; print qq($$Config{archlibexp}/CORE);'`") ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi
+
+perlmakefiles: net-snmp-config-x
+ @if test ! -f perl/Makefile; then \
+ (dir=`pwd`; \
+ cd perl ; \
+ $(PERL) Makefile.PL -NET-SNMP-IN-SOURCE=true -NET-SNMP-CONFIG="sh $$dir/net-snmp-config" $(PERLARGS) ) ; \
+ fi
+
+perlinstall:
+ @(cd perl ; $(MAKE) install) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi
+
+perluninstall:
+ @(cd perl ; $(MAKE) uninstall) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi
+
+perltest:
+ @(cd perl ; $(MAKE) test) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi
+
+perlclean:
+ @if test -f perl/Makefile; then \
+ ( cd perl ; $(MAKE) clean ) ; \
+ fi
+perlrealclean:
+ @if test -f perl/Makefile; then \
+ ( cd perl ; $(MAKE) realclean ) ; \
+ fi
+
+
+#
+# python specific build rules
+#
+PYMAKE=$(PYTHON) setup.py $(PYTHONARGS)
+pythonmodules:
+ @(dir=`pwd`; cd python; $(PYMAKE) build --basedir=$$dir) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi
+
+pythoninstall:
+ @(dir=`pwd`; cd python; $(PYMAKE) install --basedir=$$dir) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi
+
+pythonuninstall:
+ echo "WARNING: python doesn't support uninstall"
+
+pythontest:
+ @(dir=`pwd`; cd python; $(PYMAKE) test --basedir=$$dir) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi
+
+pythonclean:
+ @(dir=`pwd`; cd python; $(PYMAKE) clean --basedir=$$dir)
+
+
+#
+# make distclean completely removes all traces of building including
+# any files generated by configure itself.
+#
+distclean: perlrealclean clean configclean tarclean
+
+makefileclean:
+ rm -f Makefile snmplib/Makefile \
+ agent/Makefile agent/mibgroup/Makefile \
+ agent/helpers/Makefile \
+ apps/Makefile apps/snmpnetstat/Makefile \
+ man/Makefile mibs/Makefile ov/Makefile \
+ local/Makefile testing/Makefile
+
+configclean: makefileclean
+ rm -f config.cache config.status config.log \
+ libtool include/net-snmp/net-snmp-config.h \
+ net-snmp-config net-snmp-config-x configure-summary
+ rm -f mibs/.index
+ rm -f include/net-snmp/agent/mib_module_config.h \
+ include/net-snmp/agent/agent_module_config.h \
+ include/net-snmp/library/snmpv3-security-includes.h \
+ snmplib/snmpsm_init.h \
+ agent/mibgroup/agent_module_includes.h \
+ agent/mibgroup/agent_module_inits.h \
+ agent/mibgroup/agent_module_shutdown.h \
+ agent/mibgroup/agent_module_dot_conf.h \
+ agent/mibgroup/mib_module_includes.h \
+ agent/mibgroup/mib_module_inits.h \
+ agent/mibgroup/mib_module_shutdown.h \
+ agent/mibgroup/mib_module_dot_conf.h
+ rm -rf mk
+ rm -f *.core
+
+#
+# Configure script related targets
+#
+touchit:
+ touch configure include/net-snmp/net-snmp-config.h.in
+ touch config.status
+ touch stamp-h stamp-h.in
+
+Makefile: Makefile.in config.status Makefile.rules Makefile.top
+ @if test "x$(NOAUTODEPS)" = "x"; then \
+ echo "running config.status because the following file(s) changed:"; \
+ echo " $?"; \
+ ./config.status; \
+ else \
+ echo "WARNING: not running config.status"; \
+ fi
+
+$(srcdir)/include/net-snmp/net-snmp-config.h.in: stamp-h.in
+$(srcdir)/stamp-h.in: configure.in acconfig.h
+ @if test "x$(NOAUTODEPS)" = "x" -a "x$(AUTOHEADER)" != "x:"; then \
+ cd ${srcdir} && LC_COLLATE=C $(AUTOHEADER); \
+ echo timestamp > ${srcdir}/stamp-h.in; \
+ else \
+ echo "WARNING: not running autoheader"; \
+ fi
+
+include/net-snmp/net-snmp-config.h: stamp-h
+stamp-h: include/net-snmp/net-snmp-config.h.in config.status
+ @if test "x$(NOAUTODEPS)" = "x"; then \
+ echo "running config.status because the following file(s) changed:"; \
+ echo " $?"; \
+ ./config.status; \
+ echo timestamp > stamp-h; \
+ else \
+ echo "WARNING: not running config.status"; \
+ fi
+
+$(srcdir)/configure: configure.in aclocal.m4
+ @if test "x$(NOAUTODEPS)" = "x" -a "x$(AUTOCONF)" != "x:"; then \
+ cd ${srcdir} && $(AUTOCONF); \
+ echo "Please run configure now."; \
+ sh -c exit 2; \
+ else \
+ echo "WARNING: not running autoconf"; \
+ fi
+
+config.status: configure
+ @if test "x$(NOAUTODEPS)" = "x"; then \
+ echo "running config.status because $? changed"; \
+ ./config.status --recheck; \
+ else \
+ echo "WARNING: not running config.status --recheck"; \
+ fi
+
+#
+# Emacs TAGS file
+#
+TAGS:
+ $(FIND) $(srcdir) -path $(srcdir)/dist/rpm -prune -o -name '*.[ch]' -print | etags -
+
+#
+# Internal distribution packaging, etc.
+#
+#tag:
+# @if test "x$(VERSION)" = "x"; then \
+# echo "you need to supply a VERSION string."; \
+# exit 2; \
+# fi
+# ${srcdir}/agent/mibgroup/versiontag $(VERSION) tag
+
+tar:
+ @if test "x$(VERSION)" = "x"; then \
+ echo "you need to supply a VERSION string."; \
+ exit 2; \
+ fi
+ ${srcdir}/agent/mibgroup/versiontag $(VERSION) tar
+
+tarclean:
+ @if test -x ${srcdir}/agent/mibgroup/versiontag ; then \
+ ${srcdir}/agent/mibgroup/versiontag Ext clean ; \
+ fi
+
+checks:
+ $(MAKE) -k makefilecheck commentcheck warningcheck dependcheck
+
+dependcheck:
+ @echo "Checking for full paths in dependency files..."
+ @grep -n -E "^/" `$(FIND) $(top_srcdir) -name Makefile.depend` && exit 1
+
+warningcheck:
+ @echo "Checking for cpp warnings..."
+ @grep -n -E "#warning" `$(FIND) $(top_srcdir) -name \*.\[ch\]` && exit 1
+
+commentcheck:
+ @echo "Checking for C++ style comments..."
+ @grep -n -E "([^:)n]|^)//" `$(FIND) $(top_srcdir) -path './win32' -prune -o -name \*.\[ch\] | grep -v agent/mibgroup/winExtDLL.c` && exit 1
+
+# always exit 1, since I can't figure out how to invert grep rc
+makefilecheck:
+ @echo "Checking for non-portable Makefile constructs..."
+ @grep -n "\.c=" `$(FIND) $(top_srcdir) -name "Makefile.*"`
+ @exit 1
+
+dist: tar
+
+FAQ.html:
+ local/FAQ2HTML FAQ
+
+.PHONY: docs docsdir mancp testdirs test TAGS
+# note: tags and docs are phony to force rebulding
+.PHONY: snmplib agent apps \
+ snmpget snmpbulkget snmpwalk snmpbulkwalk snmptranslate snmpstatus \
+ snmpdelta snmptable snmptest snmpset snmpusm snmpvacm snmpgetnext \
+ encode_keychange snmpdf snmptrap snmptrapd
diff --git a/cleopatre/application/spidnetsnmp/Makefile.rules b/cleopatre/application/spidnetsnmp/Makefile.rules
new file mode 100644
index 0000000000..65687ef2b9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/Makefile.rules
@@ -0,0 +1,408 @@
+
+#
+# standard target definitions. Set appropriate variables to make use of them.
+#
+# note: the strange use of the "it" variable is for shell parsing when
+# there is no targets to install for that rule.
+#
+
+# the standard items to build: libraries, bins, and sbins
+STANDARDTARGETS =$(INSTALLLIBS) $(INSTALLBINPROGS) $(INSTALLSBINPROGS)
+STANDARDCLEANTARGETS=$(INSTALLLIBS) $(INSTALLPOSTLIBS) $(INSTALLBINPROGS) $(INSTALLSBINPROGS) $(INSTALLUCDLIBS)
+
+standardall: subdirs $(STANDARDTARGETS)
+
+objs: ${OBJS} ${LOBJS}
+
+subdirs:
+ @if test "$(SUBDIRS)" != ""; then \
+ it="$(SUBDIRS)" ; \
+ for i in $$it ; do \
+ echo "making all in `pwd`/$$i"; \
+ ( cd $$i ; $(MAKE) ) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi \
+ done \
+ fi
+
+# installlibs handles local, ucd and subdir libs. need to do subdir libs
+# before bins, sinze those libs may be needed for successful linking
+install: installlocalheaders @installucdheaders@ \
+ installlibs \
+ installlocalbin installlocalsbin \
+ installsubdirs $(OTHERINSTALL)
+
+uninstall: uninstalllibs uninstallbin uninstallsbin uninstallheaders \
+ uninstallsubdirs $(OTHERUNINSTALL)
+
+installprogs: installbin installsbin
+
+#
+# headers
+#
+# set INSTALLHEADERS to a list of things to install in each makefile.
+# set INSTALLBUILTHEADERS to a list of things to install from builddir
+# set INSTALLSUBDIRHEADERS and INSTALLSUBDIR to subdirectory headers
+# set INSTALLSUBDIRHEADERS2 and INSTALLSUBDIR2 to more subdirectory headers
+# set INSTALLBUILTSUBDIRHEADERS and INSTALLBUILTSUBDIR to a list from builddir
+#
+installheaders: installlocalheaders @installucdheaders@ installsubdirheaders
+
+installlocalheaders:
+ @if test "$(INSTALLHEADERS)" != "" ; then \
+ echo creating directory $(INSTALL_PREFIX)$(includedir) ; \
+ it="$(INSTALLHEADERS)" ; \
+ $(SHELL) $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$(includedir) ; \
+ for i in $$it ; do \
+ $(INSTALL_DATA) $(top_srcdir)/include/net-snmp/$$i $(INSTALL_PREFIX)$(includedir) ; \
+ echo "installing $$i in $(INSTALL_PREFIX)$(includedir)" ; \
+ done \
+ fi
+ @if test "$(INSTALLBUILTHEADERS)" != "" ; then \
+ echo creating directory $(INSTALL_PREFIX)$(includedir) ; \
+ it="$(INSTALLBUILTHEADERS)" ; \
+ $(SHELL) $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$(includedir) ; \
+ for i in $$it ; do \
+ $(INSTALL_DATA) $$i $(INSTALL_PREFIX)$(includedir) ; \
+ echo "installing $$i in $(INSTALL_PREFIX)$(includedir)" ; \
+ done \
+ fi
+ @if test "$(INCLUDESUBDIRHEADERS)" != "" ; then \
+ echo creating directory $(INSTALL_PREFIX)$(includedir)/$(INCLUDESUBDIR) ; \
+ it="$(INCLUDESUBDIRHEADERS)" ; \
+ $(SHELL) $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$(includedir)/$(INCLUDESUBDIR) ; \
+ for i in $$it ; do \
+ $(INSTALL_DATA) $(top_srcdir)/include/net-snmp/$(INCLUDESUBDIR)/$$i $(INSTALL_PREFIX)$(includedir)/$(INCLUDESUBDIR) ; \
+ echo "installing $$i in $(INSTALL_PREFIX)$(includedir)/$(INCLUDESUBDIR)" ; \
+ done \
+ fi
+ @if test "$(INCLUDESUBDIRHEADERS2)" != "" ; then \
+ echo creating directory $(INSTALL_PREFIX)$(includedir)/$(INCLUDESUBDIR2) ; \
+ it="$(INCLUDESUBDIRHEADERS2)" ; \
+ $(SHELL) $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$(includedir)/$(INCLUDESUBDIR2) ; \
+ for i in $$it ; do \
+ $(INSTALL_DATA) $(top_srcdir)/include/net-snmp/$(INCLUDESUBDIR2)/$$i $(INSTALL_PREFIX)$(includedir)/$(INCLUDESUBDIR2) ; \
+ echo "installing $$i in $(INSTALL_PREFIX)$(includedir)/$(INCLUDESUBDIR2)" ; \
+ done \
+ fi
+ @if test "$(INSTALLBUILTSUBDIRHEADERS)" != "" ; then \
+ echo creating directory $(INSTALL_PREFIX)$(includedir)/$(INSTALLBUILTSUBDIR) ; \
+ it="$(INSTALLBUILTSUBDIRHEADERS)" ; \
+ $(SHELL) $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$(includedir)/$(INSTALLBUILTSUBDIR) ; \
+ for i in $$it ; do \
+ $(INSTALL_DATA) $$i $(INSTALL_PREFIX)$(includedir)/$(INSTALLBUILTSUBDIR) ; \
+ echo "installing $$i in $(INSTALL_PREFIX)$(includedir)/$(INSTALLBUILTSUBDIR)" ; \
+ done \
+ fi
+
+installucdheaders:
+ @if test "$(INSTALLUCDHEADERS)" != "" ; then \
+ echo creating directory $(INSTALL_PREFIX)$(ucdincludedir) ; \
+ it="$(INSTALLUCDHEADERS)" ; \
+ $(SHELL) $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$(ucdincludedir) ; \
+ for i in $$it ; do \
+ $(INSTALL_DATA) $(top_srcdir)/include/ucd-snmp/$$i $(INSTALL_PREFIX)$(ucdincludedir) ; \
+ echo "installing $$i in $(INSTALL_PREFIX)$(ucdincludedir)" ; \
+ done \
+ fi
+
+installsubdirheaders:
+ @if test "$(SUBDIRS)" != ""; then \
+ it="$(SUBDIRS)" ; \
+ for i in $$it ; do \
+ echo "making installheaders in `pwd`/$$i"; \
+ ( cd $$i ; $(MAKE) installheaders) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi \
+ done \
+ fi
+
+uninstallheaders:
+ @if test "$(INSTALLHEADERS)" != "" ; then \
+ it="$(INSTALLHEADERS)" ; \
+ for i in $$it ; do \
+ rm -f $(INSTALL_PREFIX)$(includedir)/$$i ; \
+ echo "removing $$i from $(INSTALL_PREFIX)$(includedir)" ; \
+ done \
+ fi
+ @if test "$(INSTALLBUILTHEADERS)" != "" ; then \
+ it="$(INSTALLBUILTHEADERS)" ; \
+ for i in $$it ; do \
+ rm -f $(INSTALL_PREFIX)$(includedir)/`basename $$i` ; \
+ echo "removing $$i from $(INSTALL_PREFIX)$(includedir)" ; \
+ done \
+ fi
+ @if test "$(INCLUDESUBDIRHEADERS)" != "" ; then \
+ it="$(INCLUDESUBDIRHEADERS)" ; \
+ for i in $$it ; do \
+ rm -f $(INSTALL_PREFIX)$(includedir)/$(INCLUDESUBDIR)/$$i ; \
+ echo "removing $$i from $(INSTALL_PREFIX)$(includedir)/$(INCLUDESUBDIR)" ; \
+ done \
+ fi
+ @if test "$(INCLUDESUBDIRHEADERS2)" != "" ; then \
+ it="$(INCLUDESUBDIRHEADERS2)" ; \
+ for i in $$it ; do \
+ rm -f $(INSTALL_PREFIX)$(includedir)/$(INCLUDESUBDIR2)/$$i ; \
+ echo "removing $$i from $(INSTALL_PREFIX)$(includedir)/$(INCLUDESUBDIR2)" ; \
+ done \
+ fi
+ @if test "$(INSTALLBUILTSUBDIRHEADERS)" != "" ; then \
+ it="$(INSTALLBUILTSUBDIRHEADERS)" ; \
+ for i in $$it ; do \
+ rm -f $(INSTALL_PREFIX)$(includedir)/$(INSTALLBUILTSUBDIR)/`basename $$i` ; \
+ echo "removing $$i from $(INSTALL_PREFIX)$(includedir)/$(INSTALLBUILTSUBDIR)" ; \
+ done \
+ fi
+
+#
+# libraries
+#
+# set INSTALLLIBS to a list of things to install in each makefile.
+#
+installlibs: installlocallibs @installucdlibs@ installsubdirlibs installpostlibs
+
+installlocallibs: $(INSTALLLIBS)
+ @if test "$(INSTALLLIBS)" != ""; then \
+ it="$(INSTALLLIBS)" ; \
+ $(SHELL) $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$(libdir) ; \
+ $(INSTALL) $(INSTALLLIBS) $(INSTALL_PREFIX)$(libdir) ; \
+ for i in $$it ; do \
+ echo "installing $$i in $(INSTALL_PREFIX)$(libdir)"; \
+ $(RANLIB) $(INSTALL_PREFIX)$(libdir)/$$i ; \
+ done ; \
+ $(LIB_LDCONFIG_CMD) ; \
+ fi
+
+installpostlibs: $(INSTALLPOSTLIBS)
+ @if test "$(INSTALLPOSTLIBS)" != ""; then \
+ it="$(INSTALLPOSTLIBS)" ; \
+ $(SHELL) $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$(libdir) ; \
+ $(INSTALL) $(INSTALLPOSTLIBS) $(INSTALL_PREFIX)$(libdir) ; \
+ for i in $$it ; do \
+ echo "installing $$i in $(INSTALL_PREFIX)$(libdir)"; \
+ $(RANLIB) $(INSTALL_PREFIX)$(libdir)/$$i ; \
+ done ; \
+ $(LIB_LDCONFIG_CMD) ; \
+ fi
+
+installucdlibs: $(INSTALLUCDLIBS)
+ @if test "$(INSTALLUCDLIBS)" != ""; then \
+ it="$(INSTALLUCDLIBS)" ; \
+ $(SHELL) $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$(libdir) ; \
+ $(INSTALL) $(INSTALLUCDLIBS) $(INSTALL_PREFIX)$(libdir) ; \
+ for i in $$it ; do \
+ echo "installing $$i in $(INSTALL_PREFIX)$(libdir)"; \
+ $(RANLIB) $(INSTALL_PREFIX)$(libdir)/$$i ; \
+ done ; \
+ $(LIB_LDCONFIG_CMD) ; \
+ fi
+
+installsubdirlibs:
+ @if test "$(SUBDIRS)" != ""; then \
+ it="$(SUBDIRS)" ; \
+ for i in $$it ; do \
+ echo "making installlibs in `pwd`/$$i"; \
+ ( cd $$i ; $(MAKE) installlibs) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi \
+ done \
+ fi
+
+uninstalllibs:
+ @if test "$(INSTALLLIBS)" != ""; then \
+ it="$(INSTALLLIBS)" ; \
+ for i in $$it ; do \
+ $(UNINSTALL) $(INSTALL_PREFIX)$(libdir)/$$i ; \
+ echo "removing $$i from $(INSTALL_PREFIX)$(libdir)"; \
+ done \
+ fi
+
+#
+# normal bin binaries
+#
+# set INSTALLBINPROGS to a list of things to install in each makefile.
+#
+installbin: installlocalbin installsubdirbin
+
+installlocalbin: $(INSTALLBINPROGS)
+ @if test "$(INSTALLBINPROGS) $(INSTALLBINSCRIPTS)" != " "; then \
+ $(SHELL) $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$(bindir) ; \
+ it="$(INSTALLBINPROGS) $(INSTALLBINSCRIPTS)" ; \
+ $(INSTALL) $(INSTALLBINPROGS) $(INSTALLBINSCRIPTS) $(INSTALL_PREFIX)$(bindir) ; \
+ for i in $$it ; do \
+ echo "installing $$i in $(INSTALL_PREFIX)$(bindir)"; \
+ done \
+ fi
+
+installsubdirbin:
+ @if test "$(SUBDIRS)" != ""; then \
+ it="$(SUBDIRS)" ; \
+ for i in $$it ; do \
+ echo "making installbin in `pwd`/$$i"; \
+ ( cd $$i ; $(MAKE) installbin) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi \
+ done \
+ fi
+
+uninstallbin:
+ @if test "$(INSTALLBINPROGS) $(INSTALLBINSCRIPTS)" != " "; then \
+ it="$(INSTALLBINPROGS) $(INSTALLBINSCRIPTS)" ; \
+ for i in $$it ; do \
+ $(UNINSTALL) $(INSTALL_PREFIX)$(bindir)/$$i ; \
+ echo "removing $$i from $(INSTALL_PREFIX)$(bindir)"; \
+ done \
+ fi
+
+#
+# sbin binaries
+#
+# set INSTALLSBINPROGS to a list of things to install in each makefile.
+#
+installsbin: installlocalsbin installsubdirsbin
+
+installlocalsbin: $(INSTALLSBINPROGS)
+ @if test "$(INSTALLSBINPROGS)" != ""; then \
+ it="$(INSTALLSBINPROGS)" ; \
+ $(SHELL) $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$(sbindir) ; \
+ $(INSTALL) $(INSTALLSBINPROGS) $(INSTALL_PREFIX)$(sbindir) ; \
+ for i in $$it ; do \
+ echo "installing $$i in $(INSTALL_PREFIX)$(sbindir)"; \
+ done \
+ fi
+
+installsubdirsbin:
+ @if test "$(SUBDIRS)" != ""; then \
+ it="$(SUBDIRS)" ; \
+ for i in $$it ; do \
+ echo "making installsbin in `pwd`/$$i"; \
+ ( cd $$i ; $(MAKE) installsbin) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi \
+ done \
+ fi
+
+uninstallsbin:
+ @if test "$(INSTALLSBINPROGS)" != ""; then \
+ it="$(INSTALLSBINPROGS)" ; \
+ for i in $$it ; do \
+ $(UNINSTALL) $(INSTALL_PREFIX)$(sbindir)/$$i ; \
+ echo "removing $$i from $(INSTALL_PREFIX)$(sbindir)"; \
+ done \
+ fi
+
+#
+# general make install target for subdirs
+#
+installsubdirs:
+ @if test "$(SUBDIRS)" != ""; then \
+ it="$(SUBDIRS)" ; \
+ for i in $$it ; do \
+ echo "making install in `pwd`/$$i"; \
+ ( cd $$i ; $(MAKE) install) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi \
+ done \
+ fi
+
+uninstallsubdirs:
+ @if test "$(SUBDIRS)" != ""; then \
+ it="$(SUBDIRS)" ; \
+ for i in $$it ; do \
+ echo "making uninstall in `pwd`/$$i"; \
+ ( cd $$i ; $(MAKE) uninstall) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi \
+ done \
+ fi
+
+#
+# cleaning targets
+#
+clean: cleansubdirs $(OTHERCLEANTODOS)
+ $(LIBTOOLCLEAN) ${OBJS} ${LOBJS} core $(STANDARDCLEANTARGETS) $(OTHERCLEANTARGETS)
+
+cleansubdirs:
+ @if test "$(SUBDIRS)" != ""; then \
+ it="$(SUBDIRS)" ; \
+ for i in $$it ; do \
+ echo "making clean in `pwd`/$$i"; \
+ ( cd $$i ; $(MAKE) clean) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi \
+ done \
+ fi
+
+lint:
+ lint -nhx $(CSRCS)
+
+#
+# wacky dependency building.
+#
+depend: dependdirs
+ @if test -f Makefile.depend ; then \
+ makedepend `echo $(CPPFLAGS) | sed 's/-f[-a-z]*//g'` -o .lo $(srcdir)/*.c $(srcdir)/*/*.c ; \
+ fi
+
+
+nosysdepend: nosysdependdirs
+ @if test -f Makefile.depend ; then \
+ makedepend `echo $(CPPFLAGS) | sed 's/-f[-a-z]*//g'` -o .lo $(srcdir)/*.c $(srcdir)/*/*.c ; \
+ $(PERL) -n -i.bak $(top_srcdir)/makenosysdepend.pl Makefile ; \
+ fi
+
+distdepend: nosysdepend distdependdirs
+ @if test -f Makefile.depend ; then \
+ $(PERL) $(top_srcdir)/makefileindepend.pl ; \
+ fi
+
+dependdirs:
+ @if test "$(SUBDIRS)" != ""; then \
+ it="$(SUBDIRS)" ; \
+ for i in $$it ; do \
+ echo "making depend in `pwd`/$$i"; \
+ ( cd $$i ; $(MAKE) depend) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi \
+ done \
+ fi
+
+nosysdependdirs:
+ @if test "$(SUBDIRS)" != ""; then \
+ it="$(SUBDIRS)" ; \
+ for i in $$it ; do \
+ echo "making nosysdepend in `pwd`/$$i"; \
+ ( cd $$i ; $(MAKE) nosysdepend) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi \
+ done \
+ fi
+
+distdependdirs:
+ @if test "$(SUBDIRS)" != ""; then \
+ it="$(SUBDIRS)" ; \
+ for i in $$it ; do \
+ echo "making distdepend in `pwd`/$$i"; \
+ ( cd $$i ; $(MAKE) distdepend) ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi \
+ done \
+ fi
+
+# These aren't real targets, let gnu's make know that.
+.PHONY: clean cleansubdirs lint \
+ install installprogs installheaders installlibs \
+ installbin installsbin installsubdirs \
+ all subdirs standardall objs \
+ depend nosysdepend distdepend dependdirs nosysdependdirs distdependdirs
diff --git a/cleopatre/application/spidnetsnmp/Makefile.top b/cleopatre/application/spidnetsnmp/Makefile.top
new file mode 100644
index 0000000000..b5219c4850
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/Makefile.top
@@ -0,0 +1,117 @@
+#
+# Minimum environment and virtual path setup
+#
+SHELL = /bin/sh
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VERSION = @VERSION@
+@SET_MAKE@
+
+#
+# Paths
+#
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+bindir = @bindir@
+sbindir = @sbindir@
+libdir = @libdir@
+datadir = @datadir@
+includedir = @includedir@/net-snmp
+ucdincludedir = @includedir@/ucd-snmp
+mandir = @mandir@
+man1dir = $(mandir)/man1
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+snmplibdir = $(datadir)/snmp
+mibdir = $(snmplibdir)/mibs
+persistentdir = @PERSISTENT_DIRECTORY@
+DESTDIR = @INSTALL_PREFIX@
+INSTALL_PREFIX = $(DESTDIR)
+
+#
+# Programs
+#
+INSTALL = $(LIBTOOL) --mode=install @INSTALL@
+UNINSTALL = $(LIBTOOL) --mode=uninstall rm -f
+LIBTOOLCLEAN = $(LIBTOOL) --mode=clean rm -f
+INSTALL_DATA = @INSTALL_DATA@
+SED = @SED@
+LN_S = @LN_S@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+PERL = @PERLPROG@
+PYTHON = @PYTHONPROG@
+FIND = @FIND@
+
+#
+# Compiler arguments
+#
+CFLAGS = @CFLAGS@ @DEVFLAGS@
+EXTRACPPFLAGS = @EXTRACPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBTOOL = @LIBTOOL@ @LIBTOOLFLAGS@
+EXEEXT = @EXEEXT@
+
+# Misc Compiling Stuff
+CC = @CC@
+LINKCC = @LINKCC@
+
+# use libtool versioning the way they recommend.
+# The (slightly clarified) rules:
+#
+# - If any interfaces/structures have been removed or changed since the
+# last update, increment current, and set age and revision to 0. Stop.
+#
+# - If any interfaces have been added since the last public release, then
+# increment current and age, and set revision to 0. Stop.
+#
+# - If the source code has changed at all since the last update,
+# then increment revision (c:r:a becomes c:r+1:a).
+#
+# Note: maintenance releases (eg 5.2.x) should never have changes
+# that would require a current to be incremented.
+#
+# policy: we increment major releases of LIBCURRENT by 5 starting at
+# 5.3 was at 10, 5.4 is at 15, ... This leaves some room for needed
+# changes for past releases if absolutely necessary.
+#
+LIBCURRENT = 16
+LIBAGE = 1
+LIBREVISION = 2
+
+LIB_LD_CMD = $(LIBTOOL) --mode=link $(LINKCC) $(CFLAGS) -rpath $(libdir) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) -o
+LIB_EXTENSION = la
+LIB_VERSION =
+LIB_LDCONFIG_CMD = $(LIBTOOL) --mode=finish $(libdir)
+LINK = $(LIBTOOL) --mode=link $(LINKCC)
+# RANLIB = @RANLIB@
+RANLIB = :
+
+# libtool definitions
+.SUFFIXES: .c .o .lo .rc
+.c.lo:
+ $(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
+.rc.lo:
+ $(LIBTOOL) --mode=compile --tag=CC windres -o $@ -i $<
+
+# include paths
+#
+SRC_TOP_INCLUDES = -I$(top_srcdir)/include
+SRC_SNMPLIB_INCLUDES = -I$(top_srcdir)/snmplib
+SRC_AGENT_INCLUDES = -I$(top_srcdir)/agent
+SRC_HELPER_INCLUDES = -I$(top_srcdir)/agent/helpers
+SRC_MIBGROUP_INCLUDES = -I$(top_srcdir)/agent/mibgroup
+
+BLD_TOP_INCLUDES = -I$(top_builddir)/include $(SRC_TOP_INCLUDES)
+BLD_SNMPLIB_INCLUDES = -I$(top_builddir)/snmplib $(SRC_SNMPLIB_INCLUDES)
+BLD_AGENT_INCLUDES = -I$(top_builddir)/agent $(SRC_AGENT_INCLUDES)
+BLD_HELPER_INCLUDES = -I$(top_builddir)/agent/helpers $(SRC_HELPER_INCLUDES)
+BLD_MIBGROUP_INCLUDES = -I$(top_builddir)/agent/mibgroup $(SRC_MIBGROUP_INCLUDES)
+
+TOP_INCLUDES = $(@TOP_INCLUDES@)
+SNMPLIB_INCLUDES = $(@SNMPLIB_INCLUDES@)
+AGENT_INCLUDES = $(@AGENT_INCLUDES@)
+HELPER_INCLUDES = $(@HELPER_INCLUDES@)
+MIBGROUP_INCLUDES = $(@MIBGROUP_INCLUDES@)
+
diff --git a/cleopatre/application/spidnetsnmp/NEWS b/cleopatre/application/spidnetsnmp/NEWS
new file mode 100644
index 0000000000..a3a2ad23b8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/NEWS
@@ -0,0 +1,1440 @@
+This file contains a summary of the major changes in released revisions.
+Please see the CHANGES file for a more detailed list of specific bugs/patches
+that have been fixed/applied, and the ChangeLog file for a comprehensive
+listing of all changes made to the code.
+
+*5.4.2.1*
+ snmpd:
+ - SECURITY ISSUE: A bug in the getbulk handling code could let
+ anyone with even minimal access crash the agent.
+
+*5.4.2*
+ snmplib:
+ - [PATCH 1921861]: Avoid endless loop after truncating 64bit int
+ - Better handling of CONTAINER_INSERT failures with multiple indices
+
+ snmpd:
+ - [PATCH 2023633]: add SCTP-MIB implementation (Linux only)
+ - suppress annoying "registration != duplicate" warning for root oids
+
+ build:
+ - [BUG 2023803]: Compilation problems on HP-UX 11.31
+ - Update to libtool 1.5.26
+
+ AIX:
+ - Add support for AIX 6.x.
+
+
+*5.4.1*
+
+ snmplib:
+ - [BUG 1619827]: link libraries against needed external libraries
+ - [PATCH 1616912]: fix memory leak in UDP transport code
+ - [PATCH 1592706]: fix memory leak when cloning varbinds
+ - Change snmp_sess_add_ex to consistently close and delete the
+ transport argument on failure, earlier the liveness of the
+ transport argument was undecided.
+
+ snmpd:
+ - [BUG 1558823]: fix ipAddressTable memory leak
+ - [BUG 1596638]: fix memory leak in ipCidrRouteTable, inetCidrRouteTable
+ - [BUG 1611524]: fix tcp connection table file descriptor leak
+ - handle row deletion issues in dataset tables
+ - [BUG 1712988]: default and configurable maximum number of
+ varbinds returnable to a GETBULK request.
+ - [PATCH 1666737]: include ipv6 counts in
+ udpInDatagrams, udpNoPorts, udpInErrors, udpOutDatagrams
+ - [PATCH 1700157]: fixes ordering of exec tokens in the resulting mib tree
+ - [PATCH 1719253]: fix skipNFSInHostResources so it does not break on the
+ second walk of the table.
+
+ perl:
+ - link Perl modules against the exact set of libraries needed
+ - [BUG 1619827]: properly link against libperl when configured with
+ --enable-as-needed
+ - [PATCH 1725049]: fix bulkwalk in cases of non-repeater
+
+ build:
+ - update to libtool 1.5.24 (from 1.5.22)
+
+ python:
+ - [PATCH 1716114]: Let python build in the Net-SNMP source tree
+
+ MacOSX:
+ - [PATCH 1600522]: CPU Hardware Abstraction Layer (HAL)
+ implementation for mach/darwin
+ - IF-MIB rewrite now enabled by default
+
+ Win32:
+ - fix AES support
+ - [PATCH 1706344]: fix compilation with cygwin
+
+ IRIX:
+ - [PATCH 1709748]: Optimized IRIX cpu stats
+
+ AIX:
+ - Fix default shared library building instead of forcing static use
+
+ FreeBSD:
+ - [BUG 1633483]: Support CPU HAL on FreeBSD4.x
+
+
+*5.4*
+
+ Important Changes:
+ - The default configuration now enables embedded Perl and the Perl
+ modules by default when possible unless explicitly disabled. You
+ may use the --disable-embedded-perl and --without-perl-modules
+ configure options, respectively, to revert to the former default
+ configuration.
+
+ New:
+ python:
+ - Python bindings to the Net-SNMP project are now available in
+ the python sub-directory. See the README file there for details.
+
+ build:
+ - Some preliminary support for automatic building of dynamically
+ loadable mib module code.
+ - Most net-snmp specific defines are now (also) available under
+ a proper NETSNMP_ prefix. The older, potentially conflicting
+ names as well as the autoconf variables can now be turned off
+ easily within 3rd party code.
+ - libtool update to 1.5.22
+ - enable-as-needed will try to link built libraries against needed
+ libraries at library link time, rather than application link time.
+ This is preliminary support for what will likely be better in 5.5.
+
+ snmplib:
+ - [PATCH 1282566]: to rework transport creation to allow for
+ alternative interpretations of the address and a more flexible
+ transport registration system
+ - [PATCH 1509943]: responses will get sent from the original dest IP
+ address when possible.
+
+ snmpd:
+ - new MIB table for managing Net-SNMP access control extensions
+ (see NET-SNMP-VACM-MIB). These extensions to the VACM MIB are
+ Net-SNMP specific and are used primarily by snmptrapd at this point.
+ - [PATCH 1550725]: A new uint instance helper to match the existing
+ int, long and ulong helpers
+ - [PATCH 1534877]: to add support for skipping NFS entries in the
+ host resources hrStorageTable. See the skipNFSInHostResources
+ token in the snmpd.conf file for details.
+ - A "hardware abstraction layer", to localise the O/S-specific
+ aspects of retrieving system data. This first appeared in the
+ 5.3.x line, but this release now starts to actively use it for
+ implementing particular MIB modules.
+ This has resulted in some minor changes in behaviour - some index
+ values in the hrStorageTable have changed from earlier releases,
+ and the (non-raw) memory statistics are now consistent, reporting
+ percentage usage calculated over the last minute on _all_ systems.
+ - Agent builds default module list from a default_mibs.h rather than
+ a hard coded configure list
+ - [PATCH 1568150]: Extend pass_persist error messages that can be
+ passed back from the script
+ - [PATCH 1570982]: Solaris IF-MIB: Support for IPv6-only interfaces
+
+ snmptrapd:
+ - the traphandle directive now supports a -t switch to indicate
+ matching any OID in the tree below the specified OID
+
+ mib2c:
+ - New mib2c.emulation.conf provides a quick way to do simplistic
+ emulation of an entire MIB or MIB branch.
+ - A new perl module NetSNMP::agent::Support provides easier embedded
+ perl support. (patch 1369996 from Peter Martin)
+ Run "mib2c -c mib2c.perl.conf OID" to help you start using it.
+
+ perl:
+ - gettable() now supports asynchronous callback functions
+ - update default_store module to latest default_store c-binding
+ tokens
+
+ snmpusm:
+ - performance improvement when changing localized keys
+ - new option -Cp to set usmUserPublic value
+
+ snmpvacm:
+ - new commands to manipulate Net-SNMP access control extensions
+
+ Ports:
+ Linux:
+ - add IPv6 aware UDP and TCP mibs to default module list
+
+ Solaris, FreeBSD, OpenBSD:
+ - Experimental support for 64bit interface counters (ifXTable). Enable
+ via '--with-mib-modules=if-mib --enable-mfd-rewrites'.
+ - [PATCH 1569537,1569539]: new UDP-MIB and TCP-MIB implementation
+ (enable through --with-mib-modules=udp-mib,tcp-mib)
+
+ Win32:
+ - new winExtDLL extension module to allow snmpd to load Windows SNMP
+ Service extension DLLs to provide support for HOST-RESOURCES-MIB
+ and other MIBs provided with Windows.
+
+ AIX:
+ - HOST-RESOURCES-MIB implementation added to default module list
+
+ uCLinux
+ - [PATCH 1551948]: Make pass_persist usable on uClinux
+
+ Fixes:
+ snmplib:
+ - fix OID lookups for fully qualified object names (eg .iso.org)
+ (official patch 1421725)
+ - UDPIPv6 and TCPIPv6 transports now compile on recent UN*X platforms
+
+ snmpd:
+ - fix disman/event monitoring crashes (official patch 1429059)
+ - fix re-init of daemons after SIGHUP (official patch 1473289)
+ - fix trap processing from SMUX peers (patch 1430824)
+ - [BUG 1527930]: fix smux authentication
+ - [BUG 1427410]: Set auth engineID for SNMPv3 traps.
+ - [BUG 1535903]: Support spaces within security names
+ - fix 8 byte IpAddress in at, ip and route MIBs.
+ - [PATCH 1562688]: fix ping/reattach agentx code
+
+ snmptrapd:
+ - fix bug 1420758/1458815: snmptrapd aborts/loops in select()
+ (official patch 1420758)
+ - fix re-init of daemons after SIGHUP (official patch 1473289)
+
+ perl:
+ - Fixed the perl bulkwalk function
+ - gettable() was fairly broken in prior versions
+ - OID handling was fully broken on various 64bit platforms
+ - fixes for 64-bit platforms
+
+ misc:
+ - Many misc fixes
+
+*5.3.0.1*
+
+ *** Security Fix ***
+
+ - In version 5.3 much of the authorization control was rewritten.
+ There was a bug in the new code that resulted in granting write
+ access to read-only users or communities which were configured
+ using the "rocommunity" or "rouser" snmpd.conf tokens. 5.3.0.1
+ fixes this problem. Users are encouraged to immediately update
+ their installations if they use either of these tokens.
+
+
+*5.3*
+
+ *** Important Notes ***
+
+ Several very significant changes have been made in Net-SNMP for this
+ release that warrant special attention.
+
+ - shared library version number no longer matches the release number. We
+ now follow the versioning scheme recommended by libtool. For the 5.3
+ release this means that the libraries now have a SONAME ending with
+ ".so.10", e.g. libnetsnmp.so.10.
+
+ - snmpd has not been truncating log files at startup, as documented in
+ the man pages, for a while now. This default behaviour has been restored.
+ Please use the '-A' flag if you want to continue appending to your log
+ files at startup.
+
+ - snmptrapd will no longer accept all traps by default. It must be
+ configured with authorized SNMPv1/v2c community strings and/or SNMPv3
+ users. Non-authorized traps/informs will be dropped.
+
+ - Due to a copyright statement that didn't allow modifications,
+ snmpnetstat has been completely rewritten. The new version now
+ accepts the same command-line options as the other tools, which
+ has introduced a number of incompatible changes. However, it
+ does now finally support SNMPv3.
+
+ New:
+ Building:
+ - new option to disable set support in the agent (--disable-set-support)
+
+ snmpd:
+ - implement notification logging
+ - implement notification filtering
+ - AgentX, host resources and disman/event mibs added to default module list
+ - updated and new disman mib implementations
+
+ snmptrapd:
+ - allow a non-default AgentX socket
+ - a brand new authorization scheme that is based on the VACM
+ authorization scheme from snmpd.
+ - Note: now drops unauthenticated notifications by default
+ - registers the snmpEngine MIB group under the "snmptrapd" context
+
+ snmplib:
+ - new helper for ascii file based scalar integers (think Linux /proc/)
+ - new utilities for dealing with files
+ - new utilities for parsing text files
+ - granular config/persistent file disablement (noPersistentLoad and
+ noPersistentSave snmp.conf tokens)
+
+ mib2c:
+ - mib2c.mfd.conf now generates code for persistence row storage
+ - many enhancements and bug fixes
+
+ snmpusm:
+ - allows to use old and/or new localized key instead of passphrase with
+ option -Ck
+ - new option -CE to specify usmUserEngineID (necessary to manage
+ snmptrapd's usmUserTable)
+
+ Ports:
+ Linux:
+ - new experimental tables
+ - tcpConnectionTable, tcpListenerTable
+ - ipAddressPrefixTable
+ - udpEndpointTable
+ - ipv4InterfaceTable, ipv6InterfaceTable
+ - inetCidrRouteTable supports dynamic ipv4 route creation/deletion
+ - added ipv6IpForwarding.0 and ipv6IpDefaultHopLimit.0 (read-write)
+
+ Win32:
+ - Cygwin compiler fixes
+ - MSVC: agent (snmpd) support for pass and pass_persist
+ - MinGW: agent (snmpd) support for pass
+ - Fix for 'select: No such file or directory' in snmpdelta
+
+ Fixes:
+ - Persistent files in directory defined by snmp.conf persistentDir were
+ not being loaded at startup
+ - Perl getnext didn't honor explicit reference to MIB file
+ - AgentX sub-agent connection delayed til after config files read
+ - Build fixes for --disable-agent, --disable-snmpv1 and --disable-snmpv2c
+ - Lots of bug fixes
+
+
+*5.2*
+ New:
+ For the security paranoid (like Wes):
+ - Insecure versions of SNMP may be completely disabled at compile time.
+ (configure using one or both of --disable-snmpv1 --disable-snmpv2c)
+ - Less secure versions of SNMPv3 authentication and encryption
+ algorithms may be completely disabled at compile time.
+ (configure using one or both of --disable-des --disable-md5)
+ (This requires you have OpenSSL to support SHA1 and AES instead)
+ - Diffie-Helman key negotiation (perfect-forward-secrecy - RFC2786)
+ has been implemented in both the agent and "snmpusm".
+ - Better support for direct use of localized and master keys
+ (randomly generated keys have more entropy than passwords). See
+ the -3m -3M -3k and -3K options, and the defAuthLocalizedKey,
+ defPrivLocalizedKey, defAuthMasterKey, defPrivMasterKey
+ snmp.conf tokens)
+
+ library:
+ - send and receive buffer sizes for UDP/TCP are configurable
+ - .conf file token registration can now search multiple files
+ (separate file names to search by a :. IE, "snmpd:agentx")
+
+ snmptrapd:
+ - Embedded perl support for trap handlers (much faster than traphandles).
+ (configure --with-embedded-perl ; see 'perldoc NetSNMP::TrapReceiver')
+ - the snmptrapd usmUser table can be controlled through SNMP & AgentX
+ (the snmptrapd registers MIBs under the "snmptrapd" SNMPv3 context)
+
+ agent:
+ - community strings can be mapped to individual SNMPv3 contexts
+ (see the snmpd.conf manual on "com2sec").
+ - AgentX should work properly with SNMPv3 contexts now.
+ - improved version of "exec" extension directive - "extend":
+ supports multi-line output, configurable command input, SET
+ handling, a valid relocatable MIB output structure, etc
+ - more flexibility added to netsnmp_cache helper, including periodic
+ refreshing of caches and cache pre-loading.
+ - experimental implementation of DisMan Remote Operations MIB groups
+ (remote nslookup, ping, traceroute and expressions via SNMP)
+ - The proxy supports a new -Cc flag which passes the community
+ name through to the other side rather than hard-coding it.
+ - The config_require() and other modules can now be placed
+ inside of CPP directievs (#if, /* ... */) as header files are
+ now passed through CPP processing first.
+ - new config_exclude() macro for excluding certain modules
+ - new config_belongs_in() macro to specify if a chunk of code
+ found by --with-mib-modules belongs in the agent library or
+ the mib module library.
+ - Uses a smaller function stack.
+
+ commands:
+ - snmpusm: A number of key-change improvements
+ (EG, changing localized keys supported, diffie-helman support, ...)
+ - New -Ln option to completely disable logging.
+
+ mib2c:
+ - a number of new or updated configuration templates:
+ - mib2c.iterate.conf: the iterator-based table config
+ now produces fuller template code than before.
+ - mib2c.table_data.conf and mib2c.container.conf:
+ two new "internal-row" style configs
+ - mib2c.mfd.conf: "MIBs for Dummies" (or MFD) - intended to
+ reduce the SNMP knowledge needed to develop MIB modules
+ and add flexibility at the same time. Run "mib2c -S
+ mfd_interactive_setup=1 -c mib2c.mfd.conf OID" and follow
+ its guided instructions to help you tailor its results to
+ meet your needs.
+ - mib2c.genhtml.conf: Generates an easier-to-read HTML view of
+ a MIB tree structure. (See http://www.Net-SNMP.org/mibs/
+ for example output.)
+ - more node tags available for conf file writers
+ - additional search directories may be set via MIB2C_DIRS env var.
+ - mib2c-update: new utility to help update mib2c generated code
+ when conf file changes.
+ - a mib2c.conf manual page to describe how to write mib2c .conf files.
+ - support for embedded perl code in mib2c.conf files
+
+ documentation:
+ - New README.agent-mibs: an attempt to start documenting what
+ MIBs are implemented in the agent and on what architectures.
+
+ perl:
+ - An improved SNMP::gettable() method. Uses GETBULK if possible and
+ better GETNEXT requests if not, decodes indexes from OIDs,
+ requests multiple variables at once, ... ("perldoc SNMP" for details)
+ - A NetSNMP::OID::get_indexes() function to extract index values
+ from an OID.
+
+ Ports:
+ Linux:
+ - new experimental tables/rewrites for Linux, including:
+ ifTable, ifXTable, inetCidrRouteTable, ipCidrRouteTable,
+ ipAddressTable, ipSystemStatsTable, ipNetToPhysicalTable.
+ - Enable these talbles by specifying --enable-mfd-rewrites to configure.
+ - Most of these tables have IPv6 support as well.
+ - ifIndex no longer changes when interfaces are added/removed, and all
+ tables/object wiil now use the same ifIndex for the same interface.
+
+ Solaris:
+ - new experimental support for ucd-snmp/lmSensors MIB module
+
+ Win32:
+ - Support for the MinGW compiler
+ - Support for snmptrapd running as a service
+ - A Win32 specific build and install script
+ - Support for a .exe installer
+ (we'll make binaries available using it)
+
+ Fixes:
+ - AgentX memory leak on sets
+ - SNMPv3 not-in-time window after 248 days
+ - Agent hang in HOST-RESOURCES MIB
+ - double free on duplicate registration
+ - OIDs with IP Addresses as indexes now print prettier
+ -'Lazy' installation of headers (only install if newer)
+ - allow whitespace in rocommunity/rwcommunity
+ - many miscellaneous bug reports
+
+
+*5.1.2*
+ New:
+ - Minor improvements to snmpdelta (error reporting)
+ - Minor improvements to snmpnetstat (IPv6 output)
+
+ Fixes:
+ - Misc 64bit processor fixes.
+ - Misc perl build and install fixes.
+
+ Ports:
+ - Linux 2.6 improvements
+ - Win32 Suport for TCP and UDP over IPv6 via Winsock version 2
+ - Win32 fixes in many places.
+ - Win32 service support for snmptrapd
+ - Win32 support for snmpconf
+
+*5.1.1*
+ New:
+ - test suite supports testing over other transports (tcp, udp6, unix, ...)
+ (see the -P switch to the testing/RUNTESTS script)
+ - Solaris supports the use of it's PKCS#11 library for supporting
+ cryptographic functions (OpenSSL isn't required if PKCS#11 is available)
+ (see configure's --with-pkcs flag)
+
+ Fixes:
+ - Improvements on 64 bit architectures.
+ - A few minor memory leaks fixed.
+ - An extremely large number of minor bug fixes.
+ - Many perl module specific bug fixes.
+ - snmpd will safely handle more signals.
+
+ Ports:
+ - Many many significant Windows improvements.
+ - AgentX support is working again under windows.
+ - SCM support is built into the agent to allow the agent to be
+ started as a windows service.
+ - MSDOS names are supported in path names.
+ - A win32 build script in win32/build.pl
+ - Support for the MinGW compiler
+ - (see the README.win32 file for details on new ports)
+ - Various helpful win32/*.bat files for installation, etc.
+ - Some linux 2.6 support improvements
+
+*5.1*
+ New:
+
+ Building:
+ - configure is now generated using autoconf 2.57.
+ - The make system now supports "make uninstall"
+ - configure & make supports a --with-install-prefix option
+ - new configure options to disable building of the agent, apps, ...
+ ./configure --help for a list of package sections that can be excluded.
+ - new configure option to remove specific code pieces (mib reading, ...)
+ ./configure --help for a list of code areas that can be excluded.
+
+ snmpd:
+ - linkUp and linkDown notifications can be enabled
+ (see the linkUpDownNotifications snmpd.conf token documentation)
+ - notifications (traps) can be generated for disman/monitor events.
+ (see the snmpd.conf documentation on "monitor" and "notificatonEvent")
+ - new snmpd.conf tokens: includeAllDisks
+ - the UCD-DISKIO-MIB will now work on linux.
+ - com2sec mappings for SNMP over unix sockets.
+ - some speed improvements have been made that should increase the
+ speed of the agent's processing time.
+ - for mib code using the table iterator, an auto-caching mechanism
+ which can greatly speed up access at the cost of caching.
+ (see "stash_cache" in the injectHandler token docs in snmpd.conf(5))
+ - Some of the agent modules were completely rewritten (and
+ should be faster and cleaner).
+ - A number of new APIs and helper modules are available, but
+ there is no major summary to easily list.
+ - A number of new Net-SNMP specific MIBs now exist.
+
+ snmptrapd:
+ - snmptrapd now supports forwarding of notifications.
+ (see the snmptrapd.conf manual for details)
+ - snmptrapd's new -t switch can be used to disable syslog.
+ (useful for a no-output snmptrapd with only traphandle support)
+
+ apps:
+ - snmptable sports 3 new options: fixed width, max-repeaters,
+ left-justify. (see snmptable -h for details)
+ - mib2c walks you through instructions to help you generate code
+ "just for you". Including some new forms of output code, like
+ notification code generation. Run mib2c SOMETHING for details.
+ - mib2c has about a billion other improvements, including the
+ ability to generate trap generation code templates.
+ - snmpwalk supports a new -Ct option for timing how long a walk takes.
+ - net-snmp-config supports a number of new options.
+ - All applications support a consistent -L flag for turning on
+ which forms of output logging should be used.
+
+ perl:
+ - the SNMP module supports a new get_table() call.
+
+ Fixes:
+ - More patches to properly demonize snmpd (close std*, double fork, ...).
+ - Version numbers of all packages/perl-modules/etc are better synchronized.
+ - more documentation, especially for APIs
+ - all perl module version numbers are synchronized with the
+ net-snmp package.
+ - Many many misc bug fixes, as always.
+
+ Ports:
+ - diskio MIB support for Darwin.
+ - ifSpeed under Linux should now be correct for most network cards.
+ - more windows build fixes
+
+*5.0.9*
+
+ SECURITY:
+ - An existing user/community could get access to data in MIB
+ objects that were explicitly excluded from their view.
+
+ Fixes:
+ - Perl build environment should better under Windows
+ - Misc kerberos support fixes.
+ - Improvements on various manual pages.
+ - A annoying bug with SETs being passed to pass scripts was fixed.
+ - The often talked about VACM optimization improvement was fixed again.
+ - mib2c handles augmentation tables better now.
+ - Various 64 bit issues have been addressed.
+
+*5.0.8*
+ New:
+ - No new features will be added to the 5.0.x line.
+
+ Ports:
+ - Update libtool to version 1.4.3, for the benefit of Darwin
+ - diskio support for Darwin
+ - Updates for OpenBSD 3.
+ - Updates to solaris README
+
+ Fixes:
+ - find libwrap w/nsl on RedHat
+ - fix for openssl 0.9.7
+ - Fix some AgentX memory leaks
+ - use macro for inline function prototypes
+ - Attempt to find unused port before running tests
+ - Use SNMP_SLEEP environment variable when running tests
+ - calculate a proper ifSpeed under linux when possible
+ - better daemonization of snmpd
+ - close and reopen snmptrapd log files on HUP
+ - support for 16 bit reuqest ids
+ - Recognize new 't' code in display hints
+ - misc other fixes
+
+*5.0.7*
+ New:
+ - VACM (access control) optimizations which will greatly benefit
+ people who wish to exclude large portions of the MIB tree from
+ some people. Previously this was a large resource drain.
+ - Add command line option to snmpd to set syslog facility
+ - Reverse DISPLAY-HINT processing, i.e. it allows you to input data
+ formatted like a DISPLAY-HINT prescribes
+ - Support setting of sysDescr and sysObjectID via snmpd.conf
+ configuration directives
+ - New output option to force display of strings as hex
+ - Persistent directory can be specified at runtime
+ - Add support for Linux virtual interfaces in the ipAddressTable.
+ - implemented the mteEventTable and the mteEventNotificationTable
+ form the DISMAN-EVENT-MIB.
+
+ Fixes:
+ - AgentX no longer flagged as experimental
+ - A few memory leak fixes for the table_iterator agent API.
+ - Processed flag cleared before each pass of a set request
+ - Remove snmpd pid file on exit
+ - Restore default behaviour of building shared libraries
+ - misc other fixes
+
+*5.0.6*
+
+ Fixes:
+ - prevent denial of service attack from authenticated users
+ (really this time).
+ - misc other fixes
+
+*5.0.5*
+
+ New:
+ - Support for OpenSSL 0.9.7
+ - Beginning of support for AES encryption.
+ ( Currently only usable with Net-SNMP and OpenSNMP software. )
+
+ Ports:
+ - win32 new project files win32sdk.dsw for those with the win32
+ platform sdk.
+ - win32 builds should work properly again, minus callbacks and thus
+ AgentX.
+
+ Fixes:
+ - Several AgentX (the subagent protocol) specific bugs have been fixed
+ - prevent denial of service attack from authenticated users
+ - many many misc fixes
+ - The perl agent module plugin should now work.
+ - Many other perl module related fixes.
+ - net-snmp-config --ldflags properly supplies -L flags
+ - misc make test fixes and improvements.
+
+*5.0.4*
+
+ During the testing for release 5.0.4, a release candidate was uploaded
+ to Sourceforge and marked as hidden. For variouse reasons, the release
+ was delayed and further changes and fixes were made. However, the
+ release candidate files still appeared on the public FTP server and our
+ mirrors. To avoid the confusion that could occur to users who may have
+ downloaded this release candidate, we are bumping the revision number
+ to 5.0.5. If you downloaded net-snmp-5.0.4.tar.gz, please upgrade
+ to net-snmp-5.0.5.tar.gz.
+
+*5.0.3*
+
+ New:
+ - the "dist" directory contains the beginnings of some init
+ scripts and packaging utilities.
+
+ Ports:
+ - win32 builds should work properly again.
+
+ Fixes:
+ - the 5.0.2 package had a few broken packaging problems. Opps.
+ - a few misc fixes.
+
+ Perl:
+ - the perl modules should work with older versions of perl again.
+
+*5.0.2*
+
+ New:
+ - mib2c support for the old-4.X style api and for scalars.
+ - many improvements to the netsh shell environment.
+
+ Fixes:
+ - tcpwrappers support should work significantly better.
+ - NFS file systems are better supported in the hrStorageTable
+ - the memory reporting no longer accidentally reports -1 integers
+ - a few memory leaks fixed in the table_iterator API
+ - fixes for Sun's "make"
+ - ds_ prefix name-space protection (-> netsnmp_ds_)
+ (run configure with --enable-ucd-compatibility for old API)
+ - v1/v2c access control fixes for ipv6 addresses
+ - many many misc fixes
+
+ Perl:
+ - The perl modules have a number of fixes, and the build process
+ was fixed (again).
+ - all make test suites should pass for people now.
+ (there are still some known minor limitations, but we removed the tests)
+
+*5.0.1*
+
+ New:
+ - A new flag: -OQ which does quick printing (-Oq), but with an '=' sign.
+ - All output should now have type tags in front of them.
+ (STRING: and INTEGER: were added)
+ - the snmplib/mib.c file has been instrumented with doxygen comments.
+ - two new mib2c configuration files for generating column and enum defines.
+ - a agent coding example: agent/mibgroup/examples/notification.c
+
+ Perl:
+ - the SNMP perl module properly uses snmp.conf values as defaults.
+ - --with-perl should work this time.
+ - more embedded perl support, but it still isn't complete yet.
+ (the NetSNMP::OID module has received many new features)
+
+ Ports:
+ - added vmstat and memory support for hpux11
+ - other misc improvements for hpux11
+
+ Fixes:
+ - the agent should properly handle requests in the right order.
+ (e.g., restrict the agent to processing only one SET at a time)
+ - net-snmp-config --compile-subagent has been greatly improved.
+ - the tools should report the right version number.
+ - large /proc/stat files on linux shouldn't crash the agent.
+ - the smux module should handle multiple registrations better.
+ - various documentation clean ups.
+ - 64 bit address clean ups.
+ - misc other bug fixes.
+
+*5.0*
+
+ New:
+
+ - Much of the agent internals were completely rewritten and sports
+ a new module API to make your life easier. See the
+ agent/mibgroup/examples directory for example code that makes
+ use of some of the new functionality.
+ (Also see http://www.net-snmp.org/tutorial-5/agent/ which has
+ some incomplete documentation)
+ - The agent sports embedded perl, see the perl details further below.
+ - The agent supports multiple SNMPv3 contexts and mib modules can
+ now register themselves under different contexts. (see the -n
+ option in the snmpcmd manual page for details on specifying
+ context strings in requests)
+ - The proxy code has been completely rewritten and now supports
+ the use of SNMPv3 contexts to help select which proxied host you
+ wish to talk to. See the snmpd.conf manual page.
+ - All the tools take --configToken=value options now. (see -H
+ output from any command for what configTokens it accepts)
+ - All the tools can speak over many different transport layers
+ now, including UDP/TCP (ipv4 and ipv6), AAL5pvc, and IPX. See
+ ./configure --help for details on enabling them.
+ Note: the -p and -T flags to all the applications have been
+ removed. Use hostname strings like "tcp:localhost:9999"
+ instead. See the snmpcmd manual page for details.
+ - snmptrapd now acts as an agentx subagent and implements portions
+ of the NOTIFICATION-LOG-MIB to allow captured traps and informs
+ to be queried.
+ - A "net-snmp-config" script will get installed which can report
+ how the various tools were built (which libraries they were
+ linked against, etc). It will also help you do other things as
+ well, like setting up snmpv3. Run net-snmp-config --help for details.
+ - kerberos authenticated and encrypted SNMPv3 is now possible.
+ See ./configure --help for details on enabling the ksm security module.
+ - The AgentX subagent protocol implementation has many new
+ features and fixes.
+ - mib2c was completely rewritten and has a much improved
+ configuration file specification.
+ - Much of the code is getting documented with "doxygen" style
+ documentation. Run "make docs" if you have doxygen installed.
+ - some RMON support is available.
+ (See agent/mibgroup/Rmon/README for details.)
+ - The source tree has been reorganized and all the exported header
+ files are now in the include subdirectory. You can now point to
+ the includes easily without having to run "make install" first.
+ - the agent now requires a configuration file to access any information.
+ - The entire code base has had indent run on it to effect a
+ consistent coding style. See the CodingStyle file for details.
+
+ Perl:
+
+ - The SNMP perl module now calls init_snmp() like real net-snmp
+ applications, which means it will read snmp.conf configuration
+ files, etc.
+ - new perl specific configure options --with-perl-modules &
+ --enable-embedded-perl. See ./configure --help for details.
+ - The beginnings of some new Perl modules (alpha level quality)
+ are in the perl directory, including:
+ - NetSNMP::agent which allows perl scripts to become net-snmp
+ master or subagents
+ - AnyData::SNMP is available that implements a perl DBI
+ interface to map SQL commands to SNMP. Included is a "netsh"
+ shell where SQL commands can be typed, aliases created, etc.
+ See the perl/AnyData_SNMP/INSTALL file for details.
+ - Beginning (alpha level quality) support for embedding perl
+ subroutines directly within the net-snmp agent.
+
+UCD-SNMP NEWS:
+
+*4.2.6*
+ Big fixes:
+ - Fixes to the Tunnel mib.
+ - Deprecated the non-raw objects in the system stats MIB portion.
+ - Testing harness fixes.
+ - Network file system improvements fro the hrStorageTable.
+ - fixed snmptable.
+ - fixed the memory table (again) locking to 2^31 in value.
+ - Misc documentation fixes and clean-ups.
+ - Many other misc fixes.
+
+*4.2.5*
+ Bug fixes:
+ - The perl module actually works. Sorry about that.
+ - don't overwrite the PID of an already-running snmpd with the PID
+ of an abortive snmpd.
+ - a 64 bit architecture socket fix
+ - smux authentication fixed for multiple connected sessions.
+ - dynamic module support testing in the configure
+ - memory values > 32bits are now reported as a maxed out 32bit number
+
+*4.2.4*
+ New:
+ - badCommunityNames and badCommunityUses Counters supported.
+ - tcp_wrappers support for snmptrapd.
+
+ Bug fixes:
+ - A security issue involving the snmpnetstat command accepting
+ illegal data from a faked snmp server.
+ - RPM library support fixes.
+ - shared libraries built by default.
+ - many bug fixes for conformance of target, notification, and vacm tables
+ - many other fixes.
+
+ Ports:
+ - HPUX 11
+ - Dynix/PTX 4.4
+ - The snmpd demon can properly run as a windows service
+
+*4.2.3*
+ New:
+ - sysLocation, sysContact, sysName and snmpEnableAuthenTraps are
+ persistent after being set remotely.
+ - New "ignoredisk" directive to ignore disks in the host resources mib.
+
+ Bug Fixes:
+ - The ifTable on Linux no longer reports duplicate interfaces.
+ - perl scripts print better error messages if needed modules
+ aren't available.
+ - trap sinks aren't duplicated after a SIGHUP.
+ - misc other fixes.
+
+ Ports:
+ - improved irix support.
+ - more mibII support for windows.
+
+*4.2.2*
+ Security Bug Fixes:
+ - A few security bugs have been found and fixed. No known exploits
+ have been released to date. However, users are encouraged to
+ upgrade to the 4.2.2 release as soon as possible.
+
+ Bug fixes:
+ - many misc bug fixes.
+ - misc documentation corrections.
+ - updated libtool to 1.4. This fixes a couple of platforms (eg, NetBSD).
+
+ Ports:
+ - mibII support for win32
+ - It should compile and work on MacOS X (Darwin)
+ - udpTable supported on solaris.
+ - win32 borland compiler supported (see win32/config.h.borland)
+
+ New:
+ - tkmib supports SETs and saving of configuration data.
+ - snmpwalk detects out of order OIDs being returned from an agent.
+ - snmpset accepts the '=' sign for a datatype if the mib is
+ available to extract the datatype from instead.
+
+*4.2.1*
+ Administrative:
+ - The http://www.net-snmp.org/ web site and domain name is now active.
+ - Copyright statement for changes beyond 4.2 is now a true BSD license.
+ (see the COPYING file for details)
+
+ Major Bug fixes:
+ - AgentX master agent no longer crashes when a subagent disconnects.
+ - counter64 encoding fixed.
+ - oids with large numbers embedded in them should work properly (again).
+ - Fixed behavior of agent_check_and_process() and alarms.
+ - mib2c handles more variable types.
+ - traps/informs are sent properly from agentx subagents.
+ - many many more bug fixes have gone into this release.
+
+ New:
+ - The snmpconf configuration file editor can create snmptrapd.conf files.
+ - AgentX support is compiled in by default, but must be configured now.
+ (Add "master on" to your snmpd.conf file to enable agentx support)
+
+*4.2*
+
+ Administrative:
+ - project services moved to http://www.net-snmp.org/project/
+
+ Features:
+ - Packets sequences are now shorter when possible, reducing packet sizes.
+ - A new configuration file creation tool: snmpconf.
+ (try snmpconf -g basic_setup)
+ - A new command to remotely list disk space: snmpdf.
+ - the agent VACM tables are now writable.
+ - a new snmpvacm tool can be used to change the running vacm configuration.
+ - dynamicly loadable mib module support for the agent.
+ (see snmpd.conf on the dlmod directive)
+ - minimal proxy support for snmpd
+ (see snmpd.conf on the proxy directive)
+ - libtool is now used to compile the package (better shared-library support)
+ - the agent now supports the SNMP-NOTIFICATION-MIB.
+ (enabled by default).
+ - the agent can set trapsink using snmpcmd command line style parameters
+ (see the trapsess section of the snmpd.conf manual page)
+ - index matching in oids has been improved
+ (see the snmpcmd manual page on -Ox, -OE, and -Ob).
+ - snmptrapd has new formating directives.
+ (see the snmptrapd manual page on format1 and format2).
+ - the agent can listen to multiple ports.
+ - the agent can be restricted to listening on only certain interfaces.
+ - the agent can be told at run time which mib modules (not) to initialize.
+ (see the -I option in the snmpd.conf manual page)
+ - the agent can run as a particular user.
+ - snmptable takes a -Ci argument to show table indices.
+ - snmptable uses GETBULK requests when it can (unless -CB is specified).
+ - The "make test" suite contains a lot of new tests.
+ - cross-compiling support.
+ - snmpset checks types and range values for legality.
+ - Significant improvements to the AgentX support.
+ (Code is still beta, but probably safe for use on non-critical systems).
+
+ Perl:
+ - bulkwalk functionality for the SNMP perl module.
+ - entirely numeric OID support.
+ - support for best guess mode for OIDs.
+ - range and default value access added.
+ - build can now be targeted against a non-standard net-snmp install path.
+
+ Fixes:
+ - v3 traps/informs handled properly now.
+ - Many more misc bug fixes.
+ - snmpv3 engineIDs not IP address specific.
+
+*4.1.2*
+ Fixes:
+ - Host resources fixes for FreeBSD and NetBSD
+ - ucd-snmp memory/vmstat fixes for FreeBSD-3
+ - configure --enable-ipv6 fixes
+ - AIX fix (use knlist)
+ - fix init_master_agent calling exit
+ - bad free in subagent.c
+ - dont let a agentx subagent be a smux master
+ - ucd-snmp/loadave fix for AIX
+ - fix doing a set on a pass variable
+ - snmptable fixes
+ - snmpnetstat fixes for v2c exceptions
+ - man page fixes
+
+ Features:
+ - Some UnixWare 5 configuration support
+ - configure --enable-mini-agent --without-openssl
+ - snmptrapd -n
+ - snmp_log callbacks
+ - noTokenWarnings and noRangeCheck in snmp.conf
+ - using a counter type in snmpset/snmptrap
+
+*4.1.1*
+ Fixes:
+ - Better agent handling of unauthorized requests.
+ - Better "make test" support.
+ - Misc bug fixes.
+
+*4.1*
+ New:
+ - Many new command line flags have been added for input/output flexibility.
+ (see the snmpcmd(1) manual page on the -O flag and -I flag)
+ - The tools support regex matching of oids on the command line.
+ (see the snmpcmd(1) manual page on the -Ib option)
+ - A ucd-snmp usage tutorial has been placed on the main web page.
+ (see http://www.net-snmp.org/tutorial/)
+ - snmptable is much smarter and handles sparse tables better.
+ - tkmib supports snmpv3.
+ - New agent libraries to embed SNMP and AgentX agents into other programs.
+ (see the snmp_agent_api(3) manual page and the tutorial)
+ - SNMP over TCP is supported.
+ (-T TCP on the command lines)
+ - OpenSSL has replaced KMT for SHA authentication and DES encryption.
+ (Get OpenSSL from http://www.openssl.org/).
+ - Some easier-to-use access-control snmpd.conf directives for simple setups.
+ (see the snmpd.conf(5) manual page)
+ - Easier setup of SNMPv3 support for the agent.
+ (see the README.snmpv3 file).
+ - Command line argument parsing has been reworked for getopt() use.
+ (currently backwards compatible; see the snmpcmd(1) manual page)
+ - Table rows with embedded strings are dealt with for both input and output.
+ (see the snmpcmd(1) manual on the -Ob flag)
+ - Many more snmp.conf directives supported.
+ (see the snmp.conf(5) manual page)
+ - Many AgentX improvements.
+ - All of our distributed mibs have been updated to be SMIv2 compliant.
+ - Trap support in the agent has been cleaned up and an API created.
+
+ Perl:
+ - Joe Marzot's perl module is now included with the ucd-snmp source.
+ (this should help people trying to synchronize the two packages)
+
+ Fixes:
+ - SMUX support has been reintegrated into the agent in a better way.
+ - Many many others.
+
+*4.0.1*
+ New:
+ - defVersion in snmp.conf supported.
+ Fixes:
+ - An option was accidentally turned on by default that shouldn't have been.
+ - misc minor fixes.
+
+*4.0*
+ New:
+ - SNMPv3 protocol support!!!
+ (See the README.snmpv3, snmpusm(1), snmp.conf(5), snmpd.conf(5))
+ - historic v2party support removed.
+ - complete re-write of the agent.
+ - The extensible AgentX protocol is in alpha-test mode.
+ (to use, compile with the mib-module "agentx" or
+ "agentx/master" or "agentx/client").
+ - syslog support for the agent (and everything else for that matter).
+ - Per-process/per-exec-script based fix scripts implemented.
+ (see snmpd.conf(5) for details)
+ - many more config file options supported.
+ (run any command with -H and see appropriate .conf manual pages)
+ - The start of a "make test" suite.
+ - many other things we've forgotten.
+ - code is ANSI C now, and requires a ANSI C compiler.
+
+ API Changes:
+ - A small change to the write functions in mib modules.
+ (data passed in has already be BER-decoded and is a pointer to a
+ variable of the correct type).
+ - The config_load_mib mib-module .h file directive is now
+ obsolete. Use REGISTER_MIB inside your init function instead.
+
+*3.6.2*
+ Fixes:
+ - An important multi-session bug fix, especially needed for the
+ SNMP perl module.
+ - Many minor bug fixes.
+
+*3.6.1*
+ Fixes:
+ - Minor last second fixes mostly.
+
+*3.6*
+ New:
+ - All of the services for ucd-snmp have moved from the sites in
+ ece.ucdavis.edu to ucd-snmp.ucdavis.edu, including http, ftp,
+ and the mailing lists.
+ - The configure --help output has been greatly improved for better
+ readability and has been broken into sections.
+ - The agent's SMUX support has been greatly improved and should
+ function with applications other than gated now.
+ - The snmptrapd has been make extensible so you can call other
+ programs and scripts when a trap has been received.
+ (see snmptrapd.conf(5))
+ - More configuration files have been created and can be used to
+ specify defaults and configuration information to the various
+ applications. Run each command with -H to see what it understands.
+ (see snmp_config(5), snmpd.conf(5), snmp.conf(5), snmptrapd.conf(5))
+ - The configuration file parser looks in ~/.snmp by default as
+ well, allowing each user to have his/her own setup files for the
+ various applications.
+ - The mib parser supports a variety of options dictating how
+ strictly it parses mib files.
+ (see snmpcmd.1 on "-P")
+ - Debugging output with the -D flag now accepts a list of
+ debugging information types to print.
+ (see snmpcmd.1 on "-D")
+ - Minimal multi-thread support using a modified version of the
+ session API.
+ (see snmp_sess_api(3))
+ - persistent storage of information is possible from the agent's
+ mib modules now.
+ (see read_config(3))
+ - The target mib has been implemented as an optional module.
+ - More documentation has been written.
+ - The recommended mib module API has changed slightly, but is
+ backwards compatible as well. See the AGENT.txt file for new
+ documentation on how to write mib modules for the agent.
+
+ Fixes:
+ - many misc bug fixes, as always.
+
+ Ports:
+ - snmpnetstat has been ported to the win32 enviornment.
+
+*3.5.3*
+ - Bug fixes, including row creation sets to mib modules should work again.
+
+*3.5.2*
+ - very small last minute bug fixes for win32 and freebsd mostly.
+
+*3.5.1*
+
+ Fixes:
+ - Many bug fixes submitted by users and the ucd-snmp-coders.
+ - v2party support in the agent has been fixed.
+ - The UCD-SNMP-MIB is SMICng compliant and should work under HP OV better.
+ - Most sections of the mibII tree are 64bit clean.
+
+ Copyright:
+ - Simplification.
+
+*3.5*
+
+ New:
+ - agent/mibgroup directory reorganized hierarchically.
+ - this may break the agent compilation with some compilers.
+ - floats, doubles, counter64s, int64s, uint64s support via opaque types.
+ - new modules: misc/ipfwacc.
+ - use of dynamicly loadable modules now possible, but not fully supported.
+ - New application command line flags: -s, -S, -m MIBS, -M MIBDIRS.
+ - new configure options: --with-cc=CC and --with-cflags=CFLAGS
+
+ Fixes:
+ - Solaris core dumps.
+ - Fixes for NetBSD 1.3.
+ - The apps work again on 64bit machines.
+ - misc other bug fixes.
+
+ Ports:
+ - host resources module should work on more platforms: NetBSD,
+ FreeBSD, SunOS (almost).
+
+*3.4*
+
+ Important:
+ - the UCD-SNMP specific mib structure changed.
+ - many of the table oids have changed location and have been renamed.
+ - the View Based Access Control module was implemented in the agent.
+ Therefore, the "community" snmpd.conf parameter no longer
+ exists. See the snmpd.conf file for how to control access via
+ community names now.
+ - The header file #defines have changed. You may have to compile
+ third party applications with -DCMU_COMPATIBLE (like perl-SNMP <= V1.7).
+ - The parser is more strict about unlinked OIDs and end-of-comment
+ conditions. You may see problems in a few broken mibs that used
+ to parse ok with the older parser.
+
+ New:
+ - dynamic library support: configure with --enable-shared.
+ - the beginnings of a Perl/Tk/SNMP mib browser: tkmib
+ - all applications support -R for random oid-name lookups.
+ - default mib list changes when you add or remove agent mib-groups.
+ - debugging in the agent can be turned on and off using snmpsets.
+ - a new mib module displays a list of all loaded mib modules.
+ - the internal structure of the agent's mib modules is now hierarchical.
+ - the agent looks for .conf files in both the lib/ and share/ directories.
+ - more improvements/options to snmptable.
+ - new vmstat module to report vmstat related information under linux.
+ - a perl based mib2c translator to convert mib sections to C code templates.
+
+ Fixes:
+ - The code was run through purify for memory leaks and a few were found.
+ - snmptrap sends to the correct default port of 162 again.
+
+ Ports:
+ - irix 6.2 support improved.
+ - openbsd.
+ - the host resources mib compiles on Solaris.
+
+*3.3.1*
+
+ New:
+ - "make install" installs the library and header files.
+
+ Fixes:
+ - compilation on many architectures (sunos for example).
+ - snmptrapd doesn't exit if v2party files don't exist.
+ - host resources works a bit better (ie, it compiles) under solaris.
+
+
+*3.3*
+
+ Path changes:
+ - the default paths to the installed mibs and snmpd.conf file have
+ changed to /usr/local/share/snmp (set differently using --datadir).
+ - the default path of the snmpd and snmptrapd have changed to
+ /usr/local/sbin (set differently using --sbindir).
+
+ New:
+ - basic SNMPV2c support.
+ - Not fully tested (feedback please!), and not RFC compliant.
+ - all apps require '-v 2c' for v2c and '-v 2p' for the older party code.
+ - basic host-resources mib support for linux, and hpux.
+ - All environment variables can be set with a preceding '+' for
+ indicating additions to the default values.
+ - mib modules cleaned up more and can be added and removed more easily.
+ - mib modules have a new macro for callbacks when reading a .conf file.
+ - apps command line interfaces have merged together for standardization.
+ - the libsnmp library no longer forces printing of errors.
+ - 2 new applications: snmpdelta and snmptable.
+ - the mib parser caches mib directory scans for speed improvements.
+ - snmptrapd is snmp-version multi-lingual.
+
+ Ported:
+ - irix should be more complete.
+ - aix 4.1.5.
+ - fixes for hpux 10.20.
+ - linux 2.1.x support.
+ - library and apps supported under 32bit windows systems.
+
+ Fixes:
+ - too numerous to mention.
+
+*3.2*
+
+ New:
+ - Top level of the mib parser has been restructured
+ - no longer reads 'mib.txt'
+ - no longer reads everything (MIBS/MIBDIRS)
+ - reads import clauses to load other required modules
+ - new man page: mib_api.3
+ - The agent has been completely restructured (modularized) to
+ allow for easier extension via C code and requires no
+ modification of the ucd-snmp distributed source code to add in
+ new C coded mib modules. See the README file in the
+ agent/mibgroup subdirectory for details. Modules are added and/or
+ removed via configure options.
+ - agent can send traps to multiple trap destinations.
+ - configure can be run outside the default source directory.
+ - Optional modules: SMUX support to talk with a running gated.
+ - All configure prompted questions can be set on the command line instead.
+
+ Fixes:
+ - Memory leaks.
+ - code is now prototyped and many related bugs have been found.
+ (an ANSI compiler is still optional.)
+ - Many others.
+
+ Ported:
+ - linux-2.*
+ - mips-sgi-irix6.3 (agent needs 2 mib-modules removed still)
+
+*3.1.3*
+
+ New:
+ - FAQ file!
+ - bug-report script!
+ - Agent can read .conf files from more places:
+ - SNMPCONFPATH enviornment variable.
+ - command line options: -c FILE and -C.
+ - Agent can send coldstart and authentication traps.
+ - All requests/patches/questions should go to
+ ucd-snmp-coders@ece.ucdavis.edu
+ - snmp variables mib implemented.
+ - more udp, ip, ipNetToMedia tables implemented.
+
+ Fixes:
+ - Memory leaks.
+ - Many other system specific fixes.
+
+ Misc:
+ - configure script updated to autoconf 2.12.
+
+ Removed:
+ - Very ancient tk/tcl code.
+
+*3.1.2*
+
+ New:
+ - extensible mib moved to ucdavis enterprise mib: .1.3.6.1.4.1.2021.
+ - PORTING file added.
+ - new configure switch: --without-root-access.
+
+ Ports:
+ - BSDi, and possibly irix, and linux is not too far off.
+ - massive improvements for netbsd, freebsd, hpux.
+
+ Fixes:
+ - Massive parser improvements. (Niels Baggesen <recnba@mediator.uni-c.dk>)
+ - configure script upgraded to autoconf 2.11.
+
+*3.1.1*
+
+ New:
+ - init_mib() now reads all files in PREFIX/lib/snmp/mibs as mibs.
+ - sysContact and sysLocation settable in snmpd.conf.
+ - TC information retained (from Joe Marzot).
+
+ Fixes:
+ - snmpset on a pass script works now.
+ - pass scripts more throughly tested and debugged.
+ - community 5 can be set now.
+ - Many others.
+
+*3.1.0.1*
+
+ Ported:
+ - FreeBSD 2.?
+
+ Fixes:
+ - snmptrap greatly improved! (Niels Baggesen <recnba@mediator.uni-c.dk>)
+ - other small stuff.
+ - default logfile location moved to /var/log if exists, else /usr/adm.
+
+ New:
+ - snmptrap man page. (Niels Baggesen <recnba@mediator.uni-c.dk>)
+
+*3.1*
+
+ Features:
+ - Pass thru extensibility added!
+ - snmpnetstat greatly improved (Niels Baggesen <recnba@mediator.uni-c.dk>)
+ - improved solaris info caching (Dan A. Dickey <ddickey@transition.com>)
+
+ Bug fixes:
+ - many fixes for solaris (Niels Baggesen <recnba@mediator.uni-c.dk>
+ and "Dan A. Dickey" <ddickey@transition.com>)
+ - greatly reduced memory usage by mib parser (Niels Baggesen)
+ - disk checks fixed for solaris and osf.
+ - improved Mib parsing from Mike Perik <mikep@crt.com>
+ - TRAP-TYPE/NOTIFICATION-TYPE now handled.
+ - IMPORTS definition no longer required.
+ - SIZE syntax fixed.
+ - sedscript compiles correctly with Solaris's spro compiler.
+ - many more small ones.
+
+ Misc:
+ - Upgraded to autoconf-2.10
+
+*3.0.7.2*
+
+ Major solaris patches from Niels Baggesen <recnba@mediator.uni-c.dk>. Thanks!
+ Other misc patches
+
+*3.0.7.1*
+
+ Bug fixes.
+
+*3.0.7*
+
+ Features:
+ - Two new operating systems supported: hppa1.1-hp-hpux10.01, *-netbsd1.1
+ - Two new ./configure options:
+ --enable-debugging: includes nlist and other warnings in log-file output.
+ --with-defaults: Assumes you want the defaults for all user prompts.
+
+ Bug fixes:
+ - make clean in man/ works.
+ - Fixed the mib.txt capitalization problem.
+ - Fixed a gcc cpp problem (added -x c to the command line options).
+ - Added NULL to the second gettimeofday argument.
+
+ Misc:
+ - Upgraded to autoconf-2.9
+ - snmpcheck upgraded to perl5.002 and Tk-b10
+ - totally re-did the routing tables (required by hpux10.01).
+
+*3.0.6*
+
+ Features:
+ - snmpV1 community names can be set in the configuration files now!
+ - new app: apps/snmptrap, as requested by many, many people.
+ - New man page (rough still): snmpd.conf.5.
+ - Returns new values for system.sysObjectID for each supported OS.
+ - Better OpenView support for changing the icons & etc. See ov/README.
+
+ Bug fixes.
+ - -p PORT -l LOGFILE now work as advertised.
+ - printed values of timeticks are no longer negative.
+ - Correctly finds the Solaris 2.5 kernel.
+ - the restart-agent mib entry now sets an 1 second alarm to
+ restart so it can return a proper snmp response first.
+ - Truncates existing logfiles.
+ - nlist warnings removed.
+ - more... (see the ChangeLog)
+
+*3.0.5*
+
+ Bug fixes:
+ - 'make' should not call 'autoconf' and associates anymore.
+ - Fixed sun4 exit codes. Really.
+ - Changed config.h a bit to fix the mib.txt file's errors when
+ some mibs were not defined for usage.
+
+ Misc:
+ - Updated configure to autoconf 2.7
+
+*3.0.4*
+
+ Mainly a bug fix release:
+ - fixed another 32/64 bit problem: returned exit codes on alphas
+ were incorrect.
+ - many system errors (e.g., no mem) were causing the agent to
+ return error flags when it really was clueless.
+ - found a memory leak in the CMU routing table implementation.
+ - More configure cleanups, mostly for Solaris.
+ - snmp_open calls getservbyname only once now, at the request of Gary
+ Hayward <gah@dirac.bellcore.com>. Mainly for Perl users.
+
+ New example file: EXAMPLE.conf file (created at build time).
+
+ local/snmpcheck has drastically improved, and now requires Tk-b8.
+
+ You can now mung with all sorts of numbers in config.h and the
+ mib.txt file will be mostly built from it if you change my defaults.
+
+*3.0.3*
+
+ *** default location for .conf and mib.txt files moved to
+ .configure's --prefix location
+
+ Now using GNU's auto-conf for better portability
+ - prompts for important config.h information as well
+
+ Port to Sun4/Solaris 2.4
+
+ -h/--help and -v/--version flags added to snmpd
+
+*3.0.2.1*
+
+ Compilation bug fix
+
+*3.0.2*
+
+ Port to dec-alpha/OSF 3.1
+ - quite a few more CMU bugs found during port.
+
+ (docs/snmpd.1) Beginnings of documentation/man pages.
+
+ (local/snmpcheck) Many changes/improvements. Still very (usable) Beta.
+
+ (NEWS) Added this file!
+
+*3.0.1*
+
+ (agent/snmpd)
+ 2 Command line options added:
+ -l LOGFILE Outputs stderr/out to LOGFILE (overrides config.h def)
+ -L Do NOT write to a log file (overrides config.h)
+
+ (agent/snmpd)
+ New built in mib functions:
+ MIB.VERSIONMIBNUM.VERUPDATECONFIG (default: .1.3.6.1.4.10.100.11)
+ -- set to 'integer:1' to tell the agent to re-read the config file(s).
+
+ MIB.VERSIONMIBNUM.VERRESTARTAGENT (default: .1.3.6.1.4.10.100.12)
+ -- set to 'integer:1' to tell the agent to restart (exec and quits)
+
+ Bug fixes/more CMU clean up
+
+*3.0*
+
+ Initial (public) Release
diff --git a/cleopatre/application/spidnetsnmp/PORTING b/cleopatre/application/spidnetsnmp/PORTING
new file mode 100644
index 0000000000..dacb15a467
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/PORTING
@@ -0,0 +1,108 @@
+--- INTRODUCTION
+
+Just a quick note on porting and sending me patches:
+
+First off, you probably should subscribe to
+net-snmp-coders@lists.sourceforge.net by sending a message to
+net-snmp-coders-request@lists.sourceforge.net with a subject line of
+subscribe. This is a mailing list to discuss all oft the coding
+aspects of the project.
+
+Additionally, you should probably be developing against the latest
+snapshot of the source code, which can be obtained through the
+net-snmp cvs server. Details can be found at
+http://www.net-snmp.org/cvs/.
+
+If you send patches to us, it would greatly help us if you sent them
+to us based on the current checked out copy from CVS. To do this,
+send us the output of "cvs diff -u" run in the top level net-snmp
+source tree after you have modified the files that will fix the
+problem or add the feature you're submitting the patch for.
+
+Quite a while back I started using the GNU autoconf testing suite to
+greatly enhance portability. Because of this porting to new
+architectures is much easier than before. However, new people porting
+the package to new architectures rarely take advantage of this setup
+and send me patches with lots of '#ifdef ARCH' type C code in it. Let
+me say up front, I *hate* this type of coding now (even though I used
+to use it a lot). What is better is to check for the necissary
+functionality using the configure script and then use the results of
+those tests.
+
+To do this, you need to install the GNU 'autoconf' package which also
+requires the GNU 'm4' (gm4) package as well. This double installation
+is extremely easy and shouldn't take you more than 15 minutes max.
+After that, modify the configure.in and acconfig.h files as needed
+instead of modifying the config.h or configure files directly. The
+Makefile will re-produce these files from the first two.
+
+Worst case: Don't put in #ifdef architecture style statements.
+Rather, create a new define in the s/ and m/ system specific header
+files and use those defines to test against in the C code. This
+should only be done for things that can't be checked using configure
+though.
+
+Some autoconf examples:
+
+--- HEADER FILES
+
+In configure.in:
+ AC_CHECK_HEADERS(headdir/header.h)
+
+Then in your source code:
+ #ifdef HAVE_HEADDIR_HEADER_H
+ #include <headdir/header.h>
+ #ENDIF
+
+--- LIBRARY ROUTIENS
+
+In configure.in:
+ AC_CHECK_LIB(libexample, example_function)
+
+Thats it. The Makefiles will automatically link against -llibexample
+if example_function is found in the library.
+
+--- FUNCTION CHECKS
+
+In configure.in:
+ AC_CHECK_FUNCS(example_function)
+
+In source code:
+ #ifdef HAVE_EXAMPLE_FUNCTION
+ /* use it */
+ #endif
+
+--- STRUCTURE MEMBER CHECKS
+
+In configure.in:
+ AC_CHECK_STRUCT_FOR([
+#include lines
+], STRUCTURE, MEMBER)
+ ^^^^^^^^^ ^^^^^^ (change)
+
+In acconfig.h:
+ #undef STRUCT_STRUCTURE_HAS_MEMBER
+ ^^^^^^^^^ ^^^^^^ (change)
+
+In source code:
+ #ifdef STRUCT_STRUCTURE_HAS_MEMBER
+ /* use it */
+ #endif
+
+--- READ THE MANUAL
+
+The GNU autoconf info files are extremely well written and easy to
+follow. Please check them out.
+
+I'd be happy to help you through anything you don't understand or
+through more complex examples (eg, checking for structure parts or
+existance). I'd be far less happy to get patches ignoring the above
+request. If you simple can't abide by this, please send the patches
+anyway, but it'll just take me longer to get them applied.
+
+Submit the patch to http://www.net-snmp.org/patches/.
+Please include what version of the net-snmp package it was applied to
+and state the arcitectures you have tested it on.
+
+Thanks a lot for the consideration,
+Wes
diff --git a/cleopatre/application/spidnetsnmp/README b/cleopatre/application/spidnetsnmp/README
new file mode 100644
index 0000000000..8f42ca077f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README
@@ -0,0 +1,354 @@
+ README file for net-snmp Version: 5.4.2.1
+
+DISCLAIMER
+
+ The Authors assume no responsibility for damage or loss of system
+ performance as a direct or indirect result of the use of this
+ software. This software is provided "as is" without express or
+ implied warranty.
+
+TABLE OF CONTENTS
+
+ Disclaimer
+ Table Of Contents
+ Introduction
+* Supported Architectures
+ Availability
+ Web Page
+* Installation
+ Copying And Copyrights
+* Frequently Asked Questions
+ Helping Out
+* Code Update Announcements
+* Mailing Lists
+ Agent Extensibility
+ Example Agent Configuration and Usage
+ Configuration
+ Submitting Bug Reports
+ Closing
+ Thanks
+
+ * = Required Reading.
+
+INTRODUCTION
+
+ This package was originally based on the CMU 2.1.2.1 snmp code. It
+ has been greatly modified, restructured, enhanced and fixed. It
+ hardly looks the same as anything that CMU has ever released. It
+ was renamed from cmu-snmp to ucd-snmp in 1995 and later renamed from
+ ucd-snmp to net-snmp in November 2000.
+
+ This README file serves as a starting place to learn about the
+ package, but very little of the documentation is contained within
+ this file. The FAQ is an excellent place to start as well.
+ Additionally, there are a bunch of README files for specific
+ architectures and specific features. You might wish to look at some
+ of these other files as well.
+
+SUPPORTED ARCHITECTURES
+
+ Please see the FAQ for this information.
+
+ Please let us know if you compile it on other OS versions and it
+ works for you so we can add them to the above list.
+
+ Porting: Please! read the PORTING file.
+
+ Also note that many architecture have architecture specific README
+ files, so you should check to see if there is one appropriate to
+ your platform.
+
+AVAILABILITY
+
+ Download:
+ - http://www.net-snmp.org/download/
+ - ftp://ftp.net-snmp.org/pub/sourceforge/net-snmp/
+ Web page:
+ - http://www.net-snmp.org/
+ Project Wiki:
+ - http://www.net-snmp.org/wiki/
+ Sourceforge Project page:
+ - http://sourceforge.net/projects/net-snmp
+ Mirrors:
+ - US: ftp://ftp.freesnmp.com/mirrors/net-snmp/
+
+ The old ucd-snmp.ucdavis.edu web site and ftp server is now
+ offline and should not be accessed any longer.
+
+WEB PAGES
+
+ http://www.net-snmp.org/
+ http://sourceforge.net/projects/net-snmp
+ http://www.net-snmp.org/wiki/
+
+INSTALLATION
+
+ See the INSTALL file distributed with this package.
+
+COPYING AND COPYRIGHTS
+
+ See the COPYING file distributed with this package.
+
+FREQUENTLY ASKED QUESTIONS
+
+ See the FAQ file distributed with this package.
+ This is also available on the project Wiki at
+
+ http://www.net-snmp.org/wiki/index.php/FAQ
+
+ so that the wider Net-SNMP community can help maintain it!
+
+HELPING OUT
+
+ This is a project worked on by people around the net. We'd love
+ your help, but please read the PORTING file first. Also, subscribe
+ to the net-snmp-coders list described below and mention what you're
+ going to work on to make sure no one else is already doing so!
+ You'll also need to keep up to date with the latest code snap shot,
+ which can be obtained from CVS using the information found at
+ http://www.net-snmp.org/cvs/.
+
+ Contributions to the Net-SNMP source code in any form are greatly
+ appreciated. We expect the parties providing such contributions to
+ have the right to contribute them to the Net-SNMP project or that
+ the parties that do have the right have directed the person
+ submitting the contribution to do so. In addition, all contributors
+ need to be aware that if the contribution is accepted and
+ incorporated into the Net-SNMP project, it will be redistributed
+ under the terms of the license agreement used for the entire body of
+ work that comprises the Net-SNMP project (see the COPYING file for
+ details). If this license agreement ever changes the contribution
+ will continue to be released under any new licenses as well. Thank
+ you, in advance, for your gracious contributions.
+
+CODE UPDATE ANNOUNCEMENTS
+
+ See the NEWS file and the ChangeLog file for details on what has
+ changed between releases.
+
+ We hate broadcasting announce messages to other mailing lists and
+ newsgroups, so there is a mailing list set up to handle release
+ announcements. Any time we put new software out for ftp, we'll mail
+ this fact to net-snmp-announce@lists.sourceforge.net. See the
+ MAILING LISTS section described below to sign up for these
+ announcements.
+
+ We will post new announcements on a very infrequent basis to the
+ other channels (the other snmp mailing lists and newsgroups like
+ comp.protocols.snmp), but only for major code revisions and not for
+ bug-fix patches or small feature upgrades.
+
+MAILING LISTS
+
+ The lists:
+
+ A number of mailing lists have been created for support of the project:
+ The main ones are:
+
+ net-snmp-announce@lists.sourceforge.net -- For official announcements
+ net-snmp-users@lists.sourceforge.net -- For usage discussions
+ net-snmp-coders@lists.sourceforge.net -- For development discussions
+
+ The -coders list is intended for discussion on development of code
+ that will be shipped as part of the package. The -users list is
+ for general discussion on configuring and using the package,
+ including issues with coding user-developed applications (clients,
+ managers, MIB modules, etc).
+
+ Please do *NOT* send messages to both -users and -coders lists.
+ This is completely unnecessary, and simply serves to further
+ overload (and annoy) the core development team. If in doubt,
+ just use the -users list.
+
+
+ The other lists of possible interest are:
+
+ net-snmp-cvs@lists.sourceforge.net -- For cvs update announcements
+ net-snmp-bugs@lists.sourceforge.net -- For Bug database update announcements
+ net-snmp-patches@lists.sourceforge.net -- For Patch database update announcements
+
+ Please do NOT post messages to these lists (or to the announce list above).
+ Bug reports and Patches should be submitted via the Source Forge tracker
+ system. See the main project web pages for details.
+
+ To subscribe to any of these lists, please see:
+
+ http://www.net-snmp.org/lists/
+
+
+ Archives:
+ The archives for these mailing lists can be found by following links at
+
+ http://www.net-snmp.org/lists/
+
+AGENT EXTENSIBILITY
+
+ The agent that comes with this package is extensible through use of
+ shell scripts and other methods. See the configuration manual pages
+ (like snmpd.conf) and run the snmpconf perl script for further details.
+
+ You can also extend the agent by writing C code directly. The agent
+ is extremely modular in nature and you need only create new files,
+ re-run configure and re-compile (or link against its libraries). No
+ modification of the distributed source files are necessary. See the
+ following files for details on how to go about this:
+ http://www.net-snmp.org/tutorial-5/toolkit/,
+ agent/mibgroup/examples/*.c
+
+ Also, see the local/mib2c program and its README file for help in
+ turning a textual mib description into a C code template.
+
+ We now support AgentX for subagent extensibility. The net-snmp
+ agent can run as both a master agent and a subagent. Additionally,
+ a toolkit is provided that enables users of it to easily embed a
+ agentx client into external applications. See the tutorial at
+ http://www.net-snmp.org/tutorial-5/toolkit/ for an example of how
+ go about doing this.
+
+CONFIGURATION
+
+ See the man/snmp.conf.5 manual page.
+
+ For the agent, additionally see the man/snmpd.conf.5 manual page.
+
+ For the snmptrapd, see the man/snmptrapd.conf.5 manual page.
+
+ You can also run the snmpconf perl script to help you create some of
+ these files.
+
+SUBMITTING BUG REPORTS
+
+ Important: *Please* include what version of the net-snmp (or
+ ucd-snmp) package you are using and what architecture(s) you're
+ using, as well as detailed information about exactly what is wrong.
+
+ To submit a bug report, please use the web interface at
+ http://www.net-snmp.org/bugs/. It is a full-fledged
+ bug-tracking system that will allow you to search for already
+ existing bug reports as well as track the status of your report as
+ it is processed by the core developers.
+
+ If you intend to submit a patch as well, please read the PORTING
+ file before you do so and then submit it to
+ http://www.net-snmp.org/patches/.
+
+CLOSING
+
+ We love patches. Send some to us! But before you do, please see
+ the 'PORTING' file for information on helping us out with the
+ process of integrating your patches (regardless of whether its a new
+ feature implementation or a new port).
+
+ Also, We're interested if anyone actually uses/likes/hates/whatever
+ this package... Mail us a note and let us know what you think of it!
+
+ Have fun and may it make your life easier,
+
+ The net-snmp developers
+
+THANKS
+
+ The following people have contributed various patches and
+ improvements. To them we owe our deepest thanks (and you do too!):
+
+ Wes Hardaker <hardaker@users.sourceforge.net>
+ Steve Waldbusser <waldbusser@nextbeacon.com>
+ Dan A. Dickey <ddickey@transition.com>
+ Dave Shield <D.T.Shield@csc.liv.ac.uk>
+ Giovanni S. Marzot <gmarzot@nortelnetworks.com>
+ Niels Baggesen <recnba@mediator.uni-c.dk>
+ Simon Leinen <simon@limmat.switch.ch>
+ David T. Perkins <dperkins@dsperkins.com>
+ Mike Perik <mikep@crt.com>
+ Sanjai Narain <narain@thumper.bellcore.com>
+ francus@metsny.delphi.com
+ Gary Palmer <gpalmer@freebsd.org>
+ Marc G. Fournier <scrappy@ki.net>
+ Gary A. Hayward <gah@bellcore.com>
+ Jennifer Bray <jbray@origin-at.co.uk>
+ Philip Guenther <guenther@gac.edu>
+ Elwyn B Davies <edavies@origin-at.co.uk>
+ Simon Burge <simonb@telstra.com.au>
+ David Paul Zimmerman <dpz@apple.com>
+ Alan Batie <batie@aahz.jf.intel.com>
+ Michael Douglass <mikedoug@texas.net>
+ Ted Rule <Ted_Rule@FLEXTECH.CO.UK>
+ Craig Bevins <craigb@bitcom.net.au>
+ Arther Hyun <arthur@psi.com>
+ Cristian Estan <Cristian.Estan@net.utcluj.ro>
+ Eugene Polovnikov <eugen@rd.zgik.zaporizhzhe.ua>
+ Jakob Ellerstedt <jakob@dynarc.se>
+ Michael J. Slifcak <slif@bellsouth.net>
+ Jonas Olsson <jolsson@erv.ericsson.se>
+ James H. Young <sysjhy@gsu.edu>
+ Jeff Johnson <jbj@redhat.com>
+ Markku Laukkanen <marlaukk@stybba.ntc.nokia.com>
+ Derek Simkowiak <dereks@kd-dev.com>
+ David F. Newman <dnewman@epnet.com>
+ Nick Amato <naamato@merit.edu>
+ Mike Baer <baerm@calweb.com>
+ Patrick Lawrence <pjlawrence@ucdavis.edu>
+ Russ Mundy <mundy@tislabs.com>
+ Olafur Gudmundsson <ogud@tislabs.com>
+ David Reeder <dreeder@tislabs.com>
+ Ed Lewis <lewis@tislabs.com>
+ Bill Babson <wbabson@tislabs.com>
+ Chris Smith <csmith@platform.com>
+ Mike Michaud <mikemichaud@earthlink.net>
+ Andy Hood <ahood@westpac.com.au>
+ Robert Story <rstory@freesnmp.com>
+ Bert Driehuis <driehuis@playbeing.org>
+ Juergen Schoenwaelder <schoenw@ibr.cs.tu-bs.de>
+ Frank Strauss <strauss@ibr.cs.tu-bs.de>
+ Ragnar Kjørstad <ucd@ragnark.vestdata.no>
+ Jochen Kmietsch <jochen.kmietsch@tu-clausthal.de>
+ Jun-ichiro itojun Hagino <itojun@iijlab.net>
+ John L Villalovos <john.l.villalovos@intel.com>
+ Christoph Mammitzsch <Christoph.Mammitzsch@tu-clausthal.de>
+ Arne Oesleboe <Arne.Oesleboe@item.ntnu.no>
+ Jeff Cours <jeff@ultradns.com>
+ Karl Schilke <karl_schilke@eli.net>
+ John Naylon <jbpn@cambridgebroadband.com>
+ Ken Hornstein <kenh@cmf.nrl.navy.mil>
+ Martin Oldfield <m@mail.tc>
+ Harrie Hazewinkel <harrie@users.sourceforge.net>
+ Mark Ferlatte <ferlatte@users.sourceforge.net>
+ Marus Meissner <marcusmeissner@users.sourceforge.net>
+ Stephan Wenzer <stephanwenzel@users.sourceforge.net>
+ Ron Mevissen <ron.mevissen@eed.ericsson.se>
+ T.J. Mather <tjmather@tjmather.com>
+ Craig Setera <seterajunk@charter.net>
+ Katsuhisa ABE <abekatsu@cysols.com>
+ Axel Kittenberger <Axel.Kittenberger@maxxio.com>
+ Johannes Schmidt-Fischer <jsf@InterFace-AG.com>
+ Jeffrey Watson <nostaw@users.sourceforge.net>
+ Bruce Shaw <Bruce.Shaw@gov.ab.ca>
+ Stefan Radman <sradman@users.sourceforge.net>
+ Stephen J. Friedl <sjfriedl@users.sourceforge.net>
+ Alex Burger <alex_b@users.sourceforge.net>
+ Christophe Varoqui <ext.devoteam.varoqui@sncf.fr>
+ Srikanth Pindiproli <sripindip@users.sourceforge.net>
+ Kevin Graham <kevgraham7@users.sourceforge.net>
+ Xiaofeng Ling <xfling@users.sourceforge.net>
+ Brandon Knitter <knitterb@bl...>
+ Andrew Findlay <andrew.findlay@skills-1st.co.uk>
+ Ron Tabor <rtabor@users.sourceforge.net>
+ Peter Warasin <drg-r3@users.sourceforge.net>
+ Bob Rowlands <robert.rowlands@sun.com>
+ Peter Hicks <Peter.Hicks@POGGS.CO.UK>
+ Andy Smith <wasmith32@earthlink.net>
+ Nick Barkas <nbarkas@users.sourceforge.net>
+ Noah Friedman <friedman@prep.ai.mit.edu>
+ Geert De Peuter <geert@depeuter.org>
+ Magnus Fromreide <magfr@lysator.liu.se>
+ Marcus Meissner <marcusmeissner@users.sourceforge.net>
+ Andrew Rucker Jones <arjones@users.sourceforge.net>
+ Dai.H. <dg-f@users.sourceforge.net>
+ Thomas Anders <tanders@users.sourceforge.net>
+ Vladislav Bogdanov <slava_reg@nsys.by>
+ Peter Martin <pnmartin@users.sourceforge.net>
+ Thomas Lackey <telackey@users.sourceforge.net>
+ Joe Buehler <jbuehler@spirentcom.com>
+
+ We've probably forgotten people on this list. Let us know if you've
+ contributed code and we've left you out.
diff --git a/cleopatre/application/spidnetsnmp/README.Panasonic_AM3X.txt b/cleopatre/application/spidnetsnmp/README.Panasonic_AM3X.txt
new file mode 100644
index 0000000000..7b4676ddc6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README.Panasonic_AM3X.txt
@@ -0,0 +1,118 @@
+1. INTRODUCTION
+
+ Last revision 05/30/2003
+
+ This document describes the process to build net-snmp-5.0.8 stack for embedded linux
+ platforms based on the following Matsushita(Panasonic) processors family.
+
+ AM33,AM34
+ MN10300,MN103E0HRA
+
+ The same procedure can be followed to build the net-snmp stack for other Matsushita
+ family of processors also.
+
+2. ENVIRONMENT
+
+ Host Machine : Linux 7.1 or later ( with nfs server or samba server installed ).
+ Target Machine : Am33 Based Embedded platform.
+ Cross-compiler : GNU compiler version 3.1 for AM33/AM34/MN10300/MN103E010HRA
+ am33_2.0-linux-gnu-gcc
+ Host-Target Setup : Samba mount or NFS mount
+
+
+2. CONFIGURATION
+
+ The following configuration flags can be used to create Makefile.You can reaplce
+ some of the configuration flags according to your platform and compiler.
+
+ Perl support was NOT compiled in due to unavailability of perl support for
+ AM3X platform at this time.
+
+ The parameters passed to configure are as follows...
+ ( you can down load the script configure.am33 script )
+
+ --with-cc=am33_2.0-linux-gnu-gcc
+ --host=i686-pc-linux-gnu
+ --target=am33-linux ( Can be removed, if it stops building process )
+ --disable-dlopen
+ --disable-dlclose
+ --disable-dlerror
+ --with-endianness=little
+ --with-openssl=no
+ --with-cflags="-g -mam33 -O2 -static"
+ --oldincludedir=./usr/local
+ --prefix=./usr/local
+ --exec-prefix=./usr/local
+ --with-persistent-directory=./usr/local
+
+ These parameters passed are depending on the capabilities available for the
+ AM33/AM34 development environment at the time of build. These parameter can be
+ changed depending on the avialable capabilities and desired preferences.
+
+ You can use the below shell script directly to create Makefiles and other files.
+ This script also insttals all binaries ,libraries in usr directory in the directory
+ in which this scrip executed.
+
+# configure.am33
+#--------------------------------------------------------------------------
+./configure --with-cc=am33_2.0-linux-gnu-gcc --host=i686-pc-linux-gnu \
+--disable-dlopen --target=am33-linux --disable-dlclose --disable-dlerror \
+--with-endianness=little --with-openssl=no --with-cflags="-g -mam33 -O2 -static" \
+--oldincludedir=./usr/local --prefix=./usr/local --exec-prefix=./usr/local \
+--with-persistent-directory=./usr/local
+
+make
+make install
+#--------------------------------------------------------------------------
+
+2. INSTALLATION
+
+ Find a partition with 60 Mb available space which will be mounted on to target machine.
+ Copy or ftp the binary to this location ( copy entire usr directory tree ).
+ Copy net-snmp configuration files from host machine (.snmp directory) on to target / directory.
+ snmp configuration files can be created on host machine by running sbmpconf command. Make sure
+ that host is using snmpconf from net-snmp-5.0.8 version.
+
+ -:ON AM3X target Shell :-
+ Mount the above directory on AM3X platform either using NFS or sambs clients on target machine.
+
+ If you are running a previous version, stop the daemon
+
+ ps -ef | grep snmp
+
+ will return something like:
+
+ root 17736 1 - Jan 26 ? 0:00 /usr/local/sbin/snmpd
+
+ the PID is 17736, so you need to type
+
+ kill {PID}
+
+ in our example this would be
+
+ kill 17736.
+
+ cd /usr/local/sbin
+ ./snmpd
+
+2. TESTING
+
+ You will need to know your SNMP community. For this example, we will use "public".
+
+ snmpwalk -v 2c -m ALL -c public -t 100 localhost .1.3 > snmpwalk.txt
+ more snmpwalk.txt
+
+ This should return a considerable amount of output.
+
+3. ISSUES
+
+ You may not see correct target name in the build summary. Just ignore it.
+
+
+ Please refer net-snmp documentation for more information...
+
+
+Srinivasa Rao Gurusu
+Engineer
+Panasonic Semiconductor Development Center ( PSDC )
+gurusus@research.panasonic.com
diff --git a/cleopatre/application/spidnetsnmp/README.agent-mibs b/cleopatre/application/spidnetsnmp/README.agent-mibs
new file mode 100644
index 0000000000..8716f8d75f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README.agent-mibs
@@ -0,0 +1,437 @@
+The following is a list of SNMP MIB tables and object, and their
+implementation status for Net-SNMP.
+
+Note that simply adding a MIB file does not allow the agent to return values
+for the MIB. See the FAQ question here for details:
+
+ http://www.net-snmp.org/FAQ.html#How_do_I_add_a_MIB_to_the_agent_
+
+
+This table was generated by inspecting the source, so it may be incorrect,
+especially with regards to OS platform support. If an object/table is listed
+for your OS but doesn't work (or vice-cersa), let us know.
+
+The Rel column indicates the first release that an object/table was
+available. That does not imply that all platforms indicated in the OS
+column were supported for that release. There is no breakdown of feature
+introduction by platform. Note that the earliest CVS information I could
+find was for sometime around ucd-snmp 3.2.
+
+The OS platform is probably the least reliable of the columns, as most are
+marked as 'unix?', indicating that most unix-based platforms should
+support the table.
+
+An '=' in a file path indicates that the table/object name should be
+substituted in place of the '=' in the path. All paths are relative to
+the agent/mibgroup directory.
+
+X.*.0 indicates all scalars under node X.
+X.?.0 indicates all scalars execept as noted.
+.Y.0 indicates that Y is an exception to the previous scalar group.
+
+
+Table Style
+----------------------------
+ O old (ucd) style helper
+ D table data helper
+ I table iterator
+ A iterate_access
+ S scalar helper
+ G scalar group helper
+ W watched scalar
+ M mfd
+
+Platform Keys
+------------------
+A All systems
+U unix based
+ L Linux
+ S Solaris
+ H HP-UX
+ B BSD Based
+ F FreeBSD
+ O OpenBSD
+ N NetBSD
+ X MacOSX
+W Win32 based
+ $ Microsoft
+ C cygwi---
+ M MingW
+
+A number after a platform indicates notes at the bottom of the file.
+
+ table/object group OS Rel Styl File
+==============================================================================
+SNMPv2-MIB
+ system.*.0 A 3.2 O mibII/system_mib.c
+ sysORTable A 3.4 O mibII/sysORTable.c
+ snmp.*.0 A 3.2 O mibII/snmp_mib.c
+ setSerialNo.0 A 5.0 W mibII/setSerialNo.c
+
+------------------------------------------------------------------------------
+SNMP-FRAMEWORK-MIB
+ snmpEngine.*.0 A ~4.0? O snmpv3/snmpEngine.c
+
+------------------------------------------------------------------------------
+SNMP-MPD-MIB
+ snmpMPDStats.*.0 A ~4.0? O snmpv3/snmpMPDStats.c
+
+------------------------------------------------------------------------------
+SNMP-TARGET-MIB
+ snmpTargetSpinLock.0 A 3.6 O target/snmpTargetAddrEntry.c
+ snmpTargetAddrTable A 3.6 O target/snmpTargetAddrEntry.c
+ snmpTargetParamsTable A 3.6 O target/snmpTargetParamsEntry.c
+ snmpUnavailableContexts.0 A 5.0 O target/target_counters.c
+ snmpUnknownContexts.0 A 5.0 O target/target_counters.c
+
+------------------------------------------------------------------------------
+SNMP-NOTIFICATION-MIB
+ snmpNotifyTable A 4.2 O notification/=
+ snmpNotifyFilterProfileTable A 4.2 O notification/=
+ snmpNotifyFilterTable A 4.2 O notification/=
+ nlmConfig.*.0 ---
+ nlmStats.*.0 ---
+
+------------------------------------------------------------------------------
+NOTIFICATION-LOG-MIB
+ * ---
+
+------------------------------------------------------------------------------
+SNMP-PROXY-MIB
+ snmpProxyTable ---
+
+------------------------------------------------------------------------------
+SNMP-USER-BASED-SM-MIB
+ usmStats.*.0 A ~4.0 O snmpv3/usmStats.c
+ usmUserTable A ~4.0? O snmpv3/usmUser.c
+
+------------------------------------------------------------------------------
+SNMP-VIEW-BASED-ACM-MIB
+ vacmContextTable A ~3.5 I mibII/vacm_context.c
+ vacmSecurityToGroupTable A ~3.5 O
+ vacmAccessContextTable A ~3.5 O mibII/vacm_vars.c
+ vacmViewSpinLock.0 A ~3.5 O
+ vacmViewTreeFamilyTable A ~3.5 O
+
+------------------------------------------------------------------------------
+SNMP-USM-DH-OBJECTS-MIB
+ usmDHPublicObjects.*.0 A 5.2 S snmp-usm-dh-objects-mib/=/*
+ usmDHUserKeyTable A 5.2 M snmp-usm-dh-objects-mib/=/*
+ usmDHKickstartTable ---
+
+------------------------------------------------------------------------------
+SNMP-COMMUNITY-MIB
+ snmpCommunityMIBObjects.*.0 ---
+ snmpCommunityTable ---
+ snmpTargetAddrExtTable ---
+
+------------------------------------------------------------------------------
+IF-MIB
+ ifNumber.0 U $2 ~3.2 O mibII/interfaces.c
+ ifTableLastChange.0 ---
+ ifTable (old) U $2 ~3.5 O mibII/interfaces.c
+ ifTable (new) L 5.2 M if-mib/ifTable/*
+ ifTable (new) FOS 5.4 M if-mib/ifTable/*
+ ifXTable L 5.2 M if-mib/ifXTable/*
+ ifXTable FOS 5.4 M if-mib/ifXTable/*
+ ifStackLastChange.0 ---
+ ifStackTable ---
+ ifTestTable ---
+ ifRcvAddressTable ---
+
+------------------------------------------------------------------------------
+RFC1213-MIB
+ atTable (D) U $2 ~3.5 O mibII/at.c
+ egp.*.0 ---
+ egpNeighTable ---
+
+------------------------------------------------------------------------------
+IP-MIB
+ ip.*.0 U $2 ~3.2 G mibII/ip.c
+ icmp.*.0 U $2 ~3.2 G mibII/icmp.c
+
+ ipSystemStatsTable L 5.2 M ip-mib/=/*
+ ipIfStatsTableLastChange.0 ---
+ ipIfStatsTable ---
+
+ ipAddrTable (D) U $2 4.2 O mibII/ipAddr.c
+ ipAddressSpinLock.0 ---
+ ipAddressTable L 5.2 M ip-mib/=/*
+ ipAddressPrefixTable L 5.3 M ip-mib/=/*
+
+ ipRouteTable (D) U $2 ~3.5 O mibII/*route*.c
+ ipNetToMediaTable (D) U $2 ~3.5 O mibII/at.c
+ ipNetToPhysicalTable (implemented as inetNetToMediaTable)
+ inetNetToMediaTable L 5.2 M ip-mib/=/*
+ ipDefaultRouterTable ---
+
+ icmpStatsTable ---
+ icmpMsgStatsTable ---
+
+ ipv4InterfaceTableLastChange ---
+ ipv4InterfaceTable L 5.3 M ip-mib/=/*
+
+ ipv6InterfaceTableLastChange ---
+ ipv6InterfaceTable L 5.3 M ip-mib/=/*
+ ipv6RouterAdvertTable ---
+ ipv6IpForwarding.0 L 5.3 S ip-mib/ip_scalars.c
+ ipv6IpDefaultHopLimit.0 L 5.3 S ip-mib/ip_scalars.c
+ ipv6RouterAdvertSpinLock.0 ---
+ ipv6ScopeZoneIndexTable ---
+
+------------------------------------------------------------------------------
+IPV6-MIB
+ ipv6MIBObjects.?.0 U 4.1 O mibII/ipv6.c
+ .ipv6IfTableLastChange.0 ---
+ .ipv6RouteNumber.0 ---
+ .ipv6DiscardedRoutes.0 ---
+ ipv6Interfaces U1 4.1 O mibII/ipv6.c
+ ipv6IfTable U1 4.1 O mibII/ipv6.c
+ ipv6IfStatsTable U1 4.1 O mibII/ipv6.c
+ ipv6AddrPrefixTable ---
+ ipv6AddrTable ---
+ ipv6RouteTable ---
+ ipv6NetToMediaTable ---
+
+------------------------------------------------------------------------------
+IPV6-TCP-MIB
+ ipv6TcpConnTable U1 4.1 O mibII/ipv6.c
+
+------------------------------------------------------------------------------
+IPV6-UDP-MIB
+ ipv6UdpTable U1 4.1 O mibII/ipv6.c
+
+------------------------------------------------------------------------------
+IPV6-ICMP-MIB
+ ipv6IfIcmpTable U1 4.1 O mibII/ipv6.c
+
+------------------------------------------------------------------------------
+IP-FORWARD-MIB
+ ipForward.*.0 ---
+ ipForwardTable (D) ---
+ ipCidrRouteTable (D)(new) L 5.2 A mibII/=
+ ipCidrRouteTable (D)(newer) L 5.2 M ip-forward-mib/=/*
+ inetCidrRouteTable L 5.2 M ip-forward-mib/=/*
+
+------------------------------------------------------------------------------
+TCP-MIB
+ tcp.*.0 U $2 ~3.2 G mibII/tcp.c
+ tcpConnTable (D) U $2 4.2 I mibII/tcpTable.c
+ tcpConnectionTable L 5.3 M tcp-mib/=/*
+ tcpConnectionTable S 5.4 M tcp-mib/=/*
+ tcpListenerTable L 5.3 M tcp-mib/=/*
+ tcpListenerTable S 5.4 M tcp-mib/=/*
+
+------------------------------------------------------------------------------
+UDP-MIB
+ udpEndpointTable L 5.3 M udp-mib/=/*
+ udpEndpointTable S 5.4 M udp-mib/=/*
+ udp.*.0 U $2 ~3.2 G mibII/udp.c
+ udpTable (D) U $2 4.2 I mibII/udpTable.c
+
+------------------------------------------------------------------------------
+IF-INVERTED-STACK-MIB
+ * ---
+
+------------------------------------------------------------------------------
+RMON-MIB
+ etherStatsTable U 5.0 O Rmon/statistics.c
+ etherHistoryControlTable U 5.0 O Rmon/history.c
+ etherHistoryTable U 5.0 O Rmon/history.c
+ alarmTable U 3.2 O Rmon/alarm.c
+ eventTable U 3.2 O Rmon/event.c
+ logTable U 5.0 O Rmon/event.c
+ hostControlTable ---
+ hostTable ---
+ hostTimeTable ---
+ hostTopNControlTable ---
+ hostTopNTable ---
+ matrixControlTable ---
+ matrixSDTable ---
+ matrixDSTable ---
+ filterTable ---
+ channelTable ---
+ bufferControlTable ---
+ captureBufferTable ---
+
+------------------------------------------------------------------------------
+HOST-RESOURCES-MIB
+ hrSystem.*.0 U ~3.3 O host/hr_system.c
+ hrMemorySize U ~3.3 O host/hr_storage.c
+ hrStorageTable U ~3.3 O host/hr_storage.c
+ hrDeviceTable U ~3.3 O host/hr_device.c
+ hrProcessorTable U ~3.3 O host/hr_proc.c
+ hrNetworkTable U ~3.3 O host/hr_network.c
+ hrPrinterTable U ~3.3 O host/hr_print.c
+ hrDiskStorageTable U ~3.3 O host/hr_disk.c
+ hrPartitionTable U ~3.3 O host/hr_partition.c
+ hrFSTable U ~3.3 O host/hr_filesys.c
+ hrSWOSIndex.0 --- ~3.3 O host/hr_swrun.c
+ hrSWRunTable U ~3.3 O host/hr_swrun.c
+ hrSWRunPerfTable U ~3.3 O host/hr_swrun.c
+ hrSWInstalled.*.0 U ~3.3 O host/hr_swinst.c
+ hrSWInstalledTable U ~3.3 O host/hr_swinst.c
+
+------------------------------------------------------------------------------
+DISMAN-EVENT-MIB
+ mteTriggerTable A 5.0 O disman/=
+ mteTriggerFailures.0 ---
+ mteTriggerDeltaTable A 5.0 O disman/=
+ mteTriggerExistenceTable A 5.0 O disman/=
+ mteTriggerBooleanTable A 5.0 O disman/=
+ mteTriggerThresholdTable A 5.0 O disman/=
+ mteObjectsTable A 5.0 O disman/=
+ mteEventTable A 5.0.7 D disman/=
+ mteEventFailures.0 ---
+ mteEventNotificationTable A 5.0.7 D disman/=
+ mteResource.*.0 ---
+ mteEventSetTabel ---
+
+------------------------------------------------------------------------------
+DISMAN-SCHEDULE-MIB
+ schedLocalTime.0 A 5.3 D disman/schedule/=
+ schedTable A 5.3 D disman/schedule/=
+
+------------------------------------------------------------------------------
+DISMAN-EXPRESSION-MIB (expired ID)
+ expErrorTable U 5.2 O disman/expression/=
+ expExpressionTable U 5.2 O disman/expression/=
+ expObjectTable U 5.2 O disman/expression/=
+ expValueTable U 5.2 O disman/expression/=
+
+------------------------------------------------------------------------------
+DISMAN-PING-MIB (draft-ietf-disman-remops-mib-v2*)
+ pingCtlTable U 5.2 O disman/ping/=
+ pingProbeHistoryTable U 5.2 O disman/ping/=
+ pingResultsTable U 5.2 O disman/ping/=
+
+------------------------------------------------------------------------------
+DISMAN-TRACEROUTE-MIB (draft-ietf-disman-remops-mib-v2*)
+ traceRouteCtlTable U 5.2 O disman/traceroute/=
+ traceRouteHopsTable U 5.2 O disman/traceroute/=
+ traceRouteProbeHistory U 5.2 O disman/traceroute/=
+ traceRouteResultsTable U 5.2 O disman/traceroute/=
+
+------------------------------------------------------------------------------
+DISMAN-NSLOOKUP-MIB (draft-ietf-disman-remops-mib-v2*)
+ lookupCtlTable U 5.2 O disman/nslookup/=
+ lookupResultsTable U 5.2 O disman/nslookup/=
+
+------------------------------------------------------------------------------
+DISMAN-SCRIPT-MIB
+ * ---
+
+------------------------------------------------------------------------------
+EtherLike-MIB
+ * ---
+
+------------------------------------------------------------------------------
+AGENTX-MIB
+ * ---
+
+------------------------------------------------------------------------------
+LM-SENSORS-MIB
+ lmTempSensorsTable LS 5.0 O ucd-snmp/lmSensors.c
+ lmFanSensorsTable LS 5.0 O ucd-snmp/lmSensors.c
+ lmVoltSensorsTable LS 5.0 O ucd-snmp/lmSensors.c
+ lmMiscSensorsTable LS 5.0 O ucd-snmp/lmSensors.c
+
+------------------------------------------------------------------------------
+UCD-SNMP-MIB
+ prTable U $ ~3.2 O ucd-snmp/proc.c
+ memory.*.0 U ~3.2 O ucd-snmp/memory*.c
+ extTable U $ ~3.2 D ucd-snmp/extensible.c
+ dskTable U 3.2 O ucd-snmp/disk.c
+ fileTable A 3.6 O ucd-snmp/file.c
+ laTable U $ ~3.2 O ucd-snmp/loadave.c
+ systemStats.*.0 U 3.4 O ucd-snmp/vmstat*.c
+ ipFwAccTable U 3.5 O misc/ipfwacc.c
+ dlModTable U 4.2 O ucd-snmp/dlmod.c
+ diskIOTable U 4.1 O ucd-snmp/diskio.c
+ ucdDemoMIBObjects A ~3.5 O examples/ucdDemoPublic.c
+ logMatch U ~3.5 O ucd-snmp/logmatch.c
+ version.*.0 A ~3.2 O ucd-snmp/versioninfo.c
+ snmperrs.*.0 A ~3.5 O ucd-snmp/errormib.c
+ mrTable (D) ---
+
+------------------------------------------------------------------------------
+NET-SNMP-EXTEND-MIB
+ nsExtendConfigTable U ~3.5 D agent/extend.c
+ nsExtendOutput1Table U ~3.5 D agent/extend.c
+ nsExtentOutput2Table U ~3.5 D agent/extend.c
+
+------------------------------------------------------------------------------
+NET-SNMP-AGENT-MIB
+ nsModuleTable A 5.0 I agent/nsModuleTable.c
+ nsCacheTable A 5.0 I agent/nsCache.c
+ nsConfigDebug.*.0 A 5.0 I agent/nsDebug.c
+ nsDebugTokenTable A 5.0 O
+ nsConfigLogging A 5.0 I agent/nsLogging.c
+ nsLoggingTable A 5.0 O
+ nsTransactionTable A 5.0 I agent/nsTransactionTable.c
+ netSnmpExampleScalars A 5.0 O
+ netSnmpIETFWGTable A 5.0 D examples/data_set.c
+ netSnmpHostsTable A 5.0 A examples/=*
+ nstAgentModules A 5.0 O
+
+------------------------------------------------------------------------------
+NET-SNMP-VACM-MIB
+ nsVacmAccessTable A 5.4 I agent/nsVacmAccessTable.c
+
+------------------------------------------------------------------------------
+MTA-MIB
+ mtaTable U 4.2 O mibII/mta_sendmail.c
+ mtaGroupTable U 4.2 O mibII/mta_sendmail.c
+
+------------------------------------------------------------------------------
+SMUX-MIB
+ smuxPeerTable ---
+ smuxTreeTable ---
+
+------------------------------------------------------------------------------
+BGP4-MIB (draft-ietf-idr-bgp4-mib)
+ bgpPeerTable A 3.5 O smux/snmp_bgp.c
+
+------------------------------------------------------------------------------
+OSPF-MIB (draft-ietf-ospf-mib-update)
+ * A 3.5 O smux/snmp_ospf.c
+
+------------------------------------------------------------------------------
+RIPv2-MIB
+ * A 3.5 O smux/snmp_rip2.c
+
+------------------------------------------------------------------------------
+TUNNEL-MIB
+ tunnelIfTable L 4.2 O tunnel/tunnel.c
+ tunnelConfigTable L 4.2 O tunnel/tunnel.c
+ tunnelInetConfigTable ---
+
+------------------------------------------------------------------------------
+SCTP-MIB
+ sctpStats L 5.4.2 S sctp-mib/sctpScalars*
+ sctpParameters L 5.4.2 S sctp-mib/sctpScalars*
+ sctpAssocTable L 5.4.2 C sctp-mib/=
+ sctpAssocLocalAddrTable L 5.4.2 C sctp-mib/=
+ sctpAssocRemAddrTable L 5.4.2 C sctp-mib/=
+ sctpLookupLocalPortTable L 5.4.2 C sctp-mib/=
+ sctpLookupRemPortTable L 5.4.2 C sctp-mib/=
+ sctpLookupRemHostNameTable L 5.4.2 C sctp-mib/=
+ sctpLookupRemPrimIPAddrTable L 5.4.2 C sctp-mib/=
+ sctpLookupRemIPAddrTable L 5.4.2 C sctp-mib/=
+
+==============================================================================
+
+Misc notes
+----------
+ 1: available for systems using KAME ipv6
+ 2: with platform SDK. See README.win32
+
+Other feature info
+------------------
+ smux 3.2
+ AgentX 4.0
+ proxy support 4.2
+ override token 5.0
+ proper context support 5.2
+ DISMAN-EVENT-MIB implementation rewrite 5.3
+ AgentX, host, disman/event by default 5.3
diff --git a/cleopatre/application/spidnetsnmp/README.agentx b/cleopatre/application/spidnetsnmp/README.agentx
new file mode 100644
index 0000000000..b88d5535a1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README.agentx
@@ -0,0 +1,47 @@
+ Net-SNMP contains a reasonably full implementation of the AgentX agent
+extensibility protocol (RFC 2741) in as much as it supports all
+the protocol operations described in this document. The core
+functionality has received a reasonable amount of exposure, and
+is believed to be more or less stable in normal use. It will
+also handle the non-graceful termination of subagents - returning
+a 'genErr' error for three successive requests before unregistering
+the unresponsive subagent.
+
+ A subagent will attempts to re-establish contact with a dead and
+resurrected master based on the agentxPingInterval setting. The default
+for this configuration variable is 15 seconds. It can be changed by
+putting the following line in your APPLICATION.conf file:
+
+ agentxPingInterval 60
+
+will make the subagent try to ping the master every 60 seconds, and if
+the connection is deemed broken it'll try and reconnect to the master
+agent after that point (once every 60 seconds).
+
+ Similarly, a subagent will not be able to re-register in place of a
+defunct colleague until the master agent has received three requests
+for the dead connection (and hence unregistered it).
+
+ Some of the less frequently used features (index allocation,
+range registration, etc), have received less thorough testing,
+and may well not be fully functional. Some of the omissions
+of the earlier release (use of GetBulk, the AgentX MIB)
+are still missing from this version.
+
+ AgentX support is now included in the agent by default, but needs
+to be explicitly enabled before use. Activate it using by putting a line
+
+ master agentx
+
+in the snmpd.conf file. This support is also enabled automatically
+when the '-x' flag is given (to specify a different master AgentX socket),
+or when the agent is invoked as an AgentX subagent (i.e. via the name
+'agentxd' or with the '-X' flag).
+
+ See the main project web page for an examples of a simple stand-alone
+subagent. (http://www.net-snmp.org/tutorial/tutorial-5/toolkit/)
+
+
+ Please report any problems experienced to the net-snmp-coders list.
+
+Dave
diff --git a/cleopatre/application/spidnetsnmp/README.aix b/cleopatre/application/spidnetsnmp/README.aix
new file mode 100644
index 0000000000..16f725e884
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README.aix
@@ -0,0 +1,80 @@
+Some notes for the AIX port
+===========================
+
+1. Known problems
+-----------------
+
+There are the following known problems on AIX:
+
+
+1) Shared libraries / embedded perl
+
+Up to (and including) net-snmp 5.4, configure forced a static build
+on AIX which caused embedded Perl to be disabled as well.
+
+Starting with net-snmp 5.4.1, we build shared libraries by default on AIX
+(like on any other platform) using run-time linking. configure forces the
+use of the required "-brtl" linker flag. We also recommend
+
+ ./configure --enable-as-needed ...
+
+for proper libperl linking.
+
+2) "grep: capacity exceeded" or "sed: Command line is too long" during configure
+
+The version of "grep" shipped with AIX versions up to (and including) 5.1
+has a known limitation of only supporting a maximum of 2048 characters per line.
+This may cause a significant number of "grep: capacity exceeded" errors during
+configure which breaks the build. See bug 1367794 for details. The fix is to
+either install GNU grep (and have it in PATH before the AIX grep) or to upgrade
+to AIX 5.2 or later.
+
+There's a similar issue with AIX /usr/bin/sed up to at least AIX 5.3 that
+causes a significant number of "sed: Command line is too long." errors during
+configure. The fix is to install GNU sed.
+
+3) nlist errors with 64-bit kernels
+
+Accessing certain MIB objects on AIX 5.x machines running a 64-bit kernel will
+trigger nlist/klookup errors. Starting from net-snmp 5.4, you can avoid those
+by using
+
+ ./configure --without-kmem-usage ...
+
+
+4) IPv6
+
+Starting with net-snmp 5.4 you can enable the UDPIPv6 and TCPIPv6 transports
+on AIX 5.x:
+
+ ./configure --enable-ipv6
+
+There's no support for the IPv6 MIBs, though.
+
+5) Compiler for Perl
+
+In general, Perl modules need to be compiled with the same compiler and
+compiler options as Perl itself. configure detects some mismatches (gcc vs.
+vendor compiler), but treats different incarnations of the same compiler type
+as similar. If your version of Perl (e.g. the one supplied by IBM for AIX 5.x)
+has been compiled with cc_r on AIX, please make sure you also use CC=cc_r when
+building net-snmp. Building with xlc in this case is known to fail (see bug
+#1600099).
+
+
+2. Patches
+----------
+
+You may want to have a look for existing AIX patches in our patches tracker
+(http://www.net-snmp.org/patches/). If you can offer patches yourself to
+improve the AIX support, please submit them there.
+
+
+3. Feedback
+-----------
+
+Please also see README and PORTING.
+
+If you have questions, additional insights or (even better) patches regarding
+net-snmp on AIX, please refer to the net-snmp mailing lists (see
+http://www.net-snmp.org/lists).
diff --git a/cleopatre/application/spidnetsnmp/README.hpux11 b/cleopatre/application/spidnetsnmp/README.hpux11
new file mode 100644
index 0000000000..dd575f0297
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README.hpux11
@@ -0,0 +1,22 @@
+Some notes for the HP-UX 11.0/11i port
+======================================
+
+1. Starting the net-snmp daemon via rc script
+---------------------------------------------
+
+When starting the net-snmp daemon via rc script you have to trap some signals
+because otherwise the daemon will die the moment the rc script ends. I trap
+the signals 1, 2 and 3 via "trap '' 1 2 3" immediately before starting the
+daemon. I didn't check whether all these signals need to be trapped, probably
+SIGHUP will suffice. BTW this applies to the HP-UX 10.x version as well. It
+would be a good idea to ignore or handle these signals in the daemon...
+
+2. Author, credits, comments
+----------------------------
+
+The HP-UX 11.0 port was done by Johannes Schmidt-Fischer <jsf@InterFace-AG.com>
+
+If you have questions or problems please feel free to contact me via the
+above mentioned e-mail address. Please send a copy of your e-mail to the
+net-snmp-coders mailing list - probably someone else can answer your
+question earlier than me;-)
diff --git a/cleopatre/application/spidnetsnmp/README.irix b/cleopatre/application/spidnetsnmp/README.irix
new file mode 100644
index 0000000000..79bf7ec13d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README.irix
@@ -0,0 +1,66 @@
+Some notes for the IRIX port
+============================
+
+1. Compiling
+------------
+
+net-snmp 5.3.1 and later have been compiled successfully on IRIX 6.5 using the
+MIPSpro C compiler 7.4.4m in C99 mode:
+
+ CC=c99 ./configure && make && make install
+
+Please note that the "host" module doesn't compile on IRIX, so you *cannot*
+configure with "--with-mib-modules=host".
+
+Compiling with gcc may be possible, but is unsupported at this point in time
+due to difficulties with the IRIX system headers. Brent Bice has reported
+a successful build of net-snmp 5.4 with gcc 3.4.6 on a IP30 machine using:
+
+ CFLAGS="-D_PAGESZ=16384 -D_MIPS3_ADDRSPACE -DIP30 -DR10000 -DMP \
+ -DCELL_PREPARE -DBHV_PREPARE" ./configure ...
+
+See http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi/0620/bks/\
+SGI_Developer/books/DevDriver_PG/sgi_html/ch10.html and
+/var/sysgen/Makefile.kernio .
+
+2. CPU stats
+------------
+
+net-snmp 5.4.1 and later reports CPU statistics on IRIX 6.x by default using
+the hardware/cpu/cpu_sysinfo module. There's also an alternative implementation:
+hardware/cpu/cpu_pcp. For full discussion and build instructions for cpu_pcp
+see Patch #1675869:
+
+ http://sf.net/support/tracker.php?aid=1675869
+
+
+3. Perl
+-------
+
+When compiling with Perl support, it's recommended to specify
+
+ ./configure --enable-as-needed
+
+for proper libperl linking.
+
+
+4. Known Issues
+---------------
+
+Accessing certain MIB objects on IRIX64 machines (i.e. when running a 64-bit
+kernel will trigger nlist/klookup errors. The agent will not return proper
+values for the affected MIB objects (e.g. tcpConnTable, udpTable).
+Starting from net-snmp 5.4, you can avoid nlist altogether (recommended for
+IRIX64) by using
+
+ ./configure --without-kmem-usage ...
+
+
+5. Feedback
+-----------
+
+Please also see README and PORTING.
+
+If you have questions, additional insights or (even better) patches regarding
+net-snmp on IRIX, please refer to the net-snmp mailing lists (see
+http://www.net-snmp.org/lists).
diff --git a/cleopatre/application/spidnetsnmp/README.krb5 b/cleopatre/application/spidnetsnmp/README.krb5
new file mode 100644
index 0000000000..87025f0078
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README.krb5
@@ -0,0 +1,165 @@
+This version of net-snmp supports an experimental SNMPv3 security model
+using Kerberos 5 for authentication. The protocol is described in an
+up-and-coming IETF Internet-Draft.
+
+This document describes a brief overview of the Kerberos Security Model
+and how to use it.
+
+DESCRIPTION:
+
+The Kerberos Security Model does not use USM; it is completely seperate
+and is not tied to USM in any way. It works by placing the following
+ASN.1 sequence inside of the SNMPv3 msgSecurityParameters:
+
+ksmSecurityParameters ::= SEQUENCE {
+-- The Kerberos 5 checksum type used to checksum this message
+ ksmChecksumType INTEGER(0..2147483647),
+-- The actual keyed checksum data returned by Kerberos
+ ksmChecksum OCTET STRING,
+-- The Kerberos 5 message (either an AP_REQ or AP_REP)
+ ksmKerberosMsg OCTET STRING,
+-- The cached ticket identifier
+ ksmCachedTicket INTEGER(0..2147483647)
+}
+
+Note that the whole SEQUENCE is BER encoded as an OCTET STRING.
+
+ksmChecksumType is an integer which corresponded to the checksum algorithm
+used to secure this message as defined by Kerberos (see section 8.3 of
+RFC1510).
+
+ksmChecksum is the output of the checksum algoritm defined by ksmChecksumtype
+(with all NULs in the space for the checksum).
+
+ksmKerberosMsg is a Kerberos 5 AP_REQ or AP_REP message, depending on
+whether or not it is a request or a response (AP_REQ for requests, AP_REP
+for responses).
+
+ksmCachedTicket is a integer which uniquely identifies a ticked already
+cached on the agent to save the overhead of transferring a whole AP_REQ/AP_REP.
+If there is no such cached ticket, it is left at zero.
+
+An agent, upon receiving a message using the KSM, will decode the AP_REQ
+contained within the security parameters and thus validate the client's
+identity. Using the subkey contained within the AP_REQ, the agent will
+validate the checksum (after first clearing the checksum bytes to zero),
+and issue a response, encoding the appropriate AP_REP message in the
+ksmSecurityParameters.
+
+If the securityLevel of the message is set to AuthPriv, the scopedPdu
+payload will be encrypted using the encryption key and algorithm of the
+AP_REQ subkey. Note that in this case, the msgData will be a BER-encoded
+OCTET STRING corresponding to the "cipher" element of the EncryptedData
+sequence defined in RFC 1510, section 6.1.
+
+Since this security model is experimental, the number assigned to this
+security model is taken from the recommendations of RFC 2271, section 5,
+which specify enterprise-specific Security Models of the form:
+
+ SnmpSecurityModel = enterpriseID * 256 + security model number
+ in that enterprise ID;
+
+In the case of KSM this gives us:
+
+ SnmpSecurityModel = 8072 * 256 + 0 = 2066432
+
+
+USAGE:
+
+To actually USE the Kerberos Security Model, do the following:
+
+0) Install Kerberos
+
+ Let it be stated up front - Installing Kerberos completely "cold", without
+ any Kerberos experience at all, can be daunting (to say the least). If you
+ already have a Kerberos infrastructure at your site, then all of the hard
+ work has been done. If you do NOT, but you still want to tackle it,
+ you might be interested in the Kerberos FAQ, which can be found at:
+
+ http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html
+
+ Currently the code in net-snmp only supports using MIT Kerberos
+ libraries to link against (you should be able to use any kind of Kerberos
+ server, however).
+
+1) Compile net-snmp with Kerberos.
+
+ This assumes that you already have Kerberos libraries in place.
+
+ Configure net-snmp to include the Kerberos Security Model (ksm) and
+ use --with-cflags and --with-ldflags to specify the location and names
+ of Kerberos header files and libraries. For example, on my system I
+ run:
+
+ ./configure --with-cflags='-I/usr/krb5/include' \
+ --with-ldflags='-L/usr/krb5/lib -lkrb5 -lcrypto -lcom_err -R/usr/krb5/lib'
+
+ Note that this is on Solaris, and that -R is required to set the correct
+ shared library path. If you have a newer version of Kerberos, you might
+ instead have to use:
+
+ -lkrb5 -lk5crypto -lcom_err
+
+ as the libraries to link against. If you get errors (for example, you
+ get a message that says the compiler isn't working) you can check
+ config.log for the output of the compiler.
+
+2) Configure Kerberos and SNMP
+
+ Currently, net-snmp uses the "host" principal assigned to a host. This
+ may change in the future. You will want to create host principals of
+ the form:
+
+ host/f.q.d.n@YOUR.REALM
+
+ For example:
+
+ host/mydesktop.example.org@EXAMPLE.ORG
+
+ and place the encryption keys for these principals on every machine you
+ wish to run a SNMP agent (you place each key on it's corresponding machine).
+ Your Kerberos documentation should explain how to do this (in the case
+ of MIT Kerberos, you want to look at the "ktadd" command inside of
+ kadmin).
+
+ If you have a Kerberos infrastructure, you likely already have these
+ principals in place on your systems.
+
+ If you're installing Kerberos for the first time as well, you also
+ need to create client principals corresponding to your userid. See
+ your Kerberos documentation.
+
+ On the SNMP _agent_ side, you'll want to place in your snmpd.conf file
+ (the one that lives in /usr/local/share/snmp/snmpd.conf, or whereever
+ you have configured on your system):
+
+ rwuser -s ksm userid@YOUR.REALM
+
+ to allow the Kerberos principal 'userid@YOUR.REALM' read/write access to
+ the MIB tree.
+
+3) Run the agent and client applications
+
+ Note that before you do any of this, you will have to have valid Kerberos
+ credentials (generally acquired with the "kinit" program).
+
+ The agent should run without any additional flags.
+
+ You should run the client apps with the following flags:
+
+ -Y defSecurityModel=ksm
+ -v 3
+ -u username
+ -l authNoPriv
+
+ for example:
+
+ snmpget -v 3 -Y defSecurityModel=ksm -u myname -l authNoPriv testhost \
+ system.sysDescr.0
+
+ If you wish to encrypt the payload, change the -l argument to "authPriv".
+
+ If you run into problems, you can add the -Dksm flag to both the manager
+ applications and the agent to get more detailed Kerberos error messages.
+ Note that this setup assumes a working Kerberos infrastructure; if you
+ run into problems, check to make sure Kerberos is working for you.
diff --git a/cleopatre/application/spidnetsnmp/README.osX b/cleopatre/application/spidnetsnmp/README.osX
new file mode 100644
index 0000000000..82bd0d50d7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README.osX
@@ -0,0 +1,83 @@
+README.osX
+$Id: README.osX 16992 2008-06-03 09:37:46Z dts12 $
+
+This is what I had to do to get it to work for me. Your mileage may vary.
+If this doesn't work for you, or you have fixes for any problems listed,
+please post to <net-snmp-coders@lists.sourceforge.net>. Thanks!
+
+ - ALL
+
+ - Test 44 (Perl AgentX Subagent) fails.
+
+ - configure with --enable-as-needed for proper libperl linking
+
+ - nlist doesn't support icmpstat
+
+ - disable the icmp module during configure by specifying
+ "--with-out-mib-modules=mibII/icmp", or at startup by adding
+ "-I -icmp" to the snmpd command line.
+
+
+ - 10.4.7 (Universal) and Leopard with 5.4 sources:
+ [Supplied by Chris Jalbert, slightly updated]
+
+ - build using gcc 4.0 (see below) and configure using:
+ --with-persistent-directory=/var/db/net-snmp \
+ --with-defaults \
+ --without-rpm \
+ --with-mib-modules="host ucd-snmp/diskio" \
+ --with-out-mib-modules="mibII/icmp host/hr_swrun" \
+ --enable-as-needed \
+ --without-kmem-usage
+
+ The first line sets up persistent storage in the OS X standard location.
+
+ The third line is necessary because RPM is not properly disabled.
+
+ The fourth line includes those modules appear to build properly and
+ mostly work. The next line is necessary because those sub-modules
+ do not build.
+
+ The final line is necessary because /dev/kmem was removed in
+ the Intel / Universal builds of the OS, and I believe the APIs will
+ be removed in Leopard.
+ This line is the most critical for proper building on OS X.
+
+
+ - 10.3.x and earlier
+
+ - Some older versions of Apple's cpp doesn't like configure.
+
+ - run 'gcc_select' to see what version you are using, and
+ 'gcc_select -l' to list available versions. I've had success with
+ 3.3, selected by running (as root) 'gcc_select 3.3'. (Note: this was
+ on Panther, 10.3.2)
+
+ - Some older versions of net-snmp as installed by Apple contains
+ bad flags in net-snmp-config.
+
+ - build your own version, and install over Apple's version. The
+ configure flags you need for the same configuration:
+
+ configure --prefix=/usr --mandir=/usr/share/man
+ --infodir=/usr/share/info --with-libwrap --with-defaults
+ --prefix=/usr --with-persistent-directory=/var/db/ucd-snmp
+ --with-mib-modules=host
+
+-------------------------------------
+
+With Mac OS X 10.5.2, and Net-SNMP 5.4.2, the default configuration
+seems to build and run successfully. The main tweak needed to get
+things working was to disable "embedded perl" (which is active by
+default in 5.4 and above).
+
+ The issue here is that enabling embedded perl will try to use the
+same CFLAGS used for compiling perl, when compiling the Net-SNMP code
+(which is probably reasonable). Unfortunately, the default perl binary
+that comes with Mac OS/X 10.5 (at least) is a "universal binary",
+so the CFLAGS that it uses include "-arch i386 -arch ppc". This
+dual-architecture option confuses the configure script, and means
+that it cannot detect the characteristics of the host system correctly.
+
+Dave
+June 2008
diff --git a/cleopatre/application/spidnetsnmp/README.snmpv3 b/cleopatre/application/spidnetsnmp/README.snmpv3
new file mode 100644
index 0000000000..263c955112
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README.snmpv3
@@ -0,0 +1,103 @@
+README.snmpv3
+-------------
+How to setup SNMPv3, a very brief document for Dave to elaborate and
+do a better job on since I suck at writing documentation and he
+doesn't ;-) --Wes:
+
+Note: SHA authentication and DES/AES encryption support is only available
+if you have OpenSSL installed.
+
+Note: encryption support now *is* enabled in the binary releases downloadable
+from the net-snmp web site.
+
+Note: this description assumes you're using the software compiled from
+source, and so installed using the default prefix location (/usr/local).
+If you're working with a vendor-provided system, or have configured
+things with a different prefix, you'll need to adjust locations accordingly.
+
+CREATING THE FIRST USER:
+------------------------
+ First, you need to create a new snmpv3 user and give them rights to
+ do things:
+
+ net-snmp-config --create-snmpv3-user -a "my_password" myuser
+
+ WARNING: SNMPv3 pass phrases must be at least 8 characters long!
+
+ The above line creates the user "myuser" with a password of
+ "my_password" (and uses MD5 and DES for protection). (Note that
+ encryption support isn't enabled in the binary releases downloadable
+ from the net-snmp web site.) net-snmp-config will also add a line
+ to your snmpd.conf file to let that user have read/write access to
+ your agent. You may want to change this in your snmpd.conf file
+ (see the snmpd.conf manual page). Run net-snmp-config --help for
+ more information about it.
+
+ Start the agent and test your setup:
+ /usr/local/sbin/snmpd
+ [...wait a few seconds... It will run in the background and
+ return you to your shell immediately.]
+
+ snmpget -v 3 -u myuser -l authNoPriv -a MD5 -A my_password localhost sysUpTime.0
+ [ this should return information about how long your agent has been up]
+
+ snmpget -v 3 -u myuser -l authPriv -a MD5 -A my_password
+ -x DES -X my_password localhost sysUpTime.0
+ [ this should return similar information, but encrypts the transmission ]
+
+CREATING A SECOND USER:
+-----------------------
+ Start the agent (if you didn't do so above).
+
+ You can create as many users as you like using the above method, but
+ this details another way of doing it while the agent is running by
+ modifying the user database using the snmp protocol itself:
+
+ Now, lets create a second user using the first user (just for fun)
+ for both authentication purposes and as a template (or "cloning
+ source"):
+
+ snmpusm -v 3 -u myuser -l authNoPriv -a MD5 -A my_password localhost create wes myuser
+
+ The above should have created the user "wes" with the same password as
+ the "myuser" user. So then, you need to change his password using:
+
+ snmpusm -v 3 -u wes -l authNoPriv -a MD5 -A my_password localhost passwd my_password new_passphrase
+
+ See, wasn't that easy? You can now create users. Wheeee....
+
+ But, you'll have to add a configuration line that allows them access
+ to do things. Do this with another "rwuser" line in your
+ /usr/local/share/snmp/snmpd.conf file (you'll need to stop and start
+ the agent again, or send the agent a SIGHUP signal):
+
+ rwuser wes
+
+ Or, optional use the "rouser" token instead of the "rwuser" token to
+ only grant them read-only access.
+
+ Now, test your new user:
+
+ snmpget -v 3 -u wes -l authNoPriv -a MD5 -A new_passphrase localhost sysUpTime.0
+
+
+FURTHER STUDIES:
+---------------
+
+Tired of all those command line authentication options?
+----------------------------------------
+put something like this in your $HOME/.snmp/snmp.conf file (make it
+readable only by you!!!):
+
+ defSecurityName wes
+ defContext ""
+ defAuthType MD5
+ defSecurityLevel authNoPriv
+ defAuthPassphrase new_passphrase
+ defVersion 3
+
+And this is in place the last of the above example lines boils down to:
+
+ snmpget localhost sysUpTime.0
+
+Which is about as simple as I can make it for ya ;-)
diff --git a/cleopatre/application/spidnetsnmp/README.solaris b/cleopatre/application/spidnetsnmp/README.solaris
new file mode 100644
index 0000000000..c32563fa40
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README.solaris
@@ -0,0 +1,1314 @@
+README.solaris
+$Id: README.solaris 16569 2007-06-29 22:18:27Z tanders $
+
+This document describes issues relating to compiling,
+installing and using net-snmp on Solaris.
+
+0. Introduction
+1. Things you will need
+2. Disabling Sun's SNMP daemons
+3. Compiling net-snmp
+4. Obtaining and installing binaries
+5. Creating snmpd.conf and testing
+6. Creating your own binaries
+7. Using Sun's SNMP daemon and net-snmp together
+8. Monitoring disks, processes and execs (DISMAN-EVENT-MIB)
+9. Monitoring CPU temp, fan and power supply sensors (LM-SENSORS-MIB)
+10. MIB rewrites for IF-MIB, TCP-MIB and UDP-MIB
+
+Additional compilation issues:
+
+11. Files descriptors and fopen
+12. Perl
+13. sed
+14. OpenSSL and crle
+15. IPv6
+16. Wish list
+
+Other issues:
+
+17. Known Bugs!!
+18. Discussion and further information
+
+------------------------------------------------------------
+
+0. Introduction
+
+This document is a compilation of information relating to
+running net-snmp (www.net-snmp.org) on Sun SPARC and Ultra
+hardware under the Solaris operating system.
+
+This can be done either in conjunction with or as a
+replacement for Sun's SNMP daemons.
+
+This is discussed in detail in the sections below. Since
+this is the work of several authors, credit is given.
+Discussion, however, should take place on the net-snmp-users
+or net-snmp-coders mailing lists so everybody can
+benefit. See http://sourceforge.net/mail/?group_id=12694 .
+Use "net-snmp-users" for general usage questions and "net-snmp-coders" for
+discussion of net-snmp source code.
+
+No warranty is implied by this document.
+This document is copyright but usage allowed under the same
+licensing as net-snmp in general. See http://www.net-snmp.org/COPYING.txt.
+
+------------------------------------------------------------
+
+1. Things you will need
+
+A. Root access
+
+Root access is required to follow pretty much any of
+the steps below. At a bare minimum, you will need
+to be able to start and stop daemons, which requires root
+(at least for the default ports).
+
+B. Determine existing SNMP functionality
+
+SNMP uses ports 161 and 162 by default. Only one application
+can use them at a time. If there is an existing SNMP
+application (eg. Sun's snmpdx daemon) you need to either
+turn this off or work around it. You may also have
+a previous version of net-snmp, the older ucd-snmp, or
+something completely different. The following commands:
+
+ ps -ef | grep snm
+ ps -ef | grep mibi
+
+will give you a fairly good idea what is going on.
+
+If you see something like:
+
+ root 643 1 0 Jan 16 ? 5:49 /usr/local/sbin/snmpd
+
+that's probably a version of net-snmp. The instructions in various
+sections below should give you clues on what to do next.
+
+If you see something like:
+
+ root 16178 1 0 13:16:04 pts/2 0:00 /usr/lib/snmp/snmpdx -y -c /etc/snmp/conf
+
+and/or
+
+ root 21371 1 0 Feb 07 ? 0:52 mibiisa -r -p 41178
+
+then Sun's SNMP daemons are running.
+
+If you need this, for example if you use the Solstice Enterprise
+Agent, you may wish to run net-snmp as a sub-agent (see section 7).
+Otherwise, you will need to disable Sun's daemons (see section 2).
+
+Regardless you may wish to compile net-snmp from source
+and install it (see sections 3, 5 and 6) or install
+binaries (see sections 4 and 5).
+
+If some other SNMP daemon is running, you will need to determine
+where it came from and what it's being used for. You get clues by
+typing "snmpd -v" or "snmpd --help". In some cases it may be
+a subagent or agent from another application, such as ORACLE. If
+you disable its agent, you will need to re-create this functionality
+under net-snmp (eg. by running it as a sub-agent). ORACLE's SNMP
+functionality is turned on by default and may be unnecessary if
+you aren't using ORACLE's Enterprise Manager. Refer to ORACLE's
+documentation on how to disable it.
+
+
+If you have decided to compile your own net-snmp, you will need ...
+
+C. A compilation environment
+
+-a compiler (gcc or Sun's Forte cc) or the gcc libraries
+ (note, the cc in /usr/ucb is NOT a full-blown compiler)
+-OpenSSL (sunfreeware.com or source www.openssl.org)
+-zlib (sunfreeware.com or source www.gzip.org/zlib/)
+-an SNMP community string ("public" is deprecated)
+
+If you are installing on a development machine, it may be best
+to compile OpenSSL and zlib from source, otherwise
+obtain the appropriate zlib for your platform from sunfreeware
+and install (it goes to /usr/local automatically).
+Obtain the appropriate OpenSSL for your platform from sunfreeware
+and install (it goes to /usr/local), you may need the gcc libraries.
+These libraries should not need to be installed if you are using
+binaries, but your mileage may vary. Note the library problem
+with libcrypto noted below (section 14).
+
+There are two choices for compilers. Sun has a Forte development
+suite that includes a standalone C compiler. If you have it, it
+is likely installed in /opt/SUNWspro/bin.
+
+The more common choice is gcc (2.95.3 or better have been tested)
+available from sunfreeware.com. If you install gcc, you do not
+need the gcc libraries. 3.3.2 or later is recommended.
+
+Given that net-snmp is developed to work on a wide variety of
+platforms, but especially for linux, there's a better chance of
+it working using gcc at any given time. We also do regular test
+builds with Sun cc, though.
+
+ -- Bruce Shaw <Bruce.Shaw at shaw.ca>
+ -- Thomas Anders <tanders@users.sourceforge.net>
+
+------------------------------------------------------------
+
+2. Disabling Sun's SNMP daemons
+
+Note: Sun has started to include net-snmp (version 5.0.9 plus their
+patches) with Solaris 10 and later. These instructions are written
+with Solaris 9 and previous in mind.
+
+Out of the box, Sun runs four SNMP daemons: mibiisa, idmispd,
+snmpXdmid and snmpdx.
+
+These must be disabled before running net-snmp unless you are planning
+on running them together (see Section 7 below). Here is the procedure:
+
+ cd /etc/rc3.d
+ ./S76snmpdx stop
+ ./S77dmi stop
+ mv S76snmpdx s76snmpdx
+ mv S77dmi s77dmi
+
+If you are using Solstice Disksuite, you may also be running
+mdlogd. Leave this alone.
+
+You will need to create a new script to start net-snmp.
+See dist/snmpd-init.d and dist/snmptrapd-init.d for templates.
+
+ -- Bruce Shaw <Bruce.Shaw at shaw.ca>
+
+------------------------------------------------------------
+
+3. Compiling net-snmp
+
+It is strongly recommended that you compile net-snmp from source.
+That way you are guaranteed a working version for your specific
+configuration of operating system, applications and libraries.
+
+If, for some reason, you cannot compile on a specific machine,
+there are binaries available for download (see section 4).
+In addition, you may create your own binaries (see section 6).
+
+You need to set your $PATH. This is extremely important
+because otherwise there may be conflicts between the various
+components of the development environment.
+
+If you are using FORTE:
+
+PATH=/usr/bin:/usr/sbin:/usr/ccs/bin:/opt/SUNWspro/bin:/usr/local/bin:
+
+If you are using gcc (installed in /usr/local/bin):
+
+PATH=/usr/sbin:/usr/local/bin:/usr/ccs/bin:/usr/bin
+
+Obtain a current version of net-snmp (which, if you're reading this,
+presumably you have - don't you love recursion?) www.net-snmp.org/download/
+
+Uncompress it and untar it in a working directory eg. /usr/local/src/net-snmp
+
+In order to save a lot of typing, you should create a "configure"
+script eg. bcc.sh in the directory below eg. /usr/local/src.
+
+ ./configure --with-mib-modules="ucd-snmp/lmSensors ucd-snmp/diskio \
+ smux mibII/mta_sendmail" --with-cc=gcc
+
+(note, see the long discussion about Perl below)
+(note, subtitute "cc" for "gcc" as appropriate)
+(note, for LM-SENSORS-MIB support, see discussion below)
+
+then call this script from the net-snmp directory ie ../bcc.sh
+
+and answer the appropriate questions (usually with the default).
+
+When it completes, you should see something like:
+
+---------------------------------------------------------
+ Net-SNMP configuration summary:
+---------------------------------------------------------
+
+ Net-SNMP Version: 5.4
+ Building for: solaris2
+ Network transport support: Callback Unix TCP UDP
+ SNMPv3 Security Modules: usm
+ Agent MIB code: mibII ucd_snmp snmpv3mibs notification target
+ \agent_mibs agentx agent_mibs utilities host disman/event-mib
+ \ucd-snmp/diskio smux agentx mibII/mta_sendmail
+ SNMP Perl modules: disabled
+ Embedded perl support: disabled
+ Authentication support: MD5 SHA1
+ Encryption support: DES
+
+Type:
+
+ make
+
+and watch for compile errors.
+
+You will receive numerous warnings. This is normal,
+a side effect of supporting a variety of development environments.
+
+Now type:
+
+ make test
+
+and watch for failures. Also watch for the special tests for Solaris.
+
+If you are satisfied with the tests, stop any snmpd daemons
+that may be running (see section 2) and type:
+
+ make install
+
+When complete, go on to section 5 below.
+
+ -- Bruce Shaw <Bruce.Shaw at shaw.ca>
+
+------------------------------------------------------------
+
+4. Obtaining and installing binaries
+
+It is strongly recommended that you compile net-snmp from source.
+That way you are guaranteed a working version for your specific
+configuration of operating system, applications and libraries.
+
+Binaries for Solaris may be found in two locations.
+
+www.sunfreeware.com - this installs as a package.
+It does not have Perl support.
+
+Therefore, I recommend:
+
+ http://net-snmp.sourceforge.net/download/ (you will be redirected)
+
+This is the official repository for binaries.
+
+To determine which binary you need, you will need several pieces of
+information.
+
+-operating system version,
+-hardware platform
+-net-snmp version desired
+
+The first two may be obtained by typing:
+
+ uname -a
+
+It will return something like:
+
+SunOS foo 5.8 Generic_108528-14 sun4u sparc SUNW,Ultra-4
+
+5.8 means Solaris 8
+5.7 means Solaris 7 etc.
+
+"sun4u" is the Ultra hardware platform
+"sun4m" is SuperSPARC eg. Sparc 5 or Sparc 10
+"sun4d" is older SPARC boxes.
+
+You can then decode the binary version by its name eg.:
+
+net-snmp_5.0.9-SunOS_5.8_sun4u.tar.gz
+
+means "net-snmp version 5.0.9 for Solaris 8 running on Ultra
+hardware".
+
+Once you have found the appropriate version, download it to a
+distribution directory (making one if necessary) eg. /usr/local/dist
+
+Type the following: (using the sample above)
+
+ cd /
+ tar -xvf /usr/local/dist/net-snmp-5.0.9-SunOS_5.8_sun4u.tar
+
+The binaries, libraries, etc. will be installed in /usr/local.
+
+Remove the tar file to save space. Create an snmpd.conf (see below)
+or use an existing one from another machine.
+It installs in /usr/local/share/snmp.
+
+Install a startup script (see section 1).
+
+For further information, see README.solaris.binaries.x that ships
+with the binaries.
+
+--Bruce Shaw <Bruce.Shaw at shaw.ca>
+
+------------------------------------------------------------
+
+5. Creating snmpd.conf and testing
+
+When everything is installed, run:
+
+ snmpconf -g basic_setup
+
+and answer the questions appropriately. If you are using
+the defaults, place the resulting snmpd.conf file in:
+
+/usr/local/share/snmp/snmpd.conf
+
+A security note - use of the "public" community is deprecated.
+This example uses "whatever" as a community.
+
+When you have the daemon running either with the script above or running:
+
+ /usr/local/sbin/snmpd
+
+test the daemon's functionality by typing:
+
+ snmpget -v 1 -c whatever localhost sysUpTime.0
+ snmpwalk -v 2c -c whatever -m ALL localhost .1.3 | more
+
+and paging through the results.
+
+If you have problems, you can examine diagnostic messages
+by running:
+
+ /usr/local/sbin/snmpd -f -Le
+
+or use gdb (available from www.sunsolve.com) as follows:
+
+ cd /usr/local/sbin
+ gdb snmpd
+ run -f -Le
+
+and when it blows up:
+
+ bt
+
+to get the backtrace.
+
+You can use:
+
+ run -f -Le -D <modulename>
+
+to display debug messages.
+
+To display all debug messages type:
+
+ run -f -Le -D ALL
+
+but this will be extremely verbose.
+
+ -- Bruce Shaw <Bruce.Shaw at shaw.ca> with suggestions by Thushara Wickram
+
+------------------------------------------------------------
+
+6. Creating your own binaries
+
+Pick an appropriate name for a tarfile
+eg. net-snmp-5.4.custom-SunOS_5.8_sun4u.tar (see above)
+(this particular one means "a customized version of
+net-snmp 5.4 that works under Solaris 8 running on Ultra hardware")
+
+Create an empty directory such as /usr/local/dist, then do the following
+from the source directory (using the example above):
+
+ make install prefix=/usr/local/dist/usr/local \
+ exec_prefix=/usr/local/dist/usr/local
+ cd /usr/local/dist
+ tar -cvf net-snmp-5.4.custom-SunOS_5.8_sun4u.tar usr
+
+Transfer this file to the machine where you want to install from binary.
+Place it in a distribution directory eg. /usr/local/dist
+Type the following (using the example above):
+
+ cd /
+ tar -xvf /usr/local/dist/net-snmp-5.4.custom-SunOS_5.8_sun4u.tar
+
+Remove the tar file to save space. Create an snmpd.conf (see above)
+or use an existing one from another machine. If you are using
+the defaults, it installs in /usr/local/share/snmp. Install
+a startup script (see section 2).
+
+Note that if you create a binary with Perl support (see below) an
+identically configured Perl needs to be installed as well.
+
+ -- Bruce Shaw <Bruce.Shaw at shaw.ca>
+
+------------------------------------------------------------
+
+7. Using Sun's SNMP daemon and net-snmp together
+
+Net-SNMP may be used as a subagent in conjunction with Sun's snmpdx daemon.
+
+To do this, you will need to modify several files,
+all located in /etc/snmp/conf.
+
+First, do the following:
+
+ /etc/rc3.d/S76snmpdx stop (assuming you haven't done so already, and...)
+ /etc/rc3.d/S77dmi stop (...assuming you haven't renamed them)
+
+ cd /etc/snmp/conf
+ cp snmpd.conf snmpd.conf.orig
+ cp snmpdx.acl snmpdx.acl.orig
+ cp snmpdx.reg snmpdx.reg.orig
+ cp snmpdx.rsrc snmpdx.rsrc.orig
+ cp mibiisa.reg mibiisa.reg.orig
+ cp mibiisa.rsrc mibiisa.rsrc.orig
+
+modify snmpd.conf with the correct:
+
+ sysdescr
+ syscontact
+ sysLocation
+ system-group-read-community
+ read-community (in my example below I will use community "whatever")
+ trap
+ trap-community
+ managers (leave blank for all)
+
+modify snmpdx.acl with the correct:
+
+ trap-community
+ trap-recipients
+ communities
+ access
+
+Make sure that in snmpdx.reg the port is 161.
+
+You will now need to add two files - net-snmp.reg and net-snmp.rsrc
+
+In this example, "subtrees" is set for HOST-RESOURCES-MIB, and UCD-SNMP-MIB.
+Do not use net-snmp's MIB-2 information as this is already provided by
+Sun's mib and may cause a conflict.
+
+::::: net-snmp.reg ::::::
+
+# net-snmp.reg
+# mib-2 is already provided by the mibiisa process
+# that is a default sub agent of snmpdx
+# we are specifying only hostmib and ucd
+##########
+# agents #
+##########
+
+# The following 3 macros are predefined:
+#
+# mib-2 = 1.3.6.1.2.1
+# enterprise = 1.3.6.1.4.1
+# sun = 1.3.6.1.4.1.42
+#
+# You can define your own macros, so that you can
+# manipulate strings instead of OIDs in defining the agent.
+# See the "agent" section below.
+
+macros =
+{
+ host = mib-2.25
+ ucd = enterprise.2021
+}
+
+agents =
+{
+ {
+ name = "net-snmp"
+ subtrees = { host,ucd }
+ timeout = 2000000
+ watch-dog-time = 86400
+ }
+}
+
+::::::::::::::::::
+
+::::: net-snmp.rsrc ::::::
+
+# /etc/snmp/conf/net-snmp.rsrc
+
+resource =
+{
+ {
+ registration_file = "/etc/snmp/conf/net-snmp.reg"
+ policy = "spawn"
+ type = "legacy"
+ command = "/usr/local/sbin/snmpd $PORT"
+ }
+
+}
+
+::::::::::::::::::
+
+Stop any net-snmp processes that may be running.
+
+Start Sun's daemons by typing:
+
+ /etc/rc3.d/S76snmpdx start (assuming you haven't renamed it)
+ /etc/rc3.d/S77dmi start (assuming you haven't renamed it)
+
+Wait a moment for everything to stabilize, then try these two queries:
+
+ snmpget -v 1 -c whatever localhost sysDescr.0
+ snmpget -v 1 -c whatever localhost hrSystemUptime.0
+
+You should see something like:
+
+ SNMPv2-MIB::sysDescr.0 = STRING: SunOS foo 5.6 Generic_105181-30 sun4u
+
+which is Sun's daemon talking, and:
+
+ HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (78540910) 9 days, 2:10:09.10
+
+which is net-snmp talking. It is acting as a sub-agent through Sun's daemon.
+
+If Sun's daemons fail, you will need to shut down the snmpd daemons by typing:
+
+ pkill snmpd
+
+Then do the following:
+
+ /etc/rc3.d/S76snmpdx stop (assuming you haven't renamed it)
+ /etc/rc3.d/S77dmi stop (assuming you haven't renamed it)
+ /etc/rc3.d/S76snmpdx start (assuming you haven't renamed it)
+ /etc/rc3.d/S77dmi start (assuming you haven't renamed it)
+
+rather than trying to individually clobber all the various Sun daemons.
+
+This configuration appears to deal properly with snmpgets
+and handle mistakes gracefully.
+
+Beyond this, your mileage may vary.
+
+You may wish to modify the subtrees in net-snmp.reg as you find things
+that do and don't work. Remember to keep backup copies of working
+configurations.
+
+ -- Bruce Shaw <Bruce.Shaw at shaw.ca> from notes by Stefan Radman and C Wells
+
+------------------------------------------------------------
+
+8. Monitoring disks, processes and execs (DISMAN-EVENT-MIB)
+
+Important note: this section only applies to the old DISMAN-EVENT-MIB
+implementation called "disman/event-mib", *not* the current "disman/event"
+mib module which is active by default since net-snmp 5.3 and later.
+
+For a full explanation of using DISMAN-EVENT-MIB, see:
+
+http://www.net-snmp.org/man/snmpd.conf.html
+
+To use this component, net-snmp must be compiled with the option..
+
+--with-mib-modules="disman/event-mib"
+
+This discussion concerns the use of DISMAN-EVENT-MIB with Solaris.
+
+There is a bug preventing the use of some of its functionality. This
+discussion will document what is known to work and how to use it.
+
+The problem revolves around the use of monitors. The...
+
+defaultMonitors yes
+
+token will NOT work for reasons discussed below. I suspect that the
+notificationEvent tokens will not work for the same reason but this
+has not been tested. Your mileage may vary. Same with includeAllDisks.
+
+The documentation suggests using...
+
+monitor -o prNames -o prErrMessage "process table" prErrorFlag != 0
+
+to monitor all processes. This will fail with ambiguous results.
+
+To monitor processes, put a separate monitor line for each process.
+
+For example:
+######
+proc smail
+proc mdlogd
+
+monitor -r 30 -i -o prNames.1 -o prErrMessage.1 "Process smail" prErrorFlag.1 !=0
+monitor -r 30 -i -o prNames.2 -o prErrMessage.2 "Process Solstice Disksuite SNMP trap" prErrorFlag.2 !=0
+
+To monitor disks, do the same. An example:
+
+########
+# This example sends a trap if root has less than 10% available and /usr6 less t
+han 90%
+#
+disk / 10%
+disk /usr6 90%
+
+monitor -i -r 30 -o dskPath.1 -o dskErrorMsg.1 "root file system" dskErrorFlag.1 !=0
+monitor -i -r 30 -o dskPath.2 -o dskErrorMsg.2 "ORACLE file system" dskErrorFlag.2 != 0
+#########
+
+To implement an external program then monitor its results you need to set up your script.
+
+Here is a sample script.
+
+#!//usr/bin/ksh
+xstatus=0
+
+if [ $xstatus -eq 0 ];then
+echo success: $0
+else
+echo FAILURE: $0
+fi
+
+exit $xstatus
+###end of script tester##
+
+Place this script in /usr/local/src and make it executable. Make copies called
+tester1, tester2 etc.
+and make them executable.
+
+Here is a sample snmpd.conf snippet that makes use of the exec feature:
+##############
+
+exec tester1 /usr/local/src/tester1
+exec tester2 /usr/local/src/tester2
+exec tester3 /usr/local/src/tester3
+exec tester4 /usr/local/src/tester4
+exec tester5 /usr/local/src/tester5
+
+monitor -i -r 60 -o extNames.1 -o extOutput.1 "status table 1" extResult.1 != 0
+monitor -i -r 60 -o extNames.2 -o extOutput.2 "status table 2" extResult.2 != 0
+monitor -i -r 60 -o extNames.3 -o extOutput.3 "status table 3" extResult.3 != 0
+monitor -i -r 60 -o extNames.4 -o extOutput.4 "status table 4" extResult.4 != 0
+monitor -i -r 60 -o extNames.5 -o extOutput.5 "status table 5" extResult.5 != 0
+##############
+
+While snmpd is running, go to /usr/local/src and modify one of the tester programs eg. tester1
+
+xstatus=1
+
+and save the file. Sometime in the next 60 seconds, a trap will be generated.
+Change the value
+back to 0, then modify another file.
+
+If you are unsure of the correct row number within a specific table, do an snmpwalk eg.
+
+snmpwalk -v 2c -c public -m ALL localhost prNames
+
+The same methodology can presumably be used for fileName and laNames. Your mileage may vary.
+
+
+ -- Bruce Shaw <Bruce.Shaw at shaw.ca> with Allan McIntosh and Wes Hardaker
+
+------------------------------------------------------------
+
+9. Monitoring CPU temp, fan and power supply sensors (LM-SENSORS-MIB)
+
+Note: This module (ucd-snmp/lmSensors) works in "read only" mode to examine
+sensors. It cannot change switch or fan settings.
+
+It has been tested at least on the following platforms:
+
+Enterprise 450
+V880
+280R
+
+If you have information about other platforms this is desperately needed. For
+example, the only "state" that I'm aware of for an i2c is "OK". The more
+information we have, the richer the components.
+
+Please report any performance statistics, bugs or omissions to the users list.
+Please report any code suggestions to the coders list. See links below.
+
+
+This component delivers information that you would normally see by typing:
+
+/usr/platform/`uname -m`/sbin/prtdiag -v
+
+At present this is only supported on the Ultra (sun4u) platform.
+
+To display this information, net-snmp must be compiled with the option:
+
+--with-mib-modules="ucd-snmp/lmSensors"
+
+Early Ultra servers such as the Ultra 1 or Ultra 2 did not report
+any sensor information at all. Later servers, such as the Enterprise 450
+reported this information using kstat. Sun's latest servers make use
+of the picld daemon to control system resources and report fan information.
+This module reads in the information from picld. It cannot modify settings.
+
+You can see this information by typing:
+
+prtpicl -v | more
+
+The following is typical output from net-snmp:
+
+E450# snmpwalk -v 2c -c public -m ALL localhost lmSensors
+LM-SENSORS-MIB::lmTempSensorsIndex.1 = INTEGER: 0
+LM-SENSORS-MIB::lmTempSensorsIndex.2 = INTEGER: 1
+LM-SENSORS-MIB::lmTempSensorsIndex.3 = INTEGER: 2
+LM-SENSORS-MIB::lmTempSensorsIndex.4 = INTEGER: 3
+LM-SENSORS-MIB::lmTempSensorsDevice.1 = STRING: Ambient
+LM-SENSORS-MIB::lmTempSensorsDevice.2 = STRING: CPU1
+LM-SENSORS-MIB::lmTempSensorsDevice.3 = STRING: CPU2
+LM-SENSORS-MIB::lmTempSensorsDevice.4 = STRING: CPU3
+LM-SENSORS-MIB::lmTempSensorsValue.1 = Gauge32: 22
+LM-SENSORS-MIB::lmTempSensorsValue.2 = Gauge32: 45
+LM-SENSORS-MIB::lmTempSensorsValue.3 = Gauge32: 46
+LM-SENSORS-MIB::lmTempSensorsValue.4 = Gauge32: 49
+LM-SENSORS-MIB::lmFanSensorsIndex.1 = INTEGER: 0
+LM-SENSORS-MIB::lmFanSensorsIndex.2 = INTEGER: 1
+LM-SENSORS-MIB::lmFanSensorsIndex.3 = INTEGER: 2
+LM-SENSORS-MIB::lmFanSensorsDevice.1 = STRING: fan type CPU number 0
+LM-SENSORS-MIB::lmFanSensorsDevice.2 = STRING: fan type PWR number 0
+LM-SENSORS-MIB::lmFanSensorsDevice.3 = STRING: fan type AFB number 0
+LM-SENSORS-MIB::lmFanSensorsValue.1 = Gauge32: 33
+LM-SENSORS-MIB::lmFanSensorsValue.2 = Gauge32: 31
+LM-SENSORS-MIB::lmFanSensorsValue.3 = Gauge32: 63
+LM-SENSORS-MIB::lmVoltSensorsIndex.1 = INTEGER: 0
+LM-SENSORS-MIB::lmVoltSensorsIndex.2 = INTEGER: 1
+LM-SENSORS-MIB::lmVoltSensorsIndex.3 = INTEGER: 2
+LM-SENSORS-MIB::lmVoltSensorsDevice.1 = STRING: power supply 0
+LM-SENSORS-MIB::lmVoltSensorsDevice.2 = STRING: power supply 1
+LM-SENSORS-MIB::lmVoltSensorsDevice.3 = STRING: power supply 2
+LM-SENSORS-MIB::lmVoltSensorsValue.1 = Gauge32: 38
+LM-SENSORS-MIB::lmVoltSensorsValue.2 = Gauge32: 39
+LM-SENSORS-MIB::lmVoltSensorsValue.3 = Gauge32: 39
+LM-SENSORS-MIB::lmMiscSensorsIndex.1 = INTEGER: 0
+LM-SENSORS-MIB::lmMiscSensorsIndex.2 = INTEGER: 1
+LM-SENSORS-MIB::lmMiscSensorsIndex.3 = INTEGER: 2
+LM-SENSORS-MIB::lmMiscSensorsDevice.1 = STRING: FSP
+LM-SENSORS-MIB::lmMiscSensorsDevice.2 = STRING: Backplane4
+LM-SENSORS-MIB::lmMiscSensorsDevice.3 = STRING: Backplane8
+LM-SENSORS-MIB::lmMiscSensorsValue.1 = Gauge32: 192
+LM-SENSORS-MIB::lmMiscSensorsValue.2 = Gauge32: 0
+LM-SENSORS-MIB::lmMiscSensorsValue.3 = Gauge32: 0
+
+V880# snmpwalk -v 2c -c public -m ALL localhost lmSensors
+LM-SENSORS-MIB::lmTempSensorsIndex.1 = INTEGER: 0
+LM-SENSORS-MIB::lmTempSensorsIndex.2 = INTEGER: 1
+LM-SENSORS-MIB::lmTempSensorsIndex.3 = INTEGER: 2
+LM-SENSORS-MIB::lmTempSensorsIndex.4 = INTEGER: 3
+LM-SENSORS-MIB::lmTempSensorsIndex.5 = INTEGER: 4
+LM-SENSORS-MIB::lmTempSensorsIndex.6 = INTEGER: 5
+LM-SENSORS-MIB::lmTempSensorsIndex.7 = INTEGER: 6
+LM-SENSORS-MIB::lmTempSensorsIndex.8 = INTEGER: 7
+LM-SENSORS-MIB::lmTempSensorsIndex.9 = INTEGER: 8
+LM-SENSORS-MIB::lmTempSensorsIndex.10 = INTEGER: 9
+LM-SENSORS-MIB::lmTempSensorsDevice.1 = STRING: CPU0_DIE_TEMPERATURE_SENSOR
+LM-SENSORS-MIB::lmTempSensorsDevice.2 = STRING: CPU2_DIE_TEMPERATURE_SENSOR
+LM-SENSORS-MIB::lmTempSensorsDevice.3 = STRING: CPU1_DIE_TEMPERATURE_SENSOR
+LM-SENSORS-MIB::lmTempSensorsDevice.4 = STRING: CPU3_DIE_TEMPERATURE_SENSOR
+LM-SENSORS-MIB::lmTempSensorsDevice.5 = STRING: CPU4_DIE_TEMPERATURE_SENSOR
+LM-SENSORS-MIB::lmTempSensorsDevice.6 = STRING: CPU6_DIE_TEMPERATURE_SENSOR
+LM-SENSORS-MIB::lmTempSensorsDevice.7 = STRING: MB_AMB_TEMPERATURE_SENSOR
+LM-SENSORS-MIB::lmTempSensorsDevice.8 = STRING: IOB_AMB_TEMPERATURE_SENSOR
+LM-SENSORS-MIB::lmTempSensorsDevice.9 = STRING: DBP0_AMB_TEMPERATURE_SENSOR
+LM-SENSORS-MIB::lmTempSensorsDevice.10 = STRING: DBP1_AMB_TEMPERATURE_SENSOR
+LM-SENSORS-MIB::lmTempSensorsValue.1 = Gauge32: 71
+LM-SENSORS-MIB::lmTempSensorsValue.2 = Gauge32: 60
+LM-SENSORS-MIB::lmTempSensorsValue.3 = Gauge32: 66
+LM-SENSORS-MIB::lmTempSensorsValue.4 = Gauge32: 59
+LM-SENSORS-MIB::lmTempSensorsValue.5 = Gauge32: 65
+LM-SENSORS-MIB::lmTempSensorsValue.6 = Gauge32: 69
+LM-SENSORS-MIB::lmTempSensorsValue.7 = Gauge32: 28
+LM-SENSORS-MIB::lmTempSensorsValue.8 = Gauge32: 25
+LM-SENSORS-MIB::lmTempSensorsValue.9 = Gauge32: 25
+LM-SENSORS-MIB::lmTempSensorsValue.10 = Gauge32: 24
+LM-SENSORS-MIB::lmFanSensorsIndex.1 = INTEGER: 0
+LM-SENSORS-MIB::lmFanSensorsIndex.2 = INTEGER: 1
+LM-SENSORS-MIB::lmFanSensorsIndex.3 = INTEGER: 2
+LM-SENSORS-MIB::lmFanSensorsIndex.4 = INTEGER: 3
+LM-SENSORS-MIB::lmFanSensorsIndex.5 = INTEGER: 4
+LM-SENSORS-MIB::lmFanSensorsIndex.6 = INTEGER: 5
+LM-SENSORS-MIB::lmFanSensorsIndex.7 = INTEGER: 6
+LM-SENSORS-MIB::lmFanSensorsIndex.8 = INTEGER: 7
+LM-SENSORS-MIB::lmFanSensorsIndex.9 = INTEGER: 8
+LM-SENSORS-MIB::lmFanSensorsIndex.10 = INTEGER: 9
+LM-SENSORS-MIB::lmFanSensorsDevice.1 = STRING: CPU0_PFAN_TACH
+LM-SENSORS-MIB::lmFanSensorsDevice.2 = STRING: CPU1_PFAN_TACH
+LM-SENSORS-MIB::lmFanSensorsDevice.3 = STRING: CPU0_SFAN_TACH
+LM-SENSORS-MIB::lmFanSensorsDevice.4 = STRING: CPU1_SFAN_TACH
+LM-SENSORS-MIB::lmFanSensorsDevice.5 = STRING: IO_BRIDGE_PFAN_TACH
+LM-SENSORS-MIB::lmFanSensorsDevice.6 = STRING: IO_BRIDGE_SFAN_TACH
+LM-SENSORS-MIB::lmFanSensorsDevice.7 = STRING: IO0_PFAN_TACH
+LM-SENSORS-MIB::lmFanSensorsDevice.8 = STRING: IO1_PFAN_TACH
+LM-SENSORS-MIB::lmFanSensorsDevice.9 = STRING: IO0_SFAN_TACH
+LM-SENSORS-MIB::lmFanSensorsDevice.10 = STRING: IO1_SFAN_TACH
+LM-SENSORS-MIB::lmFanSensorsValue.1 = Gauge32: 2439
+LM-SENSORS-MIB::lmFanSensorsValue.2 = Gauge32: 2586
+LM-SENSORS-MIB::lmFanSensorsValue.3 = Gauge32: 2459
+LM-SENSORS-MIB::lmFanSensorsValue.4 = Gauge32: 2564
+LM-SENSORS-MIB::lmFanSensorsValue.5 = Gauge32: 3409
+LM-SENSORS-MIB::lmFanSensorsValue.6 = Gauge32: 0
+LM-SENSORS-MIB::lmFanSensorsValue.7 = Gauge32: 3947
+LM-SENSORS-MIB::lmFanSensorsValue.8 = Gauge32: 3896
+LM-SENSORS-MIB::lmFanSensorsValue.9 = Gauge32: 4000
+LM-SENSORS-MIB::lmFanSensorsValue.10 = Gauge32: 3896
+LM-SENSORS-MIB::lmVoltSensorsIndex.1 = INTEGER: 0
+LM-SENSORS-MIB::lmVoltSensorsIndex.2 = INTEGER: 1
+LM-SENSORS-MIB::lmVoltSensorsIndex.3 = INTEGER: 2
+LM-SENSORS-MIB::lmVoltSensorsIndex.4 = INTEGER: 3
+LM-SENSORS-MIB::lmVoltSensorsIndex.5 = INTEGER: 4
+LM-SENSORS-MIB::lmVoltSensorsIndex.6 = INTEGER: 5
+LM-SENSORS-MIB::lmVoltSensorsIndex.7 = INTEGER: 6
+LM-SENSORS-MIB::lmVoltSensorsIndex.8 = INTEGER: 7
+LM-SENSORS-MIB::lmVoltSensorsIndex.9 = INTEGER: 8
+LM-SENSORS-MIB::lmVoltSensorsIndex.10 = INTEGER: 9
+LM-SENSORS-MIB::lmVoltSensorsIndex.11 = INTEGER: 10
+LM-SENSORS-MIB::lmVoltSensorsIndex.12 = INTEGER: 11
+LM-SENSORS-MIB::lmVoltSensorsDevice.1 = STRING: PS0_3_3V_I_SENSOR
+LM-SENSORS-MIB::lmVoltSensorsDevice.2 = STRING: PS0_5V_I_SENSOR
+LM-SENSORS-MIB::lmVoltSensorsDevice.3 = STRING: PS0_12V_I_SENSOR
+LM-SENSORS-MIB::lmVoltSensorsDevice.4 = STRING: PS0_48V_I_SENSOR
+LM-SENSORS-MIB::lmVoltSensorsDevice.5 = STRING: PS1_3_3V_I_SENSOR
+LM-SENSORS-MIB::lmVoltSensorsDevice.6 = STRING: PS1_5V_I_SENSOR
+LM-SENSORS-MIB::lmVoltSensorsDevice.7 = STRING: PS1_12V_I_SENSOR
+LM-SENSORS-MIB::lmVoltSensorsDevice.8 = STRING: PS1_48V_I_SENSOR
+LM-SENSORS-MIB::lmVoltSensorsDevice.9 = STRING: PS2_3_3V_I_SENSOR
+LM-SENSORS-MIB::lmVoltSensorsDevice.10 = STRING: PS2_5V_I_SENSOR
+LM-SENSORS-MIB::lmVoltSensorsDevice.11 = STRING: PS2_12V_I_SENSOR
+LM-SENSORS-MIB::lmVoltSensorsDevice.12 = STRING: PS2_48V_I_SENSOR
+LM-SENSORS-MIB::lmVoltSensorsValue.1 = Gauge32: 6
+LM-SENSORS-MIB::lmVoltSensorsValue.2 = Gauge32: 4
+LM-SENSORS-MIB::lmVoltSensorsValue.3 = Gauge32: 3
+LM-SENSORS-MIB::lmVoltSensorsValue.4 = Gauge32: 4
+LM-SENSORS-MIB::lmVoltSensorsValue.5 = Gauge32: 6
+LM-SENSORS-MIB::lmVoltSensorsValue.6 = Gauge32: 4
+LM-SENSORS-MIB::lmVoltSensorsValue.7 = Gauge32: 3
+LM-SENSORS-MIB::lmVoltSensorsValue.8 = Gauge32: 4
+LM-SENSORS-MIB::lmVoltSensorsValue.9 = Gauge32: 6
+LM-SENSORS-MIB::lmVoltSensorsValue.10 = Gauge32: 4
+LM-SENSORS-MIB::lmVoltSensorsValue.11 = Gauge32: 3
+LM-SENSORS-MIB::lmVoltSensorsValue.12 = Gauge32: 4
+
+This component also reports information for switches, LEDs
+and i2c's (devices accessing the i2c bus).
+Because the MIB only allows us to display numeric
+information a certain amount of translation has been done.
+
+Switches:
+
+0 = OFF
+1 = ON
+2 = NORMAL
+3 = LOCKED
+4 = UNKNOWN
+5 = DIAG
+6 = SECURE
+99 = other
+
+LEDs:
+
+0 = OFF
+1 = ON
+2 = BLINK (this may not exist)
+99 = other
+
+i2c's:
+0 = OK
+99 = other
+
+In order to prevent inordinant consumption of machine resources,
+some sensor information is cached. Currently, information
+retrieved from picld is cached for six seconds.
+
+ -- Bruce Shaw <Bruce.Shaw at shaw.ca>
+
+------------------------------------------------------------
+
+10. MIB rewrites for IF-MIB, TCP-MIB and UDP-MIB
+
+net-snmp 5.4 has started to include rewrites for the IF-MIB, TCP-MIB and
+UDP-MIB implementations. They need to be explicitely enabled, though:
+
+ ./configure --enable-mfd-rewrites ...
+
+See the Net-SNMP Wiki (http://www.net-snmp.org/wiki/index.php/IF-MIB_rewrite)
+for further details.
+
+Thanks to Sun for the excellent patches.
+
+
+ -- Thomas Anders <tanders@users.sourceforge.net>
+
+------------------------------------------------------------
+
+11. Files descriptors and fopen
+
+Solaris has a limitation on the number of file descriptors (255)
+available in stdio, so that fopen() fails if more than
+255 file descriptors (sockets) are open. This prevents mibs from
+being loaded after 250 sockets are open, since parse.c uses stdio.
+
+SEan <burke_sp@pacbell.net> investigated this problem, and had this
+report on using the SFIO package to solve this problem.
+
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+The SFIO package ( http://www.research.att.com/sw/tools/sfio/ )
+is a buffered streams IO package that is much more more sophisticated
+than stdio, but it does support stdio API's for backward compatibility,
+and that's the aspect that is important here.
+
+To compile with SFIO, we simply add -I/usr/local/sfio/include to the
+$CPPFLAGS before compiling net-snmp. This causes SFIO's stdio.h to
+preempt Solaris stdio, mapping calls like fopen() and fprintf() to
+the SFIO implementations. This produces a libnetsnmp that does not
+have the fopen() limitation. Any application that links to this
+libnetsnmp must also be linked to libsfio.
+
+Here are the two caveats:
+
+A. libsfio exports the functions 'getc' and 'putc', for reasons that
+are not clear. These are the only symbols it exports that conflict
+with stdio. While getc and putc are traditionally macros, Solaris
+makes them functions in multithreaded code (compiled with -mt,
+-pthread, or -D_REENTRANT). If your native stdio code links to the
+libsfio versions, a crash will result.
+
+There are two solutions to this problem. You may remove getc and putc
+from libsfio, since SFIO defines getc and putc as macros, by doing:
+
+ ar d libsfio.a getc.o
+ ar d libsfio.a putc.o
+
+or link to SFIO's stdio compatibility library, libstdio, ahead of
+libsfio. This library wraps all of the native stdio calls with
+versions that are safe for native or sfio streams, in case you
+need to share streams between SFIO and native stdio codes.
+
+B. libsfio provides 64-bit offsets in fseek(), ftell(). This is
+a good thing, since SFIO is intended to avoid needless limitations,
+but it means that SFIO's stdio.h defines off_t to be a 64-bit offset.
+Net-SNMP uses readdir(), which returns a struct dirent containing
+a 32-bit off_t, so the code compiled for SFIO doesn't access
+struct dirent's correctly.
+
+There are two solutions to this problem, as well. The first is to
+include <dirent.h> at the start of SFIO's stdio.h. Since SFIO
+defines a macro substitution for off_t, this leaves struct dirent's
+definition unchanged.
+
+An alternative, which I haven't verified, is to define _FILE_OFFSET_BITS
+to be 64 when compiling libnetsnmp. According to what I see in Solaris's
+/usr/include/sys/feature_tests.h, you can select a 64-bit off_t at
+compile time with this setting, which should make readdir()'s off_t
+compatible with SFIO's ftell(), fseek().
+ [[ We have received reports that this approach does not in fact work
+(see Perl discussion below)]]
+
+Finally, thanks to Phong Vo and AT&T Labs for a fast, robust and
+portable package that solves this headache very neatly.
+
+-SEan <burke_sp@pacbell.net>
+
+------------------------------------------------------------
+
+12. Perl
+
+Net-SNMP may be compiled with Perl support by configuring like:
+
+ ./configure -enable-embedded-perl ...
+
+It's recommended to add --enable-as-needed for proper libperl linking.
+
+Enabling Perl support should only be done if you are sure you really
+need Perl, for the following reasons:
+
+Solaris 8 and later ship with a version of Perl compiled using Sun's cc.
+
+This causes a problem when attempting to compile net-snmp
+with Perl functionality ie.:
+
+ ./configure --with-mib-modules="ucd-snmp/lmSensors ucd-snmp/diskio \
+ smux mibII/mta_sendmail" --enable-embedded-perl
+
+because during the Perl section of the compile, it attempts to do so
+using the methodology used to compile the original Perl, not
+what you're currently using. This can be discovered by typing:
+
+ perl -V
+
+and it says (among other things)
+
+ Compiler:
+ cc='cc'
+
+and you don't have the full version of Sun's C compiler on your
+system, it's going to break.
+
+In addition if it was compiled with:
+
+ LFS_CFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
+
+net-snmp will not compile correctly.
+
+Given that the Perl provided with Solaris 8 (5.005_03) and Solaris 9
+(5.005_03 and 5.6.1) is somewhat stale, upgrading may be to your advantage.
+
+Perl did not ship with Solaris before version 8. If you installed a
+version from www.sunfreeware.com, it is compiled with some extra flags
+that cause the net-snmp compile to break.
+
+In either case, you will need to compile and install Perl.
+
+There are, however, some issues.
+
+A. Some applications (eg. /usr/bin/kstat) require this exact version
+of Perl because of libraries. These instructions below install Perl
+in /usr/local/bin (and optionally /usr/bin/). The original is left
+intact in /usr/perl5/bin/perl where, in fact, the kstat script looks
+for it. If you have version specific scripts, you will need to do
+the same either by invoking /usr/perl5/bin/perl or putting:
+
+#!/usr/perl/bin/perl -w
+
+as the first line of your script and making it executable
+(see the /usr/bin/kstat source as an example).
+
+B. The instructions below disable large file support.
+
+This means that Perl would be unable to deal
+successfully with files larger than 2 Gb.
+Again, using /usr/perl5/bin/perl or a version compiled
+with this functionality would solve this.
+
+Hence the ideal solution is a net-snmp specific Perl in its own directory.
+
+The following instructions will install a working Perl in /usr/local/net-snmp.
+
+Install gcc version 3.3.2 (or later) from www.sunfreeware.com.
+
+Download the current stable release of Perl
+
+ http://www.cpan.org/src/stable.tar.gz
+
+and gunzip and untar. (This document assumes Perl 5.8.3 or later)
+
+cd to the source directory and type the following:
+
+ sh Configure -Dcc=gcc -Dprefix=/usr/local/net-snmp -Uinstallusrbinperl \
+ -Duseshrplib -Dcf_email=your_email@your_domain \
+ -Dperladmin=your_email@your_domain -Uuselargefiles -de
+
+Replace your_email@your_domain by your real email address. If you intend
+to compile Net-SNMP with Sun cc later on, replace gcc with cc above.
+
+When it is finished, do:
+
+ grep cppsymbols config.sh
+
+and make sure "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" does NOT appear.
+
+Then do:
+
+ make
+ make test (optional)
+ make install
+ /usr/local/net-snmp/bin/perl -V
+
+if everything looks all right, compile net-snmp (see above) with the
+following differences:
+
+env PERLPROG=/usr/local/net-snmp/bin/perl ./configure --enable-embedded-perl \
+ --with-mib-modules=ucd-snmp/lmSensors,ucd-snmp/diskio,smux,mibII/mta_sendmail \
+ --with-cc=gcc && make && make test && make install
+
+Make sure you specify the correct path to your self-compiled Perl binary
+and use the same compiler like the one you used when building Perl above.
+Feel free to add other configure options, of course.
+
+"make test" includes some tests for the Net-SNMP Perl functionalities.
+
+Once you have compiled and installed net-snmp you can test the Perl
+capabilities of the final installation by doing the following:
+
+Copy the perl_module.pl script found at
+
+http://www.net-snmp.org/tutorial-5/toolkit/perl/index.html
+
+to /usr/local/net-snmp
+
+and modify your /usr/local/share/snmp/snmpd.conf file to contain the entry:
+
+perl do "/usr/local/net-snmp/perl_module.pl";
+
+then do:
+
+/usr/local/bin/snmpwalk -v 2c -c whatever localhost .1.3.6.1.4.1.8072.999
+
+It should return the following:
+
+NET-SNMP-MIB::netSnmp.999.1.2.1 = STRING: "hello world"
+
+WARNING!! If you are planning on creating binary versions of net-snmp with
+Perl capability, you will also need to ship the Perl which you created in
+/usr/local/net-snmp.
+
+ -- Bruce Shaw <Bruce.Shaw at shaw.ca>
+ -- Thomas Anders <tanders@users.sourceforge.net>
+
+------------------------------------------------------------
+
+13. sed
+
+Various sed versions in older Solaris releases (Solaris 8 and earlier
+at least) have serious limitations that may affect ./configure
+when building net-snmp. All these issues *should* have been addressed
+in net-snmp 5.4 and later. If you still have problems, please let us know
+and consider:
+
+- installing GNU sed and putting in in front of your PATH
+- installing the available Sun patches for the various sed versions
+ (/usr/bin/sed, /usr/xpg4/bin/sed, /usr/ucb/sed)
+- try the suggestions below
+
+The version of sed in /usr/ucb on Solaris 2.5.1 and 2.6 can't
+cope with the size of the substitution strings used in config.status.
+
+Putting /usr/bin ahead of /usr/ucb in the search path fixes this.
+
+/usr/xpg4/bin/sed is seen to segfault under Solaris 8 when running configure.
+Putting /usr/bin ahead of /usr/xpg4/bin fixes this.
+
+
+ -- Thomas Anders <tanders@users.sourceforge.net>
+ -- zach dot metzinger at microtune dot com
+
+------------------------------------------------------------
+
+14. OpenSSL and crle
+
+If compiling with OpenSSL (e.g. from sunsolve), it's possible that
+the agent won't successfully load the crypto library (typically
+in /usr/local/ssl/lib) when it is in use and will return a
+cannot find library error message of some sort.
+
+To rectify this, you will need to use the /usr/bin/crle command, which
+did NOT ship with some versions of Solaris, but came as part of later
+patches. You should make sure the following patches are up to date:
+
+107733 (Solaris 2.6)
+106950 (Solaris 2.7)
+109147 (Solaris 8)
+115833 (Trusted Solaris 8)
+112693 (Solaris 9)
+
+Then type the following:
+
+/usr/bin/crle
+
+It will return something like:
+
+Default configuration file (/var/ld/ld.config) not found
+ Default Library Path (ELF): /usr/lib (system default)
+ Trusted Directories (ELF): /usr/lib/secure (system default)
+
+Find the location of the libcrypto libraries by typing:
+
+find /usr -name "libcrypto*" -print
+
+which will probably display:
+
+/usr/local/ssl/lib/libcrypto.a
+/usr/local/ssl/lib/libcrypto.so
+/usr/local/ssl/lib/libcrypto.so.0
+/usr/local/ssl/lib/libcrypto.so.0.9.7
+
+which is the default installation for OpenSSL.
+
+To include this in the loader search path, type:
+
+/usr/bin/crle -u -l /usr/local/ssl/lib
+
+/usr/bin/crle will now display:
+
+Configuration file [3]: /var/ld/ld.config
+ Default Library Path (ELF): /usr/lib:/usr/local/ssl/lib
+ Trusted Directories (ELF): /usr/lib/secure (system default)
+
+Command line:
+ crle -c /var/ld/ld.config -l /usr/lib:/usr/local/ssl/lib
+
+If this fails, usually by displaying:
+
+crle: /var/ld/ld.config: open failed: No such file or directory
+
+you will need to create this directory by hand by doing the following:
+
+mkdir /var/ld
+cd /var/ld
+ln -s . 32
+mkdir sparcv9
+chgrp bin sparcv9
+ln -s sparcv9 64
+touch ld.config
+
+then do:
+
+crle -c /var/ld/ld.config -l /usr/lib:/usr/local/ssl/lib
+
+Thanks to Dave Shield and Johannes Schmidt-Fischer
+
+ -- Bruce Shaw <Bruce.Shaw at shaw.ca>
+
+------------------------------------------------------------
+
+15. IPv6
+
+Starting with net-snmp 5.4 you can enable the UDPIPv6 and TCPIPv6
+transports on Solaris:
+
+ ./configure --enable-ipv6
+
+There's no support for the mibII/ipv6 mib module, though.
+
+
+ -- Thomas Anders <tanders@users.sourceforge.net>
+
+------------------------------------------------------------
+
+16. Wish list
+
+A. Code cleanup
+
+There may be opportunities for shared code between UCD-SNMP
+and HOST-RESOURCES-MIB.
+
+There may be opportunities to optimize caching perhaps
+using the new auto-caching code.
+
+B. LM-SENSORS-MIB
+
+We need a complete list of sensors from various platforms so
+they can be displayed properly.
+
+C. ORACLE
+
+How to get ORACLE's SNMP functionality to work as a sub-agent.
+
+D. Largefile support
+
+Rework the host mib module to work even if net-snmp is built with
+largefile support. This would eliminate the most important problems
+with Perl (see section 12).
+
+ -- Bruce Shaw <Bruce.Shaw at shaw.ca>
+ -- Thomas Anders <tanders@users.sourceforge.net>
+
+------------------------------------------------------------
+
+17. Known Bugs!!
+
+A. hrDeviceTable (HOST-RESOURCES-MIB)
+
+This section of code is only aware of disk controllers 0 through 7.
+Hence, anything on controller c8 and above will be invisible.
+
+B. hrPartitionTable (HOST-RESOURCES-MIB)
+
+At present, hrPartitionSize data only works for regular ufs
+partitions eg. /dev/dsk/c0t0d0s0 that are mounted. They
+are displayed in partition order rather than the order
+they are mounted. Partitions mounted as mirrors, metastate
+database replicas, swap or members of a RAID display size 0.
+
+As a workaround, put entries for disks you are
+interested in in snmpd.conf and examine
+using UCD-SNMP-MIB.
+
+
+ -- Bruce Shaw <Bruce.Shaw at shaw.ca>
+
+------------------------------------------------------------
+
+18. Discussion and further information
+
+For discussion or further information contact the coders and users
+lists at http://sourceforge.net/mail/?group_id=12694 .
+
diff --git a/cleopatre/application/spidnetsnmp/README.thread b/cleopatre/application/spidnetsnmp/README.thread
new file mode 100644
index 0000000000..aa1304a98b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README.thread
@@ -0,0 +1,343 @@
+Improved Error Reporting and Thread-Safe Use of the SNMP Library
+
+There is a need in some environments to support multiple threads
+in a single application. The SNMP Library provides the Single Session
+functions which support thread-safe operation when certain precautions
+are taken. This document describes the operation of the SNMP Library
+with a focus on its session management functions. The Traditional API
+and the Single API functions are compared and contrasted.
+A working understanding of the CMU or UCD SNMP Library
+API is recommended to fully appreciate the concepts discussed.
+The document ends with a list of restrictions for using the Single API
+in a multi-threaded application.
+
+Unfortunately, the SNMPv3 support was added about the same time as
+the thread support and since they occurred in parallel the SNMPv3
+support was never checked for multi-threading correctness. It is
+most likely that it is not thread-safe at this time.
+
+ ***** IMPORTANT ANNOUNCEMENT *****
+ To the point, no resource locks are applied within the SNMP Library.
+ The APDU encoding and some session management functions can be used
+ in thread-safe manners. The MIB file parsing is not thread-safe.
+ The Single Session API was made available in November 1998.
+ Existing applications use the Traditional API, which is not thread-safe.
+ The thread-safe considerations are discussed throughout this document.
+
+The research and development of the Single Session API that I've completed
+was wholly funded by my employer, Internet Security Systems, Inc.
+and is distributed freely to the Internet community.
+
+-Mike Slifcak, 23 April 1999
+
+09 July 1999 Removed references to snmp_synch_setup and snmp_synch_reset
+
+
+Availability
+
+The Single Session API is integrated into the currently available
+versions of the CMU SNMP library and the UC-Davis SNMP package.
+
+ ftp://ftp.net.cmu.edu/pub/snmp/cmu-snmp-V1.13.tar.gz and later
+ Read : snmp_sess_api.3, Changes.SingleSession
+
+ ftp://ucd-snmp.ucdavis.edu/ucd-snmp-3.6.tar.gz and later
+ Read : snmp_sess_api.3, README.thread (after version 3.6.1)
+
+Both libraries work equally well in Windows NT and various
+UNIX platforms. Please read this document and refer to
+the snmp_sess_api section 3 manual page.
+
+Glossary of Terms
+
+APDU Application Protocol Data Unit
+API Application Programming Interface
+CMU Carnegie-Mellon University, Pittsburgh, PA.
+Library The SNMP library; Both CMU and UCD versions are applicable.
+Session Concept embodying the management of transacting SNMP APDUS.
+SNMP Simple Network Management Protocol
+UCD University of California at Davis, CA.
+
+Introduction
+
+The Library extends the UNIX file concept (open, close, read, write) to a Session.
+Opening a Session binds a local socket to a well-known port and creates internal
+structures to help with controlling the transaction of SNMP APDUs. Closing a
+Session releases the memory and system resources used for these purposes.
+
+Since the mid-1980s, many SNMP applications have used the Traditional Session
+API to transact SNMP APDUs between the local host and SNMP-enabled devices.
+
+ The Traditional Session API does not support multi-threaded applications:
+
+ 1) There are no resource locks to prevent exposing the Library's
+ global data resources to corruption in a multi-threaded application;
+
+ 2) The Traditional API functions that receive SNMP APDUs
+ do not provide an interface for one of many sessions;
+
+ 3) Errors discovered by the Library are communicated through global
+ data structures and are not associated with the session
+ in which the error occurred.
+
+ The Single Session API provides these capabilities:
+
+ 1) Manage a single SNMP session safely, in multi-threaded or
+ non-threaded applications, by avoiding access to data structures
+ that the Traditional Session API may share between Sessions;
+
+ 2) Associate errors with the session context for threaded
+ and non-threaded applications.
+
+
+Contrasting and Comparing Traditional API and Single API
+
+The Traditional API uses the struct snmp_session pointer returned
+from snmp_open() to identify one SNMP session. The Single API uses
+the opaque pointer returned from snmp_sess_open() to identify one
+SNMP session.
+
+ Helpful Hint : The Library copies the contents of the
+ structure which is input to snmp_open() and snmp_sess_open().
+ Once copied, changing that input structure's data
+ has no effect on the opened SNMP Session.
+
+The Traditional API uses the snmp_error() function to identify any
+library and system errors that occurred during the processing for
+one SNMP session. The Single API uses snmp_sess_error() for the
+same purpose.
+
+The Traditional API manages the private Sessions list structure;
+adding to the list during snmp_open(), removing during snmp_close.
+
+With few exceptions, the Traditional API calls the Single API
+for each session that appears on the Sessions list.
+
+The Traditional API reads from all Sessions on the Sessions list;
+The Single API does not use the Sessions list.
+The Single API can read from only one Session.
+
+ Helpful Hint :
+ This is the basis for thread-safe-ness of the Library.
+ There are no resource locks applied.
+
+
+Using the Single API
+
+A multi-threaded application that deploys the SNMP Library should
+should complete all MIB file parsing before additional threads
+are activated. Drawing from the parsed contents of the MIB does
+not incur any data corruption exposure once the internal MIB structures
+are initialised.
+
+The application may create threads such that a single thread may manage
+a single SNMP session. The thread should call snmp_sess_init()
+to prepare a struct snmp_session structure. The thread can adjust
+session parameters such as the remote UDP port or the local UDP port,
+which must be set prior to invoking snmp_sess_open().
+
+The first call to snmp_sess_init() initialises the SNMP Library,
+including the MIB parse trees, before any SNMP sessions are created.
+Applications that call snmp_sess_init() do not need to read MIBs
+nor setup environment variables to utilize the Library.
+
+After the struct snmp_session is setup, the thread must call
+snmp_sess_open() to create an SNMP session. If at any time
+the thread must change the Session configuration,
+snmp_sess_session() returns the pointer to the internal configuration
+structure (a struct snmp_session, copied from snmp_sess_open).
+The thread can adjust parameters such as the session timeout
+or the community string with this returned struct snmp_session pointer.
+Changes to the remote or local port values have no effect on an opened Session.
+
+The thread can build PDUs and bind variables to PDUs, as it performs its duties.
+The thread then calls snmp_sess_send() or snmp_sess_async_send() to build and send
+an SNMP APDU to the remote device. If a Get-Response-PDU is expected, the thread
+should call snmp_sess_synch_response() instead.
+
+When the thread is finished using the session, it must free the resources
+that the Library used to manage the session.
+Finally, the thread must call snmp_sess_close() to end the Session.
+
+Snmp_sess_init(), snmp_open(), and snmp_sess_open()
+must use the same calling parameter for a given Session.
+Other methods should use only the returned parameter from
+snmp_open() and snmp_sess_open() to access the opened SNMP Session.
+
+
+Error Processing
+
+Two calls were added : snmp_error() and snmp_sess_error() return the
+"errno" and "snmp_errno" values from the per session data, and a string
+that describes the errors that they represent. The string must be freed
+by the caller.
+
+Use snmp_error() to process failures after Traditional API calls,
+or snmp_sess_error() to process failure after Single API calls.
+In the case where an SNMP session could not be opened,
+call snmp_error() using the struct snmp_session supplied to either snmp_open()
+or snmp_sess_open().
+
+
+The following variables and functions are obsolete and may create problems
+in a multi-threaded application :
+
+ int snmp_errno
+ char * snmp_detail
+ snmp_set_detail()
+ snmp_api_errstring()
+
+
+Function Summary
+
+The functions in the following table are functionally equivalent,
+with the exception of these behaviors:
+- The Traditional API manages many sessions
+- The Traditional API passes a struct snmp_session pointer,
+ and touches the Sessions list
+- The Single API manages only one session
+- The Single API passes an opaque pointer, and does not use Sessions list
+
+ Traditional Single Comment
+ =========== ============== =======
+ snmp_sess_init snmp_sess_init Call before either open
+ snmp_open snmp_sess_open Single not on Sessions list
+ snmp_sess_session Exposes snmp_session pointer
+ snmp_send snmp_sess_send Send one APDU
+ snmp_async_send snmp_sess_async_send Send one APDU with callback
+ snmp_select_info snmp_sess_select_info Which session(s) have input
+ snmp_read snmp_sess_read Read APDUs
+ snmp_timeout snmp_sess_timeout Check for timeout
+ snmp_close snmp_sess_close Single not on Sessions list
+ snmp_synch_response snmp_sess_synch_response Send/receive one APDU
+ snmp_error snmp_sess_error Get library,system errno
+
+
+Example 1 : Traditional API use.
+
+ #include "snmp_api.h"
+ ...
+ int liberr, syserr;
+ char *errstr;
+ struct snmp_session Session, *sptr;
+ ...
+ snmp_sess_init(&Session);
+ Session.peername = "foo.bar.net";
+ sptr = snmp_open(&Session);
+ if (sptr == NULL) {
+ /* Error codes found in open calling argument */
+ snmp_error(&Session, &liberr, &syserr, &errstr);
+ printf("SNMP create error %s.\n", errstr);
+ free(errstr);
+ return 0;
+ }
+ /* Pass sptr to snmp_error from here forward */
+ ...
+ /* Change the community name */
+ free(sptr->community);
+ sptr->community = strdup("public");
+ sptr->community_len = strlen("public");
+ ...
+ if (0 == snmp_send(sptr, pdu)) {
+ snmp_error(sptr, &liberr, &syserr, &errstr);
+ printf("SNMP write error %s.\n", errstr);
+ free(errstr);
+ return 0;
+ }
+ snmp_close(sptr);
+
+
+Example 2 : Single API use.
+
+ #include "snmp_api.h"
+ ...
+ int liberr, syserr;
+ char *errstr;
+ void *sessp; /* <-- an opaque pointer, not a struct pointer */
+ struct snmp_session Session, *sptr;
+ ...
+ snmp_sess_init(&Session);
+ Session.peername = "foo.bar.net";
+ sessp = snmp_sess_open(&Session);
+ if (sessp == NULL) {
+ /* Error codes found in open calling argument */
+ snmp_error(&Session, &liberr, &syserr, &errstr);
+ printf("SNMP create error %s.\n", errstr);
+ free(errstr);
+ return 0;
+ }
+ sptr = snmp_sess_session(sessp); /* <-- get the snmp_session pointer */
+
+ /* Pass sptr to snmp_sess_error from here forward */
+ ...
+ /* Change the community name */
+ free(sptr->community);
+ sptr->community = strdup("public");
+ sptr->community_len = strlen("public");
+ ...
+ if (0 == snmp_sess_send(sessp, pdu)) {
+ snmp_sess_error(sessp, &liberr, &syserr, &errstr);
+ printf("SNMP write error %s.\n", errstr);
+ free(errstr);
+ return 0;
+ }
+ snmp_sess_close(sessp);
+
+Example 3. Differences Between Traditional API and Single API Usage
+5a6
+> void *sessp; /* <-- an opaque pointer, not a struct pointer */
+11,13c12,14
+< sptr = snmp_open(&Session);
+< if (sptr == NULL) {
+---
+> sessp = snmp_sess_open(&Session);
+> if (sessp == NULL) {
+19c20,22
+< /* Pass sptr to snmp_error from here forward */
+---
+> sptr = snmp_sess_session(sessp); /* <-- get the snmp_session pointer */
+>
+> /* Pass sptr to snmp_sess_error from here forward */
+26,27c29,30
+< if (0 == snmp_send(sptr, pdu)) {
+< snmp_error(sptr, &liberr, &syserr, &errstr);
+---
+> if (0 == snmp_sess_send(sessp, pdu)) {
+> snmp_sess_error(sessp, &liberr, &syserr, &errstr);
+33c36
+< snmp_close(sptr);
+---
+> snmp_sess_close(sessp);
+
+
+Restrictions on Multi-threaded Use of the SNMP Library
+
+ 1. Invoke SOCK_STARTUP or SOCK_CLEANUP from the main thread only.
+
+ 2. The MIB parsing functions use global shared data and are not
+ multi-thread safe when the MIB tree is under construction.
+ Once the tree is built, the data can be safely referenced from
+ any thread. There is no provision for freeing the MIB tree.
+ Suggestion: Read the MIB files before an SNMP session is created.
+ This can be accomplished by invoking snmp_sess_init from the main
+ thread and discarding the buffer which is initialised.
+
+ 3. Invoke the SNMPv2p initialisation before an SNMP session is created,
+ for reasons similar to reading the MIB file.
+ The SNMPv2p structures should be available to all SNMP sessions.
+ CAUTION: These structures have not been tested in a multi-threaded
+ application.
+
+ 4. Sessions created using the Single API do not interact with other
+ SNMP sessions. If you choose to use Traditional API calls, call
+ them from a single thread. The Library cannot reference an SNMP
+ session using both Traditional and Single API calls.
+
+ 5. Using the callback mechanism for asynchronous response PDUs
+ requires additional caution in a multi-threaded application.
+ This means a callback function probably should probably not use
+ Single API calls to further process the session.
+
+ 6. Each call to snmp_sess_open() creates an IDS. Only a call to
+ snmp_sess_close() releases the resources used by the IDS.
+
diff --git a/cleopatre/application/spidnetsnmp/README.tru64 b/cleopatre/application/spidnetsnmp/README.tru64
new file mode 100644
index 0000000000..edc456b789
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README.tru64
@@ -0,0 +1,57 @@
+Some notes for the Tru64 Unix 5.x port
+======================================
+
+1. Compiling
+------------
+
+The following procedure has been proven to successfully compile net-snmp
+version 5.2.2 and later on Tru64 Unix 5.1B (Alpha EV5.6) using the Compaq C 6.5
+compiler:
+
+ ./configure --disable-embedded-perl
+ make
+ su -
+ make install
+
+A recent GNU C compiler (gcc) will probably work, too.
+
+Please note that the "host" module doesn't compile on Tru64, so you *cannot*
+run configure with "--with-mib-modules=host".
+
+2. Embedded Perl
+----------------
+
+The Perl package (5.00503) shipped with Tru64 Unix 5.1 isn't complete enough
+to allow to build net-snmp with embedded Perl support. If you need embedded
+Perl support, do your own Perl installation first.
+
+3. IPv6
+-------
+
+Starting with net-snmp 5.4 you can enable the UDPIPv6 and TCPIPv6 transports
+on Tru64 Unix 5.1:
+
+ ./configure --enable-ipv6
+
+There's no support for the IPv6 MIBs, though.
+
+
+4. Known problems
+-----------------
+
+"make test" is known to report the following failure:
+
+ 59: testing full snmpwalk (SNMPv2c) against agent (may take time)... FAIL
+
+so it's obvious that there are still problems with some MIB modules on Tru64.
+If you have ideas how to fix them, please let us know!
+
+
+5. Feedback
+-----------
+
+Please also see README and PORTING.
+
+If you have questions, additional insights or (even better) patches regarding
+net-snmp on Tru64 Unix, please refer to the net-snmp mailing lists (see
+http://www.net-snmp.org/lists).
diff --git a/cleopatre/application/spidnetsnmp/README.win32 b/cleopatre/application/spidnetsnmp/README.win32
new file mode 100644
index 0000000000..ba0f17b30b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/README.win32
@@ -0,0 +1,1760 @@
+***************************************************************************
+*
+* README.win32
+*
+***************************************************************************
+
+This guide describes building with Microsoft Visual C++ 6.0 and higher, with
+the gcc compiler from MinGW / MSYS, and with the gcc compiler from Cygwin.
+As developers build with other Win32 environments, their notes will be
+included here.
+
+The remainder of this guide has the following sections :
+
+Status as of 14-Oct-2006 for Win32 platforms
+Interactions with Other Vendor's Products
+Running Net-SNMP as a replacement for the Microsoft SNMP service
+Co-existence with Microsoft SNMP services
+Installing Platform SDK
+Microsoft Visual C++ - Overview
+Microsoft Visual C++ - Configure / nmake - Building
+Microsoft Visual C++ - Workspace - Building
+Microsoft Visual C++ - Workspace - Building the DLL
+Microsoft Visual C++ - Workspace - Building the Perl SNMP modules
+Microsoft Visual C++ - Workspace - Installing
+Microsoft Visual C++ - Building with OpenSSL
+Microsoft Visual C++ - Building with IPv6
+Microsoft Visual C++ - Building your own applications with snmplib
+Microsoft Visual C++ - Extending the Agent
+GCC on Windows
+Cygwin - Building
+MinGW - Building
+MinGW - Building with OpenSSL
+Configuring Net-SNMP
+How to Register the Net-SNMP Agent and Trap Daemon as Windows services
+Notes on SET support for WIN32 ports
+Notes on preprocessor defines for MSVC, MinGW and Cygwin
+Acknowledgements
+
+
+***************************************************************************
+*
+* Status as of 14-Oct-2006 for Win32 platforms
+*
+***************************************************************************
+
+All applications build with Microsoft Visual C++ 6.0, Microsoft Development
+Environment 2003 (MSVC 7.0/7.1), gcc under Cygwin, and gcc under MinGW.
+
+ - All of the applications work
+ (snmpwalk, snmpget, snmpset, snmptrap, etc...).
+ - The system, snmp, ip, tcp, udp, icmp mibgroups function
+ (when agent is built using the snmpdsdk project).
+ - The Net-SNMP agent runs as an AgentX master agent or as subagent.
+ - smux is working.
+ - The target, notification, disman/mte groups compile but are not tested.
+ - The TCP/IPv6 and UDP/IPv6 transports compile but are not tested.
+
+ - Extending the agent to support enterprise-specific MIBs works.
+ - Running the agent on a non-standard UDP or TCP port works.
+ - Snmpd can be registered as a Windows NT/2000/XP service.
+ - Snmptrapd can be registered as a Windows NT/2000/XP service.
+ - Some build environments allow long pathnames that contain
+ embedded spaces. As this is not true for Cygwin "configure",
+ the documented example scripts will refer to "c:/usr"
+ as the base directory for installed Net-SNMP software.
+ - When using the winExtDLL extension agent, the Net-SNMP agent will
+ load the Windows SNMP Service extension DLLs
+
+The next subsection relates to items that are built using Visual Studio
+
+ - All Visual Studio project (.dsp) files are cleaned, and
+ a) Generate code to use Multi-Threaded DLL (/MD) "C" run-time library;
+ b) Provide the same preprocesor defines (WIN32,_CONSOLE,_MBCS);
+ c) Remove unnecessary references to GDI, ODBC, and "C" libraries;
+ d) Debug versions build source browsing and debugging information;
+ e) Provide consistent include search paths.
+
+ - All Debug and Release targets linked with libsnmp project targets
+ build without errors, and are fully functional.
+
+ - Both the Workspace graphical environment and command line nmake is
+ supported for building under MSVC.
+
+
+***************************************************************************
+*
+* Interactions with Other Vendor's Products
+*
+***************************************************************************
+
+ - Install scripts etc are written assuming Windows NT / 2000 or higher
+
+ - Running the Net-SNMP Agent or trap receiver on Windows 95 or Win3.1
+ is not supported.
+
+ - Running the Net-SNMP Agent or trap receiver as a service on Windows 95
+ or Windows 98 is not supported.
+
+ - The Net-SNMP agent and trap receiver will fail to start if either
+ cannot bind to their connect port (161 for agent, 162 for trap receiver).
+ Check the Services panel to be sure no other SNMP program conflicts. See
+ the section titled 'Co-existence with Microsoft SNMP services' below.
+
+ - Running the Net-SNMP agent instead of the MS supplied one works
+ (at the loss of most of the functionality). See the section titled
+ 'Co-existence with Microsoft SNMP services' below.
+
+ - The Net-SNMP agent does not use the MS SNMP.dll, therefore it cannot
+ run as an extensible part of the MS agent. It is possible to use a third
+ party proxy agent for the MS agent to 'proxy' requests to the Net-SNMP
+ agent listening on a different UDP port on the same machine.
+
+ - Snmptrapd does not "share" nor multiplex traps with SNMPTRAP.EXE,
+ a program that is available from Microsoft or ACE#COMM.
+
+
+***************************************************************************
+*
+* Running Net-SNMP as a replacement for the Microsoft SNMP service
+*
+***************************************************************************
+
+As of Net-SNMP 5.4, the Net-SNMP agent is able to load the Windows SNMP
+service extension DLLs by using the Net-SNMP winExtDLL extension.
+
+The Windows SNMP service must be installed, but the service must be disabled.
+This is required so that the extension DLLs are available for loading, and
+also because this extension and the existing Windows extensions use the
+Windows SNMP API from snmpapi.dll.
+
+An alternative to winExtDLL is to proxy requests from Net-SNMP to the Windows
+SNMP service. See the section 'Co-existence with Microsoft SNMP services'.
+
+
+Limitations
+-----------
+
+- For an unknown reason, linkUp/Down generic traps are not received from the
+ Windows SNMP RFC1156Agent extension. The DLL has an exported function called
+ Mib2DLLEntry, but the use for this function is not known so this may or may
+ not be related. Other extensions are able to send traps without any issues.
+
+- When using HP Insight Agents, some parts of the enterprises.232 tree are not
+ accessible. The cause of this is not known.
+
+- sysUpTime.0 does not report the correct uptime for the agent. This is
+ because the Windows extension checks for the uptime of the SNMP service,
+ which is not running when Net-SNMP is running.
+
+
+Enabling the Windows SNMP extension agents
+------------------------------------------
+
+When installing Net-SNMP using the binary available from the web site, select
+'With Windows Extension DLL support' for the 'Net-SNMP Agent Service'.
+
+The recommended way to start snmpd is with the following command line:
+
+ snmpd.exe -I-udp,udpTable,tcp,tcpTable,icmp,ip,interfaces,system_mib,sysORTable
+
+The above command will exclude all the Net-SNMP extensions that overlap with
+the default Windows (2003) extensions included with Windows. Other Net-SNMP
+modules take precedence over the modules loaded by winExtDLL.
+
+The binary install of Net-SNMP includes shortcuts in the Start menu for registering
+and unregistering snmpd and snmptrapd as a service with the correct command line
+options.
+
+A simple test to see if winExtDLL is working is to get the sysDescr string.
+
+ snmpget -v 1 -c public localhost sysDescr.0
+
+If you see something similar to:
+
+ Hardware: x86 Family 15 Model 12 Stepping 0 AT/AT COMPATIBLE - Software:
+ Windows 2000 Version 5.0 (Build 2195 Uniprocessor Free)
+
+instead of the usual Net-SNMP:
+
+ Windows host1 5.0.2195 Service Pack 4 2000 Server x86 Family 15 Model 12
+ Stepping 0
+
+then it's using the Windows DLLs. You may also notice that your floppy
+drive is accessed when starting the service. This is from one of the
+Windows extensions.
+
+To see what Windows modules are being loaded, you can shut down the
+service and then run snmpd.exe from the command line with winExtDLL
+debugging enabled using (all on one line):
+
+ snmpd.exe -I-udp,udpTable,tcp,tcpTable,icmp,ip,interfaces,system_mib,
+ sysORTable -DwinExtDLL
+
+The Windows DLL snmpmib.dll (SNMPMIB) contains SNMP traffic statistics
+(.1.3.6.1.2.1.11). As we are using Net-SNMP and not the Windows SNMP Service,
+no values will be returned from the Windows extension. To allow SNMP
+statistics to be received, the Net-SNMP module snmp_mib is permitted to load
+by not excluding it in the above command line. As stated above, this module
+will take precedence over the Windows module.
+
+
+Registry Information
+--------------------
+
+Warning: Improper use of the registry editor can damage to your operating
+ system and should only be used by experienced users.
+
+The following registry keys are used by the Windows SNMP Service to determine
+what extension DLLs to load:
+
+HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ExtensionAgents
+
+Each REG_SZ value contains the registry path to an extension agent which
+contains the path to the DLL. For example:
+
+Name Type Value
+1 REG_SZ SOFTWARE\Microsoft\LANManagerMIB2Agent\CurrentVersion
+
+To prevent winExtDLL from loading the above extension, change the registry
+path to an invalid path such as:
+
+Name Type Value
+1 REG_SZ SOFTWARE\Microsoft\LANManagerMIB2Agent\CurrentVersion!!!
+
+
+Service dependencies
+--------------------
+
+Services that depend on the SNMP Service will have to be modified to depend on
+Net-SNMP instead of SNMP by modifying the registry. See Microsoft article
+193888 for more information.
+
+
+Compiling Net-SNMP with the winExtDLL extension (MSVC)
+------------------------------------------------------
+
+Microsoft PSDK required.
+
+Configure / nmake:
+
+-add --with-winextdll to the Configure command line.
+
+Workspace:
+
+-modify win32\net-snmp\net-snmp-config.h and add:
+ #define USING_WINEXTDLL_MODULE 1
+
+-modify win32\netsnmpmibssdk\netsnmpmibssdk.dsp:
+ uncomment winExtDLL lines
+
+ add to lines that contain # ADD LIB32 (line that contains iphlpapi.lib):
+ MgmtAPI.lib snmpapi.lib
+
+ add near the bottom of the file:
+
+ # Begin Source File
+
+ SOURCE=..\..\agent\mibgroup\winExtDLL.c
+ # End Source File
+
+
+-This extension requires the PSDK including the Snmp.h header file.
+ Including Snmp.h will conflict with existing Net-SNMP defines for
+ ASN_OCTETSTRING etc. To resolve this, create a copy of Snmp.h in
+ the PSDK include/ folder called Snmp-winExtDLL.h and change all
+ occurances of ASN_ to MS_ASN_
+
+
+***************************************************************************
+*
+* Co-existence with Microsoft SNMP services
+*
+***************************************************************************
+
+If the Microsoft SNMP agent service (SNMP Service) is running, the Net-SNMP
+agent (snmpd) will fail to start as it will not be able to bind to the default
+TCP/IP port of 161.
+
+If the Microsoft SNMP Trap Receiver service is running, the Net-SNMP trap
+receiver (snmptrapd) will fail to start as it will not be able to bind to the
+default TCP/IP port of 162.
+
+It is not a requirement to install the Net-SNMP agent (snmpd) or trap receiver
+(snmptrapd). All the command line utilties such as snmpget.exe, snmpset.exe
+and the Perl modules will work without the Net-SNMP services. All the
+utilities will work against any SNMP agent.
+
+The main benefit of running the Microsoft SNMP agent instead of the Net-SNMP
+agent is that many Windows applications such as Microsoft SQL Server,
+Microsoft Exchange etc, extend the Microsoft agent. Net-SNMP is NOT a drop
+in replacement for the Microsoft agent unless the winExtDLL Net-SNMP extension
+is used (see the section 'Running Net-SNMP as a replacement for the Microsoft
+SNMP service'). Running Net-SNMP in place of the Microsoft agent (without
+winExtDLL) will prevent the other applications from working with SNMP. Also,
+the Net-SNMP agent does not contain as many MIBs as the Microsoft agent. For
+example, as of August 2005, the HOST-RESOURCES (host) MIB is not yet
+implemented in Net-SNMP.
+
+There are many benefits of running the Net-SNMP agent instead of the Microsoft
+such as you can extend the agent using various features found in snmpd.conf
+such as pass and pass_persist (support for others are being added), you can
+use SNMP v3, and there is more granular access control.
+
+To allow both the Microsoft and Net-SNMP agent / trap receiver to run at the
+same time, the default TCP/IP port must be changed on either the Microsoft or
+Net-SNMP version of the application.
+
+The Net-SNMP ports for snmpd and snmptrapd can be modified via snmpd.conf and
+snmptrapd.conf or by using a command line option with each program. See the
+Net-SNMP Help file for instructions on changing the port number.
+
+The Microsoft services use the 'snmp' and 'snmptrap' entries in the SERVICES
+file (%SystemRoot%\system32\drivers\etc\services) to determine the port to bind
+the service to when the service starts. Simply modify the entries and restart
+the affected services.
+
+Note: Changing the default port the service listens on will prevent it from
+ accepting requests or receiving traps from standard SNMP devices and
+ management stations unless they have also been reconfigured to use the
+ new port numbers.
+
+It is possible to configure Net-SNMP agent to listen on the default UDP port
+(161), have the Microsoft agent listen on another port such as 1161, and have
+Net-SNMP proxy (forward) requests to the Microsoft agent. This will allow you
+to use the advanced features of Net-SNMP while still being able to query
+the Microsoft agent and subagents. To this, follow these steps:
+
+ 1. Change the port that the Microsoft agent listens on.
+
+ 2. Configure the Microsoft agent to only accept requests from localhost.
+ This can be set in the Security tab for the SNMP service in Windows 2000+.
+ This is recommended to prevent users from querying the Microsoft agent
+ directly.
+
+ 3. Add a r/c community string to the Microsoft agent. This can be set in
+ the Security tab for the SNMP service in Windows 2000+. This will give
+ Net-SNMP full SNMP access. User access can be restricted by Net-SNMP
+ as explained below.
+
+ 4. Restart the Microsoft SNMP service.
+
+ 5. Configure Net-SNMP to proxy requests to the Microsoft agent. To have it
+ forward ALL requests to the Microsoft agent, add the following line to
+ snmpd.conf:
+
+ proxy -v 1 -c public localhost:1161 .1.3
+
+ To only forward a section of the MIB tree such as the host section, use:
+
+ proxy -v 1 -c public localhost:1161 host
+
+ 6. Start the Net-SNMP agent.
+
+ Notes: If Net-SNMP has built in support for an OID and the proxy statement
+ is not for a specific OID, then it will respond instead of proxying
+ the request. For example, if you proxy the 'system' tree and issue
+ an snmpget for sysDescr.0, Net-SNMP will respond with it's own
+ version of sysDescr.0 instead of forwarding it. To prevent Net-SNMP
+ from doing this, you must prevent the system MIB from being
+ initialized when snmpd.exe is started by specifying what MIBS to
+ initialize using the -I switch.
+
+ If you are forwarding everything to the Microsoft agent (.1.3),
+ start snmpd.exe using:
+
+ snmpd.exe -Ivacm_conf,proxy,pass,pass_persist
+
+ The above will enable proxy, pass and pass_persist support. See the
+ snmpd man page for more information on the -I switch.
+
+ If you are forwarding a section of the tree that is not immplemented
+ in Net-SNMP such as 'host', you do not need to use the -I switch as
+ Net-SNMP will forward the request. This may cause issues in the
+ future if newer versions of Net-SNMP implement the section of the
+ tree you are forwarding, such as the HOST-RESOURCES MIB.
+
+ The pass and pass_persist commands will work even if the entire
+ tree is proxied to the Microsoft Agent.
+
+ 7. Test the agent. If you have forwarded the entire tree, issue an snmpget
+ for sysDescr.0. For example:
+
+ snmpget -v 1 -c public localhost sysDescr.0
+
+ The Microsoft agent will respond in a format similar to:
+
+ Hardware: x86 Family 15 Model 12 Stepping 0 AT/AT COMPATIBLE - Software:
+ Windows 2000 Version 5.0 (Build 2195 Uniprocessor Free)
+
+ The Net-SNMP agent would normally respond in a format similar to:
+
+ Windows host1 5.0.2195 Service Pack 4 2000 Server x86 Family 15 Model 12
+ Stepping 0
+
+If you had previously configured the Microsoft agent with multiple community
+strings to restrict who can read and write to the OID tree, the security
+settings should be transferred to snmpd.conf. For example, if the Microsoft
+agent was configured with:
+
+ Community Rights
+ ---------------------------------
+ public read
+ S3cur39876 read/write
+ Sn0wb0ard345 read/create
+
+Add the following to snmpd.conf:
+
+ rocommunity public
+ rwcommunity S3cur39876
+ rwcommunity Sn0wb0ard345
+
+It is possible to add more granular security using Net-SNMP. For example, to
+restrict the public community string to only read the system tree, use:
+
+ rocommunity public 0.0.0.0 system
+
+See the snmpd.conf man page for more information on configuring security.
+
+
+***************************************************************************
+*
+* Installing Platform SDK
+*
+***************************************************************************
+
+If you are compiling using Microsoft Visual C++ 6.0, it is recommended that
+you install the Core Platform SDK (PSDK). Without the PSDK, some functionality
+will be disabled such as the core elements of the mibII group of the agent
+which use the "IP Helper API" (IPHLPAPI).
+
+To determine what code is disabled when the PSDK is not used, search the
+source code for HAVE_WIN32_PLATFORM_SDK.
+
+The PSDK can be downloaded from the MSDN site. Go to http://msdn.microsoft.com
+and do a search for 'psdk download' (without the quotes). You should find both
+a web install and a full install.
+
+When installing the SDK, all that is required is the 'Core'.
+
+Once this package has installed, from the Start Menu run
+ "Programs ->Microsoft Platform SDK... ->
+ Visual Studio Registration ->
+ Register PSDK Directories with Visual Studio"
+
+If you are compiling using any of the following systems, the PSDK download
+is not necessary, as the required parts of the PSDK are included with the
+installation of the compiler:
+
+ - Microsoft Development Environment 2002 (MSVC 7.0)
+ - Microsoft Development Environment 2003 (MSVC 7.1)
+ - Cygwin (gcc)
+ - MinGW (gcc)
+
+In order for the process part of the host resources MIB to work under Windows
+NT you will need to obtain PSAPI.DLL. This is available under the download
+section of www.microsoft.com. The DLL is included with Windows 2000 and XP,
+and is also part of the VC++ distribution.
+
+If you are building Net-SNMP using Cygwin, go now to "Cygwin - Building".
+If you are building Net-SNMP using MinGW, go now to "MinGW - Building".
+Otherwise, see the Building section below.
+
+
+***************************************************************************
+*
+* Microsoft Visual C++ - Overview
+*
+***************************************************************************
+
+There are two ways to build Net-SNMP using Microsoft Visual C++. The first
+and easiest method is using Configure and nmake on the command line, and the
+second is using the Workspace files with the graphical interface.
+
+To use nmake on the command line, the Configure script is run first to create
+the various make files. Once they are created, nmake is used to build the
+applications. Perl is required to use this method, as the Configure script
+is written in Perl. ActiveState ActivePerl is available at:
+
+ http://www.activestate.com/Products/ActivePerl/
+
+The make file system is based on and uses the directory structure of the
+projects contained in the Workspace files which are described below. It is
+recommended that you read and understand how the workspaces are configured
+even if you will only be using the command line Configure / nmake system.
+
+For the graphical interface, there are two main Win32 workspaces
+('win32.dsw' and 'win32sdk.dsw'), containing more or less the same set
+of projects, plus 'libdll.dsw' which contains a minimal set of projects
+for use with the Perl module only.
+
+Win32.dsw is for developers who have not installed the Platform SDK from
+Microsoft's MSDN SDK Update site when using Microsoft Visual Studio 6.0.
+Win32sdk.dsw is for those who have or who are using the Microsoft Development
+Environment 2002/2003 (MSVC 7.0/7.1), Cygwin (gcc) or MinGW (gcc).
+
+Libdll.dsw compiles a DLL version of snmplib (netsnmp.dll).
+
+There is one core development library ('libsnmp'), together with a number
+of utility projects for the individual executable commands ('snmpget',
+'snmpwalk', etc...). All of these projects require the .lib created by
+the libsnmp project.
+
+The agent requires the core library plus the other three library projects
+('libagent', libhelpers' and either 'netsnmpmibs' or 'netsnmpmibssdk'
+depending on which workspace is being used) together with the main agent
+project (either 'snmpd' or 'snmpdsdk').
+
+The final application project is the trap handler 'snmptrapd'. This also
+requires the agent libraries ('libagent', 'libhelpers' and 'netsnmpmibs')
+as well as the core development library.
+
+There is a Debug version and Release version for each subproject.
+This is so the Debug and Release versions of an application can be built and
+tested separately.
+
+Both VC++ 6.0 and 7.1 have been tested. Building with earlier Microsoft
+compiler versions is no longer supported.
+
+Note: Compiling Net-SNMP using MSVC 2003 .NET (MSVC 7.1) will add a
+ dependency of MSVCR71.DLL for NETSNMP.DLL and all applications.
+ Search msdn.microsoft.com for msvcr71.dll for more information
+ on distributing applications compiled with MSVC 2003 .Net.
+
+OpenSSL is required to support the encryption capabilities in SNMPv3,
+or SHA authentication.
+
+Since the MSVC build environment does not natively use "configure" nor "make"
+to generate the various pathnames that the programs require, the header files
+need to be manually modified when using the graphical build system, and an
+install script is provided. When using the Perl Configure / nmake system,
+the header files are automatically modified and require no manual editing.
+
+The projects are arranged so that ALL of the usable products, the .exe files,
+are written to the win32\bin directory. The win32\lib directory is used only
+to build the the files in the win32\bin directory. Once building is
+completed, there is no further use for the files in the win32\lib directory.
+
+Debug Information
+-----------------
+
+Note that VC++ 6.0 has options for debugging information - the 'Program
+Database'. This option is set in the Project settings, C/C++ tab, 'General'
+category, and is turned on by default during the conversion of the project
+files. This option is not for use with a library, as it embeds debug
+information into the library that references an external file that will
+not be available to the linking application. If you get an error message
+along the lines of 'debugging information not available in file vc60.pdb,
+make sure the library debug option is set to 'Program Database' or "/Zi".
+
+
+***************************************************************************
+*
+* Microsoft Visual C++ - Configure / nmake - Building
+*
+***************************************************************************
+
+There are two ways to build Net-SNMP using the Configure / nmake system.
+The first and easiest method is by running the win32\build.bat script. The
+second is manually running Configure and nmake.
+
+Note: Perl is required to use this method as the Configure script is
+ written in Perl. ActiveState ActivePerl is available at:
+
+ http://www.activestate.com/Products/ActivePerl/
+
+
+Win32\build.bat script
+======================
+
+The build.bat script is an easy menu driven system that allows you to select
+how Net-SNMP should be built, and where it should be installed. Follow these
+steps to build using build.bat:
+
+1. Open a command prompt
+
+2. Initialize the Visual Studio build environment by running VCVARS32.bat
+ which can be found in the bin folder of your Visual Studio install folder.
+
+3. Run win32\build.bat
+
+4. The following screen will appear:
+
+ Net-SNMP build and install options
+ ==================================
+
+ 1. OpenSSL support: disabled
+ 2. Platform SDK support: disabled
+
+ 3. Install path: c:/usr
+ 4. Install after build: enabled
+
+ 5. Perl modules: disabled
+ 6. Install perl modules: disabled
+
+ 7. Quiet build (logged): enabled
+ 8. Debug mode: disabled
+
+ 9. IPv6 transports (requires SDK): disabled
+ 10. winExtDLL agent (requires SDK): disabled
+
+ 11. Link type: static
+
+ 12. Install development files disabled
+
+ F. Finished - start build
+ Q. Quit - abort build
+
+ Select option to set / toggle:
+
+5. Toggle the options on and off as desired by typing the line number
+ followed by <enter>.
+
+ To compile with OpenSSL, the OpenSSL library and header files must
+ already be installed. See the section 'Microsoft Visual C++ - Building
+ with OpenSSL' for details.
+
+ To compile with the Platform SDK, the Platform SDK must already be
+ installed. See the section 'Installing Platform SDK' for details.
+
+ To use the IPv6 transports, you must be using Windows 98 or later.
+
+ See the section 'Running Net-SNMP as a replacement for the Microsoft
+ SNMP service' for important information on using the winExtDLL agent.
+
+ If Quiet mode is enabled, all build activity is stored in various *.out
+ files inside of the win32 folder.
+
+ When you are ready to build, type f <enter>
+
+6. Building will begin. Following is a sample screen shot of a quiet build:
+
+ Building...
+
+ Deleting old log files...
+ Running Configure...
+ Cleaning...
+ Building main package...
+ Installing main package...
+ Running Configure for DLL...
+ Cleaning libraries...
+ Building DLL libraries...
+ Installing DLL libraries...
+ Cleaning Perl....
+ Building Perl modules...
+ Testing Perl modules...
+ Installing Perl modules...
+
+ See perlmake.out for Perl test results
+
+ Done!
+
+7. If the folder that Net-SNMP was installed to is ever changed, modify the
+ system environment variables or registry keys as explained in the
+ 'Configuration_Overview.html' file located in win32/dist/htmlhelp.
+
+
+Manual build using Configure / nmake
+====================================
+
+To build using nmake on the command line, the make files need to be generated
+first by the Configure script. Following are sample steps to:
+
+ -enable Platform SDK support
+ -enable OpenSSL support
+ -enable debug mode
+ -build Net-SNMP
+ -install to 'c:\usr'
+ -compile the Perl modules
+ -test the Perl modules
+ -install the Perl modules
+
+1. Open a command prompt
+
+2. Initialize the Visual Studio build environment by running VCVARS32.bat
+ which can be found in the bin folder of your Visual Studio install folder.
+
+3. Type (all on one line):
+
+ perl Configure --with-sdk --with-ssl --config=debug
+ --prefix="c:/usr"
+
+4. The make files will be generated, and a configuration summary will appear:
+
+ ---------------------------------------------------------
+ Net-SNMP configuration summary:
+ ---------------------------------------------------------
+
+ Config type: debug
+ SDK: enabled
+ Link type: static
+ Prefix / Destdir: c:/usr
+ OpenSSL: enabled
+
+5. Type:
+
+ nmake clean
+ nmake
+ nmake install
+
+ perl Configure --with-sdk --with-ssl --config=debug --linktype=dynamic
+ --prefix="c:/usr"
+
+ nmake libs_clean
+ nmake libs
+ nmake install
+
+ nmake perl_clean
+ nmake perl
+ nmake perl_test
+ nmake perl_install
+
+For a complete list of Configure options, run:
+
+ perl Configure --help
+
+For a complete list of possible build targets, after generating the make files
+using Configure, run:
+
+ nmake help
+
+Note: The Configure option --linktype=static (or not specifying a linktype)
+ will result in libsnmp being compiled and all other components being
+ statically linked to it.
+
+ The Configure option --linktype=dynamic will result in libsnmp_dll
+ (netsnmp.dll) being compiled and all other components being dynamically
+ linked to it.
+
+
+***************************************************************************
+*
+* Microsoft Visual C++ - Workspace - Building
+*
+***************************************************************************
+
+The win32sdk.dsw workspace will build the agent that provides mib-II objects
+for network interface layers, and the IP, ICMP, TCP and UDP tables. This
+workspace requires the Platform SDK to be installed. Use the win32.dsw
+workspace if you don't have or don't need these features. Note: Other
+features may be disabled if the Platform SDK is not used. See the section
+'Installing Platform SDK' for more information.
+
+1. If SNMPv3 encryption capabilities or SHA authentication is required,
+ install the OpenSSL DLL and library file as described in the section
+ 'Microsoft Visual C++ - Building with OpenSSL" and then continue with
+ step 2.
+
+2. The default installation path is c:\usr. This folder will contain all
+ the binaries, MIB files, configuration files etc. To change the location,
+ the win32\net-snmp\net-snmp-config.h file needs to be modified by changing
+ the INSTALL_BASE variable.
+
+ Note:
+
+ All paths in net-snmp-config.h use the "/" UNIX pathname delimiter.
+ If a drive letter is not specified, the current drive letter is assumed.
+
+ For example: #define INSTALL_BASE "c:/usr".
+
+3. If you are using win32sdk, the Platform SDK must be enabled. Edit the
+ the win32\net-snmp\net-snmp-config.h file and *change*:
+
+ /* #undef HAVE_WIN32_PLATFORM_SDK */
+
+ to:
+
+ #define HAVE_WIN32_PLATFORM_SDK 1
+
+4. Build the applications
+
+ Static build (does not use NetSNMP.DLL)
+ =======================================
+
+ MS VC++ 6.0:
+ ------------
+ a. Open win32.dsw or win32sdk.dsw.
+ b. Click "Build->Batch Build..."
+ c. Set Release and/or Debug in 'Project configurations' to suit.
+ d. Click "ReBuild All".
+ e. When building is done, View the Output window, clip and
+ save to a text file if there is some information to share.
+ f. Click "File->Close Workspace".
+
+ MS VC++ 7.0+:
+ -------------
+ a. Open win32.dsw or win32sdk.dsw.
+ b. Click "Yes to All" to convert the workspace
+ c. Click "Build->Configuration Manager" and select either Release or Debug for
+ 'Active Solution Configuration' and click "Close"
+ d. Right-click the "libagent" project, and select "Rebuild"
+ e. Right-click the "libhelpers" project, and select "Rebuild"
+ f. Right-click the "libnetsnmptrapd" project, and select "Rebuild"
+ g. Right-click the "snmplib" project, and select "Rebuild"
+ h. Right-click the "netsnmpmibs(sdk)" project, and select "Rebuild"
+ i. Click "Build->Batch Build..."
+ j. Set Release and/or Debug in 'Project configurations' to suit making
+ sure libagent, libhelpers, libnetsnmptrapd, snmplib and netsnmpmibs are
+ NOT selected.
+ k. Click "Rebuild".
+ l. When building is done, View the Output window, clip and
+ save to a text file if there is some information to share.
+ m. Click "File->Close Solution".
+
+ Dynamic build (uses NetSNMP.DLL)
+ ================================
+
+ Complete the section 'Microsoft Visual C++ - Workspace - Building the DLL'.
+ This will create the Net-SNMP library DLL which is needed by the
+ applications and will enable DLL support in net-snmp-config.h.
+
+ MS VC++ 6.0:
+ ------------
+ a. Open win32.dsw or win32sdk.dsw.
+ b. Click "Build->Batch Build..."
+ c. Set Release and/or Debug in 'Project configurations' to suit for the
+ applications. Make sure the following are NOT selected:
+
+ libagent
+ libhelpers
+ libsnmp
+ netsnmpmib(sdk)
+ libnetsnmptrapd
+
+ d. Click "ReBuild All".
+ e. When building is done, View the Output window, clip and
+ save to a text file if there is some information to share.
+ f. Click "File->Close Workspace".
+
+ MS VC++ 7.0+:
+ -------------
+ a. Open win32.dsw or win32sdk.dsw.
+ b. Click "Yes to All" to convert the workspace
+ c. Click "Build->Configuration Manager" and select either Release or Debug for
+ 'Active Solution Configuration' and click "Close"
+ d. Click "Build->Batch Build..."
+ e. Set Release and/or Debug in 'Project configurations' to suit for the
+ applications. Make sure the following are NOT selected:
+
+ libagent
+ libhelpers
+ libsnmp
+ netsnmpmib(sdk)
+ libnetsnmptrapd
+
+ f. Click "Rebuild".
+ g. When building is done, View the Output window, clip and
+ save to a text file if there is some information to share.
+ h. Click "File->Close Solution".
+
+5. If the Perl modules are required, continue with the next section:
+ 'Microsoft Visual C++ - Building the Perl SNMP modules'.
+
+ Otherwise, continue with the section:
+ 'Microsoft Visual C++ - Installing'
+
+
+***************************************************************************
+*
+* Microsoft Visual C++ - Workspace - Building the DLL
+*
+***************************************************************************
+
+1. Optional: Make a backup of the existing net-snmp-config.h which contains
+ settings for a static build of Net-SNMP:
+
+ Copy win32\net-snmp\net-snmp-config.h to
+ win32\net-snmp\static-config.h.
+
+2. Open win32\net-snmp\net-snmp-config.h using a text editor.
+
+3. *Change* the following line which is located near the top of the file:
+
+ /* #undef NETSNMP_USE_DLL */
+
+ *to*
+
+ #define NETSNMP_USE_DLL 1
+
+4. Optional: Make a backup of the new net-snmp-config.h which contains
+ settings for a DLL build of Net-SNMP:
+
+ Copy win32\net-snmp\net-snmp-config.h to
+ win32\net-snmp\dll-config.h.
+
+5. Build the DLL
+
+ MS VC++ 6.0:
+ ------------
+ a. Open libsdll.dsw.
+ b. Click "Build->Batch Build..."
+ c. Set Release and/or Debug in 'Project configurations' to suit.
+ d. Click "Clean". ** Do NOT skip this step. **
+ e. Click "Build->Batch Build..."
+ f. Click "ReBuild All".
+ g. When building is done, View the Output window, clip and
+ save to a text file if there is some information to share.
+ h. Click "File->Close Workspace".
+
+ MS VC++ 7.0+:
+ -------------
+ a. Open libsdll.dsw.
+ b. Click "Yes to All" to convert the workspace
+ c. Click "Build->Batch Build..."
+ d. Set Release and/or Debug in 'Project configurations' to suit.
+ e. Click "Clean". ** Do NOT skip this step. **
+ f. Click "Build->Batch Build..."
+ g. Click "Rebuild".
+ h. When building is done, View the Output window, clip and
+ save to a text file if there is some information to share.
+ i. Click "File->Close Solution".
+
+
+***************************************************************************
+*
+* Microsoft Visual C++ - Workspace - Building the Perl SNMP modules
+*
+***************************************************************************
+
+The Perl modules should be compiled against the DLL version of snmplib.
+Compiling against a static version is possible, but each module will
+load it's own copy of the MIB, and sharing data between modules will
+not be possible. For example, the conf module tests will fail.
+
+1. Complete the section 'Microsoft Visual C++ - Building'. This will build
+ the applications.
+
+ Note: SNMPD.EXE and SNMPTRAPD.EXE are required for running the tests
+ against the SNMP Perl module.
+
+2. Complete the section 'Microsoft Visual C++ - Workspace - Building the DLL'.
+ This will create the Net-SNMP library DLL which is needed for the Perl
+ modules. Note: This step can be skipped if the DLL was already created
+ in step 1.
+
+3. Install Net-SNMP as described in the 'Microsoft Visual C++ - Installing'
+ section to install the applications, the DLL and the .lib files.
+
+4. Continue with the Win32 section of the Perl README file located in
+ perl\SNMP\README.
+
+
+***************************************************************************
+*
+* Microsoft Visual C++ - Workspace - Installing
+*
+***************************************************************************
+
+The install script "win32\install-net-snmp.bat" should be run after a
+build is successful. It copies the programs, MIB files, and development
+components to an install directory named in the INSTALL_BASE variable.
+
+1. Complete the section 'Microsoft Visual C++ - Building'.
+
+2. Open win32\install-net-snmp.bat using a text editor.
+
+ The INSTALL_BASE variable must match the INSTALL_BASE compile constant
+ defined in "win32\net-snmp\net-snmp-config.h", using these rules:
+
+ a. All paths in install-net-snmp.bat use the "\" DOS pathname delimiter.
+
+ Example: set INSTALL_BASE="c:\usr".
+
+ b. All paths in net-snmp-config.h use the "/" UNIX pathname delimiter.
+ If a drive letter is not specified, the current drive letter is
+ assumed.
+
+ Example: #define INSTALL_BASE "c:/usr".
+
+ Note: You may also modify "install-net-snmp.bat" in order to not install
+ the linking libraries, or the header files.
+
+3. Open a command prompt window.
+
+4. Cd to the base directory where this file README.win32 is located.
+
+5. Run win32\install-net-snmp.bat to install the programs.
+
+ ## sample output from install-net-snmp.bat
+
+ NOTE: Directory already exist messages are normal. If you are
+ not building with OpenSSL, then DLL not found messages
+ are normal.
+
+ C:\net-snmp-5.1.1> win32\install-net-snmp
+ Remember to run this script from the base of the source directory.
+ Creating "c:\usr" sub-directories
+ A subdirectory or file c:\usr already exists.
+ A subdirectory or file c:\usr\bin already exists.
+ A subdirectory or file c:\usr\etc\snmp already exists.
+ A subdirectory or file c:\usr\share\snmp\snmpconf-data
+ already exists
+ A subdirectory or file c:\usr\share\snmp\snmpconf-data\
+ snmp-data already exists.
+ A subdirectory or file c:\usr\share\snmp\snmpconf-data\
+ snmpd-data already exists.
+ A subdirectory or file c:\usr\share\snmp\snmpconf-data\
+ snmptrapd-data already exists.
+ A subdirectory or file c:\usr\lib already exists.
+ A subdirectory or file c:\usr\mibs already exists.
+ A subdirectory or file c:\usr\include already exists.
+ A subdirectory or file c:\usr\include\net-snmp already
+ exists
+ .
+ A subdirectory or file c:\usr\include\ucd-snmp already
+ exists
+ .
+ Copying MIB files to "c:\usr"\mibs
+ Copying compiled programs to "c:\usr"\bin
+ Copying snmpconf files to "c:\usr"\share\snmp\snmpconf-
+ data\snmp-data
+ Copying link libraries to "c:\usr"\lib
+ Copying header files to "c:\usr"\include
+ Deleting debugging files from "c:\usr"
+ Copying DLL files to "c:\usr"
+ The system cannot find the file specified.
+ Done copying files to "c:\usr"
+ C:\net-snmp-5.1.1>
+
+ ## END sample output from install-net-snmp.bat
+
+6. Add the bin folder (c:\usr\bin in the above example) to
+ your system path.
+
+7. Test the installation. For a simple test to see if Net-SNMP is working,
+ open a _new_ command prompt window, and type:
+
+ snmptranslate -IR -Td linkDown
+
+8. If the folder that Net-SNMP was installed to is ever changed, modify the
+ system environment variables or registry keys as explained in the
+ 'Configuration_Overview.html' file located in win32/dist/htmlhelp.
+
+
+***************************************************************************
+*
+* Microsoft Visual C++ - Building with OpenSSL
+*
+***************************************************************************
+
+OpenSSL is required to support the encryption capabilities in SNMPv3
+(or SHA authentication). The win32 version of OpenSSL can be built
+from the sources or you can download a pre-compiled version.
+
+Building from source:
+=====================
+
+ 1. Install an assembler. If you do not have the M$ assembler installed (MASM)
+ you can get a free one(NASM) from:
+
+ http://www.kernel.org/pub/software/devel/nasm
+
+
+ 2. Obtain the OpenSSL source from the link below. Follow instructions in
+ INSTALL.W32
+
+ ftp://ftp.openssl.org/source/
+
+
+ 3. Once the OpenSSL libraries are built, you must copy them to the the MSVC
+ directory:
+
+ a. Copy folder inc32\openssl to the include folder of MSVC++
+
+ Example: "C:\Program Files\Microsoft Visual Studio .NET 2003\
+ Vc7\include\openssl\*.h"
+ Example: "C:\Program Files\Microsoft Visual Studio\
+ VC98\include\openssl\*.h"
+
+ b. Copy file out32dll\libeay32.lib to the lib folder of MSVC++
+
+ Example: "C:\Program Files\Microsoft Visual Studio .NET 2003\
+ Vc7\lib\libeay32.lib"
+ Example: "C:\Program Files\Microsoft Visual Studio\
+ VC98\lib\libeay32.lib"
+
+ c. Copy file out32dll\libeay32.dll to your %windir%\system32 folder
+
+ Example: "C:\winnt\system32\libeay32.dll"
+
+Using a pre-compiled version
+============================
+
+ 1. Obtain the latest OpenSSL binary from the link below.
+
+ http://www.slproweb.com/products/Win32OpenSSL.html
+
+ 2. Install the package to c:\OpenSSL.
+
+ 3. Copy the header and library files to the the MSVC directory:
+
+ a. Copy folder c:\OpenSSL\include\openssl to the include folder of
+ MSVC++.
+
+ Example: "C:\Program Files\Microsoft Visual Studio .NET 2003\
+ Vc7\include\openssl\*.h"
+ Example: "C:\Program Files\Microsoft Visual Studio\
+ VC98\include\openssl\*.h"
+
+ b. Copy file c:\OpenSSL\lib\VC\libeay32.lib to the lib folder of MSVC++.
+
+ Example: "C:\Program Files\Microsoft Visual Studio .NET 2003\
+ Vc7\lib\libeay32.lib"
+ Example: "C:\Program Files\Microsoft Visual Studio\
+ VC98\lib\libeay32.lib"
+
+
+Project changes
+===============
+
+ 1. Edit the win32\net-snmp\net-snmp-config.h header file. Add:
+
+ #define NETSNMP_USE_OPENSSL 1
+
+ 2. Open Visual Studio, add the link line to the Project Settings
+ for all the applications, and especially for the libsnmp_dll project,
+ for as you know, a .DLL is an application.
+ You MUST do this for libsdll.dsw, and either win32.dsw or win32sdk.dsw,
+ whichever you use.
+
+ MS VC++ 6.0:
+ ------------
+ a. Click Project->Settings.
+ b. Highlight the names of all projects except libsnmp, libagent, libhelpers,
+ libnetsnmptrapd, netsnmpmibs, netsnmpmibssdk.
+ c. Select the Link section.
+ d. Add the next line to the 'Object/Library Modules' list for Debug and
+ Release versions:
+
+ libeay32.lib
+
+ MS VC++ 7.0+:
+ -------------
+ a. For each project (except libsnmp, libagent, libhelpers, libnetsnmptrapd,
+ netsnmpmibs, netsnmpmibssdk), click Project->Properties.
+ b. For Configuration, select 'Release'
+ c. Click Linker and then Input
+ d. Add to the 'Additional Dependencies' section:
+
+ libeay32.lib
+
+ e. For Configuration, select 'Debug'
+ f. Click Linker and then Input
+ g. Add to the 'Additional Dependencies' section:
+
+ libeay32.lib
+
+ 3. Continue with the section 'Microsoft Visual C++ - Building"
+
+
+***************************************************************************
+*
+* Microsoft Visual C++ - Building with IPv6
+*
+***************************************************************************
+
+The default build configuration supports SNMP over IPv4-based transports.
+However, Windows XP and Windows 2000 include an IPv6-capable stack, which
+can be used to provide SNMP over IPv6. To enable IPv6, the Microsoft PSDK
+is required and the following changes to the Net-SNMP win32 Visual C++
+configuration are needed:
+
+Project changes
+===============
+
+ 1. Edit the win32\net-snmp\net-snmp-config.h header file. Change
+ the single INET6 line from:
+
+ /* #undef NETSNMP_ENABLE_IPV6 */
+
+ to:
+
+ #define NETSNMP_ENABLE_IPV6 1
+
+ 2. Edit the win32\libsnmp_dll\libsnmp.def file. All the IPv6 functions will
+ be commented out and will need to be enabled by removing ';IPv6' from the
+ beginning of each line.
+
+ For example, change:
+
+
+ ;IPv6 netsnmp_udp6_parse_security
+
+ to:
+
+ netsnmp_udp6_parse_security
+
+ 3. Continue with the section 'Microsoft Visual C++ - Building"
+
+
+***************************************************************************
+*
+* Microsoft Visual C++ - Building your own applications with snmplib
+*
+***************************************************************************
+
+Linking in an snmplib built to use the Multithreaded DLL runtime library to
+an application configured for the Debug Multithreaded DLL runtime library
+results in a link error along the lines of 'defaultlib "MSVCRT" conflicts
+with use of other libs'. If you receive a similar message, check that the
+projects settings between library and application match up.
+
+To successfully build your existing project with Net-SNMP libraries,
+change the project settings FOR YOUR APPLICATION ONLY as follows:
+
+ 1. In the Link section, Select "Additional Libraries".
+ Add netsnmp.lib for Release version.
+ Add netsnmp_d.lib for Debug version.
+
+ 2. Remove all references to these libraries:
+ libsnmp*.lib msvcrt*.lib libc*.lib oldnames.lib
+
+ 3. In the C++ section, Select "Code Generation".
+ For Release, select /MD or "MultiThreaded DLL".
+ For Debug, select /MDd or "Debug MultiThreaded DLL".
+
+ 4. Make sure "Ignore all default libraries" is NOT SET.
+
+ 5. Make sure "_MBCS" is included in your pre-processor defines.
+
+Note: Some users may have better results compiling other packages that use
+ the installed header files by removing the "mode_t" definition from
+ net-snmp-config.h file in the installed directories.
+
+
+***************************************************************************
+*
+* Microsoft Visual C++ - Extending the Agent
+*
+***************************************************************************
+
+Assuming that the MIB compiler generated the my.h and my.c files for the
+custom MIB "my", the following changes are required to extend the agent
+using VC++:
+
+ - Add the my.h and my.c files to your 'netsnmpmibs' project in VC++.
+ - Next edit the '<sourcedir>\win32\mib_module_includes.h' file to
+ add an include to your .h file.
+
+ #include "mibgroup/my.h"
+
+ - Next edit the '<sourcedir>\win32\mib_module_inits.h' file to add
+ code to call your initialize function.
+
+ if (should_init("my")) init_my();
+
+That's all that is needed. Now go ahead and compile the 'netsnmpmibs'
+and 'snmpd' project. And things should work just fine.
+
+
+***************************************************************************
+*
+* GCC on Windows
+*
+***************************************************************************
+
+There are two versions of GCC (the GNU Compiler Collection) in common use on
+Microsoft Windows operating systems. This section will attempt to point the
+user to the information required to choose the one to best suit their needs.
+
+Cygwin
+
+The Cygwin compiler and toolkit provides a Unix style shell and environment
+for Windows based systems. The cygwin1.dll provides a POSIX emulation layer
+that simplifies porting Unix / Linux applications to Windows. The Cygwin dlls
+are required if an application is to be distributed. The dependency on the
+Cygwin dlls can be eliminated with the --mno-cygwin compiler flag, which uses
+MinGW to compile a native Windows binary, but the benefit of the POSIX emulation
+is lost. The Cygwin tool chain and documentation can be found at:
+
+http://sources.redhat.com/cygwin/
+
+
+MinGW
+
+The MinGW compiler is a Windows native version of gcc. The tool chain links
+against existing Windows dlls found on most systems. Binaries compiled with MinGW
+do not require additional libraries to be distributed. The MSyS environment
+provides a shell (Bash) and tools to emulate a Unix style build environment on
+Windows. The MinGW and MSyS tools and documentation can be found at:
+
+http://www.mingw.org
+
+
+***************************************************************************
+*
+* Cygwin - Building
+*
+***************************************************************************
+
+An alternate way to build Net-SNMP for win32 is to use Cygnus's cygwin32
+environment. Information on the Cygnus cygwin32 environment is available
+on the web at: http://sources.redhat.com/cygwin/.
+
+Cygwin allows you to compile almost the complete agent and applications.
+The following configure options creates a working set of programs:
+
+./configure \
+ --with-mib-modules="host agentx disman/event-mib examples/example" \
+ --with-out-mib-modules=host/hr_network --with-libs="-lws2_32" \
+ --disable-embedded-perl --without-perl-modules \
+
+If you want to use SNMPv3 auth and privacy features, add:
+ --with-openssl="/usr" \
+
+If you want to use IPv6 transports, add:
+ --enable-ipv6 --with-transports="TCPIPv6 UDPIPv6"
+
+Note: The source code should *not* be in a folder that contains a space. For
+ example, compiling in your 'My Documents' or your Desktop (usually
+ c:\Documents and Settings\xxxx\Desktop) is not supported.
+
+This has been tested for Windows 98 and Windows NT 4.0. In order for
+the process part of the host resources MIB to work under NT you will need
+to get hold of the PSAPI.DLL. This available under the download section
+of www.microsoft.com. The DLL is included with Windows 2000 and XP,
+and is also part of the VC++ distribution. The IPHLPAPI library is
+part of the "Microsoft Platform SDK", which is also available from
+www.microsoft.com. See the section "Installing Platform SDK" for details.
+
+Earlier releases of Cygwin may need to use the configure flag
+ --with-libs="-lregex -libphlpapi"
+but this regular expression support has since been incorporated
+into the main Cygwin package, and it is no longer necessary to
+include it separately.
+
+If the folder that Net-SNMP was installed to is ever changed, modify the
+system environment variables or registry keys as explained in the
+'Configuration_Overview.html' file located in win32/dist/htmlhelp.
+
+
+***************************************************************************
+*
+* MinGW - Building
+*
+***************************************************************************
+
+Currently the tools and agent will compile on win32 platforms using the
+MinGW tools with the MSyS environment. MinGW, MSyS and the associated
+documentation can be downloaded from: http://www.mingw.org.
+
+Compiling net-snmp with MinGW requires GNU regex. A GNU regex package that
+builds under MinGW with MSyS is available at:
+
+ http://www.boedog.com/net-snmp/gnu_regex/regex-0-12-mingw-r2.tar.gz
+
+Note: The source code should *not* be in a folder that contains a space. For
+ example, compiling in your 'My Documents' or your Desktop (usually
+ c:\Documents and Settings\xxxx\Desktop) is not supported.
+
+1. Build and install GNU regex following the instructions in the
+ regex-0-12-mingw-r2 README.
+
+2. If SNMPv3 encryption capabilities or SHA authentication is required,
+ install the OpenSSL DLL and library file as described in the section
+ 'MinGW - Building with OpenSSL" and then continue with step 3.
+
+3. Determine where you want the programs to be installed. Currently
+ you must use path segments no longer than 8 characters, and no
+ embedded spaces are allowed. Due to limitations with Makefiles,
+ you must also specify the MIBDIRS default that corresponds to
+ a particular subtree from the base directory.
+
+ Note: All paths use the "/" UNIX pathname delimiter.
+ Also note that embedded spaces will NOT currently work
+ with MinGW configure. Use the DOS 8.3 form of the path,
+
+ For example: Say that you want to install the programs in
+ the directory "C:\usr".
+
+ Use BASEDIR=c:/usr
+
+4. Configure net-snmp using the configure flags as shown:
+
+ BASEDIR=c:/usr
+
+ ./configure --prefix="$BASEDIR" \
+ --with-mibdirs="$BASEDIR/share/snmp/mibs" \
+ --with-mib-modules="agentx disman/event-mib examples/example" \
+ --disable-embedded-perl --without-perl-modules \
+
+ [Sorry. the host resources MIB is not supported by MinGW]
+
+
+4.1. If you want to use IPv6 transports, add:
+ --enable-ipv6 --with-transports="TCPIPv6 UDPIPv6" \
+
+
+5. Type "make" to compile the package.
+
+6. Type "make install" to install the package.
+
+7. If the folder that Net-SNMP was installed to is ever changed, modify the
+ system environment variables or registry keys as explained in the
+ 'Configuration_Overview.html' file located in win32/dist/htmlhelp.
+
+
+***************************************************************************
+*
+* MinGW - Building with OpenSSL
+*
+***************************************************************************
+
+OpenSSL is required to support the encryption capabilities in SNMPv3
+(or SHA authentication). A pre-compiled MinGW compatible version of
+OpenSSL is available on the Internet.
+
+Follow these steps to install OpenSSL:
+
+ 1. Obtain the latest OpenSSL binary from the link below.
+
+ http://www.slproweb.com/products/Win32OpenSSL.html
+
+ 2. Install the package to c:\OpenSSL
+
+ 3. Copy the header and library files to the the MinGW directory:
+
+ a. Copy the c:\OpenSSL\include\openssl folder to the include folder in
+ MinGW.
+
+ Example: "C:\MinGW\include\openssl\*.h"
+
+ b. Copy c:\OpenSSL\lib\MinGW\libeay32.* to the lib folder in Mingw.
+
+ Example: "C:\MinGW\lib\libeay32.a"
+ Example: "C:\MinGW\lib\libeay32.def"
+
+ 4. Continue with the section 'MinGW - Building"
+
+
+***************************************************************************
+*
+* Configuring Net-SNMP
+*
+***************************************************************************
+
+Online documentation is available from the Net-SNMP home page at:
+
+http://www.net-snmp.org/docs/
+
+All configuration files should be placed in the INSTALL_BASE\etc\snmp folder.
+The INSTALL_BASE folder is defined in the win32\net-snmp\net-snmp-config.h
+file. For example, c:\usr\etc\snmp.
+
+Included is a Perl script called snmpconf which can be used to create
+configuration files. Full documentation on using snmpconf is available from the
+Net-SNMP web site at the above link.
+
+To run snmpconf, first modify snmpconf.bat located in the bin folder where
+Net-SNMP is installed. Modify the set MYPERLPROGRAM= line to contain the full
+path to the snmpconf Perl script. For example:
+
+ set MYPERLPROGRAM=c:\usr\bin\snmpconf
+
+You can now run snmpconf using the standard command line such as:
+
+ snmpconf -i
+
+For detailed information on using environment variables and the registry to
+configure Net-SNMP, see the 'Configuration_Overview.html' file in
+win32/dist/htmlhelp.
+
+
+***************************************************************************
+*
+* How to Register the Net-SNMP Agent and Trap Daemon as Windows services
+*
+***************************************************************************
+
+The Agent (snmpd.exe) and trap daemon (snmptrapd.exe) can be run as a service
+under Windows operating systems that have the Service Control Manager (SCM)
+(Services Control Panel). This includes Windows NT, 2000, XP and 2003.
+Windows 9x/Me do not have the SCM.
+
+To allow snmpd.exe or snmptrapd.exe to run as a service, the programs need
+to be registered with the SCM. This is done by running the program once with
+the -register command line switch from a command prompt.
+
+If Net-SNMP was installed using the binary available from the Net-SNMP web site,
+there will be shortcuts in the Start menu for registering and unregistering the
+agent and snmptrapd.
+
+The synopsis for registering snmpd as a Windows service is:
+
+ snmpd -register [OPTIONS] [LISTENING ADDRESSES]
+
+The synopsis for registering snmptrapd as a Windows service is:
+
+ snmptrapd -register [OPTIONS] [LISTENING ADDRESSES]
+
+After registration, the services 'Net-SNMP Agent' and 'Net-SNMP Trap Handler'
+will be available in the SCM. The services can be started and stopped using
+the SCM (Services Control Panel) or from the command prompt using:
+
+ net start "Net-SNMP Agent"
+ net start "Net-SNMP Trap Handler"
+
+and
+
+ net stop "Net-SNMP Agent"
+ net stop "Net-SNMP Trap Handler"
+
+If any command line options are specified after the -register option, they
+will be included when the service starts. For example, to register the
+snmptrapd daemon and enable logging of traps to c:\usr\log\snmptrapd.log,
+enter the following command line:
+
+ snmptrapd -register -Lf c:/usr/log/snmptrapd.log
+
+Note: Use Unix style slashes (/) for all paths.
+
+For a complete list of command line options, consult the man pages, or use
+the -h switch:
+
+ snmpd -h
+ snmptrapd -h
+
+Notes: -H will display all available snmpd.conf, snmptrapd.conf and snmp.conf
+ configuration file options, not the command line options.
+
+ Like all Net-SNMP applications, snmpd and snmptrapd will use the
+ SNMPCONFPATH and SNMPSHAREPATH environment variables when run as a
+ service. The registry is the recommended method for defining these
+ variables due to a limitation in the Windows Service Control Manager
+ (SCM). When running as a service, if any system environment variables
+ are changed, the system will need to be rebooted to allow the services
+ to access the changed environment variables (see Microsoft knowledge
+ base article 821761). Therefore, when running snmpd or snmptrapd as
+ a service, if SNMPCONFPATH or SNMPSHAREPATH is changed, a reboot will
+ be required after setting the environment variables, otherwise the
+ services may fail to start. Using the registry to store the environment
+ variables eliminates this problem. See the 'Configuration_Overview.html'
+ file in win32/dist/htmlhelp for more information on using the registry.
+
+
+Unregistering the services
+--------------------------
+
+To un-register the services, use the command line switch -unregister. For
+example:
+
+ snmpd -unregister
+
+ snmptrapd -unregister
+
+Note: Be sure to have all Service Control Panel windows closed when
+ unregistering, otherwise a reboot may be required to complete
+ the removal.
+
+
+Modifying the services
+----------------------
+
+To change the parameters that the SCM passes to snmpd or snmptrapd, the
+service must be unregistered, and then re-registered with the new options.
+
+For example, to change the parameters that SCM passes to snmpd, open a
+command prompt window, CD to the directory where the snmpd program is located
+(unless it is already in your PATH), identify the full set of parameters you
+desire, then type these two commands:
+
+ snmpd -unregister
+ snmpd -register [OPTIONS] [LISTENING ADDRESSES]
+
+Note: Be sure to have all Service Control Panel windows closed when
+ unregistering, otherwise a reboot may be required to complete
+ the removal.
+
+
+Registry Information
+--------------------
+
+Warning: Improper use of the registry editor can damage to your operating
+ system and should only be used by experienced users.
+
+The following registry keys are used by snmpd and snmptrapd:
+
+HKLM\SYSTEM\CurrentControlSet\Services\Net-SNMP Agent
+HKLM\SYSTEM\CurrentControlSet\Services\Net-SNMP Trap Handler
+
+Each command line option specified when regsitering the service will be added
+to the Parameters registry subkey for the service as a ParamX REG_SZ value
+where X starts at 1 and increments for each additional command line option.
+For example, '-Lf c:/usr/log/snmptrapd.log' would be:
+
+ HKLM\SYSTEM\CurrentControlSet\Services\
+ Net-SNMP Trap Handler\Parameters\Param1 -Lf
+
+ HKLM\SYSTEM\CurrentControlSet\Services\
+ Net-SNMP Trap Handler\Parameters\Param2 c:/usr/log/snmptrapd.log
+
+To add additional command line switches or modify the existing ones, it is
+recommended to unregister and re-register the services with the new command
+line options. It is also possible to directly add or modify the ParamX values
+in the registry.
+
+Note: The Parameters key is only created when there is at least one command
+ line option specified when registering the service so it may need to be
+ manually added if modifying using the registry editor.
+
+
+***************************************************************************
+*
+* Notes on SET support for WIN32 ports
+*
+***************************************************************************
+
+Requirements:
+
+ Windows NT/2000/XP or later: Requires Windows NT 4.0 SP4 or later.
+ Windows 95/98/Me: Requires Windows 98 or later.
+
+Windows support for SET on following groups:
+
+interfaces:
+----------
+ifAdminStatus is read-write. Status can be set with either 'up' or
+'down'. (IE, 'testing' status is not supported.)
+
+
+ip group:
+--------
+Scalar objects:
+ipForwarding:Currently windows supports only ON->OFF (IE,
+enable->disable). For any other value, it returns with failure.
+
+ipDefaultTTL: Supports value greater than or equal to 0.
+
+Table objects:
+-------------
+1. ipRouteTable:
+ ------------
+route_write.c implements this.
+
+ipRouteDest: Setting this value, updates row with new ipRouteDest and all other
+ entries will be same as old row.
+ EX:
+ Consider there is an entry with ipRouteDest = 10.0.0.20
+ Request, snmpset localhost private ip.ipRouteTable.ipRouteEntry.ipRouteDest.10.0.0.20 -a 10.0.0.16
+ Updates that row with ipRouteDest = 10.0.0.16
+
+ipRouteIfIndex:Write supported.
+
+ipRouteMetric1: Supports value greater than or equal to -1
+
+ipRouteMetric2, ipRouteMetric3, ipRouteMetric4, ipRouteMetric5: Even though
+ call returns with success, Windows doesn't change these (as
+ these are not used in Windows)
+
+ipRouteNextHop: Write supported.
+
+ipRouteType: Write Supported. If value is 2, IE 'invalid', it deletes the entry.
+
+ipRouteAge: Whenever any row is updated this will be automatically reset.
+
+ipRouteMask: Write Supported.
+
+Creation of ipRouteTable row:
+-----------------------------
+snmpset request for non existent OID with ipRouteIfIndex, ipRouteMetric1,
+ipRouteNextHop and ipRouteMask varbinds, creates a row.
+
+snmpset with create option is not supported, as row creation requires
+ipRouteIfIndex, ipRouteMetric1, ipRouteNextHop and ipRouteMask in a single
+request.
+
+Example to create a row:
+-----------------------
+Consider there is no entry for 10.0.0.18
+
+snmpset localhost private ip.ipRouteTable.ipRouteEntry.ipRouteIfIndex.10.0.0.18 i 2 4.21.1.ipRouteMask.10.0.0.18 a 255.255.255.255 4.21.1.ipRouteNextHop.10.0.0.0 a 10.0.0.0 4.21.1.ipRouteMetric1.10.0.0.18 i 1
+
+If ipRouteIfIndex is valid then creates row with:
+ipRouteIfIndex = 2
+ipRouteMask = 255.255.255.255
+ipRouteNextHop = 10.0.0.0
+ipRouteMetric1 = 1
+
+2. ipNetToMediaTable:
+--------------------
+ipNetToMediaIfIndex: write supported
+ipNetToMediaPhysAddress: write supported
+ipNetToMediaNetAddress: write supported
+ipNetToMediaType: write supported, setting with value 2, deletes the row.
+
+Creation of row:
+--------------------
+snmpset request for non existent OID with ipNetToMediaPhysAddress varbind
+creates a row.
+
+snmpset with create option is not supported, as row creation requires
+ipNetToMediaPhysAddress in a request
+request.
+
+Example to create a row:
+-----------------------
+Consider there is no entry for 10.0.0.32
+
+snmpset localhost private ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaPhysAddress.2.10.0.0.32 x efcd12130103
+
+If ipNetToMediaIfIndex is valid then creates row with:
+ipNetToMediaIfIndex = 2
+ipNetToMediaPhysAddress = ef:cd:12:12:01:03
+ipNetToMediaNetAddress = 10.0.0.32
+ipNetToMediaType = 4
+
+TCP:
+---
+tcpConnState of tcpConnTable is writable and the only value which may
+be set by a management station is deleteTCB(12)
+
+
+***************************************************************************
+*
+* Notes on preprocessor defines for MSVC, MinGW and Cygwin
+*
+***************************************************************************
+
+When adding Windows specific code, one or more of the following defines should
+be used:
+
+Define: Description:
+------- ------------
+WIN32 Defined by MSVC & MinGW
+
+_MSC_VER Defined by MSVC only (standard MSVC macro)
+
+mingw32 Defined by MinGW only
+
+cygwin Defined by Cygwin only
+
+HAVE_WIN32_PLATFORM_SDK Should be defined if the Microsoft Platform SDK is
+ installed and registered with MSVC or enabled for
+ MinGW or Cygwin
+
+MinGW and Cygwin do not require the Microsoft Platform SDK as they both should
+contain most if not all of the functionality provided by the SDK. When adding
+code that requires the PSDK under MSVC, the following can usually be used:
+
+ #if defined (HAVE_WIN32_PLATFORM_SDK) || defined (mingw32) || defined (cygwin)
+
+As listed above, Cygwin does NOT define WIN32. When adding generic Windows
+code that will work with MSVC, MinGW and Cygwin, the following should be used:
+
+ #if defined (WIN32) || defined (cygwin)
+
+
+***************************************************************************
+*
+* Acknowledgements
+*
+***************************************************************************
+
+These people are known to have contributed to one or more of
+the Win32 platform ports. If you have, and your name is not here,
+please accept our apologies, and tell us so we can add your name.
+
+David Perkins, Joe Marzot, Wes Hardaker, Niels Baggesen, Dave Shield,
+Robert Story, Suvrit Sra, Mike Slifcak, Latha Prabhu, Nikolai Devereaux,
+Alex Burger, Bernhard Penz, and Andy Smith.
+
diff --git a/cleopatre/application/spidnetsnmp/TODO b/cleopatre/application/spidnetsnmp/TODO
new file mode 100644
index 0000000000..2210b6e1d1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/TODO
@@ -0,0 +1,60 @@
+TODO list of possible projects/developments/etc
+===============================================
+
+APIs:
+ Perl (basically OK - may need a review/update)
+ PHP (PHP-shipped API is out of date, needs reworking)
+ Java (see netsnmpj)
+ Tk/Tcl
+ WinSNMP
+ Python (yapsnmp? / snmpy?)
+ #Net
+
+Agent MIBs:
+ Notification Filtering
+ Community MIB
+ Proxy MIB (extended to support proxying of subtrees)
+ RMON/RMON2
+ MIB-2 updates (in hand)
+ IPv6
+ Firewall (inc. connection tracking)
+ DisMan:
+ monitor (done?)
+ RemOps (preliminary implementation)
+ Tunnel
+ WWW-MIB
+ Hardware Abstraction Layer:
+ HostRes (convert to use HAL and clean up)
+ UCDavis (convert to use HAL and update structures)
+
+Extensibility:
+ AgentX (reasonably stable now)
+ SMUX (?obsolete?)
+ embedded Perl (done? in hand?)
+ " Python
+ DisMan script MIB
+ Extend scripts (new, so will need to bed down)
+ Pass scripts (support SNMPv2 exceptions/errors)
+ DLMod (OK, but MIB i/f not robust)
+
+Library:
+ Threading
+ Debugging (heirarchical)
+ Config (split syntax & processing, persist/read-only/etc)
+ SecModels:
+ Kerberos (?done)
+ SBSM (?in hand)
+ Pre-compiled MIBs
+
+Traps:
+ Separate thread in agen
+ Pluggable modules (?done)
+ Dynamic loading
+ Persistent connection
+ Threaded handler
+
+Documentation:
+ Tutorials
+ Extending the agent
+ Agent internals
+
diff --git a/cleopatre/application/spidnetsnmp/acconfig.h b/cleopatre/application/spidnetsnmp/acconfig.h
new file mode 100644
index 0000000000..c9b852798e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/acconfig.h
@@ -0,0 +1,1150 @@
+/*
+ * net-snmp configuration header file
+ */
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+#ifndef NET_SNMP_CONFIG_H
+#define NET_SNMP_CONFIG_H
+
+
+/* ********* NETSNMP_MARK_BEGIN_AUTOCONF_DEFINITIONS ********* */
+/*
+ * put all autoconf-specific definitions below here
+ *
+ */
+#ifndef NETSNMP_NO_AUTOCONF_DEFINITIONS
+
+/* define if you have type int32_t */
+#undef HAVE_INT32_T
+
+/* define if you have type uint32_t */
+#undef HAVE_UINT32_T
+
+/* define if you have type u_int32_t */
+#undef HAVE_U_INT32_T
+
+/* define if you have type int64_t */
+#undef HAVE_INT64_T
+
+/* define if you have type uint64_t */
+#undef HAVE_UINT64_T
+
+/* define if you have type u_int64_t */
+#undef HAVE_U_INT64_T
+
+/* define if you have type intptr_t */
+#undef HAVE_INTPTR_T
+
+/* define if you have type uintptr_t */
+#undef HAVE_UINTPTR_T
+
+/* got socklen_t? */
+#undef HAVE_SOCKLEN_T
+
+/* got in_addr_t? */
+#undef HAVE_IN_ADDR_T
+
+/* define if you have getdevs() */
+#undef HAVE_GETDEVS
+
+/* define if you have devstat_getdevs() */
+#undef HAVE_DEVSTAT_GETDEVS
+
+/* define if you have <netinet/in_pcb.h> */
+#undef HAVE_NETINET_IN_PCB_H
+
+/* define if you have <sys/disklabel.h> */
+#undef HAVE_SYS_DISKLABEL_H
+
+/* define if your compiler (processor) defines __FUNCTION__ for you */
+#undef HAVE_CPP_UNDERBAR_FUNCTION_DEFINED
+
+/* on aix, if you have perfstat */
+#undef HAVE_PERFSTAT
+
+/* define if you have libdb, libnm or librpm, respectively */
+#undef HAVE_LIBDB
+#undef HAVE_LIBNM
+#undef HAVE_LIBRPM
+
+/* define if you have pkginfo */
+#undef HAVE_PKGINFO
+
+/* define if you have gethostbyname */
+#undef HAVE_GETHOSTBYNAME
+
+/* define if you have the perl_eval_pv() function */
+#undef HAVE_PERL_EVAL_PV_LC
+
+/* define if you have the Perl_eval_pv() function */
+#undef HAVE_PERL_EVAL_PV_UC
+
+/* printing system */
+#undef HAVE_LPSTAT
+#undef LPSTAT_PATH
+#undef HAVE_PRINTCAP
+/* Use dmalloc to do malloc debugging? */
+#undef HAVE_DMALLOC_H
+
+/* location of UNIX kernel */
+#define KERNEL_LOC "/vmunix"
+
+/* location of mount table list */
+#define ETC_MNTTAB "/etc/mnttab"
+
+/* location of swap device (ok if not found) */
+#undef DMEM_LOC
+
+/* Command to generate ps output, the final column must be the process
+ name withOUT arguments */
+#define PSCMD "/bin/ps"
+
+/* Where is the uname command */
+#define UNAMEPROG "/bin/uname"
+
+/* define if you are using linux and /proc/net/dev has the compressed
+ field, which exists in linux kernels 2.2 and greater. */
+#undef PROC_NET_DEV_HAS_COMPRESSED
+
+/* define rtentry to ortentry on SYSV machines (alphas) */
+#undef RTENTRY
+
+/* Use BSD 4.4 routing table entries? */
+#undef RTENTRY_4_4
+
+/* Does struct sigaction have a sa_sigaction field? */
+#undef STRUCT_SIGACTION_HAS_SA_SIGACTION
+
+/* Does struct tm have a tm_gmtoff field? */
+#undef STRUCT_TM_HAS_TM_GMTOFFF
+
+/* Does struct sockaddr have a sa_len field? */
+#undef STRUCT_SOCKADDR_HAS_SA_LEN
+
+/* Does struct sockaddr have a sa_family2 field? */
+#undef STRUCT_SOCKADDR_HAS_SA_UNION_SA_GENERIC_SA_FAMILY2
+
+/* Does struct sockaddr_storage have a ss_family field? */
+#undef STRUCT_SOCKADDR_STORAGE_HAS_SS_FAMILY
+
+/* Does struct sockaddr_storage have a __ss_family field? */
+#undef STRUCT_SOCKADDR_STORAGE_HAS___SS_FAMILY
+
+/* Does struct in6_addr have a s6_un.sa6_ladd field? */
+#undef STRUCT_IN6_ADDR_HAS_S6_UN_SA6_LADDR
+
+/* rtentry structure tests */
+#undef RTENTRY_RT_NEXT
+#undef STRUCT_RTENTRY_HAS_RT_DST
+#undef STRUCT_RTENTRY_HAS_RT_UNIT
+#undef STRUCT_RTENTRY_HAS_RT_USE
+#undef STRUCT_RTENTRY_HAS_RT_REFCNT
+#undef STRUCT_RTENTRY_HAS_RT_HASH
+
+/* ifnet structure tests */
+#undef STRUCT_IFNET_HAS_IF_BAUDRATE
+#undef STRUCT_IFNET_HAS_IF_BAUDRATE_IFS_VALUE
+#undef STRUCT_IFNET_HAS_IF_SPEED
+#undef STRUCT_IFNET_HAS_IF_TYPE
+#undef STRUCT_IFNET_HAS_IF_IMCASTS
+#undef STRUCT_IFNET_HAS_IF_IQDROPS
+#undef STRUCT_IFNET_HAS_IF_LASTCHANGE_TV_SEC
+#undef STRUCT_IFNET_HAS_IF_NOPROTO
+#undef STRUCT_IFNET_HAS_IF_OMCASTS
+#undef STRUCT_IFNET_HAS_IF_XNAME
+#undef STRUCT_IFNET_HAS_IF_OBYTES
+#undef STRUCT_IFNET_HAS_IF_IBYTES
+#undef STRUCT_IFNET_HAS_IF_ADDRLIST
+
+/* tcpstat.tcps_rcvmemdrop */
+#undef STRUCT_TCPSTAT_HAS_TCPS_RCVMEMDROP
+
+/* udpstat.udps_discard */
+#undef STRUCT_UDPSTAT_HAS_UDPS_DISCARD
+
+/* udpstat.udps_discard */
+#undef STRUCT_UDPSTAT_HAS_UDPS_NOPORT
+
+/* udpstat.udps_discard */
+#undef STRUCT_UDPSTAT_HAS_UDPS_NOPORTBCAST
+
+/* udpstat.udps_discard */
+#undef STRUCT_UDPSTAT_HAS_UDPS_FULLSOCK
+
+/* arphd.at_next */
+#undef STRUCT_ARPHD_HAS_AT_NEXT
+
+/* ifaddr.ifa_next */
+#undef STRUCT_IFADDR_HAS_IFA_NEXT
+
+/* ifnet.if_mtu */
+#undef STRUCT_IFNET_HAS_IF_MTU
+
+/* swdevt.sw_nblksenabled */
+#undef STRUCT_SWDEVT_HAS_SW_NBLKSENABLED
+
+/* nlist.n_value */
+#undef STRUCT_NLIST_HAS_N_VALUE
+
+/* nlist64.n_value */
+#undef STRUCT_NLIST64_HAS_N_VALUE
+
+/* ipstat structure tests */
+#undef STRUCT_IPSTAT_HAS_IPS_CANTFORWARD
+#undef STRUCT_IPSTAT_HAS_IPS_CANTFRAG
+#undef STRUCT_IPSTAT_HAS_IPS_DELIVERED
+#undef STRUCT_IPSTAT_HAS_IPS_FRAGDROPPED
+#undef STRUCT_IPSTAT_HAS_IPS_FRAGTIMEOUT
+#undef STRUCT_IPSTAT_HAS_IPS_LOCALOUT
+#undef STRUCT_IPSTAT_HAS_IPS_NOPROTO
+#undef STRUCT_IPSTAT_HAS_IPS_NOROUTE
+#undef STRUCT_IPSTAT_HAS_IPS_ODROPPED
+#undef STRUCT_IPSTAT_HAS_IPS_OFRAGMENTS
+#undef STRUCT_IPSTAT_HAS_IPS_REASSEMBLED
+
+/* vfsstat.f_frsize */
+#undef STRUCT_STATVFS_HAS_F_FRSIZE
+
+/* vfsstat.f_files */
+#undef STRUCT_STATVFS_HAS_F_FILES
+
+/* statfs inode structure tests*/
+#undef STRUCT_STATFS_HAS_F_FILES
+#undef STRUCT_STATFS_HAS_F_FFREE
+#undef STRUCT_STATFS_HAS_F_FAVAIL
+
+/* des_ks_struct.weak_key */
+#undef STRUCT_DES_KS_STRUCT_HAS_WEAK_KEY
+
+/* ifnet needs to have _KERNEL defined */
+#undef IFNET_NEEDS_KERNEL
+
+/* sysctl works to get boottime, etc... */
+#undef NETSNMP_CAN_USE_SYSCTL
+
+/* define if SIOCGIFADDR exists in sys/ioctl.h */
+#undef SYS_IOCTL_H_HAS_SIOCGIFADDR
+
+/* Define if statfs takes 2 args and the second argument has
+ type struct fs_data. [Ultrix] */
+#undef STAT_STATFS_FS_DATA
+
+/* Define if the TCP timer constants in <netinet/tcp_timer.h>
+ depend on the integer variable `hz'. [FreeBSD 4.x] */
+#undef TCPTV_NEEDS_HZ
+
+/* Not-to-be-compiled macros for use by configure only */
+#define config_require(x)
+#define config_exclude(x)
+#define config_arch_require(x,y)
+#define config_parse_dot_conf(w,x,y,z)
+#define config_add_mib(x)
+#define config_belongs_in(x)
+#define config_error(x)
+#define config_warning(x)
+
+#if defined (WIN32) || defined (mingw32) || defined (cygwin)
+#define ENV_SEPARATOR ";"
+#define ENV_SEPARATOR_CHAR ';'
+#else
+#define ENV_SEPARATOR ":"
+#define ENV_SEPARATOR_CHAR ':'
+#endif
+
+/* definitions added by configure on-the-fly */
+@TOP@
+@BOTTOM@
+
+/* end of definitions added by configure on-the-fly */
+
+#ifndef HAVE_STRCHR
+#ifdef HAVE_INDEX
+# define strchr index
+# define strrchr rindex
+#endif
+#endif
+
+#ifndef HAVE_INDEX
+#ifdef HAVE_STRCHR
+#ifdef mingw32
+# define index(a,b) strchr(a,b)
+# define rindex(a,b) strrchr(a,b)
+#else
+# define index strchr
+# define rindex strrchr
+#endif
+#endif
+#endif
+
+#ifndef HAVE_MEMCPY
+#ifdef HAVE_BCOPY
+# define memcpy(d, s, n) bcopy ((s), (d), (n))
+# define memmove(d, s, n) bcopy ((s), (d), (n))
+# define memcmp bcmp
+#endif
+#endif
+
+#ifndef HAVE_MEMMOVE
+#ifdef HAVE_MEMCPY
+# define memmove memcpy
+#endif
+#endif
+
+#ifndef HAVE_BCOPY
+#ifdef HAVE_MEMCPY
+# define bcopy(s, d, n) memcpy ((d), (s), (n))
+# define bzero(p,n) memset((p),(0),(n))
+# define bcmp memcmp
+#endif
+#endif
+
+/* If you have openssl 0.9.7 or above, you likely have AES support. */
+#undef NETSNMP_USE_OPENSSL
+#if defined(NETSNMP_USE_OPENSSL) && defined(HAVE_OPENSSL_AES_H) && defined(HAVE_AES_CFB128_ENCRYPT)
+#define HAVE_AES 1
+#endif
+
+/* define random functions */
+
+#ifndef HAVE_RANDOM
+#ifdef HAVE_LRAND48
+#define random lrand48
+#define srandom(s) srand48(s)
+#else
+#ifdef HAVE_RAND
+#define random rand
+#define srandom(s) srand(s)
+#endif
+#endif
+#endif
+
+/* define signal if DNE */
+
+#ifndef HAVE_SIGNAL
+#ifdef HAVE_SIGSET
+#define signal(a,b) sigset(a,b)
+#endif
+#endif
+
+#if HAVE_DMALLOC_H
+#define DMALLOC_FUNC_CHECK
+#endif
+
+#endif /* NETSNMP_NO_AUTOCONF_DEFINITIONS */
+
+
+
+
+/* ********* NETSNMP_MARK_BEGIN_CLEAN_NAMESPACE ********* */
+/*
+ * put all new net-snmp-specific definitions here
+ *
+ * all definitions MUST have a NETSNMP_ prefix
+ *
+ */
+
+/* Default (SNMP) version number for the tools to use */
+#define NETSNMP_DEFAULT_SNMP_VERSION 3
+
+/* don't change these values! */
+#define NETSNMP_SNMPV1 0xAAAA /* readable by anyone */
+#define NETSNMP_SNMPV2ANY 0xA000 /* V2 Any type (includes NoAuth) */
+#define NETSNMP_SNMPV2AUTH 0x8000 /* V2 Authenticated requests only */
+
+/* default list of mibs to load */
+#define NETSNMP_DEFAULT_MIBS "IP-MIB:IF-MIB:TCP-MIB:UDP-MIB:SNMPv2-MIB:RFC1213-MIB"
+
+/* default location to look for mibs to load using the above tokens
+ and/or those in the MIBS envrionment variable*/
+#undef NETSNMP_DEFAULT_MIBDIRS
+
+/* default mib files to load, specified by path. */
+#undef NETSNMP_DEFAULT_MIBFILES
+
+/* should we compile to use special opaque types: float, double,
+ counter64, i64, ui64, union? */
+#undef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
+
+/* define if you want to compile support for both authentication and
+ privacy support. */
+#undef NETSNMP_ENABLE_SCAPI_AUTHPRIV
+
+/* define if you are using the MD5 code ...*/
+#undef NETSNMP_USE_INTERNAL_MD5
+
+/* define if you are using the codeS11 library ...*/
+#undef NETSNMP_USE_PKCS11
+
+/* debugging stuff */
+/* if defined, we optimize the code to exclude all debugging calls. */
+#undef NETSNMP_NO_DEBUGGING
+/* ignore the -D flag and always print debugging information */
+#define NETSNMP_ALWAYS_DEBUG 0
+
+/* reverse encoding BER packets is both faster and more efficient in space. */
+#define NETSNMP_USE_REVERSE_ASNENCODING 1
+#define NETSNMP_DEFAULT_ASNENCODING_DIRECTION 1 /* 1 = reverse, 0 = forwards */
+
+/* PERSISTENT_DIRECTORY: If defined, the library is capabile of saving
+ persisant information to this directory in the form of configuration
+ lines: PERSISTENT_DIRECTORY/NAME.persistent.conf */
+#define NETSNMP_PERSISTENT_DIRECTORY "/var/snmp"
+
+/* PERSISTENT_MASK: the umask permissions to set up persistent files with */
+#define NETSNMP_PERSISTENT_MASK 077
+
+/* AGENT_DIRECTORY_MODE: the mode the agents should use to create
+ directories with. Since the data stored here is probably sensitive, it
+ probably should be read-only by root/administrator. */
+#define NETSNMP_AGENT_DIRECTORY_MODE 0700
+
+/* MAX_PERSISTENT_BACKUPS:
+ * The maximum number of persistent backups the library will try to
+ * read from the persistent cache directory. If an application fails to
+ * close down successfully more than this number of times, data will be lost.
+ */
+#define NETSNMP_MAX_PERSISTENT_BACKUPS 10
+
+/* define the system type include file here */
+#define NETSNMP_SYSTEM_INCLUDE_FILE <net-snmp/system/generic.h>
+
+/* define the machine (cpu) type include file here */
+#define NETSNMP_MACHINE_INCLUDE_FILE <net-snmp/machine/generic.h>
+
+/* define the UDP buffer defaults undefined means use the OS buffers
+ * by default */
+#undef NETSNMP_DEFAULT_SERVER_SEND_BUF
+#undef NETSNMP_DEFAULT_SERVER_RECV_BUF
+#undef NETSNMP_DEFAULT_CLIENT_SEND_BUF
+#undef NETSNMP_DEFAULT_CLIENT_RECV_BUF
+
+/* net-snmp's major path names */
+#undef SNMPLIBPATH
+#undef SNMPSHAREPATH
+#undef SNMPCONFPATH
+#undef SNMPDLMODPATH
+
+/* NETSNMP_LOGFILE: If defined it closes stdout/err/in and opens this in
+ out/err's place. (stdin is closed so that sh scripts won't wait for it) */
+#undef NETSNMP_LOGFILE
+
+/* default system contact */
+#undef NETSNMP_SYS_CONTACT
+
+/* system location */
+#undef NETSNMP_SYS_LOC
+
+/* Use libwrap to handle allow/deny hosts? */
+#undef NETSNMP_USE_LIBWRAP
+
+/* testing code sections. */
+#undef NETSNMP_ENABLE_TESTING_CODE
+
+/* If you don't have root access don't exit upon kmem errors */
+#undef NETSNMP_NO_ROOT_ACCESS
+
+/* If we don't want to use kmem. */
+#undef NETSNMP_NO_KMEM_USAGE
+
+/* If you don't want the agent to report on variables it doesn't have data for */
+#undef NETSNMP_NO_DUMMY_VALUES
+
+
+/* Mib-2 tree Info */
+/* These are the system information variables. */
+
+#define NETSNMP_VERS_DESC "unknown" /* overridden at run time */
+#define NETSNMP_SYS_NAME "unknown" /* overridden at run time */
+
+/* comment out the second define to turn off functionality for any of
+ these: (See README for details) */
+
+/* proc PROCESSNAME [MAX] [MIN] */
+#define NETSNMP_PROCMIBNUM 2
+
+/* exec/shell NAME COMMAND */
+#define NETSNMP_SHELLMIBNUM 8
+
+/* swap MIN */
+#define NETSNMP_MEMMIBNUM 4
+
+/* disk DISK MINSIZE */
+#define NETSNMP_DISKMIBNUM 9
+
+/* load 1 5 15 */
+#define NETSNMP_LOADAVEMIBNUM 10
+
+/* which version are you using? This mibloc will tell you */
+#define NETSNMP_VERSIONMIBNUM 100
+
+/* Reports errors the agent runs into */
+/* (typically its "can't fork, no mem" problems) */
+#define NETSNMP_ERRORMIBNUM 101
+
+/* The sub id of EXTENSIBLEMIB returned to queries of
+ .iso.org.dod.internet.mgmt.mib-2.system.sysObjectID.0 */
+#define NETSNMP_AGENTID 250
+
+/* This ID is returned after the AGENTID above. IE, the resulting
+ value returned by a query to sysObjectID is
+ EXTENSIBLEMIB.AGENTID.???, where ??? is defined below by OSTYPE */
+
+#define NETSNMP_HPUX9ID 1
+#define NETSNMP_SUNOS4ID 2
+#define NETSNMP_SOLARISID 3
+#define NETSNMP_OSFID 4
+#define NETSNMP_ULTRIXID 5
+#define NETSNMP_HPUX10ID 6
+#define NETSNMP_NETBSD1ID 7
+#define NETSNMP_FREEBSDID 8
+#define NETSNMP_IRIXID 9
+#define NETSNMP_LINUXID 10
+#define NETSNMP_BSDIID 11
+#define NETSNMP_OPENBSDID 12
+#define NETSNMP_WIN32ID 13
+#define NETSNMP_HPUX11ID 14
+#define NETSNMP_AIXID 15
+#define NETSNMP_MACOSXID 16
+#define NETSNMP_UNKNOWNID 255
+
+#ifdef hpux9
+#define NETSNMP_OSTYPE NETSNMP_HPUX9ID
+#endif
+#ifdef hpux10
+#define NETSNMP_OSTYPE NETSNMP_HPUX10ID
+#endif
+#ifdef hpux11
+#define NETSNMP_OSTYPE NETSNMP_HPUX11ID
+#endif
+#ifdef sunos4
+#define NETSNMP_OSTYPE NETSNMP_SUNOS4ID
+#endif
+#ifdef solaris2
+#define NETSNMP_OSTYPE NETSNMP_SOLARISID
+#endif
+#if defined(osf3) || defined(osf4) || defined(osf5)
+#define NETSNMP_OSTYPE NETSNMP_OSFID
+#endif
+#ifdef ultrix4
+#define NETSNMP_OSTYPE NETSNMP_ULTRIXID
+#endif
+#if defined(netbsd1) || defined(netbsd2)
+#define NETSNMP_OSTYPE NETSNMP_NETBSD1ID
+#endif
+#if defined(__FreeBSD__)
+#define NETSNMP_OSTYPE NETSNMP_FREEBSDID
+#endif
+#if defined(irix6) || defined(irix5)
+#define NETSNMP_OSTYPE NETSNMP_IRIXID
+#endif
+#ifdef linux
+#define NETSNMP_OSTYPE NETSNMP_LINUXID
+#endif
+#if defined(bsdi2) || defined(bsdi3) || defined(bsdi4)
+#define NETSNMP_OSTYPE NETSNMP_BSDIID
+#endif
+#if defined(openbsd2) || defined(openbsd3) || defined(openbsd4)
+#define NETSNMP_OSTYPE NETSNMP_OPENBSDID
+#endif
+#ifdef WIN32
+#define NETSNMP_OSTYPE NETSNMP_WIN32ID
+#endif
+#if defined(aix3) || defined(aix4) || defined(aix5) || defined(aix6)
+#define NETSNMP_OSTYPE NETSNMP_AIXID
+#endif
+#if defined(darwin) && (darwin >= 8)
+#define NETSNMP_OSTYPE NETSNMP_MACOSXID
+#endif
+/* unknown */
+#ifndef NETSNMP_OSTYPE
+#define NETSNMP_OSTYPE NETSNMP_UNKNOWNID
+#endif
+
+/* The enterprise number has been assigned by the IANA group. */
+/* Optionally, this may point to the location in the tree your */
+/* company/organization has been allocated. */
+/* The assigned enterprise number for the NET_SNMP MIB modules. */
+#define NETSNMP_ENTERPRISE_OID 8072
+#define NETSNMP_ENTERPRISE_MIB 1,3,6,1,4,1,8072
+#define NETSNMP_ENTERPRISE_DOT_MIB 1.3.6.1.4.1.8072
+#define NETSNMP_ENTERPRISE_DOT_MIB_LENGTH 7
+
+/* The assigned enterprise number for sysObjectID. */
+#define NETSNMP_SYSTEM_MIB 1,3,6,1,4,1,8072,3,2,NETSNMP_OSTYPE
+#define NETSNMP_SYSTEM_DOT_MIB 1.3.6.1.4.1.8072.3.2.NETSNMP_OSTYPE
+#define NETSNMP_SYSTEM_DOT_MIB_LENGTH 10
+
+/* The assigned enterprise number for notifications. */
+#define NETSNMP_NOTIFICATION_MIB 1,3,6,1,4,1,8072,4
+#define NETSNMP_NOTIFICATION_DOT_MIB 1.3.6.1.4.1.8072.4
+#define NETSNMP_NOTIFICATION_DOT_MIB_LENGTH 8
+
+/* this is the location of the ucdavis mib tree. It shouldn't be
+ changed, as the places it is used are expected to be constant
+ values or are directly tied to the UCD-SNMP-MIB. */
+#define NETSNMP_UCDAVIS_OID 2021
+#define NETSNMP_UCDAVIS_MIB 1,3,6,1,4,1,2021
+#define NETSNMP_UCDAVIS_DOT_MIB 1.3.6.1.4.1.2021
+#define NETSNMP_UCDAVIS_DOT_MIB_LENGTH 7
+
+/* how long to wait (seconds) for error querys before reseting the error trap.*/
+#define NETSNMP_ERRORTIMELENGTH 600
+
+/* Exec command to fix PROC problems */
+/* %s will be replaced by the process name in error */
+
+/* #define NETSNMP_PROCFIXCMD "/usr/bin/perl /local/scripts/fixproc %s" */
+
+/* Exec command to fix EXEC problems */
+/* %s will be replaced by the exec/script name in error */
+
+/* #define NETSNMP_EXECFIXCMD "/usr/bin/perl /local/scripts/fixproc %s" */
+
+/* Should exec output Cashing be used (speeds up things greatly), and
+ if so, After how many seconds should the cache re-newed? Note:
+ Don't define CASHETIME to disable cashing completely */
+
+#define NETSNMP_EXCACHETIME 30
+#define NETSNMP_CACHEFILE ".snmp-exec-cache"
+#define NETSNMP_MAXCACHESIZE (200*80) /* roughly 200 lines max */
+
+/* misc defaults */
+
+/* default of 100 meg minimum if the minimum size is not specified in
+ the config file */
+#define NETSNMP_DEFDISKMINIMUMSPACE 100000
+
+/* default maximum load average before error */
+#define NETSNMP_DEFMAXLOADAVE 12.0
+
+/* max times to loop reading output from execs. */
+/* Because of sleep(1)s, this will also be time to wait (in seconds) for exec
+ to finish */
+#define NETSNMP_MAXREADCOUNT 100
+
+/* Set if snmpgets should block and never timeout */
+/* The original CMU code had this hardcoded as = 1 */
+#define NETSNMP_SNMPBLOCK 1
+
+/* How long to wait before restarting the agent after a snmpset to
+ EXTENSIBLEMIB.VERSIONMIBNUM.VERRESTARTAGENT. This is
+ necessary to finish the snmpset reply before restarting. */
+#define NETSNMP_RESTARTSLEEP 5
+
+/* UNdefine to allow specifying zero-length community string */
+/* #define NETSNMP_NO_ZEROLENGTH_COMMUNITY 1 */
+
+/* define to exit the agent on a bad kernel read */
+/* #define NETSNMP_EXIT_ON_BAD_KLREAD */
+
+/* Number of community strings to store */
+#define NETSNMP_NUM_COMMUNITIES 5
+
+/* internal define */
+#define NETSNMP_LASTFIELD -1
+
+/* configure options specified */
+#define NETSNMP_CONFIGURE_OPTIONS ""
+
+/* Pluggable transports. */
+
+/* This is defined if support for the UDP/IP transport domain is
+ available. */
+#undef NETSNMP_TRANSPORT_UDP_DOMAIN
+
+/* This is defined if support for the "callback" transport domain is
+ available. */
+#undef NETSNMP_TRANSPORT_CALLBACK_DOMAIN
+
+/* This is defined if support for the TCP/IP transport domain is
+ available. */
+#undef NETSNMP_TRANSPORT_TCP_DOMAIN
+
+/* This is defined if support for the Unix transport domain
+ (a.k.a. "local IPC") is available. */
+#undef NETSNMP_TRANSPORT_UNIX_DOMAIN
+
+/* This is defined if support for the AAL5 PVC transport domain is
+ available. */
+#undef NETSNMP_TRANSPORT_AAL5PVC_DOMAIN
+
+/* This is defined if support for the IPX transport domain is
+ available. */
+#undef NETSNMP_TRANSPORT_IPX_DOMAIN
+
+/* This is defined if support for the UDP/IPv6 transport domain is
+ available. */
+#undef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
+
+/* This is defined if support for the TCP/IPv6 transport domain is
+ available. */
+#undef NETSNMP_TRANSPORT_TCPIPV6_DOMAIN
+
+/* This is defined if support for the UDP/IP transport domain is
+ available. */
+#undef NETSNMP_TRANSPORT_TLS_DOMAIN
+
+/* This is defined if support for stdin/out transport domain is available. */
+#undef NETSNMP_TRANSPORT_STD_DOMAIN
+
+/* define this if the USM security module is available */
+#undef NETSNMP_SECMOD_USM
+
+/* define this if the KSM (kerberos based snmp) security module is available */
+#undef NETSNMP_SECMOD_KSM
+
+/* define this if the local security module is available */
+#undef NETSNMP_SECMOD_LOCALSM
+
+/* define if you want to build with reentrant/threaded code (incomplete)*/
+#undef NETSNMP_REENTRANT
+
+/* define if configured as a "mini-agent" */
+#undef NETSNMP_MINI_AGENT
+
+/* define if you are embedding perl in the main agent */
+#undef NETSNMP_EMBEDDED_PERL
+
+/* define if you want to build MFD module rewrites*/
+#undef NETSNMP_ENABLE_MFD_REWRITES
+
+/* this is the location of the net-snmp mib tree. It shouldn't be
+ changed, as the places it is used are expected to be constant
+ values or are directly tied to the UCD-SNMP-MIB. */
+#define NETSNMP_OID 8072
+#define NETSNMP_MIB 1,3,6,1,4,1,8072
+#define NETSNMP_DOT_MIB 1.3.6.1.4.1.8072
+#define NETSNMP_DOT_MIB_LENGTH 7
+
+/* pattern for temporary file names */
+#define NETSNMP_TEMP_FILE_PATTERN "/tmp/snmpdXXXXXX"
+
+/*
+ * this must be before the system/machine includes, to allow them to
+ * override and turn off inlining. To do so, they should do the
+ * following:
+ *
+ * #undef NETSNMP_ENABLE_INLINE
+ * #define NETSNMP_ENABLE_INLINE 0
+ *
+ * A user having problems with their compiler can also turn off
+ * the use of inline by defining NETSNMP_NO_INLINE via their cflags:
+ *
+ * -DNETSNMP_NO_INLINE
+ *
+ * Header and source files should only test against NETSNMP_USE_INLINE:
+ *
+ * #ifdef NETSNMP_USE_INLINE
+ * NETSNMP_INLINE function(int parm) { return parm -1; }
+ * #endif
+ *
+ * Functions which should be static, regardless of whether or not inline
+ * is available or enabled should use the NETSNMP_STATIC_INLINE macro,
+ * like so:
+ *
+ * NETSNMP_STATIC_INLINE function(int parm) { return parm -1; }
+ *
+ * NOT like this:
+ *
+ * static NETSNMP_INLINE function(int parm) { return parm -1; }
+ *
+ */
+#ifdef NETSNMP_BROKEN_INLINE
+# define NETSNMP_ENABLE_INLINE 0
+#else
+# define NETSNMP_ENABLE_INLINE 1
+#endif
+
+#include NETSNMP_SYSTEM_INCLUDE_FILE
+#include NETSNMP_MACHINE_INCLUDE_FILE
+
+#if NETSNMP_ENABLE_INLINE && !defined(NETSNMP_NO_INLINE)
+# define NETSNMP_USE_INLINE 1
+# ifndef NETSNMP_INLINE
+# define NETSNMP_INLINE inline
+# endif
+# ifndef NETSNMP_STATIC_INLINE
+# define NETSNMP_STATIC_INLINE static inline
+# endif
+#else
+# define NETSNMP_INLINE
+# define NETSNMP_STATIC_INLINE static
+#endif
+
+#ifndef NETSNMP_IMPORT
+# define NETSNMP_IMPORT extern
+#endif
+
+/* define if you want to enable IPv6 support */
+#undef NETSNMP_ENABLE_IPV6
+
+/* define if you want to restrict SMUX connections to localhost by default */
+#undef NETSNMP_ENABLE_LOCAL_SMUX
+
+/* define if agentx transport is to use domain sockets only */
+#undef NETSNMP_AGENTX_DOM_SOCK_ONLY
+
+/* define if you do not want snmptrapd to register as an AgentX subagent */
+#undef NETSNMP_SNMPTRAPD_DISABLE_AGENTX
+
+/* define this if we're using the new MIT crypto API */
+#undef NETSNMP_USE_KERBEROS_MIT
+
+/* define this if you're using Heimdal Kerberos */
+#undef NETSNMP_USE_KERBEROS_HEIMDAL
+
+/* comment the next line if you are compiling with libsnmp.h
+ and are not using the UC-Davis SNMP library. */
+#define UCD_SNMP_LIBRARY 1
+
+/* add in recent CMU library extensions (not complete) */
+#undef CMU_COMPATIBLE
+
+/* final conclusion on nlist usage */
+#if defined(HAVE_NLIST) && defined(STRUCT_NLIST_HAS_N_VALUE) && !defined(NETSNMP_DONT_USE_NLIST) && !defined(NETSNMP_NO_KMEM_USAGE)
+#define NETSNMP_CAN_USE_NLIST
+#endif
+
+
+/* ********* NETSNMP_MARK_BEGIN_LEGACY_DEFINITIONS *********/
+/*
+ * existing definitions prior to Net-SNMP 5.4
+ *
+ * do not add anything new here
+ *
+ */
+
+#ifndef NETSNMP_NO_LEGACY_DEFINITIONS
+
+#ifdef NETSNMP_DEFAULT_SNMP_VERSION
+# define DEFAULT_SNMP_VERSION NETSNMP_DEFAULT_SNMP_VERSION
+#endif
+
+#ifdef NETSNMP_SNMPV1
+# define SNMPV1 NETSNMP_SNMPV1
+#endif
+
+#ifdef NETSNMP_SNMPV2ANY
+# define SNMPV2ANY NETSNMP_SNMPV2ANY
+#endif
+
+#ifdef NETSNMP_SNMPV2AUTH
+# define SNMPV2AUTH NETSNMP_SNMPV2AUTH
+#endif
+
+#ifdef NETSNMP_DEFAULT_MIBS
+# define DEFAULT_MIBS NETSNMP_DEFAULT_MIBS
+#endif
+
+#ifdef NETSNMP_DEFAULT_MIBDIRS
+# define DEFAULT_MIBDIRS NETSNMP_DEFAULT_MIBDIRS
+#endif
+
+#ifdef NETSNMP_DEFAULT_MIBFILES
+# define DEFAULT_MIBFILES NETSNMP_DEFAULT_MIBFILES
+#endif
+
+#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
+# define OPAQUE_SPECIAL_TYPES NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
+#endif
+
+#ifdef NETSNMP_ENABLE_SCAPI_AUTHPRIV
+# define SCAPI_AUTHPRIV NETSNMP_ENABLE_SCAPI_AUTHPRIV
+#endif
+
+#ifdef NETSNMP_USE_INTERNAL_MD5
+# define USE_INTERNAL_MD5 NETSNMP_USE_INTERNAL_MD5
+#endif
+
+#ifdef NETSNMP_USE_PKCS11
+# define USE_PKCS NETSNMP_USE_PKCS11
+#endif
+
+#ifdef NETSNMP_USE_OPENSSL
+# define USE_OPENSSL NETSNMP_USE_OPENSSL
+#endif
+
+#ifdef NETSNMP_NO_DEBUGGING
+# define SNMP_NO_DEBUGGING NETSNMP_NO_DEBUGGING
+#endif
+
+#ifdef NETSNMP_ALWAYS_DEBUG
+# define SNMP_ALWAYS_DEBUG NETSNMP_ALWAYS_DEBUG
+#endif
+
+#ifdef NETSNMP_USE_REVERSE_ASNENCODING
+# define USE_REVERSE_ASNENCODING NETSNMP_USE_REVERSE_ASNENCODING
+#endif
+#ifdef NETSNMP_DEFAULT_ASNENCODING_DIRECTION
+# define DEFAULT_ASNENCODING_DIRECTION NETSNMP_DEFAULT_ASNENCODING_DIRECTION
+#endif
+
+#define PERSISTENT_DIRECTORY NETSNMP_PERSISTENT_DIRECTORY
+#define PERSISTENT_MASK NETSNMP_PERSISTENT_MASK
+#define AGENT_DIRECTORY_MODE NETSNMP_AGENT_DIRECTORY_MODE
+#define MAX_PERSISTENT_BACKUPS NETSNMP_MAX_PERSISTENT_BACKUPS
+#define SYSTEM_INCLUDE_FILE NETSNMP_SYSTEM_INCLUDE_FILE
+#define MACHINE_INCLUDE_FILE NETSNMP_MACHINE_INCLUDE_FILE
+
+#ifdef NETSNMP_DEFAULT_SERVER_SEND_BUF
+# define DEFAULT_SERVER_SEND_BUF NETSNMP_DEFAULT_SERVER_SEND_BUF
+#endif
+#ifdef NETSNMP_DEFAULT_SERVER_RECV_BUF
+# define DEFAULT_SERVER_RECV_BUF NETSNMP_DEFAULT_SERVER_RECV_BUF
+#endif
+#ifdef NETSNMP_DEFAULT_CLIENT_SEND_BUF
+# define DEFAULT_CLIENT_SEND_BUF NETSNMP_DEFAULT_CLIENT_SEND_BUF
+#endif
+#ifdef NETSNMP_DEFAULT_CLIENT_RECV_BUF
+# define DEFAULT_CLIENT_RECV_BUF NETSNMP_DEFAULT_CLIENT_RECV_BUF
+#endif
+
+#ifdef NETSNMP_LOGFILE
+# define LOGFILE NETSNMP_LOGFILE
+#endif
+
+#ifdef NETSNMP_SYS_CONTACT
+# define SYS_CONTACT NETSNMP_SYS_CONTACT
+#endif
+
+#ifdef NETSNMP_SYS_LOC
+# define SYS_LOC NETSNMP_SYS_LOC
+#endif
+
+#ifdef NETSNMP_USE_LIBWRAP
+# define USE_LIBWRAP NETSNMP_USE_LIBWRAP
+#endif
+
+#ifdef NETSNMP_ENABLE_TESTING_CODE
+# define SNMP_TESTING_CODE NETSNMP_ENABLE_TESTING_CODE
+#endif
+
+#ifdef NETSNMP_NO_ROOT_ACCESS
+# define NO_ROOT_ACCESS NETSNMP_NO_ROOT_ACCESS
+#endif
+
+#ifdef NETSNMP_NO_KMEM_USAGE
+# define NO_KMEM_USAGE NETSNMP_NO_KMEM_USAGE
+#endif
+
+#ifdef NETSNMP_NO_DUMMY_VALUES
+# define NO_DUMMY_VALUES NETSNMP_NO_DUMMY_VALUES
+#endif
+
+#define VERS_DESC NETSNMP_VERS_DESC
+#define SYS_NAME NETSNMP_SYS_NAME
+
+#define PROCMIBNUM NETSNMP_PROCMIBNUM
+#define SHELLMIBNUM NETSNMP_SHELLMIBNUM
+#define MEMMIBNUM NETSNMP_MEMMIBNUM
+#define DISKMIBNUM NETSNMP_DISKMIBNUM
+
+#define LOADAVEMIBNUM NETSNMP_LOADAVEMIBNUM
+#define VERSIONMIBNUM NETSNMP_VERSIONMIBNUM
+#define ERRORMIBNUM NETSNMP_ERRORMIBNUM
+#define AGENTID NETSNMP_AGENTID
+
+#define HPUX9ID NETSNMP_HPUX9ID
+#define SUNOS4ID NETSNMP_SUNOS4ID
+#define SOLARISID NETSNMP_SOLARISID
+#define OSFID NETSNMP_OSFID
+#define ULTRIXID NETSNMP_ULTRIXID
+#define HPUX10ID NETSNMP_HPUX10ID
+#define NETBSD1ID NETSNMP_NETBSD1ID
+#define FREEBSDID NETSNMP_FREEBSDID
+#define IRIXID NETSNMP_IRIXID
+#define LINUXID NETSNMP_LINUXID
+#define BSDIID NETSNMP_BSDIID
+#define OPENBSDID NETSNMP_OPENBSDID
+#define WIN32ID NETSNMP_WIN32ID
+#define HPUX11ID NETSNMP_HPUX11ID
+#define AIXID NETSNMP_AIXID
+#define MACOSXID NETSNMP_MACOSXID
+#define UNKNOWNID NETSNMP_UNKNOWNID
+
+#define ENTERPRISE_OID NETSNMP_ENTERPRISE_OID
+#define ENTERPRISE_MIB NETSNMP_ENTERPRISE_MIB
+#define ENTERPRISE_DOT_MIB NETSNMP_ENTERPRISE_DOT_MIB
+#define ENTERPRISE_DOT_MIB_LENGTH NETSNMP_ENTERPRISE_DOT_MIB_LENGTH
+
+#define SYSTEM_MIB NETSNMP_SYSTEM_MIB
+#define SYSTEM_DOT_MIB NETSNMP_SYSTEM_DOT_MIB
+#define SYSTEM_DOT_MIB_LENGTH NETSNMP_SYSTEM_DOT_MIB_LENGTH
+
+#define NOTIFICATION_MIB NETSNMP_NOTIFICATION_MIB
+#define NOTIFICATION_DOT_MIB NETSNMP_NOTIFICATION_DOT_MIB
+#define NOTIFICATION_DOT_MIB_LENGTH NETSNMP_NOTIFICATION_DOT_MIB_LENGTH
+
+#define UCDAVIS_OID NETSNMP_UCDAVIS_OID
+#define UCDAVIS_MIB NETSNMP_UCDAVIS_MIB
+#define UCDAVIS_DOT_MIB NETSNMP_UCDAVIS_DOT_MIB
+#define UCDAVIS_DOT_MIB_LENGTH NETSNMP_UCDAVIS_DOT_MIB_LENGTH
+
+#define ERRORTIMELENGTH NETSNMP_ERRORTIMELENGTH
+
+#ifdef NETSNMP_PROCFIXCMD
+# define PROCFIXCMD NETSNMP_PROCFIXCMD
+#endif
+
+#ifdef NETSNMP_EXECFIXCMD
+# define EXECFIXCMD NETSNMP_EXECFIXCMD
+#endif
+
+#define EXCACHETIME NETSNMP_EXCACHETIME
+#define CACHEFILE NETSNMP_CACHEFILE
+#define MAXCACHESIZE NETSNMP_MAXCACHESIZE
+
+#define DEFDISKMINIMUMSPACE NETSNMP_DEFDISKMINIMUMSPACE
+#define DEFMAXLOADAVE NETSNMP_DEFMAXLOADAVE
+#define MAXREADCOUNT NETSNMP_MAXREADCOUNT
+
+#define SNMPBLOCK NETSNMP_SNMPBLOCK
+#define RESTARTSLEEP NETSNMP_RESTARTSLEEP
+
+#define NUM_COMMUNITIES NETSNMP_NUM_COMMUNITIES
+
+#ifdef NETSNMP_NO_ZEROLENGTH_COMMUNITY
+# define NO_ZEROLENGTH_COMMUNITY NETSNMP_NO_ZEROLENGTH_COMMUNITY
+#endif
+
+#ifdef NETSNMP_EXIT_ON_BAD_KLREAD
+# define EXIT_ON_BAD_KLREAD NETSNMP_EXIT_ON_BAD_KLREAD
+#endif
+
+#define LASTFIELD NETSNMP_LASTFIELD
+
+#define CONFIGURE_OPTIONS NETSNMP_CONFIGURE_OPTIONS
+
+#ifdef NETSNMP_TRANSPORT_UDP_DOMAIN
+# define SNMP_TRANSPORT_UDP_DOMAIN NETSNMP_TRANSPORT_UDP_DOMAIN
+#endif
+
+#ifdef NETSNMP_TRANSPORT_CALLBACK_DOMAIN
+# define SNMP_TRANSPORT_CALLBACK_DOMAIN NETSNMP_TRANSPORT_CALLBACK_DOMAIN
+#endif
+
+#ifdef NETSNMP_TRANSPORT_TCP_DOMAIN
+# define SNMP_TRANSPORT_TCP_DOMAIN NETSNMP_TRANSPORT_TCP_DOMAIN
+#endif
+
+#ifdef NETSNMP_TRANSPORT_UNIX_DOMAIN
+# define SNMP_TRANSPORT_UNIX_DOMAIN NETSNMP_TRANSPORT_UNIX_DOMAIN
+#endif
+
+#ifdef NETSNMP_TRANSPORT_AAL5PVC_DOMAIN
+# define SNMP_TRANSPORT_AAL5PVC_DOMAIN NETSNMP_TRANSPORT_AAL5PVC_DOMAIN
+#endif
+
+#ifdef NETSNMP_TRANSPORT_IPX_DOMAIN
+# define SNMP_TRANSPORT_IPX_DOMAIN NETSNMP_TRANSPORT_IPX_DOMAIN
+#endif
+
+#ifdef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
+# define SNMP_TRANSPORT_UDPIPV6_DOMAIN NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
+#endif
+
+#ifdef NETSNMP_TRANSPORT_TCPIPV6_DOMAIN
+# define SNMP_TRANSPORT_TCPIPV6_DOMAIN NETSNMP_TRANSPORT_TCPIPV6_DOMAIN
+#endif
+
+#ifdef NETSNMP_TRANSPORT_TLS_DOMAIN
+# define SNMP_TRANSPORT_TLS_DOMAIN NETSNMP_TRANSPORT_TLS_DOMAIN
+#endif
+
+#ifdef NETSNMP_TRANSPORT_STD_DOMAIN
+# define SNMP_TRANSPORT_STD_DOMAIN NETSNMP_TRANSPORT_STD_DOMAIN
+#endif
+
+#ifdef NETSNMP_SECMOD_USM
+# define SNMP_SECMOD_USM NETSNMP_SECMOD_USM
+#endif
+
+#ifdef NETSNMP_SECMOD_KSM
+# define SNMP_SECMOD_KSM NETSNMP_SECMOD_KSM
+#endif
+
+#ifdef NETSNMP_SECMOD_LOCALSM
+# define SNMP_SECMOD_LOCALSM NETSNMP_SECMOD_LOCALSM
+#endif
+
+#ifdef NETSNMP_REENTRANT
+# define NS_REENTRANT NETSNMP_REENTRANT
+#endif
+
+#ifdef NETSNMP_ENABLE_IPV6
+# define INET6 NETSNMP_ENABLE_IPV6
+#endif
+
+#ifdef NETSNMP_ENABLE_LOCAL_SMUX
+# define LOCAL_SMUX NETSNMP_ENABLE_LOCAL_SMUX
+#endif
+
+#ifdef NETSNMP_AGENTX_DOM_SOCK_ONLY
+# define AGENTX_DOM_SOCK_ONLY NETSNMP_AGENTX_DOM_SOCK_ONLY
+#endif
+
+#ifdef NETSNMP_SNMPTRAPD_DISABLE_AGENTX
+# define SNMPTRAPD_DISABLE_AGENTX
+#endif
+
+#ifdef NETSNMP_USE_KERBEROS_MIT
+# define MIT_NEW_CRYPTO NETSNMP_USE_KERBEROS_MIT
+#endif
+
+#ifdef NETSNMP_USE_KERBEROS_HEIMDAL
+# define HEIMDAL NETSNMP_USE_KERBEROS_HEIMDAL
+#endif
+
+#ifdef NETSNMP_AGENTX_SOCKET
+# define AGENTX_SOCKET NETSNMP_AGENTX_SOCKET
+#endif
+
+#ifdef NETSNMP_DISABLE_MIB_LOADING
+# define DISABLE_MIB_LOADING NETSNMP_DISABLE_MIB_LOADING
+#endif
+
+#ifdef NETSNMP_DISABLE_SNMPV1
+# define DISABLE_SNMPV1 NETSNMP_DISABLE_SNMPV1
+#endif
+
+#ifdef NETSNMP_DISABLE_SNMPV2C
+# define DISABLE_SNMPV2C NETSNMP_DISABLE_SNMPV2C
+#endif
+
+#ifdef NETSNMP_DISABLE_SET_SUPPORT
+# define DISABLE_SET_SUPPORT NETSNMP_DISABLE_SET_SUPPORT
+#endif
+
+#ifdef NETSNMP_DISABLE_DES
+# define DISABLE_DES NETSNMP_DISABLE_DES
+#endif
+
+#ifdef NETSNMP_DISABLE_MD5
+# define DISABLE_MD5 NETSNMP_DISABLE_MD5
+#endif
+
+#ifdef NETSNMP_DONT_USE_NLIST
+# define DONT_USE_NLIST NETSNMP_DONT_USE_NLIST
+#endif
+
+#ifdef NETSNMP_CAN_USE_NLIST
+# define CAN_USE_NLIST NETSNMP_CAN_USE_NLIST
+#endif
+
+#ifdef NETSNMP_CAN_USE_SYSCTL
+# define CAN_USE_SYSCTL NETSNMP_CAN_USE_SYSCTL
+#endif
+
+#endif /* NETSNMP_NO_LEGACY_DEFINITIONS */
+
+
+#endif /* NET_SNMP_CONFIG_H */
diff --git a/cleopatre/application/spidnetsnmp/acinclude.m4 b/cleopatre/application/spidnetsnmp/acinclude.m4
new file mode 100644
index 0000000000..5c129808ab
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/acinclude.m4
@@ -0,0 +1,200 @@
+dnl @synopsis AC_PROMPT_USER_NO_DEFINE(VARIABLENAME,QUESTION,[DEFAULT])
+dnl
+dnl Asks a QUESTION and puts the results in VARIABLENAME with an optional
+dnl DEFAULT value if the user merely hits return.
+dnl
+dnl @version 1.15
+dnl @author Wes Hardaker <hardaker@users.sourceforge.net>
+dnl
+AC_DEFUN([AC_PROMPT_USER_NO_DEFINE],
+dnl changequote(<<, >>) dnl
+dnl <<
+[
+if test "x$defaults" = "xno"; then
+echo $ECHO_N "$2 ($3): $ECHO_C"
+read tmpinput
+if test "$tmpinput" = "" -a "$3" != ""; then
+ tmpinput="$3"
+fi
+eval $1=\"$tmpinput\"
+else
+tmpinput="$3"
+eval $1=\"$tmpinput\"
+fi
+]
+dnl >>
+dnl changequote([, ])
+) dnl done AC_PROMPT_USER
+
+dnl @synopsis AC_PROMPT_USER(VARIABLENAME,QUESTION,[DEFAULT],QUOTED)
+dnl
+dnl Asks a QUESTION and puts the results in VARIABLENAME with an optional
+dnl DEFAULT value if the user merely hits return. Also calls
+dnl AC_DEFINE_UNQUOTED() on the VARIABLENAME for VARIABLENAMEs that should
+dnl be entered into the config.h file as well. If QUOTED is "quoted" then
+dnl the result will be defined within quotes.
+dnl
+dnl @version 1.15
+dnl @author Wes Hardaker <hardaker@users.sourceforge.net>
+dnl
+AC_DEFUN([AC_PROMPT_USER],
+[
+MSG_CHECK=`echo "$2" | tail -1`
+AC_CACHE_CHECK($MSG_CHECK, ac_cv_user_prompt_$1,
+[echo "" >&AC_FD_MSG
+AC_PROMPT_USER_NO_DEFINE($1,[$2],$3)
+eval ac_cv_user_prompt_$1=\$$1
+echo $ECHO_N "setting $MSG_CHECK to... $ECHO_C" >&AC_FD_MSG
+])
+if test "$ac_cv_user_prompt_$1" != "none"; then
+ if test "x$4" = "xquoted" -o "x$4" = "xQUOTED"; then
+ AC_DEFINE_UNQUOTED($1,"$ac_cv_user_prompt_$1")
+ else
+ AC_DEFINE_UNQUOTED($1,$ac_cv_user_prompt_$1)
+ fi
+fi
+]) dnl
+
+dnl @synopsis AC_CHECK_STRUCT_FOR(INCLUDES,STRUCT,MEMBER,DEFINE,[no])
+dnl
+dnl Checks STRUCT for MEMBER and defines DEFINE if found.
+dnl
+dnl @version 1.15
+dnl @author Wes Hardaker <hardaker@users.sourceforge.net>
+dnl
+AC_DEFUN([AC_CHECK_STRUCT_FOR],[
+
+ac_safe_struct=`echo "$2" | sed 'y%./+-%__p_%'`
+ac_safe_member=`echo "$3" | sed 'y%./+-%__p_%'`
+ac_safe_all="ac_cv_struct_${ac_safe_struct}_has_${ac_safe_member}"
+changequote(, )dnl
+ ac_uc_define=STRUCT_`echo "${ac_safe_struct}_HAS_${ac_safe_member}" | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+changequote([, ])dnl
+
+AC_MSG_CHECKING([for $2.$3])
+AC_CACHE_VAL($ac_safe_all,
+[
+if test "x$4" = "x"; then
+ defineit="= 0"
+elif test "x$4" = "xno"; then
+ defineit=""
+else
+ defineit="$4"
+fi
+AC_TRY_COMPILE([
+$1
+],[
+struct $2 testit;
+testit.$3 $defineit;
+], eval "${ac_safe_all}=yes", eval "${ac_safe_all}=no" )
+])
+
+if eval "test \"x$`echo ${ac_safe_all}`\" = \"xyes\""; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED($ac_uc_define)
+else
+ AC_MSG_RESULT(no)
+fi
+
+])
+
+dnl AC_CHECK_IFNET_FOR(SUBSTRUCT,[no])
+AC_DEFUN([AC_CHECK_IFNET_FOR],[
+dnl check for $1 in struct ifnet
+AC_CHECK_STRUCT_FOR([
+#ifdef IFNET_NEEDS_KERNEL
+#define _KERNEL 1
+#endif
+#include <sys/types.h>
+#include <sys/socket.h>
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#include <net/if.h>
+#ifdef HAVE_NET_IF_VAR_H
+#include <net/if_var.h>
+#endif
+#ifdef HAVE_SYS_QUEUE_H
+#include <sys/queue.h>
+#endif
+#ifdef linux
+struct ifnet {
+ char *if_name; /* name, e.g. "en" or "lo" */
+ short if_unit; /* sub-unit for lower level driver */
+ short if_mtu; /* maximum transmission unit */
+ short if_flags; /* up/down, broadcast, etc. */
+ int if_metric; /* routing metric (external only) */
+ char if_hwaddr [6]; /* ethernet address */
+ int if_type; /* interface type: 1=generic,
+ 28=slip, ether=6, loopback=24 */
+ int if_speed; /* interface speed: in bits/sec */
+
+ struct sockaddr if_addr; /* interface's address */
+ struct sockaddr ifu_broadaddr; /* broadcast address */
+ struct sockaddr ia_subnetmask; /* interface's mask */
+
+ struct ifqueue {
+ int ifq_len;
+ int ifq_drops;
+ } if_snd; /* output queue */
+ int if_ibytes; /* octets received on interface */
+ int if_ipackets; /* packets received on interface */
+ int if_ierrors; /* input errors on interface */
+ int if_iqdrops; /* input queue overruns */
+ int if_obytes; /* octets sent on interface */
+ int if_opackets; /* packets sent on interface */
+ int if_oerrors; /* output errors on interface */
+ int if_collisions; /* collisions on csma interfaces */
+/* end statistics */
+ struct ifnet *if_next;
+};
+#endif
+], ifnet, $1, $2)
+])
+
+dnl
+dnl Add a search path to the LIBS and CFLAGS variables
+dnl
+AC_DEFUN([AC_ADD_SEARCH_PATH],[
+ if test "x$1" != x -a -d $1; then
+ if test -d $1/lib; then
+ LDFLAGS="-L$1/lib $LDFLAGS"
+ fi
+ if test -d $1/include; then
+ CPPFLAGS="-I$1/include $CPPFLAGS"
+ fi
+ fi
+])
+
+dnl
+dnl Store information for displaying later.
+dnl
+AC_DEFUN([AC_MSG_CACHE_INIT],[
+ rm -f configure-summary
+])
+
+AC_DEFUN([AC_MSG_CACHE_ADD],[
+ cat >> configure-summary << EOF
+ $1
+EOF
+])
+
+AC_DEFUN([AC_MSG_CACHE_DISPLAY],[
+ echo ""
+ echo "---------------------------------------------------------"
+ echo " Net-SNMP configuration summary:"
+ echo "---------------------------------------------------------"
+ echo ""
+ cat configure-summary
+ echo ""
+ echo "---------------------------------------------------------"
+ echo ""
+])
+
+AC_DEFUN([AC_MSG_MODULE_DBG],
+[
+ if test $module_debug = 1; then
+ echo $1 $2 $3 $4
+ fi
+]
+)
diff --git a/cleopatre/application/spidnetsnmp/aclocal.m4 b/cleopatre/application/spidnetsnmp/aclocal.m4
new file mode 100644
index 0000000000..4246174411
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/aclocal.m4
@@ -0,0 +1,6650 @@
+# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+
+# serial 52 AC_PROG_LIBTOOL
+
+
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
+m4_ifdef([AC_PROVIDE_IFELSE],
+ [],
+ [m4_define([AC_PROVIDE_IFELSE],
+ [m4_ifdef([AC_PROVIDE_$1],
+ [$2], [$3])])])
+
+
+# AC_PROG_LIBTOOL
+# ---------------
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [AC_LIBTOOL_CXX],
+ [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+ ])])
+dnl And a similar setup for Fortran 77 support
+ AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [AC_LIBTOOL_F77],
+ [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+])])
+
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [ifdef([AC_PROG_GCJ],
+ [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([A][M_PROG_GCJ],
+ [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([LT_AC_PROG_GCJ],
+ [define([LT_AC_PROG_GCJ],
+ defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+])])# AC_PROG_LIBTOOL
+
+
+# _AC_PROG_LIBTOOL
+# ----------------
+AC_DEFUN([_AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])# _AC_PROG_LIBTOOL
+
+
+# AC_LIBTOOL_SETUP
+# ----------------
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+AC_LIBTOOL_SYS_MAX_CMD_LEN
+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+AC_LIBTOOL_OBJDIR
+
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+_LT_AC_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e 1s/^X//'
+[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
+
+# Same as above, but do not quote variable references.
+[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+AC_CHECK_TOOL(AR, ar, false)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ AC_PATH_MAGIC
+ fi
+ ;;
+esac
+
+_LT_REQUIRED_DARWIN_CHECKS
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE([libtool-lock],
+ [AC_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+AC_ARG_WITH([pic],
+ [AC_HELP_STRING([--with-pic],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [pic_mode="$withval"],
+ [pic_mode=default])
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+AC_LIBTOOL_LANG_C_CONFIG
+_LT_AC_TAGCONFIG
+])# AC_LIBTOOL_SETUP
+
+
+# _LT_AC_SYS_COMPILER
+# -------------------
+AC_DEFUN([_LT_AC_SYS_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_AC_SYS_COMPILER
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+AC_DEFUN([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+AC_DEFUN([_LT_COMPILER_BOILERPLATE],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+AC_DEFUN([_LT_LINKER_BOILERPLATE],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# --------------------------
+# Check for some things on darwin
+AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS],[
+ case $host_os in
+ rhapsody* | darwin*)
+ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+
+ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ echo "int foo(void){return 1;}" > conftest.c
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib ${wl}-single_module conftest.c
+ if test -f libconftest.dylib; then
+ lt_cv_apple_cc_single_mod=yes
+ rm -rf libconftest.dylib*
+ fi
+ rm conftest.c
+ fi])
+ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+ [lt_cv_ld_exported_symbols_list],
+ [lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [lt_cv_ld_exported_symbols_list=yes],
+ [lt_cv_ld_exported_symbols_list=no])
+ LDFLAGS="$save_LDFLAGS"
+ ])
+ case $host_os in
+ rhapsody* | darwin1.[[0123]])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*)
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[[012]]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms="~$NMEDIT -s \$output_objdir/\${libname}-symbols.expsym \${lib}"
+ fi
+ if test "$DSYMUTIL" != ":"; then
+ _lt_dsymutil="~$DSYMUTIL \$lib || :"
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+])
+
+# _LT_AC_SYS_LIBPATH_AIX
+# ----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_AC_SYS_LIBPATH_AIX
+
+
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+AC_DEFUN([_LT_AC_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+ [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_AC_SHELL_INIT
+
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[_LT_AC_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+ ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X[$]1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $echo works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+[$]*
+EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if (echo_test_string=`eval $cmd`) 2>/dev/null &&
+ echo_test_string=`eval $cmd` &&
+ (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+ then
+ break
+ fi
+ done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$echo" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ echo='print -r'
+ elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+ else
+ # Try using printf.
+ echo='printf %s\n'
+ if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+ if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "[$]0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ echo=echo
+ fi
+ fi
+ fi
+ fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+ ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+])])# _LT_AC_PROG_ECHO_BACKSLASH
+
+
+# _LT_AC_LOCK
+# -----------
+AC_DEFUN([_LT_AC_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AC_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+ ])
+esac
+
+need_locks="$enable_libtool_lock"
+
+])# _LT_AC_LOCK
+
+
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+[AC_REQUIRE([LT_AC_PROG_SED])
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $rm conftest*
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$5], , :, [$5])
+else
+ ifelse([$6], , :, [$6])
+fi
+])# AC_LIBTOOL_COMPILER_OPTION
+
+
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $rm -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$4], , :, [$4])
+else
+ ifelse([$5], , :, [$5])
+fi
+])# AC_LIBTOOL_LINKER_OPTION
+
+
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+[# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
+ = "XX$teststring") >/dev/null 2>&1 &&
+ new_result=`expr "X$teststring" : ".*" 2>&1` &&
+ lt_cv_sys_max_cmd_len=$new_result &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on massive
+ # amounts of additional arguments before passing them to the linker.
+ # It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
+
+
+# _LT_AC_CHECK_DLFCN
+# ------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)dnl
+])# _LT_AC_CHECK_DLFCN
+
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ---------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}]
+EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+
+# AC_LIBTOOL_DLOPEN_SELF
+# ----------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_AC_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_AC_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $rm conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+ $rm out/* && rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
+])
+])# AC_LIBTOOL_PROG_CC_C_O
+
+
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
+# Check to see if we can do hard links to lock some files if needed
+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+[AC_REQUIRE([_LT_AC_LOCK])dnl
+
+hard_links="nottested"
+if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
+
+
+# AC_LIBTOOL_OBJDIR
+# -----------------
+AC_DEFUN([AC_LIBTOOL_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+])# AC_LIBTOOL_OBJDIR
+
+
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
+# Check hardcoding attributes.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_AC_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+ test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
+ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_AC_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_AC_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+
+
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+[striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+])# AC_LIBTOOL_SYS_LIB_STRIP
+
+
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+m4_if($1,[],[
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`echo $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[[4-9]]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+ m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[123]]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[[3-9]]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+nto-qnx*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ shlibpath_overrides_runpath=no
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ shlibpath_overrides_runpath=yes
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+AC_CACHE_VAL([lt_cv_sys_lib_search_path_spec],
+[lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"])
+sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+AC_CACHE_VAL([lt_cv_sys_lib_dlsearch_path_spec],
+[lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"])
+sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+
+
+# _LT_AC_TAGCONFIG
+# ----------------
+AC_DEFUN([_LT_AC_TAGCONFIG],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_ARG_WITH([tags],
+ [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+ [include additional configurations @<:@automatic@:>@])],
+ [tagnames="$withval"])
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+ if test ! -f "${ofile}"; then
+ AC_MSG_WARN([output file `$ofile' does not exist])
+ fi
+
+ if test -z "$LTCC"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+ if test -z "$LTCC"; then
+ AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+ else
+ AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+ fi
+ fi
+ if test -z "$LTCFLAGS"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
+ fi
+
+ # Extract list of available tagged configurations in $ofile.
+ # Note that this assumes the entire list is on one line.
+ available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for tagname in $tagnames; do
+ IFS="$lt_save_ifs"
+ # Check whether tagname contains only valid characters
+ case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+ "") ;;
+ *) AC_MSG_ERROR([invalid tag name: $tagname])
+ ;;
+ esac
+
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+ then
+ AC_MSG_ERROR([tag name \"$tagname\" already exists])
+ fi
+
+ # Update the list of available tags.
+ if test -n "$tagname"; then
+ echo appending configuration tag \"$tagname\" to $ofile
+
+ case $tagname in
+ CXX)
+ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ AC_LIBTOOL_LANG_CXX_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ F77)
+ if test -n "$F77" && test "X$F77" != "Xno"; then
+ AC_LIBTOOL_LANG_F77_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ GCJ)
+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+ AC_LIBTOOL_LANG_GCJ_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ RC)
+ AC_LIBTOOL_LANG_RC_CONFIG
+ ;;
+
+ *)
+ AC_MSG_ERROR([Unsupported tag name: $tagname])
+ ;;
+ esac
+
+ # Append the new tag name to the list of available tags.
+ if test -n "$tagname" ; then
+ available_tags="$available_tags $tagname"
+ fi
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ # Now substitute the updated list of available tags.
+ if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+ mv "${ofile}T" "$ofile"
+ chmod +x "$ofile"
+ else
+ rm -f "${ofile}T"
+ AC_MSG_ERROR([unable to update list of available tagged configurations.])
+ fi
+fi
+])# _LT_AC_TAGCONFIG
+
+
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN],
+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_DLOPEN
+
+
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 DLLs
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_WIN32_DLL
+
+
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([shared],
+ [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
+])# AC_ENABLE_SHARED
+
+
+# AC_DISABLE_SHARED
+# -----------------
+# set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)
+])# AC_DISABLE_SHARED
+
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([static],
+ [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]AC_ENABLE_STATIC_DEFAULT)
+])# AC_ENABLE_STATIC
+
+
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)
+])# AC_DISABLE_STATIC
+
+
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([fast-install],
+ [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+])# AC_ENABLE_FAST_INSTALL
+
+
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)
+])# AC_DISABLE_FAST_INSTALL
+
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)
+])# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+ [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])])
+
+
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognize shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="ifelse([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$1; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+])# AC_PATH_TOOL_PREFIX
+
+
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognize a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# AC_PATH_MAGIC
+
+
+# AC_PROG_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+ [AC_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])
+AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])# AC_PROG_LD
+
+
+# AC_PROG_LD_GNU
+# --------------
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# AC_PROG_LD_GNU
+
+
+# AC_PROG_LD_RELOAD_FLAG
+# ----------------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+])# AC_PROG_LD_RELOAD_FLAG
+
+
+# AC_DEPLIBS_CHECK_METHOD
+# -----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[[45]]*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[[3-9]]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+nto-qnx*)
+ lt_cv_deplibs_check_method=unknown
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+])# AC_DEPLIBS_CHECK_METHOD
+
+
+# AC_PROG_NM
+# ----------
+# find the pathname to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+])# AC_PROG_NM
+
+
+# AC_CHECK_LIBM
+# -------------
+# check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
+ ;;
+esac
+])# AC_CHECK_LIBM
+
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments. Note that
+# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
+# it is assumed to be `libltdl'. LIBLTDL will be prefixed with
+# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/'
+# (note the single quotes!). If your package is not flat and you're not
+# using automake, define top_builddir and top_srcdir appropriately in
+# the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ case $enable_ltdl_convenience in
+ no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+ "") enable_ltdl_convenience=yes
+ ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+ esac
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments. Note that
+# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
+# and an installed libltdl is not found, it is assumed to be `libltdl'.
+# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with
+# '${top_srcdir}/' (note the single quotes!). If your package is not
+# flat and you're not using automake, define top_builddir and top_srcdir
+# appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ AC_CHECK_LIB(ltdl, lt_dlinit,
+ [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+ [if test x"$enable_ltdl_install" = xno; then
+ AC_MSG_WARN([libltdl not installed, but installation disabled])
+ else
+ enable_ltdl_install=yes
+ fi
+ ])
+ if test x"$enable_ltdl_install" = x"yes"; then
+ ac_configure_args="$ac_configure_args --enable-ltdl-install"
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ else
+ ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+ LIBLTDL="-lltdl"
+ LTDLINCL=
+ fi
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+AC_DEFUN([AC_LIBTOOL_CXX],
+[AC_REQUIRE([_LT_AC_LANG_CXX])
+])# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+AC_DEFUN([_LT_AC_LANG_CXX],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
+])# _LT_AC_LANG_CXX
+
+# _LT_AC_PROG_CXXCPP
+# ------------------
+AC_DEFUN([_LT_AC_PROG_CXXCPP],
+[
+AC_REQUIRE([AC_PROG_CXX])
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ AC_PROG_CXXCPP
+fi
+])# _LT_AC_PROG_CXXCPP
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+AC_DEFUN([AC_LIBTOOL_F77],
+[AC_REQUIRE([_LT_AC_LANG_F77])
+])# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+AC_DEFUN([_LT_AC_LANG_F77],
+[AC_REQUIRE([AC_PROG_F77])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
+])# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+AC_DEFUN([AC_LIBTOOL_GCJ],
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
+])# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+AC_DEFUN([_LT_AC_LANG_GCJ],
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+ [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+ [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+ [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
+])# _LT_AC_LANG_GCJ
+
+
+# AC_LIBTOOL_RC
+# -------------
+# enable support for Windows resource files
+AC_DEFUN([AC_LIBTOOL_RC],
+[AC_REQUIRE([LT_AC_PROG_RC])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
+])# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+[lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF
+
+# Report which library types will actually be built
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case $host_os in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+[AC_LANG_PUSH(C++)
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Dependencies to place before and after the object being linked:
+_LT_AC_TAGVAR(predep_objects, $1)=
+_LT_AC_TAGVAR(postdep_objects, $1)=
+_LT_AC_TAGVAR(predeps, $1)=
+_LT_AC_TAGVAR(postdeps, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+ $as_unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+ $as_unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+else
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+fi
+
+if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ AC_PROG_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+ grep 'no-whole-archive' > /dev/null; then
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+ if test "$GXX" = yes ; then
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+ _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+ fi
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ freebsd[[12]]*)
+ # C++ shared libraries reported to be fairly broken before switch to ELF
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ freebsd-elf*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+ gnu*)
+ ;;
+ hpux9*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*) ;;
+ *)
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ interix[[3-9]]*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+ fi
+ fi
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc*)
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='echo'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd='echo'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ osf3*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~
+ $rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='echo'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | grep -v '^2\.7' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ fi
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ # So that behaviour is only enabled if SCOABSPATH is set to a
+ # non-empty value in the environment. Most likely only useful for
+ # creating official distributions of packages.
+ # This is a hack until libtool officially supports absolute path
+ # names for shared libraries.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+esac
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_POSTDEP_PREDEP($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+])# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
+# ------------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
+int a;
+void foo (void) { a = 0; }
+EOF
+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+EOF
+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+EOF
+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ # The `*' in the case matches for architectures that use `case' in
+ # $output_verbose_cmd can trigger glob expansion during the loop
+ # eval without this substitution.
+ output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
+
+ for p in `eval $output_verbose_link_cmd`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" \
+ || test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
+ _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
+ _LT_AC_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
+ _LT_AC_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$rm -f confest.$objext
+
+_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_AC_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+# PORTME: override above test on systems where it is broken
+ifelse([$1],[CXX],
+[case $host_os in
+interix[[3-9]]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_AC_TAGVAR(predep_objects,$1)=
+ _LT_AC_TAGVAR(postdep_objects,$1)=
+ _LT_AC_TAGVAR(postdeps,$1)=
+ ;;
+
+linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ #
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ # Adding this requires a known-good setup of shared libraries for
+ # Sun compiler versions before 5.6, else PIC objects from an old
+ # archive will be linked into the output, leading to subtle bugs.
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+esac
+])
+case " $_LT_AC_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+])# AC_LIBTOOL_POSTDEP_PREDEP
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
+[AC_REQUIRE([AC_PROG_F77])
+AC_LANG_PUSH(Fortran 77)
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="\
+ program t
+ end
+"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case $host_os in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+_LT_AC_TAGVAR(GCC, $1)="$G77"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_F77_CONFIG
+
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_GCJ_CONFIG
+
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+# -------------------------
+# Ensure that the configuration vars for the Windows resource compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
+AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_RC_CONFIG
+
+
+# AC_LIBTOOL_CONFIG([TAGNAME])
+# ----------------------------
+# If TAGNAME is not passed, then create an initial libtool script
+# with a default configuration from the untagged config vars. Otherwise
+# add code to config.status for appending the configuration named by
+# TAGNAME from the matching tagged config vars.
+AC_DEFUN([AC_LIBTOOL_CONFIG],
+[# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+ SED SHELL STRIP \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ _LT_AC_TAGVAR(compiler, $1) \
+ _LT_AC_TAGVAR(CC, $1) \
+ _LT_AC_TAGVAR(LD, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
+ _LT_AC_TAGVAR(old_archive_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
+ _LT_AC_TAGVAR(predep_objects, $1) \
+ _LT_AC_TAGVAR(postdep_objects, $1) \
+ _LT_AC_TAGVAR(predeps, $1) \
+ _LT_AC_TAGVAR(postdeps, $1) \
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+ _LT_AC_TAGVAR(compiler_lib_search_dirs, $1) \
+ _LT_AC_TAGVAR(archive_cmds, $1) \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(postinstall_cmds, $1) \
+ _LT_AC_TAGVAR(postuninstall_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
+ _LT_AC_TAGVAR(allow_undefined_flag, $1) \
+ _LT_AC_TAGVAR(no_undefined_flag, $1) \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
+ _LT_AC_TAGVAR(hardcode_automatic, $1) \
+ _LT_AC_TAGVAR(module_cmds, $1) \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+ _LT_AC_TAGVAR(fix_srcfile_path, $1) \
+ _LT_AC_TAGVAR(exclude_expsyms, $1) \
+ _LT_AC_TAGVAR(include_expsyms, $1); do
+
+ case $var in
+ _LT_AC_TAGVAR(old_archive_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(module_cmds, $1) | \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\[$]0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
+ ;;
+ esac
+
+ifelse([$1], [],
+ [cfgfile="${ofile}T"
+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+ $rm -f "$cfgfile"
+ AC_MSG_NOTICE([creating $ofile])],
+ [cfgfile="$ofile"])
+
+ cat <<__EOF__ >> "$cfgfile"
+ifelse([$1], [],
+[#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e 1s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG],
+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
+# A language-specific compiler.
+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+
+# Is the compiler the GNU C compiler?
+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+
+# The directories searched by this compiler when creating a shared
+# library
+compiler_lib_search_dirs=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+
+# Symbols that must always be exported.
+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+
+ifelse([$1],[],
+[# ### END LIBTOOL CONFIG],
+[# ### END LIBTOOL TAG CONFIG: $tagname])
+
+__EOF__
+
+ifelse([$1],[], [
+ case $host_os in
+ aix3*)
+ cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+EOF
+ ;;
+ esac
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" || \
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+])
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+ if test -f "$ltmain_in"; then
+ test -f Makefile && make "$ltmain"
+ fi
+fi
+])# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+
+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([LT_AC_PROG_SED])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ ;;
+linux* | k*bsd*-gnu)
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDGIRSTW]]'
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if grep ' nm_test_var$' "$nlist" >/dev/null; then
+ if grep ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+ cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr_t address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+ cat <<\EOF >> conftest.$ac_ext
+ {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+ ifelse([$1],[CXX],[
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[[4-9]]*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ icpc* | ecpc*)
+ # Intel C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler.
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ darwin*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ case $cc_basename in
+ xlc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ rdos*)
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_pic_works, $1),
+ [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+])
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ifelse([$1],[CXX],[
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix[[4-9]]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw*)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+ ;;
+ *)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+ _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+],[
+ runpath_var=
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)=
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+ _LT_AC_TAGVAR(module_cmds, $1)=
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_AC_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+ extract_expsyms_cmds=
+ # Just being paranoid about ensuring that cc_basename is set.
+ _LT_CC_BASENAME([$compiler])
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>/dev/null` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[[3-9]]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ interix[[3-9]]*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | k*bsd*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ *)
+ tmp_sharedflag='-shared' ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test $supports_anon_versioning = yes; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ $echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
+ runpath_var=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ # see comment about different semantics on the GNU ld section
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ bsdi[[45]]*)
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ darwin* | rhapsody*)
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
+ ;;
+ *) # Darwin 1.3 on
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ else
+ case ${MACOSX_DEPLOYMENT_TARGET} in
+ 10.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+ ;;
+ 10.*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ if test "$GCC" = yes ; then
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ else
+ case $cc_basename in
+ xlc*)
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ ;;
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+ ;;
+
+ dgux*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ freebsd1*)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ os2*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+ else
+ wlarc=''
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_AC_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+ $rm conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+ then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+ ;;
+ esac
+ fi
+ ;;
+esac
+])# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# # ifdef __CYGWIN32__
+# # define __CYGWIN__ __CYGWIN32__
+# # endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+# __hDllInstance_base = hInst;
+# return TRUE;
+# }
+# /* ltdll.c ends here */
+])# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+
+AC_DEFUN([LT_AC_PROG_GCJ],
+[AC_CHECK_TOOL(GCJ, gcj, no)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)
+])
+
+AC_DEFUN([LT_AC_PROG_RC],
+[AC_CHECK_TOOL(RC, windres, no)
+])
+
+
+# Cheap backport of AS_EXECUTABLE_P and required macros
+# from Autoconf 2.59; we should not use $as_executable_p directly.
+
+# _AS_TEST_PREPARE
+# ----------------
+m4_ifndef([_AS_TEST_PREPARE],
+[m4_defun([_AS_TEST_PREPARE],
+[if test -x / >/dev/null 2>&1; then
+ as_executable_p='test -x'
+else
+ as_executable_p='test -f'
+fi
+])])# _AS_TEST_PREPARE
+
+# AS_EXECUTABLE_P
+# ---------------
+# Check whether a file is executable.
+m4_ifndef([AS_EXECUTABLE_P],
+[m4_defun([AS_EXECUTABLE_P],
+[AS_REQUIRE([_AS_TEST_PREPARE])dnl
+$as_executable_p $1[]dnl
+])])# AS_EXECUTABLE_P
+
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+AC_DEFUN([LT_AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if AS_EXECUTABLE_P(["$as_dir/$lt_ac_prog$ac_exec_ext"]); then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])
+
+m4_include([acinclude.m4])
diff --git a/cleopatre/application/spidnetsnmp/agent/Makefile.depend b/cleopatre/application/spidnetsnmp/agent/Makefile.depend
new file mode 100644
index 0000000000..58932d4fd1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/Makefile.depend
@@ -0,0 +1,5007 @@
+# DO NOT DELETE THIS LINE -- make depend depends on it.
+
+./agent_handler.lo: ../include/net-snmp/net-snmp-config.h
+./agent_handler.lo: ../include/net-snmp/system/linux.h
+./agent_handler.lo: ../include/net-snmp/system/sysv.h
+./agent_handler.lo: ../include/net-snmp/system/generic.h
+./agent_handler.lo: ../include/net-snmp/machine/generic.h
+./agent_handler.lo: ../include/net-snmp/net-snmp-includes.h
+./agent_handler.lo: ../include/net-snmp/definitions.h
+./agent_handler.lo: ../include/net-snmp/types.h
+./agent_handler.lo: ../include/net-snmp/library/snmp_api.h
+./agent_handler.lo: ../include/net-snmp/library/asn1.h
+./agent_handler.lo: ../include/net-snmp/library/snmp_impl.h
+./agent_handler.lo: ../include/net-snmp/library/snmp.h
+./agent_handler.lo: ../include/net-snmp/library/snmp-tc.h
+./agent_handler.lo: ../include/net-snmp/utilities.h
+./agent_handler.lo: ../include/net-snmp/library/snmp_client.h
+./agent_handler.lo: ../include/net-snmp/library/system.h
+./agent_handler.lo: ../include/net-snmp/library/tools.h
+./agent_handler.lo: ../include/net-snmp/library/int64.h
+./agent_handler.lo: ../include/net-snmp/library/mt_support.h
+./agent_handler.lo: ../include/net-snmp/library/snmp_alarm.h
+./agent_handler.lo: ../include/net-snmp/library/callback.h
+./agent_handler.lo: ../include/net-snmp/library/data_list.h
+./agent_handler.lo: ../include/net-snmp/library/oid_stash.h
+./agent_handler.lo: ../include/net-snmp/library/check_varbind.h
+./agent_handler.lo: ../include/net-snmp/library/container.h
+./agent_handler.lo: ../include/net-snmp/library/factory.h
+./agent_handler.lo: ../include/net-snmp/library/snmp_logging.h
+./agent_handler.lo: ../include/net-snmp/library/container_binary_array.h
+./agent_handler.lo: ../include/net-snmp/library/container_list_ssll.h
+./agent_handler.lo: ../include/net-snmp/library/container_iterator.h
+./agent_handler.lo: ../include/net-snmp/library/container.h
+./agent_handler.lo: ../include/net-snmp/library/snmp_assert.h
+./agent_handler.lo: ../include/net-snmp/version.h
+./agent_handler.lo: ../include/net-snmp/session_api.h
+./agent_handler.lo: ../include/net-snmp/library/snmp_transport.h
+./agent_handler.lo: ../include/net-snmp/library/snmp_service.h
+./agent_handler.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./agent_handler.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./agent_handler.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./agent_handler.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./agent_handler.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agent_handler.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agent_handler.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./agent_handler.lo: ../include/net-snmp/library/ucd_compat.h
+./agent_handler.lo: ../include/net-snmp/pdu_api.h
+./agent_handler.lo: ../include/net-snmp/mib_api.h
+./agent_handler.lo: ../include/net-snmp/library/mib.h
+./agent_handler.lo: ../include/net-snmp/library/parse.h
+./agent_handler.lo: ../include/net-snmp/varbind_api.h
+./agent_handler.lo: ../include/net-snmp/config_api.h
+./agent_handler.lo: ../include/net-snmp/library/read_config.h
+./agent_handler.lo: ../include/net-snmp/library/default_store.h
+./agent_handler.lo: ../include/net-snmp/library/snmp_parse_args.h
+./agent_handler.lo: ../include/net-snmp/library/snmp_enum.h
+./agent_handler.lo: ../include/net-snmp/library/vacm.h
+./agent_handler.lo: ../include/net-snmp/output_api.h
+./agent_handler.lo: ../include/net-snmp/library/snmp_debug.h
+./agent_handler.lo: ../include/net-snmp/snmpv3_api.h
+./agent_handler.lo: ../include/net-snmp/library/snmpv3.h
+./agent_handler.lo: ../include/net-snmp/library/transform_oids.h
+./agent_handler.lo: ../include/net-snmp/library/keytools.h
+./agent_handler.lo: ../include/net-snmp/library/scapi.h
+./agent_handler.lo: ../include/net-snmp/library/lcd_time.h
+./agent_handler.lo: ../include/net-snmp/library/snmp_secmod.h
+./agent_handler.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./agent_handler.lo: ../include/net-snmp/library/snmpusm.h
+./agent_handler.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./agent_handler.lo: ../include/net-snmp/agent/mib_module_config.h
+./agent_handler.lo: ../include/net-snmp/agent/agent_module_config.h
+./agent_handler.lo: ../include/net-snmp/agent/snmp_agent.h
+./agent_handler.lo: ../include/net-snmp/agent/snmp_vars.h
+./agent_handler.lo: ../include/net-snmp/agent/agent_handler.h
+./agent_handler.lo: ../include/net-snmp/agent/var_struct.h
+./agent_handler.lo: ../include/net-snmp/agent/agent_registry.h
+./agent_handler.lo: ../include/net-snmp/library/fd_event_manager.h
+./agent_handler.lo: ../include/net-snmp/agent/ds_agent.h
+./agent_handler.lo: ../include/net-snmp/agent/agent_read_config.h
+./agent_handler.lo: ../include/net-snmp/agent/agent_trap.h
+./agent_handler.lo: ../include/net-snmp/agent/all_helpers.h
+./agent_handler.lo: ../include/net-snmp/agent/instance.h
+./agent_handler.lo: ../include/net-snmp/agent/baby_steps.h
+./agent_handler.lo: ../include/net-snmp/agent/scalar.h
+./agent_handler.lo: ../include/net-snmp/agent/scalar_group.h
+./agent_handler.lo: ../include/net-snmp/agent/watcher.h
+./agent_handler.lo: ../include/net-snmp/agent/multiplexer.h
+./agent_handler.lo: ../include/net-snmp/agent/null.h
+./agent_handler.lo: ../include/net-snmp/agent/debug_handler.h
+./agent_handler.lo: ../include/net-snmp/agent/cache_handler.h
+./agent_handler.lo: ../include/net-snmp/agent/old_api.h
+./agent_handler.lo: ../include/net-snmp/agent/read_only.h
+./agent_handler.lo: ../include/net-snmp/agent/row_merge.h
+./agent_handler.lo: ../include/net-snmp/agent/serialize.h
+./agent_handler.lo: ../include/net-snmp/agent/bulk_to_next.h
+./agent_handler.lo: ../include/net-snmp/agent/mode_end_call.h
+./agent_handler.lo: ../include/net-snmp/agent/table.h
+./agent_handler.lo: ../include/net-snmp/agent/table_data.h
+./agent_handler.lo: ../include/net-snmp/agent/table_dataset.h
+./agent_handler.lo: ../include/net-snmp/agent/table_tdata.h
+./agent_handler.lo: ../include/net-snmp/agent/table_iterator.h
+./agent_handler.lo: ../include/net-snmp/agent/table_container.h
+./agent_handler.lo: ../include/net-snmp/agent/table_array.h
+./agent_handler.lo: ../include/net-snmp/agent/mfd.h
+./agent_index.lo: ../include/net-snmp/net-snmp-config.h
+./agent_index.lo: ../include/net-snmp/system/linux.h
+./agent_index.lo: ../include/net-snmp/system/sysv.h
+./agent_index.lo: ../include/net-snmp/system/generic.h
+./agent_index.lo: ../include/net-snmp/machine/generic.h
+./agent_index.lo: ../include/net-snmp/net-snmp-includes.h
+./agent_index.lo: ../include/net-snmp/definitions.h
+./agent_index.lo: ../include/net-snmp/types.h
+./agent_index.lo: ../include/net-snmp/library/snmp_api.h
+./agent_index.lo: ../include/net-snmp/library/asn1.h
+./agent_index.lo: ../include/net-snmp/library/snmp_impl.h
+./agent_index.lo: ../include/net-snmp/library/snmp.h
+./agent_index.lo: ../include/net-snmp/library/snmp-tc.h
+./agent_index.lo: ../include/net-snmp/utilities.h
+./agent_index.lo: ../include/net-snmp/library/snmp_client.h
+./agent_index.lo: ../include/net-snmp/library/system.h
+./agent_index.lo: ../include/net-snmp/library/tools.h
+./agent_index.lo: ../include/net-snmp/library/int64.h
+./agent_index.lo: ../include/net-snmp/library/mt_support.h
+./agent_index.lo: ../include/net-snmp/library/snmp_alarm.h
+./agent_index.lo: ../include/net-snmp/library/callback.h
+./agent_index.lo: ../include/net-snmp/library/data_list.h
+./agent_index.lo: ../include/net-snmp/library/oid_stash.h
+./agent_index.lo: ../include/net-snmp/library/check_varbind.h
+./agent_index.lo: ../include/net-snmp/library/container.h
+./agent_index.lo: ../include/net-snmp/library/factory.h
+./agent_index.lo: ../include/net-snmp/library/snmp_logging.h
+./agent_index.lo: ../include/net-snmp/library/container_binary_array.h
+./agent_index.lo: ../include/net-snmp/library/container_list_ssll.h
+./agent_index.lo: ../include/net-snmp/library/container_iterator.h
+./agent_index.lo: ../include/net-snmp/library/container.h
+./agent_index.lo: ../include/net-snmp/library/snmp_assert.h
+./agent_index.lo: ../include/net-snmp/version.h
+./agent_index.lo: ../include/net-snmp/session_api.h
+./agent_index.lo: ../include/net-snmp/library/snmp_transport.h
+./agent_index.lo: ../include/net-snmp/library/snmp_service.h
+./agent_index.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./agent_index.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./agent_index.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./agent_index.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./agent_index.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agent_index.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agent_index.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./agent_index.lo: ../include/net-snmp/library/ucd_compat.h
+./agent_index.lo: ../include/net-snmp/pdu_api.h ../include/net-snmp/mib_api.h
+./agent_index.lo: ../include/net-snmp/library/mib.h
+./agent_index.lo: ../include/net-snmp/library/parse.h
+./agent_index.lo: ../include/net-snmp/varbind_api.h
+./agent_index.lo: ../include/net-snmp/config_api.h
+./agent_index.lo: ../include/net-snmp/library/read_config.h
+./agent_index.lo: ../include/net-snmp/library/default_store.h
+./agent_index.lo: ../include/net-snmp/library/snmp_parse_args.h
+./agent_index.lo: ../include/net-snmp/library/snmp_enum.h
+./agent_index.lo: ../include/net-snmp/library/vacm.h
+./agent_index.lo: ../include/net-snmp/output_api.h
+./agent_index.lo: ../include/net-snmp/library/snmp_debug.h
+./agent_index.lo: ../include/net-snmp/snmpv3_api.h
+./agent_index.lo: ../include/net-snmp/library/snmpv3.h
+./agent_index.lo: ../include/net-snmp/library/transform_oids.h
+./agent_index.lo: ../include/net-snmp/library/keytools.h
+./agent_index.lo: ../include/net-snmp/library/scapi.h
+./agent_index.lo: ../include/net-snmp/library/lcd_time.h
+./agent_index.lo: ../include/net-snmp/library/snmp_secmod.h
+./agent_index.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./agent_index.lo: ../include/net-snmp/library/snmpusm.h
+./agent_index.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./agent_index.lo: ../include/net-snmp/agent/mib_module_config.h
+./agent_index.lo: ../include/net-snmp/agent/agent_module_config.h
+./agent_index.lo: ../include/net-snmp/agent/snmp_agent.h
+./agent_index.lo: ../include/net-snmp/agent/snmp_vars.h
+./agent_index.lo: ../include/net-snmp/agent/agent_handler.h
+./agent_index.lo: ../include/net-snmp/agent/var_struct.h
+./agent_index.lo: ../include/net-snmp/agent/agent_registry.h
+./agent_index.lo: ../include/net-snmp/library/fd_event_manager.h
+./agent_index.lo: ../include/net-snmp/agent/ds_agent.h
+./agent_index.lo: ../include/net-snmp/agent/agent_read_config.h
+./agent_index.lo: ../include/net-snmp/agent/agent_trap.h
+./agent_index.lo: ../include/net-snmp/agent/all_helpers.h
+./agent_index.lo: ../include/net-snmp/agent/instance.h
+./agent_index.lo: ../include/net-snmp/agent/baby_steps.h
+./agent_index.lo: ../include/net-snmp/agent/scalar.h
+./agent_index.lo: ../include/net-snmp/agent/scalar_group.h
+./agent_index.lo: ../include/net-snmp/agent/watcher.h
+./agent_index.lo: ../include/net-snmp/agent/multiplexer.h
+./agent_index.lo: ../include/net-snmp/agent/null.h
+./agent_index.lo: ../include/net-snmp/agent/debug_handler.h
+./agent_index.lo: ../include/net-snmp/agent/cache_handler.h
+./agent_index.lo: ../include/net-snmp/agent/old_api.h
+./agent_index.lo: ../include/net-snmp/agent/read_only.h
+./agent_index.lo: ../include/net-snmp/agent/row_merge.h
+./agent_index.lo: ../include/net-snmp/agent/serialize.h
+./agent_index.lo: ../include/net-snmp/agent/bulk_to_next.h
+./agent_index.lo: ../include/net-snmp/agent/mode_end_call.h
+./agent_index.lo: ../include/net-snmp/agent/table.h
+./agent_index.lo: ../include/net-snmp/agent/table_data.h
+./agent_index.lo: ../include/net-snmp/agent/table_dataset.h
+./agent_index.lo: ../include/net-snmp/agent/table_tdata.h
+./agent_index.lo: ../include/net-snmp/agent/table_iterator.h
+./agent_index.lo: ../include/net-snmp/agent/table_container.h
+./agent_index.lo: ../include/net-snmp/agent/table_array.h
+./agent_index.lo: ../include/net-snmp/agent/mfd.h
+./agent_index.lo: ../include/net-snmp/agent/agent_callbacks.h
+./agent_index.lo: ../include/net-snmp/agent/agent_index.h snmpd.h
+./agent_index.lo: mibgroup/struct.h ../agent/mibgroup/mib_module_includes.h
+./agent_index.lo: mibgroup/examples/example.h mibgroup/testhandler.h
+./agent_index.lo: mibgroup/host/hr_system.h mibgroup/host/hr_storage.h
+./agent_index.lo: mibgroup/host/hr_device.h mibgroup/host/hr_other.h
+./agent_index.lo: mibgroup/host/hr_proc.h mibgroup/host/hr_network.h
+./agent_index.lo: mibgroup/host/hr_print.h mibgroup/host/hr_disk.h
+./agent_index.lo: mibgroup/host/hr_partition.h mibgroup/host/hr_filesys.h
+./agent_index.lo: mibgroup/host/hr_swrun.h mibgroup/host/hr_swinst.h
+./agent_index.lo: mibgroup/examples/scalar_int.h mibgroup/examples/watched.h
+./agent_index.lo: mibgroup/examples/data_set.h
+./agent_index.lo: mibgroup/examples/delayed_instance.h mibgroup/Rmon/rows.h
+./agent_index.lo: mibgroup/Rmon/agutil.h mibgroup/Rmon/statistics.h
+./agent_index.lo: mibgroup/Rmon/alarm.h mibgroup/Rmon/history.h
+./agent_index.lo: mibgroup/Rmon/event.h mibgroup/disman/event/mteScalars.h
+./agent_index.lo: mibgroup/disman/event/mteTrigger.h
+./agent_index.lo: mibgroup/disman/event/mteTriggerTable.h
+./agent_index.lo: mibgroup/disman/event/mteTriggerDeltaTable.h
+./agent_index.lo: mibgroup/disman/event/mteTriggerExistenceTable.h
+./agent_index.lo: mibgroup/disman/event/mteTriggerBooleanTable.h
+./agent_index.lo: mibgroup/disman/event/mteTriggerThresholdTable.h
+./agent_index.lo: mibgroup/disman/event/mteTriggerConf.h
+./agent_index.lo: mibgroup/disman/event/mteEvent.h
+./agent_index.lo: ../agent/mibgroup/disman/event/mteTrigger.h
+./agent_index.lo: mibgroup/disman/event/mteEventTable.h
+./agent_index.lo: mibgroup/disman/event/mteEventSetTable.h
+./agent_index.lo: mibgroup/disman/event/mteEventNotificationTable.h
+./agent_index.lo: mibgroup/disman/event/mteEventConf.h
+./agent_index.lo: mibgroup/disman/event/mteObjects.h
+./agent_index.lo: mibgroup/disman/event/mteObjectsTable.h
+./agent_index.lo: mibgroup/disman/event/mteObjectsConf.h
+./agent_index.lo: mibgroup/snmpv3/snmpEngine.h mibgroup/snmpv3/snmpMPDStats.h
+./agent_index.lo: mibgroup/snmpv3/usmStats.h mibgroup/snmpv3/usmUser.h
+./agent_index.lo: mibgroup/mibII/system_mib.h mibgroup/mibII/sysORTable.h
+./agent_index.lo: mibgroup/mibII/at.h mibgroup/mibII/ip.h
+./agent_index.lo: mibgroup/mibII/var_route.h mibgroup/mibII/route_write.h
+./agent_index.lo: mibgroup/mibII/at.h mibgroup/mibII/snmp_mib.h
+./agent_index.lo: mibgroup/mibII/tcp.h mibgroup/mibII/icmp.h
+./agent_index.lo: mibgroup/mibII/udp.h mibgroup/mibII/vacm_vars.h
+./agent_index.lo: mibgroup/mibII/setSerialNo.h mibgroup/mibII/ipv6.h
+./agent_index.lo: mibgroup/ucd-snmp/proc.h ../agent/mibgroup/mibdefs.h
+./agent_index.lo: mibgroup/ucd-snmp/versioninfo.h mibgroup/ucd-snmp/pass.h
+./agent_index.lo: mibgroup/ucd-snmp/pass_persist.h mibgroup/ucd-snmp/disk.h
+./agent_index.lo: mibgroup/ucd-snmp/loadave.h mibgroup/agent/extend.h
+./agent_index.lo: mibgroup/ucd-snmp/errormib.h mibgroup/ucd-snmp/file.h
+./agent_index.lo: mibgroup/ucd-snmp/dlmod.h mibgroup/ucd-snmp/proxy.h
+./agent_index.lo: mibgroup/ucd-snmp/logmatch.h
+./agent_index.lo: mibgroup/ucd-snmp/memory.h mibgroup/ucd-snmp/vmstat.h
+./agent_index.lo: mibgroup/notification/snmpNotifyTable.h
+./agent_index.lo: mibgroup/notification/snmpNotifyFilterProfileTable.h
+./agent_index.lo: mibgroup/notification-log-mib/notification_log.h
+./agent_index.lo: mibgroup/target/snmpTargetAddrEntry.h
+./agent_index.lo: mibgroup/target/snmpTargetParamsEntry.h
+./agent_index.lo: mibgroup/target/target_counters.h
+./agent_index.lo: mibgroup/agent/nsTransactionTable.h
+./agent_index.lo: mibgroup/agent/nsModuleTable.h mibgroup/agent/nsDebug.h
+./agent_index.lo: mibgroup/agent/nsCache.h mibgroup/agent/nsLogging.h
+./agent_index.lo: mibgroup/agent/nsVacmAccessTable.h
+./agent_index.lo: mibgroup/disman/schedule/schedCore.h
+./agent_index.lo: mibgroup/disman/schedule/schedConf.h
+./agent_index.lo: mibgroup/disman/schedule/schedTable.h
+./agent_index.lo: mibgroup/utilities/override.h
+./agent_index.lo: mibgroup/hardware/memory/hw_mem.h
+./agent_index.lo: mibgroup/hardware/cpu/cpu.h
+./agent_index.lo: mibgroup/hardware/cpu/cpu_linux.h
+./agent_index.lo: mibgroup/mibII/var_route.h mibgroup/mibII/tcpTable.h
+./agent_index.lo: mibgroup/mibII/udpTable.h mibgroup/mibII/vacm_context.h
+./agent_index.lo: mibgroup/ip-mib/ip_scalars.h
+./agent_index.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./agent_index.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_constants.h
+./agent_index.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.h
+./agent_index.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./agent_index.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.h
+./agent_index.lo: mibgroup/if-mib/ifTable/ifTable.h
+./agent_index.lo: ../include/net-snmp/data_access/interface.h
+./agent_index.lo: mibgroup/if-mib/ifTable/ifTable_constants.h
+./agent_index.lo: mibgroup/if-mib/ifTable/ifTable_interface.h
+./agent_index.lo: mibgroup/if-mib/ifTable/ifTable.h
+./agent_index.lo: mibgroup/if-mib/ifTable/ifTable_data_access.h
+./agent_index.lo: mibgroup/if-mib/ifXTable/ifXTable.h
+./agent_index.lo: ../agent/mibgroup/if-mib/ifTable/ifTable.h
+./agent_index.lo: mibgroup/if-mib/ifXTable/ifXTable_constants.h
+./agent_index.lo: mibgroup/if-mib/ifXTable/ifXTable_interface.h
+./agent_index.lo: mibgroup/if-mib/ifXTable/ifXTable.h
+./agent_index.lo: mibgroup/if-mib/ifXTable/ifXTable_data_access.h
+./agent_index.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+./agent_index.lo: ../include/net-snmp/data_access/ipaddress.h
+./agent_index.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h
+./agent_index.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.h
+./agent_index.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+./agent_index.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.h
+./agent_index.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+./agent_index.lo: ../include/net-snmp/data_access/arp.h
+./agent_index.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h
+./agent_index.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h
+./agent_index.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+./agent_index.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h
+./agent_index.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+./agent_index.lo: ../include/net-snmp/data_access/ipstats.h
+./agent_index.lo: ../include/net-snmp/data_access/systemstats.h
+./agent_index.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h
+./agent_index.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h
+./agent_index.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+./agent_index.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.h
+./agent_index.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+./agent_index.lo: ../include/net-snmp/data_access/route.h
+./agent_index.lo: ../agent/mibgroup/mibII/route_headers.h
+./agent_index.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_constants.h
+./agent_index.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.h
+./agent_index.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+./agent_index.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.h
+./agent_index.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+./agent_index.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_constants.h
+./agent_index.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h
+./agent_index.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+./agent_index.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.h
+./agent_index.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h
+./agent_index.lo: ../include/net-snmp/data_access/tcpConn.h
+./agent_index.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_constants.h
+./agent_index.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.h
+./agent_index.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h
+./agent_index.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.h
+./agent_index.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h
+./agent_index.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_constants.h
+./agent_index.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.h
+./agent_index.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h
+./agent_index.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.h
+./agent_index.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h
+./agent_index.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_constants.h
+./agent_index.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_interface.h
+./agent_index.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h
+./agent_index.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.h
+./agent_index.lo: mibgroup/if-mib/data_access/interface.h
+./agent_index.lo: ../agent/mibgroup/agentx/subagent.h
+./agent_index.lo: ../agent/mibgroup/agentx/client.h
+./agent_read_config.lo: ../include/net-snmp/net-snmp-config.h
+./agent_read_config.lo: ../include/net-snmp/system/linux.h
+./agent_read_config.lo: ../include/net-snmp/system/sysv.h
+./agent_read_config.lo: ../include/net-snmp/system/generic.h
+./agent_read_config.lo: ../include/net-snmp/machine/generic.h
+./agent_read_config.lo: ../include/net-snmp/net-snmp-includes.h
+./agent_read_config.lo: ../include/net-snmp/definitions.h
+./agent_read_config.lo: ../include/net-snmp/types.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp_api.h
+./agent_read_config.lo: ../include/net-snmp/library/asn1.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp_impl.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp-tc.h
+./agent_read_config.lo: ../include/net-snmp/utilities.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp_client.h
+./agent_read_config.lo: ../include/net-snmp/library/system.h
+./agent_read_config.lo: ../include/net-snmp/library/tools.h
+./agent_read_config.lo: ../include/net-snmp/library/int64.h
+./agent_read_config.lo: ../include/net-snmp/library/mt_support.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp_alarm.h
+./agent_read_config.lo: ../include/net-snmp/library/callback.h
+./agent_read_config.lo: ../include/net-snmp/library/data_list.h
+./agent_read_config.lo: ../include/net-snmp/library/oid_stash.h
+./agent_read_config.lo: ../include/net-snmp/library/check_varbind.h
+./agent_read_config.lo: ../include/net-snmp/library/container.h
+./agent_read_config.lo: ../include/net-snmp/library/factory.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp_logging.h
+./agent_read_config.lo: ../include/net-snmp/library/container_binary_array.h
+./agent_read_config.lo: ../include/net-snmp/library/container_list_ssll.h
+./agent_read_config.lo: ../include/net-snmp/library/container_iterator.h
+./agent_read_config.lo: ../include/net-snmp/library/container.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp_assert.h
+./agent_read_config.lo: ../include/net-snmp/version.h
+./agent_read_config.lo: ../include/net-snmp/session_api.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp_transport.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp_service.h
+./agent_read_config.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./agent_read_config.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./agent_read_config.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./agent_read_config.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./agent_read_config.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agent_read_config.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agent_read_config.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./agent_read_config.lo: ../include/net-snmp/library/ucd_compat.h
+./agent_read_config.lo: ../include/net-snmp/pdu_api.h
+./agent_read_config.lo: ../include/net-snmp/mib_api.h
+./agent_read_config.lo: ../include/net-snmp/library/mib.h
+./agent_read_config.lo: ../include/net-snmp/library/parse.h
+./agent_read_config.lo: ../include/net-snmp/varbind_api.h
+./agent_read_config.lo: ../include/net-snmp/config_api.h
+./agent_read_config.lo: ../include/net-snmp/library/read_config.h
+./agent_read_config.lo: ../include/net-snmp/library/default_store.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp_parse_args.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp_enum.h
+./agent_read_config.lo: ../include/net-snmp/library/vacm.h
+./agent_read_config.lo: ../include/net-snmp/output_api.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp_debug.h
+./agent_read_config.lo: ../include/net-snmp/snmpv3_api.h
+./agent_read_config.lo: ../include/net-snmp/library/snmpv3.h
+./agent_read_config.lo: ../include/net-snmp/library/transform_oids.h
+./agent_read_config.lo: ../include/net-snmp/library/keytools.h
+./agent_read_config.lo: ../include/net-snmp/library/scapi.h
+./agent_read_config.lo: ../include/net-snmp/library/lcd_time.h
+./agent_read_config.lo: ../include/net-snmp/library/snmp_secmod.h
+./agent_read_config.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./agent_read_config.lo: ../include/net-snmp/library/snmpusm.h
+./agent_read_config.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./agent_read_config.lo: ../include/net-snmp/agent/mib_module_config.h
+./agent_read_config.lo: ../include/net-snmp/agent/agent_module_config.h
+./agent_read_config.lo: ../include/net-snmp/agent/snmp_agent.h
+./agent_read_config.lo: ../include/net-snmp/agent/snmp_vars.h
+./agent_read_config.lo: ../include/net-snmp/agent/agent_handler.h
+./agent_read_config.lo: ../include/net-snmp/agent/var_struct.h
+./agent_read_config.lo: ../include/net-snmp/agent/agent_registry.h
+./agent_read_config.lo: ../include/net-snmp/library/fd_event_manager.h
+./agent_read_config.lo: ../include/net-snmp/agent/ds_agent.h
+./agent_read_config.lo: ../include/net-snmp/agent/agent_read_config.h
+./agent_read_config.lo: ../include/net-snmp/agent/agent_trap.h
+./agent_read_config.lo: ../include/net-snmp/agent/all_helpers.h
+./agent_read_config.lo: ../include/net-snmp/agent/instance.h
+./agent_read_config.lo: ../include/net-snmp/agent/baby_steps.h
+./agent_read_config.lo: ../include/net-snmp/agent/scalar.h
+./agent_read_config.lo: ../include/net-snmp/agent/scalar_group.h
+./agent_read_config.lo: ../include/net-snmp/agent/watcher.h
+./agent_read_config.lo: ../include/net-snmp/agent/multiplexer.h
+./agent_read_config.lo: ../include/net-snmp/agent/null.h
+./agent_read_config.lo: ../include/net-snmp/agent/debug_handler.h
+./agent_read_config.lo: ../include/net-snmp/agent/cache_handler.h
+./agent_read_config.lo: ../include/net-snmp/agent/old_api.h
+./agent_read_config.lo: ../include/net-snmp/agent/read_only.h
+./agent_read_config.lo: ../include/net-snmp/agent/row_merge.h
+./agent_read_config.lo: ../include/net-snmp/agent/serialize.h
+./agent_read_config.lo: ../include/net-snmp/agent/bulk_to_next.h
+./agent_read_config.lo: ../include/net-snmp/agent/mode_end_call.h
+./agent_read_config.lo: ../include/net-snmp/agent/table.h
+./agent_read_config.lo: ../include/net-snmp/agent/table_data.h
+./agent_read_config.lo: ../include/net-snmp/agent/table_dataset.h
+./agent_read_config.lo: ../include/net-snmp/agent/table_tdata.h
+./agent_read_config.lo: ../include/net-snmp/agent/table_iterator.h
+./agent_read_config.lo: ../include/net-snmp/agent/table_container.h
+./agent_read_config.lo: ../include/net-snmp/agent/table_array.h
+./agent_read_config.lo: ../include/net-snmp/agent/mfd.h mibgroup/struct.h
+./agent_read_config.lo: snmpd.h ../include/net-snmp/agent/agent_callbacks.h
+./agent_read_config.lo: ../agent/mibgroup/agent_module_includes.h
+./agent_read_config.lo: mibgroup/smux/smux.h mibgroup/snmpv3/usmConf.h
+./agent_read_config.lo: mibgroup/utilities/iquery.h
+./agent_read_config.lo: mibgroup/mibII/vacm_conf.h
+./agent_read_config.lo: ../agent/mibgroup/mib_module_includes.h
+./agent_read_config.lo: mibgroup/examples/example.h mibgroup/testhandler.h
+./agent_read_config.lo: mibgroup/host/hr_system.h mibgroup/host/hr_storage.h
+./agent_read_config.lo: mibgroup/host/hr_device.h mibgroup/host/hr_other.h
+./agent_read_config.lo: mibgroup/host/hr_proc.h mibgroup/host/hr_network.h
+./agent_read_config.lo: mibgroup/host/hr_print.h mibgroup/host/hr_disk.h
+./agent_read_config.lo: mibgroup/host/hr_partition.h
+./agent_read_config.lo: mibgroup/host/hr_filesys.h mibgroup/host/hr_swrun.h
+./agent_read_config.lo: mibgroup/host/hr_swinst.h
+./agent_read_config.lo: mibgroup/examples/scalar_int.h
+./agent_read_config.lo: mibgroup/examples/watched.h
+./agent_read_config.lo: mibgroup/examples/data_set.h
+./agent_read_config.lo: mibgroup/examples/delayed_instance.h
+./agent_read_config.lo: mibgroup/Rmon/rows.h mibgroup/Rmon/agutil.h
+./agent_read_config.lo: mibgroup/Rmon/statistics.h mibgroup/Rmon/alarm.h
+./agent_read_config.lo: mibgroup/Rmon/history.h mibgroup/Rmon/event.h
+./agent_read_config.lo: mibgroup/disman/event/mteScalars.h
+./agent_read_config.lo: mibgroup/disman/event/mteTrigger.h
+./agent_read_config.lo: mibgroup/disman/event/mteTriggerTable.h
+./agent_read_config.lo: mibgroup/disman/event/mteTriggerDeltaTable.h
+./agent_read_config.lo: mibgroup/disman/event/mteTriggerExistenceTable.h
+./agent_read_config.lo: mibgroup/disman/event/mteTriggerBooleanTable.h
+./agent_read_config.lo: mibgroup/disman/event/mteTriggerThresholdTable.h
+./agent_read_config.lo: mibgroup/disman/event/mteTriggerConf.h
+./agent_read_config.lo: mibgroup/disman/event/mteEvent.h
+./agent_read_config.lo: ../agent/mibgroup/disman/event/mteTrigger.h
+./agent_read_config.lo: mibgroup/disman/event/mteEventTable.h
+./agent_read_config.lo: mibgroup/disman/event/mteEventSetTable.h
+./agent_read_config.lo: mibgroup/disman/event/mteEventNotificationTable.h
+./agent_read_config.lo: mibgroup/disman/event/mteEventConf.h
+./agent_read_config.lo: mibgroup/disman/event/mteObjects.h
+./agent_read_config.lo: mibgroup/disman/event/mteObjectsTable.h
+./agent_read_config.lo: mibgroup/disman/event/mteObjectsConf.h
+./agent_read_config.lo: mibgroup/snmpv3/snmpEngine.h
+./agent_read_config.lo: mibgroup/snmpv3/snmpMPDStats.h
+./agent_read_config.lo: mibgroup/snmpv3/usmStats.h mibgroup/snmpv3/usmUser.h
+./agent_read_config.lo: mibgroup/mibII/system_mib.h
+./agent_read_config.lo: mibgroup/mibII/sysORTable.h mibgroup/mibII/at.h
+./agent_read_config.lo: mibgroup/mibII/ip.h mibgroup/mibII/var_route.h
+./agent_read_config.lo: mibgroup/mibII/route_write.h mibgroup/mibII/at.h
+./agent_read_config.lo: mibgroup/mibII/snmp_mib.h mibgroup/mibII/tcp.h
+./agent_read_config.lo: mibgroup/mibII/icmp.h mibgroup/mibII/udp.h
+./agent_read_config.lo: mibgroup/mibII/vacm_vars.h
+./agent_read_config.lo: mibgroup/mibII/setSerialNo.h mibgroup/mibII/ipv6.h
+./agent_read_config.lo: mibgroup/ucd-snmp/proc.h ../agent/mibgroup/mibdefs.h
+./agent_read_config.lo: mibgroup/ucd-snmp/versioninfo.h
+./agent_read_config.lo: mibgroup/ucd-snmp/pass.h
+./agent_read_config.lo: mibgroup/ucd-snmp/pass_persist.h
+./agent_read_config.lo: mibgroup/ucd-snmp/disk.h mibgroup/ucd-snmp/loadave.h
+./agent_read_config.lo: mibgroup/agent/extend.h mibgroup/ucd-snmp/errormib.h
+./agent_read_config.lo: mibgroup/ucd-snmp/file.h mibgroup/ucd-snmp/dlmod.h
+./agent_read_config.lo: mibgroup/ucd-snmp/proxy.h
+./agent_read_config.lo: mibgroup/ucd-snmp/logmatch.h
+./agent_read_config.lo: mibgroup/ucd-snmp/memory.h mibgroup/ucd-snmp/vmstat.h
+./agent_read_config.lo: mibgroup/notification/snmpNotifyTable.h
+./agent_read_config.lo: mibgroup/notification/snmpNotifyFilterProfileTable.h
+./agent_read_config.lo: mibgroup/notification-log-mib/notification_log.h
+./agent_read_config.lo: mibgroup/target/snmpTargetAddrEntry.h
+./agent_read_config.lo: mibgroup/target/snmpTargetParamsEntry.h
+./agent_read_config.lo: mibgroup/target/target_counters.h
+./agent_read_config.lo: mibgroup/agent/nsTransactionTable.h
+./agent_read_config.lo: mibgroup/agent/nsModuleTable.h
+./agent_read_config.lo: mibgroup/agent/nsDebug.h mibgroup/agent/nsCache.h
+./agent_read_config.lo: mibgroup/agent/nsLogging.h
+./agent_read_config.lo: mibgroup/agent/nsVacmAccessTable.h
+./agent_read_config.lo: mibgroup/disman/schedule/schedCore.h
+./agent_read_config.lo: mibgroup/disman/schedule/schedConf.h
+./agent_read_config.lo: mibgroup/disman/schedule/schedTable.h
+./agent_read_config.lo: mibgroup/utilities/override.h
+./agent_read_config.lo: mibgroup/hardware/memory/hw_mem.h
+./agent_read_config.lo: mibgroup/hardware/cpu/cpu.h
+./agent_read_config.lo: mibgroup/hardware/cpu/cpu_linux.h
+./agent_read_config.lo: mibgroup/mibII/var_route.h mibgroup/mibII/tcpTable.h
+./agent_read_config.lo: mibgroup/mibII/udpTable.h
+./agent_read_config.lo: mibgroup/mibII/vacm_context.h
+./agent_read_config.lo: mibgroup/ip-mib/ip_scalars.h
+./agent_read_config.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./agent_read_config.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_constants.h
+./agent_read_config.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.h
+./agent_read_config.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./agent_read_config.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.h
+./agent_read_config.lo: mibgroup/if-mib/ifTable/ifTable.h
+./agent_read_config.lo: ../include/net-snmp/data_access/interface.h
+./agent_read_config.lo: mibgroup/if-mib/ifTable/ifTable_constants.h
+./agent_read_config.lo: mibgroup/if-mib/ifTable/ifTable_interface.h
+./agent_read_config.lo: mibgroup/if-mib/ifTable/ifTable.h
+./agent_read_config.lo: mibgroup/if-mib/ifTable/ifTable_data_access.h
+./agent_read_config.lo: mibgroup/if-mib/ifXTable/ifXTable.h
+./agent_read_config.lo: ../agent/mibgroup/if-mib/ifTable/ifTable.h
+./agent_read_config.lo: mibgroup/if-mib/ifXTable/ifXTable_constants.h
+./agent_read_config.lo: mibgroup/if-mib/ifXTable/ifXTable_interface.h
+./agent_read_config.lo: mibgroup/if-mib/ifXTable/ifXTable.h
+./agent_read_config.lo: mibgroup/if-mib/ifXTable/ifXTable_data_access.h
+./agent_read_config.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+./agent_read_config.lo: ../include/net-snmp/data_access/ipaddress.h
+./agent_read_config.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h
+./agent_read_config.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.h
+./agent_read_config.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+./agent_read_config.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.h
+./agent_read_config.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+./agent_read_config.lo: ../include/net-snmp/data_access/arp.h
+./agent_read_config.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h
+./agent_read_config.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h
+./agent_read_config.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+./agent_read_config.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h
+./agent_read_config.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+./agent_read_config.lo: ../include/net-snmp/data_access/ipstats.h
+./agent_read_config.lo: ../include/net-snmp/data_access/systemstats.h
+./agent_read_config.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h
+./agent_read_config.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h
+./agent_read_config.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+./agent_read_config.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.h
+./agent_read_config.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+./agent_read_config.lo: ../include/net-snmp/data_access/route.h
+./agent_read_config.lo: ../agent/mibgroup/mibII/route_headers.h
+./agent_read_config.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_constants.h
+./agent_read_config.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.h
+./agent_read_config.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+./agent_read_config.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.h
+./agent_read_config.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+./agent_read_config.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_constants.h
+./agent_read_config.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h
+./agent_read_config.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+./agent_read_config.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.h
+./agent_read_config.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h
+./agent_read_config.lo: ../include/net-snmp/data_access/tcpConn.h
+./agent_read_config.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_constants.h
+./agent_read_config.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.h
+./agent_read_config.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h
+./agent_read_config.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.h
+./agent_read_config.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h
+./agent_read_config.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_constants.h
+./agent_read_config.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.h
+./agent_read_config.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h
+./agent_read_config.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.h
+./agent_read_config.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h
+./agent_read_config.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_constants.h
+./agent_read_config.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_interface.h
+./agent_read_config.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h
+./agent_read_config.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.h
+./agent_read_config.lo: mibgroup/if-mib/data_access/interface.h
+./agent_read_config.lo: ../agent/mibgroup/agent_module_dot_conf.h
+./agent_read_config.lo: ../agent/mibgroup/mib_module_dot_conf.h
+./agent_registry.lo: ../include/net-snmp/net-snmp-config.h
+./agent_registry.lo: ../include/net-snmp/system/linux.h
+./agent_registry.lo: ../include/net-snmp/system/sysv.h
+./agent_registry.lo: ../include/net-snmp/system/generic.h
+./agent_registry.lo: ../include/net-snmp/machine/generic.h
+./agent_registry.lo: ../include/net-snmp/net-snmp-includes.h
+./agent_registry.lo: ../include/net-snmp/definitions.h
+./agent_registry.lo: ../include/net-snmp/types.h
+./agent_registry.lo: ../include/net-snmp/library/snmp_api.h
+./agent_registry.lo: ../include/net-snmp/library/asn1.h
+./agent_registry.lo: ../include/net-snmp/library/snmp_impl.h
+./agent_registry.lo: ../include/net-snmp/library/snmp.h
+./agent_registry.lo: ../include/net-snmp/library/snmp-tc.h
+./agent_registry.lo: ../include/net-snmp/utilities.h
+./agent_registry.lo: ../include/net-snmp/library/snmp_client.h
+./agent_registry.lo: ../include/net-snmp/library/system.h
+./agent_registry.lo: ../include/net-snmp/library/tools.h
+./agent_registry.lo: ../include/net-snmp/library/int64.h
+./agent_registry.lo: ../include/net-snmp/library/mt_support.h
+./agent_registry.lo: ../include/net-snmp/library/snmp_alarm.h
+./agent_registry.lo: ../include/net-snmp/library/callback.h
+./agent_registry.lo: ../include/net-snmp/library/data_list.h
+./agent_registry.lo: ../include/net-snmp/library/oid_stash.h
+./agent_registry.lo: ../include/net-snmp/library/check_varbind.h
+./agent_registry.lo: ../include/net-snmp/library/container.h
+./agent_registry.lo: ../include/net-snmp/library/factory.h
+./agent_registry.lo: ../include/net-snmp/library/snmp_logging.h
+./agent_registry.lo: ../include/net-snmp/library/container_binary_array.h
+./agent_registry.lo: ../include/net-snmp/library/container_list_ssll.h
+./agent_registry.lo: ../include/net-snmp/library/container_iterator.h
+./agent_registry.lo: ../include/net-snmp/library/container.h
+./agent_registry.lo: ../include/net-snmp/library/snmp_assert.h
+./agent_registry.lo: ../include/net-snmp/version.h
+./agent_registry.lo: ../include/net-snmp/session_api.h
+./agent_registry.lo: ../include/net-snmp/library/snmp_transport.h
+./agent_registry.lo: ../include/net-snmp/library/snmp_service.h
+./agent_registry.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./agent_registry.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./agent_registry.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./agent_registry.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./agent_registry.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agent_registry.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agent_registry.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./agent_registry.lo: ../include/net-snmp/library/ucd_compat.h
+./agent_registry.lo: ../include/net-snmp/pdu_api.h
+./agent_registry.lo: ../include/net-snmp/mib_api.h
+./agent_registry.lo: ../include/net-snmp/library/mib.h
+./agent_registry.lo: ../include/net-snmp/library/parse.h
+./agent_registry.lo: ../include/net-snmp/varbind_api.h
+./agent_registry.lo: ../include/net-snmp/config_api.h
+./agent_registry.lo: ../include/net-snmp/library/read_config.h
+./agent_registry.lo: ../include/net-snmp/library/default_store.h
+./agent_registry.lo: ../include/net-snmp/library/snmp_parse_args.h
+./agent_registry.lo: ../include/net-snmp/library/snmp_enum.h
+./agent_registry.lo: ../include/net-snmp/library/vacm.h
+./agent_registry.lo: ../include/net-snmp/output_api.h
+./agent_registry.lo: ../include/net-snmp/library/snmp_debug.h
+./agent_registry.lo: ../include/net-snmp/snmpv3_api.h
+./agent_registry.lo: ../include/net-snmp/library/snmpv3.h
+./agent_registry.lo: ../include/net-snmp/library/transform_oids.h
+./agent_registry.lo: ../include/net-snmp/library/keytools.h
+./agent_registry.lo: ../include/net-snmp/library/scapi.h
+./agent_registry.lo: ../include/net-snmp/library/lcd_time.h
+./agent_registry.lo: ../include/net-snmp/library/snmp_secmod.h
+./agent_registry.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./agent_registry.lo: ../include/net-snmp/library/snmpusm.h
+./agent_registry.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./agent_registry.lo: ../include/net-snmp/agent/mib_module_config.h
+./agent_registry.lo: ../include/net-snmp/agent/agent_module_config.h
+./agent_registry.lo: ../include/net-snmp/agent/snmp_agent.h
+./agent_registry.lo: ../include/net-snmp/agent/snmp_vars.h
+./agent_registry.lo: ../include/net-snmp/agent/agent_handler.h
+./agent_registry.lo: ../include/net-snmp/agent/var_struct.h
+./agent_registry.lo: ../include/net-snmp/agent/agent_registry.h
+./agent_registry.lo: ../include/net-snmp/library/fd_event_manager.h
+./agent_registry.lo: ../include/net-snmp/agent/ds_agent.h
+./agent_registry.lo: ../include/net-snmp/agent/agent_read_config.h
+./agent_registry.lo: ../include/net-snmp/agent/agent_trap.h
+./agent_registry.lo: ../include/net-snmp/agent/all_helpers.h
+./agent_registry.lo: ../include/net-snmp/agent/instance.h
+./agent_registry.lo: ../include/net-snmp/agent/baby_steps.h
+./agent_registry.lo: ../include/net-snmp/agent/scalar.h
+./agent_registry.lo: ../include/net-snmp/agent/scalar_group.h
+./agent_registry.lo: ../include/net-snmp/agent/watcher.h
+./agent_registry.lo: ../include/net-snmp/agent/multiplexer.h
+./agent_registry.lo: ../include/net-snmp/agent/null.h
+./agent_registry.lo: ../include/net-snmp/agent/debug_handler.h
+./agent_registry.lo: ../include/net-snmp/agent/cache_handler.h
+./agent_registry.lo: ../include/net-snmp/agent/old_api.h
+./agent_registry.lo: ../include/net-snmp/agent/read_only.h
+./agent_registry.lo: ../include/net-snmp/agent/row_merge.h
+./agent_registry.lo: ../include/net-snmp/agent/serialize.h
+./agent_registry.lo: ../include/net-snmp/agent/bulk_to_next.h
+./agent_registry.lo: ../include/net-snmp/agent/mode_end_call.h
+./agent_registry.lo: ../include/net-snmp/agent/table.h
+./agent_registry.lo: ../include/net-snmp/agent/table_data.h
+./agent_registry.lo: ../include/net-snmp/agent/table_dataset.h
+./agent_registry.lo: ../include/net-snmp/agent/table_tdata.h
+./agent_registry.lo: ../include/net-snmp/agent/table_iterator.h
+./agent_registry.lo: ../include/net-snmp/agent/table_container.h
+./agent_registry.lo: ../include/net-snmp/agent/table_array.h
+./agent_registry.lo: ../include/net-snmp/agent/mfd.h
+./agent_registry.lo: ../include/net-snmp/agent/agent_callbacks.h snmpd.h
+./agent_registry.lo: mibgroup/struct.h
+./agent_registry.lo: ../agent/mibgroup/mib_module_includes.h
+./agent_registry.lo: mibgroup/examples/example.h mibgroup/testhandler.h
+./agent_registry.lo: mibgroup/host/hr_system.h mibgroup/host/hr_storage.h
+./agent_registry.lo: mibgroup/host/hr_device.h mibgroup/host/hr_other.h
+./agent_registry.lo: mibgroup/host/hr_proc.h mibgroup/host/hr_network.h
+./agent_registry.lo: mibgroup/host/hr_print.h mibgroup/host/hr_disk.h
+./agent_registry.lo: mibgroup/host/hr_partition.h mibgroup/host/hr_filesys.h
+./agent_registry.lo: mibgroup/host/hr_swrun.h mibgroup/host/hr_swinst.h
+./agent_registry.lo: mibgroup/examples/scalar_int.h
+./agent_registry.lo: mibgroup/examples/watched.h mibgroup/examples/data_set.h
+./agent_registry.lo: mibgroup/examples/delayed_instance.h
+./agent_registry.lo: mibgroup/Rmon/rows.h mibgroup/Rmon/agutil.h
+./agent_registry.lo: mibgroup/Rmon/statistics.h mibgroup/Rmon/alarm.h
+./agent_registry.lo: mibgroup/Rmon/history.h mibgroup/Rmon/event.h
+./agent_registry.lo: mibgroup/disman/event/mteScalars.h
+./agent_registry.lo: mibgroup/disman/event/mteTrigger.h
+./agent_registry.lo: mibgroup/disman/event/mteTriggerTable.h
+./agent_registry.lo: mibgroup/disman/event/mteTriggerDeltaTable.h
+./agent_registry.lo: mibgroup/disman/event/mteTriggerExistenceTable.h
+./agent_registry.lo: mibgroup/disman/event/mteTriggerBooleanTable.h
+./agent_registry.lo: mibgroup/disman/event/mteTriggerThresholdTable.h
+./agent_registry.lo: mibgroup/disman/event/mteTriggerConf.h
+./agent_registry.lo: mibgroup/disman/event/mteEvent.h
+./agent_registry.lo: ../agent/mibgroup/disman/event/mteTrigger.h
+./agent_registry.lo: mibgroup/disman/event/mteEventTable.h
+./agent_registry.lo: mibgroup/disman/event/mteEventSetTable.h
+./agent_registry.lo: mibgroup/disman/event/mteEventNotificationTable.h
+./agent_registry.lo: mibgroup/disman/event/mteEventConf.h
+./agent_registry.lo: mibgroup/disman/event/mteObjects.h
+./agent_registry.lo: mibgroup/disman/event/mteObjectsTable.h
+./agent_registry.lo: mibgroup/disman/event/mteObjectsConf.h
+./agent_registry.lo: mibgroup/snmpv3/snmpEngine.h
+./agent_registry.lo: mibgroup/snmpv3/snmpMPDStats.h
+./agent_registry.lo: mibgroup/snmpv3/usmStats.h mibgroup/snmpv3/usmUser.h
+./agent_registry.lo: mibgroup/mibII/system_mib.h mibgroup/mibII/sysORTable.h
+./agent_registry.lo: mibgroup/mibII/at.h mibgroup/mibII/ip.h
+./agent_registry.lo: mibgroup/mibII/var_route.h mibgroup/mibII/route_write.h
+./agent_registry.lo: mibgroup/mibII/at.h mibgroup/mibII/snmp_mib.h
+./agent_registry.lo: mibgroup/mibII/tcp.h mibgroup/mibII/icmp.h
+./agent_registry.lo: mibgroup/mibII/udp.h mibgroup/mibII/vacm_vars.h
+./agent_registry.lo: mibgroup/mibII/setSerialNo.h mibgroup/mibII/ipv6.h
+./agent_registry.lo: mibgroup/ucd-snmp/proc.h ../agent/mibgroup/mibdefs.h
+./agent_registry.lo: mibgroup/ucd-snmp/versioninfo.h mibgroup/ucd-snmp/pass.h
+./agent_registry.lo: mibgroup/ucd-snmp/pass_persist.h
+./agent_registry.lo: mibgroup/ucd-snmp/disk.h mibgroup/ucd-snmp/loadave.h
+./agent_registry.lo: mibgroup/agent/extend.h mibgroup/ucd-snmp/errormib.h
+./agent_registry.lo: mibgroup/ucd-snmp/file.h mibgroup/ucd-snmp/dlmod.h
+./agent_registry.lo: mibgroup/ucd-snmp/proxy.h mibgroup/ucd-snmp/logmatch.h
+./agent_registry.lo: mibgroup/ucd-snmp/memory.h
+./agent_registry.lo: mibgroup/ucd-snmp/vmstat.h
+./agent_registry.lo: mibgroup/notification/snmpNotifyTable.h
+./agent_registry.lo: mibgroup/notification/snmpNotifyFilterProfileTable.h
+./agent_registry.lo: mibgroup/notification-log-mib/notification_log.h
+./agent_registry.lo: mibgroup/target/snmpTargetAddrEntry.h
+./agent_registry.lo: mibgroup/target/snmpTargetParamsEntry.h
+./agent_registry.lo: mibgroup/target/target_counters.h
+./agent_registry.lo: mibgroup/agent/nsTransactionTable.h
+./agent_registry.lo: mibgroup/agent/nsModuleTable.h mibgroup/agent/nsDebug.h
+./agent_registry.lo: mibgroup/agent/nsCache.h mibgroup/agent/nsLogging.h
+./agent_registry.lo: mibgroup/agent/nsVacmAccessTable.h
+./agent_registry.lo: mibgroup/disman/schedule/schedCore.h
+./agent_registry.lo: mibgroup/disman/schedule/schedConf.h
+./agent_registry.lo: mibgroup/disman/schedule/schedTable.h
+./agent_registry.lo: mibgroup/utilities/override.h
+./agent_registry.lo: mibgroup/hardware/memory/hw_mem.h
+./agent_registry.lo: mibgroup/hardware/cpu/cpu.h
+./agent_registry.lo: mibgroup/hardware/cpu/cpu_linux.h
+./agent_registry.lo: mibgroup/mibII/var_route.h mibgroup/mibII/tcpTable.h
+./agent_registry.lo: mibgroup/mibII/udpTable.h mibgroup/mibII/vacm_context.h
+./agent_registry.lo: mibgroup/ip-mib/ip_scalars.h
+./agent_registry.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./agent_registry.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_constants.h
+./agent_registry.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.h
+./agent_registry.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./agent_registry.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.h
+./agent_registry.lo: mibgroup/if-mib/ifTable/ifTable.h
+./agent_registry.lo: ../include/net-snmp/data_access/interface.h
+./agent_registry.lo: mibgroup/if-mib/ifTable/ifTable_constants.h
+./agent_registry.lo: mibgroup/if-mib/ifTable/ifTable_interface.h
+./agent_registry.lo: mibgroup/if-mib/ifTable/ifTable.h
+./agent_registry.lo: mibgroup/if-mib/ifTable/ifTable_data_access.h
+./agent_registry.lo: mibgroup/if-mib/ifXTable/ifXTable.h
+./agent_registry.lo: ../agent/mibgroup/if-mib/ifTable/ifTable.h
+./agent_registry.lo: mibgroup/if-mib/ifXTable/ifXTable_constants.h
+./agent_registry.lo: mibgroup/if-mib/ifXTable/ifXTable_interface.h
+./agent_registry.lo: mibgroup/if-mib/ifXTable/ifXTable.h
+./agent_registry.lo: mibgroup/if-mib/ifXTable/ifXTable_data_access.h
+./agent_registry.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+./agent_registry.lo: ../include/net-snmp/data_access/ipaddress.h
+./agent_registry.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h
+./agent_registry.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.h
+./agent_registry.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+./agent_registry.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.h
+./agent_registry.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+./agent_registry.lo: ../include/net-snmp/data_access/arp.h
+./agent_registry.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h
+./agent_registry.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h
+./agent_registry.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+./agent_registry.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h
+./agent_registry.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+./agent_registry.lo: ../include/net-snmp/data_access/ipstats.h
+./agent_registry.lo: ../include/net-snmp/data_access/systemstats.h
+./agent_registry.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h
+./agent_registry.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h
+./agent_registry.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+./agent_registry.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.h
+./agent_registry.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+./agent_registry.lo: ../include/net-snmp/data_access/route.h
+./agent_registry.lo: ../agent/mibgroup/mibII/route_headers.h
+./agent_registry.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_constants.h
+./agent_registry.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.h
+./agent_registry.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+./agent_registry.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.h
+./agent_registry.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+./agent_registry.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_constants.h
+./agent_registry.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h
+./agent_registry.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+./agent_registry.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.h
+./agent_registry.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h
+./agent_registry.lo: ../include/net-snmp/data_access/tcpConn.h
+./agent_registry.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_constants.h
+./agent_registry.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.h
+./agent_registry.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h
+./agent_registry.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.h
+./agent_registry.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h
+./agent_registry.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_constants.h
+./agent_registry.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.h
+./agent_registry.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h
+./agent_registry.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.h
+./agent_registry.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h
+./agent_registry.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_constants.h
+./agent_registry.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_interface.h
+./agent_registry.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h
+./agent_registry.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.h
+./agent_registry.lo: mibgroup/if-mib/data_access/interface.h
+./agent_registry.lo: ../agent/mibgroup/agentx/subagent.h
+./agent_registry.lo: ../agent/mibgroup/agentx/client.h
+./agent_trap.lo: ../include/net-snmp/net-snmp-config.h
+./agent_trap.lo: ../include/net-snmp/system/linux.h
+./agent_trap.lo: ../include/net-snmp/system/sysv.h
+./agent_trap.lo: ../include/net-snmp/system/generic.h
+./agent_trap.lo: ../include/net-snmp/machine/generic.h
+./agent_trap.lo: ../include/net-snmp/utilities.h ../include/net-snmp/types.h
+./agent_trap.lo: ../include/net-snmp/definitions.h
+./agent_trap.lo: ../include/net-snmp/library/snmp_api.h
+./agent_trap.lo: ../include/net-snmp/library/asn1.h
+./agent_trap.lo: ../include/net-snmp/library/snmp_impl.h
+./agent_trap.lo: ../include/net-snmp/library/snmp.h
+./agent_trap.lo: ../include/net-snmp/library/snmp-tc.h
+./agent_trap.lo: ../include/net-snmp/library/snmp_client.h
+./agent_trap.lo: ../include/net-snmp/library/system.h
+./agent_trap.lo: ../include/net-snmp/library/tools.h
+./agent_trap.lo: ../include/net-snmp/library/int64.h
+./agent_trap.lo: ../include/net-snmp/library/mt_support.h
+./agent_trap.lo: ../include/net-snmp/library/snmp_alarm.h
+./agent_trap.lo: ../include/net-snmp/library/callback.h
+./agent_trap.lo: ../include/net-snmp/library/data_list.h
+./agent_trap.lo: ../include/net-snmp/library/oid_stash.h
+./agent_trap.lo: ../include/net-snmp/library/check_varbind.h
+./agent_trap.lo: ../include/net-snmp/library/container.h
+./agent_trap.lo: ../include/net-snmp/library/factory.h
+./agent_trap.lo: ../include/net-snmp/library/snmp_logging.h
+./agent_trap.lo: ../include/net-snmp/library/container_binary_array.h
+./agent_trap.lo: ../include/net-snmp/library/container_list_ssll.h
+./agent_trap.lo: ../include/net-snmp/library/container_iterator.h
+./agent_trap.lo: ../include/net-snmp/library/container.h
+./agent_trap.lo: ../include/net-snmp/library/snmp_assert.h
+./agent_trap.lo: ../include/net-snmp/version.h
+./agent_trap.lo: ../include/net-snmp/net-snmp-includes.h
+./agent_trap.lo: ../include/net-snmp/session_api.h
+./agent_trap.lo: ../include/net-snmp/library/snmp_transport.h
+./agent_trap.lo: ../include/net-snmp/library/snmp_service.h
+./agent_trap.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./agent_trap.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./agent_trap.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./agent_trap.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./agent_trap.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agent_trap.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agent_trap.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./agent_trap.lo: ../include/net-snmp/library/ucd_compat.h
+./agent_trap.lo: ../include/net-snmp/pdu_api.h ../include/net-snmp/mib_api.h
+./agent_trap.lo: ../include/net-snmp/library/mib.h
+./agent_trap.lo: ../include/net-snmp/library/parse.h
+./agent_trap.lo: ../include/net-snmp/varbind_api.h
+./agent_trap.lo: ../include/net-snmp/config_api.h
+./agent_trap.lo: ../include/net-snmp/library/read_config.h
+./agent_trap.lo: ../include/net-snmp/library/default_store.h
+./agent_trap.lo: ../include/net-snmp/library/snmp_parse_args.h
+./agent_trap.lo: ../include/net-snmp/library/snmp_enum.h
+./agent_trap.lo: ../include/net-snmp/library/vacm.h
+./agent_trap.lo: ../include/net-snmp/output_api.h
+./agent_trap.lo: ../include/net-snmp/library/snmp_debug.h
+./agent_trap.lo: ../include/net-snmp/snmpv3_api.h
+./agent_trap.lo: ../include/net-snmp/library/snmpv3.h
+./agent_trap.lo: ../include/net-snmp/library/transform_oids.h
+./agent_trap.lo: ../include/net-snmp/library/keytools.h
+./agent_trap.lo: ../include/net-snmp/library/scapi.h
+./agent_trap.lo: ../include/net-snmp/library/lcd_time.h
+./agent_trap.lo: ../include/net-snmp/library/snmp_secmod.h
+./agent_trap.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./agent_trap.lo: ../include/net-snmp/library/snmpusm.h
+./agent_trap.lo: ../include/net-snmp/agent/agent_trap.h
+./agent_trap.lo: ../include/net-snmp/agent/snmp_agent.h
+./agent_trap.lo: ../include/net-snmp/agent/agent_callbacks.h
+./agent_trap.lo: ../include/net-snmp/agent/agent_module_config.h
+./agent_trap.lo: ../include/net-snmp/agent/mib_module_config.h
+./agent_trap.lo: ../agent/mibgroup/agentx/protocol.h
+./auto_nlist.lo: ../include/net-snmp/net-snmp-config.h
+./auto_nlist.lo: ../include/net-snmp/system/linux.h
+./auto_nlist.lo: ../include/net-snmp/system/sysv.h
+./auto_nlist.lo: ../include/net-snmp/system/generic.h
+./auto_nlist.lo: ../include/net-snmp/machine/generic.h
+./auto_nlist.lo: ../include/net-snmp/agent/auto_nlist.h
+./kernel.lo: ../include/net-snmp/net-snmp-config.h
+./kernel.lo: ../include/net-snmp/system/linux.h
+./kernel.lo: ../include/net-snmp/system/sysv.h
+./kernel.lo: ../include/net-snmp/system/generic.h
+./kernel.lo: ../include/net-snmp/machine/generic.h
+./mib_modules.lo: ../include/net-snmp/agent/mib_module_config.h
+./mib_modules.lo: ../include/net-snmp/net-snmp-config.h
+./mib_modules.lo: ../include/net-snmp/system/linux.h
+./mib_modules.lo: ../include/net-snmp/system/sysv.h
+./mib_modules.lo: ../include/net-snmp/system/generic.h
+./mib_modules.lo: ../include/net-snmp/machine/generic.h
+./mib_modules.lo: ../include/net-snmp/net-snmp-includes.h
+./mib_modules.lo: ../include/net-snmp/definitions.h
+./mib_modules.lo: ../include/net-snmp/types.h
+./mib_modules.lo: ../include/net-snmp/library/snmp_api.h
+./mib_modules.lo: ../include/net-snmp/library/asn1.h
+./mib_modules.lo: ../include/net-snmp/library/snmp_impl.h
+./mib_modules.lo: ../include/net-snmp/library/snmp.h
+./mib_modules.lo: ../include/net-snmp/library/snmp-tc.h
+./mib_modules.lo: ../include/net-snmp/utilities.h
+./mib_modules.lo: ../include/net-snmp/library/snmp_client.h
+./mib_modules.lo: ../include/net-snmp/library/system.h
+./mib_modules.lo: ../include/net-snmp/library/tools.h
+./mib_modules.lo: ../include/net-snmp/library/int64.h
+./mib_modules.lo: ../include/net-snmp/library/mt_support.h
+./mib_modules.lo: ../include/net-snmp/library/snmp_alarm.h
+./mib_modules.lo: ../include/net-snmp/library/callback.h
+./mib_modules.lo: ../include/net-snmp/library/data_list.h
+./mib_modules.lo: ../include/net-snmp/library/oid_stash.h
+./mib_modules.lo: ../include/net-snmp/library/check_varbind.h
+./mib_modules.lo: ../include/net-snmp/library/container.h
+./mib_modules.lo: ../include/net-snmp/library/factory.h
+./mib_modules.lo: ../include/net-snmp/library/snmp_logging.h
+./mib_modules.lo: ../include/net-snmp/library/container_binary_array.h
+./mib_modules.lo: ../include/net-snmp/library/container_list_ssll.h
+./mib_modules.lo: ../include/net-snmp/library/container_iterator.h
+./mib_modules.lo: ../include/net-snmp/library/container.h
+./mib_modules.lo: ../include/net-snmp/library/snmp_assert.h
+./mib_modules.lo: ../include/net-snmp/version.h
+./mib_modules.lo: ../include/net-snmp/session_api.h
+./mib_modules.lo: ../include/net-snmp/library/snmp_transport.h
+./mib_modules.lo: ../include/net-snmp/library/snmp_service.h
+./mib_modules.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./mib_modules.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./mib_modules.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./mib_modules.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./mib_modules.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mib_modules.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mib_modules.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./mib_modules.lo: ../include/net-snmp/library/ucd_compat.h
+./mib_modules.lo: ../include/net-snmp/pdu_api.h ../include/net-snmp/mib_api.h
+./mib_modules.lo: ../include/net-snmp/library/mib.h
+./mib_modules.lo: ../include/net-snmp/library/parse.h
+./mib_modules.lo: ../include/net-snmp/varbind_api.h
+./mib_modules.lo: ../include/net-snmp/config_api.h
+./mib_modules.lo: ../include/net-snmp/library/read_config.h
+./mib_modules.lo: ../include/net-snmp/library/default_store.h
+./mib_modules.lo: ../include/net-snmp/library/snmp_parse_args.h
+./mib_modules.lo: ../include/net-snmp/library/snmp_enum.h
+./mib_modules.lo: ../include/net-snmp/library/vacm.h
+./mib_modules.lo: ../include/net-snmp/output_api.h
+./mib_modules.lo: ../include/net-snmp/library/snmp_debug.h
+./mib_modules.lo: ../include/net-snmp/snmpv3_api.h
+./mib_modules.lo: ../include/net-snmp/library/snmpv3.h
+./mib_modules.lo: ../include/net-snmp/library/transform_oids.h
+./mib_modules.lo: ../include/net-snmp/library/keytools.h
+./mib_modules.lo: ../include/net-snmp/library/scapi.h
+./mib_modules.lo: ../include/net-snmp/library/lcd_time.h
+./mib_modules.lo: ../include/net-snmp/library/snmp_secmod.h
+./mib_modules.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./mib_modules.lo: ../include/net-snmp/library/snmpusm.h
+./mib_modules.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./mib_modules.lo: ../include/net-snmp/agent/agent_module_config.h
+./mib_modules.lo: ../include/net-snmp/agent/snmp_agent.h
+./mib_modules.lo: ../include/net-snmp/agent/snmp_vars.h
+./mib_modules.lo: ../include/net-snmp/agent/agent_handler.h
+./mib_modules.lo: ../include/net-snmp/agent/var_struct.h
+./mib_modules.lo: ../include/net-snmp/agent/agent_registry.h
+./mib_modules.lo: ../include/net-snmp/library/fd_event_manager.h
+./mib_modules.lo: ../include/net-snmp/agent/ds_agent.h
+./mib_modules.lo: ../include/net-snmp/agent/agent_read_config.h
+./mib_modules.lo: ../include/net-snmp/agent/agent_trap.h
+./mib_modules.lo: ../include/net-snmp/agent/all_helpers.h
+./mib_modules.lo: ../include/net-snmp/agent/instance.h
+./mib_modules.lo: ../include/net-snmp/agent/baby_steps.h
+./mib_modules.lo: ../include/net-snmp/agent/scalar.h
+./mib_modules.lo: ../include/net-snmp/agent/scalar_group.h
+./mib_modules.lo: ../include/net-snmp/agent/watcher.h
+./mib_modules.lo: ../include/net-snmp/agent/multiplexer.h
+./mib_modules.lo: ../include/net-snmp/agent/null.h
+./mib_modules.lo: ../include/net-snmp/agent/debug_handler.h
+./mib_modules.lo: ../include/net-snmp/agent/cache_handler.h
+./mib_modules.lo: ../include/net-snmp/agent/old_api.h
+./mib_modules.lo: ../include/net-snmp/agent/read_only.h
+./mib_modules.lo: ../include/net-snmp/agent/row_merge.h
+./mib_modules.lo: ../include/net-snmp/agent/serialize.h
+./mib_modules.lo: ../include/net-snmp/agent/bulk_to_next.h
+./mib_modules.lo: ../include/net-snmp/agent/mode_end_call.h
+./mib_modules.lo: ../include/net-snmp/agent/table.h
+./mib_modules.lo: ../include/net-snmp/agent/table_data.h
+./mib_modules.lo: ../include/net-snmp/agent/table_dataset.h
+./mib_modules.lo: ../include/net-snmp/agent/table_tdata.h
+./mib_modules.lo: ../include/net-snmp/agent/table_iterator.h
+./mib_modules.lo: ../include/net-snmp/agent/table_container.h
+./mib_modules.lo: ../include/net-snmp/agent/table_array.h
+./mib_modules.lo: ../include/net-snmp/agent/mfd.h m2m.h
+./mib_modules.lo: ../include/net-snmp/data_access/interface.h
+./mib_modules.lo: mibgroup/struct.h ../include/net-snmp/agent/mib_modules.h
+./mib_modules.lo: ../agent/mibgroup/mib_module_includes.h
+./mib_modules.lo: mibgroup/examples/example.h mibgroup/testhandler.h
+./mib_modules.lo: mibgroup/host/hr_system.h mibgroup/host/hr_storage.h
+./mib_modules.lo: mibgroup/host/hr_device.h mibgroup/host/hr_other.h
+./mib_modules.lo: mibgroup/host/hr_proc.h mibgroup/host/hr_network.h
+./mib_modules.lo: mibgroup/host/hr_print.h mibgroup/host/hr_disk.h
+./mib_modules.lo: mibgroup/host/hr_partition.h mibgroup/host/hr_filesys.h
+./mib_modules.lo: mibgroup/host/hr_swrun.h mibgroup/host/hr_swinst.h
+./mib_modules.lo: mibgroup/examples/scalar_int.h mibgroup/examples/watched.h
+./mib_modules.lo: mibgroup/examples/data_set.h
+./mib_modules.lo: mibgroup/examples/delayed_instance.h mibgroup/Rmon/rows.h
+./mib_modules.lo: mibgroup/Rmon/agutil.h mibgroup/Rmon/statistics.h
+./mib_modules.lo: mibgroup/Rmon/alarm.h mibgroup/Rmon/history.h
+./mib_modules.lo: mibgroup/Rmon/event.h mibgroup/disman/event/mteScalars.h
+./mib_modules.lo: mibgroup/disman/event/mteTrigger.h
+./mib_modules.lo: mibgroup/disman/event/mteTriggerTable.h
+./mib_modules.lo: mibgroup/disman/event/mteTriggerDeltaTable.h
+./mib_modules.lo: mibgroup/disman/event/mteTriggerExistenceTable.h
+./mib_modules.lo: mibgroup/disman/event/mteTriggerBooleanTable.h
+./mib_modules.lo: mibgroup/disman/event/mteTriggerThresholdTable.h
+./mib_modules.lo: mibgroup/disman/event/mteTriggerConf.h
+./mib_modules.lo: mibgroup/disman/event/mteEvent.h
+./mib_modules.lo: ../agent/mibgroup/disman/event/mteTrigger.h
+./mib_modules.lo: mibgroup/disman/event/mteEventTable.h
+./mib_modules.lo: mibgroup/disman/event/mteEventSetTable.h
+./mib_modules.lo: mibgroup/disman/event/mteEventNotificationTable.h
+./mib_modules.lo: mibgroup/disman/event/mteEventConf.h
+./mib_modules.lo: mibgroup/disman/event/mteObjects.h
+./mib_modules.lo: mibgroup/disman/event/mteObjectsTable.h
+./mib_modules.lo: mibgroup/disman/event/mteObjectsConf.h
+./mib_modules.lo: mibgroup/snmpv3/snmpEngine.h mibgroup/snmpv3/snmpMPDStats.h
+./mib_modules.lo: mibgroup/snmpv3/usmStats.h mibgroup/snmpv3/usmUser.h
+./mib_modules.lo: mibgroup/mibII/system_mib.h mibgroup/mibII/sysORTable.h
+./mib_modules.lo: mibgroup/mibII/at.h mibgroup/mibII/ip.h
+./mib_modules.lo: mibgroup/mibII/var_route.h mibgroup/mibII/route_write.h
+./mib_modules.lo: mibgroup/mibII/at.h mibgroup/mibII/snmp_mib.h
+./mib_modules.lo: mibgroup/mibII/tcp.h mibgroup/mibII/icmp.h
+./mib_modules.lo: mibgroup/mibII/udp.h mibgroup/mibII/vacm_vars.h
+./mib_modules.lo: mibgroup/mibII/setSerialNo.h mibgroup/mibII/ipv6.h
+./mib_modules.lo: mibgroup/ucd-snmp/proc.h ../agent/mibgroup/mibdefs.h
+./mib_modules.lo: mibgroup/ucd-snmp/versioninfo.h mibgroup/ucd-snmp/pass.h
+./mib_modules.lo: mibgroup/ucd-snmp/pass_persist.h mibgroup/ucd-snmp/disk.h
+./mib_modules.lo: mibgroup/ucd-snmp/loadave.h mibgroup/agent/extend.h
+./mib_modules.lo: mibgroup/ucd-snmp/errormib.h mibgroup/ucd-snmp/file.h
+./mib_modules.lo: mibgroup/ucd-snmp/dlmod.h mibgroup/ucd-snmp/proxy.h
+./mib_modules.lo: mibgroup/ucd-snmp/logmatch.h
+./mib_modules.lo: mibgroup/ucd-snmp/memory.h mibgroup/ucd-snmp/vmstat.h
+./mib_modules.lo: mibgroup/notification/snmpNotifyTable.h
+./mib_modules.lo: mibgroup/notification/snmpNotifyFilterProfileTable.h
+./mib_modules.lo: mibgroup/notification-log-mib/notification_log.h
+./mib_modules.lo: mibgroup/target/snmpTargetAddrEntry.h
+./mib_modules.lo: mibgroup/target/snmpTargetParamsEntry.h
+./mib_modules.lo: mibgroup/target/target_counters.h
+./mib_modules.lo: mibgroup/agent/nsTransactionTable.h
+./mib_modules.lo: mibgroup/agent/nsModuleTable.h mibgroup/agent/nsDebug.h
+./mib_modules.lo: mibgroup/agent/nsCache.h mibgroup/agent/nsLogging.h
+./mib_modules.lo: mibgroup/agent/nsVacmAccessTable.h
+./mib_modules.lo: mibgroup/disman/schedule/schedCore.h
+./mib_modules.lo: mibgroup/disman/schedule/schedConf.h
+./mib_modules.lo: mibgroup/disman/schedule/schedTable.h
+./mib_modules.lo: mibgroup/utilities/override.h
+./mib_modules.lo: mibgroup/hardware/memory/hw_mem.h
+./mib_modules.lo: mibgroup/hardware/cpu/cpu.h
+./mib_modules.lo: mibgroup/hardware/cpu/cpu_linux.h
+./mib_modules.lo: mibgroup/mibII/var_route.h mibgroup/mibII/tcpTable.h
+./mib_modules.lo: mibgroup/mibII/udpTable.h mibgroup/mibII/vacm_context.h
+./mib_modules.lo: mibgroup/ip-mib/ip_scalars.h
+./mib_modules.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./mib_modules.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_constants.h
+./mib_modules.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.h
+./mib_modules.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./mib_modules.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.h
+./mib_modules.lo: mibgroup/if-mib/ifTable/ifTable.h
+./mib_modules.lo: mibgroup/if-mib/ifTable/ifTable_constants.h
+./mib_modules.lo: mibgroup/if-mib/ifTable/ifTable_interface.h
+./mib_modules.lo: mibgroup/if-mib/ifTable/ifTable.h
+./mib_modules.lo: mibgroup/if-mib/ifTable/ifTable_data_access.h
+./mib_modules.lo: mibgroup/if-mib/ifXTable/ifXTable.h
+./mib_modules.lo: ../agent/mibgroup/if-mib/ifTable/ifTable.h
+./mib_modules.lo: mibgroup/if-mib/ifXTable/ifXTable_constants.h
+./mib_modules.lo: mibgroup/if-mib/ifXTable/ifXTable_interface.h
+./mib_modules.lo: mibgroup/if-mib/ifXTable/ifXTable.h
+./mib_modules.lo: mibgroup/if-mib/ifXTable/ifXTable_data_access.h
+./mib_modules.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+./mib_modules.lo: ../include/net-snmp/data_access/ipaddress.h
+./mib_modules.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h
+./mib_modules.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.h
+./mib_modules.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+./mib_modules.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.h
+./mib_modules.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+./mib_modules.lo: ../include/net-snmp/data_access/arp.h
+./mib_modules.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h
+./mib_modules.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h
+./mib_modules.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+./mib_modules.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h
+./mib_modules.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+./mib_modules.lo: ../include/net-snmp/data_access/ipstats.h
+./mib_modules.lo: ../include/net-snmp/data_access/systemstats.h
+./mib_modules.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h
+./mib_modules.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h
+./mib_modules.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+./mib_modules.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.h
+./mib_modules.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+./mib_modules.lo: ../include/net-snmp/data_access/route.h
+./mib_modules.lo: ../agent/mibgroup/mibII/route_headers.h
+./mib_modules.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_constants.h
+./mib_modules.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.h
+./mib_modules.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+./mib_modules.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.h
+./mib_modules.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+./mib_modules.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_constants.h
+./mib_modules.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h
+./mib_modules.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+./mib_modules.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.h
+./mib_modules.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h
+./mib_modules.lo: ../include/net-snmp/data_access/tcpConn.h
+./mib_modules.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_constants.h
+./mib_modules.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.h
+./mib_modules.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h
+./mib_modules.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.h
+./mib_modules.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h
+./mib_modules.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_constants.h
+./mib_modules.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.h
+./mib_modules.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h
+./mib_modules.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.h
+./mib_modules.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h
+./mib_modules.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_constants.h
+./mib_modules.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_interface.h
+./mib_modules.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h
+./mib_modules.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.h
+./mib_modules.lo: mibgroup/if-mib/data_access/interface.h
+./mib_modules.lo: mibgroup/agentx/subagent.h
+./mib_modules.lo: ../agent/mibgroup/mib_module_shutdown.h
+./mib_modules.lo: ../agent/mibgroup/mib_module_inits.h
+./object_monitor.lo: ../include/net-snmp/net-snmp-config.h
+./object_monitor.lo: ../include/net-snmp/system/linux.h
+./object_monitor.lo: ../include/net-snmp/system/sysv.h
+./object_monitor.lo: ../include/net-snmp/system/generic.h
+./object_monitor.lo: ../include/net-snmp/machine/generic.h
+./object_monitor.lo: ../include/net-snmp/net-snmp-includes.h
+./object_monitor.lo: ../include/net-snmp/definitions.h
+./object_monitor.lo: ../include/net-snmp/types.h
+./object_monitor.lo: ../include/net-snmp/library/snmp_api.h
+./object_monitor.lo: ../include/net-snmp/library/asn1.h
+./object_monitor.lo: ../include/net-snmp/library/snmp_impl.h
+./object_monitor.lo: ../include/net-snmp/library/snmp.h
+./object_monitor.lo: ../include/net-snmp/library/snmp-tc.h
+./object_monitor.lo: ../include/net-snmp/utilities.h
+./object_monitor.lo: ../include/net-snmp/library/snmp_client.h
+./object_monitor.lo: ../include/net-snmp/library/system.h
+./object_monitor.lo: ../include/net-snmp/library/tools.h
+./object_monitor.lo: ../include/net-snmp/library/int64.h
+./object_monitor.lo: ../include/net-snmp/library/mt_support.h
+./object_monitor.lo: ../include/net-snmp/library/snmp_alarm.h
+./object_monitor.lo: ../include/net-snmp/library/callback.h
+./object_monitor.lo: ../include/net-snmp/library/data_list.h
+./object_monitor.lo: ../include/net-snmp/library/oid_stash.h
+./object_monitor.lo: ../include/net-snmp/library/check_varbind.h
+./object_monitor.lo: ../include/net-snmp/library/container.h
+./object_monitor.lo: ../include/net-snmp/library/factory.h
+./object_monitor.lo: ../include/net-snmp/library/snmp_logging.h
+./object_monitor.lo: ../include/net-snmp/library/container_binary_array.h
+./object_monitor.lo: ../include/net-snmp/library/container_list_ssll.h
+./object_monitor.lo: ../include/net-snmp/library/container_iterator.h
+./object_monitor.lo: ../include/net-snmp/library/container.h
+./object_monitor.lo: ../include/net-snmp/library/snmp_assert.h
+./object_monitor.lo: ../include/net-snmp/version.h
+./object_monitor.lo: ../include/net-snmp/session_api.h
+./object_monitor.lo: ../include/net-snmp/library/snmp_transport.h
+./object_monitor.lo: ../include/net-snmp/library/snmp_service.h
+./object_monitor.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./object_monitor.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./object_monitor.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./object_monitor.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./object_monitor.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./object_monitor.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./object_monitor.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./object_monitor.lo: ../include/net-snmp/library/ucd_compat.h
+./object_monitor.lo: ../include/net-snmp/pdu_api.h
+./object_monitor.lo: ../include/net-snmp/mib_api.h
+./object_monitor.lo: ../include/net-snmp/library/mib.h
+./object_monitor.lo: ../include/net-snmp/library/parse.h
+./object_monitor.lo: ../include/net-snmp/varbind_api.h
+./object_monitor.lo: ../include/net-snmp/config_api.h
+./object_monitor.lo: ../include/net-snmp/library/read_config.h
+./object_monitor.lo: ../include/net-snmp/library/default_store.h
+./object_monitor.lo: ../include/net-snmp/library/snmp_parse_args.h
+./object_monitor.lo: ../include/net-snmp/library/snmp_enum.h
+./object_monitor.lo: ../include/net-snmp/library/vacm.h
+./object_monitor.lo: ../include/net-snmp/output_api.h
+./object_monitor.lo: ../include/net-snmp/library/snmp_debug.h
+./object_monitor.lo: ../include/net-snmp/snmpv3_api.h
+./object_monitor.lo: ../include/net-snmp/library/snmpv3.h
+./object_monitor.lo: ../include/net-snmp/library/transform_oids.h
+./object_monitor.lo: ../include/net-snmp/library/keytools.h
+./object_monitor.lo: ../include/net-snmp/library/scapi.h
+./object_monitor.lo: ../include/net-snmp/library/lcd_time.h
+./object_monitor.lo: ../include/net-snmp/library/snmp_secmod.h
+./object_monitor.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./object_monitor.lo: ../include/net-snmp/library/snmpusm.h
+./object_monitor.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./object_monitor.lo: ../include/net-snmp/agent/mib_module_config.h
+./object_monitor.lo: ../include/net-snmp/agent/agent_module_config.h
+./object_monitor.lo: ../include/net-snmp/agent/snmp_agent.h
+./object_monitor.lo: ../include/net-snmp/agent/snmp_vars.h
+./object_monitor.lo: ../include/net-snmp/agent/agent_handler.h
+./object_monitor.lo: ../include/net-snmp/agent/var_struct.h
+./object_monitor.lo: ../include/net-snmp/agent/agent_registry.h
+./object_monitor.lo: ../include/net-snmp/library/fd_event_manager.h
+./object_monitor.lo: ../include/net-snmp/agent/ds_agent.h
+./object_monitor.lo: ../include/net-snmp/agent/agent_read_config.h
+./object_monitor.lo: ../include/net-snmp/agent/agent_trap.h
+./object_monitor.lo: ../include/net-snmp/agent/all_helpers.h
+./object_monitor.lo: ../include/net-snmp/agent/instance.h
+./object_monitor.lo: ../include/net-snmp/agent/baby_steps.h
+./object_monitor.lo: ../include/net-snmp/agent/scalar.h
+./object_monitor.lo: ../include/net-snmp/agent/scalar_group.h
+./object_monitor.lo: ../include/net-snmp/agent/watcher.h
+./object_monitor.lo: ../include/net-snmp/agent/multiplexer.h
+./object_monitor.lo: ../include/net-snmp/agent/null.h
+./object_monitor.lo: ../include/net-snmp/agent/debug_handler.h
+./object_monitor.lo: ../include/net-snmp/agent/cache_handler.h
+./object_monitor.lo: ../include/net-snmp/agent/old_api.h
+./object_monitor.lo: ../include/net-snmp/agent/read_only.h
+./object_monitor.lo: ../include/net-snmp/agent/row_merge.h
+./object_monitor.lo: ../include/net-snmp/agent/serialize.h
+./object_monitor.lo: ../include/net-snmp/agent/bulk_to_next.h
+./object_monitor.lo: ../include/net-snmp/agent/mode_end_call.h
+./object_monitor.lo: ../include/net-snmp/agent/table.h
+./object_monitor.lo: ../include/net-snmp/agent/table_data.h
+./object_monitor.lo: ../include/net-snmp/agent/table_dataset.h
+./object_monitor.lo: ../include/net-snmp/agent/table_tdata.h
+./object_monitor.lo: ../include/net-snmp/agent/table_iterator.h
+./object_monitor.lo: ../include/net-snmp/agent/table_container.h
+./object_monitor.lo: ../include/net-snmp/agent/table_array.h
+./object_monitor.lo: ../include/net-snmp/agent/mfd.h
+./object_monitor.lo: ../include/net-snmp/agent/object_monitor.h
+./snmp_agent.lo: ../include/net-snmp/net-snmp-config.h
+./snmp_agent.lo: ../include/net-snmp/system/linux.h
+./snmp_agent.lo: ../include/net-snmp/system/sysv.h
+./snmp_agent.lo: ../include/net-snmp/system/generic.h
+./snmp_agent.lo: ../include/net-snmp/machine/generic.h
+./snmp_agent.lo: ../include/net-snmp/net-snmp-includes.h
+./snmp_agent.lo: ../include/net-snmp/definitions.h
+./snmp_agent.lo: ../include/net-snmp/types.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp_api.h
+./snmp_agent.lo: ../include/net-snmp/library/asn1.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp_impl.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp-tc.h
+./snmp_agent.lo: ../include/net-snmp/utilities.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp_client.h
+./snmp_agent.lo: ../include/net-snmp/library/system.h
+./snmp_agent.lo: ../include/net-snmp/library/tools.h
+./snmp_agent.lo: ../include/net-snmp/library/int64.h
+./snmp_agent.lo: ../include/net-snmp/library/mt_support.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp_alarm.h
+./snmp_agent.lo: ../include/net-snmp/library/callback.h
+./snmp_agent.lo: ../include/net-snmp/library/data_list.h
+./snmp_agent.lo: ../include/net-snmp/library/oid_stash.h
+./snmp_agent.lo: ../include/net-snmp/library/check_varbind.h
+./snmp_agent.lo: ../include/net-snmp/library/container.h
+./snmp_agent.lo: ../include/net-snmp/library/factory.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp_logging.h
+./snmp_agent.lo: ../include/net-snmp/library/container_binary_array.h
+./snmp_agent.lo: ../include/net-snmp/library/container_list_ssll.h
+./snmp_agent.lo: ../include/net-snmp/library/container_iterator.h
+./snmp_agent.lo: ../include/net-snmp/library/container.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp_assert.h
+./snmp_agent.lo: ../include/net-snmp/version.h
+./snmp_agent.lo: ../include/net-snmp/session_api.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp_transport.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp_service.h
+./snmp_agent.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./snmp_agent.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./snmp_agent.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./snmp_agent.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./snmp_agent.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./snmp_agent.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./snmp_agent.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./snmp_agent.lo: ../include/net-snmp/library/ucd_compat.h
+./snmp_agent.lo: ../include/net-snmp/pdu_api.h ../include/net-snmp/mib_api.h
+./snmp_agent.lo: ../include/net-snmp/library/mib.h
+./snmp_agent.lo: ../include/net-snmp/library/parse.h
+./snmp_agent.lo: ../include/net-snmp/varbind_api.h
+./snmp_agent.lo: ../include/net-snmp/config_api.h
+./snmp_agent.lo: ../include/net-snmp/library/read_config.h
+./snmp_agent.lo: ../include/net-snmp/library/default_store.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp_parse_args.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp_enum.h
+./snmp_agent.lo: ../include/net-snmp/library/vacm.h
+./snmp_agent.lo: ../include/net-snmp/output_api.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp_debug.h
+./snmp_agent.lo: ../include/net-snmp/snmpv3_api.h
+./snmp_agent.lo: ../include/net-snmp/library/snmpv3.h
+./snmp_agent.lo: ../include/net-snmp/library/transform_oids.h
+./snmp_agent.lo: ../include/net-snmp/library/keytools.h
+./snmp_agent.lo: ../include/net-snmp/library/scapi.h
+./snmp_agent.lo: ../include/net-snmp/library/lcd_time.h
+./snmp_agent.lo: ../include/net-snmp/library/snmp_secmod.h
+./snmp_agent.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./snmp_agent.lo: ../include/net-snmp/library/snmpusm.h
+./snmp_agent.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./snmp_agent.lo: ../include/net-snmp/agent/mib_module_config.h
+./snmp_agent.lo: ../include/net-snmp/agent/agent_module_config.h
+./snmp_agent.lo: ../include/net-snmp/agent/snmp_agent.h
+./snmp_agent.lo: ../include/net-snmp/agent/snmp_vars.h
+./snmp_agent.lo: ../include/net-snmp/agent/agent_handler.h
+./snmp_agent.lo: ../include/net-snmp/agent/var_struct.h
+./snmp_agent.lo: ../include/net-snmp/agent/agent_registry.h
+./snmp_agent.lo: ../include/net-snmp/library/fd_event_manager.h
+./snmp_agent.lo: ../include/net-snmp/agent/ds_agent.h
+./snmp_agent.lo: ../include/net-snmp/agent/agent_read_config.h
+./snmp_agent.lo: ../include/net-snmp/agent/agent_trap.h
+./snmp_agent.lo: ../include/net-snmp/agent/all_helpers.h
+./snmp_agent.lo: ../include/net-snmp/agent/instance.h
+./snmp_agent.lo: ../include/net-snmp/agent/baby_steps.h
+./snmp_agent.lo: ../include/net-snmp/agent/scalar.h
+./snmp_agent.lo: ../include/net-snmp/agent/scalar_group.h
+./snmp_agent.lo: ../include/net-snmp/agent/watcher.h
+./snmp_agent.lo: ../include/net-snmp/agent/multiplexer.h
+./snmp_agent.lo: ../include/net-snmp/agent/null.h
+./snmp_agent.lo: ../include/net-snmp/agent/debug_handler.h
+./snmp_agent.lo: ../include/net-snmp/agent/cache_handler.h
+./snmp_agent.lo: ../include/net-snmp/agent/old_api.h
+./snmp_agent.lo: ../include/net-snmp/agent/read_only.h
+./snmp_agent.lo: ../include/net-snmp/agent/row_merge.h
+./snmp_agent.lo: ../include/net-snmp/agent/serialize.h
+./snmp_agent.lo: ../include/net-snmp/agent/bulk_to_next.h
+./snmp_agent.lo: ../include/net-snmp/agent/mode_end_call.h
+./snmp_agent.lo: ../include/net-snmp/agent/table.h
+./snmp_agent.lo: ../include/net-snmp/agent/table_data.h
+./snmp_agent.lo: ../include/net-snmp/agent/table_dataset.h
+./snmp_agent.lo: ../include/net-snmp/agent/table_tdata.h
+./snmp_agent.lo: ../include/net-snmp/agent/table_iterator.h
+./snmp_agent.lo: ../include/net-snmp/agent/table_container.h
+./snmp_agent.lo: ../include/net-snmp/agent/table_array.h
+./snmp_agent.lo: ../include/net-snmp/agent/mfd.h snmpd.h mibgroup/struct.h
+./snmp_agent.lo: mibgroup/util_funcs.h mibgroup/struct.h
+./snmp_agent.lo: ../include/net-snmp/agent/mib_modules.h
+./snmp_agent.lo: ../agent/mibgroup/agentx/protocol.h
+./snmp_agent.lo: ../agent/mibgroup/agentx/master.h
+./snmp_agent.lo: ../agent/mibgroup/smux/smux.h
+./snmp_perl.lo: ../include/net-snmp/net-snmp-config.h
+./snmp_perl.lo: ../include/net-snmp/system/linux.h
+./snmp_perl.lo: ../include/net-snmp/system/sysv.h
+./snmp_perl.lo: ../include/net-snmp/system/generic.h
+./snmp_perl.lo: ../include/net-snmp/machine/generic.h
+./snmp_perl.lo: ../include/net-snmp/net-snmp-includes.h
+./snmp_perl.lo: ../include/net-snmp/definitions.h ../include/net-snmp/types.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp_api.h
+./snmp_perl.lo: ../include/net-snmp/library/asn1.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp_impl.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp-tc.h
+./snmp_perl.lo: ../include/net-snmp/utilities.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp_client.h
+./snmp_perl.lo: ../include/net-snmp/library/system.h
+./snmp_perl.lo: ../include/net-snmp/library/tools.h
+./snmp_perl.lo: ../include/net-snmp/library/int64.h
+./snmp_perl.lo: ../include/net-snmp/library/mt_support.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp_alarm.h
+./snmp_perl.lo: ../include/net-snmp/library/callback.h
+./snmp_perl.lo: ../include/net-snmp/library/data_list.h
+./snmp_perl.lo: ../include/net-snmp/library/oid_stash.h
+./snmp_perl.lo: ../include/net-snmp/library/check_varbind.h
+./snmp_perl.lo: ../include/net-snmp/library/container.h
+./snmp_perl.lo: ../include/net-snmp/library/factory.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp_logging.h
+./snmp_perl.lo: ../include/net-snmp/library/container_binary_array.h
+./snmp_perl.lo: ../include/net-snmp/library/container_list_ssll.h
+./snmp_perl.lo: ../include/net-snmp/library/container_iterator.h
+./snmp_perl.lo: ../include/net-snmp/library/container.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp_assert.h
+./snmp_perl.lo: ../include/net-snmp/version.h
+./snmp_perl.lo: ../include/net-snmp/session_api.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp_transport.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp_service.h
+./snmp_perl.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./snmp_perl.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./snmp_perl.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./snmp_perl.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./snmp_perl.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./snmp_perl.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./snmp_perl.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./snmp_perl.lo: ../include/net-snmp/library/ucd_compat.h
+./snmp_perl.lo: ../include/net-snmp/pdu_api.h ../include/net-snmp/mib_api.h
+./snmp_perl.lo: ../include/net-snmp/library/mib.h
+./snmp_perl.lo: ../include/net-snmp/library/parse.h
+./snmp_perl.lo: ../include/net-snmp/varbind_api.h
+./snmp_perl.lo: ../include/net-snmp/config_api.h
+./snmp_perl.lo: ../include/net-snmp/library/read_config.h
+./snmp_perl.lo: ../include/net-snmp/library/default_store.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp_parse_args.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp_enum.h
+./snmp_perl.lo: ../include/net-snmp/library/vacm.h
+./snmp_perl.lo: ../include/net-snmp/output_api.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp_debug.h
+./snmp_perl.lo: ../include/net-snmp/snmpv3_api.h
+./snmp_perl.lo: ../include/net-snmp/library/snmpv3.h
+./snmp_perl.lo: ../include/net-snmp/library/transform_oids.h
+./snmp_perl.lo: ../include/net-snmp/library/keytools.h
+./snmp_perl.lo: ../include/net-snmp/library/scapi.h
+./snmp_perl.lo: ../include/net-snmp/library/lcd_time.h
+./snmp_perl.lo: ../include/net-snmp/library/snmp_secmod.h
+./snmp_perl.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./snmp_perl.lo: ../include/net-snmp/library/snmpusm.h
+./snmp_perl.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./snmp_perl.lo: ../include/net-snmp/agent/mib_module_config.h
+./snmp_perl.lo: ../include/net-snmp/agent/agent_module_config.h
+./snmp_perl.lo: ../include/net-snmp/agent/snmp_agent.h
+./snmp_perl.lo: ../include/net-snmp/agent/snmp_vars.h
+./snmp_perl.lo: ../include/net-snmp/agent/agent_handler.h
+./snmp_perl.lo: ../include/net-snmp/agent/var_struct.h
+./snmp_perl.lo: ../include/net-snmp/agent/agent_registry.h
+./snmp_perl.lo: ../include/net-snmp/library/fd_event_manager.h
+./snmp_perl.lo: ../include/net-snmp/agent/ds_agent.h
+./snmp_perl.lo: ../include/net-snmp/agent/agent_read_config.h
+./snmp_perl.lo: ../include/net-snmp/agent/agent_trap.h
+./snmp_perl.lo: ../include/net-snmp/agent/all_helpers.h
+./snmp_perl.lo: ../include/net-snmp/agent/instance.h
+./snmp_perl.lo: ../include/net-snmp/agent/baby_steps.h
+./snmp_perl.lo: ../include/net-snmp/agent/scalar.h
+./snmp_perl.lo: ../include/net-snmp/agent/scalar_group.h
+./snmp_perl.lo: ../include/net-snmp/agent/watcher.h
+./snmp_perl.lo: ../include/net-snmp/agent/multiplexer.h
+./snmp_perl.lo: ../include/net-snmp/agent/null.h
+./snmp_perl.lo: ../include/net-snmp/agent/debug_handler.h
+./snmp_perl.lo: ../include/net-snmp/agent/cache_handler.h
+./snmp_perl.lo: ../include/net-snmp/agent/old_api.h
+./snmp_perl.lo: ../include/net-snmp/agent/read_only.h
+./snmp_perl.lo: ../include/net-snmp/agent/row_merge.h
+./snmp_perl.lo: ../include/net-snmp/agent/serialize.h
+./snmp_perl.lo: ../include/net-snmp/agent/bulk_to_next.h
+./snmp_perl.lo: ../include/net-snmp/agent/mode_end_call.h
+./snmp_perl.lo: ../include/net-snmp/agent/table.h
+./snmp_perl.lo: ../include/net-snmp/agent/table_data.h
+./snmp_perl.lo: ../include/net-snmp/agent/table_dataset.h
+./snmp_perl.lo: ../include/net-snmp/agent/table_tdata.h
+./snmp_perl.lo: ../include/net-snmp/agent/table_iterator.h
+./snmp_perl.lo: ../include/net-snmp/agent/table_container.h
+./snmp_perl.lo: ../include/net-snmp/agent/table_array.h
+./snmp_perl.lo: ../include/net-snmp/agent/mfd.h
+./snmp_vars.lo: ../include/net-snmp/net-snmp-config.h
+./snmp_vars.lo: ../include/net-snmp/system/linux.h
+./snmp_vars.lo: ../include/net-snmp/system/sysv.h
+./snmp_vars.lo: ../include/net-snmp/system/generic.h
+./snmp_vars.lo: ../include/net-snmp/machine/generic.h
+./snmp_vars.lo: ../include/net-snmp/net-snmp-includes.h
+./snmp_vars.lo: ../include/net-snmp/definitions.h
+./snmp_vars.lo: ../include/net-snmp/types.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp_api.h
+./snmp_vars.lo: ../include/net-snmp/library/asn1.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp_impl.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp-tc.h
+./snmp_vars.lo: ../include/net-snmp/utilities.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp_client.h
+./snmp_vars.lo: ../include/net-snmp/library/system.h
+./snmp_vars.lo: ../include/net-snmp/library/tools.h
+./snmp_vars.lo: ../include/net-snmp/library/int64.h
+./snmp_vars.lo: ../include/net-snmp/library/mt_support.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp_alarm.h
+./snmp_vars.lo: ../include/net-snmp/library/callback.h
+./snmp_vars.lo: ../include/net-snmp/library/data_list.h
+./snmp_vars.lo: ../include/net-snmp/library/oid_stash.h
+./snmp_vars.lo: ../include/net-snmp/library/check_varbind.h
+./snmp_vars.lo: ../include/net-snmp/library/container.h
+./snmp_vars.lo: ../include/net-snmp/library/factory.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp_logging.h
+./snmp_vars.lo: ../include/net-snmp/library/container_binary_array.h
+./snmp_vars.lo: ../include/net-snmp/library/container_list_ssll.h
+./snmp_vars.lo: ../include/net-snmp/library/container_iterator.h
+./snmp_vars.lo: ../include/net-snmp/library/container.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp_assert.h
+./snmp_vars.lo: ../include/net-snmp/version.h
+./snmp_vars.lo: ../include/net-snmp/session_api.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp_transport.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp_service.h
+./snmp_vars.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./snmp_vars.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./snmp_vars.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./snmp_vars.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./snmp_vars.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./snmp_vars.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./snmp_vars.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./snmp_vars.lo: ../include/net-snmp/library/ucd_compat.h
+./snmp_vars.lo: ../include/net-snmp/pdu_api.h ../include/net-snmp/mib_api.h
+./snmp_vars.lo: ../include/net-snmp/library/mib.h
+./snmp_vars.lo: ../include/net-snmp/library/parse.h
+./snmp_vars.lo: ../include/net-snmp/varbind_api.h
+./snmp_vars.lo: ../include/net-snmp/config_api.h
+./snmp_vars.lo: ../include/net-snmp/library/read_config.h
+./snmp_vars.lo: ../include/net-snmp/library/default_store.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp_parse_args.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp_enum.h
+./snmp_vars.lo: ../include/net-snmp/library/vacm.h
+./snmp_vars.lo: ../include/net-snmp/output_api.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp_debug.h
+./snmp_vars.lo: ../include/net-snmp/snmpv3_api.h
+./snmp_vars.lo: ../include/net-snmp/library/snmpv3.h
+./snmp_vars.lo: ../include/net-snmp/library/transform_oids.h
+./snmp_vars.lo: ../include/net-snmp/library/keytools.h
+./snmp_vars.lo: ../include/net-snmp/library/scapi.h
+./snmp_vars.lo: ../include/net-snmp/library/lcd_time.h
+./snmp_vars.lo: ../include/net-snmp/library/snmp_secmod.h
+./snmp_vars.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./snmp_vars.lo: ../include/net-snmp/library/snmpusm.h
+./snmp_vars.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./snmp_vars.lo: ../include/net-snmp/agent/mib_module_config.h
+./snmp_vars.lo: ../include/net-snmp/agent/agent_module_config.h
+./snmp_vars.lo: ../include/net-snmp/agent/snmp_agent.h
+./snmp_vars.lo: ../include/net-snmp/agent/snmp_vars.h
+./snmp_vars.lo: ../include/net-snmp/agent/agent_handler.h
+./snmp_vars.lo: ../include/net-snmp/agent/var_struct.h
+./snmp_vars.lo: ../include/net-snmp/agent/agent_registry.h
+./snmp_vars.lo: ../include/net-snmp/library/fd_event_manager.h
+./snmp_vars.lo: ../include/net-snmp/agent/ds_agent.h
+./snmp_vars.lo: ../include/net-snmp/agent/agent_read_config.h
+./snmp_vars.lo: ../include/net-snmp/agent/agent_trap.h
+./snmp_vars.lo: ../include/net-snmp/agent/all_helpers.h
+./snmp_vars.lo: ../include/net-snmp/agent/instance.h
+./snmp_vars.lo: ../include/net-snmp/agent/baby_steps.h
+./snmp_vars.lo: ../include/net-snmp/agent/scalar.h
+./snmp_vars.lo: ../include/net-snmp/agent/scalar_group.h
+./snmp_vars.lo: ../include/net-snmp/agent/watcher.h
+./snmp_vars.lo: ../include/net-snmp/agent/multiplexer.h
+./snmp_vars.lo: ../include/net-snmp/agent/null.h
+./snmp_vars.lo: ../include/net-snmp/agent/debug_handler.h
+./snmp_vars.lo: ../include/net-snmp/agent/cache_handler.h
+./snmp_vars.lo: ../include/net-snmp/agent/old_api.h
+./snmp_vars.lo: ../include/net-snmp/agent/read_only.h
+./snmp_vars.lo: ../include/net-snmp/agent/row_merge.h
+./snmp_vars.lo: ../include/net-snmp/agent/serialize.h
+./snmp_vars.lo: ../include/net-snmp/agent/bulk_to_next.h
+./snmp_vars.lo: ../include/net-snmp/agent/mode_end_call.h
+./snmp_vars.lo: ../include/net-snmp/agent/table.h
+./snmp_vars.lo: ../include/net-snmp/agent/table_data.h
+./snmp_vars.lo: ../include/net-snmp/agent/table_dataset.h
+./snmp_vars.lo: ../include/net-snmp/agent/table_tdata.h
+./snmp_vars.lo: ../include/net-snmp/agent/table_iterator.h
+./snmp_vars.lo: ../include/net-snmp/agent/table_container.h
+./snmp_vars.lo: ../include/net-snmp/agent/table_array.h
+./snmp_vars.lo: ../include/net-snmp/agent/mfd.h
+./snmp_vars.lo: ../include/net-snmp/agent/mib_modules.h kernel.h
+./snmp_vars.lo: mibgroup/struct.h snmpd.h
+./snmp_vars.lo: ../agent/mibgroup/agentx/agentx_config.h
+./snmp_vars.lo: ../agent/mibgroup/agentx/subagent.h
+./snmp_vars.lo: ../agent/mibgroup/agent_module_includes.h
+./snmp_vars.lo: mibgroup/smux/smux.h mibgroup/snmpv3/usmConf.h
+./snmp_vars.lo: mibgroup/utilities/iquery.h mibgroup/mibII/vacm_conf.h
+./snmp_vars.lo: ../agent/mibgroup/mib_module_includes.h
+./snmp_vars.lo: mibgroup/examples/example.h mibgroup/testhandler.h
+./snmp_vars.lo: mibgroup/host/hr_system.h mibgroup/host/hr_storage.h
+./snmp_vars.lo: mibgroup/host/hr_device.h mibgroup/host/hr_other.h
+./snmp_vars.lo: mibgroup/host/hr_proc.h mibgroup/host/hr_network.h
+./snmp_vars.lo: mibgroup/host/hr_print.h mibgroup/host/hr_disk.h
+./snmp_vars.lo: mibgroup/host/hr_partition.h mibgroup/host/hr_filesys.h
+./snmp_vars.lo: mibgroup/host/hr_swrun.h mibgroup/host/hr_swinst.h
+./snmp_vars.lo: mibgroup/examples/scalar_int.h mibgroup/examples/watched.h
+./snmp_vars.lo: mibgroup/examples/data_set.h
+./snmp_vars.lo: mibgroup/examples/delayed_instance.h mibgroup/Rmon/rows.h
+./snmp_vars.lo: mibgroup/Rmon/agutil.h mibgroup/Rmon/statistics.h
+./snmp_vars.lo: mibgroup/Rmon/alarm.h mibgroup/Rmon/history.h
+./snmp_vars.lo: mibgroup/Rmon/event.h mibgroup/disman/event/mteScalars.h
+./snmp_vars.lo: mibgroup/disman/event/mteTrigger.h
+./snmp_vars.lo: mibgroup/disman/event/mteTriggerTable.h
+./snmp_vars.lo: mibgroup/disman/event/mteTriggerDeltaTable.h
+./snmp_vars.lo: mibgroup/disman/event/mteTriggerExistenceTable.h
+./snmp_vars.lo: mibgroup/disman/event/mteTriggerBooleanTable.h
+./snmp_vars.lo: mibgroup/disman/event/mteTriggerThresholdTable.h
+./snmp_vars.lo: mibgroup/disman/event/mteTriggerConf.h
+./snmp_vars.lo: mibgroup/disman/event/mteEvent.h
+./snmp_vars.lo: ../agent/mibgroup/disman/event/mteTrigger.h
+./snmp_vars.lo: mibgroup/disman/event/mteEventTable.h
+./snmp_vars.lo: mibgroup/disman/event/mteEventSetTable.h
+./snmp_vars.lo: mibgroup/disman/event/mteEventNotificationTable.h
+./snmp_vars.lo: mibgroup/disman/event/mteEventConf.h
+./snmp_vars.lo: mibgroup/disman/event/mteObjects.h
+./snmp_vars.lo: mibgroup/disman/event/mteObjectsTable.h
+./snmp_vars.lo: mibgroup/disman/event/mteObjectsConf.h
+./snmp_vars.lo: mibgroup/snmpv3/snmpEngine.h mibgroup/snmpv3/snmpMPDStats.h
+./snmp_vars.lo: mibgroup/snmpv3/usmStats.h mibgroup/snmpv3/usmUser.h
+./snmp_vars.lo: mibgroup/mibII/system_mib.h mibgroup/mibII/sysORTable.h
+./snmp_vars.lo: mibgroup/mibII/at.h mibgroup/mibII/ip.h
+./snmp_vars.lo: mibgroup/mibII/var_route.h mibgroup/mibII/route_write.h
+./snmp_vars.lo: mibgroup/mibII/at.h mibgroup/mibII/snmp_mib.h
+./snmp_vars.lo: mibgroup/mibII/tcp.h mibgroup/mibII/icmp.h
+./snmp_vars.lo: mibgroup/mibII/udp.h mibgroup/mibII/vacm_vars.h
+./snmp_vars.lo: mibgroup/mibII/setSerialNo.h mibgroup/mibII/ipv6.h
+./snmp_vars.lo: mibgroup/ucd-snmp/proc.h ../agent/mibgroup/mibdefs.h
+./snmp_vars.lo: mibgroup/ucd-snmp/versioninfo.h mibgroup/ucd-snmp/pass.h
+./snmp_vars.lo: mibgroup/ucd-snmp/pass_persist.h mibgroup/ucd-snmp/disk.h
+./snmp_vars.lo: mibgroup/ucd-snmp/loadave.h mibgroup/agent/extend.h
+./snmp_vars.lo: mibgroup/ucd-snmp/errormib.h mibgroup/ucd-snmp/file.h
+./snmp_vars.lo: mibgroup/ucd-snmp/dlmod.h mibgroup/ucd-snmp/proxy.h
+./snmp_vars.lo: mibgroup/ucd-snmp/logmatch.h
+./snmp_vars.lo: mibgroup/ucd-snmp/memory.h mibgroup/ucd-snmp/vmstat.h
+./snmp_vars.lo: mibgroup/notification/snmpNotifyTable.h
+./snmp_vars.lo: mibgroup/notification/snmpNotifyFilterProfileTable.h
+./snmp_vars.lo: mibgroup/notification-log-mib/notification_log.h
+./snmp_vars.lo: mibgroup/target/snmpTargetAddrEntry.h
+./snmp_vars.lo: mibgroup/target/snmpTargetParamsEntry.h
+./snmp_vars.lo: mibgroup/target/target_counters.h
+./snmp_vars.lo: mibgroup/agent/nsTransactionTable.h
+./snmp_vars.lo: mibgroup/agent/nsModuleTable.h mibgroup/agent/nsDebug.h
+./snmp_vars.lo: mibgroup/agent/nsCache.h mibgroup/agent/nsLogging.h
+./snmp_vars.lo: mibgroup/agent/nsVacmAccessTable.h
+./snmp_vars.lo: mibgroup/disman/schedule/schedCore.h
+./snmp_vars.lo: mibgroup/disman/schedule/schedConf.h
+./snmp_vars.lo: mibgroup/disman/schedule/schedTable.h
+./snmp_vars.lo: mibgroup/utilities/override.h
+./snmp_vars.lo: mibgroup/hardware/memory/hw_mem.h mibgroup/hardware/cpu/cpu.h
+./snmp_vars.lo: mibgroup/hardware/cpu/cpu_linux.h mibgroup/mibII/var_route.h
+./snmp_vars.lo: mibgroup/mibII/tcpTable.h mibgroup/mibII/udpTable.h
+./snmp_vars.lo: mibgroup/mibII/vacm_context.h mibgroup/ip-mib/ip_scalars.h
+./snmp_vars.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./snmp_vars.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_constants.h
+./snmp_vars.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.h
+./snmp_vars.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./snmp_vars.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.h
+./snmp_vars.lo: mibgroup/if-mib/ifTable/ifTable.h
+./snmp_vars.lo: ../include/net-snmp/data_access/interface.h
+./snmp_vars.lo: mibgroup/if-mib/ifTable/ifTable_constants.h
+./snmp_vars.lo: mibgroup/if-mib/ifTable/ifTable_interface.h
+./snmp_vars.lo: mibgroup/if-mib/ifTable/ifTable.h
+./snmp_vars.lo: mibgroup/if-mib/ifTable/ifTable_data_access.h
+./snmp_vars.lo: mibgroup/if-mib/ifXTable/ifXTable.h
+./snmp_vars.lo: ../agent/mibgroup/if-mib/ifTable/ifTable.h
+./snmp_vars.lo: mibgroup/if-mib/ifXTable/ifXTable_constants.h
+./snmp_vars.lo: mibgroup/if-mib/ifXTable/ifXTable_interface.h
+./snmp_vars.lo: mibgroup/if-mib/ifXTable/ifXTable.h
+./snmp_vars.lo: mibgroup/if-mib/ifXTable/ifXTable_data_access.h
+./snmp_vars.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+./snmp_vars.lo: ../include/net-snmp/data_access/ipaddress.h
+./snmp_vars.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h
+./snmp_vars.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.h
+./snmp_vars.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+./snmp_vars.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.h
+./snmp_vars.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+./snmp_vars.lo: ../include/net-snmp/data_access/arp.h
+./snmp_vars.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h
+./snmp_vars.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h
+./snmp_vars.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+./snmp_vars.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h
+./snmp_vars.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+./snmp_vars.lo: ../include/net-snmp/data_access/ipstats.h
+./snmp_vars.lo: ../include/net-snmp/data_access/systemstats.h
+./snmp_vars.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h
+./snmp_vars.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h
+./snmp_vars.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+./snmp_vars.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.h
+./snmp_vars.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+./snmp_vars.lo: ../include/net-snmp/data_access/route.h
+./snmp_vars.lo: ../agent/mibgroup/mibII/route_headers.h
+./snmp_vars.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_constants.h
+./snmp_vars.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.h
+./snmp_vars.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+./snmp_vars.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.h
+./snmp_vars.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+./snmp_vars.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_constants.h
+./snmp_vars.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h
+./snmp_vars.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+./snmp_vars.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.h
+./snmp_vars.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h
+./snmp_vars.lo: ../include/net-snmp/data_access/tcpConn.h
+./snmp_vars.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_constants.h
+./snmp_vars.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.h
+./snmp_vars.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h
+./snmp_vars.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.h
+./snmp_vars.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h
+./snmp_vars.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_constants.h
+./snmp_vars.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.h
+./snmp_vars.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h
+./snmp_vars.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.h
+./snmp_vars.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h
+./snmp_vars.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_constants.h
+./snmp_vars.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_interface.h
+./snmp_vars.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h
+./snmp_vars.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.h
+./snmp_vars.lo: mibgroup/if-mib/data_access/interface.h
+./snmp_vars.lo: ../agent/mibgroup/agent_module_inits.h
+./snmpd.lo: ../include/net-snmp/net-snmp-config.h
+./snmpd.lo: ../include/net-snmp/system/linux.h
+./snmpd.lo: ../include/net-snmp/system/sysv.h
+./snmpd.lo: ../include/net-snmp/system/generic.h
+./snmpd.lo: ../include/net-snmp/machine/generic.h
+./snmpd.lo: ../include/net-snmp/net-snmp-includes.h
+./snmpd.lo: ../include/net-snmp/definitions.h ../include/net-snmp/types.h
+./snmpd.lo: ../include/net-snmp/library/snmp_api.h
+./snmpd.lo: ../include/net-snmp/library/asn1.h
+./snmpd.lo: ../include/net-snmp/library/snmp_impl.h
+./snmpd.lo: ../include/net-snmp/library/snmp.h
+./snmpd.lo: ../include/net-snmp/library/snmp-tc.h
+./snmpd.lo: ../include/net-snmp/utilities.h
+./snmpd.lo: ../include/net-snmp/library/snmp_client.h
+./snmpd.lo: ../include/net-snmp/library/system.h
+./snmpd.lo: ../include/net-snmp/library/tools.h
+./snmpd.lo: ../include/net-snmp/library/int64.h
+./snmpd.lo: ../include/net-snmp/library/mt_support.h
+./snmpd.lo: ../include/net-snmp/library/snmp_alarm.h
+./snmpd.lo: ../include/net-snmp/library/callback.h
+./snmpd.lo: ../include/net-snmp/library/data_list.h
+./snmpd.lo: ../include/net-snmp/library/oid_stash.h
+./snmpd.lo: ../include/net-snmp/library/check_varbind.h
+./snmpd.lo: ../include/net-snmp/library/container.h
+./snmpd.lo: ../include/net-snmp/library/factory.h
+./snmpd.lo: ../include/net-snmp/library/snmp_logging.h
+./snmpd.lo: ../include/net-snmp/library/container_binary_array.h
+./snmpd.lo: ../include/net-snmp/library/container_list_ssll.h
+./snmpd.lo: ../include/net-snmp/library/container_iterator.h
+./snmpd.lo: ../include/net-snmp/library/container.h
+./snmpd.lo: ../include/net-snmp/library/snmp_assert.h
+./snmpd.lo: ../include/net-snmp/version.h ../include/net-snmp/session_api.h
+./snmpd.lo: ../include/net-snmp/library/snmp_transport.h
+./snmpd.lo: ../include/net-snmp/library/snmp_service.h
+./snmpd.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./snmpd.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./snmpd.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./snmpd.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./snmpd.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./snmpd.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./snmpd.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./snmpd.lo: ../include/net-snmp/library/ucd_compat.h
+./snmpd.lo: ../include/net-snmp/pdu_api.h ../include/net-snmp/mib_api.h
+./snmpd.lo: ../include/net-snmp/library/mib.h
+./snmpd.lo: ../include/net-snmp/library/parse.h
+./snmpd.lo: ../include/net-snmp/varbind_api.h
+./snmpd.lo: ../include/net-snmp/config_api.h
+./snmpd.lo: ../include/net-snmp/library/read_config.h
+./snmpd.lo: ../include/net-snmp/library/default_store.h
+./snmpd.lo: ../include/net-snmp/library/snmp_parse_args.h
+./snmpd.lo: ../include/net-snmp/library/snmp_enum.h
+./snmpd.lo: ../include/net-snmp/library/vacm.h
+./snmpd.lo: ../include/net-snmp/output_api.h
+./snmpd.lo: ../include/net-snmp/library/snmp_debug.h
+./snmpd.lo: ../include/net-snmp/snmpv3_api.h
+./snmpd.lo: ../include/net-snmp/library/snmpv3.h
+./snmpd.lo: ../include/net-snmp/library/transform_oids.h
+./snmpd.lo: ../include/net-snmp/library/keytools.h
+./snmpd.lo: ../include/net-snmp/library/scapi.h
+./snmpd.lo: ../include/net-snmp/library/lcd_time.h
+./snmpd.lo: ../include/net-snmp/library/snmp_secmod.h
+./snmpd.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./snmpd.lo: ../include/net-snmp/library/snmpusm.h
+./snmpd.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./snmpd.lo: ../include/net-snmp/agent/mib_module_config.h
+./snmpd.lo: ../include/net-snmp/agent/agent_module_config.h
+./snmpd.lo: ../include/net-snmp/agent/snmp_agent.h
+./snmpd.lo: ../include/net-snmp/agent/snmp_vars.h
+./snmpd.lo: ../include/net-snmp/agent/agent_handler.h
+./snmpd.lo: ../include/net-snmp/agent/var_struct.h
+./snmpd.lo: ../include/net-snmp/agent/agent_registry.h
+./snmpd.lo: ../include/net-snmp/library/fd_event_manager.h
+./snmpd.lo: ../include/net-snmp/agent/ds_agent.h
+./snmpd.lo: ../include/net-snmp/agent/agent_read_config.h
+./snmpd.lo: ../include/net-snmp/agent/agent_trap.h
+./snmpd.lo: ../include/net-snmp/agent/all_helpers.h
+./snmpd.lo: ../include/net-snmp/agent/instance.h
+./snmpd.lo: ../include/net-snmp/agent/baby_steps.h
+./snmpd.lo: ../include/net-snmp/agent/scalar.h
+./snmpd.lo: ../include/net-snmp/agent/scalar_group.h
+./snmpd.lo: ../include/net-snmp/agent/watcher.h
+./snmpd.lo: ../include/net-snmp/agent/multiplexer.h
+./snmpd.lo: ../include/net-snmp/agent/null.h
+./snmpd.lo: ../include/net-snmp/agent/debug_handler.h
+./snmpd.lo: ../include/net-snmp/agent/cache_handler.h
+./snmpd.lo: ../include/net-snmp/agent/old_api.h
+./snmpd.lo: ../include/net-snmp/agent/read_only.h
+./snmpd.lo: ../include/net-snmp/agent/row_merge.h
+./snmpd.lo: ../include/net-snmp/agent/serialize.h
+./snmpd.lo: ../include/net-snmp/agent/bulk_to_next.h
+./snmpd.lo: ../include/net-snmp/agent/mode_end_call.h
+./snmpd.lo: ../include/net-snmp/agent/table.h
+./snmpd.lo: ../include/net-snmp/agent/table_data.h
+./snmpd.lo: ../include/net-snmp/agent/table_dataset.h
+./snmpd.lo: ../include/net-snmp/agent/table_tdata.h
+./snmpd.lo: ../include/net-snmp/agent/table_iterator.h
+./snmpd.lo: ../include/net-snmp/agent/table_container.h
+./snmpd.lo: ../include/net-snmp/agent/table_array.h
+./snmpd.lo: ../include/net-snmp/agent/mfd.h m2m.h snmpd.h mibgroup/struct.h
+./snmpd.lo: ../include/net-snmp/agent/mib_modules.h mibgroup/util_funcs.h
+./snmpd.lo: mibgroup/struct.h ../agent/mibgroup/mib_module_includes.h
+./snmpd.lo: mibgroup/examples/example.h mibgroup/testhandler.h
+./snmpd.lo: mibgroup/host/hr_system.h mibgroup/host/hr_storage.h
+./snmpd.lo: mibgroup/host/hr_device.h mibgroup/host/hr_other.h
+./snmpd.lo: mibgroup/host/hr_proc.h mibgroup/host/hr_network.h
+./snmpd.lo: mibgroup/host/hr_print.h mibgroup/host/hr_disk.h
+./snmpd.lo: mibgroup/host/hr_partition.h mibgroup/host/hr_filesys.h
+./snmpd.lo: mibgroup/host/hr_swrun.h mibgroup/host/hr_swinst.h
+./snmpd.lo: mibgroup/examples/scalar_int.h mibgroup/examples/watched.h
+./snmpd.lo: mibgroup/examples/data_set.h mibgroup/examples/delayed_instance.h
+./snmpd.lo: mibgroup/Rmon/rows.h mibgroup/Rmon/agutil.h
+./snmpd.lo: mibgroup/Rmon/statistics.h mibgroup/Rmon/alarm.h
+./snmpd.lo: mibgroup/Rmon/history.h mibgroup/Rmon/event.h
+./snmpd.lo: mibgroup/disman/event/mteScalars.h
+./snmpd.lo: mibgroup/disman/event/mteTrigger.h
+./snmpd.lo: mibgroup/disman/event/mteTriggerTable.h
+./snmpd.lo: mibgroup/disman/event/mteTriggerDeltaTable.h
+./snmpd.lo: mibgroup/disman/event/mteTriggerExistenceTable.h
+./snmpd.lo: mibgroup/disman/event/mteTriggerBooleanTable.h
+./snmpd.lo: mibgroup/disman/event/mteTriggerThresholdTable.h
+./snmpd.lo: mibgroup/disman/event/mteTriggerConf.h
+./snmpd.lo: mibgroup/disman/event/mteEvent.h
+./snmpd.lo: ../agent/mibgroup/disman/event/mteTrigger.h
+./snmpd.lo: mibgroup/disman/event/mteEventTable.h
+./snmpd.lo: mibgroup/disman/event/mteEventSetTable.h
+./snmpd.lo: mibgroup/disman/event/mteEventNotificationTable.h
+./snmpd.lo: mibgroup/disman/event/mteEventConf.h
+./snmpd.lo: mibgroup/disman/event/mteObjects.h
+./snmpd.lo: mibgroup/disman/event/mteObjectsTable.h
+./snmpd.lo: mibgroup/disman/event/mteObjectsConf.h
+./snmpd.lo: mibgroup/snmpv3/snmpEngine.h mibgroup/snmpv3/snmpMPDStats.h
+./snmpd.lo: mibgroup/snmpv3/usmStats.h mibgroup/snmpv3/usmUser.h
+./snmpd.lo: mibgroup/mibII/system_mib.h mibgroup/mibII/sysORTable.h
+./snmpd.lo: mibgroup/mibII/at.h mibgroup/mibII/ip.h
+./snmpd.lo: mibgroup/mibII/var_route.h mibgroup/mibII/route_write.h
+./snmpd.lo: mibgroup/mibII/at.h mibgroup/mibII/snmp_mib.h
+./snmpd.lo: mibgroup/mibII/tcp.h mibgroup/mibII/icmp.h mibgroup/mibII/udp.h
+./snmpd.lo: mibgroup/mibII/vacm_vars.h mibgroup/mibII/setSerialNo.h
+./snmpd.lo: mibgroup/mibII/ipv6.h mibgroup/ucd-snmp/proc.h
+./snmpd.lo: ../agent/mibgroup/mibdefs.h mibgroup/ucd-snmp/versioninfo.h
+./snmpd.lo: mibgroup/ucd-snmp/pass.h mibgroup/ucd-snmp/pass_persist.h
+./snmpd.lo: mibgroup/ucd-snmp/disk.h mibgroup/ucd-snmp/loadave.h
+./snmpd.lo: mibgroup/agent/extend.h mibgroup/ucd-snmp/errormib.h
+./snmpd.lo: mibgroup/ucd-snmp/file.h mibgroup/ucd-snmp/dlmod.h
+./snmpd.lo: mibgroup/ucd-snmp/proxy.h mibgroup/ucd-snmp/logmatch.h
+./snmpd.lo: mibgroup/ucd-snmp/memory.h
+./snmpd.lo: mibgroup/ucd-snmp/vmstat.h
+./snmpd.lo: mibgroup/notification/snmpNotifyTable.h
+./snmpd.lo: mibgroup/notification/snmpNotifyFilterProfileTable.h
+./snmpd.lo: mibgroup/notification-log-mib/notification_log.h
+./snmpd.lo: mibgroup/target/snmpTargetAddrEntry.h
+./snmpd.lo: mibgroup/target/snmpTargetParamsEntry.h
+./snmpd.lo: mibgroup/target/target_counters.h
+./snmpd.lo: mibgroup/agent/nsTransactionTable.h
+./snmpd.lo: mibgroup/agent/nsModuleTable.h mibgroup/agent/nsDebug.h
+./snmpd.lo: mibgroup/agent/nsCache.h mibgroup/agent/nsLogging.h
+./snmpd.lo: mibgroup/agent/nsVacmAccessTable.h
+./snmpd.lo: mibgroup/disman/schedule/schedCore.h
+./snmpd.lo: mibgroup/disman/schedule/schedConf.h
+./snmpd.lo: mibgroup/disman/schedule/schedTable.h
+./snmpd.lo: mibgroup/utilities/override.h mibgroup/hardware/memory/hw_mem.h
+./snmpd.lo: mibgroup/hardware/cpu/cpu.h mibgroup/hardware/cpu/cpu_linux.h
+./snmpd.lo: mibgroup/mibII/var_route.h mibgroup/mibII/tcpTable.h
+./snmpd.lo: mibgroup/mibII/udpTable.h mibgroup/mibII/vacm_context.h
+./snmpd.lo: mibgroup/ip-mib/ip_scalars.h
+./snmpd.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./snmpd.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_constants.h
+./snmpd.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.h
+./snmpd.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./snmpd.lo: mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.h
+./snmpd.lo: mibgroup/if-mib/ifTable/ifTable.h
+./snmpd.lo: ../include/net-snmp/data_access/interface.h
+./snmpd.lo: mibgroup/if-mib/ifTable/ifTable_constants.h
+./snmpd.lo: mibgroup/if-mib/ifTable/ifTable_interface.h
+./snmpd.lo: mibgroup/if-mib/ifTable/ifTable.h
+./snmpd.lo: mibgroup/if-mib/ifTable/ifTable_data_access.h
+./snmpd.lo: mibgroup/if-mib/ifXTable/ifXTable.h
+./snmpd.lo: ../agent/mibgroup/if-mib/ifTable/ifTable.h
+./snmpd.lo: mibgroup/if-mib/ifXTable/ifXTable_constants.h
+./snmpd.lo: mibgroup/if-mib/ifXTable/ifXTable_interface.h
+./snmpd.lo: mibgroup/if-mib/ifXTable/ifXTable.h
+./snmpd.lo: mibgroup/if-mib/ifXTable/ifXTable_data_access.h
+./snmpd.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+./snmpd.lo: ../include/net-snmp/data_access/ipaddress.h
+./snmpd.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h
+./snmpd.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.h
+./snmpd.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
+./snmpd.lo: mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.h
+./snmpd.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+./snmpd.lo: ../include/net-snmp/data_access/arp.h
+./snmpd.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h
+./snmpd.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h
+./snmpd.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
+./snmpd.lo: mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h
+./snmpd.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+./snmpd.lo: ../include/net-snmp/data_access/ipstats.h
+./snmpd.lo: ../include/net-snmp/data_access/systemstats.h
+./snmpd.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h
+./snmpd.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h
+./snmpd.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+./snmpd.lo: mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.h
+./snmpd.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+./snmpd.lo: ../include/net-snmp/data_access/route.h
+./snmpd.lo: ../agent/mibgroup/mibII/route_headers.h
+./snmpd.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_constants.h
+./snmpd.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.h
+./snmpd.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
+./snmpd.lo: mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.h
+./snmpd.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+./snmpd.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_constants.h
+./snmpd.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h
+./snmpd.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
+./snmpd.lo: mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.h
+./snmpd.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h
+./snmpd.lo: ../include/net-snmp/data_access/tcpConn.h
+./snmpd.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_constants.h
+./snmpd.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.h
+./snmpd.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable.h
+./snmpd.lo: mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_data_access.h
+./snmpd.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h
+./snmpd.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_constants.h
+./snmpd.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.h
+./snmpd.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable.h
+./snmpd.lo: mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_data_access.h
+./snmpd.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h
+./snmpd.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_constants.h
+./snmpd.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_interface.h
+./snmpd.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable.h
+./snmpd.lo: mibgroup/udp-mib/udpEndpointTable/udpEndpointTable_data_access.h
+./snmpd.lo: mibgroup/if-mib/data_access/interface.h mibgroup/smux/smux.h
+./helpers/all_helpers.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/all_helpers.lo: ../include/net-snmp/system/linux.h
+./helpers/all_helpers.lo: ../include/net-snmp/system/sysv.h
+./helpers/all_helpers.lo: ../include/net-snmp/system/generic.h
+./helpers/all_helpers.lo: ../include/net-snmp/machine/generic.h
+./helpers/all_helpers.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/all_helpers.lo: ../include/net-snmp/definitions.h
+./helpers/all_helpers.lo: ../include/net-snmp/types.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/asn1.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/all_helpers.lo: ../include/net-snmp/utilities.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/system.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/tools.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/int64.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/mt_support.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/callback.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/data_list.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/container.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/factory.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/container.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/all_helpers.lo: ../include/net-snmp/version.h
+./helpers/all_helpers.lo: ../include/net-snmp/session_api.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/all_helpers.lo: ../include/net-snmp/pdu_api.h
+./helpers/all_helpers.lo: ../include/net-snmp/mib_api.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/mib.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/parse.h
+./helpers/all_helpers.lo: ../include/net-snmp/varbind_api.h
+./helpers/all_helpers.lo: ../include/net-snmp/config_api.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/read_config.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/default_store.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/vacm.h
+./helpers/all_helpers.lo: ../include/net-snmp/output_api.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/all_helpers.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/keytools.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/scapi.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/all_helpers.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/instance.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/scalar.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/watcher.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/null.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/old_api.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/read_only.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/serialize.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/table.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/table_data.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/table_container.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/table_array.h
+./helpers/all_helpers.lo: ../include/net-snmp/agent/mfd.h
+./helpers/baby_steps.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/baby_steps.lo: ../include/net-snmp/system/linux.h
+./helpers/baby_steps.lo: ../include/net-snmp/system/sysv.h
+./helpers/baby_steps.lo: ../include/net-snmp/system/generic.h
+./helpers/baby_steps.lo: ../include/net-snmp/machine/generic.h
+./helpers/baby_steps.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/baby_steps.lo: ../include/net-snmp/definitions.h
+./helpers/baby_steps.lo: ../include/net-snmp/types.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/asn1.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/baby_steps.lo: ../include/net-snmp/utilities.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/system.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/tools.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/int64.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/mt_support.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/callback.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/data_list.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/container.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/factory.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/container.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/baby_steps.lo: ../include/net-snmp/version.h
+./helpers/baby_steps.lo: ../include/net-snmp/session_api.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/baby_steps.lo: ../include/net-snmp/pdu_api.h
+./helpers/baby_steps.lo: ../include/net-snmp/mib_api.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/mib.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/parse.h
+./helpers/baby_steps.lo: ../include/net-snmp/varbind_api.h
+./helpers/baby_steps.lo: ../include/net-snmp/config_api.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/read_config.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/default_store.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/vacm.h
+./helpers/baby_steps.lo: ../include/net-snmp/output_api.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/baby_steps.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/keytools.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/scapi.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/baby_steps.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/instance.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/scalar.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/watcher.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/null.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/old_api.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/read_only.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/serialize.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/table.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/table_data.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/table_container.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/table_array.h
+./helpers/baby_steps.lo: ../include/net-snmp/agent/mfd.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/system/linux.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/system/sysv.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/system/generic.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/machine/generic.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/definitions.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/types.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/asn1.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/utilities.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/system.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/tools.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/int64.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/mt_support.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/callback.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/data_list.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/container.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/factory.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/container.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/version.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/session_api.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/pdu_api.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/mib_api.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/mib.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/parse.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/varbind_api.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/config_api.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/read_config.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/default_store.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/vacm.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/output_api.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/keytools.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/scapi.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/instance.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/scalar.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/watcher.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/null.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/old_api.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/read_only.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/serialize.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/table.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/table_data.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/table_container.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/table_array.h
+./helpers/bulk_to_next.lo: ../include/net-snmp/agent/mfd.h
+./helpers/cache_handler.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/cache_handler.lo: ../include/net-snmp/system/linux.h
+./helpers/cache_handler.lo: ../include/net-snmp/system/sysv.h
+./helpers/cache_handler.lo: ../include/net-snmp/system/generic.h
+./helpers/cache_handler.lo: ../include/net-snmp/machine/generic.h
+./helpers/cache_handler.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/cache_handler.lo: ../include/net-snmp/definitions.h
+./helpers/cache_handler.lo: ../include/net-snmp/types.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/asn1.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/cache_handler.lo: ../include/net-snmp/utilities.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/system.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/tools.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/int64.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/mt_support.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/callback.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/data_list.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/container.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/factory.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/container.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/cache_handler.lo: ../include/net-snmp/version.h
+./helpers/cache_handler.lo: ../include/net-snmp/session_api.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/cache_handler.lo: ../include/net-snmp/pdu_api.h
+./helpers/cache_handler.lo: ../include/net-snmp/mib_api.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/mib.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/parse.h
+./helpers/cache_handler.lo: ../include/net-snmp/varbind_api.h
+./helpers/cache_handler.lo: ../include/net-snmp/config_api.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/read_config.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/default_store.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/vacm.h
+./helpers/cache_handler.lo: ../include/net-snmp/output_api.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/cache_handler.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/keytools.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/scapi.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/cache_handler.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/instance.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/scalar.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/watcher.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/null.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/old_api.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/read_only.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/serialize.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/table.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/table_data.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/table_container.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/table_array.h
+./helpers/cache_handler.lo: ../include/net-snmp/agent/mfd.h
+./helpers/debug_handler.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/debug_handler.lo: ../include/net-snmp/system/linux.h
+./helpers/debug_handler.lo: ../include/net-snmp/system/sysv.h
+./helpers/debug_handler.lo: ../include/net-snmp/system/generic.h
+./helpers/debug_handler.lo: ../include/net-snmp/machine/generic.h
+./helpers/debug_handler.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/debug_handler.lo: ../include/net-snmp/definitions.h
+./helpers/debug_handler.lo: ../include/net-snmp/types.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/asn1.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/debug_handler.lo: ../include/net-snmp/utilities.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/system.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/tools.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/int64.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/mt_support.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/callback.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/data_list.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/container.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/factory.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/container.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/debug_handler.lo: ../include/net-snmp/version.h
+./helpers/debug_handler.lo: ../include/net-snmp/session_api.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/debug_handler.lo: ../include/net-snmp/pdu_api.h
+./helpers/debug_handler.lo: ../include/net-snmp/mib_api.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/mib.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/parse.h
+./helpers/debug_handler.lo: ../include/net-snmp/varbind_api.h
+./helpers/debug_handler.lo: ../include/net-snmp/config_api.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/read_config.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/default_store.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/vacm.h
+./helpers/debug_handler.lo: ../include/net-snmp/output_api.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/debug_handler.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/keytools.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/scapi.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/debug_handler.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/instance.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/scalar.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/watcher.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/null.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/old_api.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/read_only.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/serialize.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/table.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/table_data.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/table_container.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/table_array.h
+./helpers/debug_handler.lo: ../include/net-snmp/agent/mfd.h
+./helpers/instance.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/instance.lo: ../include/net-snmp/system/linux.h
+./helpers/instance.lo: ../include/net-snmp/system/sysv.h
+./helpers/instance.lo: ../include/net-snmp/system/generic.h
+./helpers/instance.lo: ../include/net-snmp/machine/generic.h
+./helpers/instance.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/instance.lo: ../include/net-snmp/definitions.h
+./helpers/instance.lo: ../include/net-snmp/types.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/instance.lo: ../include/net-snmp/library/asn1.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/instance.lo: ../include/net-snmp/utilities.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/instance.lo: ../include/net-snmp/library/system.h
+./helpers/instance.lo: ../include/net-snmp/library/tools.h
+./helpers/instance.lo: ../include/net-snmp/library/int64.h
+./helpers/instance.lo: ../include/net-snmp/library/mt_support.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/instance.lo: ../include/net-snmp/library/callback.h
+./helpers/instance.lo: ../include/net-snmp/library/data_list.h
+./helpers/instance.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/instance.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/instance.lo: ../include/net-snmp/library/container.h
+./helpers/instance.lo: ../include/net-snmp/library/factory.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/instance.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/instance.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/instance.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/instance.lo: ../include/net-snmp/library/container.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/instance.lo: ../include/net-snmp/version.h
+./helpers/instance.lo: ../include/net-snmp/session_api.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/instance.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/instance.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/instance.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/instance.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/instance.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/instance.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/instance.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/instance.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/instance.lo: ../include/net-snmp/pdu_api.h
+./helpers/instance.lo: ../include/net-snmp/mib_api.h
+./helpers/instance.lo: ../include/net-snmp/library/mib.h
+./helpers/instance.lo: ../include/net-snmp/library/parse.h
+./helpers/instance.lo: ../include/net-snmp/varbind_api.h
+./helpers/instance.lo: ../include/net-snmp/config_api.h
+./helpers/instance.lo: ../include/net-snmp/library/read_config.h
+./helpers/instance.lo: ../include/net-snmp/library/default_store.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/instance.lo: ../include/net-snmp/library/vacm.h
+./helpers/instance.lo: ../include/net-snmp/output_api.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/instance.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/instance.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/instance.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/instance.lo: ../include/net-snmp/library/keytools.h
+./helpers/instance.lo: ../include/net-snmp/library/scapi.h
+./helpers/instance.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/instance.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/instance.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/instance.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/instance.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/instance.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/instance.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/instance.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/instance.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/instance.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/instance.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/instance.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/instance.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/instance.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/instance.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/instance.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/instance.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/instance.lo: ../include/net-snmp/agent/instance.h
+./helpers/instance.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/instance.lo: ../include/net-snmp/agent/scalar.h
+./helpers/instance.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/instance.lo: ../include/net-snmp/agent/watcher.h
+./helpers/instance.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/instance.lo: ../include/net-snmp/agent/null.h
+./helpers/instance.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/instance.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/instance.lo: ../include/net-snmp/agent/old_api.h
+./helpers/instance.lo: ../include/net-snmp/agent/read_only.h
+./helpers/instance.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/instance.lo: ../include/net-snmp/agent/serialize.h
+./helpers/instance.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/instance.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/instance.lo: ../include/net-snmp/agent/table.h
+./helpers/instance.lo: ../include/net-snmp/agent/table_data.h
+./helpers/instance.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/instance.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/instance.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/instance.lo: ../include/net-snmp/agent/table_container.h
+./helpers/instance.lo: ../include/net-snmp/agent/table_array.h
+./helpers/instance.lo: ../include/net-snmp/agent/mfd.h
+./helpers/mode_end_call.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/mode_end_call.lo: ../include/net-snmp/system/linux.h
+./helpers/mode_end_call.lo: ../include/net-snmp/system/sysv.h
+./helpers/mode_end_call.lo: ../include/net-snmp/system/generic.h
+./helpers/mode_end_call.lo: ../include/net-snmp/machine/generic.h
+./helpers/mode_end_call.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/mode_end_call.lo: ../include/net-snmp/definitions.h
+./helpers/mode_end_call.lo: ../include/net-snmp/types.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/asn1.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/mode_end_call.lo: ../include/net-snmp/utilities.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/system.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/tools.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/int64.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/mt_support.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/callback.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/data_list.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/container.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/factory.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/container.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/mode_end_call.lo: ../include/net-snmp/version.h
+./helpers/mode_end_call.lo: ../include/net-snmp/session_api.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/mode_end_call.lo: ../include/net-snmp/pdu_api.h
+./helpers/mode_end_call.lo: ../include/net-snmp/mib_api.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/mib.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/parse.h
+./helpers/mode_end_call.lo: ../include/net-snmp/varbind_api.h
+./helpers/mode_end_call.lo: ../include/net-snmp/config_api.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/read_config.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/default_store.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/vacm.h
+./helpers/mode_end_call.lo: ../include/net-snmp/output_api.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/mode_end_call.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/keytools.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/scapi.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/mode_end_call.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/instance.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/scalar.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/watcher.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/null.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/old_api.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/read_only.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/serialize.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/table.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/table_data.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/table_container.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/table_array.h
+./helpers/mode_end_call.lo: ../include/net-snmp/agent/mfd.h
+./helpers/multiplexer.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/multiplexer.lo: ../include/net-snmp/system/linux.h
+./helpers/multiplexer.lo: ../include/net-snmp/system/sysv.h
+./helpers/multiplexer.lo: ../include/net-snmp/system/generic.h
+./helpers/multiplexer.lo: ../include/net-snmp/machine/generic.h
+./helpers/multiplexer.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/multiplexer.lo: ../include/net-snmp/definitions.h
+./helpers/multiplexer.lo: ../include/net-snmp/types.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/asn1.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/multiplexer.lo: ../include/net-snmp/utilities.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/system.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/tools.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/int64.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/mt_support.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/callback.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/data_list.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/container.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/factory.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/container.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/multiplexer.lo: ../include/net-snmp/version.h
+./helpers/multiplexer.lo: ../include/net-snmp/session_api.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/multiplexer.lo: ../include/net-snmp/pdu_api.h
+./helpers/multiplexer.lo: ../include/net-snmp/mib_api.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/mib.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/parse.h
+./helpers/multiplexer.lo: ../include/net-snmp/varbind_api.h
+./helpers/multiplexer.lo: ../include/net-snmp/config_api.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/read_config.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/default_store.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/vacm.h
+./helpers/multiplexer.lo: ../include/net-snmp/output_api.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/multiplexer.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/keytools.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/scapi.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/multiplexer.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/instance.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/scalar.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/watcher.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/null.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/old_api.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/read_only.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/serialize.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/table.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/table_data.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/table_container.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/table_array.h
+./helpers/multiplexer.lo: ../include/net-snmp/agent/mfd.h
+./helpers/null.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/null.lo: ../include/net-snmp/system/linux.h
+./helpers/null.lo: ../include/net-snmp/system/sysv.h
+./helpers/null.lo: ../include/net-snmp/system/generic.h
+./helpers/null.lo: ../include/net-snmp/machine/generic.h
+./helpers/null.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/null.lo: ../include/net-snmp/definitions.h
+./helpers/null.lo: ../include/net-snmp/types.h
+./helpers/null.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/null.lo: ../include/net-snmp/library/asn1.h
+./helpers/null.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/null.lo: ../include/net-snmp/library/snmp.h
+./helpers/null.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/null.lo: ../include/net-snmp/utilities.h
+./helpers/null.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/null.lo: ../include/net-snmp/library/system.h
+./helpers/null.lo: ../include/net-snmp/library/tools.h
+./helpers/null.lo: ../include/net-snmp/library/int64.h
+./helpers/null.lo: ../include/net-snmp/library/mt_support.h
+./helpers/null.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/null.lo: ../include/net-snmp/library/callback.h
+./helpers/null.lo: ../include/net-snmp/library/data_list.h
+./helpers/null.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/null.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/null.lo: ../include/net-snmp/library/container.h
+./helpers/null.lo: ../include/net-snmp/library/factory.h
+./helpers/null.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/null.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/null.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/null.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/null.lo: ../include/net-snmp/library/container.h
+./helpers/null.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/null.lo: ../include/net-snmp/version.h
+./helpers/null.lo: ../include/net-snmp/session_api.h
+./helpers/null.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/null.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/null.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/null.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/null.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/null.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/null.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/null.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/null.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/null.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/null.lo: ../include/net-snmp/pdu_api.h
+./helpers/null.lo: ../include/net-snmp/mib_api.h
+./helpers/null.lo: ../include/net-snmp/library/mib.h
+./helpers/null.lo: ../include/net-snmp/library/parse.h
+./helpers/null.lo: ../include/net-snmp/varbind_api.h
+./helpers/null.lo: ../include/net-snmp/config_api.h
+./helpers/null.lo: ../include/net-snmp/library/read_config.h
+./helpers/null.lo: ../include/net-snmp/library/default_store.h
+./helpers/null.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/null.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/null.lo: ../include/net-snmp/library/vacm.h
+./helpers/null.lo: ../include/net-snmp/output_api.h
+./helpers/null.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/null.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/null.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/null.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/null.lo: ../include/net-snmp/library/keytools.h
+./helpers/null.lo: ../include/net-snmp/library/scapi.h
+./helpers/null.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/null.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/null.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/null.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/null.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/null.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/null.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/null.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/null.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/null.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/null.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/null.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/null.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/null.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/null.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/null.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/null.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/null.lo: ../include/net-snmp/agent/instance.h
+./helpers/null.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/null.lo: ../include/net-snmp/agent/scalar.h
+./helpers/null.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/null.lo: ../include/net-snmp/agent/watcher.h
+./helpers/null.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/null.lo: ../include/net-snmp/agent/null.h
+./helpers/null.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/null.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/null.lo: ../include/net-snmp/agent/old_api.h
+./helpers/null.lo: ../include/net-snmp/agent/read_only.h
+./helpers/null.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/null.lo: ../include/net-snmp/agent/serialize.h
+./helpers/null.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/null.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/null.lo: ../include/net-snmp/agent/table.h
+./helpers/null.lo: ../include/net-snmp/agent/table_data.h
+./helpers/null.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/null.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/null.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/null.lo: ../include/net-snmp/agent/table_container.h
+./helpers/null.lo: ../include/net-snmp/agent/table_array.h
+./helpers/null.lo: ../include/net-snmp/agent/mfd.h
+./helpers/old_api.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/old_api.lo: ../include/net-snmp/system/linux.h
+./helpers/old_api.lo: ../include/net-snmp/system/sysv.h
+./helpers/old_api.lo: ../include/net-snmp/system/generic.h
+./helpers/old_api.lo: ../include/net-snmp/machine/generic.h
+./helpers/old_api.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/old_api.lo: ../include/net-snmp/definitions.h
+./helpers/old_api.lo: ../include/net-snmp/types.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/old_api.lo: ../include/net-snmp/library/asn1.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/old_api.lo: ../include/net-snmp/utilities.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/old_api.lo: ../include/net-snmp/library/system.h
+./helpers/old_api.lo: ../include/net-snmp/library/tools.h
+./helpers/old_api.lo: ../include/net-snmp/library/int64.h
+./helpers/old_api.lo: ../include/net-snmp/library/mt_support.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/old_api.lo: ../include/net-snmp/library/callback.h
+./helpers/old_api.lo: ../include/net-snmp/library/data_list.h
+./helpers/old_api.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/old_api.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/old_api.lo: ../include/net-snmp/library/container.h
+./helpers/old_api.lo: ../include/net-snmp/library/factory.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/old_api.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/old_api.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/old_api.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/old_api.lo: ../include/net-snmp/library/container.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/old_api.lo: ../include/net-snmp/version.h
+./helpers/old_api.lo: ../include/net-snmp/session_api.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/old_api.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/old_api.lo: ../include/net-snmp/pdu_api.h
+./helpers/old_api.lo: ../include/net-snmp/mib_api.h
+./helpers/old_api.lo: ../include/net-snmp/library/mib.h
+./helpers/old_api.lo: ../include/net-snmp/library/parse.h
+./helpers/old_api.lo: ../include/net-snmp/varbind_api.h
+./helpers/old_api.lo: ../include/net-snmp/config_api.h
+./helpers/old_api.lo: ../include/net-snmp/library/read_config.h
+./helpers/old_api.lo: ../include/net-snmp/library/default_store.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/old_api.lo: ../include/net-snmp/library/vacm.h
+./helpers/old_api.lo: ../include/net-snmp/output_api.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/old_api.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/old_api.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/old_api.lo: ../include/net-snmp/library/keytools.h
+./helpers/old_api.lo: ../include/net-snmp/library/scapi.h
+./helpers/old_api.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/old_api.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/old_api.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/old_api.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/old_api.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/old_api.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/old_api.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/old_api.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/old_api.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/old_api.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/old_api.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/old_api.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/old_api.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/old_api.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/old_api.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/old_api.lo: ../include/net-snmp/agent/instance.h
+./helpers/old_api.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/old_api.lo: ../include/net-snmp/agent/scalar.h
+./helpers/old_api.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/old_api.lo: ../include/net-snmp/agent/watcher.h
+./helpers/old_api.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/old_api.lo: ../include/net-snmp/agent/null.h
+./helpers/old_api.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/old_api.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/old_api.lo: ../include/net-snmp/agent/old_api.h
+./helpers/old_api.lo: ../include/net-snmp/agent/read_only.h
+./helpers/old_api.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/old_api.lo: ../include/net-snmp/agent/serialize.h
+./helpers/old_api.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/old_api.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/old_api.lo: ../include/net-snmp/agent/table.h
+./helpers/old_api.lo: ../include/net-snmp/agent/table_data.h
+./helpers/old_api.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/old_api.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/old_api.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/old_api.lo: ../include/net-snmp/agent/table_container.h
+./helpers/old_api.lo: ../include/net-snmp/agent/table_array.h
+./helpers/old_api.lo: ../include/net-snmp/agent/mfd.h
+./helpers/old_api.lo: ../include/net-snmp/agent/agent_callbacks.h
+./helpers/read_only.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/read_only.lo: ../include/net-snmp/system/linux.h
+./helpers/read_only.lo: ../include/net-snmp/system/sysv.h
+./helpers/read_only.lo: ../include/net-snmp/system/generic.h
+./helpers/read_only.lo: ../include/net-snmp/machine/generic.h
+./helpers/read_only.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/read_only.lo: ../include/net-snmp/definitions.h
+./helpers/read_only.lo: ../include/net-snmp/types.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/read_only.lo: ../include/net-snmp/library/asn1.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/read_only.lo: ../include/net-snmp/utilities.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/read_only.lo: ../include/net-snmp/library/system.h
+./helpers/read_only.lo: ../include/net-snmp/library/tools.h
+./helpers/read_only.lo: ../include/net-snmp/library/int64.h
+./helpers/read_only.lo: ../include/net-snmp/library/mt_support.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/read_only.lo: ../include/net-snmp/library/callback.h
+./helpers/read_only.lo: ../include/net-snmp/library/data_list.h
+./helpers/read_only.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/read_only.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/read_only.lo: ../include/net-snmp/library/container.h
+./helpers/read_only.lo: ../include/net-snmp/library/factory.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/read_only.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/read_only.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/read_only.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/read_only.lo: ../include/net-snmp/library/container.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/read_only.lo: ../include/net-snmp/version.h
+./helpers/read_only.lo: ../include/net-snmp/session_api.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/read_only.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/read_only.lo: ../include/net-snmp/pdu_api.h
+./helpers/read_only.lo: ../include/net-snmp/mib_api.h
+./helpers/read_only.lo: ../include/net-snmp/library/mib.h
+./helpers/read_only.lo: ../include/net-snmp/library/parse.h
+./helpers/read_only.lo: ../include/net-snmp/varbind_api.h
+./helpers/read_only.lo: ../include/net-snmp/config_api.h
+./helpers/read_only.lo: ../include/net-snmp/library/read_config.h
+./helpers/read_only.lo: ../include/net-snmp/library/default_store.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/read_only.lo: ../include/net-snmp/library/vacm.h
+./helpers/read_only.lo: ../include/net-snmp/output_api.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/read_only.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/read_only.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/read_only.lo: ../include/net-snmp/library/keytools.h
+./helpers/read_only.lo: ../include/net-snmp/library/scapi.h
+./helpers/read_only.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/read_only.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/read_only.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/read_only.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/read_only.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/read_only.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/read_only.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/read_only.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/read_only.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/read_only.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/read_only.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/read_only.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/read_only.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/read_only.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/read_only.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/read_only.lo: ../include/net-snmp/agent/instance.h
+./helpers/read_only.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/read_only.lo: ../include/net-snmp/agent/scalar.h
+./helpers/read_only.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/read_only.lo: ../include/net-snmp/agent/watcher.h
+./helpers/read_only.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/read_only.lo: ../include/net-snmp/agent/null.h
+./helpers/read_only.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/read_only.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/read_only.lo: ../include/net-snmp/agent/old_api.h
+./helpers/read_only.lo: ../include/net-snmp/agent/read_only.h
+./helpers/read_only.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/read_only.lo: ../include/net-snmp/agent/serialize.h
+./helpers/read_only.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/read_only.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/read_only.lo: ../include/net-snmp/agent/table.h
+./helpers/read_only.lo: ../include/net-snmp/agent/table_data.h
+./helpers/read_only.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/read_only.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/read_only.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/read_only.lo: ../include/net-snmp/agent/table_container.h
+./helpers/read_only.lo: ../include/net-snmp/agent/table_array.h
+./helpers/read_only.lo: ../include/net-snmp/agent/mfd.h
+./helpers/row_merge.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/row_merge.lo: ../include/net-snmp/system/linux.h
+./helpers/row_merge.lo: ../include/net-snmp/system/sysv.h
+./helpers/row_merge.lo: ../include/net-snmp/system/generic.h
+./helpers/row_merge.lo: ../include/net-snmp/machine/generic.h
+./helpers/row_merge.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/row_merge.lo: ../include/net-snmp/definitions.h
+./helpers/row_merge.lo: ../include/net-snmp/types.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/row_merge.lo: ../include/net-snmp/library/asn1.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/row_merge.lo: ../include/net-snmp/utilities.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/row_merge.lo: ../include/net-snmp/library/system.h
+./helpers/row_merge.lo: ../include/net-snmp/library/tools.h
+./helpers/row_merge.lo: ../include/net-snmp/library/int64.h
+./helpers/row_merge.lo: ../include/net-snmp/library/mt_support.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/row_merge.lo: ../include/net-snmp/library/callback.h
+./helpers/row_merge.lo: ../include/net-snmp/library/data_list.h
+./helpers/row_merge.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/row_merge.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/row_merge.lo: ../include/net-snmp/library/container.h
+./helpers/row_merge.lo: ../include/net-snmp/library/factory.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/row_merge.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/row_merge.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/row_merge.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/row_merge.lo: ../include/net-snmp/library/container.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/row_merge.lo: ../include/net-snmp/version.h
+./helpers/row_merge.lo: ../include/net-snmp/session_api.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/row_merge.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/row_merge.lo: ../include/net-snmp/pdu_api.h
+./helpers/row_merge.lo: ../include/net-snmp/mib_api.h
+./helpers/row_merge.lo: ../include/net-snmp/library/mib.h
+./helpers/row_merge.lo: ../include/net-snmp/library/parse.h
+./helpers/row_merge.lo: ../include/net-snmp/varbind_api.h
+./helpers/row_merge.lo: ../include/net-snmp/config_api.h
+./helpers/row_merge.lo: ../include/net-snmp/library/read_config.h
+./helpers/row_merge.lo: ../include/net-snmp/library/default_store.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/row_merge.lo: ../include/net-snmp/library/vacm.h
+./helpers/row_merge.lo: ../include/net-snmp/output_api.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/row_merge.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/row_merge.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/row_merge.lo: ../include/net-snmp/library/keytools.h
+./helpers/row_merge.lo: ../include/net-snmp/library/scapi.h
+./helpers/row_merge.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/row_merge.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/row_merge.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/instance.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/scalar.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/watcher.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/null.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/old_api.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/read_only.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/serialize.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/table.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/table_data.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/table_container.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/table_array.h
+./helpers/row_merge.lo: ../include/net-snmp/agent/mfd.h
+./helpers/scalar.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/scalar.lo: ../include/net-snmp/system/linux.h
+./helpers/scalar.lo: ../include/net-snmp/system/sysv.h
+./helpers/scalar.lo: ../include/net-snmp/system/generic.h
+./helpers/scalar.lo: ../include/net-snmp/machine/generic.h
+./helpers/scalar.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/scalar.lo: ../include/net-snmp/definitions.h
+./helpers/scalar.lo: ../include/net-snmp/types.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/scalar.lo: ../include/net-snmp/library/asn1.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/scalar.lo: ../include/net-snmp/utilities.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/scalar.lo: ../include/net-snmp/library/system.h
+./helpers/scalar.lo: ../include/net-snmp/library/tools.h
+./helpers/scalar.lo: ../include/net-snmp/library/int64.h
+./helpers/scalar.lo: ../include/net-snmp/library/mt_support.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/scalar.lo: ../include/net-snmp/library/callback.h
+./helpers/scalar.lo: ../include/net-snmp/library/data_list.h
+./helpers/scalar.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/scalar.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/scalar.lo: ../include/net-snmp/library/container.h
+./helpers/scalar.lo: ../include/net-snmp/library/factory.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/scalar.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/scalar.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/scalar.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/scalar.lo: ../include/net-snmp/library/container.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/scalar.lo: ../include/net-snmp/version.h
+./helpers/scalar.lo: ../include/net-snmp/session_api.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/scalar.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/scalar.lo: ../include/net-snmp/pdu_api.h
+./helpers/scalar.lo: ../include/net-snmp/mib_api.h
+./helpers/scalar.lo: ../include/net-snmp/library/mib.h
+./helpers/scalar.lo: ../include/net-snmp/library/parse.h
+./helpers/scalar.lo: ../include/net-snmp/varbind_api.h
+./helpers/scalar.lo: ../include/net-snmp/config_api.h
+./helpers/scalar.lo: ../include/net-snmp/library/read_config.h
+./helpers/scalar.lo: ../include/net-snmp/library/default_store.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/scalar.lo: ../include/net-snmp/library/vacm.h
+./helpers/scalar.lo: ../include/net-snmp/output_api.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/scalar.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/scalar.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/scalar.lo: ../include/net-snmp/library/keytools.h
+./helpers/scalar.lo: ../include/net-snmp/library/scapi.h
+./helpers/scalar.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/scalar.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/scalar.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/scalar.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/scalar.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/scalar.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/scalar.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/scalar.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/scalar.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/scalar.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/scalar.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/scalar.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/scalar.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/scalar.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/scalar.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/scalar.lo: ../include/net-snmp/agent/instance.h
+./helpers/scalar.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/scalar.lo: ../include/net-snmp/agent/scalar.h
+./helpers/scalar.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/scalar.lo: ../include/net-snmp/agent/watcher.h
+./helpers/scalar.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/scalar.lo: ../include/net-snmp/agent/null.h
+./helpers/scalar.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/scalar.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/scalar.lo: ../include/net-snmp/agent/old_api.h
+./helpers/scalar.lo: ../include/net-snmp/agent/read_only.h
+./helpers/scalar.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/scalar.lo: ../include/net-snmp/agent/serialize.h
+./helpers/scalar.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/scalar.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/scalar.lo: ../include/net-snmp/agent/table.h
+./helpers/scalar.lo: ../include/net-snmp/agent/table_data.h
+./helpers/scalar.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/scalar.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/scalar.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/scalar.lo: ../include/net-snmp/agent/table_container.h
+./helpers/scalar.lo: ../include/net-snmp/agent/table_array.h
+./helpers/scalar.lo: ../include/net-snmp/agent/mfd.h
+./helpers/scalar_group.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/scalar_group.lo: ../include/net-snmp/system/linux.h
+./helpers/scalar_group.lo: ../include/net-snmp/system/sysv.h
+./helpers/scalar_group.lo: ../include/net-snmp/system/generic.h
+./helpers/scalar_group.lo: ../include/net-snmp/machine/generic.h
+./helpers/scalar_group.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/scalar_group.lo: ../include/net-snmp/definitions.h
+./helpers/scalar_group.lo: ../include/net-snmp/types.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/asn1.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/scalar_group.lo: ../include/net-snmp/utilities.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/system.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/tools.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/int64.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/mt_support.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/callback.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/data_list.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/container.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/factory.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/container.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/scalar_group.lo: ../include/net-snmp/version.h
+./helpers/scalar_group.lo: ../include/net-snmp/session_api.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/scalar_group.lo: ../include/net-snmp/pdu_api.h
+./helpers/scalar_group.lo: ../include/net-snmp/mib_api.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/mib.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/parse.h
+./helpers/scalar_group.lo: ../include/net-snmp/varbind_api.h
+./helpers/scalar_group.lo: ../include/net-snmp/config_api.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/read_config.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/default_store.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/vacm.h
+./helpers/scalar_group.lo: ../include/net-snmp/output_api.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/scalar_group.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/keytools.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/scapi.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/scalar_group.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/instance.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/scalar.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/watcher.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/null.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/old_api.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/read_only.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/serialize.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/table.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/table_data.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/table_container.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/table_array.h
+./helpers/scalar_group.lo: ../include/net-snmp/agent/mfd.h
+./helpers/serialize.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/serialize.lo: ../include/net-snmp/system/linux.h
+./helpers/serialize.lo: ../include/net-snmp/system/sysv.h
+./helpers/serialize.lo: ../include/net-snmp/system/generic.h
+./helpers/serialize.lo: ../include/net-snmp/machine/generic.h
+./helpers/serialize.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/serialize.lo: ../include/net-snmp/definitions.h
+./helpers/serialize.lo: ../include/net-snmp/types.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/serialize.lo: ../include/net-snmp/library/asn1.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/serialize.lo: ../include/net-snmp/utilities.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/serialize.lo: ../include/net-snmp/library/system.h
+./helpers/serialize.lo: ../include/net-snmp/library/tools.h
+./helpers/serialize.lo: ../include/net-snmp/library/int64.h
+./helpers/serialize.lo: ../include/net-snmp/library/mt_support.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/serialize.lo: ../include/net-snmp/library/callback.h
+./helpers/serialize.lo: ../include/net-snmp/library/data_list.h
+./helpers/serialize.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/serialize.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/serialize.lo: ../include/net-snmp/library/container.h
+./helpers/serialize.lo: ../include/net-snmp/library/factory.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/serialize.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/serialize.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/serialize.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/serialize.lo: ../include/net-snmp/library/container.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/serialize.lo: ../include/net-snmp/version.h
+./helpers/serialize.lo: ../include/net-snmp/session_api.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/serialize.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/serialize.lo: ../include/net-snmp/pdu_api.h
+./helpers/serialize.lo: ../include/net-snmp/mib_api.h
+./helpers/serialize.lo: ../include/net-snmp/library/mib.h
+./helpers/serialize.lo: ../include/net-snmp/library/parse.h
+./helpers/serialize.lo: ../include/net-snmp/varbind_api.h
+./helpers/serialize.lo: ../include/net-snmp/config_api.h
+./helpers/serialize.lo: ../include/net-snmp/library/read_config.h
+./helpers/serialize.lo: ../include/net-snmp/library/default_store.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/serialize.lo: ../include/net-snmp/library/vacm.h
+./helpers/serialize.lo: ../include/net-snmp/output_api.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/serialize.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/serialize.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/serialize.lo: ../include/net-snmp/library/keytools.h
+./helpers/serialize.lo: ../include/net-snmp/library/scapi.h
+./helpers/serialize.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/serialize.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/serialize.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/serialize.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/serialize.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/serialize.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/serialize.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/serialize.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/serialize.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/serialize.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/serialize.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/serialize.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/serialize.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/serialize.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/serialize.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/serialize.lo: ../include/net-snmp/agent/instance.h
+./helpers/serialize.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/serialize.lo: ../include/net-snmp/agent/scalar.h
+./helpers/serialize.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/serialize.lo: ../include/net-snmp/agent/watcher.h
+./helpers/serialize.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/serialize.lo: ../include/net-snmp/agent/null.h
+./helpers/serialize.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/serialize.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/serialize.lo: ../include/net-snmp/agent/old_api.h
+./helpers/serialize.lo: ../include/net-snmp/agent/read_only.h
+./helpers/serialize.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/serialize.lo: ../include/net-snmp/agent/serialize.h
+./helpers/serialize.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/serialize.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/serialize.lo: ../include/net-snmp/agent/table.h
+./helpers/serialize.lo: ../include/net-snmp/agent/table_data.h
+./helpers/serialize.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/serialize.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/serialize.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/serialize.lo: ../include/net-snmp/agent/table_container.h
+./helpers/serialize.lo: ../include/net-snmp/agent/table_array.h
+./helpers/serialize.lo: ../include/net-snmp/agent/mfd.h
+./helpers/stash_cache.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/stash_cache.lo: ../include/net-snmp/system/linux.h
+./helpers/stash_cache.lo: ../include/net-snmp/system/sysv.h
+./helpers/stash_cache.lo: ../include/net-snmp/system/generic.h
+./helpers/stash_cache.lo: ../include/net-snmp/machine/generic.h
+./helpers/stash_cache.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/stash_cache.lo: ../include/net-snmp/definitions.h
+./helpers/stash_cache.lo: ../include/net-snmp/types.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/asn1.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/stash_cache.lo: ../include/net-snmp/utilities.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/system.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/tools.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/int64.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/mt_support.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/callback.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/data_list.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/container.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/factory.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/container.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/stash_cache.lo: ../include/net-snmp/version.h
+./helpers/stash_cache.lo: ../include/net-snmp/session_api.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/stash_cache.lo: ../include/net-snmp/pdu_api.h
+./helpers/stash_cache.lo: ../include/net-snmp/mib_api.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/mib.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/parse.h
+./helpers/stash_cache.lo: ../include/net-snmp/varbind_api.h
+./helpers/stash_cache.lo: ../include/net-snmp/config_api.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/read_config.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/default_store.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/vacm.h
+./helpers/stash_cache.lo: ../include/net-snmp/output_api.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/stash_cache.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/keytools.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/scapi.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/stash_cache.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/instance.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/scalar.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/watcher.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/null.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/old_api.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/read_only.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/serialize.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/table.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/table_data.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/table_container.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/table_array.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/mfd.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/stash_cache.h
+./helpers/stash_cache.lo: ../include/net-snmp/agent/stash_to_next.h
+./helpers/stash_to_next.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/stash_to_next.lo: ../include/net-snmp/system/linux.h
+./helpers/stash_to_next.lo: ../include/net-snmp/system/sysv.h
+./helpers/stash_to_next.lo: ../include/net-snmp/system/generic.h
+./helpers/stash_to_next.lo: ../include/net-snmp/machine/generic.h
+./helpers/stash_to_next.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/stash_to_next.lo: ../include/net-snmp/definitions.h
+./helpers/stash_to_next.lo: ../include/net-snmp/types.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/asn1.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/stash_to_next.lo: ../include/net-snmp/utilities.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/system.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/tools.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/int64.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/mt_support.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/callback.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/data_list.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/container.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/factory.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/container.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/stash_to_next.lo: ../include/net-snmp/version.h
+./helpers/stash_to_next.lo: ../include/net-snmp/session_api.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/stash_to_next.lo: ../include/net-snmp/pdu_api.h
+./helpers/stash_to_next.lo: ../include/net-snmp/mib_api.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/mib.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/parse.h
+./helpers/stash_to_next.lo: ../include/net-snmp/varbind_api.h
+./helpers/stash_to_next.lo: ../include/net-snmp/config_api.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/read_config.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/default_store.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/vacm.h
+./helpers/stash_to_next.lo: ../include/net-snmp/output_api.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/stash_to_next.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/keytools.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/scapi.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/stash_to_next.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/instance.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/scalar.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/watcher.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/null.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/old_api.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/read_only.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/serialize.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/table.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/table_data.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/table_container.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/table_array.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/mfd.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/stash_cache.h
+./helpers/stash_to_next.lo: ../include/net-snmp/agent/stash_to_next.h
+./helpers/table.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/table.lo: ../include/net-snmp/system/linux.h
+./helpers/table.lo: ../include/net-snmp/system/sysv.h
+./helpers/table.lo: ../include/net-snmp/system/generic.h
+./helpers/table.lo: ../include/net-snmp/machine/generic.h
+./helpers/table.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/table.lo: ../include/net-snmp/definitions.h
+./helpers/table.lo: ../include/net-snmp/types.h
+./helpers/table.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/table.lo: ../include/net-snmp/library/asn1.h
+./helpers/table.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/table.lo: ../include/net-snmp/library/snmp.h
+./helpers/table.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/table.lo: ../include/net-snmp/utilities.h
+./helpers/table.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/table.lo: ../include/net-snmp/library/system.h
+./helpers/table.lo: ../include/net-snmp/library/tools.h
+./helpers/table.lo: ../include/net-snmp/library/int64.h
+./helpers/table.lo: ../include/net-snmp/library/mt_support.h
+./helpers/table.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/table.lo: ../include/net-snmp/library/callback.h
+./helpers/table.lo: ../include/net-snmp/library/data_list.h
+./helpers/table.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/table.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/table.lo: ../include/net-snmp/library/container.h
+./helpers/table.lo: ../include/net-snmp/library/factory.h
+./helpers/table.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/table.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/table.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/table.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/table.lo: ../include/net-snmp/library/container.h
+./helpers/table.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/table.lo: ../include/net-snmp/version.h
+./helpers/table.lo: ../include/net-snmp/session_api.h
+./helpers/table.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/table.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/table.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/table.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/table.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/table.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/table.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/table.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/table.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/table.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/table.lo: ../include/net-snmp/pdu_api.h
+./helpers/table.lo: ../include/net-snmp/mib_api.h
+./helpers/table.lo: ../include/net-snmp/library/mib.h
+./helpers/table.lo: ../include/net-snmp/library/parse.h
+./helpers/table.lo: ../include/net-snmp/varbind_api.h
+./helpers/table.lo: ../include/net-snmp/config_api.h
+./helpers/table.lo: ../include/net-snmp/library/read_config.h
+./helpers/table.lo: ../include/net-snmp/library/default_store.h
+./helpers/table.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/table.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/table.lo: ../include/net-snmp/library/vacm.h
+./helpers/table.lo: ../include/net-snmp/output_api.h
+./helpers/table.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/table.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/table.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/table.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/table.lo: ../include/net-snmp/library/keytools.h
+./helpers/table.lo: ../include/net-snmp/library/scapi.h
+./helpers/table.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/table.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/table.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/table.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/table.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/table.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/table.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/table.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/table.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/table.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/table.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/table.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/table.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/table.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/table.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/table.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/table.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/table.lo: ../include/net-snmp/agent/instance.h
+./helpers/table.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/table.lo: ../include/net-snmp/agent/scalar.h
+./helpers/table.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/table.lo: ../include/net-snmp/agent/watcher.h
+./helpers/table.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/table.lo: ../include/net-snmp/agent/null.h
+./helpers/table.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/table.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/table.lo: ../include/net-snmp/agent/old_api.h
+./helpers/table.lo: ../include/net-snmp/agent/read_only.h
+./helpers/table.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/table.lo: ../include/net-snmp/agent/serialize.h
+./helpers/table.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/table.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/table.lo: ../include/net-snmp/agent/table.h
+./helpers/table.lo: ../include/net-snmp/agent/table_data.h
+./helpers/table.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/table.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/table.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/table.lo: ../include/net-snmp/agent/table_container.h
+./helpers/table.lo: ../include/net-snmp/agent/table_array.h
+./helpers/table.lo: ../include/net-snmp/agent/mfd.h
+./helpers/table_array.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/table_array.lo: ../include/net-snmp/system/linux.h
+./helpers/table_array.lo: ../include/net-snmp/system/sysv.h
+./helpers/table_array.lo: ../include/net-snmp/system/generic.h
+./helpers/table_array.lo: ../include/net-snmp/machine/generic.h
+./helpers/table_array.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/table_array.lo: ../include/net-snmp/definitions.h
+./helpers/table_array.lo: ../include/net-snmp/types.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/table_array.lo: ../include/net-snmp/library/asn1.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/table_array.lo: ../include/net-snmp/utilities.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/table_array.lo: ../include/net-snmp/library/system.h
+./helpers/table_array.lo: ../include/net-snmp/library/tools.h
+./helpers/table_array.lo: ../include/net-snmp/library/int64.h
+./helpers/table_array.lo: ../include/net-snmp/library/mt_support.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/table_array.lo: ../include/net-snmp/library/callback.h
+./helpers/table_array.lo: ../include/net-snmp/library/data_list.h
+./helpers/table_array.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/table_array.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/table_array.lo: ../include/net-snmp/library/container.h
+./helpers/table_array.lo: ../include/net-snmp/library/factory.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/table_array.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/table_array.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/table_array.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/table_array.lo: ../include/net-snmp/library/container.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/table_array.lo: ../include/net-snmp/version.h
+./helpers/table_array.lo: ../include/net-snmp/session_api.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/table_array.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/table_array.lo: ../include/net-snmp/pdu_api.h
+./helpers/table_array.lo: ../include/net-snmp/mib_api.h
+./helpers/table_array.lo: ../include/net-snmp/library/mib.h
+./helpers/table_array.lo: ../include/net-snmp/library/parse.h
+./helpers/table_array.lo: ../include/net-snmp/varbind_api.h
+./helpers/table_array.lo: ../include/net-snmp/config_api.h
+./helpers/table_array.lo: ../include/net-snmp/library/read_config.h
+./helpers/table_array.lo: ../include/net-snmp/library/default_store.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/table_array.lo: ../include/net-snmp/library/vacm.h
+./helpers/table_array.lo: ../include/net-snmp/output_api.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/table_array.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/table_array.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/table_array.lo: ../include/net-snmp/library/keytools.h
+./helpers/table_array.lo: ../include/net-snmp/library/scapi.h
+./helpers/table_array.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/table_array.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/table_array.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/table_array.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/table_array.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/table_array.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/table_array.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/table_array.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/table_array.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/table_array.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/table_array.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/table_array.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/table_array.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/table_array.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/table_array.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/table_array.lo: ../include/net-snmp/agent/instance.h
+./helpers/table_array.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/table_array.lo: ../include/net-snmp/agent/scalar.h
+./helpers/table_array.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/table_array.lo: ../include/net-snmp/agent/watcher.h
+./helpers/table_array.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/table_array.lo: ../include/net-snmp/agent/null.h
+./helpers/table_array.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/table_array.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/table_array.lo: ../include/net-snmp/agent/old_api.h
+./helpers/table_array.lo: ../include/net-snmp/agent/read_only.h
+./helpers/table_array.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/table_array.lo: ../include/net-snmp/agent/serialize.h
+./helpers/table_array.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/table_array.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/table_array.lo: ../include/net-snmp/agent/table.h
+./helpers/table_array.lo: ../include/net-snmp/agent/table_data.h
+./helpers/table_array.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/table_array.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/table_array.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/table_array.lo: ../include/net-snmp/agent/table_container.h
+./helpers/table_array.lo: ../include/net-snmp/agent/table_array.h
+./helpers/table_array.lo: ../include/net-snmp/agent/mfd.h
+./helpers/table_container.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/table_container.lo: ../include/net-snmp/system/linux.h
+./helpers/table_container.lo: ../include/net-snmp/system/sysv.h
+./helpers/table_container.lo: ../include/net-snmp/system/generic.h
+./helpers/table_container.lo: ../include/net-snmp/machine/generic.h
+./helpers/table_container.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/table_container.lo: ../include/net-snmp/definitions.h
+./helpers/table_container.lo: ../include/net-snmp/types.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/table_container.lo: ../include/net-snmp/library/asn1.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/table_container.lo: ../include/net-snmp/utilities.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/table_container.lo: ../include/net-snmp/library/system.h
+./helpers/table_container.lo: ../include/net-snmp/library/tools.h
+./helpers/table_container.lo: ../include/net-snmp/library/int64.h
+./helpers/table_container.lo: ../include/net-snmp/library/mt_support.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/table_container.lo: ../include/net-snmp/library/callback.h
+./helpers/table_container.lo: ../include/net-snmp/library/data_list.h
+./helpers/table_container.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/table_container.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/table_container.lo: ../include/net-snmp/library/container.h
+./helpers/table_container.lo: ../include/net-snmp/library/factory.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/table_container.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/table_container.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/table_container.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/table_container.lo: ../include/net-snmp/library/container.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/table_container.lo: ../include/net-snmp/version.h
+./helpers/table_container.lo: ../include/net-snmp/session_api.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/table_container.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/table_container.lo: ../include/net-snmp/pdu_api.h
+./helpers/table_container.lo: ../include/net-snmp/mib_api.h
+./helpers/table_container.lo: ../include/net-snmp/library/mib.h
+./helpers/table_container.lo: ../include/net-snmp/library/parse.h
+./helpers/table_container.lo: ../include/net-snmp/varbind_api.h
+./helpers/table_container.lo: ../include/net-snmp/config_api.h
+./helpers/table_container.lo: ../include/net-snmp/library/read_config.h
+./helpers/table_container.lo: ../include/net-snmp/library/default_store.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/table_container.lo: ../include/net-snmp/library/vacm.h
+./helpers/table_container.lo: ../include/net-snmp/output_api.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/table_container.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/table_container.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/table_container.lo: ../include/net-snmp/library/keytools.h
+./helpers/table_container.lo: ../include/net-snmp/library/scapi.h
+./helpers/table_container.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/table_container.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/table_container.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/table_container.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/table_container.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/table_container.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/table_container.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/table_container.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/table_container.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/table_container.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/table_container.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/table_container.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/table_container.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/table_container.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/table_container.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/table_container.lo: ../include/net-snmp/agent/instance.h
+./helpers/table_container.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/table_container.lo: ../include/net-snmp/agent/scalar.h
+./helpers/table_container.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/table_container.lo: ../include/net-snmp/agent/watcher.h
+./helpers/table_container.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/table_container.lo: ../include/net-snmp/agent/null.h
+./helpers/table_container.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/table_container.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/table_container.lo: ../include/net-snmp/agent/old_api.h
+./helpers/table_container.lo: ../include/net-snmp/agent/read_only.h
+./helpers/table_container.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/table_container.lo: ../include/net-snmp/agent/serialize.h
+./helpers/table_container.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/table_container.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/table_container.lo: ../include/net-snmp/agent/table.h
+./helpers/table_container.lo: ../include/net-snmp/agent/table_data.h
+./helpers/table_container.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/table_container.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/table_container.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/table_container.lo: ../include/net-snmp/agent/table_container.h
+./helpers/table_container.lo: ../include/net-snmp/agent/table_array.h
+./helpers/table_container.lo: ../include/net-snmp/agent/mfd.h
+./helpers/table_data.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/table_data.lo: ../include/net-snmp/system/linux.h
+./helpers/table_data.lo: ../include/net-snmp/system/sysv.h
+./helpers/table_data.lo: ../include/net-snmp/system/generic.h
+./helpers/table_data.lo: ../include/net-snmp/machine/generic.h
+./helpers/table_data.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/table_data.lo: ../include/net-snmp/definitions.h
+./helpers/table_data.lo: ../include/net-snmp/types.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/table_data.lo: ../include/net-snmp/library/asn1.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/table_data.lo: ../include/net-snmp/utilities.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/table_data.lo: ../include/net-snmp/library/system.h
+./helpers/table_data.lo: ../include/net-snmp/library/tools.h
+./helpers/table_data.lo: ../include/net-snmp/library/int64.h
+./helpers/table_data.lo: ../include/net-snmp/library/mt_support.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/table_data.lo: ../include/net-snmp/library/callback.h
+./helpers/table_data.lo: ../include/net-snmp/library/data_list.h
+./helpers/table_data.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/table_data.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/table_data.lo: ../include/net-snmp/library/container.h
+./helpers/table_data.lo: ../include/net-snmp/library/factory.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/table_data.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/table_data.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/table_data.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/table_data.lo: ../include/net-snmp/library/container.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/table_data.lo: ../include/net-snmp/version.h
+./helpers/table_data.lo: ../include/net-snmp/session_api.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/table_data.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/table_data.lo: ../include/net-snmp/pdu_api.h
+./helpers/table_data.lo: ../include/net-snmp/mib_api.h
+./helpers/table_data.lo: ../include/net-snmp/library/mib.h
+./helpers/table_data.lo: ../include/net-snmp/library/parse.h
+./helpers/table_data.lo: ../include/net-snmp/varbind_api.h
+./helpers/table_data.lo: ../include/net-snmp/config_api.h
+./helpers/table_data.lo: ../include/net-snmp/library/read_config.h
+./helpers/table_data.lo: ../include/net-snmp/library/default_store.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/table_data.lo: ../include/net-snmp/library/vacm.h
+./helpers/table_data.lo: ../include/net-snmp/output_api.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/table_data.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/table_data.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/table_data.lo: ../include/net-snmp/library/keytools.h
+./helpers/table_data.lo: ../include/net-snmp/library/scapi.h
+./helpers/table_data.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/table_data.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/table_data.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/table_data.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/table_data.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/table_data.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/table_data.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/table_data.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/table_data.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/table_data.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/table_data.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/table_data.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/table_data.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/table_data.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/table_data.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/table_data.lo: ../include/net-snmp/agent/instance.h
+./helpers/table_data.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/table_data.lo: ../include/net-snmp/agent/scalar.h
+./helpers/table_data.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/table_data.lo: ../include/net-snmp/agent/watcher.h
+./helpers/table_data.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/table_data.lo: ../include/net-snmp/agent/null.h
+./helpers/table_data.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/table_data.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/table_data.lo: ../include/net-snmp/agent/old_api.h
+./helpers/table_data.lo: ../include/net-snmp/agent/read_only.h
+./helpers/table_data.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/table_data.lo: ../include/net-snmp/agent/serialize.h
+./helpers/table_data.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/table_data.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/table_data.lo: ../include/net-snmp/agent/table.h
+./helpers/table_data.lo: ../include/net-snmp/agent/table_data.h
+./helpers/table_data.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/table_data.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/table_data.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/table_data.lo: ../include/net-snmp/agent/table_container.h
+./helpers/table_data.lo: ../include/net-snmp/agent/table_array.h
+./helpers/table_data.lo: ../include/net-snmp/agent/mfd.h
+./helpers/table_dataset.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/table_dataset.lo: ../include/net-snmp/system/linux.h
+./helpers/table_dataset.lo: ../include/net-snmp/system/sysv.h
+./helpers/table_dataset.lo: ../include/net-snmp/system/generic.h
+./helpers/table_dataset.lo: ../include/net-snmp/machine/generic.h
+./helpers/table_dataset.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/table_dataset.lo: ../include/net-snmp/definitions.h
+./helpers/table_dataset.lo: ../include/net-snmp/types.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/asn1.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/table_dataset.lo: ../include/net-snmp/utilities.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/system.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/tools.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/int64.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/mt_support.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/callback.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/data_list.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/container.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/factory.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/container.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/table_dataset.lo: ../include/net-snmp/version.h
+./helpers/table_dataset.lo: ../include/net-snmp/session_api.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/table_dataset.lo: ../include/net-snmp/pdu_api.h
+./helpers/table_dataset.lo: ../include/net-snmp/mib_api.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/mib.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/parse.h
+./helpers/table_dataset.lo: ../include/net-snmp/varbind_api.h
+./helpers/table_dataset.lo: ../include/net-snmp/config_api.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/read_config.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/default_store.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/vacm.h
+./helpers/table_dataset.lo: ../include/net-snmp/output_api.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/table_dataset.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/keytools.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/scapi.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/table_dataset.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/instance.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/scalar.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/watcher.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/null.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/old_api.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/read_only.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/serialize.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/table.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/table_data.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/table_container.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/table_array.h
+./helpers/table_dataset.lo: ../include/net-snmp/agent/mfd.h
+./helpers/table_iterator.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/table_iterator.lo: ../include/net-snmp/system/linux.h
+./helpers/table_iterator.lo: ../include/net-snmp/system/sysv.h
+./helpers/table_iterator.lo: ../include/net-snmp/system/generic.h
+./helpers/table_iterator.lo: ../include/net-snmp/machine/generic.h
+./helpers/table_iterator.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/table_iterator.lo: ../include/net-snmp/definitions.h
+./helpers/table_iterator.lo: ../include/net-snmp/types.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/asn1.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/table_iterator.lo: ../include/net-snmp/utilities.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/system.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/tools.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/int64.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/mt_support.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/callback.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/data_list.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/container.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/factory.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/container.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/table_iterator.lo: ../include/net-snmp/version.h
+./helpers/table_iterator.lo: ../include/net-snmp/session_api.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/table_iterator.lo: ../include/net-snmp/pdu_api.h
+./helpers/table_iterator.lo: ../include/net-snmp/mib_api.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/mib.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/parse.h
+./helpers/table_iterator.lo: ../include/net-snmp/varbind_api.h
+./helpers/table_iterator.lo: ../include/net-snmp/config_api.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/read_config.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/default_store.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/vacm.h
+./helpers/table_iterator.lo: ../include/net-snmp/output_api.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/table_iterator.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/keytools.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/scapi.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/table_iterator.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/instance.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/scalar.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/watcher.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/null.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/old_api.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/read_only.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/serialize.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/table.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/table_data.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/table_container.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/table_array.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/mfd.h
+./helpers/table_iterator.lo: ../include/net-snmp/agent/stash_cache.h
+./helpers/table_row.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/table_row.lo: ../include/net-snmp/system/linux.h
+./helpers/table_row.lo: ../include/net-snmp/system/sysv.h
+./helpers/table_row.lo: ../include/net-snmp/system/generic.h
+./helpers/table_row.lo: ../include/net-snmp/machine/generic.h
+./helpers/table_row.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/table_row.lo: ../include/net-snmp/definitions.h
+./helpers/table_row.lo: ../include/net-snmp/types.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/table_row.lo: ../include/net-snmp/library/asn1.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/table_row.lo: ../include/net-snmp/utilities.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/table_row.lo: ../include/net-snmp/library/system.h
+./helpers/table_row.lo: ../include/net-snmp/library/tools.h
+./helpers/table_row.lo: ../include/net-snmp/library/int64.h
+./helpers/table_row.lo: ../include/net-snmp/library/mt_support.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/table_row.lo: ../include/net-snmp/library/callback.h
+./helpers/table_row.lo: ../include/net-snmp/library/data_list.h
+./helpers/table_row.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/table_row.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/table_row.lo: ../include/net-snmp/library/container.h
+./helpers/table_row.lo: ../include/net-snmp/library/factory.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/table_row.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/table_row.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/table_row.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/table_row.lo: ../include/net-snmp/library/container.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/table_row.lo: ../include/net-snmp/version.h
+./helpers/table_row.lo: ../include/net-snmp/session_api.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/table_row.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/table_row.lo: ../include/net-snmp/pdu_api.h
+./helpers/table_row.lo: ../include/net-snmp/mib_api.h
+./helpers/table_row.lo: ../include/net-snmp/library/mib.h
+./helpers/table_row.lo: ../include/net-snmp/library/parse.h
+./helpers/table_row.lo: ../include/net-snmp/varbind_api.h
+./helpers/table_row.lo: ../include/net-snmp/config_api.h
+./helpers/table_row.lo: ../include/net-snmp/library/read_config.h
+./helpers/table_row.lo: ../include/net-snmp/library/default_store.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/table_row.lo: ../include/net-snmp/library/vacm.h
+./helpers/table_row.lo: ../include/net-snmp/output_api.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/table_row.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/table_row.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/table_row.lo: ../include/net-snmp/library/keytools.h
+./helpers/table_row.lo: ../include/net-snmp/library/scapi.h
+./helpers/table_row.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/table_row.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/table_row.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/table_row.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/table_row.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/table_row.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/table_row.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/table_row.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/table_row.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/table_row.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/table_row.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/table_row.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/table_row.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/table_row.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/table_row.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/table_row.lo: ../include/net-snmp/agent/instance.h
+./helpers/table_row.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/table_row.lo: ../include/net-snmp/agent/scalar.h
+./helpers/table_row.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/table_row.lo: ../include/net-snmp/agent/watcher.h
+./helpers/table_row.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/table_row.lo: ../include/net-snmp/agent/null.h
+./helpers/table_row.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/table_row.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/table_row.lo: ../include/net-snmp/agent/old_api.h
+./helpers/table_row.lo: ../include/net-snmp/agent/read_only.h
+./helpers/table_row.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/table_row.lo: ../include/net-snmp/agent/serialize.h
+./helpers/table_row.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/table_row.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/table_row.lo: ../include/net-snmp/agent/table.h
+./helpers/table_row.lo: ../include/net-snmp/agent/table_data.h
+./helpers/table_row.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/table_row.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/table_row.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/table_row.lo: ../include/net-snmp/agent/table_container.h
+./helpers/table_row.lo: ../include/net-snmp/agent/table_array.h
+./helpers/table_row.lo: ../include/net-snmp/agent/mfd.h
+./helpers/table_tdata.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/table_tdata.lo: ../include/net-snmp/system/linux.h
+./helpers/table_tdata.lo: ../include/net-snmp/system/sysv.h
+./helpers/table_tdata.lo: ../include/net-snmp/system/generic.h
+./helpers/table_tdata.lo: ../include/net-snmp/machine/generic.h
+./helpers/table_tdata.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/table_tdata.lo: ../include/net-snmp/definitions.h
+./helpers/table_tdata.lo: ../include/net-snmp/types.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/asn1.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/table_tdata.lo: ../include/net-snmp/utilities.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/system.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/tools.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/int64.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/mt_support.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/callback.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/data_list.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/container.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/factory.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/container.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/table_tdata.lo: ../include/net-snmp/version.h
+./helpers/table_tdata.lo: ../include/net-snmp/session_api.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/table_tdata.lo: ../include/net-snmp/pdu_api.h
+./helpers/table_tdata.lo: ../include/net-snmp/mib_api.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/mib.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/parse.h
+./helpers/table_tdata.lo: ../include/net-snmp/varbind_api.h
+./helpers/table_tdata.lo: ../include/net-snmp/config_api.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/read_config.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/default_store.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/vacm.h
+./helpers/table_tdata.lo: ../include/net-snmp/output_api.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/table_tdata.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/keytools.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/scapi.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/table_tdata.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/instance.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/scalar.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/watcher.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/null.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/old_api.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/read_only.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/serialize.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/table.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/table_data.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/table_container.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/table_array.h
+./helpers/table_tdata.lo: ../include/net-snmp/agent/mfd.h
+./helpers/watcher.lo: ../include/net-snmp/net-snmp-config.h
+./helpers/watcher.lo: ../include/net-snmp/system/linux.h
+./helpers/watcher.lo: ../include/net-snmp/system/sysv.h
+./helpers/watcher.lo: ../include/net-snmp/system/generic.h
+./helpers/watcher.lo: ../include/net-snmp/machine/generic.h
+./helpers/watcher.lo: ../include/net-snmp/net-snmp-includes.h
+./helpers/watcher.lo: ../include/net-snmp/definitions.h
+./helpers/watcher.lo: ../include/net-snmp/types.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp_api.h
+./helpers/watcher.lo: ../include/net-snmp/library/asn1.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp_impl.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp-tc.h
+./helpers/watcher.lo: ../include/net-snmp/utilities.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp_client.h
+./helpers/watcher.lo: ../include/net-snmp/library/system.h
+./helpers/watcher.lo: ../include/net-snmp/library/tools.h
+./helpers/watcher.lo: ../include/net-snmp/library/int64.h
+./helpers/watcher.lo: ../include/net-snmp/library/mt_support.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp_alarm.h
+./helpers/watcher.lo: ../include/net-snmp/library/callback.h
+./helpers/watcher.lo: ../include/net-snmp/library/data_list.h
+./helpers/watcher.lo: ../include/net-snmp/library/oid_stash.h
+./helpers/watcher.lo: ../include/net-snmp/library/check_varbind.h
+./helpers/watcher.lo: ../include/net-snmp/library/container.h
+./helpers/watcher.lo: ../include/net-snmp/library/factory.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp_logging.h
+./helpers/watcher.lo: ../include/net-snmp/library/container_binary_array.h
+./helpers/watcher.lo: ../include/net-snmp/library/container_list_ssll.h
+./helpers/watcher.lo: ../include/net-snmp/library/container_iterator.h
+./helpers/watcher.lo: ../include/net-snmp/library/container.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp_assert.h
+./helpers/watcher.lo: ../include/net-snmp/version.h
+./helpers/watcher.lo: ../include/net-snmp/session_api.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp_transport.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp_service.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./helpers/watcher.lo: ../include/net-snmp/library/ucd_compat.h
+./helpers/watcher.lo: ../include/net-snmp/pdu_api.h
+./helpers/watcher.lo: ../include/net-snmp/mib_api.h
+./helpers/watcher.lo: ../include/net-snmp/library/mib.h
+./helpers/watcher.lo: ../include/net-snmp/library/parse.h
+./helpers/watcher.lo: ../include/net-snmp/varbind_api.h
+./helpers/watcher.lo: ../include/net-snmp/config_api.h
+./helpers/watcher.lo: ../include/net-snmp/library/read_config.h
+./helpers/watcher.lo: ../include/net-snmp/library/default_store.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp_parse_args.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp_enum.h
+./helpers/watcher.lo: ../include/net-snmp/library/vacm.h
+./helpers/watcher.lo: ../include/net-snmp/output_api.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp_debug.h
+./helpers/watcher.lo: ../include/net-snmp/snmpv3_api.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmpv3.h
+./helpers/watcher.lo: ../include/net-snmp/library/transform_oids.h
+./helpers/watcher.lo: ../include/net-snmp/library/keytools.h
+./helpers/watcher.lo: ../include/net-snmp/library/scapi.h
+./helpers/watcher.lo: ../include/net-snmp/library/lcd_time.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmp_secmod.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./helpers/watcher.lo: ../include/net-snmp/library/snmpusm.h
+./helpers/watcher.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./helpers/watcher.lo: ../include/net-snmp/agent/mib_module_config.h
+./helpers/watcher.lo: ../include/net-snmp/agent/agent_module_config.h
+./helpers/watcher.lo: ../include/net-snmp/agent/snmp_agent.h
+./helpers/watcher.lo: ../include/net-snmp/agent/snmp_vars.h
+./helpers/watcher.lo: ../include/net-snmp/agent/agent_handler.h
+./helpers/watcher.lo: ../include/net-snmp/agent/var_struct.h
+./helpers/watcher.lo: ../include/net-snmp/agent/agent_registry.h
+./helpers/watcher.lo: ../include/net-snmp/library/fd_event_manager.h
+./helpers/watcher.lo: ../include/net-snmp/agent/ds_agent.h
+./helpers/watcher.lo: ../include/net-snmp/agent/agent_read_config.h
+./helpers/watcher.lo: ../include/net-snmp/agent/agent_trap.h
+./helpers/watcher.lo: ../include/net-snmp/agent/all_helpers.h
+./helpers/watcher.lo: ../include/net-snmp/agent/instance.h
+./helpers/watcher.lo: ../include/net-snmp/agent/baby_steps.h
+./helpers/watcher.lo: ../include/net-snmp/agent/scalar.h
+./helpers/watcher.lo: ../include/net-snmp/agent/scalar_group.h
+./helpers/watcher.lo: ../include/net-snmp/agent/watcher.h
+./helpers/watcher.lo: ../include/net-snmp/agent/multiplexer.h
+./helpers/watcher.lo: ../include/net-snmp/agent/null.h
+./helpers/watcher.lo: ../include/net-snmp/agent/debug_handler.h
+./helpers/watcher.lo: ../include/net-snmp/agent/cache_handler.h
+./helpers/watcher.lo: ../include/net-snmp/agent/old_api.h
+./helpers/watcher.lo: ../include/net-snmp/agent/read_only.h
+./helpers/watcher.lo: ../include/net-snmp/agent/row_merge.h
+./helpers/watcher.lo: ../include/net-snmp/agent/serialize.h
+./helpers/watcher.lo: ../include/net-snmp/agent/bulk_to_next.h
+./helpers/watcher.lo: ../include/net-snmp/agent/mode_end_call.h
+./helpers/watcher.lo: ../include/net-snmp/agent/table.h
+./helpers/watcher.lo: ../include/net-snmp/agent/table_data.h
+./helpers/watcher.lo: ../include/net-snmp/agent/table_dataset.h
+./helpers/watcher.lo: ../include/net-snmp/agent/table_tdata.h
+./helpers/watcher.lo: ../include/net-snmp/agent/table_iterator.h
+./helpers/watcher.lo: ../include/net-snmp/agent/table_container.h
+./helpers/watcher.lo: ../include/net-snmp/agent/table_array.h
+./helpers/watcher.lo: ../include/net-snmp/agent/mfd.h
+./mibgroup/header_complex.lo: ../include/net-snmp/net-snmp-config.h
+./mibgroup/header_complex.lo: ../include/net-snmp/system/linux.h
+./mibgroup/header_complex.lo: ../include/net-snmp/system/sysv.h
+./mibgroup/header_complex.lo: ../include/net-snmp/system/generic.h
+./mibgroup/header_complex.lo: ../include/net-snmp/machine/generic.h
+./mibgroup/header_complex.lo: ../include/net-snmp/net-snmp-includes.h
+./mibgroup/header_complex.lo: ../include/net-snmp/definitions.h
+./mibgroup/header_complex.lo: ../include/net-snmp/types.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp_api.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/asn1.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp_impl.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp-tc.h
+./mibgroup/header_complex.lo: ../include/net-snmp/utilities.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp_client.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/system.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/tools.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/int64.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/mt_support.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp_alarm.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/callback.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/data_list.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/oid_stash.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/check_varbind.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/container.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/factory.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp_logging.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/container_binary_array.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/container_list_ssll.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/container_iterator.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/container.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp_assert.h
+./mibgroup/header_complex.lo: ../include/net-snmp/version.h
+./mibgroup/header_complex.lo: ../include/net-snmp/session_api.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp_transport.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp_service.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/ucd_compat.h
+./mibgroup/header_complex.lo: ../include/net-snmp/pdu_api.h
+./mibgroup/header_complex.lo: ../include/net-snmp/mib_api.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/mib.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/parse.h
+./mibgroup/header_complex.lo: ../include/net-snmp/varbind_api.h
+./mibgroup/header_complex.lo: ../include/net-snmp/config_api.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/read_config.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/default_store.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp_parse_args.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp_enum.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/vacm.h
+./mibgroup/header_complex.lo: ../include/net-snmp/output_api.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp_debug.h
+./mibgroup/header_complex.lo: ../include/net-snmp/snmpv3_api.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmpv3.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/transform_oids.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/keytools.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/scapi.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/lcd_time.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmp_secmod.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/snmpusm.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/mib_module_config.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/agent_module_config.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/snmp_agent.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/snmp_vars.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/agent_handler.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/var_struct.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/agent_registry.h
+./mibgroup/header_complex.lo: ../include/net-snmp/library/fd_event_manager.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/ds_agent.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/agent_read_config.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/agent_trap.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/all_helpers.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/instance.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/baby_steps.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/scalar.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/scalar_group.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/watcher.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/multiplexer.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/null.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/debug_handler.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/cache_handler.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/old_api.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/read_only.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/row_merge.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/serialize.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/bulk_to_next.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/mode_end_call.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/table.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/table_data.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/table_dataset.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/table_tdata.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/table_iterator.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/table_container.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/table_array.h
+./mibgroup/header_complex.lo: ../include/net-snmp/agent/mfd.h
+./mibgroup/header_complex.lo: ./mibgroup/header_complex.h
+./mibgroup/kernel_sunos5.lo: ../include/net-snmp/net-snmp-config.h
+./mibgroup/kernel_sunos5.lo: ../include/net-snmp/system/linux.h
+./mibgroup/kernel_sunos5.lo: ../include/net-snmp/system/sysv.h
+./mibgroup/kernel_sunos5.lo: ../include/net-snmp/system/generic.h
+./mibgroup/kernel_sunos5.lo: ../include/net-snmp/machine/generic.h
+./mibgroup/testhandler.lo: ../include/net-snmp/net-snmp-config.h
+./mibgroup/testhandler.lo: ../include/net-snmp/system/linux.h
+./mibgroup/testhandler.lo: ../include/net-snmp/system/sysv.h
+./mibgroup/testhandler.lo: ../include/net-snmp/system/generic.h
+./mibgroup/testhandler.lo: ../include/net-snmp/machine/generic.h
+./mibgroup/testhandler.lo: ../include/net-snmp/net-snmp-includes.h
+./mibgroup/testhandler.lo: ../include/net-snmp/definitions.h
+./mibgroup/testhandler.lo: ../include/net-snmp/types.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp_api.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/asn1.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp_impl.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp-tc.h
+./mibgroup/testhandler.lo: ../include/net-snmp/utilities.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp_client.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/system.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/tools.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/int64.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/mt_support.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp_alarm.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/callback.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/data_list.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/oid_stash.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/check_varbind.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/container.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/factory.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp_logging.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/container_binary_array.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/container_list_ssll.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/container_iterator.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/container.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp_assert.h
+./mibgroup/testhandler.lo: ../include/net-snmp/version.h
+./mibgroup/testhandler.lo: ../include/net-snmp/session_api.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp_transport.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp_service.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/ucd_compat.h
+./mibgroup/testhandler.lo: ../include/net-snmp/pdu_api.h
+./mibgroup/testhandler.lo: ../include/net-snmp/mib_api.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/mib.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/parse.h
+./mibgroup/testhandler.lo: ../include/net-snmp/varbind_api.h
+./mibgroup/testhandler.lo: ../include/net-snmp/config_api.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/read_config.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/default_store.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp_parse_args.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp_enum.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/vacm.h
+./mibgroup/testhandler.lo: ../include/net-snmp/output_api.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp_debug.h
+./mibgroup/testhandler.lo: ../include/net-snmp/snmpv3_api.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmpv3.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/transform_oids.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/keytools.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/scapi.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/lcd_time.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmp_secmod.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/snmpusm.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/mib_module_config.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/agent_module_config.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/snmp_agent.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/snmp_vars.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/agent_handler.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/var_struct.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/agent_registry.h
+./mibgroup/testhandler.lo: ../include/net-snmp/library/fd_event_manager.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/ds_agent.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/agent_read_config.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/agent_trap.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/all_helpers.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/instance.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/baby_steps.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/scalar.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/scalar_group.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/watcher.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/multiplexer.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/null.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/debug_handler.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/cache_handler.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/old_api.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/read_only.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/row_merge.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/serialize.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/bulk_to_next.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/mode_end_call.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/table.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/table_data.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/table_dataset.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/table_tdata.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/table_iterator.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/table_container.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/table_array.h
+./mibgroup/testhandler.lo: ../include/net-snmp/agent/mfd.h
+./mibgroup/testhandler.lo: ./mibgroup/testhandler.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/net-snmp-config.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/system/linux.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/system/sysv.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/system/generic.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/machine/generic.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/net-snmp-includes.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/definitions.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/types.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp_api.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/asn1.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp_impl.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp-tc.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/utilities.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp_client.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/system.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/tools.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/int64.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/mt_support.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp_alarm.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/callback.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/data_list.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/oid_stash.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/check_varbind.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/container.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/factory.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp_logging.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/container_binary_array.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/container_list_ssll.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/container_iterator.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/container.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp_assert.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/version.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/session_api.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp_transport.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp_service.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/ucd_compat.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/pdu_api.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/mib_api.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/mib.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/parse.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/varbind_api.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/config_api.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/read_config.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/default_store.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp_parse_args.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp_enum.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/vacm.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/output_api.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp_debug.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/snmpv3_api.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmpv3.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/transform_oids.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/keytools.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/scapi.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/lcd_time.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmp_secmod.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/snmpusm.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/mib_module_config.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/agent_module_config.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/snmp_agent.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/snmp_vars.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/agent_handler.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/var_struct.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/agent_registry.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/library/fd_event_manager.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/ds_agent.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/agent_read_config.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/agent_trap.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/all_helpers.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/instance.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/baby_steps.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/scalar.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/scalar_group.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/watcher.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/multiplexer.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/null.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/debug_handler.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/cache_handler.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/old_api.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/read_only.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/row_merge.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/serialize.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/bulk_to_next.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/mode_end_call.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/table.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/table_data.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/table_dataset.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/table_tdata.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/table_iterator.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/table_container.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/table_array.h
+./mibgroup/util_funcs.lo: ../include/net-snmp/agent/mfd.h mibgroup/struct.h
+./mibgroup/util_funcs.lo: ./mibgroup/util_funcs.h
+./mibgroup/util_funcs.lo: ./mibgroup/utilities/execute.h
+./mibgroup/util_funcs.lo: ./mibgroup/ucd-snmp/errormib.h
+./mibgroup/util_funcs.lo: ../agent/mibgroup/mibdefs.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/net-snmp-config.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/system/linux.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/system/sysv.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/system/generic.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/machine/generic.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/net-snmp-includes.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/definitions.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/types.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp_api.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/asn1.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp_impl.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp-tc.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/utilities.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp_client.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/system.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/tools.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/int64.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/mt_support.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp_alarm.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/callback.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/data_list.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/oid_stash.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/check_varbind.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/container.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/factory.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp_logging.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/container_binary_array.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/container_list_ssll.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/container_iterator.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/container.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp_assert.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/version.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/session_api.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp_transport.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp_service.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmpCallbackDomain.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmpUnixDomain.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmpUDPDomain.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmpTCPDomain.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmpIPXDomain.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/ucd_compat.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/pdu_api.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/mib_api.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/mib.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/parse.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/varbind_api.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/config_api.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/read_config.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/default_store.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp_parse_args.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp_enum.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/vacm.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/output_api.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp_debug.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/snmpv3_api.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmpv3.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/transform_oids.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/keytools.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/scapi.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/lcd_time.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmp_secmod.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmpv3-security-includes.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/snmpusm.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/mib_module_config.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/agent_module_config.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/snmp_agent.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/snmp_vars.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/agent_handler.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/var_struct.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/agent_registry.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/library/fd_event_manager.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/ds_agent.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/agent_read_config.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/agent_trap.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/all_helpers.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/instance.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/baby_steps.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/scalar.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/scalar_group.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/watcher.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/multiplexer.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/null.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/debug_handler.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/cache_handler.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/old_api.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/read_only.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/row_merge.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/serialize.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/bulk_to_next.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/mode_end_call.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/table.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/table_data.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/table_dataset.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/table_tdata.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/table_iterator.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/table_container.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/table_array.h
+./mibgroup/winExtDLL.lo: ../include/net-snmp/agent/mfd.h
+./mibgroup/winExtDLL.lo: ./mibgroup/util_funcs.h mibgroup/struct.h
+./mibgroup/winExtDLL.lo: ./mibgroup/winExtDLL.h
diff --git a/cleopatre/application/spidnetsnmp/agent/Makefile.in b/cleopatre/application/spidnetsnmp/agent/Makefile.in
new file mode 100644
index 0000000000..4c8bc5189f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/Makefile.in
@@ -0,0 +1,186 @@
+#
+# Makefile for snmpd
+#
+
+top_builddir = ..
+
+# use GNU vpath, if available, to only set a path for source and headers
+# VPATH will pick up objects too, which is bad if you are sharing a
+# source dir...
+@GNU_vpath@ %.h $(srcdir)
+@GNU_vpath@ %.c $(srcdir)
+# fallback to regular VPATH for non-gnu...
+@NON_GNU_VPATH@ $(srcdir)
+
+#
+# what to install
+#
+SUBDIRS=helpers mibgroup
+
+INSTALLSBINPROGS= @SNMPD@
+INSTALLLIBS = libnetsnmpagent.$(LIB_EXTENSION)$(LIB_VERSION)
+INSTALLPOSTLIBS = libnetsnmpmibs.$(LIB_EXTENSION)$(LIB_VERSION)
+
+INCLUDESUBDIR=agent
+INCLUDESUBDIRHEADERS=agent_read_config.h \
+ agent_registry.h \
+ agent_index.h \
+ agent_trap.h \
+ auto_nlist.h \
+ ds_agent.h \
+ snmp_agent.h \
+ snmp_vars.h \
+ var_struct.h \
+ agent_handler.h \
+ net-snmp-agent-includes.h \
+ mib_modules.h \
+ agent_callbacks.h
+
+INSTALLBUILTSUBDIRHEADERS=../include/net-snmp/agent/mib_module_config.h \
+ ../include/net-snmp/agent/agent_module_config.h \
+ mibgroup/mib_module_includes.h
+INSTALLBUILTSUBDIR=agent
+
+INCLUDEMIBGROUPDIR=agent/mibgroup
+INCLUDEMIBGROUPDIRHEADERS=util_funcs.h
+
+OTHERINSTALL=installmibgroupheaders @EMBEDPERLINSTALL@
+OTHERUNINSTALL=@EMBEDPERLUNINSTALL@
+
+# XXX: need to install these They're really UCD specific, however.
+BROKEINSTALL= \
+ mibgroup/struct.h \
+ mibgroup/util_funcs.h \
+ mibgroup/mibincl.h \
+ mibgroup/ucd-snmp/dlmod.h \
+ mibgroup/utilities/execute.h \
+ mibgroup/header_complex.h
+
+INSTALLUCDHEADERS= \
+ agent_index.h \
+ agent_read_config.h \
+ agent_registry.h \
+ agent_trap.h \
+ auto_nlist.h \
+ ds_agent.h \
+ header_complex.h \
+ mibincl.h \
+ snmp_agent.h \
+ ucd-snmp-includes.h \
+ ucd-snmp-agent-includes.h \
+ util_funcs.h \
+ var_struct.h
+
+#
+# how to build it info
+#
+USELIBS = ../snmplib/libnetsnmp.$(LIB_EXTENSION)$(LIB_VERSION)
+HELPERLIB = helpers/libnetsnmphelpers.$(LIB_EXTENSION)$(LIB_VERSION)
+AGENTLIB = libnetsnmpagent.$(LIB_EXTENSION)$(LIB_VERSION)
+MIBLIB = libnetsnmpmibs.$(LIB_EXTENSION)$(LIB_VERSION)
+
+LOCAL_LIBS = -L../snmplib/.libs -L../snmplib -L./.libs -L./helpers/.libs -L./helpers
+LAGENTLIBS = @LAGENTLIBS@
+LMIBLIBS = @LMIBLIBS@
+PERLLDOPTS_FOR_APPS = @PERLLDOPTS_FOR_APPS@
+PERLLDOPTS_FOR_LIBS = @PERLLDOPTS_FOR_LIBS@
+LIBS = $(USELIBS) @AGENTLIBS@ $(PERLLDOPTS_FOR_APPS)
+OUR_AGENT_LIBS = $(AGENTLIB) $(HELPERLIB) $(MIBLIB) $(LIBS) @DLLIBS@
+CPPFLAGS = $(TOP_INCLUDES) -I. $(AGENT_INCLUDES) $(MIBGROUP_INCLUDES) \
+ $(SNMPLIB_INCLUDES) @CPPFLAGS@
+
+
+#
+# Objects
+#
+
+# libnetsnmpmibs objects.
+@mibgroup_list_lo@
+@mibgroup_list_o@
+@agentgroup_list_lo@
+@agentgroup_list_o@
+LMIBOBJS = $(mibgroup_list_lo) mib_modules.lo auto_nlist.lo
+MIBOBJS = $(mibgroup_list_o) mib_modules.o auto_nlist.o
+
+# libnetsnmpagent objects
+LIBAGENTOBJS=snmp_agent.o snmp_vars.o agent_read_config.o \
+ agent_registry.o agent_index.o agent_trap.o kernel.o \
+ agent_handler.o $(agentgroup_list_o) @OTHERAGENTLIBOBJS@
+LLIBAGENTOBJS=snmp_agent.lo snmp_vars.lo agent_read_config.lo \
+ agent_registry.lo agent_index.lo agent_trap.lo kernel.lo \
+ agent_handler.lo $(agentgroup_list_lo) @OTHERAGENTLIBLOBJS@
+
+# The agent objects.
+AGENTOBJS=snmpd.o @other_agentobjs@
+LAGENTOBJS=snmpd.lo @other_lagentobjs@
+
+#
+# Define OBJS and LOBJS for clean target (just this directory)
+#
+OBJS = $(LIBAGENTOBJS) $(AGENTOBJS) mib_modules.o auto_nlist.o
+LOBJS = $(LLIBAGENTOBJS) $(LAGENTOBJS) mib_modules.lo auto_nlist.lo
+
+
+all: agentlib subdirs miblib $(INSTALLBINPROGS) $(INSTALLSBINPROGS)
+
+#
+# build stuff targets
+#
+getkstat: getkstat.o
+ $(CC) $(CFLAGS) -o $@ $? $(LOCAL_LIBS) $(LIBS)
+
+getkstat.o: mibgroup/kernel_sunos5.c
+ $(CC) $(CFLAGS) -o $@ -D_GETKSTAT_TEST -DDODEBUG -c $?
+
+getmibstat: getmibstat.o
+ $(CC) $(CFLAGS) -o $@ $? $(LOCAL_LIBS) $(LIBS)
+
+getmibstat.o: mibgroup/kernel_sunos5.c
+ $(CC) $(CFLAGS) -o $@ -D_GETMIBSTAT_TEST -DDODEBUG -c $?
+
+snmpd$(EXEEXT): ${LAGENTOBJS} $(USELIBS) $(AGENTLIB) $(HELPERLIB) $(MIBLIB) $(LIBTARG)
+ $(LINK) $(CFLAGS) -o $@ ${LAGENTOBJS} $(LOCAL_LIBS) ${LDFLAGS} ${OUR_AGENT_LIBS}
+
+
+libnetsnmpagent.$(LIB_EXTENSION)$(LIB_VERSION): ${LLIBAGENTOBJS} $(USELIBS)
+ $(LIB_LD_CMD) $(AGENTLIB) ${LLIBAGENTOBJS} $(USELIBS) ${LAGENTLIBS} $(LDFLAGS) $(PERLLDOPTS_FOR_LIBS) $(LIB_LD_LIBS)
+ $(RANLIB) $(AGENTLIB)
+
+libnetsnmpmibs.$(LIB_EXTENSION)$(LIB_VERSION): ${LMIBOBJS} $(HELPERLIB) $(AGENTLIB) $(USELIBS)
+ $(LIB_LD_CMD) $(MIBLIB) ${LMIBOBJS} $(HELPERLIB) $(AGENTLIB) $(USELIBS) ${LMIBLIBS} $(LDFLAGS) $(LIB_LD_LIBS)
+ $(RANLIB) $(MIBLIB)
+
+agentlib: $(AGENTLIB)
+
+miblib: $(MIBLIB)
+
+libs: $(INSTALLLIBS)
+
+embedperlinstall:
+ @$(SHELL) $(srcdir)/../mkinstalldirs $(INSTALL_PREFIX)$(snmplibdir)
+ @$(INSTALL_DATA) $(srcdir)/snmp_perl.pl $(INSTALL_PREFIX)$(snmplibdir)/snmp_perl.pl
+ @echo "install: installed snmp_perl.pl in $(INSTALL_PREFIX)$(snmplibdir)"
+
+embedperluninstall:
+ @rm -f $(INSTALL_PREFIX)$(snmplibdir)/snmp_perl.pl
+ @echo "removed snmp_perl.pl from $(INSTALL_PREFIX)$(snmplibdir)"
+
+installmibgroupheaders:
+ @if test "$(INCLUDEMIBGROUPDIRHEADERS)" != "" ; then \
+ echo creating directory $(INSTALL_PREFIX)$(includedir)/agent ; \
+ it="$(INCLUDEMIBGROUPDIRHEADERS)" ; \
+ $(SHELL) $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$(includedir)/agent ; \
+ for i in $$it ; do \
+ $(INSTALL_DATA) $(top_srcdir)/$(INCLUDEMIBGROUPDIR)/$$i $(INSTALL_PREFIX)$(includedir)/agent ; \
+ echo "installing $$i in $(INSTALL_PREFIX)$(includedir)/agent" ; \
+ done \
+ fi
+
+@module_list_deps@
+@agent_module_list_deps@
+@mib_module_list_deps@
+
+mib_modules.lo: mibgroup/mib_module_inits.h
+#
+# dependency for snmplib object. it's here because the headers listed
+# are relative to the agent directory.
diff --git a/cleopatre/application/spidnetsnmp/agent/agent_handler.c b/cleopatre/application/spidnetsnmp/agent/agent_handler.c
new file mode 100644
index 0000000000..bddda10ee6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/agent_handler.c
@@ -0,0 +1,1080 @@
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+#include <net-snmp/net-snmp-config.h>
+
+#include <sys/types.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/bulk_to_next.h>
+
+
+static netsnmp_mib_handler *_clone_handler(netsnmp_mib_handler *it);
+
+/***********************************************************************/
+/*
+ * New Handler based API
+ */
+/***********************************************************************/
+/** @defgroup handler Net-SNMP Agent handler and extensibility API
+ * @ingroup agent
+ *
+ * The basic theory goes something like this: In the past, with the
+ * original mib module api (which derived from the original CMU SNMP
+ * code) the underlying mib modules were passed very little
+ * information (only the truly most basic information about a
+ * request). This worked well at the time but in todays world of
+ * subagents, device instrumentation, low resource consumption, etc,
+ * it just isn't flexible enough. "handlers" are here to fix all that.
+ *
+ * With the rewrite of the agent internals for the net-snmp 5.0
+ * release, we introduce a modular calling scheme that allows agent
+ * modules to be written in a very flexible manner, and more
+ * importantly allows reuse of code in a decent way (and without the
+ * memory and speed overheads of OO languages like C++).
+ *
+ * Functionally, the notion of what a handler does is the same as the
+ * older api: A handler is @link netsnmp_create_handler() created@endlink and
+ * then @link netsnmp_register_handler() registered@endlink with the main
+ * agent at a given OID in the OID tree and gets called any time a
+ * request is made that it should respond to. You probably should
+ * use one of the convenience helpers instead of doing anything else
+ * yourself though:
+ *
+ * Most importantly, though, is that the handlers are built on the
+ * notion of modularity and reuse. Specifically, rather than do all
+ * the really hard work (like parsing table indexes out of an
+ * incoming oid request) in each module, the API is designed to make
+ * it easy to write "helper" handlers that merely process some aspect
+ * of the request before passing it along to the final handler that
+ * returns the real answer. Most people will want to make use of the
+ * @link instance instance@endlink, @link table table@endlink, @link
+ * table_iterator table_iterator@endlink, @link table_data
+ * table_data@endlink, or @link table_dataset table_dataset@endlink
+ * helpers to make their life easier. These "helpers" interpert
+ * important aspects of the request and pass them on to you.
+ *
+ * For instance, the @link table table@endlink helper is designed to
+ * hand you a list of extracted index values from an incoming
+ * request. THe @link table_iterator table_iterator@endlink helper
+ * is built on top of the table helper, and is designed to help you
+ * iterate through data stored elsewhere (like in a kernel) that is
+ * not in OID lexographical order (ie, don't write your own index/oid
+ * sorting routine, use this helper instead). The beauty of the
+ * @link table_iterator table_iterator helper@endlink, as well as the @link
+ * instance instance@endlink helper is that they take care of the complex
+ * GETNEXT processing entirely for you and hand you everything you
+ * need to merely return the data as if it was a GET request. Much
+ * less code and hair pulling. I've pulled all my hair out to help
+ * you so that only one of us has to be bald.
+ *
+ * @{
+ */
+
+/** creates a netsnmp_mib_handler structure given a name and a access method.
+ * The returned handler should then be @link netsnmp_register_handler()
+ * registered.@endlink
+ *
+ * @param name is the handler name and is copied then assigned to
+ * netsnmp_mib_handler->handler_name
+ *
+ * @param handler_access_method is a function pointer used as the access
+ * method for this handler registration instance for whatever required
+ * needs.
+ *
+ * @return a pointer to a populated netsnmp_mib_handler struct to be
+ * registered
+ *
+ * @see netsnmp_create_handler_registration()
+ * @see netsnmp_register_handler()
+ */
+netsnmp_mib_handler *
+netsnmp_create_handler(const char *name,
+ Netsnmp_Node_Handler * handler_access_method)
+{
+ netsnmp_mib_handler *ret = SNMP_MALLOC_TYPEDEF(netsnmp_mib_handler);
+ if (ret) {
+ ret->access_method = handler_access_method;
+ if (NULL != name) {
+ ret->handler_name = strdup(name);
+ if (NULL == ret->handler_name)
+ SNMP_FREE(ret);
+ }
+ }
+ return ret;
+}
+
+/** creates a handler registration structure given a name, a
+ * access_method function, a registration location oid and the modes
+ * the handler supports. If modes == 0, then modes will automatically
+ * be set to the default value of only HANDLER_CAN_DEFAULT, which is
+ * by default read-only GET and GETNEXT requests. A hander which supports
+ * sets but not row creation should set us a mode of HANDLER_CAN_SET_ONLY.
+ * @note This ends up calling netsnmp_create_handler(name, handler_access_method)
+ * @param name is the handler name and is copied then assigned to
+ * netsnmp_handler_registration->handlerName.
+ *
+ * @param handler is a function pointer used as the access
+ * method for this handler registration instance for whatever required
+ * needs.
+ *
+ * @param reg_oid is the registration location oid.
+ *
+ * @param reg_oid_len is the length of reg_oid, can use the macro,
+ * OID_LENGTH
+ *
+ * @param modes is used to configure read/write access. If modes == 0,
+ * then modes will automatically be set to the default
+ * value of only HANDLER_CAN_DEFAULT, which is by default read-only GET
+ * and GETNEXT requests. The other two mode options are read only,
+ * HANDLER_CAN_RONLY, and read/write, HANDLER_CAN_RWRITE.
+ *
+ * - HANDLER_CAN_GETANDGETNEXT
+ * - HANDLER_CAN_SET
+ * - HANDLER_CAN_GETBULK
+ *
+ * - HANDLER_CAN_RONLY (HANDLER_CAN_GETANDGETNEXT)
+ * - HANDLER_CAN_RWRITE (HANDLER_CAN_GETANDGETNEXT |
+ * HANDLER_CAN_SET)
+ * - HANDLER_CAN_DEFAULT HANDLER_CAN_RONLY
+ *
+ * @return Returns a pointer to a netsnmp_handler_registration struct.
+ * NULL is returned only when memory could not be allocated for the
+ * netsnmp_handler_registration struct.
+ *
+ *
+ * @see netsnmp_create_handler()
+ * @see netsnmp_register_handler()
+ */
+netsnmp_handler_registration *
+netsnmp_handler_registration_create(const char *name,
+ netsnmp_mib_handler *handler,
+ oid * reg_oid, size_t reg_oid_len,
+ int modes)
+{
+ netsnmp_handler_registration *the_reg;
+ the_reg = SNMP_MALLOC_TYPEDEF(netsnmp_handler_registration);
+ if (!the_reg)
+ return NULL;
+
+ if (modes)
+ the_reg->modes = modes;
+ else
+ the_reg->modes = HANDLER_CAN_DEFAULT;
+
+ the_reg->handler = handler;
+ the_reg->priority = DEFAULT_MIB_PRIORITY;
+ if (name)
+ the_reg->handlerName = strdup(name);
+ memdup((u_char **) & the_reg->rootoid, (const u_char *) reg_oid,
+ reg_oid_len * sizeof(oid));
+ the_reg->rootoid_len = reg_oid_len;
+ return the_reg;
+}
+
+netsnmp_handler_registration *
+netsnmp_create_handler_registration(const char *name,
+ Netsnmp_Node_Handler *
+ handler_access_method, oid * reg_oid,
+ size_t reg_oid_len, int modes)
+{
+ return
+ netsnmp_handler_registration_create(name,
+ netsnmp_create_handler(name, handler_access_method),
+ reg_oid, reg_oid_len, modes);
+}
+
+/** register a handler, as defined by the netsnmp_handler_registration pointer. */
+int
+netsnmp_register_handler(netsnmp_handler_registration *reginfo)
+{
+ netsnmp_mib_handler *handler;
+ int flags = 0;
+
+ if (reginfo == NULL) {
+ snmp_log(LOG_ERR, "netsnmp_register_handler() called illegally\n");
+ netsnmp_assert(reginfo != NULL);
+ return SNMP_ERR_GENERR;
+ }
+
+ DEBUGIF("handler::register") {
+ DEBUGMSGTL(("handler::register", "Registering %s (", reginfo->handlerName));
+ for (handler = reginfo->handler; handler; handler = handler->next) {
+ DEBUGMSG(("handler::register", "::%s", handler->handler_name));
+ }
+
+ DEBUGMSG(("handler::register", ") at "));
+ if (reginfo->rootoid && reginfo->range_subid) {
+ DEBUGMSGOIDRANGE(("handler::register", reginfo->rootoid,
+ reginfo->rootoid_len, reginfo->range_subid,
+ reginfo->range_ubound));
+ } else if (reginfo->rootoid) {
+ DEBUGMSGOID(("handler::register", reginfo->rootoid,
+ reginfo->rootoid_len));
+ } else {
+ DEBUGMSG(("handler::register", "[null]"));
+ }
+ DEBUGMSG(("handler::register", "\n"));
+ }
+
+ /*
+ * don't let them register for absolutely nothing. Probably a mistake
+ */
+ if (0 == reginfo->modes) {
+ reginfo->modes = HANDLER_CAN_DEFAULT;
+ snmp_log(LOG_WARNING, "no registration modes specified for %s. "
+ "Defaulting to 0x%x\n", reginfo->handlerName, reginfo->modes);
+ }
+
+ /*
+ * for handlers that can't GETBULK, force a conversion handler on them
+ */
+ if (!(reginfo->modes & HANDLER_CAN_GETBULK)) {
+ netsnmp_inject_handler(reginfo,
+ netsnmp_get_bulk_to_next_handler());
+ }
+
+ for (handler = reginfo->handler; handler; handler = handler->next) {
+ if (handler->flags & MIB_HANDLER_INSTANCE)
+ flags = FULLY_QUALIFIED_INSTANCE;
+ }
+
+ return netsnmp_register_mib(reginfo->handlerName,
+ NULL, 0, 0,
+ reginfo->rootoid, reginfo->rootoid_len,
+ reginfo->priority,
+ reginfo->range_subid,
+ reginfo->range_ubound, NULL,
+ reginfo->contextName, reginfo->timeout, flags,
+ reginfo, 1);
+}
+
+/** unregister a handler, as defined by the netsnmp_handler_registration pointer. */
+int
+netsnmp_unregister_handler(netsnmp_handler_registration *reginfo)
+{
+ return unregister_mib_context(reginfo->rootoid, reginfo->rootoid_len,
+ reginfo->priority,
+ reginfo->range_subid, reginfo->range_ubound,
+ reginfo->contextName);
+}
+
+/** register a handler, as defined by the netsnmp_handler_registration pointer. */
+int
+netsnmp_register_handler_nocallback(netsnmp_handler_registration *reginfo)
+{
+ netsnmp_mib_handler *handler;
+ if (reginfo == NULL) {
+ snmp_log(LOG_ERR, "netsnmp_register_handler_nocallback() called illegally\n");
+ netsnmp_assert(reginfo != NULL);
+ return SNMP_ERR_GENERR;
+ }
+ DEBUGIF("handler::register") {
+ DEBUGMSGTL(("handler::register",
+ "Registering (with no callback) "));
+ for (handler = reginfo->handler; handler; handler = handler->next) {
+ DEBUGMSG(("handler::register", "::%s", handler->handler_name));
+ }
+
+ DEBUGMSG(("handler::register", " at "));
+ if (reginfo->rootoid && reginfo->range_subid) {
+ DEBUGMSGOIDRANGE(("handler::register", reginfo->rootoid,
+ reginfo->rootoid_len, reginfo->range_subid,
+ reginfo->range_ubound));
+ } else if (reginfo->rootoid) {
+ DEBUGMSGOID(("handler::register", reginfo->rootoid,
+ reginfo->rootoid_len));
+ } else {
+ DEBUGMSG(("handler::register", "[null]"));
+ }
+ DEBUGMSG(("handler::register", "\n"));
+ }
+
+ /*
+ * don't let them register for absolutely nothing. Probably a mistake
+ */
+ if (0 == reginfo->modes) {
+ reginfo->modes = HANDLER_CAN_DEFAULT;
+ }
+
+ return netsnmp_register_mib(reginfo->handler->handler_name,
+ NULL, 0, 0,
+ reginfo->rootoid, reginfo->rootoid_len,
+ reginfo->priority,
+ reginfo->range_subid,
+ reginfo->range_ubound, NULL,
+ reginfo->contextName, reginfo->timeout, 0,
+ reginfo, 0);
+}
+
+/** inject a new handler into the calling chain of the handlers
+ definedy by the netsnmp_handler_registration pointer. The new
+ handler is injected after the before_what handler, or if NULL at
+ the top of the list and hence will be the new handler to be called
+ first.*/
+int
+netsnmp_inject_handler_before(netsnmp_handler_registration *reginfo,
+ netsnmp_mib_handler *handler,
+ const char *before_what)
+{
+ netsnmp_mib_handler *handler2 = handler;
+
+ if (handler == NULL || reginfo == NULL) {
+ snmp_log(LOG_ERR, "netsnmp_inject_handler() called illegally\n");
+ netsnmp_assert(reginfo != NULL);
+ netsnmp_assert(handler != NULL);
+ return SNMP_ERR_GENERR;
+ }
+ while (handler2->next) {
+ handler2 = handler2->next; /* Find the end of a handler sub-chain */
+ }
+ if (reginfo->handler == NULL) {
+ DEBUGMSGTL(("handler:inject", "injecting %s\n", handler->handler_name));
+ }
+ else {
+ DEBUGMSGTL(("handler:inject", "injecting %s before %s\n",
+ handler->handler_name, reginfo->handler->handler_name));
+ }
+ if (before_what) {
+ netsnmp_mib_handler *nexth, *prevh = NULL;
+ if (reginfo->handler == NULL) {
+ snmp_log(LOG_ERR, "no handler to inject before\n");
+ return SNMP_ERR_GENERR;
+ }
+ for(nexth = reginfo->handler; nexth;
+ prevh = nexth, nexth = nexth->next) {
+ if (strcmp(nexth->handler_name, before_what) == 0)
+ break;
+ }
+ if (!nexth)
+ return SNMP_ERR_GENERR;
+ if (prevh) {
+ /* after prevh and before nexth */
+ prevh->next = handler;
+ handler2->next = nexth;
+ handler->prev = prevh;
+ nexth->prev = handler2;
+ return SNMPERR_SUCCESS;
+ }
+ /* else we're first, which is what we do next anyway so fall through */
+ }
+ handler2->next = reginfo->handler;
+ if (reginfo->handler)
+ reginfo->handler->prev = handler2;
+ reginfo->handler = handler;
+ return SNMPERR_SUCCESS;
+}
+
+/** inject a new handler into the calling chain of the handlers
+ definedy by the netsnmp_handler_registration pointer. The new handler is
+ injected at the top of the list and hence will be the new handler
+ to be called first.*/
+int
+netsnmp_inject_handler(netsnmp_handler_registration *reginfo,
+ netsnmp_mib_handler *handler)
+{
+ return netsnmp_inject_handler_before(reginfo, handler, NULL);
+}
+
+/** calls a handler with with appropriate NULL checking of arguments, etc. */
+NETSNMP_INLINE int
+netsnmp_call_handler(netsnmp_mib_handler *next_handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ Netsnmp_Node_Handler *nh;
+ int ret;
+
+ if (next_handler == NULL || reginfo == NULL || reqinfo == NULL ||
+ requests == NULL) {
+ snmp_log(LOG_ERR, "netsnmp_call_handler() called illegally\n");
+ netsnmp_assert(next_handler != NULL);
+ netsnmp_assert(reqinfo != NULL);
+ netsnmp_assert(reginfo != NULL);
+ netsnmp_assert(requests != NULL);
+ return SNMP_ERR_GENERR;
+ }
+
+ do {
+ nh = next_handler->access_method;
+ if (!nh) {
+ if (next_handler->next) {
+ snmp_log(LOG_ERR, "no access method specified in handler %s.",
+ next_handler->handler_name);
+ return SNMP_ERR_GENERR;
+ }
+ /*
+ * The final handler registration in the chain may well not need
+ * to include a handler routine, if the processing of this object
+ * is handled completely by the agent toolkit helpers.
+ */
+ return SNMP_ERR_NOERROR;
+ }
+
+ DEBUGMSGTL(("handler:calling", "calling handler %s for mode %s\n",
+ next_handler->handler_name,
+ se_find_label_in_slist("agent_mode", reqinfo->mode)));
+
+ /*
+ * XXX: define acceptable return statuses
+ */
+ ret = (*nh) (next_handler, reginfo, reqinfo, requests);
+
+ DEBUGMSGTL(("handler:returned", "handler %s returned %d\n",
+ next_handler->handler_name, ret));
+
+ if (! (next_handler->flags & MIB_HANDLER_AUTO_NEXT))
+ break;
+
+ /*
+ * did handler signal that it didn't want auto next this time around?
+ */
+ if(next_handler->flags & MIB_HANDLER_AUTO_NEXT_OVERRIDE_ONCE) {
+ next_handler->flags &= ~MIB_HANDLER_AUTO_NEXT_OVERRIDE_ONCE;
+ break;
+ }
+
+ next_handler = next_handler->next;
+
+ } while(next_handler);
+
+ return ret;
+}
+
+/** @internal
+ * calls all the handlers for a given mode.
+ */
+int
+netsnmp_call_handlers(netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_request_info *request;
+ int status;
+
+ if (reginfo == NULL || reqinfo == NULL || requests == NULL) {
+ snmp_log(LOG_ERR, "netsnmp_call_handlers() called illegally\n");
+ netsnmp_assert(reqinfo != NULL);
+ netsnmp_assert(reginfo != NULL);
+ netsnmp_assert(requests != NULL);
+ return SNMP_ERR_GENERR;
+ }
+
+ if (reginfo->handler == NULL) {
+ snmp_log(LOG_ERR, "no handler specified.");
+ return SNMP_ERR_GENERR;
+ }
+
+ switch (reqinfo->mode) {
+ case MODE_GETBULK:
+ case MODE_GET:
+ case MODE_GETNEXT:
+ if (!(reginfo->modes & HANDLER_CAN_GETANDGETNEXT))
+ return SNMP_ERR_NOERROR; /* legal */
+ break;
+
+ case MODE_SET_RESERVE1:
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ if (!(reginfo->modes & HANDLER_CAN_SET)) {
+ for (; requests; requests = requests->next) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_NOTWRITABLE);
+ }
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+
+ default:
+ snmp_log(LOG_ERR, "unknown mode in netsnmp_call_handlers! bug!\n");
+ return SNMP_ERR_GENERR;
+ }
+ DEBUGMSGTL(("handler:calling", "main handler %s\n",
+ reginfo->handler->handler_name));
+
+ for (request = requests ; request; request = request->next) {
+ request->processed = 0;
+ }
+
+ status = netsnmp_call_handler(reginfo->handler, reginfo, reqinfo, requests);
+
+ return status;
+}
+
+/** calls the next handler in the chain after the current one with
+ with appropriate NULL checking, etc. */
+NETSNMP_INLINE int
+netsnmp_call_next_handler(netsnmp_mib_handler *current,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ if (current == NULL || reginfo == NULL || reqinfo == NULL ||
+ requests == NULL) {
+ snmp_log(LOG_ERR, "netsnmp_call_next_handler() called illegally\n");
+ netsnmp_assert(current != NULL);
+ netsnmp_assert(reginfo != NULL);
+ netsnmp_assert(reqinfo != NULL);
+ netsnmp_assert(requests != NULL);
+ return SNMP_ERR_GENERR;
+ }
+
+ return netsnmp_call_handler(current->next, reginfo, reqinfo, requests);
+}
+
+/** calls the next handler in the chain after the current one with
+ with appropriate NULL checking, etc. */
+NETSNMP_INLINE int
+netsnmp_call_next_handler_one_request(netsnmp_mib_handler *current,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_request_info *request;
+ int ret;
+
+ if (!requests) {
+ snmp_log(LOG_ERR, "netsnmp_call_next_handler_ONE_REQUEST() called illegally\n");
+ netsnmp_assert(requests != NULL);
+ return SNMP_ERR_GENERR;
+ }
+
+ request = requests->next;
+ requests->next = NULL;
+ ret = netsnmp_call_handler(current->next, reginfo, reqinfo, requests);
+ requests->next = request;
+ return ret;
+}
+
+/** free's the resourceses associated with a given handler */
+void
+netsnmp_handler_free(netsnmp_mib_handler *handler)
+{
+ if (handler != NULL) {
+ if (handler->next != NULL) {
+ /** make sure we aren't pointing to ourselves. */
+ netsnmp_assert(handler != handler->next); /* bugs caught: 1 */
+ netsnmp_handler_free(handler->next);
+ handler->next = NULL;
+ }
+ /** XXX : segv here at shutdown if SHUTDOWN_AGENT_CLEANLY
+ * defined. About 30 functions down the stack, starting
+ * in clear_context() -> clear_subtree()
+ */
+ SNMP_FREE(handler->handler_name);
+ SNMP_FREE(handler);
+ }
+}
+
+/** dulpicates a handler and all subsequent handlers
+ * see also _clone_handler
+ */
+netsnmp_mib_handler *
+netsnmp_handler_dup(netsnmp_mib_handler *handler)
+{
+ netsnmp_mib_handler *h = NULL;
+
+ if (handler == NULL) {
+ return NULL;
+ }
+
+ h = _clone_handler(handler);
+
+ if (h != NULL) {
+ h->myvoid = handler->myvoid;
+
+ if (handler->next != NULL) {
+ h->next = netsnmp_handler_dup(handler->next);
+ if (h->next == NULL) {
+ netsnmp_handler_free(h);
+ return NULL;
+ }
+ h->next->prev = h;
+ }
+ h->prev = NULL;
+ return h;
+ }
+ return NULL;
+}
+
+/** free the resources associated with a handler registration object */
+void
+netsnmp_handler_registration_free(netsnmp_handler_registration *reginfo)
+{
+ if (reginfo != NULL) {
+ netsnmp_handler_free(reginfo->handler);
+ SNMP_FREE(reginfo->handlerName);
+ SNMP_FREE(reginfo->contextName);
+ SNMP_FREE(reginfo->rootoid);
+ reginfo->rootoid_len = 0;
+ SNMP_FREE(reginfo);
+ }
+}
+
+/** duplicates the handler registration object */
+netsnmp_handler_registration *
+netsnmp_handler_registration_dup(netsnmp_handler_registration *reginfo)
+{
+ netsnmp_handler_registration *r = NULL;
+
+ if (reginfo == NULL) {
+ return NULL;
+ }
+
+
+ r = (netsnmp_handler_registration *) calloc(1,
+ sizeof
+ (netsnmp_handler_registration));
+
+ if (r != NULL) {
+ r->modes = reginfo->modes;
+ r->priority = reginfo->priority;
+ r->range_subid = reginfo->range_subid;
+ r->timeout = reginfo->timeout;
+ r->range_ubound = reginfo->range_ubound;
+ r->rootoid_len = reginfo->rootoid_len;
+
+ if (reginfo->handlerName != NULL) {
+ r->handlerName = strdup(reginfo->handlerName);
+ if (r->handlerName == NULL) {
+ netsnmp_handler_registration_free(r);
+ return NULL;
+ }
+ }
+
+ if (reginfo->contextName != NULL) {
+ r->contextName = strdup(reginfo->contextName);
+ if (r->contextName == NULL) {
+ netsnmp_handler_registration_free(r);
+ return NULL;
+ }
+ }
+
+ if (reginfo->rootoid != NULL) {
+ memdup((u_char **) & (r->rootoid),
+ (const u_char *) reginfo->rootoid,
+ reginfo->rootoid_len * sizeof(oid));
+ if (r->rootoid == NULL) {
+ netsnmp_handler_registration_free(r);
+ return NULL;
+ }
+ }
+
+ r->handler = netsnmp_handler_dup(reginfo->handler);
+ if (r->handler == NULL) {
+ netsnmp_handler_registration_free(r);
+ return NULL;
+ }
+ return r;
+ }
+
+ return NULL;
+}
+
+/** creates a cache of information which can be saved for future
+ reference. Use netsnmp_handler_check_cache() later to make sure it's still
+ valid before referencing it in the future. */
+NETSNMP_INLINE netsnmp_delegated_cache *
+netsnmp_create_delegated_cache(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests,
+ void *localinfo)
+{
+ netsnmp_delegated_cache *ret;
+
+ ret = SNMP_MALLOC_TYPEDEF(netsnmp_delegated_cache);
+ if (ret) {
+ ret->transaction_id = reqinfo->asp->pdu->transid;
+ ret->handler = handler;
+ ret->reginfo = reginfo;
+ ret->reqinfo = reqinfo;
+ ret->requests = requests;
+ ret->localinfo = localinfo;
+ }
+ return ret;
+}
+
+/** check's a given cache and returns it if it is still valid (ie, the
+ agent still considers it to be an outstanding request. Returns
+ NULL if it's no longer valid. */
+NETSNMP_INLINE netsnmp_delegated_cache *
+netsnmp_handler_check_cache(netsnmp_delegated_cache *dcache)
+{
+ if (!dcache)
+ return dcache;
+
+ if (netsnmp_check_transaction_id(dcache->transaction_id) ==
+ SNMPERR_SUCCESS)
+ return dcache;
+
+ return NULL;
+}
+
+/** frees a cache once you're finished using it */
+NETSNMP_INLINE void
+netsnmp_free_delegated_cache(netsnmp_delegated_cache *dcache)
+{
+ /*
+ * right now, no extra data is there that needs to be freed
+ */
+ if (dcache)
+ SNMP_FREE(dcache);
+
+ return;
+}
+
+
+/** marks a list of requests as delegated (or not if isdelegaded = 0) */
+void
+netsnmp_handler_mark_requests_as_delegated(netsnmp_request_info *requests,
+ int isdelegated)
+{
+ while (requests) {
+ requests->delegated = isdelegated;
+ requests = requests->next;
+ }
+}
+
+/** add data to a request that can be extracted later by submodules
+ *
+ * @param request the netsnmp request info structure
+ *
+ * @param node this is the data to be added to the linked list
+ * request->parent_data
+ *
+ * @return void
+ *
+ */
+NETSNMP_INLINE void
+netsnmp_request_add_list_data(netsnmp_request_info *request,
+ netsnmp_data_list *node)
+{
+ if (request) {
+ if (request->parent_data)
+ netsnmp_add_list_data(&request->parent_data, node);
+ else
+ request->parent_data = node;
+ }
+}
+
+/** remove data from a request
+ *
+ * @param request the netsnmp request info structure
+ *
+ * @param name this is the name of the previously added data
+ *
+ * @return 0 on successful find-and-delete, 1 otherwise.
+ *
+ */
+NETSNMP_INLINE int
+netsnmp_request_remove_list_data(netsnmp_request_info *request,
+ const char *name)
+{
+ if ((NULL == request) || (NULL ==request->parent_data))
+ return 1;
+
+ return netsnmp_remove_list_node(&request->parent_data, name);
+}
+
+/** extract data from a request that was added previously by a parent module
+ *
+ * @param request the netsnmp request info function
+ *
+ * @param name used to compare against the request->parent_data->name value,
+ * if a match is found request->parent_data->data is returned
+ *
+ * @return a void pointer(request->parent_data->data), otherwise NULL is
+ * returned if request is NULL or request->parent_data is NULL or
+ * request->parent_data object is not found.
+ */
+NETSNMP_INLINE void *
+netsnmp_request_get_list_data(netsnmp_request_info *request,
+ const char *name)
+{
+ if (request)
+ return netsnmp_get_list_data(request->parent_data, name);
+ return NULL;
+}
+
+/** Free the extra data stored in a request */
+NETSNMP_INLINE void
+netsnmp_free_request_data_set(netsnmp_request_info *request)
+{
+ if (request)
+ netsnmp_free_list_data(request->parent_data);
+}
+
+/** Free the extra data stored in a bunch of requests (all data in the chain) */
+NETSNMP_INLINE void
+netsnmp_free_request_data_sets(netsnmp_request_info *request)
+{
+ if (request && request->parent_data) {
+ netsnmp_free_all_list_data(request->parent_data);
+ request->parent_data = NULL;
+ }
+}
+
+/** Returns a handler from a chain based on the name */
+netsnmp_mib_handler *
+netsnmp_find_handler_by_name(netsnmp_handler_registration *reginfo,
+ const char *name)
+{
+ netsnmp_mib_handler *it;
+ for (it = reginfo->handler; it; it = it->next) {
+ if (strcmp(it->handler_name, name) == 0) {
+ return it;
+ }
+ }
+ return NULL;
+}
+
+/** Returns a handler's void * pointer from a chain based on the name.
+ This probably shouldn't be used by the general public as the void *
+ data may change as a handler evolves. Handlers should really
+ advertise some function for you to use instead. */
+void *
+netsnmp_find_handler_data_by_name(netsnmp_handler_registration *reginfo,
+ const char *name)
+{
+ netsnmp_mib_handler *it = netsnmp_find_handler_by_name(reginfo, name);
+ if (it)
+ return it->myvoid;
+ return NULL;
+}
+
+/** clones a mib handler (name, flags and access methods only; not myvoid)
+ * see also netsnmp_handler_dup
+ */
+static netsnmp_mib_handler *
+_clone_handler(netsnmp_mib_handler *it)
+{
+ netsnmp_mib_handler *dup;
+
+ if(NULL == it)
+ return NULL;
+
+ dup = netsnmp_create_handler(it->handler_name, it->access_method);
+ if(NULL != dup)
+ dup->flags = it->flags;
+
+ return dup;
+}
+
+static netsnmp_data_list *handler_reg = NULL;
+
+void
+handler_free_callback(void *free)
+{
+ netsnmp_handler_free((netsnmp_mib_handler *)free);
+}
+
+/** registers a given handler by name so that it can be found easily later.
+ */
+void
+netsnmp_register_handler_by_name(const char *name,
+ netsnmp_mib_handler *handler)
+{
+ netsnmp_add_list_data(&handler_reg,
+ netsnmp_create_data_list(name, (void *) handler,
+ handler_free_callback));
+ DEBUGMSGTL(("handler_registry", "registering helper %s\n", name));
+}
+
+/** clears the entire handler-registration list
+ */
+void
+netsnmp_clear_handler_list(void)
+{
+ DEBUGMSGTL(("agent_handler", "netsnmp_clear_handler_list() called\n"));
+ netsnmp_free_all_list_data(handler_reg);
+ handler_reg = NULL;
+}
+
+/** @internal
+ * injects a handler into a subtree, peers and children when a given
+ * subtrees name matches a passed in name.
+ */
+void
+netsnmp_inject_handler_into_subtree(netsnmp_subtree *tp, const char *name,
+ netsnmp_mib_handler *handler,
+ const char *before_what)
+{
+ netsnmp_subtree *tptr;
+ netsnmp_mib_handler *mh;
+
+ for (tptr = tp; tptr != NULL; tptr = tptr->next) {
+ /* if (tptr->children) {
+ netsnmp_inject_handler_into_subtree(tptr->children,name,handler);
+ } */
+ if (strcmp(tptr->label_a, name) == 0) {
+ DEBUGMSGTL(("injectHandler", "injecting handler %s into %s\n",
+ handler->handler_name, tptr->label_a));
+ netsnmp_inject_handler_before(tptr->reginfo, _clone_handler(handler),
+ before_what);
+ } else if (tptr->reginfo != NULL &&
+ tptr->reginfo->handlerName != NULL &&
+ strcmp(tptr->reginfo->handlerName, name) == 0) {
+ DEBUGMSGTL(("injectHandler", "injecting handler into %s/%s\n",
+ tptr->label_a, tptr->reginfo->handlerName));
+ netsnmp_inject_handler_before(tptr->reginfo, _clone_handler(handler),
+ before_what);
+ } else {
+ for (mh = tptr->reginfo->handler; mh != NULL; mh = mh->next) {
+ if (mh->handler_name && strcmp(mh->handler_name, name) == 0) {
+ DEBUGMSGTL(("injectHandler", "injecting handler into %s\n",
+ tptr->label_a));
+ netsnmp_inject_handler_before(tptr->reginfo,
+ _clone_handler(handler),
+ before_what);
+ break;
+ } else {
+ DEBUGMSGTL(("yyyinjectHandler",
+ "not injecting handler into %s\n",
+ mh->handler_name));
+ }
+ }
+ }
+ }
+}
+
+static int doneit = 0;
+/** @internal
+ * parses the "injectHandler" token line.
+ */
+void
+parse_injectHandler_conf(const char *token, char *cptr)
+{
+ char handler_to_insert[256], reg_name[256];
+ subtree_context_cache *stc;
+ netsnmp_mib_handler *handler;
+
+ /*
+ * XXXWWW: ensure instead that handler isn't inserted twice
+ */
+ if (doneit) /* we only do this once without restart the agent */
+ return;
+
+ cptr = copy_nword(cptr, handler_to_insert, sizeof(handler_to_insert));
+ handler = netsnmp_get_list_data(handler_reg, handler_to_insert);
+ if (!handler) {
+ config_perror("no such \"%s\" handler registered.");
+ return;
+ }
+
+ if (!cptr) {
+ config_perror("no INTONAME specified. Can't do insertion.");
+ return;
+ }
+ cptr = copy_nword(cptr, reg_name, sizeof(reg_name));
+
+ for (stc = get_top_context_cache(); stc; stc = stc->next) {
+ DEBUGMSGTL(("injectHandler", "Checking context tree %s (before=%s)\n",
+ stc->context_name, (cptr)?cptr:"null"));
+ netsnmp_inject_handler_into_subtree(stc->first_subtree, reg_name,
+ handler, cptr);
+ }
+}
+
+/** @internal
+ * callback to ensure injectHandler parser doesn't do things twice
+ * @todo replace this with a method to check the handler chain instead.
+ */
+static int
+handler_mark_doneit(int majorID, int minorID,
+ void *serverarg, void *clientarg)
+{
+ doneit = 1;
+ return 0;
+}
+
+/** @internal
+ * register's the injectHandle parser token.
+ */
+void
+netsnmp_init_handler_conf(void)
+{
+ snmpd_register_config_handler("injectHandler",
+ parse_injectHandler_conf,
+ NULL, "injectHandler NAME INTONAME [BEFORE_OTHER_NAME]");
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY,
+ SNMP_CALLBACK_POST_READ_CONFIG,
+ handler_mark_doneit, NULL);
+
+ se_add_pair_to_slist("agent_mode", strdup("GET"), MODE_GET);
+ se_add_pair_to_slist("agent_mode", strdup("GETNEXT"), MODE_GETNEXT);
+ se_add_pair_to_slist("agent_mode", strdup("GETBULK"), MODE_GETBULK);
+ se_add_pair_to_slist("agent_mode", strdup("SET_BEGIN"),
+ MODE_SET_BEGIN);
+ se_add_pair_to_slist("agent_mode", strdup("SET_RESERVE1"),
+ MODE_SET_RESERVE1);
+ se_add_pair_to_slist("agent_mode", strdup("SET_RESERVE2"),
+ MODE_SET_RESERVE2);
+ se_add_pair_to_slist("agent_mode", strdup("SET_ACTION"),
+ MODE_SET_ACTION);
+ se_add_pair_to_slist("agent_mode", strdup("SET_COMMIT"),
+ MODE_SET_COMMIT);
+ se_add_pair_to_slist("agent_mode", strdup("SET_FREE"), MODE_SET_FREE);
+ se_add_pair_to_slist("agent_mode", strdup("SET_UNDO"), MODE_SET_UNDO);
+
+ se_add_pair_to_slist("babystep_mode", strdup("pre-request"),
+ MODE_BSTEP_PRE_REQUEST);
+ se_add_pair_to_slist("babystep_mode", strdup("object_lookup"),
+ MODE_BSTEP_OBJECT_LOOKUP);
+ se_add_pair_to_slist("babystep_mode", strdup("check_value"),
+ MODE_BSTEP_CHECK_VALUE);
+ se_add_pair_to_slist("babystep_mode", strdup("row_create"),
+ MODE_BSTEP_ROW_CREATE);
+ se_add_pair_to_slist("babystep_mode", strdup("undo_setup"),
+ MODE_BSTEP_UNDO_SETUP);
+ se_add_pair_to_slist("babystep_mode", strdup("set_value"),
+ MODE_BSTEP_SET_VALUE);
+ se_add_pair_to_slist("babystep_mode", strdup("check_consistency"),
+ MODE_BSTEP_CHECK_CONSISTENCY);
+ se_add_pair_to_slist("babystep_mode", strdup("undo_set"),
+ MODE_BSTEP_UNDO_SET);
+ se_add_pair_to_slist("babystep_mode", strdup("commit"),
+ MODE_BSTEP_COMMIT);
+ se_add_pair_to_slist("babystep_mode", strdup("undo_commit"),
+ MODE_BSTEP_UNDO_COMMIT);
+ se_add_pair_to_slist("babystep_mode", strdup("irreversible_commit"),
+ MODE_BSTEP_IRREVERSIBLE_COMMIT);
+ se_add_pair_to_slist("babystep_mode", strdup("undo_cleanup"),
+ MODE_BSTEP_UNDO_CLEANUP);
+ se_add_pair_to_slist("babystep_mode", strdup("post_request"),
+ MODE_BSTEP_POST_REQUEST);
+ se_add_pair_to_slist("babystep_mode", strdup("original"), 0xffff);
+
+ /*
+ * xxx-rks: hmmm.. will this work for modes which are or'd together?
+ * I'm betting not...
+ */
+ se_add_pair_to_slist("handler_can_mode", strdup("GET/GETNEXT"),
+ HANDLER_CAN_GETANDGETNEXT);
+ se_add_pair_to_slist("handler_can_mode", strdup("SET"),
+ HANDLER_CAN_SET);
+ se_add_pair_to_slist("handler_can_mode", strdup("GETBULK"),
+ HANDLER_CAN_GETBULK);
+ se_add_pair_to_slist("handler_can_mode", strdup("BABY_STEP"),
+ HANDLER_CAN_BABY_STEP);
+}
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/agent_index.c b/cleopatre/application/spidnetsnmp/agent/agent_index.c
new file mode 100644
index 0000000000..1cccce09ed
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/agent_index.c
@@ -0,0 +1,860 @@
+/*
+ * agent_index.c
+ *
+ * Maintain a registry of index allocations
+ * (Primarily required for AgentX support,
+ * but it could be more widely useable).
+ */
+
+
+#include <net-snmp/net-snmp-config.h>
+#include <signal.h>
+#if HAVE_STRING_H
+#include <string.h>
+#endif
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <sys/types.h>
+#include <stdio.h>
+#include <fcntl.h>
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/agent_callbacks.h>
+#include <net-snmp/agent/agent_index.h>
+
+#include "snmpd.h"
+#include "mibgroup/struct.h"
+#include <net-snmp/agent/table.h>
+#include <net-snmp/agent/table_iterator.h>
+#include "mib_module_includes.h"
+
+#ifdef USING_AGENTX_SUBAGENT_MODULE
+#include "agentx/subagent.h"
+#include "agentx/client.h"
+#endif
+
+ /*
+ * Initial support for index allocation
+ */
+
+struct snmp_index {
+ netsnmp_variable_list *varbind; /* or pointer to var_list ? */
+ int allocated;
+ netsnmp_session *session;
+ struct snmp_index *next_oid;
+ struct snmp_index *prev_oid;
+ struct snmp_index *next_idx;
+} *snmp_index_head = NULL;
+
+extern netsnmp_session *main_session;
+
+/*
+ * The caller is responsible for free()ing the memory returned by
+ * this function.
+ */
+
+char *
+register_string_index(oid * name, size_t name_len, char *cp)
+{
+ netsnmp_variable_list varbind, *res;
+
+ memset(&varbind, 0, sizeof(netsnmp_variable_list));
+ varbind.type = ASN_OCTET_STR;
+ snmp_set_var_objid(&varbind, name, name_len);
+ if (cp != ANY_STRING_INDEX) {
+ snmp_set_var_value(&varbind, (u_char *) cp, strlen(cp));
+ res = register_index(&varbind, ALLOCATE_THIS_INDEX, main_session);
+ } else {
+ res = register_index(&varbind, ALLOCATE_ANY_INDEX, main_session);
+ }
+
+ if (res == NULL) {
+ return NULL;
+ } else {
+ char *rv = strdup(res->val.string);
+ free(res);
+ return rv;
+ }
+}
+
+int
+register_int_index(oid * name, size_t name_len, int val)
+{
+ netsnmp_variable_list varbind, *res;
+
+ memset(&varbind, 0, sizeof(netsnmp_variable_list));
+ varbind.type = ASN_INTEGER;
+ snmp_set_var_objid(&varbind, name, name_len);
+ varbind.val.string = varbind.buf;
+ if (val != ANY_INTEGER_INDEX) {
+ varbind.val_len = sizeof(long);
+ *varbind.val.integer = val;
+ res = register_index(&varbind, ALLOCATE_THIS_INDEX, main_session);
+ } else {
+ res = register_index(&varbind, ALLOCATE_ANY_INDEX, main_session);
+ }
+
+ if (res == NULL) {
+ return -1;
+ } else {
+ int rv = *(res->val.integer);
+ free(res);
+ return rv;
+ }
+}
+
+/*
+ * The caller is responsible for free()ing the memory returned by
+ * this function.
+ */
+
+netsnmp_variable_list *
+register_oid_index(oid * name, size_t name_len,
+ oid * value, size_t value_len)
+{
+ netsnmp_variable_list varbind;
+
+ memset(&varbind, 0, sizeof(netsnmp_variable_list));
+ varbind.type = ASN_OBJECT_ID;
+ snmp_set_var_objid(&varbind, name, name_len);
+ if (value != ANY_OID_INDEX) {
+ snmp_set_var_value(&varbind, (u_char *) value,
+ value_len * sizeof(oid));
+ return register_index(&varbind, ALLOCATE_THIS_INDEX, main_session);
+ } else {
+ return register_index(&varbind, ALLOCATE_ANY_INDEX, main_session);
+ }
+}
+
+/*
+ * The caller is responsible for free()ing the memory returned by
+ * this function.
+ */
+
+netsnmp_variable_list *
+register_index(netsnmp_variable_list * varbind, int flags,
+ netsnmp_session * ss)
+{
+ netsnmp_variable_list *rv = NULL;
+ struct snmp_index *new_index, *idxptr, *idxptr2;
+ struct snmp_index *prev_oid_ptr, *prev_idx_ptr;
+ int res, res2, i;
+
+ DEBUGMSGTL(("register_index", "register "));
+ DEBUGMSGVAR(("register_index", varbind));
+ DEBUGMSG(("register_index", "for session %08p\n", ss));
+
+#if defined(USING_AGENTX_SUBAGENT_MODULE) && !defined(TESTING)
+ if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_ROLE) == SUB_AGENT) {
+ return (agentx_register_index(ss, varbind, flags));
+ }
+#endif
+ /*
+ * Look for the requested OID entry
+ */
+ prev_oid_ptr = NULL;
+ prev_idx_ptr = NULL;
+ res = 1;
+ res2 = 1;
+ for (idxptr = snmp_index_head; idxptr != NULL;
+ prev_oid_ptr = idxptr, idxptr = idxptr->next_oid) {
+ if ((res = snmp_oid_compare(varbind->name, varbind->name_length,
+ idxptr->varbind->name,
+ idxptr->varbind->name_length)) <= 0)
+ break;
+ }
+
+ /*
+ * Found the OID - now look at the registered indices
+ */
+ if (res == 0 && idxptr) {
+ if (varbind->type != idxptr->varbind->type)
+ return NULL; /* wrong type */
+
+ /*
+ * If we've been asked for an arbitrary new value,
+ * then find the end of the list.
+ * If we've been asked for any arbitrary value,
+ * then look for an unused entry, and use that.
+ * If there aren't any, continue as for new.
+ * Otherwise, locate the given value in the (sorted)
+ * list of already allocated values
+ */
+ if (flags & ALLOCATE_ANY_INDEX) {
+ for (idxptr2 = idxptr; idxptr2 != NULL;
+ prev_idx_ptr = idxptr2, idxptr2 = idxptr2->next_idx) {
+
+ if (flags == ALLOCATE_ANY_INDEX && !(idxptr2->allocated)) {
+ if ((rv =
+ snmp_clone_varbind(idxptr2->varbind)) != NULL) {
+ idxptr2->session = ss;
+ idxptr2->allocated = 1;
+ }
+ return rv;
+ }
+ }
+ } else {
+ for (idxptr2 = idxptr; idxptr2 != NULL;
+ prev_idx_ptr = idxptr2, idxptr2 = idxptr2->next_idx) {
+ switch (varbind->type) {
+ case ASN_INTEGER:
+ res2 =
+ (*varbind->val.integer -
+ *idxptr2->varbind->val.integer);
+ break;
+ case ASN_OCTET_STR:
+ i = SNMP_MIN(varbind->val_len,
+ idxptr2->varbind->val_len);
+ res2 =
+ memcmp(varbind->val.string,
+ idxptr2->varbind->val.string, i);
+ break;
+ case ASN_OBJECT_ID:
+ res2 =
+ snmp_oid_compare(varbind->val.objid,
+ varbind->val_len / sizeof(oid),
+ idxptr2->varbind->val.objid,
+ idxptr2->varbind->val_len /
+ sizeof(oid));
+ break;
+ default:
+ return NULL; /* wrong type */
+ }
+ if (res2 <= 0)
+ break;
+ }
+ if (res2 == 0) {
+ if (idxptr2->allocated) {
+ /*
+ * No good: the index is in use.
+ */
+ return NULL;
+ } else {
+ /*
+ * Okay, it's unallocated, we can just claim ownership
+ * here.
+ */
+ if ((rv =
+ snmp_clone_varbind(idxptr2->varbind)) != NULL) {
+ idxptr2->session = ss;
+ idxptr2->allocated = 1;
+ }
+ return rv;
+ }
+ }
+ }
+ }
+
+ /*
+ * OK - we've now located where the new entry needs to
+ * be fitted into the index registry tree
+ * To recap:
+ * 'prev_oid_ptr' points to the head of the OID index
+ * list prior to this one. If this is null, then
+ * it means that this is the first OID in the list.
+ * 'idxptr' points either to the head of this OID list,
+ * or the next OID (if this is a new OID request)
+ * These can be distinguished by the value of 'res'.
+ *
+ * 'prev_idx_ptr' points to the index entry that sorts
+ * immediately prior to the requested value (if any).
+ * If an arbitrary value is required, then this will
+ * point to the last allocated index.
+ * If this pointer is null, then either this is a new
+ * OID request, or the requested value is the first
+ * in the list.
+ * 'idxptr2' points to the next sorted index (if any)
+ * but is not actually needed any more.
+ *
+ * Clear? Good!
+ * I hope you've been paying attention.
+ * There'll be a test later :-)
+ */
+
+ /*
+ * We proceed by creating the new entry
+ * (by copying the entry provided)
+ */
+ new_index = (struct snmp_index *) calloc(1, sizeof(struct snmp_index));
+ if (new_index == NULL)
+ return NULL;
+
+ if (0 == snmp_varlist_add_variable(&new_index->varbind,
+ varbind->name,
+ varbind->name_length,
+ varbind->type,
+ varbind->val.string,
+ varbind->val_len)) {
+ /*
+ * if (snmp_clone_var( varbind, new_index->varbind ) != 0 )
+ */
+ free(new_index);
+ return NULL;
+ }
+ new_index->session = ss;
+ new_index->allocated = 1;
+
+ if (varbind->type == ASN_OCTET_STR && flags == ALLOCATE_THIS_INDEX)
+ new_index->varbind->val.string[new_index->varbind->val_len] = 0;
+
+ /*
+ * If we've been given a value, then we can use that, but
+ * otherwise, we need to create a new value for this entry.
+ * Note that ANY_INDEX and NEW_INDEX are both covered by this
+ * test (since NEW_INDEX & ANY_INDEX = ANY_INDEX, remember?)
+ */
+ if (flags & ALLOCATE_ANY_INDEX) {
+ if (prev_idx_ptr) {
+ if (snmp_clone_var(prev_idx_ptr->varbind, new_index->varbind)
+ != 0) {
+ free(new_index);
+ return NULL;
+ }
+ } else
+ new_index->varbind->val.string = new_index->varbind->buf;
+
+ switch (varbind->type) {
+ case ASN_INTEGER:
+ if (prev_idx_ptr) {
+ (*new_index->varbind->val.integer)++;
+ } else
+ *(new_index->varbind->val.integer) = 1;
+ new_index->varbind->val_len = sizeof(long);
+ break;
+ case ASN_OCTET_STR:
+ if (prev_idx_ptr) {
+ i = new_index->varbind->val_len - 1;
+ while (new_index->varbind->buf[i] == 'z') {
+ new_index->varbind->buf[i] = 'a';
+ i--;
+ if (i < 0) {
+ i = new_index->varbind->val_len;
+ new_index->varbind->buf[i] = 'a';
+ new_index->varbind->buf[i + 1] = 0;
+ }
+ }
+ new_index->varbind->buf[i]++;
+ } else
+ strcpy((char *) new_index->varbind->buf, "aaaa");
+ new_index->varbind->val_len =
+ strlen((char *) new_index->varbind->buf);
+ break;
+ case ASN_OBJECT_ID:
+ if (prev_idx_ptr) {
+ i = prev_idx_ptr->varbind->val_len / sizeof(oid) - 1;
+ while (new_index->varbind->val.objid[i] == 255) {
+ new_index->varbind->val.objid[i] = 1;
+ i--;
+ if (i == 0 && new_index->varbind->val.objid[0] == 2) {
+ new_index->varbind->val.objid[0] = 1;
+ i = new_index->varbind->val_len / sizeof(oid);
+ new_index->varbind->val.objid[i] = 0;
+ new_index->varbind->val_len += sizeof(oid);
+ }
+ }
+ new_index->varbind->val.objid[i]++;
+ } else {
+ /*
+ * If the requested OID name is small enough,
+ * * append another OID (1) and use this as the
+ * * default starting value for new indexes.
+ */
+ if ((varbind->name_length + 1) * sizeof(oid) <= 40) {
+ for (i = 0; i < (int) varbind->name_length; i++)
+ new_index->varbind->val.objid[i] =
+ varbind->name[i];
+ new_index->varbind->val.objid[varbind->name_length] =
+ 1;
+ new_index->varbind->val_len =
+ (varbind->name_length + 1) * sizeof(oid);
+ } else {
+ /*
+ * Otherwise use '.1.1.1.1...'
+ */
+ i = 40 / sizeof(oid);
+ if (i > 4)
+ i = 4;
+ new_index->varbind->val_len = i * (sizeof(oid));
+ for (i--; i >= 0; i--)
+ new_index->varbind->val.objid[i] = 1;
+ }
+ }
+ break;
+ default:
+ snmp_free_var(new_index->varbind);
+ free(new_index);
+ return NULL; /* Index type not supported */
+ }
+ }
+
+ /*
+ * Try to duplicate the new varbind for return.
+ */
+
+ if ((rv = snmp_clone_varbind(new_index->varbind)) == NULL) {
+ snmp_free_var(new_index->varbind);
+ free(new_index);
+ return NULL;
+ }
+
+ /*
+ * Right - we've set up the new entry.
+ * All that remains is to link it into the tree.
+ * There are a number of possible cases here,
+ * so watch carefully.
+ */
+ if (prev_idx_ptr) {
+ new_index->next_idx = prev_idx_ptr->next_idx;
+ new_index->next_oid = prev_idx_ptr->next_oid;
+ prev_idx_ptr->next_idx = new_index;
+ } else {
+ if (res == 0 && idxptr) {
+ new_index->next_idx = idxptr;
+ new_index->next_oid = idxptr->next_oid;
+ } else {
+ new_index->next_idx = NULL;
+ new_index->next_oid = idxptr;
+ }
+
+ if (prev_oid_ptr) {
+ while (prev_oid_ptr) {
+ prev_oid_ptr->next_oid = new_index;
+ prev_oid_ptr = prev_oid_ptr->next_idx;
+ }
+ } else
+ snmp_index_head = new_index;
+ }
+ return rv;
+}
+
+ /*
+ * Release an allocated index,
+ * to allow it to be used elsewhere
+ */
+int
+release_index(netsnmp_variable_list * varbind)
+{
+ return (unregister_index(varbind, TRUE, NULL));
+}
+
+ /*
+ * Completely remove an allocated index,
+ * due to errors in the registration process.
+ */
+int
+remove_index(netsnmp_variable_list * varbind, netsnmp_session * ss)
+{
+ return (unregister_index(varbind, FALSE, ss));
+}
+
+void
+unregister_index_by_session(netsnmp_session * ss)
+{
+ struct snmp_index *idxptr, *idxptr2;
+ for (idxptr = snmp_index_head; idxptr != NULL;
+ idxptr = idxptr->next_oid)
+ for (idxptr2 = idxptr; idxptr2 != NULL;
+ idxptr2 = idxptr2->next_idx)
+ if (idxptr2->session == ss) {
+ idxptr2->allocated = 0;
+ idxptr2->session = NULL;
+ }
+}
+
+
+int
+unregister_index(netsnmp_variable_list * varbind, int remember,
+ netsnmp_session * ss)
+{
+ struct snmp_index *idxptr, *idxptr2;
+ struct snmp_index *prev_oid_ptr, *prev_idx_ptr;
+ int res, res2, i;
+
+#if defined(USING_AGENTX_SUBAGENT_MODULE) && !defined(TESTING)
+ if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_ROLE) == SUB_AGENT) {
+ return (agentx_unregister_index(ss, varbind));
+ }
+#endif
+ /*
+ * Look for the requested OID entry
+ */
+ prev_oid_ptr = NULL;
+ prev_idx_ptr = NULL;
+ res = 1;
+ res2 = 1;
+ for (idxptr = snmp_index_head; idxptr != NULL;
+ prev_oid_ptr = idxptr, idxptr = idxptr->next_oid) {
+ if ((res = snmp_oid_compare(varbind->name, varbind->name_length,
+ idxptr->varbind->name,
+ idxptr->varbind->name_length)) <= 0)
+ break;
+ }
+
+ if (res != 0)
+ return INDEX_ERR_NOT_ALLOCATED;
+ if (varbind->type != idxptr->varbind->type)
+ return INDEX_ERR_WRONG_TYPE;
+
+ for (idxptr2 = idxptr; idxptr2 != NULL;
+ prev_idx_ptr = idxptr2, idxptr2 = idxptr2->next_idx) {
+ i = SNMP_MIN(varbind->val_len, idxptr2->varbind->val_len);
+ res2 =
+ memcmp(varbind->val.string, idxptr2->varbind->val.string, i);
+ if (res2 <= 0)
+ break;
+ }
+ if (res2 != 0 || (res2 == 0 && !idxptr2->allocated)) {
+ return INDEX_ERR_NOT_ALLOCATED;
+ }
+ if (ss != idxptr2->session)
+ return INDEX_ERR_WRONG_SESSION;
+
+ /*
+ * If this is a "normal" index unregistration,
+ * mark the index entry as unused, but leave
+ * it in situ. This allows differentiation
+ * between ANY_INDEX and NEW_INDEX
+ */
+ if (remember) {
+ idxptr2->allocated = 0; /* Unused index */
+ idxptr2->session = NULL;
+ return SNMP_ERR_NOERROR;
+ }
+ /*
+ * If this is a failed attempt to register a
+ * number of indexes, the successful ones
+ * must be removed completely.
+ */
+ if (prev_idx_ptr) {
+ prev_idx_ptr->next_idx = idxptr2->next_idx;
+ } else if (prev_oid_ptr) {
+ if (idxptr2->next_idx) /* Use p_idx_ptr as a temp variable */
+ prev_idx_ptr = idxptr2->next_idx;
+ else
+ prev_idx_ptr = idxptr2->next_oid;
+ while (prev_oid_ptr) {
+ prev_oid_ptr->next_oid = prev_idx_ptr;
+ prev_oid_ptr = prev_oid_ptr->next_idx;
+ }
+ } else {
+ if (idxptr2->next_idx)
+ snmp_index_head = idxptr2->next_idx;
+ else
+ snmp_index_head = idxptr2->next_oid;
+ }
+ snmp_free_var(idxptr2->varbind);
+ free(idxptr2);
+ return SNMP_ERR_NOERROR;
+}
+
+int
+unregister_string_index(oid * name, size_t name_len, char *cp)
+{
+ netsnmp_variable_list varbind;
+
+ memset(&varbind, 0, sizeof(netsnmp_variable_list));
+ varbind.type = ASN_OCTET_STR;
+ snmp_set_var_objid(&varbind, name, name_len);
+ snmp_set_var_value(&varbind, (u_char *) cp, strlen(cp));
+ return (unregister_index(&varbind, FALSE, main_session));
+}
+
+int
+unregister_int_index(oid * name, size_t name_len, int val)
+{
+ netsnmp_variable_list varbind;
+
+ memset(&varbind, 0, sizeof(netsnmp_variable_list));
+ varbind.type = ASN_INTEGER;
+ snmp_set_var_objid(&varbind, name, name_len);
+ varbind.val.string = varbind.buf;
+ varbind.val_len = sizeof(long);
+ *varbind.val.integer = val;
+ return (unregister_index(&varbind, FALSE, main_session));
+}
+
+int
+unregister_oid_index(oid * name, size_t name_len,
+ oid * value, size_t value_len)
+{
+ netsnmp_variable_list varbind;
+
+ memset(&varbind, 0, sizeof(netsnmp_variable_list));
+ varbind.type = ASN_OBJECT_ID;
+ snmp_set_var_objid(&varbind, name, name_len);
+ snmp_set_var_value(&varbind, (u_char *) value,
+ value_len * sizeof(oid));
+ return (unregister_index(&varbind, FALSE, main_session));
+}
+
+void
+dump_idx_registry(void)
+{
+ struct snmp_index *idxptr, *idxptr2;
+ u_char *sbuf = NULL, *ebuf = NULL;
+ size_t sbuf_len = 0, sout_len = 0, ebuf_len = 0, eout_len = 0;
+
+ if (snmp_index_head != NULL) {
+ printf("\nIndex Allocations:\n");
+ }
+
+ for (idxptr = snmp_index_head; idxptr != NULL;
+ idxptr = idxptr->next_oid) {
+ sout_len = 0;
+ if (sprint_realloc_objid(&sbuf, &sbuf_len, &sout_len, 1,
+ idxptr->varbind->name,
+ idxptr->varbind->name_length)) {
+ printf("%s indexes:\n", sbuf);
+ } else {
+ printf("%s [TRUNCATED] indexes:\n", sbuf);
+ }
+
+ for (idxptr2 = idxptr; idxptr2 != NULL;
+ idxptr2 = idxptr2->next_idx) {
+ switch (idxptr2->varbind->type) {
+ case ASN_INTEGER:
+ printf(" %ld for session %8p, allocated %d\n",
+ *idxptr2->varbind->val.integer, idxptr2->session,
+ idxptr2->allocated);
+ break;
+ case ASN_OCTET_STR:
+ printf(" \"%s\" for session %8p, allocated %d\n",
+ idxptr2->varbind->val.string, idxptr2->session,
+ idxptr2->allocated);
+ break;
+ case ASN_OBJECT_ID:
+ eout_len = 0;
+ if (sprint_realloc_objid(&ebuf, &ebuf_len, &eout_len, 1,
+ idxptr2->varbind->val.objid,
+ idxptr2->varbind->val_len /
+ sizeof(oid))) {
+ printf(" %s for session %8p, allocated %d\n", ebuf,
+ idxptr2->session, idxptr2->allocated);
+ } else {
+ printf
+ (" %s [TRUNCATED] for sess %8p, allocated %d\n",
+ ebuf, idxptr2->session, idxptr2->allocated);
+ }
+ break;
+ default:
+ printf("unsupported type (%d/0x%02x)\n",
+ idxptr2->varbind->type, idxptr2->varbind->type);
+ }
+ }
+ }
+
+ if (sbuf != NULL) {
+ free(sbuf);
+ }
+ if (ebuf != NULL) {
+ free(ebuf);
+ }
+}
+
+unsigned long
+count_indexes(oid * name, size_t namelen, int include_unallocated)
+{
+ struct snmp_index *i = NULL, *j = NULL;
+ unsigned long n = 0;
+
+ for (i = snmp_index_head; i != NULL; i = i->next_oid) {
+ if (netsnmp_oid_equals(name, namelen,
+ i->varbind->name,
+ i->varbind->name_length) == 0) {
+ for (j = i; j != NULL; j = j->next_idx) {
+ if (j->allocated || include_unallocated) {
+ n++;
+ }
+ }
+ }
+ }
+ return n;
+}
+
+
+#ifdef TESTING
+netsnmp_variable_list varbind;
+netsnmp_session main_sess, *main_session = &main_sess;
+
+void
+test_string_register(int n, char *cp)
+{
+ varbind->name[4] = n;
+ if (register_string_index(varbind->name, varbind.name_length, cp) ==
+ NULL)
+ printf("allocating %s failed\n", cp);
+}
+
+void
+test_int_register(int n, int val)
+{
+ varbind->name[4] = n;
+ if (register_int_index(varbind->name, varbind.name_length, val) == -1)
+ printf("allocating %d/%d failed\n", n, val);
+}
+
+void
+test_oid_register(int n, int subid)
+{
+ netsnmp_variable_list *res;
+
+ varbind->name[4] = n;
+ if (subid != -1) {
+ varbind->val.objid[5] = subid;
+ res = register_oid_index(varbind->name, varbind.name_length,
+ varbind->val.objid,
+ varbind->val_len / sizeof(oid));
+ } else
+ res =
+ register_oid_index(varbind->name, varbind.name_length, NULL,
+ 0);
+
+ if (res == NULL)
+ printf("allocating %d/%d failed\n", n, subid);
+}
+
+void
+main(int argc, char argv[])
+{
+ oid name[] = { 1, 2, 3, 4, 0 };
+ int i;
+
+ memset(&varbind, 0, sizeof(netsnmp_variable_list));
+ snmp_set_var_objid(&varbind, name, 5);
+ varbind->type = ASN_OCTET_STR;
+ /*
+ * Test index structure linking:
+ * a) sorted by OID
+ */
+ test_string_register(20, "empty OID");
+ test_string_register(10, "first OID");
+ test_string_register(40, "last OID");
+ test_string_register(30, "middle OID");
+
+ /*
+ * b) sorted by index value
+ */
+ test_string_register(25, "eee: empty IDX");
+ test_string_register(25, "aaa: first IDX");
+ test_string_register(25, "zzz: last IDX");
+ test_string_register(25, "mmm: middle IDX");
+ printf("This next one should fail....\n");
+ test_string_register(25, "eee: empty IDX"); /* duplicate */
+ printf("done\n");
+
+ /*
+ * c) test initial index linking
+ */
+ test_string_register(5, "eee: empty initial IDX");
+ test_string_register(5, "aaa: replace initial IDX");
+
+ /*
+ * Did it all work?
+ */
+ dump_idx_registry();
+ unregister_index_by_session(main_session);
+ /*
+ * Now test index allocation
+ * a) integer values
+ */
+ test_int_register(110, -1); /* empty */
+ test_int_register(110, -1); /* append */
+ test_int_register(110, 10); /* append exact */
+ printf("This next one should fail....\n");
+ test_int_register(110, 10); /* exact duplicate */
+ printf("done\n");
+ test_int_register(110, -1); /* append */
+ test_int_register(110, 5); /* insert exact */
+
+ /*
+ * b) string values
+ */
+ test_string_register(120, NULL); /* empty */
+ test_string_register(120, NULL); /* append */
+ test_string_register(120, "aaaz");
+ test_string_register(120, NULL); /* minor rollover */
+ test_string_register(120, "zzzz");
+ test_string_register(120, NULL); /* major rollover */
+
+ /*
+ * c) OID values
+ */
+
+ test_oid_register(130, -1); /* empty */
+ test_oid_register(130, -1); /* append */
+
+ varbind->val_len = varbind.name_length * sizeof(oid);
+ memcpy(varbind->buf, varbind.name, varbind.val_len);
+ varbind->val.objid = (oid *) varbind.buf;
+ varbind->val_len += sizeof(oid);
+
+ test_oid_register(130, 255); /* append exact */
+ test_oid_register(130, -1); /* minor rollover */
+ test_oid_register(130, 100); /* insert exact */
+ printf("This next one should fail....\n");
+ test_oid_register(130, 100); /* exact duplicate */
+ printf("done\n");
+
+ varbind->val.objid = (oid *) varbind.buf;
+ for (i = 0; i < 6; i++)
+ varbind->val.objid[i] = 255;
+ varbind->val.objid[0] = 1;
+ test_oid_register(130, 255); /* set up rollover */
+ test_oid_register(130, -1); /* medium rollover */
+
+ for (i = 0; i < 6; i++)
+ varbind->val.objid[i] = 255;
+ varbind->val.objid[0] = 2;
+ test_oid_register(130, 255); /* set up rollover */
+ test_oid_register(130, -1); /* major rollover */
+
+ /*
+ * Did it all work?
+ */
+ dump_idx_registry();
+
+ /*
+ * Test the various "invalid" requests
+ * (unsupported types, mis-matched types, etc)
+ */
+ printf("The rest of these should fail....\n");
+ test_oid_register(110, -1);
+ test_oid_register(110, 100);
+ test_oid_register(120, -1);
+ test_oid_register(120, 100);
+ test_string_register(110, NULL);
+ test_string_register(110, "aaaa");
+ test_string_register(130, NULL);
+ test_string_register(130, "aaaa");
+ test_int_register(120, -1);
+ test_int_register(120, 1);
+ test_int_register(130, -1);
+ test_int_register(130, 1);
+ printf("done - this dump should be the same as before\n");
+ dump_idx_registry();
+}
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/agent_read_config.c b/cleopatre/application/spidnetsnmp/agent/agent_read_config.c
new file mode 100644
index 0000000000..83b74e8fe3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/agent_read_config.c
@@ -0,0 +1,314 @@
+/*
+ * agent_read_config.c
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#include <sys/types.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#include <stdio.h>
+#include <ctype.h>
+#include <errno.h>
+
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_NETINET_IN_SYSTM_H
+#include <netinet/in_systm.h>
+#endif
+#if HAVE_NETINET_IP_H
+#include <netinet/ip.h>
+#endif
+#ifdef NETSNMP_ENABLE_IPV6
+#if HAVE_NETINET_IP6_H
+#include <netinet/ip6.h>
+#endif
+#endif
+#if HAVE_SYS_QUEUE_H
+#include <sys/queue.h>
+#endif
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#if HAVE_SYS_SOCKETVAR_H
+#ifndef dynix
+#include <sys/socketvar.h>
+#else
+#include <sys/param.h>
+#endif
+#endif
+#elif HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#if HAVE_SYS_STREAM_H
+# ifdef sysv5UnixWare7
+# define _KMEMUSER 1 /* <sys/stream.h> needs this for queue_t */
+# endif
+#include <sys/stream.h>
+#endif
+#if HAVE_NET_ROUTE_H
+#include <net/route.h>
+#endif
+#if HAVE_NETINET_IP_VAR_H
+#include <netinet/ip_var.h>
+#endif
+#ifdef NETSNMP_ENABLE_IPV6
+#if HAVE_NETNETSNMP_ENABLE_IPV6_IP6_VAR_H
+#include <netinet6/ip6_var.h>
+#endif
+#endif
+#if HAVE_NETINET_IN_PCB_H
+#include <netinet/in_pcb.h>
+#endif
+#if HAVE_INET_MIB2_H
+#include <inet/mib2.h>
+#endif
+
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+#ifdef HAVE_GRP_H
+#include <grp.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "mibgroup/struct.h"
+#include <net-snmp/agent/agent_trap.h>
+#include "snmpd.h"
+#include <net-snmp/agent/agent_callbacks.h>
+#include <net-snmp/agent/table.h>
+#include <net-snmp/agent/table_iterator.h>
+#include <net-snmp/agent/table_data.h>
+#include <net-snmp/agent/table_dataset.h>
+#include "agent_module_includes.h"
+#include "mib_module_includes.h"
+
+char dontReadConfigFiles;
+char *optconfigfile;
+
+#ifdef HAVE_UNISTD_H
+void
+snmpd_set_agent_user(const char *token, char *cptr)
+{
+#if defined(HAVE_GETPWNAM) && defined(HAVE_PWD_H)
+ struct passwd *info;
+#endif
+
+ if (cptr[0] == '#') {
+ char *ecp;
+ int uid;
+ uid = strtoul(cptr + 1, &ecp, 10);
+ if (*ecp != 0) {
+ config_perror("Bad number");
+ } else {
+ netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_USERID, uid);
+ }
+ }
+#if defined(HAVE_GETPWNAM) && defined(HAVE_PWD_H)
+ else if ((info = getpwnam(cptr)) != NULL) {
+ netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_USERID, info->pw_uid);
+ } else {
+ config_perror("User not found in passwd database");
+ }
+ endpwent();
+#endif
+}
+
+void
+snmpd_set_agent_group(const char *token, char *cptr)
+{
+#if defined(HAVE_GETGRNAM) && defined(HAVE_GRP_H)
+ struct group *info;
+#endif
+
+ if (cptr[0] == '#') {
+ char *ecp;
+ int gid = strtoul(cptr + 1, &ecp, 10);
+ if (*ecp != 0) {
+ config_perror("Bad number");
+ } else {
+ netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_GROUPID, gid);
+ }
+ }
+#if defined(HAVE_GETGRNAM) && defined(HAVE_GRP_H)
+ else if ((info = getgrnam(cptr)) != NULL) {
+ netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_GROUPID, info->gr_gid);
+ } else {
+ config_perror("Group not found in group database");
+ }
+ endpwent();
+#endif
+}
+#endif
+
+void
+snmpd_set_agent_address(const char *token, char *cptr)
+{
+ char buf[SPRINT_MAX_LEN];
+ char *ptr;
+
+ /*
+ * has something been specified before?
+ */
+ ptr = netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_PORTS);
+
+ if (ptr) {
+ /*
+ * append to the older specification string
+ */
+ sprintf(buf, "%s,%s", ptr, cptr);
+ } else {
+ strcpy(buf, cptr);
+ }
+
+ DEBUGMSGTL(("snmpd_ports", "port spec: %s\n", buf));
+ netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_PORTS, buf);
+}
+
+void
+init_agent_read_config(const char *app)
+{
+ if (app != NULL) {
+ netsnmp_ds_set_string(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_APPTYPE, app);
+ } else {
+ app = netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_APPTYPE);
+ }
+
+ register_app_config_handler("authtrapenable",
+ snmpd_parse_config_authtrap, NULL,
+ "1 | 2\t\t(1 = enable, 2 = disable)");
+ register_app_config_handler("pauthtrapenable",
+ snmpd_parse_config_authtrap, NULL, NULL);
+
+
+ if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_ROLE) == MASTER_AGENT) {
+#ifndef NETSNMP_DISABLE_SNMPV1
+ register_app_config_handler("trapsink",
+ snmpd_parse_config_trapsink,
+ snmpd_free_trapsinks,
+ "host [community] [port]");
+#endif
+#ifndef NETSNMP_DISABLE_SNMPV2C
+ register_app_config_handler("trap2sink",
+ snmpd_parse_config_trap2sink,
+ snmpd_free_trapsinks,
+ "host [community] [port]");
+ register_app_config_handler("informsink",
+ snmpd_parse_config_informsink,
+ snmpd_free_trapsinks,
+ "host [community] [port]");
+#endif
+ register_app_config_handler("trapsess",
+ snmpd_parse_config_trapsess,
+ snmpd_free_trapsinks,
+ "[snmpcmdargs] host");
+ }
+#if !defined(NETSNMP_DISABLE_SNMPV1) || !defined(NETSNMP_DISABLE_SNMPV2C)
+ register_app_config_handler("trapcommunity",
+ snmpd_parse_config_trapcommunity,
+ snmpd_free_trapcommunity,
+ "community-string");
+#endif /* support for community based SNMP */
+#ifdef HAVE_UNISTD_H
+ register_app_config_handler("agentuser",
+ snmpd_set_agent_user, NULL, "userid");
+ register_app_config_handler("agentgroup",
+ snmpd_set_agent_group, NULL, "groupid");
+#endif
+ register_app_config_handler("agentaddress",
+ snmpd_set_agent_address, NULL,
+ "SNMP bind address");
+ netsnmp_ds_register_config(ASN_BOOLEAN, app, "quit",
+ NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_QUIT_IMMEDIATELY);
+ netsnmp_ds_register_config(ASN_BOOLEAN, app, "leave_pidfile",
+ NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_LEAVE_PIDFILE);
+ netsnmp_ds_register_config(ASN_BOOLEAN, app, "dontLogTCPWrappersConnects",
+ NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_DONT_LOG_TCPWRAPPERS_CONNECTS);
+ netsnmp_ds_register_config(ASN_INTEGER, app, "maxGetbulkRepeats",
+ NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_MAX_GETBULKREPEATS);
+ netsnmp_ds_register_config(ASN_INTEGER, app, "maxGetbulkResponses",
+ NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_MAX_GETBULKRESPONSES);
+ netsnmp_init_handler_conf();
+
+#include "agent_module_dot_conf.h"
+#include "mib_module_dot_conf.h"
+#ifdef TESTING
+ print_config_handlers();
+#endif
+}
+
+void
+update_config(void)
+{
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_PRE_UPDATE_CONFIG, NULL);
+ free_config();
+ vacm_standard_views(0,0,NULL,NULL);
+ read_configs();
+}
+
+
+void
+snmpd_register_config_handler(const char *token,
+ void (*parser) (const char *, char *),
+ void (*releaser) (void), const char *help)
+{
+ DEBUGMSGTL(("snmpd_register_app_config_handler",
+ "registering .conf token for \"%s\"\n", token));
+ register_app_config_handler(token, parser, releaser, help);
+}
+
+void
+snmpd_unregister_config_handler(const char *token)
+{
+ unregister_app_config_handler(token);
+}
+
+/*
+ * this function is intended for use by mib-modules to store permenant
+ * configuration information generated by sets or persistent counters
+ */
+void
+snmpd_store_config(const char *line)
+{
+ read_app_config_store(line);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/agent_registry.c b/cleopatre/application/spidnetsnmp/agent/agent_registry.c
new file mode 100644
index 0000000000..b5889fe8ac
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/agent_registry.c
@@ -0,0 +1,1885 @@
+/*
+ * agent_registry.c
+ */
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+/** @defgroup agent_registry Maintain a registry of MIB subtrees, together with related information regarding mibmodule, sessions, etc
+ * @ingroup agent
+ *
+ * @{
+ */
+
+#define IN_SNMP_VARS_C
+
+#include <net-snmp/net-snmp-config.h>
+#include <signal.h>
+#if HAVE_STRING_H
+#include <string.h>
+#endif
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <sys/types.h>
+#include <stdio.h>
+#include <fcntl.h>
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/agent_callbacks.h>
+
+#include "snmpd.h"
+#include "mibgroup/struct.h"
+#include <net-snmp/agent/old_api.h>
+#include <net-snmp/agent/null.h>
+#include <net-snmp/agent/table.h>
+#include <net-snmp/agent/table_iterator.h>
+#include <net-snmp/agent/agent_registry.h>
+#include "mib_module_includes.h"
+
+#ifdef USING_AGENTX_SUBAGENT_MODULE
+#include "agentx/subagent.h"
+#include "agentx/client.h"
+#endif
+
+static void register_mib_detach_node(netsnmp_subtree *s);
+NETSNMP_STATIC_INLINE void invalidate_lookup_cache(const char *context);
+void netsnmp_set_lookup_cache_size(int newsize);
+int netsnmp_get_lookup_cache_size(void);
+
+subtree_context_cache *context_subtrees = NULL;
+
+void
+netsnmp_subtree_free(netsnmp_subtree *a)
+{
+ if (a != NULL) {
+ if (a->variables != NULL && netsnmp_oid_equals(a->name_a, a->namelen,
+ a->start_a, a->start_len) == 0) {
+ SNMP_FREE(a->variables);
+ }
+ SNMP_FREE(a->name_a);
+ a->namelen = 0;
+ SNMP_FREE(a->start_a);
+ a->start_len = 0;
+ SNMP_FREE(a->end_a);
+ a->end_len = 0;
+ SNMP_FREE(a->label_a);
+ netsnmp_handler_registration_free(a->reginfo);
+ a->reginfo = NULL;
+ SNMP_FREE(a);
+ }
+}
+
+netsnmp_subtree *
+netsnmp_subtree_deepcopy(netsnmp_subtree *a)
+{
+ netsnmp_subtree *b = (netsnmp_subtree *)calloc(1, sizeof(netsnmp_subtree));
+
+ if (b != NULL) {
+ memcpy(b, a, sizeof(netsnmp_subtree));
+ b->name_a = snmp_duplicate_objid(a->name_a, a->namelen);
+ b->start_a = snmp_duplicate_objid(a->start_a, a->start_len);
+ b->end_a = snmp_duplicate_objid(a->end_a, a->end_len);
+ b->label_a = strdup(a->label_a);
+
+ if (b->name_a == NULL || b->start_a == NULL ||
+ b->end_a == NULL || b->label_a == NULL) {
+ netsnmp_subtree_free(b);
+ return NULL;
+ }
+
+ if (a->variables != NULL) {
+ b->variables = (struct variable *)malloc(a->variables_len *
+ a->variables_width);
+ if (b->variables != NULL) {
+ memcpy(b->variables, a->variables,a->variables_len*a->variables_width);
+ } else {
+ netsnmp_subtree_free(b);
+ return NULL;
+ }
+ }
+
+ if (a->reginfo != NULL) {
+ b->reginfo = netsnmp_handler_registration_dup(a->reginfo);
+ if (b->reginfo == NULL) {
+ netsnmp_subtree_free(b);
+ return NULL;
+ }
+ }
+ }
+ return b;
+}
+
+subtree_context_cache *
+get_top_context_cache(void)
+{
+ return context_subtrees;
+}
+
+netsnmp_subtree *
+netsnmp_subtree_find_first(const char *context_name)
+{
+ subtree_context_cache *ptr;
+
+ if (!context_name) {
+ context_name = "";
+ }
+
+ DEBUGMSGTL(("subtree", "looking for subtree for context: \"%s\"\n",
+ context_name));
+ for (ptr = context_subtrees; ptr != NULL; ptr = ptr->next) {
+ if (ptr->context_name != NULL &&
+ strcmp(ptr->context_name, context_name) == 0) {
+ DEBUGMSGTL(("subtree", "found one for: \"%s\"\n", context_name));
+ return ptr->first_subtree;
+ }
+ }
+ DEBUGMSGTL(("subtree", "didn't find a subtree for context: \"%s\"\n",
+ context_name));
+ return NULL;
+}
+
+netsnmp_subtree *
+add_subtree(netsnmp_subtree *new_tree, const char *context_name)
+{
+ subtree_context_cache *ptr = SNMP_MALLOC_TYPEDEF(subtree_context_cache);
+
+ if (!context_name) {
+ context_name = "";
+ }
+
+ if (!ptr) {
+ return NULL;
+ }
+
+ DEBUGMSGTL(("subtree", "adding subtree for context: \"%s\"\n",
+ context_name));
+
+ ptr->next = context_subtrees;
+ ptr->first_subtree = new_tree;
+ ptr->context_name = strdup(context_name);
+ context_subtrees = ptr;
+
+ return ptr->first_subtree;
+}
+
+netsnmp_subtree *
+netsnmp_subtree_replace_first(netsnmp_subtree *new_tree,
+ const char *context_name)
+{
+ subtree_context_cache *ptr;
+ if (!context_name) {
+ context_name = "";
+ }
+ for (ptr = context_subtrees; ptr != NULL; ptr = ptr->next) {
+ if (ptr->context_name != NULL &&
+ strcmp(ptr->context_name, context_name) == 0) {
+ ptr->first_subtree = new_tree;
+ return ptr->first_subtree;
+ }
+ }
+ return add_subtree(new_tree, context_name);
+}
+
+NETSNMP_INLINE void
+netsnmp_subtree_change_next(netsnmp_subtree *ptr, netsnmp_subtree *thenext)
+{
+ ptr->next = thenext;
+ if (thenext)
+ netsnmp_oid_compare_ll(ptr->start_a,
+ ptr->start_len,
+ thenext->start_a,
+ thenext->start_len,
+ &thenext->oid_off);
+}
+
+NETSNMP_INLINE void
+netsnmp_subtree_change_prev(netsnmp_subtree *ptr, netsnmp_subtree *theprev)
+{
+ ptr->prev = theprev;
+ if (theprev)
+ netsnmp_oid_compare_ll(theprev->start_a,
+ theprev->start_len,
+ ptr->start_a,
+ ptr->start_len,
+ &ptr->oid_off);
+}
+
+int
+netsnmp_subtree_compare(const netsnmp_subtree *ap, const netsnmp_subtree *bp)
+{
+ return snmp_oid_compare(ap->name_a, ap->namelen, bp->name_a, bp->namelen);
+}
+
+void
+netsnmp_subtree_join(netsnmp_subtree *root)
+{
+ netsnmp_subtree *s, *tmp, *c, *d;
+
+ while (root != NULL) {
+ s = root->next;
+ while (s != NULL && root->reginfo == s->reginfo) {
+ tmp = s->next;
+ DEBUGMSGTL(("subtree", "root start "));
+ DEBUGMSGOID(("subtree", root->start_a, root->start_len));
+ DEBUGMSG(("subtree", " (original end "));
+ DEBUGMSGOID(("subtree", root->end_a, root->end_len));
+ DEBUGMSG(("subtree", ")\n"));
+ DEBUGMSGTL(("subtree", " JOINING to "));
+ DEBUGMSGOID(("subtree", s->start_a, s->start_len));
+
+ SNMP_FREE(root->end_a);
+ root->end_a = s->end_a;
+ root->end_len = s->end_len;
+ s->end_a = NULL;
+
+ for (c = root; c != NULL; c = c->children) {
+ netsnmp_subtree_change_next(c, s->next);
+ }
+ for (c = s; c != NULL; c = c->children) {
+ netsnmp_subtree_change_prev(c, root);
+ }
+ DEBUGMSG(("subtree", " so new end "));
+ DEBUGMSGOID(("subtree", root->end_a, root->end_len));
+ DEBUGMSG(("subtree", "\n"));
+ /*
+ * Probably need to free children too?
+ */
+ for (c = s->children; c != NULL; c = d) {
+ d = c->children;
+ netsnmp_subtree_free(c);
+ }
+ netsnmp_subtree_free(s);
+ s = tmp;
+ }
+ root = root->next;
+ }
+}
+
+
+ /*
+ * Split the subtree into two at the specified point,
+ * returning the new (second) subtree
+ */
+netsnmp_subtree *
+netsnmp_subtree_split(netsnmp_subtree *current, oid name[], int name_len)
+{
+ struct variable *vp = NULL;
+ netsnmp_subtree *new_sub, *ptr;
+ int i = 0, rc = 0, rc2 = 0;
+ size_t common_len = 0;
+ char *cp;
+ oid *tmp_a, *tmp_b;
+
+ if (snmp_oid_compare(name, name_len, current->end_a, current->end_len)>0) {
+ /* Split comes after the end of this subtree */
+ return NULL;
+ }
+
+ new_sub = netsnmp_subtree_deepcopy(current);
+ if (new_sub == NULL) {
+ return NULL;
+ }
+
+ /* Set up the point of division. */
+ tmp_a = snmp_duplicate_objid(name, name_len);
+ if (tmp_a == NULL) {
+ netsnmp_subtree_free(new_sub);
+ return NULL;
+ }
+ tmp_b = snmp_duplicate_objid(name, name_len);
+ if (tmp_b == NULL) {
+ netsnmp_subtree_free(new_sub);
+ SNMP_FREE(tmp_a);
+ return NULL;
+ }
+
+ if (current->end_a != NULL) {
+ SNMP_FREE(current->end_a);
+ }
+ current->end_a = tmp_a;
+ current->end_len = name_len;
+ if (new_sub->start_a != NULL) {
+ SNMP_FREE(new_sub->start_a);
+ }
+ new_sub->start_a = tmp_b;
+ new_sub->start_len = name_len;
+
+ /* Split the variables between the two new subtrees. */
+ i = current->variables_len;
+ current->variables_len = 0;
+
+ for (vp = current->variables; i > 0; i--) {
+ /* Note that the variable "name" field omits the prefix common to the
+ whole registration, hence the strange comparison here. */
+
+ rc = snmp_oid_compare(vp->name, vp->namelen,
+ name + current->namelen,
+ name_len - current->namelen);
+
+ if (name_len - current->namelen > vp->namelen) {
+ common_len = vp->namelen;
+ } else {
+ common_len = name_len - current->namelen;
+ }
+
+ rc2 = snmp_oid_compare(vp->name, common_len,
+ name + current->namelen, common_len);
+
+ if (rc >= 0) {
+ break; /* All following variables belong to the second subtree */
+ }
+
+ current->variables_len++;
+ if (rc2 < 0) {
+ new_sub->variables_len--;
+ cp = (char *) new_sub->variables;
+ new_sub->variables = (struct variable *)(cp +
+ new_sub->variables_width);
+ }
+ vp = (struct variable *) ((char *) vp + current->variables_width);
+ }
+
+ /* Delegated trees should retain their variables regardless */
+ if (current->variables_len > 0 &&
+ IS_DELEGATED((u_char) current->variables[0].type)) {
+ new_sub->variables_len = 1;
+ new_sub->variables = current->variables;
+ }
+
+ /* Propogate this split down through any children */
+ if (current->children) {
+ new_sub->children = netsnmp_subtree_split(current->children,
+ name, name_len);
+ }
+
+ /* Retain the correct linking of the list */
+ for (ptr = current; ptr != NULL; ptr = ptr->children) {
+ netsnmp_subtree_change_next(ptr, new_sub);
+ }
+ for (ptr = new_sub; ptr != NULL; ptr = ptr->children) {
+ netsnmp_subtree_change_prev(ptr, current);
+ }
+ for (ptr = new_sub->next; ptr != NULL; ptr=ptr->children) {
+ netsnmp_subtree_change_prev(ptr, new_sub);
+ }
+
+ return new_sub;
+}
+
+int
+netsnmp_subtree_load(netsnmp_subtree *new_sub, const char *context_name)
+{
+ netsnmp_subtree *tree1, *tree2, *new2;
+ netsnmp_subtree *prev, *next;
+ int res, rc = 0;
+
+ if (new_sub == NULL) {
+ return MIB_REGISTERED_OK; /* Degenerate case */
+ }
+
+ if (!netsnmp_subtree_find_first(context_name)) {
+ static int inloop = 0;
+ if (!inloop) {
+ oid ccitt[1] = { 0 };
+ oid iso[1] = { 1 };
+ oid joint_ccitt_iso[1] = { 2 };
+ inloop = 1;
+ netsnmp_register_null_context(snmp_duplicate_objid(ccitt, 1), 1,
+ context_name);
+ netsnmp_register_null_context(snmp_duplicate_objid(iso, 1), 1,
+ context_name);
+ netsnmp_register_null_context(snmp_duplicate_objid(joint_ccitt_iso, 1),
+ 1, context_name);
+ inloop = 0;
+ }
+ }
+
+ /* Find the subtree that contains the start of the new subtree (if
+ any)...*/
+
+ tree1 = netsnmp_subtree_find(new_sub->start_a, new_sub->start_len,
+ NULL, context_name);
+
+ /* ... and the subtree that follows the new one (NULL implies this is the
+ final region covered). */
+
+ if (tree1 == NULL) {
+ tree2 = netsnmp_subtree_find_next(new_sub->start_a, new_sub->start_len,
+ NULL, context_name);
+ } else {
+ tree2 = tree1->next;
+ }
+
+ /* Handle new subtrees that start in virgin territory. */
+
+ if (tree1 == NULL) {
+ new2 = NULL;
+ /* Is there any overlap with later subtrees? */
+ if (tree2 && snmp_oid_compare(new_sub->end_a, new_sub->end_len,
+ tree2->start_a, tree2->start_len) > 0) {
+ new2 = netsnmp_subtree_split(new_sub,
+ tree2->start_a, tree2->start_len);
+ }
+
+ /* Link the new subtree (less any overlapping region) with the list of
+ existing registrations. */
+
+ if (tree2) {
+ netsnmp_subtree_change_prev(new_sub, tree2->prev);
+ netsnmp_subtree_change_prev(tree2, new_sub);
+ } else {
+ netsnmp_subtree_change_prev(new_sub,
+ netsnmp_subtree_find_prev(new_sub->start_a,
+ new_sub->start_len, NULL, context_name));
+
+ if (new_sub->prev) {
+ netsnmp_subtree_change_next(new_sub->prev, new_sub);
+ } else {
+ netsnmp_subtree_replace_first(new_sub, context_name);
+ }
+
+ netsnmp_subtree_change_next(new_sub, tree2);
+
+ /* If there was any overlap, recurse to merge in the overlapping
+ region (including anything that may follow the overlap). */
+ if (new2) {
+ return netsnmp_subtree_load(new2, context_name);
+ }
+ }
+ } else {
+ /* If the new subtree starts *within* an existing registration
+ (rather than at the same point as it), then split the existing
+ subtree at this point. */
+
+ if (netsnmp_oid_equals(new_sub->start_a, new_sub->start_len,
+ tree1->start_a, tree1->start_len) != 0) {
+ tree1 = netsnmp_subtree_split(tree1, new_sub->start_a,
+ new_sub->start_len);
+ }
+
+ if (tree1 == NULL) {
+ return MIB_REGISTRATION_FAILED;
+ }
+
+ /* Now consider the end of this existing subtree:
+
+ If it matches the new subtree precisely,
+ simply merge the new one into the list of children
+
+ If it includes the whole of the new subtree,
+ split it at the appropriate point, and merge again
+
+ If the new subtree extends beyond this existing region,
+ split it, and recurse to merge the two parts. */
+
+ rc = snmp_oid_compare(new_sub->end_a, new_sub->end_len,
+ tree1->end_a, tree1->end_len);
+
+ switch (rc) {
+
+ case -1:
+ /* Existing subtree contains new one. */
+ netsnmp_subtree_split(tree1, new_sub->end_a, new_sub->end_len);
+ /* Fall Through */
+
+ case 0:
+ /* The two trees match precisely. */
+
+ /* Note: This is the only point where the original registration
+ OID ("name") is used. */
+
+ prev = NULL;
+ next = tree1;
+
+ while (next && next->namelen > new_sub->namelen) {
+ prev = next;
+ next = next->children;
+ }
+
+ while (next && next->namelen == new_sub->namelen &&
+ next->priority < new_sub->priority ) {
+ prev = next;
+ next = next->children;
+ }
+
+ if (next && (next->namelen == new_sub->namelen) &&
+ (next->priority == new_sub->priority)) {
+ if (new_sub->namelen != 1) /* ignore root OID dups */
+ netsnmp_assert(!"registration != duplicate"); /* always false */
+ return MIB_DUPLICATE_REGISTRATION;
+ }
+
+ if (prev) {
+ prev->children = new_sub;
+ new_sub->children = next;
+ netsnmp_subtree_change_prev(new_sub, prev->prev);
+ netsnmp_subtree_change_next(new_sub, prev->next);
+ } else {
+ new_sub->children = next;
+ netsnmp_subtree_change_prev(new_sub, next->prev);
+ netsnmp_subtree_change_next(new_sub, next->next);
+
+ for (next = new_sub->next; next != NULL;next = next->children){
+ netsnmp_subtree_change_prev(next, new_sub);
+ }
+
+ for (prev = new_sub->prev; prev != NULL;prev = prev->children){
+ netsnmp_subtree_change_next(prev, new_sub);
+ }
+ }
+ break;
+
+ case 1:
+ /* New subtree contains the existing one. */
+ new2 = netsnmp_subtree_split(new_sub, tree1->end_a,tree1->end_len);
+ res = netsnmp_subtree_load(new_sub, context_name);
+ if (res != MIB_REGISTERED_OK) {
+ netsnmp_subtree_free(new2);
+ return res;
+ }
+ return netsnmp_subtree_load(new2, context_name);
+ }
+ }
+ return 0;
+}
+
+/*
+ * Note: reginfo will be freed on failures
+ */
+int
+netsnmp_register_mib(const char *moduleName,
+ struct variable *var,
+ size_t varsize,
+ size_t numvars,
+ oid * mibloc,
+ size_t mibloclen,
+ int priority,
+ int range_subid,
+ oid range_ubound,
+ netsnmp_session * ss,
+ const char *context,
+ int timeout,
+ int flags,
+ netsnmp_handler_registration *reginfo,
+ int perform_callback)
+{
+ netsnmp_subtree *subtree, *sub2;
+ int res, i;
+ struct register_parameters reg_parms;
+ int old_lookup_cache_val = netsnmp_get_lookup_cache_size();
+
+ if (moduleName == NULL ||
+ mibloc == NULL) {
+ /* Shouldn't happen ??? */
+ netsnmp_handler_registration_free(reginfo);
+ return MIB_REGISTRATION_FAILED;
+ }
+ subtree = (netsnmp_subtree *)calloc(1, sizeof(netsnmp_subtree));
+ if (subtree == NULL) {
+ netsnmp_handler_registration_free(reginfo);
+ return MIB_REGISTRATION_FAILED;
+ }
+
+ DEBUGMSGTL(("register_mib", "registering \"%s\" at ", moduleName));
+ DEBUGMSGOIDRANGE(("register_mib", mibloc, mibloclen, range_subid,
+ range_ubound));
+ DEBUGMSG(("register_mib", " with context \"%s\"\n",
+ SNMP_STRORNULL(context)));
+
+ /*
+ * verify that the passed context is equal to the context
+ * in the reginfo.
+ * (which begs the question, why do we have both? It appears that the
+ * reginfo item didn't appear til 5.2)
+ */
+ if( ((NULL == context) && (NULL != reginfo->contextName)) ||
+ ((NULL != context) && (NULL == reginfo->contextName)) ||
+ ( ((NULL != context) && (NULL != reginfo->contextName)) &&
+ (0 != strcmp(context, reginfo->contextName))) ) {
+ snmp_log(LOG_WARNING,"context passed during registration does not "
+ "equal the reginfo contextName! ('%s' != '%s')\n",
+ context, reginfo->contextName);
+ netsnmp_assert(!"register context == reginfo->contextName"); /* always false */
+ }
+
+ /* Create the new subtree node being registered. */
+
+ subtree->reginfo = reginfo;
+ subtree->name_a = snmp_duplicate_objid(mibloc, mibloclen);
+ subtree->start_a = snmp_duplicate_objid(mibloc, mibloclen);
+ subtree->end_a = snmp_duplicate_objid(mibloc, mibloclen);
+ subtree->label_a = strdup(moduleName);
+ if (subtree->name_a == NULL || subtree->start_a == NULL ||
+ subtree->end_a == NULL || subtree->label_a == NULL) {
+ netsnmp_subtree_free(subtree); /* also frees reginfo */
+ return MIB_REGISTRATION_FAILED;
+ }
+ subtree->namelen = (u_char)mibloclen;
+ subtree->start_len = (u_char)mibloclen;
+ subtree->end_len = (u_char)mibloclen;
+ subtree->end_a[mibloclen - 1]++;
+
+ if (var != NULL) {
+ subtree->variables = (struct variable *)malloc(varsize*numvars);
+ if (subtree->variables == NULL) {
+ netsnmp_subtree_free(subtree); /* also frees reginfo */
+ return MIB_REGISTRATION_FAILED;
+ }
+ memcpy(subtree->variables, var, numvars*varsize);
+ subtree->variables_len = numvars;
+ subtree->variables_width = varsize;
+ }
+ subtree->priority = priority;
+ subtree->timeout = timeout;
+ subtree->range_subid = range_subid;
+ subtree->range_ubound = range_ubound;
+ subtree->session = ss;
+ subtree->flags = (u_char)flags; /* used to identify instance oids */
+ subtree->flags |= SUBTREE_ATTACHED;
+ subtree->global_cacheid = reginfo->global_cacheid;
+
+ netsnmp_set_lookup_cache_size(0);
+ res = netsnmp_subtree_load(subtree, context);
+
+ /* If registering a range, use the first subtree as a template for the
+ rest of the range. */
+
+ if (res == MIB_REGISTERED_OK && range_subid != 0) {
+ for (i = mibloc[range_subid - 1] + 1; i <= (int)range_ubound; i++) {
+ sub2 = netsnmp_subtree_deepcopy(subtree);
+
+ if (sub2 == NULL) {
+ unregister_mib_context(mibloc, mibloclen, priority,
+ range_subid, range_ubound, context);
+ netsnmp_set_lookup_cache_size(old_lookup_cache_val);
+ invalidate_lookup_cache(context);
+ return MIB_REGISTRATION_FAILED;
+ }
+
+ sub2->name_a[range_subid - 1] = i;
+ sub2->start_a[range_subid - 1] = i;
+ sub2->end_a[range_subid - 1] = i; /* XXX - ???? */
+ if (range_subid == (int)mibloclen) {
+ ++sub2->end_a[range_subid - 1];
+ }
+ sub2->flags |= SUBTREE_ATTACHED;
+ sub2->global_cacheid = reginfo->global_cacheid;
+ /* FRQ This is essential for requests to succeed! */
+ sub2->reginfo->rootoid[range_subid - 1] = i;
+
+ res = netsnmp_subtree_load(sub2, context);
+ if (res != MIB_REGISTERED_OK) {
+ unregister_mib_context(mibloc, mibloclen, priority,
+ range_subid, range_ubound, context);
+ netsnmp_subtree_free(sub2);
+ netsnmp_set_lookup_cache_size(old_lookup_cache_val);
+ invalidate_lookup_cache(context);
+ return res;
+ }
+ }
+ } else if (res == MIB_DUPLICATE_REGISTRATION ||
+ res == MIB_REGISTRATION_FAILED) {
+ netsnmp_set_lookup_cache_size(old_lookup_cache_val);
+ invalidate_lookup_cache(context);
+ netsnmp_subtree_free(subtree);
+ return res;
+ }
+
+ /*
+ * mark the MIB as detached, if there's no master agent present as of now
+ */
+ if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_ROLE) != MASTER_AGENT) {
+ extern struct snmp_session *main_session;
+ if (main_session == NULL) {
+ register_mib_detach_node(subtree);
+ }
+ }
+
+ if (res == MIB_REGISTERED_OK && perform_callback) {
+ memset(&reg_parms, 0x0, sizeof(reg_parms));
+ reg_parms.name = mibloc;
+ reg_parms.namelen = mibloclen;
+ reg_parms.priority = priority;
+ reg_parms.range_subid = range_subid;
+ reg_parms.range_ubound = range_ubound;
+ reg_parms.timeout = timeout;
+ reg_parms.flags = (u_char) flags;
+ reg_parms.contextName = context;
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REGISTER_OID, &reg_parms);
+ }
+
+ netsnmp_set_lookup_cache_size(old_lookup_cache_val);
+ invalidate_lookup_cache(context);
+ return res;
+}
+
+/*
+ * Reattach a particular node.
+ */
+
+static void
+register_mib_reattach_node(netsnmp_subtree *s)
+{
+ if ((s != NULL) && (s->namelen > 1) && !(s->flags & SUBTREE_ATTACHED)) {
+ struct register_parameters reg_parms;
+ /*
+ * only do registrations that are not the top level nodes
+ */
+ memset(&reg_parms, 0x0, sizeof(reg_parms));
+
+ /*
+ * XXX: do this better
+ */
+ reg_parms.name = s->name_a;
+ reg_parms.namelen = s->namelen;
+ reg_parms.priority = s->priority;
+ reg_parms.range_subid = s->range_subid;
+ reg_parms.range_ubound = s->range_ubound;
+ reg_parms.timeout = s->timeout;
+ reg_parms.flags = s->flags;
+ if ((NULL != s->reginfo) && (NULL != s->reginfo->contextName))
+ reg_parms.contextName = s->reginfo->contextName;
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REGISTER_OID, &reg_parms);
+ s->flags |= SUBTREE_ATTACHED;
+ }
+}
+
+/*
+ * Call callbacks to reattach all our nodes.
+ */
+
+void
+register_mib_reattach(void)
+{
+ netsnmp_subtree *s, *t;
+ subtree_context_cache *ptr;
+
+ for (ptr = context_subtrees; ptr; ptr = ptr->next) {
+ for (s = ptr->first_subtree; s != NULL; s = s->next) {
+ register_mib_reattach_node(s);
+ for (t = s->children; t != NULL; t = t->children) {
+ register_mib_reattach_node(t);
+ }
+ }
+ }
+}
+
+/*
+ * Mark a node as detached.
+ */
+
+static void
+register_mib_detach_node(netsnmp_subtree *s)
+{
+ if (s != NULL) {
+ s->flags = s->flags & ~SUBTREE_ATTACHED;
+ }
+}
+
+/*
+ * Mark all our registered OIDs as detached. This is only really
+ * useful for subagent protocols, when a connection is lost or
+ * something.
+ */
+
+void
+register_mib_detach(void)
+{
+ netsnmp_subtree *s, *t;
+ subtree_context_cache *ptr;
+ for (ptr = context_subtrees; ptr; ptr = ptr->next) {
+ for (s = ptr->first_subtree; s != NULL; s = s->next) {
+ register_mib_detach_node(s);
+ for (t = s->children; t != NULL; t = t->children) {
+ register_mib_detach_node(t);
+ }
+ }
+ }
+}
+
+int
+register_mib_context(const char *moduleName,
+ struct variable *var,
+ size_t varsize,
+ size_t numvars,
+ oid * mibloc,
+ size_t mibloclen,
+ int priority,
+ int range_subid,
+ oid range_ubound,
+ netsnmp_session * ss,
+ const char *context, int timeout, int flags)
+{
+ return netsnmp_register_old_api(moduleName, var, varsize, numvars,
+ mibloc, mibloclen, priority,
+ range_subid, range_ubound, ss, context,
+ timeout, flags);
+}
+
+int
+register_mib_range(const char *moduleName,
+ struct variable *var,
+ size_t varsize,
+ size_t numvars,
+ oid * mibloc,
+ size_t mibloclen,
+ int priority,
+ int range_subid, oid range_ubound, netsnmp_session * ss)
+{
+ return register_mib_context(moduleName, var, varsize, numvars,
+ mibloc, mibloclen, priority,
+ range_subid, range_ubound, ss, "", -1, 0);
+}
+
+int
+register_mib_priority(const char *moduleName,
+ struct variable *var,
+ size_t varsize,
+ size_t numvars,
+ oid * mibloc, size_t mibloclen, int priority)
+{
+ return register_mib_range(moduleName, var, varsize, numvars,
+ mibloc, mibloclen, priority, 0, 0, NULL);
+}
+
+int
+register_mib(const char *moduleName,
+ struct variable *var,
+ size_t varsize,
+ size_t numvars, oid * mibloc, size_t mibloclen)
+{
+ return register_mib_priority(moduleName, var, varsize, numvars,
+ mibloc, mibloclen, DEFAULT_MIB_PRIORITY);
+}
+
+void
+netsnmp_subtree_unload(netsnmp_subtree *sub, netsnmp_subtree *prev, const char *context)
+{
+ netsnmp_subtree *ptr;
+
+ DEBUGMSGTL(("register_mib", "unload("));
+ if (sub != NULL) {
+ DEBUGMSGOID(("register_mib", sub->start_a, sub->start_len));
+ } else {
+ DEBUGMSG(("register_mib", "[NIL]"));
+ }
+ DEBUGMSG(("register_mib", ", "));
+ if (prev != NULL) {
+ DEBUGMSGOID(("register_mib", prev->start_a, prev->start_len));
+ } else {
+ DEBUGMSG(("register_mib", "[NIL]"));
+ }
+ DEBUGMSG(("register_mib", ")\n"));
+
+ if (prev != NULL) { /* non-leading entries are easy */
+ prev->children = sub->children;
+ invalidate_lookup_cache(context);
+ return;
+ }
+ /*
+ * otherwise, we need to amend our neighbours as well
+ */
+
+ if (sub->children == NULL) { /* just remove this node completely */
+ for (ptr = sub->prev; ptr; ptr = ptr->children) {
+ netsnmp_subtree_change_next(ptr, sub->next);
+ }
+ for (ptr = sub->next; ptr; ptr = ptr->children) {
+ netsnmp_subtree_change_prev(ptr, sub->prev);
+ }
+
+ if (sub->prev == NULL) {
+ netsnmp_subtree_replace_first(sub->next, context);
+ }
+
+ } else {
+ for (ptr = sub->prev; ptr; ptr = ptr->children)
+ netsnmp_subtree_change_next(ptr, sub->children);
+ for (ptr = sub->next; ptr; ptr = ptr->children)
+ netsnmp_subtree_change_prev(ptr, sub->children);
+
+ if (sub->prev == NULL) {
+ netsnmp_subtree_replace_first(sub->children, context);
+ }
+ }
+ invalidate_lookup_cache(context);
+}
+
+/**
+ * Unregisters an OID that has an associated context name value.
+ * Typically used when a module has multiple contexts defined. The parameters
+ * priority, range_subid, and range_ubound should be used in conjunction with
+ * agentx, see RFC 2741, otherwise these values should always be 0.
+ *
+ * @param name the specific OID to unregister if it conatins the associated
+ * context.
+ *
+ * @param len the length of the OID, use OID_LENGTH macro.
+ *
+ * @param priority a value between 1 and 255, used to achieve a desired
+ * configuration when different sessions register identical or
+ * overlapping regions. Subagents with no particular
+ * knowledge of priority should register with the default
+ * value of 127.
+ *
+ * @param range_subid permits specifying a range in place of one of a subtree
+ * sub-identifiers. When this value is zero, no range is
+ * being specified.
+ *
+ * @param range_ubound the upper bound of a sub-identifier's range.
+ * This field is present only if range_subid is not 0.
+ *
+ * @param context a context name that has been created
+ *
+ * @return
+ *
+ */
+int
+unregister_mib_context(oid * name, size_t len, int priority,
+ int range_subid, oid range_ubound,
+ const char *context)
+{
+ netsnmp_subtree *list, *myptr;
+ netsnmp_subtree *prev, *child, *next; /* loop through children */
+ struct register_parameters reg_parms;
+ int old_lookup_cache_val = netsnmp_get_lookup_cache_size();
+ int unregistering = 1;
+ int orig_subid_val = -1;
+
+ netsnmp_set_lookup_cache_size(0);
+
+ if ((range_subid != 0) && (range_subid <= len))
+ orig_subid_val = name[range_subid-1];
+
+ while(unregistering){
+ DEBUGMSGTL(("register_mib", "unregistering "));
+ DEBUGMSGOIDRANGE(("register_mib", name, len, range_subid, range_ubound));
+ DEBUGMSG(("register_mib", "\n"));
+
+ list = netsnmp_subtree_find(name, len, netsnmp_subtree_find_first(context),
+ context);
+ if (list == NULL) {
+ return MIB_NO_SUCH_REGISTRATION;
+ }
+
+ for (child = list, prev = NULL; child != NULL;
+ prev = child, child = child->children) {
+ if (netsnmp_oid_equals(child->name_a, child->namelen, name, len) == 0 &&
+ child->priority == priority) {
+ break; /* found it */
+ }
+ }
+
+ if (child == NULL) {
+ return MIB_NO_SUCH_REGISTRATION;
+ }
+
+ netsnmp_subtree_unload(child, prev, context);
+ myptr = child; /* remember this for later */
+
+ /*
+ * Now handle any occurances in the following subtrees,
+ * as a result of splitting this range. Due to the
+ * nature of the way such splits work, the first
+ * subtree 'slice' that doesn't refer to the given
+ * name marks the end of the original region.
+ *
+ * This should also serve to register ranges.
+ */
+
+ for (list = myptr->next; list != NULL; list = next) {
+ next = list->next; /* list gets freed sometimes; cache next */
+ for (child = list, prev = NULL; child != NULL;
+ prev = child, child = child->children) {
+ if ((netsnmp_oid_equals(child->name_a, child->namelen,
+ name, len) == 0) &&
+ (child->priority == priority)) {
+ netsnmp_subtree_unload(child, prev, context);
+ netsnmp_subtree_free(child);
+ break;
+ }
+ }
+ if (child == NULL) /* Didn't find the given name */
+ break;
+ }
+
+ /* Maybe we are in a range... */
+ if (orig_subid_val != -1){
+ if (++name[range_subid-1] >= orig_subid_val+range_ubound)
+ {
+ unregistering=0;
+ name[range_subid-1] = orig_subid_val;
+ }
+ }
+ else {
+ unregistering=0;
+ }
+ }
+
+ memset(&reg_parms, 0x0, sizeof(reg_parms));
+ reg_parms.name = name;
+ reg_parms.namelen = len;
+ reg_parms.priority = priority;
+ reg_parms.range_subid = range_subid;
+ reg_parms.range_ubound = range_ubound;
+ reg_parms.flags = 0x00; /* this is okay I think */
+ reg_parms.contextName = context;
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_UNREGISTER_OID, &reg_parms);
+
+ netsnmp_subtree_free(myptr);
+ netsnmp_set_lookup_cache_size(old_lookup_cache_val);
+ invalidate_lookup_cache(context);
+ return MIB_UNREGISTERED_OK;
+}
+
+int
+netsnmp_unregister_mib_table_row(oid * name, size_t len, int priority,
+ int var_subid, oid range_ubound,
+ const char *context)
+{
+ netsnmp_subtree *list, *myptr, *futureptr;
+ netsnmp_subtree *prev, *child; /* loop through children */
+ struct register_parameters reg_parms;
+ oid range_lbound = name[var_subid - 1];
+
+ DEBUGMSGTL(("register_mib", "unregistering "));
+ DEBUGMSGOIDRANGE(("register_mib", name, len, var_subid, range_ubound));
+ DEBUGMSG(("register_mib", "\n"));
+
+ for (; name[var_subid - 1] <= range_ubound; name[var_subid - 1]++) {
+ list = netsnmp_subtree_find(name, len,
+ netsnmp_subtree_find_first(context), context);
+
+ if (list == NULL) {
+ continue;
+ }
+
+ for (child = list, prev = NULL; child != NULL;
+ prev = child, child = child->children) {
+
+ if (netsnmp_oid_equals(child->name_a, child->namelen,
+ name, len) == 0 &&
+ (child->priority == priority)) {
+ break; /* found it */
+ }
+ }
+
+ if (child == NULL) {
+ continue;
+ }
+
+ netsnmp_subtree_unload(child, prev, context);
+ myptr = child; /* remember this for later */
+
+ for (list = myptr->next; list != NULL; list = futureptr) {
+ /* remember the next spot in the list in case we free this node */
+ futureptr = list->next;
+
+ /* check each child */
+ for (child = list, prev = NULL; child != NULL;
+ prev = child, child = child->children) {
+
+ if (netsnmp_oid_equals(child->name_a, child->namelen,
+ name, len) == 0 &&
+ (child->priority == priority)) {
+ netsnmp_subtree_unload(child, prev, context);
+ netsnmp_subtree_free(child);
+ break;
+ }
+ }
+
+ /* XXX: wjh: not sure why we're bailing here */
+ if (child == NULL) { /* Didn't find the given name */
+ break;
+ }
+ }
+ netsnmp_subtree_free(myptr);
+ }
+
+ name[var_subid - 1] = range_lbound;
+ memset(&reg_parms, 0x0, sizeof(reg_parms));
+ reg_parms.name = name;
+ reg_parms.namelen = len;
+ reg_parms.priority = priority;
+ reg_parms.range_subid = var_subid;
+ reg_parms.range_ubound = range_ubound;
+ reg_parms.flags = 0x00; /* this is okay I think */
+ reg_parms.contextName = context;
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_UNREGISTER_OID, &reg_parms);
+
+ return 0;
+}
+
+int
+unregister_mib_range(oid * name, size_t len, int priority,
+ int range_subid, oid range_ubound)
+{
+ return unregister_mib_context(name, len, priority, range_subid,
+ range_ubound, "");
+}
+
+int
+unregister_mib_priority(oid * name, size_t len, int priority)
+{
+ return unregister_mib_range(name, len, priority, 0, 0);
+}
+
+int
+unregister_mib(oid * name, size_t len)
+{
+ return unregister_mib_priority(name, len, DEFAULT_MIB_PRIORITY);
+}
+
+void
+unregister_mibs_by_session(netsnmp_session * ss)
+{
+ netsnmp_subtree *list, *list2;
+ netsnmp_subtree *child, *prev, *next_child;
+ struct register_parameters rp;
+ subtree_context_cache *contextptr;
+
+ DEBUGMSGTL(("register_mib", "unregister_mibs_by_session(%p) ctxt \"%s\"\n",
+ ss, (ss && ss->contextName) ? ss->contextName : "[NIL]"));
+
+ for (contextptr = get_top_context_cache(); contextptr != NULL;
+ contextptr = contextptr->next) {
+ for (list = contextptr->first_subtree; list != NULL; list = list2) {
+ list2 = list->next;
+
+ for (child = list, prev = NULL; child != NULL; child = next_child){
+ next_child = child->children;
+
+ if (((!ss || ss->flags & SNMP_FLAGS_SUBSESSION) &&
+ child->session == ss) ||
+ (!(!ss || ss->flags & SNMP_FLAGS_SUBSESSION) && child->session &&
+ child->session->subsession == ss)) {
+
+ memset(&rp,0x0,sizeof(rp));
+ rp.name = child->name_a;
+ child->name_a = NULL;
+ rp.namelen = child->namelen;
+ rp.priority = child->priority;
+ rp.range_subid = child->range_subid;
+ rp.range_ubound = child->range_ubound;
+ rp.timeout = child->timeout;
+ rp.flags = child->flags;
+ if ((NULL != child->reginfo) &&
+ (NULL != child->reginfo->contextName))
+ rp.contextName = child->reginfo->contextName;
+
+ if (child->reginfo != NULL) {
+ /*
+ * Don't let's free the session pointer just yet!
+ */
+ child->reginfo->handler->myvoid = NULL;
+ netsnmp_handler_registration_free(child->reginfo);
+ child->reginfo = NULL;
+ }
+
+ netsnmp_subtree_unload(child, prev, contextptr->context_name);
+ netsnmp_subtree_free(child);
+
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_UNREGISTER_OID, &rp);
+ SNMP_FREE(rp.name);
+ } else {
+ prev = child;
+ }
+ }
+ }
+ netsnmp_subtree_join(contextptr->first_subtree);
+ }
+}
+
+/*
+ * in_a_view: determines if a given snmp_pdu is allowed to see a
+ * given name/namelen OID pointer
+ * name IN - name of var, OUT - name matched
+ * nameLen IN -number of sub-ids in name, OUT - subid-is in matched name
+ * pi IN - relevant auth info re PDU
+ * cvp IN - relevant auth info re mib module
+ */
+
+int
+in_a_view(oid *name, size_t *namelen, netsnmp_pdu *pdu, int type)
+{
+ struct view_parameters view_parms;
+
+ if (pdu->flags & UCD_MSG_FLAG_ALWAYS_IN_VIEW) {
+ /* Enable bypassing of view-based access control */
+ return VACM_SUCCESS;
+ }
+
+ /*
+ * check for v1 and counter64s, since snmpv1 doesn't support it
+ */
+#ifndef NETSNMP_DISABLE_SNMPV1
+ if (pdu->version == SNMP_VERSION_1 && type == ASN_COUNTER64) {
+ return VACM_NOTINVIEW;
+ }
+#endif
+
+ view_parms.pdu = pdu;
+ view_parms.name = name;
+ if (namelen != NULL) {
+ view_parms.namelen = *namelen;
+ } else {
+ view_parms.namelen = 0;
+ }
+ view_parms.errorcode = 0;
+ view_parms.check_subtree = 0;
+
+ switch (pdu->version) {
+#ifndef NETSNMP_DISABLE_SNMPV1
+ case SNMP_VERSION_1:
+#endif
+#ifndef NETSNMP_DISABLE_SNMPV2C
+ case SNMP_VERSION_2c:
+#endif
+ case SNMP_VERSION_3:
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_ACM_CHECK, &view_parms);
+ return view_parms.errorcode;
+ }
+ return VACM_NOSECNAME;
+}
+
+/*
+ * check_acces: determines if a given snmp_pdu is ever going to be
+ * allowed to do anynthing or if it's not going to ever be
+ * authenticated.
+ */
+int
+check_access(netsnmp_pdu *pdu)
+{ /* IN - pdu being checked */
+ struct view_parameters view_parms;
+ view_parms.pdu = pdu;
+ view_parms.name = 0;
+ view_parms.namelen = 0;
+ view_parms.errorcode = 0;
+ view_parms.check_subtree = 0;
+
+ if (pdu->flags & UCD_MSG_FLAG_ALWAYS_IN_VIEW) {
+ /* Enable bypassing of view-based access control */
+ return 0;
+ }
+
+ switch (pdu->version) {
+#ifndef NETSNMP_DISABLE_SNMPV1
+ case SNMP_VERSION_1:
+#endif
+#ifndef NETSNMP_DISABLE_SNMPV2C
+ case SNMP_VERSION_2c:
+#endif
+ case SNMP_VERSION_3:
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_ACM_CHECK_INITIAL, &view_parms);
+ return view_parms.errorcode;
+ }
+ return 1;
+}
+
+/** checks to see if everything within a
+ * given subtree is either: in view, not in view, or possibly both.
+ * If the entire subtree is not-in-view we can use this information to
+ * skip calling the sub-handlers entirely.
+ * @returns 0 if entire subtree is accessible, 5 if not and 7 if
+ * portions are both. 1 on error (illegal pdu version).
+ */
+int
+netsnmp_acm_check_subtree(netsnmp_pdu *pdu, oid *name, size_t namelen)
+{ /* IN - pdu being checked */
+ struct view_parameters view_parms;
+ view_parms.pdu = pdu;
+ view_parms.name = name;
+ view_parms.namelen = namelen;
+ view_parms.errorcode = 0;
+ view_parms.check_subtree = 1;
+
+ if (pdu->flags & UCD_MSG_FLAG_ALWAYS_IN_VIEW) {
+ /* Enable bypassing of view-based access control */
+ return 0;
+ }
+
+ switch (pdu->version) {
+#ifndef NETSNMP_DISABLE_SNMPV1
+ case SNMP_VERSION_1:
+#endif
+#ifndef NETSNMP_DISABLE_SNMPV2C
+ case SNMP_VERSION_2c:
+#endif
+ case SNMP_VERSION_3:
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_ACM_CHECK_SUBTREE, &view_parms);
+ return view_parms.errorcode;
+ }
+ return 1;
+}
+
+#define SUBTREE_DEFAULT_CACHE_SIZE 8
+#define SUBTREE_MAX_CACHE_SIZE 32
+int lookup_cache_size = 0; /*enabled later after registrations are loaded */
+
+typedef struct lookup_cache_s {
+ netsnmp_subtree *next;
+ netsnmp_subtree *previous;
+} lookup_cache;
+
+typedef struct lookup_cache_context_s {
+ char *context;
+ struct lookup_cache_context_s *next;
+ int thecachecount;
+ int currentpos;
+ lookup_cache cache[SUBTREE_MAX_CACHE_SIZE];
+} lookup_cache_context;
+
+static lookup_cache_context *thecontextcache = NULL;
+
+/** set the lookup cache size for optimized agent registration performance.
+ * @param newsize set to the maximum size of a cache for a given
+ * context. Set to 0 to completely disable caching, or to -1 to set
+ * to the default cache size (8), or to a number of your chosing. The
+ * rough guide is that it should be equal to the maximum number of
+ * simultanious managers you expect to talk to the agent (M) times 80%
+ * (or so, he says randomly) the average number (N) of varbinds you
+ * expect to receive in a given request for a manager. ie, M times N.
+ * Bigger does NOT necessarily mean better. Certainly 16 should be an
+ * upper limit. 32 is the hard coded limit.
+ */
+void
+netsnmp_set_lookup_cache_size(int newsize) {
+ if (newsize < 0)
+ lookup_cache_size = SUBTREE_DEFAULT_CACHE_SIZE;
+ else if (newsize < SUBTREE_MAX_CACHE_SIZE)
+ lookup_cache_size = newsize;
+ else
+ lookup_cache_size = SUBTREE_MAX_CACHE_SIZE;
+}
+
+/** retrieves the current value of the lookup cache size
+ * @return the current lookup cache size
+ */
+int
+netsnmp_get_lookup_cache_size(void) {
+ return lookup_cache_size;
+}
+
+NETSNMP_STATIC_INLINE lookup_cache_context *
+get_context_lookup_cache(const char *context) {
+ lookup_cache_context *ptr;
+ if (!context)
+ context = "";
+
+ for(ptr = thecontextcache; ptr; ptr = ptr->next) {
+ if (strcmp(ptr->context, context) == 0)
+ break;
+ }
+ if (!ptr) {
+ if (netsnmp_subtree_find_first(context)) {
+ ptr = SNMP_MALLOC_TYPEDEF(lookup_cache_context);
+ ptr->next = thecontextcache;
+ ptr->context = strdup(context);
+ thecontextcache = ptr;
+ } else {
+ return NULL;
+ }
+ }
+ return ptr;
+}
+
+NETSNMP_STATIC_INLINE void
+lookup_cache_add(const char *context,
+ netsnmp_subtree *next, netsnmp_subtree *previous) {
+ lookup_cache_context *cptr;
+
+ if ((cptr = get_context_lookup_cache(context)) == NULL)
+ return;
+
+ if (cptr->thecachecount < lookup_cache_size)
+ cptr->thecachecount++;
+
+ cptr->cache[cptr->currentpos].next = next;
+ cptr->cache[cptr->currentpos].previous = previous;
+
+ if (++cptr->currentpos >= lookup_cache_size)
+ cptr->currentpos = 0;
+}
+
+NETSNMP_STATIC_INLINE void
+lookup_cache_replace(lookup_cache *ptr,
+ netsnmp_subtree *next, netsnmp_subtree *previous) {
+
+ ptr->next = next;
+ ptr->previous = previous;
+}
+
+NETSNMP_STATIC_INLINE lookup_cache *
+lookup_cache_find(const char *context, oid *name, size_t name_len,
+ int *retcmp) {
+ lookup_cache_context *cptr;
+ lookup_cache *ret = NULL;
+ int cmp;
+ int i;
+
+ if ((cptr = get_context_lookup_cache(context)) == NULL)
+ return NULL;
+
+ for(i = 0; i < cptr->thecachecount && i < lookup_cache_size; i++) {
+ if (cptr->cache[i].previous->start_a)
+ cmp = snmp_oid_compare(name, name_len,
+ cptr->cache[i].previous->start_a,
+ cptr->cache[i].previous->start_len);
+ else
+ cmp = 1;
+ if (cmp >= 0) {
+ *retcmp = cmp;
+ ret = &(cptr->cache[i]);
+ }
+ }
+ return ret;
+}
+
+NETSNMP_STATIC_INLINE void
+invalidate_lookup_cache(const char *context) {
+ lookup_cache_context *cptr;
+ if ((cptr = get_context_lookup_cache(context)) != NULL) {
+ cptr->thecachecount = 0;
+ cptr->currentpos = 0;
+ }
+}
+
+netsnmp_subtree *
+netsnmp_subtree_find_prev(oid *name, size_t len, netsnmp_subtree *subtree,
+ const char *context_name)
+{
+ lookup_cache *lookup_cache = NULL;
+ netsnmp_subtree *myptr = NULL, *previous = NULL;
+ int cmp = 1;
+ size_t ll_off = 0;
+
+ if (subtree) {
+ myptr = subtree;
+ } else {
+ /* look through everything */
+ if (lookup_cache_size) {
+ lookup_cache = lookup_cache_find(context_name, name, len, &cmp);
+ if (lookup_cache) {
+ myptr = lookup_cache->next;
+ previous = lookup_cache->previous;
+ }
+ if (!myptr)
+ myptr = netsnmp_subtree_find_first(context_name);
+ } else {
+ myptr = netsnmp_subtree_find_first(context_name);
+ }
+ }
+
+ /*
+ * this optimization causes a segfault on sf cf alpha-linux1.
+ * ifdef out until someone figures out why and fixes it. xxx-rks 20051117
+ */
+#ifndef __alpha
+#define WTEST_OPTIMIZATION 1
+#endif
+#ifdef WTEST_OPTIMIZATION
+ DEBUGMSGTL(("wtest","oid in: "));
+ DEBUGMSGOID(("wtest", name, len));
+ DEBUGMSG(("wtest","\n"));
+#endif
+ for (; myptr != NULL; previous = myptr, myptr = myptr->next) {
+#ifdef WTEST_OPTIMIZATION
+ /* Compare the incoming oid with the linked list. If we have
+ results of previous compares, its faster to make sure the
+ length we differed in the last check is greater than the
+ length between this pointer and the last then we don't need
+ to actually perform a comparison */
+ DEBUGMSGTL(("wtest","oid cmp: "));
+ DEBUGMSGOID(("wtest", myptr->start_a, myptr->start_len));
+ DEBUGMSG(("wtest"," --- off = %d, in off = %d test = %d\n",
+ myptr->oid_off, ll_off,
+ !(ll_off && myptr->oid_off &&
+ myptr->oid_off > ll_off)));
+ if (!(ll_off && myptr->oid_off && myptr->oid_off > ll_off) &&
+ netsnmp_oid_compare_ll(name, len,
+ myptr->start_a, myptr->start_len,
+ &ll_off) < 0) {
+#else
+ if (snmp_oid_compare(name, len, myptr->start_a, myptr->start_len) < 0) {
+#endif
+ if (lookup_cache_size && previous && cmp) {
+ if (lookup_cache) {
+ lookup_cache_replace(lookup_cache, myptr, previous);
+ } else {
+ lookup_cache_add(context_name, myptr, previous);
+ }
+ }
+ return previous;
+ }
+ }
+ return previous;
+}
+
+netsnmp_subtree *
+netsnmp_subtree_find_next(oid *name, size_t len,
+ netsnmp_subtree *subtree, const char *context_name)
+{
+ netsnmp_subtree *myptr = NULL;
+
+ myptr = netsnmp_subtree_find_prev(name, len, subtree, context_name);
+
+ if (myptr != NULL) {
+ myptr = myptr->next;
+ while (myptr != NULL && (myptr->variables == NULL ||
+ myptr->variables_len == 0)) {
+ myptr = myptr->next;
+ }
+ return myptr;
+ } else if (subtree != NULL && snmp_oid_compare(name, len,
+ subtree->start_a, subtree->start_len) < 0) {
+ return subtree;
+ } else {
+ return NULL;
+ }
+}
+
+netsnmp_subtree *
+netsnmp_subtree_find(oid *name, size_t len, netsnmp_subtree *subtree,
+ const char *context_name)
+{
+ netsnmp_subtree *myptr;
+
+ myptr = netsnmp_subtree_find_prev(name, len, subtree, context_name);
+ if (myptr && myptr->end_a &&
+ snmp_oid_compare(name, len, myptr->end_a, myptr->end_len)<0) {
+ return myptr;
+ }
+
+ return NULL;
+}
+
+netsnmp_session *
+get_session_for_oid(oid *name, size_t len, const char *context_name)
+{
+ netsnmp_subtree *myptr;
+
+ myptr = netsnmp_subtree_find_prev(name, len,
+ netsnmp_subtree_find_first(context_name),
+ context_name);
+
+ while (myptr && myptr->variables == NULL) {
+ myptr = myptr->next;
+ }
+
+ if (myptr == NULL) {
+ return NULL;
+ } else {
+ return myptr->session;
+ }
+}
+
+void
+setup_tree(void)
+{
+ oid ccitt[1] = { 0 };
+ oid iso[1] = { 1 };
+ oid joint_ccitt_iso[1] = { 2 };
+
+#ifdef USING_AGENTX_SUBAGENT_MODULE
+ int role = netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_ROLE);
+
+ netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE,
+ MASTER_AGENT);
+#endif
+
+ /*
+ * we need to have the oid's in the heap, that we can *free* it for every case,
+ * thats the purpose of the duplicate_objid's
+ */
+ netsnmp_register_null(snmp_duplicate_objid(ccitt, 1), 1);
+ netsnmp_register_null(snmp_duplicate_objid(iso, 1), 1);
+ netsnmp_register_null(snmp_duplicate_objid(joint_ccitt_iso, 1), 1);
+
+#ifdef USING_AGENTX_SUBAGENT_MODULE
+ netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE,
+ role);
+#endif
+}
+
+int
+remove_tree_entry (oid *name, size_t len) {
+
+ netsnmp_subtree *sub = NULL;
+
+ if ((sub = netsnmp_subtree_find(name, len, NULL, "")) == NULL) {
+ return MIB_NO_SUCH_REGISTRATION;
+ }
+
+ return unregister_mib_context(name, len, sub->priority,
+ sub->range_subid, sub->range_ubound, "");
+
+}
+
+
+void
+shutdown_tree(void) {
+ oid ccitt[1] = { 0 };
+ oid iso[1] = { 1 };
+ oid joint_ccitt_iso[1] = { 2 };
+
+ DEBUGMSGTL(("agent_registry", "shut down tree\n"));
+
+ remove_tree_entry(joint_ccitt_iso, 1);
+ remove_tree_entry(iso, 1);
+ remove_tree_entry(ccitt, 1);
+
+}
+
+void
+clear_subtree (netsnmp_subtree *sub) {
+
+ netsnmp_subtree *nxt;
+
+ if (sub == NULL)
+ return;
+
+ for(nxt = sub; nxt;) {
+ if (nxt->children != NULL) {
+ clear_subtree(nxt->children);
+ }
+ sub = nxt;
+ nxt = nxt->next;
+ netsnmp_subtree_free(sub);
+ }
+
+}
+
+void
+clear_lookup_cache(void) {
+
+ lookup_cache_context *ptr = NULL, *next = NULL;
+
+ ptr = thecontextcache;
+ while (ptr) {
+ next = ptr->next;
+ SNMP_FREE(ptr->context);
+ SNMP_FREE(ptr);
+ ptr = next;
+ }
+ thecontextcache = NULL; /* !!! */
+}
+
+void
+clear_context(void) {
+
+ subtree_context_cache *ptr = NULL, *next = NULL;
+
+ DEBUGMSGTL(("agent_registry", "clear context\n"));
+
+ ptr = get_top_context_cache();
+ while (ptr) {
+ next = ptr->next;
+
+ if (ptr->first_subtree) {
+ clear_subtree(ptr->first_subtree);
+ }
+
+ SNMP_FREE(ptr->context_name);
+ SNMP_FREE(ptr);
+
+ ptr = next;
+ }
+ context_subtrees = NULL; /* !!! */
+ clear_lookup_cache();
+}
+
+extern void dump_idx_registry(void);
+void
+dump_registry(void)
+{
+ struct variable *vp = NULL;
+ netsnmp_subtree *myptr, *myptr2;
+ u_char *s = NULL, *e = NULL, *v = NULL;
+ size_t sl = 256, el = 256, vl = 256, sl_o = 0, el_o = 0, vl_o = 0;
+ int i = 0;
+
+ if ((s = (u_char *) calloc(sl, 1)) != NULL &&
+ (e = (u_char *) calloc(sl, 1)) != NULL &&
+ (v = (u_char *) calloc(sl, 1)) != NULL) {
+
+ subtree_context_cache *ptr;
+ for (ptr = context_subtrees; ptr; ptr = ptr->next) {
+ printf("Subtrees for Context: %s\n", ptr->context_name);
+ for (myptr = ptr->first_subtree; myptr != NULL;
+ myptr = myptr->next) {
+ sl_o = el_o = vl_o = 0;
+
+ if (!sprint_realloc_objid(&s, &sl, &sl_o, 1,
+ myptr->start_a,
+ myptr->start_len)) {
+ break;
+ }
+ if (!sprint_realloc_objid(&e, &el, &el_o, 1,
+ myptr->end_a,
+ myptr->end_len)) {
+ break;
+ }
+
+ if (myptr->variables) {
+ printf("%02x ( %s - %s ) [", myptr->flags, s, e);
+ for (i = 0, vp = myptr->variables;
+ i < myptr->variables_len; i++) {
+ vl_o = 0;
+ if (!sprint_realloc_objid
+ (&v, &vl, &vl_o, 1, vp->name, vp->namelen)) {
+ break;
+ }
+ printf("%s, ", v);
+ vp = (struct variable *) ((char *) vp +
+ myptr->variables_width);
+ }
+ printf("]\n");
+ } else {
+ printf("%02x %s - %s \n", myptr->flags, s, e);
+ }
+ for (myptr2 = myptr; myptr2 != NULL;
+ myptr2 = myptr2->children) {
+ if (myptr2->label_a && myptr2->label_a[0]) {
+ if (strcmp(myptr2->label_a, "old_api") == 0) {
+ struct variable *vp =
+ myptr2->reginfo->handler->myvoid;
+
+ if (!sprint_realloc_objid(&s, &sl, &sl_o, 1,
+ vp->name, vp->namelen)) {
+ continue;
+ }
+ printf("\t%s[%s] %p var %s\n", myptr2->label_a,
+ myptr2->reginfo->handlerName ?
+ myptr2->reginfo->handlerName : "no-name",
+ myptr2->reginfo, s);
+ } else {
+ printf("\t%s %s %p\n", myptr2->label_a,
+ myptr2->reginfo->handlerName ?
+ myptr2->reginfo->handlerName : "no-handler-name",
+ myptr2->reginfo);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (s != NULL) {
+ SNMP_FREE(s);
+ }
+ if (e != NULL) {
+ SNMP_FREE(e);
+ }
+ if (v != NULL) {
+ SNMP_FREE(v);
+ }
+
+ dump_idx_registry();
+}
+
+int external_signal_scheduled[NUM_EXTERNAL_SIGS];
+void (*external_signal_handler[NUM_EXTERNAL_SIGS]) (int);
+
+#ifndef WIN32
+
+/*
+ * TODO: add agent_SIGXXX_handler functions and `case SIGXXX: ...' lines
+ * below for every single that might be handled by register_signal().
+ */
+
+RETSIGTYPE
+agent_SIGCHLD_handler(int sig)
+{
+ external_signal_scheduled[SIGCHLD]++;
+#ifndef HAVE_SIGACTION
+ /*
+ * signal() sucks. It *might* have SysV semantics, which means that
+ * * a signal handler is reset once it gets called. Ensure that it
+ * * remains active.
+ */
+ signal(SIGCHLD, agent_SIGCHLD_handler);
+#endif
+}
+
+int
+register_signal(int sig, void (*func) (int))
+{
+
+ switch (sig) {
+#if defined(SIGCHLD)
+ case SIGCHLD:
+#ifdef HAVE_SIGACTION
+ {
+ static struct sigaction act;
+ act.sa_handler = agent_SIGCHLD_handler;
+ sigemptyset(&act.sa_mask);
+ act.sa_flags = 0;
+ sigaction(SIGCHLD, &act, NULL);
+ }
+#else
+ signal(SIGCHLD, agent_SIGCHLD_handler);
+#endif
+ break;
+#endif
+ default:
+ snmp_log(LOG_CRIT,
+ "register_signal: signal %d cannot be handled\n", sig);
+ return SIG_REGISTRATION_FAILED;
+ }
+
+ external_signal_handler[sig] = func;
+ external_signal_scheduled[sig] = 0;
+
+ DEBUGMSGTL(("register_signal", "registered signal %d\n", sig));
+ return SIG_REGISTERED_OK;
+}
+
+int
+unregister_signal(int sig)
+{
+ signal(sig, SIG_DFL);
+ DEBUGMSGTL(("unregister_signal", "unregistered signal %d\n", sig));
+ return SIG_UNREGISTERED_OK;
+}
+
+#endif /* !WIN32 */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/agent_trap.c b/cleopatre/application/spidnetsnmp/agent/agent_trap.c
new file mode 100644
index 0000000000..53e7c59009
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/agent_trap.c
@@ -0,0 +1,1257 @@
+/*
+ * agent_trap.c
+ */
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+/** @defgroup agent_trap Trap generation routines for mib modules to use
+ * @ingroup agent
+ *
+ * @{
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#elif HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#include <net-snmp/utilities.h>
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/agent_trap.h>
+#include <net-snmp/agent/snmp_agent.h>
+#include <net-snmp/agent/agent_callbacks.h>
+
+#include <net-snmp/agent/agent_module_config.h>
+#include <net-snmp/agent/mib_module_config.h>
+
+#ifdef USING_AGENTX_PROTOCOL_MODULE
+#include "agentx/protocol.h"
+#endif
+
+struct trap_sink {
+ netsnmp_session *sesp;
+ struct trap_sink *next;
+ int pdutype;
+ int version;
+};
+
+struct trap_sink *sinks = NULL;
+
+extern struct timeval starttime;
+
+oid objid_enterprisetrap[] = { NETSNMP_NOTIFICATION_MIB };
+oid trap_version_id[] = { NETSNMP_SYSTEM_MIB };
+int enterprisetrap_len;
+int trap_version_id_len;
+
+#define SNMPV2_TRAPS_PREFIX SNMP_OID_SNMPMODULES,1,1,5
+oid trap_prefix[] = { SNMPV2_TRAPS_PREFIX };
+oid cold_start_oid[] = { SNMPV2_TRAPS_PREFIX, 1 }; /* SNMPv2-MIB */
+oid warm_start_oid[] = { SNMPV2_TRAPS_PREFIX, 2 }; /* SNMPv2-MIB */
+oid link_down_oid[] = { SNMPV2_TRAPS_PREFIX, 3 }; /* IF-MIB */
+oid link_up_oid[] = { SNMPV2_TRAPS_PREFIX, 4 }; /* IF-MIB */
+oid auth_fail_oid[] = { SNMPV2_TRAPS_PREFIX, 5 }; /* SNMPv2-MIB */
+oid egp_xxx_oid[] = { SNMPV2_TRAPS_PREFIX, 99 }; /* ??? */
+
+#define SNMPV2_TRAP_OBJS_PREFIX SNMP_OID_SNMPMODULES,1,1,4
+oid snmptrap_oid[] = { SNMPV2_TRAP_OBJS_PREFIX, 1, 0 };
+oid snmptrapenterprise_oid[] =
+ { SNMPV2_TRAP_OBJS_PREFIX, 3, 0 };
+oid sysuptime_oid[] = { SNMP_OID_MIB2, 1, 3, 0 };
+size_t snmptrap_oid_len;
+size_t snmptrapenterprise_oid_len;
+size_t sysuptime_oid_len;
+
+#define SNMPV2_COMM_OBJS_PREFIX SNMP_OID_SNMPMODULES,18,1
+oid agentaddr_oid[] = { SNMPV2_COMM_OBJS_PREFIX, 3, 0 };
+size_t agentaddr_oid_len;
+oid community_oid[] = { SNMPV2_COMM_OBJS_PREFIX, 4, 0 };
+size_t community_oid_len;
+#if !defined(NETSNMP_DISABLE_SNMPV1) || !defined(NETSNMP_DISABLE_SNMPV2C)
+char *snmp_trapcommunity = NULL;
+#endif
+
+
+#define SNMP_AUTHENTICATED_TRAPS_ENABLED 1
+#define SNMP_AUTHENTICATED_TRAPS_DISABLED 2
+
+int snmp_enableauthentraps = SNMP_AUTHENTICATED_TRAPS_DISABLED;
+int snmp_enableauthentrapsset = 0;
+
+/*
+ * Prototypes
+ */
+ /*
+ * static int create_v1_trap_session (const char *, u_short, const char *);
+ * static int create_v2_trap_session (const char *, u_short, const char *);
+ * static int create_v2_inform_session (const char *, u_short, const char *);
+ * static void free_trap_session (struct trap_sink *sp);
+ * static void send_v1_trap (netsnmp_session *, int, int);
+ * static void send_v2_trap (netsnmp_session *, int, int, int);
+ */
+
+
+ /*******************
+ *
+ * Trap session handling
+ *
+ *******************/
+
+void
+init_traps(void)
+{
+ enterprisetrap_len = OID_LENGTH(objid_enterprisetrap);
+ trap_version_id_len = OID_LENGTH(trap_version_id);
+ snmptrap_oid_len = OID_LENGTH(snmptrap_oid);
+ snmptrapenterprise_oid_len = OID_LENGTH(snmptrapenterprise_oid);
+ sysuptime_oid_len = OID_LENGTH(sysuptime_oid);
+ agentaddr_oid_len = OID_LENGTH(agentaddr_oid);
+ community_oid_len = OID_LENGTH(community_oid);
+}
+
+static void
+free_trap_session(struct trap_sink *sp)
+{
+ snmp_close(sp->sesp);
+ free(sp);
+}
+
+int
+add_trap_session(netsnmp_session * ss, int pdutype, int confirm,
+ int version)
+{
+ if (snmp_callback_available(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REGISTER_NOTIFICATIONS) ==
+ SNMPERR_SUCCESS) {
+ /*
+ * something else wants to handle notification registrations
+ */
+ struct agent_add_trap_args args;
+ DEBUGMSGTL(("trap", "adding callback trap sink\n"));
+ args.ss = ss;
+ args.confirm = confirm;
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REGISTER_NOTIFICATIONS,
+ (void *) &args);
+ } else {
+ /*
+ * no other support exists, handle it ourselves.
+ */
+ struct trap_sink *new_sink;
+
+ DEBUGMSGTL(("trap", "adding internal trap sink\n"));
+ new_sink = (struct trap_sink *) malloc(sizeof(*new_sink));
+ if (new_sink == NULL)
+ return 0;
+
+ new_sink->sesp = ss;
+ new_sink->pdutype = pdutype;
+ new_sink->version = version;
+ new_sink->next = sinks;
+ sinks = new_sink;
+ }
+ return 1;
+}
+
+int
+remove_trap_session(netsnmp_session * ss)
+{
+ struct trap_sink *sp = sinks, *prev = 0;
+
+ while (sp) {
+ if (sp->sesp == ss) {
+ if (prev) {
+ prev->next = sp->next;
+ } else {
+ sinks = sp->next;
+ }
+ /*
+ * I don't believe you *really* want to close the session here;
+ * it may still be in use for other purposes. In particular this
+ * is awkward for AgentX, since we want to call this function
+ * from the session's callback. Let's just free the trapsink
+ * data structure. [jbpn]
+ */
+ /*
+ * free_trap_session(sp);
+ */
+ free(sp);
+ return 1;
+ }
+ prev = sp;
+ sp = sp->next;
+ }
+ return 0;
+}
+
+#if !defined(NETSNMP_DISABLE_SNMPV1) || !defined(NETSNMP_DISABLE_SNMPV2C)
+static int
+create_trap_session2(const char *sink, const char* sinkport,
+ char *com, int version, int pdutype)
+{
+ netsnmp_transport *t;
+ netsnmp_session session, *sesp;
+
+ memset(&session, 0, sizeof(netsnmp_session));
+ session.version = version;
+ if (com) {
+ session.community = (u_char *) com;
+ session.community_len = strlen(com);
+ }
+
+ /*
+ * for informs, set retries to default
+ */
+ if (SNMP_MSG_INFORM == pdutype) {
+ session.timeout = SNMP_DEFAULT_TIMEOUT;
+ session.retries = SNMP_DEFAULT_RETRIES;
+ }
+
+ /*
+ * if the sink is localhost, bind to localhost, to reduce open ports.
+ */
+ if ((NULL == netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_CLIENT_ADDR)) &&
+ ((0 == strcmp("localhost",sink)) || (0 == strcmp("127.0.0.1",sink))))
+ session.localname = "localhost";
+
+ t = netsnmp_tdomain_transport_full("snmptrap", sink, 0, NULL, sinkport);
+ if (t != NULL) {
+ sesp = snmp_add(&session, t, NULL, NULL);
+
+ if (sesp) {
+ return add_trap_session(sesp, pdutype,
+ (pdutype == SNMP_MSG_INFORM), version);
+ }
+ }
+ /*
+ * diagnose snmp_open errors with the input netsnmp_session pointer
+ */
+ snmp_sess_perror("snmpd: create_trap_session", &session);
+ return 0;
+}
+
+int
+create_trap_session(char *sink, u_short sinkport,
+ char *com, int version, int pdutype)
+{
+ char buf[sizeof(sinkport) * 3 + 2];
+ if (sinkport != 0) {
+ sprintf(buf, ":%hu", sinkport);
+ snmp_log(LOG_NOTICE,
+ "Using a separate port number is deprecated, please correct "
+ "the sink specification instead");
+ }
+ return create_trap_session2(sink, sinkport ? buf : NULL, com, version,
+ pdutype);
+}
+
+#endif /* support for community based SNMP */
+
+#ifndef NETSNMP_DISABLE_SNMPV1
+static int
+create_v1_trap_session(char *sink, const char *sinkport, char *com)
+{
+ return create_trap_session2(sink, sinkport, com,
+ SNMP_VERSION_1, SNMP_MSG_TRAP);
+}
+#endif
+
+#ifndef NETSNMP_DISABLE_SNMPV2C
+static int
+create_v2_trap_session(const char *sink, const char *sinkport, char *com)
+{
+ return create_trap_session2(sink, sinkport, com,
+ SNMP_VERSION_2c, SNMP_MSG_TRAP2);
+}
+
+static int
+create_v2_inform_session(const char *sink, const char *sinkport, char *com)
+{
+ return create_trap_session2(sink, sinkport, com,
+ SNMP_VERSION_2c, SNMP_MSG_INFORM);
+}
+#endif
+
+void
+snmpd_free_trapsinks(void)
+{
+ struct trap_sink *sp = sinks;
+ while (sp) {
+ sinks = sinks->next;
+ free_trap_session(sp);
+ sp = sinks;
+ }
+}
+
+ /*******************
+ *
+ * Trap handling
+ *
+ *******************/
+
+
+netsnmp_pdu*
+convert_v2pdu_to_v1( netsnmp_pdu* template_v2pdu )
+{
+ netsnmp_pdu *template_v1pdu;
+ netsnmp_variable_list *first_vb, *vblist;
+ netsnmp_variable_list *var;
+ size_t len;
+
+ /*
+ * Make a copy of the v2 Trap PDU
+ * before starting to convert this
+ * into a v1 Trap PDU.
+ */
+ template_v1pdu = snmp_clone_pdu( template_v2pdu);
+ if (!template_v1pdu) {
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to copy v1 template PDU\n");
+ return NULL;
+ }
+ template_v1pdu->command = SNMP_MSG_TRAP;
+ first_vb = template_v1pdu->variables;
+ vblist = template_v1pdu->variables;
+
+ /*
+ * The first varbind should be the system uptime.
+ */
+ if (!vblist ||
+ snmp_oid_compare(vblist->name, vblist->name_length,
+ sysuptime_oid, sysuptime_oid_len)) {
+ snmp_log(LOG_WARNING,
+ "send_trap: no v2 sysUptime varbind to set from\n");
+ snmp_free_pdu(template_v1pdu);
+ return NULL;
+ }
+ template_v1pdu->time = *vblist->val.integer;
+ vblist = vblist->next_variable;
+
+ /*
+ * The second varbind should be the snmpTrapOID.
+ */
+ if (!vblist ||
+ snmp_oid_compare(vblist->name, vblist->name_length,
+ snmptrap_oid, snmptrap_oid_len)) {
+ snmp_log(LOG_WARNING,
+ "send_trap: no v2 trapOID varbind to set from\n");
+ snmp_free_pdu(template_v1pdu);
+ return NULL;
+ }
+
+ /*
+ * Check the v2 varbind list for any varbinds
+ * that are not valid in an SNMPv1 trap.
+ * This basically means Counter64 values.
+ *
+ * RFC 2089 said to omit such varbinds from the list.
+ * RFC 2576/3584 say to drop the trap completely.
+ */
+ for (var = vblist->next_variable; var; var = var->next_variable) {
+ if ( var->type == ASN_COUNTER64 ) {
+ snmp_log(LOG_WARNING,
+ "send_trap: v1 traps can't carry Counter64 varbinds\n");
+ snmp_free_pdu(template_v1pdu);
+ return NULL;
+ }
+ }
+
+ /*
+ * Set the generic & specific trap types,
+ * and the enterprise field from the v2 varbind list.
+ * If there's an agentIPAddress varbind, set the agent_addr too
+ */
+ if (!snmp_oid_compare(vblist->val.objid, OID_LENGTH(trap_prefix),
+ trap_prefix, OID_LENGTH(trap_prefix))) {
+ /*
+ * For 'standard' traps, extract the generic trap type
+ * from the snmpTrapOID value, and take the enterprise
+ * value from the 'snmpEnterprise' varbind.
+ */
+ template_v1pdu->trap_type =
+ vblist->val.objid[OID_LENGTH(trap_prefix)] - 1;
+ template_v1pdu->specific_type = 0;
+
+ var = find_varbind_in_list( vblist,
+ snmptrapenterprise_oid,
+ snmptrapenterprise_oid_len);
+ if (var) {
+ memdup((u_char**)&template_v1pdu->enterprise,
+ (const u_char*)var->val.objid, var->val_len);
+ template_v1pdu->enterprise_length = var->val_len/sizeof(oid);
+ } else {
+ template_v1pdu->enterprise = NULL;
+ template_v1pdu->enterprise_length = 0; /* XXX ??? */
+ }
+ } else {
+ /*
+ * For enterprise-specific traps, split the snmpTrapOID value
+ * into enterprise and specific trap
+ */
+ len = vblist->val_len / sizeof(oid);
+ if ( len <= 2 ) {
+ snmp_log(LOG_WARNING,
+ "send_trap: v2 trapOID too short (%d)\n", len);
+ snmp_free_pdu(template_v1pdu);
+ return NULL;
+ }
+ template_v1pdu->trap_type = SNMP_TRAP_ENTERPRISESPECIFIC;
+ template_v1pdu->specific_type = vblist->val.objid[len - 1];
+ len--;
+ if (vblist->val.objid[len-1] == 0)
+ len--;
+ SNMP_FREE(template_v1pdu->enterprise);
+ memdup((u_char**)&template_v1pdu->enterprise,
+ (u_char *)vblist->val.objid, len*sizeof(oid));
+ template_v1pdu->enterprise_length = len;
+ }
+ var = find_varbind_in_list( vblist, agentaddr_oid,
+ agentaddr_oid_len);
+ if (var) {
+ memcpy(template_v1pdu->agent_addr,
+ var->val.string, 4);
+ }
+
+ /*
+ * The remainder of the v2 varbind list is kept
+ * as the v2 varbind list. Update the PDU and
+ * free the two redundant varbinds.
+ */
+ template_v1pdu->variables = vblist->next_variable;
+ vblist->next_variable = NULL;
+ snmp_free_varbind( first_vb );
+
+ return template_v1pdu;
+}
+
+netsnmp_pdu*
+convert_v1pdu_to_v2( netsnmp_pdu* template_v1pdu )
+{
+ netsnmp_pdu *template_v2pdu;
+ netsnmp_variable_list *first_vb;
+ netsnmp_variable_list *var;
+ oid enterprise[MAX_OID_LEN];
+ size_t enterprise_len;
+
+ /*
+ * Make a copy of the v1 Trap PDU
+ * before starting to convert this
+ * into a v2 Trap PDU.
+ */
+ template_v2pdu = snmp_clone_pdu( template_v1pdu);
+ if (!template_v2pdu) {
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to copy v2 template PDU\n");
+ return NULL;
+ }
+ template_v2pdu->command = SNMP_MSG_TRAP2;
+ first_vb = template_v2pdu->variables;
+
+ /*
+ * Insert an snmpTrapOID varbind before the original v1 varbind list
+ * either using one of the standard defined trap OIDs,
+ * or constructing this from the PDU enterprise & specific trap fields
+ */
+ if (template_v1pdu->trap_type == SNMP_TRAP_ENTERPRISESPECIFIC) {
+ memcpy(enterprise, template_v1pdu->enterprise,
+ template_v1pdu->enterprise_length*sizeof(oid));
+ enterprise_len = template_v1pdu->enterprise_length;
+ enterprise[enterprise_len++] = 0;
+ enterprise[enterprise_len++] = template_v1pdu->specific_type;
+ } else {
+ memcpy(enterprise, cold_start_oid, sizeof(cold_start_oid));
+ enterprise[9] = template_v1pdu->trap_type+1;
+ enterprise_len = sizeof(cold_start_oid)/sizeof(oid);
+ }
+
+ var = NULL;
+ if (!snmp_varlist_add_variable( &var,
+ snmptrap_oid, snmptrap_oid_len,
+ ASN_OBJECT_ID,
+ (u_char*)enterprise, enterprise_len*sizeof(oid))) {
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to insert copied snmpTrapOID varbind\n");
+ snmp_free_pdu(template_v2pdu);
+ return NULL;
+ }
+ var->next_variable = template_v2pdu->variables;
+ template_v2pdu->variables = var;
+
+ /*
+ * Insert a sysUptime varbind at the head of the v2 varbind list
+ */
+ var = NULL;
+ if (!snmp_varlist_add_variable( &var,
+ sysuptime_oid, sysuptime_oid_len,
+ ASN_TIMETICKS,
+ (u_char*)&(template_v1pdu->time),
+ sizeof(template_v1pdu->time))) {
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to insert copied sysUptime varbind\n");
+ snmp_free_pdu(template_v2pdu);
+ return NULL;
+ }
+ var->next_variable = template_v2pdu->variables;
+ template_v2pdu->variables = var;
+
+ /*
+ * Append the other three conversion varbinds,
+ * (snmpTrapAgentAddr, snmpTrapCommunity & snmpTrapEnterprise)
+ * if they're not already present.
+ * But don't bomb out completely if there are problems.
+ */
+ var = find_varbind_in_list( template_v2pdu->variables,
+ agentaddr_oid, agentaddr_oid_len);
+ if (!var && (template_v1pdu->agent_addr[0]
+ || template_v1pdu->agent_addr[1]
+ || template_v1pdu->agent_addr[2]
+ || template_v1pdu->agent_addr[3])) {
+ if (!snmp_varlist_add_variable( &(template_v2pdu->variables),
+ agentaddr_oid, agentaddr_oid_len,
+ ASN_IPADDRESS,
+ (u_char*)&(template_v1pdu->agent_addr),
+ sizeof(template_v1pdu->agent_addr)))
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to append snmpTrapAddr varbind\n");
+ }
+ var = find_varbind_in_list( template_v2pdu->variables,
+ community_oid, community_oid_len);
+ if (!var && template_v1pdu->community) {
+ if (!snmp_varlist_add_variable( &(template_v2pdu->variables),
+ community_oid, community_oid_len,
+ ASN_OCTET_STR,
+ template_v1pdu->community,
+ template_v1pdu->community_len))
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to append snmpTrapCommunity varbind\n");
+ }
+ var = find_varbind_in_list( template_v2pdu->variables,
+ snmptrapenterprise_oid,
+ snmptrapenterprise_oid_len);
+ if (!var) {
+ if (!snmp_varlist_add_variable( &(template_v2pdu->variables),
+ snmptrapenterprise_oid, snmptrapenterprise_oid_len,
+ ASN_OBJECT_ID,
+ (u_char*)template_v1pdu->enterprise,
+ template_v1pdu->enterprise_length*sizeof(oid)))
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to append snmpEnterprise varbind\n");
+ }
+ return template_v2pdu;
+}
+
+/**
+ * This function allows you to make a distinction between generic
+ * traps from different classes of equipment. For example, you may want
+ * to handle a SNMP_TRAP_LINKDOWN trap for a particular device in a
+ * different manner to a generic system SNMP_TRAP_LINKDOWN trap.
+ *
+ *
+ * @param trap is the generic trap type. The trap types are:
+ * - SNMP_TRAP_COLDSTART:
+ * cold start
+ * - SNMP_TRAP_WARMSTART:
+ * warm start
+ * - SNMP_TRAP_LINKDOWN:
+ * link down
+ * - SNMP_TRAP_LINKUP:
+ * link up
+ * - SNMP_TRAP_AUTHFAIL:
+ * authentication failure
+ * - SNMP_TRAP_EGPNEIGHBORLOSS:
+ * egp neighbor loss
+ * - SNMP_TRAP_ENTERPRISESPECIFIC:
+ * enterprise specific
+ *
+ * @param specific is the specific trap value.
+ *
+ * @param enterprise is an enterprise oid in which you want to send specifc
+ * traps from.
+ *
+ * @param enterprise_length is the length of the enterprise oid, use macro,
+ * OID_LENGTH, to compute length.
+ *
+ * @param vars is used to supply list of variable bindings to form an SNMPv2
+ * trap.
+ *
+ * @param context currently unused
+ *
+ * @param flags currently unused
+ *
+ * @return void
+ *
+ * @see send_easy_trap
+ * @see send_v2trap
+ */
+int
+netsnmp_send_traps(int trap, int specific,
+ oid * enterprise, int enterprise_length,
+ netsnmp_variable_list * vars,
+ char * context, int flags)
+{
+ netsnmp_pdu *template_v1pdu;
+ netsnmp_pdu *template_v2pdu;
+ netsnmp_variable_list *vblist = NULL;
+ netsnmp_variable_list *trap_vb;
+ netsnmp_variable_list *var;
+ in_addr_t *pdu_in_addr_t;
+ u_long uptime;
+ struct trap_sink *sink;
+
+ DEBUGMSGTL(( "trap", "send_trap %d %d ", trap, specific));
+ DEBUGMSGOID(("trap", enterprise, enterprise_length));
+ DEBUGMSG(( "trap", "\n"));
+
+ if (vars) {
+ vblist = snmp_clone_varbind( vars );
+ if (!vblist) {
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to clone varbind list\n");
+ return -1;
+ }
+ }
+
+ if ( trap == -1 ) {
+ /*
+ * Construct the SNMPv2-style notification PDU
+ */
+ if (!vblist) {
+ snmp_log(LOG_WARNING,
+ "send_trap: called with NULL v2 information\n");
+ return -1;
+ }
+ template_v2pdu = snmp_pdu_create(SNMP_MSG_TRAP2);
+ if (!template_v2pdu) {
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to construct v2 template PDU\n");
+ snmp_free_varbind(vblist);
+ return -1;
+ }
+
+ /*
+ * Check the varbind list we've been given.
+ * If it starts with a 'sysUptime.0' varbind, then use that.
+ * Otherwise, prepend a suitable 'sysUptime.0' varbind.
+ */
+ if (!snmp_oid_compare( vblist->name, vblist->name_length,
+ sysuptime_oid, sysuptime_oid_len )) {
+ template_v2pdu->variables = vblist;
+ trap_vb = vblist->next_variable;
+ } else {
+ uptime = netsnmp_get_agent_uptime();
+ var = NULL;
+ snmp_varlist_add_variable( &var,
+ sysuptime_oid, sysuptime_oid_len,
+ ASN_TIMETICKS, (u_char*)&uptime, sizeof(uptime));
+ if (!var) {
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to insert sysUptime varbind\n");
+ snmp_free_pdu(template_v2pdu);
+ snmp_free_varbind(vblist);
+ return -1;
+ }
+ template_v2pdu->variables = var;
+ var->next_variable = vblist;
+ trap_vb = vblist;
+ }
+
+ /*
+ * 'trap_vb' should point to the snmpTrapOID.0 varbind,
+ * identifying the requested trap. If not then bomb out.
+ * If it's a 'standard' trap, then we need to append an
+ * snmpEnterprise varbind (if there isn't already one).
+ */
+ if (!trap_vb ||
+ snmp_oid_compare(trap_vb->name, trap_vb->name_length,
+ snmptrap_oid, snmptrap_oid_len)) {
+ snmp_log(LOG_WARNING,
+ "send_trap: no v2 trapOID varbind provided\n");
+ snmp_free_pdu(template_v2pdu);
+ return -1;
+ }
+ if (!snmp_oid_compare(vblist->val.objid, OID_LENGTH(trap_prefix),
+ trap_prefix, OID_LENGTH(trap_prefix))) {
+ var = find_varbind_in_list( template_v2pdu->variables,
+ snmptrapenterprise_oid,
+ snmptrapenterprise_oid_len);
+ if (!var &&
+ !snmp_varlist_add_variable( &(template_v2pdu->variables),
+ snmptrapenterprise_oid, snmptrapenterprise_oid_len,
+ ASN_OBJECT_ID,
+ (char*)enterprise, enterprise_length*sizeof(oid))) {
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to add snmpEnterprise to v2 trap\n");
+ snmp_free_pdu(template_v2pdu);
+ return -1;
+ }
+ }
+
+
+ /*
+ * If everything's OK, convert the v2 template into an SNMPv1 trap PDU.
+ */
+ template_v1pdu = convert_v2pdu_to_v1( template_v2pdu );
+ if (!template_v1pdu) {
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to convert v2->v1 template PDU\n");
+ }
+
+ } else {
+ /*
+ * Construct the SNMPv1 trap PDU....
+ */
+ template_v1pdu = snmp_pdu_create(SNMP_MSG_TRAP);
+ if (!template_v1pdu) {
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to construct v1 template PDU\n");
+ snmp_free_varbind(vblist);
+ return -1;
+ }
+ template_v1pdu->trap_type = trap;
+ template_v1pdu->specific_type = specific;
+ template_v1pdu->time = netsnmp_get_agent_uptime();
+
+ if (snmp_clone_mem((void **) &template_v1pdu->enterprise,
+ enterprise, enterprise_length * sizeof(oid))) {
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to set v1 enterprise OID\n");
+ snmp_free_varbind(vblist);
+ snmp_free_pdu(template_v1pdu);
+ return -1;
+ }
+ template_v1pdu->enterprise_length = enterprise_length;
+
+ template_v1pdu->flags |= UCD_MSG_FLAG_FORCE_PDU_COPY;
+ template_v1pdu->variables = vblist;
+
+ /*
+ * ... and convert it into an SNMPv2-style notification PDU.
+ */
+
+ template_v2pdu = convert_v1pdu_to_v2( template_v1pdu );
+ if (!template_v2pdu) {
+ snmp_log(LOG_WARNING,
+ "send_trap: failed to convert v1->v2 template PDU\n");
+ }
+ }
+
+ /*
+ * Check whether we're ignoring authFail traps
+ */
+ if (template_v1pdu) {
+ if (template_v1pdu->trap_type == SNMP_TRAP_AUTHFAIL &&
+ snmp_enableauthentraps == SNMP_AUTHENTICATED_TRAPS_DISABLED) {
+ snmp_free_pdu(template_v1pdu);
+ snmp_free_pdu(template_v2pdu);
+ return 0;
+ }
+
+ /*
+ * Ensure that the v1 trap PDU includes the local IP address
+ */
+ pdu_in_addr_t = (in_addr_t *) template_v1pdu->agent_addr;
+ *pdu_in_addr_t = get_myaddr();
+ }
+
+
+ /*
+ * Now loop through the list of trap sinks
+ * and call the trap callback routines,
+ * providing an appropriately formatted PDU in each case
+ */
+ for (sink = sinks; sink; sink = sink->next) {
+#ifndef NETSNMP_DISABLE_SNMPV1
+ if (sink->version == SNMP_VERSION_1) {
+ if (template_v1pdu) {
+ send_trap_to_sess(sink->sesp, template_v1pdu);
+ }
+ } else {
+#endif
+ if (template_v2pdu) {
+ template_v2pdu->command = sink->pdutype;
+ send_trap_to_sess(sink->sesp, template_v2pdu);
+ }
+#ifndef NETSNMP_DISABLE_SNMPV1
+ }
+#endif
+ }
+ if (template_v1pdu)
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_SEND_TRAP1, template_v1pdu);
+ if (template_v2pdu)
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_SEND_TRAP2, template_v2pdu);
+ snmp_free_pdu(template_v1pdu);
+ snmp_free_pdu(template_v2pdu);
+ return 0;
+}
+
+
+void
+send_enterprise_trap_vars(int trap,
+ int specific,
+ oid * enterprise, int enterprise_length,
+ netsnmp_variable_list * vars)
+{
+ netsnmp_send_traps(trap, specific,
+ enterprise, enterprise_length,
+ vars, NULL, 0);
+ return;
+}
+
+/**
+ * Captures responses or the lack there of from INFORMs that were sent
+ * 1) a response is received from an INFORM
+ * 2) one isn't received and the retries/timeouts have failed
+*/
+int
+handle_inform_response(int op, netsnmp_session * session,
+ int reqid, netsnmp_pdu *pdu,
+ void *magic)
+{
+ /* XXX: possibly stats update */
+ switch (op) {
+
+ case NETSNMP_CALLBACK_OP_RECEIVED_MESSAGE:
+ snmp_increment_statistic(STAT_SNMPINPKTS);
+ DEBUGMSGTL(("trap", "received the inform response for reqid=%d\n",
+ reqid));
+ break;
+
+ case NETSNMP_CALLBACK_OP_TIMED_OUT:
+ DEBUGMSGTL(("trap",
+ "received a timeout sending an inform for reqid=%d\n",
+ reqid));
+ break;
+
+ case NETSNMP_CALLBACK_OP_SEND_FAILED:
+ DEBUGMSGTL(("trap",
+ "failed to send an inform for reqid=%d\n",
+ reqid));
+ break;
+
+ default:
+ DEBUGMSGTL(("trap", "received op=%d for reqid=%d when trying to send an inform\n", op, reqid));
+ }
+
+ return 1;
+}
+
+
+/*
+ * send_trap_to_sess: sends a trap to a session but assumes that the
+ * pdu is constructed correctly for the session type.
+ */
+void
+send_trap_to_sess(netsnmp_session * sess, netsnmp_pdu *template_pdu)
+{
+ netsnmp_pdu *pdu;
+ int result;
+ char tmp[SPRINT_MAX_LEN];
+ int len;
+
+
+ if (!sess || !template_pdu)
+ return;
+
+ DEBUGMSGTL(("trap", "sending trap type=%d, version=%d\n",
+ template_pdu->command, sess->version));
+
+#ifndef NETSNMP_DISABLE_SNMPV1
+ if (sess->version == SNMP_VERSION_1 &&
+ (template_pdu->command != SNMP_MSG_TRAP))
+ return; /* Skip v1 sinks for v2 only traps */
+ if (sess->version != SNMP_VERSION_1 &&
+ (template_pdu->command == SNMP_MSG_TRAP))
+ return; /* Skip v2+ sinks for v1 only traps */
+#endif
+ template_pdu->version = sess->version;
+ pdu = snmp_clone_pdu(template_pdu);
+ pdu->sessid = sess->sessid; /* AgentX only ? */
+
+ if ( template_pdu->command == SNMP_MSG_INFORM
+#ifdef USING_AGENTX_PROTOCOL_MODULE
+ || template_pdu->command == AGENTX_MSG_NOTIFY
+#endif
+ ) {
+ result =
+ snmp_async_send(sess, pdu, &handle_inform_response, NULL);
+
+ } else {
+ if ((sess->version == SNMP_VERSION_3) &&
+ (pdu->command == SNMP_MSG_TRAP2) &&
+ (pdu->securityEngineIDLen == 0)) {
+ len = snmpv3_get_engineID(tmp, sizeof(tmp));
+ memdup(&pdu->securityEngineID, tmp, len);
+ pdu->securityEngineIDLen = len;
+ }
+
+ result = snmp_send(sess, pdu);
+ }
+
+ if (result == 0) {
+ snmp_sess_perror("snmpd: send_trap", sess);
+ snmp_free_pdu(pdu);
+ } else {
+ snmp_increment_statistic(STAT_SNMPOUTTRAPS);
+ snmp_increment_statistic(STAT_SNMPOUTPKTS);
+ }
+}
+
+void
+send_trap_vars(int trap, int specific, netsnmp_variable_list * vars)
+{
+ if (trap == SNMP_TRAP_ENTERPRISESPECIFIC)
+ send_enterprise_trap_vars(trap, specific, objid_enterprisetrap,
+ OID_LENGTH(objid_enterprisetrap), vars);
+ else
+ send_enterprise_trap_vars(trap, specific, trap_version_id,
+ OID_LENGTH(trap_version_id), vars);
+}
+
+/**
+ * Sends an SNMPv1 trap (or the SNMPv2 equivalent) to the list of
+ * configured trap destinations (or "sinks"), using the provided
+ * values for the generic trap type and specific trap value.
+ *
+ * This function eventually calls send_enterprise_trap_vars. If the
+ * trap type is not set to SNMP_TRAP_ENTERPRISESPECIFIC the enterprise
+ * and enterprise_length paramater is set to the pre defined NETSNMP_SYSTEM_MIB
+ * oid and length respectively. If the trap type is set to
+ * SNMP_TRAP_ENTERPRISESPECIFIC the enterprise and enterprise_length
+ * parameters are set to the pre-defined NETSNMP_NOTIFICATION_MIB oid and length
+ * respectively.
+ *
+ * @param trap is the generic trap type.
+ *
+ * @param specific is the specific trap value.
+ *
+ * @return void
+ *
+ * @see send_enterprise_trap_vars
+ * @see send_v2trap
+ */
+
+void
+send_easy_trap(int trap, int specific)
+{
+ send_trap_vars(trap, specific, NULL);
+}
+
+/**
+ * Uses the supplied list of variable bindings to form an SNMPv2 trap,
+ * which is sent to SNMPv2-capable sinks on the configured list.
+ * An equivalent INFORM is sent to the configured list of inform sinks.
+ * Sinks that can only handle SNMPv1 traps are skipped.
+ *
+ * This function eventually calls send_enterprise_trap_vars. If the
+ * trap type is not set to SNMP_TRAP_ENTERPRISESPECIFIC the enterprise
+ * and enterprise_length paramater is set to the pre defined NETSNMP_SYSTEM_MIB
+ * oid and length respectively. If the trap type is set to
+ * SNMP_TRAP_ENTERPRISESPECIFIC the enterprise and enterprise_length
+ * parameters are set to the pre-defined NETSNMP_NOTIFICATION_MIB oid and length
+ * respectively.
+ *
+ * @param vars is used to supply list of variable bindings to form an SNMPv2
+ * trap.
+ *
+ * @return void
+ *
+ * @see send_easy_trap
+ * @see send_enterprise_trap_vars
+ */
+
+void
+send_v2trap(netsnmp_variable_list * vars)
+{
+ send_trap_vars(-1, -1, vars);
+}
+
+void
+send_trap_pdu(netsnmp_pdu *pdu)
+{
+ send_trap_vars(-1, -1, pdu->variables);
+}
+
+
+
+ /*******************
+ *
+ * Config file handling
+ *
+ *******************/
+
+void
+snmpd_parse_config_authtrap(const char *token, char *cptr)
+{
+ int i;
+
+ i = atoi(cptr);
+ if (i == 0) {
+ if (strcmp(cptr, "enable") == 0) {
+ i = SNMP_AUTHENTICATED_TRAPS_ENABLED;
+ } else if (strcmp(cptr, "disable") == 0) {
+ i = SNMP_AUTHENTICATED_TRAPS_DISABLED;
+ }
+ }
+ if (i < 1 || i > 2) {
+ config_perror("authtrapenable must be 1 or 2");
+ } else {
+ if (strcmp(token, "pauthtrapenable") == 0) {
+ if (snmp_enableauthentrapsset < 0) {
+ /*
+ * This is bogus (and shouldn't happen anyway) -- the value
+ * of snmpEnableAuthenTraps.0 is already configured
+ * read-only.
+ */
+ snmp_log(LOG_WARNING,
+ "ignoring attempted override of read-only snmpEnableAuthenTraps.0\n");
+ return;
+ } else {
+ snmp_enableauthentrapsset++;
+ }
+ } else {
+ if (snmp_enableauthentrapsset > 0) {
+ /*
+ * This is bogus (and shouldn't happen anyway) -- we already
+ * read a persistent value of snmpEnableAuthenTraps.0, which
+ * we should ignore in favour of this one.
+ */
+ snmp_log(LOG_WARNING,
+ "ignoring attempted override of read-only snmpEnableAuthenTraps.0\n");
+ /*
+ * Fall through and copy in this value.
+ */
+ }
+ snmp_enableauthentrapsset = -1;
+ }
+ snmp_enableauthentraps = i;
+ }
+}
+
+#ifndef NETSNMP_DISABLE_SNMPV1
+void
+snmpd_parse_config_trapsink(const char *token, char *cptr)
+{
+ char tmpbuf[1024];
+ char *sp, *cp, *pp = NULL;
+ char *st;
+
+ if (!snmp_trapcommunity)
+ snmp_trapcommunity = strdup("public");
+ sp = strtok_r(cptr, " \t\n", &st);
+ cp = strtok_r(NULL, " \t\n", &st);
+ if (cp)
+ pp = strtok_r(NULL, " \t\n", &st);
+ if (pp)
+ config_pwarn("The separate port argument to trapsink is deprecated");
+ if (create_v1_trap_session(sp, pp, cp ? cp : snmp_trapcommunity) == 0) {
+ snprintf(tmpbuf, sizeof(tmpbuf), "cannot create trapsink: %s", cptr);
+ tmpbuf[sizeof(tmpbuf)-1] = '\0';
+ config_perror(tmpbuf);
+ }
+}
+#endif
+
+#ifndef NETSNMP_DISABLE_SNMPV2C
+void
+snmpd_parse_config_trap2sink(const char *word, char *cptr)
+{
+ char tmpbuf[1024];
+ char *sp, *cp, *pp = NULL;
+ int sinkport;
+ char *st;
+
+ if (!snmp_trapcommunity)
+ snmp_trapcommunity = strdup("public");
+ sp = strtok_r(cptr, " \t\n", &st);
+ cp = strtok_r(NULL, " \t\n", &st);
+ if (cp)
+ pp = strtok_r(NULL, " \t\n", &st);
+ if (pp)
+ config_pwarn("The separate port argument to trapsink2 is deprecated");
+ if (create_v2_trap_session(sp, pp, cp ? cp : snmp_trapcommunity) == 0) {
+ snprintf(tmpbuf, sizeof(tmpbuf), "cannot create trap2sink: %s", cptr);
+ tmpbuf[sizeof(tmpbuf)-1] = '\0';
+ config_perror(tmpbuf);
+ }
+}
+
+void
+snmpd_parse_config_informsink(const char *word, char *cptr)
+{
+ char tmpbuf[1024];
+ char *sp, *cp, *pp = NULL;
+ int sinkport;
+ char *st;
+
+ if (!snmp_trapcommunity)
+ snmp_trapcommunity = strdup("public");
+ sp = strtok_r(cptr, " \t\n", &st);
+ cp = strtok_r(NULL, " \t\n", &st);
+ if (cp)
+ pp = strtok_r(NULL, " \t\n", &st);
+ if (pp)
+ config_pwarn("The separate port argument to informsink is deprecated");
+ if (create_v2_inform_session(sp, pp, cp ? cp : snmp_trapcommunity) == 0) {
+ snprintf(tmpbuf, sizeof(tmpbuf), "cannot create informsink: %s", cptr);
+ tmpbuf[sizeof(tmpbuf)-1] = '\0';
+ config_perror(tmpbuf);
+ }
+}
+#endif
+
+/*
+ * this must be standardized somewhere, right?
+ */
+#define MAX_ARGS 128
+
+static int traptype;
+
+static void
+trapOptProc(int argc, char *const *argv, int opt)
+{
+ switch (opt) {
+ case 'C':
+ while (*optarg) {
+ switch (*optarg++) {
+ case 'i':
+ traptype = SNMP_MSG_INFORM;
+ break;
+ default:
+ config_perror("unknown argument passed to -C");
+ break;
+ }
+ }
+ break;
+ }
+}
+
+
+void
+snmpd_parse_config_trapsess(const char *word, char *cptr)
+{
+ char *argv[MAX_ARGS], *cp = cptr, tmp[SPRINT_MAX_LEN];
+ int argn, arg;
+ netsnmp_session session, *ss;
+ size_t len;
+
+ /*
+ * inform or trap? default to trap
+ */
+ traptype = SNMP_MSG_TRAP2;
+
+ /*
+ * create the argv[] like array
+ */
+ argv[0] = strdup("snmpd-trapsess"); /* bogus entry for getopt() */
+ for (argn = 1; cp && argn < MAX_ARGS; argn++) {
+ cp = copy_nword(cp, tmp, SPRINT_MAX_LEN);
+ argv[argn] = strdup(tmp);
+ }
+
+ arg = snmp_parse_args(argn, argv, &session, "C:", trapOptProc);
+
+ ss = snmp_add(&session,
+ netsnmp_transport_open_client("snmptrap", session.peername),
+ NULL, NULL);
+ for (; argn > 0; argn--) {
+ free(argv[argn - 1]);
+ }
+
+ if (!ss) {
+ config_perror
+ ("snmpd: failed to parse this line or the remote trap receiver is down. Possible cause:");
+ snmp_sess_perror("snmpd: snmpd_parse_config_trapsess()", &session);
+ return;
+ }
+
+ /*
+ * If this is an SNMPv3 TRAP session, then the agent is
+ * the authoritative engine, so set the engineID accordingly
+ */
+ if (ss->version == SNMP_VERSION_3 &&
+ traptype != SNMP_MSG_INFORM &&
+ ss->securityEngineIDLen == 0) {
+ len = snmpv3_get_engineID( tmp, sizeof(tmp));
+ memdup(&ss->securityEngineID, tmp, len);
+ ss->securityEngineIDLen = len;
+ }
+
+#ifndef NETSNMP_DISABLE_SNMPV1
+ if (ss->version == SNMP_VERSION_1) {
+ add_trap_session(ss, SNMP_MSG_TRAP, 0, SNMP_VERSION_1);
+ } else {
+#endif
+ add_trap_session(ss, traptype, (traptype == SNMP_MSG_INFORM),
+ ss->version);
+#ifndef NETSNMP_DISABLE_SNMPV1
+ }
+#endif
+}
+
+#if !defined(NETSNMP_DISABLE_SNMPV1) || !defined(NETSNMP_DISABLE_SNMPV2C)
+void
+snmpd_parse_config_trapcommunity(const char *word, char *cptr)
+{
+ if (snmp_trapcommunity != NULL) {
+ free(snmp_trapcommunity);
+ }
+ snmp_trapcommunity = (char *) malloc(strlen(cptr) + 1);
+ if (snmp_trapcommunity != NULL) {
+ copy_nword(cptr, snmp_trapcommunity, strlen(cptr) + 1);
+ }
+}
+
+void
+snmpd_free_trapcommunity(void)
+{
+ if (snmp_trapcommunity) {
+ free(snmp_trapcommunity);
+ snmp_trapcommunity = NULL;
+ }
+}
+#endif
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/auto_nlist.c b/cleopatre/application/spidnetsnmp/agent/auto_nlist.c
new file mode 100644
index 0000000000..0bbdfc2b3b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/auto_nlist.c
@@ -0,0 +1,238 @@
+#include <net-snmp/net-snmp-config.h>
+
+#ifdef NETSNMP_CAN_USE_NLIST
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <netinet/in.h>
+#ifdef HAVE_NLIST_H
+#include <nlist.h>
+#endif
+#if HAVE_KVM_H
+#include <kvm.h>
+#endif
+
+#include <net-snmp/agent/auto_nlist.h>
+#include "autonlist.h"
+#include "kernel.h"
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/ds_agent.h>
+
+struct autonlist *nlists = 0;
+static void init_nlist(struct nlist *);
+
+long
+auto_nlist_value(const char *string)
+{
+ struct autonlist **ptr, *it = 0;
+ int cmp;
+
+ if (string == 0)
+ return 0;
+
+ ptr = &nlists;
+ while (*ptr != 0 && it == 0) {
+ cmp = strcmp((*ptr)->symbol, string);
+ if (cmp == 0)
+ it = *ptr;
+ else if (cmp < 0) {
+ ptr = &((*ptr)->left);
+ } else {
+ ptr = &((*ptr)->right);
+ }
+ }
+ if (*ptr == 0) {
+ *ptr = (struct autonlist *) malloc(sizeof(struct autonlist));
+ it = *ptr;
+ it->left = 0;
+ it->right = 0;
+ it->symbol = (char *) malloc(strlen(string) + 1);
+ strcpy(it->symbol, string);
+ /*
+ * allocate an extra byte for inclusion of a preceding '_' later
+ */
+ it->nl[0].n_name = (char *) malloc(strlen(string) + 2);
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ strcpy(it->nl[0].n_name, string);
+#else
+ sprintf(it->nl[0].n_name, "_%s", string);
+#endif
+ it->nl[1].n_name = 0;
+ init_nlist(it->nl);
+#if !(defined(aix4) || defined(aix5) || defined(aix6))
+ if (it->nl[0].n_type == 0) {
+ strcpy(it->nl[0].n_name, string);
+ init_nlist(it->nl);
+ }
+#endif
+ if (it->nl[0].n_type == 0) {
+ if (!netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ snmp_log(LOG_ERR, "nlist err: neither %s nor _%s found.\n",
+ string, string);
+ }
+ return (-1);
+ } else {
+ DEBUGMSGTL(("auto_nlist:auto_nlist_value", "found symbol %s at %x.\n",
+ it->symbol, it->nl[0].n_value));
+ return (it->nl[0].n_value);
+ }
+ } else
+ return (it->nl[0].n_value);
+}
+
+int
+auto_nlist(const char *string, char *var, int size)
+{
+ long result;
+ int ret;
+ result = auto_nlist_value(string);
+ if (result != -1) {
+ if (var != NULL) {
+ ret = klookup(result, var, size);
+ if (!ret)
+ snmp_log(LOG_ERR,
+ "auto_nlist failed on %s at location %lx\n",
+ string, result);
+ return ret;
+ } else
+ return 1;
+ }
+ return 0;
+}
+
+static void
+init_nlist(struct nlist nl[])
+{
+#ifdef NETSNMP_CAN_USE_NLIST
+ int ret;
+#if HAVE_KVM_OPENFILES
+ kvm_t *kernel;
+ char kvm_errbuf[4096];
+
+ if ((kernel = kvm_openfiles(KERNEL_LOC, NULL, NULL, O_RDONLY, kvm_errbuf))
+ == NULL) {
+ if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ return;
+ } else {
+ snmp_log_perror("kvm_openfiles");
+ snmp_log(LOG_ERR, "kvm_openfiles: %s\n", kvm_errbuf);
+ exit(1);
+ }
+ }
+ if ((ret = kvm_nlist(kernel, nl)) == -1) {
+ if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ return;
+ } else {
+ snmp_log_perror("kvm_nlist");
+ exit(1);
+ }
+ }
+ kvm_close(kernel);
+#else /* ! HAVE_KVM_OPENFILES */
+#if (defined(aix4) || defined(aix5) || defined(aix6)) && defined(HAVE_KNLIST)
+ if (knlist(nl, 1, sizeof(struct nlist)) == -1) {
+ DEBUGMSGTL(("auto_nlist:init_nlist", "knlist failed on symbol: %s\n",
+ nl[0].n_name));
+ if (errno == EFAULT) {
+ nl[0].n_type = 0;
+ nl[0].n_value = 0;
+ } else {
+ snmp_log_perror("knlist");
+ if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ return;
+ } else {
+ exit(1);
+ }
+ }
+ }
+#else
+ if ((ret = nlist(KERNEL_LOC, nl)) == -1) {
+ if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ return;
+ } else {
+ snmp_log_perror("nlist");
+ exit(1);
+ }
+ }
+#endif /*aix4 */
+#endif /* ! HAVE_KVM_OPENFILES */
+ for (ret = 0; nl[ret].n_name != NULL; ret++) {
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ if (nl[ret].n_type == 0 && nl[ret].n_value != 0)
+ nl[ret].n_type = 1;
+#endif
+ if (nl[ret].n_type == 0) {
+ if (!netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ DEBUGMSGTL(("auto_nlist:init_nlist", "nlist err: %s not found\n",
+ nl[ret].n_name));
+ }
+ } else {
+ DEBUGMSGTL(("auto_nlist:init_nlist", "nlist: %s 0x%X\n", nl[ret].n_name,
+ (unsigned int) nl[ret].n_value));
+ }
+ }
+#endif /* NETSNMP_CAN_USE_NLIST */
+}
+
+int
+KNLookup(struct nlist nl[], int nl_which, char *buf, int s)
+{
+ struct nlist *nlp = &nl[nl_which];
+
+ if (nlp->n_value == 0) {
+ snmp_log(LOG_ERR, "Accessing non-nlisted variable: %s\n",
+ nlp->n_name);
+ nlp->n_value = -1; /* only one error message ... */
+ return 0;
+ }
+ if (nlp->n_value == -1)
+ return 0;
+
+ return klookup(nlp->n_value, buf, s);
+}
+
+#ifdef TESTING
+void
+auto_nlist_print_tree(int indent, struct autonlist *ptr)
+{
+ char buf[1024];
+ if (indent == -2) {
+ snmp_log(LOG_ERR, "nlist tree:\n");
+ auto_nlist_print_tree(12, nlists);
+ } else {
+ if (ptr == 0)
+ return;
+ sprintf(buf, "%%%ds\n", indent);
+ /*
+ * DEBUGMSGTL(("auto_nlist", "buf: %s\n",buf));
+ */
+ DEBUGMSGTL(("auto_nlist", buf, ptr->symbol));
+ auto_nlist_print_tree(indent + 2, ptr->left);
+ auto_nlist_print_tree(indent + 2, ptr->right);
+ }
+}
+#endif
+#else /* !NETSNMP_CAN_USE_NLIST */
+#include <net-snmp/agent/auto_nlist.h>
+int
+auto_nlist_noop(void)
+{
+ return 0;
+}
+#endif /* NETSNMP_CAN_USE_NLIST */
diff --git a/cleopatre/application/spidnetsnmp/agent/autonlist.h b/cleopatre/application/spidnetsnmp/agent/autonlist.h
new file mode 100644
index 0000000000..82a52ab026
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/autonlist.h
@@ -0,0 +1,10 @@
+#ifndef AUTONLIST_H
+
+struct autonlist {
+ char *symbol;
+ struct nlist nl[2];
+ struct autonlist *left, *right;
+};
+
+#define AUTONLIST_H
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/Makefile.depend b/cleopatre/application/spidnetsnmp/agent/helpers/Makefile.depend
new file mode 100644
index 0000000000..516f3b52d1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/Makefile.depend
@@ -0,0 +1,2658 @@
+# DO NOT DELETE THIS LINE -- make depend depends on it.
+
+./all_helpers.lo: ../../include/net-snmp/net-snmp-config.h
+./all_helpers.lo: ../../include/net-snmp/system/linux.h
+./all_helpers.lo: ../../include/net-snmp/system/sysv.h
+./all_helpers.lo: ../../include/net-snmp/system/generic.h
+./all_helpers.lo: ../../include/net-snmp/machine/generic.h
+./all_helpers.lo: ../../include/net-snmp/net-snmp-includes.h
+./all_helpers.lo: ../../include/net-snmp/definitions.h
+./all_helpers.lo: ../../include/net-snmp/types.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp_api.h
+./all_helpers.lo: ../../include/net-snmp/library/asn1.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp_impl.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp-tc.h
+./all_helpers.lo: ../../include/net-snmp/utilities.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp_client.h
+./all_helpers.lo: ../../include/net-snmp/library/system.h
+./all_helpers.lo: ../../include/net-snmp/library/tools.h
+./all_helpers.lo: ../../include/net-snmp/library/int64.h
+./all_helpers.lo: ../../include/net-snmp/library/mt_support.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp_alarm.h
+./all_helpers.lo: ../../include/net-snmp/library/callback.h
+./all_helpers.lo: ../../include/net-snmp/library/data_list.h
+./all_helpers.lo: ../../include/net-snmp/library/oid_stash.h
+./all_helpers.lo: ../../include/net-snmp/library/check_varbind.h
+./all_helpers.lo: ../../include/net-snmp/library/container.h
+./all_helpers.lo: ../../include/net-snmp/library/factory.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp_logging.h
+./all_helpers.lo: ../../include/net-snmp/library/container_binary_array.h
+./all_helpers.lo: ../../include/net-snmp/library/container_list_ssll.h
+./all_helpers.lo: ../../include/net-snmp/library/container_iterator.h
+./all_helpers.lo: ../../include/net-snmp/library/container.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp_assert.h
+./all_helpers.lo: ../../include/net-snmp/version.h
+./all_helpers.lo: ../../include/net-snmp/session_api.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp_transport.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp_service.h
+./all_helpers.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./all_helpers.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./all_helpers.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./all_helpers.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./all_helpers.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./all_helpers.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./all_helpers.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./all_helpers.lo: ../../include/net-snmp/library/ucd_compat.h
+./all_helpers.lo: ../../include/net-snmp/pdu_api.h
+./all_helpers.lo: ../../include/net-snmp/mib_api.h
+./all_helpers.lo: ../../include/net-snmp/library/mib.h
+./all_helpers.lo: ../../include/net-snmp/library/parse.h
+./all_helpers.lo: ../../include/net-snmp/varbind_api.h
+./all_helpers.lo: ../../include/net-snmp/config_api.h
+./all_helpers.lo: ../../include/net-snmp/library/read_config.h
+./all_helpers.lo: ../../include/net-snmp/library/default_store.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp_enum.h
+./all_helpers.lo: ../../include/net-snmp/library/vacm.h
+./all_helpers.lo: ../../include/net-snmp/output_api.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp_debug.h
+./all_helpers.lo: ../../include/net-snmp/snmpv3_api.h
+./all_helpers.lo: ../../include/net-snmp/library/snmpv3.h
+./all_helpers.lo: ../../include/net-snmp/library/transform_oids.h
+./all_helpers.lo: ../../include/net-snmp/library/keytools.h
+./all_helpers.lo: ../../include/net-snmp/library/scapi.h
+./all_helpers.lo: ../../include/net-snmp/library/lcd_time.h
+./all_helpers.lo: ../../include/net-snmp/library/snmp_secmod.h
+./all_helpers.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./all_helpers.lo: ../../include/net-snmp/library/snmpusm.h
+./all_helpers.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./all_helpers.lo: ../../include/net-snmp/agent/mib_module_config.h
+./all_helpers.lo: ../../include/net-snmp/agent/agent_module_config.h
+./all_helpers.lo: ../../include/net-snmp/agent/snmp_agent.h
+./all_helpers.lo: ../../include/net-snmp/agent/snmp_vars.h
+./all_helpers.lo: ../../include/net-snmp/agent/agent_handler.h
+./all_helpers.lo: ../../include/net-snmp/agent/var_struct.h
+./all_helpers.lo: ../../include/net-snmp/agent/agent_registry.h
+./all_helpers.lo: ../../include/net-snmp/library/fd_event_manager.h
+./all_helpers.lo: ../../include/net-snmp/agent/ds_agent.h
+./all_helpers.lo: ../../include/net-snmp/agent/agent_read_config.h
+./all_helpers.lo: ../../include/net-snmp/agent/agent_trap.h
+./all_helpers.lo: ../../include/net-snmp/agent/all_helpers.h
+./all_helpers.lo: ../../include/net-snmp/agent/instance.h
+./all_helpers.lo: ../../include/net-snmp/agent/baby_steps.h
+./all_helpers.lo: ../../include/net-snmp/agent/scalar.h
+./all_helpers.lo: ../../include/net-snmp/agent/scalar_group.h
+./all_helpers.lo: ../../include/net-snmp/agent/watcher.h
+./all_helpers.lo: ../../include/net-snmp/agent/multiplexer.h
+./all_helpers.lo: ../../include/net-snmp/agent/null.h
+./all_helpers.lo: ../../include/net-snmp/agent/debug_handler.h
+./all_helpers.lo: ../../include/net-snmp/agent/cache_handler.h
+./all_helpers.lo: ../../include/net-snmp/agent/old_api.h
+./all_helpers.lo: ../../include/net-snmp/agent/read_only.h
+./all_helpers.lo: ../../include/net-snmp/agent/row_merge.h
+./all_helpers.lo: ../../include/net-snmp/agent/serialize.h
+./all_helpers.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./all_helpers.lo: ../../include/net-snmp/agent/mode_end_call.h
+./all_helpers.lo: ../../include/net-snmp/agent/table.h
+./all_helpers.lo: ../../include/net-snmp/agent/table_data.h
+./all_helpers.lo: ../../include/net-snmp/agent/table_dataset.h
+./all_helpers.lo: ../../include/net-snmp/agent/table_tdata.h
+./all_helpers.lo: ../../include/net-snmp/agent/table_iterator.h
+./all_helpers.lo: ../../include/net-snmp/agent/table_container.h
+./all_helpers.lo: ../../include/net-snmp/agent/table_array.h
+./all_helpers.lo: ../../include/net-snmp/agent/mfd.h
+./baby_steps.lo: ../../include/net-snmp/net-snmp-config.h
+./baby_steps.lo: ../../include/net-snmp/system/linux.h
+./baby_steps.lo: ../../include/net-snmp/system/sysv.h
+./baby_steps.lo: ../../include/net-snmp/system/generic.h
+./baby_steps.lo: ../../include/net-snmp/machine/generic.h
+./baby_steps.lo: ../../include/net-snmp/net-snmp-includes.h
+./baby_steps.lo: ../../include/net-snmp/definitions.h
+./baby_steps.lo: ../../include/net-snmp/types.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp_api.h
+./baby_steps.lo: ../../include/net-snmp/library/asn1.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp_impl.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp-tc.h
+./baby_steps.lo: ../../include/net-snmp/utilities.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp_client.h
+./baby_steps.lo: ../../include/net-snmp/library/system.h
+./baby_steps.lo: ../../include/net-snmp/library/tools.h
+./baby_steps.lo: ../../include/net-snmp/library/int64.h
+./baby_steps.lo: ../../include/net-snmp/library/mt_support.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp_alarm.h
+./baby_steps.lo: ../../include/net-snmp/library/callback.h
+./baby_steps.lo: ../../include/net-snmp/library/data_list.h
+./baby_steps.lo: ../../include/net-snmp/library/oid_stash.h
+./baby_steps.lo: ../../include/net-snmp/library/check_varbind.h
+./baby_steps.lo: ../../include/net-snmp/library/container.h
+./baby_steps.lo: ../../include/net-snmp/library/factory.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp_logging.h
+./baby_steps.lo: ../../include/net-snmp/library/container_binary_array.h
+./baby_steps.lo: ../../include/net-snmp/library/container_list_ssll.h
+./baby_steps.lo: ../../include/net-snmp/library/container_iterator.h
+./baby_steps.lo: ../../include/net-snmp/library/container.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp_assert.h
+./baby_steps.lo: ../../include/net-snmp/version.h
+./baby_steps.lo: ../../include/net-snmp/session_api.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp_transport.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp_service.h
+./baby_steps.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./baby_steps.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./baby_steps.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./baby_steps.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./baby_steps.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./baby_steps.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./baby_steps.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./baby_steps.lo: ../../include/net-snmp/library/ucd_compat.h
+./baby_steps.lo: ../../include/net-snmp/pdu_api.h
+./baby_steps.lo: ../../include/net-snmp/mib_api.h
+./baby_steps.lo: ../../include/net-snmp/library/mib.h
+./baby_steps.lo: ../../include/net-snmp/library/parse.h
+./baby_steps.lo: ../../include/net-snmp/varbind_api.h
+./baby_steps.lo: ../../include/net-snmp/config_api.h
+./baby_steps.lo: ../../include/net-snmp/library/read_config.h
+./baby_steps.lo: ../../include/net-snmp/library/default_store.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp_enum.h
+./baby_steps.lo: ../../include/net-snmp/library/vacm.h
+./baby_steps.lo: ../../include/net-snmp/output_api.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp_debug.h
+./baby_steps.lo: ../../include/net-snmp/snmpv3_api.h
+./baby_steps.lo: ../../include/net-snmp/library/snmpv3.h
+./baby_steps.lo: ../../include/net-snmp/library/transform_oids.h
+./baby_steps.lo: ../../include/net-snmp/library/keytools.h
+./baby_steps.lo: ../../include/net-snmp/library/scapi.h
+./baby_steps.lo: ../../include/net-snmp/library/lcd_time.h
+./baby_steps.lo: ../../include/net-snmp/library/snmp_secmod.h
+./baby_steps.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./baby_steps.lo: ../../include/net-snmp/library/snmpusm.h
+./baby_steps.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./baby_steps.lo: ../../include/net-snmp/agent/mib_module_config.h
+./baby_steps.lo: ../../include/net-snmp/agent/agent_module_config.h
+./baby_steps.lo: ../../include/net-snmp/agent/snmp_agent.h
+./baby_steps.lo: ../../include/net-snmp/agent/snmp_vars.h
+./baby_steps.lo: ../../include/net-snmp/agent/agent_handler.h
+./baby_steps.lo: ../../include/net-snmp/agent/var_struct.h
+./baby_steps.lo: ../../include/net-snmp/agent/agent_registry.h
+./baby_steps.lo: ../../include/net-snmp/library/fd_event_manager.h
+./baby_steps.lo: ../../include/net-snmp/agent/ds_agent.h
+./baby_steps.lo: ../../include/net-snmp/agent/agent_read_config.h
+./baby_steps.lo: ../../include/net-snmp/agent/agent_trap.h
+./baby_steps.lo: ../../include/net-snmp/agent/all_helpers.h
+./baby_steps.lo: ../../include/net-snmp/agent/instance.h
+./baby_steps.lo: ../../include/net-snmp/agent/baby_steps.h
+./baby_steps.lo: ../../include/net-snmp/agent/scalar.h
+./baby_steps.lo: ../../include/net-snmp/agent/scalar_group.h
+./baby_steps.lo: ../../include/net-snmp/agent/watcher.h
+./baby_steps.lo: ../../include/net-snmp/agent/multiplexer.h
+./baby_steps.lo: ../../include/net-snmp/agent/null.h
+./baby_steps.lo: ../../include/net-snmp/agent/debug_handler.h
+./baby_steps.lo: ../../include/net-snmp/agent/cache_handler.h
+./baby_steps.lo: ../../include/net-snmp/agent/old_api.h
+./baby_steps.lo: ../../include/net-snmp/agent/read_only.h
+./baby_steps.lo: ../../include/net-snmp/agent/row_merge.h
+./baby_steps.lo: ../../include/net-snmp/agent/serialize.h
+./baby_steps.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./baby_steps.lo: ../../include/net-snmp/agent/mode_end_call.h
+./baby_steps.lo: ../../include/net-snmp/agent/table.h
+./baby_steps.lo: ../../include/net-snmp/agent/table_data.h
+./baby_steps.lo: ../../include/net-snmp/agent/table_dataset.h
+./baby_steps.lo: ../../include/net-snmp/agent/table_tdata.h
+./baby_steps.lo: ../../include/net-snmp/agent/table_iterator.h
+./baby_steps.lo: ../../include/net-snmp/agent/table_container.h
+./baby_steps.lo: ../../include/net-snmp/agent/table_array.h
+./baby_steps.lo: ../../include/net-snmp/agent/mfd.h
+./bulk_to_next.lo: ../../include/net-snmp/net-snmp-config.h
+./bulk_to_next.lo: ../../include/net-snmp/system/linux.h
+./bulk_to_next.lo: ../../include/net-snmp/system/sysv.h
+./bulk_to_next.lo: ../../include/net-snmp/system/generic.h
+./bulk_to_next.lo: ../../include/net-snmp/machine/generic.h
+./bulk_to_next.lo: ../../include/net-snmp/net-snmp-includes.h
+./bulk_to_next.lo: ../../include/net-snmp/definitions.h
+./bulk_to_next.lo: ../../include/net-snmp/types.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp_api.h
+./bulk_to_next.lo: ../../include/net-snmp/library/asn1.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp_impl.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp-tc.h
+./bulk_to_next.lo: ../../include/net-snmp/utilities.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp_client.h
+./bulk_to_next.lo: ../../include/net-snmp/library/system.h
+./bulk_to_next.lo: ../../include/net-snmp/library/tools.h
+./bulk_to_next.lo: ../../include/net-snmp/library/int64.h
+./bulk_to_next.lo: ../../include/net-snmp/library/mt_support.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp_alarm.h
+./bulk_to_next.lo: ../../include/net-snmp/library/callback.h
+./bulk_to_next.lo: ../../include/net-snmp/library/data_list.h
+./bulk_to_next.lo: ../../include/net-snmp/library/oid_stash.h
+./bulk_to_next.lo: ../../include/net-snmp/library/check_varbind.h
+./bulk_to_next.lo: ../../include/net-snmp/library/container.h
+./bulk_to_next.lo: ../../include/net-snmp/library/factory.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp_logging.h
+./bulk_to_next.lo: ../../include/net-snmp/library/container_binary_array.h
+./bulk_to_next.lo: ../../include/net-snmp/library/container_list_ssll.h
+./bulk_to_next.lo: ../../include/net-snmp/library/container_iterator.h
+./bulk_to_next.lo: ../../include/net-snmp/library/container.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp_assert.h
+./bulk_to_next.lo: ../../include/net-snmp/version.h
+./bulk_to_next.lo: ../../include/net-snmp/session_api.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp_transport.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp_service.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./bulk_to_next.lo: ../../include/net-snmp/library/ucd_compat.h
+./bulk_to_next.lo: ../../include/net-snmp/pdu_api.h
+./bulk_to_next.lo: ../../include/net-snmp/mib_api.h
+./bulk_to_next.lo: ../../include/net-snmp/library/mib.h
+./bulk_to_next.lo: ../../include/net-snmp/library/parse.h
+./bulk_to_next.lo: ../../include/net-snmp/varbind_api.h
+./bulk_to_next.lo: ../../include/net-snmp/config_api.h
+./bulk_to_next.lo: ../../include/net-snmp/library/read_config.h
+./bulk_to_next.lo: ../../include/net-snmp/library/default_store.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp_enum.h
+./bulk_to_next.lo: ../../include/net-snmp/library/vacm.h
+./bulk_to_next.lo: ../../include/net-snmp/output_api.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp_debug.h
+./bulk_to_next.lo: ../../include/net-snmp/snmpv3_api.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmpv3.h
+./bulk_to_next.lo: ../../include/net-snmp/library/transform_oids.h
+./bulk_to_next.lo: ../../include/net-snmp/library/keytools.h
+./bulk_to_next.lo: ../../include/net-snmp/library/scapi.h
+./bulk_to_next.lo: ../../include/net-snmp/library/lcd_time.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmp_secmod.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./bulk_to_next.lo: ../../include/net-snmp/library/snmpusm.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/mib_module_config.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/agent_module_config.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/snmp_agent.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/snmp_vars.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/agent_handler.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/var_struct.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/agent_registry.h
+./bulk_to_next.lo: ../../include/net-snmp/library/fd_event_manager.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/ds_agent.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/agent_read_config.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/agent_trap.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/all_helpers.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/instance.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/baby_steps.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/scalar.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/scalar_group.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/watcher.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/multiplexer.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/null.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/debug_handler.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/cache_handler.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/old_api.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/read_only.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/row_merge.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/serialize.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/mode_end_call.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/table.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/table_data.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/table_dataset.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/table_tdata.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/table_iterator.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/table_container.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/table_array.h
+./bulk_to_next.lo: ../../include/net-snmp/agent/mfd.h
+./cache_handler.lo: ../../include/net-snmp/net-snmp-config.h
+./cache_handler.lo: ../../include/net-snmp/system/linux.h
+./cache_handler.lo: ../../include/net-snmp/system/sysv.h
+./cache_handler.lo: ../../include/net-snmp/system/generic.h
+./cache_handler.lo: ../../include/net-snmp/machine/generic.h
+./cache_handler.lo: ../../include/net-snmp/net-snmp-includes.h
+./cache_handler.lo: ../../include/net-snmp/definitions.h
+./cache_handler.lo: ../../include/net-snmp/types.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp_api.h
+./cache_handler.lo: ../../include/net-snmp/library/asn1.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp_impl.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp-tc.h
+./cache_handler.lo: ../../include/net-snmp/utilities.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp_client.h
+./cache_handler.lo: ../../include/net-snmp/library/system.h
+./cache_handler.lo: ../../include/net-snmp/library/tools.h
+./cache_handler.lo: ../../include/net-snmp/library/int64.h
+./cache_handler.lo: ../../include/net-snmp/library/mt_support.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp_alarm.h
+./cache_handler.lo: ../../include/net-snmp/library/callback.h
+./cache_handler.lo: ../../include/net-snmp/library/data_list.h
+./cache_handler.lo: ../../include/net-snmp/library/oid_stash.h
+./cache_handler.lo: ../../include/net-snmp/library/check_varbind.h
+./cache_handler.lo: ../../include/net-snmp/library/container.h
+./cache_handler.lo: ../../include/net-snmp/library/factory.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp_logging.h
+./cache_handler.lo: ../../include/net-snmp/library/container_binary_array.h
+./cache_handler.lo: ../../include/net-snmp/library/container_list_ssll.h
+./cache_handler.lo: ../../include/net-snmp/library/container_iterator.h
+./cache_handler.lo: ../../include/net-snmp/library/container.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp_assert.h
+./cache_handler.lo: ../../include/net-snmp/version.h
+./cache_handler.lo: ../../include/net-snmp/session_api.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp_transport.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp_service.h
+./cache_handler.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./cache_handler.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./cache_handler.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./cache_handler.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./cache_handler.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./cache_handler.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./cache_handler.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./cache_handler.lo: ../../include/net-snmp/library/ucd_compat.h
+./cache_handler.lo: ../../include/net-snmp/pdu_api.h
+./cache_handler.lo: ../../include/net-snmp/mib_api.h
+./cache_handler.lo: ../../include/net-snmp/library/mib.h
+./cache_handler.lo: ../../include/net-snmp/library/parse.h
+./cache_handler.lo: ../../include/net-snmp/varbind_api.h
+./cache_handler.lo: ../../include/net-snmp/config_api.h
+./cache_handler.lo: ../../include/net-snmp/library/read_config.h
+./cache_handler.lo: ../../include/net-snmp/library/default_store.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp_enum.h
+./cache_handler.lo: ../../include/net-snmp/library/vacm.h
+./cache_handler.lo: ../../include/net-snmp/output_api.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp_debug.h
+./cache_handler.lo: ../../include/net-snmp/snmpv3_api.h
+./cache_handler.lo: ../../include/net-snmp/library/snmpv3.h
+./cache_handler.lo: ../../include/net-snmp/library/transform_oids.h
+./cache_handler.lo: ../../include/net-snmp/library/keytools.h
+./cache_handler.lo: ../../include/net-snmp/library/scapi.h
+./cache_handler.lo: ../../include/net-snmp/library/lcd_time.h
+./cache_handler.lo: ../../include/net-snmp/library/snmp_secmod.h
+./cache_handler.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./cache_handler.lo: ../../include/net-snmp/library/snmpusm.h
+./cache_handler.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./cache_handler.lo: ../../include/net-snmp/agent/mib_module_config.h
+./cache_handler.lo: ../../include/net-snmp/agent/agent_module_config.h
+./cache_handler.lo: ../../include/net-snmp/agent/snmp_agent.h
+./cache_handler.lo: ../../include/net-snmp/agent/snmp_vars.h
+./cache_handler.lo: ../../include/net-snmp/agent/agent_handler.h
+./cache_handler.lo: ../../include/net-snmp/agent/var_struct.h
+./cache_handler.lo: ../../include/net-snmp/agent/agent_registry.h
+./cache_handler.lo: ../../include/net-snmp/library/fd_event_manager.h
+./cache_handler.lo: ../../include/net-snmp/agent/ds_agent.h
+./cache_handler.lo: ../../include/net-snmp/agent/agent_read_config.h
+./cache_handler.lo: ../../include/net-snmp/agent/agent_trap.h
+./cache_handler.lo: ../../include/net-snmp/agent/all_helpers.h
+./cache_handler.lo: ../../include/net-snmp/agent/instance.h
+./cache_handler.lo: ../../include/net-snmp/agent/baby_steps.h
+./cache_handler.lo: ../../include/net-snmp/agent/scalar.h
+./cache_handler.lo: ../../include/net-snmp/agent/scalar_group.h
+./cache_handler.lo: ../../include/net-snmp/agent/watcher.h
+./cache_handler.lo: ../../include/net-snmp/agent/multiplexer.h
+./cache_handler.lo: ../../include/net-snmp/agent/null.h
+./cache_handler.lo: ../../include/net-snmp/agent/debug_handler.h
+./cache_handler.lo: ../../include/net-snmp/agent/cache_handler.h
+./cache_handler.lo: ../../include/net-snmp/agent/old_api.h
+./cache_handler.lo: ../../include/net-snmp/agent/read_only.h
+./cache_handler.lo: ../../include/net-snmp/agent/row_merge.h
+./cache_handler.lo: ../../include/net-snmp/agent/serialize.h
+./cache_handler.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./cache_handler.lo: ../../include/net-snmp/agent/mode_end_call.h
+./cache_handler.lo: ../../include/net-snmp/agent/table.h
+./cache_handler.lo: ../../include/net-snmp/agent/table_data.h
+./cache_handler.lo: ../../include/net-snmp/agent/table_dataset.h
+./cache_handler.lo: ../../include/net-snmp/agent/table_tdata.h
+./cache_handler.lo: ../../include/net-snmp/agent/table_iterator.h
+./cache_handler.lo: ../../include/net-snmp/agent/table_container.h
+./cache_handler.lo: ../../include/net-snmp/agent/table_array.h
+./cache_handler.lo: ../../include/net-snmp/agent/mfd.h
+./debug_handler.lo: ../../include/net-snmp/net-snmp-config.h
+./debug_handler.lo: ../../include/net-snmp/system/linux.h
+./debug_handler.lo: ../../include/net-snmp/system/sysv.h
+./debug_handler.lo: ../../include/net-snmp/system/generic.h
+./debug_handler.lo: ../../include/net-snmp/machine/generic.h
+./debug_handler.lo: ../../include/net-snmp/net-snmp-includes.h
+./debug_handler.lo: ../../include/net-snmp/definitions.h
+./debug_handler.lo: ../../include/net-snmp/types.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp_api.h
+./debug_handler.lo: ../../include/net-snmp/library/asn1.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp_impl.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp-tc.h
+./debug_handler.lo: ../../include/net-snmp/utilities.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp_client.h
+./debug_handler.lo: ../../include/net-snmp/library/system.h
+./debug_handler.lo: ../../include/net-snmp/library/tools.h
+./debug_handler.lo: ../../include/net-snmp/library/int64.h
+./debug_handler.lo: ../../include/net-snmp/library/mt_support.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp_alarm.h
+./debug_handler.lo: ../../include/net-snmp/library/callback.h
+./debug_handler.lo: ../../include/net-snmp/library/data_list.h
+./debug_handler.lo: ../../include/net-snmp/library/oid_stash.h
+./debug_handler.lo: ../../include/net-snmp/library/check_varbind.h
+./debug_handler.lo: ../../include/net-snmp/library/container.h
+./debug_handler.lo: ../../include/net-snmp/library/factory.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp_logging.h
+./debug_handler.lo: ../../include/net-snmp/library/container_binary_array.h
+./debug_handler.lo: ../../include/net-snmp/library/container_list_ssll.h
+./debug_handler.lo: ../../include/net-snmp/library/container_iterator.h
+./debug_handler.lo: ../../include/net-snmp/library/container.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp_assert.h
+./debug_handler.lo: ../../include/net-snmp/version.h
+./debug_handler.lo: ../../include/net-snmp/session_api.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp_transport.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp_service.h
+./debug_handler.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./debug_handler.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./debug_handler.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./debug_handler.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./debug_handler.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./debug_handler.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./debug_handler.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./debug_handler.lo: ../../include/net-snmp/library/ucd_compat.h
+./debug_handler.lo: ../../include/net-snmp/pdu_api.h
+./debug_handler.lo: ../../include/net-snmp/mib_api.h
+./debug_handler.lo: ../../include/net-snmp/library/mib.h
+./debug_handler.lo: ../../include/net-snmp/library/parse.h
+./debug_handler.lo: ../../include/net-snmp/varbind_api.h
+./debug_handler.lo: ../../include/net-snmp/config_api.h
+./debug_handler.lo: ../../include/net-snmp/library/read_config.h
+./debug_handler.lo: ../../include/net-snmp/library/default_store.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp_enum.h
+./debug_handler.lo: ../../include/net-snmp/library/vacm.h
+./debug_handler.lo: ../../include/net-snmp/output_api.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp_debug.h
+./debug_handler.lo: ../../include/net-snmp/snmpv3_api.h
+./debug_handler.lo: ../../include/net-snmp/library/snmpv3.h
+./debug_handler.lo: ../../include/net-snmp/library/transform_oids.h
+./debug_handler.lo: ../../include/net-snmp/library/keytools.h
+./debug_handler.lo: ../../include/net-snmp/library/scapi.h
+./debug_handler.lo: ../../include/net-snmp/library/lcd_time.h
+./debug_handler.lo: ../../include/net-snmp/library/snmp_secmod.h
+./debug_handler.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./debug_handler.lo: ../../include/net-snmp/library/snmpusm.h
+./debug_handler.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./debug_handler.lo: ../../include/net-snmp/agent/mib_module_config.h
+./debug_handler.lo: ../../include/net-snmp/agent/agent_module_config.h
+./debug_handler.lo: ../../include/net-snmp/agent/snmp_agent.h
+./debug_handler.lo: ../../include/net-snmp/agent/snmp_vars.h
+./debug_handler.lo: ../../include/net-snmp/agent/agent_handler.h
+./debug_handler.lo: ../../include/net-snmp/agent/var_struct.h
+./debug_handler.lo: ../../include/net-snmp/agent/agent_registry.h
+./debug_handler.lo: ../../include/net-snmp/library/fd_event_manager.h
+./debug_handler.lo: ../../include/net-snmp/agent/ds_agent.h
+./debug_handler.lo: ../../include/net-snmp/agent/agent_read_config.h
+./debug_handler.lo: ../../include/net-snmp/agent/agent_trap.h
+./debug_handler.lo: ../../include/net-snmp/agent/all_helpers.h
+./debug_handler.lo: ../../include/net-snmp/agent/instance.h
+./debug_handler.lo: ../../include/net-snmp/agent/baby_steps.h
+./debug_handler.lo: ../../include/net-snmp/agent/scalar.h
+./debug_handler.lo: ../../include/net-snmp/agent/scalar_group.h
+./debug_handler.lo: ../../include/net-snmp/agent/watcher.h
+./debug_handler.lo: ../../include/net-snmp/agent/multiplexer.h
+./debug_handler.lo: ../../include/net-snmp/agent/null.h
+./debug_handler.lo: ../../include/net-snmp/agent/debug_handler.h
+./debug_handler.lo: ../../include/net-snmp/agent/cache_handler.h
+./debug_handler.lo: ../../include/net-snmp/agent/old_api.h
+./debug_handler.lo: ../../include/net-snmp/agent/read_only.h
+./debug_handler.lo: ../../include/net-snmp/agent/row_merge.h
+./debug_handler.lo: ../../include/net-snmp/agent/serialize.h
+./debug_handler.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./debug_handler.lo: ../../include/net-snmp/agent/mode_end_call.h
+./debug_handler.lo: ../../include/net-snmp/agent/table.h
+./debug_handler.lo: ../../include/net-snmp/agent/table_data.h
+./debug_handler.lo: ../../include/net-snmp/agent/table_dataset.h
+./debug_handler.lo: ../../include/net-snmp/agent/table_tdata.h
+./debug_handler.lo: ../../include/net-snmp/agent/table_iterator.h
+./debug_handler.lo: ../../include/net-snmp/agent/table_container.h
+./debug_handler.lo: ../../include/net-snmp/agent/table_array.h
+./debug_handler.lo: ../../include/net-snmp/agent/mfd.h
+./instance.lo: ../../include/net-snmp/net-snmp-config.h
+./instance.lo: ../../include/net-snmp/system/linux.h
+./instance.lo: ../../include/net-snmp/system/sysv.h
+./instance.lo: ../../include/net-snmp/system/generic.h
+./instance.lo: ../../include/net-snmp/machine/generic.h
+./instance.lo: ../../include/net-snmp/net-snmp-includes.h
+./instance.lo: ../../include/net-snmp/definitions.h
+./instance.lo: ../../include/net-snmp/types.h
+./instance.lo: ../../include/net-snmp/library/snmp_api.h
+./instance.lo: ../../include/net-snmp/library/asn1.h
+./instance.lo: ../../include/net-snmp/library/snmp_impl.h
+./instance.lo: ../../include/net-snmp/library/snmp.h
+./instance.lo: ../../include/net-snmp/library/snmp-tc.h
+./instance.lo: ../../include/net-snmp/utilities.h
+./instance.lo: ../../include/net-snmp/library/snmp_client.h
+./instance.lo: ../../include/net-snmp/library/system.h
+./instance.lo: ../../include/net-snmp/library/tools.h
+./instance.lo: ../../include/net-snmp/library/int64.h
+./instance.lo: ../../include/net-snmp/library/mt_support.h
+./instance.lo: ../../include/net-snmp/library/snmp_alarm.h
+./instance.lo: ../../include/net-snmp/library/callback.h
+./instance.lo: ../../include/net-snmp/library/data_list.h
+./instance.lo: ../../include/net-snmp/library/oid_stash.h
+./instance.lo: ../../include/net-snmp/library/check_varbind.h
+./instance.lo: ../../include/net-snmp/library/container.h
+./instance.lo: ../../include/net-snmp/library/factory.h
+./instance.lo: ../../include/net-snmp/library/snmp_logging.h
+./instance.lo: ../../include/net-snmp/library/container_binary_array.h
+./instance.lo: ../../include/net-snmp/library/container_list_ssll.h
+./instance.lo: ../../include/net-snmp/library/container_iterator.h
+./instance.lo: ../../include/net-snmp/library/container.h
+./instance.lo: ../../include/net-snmp/library/snmp_assert.h
+./instance.lo: ../../include/net-snmp/version.h
+./instance.lo: ../../include/net-snmp/session_api.h
+./instance.lo: ../../include/net-snmp/library/snmp_transport.h
+./instance.lo: ../../include/net-snmp/library/snmp_service.h
+./instance.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./instance.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./instance.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./instance.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./instance.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./instance.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./instance.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./instance.lo: ../../include/net-snmp/library/ucd_compat.h
+./instance.lo: ../../include/net-snmp/pdu_api.h
+./instance.lo: ../../include/net-snmp/mib_api.h
+./instance.lo: ../../include/net-snmp/library/mib.h
+./instance.lo: ../../include/net-snmp/library/parse.h
+./instance.lo: ../../include/net-snmp/varbind_api.h
+./instance.lo: ../../include/net-snmp/config_api.h
+./instance.lo: ../../include/net-snmp/library/read_config.h
+./instance.lo: ../../include/net-snmp/library/default_store.h
+./instance.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./instance.lo: ../../include/net-snmp/library/snmp_enum.h
+./instance.lo: ../../include/net-snmp/library/vacm.h
+./instance.lo: ../../include/net-snmp/output_api.h
+./instance.lo: ../../include/net-snmp/library/snmp_debug.h
+./instance.lo: ../../include/net-snmp/snmpv3_api.h
+./instance.lo: ../../include/net-snmp/library/snmpv3.h
+./instance.lo: ../../include/net-snmp/library/transform_oids.h
+./instance.lo: ../../include/net-snmp/library/keytools.h
+./instance.lo: ../../include/net-snmp/library/scapi.h
+./instance.lo: ../../include/net-snmp/library/lcd_time.h
+./instance.lo: ../../include/net-snmp/library/snmp_secmod.h
+./instance.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./instance.lo: ../../include/net-snmp/library/snmpusm.h
+./instance.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./instance.lo: ../../include/net-snmp/agent/mib_module_config.h
+./instance.lo: ../../include/net-snmp/agent/agent_module_config.h
+./instance.lo: ../../include/net-snmp/agent/snmp_agent.h
+./instance.lo: ../../include/net-snmp/agent/snmp_vars.h
+./instance.lo: ../../include/net-snmp/agent/agent_handler.h
+./instance.lo: ../../include/net-snmp/agent/var_struct.h
+./instance.lo: ../../include/net-snmp/agent/agent_registry.h
+./instance.lo: ../../include/net-snmp/library/fd_event_manager.h
+./instance.lo: ../../include/net-snmp/agent/ds_agent.h
+./instance.lo: ../../include/net-snmp/agent/agent_read_config.h
+./instance.lo: ../../include/net-snmp/agent/agent_trap.h
+./instance.lo: ../../include/net-snmp/agent/all_helpers.h
+./instance.lo: ../../include/net-snmp/agent/instance.h
+./instance.lo: ../../include/net-snmp/agent/baby_steps.h
+./instance.lo: ../../include/net-snmp/agent/scalar.h
+./instance.lo: ../../include/net-snmp/agent/scalar_group.h
+./instance.lo: ../../include/net-snmp/agent/watcher.h
+./instance.lo: ../../include/net-snmp/agent/multiplexer.h
+./instance.lo: ../../include/net-snmp/agent/null.h
+./instance.lo: ../../include/net-snmp/agent/debug_handler.h
+./instance.lo: ../../include/net-snmp/agent/cache_handler.h
+./instance.lo: ../../include/net-snmp/agent/old_api.h
+./instance.lo: ../../include/net-snmp/agent/read_only.h
+./instance.lo: ../../include/net-snmp/agent/row_merge.h
+./instance.lo: ../../include/net-snmp/agent/serialize.h
+./instance.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./instance.lo: ../../include/net-snmp/agent/mode_end_call.h
+./instance.lo: ../../include/net-snmp/agent/table.h
+./instance.lo: ../../include/net-snmp/agent/table_data.h
+./instance.lo: ../../include/net-snmp/agent/table_dataset.h
+./instance.lo: ../../include/net-snmp/agent/table_tdata.h
+./instance.lo: ../../include/net-snmp/agent/table_iterator.h
+./instance.lo: ../../include/net-snmp/agent/table_container.h
+./instance.lo: ../../include/net-snmp/agent/table_array.h
+./instance.lo: ../../include/net-snmp/agent/mfd.h
+./mode_end_call.lo: ../../include/net-snmp/net-snmp-config.h
+./mode_end_call.lo: ../../include/net-snmp/system/linux.h
+./mode_end_call.lo: ../../include/net-snmp/system/sysv.h
+./mode_end_call.lo: ../../include/net-snmp/system/generic.h
+./mode_end_call.lo: ../../include/net-snmp/machine/generic.h
+./mode_end_call.lo: ../../include/net-snmp/net-snmp-includes.h
+./mode_end_call.lo: ../../include/net-snmp/definitions.h
+./mode_end_call.lo: ../../include/net-snmp/types.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp_api.h
+./mode_end_call.lo: ../../include/net-snmp/library/asn1.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp_impl.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp-tc.h
+./mode_end_call.lo: ../../include/net-snmp/utilities.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp_client.h
+./mode_end_call.lo: ../../include/net-snmp/library/system.h
+./mode_end_call.lo: ../../include/net-snmp/library/tools.h
+./mode_end_call.lo: ../../include/net-snmp/library/int64.h
+./mode_end_call.lo: ../../include/net-snmp/library/mt_support.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mode_end_call.lo: ../../include/net-snmp/library/callback.h
+./mode_end_call.lo: ../../include/net-snmp/library/data_list.h
+./mode_end_call.lo: ../../include/net-snmp/library/oid_stash.h
+./mode_end_call.lo: ../../include/net-snmp/library/check_varbind.h
+./mode_end_call.lo: ../../include/net-snmp/library/container.h
+./mode_end_call.lo: ../../include/net-snmp/library/factory.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp_logging.h
+./mode_end_call.lo: ../../include/net-snmp/library/container_binary_array.h
+./mode_end_call.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mode_end_call.lo: ../../include/net-snmp/library/container_iterator.h
+./mode_end_call.lo: ../../include/net-snmp/library/container.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp_assert.h
+./mode_end_call.lo: ../../include/net-snmp/version.h
+./mode_end_call.lo: ../../include/net-snmp/session_api.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp_transport.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp_service.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mode_end_call.lo: ../../include/net-snmp/library/ucd_compat.h
+./mode_end_call.lo: ../../include/net-snmp/pdu_api.h
+./mode_end_call.lo: ../../include/net-snmp/mib_api.h
+./mode_end_call.lo: ../../include/net-snmp/library/mib.h
+./mode_end_call.lo: ../../include/net-snmp/library/parse.h
+./mode_end_call.lo: ../../include/net-snmp/varbind_api.h
+./mode_end_call.lo: ../../include/net-snmp/config_api.h
+./mode_end_call.lo: ../../include/net-snmp/library/read_config.h
+./mode_end_call.lo: ../../include/net-snmp/library/default_store.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp_enum.h
+./mode_end_call.lo: ../../include/net-snmp/library/vacm.h
+./mode_end_call.lo: ../../include/net-snmp/output_api.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp_debug.h
+./mode_end_call.lo: ../../include/net-snmp/snmpv3_api.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmpv3.h
+./mode_end_call.lo: ../../include/net-snmp/library/transform_oids.h
+./mode_end_call.lo: ../../include/net-snmp/library/keytools.h
+./mode_end_call.lo: ../../include/net-snmp/library/scapi.h
+./mode_end_call.lo: ../../include/net-snmp/library/lcd_time.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mode_end_call.lo: ../../include/net-snmp/library/snmpusm.h
+./mode_end_call.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mode_end_call.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mode_end_call.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mode_end_call.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mode_end_call.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mode_end_call.lo: ../../include/net-snmp/agent/agent_handler.h
+./mode_end_call.lo: ../../include/net-snmp/agent/var_struct.h
+./mode_end_call.lo: ../../include/net-snmp/agent/agent_registry.h
+./mode_end_call.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mode_end_call.lo: ../../include/net-snmp/agent/ds_agent.h
+./mode_end_call.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mode_end_call.lo: ../../include/net-snmp/agent/agent_trap.h
+./mode_end_call.lo: ../../include/net-snmp/agent/all_helpers.h
+./mode_end_call.lo: ../../include/net-snmp/agent/instance.h
+./mode_end_call.lo: ../../include/net-snmp/agent/baby_steps.h
+./mode_end_call.lo: ../../include/net-snmp/agent/scalar.h
+./mode_end_call.lo: ../../include/net-snmp/agent/scalar_group.h
+./mode_end_call.lo: ../../include/net-snmp/agent/watcher.h
+./mode_end_call.lo: ../../include/net-snmp/agent/multiplexer.h
+./mode_end_call.lo: ../../include/net-snmp/agent/null.h
+./mode_end_call.lo: ../../include/net-snmp/agent/debug_handler.h
+./mode_end_call.lo: ../../include/net-snmp/agent/cache_handler.h
+./mode_end_call.lo: ../../include/net-snmp/agent/old_api.h
+./mode_end_call.lo: ../../include/net-snmp/agent/read_only.h
+./mode_end_call.lo: ../../include/net-snmp/agent/row_merge.h
+./mode_end_call.lo: ../../include/net-snmp/agent/serialize.h
+./mode_end_call.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mode_end_call.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mode_end_call.lo: ../../include/net-snmp/agent/table.h
+./mode_end_call.lo: ../../include/net-snmp/agent/table_data.h
+./mode_end_call.lo: ../../include/net-snmp/agent/table_dataset.h
+./mode_end_call.lo: ../../include/net-snmp/agent/table_tdata.h
+./mode_end_call.lo: ../../include/net-snmp/agent/table_iterator.h
+./mode_end_call.lo: ../../include/net-snmp/agent/table_container.h
+./mode_end_call.lo: ../../include/net-snmp/agent/table_array.h
+./mode_end_call.lo: ../../include/net-snmp/agent/mfd.h
+./multiplexer.lo: ../../include/net-snmp/net-snmp-config.h
+./multiplexer.lo: ../../include/net-snmp/system/linux.h
+./multiplexer.lo: ../../include/net-snmp/system/sysv.h
+./multiplexer.lo: ../../include/net-snmp/system/generic.h
+./multiplexer.lo: ../../include/net-snmp/machine/generic.h
+./multiplexer.lo: ../../include/net-snmp/net-snmp-includes.h
+./multiplexer.lo: ../../include/net-snmp/definitions.h
+./multiplexer.lo: ../../include/net-snmp/types.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp_api.h
+./multiplexer.lo: ../../include/net-snmp/library/asn1.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp_impl.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp-tc.h
+./multiplexer.lo: ../../include/net-snmp/utilities.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp_client.h
+./multiplexer.lo: ../../include/net-snmp/library/system.h
+./multiplexer.lo: ../../include/net-snmp/library/tools.h
+./multiplexer.lo: ../../include/net-snmp/library/int64.h
+./multiplexer.lo: ../../include/net-snmp/library/mt_support.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp_alarm.h
+./multiplexer.lo: ../../include/net-snmp/library/callback.h
+./multiplexer.lo: ../../include/net-snmp/library/data_list.h
+./multiplexer.lo: ../../include/net-snmp/library/oid_stash.h
+./multiplexer.lo: ../../include/net-snmp/library/check_varbind.h
+./multiplexer.lo: ../../include/net-snmp/library/container.h
+./multiplexer.lo: ../../include/net-snmp/library/factory.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp_logging.h
+./multiplexer.lo: ../../include/net-snmp/library/container_binary_array.h
+./multiplexer.lo: ../../include/net-snmp/library/container_list_ssll.h
+./multiplexer.lo: ../../include/net-snmp/library/container_iterator.h
+./multiplexer.lo: ../../include/net-snmp/library/container.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp_assert.h
+./multiplexer.lo: ../../include/net-snmp/version.h
+./multiplexer.lo: ../../include/net-snmp/session_api.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp_transport.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp_service.h
+./multiplexer.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./multiplexer.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./multiplexer.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./multiplexer.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./multiplexer.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./multiplexer.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./multiplexer.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./multiplexer.lo: ../../include/net-snmp/library/ucd_compat.h
+./multiplexer.lo: ../../include/net-snmp/pdu_api.h
+./multiplexer.lo: ../../include/net-snmp/mib_api.h
+./multiplexer.lo: ../../include/net-snmp/library/mib.h
+./multiplexer.lo: ../../include/net-snmp/library/parse.h
+./multiplexer.lo: ../../include/net-snmp/varbind_api.h
+./multiplexer.lo: ../../include/net-snmp/config_api.h
+./multiplexer.lo: ../../include/net-snmp/library/read_config.h
+./multiplexer.lo: ../../include/net-snmp/library/default_store.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp_enum.h
+./multiplexer.lo: ../../include/net-snmp/library/vacm.h
+./multiplexer.lo: ../../include/net-snmp/output_api.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp_debug.h
+./multiplexer.lo: ../../include/net-snmp/snmpv3_api.h
+./multiplexer.lo: ../../include/net-snmp/library/snmpv3.h
+./multiplexer.lo: ../../include/net-snmp/library/transform_oids.h
+./multiplexer.lo: ../../include/net-snmp/library/keytools.h
+./multiplexer.lo: ../../include/net-snmp/library/scapi.h
+./multiplexer.lo: ../../include/net-snmp/library/lcd_time.h
+./multiplexer.lo: ../../include/net-snmp/library/snmp_secmod.h
+./multiplexer.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./multiplexer.lo: ../../include/net-snmp/library/snmpusm.h
+./multiplexer.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./multiplexer.lo: ../../include/net-snmp/agent/mib_module_config.h
+./multiplexer.lo: ../../include/net-snmp/agent/agent_module_config.h
+./multiplexer.lo: ../../include/net-snmp/agent/snmp_agent.h
+./multiplexer.lo: ../../include/net-snmp/agent/snmp_vars.h
+./multiplexer.lo: ../../include/net-snmp/agent/agent_handler.h
+./multiplexer.lo: ../../include/net-snmp/agent/var_struct.h
+./multiplexer.lo: ../../include/net-snmp/agent/agent_registry.h
+./multiplexer.lo: ../../include/net-snmp/library/fd_event_manager.h
+./multiplexer.lo: ../../include/net-snmp/agent/ds_agent.h
+./multiplexer.lo: ../../include/net-snmp/agent/agent_read_config.h
+./multiplexer.lo: ../../include/net-snmp/agent/agent_trap.h
+./multiplexer.lo: ../../include/net-snmp/agent/all_helpers.h
+./multiplexer.lo: ../../include/net-snmp/agent/instance.h
+./multiplexer.lo: ../../include/net-snmp/agent/baby_steps.h
+./multiplexer.lo: ../../include/net-snmp/agent/scalar.h
+./multiplexer.lo: ../../include/net-snmp/agent/scalar_group.h
+./multiplexer.lo: ../../include/net-snmp/agent/watcher.h
+./multiplexer.lo: ../../include/net-snmp/agent/multiplexer.h
+./multiplexer.lo: ../../include/net-snmp/agent/null.h
+./multiplexer.lo: ../../include/net-snmp/agent/debug_handler.h
+./multiplexer.lo: ../../include/net-snmp/agent/cache_handler.h
+./multiplexer.lo: ../../include/net-snmp/agent/old_api.h
+./multiplexer.lo: ../../include/net-snmp/agent/read_only.h
+./multiplexer.lo: ../../include/net-snmp/agent/row_merge.h
+./multiplexer.lo: ../../include/net-snmp/agent/serialize.h
+./multiplexer.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./multiplexer.lo: ../../include/net-snmp/agent/mode_end_call.h
+./multiplexer.lo: ../../include/net-snmp/agent/table.h
+./multiplexer.lo: ../../include/net-snmp/agent/table_data.h
+./multiplexer.lo: ../../include/net-snmp/agent/table_dataset.h
+./multiplexer.lo: ../../include/net-snmp/agent/table_tdata.h
+./multiplexer.lo: ../../include/net-snmp/agent/table_iterator.h
+./multiplexer.lo: ../../include/net-snmp/agent/table_container.h
+./multiplexer.lo: ../../include/net-snmp/agent/table_array.h
+./multiplexer.lo: ../../include/net-snmp/agent/mfd.h
+./null.lo: ../../include/net-snmp/net-snmp-config.h
+./null.lo: ../../include/net-snmp/system/linux.h
+./null.lo: ../../include/net-snmp/system/sysv.h
+./null.lo: ../../include/net-snmp/system/generic.h
+./null.lo: ../../include/net-snmp/machine/generic.h
+./null.lo: ../../include/net-snmp/net-snmp-includes.h
+./null.lo: ../../include/net-snmp/definitions.h
+./null.lo: ../../include/net-snmp/types.h
+./null.lo: ../../include/net-snmp/library/snmp_api.h
+./null.lo: ../../include/net-snmp/library/asn1.h
+./null.lo: ../../include/net-snmp/library/snmp_impl.h
+./null.lo: ../../include/net-snmp/library/snmp.h
+./null.lo: ../../include/net-snmp/library/snmp-tc.h
+./null.lo: ../../include/net-snmp/utilities.h
+./null.lo: ../../include/net-snmp/library/snmp_client.h
+./null.lo: ../../include/net-snmp/library/system.h
+./null.lo: ../../include/net-snmp/library/tools.h
+./null.lo: ../../include/net-snmp/library/int64.h
+./null.lo: ../../include/net-snmp/library/mt_support.h
+./null.lo: ../../include/net-snmp/library/snmp_alarm.h
+./null.lo: ../../include/net-snmp/library/callback.h
+./null.lo: ../../include/net-snmp/library/data_list.h
+./null.lo: ../../include/net-snmp/library/oid_stash.h
+./null.lo: ../../include/net-snmp/library/check_varbind.h
+./null.lo: ../../include/net-snmp/library/container.h
+./null.lo: ../../include/net-snmp/library/factory.h
+./null.lo: ../../include/net-snmp/library/snmp_logging.h
+./null.lo: ../../include/net-snmp/library/container_binary_array.h
+./null.lo: ../../include/net-snmp/library/container_list_ssll.h
+./null.lo: ../../include/net-snmp/library/container_iterator.h
+./null.lo: ../../include/net-snmp/library/container.h
+./null.lo: ../../include/net-snmp/library/snmp_assert.h
+./null.lo: ../../include/net-snmp/version.h
+./null.lo: ../../include/net-snmp/session_api.h
+./null.lo: ../../include/net-snmp/library/snmp_transport.h
+./null.lo: ../../include/net-snmp/library/snmp_service.h
+./null.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./null.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./null.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./null.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./null.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./null.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./null.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./null.lo: ../../include/net-snmp/library/ucd_compat.h
+./null.lo: ../../include/net-snmp/pdu_api.h ../../include/net-snmp/mib_api.h
+./null.lo: ../../include/net-snmp/library/mib.h
+./null.lo: ../../include/net-snmp/library/parse.h
+./null.lo: ../../include/net-snmp/varbind_api.h
+./null.lo: ../../include/net-snmp/config_api.h
+./null.lo: ../../include/net-snmp/library/read_config.h
+./null.lo: ../../include/net-snmp/library/default_store.h
+./null.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./null.lo: ../../include/net-snmp/library/snmp_enum.h
+./null.lo: ../../include/net-snmp/library/vacm.h
+./null.lo: ../../include/net-snmp/output_api.h
+./null.lo: ../../include/net-snmp/library/snmp_debug.h
+./null.lo: ../../include/net-snmp/snmpv3_api.h
+./null.lo: ../../include/net-snmp/library/snmpv3.h
+./null.lo: ../../include/net-snmp/library/transform_oids.h
+./null.lo: ../../include/net-snmp/library/keytools.h
+./null.lo: ../../include/net-snmp/library/scapi.h
+./null.lo: ../../include/net-snmp/library/lcd_time.h
+./null.lo: ../../include/net-snmp/library/snmp_secmod.h
+./null.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./null.lo: ../../include/net-snmp/library/snmpusm.h
+./null.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./null.lo: ../../include/net-snmp/agent/mib_module_config.h
+./null.lo: ../../include/net-snmp/agent/agent_module_config.h
+./null.lo: ../../include/net-snmp/agent/snmp_agent.h
+./null.lo: ../../include/net-snmp/agent/snmp_vars.h
+./null.lo: ../../include/net-snmp/agent/agent_handler.h
+./null.lo: ../../include/net-snmp/agent/var_struct.h
+./null.lo: ../../include/net-snmp/agent/agent_registry.h
+./null.lo: ../../include/net-snmp/library/fd_event_manager.h
+./null.lo: ../../include/net-snmp/agent/ds_agent.h
+./null.lo: ../../include/net-snmp/agent/agent_read_config.h
+./null.lo: ../../include/net-snmp/agent/agent_trap.h
+./null.lo: ../../include/net-snmp/agent/all_helpers.h
+./null.lo: ../../include/net-snmp/agent/instance.h
+./null.lo: ../../include/net-snmp/agent/baby_steps.h
+./null.lo: ../../include/net-snmp/agent/scalar.h
+./null.lo: ../../include/net-snmp/agent/scalar_group.h
+./null.lo: ../../include/net-snmp/agent/watcher.h
+./null.lo: ../../include/net-snmp/agent/multiplexer.h
+./null.lo: ../../include/net-snmp/agent/null.h
+./null.lo: ../../include/net-snmp/agent/debug_handler.h
+./null.lo: ../../include/net-snmp/agent/cache_handler.h
+./null.lo: ../../include/net-snmp/agent/old_api.h
+./null.lo: ../../include/net-snmp/agent/read_only.h
+./null.lo: ../../include/net-snmp/agent/row_merge.h
+./null.lo: ../../include/net-snmp/agent/serialize.h
+./null.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./null.lo: ../../include/net-snmp/agent/mode_end_call.h
+./null.lo: ../../include/net-snmp/agent/table.h
+./null.lo: ../../include/net-snmp/agent/table_data.h
+./null.lo: ../../include/net-snmp/agent/table_dataset.h
+./null.lo: ../../include/net-snmp/agent/table_tdata.h
+./null.lo: ../../include/net-snmp/agent/table_iterator.h
+./null.lo: ../../include/net-snmp/agent/table_container.h
+./null.lo: ../../include/net-snmp/agent/table_array.h
+./null.lo: ../../include/net-snmp/agent/mfd.h
+./old_api.lo: ../../include/net-snmp/net-snmp-config.h
+./old_api.lo: ../../include/net-snmp/system/linux.h
+./old_api.lo: ../../include/net-snmp/system/sysv.h
+./old_api.lo: ../../include/net-snmp/system/generic.h
+./old_api.lo: ../../include/net-snmp/machine/generic.h
+./old_api.lo: ../../include/net-snmp/net-snmp-includes.h
+./old_api.lo: ../../include/net-snmp/definitions.h
+./old_api.lo: ../../include/net-snmp/types.h
+./old_api.lo: ../../include/net-snmp/library/snmp_api.h
+./old_api.lo: ../../include/net-snmp/library/asn1.h
+./old_api.lo: ../../include/net-snmp/library/snmp_impl.h
+./old_api.lo: ../../include/net-snmp/library/snmp.h
+./old_api.lo: ../../include/net-snmp/library/snmp-tc.h
+./old_api.lo: ../../include/net-snmp/utilities.h
+./old_api.lo: ../../include/net-snmp/library/snmp_client.h
+./old_api.lo: ../../include/net-snmp/library/system.h
+./old_api.lo: ../../include/net-snmp/library/tools.h
+./old_api.lo: ../../include/net-snmp/library/int64.h
+./old_api.lo: ../../include/net-snmp/library/mt_support.h
+./old_api.lo: ../../include/net-snmp/library/snmp_alarm.h
+./old_api.lo: ../../include/net-snmp/library/callback.h
+./old_api.lo: ../../include/net-snmp/library/data_list.h
+./old_api.lo: ../../include/net-snmp/library/oid_stash.h
+./old_api.lo: ../../include/net-snmp/library/check_varbind.h
+./old_api.lo: ../../include/net-snmp/library/container.h
+./old_api.lo: ../../include/net-snmp/library/factory.h
+./old_api.lo: ../../include/net-snmp/library/snmp_logging.h
+./old_api.lo: ../../include/net-snmp/library/container_binary_array.h
+./old_api.lo: ../../include/net-snmp/library/container_list_ssll.h
+./old_api.lo: ../../include/net-snmp/library/container_iterator.h
+./old_api.lo: ../../include/net-snmp/library/container.h
+./old_api.lo: ../../include/net-snmp/library/snmp_assert.h
+./old_api.lo: ../../include/net-snmp/version.h
+./old_api.lo: ../../include/net-snmp/session_api.h
+./old_api.lo: ../../include/net-snmp/library/snmp_transport.h
+./old_api.lo: ../../include/net-snmp/library/snmp_service.h
+./old_api.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./old_api.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./old_api.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./old_api.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./old_api.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./old_api.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./old_api.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./old_api.lo: ../../include/net-snmp/library/ucd_compat.h
+./old_api.lo: ../../include/net-snmp/pdu_api.h
+./old_api.lo: ../../include/net-snmp/mib_api.h
+./old_api.lo: ../../include/net-snmp/library/mib.h
+./old_api.lo: ../../include/net-snmp/library/parse.h
+./old_api.lo: ../../include/net-snmp/varbind_api.h
+./old_api.lo: ../../include/net-snmp/config_api.h
+./old_api.lo: ../../include/net-snmp/library/read_config.h
+./old_api.lo: ../../include/net-snmp/library/default_store.h
+./old_api.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./old_api.lo: ../../include/net-snmp/library/snmp_enum.h
+./old_api.lo: ../../include/net-snmp/library/vacm.h
+./old_api.lo: ../../include/net-snmp/output_api.h
+./old_api.lo: ../../include/net-snmp/library/snmp_debug.h
+./old_api.lo: ../../include/net-snmp/snmpv3_api.h
+./old_api.lo: ../../include/net-snmp/library/snmpv3.h
+./old_api.lo: ../../include/net-snmp/library/transform_oids.h
+./old_api.lo: ../../include/net-snmp/library/keytools.h
+./old_api.lo: ../../include/net-snmp/library/scapi.h
+./old_api.lo: ../../include/net-snmp/library/lcd_time.h
+./old_api.lo: ../../include/net-snmp/library/snmp_secmod.h
+./old_api.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./old_api.lo: ../../include/net-snmp/library/snmpusm.h
+./old_api.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./old_api.lo: ../../include/net-snmp/agent/mib_module_config.h
+./old_api.lo: ../../include/net-snmp/agent/agent_module_config.h
+./old_api.lo: ../../include/net-snmp/agent/snmp_agent.h
+./old_api.lo: ../../include/net-snmp/agent/snmp_vars.h
+./old_api.lo: ../../include/net-snmp/agent/agent_handler.h
+./old_api.lo: ../../include/net-snmp/agent/var_struct.h
+./old_api.lo: ../../include/net-snmp/agent/agent_registry.h
+./old_api.lo: ../../include/net-snmp/library/fd_event_manager.h
+./old_api.lo: ../../include/net-snmp/agent/ds_agent.h
+./old_api.lo: ../../include/net-snmp/agent/agent_read_config.h
+./old_api.lo: ../../include/net-snmp/agent/agent_trap.h
+./old_api.lo: ../../include/net-snmp/agent/all_helpers.h
+./old_api.lo: ../../include/net-snmp/agent/instance.h
+./old_api.lo: ../../include/net-snmp/agent/baby_steps.h
+./old_api.lo: ../../include/net-snmp/agent/scalar.h
+./old_api.lo: ../../include/net-snmp/agent/scalar_group.h
+./old_api.lo: ../../include/net-snmp/agent/watcher.h
+./old_api.lo: ../../include/net-snmp/agent/multiplexer.h
+./old_api.lo: ../../include/net-snmp/agent/null.h
+./old_api.lo: ../../include/net-snmp/agent/debug_handler.h
+./old_api.lo: ../../include/net-snmp/agent/cache_handler.h
+./old_api.lo: ../../include/net-snmp/agent/old_api.h
+./old_api.lo: ../../include/net-snmp/agent/read_only.h
+./old_api.lo: ../../include/net-snmp/agent/row_merge.h
+./old_api.lo: ../../include/net-snmp/agent/serialize.h
+./old_api.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./old_api.lo: ../../include/net-snmp/agent/mode_end_call.h
+./old_api.lo: ../../include/net-snmp/agent/table.h
+./old_api.lo: ../../include/net-snmp/agent/table_data.h
+./old_api.lo: ../../include/net-snmp/agent/table_dataset.h
+./old_api.lo: ../../include/net-snmp/agent/table_tdata.h
+./old_api.lo: ../../include/net-snmp/agent/table_iterator.h
+./old_api.lo: ../../include/net-snmp/agent/table_container.h
+./old_api.lo: ../../include/net-snmp/agent/table_array.h
+./old_api.lo: ../../include/net-snmp/agent/mfd.h
+./old_api.lo: ../../include/net-snmp/agent/agent_callbacks.h
+./read_only.lo: ../../include/net-snmp/net-snmp-config.h
+./read_only.lo: ../../include/net-snmp/system/linux.h
+./read_only.lo: ../../include/net-snmp/system/sysv.h
+./read_only.lo: ../../include/net-snmp/system/generic.h
+./read_only.lo: ../../include/net-snmp/machine/generic.h
+./read_only.lo: ../../include/net-snmp/net-snmp-includes.h
+./read_only.lo: ../../include/net-snmp/definitions.h
+./read_only.lo: ../../include/net-snmp/types.h
+./read_only.lo: ../../include/net-snmp/library/snmp_api.h
+./read_only.lo: ../../include/net-snmp/library/asn1.h
+./read_only.lo: ../../include/net-snmp/library/snmp_impl.h
+./read_only.lo: ../../include/net-snmp/library/snmp.h
+./read_only.lo: ../../include/net-snmp/library/snmp-tc.h
+./read_only.lo: ../../include/net-snmp/utilities.h
+./read_only.lo: ../../include/net-snmp/library/snmp_client.h
+./read_only.lo: ../../include/net-snmp/library/system.h
+./read_only.lo: ../../include/net-snmp/library/tools.h
+./read_only.lo: ../../include/net-snmp/library/int64.h
+./read_only.lo: ../../include/net-snmp/library/mt_support.h
+./read_only.lo: ../../include/net-snmp/library/snmp_alarm.h
+./read_only.lo: ../../include/net-snmp/library/callback.h
+./read_only.lo: ../../include/net-snmp/library/data_list.h
+./read_only.lo: ../../include/net-snmp/library/oid_stash.h
+./read_only.lo: ../../include/net-snmp/library/check_varbind.h
+./read_only.lo: ../../include/net-snmp/library/container.h
+./read_only.lo: ../../include/net-snmp/library/factory.h
+./read_only.lo: ../../include/net-snmp/library/snmp_logging.h
+./read_only.lo: ../../include/net-snmp/library/container_binary_array.h
+./read_only.lo: ../../include/net-snmp/library/container_list_ssll.h
+./read_only.lo: ../../include/net-snmp/library/container_iterator.h
+./read_only.lo: ../../include/net-snmp/library/container.h
+./read_only.lo: ../../include/net-snmp/library/snmp_assert.h
+./read_only.lo: ../../include/net-snmp/version.h
+./read_only.lo: ../../include/net-snmp/session_api.h
+./read_only.lo: ../../include/net-snmp/library/snmp_transport.h
+./read_only.lo: ../../include/net-snmp/library/snmp_service.h
+./read_only.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./read_only.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./read_only.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./read_only.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./read_only.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./read_only.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./read_only.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./read_only.lo: ../../include/net-snmp/library/ucd_compat.h
+./read_only.lo: ../../include/net-snmp/pdu_api.h
+./read_only.lo: ../../include/net-snmp/mib_api.h
+./read_only.lo: ../../include/net-snmp/library/mib.h
+./read_only.lo: ../../include/net-snmp/library/parse.h
+./read_only.lo: ../../include/net-snmp/varbind_api.h
+./read_only.lo: ../../include/net-snmp/config_api.h
+./read_only.lo: ../../include/net-snmp/library/read_config.h
+./read_only.lo: ../../include/net-snmp/library/default_store.h
+./read_only.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./read_only.lo: ../../include/net-snmp/library/snmp_enum.h
+./read_only.lo: ../../include/net-snmp/library/vacm.h
+./read_only.lo: ../../include/net-snmp/output_api.h
+./read_only.lo: ../../include/net-snmp/library/snmp_debug.h
+./read_only.lo: ../../include/net-snmp/snmpv3_api.h
+./read_only.lo: ../../include/net-snmp/library/snmpv3.h
+./read_only.lo: ../../include/net-snmp/library/transform_oids.h
+./read_only.lo: ../../include/net-snmp/library/keytools.h
+./read_only.lo: ../../include/net-snmp/library/scapi.h
+./read_only.lo: ../../include/net-snmp/library/lcd_time.h
+./read_only.lo: ../../include/net-snmp/library/snmp_secmod.h
+./read_only.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./read_only.lo: ../../include/net-snmp/library/snmpusm.h
+./read_only.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./read_only.lo: ../../include/net-snmp/agent/mib_module_config.h
+./read_only.lo: ../../include/net-snmp/agent/agent_module_config.h
+./read_only.lo: ../../include/net-snmp/agent/snmp_agent.h
+./read_only.lo: ../../include/net-snmp/agent/snmp_vars.h
+./read_only.lo: ../../include/net-snmp/agent/agent_handler.h
+./read_only.lo: ../../include/net-snmp/agent/var_struct.h
+./read_only.lo: ../../include/net-snmp/agent/agent_registry.h
+./read_only.lo: ../../include/net-snmp/library/fd_event_manager.h
+./read_only.lo: ../../include/net-snmp/agent/ds_agent.h
+./read_only.lo: ../../include/net-snmp/agent/agent_read_config.h
+./read_only.lo: ../../include/net-snmp/agent/agent_trap.h
+./read_only.lo: ../../include/net-snmp/agent/all_helpers.h
+./read_only.lo: ../../include/net-snmp/agent/instance.h
+./read_only.lo: ../../include/net-snmp/agent/baby_steps.h
+./read_only.lo: ../../include/net-snmp/agent/scalar.h
+./read_only.lo: ../../include/net-snmp/agent/scalar_group.h
+./read_only.lo: ../../include/net-snmp/agent/watcher.h
+./read_only.lo: ../../include/net-snmp/agent/multiplexer.h
+./read_only.lo: ../../include/net-snmp/agent/null.h
+./read_only.lo: ../../include/net-snmp/agent/debug_handler.h
+./read_only.lo: ../../include/net-snmp/agent/cache_handler.h
+./read_only.lo: ../../include/net-snmp/agent/old_api.h
+./read_only.lo: ../../include/net-snmp/agent/read_only.h
+./read_only.lo: ../../include/net-snmp/agent/row_merge.h
+./read_only.lo: ../../include/net-snmp/agent/serialize.h
+./read_only.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./read_only.lo: ../../include/net-snmp/agent/mode_end_call.h
+./read_only.lo: ../../include/net-snmp/agent/table.h
+./read_only.lo: ../../include/net-snmp/agent/table_data.h
+./read_only.lo: ../../include/net-snmp/agent/table_dataset.h
+./read_only.lo: ../../include/net-snmp/agent/table_tdata.h
+./read_only.lo: ../../include/net-snmp/agent/table_iterator.h
+./read_only.lo: ../../include/net-snmp/agent/table_container.h
+./read_only.lo: ../../include/net-snmp/agent/table_array.h
+./read_only.lo: ../../include/net-snmp/agent/mfd.h
+./row_merge.lo: ../../include/net-snmp/net-snmp-config.h
+./row_merge.lo: ../../include/net-snmp/system/linux.h
+./row_merge.lo: ../../include/net-snmp/system/sysv.h
+./row_merge.lo: ../../include/net-snmp/system/generic.h
+./row_merge.lo: ../../include/net-snmp/machine/generic.h
+./row_merge.lo: ../../include/net-snmp/net-snmp-includes.h
+./row_merge.lo: ../../include/net-snmp/definitions.h
+./row_merge.lo: ../../include/net-snmp/types.h
+./row_merge.lo: ../../include/net-snmp/library/snmp_api.h
+./row_merge.lo: ../../include/net-snmp/library/asn1.h
+./row_merge.lo: ../../include/net-snmp/library/snmp_impl.h
+./row_merge.lo: ../../include/net-snmp/library/snmp.h
+./row_merge.lo: ../../include/net-snmp/library/snmp-tc.h
+./row_merge.lo: ../../include/net-snmp/utilities.h
+./row_merge.lo: ../../include/net-snmp/library/snmp_client.h
+./row_merge.lo: ../../include/net-snmp/library/system.h
+./row_merge.lo: ../../include/net-snmp/library/tools.h
+./row_merge.lo: ../../include/net-snmp/library/int64.h
+./row_merge.lo: ../../include/net-snmp/library/mt_support.h
+./row_merge.lo: ../../include/net-snmp/library/snmp_alarm.h
+./row_merge.lo: ../../include/net-snmp/library/callback.h
+./row_merge.lo: ../../include/net-snmp/library/data_list.h
+./row_merge.lo: ../../include/net-snmp/library/oid_stash.h
+./row_merge.lo: ../../include/net-snmp/library/check_varbind.h
+./row_merge.lo: ../../include/net-snmp/library/container.h
+./row_merge.lo: ../../include/net-snmp/library/factory.h
+./row_merge.lo: ../../include/net-snmp/library/snmp_logging.h
+./row_merge.lo: ../../include/net-snmp/library/container_binary_array.h
+./row_merge.lo: ../../include/net-snmp/library/container_list_ssll.h
+./row_merge.lo: ../../include/net-snmp/library/container_iterator.h
+./row_merge.lo: ../../include/net-snmp/library/container.h
+./row_merge.lo: ../../include/net-snmp/library/snmp_assert.h
+./row_merge.lo: ../../include/net-snmp/version.h
+./row_merge.lo: ../../include/net-snmp/session_api.h
+./row_merge.lo: ../../include/net-snmp/library/snmp_transport.h
+./row_merge.lo: ../../include/net-snmp/library/snmp_service.h
+./row_merge.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./row_merge.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./row_merge.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./row_merge.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./row_merge.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./row_merge.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./row_merge.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./row_merge.lo: ../../include/net-snmp/library/ucd_compat.h
+./row_merge.lo: ../../include/net-snmp/pdu_api.h
+./row_merge.lo: ../../include/net-snmp/mib_api.h
+./row_merge.lo: ../../include/net-snmp/library/mib.h
+./row_merge.lo: ../../include/net-snmp/library/parse.h
+./row_merge.lo: ../../include/net-snmp/varbind_api.h
+./row_merge.lo: ../../include/net-snmp/config_api.h
+./row_merge.lo: ../../include/net-snmp/library/read_config.h
+./row_merge.lo: ../../include/net-snmp/library/default_store.h
+./row_merge.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./row_merge.lo: ../../include/net-snmp/library/snmp_enum.h
+./row_merge.lo: ../../include/net-snmp/library/vacm.h
+./row_merge.lo: ../../include/net-snmp/output_api.h
+./row_merge.lo: ../../include/net-snmp/library/snmp_debug.h
+./row_merge.lo: ../../include/net-snmp/snmpv3_api.h
+./row_merge.lo: ../../include/net-snmp/library/snmpv3.h
+./row_merge.lo: ../../include/net-snmp/library/transform_oids.h
+./row_merge.lo: ../../include/net-snmp/library/keytools.h
+./row_merge.lo: ../../include/net-snmp/library/scapi.h
+./row_merge.lo: ../../include/net-snmp/library/lcd_time.h
+./row_merge.lo: ../../include/net-snmp/library/snmp_secmod.h
+./row_merge.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./row_merge.lo: ../../include/net-snmp/library/snmpusm.h
+./row_merge.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./row_merge.lo: ../../include/net-snmp/agent/mib_module_config.h
+./row_merge.lo: ../../include/net-snmp/agent/agent_module_config.h
+./row_merge.lo: ../../include/net-snmp/agent/snmp_agent.h
+./row_merge.lo: ../../include/net-snmp/agent/snmp_vars.h
+./row_merge.lo: ../../include/net-snmp/agent/agent_handler.h
+./row_merge.lo: ../../include/net-snmp/agent/var_struct.h
+./row_merge.lo: ../../include/net-snmp/agent/agent_registry.h
+./row_merge.lo: ../../include/net-snmp/library/fd_event_manager.h
+./row_merge.lo: ../../include/net-snmp/agent/ds_agent.h
+./row_merge.lo: ../../include/net-snmp/agent/agent_read_config.h
+./row_merge.lo: ../../include/net-snmp/agent/agent_trap.h
+./row_merge.lo: ../../include/net-snmp/agent/all_helpers.h
+./row_merge.lo: ../../include/net-snmp/agent/instance.h
+./row_merge.lo: ../../include/net-snmp/agent/baby_steps.h
+./row_merge.lo: ../../include/net-snmp/agent/scalar.h
+./row_merge.lo: ../../include/net-snmp/agent/scalar_group.h
+./row_merge.lo: ../../include/net-snmp/agent/watcher.h
+./row_merge.lo: ../../include/net-snmp/agent/multiplexer.h
+./row_merge.lo: ../../include/net-snmp/agent/null.h
+./row_merge.lo: ../../include/net-snmp/agent/debug_handler.h
+./row_merge.lo: ../../include/net-snmp/agent/cache_handler.h
+./row_merge.lo: ../../include/net-snmp/agent/old_api.h
+./row_merge.lo: ../../include/net-snmp/agent/read_only.h
+./row_merge.lo: ../../include/net-snmp/agent/row_merge.h
+./row_merge.lo: ../../include/net-snmp/agent/serialize.h
+./row_merge.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./row_merge.lo: ../../include/net-snmp/agent/mode_end_call.h
+./row_merge.lo: ../../include/net-snmp/agent/table.h
+./row_merge.lo: ../../include/net-snmp/agent/table_data.h
+./row_merge.lo: ../../include/net-snmp/agent/table_dataset.h
+./row_merge.lo: ../../include/net-snmp/agent/table_tdata.h
+./row_merge.lo: ../../include/net-snmp/agent/table_iterator.h
+./row_merge.lo: ../../include/net-snmp/agent/table_container.h
+./row_merge.lo: ../../include/net-snmp/agent/table_array.h
+./row_merge.lo: ../../include/net-snmp/agent/mfd.h
+./scalar.lo: ../../include/net-snmp/net-snmp-config.h
+./scalar.lo: ../../include/net-snmp/system/linux.h
+./scalar.lo: ../../include/net-snmp/system/sysv.h
+./scalar.lo: ../../include/net-snmp/system/generic.h
+./scalar.lo: ../../include/net-snmp/machine/generic.h
+./scalar.lo: ../../include/net-snmp/net-snmp-includes.h
+./scalar.lo: ../../include/net-snmp/definitions.h
+./scalar.lo: ../../include/net-snmp/types.h
+./scalar.lo: ../../include/net-snmp/library/snmp_api.h
+./scalar.lo: ../../include/net-snmp/library/asn1.h
+./scalar.lo: ../../include/net-snmp/library/snmp_impl.h
+./scalar.lo: ../../include/net-snmp/library/snmp.h
+./scalar.lo: ../../include/net-snmp/library/snmp-tc.h
+./scalar.lo: ../../include/net-snmp/utilities.h
+./scalar.lo: ../../include/net-snmp/library/snmp_client.h
+./scalar.lo: ../../include/net-snmp/library/system.h
+./scalar.lo: ../../include/net-snmp/library/tools.h
+./scalar.lo: ../../include/net-snmp/library/int64.h
+./scalar.lo: ../../include/net-snmp/library/mt_support.h
+./scalar.lo: ../../include/net-snmp/library/snmp_alarm.h
+./scalar.lo: ../../include/net-snmp/library/callback.h
+./scalar.lo: ../../include/net-snmp/library/data_list.h
+./scalar.lo: ../../include/net-snmp/library/oid_stash.h
+./scalar.lo: ../../include/net-snmp/library/check_varbind.h
+./scalar.lo: ../../include/net-snmp/library/container.h
+./scalar.lo: ../../include/net-snmp/library/factory.h
+./scalar.lo: ../../include/net-snmp/library/snmp_logging.h
+./scalar.lo: ../../include/net-snmp/library/container_binary_array.h
+./scalar.lo: ../../include/net-snmp/library/container_list_ssll.h
+./scalar.lo: ../../include/net-snmp/library/container_iterator.h
+./scalar.lo: ../../include/net-snmp/library/container.h
+./scalar.lo: ../../include/net-snmp/library/snmp_assert.h
+./scalar.lo: ../../include/net-snmp/version.h
+./scalar.lo: ../../include/net-snmp/session_api.h
+./scalar.lo: ../../include/net-snmp/library/snmp_transport.h
+./scalar.lo: ../../include/net-snmp/library/snmp_service.h
+./scalar.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./scalar.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./scalar.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./scalar.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./scalar.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./scalar.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./scalar.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./scalar.lo: ../../include/net-snmp/library/ucd_compat.h
+./scalar.lo: ../../include/net-snmp/pdu_api.h
+./scalar.lo: ../../include/net-snmp/mib_api.h
+./scalar.lo: ../../include/net-snmp/library/mib.h
+./scalar.lo: ../../include/net-snmp/library/parse.h
+./scalar.lo: ../../include/net-snmp/varbind_api.h
+./scalar.lo: ../../include/net-snmp/config_api.h
+./scalar.lo: ../../include/net-snmp/library/read_config.h
+./scalar.lo: ../../include/net-snmp/library/default_store.h
+./scalar.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./scalar.lo: ../../include/net-snmp/library/snmp_enum.h
+./scalar.lo: ../../include/net-snmp/library/vacm.h
+./scalar.lo: ../../include/net-snmp/output_api.h
+./scalar.lo: ../../include/net-snmp/library/snmp_debug.h
+./scalar.lo: ../../include/net-snmp/snmpv3_api.h
+./scalar.lo: ../../include/net-snmp/library/snmpv3.h
+./scalar.lo: ../../include/net-snmp/library/transform_oids.h
+./scalar.lo: ../../include/net-snmp/library/keytools.h
+./scalar.lo: ../../include/net-snmp/library/scapi.h
+./scalar.lo: ../../include/net-snmp/library/lcd_time.h
+./scalar.lo: ../../include/net-snmp/library/snmp_secmod.h
+./scalar.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./scalar.lo: ../../include/net-snmp/library/snmpusm.h
+./scalar.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./scalar.lo: ../../include/net-snmp/agent/mib_module_config.h
+./scalar.lo: ../../include/net-snmp/agent/agent_module_config.h
+./scalar.lo: ../../include/net-snmp/agent/snmp_agent.h
+./scalar.lo: ../../include/net-snmp/agent/snmp_vars.h
+./scalar.lo: ../../include/net-snmp/agent/agent_handler.h
+./scalar.lo: ../../include/net-snmp/agent/var_struct.h
+./scalar.lo: ../../include/net-snmp/agent/agent_registry.h
+./scalar.lo: ../../include/net-snmp/library/fd_event_manager.h
+./scalar.lo: ../../include/net-snmp/agent/ds_agent.h
+./scalar.lo: ../../include/net-snmp/agent/agent_read_config.h
+./scalar.lo: ../../include/net-snmp/agent/agent_trap.h
+./scalar.lo: ../../include/net-snmp/agent/all_helpers.h
+./scalar.lo: ../../include/net-snmp/agent/instance.h
+./scalar.lo: ../../include/net-snmp/agent/baby_steps.h
+./scalar.lo: ../../include/net-snmp/agent/scalar.h
+./scalar.lo: ../../include/net-snmp/agent/scalar_group.h
+./scalar.lo: ../../include/net-snmp/agent/watcher.h
+./scalar.lo: ../../include/net-snmp/agent/multiplexer.h
+./scalar.lo: ../../include/net-snmp/agent/null.h
+./scalar.lo: ../../include/net-snmp/agent/debug_handler.h
+./scalar.lo: ../../include/net-snmp/agent/cache_handler.h
+./scalar.lo: ../../include/net-snmp/agent/old_api.h
+./scalar.lo: ../../include/net-snmp/agent/read_only.h
+./scalar.lo: ../../include/net-snmp/agent/row_merge.h
+./scalar.lo: ../../include/net-snmp/agent/serialize.h
+./scalar.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./scalar.lo: ../../include/net-snmp/agent/mode_end_call.h
+./scalar.lo: ../../include/net-snmp/agent/table.h
+./scalar.lo: ../../include/net-snmp/agent/table_data.h
+./scalar.lo: ../../include/net-snmp/agent/table_dataset.h
+./scalar.lo: ../../include/net-snmp/agent/table_tdata.h
+./scalar.lo: ../../include/net-snmp/agent/table_iterator.h
+./scalar.lo: ../../include/net-snmp/agent/table_container.h
+./scalar.lo: ../../include/net-snmp/agent/table_array.h
+./scalar.lo: ../../include/net-snmp/agent/mfd.h
+./scalar_group.lo: ../../include/net-snmp/net-snmp-config.h
+./scalar_group.lo: ../../include/net-snmp/system/linux.h
+./scalar_group.lo: ../../include/net-snmp/system/sysv.h
+./scalar_group.lo: ../../include/net-snmp/system/generic.h
+./scalar_group.lo: ../../include/net-snmp/machine/generic.h
+./scalar_group.lo: ../../include/net-snmp/net-snmp-includes.h
+./scalar_group.lo: ../../include/net-snmp/definitions.h
+./scalar_group.lo: ../../include/net-snmp/types.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp_api.h
+./scalar_group.lo: ../../include/net-snmp/library/asn1.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp_impl.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp-tc.h
+./scalar_group.lo: ../../include/net-snmp/utilities.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp_client.h
+./scalar_group.lo: ../../include/net-snmp/library/system.h
+./scalar_group.lo: ../../include/net-snmp/library/tools.h
+./scalar_group.lo: ../../include/net-snmp/library/int64.h
+./scalar_group.lo: ../../include/net-snmp/library/mt_support.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp_alarm.h
+./scalar_group.lo: ../../include/net-snmp/library/callback.h
+./scalar_group.lo: ../../include/net-snmp/library/data_list.h
+./scalar_group.lo: ../../include/net-snmp/library/oid_stash.h
+./scalar_group.lo: ../../include/net-snmp/library/check_varbind.h
+./scalar_group.lo: ../../include/net-snmp/library/container.h
+./scalar_group.lo: ../../include/net-snmp/library/factory.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp_logging.h
+./scalar_group.lo: ../../include/net-snmp/library/container_binary_array.h
+./scalar_group.lo: ../../include/net-snmp/library/container_list_ssll.h
+./scalar_group.lo: ../../include/net-snmp/library/container_iterator.h
+./scalar_group.lo: ../../include/net-snmp/library/container.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp_assert.h
+./scalar_group.lo: ../../include/net-snmp/version.h
+./scalar_group.lo: ../../include/net-snmp/session_api.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp_transport.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp_service.h
+./scalar_group.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./scalar_group.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./scalar_group.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./scalar_group.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./scalar_group.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./scalar_group.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./scalar_group.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./scalar_group.lo: ../../include/net-snmp/library/ucd_compat.h
+./scalar_group.lo: ../../include/net-snmp/pdu_api.h
+./scalar_group.lo: ../../include/net-snmp/mib_api.h
+./scalar_group.lo: ../../include/net-snmp/library/mib.h
+./scalar_group.lo: ../../include/net-snmp/library/parse.h
+./scalar_group.lo: ../../include/net-snmp/varbind_api.h
+./scalar_group.lo: ../../include/net-snmp/config_api.h
+./scalar_group.lo: ../../include/net-snmp/library/read_config.h
+./scalar_group.lo: ../../include/net-snmp/library/default_store.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp_enum.h
+./scalar_group.lo: ../../include/net-snmp/library/vacm.h
+./scalar_group.lo: ../../include/net-snmp/output_api.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp_debug.h
+./scalar_group.lo: ../../include/net-snmp/snmpv3_api.h
+./scalar_group.lo: ../../include/net-snmp/library/snmpv3.h
+./scalar_group.lo: ../../include/net-snmp/library/transform_oids.h
+./scalar_group.lo: ../../include/net-snmp/library/keytools.h
+./scalar_group.lo: ../../include/net-snmp/library/scapi.h
+./scalar_group.lo: ../../include/net-snmp/library/lcd_time.h
+./scalar_group.lo: ../../include/net-snmp/library/snmp_secmod.h
+./scalar_group.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./scalar_group.lo: ../../include/net-snmp/library/snmpusm.h
+./scalar_group.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./scalar_group.lo: ../../include/net-snmp/agent/mib_module_config.h
+./scalar_group.lo: ../../include/net-snmp/agent/agent_module_config.h
+./scalar_group.lo: ../../include/net-snmp/agent/snmp_agent.h
+./scalar_group.lo: ../../include/net-snmp/agent/snmp_vars.h
+./scalar_group.lo: ../../include/net-snmp/agent/agent_handler.h
+./scalar_group.lo: ../../include/net-snmp/agent/var_struct.h
+./scalar_group.lo: ../../include/net-snmp/agent/agent_registry.h
+./scalar_group.lo: ../../include/net-snmp/library/fd_event_manager.h
+./scalar_group.lo: ../../include/net-snmp/agent/ds_agent.h
+./scalar_group.lo: ../../include/net-snmp/agent/agent_read_config.h
+./scalar_group.lo: ../../include/net-snmp/agent/agent_trap.h
+./scalar_group.lo: ../../include/net-snmp/agent/all_helpers.h
+./scalar_group.lo: ../../include/net-snmp/agent/instance.h
+./scalar_group.lo: ../../include/net-snmp/agent/baby_steps.h
+./scalar_group.lo: ../../include/net-snmp/agent/scalar.h
+./scalar_group.lo: ../../include/net-snmp/agent/scalar_group.h
+./scalar_group.lo: ../../include/net-snmp/agent/watcher.h
+./scalar_group.lo: ../../include/net-snmp/agent/multiplexer.h
+./scalar_group.lo: ../../include/net-snmp/agent/null.h
+./scalar_group.lo: ../../include/net-snmp/agent/debug_handler.h
+./scalar_group.lo: ../../include/net-snmp/agent/cache_handler.h
+./scalar_group.lo: ../../include/net-snmp/agent/old_api.h
+./scalar_group.lo: ../../include/net-snmp/agent/read_only.h
+./scalar_group.lo: ../../include/net-snmp/agent/row_merge.h
+./scalar_group.lo: ../../include/net-snmp/agent/serialize.h
+./scalar_group.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./scalar_group.lo: ../../include/net-snmp/agent/mode_end_call.h
+./scalar_group.lo: ../../include/net-snmp/agent/table.h
+./scalar_group.lo: ../../include/net-snmp/agent/table_data.h
+./scalar_group.lo: ../../include/net-snmp/agent/table_dataset.h
+./scalar_group.lo: ../../include/net-snmp/agent/table_tdata.h
+./scalar_group.lo: ../../include/net-snmp/agent/table_iterator.h
+./scalar_group.lo: ../../include/net-snmp/agent/table_container.h
+./scalar_group.lo: ../../include/net-snmp/agent/table_array.h
+./scalar_group.lo: ../../include/net-snmp/agent/mfd.h
+./serialize.lo: ../../include/net-snmp/net-snmp-config.h
+./serialize.lo: ../../include/net-snmp/system/linux.h
+./serialize.lo: ../../include/net-snmp/system/sysv.h
+./serialize.lo: ../../include/net-snmp/system/generic.h
+./serialize.lo: ../../include/net-snmp/machine/generic.h
+./serialize.lo: ../../include/net-snmp/net-snmp-includes.h
+./serialize.lo: ../../include/net-snmp/definitions.h
+./serialize.lo: ../../include/net-snmp/types.h
+./serialize.lo: ../../include/net-snmp/library/snmp_api.h
+./serialize.lo: ../../include/net-snmp/library/asn1.h
+./serialize.lo: ../../include/net-snmp/library/snmp_impl.h
+./serialize.lo: ../../include/net-snmp/library/snmp.h
+./serialize.lo: ../../include/net-snmp/library/snmp-tc.h
+./serialize.lo: ../../include/net-snmp/utilities.h
+./serialize.lo: ../../include/net-snmp/library/snmp_client.h
+./serialize.lo: ../../include/net-snmp/library/system.h
+./serialize.lo: ../../include/net-snmp/library/tools.h
+./serialize.lo: ../../include/net-snmp/library/int64.h
+./serialize.lo: ../../include/net-snmp/library/mt_support.h
+./serialize.lo: ../../include/net-snmp/library/snmp_alarm.h
+./serialize.lo: ../../include/net-snmp/library/callback.h
+./serialize.lo: ../../include/net-snmp/library/data_list.h
+./serialize.lo: ../../include/net-snmp/library/oid_stash.h
+./serialize.lo: ../../include/net-snmp/library/check_varbind.h
+./serialize.lo: ../../include/net-snmp/library/container.h
+./serialize.lo: ../../include/net-snmp/library/factory.h
+./serialize.lo: ../../include/net-snmp/library/snmp_logging.h
+./serialize.lo: ../../include/net-snmp/library/container_binary_array.h
+./serialize.lo: ../../include/net-snmp/library/container_list_ssll.h
+./serialize.lo: ../../include/net-snmp/library/container_iterator.h
+./serialize.lo: ../../include/net-snmp/library/container.h
+./serialize.lo: ../../include/net-snmp/library/snmp_assert.h
+./serialize.lo: ../../include/net-snmp/version.h
+./serialize.lo: ../../include/net-snmp/session_api.h
+./serialize.lo: ../../include/net-snmp/library/snmp_transport.h
+./serialize.lo: ../../include/net-snmp/library/snmp_service.h
+./serialize.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./serialize.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./serialize.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./serialize.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./serialize.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./serialize.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./serialize.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./serialize.lo: ../../include/net-snmp/library/ucd_compat.h
+./serialize.lo: ../../include/net-snmp/pdu_api.h
+./serialize.lo: ../../include/net-snmp/mib_api.h
+./serialize.lo: ../../include/net-snmp/library/mib.h
+./serialize.lo: ../../include/net-snmp/library/parse.h
+./serialize.lo: ../../include/net-snmp/varbind_api.h
+./serialize.lo: ../../include/net-snmp/config_api.h
+./serialize.lo: ../../include/net-snmp/library/read_config.h
+./serialize.lo: ../../include/net-snmp/library/default_store.h
+./serialize.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./serialize.lo: ../../include/net-snmp/library/snmp_enum.h
+./serialize.lo: ../../include/net-snmp/library/vacm.h
+./serialize.lo: ../../include/net-snmp/output_api.h
+./serialize.lo: ../../include/net-snmp/library/snmp_debug.h
+./serialize.lo: ../../include/net-snmp/snmpv3_api.h
+./serialize.lo: ../../include/net-snmp/library/snmpv3.h
+./serialize.lo: ../../include/net-snmp/library/transform_oids.h
+./serialize.lo: ../../include/net-snmp/library/keytools.h
+./serialize.lo: ../../include/net-snmp/library/scapi.h
+./serialize.lo: ../../include/net-snmp/library/lcd_time.h
+./serialize.lo: ../../include/net-snmp/library/snmp_secmod.h
+./serialize.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./serialize.lo: ../../include/net-snmp/library/snmpusm.h
+./serialize.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./serialize.lo: ../../include/net-snmp/agent/mib_module_config.h
+./serialize.lo: ../../include/net-snmp/agent/agent_module_config.h
+./serialize.lo: ../../include/net-snmp/agent/snmp_agent.h
+./serialize.lo: ../../include/net-snmp/agent/snmp_vars.h
+./serialize.lo: ../../include/net-snmp/agent/agent_handler.h
+./serialize.lo: ../../include/net-snmp/agent/var_struct.h
+./serialize.lo: ../../include/net-snmp/agent/agent_registry.h
+./serialize.lo: ../../include/net-snmp/library/fd_event_manager.h
+./serialize.lo: ../../include/net-snmp/agent/ds_agent.h
+./serialize.lo: ../../include/net-snmp/agent/agent_read_config.h
+./serialize.lo: ../../include/net-snmp/agent/agent_trap.h
+./serialize.lo: ../../include/net-snmp/agent/all_helpers.h
+./serialize.lo: ../../include/net-snmp/agent/instance.h
+./serialize.lo: ../../include/net-snmp/agent/baby_steps.h
+./serialize.lo: ../../include/net-snmp/agent/scalar.h
+./serialize.lo: ../../include/net-snmp/agent/scalar_group.h
+./serialize.lo: ../../include/net-snmp/agent/watcher.h
+./serialize.lo: ../../include/net-snmp/agent/multiplexer.h
+./serialize.lo: ../../include/net-snmp/agent/null.h
+./serialize.lo: ../../include/net-snmp/agent/debug_handler.h
+./serialize.lo: ../../include/net-snmp/agent/cache_handler.h
+./serialize.lo: ../../include/net-snmp/agent/old_api.h
+./serialize.lo: ../../include/net-snmp/agent/read_only.h
+./serialize.lo: ../../include/net-snmp/agent/row_merge.h
+./serialize.lo: ../../include/net-snmp/agent/serialize.h
+./serialize.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./serialize.lo: ../../include/net-snmp/agent/mode_end_call.h
+./serialize.lo: ../../include/net-snmp/agent/table.h
+./serialize.lo: ../../include/net-snmp/agent/table_data.h
+./serialize.lo: ../../include/net-snmp/agent/table_dataset.h
+./serialize.lo: ../../include/net-snmp/agent/table_tdata.h
+./serialize.lo: ../../include/net-snmp/agent/table_iterator.h
+./serialize.lo: ../../include/net-snmp/agent/table_container.h
+./serialize.lo: ../../include/net-snmp/agent/table_array.h
+./serialize.lo: ../../include/net-snmp/agent/mfd.h
+./stash_cache.lo: ../../include/net-snmp/net-snmp-config.h
+./stash_cache.lo: ../../include/net-snmp/system/linux.h
+./stash_cache.lo: ../../include/net-snmp/system/sysv.h
+./stash_cache.lo: ../../include/net-snmp/system/generic.h
+./stash_cache.lo: ../../include/net-snmp/machine/generic.h
+./stash_cache.lo: ../../include/net-snmp/net-snmp-includes.h
+./stash_cache.lo: ../../include/net-snmp/definitions.h
+./stash_cache.lo: ../../include/net-snmp/types.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp_api.h
+./stash_cache.lo: ../../include/net-snmp/library/asn1.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp_impl.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp-tc.h
+./stash_cache.lo: ../../include/net-snmp/utilities.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp_client.h
+./stash_cache.lo: ../../include/net-snmp/library/system.h
+./stash_cache.lo: ../../include/net-snmp/library/tools.h
+./stash_cache.lo: ../../include/net-snmp/library/int64.h
+./stash_cache.lo: ../../include/net-snmp/library/mt_support.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp_alarm.h
+./stash_cache.lo: ../../include/net-snmp/library/callback.h
+./stash_cache.lo: ../../include/net-snmp/library/data_list.h
+./stash_cache.lo: ../../include/net-snmp/library/oid_stash.h
+./stash_cache.lo: ../../include/net-snmp/library/check_varbind.h
+./stash_cache.lo: ../../include/net-snmp/library/container.h
+./stash_cache.lo: ../../include/net-snmp/library/factory.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp_logging.h
+./stash_cache.lo: ../../include/net-snmp/library/container_binary_array.h
+./stash_cache.lo: ../../include/net-snmp/library/container_list_ssll.h
+./stash_cache.lo: ../../include/net-snmp/library/container_iterator.h
+./stash_cache.lo: ../../include/net-snmp/library/container.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp_assert.h
+./stash_cache.lo: ../../include/net-snmp/version.h
+./stash_cache.lo: ../../include/net-snmp/session_api.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp_transport.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp_service.h
+./stash_cache.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./stash_cache.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./stash_cache.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./stash_cache.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./stash_cache.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./stash_cache.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./stash_cache.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./stash_cache.lo: ../../include/net-snmp/library/ucd_compat.h
+./stash_cache.lo: ../../include/net-snmp/pdu_api.h
+./stash_cache.lo: ../../include/net-snmp/mib_api.h
+./stash_cache.lo: ../../include/net-snmp/library/mib.h
+./stash_cache.lo: ../../include/net-snmp/library/parse.h
+./stash_cache.lo: ../../include/net-snmp/varbind_api.h
+./stash_cache.lo: ../../include/net-snmp/config_api.h
+./stash_cache.lo: ../../include/net-snmp/library/read_config.h
+./stash_cache.lo: ../../include/net-snmp/library/default_store.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp_enum.h
+./stash_cache.lo: ../../include/net-snmp/library/vacm.h
+./stash_cache.lo: ../../include/net-snmp/output_api.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp_debug.h
+./stash_cache.lo: ../../include/net-snmp/snmpv3_api.h
+./stash_cache.lo: ../../include/net-snmp/library/snmpv3.h
+./stash_cache.lo: ../../include/net-snmp/library/transform_oids.h
+./stash_cache.lo: ../../include/net-snmp/library/keytools.h
+./stash_cache.lo: ../../include/net-snmp/library/scapi.h
+./stash_cache.lo: ../../include/net-snmp/library/lcd_time.h
+./stash_cache.lo: ../../include/net-snmp/library/snmp_secmod.h
+./stash_cache.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./stash_cache.lo: ../../include/net-snmp/library/snmpusm.h
+./stash_cache.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./stash_cache.lo: ../../include/net-snmp/agent/mib_module_config.h
+./stash_cache.lo: ../../include/net-snmp/agent/agent_module_config.h
+./stash_cache.lo: ../../include/net-snmp/agent/snmp_agent.h
+./stash_cache.lo: ../../include/net-snmp/agent/snmp_vars.h
+./stash_cache.lo: ../../include/net-snmp/agent/agent_handler.h
+./stash_cache.lo: ../../include/net-snmp/agent/var_struct.h
+./stash_cache.lo: ../../include/net-snmp/agent/agent_registry.h
+./stash_cache.lo: ../../include/net-snmp/library/fd_event_manager.h
+./stash_cache.lo: ../../include/net-snmp/agent/ds_agent.h
+./stash_cache.lo: ../../include/net-snmp/agent/agent_read_config.h
+./stash_cache.lo: ../../include/net-snmp/agent/agent_trap.h
+./stash_cache.lo: ../../include/net-snmp/agent/all_helpers.h
+./stash_cache.lo: ../../include/net-snmp/agent/instance.h
+./stash_cache.lo: ../../include/net-snmp/agent/baby_steps.h
+./stash_cache.lo: ../../include/net-snmp/agent/scalar.h
+./stash_cache.lo: ../../include/net-snmp/agent/scalar_group.h
+./stash_cache.lo: ../../include/net-snmp/agent/watcher.h
+./stash_cache.lo: ../../include/net-snmp/agent/multiplexer.h
+./stash_cache.lo: ../../include/net-snmp/agent/null.h
+./stash_cache.lo: ../../include/net-snmp/agent/debug_handler.h
+./stash_cache.lo: ../../include/net-snmp/agent/cache_handler.h
+./stash_cache.lo: ../../include/net-snmp/agent/old_api.h
+./stash_cache.lo: ../../include/net-snmp/agent/read_only.h
+./stash_cache.lo: ../../include/net-snmp/agent/row_merge.h
+./stash_cache.lo: ../../include/net-snmp/agent/serialize.h
+./stash_cache.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./stash_cache.lo: ../../include/net-snmp/agent/mode_end_call.h
+./stash_cache.lo: ../../include/net-snmp/agent/table.h
+./stash_cache.lo: ../../include/net-snmp/agent/table_data.h
+./stash_cache.lo: ../../include/net-snmp/agent/table_dataset.h
+./stash_cache.lo: ../../include/net-snmp/agent/table_tdata.h
+./stash_cache.lo: ../../include/net-snmp/agent/table_iterator.h
+./stash_cache.lo: ../../include/net-snmp/agent/table_container.h
+./stash_cache.lo: ../../include/net-snmp/agent/table_array.h
+./stash_cache.lo: ../../include/net-snmp/agent/mfd.h
+./stash_cache.lo: ../../include/net-snmp/agent/stash_cache.h
+./stash_cache.lo: ../../include/net-snmp/agent/stash_to_next.h
+./stash_to_next.lo: ../../include/net-snmp/net-snmp-config.h
+./stash_to_next.lo: ../../include/net-snmp/system/linux.h
+./stash_to_next.lo: ../../include/net-snmp/system/sysv.h
+./stash_to_next.lo: ../../include/net-snmp/system/generic.h
+./stash_to_next.lo: ../../include/net-snmp/machine/generic.h
+./stash_to_next.lo: ../../include/net-snmp/net-snmp-includes.h
+./stash_to_next.lo: ../../include/net-snmp/definitions.h
+./stash_to_next.lo: ../../include/net-snmp/types.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp_api.h
+./stash_to_next.lo: ../../include/net-snmp/library/asn1.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp_impl.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp-tc.h
+./stash_to_next.lo: ../../include/net-snmp/utilities.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp_client.h
+./stash_to_next.lo: ../../include/net-snmp/library/system.h
+./stash_to_next.lo: ../../include/net-snmp/library/tools.h
+./stash_to_next.lo: ../../include/net-snmp/library/int64.h
+./stash_to_next.lo: ../../include/net-snmp/library/mt_support.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp_alarm.h
+./stash_to_next.lo: ../../include/net-snmp/library/callback.h
+./stash_to_next.lo: ../../include/net-snmp/library/data_list.h
+./stash_to_next.lo: ../../include/net-snmp/library/oid_stash.h
+./stash_to_next.lo: ../../include/net-snmp/library/check_varbind.h
+./stash_to_next.lo: ../../include/net-snmp/library/container.h
+./stash_to_next.lo: ../../include/net-snmp/library/factory.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp_logging.h
+./stash_to_next.lo: ../../include/net-snmp/library/container_binary_array.h
+./stash_to_next.lo: ../../include/net-snmp/library/container_list_ssll.h
+./stash_to_next.lo: ../../include/net-snmp/library/container_iterator.h
+./stash_to_next.lo: ../../include/net-snmp/library/container.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp_assert.h
+./stash_to_next.lo: ../../include/net-snmp/version.h
+./stash_to_next.lo: ../../include/net-snmp/session_api.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp_transport.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp_service.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./stash_to_next.lo: ../../include/net-snmp/library/ucd_compat.h
+./stash_to_next.lo: ../../include/net-snmp/pdu_api.h
+./stash_to_next.lo: ../../include/net-snmp/mib_api.h
+./stash_to_next.lo: ../../include/net-snmp/library/mib.h
+./stash_to_next.lo: ../../include/net-snmp/library/parse.h
+./stash_to_next.lo: ../../include/net-snmp/varbind_api.h
+./stash_to_next.lo: ../../include/net-snmp/config_api.h
+./stash_to_next.lo: ../../include/net-snmp/library/read_config.h
+./stash_to_next.lo: ../../include/net-snmp/library/default_store.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp_enum.h
+./stash_to_next.lo: ../../include/net-snmp/library/vacm.h
+./stash_to_next.lo: ../../include/net-snmp/output_api.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp_debug.h
+./stash_to_next.lo: ../../include/net-snmp/snmpv3_api.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmpv3.h
+./stash_to_next.lo: ../../include/net-snmp/library/transform_oids.h
+./stash_to_next.lo: ../../include/net-snmp/library/keytools.h
+./stash_to_next.lo: ../../include/net-snmp/library/scapi.h
+./stash_to_next.lo: ../../include/net-snmp/library/lcd_time.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmp_secmod.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./stash_to_next.lo: ../../include/net-snmp/library/snmpusm.h
+./stash_to_next.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./stash_to_next.lo: ../../include/net-snmp/agent/mib_module_config.h
+./stash_to_next.lo: ../../include/net-snmp/agent/agent_module_config.h
+./stash_to_next.lo: ../../include/net-snmp/agent/snmp_agent.h
+./stash_to_next.lo: ../../include/net-snmp/agent/snmp_vars.h
+./stash_to_next.lo: ../../include/net-snmp/agent/agent_handler.h
+./stash_to_next.lo: ../../include/net-snmp/agent/var_struct.h
+./stash_to_next.lo: ../../include/net-snmp/agent/agent_registry.h
+./stash_to_next.lo: ../../include/net-snmp/library/fd_event_manager.h
+./stash_to_next.lo: ../../include/net-snmp/agent/ds_agent.h
+./stash_to_next.lo: ../../include/net-snmp/agent/agent_read_config.h
+./stash_to_next.lo: ../../include/net-snmp/agent/agent_trap.h
+./stash_to_next.lo: ../../include/net-snmp/agent/all_helpers.h
+./stash_to_next.lo: ../../include/net-snmp/agent/instance.h
+./stash_to_next.lo: ../../include/net-snmp/agent/baby_steps.h
+./stash_to_next.lo: ../../include/net-snmp/agent/scalar.h
+./stash_to_next.lo: ../../include/net-snmp/agent/scalar_group.h
+./stash_to_next.lo: ../../include/net-snmp/agent/watcher.h
+./stash_to_next.lo: ../../include/net-snmp/agent/multiplexer.h
+./stash_to_next.lo: ../../include/net-snmp/agent/null.h
+./stash_to_next.lo: ../../include/net-snmp/agent/debug_handler.h
+./stash_to_next.lo: ../../include/net-snmp/agent/cache_handler.h
+./stash_to_next.lo: ../../include/net-snmp/agent/old_api.h
+./stash_to_next.lo: ../../include/net-snmp/agent/read_only.h
+./stash_to_next.lo: ../../include/net-snmp/agent/row_merge.h
+./stash_to_next.lo: ../../include/net-snmp/agent/serialize.h
+./stash_to_next.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./stash_to_next.lo: ../../include/net-snmp/agent/mode_end_call.h
+./stash_to_next.lo: ../../include/net-snmp/agent/table.h
+./stash_to_next.lo: ../../include/net-snmp/agent/table_data.h
+./stash_to_next.lo: ../../include/net-snmp/agent/table_dataset.h
+./stash_to_next.lo: ../../include/net-snmp/agent/table_tdata.h
+./stash_to_next.lo: ../../include/net-snmp/agent/table_iterator.h
+./stash_to_next.lo: ../../include/net-snmp/agent/table_container.h
+./stash_to_next.lo: ../../include/net-snmp/agent/table_array.h
+./stash_to_next.lo: ../../include/net-snmp/agent/mfd.h
+./stash_to_next.lo: ../../include/net-snmp/agent/stash_cache.h
+./stash_to_next.lo: ../../include/net-snmp/agent/stash_to_next.h
+./table.lo: ../../include/net-snmp/net-snmp-config.h
+./table.lo: ../../include/net-snmp/system/linux.h
+./table.lo: ../../include/net-snmp/system/sysv.h
+./table.lo: ../../include/net-snmp/system/generic.h
+./table.lo: ../../include/net-snmp/machine/generic.h
+./table.lo: ../../include/net-snmp/net-snmp-includes.h
+./table.lo: ../../include/net-snmp/definitions.h
+./table.lo: ../../include/net-snmp/types.h
+./table.lo: ../../include/net-snmp/library/snmp_api.h
+./table.lo: ../../include/net-snmp/library/asn1.h
+./table.lo: ../../include/net-snmp/library/snmp_impl.h
+./table.lo: ../../include/net-snmp/library/snmp.h
+./table.lo: ../../include/net-snmp/library/snmp-tc.h
+./table.lo: ../../include/net-snmp/utilities.h
+./table.lo: ../../include/net-snmp/library/snmp_client.h
+./table.lo: ../../include/net-snmp/library/system.h
+./table.lo: ../../include/net-snmp/library/tools.h
+./table.lo: ../../include/net-snmp/library/int64.h
+./table.lo: ../../include/net-snmp/library/mt_support.h
+./table.lo: ../../include/net-snmp/library/snmp_alarm.h
+./table.lo: ../../include/net-snmp/library/callback.h
+./table.lo: ../../include/net-snmp/library/data_list.h
+./table.lo: ../../include/net-snmp/library/oid_stash.h
+./table.lo: ../../include/net-snmp/library/check_varbind.h
+./table.lo: ../../include/net-snmp/library/container.h
+./table.lo: ../../include/net-snmp/library/factory.h
+./table.lo: ../../include/net-snmp/library/snmp_logging.h
+./table.lo: ../../include/net-snmp/library/container_binary_array.h
+./table.lo: ../../include/net-snmp/library/container_list_ssll.h
+./table.lo: ../../include/net-snmp/library/container_iterator.h
+./table.lo: ../../include/net-snmp/library/container.h
+./table.lo: ../../include/net-snmp/library/snmp_assert.h
+./table.lo: ../../include/net-snmp/version.h
+./table.lo: ../../include/net-snmp/session_api.h
+./table.lo: ../../include/net-snmp/library/snmp_transport.h
+./table.lo: ../../include/net-snmp/library/snmp_service.h
+./table.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./table.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./table.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./table.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./table.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./table.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./table.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./table.lo: ../../include/net-snmp/library/ucd_compat.h
+./table.lo: ../../include/net-snmp/pdu_api.h ../../include/net-snmp/mib_api.h
+./table.lo: ../../include/net-snmp/library/mib.h
+./table.lo: ../../include/net-snmp/library/parse.h
+./table.lo: ../../include/net-snmp/varbind_api.h
+./table.lo: ../../include/net-snmp/config_api.h
+./table.lo: ../../include/net-snmp/library/read_config.h
+./table.lo: ../../include/net-snmp/library/default_store.h
+./table.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./table.lo: ../../include/net-snmp/library/snmp_enum.h
+./table.lo: ../../include/net-snmp/library/vacm.h
+./table.lo: ../../include/net-snmp/output_api.h
+./table.lo: ../../include/net-snmp/library/snmp_debug.h
+./table.lo: ../../include/net-snmp/snmpv3_api.h
+./table.lo: ../../include/net-snmp/library/snmpv3.h
+./table.lo: ../../include/net-snmp/library/transform_oids.h
+./table.lo: ../../include/net-snmp/library/keytools.h
+./table.lo: ../../include/net-snmp/library/scapi.h
+./table.lo: ../../include/net-snmp/library/lcd_time.h
+./table.lo: ../../include/net-snmp/library/snmp_secmod.h
+./table.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./table.lo: ../../include/net-snmp/library/snmpusm.h
+./table.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./table.lo: ../../include/net-snmp/agent/mib_module_config.h
+./table.lo: ../../include/net-snmp/agent/agent_module_config.h
+./table.lo: ../../include/net-snmp/agent/snmp_agent.h
+./table.lo: ../../include/net-snmp/agent/snmp_vars.h
+./table.lo: ../../include/net-snmp/agent/agent_handler.h
+./table.lo: ../../include/net-snmp/agent/var_struct.h
+./table.lo: ../../include/net-snmp/agent/agent_registry.h
+./table.lo: ../../include/net-snmp/library/fd_event_manager.h
+./table.lo: ../../include/net-snmp/agent/ds_agent.h
+./table.lo: ../../include/net-snmp/agent/agent_read_config.h
+./table.lo: ../../include/net-snmp/agent/agent_trap.h
+./table.lo: ../../include/net-snmp/agent/all_helpers.h
+./table.lo: ../../include/net-snmp/agent/instance.h
+./table.lo: ../../include/net-snmp/agent/baby_steps.h
+./table.lo: ../../include/net-snmp/agent/scalar.h
+./table.lo: ../../include/net-snmp/agent/scalar_group.h
+./table.lo: ../../include/net-snmp/agent/watcher.h
+./table.lo: ../../include/net-snmp/agent/multiplexer.h
+./table.lo: ../../include/net-snmp/agent/null.h
+./table.lo: ../../include/net-snmp/agent/debug_handler.h
+./table.lo: ../../include/net-snmp/agent/cache_handler.h
+./table.lo: ../../include/net-snmp/agent/old_api.h
+./table.lo: ../../include/net-snmp/agent/read_only.h
+./table.lo: ../../include/net-snmp/agent/row_merge.h
+./table.lo: ../../include/net-snmp/agent/serialize.h
+./table.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./table.lo: ../../include/net-snmp/agent/mode_end_call.h
+./table.lo: ../../include/net-snmp/agent/table.h
+./table.lo: ../../include/net-snmp/agent/table_data.h
+./table.lo: ../../include/net-snmp/agent/table_dataset.h
+./table.lo: ../../include/net-snmp/agent/table_tdata.h
+./table.lo: ../../include/net-snmp/agent/table_iterator.h
+./table.lo: ../../include/net-snmp/agent/table_container.h
+./table.lo: ../../include/net-snmp/agent/table_array.h
+./table.lo: ../../include/net-snmp/agent/mfd.h
+./table_array.lo: ../../include/net-snmp/net-snmp-config.h
+./table_array.lo: ../../include/net-snmp/system/linux.h
+./table_array.lo: ../../include/net-snmp/system/sysv.h
+./table_array.lo: ../../include/net-snmp/system/generic.h
+./table_array.lo: ../../include/net-snmp/machine/generic.h
+./table_array.lo: ../../include/net-snmp/net-snmp-includes.h
+./table_array.lo: ../../include/net-snmp/definitions.h
+./table_array.lo: ../../include/net-snmp/types.h
+./table_array.lo: ../../include/net-snmp/library/snmp_api.h
+./table_array.lo: ../../include/net-snmp/library/asn1.h
+./table_array.lo: ../../include/net-snmp/library/snmp_impl.h
+./table_array.lo: ../../include/net-snmp/library/snmp.h
+./table_array.lo: ../../include/net-snmp/library/snmp-tc.h
+./table_array.lo: ../../include/net-snmp/utilities.h
+./table_array.lo: ../../include/net-snmp/library/snmp_client.h
+./table_array.lo: ../../include/net-snmp/library/system.h
+./table_array.lo: ../../include/net-snmp/library/tools.h
+./table_array.lo: ../../include/net-snmp/library/int64.h
+./table_array.lo: ../../include/net-snmp/library/mt_support.h
+./table_array.lo: ../../include/net-snmp/library/snmp_alarm.h
+./table_array.lo: ../../include/net-snmp/library/callback.h
+./table_array.lo: ../../include/net-snmp/library/data_list.h
+./table_array.lo: ../../include/net-snmp/library/oid_stash.h
+./table_array.lo: ../../include/net-snmp/library/check_varbind.h
+./table_array.lo: ../../include/net-snmp/library/container.h
+./table_array.lo: ../../include/net-snmp/library/factory.h
+./table_array.lo: ../../include/net-snmp/library/snmp_logging.h
+./table_array.lo: ../../include/net-snmp/library/container_binary_array.h
+./table_array.lo: ../../include/net-snmp/library/container_list_ssll.h
+./table_array.lo: ../../include/net-snmp/library/container_iterator.h
+./table_array.lo: ../../include/net-snmp/library/container.h
+./table_array.lo: ../../include/net-snmp/library/snmp_assert.h
+./table_array.lo: ../../include/net-snmp/version.h
+./table_array.lo: ../../include/net-snmp/session_api.h
+./table_array.lo: ../../include/net-snmp/library/snmp_transport.h
+./table_array.lo: ../../include/net-snmp/library/snmp_service.h
+./table_array.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./table_array.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./table_array.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./table_array.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./table_array.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./table_array.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./table_array.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./table_array.lo: ../../include/net-snmp/library/ucd_compat.h
+./table_array.lo: ../../include/net-snmp/pdu_api.h
+./table_array.lo: ../../include/net-snmp/mib_api.h
+./table_array.lo: ../../include/net-snmp/library/mib.h
+./table_array.lo: ../../include/net-snmp/library/parse.h
+./table_array.lo: ../../include/net-snmp/varbind_api.h
+./table_array.lo: ../../include/net-snmp/config_api.h
+./table_array.lo: ../../include/net-snmp/library/read_config.h
+./table_array.lo: ../../include/net-snmp/library/default_store.h
+./table_array.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./table_array.lo: ../../include/net-snmp/library/snmp_enum.h
+./table_array.lo: ../../include/net-snmp/library/vacm.h
+./table_array.lo: ../../include/net-snmp/output_api.h
+./table_array.lo: ../../include/net-snmp/library/snmp_debug.h
+./table_array.lo: ../../include/net-snmp/snmpv3_api.h
+./table_array.lo: ../../include/net-snmp/library/snmpv3.h
+./table_array.lo: ../../include/net-snmp/library/transform_oids.h
+./table_array.lo: ../../include/net-snmp/library/keytools.h
+./table_array.lo: ../../include/net-snmp/library/scapi.h
+./table_array.lo: ../../include/net-snmp/library/lcd_time.h
+./table_array.lo: ../../include/net-snmp/library/snmp_secmod.h
+./table_array.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./table_array.lo: ../../include/net-snmp/library/snmpusm.h
+./table_array.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./table_array.lo: ../../include/net-snmp/agent/mib_module_config.h
+./table_array.lo: ../../include/net-snmp/agent/agent_module_config.h
+./table_array.lo: ../../include/net-snmp/agent/snmp_agent.h
+./table_array.lo: ../../include/net-snmp/agent/snmp_vars.h
+./table_array.lo: ../../include/net-snmp/agent/agent_handler.h
+./table_array.lo: ../../include/net-snmp/agent/var_struct.h
+./table_array.lo: ../../include/net-snmp/agent/agent_registry.h
+./table_array.lo: ../../include/net-snmp/library/fd_event_manager.h
+./table_array.lo: ../../include/net-snmp/agent/ds_agent.h
+./table_array.lo: ../../include/net-snmp/agent/agent_read_config.h
+./table_array.lo: ../../include/net-snmp/agent/agent_trap.h
+./table_array.lo: ../../include/net-snmp/agent/all_helpers.h
+./table_array.lo: ../../include/net-snmp/agent/instance.h
+./table_array.lo: ../../include/net-snmp/agent/baby_steps.h
+./table_array.lo: ../../include/net-snmp/agent/scalar.h
+./table_array.lo: ../../include/net-snmp/agent/scalar_group.h
+./table_array.lo: ../../include/net-snmp/agent/watcher.h
+./table_array.lo: ../../include/net-snmp/agent/multiplexer.h
+./table_array.lo: ../../include/net-snmp/agent/null.h
+./table_array.lo: ../../include/net-snmp/agent/debug_handler.h
+./table_array.lo: ../../include/net-snmp/agent/cache_handler.h
+./table_array.lo: ../../include/net-snmp/agent/old_api.h
+./table_array.lo: ../../include/net-snmp/agent/read_only.h
+./table_array.lo: ../../include/net-snmp/agent/row_merge.h
+./table_array.lo: ../../include/net-snmp/agent/serialize.h
+./table_array.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./table_array.lo: ../../include/net-snmp/agent/mode_end_call.h
+./table_array.lo: ../../include/net-snmp/agent/table.h
+./table_array.lo: ../../include/net-snmp/agent/table_data.h
+./table_array.lo: ../../include/net-snmp/agent/table_dataset.h
+./table_array.lo: ../../include/net-snmp/agent/table_tdata.h
+./table_array.lo: ../../include/net-snmp/agent/table_iterator.h
+./table_array.lo: ../../include/net-snmp/agent/table_container.h
+./table_array.lo: ../../include/net-snmp/agent/table_array.h
+./table_array.lo: ../../include/net-snmp/agent/mfd.h
+./table_container.lo: ../../include/net-snmp/net-snmp-config.h
+./table_container.lo: ../../include/net-snmp/system/linux.h
+./table_container.lo: ../../include/net-snmp/system/sysv.h
+./table_container.lo: ../../include/net-snmp/system/generic.h
+./table_container.lo: ../../include/net-snmp/machine/generic.h
+./table_container.lo: ../../include/net-snmp/net-snmp-includes.h
+./table_container.lo: ../../include/net-snmp/definitions.h
+./table_container.lo: ../../include/net-snmp/types.h
+./table_container.lo: ../../include/net-snmp/library/snmp_api.h
+./table_container.lo: ../../include/net-snmp/library/asn1.h
+./table_container.lo: ../../include/net-snmp/library/snmp_impl.h
+./table_container.lo: ../../include/net-snmp/library/snmp.h
+./table_container.lo: ../../include/net-snmp/library/snmp-tc.h
+./table_container.lo: ../../include/net-snmp/utilities.h
+./table_container.lo: ../../include/net-snmp/library/snmp_client.h
+./table_container.lo: ../../include/net-snmp/library/system.h
+./table_container.lo: ../../include/net-snmp/library/tools.h
+./table_container.lo: ../../include/net-snmp/library/int64.h
+./table_container.lo: ../../include/net-snmp/library/mt_support.h
+./table_container.lo: ../../include/net-snmp/library/snmp_alarm.h
+./table_container.lo: ../../include/net-snmp/library/callback.h
+./table_container.lo: ../../include/net-snmp/library/data_list.h
+./table_container.lo: ../../include/net-snmp/library/oid_stash.h
+./table_container.lo: ../../include/net-snmp/library/check_varbind.h
+./table_container.lo: ../../include/net-snmp/library/container.h
+./table_container.lo: ../../include/net-snmp/library/factory.h
+./table_container.lo: ../../include/net-snmp/library/snmp_logging.h
+./table_container.lo: ../../include/net-snmp/library/container_binary_array.h
+./table_container.lo: ../../include/net-snmp/library/container_list_ssll.h
+./table_container.lo: ../../include/net-snmp/library/container_iterator.h
+./table_container.lo: ../../include/net-snmp/library/container.h
+./table_container.lo: ../../include/net-snmp/library/snmp_assert.h
+./table_container.lo: ../../include/net-snmp/version.h
+./table_container.lo: ../../include/net-snmp/session_api.h
+./table_container.lo: ../../include/net-snmp/library/snmp_transport.h
+./table_container.lo: ../../include/net-snmp/library/snmp_service.h
+./table_container.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./table_container.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./table_container.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./table_container.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./table_container.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./table_container.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./table_container.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./table_container.lo: ../../include/net-snmp/library/ucd_compat.h
+./table_container.lo: ../../include/net-snmp/pdu_api.h
+./table_container.lo: ../../include/net-snmp/mib_api.h
+./table_container.lo: ../../include/net-snmp/library/mib.h
+./table_container.lo: ../../include/net-snmp/library/parse.h
+./table_container.lo: ../../include/net-snmp/varbind_api.h
+./table_container.lo: ../../include/net-snmp/config_api.h
+./table_container.lo: ../../include/net-snmp/library/read_config.h
+./table_container.lo: ../../include/net-snmp/library/default_store.h
+./table_container.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./table_container.lo: ../../include/net-snmp/library/snmp_enum.h
+./table_container.lo: ../../include/net-snmp/library/vacm.h
+./table_container.lo: ../../include/net-snmp/output_api.h
+./table_container.lo: ../../include/net-snmp/library/snmp_debug.h
+./table_container.lo: ../../include/net-snmp/snmpv3_api.h
+./table_container.lo: ../../include/net-snmp/library/snmpv3.h
+./table_container.lo: ../../include/net-snmp/library/transform_oids.h
+./table_container.lo: ../../include/net-snmp/library/keytools.h
+./table_container.lo: ../../include/net-snmp/library/scapi.h
+./table_container.lo: ../../include/net-snmp/library/lcd_time.h
+./table_container.lo: ../../include/net-snmp/library/snmp_secmod.h
+./table_container.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./table_container.lo: ../../include/net-snmp/library/snmpusm.h
+./table_container.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./table_container.lo: ../../include/net-snmp/agent/mib_module_config.h
+./table_container.lo: ../../include/net-snmp/agent/agent_module_config.h
+./table_container.lo: ../../include/net-snmp/agent/snmp_agent.h
+./table_container.lo: ../../include/net-snmp/agent/snmp_vars.h
+./table_container.lo: ../../include/net-snmp/agent/agent_handler.h
+./table_container.lo: ../../include/net-snmp/agent/var_struct.h
+./table_container.lo: ../../include/net-snmp/agent/agent_registry.h
+./table_container.lo: ../../include/net-snmp/library/fd_event_manager.h
+./table_container.lo: ../../include/net-snmp/agent/ds_agent.h
+./table_container.lo: ../../include/net-snmp/agent/agent_read_config.h
+./table_container.lo: ../../include/net-snmp/agent/agent_trap.h
+./table_container.lo: ../../include/net-snmp/agent/all_helpers.h
+./table_container.lo: ../../include/net-snmp/agent/instance.h
+./table_container.lo: ../../include/net-snmp/agent/baby_steps.h
+./table_container.lo: ../../include/net-snmp/agent/scalar.h
+./table_container.lo: ../../include/net-snmp/agent/scalar_group.h
+./table_container.lo: ../../include/net-snmp/agent/watcher.h
+./table_container.lo: ../../include/net-snmp/agent/multiplexer.h
+./table_container.lo: ../../include/net-snmp/agent/null.h
+./table_container.lo: ../../include/net-snmp/agent/debug_handler.h
+./table_container.lo: ../../include/net-snmp/agent/cache_handler.h
+./table_container.lo: ../../include/net-snmp/agent/old_api.h
+./table_container.lo: ../../include/net-snmp/agent/read_only.h
+./table_container.lo: ../../include/net-snmp/agent/row_merge.h
+./table_container.lo: ../../include/net-snmp/agent/serialize.h
+./table_container.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./table_container.lo: ../../include/net-snmp/agent/mode_end_call.h
+./table_container.lo: ../../include/net-snmp/agent/table.h
+./table_container.lo: ../../include/net-snmp/agent/table_data.h
+./table_container.lo: ../../include/net-snmp/agent/table_dataset.h
+./table_container.lo: ../../include/net-snmp/agent/table_tdata.h
+./table_container.lo: ../../include/net-snmp/agent/table_iterator.h
+./table_container.lo: ../../include/net-snmp/agent/table_container.h
+./table_container.lo: ../../include/net-snmp/agent/table_array.h
+./table_container.lo: ../../include/net-snmp/agent/mfd.h
+./table_data.lo: ../../include/net-snmp/net-snmp-config.h
+./table_data.lo: ../../include/net-snmp/system/linux.h
+./table_data.lo: ../../include/net-snmp/system/sysv.h
+./table_data.lo: ../../include/net-snmp/system/generic.h
+./table_data.lo: ../../include/net-snmp/machine/generic.h
+./table_data.lo: ../../include/net-snmp/net-snmp-includes.h
+./table_data.lo: ../../include/net-snmp/definitions.h
+./table_data.lo: ../../include/net-snmp/types.h
+./table_data.lo: ../../include/net-snmp/library/snmp_api.h
+./table_data.lo: ../../include/net-snmp/library/asn1.h
+./table_data.lo: ../../include/net-snmp/library/snmp_impl.h
+./table_data.lo: ../../include/net-snmp/library/snmp.h
+./table_data.lo: ../../include/net-snmp/library/snmp-tc.h
+./table_data.lo: ../../include/net-snmp/utilities.h
+./table_data.lo: ../../include/net-snmp/library/snmp_client.h
+./table_data.lo: ../../include/net-snmp/library/system.h
+./table_data.lo: ../../include/net-snmp/library/tools.h
+./table_data.lo: ../../include/net-snmp/library/int64.h
+./table_data.lo: ../../include/net-snmp/library/mt_support.h
+./table_data.lo: ../../include/net-snmp/library/snmp_alarm.h
+./table_data.lo: ../../include/net-snmp/library/callback.h
+./table_data.lo: ../../include/net-snmp/library/data_list.h
+./table_data.lo: ../../include/net-snmp/library/oid_stash.h
+./table_data.lo: ../../include/net-snmp/library/check_varbind.h
+./table_data.lo: ../../include/net-snmp/library/container.h
+./table_data.lo: ../../include/net-snmp/library/factory.h
+./table_data.lo: ../../include/net-snmp/library/snmp_logging.h
+./table_data.lo: ../../include/net-snmp/library/container_binary_array.h
+./table_data.lo: ../../include/net-snmp/library/container_list_ssll.h
+./table_data.lo: ../../include/net-snmp/library/container_iterator.h
+./table_data.lo: ../../include/net-snmp/library/container.h
+./table_data.lo: ../../include/net-snmp/library/snmp_assert.h
+./table_data.lo: ../../include/net-snmp/version.h
+./table_data.lo: ../../include/net-snmp/session_api.h
+./table_data.lo: ../../include/net-snmp/library/snmp_transport.h
+./table_data.lo: ../../include/net-snmp/library/snmp_service.h
+./table_data.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./table_data.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./table_data.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./table_data.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./table_data.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./table_data.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./table_data.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./table_data.lo: ../../include/net-snmp/library/ucd_compat.h
+./table_data.lo: ../../include/net-snmp/pdu_api.h
+./table_data.lo: ../../include/net-snmp/mib_api.h
+./table_data.lo: ../../include/net-snmp/library/mib.h
+./table_data.lo: ../../include/net-snmp/library/parse.h
+./table_data.lo: ../../include/net-snmp/varbind_api.h
+./table_data.lo: ../../include/net-snmp/config_api.h
+./table_data.lo: ../../include/net-snmp/library/read_config.h
+./table_data.lo: ../../include/net-snmp/library/default_store.h
+./table_data.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./table_data.lo: ../../include/net-snmp/library/snmp_enum.h
+./table_data.lo: ../../include/net-snmp/library/vacm.h
+./table_data.lo: ../../include/net-snmp/output_api.h
+./table_data.lo: ../../include/net-snmp/library/snmp_debug.h
+./table_data.lo: ../../include/net-snmp/snmpv3_api.h
+./table_data.lo: ../../include/net-snmp/library/snmpv3.h
+./table_data.lo: ../../include/net-snmp/library/transform_oids.h
+./table_data.lo: ../../include/net-snmp/library/keytools.h
+./table_data.lo: ../../include/net-snmp/library/scapi.h
+./table_data.lo: ../../include/net-snmp/library/lcd_time.h
+./table_data.lo: ../../include/net-snmp/library/snmp_secmod.h
+./table_data.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./table_data.lo: ../../include/net-snmp/library/snmpusm.h
+./table_data.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./table_data.lo: ../../include/net-snmp/agent/mib_module_config.h
+./table_data.lo: ../../include/net-snmp/agent/agent_module_config.h
+./table_data.lo: ../../include/net-snmp/agent/snmp_agent.h
+./table_data.lo: ../../include/net-snmp/agent/snmp_vars.h
+./table_data.lo: ../../include/net-snmp/agent/agent_handler.h
+./table_data.lo: ../../include/net-snmp/agent/var_struct.h
+./table_data.lo: ../../include/net-snmp/agent/agent_registry.h
+./table_data.lo: ../../include/net-snmp/library/fd_event_manager.h
+./table_data.lo: ../../include/net-snmp/agent/ds_agent.h
+./table_data.lo: ../../include/net-snmp/agent/agent_read_config.h
+./table_data.lo: ../../include/net-snmp/agent/agent_trap.h
+./table_data.lo: ../../include/net-snmp/agent/all_helpers.h
+./table_data.lo: ../../include/net-snmp/agent/instance.h
+./table_data.lo: ../../include/net-snmp/agent/baby_steps.h
+./table_data.lo: ../../include/net-snmp/agent/scalar.h
+./table_data.lo: ../../include/net-snmp/agent/scalar_group.h
+./table_data.lo: ../../include/net-snmp/agent/watcher.h
+./table_data.lo: ../../include/net-snmp/agent/multiplexer.h
+./table_data.lo: ../../include/net-snmp/agent/null.h
+./table_data.lo: ../../include/net-snmp/agent/debug_handler.h
+./table_data.lo: ../../include/net-snmp/agent/cache_handler.h
+./table_data.lo: ../../include/net-snmp/agent/old_api.h
+./table_data.lo: ../../include/net-snmp/agent/read_only.h
+./table_data.lo: ../../include/net-snmp/agent/row_merge.h
+./table_data.lo: ../../include/net-snmp/agent/serialize.h
+./table_data.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./table_data.lo: ../../include/net-snmp/agent/mode_end_call.h
+./table_data.lo: ../../include/net-snmp/agent/table.h
+./table_data.lo: ../../include/net-snmp/agent/table_data.h
+./table_data.lo: ../../include/net-snmp/agent/table_dataset.h
+./table_data.lo: ../../include/net-snmp/agent/table_tdata.h
+./table_data.lo: ../../include/net-snmp/agent/table_iterator.h
+./table_data.lo: ../../include/net-snmp/agent/table_container.h
+./table_data.lo: ../../include/net-snmp/agent/table_array.h
+./table_data.lo: ../../include/net-snmp/agent/mfd.h
+./table_dataset.lo: ../../include/net-snmp/net-snmp-config.h
+./table_dataset.lo: ../../include/net-snmp/system/linux.h
+./table_dataset.lo: ../../include/net-snmp/system/sysv.h
+./table_dataset.lo: ../../include/net-snmp/system/generic.h
+./table_dataset.lo: ../../include/net-snmp/machine/generic.h
+./table_dataset.lo: ../../include/net-snmp/net-snmp-includes.h
+./table_dataset.lo: ../../include/net-snmp/definitions.h
+./table_dataset.lo: ../../include/net-snmp/types.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp_api.h
+./table_dataset.lo: ../../include/net-snmp/library/asn1.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp_impl.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp-tc.h
+./table_dataset.lo: ../../include/net-snmp/utilities.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp_client.h
+./table_dataset.lo: ../../include/net-snmp/library/system.h
+./table_dataset.lo: ../../include/net-snmp/library/tools.h
+./table_dataset.lo: ../../include/net-snmp/library/int64.h
+./table_dataset.lo: ../../include/net-snmp/library/mt_support.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp_alarm.h
+./table_dataset.lo: ../../include/net-snmp/library/callback.h
+./table_dataset.lo: ../../include/net-snmp/library/data_list.h
+./table_dataset.lo: ../../include/net-snmp/library/oid_stash.h
+./table_dataset.lo: ../../include/net-snmp/library/check_varbind.h
+./table_dataset.lo: ../../include/net-snmp/library/container.h
+./table_dataset.lo: ../../include/net-snmp/library/factory.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp_logging.h
+./table_dataset.lo: ../../include/net-snmp/library/container_binary_array.h
+./table_dataset.lo: ../../include/net-snmp/library/container_list_ssll.h
+./table_dataset.lo: ../../include/net-snmp/library/container_iterator.h
+./table_dataset.lo: ../../include/net-snmp/library/container.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp_assert.h
+./table_dataset.lo: ../../include/net-snmp/version.h
+./table_dataset.lo: ../../include/net-snmp/session_api.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp_transport.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp_service.h
+./table_dataset.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./table_dataset.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./table_dataset.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./table_dataset.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./table_dataset.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./table_dataset.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./table_dataset.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./table_dataset.lo: ../../include/net-snmp/library/ucd_compat.h
+./table_dataset.lo: ../../include/net-snmp/pdu_api.h
+./table_dataset.lo: ../../include/net-snmp/mib_api.h
+./table_dataset.lo: ../../include/net-snmp/library/mib.h
+./table_dataset.lo: ../../include/net-snmp/library/parse.h
+./table_dataset.lo: ../../include/net-snmp/varbind_api.h
+./table_dataset.lo: ../../include/net-snmp/config_api.h
+./table_dataset.lo: ../../include/net-snmp/library/read_config.h
+./table_dataset.lo: ../../include/net-snmp/library/default_store.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp_enum.h
+./table_dataset.lo: ../../include/net-snmp/library/vacm.h
+./table_dataset.lo: ../../include/net-snmp/output_api.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp_debug.h
+./table_dataset.lo: ../../include/net-snmp/snmpv3_api.h
+./table_dataset.lo: ../../include/net-snmp/library/snmpv3.h
+./table_dataset.lo: ../../include/net-snmp/library/transform_oids.h
+./table_dataset.lo: ../../include/net-snmp/library/keytools.h
+./table_dataset.lo: ../../include/net-snmp/library/scapi.h
+./table_dataset.lo: ../../include/net-snmp/library/lcd_time.h
+./table_dataset.lo: ../../include/net-snmp/library/snmp_secmod.h
+./table_dataset.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./table_dataset.lo: ../../include/net-snmp/library/snmpusm.h
+./table_dataset.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./table_dataset.lo: ../../include/net-snmp/agent/mib_module_config.h
+./table_dataset.lo: ../../include/net-snmp/agent/agent_module_config.h
+./table_dataset.lo: ../../include/net-snmp/agent/snmp_agent.h
+./table_dataset.lo: ../../include/net-snmp/agent/snmp_vars.h
+./table_dataset.lo: ../../include/net-snmp/agent/agent_handler.h
+./table_dataset.lo: ../../include/net-snmp/agent/var_struct.h
+./table_dataset.lo: ../../include/net-snmp/agent/agent_registry.h
+./table_dataset.lo: ../../include/net-snmp/library/fd_event_manager.h
+./table_dataset.lo: ../../include/net-snmp/agent/ds_agent.h
+./table_dataset.lo: ../../include/net-snmp/agent/agent_read_config.h
+./table_dataset.lo: ../../include/net-snmp/agent/agent_trap.h
+./table_dataset.lo: ../../include/net-snmp/agent/all_helpers.h
+./table_dataset.lo: ../../include/net-snmp/agent/instance.h
+./table_dataset.lo: ../../include/net-snmp/agent/baby_steps.h
+./table_dataset.lo: ../../include/net-snmp/agent/scalar.h
+./table_dataset.lo: ../../include/net-snmp/agent/scalar_group.h
+./table_dataset.lo: ../../include/net-snmp/agent/watcher.h
+./table_dataset.lo: ../../include/net-snmp/agent/multiplexer.h
+./table_dataset.lo: ../../include/net-snmp/agent/null.h
+./table_dataset.lo: ../../include/net-snmp/agent/debug_handler.h
+./table_dataset.lo: ../../include/net-snmp/agent/cache_handler.h
+./table_dataset.lo: ../../include/net-snmp/agent/old_api.h
+./table_dataset.lo: ../../include/net-snmp/agent/read_only.h
+./table_dataset.lo: ../../include/net-snmp/agent/row_merge.h
+./table_dataset.lo: ../../include/net-snmp/agent/serialize.h
+./table_dataset.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./table_dataset.lo: ../../include/net-snmp/agent/mode_end_call.h
+./table_dataset.lo: ../../include/net-snmp/agent/table.h
+./table_dataset.lo: ../../include/net-snmp/agent/table_data.h
+./table_dataset.lo: ../../include/net-snmp/agent/table_dataset.h
+./table_dataset.lo: ../../include/net-snmp/agent/table_tdata.h
+./table_dataset.lo: ../../include/net-snmp/agent/table_iterator.h
+./table_dataset.lo: ../../include/net-snmp/agent/table_container.h
+./table_dataset.lo: ../../include/net-snmp/agent/table_array.h
+./table_dataset.lo: ../../include/net-snmp/agent/mfd.h
+./table_iterator.lo: ../../include/net-snmp/net-snmp-config.h
+./table_iterator.lo: ../../include/net-snmp/system/linux.h
+./table_iterator.lo: ../../include/net-snmp/system/sysv.h
+./table_iterator.lo: ../../include/net-snmp/system/generic.h
+./table_iterator.lo: ../../include/net-snmp/machine/generic.h
+./table_iterator.lo: ../../include/net-snmp/net-snmp-includes.h
+./table_iterator.lo: ../../include/net-snmp/definitions.h
+./table_iterator.lo: ../../include/net-snmp/types.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp_api.h
+./table_iterator.lo: ../../include/net-snmp/library/asn1.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp_impl.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp-tc.h
+./table_iterator.lo: ../../include/net-snmp/utilities.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp_client.h
+./table_iterator.lo: ../../include/net-snmp/library/system.h
+./table_iterator.lo: ../../include/net-snmp/library/tools.h
+./table_iterator.lo: ../../include/net-snmp/library/int64.h
+./table_iterator.lo: ../../include/net-snmp/library/mt_support.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp_alarm.h
+./table_iterator.lo: ../../include/net-snmp/library/callback.h
+./table_iterator.lo: ../../include/net-snmp/library/data_list.h
+./table_iterator.lo: ../../include/net-snmp/library/oid_stash.h
+./table_iterator.lo: ../../include/net-snmp/library/check_varbind.h
+./table_iterator.lo: ../../include/net-snmp/library/container.h
+./table_iterator.lo: ../../include/net-snmp/library/factory.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp_logging.h
+./table_iterator.lo: ../../include/net-snmp/library/container_binary_array.h
+./table_iterator.lo: ../../include/net-snmp/library/container_list_ssll.h
+./table_iterator.lo: ../../include/net-snmp/library/container_iterator.h
+./table_iterator.lo: ../../include/net-snmp/library/container.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp_assert.h
+./table_iterator.lo: ../../include/net-snmp/version.h
+./table_iterator.lo: ../../include/net-snmp/session_api.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp_transport.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp_service.h
+./table_iterator.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./table_iterator.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./table_iterator.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./table_iterator.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./table_iterator.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./table_iterator.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./table_iterator.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./table_iterator.lo: ../../include/net-snmp/library/ucd_compat.h
+./table_iterator.lo: ../../include/net-snmp/pdu_api.h
+./table_iterator.lo: ../../include/net-snmp/mib_api.h
+./table_iterator.lo: ../../include/net-snmp/library/mib.h
+./table_iterator.lo: ../../include/net-snmp/library/parse.h
+./table_iterator.lo: ../../include/net-snmp/varbind_api.h
+./table_iterator.lo: ../../include/net-snmp/config_api.h
+./table_iterator.lo: ../../include/net-snmp/library/read_config.h
+./table_iterator.lo: ../../include/net-snmp/library/default_store.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp_enum.h
+./table_iterator.lo: ../../include/net-snmp/library/vacm.h
+./table_iterator.lo: ../../include/net-snmp/output_api.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp_debug.h
+./table_iterator.lo: ../../include/net-snmp/snmpv3_api.h
+./table_iterator.lo: ../../include/net-snmp/library/snmpv3.h
+./table_iterator.lo: ../../include/net-snmp/library/transform_oids.h
+./table_iterator.lo: ../../include/net-snmp/library/keytools.h
+./table_iterator.lo: ../../include/net-snmp/library/scapi.h
+./table_iterator.lo: ../../include/net-snmp/library/lcd_time.h
+./table_iterator.lo: ../../include/net-snmp/library/snmp_secmod.h
+./table_iterator.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./table_iterator.lo: ../../include/net-snmp/library/snmpusm.h
+./table_iterator.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./table_iterator.lo: ../../include/net-snmp/agent/mib_module_config.h
+./table_iterator.lo: ../../include/net-snmp/agent/agent_module_config.h
+./table_iterator.lo: ../../include/net-snmp/agent/snmp_agent.h
+./table_iterator.lo: ../../include/net-snmp/agent/snmp_vars.h
+./table_iterator.lo: ../../include/net-snmp/agent/agent_handler.h
+./table_iterator.lo: ../../include/net-snmp/agent/var_struct.h
+./table_iterator.lo: ../../include/net-snmp/agent/agent_registry.h
+./table_iterator.lo: ../../include/net-snmp/library/fd_event_manager.h
+./table_iterator.lo: ../../include/net-snmp/agent/ds_agent.h
+./table_iterator.lo: ../../include/net-snmp/agent/agent_read_config.h
+./table_iterator.lo: ../../include/net-snmp/agent/agent_trap.h
+./table_iterator.lo: ../../include/net-snmp/agent/all_helpers.h
+./table_iterator.lo: ../../include/net-snmp/agent/instance.h
+./table_iterator.lo: ../../include/net-snmp/agent/baby_steps.h
+./table_iterator.lo: ../../include/net-snmp/agent/scalar.h
+./table_iterator.lo: ../../include/net-snmp/agent/scalar_group.h
+./table_iterator.lo: ../../include/net-snmp/agent/watcher.h
+./table_iterator.lo: ../../include/net-snmp/agent/multiplexer.h
+./table_iterator.lo: ../../include/net-snmp/agent/null.h
+./table_iterator.lo: ../../include/net-snmp/agent/debug_handler.h
+./table_iterator.lo: ../../include/net-snmp/agent/cache_handler.h
+./table_iterator.lo: ../../include/net-snmp/agent/old_api.h
+./table_iterator.lo: ../../include/net-snmp/agent/read_only.h
+./table_iterator.lo: ../../include/net-snmp/agent/row_merge.h
+./table_iterator.lo: ../../include/net-snmp/agent/serialize.h
+./table_iterator.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./table_iterator.lo: ../../include/net-snmp/agent/mode_end_call.h
+./table_iterator.lo: ../../include/net-snmp/agent/table.h
+./table_iterator.lo: ../../include/net-snmp/agent/table_data.h
+./table_iterator.lo: ../../include/net-snmp/agent/table_dataset.h
+./table_iterator.lo: ../../include/net-snmp/agent/table_tdata.h
+./table_iterator.lo: ../../include/net-snmp/agent/table_iterator.h
+./table_iterator.lo: ../../include/net-snmp/agent/table_container.h
+./table_iterator.lo: ../../include/net-snmp/agent/table_array.h
+./table_iterator.lo: ../../include/net-snmp/agent/mfd.h
+./table_iterator.lo: ../../include/net-snmp/agent/stash_cache.h
+./table_row.lo: ../../include/net-snmp/net-snmp-config.h
+./table_row.lo: ../../include/net-snmp/system/linux.h
+./table_row.lo: ../../include/net-snmp/system/sysv.h
+./table_row.lo: ../../include/net-snmp/system/generic.h
+./table_row.lo: ../../include/net-snmp/machine/generic.h
+./table_row.lo: ../../include/net-snmp/net-snmp-includes.h
+./table_row.lo: ../../include/net-snmp/definitions.h
+./table_row.lo: ../../include/net-snmp/types.h
+./table_row.lo: ../../include/net-snmp/library/snmp_api.h
+./table_row.lo: ../../include/net-snmp/library/asn1.h
+./table_row.lo: ../../include/net-snmp/library/snmp_impl.h
+./table_row.lo: ../../include/net-snmp/library/snmp.h
+./table_row.lo: ../../include/net-snmp/library/snmp-tc.h
+./table_row.lo: ../../include/net-snmp/utilities.h
+./table_row.lo: ../../include/net-snmp/library/snmp_client.h
+./table_row.lo: ../../include/net-snmp/library/system.h
+./table_row.lo: ../../include/net-snmp/library/tools.h
+./table_row.lo: ../../include/net-snmp/library/int64.h
+./table_row.lo: ../../include/net-snmp/library/mt_support.h
+./table_row.lo: ../../include/net-snmp/library/snmp_alarm.h
+./table_row.lo: ../../include/net-snmp/library/callback.h
+./table_row.lo: ../../include/net-snmp/library/data_list.h
+./table_row.lo: ../../include/net-snmp/library/oid_stash.h
+./table_row.lo: ../../include/net-snmp/library/check_varbind.h
+./table_row.lo: ../../include/net-snmp/library/container.h
+./table_row.lo: ../../include/net-snmp/library/factory.h
+./table_row.lo: ../../include/net-snmp/library/snmp_logging.h
+./table_row.lo: ../../include/net-snmp/library/container_binary_array.h
+./table_row.lo: ../../include/net-snmp/library/container_list_ssll.h
+./table_row.lo: ../../include/net-snmp/library/container_iterator.h
+./table_row.lo: ../../include/net-snmp/library/container.h
+./table_row.lo: ../../include/net-snmp/library/snmp_assert.h
+./table_row.lo: ../../include/net-snmp/version.h
+./table_row.lo: ../../include/net-snmp/session_api.h
+./table_row.lo: ../../include/net-snmp/library/snmp_transport.h
+./table_row.lo: ../../include/net-snmp/library/snmp_service.h
+./table_row.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./table_row.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./table_row.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./table_row.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./table_row.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./table_row.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./table_row.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./table_row.lo: ../../include/net-snmp/library/ucd_compat.h
+./table_row.lo: ../../include/net-snmp/pdu_api.h
+./table_row.lo: ../../include/net-snmp/mib_api.h
+./table_row.lo: ../../include/net-snmp/library/mib.h
+./table_row.lo: ../../include/net-snmp/library/parse.h
+./table_row.lo: ../../include/net-snmp/varbind_api.h
+./table_row.lo: ../../include/net-snmp/config_api.h
+./table_row.lo: ../../include/net-snmp/library/read_config.h
+./table_row.lo: ../../include/net-snmp/library/default_store.h
+./table_row.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./table_row.lo: ../../include/net-snmp/library/snmp_enum.h
+./table_row.lo: ../../include/net-snmp/library/vacm.h
+./table_row.lo: ../../include/net-snmp/output_api.h
+./table_row.lo: ../../include/net-snmp/library/snmp_debug.h
+./table_row.lo: ../../include/net-snmp/snmpv3_api.h
+./table_row.lo: ../../include/net-snmp/library/snmpv3.h
+./table_row.lo: ../../include/net-snmp/library/transform_oids.h
+./table_row.lo: ../../include/net-snmp/library/keytools.h
+./table_row.lo: ../../include/net-snmp/library/scapi.h
+./table_row.lo: ../../include/net-snmp/library/lcd_time.h
+./table_row.lo: ../../include/net-snmp/library/snmp_secmod.h
+./table_row.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./table_row.lo: ../../include/net-snmp/library/snmpusm.h
+./table_row.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./table_row.lo: ../../include/net-snmp/agent/mib_module_config.h
+./table_row.lo: ../../include/net-snmp/agent/agent_module_config.h
+./table_row.lo: ../../include/net-snmp/agent/snmp_agent.h
+./table_row.lo: ../../include/net-snmp/agent/snmp_vars.h
+./table_row.lo: ../../include/net-snmp/agent/agent_handler.h
+./table_row.lo: ../../include/net-snmp/agent/var_struct.h
+./table_row.lo: ../../include/net-snmp/agent/agent_registry.h
+./table_row.lo: ../../include/net-snmp/library/fd_event_manager.h
+./table_row.lo: ../../include/net-snmp/agent/ds_agent.h
+./table_row.lo: ../../include/net-snmp/agent/agent_read_config.h
+./table_row.lo: ../../include/net-snmp/agent/agent_trap.h
+./table_row.lo: ../../include/net-snmp/agent/all_helpers.h
+./table_row.lo: ../../include/net-snmp/agent/instance.h
+./table_row.lo: ../../include/net-snmp/agent/baby_steps.h
+./table_row.lo: ../../include/net-snmp/agent/scalar.h
+./table_row.lo: ../../include/net-snmp/agent/scalar_group.h
+./table_row.lo: ../../include/net-snmp/agent/watcher.h
+./table_row.lo: ../../include/net-snmp/agent/multiplexer.h
+./table_row.lo: ../../include/net-snmp/agent/null.h
+./table_row.lo: ../../include/net-snmp/agent/debug_handler.h
+./table_row.lo: ../../include/net-snmp/agent/cache_handler.h
+./table_row.lo: ../../include/net-snmp/agent/old_api.h
+./table_row.lo: ../../include/net-snmp/agent/read_only.h
+./table_row.lo: ../../include/net-snmp/agent/row_merge.h
+./table_row.lo: ../../include/net-snmp/agent/serialize.h
+./table_row.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./table_row.lo: ../../include/net-snmp/agent/mode_end_call.h
+./table_row.lo: ../../include/net-snmp/agent/table.h
+./table_row.lo: ../../include/net-snmp/agent/table_data.h
+./table_row.lo: ../../include/net-snmp/agent/table_dataset.h
+./table_row.lo: ../../include/net-snmp/agent/table_tdata.h
+./table_row.lo: ../../include/net-snmp/agent/table_iterator.h
+./table_row.lo: ../../include/net-snmp/agent/table_container.h
+./table_row.lo: ../../include/net-snmp/agent/table_array.h
+./table_row.lo: ../../include/net-snmp/agent/mfd.h
+./table_tdata.lo: ../../include/net-snmp/net-snmp-config.h
+./table_tdata.lo: ../../include/net-snmp/system/linux.h
+./table_tdata.lo: ../../include/net-snmp/system/sysv.h
+./table_tdata.lo: ../../include/net-snmp/system/generic.h
+./table_tdata.lo: ../../include/net-snmp/machine/generic.h
+./table_tdata.lo: ../../include/net-snmp/net-snmp-includes.h
+./table_tdata.lo: ../../include/net-snmp/definitions.h
+./table_tdata.lo: ../../include/net-snmp/types.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp_api.h
+./table_tdata.lo: ../../include/net-snmp/library/asn1.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp_impl.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp-tc.h
+./table_tdata.lo: ../../include/net-snmp/utilities.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp_client.h
+./table_tdata.lo: ../../include/net-snmp/library/system.h
+./table_tdata.lo: ../../include/net-snmp/library/tools.h
+./table_tdata.lo: ../../include/net-snmp/library/int64.h
+./table_tdata.lo: ../../include/net-snmp/library/mt_support.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp_alarm.h
+./table_tdata.lo: ../../include/net-snmp/library/callback.h
+./table_tdata.lo: ../../include/net-snmp/library/data_list.h
+./table_tdata.lo: ../../include/net-snmp/library/oid_stash.h
+./table_tdata.lo: ../../include/net-snmp/library/check_varbind.h
+./table_tdata.lo: ../../include/net-snmp/library/container.h
+./table_tdata.lo: ../../include/net-snmp/library/factory.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp_logging.h
+./table_tdata.lo: ../../include/net-snmp/library/container_binary_array.h
+./table_tdata.lo: ../../include/net-snmp/library/container_list_ssll.h
+./table_tdata.lo: ../../include/net-snmp/library/container_iterator.h
+./table_tdata.lo: ../../include/net-snmp/library/container.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp_assert.h
+./table_tdata.lo: ../../include/net-snmp/version.h
+./table_tdata.lo: ../../include/net-snmp/session_api.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp_transport.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp_service.h
+./table_tdata.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./table_tdata.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./table_tdata.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./table_tdata.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./table_tdata.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./table_tdata.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./table_tdata.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./table_tdata.lo: ../../include/net-snmp/library/ucd_compat.h
+./table_tdata.lo: ../../include/net-snmp/pdu_api.h
+./table_tdata.lo: ../../include/net-snmp/mib_api.h
+./table_tdata.lo: ../../include/net-snmp/library/mib.h
+./table_tdata.lo: ../../include/net-snmp/library/parse.h
+./table_tdata.lo: ../../include/net-snmp/varbind_api.h
+./table_tdata.lo: ../../include/net-snmp/config_api.h
+./table_tdata.lo: ../../include/net-snmp/library/read_config.h
+./table_tdata.lo: ../../include/net-snmp/library/default_store.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp_enum.h
+./table_tdata.lo: ../../include/net-snmp/library/vacm.h
+./table_tdata.lo: ../../include/net-snmp/output_api.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp_debug.h
+./table_tdata.lo: ../../include/net-snmp/snmpv3_api.h
+./table_tdata.lo: ../../include/net-snmp/library/snmpv3.h
+./table_tdata.lo: ../../include/net-snmp/library/transform_oids.h
+./table_tdata.lo: ../../include/net-snmp/library/keytools.h
+./table_tdata.lo: ../../include/net-snmp/library/scapi.h
+./table_tdata.lo: ../../include/net-snmp/library/lcd_time.h
+./table_tdata.lo: ../../include/net-snmp/library/snmp_secmod.h
+./table_tdata.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./table_tdata.lo: ../../include/net-snmp/library/snmpusm.h
+./table_tdata.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./table_tdata.lo: ../../include/net-snmp/agent/mib_module_config.h
+./table_tdata.lo: ../../include/net-snmp/agent/agent_module_config.h
+./table_tdata.lo: ../../include/net-snmp/agent/snmp_agent.h
+./table_tdata.lo: ../../include/net-snmp/agent/snmp_vars.h
+./table_tdata.lo: ../../include/net-snmp/agent/agent_handler.h
+./table_tdata.lo: ../../include/net-snmp/agent/var_struct.h
+./table_tdata.lo: ../../include/net-snmp/agent/agent_registry.h
+./table_tdata.lo: ../../include/net-snmp/library/fd_event_manager.h
+./table_tdata.lo: ../../include/net-snmp/agent/ds_agent.h
+./table_tdata.lo: ../../include/net-snmp/agent/agent_read_config.h
+./table_tdata.lo: ../../include/net-snmp/agent/agent_trap.h
+./table_tdata.lo: ../../include/net-snmp/agent/all_helpers.h
+./table_tdata.lo: ../../include/net-snmp/agent/instance.h
+./table_tdata.lo: ../../include/net-snmp/agent/baby_steps.h
+./table_tdata.lo: ../../include/net-snmp/agent/scalar.h
+./table_tdata.lo: ../../include/net-snmp/agent/scalar_group.h
+./table_tdata.lo: ../../include/net-snmp/agent/watcher.h
+./table_tdata.lo: ../../include/net-snmp/agent/multiplexer.h
+./table_tdata.lo: ../../include/net-snmp/agent/null.h
+./table_tdata.lo: ../../include/net-snmp/agent/debug_handler.h
+./table_tdata.lo: ../../include/net-snmp/agent/cache_handler.h
+./table_tdata.lo: ../../include/net-snmp/agent/old_api.h
+./table_tdata.lo: ../../include/net-snmp/agent/read_only.h
+./table_tdata.lo: ../../include/net-snmp/agent/row_merge.h
+./table_tdata.lo: ../../include/net-snmp/agent/serialize.h
+./table_tdata.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./table_tdata.lo: ../../include/net-snmp/agent/mode_end_call.h
+./table_tdata.lo: ../../include/net-snmp/agent/table.h
+./table_tdata.lo: ../../include/net-snmp/agent/table_data.h
+./table_tdata.lo: ../../include/net-snmp/agent/table_dataset.h
+./table_tdata.lo: ../../include/net-snmp/agent/table_tdata.h
+./table_tdata.lo: ../../include/net-snmp/agent/table_iterator.h
+./table_tdata.lo: ../../include/net-snmp/agent/table_container.h
+./table_tdata.lo: ../../include/net-snmp/agent/table_array.h
+./table_tdata.lo: ../../include/net-snmp/agent/mfd.h
+./watcher.lo: ../../include/net-snmp/net-snmp-config.h
+./watcher.lo: ../../include/net-snmp/system/linux.h
+./watcher.lo: ../../include/net-snmp/system/sysv.h
+./watcher.lo: ../../include/net-snmp/system/generic.h
+./watcher.lo: ../../include/net-snmp/machine/generic.h
+./watcher.lo: ../../include/net-snmp/net-snmp-includes.h
+./watcher.lo: ../../include/net-snmp/definitions.h
+./watcher.lo: ../../include/net-snmp/types.h
+./watcher.lo: ../../include/net-snmp/library/snmp_api.h
+./watcher.lo: ../../include/net-snmp/library/asn1.h
+./watcher.lo: ../../include/net-snmp/library/snmp_impl.h
+./watcher.lo: ../../include/net-snmp/library/snmp.h
+./watcher.lo: ../../include/net-snmp/library/snmp-tc.h
+./watcher.lo: ../../include/net-snmp/utilities.h
+./watcher.lo: ../../include/net-snmp/library/snmp_client.h
+./watcher.lo: ../../include/net-snmp/library/system.h
+./watcher.lo: ../../include/net-snmp/library/tools.h
+./watcher.lo: ../../include/net-snmp/library/int64.h
+./watcher.lo: ../../include/net-snmp/library/mt_support.h
+./watcher.lo: ../../include/net-snmp/library/snmp_alarm.h
+./watcher.lo: ../../include/net-snmp/library/callback.h
+./watcher.lo: ../../include/net-snmp/library/data_list.h
+./watcher.lo: ../../include/net-snmp/library/oid_stash.h
+./watcher.lo: ../../include/net-snmp/library/check_varbind.h
+./watcher.lo: ../../include/net-snmp/library/container.h
+./watcher.lo: ../../include/net-snmp/library/factory.h
+./watcher.lo: ../../include/net-snmp/library/snmp_logging.h
+./watcher.lo: ../../include/net-snmp/library/container_binary_array.h
+./watcher.lo: ../../include/net-snmp/library/container_list_ssll.h
+./watcher.lo: ../../include/net-snmp/library/container_iterator.h
+./watcher.lo: ../../include/net-snmp/library/container.h
+./watcher.lo: ../../include/net-snmp/library/snmp_assert.h
+./watcher.lo: ../../include/net-snmp/version.h
+./watcher.lo: ../../include/net-snmp/session_api.h
+./watcher.lo: ../../include/net-snmp/library/snmp_transport.h
+./watcher.lo: ../../include/net-snmp/library/snmp_service.h
+./watcher.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./watcher.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./watcher.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./watcher.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./watcher.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./watcher.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./watcher.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./watcher.lo: ../../include/net-snmp/library/ucd_compat.h
+./watcher.lo: ../../include/net-snmp/pdu_api.h
+./watcher.lo: ../../include/net-snmp/mib_api.h
+./watcher.lo: ../../include/net-snmp/library/mib.h
+./watcher.lo: ../../include/net-snmp/library/parse.h
+./watcher.lo: ../../include/net-snmp/varbind_api.h
+./watcher.lo: ../../include/net-snmp/config_api.h
+./watcher.lo: ../../include/net-snmp/library/read_config.h
+./watcher.lo: ../../include/net-snmp/library/default_store.h
+./watcher.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./watcher.lo: ../../include/net-snmp/library/snmp_enum.h
+./watcher.lo: ../../include/net-snmp/library/vacm.h
+./watcher.lo: ../../include/net-snmp/output_api.h
+./watcher.lo: ../../include/net-snmp/library/snmp_debug.h
+./watcher.lo: ../../include/net-snmp/snmpv3_api.h
+./watcher.lo: ../../include/net-snmp/library/snmpv3.h
+./watcher.lo: ../../include/net-snmp/library/transform_oids.h
+./watcher.lo: ../../include/net-snmp/library/keytools.h
+./watcher.lo: ../../include/net-snmp/library/scapi.h
+./watcher.lo: ../../include/net-snmp/library/lcd_time.h
+./watcher.lo: ../../include/net-snmp/library/snmp_secmod.h
+./watcher.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./watcher.lo: ../../include/net-snmp/library/snmpusm.h
+./watcher.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./watcher.lo: ../../include/net-snmp/agent/mib_module_config.h
+./watcher.lo: ../../include/net-snmp/agent/agent_module_config.h
+./watcher.lo: ../../include/net-snmp/agent/snmp_agent.h
+./watcher.lo: ../../include/net-snmp/agent/snmp_vars.h
+./watcher.lo: ../../include/net-snmp/agent/agent_handler.h
+./watcher.lo: ../../include/net-snmp/agent/var_struct.h
+./watcher.lo: ../../include/net-snmp/agent/agent_registry.h
+./watcher.lo: ../../include/net-snmp/library/fd_event_manager.h
+./watcher.lo: ../../include/net-snmp/agent/ds_agent.h
+./watcher.lo: ../../include/net-snmp/agent/agent_read_config.h
+./watcher.lo: ../../include/net-snmp/agent/agent_trap.h
+./watcher.lo: ../../include/net-snmp/agent/all_helpers.h
+./watcher.lo: ../../include/net-snmp/agent/instance.h
+./watcher.lo: ../../include/net-snmp/agent/baby_steps.h
+./watcher.lo: ../../include/net-snmp/agent/scalar.h
+./watcher.lo: ../../include/net-snmp/agent/scalar_group.h
+./watcher.lo: ../../include/net-snmp/agent/watcher.h
+./watcher.lo: ../../include/net-snmp/agent/multiplexer.h
+./watcher.lo: ../../include/net-snmp/agent/null.h
+./watcher.lo: ../../include/net-snmp/agent/debug_handler.h
+./watcher.lo: ../../include/net-snmp/agent/cache_handler.h
+./watcher.lo: ../../include/net-snmp/agent/old_api.h
+./watcher.lo: ../../include/net-snmp/agent/read_only.h
+./watcher.lo: ../../include/net-snmp/agent/row_merge.h
+./watcher.lo: ../../include/net-snmp/agent/serialize.h
+./watcher.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./watcher.lo: ../../include/net-snmp/agent/mode_end_call.h
+./watcher.lo: ../../include/net-snmp/agent/table.h
+./watcher.lo: ../../include/net-snmp/agent/table_data.h
+./watcher.lo: ../../include/net-snmp/agent/table_dataset.h
+./watcher.lo: ../../include/net-snmp/agent/table_tdata.h
+./watcher.lo: ../../include/net-snmp/agent/table_iterator.h
+./watcher.lo: ../../include/net-snmp/agent/table_container.h
+./watcher.lo: ../../include/net-snmp/agent/table_array.h
+./watcher.lo: ../../include/net-snmp/agent/mfd.h
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/Makefile.in b/cleopatre/application/spidnetsnmp/agent/helpers/Makefile.in
new file mode 100644
index 0000000000..b83af89053
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/Makefile.in
@@ -0,0 +1,144 @@
+top_builddir=../..
+
+# use GNU vpath, if available, to only set a path for source and headers
+# VPATH will pick up objects too, which is bad if you are sharing a
+# source dir...
+@GNU_vpath@ %.h $(srcdir)
+@GNU_vpath@ %.c $(srcdir)
+# fallback to regular VPATH for non-gnu...
+@NON_GNU_VPATH@ $(srcdir)
+
+#
+# What to install
+#
+
+INSTALLLIBS=libnetsnmphelpers.$(LIB_EXTENSION)$(LIB_VERSION)
+INCLUDESUBDIR=agent
+HEADERS=all_helpers.h \
+ baby_steps.h \
+ bulk_to_next.h \
+ cache_handler.h \
+ debug_handler.h \
+ instance.h \
+ mode_end_call.h \
+ multiplexer.h \
+ null.h \
+ old_api.h \
+ read_only.h \
+ row_merge.h \
+ scalar.h \
+ scalar_group.h \
+ serialize.h \
+ stash_cache.h \
+ stash_to_next.h \
+ table.h \
+ table_array.h \
+ table_container.h \
+ table_data.h \
+ table_dataset.h \
+ table_iterator.h \
+ table_tdata.h \
+ watcher.h
+
+# No header 'table_row.h'
+
+HEADERSONLY=mfd.h set_helper.h
+INCLUDESUBDIRHEADERS=$(HEADERS) $(HEADERSONLY)
+
+#
+# Build info
+#
+NETSNMPLIB = ../../snmplib/libnetsnmp.$(LIB_EXTENSION)$(LIB_VERSION)
+HELPERLIB = libnetsnmphelpers.$(LIB_EXTENSION)$(LIB_VERSION)
+AGENTLIB = ../libnetsnmpagent.$(LIB_EXTENSION)$(LIB_VERSION)
+MIBLIB = ../libnetsnmpmibs.$(LIB_EXTENSION)$(LIB_VERSION)
+# -I. -I.. -I../..
+CPPFLAGS= $(TOP_INCLUDES) -I. $(AGENT_INCLUDES) $(MIBGROUP_INCLUDES) \
+ $(SNMPLIB_INCLUDES) @CPPFLAGS@
+
+SRCS = all_helpers.c \
+ baby_steps.c \
+ bulk_to_next.c \
+ cache_handler.c \
+ debug_handler.c \
+ instance.c \
+ mode_end_call.c \
+ multiplexer.c \
+ null.c \
+ old_api.c \
+ read_only.c \
+ row_merge.c \
+ scalar.c \
+ scalar_group.c \
+ serialize.c \
+ stash_cache.c \
+ stash_to_next.c \
+ table.c \
+ table_array.c \
+ table_container.c \
+ table_data.c \
+ table_dataset.c \
+ table_iterator.c \
+ table_row.c \
+ table_tdata.c \
+ watcher.c
+
+OBJS = all_helpers.o \
+ baby_steps.o \
+ bulk_to_next.o \
+ cache_handler.o \
+ debug_handler.o \
+ instance.o \
+ mode_end_call.o \
+ multiplexer.o \
+ null.o \
+ old_api.o \
+ read_only.o \
+ row_merge.o \
+ scalar.o \
+ scalar_group.o \
+ serialize.o \
+ stash_cache.o \
+ stash_to_next.o \
+ table.o \
+ table_array.o \
+ table_container.o \
+ table_data.o \
+ table_dataset.o \
+ table_iterator.o \
+ table_row.o \
+ table_tdata.o \
+ watcher.o
+
+LOBJS = all_helpers.lo \
+ baby_steps.lo \
+ bulk_to_next.lo \
+ cache_handler.lo \
+ debug_handler.lo \
+ instance.lo \
+ mode_end_call.lo \
+ multiplexer.lo \
+ null.lo \
+ old_api.lo \
+ read_only.lo \
+ row_merge.lo \
+ scalar.lo \
+ scalar_group.lo \
+ serialize.lo \
+ stash_cache.lo \
+ stash_to_next.lo \
+ table.lo \
+ table_array.lo \
+ table_container.lo \
+ table_data.lo \
+ table_dataset.lo \
+ table_iterator.lo \
+ table_row.lo \
+ table_tdata.lo \
+ watcher.lo
+
+all: standardall
+
+libnetsnmphelpers.$(LIB_EXTENSION)$(LIB_VERSION): $(LOBJS)
+ $(LIB_LD_CMD) $@ $(LOBJS) $(AGENTLIB) $(NETSNMPLIB) $(LDFLAGS) $(LIB_LD_LIBS)
+ $(RANLIB) $@
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/all_helpers.c b/cleopatre/application/spidnetsnmp/agent/helpers/all_helpers.c
new file mode 100644
index 0000000000..02bc8afebe
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/all_helpers.c
@@ -0,0 +1,65 @@
+/** @name handler
+ * @{ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#ifdef STILL_TO_DO
+ /*
+ * It ought to be possible to just #include these files,
+ * but they rely on various other types being defined first.
+ *
+ * I really can't face tracking down the dependency chain
+ * just at the moment.
+ * So we'll just have to live with the warnings....
+ */
+#include <net-snmp/agent/debug_handler.h>
+#include <net-snmp/agent/serialize.h>
+#include <net-snmp/agent/read_only.h>
+#include <net-snmp/agent/bulk_to_next.h>
+#include <net-snmp/agent/table_dataset.h>
+#include <net-snmp/agent/stash_cache.h>
+
+#else
+
+void netsnmp_init_debug_helper(void);
+void netsnmp_init_serialize(void);
+void netsnmp_init_read_only_helper(void);
+void netsnmp_init_bulk_to_next_helper(void);
+void netsnmp_init_table_dataset(void);
+void netsnmp_init_stash_cache_helper(void);
+#endif
+
+/** call the initialization sequence for all handlers with init_ routines. */
+void
+netsnmp_init_helpers(void)
+{
+ netsnmp_init_debug_helper();
+ netsnmp_init_serialize();
+ netsnmp_init_read_only_helper();
+ netsnmp_init_bulk_to_next_helper();
+ netsnmp_init_table_dataset();
+ netsnmp_init_stash_cache_helper();
+}
+
+/** @defgroup utilities utility_handlers
+ * Simplify request processing
+ * A group of handlers intended to simplify certain aspects of processing
+ * a request for a MIB object. These helpers do not implement any MIB
+ * objects themselves. Rather they handle specific generic situations,
+ * either returning an error, or passing a (possibly simpler) request
+ * down to lower level handlers.
+ * @ingroup handler
+ */
+
+/** @defgroup leaf leaf_handlers
+ * Process individual leaf objects
+ * A group of handlers to implement individual leaf objects and instances
+ * (both scalar objects, and individual objects and instances within a table).
+ * These handlers will typically allow control to be passed down to a lower
+ * level, user-provided handler, but this is (usually) optional.
+ * @ingroup handler
+ */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/baby_steps.c b/cleopatre/application/spidnetsnmp/agent/helpers/baby_steps.c
new file mode 100644
index 0000000000..77619f534e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/baby_steps.c
@@ -0,0 +1,518 @@
+/*
+ * baby_steps.c
+ * $Id: baby_steps.c 14169 2006-01-25 16:28:12Z 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/agent/baby_steps.h>
+
+#define BABY_STEPS_PER_MODE_MAX 4
+#define BSTEP_USE_ORIGINAL 0xffff
+
+static u_short get_mode_map[BABY_STEPS_PER_MODE_MAX] = {
+ MODE_BSTEP_PRE_REQUEST, MODE_BSTEP_OBJECT_LOOKUP, BSTEP_USE_ORIGINAL, MODE_BSTEP_POST_REQUEST };
+
+static u_short set_mode_map[SNMP_MSG_INTERNAL_SET_MAX][BABY_STEPS_PER_MODE_MAX] = {
+ /*R1*/
+ { MODE_BSTEP_PRE_REQUEST, MODE_BSTEP_OBJECT_LOOKUP, MODE_BSTEP_ROW_CREATE,
+ MODE_BSTEP_CHECK_VALUE },
+ /*R2*/
+ { MODE_BSTEP_UNDO_SETUP, BABY_STEP_NONE, BABY_STEP_NONE, BABY_STEP_NONE },
+ /*A */
+ { MODE_BSTEP_SET_VALUE,MODE_BSTEP_CHECK_CONSISTENCY,
+ MODE_BSTEP_COMMIT, BABY_STEP_NONE },
+ /*C */
+ { MODE_BSTEP_IRREVERSIBLE_COMMIT, MODE_BSTEP_UNDO_CLEANUP, MODE_BSTEP_POST_REQUEST,
+ BABY_STEP_NONE},
+ /*F */
+ { MODE_BSTEP_UNDO_CLEANUP, MODE_BSTEP_POST_REQUEST, BABY_STEP_NONE,
+ BABY_STEP_NONE },
+ /*U */
+ { MODE_BSTEP_UNDO_COMMIT, MODE_BSTEP_UNDO_SET, MODE_BSTEP_UNDO_CLEANUP,
+ MODE_BSTEP_POST_REQUEST}
+};
+
+static int
+_baby_steps_helper(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests);
+static int
+_baby_steps_access_multiplexer(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests);
+
+/** @defgroup baby_steps baby_steps
+ * Calls your handler in baby_steps for set processing.
+ * @ingroup handler
+ * @{
+ */
+
+/** returns a baby_steps handler that can be injected into a given
+ * handler chain.
+ */
+netsnmp_mib_handler *
+netsnmp_baby_steps_handler_get(u_long modes)
+{
+ netsnmp_mib_handler *mh;
+ netsnmp_baby_steps_modes *md;
+
+ mh = netsnmp_create_handler("baby_steps", _baby_steps_helper);
+ if(!mh)
+ return NULL;
+
+ md = SNMP_MALLOC_TYPEDEF(netsnmp_baby_steps_modes);
+ if (NULL == md) {
+ snmp_log(LOG_ERR,"malloc failed in netsnmp_baby_steps_handler_get\n");
+ netsnmp_handler_free(mh);
+ mh = NULL;
+ }
+ else {
+ mh->myvoid = md;
+ if (0 == modes)
+ modes = BABY_STEP_ALL;
+ md->registered = modes;
+ }
+
+ /*
+ * don't set MIB_HANDLER_AUTO_NEXT, since we need to call lower
+ * handlers with a munged mode.
+ */
+
+ return mh;
+}
+
+/** @internal Implements the baby_steps handler */
+static int
+_baby_steps_helper(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_baby_steps_modes *bs_modes;
+ int save_mode, i, rc = SNMP_ERR_NOERROR;
+ u_short *mode_map_ptr;
+
+ DEBUGMSGTL(("baby_steps", "Got request, mode %s\n",
+ se_find_label_in_slist("agent_mode",reqinfo->mode)));
+
+ bs_modes = handler->myvoid;
+ netsnmp_assert(NULL != bs_modes);
+
+ switch (reqinfo->mode) {
+
+ case MODE_SET_RESERVE1:
+ /*
+ * clear completed modes
+ * xxx-rks: this will break for pdus with set requests to different
+ * rows in the same table when the handler is set up to use the row
+ * merge helper as well (or if requests are serialized).
+ */
+ bs_modes->completed = 0;
+ /** fall through */
+
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ mode_map_ptr = set_mode_map[reqinfo->mode];
+ break;
+
+ default:
+ /*
+ * clear completed modes
+ */
+ bs_modes->completed = 0;
+
+ mode_map_ptr = get_mode_map;
+ }
+
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +-------------+ +==============+
+ * | row |f|<-------|| object ||
+ * | create |1| E || lookup ||
+ * +-------------+ +==============+
+ * E | | S | S
+ * | +------------------>|
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * |
+ * (err && f1)------------------->+
+ * | |
+ * +--------------+ +--------------+
+ * | post |<--------| row |
+ * | request | U | release |
+ * +--------------+ +--------------+
+ *
+ */
+ /*
+ * save original mode
+ */
+ save_mode = reqinfo->mode;
+ for(i = 0; i < BABY_STEPS_PER_MODE_MAX; ++i ) {
+ /*
+ * break if we run out of baby steps for this mode
+ */
+ if(mode_map_ptr[i] == BABY_STEP_NONE)
+ break;
+
+ DEBUGMSGTL(("baby_steps", " baby step mode %s\n",
+ se_find_label_in_slist("babystep_mode",mode_map_ptr[i])));
+
+ /*
+ * skip modes the handler didn't register for
+ */
+ if (BSTEP_USE_ORIGINAL != mode_map_ptr[i]) {
+ u_int mode_flag;
+
+ /*
+ * skip undo commit if commit wasn't hit, and
+ * undo_cleanup if undo_setup wasn't hit.
+ */
+ if((MODE_SET_UNDO == save_mode) &&
+ (MODE_BSTEP_UNDO_COMMIT == mode_map_ptr[i]) &&
+ !(BABY_STEP_COMMIT & bs_modes->completed)) {
+ DEBUGMSGTL(("baby_steps",
+ " skipping commit undo (no commit)\n"));
+ continue;
+ }
+ else if((MODE_SET_FREE == save_mode) &&
+ (MODE_BSTEP_UNDO_CLEANUP == mode_map_ptr[i]) &&
+ !(BABY_STEP_UNDO_SETUP & bs_modes->completed)) {
+ DEBUGMSGTL(("baby_steps",
+ " skipping undo cleanup (no undo setup)\n"));
+ continue;
+ }
+
+ reqinfo->mode = mode_map_ptr[i];
+ mode_flag = netsnmp_baby_step_mode2flag( mode_map_ptr[i] );
+ if((mode_flag & bs_modes->registered))
+ bs_modes->completed |= mode_flag;
+ else {
+ DEBUGMSGTL(("baby_steps",
+ " skipping mode (not registered)\n"));
+ continue;
+ }
+
+
+ }
+ else {
+ reqinfo->mode = save_mode;
+ }
+
+#ifdef BABY_STEPS_NEXT_MODE
+ /*
+ * I can't remember why I wanted the next mode in the request,
+ * but it's not used anywhere, so don't use this code. saved,
+ * in case I remember why I thought needed it. - rstory 040911
+ */
+ if((BABY_STEPS_PER_MODE_MAX - 1) == i)
+ reqinfo->next_mode_ok = BABY_STEP_NONE;
+ else {
+ if(BSTEP_USE_ORIGINAL == mode_map_ptr[i+1])
+ reqinfo->next_mode_ok = save_mode;
+ else
+ reqinfo->next_mode_ok = mode_map_ptr[i+1];
+ }
+#endif
+
+ /*
+ * call handlers for baby step
+ */
+ rc = netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+
+ /*
+ * check for error calling handler (unlikely, but...)
+ */
+ if(rc) {
+ DEBUGMSGTL(("baby_steps", " ERROR:handler error\n"));
+ break;
+ }
+
+ /*
+ * check for errors in any of the requests for GET-like, reserve1,
+ * reserve2 and action. (there is no recovery from errors
+ * in commit, free or undo.)
+ */
+ if (MODE_IS_GET(save_mode)
+ || (save_mode < SNMP_MSG_INTERNAL_SET_COMMIT)) {
+ rc = netsnmp_check_requests_error(requests);
+ if(rc) {
+ DEBUGMSGTL(("baby_steps", " ERROR:request error\n"));
+ break;
+ }
+ }
+ }
+
+ /*
+ * restore original mode
+ */
+ reqinfo->mode = save_mode;
+
+
+ return rc;
+}
+
+/** initializes the baby_steps helper which then registers a baby_steps
+ * handler as a run-time injectable handler for configuration file
+ * use.
+ */
+void
+netsnmp_baby_steps_handler_init(void)
+{
+ netsnmp_register_handler_by_name("baby_steps",
+ netsnmp_baby_steps_handler_get(BABY_STEP_ALL));
+}
+
+/** @} */
+
+/** @defgroup access_multiplexer baby_steps_access_multiplexer: calls individual access methods based on baby_step mode.
+ * @ingroup baby_steps
+ * @{
+ */
+
+/** returns a baby_steps handler that can be injected into a given
+ * handler chain.
+ */
+netsnmp_mib_handler *
+netsnmp_baby_steps_access_multiplexer_get(netsnmp_baby_steps_access_methods *am)
+{
+ netsnmp_mib_handler *mh;
+
+ mh = netsnmp_create_handler("baby_steps_mux",
+ _baby_steps_access_multiplexer);
+ if(!mh)
+ return NULL;
+
+ mh->myvoid = am;
+ mh->flags |= MIB_HANDLER_AUTO_NEXT;
+
+ return mh;
+}
+
+/** @internal Implements the baby_steps handler */
+static int
+_baby_steps_access_multiplexer(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ void *temp_void;
+ Netsnmp_Node_Handler *method = NULL;
+ netsnmp_baby_steps_access_methods *access_methods;
+ int rc = SNMP_ERR_NOERROR;
+
+ /** call handlers should enforce these */
+ netsnmp_assert((handler!=NULL) && (reginfo!=NULL) && (reqinfo!=NULL) &&
+ (requests!=NULL));
+
+ DEBUGMSGT(("baby_steps_mux", "mode %s\n",
+ se_find_label_in_slist("babystep_mode",reqinfo->mode)));
+
+ access_methods = (netsnmp_baby_steps_access_methods *)handler->myvoid;
+ if(!access_methods) {
+ snmp_log(LOG_ERR,"baby_steps_access_multiplexer has no methods\n");
+ return SNMPERR_GENERR;
+ }
+
+ switch(reqinfo->mode) {
+
+ case MODE_BSTEP_PRE_REQUEST:
+ if( access_methods->pre_request )
+ method = access_methods->pre_request;
+ break;
+
+ case MODE_BSTEP_OBJECT_LOOKUP:
+ if( access_methods->object_lookup )
+ method = access_methods->object_lookup;
+ break;
+
+ case SNMP_MSG_GET:
+ case SNMP_MSG_GETNEXT:
+ if( access_methods->get_values )
+ method = access_methods->get_values;
+ break;
+
+ case MODE_BSTEP_CHECK_VALUE:
+ if( access_methods->object_syntax_checks )
+ method = access_methods->object_syntax_checks;
+ break;
+
+ case MODE_BSTEP_ROW_CREATE:
+ if( access_methods->row_creation )
+ method = access_methods->row_creation;
+ break;
+
+ case MODE_BSTEP_UNDO_SETUP:
+ if( access_methods->undo_setup )
+ method = access_methods->undo_setup;
+ break;
+
+ case MODE_BSTEP_SET_VALUE:
+ if( access_methods->set_values )
+ method = access_methods->set_values;
+ break;
+
+ case MODE_BSTEP_CHECK_CONSISTENCY:
+ if( access_methods->consistency_checks )
+ method = access_methods->consistency_checks;
+ break;
+
+ case MODE_BSTEP_UNDO_SET:
+ if( access_methods->undo_sets )
+ method = access_methods->undo_sets;
+ break;
+
+ case MODE_BSTEP_COMMIT:
+ if( access_methods->commit )
+ method = access_methods->commit;
+ break;
+
+ case MODE_BSTEP_UNDO_COMMIT:
+ if( access_methods->undo_commit )
+ method = access_methods->undo_commit;
+ break;
+
+ case MODE_BSTEP_IRREVERSIBLE_COMMIT:
+ if( access_methods->irreversible_commit )
+ method = access_methods->irreversible_commit;
+ break;
+
+ case MODE_BSTEP_UNDO_CLEANUP:
+ if( access_methods->undo_cleanup )
+ method = access_methods->undo_cleanup;
+ break;
+
+ case MODE_BSTEP_POST_REQUEST:
+ if( access_methods->post_request )
+ method = access_methods->post_request;
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown mode %d\n", reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ /*
+ * if method exists, set up handler void and call method.
+ */
+ if(NULL != method) {
+ temp_void = handler->myvoid;
+ handler->myvoid = access_methods->my_access_void;
+ rc = (*method)(handler, reginfo, reqinfo, requests);
+ handler->myvoid = temp_void;
+ }
+ else {
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR,"baby steps multiplexer handler called for a mode "
+ "with no handler\n");
+ netsnmp_assert(NULL != method);
+ }
+
+ /*
+ * don't call any lower handlers, it will be done for us
+ * since we set MIB_HANDLER_AUTO_NEXT
+ */
+
+ return rc;
+}
+
+/*
+ * give a baby step mode, return the flag for that mode
+ */
+int
+netsnmp_baby_step_mode2flag( u_int mode )
+{
+ switch( mode ) {
+ case MODE_BSTEP_OBJECT_LOOKUP:
+ return BABY_STEP_OBJECT_LOOKUP;
+ case MODE_BSTEP_SET_VALUE:
+ return BABY_STEP_SET_VALUE;
+ case MODE_BSTEP_IRREVERSIBLE_COMMIT:
+ return BABY_STEP_IRREVERSIBLE_COMMIT;
+ case MODE_BSTEP_CHECK_VALUE:
+ return BABY_STEP_CHECK_VALUE;
+ case MODE_BSTEP_PRE_REQUEST:
+ return BABY_STEP_PRE_REQUEST;
+ case MODE_BSTEP_POST_REQUEST:
+ return BABY_STEP_POST_REQUEST;
+ case MODE_BSTEP_UNDO_SETUP:
+ return BABY_STEP_UNDO_SETUP;
+ case MODE_BSTEP_UNDO_CLEANUP:
+ return BABY_STEP_UNDO_CLEANUP;
+ case MODE_BSTEP_UNDO_SET:
+ return BABY_STEP_UNDO_SET;
+ case MODE_BSTEP_ROW_CREATE:
+ return BABY_STEP_ROW_CREATE;
+ case MODE_BSTEP_CHECK_CONSISTENCY:
+ return BABY_STEP_CHECK_CONSISTENCY;
+ case MODE_BSTEP_COMMIT:
+ return BABY_STEP_COMMIT;
+ case MODE_BSTEP_UNDO_COMMIT:
+ return BABY_STEP_UNDO_COMMIT;
+ default:
+ netsnmp_assert("unknown flag");
+ break;
+ }
+ return 0;
+}
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/bulk_to_next.c b/cleopatre/application/spidnetsnmp/agent/helpers/bulk_to_next.c
new file mode 100644
index 0000000000..4dd1914f24
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/bulk_to_next.c
@@ -0,0 +1,145 @@
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/bulk_to_next.h>
+
+/** @defgroup bulk_to_next bulk_to_next
+ * Convert GETBULK requests into GETNEXT requests for the handler.
+ * The only purpose of this handler is to convert a GETBULK request
+ * to a GETNEXT request. It is inserted into handler chains where
+ * the handler has not set the HANDLER_CAN_GETBULK flag.
+ * @ingroup utilities
+ * @{
+ */
+
+/** returns a bulk_to_next handler that can be injected into a given
+ * handler chain.
+ */
+netsnmp_mib_handler *
+netsnmp_get_bulk_to_next_handler(void)
+{
+ netsnmp_mib_handler *handler =
+ netsnmp_create_handler("bulk_to_next",
+ netsnmp_bulk_to_next_helper);
+
+ if (NULL != handler)
+ handler->flags |= MIB_HANDLER_AUTO_NEXT;
+
+ return handler;
+}
+
+/** takes answered requests and decrements the repeat count and
+ * updates the requests to the next to-do varbind in the list */
+void
+netsnmp_bulk_to_next_fix_requests(netsnmp_request_info *requests)
+{
+ netsnmp_request_info *request;
+ /*
+ * Make sure that:
+ * - repeats remain
+ * - last handler provided an answer
+ * - answer didn't exceed range end (ala check_getnext_results)
+ * - there is a next variable
+ * then
+ * update the varbinds for the next request series
+ */
+ for (request = requests; request; request = request->next) {
+ if (request->repeat > 0 &&
+ request->requestvb->type != ASN_NULL &&
+ request->requestvb->type != ASN_PRIV_RETRY &&
+ (snmp_oid_compare(request->requestvb->name,
+ request->requestvb->name_length,
+ request->range_end,
+ request->range_end_len) < 0) &&
+ request->requestvb->next_variable ) {
+ request->repeat--;
+ snmp_set_var_objid(request->requestvb->next_variable,
+ request->requestvb->name,
+ request->requestvb->name_length);
+ request->requestvb = request->requestvb->next_variable;
+ request->requestvb->type = ASN_PRIV_RETRY;
+ /*
+ * if inclusive == 2, it was set in check_getnext_results for
+ * the previous requestvb. Now that we've moved on, clear it.
+ */
+ if (2 == request->inclusive)
+ request->inclusive = 0;
+ }
+ }
+}
+
+/** @internal Implements the bulk_to_next handler */
+int
+netsnmp_bulk_to_next_helper(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ int ret = SNMP_ERR_NOERROR;
+
+ /*
+ * this code depends on AUTO_NEXT being set
+ */
+ netsnmp_assert(handler->flags & MIB_HANDLER_AUTO_NEXT);
+
+ /*
+ * don't do anything for any modes besides GETBULK. Just return, and
+ * the agent will call the next handler (AUTO_NEXT).
+ *
+ * for GETBULK, we munge the mode, call the next handler ourselves
+ * (setting AUTO_NEXT_OVERRRIDE so the agent knows what we did),
+ * restore the mode and fix up the requests.
+ */
+ if(MODE_GETBULK == reqinfo->mode) {
+
+ DEBUGIF("bulk_to_next") {
+ netsnmp_request_info *req = requests;
+ while(req) {
+ DEBUGMSGTL(("bulk_to_next", "Got request: "));
+ DEBUGMSGOID(("bulk_to_next", req->requestvb->name,
+ req->requestvb->name_length));
+ DEBUGMSG(("bulk_to_next", "\n"));
+ req = req->next;
+ }
+ }
+
+ reqinfo->mode = MODE_GETNEXT;
+ ret =
+ netsnmp_call_next_handler(handler, reginfo, reqinfo, requests);
+ reqinfo->mode = MODE_GETBULK;
+
+ /*
+ * update the varbinds for the next request series
+ */
+ netsnmp_bulk_to_next_fix_requests(requests);
+
+ /*
+ * let agent handler know that we've already called next handler
+ */
+ handler->flags |= MIB_HANDLER_AUTO_NEXT_OVERRIDE_ONCE;
+ }
+
+ return ret;
+}
+
+/** initializes the bulk_to_next helper which then registers a bulk_to_next
+ * handler as a run-time injectable handler for configuration file
+ * use.
+ */
+void
+netsnmp_init_bulk_to_next_helper(void)
+{
+ netsnmp_register_handler_by_name("bulk_to_next",
+ netsnmp_get_bulk_to_next_handler());
+}
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/cache_handler.c b/cleopatre/application/spidnetsnmp/agent/helpers/cache_handler.c
new file mode 100644
index 0000000000..073428bb4b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/cache_handler.c
@@ -0,0 +1,611 @@
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/cache_handler.h>
+
+static netsnmp_cache *cache_head = NULL;
+static int cache_outstanding_valid = 0;
+static int _cache_load( netsnmp_cache *cache );
+
+#define CACHE_RELEASE_FREQUENCY 60 /* Check for expired caches every 60s */
+
+void release_cached_resources(unsigned int regNo,
+ void *clientargs);
+
+/** @defgroup cache_handler cache_handler
+ * Maintains a cache of data for use by lower level handlers.
+ * @ingroup utilities
+ * This helper checks to see whether the data has been loaded "recently"
+ * (according to the timeout for that particular cache) and calls the
+ * registered "load_cache" routine if necessary.
+ * The lower handlers can then work with this local cached data.
+ *
+ * A timeout value of -1 will cause netsnmp_cache_check_expired() to
+ * always return true, and thus the cache will be reloaded for every
+ * request.
+ *
+ * To minimze resource use by the agent, a periodic callback checks for
+ * expired caches, and will call the free_cache function for any expired
+ * cache.
+ *
+ * The load_cache route should return a negative number if the cache
+ * was not successfully loaded. 0 or any positive number indicates successs.
+ *
+ *
+ * Several flags can be set to affect the operations on the cache.
+ *
+ * If NETSNMP_CACHE_DONT_INVALIDATE_ON_SET is set, the free_cache method
+ * will not be called after a set request has processed. It is assumed that
+ * the lower mib handler using the cache has maintained cache consistency.
+ *
+ * If NETSNMP_CACHE_DONT_FREE_BEFORE_LOAD is set, the free_cache method
+ * will not be called before the load_cache method is called. It is assumed
+ * that the load_cache routine will properly deal with being called with a
+ * valid cache.
+ *
+ * If NETSNMP_CACHE_DONT_FREE_EXPIRED is set, the free_cache method will
+ * not be called with the cache expires. The expired flag will be set, but
+ * the valid flag will not be cleared. It is assumed that the load_cache
+ * routine will properly deal with being called with a valid cache.
+ *
+ * If NETSNMP_CACHE_PRELOAD is set when a the cache handler is created,
+ * the cache load routine will be called immediately.
+ *
+ * If NETSNMP_CACHE_DONT_AUTO_RELEASE is set, the periodic callback that
+ * checks for expired caches will skip the cache. The cache will only be
+ * checked for expiration when a request triggers the cache handler. This
+ * is useful if the cache has it's own periodic callback to keep the cache
+ * fresh.
+ *
+ * If NETSNMP_CACHE_AUTO_RELOAD is set, a timer will be set up to reload
+ * the cache when it expires. This is useful for keeping the cache fresh,
+ * even in the absence of incoming snmp requests.
+ *
+ *
+ * Here are some suggestions for some common situations.
+ *
+ * Cached File:
+ * If your table is based on a file that may periodically change,
+ * you can test the modification date to see if the file has
+ * changed since the last cache load. To get the cache helper to call
+ * the load function for every request, set the timeout to -1, which
+ * will cause the cache to always report that it is expired. This means
+ * that you will want to prevent the agent from flushing the cache when
+ * it has expired, and you will have to flush it manually if you
+ * detect that the file has changed. To accomplish this, set the
+ * following flags:
+ *
+ * NETSNMP_CACHE_DONT_FREE_EXPIRED
+ * NETSNMP_CACHE_DONT_AUTO_RELEASE
+ *
+ *
+ * Constant (periodic) reload:
+ * If you want the cache kept up to date regularly, even if no requests
+ * for the table are received, you can have your cache load routine
+ * called periodically. This is very useful if you need to monitor the
+ * data for changes (eg a <i>LastChanged</i> object). You will need to
+ * prevent the agent from flushing the cache when it expires. Set the
+ * cache timeout to the frequency, in seconds, that you wish to
+ * reload your cache, and set the following flags:
+ *
+ * NETSNMP_CACHE_DONT_FREE_EXPIRED
+ * NETSNMP_CACHE_DONT_AUTO_RELEASE
+ * NETSNMP_CACHE_AUTO_RELOAD
+ *
+ * @{
+ */
+
+/** get cache head
+ * @internal
+ * unadvertised function to get cache head. You really should not
+ * do this, since the internal storage mechanism might change.
+ */
+netsnmp_cache *
+netsnmp_cache_get_head(void)
+{
+ return cache_head;
+}
+
+/** find existing cache
+ */
+netsnmp_cache *
+netsnmp_cache_find_by_oid(oid * rootoid, int rootoid_len)
+{
+ netsnmp_cache *cache;
+
+ for (cache = cache_head; cache; cache = cache->next) {
+ if (0 == netsnmp_oid_equals(cache->rootoid, cache->rootoid_len,
+ rootoid, rootoid_len))
+ return cache;
+ }
+
+ return NULL;
+}
+
+/** returns a cache
+ */
+netsnmp_cache *
+netsnmp_cache_create(int timeout, NetsnmpCacheLoad * load_hook,
+ NetsnmpCacheFree * free_hook,
+ oid * rootoid, int rootoid_len)
+{
+ netsnmp_cache *cache = NULL;
+
+ cache = SNMP_MALLOC_TYPEDEF(netsnmp_cache);
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"malloc error in netsnmp_cache_create\n");
+ return NULL;
+ }
+ cache->timeout = timeout;
+ cache->load_cache = load_hook;
+ cache->free_cache = free_hook;
+ cache->enabled = 1;
+
+ if(0 == cache->timeout)
+ cache->timeout = netsnmp_ds_get_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_CACHE_TIMEOUT);
+
+
+ /*
+ * Add the registered OID information, and tack
+ * this onto the list for cache SNMP management
+ *
+ * Note that this list is not ordered.
+ * table_iterator rules again!
+ */
+ if (rootoid) {
+ cache->rootoid = snmp_duplicate_objid(rootoid, rootoid_len);
+ cache->rootoid_len = rootoid_len;
+ cache->next = cache_head;
+ if (cache_head)
+ cache_head->prev = cache;
+ cache_head = cache;
+ }
+
+ return cache;
+}
+
+/** callback function to call cache load function */
+static void
+_timer_reload(unsigned int regNo, void *clientargs)
+{
+ netsnmp_cache *cache = (netsnmp_cache *)clientargs;
+
+ DEBUGMSGT(("cache_timer:start", "loading cache %p\n", cache));
+
+ cache->expired = 1;
+
+ _cache_load(cache);
+}
+
+/** starts the recurring cache_load callback */
+unsigned int
+netsnmp_cache_timer_start(netsnmp_cache *cache)
+{
+ if(NULL == cache)
+ return 0;
+
+ DEBUGMSGTL(( "cache_timer:start", "OID: "));
+ DEBUGMSGOID(("cache_timer:start", cache->rootoid, cache->rootoid_len));
+ DEBUGMSG(( "cache_timer:start", "\n"));
+
+ if(0 != cache->timer_id) {
+ snmp_log(LOG_WARNING, "cache has existing timer id.\n");
+ return cache->timer_id;
+ }
+
+ if(! (cache->flags & NETSNMP_CACHE_AUTO_RELOAD)) {
+ snmp_log(LOG_ERR,
+ "cache_timer_start called but auto_reload not set.\n");
+ return 0;
+ }
+
+ cache->timer_id = snmp_alarm_register(cache->timeout, SA_REPEAT,
+ _timer_reload, cache);
+ if(0 == cache->timer_id) {
+ snmp_log(LOG_ERR,"could not register alarm\n");
+ return 0;
+ }
+
+ cache->flags &= ~NETSNMP_CACHE_AUTO_RELOAD;
+ DEBUGMSGT(("cache_timer:start",
+ "starting timer %d for cache %p\n", cache->timer_id, cache));
+ return cache->timer_id;
+}
+
+/** stops the recurring cache_load callback */
+void
+netsnmp_cache_timer_stop(netsnmp_cache *cache)
+{
+ if(NULL == cache)
+ return;
+
+ if(0 == cache->timer_id) {
+ snmp_log(LOG_WARNING, "cache has no timer id.\n");
+ return;
+ }
+
+ DEBUGMSGT(("cache_timer:stop",
+ "stopping timer %d for cache %p\n", cache->timer_id, cache));
+
+ snmp_alarm_unregister(cache->timer_id);
+ cache->flags |= NETSNMP_CACHE_AUTO_RELOAD;
+}
+
+
+/** returns a cache handler that can be injected into a given handler chain.
+ */
+netsnmp_mib_handler *
+netsnmp_cache_handler_get(netsnmp_cache* cache)
+{
+ netsnmp_mib_handler *ret = NULL;
+
+ ret = netsnmp_create_handler("cache_handler",
+ netsnmp_cache_helper_handler);
+ if (ret) {
+ ret->flags |= MIB_HANDLER_AUTO_NEXT;
+ ret->myvoid = (void *) cache;
+
+ if(NULL != cache) {
+ if ((cache->flags & NETSNMP_CACHE_PRELOAD) && ! cache->valid) {
+ /*
+ * load cache, ignore rc
+ * (failed load doesn't affect registration)
+ */
+ (void)_cache_load(cache);
+ }
+ if (cache->flags & NETSNMP_CACHE_AUTO_RELOAD)
+ netsnmp_cache_timer_start(cache);
+
+ }
+ }
+ return ret;
+}
+
+/** returns a cache handler that can be injected into a given handler chain.
+ */
+netsnmp_mib_handler *
+netsnmp_get_cache_handler(int timeout, NetsnmpCacheLoad * load_hook,
+ NetsnmpCacheFree * free_hook,
+ oid * rootoid, int rootoid_len)
+{
+ netsnmp_mib_handler *ret = NULL;
+ netsnmp_cache *cache = NULL;
+
+ ret = netsnmp_cache_handler_get(NULL);
+ if (ret) {
+ cache = netsnmp_cache_create(timeout, load_hook, free_hook,
+ rootoid, rootoid_len);
+ ret->myvoid = (void *) cache;
+ }
+ return ret;
+}
+
+/** functionally the same as calling netsnmp_register_handler() but also
+ * injects a cache handler at the same time for you. */
+int
+netsnmp_cache_handler_register(netsnmp_handler_registration * reginfo,
+ netsnmp_cache* cache)
+{
+ netsnmp_mib_handler *handler = NULL;
+ handler = netsnmp_cache_handler_get(cache);
+
+ netsnmp_inject_handler(reginfo, handler);
+ return netsnmp_register_handler(reginfo);
+}
+
+/** functionally the same as calling netsnmp_register_handler() but also
+ * injects a cache handler at the same time for you. */
+int
+netsnmp_register_cache_handler(netsnmp_handler_registration * reginfo,
+ int timeout, NetsnmpCacheLoad * load_hook,
+ NetsnmpCacheFree * free_hook)
+{
+ netsnmp_mib_handler *handler = NULL;
+ handler = netsnmp_get_cache_handler(timeout, load_hook, free_hook,
+ reginfo->rootoid,
+ reginfo->rootoid_len);
+
+ netsnmp_inject_handler(reginfo, handler);
+ return netsnmp_register_handler(reginfo);
+}
+
+NETSNMP_STATIC_INLINE char *
+_build_cache_name(const char *name)
+{
+ char *dup = malloc(strlen(name) + strlen(CACHE_NAME) + 2);
+ if (NULL == dup)
+ return NULL;
+ sprintf(dup, "%s:%s", CACHE_NAME, name);
+ return dup;
+}
+
+/** Insert the cache information for a given request (PDU) */
+void
+netsnmp_cache_reqinfo_insert(netsnmp_cache* cache,
+ netsnmp_agent_request_info * reqinfo,
+ const char *name)
+{
+ char *cache_name = _build_cache_name(name);
+ if (NULL == netsnmp_agent_get_list_data(reqinfo, cache_name)) {
+ DEBUGMSGTL(("verbose:helper:cache_handler", " adding '%s' to %p\n",
+ cache_name, reqinfo));
+ netsnmp_agent_add_list_data(reqinfo,
+ netsnmp_create_data_list(cache_name,
+ cache, NULL));
+ }
+ SNMP_FREE(cache_name);
+}
+
+/** Extract the cache information for a given request (PDU) */
+netsnmp_cache *
+netsnmp_cache_reqinfo_extract(netsnmp_agent_request_info * reqinfo,
+ const char *name)
+{
+ netsnmp_cache *result;
+ char *cache_name = _build_cache_name(name);
+ result = netsnmp_agent_get_list_data(reqinfo, cache_name);
+ SNMP_FREE(cache_name);
+ return result;
+}
+
+/** Extract the cache information for a given request (PDU) */
+netsnmp_cache *
+netsnmp_extract_cache_info(netsnmp_agent_request_info * reqinfo)
+{
+ return netsnmp_cache_reqinfo_extract(reqinfo, CACHE_NAME);
+}
+
+
+/** Check if the cache timeout has passed. Sets and return the expired flag. */
+int
+netsnmp_cache_check_expired(netsnmp_cache *cache)
+{
+ if(NULL == cache)
+ return 0;
+
+ if(!cache->valid || (NULL == cache->timestamp) || (-1 == cache->timeout))
+ cache->expired = 1;
+ else
+ cache->expired = atime_ready(cache->timestamp, 1000 * cache->timeout);
+
+ return cache->expired;
+}
+
+/** Reload the cache if required */
+int
+netsnmp_cache_check_and_reload(netsnmp_cache * cache)
+{
+ if (!cache) {
+ DEBUGMSGT(("helper:cache_handler", " no cache\n"));
+ return 0; /* ?? or -1 */
+ }
+ if (!cache->valid || netsnmp_cache_check_expired(cache))
+ return _cache_load( cache );
+ else {
+ DEBUGMSGT(("helper:cache_handler", " cached (%d)\n",
+ cache->timeout));
+ return 0;
+ }
+}
+
+/** Is the cache valid for a given request? */
+int
+netsnmp_cache_is_valid(netsnmp_agent_request_info * reqinfo,
+ const char* name)
+{
+ netsnmp_cache *cache = netsnmp_cache_reqinfo_extract(reqinfo, name);
+ return (cache && cache->valid);
+}
+
+/** Is the cache valid for a given request?
+ * for backwards compatability. netsnmp_cache_is_valid() is preferred.
+ */
+int
+netsnmp_is_cache_valid(netsnmp_agent_request_info * reqinfo)
+{
+ return netsnmp_cache_is_valid(reqinfo, CACHE_NAME);
+}
+
+/** Implements the cache handler */
+int
+netsnmp_cache_helper_handler(netsnmp_mib_handler * handler,
+ netsnmp_handler_registration * reginfo,
+ netsnmp_agent_request_info * reqinfo,
+ netsnmp_request_info * requests)
+{
+ netsnmp_cache *cache = NULL;
+ netsnmp_handler_args cache_hint;
+
+ DEBUGMSGTL(("helper:cache_handler", "Got request (%d) for %s: ",
+ reqinfo->mode, reginfo->handlerName));
+ DEBUGMSGOID(("helper:cache_handler", reginfo->rootoid,
+ reginfo->rootoid_len));
+ DEBUGMSG(("helper:cache_handler", "\n"));
+
+ netsnmp_assert(handler->flags & MIB_HANDLER_AUTO_NEXT);
+
+ cache = (netsnmp_cache *) handler->myvoid;
+ if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_CACHING) ||
+ !cache || !cache->enabled || !cache->load_cache) {
+ DEBUGMSGT(("helper:cache_handler", " caching disabled or "
+ "cache not found, disabled or had no load method\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * Make the handler-chain parameters available to
+ * the cache_load hook routine.
+ */
+ cache_hint.handler = handler;
+ cache_hint.reginfo = reginfo;
+ cache_hint.reqinfo = reqinfo;
+ cache_hint.requests = requests;
+ cache->cache_hint = &cache_hint;
+
+ switch (reqinfo->mode) {
+
+ case MODE_GET:
+ case MODE_GETNEXT:
+ case MODE_GETBULK:
+ case MODE_SET_RESERVE1: {
+
+ /*
+ * only touch cache once per pdu request, to prevent a cache
+ * reload while a module is using cached data.
+ *
+ * XXX: this won't catch a request reloading the cache while
+ * a previous (delegated) request is still using the cache.
+ * maybe use a reference counter?
+ */
+ if (netsnmp_cache_is_valid(reqinfo, reginfo->handlerName))
+ return SNMP_ERR_NOERROR;
+
+ /*
+ * call the load hook, and update the cache timestamp.
+ * If it's not already there, add to reqinfo
+ */
+ netsnmp_cache_check_and_reload(cache);
+ netsnmp_cache_reqinfo_insert(cache, reqinfo, reginfo->handlerName);
+ /** next handler called automatically - 'AUTO_NEXT' */
+ }
+ return SNMP_ERR_NOERROR;
+
+ case MODE_SET_RESERVE2:
+ case MODE_SET_FREE:
+ case MODE_SET_ACTION:
+ case MODE_SET_UNDO:
+ netsnmp_assert(netsnmp_cache_is_valid(reqinfo, reginfo->handlerName));
+ /** next handler called automatically - 'AUTO_NEXT' */
+ return SNMP_ERR_NOERROR;
+
+ /*
+ * A (successful) SET request wouldn't typically trigger a reload of
+ * the cache, but might well invalidate the current contents.
+ * Only do this on the last pass through.
+ */
+ case MODE_SET_COMMIT:
+ if (cache->valid &&
+ ! (cache->flags & NETSNMP_CACHE_DONT_INVALIDATE_ON_SET) ) {
+ cache->free_cache(cache, cache->magic);
+ cache->valid = 0;
+ }
+ /** next handler called automatically - 'AUTO_NEXT' */
+ return SNMP_ERR_NOERROR;
+
+ default:
+ snmp_log(LOG_WARNING, "cache_handler: Unrecognised mode (%d)\n",
+ reqinfo->mode);
+ netsnmp_request_set_error_all(requests, SNMP_ERR_GENERR);
+ return SNMP_ERR_GENERR;
+ }
+ netsnmp_request_set_error_all(requests, SNMP_ERR_GENERR);
+ return SNMP_ERR_GENERR; /* should never get here */
+}
+
+static void
+_cache_free( netsnmp_cache *cache )
+{
+ if (NULL != cache->free_cache) {
+ cache->free_cache(cache, cache->magic);
+ cache->valid = 0;
+ }
+}
+
+static int
+_cache_load( netsnmp_cache *cache )
+{
+ int ret = -1;
+
+ /*
+ * If we've got a valid cache, then release it before reloading
+ */
+ if (cache->valid &&
+ (! (cache->flags & NETSNMP_CACHE_DONT_FREE_BEFORE_LOAD)))
+ _cache_free(cache);
+
+ if ( cache->load_cache)
+ ret = cache->load_cache(cache, cache->magic);
+ if (ret < 0) {
+ DEBUGMSGT(("helper:cache_handler", " load failed (%d)\n", ret));
+ cache->valid = 0;
+ return ret;
+ }
+ cache->valid = 1;
+ cache->expired = 0;
+
+ /*
+ * If we didn't previously have any valid caches outstanding,
+ * then schedule a pass of the auto-release routine.
+ */
+ if ((!cache_outstanding_valid) &&
+ (! (cache->flags & NETSNMP_CACHE_DONT_FREE_EXPIRED))) {
+ snmp_alarm_register(CACHE_RELEASE_FREQUENCY,
+ 0, release_cached_resources, NULL);
+ cache_outstanding_valid = 1;
+ }
+ if (cache->timestamp)
+ atime_setMarker(cache->timestamp);
+ else
+ cache->timestamp = atime_newMarker();
+ DEBUGMSGT(("helper:cache_handler", " loaded (%d)\n", cache->timeout));
+
+ return ret;
+}
+
+
+
+/** run regularly to automatically release cached resources.
+ * xxx - method to prevent cache from expiring while a request
+ * is being processed (e.g. delegated request). proposal:
+ * set a flag, which would be cleared when request finished
+ * (which could be acomplished by a dummy data list item in
+ * agent req info & custom free function).
+ */
+void
+release_cached_resources(unsigned int regNo, void *clientargs)
+{
+ netsnmp_cache *cache = NULL;
+
+ cache_outstanding_valid = 0;
+ DEBUGMSGTL(("helper:cache_handler", "running auto-release\n"));
+ for (cache = cache_head; cache; cache = cache->next) {
+ DEBUGMSGTL(("helper:cache_handler"," checking %p (flags 0x%x)\n",
+ cache, cache->flags));
+ if (cache->valid &&
+ ! (cache->flags & NETSNMP_CACHE_DONT_AUTO_RELEASE)) {
+ DEBUGMSGTL(("helper:cache_handler"," releasing %p\n", cache));
+ /*
+ * Check to see if this cache has timed out.
+ * If so, release the cached resources.
+ * Otherwise, note that we still have at
+ * least one active cache.
+ */
+ if (netsnmp_cache_check_expired(cache)) {
+ if(! (cache->flags & NETSNMP_CACHE_DONT_FREE_EXPIRED))
+ _cache_free(cache);
+ } else {
+ cache_outstanding_valid = 1;
+ }
+ }
+ }
+ /*
+ * If there are any caches still valid & active,
+ * then schedule another pass.
+ */
+ if (cache_outstanding_valid) {
+ snmp_alarm_register(CACHE_RELEASE_FREQUENCY,
+ 0, release_cached_resources, NULL);
+ }
+}
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/debug_handler.c b/cleopatre/application/spidnetsnmp/agent/helpers/debug_handler.c
new file mode 100644
index 0000000000..4e35695099
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/debug_handler.c
@@ -0,0 +1,160 @@
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/debug_handler.h>
+
+/** @defgroup debug debug
+ * Print out debugging information about the handler chain being called.
+ * This is a useful module for run-time
+ * debugging of requests as the pass this handler in a calling chain.
+ * All debugging output is done via the standard debugging routines
+ * with a token name of "helper:debug", so use the -Dhelper:debug
+ * command line flag to see the output when running the snmpd
+ * demon. It's not recommended you compile this into a handler chain
+ * during compile time, but instead use the "injectHandler" token in
+ * the snmpd.conf file (or similar) to add it to the chain later:
+ *
+ * injectHandler debug my_module_name
+ *
+ * to see an example output, try:
+ *
+ * injectHandler debug mibII/system
+ *
+ * and then run snmpwalk on the "system" group.
+ *
+ * @ingroup utilities
+ * @{
+ */
+
+/** returns a debug handler that can be injected into a given
+ * handler chain.
+ */
+netsnmp_mib_handler *
+netsnmp_get_debug_handler(void)
+{
+ return netsnmp_create_handler("debug", netsnmp_debug_helper);
+}
+
+/** @internal debug print variables in a chain */
+void
+debug_print_requests(netsnmp_request_info *requests)
+{
+ netsnmp_request_info *request;
+
+ for (request = requests; request; request = request->next) {
+ DEBUGMSGTL(("helper:debug", " #%2d: ", request->index));
+ DEBUGMSGVAR(("helper:debug", request->requestvb));
+ DEBUGMSG(("helper:debug", "\n"));
+
+ if (request->processed)
+ DEBUGMSGTL(("helper:debug", " [processed]\n"));
+ if (request->delegated)
+ DEBUGMSGTL(("helper:debug", " [delegated]\n"));
+ if (request->status)
+ DEBUGMSGTL(("helper:debug", " [status = %d]\n",
+ request->status));
+ if (request->parent_data) {
+ netsnmp_data_list *lst;
+ DEBUGMSGTL(("helper:debug", " [parent data ="));
+ for (lst = request->parent_data; lst; lst = lst->next) {
+ DEBUGMSG(("helper:debug", " %s", lst->name));
+ }
+ DEBUGMSG(("helper:debug", "]\n"));
+ }
+ }
+}
+
+
+/** @internal Implements the debug handler */
+int
+netsnmp_debug_helper(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ netsnmp_mib_handler *hptr;
+ int i, ret, count;
+ char *cp;
+
+ DEBUGMSGTL(("helper:debug", "Entering Debugging Helper:\n"));
+ DEBUGMSGTL(("helper:debug", " Handler Registration Info:\n"));
+ DEBUGMSGTL(("helper:debug", " Name: %s\n",
+ reginfo->handlerName));
+ DEBUGMSGTL(("helper:debug", " Context: %s\n",
+ SNMP_STRORNULL(reginfo->contextName)));
+ DEBUGMSGTL(("helper:debug", " Base OID: "));
+ DEBUGMSGOID(("helper:debug", reginfo->rootoid, reginfo->rootoid_len));
+ DEBUGMSG(("helper:debug", "\n"));
+
+ DEBUGMSGTL(("helper:debug", " Modes: 0x%x = ",
+ reginfo->modes));
+ for (count = 0, i = reginfo->modes; i; i = i >> 1, count++) {
+ if (i & 0x01) {
+ cp = se_find_label_in_slist("handler_can_mode",
+ 0x01 << count);
+ DEBUGMSG(("helper:debug", "%s | ", SNMP_STRORNULL(cp)));
+ }
+ }
+ DEBUGMSG(("helper:debug", "\n"));
+
+ DEBUGMSGTL(("helper:debug", " Priority: %d\n",
+ reginfo->priority));
+
+ DEBUGMSGTL(("helper:debug", " Handler Calling Chain:\n"));
+ DEBUGMSGTL(("helper:debug", " "));
+ for (hptr = reginfo->handler; hptr; hptr = hptr->next) {
+ DEBUGMSG(("helper:debug", " -> %s", hptr->handler_name));
+ if (hptr->myvoid)
+ DEBUGMSG(("helper:debug", " [myvoid = %x]", hptr->myvoid));
+ }
+ DEBUGMSG(("helper:debug", "\n"));
+
+ DEBUGMSGTL(("helper:debug", " Request information:\n"));
+ DEBUGMSGTL(("helper:debug", " Mode: %s (%d = 0x%x)\n",
+ se_find_label_in_slist("agent_mode", reqinfo->mode),
+ reqinfo->mode, reqinfo->mode));
+ DEBUGMSGTL(("helper:debug", " Request Variables:\n"));
+ debug_print_requests(requests);
+
+ DEBUGMSGTL(("helper:debug", " --- calling next handler --- \n"));
+ ret = netsnmp_call_next_handler(handler, reginfo, reqinfo, requests);
+
+ DEBUGMSGTL(("helper:debug", " Results:\n"));
+ DEBUGMSGTL(("helper:debug", " Returned code: %d\n", ret));
+ DEBUGMSGTL(("helper:debug", " Returned Variables:\n"));
+ debug_print_requests(requests);
+
+ DEBUGMSGTL(("helper:debug", "Exiting Debugging Helper:\n"));
+ return ret;
+}
+
+/** initializes the debug helper which then registers a debug
+ * handler as a run-time injectable handler for configuration file
+ * use.
+ */
+void
+netsnmp_init_debug_helper(void)
+{
+ netsnmp_register_handler_by_name("debug", netsnmp_get_debug_handler());
+}
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/instance.c b/cleopatre/application/spidnetsnmp/agent/helpers/instance.c
new file mode 100644
index 0000000000..5d7fd1df9e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/instance.c
@@ -0,0 +1,1029 @@
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+#include <net-snmp/net-snmp-config.h>
+
+#include <stdlib.h>
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/instance.h>
+#include <net-snmp/agent/serialize.h>
+#include <net-snmp/agent/read_only.h>
+
+typedef struct netsnmp_num_file_instance_s {
+ char *file_name;
+ FILE *filep;
+ int type;
+ int flags;
+} netsnmp_num_file_instance;
+
+/** @defgroup instance instance
+ * Process individual MIB instances easily.
+ * @ingroup leaf
+ * @{
+ */
+
+/**
+ * Creates an instance helper handler, calls netsnmp_create_handler, which
+ * then could be registered, using netsnmp_register_handler().
+ *
+ * @return Returns a pointer to a netsnmp_mib_handler struct which contains
+ * the handler's name and the access method
+ */
+netsnmp_mib_handler *
+netsnmp_get_instance_handler(void)
+{
+ return netsnmp_create_handler("instance",
+ netsnmp_instance_helper_handler);
+}
+
+/**
+ * This function registers an instance helper handler, which is a way of
+ * registering an exact OID such that GENEXT requests are handled entirely
+ * by the helper. First need to inject it into the calling chain of the
+ * handler defined by the netsnmp_handler_registration struct, reginfo.
+ * The new handler is injected at the top of the list and will be the new
+ * handler to be called first. This function also injects a serialize
+ * handler before actually calling netsnmp_register_handle, registering
+ * reginfo.
+ *
+ * @param reginfo a handler registration structure which could get created
+ * using netsnmp_create_handler_registration. Used to register
+ * an instance helper handler.
+ *
+ * @return
+ * MIB_REGISTERED_OK is returned if the registration was a success.
+ * Failures are MIB_REGISTRATION_FAILED and MIB_DUPLICATE_REGISTRATION.
+ */
+int
+netsnmp_register_instance(netsnmp_handler_registration *reginfo)
+{
+ netsnmp_mib_handler *handler = netsnmp_get_instance_handler();
+ handler->flags |= MIB_HANDLER_INSTANCE;
+ netsnmp_inject_handler(reginfo, handler);
+ return netsnmp_register_serialize(reginfo);
+}
+
+/**
+ * This function injects a "read only" handler into the handler chain
+ * prior to serializing/registering the handler.
+ *
+ * The only purpose of this "read only" handler is to return an
+ * appropriate error for any requests passed to it in a SET mode.
+ * Inserting it into your handler chain will ensure you're never
+ * asked to perform a SET request so you can ignore those error
+ * conditions.
+ *
+ * @param reginfo a handler registration structure which could get created
+ * using netsnmp_create_handler_registration. Used to register
+ * a read only instance helper handler.
+ *
+ * @return
+ * MIB_REGISTERED_OK is returned if the registration was a success.
+ * Failures are MIB_REGISTRATION_FAILED and MIB_DUPLICATE_REGISTRATION.
+ */
+int
+netsnmp_register_read_only_instance(netsnmp_handler_registration *reginfo)
+{
+ netsnmp_inject_handler(reginfo, netsnmp_get_instance_handler());
+ netsnmp_inject_handler(reginfo, netsnmp_get_read_only_handler());
+ return netsnmp_register_serialize(reginfo);
+}
+
+static
+netsnmp_handler_registration *
+get_reg(const char *name,
+ const char *ourname,
+ oid * reg_oid, size_t reg_oid_len,
+ void *it,
+ int modes,
+ Netsnmp_Node_Handler * scalarh, Netsnmp_Node_Handler * subhandler,
+ const char *contextName)
+{
+ netsnmp_handler_registration *myreg;
+ netsnmp_mib_handler *myhandler;
+
+ if (subhandler) {
+ myreg =
+ netsnmp_create_handler_registration(name,
+ subhandler,
+ reg_oid, reg_oid_len,
+ modes);
+ myhandler = netsnmp_create_handler(ourname, scalarh);
+ myhandler->myvoid = (void *) it;
+ netsnmp_inject_handler(myreg, myhandler);
+ } else {
+ myreg =
+ netsnmp_create_handler_registration(name,
+ scalarh,
+ reg_oid, reg_oid_len,
+ modes);
+ myreg->handler->myvoid = (void *) it;
+ }
+ if (contextName)
+ myreg->contextName = strdup(contextName);
+ return myreg;
+}
+
+int
+netsnmp_register_read_only_ulong_instance(const char *name,
+ oid * reg_oid,
+ size_t reg_oid_len, u_long * it,
+ Netsnmp_Node_Handler *
+ subhandler)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "ulong_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RONLY, netsnmp_instance_ulong_handler,
+ subhandler, NULL);
+ return netsnmp_register_read_only_instance(myreg);
+}
+
+int
+netsnmp_register_ulong_instance(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ u_long * it,
+ Netsnmp_Node_Handler * subhandler)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "ulong_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RWRITE, netsnmp_instance_ulong_handler,
+ subhandler, NULL);
+ return netsnmp_register_instance(myreg);
+}
+
+int
+netsnmp_register_read_only_counter32_instance(const char *name,
+ oid * reg_oid,
+ size_t reg_oid_len,
+ u_long * it,
+ Netsnmp_Node_Handler *
+ subhandler)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "counter32_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RONLY, netsnmp_instance_counter32_handler,
+ subhandler, NULL);
+ return netsnmp_register_read_only_instance(myreg);
+}
+
+int
+netsnmp_register_read_only_long_instance(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ long *it,
+ Netsnmp_Node_Handler * subhandler)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "long_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RONLY, netsnmp_instance_long_handler,
+ subhandler, NULL);
+ return netsnmp_register_read_only_instance(myreg);
+}
+
+int
+netsnmp_register_long_instance(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ long *it, Netsnmp_Node_Handler * subhandler)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "long_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RWRITE, netsnmp_instance_long_handler,
+ subhandler, NULL);
+ return netsnmp_register_instance(myreg);
+}
+
+
+int
+netsnmp_register_read_only_uint_instance(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ unsigned int *it,
+ Netsnmp_Node_Handler * subhandler)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "uint_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RONLY, netsnmp_instance_uint_handler,
+ subhandler, NULL);
+ return netsnmp_register_read_only_instance(myreg);
+}
+
+int
+netsnmp_register_uint_instance(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ unsigned int *it, Netsnmp_Node_Handler * subhandler)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "uint_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RWRITE, netsnmp_instance_uint_handler,
+ subhandler, NULL);
+ return netsnmp_register_instance(myreg);
+}
+
+int
+netsnmp_register_read_only_int_instance(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ int *it, Netsnmp_Node_Handler * subhandler)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "int_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RONLY, netsnmp_instance_int_handler,
+ subhandler, NULL);
+ return netsnmp_register_read_only_instance(myreg);
+}
+
+ /*
+ * Compatibility with earlier (inconsistently named) routine
+ */
+int
+register_read_only_int_instance(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ int *it, Netsnmp_Node_Handler * subhandler)
+{
+ return netsnmp_register_read_only_int_instance(name,
+ reg_oid, reg_oid_len,
+ it, subhandler);
+}
+
+/*
+ * Context registrations
+ */
+
+int
+netsnmp_register_read_only_ulong_instance_context(const char *name,
+ oid * reg_oid,
+ size_t reg_oid_len,
+ u_long * it,
+ Netsnmp_Node_Handler *
+ subhandler,
+ const char *contextName)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "ulong_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RONLY, netsnmp_instance_ulong_handler,
+ subhandler, contextName);
+ return netsnmp_register_read_only_instance(myreg);
+}
+
+int
+netsnmp_register_ulong_instance_context(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ u_long * it,
+ Netsnmp_Node_Handler * subhandler,
+ const char *contextName)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "ulong_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RWRITE, netsnmp_instance_ulong_handler,
+ subhandler, contextName);
+ return netsnmp_register_instance(myreg);
+}
+
+int
+netsnmp_register_read_only_counter32_instance_context(const char *name,
+ oid * reg_oid,
+ size_t reg_oid_len,
+ u_long * it,
+ Netsnmp_Node_Handler *
+ subhandler,
+ const char *contextName)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "counter32_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RONLY, netsnmp_instance_counter32_handler,
+ subhandler, contextName);
+ return netsnmp_register_read_only_instance(myreg);
+}
+
+int
+netsnmp_register_read_only_long_instance_context(const char *name,
+ oid * reg_oid,
+ size_t reg_oid_len,
+ long *it,
+ Netsnmp_Node_Handler
+ *subhandler,
+ const char *contextName)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "long_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RONLY, netsnmp_instance_long_handler,
+ subhandler, contextName);
+ return netsnmp_register_read_only_instance(myreg);
+}
+
+int
+netsnmp_register_long_instance_context(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ long *it,
+ Netsnmp_Node_Handler * subhandler,
+ const char *contextName)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "long_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RWRITE, netsnmp_instance_long_handler,
+ subhandler, contextName);
+ return netsnmp_register_instance(myreg);
+}
+
+int
+netsnmp_register_int_instance_context(const char *name,
+ oid * reg_oid,
+ size_t reg_oid_len,
+ int *it,
+ Netsnmp_Node_Handler * subhandler,
+ const char *contextName)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "int_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RWRITE, netsnmp_instance_int_handler,
+ subhandler, contextName);
+ return netsnmp_register_instance(myreg);
+}
+
+int
+netsnmp_register_read_only_int_instance_context(const char *name,
+ oid * reg_oid,
+ size_t reg_oid_len,
+ int *it,
+ Netsnmp_Node_Handler * subhandler,
+ const char *contextName)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "int_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RONLY, netsnmp_instance_int_handler,
+ subhandler, contextName);
+ return netsnmp_register_read_only_instance(myreg);
+}
+
+/*
+ * Compatibility with earlier (inconsistently named) routine
+ */
+int
+register_read_only_int_instance_context(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ int *it,
+ Netsnmp_Node_Handler * subhandler,
+ const char *contextName)
+{
+ return netsnmp_register_read_only_int_instance_context(name,
+ reg_oid, reg_oid_len,
+ it, subhandler,
+ contextName);
+}
+
+int
+netsnmp_register_num_file_instance(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ char *file_name, int asn_type, int mode,
+ Netsnmp_Node_Handler * subhandler,
+ const char *contextName)
+{
+ netsnmp_handler_registration *myreg;
+ netsnmp_num_file_instance *nfi;
+
+ if ((NULL == name) || (NULL == reg_oid) || (NULL == file_name)) {
+ snmp_log(LOG_ERR, "bad parameter to netsnmp_register_num_file_instance\n");
+ return MIB_REGISTRATION_FAILED;
+ }
+
+ nfi = SNMP_MALLOC_TYPEDEF(netsnmp_num_file_instance);
+ if ((NULL == nfi) ||
+ (NULL == (nfi->file_name = strdup(file_name)))) {
+ snmp_log(LOG_ERR, "could not not allocate memory\n");
+ if (NULL != nfi)
+ free(nfi); /* SNMP_FREE overkill on local var */
+ return MIB_REGISTRATION_FAILED;
+ }
+
+ myreg = get_reg(name, "file_num_handler", reg_oid, reg_oid_len, nfi,
+ mode, netsnmp_instance_num_file_handler,
+ subhandler, contextName);
+ if (NULL == myreg) {
+ free(nfi); /* SNMP_FREE overkill on local var */
+ return MIB_REGISTRATION_FAILED;
+ }
+
+ nfi->type = asn_type;
+
+ if (HANDLER_CAN_RONLY == mode)
+ return netsnmp_register_read_only_instance(myreg);
+
+ return netsnmp_register_instance(myreg);
+}
+
+/**
+ * This function registers an int helper handler to a specified OID.
+ *
+ * @param name the name used for registration pruposes.
+ *
+ * @param reg_oid the OID where you want to register your integer at
+ *
+ * @param reg_oid_len the length of the OID
+ *
+ * @param it the integer value to be registered during initialization
+ *
+ * @param subhandler a handler to do whatever you want to do, otherwise use
+ * NULL to use the default int handler.
+ *
+ * @return
+ * MIB_REGISTERED_OK is returned if the registration was a success.
+ * Failures are MIB_REGISTRATION_FAILED and MIB_DUPLICATE_REGISTRATION.
+ */
+int
+netsnmp_register_int_instance(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ int *it, Netsnmp_Node_Handler * subhandler)
+{
+ netsnmp_handler_registration *myreg;
+
+ myreg = get_reg(name, "int_handler", reg_oid, reg_oid_len, it,
+ HANDLER_CAN_RWRITE, netsnmp_instance_int_handler,
+ subhandler, NULL);
+ return netsnmp_register_instance(myreg);
+}
+
+int
+netsnmp_instance_ulong_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ u_long *it = (u_long *) handler->myvoid;
+ u_long *it_save;
+
+ DEBUGMSGTL(("netsnmp_instance_ulong_handler", "Got request: %d\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * data requests
+ */
+ case MODE_GET:
+ snmp_set_var_typed_value(requests->requestvb, ASN_UNSIGNED,
+ (u_char *) it, sizeof(*it));
+ break;
+
+ /*
+ * SET requests. Should only get here if registered RWRITE
+ */
+ case MODE_SET_RESERVE1:
+ if (requests->requestvb->type != ASN_UNSIGNED)
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_WRONGTYPE);
+ break;
+
+ case MODE_SET_RESERVE2:
+ /*
+ * store old info for undo later
+ */
+ memdup((u_char **) & it_save, (u_char *) it, sizeof(u_long));
+ if (it_save == NULL) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+ netsnmp_request_add_list_data(requests,
+ netsnmp_create_data_list
+ (INSTANCE_HANDLER_NAME, it_save,
+ free));
+ break;
+
+ case MODE_SET_ACTION:
+ /*
+ * update current
+ */
+ DEBUGMSGTL(("testhandler", "updated u_long %ul -> %ul\n", *it,
+ *(requests->requestvb->val.integer)));
+ *it = *(requests->requestvb->val.integer);
+ break;
+
+ case MODE_SET_UNDO:
+ *it =
+ *((u_long *) netsnmp_request_get_list_data(requests,
+ INSTANCE_HANDLER_NAME));
+ break;
+
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ /*
+ * nothing to do
+ */
+ break;
+ }
+
+ if (handler->next && handler->next->access_method)
+ return netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+netsnmp_instance_counter32_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ u_long *it = (u_long *) handler->myvoid;
+
+ DEBUGMSGTL(("netsnmp_instance_counter32_handler",
+ "Got request: %d\n", reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * data requests
+ */
+ case MODE_GET:
+ snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER,
+ (u_char *) it, sizeof(*it));
+ break;
+
+ /*
+ * SET requests. Should only get here if registered RWRITE
+ */
+ default:
+ snmp_log(LOG_ERR,
+ "netsnmp_instance_counter32_handler: illegal mode\n");
+ netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_GENERR);
+ return SNMP_ERR_NOERROR;
+ }
+ if (handler->next && handler->next->access_method)
+ return netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ return SNMP_ERR_NOERROR;
+}
+
+int
+netsnmp_instance_long_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ long *it = (long *) handler->myvoid;
+ long *it_save;
+
+ DEBUGMSGTL(("netsnmp_instance_long_handler", "Got request: %d\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * data requests
+ */
+ case MODE_GET:
+ snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+ (u_char *) it, sizeof(*it));
+ break;
+
+ /*
+ * SET requests. Should only get here if registered RWRITE
+ */
+ case MODE_SET_RESERVE1:
+ if (requests->requestvb->type != ASN_INTEGER)
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_WRONGTYPE);
+ break;
+
+ case MODE_SET_RESERVE2:
+ /*
+ * store old info for undo later
+ */
+ memdup((u_char **) & it_save, (u_char *) it, sizeof(long));
+ if (it_save == NULL) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+ netsnmp_request_add_list_data(requests,
+ netsnmp_create_data_list
+ (INSTANCE_HANDLER_NAME, it_save,
+ free));
+ break;
+
+ case MODE_SET_ACTION:
+ /*
+ * update current
+ */
+ DEBUGMSGTL(("testhandler", "updated u_long %ul -> %ul\n", *it,
+ *(requests->requestvb->val.integer)));
+ *it = *(requests->requestvb->val.integer);
+ break;
+
+ case MODE_SET_UNDO:
+ *it =
+ *((u_long *) netsnmp_request_get_list_data(requests,
+ INSTANCE_HANDLER_NAME));
+ break;
+
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ /*
+ * nothing to do
+ */
+ break;
+ }
+ if (handler->next && handler->next->access_method)
+ return netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ return SNMP_ERR_NOERROR;
+}
+
+int
+netsnmp_instance_int_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ int *it = (int *) handler->myvoid;
+ int *it_save;
+ long tmp_it;
+
+ DEBUGMSGTL(("netsnmp_instance_int_handler", "Got request: %d\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * data requests
+ */
+ case MODE_GET:
+ /*
+ * Use a long here, otherwise on 64 bit use of an int would fail
+ */
+ tmp_it = *it;
+ snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+ (u_char *) &tmp_it, sizeof(tmp_it));
+ break;
+
+ /*
+ * SET requests. Should only get here if registered RWRITE
+ */
+ case MODE_SET_RESERVE1:
+ if (requests->requestvb->type != ASN_INTEGER)
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_WRONGTYPE);
+ break;
+
+ case MODE_SET_RESERVE2:
+ /*
+ * store old info for undo later
+ */
+ memdup((u_char **) & it_save, (u_char *) it, sizeof(int));
+ if (it_save == NULL) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+ netsnmp_request_add_list_data(requests,
+ netsnmp_create_data_list
+ (INSTANCE_HANDLER_NAME, it_save,
+ free));
+ break;
+
+ case MODE_SET_ACTION:
+ /*
+ * update current
+ */
+ DEBUGMSGTL(("testhandler", "updated int %d -> %ld\n", *it,
+ *(requests->requestvb->val.integer)));
+ *it = (int) *(requests->requestvb->val.integer);
+ break;
+
+ case MODE_SET_UNDO:
+ *it =
+ *((u_int *) netsnmp_request_get_list_data(requests,
+ INSTANCE_HANDLER_NAME));
+ break;
+
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ /*
+ * nothing to do
+ */
+ break;
+ }
+ if (handler->next && handler->next->access_method)
+ return netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ return SNMP_ERR_NOERROR;
+}
+
+int
+netsnmp_instance_num_file_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_num_file_instance *nfi;
+ u_long it, *it_save;
+ int rc;
+
+ netsnmp_assert(NULL != handler);
+ nfi = (netsnmp_num_file_instance *)handler->myvoid;
+ netsnmp_assert(NULL != nfi);
+ netsnmp_assert(NULL != nfi->file_name);
+
+ DEBUGMSGTL(("netsnmp_instance_int_handler", "Got request: %d\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * data requests
+ */
+ case MODE_GET:
+ /*
+ * Use a long here, otherwise on 64 bit use of an int would fail
+ */
+ netsnmp_assert(NULL == nfi->filep);
+ nfi->filep = fopen(nfi->file_name, "r");
+ if (NULL == nfi->filep) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_NOSUCHINSTANCE);
+ return SNMP_ERR_NOERROR;
+ }
+ rc = fscanf(nfi->filep, (nfi->type == ASN_INTEGER) ? "%ld" : "%lu",
+ &it);
+ fclose(nfi->filep);
+ nfi->filep = NULL;
+ if (rc != 1) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_NOSUCHINSTANCE);
+ return SNMP_ERR_NOERROR;
+ }
+ snmp_set_var_typed_value(requests->requestvb, nfi->type,
+ (u_char *) &it, sizeof(it));
+ break;
+
+ /*
+ * SET requests. Should only get here if registered RWRITE
+ */
+ case MODE_SET_RESERVE1:
+ netsnmp_assert(NULL == nfi->filep);
+ if (requests->requestvb->type != nfi->type)
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_WRONGTYPE);
+ break;
+
+ case MODE_SET_RESERVE2:
+ netsnmp_assert(NULL == nfi->filep);
+ nfi->filep = fopen(nfi->file_name, "w+");
+ if (NULL == nfi->filep) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_NOTWRITABLE);
+ return SNMP_ERR_NOERROR;
+ }
+ /*
+ * store old info for undo later
+ */
+ if (fscanf(nfi->filep, (nfi->type == ASN_INTEGER) ? "%ld" : "%lu",
+ &it) != 1) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ memdup((u_char **) & it_save, (u_char *)&it, sizeof(u_long));
+ if (it_save == NULL) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+ netsnmp_request_add_list_data(requests,
+ netsnmp_create_data_list
+ (INSTANCE_HANDLER_NAME, it_save,
+ free));
+ break;
+
+ case MODE_SET_ACTION:
+ /*
+ * update current
+ */
+ DEBUGMSGTL(("helper:instance", "updated %s -> %ld\n", nfi->file_name,
+ *(requests->requestvb->val.integer)));
+ it = *(requests->requestvb->val.integer);
+ rewind(nfi->filep); /* rewind to make sure we are at the beginning */
+ rc = fprintf(nfi->filep, (nfi->type == ASN_INTEGER) ? "%ld" : "%lu",
+ it);
+ if (rc < 0) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_GENERR);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+
+ case MODE_SET_UNDO:
+ it =
+ *((u_int *) netsnmp_request_get_list_data(requests,
+ INSTANCE_HANDLER_NAME));
+ rc = fprintf(nfi->filep, (nfi->type == ASN_INTEGER) ? "%ld" : "%lu",
+ it);
+ if (rc < 0)
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ /** fall through */
+
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ if (NULL != nfi->filep) {
+ fclose(nfi->filep);
+ nfi->filep = NULL;
+ }
+ break;
+ }
+
+ if (handler->next && handler->next->access_method)
+ return netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ return SNMP_ERR_NOERROR;
+}
+
+int
+netsnmp_instance_uint_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ unsigned int *it = (unsigned int *) handler->myvoid;
+ unsigned int *it_save;
+ unsigned long tmp_it;
+
+ DEBUGMSGTL(("netsnmp_instance_uint_handler", "Got request: %d\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * data requests
+ */
+ case MODE_GET:
+ /*
+ * Use a long here, otherwise on 64 bit use of an int would fail
+ */
+ tmp_it = *it;
+ snmp_set_var_typed_value(requests->requestvb, ASN_UNSIGNED,
+ (u_char *) &tmp_it, sizeof(unsigned long));
+ break;
+
+ /*
+ * SET requests. Should only get here if registered RWRITE
+ */
+ case MODE_SET_RESERVE1:
+ if (requests->requestvb->type != ASN_UNSIGNED)
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_WRONGTYPE);
+ break;
+
+ case MODE_SET_RESERVE2:
+ /*
+ * store old info for undo later
+ */
+ memdup((u_char **) & it_save, (u_char *) it, sizeof(u_int));
+ if (it_save == NULL) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+ netsnmp_request_add_list_data(requests,
+ netsnmp_create_data_list
+ (INSTANCE_HANDLER_NAME, it_save,
+ free));
+ break;
+
+ case MODE_SET_ACTION:
+ /*
+ * update current
+ */
+ DEBUGMSGTL(("testhandler", "updated uint %d -> %ld\n", *it,
+ *(requests->requestvb->val.integer)));
+ *it = (unsigned int) *(requests->requestvb->val.integer);
+ break;
+
+ case MODE_SET_UNDO:
+ *it =
+ *((u_int *) netsnmp_request_get_list_data(requests,
+ INSTANCE_HANDLER_NAME));
+ break;
+
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ /*
+ * nothing to do
+ */
+ break;
+ }
+ if (handler->next && handler->next->access_method)
+ return netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ return SNMP_ERR_NOERROR;
+}
+
+int
+netsnmp_instance_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ netsnmp_variable_list *var = requests->requestvb;
+
+ int ret, cmp;
+
+ DEBUGMSGTL(("helper:instance", "Got request:\n"));
+ cmp = snmp_oid_compare(requests->requestvb->name,
+ requests->requestvb->name_length,
+ reginfo->rootoid, reginfo->rootoid_len);
+
+ DEBUGMSGTL(("helper:instance", " oid:"));
+ DEBUGMSGOID(("helper:instance", var->name, var->name_length));
+ DEBUGMSG(("helper:instance", "\n"));
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ if (cmp != 0) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_NOSUCHINSTANCE);
+ return SNMP_ERR_NOERROR;
+ } else {
+ return netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ }
+ break;
+
+ case MODE_SET_RESERVE1:
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_UNDO:
+ case MODE_SET_FREE:
+ if (cmp != 0) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_NOCREATION);
+ return SNMP_ERR_NOERROR;
+ } else {
+ return netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ }
+ break;
+
+ case MODE_GETNEXT:
+ if (cmp < 0 || (cmp == 0 && requests->inclusive)) {
+ reqinfo->mode = MODE_GET;
+ snmp_set_var_objid(requests->requestvb, reginfo->rootoid,
+ reginfo->rootoid_len);
+ ret =
+ netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ reqinfo->mode = MODE_GETNEXT;
+ /*
+ * if the instance doesn't have data, set type to ASN_NULL
+ * to move to the next sub-tree. Ignore delegated requests; they
+ * might have data later on.
+ */
+ if (!requests->delegated &&
+ (requests->requestvb->type == SNMP_NOSUCHINSTANCE ||
+ requests->requestvb->type == SNMP_NOSUCHOBJECT)) {
+ requests->requestvb->type = ASN_NULL;
+ }
+ return ret;
+ } else {
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ }
+ /*
+ * got here only if illegal mode found
+ */
+ return SNMP_ERR_GENERR;
+}
+
+/** @}
+ */
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/mode_end_call.c b/cleopatre/application/spidnetsnmp/agent/helpers/mode_end_call.c
new file mode 100644
index 0000000000..912f58c61d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/mode_end_call.c
@@ -0,0 +1,117 @@
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+#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/agent/mode_end_call.h>
+
+/** @defgroup mode_end_call mode_end_call
+ * At the end of a series of requests, call another handler hook.
+ * Handlers that want to loop through a series of requests and then
+ * receive a callback at the end of a particular MODE can use this
+ * helper to make this possible. For most modules, this is not
+ * needed as the handler itself could perform a for() loop around the
+ * request list and then perform its actions afterwards. However, if
+ * something like the serialize helper is in use this isn't possible
+ * because not all the requests for a given handler are being passed
+ * downward in a single group. Thus, this helper *must* be added
+ * above other helpers like the serialize helper to be useful.
+ *
+ * Multiple mode specific handlers can be registered and will be
+ * called in the order they were regestered in. Callbacks regesterd
+ * with a mode of NETSNMP_MODE_END_ALL_MODES will be called for all
+ * modes.
+ *
+ * @ingroup utilities
+ * @{
+ */
+
+/** returns a mode_end_call handler that can be injected into a given
+ * handler chain.
+ * @param endlist The callback list for the handler to make use of.
+ * @return An injectable Net-SNMP handler.
+ */
+netsnmp_mib_handler *
+netsnmp_get_mode_end_call_handler(netsnmp_mode_handler_list *endlist)
+{
+ netsnmp_mib_handler *me =
+ netsnmp_create_handler("mode_end_call",
+ netsnmp_mode_end_call_helper);
+
+ if (!me)
+ return NULL;
+
+ me->myvoid = endlist;
+ return me;
+}
+
+/** adds a mode specific callback to the callback list.
+ * @param endlist the information structure for the mode_end_call helper. Can be NULL to create a new list.
+ * @param mode the mode to be called upon. A mode of NETSNMP_MODE_END_ALL_MODES = all modes.
+ * @param callbackh the netsnmp_mib_handler callback to call.
+ * @return the new registration information list upon success.
+ */
+netsnmp_mode_handler_list *
+netsnmp_mode_end_call_add_mode_callback(netsnmp_mode_handler_list *endlist,
+ int mode,
+ netsnmp_mib_handler *callbackh) {
+ netsnmp_mode_handler_list *ptr, *ptr2;
+ ptr = SNMP_MALLOC_TYPEDEF(netsnmp_mode_handler_list);
+ if (!ptr)
+ return NULL;
+
+ ptr->mode = mode;
+ ptr->callback_handler = callbackh;
+ ptr->next = NULL;
+
+ if (!endlist)
+ return ptr;
+
+ /* get to end */
+ for(ptr2 = endlist; ptr2->next != NULL; ptr2 = ptr2->next);
+
+ ptr2->next = ptr;
+ return endlist;
+}
+
+/** @internal Implements the mode_end_call handler */
+int
+netsnmp_mode_end_call_helper(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ int ret;
+ int ret2 = SNMP_ERR_NOERROR;
+ netsnmp_mode_handler_list *ptr;
+
+ /* always call the real handlers first */
+ ret = netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+
+ /* then call the callback handlers */
+ for(ptr = handler->myvoid; ptr; ptr = ptr->next) {
+ if (ptr->mode == NETSNMP_MODE_END_ALL_MODES ||
+ reqinfo->mode == ptr->mode) {
+ ret2 = netsnmp_call_handler(ptr->callback_handler, reginfo,
+ reqinfo, requests);
+ if (ret != SNMP_ERR_NOERROR)
+ ret = ret2;
+ }
+ }
+
+ return ret2;
+}
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/multiplexer.c b/cleopatre/application/spidnetsnmp/agent/helpers/multiplexer.c
new file mode 100644
index 0000000000..e543f57bd8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/multiplexer.c
@@ -0,0 +1,117 @@
+#include <net-snmp/net-snmp-config.h>
+
+#include <sys/types.h>
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/multiplexer.h>
+
+/** @defgroup multiplexer multiplexer
+ * Splits mode requests into calls to different handlers.
+ * @ingroup utilities
+ * The multiplexer helper lets you split the calling chain depending
+ * on the calling mode (get vs getnext vs set). Useful if you want
+ * different routines to handle different aspects of SNMP requests,
+ * which is very common for GET vs SET type actions.
+ *
+ * Functionally:
+ *
+ * -# GET requests call the get_method
+ * -# GETNEXT requests call the getnext_method, or if not present, the
+ * get_method.
+ * -# GETBULK requests call the getbulk_method, or if not present, the
+ * getnext_method, or if even that isn't present the get_method.
+ * -# SET requests call the set_method, or if not present return a
+ * SNMP_ERR_NOTWRITABLE error.
+ * @{
+ */
+
+/** returns a multiplixer handler given a netsnmp_mib_handler_methods structure of subhandlers.
+ */
+netsnmp_mib_handler *
+netsnmp_get_multiplexer_handler(netsnmp_mib_handler_methods *req)
+{
+ netsnmp_mib_handler *ret = NULL;
+
+ if (!req) {
+ snmp_log(LOG_INFO,
+ "netsnmp_get_multiplexer_handler(NULL) called\n");
+ return NULL;
+ }
+
+ ret =
+ netsnmp_create_handler("multiplexer",
+ netsnmp_multiplexer_helper_handler);
+ if (ret) {
+ ret->myvoid = (void *) req;
+ }
+ return ret;
+}
+
+/** implements the multiplexer helper */
+int
+netsnmp_multiplexer_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ netsnmp_mib_handler_methods *methods;
+
+ if (!handler->myvoid) {
+ snmp_log(LOG_INFO, "improperly registered multiplexer found\n");
+ return SNMP_ERR_GENERR;
+ }
+
+ methods = (netsnmp_mib_handler_methods *) handler->myvoid;
+
+ switch (reqinfo->mode) {
+ case MODE_GETBULK:
+ handler = methods->getbulk_handler;
+ if (handler)
+ break;
+ /* Deliberate fallthrough to use GetNext handler */
+ case MODE_GETNEXT:
+ handler = methods->getnext_handler;
+ if (handler)
+ break;
+ /* Deliberate fallthrough to use Get handler */
+ case MODE_GET:
+ handler = methods->get_handler;
+ if (!handler) {
+ netsnmp_request_set_error_all(requests, SNMP_NOSUCHOBJECT);
+ }
+ break;
+
+ case MODE_SET_RESERVE1:
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ handler = methods->set_handler;
+ if (!handler) {
+ netsnmp_request_set_error_all(requests, SNMP_ERR_NOTWRITABLE);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+
+ /*
+ * XXX: process SETs specially, and possibly others
+ */
+ default:
+ snmp_log(LOG_ERR, "unsupported mode for multiplexer: %d\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+ if (!handler) {
+ snmp_log(LOG_ERR,
+ "No handler enabled for mode %d in multiplexer\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+ return netsnmp_call_handler(handler, reginfo, reqinfo, requests);
+}
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/null.c b/cleopatre/application/spidnetsnmp/agent/helpers/null.c
new file mode 100644
index 0000000000..d110eb8711
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/null.c
@@ -0,0 +1,63 @@
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/null.h>
+
+int
+netsnmp_register_null(oid * loc, size_t loc_len)
+{
+ return netsnmp_register_null_context(loc, loc_len, NULL);
+}
+
+int
+netsnmp_register_null_context(oid * loc, size_t loc_len,
+ const char *contextName)
+{
+ netsnmp_handler_registration *reginfo;
+ reginfo = SNMP_MALLOC_TYPEDEF(netsnmp_handler_registration);
+ reginfo->handlerName = strdup("");
+ reginfo->rootoid = loc;
+ reginfo->rootoid_len = loc_len;
+ reginfo->handler =
+ netsnmp_create_handler("null", netsnmp_null_handler);
+ if (contextName)
+ reginfo->contextName = strdup(contextName);
+ reginfo->modes = HANDLER_CAN_DEFAULT;
+ return netsnmp_register_handler(reginfo);
+}
+
+int
+netsnmp_null_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ DEBUGMSGTL(("helper:null", "Got request\n"));
+
+ DEBUGMSGTL(("helper:null", " oid:"));
+ DEBUGMSGOID(("helper:null", requests->requestvb->name,
+ requests->requestvb->name_length));
+ DEBUGMSG(("helper:null", "\n"));
+
+ switch (reqinfo->mode) {
+ case MODE_GETNEXT:
+ case MODE_GETBULK:
+ return SNMP_ERR_NOERROR;
+
+ case MODE_GET:
+ netsnmp_request_set_error_all(requests, SNMP_NOSUCHOBJECT);
+ return SNMP_ERR_NOERROR;
+
+ default:
+ netsnmp_request_set_error_all(requests, SNMP_ERR_NOSUCHNAME);
+ return SNMP_ERR_NOERROR;
+ }
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/old_api.c b/cleopatre/application/spidnetsnmp/agent/helpers/old_api.c
new file mode 100644
index 0000000000..cc258f93da
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/old_api.c
@@ -0,0 +1,418 @@
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/old_api.h>
+#include <net-snmp/agent/agent_callbacks.h>
+
+#define MIB_CLIENTS_ARE_EVIL 1
+
+/*
+ * don't use these!
+ */
+void set_current_agent_session(netsnmp_agent_session *asp);
+netsnmp_agent_session *netsnmp_get_current_agent_session(void);
+
+/** @defgroup old_api old_api
+ * Calls mib module code written in the old style of code.
+ * @ingroup handler
+ * This is a backwards compatilibity module that allows code written
+ * in the old API to be run under the new handler based architecture.
+ * Use it by calling netsnmp_register_old_api().
+ * @{
+ */
+
+/** returns a old_api handler that should be the final calling
+ * handler. Don't use this function. Use the netsnmp_register_old_api()
+ * function instead.
+ */
+netsnmp_mib_handler *
+get_old_api_handler(void)
+{
+ return netsnmp_create_handler("old_api", netsnmp_old_api_helper);
+}
+
+
+/** Registers an old API set into the mib tree. Functionally this
+ * mimics the old register_mib_context() function (and in fact the new
+ * register_mib_context() function merely calls this new old_api one).
+ */
+int
+netsnmp_register_old_api(const char *moduleName,
+ struct variable *var,
+ size_t varsize,
+ size_t numvars,
+ oid * mibloc,
+ size_t mibloclen,
+ int priority,
+ int range_subid,
+ oid range_ubound,
+ netsnmp_session * ss,
+ const char *context, int timeout, int flags)
+{
+
+ unsigned int i;
+
+ /*
+ * register all subtree nodes
+ */
+ for (i = 0; i < numvars; i++) {
+ struct variable *vp;
+ netsnmp_handler_registration *reginfo =
+ SNMP_MALLOC_TYPEDEF(netsnmp_handler_registration);
+
+ memdup((void *) &vp,
+ (void *) (struct variable *) ((char *) var + varsize * i),
+ varsize);
+
+ reginfo->handler = get_old_api_handler();
+ reginfo->handlerName = strdup(moduleName);
+ reginfo->rootoid_len = (mibloclen + vp->namelen);
+ reginfo->rootoid =
+ (oid *) malloc(reginfo->rootoid_len * sizeof(oid));
+
+ memcpy(reginfo->rootoid, mibloc, mibloclen * sizeof(oid));
+ memcpy(reginfo->rootoid + mibloclen, vp->name, vp->namelen
+ * sizeof(oid));
+ reginfo->handler->myvoid = (void *) vp;
+
+ reginfo->priority = priority;
+ reginfo->range_subid = range_subid;
+
+ reginfo->range_ubound = range_ubound;
+ reginfo->timeout = timeout;
+ reginfo->contextName = (context) ? strdup(context) : NULL;
+ reginfo->modes = HANDLER_CAN_RWRITE;
+
+ /*
+ * register ourselves in the mib tree
+ */
+ if (netsnmp_register_handler(reginfo) != MIB_REGISTERED_OK) {
+ /** netsnmp_handler_registration_free(reginfo); already freed */
+ SNMP_FREE(vp);
+ }
+ }
+ return SNMPERR_SUCCESS;
+}
+
+/** registers a row within a mib table */
+int
+netsnmp_register_mib_table_row(const char *moduleName,
+ struct variable *var,
+ size_t varsize,
+ size_t numvars,
+ oid * mibloc,
+ size_t mibloclen,
+ int priority,
+ int var_subid,
+ netsnmp_session * ss,
+ const char *context, int timeout, int flags)
+{
+ unsigned int i = 0, rc = 0;
+ oid ubound = 0;
+
+ for (i = 0; i < numvars; i++) {
+ struct variable *vr =
+ (struct variable *) ((char *) var + (i * varsize));
+ netsnmp_handler_registration *r;
+ if ( var_subid > (int)mibloclen ) {
+ break; /* doesn't make sense */
+ }
+ r = SNMP_MALLOC_TYPEDEF(netsnmp_handler_registration);
+
+ if (r == NULL) {
+ /*
+ * Unregister whatever we have registered so far, and
+ * return an error.
+ */
+ rc = MIB_REGISTRATION_FAILED;
+ break;
+ }
+ memset(r, 0, sizeof(netsnmp_handler_registration));
+
+ r->handler = get_old_api_handler();
+ r->handlerName = strdup(moduleName);
+
+ if (r->handlerName == NULL) {
+ netsnmp_handler_registration_free(r);
+ break;
+ }
+
+ r->rootoid_len = mibloclen;
+ r->rootoid = (oid *) malloc(r->rootoid_len * sizeof(oid));
+
+ if (r->rootoid == NULL) {
+ netsnmp_handler_registration_free(r);
+ rc = MIB_REGISTRATION_FAILED;
+ break;
+ }
+ memcpy(r->rootoid, mibloc, mibloclen * sizeof(oid));
+ memcpy((u_char *) (r->rootoid + (var_subid - vr->namelen)), vr->name,
+ vr->namelen * sizeof(oid));
+ DEBUGMSGTL(("netsnmp_register_mib_table_row", "rootoid "));
+ DEBUGMSGOID(("netsnmp_register_mib_table_row", r->rootoid,
+ r->rootoid_len));
+ DEBUGMSG(("netsnmp_register_mib_table_row", "(%d)\n",
+ (var_subid - vr->namelen)));
+ r->handler->myvoid = (void *) malloc(varsize);
+
+ if (r->handler->myvoid == NULL) {
+ netsnmp_handler_registration_free(r);
+ rc = MIB_REGISTRATION_FAILED;
+ break;
+ }
+ memcpy((char *) r->handler->myvoid, vr, varsize);
+
+ r->contextName = (context) ? strdup(context) : NULL;
+
+ if (context != NULL && r->contextName == NULL) {
+ netsnmp_handler_registration_free(r);
+ rc = MIB_REGISTRATION_FAILED;
+ break;
+ }
+
+ r->priority = priority;
+ r->range_subid = 0; /* var_subid; */
+ r->range_ubound = 0; /* range_ubound; */
+ r->timeout = timeout;
+ r->modes = HANDLER_CAN_RWRITE;
+
+ /*
+ * Register this column and row
+ */
+ if ((rc =
+ netsnmp_register_handler_nocallback(r)) !=
+ MIB_REGISTERED_OK) {
+ DEBUGMSGTL(("netsnmp_register_mib_table_row",
+ "register failed %d\n", rc));
+ netsnmp_handler_registration_free(r);
+ break;
+ }
+
+ if (vr->namelen > 0) {
+ if (vr->name[vr->namelen - 1] > ubound) {
+ ubound = vr->name[vr->namelen - 1];
+ }
+ }
+ }
+
+ if (rc == MIB_REGISTERED_OK) {
+ struct register_parameters reg_parms;
+
+ reg_parms.name = mibloc;
+ reg_parms.namelen = mibloclen;
+ reg_parms.priority = priority;
+ reg_parms.flags = (u_char) flags;
+ reg_parms.range_subid = var_subid;
+ reg_parms.range_ubound = ubound;
+ reg_parms.timeout = timeout;
+ reg_parms.contextName = context;
+ rc = snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REGISTER_OID, &reg_parms);
+ }
+
+ return rc;
+}
+
+/** implements the old_api handler */
+int
+netsnmp_old_api_helper(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+#if MIB_CLIENTS_ARE_EVIL
+ oid save[MAX_OID_LEN];
+ size_t savelen = 0;
+#endif
+ struct variable compat_var, *cvp = &compat_var;
+ int exact = 1;
+ int status;
+
+ struct variable *vp;
+ WriteMethod *write_method = NULL;
+ size_t len;
+ u_char *access = NULL;
+ netsnmp_old_api_cache *cacheptr;
+ netsnmp_agent_session *oldasp = NULL;
+ oid tmp_name[MAX_OID_LEN];
+ size_t tmp_len;
+
+ vp = (struct variable *) handler->myvoid;
+
+ /*
+ * create old variable structure with right information
+ */
+ memcpy(cvp->name, reginfo->rootoid,
+ reginfo->rootoid_len * sizeof(oid));
+ cvp->namelen = reginfo->rootoid_len;
+ cvp->type = vp->type;
+ cvp->magic = vp->magic;
+ cvp->acl = vp->acl;
+ cvp->findVar = vp->findVar;
+
+ switch (reqinfo->mode) {
+ case MODE_GETNEXT:
+ case MODE_GETBULK:
+ exact = 0;
+ }
+
+ for (; requests; requests = requests->next) {
+
+#if MIB_CLIENTS_ARE_EVIL
+ savelen = requests->requestvb->name_length;
+ memcpy(save, requests->requestvb->name, savelen * sizeof(oid));
+#endif
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ case MODE_GETNEXT:
+ case MODE_SET_RESERVE1:
+ /*
+ * Actually call the old mib-module function
+ */
+ if (vp && vp->findVar) {
+ memcpy(tmp_name, requests->requestvb->name,
+ requests->requestvb->name_length*sizeof(oid));
+ tmp_len = requests->requestvb->name_length;
+ access = (*(vp->findVar)) (cvp, tmp_name, &tmp_len,
+ exact, &len, &write_method);
+ snmp_set_var_objid( requests->requestvb, tmp_name, tmp_len );
+ }
+ else
+ access = NULL;
+
+#ifdef WWW_FIX
+ if (IS_DELEGATED(cvp->type)) {
+ add_method = (AddVarMethod *) statP;
+ requests->delayed = 1;
+ have_delegated = 1;
+ continue; /* WWW: This may not get to the right place */
+ }
+#endif
+
+ /*
+ * WWW: end range checking
+ */
+ if (access) {
+ /*
+ * result returned
+ */
+ if (reqinfo->mode != MODE_SET_RESERVE1)
+ snmp_set_var_typed_value(requests->requestvb,
+ cvp->type, access, len);
+ } else {
+ /*
+ * no result returned
+ */
+#if MIB_CLIENTS_ARE_EVIL
+ if (access == NULL) {
+ if (netsnmp_oid_equals(requests->requestvb->name,
+ requests->requestvb->name_length,
+ save, savelen) != 0) {
+ DEBUGMSGTL(("old_api", "evil_client: %s\n",
+ reginfo->handlerName));
+ memcpy(requests->requestvb->name, save,
+ savelen * sizeof(oid));
+ requests->requestvb->name_length = savelen;
+ }
+ }
+#endif
+ }
+
+ /*
+ * AAA: fall through for everything that is a set (see BBB)
+ */
+ if (reqinfo->mode != MODE_SET_RESERVE1)
+ break;
+
+ cacheptr = SNMP_MALLOC_TYPEDEF(netsnmp_old_api_cache);
+ if (!cacheptr)
+ return netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ cacheptr->data = access;
+ cacheptr->write_method = write_method;
+ write_method = NULL;
+ netsnmp_request_add_list_data(requests,
+ netsnmp_create_data_list
+ (OLD_API_NAME, cacheptr, free));
+ /*
+ * BBB: fall through for everything that is a set (see AAA)
+ */
+
+ default:
+ /*
+ * WWW: explicitly list the SET conditions
+ */
+ /*
+ * (the rest of the) SET contions
+ */
+ cacheptr =
+ (netsnmp_old_api_cache *)
+ netsnmp_request_get_list_data(requests, OLD_API_NAME);
+
+ if (cacheptr == NULL || cacheptr->write_method == NULL) {
+ /*
+ * WWW: try to set ourselves if possible?
+ */
+ return netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_NOTWRITABLE);
+ }
+
+ oldasp = netsnmp_get_current_agent_session();
+ set_current_agent_session(reqinfo->asp);
+ status =
+ (*(cacheptr->write_method)) (reqinfo->mode,
+ requests->requestvb->val.
+ string,
+ requests->requestvb->type,
+ requests->requestvb->val_len,
+ cacheptr->data,
+ requests->requestvb->name,
+ requests->requestvb->
+ name_length);
+ set_current_agent_session(oldasp);
+
+ if (status != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, requests, status);
+ }
+
+ /*
+ * clean up is done by the automatic freeing of the
+ * cache stored in the request.
+ */
+
+ break;
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+/** @} */
+
+/*
+ * don't use this!
+ */
+static netsnmp_agent_session *current_agent_session = NULL;
+netsnmp_agent_session *
+netsnmp_get_current_agent_session()
+{
+ return current_agent_session;
+}
+
+/*
+ * don't use this!
+ */
+void
+set_current_agent_session(netsnmp_agent_session *asp)
+{
+ current_agent_session = asp;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/read_only.c b/cleopatre/application/spidnetsnmp/agent/helpers/read_only.c
new file mode 100644
index 0000000000..512f94bada
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/read_only.c
@@ -0,0 +1,87 @@
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/read_only.h>
+
+/** @defgroup read_only read_only
+ * Make your handler read_only automatically
+ * The only purpose of this handler is to return an
+ * appropriate error for any requests passed to it in a SET mode.
+ * Inserting it into your handler chain will ensure you're never
+ * asked to perform a SET request so you can ignore those error
+ * conditions.
+ * @ingroup utilities
+ * @{
+ */
+
+/** returns a read_only handler that can be injected into a given
+ * handler chain.
+ */
+netsnmp_mib_handler *
+netsnmp_get_read_only_handler(void)
+{
+ netsnmp_mib_handler *ret = NULL;
+
+ ret = netsnmp_create_handler("read_only",
+ netsnmp_read_only_helper);
+ if (ret) {
+ ret->flags |= MIB_HANDLER_AUTO_NEXT;
+ }
+ return ret;
+}
+
+/** @internal Implements the read_only handler */
+int
+netsnmp_read_only_helper(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ DEBUGMSGTL(("helper:read_only", "Got request\n"));
+
+ switch (reqinfo->mode) {
+
+ case MODE_SET_RESERVE1:
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ netsnmp_request_set_error_all(requests, SNMP_ERR_NOTWRITABLE);
+ return SNMP_ERR_NOTWRITABLE;
+
+ case MODE_GET:
+ case MODE_GETNEXT:
+ case MODE_GETBULK:
+ /* next handler called automatically - 'AUTO_NEXT' */
+ return SNMP_ERR_NOERROR;
+
+ default:
+ netsnmp_request_set_error_all(requests, SNMP_ERR_GENERR);
+ return SNMP_ERR_GENERR;
+ }
+ netsnmp_request_set_error_all(requests, SNMP_ERR_GENERR);
+ return SNMP_ERR_GENERR; /* should never get here */
+}
+
+/** initializes the read_only helper which then registers a read_only
+ * handler as a run-time injectable handler for configuration file
+ * use.
+ */
+void
+netsnmp_init_read_only_helper(void)
+{
+ netsnmp_register_handler_by_name("read_only",
+ netsnmp_get_read_only_handler());
+}
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/row_merge.c b/cleopatre/application/spidnetsnmp/agent/helpers/row_merge.c
new file mode 100644
index 0000000000..6b64430ad8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/row_merge.c
@@ -0,0 +1,366 @@
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/row_merge.h>
+
+/** @defgroup row_merge row_merge
+ * Calls sub handlers with request for one row at a time.
+ * @ingroup utilities
+ * This helper splits a whole bunch of requests into chunks based on the row
+ * index that they refer to, and passes all requests for a given row to the lower handlers.
+ * This is useful for handlers that don't want to process multiple rows at the
+ * same time, but are happy to iterate through the request list for a single row.
+ * @{
+ */
+
+/** returns a row_merge handler that can be injected into a given
+ * handler chain.
+ */
+netsnmp_mib_handler *
+netsnmp_get_row_merge_handler(int prefix_len)
+{
+ netsnmp_mib_handler *ret = NULL;
+ ret = netsnmp_create_handler("row_merge",
+ netsnmp_row_merge_helper_handler);
+ if (ret) {
+ ret->myvoid = (void *)(intptr_t)prefix_len;
+ }
+ return ret;
+}
+
+/** functionally the same as calling netsnmp_register_handler() but also
+ * injects a row_merge handler at the same time for you. */
+int
+netsnmp_register_row_merge(netsnmp_handler_registration *reginfo)
+{
+ netsnmp_inject_handler(reginfo,
+ netsnmp_get_row_merge_handler(reginfo->rootoid_len+1));
+ return netsnmp_register_handler(reginfo);
+}
+
+static void
+_rm_status_free(void *mem)
+{
+ netsnmp_row_merge_status *rm_status = (netsnmp_row_merge_status*)mem;
+
+ if (NULL != rm_status->saved_requests)
+ free(rm_status->saved_requests);
+
+ if (NULL != rm_status->saved_status)
+ free(rm_status->saved_status);
+
+ free(mem);
+}
+
+
+/** retrieve row_merge_status
+ */
+netsnmp_row_merge_status *
+netsnmp_row_merge_status_get(netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ int create_missing)
+{
+ netsnmp_row_merge_status *rm_status;
+ char buf[64];
+ int rc;
+
+ /*
+ * see if we've already been here
+ */
+ rc = snprintf(buf, sizeof(buf), "row_merge:%p", reginfo);
+ if ((-1 == rc) || (rc >= sizeof(buf))) {
+ snmp_log(LOG_ERR,"error creating key\n");
+ return NULL;
+ }
+
+ rm_status = netsnmp_agent_get_list_data(reqinfo, buf);
+ if ((NULL == rm_status) && create_missing) {
+ void *data_list;
+
+ rm_status = SNMP_MALLOC_TYPEDEF(netsnmp_row_merge_status);
+ if (NULL == rm_status) {
+ snmp_log(LOG_ERR,"error allocating memory\n");
+ return NULL;
+ }
+ data_list = netsnmp_create_data_list(buf, rm_status,
+ _rm_status_free);
+ if (NULL == data_list) {
+ free(rm_status);
+ return NULL;
+ }
+ netsnmp_agent_add_list_data(reqinfo, data_list);
+ }
+
+ return rm_status;
+}
+
+/** Determine if this is the first row
+ *
+ * returns 1 if this is the first row for this pass of the handler.
+ */
+int
+netsnmp_row_merge_status_first(netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo)
+{
+ netsnmp_row_merge_status *rm_status;
+
+ /*
+ * find status
+ */
+ rm_status = netsnmp_row_merge_status_get(reginfo, reqinfo, 0);
+ if (NULL == rm_status)
+ return 0;
+
+ return (rm_status->count == 1) ? 1 : (rm_status->current == 1);
+}
+
+/** Determine if this is the last row
+ *
+ * returns 1 if this is the last row for this pass of the handler.
+ */
+int
+netsnmp_row_merge_status_last(netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo)
+{
+ netsnmp_row_merge_status *rm_status;
+
+ /*
+ * find status
+ */
+ rm_status = netsnmp_row_merge_status_get(reginfo, reqinfo, 0);
+ if (NULL == rm_status)
+ return 0;
+
+ return (rm_status->count == 1) ? 1 :
+ (rm_status->current == rm_status->rows);
+}
+
+
+#define ROW_MERGE_WAITING 0
+#define ROW_MERGE_ACTIVE 1
+#define ROW_MERGE_DONE 2
+#define ROW_MERGE_HEAD 3
+
+/** Implements the row_merge handler */
+int
+netsnmp_row_merge_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_request_info *request, **saved_requests;
+ char *saved_status;
+ netsnmp_row_merge_status *rm_status;
+ int i, j, ret, tail, count, final_rc = SNMP_ERR_NOERROR;
+
+ /*
+ * Use the prefix length as supplied during registration, rather
+ * than trying to second-guess what the MIB implementer wanted.
+ */
+ int SKIP_OID = (int)(intptr_t)handler->myvoid;
+
+ DEBUGMSGTL(("helper:row_merge", "Got request (%d): ", SKIP_OID));
+ DEBUGMSGOID(("helper:row_merge", reginfo->rootoid, reginfo->rootoid_len));
+ DEBUGMSG(("helper:row_merge", "\n"));
+
+ /*
+ * find or create status
+ */
+ rm_status = netsnmp_row_merge_status_get(reginfo, reqinfo, 1);
+
+ /*
+ * Count the requests, and set up an array to keep
+ * track of the original order.
+ */
+ for (count = 0, request = requests; request; request = request->next) {
+ DEBUGIF("helper:row_merge") {
+ DEBUGMSGTL(("helper:row_merge", " got varbind: "));
+ DEBUGMSGOID(("helper:row_merge", request->requestvb->name,
+ request->requestvb->name_length));
+ DEBUGMSG(("helper:row_merge", "\n"));
+ }
+ count++;
+ }
+
+ /*
+ * Optimization: skip all this if there is just one request
+ */
+ if(count == 1) {
+ rm_status->count = count;
+ if (requests->processed)
+ return SNMP_ERR_NOERROR;
+ return netsnmp_call_next_handler(handler, reginfo, reqinfo, requests);
+ }
+
+ /*
+ * we really should only have to do this once, instead of every pass.
+ * as a precaution, we'll do it every time, but put in some asserts
+ * to see if we have to.
+ */
+ /*
+ * if the count changed, re-do everything
+ */
+ if ((0 != rm_status->count) && (rm_status->count != count)) {
+ /*
+ * ok, i know next/bulk can cause this condition. Probably
+ * GET, too. need to rethink this mode counting. maybe
+ * add the mode to the rm_status structure? xxx-rks
+ */
+ if ((reqinfo->mode != MODE_GET) &&
+ (reqinfo->mode != MODE_GETNEXT) &&
+ (reqinfo->mode != MODE_GETBULK)) {
+ netsnmp_assert((NULL != rm_status->saved_requests) &&
+ (NULL != rm_status->saved_status));
+ }
+ DEBUGMSGTL(("helper:row_merge", "count changed! do over...\n"));
+
+ SNMP_FREE(rm_status->saved_requests);
+ SNMP_FREE(rm_status->saved_status);
+
+ rm_status->count = 0;
+ rm_status->rows = 0;
+ }
+
+ if (0 == rm_status->count) {
+ /*
+ * allocate memory for saved structure
+ */
+ rm_status->saved_requests =
+ (netsnmp_request_info**)calloc(count+1,
+ sizeof(netsnmp_request_info*));
+ rm_status->saved_status = (char*)calloc(count,sizeof(char));
+ }
+
+ saved_status = rm_status->saved_status;
+ saved_requests = rm_status->saved_requests;
+
+ /*
+ * set up saved requests, and set any processed requests to done
+ */
+ i = 0;
+ for (request = requests; request; request = request->next, i++) {
+ if (request->processed) {
+ saved_status[i] = ROW_MERGE_DONE;
+ DEBUGMSGTL(("helper:row_merge", " skipping processed oid: "));
+ DEBUGMSGOID(("helper:row_merge", request->requestvb->name,
+ request->requestvb->name_length));
+ DEBUGMSG(("helper:row_merge", "\n"));
+ }
+ else
+ saved_status[i] = ROW_MERGE_WAITING;
+ if (0 != rm_status->count)
+ netsnmp_assert(saved_requests[i] == request);
+ saved_requests[i] = request;
+ saved_requests[i]->prev = NULL;
+ }
+ saved_requests[i] = NULL;
+
+ /*
+ * Note that saved_requests[count] is valid
+ * (because of the 'count+1' in the calloc above),
+ * but NULL (since it's past the end of the list).
+ * This simplifies the re-linking later.
+ */
+
+ /*
+ * Work through the (unprocessed) requests in order.
+ * For each of these, search the rest of the list for any
+ * matching indexes, and link them into a new list.
+ */
+ for (i=0; i<count; i++) {
+ if (saved_status[i] != ROW_MERGE_WAITING)
+ continue;
+
+ if (0 == rm_status->count)
+ rm_status->rows++;
+ DEBUGMSGTL(("helper:row_merge", " row %d oid[%d]: ", rm_status->rows, i));
+ DEBUGMSGOID(("helper:row_merge", saved_requests[i]->requestvb->name,
+ saved_requests[i]->requestvb->name_length));
+ DEBUGMSG(("helper:row_merge", "\n"));
+
+ saved_requests[i]->next = NULL;
+ saved_status[i] = ROW_MERGE_HEAD;
+ tail = i;
+ for (j=i+1; j<count; j++) {
+ if (saved_status[j] != ROW_MERGE_WAITING)
+ continue;
+
+ DEBUGMSGTL(("helper:row_merge", "? oid[%d]: ", j));
+ DEBUGMSGOID(("helper:row_merge",
+ saved_requests[j]->requestvb->name,
+ saved_requests[j]->requestvb->name_length));
+ if (!snmp_oid_compare(
+ saved_requests[i]->requestvb->name+SKIP_OID,
+ saved_requests[i]->requestvb->name_length-SKIP_OID,
+ saved_requests[j]->requestvb->name+SKIP_OID,
+ saved_requests[j]->requestvb->name_length-SKIP_OID)) {
+ DEBUGMSG(("helper:row_merge", " match\n"));
+ saved_requests[tail]->next = saved_requests[j];
+ saved_requests[j]->next = NULL;
+ saved_requests[j]->prev = saved_requests[tail];
+ saved_status[j] = ROW_MERGE_ACTIVE;
+ tail = j;
+ }
+ else
+ DEBUGMSG(("helper:row_merge", " no match\n"));
+ }
+ }
+
+ /*
+ * not that we have a list for each row, call next handler...
+ */
+ if (0 == rm_status->count)
+ rm_status->count = count;
+ rm_status->current = 0;
+ for (i=0; i<count; i++) {
+ if (saved_status[i] != ROW_MERGE_HEAD)
+ continue;
+
+ /*
+ * found the head of a new row,
+ * call the next handler with this list
+ */
+ rm_status->current++;
+ ret = netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ saved_requests[i]);
+ if (ret != SNMP_ERR_NOERROR) {
+ snmp_log(LOG_WARNING,
+ "bad rc (%d) from next handler in row_merge\n", ret);
+ if (SNMP_ERR_NOERROR == final_rc)
+ final_rc = ret;
+ }
+ }
+
+ /*
+ * restore original linked list
+ */
+ for (i=0; i<count; i++) {
+ saved_requests[i]->next = saved_requests[i+1];
+ if (i>0)
+ saved_requests[i]->prev = saved_requests[i-1];
+ }
+
+ return final_rc;
+}
+
+/**
+ * initializes the row_merge helper which then registers a row_merge
+ * handler as a run-time injectable handler for configuration file
+ * use.
+ */
+void
+netsnmp_init_row_merge(void)
+{
+ netsnmp_register_handler_by_name("row_merge",
+ netsnmp_get_row_merge_handler(-1));
+}
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/scalar.c b/cleopatre/application/spidnetsnmp/agent/helpers/scalar.c
new file mode 100644
index 0000000000..42c66b4d3e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/scalar.c
@@ -0,0 +1,196 @@
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+#include <net-snmp/net-snmp-config.h>
+
+#include <stdlib.h>
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/scalar.h>
+#include <net-snmp/agent/instance.h>
+#include <net-snmp/agent/serialize.h>
+#include <net-snmp/agent/read_only.h>
+
+/** @defgroup scalar scalar
+ * Process scalars easily.
+ * @ingroup leaf
+ * @{
+ */
+
+/**
+ * Creates a scalar handler calling netsnmp_create_handler with a
+ * handler name defaulted to "scalar" and access method,
+ * netsnmp_scalar_helper_handler.
+ *
+ * @return Returns a pointer to a netsnmp_mib_handler struct which contains
+ * the handler's name and the access method
+ *
+ * @see netsnmp_get_scalar_handler
+ * @see netsnmp_register_scalar
+ */
+netsnmp_mib_handler *
+netsnmp_get_scalar_handler(void)
+{
+ return netsnmp_create_handler("scalar",
+ netsnmp_scalar_helper_handler);
+}
+
+/**
+ * This function registers a scalar helper handler. The registered OID,
+ * reginfo->rootoid, space is extended for the instance subid using
+ * realloc() but the reginfo->rootoid_len length is not extended just yet.
+ * .This function subsequently injects the instance, scalar, and serialize
+ * helper handlers before actually registering reginfo.
+ *
+ * Each handler is injected/pushed to the top of the handler chain list
+ * and will be processed last in first out, LIFO.
+ *
+ * @param reginfo a handler registration structure which could get created
+ * using netsnmp_create_handler_registration. Used to register
+ * a scalar helper handler.
+ *
+ * @return MIB_REGISTERED_OK is returned if the registration was a success.
+ * Failures are MIB_REGISTRATION_FAILURE and MIB_DUPLICATE_REGISTRATION.
+ *
+ * @see netsnmp_register_read_only_scalar
+ * @see netsnmp_get_scalar_handler
+ */
+
+int
+netsnmp_register_scalar(netsnmp_handler_registration *reginfo)
+{
+ /*
+ * Extend the registered OID with space for the instance subid
+ * (but don't extend the length just yet!)
+ */
+ reginfo->rootoid = realloc(reginfo->rootoid,
+ (reginfo->rootoid_len+1) * sizeof(oid) );
+ reginfo->rootoid[ reginfo->rootoid_len ] = 0;
+
+ netsnmp_inject_handler(reginfo, netsnmp_get_instance_handler());
+ netsnmp_inject_handler(reginfo, netsnmp_get_scalar_handler());
+ return netsnmp_register_serialize(reginfo);
+}
+
+
+/**
+ * This function registers a read only scalar helper handler. This
+ * function is very similar to netsnmp_register_scalar the only addition
+ * is that the "read_only" handler is injected into the handler chain
+ * prior to injecting the serialize handler and registering reginfo.
+ *
+ * @param reginfo a handler registration structure which could get created
+ * using netsnmp_create_handler_registration. Used to register
+ * a read only scalar helper handler.
+ *
+ * @return MIB_REGISTERED_OK is returned if the registration was a success.
+ * Failures are MIB_REGISTRATION_FAILURE and MIB_DUPLICATE_REGISTRATION.
+ *
+ * @see netsnmp_register_scalar
+ * @see netsnmp_get_scalar_handler
+ *
+ */
+
+int
+netsnmp_register_read_only_scalar(netsnmp_handler_registration *reginfo)
+{
+ /*
+ * Extend the registered OID with space for the instance subid
+ * (but don't extend the length just yet!)
+ */
+ reginfo->rootoid = realloc(reginfo->rootoid,
+ (reginfo->rootoid_len+1) * sizeof(oid) );
+ reginfo->rootoid[ reginfo->rootoid_len ] = 0;
+
+ netsnmp_inject_handler(reginfo, netsnmp_get_instance_handler());
+ netsnmp_inject_handler(reginfo, netsnmp_get_scalar_handler());
+ netsnmp_inject_handler(reginfo, netsnmp_get_read_only_handler());
+ return netsnmp_register_serialize(reginfo);
+}
+
+
+
+int
+netsnmp_scalar_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ netsnmp_variable_list *var = requests->requestvb;
+
+ int ret, cmp;
+ int namelen;
+
+ DEBUGMSGTL(("helper:scalar", "Got request:\n"));
+ namelen = SNMP_MIN(requests->requestvb->name_length,
+ reginfo->rootoid_len);
+ cmp = snmp_oid_compare(requests->requestvb->name, namelen,
+ reginfo->rootoid, reginfo->rootoid_len);
+
+ DEBUGMSGTL(("helper:scalar", " oid:"));
+ DEBUGMSGOID(("helper:scalar", var->name, var->name_length));
+ DEBUGMSG(("helper:scalar", "\n"));
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ if (cmp != 0) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_NOSUCHOBJECT);
+ return SNMP_ERR_NOERROR;
+ } else {
+ reginfo->rootoid[reginfo->rootoid_len++] = 0;
+ ret = netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ reginfo->rootoid_len--;
+ return ret;
+ }
+ break;
+
+ case MODE_SET_RESERVE1:
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_UNDO:
+ case MODE_SET_FREE:
+ if (cmp != 0) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_NOCREATION);
+ return SNMP_ERR_NOERROR;
+ } else {
+ reginfo->rootoid[reginfo->rootoid_len++] = 0;
+ ret = netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ reginfo->rootoid_len--;
+ return ret;
+ }
+ break;
+
+ case MODE_GETNEXT:
+ reginfo->rootoid[reginfo->rootoid_len++] = 0;
+ ret = netsnmp_call_next_handler(handler, reginfo, reqinfo, requests);
+ reginfo->rootoid_len--;
+ return ret;
+ }
+ /*
+ * got here only if illegal mode found
+ */
+ return SNMP_ERR_GENERR;
+}
+
+/** @}
+ */
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/scalar_group.c b/cleopatre/application/spidnetsnmp/agent/helpers/scalar_group.c
new file mode 100644
index 0000000000..a5d119ed21
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/scalar_group.c
@@ -0,0 +1,193 @@
+#include <net-snmp/net-snmp-config.h>
+
+#include <stdlib.h>
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/scalar_group.h>
+#include <net-snmp/agent/scalar.h>
+#include <net-snmp/agent/serialize.h>
+#include <net-snmp/agent/read_only.h>
+
+/** @defgroup scalar_group_group scalar_group
+ * Process groups of scalars.
+ * @ingroup leaf
+ * @{
+ */
+netsnmp_mib_handler *
+netsnmp_get_scalar_group_handler(oid first, oid last)
+{
+ netsnmp_mib_handler *ret = NULL;
+ netsnmp_scalar_group *sgroup = NULL;
+
+ ret = netsnmp_create_handler("scalar_group",
+ netsnmp_scalar_group_helper_handler);
+ if (ret) {
+ sgroup = SNMP_MALLOC_TYPEDEF(netsnmp_scalar_group);
+ if (NULL == sgroup) {
+ netsnmp_handler_free(ret);
+ ret = NULL;
+ }
+ else {
+ sgroup->lbound = first;
+ sgroup->ubound = last;
+ ret->myvoid = (void *)sgroup;
+ }
+ }
+ return ret;
+}
+
+int
+netsnmp_register_scalar_group(netsnmp_handler_registration *reginfo,
+ oid first, oid last)
+{
+ netsnmp_inject_handler(reginfo, netsnmp_get_instance_handler());
+ netsnmp_inject_handler(reginfo, netsnmp_get_scalar_handler());
+ netsnmp_inject_handler(reginfo, netsnmp_get_scalar_group_handler(first, last));
+ return netsnmp_register_serialize(reginfo);
+}
+
+
+int
+netsnmp_scalar_group_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_variable_list *var = requests->requestvb;
+
+ netsnmp_scalar_group *sgroup = (netsnmp_scalar_group *)handler->myvoid;
+ int ret, cmp;
+ int namelen;
+ oid subid, root_tmp[MAX_OID_LEN], *root_save;
+
+ DEBUGMSGTL(("helper:scalar_group", "Got request:\n"));
+ namelen = SNMP_MIN(requests->requestvb->name_length,
+ reginfo->rootoid_len);
+ cmp = snmp_oid_compare(requests->requestvb->name, namelen,
+ reginfo->rootoid, reginfo->rootoid_len);
+
+ DEBUGMSGTL(( "helper:scalar_group", " cmp=%d, oid:", cmp));
+ DEBUGMSGOID(("helper:scalar_group", var->name, var->name_length));
+ DEBUGMSG(( "helper:scalar_group", "\n"));
+
+ /*
+ * copy root oid to root_tmp, set instance to 0. (subid set later on)
+ * save rootoid, since we'll replace it before calling next handler,
+ * and need to restore it afterwards.
+ */
+ memcpy(root_tmp, reginfo->rootoid, reginfo->rootoid_len * sizeof(oid));
+ root_tmp[reginfo->rootoid_len + 1] = 0;
+ root_save = reginfo->rootoid;
+
+ ret = SNMP_ERR_NOCREATION;
+ switch (reqinfo->mode) {
+ /*
+ * The handling of "exact" requests is basically the same.
+ * The only difference between GET and SET requests is the
+ * error/exception to return on failure.
+ */
+ case MODE_GET:
+ ret = SNMP_NOSUCHOBJECT;
+ /* Fallthrough */
+
+ case MODE_SET_RESERVE1:
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_UNDO:
+ case MODE_SET_FREE:
+ if (cmp != 0 ||
+ requests->requestvb->name_length <= reginfo->rootoid_len) {
+ /*
+ * Common prefix doesn't match, or only *just* matches
+ * the registered root (so can't possibly match a scalar)
+ */
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ return SNMP_ERR_NOERROR;
+ } else {
+ /*
+ * Otherwise,
+ * extract the object subidentifier from the request,
+ * check this is (probably) valid, and then fudge the
+ * registered 'rootoid' to match, before passing the
+ * request off to the next handler ('scalar').
+ *
+ * Note that we don't bother checking instance subidentifiers
+ * here. That's left to the scalar helper.
+ */
+ subid = requests->requestvb->name[reginfo->rootoid_len];
+ if (subid < sgroup->lbound ||
+ subid > sgroup->ubound) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ root_tmp[reginfo->rootoid_len++] = subid;
+ reginfo->rootoid = root_tmp;
+ ret = netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ reginfo->rootoid = root_save;
+ reginfo->rootoid_len--;
+ return ret;
+ }
+ break;
+
+ case MODE_GETNEXT:
+ /*
+ * If we're being asked for something before (or exactly matches)
+ * the registered root OID, then start with the first object.
+ * If we're being asked for something that exactly matches an object
+ * OID, then that's what we pass down.
+ * Otherwise, we pass down the OID of the *next* object....
+ */
+ if (cmp < 0 ||
+ requests->requestvb->name_length <= reginfo->rootoid_len) {
+ subid = sgroup->lbound;
+ } else if (requests->requestvb->name_length == reginfo->rootoid_len+1)
+ subid = requests->requestvb->name[reginfo->rootoid_len];
+ else
+ subid = requests->requestvb->name[reginfo->rootoid_len]+1;
+
+ /*
+ * ... always assuming this is (potentially) valid, of course.
+ */
+ if (subid < sgroup->lbound)
+ subid = sgroup->lbound;
+ else if (subid > sgroup->ubound)
+ return SNMP_ERR_NOERROR;
+
+ root_tmp[reginfo->rootoid_len++] = subid;
+ reginfo->rootoid = root_tmp;
+ ret = netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ /*
+ * If we didn't get an answer (due to holes in the group)
+ * set things up to retry again.
+ */
+ if (!requests->delegated &&
+ (requests->requestvb->type == ASN_NULL ||
+ requests->requestvb->type == SNMP_NOSUCHOBJECT ||
+ requests->requestvb->type == SNMP_NOSUCHINSTANCE)) {
+ snmp_set_var_objid(requests->requestvb,
+ reginfo->rootoid, reginfo->rootoid_len);
+ requests->requestvb->name[reginfo->rootoid_len-1] = ++subid;
+ requests->requestvb->type = ASN_PRIV_RETRY;
+ }
+ reginfo->rootoid = root_save;
+ reginfo->rootoid_len--;
+ return ret;
+ }
+ /*
+ * got here only if illegal mode found
+ */
+ return SNMP_ERR_GENERR;
+}
+
+/** @}
+ */
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/serialize.c b/cleopatre/application/spidnetsnmp/agent/helpers/serialize.c
new file mode 100644
index 0000000000..892f9b3743
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/serialize.c
@@ -0,0 +1,99 @@
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/serialize.h>
+
+/** @defgroup serialize serialize
+ * Calls sub handlers one request at a time.
+ * @ingroup utilities
+ * This functionally passes in one request at a time
+ * into lower handlers rather than a whole bunch of requests at once.
+ * This is useful for handlers that don't want to iterate through the
+ * request lists themselves. Generally, this is probably less
+ * efficient so use with caution. The serialize handler might be
+ * useable to dynamically fix handlers with broken looping code,
+ * however.
+ * @{
+ */
+
+/** returns a serialize handler that can be injected into a given
+ * handler chain.
+ */
+netsnmp_mib_handler *
+netsnmp_get_serialize_handler(void)
+{
+ return netsnmp_create_handler("serialize",
+ netsnmp_serialize_helper_handler);
+}
+
+/** functionally the same as calling netsnmp_register_handler() but also
+ * injects a serialize handler at the same time for you. */
+int
+netsnmp_register_serialize(netsnmp_handler_registration *reginfo)
+{
+ netsnmp_inject_handler(reginfo, netsnmp_get_serialize_handler());
+ return netsnmp_register_handler(reginfo);
+}
+
+/** Implements the serial handler */
+int
+netsnmp_serialize_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ netsnmp_request_info *request, *requesttmp;
+
+ DEBUGMSGTL(("helper:serialize", "Got request\n"));
+ /*
+ * loop through requests
+ */
+ for (request = requests; request; request = request->next) {
+ int ret;
+
+ /*
+ * store next pointer and delete it
+ */
+ requesttmp = request->next;
+ request->next = NULL;
+
+ /*
+ * call the next handler
+ */
+ ret =
+ netsnmp_call_next_handler(handler, reginfo, reqinfo, request);
+
+ /*
+ * restore original next pointer
+ */
+ request->next = requesttmp;
+
+ if (ret != SNMP_ERR_NOERROR)
+ return ret;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+/**
+ * initializes the serialize helper which then registers a serialize
+ * handler as a run-time injectable handler for configuration file
+ * use.
+ */
+void
+netsnmp_init_serialize(void)
+{
+ netsnmp_register_handler_by_name("serialize",
+ netsnmp_get_serialize_handler());
+}
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/stash_cache.c b/cleopatre/application/spidnetsnmp/agent/helpers/stash_cache.c
new file mode 100644
index 0000000000..df5a33bc37
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/stash_cache.c
@@ -0,0 +1,243 @@
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/stash_cache.h>
+#include <net-snmp/agent/stash_to_next.h>
+
+extern NetsnmpCacheLoad _netsnmp_stash_cache_load;
+extern NetsnmpCacheFree _netsnmp_stash_cache_free;
+
+/** @defgroup stash_cache stash_cache
+ * Automatically caches data for certain handlers.
+ * This handler caches data in an optimized way which may aleviate
+ * the need for the lower level handlers to perform as much
+ * optimization. Specifically, somewhere in the lower level handlers
+ * must be a handler that supports the MODE_GET_STASH operation.
+ * Note that the table_iterator helper supports this.
+ * @ingroup handler
+ * @{
+ */
+
+netsnmp_stash_cache_info *
+netsnmp_get_new_stash_cache(void)
+{
+ netsnmp_stash_cache_info *cinfo;
+
+ cinfo = SNMP_MALLOC_TYPEDEF(netsnmp_stash_cache_info);
+ cinfo->cache_length = 30;
+ return cinfo;
+}
+
+/** returns a stash_cache handler that can be injected into a given
+ * handler chain (with the specified timeout and root OID values),
+ * but *only* if that handler chain explicitly supports stash cache processing.
+ */
+netsnmp_mib_handler *
+netsnmp_get_timed_bare_stash_cache_handler(int timeout, oid *rootoid, size_t rootoid_len)
+{
+ netsnmp_mib_handler *handler;
+ netsnmp_cache *cinfo;
+
+ cinfo = netsnmp_cache_create( timeout, _netsnmp_stash_cache_load,
+ _netsnmp_stash_cache_free, rootoid, rootoid_len );
+
+ if (!cinfo)
+ return NULL;
+
+ handler = netsnmp_cache_handler_get( cinfo );
+ if (!handler) {
+ free(cinfo);
+ return NULL;
+ }
+
+ handler->next = netsnmp_create_handler("stash_cache", netsnmp_stash_cache_helper);
+ if (!handler->next) {
+ netsnmp_handler_free(handler);
+ free(cinfo);
+ return NULL;
+ }
+
+ handler->myvoid = cinfo;
+
+ return handler;
+}
+
+/** returns a single stash_cache handler that can be injected into a given
+ * handler chain (with a fixed timeout), but *only* if that handler chain
+ * explicitly supports stash cache processing.
+ */
+netsnmp_mib_handler *
+netsnmp_get_bare_stash_cache_handler(void)
+{
+ return netsnmp_get_timed_bare_stash_cache_handler( 30, NULL, 0 );
+}
+
+/** returns a stash_cache handler sub-chain that can be injected into a given
+ * (arbitrary) handler chain, using a fixed cache timeout.
+ */
+netsnmp_mib_handler *
+netsnmp_get_stash_cache_handler(void)
+{
+ netsnmp_mib_handler *handler = netsnmp_get_bare_stash_cache_handler();
+ if (handler && handler->next) {
+ handler->next->next = netsnmp_get_stash_to_next_handler();
+ }
+ return handler;
+}
+
+/** returns a stash_cache handler sub-chain that can be injected into a given
+ * (arbitrary) handler chain, using a configurable cache timeout.
+ */
+netsnmp_mib_handler *
+netsnmp_get_timed_stash_cache_handler(int timeout, oid *rootoid, size_t rootoid_len)
+{
+ netsnmp_mib_handler *handler =
+ netsnmp_get_timed_bare_stash_cache_handler(timeout, rootoid, rootoid_len);
+ if (handler && handler->next) {
+ handler->next->next = netsnmp_get_stash_to_next_handler();
+ }
+ return handler;
+}
+
+/** extracts a pointer to the stash_cache info from the reqinfo structure. */
+netsnmp_oid_stash_node **
+netsnmp_extract_stash_cache(netsnmp_agent_request_info *reqinfo)
+{
+ return netsnmp_agent_get_list_data(reqinfo, STASH_CACHE_NAME);
+}
+
+
+/** @internal Implements the stash_cache handler */
+int
+netsnmp_stash_cache_helper(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_cache *cache;
+ netsnmp_stash_cache_info *cinfo;
+ netsnmp_oid_stash_node *cnode;
+ netsnmp_variable_list *cdata;
+ netsnmp_request_info *request;
+
+ DEBUGMSGTL(("helper:stash_cache", "Got request\n"));
+
+ cache = netsnmp_cache_reqinfo_extract( reqinfo, reginfo->handlerName );
+ if (!cache) {
+ DEBUGMSGTL(("helper:stash_cache", "No cache structure\n"));
+ return SNMP_ERR_GENERR;
+ }
+ cinfo = (netsnmp_stash_cache_info *) cache->magic;
+
+ switch (reqinfo->mode) {
+
+ case MODE_GET:
+ DEBUGMSGTL(("helper:stash_cache", "Processing GET request\n"));
+ for(request = requests; request; request = request->next) {
+ cdata =
+ netsnmp_oid_stash_get_data(cinfo->cache,
+ requests->requestvb->name,
+ requests->requestvb->name_length);
+ if (cdata && cdata->val.string && cdata->val_len) {
+ DEBUGMSGTL(("helper:stash_cache", "Found cached GET varbind\n"));
+ DEBUGMSGOID(("helper:stash_cache", cdata->name, cdata->name_length));
+ DEBUGMSG(("helper:stash_cache", "\n"));
+ snmp_set_var_typed_value(request->requestvb, cdata->type,
+ cdata->val.string, cdata->val_len);
+ }
+ }
+ return SNMP_ERR_NOERROR;
+ break;
+
+ case MODE_GETNEXT:
+ DEBUGMSGTL(("helper:stash_cache", "Processing GETNEXT request\n"));
+ for(request = requests; request; request = request->next) {
+ cnode =
+ netsnmp_oid_stash_getnext_node(cinfo->cache,
+ requests->requestvb->name,
+ requests->requestvb->name_length);
+ if (cnode && cnode->thedata) {
+ cdata = cnode->thedata;
+ if (cdata->val.string && cdata->name && cdata->name_length) {
+ DEBUGMSGTL(("helper:stash_cache", "Found cached GETNEXT varbind\n"));
+ DEBUGMSGOID(("helper:stash_cache", cdata->name, cdata->name_length));
+ DEBUGMSG(("helper:stash_cache", "\n"));
+ snmp_set_var_typed_value(request->requestvb, cdata->type,
+ cdata->val.string, cdata->val_len);
+ snmp_set_var_objid(request->requestvb, cdata->name,
+ cdata->name_length);
+ }
+ }
+ }
+ return SNMP_ERR_NOERROR;
+ break;
+
+ default:
+ cinfo->cache_valid = 0;
+ return netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ }
+ return SNMP_ERR_GENERR; /* should never get here */
+}
+
+/** updates a given cache depending on whether it needs to or not.
+ */
+int
+_netsnmp_stash_cache_load( netsnmp_cache *cache, void *magic )
+{
+ netsnmp_mib_handler *handler = cache->cache_hint->handler;
+ netsnmp_handler_registration *reginfo = cache->cache_hint->reginfo;
+ netsnmp_agent_request_info *reqinfo = cache->cache_hint->reqinfo;
+ netsnmp_request_info *requests = cache->cache_hint->requests;
+ netsnmp_stash_cache_info *cinfo = (netsnmp_stash_cache_info*) magic;
+ int old_mode;
+ int ret;
+
+ if (!cinfo) {
+ cinfo = netsnmp_get_new_stash_cache();
+ cache->magic = cinfo;
+ }
+
+ /* change modes to the GET_STASH mode */
+ old_mode = reqinfo->mode;
+ reqinfo->mode = MODE_GET_STASH;
+ netsnmp_agent_add_list_data(reqinfo,
+ netsnmp_create_data_list(STASH_CACHE_NAME,
+ &cinfo->cache, NULL));
+
+ /* have the next handler fill stuff in and switch modes back */
+ ret = netsnmp_call_next_handler(handler->next, reginfo, reqinfo, requests);
+ reqinfo->mode = old_mode;
+
+ return ret;
+}
+
+void
+_netsnmp_stash_cache_free( netsnmp_cache *cache, void *magic )
+{
+ netsnmp_stash_cache_info *cinfo = (netsnmp_stash_cache_info*) magic;
+ netsnmp_oid_stash_free(&cinfo->cache,
+ (NetSNMPStashFreeNode *) snmp_free_var);
+ return;
+}
+
+/** initializes the stash_cache helper which then registers a stash_cache
+ * handler as a run-time injectable handler for configuration file
+ * use.
+ */
+void
+netsnmp_init_stash_cache_helper(void)
+{
+ netsnmp_register_handler_by_name("stash_cache",
+ netsnmp_get_stash_cache_handler());
+}
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/stash_to_next.c b/cleopatre/application/spidnetsnmp/agent/helpers/stash_to_next.c
new file mode 100644
index 0000000000..aabaaa858b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/stash_to_next.c
@@ -0,0 +1,121 @@
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/stash_cache.h>
+#include <net-snmp/agent/stash_to_next.h>
+
+/** @defgroup stash_to_next stash_to_next
+ * Convert GET_STASH requests into GETNEXT requests for the handler.
+ * The purpose of this handler is to convert a GET_STASH auto-cache request
+ * to a series of GETNEXT requests. It can be inserted into a handler chain
+ * where the lower-level handlers don't process such requests themselves.
+ * @ingroup utilities
+ * @{
+ */
+
+/** returns a stash_to_next handler that can be injected into a given
+ * handler chain.
+ */
+netsnmp_mib_handler *
+netsnmp_get_stash_to_next_handler(void)
+{
+ netsnmp_mib_handler *handler =
+ netsnmp_create_handler("stash_to_next",
+ netsnmp_stash_to_next_helper);
+
+ if (NULL != handler)
+ handler->flags |= MIB_HANDLER_AUTO_NEXT;
+
+ return handler;
+}
+
+/** @internal Implements the stash_to_next handler */
+int
+netsnmp_stash_to_next_helper(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ int ret = SNMP_ERR_NOERROR;
+ int namelen;
+ int finished = 0;
+ netsnmp_oid_stash_node **cinfo;
+ netsnmp_variable_list *vb;
+ netsnmp_request_info *reqtmp;
+
+ /*
+ * this code depends on AUTO_NEXT being set
+ */
+ netsnmp_assert(handler->flags & MIB_HANDLER_AUTO_NEXT);
+
+ /*
+ * Don't do anything for any modes except GET_STASH. Just return,
+ * and the agent will call the next handler (AUTO_NEXT).
+ *
+ * If the handler chain already supports GET_STASH, we don't
+ * need to do anything here either. Once again, we just return
+ * and the agent will call the next handler (AUTO_NEXT).
+ *
+ * Otherwise, we munge the mode to GET_NEXT, and call the
+ * next handler ourselves, repeatedly until we've retrieved the
+ * full contents of the table or subtree.
+ * Then restore the mode and return to the calling handler
+ * (setting AUTO_NEXT_OVERRRIDE so the agent knows what we did).
+ */
+ if (MODE_GET_STASH == reqinfo->mode) {
+ if ( reginfo->modes & HANDLER_CAN_STASH ) {
+ return ret;
+ }
+ cinfo = netsnmp_extract_stash_cache( reqinfo );
+ reqtmp = SNMP_MALLOC_TYPEDEF(netsnmp_request_info);
+ vb = reqtmp->requestvb = SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ vb->type = ASN_NULL;
+ snmp_set_var_objid( vb, reginfo->rootoid, reginfo->rootoid_len );
+
+ reqinfo->mode = MODE_GETNEXT;
+ while (!finished) {
+ ret = netsnmp_call_next_handler(handler, reginfo, reqinfo, reqtmp);
+ namelen = SNMP_MIN(vb->name_length, reginfo->rootoid_len);
+ if ( !snmp_oid_compare( reginfo->rootoid, reginfo->rootoid_len,
+ vb->name, namelen) &&
+ vb->type != ASN_NULL && vb->type != SNMP_ENDOFMIBVIEW ) {
+ /*
+ * This result is relevant so save it, and prepare
+ * the request varbind for the next query.
+ */
+ netsnmp_oid_stash_add_data( cinfo, vb->name, vb->name_length,
+ snmp_clone_varbind( vb ));
+ /*
+ * Tidy up the response structure,
+ * ready for retrieving the next entry
+ */
+ netsnmp_free_all_list_data(reqtmp->parent_data);
+ reqtmp->parent_data = NULL;
+ reqtmp->processed = 0;
+ vb->type = ASN_NULL;
+ } else {
+ finished = 1;
+ }
+ }
+ reqinfo->mode = MODE_GET_STASH;
+
+ /*
+ * let the handler chain processing know that we've already
+ * called the next handler
+ */
+ handler->flags |= MIB_HANDLER_AUTO_NEXT_OVERRIDE_ONCE;
+ }
+
+ return ret;
+}
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/table.c b/cleopatre/application/spidnetsnmp/agent/helpers/table.c
new file mode 100644
index 0000000000..a64db57b71
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/table.c
@@ -0,0 +1,1146 @@
+/*
+ * table.c
+ */
+
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/table.h>
+#include <net-snmp/library/snmp_assert.h>
+
+static void table_helper_cleanup(netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *request,
+ int status);
+static void table_data_free_func(void *data);
+static int
+sparse_table_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests);
+
+/** @defgroup table table
+ * Helps you implement a table.
+ * @ingroup handler
+ *
+ * This handler helps you implement a table by doing some of the
+ * processing for you.
+ *
+ * This handler truly shows the power of the new handler mechanism.
+ * By creating a table handler and injecting it into your calling
+ * chain, or by using the netsnmp_register_table() function to register your
+ * table, you get access to some pre-parsed information.
+ * Specifically, the table handler pulls out the column number and
+ * indexes from the request oid so that you don't have to do the
+ * complex work to do that parsing within your own code.
+ *
+ * To do this, the table handler needs to know up front how your
+ * table is structured. To inform it about this, you fill in a
+ * table_registeration_info structure that is passed to the table
+ * handler. It contains the asn index types for the table as well as
+ * the minimum and maximum column that should be used.
+ *
+ * @{
+ */
+
+/** Given a netsnmp_table_registration_info object, creates a table handler.
+ * You can use this table handler by injecting it into a calling
+ * chain. When the handler gets called, it'll do processing and
+ * store it's information into the request->parent_data structure.
+ *
+ * The table helper handler pulls out the column number and indexes from
+ * the request oid so that you don't have to do the complex work of
+ * parsing within your own code.
+ *
+ * @param tabreq is a pointer to a netsnmp_table_registration_info struct.
+ * The table handler needs to know up front how your table is structured.
+ * A netsnmp_table_registeration_info structure that is
+ * passed to the table handler should contain the asn index types for the
+ * table as well as the minimum and maximum column that should be used.
+ *
+ * @return Returns a pointer to a netsnmp_mib_handler struct which contains
+ * the handler's name and the access method
+ *
+ */
+netsnmp_mib_handler *
+netsnmp_get_table_handler(netsnmp_table_registration_info *tabreq)
+{
+ netsnmp_mib_handler *ret = NULL;
+
+ if (!tabreq) {
+ snmp_log(LOG_INFO, "netsnmp_get_table_handler(NULL) called\n");
+ return NULL;
+ }
+
+ ret = netsnmp_create_handler(TABLE_HANDLER_NAME, table_helper_handler);
+ if (ret) {
+ ret->myvoid = (void *) tabreq;
+ tabreq->number_indexes = count_varbinds(tabreq->indexes);
+ }
+ return ret;
+}
+
+
+/** creates a table handler given the netsnmp_table_registration_info object,
+ * inserts it into the request chain and then calls
+ * netsnmp_register_handler() to register the table into the agent.
+ */
+int
+netsnmp_register_table(netsnmp_handler_registration *reginfo,
+ netsnmp_table_registration_info *tabreq)
+{
+ netsnmp_inject_handler(reginfo, netsnmp_get_table_handler(tabreq));
+ return netsnmp_register_handler(reginfo);
+}
+
+/** Extracts the processed table information from a given request.
+ * Call this from subhandlers on a request to extract the processed
+ * netsnmp_request_info information. The resulting information includes the
+ * index values and the column number.
+ *
+ * @param request populated netsnmp request structure
+ *
+ * @return populated netsnmp_table_request_info structure
+ */
+NETSNMP_INLINE netsnmp_table_request_info *
+netsnmp_extract_table_info(netsnmp_request_info *request)
+{
+ return (netsnmp_table_request_info *)
+ netsnmp_request_get_list_data(request, TABLE_HANDLER_NAME);
+}
+
+/** extracts the registered netsnmp_table_registration_info object from a
+ * netsnmp_handler_registration object */
+netsnmp_table_registration_info *
+netsnmp_find_table_registration_info(netsnmp_handler_registration *reginfo)
+{
+ return (netsnmp_table_registration_info *)
+ netsnmp_find_handler_data_by_name(reginfo, TABLE_HANDLER_NAME);
+}
+
+/** implements the table helper handler */
+int
+table_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ netsnmp_request_info *request;
+ netsnmp_table_registration_info *tbl_info;
+ int oid_index_pos;
+ unsigned int oid_column_pos;
+ unsigned int tmp_idx;
+ size_t tmp_len;
+ int incomplete, out_of_range, cleaned_up = 0;
+ int status = SNMP_ERR_NOERROR, need_processing = 0;
+ oid *tmp_name;
+ netsnmp_table_request_info *tbl_req_info;
+ netsnmp_variable_list *vb;
+
+ if (!reginfo || !handler)
+ return SNMPERR_GENERR;
+
+ oid_index_pos = reginfo->rootoid_len + 2;
+ oid_column_pos = reginfo->rootoid_len + 1;
+ tbl_info = (netsnmp_table_registration_info *) handler->myvoid;
+
+ if ((!handler->myvoid) || (!tbl_info->indexes)) {
+ snmp_log(LOG_ERR, "improperly registered table found\n");
+ snmp_log(LOG_ERR, "name: %s, table info: %p, indexes: %p\n",
+ handler->handler_name, handler->myvoid, tbl_info->indexes);
+
+ /*
+ * XXX-rks: unregister table?
+ */
+ return SNMP_ERR_GENERR;
+ }
+
+ DEBUGIF("helper:table:req") {
+ DEBUGMSGTL(("helper:table:req",
+ "Got request for handler %s: base oid:",
+ handler->handler_name));
+ DEBUGMSGOID(("helper:table:req", reginfo->rootoid,
+ reginfo->rootoid_len));
+ DEBUGMSG(("helper:table:req", "\n"));
+ }
+
+ /*
+ * if the agent request info has a state reference, then this is a
+ * later pass of a set request and we can skip all the lookup stuff.
+ *
+ * xxx-rks: this might break for handlers which only handle one varbind
+ * at a time... those handlers should not save data by their handler_name
+ * in the netsnmp_agent_request_info.
+ */
+ if (netsnmp_agent_get_list_data(reqinfo, handler->next->handler_name)) {
+ if (MODE_IS_SET(reqinfo->mode)) {
+ return netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ } else {
+/** XXX-rks: memory leak. add cleanup handler? */
+ netsnmp_free_agent_data_sets(reqinfo);
+ }
+ }
+
+ if ( MODE_IS_SET(reqinfo->mode) &&
+ (reqinfo->mode != MODE_SET_RESERVE1)) {
+ /*
+ * for later set modes, we can skip all the index parsing,
+ * and we always need to let child handlers have a chance
+ * to clean up, if they were called in the first place (i.e. have
+ * a valid table info pointer).
+ */
+ if(NULL == netsnmp_extract_table_info(requests)) {
+ DEBUGMSGTL(("table:helper","no table info for set - skipping\n"));
+ }
+ else
+ need_processing = 1;
+ }
+ else {
+ /*
+ * for RESERVE1 and GETS, only continue if we have at least
+ * one valid request.
+ */
+
+ /*
+ * loop through requests
+ */
+
+ for (request = requests; request; request = request->next) {
+ netsnmp_variable_list *var = request->requestvb;
+
+ DEBUGMSGOID(("verbose:table", var->name, var->name_length));
+ DEBUGMSG(("verbose:table", "\n"));
+
+ if (request->processed) {
+ DEBUGMSG(("verbose:table", "already processed\n"));
+ continue;
+ }
+ netsnmp_assert(request->status == SNMP_ERR_NOERROR);
+
+ /*
+ * this should probably be handled further up
+ */
+ if ((reqinfo->mode == MODE_GET) && (var->type != ASN_NULL)) {
+ /*
+ * valid request if ASN_NULL
+ */
+ DEBUGMSGTL(("helper:table",
+ " GET var type is not ASN_NULL\n"));
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGTYPE);
+ continue;
+ }
+
+ if (reqinfo->mode == MODE_SET_RESERVE1) {
+ DEBUGIF("helper:table:set") {
+ u_char *buf = NULL;
+ size_t buf_len = 0, out_len = 0;
+ DEBUGMSGTL(("helper:table:set", " SET_REQUEST for OID: "));
+ DEBUGMSGOID(("helper:table:set", var->name, var->name_length));
+ out_len = 0;
+ if (sprint_realloc_by_type(&buf, &buf_len, &out_len, 1,
+ var, 0, 0, 0)) {
+ DEBUGMSG(("helper:table:set"," type=%d(%02x), value=%s\n",
+ var->type, var->type, buf));
+ } else {
+ if (buf != NULL) {
+ DEBUGMSG(("helper:table:set",
+ " type=%d(%02x), value=%s [TRUNCATED]\n",
+ var->type, var->type, buf));
+ } else {
+ DEBUGMSG(("helper:table:set",
+ " type=%d(%02x), value=[NIL] [TRUNCATED]\n",
+ var->type, var->type));
+ }
+ }
+ if (buf != NULL) {
+ free(buf);
+ }
+ }
+ }
+
+ /*
+ * check to make sure its in table range
+ */
+
+ out_of_range = 0;
+ /*
+ * if our root oid is > var->name and this is not a GETNEXT,
+ * then the oid is out of range. (only compare up to shorter
+ * length)
+ */
+ if (reginfo->rootoid_len > var->name_length)
+ tmp_len = var->name_length;
+ else
+ tmp_len = reginfo->rootoid_len;
+ if (snmp_oid_compare(reginfo->rootoid, reginfo->rootoid_len,
+ var->name, tmp_len) > 0) {
+ if (reqinfo->mode == MODE_GETNEXT) {
+ if (var->name != var->name_loc)
+ SNMP_FREE(var->name);
+ snmp_set_var_objid(var, reginfo->rootoid,
+ reginfo->rootoid_len);
+ } else {
+ DEBUGMSGTL(("helper:table", " oid is out of range.\n"));
+ out_of_range = 1;
+ }
+ }
+ /*
+ * if var->name is longer than the root, make sure it is
+ * table.1 (table.ENTRY).
+ */
+ else if ((var->name_length > reginfo->rootoid_len) &&
+ (var->name[reginfo->rootoid_len] != 1)) {
+ if ((var->name[reginfo->rootoid_len] < 1) &&
+ (reqinfo->mode == MODE_GETNEXT)) {
+ var->name[reginfo->rootoid_len] = 1;
+ var->name_length = reginfo->rootoid_len;
+ } else {
+ out_of_range = 1;
+ DEBUGMSGTL(("helper:table", " oid is out of range.\n"));
+ }
+ }
+ /*
+ * if it is not in range, then mark it in the request list
+ * because we can't process it, and set an error so
+ * nobody else wastes time trying to process it either.
+ */
+ if (out_of_range) {
+ DEBUGMSGTL(("helper:table", " Not processed: "));
+ DEBUGMSGOID(("helper:table", var->name, var->name_length));
+ DEBUGMSG(("helper:table", "\n"));
+
+ /*
+ * Reject requests of the form 'myTable.N' (N != 1)
+ */
+ if (reqinfo->mode == MODE_SET_RESERVE1)
+ table_helper_cleanup(reqinfo, request,
+ SNMP_ERR_NOTWRITABLE);
+ else if (reqinfo->mode == MODE_GET)
+ table_helper_cleanup(reqinfo, request,
+ SNMP_NOSUCHOBJECT);
+ continue;
+ }
+
+
+ /*
+ * Check column ranges; set-up to pull out indexes from OID.
+ */
+
+ incomplete = 0;
+ tbl_req_info = netsnmp_extract_table_info(request);
+ if (NULL == tbl_req_info) {
+ tbl_req_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_request_info);
+ tbl_req_info->reg_info = tbl_info;
+ tbl_req_info->indexes = snmp_clone_varbind(tbl_info->indexes);
+ tbl_req_info->number_indexes = 0; /* none yet */
+ netsnmp_request_add_list_data(request,
+ netsnmp_create_data_list
+ (TABLE_HANDLER_NAME,
+ (void *) tbl_req_info,
+ table_data_free_func));
+ } else {
+ DEBUGMSGTL(("helper:table", " using existing tbl_req_info\n "));
+ }
+
+ /*
+ * do we have a column?
+ */
+ if (var->name_length > oid_column_pos) {
+ /*
+ * oid is long enough to contain COLUMN info
+ */
+ DEBUGMSGTL(("helper:table:col", " have at least a column (%d)\n",
+ var->name[oid_column_pos]));
+ if (var->name[oid_column_pos] < tbl_info->min_column) {
+ DEBUGMSGTL(("helper:table:col",
+ " but it's less than min (%d)\n",
+ tbl_info->min_column));
+ if (reqinfo->mode == MODE_GETNEXT) {
+ /*
+ * fix column, truncate useless column info
+ */
+ var->name_length = oid_column_pos;
+ tbl_req_info->colnum = tbl_info->min_column;
+ } else
+ out_of_range = 1;
+ } else if (var->name[oid_column_pos] > tbl_info->max_column)
+ out_of_range = 1;
+ else
+ tbl_req_info->colnum = var->name[oid_column_pos];
+
+ if (out_of_range) {
+ /*
+ * this is out of range... remove from requests, free
+ * memory
+ */
+ DEBUGMSGTL(("helper:table",
+ " oid is out of range. Not processed: "));
+ DEBUGMSGOID(("helper:table", var->name, var->name_length));
+ DEBUGMSG(("helper:table", "\n"));
+
+ /*
+ * Reject requests of the form 'myEntry.N' (invalid N)
+ */
+ if (reqinfo->mode == MODE_SET_RESERVE1)
+ table_helper_cleanup(reqinfo, request,
+ SNMP_ERR_NOTWRITABLE);
+ else if (reqinfo->mode == MODE_GET)
+ table_helper_cleanup(reqinfo, request,
+ SNMP_NOSUCHOBJECT);
+ continue;
+ }
+ /*
+ * use column verification
+ */
+ else if (tbl_info->valid_columns) {
+ tbl_req_info->colnum =
+ netsnmp_closest_column(var->name[oid_column_pos],
+ tbl_info->valid_columns);
+ DEBUGMSGTL(("helper:table:col", " closest column is %d\n",
+ tbl_req_info->colnum));
+ /*
+ * xxx-rks: document why the continue...
+ */
+ if (tbl_req_info->colnum == 0)
+ continue;
+ if (tbl_req_info->colnum != var->name[oid_column_pos]) {
+ DEBUGMSGTL(("helper:table:col",
+ " which doesn't match req %d - truncating index info\n",
+ var->name[oid_column_pos]));
+ /*
+ * different column! truncate useless index info
+ */
+ var->name_length = oid_column_pos + 1; /* pos is 0 based */
+ }
+ }
+ /*
+ * var->name_length may have changed - check again
+ */
+ if ((int)var->name_length <= oid_index_pos) { /* pos is 0 based */
+ DEBUGMSGTL(("helper:table", " not enough for indexes\n"));
+ tbl_req_info->index_oid_len = 0; /** none available */
+ } else {
+ /*
+ * oid is long enough to contain INDEX info
+ */
+ tbl_req_info->index_oid_len =
+ var->name_length - oid_index_pos;
+ DEBUGMSGTL(("helper:table", " have %d bytes of index\n",
+ tbl_req_info->index_oid_len));
+ netsnmp_assert(tbl_req_info->index_oid_len < MAX_OID_LEN);
+ memcpy(tbl_req_info->index_oid, &var->name[oid_index_pos],
+ tbl_req_info->index_oid_len * sizeof(oid));
+ tmp_name = tbl_req_info->index_oid;
+ }
+ } else if (reqinfo->mode == MODE_GETNEXT ||
+ reqinfo->mode == MODE_GETBULK) {
+ /*
+ * oid is NOT long enough to contain column or index info, so start
+ * at the minimum column. Set index oid len to 0 because we don't
+ * have any index info in the OID.
+ */
+ DEBUGMSGTL(("helper:table", " no column/index in request\n"));
+ tbl_req_info->index_oid_len = 0;
+ tbl_req_info->colnum = tbl_info->min_column;
+ } else {
+ /*
+ * oid is NOT long enough to contain index info,
+ * so we can't do anything with it.
+ *
+ * Reject requests of the form 'myTable' or 'myEntry'
+ */
+ if (reqinfo->mode == MODE_GET ) {
+ table_helper_cleanup(reqinfo, request, SNMP_NOSUCHOBJECT);
+ } else if (reqinfo->mode == MODE_SET_RESERVE1 ) {
+ table_helper_cleanup(reqinfo, request, SNMP_ERR_NOTWRITABLE);
+ }
+ continue;
+ }
+
+ /*
+ * set up tmp_len to be the number of OIDs we have beyond the column;
+ * these should be the index(s) for the table. If the index_oid_len
+ * is 0, set tmp_len to -1 so that when we try to parse the index below,
+ * we just zero fill everything.
+ */
+ if (tbl_req_info->index_oid_len == 0) {
+ incomplete = 1;
+ tmp_len = -1;
+ } else
+ tmp_len = tbl_req_info->index_oid_len;
+
+
+ /*
+ * for each index type, try to extract the index from var->name
+ */
+ DEBUGMSGTL(("helper:table", " looking for %d indexes\n",
+ tbl_info->number_indexes));
+ for (tmp_idx = 0, vb = tbl_req_info->indexes;
+ tmp_idx < tbl_info->number_indexes;
+ ++tmp_idx, vb = vb->next_variable) {
+ if (incomplete && tmp_len) {
+ /*
+ * incomplete/illegal OID, set up dummy 0 to parse
+ */
+ DEBUGMSGTL(("helper:table",
+ " oid indexes not complete: "));
+ DEBUGMSGOID(("helper:table", var->name, var->name_length));
+ DEBUGMSG(("helper:table", "\n"));
+
+ /*
+ * no sense in trying anymore if this is a GET/SET.
+ *
+ * Reject requests of the form 'myObject' (no instance)
+ */
+ if (reqinfo->mode != MODE_GETNEXT) {
+ table_helper_cleanup(reqinfo, requests,
+ SNMP_NOSUCHINSTANCE);
+ cleaned_up = 1;
+ }
+ tmp_len = 0;
+ tmp_name = (oid *) & tmp_len;
+ break;
+ }
+ /*
+ * try and parse current index
+ */
+ if (parse_one_oid_index(&tmp_name, &tmp_len,
+ vb, 1) != SNMPERR_SUCCESS) {
+ incomplete = 1;
+ tmp_len = -1; /* is this necessary? Better safe than
+ * sorry */
+ } else {
+ /*
+ * do not count incomplete indexes
+ */
+ DEBUGMSGTL(("helper:table", " got 1 (incomplete=%d)\n",
+ incomplete));
+ if (incomplete)
+ continue;
+ ++tbl_req_info->number_indexes; /** got one ok */
+ if (tmp_len <= 0) {
+ incomplete = 1;
+ tmp_len = -1; /* is this necessary? Better safe
+ * than sorry */
+ }
+ }
+ } /** for loop */
+
+ DEBUGIF("helper:table:results") {
+ DEBUGMSGTL(("helper:table:results", " found %d indexes\n",
+ tbl_req_info->number_indexes));
+ if (!cleaned_up) {
+ unsigned int count;
+ u_char *buf = NULL;
+ size_t buf_len = 0, out_len = 0;
+ DEBUGMSGTL(("helper:table:results",
+ " column: %d, indexes: %d",
+ tbl_req_info->colnum,
+ tbl_req_info->number_indexes));
+ for (vb = tbl_req_info->indexes, count = 0;
+ vb && count < tbl_req_info->number_indexes;
+ count++, vb = vb->next_variable) {
+ out_len = 0;
+ if (sprint_realloc_by_type(&buf, &buf_len, &out_len, 1,
+ vb, 0, 0, 0)) {
+ DEBUGMSG(("helper:table:results",
+ " index: type=%d(%02x), value=%s",
+ vb->type, vb->type, buf));
+ } else {
+ if (buf != NULL) {
+ DEBUGMSG(("helper:table:results",
+ " index: type=%d(%02x), value=%s [TRUNCATED]",
+ vb->type, vb->type, buf));
+ } else {
+ DEBUGMSG(("helper:table:results",
+ " index: type=%d(%02x), value=[NIL] [TRUNCATED]",
+ vb->type, vb->type));
+ }
+ }
+ }
+ if (buf != NULL) {
+ free(buf);
+ }
+ DEBUGMSG(("helper:table:results", "\n"));
+ }
+ }
+
+
+ /*
+ * do we have sufficent index info to continue?
+ */
+
+ if ((reqinfo->mode != MODE_GETNEXT) &&
+ ((tbl_req_info->number_indexes != tbl_info->number_indexes) ||
+ (tmp_len != -1))) {
+ DEBUGMSGTL(("helper:table",
+ "invalid index(es) for table - skipping\n"));
+ table_helper_cleanup(reqinfo, request, SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ netsnmp_assert(request->status == SNMP_ERR_NOERROR);
+
+ ++need_processing;
+
+ } /* for each request */
+ }
+
+ /*
+ * bail if there is nothing for our child handlers
+ */
+ if (0 == need_processing)
+ return status;
+
+ /*
+ * call our child access function
+ */
+ status =
+ netsnmp_call_next_handler(handler, reginfo, reqinfo, requests);
+
+ /*
+ * check for sparse tables
+ */
+ if (reqinfo->mode == MODE_GETNEXT)
+ sparse_table_helper_handler( handler, reginfo, reqinfo, requests );
+
+ return status;
+}
+
+#define SPARSE_TABLE_HANDLER_NAME "sparse_table"
+
+/** implements the sparse table helper handler
+ * @internal
+ *
+ * @note
+ * This function is static to prevent others from calling it
+ * directly. It it automatically called by the table helper,
+ *
+ */
+static int
+sparse_table_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int status = SNMP_ERR_NOERROR;
+ netsnmp_request_info *request;
+ oid coloid[MAX_OID_LEN];
+ netsnmp_table_request_info *table_info;
+
+ /*
+ * since we don't call child handlers, warn if one was registered
+ * beneath us. A special exception for the table helper, which calls
+ * the handler directly. Use handle custom flag to only log once.
+ */
+ if((table_helper_handler != handler->access_method) &&
+ (NULL != handler->next)) {
+ /*
+ * always warn if called without our own handler. If we
+ * have our own handler, use custom bit 1 to only log once.
+ */
+ if((sparse_table_helper_handler != handler->access_method) ||
+ !(handler->flags & MIB_HANDLER_CUSTOM1)) {
+ snmp_log(LOG_WARNING, "handler (%s) registered after sparse table "
+ "hander will not be called\n",
+ handler->next->handler_name ?
+ handler->next->handler_name : "" );
+ if(sparse_table_helper_handler == handler->access_method)
+ handler->flags |= MIB_HANDLER_CUSTOM1;
+ }
+ }
+
+ if (reqinfo->mode == MODE_GETNEXT) {
+ for(request = requests ; request; request = request->next) {
+ if ((request->requestvb->type == ASN_NULL && request->processed) ||
+ request->delegated)
+ continue;
+ if (request->requestvb->type == SNMP_NOSUCHINSTANCE) {
+ /*
+ * get next skipped this value for this column, we
+ * need to keep searching forward
+ */
+ DEBUGMSGT(("sparse", "retry for NOSUCHINSTANCE\n"));
+ request->requestvb->type = ASN_PRIV_RETRY;
+ }
+ if (request->requestvb->type == SNMP_NOSUCHOBJECT ||
+ request->requestvb->type == SNMP_ENDOFMIBVIEW) {
+ /*
+ * get next has completely finished with this column,
+ * so we need to try with the next column (if any)
+ */
+ DEBUGMSGT(("sparse", "retry for NOSUCHOBJECT\n"));
+ table_info = netsnmp_extract_table_info(request);
+ table_info->colnum = netsnmp_table_next_column(table_info);
+ if (0 != table_info->colnum) {
+ memcpy(coloid, reginfo->rootoid,
+ reginfo->rootoid_len * sizeof(oid));
+ coloid[reginfo->rootoid_len] = 1; /* table.entry node */
+ coloid[reginfo->rootoid_len+1] = table_info->colnum;
+ snmp_set_var_objid(request->requestvb,
+ coloid, reginfo->rootoid_len + 2);
+
+ request->requestvb->type = ASN_PRIV_RETRY;
+ }
+ else {
+ /*
+ * If we don't have column info, reset to null so
+ * the agent will move on to the next table.
+ */
+ request->requestvb->type = ASN_NULL;
+ }
+ }
+ }
+ }
+ return status;
+}
+
+/** create sparse table handler
+ */
+netsnmp_mib_handler *
+netsnmp_sparse_table_handler_get(void)
+{
+ return netsnmp_create_handler(SPARSE_TABLE_HANDLER_NAME,
+ sparse_table_helper_handler);
+}
+
+/** creates a table handler given the netsnmp_table_registration_info object,
+ * inserts it into the request chain and then calls
+ * netsnmp_register_handler() to register the table into the agent.
+ */
+int
+netsnmp_sparse_table_register(netsnmp_handler_registration *reginfo,
+ netsnmp_table_registration_info *tabreq)
+{
+ netsnmp_inject_handler(reginfo,
+ netsnmp_create_handler(SPARSE_TABLE_HANDLER_NAME,
+ sparse_table_helper_handler));
+ netsnmp_inject_handler(reginfo, netsnmp_get_table_handler(tabreq));
+ return netsnmp_register_handler(reginfo);
+}
+
+
+/** Builds the result to be returned to the agent given the table information.
+ * Use this function to return results from lowel level handlers to
+ * the agent. It takes care of building the proper resulting oid
+ * (containing proper indexing) and inserts the result value into the
+ * returning varbind.
+ */
+int
+netsnmp_table_build_result(netsnmp_handler_registration *reginfo,
+ netsnmp_request_info *reqinfo,
+ netsnmp_table_request_info *table_info,
+ u_char type, u_char * result, size_t result_len)
+{
+
+ netsnmp_variable_list *var;
+
+ if (!reqinfo || !table_info)
+ return SNMPERR_GENERR;
+
+ var = reqinfo->requestvb;
+
+ if (var->name != var->name_loc)
+ free(var->name);
+ var->name = NULL;
+
+ if (netsnmp_table_build_oid(reginfo, reqinfo, table_info) !=
+ SNMPERR_SUCCESS)
+ return SNMPERR_GENERR;
+
+ snmp_set_var_typed_value(var, type, result, result_len);
+
+ return SNMPERR_SUCCESS;
+}
+
+
+/** given a registration info object, a request object and the table
+ * info object it builds the request->requestvb->name oid from the
+ * index values and column information found in the table_info
+ * object. Index values are extracted from the table_info varbinds.
+ */
+int
+netsnmp_table_build_oid(netsnmp_handler_registration *reginfo,
+ netsnmp_request_info *reqinfo,
+ netsnmp_table_request_info *table_info)
+{
+ oid tmpoid[MAX_OID_LEN];
+ netsnmp_variable_list *var;
+
+ if (!reginfo || !reqinfo || !table_info)
+ return SNMPERR_GENERR;
+
+ /*
+ * xxx-rks: inefficent. we do a copy here, then build_oid does it
+ * again. either come up with a new utility routine, or
+ * do some hijinks here to eliminate extra copy.
+ * Probably could make sure all callers have the
+ * index & variable list updated, and use
+ * netsnmp_table_build_oid_from_index() instead of all this.
+ */
+ memcpy(tmpoid, reginfo->rootoid, reginfo->rootoid_len * sizeof(oid));
+ tmpoid[reginfo->rootoid_len] = 1; /** .Entry */
+ tmpoid[reginfo->rootoid_len + 1] = table_info->colnum; /** .column */
+
+ var = reqinfo->requestvb;
+ if (build_oid(&var->name, &var->name_length,
+ tmpoid, reginfo->rootoid_len + 2, table_info->indexes)
+ != SNMPERR_SUCCESS)
+ return SNMPERR_GENERR;
+
+ return SNMPERR_SUCCESS;
+}
+
+/** given a registration info object, a request object and the table
+ * info object it builds the request->requestvb->name oid from the
+ * index values and column information found in the table_info
+ * object. Index values are extracted from the table_info index oid.
+ */
+int
+netsnmp_table_build_oid_from_index(netsnmp_handler_registration *reginfo,
+ netsnmp_request_info *reqinfo,
+ netsnmp_table_request_info *table_info)
+{
+ oid tmpoid[MAX_OID_LEN];
+ netsnmp_variable_list *var;
+ int len;
+
+ if (!reginfo || !reqinfo || !table_info)
+ return SNMPERR_GENERR;
+
+ var = reqinfo->requestvb;
+ len = reginfo->rootoid_len;
+ memcpy(tmpoid, reginfo->rootoid, len * sizeof(oid));
+ tmpoid[len++] = 1; /* .Entry */
+ tmpoid[len++] = table_info->colnum; /* .column */
+ memcpy(&tmpoid[len], table_info->index_oid,
+ table_info->index_oid_len * sizeof(oid));
+ len += table_info->index_oid_len;
+ if (var->name && var->name != var->name_loc)
+ SNMP_FREE(var->name);
+ snmp_clone_mem((void **) &var->name, tmpoid, len * sizeof(oid));
+ var->name_length = len;
+
+ return SNMPERR_SUCCESS;
+}
+
+/** parses an OID into table indexses */
+int
+netsnmp_update_variable_list_from_index(netsnmp_table_request_info *tri)
+{
+ if (!tri)
+ return SNMPERR_GENERR;
+
+ /*
+ * free any existing allocated memory, then parse oid into varbinds
+ */
+ snmp_reset_var_buffers( tri->indexes);
+
+ return parse_oid_indexes(tri->index_oid, tri->index_oid_len,
+ tri->indexes);
+}
+
+/** builds an oid given a set of indexes. */
+int
+netsnmp_update_indexes_from_variable_list(netsnmp_table_request_info *tri)
+{
+ if (!tri)
+ return SNMPERR_GENERR;
+
+ return build_oid_noalloc(tri->index_oid, sizeof(tri->index_oid),
+ &tri->index_oid_len, NULL, 0, tri->indexes);
+}
+
+/**
+ * checks the original request against the current data being passed in if
+ * its greater than the request oid but less than the current valid
+ * return, set the current valid return to the new value.
+ *
+ * returns 1 if outvar was replaced with the oid from newvar (success).
+ * returns 0 if not.
+ */
+int
+netsnmp_check_getnext_reply(netsnmp_request_info *request,
+ oid * prefix,
+ size_t prefix_len,
+ netsnmp_variable_list * newvar,
+ netsnmp_variable_list ** outvar)
+{
+ oid myname[MAX_OID_LEN];
+ size_t myname_len;
+
+ build_oid_noalloc(myname, MAX_OID_LEN, &myname_len,
+ prefix, prefix_len, newvar);
+ /*
+ * is the build of the new indexes less than our current result
+ */
+ if ((!(*outvar) || snmp_oid_compare(myname + prefix_len,
+ myname_len - prefix_len,
+ (*outvar)->name + prefix_len,
+ (*outvar)->name_length -
+ prefix_len) < 0)) {
+ /*
+ * and greater than the requested oid
+ */
+ if (snmp_oid_compare(myname, myname_len,
+ request->requestvb->name,
+ request->requestvb->name_length) > 0) {
+ /*
+ * the new result must be better than the old
+ */
+#ifdef ONLY_WORKS_WITH_ONE_VARBIND
+ if (!*outvar)
+ *outvar = snmp_clone_varbind(newvar);
+ else
+ /*
+ * TODO: walk the full varbind list, setting
+ * *all* the values - not just the first.
+ */
+ snmp_set_var_typed_value(*outvar, newvar->type,
+ newvar->val.string, newvar->val_len);
+#else /* Interim replacement approach - less efficient, but it works! */
+ if (*outvar)
+ snmp_free_varbind(*outvar);
+ *outvar = snmp_clone_varbind(newvar);
+#endif
+ snmp_set_var_objid(*outvar, myname, myname_len);
+
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/** @} */
+
+/*
+ * internal routines
+ */
+void
+table_data_free_func(void *data)
+{
+ netsnmp_table_request_info *info = (netsnmp_table_request_info *) data;
+ if (!info)
+ return;
+ snmp_free_varbind(info->indexes);
+ free(info);
+}
+
+
+
+static void
+table_helper_cleanup(netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *request, int status)
+{
+ netsnmp_set_request_error(reqinfo, request, status);
+ netsnmp_free_request_data_sets(request);
+ if (!request)
+ return;
+ request->parent_data = NULL;
+}
+
+
+/*
+ * find the closest column to current (which may be current).
+ *
+ * called when a table runs out of rows for column X. This
+ * function is called with current = X + 1, to verify that
+ * X + 1 is a valid column, or find the next closest column if not.
+ *
+ * All list types should be sorted, lowest to highest.
+ */
+unsigned int
+netsnmp_closest_column(unsigned int current,
+ netsnmp_column_info *valid_columns)
+{
+ unsigned int closest = 0;
+ int idx;
+
+ if (valid_columns == NULL)
+ return 0;
+
+ for( ; valid_columns; valid_columns = valid_columns->next) {
+
+ if (valid_columns->isRange) {
+ /*
+ * if current < low range, it might be closest.
+ * otherwise, if it's < high range, current is in
+ * the range, and thus is an exact match.
+ */
+ if (current < valid_columns->details.range[0]) {
+ if ( (valid_columns->details.range[0] < closest) ||
+ (0 == closest)) {
+ closest = valid_columns->details.range[0];
+ }
+ } else if (current <= valid_columns->details.range[1]) {
+ closest = current;
+ break; /* can not get any closer! */
+ }
+
+ } /* range */
+ else { /* list */
+ /*
+ * if current < first item, no need to iterate over list.
+ * that item is either closest, or not.
+ */
+ if (current < valid_columns->details.list[0]) {
+ if ((valid_columns->details.list[0] < closest) ||
+ (0 == closest))
+ closest = valid_columns->details.list[0];
+ continue;
+ }
+
+ /** if current > last item in list, no need to iterate */
+ if (current >
+ valid_columns->details.list[(int)valid_columns->list_count - 1])
+ continue; /* not in list range. */
+
+ /** skip anything less than current*/
+ for (idx = 0; valid_columns->details.list[idx] < current; ++idx)
+ ;
+
+ /** check for exact match */
+ if (current == valid_columns->details.list[idx]) {
+ closest = current;
+ break; /* can not get any closer! */
+ }
+
+ /** list[idx] > current; is it < closest? */
+ if ((valid_columns->details.list[idx] < closest) ||
+ (0 == closest))
+ closest = valid_columns->details.list[idx];
+
+ } /* list */
+ } /* for */
+
+ return closest;
+}
+
+/**
+ * This function can be used to setup the table's definition within
+ * your module's initialize function, it takes a variable index parameter list
+ * for example: the table_info structure is followed by two integer index types
+ * netsnmp_table_helper_add_indexes(
+ * table_info,
+ * ASN_INTEGER,
+ * ASN_INTEGER,
+ * 0);
+ *
+ * @param tinfo is a pointer to a netsnmp_table_registration_info struct.
+ * The table handler needs to know up front how your table is structured.
+ * A netsnmp_table_registeration_info structure that is
+ * passed to the table handler should contain the asn index types for the
+ * table as well as the minimum and maximum column that should be used.
+ *
+ * @return void
+ *
+ */
+void
+#if HAVE_STDARG_H
+netsnmp_table_helper_add_indexes(netsnmp_table_registration_info *tinfo,
+ ...)
+#else
+netsnmp_table_helper_add_indexes(va_alist)
+ va_dcl
+#endif
+{
+ va_list debugargs;
+ int type;
+
+#if HAVE_STDARG_H
+ va_start(debugargs, tinfo);
+#else
+ netsnmp_table_registration_info *tinfo;
+
+ va_start(debugargs);
+ tinfo = va_arg(debugargs, netsnmp_table_registration_info *);
+#endif
+
+ while ((type = va_arg(debugargs, int)) != 0) {
+ netsnmp_table_helper_add_index(tinfo, type);
+ }
+
+ va_end(debugargs);
+}
+
+static void
+_row_stash_data_list_free(void *ptr) {
+ netsnmp_oid_stash_node **tmp = (netsnmp_oid_stash_node **)ptr;
+ netsnmp_oid_stash_free(tmp, NULL);
+ free(ptr);
+}
+
+/** returns a row-wide place to store data in.
+ @todo This function will likely change to add free pointer functions. */
+netsnmp_oid_stash_node **
+netsnmp_table_get_or_create_row_stash(netsnmp_agent_request_info *reqinfo,
+ const u_char * storage_name)
+{
+ netsnmp_oid_stash_node **stashp = NULL;
+ stashp = (netsnmp_oid_stash_node **)
+ netsnmp_agent_get_list_data(reqinfo, storage_name);
+
+ if (!stashp) {
+ /*
+ * hasn't be created yet. we create it here.
+ */
+ stashp = SNMP_MALLOC_TYPEDEF(netsnmp_oid_stash_node *);
+
+ if (!stashp)
+ return NULL; /* ack. out of mem */
+
+ netsnmp_agent_add_list_data(reqinfo,
+ netsnmp_create_data_list(storage_name,
+ stashp,
+ _row_stash_data_list_free));
+ }
+ return stashp;
+}
+
+/*
+ * advance the table info colnum to the next column, or 0 if there are no more
+ *
+ * @return new column, or 0 if there are no more
+ */
+unsigned int
+netsnmp_table_next_column(netsnmp_table_request_info *table_info)
+{
+ if (NULL == table_info)
+ return 0;
+
+ /*
+ * try and validate next column
+ */
+ if (table_info->reg_info->valid_columns)
+ return netsnmp_closest_column(table_info->colnum + 1,
+ table_info->reg_info->valid_columns);
+
+ /*
+ * can't validate. assume 1..max_column are valid
+ */
+ if (table_info->colnum < table_info->reg_info->max_column)
+ return table_info->colnum + 1;
+
+ return 0; /* out of range */
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/table_array.c b/cleopatre/application/spidnetsnmp/agent/helpers/table_array.c
new file mode 100644
index 0000000000..589bc3b776
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/table_array.c
@@ -0,0 +1,890 @@
+/*
+ * table_array.c
+ * $Id: table_array.c 14356 2006-03-08 22:48:18Z rstory $
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/table.h>
+#include <net-snmp/agent/table_array.h>
+#include <net-snmp/library/container.h>
+#include <net-snmp/library/snmp_assert.h>
+
+/*
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_BEGIN -1
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_RESERVE1 0
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_RESERVE2 1
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_ACTION 2
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_COMMIT 3
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_FREE 4
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_UNDO 5
+ */
+
+static const char *mode_name[] = {
+ "Reserve 1",
+ "Reserve 2",
+ "Action",
+ "Commit",
+ "Free",
+ "Undo"
+};
+
+/*
+ * PRIVATE structure for holding important info for each table.
+ */
+typedef struct table_container_data_s {
+
+ /** registration info for the table */
+ netsnmp_table_registration_info *tblreg_info;
+
+ /** container for the table rows */
+ netsnmp_container *table;
+
+ /*
+ * mutex_type lock;
+ */
+
+ /** do we want to group rows with the same index
+ * together when calling callbacks? */
+ int group_rows;
+
+ /** callbacks for this table */
+ netsnmp_table_array_callbacks *cb;
+
+} table_container_data;
+
+/** @defgroup table_array table_array
+ * Helps you implement a table when data can be stored locally. The data is stored in a sorted array, using a binary search for lookups.
+ * @ingroup table
+ *
+ * The table_array handler is used (automatically) in conjuntion
+ * with the @link table table@endlink handler. It is primarily
+ * intended to be used with the mib2c configuration file
+ * mib2c.array-user.conf.
+ *
+ * The code generated by mib2c is useful when you have control of
+ * the data for each row. If you cannot control when rows are added
+ * and deleted (or at least be notified of changes to row data),
+ * then this handler is probably not for you.
+ *
+ * This handler makes use of callbacks (function pointers) to
+ * handle various tasks. Code is generated for each callback,
+ * but will need to be reviewed and flushed out by the user.
+ *
+ * NOTE NOTE NOTE: Once place where mib2c is somewhat lacking
+ * is with regards to tables with external indices. If your
+ * table makes use of one or more external indices, please
+ * review the generated code very carefully for comments
+ * regarding external indices.
+ *
+ * NOTE NOTE NOTE: This helper, the API and callbacks are still
+ * being tested and may change.
+ *
+ * The generated code will define a structure for storage of table
+ * related data. This structure must be used, as it contains the index
+ * OID for the row, which is used for keeping the array sorted. You can
+ * add addition fields or data to the structure for your own use.
+ *
+ * The generated code will also have code to handle SNMP-SET processing.
+ * If your table does not support any SET operations, simply comment
+ * out the \#define \<PREFIX\>_SET_HANDLING (where \<PREFIX\> is your
+ * table name) in the header file.
+ *
+ * SET processing modifies the row in-place. The duplicate_row
+ * callback will be called to save a copy of the original row.
+ * In the event of a failure before the commite phase, the
+ * row_copy callback will be called to restore the original row
+ * from the copy.
+ *
+ * Code will be generated to handle row creation. This code may be
+ * disabled by commenting out the \#define \<PREFIX\>_ROW_CREATION
+ * in the header file.
+ *
+ * If your table contains a RowStatus object, by default the
+ * code will not allow object in an active row to be modified.
+ * To allow active rows to be modified, remove the comment block
+ * around the \#define \<PREFIX\>_CAN_MODIFY_ACTIVE_ROW in the header
+ * file.
+ *
+ * Code will be generated to maintain a secondary index for all
+ * rows, stored in a binary tree. This is very useful for finding
+ * rows by a key other than the OID index. By default, the functions
+ * for maintaining this tree will be based on a character string.
+ * NOTE: this will likely be made into a more generic mechanism,
+ * using new callback methods, in the near future.
+ *
+ * The generated code contains many TODO comments. Make sure you
+ * check each one to see if it applies to your code. Examples include
+ * checking indices for syntax (ranges, etc), initializing default
+ * values in newly created rows, checking for row activation and
+ * deactivation requirements, etc.
+ *
+ * @{
+ */
+
+/**********************************************************************
+ **********************************************************************
+ * *
+ * *
+ * PUBLIC Registration functions *
+ * *
+ * *
+ **********************************************************************
+ **********************************************************************/
+/** register specified callbacks for the specified table/oid. If the
+ group_rows parameter is set, the row related callbacks will be
+ called once for each unique row index. Otherwise, each callback
+ will be called only once, for all objects.
+*/
+int
+netsnmp_table_container_register(netsnmp_handler_registration *reginfo,
+ netsnmp_table_registration_info *tabreg,
+ netsnmp_table_array_callbacks *cb,
+ netsnmp_container *container,
+ int group_rows)
+{
+ table_container_data *tad = SNMP_MALLOC_TYPEDEF(table_container_data);
+ if (!tad)
+ return SNMPERR_GENERR;
+ tad->tblreg_info = tabreg; /* we need it too, but it really is not ours */
+
+ if (!cb) {
+ snmp_log(LOG_ERR, "table_array registration with no callbacks\n" );
+ free(tad); /* SNMP_FREE is overkill for local var */
+ return SNMPERR_GENERR;
+ }
+ /*
+ * check for required callbacks
+ */
+ if ((cb->can_set &&
+ ((NULL==cb->duplicate_row) || (NULL==cb->delete_row) ||
+ (NULL==cb->row_copy)) )) {
+ snmp_log(LOG_ERR, "table_array registration with incomplete "
+ "callback structure.\n");
+ free(tad); /* SNMP_FREE is overkill for local var */
+ return SNMPERR_GENERR;
+ }
+
+ if (NULL==container) {
+ tad->table = netsnmp_container_find("table_array");
+ snmp_log(LOG_ERR, "table_array couldn't allocate container\n" );
+ free(tad); /* SNMP_FREE is overkill for local var */
+ return SNMPERR_GENERR;
+ } else
+ tad->table = container;
+ if (NULL==tad->table->compare)
+ tad->table->compare = netsnmp_compare_netsnmp_index;
+ if (NULL==tad->table->ncompare)
+ tad->table->ncompare = netsnmp_ncompare_netsnmp_index;
+
+ tad->cb = cb;
+
+ reginfo->handler->myvoid = tad;
+
+ return netsnmp_register_table(reginfo, tabreg);
+}
+
+int
+netsnmp_table_array_register(netsnmp_handler_registration *reginfo,
+ netsnmp_table_registration_info *tabreg,
+ netsnmp_table_array_callbacks *cb,
+ netsnmp_container *container,
+ int group_rows)
+{
+ netsnmp_inject_handler(reginfo,
+ netsnmp_create_handler(reginfo->handlerName,
+ netsnmp_table_array_helper_handler));
+ return netsnmp_table_container_register(reginfo, tabreg, cb,
+ container, group_rows);
+}
+
+/** find the handler for the table_array helper. */
+netsnmp_mib_handler *
+netsnmp_find_table_array_handler(netsnmp_handler_registration *reginfo)
+{
+ netsnmp_mib_handler *mh;
+ if (!reginfo)
+ return NULL;
+ mh = reginfo->handler;
+ while (mh) {
+ if (mh->access_method == netsnmp_table_array_helper_handler)
+ break;
+ mh = mh->next;
+ }
+
+ return mh;
+}
+
+/** find the context data used by the table_array helper */
+netsnmp_container *
+netsnmp_extract_array_context(netsnmp_request_info *request)
+{
+ return netsnmp_request_get_list_data(request, TABLE_ARRAY_NAME);
+}
+
+/** this function is called to validate RowStatus transitions. */
+int
+netsnmp_table_array_check_row_status(netsnmp_table_array_callbacks *cb,
+ netsnmp_request_group *ag,
+ long *rs_new, long *rs_old)
+{
+ netsnmp_index *row_ctx;
+ netsnmp_index *undo_ctx;
+ if (!ag || !cb)
+ return SNMPERR_GENERR;
+ row_ctx = ag->existing_row;
+ undo_ctx = ag->undo_info;
+
+ /*
+ * xxx-rks: revisit row delete scenario
+ */
+ if (row_ctx) {
+ /*
+ * either a new row, or change to old row
+ */
+ /*
+ * is it set to active?
+ */
+ if (RS_IS_GOING_ACTIVE(*rs_new)) {
+ /*
+ * is it ready to be active?
+ */
+ if ((NULL==cb->can_activate) ||
+ cb->can_activate(undo_ctx, row_ctx, ag))
+ *rs_new = RS_ACTIVE;
+ else
+ return SNMP_ERR_INCONSISTENTVALUE;
+ } else {
+ /*
+ * not going active
+ */
+ if (undo_ctx) {
+ /*
+ * change
+ */
+ if (RS_IS_ACTIVE(*rs_old)) {
+ /*
+ * check pre-reqs for deactivation
+ */
+ if (cb->can_deactivate &&
+ !cb->can_deactivate(undo_ctx, row_ctx, ag)) {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ }
+ } else {
+ /*
+ * new row
+ */
+ }
+
+ if (*rs_new != RS_DESTROY) {
+ if ((NULL==cb->can_activate) ||
+ cb->can_activate(undo_ctx, row_ctx, ag))
+ *rs_new = RS_NOTINSERVICE;
+ else
+ *rs_new = RS_NOTREADY;
+ } else {
+ if (cb->can_delete && !cb->can_delete(undo_ctx, row_ctx, ag)) {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ ag->row_deleted = 1;
+ }
+ }
+ } else {
+ /*
+ * check pre-reqs for delete row
+ */
+ if (cb->can_delete && !cb->can_delete(undo_ctx, row_ctx, ag)) {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+/** @} */
+
+/** @cond */
+/**********************************************************************
+ **********************************************************************
+ **********************************************************************
+ **********************************************************************
+ * *
+ * *
+ * *
+ * *
+ * EVERYTHING BELOW THIS IS PRIVATE IMPLEMENTATION DETAILS. *
+ * *
+ * *
+ * *
+ * *
+ **********************************************************************
+ **********************************************************************
+ **********************************************************************
+ **********************************************************************/
+
+/**********************************************************************
+ **********************************************************************
+ * *
+ * *
+ * Structures, Utility/convenience functions *
+ * *
+ * *
+ **********************************************************************
+ **********************************************************************/
+/*
+ * context info for SET requests
+ */
+typedef struct set_context_s {
+ netsnmp_agent_request_info *agtreq_info;
+ table_container_data *tad;
+ int status;
+} set_context;
+
+static void
+release_netsnmp_request_group(netsnmp_index *g, void *v)
+{
+ netsnmp_request_group_item *tmp;
+ netsnmp_request_group *group = (netsnmp_request_group *) g;
+
+ if (!g)
+ return;
+ while (group->list) {
+ tmp = group->list;
+ group->list = tmp->next;
+ free(tmp);
+ }
+
+ free(group);
+}
+
+static void
+release_netsnmp_request_groups(void *vp)
+{
+ netsnmp_container *c = (netsnmp_container*)vp;
+ CONTAINER_FOR_EACH(c, (netsnmp_container_obj_func*)
+ release_netsnmp_request_group, NULL);
+ CONTAINER_FREE(c);
+}
+
+void
+build_new_oid(netsnmp_handler_registration *reginfo,
+ netsnmp_table_request_info *tblreq_info,
+ netsnmp_index *row, netsnmp_request_info *current)
+{
+ oid coloid[MAX_OID_LEN];
+ int coloid_len;
+
+ if (!tblreq_info || !reginfo || !row || !current)
+ return;
+
+ coloid_len = reginfo->rootoid_len + 2;
+ memcpy(coloid, reginfo->rootoid, reginfo->rootoid_len * sizeof(oid));
+
+ /** table.entry */
+ coloid[reginfo->rootoid_len] = 1;
+
+ /** table.entry.column */
+ coloid[reginfo->rootoid_len + 1] = tblreq_info->colnum;
+
+ /** table.entry.column.index */
+ memcpy(&coloid[reginfo->rootoid_len + 2], row->oids,
+ row->len * sizeof(oid));
+
+ snmp_set_var_objid(current->requestvb, coloid,
+ reginfo->rootoid_len + 2 + row->len);
+}
+
+/**********************************************************************
+ **********************************************************************
+ * *
+ * *
+ * GET procession functions *
+ * *
+ * *
+ **********************************************************************
+ **********************************************************************/
+int
+process_get_requests(netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests,
+ table_container_data * tad)
+{
+ int rc = SNMP_ERR_NOERROR;
+ netsnmp_request_info *current;
+ netsnmp_index *row = NULL;
+ netsnmp_table_request_info *tblreq_info;
+ netsnmp_variable_list *var;
+
+ /*
+ * Loop through each of the requests, and
+ * try to find the appropriate row from the container.
+ */
+ for (current = requests; current; current = current->next) {
+
+ var = current->requestvb;
+ DEBUGMSGTL(("table_array:get",
+ " process_get_request oid:"));
+ DEBUGMSGOID(("table_array:get", var->name,
+ var->name_length));
+ DEBUGMSG(("table_array:get", "\n"));
+
+ /*
+ * skip anything that doesn't need processing.
+ */
+ if (current->processed != 0) {
+ DEBUGMSGTL(("table_array:get", "already processed\n"));
+ continue;
+ }
+
+ /*
+ * Get pointer to the table information for this request. This
+ * information was saved by table_helper_handler. When
+ * debugging, we double check a few assumptions. For example,
+ * the table_helper_handler should enforce column boundaries.
+ */
+ tblreq_info = netsnmp_extract_table_info(current);
+ netsnmp_assert(tblreq_info->colnum <= tad->tblreg_info->max_column);
+
+ if ((agtreq_info->mode == MODE_GETNEXT) ||
+ (agtreq_info->mode == MODE_GETBULK)) {
+ /*
+ * find the row
+ */
+ row = netsnmp_table_index_find_next_row(tad->table, tblreq_info);
+ if (!row) {
+ /*
+ * no results found.
+ *
+ * xxx-rks: how do we skip this entry for the next handler,
+ * but still allow it a chance to hit another handler?
+ */
+ DEBUGMSGTL(("table_array:get", "no row found\n"));
+ netsnmp_set_request_error(agtreq_info, current,
+ SNMP_ENDOFMIBVIEW);
+ continue;
+ }
+
+ /*
+ * * if data was found, make sure it has the column we want
+ */
+/* xxx-rks: add suport for sparse tables */
+
+ /*
+ * build new oid
+ */
+ build_new_oid(reginfo, tblreq_info, row, current);
+
+ } /** GETNEXT/GETBULK */
+ else {
+ netsnmp_index index;
+ index.oids = tblreq_info->index_oid;
+ index.len = tblreq_info->index_oid_len;
+
+ row = CONTAINER_FIND(tad->table, &index);
+ if (!row) {
+ DEBUGMSGTL(("table_array:get", "no row found\n"));
+ netsnmp_set_request_error(agtreq_info, current,
+ SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ } /** GET */
+
+ /*
+ * get the data
+ */
+ rc = tad->cb->get_value(current, row, tblreq_info);
+
+ } /** for ( ... requests ... ) */
+
+ return rc;
+}
+
+/**********************************************************************
+ **********************************************************************
+ * *
+ * *
+ * SET procession functions *
+ * *
+ * *
+ **********************************************************************
+ **********************************************************************/
+
+void
+group_requests(netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests,
+ netsnmp_container *request_group, table_container_data * tad)
+{
+ netsnmp_table_request_info *tblreq_info;
+ netsnmp_variable_list *var;
+ netsnmp_index *row, *tmp, index;
+ netsnmp_request_info *current;
+ netsnmp_request_group *g;
+ netsnmp_request_group_item *i;
+
+ for (current = requests; current; current = current->next) {
+
+ var = current->requestvb;
+
+ /*
+ * skip anything that doesn't need processing.
+ */
+ if (current->processed != 0) {
+ DEBUGMSGTL(("table_array:group",
+ "already processed\n"));
+ continue;
+ }
+
+ /*
+ * 3.2.1 Setup and paranoia
+ * *
+ * * Get pointer to the table information for this request. This
+ * * information was saved by table_helper_handler. When
+ * * debugging, we double check a few assumptions. For example,
+ * * the table_helper_handler should enforce column boundaries.
+ */
+ row = NULL;
+ tblreq_info = netsnmp_extract_table_info(current);
+ netsnmp_assert(tblreq_info->colnum <= tad->tblreg_info->max_column);
+
+ /*
+ * search for index
+ */
+ index.oids = tblreq_info->index_oid;
+ index.len = tblreq_info->index_oid_len;
+ tmp = CONTAINER_FIND(request_group, &index);
+ if (tmp) {
+ DEBUGMSGTL(("table_array:group",
+ " existing group:"));
+ DEBUGMSGOID(("table_array:group", index.oids,
+ index.len));
+ DEBUGMSG(("table_array:group", "\n"));
+ g = (netsnmp_request_group *) tmp;
+ i = SNMP_MALLOC_TYPEDEF(netsnmp_request_group_item);
+ i->ri = current;
+ i->tri = tblreq_info;
+ i->next = g->list;
+ g->list = i;
+
+ /** xxx-rks: store map of colnum to request */
+ continue;
+ }
+
+ DEBUGMSGTL(("table_array:group", " new group"));
+ DEBUGMSGOID(("table_array:group", index.oids,
+ index.len));
+ DEBUGMSG(("table_array:group", "\n"));
+ g = SNMP_MALLOC_TYPEDEF(netsnmp_request_group);
+ i = SNMP_MALLOC_TYPEDEF(netsnmp_request_group_item);
+ g->list = i;
+ g->table = tad->table;
+ i->ri = current;
+ i->tri = tblreq_info;
+ /** xxx-rks: store map of colnum to request */
+
+ /*
+ * search for row. all changes are made to the original row,
+ * later, we'll make a copy in undo_info before we start processing.
+ */
+ row = g->existing_row = CONTAINER_FIND(tad->table, &index);
+ if (!g->existing_row) {
+ if (!tad->cb->create_row) {
+ if(MODE_IS_SET(agtreq_info->mode))
+ netsnmp_set_request_error(agtreq_info, current,
+ SNMP_ERR_NOTWRITABLE);
+ else
+ netsnmp_set_request_error(agtreq_info, current,
+ SNMP_NOSUCHINSTANCE);
+ free(g);
+ free(i);
+ continue;
+ }
+ /** use undo_info temporarily */
+ row = g->existing_row = tad->cb->create_row(&index);
+ if (!row) {
+ /* xxx-rks : parameter to create_row to allow
+ * for better error reporting. */
+ netsnmp_set_request_error(agtreq_info, current,
+ SNMP_ERR_GENERR);
+ free(g);
+ free(i);
+ continue;
+ }
+ g->row_created = 1;
+ }
+
+ g->index.oids = row->oids;
+ g->index.len = row->len;
+
+ CONTAINER_INSERT(request_group, g);
+
+ } /** for( current ... ) */
+}
+
+static void
+process_set_group(netsnmp_index *o, void *c)
+{
+ /* xxx-rks: should we continue processing after an error?? */
+ set_context *context = (set_context *) c;
+ netsnmp_request_group *ag = (netsnmp_request_group *) o;
+ int rc = SNMP_ERR_NOERROR;
+
+ switch (context->agtreq_info->mode) {
+
+ case MODE_SET_RESERVE1:/** -> SET_RESERVE2 || SET_FREE */
+
+ /*
+ * if not a new row, save undo info
+ */
+ if (ag->row_created == 0) {
+ if (context->tad->cb->duplicate_row)
+ ag->undo_info = context->tad->cb->duplicate_row(ag->existing_row);
+ else
+ ag->undo_info = NULL;
+ if (NULL == ag->undo_info) {
+ rc = SNMP_ERR_RESOURCEUNAVAILABLE;
+ break;
+ }
+ }
+
+ if (context->tad->cb->set_reserve1)
+ context->tad->cb->set_reserve1(ag);
+ break;
+
+ case MODE_SET_RESERVE2:/** -> SET_ACTION || SET_FREE */
+ if (context->tad->cb->set_reserve2)
+ context->tad->cb->set_reserve2(ag);
+ break;
+
+ case MODE_SET_ACTION:/** -> SET_COMMIT || SET_UNDO */
+ if (context->tad->cb->set_action)
+ context->tad->cb->set_action(ag);
+ break;
+
+ case MODE_SET_COMMIT:/** FINAL CHANCE ON SUCCESS */
+ if (ag->row_created == 0) {
+ /*
+ * this is an existing row, has it been deleted?
+ */
+ if (ag->row_deleted == 1) {
+ DEBUGMSGT((TABLE_ARRAY_NAME, "action: deleting row\n"));
+ if (CONTAINER_REMOVE(ag->table, ag->existing_row) != 0) {
+ rc = SNMP_ERR_COMMITFAILED;
+ break;
+ }
+ }
+ } else if (ag->row_deleted == 0) {
+ /*
+ * new row (that hasn't been deleted) should be inserted
+ */
+ DEBUGMSGT((TABLE_ARRAY_NAME, "action: inserting row\n"));
+ if (CONTAINER_INSERT(ag->table, ag->existing_row) != 0) {
+ rc = SNMP_ERR_COMMITFAILED;
+ break;
+ }
+ }
+
+ if (context->tad->cb->set_commit)
+ context->tad->cb->set_commit(ag);
+
+ /** no more use for undo_info, so free it */
+ if (ag->undo_info) {
+ context->tad->cb->delete_row(ag->undo_info);
+ ag->undo_info = NULL;
+ }
+
+#if 0
+ /* XXX-rks: finish row cooperative notifications
+ * if the table has requested it, send cooperative notifications
+ * for row operations.
+ */
+ if (context->tad->notifications) {
+ if (ag->undo_info) {
+ if (!ag->existing_row)
+ netsnmp_monitor_notify(EVENT_ROW_DEL);
+ else
+ netsnmp_monitor_notify(EVENT_ROW_MOD);
+ }
+ else
+ netsnmp_monitor_notify(EVENT_ROW_ADD);
+ }
+#endif
+
+ if ((ag->row_created == 0) && (ag->row_deleted == 1)) {
+ context->tad->cb->delete_row(ag->existing_row);
+ ag->existing_row = NULL;
+ }
+ break;
+
+ case MODE_SET_FREE:/** FINAL CHANCE ON FAILURE */
+ if (context->tad->cb->set_free)
+ context->tad->cb->set_free(ag);
+
+ /** no more use for undo_info, so free it */
+ if (ag->row_created == 1) {
+ if (context->tad->cb->delete_row)
+ context->tad->cb->delete_row(ag->existing_row);
+ ag->existing_row = NULL;
+ }
+ else {
+ if (context->tad->cb->delete_row)
+ context->tad->cb->delete_row(ag->undo_info);
+ ag->undo_info = NULL;
+ }
+ break;
+
+ case MODE_SET_UNDO:/** FINAL CHANCE ON FAILURE */
+ /*
+ * status already set - don't change it now
+ */
+ if (context->tad->cb->set_undo)
+ context->tad->cb->set_undo(ag);
+
+ /*
+ * no more use for undo_info, so free it
+ */
+ if (ag->row_created == 0) {
+ /*
+ * restore old values
+ */
+ context->tad->cb->row_copy(ag->existing_row, ag->undo_info);
+ context->tad->cb->delete_row(ag->undo_info);
+ ag->undo_info = NULL;
+ }
+ else {
+ context->tad->cb->delete_row(ag->existing_row);
+ ag->existing_row = NULL;
+ }
+ break;
+
+ default:
+ snmp_log(LOG_ERR, "unknown mode processing SET for "
+ "netsnmp_table_array_helper_handler\n");
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ if (rc)
+ netsnmp_set_request_error(context->agtreq_info,
+ ag->list->ri, rc);
+
+}
+
+int
+process_set_requests(netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests,
+ table_container_data * tad, char *handler_name)
+{
+ set_context context;
+ netsnmp_container *request_group;
+
+ /*
+ * create and save structure for set info
+ */
+ request_group = (netsnmp_container*) netsnmp_agent_get_list_data
+ (agtreq_info, handler_name);
+ if (request_group == NULL) {
+ netsnmp_data_list *tmp;
+ request_group = netsnmp_container_find("request_group:"
+ "table_container");
+ request_group->compare = netsnmp_compare_netsnmp_index;
+ request_group->ncompare = netsnmp_ncompare_netsnmp_index;
+
+ DEBUGMSGTL(("table_array", "Grouping requests by oid\n"));
+
+ tmp = netsnmp_create_data_list(handler_name,
+ request_group,
+ release_netsnmp_request_groups);
+ netsnmp_agent_add_list_data(agtreq_info, tmp);
+ /*
+ * group requests.
+ */
+ group_requests(agtreq_info, requests, request_group, tad);
+ }
+
+ /*
+ * process each group one at a time
+ */
+ context.agtreq_info = agtreq_info;
+ context.tad = tad;
+ context.status = SNMP_ERR_NOERROR;
+ CONTAINER_FOR_EACH(request_group,
+ (netsnmp_container_obj_func*)process_set_group,
+ &context);
+
+ return context.status;
+}
+
+
+/**********************************************************************
+ **********************************************************************
+ * *
+ * *
+ * netsnmp_table_array_helper_handler() *
+ * *
+ * *
+ **********************************************************************
+ **********************************************************************/
+int
+netsnmp_table_array_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+
+ /*
+ * First off, get our pointer from the handler. This
+ * lets us get to the table registration information we
+ * saved in get_table_array_handler(), as well as the
+ * container where the actual table data is stored.
+ */
+ int rc = SNMP_ERR_NOERROR;
+ table_container_data *tad = (table_container_data *)handler->myvoid;
+
+ if (agtreq_info->mode < 0 || agtreq_info->mode > 5) {
+ DEBUGMSGTL(("table_array", "Mode %d, Got request:\n",
+ agtreq_info->mode));
+ } else {
+ DEBUGMSGTL(("table_array", "Mode %s, Got request:\n",
+ mode_name[agtreq_info->mode]));
+ }
+
+ if (MODE_IS_SET(agtreq_info->mode)) {
+ /*
+ * netsnmp_mutex_lock(&tad->lock);
+ */
+ rc = process_set_requests(agtreq_info, requests,
+ tad, handler->handler_name);
+ /*
+ * netsnmp_mutex_unlock(&tad->lock);
+ */
+ } else
+ rc = process_get_requests(reginfo, agtreq_info, requests, tad);
+
+ if (rc != SNMP_ERR_NOERROR) {
+ DEBUGMSGTL(("table_array", "processing returned rc %d\n", rc));
+ }
+
+ /*
+ * Now we've done our processing. If there is another handler below us,
+ * call them.
+ */
+ if (handler->next) {
+ rc = netsnmp_call_next_handler(handler, reginfo, agtreq_info, requests);
+ if (rc != SNMP_ERR_NOERROR) {
+ DEBUGMSGTL(("table_array", "next handler returned rc %d\n", rc));
+ }
+ }
+
+ return rc;
+}
+/** @endcond */
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/table_container.c b/cleopatre/application/spidnetsnmp/agent/helpers/table_container.c
new file mode 100644
index 0000000000..acb698ccb9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/table_container.c
@@ -0,0 +1,733 @@
+/*
+ * table_container.c
+ * $Id: table_container.c 14169 2006-01-25 16:28:12Z dts12 $
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/table.h>
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+#include <net-snmp/library/snmp_assert.h>
+
+/*
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_BEGIN -1
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_RESERVE1 0
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_RESERVE2 1
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_ACTION 2
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_COMMIT 3
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_FREE 4
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_UNDO 5
+ */
+
+/*
+ * PRIVATE structure for holding important info for each table.
+ */
+typedef struct container_table_data_s {
+
+ /** registration info for the table */
+ netsnmp_table_registration_info *tblreg_info;
+
+ /** container for the table rows */
+ netsnmp_container *table;
+
+ /*
+ * mutex_type lock;
+ */
+
+ /* what type of key do we want? */
+ char key_type;
+
+} container_table_data;
+
+/** @defgroup table_container table_container
+ * Helps you implement a table when data can be found via a netsnmp_container.
+ * @ingroup table
+ *
+ * The table_container handler is used (automatically) in conjuntion
+ * with the @link table table@endlink handler.
+ *
+ * This handler will use the index information provided by
+ * the @link table @endlink handler to find the row needed to process
+ * the request.
+ *
+ * The container must use one of 3 key types. It is the sub-handler's
+ * responsibility to ensure that the container and key type match (unless
+ * neither is specified, in which case a default will be used.)
+ *
+ * The current key types are:
+ *
+ * TABLE_CONTAINER_KEY_NETSNMP_INDEX
+ * The container should do comparisons based on a key that may be cast
+ * to a netsnmp index (netsnmp_index *). This index contains only the
+ * index portion of the OID, not the entire OID.
+ *
+ * TABLE_CONTAINER_KEY_VARBIND_INDEX
+ * The container should do comparisons based on a key that may be cast
+ * to a netsnmp variable list (netsnmp_variable_list *). This variable
+ * list will contain one varbind for each index component.
+ *
+ * TABLE_CONTAINER_KEY_VARBIND_RAW (NOTE: unimplemented)
+ * While not yet implemented, future plans include passing the request
+ * varbind with the full OID to a container.
+ *
+ * If a key type is not specified at registration time, the default key type
+ * of TABLE_CONTAINER_KEY_NETSNMP_INDEX will be used. If a container is
+ * provided, or the handler name is aliased to a container type, the container
+ * must use a netsnmp index.
+ *
+ * If no container is provided, a lookup will be made based on the
+ * sub-handler's name, or if that isn't found, "table_container". The
+ * table_container key type will be netsnmp_index.
+ *
+ * The container must, at a minimum, implement find and find_next. If a NULL
+ * key is passed to the container, it must return the first item, if any.
+ * All containers provided by net-snmp fulfil this requirement.
+ *
+ * This handler will only register to process 'data lookup' modes. In
+ * traditional net-snmp modes, that is any GET-like mode (GET, GET-NEXT,
+ * GET-BULK) or the first phase of a SET (RESERVE1). In the new baby-steps
+ * mode, DATA_LOOKUP is it's own mode, and is a pre-cursor to other modes.
+ *
+ * When called, the handler will call the appropriate container method
+ * with the appropriate key type. If a row was not found, the result depends
+ * on the mode.
+ *
+ * GET Processing
+ * An exact match must be found. If one is not, the error NOSUCHINSTANCE
+ * is set.
+ *
+ * GET-NEXT / GET-BULK
+ * If no row is found, the column number will be increased (using any
+ * valid_columns structure that may have been provided), and the first row
+ * will be retrieved. If no first row is found, the processed flag will be
+ * set, so that the sub-handler can skip any processing related to the
+ * request. The agent will notice this unsatisfied request, and attempt to
+ * pass it to the next appropriate handler.
+ *
+ * SET
+ * If the hander did not register with the HANDLER_CAN_NOT_CREATE flag
+ * set in the registration modes, it is assumed that this is a row
+ * creation request and a NULL row is added to the request's data list.
+ * The sub-handler is responsbile for dealing with any row creation
+ * contraints and inserting any newly created rows into the container
+ * and the request's data list.
+ *
+ * If a row is found, it will be inserted into
+ * the request's data list. The sub-handler may retrieve it by calling
+ * netsnmp_container_table_extract_context(request); *
+ * NOTE NOTE NOTE:
+ *
+ * This helper and it's API are still being tested and are subject to change.
+ *
+ * @{
+ */
+
+static int
+_container_table_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests);
+
+static void *
+_find_next_row(netsnmp_container *c,
+ netsnmp_table_request_info *tblreq,
+ void * key);
+
+/**********************************************************************
+ **********************************************************************
+ * *
+ * *
+ * PUBLIC Registration functions *
+ * *
+ * *
+ **********************************************************************
+ **********************************************************************/
+
+/* ==================================
+ *
+ * Container Table API: Table maintenance
+ *
+ * ================================== */
+
+container_table_data *
+netsnmp_tcontainer_create_table( const char *name,
+ netsnmp_container *container, long flags )
+{
+ container_table_data *table;
+
+ table = SNMP_MALLOC_TYPEDEF(container_table_data);
+ if (!table)
+ return NULL;
+ if (container)
+ table->table = container;
+ else {
+ table->table = netsnmp_container_find("table_container");
+ if (!table->table) {
+ SNMP_FREE(table);
+ return NULL;
+ }
+ }
+
+ if (flags)
+ table->key_type = flags & 0x03; /* Use lowest two bits */
+ else
+ table->key_type = TABLE_CONTAINER_KEY_NETSNMP_INDEX;
+
+ if (!table->table->compare)
+ table->table->compare = netsnmp_compare_netsnmp_index;
+ if (!table->table->ncompare)
+ table->table->ncompare = netsnmp_ncompare_netsnmp_index;
+
+ return table;
+}
+
+void
+netsnmp_tcontainer_delete_table( container_table_data *table )
+{
+ if (!table)
+ return;
+
+ if (table->table)
+ CONTAINER_FREE(table->table);
+
+ SNMP_FREE(table);
+ return;
+}
+
+ /*
+ * The various standalone row operation routines
+ * (create/clone/copy/delete)
+ * will be specific to a particular table,
+ * so can't be implemented here.
+ */
+
+int
+netsnmp_tcontainer_add_row( container_table_data *table, netsnmp_index *row )
+{
+ if (!table || !table->table || !row)
+ return -1;
+ CONTAINER_INSERT( table->table, row );
+ return 0;
+}
+
+netsnmp_index *
+netsnmp_tcontainer_remove_row( container_table_data *table, netsnmp_index *row )
+{
+ if (!table || !table->table || !row)
+ return NULL;
+ CONTAINER_REMOVE( table->table, row );
+ return NULL;
+}
+
+int
+netsnmp_tcontainer_replace_row( container_table_data *table,
+ netsnmp_index *old_row, netsnmp_index *new_row )
+{
+ if (!table || !table->table || !old_row || !new_row)
+ return -1;
+ netsnmp_tcontainer_remove_row( table, old_row );
+ netsnmp_tcontainer_add_row( table, new_row );
+ return 0;
+}
+
+ /* netsnmp_tcontainer_remove_delete_row() will be table-specific too */
+
+
+/* ==================================
+ *
+ * Container Table API: MIB maintenance
+ *
+ * ================================== */
+
+/** returns a netsnmp_mib_handler object for the table_container helper */
+netsnmp_mib_handler *
+netsnmp_container_table_handler_get(netsnmp_table_registration_info *tabreg,
+ netsnmp_container *container, char key_type)
+{
+ container_table_data *tad;
+ netsnmp_mib_handler *handler;
+
+ if (NULL == tabreg) {
+ snmp_log(LOG_ERR, "bad param in netsnmp_container_table_register\n");
+ return NULL;
+ }
+
+ tad = SNMP_MALLOC_TYPEDEF(container_table_data);
+ handler = netsnmp_create_handler("table_container",
+ _container_table_handler);
+ if((NULL == tad) || (NULL == handler)) {
+ if(tad) free(tad); /* SNMP_FREE wasted on locals */
+ if(handler) free(handler); /* SNMP_FREE wasted on locals */
+ snmp_log(LOG_ERR,
+ "malloc failure in netsnmp_container_table_register\n");
+ return NULL;
+ }
+
+ tad->tblreg_info = tabreg; /* we need it too, but it really is not ours */
+ if(key_type)
+ tad->key_type = key_type;
+ else
+ tad->key_type = TABLE_CONTAINER_KEY_NETSNMP_INDEX;
+
+ if(NULL == container)
+ container = netsnmp_container_find("table_container");
+ tad->table = container;
+
+ if (NULL==container->compare)
+ container->compare = netsnmp_compare_netsnmp_index;
+ if (NULL==container->ncompare)
+ container->ncompare = netsnmp_ncompare_netsnmp_index;
+
+ handler->myvoid = (void*)tad;
+ handler->flags |= MIB_HANDLER_AUTO_NEXT;
+
+ return handler;
+}
+
+int
+netsnmp_container_table_register(netsnmp_handler_registration *reginfo,
+ netsnmp_table_registration_info *tabreg,
+ netsnmp_container *container, char key_type )
+{
+ netsnmp_mib_handler *handler;
+
+ if ((NULL == reginfo) || (NULL == reginfo->handler) || (NULL == tabreg)) {
+ snmp_log(LOG_ERR, "bad param in netsnmp_container_table_register\n");
+ return SNMPERR_GENERR;
+ }
+
+ if (NULL==container)
+ container = netsnmp_container_find(reginfo->handlerName);
+
+ handler = netsnmp_container_table_handler_get(tabreg, container, key_type);
+ netsnmp_inject_handler(reginfo, handler );
+
+ return netsnmp_register_table(reginfo, tabreg);
+}
+
+/** retrieve the container used by the table_container helper */
+netsnmp_container*
+netsnmp_container_table_container_extract(netsnmp_request_info *request)
+{
+ return (netsnmp_container *)
+ netsnmp_request_get_list_data(request, TABLE_CONTAINER_CONTAINER);
+}
+
+#ifndef NETSNMP_USE_INLINE
+/** find the context data used by the table_container helper */
+void *
+netsnmp_container_table_row_extract(netsnmp_request_info *request)
+{
+ /*
+ * NOTE: this function must match in table_container.c and table_container.h.
+ * if you change one, change them both!
+ */
+ return netsnmp_request_get_list_data(request, TABLE_CONTAINER_ROW);
+}
+/** find the context data used by the table_container helper */
+void *
+netsnmp_container_table_extract_context(netsnmp_request_info *request)
+{
+ /*
+ * NOTE: this function must match in table_container.c and table_container.h.
+ * if you change one, change them both!
+ */
+ return netsnmp_request_get_list_data(request, TABLE_CONTAINER_ROW);
+}
+#endif /* inline */
+
+/** inserts a newly created table_container entry into a request list */
+void
+netsnmp_container_table_row_insert(netsnmp_request_info *request,
+ netsnmp_index *row)
+{
+ netsnmp_request_info *req;
+ netsnmp_table_request_info *table_info = NULL;
+ netsnmp_variable_list *this_index = NULL;
+ netsnmp_variable_list *that_index = NULL;
+ oid base_oid[] = {0, 0}; /* Make sure index OIDs are legal! */
+ oid this_oid[MAX_OID_LEN];
+ oid that_oid[MAX_OID_LEN];
+ size_t this_oid_len, that_oid_len;
+
+ if (!request)
+ return;
+
+ /*
+ * We'll add the new row information to any request
+ * structure with the same index values as the request
+ * passed in (which includes that one!).
+ *
+ * So construct an OID based on these index values.
+ */
+
+ table_info = netsnmp_extract_table_info(request);
+ this_index = table_info->indexes;
+ build_oid_noalloc(this_oid, MAX_OID_LEN, &this_oid_len,
+ base_oid, 2, this_index);
+
+ /*
+ * We need to look through the whole of the request list
+ * (as received by the current handler), as there's no
+ * guarantee that this routine will be called by the first
+ * varbind that refers to this row.
+ * In particular, a RowStatus controlled row creation
+ * may easily occur later in the variable list.
+ *
+ * So first, we rewind to the head of the list....
+ */
+ for (req=request; req->prev; req=req->prev)
+ ;
+
+ /*
+ * ... and then start looking for matching indexes
+ * (by constructing OIDs from these index values)
+ */
+ for (; req; req=req->next) {
+ if (req->processed)
+ continue;
+
+ table_info = netsnmp_extract_table_info(req);
+ that_index = table_info->indexes;
+ build_oid_noalloc(that_oid, MAX_OID_LEN, &that_oid_len,
+ base_oid, 2, that_index);
+
+ /*
+ * This request has the same index values,
+ * so add the newly-created row information.
+ */
+ if (snmp_oid_compare(this_oid, this_oid_len,
+ that_oid, that_oid_len) == 0) {
+ netsnmp_request_add_list_data(req,
+ netsnmp_create_data_list(TABLE_CONTAINER_ROW, row, NULL));
+ }
+ }
+}
+
+/** @cond */
+/**********************************************************************
+ **********************************************************************
+ * *
+ * *
+ * DATA LOOKUP functions *
+ * *
+ * *
+ **********************************************************************
+ **********************************************************************/
+NETSNMP_STATIC_INLINE void
+_set_key( container_table_data * tad, netsnmp_request_info *request,
+ netsnmp_table_request_info *tblreq_info,
+ void **key, netsnmp_index *index )
+{
+ if (TABLE_CONTAINER_KEY_NETSNMP_INDEX == tad->key_type) {
+ index->oids = tblreq_info->index_oid;
+ index->len = tblreq_info->index_oid_len;
+ *key = index;
+ }
+ else if (TABLE_CONTAINER_KEY_VARBIND_INDEX == tad->key_type) {
+ *key = tblreq_info->indexes;
+ }
+#if 0
+ else if (TABLE_CONTAINER_KEY_VARBIND_RAW == tad->key_type) {
+ *key = request->requestvb;
+ }
+#endif
+ else
+ *key = NULL;
+}
+
+
+NETSNMP_STATIC_INLINE void
+_data_lookup(netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *request, container_table_data * tad)
+{
+ netsnmp_index *row = NULL;
+ netsnmp_table_request_info *tblreq_info;
+ netsnmp_variable_list *var;
+ netsnmp_index index;
+ void *key;
+
+ var = request->requestvb;
+
+ DEBUGIF("table_container") {
+ DEBUGMSGTL(("table_container", " data_lookup oid:"));
+ DEBUGMSGOID(("table_container", var->name, var->name_length));
+ DEBUGMSG(("table_container", "\n"));
+ }
+
+ /*
+ * Get pointer to the table information for this request. This
+ * information was saved by table_helper_handler.
+ */
+ tblreq_info = netsnmp_extract_table_info(request);
+ /** the table_helper_handler should enforce column boundaries. */
+ netsnmp_assert((NULL != tblreq_info) &&
+ (tblreq_info->colnum <= tad->tblreg_info->max_column));
+
+ if ((agtreq_info->mode == MODE_GETNEXT) ||
+ (agtreq_info->mode == MODE_GETBULK)) {
+ /*
+ * find the row. This will automatically move to the next
+ * column, if necessary.
+ */
+ _set_key( tad, request, tblreq_info, &key, &index );
+ row = _find_next_row(tad->table, tblreq_info, key);
+ if (row) {
+ /*
+ * update indexes in tblreq_info (index & varbind),
+ * then update request varbind oid
+ */
+ if(TABLE_CONTAINER_KEY_NETSNMP_INDEX == tad->key_type) {
+ tblreq_info->index_oid_len = row->len;
+ memcpy(tblreq_info->index_oid, row->oids,
+ row->len * sizeof(oid));
+ netsnmp_update_variable_list_from_index(tblreq_info);
+ }
+ else if (TABLE_CONTAINER_KEY_VARBIND_INDEX == tad->key_type) {
+ /** xxx-rks: shouldn't tblreq_info->indexes be updated
+ before we call this?? */
+ netsnmp_update_indexes_from_variable_list(tblreq_info);
+ }
+
+ if (TABLE_CONTAINER_KEY_VARBIND_RAW != tad->key_type) {
+ netsnmp_table_build_oid_from_index(reginfo, request,
+ tblreq_info);
+ }
+ }
+ else {
+ /*
+ * no results found. Flag the request so lower handlers will
+ * ignore it, but it is not an error - getnext will move
+ * on to another handler to process this request.
+ */
+ netsnmp_set_request_error(agtreq_info, request, SNMP_ENDOFMIBVIEW);
+ DEBUGMSGTL(("table_container", "no row found\n"));
+ }
+ } /** GETNEXT/GETBULK */
+ else {
+
+ _set_key( tad, request, tblreq_info, &key, &index );
+ row = CONTAINER_FIND(tad->table, key);
+ if (NULL == row) {
+ /*
+ * not results found. For a get, that is an error
+ */
+ DEBUGMSGTL(("table_container", "no row found\n"));
+ if((agtreq_info->mode != MODE_SET_RESERVE1) || /* get */
+ (reginfo->modes & HANDLER_CAN_NOT_CREATE)) { /* no create */
+ netsnmp_set_request_error(agtreq_info, request,
+ SNMP_NOSUCHINSTANCE);
+ }
+ }
+ } /** GET/SET */
+
+ /*
+ * save the data and table in the request.
+ */
+ if (SNMP_ENDOFMIBVIEW != request->requestvb->type) {
+ if (NULL != row)
+ netsnmp_request_add_list_data(request,
+ netsnmp_create_data_list
+ (TABLE_CONTAINER_ROW,
+ row, NULL));
+ netsnmp_request_add_list_data(request,
+ netsnmp_create_data_list
+ (TABLE_CONTAINER_CONTAINER,
+ tad->table, NULL));
+ }
+}
+
+/**********************************************************************
+ **********************************************************************
+ * *
+ * *
+ * netsnmp_table_container_helper_handler() *
+ * *
+ * *
+ **********************************************************************
+ **********************************************************************/
+static int
+_container_table_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ int oldmode, need_processing = 0;
+ container_table_data *tad;
+
+ /** sanity checks */
+ netsnmp_assert((NULL != handler) && (NULL != handler->myvoid));
+ netsnmp_assert((NULL != reginfo) && (NULL != agtreq_info));
+
+ DEBUGMSGTL(("table_container", "Mode %s, Got request:\n",
+ se_find_label_in_slist("agent_mode",agtreq_info->mode)));
+
+ /*
+ * First off, get our pointer from the handler. This
+ * lets us get to the table registration information we
+ * saved in get_table_container_handler(), as well as the
+ * container where the actual table data is stored.
+ */
+ tad = (container_table_data *)handler->myvoid;
+
+ /*
+ * only do data lookup for first pass
+ *
+ * xxx-rks: this should really be handled up one level. we should
+ * be able to say what modes we want to be called for during table
+ * registration.
+ */
+ oldmode = agtreq_info->mode;
+ if(MODE_IS_GET(oldmode) || (MODE_SET_RESERVE1 == oldmode)) {
+ netsnmp_request_info *curr_request;
+ /*
+ * Loop through each of the requests, and
+ * try to find the appropriate row from the container.
+ */
+ for (curr_request = requests; curr_request; curr_request = curr_request->next) {
+ /*
+ * skip anything that doesn't need processing.
+ */
+ if (curr_request->processed != 0) {
+ DEBUGMSGTL(("table_container", "already processed\n"));
+ continue;
+ }
+
+ /*
+ * find data for this request
+ */
+ _data_lookup(reginfo, agtreq_info, curr_request, tad);
+
+ if(curr_request->processed)
+ continue;
+
+ ++need_processing;
+ } /** for ( ... requests ... ) */
+ }
+
+ /*
+ * send GET instead of GETNEXT to sub-handlers
+ * xxx-rks: again, this should be handled further up.
+ */
+ if ((oldmode == MODE_GETNEXT) && (handler->next)) {
+ /*
+ * tell agent handlder not to auto call next handler
+ */
+ handler->flags |= MIB_HANDLER_AUTO_NEXT_OVERRIDE_ONCE;
+
+ /*
+ * if we found rows to process, pretend to be a get request
+ * and call handler below us.
+ */
+ if(need_processing > 0) {
+ agtreq_info->mode = MODE_GET;
+ rc = netsnmp_call_next_handler(handler, reginfo, agtreq_info,
+ requests);
+ if (rc != SNMP_ERR_NOERROR) {
+ DEBUGMSGTL(("table_container",
+ "next handler returned %d\n", rc));
+ }
+
+ agtreq_info->mode = oldmode; /* restore saved mode */
+ }
+ }
+
+ return rc;
+}
+/** @endcond */
+
+
+/* ==================================
+ *
+ * Container Table API: Row operations
+ *
+ * ================================== */
+
+static void *
+_find_next_row(netsnmp_container *c,
+ netsnmp_table_request_info *tblreq,
+ void * key)
+{
+ void *row = NULL;
+
+ if (!c || !tblreq || !tblreq->reg_info ) {
+ snmp_log(LOG_ERR,"_find_next_row param error\n");
+ return NULL;
+ }
+
+ /*
+ * table helper should have made sure we aren't below our minimum column
+ */
+ netsnmp_assert(tblreq->colnum >= tblreq->reg_info->min_column);
+
+ /*
+ * if no indexes then use first row.
+ */
+ if(tblreq->number_indexes == 0) {
+ row = CONTAINER_FIRST(c);
+ } else {
+
+ if(NULL == key) {
+ netsnmp_index index;
+ index.oids = tblreq->index_oid;
+ index.len = tblreq->index_oid_len;
+ row = CONTAINER_NEXT(c, &index);
+ }
+ else
+ row = CONTAINER_NEXT(c, key);
+
+ /*
+ * we don't have a row, but we might be at the end of a
+ * column, so try the next column.
+ */
+ if (NULL == row) {
+ /*
+ * don't set tblreq next_col unless we know there is one,
+ * so we don't mess up table handler sparse table processing.
+ */
+ oid next_col = netsnmp_table_next_column(tblreq);
+ if (0 != next_col) {
+ tblreq->colnum = next_col;
+ row = CONTAINER_FIRST(c);
+ }
+ }
+ }
+
+ return row;
+}
+
+/**
+ * deprecated, backwards compatability only
+ *
+ * expected impact to remove: none
+ * - used between helpers, shouldn't have been used by end users
+ *
+ * replacement: none
+ * - never should have been a public method in the first place
+ */
+netsnmp_index *
+netsnmp_table_index_find_next_row(netsnmp_container *c,
+ netsnmp_table_request_info *tblreq)
+{
+ return _find_next_row(c, tblreq, NULL );
+}
+
+/* ==================================
+ *
+ * Container Table API: Index operations
+ *
+ * ================================== */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/table_data.c b/cleopatre/application/spidnetsnmp/agent/helpers/table_data.c
new file mode 100644
index 0000000000..3f1bffd5db
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/table_data.c
@@ -0,0 +1,1005 @@
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/table.h>
+#include <net-snmp/agent/table_data.h>
+#include <net-snmp/agent/read_only.h>
+
+/** @defgroup table_data table_data
+ * Helps you implement a table with datamatted storage.
+ * @ingroup table
+ *
+ * This helper is obsolete. If you are writing a new module, please
+ * consider using the table_tdata helper instead.
+ *
+ * This helper helps you implement a table where all the indexes are
+ * expected to be stored within the agent itself and not in some
+ * external storage location. It can be used to store a list of
+ * rows, where a row consists of the indexes to the table and a
+ * generic data pointer. You can then implement a subhandler which
+ * is passed the exact row definition and data it must return data
+ * for or accept data for. Complex GETNEXT handling is greatly
+ * simplified in this case.
+ *
+ * @{
+ */
+
+/* ==================================
+ *
+ * Table Data API: Table maintenance
+ *
+ * ================================== */
+
+/*
+ * generates the index portion of an table oid from a varlist.
+ */
+void
+netsnmp_table_data_generate_index_oid(netsnmp_table_row *row)
+{
+ build_oid(&row->index_oid, &row->index_oid_len, NULL, 0, row->indexes);
+}
+
+/** creates and returns a pointer to table data set */
+netsnmp_table_data *
+netsnmp_create_table_data(const char *name)
+{
+ netsnmp_table_data *table = SNMP_MALLOC_TYPEDEF(netsnmp_table_data);
+ if (name && table)
+ table->name = strdup(name);
+ return table;
+}
+
+/** creates and returns a pointer to table data set */
+netsnmp_table_row *
+netsnmp_create_table_data_row(void)
+{
+ netsnmp_table_row *row = SNMP_MALLOC_TYPEDEF(netsnmp_table_row);
+ return row;
+}
+
+/** clones a data row. DOES NOT CLONE THE CONTAINED DATA. */
+netsnmp_table_row *
+netsnmp_table_data_clone_row(netsnmp_table_row *row)
+{
+ netsnmp_table_row *newrow = NULL;
+ if (!row)
+ return NULL;
+
+ memdup((u_char **) & newrow, (u_char *) row,
+ sizeof(netsnmp_table_row));
+ if (!newrow)
+ return NULL;
+
+ if (row->indexes) {
+ newrow->indexes = snmp_clone_varbind(newrow->indexes);
+ if (!newrow->indexes)
+ return NULL;
+ }
+
+ if (row->index_oid) {
+ memdup((u_char **) & newrow->index_oid,
+ (u_char *) row->index_oid,
+ row->index_oid_len * sizeof(oid));
+ if (!newrow->index_oid)
+ return NULL;
+ }
+
+ return newrow;
+}
+
+/** deletes a row's memory.
+ * returns the void data that it doesn't know how to delete. */
+void *
+netsnmp_table_data_delete_row(netsnmp_table_row *row)
+{
+ void *data;
+
+ if (!row)
+ return NULL;
+
+ /*
+ * free the memory we can
+ */
+ if (row->indexes)
+ snmp_free_varbind(row->indexes);
+ SNMP_FREE(row->index_oid);
+ data = row->data;
+ free(row);
+
+ /*
+ * return the void * pointer
+ */
+ return data;
+}
+
+/**
+ * Adds a row of data to a given table (stored in proper lexographical order).
+ *
+ * returns SNMPERR_SUCCESS on successful addition.
+ * or SNMPERR_GENERR on failure (E.G., indexes already existed)
+ */
+int
+netsnmp_table_data_add_row(netsnmp_table_data *table,
+ netsnmp_table_row *row)
+{
+ int rc, dup = 0;
+ netsnmp_table_row *nextrow = NULL, *prevrow;
+
+ if (!row || !table)
+ return SNMPERR_GENERR;
+
+ if (row->indexes)
+ netsnmp_table_data_generate_index_oid(row);
+
+ /*
+ * we don't store the index info as it
+ * takes up memory.
+ */
+ if (!table->store_indexes) {
+ snmp_free_varbind(row->indexes);
+ row->indexes = NULL;
+ }
+
+ if (!row->index_oid) {
+ snmp_log(LOG_ERR,
+ "illegal data attempted to be added to table %s (no index)\n",
+ table->name);
+ return SNMPERR_GENERR;
+ }
+
+ /*
+ * check for simple append
+ */
+ if ((prevrow = table->last_row) != NULL) {
+ rc = snmp_oid_compare(prevrow->index_oid, prevrow->index_oid_len,
+ row->index_oid, row->index_oid_len);
+ if (0 == rc)
+ dup = 1;
+ }
+ else
+ rc = 1;
+
+ /*
+ * if no last row, or newrow < last row, search the table and
+ * insert it into the table in the proper oid-lexographical order
+ */
+ if (rc > 0) {
+ for (nextrow = table->first_row, prevrow = NULL;
+ nextrow != NULL; prevrow = nextrow, nextrow = nextrow->next) {
+ if (NULL == nextrow->index_oid) {
+ DEBUGMSGT(("table_data_add_data", "row doesn't have index!\n"));
+ /** xxx-rks: remove invalid row? */
+ continue;
+ }
+ rc = snmp_oid_compare(nextrow->index_oid, nextrow->index_oid_len,
+ row->index_oid, row->index_oid_len);
+ if(rc > 0)
+ break;
+ if (0 == rc) {
+ dup = 1;
+ break;
+ }
+ }
+ }
+
+ if (dup) {
+ /*
+ * exact match. Duplicate entries illegal
+ */
+ snmp_log(LOG_WARNING,
+ "duplicate table data attempted to be entered. row exists\n");
+ return SNMPERR_GENERR;
+ }
+
+ /*
+ * ok, we have the location of where it should go
+ */
+ /*
+ * (after prevrow, and before nextrow)
+ */
+ row->next = nextrow;
+ row->prev = prevrow;
+
+ if (row->next)
+ row->next->prev = row;
+
+ if (row->prev)
+ row->prev->next = row;
+
+ if (NULL == row->prev) /* it's the (new) first row */
+ table->first_row = row;
+ if (NULL == row->next) /* it's the last row */
+ table->last_row = row;
+
+ DEBUGMSGTL(("table_data_add_data", "added something...\n"));
+
+ return SNMPERR_SUCCESS;
+}
+
+/** swaps out origrow with newrow. This does *not* delete/free anything! */
+NETSNMP_INLINE void
+netsnmp_table_data_replace_row(netsnmp_table_data *table,
+ netsnmp_table_row *origrow,
+ netsnmp_table_row *newrow)
+{
+ netsnmp_table_data_remove_row(table, origrow);
+ netsnmp_table_data_add_row(table, newrow);
+}
+
+/**
+ * removes a row of data to a given table and returns it (no free's called)
+ *
+ * returns the row pointer itself on successful removing.
+ * or NULL on failure (bad arguments)
+ */
+netsnmp_table_row *
+netsnmp_table_data_remove_row(netsnmp_table_data *table,
+ netsnmp_table_row *row)
+{
+ if (!row || !table)
+ return NULL;
+
+ if (row->prev)
+ row->prev->next = row->next;
+ else
+ table->first_row = row->next;
+
+ if (row->next)
+ row->next->prev = row->prev;
+ else
+ table->last_row = row->prev;
+
+ return row;
+}
+
+/**
+ * removes and frees a row of data to a given table and returns the void *
+ *
+ * returns the void * data on successful deletion.
+ * or NULL on failure (bad arguments)
+ */
+void *
+netsnmp_table_data_remove_and_delete_row(netsnmp_table_data *table,
+ netsnmp_table_row *row)
+{
+ if (!row || !table)
+ return NULL;
+
+ /*
+ * remove it from the list
+ */
+ netsnmp_table_data_remove_row(table, row);
+ return netsnmp_table_data_delete_row(row);
+}
+
+ /* =====================================
+ * Generic API - mostly renamed wrappers
+ * ===================================== */
+
+netsnmp_table_data *
+netsnmp_table_data_create_table(const char *name, long flags)
+{
+ return netsnmp_create_table_data( name );
+}
+
+void
+netsnmp_table_data_delete_table( netsnmp_table_data *table )
+{
+ netsnmp_table_row *row, *nextrow;
+
+ if (!table)
+ return;
+
+ for (row = table->first_row; row; row=nextrow) {
+ nextrow = row->next;
+ row->next = NULL;
+ netsnmp_table_data_delete_row(row);
+ /* Can't delete table-specific entry memory */
+ }
+ table->first_row = NULL;
+
+ if (table->name) {
+ SNMP_FREE(table->name);
+ table->name = NULL;
+ }
+ SNMP_FREE(table);
+ return;
+}
+
+netsnmp_table_row *
+netsnmp_table_data_create_row( void* entry )
+{
+ netsnmp_table_row *row = SNMP_MALLOC_TYPEDEF(netsnmp_table_row);
+ if (row)
+ row->data = entry;
+ return row;
+}
+
+ /* netsnmp_table_data_clone_row() defined above */
+
+int
+netsnmp_table_data_copy_row( netsnmp_table_row *old_row,
+ netsnmp_table_row *new_row )
+{
+ if (!old_row || !new_row)
+ return -1;
+
+ memcpy(new_row, old_row, sizeof(netsnmp_table_row));
+
+ if (old_row->indexes)
+ new_row->indexes = snmp_clone_varbind(old_row->indexes);
+ if (old_row->index_oid)
+ memdup((u_char **) & new_row->index_oid,
+ (u_char *) old_row->index_oid,
+ old_row->index_oid_len * sizeof(oid));
+ /* XXX - Doesn't copy table-specific row structure */
+ return 0;
+}
+
+ /*
+ * netsnmp_table_data_delete_row()
+ * netsnmp_table_data_add_row()
+ * netsnmp_table_data_replace_row()
+ * netsnmp_table_data_remove_row()
+ * all defined above
+ */
+
+void *
+netsnmp_table_data_remove_delete_row(netsnmp_table_data *table,
+ netsnmp_table_row *row)
+{
+ return netsnmp_table_data_remove_and_delete_row(table, row);
+}
+
+
+/* ==================================
+ *
+ * Table Data API: MIB maintenance
+ *
+ * ================================== */
+
+/** Creates a table_data handler and returns it */
+netsnmp_mib_handler *
+netsnmp_get_table_data_handler(netsnmp_table_data *table)
+{
+ netsnmp_mib_handler *ret = NULL;
+
+ if (!table) {
+ snmp_log(LOG_INFO,
+ "netsnmp_get_table_data_handler(NULL) called\n");
+ return NULL;
+ }
+
+ ret =
+ netsnmp_create_handler(TABLE_DATA_NAME,
+ netsnmp_table_data_helper_handler);
+ if (ret) {
+ ret->flags |= MIB_HANDLER_AUTO_NEXT;
+ ret->myvoid = (void *) table;
+ }
+ return ret;
+}
+
+/** registers a handler as a data table.
+ * If table_info != NULL, it registers it as a normal table too. */
+int
+netsnmp_register_table_data(netsnmp_handler_registration *reginfo,
+ netsnmp_table_data *table,
+ netsnmp_table_registration_info *table_info)
+{
+ netsnmp_inject_handler(reginfo, netsnmp_get_table_data_handler(table));
+ return netsnmp_register_table(reginfo, table_info);
+}
+
+/** registers a handler as a read-only data table
+ * If table_info != NULL, it registers it as a normal table too. */
+int
+netsnmp_register_read_only_table_data(netsnmp_handler_registration *reginfo,
+ netsnmp_table_data *table,
+ netsnmp_table_registration_info *table_info)
+{
+ netsnmp_inject_handler(reginfo, netsnmp_get_read_only_handler());
+ return netsnmp_register_table_data(reginfo, table, table_info);
+}
+
+/*
+ * The helper handler that takes care of passing a specific row of
+ * data down to the lower handler(s). It sets request->processed if
+ * the request should not be handled.
+ */
+int
+netsnmp_table_data_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_table_data *table = (netsnmp_table_data *) handler->myvoid;
+ netsnmp_request_info *request;
+ int valid_request = 0;
+ netsnmp_table_row *row;
+ netsnmp_table_request_info *table_info;
+ netsnmp_table_registration_info *table_reg_info =
+ netsnmp_find_table_registration_info(reginfo);
+ int result, regresult;
+ int oldmode;
+
+ for (request = requests; request; request = request->next) {
+ if (request->processed)
+ continue;
+
+ table_info = netsnmp_extract_table_info(request);
+ if (!table_info)
+ continue; /* ack */
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ case MODE_GETNEXT:
+ case MODE_SET_RESERVE1:
+ netsnmp_request_add_list_data(request,
+ netsnmp_create_data_list(
+ TABLE_DATA_TABLE, table, NULL));
+ }
+
+ /*
+ * find the row in question
+ */
+ switch (reqinfo->mode) {
+ case MODE_GETNEXT:
+ case MODE_GETBULK: /* XXXWWW */
+ if (request->requestvb->type != ASN_NULL)
+ continue;
+ /*
+ * loop through data till we find the next row
+ */
+ result = snmp_oid_compare(request->requestvb->name,
+ request->requestvb->name_length,
+ reginfo->rootoid,
+ reginfo->rootoid_len);
+ regresult = snmp_oid_compare(request->requestvb->name,
+ SNMP_MIN(request->requestvb->
+ name_length,
+ reginfo->rootoid_len),
+ reginfo->rootoid,
+ reginfo->rootoid_len);
+ if (regresult == 0
+ && request->requestvb->name_length < reginfo->rootoid_len)
+ regresult = -1;
+
+ if (result < 0 || 0 == result) {
+ /*
+ * before us entirely, return the first
+ */
+ row = table->first_row;
+ table_info->colnum = table_reg_info->min_column;
+ } else if (regresult == 0 && request->requestvb->name_length ==
+ reginfo->rootoid_len + 1 &&
+ /* entry node must be 1, but any column is ok */
+ request->requestvb->name[reginfo->rootoid_len] == 1) {
+ /*
+ * exactly to the entry
+ */
+ row = table->first_row;
+ table_info->colnum = table_reg_info->min_column;
+ } else if (regresult == 0 && request->requestvb->name_length ==
+ reginfo->rootoid_len + 2 &&
+ /* entry node must be 1, but any column is ok */
+ request->requestvb->name[reginfo->rootoid_len] == 1) {
+ /*
+ * exactly to the column
+ */
+ row = table->first_row;
+ } else {
+ /*
+ * loop through all rows looking for the first one
+ * that is equal to the request or greater than it
+ */
+ for (row = table->first_row; row; row = row->next) {
+ /*
+ * compare the index of the request to the row
+ */
+ result =
+ snmp_oid_compare(row->index_oid,
+ row->index_oid_len,
+ request->requestvb->name + 2 +
+ reginfo->rootoid_len,
+ request->requestvb->name_length -
+ 2 - reginfo->rootoid_len);
+ if (result == 0) {
+ /*
+ * equal match, return the next row
+ */
+ if (row) {
+ row = row->next;
+ }
+ break;
+ } else if (result > 0) {
+ /*
+ * the current row is greater than the
+ * request, use it
+ */
+ break;
+ }
+ }
+ }
+ if (!row) {
+ table_info->colnum++;
+ if (table_info->colnum <= table_reg_info->max_column) {
+ row = table->first_row;
+ }
+ }
+ if (row) {
+ valid_request = 1;
+ netsnmp_request_add_list_data(request,
+ netsnmp_create_data_list
+ (TABLE_DATA_ROW, row,
+ NULL));
+ /*
+ * Set the name appropriately, so we can pass this
+ * request on as a simple GET request
+ */
+ netsnmp_table_data_build_result(reginfo, reqinfo, request,
+ row,
+ table_info->colnum,
+ ASN_NULL, NULL, 0);
+ } else { /* no decent result found. Give up. It's beyond us. */
+ request->processed = 1;
+ }
+ break;
+
+ case MODE_GET:
+ if (request->requestvb->type != ASN_NULL)
+ continue;
+ /*
+ * find the row in question
+ */
+ if (request->requestvb->name_length < (reginfo->rootoid_len + 3)) { /* table.entry.column... */
+ /*
+ * request too short
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_NOSUCHINSTANCE);
+ break;
+ } else if (NULL ==
+ (row =
+ netsnmp_table_data_get_from_oid(table,
+ request->
+ requestvb->name +
+ reginfo->
+ rootoid_len + 2,
+ request->
+ requestvb->
+ name_length -
+ reginfo->
+ rootoid_len -
+ 2))) {
+ /*
+ * no such row
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_NOSUCHINSTANCE);
+ break;
+ } else {
+ valid_request = 1;
+ netsnmp_request_add_list_data(request,
+ netsnmp_create_data_list
+ (TABLE_DATA_ROW, row,
+ NULL));
+ }
+ break;
+
+ case MODE_SET_RESERVE1:
+ valid_request = 1;
+ if (NULL !=
+ (row =
+ netsnmp_table_data_get_from_oid(table,
+ request->requestvb->name +
+ reginfo->rootoid_len + 2,
+ request->requestvb->
+ name_length -
+ reginfo->rootoid_len -
+ 2))) {
+ netsnmp_request_add_list_data(request,
+ netsnmp_create_data_list
+ (TABLE_DATA_ROW, row,
+ NULL));
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ valid_request = 1;
+
+ }
+ }
+
+ if (valid_request &&
+ (reqinfo->mode == MODE_GETNEXT || reqinfo->mode == MODE_GETBULK)) {
+ /*
+ * If this is a GetNext or GetBulk request, then we've identified
+ * the row that ought to include the appropriate next instance.
+ * Convert the request into a Get request, so that the lower-level
+ * handlers don't need to worry about skipping on, and call these
+ * handlers ourselves (so we can undo this again afterwards).
+ */
+ oldmode = reqinfo->mode;
+ reqinfo->mode = MODE_GET;
+ result = netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+ reqinfo->mode = oldmode;
+ handler->flags |= MIB_HANDLER_AUTO_NEXT_OVERRIDE_ONCE;
+ return result;
+ }
+ else
+ /* next handler called automatically - 'AUTO_NEXT' */
+ return SNMP_ERR_NOERROR;
+}
+
+/** extracts the table being accessed passed from the table_data helper */
+netsnmp_table_data *
+netsnmp_extract_table(netsnmp_request_info *request)
+{
+ return (netsnmp_table_data *)
+ netsnmp_request_get_list_data(request, TABLE_DATA_TABLE);
+}
+
+/** extracts the row being accessed passed from the table_data helper */
+netsnmp_table_row *
+netsnmp_extract_table_row(netsnmp_request_info *request)
+{
+ return (netsnmp_table_row *) netsnmp_request_get_list_data(request,
+ TABLE_DATA_ROW);
+}
+
+/** extracts the data from the row being accessed passed from the
+ * table_data helper */
+void *
+netsnmp_extract_table_row_data(netsnmp_request_info *request)
+{
+ netsnmp_table_row *row;
+ row = (netsnmp_table_row *) netsnmp_extract_table_row(request);
+ if (row)
+ return row->data;
+ else
+ return NULL;
+}
+
+/** inserts a newly created table_data row into a request */
+NETSNMP_INLINE void
+netsnmp_insert_table_row(netsnmp_request_info *request,
+ netsnmp_table_row *row)
+{
+ netsnmp_request_info *req;
+ netsnmp_table_request_info *table_info = NULL;
+ netsnmp_variable_list *this_index = NULL;
+ netsnmp_variable_list *that_index = NULL;
+ oid base_oid[] = {0, 0}; /* Make sure index OIDs are legal! */
+ oid this_oid[MAX_OID_LEN];
+ oid that_oid[MAX_OID_LEN];
+ size_t this_oid_len, that_oid_len;
+
+ if (!request)
+ return;
+
+ /*
+ * We'll add the new row information to any request
+ * structure with the same index values as the request
+ * passed in (which includes that one!).
+ *
+ * So construct an OID based on these index values.
+ */
+
+ table_info = netsnmp_extract_table_info(request);
+ this_index = table_info->indexes;
+ build_oid_noalloc(this_oid, MAX_OID_LEN, &this_oid_len,
+ base_oid, 2, this_index);
+
+ /*
+ * We need to look through the whole of the request list
+ * (as received by the current handler), as there's no
+ * guarantee that this routine will be called by the first
+ * varbind that refers to this row.
+ * In particular, a RowStatus controlled row creation
+ * may easily occur later in the variable list.
+ *
+ * So first, we rewind to the head of the list....
+ */
+ for (req=request; req->prev; req=req->prev)
+ ;
+
+ /*
+ * ... and then start looking for matching indexes
+ * (by constructing OIDs from these index values)
+ */
+ for (; req; req=req->next) {
+ table_info = netsnmp_extract_table_info(req);
+ that_index = table_info->indexes;
+ build_oid_noalloc(that_oid, MAX_OID_LEN, &that_oid_len,
+ base_oid, 2, that_index);
+
+ /*
+ * This request has the same index values,
+ * so add the newly-created row information.
+ */
+ if (snmp_oid_compare(this_oid, this_oid_len,
+ that_oid, that_oid_len) == 0) {
+ netsnmp_request_add_list_data(req,
+ netsnmp_create_data_list(TABLE_DATA_ROW, row, NULL));
+ }
+ }
+}
+
+/* builds a result given a row, a varbind to set and the data */
+int
+netsnmp_table_data_build_result(netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *request,
+ netsnmp_table_row *row,
+ int column,
+ u_char type,
+ u_char * result_data,
+ size_t result_data_len)
+{
+ oid build_space[MAX_OID_LEN];
+
+ if (!reginfo || !reqinfo || !request)
+ return SNMPERR_GENERR;
+
+ if (reqinfo->mode == MODE_GETNEXT || reqinfo->mode == MODE_GETBULK) {
+ /*
+ * only need to do this for getnext type cases where oid is changing
+ */
+ memcpy(build_space, reginfo->rootoid, /* registered oid */
+ reginfo->rootoid_len * sizeof(oid));
+ build_space[reginfo->rootoid_len] = 1; /* entry */
+ build_space[reginfo->rootoid_len + 1] = column; /* column */
+ memcpy(build_space + reginfo->rootoid_len + 2, /* index data */
+ row->index_oid, row->index_oid_len * sizeof(oid));
+ snmp_set_var_objid(request->requestvb, build_space,
+ reginfo->rootoid_len + 2 + row->index_oid_len);
+ }
+ snmp_set_var_typed_value(request->requestvb, type,
+ result_data, result_data_len);
+ return SNMPERR_SUCCESS; /* WWWXXX: check for bounds */
+}
+
+
+/* ==================================
+ *
+ * Table Data API: Row operations
+ * (table-independent rows)
+ *
+ * ================================== */
+
+/** returns the first row in the table */
+netsnmp_table_row *
+netsnmp_table_data_get_first_row(netsnmp_table_data *table)
+{
+ if (!table)
+ return NULL;
+ return table->first_row;
+}
+
+/** returns the next row in the table */
+netsnmp_table_row *
+netsnmp_table_data_get_next_row(netsnmp_table_data *table,
+ netsnmp_table_row *row)
+{
+ if (!row)
+ return NULL;
+ return row->next;
+}
+
+/** finds the data in "datalist" stored at "indexes" */
+netsnmp_table_row *
+netsnmp_table_data_get(netsnmp_table_data *table,
+ netsnmp_variable_list * indexes)
+{
+ oid searchfor[MAX_OID_LEN];
+ size_t searchfor_len = MAX_OID_LEN;
+
+ build_oid_noalloc(searchfor, MAX_OID_LEN, &searchfor_len, NULL, 0,
+ indexes);
+ return netsnmp_table_data_get_from_oid(table, searchfor,
+ searchfor_len);
+}
+
+/** finds the data in "datalist" stored at the searchfor oid */
+netsnmp_table_row *
+netsnmp_table_data_get_from_oid(netsnmp_table_data *table,
+ oid * searchfor, size_t searchfor_len)
+{
+ netsnmp_table_row *row;
+ if (!table)
+ return NULL;
+
+ for (row = table->first_row; row != NULL; row = row->next) {
+ if (row->index_oid &&
+ snmp_oid_compare(searchfor, searchfor_len,
+ row->index_oid, row->index_oid_len) == 0)
+ return row;
+ }
+ return NULL;
+}
+
+int
+netsnmp_table_data_num_rows(netsnmp_table_data *table)
+{
+ int i=0;
+ netsnmp_table_row *row;
+ if (!table)
+ return 0;
+ for (row = table->first_row; row; row = row->next) {
+ i++;
+ }
+ return i;
+}
+
+ /* =====================================
+ * Generic API - mostly renamed wrappers
+ * ===================================== */
+
+netsnmp_table_row *
+netsnmp_table_data_row_first(netsnmp_table_data *table)
+{
+ return netsnmp_table_data_get_first_row(table);
+}
+
+netsnmp_table_row *
+netsnmp_table_data_row_get( netsnmp_table_data *table,
+ netsnmp_table_row *row)
+{
+ if (!table || !row)
+ return NULL;
+ return netsnmp_table_data_get_from_oid(table, row->index_oid,
+ row->index_oid_len);
+}
+
+netsnmp_table_row *
+netsnmp_table_data_row_next( netsnmp_table_data *table,
+ netsnmp_table_row *row)
+{
+ return netsnmp_table_data_get_next_row(table, row);
+}
+
+netsnmp_table_row *
+netsnmp_table_data_row_get_byoid( netsnmp_table_data *table,
+ oid *instance, size_t len)
+{
+ return netsnmp_table_data_get_from_oid(table, instance, len);
+}
+
+netsnmp_table_row *
+netsnmp_table_data_row_next_byoid(netsnmp_table_data *table,
+ oid *instance, size_t len)
+{
+ netsnmp_table_row *row;
+
+ if (!table || !instance)
+ return NULL;
+
+ for (row = table->first_row; row; row = row->next) {
+ if (snmp_oid_compare(row->index_oid,
+ row->index_oid_len,
+ instance, len) > 0)
+ return row;
+ }
+ return NULL;
+}
+
+netsnmp_table_row *
+netsnmp_table_data_row_get_byidx( netsnmp_table_data *table,
+ netsnmp_variable_list *indexes)
+{
+ return netsnmp_table_data_get(table, indexes);
+}
+
+netsnmp_table_row *
+netsnmp_table_data_row_next_byidx(netsnmp_table_data *table,
+ netsnmp_variable_list *indexes)
+{
+ oid instance[MAX_OID_LEN];
+ size_t len = MAX_OID_LEN;
+
+ if (!table || !indexes)
+ return NULL;
+
+ build_oid_noalloc(instance, MAX_OID_LEN, &len, NULL, 0, indexes);
+ return netsnmp_table_data_row_next_byoid(table, instance, len);
+}
+
+int
+netsnmp_table_data_row_count(netsnmp_table_data *table)
+{
+ return netsnmp_table_data_num_rows(table);
+}
+
+
+/* ==================================
+ *
+ * Table Data API: Row operations
+ * (table-specific rows)
+ *
+ * ================================== */
+
+void *
+netsnmp_table_data_entry_first(netsnmp_table_data *table)
+{
+ netsnmp_table_row *row =
+ netsnmp_table_data_get_first_row(table);
+ return (row ? row->data : NULL );
+}
+
+void *
+netsnmp_table_data_entry_get( netsnmp_table_data *table,
+ netsnmp_table_row *row)
+{
+ return (row ? row->data : NULL );
+}
+
+void *
+netsnmp_table_data_entry_next( netsnmp_table_data *table,
+ netsnmp_table_row *row)
+{
+ row =
+ netsnmp_table_data_row_next(table, row);
+ return (row ? row->data : NULL );
+}
+
+void *
+netsnmp_table_data_entry_get_byidx( netsnmp_table_data *table,
+ netsnmp_variable_list *indexes)
+{
+ netsnmp_table_row *row =
+ netsnmp_table_data_row_get_byidx(table, indexes);
+ return (row ? row->data : NULL );
+}
+
+void *
+netsnmp_table_data_entry_next_byidx(netsnmp_table_data *table,
+ netsnmp_variable_list *indexes)
+{
+ netsnmp_table_row *row =
+ netsnmp_table_data_row_next_byidx(table, indexes);
+ return (row ? row->data : NULL );
+}
+
+void *
+netsnmp_table_data_entry_get_byoid( netsnmp_table_data *table,
+ oid *instance, size_t len)
+{
+ netsnmp_table_row *row =
+ netsnmp_table_data_row_get_byoid(table, instance, len);
+ return (row ? row->data : NULL );
+}
+
+void *
+netsnmp_table_data_entry_next_byoid(netsnmp_table_data *table,
+ oid *instance, size_t len)
+{
+ netsnmp_table_row *row =
+ netsnmp_table_data_row_next_byoid(table, instance, len);
+ return (row ? row->data : NULL );
+}
+
+ /* =====================================
+ * Generic API - mostly renamed wrappers
+ * ===================================== */
+
+/* ==================================
+ *
+ * Table Data API: Index operations
+ *
+ * ================================== */
+
+/** @}
+ */
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/table_dataset.c b/cleopatre/application/spidnetsnmp/agent/helpers/table_dataset.c
new file mode 100644
index 0000000000..d4e5a70473
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/table_dataset.c
@@ -0,0 +1,1315 @@
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+static netsnmp_data_list *auto_tables;
+
+typedef struct data_set_tables_s {
+ netsnmp_table_data_set *table_set;
+} data_set_tables;
+
+typedef struct data_set_cache_s {
+ void *data;
+ size_t data_len;
+} data_set_cache;
+
+#define STATE_ACTION 1
+#define STATE_COMMIT 2
+#define STATE_UNDO 3
+#define STATE_FREE 4
+
+typedef struct newrow_stash_s {
+ netsnmp_table_row *newrow;
+ int state;
+ int created;
+ int deleted;
+} newrow_stash;
+
+/** @defgroup table_dataset table_dataset
+ * Helps you implement a table with automatted storage.
+ * @ingroup table_data
+ *
+ * This helper is obsolete. If you are writing a new module, please
+ * consider using the table_dataset2 helper instead.
+ *
+ * This handler helps you implement a table where all the data is
+ * expected to be stored within the agent itself and not in some
+ * external storage location. It handles all MIB requests including
+ * GETs, GETNEXTs and SETs. It's possible to simply create a table
+ * without actually ever defining a handler to be called when SNMP
+ * requests come in. To use the data, you can either attach a
+ * sub-handler that merely uses/manipulates the data further when
+ * requests come in, or you can loop through it externally when it's
+ * actually needed. This handler is most useful in cases where a
+ * table is holding configuration data for something which gets
+ * triggered via another event.
+ *
+ * NOTE NOTE NOTE: This helper isn't complete and is likely to change
+ * somewhat over time. Specifically, the way it stores data
+ * internally may change drastically.
+ *
+ * @{
+ */
+
+void
+netsnmp_init_table_dataset(void) {
+#ifndef NETSNMP_DISABLE_MIB_LOADING
+ register_app_config_handler("table",
+ netsnmp_config_parse_table_set, NULL,
+ "tableoid");
+#endif /* NETSNMP_DISABLE_MIB_LOADING */
+ register_app_config_handler("add_row", netsnmp_config_parse_add_row,
+ NULL, "table_name indexes... values...");
+}
+
+/* ==================================
+ *
+ * Data Set API: Table maintenance
+ *
+ * ================================== */
+
+/** Create a netsnmp_table_data_set structure given a table_data definition */
+netsnmp_table_data_set *
+netsnmp_create_table_data_set(const char *table_name)
+{
+ netsnmp_table_data_set *table_set =
+ SNMP_MALLOC_TYPEDEF(netsnmp_table_data_set);
+ if (!table_set)
+ return NULL;
+ table_set->table = netsnmp_create_table_data(table_name);
+ return table_set;
+}
+
+/** clones a dataset row, including all data. */
+netsnmp_table_row *
+netsnmp_table_data_set_clone_row(netsnmp_table_row *row)
+{
+ netsnmp_table_data_set_storage *data, **newrowdata;
+ netsnmp_table_row *newrow;
+
+ if (!row)
+ return NULL;
+
+ newrow = netsnmp_table_data_clone_row(row);
+ if (!newrow)
+ return NULL;
+
+ data = (netsnmp_table_data_set_storage *) row->data;
+
+ if (data) {
+ for (newrowdata =
+ (netsnmp_table_data_set_storage **) &(newrow->data); data;
+ newrowdata = &((*newrowdata)->next), data = data->next) {
+
+ memdup((u_char **) newrowdata, (u_char *) data,
+ sizeof(netsnmp_table_data_set_storage));
+ if (!*newrowdata) {
+ netsnmp_table_dataset_delete_row(newrow);
+ return NULL;
+ }
+
+ if (data->data.voidp) {
+ memdup((u_char **) & ((*newrowdata)->data.voidp),
+ (u_char *) data->data.voidp, data->data_len);
+ if (!(*newrowdata)->data.voidp) {
+ netsnmp_table_dataset_delete_row(newrow);
+ return NULL;
+ }
+ }
+ }
+ }
+ return newrow;
+}
+
+/** deletes a single dataset table data.
+ * returns the (possibly still good) next pointer of the deleted data object.
+ */
+NETSNMP_INLINE netsnmp_table_data_set_storage *
+netsnmp_table_dataset_delete_data(netsnmp_table_data_set_storage *data)
+{
+ netsnmp_table_data_set_storage *nextPtr = NULL;
+ if (data) {
+ nextPtr = data->next;
+ SNMP_FREE(data->data.voidp);
+ }
+ SNMP_FREE(data);
+ return nextPtr;
+}
+
+/** deletes all the data from this node and beyond in the linked list */
+NETSNMP_INLINE void
+netsnmp_table_dataset_delete_all_data(netsnmp_table_data_set_storage *data)
+{
+
+ while (data) {
+ data = netsnmp_table_dataset_delete_data(data);
+ }
+}
+
+/** deletes all the data from this node and beyond in the linked list */
+NETSNMP_INLINE void
+netsnmp_table_dataset_delete_row(netsnmp_table_row *row)
+{
+ netsnmp_table_data_set_storage *data;
+
+ if (!row)
+ return;
+
+ data = netsnmp_table_data_delete_row(row);
+ netsnmp_table_dataset_delete_all_data(data);
+}
+
+/** adds a new row to a dataset table */
+NETSNMP_INLINE void
+netsnmp_table_dataset_add_row(netsnmp_table_data_set *table,
+ netsnmp_table_row *row)
+{
+ if (!table)
+ return;
+ netsnmp_table_data_add_row(table->table, row);
+}
+
+/** adds a new row to a dataset table */
+NETSNMP_INLINE void
+netsnmp_table_dataset_replace_row(netsnmp_table_data_set *table,
+ netsnmp_table_row *origrow,
+ netsnmp_table_row *newrow)
+{
+ if (!table)
+ return;
+ netsnmp_table_data_replace_row(table->table, origrow, newrow);
+}
+
+/** removes a row from the table, but doesn't delete/free the column values */
+NETSNMP_INLINE void
+netsnmp_table_dataset_remove_row(netsnmp_table_data_set *table,
+ netsnmp_table_row *row)
+{
+ if (!table)
+ return;
+
+ netsnmp_table_data_remove_and_delete_row(table->table, row);
+}
+
+/** removes a row from the table and then deletes it (and all its data) */
+NETSNMP_INLINE void
+netsnmp_table_dataset_remove_and_delete_row(netsnmp_table_data_set *table,
+ netsnmp_table_row *row)
+{
+ netsnmp_table_data_set_storage *data;
+
+ if (!table)
+ return;
+
+ data = (netsnmp_table_data_set_storage *)
+ netsnmp_table_data_remove_and_delete_row(table->table, row);
+
+ netsnmp_table_dataset_delete_all_data(data);
+}
+
+/* ==================================
+ *
+ * Data Set API: Default row operations
+ *
+ * ================================== */
+
+/** creates a new row from an existing defined default set */
+netsnmp_table_row *
+netsnmp_table_data_set_create_row_from_defaults
+ (netsnmp_table_data_set_storage *defrow)
+{
+ netsnmp_table_row *row;
+ row = netsnmp_create_table_data_row();
+ if (!row)
+ return NULL;
+ for (; defrow; defrow = defrow->next) {
+ netsnmp_set_row_column(row, defrow->column, defrow->type,
+ defrow->data.voidp, defrow->data_len);
+ if (defrow->writable)
+ netsnmp_mark_row_column_writable(row, defrow->column, 1);
+
+ }
+ return row;
+}
+
+/** adds a new default row to a table_set.
+ * Arguments should be the table_set, column number, variable type and
+ * finally a 1 if it is allowed to be writable, or a 0 if not. If the
+ * default_value field is not NULL, it will be used to populate new
+ * valuse in that column fro newly created rows. It is copied into the
+ * storage template (free your calling argument).
+ *
+ * returns SNMPERR_SUCCESS or SNMPERR_FAILURE
+ */
+int
+netsnmp_table_set_add_default_row(netsnmp_table_data_set *table_set,
+ unsigned int column,
+ int type, int writable,
+ void *default_value,
+ size_t default_value_len)
+{
+ netsnmp_table_data_set_storage *new_col, *ptr, *pptr;
+
+ if (!table_set)
+ return SNMPERR_GENERR;
+
+ /*
+ * double check
+ */
+ new_col =
+ netsnmp_table_data_set_find_column(table_set->default_row, column);
+ if (new_col != NULL) {
+ if (new_col->type == type && new_col->writable == writable)
+ return SNMPERR_SUCCESS;
+ return SNMPERR_GENERR;
+ }
+
+ new_col = SNMP_MALLOC_TYPEDEF(netsnmp_table_data_set_storage);
+ new_col->type = type;
+ new_col->writable = writable;
+ new_col->column = column;
+ if (default_value) {
+ memdup((u_char **) & (new_col->data.voidp),
+ (u_char *) default_value, default_value_len);
+ new_col->data_len = default_value_len;
+ }
+ if (table_set->default_row == NULL)
+ table_set->default_row = new_col;
+ else {
+ /* sort in order just because (needed for add_row support) */
+ for (ptr = table_set->default_row, pptr = NULL;
+ ptr;
+ pptr = ptr, ptr = ptr->next) {
+ if (ptr->column > column) {
+ new_col->next = ptr;
+ if (pptr)
+ pptr->next = new_col;
+ else
+ table_set->default_row = new_col;
+ return SNMPERR_SUCCESS;
+ }
+ }
+ if (pptr)
+ pptr->next = new_col;
+ else
+ snmp_log(LOG_ERR,"Shouldn't have gotten here: table_dataset/add_row");
+ }
+ return SNMPERR_SUCCESS;
+}
+
+/** adds multiple data column definitions to each row. Functionally,
+ * this is a wrapper around calling netsnmp_table_set_add_default_row
+ * repeatedly for you.
+ */
+void
+#if HAVE_STDARG_H
+netsnmp_table_set_multi_add_default_row(netsnmp_table_data_set *tset, ...)
+#else
+netsnmp_table_set_multi_add_default_row(va_dcl
+ )
+ va_dcl
+#endif
+{
+ va_list debugargs;
+ unsigned int column;
+ int type, writable;
+ void *data;
+ size_t data_len;
+
+#if HAVE_STDARG_H
+ va_start(debugargs, tset);
+#else
+ netsnmp_table_data_set *tset;
+
+ va_start(debugargs);
+ tset = va_arg(debugargs, netsnmp_table_data_set *);
+#endif
+
+ 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);
+}
+
+
+/* ==================================
+ *
+ * Data Set API: MIB maintenance
+ *
+ * ================================== */
+
+/** Given a netsnmp_table_data_set definition, create a handler for it */
+netsnmp_mib_handler *
+netsnmp_get_table_data_set_handler(netsnmp_table_data_set *data_set)
+{
+ netsnmp_mib_handler *ret = NULL;
+
+ if (!data_set) {
+ snmp_log(LOG_INFO,
+ "netsnmp_get_table_data_set_handler(NULL) called\n");
+ return NULL;
+ }
+
+ ret =
+ netsnmp_create_handler(TABLE_DATA_SET_NAME,
+ netsnmp_table_data_set_helper_handler);
+ if (ret) {
+ ret->flags |= MIB_HANDLER_AUTO_NEXT;
+ ret->myvoid = (void *) data_set;
+ }
+ return ret;
+}
+
+/** register a given data_set at a given oid (specified in the
+ netsnmp_handler_registration pointer). The
+ reginfo->handler->access_method *may* be null if the call doesn't
+ ever want to be called for SNMP operations.
+*/
+int
+netsnmp_register_table_data_set(netsnmp_handler_registration *reginfo,
+ netsnmp_table_data_set *data_set,
+ netsnmp_table_registration_info *table_info)
+{
+ if (NULL == table_info) {
+ /*
+ * allocate the table if one wasn't allocated
+ */
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ }
+
+ if (NULL == table_info->indexes && data_set->table->indexes_template) {
+ /*
+ * copy the indexes in
+ */
+ table_info->indexes =
+ snmp_clone_varbind(data_set->table->indexes_template);
+ }
+
+ if ((!table_info->min_column || !table_info->max_column) &&
+ (data_set->default_row)) {
+ /*
+ * determine min/max columns
+ */
+ unsigned int mincol = 0xffffffff, maxcol = 0;
+ netsnmp_table_data_set_storage *row;
+
+ for (row = data_set->default_row; row; row = row->next) {
+ mincol = SNMP_MIN(mincol, row->column);
+ maxcol = SNMP_MAX(maxcol, row->column);
+ }
+ if (!table_info->min_column)
+ table_info->min_column = mincol;
+ if (!table_info->max_column)
+ table_info->max_column = maxcol;
+ }
+
+ netsnmp_inject_handler(reginfo,
+ netsnmp_get_table_data_set_handler(data_set));
+ return netsnmp_register_table_data(reginfo, data_set->table,
+ table_info);
+}
+
+newrow_stash *
+netsnmp_table_data_set_create_newrowstash
+ (netsnmp_table_data_set *datatable,
+ netsnmp_table_request_info *table_info)
+{
+ newrow_stash *newrowstash = NULL;
+ netsnmp_table_row *newrow = NULL;
+
+ newrowstash = SNMP_MALLOC_TYPEDEF(newrow_stash);
+ newrowstash->created = 1;
+ newrow = netsnmp_table_data_set_create_row_from_defaults
+ (datatable->default_row);
+ newrow->indexes = snmp_clone_varbind(table_info->indexes);
+ newrowstash->newrow = newrow;
+
+ return newrowstash;
+}
+
+/* implements the table data helper. This is the routine that takes
+ * care of all SNMP requests coming into the table. */
+int
+netsnmp_table_data_set_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration
+ *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_table_data_set_storage *data = NULL;
+ newrow_stash *newrowstash = NULL;
+ netsnmp_table_row *row, *newrow = NULL;
+ netsnmp_table_request_info *table_info;
+ netsnmp_request_info *request;
+ oid *suffix;
+ size_t suffix_len;
+ netsnmp_oid_stash_node **stashp = NULL;
+
+ if (!handler)
+ return SNMPERR_GENERR;
+
+ DEBUGMSGTL(("netsnmp_table_data_set", "handler starting\n"));
+ for (request = requests; request; request = request->next) {
+ netsnmp_table_data_set *datatable =
+ (netsnmp_table_data_set *) handler->myvoid;
+ if (request->processed)
+ continue;
+
+ /*
+ * extract our stored data and table info
+ */
+ row = netsnmp_extract_table_row(request);
+ table_info = netsnmp_extract_table_info(request);
+ suffix = requests->requestvb->name + reginfo->rootoid_len + 2;
+ suffix_len = requests->requestvb->name_length -
+ (reginfo->rootoid_len + 2);
+
+ if (MODE_IS_SET(reqinfo->mode)) {
+
+ char buf[256]; /* is this reasonable size?? */
+ int rc;
+ size_t len;
+
+ /*
+ * use a cached copy of the row for modification
+ */
+
+ /*
+ * cache location: may have been created already by other
+ * SET requests in the same master request.
+ */
+ rc = snprintf(buf, sizeof(buf), "dataset_row_stash:%s:",
+ datatable->table->name);
+ if ((-1 == rc) || (rc >= sizeof(buf))) {
+ snmp_log(LOG_ERR,"%s handler name too long\n",
+ datatable->table->name);
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_GENERR);
+ continue;
+ }
+ len = sizeof(buf) - rc;
+ rc = snprint_objid(&buf[rc], len, table_info->index_oid,
+ table_info->index_oid_len);
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,"%s oid or name too long\n",
+ datatable->table->name);
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_GENERR);
+ continue;
+ }
+ stashp = (netsnmp_oid_stash_node **)
+ netsnmp_table_get_or_create_row_stash(reqinfo, buf);
+
+ newrowstash
+ = netsnmp_oid_stash_get_data(*stashp, suffix, suffix_len);
+
+ if (!newrowstash) {
+ if (!row) {
+ if (datatable->allow_creation) {
+ /*
+ * entirely new row. Create the row from the template
+ */
+ newrowstash =
+ netsnmp_table_data_set_create_newrowstash(
+ datatable, table_info);
+ newrow = newrowstash->newrow;
+ } else if (datatable->rowstatus_column == 0) {
+ /*
+ * A RowStatus object may be used to control the
+ * creation of a new row. But if this object
+ * isn't declared (and the table isn't marked as
+ * 'auto-create'), then we can't create a new row.
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ continue;
+ }
+ } else {
+ /*
+ * existing row that needs to be modified
+ */
+ newrowstash = SNMP_MALLOC_TYPEDEF(newrow_stash);
+ newrow = netsnmp_table_data_set_clone_row(row);
+ newrowstash->newrow = newrow;
+ }
+ netsnmp_oid_stash_add_data(stashp, suffix, suffix_len,
+ newrowstash);
+ } else {
+ newrow = newrowstash->newrow;
+ }
+ /*
+ * all future SET data modification operations use this
+ * temp pointer
+ */
+ if (reqinfo->mode == MODE_SET_RESERVE1 ||
+ reqinfo->mode == MODE_SET_RESERVE2)
+ row = newrow;
+ }
+
+ if (row)
+ data = (netsnmp_table_data_set_storage *) row->data;
+
+ if (!row || !table_info || !data) {
+ if (!MODE_IS_SET(reqinfo->mode)) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ }
+
+ data =
+ netsnmp_table_data_set_find_column(data, table_info->colnum);
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ case MODE_GETNEXT:
+ case MODE_GETBULK: /* XXXWWW */
+ if (data && data->data.voidp)
+ netsnmp_table_data_build_result(reginfo, reqinfo, request,
+ row,
+ table_info->colnum,
+ data->type,
+ data->data.voidp,
+ data->data_len);
+ break;
+
+ case MODE_SET_RESERVE1:
+ if (data) {
+ /*
+ * Can we modify the existing row?
+ */
+ if (!data->writable) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOTWRITABLE);
+ } else if (request->requestvb->type != data->type) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGTYPE);
+ }
+ } else if (datatable->rowstatus_column == table_info->colnum) {
+ /*
+ * Otherwise, this is where we create a new row using
+ * the RowStatus object (essentially duplicating the
+ * steps followed earlier in the 'allow_creation' case)
+ */
+ switch (*(request->requestvb->val.integer)) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ newrowstash =
+ netsnmp_table_data_set_create_newrowstash(
+ datatable, table_info);
+ newrow = newrowstash->newrow;
+ row = newrow;
+ netsnmp_oid_stash_add_data(stashp, suffix, suffix_len,
+ newrowstash);
+ }
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /*
+ * If the agent receives a SET request for an object in a non-existant
+ * row, then the RESERVE1 pass will create the row automatically.
+ *
+ * But since the row doesn't exist at that point, the test for whether
+ * the object is writable or not will be skipped. So we need to check
+ * for this possibility again here.
+ *
+ * Similarly, if row creation is under the control of the RowStatus
+ * object (i.e. allow_creation == 0), but this particular request
+ * doesn't include such an object, then the row won't have been created,
+ * and the writable check will also have been skipped. Again - check here.
+ */
+ if (data && data->writable == 0) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOTWRITABLE);
+ continue;
+ }
+ if (datatable->rowstatus_column == table_info->colnum) {
+ switch (*(request->requestvb->val.integer)) {
+ case RS_ACTIVE:
+ case RS_NOTINSERVICE:
+ /*
+ * Can only operate on pre-existing rows.
+ */
+ if (!newrowstash || newrowstash->created) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ continue;
+ }
+ break;
+
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ /*
+ * Can only operate on newly created rows.
+ */
+ if (!(newrowstash && newrowstash->created)) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ continue;
+ }
+ break;
+
+ case RS_DESTROY:
+ /*
+ * Can operate on new or pre-existing rows.
+ */
+ break;
+
+ case RS_NOTREADY:
+ default:
+ /*
+ * Not a valid value to Set
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGVALUE);
+ continue;
+ }
+ }
+ if (!data ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ continue;
+ }
+
+ /*
+ * modify row and set new value
+ */
+ SNMP_FREE(data->data.string);
+ data->data.string =
+ netsnmp_strdup_and_null(request->requestvb->val.string,
+ request->requestvb->val_len);
+ if (!data->data.string) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ data->data_len = request->requestvb->val_len;
+
+ if (datatable->rowstatus_column == table_info->colnum) {
+ switch (*(request->requestvb->val.integer)) {
+ case RS_CREATEANDGO:
+ /*
+ * XXX: check legality
+ */
+ *(data->data.integer) = RS_ACTIVE;
+ break;
+
+ case RS_CREATEANDWAIT:
+ /*
+ * XXX: check legality
+ */
+ *(data->data.integer) = RS_NOTINSERVICE;
+ break;
+
+ case RS_DESTROY:
+ newrowstash->deleted = 1;
+ break;
+ }
+ }
+ break;
+
+ case MODE_SET_ACTION:
+
+ /*
+ * Install the new row into the stored table.
+ * Do this only *once* per row ....
+ */
+ if (newrowstash->state != STATE_ACTION) {
+ newrowstash->state = STATE_ACTION;
+ if (newrowstash->created) {
+ netsnmp_table_dataset_add_row(datatable, newrow);
+ } else {
+ netsnmp_table_dataset_replace_row(datatable,
+ row, newrow);
+ }
+ }
+ /*
+ * ... but every (relevant) varbind in the request will
+ * need to know about this new row, so update the
+ * per-request row information regardless
+ */
+ if (newrowstash->created) {
+ netsnmp_request_add_list_data(request,
+ netsnmp_create_data_list(TABLE_DATA_NAME,
+ newrow, NULL));
+ }
+ break;
+
+ case MODE_SET_UNDO:
+ /*
+ * extract the new row, replace with the old or delete
+ */
+ if (newrowstash->state != STATE_UNDO) {
+ newrowstash->state = STATE_UNDO;
+ if (newrowstash->created) {
+ netsnmp_table_dataset_remove_and_delete_row(datatable, newrow);
+ } else {
+ netsnmp_table_dataset_replace_row(datatable,
+ newrow, row);
+ netsnmp_table_dataset_delete_row(newrow);
+ }
+ newrow = NULL;
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ if (newrowstash->state != STATE_COMMIT) {
+ newrowstash->state = STATE_COMMIT;
+ if (!newrowstash->created) {
+ netsnmp_request_info *req;
+ netsnmp_table_dataset_delete_row(row);
+
+ /* Walk the request list to update the reference to the old row w/ th new one */
+ for (req = requests; req; req=req->next) {
+
+ /*
+ * For requests that have the old row values,
+ * so add the newly-created row information.
+ */
+ if ((netsnmp_table_row *) netsnmp_extract_table_row(req) == row) {
+ netsnmp_request_remove_list_data(req, TABLE_DATA_ROW);
+ netsnmp_request_add_list_data(req,
+ netsnmp_create_data_list(TABLE_DATA_ROW, newrow, NULL));
+ }
+ }
+
+ row = NULL;
+ }
+ if (newrowstash->deleted) {
+ netsnmp_table_dataset_remove_and_delete_row(datatable, newrow);
+ newrow = NULL;
+ }
+ }
+ break;
+
+ case MODE_SET_FREE:
+ if (newrowstash && newrowstash->state != STATE_FREE) {
+ newrowstash->state = STATE_FREE;
+ netsnmp_table_dataset_delete_row(newrow);
+ newrow = NULL;
+ }
+ break;
+ }
+ }
+
+ /* next handler called automatically - 'AUTO_NEXT' */
+ return SNMP_ERR_NOERROR;
+}
+
+/**
+ * extracts a netsnmp_table_data_set pointer from a given request
+ */
+NETSNMP_INLINE netsnmp_table_data_set *
+netsnmp_extract_table_data_set(netsnmp_request_info *request)
+{
+ return (netsnmp_table_data_set *)
+ netsnmp_request_get_list_data(request, TABLE_DATA_SET_NAME);
+}
+
+/**
+ * extracts a netsnmp_table_data_set pointer from a given request
+ */
+netsnmp_table_data_set_storage *
+netsnmp_extract_table_data_set_column(netsnmp_request_info *request,
+ unsigned int column)
+{
+ netsnmp_table_data_set_storage *data =
+ netsnmp_extract_table_row_data( request );
+ if (data) {
+ data = netsnmp_table_data_set_find_column(data, column);
+ }
+ return data;
+}
+
+
+/* ==================================
+ *
+ * Data Set API: Config-based operation
+ *
+ * ================================== */
+
+/** registers a table_dataset so that the "add_row" snmpd.conf token
+ * can be used to add data to this table. If registration_name is
+ * NULL then the name used when the table was created will be used
+ * instead.
+ *
+ * @todo create a properly free'ing registeration pointer for the
+ * datalist, and get the datalist freed at shutdown.
+ */
+void
+netsnmp_register_auto_data_table(netsnmp_table_data_set *table_set,
+ char *registration_name)
+{
+ data_set_tables *tables;
+ tables = SNMP_MALLOC_TYPEDEF(data_set_tables);
+ if (!tables)
+ return;
+ tables->table_set = table_set;
+ if (!registration_name) {
+ registration_name = table_set->table->name;
+ }
+ netsnmp_add_list_data(&auto_tables, netsnmp_create_data_list(registration_name, tables, NULL)); /* XXX */
+}
+
+#ifndef NETSNMP_DISABLE_MIB_LOADING
+static void
+_table_set_add_indexes(netsnmp_table_data_set *table_set, struct tree *tp)
+{
+ oid name[MAX_OID_LEN];
+ size_t name_length = MAX_OID_LEN;
+ struct index_list *index;
+ struct tree *indexnode;
+ u_char type;
+ int fixed_len = 0;
+
+ /*
+ * 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 implied, mark it as such. also mark fixed length
+ * octet strings as implied (ie no length prefix) as well.
+ * */
+ if ((TYPE_OCTETSTR == indexnode->type) && /* octet str */
+ (NULL != indexnode->ranges) && /* & has range */
+ (NULL == indexnode->ranges->next) && /* but only one */
+ (indexnode->ranges->high == /* & high==low */
+ indexnode->ranges->low)) {
+ type |= ASN_PRIVATE;
+ fixed_len = indexnode->ranges->high;
+ }
+ else if (index->isimplied)
+ type |= ASN_PRIVATE;
+
+ DEBUGMSGTL(("table_set_add_table",
+ "adding default index of type %d\n", type));
+ netsnmp_table_dataset_add_index(table_set, type);
+
+ /*
+ * hack alert: for fixed lenght strings, save the
+ * lenght for use during oid parsing.
+ */
+ if (fixed_len) {
+ /*
+ * find last (just added) index
+ */
+ netsnmp_variable_list *var = table_set->table->indexes_template;
+ while (NULL != var->next_variable)
+ var = var->next_variable;
+ var->val_len = fixed_len;
+ }
+ }
+}
+/** @internal */
+void
+netsnmp_config_parse_table_set(const char *token, char *line)
+{
+ oid table_name[MAX_OID_LEN];
+ size_t table_name_length = MAX_OID_LEN;
+ struct tree *tp;
+ netsnmp_table_data_set *table_set;
+ data_set_tables *tables;
+ unsigned int mincol = 0xffffff, maxcol = 0;
+ 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;
+ }
+
+ table_set = netsnmp_create_table_data_set(line);
+
+ /*
+ * check for augments indexes
+ */
+ if (NULL != tp->augments) {
+ oid name[MAX_OID_LEN];
+ size_t name_length = MAX_OID_LEN;
+ struct tree *tp2;
+
+ if (!snmp_parse_oid(tp->augments, name, &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 == (tp2 = get_tree(name, 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_add_indexes(table_set, tp2);
+ }
+
+ _table_set_add_indexes(table_set, tp);
+
+ /*
+ * loop through children and add each column info
+ */
+ for (tp = tp->child_list; tp; tp = tp->next_peer) {
+ int canwrite = 0;
+ u_char type;
+ 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_table",
+ "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_table",
+ "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);
+}
+#endif /* NETSNMP_DISABLE_MIB_LOADING */
+
+/** @internal */
+void
+netsnmp_config_parse_add_row(const char *token, char *line)
+{
+ char buf[SNMP_MAXBUF_MEDIUM];
+ char tname[SNMP_MAXBUF_MEDIUM];
+ size_t buf_size;
+ int rc;
+
+ data_set_tables *tables;
+ netsnmp_variable_list *vb; /* containing only types */
+ netsnmp_table_row *row;
+ netsnmp_table_data_set_storage *dr;
+
+ line = copy_nword(line, tname, SNMP_MAXBUF_MEDIUM);
+
+ tables = (data_set_tables *) netsnmp_get_list_data(auto_tables, tname);
+ if (!tables) {
+ config_pwarn("Unknown table trying to add a row");
+ return;
+ }
+
+ /*
+ * do the indexes first
+ */
+ row = netsnmp_create_table_data_row();
+
+ for (vb = tables->table_set->table->indexes_template; vb;
+ vb = vb->next_variable) {
+ if (!line) {
+ config_pwarn("missing an index value");
+ return;
+ }
+
+ DEBUGMSGTL(("table_set_add_row", "adding index of type %d\n",
+ vb->type));
+ buf_size = SNMP_MAXBUF_MEDIUM;
+ line = read_config_read_memory(vb->type, line, buf, &buf_size);
+ netsnmp_table_row_add_index(row, vb->type, buf, buf_size);
+ }
+
+ /*
+ * then do the data
+ */
+ for (dr = tables->table_set->default_row; dr; dr = dr->next) {
+ if (!line) {
+ config_pwarn("missing a data value. "
+ "All columns must be specified.");
+ snmp_log(LOG_WARNING," can't find value for column %d\n",
+ dr->column - 1);
+ return;
+ }
+
+ buf_size = SNMP_MAXBUF_MEDIUM;
+ line = read_config_read_memory(dr->type, line, buf, &buf_size);
+ DEBUGMSGTL(("table_set_add_row",
+ "adding data at column %d of type %d\n", dr->column,
+ dr->type));
+ netsnmp_set_row_column(row, dr->column, dr->type, buf, buf_size);
+ if (dr->writable)
+ netsnmp_mark_row_column_writable(row, dr->column, 1); /* make writable */
+ }
+ rc = netsnmp_table_data_add_row(tables->table_set->table, row);
+ if (SNMPERR_SUCCESS != rc) {
+ config_pwarn("error adding table row");
+ }
+ if (NULL != line) {
+ config_pwarn("extra data value. Too many columns specified.");
+ snmp_log(LOG_WARNING," extra data '%s'\n", line);
+ }
+}
+
+
+/* ==================================
+ *
+ * Data Set API: Row operations
+ *
+ * ================================== */
+
+/** returns the first row in the table */
+netsnmp_table_row *
+netsnmp_table_data_set_get_first_row(netsnmp_table_data_set *table)
+{
+ return netsnmp_table_data_get_first_row(table->table);
+}
+
+/** returns the next row in the table */
+netsnmp_table_row *
+netsnmp_table_data_set_get_next_row(netsnmp_table_data_set *table,
+ netsnmp_table_row *row)
+{
+ return netsnmp_table_data_get_next_row(table->table, row);
+}
+
+int
+netsnmp_table_set_num_rows(netsnmp_table_data_set *table)
+{
+ if (!table)
+ return 0;
+ return netsnmp_table_data_num_rows(table->table);
+}
+
+/* ==================================
+ *
+ * Data Set API: Column operations
+ *
+ * ================================== */
+
+/** Finds a column within a given storage set, given the pointer to
+ the start of the storage set list.
+*/
+netsnmp_table_data_set_storage *
+netsnmp_table_data_set_find_column(netsnmp_table_data_set_storage *start,
+ unsigned int column)
+{
+ while (start && start->column != column)
+ start = start->next;
+ return start;
+}
+
+/**
+ * marks a given column in a row as writable or not.
+ */
+int
+netsnmp_mark_row_column_writable(netsnmp_table_row *row, int column,
+ int writable)
+{
+ netsnmp_table_data_set_storage *data;
+
+ if (!row)
+ return SNMPERR_GENERR;
+
+ data = (netsnmp_table_data_set_storage *) row->data;
+ data = netsnmp_table_data_set_find_column(data, column);
+
+ if (!data) {
+ /*
+ * create it
+ */
+ data = SNMP_MALLOC_TYPEDEF(netsnmp_table_data_set_storage);
+ if (!data) {
+ snmp_log(LOG_CRIT, "no memory in netsnmp_set_row_column");
+ return SNMPERR_MALLOC;
+ }
+ data->column = column;
+ data->writable = writable;
+ data->next = row->data;
+ row->data = data;
+ } else {
+ data->writable = writable;
+ }
+ return SNMPERR_SUCCESS;
+}
+
+/**
+ * sets a given column in a row with data given a type, value, and
+ * length. Data is memdup'ed by the function.
+ */
+int
+netsnmp_set_row_column(netsnmp_table_row *row, unsigned int column,
+ int type, const char *value, size_t value_len)
+{
+ netsnmp_table_data_set_storage *data;
+
+ if (!row)
+ return SNMPERR_GENERR;
+
+ data = (netsnmp_table_data_set_storage *) row->data;
+ data = netsnmp_table_data_set_find_column(data, column);
+
+ if (!data) {
+ /*
+ * create it
+ */
+ data = SNMP_MALLOC_TYPEDEF(netsnmp_table_data_set_storage);
+ if (!data) {
+ snmp_log(LOG_CRIT, "no memory in netsnmp_set_row_column");
+ return SNMPERR_MALLOC;
+ }
+
+ data->column = column;
+ data->type = type;
+ data->next = row->data;
+ row->data = data;
+ }
+
+ if (value) {
+ if (data->type != type)
+ return SNMPERR_GENERR;
+
+ SNMP_FREE(data->data.voidp);
+ if (value_len) {
+ if (memdup(&data->data.string, value, (value_len)) !=
+ SNMPERR_SUCCESS) {
+ snmp_log(LOG_CRIT, "no memory in netsnmp_set_row_column");
+ return SNMPERR_MALLOC;
+ }
+ } else {
+ data->data.string = malloc(1);
+ }
+ data->data_len = value_len;
+ }
+ return SNMPERR_SUCCESS;
+}
+
+/* ==================================
+ *
+ * Data Set API: Index operations
+ *
+ * ================================== */
+
+/** adds an index to the table. Call this repeatly for each index. */
+NETSNMP_INLINE void
+netsnmp_table_dataset_add_index(netsnmp_table_data_set *table, u_char type)
+{
+ if (!table)
+ return;
+ netsnmp_table_data_add_index(table->table, type);
+}
+
+/** adds multiple indexes to a table_dataset helper object.
+ * To end the list, use a 0 after the list of ASN index types. */
+void
+#if HAVE_STDARG_H
+netsnmp_table_set_add_indexes(netsnmp_table_data_set *tset,
+ ...)
+#else
+netsnmp_table_set_add_indexes(va_alist)
+ va_dcl
+#endif
+{
+ va_list debugargs;
+ int type;
+
+#if HAVE_STDARG_H
+ va_start(debugargs, tset);
+#else
+ netsnmp_table_data_set *tset;
+
+ va_start(debugargs);
+ tset = va_arg(debugargs, netsnmp_table_data_set *);
+#endif
+
+ while ((type = va_arg(debugargs, int)) != 0) {
+ netsnmp_table_dataset_add_index(tset, (u_char)type);
+ }
+
+ va_end(debugargs);
+}
+
+/** @}
+ */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/table_generic.c b/cleopatre/application/spidnetsnmp/agent/helpers/table_generic.c
new file mode 100644
index 0000000000..75424f3a1e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/table_generic.c
@@ -0,0 +1,347 @@
+/*
+ * table_generic.c
+ *
+ * Generic table API framework
+ */
+
+/** @defgroup table_generic generic_table_API
+ * General requirements for a table helper.
+ * @ingroup table
+ *
+ * A given table helper need not implement the whole of this API,
+ * and may need to adjust the prototype of certain routines.
+ * But this description provides a suitable standard design framework.
+ *
+ * @{
+ */
+
+/* =======================================================
+ *
+ * Table Maintenance:
+ * create/delete table
+ * create/copy/clone/delete row
+ * add/replace/remove row
+ *
+ * ======================================================= */
+
+/** @defgroup table_maintenance table_maintenance
+ *
+ * Routines for maintaining the contents of a table.
+ * This would typically be part of implementing an SNMP MIB,
+ * but could potentially also be used for a standalone table.
+ *
+ * This section of the generic API is primarily relevant to
+ * table helpers where the representation of the table is
+ * constructed and maintained within the helper itself.
+ * "External" tables will typically look after such aspects
+ * directly, although this section of the abstract API
+ * framework could also help direct the design of such
+ * table-specific implementations.
+ *
+ * @{
+ */
+
+/** Create a structure to represent the table.
+ *
+ * This could be as simple as the head of a linked
+ * list, or a more complex container structure.
+ * The 'name' field would typically be used to
+ * distinguish between several tables implemented
+ * using the same table helper. The 'flags' field
+ * would be used to control various (helper-specific)
+ * aspects of table behaviour.
+ *
+ * The table structure returned should typically be
+ * regarded as an opaque, private structure. All
+ * operations on the content of the table should
+ * ideally use the appropriate routines from this API.
+ */
+void *
+netsnmp_generic_create_table( const char *name, int flags ) {
+}
+
+/** Release the structure representing a table.
+ * Any rows still contained within the table
+ * should also be removed and deleted.
+ */
+void
+netsnmp_generic_delete_table( void *table ) {
+}
+
+/** Create a new row structure suitable for this style of table.
+ * Note that this would typically be a 'standalone' row, and
+ * would not automatically be inserted into an actual table.
+ */
+void *
+netsnmp_generic_create_row( void ) {
+}
+
+/** Create a new copy of the specified row.
+ */
+void *
+netsnmp_generic_clone_row( void *row ) {
+}
+
+/** Copy the contents of one row into another.
+ * The destination row structure should be
+ * created before this routine is called.
+ */
+int
+netsnmp_generic_copy_row( void *dst_row, void *src_row ) {
+}
+
+/** Delete a row data structure.
+ * The row should be removed from any relevant
+ * table(s) before this routine is called.
+ */
+void
+netsnmp_generic_delete_row( void *row ) {
+}
+
+/** Add a row to the table.
+ */
+int
+netsnmp_generic_add_row( void *table, void *row ) {
+}
+
+/** Replace one row with another in the table.
+ * This will typically (but not necessarily) involve
+ * two rows sharing the same index information (e.g.
+ * to implement update/restore-style SET behaviour).
+ */
+int
+netsnmp_generic_replace_row( void *table, void *old_row, void *new_row ) {
+}
+
+/** Remove a row from the table.
+ * The data structure for the row should not be released,
+ * and would be the return value of this routine.
+ */
+void *
+netsnmp_generic_remove_row( void *table, void *row ) {
+}
+
+/** Remove and delete a row from the table.
+ */
+void
+netsnmp_generic_remove_delete_row( void *table, void *row ) {
+}
+
+/** @} end of table_maintenance */
+
+/* =======================================================
+ *
+ * MIB Maintenance:
+ * create a handler registration
+ * register/unregister table
+ * extract table from request
+ * extract/insert row
+ *
+ * ======================================================= */
+
+/** @defgroup mib_maintenance mib_maintenance
+ *
+ * Routines for maintaining a MIB table.
+ *
+ * @{
+ */
+
+/** Create a MIB handler structure.
+ * This will typically be invoked within the corresponding
+ * 'netsnmp_generic_register' routine (or the registration
+ * code of a sub-helper based on this helper).
+ *
+ * Alternatively, it might be called from the initialisation
+ * code of a particular MIB table implementation.
+ */
+netsnmp_mib_handler *
+netsnmp_generic_get_handler(void /* table specific */ ) {
+
+}
+
+/** Free a MIB handler structure, releasing any related resources.
+ * Possibly called automatically by 'netsnmp_unregister_handler' ?
+ */
+netsnmp_generic_free_handler( netsnmp_mib_handler *handler ) {
+
+}
+
+/** Register a MIB table with the SNMP agent.
+ */
+int
+netsnmp_generic_register(netsnmp_handler_registration *reginfo,
+ void *table,
+ netsnmp_table_registration_info *table_info) {
+}
+
+/** Unregister a MIB table from the SNMP agent.
+ * This should also release the internal representation of the table.
+ * ?? Is a table-specific version of this needed, or would
+ * 'netsnmp_unregister_handler' + 'netsnmp_generic_free_handler' do?
+ */
+int
+netsnmp_generic_unregister(netsnmp_handler_registration *reginfo) {
+}
+
+/** Extract the table relating to a requested varbind.
+ */
+void
+netsnmp_generic_extract_table( netsnmp_request_info *request ) {
+}
+
+/** Extract the row relating to a requested varbind.
+ */
+void
+netsnmp_generic_extract_row( netsnmp_request_info *request ) {
+}
+
+/** Associate a (new) row with the requested varbind.
+ * The row should also be associated with any other
+ * varbinds that refer to the same index values.
+ */
+void
+netsnmp_generic_insert_row( netsnmp_request_info *request, void *row ) {
+}
+
+/** @} end of mib_maintenance */
+
+/* =======================================================
+ *
+ * Row Operations
+ * get first/this/next row
+ * get row/next row by index
+ * get row/next row by OID
+ * number of rows
+ *
+ * ======================================================= */
+
+/** @defgroup table_rows table_rows
+ *
+ * Routines for working with the rows of a table.
+ *
+ * @{
+ */
+
+/** Retrieve the first row of the table.
+ */
+void *
+netsnmp_generic_row_first( void *table ) {
+}
+
+/** Retrieve the given row from the table.
+ * This could either be the same data pointer,
+ * passed in, or a separate row structure
+ * sharing the same index values (or NULL).
+ *
+ * This routine also provides a means to tell
+ * whether a given row is present in the table.
+ */
+void *
+netsnmp_generic_row_get( void *table, void *row ) {
+}
+
+/** Retrieve the following row from the table.
+ * If the specified row is not present, this
+ * routine should return the entry next after
+ * the position this row would have occupied.
+ */
+void *
+netsnmp_generic_row_next( void *table, void *row ) {
+}
+
+/** Retrieve the row with the specified index values.
+ */
+void *
+netsnmp_generic_row_get_byidx( void *table,
+ netsnmp_variable_list *indexes ) {
+}
+
+/** Retrieve the next row after the specified index values.
+ */
+void *
+netsnmp_generic_row_next_byidx( void *table,
+ netsnmp_variable_list *indexes ) {
+
+}
+
+/** Retrieve the row with the specified instance OIDs.
+ */
+void *
+netsnmp_generic_row_get_byoid( void *table, oid *instance, size_t len ) {
+}
+
+/** Retrieve the next row after the specified instance OIDs.
+ */
+void *
+netsnmp_generic_row_next_byoid( void *table, oid *instance, size_t len ) {
+}
+
+/** Report the number of rows in the table.
+ */
+int
+netsnmp_generic_row_count( void *table ) {
+}
+
+/** @} end of table_rows */
+
+/* =======================================================
+ *
+ * Index Operations
+ * get table index structure
+ * get row index values/OIDs
+ * compare row with index/OIDs
+ * subtree comparisons (index/OIDs)
+ *
+ * ======================================================= */
+
+/** @defgroup table_indexes table_indexes
+ *
+ * Routines for working with row indexes.
+ *
+ * @{
+ */
+
+/** Retrieve the indexing structure of the table.
+ */
+netsnmp_variable_list *
+netsnmp_generic_idx( void *table ) {
+}
+
+/** Report the index values for a row.
+ */
+netsnmp_variable_list *
+netsnmp_generic_row_idx( void *row ) {
+}
+
+/** Report the instance OIDs for a row.
+ */
+size_t
+netsnmp_generic_row_oid( void *row, oid *instances ) {
+}
+
+/** Compare a row against the specified index values.
+ */
+int
+netsnmp_generic_compare_idx( void *row, netsnmp_variable_list *index ) {
+}
+
+/** Compare a row against the specified instance OIDs.
+ */
+int
+netsnmp_generic_compare_oid( void *row, oid *instances, size_t len ) {
+}
+
+/** Check if a row lies within a subtree of index values.
+ */
+int
+netsnmp_generic_compare_subtree_idx( void *row, netsnmp_variable_list *index ) {
+}
+
+/** Check if a row lies within a subtree of instance OIDs.
+ */
+int
+netsnmp_generic_compare_subtree_oid( void *row, oid *instances, size_t len ) {
+}
+
+/** @} end of table_indexes */
+/** @} end of table_generic */
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/table_iterator.c b/cleopatre/application/spidnetsnmp/agent/helpers/table_iterator.c
new file mode 100644
index 0000000000..df05aad551
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/table_iterator.c
@@ -0,0 +1,1089 @@
+/*
+ * table_iterator.c
+ */
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+/** @defgroup table_iterator table_iterator
+ * The table iterator helper is designed to simplify the task of writing a table handler for the net-snmp agent when the data being accessed is not in an oid sorted form and must be accessed externally.
+ * @ingroup table
+ Functionally, it is a specialized version of the more
+ generic table helper but easies the burden of GETNEXT processing by
+ manually looping through all the data indexes retrieved through
+ function calls which should be supplied by the module that wishes
+ help. The module the table_iterator helps should, afterwards,
+ never be called for the case of "MODE_GETNEXT" and only for the GET
+ and SET related modes instead.
+
+ The fundamental notion between the table iterator is that it
+ allows your code to iterate over each "row" within your data
+ storage mechanism, without requiring that it be sorted in a
+ SNMP-index-compliant manner. Through the get_first_data_point and
+ get_next_data_point hooks, the table_iterator helper will
+ repeatedly call your hooks to find the "proper" row of data that
+ needs processing. The following concepts are important:
+
+ - A loop context is a pointer which indicates where in the
+ current processing of a set of rows you currently are. Allows
+ the get_*_data_point routines to move from one row to the next,
+ once the iterator handler has identified the appropriate row for
+ this request, the job of the loop context is done. The
+ most simple example would be a pointer to an integer which
+ simply counts rows from 1 to X. More commonly, it might be a
+ pointer to a linked list node, or someother internal or
+ external reference to a data set (file seek value, array
+ pointer, ...). If allocated during iteration, either the
+ free_loop_context_at_end (preferably) or the free_loop_context
+ pointers should be set.
+
+ - A data context is something that your handler code can use
+ in order to retrieve the rest of the data for the needed
+ row. This data can be accessed in your handler via
+ netsnmp_extract_iterator_context api with the netsnmp_request_info
+ structure that's passed in.
+ The important difference between a loop context and a
+ data context is that multiple data contexts can be kept by the
+ table_iterator helper, where as only one loop context will
+ ever be held by the table_iterator helper. If allocated
+ during iteration the free_data_context pointer should be set
+ to an appropriate function.
+
+ The table iterator operates in a series of steps that call your
+ code hooks from your netsnmp_iterator_info registration pointer.
+
+ - the get_first_data_point hook is called at the beginning of
+ processing. It should set the variable list to a list of
+ indexes for the given table. It should also set the
+ loop_context and maybe a data_context which you will get a
+ pointer back to when it needs to call your code to retrieve
+ actual data later. The list of indexes should be returned
+ after being update.
+
+ - the get_next_data_point hook is then called repeatedly and is
+ passed the loop context and the data context for it to update.
+ The indexes, loop context and data context should all be
+ updated if more data is available, otherwise they should be
+ left alone and a NULL should be returned. Ideally, it should
+ update the loop context without the need to reallocate it. If
+ reallocation is necessary for every iterative step, then the
+ free_loop_context function pointer should be set. If not,
+ then the free_loop_context_at_end pointer should be set, which
+ is more efficient since a malloc/free will only be performed
+ once for every iteration.
+ *
+ * @{
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/table.h>
+#include <net-snmp/agent/serialize.h>
+#include <net-snmp/agent/table_iterator.h>
+#include <net-snmp/agent/stash_cache.h>
+
+/* ==================================
+ *
+ * Iterator API: Table maintenance
+ *
+ * ================================== */
+
+ /*
+ * Iterator-based tables are typically maintained by external
+ * code, and this helper is really only concerned with
+ * mapping between a walk through this local representation,
+ * and the requirements of SNMP table ordering.
+ * However, there's a case to be made for considering the
+ * iterator info structure as encapsulating the table, so
+ * it's probably worth defining the table creation/deletion
+ * routines from the generic API.
+ *
+ * Time will show whether this is a sensible approach or not.
+ */
+netsnmp_iterator_info *
+netsnmp_iterator_create_table( Netsnmp_First_Data_Point *firstDP,
+ Netsnmp_Next_Data_Point *nextDP,
+ Netsnmp_First_Data_Point *getidx,
+ netsnmp_variable_list *indexes)
+{
+ netsnmp_iterator_info *iinfo =
+ SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+
+ if ( !iinfo )
+ return NULL;
+
+ if ( indexes )
+ iinfo->indexes = snmp_clone_varbind(indexes);
+ iinfo->get_first_data_point = firstDP;
+ iinfo->get_next_data_point = nextDP;
+ iinfo->get_row_indexes = getidx;
+
+ return iinfo;
+}
+
+void
+netsnmp_iterator_delete_table( netsnmp_iterator_info *iinfo )
+{
+ if (!iinfo)
+ return;
+
+ if (iinfo->indexes) {
+ snmp_free_varbind( iinfo->indexes );
+ iinfo->indexes = NULL;
+ }
+ SNMP_FREE( iinfo );
+}
+
+ /*
+ * The rest of the table maintenance section of the
+ * generic table API is Not Applicable to this helper.
+ *
+ * The contents of a iterator-based table will be
+ * maintained by the table-specific module itself.
+ */
+
+/* ==================================
+ *
+ * Iterator API: MIB maintenance
+ *
+ * ================================== */
+
+/** returns a netsnmp_mib_handler object for the table_iterator helper */
+netsnmp_mib_handler *
+netsnmp_get_table_iterator_handler(netsnmp_iterator_info *iinfo)
+{
+ netsnmp_mib_handler *me;
+
+ if (!iinfo)
+ return NULL;
+
+ me =
+ netsnmp_create_handler(TABLE_ITERATOR_NAME,
+ netsnmp_table_iterator_helper_handler);
+
+ if (!me)
+ return NULL;
+
+ me->myvoid = iinfo;
+ return me;
+}
+
+/**
+ * Creates and registers a table iterator helper handler calling
+ * netsnmp_create_handler with a handler name set to TABLE_ITERATOR_NAME
+ * and access method, netsnmp_table_iterator_helper_handler.
+ *
+ * If NOT_SERIALIZED is not defined the function injects the serialize
+ * handler into the calling chain prior to calling netsnmp_register_table.
+ *
+ * @param reginfo is a pointer to a netsnmp_handler_registration struct
+ *
+ * @param iinfo is a pointer to a netsnmp_iterator_info struct
+ *
+ * @return MIB_REGISTERED_OK is returned if the registration was a success.
+ * Failures are MIB_REGISTRATION_FAILED, MIB_DUPLICATE_REGISTRATION.
+ * If iinfo is NULL, SNMPERR_GENERR is returned.
+ *
+ */
+int
+netsnmp_register_table_iterator(netsnmp_handler_registration *reginfo,
+ netsnmp_iterator_info *iinfo)
+{
+ reginfo->modes |= HANDLER_CAN_STASH;
+ netsnmp_inject_handler(reginfo,
+ netsnmp_get_table_iterator_handler(iinfo));
+ if (!iinfo)
+ return SNMPERR_GENERR;
+ if (!iinfo->indexes && iinfo->table_reginfo &&
+ iinfo->table_reginfo->indexes )
+ iinfo->indexes = snmp_clone_varbind( iinfo->table_reginfo->indexes );
+
+ return netsnmp_register_table(reginfo, iinfo->table_reginfo);
+}
+
+/** extracts the table_iterator specific data from a request.
+ * This function extracts the table iterator specific data from a
+ * netsnmp_request_info object. Calls netsnmp_request_get_list_data
+ * with request->parent_data set with data from a request that was added
+ * previously by a module and TABLE_ITERATOR_NAME handler name.
+ *
+ * @param request the netsnmp request info structure
+ *
+ * @return a void pointer(request->parent_data->data), otherwise NULL is
+ * returned if request is NULL or request->parent_data is NULL or
+ * request->parent_data object is not found.the net
+ *
+ */
+NETSNMP_INLINE void *
+netsnmp_extract_iterator_context(netsnmp_request_info *request)
+{
+ return netsnmp_request_get_list_data(request, TABLE_ITERATOR_NAME);
+}
+
+/** inserts table_iterator specific data for a newly
+ * created row into a request */
+NETSNMP_INLINE void
+netsnmp_insert_iterator_context(netsnmp_request_info *request, void *data)
+{
+ netsnmp_request_info *req;
+ netsnmp_table_request_info *table_info = NULL;
+ netsnmp_variable_list *this_index = NULL;
+ netsnmp_variable_list *that_index = NULL;
+ oid base_oid[] = {0, 0}; /* Make sure index OIDs are legal! */
+ oid this_oid[MAX_OID_LEN];
+ oid that_oid[MAX_OID_LEN];
+ size_t this_oid_len, that_oid_len;
+
+ if (!request)
+ return;
+
+ /*
+ * We'll add the new row information to any request
+ * structure with the same index values as the request
+ * passed in (which includes that one!).
+ *
+ * So construct an OID based on these index values.
+ */
+
+ table_info = netsnmp_extract_table_info(request);
+ this_index = table_info->indexes;
+ build_oid_noalloc(this_oid, MAX_OID_LEN, &this_oid_len,
+ base_oid, 2, this_index);
+
+ /*
+ * We need to look through the whole of the request list
+ * (as received by the current handler), as there's no
+ * guarantee that this routine will be called by the first
+ * varbind that refers to this row.
+ * In particular, a RowStatus controlled row creation
+ * may easily occur later in the variable list.
+ *
+ * So first, we rewind to the head of the list....
+ */
+ for (req=request; req->prev; req=req->prev)
+ ;
+
+ /*
+ * ... and then start looking for matching indexes
+ * (by constructing OIDs from these index values)
+ */
+ for (; req; req=req->next) {
+ table_info = netsnmp_extract_table_info(req);
+ that_index = table_info->indexes;
+ build_oid_noalloc(that_oid, MAX_OID_LEN, &that_oid_len,
+ base_oid, 2, that_index);
+
+ /*
+ * This request has the same index values,
+ * so add the newly-created row information.
+ */
+ if (snmp_oid_compare(this_oid, this_oid_len,
+ that_oid, that_oid_len) == 0) {
+ netsnmp_request_add_list_data(req,
+ netsnmp_create_data_list(TABLE_ITERATOR_NAME, data, NULL));
+ }
+ }
+}
+
+#define TI_REQUEST_CACHE "ti_cache"
+
+typedef struct ti_cache_info_s {
+ oid best_match[MAX_OID_LEN];
+ size_t best_match_len;
+ void *data_context;
+ Netsnmp_Free_Data_Context *free_context;
+ netsnmp_iterator_info *iinfo;
+ netsnmp_variable_list *results;
+} ti_cache_info;
+
+static void
+netsnmp_free_ti_cache(void *it) {
+ ti_cache_info *beer = it;
+ if (!it) return;
+ if (beer->data_context && beer->free_context) {
+ (beer->free_context)(beer->data_context, beer->iinfo);
+ }
+ if (beer->results) {
+ snmp_free_varbind(beer->results);
+ }
+ free(beer);
+}
+
+/* caches information (in the request) we'll need at a later point in time */
+static ti_cache_info *
+netsnmp_iterator_remember(netsnmp_request_info *request,
+ oid *oid_to_save,
+ size_t oid_to_save_len,
+ void *callback_data_context,
+ void *callback_loop_context,
+ netsnmp_iterator_info *iinfo)
+{
+ ti_cache_info *ti_info;
+
+ if (!request || !oid_to_save || oid_to_save_len > MAX_OID_LEN)
+ return NULL;
+
+ /* extract existing cached state */
+ ti_info = netsnmp_request_get_list_data(request, TI_REQUEST_CACHE);
+
+ /* no existing cached state. make a new one. */
+ if (!ti_info) {
+ ti_info = SNMP_MALLOC_TYPEDEF(ti_cache_info);
+ netsnmp_request_add_list_data(request,
+ netsnmp_create_data_list
+ (TI_REQUEST_CACHE,
+ ti_info,
+ netsnmp_free_ti_cache));
+ }
+
+ /* free existing cache before replacing */
+ if (ti_info->data_context && ti_info->free_context)
+ (ti_info->free_context)(ti_info->data_context, iinfo);
+
+ /* maybe generate it from the loop context? */
+ if (iinfo->make_data_context && !callback_data_context) {
+ callback_data_context =
+ (iinfo->make_data_context)(callback_loop_context, iinfo);
+
+ }
+
+ /* save data as requested */
+ ti_info->data_context = callback_data_context;
+ ti_info->free_context = iinfo->free_data_context;
+ ti_info->best_match_len = oid_to_save_len;
+ ti_info->iinfo = iinfo;
+ if (oid_to_save_len)
+ memcpy(ti_info->best_match, oid_to_save, oid_to_save_len * sizeof(oid));
+
+ return ti_info;
+}
+
+#define TABLE_ITERATOR_NOTAGAIN 255
+/* implements the table_iterator helper */
+int
+netsnmp_table_iterator_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_table_registration_info *tbl_info;
+ netsnmp_table_request_info *table_info = NULL;
+ oid coloid[MAX_OID_LEN];
+ size_t coloid_len;
+ int ret;
+ static oid myname[MAX_OID_LEN];
+ size_t myname_len;
+ int oldmode = 0;
+ netsnmp_iterator_info *iinfo;
+ int notdone;
+ int hintok = 0;
+ netsnmp_request_info *request, *reqtmp = NULL;
+ netsnmp_variable_list *index_search = NULL;
+ netsnmp_variable_list *free_this_index_search = NULL;
+ void *callback_loop_context = NULL, *last_loop_context;
+ void *callback_data_context = NULL;
+ ti_cache_info *ti_info = NULL;
+ int request_count = 0;
+ netsnmp_oid_stash_node **cinfo = NULL;
+ netsnmp_variable_list *old_indexes = NULL, *vb;
+ netsnmp_table_registration_info *table_reg_info = NULL;
+ int i;
+ netsnmp_data_list *ldata = NULL;
+
+ iinfo = (netsnmp_iterator_info *) handler->myvoid;
+ if (!iinfo || !reginfo || !reqinfo)
+ return SNMPERR_GENERR;
+
+ tbl_info = iinfo->table_reginfo;
+
+ /*
+ * copy in the table registration oid for later use
+ */
+ coloid_len = reginfo->rootoid_len + 2;
+ memcpy(coloid, reginfo->rootoid, reginfo->rootoid_len * sizeof(oid));
+ coloid[reginfo->rootoid_len] = 1; /* table.entry node */
+
+ /*
+ * illegally got here if these functions aren't defined
+ */
+ if (iinfo->get_first_data_point == NULL ||
+ iinfo->get_next_data_point == NULL) {
+ snmp_log(LOG_ERR,
+ "table_iterator helper called without data accessor functions\n");
+ return SNMP_ERR_GENERR;
+ }
+
+ /* preliminary analysis */
+ switch (reqinfo->mode) {
+ case MODE_GET_STASH:
+ cinfo = netsnmp_extract_stash_cache(reqinfo);
+ table_reg_info = netsnmp_find_table_registration_info(reginfo);
+
+ /* XXX: move this malloc to stash_cache handler? */
+ reqtmp = SNMP_MALLOC_TYPEDEF(netsnmp_request_info);
+ reqtmp->subtree = requests->subtree;
+ table_info = netsnmp_extract_table_info(requests);
+ netsnmp_request_add_list_data(reqtmp,
+ netsnmp_create_data_list
+ (TABLE_HANDLER_NAME,
+ (void *) table_info, NULL));
+
+ /* remember the indexes that were originally parsed. */
+ old_indexes = table_info->indexes;
+ break;
+
+ case MODE_GETNEXT:
+ for(request = requests ; request; request = request->next) {
+ if (request->processed)
+ continue;
+ table_info = netsnmp_extract_table_info(request);
+ if (table_info->colnum < tbl_info->min_column - 1) {
+ /* XXX: optimize better than this */
+ /* for now, just increase to colnum-1 */
+ /* we need to jump to the lowest result of the min_column
+ and take it, comparing to nothing from the request */
+ table_info->colnum = tbl_info->min_column - 1;
+ } else if (table_info->colnum > tbl_info->max_column) {
+ request->processed = TABLE_ITERATOR_NOTAGAIN;
+ }
+
+ ti_info =
+ netsnmp_request_get_list_data(request, TI_REQUEST_CACHE);
+ if (!ti_info) {
+ ti_info = SNMP_MALLOC_TYPEDEF(ti_cache_info);
+ netsnmp_request_add_list_data(request,
+ netsnmp_create_data_list
+ (TI_REQUEST_CACHE,
+ ti_info,
+ netsnmp_free_ti_cache));
+ }
+
+ /* XXX: if no valid requests, don't even loop below */
+ }
+ break;
+ }
+
+ /*
+ * collect all information for each needed row
+ */
+ if (reqinfo->mode == MODE_GET ||
+ reqinfo->mode == MODE_GETNEXT ||
+ reqinfo->mode == MODE_GET_STASH ||
+ reqinfo->mode == MODE_SET_RESERVE1) {
+ /*
+ * Count the number of request in the list,
+ * so that we'll know when we're finished
+ */
+ for(request = requests ; request; request = request->next)
+ if (!request->processed)
+ request_count++;
+ notdone = 1;
+ hintok = 1;
+ while(notdone) {
+ notdone = 0;
+
+ /* find first data point */
+ if (!index_search) {
+ if (free_this_index_search) {
+ /* previously done */
+ index_search = free_this_index_search;
+ } else {
+ for(request=requests ; request; request=request->next) {
+ table_info = netsnmp_extract_table_info(request);
+ if (table_info)
+ break;
+ }
+ if (!table_info) {
+ snmp_log(LOG_WARNING,
+ "no valid requests for iterator table %s\n",
+ reginfo->handlerName);
+ netsnmp_free_request_data_sets(reqtmp);
+ SNMP_FREE(reqtmp);
+ return SNMP_ERR_NOERROR;
+ }
+ index_search = snmp_clone_varbind(table_info->indexes);
+ free_this_index_search = index_search;
+
+ /* setup, malloc search data: */
+ if (!index_search) {
+ /*
+ * hmmm.... invalid table?
+ */
+ snmp_log(LOG_WARNING,
+ "invalid index list or failed malloc for table %s\n",
+ reginfo->handlerName);
+ netsnmp_free_request_data_sets(reqtmp);
+ SNMP_FREE(reqtmp);
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ }
+
+ /* if sorted, pass in a hint */
+ if (hintok && (iinfo->flags & NETSNMP_ITERATOR_FLAG_SORTED)) {
+ callback_loop_context = table_info;
+ }
+ index_search =
+ (iinfo->get_first_data_point) (&callback_loop_context,
+ &callback_data_context,
+ index_search, iinfo);
+
+ /* loop over each data point */
+ while(index_search) {
+
+ /* remember to free this later */
+ free_this_index_search = index_search;
+
+ /* compare against each request*/
+ for(request = requests ; request; request = request->next) {
+ if (request->processed)
+ continue;
+
+ /* XXX: store in an array for faster retrival */
+ table_info = netsnmp_extract_table_info(request);
+ coloid[reginfo->rootoid_len + 1] = table_info->colnum;
+
+ ti_info =
+ netsnmp_request_get_list_data(request, TI_REQUEST_CACHE);
+
+ switch(reqinfo->mode) {
+ case MODE_GET:
+ case MODE_SET_RESERVE1:
+ /* looking for exact matches */
+ build_oid_noalloc(myname, MAX_OID_LEN, &myname_len,
+ coloid, coloid_len, index_search);
+ if (snmp_oid_compare(myname, myname_len,
+ request->requestvb->name,
+ request->requestvb->name_length) == 0) {
+ /* keep this */
+ netsnmp_iterator_remember(request,
+ myname, myname_len,
+ callback_data_context,
+ callback_loop_context, iinfo);
+ request_count--; /* One less to look for */
+ } else {
+ if (iinfo->free_data_context && callback_data_context) {
+ (iinfo->free_data_context)(callback_data_context,
+ iinfo);
+ }
+ }
+ break;
+
+ case MODE_GET_STASH:
+ /* collect data for each column for every row */
+ build_oid_noalloc(myname, MAX_OID_LEN, &myname_len,
+ coloid, coloid_len, index_search);
+ reqinfo->mode = MODE_GET;
+ if (reqtmp)
+ ldata =
+ netsnmp_get_list_node(reqtmp->parent_data,
+ TABLE_ITERATOR_NAME);
+ if (!ldata) {
+ netsnmp_request_add_list_data(reqtmp,
+ netsnmp_create_data_list
+ (TABLE_ITERATOR_NAME,
+ callback_data_context,
+ NULL));
+ } else {
+ /* may have changed */
+ ldata->data = callback_data_context;
+ }
+
+ table_info->indexes = index_search;
+ for(i = table_reg_info->min_column;
+ i <= (int)table_reg_info->max_column; i++) {
+ myname[reginfo->rootoid_len + 1] = i;
+ table_info->colnum = i;
+ vb = reqtmp->requestvb =
+ SNMP_MALLOC_TYPEDEF(netsnmp_variable_list);
+ vb->type = ASN_NULL;
+ snmp_set_var_objid(vb, myname, myname_len);
+ netsnmp_call_next_handler(handler, reginfo,
+ reqinfo, reqtmp);
+ reqtmp->requestvb = NULL;
+ reqtmp->processed = 0;
+ if (vb->type != ASN_NULL) { /* XXX, not all */
+ netsnmp_oid_stash_add_data(cinfo, myname,
+ myname_len, vb);
+ } else {
+ snmp_free_var(vb);
+ }
+ }
+ reqinfo->mode = MODE_GET_STASH;
+ break;
+
+ case MODE_GETNEXT:
+ /* looking for "next" matches */
+ if (netsnmp_check_getnext_reply
+ (request, coloid, coloid_len, index_search,
+ &ti_info->results)) {
+ netsnmp_iterator_remember(request,
+ ti_info->results->name,
+ ti_info->results->name_length,
+ callback_data_context,
+ callback_loop_context, iinfo);
+ /*
+ * If we've been told that the rows are sorted,
+ * then the first valid one we find
+ * must be the right one.
+ */
+ if (iinfo->flags & NETSNMP_ITERATOR_FLAG_SORTED)
+ request_count--;
+
+ } else {
+ if (iinfo->free_data_context && callback_data_context) {
+ (iinfo->free_data_context)(callback_data_context,
+ iinfo);
+ }
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ case MODE_SET_COMMIT:
+ /* needed processing already done in RESERVE1 */
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "table_iterator called with unsupported mode\n");
+ break; /* XXX return */
+
+ }
+ }
+
+ /* Is there any point in carrying on? */
+ if (!request_count)
+ break;
+ /* get the next search possibility */
+ last_loop_context = callback_loop_context;
+ index_search =
+ (iinfo->get_next_data_point) (&callback_loop_context,
+ &callback_data_context,
+ index_search, iinfo);
+ if (iinfo->free_loop_context && last_loop_context &&
+ callback_data_context != last_loop_context) {
+ (iinfo->free_loop_context) (last_loop_context, iinfo);
+ last_loop_context = NULL;
+ }
+ }
+
+ /* free loop context before going on */
+ if (callback_loop_context && iinfo->free_loop_context_at_end) {
+ (iinfo->free_loop_context_at_end) (callback_loop_context,
+ iinfo);
+ callback_loop_context = NULL;
+ }
+
+ /* decide which (GETNEXT) requests are not yet filled */
+ if (reqinfo->mode == MODE_GETNEXT) {
+ for(request = requests ; request; request = request->next) {
+ if (request->processed)
+ continue;
+ ti_info =
+ netsnmp_request_get_list_data(request,
+ TI_REQUEST_CACHE);
+ if (!ti_info->results) {
+ int nc;
+ table_info = netsnmp_extract_table_info(request);
+ nc = netsnmp_table_next_column(table_info);
+ if (0 == nc) {
+ coloid[reginfo->rootoid_len+1] = table_info->colnum+1;
+ snmp_set_var_objid(request->requestvb,
+ coloid, reginfo->rootoid_len+2);
+ request->processed = TABLE_ITERATOR_NOTAGAIN;
+ break;
+ } else {
+ table_info->colnum = nc;
+ hintok = 0;
+ notdone = 1;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (reqinfo->mode == MODE_GET ||
+ reqinfo->mode == MODE_GETNEXT ||
+ reqinfo->mode == MODE_SET_RESERVE1) {
+ /* per request last minute processing */
+ for(request = requests ; request; request = request->next) {
+ if (request->processed)
+ continue;
+ ti_info =
+ netsnmp_request_get_list_data(request, TI_REQUEST_CACHE);
+ table_info =
+ netsnmp_extract_table_info(request);
+
+ if (!ti_info)
+ continue;
+
+ switch(reqinfo->mode) {
+
+ case MODE_GETNEXT:
+ if (ti_info->best_match_len)
+ snmp_set_var_objid(request->requestvb, ti_info->best_match,
+ ti_info->best_match_len);
+ else {
+ coloid[reginfo->rootoid_len+1] =
+ netsnmp_table_next_column(table_info);
+ if (0 == coloid[reginfo->rootoid_len+1]) {
+ /* out of range. */
+ coloid[reginfo->rootoid_len+1] = tbl_info->max_column + 1;
+ request->processed = TABLE_ITERATOR_NOTAGAIN;
+ }
+ snmp_set_var_objid(request->requestvb,
+ coloid, reginfo->rootoid_len+2);
+ request->processed = 1;
+ }
+ snmp_free_varbind(table_info->indexes);
+ table_info->indexes = snmp_clone_varbind(ti_info->results);
+ /* FALL THROUGH */
+
+ case MODE_GET:
+ case MODE_SET_RESERVE1:
+ if (ti_info->data_context)
+ /* we don't add a free pointer, since it's in the
+ TI_REQUEST_CACHE instead */
+ netsnmp_request_add_list_data(request,
+ netsnmp_create_data_list
+ (TABLE_ITERATOR_NAME,
+ ti_info->data_context,
+ NULL));
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ /* we change all GETNEXT operations into GET operations.
+ why? because we're just so nice to the lower levels.
+ maybe someday they'll pay us for it. doubtful though. */
+ oldmode = reqinfo->mode;
+ if (reqinfo->mode == MODE_GETNEXT) {
+ reqinfo->mode = MODE_GET;
+ }
+ } else if (reqinfo->mode == MODE_GET_STASH) {
+ netsnmp_free_request_data_sets(reqtmp);
+ SNMP_FREE(reqtmp);
+ table_info->indexes = old_indexes;
+ }
+
+
+ /* Finally, we get to call the next handler below us. Boy, wasn't
+ all that simple? They better be glad they don't have to do it! */
+ if (reqinfo->mode != MODE_GET_STASH) {
+ DEBUGMSGTL(("table_iterator", "call subhandler for mode: %s\n",
+ se_find_label_in_slist("agent_mode", oldmode)));
+ ret =
+ netsnmp_call_next_handler(handler, reginfo, reqinfo, requests);
+ }
+
+ /* reverse the previously saved mode if we were a getnext */
+ if (oldmode == MODE_GETNEXT) {
+ reqinfo->mode = oldmode;
+ }
+
+ /* cleanup */
+ if (free_this_index_search)
+ snmp_free_varbind(free_this_index_search);
+
+ return SNMP_ERR_NOERROR;
+}
+
+/* ==================================
+ *
+ * Iterator API: Row operations
+ *
+ * ================================== */
+
+void *
+netsnmp_iterator_row_first( netsnmp_iterator_info *iinfo ) {
+ netsnmp_variable_list *vp1, *vp2;
+ void *ctx1, *ctx2;
+
+ if (!iinfo)
+ return NULL;
+
+ vp1 = snmp_clone_varbind(iinfo->indexes);
+ vp2 = iinfo->get_first_data_point( &ctx1, &ctx2, vp1, iinfo );
+
+ if (!vp2)
+ ctx2 = NULL;
+
+ /* free loop context ?? */
+ snmp_free_varbind( vp1 );
+ return ctx2; /* or *ctx2 ?? */
+}
+
+void *
+netsnmp_iterator_row_get( netsnmp_iterator_info *iinfo, void *row )
+{
+ netsnmp_variable_list *vp1, *vp2;
+ void *ctx1, *ctx2;
+
+ if (!iinfo || !row)
+ return NULL;
+
+ /*
+ * This routine relies on being able to
+ * determine the indexes for a given row.
+ */
+ if (!iinfo->get_row_indexes)
+ return NULL;
+
+ vp1 = snmp_clone_varbind(iinfo->indexes);
+ ctx1 = row; /* Probably only need one of these ... */
+ ctx2 = row;
+ vp2 = iinfo->get_row_indexes( &ctx1, &ctx2, vp1, iinfo );
+
+ ctx2 = NULL;
+ if (vp2) {
+ ctx2 = netsnmp_iterator_row_get_byidx( iinfo, vp2 );
+ }
+ snmp_free_varbind( vp1 );
+ return ctx2;
+}
+
+void *
+netsnmp_iterator_row_next( netsnmp_iterator_info *iinfo, void *row )
+{
+ netsnmp_variable_list *vp1, *vp2;
+ void *ctx1, *ctx2;
+
+ if (!iinfo || !row)
+ return NULL;
+
+ /*
+ * This routine relies on being able to
+ * determine the indexes for a given row.
+ */
+ if (!iinfo->get_row_indexes)
+ return NULL;
+
+ vp1 = snmp_clone_varbind(iinfo->indexes);
+ ctx1 = row; /* Probably only need one of these ... */
+ ctx2 = row;
+ vp2 = iinfo->get_row_indexes( &ctx1, &ctx2, vp1, iinfo );
+
+ ctx2 = NULL;
+ if (vp2) {
+ ctx2 = netsnmp_iterator_row_next_byidx( iinfo, vp2 );
+ }
+ snmp_free_varbind( vp1 );
+ return ctx2;
+}
+
+void *
+netsnmp_iterator_row_get_byidx( netsnmp_iterator_info *iinfo,
+ netsnmp_variable_list *indexes )
+{
+ oid dummy[] = {0,0}; /* Keep 'build_oid' happy */
+ oid instance[MAX_OID_LEN];
+ size_t len = MAX_OID_LEN;
+
+ if (!iinfo || !indexes)
+ return NULL;
+
+ build_oid_noalloc(instance, MAX_OID_LEN, &len,
+ dummy, 2, indexes);
+ return netsnmp_iterator_row_get_byoid( iinfo, instance+2, len-2 );
+}
+
+void *
+netsnmp_iterator_row_next_byidx( netsnmp_iterator_info *iinfo,
+ netsnmp_variable_list *indexes )
+{
+ oid dummy[] = {0,0};
+ oid instance[MAX_OID_LEN];
+ size_t len = MAX_OID_LEN;
+
+ if (!iinfo || !indexes)
+ return NULL;
+
+ build_oid_noalloc(instance, MAX_OID_LEN, &len,
+ dummy, 2, indexes);
+ return netsnmp_iterator_row_next_byoid( iinfo, instance+2, len-2 );
+}
+
+void *
+netsnmp_iterator_row_get_byoid( netsnmp_iterator_info *iinfo,
+ oid *instance, size_t len )
+{
+ oid dummy[] = {0,0};
+ oid this_inst[ MAX_OID_LEN];
+ size_t this_len;
+ netsnmp_variable_list *vp1, *vp2;
+ void *ctx1, *ctx2;
+ int n;
+
+ if (!iinfo || !iinfo->get_first_data_point
+ || !iinfo->get_next_data_point )
+ return NULL;
+
+ if ( !instance || !len )
+ return NULL;
+
+ vp1 = snmp_clone_varbind(iinfo->indexes);
+ vp2 = iinfo->get_first_data_point( &ctx1, &ctx2, vp1, iinfo );
+ DEBUGMSGTL(("table:iterator:get", "first DP: %x %x %x\n",
+ ctx1, ctx2, vp2));
+
+ /* XXX - free context ? */
+
+ while ( vp2 ) {
+ this_len = MAX_OID_LEN;
+ build_oid_noalloc(this_inst, MAX_OID_LEN, &this_len, dummy, 2, vp2);
+ n = snmp_oid_compare( instance, len, this_inst+2, this_len-2 );
+ if ( n == 0 )
+ break; /* Found matching row */
+
+ if (( n > 0) &&
+ (iinfo->flags & NETSNMP_ITERATOR_FLAG_SORTED)) {
+ vp2 = NULL; /* Row not present */
+ break;
+ }
+
+ vp2 = iinfo->get_next_data_point( &ctx1, &ctx2, vp2, iinfo );
+ DEBUGMSGTL(("table:iterator:get", "next DP: %x %x %x\n",
+ ctx1, ctx2, vp2));
+ /* XXX - free context ? */
+ }
+
+ /* XXX - final free context ? */
+ snmp_free_varbind( vp1 );
+
+ return ( vp2 ? ctx2 : NULL );
+}
+
+void *
+netsnmp_iterator_row_next_byoid( netsnmp_iterator_info *iinfo,
+ oid *instance, size_t len )
+{
+ oid dummy[] = {0,0};
+ oid this_inst[ MAX_OID_LEN];
+ size_t this_len;
+ oid best_inst[ MAX_OID_LEN];
+ size_t best_len = 0;
+ netsnmp_variable_list *vp1, *vp2;
+ void *ctx1, *ctx2;
+ int n;
+
+ if (!iinfo || !iinfo->get_first_data_point
+ || !iinfo->get_next_data_point )
+ return NULL;
+
+ vp1 = snmp_clone_varbind(iinfo->indexes);
+ vp2 = iinfo->get_first_data_point( &ctx1, &ctx2, vp1, iinfo );
+ DEBUGMSGTL(("table:iterator:get", "first DP: %x %x %x\n",
+ ctx1, ctx2, vp2));
+
+ if ( !instance || !len ) {
+ snmp_free_varbind( vp1 );
+ return ( vp2 ? ctx2 : NULL ); /* First entry */
+ }
+
+ /* XXX - free context ? */
+
+ while ( vp2 ) {
+ this_len = MAX_OID_LEN;
+ build_oid_noalloc(this_inst, MAX_OID_LEN, &this_len, dummy, 2, vp2);
+ n = snmp_oid_compare( instance, len, this_inst+2, this_len-2 );
+
+ /*
+ * Look for the best-fit candidate for the next row
+ * (bearing in mind the rows may not be ordered "correctly")
+ */
+ if ( n > 0 ) {
+ if ( best_len == 0 ) {
+ memcpy( best_inst, this_inst, sizeof( this_inst ));
+ best_len = this_len;
+ if (iinfo->flags & NETSNMP_ITERATOR_FLAG_SORTED)
+ break;
+ } else {
+ n = snmp_oid_compare( best_inst, best_len, this_inst, this_len );
+ if ( n < 0 ) {
+ memcpy( best_inst, this_inst, sizeof( this_inst ));
+ best_len = this_len;
+ if (iinfo->flags & NETSNMP_ITERATOR_FLAG_SORTED)
+ break;
+ }
+ }
+ }
+
+ vp2 = iinfo->get_next_data_point( &ctx1, &ctx2, vp2, iinfo );
+ DEBUGMSGTL(("table:iterator:get", "next DP: %x %x %x\n",
+ ctx1, ctx2, vp2));
+ /* XXX - free context ? */
+ }
+
+ /* XXX - final free context ? */
+ snmp_free_varbind( vp1 );
+
+ return ( vp2 ? ctx2 : NULL );
+}
+
+int
+netsnmp_iterator_row_count( netsnmp_iterator_info *iinfo )
+{
+ netsnmp_variable_list *vp1, *vp2;
+ void *ctx1, *ctx2;
+ int i=0;
+
+ if (!iinfo || !iinfo->get_first_data_point
+ || !iinfo->get_next_data_point )
+ return 0;
+
+ vp1 = snmp_clone_varbind(iinfo->indexes);
+ vp2 = iinfo->get_first_data_point( &ctx1, &ctx2, vp1, iinfo );
+ if (!vp2) {
+ snmp_free_varbind( vp1 );
+ return 0;
+ }
+
+ DEBUGMSGTL(("table:iterator:count", "first DP: %x %x %x\n",
+ ctx1, ctx2, vp2));
+
+ /* XXX - free context ? */
+
+ while (vp2) {
+ i++;
+ vp2 = iinfo->get_next_data_point( &ctx1, &ctx2, vp2, iinfo );
+ DEBUGMSGTL(("table:iterator:count", "next DP: %x %x %x (%d)\n",
+ ctx1, ctx2, vp2, i));
+ /* XXX - free context ? */
+ }
+
+ /* XXX - final free context ? */
+ snmp_free_varbind( vp1 );
+ return i;
+}
+
+
+/* ==================================
+ *
+ * Iterator API: Index operations
+ *
+ * ================================== */
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/table_row.c b/cleopatre/application/spidnetsnmp/agent/helpers/table_row.c
new file mode 100755
index 0000000000..20b896efc6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/table_row.c
@@ -0,0 +1,257 @@
+/*
+ * table_row.c
+ *
+ * Helper for registering single row slices of a shared table
+ *
+ * $Id: table_row.c 15254 2006-09-19 10:24:14Z dts12 $
+ */
+#define TABLE_ROW_DATA "table_row"
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/table.h>
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+#include <net-snmp/library/snmp_assert.h>
+
+/*
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_BEGIN -1
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_RESERVE1 0
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_RESERVE2 1
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_ACTION 2
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_COMMIT 3
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_FREE 4
+ * snmp.h:#define SNMP_MSG_INTERNAL_SET_UNDO 5
+ */
+
+/** @defgroup table_row table_row
+ * Helps you implement a table shared across two or more subagents,
+ * or otherwise split into individual row slices.
+ * @ingroup table
+ *
+ * @{
+ */
+
+static Netsnmp_Node_Handler _table_row_handler;
+static Netsnmp_Node_Handler _table_row_default_handler;
+
+/**********************************************************************
+ **********************************************************************
+ * *
+ * *
+ * PUBLIC Registration functions *
+ * *
+ * *
+ **********************************************************************
+ **********************************************************************/
+
+/* ==================================
+ *
+ * Table Row API: Table maintenance
+ *
+ * This helper doesn't operate with the complete
+ * table, so these routines are not relevant.
+ *
+ * ================================== */
+
+
+/* ==================================
+ *
+ * Table Row API: MIB maintenance
+ *
+ * ================================== */
+
+/** returns a netsnmp_mib_handler object for the table_container helper */
+netsnmp_mib_handler *
+netsnmp_table_row_handler_get(void *row)
+{
+ netsnmp_mib_handler *handler;
+
+ handler = netsnmp_create_handler("table_row",
+ _table_row_handler);
+ if(NULL == handler) {
+ snmp_log(LOG_ERR,
+ "malloc failure in netsnmp_table_row_register\n");
+ return NULL;
+ }
+
+ handler->myvoid = (void*)row;
+ handler->flags |= MIB_HANDLER_INSTANCE;
+ /* handler->flags |= MIB_HANDLER_AUTO_NEXT; ??? */
+
+ return handler;
+}
+
+int
+netsnmp_table_row_register(netsnmp_handler_registration *reginfo,
+ netsnmp_table_registration_info *tabreg,
+ void *row, netsnmp_variable_list *index)
+{
+ netsnmp_handler_registration *reg2;
+ netsnmp_mib_handler *handler;
+ oid row_oid[MAX_OID_LEN];
+ size_t row_oid_len, len;
+ char tmp[SNMP_MAXBUF_MEDIUM];
+
+ if ((NULL == reginfo) || (NULL == reginfo->handler) || (NULL == tabreg)) {
+ snmp_log(LOG_ERR, "bad param in netsnmp_table_row_register\n");
+ return SNMPERR_GENERR;
+ }
+
+ /*
+ * The first table_row invoked for a particular table should
+ * register the full table as well, with a default handler to
+ * process requests for non-existent (or incomplete) rows.
+ *
+ * Subsequent table_row registrations attempting to set up
+ * this default handler would fail - preferably silently!
+ */
+ snprintf(tmp, sizeof(tmp), "%s_table", reginfo->handlerName);
+ reg2 = netsnmp_create_handler_registration(
+ tmp, _table_row_default_handler,
+ reginfo->rootoid, reginfo->rootoid_len,
+ reginfo->modes);
+ netsnmp_register_table(reg2, tabreg); /* Ignore return value */
+
+ /*
+ * Adjust the OID being registered, to take account
+ * of the indexes and column range provided....
+ */
+ row_oid_len = reginfo->rootoid_len;
+ memcpy( row_oid, (u_char *) reginfo->rootoid, row_oid_len * sizeof(oid));
+ row_oid[row_oid_len++] = 1; /* tableEntry */
+ row_oid[row_oid_len++] = tabreg->min_column;
+ reginfo->range_ubound = tabreg->max_column;
+ reginfo->range_subid = row_oid_len-1;
+ build_oid_noalloc(&row_oid[row_oid_len],
+ MAX_OID_LEN-row_oid_len, &len, NULL, 0, index);
+ row_oid_len += len;
+ free(reginfo->rootoid);
+ memdup((u_char **) & reginfo->rootoid, (const u_char *) row_oid,
+ row_oid_len * sizeof(oid));
+ reginfo->rootoid_len = row_oid_len;
+
+
+ /*
+ * ... insert a minimal handler ...
+ */
+ handler = netsnmp_table_row_handler_get(row);
+ netsnmp_inject_handler(reginfo, handler );
+
+ /*
+ * ... and register the row
+ */
+ return netsnmp_register_handler(reginfo);
+}
+
+
+/** return the row data structure supplied to the table_row helper */
+void *
+netsnmp_table_row_extract(netsnmp_request_info *request)
+{
+ return netsnmp_request_get_list_data(request, TABLE_ROW_DATA);
+}
+/** @cond */
+
+/**********************************************************************
+ **********************************************************************
+ * *
+ * *
+ * netsnmp_table_row_helper_handler() *
+ * *
+ * *
+ **********************************************************************
+ **********************************************************************/
+
+static int
+_table_row_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ netsnmp_request_info *req;
+ void *row;
+
+ /** sanity checks */
+ netsnmp_assert((NULL != handler) && (NULL != handler->myvoid));
+ netsnmp_assert((NULL != reginfo) && (NULL != reqinfo));
+
+ DEBUGMSGTL(("table_row", "Mode %s, Got request:\n",
+ se_find_label_in_slist("agent_mode",reqinfo->mode)));
+
+ /*
+ * First off, get our pointer from the handler.
+ * This contains the row that was actually registered.
+ * Make this available for each of the requests passed in.
+ */
+ row = handler->myvoid;
+ for (req = requests; req; req=req->next)
+ netsnmp_request_add_list_data(req,
+ netsnmp_create_data_list(TABLE_ROW_DATA, row, NULL));
+
+ /*
+ * Then call the next handler, to actually process the request
+ */
+ rc = netsnmp_call_next_handler(handler, reginfo, reqinfo, requests);
+ if (rc != SNMP_ERR_NOERROR) {
+ DEBUGMSGTL(("table_row", "next handler returned %d\n", rc));
+ }
+
+ return rc;
+}
+
+static int
+_table_row_default_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_request_info *req;
+ netsnmp_table_request_info *table_info;
+ netsnmp_table_registration_info *tabreg;
+
+ tabreg = netsnmp_find_table_registration_info(reginfo);
+ for ( req=requests; req; req=req->next ) {
+ table_info = netsnmp_extract_table_info( req );
+ if (( table_info->colnum >= tabreg->min_column ) ||
+ ( table_info->colnum <= tabreg->max_column )) {
+ netsnmp_set_request_error( reqinfo, req, SNMP_NOSUCHINSTANCE );
+ } else {
+ netsnmp_set_request_error( reqinfo, req, SNMP_NOSUCHOBJECT );
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+/** @endcond */
+
+
+/* ==================================
+ *
+ * Table Row API: Row operations
+ *
+ * This helper doesn't operate with the complete
+ * table, so these routines are not relevant.
+ *
+ * ================================== */
+
+
+/* ==================================
+ *
+ * Table Row API: Index operations
+ *
+ * This helper doesn't operate with the complete
+ * table, so these routines are not relevant.
+ *
+ * ================================== */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/table_tdata.c b/cleopatre/application/spidnetsnmp/agent/helpers/table_tdata.c
new file mode 100644
index 0000000000..a0befd2010
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/table_tdata.c
@@ -0,0 +1,561 @@
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/table.h>
+#include <net-snmp/agent/table_tdata.h>
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/agent/read_only.h>
+
+#if HAVE_DMALLOC_H
+#include <dmalloc.h>
+#endif
+
+/** @defgroup tdata tdata
+ * Implement a table with datamatted storage.
+ * @ingroup table
+ *
+ * This helper helps you implement a table where all the rows are
+ * expected to be stored within the agent itself and not in some
+ * external storage location. It can be used to store a list of
+ * rows, where a row consists of the indexes to the table and a
+ * generic data pointer. You can then implement a subhandler which
+ * is passed the exact row definition and data it must return data
+ * for or accept data for. Complex GETNEXT handling is greatly
+ * simplified in this case.
+ *
+ * @{
+ */
+
+/* ==================================
+ *
+ * TData API: Table maintenance
+ *
+ * ================================== */
+
+/*
+ * generates the index portion of an table oid from a varlist.
+ */
+void
+_netsnmp_tdata_generate_index_oid(netsnmp_tdata_row *row)
+{
+ build_oid(&row->oid_index.oids, &row->oid_index.len, NULL, 0, row->indexes);
+}
+
+/** creates and returns a 'tdata' table data structure */
+netsnmp_tdata *
+netsnmp_tdata_create_table(const char *name, long flags)
+{
+ netsnmp_tdata *table = SNMP_MALLOC_TYPEDEF(netsnmp_tdata);
+ if ( !table )
+ return NULL;
+
+ if (name)
+ table->name = strdup(name);
+ table->container = netsnmp_container_find( "table_container" );
+ return table;
+}
+
+/** creates and returns a 'tdata' table data structure */
+void
+netsnmp_tdata_delete_table(netsnmp_tdata *table)
+{
+ if (!table)
+ return;
+
+ if (table->name)
+ free(table->name);
+ if (table->container)
+ CONTAINER_FREE(table->container);
+
+ SNMP_FREE(table);
+ return;
+}
+
+/** creates and returns a pointer to new row data structure */
+netsnmp_tdata_row *
+netsnmp_tdata_create_row(void)
+{
+ netsnmp_tdata_row *row = SNMP_MALLOC_TYPEDEF(netsnmp_tdata_row);
+ return row;
+}
+
+/** clones a 'tdata' row. DOES NOT CLONE THE TABLE-SPECIFIC ENTRY DATA. */
+netsnmp_tdata_row *
+netsnmp_tdata_clone_row(netsnmp_tdata_row *row)
+{
+ netsnmp_tdata_row *newrow = NULL;
+ if (!row)
+ return NULL;
+
+ memdup((u_char **) & newrow, (u_char *) row,
+ sizeof(netsnmp_tdata_row));
+ if (!newrow)
+ return NULL;
+
+ if (row->indexes) {
+ newrow->indexes = snmp_clone_varbind(newrow->indexes);
+ if (!newrow->indexes) {
+ SNMP_FREE(newrow);
+ return NULL;
+ }
+ }
+
+ if (row->oid_index.oids) {
+ memdup((u_char **) & newrow->oid_index.oids,
+ (u_char *) row->oid_index.oids,
+ row->oid_index.len * sizeof(oid));
+ if (!newrow->oid_index.oids) {
+ if (newrow->indexes)
+ snmp_free_varbind(newrow->indexes);
+ SNMP_FREE(newrow);
+ return NULL;
+ }
+ }
+
+ return newrow;
+}
+
+/** copy the contents of a 'tdata' row.
+ DOES NOT COPY THE TABLE-SPECIFIC ENTRY DATA. */
+int
+netsnmp_tdata_copy_row(netsnmp_tdata_row *dst_row, netsnmp_tdata_row *src_row)
+{
+ if ( !src_row || !dst_row )
+ return -1;
+
+ memcpy((u_char *) dst_row, (u_char *) src_row,
+ sizeof(netsnmp_tdata_row));
+ if (src_row->indexes) {
+ dst_row->indexes = snmp_clone_varbind(src_row->indexes);
+ if (!dst_row->indexes)
+ return -1;
+ }
+
+ if (src_row->oid_index.oids) {
+ memdup((u_char **) &dst_row->oid_index.oids,
+ (u_char *) src_row->oid_index.oids,
+ src_row->oid_index.len * sizeof(oid));
+ if (!dst_row->oid_index.oids)
+ return -1;
+ }
+
+ return 0;
+}
+
+/** deletes the memory used by the specified row
+ * returns the table-specific entry data
+ * (that it doesn't know how to delete) */
+void *
+netsnmp_tdata_delete_row(netsnmp_tdata_row *row)
+{
+ void *data;
+
+ if (!row)
+ return NULL;
+
+ /*
+ * free the memory we can
+ */
+ if (row->indexes)
+ snmp_free_varbind(row->indexes);
+ SNMP_FREE(row->oid_index.oids);
+ data = row->data;
+ free(row);
+
+ /*
+ * return the void * pointer
+ */
+ return data;
+}
+
+/**
+ * Adds a row to the given table (stored in proper lexographical order).
+ *
+ * returns SNMPERR_SUCCESS on successful addition.
+ * or SNMPERR_GENERR on failure (E.G., indexes already existed)
+ */
+int
+netsnmp_tdata_add_row(netsnmp_tdata *table,
+ netsnmp_tdata_row *row)
+{
+ if (!row || !table)
+ return SNMPERR_GENERR;
+
+ if (row->indexes)
+ _netsnmp_tdata_generate_index_oid(row);
+
+ if (!row->oid_index.oids) {
+ snmp_log(LOG_ERR,
+ "illegal data attempted to be added to table %s (no index)\n",
+ table->name);
+ return SNMPERR_GENERR;
+ }
+
+ /*
+ * The individual index values probably won't be needed,
+ * so this memory can be released.
+ * Note that this is purely internal to the helper.
+ * The calling application can set this flag as
+ * a hint to the helper that these values aren't
+ * required, but it's up to the helper as to
+ * whether it takes any notice or not!
+ */
+ if (table->flags & TDATA_FLAG_NO_STORE_INDEXES) {
+ snmp_free_varbind(row->indexes);
+ row->indexes = NULL;
+ }
+
+ /*
+ * add this row to the stored table
+ */
+ CONTAINER_INSERT( table->container, row );
+ DEBUGMSGTL(("tdata_add_row", "added row (%x)\n", row));
+
+ return SNMPERR_SUCCESS;
+}
+
+/** swaps out origrow with newrow. This does *not* delete/free anything! */
+void
+netsnmp_tdata_replace_row(netsnmp_tdata *table,
+ netsnmp_tdata_row *origrow,
+ netsnmp_tdata_row *newrow)
+{
+ netsnmp_tdata_remove_row(table, origrow);
+ netsnmp_tdata_add_row(table, newrow);
+}
+
+/**
+ * removes a row from the given table and returns it (no free's called)
+ *
+ * returns the row pointer itself on successful removing.
+ * or NULL on failure (bad arguments)
+ */
+netsnmp_tdata_row *
+netsnmp_tdata_remove_row(netsnmp_tdata *table,
+ netsnmp_tdata_row *row)
+{
+ if (!row || !table)
+ return NULL;
+
+ CONTAINER_REMOVE( table->container, row );
+ return row;
+}
+
+/**
+ * removes and frees a row of the given table and
+ * returns the table-specific entry data
+ *
+ * returns the void * pointer on successful deletion.
+ * or NULL on failure (bad arguments)
+ */
+void *
+netsnmp_tdata_remove_and_delete_row(netsnmp_tdata *table,
+ netsnmp_tdata_row *row)
+{
+ if (!row || !table)
+ return NULL;
+
+ /*
+ * remove it from the list
+ */
+ netsnmp_tdata_remove_row(table, row);
+ return netsnmp_tdata_delete_row(row);
+}
+
+
+/* ==================================
+ *
+ * TData API: MIB maintenance
+ *
+ * ================================== */
+
+Netsnmp_Node_Handler _netsnmp_tdata_helper_handler;
+
+/** Creates a tdata handler and returns it */
+netsnmp_mib_handler *
+netsnmp_get_tdata_handler(netsnmp_tdata *table)
+{
+ netsnmp_mib_handler *ret = NULL;
+
+ if (!table) {
+ snmp_log(LOG_INFO,
+ "netsnmp_get_tdata_handler(NULL) called\n");
+ return NULL;
+ }
+
+ ret = netsnmp_create_handler(TABLE_TDATA_NAME,
+ _netsnmp_tdata_helper_handler);
+ if (ret) {
+ ret->flags |= MIB_HANDLER_AUTO_NEXT;
+ ret->myvoid = (void *) table;
+ }
+ return ret;
+}
+
+/*
+ * The helper handler that takes care of passing a specific row of
+ * data down to the lower handler(s). The table_container helper
+ * has already taken care of identifying the appropriate row of the
+ * table (and converting GETNEXT requests into an equivalent GET request)
+ * So all we need to do here is make sure that the row is accessible
+ * using tdata-style retrieval techniques as well.
+ */
+int
+_netsnmp_tdata_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_tdata *table = (netsnmp_tdata *) handler->myvoid;
+ netsnmp_request_info *request;
+ netsnmp_table_request_info *table_info;
+ netsnmp_tdata_row *row;
+
+ switch ( reqinfo->mode ) {
+ case MODE_GET:
+ case MODE_SET_RESERVE1:
+
+ for (request = requests; request; request = request->next) {
+ if (request->processed)
+ continue;
+
+ table_info = netsnmp_extract_table_info(request);
+ if (!table_info)
+ continue; /* ack */
+ row = netsnmp_container_table_row_extract( request );
+
+ netsnmp_request_add_list_data(request,
+ netsnmp_create_data_list(
+ TABLE_TDATA_TABLE, table, NULL));
+ netsnmp_request_add_list_data(request,
+ netsnmp_create_data_list(
+ TABLE_TDATA_ROW, row, NULL));
+ }
+ }
+
+ /* next handler called automatically - 'AUTO_NEXT' */
+ return SNMP_ERR_NOERROR;
+}
+
+
+/** registers a tdata-based MIB table */
+int
+netsnmp_tdata_register(netsnmp_handler_registration *reginfo,
+ netsnmp_tdata *table,
+ netsnmp_table_registration_info *table_info)
+{
+ netsnmp_inject_handler(reginfo, netsnmp_get_tdata_handler(table));
+ return netsnmp_container_table_register(reginfo, table_info,
+ table->container, TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+}
+
+/** extracts the tdata table from the request structure */
+netsnmp_tdata *
+netsnmp_tdata_extract_table(netsnmp_request_info *request)
+{
+ return (netsnmp_tdata *) netsnmp_request_get_list_data(request,
+ TABLE_TDATA_TABLE);
+}
+
+/** extracts the tdata container from the request structure */
+netsnmp_container *
+netsnmp_tdata_extract_container(netsnmp_request_info *request)
+{
+ netsnmp_tdata *tdata = netsnmp_request_get_list_data(request,
+ TABLE_TDATA_TABLE);
+ return ( tdata ? tdata->container : NULL );
+}
+
+/** extracts the tdata row being accessed from the request structure */
+netsnmp_tdata_row *
+netsnmp_tdata_extract_row(netsnmp_request_info *request)
+{
+ return (netsnmp_tdata_row *) netsnmp_container_table_row_extract(request);
+}
+
+/** extracts the (table-specific) entry being accessed from the
+ * request structure */
+void *
+netsnmp_tdata_extract_entry(netsnmp_request_info *request)
+{
+ netsnmp_tdata_row *row =
+ (netsnmp_tdata_row *) netsnmp_tdata_extract_row(request);
+ if (row)
+ return row->data;
+ else
+ return NULL;
+}
+
+/** inserts a newly created tdata row into a request */
+NETSNMP_INLINE void
+netsnmp_insert_tdata_row(netsnmp_request_info *request,
+ netsnmp_tdata_row *row)
+{
+ netsnmp_container_table_row_insert(request, (netsnmp_index *)row);
+}
+
+
+/* ==================================
+ *
+ * Generic API: Row operations
+ *
+ * ================================== */
+
+/** returns the (table-specific) entry data for a given row */
+void *
+netsnmp_tdata_row_entry( netsnmp_tdata_row *row )
+{
+ if (row)
+ return row->data;
+ else
+ return NULL;
+}
+
+/** returns the first row in the table */
+netsnmp_tdata_row *
+netsnmp_tdata_row_first(netsnmp_tdata *table)
+{
+ return (netsnmp_tdata_row *)CONTAINER_FIRST( table->container );
+}
+
+/** finds a row in the 'tdata' table given another row */
+netsnmp_tdata_row *
+netsnmp_tdata_row_get( netsnmp_tdata *table,
+ netsnmp_tdata_row *row)
+{
+ return CONTAINER_FIND( table->container, row );
+}
+
+/** returns the next row in the table */
+netsnmp_tdata_row *
+netsnmp_tdata_row_next( netsnmp_tdata *table,
+ netsnmp_tdata_row *row)
+{
+ return (netsnmp_tdata_row *)CONTAINER_NEXT( table->container, row );
+}
+
+/** finds a row in the 'tdata' table given the index values */
+netsnmp_tdata_row *
+netsnmp_tdata_row_get_byidx(netsnmp_tdata *table,
+ netsnmp_variable_list *indexes)
+{
+ oid searchfor[ MAX_OID_LEN];
+ size_t searchfor_len = MAX_OID_LEN;
+
+ build_oid_noalloc(searchfor, MAX_OID_LEN, &searchfor_len, NULL, 0,
+ indexes);
+ return netsnmp_tdata_row_get_byoid(table, searchfor, searchfor_len);
+}
+
+/** finds a row in the 'tdata' table given the index OID */
+netsnmp_tdata_row *
+netsnmp_tdata_row_get_byoid(netsnmp_tdata *table,
+ oid * searchfor, size_t searchfor_len)
+{
+ netsnmp_index index;
+ if (!table)
+ return NULL;
+
+ index.oids = searchfor;
+ index.len = searchfor_len;
+ return CONTAINER_FIND( table->container, &index );
+}
+
+/** finds the lexically next row in the 'tdata' table
+ given the index values */
+netsnmp_tdata_row *
+netsnmp_tdata_row_next_byidx(netsnmp_tdata *table,
+ netsnmp_variable_list *indexes)
+{
+ oid searchfor[ MAX_OID_LEN];
+ size_t searchfor_len = MAX_OID_LEN;
+
+ build_oid_noalloc(searchfor, MAX_OID_LEN, &searchfor_len, NULL, 0,
+ indexes);
+ return netsnmp_tdata_row_next_byoid(table, searchfor, searchfor_len);
+}
+
+/** finds the lexically next row in the 'tdata' table
+ given the index OID */
+netsnmp_tdata_row *
+netsnmp_tdata_row_next_byoid(netsnmp_tdata *table,
+ oid * searchfor, size_t searchfor_len)
+{
+ netsnmp_index index;
+ if (!table)
+ return NULL;
+
+ index.oids = searchfor;
+ index.len = searchfor_len;
+ return CONTAINER_NEXT( table->container, &index );
+}
+
+int
+netsnmp_tdata_row_count(netsnmp_tdata *table)
+{
+ if (!table)
+ return 0;
+ return CONTAINER_SIZE( table->container );
+}
+
+/* ==================================
+ *
+ * Generic API: Index operations on a 'tdata' table
+ *
+ * ================================== */
+
+
+/** compare a row with the given index values */
+int
+netsnmp_tdata_compare_idx(netsnmp_tdata_row *row,
+ netsnmp_variable_list *indexes)
+{
+ oid searchfor[ MAX_OID_LEN];
+ size_t searchfor_len = MAX_OID_LEN;
+
+ build_oid_noalloc(searchfor, MAX_OID_LEN, &searchfor_len, NULL, 0,
+ indexes);
+ return netsnmp_tdata_compare_oid(row, searchfor, searchfor_len);
+}
+
+/** compare a row with the given index OID */
+int
+netsnmp_tdata_compare_oid(netsnmp_tdata_row *row,
+ oid * compareto, size_t compareto_len)
+{
+ netsnmp_index *index = (netsnmp_index *)row;
+ return snmp_oid_compare( index->oids, index->len,
+ compareto, compareto_len);
+}
+
+int
+netsnmp_tdata_compare_subtree_idx(netsnmp_tdata_row *row,
+ netsnmp_variable_list *indexes)
+{
+ oid searchfor[ MAX_OID_LEN];
+ size_t searchfor_len = MAX_OID_LEN;
+
+ build_oid_noalloc(searchfor, MAX_OID_LEN, &searchfor_len, NULL, 0,
+ indexes);
+ return netsnmp_tdata_compare_subtree_oid(row, searchfor, searchfor_len);
+}
+
+int
+netsnmp_tdata_compare_subtree_oid(netsnmp_tdata_row *row,
+ oid * compareto, size_t compareto_len)
+{
+ netsnmp_index *index = (netsnmp_index *)row;
+ return snmp_oidtree_compare( index->oids, index->len,
+ compareto, compareto_len);
+}
+
+/** @}
+ */
diff --git a/cleopatre/application/spidnetsnmp/agent/helpers/watcher.c b/cleopatre/application/spidnetsnmp/agent/helpers/watcher.c
new file mode 100644
index 0000000000..b35f550771
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/helpers/watcher.c
@@ -0,0 +1,485 @@
+#include <net-snmp/net-snmp-config.h>
+
+#include <stdlib.h>
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/watcher.h>
+#include <net-snmp/agent/instance.h>
+#include <net-snmp/agent/scalar.h>
+
+/** @defgroup watcher watcher
+ * Watch a specified variable and process it as an instance or scalar object
+ * @ingroup leaf
+ * @{
+ */
+netsnmp_mib_handler *
+netsnmp_get_watcher_handler(void)
+{
+ netsnmp_mib_handler *ret = NULL;
+
+ ret = netsnmp_create_handler("watcher",
+ netsnmp_watcher_helper_handler);
+ if (ret) {
+ ret->flags |= MIB_HANDLER_AUTO_NEXT;
+ }
+ return ret;
+}
+
+netsnmp_watcher_info *
+netsnmp_create_watcher_info(void *data, size_t size, u_char type, int flags)
+{
+ netsnmp_watcher_info *winfo = SNMP_MALLOC_TYPEDEF(netsnmp_watcher_info);
+
+ winfo->data = data;
+ winfo->data_size = size;
+ winfo->max_size = size; /* Probably wrong for non-fixed size data */
+ winfo->type = type;
+ if (flags)
+ winfo->flags = flags;
+ else
+ winfo->flags = WATCHER_FIXED_SIZE;
+
+ return winfo;
+}
+
+int
+netsnmp_register_watched_instance(netsnmp_handler_registration *reginfo,
+ netsnmp_watcher_info *watchinfo)
+{
+ netsnmp_mib_handler *whandler;
+
+ whandler = netsnmp_get_watcher_handler();
+ whandler->myvoid = (void *)watchinfo;
+
+ netsnmp_inject_handler(reginfo, whandler);
+ return netsnmp_register_instance(reginfo);
+}
+
+int
+netsnmp_register_watched_scalar(netsnmp_handler_registration *reginfo,
+ netsnmp_watcher_info *watchinfo)
+{
+ netsnmp_mib_handler *whandler;
+
+ whandler = netsnmp_get_watcher_handler();
+ whandler->myvoid = (void *)watchinfo;
+
+ netsnmp_inject_handler(reginfo, whandler);
+ return netsnmp_register_scalar(reginfo);
+}
+
+
+
+int
+netsnmp_watcher_helper_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_watcher_info *winfo = (netsnmp_watcher_info *) handler->myvoid;
+ u_char *old_data;
+ int cmp;
+
+ DEBUGMSGTL(("helper:watcher", "Got request: %d\n", reqinfo->mode));
+ cmp = snmp_oid_compare(requests->requestvb->name,
+ requests->requestvb->name_length,
+ reginfo->rootoid, reginfo->rootoid_len);
+
+ DEBUGMSGTL(( "helper:watcher", " oid:"));
+ DEBUGMSGOID(("helper:watcher", requests->requestvb->name,
+ requests->requestvb->name_length));
+ DEBUGMSG(( "helper:watcher", "\n"));
+
+
+
+ switch (reqinfo->mode) {
+ /*
+ * data requests
+ */
+ case MODE_GET:
+ snmp_set_var_typed_value(requests->requestvb,
+ winfo->type,
+ winfo->data,
+ winfo->data_size);
+ break;
+
+ /*
+ * SET requests. Should only get here if registered RWRITE
+ */
+ case MODE_SET_RESERVE1:
+ if (requests->requestvb->type != winfo->type) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_WRONGTYPE);
+ handler->flags |= MIB_HANDLER_AUTO_NEXT_OVERRIDE_ONCE;
+ }
+
+ if (((winfo->flags & WATCHER_MAX_SIZE) &&
+ requests->requestvb->val_len > winfo->max_size) ||
+ ((winfo->flags & WATCHER_FIXED_SIZE) &&
+ requests->requestvb->val_len != winfo->data_size)) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_WRONGLENGTH);
+ handler->flags |= MIB_HANDLER_AUTO_NEXT_OVERRIDE_ONCE;
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /*
+ * store old info for undo later
+ */
+ memdup(&old_data, (u_char *) winfo->data, winfo->data_size);
+ if (old_data == NULL) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ handler->flags |= MIB_HANDLER_AUTO_NEXT_OVERRIDE_ONCE;
+ return SNMP_ERR_NOERROR;
+ }
+ netsnmp_request_add_list_data(requests,
+ netsnmp_create_data_list
+ ("watcher", old_data, free));
+ break;
+
+ case MODE_SET_FREE:
+ /*
+ * nothing to do
+ */
+ break;
+
+ case MODE_SET_ACTION:
+ /*
+ * update current
+ */
+ memcpy(winfo->data, (void *)requests->requestvb->val.string,
+ requests->requestvb->val_len);
+ break;
+
+ case MODE_SET_UNDO:
+ memcpy(winfo->data,
+ netsnmp_request_get_list_data(requests, "watcher"),
+ winfo->data_size);
+ break;
+
+ case MODE_SET_COMMIT:
+ winfo->data_size = requests->requestvb->val_len;
+ break;
+
+ }
+
+ /* next handler called automatically - 'AUTO_NEXT' */
+ return SNMP_ERR_NOERROR;
+}
+
+
+ /***************************
+ *
+ * A specialised form of the above, reporting
+ * the sysUpTime indicated by a given timestamp
+ *
+ ***************************/
+
+netsnmp_mib_handler *
+netsnmp_get_watched_timestamp_handler(void)
+{
+ netsnmp_mib_handler *ret = NULL;
+
+ ret = netsnmp_create_handler("watcher-timestamp",
+ netsnmp_watched_timestamp_handler);
+ if (ret) {
+ ret->flags |= MIB_HANDLER_AUTO_NEXT;
+ }
+ return ret;
+}
+
+int
+netsnmp_watched_timestamp_register(netsnmp_mib_handler *whandler,
+ netsnmp_handler_registration *reginfo,
+ marker_t timestamp)
+{
+ whandler->myvoid = (void *)timestamp;
+ netsnmp_inject_handler(reginfo, whandler);
+ return netsnmp_register_scalar(reginfo); /* XXX - or instance? */
+}
+
+int
+netsnmp_register_watched_timestamp(netsnmp_handler_registration *reginfo,
+ marker_t timestamp)
+{
+ netsnmp_mib_handler *whandler;
+
+ whandler = netsnmp_get_watched_timestamp_handler();
+
+ return netsnmp_watched_timestamp_register(whandler, reginfo, timestamp);
+}
+
+
+int
+netsnmp_watched_timestamp_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ marker_t timestamp = (marker_t) handler->myvoid;
+ long uptime;
+ int cmp;
+
+ DEBUGMSGTL(("helper:watcher:timestamp",
+ "Got request: %d\n", reqinfo->mode));
+ cmp = snmp_oid_compare(requests->requestvb->name,
+ requests->requestvb->name_length,
+ reginfo->rootoid, reginfo->rootoid_len);
+
+ DEBUGMSGTL(( "helper:watcher:timestamp", " oid:"));
+ DEBUGMSGOID(("helper:watcher:timestamp", requests->requestvb->name,
+ requests->requestvb->name_length));
+ DEBUGMSG(( "helper:watcher:timestamp", "\n"));
+
+
+
+ switch (reqinfo->mode) {
+ /*
+ * data requests
+ */
+ case MODE_GET:
+ if (handler->flags & NETSNMP_WATCHER_DIRECT)
+ uptime = * (long*)timestamp;
+ else
+ uptime = netsnmp_marker_uptime( timestamp );
+ snmp_set_var_typed_value(requests->requestvb,
+ ASN_TIMETICKS,
+ (u_char *) &uptime,
+ sizeof(uptime));
+ break;
+
+ /*
+ * Timestamps are inherently Read-Only,
+ * so don't need to support SET requests.
+ */
+ case MODE_SET_RESERVE1:
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_NOTWRITABLE);
+ handler->flags |= MIB_HANDLER_AUTO_NEXT_OVERRIDE_ONCE;
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ /* next handler called automatically - 'AUTO_NEXT' */
+ return SNMP_ERR_NOERROR;
+}
+
+ /***************************
+ *
+ * Another specialised form of the above,
+ * implementing a 'TestAndIncr' spinlock
+ *
+ ***************************/
+
+netsnmp_mib_handler *
+netsnmp_get_watched_spinlock_handler(void)
+{
+ netsnmp_mib_handler *ret = NULL;
+
+ ret = netsnmp_create_handler("watcher-spinlock",
+ netsnmp_watched_spinlock_handler);
+ if (ret) {
+ ret->flags |= MIB_HANDLER_AUTO_NEXT;
+ }
+ return ret;
+}
+
+int
+netsnmp_register_watched_spinlock(netsnmp_handler_registration *reginfo,
+ int *spinlock)
+{
+ netsnmp_mib_handler *whandler;
+ netsnmp_watcher_info *winfo;
+
+ whandler = netsnmp_get_watched_spinlock_handler();
+ whandler->myvoid = (void *)spinlock;
+ winfo = netsnmp_create_watcher_info((void *)spinlock,
+ sizeof(int), ASN_INTEGER, WATCHER_FIXED_SIZE);
+ netsnmp_inject_handler(reginfo, whandler);
+ return netsnmp_register_watched_scalar(reginfo, winfo);
+}
+
+
+int
+netsnmp_watched_spinlock_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int *spinlock = (int *) handler->myvoid;
+ netsnmp_request_info *request;
+ int cmp;
+
+ DEBUGMSGTL(("helper:watcher:spinlock",
+ "Got request: %d\n", reqinfo->mode));
+ cmp = snmp_oid_compare(requests->requestvb->name,
+ requests->requestvb->name_length,
+ reginfo->rootoid, reginfo->rootoid_len);
+
+ DEBUGMSGTL(( "helper:watcher:spinlock", " oid:"));
+ DEBUGMSGOID(("helper:watcher:spinlock", requests->requestvb->name,
+ requests->requestvb->name_length));
+ DEBUGMSG(( "helper:watcher:spinlock", "\n"));
+
+
+
+ switch (reqinfo->mode) {
+ /*
+ * Ensure the assigned value matches the current one
+ */
+ case MODE_SET_RESERVE1:
+ for (request=requests; request; request=request->next) {
+ if (request->processed)
+ continue;
+
+ if (*request->requestvb->val.integer != *spinlock) {
+ netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE);
+ handler->flags |= MIB_HANDLER_AUTO_NEXT_OVERRIDE_ONCE;
+ return SNMP_ERR_WRONGVALUE;
+
+ }
+ }
+ break;
+
+ /*
+ * Everything else worked, so increment the spinlock
+ */
+ case MODE_SET_COMMIT:
+ (*spinlock)++;
+ break;
+ }
+
+ /* next handler called automatically - 'AUTO_NEXT' */
+ return SNMP_ERR_NOERROR;
+}
+
+ /***************************
+ *
+ * Convenience registration routines - modelled on
+ * the equivalent netsnmp_register_*_instance() calls
+ *
+ ***************************/
+
+int
+netsnmp_register_ulong_scalar(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ u_long * it,
+ Netsnmp_Node_Handler * subhandler)
+{
+ return netsnmp_register_watched_scalar(
+ netsnmp_create_handler_registration(
+ name, subhandler,
+ reg_oid, reg_oid_len,
+ HANDLER_CAN_RWRITE ),
+ netsnmp_create_watcher_info(
+ (void *)it, sizeof( u_long ),
+ ASN_UNSIGNED, WATCHER_FIXED_SIZE ));
+}
+
+int
+netsnmp_register_read_only_ulong_scalar(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ u_long * it,
+ Netsnmp_Node_Handler * subhandler)
+{
+ return netsnmp_register_watched_scalar(
+ netsnmp_create_handler_registration(
+ name, subhandler,
+ reg_oid, reg_oid_len,
+ HANDLER_CAN_RONLY ),
+ netsnmp_create_watcher_info(
+ (void *)it, sizeof( u_long ),
+ ASN_UNSIGNED, WATCHER_FIXED_SIZE ));
+}
+
+int
+netsnmp_register_long_scalar(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ long * it,
+ Netsnmp_Node_Handler * subhandler)
+{
+ return netsnmp_register_watched_scalar(
+ netsnmp_create_handler_registration(
+ name, subhandler,
+ reg_oid, reg_oid_len,
+ HANDLER_CAN_RWRITE ),
+ netsnmp_create_watcher_info(
+ (void *)it, sizeof( long ),
+ ASN_INTEGER, WATCHER_FIXED_SIZE ));
+}
+
+int
+netsnmp_register_read_only_long_scalar(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ long * it,
+ Netsnmp_Node_Handler * subhandler)
+{
+ return netsnmp_register_watched_scalar(
+ netsnmp_create_handler_registration(
+ name, subhandler,
+ reg_oid, reg_oid_len,
+ HANDLER_CAN_RONLY ),
+ netsnmp_create_watcher_info(
+ (void *)it, sizeof( long ),
+ ASN_INTEGER, WATCHER_FIXED_SIZE ));
+}
+
+
+int
+netsnmp_register_int_scalar(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ int * it,
+ Netsnmp_Node_Handler * subhandler)
+{
+ return netsnmp_register_watched_scalar(
+ netsnmp_create_handler_registration(
+ name, subhandler,
+ reg_oid, reg_oid_len,
+ HANDLER_CAN_RWRITE ),
+ netsnmp_create_watcher_info(
+ (void *)it, sizeof( int ),
+ ASN_INTEGER, WATCHER_FIXED_SIZE ));
+}
+
+int
+netsnmp_register_read_only_int_scalar(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ int * it,
+ Netsnmp_Node_Handler * subhandler)
+{
+ return netsnmp_register_watched_scalar(
+ netsnmp_create_handler_registration(
+ name, subhandler,
+ reg_oid, reg_oid_len,
+ HANDLER_CAN_RONLY ),
+ netsnmp_create_watcher_info(
+ (void *)it, sizeof( int ),
+ ASN_INTEGER, WATCHER_FIXED_SIZE ));
+}
+
+
+int
+netsnmp_register_read_only_counter32_scalar(const char *name,
+ oid * reg_oid, size_t reg_oid_len,
+ u_long * it,
+ Netsnmp_Node_Handler * subhandler)
+{
+ return netsnmp_register_watched_scalar(
+ netsnmp_create_handler_registration(
+ name, subhandler,
+ reg_oid, reg_oid_len,
+ HANDLER_CAN_RONLY ),
+ netsnmp_create_watcher_info(
+ (void *)it, sizeof( u_long ),
+ ASN_COUNTER, WATCHER_FIXED_SIZE ));
+}
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/kernel.c b/cleopatre/application/spidnetsnmp/agent/kernel.c
new file mode 100644
index 0000000000..4815ed5618
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/kernel.c
@@ -0,0 +1,202 @@
+
+/*
+ * 13 Jun 91 wsak (wk0x@andrew) added mips support
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#ifdef NETSNMP_CAN_USE_NLIST
+
+#include <sys/types.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <stdio.h>
+#include <errno.h>
+#if HAVE_STRING_H
+#include <string.h>
+#endif
+#if HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_KVM_H
+#include <kvm.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+
+#include "kernel.h"
+#include <net-snmp/agent/ds_agent.h>
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+
+#if HAVE_KVM_H
+kvm_t *kd;
+
+void
+init_kmem(const char *file)
+{
+#if HAVE_KVM_OPENFILES
+ char err[4096];
+ kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, err);
+ if (kd == NULL && !netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ snmp_log(LOG_CRIT, "init_kmem: kvm_openfiles failed: %s\n", err);
+ exit(1);
+ }
+#else
+ kd = kvm_open(NULL, NULL, NULL, O_RDONLY, NULL);
+ if (!kd && !netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ snmp_log(LOG_CRIT, "init_kmem: kvm_open failed: %s\n",
+ strerror(errno));
+ exit(1);
+ }
+#endif /* HAVE_KVM_OPENFILES */
+}
+
+
+/*
+ * klookup:
+ *
+ * It seeks to the location off in kmem
+ * It does a read into target of siz bytes.
+ *
+ * Return 0 on failure and 1 on sucess.
+ *
+ */
+
+
+int
+klookup(unsigned long off, char *target, int siz)
+{
+ int result;
+ if (kd == NULL)
+ return 0;
+ result = kvm_read(kd, off, target, siz);
+ if (result != siz) {
+#if HAVE_KVM_OPENFILES
+ snmp_log(LOG_ERR, "kvm_read(*, %lx, %p, %d) = %d: %s\n", off,
+ target, siz, result, kvm_geterr(kd));
+#else
+ snmp_log(LOG_ERR, "kvm_read(*, %lx, %p, %d) = %d: ", off, target,
+ siz, result);
+ snmp_log_perror("klookup");
+#endif
+ return 0;
+ }
+ return 1;
+}
+
+#else /* HAVE_KVM_H */
+
+static off_t klseek(off_t);
+static int klread(char *, int);
+int swap, mem, kmem;
+
+void
+init_kmem(const char *file)
+{
+ kmem = open(file, O_RDONLY);
+ if (kmem < 0 && !netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ snmp_log_perror(file);
+ exit(1);
+ }
+ fcntl(kmem, F_SETFD, 1);
+ mem = open("/dev/mem", O_RDONLY);
+ if (mem < 0 && !netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ snmp_log_perror("/dev/mem");
+ exit(1);
+ }
+ fcntl(mem, F_SETFD, 1);
+#ifdef DMEM_LOC
+ swap = open(DMEM_LOC, O_RDONLY);
+ if (swap < 0 && !netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ snmp_log_perror(DMEM_LOC);
+ exit(1);
+ }
+ fcntl(swap, F_SETFD, 1);
+#endif
+}
+
+
+/*
+ * Seek into the kernel for a value.
+ */
+static off_t
+klseek(off_t base)
+{
+ return (lseek(kmem, (off_t) base, SEEK_SET));
+}
+
+
+/*
+ * Read from the kernel
+ */
+static int
+klread(char *buf, int buflen)
+{
+ return (read(kmem, buf, buflen));
+}
+
+
+/*
+ * klookup:
+ *
+ * It seeks to the location off in kmem
+ * It does a read into target of siz bytes.
+ *
+ * Return 0 on failure and 1 on sucess.
+ *
+ */
+
+
+int
+klookup(unsigned long off, char *target, int siz)
+{
+ long retsiz;
+
+ if (kmem < 0)
+ return 0;
+
+ if ((retsiz = klseek((off_t) off)) != off) {
+ snmp_log(LOG_ERR, "klookup(%lx, %p, %d): ", off, target, siz);
+ snmp_log_perror("klseek");
+#ifdef NETSNMP_EXIT_ON_BAD_KLREAD
+ exit(1);
+#endif
+ return (0);
+ }
+ if ((retsiz = klread(target, siz)) != siz) {
+ if (snmp_get_do_debugging()) {
+ /*
+ * these happen too often on too many architectures to print them
+ * unless we're in debugging mode. People get very full log files.
+ */
+ snmp_log(LOG_ERR, "klookup(%lx, %p, %d): ", off, target, siz);
+ snmp_log_perror("klread");
+ }
+#ifdef NETSNMP_EXIT_ON_BAD_KLREAD
+ exit(1);
+#endif
+ return (0);
+ }
+ DEBUGMSGTL(("verbose:kernel:klookup", "klookup(%lx, %p, %d) succeeded", off, target, siz));
+ return (1);
+}
+
+#endif /* HAVE_KVM_H */
+
+#endif /* NETSNMP_CAN_USE_NLIST */
diff --git a/cleopatre/application/spidnetsnmp/agent/kernel.h b/cleopatre/application/spidnetsnmp/agent/kernel.h
new file mode 100644
index 0000000000..3c939fc9bf
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/kernel.h
@@ -0,0 +1,13 @@
+
+#ifdef NETSNMP_CAN_USE_NLIST
+extern void init_kmem(const char *);
+extern int klookup(unsigned long, char *, int);
+#define NETSNMP_KLOOKUP(x,y,z) klookup((unsigned long) x,y,z)
+#else
+#define NETSNMP_KLOOKUP(x,y,z) (0)
+#endif
+
+#if HAVE_KVM_H
+#include <kvm.h>
+extern kvm_t *kd;
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/m2m.h b/cleopatre/application/spidnetsnmp/agent/m2m.h
new file mode 100644
index 0000000000..c4d1510f83
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/m2m.h
@@ -0,0 +1,60 @@
+/*
+ * m2m.h
+ */
+
+struct get_req_state {
+ int type;
+ void *info;
+};
+
+/*
+ * values for type field in get_req_state
+ */
+#define ALARM_GET_REQ 1
+#define EVENT_GET_REQ 2
+
+/*
+ * the following define is used to document a routine or variable which
+ * ** is not static to a module.
+ */
+#define Export
+
+/*
+ * values for EntryStatus
+ */
+#define ENTRY_ACTIVE 1
+#define ENTRY_NOTINSERVICE 2
+#define ENTRY_NOTREADY 3
+#define ENTRY_CREATEANDGO 4
+#define ENTRY_CREATEANDWAIT 5
+#define ENTRY_DESTROY 6
+
+/*
+ * maximum length for an OwnerString variable
+ */
+#define MAX_OWNER_STR_LEN 128
+
+/*
+ * maximum length for a description field
+ */
+#define MAX_DESCRIPTION_LEN 128
+
+/*
+ * defines for noting whether the incoming packet is unicast, broadcast,
+ * ** or multicast
+ */
+#define PKT_UNICAST 0
+#define PKT_BROADCAST 1
+#define PKT_MULTICAST 2
+
+/*
+ * macro to compare two ethernet addresses. addr1 is a pointer to a
+ * ** struct ether_addr; addr2 is just a struct ether_addr.
+ */
+#define sameEtherAddr(addr1, addr2) \
+ ((*((short *)((addr1)->ether_addr_octet)) == \
+ *((short *)((addr2).ether_addr_octet))) &&\
+ (*((short *)(((addr1)->ether_addr_octet) + 2)) == \
+ *((short *)((((addr2).ether_addr_octet) + 2)))) &&\
+ (*((short *)(((addr1)->ether_addr_octet) + 4)) == \
+ *((short *)((((addr2).ether_addr_octet) + 4)))))
diff --git a/cleopatre/application/spidnetsnmp/agent/mib_modules.c b/cleopatre/application/spidnetsnmp/agent/mib_modules.c
new file mode 100644
index 0000000000..95e4695dfa
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mib_modules.c
@@ -0,0 +1,97 @@
+/*
+ * wrapper to call all the mib module initialization functions
+ */
+
+#include <net-snmp/agent/mib_module_config.h>
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "m2m.h"
+#ifdef USING_IF_MIB_DATA_ACCESS_INTERFACE_MODULE
+#include <net-snmp/data_access/interface.h>
+#endif
+
+#include "mibgroup/struct.h"
+#include <net-snmp/agent/mib_modules.h>
+#include <net-snmp/agent/table.h>
+#include <net-snmp/agent/table_iterator.h>
+#include "mib_module_includes.h"
+#ifdef USING_AGENTX_SUBAGENT_MODULE
+#include "mibgroup/agentx/subagent.h"
+#endif
+
+static int need_shutdown = 0;
+
+static int
+_shutdown_mib_modules(int majorID, int minorID, void *serve, void *client)
+{
+ if (! need_shutdown) {
+ netsnmp_assert(need_shutdown == 1);
+ }
+ else {
+#include "mib_module_shutdown.h"
+
+ need_shutdown = 0;
+ }
+
+ return SNMPERR_SUCCESS; /* callback rc ignored */
+}
+
+void
+init_mib_modules(void)
+{
+ static int once = 0;
+
+#ifdef USING_IF_MIB_DATA_ACCESS_INTERFACE_MODULE
+ netsnmp_access_interface_init();
+#endif
+# include "mib_module_inits.h"
+
+ need_shutdown = 1;
+
+ if (once == 0) {
+ int rc;
+ once = 1;
+ rc = snmp_register_callback( SNMP_CALLBACK_LIBRARY,
+ SNMP_CALLBACK_SHUTDOWN,
+ _shutdown_mib_modules,
+ NULL);
+
+ if( rc != SNMP_ERR_NOERROR )
+ snmp_log(LOG_ERR, "error registering for SHUTDOWN callback "
+ "for mib modules\n");
+ }
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/EoCCommon.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/EoCCommon.h
new file mode 100644
index 0000000000..e1fc0d5ba4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/EoCCommon.h
@@ -0,0 +1,226 @@
+#ifndef EOCCOMMON_H
+#define EOCCOMMON_H
+
+#include "libspid.h"
+#include "nvram_utils.h"
+
+
+typedef char mac_t[6];
+
+typedef enum
+{
+ ADMIN_IP_MODE_STATIC = 0,
+ ADMIN_IP_MODE_DHCP = 1
+} admin_ip_mode_t;
+
+typedef enum
+{
+ ADMIN_ALARM_DETECT_DISABLED = 1,
+ ADMIN_ALARM_DETECT_ENABLED = 2,
+ ADMIN_ALARM_DETECT_REGENERATE = 3
+} admin_alarm_detect_t;
+
+typedef enum
+{
+ ADMIN_TAMPER_STATUS_INTACT = 1,
+ ADMIN_TAMPER_STATUS_COMPROMISED = 2
+} admin_tamper_status_t;
+typedef enum
+{
+ ADMIN_RESET_NONE = 0,
+ ADMIN_RESET_OTHER = 1,
+ ADMIN_RESET_POWER_UP = 2,
+ ADMIN_RESET_COMMAND = 3,
+ ADMIN_RESET_WATCHDOG = 4,
+ ADMIN_RESET_CRAFT = 5,
+ ADMIN_RESET_WEB = 6
+} admin_reset_cause_t;
+
+typedef enum
+{
+ ADMIN_CONF_RESULT_NONE = 0,
+ ADMIN_CONF_RESULT_SAVE = 1,
+ ADMIN_CONF_RESULT_FAILED = 2
+} admin_conf_result_t;
+
+typedef enum
+{
+ ADMIN_CONF_RESULT_SAVE_SUC = 0,
+ ADMIN_CONF_RESULT_SAVING = 1,
+ ADMIN_CONF_RESULT_SAVE_FAILED = 2
+} admin_conf_cbat_result_t;
+
+typedef enum
+{
+ ADMIN_LINK_TOPO_NO_CHANGE = 0,
+ ADMIN_LINK_TOPO_CHANGE = 1
+} admin_link_topo_change_t;
+
+typedef enum
+{
+ ADMIN_CBAT_SNMP_V1 = 0,
+ ADMIN_CBAT_SNMP_V2 = 1
+} admin_cbat_snmp_version_t;
+
+typedef enum
+{
+ SPC300_MASTER_CONFIG_RESULT_NONE = 0,
+ SPC300_MASTER_CONFIG_RESULT_SUCCESS = 1,
+ SPC300_MASTER_CONFIG_RESULT_INV_PARAM = 2,
+ SPC300_MASTER_CONFIG_RESULT_NOT_FOUND = 3,
+ SPC300_MASTER_CONFIG_RESULT_NO_SPACE = 4,
+ SPC300_MASTER_CONFIG_RESULT_SYSTEM_ERR = 5
+} spc300_master_config_result_t;
+
+typedef enum
+{
+ BCMP_ENABLE_YES = 1,
+ BCMP_ENABLE_NO = 2
+}bcmp_enable_t;
+
+/*
+ * common SNMP defines
+*/
+#define DEFAULT_SNMP_STRING_MAX_LENGTH 256
+#define DEFAULT_SNMP_BRIDGE_IF_NAME LIBSPID_EOC_BR_IFACE
+
+/*
+ * SARFT-EoC MIB
+ */
+
+/* AdminGroup */
+#define ADMIN_LOGICAL_ID_MAX_LEN (40+1)
+#define ADMIN_TECH_PROJECT "SPiDCOM"
+#define ADMIN_RESET 1
+#define ADMIN_SAVE 1
+#define ADMIN_VAR_BINDINGS 10
+#define ADMIN_SNMP_VERSION 2
+#define ADMIN_APPROPRIATIVE_OID "1.3.6.1.2.1.17409"
+
+
+/* MACGroup */
+/* OnlineCLTTable */
+#define ONLINE_CLT_UPLINK_DEVICE_PORT_NUMBER 0
+
+/* RFGroup */
+/* RFTable */
+#define RF_DOWNSTREAM_START_FREQ 2000
+#define RF_DOWNSTREAM_STOP_FREQ 35000
+#define RF_UPSTREAM_START_FREQ RF_DOWNSTREAM_START_FREQ
+#define RF_UPSTREAM_STOP_FREQ RF_DOWNSTREAM_STOP_FREQ
+
+/* CNUGroup */
+/* Online scalars */
+#define ONLINE_CNU_ALL_RESET 1
+
+/* WhiteList scalars */
+#define WHITE_LIST_PHY_RATE_GATE 200
+
+/* WhiteListTable */
+/* limits for modEoCCNUWhiteListTable columns */
+#define WHITE_LIST_START_TIME_TICKS_MIN 0
+#define WHITE_LIST_START_TIME_TICKS_MAX ((23*60*60 + 59*60)*100)
+#define WHITE_LIST_END_TIME_TICKS_MIN 0
+#define WHITE_LIST_END_TIME_TICKS_MAX ((23*60*60 + 59*60)*100)
+
+/* limits for scalars added to modEoCCNUWhiteListTable */
+#define WHITE_LIST_SLAVE_MAX_AUTH_NB LIBSPID_WHITE_LIST_MAX_STA_NUM
+#define WHITE_LIST_SLAVE_MAX_TOTAL_NB LIBSPID_WHITE_LIST_CONF_LINE_MAX_NB
+
+/* SoftwareUpgradeGroup */
+/* SoftwareUpgrade scalars */
+#define SW_UPGRADE_PORT_MIN 0
+#define SW_UPGRADE_PORT_MAX 65535
+
+#define SW_UPGRADE_LOGIN_MIN_LEN (1+1)
+#define SW_UPGRADE_LOGIN_MAX_LEN (32+1)
+
+#define SW_UPGRADE_PASSWORD_MIN_LEN (1+1)
+#define SW_UPGRADE_PASSWORD_MAX_LEN (16+1)
+
+/* TrapGroup */
+#define TRAP_MAX_TIMES_MIN 1
+#define TRAP_MAX_TIMES_MAX 255
+#define TRAP_MAX_TIMES_DEFAULT_VALUE TRAP_MAX_TIMES_MAX
+/* interval values in seconds */
+#define TRAP_MIN_INTERVAL_DEFAULT_VALUE 30
+#define TRAP_MAX_INTERVAL_DEFAULT_VALUE 30
+#define TRAP_IP_STR_DEFAULT_VALUE "255.255.255.255"
+#define TRAP_COMMUNITY_DEFAULT_VALUE "public"
+#define TRAP_PORT_DEFAULT_VALUE 162
+#define TRAP_MAX_SERVER_MAX_NB 24
+#define TRAP_COMMUNITY_MAX_LEN 64
+
+#define TRAP_TEMPERATURE_HIGHTHRESHOLD_DEFAULT_VALUE 75
+#define TRAP_TEMPERATURE_LOWTHRESHOLD_DEFAULT_VALUE -30
+#define TRAP_ATTENUATION_HIGHTHRESHOLD_DEFAULT_VALUE 75
+#define TRAP_ATTENUATION_LOWTHRESHOLD_DEFAULT_VALUE 5
+#define TRAP_CPULOAD_THRESHOLD_DEFAULT_VALUE 90
+#define TRAP_MEMUSAGE_THRESHOLD_DEFAULT_VALUE 80
+#define TRAP_TEMPERATURE_DEFAULT_VALUE 0
+#define TRAP_CPULOAD_DEFAULT_VALUE 0
+#define TRAP_MEMUSAGE_DEFAULT_VALUE 0
+/*
+ * SPC300-EoC MIB
+ */
+/* MasterGroup */
+#define SPC300_MASTER_PLC_FORWARDING_DISABLE 0
+#define SPC300_MASTER_PLC_FORWARDING_ENABLE 1
+
+#define SPC300_MASTER_CONFIG_PORT_MIN 0
+#define SPC300_MASTER_CONFIG_PORT_MAX 65535
+
+#define SPC300_MASTER_CONFIG_TELNET_TIMEOUT_MIN 0
+#define SPC300_MASTER_CONFIG_TELNET_TIMEOUT_MAX 65535
+
+#define SPC300_MASTER_CONFIG_AUTODISCOVERY_TIMEOUT_MIN 0
+#define SPC300_MASTER_CONFIG_AUTODISCOVERY_TIMEOUT_MAX 65535
+
+#define SPC300_MASTER_CONFIG_TELNET_SESSIONS_MAX_NB_MIN 0
+#define SPC300_MASTER_CONFIG_TELNET_SESSIONS_MAX_NB_MAX 60
+
+#define SPC300_MASTER_CONFIG_SERVICE_DISABLE 0
+#define SPC300_MASTER_CONFIG_SERVICE_ENABLE 1
+
+#define SPC300_MASTER_CONFIG_INTERFACE_MIN_LEN (0+1)
+#define SPC300_MASTER_CONFIG_INTERFACE_MAX_LEN (64+1)
+
+/* TODO: add MasterAutoDiscoveryInterface name min and max length */
+
+#define SPC300_MASTER_CONFIG_LOGIN_MIN_LEN (1+1)
+#define SPC300_MASTER_CONFIG_LOGIN_MAX_LEN (16+1)
+
+#define SPC300_MASTER_CONFIG_PASSWORD_MIN_LEN (1+1)
+#define SPC300_MASTER_CONFIG_PASSWORD_MAX_LEN (16+1)
+
+#define SPC300_MASTER_CONFIG_FILENAME_MIN_LEN (1+1)
+#define SPC300_MASTER_CONFIG_FILENAME_MAX_LEN (255+1)
+
+#define SPC300_MASTER_CONFIG_EXPORT 1
+#define SPC300_MASTER_CONFIG_IMPORT 1
+
+/*The max num of slave to connected a master*/
+#define SPC300_MASTER_CONN_MAX_NB 24
+
+/* SlaveGroup */
+/* WhiteList scalars */
+#define SPC300_NETWORK_PASSWORD_MIN_LEN (8+1)
+#define SPC300_NETWORK_PASSWORD_MAX_LEN (64+1)
+#define SPC300_NETWORK_DEFAULT_PASSWORD "SPIDCOM-SCR310-01"
+
+/* SARFT-PROPERTY-ALARM MIB */
+#define ALARM_CHECK_FREQUENCY 60
+
+/* eocCBATAdminGroup */
+#define EOCCBATADMINGROUPSPC300 1
+#define EOCCBATADMINGROUPSPC310 0
+#define EOCCBATADMIN_VARBINDINGS_MAX_NB 10
+#define EOCCBATADMIN_COMMUNITY_MAX_LEN 16
+#define EOCCBATADMIN_DEFINE_COMMUNITY_LOCAL "spidcom"
+#define EOCCBATADMIN_DEFINE_COMMUNITY_ALL "mstar"
+#define EOCCBATADMIN_VLANID_MAX 4095
+
+/* eocExtOcnBcmpGroup*/
+#define EOC_BCMP_VERSION "1.0"
+
+#endif /* EOCCOMMON_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Makefile.depend b/cleopatre/application/spidnetsnmp/agent/mibgroup/Makefile.depend
new file mode 100644
index 0000000000..15d698254c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Makefile.depend
@@ -0,0 +1,14542 @@
+# DO NOT DELETE THIS LINE -- make depend depends on it.
+
+./header_complex.lo: ../../include/net-snmp/net-snmp-config.h
+./header_complex.lo: ../../include/net-snmp/system/linux.h
+./header_complex.lo: ../../include/net-snmp/system/sysv.h
+./header_complex.lo: ../../include/net-snmp/system/generic.h
+./header_complex.lo: ../../include/net-snmp/machine/generic.h
+./header_complex.lo: ../../include/net-snmp/net-snmp-includes.h
+./header_complex.lo: ../../include/net-snmp/definitions.h
+./header_complex.lo: ../../include/net-snmp/types.h
+./header_complex.lo: ../../include/net-snmp/library/snmp_api.h
+./header_complex.lo: ../../include/net-snmp/library/asn1.h
+./header_complex.lo: ../../include/net-snmp/library/snmp_impl.h
+./header_complex.lo: ../../include/net-snmp/library/snmp.h
+./header_complex.lo: ../../include/net-snmp/library/snmp-tc.h
+./header_complex.lo: ../../include/net-snmp/utilities.h
+./header_complex.lo: ../../include/net-snmp/library/snmp_client.h
+./header_complex.lo: ../../include/net-snmp/library/system.h
+./header_complex.lo: ../../include/net-snmp/library/tools.h
+./header_complex.lo: ../../include/net-snmp/library/int64.h
+./header_complex.lo: ../../include/net-snmp/library/mt_support.h
+./header_complex.lo: ../../include/net-snmp/library/snmp_alarm.h
+./header_complex.lo: ../../include/net-snmp/library/callback.h
+./header_complex.lo: ../../include/net-snmp/library/data_list.h
+./header_complex.lo: ../../include/net-snmp/library/oid_stash.h
+./header_complex.lo: ../../include/net-snmp/library/check_varbind.h
+./header_complex.lo: ../../include/net-snmp/library/container.h
+./header_complex.lo: ../../include/net-snmp/library/factory.h
+./header_complex.lo: ../../include/net-snmp/library/snmp_logging.h
+./header_complex.lo: ../../include/net-snmp/library/container_binary_array.h
+./header_complex.lo: ../../include/net-snmp/library/container_list_ssll.h
+./header_complex.lo: ../../include/net-snmp/library/container_iterator.h
+./header_complex.lo: ../../include/net-snmp/library/container.h
+./header_complex.lo: ../../include/net-snmp/library/snmp_assert.h
+./header_complex.lo: ../../include/net-snmp/version.h
+./header_complex.lo: ../../include/net-snmp/session_api.h
+./header_complex.lo: ../../include/net-snmp/library/snmp_transport.h
+./header_complex.lo: ../../include/net-snmp/library/snmp_service.h
+./header_complex.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./header_complex.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./header_complex.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./header_complex.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./header_complex.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./header_complex.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./header_complex.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./header_complex.lo: ../../include/net-snmp/library/ucd_compat.h
+./header_complex.lo: ../../include/net-snmp/pdu_api.h
+./header_complex.lo: ../../include/net-snmp/mib_api.h
+./header_complex.lo: ../../include/net-snmp/library/mib.h
+./header_complex.lo: ../../include/net-snmp/library/parse.h
+./header_complex.lo: ../../include/net-snmp/varbind_api.h
+./header_complex.lo: ../../include/net-snmp/config_api.h
+./header_complex.lo: ../../include/net-snmp/library/read_config.h
+./header_complex.lo: ../../include/net-snmp/library/default_store.h
+./header_complex.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./header_complex.lo: ../../include/net-snmp/library/snmp_enum.h
+./header_complex.lo: ../../include/net-snmp/library/vacm.h
+./header_complex.lo: ../../include/net-snmp/output_api.h
+./header_complex.lo: ../../include/net-snmp/library/snmp_debug.h
+./header_complex.lo: ../../include/net-snmp/snmpv3_api.h
+./header_complex.lo: ../../include/net-snmp/library/snmpv3.h
+./header_complex.lo: ../../include/net-snmp/library/transform_oids.h
+./header_complex.lo: ../../include/net-snmp/library/keytools.h
+./header_complex.lo: ../../include/net-snmp/library/scapi.h
+./header_complex.lo: ../../include/net-snmp/library/lcd_time.h
+./header_complex.lo: ../../include/net-snmp/library/snmp_secmod.h
+./header_complex.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./header_complex.lo: ../../include/net-snmp/library/snmpusm.h
+./header_complex.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./header_complex.lo: ../../include/net-snmp/agent/mib_module_config.h
+./header_complex.lo: ../../include/net-snmp/agent/agent_module_config.h
+./header_complex.lo: ../../include/net-snmp/agent/snmp_agent.h
+./header_complex.lo: ../../include/net-snmp/agent/snmp_vars.h
+./header_complex.lo: ../../include/net-snmp/agent/agent_handler.h
+./header_complex.lo: ../../include/net-snmp/agent/var_struct.h
+./header_complex.lo: ../../include/net-snmp/agent/agent_registry.h
+./header_complex.lo: ../../include/net-snmp/library/fd_event_manager.h
+./header_complex.lo: ../../include/net-snmp/agent/ds_agent.h
+./header_complex.lo: ../../include/net-snmp/agent/agent_read_config.h
+./header_complex.lo: ../../include/net-snmp/agent/agent_trap.h
+./header_complex.lo: ../../include/net-snmp/agent/all_helpers.h
+./header_complex.lo: ../../include/net-snmp/agent/instance.h
+./header_complex.lo: ../../include/net-snmp/agent/baby_steps.h
+./header_complex.lo: ../../include/net-snmp/agent/scalar.h
+./header_complex.lo: ../../include/net-snmp/agent/scalar_group.h
+./header_complex.lo: ../../include/net-snmp/agent/watcher.h
+./header_complex.lo: ../../include/net-snmp/agent/multiplexer.h
+./header_complex.lo: ../../include/net-snmp/agent/null.h
+./header_complex.lo: ../../include/net-snmp/agent/debug_handler.h
+./header_complex.lo: ../../include/net-snmp/agent/cache_handler.h
+./header_complex.lo: ../../include/net-snmp/agent/old_api.h
+./header_complex.lo: ../../include/net-snmp/agent/read_only.h
+./header_complex.lo: ../../include/net-snmp/agent/row_merge.h
+./header_complex.lo: ../../include/net-snmp/agent/serialize.h
+./header_complex.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./header_complex.lo: ../../include/net-snmp/agent/mode_end_call.h
+./header_complex.lo: ../../include/net-snmp/agent/table.h
+./header_complex.lo: ../../include/net-snmp/agent/table_data.h
+./header_complex.lo: ../../include/net-snmp/agent/table_dataset.h
+./header_complex.lo: ../../include/net-snmp/agent/table_tdata.h
+./header_complex.lo: ../../include/net-snmp/agent/table_iterator.h
+./header_complex.lo: ../../include/net-snmp/agent/table_container.h
+./header_complex.lo: ../../include/net-snmp/agent/table_array.h
+./header_complex.lo: ../../include/net-snmp/agent/mfd.h header_complex.h
+./kernel_sunos5.lo: ../../include/net-snmp/net-snmp-config.h
+./kernel_sunos5.lo: ../../include/net-snmp/system/linux.h
+./kernel_sunos5.lo: ../../include/net-snmp/system/sysv.h
+./kernel_sunos5.lo: ../../include/net-snmp/system/generic.h
+./kernel_sunos5.lo: ../../include/net-snmp/machine/generic.h
+./testhandler.lo: ../../include/net-snmp/net-snmp-config.h
+./testhandler.lo: ../../include/net-snmp/system/linux.h
+./testhandler.lo: ../../include/net-snmp/system/sysv.h
+./testhandler.lo: ../../include/net-snmp/system/generic.h
+./testhandler.lo: ../../include/net-snmp/machine/generic.h
+./testhandler.lo: ../../include/net-snmp/net-snmp-includes.h
+./testhandler.lo: ../../include/net-snmp/definitions.h
+./testhandler.lo: ../../include/net-snmp/types.h
+./testhandler.lo: ../../include/net-snmp/library/snmp_api.h
+./testhandler.lo: ../../include/net-snmp/library/asn1.h
+./testhandler.lo: ../../include/net-snmp/library/snmp_impl.h
+./testhandler.lo: ../../include/net-snmp/library/snmp.h
+./testhandler.lo: ../../include/net-snmp/library/snmp-tc.h
+./testhandler.lo: ../../include/net-snmp/utilities.h
+./testhandler.lo: ../../include/net-snmp/library/snmp_client.h
+./testhandler.lo: ../../include/net-snmp/library/system.h
+./testhandler.lo: ../../include/net-snmp/library/tools.h
+./testhandler.lo: ../../include/net-snmp/library/int64.h
+./testhandler.lo: ../../include/net-snmp/library/mt_support.h
+./testhandler.lo: ../../include/net-snmp/library/snmp_alarm.h
+./testhandler.lo: ../../include/net-snmp/library/callback.h
+./testhandler.lo: ../../include/net-snmp/library/data_list.h
+./testhandler.lo: ../../include/net-snmp/library/oid_stash.h
+./testhandler.lo: ../../include/net-snmp/library/check_varbind.h
+./testhandler.lo: ../../include/net-snmp/library/container.h
+./testhandler.lo: ../../include/net-snmp/library/factory.h
+./testhandler.lo: ../../include/net-snmp/library/snmp_logging.h
+./testhandler.lo: ../../include/net-snmp/library/container_binary_array.h
+./testhandler.lo: ../../include/net-snmp/library/container_list_ssll.h
+./testhandler.lo: ../../include/net-snmp/library/container_iterator.h
+./testhandler.lo: ../../include/net-snmp/library/container.h
+./testhandler.lo: ../../include/net-snmp/library/snmp_assert.h
+./testhandler.lo: ../../include/net-snmp/version.h
+./testhandler.lo: ../../include/net-snmp/session_api.h
+./testhandler.lo: ../../include/net-snmp/library/snmp_transport.h
+./testhandler.lo: ../../include/net-snmp/library/snmp_service.h
+./testhandler.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./testhandler.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./testhandler.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./testhandler.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./testhandler.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./testhandler.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./testhandler.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./testhandler.lo: ../../include/net-snmp/library/ucd_compat.h
+./testhandler.lo: ../../include/net-snmp/pdu_api.h
+./testhandler.lo: ../../include/net-snmp/mib_api.h
+./testhandler.lo: ../../include/net-snmp/library/mib.h
+./testhandler.lo: ../../include/net-snmp/library/parse.h
+./testhandler.lo: ../../include/net-snmp/varbind_api.h
+./testhandler.lo: ../../include/net-snmp/config_api.h
+./testhandler.lo: ../../include/net-snmp/library/read_config.h
+./testhandler.lo: ../../include/net-snmp/library/default_store.h
+./testhandler.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./testhandler.lo: ../../include/net-snmp/library/snmp_enum.h
+./testhandler.lo: ../../include/net-snmp/library/vacm.h
+./testhandler.lo: ../../include/net-snmp/output_api.h
+./testhandler.lo: ../../include/net-snmp/library/snmp_debug.h
+./testhandler.lo: ../../include/net-snmp/snmpv3_api.h
+./testhandler.lo: ../../include/net-snmp/library/snmpv3.h
+./testhandler.lo: ../../include/net-snmp/library/transform_oids.h
+./testhandler.lo: ../../include/net-snmp/library/keytools.h
+./testhandler.lo: ../../include/net-snmp/library/scapi.h
+./testhandler.lo: ../../include/net-snmp/library/lcd_time.h
+./testhandler.lo: ../../include/net-snmp/library/snmp_secmod.h
+./testhandler.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./testhandler.lo: ../../include/net-snmp/library/snmpusm.h
+./testhandler.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./testhandler.lo: ../../include/net-snmp/agent/mib_module_config.h
+./testhandler.lo: ../../include/net-snmp/agent/agent_module_config.h
+./testhandler.lo: ../../include/net-snmp/agent/snmp_agent.h
+./testhandler.lo: ../../include/net-snmp/agent/snmp_vars.h
+./testhandler.lo: ../../include/net-snmp/agent/agent_handler.h
+./testhandler.lo: ../../include/net-snmp/agent/var_struct.h
+./testhandler.lo: ../../include/net-snmp/agent/agent_registry.h
+./testhandler.lo: ../../include/net-snmp/library/fd_event_manager.h
+./testhandler.lo: ../../include/net-snmp/agent/ds_agent.h
+./testhandler.lo: ../../include/net-snmp/agent/agent_read_config.h
+./testhandler.lo: ../../include/net-snmp/agent/agent_trap.h
+./testhandler.lo: ../../include/net-snmp/agent/all_helpers.h
+./testhandler.lo: ../../include/net-snmp/agent/instance.h
+./testhandler.lo: ../../include/net-snmp/agent/baby_steps.h
+./testhandler.lo: ../../include/net-snmp/agent/scalar.h
+./testhandler.lo: ../../include/net-snmp/agent/scalar_group.h
+./testhandler.lo: ../../include/net-snmp/agent/watcher.h
+./testhandler.lo: ../../include/net-snmp/agent/multiplexer.h
+./testhandler.lo: ../../include/net-snmp/agent/null.h
+./testhandler.lo: ../../include/net-snmp/agent/debug_handler.h
+./testhandler.lo: ../../include/net-snmp/agent/cache_handler.h
+./testhandler.lo: ../../include/net-snmp/agent/old_api.h
+./testhandler.lo: ../../include/net-snmp/agent/read_only.h
+./testhandler.lo: ../../include/net-snmp/agent/row_merge.h
+./testhandler.lo: ../../include/net-snmp/agent/serialize.h
+./testhandler.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./testhandler.lo: ../../include/net-snmp/agent/mode_end_call.h
+./testhandler.lo: ../../include/net-snmp/agent/table.h
+./testhandler.lo: ../../include/net-snmp/agent/table_data.h
+./testhandler.lo: ../../include/net-snmp/agent/table_dataset.h
+./testhandler.lo: ../../include/net-snmp/agent/table_tdata.h
+./testhandler.lo: ../../include/net-snmp/agent/table_iterator.h
+./testhandler.lo: ../../include/net-snmp/agent/table_container.h
+./testhandler.lo: ../../include/net-snmp/agent/table_array.h
+./testhandler.lo: ../../include/net-snmp/agent/mfd.h testhandler.h
+./util_funcs.lo: ../../include/net-snmp/net-snmp-config.h
+./util_funcs.lo: ../../include/net-snmp/system/linux.h
+./util_funcs.lo: ../../include/net-snmp/system/sysv.h
+./util_funcs.lo: ../../include/net-snmp/system/generic.h
+./util_funcs.lo: ../../include/net-snmp/machine/generic.h
+./util_funcs.lo: ../../include/net-snmp/net-snmp-includes.h
+./util_funcs.lo: ../../include/net-snmp/definitions.h
+./util_funcs.lo: ../../include/net-snmp/types.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp_api.h
+./util_funcs.lo: ../../include/net-snmp/library/asn1.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp_impl.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp-tc.h
+./util_funcs.lo: ../../include/net-snmp/utilities.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp_client.h
+./util_funcs.lo: ../../include/net-snmp/library/system.h
+./util_funcs.lo: ../../include/net-snmp/library/tools.h
+./util_funcs.lo: ../../include/net-snmp/library/int64.h
+./util_funcs.lo: ../../include/net-snmp/library/mt_support.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp_alarm.h
+./util_funcs.lo: ../../include/net-snmp/library/callback.h
+./util_funcs.lo: ../../include/net-snmp/library/data_list.h
+./util_funcs.lo: ../../include/net-snmp/library/oid_stash.h
+./util_funcs.lo: ../../include/net-snmp/library/check_varbind.h
+./util_funcs.lo: ../../include/net-snmp/library/container.h
+./util_funcs.lo: ../../include/net-snmp/library/factory.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp_logging.h
+./util_funcs.lo: ../../include/net-snmp/library/container_binary_array.h
+./util_funcs.lo: ../../include/net-snmp/library/container_list_ssll.h
+./util_funcs.lo: ../../include/net-snmp/library/container_iterator.h
+./util_funcs.lo: ../../include/net-snmp/library/container.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp_assert.h
+./util_funcs.lo: ../../include/net-snmp/version.h
+./util_funcs.lo: ../../include/net-snmp/session_api.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp_transport.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp_service.h
+./util_funcs.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./util_funcs.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./util_funcs.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./util_funcs.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./util_funcs.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./util_funcs.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./util_funcs.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./util_funcs.lo: ../../include/net-snmp/library/ucd_compat.h
+./util_funcs.lo: ../../include/net-snmp/pdu_api.h
+./util_funcs.lo: ../../include/net-snmp/mib_api.h
+./util_funcs.lo: ../../include/net-snmp/library/mib.h
+./util_funcs.lo: ../../include/net-snmp/library/parse.h
+./util_funcs.lo: ../../include/net-snmp/varbind_api.h
+./util_funcs.lo: ../../include/net-snmp/config_api.h
+./util_funcs.lo: ../../include/net-snmp/library/read_config.h
+./util_funcs.lo: ../../include/net-snmp/library/default_store.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp_enum.h
+./util_funcs.lo: ../../include/net-snmp/library/vacm.h
+./util_funcs.lo: ../../include/net-snmp/output_api.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp_debug.h
+./util_funcs.lo: ../../include/net-snmp/snmpv3_api.h
+./util_funcs.lo: ../../include/net-snmp/library/snmpv3.h
+./util_funcs.lo: ../../include/net-snmp/library/transform_oids.h
+./util_funcs.lo: ../../include/net-snmp/library/keytools.h
+./util_funcs.lo: ../../include/net-snmp/library/scapi.h
+./util_funcs.lo: ../../include/net-snmp/library/lcd_time.h
+./util_funcs.lo: ../../include/net-snmp/library/snmp_secmod.h
+./util_funcs.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./util_funcs.lo: ../../include/net-snmp/library/snmpusm.h
+./util_funcs.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./util_funcs.lo: ../../include/net-snmp/agent/mib_module_config.h
+./util_funcs.lo: ../../include/net-snmp/agent/agent_module_config.h
+./util_funcs.lo: ../../include/net-snmp/agent/snmp_agent.h
+./util_funcs.lo: ../../include/net-snmp/agent/snmp_vars.h
+./util_funcs.lo: ../../include/net-snmp/agent/agent_handler.h
+./util_funcs.lo: ../../include/net-snmp/agent/var_struct.h
+./util_funcs.lo: ../../include/net-snmp/agent/agent_registry.h
+./util_funcs.lo: ../../include/net-snmp/library/fd_event_manager.h
+./util_funcs.lo: ../../include/net-snmp/agent/ds_agent.h
+./util_funcs.lo: ../../include/net-snmp/agent/agent_read_config.h
+./util_funcs.lo: ../../include/net-snmp/agent/agent_trap.h
+./util_funcs.lo: ../../include/net-snmp/agent/all_helpers.h
+./util_funcs.lo: ../../include/net-snmp/agent/instance.h
+./util_funcs.lo: ../../include/net-snmp/agent/baby_steps.h
+./util_funcs.lo: ../../include/net-snmp/agent/scalar.h
+./util_funcs.lo: ../../include/net-snmp/agent/scalar_group.h
+./util_funcs.lo: ../../include/net-snmp/agent/watcher.h
+./util_funcs.lo: ../../include/net-snmp/agent/multiplexer.h
+./util_funcs.lo: ../../include/net-snmp/agent/null.h
+./util_funcs.lo: ../../include/net-snmp/agent/debug_handler.h
+./util_funcs.lo: ../../include/net-snmp/agent/cache_handler.h
+./util_funcs.lo: ../../include/net-snmp/agent/old_api.h
+./util_funcs.lo: ../../include/net-snmp/agent/read_only.h
+./util_funcs.lo: ../../include/net-snmp/agent/row_merge.h
+./util_funcs.lo: ../../include/net-snmp/agent/serialize.h
+./util_funcs.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./util_funcs.lo: ../../include/net-snmp/agent/mode_end_call.h
+./util_funcs.lo: ../../include/net-snmp/agent/table.h
+./util_funcs.lo: ../../include/net-snmp/agent/table_data.h
+./util_funcs.lo: ../../include/net-snmp/agent/table_dataset.h
+./util_funcs.lo: ../../include/net-snmp/agent/table_tdata.h
+./util_funcs.lo: ../../include/net-snmp/agent/table_iterator.h
+./util_funcs.lo: ../../include/net-snmp/agent/table_container.h
+./util_funcs.lo: ../../include/net-snmp/agent/table_array.h
+./util_funcs.lo: ../../include/net-snmp/agent/mfd.h struct.h util_funcs.h
+./util_funcs.lo: utilities/execute.h
+./util_funcs.lo: ucd-snmp/errormib.h mibdefs.h
+./winExtDLL.lo: ../../include/net-snmp/net-snmp-config.h
+./winExtDLL.lo: ../../include/net-snmp/system/linux.h
+./winExtDLL.lo: ../../include/net-snmp/system/sysv.h
+./winExtDLL.lo: ../../include/net-snmp/system/generic.h
+./winExtDLL.lo: ../../include/net-snmp/machine/generic.h
+./winExtDLL.lo: ../../include/net-snmp/net-snmp-includes.h
+./winExtDLL.lo: ../../include/net-snmp/definitions.h
+./winExtDLL.lo: ../../include/net-snmp/types.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp_api.h
+./winExtDLL.lo: ../../include/net-snmp/library/asn1.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp_impl.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp-tc.h
+./winExtDLL.lo: ../../include/net-snmp/utilities.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp_client.h
+./winExtDLL.lo: ../../include/net-snmp/library/system.h
+./winExtDLL.lo: ../../include/net-snmp/library/tools.h
+./winExtDLL.lo: ../../include/net-snmp/library/int64.h
+./winExtDLL.lo: ../../include/net-snmp/library/mt_support.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp_alarm.h
+./winExtDLL.lo: ../../include/net-snmp/library/callback.h
+./winExtDLL.lo: ../../include/net-snmp/library/data_list.h
+./winExtDLL.lo: ../../include/net-snmp/library/oid_stash.h
+./winExtDLL.lo: ../../include/net-snmp/library/check_varbind.h
+./winExtDLL.lo: ../../include/net-snmp/library/container.h
+./winExtDLL.lo: ../../include/net-snmp/library/factory.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp_logging.h
+./winExtDLL.lo: ../../include/net-snmp/library/container_binary_array.h
+./winExtDLL.lo: ../../include/net-snmp/library/container_list_ssll.h
+./winExtDLL.lo: ../../include/net-snmp/library/container_iterator.h
+./winExtDLL.lo: ../../include/net-snmp/library/container.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp_assert.h
+./winExtDLL.lo: ../../include/net-snmp/version.h
+./winExtDLL.lo: ../../include/net-snmp/session_api.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp_transport.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp_service.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./winExtDLL.lo: ../../include/net-snmp/library/ucd_compat.h
+./winExtDLL.lo: ../../include/net-snmp/pdu_api.h
+./winExtDLL.lo: ../../include/net-snmp/mib_api.h
+./winExtDLL.lo: ../../include/net-snmp/library/mib.h
+./winExtDLL.lo: ../../include/net-snmp/library/parse.h
+./winExtDLL.lo: ../../include/net-snmp/varbind_api.h
+./winExtDLL.lo: ../../include/net-snmp/config_api.h
+./winExtDLL.lo: ../../include/net-snmp/library/read_config.h
+./winExtDLL.lo: ../../include/net-snmp/library/default_store.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp_enum.h
+./winExtDLL.lo: ../../include/net-snmp/library/vacm.h
+./winExtDLL.lo: ../../include/net-snmp/output_api.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp_debug.h
+./winExtDLL.lo: ../../include/net-snmp/snmpv3_api.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmpv3.h
+./winExtDLL.lo: ../../include/net-snmp/library/transform_oids.h
+./winExtDLL.lo: ../../include/net-snmp/library/keytools.h
+./winExtDLL.lo: ../../include/net-snmp/library/scapi.h
+./winExtDLL.lo: ../../include/net-snmp/library/lcd_time.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmp_secmod.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./winExtDLL.lo: ../../include/net-snmp/library/snmpusm.h
+./winExtDLL.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./winExtDLL.lo: ../../include/net-snmp/agent/mib_module_config.h
+./winExtDLL.lo: ../../include/net-snmp/agent/agent_module_config.h
+./winExtDLL.lo: ../../include/net-snmp/agent/snmp_agent.h
+./winExtDLL.lo: ../../include/net-snmp/agent/snmp_vars.h
+./winExtDLL.lo: ../../include/net-snmp/agent/agent_handler.h
+./winExtDLL.lo: ../../include/net-snmp/agent/var_struct.h
+./winExtDLL.lo: ../../include/net-snmp/agent/agent_registry.h
+./winExtDLL.lo: ../../include/net-snmp/library/fd_event_manager.h
+./winExtDLL.lo: ../../include/net-snmp/agent/ds_agent.h
+./winExtDLL.lo: ../../include/net-snmp/agent/agent_read_config.h
+./winExtDLL.lo: ../../include/net-snmp/agent/agent_trap.h
+./winExtDLL.lo: ../../include/net-snmp/agent/all_helpers.h
+./winExtDLL.lo: ../../include/net-snmp/agent/instance.h
+./winExtDLL.lo: ../../include/net-snmp/agent/baby_steps.h
+./winExtDLL.lo: ../../include/net-snmp/agent/scalar.h
+./winExtDLL.lo: ../../include/net-snmp/agent/scalar_group.h
+./winExtDLL.lo: ../../include/net-snmp/agent/watcher.h
+./winExtDLL.lo: ../../include/net-snmp/agent/multiplexer.h
+./winExtDLL.lo: ../../include/net-snmp/agent/null.h
+./winExtDLL.lo: ../../include/net-snmp/agent/debug_handler.h
+./winExtDLL.lo: ../../include/net-snmp/agent/cache_handler.h
+./winExtDLL.lo: ../../include/net-snmp/agent/old_api.h
+./winExtDLL.lo: ../../include/net-snmp/agent/read_only.h
+./winExtDLL.lo: ../../include/net-snmp/agent/row_merge.h
+./winExtDLL.lo: ../../include/net-snmp/agent/serialize.h
+./winExtDLL.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./winExtDLL.lo: ../../include/net-snmp/agent/mode_end_call.h
+./winExtDLL.lo: ../../include/net-snmp/agent/table.h
+./winExtDLL.lo: ../../include/net-snmp/agent/table_data.h
+./winExtDLL.lo: ../../include/net-snmp/agent/table_dataset.h
+./winExtDLL.lo: ../../include/net-snmp/agent/table_tdata.h
+./winExtDLL.lo: ../../include/net-snmp/agent/table_iterator.h
+./winExtDLL.lo: ../../include/net-snmp/agent/table_container.h
+./winExtDLL.lo: ../../include/net-snmp/agent/table_array.h
+./winExtDLL.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h struct.h
+./winExtDLL.lo: winExtDLL.h
+./Rmon/agutil.lo: ../../include/net-snmp/net-snmp-config.h
+./Rmon/agutil.lo: ../../include/net-snmp/system/linux.h
+./Rmon/agutil.lo: ../../include/net-snmp/system/sysv.h
+./Rmon/agutil.lo: ../../include/net-snmp/system/generic.h
+./Rmon/agutil.lo: ../../include/net-snmp/machine/generic.h
+./Rmon/agutil.lo: ../../include/net-snmp/net-snmp-includes.h
+./Rmon/agutil.lo: ../../include/net-snmp/definitions.h
+./Rmon/agutil.lo: ../../include/net-snmp/types.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp_api.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/asn1.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp_impl.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp-tc.h
+./Rmon/agutil.lo: ../../include/net-snmp/utilities.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp_client.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/system.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/tools.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/int64.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/mt_support.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp_alarm.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/callback.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/data_list.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/oid_stash.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/check_varbind.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/container.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/factory.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp_logging.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/container_binary_array.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/container_list_ssll.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/container_iterator.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/container.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp_assert.h
+./Rmon/agutil.lo: ../../include/net-snmp/version.h
+./Rmon/agutil.lo: ../../include/net-snmp/session_api.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp_transport.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp_service.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/ucd_compat.h
+./Rmon/agutil.lo: ../../include/net-snmp/pdu_api.h
+./Rmon/agutil.lo: ../../include/net-snmp/mib_api.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/mib.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/parse.h
+./Rmon/agutil.lo: ../../include/net-snmp/varbind_api.h
+./Rmon/agutil.lo: ../../include/net-snmp/config_api.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/read_config.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/default_store.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp_enum.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/vacm.h
+./Rmon/agutil.lo: ../../include/net-snmp/output_api.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp_debug.h
+./Rmon/agutil.lo: ../../include/net-snmp/snmpv3_api.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmpv3.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/transform_oids.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/keytools.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/scapi.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/lcd_time.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmp_secmod.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/snmpusm.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/mib_module_config.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/agent_module_config.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/snmp_agent.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/snmp_vars.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/agent_handler.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/var_struct.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/agent_registry.h
+./Rmon/agutil.lo: ../../include/net-snmp/library/fd_event_manager.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/ds_agent.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/agent_read_config.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/agent_trap.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/all_helpers.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/instance.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/baby_steps.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/scalar.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/scalar_group.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/watcher.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/multiplexer.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/null.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/debug_handler.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/cache_handler.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/old_api.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/read_only.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/row_merge.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/serialize.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/mode_end_call.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/table.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/table_data.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/table_dataset.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/table_tdata.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/table_iterator.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/table_container.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/table_array.h
+./Rmon/agutil.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h struct.h
+./Rmon/agutil.lo: ./Rmon/agutil.h ./Rmon/agutil_api.h
+./Rmon/alarm.lo: ../../include/net-snmp/net-snmp-config.h
+./Rmon/alarm.lo: ../../include/net-snmp/system/linux.h
+./Rmon/alarm.lo: ../../include/net-snmp/system/sysv.h
+./Rmon/alarm.lo: ../../include/net-snmp/system/generic.h
+./Rmon/alarm.lo: ../../include/net-snmp/machine/generic.h
+./Rmon/alarm.lo: ../../include/net-snmp/net-snmp-includes.h
+./Rmon/alarm.lo: ../../include/net-snmp/definitions.h
+./Rmon/alarm.lo: ../../include/net-snmp/types.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp_api.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/asn1.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp_impl.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp-tc.h
+./Rmon/alarm.lo: ../../include/net-snmp/utilities.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp_client.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/system.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/tools.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/int64.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/mt_support.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp_alarm.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/callback.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/data_list.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/oid_stash.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/check_varbind.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/container.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/factory.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp_logging.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/container_binary_array.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/container_list_ssll.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/container_iterator.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/container.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp_assert.h
+./Rmon/alarm.lo: ../../include/net-snmp/version.h
+./Rmon/alarm.lo: ../../include/net-snmp/session_api.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp_transport.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp_service.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/ucd_compat.h
+./Rmon/alarm.lo: ../../include/net-snmp/pdu_api.h
+./Rmon/alarm.lo: ../../include/net-snmp/mib_api.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/mib.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/parse.h
+./Rmon/alarm.lo: ../../include/net-snmp/varbind_api.h
+./Rmon/alarm.lo: ../../include/net-snmp/config_api.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/read_config.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/default_store.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp_enum.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/vacm.h
+./Rmon/alarm.lo: ../../include/net-snmp/output_api.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp_debug.h
+./Rmon/alarm.lo: ../../include/net-snmp/snmpv3_api.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmpv3.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/transform_oids.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/keytools.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/scapi.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/lcd_time.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmp_secmod.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/snmpusm.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/mib_module_config.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/agent_module_config.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/snmp_agent.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/snmp_vars.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/agent_handler.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/var_struct.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/agent_registry.h
+./Rmon/alarm.lo: ../../include/net-snmp/library/fd_event_manager.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/ds_agent.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/agent_read_config.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/agent_trap.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/all_helpers.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/instance.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/baby_steps.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/scalar.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/scalar_group.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/watcher.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/multiplexer.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/null.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/debug_handler.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/cache_handler.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/old_api.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/read_only.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/row_merge.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/serialize.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/mode_end_call.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/table.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/table_data.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/table_dataset.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/table_tdata.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/table_iterator.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/table_container.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/table_array.h
+./Rmon/alarm.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h struct.h
+./Rmon/alarm.lo: ./Rmon/alarm.h ./Rmon/agutil_api.h ./Rmon/row_api.h
+./Rmon/event.lo: ../../include/net-snmp/net-snmp-config.h
+./Rmon/event.lo: ../../include/net-snmp/system/linux.h
+./Rmon/event.lo: ../../include/net-snmp/system/sysv.h
+./Rmon/event.lo: ../../include/net-snmp/system/generic.h
+./Rmon/event.lo: ../../include/net-snmp/machine/generic.h
+./Rmon/event.lo: ../../include/net-snmp/net-snmp-includes.h
+./Rmon/event.lo: ../../include/net-snmp/definitions.h
+./Rmon/event.lo: ../../include/net-snmp/types.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp_api.h
+./Rmon/event.lo: ../../include/net-snmp/library/asn1.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp_impl.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp-tc.h
+./Rmon/event.lo: ../../include/net-snmp/utilities.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp_client.h
+./Rmon/event.lo: ../../include/net-snmp/library/system.h
+./Rmon/event.lo: ../../include/net-snmp/library/tools.h
+./Rmon/event.lo: ../../include/net-snmp/library/int64.h
+./Rmon/event.lo: ../../include/net-snmp/library/mt_support.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp_alarm.h
+./Rmon/event.lo: ../../include/net-snmp/library/callback.h
+./Rmon/event.lo: ../../include/net-snmp/library/data_list.h
+./Rmon/event.lo: ../../include/net-snmp/library/oid_stash.h
+./Rmon/event.lo: ../../include/net-snmp/library/check_varbind.h
+./Rmon/event.lo: ../../include/net-snmp/library/container.h
+./Rmon/event.lo: ../../include/net-snmp/library/factory.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp_logging.h
+./Rmon/event.lo: ../../include/net-snmp/library/container_binary_array.h
+./Rmon/event.lo: ../../include/net-snmp/library/container_list_ssll.h
+./Rmon/event.lo: ../../include/net-snmp/library/container_iterator.h
+./Rmon/event.lo: ../../include/net-snmp/library/container.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp_assert.h
+./Rmon/event.lo: ../../include/net-snmp/version.h
+./Rmon/event.lo: ../../include/net-snmp/session_api.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp_transport.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp_service.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./Rmon/event.lo: ../../include/net-snmp/library/ucd_compat.h
+./Rmon/event.lo: ../../include/net-snmp/pdu_api.h
+./Rmon/event.lo: ../../include/net-snmp/mib_api.h
+./Rmon/event.lo: ../../include/net-snmp/library/mib.h
+./Rmon/event.lo: ../../include/net-snmp/library/parse.h
+./Rmon/event.lo: ../../include/net-snmp/varbind_api.h
+./Rmon/event.lo: ../../include/net-snmp/config_api.h
+./Rmon/event.lo: ../../include/net-snmp/library/read_config.h
+./Rmon/event.lo: ../../include/net-snmp/library/default_store.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp_enum.h
+./Rmon/event.lo: ../../include/net-snmp/library/vacm.h
+./Rmon/event.lo: ../../include/net-snmp/output_api.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp_debug.h
+./Rmon/event.lo: ../../include/net-snmp/snmpv3_api.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmpv3.h
+./Rmon/event.lo: ../../include/net-snmp/library/transform_oids.h
+./Rmon/event.lo: ../../include/net-snmp/library/keytools.h
+./Rmon/event.lo: ../../include/net-snmp/library/scapi.h
+./Rmon/event.lo: ../../include/net-snmp/library/lcd_time.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmp_secmod.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./Rmon/event.lo: ../../include/net-snmp/library/snmpusm.h
+./Rmon/event.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./Rmon/event.lo: ../../include/net-snmp/agent/mib_module_config.h
+./Rmon/event.lo: ../../include/net-snmp/agent/agent_module_config.h
+./Rmon/event.lo: ../../include/net-snmp/agent/snmp_agent.h
+./Rmon/event.lo: ../../include/net-snmp/agent/snmp_vars.h
+./Rmon/event.lo: ../../include/net-snmp/agent/agent_handler.h
+./Rmon/event.lo: ../../include/net-snmp/agent/var_struct.h
+./Rmon/event.lo: ../../include/net-snmp/agent/agent_registry.h
+./Rmon/event.lo: ../../include/net-snmp/library/fd_event_manager.h
+./Rmon/event.lo: ../../include/net-snmp/agent/ds_agent.h
+./Rmon/event.lo: ../../include/net-snmp/agent/agent_read_config.h
+./Rmon/event.lo: ../../include/net-snmp/agent/agent_trap.h
+./Rmon/event.lo: ../../include/net-snmp/agent/all_helpers.h
+./Rmon/event.lo: ../../include/net-snmp/agent/instance.h
+./Rmon/event.lo: ../../include/net-snmp/agent/baby_steps.h
+./Rmon/event.lo: ../../include/net-snmp/agent/scalar.h
+./Rmon/event.lo: ../../include/net-snmp/agent/scalar_group.h
+./Rmon/event.lo: ../../include/net-snmp/agent/watcher.h
+./Rmon/event.lo: ../../include/net-snmp/agent/multiplexer.h
+./Rmon/event.lo: ../../include/net-snmp/agent/null.h
+./Rmon/event.lo: ../../include/net-snmp/agent/debug_handler.h
+./Rmon/event.lo: ../../include/net-snmp/agent/cache_handler.h
+./Rmon/event.lo: ../../include/net-snmp/agent/old_api.h
+./Rmon/event.lo: ../../include/net-snmp/agent/read_only.h
+./Rmon/event.lo: ../../include/net-snmp/agent/row_merge.h
+./Rmon/event.lo: ../../include/net-snmp/agent/serialize.h
+./Rmon/event.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./Rmon/event.lo: ../../include/net-snmp/agent/mode_end_call.h
+./Rmon/event.lo: ../../include/net-snmp/agent/table.h
+./Rmon/event.lo: ../../include/net-snmp/agent/table_data.h
+./Rmon/event.lo: ../../include/net-snmp/agent/table_dataset.h
+./Rmon/event.lo: ../../include/net-snmp/agent/table_tdata.h
+./Rmon/event.lo: ../../include/net-snmp/agent/table_iterator.h
+./Rmon/event.lo: ../../include/net-snmp/agent/table_container.h
+./Rmon/event.lo: ../../include/net-snmp/agent/table_array.h
+./Rmon/event.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h struct.h
+./Rmon/event.lo: ./Rmon/event.h ./Rmon/agutil_api.h ./Rmon/row_api.h
+./Rmon/history.lo: ../../include/net-snmp/net-snmp-config.h
+./Rmon/history.lo: ../../include/net-snmp/system/linux.h
+./Rmon/history.lo: ../../include/net-snmp/system/sysv.h
+./Rmon/history.lo: ../../include/net-snmp/system/generic.h
+./Rmon/history.lo: ../../include/net-snmp/machine/generic.h
+./Rmon/history.lo: ../../include/net-snmp/net-snmp-includes.h
+./Rmon/history.lo: ../../include/net-snmp/definitions.h
+./Rmon/history.lo: ../../include/net-snmp/types.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp_api.h
+./Rmon/history.lo: ../../include/net-snmp/library/asn1.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp_impl.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp-tc.h
+./Rmon/history.lo: ../../include/net-snmp/utilities.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp_client.h
+./Rmon/history.lo: ../../include/net-snmp/library/system.h
+./Rmon/history.lo: ../../include/net-snmp/library/tools.h
+./Rmon/history.lo: ../../include/net-snmp/library/int64.h
+./Rmon/history.lo: ../../include/net-snmp/library/mt_support.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp_alarm.h
+./Rmon/history.lo: ../../include/net-snmp/library/callback.h
+./Rmon/history.lo: ../../include/net-snmp/library/data_list.h
+./Rmon/history.lo: ../../include/net-snmp/library/oid_stash.h
+./Rmon/history.lo: ../../include/net-snmp/library/check_varbind.h
+./Rmon/history.lo: ../../include/net-snmp/library/container.h
+./Rmon/history.lo: ../../include/net-snmp/library/factory.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp_logging.h
+./Rmon/history.lo: ../../include/net-snmp/library/container_binary_array.h
+./Rmon/history.lo: ../../include/net-snmp/library/container_list_ssll.h
+./Rmon/history.lo: ../../include/net-snmp/library/container_iterator.h
+./Rmon/history.lo: ../../include/net-snmp/library/container.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp_assert.h
+./Rmon/history.lo: ../../include/net-snmp/version.h
+./Rmon/history.lo: ../../include/net-snmp/session_api.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp_transport.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp_service.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./Rmon/history.lo: ../../include/net-snmp/library/ucd_compat.h
+./Rmon/history.lo: ../../include/net-snmp/pdu_api.h
+./Rmon/history.lo: ../../include/net-snmp/mib_api.h
+./Rmon/history.lo: ../../include/net-snmp/library/mib.h
+./Rmon/history.lo: ../../include/net-snmp/library/parse.h
+./Rmon/history.lo: ../../include/net-snmp/varbind_api.h
+./Rmon/history.lo: ../../include/net-snmp/config_api.h
+./Rmon/history.lo: ../../include/net-snmp/library/read_config.h
+./Rmon/history.lo: ../../include/net-snmp/library/default_store.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp_enum.h
+./Rmon/history.lo: ../../include/net-snmp/library/vacm.h
+./Rmon/history.lo: ../../include/net-snmp/output_api.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp_debug.h
+./Rmon/history.lo: ../../include/net-snmp/snmpv3_api.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmpv3.h
+./Rmon/history.lo: ../../include/net-snmp/library/transform_oids.h
+./Rmon/history.lo: ../../include/net-snmp/library/keytools.h
+./Rmon/history.lo: ../../include/net-snmp/library/scapi.h
+./Rmon/history.lo: ../../include/net-snmp/library/lcd_time.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmp_secmod.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./Rmon/history.lo: ../../include/net-snmp/library/snmpusm.h
+./Rmon/history.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./Rmon/history.lo: ../../include/net-snmp/agent/mib_module_config.h
+./Rmon/history.lo: ../../include/net-snmp/agent/agent_module_config.h
+./Rmon/history.lo: ../../include/net-snmp/agent/snmp_agent.h
+./Rmon/history.lo: ../../include/net-snmp/agent/snmp_vars.h
+./Rmon/history.lo: ../../include/net-snmp/agent/agent_handler.h
+./Rmon/history.lo: ../../include/net-snmp/agent/var_struct.h
+./Rmon/history.lo: ../../include/net-snmp/agent/agent_registry.h
+./Rmon/history.lo: ../../include/net-snmp/library/fd_event_manager.h
+./Rmon/history.lo: ../../include/net-snmp/agent/ds_agent.h
+./Rmon/history.lo: ../../include/net-snmp/agent/agent_read_config.h
+./Rmon/history.lo: ../../include/net-snmp/agent/agent_trap.h
+./Rmon/history.lo: ../../include/net-snmp/agent/all_helpers.h
+./Rmon/history.lo: ../../include/net-snmp/agent/instance.h
+./Rmon/history.lo: ../../include/net-snmp/agent/baby_steps.h
+./Rmon/history.lo: ../../include/net-snmp/agent/scalar.h
+./Rmon/history.lo: ../../include/net-snmp/agent/scalar_group.h
+./Rmon/history.lo: ../../include/net-snmp/agent/watcher.h
+./Rmon/history.lo: ../../include/net-snmp/agent/multiplexer.h
+./Rmon/history.lo: ../../include/net-snmp/agent/null.h
+./Rmon/history.lo: ../../include/net-snmp/agent/debug_handler.h
+./Rmon/history.lo: ../../include/net-snmp/agent/cache_handler.h
+./Rmon/history.lo: ../../include/net-snmp/agent/old_api.h
+./Rmon/history.lo: ../../include/net-snmp/agent/read_only.h
+./Rmon/history.lo: ../../include/net-snmp/agent/row_merge.h
+./Rmon/history.lo: ../../include/net-snmp/agent/serialize.h
+./Rmon/history.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./Rmon/history.lo: ../../include/net-snmp/agent/mode_end_call.h
+./Rmon/history.lo: ../../include/net-snmp/agent/table.h
+./Rmon/history.lo: ../../include/net-snmp/agent/table_data.h
+./Rmon/history.lo: ../../include/net-snmp/agent/table_dataset.h
+./Rmon/history.lo: ../../include/net-snmp/agent/table_tdata.h
+./Rmon/history.lo: ../../include/net-snmp/agent/table_iterator.h
+./Rmon/history.lo: ../../include/net-snmp/agent/table_container.h
+./Rmon/history.lo: ../../include/net-snmp/agent/table_array.h
+./Rmon/history.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h struct.h
+./Rmon/history.lo: ./Rmon/history.h ./Rmon/agutil_api.h ./Rmon/row_api.h
+./Rmon/rows.lo: ../../include/net-snmp/net-snmp-config.h
+./Rmon/rows.lo: ../../include/net-snmp/system/linux.h
+./Rmon/rows.lo: ../../include/net-snmp/system/sysv.h
+./Rmon/rows.lo: ../../include/net-snmp/system/generic.h
+./Rmon/rows.lo: ../../include/net-snmp/machine/generic.h
+./Rmon/rows.lo: ../../include/net-snmp/net-snmp-includes.h
+./Rmon/rows.lo: ../../include/net-snmp/definitions.h
+./Rmon/rows.lo: ../../include/net-snmp/types.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp_api.h
+./Rmon/rows.lo: ../../include/net-snmp/library/asn1.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp_impl.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp-tc.h
+./Rmon/rows.lo: ../../include/net-snmp/utilities.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp_client.h
+./Rmon/rows.lo: ../../include/net-snmp/library/system.h
+./Rmon/rows.lo: ../../include/net-snmp/library/tools.h
+./Rmon/rows.lo: ../../include/net-snmp/library/int64.h
+./Rmon/rows.lo: ../../include/net-snmp/library/mt_support.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp_alarm.h
+./Rmon/rows.lo: ../../include/net-snmp/library/callback.h
+./Rmon/rows.lo: ../../include/net-snmp/library/data_list.h
+./Rmon/rows.lo: ../../include/net-snmp/library/oid_stash.h
+./Rmon/rows.lo: ../../include/net-snmp/library/check_varbind.h
+./Rmon/rows.lo: ../../include/net-snmp/library/container.h
+./Rmon/rows.lo: ../../include/net-snmp/library/factory.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp_logging.h
+./Rmon/rows.lo: ../../include/net-snmp/library/container_binary_array.h
+./Rmon/rows.lo: ../../include/net-snmp/library/container_list_ssll.h
+./Rmon/rows.lo: ../../include/net-snmp/library/container_iterator.h
+./Rmon/rows.lo: ../../include/net-snmp/library/container.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp_assert.h
+./Rmon/rows.lo: ../../include/net-snmp/version.h
+./Rmon/rows.lo: ../../include/net-snmp/session_api.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp_transport.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp_service.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./Rmon/rows.lo: ../../include/net-snmp/library/ucd_compat.h
+./Rmon/rows.lo: ../../include/net-snmp/pdu_api.h
+./Rmon/rows.lo: ../../include/net-snmp/mib_api.h
+./Rmon/rows.lo: ../../include/net-snmp/library/mib.h
+./Rmon/rows.lo: ../../include/net-snmp/library/parse.h
+./Rmon/rows.lo: ../../include/net-snmp/varbind_api.h
+./Rmon/rows.lo: ../../include/net-snmp/config_api.h
+./Rmon/rows.lo: ../../include/net-snmp/library/read_config.h
+./Rmon/rows.lo: ../../include/net-snmp/library/default_store.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp_enum.h
+./Rmon/rows.lo: ../../include/net-snmp/library/vacm.h
+./Rmon/rows.lo: ../../include/net-snmp/output_api.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp_debug.h
+./Rmon/rows.lo: ../../include/net-snmp/snmpv3_api.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmpv3.h
+./Rmon/rows.lo: ../../include/net-snmp/library/transform_oids.h
+./Rmon/rows.lo: ../../include/net-snmp/library/keytools.h
+./Rmon/rows.lo: ../../include/net-snmp/library/scapi.h
+./Rmon/rows.lo: ../../include/net-snmp/library/lcd_time.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmp_secmod.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./Rmon/rows.lo: ../../include/net-snmp/library/snmpusm.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/mib_module_config.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/agent_module_config.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/snmp_agent.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/snmp_vars.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/agent_handler.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/var_struct.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/agent_registry.h
+./Rmon/rows.lo: ../../include/net-snmp/library/fd_event_manager.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/ds_agent.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/agent_read_config.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/agent_trap.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/all_helpers.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/instance.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/baby_steps.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/scalar.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/scalar_group.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/watcher.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/multiplexer.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/null.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/debug_handler.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/cache_handler.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/old_api.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/read_only.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/row_merge.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/serialize.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/mode_end_call.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/table.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/table_data.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/table_dataset.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/table_tdata.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/table_iterator.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/table_container.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/table_array.h
+./Rmon/rows.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h struct.h
+./Rmon/rows.lo: ./Rmon/agutil_api.h ./Rmon/rows.h ./Rmon/row_api.h
+./Rmon/statistics.lo: ../../include/net-snmp/net-snmp-config.h
+./Rmon/statistics.lo: ../../include/net-snmp/system/linux.h
+./Rmon/statistics.lo: ../../include/net-snmp/system/sysv.h
+./Rmon/statistics.lo: ../../include/net-snmp/system/generic.h
+./Rmon/statistics.lo: ../../include/net-snmp/machine/generic.h
+./Rmon/statistics.lo: ../../include/net-snmp/net-snmp-includes.h
+./Rmon/statistics.lo: ../../include/net-snmp/definitions.h
+./Rmon/statistics.lo: ../../include/net-snmp/types.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp_api.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/asn1.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp_impl.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp-tc.h
+./Rmon/statistics.lo: ../../include/net-snmp/utilities.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp_client.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/system.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/tools.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/int64.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/mt_support.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp_alarm.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/callback.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/data_list.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/oid_stash.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/check_varbind.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/container.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/factory.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp_logging.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/container_binary_array.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/container_list_ssll.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/container_iterator.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/container.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp_assert.h
+./Rmon/statistics.lo: ../../include/net-snmp/version.h
+./Rmon/statistics.lo: ../../include/net-snmp/session_api.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp_transport.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp_service.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/ucd_compat.h
+./Rmon/statistics.lo: ../../include/net-snmp/pdu_api.h
+./Rmon/statistics.lo: ../../include/net-snmp/mib_api.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/mib.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/parse.h
+./Rmon/statistics.lo: ../../include/net-snmp/varbind_api.h
+./Rmon/statistics.lo: ../../include/net-snmp/config_api.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/read_config.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/default_store.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp_enum.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/vacm.h
+./Rmon/statistics.lo: ../../include/net-snmp/output_api.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp_debug.h
+./Rmon/statistics.lo: ../../include/net-snmp/snmpv3_api.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmpv3.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/transform_oids.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/keytools.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/scapi.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/lcd_time.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmp_secmod.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/snmpusm.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/mib_module_config.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/agent_module_config.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/snmp_agent.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/snmp_vars.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/agent_handler.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/var_struct.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/agent_registry.h
+./Rmon/statistics.lo: ../../include/net-snmp/library/fd_event_manager.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/ds_agent.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/agent_read_config.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/agent_trap.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/all_helpers.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/instance.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/baby_steps.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/scalar.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/scalar_group.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/watcher.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/multiplexer.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/null.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/debug_handler.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/cache_handler.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/old_api.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/read_only.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/row_merge.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/serialize.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/mode_end_call.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/table.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/table_data.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/table_dataset.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/table_tdata.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/table_iterator.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/table_container.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/table_array.h
+./Rmon/statistics.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h
+./Rmon/statistics.lo: struct.h ./Rmon/statistics.h ./Rmon/agutil_api.h
+./Rmon/statistics.lo: ./Rmon/row_api.h
+./agent/extend.lo: ../../include/net-snmp/net-snmp-config.h
+./agent/extend.lo: ../../include/net-snmp/system/linux.h
+./agent/extend.lo: ../../include/net-snmp/system/sysv.h
+./agent/extend.lo: ../../include/net-snmp/system/generic.h
+./agent/extend.lo: ../../include/net-snmp/machine/generic.h
+./agent/extend.lo: ../../include/net-snmp/net-snmp-includes.h
+./agent/extend.lo: ../../include/net-snmp/definitions.h
+./agent/extend.lo: ../../include/net-snmp/types.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp_api.h
+./agent/extend.lo: ../../include/net-snmp/library/asn1.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp_impl.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp-tc.h
+./agent/extend.lo: ../../include/net-snmp/utilities.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp_client.h
+./agent/extend.lo: ../../include/net-snmp/library/system.h
+./agent/extend.lo: ../../include/net-snmp/library/tools.h
+./agent/extend.lo: ../../include/net-snmp/library/int64.h
+./agent/extend.lo: ../../include/net-snmp/library/mt_support.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp_alarm.h
+./agent/extend.lo: ../../include/net-snmp/library/callback.h
+./agent/extend.lo: ../../include/net-snmp/library/data_list.h
+./agent/extend.lo: ../../include/net-snmp/library/oid_stash.h
+./agent/extend.lo: ../../include/net-snmp/library/check_varbind.h
+./agent/extend.lo: ../../include/net-snmp/library/container.h
+./agent/extend.lo: ../../include/net-snmp/library/factory.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp_logging.h
+./agent/extend.lo: ../../include/net-snmp/library/container_binary_array.h
+./agent/extend.lo: ../../include/net-snmp/library/container_list_ssll.h
+./agent/extend.lo: ../../include/net-snmp/library/container_iterator.h
+./agent/extend.lo: ../../include/net-snmp/library/container.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp_assert.h
+./agent/extend.lo: ../../include/net-snmp/version.h
+./agent/extend.lo: ../../include/net-snmp/session_api.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp_transport.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp_service.h
+./agent/extend.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./agent/extend.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./agent/extend.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./agent/extend.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./agent/extend.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agent/extend.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agent/extend.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./agent/extend.lo: ../../include/net-snmp/library/ucd_compat.h
+./agent/extend.lo: ../../include/net-snmp/pdu_api.h
+./agent/extend.lo: ../../include/net-snmp/mib_api.h
+./agent/extend.lo: ../../include/net-snmp/library/mib.h
+./agent/extend.lo: ../../include/net-snmp/library/parse.h
+./agent/extend.lo: ../../include/net-snmp/varbind_api.h
+./agent/extend.lo: ../../include/net-snmp/config_api.h
+./agent/extend.lo: ../../include/net-snmp/library/read_config.h
+./agent/extend.lo: ../../include/net-snmp/library/default_store.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp_enum.h
+./agent/extend.lo: ../../include/net-snmp/library/vacm.h
+./agent/extend.lo: ../../include/net-snmp/output_api.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp_debug.h
+./agent/extend.lo: ../../include/net-snmp/snmpv3_api.h
+./agent/extend.lo: ../../include/net-snmp/library/snmpv3.h
+./agent/extend.lo: ../../include/net-snmp/library/transform_oids.h
+./agent/extend.lo: ../../include/net-snmp/library/keytools.h
+./agent/extend.lo: ../../include/net-snmp/library/scapi.h
+./agent/extend.lo: ../../include/net-snmp/library/lcd_time.h
+./agent/extend.lo: ../../include/net-snmp/library/snmp_secmod.h
+./agent/extend.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./agent/extend.lo: ../../include/net-snmp/library/snmpusm.h
+./agent/extend.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./agent/extend.lo: ../../include/net-snmp/agent/mib_module_config.h
+./agent/extend.lo: ../../include/net-snmp/agent/agent_module_config.h
+./agent/extend.lo: ../../include/net-snmp/agent/snmp_agent.h
+./agent/extend.lo: ../../include/net-snmp/agent/snmp_vars.h
+./agent/extend.lo: ../../include/net-snmp/agent/agent_handler.h
+./agent/extend.lo: ../../include/net-snmp/agent/var_struct.h
+./agent/extend.lo: ../../include/net-snmp/agent/agent_registry.h
+./agent/extend.lo: ../../include/net-snmp/library/fd_event_manager.h
+./agent/extend.lo: ../../include/net-snmp/agent/ds_agent.h
+./agent/extend.lo: ../../include/net-snmp/agent/agent_read_config.h
+./agent/extend.lo: ../../include/net-snmp/agent/agent_trap.h
+./agent/extend.lo: ../../include/net-snmp/agent/all_helpers.h
+./agent/extend.lo: ../../include/net-snmp/agent/instance.h
+./agent/extend.lo: ../../include/net-snmp/agent/baby_steps.h
+./agent/extend.lo: ../../include/net-snmp/agent/scalar.h
+./agent/extend.lo: ../../include/net-snmp/agent/scalar_group.h
+./agent/extend.lo: ../../include/net-snmp/agent/watcher.h
+./agent/extend.lo: ../../include/net-snmp/agent/multiplexer.h
+./agent/extend.lo: ../../include/net-snmp/agent/null.h
+./agent/extend.lo: ../../include/net-snmp/agent/debug_handler.h
+./agent/extend.lo: ../../include/net-snmp/agent/cache_handler.h
+./agent/extend.lo: ../../include/net-snmp/agent/old_api.h
+./agent/extend.lo: ../../include/net-snmp/agent/read_only.h
+./agent/extend.lo: ../../include/net-snmp/agent/row_merge.h
+./agent/extend.lo: ../../include/net-snmp/agent/serialize.h
+./agent/extend.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./agent/extend.lo: ../../include/net-snmp/agent/mode_end_call.h
+./agent/extend.lo: ../../include/net-snmp/agent/table.h
+./agent/extend.lo: ../../include/net-snmp/agent/table_data.h
+./agent/extend.lo: ../../include/net-snmp/agent/table_dataset.h
+./agent/extend.lo: ../../include/net-snmp/agent/table_tdata.h
+./agent/extend.lo: ../../include/net-snmp/agent/table_iterator.h
+./agent/extend.lo: ../../include/net-snmp/agent/table_container.h
+./agent/extend.lo: ../../include/net-snmp/agent/table_array.h
+./agent/extend.lo: ../../include/net-snmp/agent/mfd.h
+./agent/extend.lo: ../../include/net-snmp/agent/agent_callbacks.h
+./agent/extend.lo: agent/extend.h utilities/execute.h struct.h util_funcs.h
+./agent/extend.lo: mibdefs.h
+./agent/nsCache.lo: ../../include/net-snmp/net-snmp-config.h
+./agent/nsCache.lo: ../../include/net-snmp/system/linux.h
+./agent/nsCache.lo: ../../include/net-snmp/system/sysv.h
+./agent/nsCache.lo: ../../include/net-snmp/system/generic.h
+./agent/nsCache.lo: ../../include/net-snmp/machine/generic.h
+./agent/nsCache.lo: ../../include/net-snmp/net-snmp-includes.h
+./agent/nsCache.lo: ../../include/net-snmp/definitions.h
+./agent/nsCache.lo: ../../include/net-snmp/types.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp_api.h
+./agent/nsCache.lo: ../../include/net-snmp/library/asn1.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp_impl.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp-tc.h
+./agent/nsCache.lo: ../../include/net-snmp/utilities.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp_client.h
+./agent/nsCache.lo: ../../include/net-snmp/library/system.h
+./agent/nsCache.lo: ../../include/net-snmp/library/tools.h
+./agent/nsCache.lo: ../../include/net-snmp/library/int64.h
+./agent/nsCache.lo: ../../include/net-snmp/library/mt_support.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp_alarm.h
+./agent/nsCache.lo: ../../include/net-snmp/library/callback.h
+./agent/nsCache.lo: ../../include/net-snmp/library/data_list.h
+./agent/nsCache.lo: ../../include/net-snmp/library/oid_stash.h
+./agent/nsCache.lo: ../../include/net-snmp/library/check_varbind.h
+./agent/nsCache.lo: ../../include/net-snmp/library/container.h
+./agent/nsCache.lo: ../../include/net-snmp/library/factory.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp_logging.h
+./agent/nsCache.lo: ../../include/net-snmp/library/container_binary_array.h
+./agent/nsCache.lo: ../../include/net-snmp/library/container_list_ssll.h
+./agent/nsCache.lo: ../../include/net-snmp/library/container_iterator.h
+./agent/nsCache.lo: ../../include/net-snmp/library/container.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp_assert.h
+./agent/nsCache.lo: ../../include/net-snmp/version.h
+./agent/nsCache.lo: ../../include/net-snmp/session_api.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp_transport.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp_service.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./agent/nsCache.lo: ../../include/net-snmp/library/ucd_compat.h
+./agent/nsCache.lo: ../../include/net-snmp/pdu_api.h
+./agent/nsCache.lo: ../../include/net-snmp/mib_api.h
+./agent/nsCache.lo: ../../include/net-snmp/library/mib.h
+./agent/nsCache.lo: ../../include/net-snmp/library/parse.h
+./agent/nsCache.lo: ../../include/net-snmp/varbind_api.h
+./agent/nsCache.lo: ../../include/net-snmp/config_api.h
+./agent/nsCache.lo: ../../include/net-snmp/library/read_config.h
+./agent/nsCache.lo: ../../include/net-snmp/library/default_store.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp_enum.h
+./agent/nsCache.lo: ../../include/net-snmp/library/vacm.h
+./agent/nsCache.lo: ../../include/net-snmp/output_api.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp_debug.h
+./agent/nsCache.lo: ../../include/net-snmp/snmpv3_api.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmpv3.h
+./agent/nsCache.lo: ../../include/net-snmp/library/transform_oids.h
+./agent/nsCache.lo: ../../include/net-snmp/library/keytools.h
+./agent/nsCache.lo: ../../include/net-snmp/library/scapi.h
+./agent/nsCache.lo: ../../include/net-snmp/library/lcd_time.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmp_secmod.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./agent/nsCache.lo: ../../include/net-snmp/library/snmpusm.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/mib_module_config.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/agent_module_config.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/snmp_agent.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/snmp_vars.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/agent_handler.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/var_struct.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/agent_registry.h
+./agent/nsCache.lo: ../../include/net-snmp/library/fd_event_manager.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/ds_agent.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/agent_read_config.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/agent_trap.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/all_helpers.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/instance.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/baby_steps.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/scalar.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/scalar_group.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/watcher.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/multiplexer.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/null.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/debug_handler.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/cache_handler.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/old_api.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/read_only.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/row_merge.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/serialize.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/mode_end_call.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/table.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/table_data.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/table_dataset.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/table_tdata.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/table_iterator.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/table_container.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/table_array.h
+./agent/nsCache.lo: ../../include/net-snmp/agent/mfd.h agent/nsCache.h
+./agent/nsCache.lo: util_funcs.h struct.h
+./agent/nsDebug.lo: ../../include/net-snmp/net-snmp-config.h
+./agent/nsDebug.lo: ../../include/net-snmp/system/linux.h
+./agent/nsDebug.lo: ../../include/net-snmp/system/sysv.h
+./agent/nsDebug.lo: ../../include/net-snmp/system/generic.h
+./agent/nsDebug.lo: ../../include/net-snmp/machine/generic.h
+./agent/nsDebug.lo: ../../include/net-snmp/net-snmp-includes.h
+./agent/nsDebug.lo: ../../include/net-snmp/definitions.h
+./agent/nsDebug.lo: ../../include/net-snmp/types.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp_api.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/asn1.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp_impl.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp-tc.h
+./agent/nsDebug.lo: ../../include/net-snmp/utilities.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp_client.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/system.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/tools.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/int64.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/mt_support.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp_alarm.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/callback.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/data_list.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/oid_stash.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/check_varbind.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/container.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/factory.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp_logging.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/container_binary_array.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/container_list_ssll.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/container_iterator.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/container.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp_assert.h
+./agent/nsDebug.lo: ../../include/net-snmp/version.h
+./agent/nsDebug.lo: ../../include/net-snmp/session_api.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp_transport.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp_service.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/ucd_compat.h
+./agent/nsDebug.lo: ../../include/net-snmp/pdu_api.h
+./agent/nsDebug.lo: ../../include/net-snmp/mib_api.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/mib.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/parse.h
+./agent/nsDebug.lo: ../../include/net-snmp/varbind_api.h
+./agent/nsDebug.lo: ../../include/net-snmp/config_api.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/read_config.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/default_store.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp_enum.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/vacm.h
+./agent/nsDebug.lo: ../../include/net-snmp/output_api.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp_debug.h
+./agent/nsDebug.lo: ../../include/net-snmp/snmpv3_api.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmpv3.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/transform_oids.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/keytools.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/scapi.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/lcd_time.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmp_secmod.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/snmpusm.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/mib_module_config.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/agent_module_config.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/snmp_agent.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/snmp_vars.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/agent_handler.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/var_struct.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/agent_registry.h
+./agent/nsDebug.lo: ../../include/net-snmp/library/fd_event_manager.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/ds_agent.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/agent_read_config.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/agent_trap.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/all_helpers.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/instance.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/baby_steps.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/scalar.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/scalar_group.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/watcher.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/multiplexer.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/null.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/debug_handler.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/cache_handler.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/old_api.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/read_only.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/row_merge.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/serialize.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/mode_end_call.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/table.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/table_data.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/table_dataset.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/table_tdata.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/table_iterator.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/table_container.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/table_array.h
+./agent/nsDebug.lo: ../../include/net-snmp/agent/mfd.h agent/nsDebug.h
+./agent/nsDebug.lo: util_funcs.h struct.h
+./agent/nsLogging.lo: ../../include/net-snmp/net-snmp-config.h
+./agent/nsLogging.lo: ../../include/net-snmp/system/linux.h
+./agent/nsLogging.lo: ../../include/net-snmp/system/sysv.h
+./agent/nsLogging.lo: ../../include/net-snmp/system/generic.h
+./agent/nsLogging.lo: ../../include/net-snmp/machine/generic.h
+./agent/nsLogging.lo: ../../include/net-snmp/net-snmp-includes.h
+./agent/nsLogging.lo: ../../include/net-snmp/definitions.h
+./agent/nsLogging.lo: ../../include/net-snmp/types.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp_api.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/asn1.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp_impl.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp-tc.h
+./agent/nsLogging.lo: ../../include/net-snmp/utilities.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp_client.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/system.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/tools.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/int64.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/mt_support.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp_alarm.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/callback.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/data_list.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/oid_stash.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/check_varbind.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/container.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/factory.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp_logging.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/container_binary_array.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/container_list_ssll.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/container_iterator.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/container.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp_assert.h
+./agent/nsLogging.lo: ../../include/net-snmp/version.h
+./agent/nsLogging.lo: ../../include/net-snmp/session_api.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp_transport.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp_service.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/ucd_compat.h
+./agent/nsLogging.lo: ../../include/net-snmp/pdu_api.h
+./agent/nsLogging.lo: ../../include/net-snmp/mib_api.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/mib.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/parse.h
+./agent/nsLogging.lo: ../../include/net-snmp/varbind_api.h
+./agent/nsLogging.lo: ../../include/net-snmp/config_api.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/read_config.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/default_store.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp_enum.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/vacm.h
+./agent/nsLogging.lo: ../../include/net-snmp/output_api.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp_debug.h
+./agent/nsLogging.lo: ../../include/net-snmp/snmpv3_api.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmpv3.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/transform_oids.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/keytools.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/scapi.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/lcd_time.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmp_secmod.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/snmpusm.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/mib_module_config.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/agent_module_config.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/snmp_agent.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/snmp_vars.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/agent_handler.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/var_struct.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/agent_registry.h
+./agent/nsLogging.lo: ../../include/net-snmp/library/fd_event_manager.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/ds_agent.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/agent_read_config.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/agent_trap.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/all_helpers.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/instance.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/baby_steps.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/scalar.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/scalar_group.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/watcher.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/multiplexer.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/null.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/debug_handler.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/cache_handler.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/old_api.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/read_only.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/row_merge.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/serialize.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/mode_end_call.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/table.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/table_data.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/table_dataset.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/table_tdata.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/table_iterator.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/table_container.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/table_array.h
+./agent/nsLogging.lo: ../../include/net-snmp/agent/mfd.h agent/nsLogging.h
+./agent/nsLogging.lo: util_funcs.h struct.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/net-snmp-config.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/system/linux.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/system/sysv.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/system/generic.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/machine/generic.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/definitions.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/types.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp_api.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/asn1.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/utilities.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp_client.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/system.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/tools.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/int64.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/mt_support.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/callback.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/data_list.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/oid_stash.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/check_varbind.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/container.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/factory.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/container_iterator.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/container.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/version.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/session_api.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp_service.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/pdu_api.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/mib_api.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/mib.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/parse.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/varbind_api.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/config_api.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/read_config.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/default_store.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/vacm.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/output_api.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/snmpv3_api.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmpv3.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/transform_oids.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/keytools.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/scapi.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/lcd_time.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/snmpusm.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/var_struct.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/instance.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/scalar.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/watcher.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/null.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/old_api.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/read_only.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/row_merge.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/serialize.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/table.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/table_data.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/table_container.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/table_array.h
+./agent/nsModuleTable.lo: ../../include/net-snmp/agent/mfd.h
+./agent/nsModuleTable.lo: ./agent/nsModuleTable.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/net-snmp-config.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/system/linux.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/system/sysv.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/system/generic.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/machine/generic.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/definitions.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/types.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp_api.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/asn1.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/utilities.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp_client.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/system.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/tools.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/int64.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/mt_support.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/callback.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/data_list.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/oid_stash.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/check_varbind.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/container.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/factory.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/container_iterator.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/container.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/version.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/session_api.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp_service.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/pdu_api.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/mib_api.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/mib.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/parse.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/varbind_api.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/config_api.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/read_config.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/default_store.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/vacm.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/output_api.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/snmpv3_api.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmpv3.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/transform_oids.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/keytools.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/scapi.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/lcd_time.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/snmpusm.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/var_struct.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/instance.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/scalar.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/watcher.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/null.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/old_api.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/read_only.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/row_merge.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/serialize.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/table.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/table_data.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/table_container.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/table_array.h
+./agent/nsTransactionTable.lo: ../../include/net-snmp/agent/mfd.h
+./agent/nsTransactionTable.lo: ./agent/nsTransactionTable.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/net-snmp-config.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/system/linux.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/system/sysv.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/system/generic.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/machine/generic.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/definitions.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/types.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp_api.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/asn1.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/utilities.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp_client.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/system.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/tools.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/int64.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/mt_support.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/callback.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/data_list.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/oid_stash.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/check_varbind.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/container.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/factory.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/container_iterator.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/container.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/version.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/session_api.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp_service.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/pdu_api.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/mib_api.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/mib.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/parse.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/varbind_api.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/config_api.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/read_config.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/default_store.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/vacm.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/output_api.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/snmpv3_api.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmpv3.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/transform_oids.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/keytools.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/scapi.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/lcd_time.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/snmpusm.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/var_struct.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/instance.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/scalar.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/watcher.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/null.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/old_api.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/read_only.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/row_merge.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/serialize.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/table.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/table_data.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/table_container.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/table_array.h
+./agent/nsVacmAccessTable.lo: ../../include/net-snmp/agent/mfd.h
+./agent/nsVacmAccessTable.lo: ./agent/nsVacmAccessTable.h
+./agentx/agentx_config.lo: ../../include/net-snmp/net-snmp-config.h
+./agentx/agentx_config.lo: ../../include/net-snmp/system/linux.h
+./agentx/agentx_config.lo: ../../include/net-snmp/system/sysv.h
+./agentx/agentx_config.lo: ../../include/net-snmp/system/generic.h
+./agentx/agentx_config.lo: ../../include/net-snmp/machine/generic.h
+./agentx/agentx_config.lo: ../../include/net-snmp/net-snmp-includes.h
+./agentx/agentx_config.lo: ../../include/net-snmp/definitions.h
+./agentx/agentx_config.lo: ../../include/net-snmp/types.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp_api.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/asn1.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp_impl.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp-tc.h
+./agentx/agentx_config.lo: ../../include/net-snmp/utilities.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp_client.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/system.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/tools.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/int64.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/mt_support.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp_alarm.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/callback.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/data_list.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/oid_stash.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/check_varbind.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/container.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/factory.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp_logging.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/container_binary_array.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/container_list_ssll.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/container_iterator.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/container.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp_assert.h
+./agentx/agentx_config.lo: ../../include/net-snmp/version.h
+./agentx/agentx_config.lo: ../../include/net-snmp/session_api.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp_transport.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp_service.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/ucd_compat.h
+./agentx/agentx_config.lo: ../../include/net-snmp/pdu_api.h
+./agentx/agentx_config.lo: ../../include/net-snmp/mib_api.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/mib.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/parse.h
+./agentx/agentx_config.lo: ../../include/net-snmp/varbind_api.h
+./agentx/agentx_config.lo: ../../include/net-snmp/config_api.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/read_config.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/default_store.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp_enum.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/vacm.h
+./agentx/agentx_config.lo: ../../include/net-snmp/output_api.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp_debug.h
+./agentx/agentx_config.lo: ../../include/net-snmp/snmpv3_api.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmpv3.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/transform_oids.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/keytools.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/scapi.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/lcd_time.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmp_secmod.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/snmpusm.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/mib_module_config.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/agent_module_config.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/snmp_agent.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/snmp_vars.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/agent_handler.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/var_struct.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/agent_registry.h
+./agentx/agentx_config.lo: ../../include/net-snmp/library/fd_event_manager.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/ds_agent.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/agent_read_config.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/agent_trap.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/all_helpers.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/instance.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/baby_steps.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/scalar.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/scalar_group.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/watcher.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/multiplexer.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/null.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/debug_handler.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/cache_handler.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/old_api.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/read_only.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/row_merge.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/serialize.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/mode_end_call.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/table.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/table_data.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/table_dataset.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/table_tdata.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/table_iterator.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/table_container.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/table_array.h
+./agentx/agentx_config.lo: ../../include/net-snmp/agent/mfd.h
+./agentx/agentx_config.lo: ../../agent/snmpd.h agentx/agentx_config.h
+./agentx/agentx_config.lo: agentx/protocol.h
+./agentx/client.lo: ../../include/net-snmp/net-snmp-config.h
+./agentx/client.lo: ../../include/net-snmp/system/linux.h
+./agentx/client.lo: ../../include/net-snmp/system/sysv.h
+./agentx/client.lo: ../../include/net-snmp/system/generic.h
+./agentx/client.lo: ../../include/net-snmp/machine/generic.h
+./agentx/client.lo: ../../include/net-snmp/net-snmp-includes.h
+./agentx/client.lo: ../../include/net-snmp/definitions.h
+./agentx/client.lo: ../../include/net-snmp/types.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp_api.h
+./agentx/client.lo: ../../include/net-snmp/library/asn1.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp_impl.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp-tc.h
+./agentx/client.lo: ../../include/net-snmp/utilities.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp_client.h
+./agentx/client.lo: ../../include/net-snmp/library/system.h
+./agentx/client.lo: ../../include/net-snmp/library/tools.h
+./agentx/client.lo: ../../include/net-snmp/library/int64.h
+./agentx/client.lo: ../../include/net-snmp/library/mt_support.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp_alarm.h
+./agentx/client.lo: ../../include/net-snmp/library/callback.h
+./agentx/client.lo: ../../include/net-snmp/library/data_list.h
+./agentx/client.lo: ../../include/net-snmp/library/oid_stash.h
+./agentx/client.lo: ../../include/net-snmp/library/check_varbind.h
+./agentx/client.lo: ../../include/net-snmp/library/container.h
+./agentx/client.lo: ../../include/net-snmp/library/factory.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp_logging.h
+./agentx/client.lo: ../../include/net-snmp/library/container_binary_array.h
+./agentx/client.lo: ../../include/net-snmp/library/container_list_ssll.h
+./agentx/client.lo: ../../include/net-snmp/library/container_iterator.h
+./agentx/client.lo: ../../include/net-snmp/library/container.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp_assert.h
+./agentx/client.lo: ../../include/net-snmp/version.h
+./agentx/client.lo: ../../include/net-snmp/session_api.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp_transport.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp_service.h
+./agentx/client.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./agentx/client.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./agentx/client.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./agentx/client.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./agentx/client.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agentx/client.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agentx/client.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./agentx/client.lo: ../../include/net-snmp/library/ucd_compat.h
+./agentx/client.lo: ../../include/net-snmp/pdu_api.h
+./agentx/client.lo: ../../include/net-snmp/mib_api.h
+./agentx/client.lo: ../../include/net-snmp/library/mib.h
+./agentx/client.lo: ../../include/net-snmp/library/parse.h
+./agentx/client.lo: ../../include/net-snmp/varbind_api.h
+./agentx/client.lo: ../../include/net-snmp/config_api.h
+./agentx/client.lo: ../../include/net-snmp/library/read_config.h
+./agentx/client.lo: ../../include/net-snmp/library/default_store.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp_enum.h
+./agentx/client.lo: ../../include/net-snmp/library/vacm.h
+./agentx/client.lo: ../../include/net-snmp/output_api.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp_debug.h
+./agentx/client.lo: ../../include/net-snmp/snmpv3_api.h
+./agentx/client.lo: ../../include/net-snmp/library/snmpv3.h
+./agentx/client.lo: ../../include/net-snmp/library/transform_oids.h
+./agentx/client.lo: ../../include/net-snmp/library/keytools.h
+./agentx/client.lo: ../../include/net-snmp/library/scapi.h
+./agentx/client.lo: ../../include/net-snmp/library/lcd_time.h
+./agentx/client.lo: ../../include/net-snmp/library/snmp_secmod.h
+./agentx/client.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./agentx/client.lo: ../../include/net-snmp/library/snmpusm.h
+./agentx/client.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./agentx/client.lo: ../../include/net-snmp/agent/mib_module_config.h
+./agentx/client.lo: ../../include/net-snmp/agent/agent_module_config.h
+./agentx/client.lo: ../../include/net-snmp/agent/snmp_agent.h
+./agentx/client.lo: ../../include/net-snmp/agent/snmp_vars.h
+./agentx/client.lo: ../../include/net-snmp/agent/agent_handler.h
+./agentx/client.lo: ../../include/net-snmp/agent/var_struct.h
+./agentx/client.lo: ../../include/net-snmp/agent/agent_registry.h
+./agentx/client.lo: ../../include/net-snmp/library/fd_event_manager.h
+./agentx/client.lo: ../../include/net-snmp/agent/ds_agent.h
+./agentx/client.lo: ../../include/net-snmp/agent/agent_read_config.h
+./agentx/client.lo: ../../include/net-snmp/agent/agent_trap.h
+./agentx/client.lo: ../../include/net-snmp/agent/all_helpers.h
+./agentx/client.lo: ../../include/net-snmp/agent/instance.h
+./agentx/client.lo: ../../include/net-snmp/agent/baby_steps.h
+./agentx/client.lo: ../../include/net-snmp/agent/scalar.h
+./agentx/client.lo: ../../include/net-snmp/agent/scalar_group.h
+./agentx/client.lo: ../../include/net-snmp/agent/watcher.h
+./agentx/client.lo: ../../include/net-snmp/agent/multiplexer.h
+./agentx/client.lo: ../../include/net-snmp/agent/null.h
+./agentx/client.lo: ../../include/net-snmp/agent/debug_handler.h
+./agentx/client.lo: ../../include/net-snmp/agent/cache_handler.h
+./agentx/client.lo: ../../include/net-snmp/agent/old_api.h
+./agentx/client.lo: ../../include/net-snmp/agent/read_only.h
+./agentx/client.lo: ../../include/net-snmp/agent/row_merge.h
+./agentx/client.lo: ../../include/net-snmp/agent/serialize.h
+./agentx/client.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./agentx/client.lo: ../../include/net-snmp/agent/mode_end_call.h
+./agentx/client.lo: ../../include/net-snmp/agent/table.h
+./agentx/client.lo: ../../include/net-snmp/agent/table_data.h
+./agentx/client.lo: ../../include/net-snmp/agent/table_dataset.h
+./agentx/client.lo: ../../include/net-snmp/agent/table_tdata.h
+./agentx/client.lo: ../../include/net-snmp/agent/table_iterator.h
+./agentx/client.lo: ../../include/net-snmp/agent/table_container.h
+./agentx/client.lo: ../../include/net-snmp/agent/table_array.h
+./agentx/client.lo: ../../include/net-snmp/agent/mfd.h
+./agentx/client.lo: ../../include/net-snmp/agent/agent_index.h
+./agentx/client.lo: agentx/protocol.h agentx/client.h agentx/subagent.h
+./agentx/master.lo: ../../include/net-snmp/net-snmp-config.h
+./agentx/master.lo: ../../include/net-snmp/system/linux.h
+./agentx/master.lo: ../../include/net-snmp/system/sysv.h
+./agentx/master.lo: ../../include/net-snmp/system/generic.h
+./agentx/master.lo: ../../include/net-snmp/machine/generic.h
+./agentx/master.lo: ../../include/net-snmp/net-snmp-includes.h
+./agentx/master.lo: ../../include/net-snmp/definitions.h
+./agentx/master.lo: ../../include/net-snmp/types.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp_api.h
+./agentx/master.lo: ../../include/net-snmp/library/asn1.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp_impl.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp-tc.h
+./agentx/master.lo: ../../include/net-snmp/utilities.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp_client.h
+./agentx/master.lo: ../../include/net-snmp/library/system.h
+./agentx/master.lo: ../../include/net-snmp/library/tools.h
+./agentx/master.lo: ../../include/net-snmp/library/int64.h
+./agentx/master.lo: ../../include/net-snmp/library/mt_support.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp_alarm.h
+./agentx/master.lo: ../../include/net-snmp/library/callback.h
+./agentx/master.lo: ../../include/net-snmp/library/data_list.h
+./agentx/master.lo: ../../include/net-snmp/library/oid_stash.h
+./agentx/master.lo: ../../include/net-snmp/library/check_varbind.h
+./agentx/master.lo: ../../include/net-snmp/library/container.h
+./agentx/master.lo: ../../include/net-snmp/library/factory.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp_logging.h
+./agentx/master.lo: ../../include/net-snmp/library/container_binary_array.h
+./agentx/master.lo: ../../include/net-snmp/library/container_list_ssll.h
+./agentx/master.lo: ../../include/net-snmp/library/container_iterator.h
+./agentx/master.lo: ../../include/net-snmp/library/container.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp_assert.h
+./agentx/master.lo: ../../include/net-snmp/version.h
+./agentx/master.lo: ../../include/net-snmp/session_api.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp_transport.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp_service.h
+./agentx/master.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./agentx/master.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./agentx/master.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./agentx/master.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./agentx/master.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agentx/master.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agentx/master.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./agentx/master.lo: ../../include/net-snmp/library/ucd_compat.h
+./agentx/master.lo: ../../include/net-snmp/pdu_api.h
+./agentx/master.lo: ../../include/net-snmp/mib_api.h
+./agentx/master.lo: ../../include/net-snmp/library/mib.h
+./agentx/master.lo: ../../include/net-snmp/library/parse.h
+./agentx/master.lo: ../../include/net-snmp/varbind_api.h
+./agentx/master.lo: ../../include/net-snmp/config_api.h
+./agentx/master.lo: ../../include/net-snmp/library/read_config.h
+./agentx/master.lo: ../../include/net-snmp/library/default_store.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp_enum.h
+./agentx/master.lo: ../../include/net-snmp/library/vacm.h
+./agentx/master.lo: ../../include/net-snmp/output_api.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp_debug.h
+./agentx/master.lo: ../../include/net-snmp/snmpv3_api.h
+./agentx/master.lo: ../../include/net-snmp/library/snmpv3.h
+./agentx/master.lo: ../../include/net-snmp/library/transform_oids.h
+./agentx/master.lo: ../../include/net-snmp/library/keytools.h
+./agentx/master.lo: ../../include/net-snmp/library/scapi.h
+./agentx/master.lo: ../../include/net-snmp/library/lcd_time.h
+./agentx/master.lo: ../../include/net-snmp/library/snmp_secmod.h
+./agentx/master.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./agentx/master.lo: ../../include/net-snmp/library/snmpusm.h
+./agentx/master.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./agentx/master.lo: ../../include/net-snmp/agent/mib_module_config.h
+./agentx/master.lo: ../../include/net-snmp/agent/agent_module_config.h
+./agentx/master.lo: ../../include/net-snmp/agent/snmp_agent.h
+./agentx/master.lo: ../../include/net-snmp/agent/snmp_vars.h
+./agentx/master.lo: ../../include/net-snmp/agent/agent_handler.h
+./agentx/master.lo: ../../include/net-snmp/agent/var_struct.h
+./agentx/master.lo: ../../include/net-snmp/agent/agent_registry.h
+./agentx/master.lo: ../../include/net-snmp/library/fd_event_manager.h
+./agentx/master.lo: ../../include/net-snmp/agent/ds_agent.h
+./agentx/master.lo: ../../include/net-snmp/agent/agent_read_config.h
+./agentx/master.lo: ../../include/net-snmp/agent/agent_trap.h
+./agentx/master.lo: ../../include/net-snmp/agent/all_helpers.h
+./agentx/master.lo: ../../include/net-snmp/agent/instance.h
+./agentx/master.lo: ../../include/net-snmp/agent/baby_steps.h
+./agentx/master.lo: ../../include/net-snmp/agent/scalar.h
+./agentx/master.lo: ../../include/net-snmp/agent/scalar_group.h
+./agentx/master.lo: ../../include/net-snmp/agent/watcher.h
+./agentx/master.lo: ../../include/net-snmp/agent/multiplexer.h
+./agentx/master.lo: ../../include/net-snmp/agent/null.h
+./agentx/master.lo: ../../include/net-snmp/agent/debug_handler.h
+./agentx/master.lo: ../../include/net-snmp/agent/cache_handler.h
+./agentx/master.lo: ../../include/net-snmp/agent/old_api.h
+./agentx/master.lo: ../../include/net-snmp/agent/read_only.h
+./agentx/master.lo: ../../include/net-snmp/agent/row_merge.h
+./agentx/master.lo: ../../include/net-snmp/agent/serialize.h
+./agentx/master.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./agentx/master.lo: ../../include/net-snmp/agent/mode_end_call.h
+./agentx/master.lo: ../../include/net-snmp/agent/table.h
+./agentx/master.lo: ../../include/net-snmp/agent/table_data.h
+./agentx/master.lo: ../../include/net-snmp/agent/table_dataset.h
+./agentx/master.lo: ../../include/net-snmp/agent/table_tdata.h
+./agentx/master.lo: ../../include/net-snmp/agent/table_iterator.h
+./agentx/master.lo: ../../include/net-snmp/agent/table_container.h
+./agentx/master.lo: ../../include/net-snmp/agent/table_array.h
+./agentx/master.lo: ../../include/net-snmp/agent/mfd.h ../../agent/snmpd.h
+./agentx/master.lo: agentx/protocol.h agentx/master_admin.h
+./agentx/master_admin.lo: ../../include/net-snmp/net-snmp-config.h
+./agentx/master_admin.lo: ../../include/net-snmp/system/linux.h
+./agentx/master_admin.lo: ../../include/net-snmp/system/sysv.h
+./agentx/master_admin.lo: ../../include/net-snmp/system/generic.h
+./agentx/master_admin.lo: ../../include/net-snmp/machine/generic.h
+./agentx/master_admin.lo: ../../include/net-snmp/net-snmp-includes.h
+./agentx/master_admin.lo: ../../include/net-snmp/definitions.h
+./agentx/master_admin.lo: ../../include/net-snmp/types.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp_api.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/asn1.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp_impl.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp-tc.h
+./agentx/master_admin.lo: ../../include/net-snmp/utilities.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp_client.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/system.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/tools.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/int64.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/mt_support.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp_alarm.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/callback.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/data_list.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/oid_stash.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/check_varbind.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/container.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/factory.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp_logging.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/container_binary_array.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/container_list_ssll.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/container_iterator.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/container.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp_assert.h
+./agentx/master_admin.lo: ../../include/net-snmp/version.h
+./agentx/master_admin.lo: ../../include/net-snmp/session_api.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp_transport.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp_service.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/ucd_compat.h
+./agentx/master_admin.lo: ../../include/net-snmp/pdu_api.h
+./agentx/master_admin.lo: ../../include/net-snmp/mib_api.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/mib.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/parse.h
+./agentx/master_admin.lo: ../../include/net-snmp/varbind_api.h
+./agentx/master_admin.lo: ../../include/net-snmp/config_api.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/read_config.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/default_store.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp_enum.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/vacm.h
+./agentx/master_admin.lo: ../../include/net-snmp/output_api.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp_debug.h
+./agentx/master_admin.lo: ../../include/net-snmp/snmpv3_api.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmpv3.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/transform_oids.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/keytools.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/scapi.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/lcd_time.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmp_secmod.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/snmpusm.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/mib_module_config.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/agent_module_config.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/snmp_agent.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/snmp_vars.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/agent_handler.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/var_struct.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/agent_registry.h
+./agentx/master_admin.lo: ../../include/net-snmp/library/fd_event_manager.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/ds_agent.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/agent_read_config.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/agent_trap.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/all_helpers.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/instance.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/baby_steps.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/scalar.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/scalar_group.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/watcher.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/multiplexer.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/null.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/debug_handler.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/cache_handler.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/old_api.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/read_only.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/row_merge.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/serialize.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/mode_end_call.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/table.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/table_data.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/table_dataset.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/table_tdata.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/table_iterator.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/table_container.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/table_array.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/mfd.h
+./agentx/master_admin.lo: agentx/protocol.h agentx/client.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/agent_index.h
+./agentx/master_admin.lo: ../../include/net-snmp/agent/agent_callbacks.h
+./agentx/master_admin.lo: mibII/sysORTable.h ./agentx/master.h
+./agentx/protocol.lo: ../../include/net-snmp/net-snmp-config.h
+./agentx/protocol.lo: ../../include/net-snmp/system/linux.h
+./agentx/protocol.lo: ../../include/net-snmp/system/sysv.h
+./agentx/protocol.lo: ../../include/net-snmp/system/generic.h
+./agentx/protocol.lo: ../../include/net-snmp/machine/generic.h
+./agentx/protocol.lo: ../../include/net-snmp/net-snmp-includes.h
+./agentx/protocol.lo: ../../include/net-snmp/definitions.h
+./agentx/protocol.lo: ../../include/net-snmp/types.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp_api.h
+./agentx/protocol.lo: ../../include/net-snmp/library/asn1.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp_impl.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp-tc.h
+./agentx/protocol.lo: ../../include/net-snmp/utilities.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp_client.h
+./agentx/protocol.lo: ../../include/net-snmp/library/system.h
+./agentx/protocol.lo: ../../include/net-snmp/library/tools.h
+./agentx/protocol.lo: ../../include/net-snmp/library/int64.h
+./agentx/protocol.lo: ../../include/net-snmp/library/mt_support.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp_alarm.h
+./agentx/protocol.lo: ../../include/net-snmp/library/callback.h
+./agentx/protocol.lo: ../../include/net-snmp/library/data_list.h
+./agentx/protocol.lo: ../../include/net-snmp/library/oid_stash.h
+./agentx/protocol.lo: ../../include/net-snmp/library/check_varbind.h
+./agentx/protocol.lo: ../../include/net-snmp/library/container.h
+./agentx/protocol.lo: ../../include/net-snmp/library/factory.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp_logging.h
+./agentx/protocol.lo: ../../include/net-snmp/library/container_binary_array.h
+./agentx/protocol.lo: ../../include/net-snmp/library/container_list_ssll.h
+./agentx/protocol.lo: ../../include/net-snmp/library/container_iterator.h
+./agentx/protocol.lo: ../../include/net-snmp/library/container.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp_assert.h
+./agentx/protocol.lo: ../../include/net-snmp/version.h
+./agentx/protocol.lo: ../../include/net-snmp/session_api.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp_transport.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp_service.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./agentx/protocol.lo: ../../include/net-snmp/library/ucd_compat.h
+./agentx/protocol.lo: ../../include/net-snmp/pdu_api.h
+./agentx/protocol.lo: ../../include/net-snmp/mib_api.h
+./agentx/protocol.lo: ../../include/net-snmp/library/mib.h
+./agentx/protocol.lo: ../../include/net-snmp/library/parse.h
+./agentx/protocol.lo: ../../include/net-snmp/varbind_api.h
+./agentx/protocol.lo: ../../include/net-snmp/config_api.h
+./agentx/protocol.lo: ../../include/net-snmp/library/read_config.h
+./agentx/protocol.lo: ../../include/net-snmp/library/default_store.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp_enum.h
+./agentx/protocol.lo: ../../include/net-snmp/library/vacm.h
+./agentx/protocol.lo: ../../include/net-snmp/output_api.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp_debug.h
+./agentx/protocol.lo: ../../include/net-snmp/snmpv3_api.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmpv3.h
+./agentx/protocol.lo: ../../include/net-snmp/library/transform_oids.h
+./agentx/protocol.lo: ../../include/net-snmp/library/keytools.h
+./agentx/protocol.lo: ../../include/net-snmp/library/scapi.h
+./agentx/protocol.lo: ../../include/net-snmp/library/lcd_time.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmp_secmod.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./agentx/protocol.lo: ../../include/net-snmp/library/snmpusm.h
+./agentx/protocol.lo: agentx/protocol.h
+./agentx/subagent.lo: ../../include/net-snmp/net-snmp-config.h
+./agentx/subagent.lo: ../../include/net-snmp/system/linux.h
+./agentx/subagent.lo: ../../include/net-snmp/system/sysv.h
+./agentx/subagent.lo: ../../include/net-snmp/system/generic.h
+./agentx/subagent.lo: ../../include/net-snmp/machine/generic.h
+./agentx/subagent.lo: ../../include/net-snmp/net-snmp-includes.h
+./agentx/subagent.lo: ../../include/net-snmp/definitions.h
+./agentx/subagent.lo: ../../include/net-snmp/types.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp_api.h
+./agentx/subagent.lo: ../../include/net-snmp/library/asn1.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp_impl.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp-tc.h
+./agentx/subagent.lo: ../../include/net-snmp/utilities.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp_client.h
+./agentx/subagent.lo: ../../include/net-snmp/library/system.h
+./agentx/subagent.lo: ../../include/net-snmp/library/tools.h
+./agentx/subagent.lo: ../../include/net-snmp/library/int64.h
+./agentx/subagent.lo: ../../include/net-snmp/library/mt_support.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp_alarm.h
+./agentx/subagent.lo: ../../include/net-snmp/library/callback.h
+./agentx/subagent.lo: ../../include/net-snmp/library/data_list.h
+./agentx/subagent.lo: ../../include/net-snmp/library/oid_stash.h
+./agentx/subagent.lo: ../../include/net-snmp/library/check_varbind.h
+./agentx/subagent.lo: ../../include/net-snmp/library/container.h
+./agentx/subagent.lo: ../../include/net-snmp/library/factory.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp_logging.h
+./agentx/subagent.lo: ../../include/net-snmp/library/container_binary_array.h
+./agentx/subagent.lo: ../../include/net-snmp/library/container_list_ssll.h
+./agentx/subagent.lo: ../../include/net-snmp/library/container_iterator.h
+./agentx/subagent.lo: ../../include/net-snmp/library/container.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp_assert.h
+./agentx/subagent.lo: ../../include/net-snmp/version.h
+./agentx/subagent.lo: ../../include/net-snmp/session_api.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp_transport.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp_service.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./agentx/subagent.lo: ../../include/net-snmp/library/ucd_compat.h
+./agentx/subagent.lo: ../../include/net-snmp/pdu_api.h
+./agentx/subagent.lo: ../../include/net-snmp/mib_api.h
+./agentx/subagent.lo: ../../include/net-snmp/library/mib.h
+./agentx/subagent.lo: ../../include/net-snmp/library/parse.h
+./agentx/subagent.lo: ../../include/net-snmp/varbind_api.h
+./agentx/subagent.lo: ../../include/net-snmp/config_api.h
+./agentx/subagent.lo: ../../include/net-snmp/library/read_config.h
+./agentx/subagent.lo: ../../include/net-snmp/library/default_store.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp_enum.h
+./agentx/subagent.lo: ../../include/net-snmp/library/vacm.h
+./agentx/subagent.lo: ../../include/net-snmp/output_api.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp_debug.h
+./agentx/subagent.lo: ../../include/net-snmp/snmpv3_api.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmpv3.h
+./agentx/subagent.lo: ../../include/net-snmp/library/transform_oids.h
+./agentx/subagent.lo: ../../include/net-snmp/library/keytools.h
+./agentx/subagent.lo: ../../include/net-snmp/library/scapi.h
+./agentx/subagent.lo: ../../include/net-snmp/library/lcd_time.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmp_secmod.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./agentx/subagent.lo: ../../include/net-snmp/library/snmpusm.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/mib_module_config.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/agent_module_config.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/snmp_agent.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/snmp_vars.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/agent_handler.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/var_struct.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/agent_registry.h
+./agentx/subagent.lo: ../../include/net-snmp/library/fd_event_manager.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/ds_agent.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/agent_read_config.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/agent_trap.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/all_helpers.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/instance.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/baby_steps.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/scalar.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/scalar_group.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/watcher.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/multiplexer.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/null.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/debug_handler.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/cache_handler.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/old_api.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/read_only.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/row_merge.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/serialize.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/mode_end_call.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/table.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/table_data.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/table_dataset.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/table_tdata.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/table_iterator.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/table_container.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/table_array.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/mfd.h ../../agent/snmpd.h
+./agentx/subagent.lo: agentx/protocol.h agentx/client.h
+./agentx/subagent.lo: agentx/agentx_config.h
+./agentx/subagent.lo: ../../include/net-snmp/agent/agent_callbacks.h
+./agentx/subagent.lo: mibII/sysORTable.h ./agentx/subagent.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/net-snmp-config.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/system/linux.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/system/sysv.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/system/generic.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/machine/generic.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/definitions.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/types.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp_api.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/asn1.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/utilities.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp_client.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/system.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/tools.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/int64.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/mt_support.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/callback.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/data_list.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/oid_stash.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/check_varbind.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/factory.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/container_iterator.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/version.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/session_api.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp_service.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/pdu_api.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/mib_api.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/mib.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/parse.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/varbind_api.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/config_api.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/read_config.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/default_store.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/vacm.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/output_api.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/snmpv3_api.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmpv3.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/transform_oids.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/keytools.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/scapi.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/lcd_time.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/snmpusm.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/var_struct.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/instance.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/scalar.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/watcher.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/null.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/old_api.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/read_only.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/row_merge.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/serialize.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/table.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/table_data.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/table_container.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/table_array.h
+./disman/mteEventNotificationTable.lo: ../../include/net-snmp/agent/mfd.h
+./disman/mteEventNotificationTable.lo: ./disman/mteEventNotificationTable.h
+./disman/mteEventTable.lo: ../../include/net-snmp/net-snmp-config.h
+./disman/mteEventTable.lo: ../../include/net-snmp/system/linux.h
+./disman/mteEventTable.lo: ../../include/net-snmp/system/sysv.h
+./disman/mteEventTable.lo: ../../include/net-snmp/system/generic.h
+./disman/mteEventTable.lo: ../../include/net-snmp/machine/generic.h
+./disman/mteEventTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./disman/mteEventTable.lo: ../../include/net-snmp/definitions.h
+./disman/mteEventTable.lo: ../../include/net-snmp/types.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp_api.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/asn1.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./disman/mteEventTable.lo: ../../include/net-snmp/utilities.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp_client.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/system.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/tools.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/int64.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/mt_support.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/callback.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/data_list.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/oid_stash.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/check_varbind.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/factory.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/container_iterator.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./disman/mteEventTable.lo: ../../include/net-snmp/version.h
+./disman/mteEventTable.lo: ../../include/net-snmp/session_api.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp_service.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./disman/mteEventTable.lo: ../../include/net-snmp/pdu_api.h
+./disman/mteEventTable.lo: ../../include/net-snmp/mib_api.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/mib.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/parse.h
+./disman/mteEventTable.lo: ../../include/net-snmp/varbind_api.h
+./disman/mteEventTable.lo: ../../include/net-snmp/config_api.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/read_config.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/default_store.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/vacm.h
+./disman/mteEventTable.lo: ../../include/net-snmp/output_api.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./disman/mteEventTable.lo: ../../include/net-snmp/snmpv3_api.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmpv3.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/transform_oids.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/keytools.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/scapi.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/lcd_time.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/snmpusm.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/var_struct.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./disman/mteEventTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/instance.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/scalar.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/watcher.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/null.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/old_api.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/read_only.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/row_merge.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/serialize.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/table.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/table_data.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/table_container.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/table_array.h
+./disman/mteEventTable.lo: ../../include/net-snmp/agent/mfd.h
+./disman/mteEventTable.lo: ./disman/mteTriggerTable.h
+./disman/mteEventTable.lo: ./disman/mteEventTable.h
+./disman/mteEventTable.lo: ./disman/mteEventNotificationTable.h
+./disman/mteEventTable.lo: ./disman/mteObjectsTable.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/net-snmp-config.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/system/linux.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/system/sysv.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/system/generic.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/machine/generic.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/definitions.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/types.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp_api.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/asn1.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/utilities.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp_client.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/system.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/tools.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/int64.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/mt_support.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/callback.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/data_list.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/oid_stash.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/check_varbind.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/factory.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/container_iterator.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/version.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/session_api.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp_service.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/pdu_api.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/mib_api.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/mib.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/parse.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/varbind_api.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/config_api.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/read_config.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/default_store.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/vacm.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/output_api.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/snmpv3_api.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmpv3.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/transform_oids.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/keytools.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/scapi.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/lcd_time.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/snmpusm.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/var_struct.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/instance.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/scalar.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/watcher.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/null.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/old_api.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/read_only.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/row_merge.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/serialize.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/table.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/table_data.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/table_container.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/table_array.h
+./disman/mteObjectsTable.lo: ../../include/net-snmp/agent/mfd.h
+./disman/mteObjectsTable.lo: header_complex.h ./disman/mteTriggerTable.h
+./disman/mteObjectsTable.lo: ./disman/mteObjectsTable.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/net-snmp-config.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/system/linux.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/system/sysv.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/system/generic.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/machine/generic.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/definitions.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/types.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp_api.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/asn1.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/utilities.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp_client.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/system.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/tools.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/int64.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/mt_support.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/callback.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/data_list.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/oid_stash.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/check_varbind.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/factory.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/container_iterator.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/version.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/session_api.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp_service.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/pdu_api.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/mib_api.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/mib.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/parse.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/varbind_api.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/config_api.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/read_config.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/default_store.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/vacm.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/output_api.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/snmpv3_api.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmpv3.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/transform_oids.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/keytools.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/scapi.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/lcd_time.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/snmpusm.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/var_struct.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/instance.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/scalar.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/watcher.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/null.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/old_api.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/read_only.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/row_merge.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/serialize.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/table.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/table_data.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/table_container.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/table_array.h
+./disman/mteTriggerBooleanTable.lo: ../../include/net-snmp/agent/mfd.h
+./disman/mteTriggerBooleanTable.lo: header_complex.h
+./disman/mteTriggerBooleanTable.lo: ./disman/mteTriggerBooleanTable.h
+./disman/mteTriggerBooleanTable.lo: ./disman/mteTriggerTable.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/net-snmp-config.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/system/linux.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/system/sysv.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/system/generic.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/machine/generic.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/definitions.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/types.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp_api.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/asn1.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/utilities.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp_client.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/system.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/tools.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/int64.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/mt_support.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/callback.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/data_list.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/oid_stash.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/check_varbind.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/factory.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/container_iterator.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/version.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/session_api.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp_service.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/pdu_api.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/mib_api.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/mib.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/parse.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/varbind_api.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/config_api.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/read_config.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/default_store.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/vacm.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/output_api.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/snmpv3_api.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmpv3.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/transform_oids.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/keytools.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/scapi.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/lcd_time.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/snmpusm.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/var_struct.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/instance.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/scalar.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/watcher.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/null.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/old_api.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/read_only.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/row_merge.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/serialize.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/table.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/table_data.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/table_container.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/table_array.h
+./disman/mteTriggerDeltaTable.lo: ../../include/net-snmp/agent/mfd.h
+./disman/mteTriggerDeltaTable.lo: header_complex.h
+./disman/mteTriggerDeltaTable.lo: ./disman/mteTriggerDeltaTable.h
+./disman/mteTriggerDeltaTable.lo: ./disman/mteTriggerTable.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/net-snmp-config.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/system/linux.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/system/sysv.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/system/generic.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/machine/generic.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/definitions.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/types.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp_api.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/asn1.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/utilities.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp_client.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/system.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/tools.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/int64.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/mt_support.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/callback.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/data_list.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/oid_stash.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/check_varbind.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/factory.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/container_iterator.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/version.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/session_api.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp_service.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/pdu_api.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/mib_api.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/mib.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/parse.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/varbind_api.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/config_api.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/read_config.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/default_store.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/vacm.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/output_api.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/snmpv3_api.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmpv3.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/transform_oids.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/keytools.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/scapi.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/lcd_time.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/snmpusm.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/var_struct.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/instance.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/scalar.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/watcher.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/null.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/old_api.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/read_only.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/row_merge.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/serialize.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/table.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/table_data.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/table_container.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/table_array.h
+./disman/mteTriggerExistenceTable.lo: ../../include/net-snmp/agent/mfd.h
+./disman/mteTriggerExistenceTable.lo: header_complex.h
+./disman/mteTriggerExistenceTable.lo: ./disman/mteTriggerExistenceTable.h
+./disman/mteTriggerExistenceTable.lo: ./disman/mteTriggerTable.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/net-snmp-config.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/system/linux.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/system/sysv.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/system/generic.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/machine/generic.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/definitions.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/types.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp_api.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/asn1.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/utilities.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp_client.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/system.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/tools.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/int64.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/mt_support.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/callback.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/data_list.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/oid_stash.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/check_varbind.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/factory.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/container_iterator.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/version.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/session_api.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp_service.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/pdu_api.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/mib_api.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/mib.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/parse.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/varbind_api.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/config_api.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/read_config.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/default_store.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/vacm.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/output_api.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/snmpv3_api.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmpv3.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/transform_oids.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/keytools.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/scapi.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/lcd_time.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/snmpusm.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/var_struct.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/instance.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/scalar.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/watcher.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/null.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/old_api.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/read_only.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/row_merge.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/serialize.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/table.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/table_data.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/table_container.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/table_array.h
+./disman/mteTriggerTable.lo: ../../include/net-snmp/agent/mfd.h
+./disman/mteTriggerTable.lo: header_complex.h ./disman/mteTriggerTable.h
+./disman/mteTriggerTable.lo: ./disman/mteTriggerBooleanTable.h
+./disman/mteTriggerTable.lo: ./disman/mteTriggerDeltaTable.h
+./disman/mteTriggerTable.lo: ./disman/mteTriggerExistenceTable.h
+./disman/mteTriggerTable.lo: ./disman/mteTriggerThresholdTable.h
+./disman/mteTriggerTable.lo: ./disman/mteEventTable.h
+./disman/mteTriggerTable.lo: ./disman/mteObjectsTable.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/net-snmp-config.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/system/linux.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/system/sysv.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/system/generic.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/machine/generic.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/definitions.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/types.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp_api.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/asn1.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/utilities.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp_client.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/system.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/tools.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/int64.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/mt_support.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/callback.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/data_list.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/oid_stash.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/check_varbind.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/factory.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/container_iterator.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/container.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/version.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/session_api.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp_service.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/pdu_api.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/mib_api.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/mib.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/parse.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/varbind_api.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/config_api.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/read_config.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/default_store.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/vacm.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/output_api.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/snmpv3_api.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmpv3.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/transform_oids.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/keytools.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/scapi.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/lcd_time.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/snmpusm.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/var_struct.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/instance.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/scalar.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/watcher.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/null.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/old_api.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/read_only.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/row_merge.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/serialize.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/table.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/table_data.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/table_container.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/table_array.h
+./disman/mteTriggerThresholdTable.lo: ../../include/net-snmp/agent/mfd.h
+./disman/mteTriggerThresholdTable.lo: header_complex.h
+./disman/mteTriggerThresholdTable.lo: ./disman/mteTriggerThresholdTable.h
+./disman/mteTriggerThresholdTable.lo: ./disman/mteTriggerTable.h
+./examples/data_set.lo: ../../include/net-snmp/net-snmp-config.h
+./examples/data_set.lo: ../../include/net-snmp/system/linux.h
+./examples/data_set.lo: ../../include/net-snmp/system/sysv.h
+./examples/data_set.lo: ../../include/net-snmp/system/generic.h
+./examples/data_set.lo: ../../include/net-snmp/machine/generic.h
+./examples/data_set.lo: ../../include/net-snmp/net-snmp-includes.h
+./examples/data_set.lo: ../../include/net-snmp/definitions.h
+./examples/data_set.lo: ../../include/net-snmp/types.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp_api.h
+./examples/data_set.lo: ../../include/net-snmp/library/asn1.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp_impl.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp-tc.h
+./examples/data_set.lo: ../../include/net-snmp/utilities.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp_client.h
+./examples/data_set.lo: ../../include/net-snmp/library/system.h
+./examples/data_set.lo: ../../include/net-snmp/library/tools.h
+./examples/data_set.lo: ../../include/net-snmp/library/int64.h
+./examples/data_set.lo: ../../include/net-snmp/library/mt_support.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp_alarm.h
+./examples/data_set.lo: ../../include/net-snmp/library/callback.h
+./examples/data_set.lo: ../../include/net-snmp/library/data_list.h
+./examples/data_set.lo: ../../include/net-snmp/library/oid_stash.h
+./examples/data_set.lo: ../../include/net-snmp/library/check_varbind.h
+./examples/data_set.lo: ../../include/net-snmp/library/container.h
+./examples/data_set.lo: ../../include/net-snmp/library/factory.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp_logging.h
+./examples/data_set.lo: ../../include/net-snmp/library/container_binary_array.h
+./examples/data_set.lo: ../../include/net-snmp/library/container_list_ssll.h
+./examples/data_set.lo: ../../include/net-snmp/library/container_iterator.h
+./examples/data_set.lo: ../../include/net-snmp/library/container.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp_assert.h
+./examples/data_set.lo: ../../include/net-snmp/version.h
+./examples/data_set.lo: ../../include/net-snmp/session_api.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp_transport.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp_service.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./examples/data_set.lo: ../../include/net-snmp/library/ucd_compat.h
+./examples/data_set.lo: ../../include/net-snmp/pdu_api.h
+./examples/data_set.lo: ../../include/net-snmp/mib_api.h
+./examples/data_set.lo: ../../include/net-snmp/library/mib.h
+./examples/data_set.lo: ../../include/net-snmp/library/parse.h
+./examples/data_set.lo: ../../include/net-snmp/varbind_api.h
+./examples/data_set.lo: ../../include/net-snmp/config_api.h
+./examples/data_set.lo: ../../include/net-snmp/library/read_config.h
+./examples/data_set.lo: ../../include/net-snmp/library/default_store.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp_enum.h
+./examples/data_set.lo: ../../include/net-snmp/library/vacm.h
+./examples/data_set.lo: ../../include/net-snmp/output_api.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp_debug.h
+./examples/data_set.lo: ../../include/net-snmp/snmpv3_api.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmpv3.h
+./examples/data_set.lo: ../../include/net-snmp/library/transform_oids.h
+./examples/data_set.lo: ../../include/net-snmp/library/keytools.h
+./examples/data_set.lo: ../../include/net-snmp/library/scapi.h
+./examples/data_set.lo: ../../include/net-snmp/library/lcd_time.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmp_secmod.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./examples/data_set.lo: ../../include/net-snmp/library/snmpusm.h
+./examples/data_set.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./examples/data_set.lo: ../../include/net-snmp/agent/mib_module_config.h
+./examples/data_set.lo: ../../include/net-snmp/agent/agent_module_config.h
+./examples/data_set.lo: ../../include/net-snmp/agent/snmp_agent.h
+./examples/data_set.lo: ../../include/net-snmp/agent/snmp_vars.h
+./examples/data_set.lo: ../../include/net-snmp/agent/agent_handler.h
+./examples/data_set.lo: ../../include/net-snmp/agent/var_struct.h
+./examples/data_set.lo: ../../include/net-snmp/agent/agent_registry.h
+./examples/data_set.lo: ../../include/net-snmp/library/fd_event_manager.h
+./examples/data_set.lo: ../../include/net-snmp/agent/ds_agent.h
+./examples/data_set.lo: ../../include/net-snmp/agent/agent_read_config.h
+./examples/data_set.lo: ../../include/net-snmp/agent/agent_trap.h
+./examples/data_set.lo: ../../include/net-snmp/agent/all_helpers.h
+./examples/data_set.lo: ../../include/net-snmp/agent/instance.h
+./examples/data_set.lo: ../../include/net-snmp/agent/baby_steps.h
+./examples/data_set.lo: ../../include/net-snmp/agent/scalar.h
+./examples/data_set.lo: ../../include/net-snmp/agent/scalar_group.h
+./examples/data_set.lo: ../../include/net-snmp/agent/watcher.h
+./examples/data_set.lo: ../../include/net-snmp/agent/multiplexer.h
+./examples/data_set.lo: ../../include/net-snmp/agent/null.h
+./examples/data_set.lo: ../../include/net-snmp/agent/debug_handler.h
+./examples/data_set.lo: ../../include/net-snmp/agent/cache_handler.h
+./examples/data_set.lo: ../../include/net-snmp/agent/old_api.h
+./examples/data_set.lo: ../../include/net-snmp/agent/read_only.h
+./examples/data_set.lo: ../../include/net-snmp/agent/row_merge.h
+./examples/data_set.lo: ../../include/net-snmp/agent/serialize.h
+./examples/data_set.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./examples/data_set.lo: ../../include/net-snmp/agent/mode_end_call.h
+./examples/data_set.lo: ../../include/net-snmp/agent/table.h
+./examples/data_set.lo: ../../include/net-snmp/agent/table_data.h
+./examples/data_set.lo: ../../include/net-snmp/agent/table_dataset.h
+./examples/data_set.lo: ../../include/net-snmp/agent/table_tdata.h
+./examples/data_set.lo: ../../include/net-snmp/agent/table_iterator.h
+./examples/data_set.lo: ../../include/net-snmp/agent/table_container.h
+./examples/data_set.lo: ../../include/net-snmp/agent/table_array.h
+./examples/data_set.lo: ../../include/net-snmp/agent/mfd.h
+./examples/delayed_instance.lo: ../../include/net-snmp/net-snmp-config.h
+./examples/delayed_instance.lo: ../../include/net-snmp/system/linux.h
+./examples/delayed_instance.lo: ../../include/net-snmp/system/sysv.h
+./examples/delayed_instance.lo: ../../include/net-snmp/system/generic.h
+./examples/delayed_instance.lo: ../../include/net-snmp/machine/generic.h
+./examples/delayed_instance.lo: ../../include/net-snmp/net-snmp-includes.h
+./examples/delayed_instance.lo: ../../include/net-snmp/definitions.h
+./examples/delayed_instance.lo: ../../include/net-snmp/types.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp_api.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/asn1.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp_impl.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp-tc.h
+./examples/delayed_instance.lo: ../../include/net-snmp/utilities.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp_client.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/system.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/tools.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/int64.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/mt_support.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp_alarm.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/callback.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/data_list.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/oid_stash.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/check_varbind.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/container.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/factory.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp_logging.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/container_binary_array.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/container_list_ssll.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/container_iterator.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/container.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp_assert.h
+./examples/delayed_instance.lo: ../../include/net-snmp/version.h
+./examples/delayed_instance.lo: ../../include/net-snmp/session_api.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp_transport.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp_service.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/ucd_compat.h
+./examples/delayed_instance.lo: ../../include/net-snmp/pdu_api.h
+./examples/delayed_instance.lo: ../../include/net-snmp/mib_api.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/mib.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/parse.h
+./examples/delayed_instance.lo: ../../include/net-snmp/varbind_api.h
+./examples/delayed_instance.lo: ../../include/net-snmp/config_api.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/read_config.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/default_store.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp_enum.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/vacm.h
+./examples/delayed_instance.lo: ../../include/net-snmp/output_api.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp_debug.h
+./examples/delayed_instance.lo: ../../include/net-snmp/snmpv3_api.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmpv3.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/transform_oids.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/keytools.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/scapi.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/lcd_time.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmp_secmod.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/snmpusm.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/mib_module_config.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/agent_module_config.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/snmp_agent.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/snmp_vars.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/agent_handler.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/var_struct.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/agent_registry.h
+./examples/delayed_instance.lo: ../../include/net-snmp/library/fd_event_manager.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/ds_agent.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/agent_read_config.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/agent_trap.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/all_helpers.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/instance.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/baby_steps.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/scalar.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/scalar_group.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/watcher.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/multiplexer.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/null.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/debug_handler.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/cache_handler.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/old_api.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/read_only.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/row_merge.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/serialize.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/mode_end_call.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/table.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/table_data.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/table_dataset.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/table_tdata.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/table_iterator.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/table_container.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/table_array.h
+./examples/delayed_instance.lo: ../../include/net-snmp/agent/mfd.h
+./examples/delayed_instance.lo: ./examples/delayed_instance.h
+./examples/example.lo: ../../include/net-snmp/net-snmp-config.h
+./examples/example.lo: ../../include/net-snmp/system/linux.h
+./examples/example.lo: ../../include/net-snmp/system/sysv.h
+./examples/example.lo: ../../include/net-snmp/system/generic.h
+./examples/example.lo: ../../include/net-snmp/machine/generic.h
+./examples/example.lo: ../../include/net-snmp/net-snmp-includes.h
+./examples/example.lo: ../../include/net-snmp/definitions.h
+./examples/example.lo: ../../include/net-snmp/types.h
+./examples/example.lo: ../../include/net-snmp/library/snmp_api.h
+./examples/example.lo: ../../include/net-snmp/library/asn1.h
+./examples/example.lo: ../../include/net-snmp/library/snmp_impl.h
+./examples/example.lo: ../../include/net-snmp/library/snmp.h
+./examples/example.lo: ../../include/net-snmp/library/snmp-tc.h
+./examples/example.lo: ../../include/net-snmp/utilities.h
+./examples/example.lo: ../../include/net-snmp/library/snmp_client.h
+./examples/example.lo: ../../include/net-snmp/library/system.h
+./examples/example.lo: ../../include/net-snmp/library/tools.h
+./examples/example.lo: ../../include/net-snmp/library/int64.h
+./examples/example.lo: ../../include/net-snmp/library/mt_support.h
+./examples/example.lo: ../../include/net-snmp/library/snmp_alarm.h
+./examples/example.lo: ../../include/net-snmp/library/callback.h
+./examples/example.lo: ../../include/net-snmp/library/data_list.h
+./examples/example.lo: ../../include/net-snmp/library/oid_stash.h
+./examples/example.lo: ../../include/net-snmp/library/check_varbind.h
+./examples/example.lo: ../../include/net-snmp/library/container.h
+./examples/example.lo: ../../include/net-snmp/library/factory.h
+./examples/example.lo: ../../include/net-snmp/library/snmp_logging.h
+./examples/example.lo: ../../include/net-snmp/library/container_binary_array.h
+./examples/example.lo: ../../include/net-snmp/library/container_list_ssll.h
+./examples/example.lo: ../../include/net-snmp/library/container_iterator.h
+./examples/example.lo: ../../include/net-snmp/library/container.h
+./examples/example.lo: ../../include/net-snmp/library/snmp_assert.h
+./examples/example.lo: ../../include/net-snmp/version.h
+./examples/example.lo: ../../include/net-snmp/session_api.h
+./examples/example.lo: ../../include/net-snmp/library/snmp_transport.h
+./examples/example.lo: ../../include/net-snmp/library/snmp_service.h
+./examples/example.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./examples/example.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./examples/example.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./examples/example.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./examples/example.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./examples/example.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./examples/example.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./examples/example.lo: ../../include/net-snmp/library/ucd_compat.h
+./examples/example.lo: ../../include/net-snmp/pdu_api.h
+./examples/example.lo: ../../include/net-snmp/mib_api.h
+./examples/example.lo: ../../include/net-snmp/library/mib.h
+./examples/example.lo: ../../include/net-snmp/library/parse.h
+./examples/example.lo: ../../include/net-snmp/varbind_api.h
+./examples/example.lo: ../../include/net-snmp/config_api.h
+./examples/example.lo: ../../include/net-snmp/library/read_config.h
+./examples/example.lo: ../../include/net-snmp/library/default_store.h
+./examples/example.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./examples/example.lo: ../../include/net-snmp/library/snmp_enum.h
+./examples/example.lo: ../../include/net-snmp/library/vacm.h
+./examples/example.lo: ../../include/net-snmp/output_api.h
+./examples/example.lo: ../../include/net-snmp/library/snmp_debug.h
+./examples/example.lo: ../../include/net-snmp/snmpv3_api.h
+./examples/example.lo: ../../include/net-snmp/library/snmpv3.h
+./examples/example.lo: ../../include/net-snmp/library/transform_oids.h
+./examples/example.lo: ../../include/net-snmp/library/keytools.h
+./examples/example.lo: ../../include/net-snmp/library/scapi.h
+./examples/example.lo: ../../include/net-snmp/library/lcd_time.h
+./examples/example.lo: ../../include/net-snmp/library/snmp_secmod.h
+./examples/example.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./examples/example.lo: ../../include/net-snmp/library/snmpusm.h
+./examples/example.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./examples/example.lo: ../../include/net-snmp/agent/mib_module_config.h
+./examples/example.lo: ../../include/net-snmp/agent/agent_module_config.h
+./examples/example.lo: ../../include/net-snmp/agent/snmp_agent.h
+./examples/example.lo: ../../include/net-snmp/agent/snmp_vars.h
+./examples/example.lo: ../../include/net-snmp/agent/agent_handler.h
+./examples/example.lo: ../../include/net-snmp/agent/var_struct.h
+./examples/example.lo: ../../include/net-snmp/agent/agent_registry.h
+./examples/example.lo: ../../include/net-snmp/library/fd_event_manager.h
+./examples/example.lo: ../../include/net-snmp/agent/ds_agent.h
+./examples/example.lo: ../../include/net-snmp/agent/agent_read_config.h
+./examples/example.lo: ../../include/net-snmp/agent/agent_trap.h
+./examples/example.lo: ../../include/net-snmp/agent/all_helpers.h
+./examples/example.lo: ../../include/net-snmp/agent/instance.h
+./examples/example.lo: ../../include/net-snmp/agent/baby_steps.h
+./examples/example.lo: ../../include/net-snmp/agent/scalar.h
+./examples/example.lo: ../../include/net-snmp/agent/scalar_group.h
+./examples/example.lo: ../../include/net-snmp/agent/watcher.h
+./examples/example.lo: ../../include/net-snmp/agent/multiplexer.h
+./examples/example.lo: ../../include/net-snmp/agent/null.h
+./examples/example.lo: ../../include/net-snmp/agent/debug_handler.h
+./examples/example.lo: ../../include/net-snmp/agent/cache_handler.h
+./examples/example.lo: ../../include/net-snmp/agent/old_api.h
+./examples/example.lo: ../../include/net-snmp/agent/read_only.h
+./examples/example.lo: ../../include/net-snmp/agent/row_merge.h
+./examples/example.lo: ../../include/net-snmp/agent/serialize.h
+./examples/example.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./examples/example.lo: ../../include/net-snmp/agent/mode_end_call.h
+./examples/example.lo: ../../include/net-snmp/agent/table.h
+./examples/example.lo: ../../include/net-snmp/agent/table_data.h
+./examples/example.lo: ../../include/net-snmp/agent/table_dataset.h
+./examples/example.lo: ../../include/net-snmp/agent/table_tdata.h
+./examples/example.lo: ../../include/net-snmp/agent/table_iterator.h
+./examples/example.lo: ../../include/net-snmp/agent/table_container.h
+./examples/example.lo: ../../include/net-snmp/agent/table_array.h
+./examples/example.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h
+./examples/example.lo: struct.h ./examples/example.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/net-snmp-config.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/system/linux.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/system/sysv.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/system/generic.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/machine/generic.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/definitions.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/types.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp_api.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/asn1.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/utilities.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp_client.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/system.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/tools.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/int64.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/mt_support.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/callback.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/data_list.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/oid_stash.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/check_varbind.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/container.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/factory.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/container_iterator.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/container.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/version.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/session_api.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp_service.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/pdu_api.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/mib_api.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/mib.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/parse.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/varbind_api.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/config_api.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/read_config.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/default_store.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/vacm.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/output_api.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/snmpv3_api.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmpv3.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/transform_oids.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/keytools.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/scapi.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/lcd_time.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/snmpusm.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/var_struct.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/instance.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/scalar.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/watcher.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/null.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/old_api.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/read_only.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/row_merge.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/serialize.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/table.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/table_data.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/table_container.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/table_array.h
+./examples/netSnmpHostsTable.lo: ../../include/net-snmp/agent/mfd.h
+./examples/netSnmpHostsTable.lo: ./examples/netSnmpHostsTable.h
+./examples/netSnmpHostsTable.lo: ./examples/netSnmpHostsTable_columns.h
+./examples/netSnmpHostsTable.lo: ./examples/netSnmpHostsTable_enums.h
+./examples/netSnmpHostsTable.lo: ./examples/netSnmpHostsTable_checkfns.h
+./examples/netSnmpHostsTable.lo: ./examples/netSnmpHostsTable_access.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/net-snmp-config.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/system/linux.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/system/sysv.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/system/generic.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/machine/generic.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/net-snmp-includes.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/definitions.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/types.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp_api.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/asn1.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp_impl.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp-tc.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/utilities.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp_client.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/system.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/tools.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/int64.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/mt_support.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp_alarm.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/callback.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/data_list.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/oid_stash.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/check_varbind.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/container.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/factory.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp_logging.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/container_binary_array.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/container_list_ssll.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/container_iterator.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/container.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp_assert.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/version.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/session_api.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp_transport.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp_service.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/ucd_compat.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/pdu_api.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/mib_api.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/mib.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/parse.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/varbind_api.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/config_api.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/read_config.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/default_store.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp_enum.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/vacm.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/output_api.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp_debug.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/snmpv3_api.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmpv3.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/transform_oids.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/keytools.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/scapi.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/lcd_time.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmp_secmod.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/snmpusm.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/mib_module_config.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/agent_module_config.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/snmp_agent.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/snmp_vars.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/agent_handler.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/var_struct.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/agent_registry.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/library/fd_event_manager.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/ds_agent.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/agent_read_config.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/agent_trap.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/all_helpers.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/instance.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/baby_steps.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/scalar.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/scalar_group.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/watcher.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/multiplexer.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/null.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/debug_handler.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/cache_handler.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/old_api.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/read_only.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/row_merge.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/serialize.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/mode_end_call.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/table.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/table_data.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/table_dataset.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/table_tdata.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/table_iterator.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/table_container.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/table_array.h
+./examples/netSnmpHostsTable_access.lo: ../../include/net-snmp/agent/mfd.h
+./examples/netSnmpHostsTable_access.lo: ./examples/netSnmpHostsTable_access.h
+./examples/netSnmpHostsTable_access.lo: ./examples/netSnmpHostsTable_enums.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/net-snmp-config.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/system/linux.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/system/sysv.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/system/generic.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/machine/generic.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/net-snmp-includes.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/definitions.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/types.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp_api.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/asn1.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp_impl.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp-tc.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/utilities.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp_client.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/system.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/tools.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/int64.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/mt_support.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp_alarm.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/callback.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/data_list.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/oid_stash.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/check_varbind.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/container.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/factory.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp_logging.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/container_binary_array.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/container_list_ssll.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/container_iterator.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/container.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp_assert.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/version.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/session_api.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp_transport.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp_service.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/ucd_compat.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/pdu_api.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/mib_api.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/mib.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/parse.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/varbind_api.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/config_api.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/read_config.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/default_store.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp_enum.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/vacm.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/output_api.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp_debug.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/snmpv3_api.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmpv3.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/transform_oids.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/keytools.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/scapi.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/lcd_time.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmp_secmod.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./examples/netSnmpHostsTable_checkfns.lo: ../../include/net-snmp/library/snmpusm.h
+./examples/netSnmpHostsTable_checkfns.lo: ./examples/netSnmpHostsTable_checkfns.h
+./examples/netSnmpHostsTable_checkfns.lo: ./examples/netSnmpHostsTable_checkfns_local.h
+./examples/netSnmpHostsTable_checkfns.lo: ./examples/netSnmpHostsTable_enums.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/net-snmp-config.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/system/linux.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/system/sysv.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/system/generic.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/machine/generic.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/net-snmp-includes.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/definitions.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/types.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp_api.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/asn1.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp_impl.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp-tc.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/utilities.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp_client.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/system.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/tools.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/int64.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/mt_support.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp_alarm.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/callback.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/data_list.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/oid_stash.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/check_varbind.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/container.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/factory.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp_logging.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/container_binary_array.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/container_list_ssll.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/container_iterator.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/container.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp_assert.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/version.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/session_api.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp_transport.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp_service.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/ucd_compat.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/pdu_api.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/mib_api.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/mib.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/parse.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/varbind_api.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/config_api.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/read_config.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/default_store.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp_enum.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/vacm.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/output_api.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp_debug.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/snmpv3_api.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmpv3.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/transform_oids.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/keytools.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/scapi.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/lcd_time.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmp_secmod.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ../../include/net-snmp/library/snmpusm.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ./examples/netSnmpHostsTable_checkfns.h
+./examples/netSnmpHostsTable_checkfns_local.lo: ./examples/netSnmpHostsTable_enums.h
+./examples/notification.lo: ../../include/net-snmp/net-snmp-config.h
+./examples/notification.lo: ../../include/net-snmp/system/linux.h
+./examples/notification.lo: ../../include/net-snmp/system/sysv.h
+./examples/notification.lo: ../../include/net-snmp/system/generic.h
+./examples/notification.lo: ../../include/net-snmp/machine/generic.h
+./examples/notification.lo: ../../include/net-snmp/net-snmp-includes.h
+./examples/notification.lo: ../../include/net-snmp/definitions.h
+./examples/notification.lo: ../../include/net-snmp/types.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp_api.h
+./examples/notification.lo: ../../include/net-snmp/library/asn1.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp_impl.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp-tc.h
+./examples/notification.lo: ../../include/net-snmp/utilities.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp_client.h
+./examples/notification.lo: ../../include/net-snmp/library/system.h
+./examples/notification.lo: ../../include/net-snmp/library/tools.h
+./examples/notification.lo: ../../include/net-snmp/library/int64.h
+./examples/notification.lo: ../../include/net-snmp/library/mt_support.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp_alarm.h
+./examples/notification.lo: ../../include/net-snmp/library/callback.h
+./examples/notification.lo: ../../include/net-snmp/library/data_list.h
+./examples/notification.lo: ../../include/net-snmp/library/oid_stash.h
+./examples/notification.lo: ../../include/net-snmp/library/check_varbind.h
+./examples/notification.lo: ../../include/net-snmp/library/container.h
+./examples/notification.lo: ../../include/net-snmp/library/factory.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp_logging.h
+./examples/notification.lo: ../../include/net-snmp/library/container_binary_array.h
+./examples/notification.lo: ../../include/net-snmp/library/container_list_ssll.h
+./examples/notification.lo: ../../include/net-snmp/library/container_iterator.h
+./examples/notification.lo: ../../include/net-snmp/library/container.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp_assert.h
+./examples/notification.lo: ../../include/net-snmp/version.h
+./examples/notification.lo: ../../include/net-snmp/session_api.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp_transport.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp_service.h
+./examples/notification.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./examples/notification.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./examples/notification.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./examples/notification.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./examples/notification.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./examples/notification.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./examples/notification.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./examples/notification.lo: ../../include/net-snmp/library/ucd_compat.h
+./examples/notification.lo: ../../include/net-snmp/pdu_api.h
+./examples/notification.lo: ../../include/net-snmp/mib_api.h
+./examples/notification.lo: ../../include/net-snmp/library/mib.h
+./examples/notification.lo: ../../include/net-snmp/library/parse.h
+./examples/notification.lo: ../../include/net-snmp/varbind_api.h
+./examples/notification.lo: ../../include/net-snmp/config_api.h
+./examples/notification.lo: ../../include/net-snmp/library/read_config.h
+./examples/notification.lo: ../../include/net-snmp/library/default_store.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp_enum.h
+./examples/notification.lo: ../../include/net-snmp/library/vacm.h
+./examples/notification.lo: ../../include/net-snmp/output_api.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp_debug.h
+./examples/notification.lo: ../../include/net-snmp/snmpv3_api.h
+./examples/notification.lo: ../../include/net-snmp/library/snmpv3.h
+./examples/notification.lo: ../../include/net-snmp/library/transform_oids.h
+./examples/notification.lo: ../../include/net-snmp/library/keytools.h
+./examples/notification.lo: ../../include/net-snmp/library/scapi.h
+./examples/notification.lo: ../../include/net-snmp/library/lcd_time.h
+./examples/notification.lo: ../../include/net-snmp/library/snmp_secmod.h
+./examples/notification.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./examples/notification.lo: ../../include/net-snmp/library/snmpusm.h
+./examples/notification.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./examples/notification.lo: ../../include/net-snmp/agent/mib_module_config.h
+./examples/notification.lo: ../../include/net-snmp/agent/agent_module_config.h
+./examples/notification.lo: ../../include/net-snmp/agent/snmp_agent.h
+./examples/notification.lo: ../../include/net-snmp/agent/snmp_vars.h
+./examples/notification.lo: ../../include/net-snmp/agent/agent_handler.h
+./examples/notification.lo: ../../include/net-snmp/agent/var_struct.h
+./examples/notification.lo: ../../include/net-snmp/agent/agent_registry.h
+./examples/notification.lo: ../../include/net-snmp/library/fd_event_manager.h
+./examples/notification.lo: ../../include/net-snmp/agent/ds_agent.h
+./examples/notification.lo: ../../include/net-snmp/agent/agent_read_config.h
+./examples/notification.lo: ../../include/net-snmp/agent/agent_trap.h
+./examples/notification.lo: ../../include/net-snmp/agent/all_helpers.h
+./examples/notification.lo: ../../include/net-snmp/agent/instance.h
+./examples/notification.lo: ../../include/net-snmp/agent/baby_steps.h
+./examples/notification.lo: ../../include/net-snmp/agent/scalar.h
+./examples/notification.lo: ../../include/net-snmp/agent/scalar_group.h
+./examples/notification.lo: ../../include/net-snmp/agent/watcher.h
+./examples/notification.lo: ../../include/net-snmp/agent/multiplexer.h
+./examples/notification.lo: ../../include/net-snmp/agent/null.h
+./examples/notification.lo: ../../include/net-snmp/agent/debug_handler.h
+./examples/notification.lo: ../../include/net-snmp/agent/cache_handler.h
+./examples/notification.lo: ../../include/net-snmp/agent/old_api.h
+./examples/notification.lo: ../../include/net-snmp/agent/read_only.h
+./examples/notification.lo: ../../include/net-snmp/agent/row_merge.h
+./examples/notification.lo: ../../include/net-snmp/agent/serialize.h
+./examples/notification.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./examples/notification.lo: ../../include/net-snmp/agent/mode_end_call.h
+./examples/notification.lo: ../../include/net-snmp/agent/table.h
+./examples/notification.lo: ../../include/net-snmp/agent/table_data.h
+./examples/notification.lo: ../../include/net-snmp/agent/table_dataset.h
+./examples/notification.lo: ../../include/net-snmp/agent/table_tdata.h
+./examples/notification.lo: ../../include/net-snmp/agent/table_iterator.h
+./examples/notification.lo: ../../include/net-snmp/agent/table_container.h
+./examples/notification.lo: ../../include/net-snmp/agent/table_array.h
+./examples/notification.lo: ../../include/net-snmp/agent/mfd.h notification.h
+./examples/scalar_int.lo: ../../include/net-snmp/net-snmp-config.h
+./examples/scalar_int.lo: ../../include/net-snmp/system/linux.h
+./examples/scalar_int.lo: ../../include/net-snmp/system/sysv.h
+./examples/scalar_int.lo: ../../include/net-snmp/system/generic.h
+./examples/scalar_int.lo: ../../include/net-snmp/machine/generic.h
+./examples/scalar_int.lo: ../../include/net-snmp/net-snmp-includes.h
+./examples/scalar_int.lo: ../../include/net-snmp/definitions.h
+./examples/scalar_int.lo: ../../include/net-snmp/types.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp_api.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/asn1.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp_impl.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp-tc.h
+./examples/scalar_int.lo: ../../include/net-snmp/utilities.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp_client.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/system.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/tools.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/int64.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/mt_support.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp_alarm.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/callback.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/data_list.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/oid_stash.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/check_varbind.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/container.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/factory.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp_logging.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/container_binary_array.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/container_list_ssll.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/container_iterator.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/container.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp_assert.h
+./examples/scalar_int.lo: ../../include/net-snmp/version.h
+./examples/scalar_int.lo: ../../include/net-snmp/session_api.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp_transport.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp_service.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/ucd_compat.h
+./examples/scalar_int.lo: ../../include/net-snmp/pdu_api.h
+./examples/scalar_int.lo: ../../include/net-snmp/mib_api.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/mib.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/parse.h
+./examples/scalar_int.lo: ../../include/net-snmp/varbind_api.h
+./examples/scalar_int.lo: ../../include/net-snmp/config_api.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/read_config.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/default_store.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp_enum.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/vacm.h
+./examples/scalar_int.lo: ../../include/net-snmp/output_api.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp_debug.h
+./examples/scalar_int.lo: ../../include/net-snmp/snmpv3_api.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmpv3.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/transform_oids.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/keytools.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/scapi.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/lcd_time.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmp_secmod.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/snmpusm.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/mib_module_config.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/agent_module_config.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/snmp_agent.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/snmp_vars.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/agent_handler.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/var_struct.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/agent_registry.h
+./examples/scalar_int.lo: ../../include/net-snmp/library/fd_event_manager.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/ds_agent.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/agent_read_config.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/agent_trap.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/all_helpers.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/instance.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/baby_steps.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/scalar.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/scalar_group.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/watcher.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/multiplexer.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/null.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/debug_handler.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/cache_handler.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/old_api.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/read_only.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/row_merge.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/serialize.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/mode_end_call.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/table.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/table_data.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/table_dataset.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/table_tdata.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/table_iterator.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/table_container.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/table_array.h
+./examples/scalar_int.lo: ../../include/net-snmp/agent/mfd.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/net-snmp-config.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/system/linux.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/system/sysv.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/system/generic.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/machine/generic.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/net-snmp-includes.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/definitions.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/types.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp_api.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/asn1.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp_impl.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp-tc.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/utilities.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp_client.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/system.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/tools.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/int64.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/mt_support.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp_alarm.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/callback.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/data_list.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/oid_stash.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/check_varbind.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/container.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/factory.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp_logging.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/container_binary_array.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/container_list_ssll.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/container_iterator.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/container.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp_assert.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/version.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/session_api.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp_transport.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp_service.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/ucd_compat.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/pdu_api.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/mib_api.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/mib.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/parse.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/varbind_api.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/config_api.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/read_config.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/default_store.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp_enum.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/vacm.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/output_api.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp_debug.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/snmpv3_api.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmpv3.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/transform_oids.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/keytools.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/scapi.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/lcd_time.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmp_secmod.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/snmpusm.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/mib_module_config.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/agent_module_config.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/snmp_agent.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/snmp_vars.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/agent_handler.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/var_struct.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/agent_registry.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/library/fd_event_manager.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/ds_agent.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/agent_read_config.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/agent_trap.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/all_helpers.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/instance.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/baby_steps.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/scalar.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/scalar_group.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/watcher.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/multiplexer.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/null.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/debug_handler.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/cache_handler.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/old_api.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/read_only.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/row_merge.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/serialize.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/mode_end_call.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/table.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/table_data.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/table_dataset.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/table_tdata.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/table_iterator.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/table_container.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/table_array.h
+./examples/ucdDemoPublic.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h
+./examples/ucdDemoPublic.lo: struct.h ./examples/ucdDemoPublic.h
+./examples/watched.lo: ../../include/net-snmp/net-snmp-config.h
+./examples/watched.lo: ../../include/net-snmp/system/linux.h
+./examples/watched.lo: ../../include/net-snmp/system/sysv.h
+./examples/watched.lo: ../../include/net-snmp/system/generic.h
+./examples/watched.lo: ../../include/net-snmp/machine/generic.h
+./examples/watched.lo: ../../include/net-snmp/net-snmp-includes.h
+./examples/watched.lo: ../../include/net-snmp/definitions.h
+./examples/watched.lo: ../../include/net-snmp/types.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp_api.h
+./examples/watched.lo: ../../include/net-snmp/library/asn1.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp_impl.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp-tc.h
+./examples/watched.lo: ../../include/net-snmp/utilities.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp_client.h
+./examples/watched.lo: ../../include/net-snmp/library/system.h
+./examples/watched.lo: ../../include/net-snmp/library/tools.h
+./examples/watched.lo: ../../include/net-snmp/library/int64.h
+./examples/watched.lo: ../../include/net-snmp/library/mt_support.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp_alarm.h
+./examples/watched.lo: ../../include/net-snmp/library/callback.h
+./examples/watched.lo: ../../include/net-snmp/library/data_list.h
+./examples/watched.lo: ../../include/net-snmp/library/oid_stash.h
+./examples/watched.lo: ../../include/net-snmp/library/check_varbind.h
+./examples/watched.lo: ../../include/net-snmp/library/container.h
+./examples/watched.lo: ../../include/net-snmp/library/factory.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp_logging.h
+./examples/watched.lo: ../../include/net-snmp/library/container_binary_array.h
+./examples/watched.lo: ../../include/net-snmp/library/container_list_ssll.h
+./examples/watched.lo: ../../include/net-snmp/library/container_iterator.h
+./examples/watched.lo: ../../include/net-snmp/library/container.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp_assert.h
+./examples/watched.lo: ../../include/net-snmp/version.h
+./examples/watched.lo: ../../include/net-snmp/session_api.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp_transport.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp_service.h
+./examples/watched.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./examples/watched.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./examples/watched.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./examples/watched.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./examples/watched.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./examples/watched.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./examples/watched.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./examples/watched.lo: ../../include/net-snmp/library/ucd_compat.h
+./examples/watched.lo: ../../include/net-snmp/pdu_api.h
+./examples/watched.lo: ../../include/net-snmp/mib_api.h
+./examples/watched.lo: ../../include/net-snmp/library/mib.h
+./examples/watched.lo: ../../include/net-snmp/library/parse.h
+./examples/watched.lo: ../../include/net-snmp/varbind_api.h
+./examples/watched.lo: ../../include/net-snmp/config_api.h
+./examples/watched.lo: ../../include/net-snmp/library/read_config.h
+./examples/watched.lo: ../../include/net-snmp/library/default_store.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp_enum.h
+./examples/watched.lo: ../../include/net-snmp/library/vacm.h
+./examples/watched.lo: ../../include/net-snmp/output_api.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp_debug.h
+./examples/watched.lo: ../../include/net-snmp/snmpv3_api.h
+./examples/watched.lo: ../../include/net-snmp/library/snmpv3.h
+./examples/watched.lo: ../../include/net-snmp/library/transform_oids.h
+./examples/watched.lo: ../../include/net-snmp/library/keytools.h
+./examples/watched.lo: ../../include/net-snmp/library/scapi.h
+./examples/watched.lo: ../../include/net-snmp/library/lcd_time.h
+./examples/watched.lo: ../../include/net-snmp/library/snmp_secmod.h
+./examples/watched.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./examples/watched.lo: ../../include/net-snmp/library/snmpusm.h
+./examples/watched.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./examples/watched.lo: ../../include/net-snmp/agent/mib_module_config.h
+./examples/watched.lo: ../../include/net-snmp/agent/agent_module_config.h
+./examples/watched.lo: ../../include/net-snmp/agent/snmp_agent.h
+./examples/watched.lo: ../../include/net-snmp/agent/snmp_vars.h
+./examples/watched.lo: ../../include/net-snmp/agent/agent_handler.h
+./examples/watched.lo: ../../include/net-snmp/agent/var_struct.h
+./examples/watched.lo: ../../include/net-snmp/agent/agent_registry.h
+./examples/watched.lo: ../../include/net-snmp/library/fd_event_manager.h
+./examples/watched.lo: ../../include/net-snmp/agent/ds_agent.h
+./examples/watched.lo: ../../include/net-snmp/agent/agent_read_config.h
+./examples/watched.lo: ../../include/net-snmp/agent/agent_trap.h
+./examples/watched.lo: ../../include/net-snmp/agent/all_helpers.h
+./examples/watched.lo: ../../include/net-snmp/agent/instance.h
+./examples/watched.lo: ../../include/net-snmp/agent/baby_steps.h
+./examples/watched.lo: ../../include/net-snmp/agent/scalar.h
+./examples/watched.lo: ../../include/net-snmp/agent/scalar_group.h
+./examples/watched.lo: ../../include/net-snmp/agent/watcher.h
+./examples/watched.lo: ../../include/net-snmp/agent/multiplexer.h
+./examples/watched.lo: ../../include/net-snmp/agent/null.h
+./examples/watched.lo: ../../include/net-snmp/agent/debug_handler.h
+./examples/watched.lo: ../../include/net-snmp/agent/cache_handler.h
+./examples/watched.lo: ../../include/net-snmp/agent/old_api.h
+./examples/watched.lo: ../../include/net-snmp/agent/read_only.h
+./examples/watched.lo: ../../include/net-snmp/agent/row_merge.h
+./examples/watched.lo: ../../include/net-snmp/agent/serialize.h
+./examples/watched.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./examples/watched.lo: ../../include/net-snmp/agent/mode_end_call.h
+./examples/watched.lo: ../../include/net-snmp/agent/table.h
+./examples/watched.lo: ../../include/net-snmp/agent/table_data.h
+./examples/watched.lo: ../../include/net-snmp/agent/table_dataset.h
+./examples/watched.lo: ../../include/net-snmp/agent/table_tdata.h
+./examples/watched.lo: ../../include/net-snmp/agent/table_iterator.h
+./examples/watched.lo: ../../include/net-snmp/agent/table_container.h
+./examples/watched.lo: ../../include/net-snmp/agent/table_array.h
+./examples/watched.lo: ../../include/net-snmp/agent/mfd.h
+./host/hr_device.lo: ../../include/net-snmp/net-snmp-config.h
+./host/hr_device.lo: ../../include/net-snmp/system/linux.h
+./host/hr_device.lo: ../../include/net-snmp/system/sysv.h
+./host/hr_device.lo: ../../include/net-snmp/system/generic.h
+./host/hr_device.lo: ../../include/net-snmp/machine/generic.h
+./host/hr_device.lo: host_res.h
+./host/hr_device.lo: ../../include/net-snmp/net-snmp-includes.h
+./host/hr_device.lo: ../../include/net-snmp/definitions.h
+./host/hr_device.lo: ../../include/net-snmp/types.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp_api.h
+./host/hr_device.lo: ../../include/net-snmp/library/asn1.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp_impl.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp-tc.h
+./host/hr_device.lo: ../../include/net-snmp/utilities.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp_client.h
+./host/hr_device.lo: ../../include/net-snmp/library/system.h
+./host/hr_device.lo: ../../include/net-snmp/library/tools.h
+./host/hr_device.lo: ../../include/net-snmp/library/int64.h
+./host/hr_device.lo: ../../include/net-snmp/library/mt_support.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp_alarm.h
+./host/hr_device.lo: ../../include/net-snmp/library/callback.h
+./host/hr_device.lo: ../../include/net-snmp/library/data_list.h
+./host/hr_device.lo: ../../include/net-snmp/library/oid_stash.h
+./host/hr_device.lo: ../../include/net-snmp/library/check_varbind.h
+./host/hr_device.lo: ../../include/net-snmp/library/container.h
+./host/hr_device.lo: ../../include/net-snmp/library/factory.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp_logging.h
+./host/hr_device.lo: ../../include/net-snmp/library/container_binary_array.h
+./host/hr_device.lo: ../../include/net-snmp/library/container_list_ssll.h
+./host/hr_device.lo: ../../include/net-snmp/library/container_iterator.h
+./host/hr_device.lo: ../../include/net-snmp/library/container.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp_assert.h
+./host/hr_device.lo: ../../include/net-snmp/version.h
+./host/hr_device.lo: ../../include/net-snmp/session_api.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp_transport.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp_service.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./host/hr_device.lo: ../../include/net-snmp/library/ucd_compat.h
+./host/hr_device.lo: ../../include/net-snmp/pdu_api.h
+./host/hr_device.lo: ../../include/net-snmp/mib_api.h
+./host/hr_device.lo: ../../include/net-snmp/library/mib.h
+./host/hr_device.lo: ../../include/net-snmp/library/parse.h
+./host/hr_device.lo: ../../include/net-snmp/varbind_api.h
+./host/hr_device.lo: ../../include/net-snmp/config_api.h
+./host/hr_device.lo: ../../include/net-snmp/library/read_config.h
+./host/hr_device.lo: ../../include/net-snmp/library/default_store.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp_enum.h
+./host/hr_device.lo: ../../include/net-snmp/library/vacm.h
+./host/hr_device.lo: ../../include/net-snmp/output_api.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp_debug.h
+./host/hr_device.lo: ../../include/net-snmp/snmpv3_api.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmpv3.h
+./host/hr_device.lo: ../../include/net-snmp/library/transform_oids.h
+./host/hr_device.lo: ../../include/net-snmp/library/keytools.h
+./host/hr_device.lo: ../../include/net-snmp/library/scapi.h
+./host/hr_device.lo: ../../include/net-snmp/library/lcd_time.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmp_secmod.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./host/hr_device.lo: ../../include/net-snmp/library/snmpusm.h
+./host/hr_device.lo: ../../include/net-snmp/agent/snmp_agent.h
+./host/hr_device.lo: ../../include/net-snmp/agent/agent_handler.h
+./host/hr_device.lo: ../../include/net-snmp/agent/snmp_vars.h
+./host/hr_device.lo: ../../include/net-snmp/agent/var_struct.h
+./host/hr_device.lo: ../../include/net-snmp/agent/agent_registry.h
+./host/hr_device.lo: ../../include/net-snmp/library/fd_event_manager.h
+./host/hr_device.lo: ./host/hr_device.h
+./host/hr_disk.lo: ../../include/net-snmp/net-snmp-config.h
+./host/hr_disk.lo: ../../include/net-snmp/system/linux.h
+./host/hr_disk.lo: ../../include/net-snmp/system/sysv.h
+./host/hr_disk.lo: ../../include/net-snmp/system/generic.h
+./host/hr_disk.lo: ../../include/net-snmp/machine/generic.h host_res.h
+./host/hr_disk.lo: ../../include/net-snmp/net-snmp-includes.h
+./host/hr_disk.lo: ../../include/net-snmp/definitions.h
+./host/hr_disk.lo: ../../include/net-snmp/types.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp_api.h
+./host/hr_disk.lo: ../../include/net-snmp/library/asn1.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp_impl.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp-tc.h
+./host/hr_disk.lo: ../../include/net-snmp/utilities.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp_client.h
+./host/hr_disk.lo: ../../include/net-snmp/library/system.h
+./host/hr_disk.lo: ../../include/net-snmp/library/tools.h
+./host/hr_disk.lo: ../../include/net-snmp/library/int64.h
+./host/hr_disk.lo: ../../include/net-snmp/library/mt_support.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp_alarm.h
+./host/hr_disk.lo: ../../include/net-snmp/library/callback.h
+./host/hr_disk.lo: ../../include/net-snmp/library/data_list.h
+./host/hr_disk.lo: ../../include/net-snmp/library/oid_stash.h
+./host/hr_disk.lo: ../../include/net-snmp/library/check_varbind.h
+./host/hr_disk.lo: ../../include/net-snmp/library/container.h
+./host/hr_disk.lo: ../../include/net-snmp/library/factory.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp_logging.h
+./host/hr_disk.lo: ../../include/net-snmp/library/container_binary_array.h
+./host/hr_disk.lo: ../../include/net-snmp/library/container_list_ssll.h
+./host/hr_disk.lo: ../../include/net-snmp/library/container_iterator.h
+./host/hr_disk.lo: ../../include/net-snmp/library/container.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp_assert.h
+./host/hr_disk.lo: ../../include/net-snmp/version.h
+./host/hr_disk.lo: ../../include/net-snmp/session_api.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp_transport.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp_service.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./host/hr_disk.lo: ../../include/net-snmp/library/ucd_compat.h
+./host/hr_disk.lo: ../../include/net-snmp/pdu_api.h
+./host/hr_disk.lo: ../../include/net-snmp/mib_api.h
+./host/hr_disk.lo: ../../include/net-snmp/library/mib.h
+./host/hr_disk.lo: ../../include/net-snmp/library/parse.h
+./host/hr_disk.lo: ../../include/net-snmp/varbind_api.h
+./host/hr_disk.lo: ../../include/net-snmp/config_api.h
+./host/hr_disk.lo: ../../include/net-snmp/library/read_config.h
+./host/hr_disk.lo: ../../include/net-snmp/library/default_store.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp_enum.h
+./host/hr_disk.lo: ../../include/net-snmp/library/vacm.h
+./host/hr_disk.lo: ../../include/net-snmp/output_api.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp_debug.h
+./host/hr_disk.lo: ../../include/net-snmp/snmpv3_api.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmpv3.h
+./host/hr_disk.lo: ../../include/net-snmp/library/transform_oids.h
+./host/hr_disk.lo: ../../include/net-snmp/library/keytools.h
+./host/hr_disk.lo: ../../include/net-snmp/library/scapi.h
+./host/hr_disk.lo: ../../include/net-snmp/library/lcd_time.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmp_secmod.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./host/hr_disk.lo: ../../include/net-snmp/library/snmpusm.h
+./host/hr_disk.lo: ../../include/net-snmp/agent/snmp_agent.h
+./host/hr_disk.lo: ../../include/net-snmp/agent/agent_handler.h
+./host/hr_disk.lo: ../../include/net-snmp/agent/snmp_vars.h
+./host/hr_disk.lo: ../../include/net-snmp/agent/var_struct.h
+./host/hr_disk.lo: ../../include/net-snmp/agent/agent_registry.h
+./host/hr_disk.lo: ../../include/net-snmp/library/fd_event_manager.h
+./host/hr_disk.lo: ./host/hr_disk.h
+./host/hr_disk.lo: ../../include/net-snmp/agent/agent_read_config.h
+./host/hr_filesys.lo: ../../include/net-snmp/net-snmp-config.h
+./host/hr_filesys.lo: ../../include/net-snmp/system/linux.h
+./host/hr_filesys.lo: ../../include/net-snmp/system/sysv.h
+./host/hr_filesys.lo: ../../include/net-snmp/system/generic.h
+./host/hr_filesys.lo: ../../include/net-snmp/machine/generic.h
+./host/hr_filesys.lo: ../../include/net-snmp/net-snmp-includes.h
+./host/hr_filesys.lo: ../../include/net-snmp/definitions.h
+./host/hr_filesys.lo: ../../include/net-snmp/types.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp_api.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/asn1.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp_impl.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp-tc.h
+./host/hr_filesys.lo: ../../include/net-snmp/utilities.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp_client.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/system.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/tools.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/int64.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/mt_support.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp_alarm.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/callback.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/data_list.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/oid_stash.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/check_varbind.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/container.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/factory.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp_logging.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/container_binary_array.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/container_list_ssll.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/container_iterator.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/container.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp_assert.h
+./host/hr_filesys.lo: ../../include/net-snmp/version.h
+./host/hr_filesys.lo: ../../include/net-snmp/session_api.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp_transport.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp_service.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/ucd_compat.h
+./host/hr_filesys.lo: ../../include/net-snmp/pdu_api.h
+./host/hr_filesys.lo: ../../include/net-snmp/mib_api.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/mib.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/parse.h
+./host/hr_filesys.lo: ../../include/net-snmp/varbind_api.h
+./host/hr_filesys.lo: ../../include/net-snmp/config_api.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/read_config.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/default_store.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp_enum.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/vacm.h
+./host/hr_filesys.lo: ../../include/net-snmp/output_api.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp_debug.h
+./host/hr_filesys.lo: ../../include/net-snmp/snmpv3_api.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmpv3.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/transform_oids.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/keytools.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/scapi.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/lcd_time.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmp_secmod.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/snmpusm.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/mib_module_config.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/agent_module_config.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/snmp_agent.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/snmp_vars.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/agent_handler.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/var_struct.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/agent_registry.h
+./host/hr_filesys.lo: ../../include/net-snmp/library/fd_event_manager.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/ds_agent.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/agent_read_config.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/agent_trap.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/all_helpers.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/instance.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/baby_steps.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/scalar.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/scalar_group.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/watcher.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/multiplexer.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/null.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/debug_handler.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/cache_handler.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/old_api.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/read_only.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/row_merge.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/serialize.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/mode_end_call.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/table.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/table_data.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/table_dataset.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/table_tdata.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/table_iterator.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/table_container.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/table_array.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/mfd.h
+./host/hr_filesys.lo: ../../include/net-snmp/agent/hardware/memory.h
+./host/hr_filesys.lo: host_res.h ./host/hr_filesys.h
+./host/hr_filesys.lo: ./host/hr_storage.h
+./host/hr_network.lo: ../../include/net-snmp/net-snmp-config.h
+./host/hr_network.lo: ../../include/net-snmp/system/linux.h
+./host/hr_network.lo: ../../include/net-snmp/system/sysv.h
+./host/hr_network.lo: ../../include/net-snmp/system/generic.h
+./host/hr_network.lo: ../../include/net-snmp/machine/generic.h
+./host/hr_network.lo: ../../include/net-snmp/net-snmp-includes.h
+./host/hr_network.lo: ../../include/net-snmp/definitions.h
+./host/hr_network.lo: ../../include/net-snmp/types.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp_api.h
+./host/hr_network.lo: ../../include/net-snmp/library/asn1.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp_impl.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp-tc.h
+./host/hr_network.lo: ../../include/net-snmp/utilities.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp_client.h
+./host/hr_network.lo: ../../include/net-snmp/library/system.h
+./host/hr_network.lo: ../../include/net-snmp/library/tools.h
+./host/hr_network.lo: ../../include/net-snmp/library/int64.h
+./host/hr_network.lo: ../../include/net-snmp/library/mt_support.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp_alarm.h
+./host/hr_network.lo: ../../include/net-snmp/library/callback.h
+./host/hr_network.lo: ../../include/net-snmp/library/data_list.h
+./host/hr_network.lo: ../../include/net-snmp/library/oid_stash.h
+./host/hr_network.lo: ../../include/net-snmp/library/check_varbind.h
+./host/hr_network.lo: ../../include/net-snmp/library/container.h
+./host/hr_network.lo: ../../include/net-snmp/library/factory.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp_logging.h
+./host/hr_network.lo: ../../include/net-snmp/library/container_binary_array.h
+./host/hr_network.lo: ../../include/net-snmp/library/container_list_ssll.h
+./host/hr_network.lo: ../../include/net-snmp/library/container_iterator.h
+./host/hr_network.lo: ../../include/net-snmp/library/container.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp_assert.h
+./host/hr_network.lo: ../../include/net-snmp/version.h
+./host/hr_network.lo: ../../include/net-snmp/session_api.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp_transport.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp_service.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./host/hr_network.lo: ../../include/net-snmp/library/ucd_compat.h
+./host/hr_network.lo: ../../include/net-snmp/pdu_api.h
+./host/hr_network.lo: ../../include/net-snmp/mib_api.h
+./host/hr_network.lo: ../../include/net-snmp/library/mib.h
+./host/hr_network.lo: ../../include/net-snmp/library/parse.h
+./host/hr_network.lo: ../../include/net-snmp/varbind_api.h
+./host/hr_network.lo: ../../include/net-snmp/config_api.h
+./host/hr_network.lo: ../../include/net-snmp/library/read_config.h
+./host/hr_network.lo: ../../include/net-snmp/library/default_store.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp_enum.h
+./host/hr_network.lo: ../../include/net-snmp/library/vacm.h
+./host/hr_network.lo: ../../include/net-snmp/output_api.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp_debug.h
+./host/hr_network.lo: ../../include/net-snmp/snmpv3_api.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmpv3.h
+./host/hr_network.lo: ../../include/net-snmp/library/transform_oids.h
+./host/hr_network.lo: ../../include/net-snmp/library/keytools.h
+./host/hr_network.lo: ../../include/net-snmp/library/scapi.h
+./host/hr_network.lo: ../../include/net-snmp/library/lcd_time.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmp_secmod.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./host/hr_network.lo: ../../include/net-snmp/library/snmpusm.h
+./host/hr_network.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./host/hr_network.lo: ../../include/net-snmp/agent/mib_module_config.h
+./host/hr_network.lo: ../../include/net-snmp/agent/agent_module_config.h
+./host/hr_network.lo: ../../include/net-snmp/agent/snmp_agent.h
+./host/hr_network.lo: ../../include/net-snmp/agent/snmp_vars.h
+./host/hr_network.lo: ../../include/net-snmp/agent/agent_handler.h
+./host/hr_network.lo: ../../include/net-snmp/agent/var_struct.h
+./host/hr_network.lo: ../../include/net-snmp/agent/agent_registry.h
+./host/hr_network.lo: ../../include/net-snmp/library/fd_event_manager.h
+./host/hr_network.lo: ../../include/net-snmp/agent/ds_agent.h
+./host/hr_network.lo: ../../include/net-snmp/agent/agent_read_config.h
+./host/hr_network.lo: ../../include/net-snmp/agent/agent_trap.h
+./host/hr_network.lo: ../../include/net-snmp/agent/all_helpers.h
+./host/hr_network.lo: ../../include/net-snmp/agent/instance.h
+./host/hr_network.lo: ../../include/net-snmp/agent/baby_steps.h
+./host/hr_network.lo: ../../include/net-snmp/agent/scalar.h
+./host/hr_network.lo: ../../include/net-snmp/agent/scalar_group.h
+./host/hr_network.lo: ../../include/net-snmp/agent/watcher.h
+./host/hr_network.lo: ../../include/net-snmp/agent/multiplexer.h
+./host/hr_network.lo: ../../include/net-snmp/agent/null.h
+./host/hr_network.lo: ../../include/net-snmp/agent/debug_handler.h
+./host/hr_network.lo: ../../include/net-snmp/agent/cache_handler.h
+./host/hr_network.lo: ../../include/net-snmp/agent/old_api.h
+./host/hr_network.lo: ../../include/net-snmp/agent/read_only.h
+./host/hr_network.lo: ../../include/net-snmp/agent/row_merge.h
+./host/hr_network.lo: ../../include/net-snmp/agent/serialize.h
+./host/hr_network.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./host/hr_network.lo: ../../include/net-snmp/agent/mode_end_call.h
+./host/hr_network.lo: ../../include/net-snmp/agent/table.h
+./host/hr_network.lo: ../../include/net-snmp/agent/table_data.h
+./host/hr_network.lo: ../../include/net-snmp/agent/table_dataset.h
+./host/hr_network.lo: ../../include/net-snmp/agent/table_tdata.h
+./host/hr_network.lo: ../../include/net-snmp/agent/table_iterator.h
+./host/hr_network.lo: ../../include/net-snmp/agent/table_container.h
+./host/hr_network.lo: ../../include/net-snmp/agent/table_array.h
+./host/hr_network.lo: ../../include/net-snmp/agent/mfd.h
+./host/hr_network.lo: ../../include/net-snmp/data_access/interface.h
+./host/hr_network.lo: host_res.h mibII/interfaces.h
+./host/hr_network.lo: ./host/hr_network.h
+./host/hr_other.lo: ../../include/net-snmp/net-snmp-config.h
+./host/hr_other.lo: ../../include/net-snmp/system/linux.h
+./host/hr_other.lo: ../../include/net-snmp/system/sysv.h
+./host/hr_other.lo: ../../include/net-snmp/system/generic.h
+./host/hr_other.lo: ../../include/net-snmp/machine/generic.h host_res.h
+./host/hr_other.lo: ../../include/net-snmp/net-snmp-includes.h
+./host/hr_other.lo: ../../include/net-snmp/definitions.h
+./host/hr_other.lo: ../../include/net-snmp/types.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp_api.h
+./host/hr_other.lo: ../../include/net-snmp/library/asn1.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp_impl.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp-tc.h
+./host/hr_other.lo: ../../include/net-snmp/utilities.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp_client.h
+./host/hr_other.lo: ../../include/net-snmp/library/system.h
+./host/hr_other.lo: ../../include/net-snmp/library/tools.h
+./host/hr_other.lo: ../../include/net-snmp/library/int64.h
+./host/hr_other.lo: ../../include/net-snmp/library/mt_support.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp_alarm.h
+./host/hr_other.lo: ../../include/net-snmp/library/callback.h
+./host/hr_other.lo: ../../include/net-snmp/library/data_list.h
+./host/hr_other.lo: ../../include/net-snmp/library/oid_stash.h
+./host/hr_other.lo: ../../include/net-snmp/library/check_varbind.h
+./host/hr_other.lo: ../../include/net-snmp/library/container.h
+./host/hr_other.lo: ../../include/net-snmp/library/factory.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp_logging.h
+./host/hr_other.lo: ../../include/net-snmp/library/container_binary_array.h
+./host/hr_other.lo: ../../include/net-snmp/library/container_list_ssll.h
+./host/hr_other.lo: ../../include/net-snmp/library/container_iterator.h
+./host/hr_other.lo: ../../include/net-snmp/library/container.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp_assert.h
+./host/hr_other.lo: ../../include/net-snmp/version.h
+./host/hr_other.lo: ../../include/net-snmp/session_api.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp_transport.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp_service.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./host/hr_other.lo: ../../include/net-snmp/library/ucd_compat.h
+./host/hr_other.lo: ../../include/net-snmp/pdu_api.h
+./host/hr_other.lo: ../../include/net-snmp/mib_api.h
+./host/hr_other.lo: ../../include/net-snmp/library/mib.h
+./host/hr_other.lo: ../../include/net-snmp/library/parse.h
+./host/hr_other.lo: ../../include/net-snmp/varbind_api.h
+./host/hr_other.lo: ../../include/net-snmp/config_api.h
+./host/hr_other.lo: ../../include/net-snmp/library/read_config.h
+./host/hr_other.lo: ../../include/net-snmp/library/default_store.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp_enum.h
+./host/hr_other.lo: ../../include/net-snmp/library/vacm.h
+./host/hr_other.lo: ../../include/net-snmp/output_api.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp_debug.h
+./host/hr_other.lo: ../../include/net-snmp/snmpv3_api.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmpv3.h
+./host/hr_other.lo: ../../include/net-snmp/library/transform_oids.h
+./host/hr_other.lo: ../../include/net-snmp/library/keytools.h
+./host/hr_other.lo: ../../include/net-snmp/library/scapi.h
+./host/hr_other.lo: ../../include/net-snmp/library/lcd_time.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmp_secmod.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./host/hr_other.lo: ../../include/net-snmp/library/snmpusm.h
+./host/hr_other.lo: ../../include/net-snmp/agent/snmp_agent.h
+./host/hr_other.lo: ../../include/net-snmp/agent/agent_handler.h
+./host/hr_other.lo: ../../include/net-snmp/agent/snmp_vars.h
+./host/hr_other.lo: ../../include/net-snmp/agent/var_struct.h
+./host/hr_other.lo: ../../include/net-snmp/agent/agent_registry.h
+./host/hr_other.lo: ../../include/net-snmp/library/fd_event_manager.h
+./host/hr_other.lo: ./host/hr_other.h
+./host/hr_partition.lo: ../../include/net-snmp/net-snmp-config.h
+./host/hr_partition.lo: ../../include/net-snmp/system/linux.h
+./host/hr_partition.lo: ../../include/net-snmp/system/sysv.h
+./host/hr_partition.lo: ../../include/net-snmp/system/generic.h
+./host/hr_partition.lo: ../../include/net-snmp/machine/generic.h
+./host/hr_partition.lo: host_res.h
+./host/hr_partition.lo: ../../include/net-snmp/net-snmp-includes.h
+./host/hr_partition.lo: ../../include/net-snmp/definitions.h
+./host/hr_partition.lo: ../../include/net-snmp/types.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp_api.h
+./host/hr_partition.lo: ../../include/net-snmp/library/asn1.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp_impl.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp-tc.h
+./host/hr_partition.lo: ../../include/net-snmp/utilities.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp_client.h
+./host/hr_partition.lo: ../../include/net-snmp/library/system.h
+./host/hr_partition.lo: ../../include/net-snmp/library/tools.h
+./host/hr_partition.lo: ../../include/net-snmp/library/int64.h
+./host/hr_partition.lo: ../../include/net-snmp/library/mt_support.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp_alarm.h
+./host/hr_partition.lo: ../../include/net-snmp/library/callback.h
+./host/hr_partition.lo: ../../include/net-snmp/library/data_list.h
+./host/hr_partition.lo: ../../include/net-snmp/library/oid_stash.h
+./host/hr_partition.lo: ../../include/net-snmp/library/check_varbind.h
+./host/hr_partition.lo: ../../include/net-snmp/library/container.h
+./host/hr_partition.lo: ../../include/net-snmp/library/factory.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp_logging.h
+./host/hr_partition.lo: ../../include/net-snmp/library/container_binary_array.h
+./host/hr_partition.lo: ../../include/net-snmp/library/container_list_ssll.h
+./host/hr_partition.lo: ../../include/net-snmp/library/container_iterator.h
+./host/hr_partition.lo: ../../include/net-snmp/library/container.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp_assert.h
+./host/hr_partition.lo: ../../include/net-snmp/version.h
+./host/hr_partition.lo: ../../include/net-snmp/session_api.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp_transport.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp_service.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./host/hr_partition.lo: ../../include/net-snmp/library/ucd_compat.h
+./host/hr_partition.lo: ../../include/net-snmp/pdu_api.h
+./host/hr_partition.lo: ../../include/net-snmp/mib_api.h
+./host/hr_partition.lo: ../../include/net-snmp/library/mib.h
+./host/hr_partition.lo: ../../include/net-snmp/library/parse.h
+./host/hr_partition.lo: ../../include/net-snmp/varbind_api.h
+./host/hr_partition.lo: ../../include/net-snmp/config_api.h
+./host/hr_partition.lo: ../../include/net-snmp/library/read_config.h
+./host/hr_partition.lo: ../../include/net-snmp/library/default_store.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp_enum.h
+./host/hr_partition.lo: ../../include/net-snmp/library/vacm.h
+./host/hr_partition.lo: ../../include/net-snmp/output_api.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp_debug.h
+./host/hr_partition.lo: ../../include/net-snmp/snmpv3_api.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmpv3.h
+./host/hr_partition.lo: ../../include/net-snmp/library/transform_oids.h
+./host/hr_partition.lo: ../../include/net-snmp/library/keytools.h
+./host/hr_partition.lo: ../../include/net-snmp/library/scapi.h
+./host/hr_partition.lo: ../../include/net-snmp/library/lcd_time.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmp_secmod.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./host/hr_partition.lo: ../../include/net-snmp/library/snmpusm.h
+./host/hr_partition.lo: ../../include/net-snmp/agent/snmp_agent.h
+./host/hr_partition.lo: ../../include/net-snmp/agent/agent_handler.h
+./host/hr_partition.lo: ../../include/net-snmp/agent/snmp_vars.h
+./host/hr_partition.lo: ../../include/net-snmp/agent/var_struct.h
+./host/hr_partition.lo: ../../include/net-snmp/agent/agent_registry.h
+./host/hr_partition.lo: ../../include/net-snmp/library/fd_event_manager.h
+./host/hr_partition.lo: ./host/hr_partition.h
+./host/hr_partition.lo: ./host/hr_filesys.h ./host/hr_disk.h
+./host/hr_print.lo: ../../include/net-snmp/net-snmp-config.h
+./host/hr_print.lo: ../../include/net-snmp/system/linux.h
+./host/hr_print.lo: ../../include/net-snmp/system/sysv.h
+./host/hr_print.lo: ../../include/net-snmp/system/generic.h
+./host/hr_print.lo: ../../include/net-snmp/machine/generic.h
+./host/hr_print.lo: host_res.h
+./host/hr_print.lo: ../../include/net-snmp/net-snmp-includes.h
+./host/hr_print.lo: ../../include/net-snmp/definitions.h
+./host/hr_print.lo: ../../include/net-snmp/types.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp_api.h
+./host/hr_print.lo: ../../include/net-snmp/library/asn1.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp_impl.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp-tc.h
+./host/hr_print.lo: ../../include/net-snmp/utilities.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp_client.h
+./host/hr_print.lo: ../../include/net-snmp/library/system.h
+./host/hr_print.lo: ../../include/net-snmp/library/tools.h
+./host/hr_print.lo: ../../include/net-snmp/library/int64.h
+./host/hr_print.lo: ../../include/net-snmp/library/mt_support.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp_alarm.h
+./host/hr_print.lo: ../../include/net-snmp/library/callback.h
+./host/hr_print.lo: ../../include/net-snmp/library/data_list.h
+./host/hr_print.lo: ../../include/net-snmp/library/oid_stash.h
+./host/hr_print.lo: ../../include/net-snmp/library/check_varbind.h
+./host/hr_print.lo: ../../include/net-snmp/library/container.h
+./host/hr_print.lo: ../../include/net-snmp/library/factory.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp_logging.h
+./host/hr_print.lo: ../../include/net-snmp/library/container_binary_array.h
+./host/hr_print.lo: ../../include/net-snmp/library/container_list_ssll.h
+./host/hr_print.lo: ../../include/net-snmp/library/container_iterator.h
+./host/hr_print.lo: ../../include/net-snmp/library/container.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp_assert.h
+./host/hr_print.lo: ../../include/net-snmp/version.h
+./host/hr_print.lo: ../../include/net-snmp/session_api.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp_transport.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp_service.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./host/hr_print.lo: ../../include/net-snmp/library/ucd_compat.h
+./host/hr_print.lo: ../../include/net-snmp/pdu_api.h
+./host/hr_print.lo: ../../include/net-snmp/mib_api.h
+./host/hr_print.lo: ../../include/net-snmp/library/mib.h
+./host/hr_print.lo: ../../include/net-snmp/library/parse.h
+./host/hr_print.lo: ../../include/net-snmp/varbind_api.h
+./host/hr_print.lo: ../../include/net-snmp/config_api.h
+./host/hr_print.lo: ../../include/net-snmp/library/read_config.h
+./host/hr_print.lo: ../../include/net-snmp/library/default_store.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp_enum.h
+./host/hr_print.lo: ../../include/net-snmp/library/vacm.h
+./host/hr_print.lo: ../../include/net-snmp/output_api.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp_debug.h
+./host/hr_print.lo: ../../include/net-snmp/snmpv3_api.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmpv3.h
+./host/hr_print.lo: ../../include/net-snmp/library/transform_oids.h
+./host/hr_print.lo: ../../include/net-snmp/library/keytools.h
+./host/hr_print.lo: ../../include/net-snmp/library/scapi.h
+./host/hr_print.lo: ../../include/net-snmp/library/lcd_time.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmp_secmod.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./host/hr_print.lo: ../../include/net-snmp/library/snmpusm.h
+./host/hr_print.lo: ../../include/net-snmp/agent/snmp_agent.h
+./host/hr_print.lo: ../../include/net-snmp/agent/agent_handler.h
+./host/hr_print.lo: ../../include/net-snmp/agent/snmp_vars.h
+./host/hr_print.lo: ../../include/net-snmp/agent/var_struct.h
+./host/hr_print.lo: ../../include/net-snmp/agent/agent_registry.h
+./host/hr_print.lo: ../../include/net-snmp/library/fd_event_manager.h
+./host/hr_print.lo: ./host/hr_print.h struct.h
+./host/hr_print.lo: util_funcs.h
+./host/hr_proc.lo: ../../include/net-snmp/net-snmp-config.h
+./host/hr_proc.lo: ../../include/net-snmp/system/linux.h
+./host/hr_proc.lo: ../../include/net-snmp/system/sysv.h
+./host/hr_proc.lo: ../../include/net-snmp/system/generic.h
+./host/hr_proc.lo: ../../include/net-snmp/machine/generic.h
+./host/hr_proc.lo: ../../include/net-snmp/net-snmp-includes.h
+./host/hr_proc.lo: ../../include/net-snmp/definitions.h
+./host/hr_proc.lo: ../../include/net-snmp/types.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp_api.h
+./host/hr_proc.lo: ../../include/net-snmp/library/asn1.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp_impl.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp-tc.h
+./host/hr_proc.lo: ../../include/net-snmp/utilities.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp_client.h
+./host/hr_proc.lo: ../../include/net-snmp/library/system.h
+./host/hr_proc.lo: ../../include/net-snmp/library/tools.h
+./host/hr_proc.lo: ../../include/net-snmp/library/int64.h
+./host/hr_proc.lo: ../../include/net-snmp/library/mt_support.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp_alarm.h
+./host/hr_proc.lo: ../../include/net-snmp/library/callback.h
+./host/hr_proc.lo: ../../include/net-snmp/library/data_list.h
+./host/hr_proc.lo: ../../include/net-snmp/library/oid_stash.h
+./host/hr_proc.lo: ../../include/net-snmp/library/check_varbind.h
+./host/hr_proc.lo: ../../include/net-snmp/library/container.h
+./host/hr_proc.lo: ../../include/net-snmp/library/factory.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp_logging.h
+./host/hr_proc.lo: ../../include/net-snmp/library/container_binary_array.h
+./host/hr_proc.lo: ../../include/net-snmp/library/container_list_ssll.h
+./host/hr_proc.lo: ../../include/net-snmp/library/container_iterator.h
+./host/hr_proc.lo: ../../include/net-snmp/library/container.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp_assert.h
+./host/hr_proc.lo: ../../include/net-snmp/version.h
+./host/hr_proc.lo: ../../include/net-snmp/session_api.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp_transport.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp_service.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./host/hr_proc.lo: ../../include/net-snmp/library/ucd_compat.h
+./host/hr_proc.lo: ../../include/net-snmp/pdu_api.h
+./host/hr_proc.lo: ../../include/net-snmp/mib_api.h
+./host/hr_proc.lo: ../../include/net-snmp/library/mib.h
+./host/hr_proc.lo: ../../include/net-snmp/library/parse.h
+./host/hr_proc.lo: ../../include/net-snmp/varbind_api.h
+./host/hr_proc.lo: ../../include/net-snmp/config_api.h
+./host/hr_proc.lo: ../../include/net-snmp/library/read_config.h
+./host/hr_proc.lo: ../../include/net-snmp/library/default_store.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp_enum.h
+./host/hr_proc.lo: ../../include/net-snmp/library/vacm.h
+./host/hr_proc.lo: ../../include/net-snmp/output_api.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp_debug.h
+./host/hr_proc.lo: ../../include/net-snmp/snmpv3_api.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmpv3.h
+./host/hr_proc.lo: ../../include/net-snmp/library/transform_oids.h
+./host/hr_proc.lo: ../../include/net-snmp/library/keytools.h
+./host/hr_proc.lo: ../../include/net-snmp/library/scapi.h
+./host/hr_proc.lo: ../../include/net-snmp/library/lcd_time.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmp_secmod.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./host/hr_proc.lo: ../../include/net-snmp/library/snmpusm.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/mib_module_config.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/agent_module_config.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/snmp_agent.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/snmp_vars.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/agent_handler.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/var_struct.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/agent_registry.h
+./host/hr_proc.lo: ../../include/net-snmp/library/fd_event_manager.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/ds_agent.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/agent_read_config.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/agent_trap.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/all_helpers.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/instance.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/baby_steps.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/scalar.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/scalar_group.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/watcher.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/multiplexer.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/null.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/debug_handler.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/cache_handler.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/old_api.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/read_only.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/row_merge.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/serialize.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/mode_end_call.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/table.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/table_data.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/table_dataset.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/table_tdata.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/table_iterator.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/table_container.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/table_array.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/mfd.h
+./host/hr_proc.lo: host_res.h ./host/hr_proc.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/auto_nlist.h
+./host/hr_proc.lo: ../../include/net-snmp/agent/hardware/cpu.h
+./host/hr_proc.lo: ucd-snmp/loadave.h mibdefs.h
+./host/hr_storage.lo: ../../include/net-snmp/net-snmp-config.h
+./host/hr_storage.lo: ../../include/net-snmp/system/linux.h
+./host/hr_storage.lo: ../../include/net-snmp/system/sysv.h
+./host/hr_storage.lo: ../../include/net-snmp/system/generic.h
+./host/hr_storage.lo: ../../include/net-snmp/machine/generic.h
+./host/hr_storage.lo: host_res.h
+./host/hr_storage.lo: ../../include/net-snmp/net-snmp-includes.h
+./host/hr_storage.lo: ../../include/net-snmp/definitions.h
+./host/hr_storage.lo: ../../include/net-snmp/types.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp_api.h
+./host/hr_storage.lo: ../../include/net-snmp/library/asn1.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp_impl.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp-tc.h
+./host/hr_storage.lo: ../../include/net-snmp/utilities.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp_client.h
+./host/hr_storage.lo: ../../include/net-snmp/library/system.h
+./host/hr_storage.lo: ../../include/net-snmp/library/tools.h
+./host/hr_storage.lo: ../../include/net-snmp/library/int64.h
+./host/hr_storage.lo: ../../include/net-snmp/library/mt_support.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp_alarm.h
+./host/hr_storage.lo: ../../include/net-snmp/library/callback.h
+./host/hr_storage.lo: ../../include/net-snmp/library/data_list.h
+./host/hr_storage.lo: ../../include/net-snmp/library/oid_stash.h
+./host/hr_storage.lo: ../../include/net-snmp/library/check_varbind.h
+./host/hr_storage.lo: ../../include/net-snmp/library/container.h
+./host/hr_storage.lo: ../../include/net-snmp/library/factory.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp_logging.h
+./host/hr_storage.lo: ../../include/net-snmp/library/container_binary_array.h
+./host/hr_storage.lo: ../../include/net-snmp/library/container_list_ssll.h
+./host/hr_storage.lo: ../../include/net-snmp/library/container_iterator.h
+./host/hr_storage.lo: ../../include/net-snmp/library/container.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp_assert.h
+./host/hr_storage.lo: ../../include/net-snmp/version.h
+./host/hr_storage.lo: ../../include/net-snmp/session_api.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp_transport.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp_service.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./host/hr_storage.lo: ../../include/net-snmp/library/ucd_compat.h
+./host/hr_storage.lo: ../../include/net-snmp/pdu_api.h
+./host/hr_storage.lo: ../../include/net-snmp/mib_api.h
+./host/hr_storage.lo: ../../include/net-snmp/library/mib.h
+./host/hr_storage.lo: ../../include/net-snmp/library/parse.h
+./host/hr_storage.lo: ../../include/net-snmp/varbind_api.h
+./host/hr_storage.lo: ../../include/net-snmp/config_api.h
+./host/hr_storage.lo: ../../include/net-snmp/library/read_config.h
+./host/hr_storage.lo: ../../include/net-snmp/library/default_store.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp_enum.h
+./host/hr_storage.lo: ../../include/net-snmp/library/vacm.h
+./host/hr_storage.lo: ../../include/net-snmp/output_api.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp_debug.h
+./host/hr_storage.lo: ../../include/net-snmp/snmpv3_api.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmpv3.h
+./host/hr_storage.lo: ../../include/net-snmp/library/transform_oids.h
+./host/hr_storage.lo: ../../include/net-snmp/library/keytools.h
+./host/hr_storage.lo: ../../include/net-snmp/library/scapi.h
+./host/hr_storage.lo: ../../include/net-snmp/library/lcd_time.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmp_secmod.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./host/hr_storage.lo: ../../include/net-snmp/library/snmpusm.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/snmp_agent.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/agent_handler.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/snmp_vars.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/var_struct.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/agent_registry.h
+./host/hr_storage.lo: ../../include/net-snmp/library/fd_event_manager.h
+./host/hr_storage.lo: ./host/hr_storage.h
+./host/hr_storage.lo: ./host/hr_filesys.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/auto_nlist.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/mib_module_config.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/agent_module_config.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/ds_agent.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/agent_read_config.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/agent_trap.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/all_helpers.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/instance.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/baby_steps.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/scalar.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/scalar_group.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/watcher.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/multiplexer.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/null.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/debug_handler.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/cache_handler.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/old_api.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/read_only.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/row_merge.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/serialize.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/mode_end_call.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/table.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/table_data.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/table_dataset.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/table_tdata.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/table_iterator.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/table_container.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/table_array.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/mfd.h
+./host/hr_storage.lo: ../../include/net-snmp/agent/hardware/memory.h
+./host/hr_swinst.lo: ../../include/net-snmp/net-snmp-config.h
+./host/hr_swinst.lo: ../../include/net-snmp/system/linux.h
+./host/hr_swinst.lo: ../../include/net-snmp/system/sysv.h
+./host/hr_swinst.lo: ../../include/net-snmp/system/generic.h
+./host/hr_swinst.lo: ../../include/net-snmp/machine/generic.h
+./host/hr_swinst.lo: host_res.h
+./host/hr_swinst.lo: ../../include/net-snmp/net-snmp-includes.h
+./host/hr_swinst.lo: ../../include/net-snmp/definitions.h
+./host/hr_swinst.lo: ../../include/net-snmp/types.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp_api.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/asn1.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp_impl.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp-tc.h
+./host/hr_swinst.lo: ../../include/net-snmp/utilities.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp_client.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/system.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/tools.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/int64.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/mt_support.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp_alarm.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/callback.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/data_list.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/oid_stash.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/check_varbind.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/container.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/factory.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp_logging.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/container_binary_array.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/container_list_ssll.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/container_iterator.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/container.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp_assert.h
+./host/hr_swinst.lo: ../../include/net-snmp/version.h
+./host/hr_swinst.lo: ../../include/net-snmp/session_api.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp_transport.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp_service.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/ucd_compat.h
+./host/hr_swinst.lo: ../../include/net-snmp/pdu_api.h
+./host/hr_swinst.lo: ../../include/net-snmp/mib_api.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/mib.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/parse.h
+./host/hr_swinst.lo: ../../include/net-snmp/varbind_api.h
+./host/hr_swinst.lo: ../../include/net-snmp/config_api.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/read_config.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/default_store.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp_enum.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/vacm.h
+./host/hr_swinst.lo: ../../include/net-snmp/output_api.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp_debug.h
+./host/hr_swinst.lo: ../../include/net-snmp/snmpv3_api.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmpv3.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/transform_oids.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/keytools.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/scapi.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/lcd_time.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmp_secmod.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/snmpusm.h
+./host/hr_swinst.lo: ../../include/net-snmp/agent/snmp_agent.h
+./host/hr_swinst.lo: ../../include/net-snmp/agent/agent_handler.h
+./host/hr_swinst.lo: ../../include/net-snmp/agent/snmp_vars.h
+./host/hr_swinst.lo: ../../include/net-snmp/agent/var_struct.h
+./host/hr_swinst.lo: ../../include/net-snmp/agent/agent_registry.h
+./host/hr_swinst.lo: ../../include/net-snmp/library/fd_event_manager.h
+./host/hr_swinst.lo: ./host/hr_swinst.h
+./host/hr_swrun.lo: ../../include/net-snmp/net-snmp-config.h
+./host/hr_swrun.lo: ../../include/net-snmp/system/linux.h
+./host/hr_swrun.lo: ../../include/net-snmp/system/sysv.h
+./host/hr_swrun.lo: ../../include/net-snmp/system/generic.h
+./host/hr_swrun.lo: ../../include/net-snmp/machine/generic.h
+./host/hr_swrun.lo: ../../include/net-snmp/output_api.h
+./host/hr_swrun.lo: ../../include/net-snmp/types.h
+./host/hr_swrun.lo: ../../include/net-snmp/definitions.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp_api.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/asn1.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp_impl.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp-tc.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp_client.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp_debug.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp_logging.h
+./host/hr_swrun.lo: host_res.h
+./host/hr_swrun.lo: ../../include/net-snmp/net-snmp-includes.h
+./host/hr_swrun.lo: ../../include/net-snmp/utilities.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/system.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/tools.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/int64.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/mt_support.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp_alarm.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/callback.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/data_list.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/oid_stash.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/check_varbind.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/container.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/factory.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/container_binary_array.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/container_list_ssll.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/container_iterator.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/container.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp_assert.h
+./host/hr_swrun.lo: ../../include/net-snmp/version.h
+./host/hr_swrun.lo: ../../include/net-snmp/session_api.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp_transport.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp_service.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/ucd_compat.h
+./host/hr_swrun.lo: ../../include/net-snmp/pdu_api.h
+./host/hr_swrun.lo: ../../include/net-snmp/mib_api.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/mib.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/parse.h
+./host/hr_swrun.lo: ../../include/net-snmp/varbind_api.h
+./host/hr_swrun.lo: ../../include/net-snmp/config_api.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/read_config.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/default_store.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp_enum.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/vacm.h
+./host/hr_swrun.lo: ../../include/net-snmp/snmpv3_api.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmpv3.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/transform_oids.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/keytools.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/scapi.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/lcd_time.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmp_secmod.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/snmpusm.h
+./host/hr_swrun.lo: ../../include/net-snmp/agent/snmp_agent.h
+./host/hr_swrun.lo: ../../include/net-snmp/agent/agent_handler.h
+./host/hr_swrun.lo: ../../include/net-snmp/agent/snmp_vars.h
+./host/hr_swrun.lo: ../../include/net-snmp/agent/var_struct.h
+./host/hr_swrun.lo: ../../include/net-snmp/agent/agent_registry.h
+./host/hr_swrun.lo: ../../include/net-snmp/library/fd_event_manager.h
+./host/hr_swrun.lo: ./host/hr_swrun.h
+./host/hr_swrun.lo: ../../include/net-snmp/agent/auto_nlist.h
+./host/hr_swrun.lo: ../../agent/kernel.h
+./host/hr_system.lo: ../../include/net-snmp/net-snmp-config.h
+./host/hr_system.lo: ../../include/net-snmp/system/linux.h
+./host/hr_system.lo: ../../include/net-snmp/system/sysv.h
+./host/hr_system.lo: ../../include/net-snmp/system/generic.h
+./host/hr_system.lo: ../../include/net-snmp/machine/generic.h
+./host/hr_system.lo: ../../include/net-snmp/net-snmp-includes.h
+./host/hr_system.lo: ../../include/net-snmp/definitions.h
+./host/hr_system.lo: ../../include/net-snmp/types.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp_api.h
+./host/hr_system.lo: ../../include/net-snmp/library/asn1.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp_impl.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp-tc.h
+./host/hr_system.lo: ../../include/net-snmp/utilities.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp_client.h
+./host/hr_system.lo: ../../include/net-snmp/library/system.h
+./host/hr_system.lo: ../../include/net-snmp/library/tools.h
+./host/hr_system.lo: ../../include/net-snmp/library/int64.h
+./host/hr_system.lo: ../../include/net-snmp/library/mt_support.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp_alarm.h
+./host/hr_system.lo: ../../include/net-snmp/library/callback.h
+./host/hr_system.lo: ../../include/net-snmp/library/data_list.h
+./host/hr_system.lo: ../../include/net-snmp/library/oid_stash.h
+./host/hr_system.lo: ../../include/net-snmp/library/check_varbind.h
+./host/hr_system.lo: ../../include/net-snmp/library/container.h
+./host/hr_system.lo: ../../include/net-snmp/library/factory.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp_logging.h
+./host/hr_system.lo: ../../include/net-snmp/library/container_binary_array.h
+./host/hr_system.lo: ../../include/net-snmp/library/container_list_ssll.h
+./host/hr_system.lo: ../../include/net-snmp/library/container_iterator.h
+./host/hr_system.lo: ../../include/net-snmp/library/container.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp_assert.h
+./host/hr_system.lo: ../../include/net-snmp/version.h
+./host/hr_system.lo: ../../include/net-snmp/session_api.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp_transport.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp_service.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./host/hr_system.lo: ../../include/net-snmp/library/ucd_compat.h
+./host/hr_system.lo: ../../include/net-snmp/pdu_api.h
+./host/hr_system.lo: ../../include/net-snmp/mib_api.h
+./host/hr_system.lo: ../../include/net-snmp/library/mib.h
+./host/hr_system.lo: ../../include/net-snmp/library/parse.h
+./host/hr_system.lo: ../../include/net-snmp/varbind_api.h
+./host/hr_system.lo: ../../include/net-snmp/config_api.h
+./host/hr_system.lo: ../../include/net-snmp/library/read_config.h
+./host/hr_system.lo: ../../include/net-snmp/library/default_store.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp_enum.h
+./host/hr_system.lo: ../../include/net-snmp/library/vacm.h
+./host/hr_system.lo: ../../include/net-snmp/output_api.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp_debug.h
+./host/hr_system.lo: ../../include/net-snmp/snmpv3_api.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmpv3.h
+./host/hr_system.lo: ../../include/net-snmp/library/transform_oids.h
+./host/hr_system.lo: ../../include/net-snmp/library/keytools.h
+./host/hr_system.lo: ../../include/net-snmp/library/scapi.h
+./host/hr_system.lo: ../../include/net-snmp/library/lcd_time.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmp_secmod.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./host/hr_system.lo: ../../include/net-snmp/library/snmpusm.h
+./host/hr_system.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./host/hr_system.lo: ../../include/net-snmp/agent/mib_module_config.h
+./host/hr_system.lo: ../../include/net-snmp/agent/agent_module_config.h
+./host/hr_system.lo: ../../include/net-snmp/agent/snmp_agent.h
+./host/hr_system.lo: ../../include/net-snmp/agent/snmp_vars.h
+./host/hr_system.lo: ../../include/net-snmp/agent/agent_handler.h
+./host/hr_system.lo: ../../include/net-snmp/agent/var_struct.h
+./host/hr_system.lo: ../../include/net-snmp/agent/agent_registry.h
+./host/hr_system.lo: ../../include/net-snmp/library/fd_event_manager.h
+./host/hr_system.lo: ../../include/net-snmp/agent/ds_agent.h
+./host/hr_system.lo: ../../include/net-snmp/agent/agent_read_config.h
+./host/hr_system.lo: ../../include/net-snmp/agent/agent_trap.h
+./host/hr_system.lo: ../../include/net-snmp/agent/all_helpers.h
+./host/hr_system.lo: ../../include/net-snmp/agent/instance.h
+./host/hr_system.lo: ../../include/net-snmp/agent/baby_steps.h
+./host/hr_system.lo: ../../include/net-snmp/agent/scalar.h
+./host/hr_system.lo: ../../include/net-snmp/agent/scalar_group.h
+./host/hr_system.lo: ../../include/net-snmp/agent/watcher.h
+./host/hr_system.lo: ../../include/net-snmp/agent/multiplexer.h
+./host/hr_system.lo: ../../include/net-snmp/agent/null.h
+./host/hr_system.lo: ../../include/net-snmp/agent/debug_handler.h
+./host/hr_system.lo: ../../include/net-snmp/agent/cache_handler.h
+./host/hr_system.lo: ../../include/net-snmp/agent/old_api.h
+./host/hr_system.lo: ../../include/net-snmp/agent/read_only.h
+./host/hr_system.lo: ../../include/net-snmp/agent/row_merge.h
+./host/hr_system.lo: ../../include/net-snmp/agent/serialize.h
+./host/hr_system.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./host/hr_system.lo: ../../include/net-snmp/agent/mode_end_call.h
+./host/hr_system.lo: ../../include/net-snmp/agent/table.h
+./host/hr_system.lo: ../../include/net-snmp/agent/table_data.h
+./host/hr_system.lo: ../../include/net-snmp/agent/table_dataset.h
+./host/hr_system.lo: ../../include/net-snmp/agent/table_tdata.h
+./host/hr_system.lo: ../../include/net-snmp/agent/table_iterator.h
+./host/hr_system.lo: ../../include/net-snmp/agent/table_container.h
+./host/hr_system.lo: ../../include/net-snmp/agent/table_array.h
+./host/hr_system.lo: ../../include/net-snmp/agent/mfd.h host.h host_res.h
+./host/hr_system.lo: ./host/hr_system.h
+./host/hr_system.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/net-snmp-config.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/system/linux.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/system/sysv.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/system/generic.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/machine/generic.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/net-snmp-includes.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/definitions.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/types.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp_api.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/asn1.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp_impl.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp-tc.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/utilities.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp_client.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/system.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/tools.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/int64.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/mt_support.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/callback.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/data_list.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/oid_stash.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/check_varbind.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/container.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/factory.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp_logging.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/container_binary_array.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/container_iterator.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/container.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp_assert.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/version.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/session_api.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp_transport.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp_service.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/ucd_compat.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/pdu_api.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/mib_api.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/mib.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/parse.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/varbind_api.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/config_api.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/read_config.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/default_store.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp_enum.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/vacm.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/output_api.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp_debug.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/snmpv3_api.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmpv3.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/transform_oids.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/keytools.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/scapi.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/lcd_time.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/snmpusm.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/agent_handler.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/var_struct.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/agent_registry.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/ds_agent.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/agent_trap.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/all_helpers.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/instance.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/baby_steps.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/scalar.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/scalar_group.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/watcher.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/multiplexer.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/null.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/debug_handler.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/cache_handler.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/old_api.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/read_only.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/row_merge.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/serialize.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/table.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/table_data.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/table_dataset.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/table_tdata.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/table_iterator.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/table_container.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/table_array.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/agent/mfd.h
+./ip-mib/ip_scalars.lo: ../../include/net-snmp/data_access/ip_scalars.h
+./ip-mib/ip_scalars.lo: ./ip-mib/ip_scalars.h
+./mibII/at.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/at.lo: ../../include/net-snmp/system/linux.h
+./mibII/at.lo: ../../include/net-snmp/system/sysv.h
+./mibII/at.lo: ../../include/net-snmp/system/generic.h
+./mibII/at.lo: ../../include/net-snmp/machine/generic.h
+./mibII/at.lo: ./mibII/mibII_common.h
+./mibII/at.lo: ../../agent/kernel.h
+./mibII/at.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/at.lo: ../../include/net-snmp/definitions.h
+./mibII/at.lo: ../../include/net-snmp/types.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/at.lo: ../../include/net-snmp/library/asn1.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/at.lo: ../../include/net-snmp/utilities.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/at.lo: ../../include/net-snmp/library/system.h
+./mibII/at.lo: ../../include/net-snmp/library/tools.h
+./mibII/at.lo: ../../include/net-snmp/library/int64.h
+./mibII/at.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/at.lo: ../../include/net-snmp/library/callback.h
+./mibII/at.lo: ../../include/net-snmp/library/data_list.h
+./mibII/at.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/at.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/at.lo: ../../include/net-snmp/library/container.h
+./mibII/at.lo: ../../include/net-snmp/library/factory.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/at.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/at.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/at.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/at.lo: ../../include/net-snmp/library/container.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/at.lo: ../../include/net-snmp/version.h
+./mibII/at.lo: ../../include/net-snmp/session_api.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/at.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/at.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/at.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/at.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/at.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/at.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/at.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/at.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/at.lo: ../../include/net-snmp/pdu_api.h
+./mibII/at.lo: ../../include/net-snmp/mib_api.h
+./mibII/at.lo: ../../include/net-snmp/library/mib.h
+./mibII/at.lo: ../../include/net-snmp/library/parse.h
+./mibII/at.lo: ../../include/net-snmp/varbind_api.h
+./mibII/at.lo: ../../include/net-snmp/config_api.h
+./mibII/at.lo: ../../include/net-snmp/library/read_config.h
+./mibII/at.lo: ../../include/net-snmp/library/default_store.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/at.lo: ../../include/net-snmp/library/vacm.h
+./mibII/at.lo: ../../include/net-snmp/output_api.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/at.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/at.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/at.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/at.lo: ../../include/net-snmp/library/keytools.h
+./mibII/at.lo: ../../include/net-snmp/library/scapi.h
+./mibII/at.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/at.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/at.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/at.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/at.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/at.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/at.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/at.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/at.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/at.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/at.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/at.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/at.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/at.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/at.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/at.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/at.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/at.lo: ../../include/net-snmp/agent/instance.h
+./mibII/at.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/at.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/at.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/at.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/at.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/at.lo: ../../include/net-snmp/agent/null.h
+./mibII/at.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/at.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/at.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/at.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/at.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/at.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/at.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/at.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/at.lo: ../../include/net-snmp/agent/table.h
+./mibII/at.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/at.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/at.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/at.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/at.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/at.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/at.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/at.lo: ../../include/net-snmp/agent/auto_nlist.h ./mibII/at.h
+./mibII/at.lo: ./mibII/interfaces.h
+./mibII/at.lo: ../../include/net-snmp/data_access/interface.h
+./mibII/icmp.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/icmp.lo: ../../include/net-snmp/system/linux.h
+./mibII/icmp.lo: ../../include/net-snmp/system/sysv.h
+./mibII/icmp.lo: ../../include/net-snmp/system/generic.h
+./mibII/icmp.lo: ../../include/net-snmp/machine/generic.h
+./mibII/icmp.lo: ./mibII/mibII_common.h
+./mibII/icmp.lo: ../../agent/kernel.h
+./mibII/icmp.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/icmp.lo: ../../include/net-snmp/definitions.h
+./mibII/icmp.lo: ../../include/net-snmp/types.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/icmp.lo: ../../include/net-snmp/library/asn1.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/icmp.lo: ../../include/net-snmp/utilities.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/icmp.lo: ../../include/net-snmp/library/system.h
+./mibII/icmp.lo: ../../include/net-snmp/library/tools.h
+./mibII/icmp.lo: ../../include/net-snmp/library/int64.h
+./mibII/icmp.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/icmp.lo: ../../include/net-snmp/library/callback.h
+./mibII/icmp.lo: ../../include/net-snmp/library/data_list.h
+./mibII/icmp.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/icmp.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/icmp.lo: ../../include/net-snmp/library/container.h
+./mibII/icmp.lo: ../../include/net-snmp/library/factory.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/icmp.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/icmp.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/icmp.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/icmp.lo: ../../include/net-snmp/library/container.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/icmp.lo: ../../include/net-snmp/version.h
+./mibII/icmp.lo: ../../include/net-snmp/session_api.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/icmp.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/icmp.lo: ../../include/net-snmp/pdu_api.h
+./mibII/icmp.lo: ../../include/net-snmp/mib_api.h
+./mibII/icmp.lo: ../../include/net-snmp/library/mib.h
+./mibII/icmp.lo: ../../include/net-snmp/library/parse.h
+./mibII/icmp.lo: ../../include/net-snmp/varbind_api.h
+./mibII/icmp.lo: ../../include/net-snmp/config_api.h
+./mibII/icmp.lo: ../../include/net-snmp/library/read_config.h
+./mibII/icmp.lo: ../../include/net-snmp/library/default_store.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/icmp.lo: ../../include/net-snmp/library/vacm.h
+./mibII/icmp.lo: ../../include/net-snmp/output_api.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/icmp.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/icmp.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/icmp.lo: ../../include/net-snmp/library/keytools.h
+./mibII/icmp.lo: ../../include/net-snmp/library/scapi.h
+./mibII/icmp.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/icmp.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/icmp.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/instance.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/null.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/table.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/icmp.lo: ../../include/net-snmp/agent/auto_nlist.h util_funcs.h
+./mibII/icmp.lo: struct.h ./mibII/icmp.h ./mibII/sysORTable.h
+./mibII/interfaces.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/interfaces.lo: ../../include/net-snmp/system/linux.h
+./mibII/interfaces.lo: ../../include/net-snmp/system/sysv.h
+./mibII/interfaces.lo: ../../include/net-snmp/system/generic.h
+./mibII/interfaces.lo: ../../include/net-snmp/machine/generic.h
+./mibII/interfaces.lo: ../../agent/kernel.h
+./mibII/interfaces.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/interfaces.lo: ../../include/net-snmp/definitions.h
+./mibII/interfaces.lo: ../../include/net-snmp/types.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/asn1.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/interfaces.lo: ../../include/net-snmp/utilities.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/system.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/tools.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/int64.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/callback.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/data_list.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/container.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/factory.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/container.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/interfaces.lo: ../../include/net-snmp/version.h
+./mibII/interfaces.lo: ../../include/net-snmp/session_api.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/interfaces.lo: ../../include/net-snmp/pdu_api.h
+./mibII/interfaces.lo: ../../include/net-snmp/mib_api.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/mib.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/parse.h
+./mibII/interfaces.lo: ../../include/net-snmp/varbind_api.h
+./mibII/interfaces.lo: ../../include/net-snmp/config_api.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/read_config.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/default_store.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/vacm.h
+./mibII/interfaces.lo: ../../include/net-snmp/output_api.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/interfaces.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/keytools.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/scapi.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/interfaces.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/instance.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/null.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/table.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/interfaces.lo: ../../include/net-snmp/agent/auto_nlist.h
+./mibII/interfaces.lo: ../../include/net-snmp/data_access/interface.h
+./mibII/interfaces.lo: ./mibII/interfaces.h struct.h util_funcs.h
+./mibII/interfaces.lo: ./mibII/sysORTable.h
+./mibII/ip.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/ip.lo: ../../include/net-snmp/system/linux.h
+./mibII/ip.lo: ../../include/net-snmp/system/sysv.h
+./mibII/ip.lo: ../../include/net-snmp/system/generic.h
+./mibII/ip.lo: ../../include/net-snmp/machine/generic.h
+./mibII/ip.lo: ./mibII/mibII_common.h
+./mibII/ip.lo: ../../agent/kernel.h
+./mibII/ip.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/ip.lo: ../../include/net-snmp/definitions.h
+./mibII/ip.lo: ../../include/net-snmp/types.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/ip.lo: ../../include/net-snmp/library/asn1.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/ip.lo: ../../include/net-snmp/utilities.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/ip.lo: ../../include/net-snmp/library/system.h
+./mibII/ip.lo: ../../include/net-snmp/library/tools.h
+./mibII/ip.lo: ../../include/net-snmp/library/int64.h
+./mibII/ip.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/ip.lo: ../../include/net-snmp/library/callback.h
+./mibII/ip.lo: ../../include/net-snmp/library/data_list.h
+./mibII/ip.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/ip.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/ip.lo: ../../include/net-snmp/library/container.h
+./mibII/ip.lo: ../../include/net-snmp/library/factory.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/ip.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/ip.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/ip.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/ip.lo: ../../include/net-snmp/library/container.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/ip.lo: ../../include/net-snmp/version.h
+./mibII/ip.lo: ../../include/net-snmp/session_api.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/ip.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/ip.lo: ../../include/net-snmp/pdu_api.h
+./mibII/ip.lo: ../../include/net-snmp/mib_api.h
+./mibII/ip.lo: ../../include/net-snmp/library/mib.h
+./mibII/ip.lo: ../../include/net-snmp/library/parse.h
+./mibII/ip.lo: ../../include/net-snmp/varbind_api.h
+./mibII/ip.lo: ../../include/net-snmp/config_api.h
+./mibII/ip.lo: ../../include/net-snmp/library/read_config.h
+./mibII/ip.lo: ../../include/net-snmp/library/default_store.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/ip.lo: ../../include/net-snmp/library/vacm.h
+./mibII/ip.lo: ../../include/net-snmp/output_api.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/ip.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/ip.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/ip.lo: ../../include/net-snmp/library/keytools.h
+./mibII/ip.lo: ../../include/net-snmp/library/scapi.h
+./mibII/ip.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/ip.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/ip.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/ip.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/ip.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/ip.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/ip.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/ip.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/ip.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/ip.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/ip.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/ip.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/ip.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/ip.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/ip.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/ip.lo: ../../include/net-snmp/agent/instance.h
+./mibII/ip.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/ip.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/ip.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/ip.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/ip.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/ip.lo: ../../include/net-snmp/agent/null.h
+./mibII/ip.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/ip.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/ip.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/ip.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/ip.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/ip.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/ip.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/ip.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/ip.lo: ../../include/net-snmp/agent/table.h
+./mibII/ip.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/ip.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/ip.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/ip.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/ip.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/ip.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/ip.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/ip.lo: ../../include/net-snmp/agent/auto_nlist.h util_funcs.h
+./mibII/ip.lo: struct.h ./mibII/ip.h ./mibII/var_route.h
+./mibII/ip.lo: ./mibII/route_write.h ./mibII/at.h ./mibII/ipAddr.h
+./mibII/ip.lo: ./mibII/interfaces.h ./mibII/sysORTable.h
+./mibII/ipAddr.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/ipAddr.lo: ../../include/net-snmp/system/linux.h
+./mibII/ipAddr.lo: ../../include/net-snmp/system/sysv.h
+./mibII/ipAddr.lo: ../../include/net-snmp/system/generic.h
+./mibII/ipAddr.lo: ../../include/net-snmp/machine/generic.h
+./mibII/ipAddr.lo: ../../agent/kernel.h
+./mibII/ipAddr.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/ipAddr.lo: ../../include/net-snmp/definitions.h
+./mibII/ipAddr.lo: ../../include/net-snmp/types.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/asn1.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/ipAddr.lo: ../../include/net-snmp/utilities.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/system.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/tools.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/int64.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/callback.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/data_list.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/container.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/factory.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/container.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/ipAddr.lo: ../../include/net-snmp/version.h
+./mibII/ipAddr.lo: ../../include/net-snmp/session_api.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/ipAddr.lo: ../../include/net-snmp/pdu_api.h
+./mibII/ipAddr.lo: ../../include/net-snmp/mib_api.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/mib.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/parse.h
+./mibII/ipAddr.lo: ../../include/net-snmp/varbind_api.h
+./mibII/ipAddr.lo: ../../include/net-snmp/config_api.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/read_config.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/default_store.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/vacm.h
+./mibII/ipAddr.lo: ../../include/net-snmp/output_api.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/ipAddr.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/keytools.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/scapi.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/ipAddr.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/instance.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/null.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/table.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/ipAddr.lo: ../../include/net-snmp/agent/auto_nlist.h
+./mibII/ipAddr.lo: ../../include/net-snmp/data_access/interface.h
+./mibII/ipAddr.lo: ./mibII/ip.h ./mibII/var_route.h ./mibII/route_write.h
+./mibII/ipAddr.lo: ./mibII/at.h ./mibII/interfaces.h ./mibII/sysORTable.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/system/linux.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/system/sysv.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/system/generic.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/machine/generic.h
+./mibII/ipCidrRouteTable.lo: ./mibII/route_headers.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/definitions.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/types.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/asn1.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/utilities.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/system.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/tools.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/int64.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/callback.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/data_list.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/container.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/factory.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/container.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/version.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/session_api.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/pdu_api.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/mib_api.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/mib.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/parse.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/varbind_api.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/config_api.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/read_config.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/default_store.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/vacm.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/output_api.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/keytools.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/scapi.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/instance.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/null.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/table.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/ipCidrRouteTable.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/ipCidrRouteTable.lo: ./mibII/ipCidrRouteTable.h
+./mibII/ipCidrRouteTable.lo: ./mibII/ipCidrRouteTable_columns.h
+./mibII/ipCidrRouteTable.lo: ./mibII/ipCidrRouteTable_enums.h
+./mibII/ipCidrRouteTable.lo: ./mibII/ipCidrRouteTable_checkfns.h
+./mibII/ipCidrRouteTable.lo: ./mibII/ipCidrRouteTable_access.h
+./mibII/ipCidrRouteTable.lo: ./mibII/var_route.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/system/linux.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/system/sysv.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/system/generic.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/machine/generic.h
+./mibII/ipCidrRouteTable_access.lo: ./mibII/route_headers.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/definitions.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/types.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/asn1.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/utilities.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/system.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/tools.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/int64.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/callback.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/data_list.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/container.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/factory.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/container.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/version.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/session_api.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/pdu_api.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/mib_api.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/mib.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/parse.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/varbind_api.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/config_api.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/read_config.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/default_store.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/vacm.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/output_api.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/keytools.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/scapi.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/instance.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/null.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/table.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/ipCidrRouteTable_access.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/ipCidrRouteTable_access.lo: ./mibII/ipCidrRouteTable_access.h
+./mibII/ipCidrRouteTable_access.lo: ./mibII/ipCidrRouteTable_enums.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/system/linux.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/system/sysv.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/system/generic.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/machine/generic.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/definitions.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/types.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/asn1.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/utilities.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/system.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/tools.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/int64.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/callback.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/data_list.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/container.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/factory.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/container.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/version.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/session_api.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/pdu_api.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/mib_api.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/mib.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/parse.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/varbind_api.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/config_api.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/read_config.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/default_store.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/vacm.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/output_api.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/keytools.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/scapi.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/ipCidrRouteTable_checkfns.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/ipCidrRouteTable_checkfns.lo: ./mibII/ipCidrRouteTable_checkfns.h
+./mibII/ipCidrRouteTable_checkfns.lo: ./mibII/ipCidrRouteTable_enums.h
+./mibII/ipv6.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/ipv6.lo: ../../include/net-snmp/system/linux.h
+./mibII/ipv6.lo: ../../include/net-snmp/system/sysv.h
+./mibII/ipv6.lo: ../../include/net-snmp/system/generic.h
+./mibII/ipv6.lo: ../../include/net-snmp/machine/generic.h
+./mibII/ipv6.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/ipv6.lo: ../../include/net-snmp/definitions.h
+./mibII/ipv6.lo: ../../include/net-snmp/types.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/asn1.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/ipv6.lo: ../../include/net-snmp/utilities.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/system.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/tools.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/int64.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/callback.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/data_list.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/container.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/factory.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/container.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/ipv6.lo: ../../include/net-snmp/version.h
+./mibII/ipv6.lo: ../../include/net-snmp/session_api.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/ipv6.lo: ../../include/net-snmp/pdu_api.h
+./mibII/ipv6.lo: ../../include/net-snmp/mib_api.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/mib.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/parse.h
+./mibII/ipv6.lo: ../../include/net-snmp/varbind_api.h
+./mibII/ipv6.lo: ../../include/net-snmp/config_api.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/read_config.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/default_store.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/vacm.h
+./mibII/ipv6.lo: ../../include/net-snmp/output_api.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/ipv6.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/keytools.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/scapi.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/ipv6.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/instance.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/null.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/table.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/ipv6.lo: ../../include/net-snmp/agent/auto_nlist.h
+./mibII/ipv6.lo: ../../agent/kernel.h util_funcs.h struct.h ./mibII/ipv6.h
+./mibII/ipv6.lo: ./mibII/var_route.h ./mibII/route_write.h ./mibII/at.h
+./mibII/ipv6.lo: ./mibII/interfaces.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/system/linux.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/system/sysv.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/system/generic.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/machine/generic.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/definitions.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/types.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/asn1.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/utilities.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/system.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/tools.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/int64.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/callback.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/data_list.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/container.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/factory.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/container.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/version.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/session_api.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/pdu_api.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/mib_api.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/mib.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/parse.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/varbind_api.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/config_api.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/read_config.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/default_store.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/vacm.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/output_api.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/keytools.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/scapi.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/instance.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/null.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/table.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/kernel_linux.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h
+./mibII/kernel_linux.lo: struct.h
+./mibII/kernel_linux.lo: ./mibII/kernel_linux.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/system/linux.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/system/sysv.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/system/generic.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/machine/generic.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/definitions.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/types.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/asn1.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/utilities.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/system.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/tools.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/int64.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/callback.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/data_list.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/container.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/factory.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/container.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/version.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/session_api.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/pdu_api.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/mib_api.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/mib.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/parse.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/varbind_api.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/config_api.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/read_config.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/default_store.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/vacm.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/output_api.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/keytools.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/scapi.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/instance.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/null.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/table.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/mta_sendmail.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/mta_sendmail.lo: ./mibII/mta_sendmail.h
+./mibII/route_write.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/route_write.lo: ../../include/net-snmp/system/linux.h
+./mibII/route_write.lo: ../../include/net-snmp/system/sysv.h
+./mibII/route_write.lo: ../../include/net-snmp/system/generic.h
+./mibII/route_write.lo: ../../include/net-snmp/machine/generic.h
+./mibII/route_write.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/route_write.lo: ../../include/net-snmp/definitions.h
+./mibII/route_write.lo: ../../include/net-snmp/types.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/route_write.lo: ../../include/net-snmp/library/asn1.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/route_write.lo: ../../include/net-snmp/utilities.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/route_write.lo: ../../include/net-snmp/library/system.h
+./mibII/route_write.lo: ../../include/net-snmp/library/tools.h
+./mibII/route_write.lo: ../../include/net-snmp/library/int64.h
+./mibII/route_write.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/route_write.lo: ../../include/net-snmp/library/callback.h
+./mibII/route_write.lo: ../../include/net-snmp/library/data_list.h
+./mibII/route_write.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/route_write.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/route_write.lo: ../../include/net-snmp/library/container.h
+./mibII/route_write.lo: ../../include/net-snmp/library/factory.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/route_write.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/route_write.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/route_write.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/route_write.lo: ../../include/net-snmp/library/container.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/route_write.lo: ../../include/net-snmp/version.h
+./mibII/route_write.lo: ../../include/net-snmp/session_api.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/route_write.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/route_write.lo: ../../include/net-snmp/pdu_api.h
+./mibII/route_write.lo: ../../include/net-snmp/mib_api.h
+./mibII/route_write.lo: ../../include/net-snmp/library/mib.h
+./mibII/route_write.lo: ../../include/net-snmp/library/parse.h
+./mibII/route_write.lo: ../../include/net-snmp/varbind_api.h
+./mibII/route_write.lo: ../../include/net-snmp/config_api.h
+./mibII/route_write.lo: ../../include/net-snmp/library/read_config.h
+./mibII/route_write.lo: ../../include/net-snmp/library/default_store.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/route_write.lo: ../../include/net-snmp/library/vacm.h
+./mibII/route_write.lo: ../../include/net-snmp/output_api.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/route_write.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/route_write.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/route_write.lo: ../../include/net-snmp/library/keytools.h
+./mibII/route_write.lo: ../../include/net-snmp/library/scapi.h
+./mibII/route_write.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/route_write.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/route_write.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/instance.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/null.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/table.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/route_write.lo: ../../include/net-snmp/agent/mfd.h ./mibII/ip.h
+./mibII/route_write.lo: ./mibII/var_route.h ./mibII/route_write.h
+./mibII/route_write.lo: ./mibII/at.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/system/linux.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/system/sysv.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/system/generic.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/machine/generic.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/definitions.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/types.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/asn1.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/utilities.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/system.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/tools.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/int64.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/callback.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/data_list.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/container.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/factory.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/container.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/version.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/session_api.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/pdu_api.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/mib_api.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/mib.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/parse.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/varbind_api.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/config_api.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/read_config.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/default_store.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/vacm.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/output_api.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/keytools.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/scapi.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/instance.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/null.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/table.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/setSerialNo.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/setSerialNo.lo: ./mibII/setSerialNo.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/system/linux.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/system/sysv.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/system/generic.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/machine/generic.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/definitions.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/types.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/asn1.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/utilities.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/system.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/tools.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/int64.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/callback.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/data_list.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/container.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/factory.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/container.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/version.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/session_api.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/pdu_api.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/mib_api.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/mib.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/parse.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/varbind_api.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/config_api.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/read_config.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/default_store.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/vacm.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/output_api.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/keytools.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/scapi.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/instance.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/null.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/table.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/snmp_mib.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h struct.h
+./mibII/snmp_mib.lo: ./mibII/snmp_mib.h ./mibII/sysORTable.h
+./mibII/sysORTable.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/sysORTable.lo: ../../include/net-snmp/system/linux.h
+./mibII/sysORTable.lo: ../../include/net-snmp/system/sysv.h
+./mibII/sysORTable.lo: ../../include/net-snmp/system/generic.h
+./mibII/sysORTable.lo: ../../include/net-snmp/machine/generic.h
+./mibII/sysORTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/sysORTable.lo: ../../include/net-snmp/definitions.h
+./mibII/sysORTable.lo: ../../include/net-snmp/types.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/asn1.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/sysORTable.lo: ../../include/net-snmp/utilities.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/system.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/tools.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/int64.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/callback.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/data_list.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/container.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/factory.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/container.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/sysORTable.lo: ../../include/net-snmp/version.h
+./mibII/sysORTable.lo: ../../include/net-snmp/session_api.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/sysORTable.lo: ../../include/net-snmp/pdu_api.h
+./mibII/sysORTable.lo: ../../include/net-snmp/mib_api.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/mib.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/parse.h
+./mibII/sysORTable.lo: ../../include/net-snmp/varbind_api.h
+./mibII/sysORTable.lo: ../../include/net-snmp/config_api.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/read_config.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/default_store.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/vacm.h
+./mibII/sysORTable.lo: ../../include/net-snmp/output_api.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/sysORTable.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/keytools.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/scapi.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/sysORTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/instance.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/null.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/table.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/sysORTable.lo: ../../include/net-snmp/agent/agent_callbacks.h
+./mibII/sysORTable.lo: struct.h util_funcs.h ./mibII/sysORTable.h
+./mibII/sysORTable.lo: ../../agent/snmpd.h agentx/subagent.h agentx/client.h
+./mibII/system_mib.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/system_mib.lo: ../../include/net-snmp/system/linux.h
+./mibII/system_mib.lo: ../../include/net-snmp/system/sysv.h
+./mibII/system_mib.lo: ../../include/net-snmp/system/generic.h
+./mibII/system_mib.lo: ../../include/net-snmp/machine/generic.h
+./mibII/system_mib.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/system_mib.lo: ../../include/net-snmp/definitions.h
+./mibII/system_mib.lo: ../../include/net-snmp/types.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/asn1.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/system_mib.lo: ../../include/net-snmp/utilities.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/system.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/tools.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/int64.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/callback.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/data_list.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/container.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/factory.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/container.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/system_mib.lo: ../../include/net-snmp/version.h
+./mibII/system_mib.lo: ../../include/net-snmp/session_api.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/system_mib.lo: ../../include/net-snmp/pdu_api.h
+./mibII/system_mib.lo: ../../include/net-snmp/mib_api.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/mib.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/parse.h
+./mibII/system_mib.lo: ../../include/net-snmp/varbind_api.h
+./mibII/system_mib.lo: ../../include/net-snmp/config_api.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/read_config.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/default_store.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/vacm.h
+./mibII/system_mib.lo: ../../include/net-snmp/output_api.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/system_mib.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/keytools.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/scapi.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/system_mib.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/instance.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/null.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/table.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/system_mib.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h
+./mibII/system_mib.lo: struct.h ./mibII/system_mib.h ./mibII/sysORTable.h
+./mibII/tcp.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/tcp.lo: ../../include/net-snmp/system/linux.h
+./mibII/tcp.lo: ../../include/net-snmp/system/sysv.h
+./mibII/tcp.lo: ../../include/net-snmp/system/generic.h
+./mibII/tcp.lo: ../../include/net-snmp/machine/generic.h
+./mibII/tcp.lo: ./mibII/mibII_common.h
+./mibII/tcp.lo: ../../agent/kernel.h
+./mibII/tcp.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/tcp.lo: ../../include/net-snmp/definitions.h
+./mibII/tcp.lo: ../../include/net-snmp/types.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/tcp.lo: ../../include/net-snmp/library/asn1.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/tcp.lo: ../../include/net-snmp/utilities.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/tcp.lo: ../../include/net-snmp/library/system.h
+./mibII/tcp.lo: ../../include/net-snmp/library/tools.h
+./mibII/tcp.lo: ../../include/net-snmp/library/int64.h
+./mibII/tcp.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/tcp.lo: ../../include/net-snmp/library/callback.h
+./mibII/tcp.lo: ../../include/net-snmp/library/data_list.h
+./mibII/tcp.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/tcp.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/tcp.lo: ../../include/net-snmp/library/container.h
+./mibII/tcp.lo: ../../include/net-snmp/library/factory.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/tcp.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/tcp.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/tcp.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/tcp.lo: ../../include/net-snmp/library/container.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/tcp.lo: ../../include/net-snmp/version.h
+./mibII/tcp.lo: ../../include/net-snmp/session_api.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/tcp.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/tcp.lo: ../../include/net-snmp/pdu_api.h
+./mibII/tcp.lo: ../../include/net-snmp/mib_api.h
+./mibII/tcp.lo: ../../include/net-snmp/library/mib.h
+./mibII/tcp.lo: ../../include/net-snmp/library/parse.h
+./mibII/tcp.lo: ../../include/net-snmp/varbind_api.h
+./mibII/tcp.lo: ../../include/net-snmp/config_api.h
+./mibII/tcp.lo: ../../include/net-snmp/library/read_config.h
+./mibII/tcp.lo: ../../include/net-snmp/library/default_store.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/tcp.lo: ../../include/net-snmp/library/vacm.h
+./mibII/tcp.lo: ../../include/net-snmp/output_api.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/tcp.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/tcp.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/tcp.lo: ../../include/net-snmp/library/keytools.h
+./mibII/tcp.lo: ../../include/net-snmp/library/scapi.h
+./mibII/tcp.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/tcp.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/tcp.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/instance.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/null.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/table.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/tcp.lo: ../../include/net-snmp/agent/auto_nlist.h util_funcs.h
+./mibII/tcp.lo: struct.h ./mibII/tcp.h ./mibII/tcpTable.h
+./mibII/tcp.lo: ./mibII/sysORTable.h
+./mibII/tcpTable.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/tcpTable.lo: ../../include/net-snmp/system/linux.h
+./mibII/tcpTable.lo: ../../include/net-snmp/system/sysv.h
+./mibII/tcpTable.lo: ../../include/net-snmp/system/generic.h
+./mibII/tcpTable.lo: ../../include/net-snmp/machine/generic.h
+./mibII/tcpTable.lo: ./mibII/mibII_common.h
+./mibII/tcpTable.lo: ../../agent/kernel.h
+./mibII/tcpTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/tcpTable.lo: ../../include/net-snmp/definitions.h
+./mibII/tcpTable.lo: ../../include/net-snmp/types.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/asn1.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/tcpTable.lo: ../../include/net-snmp/utilities.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/system.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/tools.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/int64.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/callback.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/data_list.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/container.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/factory.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/container.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/tcpTable.lo: ../../include/net-snmp/version.h
+./mibII/tcpTable.lo: ../../include/net-snmp/session_api.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/tcpTable.lo: ../../include/net-snmp/pdu_api.h
+./mibII/tcpTable.lo: ../../include/net-snmp/mib_api.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/mib.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/parse.h
+./mibII/tcpTable.lo: ../../include/net-snmp/varbind_api.h
+./mibII/tcpTable.lo: ../../include/net-snmp/config_api.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/read_config.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/default_store.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/vacm.h
+./mibII/tcpTable.lo: ../../include/net-snmp/output_api.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/tcpTable.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/keytools.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/scapi.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/tcpTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/instance.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/null.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/table.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/tcpTable.lo: ../../include/net-snmp/agent/auto_nlist.h ./mibII/tcp.h
+./mibII/tcpTable.lo: ./mibII/tcpTable.h ./mibII/sysORTable.h
+./mibII/udp.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/udp.lo: ../../include/net-snmp/system/linux.h
+./mibII/udp.lo: ../../include/net-snmp/system/sysv.h
+./mibII/udp.lo: ../../include/net-snmp/system/generic.h
+./mibII/udp.lo: ../../include/net-snmp/machine/generic.h
+./mibII/udp.lo: ./mibII/mibII_common.h
+./mibII/udp.lo: ../../agent/kernel.h
+./mibII/udp.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/udp.lo: ../../include/net-snmp/definitions.h
+./mibII/udp.lo: ../../include/net-snmp/types.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/udp.lo: ../../include/net-snmp/library/asn1.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/udp.lo: ../../include/net-snmp/utilities.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/udp.lo: ../../include/net-snmp/library/system.h
+./mibII/udp.lo: ../../include/net-snmp/library/tools.h
+./mibII/udp.lo: ../../include/net-snmp/library/int64.h
+./mibII/udp.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/udp.lo: ../../include/net-snmp/library/callback.h
+./mibII/udp.lo: ../../include/net-snmp/library/data_list.h
+./mibII/udp.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/udp.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/udp.lo: ../../include/net-snmp/library/container.h
+./mibII/udp.lo: ../../include/net-snmp/library/factory.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/udp.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/udp.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/udp.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/udp.lo: ../../include/net-snmp/library/container.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/udp.lo: ../../include/net-snmp/version.h
+./mibII/udp.lo: ../../include/net-snmp/session_api.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/udp.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/udp.lo: ../../include/net-snmp/pdu_api.h
+./mibII/udp.lo: ../../include/net-snmp/mib_api.h
+./mibII/udp.lo: ../../include/net-snmp/library/mib.h
+./mibII/udp.lo: ../../include/net-snmp/library/parse.h
+./mibII/udp.lo: ../../include/net-snmp/varbind_api.h
+./mibII/udp.lo: ../../include/net-snmp/config_api.h
+./mibII/udp.lo: ../../include/net-snmp/library/read_config.h
+./mibII/udp.lo: ../../include/net-snmp/library/default_store.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/udp.lo: ../../include/net-snmp/library/vacm.h
+./mibII/udp.lo: ../../include/net-snmp/output_api.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/udp.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/udp.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/udp.lo: ../../include/net-snmp/library/keytools.h
+./mibII/udp.lo: ../../include/net-snmp/library/scapi.h
+./mibII/udp.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/udp.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/udp.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/udp.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/udp.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/udp.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/udp.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/udp.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/udp.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/udp.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/udp.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/udp.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/udp.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/udp.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/udp.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/udp.lo: ../../include/net-snmp/agent/instance.h
+./mibII/udp.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/udp.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/udp.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/udp.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/udp.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/udp.lo: ../../include/net-snmp/agent/null.h
+./mibII/udp.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/udp.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/udp.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/udp.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/udp.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/udp.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/udp.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/udp.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/udp.lo: ../../include/net-snmp/agent/table.h
+./mibII/udp.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/udp.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/udp.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/udp.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/udp.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/udp.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/udp.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/udp.lo: ../../include/net-snmp/agent/auto_nlist.h util_funcs.h
+./mibII/udp.lo: struct.h ./mibII/udp.h ./mibII/udpTable.h
+./mibII/udp.lo: ./mibII/sysORTable.h
+./mibII/udpTable.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/udpTable.lo: ../../include/net-snmp/system/linux.h
+./mibII/udpTable.lo: ../../include/net-snmp/system/sysv.h
+./mibII/udpTable.lo: ../../include/net-snmp/system/generic.h
+./mibII/udpTable.lo: ../../include/net-snmp/machine/generic.h
+./mibII/udpTable.lo: ./mibII/mibII_common.h
+./mibII/udpTable.lo: ../../agent/kernel.h
+./mibII/udpTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/udpTable.lo: ../../include/net-snmp/definitions.h
+./mibII/udpTable.lo: ../../include/net-snmp/types.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/asn1.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/udpTable.lo: ../../include/net-snmp/utilities.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/system.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/tools.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/int64.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/callback.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/data_list.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/container.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/factory.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/container.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/udpTable.lo: ../../include/net-snmp/version.h
+./mibII/udpTable.lo: ../../include/net-snmp/session_api.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/udpTable.lo: ../../include/net-snmp/pdu_api.h
+./mibII/udpTable.lo: ../../include/net-snmp/mib_api.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/mib.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/parse.h
+./mibII/udpTable.lo: ../../include/net-snmp/varbind_api.h
+./mibII/udpTable.lo: ../../include/net-snmp/config_api.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/read_config.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/default_store.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/vacm.h
+./mibII/udpTable.lo: ../../include/net-snmp/output_api.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/udpTable.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/keytools.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/scapi.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/udpTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/instance.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/null.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/table.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/udpTable.lo: ../../include/net-snmp/agent/auto_nlist.h ./mibII/udp.h
+./mibII/udpTable.lo: ./mibII/udpTable.h ./mibII/sysORTable.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/system/linux.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/system/sysv.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/system/generic.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/machine/generic.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/definitions.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/types.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/asn1.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/utilities.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/system.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/tools.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/int64.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/callback.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/data_list.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/container.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/factory.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/container.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/version.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/session_api.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/pdu_api.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/mib_api.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/mib.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/parse.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/varbind_api.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/config_api.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/read_config.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/default_store.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/vacm.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/output_api.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/keytools.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/scapi.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/instance.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/null.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/table.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/vacm_conf.lo: ../../include/net-snmp/agent/agent_callbacks.h
+./mibII/vacm_conf.lo: ./mibII/vacm_conf.h util_funcs.h struct.h
+./mibII/vacm_conf.lo: ./mibII/sysORTable.h ../../agent/snmpd.h
+./mibII/vacm_context.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/vacm_context.lo: ../../include/net-snmp/system/linux.h
+./mibII/vacm_context.lo: ../../include/net-snmp/system/sysv.h
+./mibII/vacm_context.lo: ../../include/net-snmp/system/generic.h
+./mibII/vacm_context.lo: ../../include/net-snmp/machine/generic.h
+./mibII/vacm_context.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/vacm_context.lo: ../../include/net-snmp/definitions.h
+./mibII/vacm_context.lo: ../../include/net-snmp/types.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/asn1.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/vacm_context.lo: ../../include/net-snmp/utilities.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/system.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/tools.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/int64.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/callback.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/data_list.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/container.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/factory.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/container.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/vacm_context.lo: ../../include/net-snmp/version.h
+./mibII/vacm_context.lo: ../../include/net-snmp/session_api.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/vacm_context.lo: ../../include/net-snmp/pdu_api.h
+./mibII/vacm_context.lo: ../../include/net-snmp/mib_api.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/mib.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/parse.h
+./mibII/vacm_context.lo: ../../include/net-snmp/varbind_api.h
+./mibII/vacm_context.lo: ../../include/net-snmp/config_api.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/read_config.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/default_store.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/vacm.h
+./mibII/vacm_context.lo: ../../include/net-snmp/output_api.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/vacm_context.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/keytools.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/scapi.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/vacm_context.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/instance.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/null.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/table.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/vacm_context.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/vacm_context.lo: ./mibII/vacm_context.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/system/linux.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/system/sysv.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/system/generic.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/machine/generic.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/definitions.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/types.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/asn1.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/utilities.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/system.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/tools.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/int64.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/callback.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/data_list.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/container.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/factory.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/container.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/version.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/session_api.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/pdu_api.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/mib_api.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/mib.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/parse.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/varbind_api.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/config_api.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/read_config.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/default_store.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/vacm.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/output_api.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/keytools.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/scapi.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/instance.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/null.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/table.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/vacm_vars.lo: ../../include/net-snmp/agent/agent_callbacks.h
+./mibII/vacm_vars.lo: ./mibII/vacm_vars.h util_funcs.h struct.h
+./mibII/vacm_vars.lo: ./mibII/sysORTable.h
+./mibII/var_route.lo: ../../include/net-snmp/net-snmp-config.h
+./mibII/var_route.lo: ../../include/net-snmp/system/linux.h
+./mibII/var_route.lo: ../../include/net-snmp/system/sysv.h
+./mibII/var_route.lo: ../../include/net-snmp/system/generic.h
+./mibII/var_route.lo: ../../include/net-snmp/machine/generic.h
+./mibII/var_route.lo: ./mibII/route_headers.h
+./mibII/var_route.lo: ../../include/net-snmp/net-snmp-includes.h
+./mibII/var_route.lo: ../../include/net-snmp/definitions.h
+./mibII/var_route.lo: ../../include/net-snmp/types.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp_api.h
+./mibII/var_route.lo: ../../include/net-snmp/library/asn1.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp_impl.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp-tc.h
+./mibII/var_route.lo: ../../include/net-snmp/utilities.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp_client.h
+./mibII/var_route.lo: ../../include/net-snmp/library/system.h
+./mibII/var_route.lo: ../../include/net-snmp/library/tools.h
+./mibII/var_route.lo: ../../include/net-snmp/library/int64.h
+./mibII/var_route.lo: ../../include/net-snmp/library/mt_support.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp_alarm.h
+./mibII/var_route.lo: ../../include/net-snmp/library/callback.h
+./mibII/var_route.lo: ../../include/net-snmp/library/data_list.h
+./mibII/var_route.lo: ../../include/net-snmp/library/oid_stash.h
+./mibII/var_route.lo: ../../include/net-snmp/library/check_varbind.h
+./mibII/var_route.lo: ../../include/net-snmp/library/container.h
+./mibII/var_route.lo: ../../include/net-snmp/library/factory.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp_logging.h
+./mibII/var_route.lo: ../../include/net-snmp/library/container_binary_array.h
+./mibII/var_route.lo: ../../include/net-snmp/library/container_list_ssll.h
+./mibII/var_route.lo: ../../include/net-snmp/library/container_iterator.h
+./mibII/var_route.lo: ../../include/net-snmp/library/container.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp_assert.h
+./mibII/var_route.lo: ../../include/net-snmp/version.h
+./mibII/var_route.lo: ../../include/net-snmp/session_api.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp_transport.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp_service.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./mibII/var_route.lo: ../../include/net-snmp/library/ucd_compat.h
+./mibII/var_route.lo: ../../include/net-snmp/pdu_api.h
+./mibII/var_route.lo: ../../include/net-snmp/mib_api.h
+./mibII/var_route.lo: ../../include/net-snmp/library/mib.h
+./mibII/var_route.lo: ../../include/net-snmp/library/parse.h
+./mibII/var_route.lo: ../../include/net-snmp/varbind_api.h
+./mibII/var_route.lo: ../../include/net-snmp/config_api.h
+./mibII/var_route.lo: ../../include/net-snmp/library/read_config.h
+./mibII/var_route.lo: ../../include/net-snmp/library/default_store.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp_enum.h
+./mibII/var_route.lo: ../../include/net-snmp/library/vacm.h
+./mibII/var_route.lo: ../../include/net-snmp/output_api.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp_debug.h
+./mibII/var_route.lo: ../../include/net-snmp/snmpv3_api.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmpv3.h
+./mibII/var_route.lo: ../../include/net-snmp/library/transform_oids.h
+./mibII/var_route.lo: ../../include/net-snmp/library/keytools.h
+./mibII/var_route.lo: ../../include/net-snmp/library/scapi.h
+./mibII/var_route.lo: ../../include/net-snmp/library/lcd_time.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmp_secmod.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./mibII/var_route.lo: ../../include/net-snmp/library/snmpusm.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/mib_module_config.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/agent_module_config.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/snmp_agent.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/snmp_vars.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/agent_handler.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/var_struct.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/agent_registry.h
+./mibII/var_route.lo: ../../include/net-snmp/library/fd_event_manager.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/ds_agent.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/agent_read_config.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/agent_trap.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/all_helpers.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/instance.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/baby_steps.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/scalar.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/scalar_group.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/watcher.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/multiplexer.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/null.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/debug_handler.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/cache_handler.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/old_api.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/read_only.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/row_merge.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/serialize.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/mode_end_call.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/table.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/table_data.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/table_dataset.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/table_tdata.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/table_iterator.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/table_container.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/table_array.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/mfd.h
+./mibII/var_route.lo: ../../include/net-snmp/agent/auto_nlist.h
+./mibII/var_route.lo: ../../include/net-snmp/data_access/interface.h
+./mibII/var_route.lo: ./mibII/ip.h ./mibII/var_route.h ./mibII/route_write.h
+./mibII/var_route.lo: ./mibII/at.h ../../agent/kernel.h ./mibII/interfaces.h
+./mibII/var_route.lo: struct.h util_funcs.h
+./misc/ipfwacc.lo: ../../include/net-snmp/net-snmp-config.h
+./misc/ipfwacc.lo: ../../include/net-snmp/system/linux.h
+./misc/ipfwacc.lo: ../../include/net-snmp/system/sysv.h
+./misc/ipfwacc.lo: ../../include/net-snmp/system/generic.h
+./misc/ipfwacc.lo: ../../include/net-snmp/machine/generic.h
+./misc/ipfwacc.lo: ../../include/net-snmp/net-snmp-includes.h
+./misc/ipfwacc.lo: ../../include/net-snmp/definitions.h
+./misc/ipfwacc.lo: ../../include/net-snmp/types.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp_api.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/asn1.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp_impl.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp-tc.h
+./misc/ipfwacc.lo: ../../include/net-snmp/utilities.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp_client.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/system.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/tools.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/int64.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/mt_support.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp_alarm.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/callback.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/data_list.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/oid_stash.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/check_varbind.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/container.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/factory.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp_logging.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/container_binary_array.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/container_list_ssll.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/container_iterator.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/container.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp_assert.h
+./misc/ipfwacc.lo: ../../include/net-snmp/version.h
+./misc/ipfwacc.lo: ../../include/net-snmp/session_api.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp_transport.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp_service.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/ucd_compat.h
+./misc/ipfwacc.lo: ../../include/net-snmp/pdu_api.h
+./misc/ipfwacc.lo: ../../include/net-snmp/mib_api.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/mib.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/parse.h
+./misc/ipfwacc.lo: ../../include/net-snmp/varbind_api.h
+./misc/ipfwacc.lo: ../../include/net-snmp/config_api.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/read_config.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/default_store.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp_enum.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/vacm.h
+./misc/ipfwacc.lo: ../../include/net-snmp/output_api.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp_debug.h
+./misc/ipfwacc.lo: ../../include/net-snmp/snmpv3_api.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmpv3.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/transform_oids.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/keytools.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/scapi.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/lcd_time.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmp_secmod.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/snmpusm.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/mib_module_config.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/agent_module_config.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/snmp_agent.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/snmp_vars.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/agent_handler.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/var_struct.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/agent_registry.h
+./misc/ipfwacc.lo: ../../include/net-snmp/library/fd_event_manager.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/ds_agent.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/agent_read_config.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/agent_trap.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/all_helpers.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/instance.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/baby_steps.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/scalar.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/scalar_group.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/watcher.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/multiplexer.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/null.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/debug_handler.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/cache_handler.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/old_api.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/read_only.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/row_merge.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/serialize.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/mode_end_call.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/table.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/table_data.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/table_dataset.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/table_tdata.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/table_iterator.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/table_container.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/table_array.h
+./misc/ipfwacc.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h struct.h
+./misc/ipfwacc.lo: ./misc/ipfwacc.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/net-snmp-config.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/system/linux.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/system/sysv.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/system/generic.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/machine/generic.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/net-snmp-includes.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/definitions.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/types.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp_api.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/asn1.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp_impl.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp-tc.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/utilities.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp_client.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/system.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/tools.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/int64.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/mt_support.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp_alarm.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/callback.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/data_list.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/oid_stash.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/check_varbind.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/container.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/factory.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp_logging.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/container_binary_array.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/container_list_ssll.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/container_iterator.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/container.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp_assert.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/version.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/session_api.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp_transport.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp_service.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/ucd_compat.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/pdu_api.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/mib_api.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/mib.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/parse.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/varbind_api.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/config_api.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/read_config.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/default_store.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp_enum.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/vacm.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/output_api.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp_debug.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/snmpv3_api.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmpv3.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/transform_oids.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/keytools.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/scapi.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/lcd_time.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmp_secmod.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/snmpusm.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/mib_module_config.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/agent_module_config.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/snmp_agent.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/snmp_vars.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/agent_handler.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/var_struct.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/agent_registry.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/library/fd_event_manager.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/ds_agent.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/agent_read_config.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/agent_trap.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/all_helpers.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/instance.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/baby_steps.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/scalar.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/scalar_group.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/watcher.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/multiplexer.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/null.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/debug_handler.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/cache_handler.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/old_api.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/read_only.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/row_merge.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/serialize.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/mode_end_call.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/table.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/table_data.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/table_dataset.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/table_tdata.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/table_iterator.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/table_container.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/table_array.h
+./notification-log-mib/notification_log.lo: ../../include/net-snmp/agent/mfd.h
+./notification-log-mib/notification_log.lo: ./notification-log-mib/notification_log.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/net-snmp-config.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/system/linux.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/system/sysv.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/system/generic.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/machine/generic.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/definitions.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/types.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp_api.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/asn1.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/utilities.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp_client.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/system.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/tools.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/int64.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/mt_support.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/callback.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/data_list.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/oid_stash.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/check_varbind.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/container.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/factory.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/container_iterator.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/container.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/version.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/session_api.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp_service.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/pdu_api.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/mib_api.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/mib.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/parse.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/varbind_api.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/config_api.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/read_config.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/default_store.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/vacm.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/output_api.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/snmpv3_api.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmpv3.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/transform_oids.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/keytools.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/scapi.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/lcd_time.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/snmpusm.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/var_struct.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/instance.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/scalar.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/watcher.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/null.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/old_api.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/read_only.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/row_merge.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/serialize.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/table.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/table_data.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/table_container.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/table_array.h
+./notification/snmpNotifyFilterProfileTable.lo: ../../include/net-snmp/agent/mfd.h
+./notification/snmpNotifyFilterProfileTable.lo: header_complex.h
+./notification/snmpNotifyFilterProfileTable.lo: ./notification/snmpNotifyFilterProfileTable.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/net-snmp-config.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/system/linux.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/system/sysv.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/system/generic.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/machine/generic.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/definitions.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/types.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp_api.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/asn1.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/utilities.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp_client.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/system.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/tools.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/int64.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/mt_support.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/callback.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/data_list.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/oid_stash.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/check_varbind.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/container.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/factory.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/container_iterator.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/container.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/version.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/session_api.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp_service.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/pdu_api.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/mib_api.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/mib.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/parse.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/varbind_api.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/config_api.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/read_config.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/default_store.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/vacm.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/output_api.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/snmpv3_api.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmpv3.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/transform_oids.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/keytools.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/scapi.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/lcd_time.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/snmpusm.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/var_struct.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/instance.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/scalar.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/watcher.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/null.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/old_api.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/read_only.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/row_merge.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/serialize.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/table.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/table_data.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/table_container.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/table_array.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/mfd.h
+./notification/snmpNotifyTable.lo: header_complex.h
+./notification/snmpNotifyTable.lo: ./notification/snmpNotifyTable.h
+./notification/snmpNotifyTable.lo: ./notification/snmpNotifyFilterProfileTable.h
+./notification/snmpNotifyTable.lo: target/snmpTargetParamsEntry.h
+./notification/snmpNotifyTable.lo: target/snmpTargetAddrEntry.h
+./notification/snmpNotifyTable.lo: target/target.h
+./notification/snmpNotifyTable.lo: snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./notification/snmpNotifyTable.lo: snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_constants.h
+./notification/snmpNotifyTable.lo: snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.h
+./notification/snmpNotifyTable.lo: snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable.h
+./notification/snmpNotifyTable.lo: snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_data_access.h
+./notification/snmpNotifyTable.lo: ../../include/net-snmp/agent/agent_callbacks.h
+./notification/snmpNotifyTable.lo: notification-log-mib/notification_log.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/system/linux.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/system/sysv.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/system/generic.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/machine/generic.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/definitions.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/types.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp_api.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/asn1.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/utilities.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp_client.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/system.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/tools.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/int64.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/mt_support.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/callback.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/data_list.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/oid_stash.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/check_varbind.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/factory.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/container_iterator.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/version.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/session_api.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp_service.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/pdu_api.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/mib_api.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/mib.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/parse.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/varbind_api.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/config_api.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/read_config.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/default_store.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/vacm.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/output_api.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/snmpv3_api.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmpv3.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/transform_oids.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/keytools.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/scapi.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/lcd_time.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/snmpusm.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/var_struct.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/instance.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/scalar.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/watcher.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/null.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/old_api.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/read_only.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/row_merge.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/serialize.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/table.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/table_data.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/table_container.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/table_array.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/agent/mfd.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ./sctp-mib/sctpAssocLocalAddrTable.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ./sctp-mib/sctpTables_common.h
+./sctp-mib/sctpAssocLocalAddrTable.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/definitions.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/types.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp_api.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/asn1.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/utilities.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp_client.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/system.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/tools.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/int64.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/mt_support.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/callback.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/data_list.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/oid_stash.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/check_varbind.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/factory.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/container_iterator.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/version.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/session_api.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp_service.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/pdu_api.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/mib_api.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/mib.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/parse.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/varbind_api.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/config_api.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/read_config.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/default_store.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/vacm.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/output_api.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/snmpv3_api.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmpv3.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/transform_oids.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/keytools.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/scapi.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/lcd_time.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/snmpusm.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/var_struct.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/instance.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/scalar.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/watcher.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/null.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/old_api.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/read_only.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/row_merge.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/serialize.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/table.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/table_data.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/table_container.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/table_array.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ../../include/net-snmp/agent/mfd.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ./sctp-mib/sctpAssocRemAddrTable.h
+./sctp-mib/sctpAssocRemAddrTable.lo: ./sctp-mib/sctpTables_common.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/definitions.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/types.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp_api.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/asn1.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/utilities.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp_client.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/system.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/tools.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/int64.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/mt_support.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/callback.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/data_list.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/oid_stash.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/check_varbind.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/factory.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/container_iterator.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/version.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/session_api.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp_service.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/pdu_api.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/mib_api.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/mib.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/parse.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/varbind_api.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/config_api.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/read_config.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/default_store.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/vacm.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/output_api.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/snmpv3_api.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmpv3.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/transform_oids.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/keytools.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/scapi.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/lcd_time.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/snmpusm.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/var_struct.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/instance.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/scalar.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/watcher.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/null.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/old_api.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/read_only.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/row_merge.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/serialize.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/table.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/table_data.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/table_container.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/table_array.h
+./sctp-mib/sctpAssocTable.lo: ../../include/net-snmp/agent/mfd.h
+./sctp-mib/sctpAssocTable.lo: ./sctp-mib/sctpAssocTable.h
+./sctp-mib/sctpAssocTable.lo: ./sctp-mib/sctpTables_common.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/definitions.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/types.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp_api.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/asn1.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/utilities.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp_client.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/system.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/tools.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/int64.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/mt_support.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/callback.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/data_list.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/oid_stash.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/check_varbind.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/factory.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/container_iterator.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/version.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/session_api.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp_service.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/pdu_api.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/mib_api.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/mib.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/parse.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/varbind_api.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/config_api.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/read_config.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/default_store.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/vacm.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/output_api.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/snmpv3_api.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmpv3.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/transform_oids.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/keytools.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/scapi.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/lcd_time.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/snmpusm.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/var_struct.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/instance.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/scalar.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/watcher.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/null.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/old_api.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/read_only.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/row_merge.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/serialize.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/table.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/table_data.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/table_container.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/table_array.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ../../include/net-snmp/agent/mfd.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ./sctp-mib/sctpLookupLocalPortTable.h
+./sctp-mib/sctpLookupLocalPortTable.lo: ./sctp-mib/sctpTables_common.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/definitions.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/types.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp_api.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/asn1.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/utilities.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp_client.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/system.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/tools.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/int64.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/mt_support.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/callback.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/data_list.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/oid_stash.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/check_varbind.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/factory.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/container_iterator.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/version.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/session_api.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp_service.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/pdu_api.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/mib_api.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/mib.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/parse.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/varbind_api.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/config_api.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/read_config.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/default_store.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/vacm.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/output_api.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/snmpv3_api.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmpv3.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/transform_oids.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/keytools.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/scapi.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/lcd_time.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/snmpusm.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/var_struct.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/instance.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/scalar.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/watcher.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/null.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/old_api.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/read_only.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/row_merge.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/serialize.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/table.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/table_data.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/table_container.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/table_array.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ../../include/net-snmp/agent/mfd.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ./sctp-mib/sctpLookupRemHostNameTable.h
+./sctp-mib/sctpLookupRemHostNameTable.lo: ./sctp-mib/sctpTables_common.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/definitions.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/types.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp_api.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/asn1.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/utilities.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp_client.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/system.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/tools.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/int64.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/mt_support.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/callback.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/data_list.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/oid_stash.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/check_varbind.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/factory.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/container_iterator.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/version.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/session_api.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp_service.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/pdu_api.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/mib_api.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/mib.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/parse.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/varbind_api.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/config_api.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/read_config.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/default_store.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/vacm.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/output_api.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/snmpv3_api.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmpv3.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/transform_oids.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/keytools.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/scapi.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/lcd_time.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/snmpusm.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/var_struct.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/instance.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/scalar.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/watcher.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/null.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/old_api.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/read_only.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/row_merge.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/serialize.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/table.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/table_data.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/table_container.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/table_array.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ../../include/net-snmp/agent/mfd.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ./sctp-mib/sctpLookupRemIPAddrTable.h
+./sctp-mib/sctpLookupRemIPAddrTable.lo: ./sctp-mib/sctpTables_common.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/definitions.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/types.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp_api.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/asn1.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/utilities.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp_client.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/system.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/tools.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/int64.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/mt_support.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/callback.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/data_list.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/oid_stash.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/check_varbind.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/factory.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/container_iterator.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/version.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/session_api.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp_service.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/pdu_api.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/mib_api.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/mib.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/parse.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/varbind_api.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/config_api.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/read_config.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/default_store.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/vacm.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/output_api.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/snmpv3_api.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmpv3.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/transform_oids.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/keytools.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/scapi.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/lcd_time.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/snmpusm.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/var_struct.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/instance.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/scalar.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/watcher.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/null.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/old_api.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/read_only.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/row_merge.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/serialize.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/table.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/table_data.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/table_container.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/table_array.h
+./sctp-mib/sctpLookupRemPortTable.lo: ../../include/net-snmp/agent/mfd.h
+./sctp-mib/sctpLookupRemPortTable.lo: ./sctp-mib/sctpLookupRemPortTable.h
+./sctp-mib/sctpLookupRemPortTable.lo: ./sctp-mib/sctpTables_common.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/net-snmp-includes.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/definitions.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/types.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp_api.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/asn1.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp_impl.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp-tc.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/utilities.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp_client.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/system.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/tools.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/int64.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/mt_support.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp_alarm.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/callback.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/data_list.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/oid_stash.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/check_varbind.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/factory.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp_logging.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/container_binary_array.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/container_list_ssll.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/container_iterator.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp_assert.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/version.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/session_api.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp_transport.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp_service.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/ucd_compat.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/pdu_api.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/mib_api.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/mib.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/parse.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/varbind_api.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/config_api.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/read_config.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/default_store.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp_enum.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/vacm.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/output_api.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp_debug.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/snmpv3_api.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmpv3.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/transform_oids.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/keytools.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/scapi.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/lcd_time.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmp_secmod.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/snmpusm.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/mib_module_config.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/agent_module_config.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/snmp_agent.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/snmp_vars.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/agent_handler.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/var_struct.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/agent_registry.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/library/fd_event_manager.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/ds_agent.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/agent_read_config.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/agent_trap.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/all_helpers.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/instance.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/baby_steps.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/scalar.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/scalar_group.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/watcher.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/multiplexer.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/null.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/debug_handler.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/cache_handler.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/old_api.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/read_only.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/row_merge.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/serialize.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/mode_end_call.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/table.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/table_data.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/table_dataset.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/table_tdata.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/table_iterator.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/table_container.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/table_array.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ../../include/net-snmp/agent/mfd.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ./sctp-mib/sctpLookupRemPrimIPAddrTable.h
+./sctp-mib/sctpLookupRemPrimIPAddrTable.lo: ./sctp-mib/sctpTables_common.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/net-snmp-includes.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/definitions.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/types.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp_api.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/asn1.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp_impl.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp-tc.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/utilities.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp_client.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/system.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/tools.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/int64.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/mt_support.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp_alarm.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/callback.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/data_list.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/oid_stash.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/check_varbind.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/factory.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp_logging.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/container_binary_array.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/container_list_ssll.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/container_iterator.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp_assert.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/version.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/session_api.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp_transport.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp_service.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/ucd_compat.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/pdu_api.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/mib_api.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/mib.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/parse.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/varbind_api.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/config_api.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/read_config.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/default_store.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp_enum.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/vacm.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/output_api.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp_debug.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/snmpv3_api.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmpv3.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/transform_oids.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/keytools.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/scapi.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/lcd_time.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmp_secmod.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/snmpusm.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/mib_module_config.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/agent_module_config.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/snmp_agent.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/snmp_vars.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/agent_handler.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/var_struct.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/agent_registry.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/library/fd_event_manager.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/ds_agent.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/agent_read_config.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/agent_trap.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/all_helpers.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/instance.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/baby_steps.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/scalar.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/scalar_group.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/watcher.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/multiplexer.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/null.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/debug_handler.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/cache_handler.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/old_api.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/read_only.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/row_merge.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/serialize.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/mode_end_call.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/table.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/table_data.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/table_dataset.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/table_tdata.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/table_iterator.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/table_container.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/table_array.h
+./sctp-mib/sctpScalars.lo: ../../include/net-snmp/agent/mfd.h
+./sctp-mib/sctpScalars.lo: ./sctp-mib/sctpScalars.h
+./sctp-mib/sctpScalars.lo: ./sctp-mib/sctpScalars_common.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/net-snmp-includes.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/definitions.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/types.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp_api.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/asn1.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp_impl.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp-tc.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/utilities.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp_client.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/system.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/tools.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/int64.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/mt_support.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp_alarm.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/callback.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/data_list.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/oid_stash.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/check_varbind.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/factory.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp_logging.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/container_binary_array.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/container_list_ssll.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/container_iterator.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp_assert.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/version.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/session_api.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp_transport.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp_service.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/ucd_compat.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/pdu_api.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/mib_api.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/mib.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/parse.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/varbind_api.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/config_api.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/read_config.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/default_store.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp_enum.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/vacm.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/output_api.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp_debug.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/snmpv3_api.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmpv3.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/transform_oids.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/keytools.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/scapi.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/lcd_time.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmp_secmod.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/snmpusm.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/mib_module_config.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/agent_module_config.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/snmp_agent.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/snmp_vars.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/agent_handler.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/var_struct.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/agent_registry.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/library/fd_event_manager.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/ds_agent.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/agent_read_config.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/agent_trap.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/all_helpers.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/instance.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/baby_steps.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/scalar.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/scalar_group.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/watcher.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/multiplexer.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/null.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/debug_handler.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/cache_handler.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/old_api.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/read_only.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/row_merge.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/serialize.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/mode_end_call.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/table.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/table_data.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/table_dataset.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/table_tdata.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/table_iterator.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/table_container.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/table_array.h
+./sctp-mib/sctpScalars_common.lo: ../../include/net-snmp/agent/mfd.h
+./sctp-mib/sctpScalars_common.lo: ./sctp-mib/sctpScalars_common.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/net-snmp-includes.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/definitions.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/types.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp_api.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/asn1.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp_impl.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp-tc.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/utilities.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp_client.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/system.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/tools.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/int64.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/mt_support.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp_alarm.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/callback.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/data_list.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/oid_stash.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/check_varbind.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/factory.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp_logging.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/container_binary_array.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/container_list_ssll.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/container_iterator.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp_assert.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/version.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/session_api.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp_transport.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp_service.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/ucd_compat.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/pdu_api.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/mib_api.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/mib.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/parse.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/varbind_api.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/config_api.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/read_config.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/default_store.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp_enum.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/vacm.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/output_api.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp_debug.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/snmpv3_api.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmpv3.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/transform_oids.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/keytools.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/scapi.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/lcd_time.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmp_secmod.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/snmpusm.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/mib_module_config.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/agent_module_config.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/snmp_agent.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/snmp_vars.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/agent_handler.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/var_struct.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/agent_registry.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/library/fd_event_manager.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/ds_agent.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/agent_read_config.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/agent_trap.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/all_helpers.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/instance.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/baby_steps.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/scalar.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/scalar_group.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/watcher.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/multiplexer.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/null.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/debug_handler.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/cache_handler.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/old_api.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/read_only.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/row_merge.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/serialize.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/mode_end_call.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/table.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/table_data.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/table_dataset.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/table_tdata.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/table_iterator.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/table_container.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/table_array.h
+./sctp-mib/sctpScalars_linux.lo: ../../include/net-snmp/agent/mfd.h
+./sctp-mib/sctpScalars_linux.lo: ./sctp-mib/sctpScalars_common.h
+./sctp-mib/sctpTables_common.lo: ./sctp-mib/sctpTables_common.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/net-snmp-includes.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/definitions.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/types.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp_api.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/asn1.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp_impl.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp-tc.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/utilities.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp_client.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/system.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/tools.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/int64.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/mt_support.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp_alarm.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/callback.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/data_list.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/oid_stash.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/check_varbind.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/factory.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp_logging.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/container_binary_array.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/container_list_ssll.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/container_iterator.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp_assert.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/version.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/session_api.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp_transport.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp_service.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/ucd_compat.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/pdu_api.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/mib_api.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/mib.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/parse.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/varbind_api.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/config_api.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/read_config.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/default_store.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp_enum.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/vacm.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/output_api.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp_debug.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/snmpv3_api.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmpv3.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/transform_oids.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/keytools.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/scapi.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/lcd_time.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmp_secmod.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/snmpusm.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/mib_module_config.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/agent_module_config.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/snmp_agent.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/snmp_vars.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/agent_handler.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/var_struct.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/agent_registry.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/library/fd_event_manager.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/ds_agent.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/agent_read_config.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/agent_trap.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/all_helpers.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/instance.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/baby_steps.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/scalar.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/scalar_group.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/watcher.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/multiplexer.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/null.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/debug_handler.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/cache_handler.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/old_api.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/read_only.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/row_merge.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/serialize.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/mode_end_call.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/table.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/table_data.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/table_dataset.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/table_tdata.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/table_iterator.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/table_container.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/table_array.h
+./sctp-mib/sctpTables_common.lo: ../../include/net-snmp/agent/mfd.h
+./sctp-mib/sctpTables_common.lo: ./sctp-mib/sctpAssocTable.h
+./sctp-mib/sctpTables_common.lo: ./sctp-mib/sctpAssocRemAddrTable.h
+./sctp-mib/sctpTables_common.lo: ./sctp-mib/sctpAssocLocalAddrTable.h
+./sctp-mib/sctpTables_common.lo: ./sctp-mib/sctpLookupLocalPortTable.h
+./sctp-mib/sctpTables_common.lo: ./sctp-mib/sctpLookupRemPortTable.h
+./sctp-mib/sctpTables_common.lo: ./sctp-mib/sctpLookupRemHostNameTable.h
+./sctp-mib/sctpTables_common.lo: ./sctp-mib/sctpLookupRemPrimIPAddrTable.h
+./sctp-mib/sctpTables_common.lo: ./sctp-mib/sctpLookupRemIPAddrTable.h
+./sctp-mib/sctpTables_linux.lo: ./sctp-mib/sctpAssocTable.h
+./sctp-mib/sctpTables_linux.lo: ./sctp-mib/sctpTables_common.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/net-snmp-config.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/net-snmp-includes.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/definitions.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/types.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp_api.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/asn1.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp_impl.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp-tc.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/utilities.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp_client.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/system.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/tools.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/int64.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/mt_support.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp_alarm.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/callback.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/data_list.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/oid_stash.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/check_varbind.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/factory.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp_logging.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/container_binary_array.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/container_list_ssll.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/container_iterator.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/container.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp_assert.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/version.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/session_api.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp_transport.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp_service.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/ucd_compat.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/pdu_api.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/mib_api.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/mib.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/parse.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/varbind_api.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/config_api.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/read_config.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/default_store.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp_enum.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/vacm.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/output_api.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp_debug.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/snmpv3_api.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmpv3.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/transform_oids.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/keytools.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/scapi.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/lcd_time.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmp_secmod.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/snmpusm.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/mib_module_config.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/agent_module_config.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/snmp_agent.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/snmp_vars.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/agent_handler.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/var_struct.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/agent_registry.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/library/fd_event_manager.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/ds_agent.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/agent_read_config.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/agent_trap.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/all_helpers.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/instance.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/baby_steps.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/scalar.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/scalar_group.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/watcher.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/multiplexer.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/null.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/debug_handler.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/cache_handler.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/old_api.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/read_only.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/row_merge.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/serialize.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/mode_end_call.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/table.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/table_data.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/table_dataset.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/table_tdata.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/table_iterator.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/table_container.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/table_array.h
+./sctp-mib/sctpTables_linux.lo: ../../include/net-snmp/agent/mfd.h
+./sctp-mib/sctpTables_linux.lo: ./sctp-mib/sctpAssocLocalAddrTable.h
+./sctp-mib/sctpTables_linux.lo: ./sctp-mib/sctpAssocRemAddrTable.h
+./sctp-mib/sctpTables_linux.lo: util_funcs.h struct.h
+./smux/smux.lo: ../../include/net-snmp/net-snmp-config.h
+./smux/smux.lo: ../../include/net-snmp/net-snmp-includes.h
+./smux/smux.lo: ../../include/net-snmp/definitions.h
+./smux/smux.lo: ../../include/net-snmp/types.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp_api.h
+./smux/smux.lo: ../../include/net-snmp/library/asn1.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp_impl.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp-tc.h
+./smux/smux.lo: ../../include/net-snmp/utilities.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp_client.h
+./smux/smux.lo: ../../include/net-snmp/library/system.h
+./smux/smux.lo: ../../include/net-snmp/library/tools.h
+./smux/smux.lo: ../../include/net-snmp/library/int64.h
+./smux/smux.lo: ../../include/net-snmp/library/mt_support.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp_alarm.h
+./smux/smux.lo: ../../include/net-snmp/library/callback.h
+./smux/smux.lo: ../../include/net-snmp/library/data_list.h
+./smux/smux.lo: ../../include/net-snmp/library/oid_stash.h
+./smux/smux.lo: ../../include/net-snmp/library/check_varbind.h
+./smux/smux.lo: ../../include/net-snmp/library/container.h
+./smux/smux.lo: ../../include/net-snmp/library/factory.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp_logging.h
+./smux/smux.lo: ../../include/net-snmp/library/container_binary_array.h
+./smux/smux.lo: ../../include/net-snmp/library/container_list_ssll.h
+./smux/smux.lo: ../../include/net-snmp/library/container_iterator.h
+./smux/smux.lo: ../../include/net-snmp/library/container.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp_assert.h
+./smux/smux.lo: ../../include/net-snmp/version.h
+./smux/smux.lo: ../../include/net-snmp/session_api.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp_transport.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp_service.h
+./smux/smux.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./smux/smux.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./smux/smux.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./smux/smux.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./smux/smux.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./smux/smux.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./smux/smux.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./smux/smux.lo: ../../include/net-snmp/library/ucd_compat.h
+./smux/smux.lo: ../../include/net-snmp/pdu_api.h
+./smux/smux.lo: ../../include/net-snmp/mib_api.h
+./smux/smux.lo: ../../include/net-snmp/library/mib.h
+./smux/smux.lo: ../../include/net-snmp/library/parse.h
+./smux/smux.lo: ../../include/net-snmp/varbind_api.h
+./smux/smux.lo: ../../include/net-snmp/config_api.h
+./smux/smux.lo: ../../include/net-snmp/library/read_config.h
+./smux/smux.lo: ../../include/net-snmp/library/default_store.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp_enum.h
+./smux/smux.lo: ../../include/net-snmp/library/vacm.h
+./smux/smux.lo: ../../include/net-snmp/output_api.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp_debug.h
+./smux/smux.lo: ../../include/net-snmp/snmpv3_api.h
+./smux/smux.lo: ../../include/net-snmp/library/snmpv3.h
+./smux/smux.lo: ../../include/net-snmp/library/transform_oids.h
+./smux/smux.lo: ../../include/net-snmp/library/keytools.h
+./smux/smux.lo: ../../include/net-snmp/library/scapi.h
+./smux/smux.lo: ../../include/net-snmp/library/lcd_time.h
+./smux/smux.lo: ../../include/net-snmp/library/snmp_secmod.h
+./smux/smux.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./smux/smux.lo: ../../include/net-snmp/library/snmpusm.h
+./smux/smux.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./smux/smux.lo: ../../include/net-snmp/agent/mib_module_config.h
+./smux/smux.lo: ../../include/net-snmp/agent/agent_module_config.h
+./smux/smux.lo: ../../include/net-snmp/agent/snmp_agent.h
+./smux/smux.lo: ../../include/net-snmp/agent/snmp_vars.h
+./smux/smux.lo: ../../include/net-snmp/agent/agent_handler.h
+./smux/smux.lo: ../../include/net-snmp/agent/var_struct.h
+./smux/smux.lo: ../../include/net-snmp/agent/agent_registry.h
+./smux/smux.lo: ../../include/net-snmp/library/fd_event_manager.h
+./smux/smux.lo: ../../include/net-snmp/agent/ds_agent.h
+./smux/smux.lo: ../../include/net-snmp/agent/agent_read_config.h
+./smux/smux.lo: ../../include/net-snmp/agent/agent_trap.h
+./smux/smux.lo: ../../include/net-snmp/agent/all_helpers.h
+./smux/smux.lo: ../../include/net-snmp/agent/instance.h
+./smux/smux.lo: ../../include/net-snmp/agent/baby_steps.h
+./smux/smux.lo: ../../include/net-snmp/agent/scalar.h
+./smux/smux.lo: ../../include/net-snmp/agent/scalar_group.h
+./smux/smux.lo: ../../include/net-snmp/agent/watcher.h
+./smux/smux.lo: ../../include/net-snmp/agent/multiplexer.h
+./smux/smux.lo: ../../include/net-snmp/agent/null.h
+./smux/smux.lo: ../../include/net-snmp/agent/debug_handler.h
+./smux/smux.lo: ../../include/net-snmp/agent/cache_handler.h
+./smux/smux.lo: ../../include/net-snmp/agent/old_api.h
+./smux/smux.lo: ../../include/net-snmp/agent/read_only.h
+./smux/smux.lo: ../../include/net-snmp/agent/row_merge.h
+./smux/smux.lo: ../../include/net-snmp/agent/serialize.h
+./smux/smux.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./smux/smux.lo: ../../include/net-snmp/agent/mode_end_call.h
+./smux/smux.lo: ../../include/net-snmp/agent/table.h
+./smux/smux.lo: ../../include/net-snmp/agent/table_data.h
+./smux/smux.lo: ../../include/net-snmp/agent/table_dataset.h
+./smux/smux.lo: ../../include/net-snmp/agent/table_tdata.h
+./smux/smux.lo: ../../include/net-snmp/agent/table_iterator.h
+./smux/smux.lo: ../../include/net-snmp/agent/table_container.h
+./smux/smux.lo: ../../include/net-snmp/agent/table_array.h
+./smux/smux.lo: ../../include/net-snmp/agent/mfd.h smux.h util_funcs.h
+./smux/smux.lo: struct.h mibdefs.h ../../agent/snmpd.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/net-snmp-config.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/net-snmp-includes.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/definitions.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/types.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp_api.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/asn1.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp_impl.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp-tc.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/utilities.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp_client.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/system.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/tools.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/int64.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/mt_support.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp_alarm.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/callback.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/data_list.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/oid_stash.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/check_varbind.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/container.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/factory.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp_logging.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/container_binary_array.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/container_list_ssll.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/container_iterator.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/container.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp_assert.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/version.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/session_api.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp_transport.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp_service.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/ucd_compat.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/pdu_api.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/mib_api.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/mib.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/parse.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/varbind_api.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/config_api.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/read_config.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/default_store.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp_enum.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/vacm.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/output_api.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp_debug.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/snmpv3_api.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmpv3.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/transform_oids.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/keytools.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/scapi.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/lcd_time.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmp_secmod.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/snmpusm.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/mib_module_config.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/agent_module_config.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/snmp_agent.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/snmp_vars.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/agent_handler.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/var_struct.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/agent_registry.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/library/fd_event_manager.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/ds_agent.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/agent_read_config.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/agent_trap.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/all_helpers.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/instance.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/baby_steps.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/scalar.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/scalar_group.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/watcher.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/multiplexer.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/null.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/debug_handler.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/cache_handler.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/old_api.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/read_only.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/row_merge.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/serialize.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/mode_end_call.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/table.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/table_data.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/table_dataset.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/table_tdata.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/table_iterator.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/table_container.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/table_array.h
+./smux/snmp_bgp.lo: ../../include/net-snmp/agent/mfd.h smux.h
+./smux/snmp_bgp.lo: ./smux/snmp_bgp.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/net-snmp-config.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/net-snmp-includes.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/definitions.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/types.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp_api.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/asn1.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp_impl.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp-tc.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/utilities.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp_client.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/system.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/tools.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/int64.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/mt_support.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp_alarm.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/callback.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/data_list.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/oid_stash.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/check_varbind.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/container.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/factory.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp_logging.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/container_binary_array.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/container_list_ssll.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/container_iterator.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/container.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp_assert.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/version.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/session_api.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp_transport.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp_service.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/ucd_compat.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/pdu_api.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/mib_api.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/mib.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/parse.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/varbind_api.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/config_api.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/read_config.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/default_store.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp_enum.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/vacm.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/output_api.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp_debug.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/snmpv3_api.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmpv3.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/transform_oids.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/keytools.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/scapi.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/lcd_time.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmp_secmod.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/snmpusm.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/mib_module_config.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/agent_module_config.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/snmp_agent.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/snmp_vars.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/agent_handler.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/var_struct.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/agent_registry.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/library/fd_event_manager.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/ds_agent.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/agent_read_config.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/agent_trap.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/all_helpers.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/instance.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/baby_steps.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/scalar.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/scalar_group.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/watcher.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/multiplexer.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/null.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/debug_handler.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/cache_handler.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/old_api.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/read_only.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/row_merge.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/serialize.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/mode_end_call.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/table.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/table_data.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/table_dataset.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/table_tdata.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/table_iterator.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/table_container.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/table_array.h
+./smux/snmp_ospf.lo: ../../include/net-snmp/agent/mfd.h smux.h
+./smux/snmp_ospf.lo: ./smux/snmp_ospf.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/net-snmp-config.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/net-snmp-includes.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/definitions.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/types.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp_api.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/asn1.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp_impl.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp-tc.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/utilities.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp_client.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/system.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/tools.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/int64.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/mt_support.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp_alarm.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/callback.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/data_list.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/oid_stash.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/check_varbind.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/container.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/factory.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp_logging.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/container_binary_array.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/container_list_ssll.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/container_iterator.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/container.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp_assert.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/version.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/session_api.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp_transport.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp_service.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/ucd_compat.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/pdu_api.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/mib_api.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/mib.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/parse.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/varbind_api.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/config_api.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/read_config.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/default_store.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp_enum.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/vacm.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/output_api.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp_debug.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/snmpv3_api.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmpv3.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/transform_oids.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/keytools.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/scapi.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/lcd_time.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmp_secmod.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/snmpusm.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/mib_module_config.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/agent_module_config.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/snmp_agent.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/snmp_vars.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/agent_handler.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/var_struct.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/agent_registry.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/library/fd_event_manager.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/ds_agent.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/agent_read_config.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/agent_trap.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/all_helpers.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/instance.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/baby_steps.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/scalar.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/scalar_group.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/watcher.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/multiplexer.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/null.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/debug_handler.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/cache_handler.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/old_api.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/read_only.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/row_merge.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/serialize.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/mode_end_call.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/table.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/table_data.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/table_dataset.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/table_tdata.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/table_iterator.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/table_container.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/table_array.h
+./smux/snmp_rip2.lo: ../../include/net-snmp/agent/mfd.h smux.h
+./smux/snmp_rip2.lo: ./smux/snmp_rip2.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/net-snmp-config.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/net-snmp-includes.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/definitions.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/types.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp_api.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/asn1.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp_impl.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp-tc.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/utilities.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp_client.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/system.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/tools.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/int64.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/mt_support.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp_alarm.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/callback.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/data_list.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/oid_stash.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/check_varbind.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/container.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/factory.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp_logging.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/container_binary_array.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/container_list_ssll.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/container_iterator.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/container.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp_assert.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/version.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/session_api.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp_transport.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp_service.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/ucd_compat.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/pdu_api.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/mib_api.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/mib.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/parse.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/varbind_api.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/config_api.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/read_config.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/default_store.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp_enum.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/vacm.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/output_api.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp_debug.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/snmpv3_api.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmpv3.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/transform_oids.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/keytools.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/scapi.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/lcd_time.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmp_secmod.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/snmpusm.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/mib_module_config.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/agent_module_config.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/snmp_agent.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/snmp_vars.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/agent_handler.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/var_struct.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/agent_registry.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/library/fd_event_manager.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/ds_agent.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/agent_read_config.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/agent_trap.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/all_helpers.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/instance.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/baby_steps.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/scalar.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/scalar_group.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/watcher.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/multiplexer.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/null.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/debug_handler.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/cache_handler.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/old_api.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/read_only.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/row_merge.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/serialize.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/mode_end_call.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/table.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/table_data.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/table_dataset.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/table_tdata.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/table_iterator.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/table_container.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/table_array.h
+./snmpv3/snmpEngine.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h
+./snmpv3/snmpEngine.lo: struct.h mibII/sysORTable.h ./snmpv3/snmpEngine.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/net-snmp-config.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/net-snmp-includes.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/definitions.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/types.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp_api.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/asn1.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp_impl.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp-tc.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/utilities.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp_client.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/system.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/tools.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/int64.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/mt_support.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp_alarm.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/callback.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/data_list.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/oid_stash.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/check_varbind.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/container.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/factory.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp_logging.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/container_binary_array.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/container_list_ssll.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/container_iterator.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/container.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp_assert.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/version.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/session_api.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp_transport.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp_service.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/ucd_compat.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/pdu_api.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/mib_api.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/mib.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/parse.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/varbind_api.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/config_api.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/read_config.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/default_store.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp_enum.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/vacm.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/output_api.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp_debug.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/snmpv3_api.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmpv3.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/transform_oids.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/keytools.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/scapi.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/lcd_time.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmp_secmod.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/snmpusm.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/mib_module_config.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/agent_module_config.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/snmp_agent.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/snmp_vars.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/agent_handler.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/var_struct.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/agent_registry.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/library/fd_event_manager.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/ds_agent.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/agent_read_config.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/agent_trap.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/all_helpers.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/instance.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/baby_steps.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/scalar.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/scalar_group.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/watcher.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/multiplexer.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/null.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/debug_handler.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/cache_handler.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/old_api.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/read_only.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/row_merge.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/serialize.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/mode_end_call.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/table.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/table_data.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/table_dataset.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/table_tdata.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/table_iterator.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/table_container.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/table_array.h
+./snmpv3/snmpMPDStats.lo: ../../include/net-snmp/agent/mfd.h
+./snmpv3/snmpMPDStats.lo: mibII/sysORTable.h ./snmpv3/snmpMPDStats.h
+./snmpv3/snmpMPDStats.lo: util_funcs.h struct.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/net-snmp-config.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/net-snmp-includes.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/definitions.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/types.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp_api.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/asn1.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp_impl.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp-tc.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/utilities.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp_client.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/system.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/tools.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/int64.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/mt_support.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp_alarm.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/callback.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/data_list.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/oid_stash.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/check_varbind.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/container.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/factory.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp_logging.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/container_binary_array.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/container_list_ssll.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/container_iterator.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/container.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp_assert.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/version.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/session_api.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp_transport.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp_service.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/ucd_compat.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/pdu_api.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/mib_api.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/mib.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/parse.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/varbind_api.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/config_api.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/read_config.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/default_store.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp_enum.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/vacm.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/output_api.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp_debug.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/snmpv3_api.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmpv3.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/transform_oids.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/keytools.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/scapi.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/lcd_time.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmp_secmod.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/snmpusm.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/mib_module_config.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/agent_module_config.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/snmp_agent.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/snmp_vars.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/agent_handler.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/var_struct.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/agent_registry.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/library/fd_event_manager.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/ds_agent.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/agent_read_config.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/agent_trap.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/all_helpers.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/instance.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/baby_steps.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/scalar.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/scalar_group.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/watcher.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/multiplexer.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/null.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/debug_handler.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/cache_handler.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/old_api.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/read_only.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/row_merge.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/serialize.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/mode_end_call.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/table.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/table_data.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/table_dataset.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/table_tdata.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/table_iterator.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/table_container.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/table_array.h
+./snmpv3/usmConf.lo: ../../include/net-snmp/agent/mfd.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/net-snmp-config.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/net-snmp-includes.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/definitions.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/types.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp_api.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/asn1.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp_impl.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp-tc.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/utilities.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp_client.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/system.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/tools.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/int64.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/mt_support.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp_alarm.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/callback.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/data_list.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/oid_stash.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/check_varbind.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/container.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/factory.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp_logging.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/container_binary_array.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/container_list_ssll.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/container_iterator.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/container.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp_assert.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/version.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/session_api.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp_transport.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp_service.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/ucd_compat.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/pdu_api.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/mib_api.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/mib.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/parse.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/varbind_api.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/config_api.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/read_config.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/default_store.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp_enum.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/vacm.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/output_api.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp_debug.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/snmpv3_api.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmpv3.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/transform_oids.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/keytools.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/scapi.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/lcd_time.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmp_secmod.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/snmpusm.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/mib_module_config.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/agent_module_config.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/snmp_agent.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/snmp_vars.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/agent_handler.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/var_struct.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/agent_registry.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/library/fd_event_manager.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/ds_agent.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/agent_read_config.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/agent_trap.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/all_helpers.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/instance.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/baby_steps.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/scalar.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/scalar_group.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/watcher.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/multiplexer.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/null.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/debug_handler.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/cache_handler.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/old_api.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/read_only.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/row_merge.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/serialize.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/mode_end_call.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/table.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/table_data.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/table_dataset.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/table_tdata.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/table_iterator.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/table_container.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/table_array.h
+./snmpv3/usmStats.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h
+./snmpv3/usmStats.lo: struct.h mibII/sysORTable.h ./snmpv3/usmStats.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/net-snmp-config.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/net-snmp-includes.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/definitions.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/types.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp_api.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/asn1.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp_impl.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp-tc.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/utilities.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp_client.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/system.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/tools.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/int64.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/mt_support.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp_alarm.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/callback.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/data_list.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/oid_stash.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/check_varbind.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/container.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/factory.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp_logging.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/container_binary_array.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/container_list_ssll.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/container_iterator.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/container.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp_assert.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/version.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/session_api.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp_transport.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp_service.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/ucd_compat.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/pdu_api.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/mib_api.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/mib.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/parse.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/varbind_api.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/config_api.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/read_config.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/default_store.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp_enum.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/vacm.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/output_api.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp_debug.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/snmpv3_api.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmpv3.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/transform_oids.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/keytools.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/scapi.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/lcd_time.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmp_secmod.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/snmpusm.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/mib_module_config.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/agent_module_config.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/snmp_agent.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/snmp_vars.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/agent_handler.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/var_struct.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/agent_registry.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/library/fd_event_manager.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/ds_agent.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/agent_read_config.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/agent_trap.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/all_helpers.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/instance.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/baby_steps.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/scalar.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/scalar_group.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/watcher.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/multiplexer.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/null.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/debug_handler.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/cache_handler.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/old_api.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/read_only.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/row_merge.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/serialize.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/mode_end_call.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/table.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/table_data.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/table_dataset.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/table_tdata.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/table_iterator.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/table_container.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/table_array.h
+./snmpv3/usmUser.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h struct.h
+./snmpv3/usmUser.lo: ./snmpv3/usmUser.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/net-snmp-config.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/net-snmp-includes.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/definitions.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/types.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp_api.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/asn1.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp_impl.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp-tc.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/utilities.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp_client.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/system.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/tools.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/int64.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/mt_support.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp_alarm.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/callback.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/data_list.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/oid_stash.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/check_varbind.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/container.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/factory.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp_logging.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/container_binary_array.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/container_list_ssll.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/container_iterator.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/container.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp_assert.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/version.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/session_api.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp_transport.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp_service.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/ucd_compat.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/pdu_api.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/mib_api.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/mib.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/parse.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/varbind_api.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/config_api.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/read_config.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/default_store.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp_enum.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/vacm.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/output_api.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp_debug.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/snmpv3_api.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmpv3.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/transform_oids.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/keytools.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/scapi.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/lcd_time.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmp_secmod.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/snmpusm.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/mib_module_config.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/agent_module_config.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/snmp_agent.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/snmp_vars.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/agent_handler.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/var_struct.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/agent_registry.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/library/fd_event_manager.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/ds_agent.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/agent_read_config.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/agent_trap.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/all_helpers.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/instance.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/baby_steps.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/scalar.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/scalar_group.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/watcher.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/multiplexer.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/null.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/debug_handler.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/cache_handler.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/old_api.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/read_only.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/row_merge.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/serialize.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/mode_end_call.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/table.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/table_data.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/table_dataset.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/table_tdata.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/table_iterator.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/table_container.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/table_array.h
+./target/snmpTargetAddrEntry.lo: ../../include/net-snmp/agent/mfd.h
+./target/snmpTargetAddrEntry.lo: ./target/snmpTargetAddrEntry.h util_funcs.h
+./target/snmpTargetAddrEntry.lo: struct.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/net-snmp-config.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/net-snmp-includes.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/definitions.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/types.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp_api.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/asn1.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp_impl.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp-tc.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/utilities.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp_client.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/system.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/tools.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/int64.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/mt_support.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp_alarm.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/callback.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/data_list.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/oid_stash.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/check_varbind.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/container.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/factory.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp_logging.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/container_binary_array.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/container_list_ssll.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/container_iterator.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/container.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp_assert.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/version.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/session_api.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp_transport.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp_service.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/ucd_compat.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/pdu_api.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/mib_api.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/mib.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/parse.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/varbind_api.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/config_api.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/read_config.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/default_store.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp_enum.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/vacm.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/output_api.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp_debug.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/snmpv3_api.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmpv3.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/transform_oids.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/keytools.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/scapi.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/lcd_time.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmp_secmod.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/snmpusm.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/mib_module_config.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/agent_module_config.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/snmp_agent.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/snmp_vars.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/agent_handler.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/var_struct.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/agent_registry.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/library/fd_event_manager.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/ds_agent.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/agent_read_config.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/agent_trap.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/all_helpers.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/instance.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/baby_steps.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/scalar.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/scalar_group.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/watcher.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/multiplexer.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/null.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/debug_handler.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/cache_handler.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/old_api.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/read_only.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/row_merge.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/serialize.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/mode_end_call.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/table.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/table_data.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/table_dataset.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/table_tdata.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/table_iterator.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/table_container.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/table_array.h
+./target/snmpTargetParamsEntry.lo: ../../include/net-snmp/agent/mfd.h
+./target/snmpTargetParamsEntry.lo: ./target/snmpTargetParamsEntry.h
+./target/target.lo: ../../include/net-snmp/net-snmp-config.h
+./target/target.lo: ../../include/net-snmp/net-snmp-includes.h
+./target/target.lo: ../../include/net-snmp/definitions.h
+./target/target.lo: ../../include/net-snmp/types.h
+./target/target.lo: ../../include/net-snmp/library/snmp_api.h
+./target/target.lo: ../../include/net-snmp/library/asn1.h
+./target/target.lo: ../../include/net-snmp/library/snmp_impl.h
+./target/target.lo: ../../include/net-snmp/library/snmp.h
+./target/target.lo: ../../include/net-snmp/library/snmp-tc.h
+./target/target.lo: ../../include/net-snmp/utilities.h
+./target/target.lo: ../../include/net-snmp/library/snmp_client.h
+./target/target.lo: ../../include/net-snmp/library/system.h
+./target/target.lo: ../../include/net-snmp/library/tools.h
+./target/target.lo: ../../include/net-snmp/library/int64.h
+./target/target.lo: ../../include/net-snmp/library/mt_support.h
+./target/target.lo: ../../include/net-snmp/library/snmp_alarm.h
+./target/target.lo: ../../include/net-snmp/library/callback.h
+./target/target.lo: ../../include/net-snmp/library/data_list.h
+./target/target.lo: ../../include/net-snmp/library/oid_stash.h
+./target/target.lo: ../../include/net-snmp/library/check_varbind.h
+./target/target.lo: ../../include/net-snmp/library/container.h
+./target/target.lo: ../../include/net-snmp/library/factory.h
+./target/target.lo: ../../include/net-snmp/library/snmp_logging.h
+./target/target.lo: ../../include/net-snmp/library/container_binary_array.h
+./target/target.lo: ../../include/net-snmp/library/container_list_ssll.h
+./target/target.lo: ../../include/net-snmp/library/container_iterator.h
+./target/target.lo: ../../include/net-snmp/library/container.h
+./target/target.lo: ../../include/net-snmp/library/snmp_assert.h
+./target/target.lo: ../../include/net-snmp/version.h
+./target/target.lo: ../../include/net-snmp/session_api.h
+./target/target.lo: ../../include/net-snmp/library/snmp_transport.h
+./target/target.lo: ../../include/net-snmp/library/snmp_service.h
+./target/target.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./target/target.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./target/target.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./target/target.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./target/target.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./target/target.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./target/target.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./target/target.lo: ../../include/net-snmp/library/ucd_compat.h
+./target/target.lo: ../../include/net-snmp/pdu_api.h
+./target/target.lo: ../../include/net-snmp/mib_api.h
+./target/target.lo: ../../include/net-snmp/library/mib.h
+./target/target.lo: ../../include/net-snmp/library/parse.h
+./target/target.lo: ../../include/net-snmp/varbind_api.h
+./target/target.lo: ../../include/net-snmp/config_api.h
+./target/target.lo: ../../include/net-snmp/library/read_config.h
+./target/target.lo: ../../include/net-snmp/library/default_store.h
+./target/target.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./target/target.lo: ../../include/net-snmp/library/snmp_enum.h
+./target/target.lo: ../../include/net-snmp/library/vacm.h
+./target/target.lo: ../../include/net-snmp/output_api.h
+./target/target.lo: ../../include/net-snmp/library/snmp_debug.h
+./target/target.lo: ../../include/net-snmp/snmpv3_api.h
+./target/target.lo: ../../include/net-snmp/library/snmpv3.h
+./target/target.lo: ../../include/net-snmp/library/transform_oids.h
+./target/target.lo: ../../include/net-snmp/library/keytools.h
+./target/target.lo: ../../include/net-snmp/library/scapi.h
+./target/target.lo: ../../include/net-snmp/library/lcd_time.h
+./target/target.lo: ../../include/net-snmp/library/snmp_secmod.h
+./target/target.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./target/target.lo: ../../include/net-snmp/library/snmpusm.h
+./target/target.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./target/target.lo: ../../include/net-snmp/agent/mib_module_config.h
+./target/target.lo: ../../include/net-snmp/agent/agent_module_config.h
+./target/target.lo: ../../include/net-snmp/agent/snmp_agent.h
+./target/target.lo: ../../include/net-snmp/agent/snmp_vars.h
+./target/target.lo: ../../include/net-snmp/agent/agent_handler.h
+./target/target.lo: ../../include/net-snmp/agent/var_struct.h
+./target/target.lo: ../../include/net-snmp/agent/agent_registry.h
+./target/target.lo: ../../include/net-snmp/library/fd_event_manager.h
+./target/target.lo: ../../include/net-snmp/agent/ds_agent.h
+./target/target.lo: ../../include/net-snmp/agent/agent_read_config.h
+./target/target.lo: ../../include/net-snmp/agent/agent_trap.h
+./target/target.lo: ../../include/net-snmp/agent/all_helpers.h
+./target/target.lo: ../../include/net-snmp/agent/instance.h
+./target/target.lo: ../../include/net-snmp/agent/baby_steps.h
+./target/target.lo: ../../include/net-snmp/agent/scalar.h
+./target/target.lo: ../../include/net-snmp/agent/scalar_group.h
+./target/target.lo: ../../include/net-snmp/agent/watcher.h
+./target/target.lo: ../../include/net-snmp/agent/multiplexer.h
+./target/target.lo: ../../include/net-snmp/agent/null.h
+./target/target.lo: ../../include/net-snmp/agent/debug_handler.h
+./target/target.lo: ../../include/net-snmp/agent/cache_handler.h
+./target/target.lo: ../../include/net-snmp/agent/old_api.h
+./target/target.lo: ../../include/net-snmp/agent/read_only.h
+./target/target.lo: ../../include/net-snmp/agent/row_merge.h
+./target/target.lo: ../../include/net-snmp/agent/serialize.h
+./target/target.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./target/target.lo: ../../include/net-snmp/agent/mode_end_call.h
+./target/target.lo: ../../include/net-snmp/agent/table.h
+./target/target.lo: ../../include/net-snmp/agent/table_data.h
+./target/target.lo: ../../include/net-snmp/agent/table_dataset.h
+./target/target.lo: ../../include/net-snmp/agent/table_tdata.h
+./target/target.lo: ../../include/net-snmp/agent/table_iterator.h
+./target/target.lo: ../../include/net-snmp/agent/table_container.h
+./target/target.lo: ../../include/net-snmp/agent/table_array.h
+./target/target.lo: ../../include/net-snmp/agent/mfd.h
+./target/target.lo: ./target/snmpTargetAddrEntry.h
+./target/target.lo: ./target/snmpTargetParamsEntry.h target.h
+./target/target_counters.lo: ../../include/net-snmp/net-snmp-config.h
+./target/target_counters.lo: ../../include/net-snmp/net-snmp-includes.h
+./target/target_counters.lo: ../../include/net-snmp/definitions.h
+./target/target_counters.lo: ../../include/net-snmp/types.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp_api.h
+./target/target_counters.lo: ../../include/net-snmp/library/asn1.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp_impl.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp-tc.h
+./target/target_counters.lo: ../../include/net-snmp/utilities.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp_client.h
+./target/target_counters.lo: ../../include/net-snmp/library/system.h
+./target/target_counters.lo: ../../include/net-snmp/library/tools.h
+./target/target_counters.lo: ../../include/net-snmp/library/int64.h
+./target/target_counters.lo: ../../include/net-snmp/library/mt_support.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp_alarm.h
+./target/target_counters.lo: ../../include/net-snmp/library/callback.h
+./target/target_counters.lo: ../../include/net-snmp/library/data_list.h
+./target/target_counters.lo: ../../include/net-snmp/library/oid_stash.h
+./target/target_counters.lo: ../../include/net-snmp/library/check_varbind.h
+./target/target_counters.lo: ../../include/net-snmp/library/container.h
+./target/target_counters.lo: ../../include/net-snmp/library/factory.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp_logging.h
+./target/target_counters.lo: ../../include/net-snmp/library/container_binary_array.h
+./target/target_counters.lo: ../../include/net-snmp/library/container_list_ssll.h
+./target/target_counters.lo: ../../include/net-snmp/library/container_iterator.h
+./target/target_counters.lo: ../../include/net-snmp/library/container.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp_assert.h
+./target/target_counters.lo: ../../include/net-snmp/version.h
+./target/target_counters.lo: ../../include/net-snmp/session_api.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp_transport.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp_service.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./target/target_counters.lo: ../../include/net-snmp/library/ucd_compat.h
+./target/target_counters.lo: ../../include/net-snmp/pdu_api.h
+./target/target_counters.lo: ../../include/net-snmp/mib_api.h
+./target/target_counters.lo: ../../include/net-snmp/library/mib.h
+./target/target_counters.lo: ../../include/net-snmp/library/parse.h
+./target/target_counters.lo: ../../include/net-snmp/varbind_api.h
+./target/target_counters.lo: ../../include/net-snmp/config_api.h
+./target/target_counters.lo: ../../include/net-snmp/library/read_config.h
+./target/target_counters.lo: ../../include/net-snmp/library/default_store.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp_enum.h
+./target/target_counters.lo: ../../include/net-snmp/library/vacm.h
+./target/target_counters.lo: ../../include/net-snmp/output_api.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp_debug.h
+./target/target_counters.lo: ../../include/net-snmp/snmpv3_api.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmpv3.h
+./target/target_counters.lo: ../../include/net-snmp/library/transform_oids.h
+./target/target_counters.lo: ../../include/net-snmp/library/keytools.h
+./target/target_counters.lo: ../../include/net-snmp/library/scapi.h
+./target/target_counters.lo: ../../include/net-snmp/library/lcd_time.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmp_secmod.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./target/target_counters.lo: ../../include/net-snmp/library/snmpusm.h
+./target/target_counters.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./target/target_counters.lo: ../../include/net-snmp/agent/mib_module_config.h
+./target/target_counters.lo: ../../include/net-snmp/agent/agent_module_config.h
+./target/target_counters.lo: ../../include/net-snmp/agent/snmp_agent.h
+./target/target_counters.lo: ../../include/net-snmp/agent/snmp_vars.h
+./target/target_counters.lo: ../../include/net-snmp/agent/agent_handler.h
+./target/target_counters.lo: ../../include/net-snmp/agent/var_struct.h
+./target/target_counters.lo: ../../include/net-snmp/agent/agent_registry.h
+./target/target_counters.lo: ../../include/net-snmp/library/fd_event_manager.h
+./target/target_counters.lo: ../../include/net-snmp/agent/ds_agent.h
+./target/target_counters.lo: ../../include/net-snmp/agent/agent_read_config.h
+./target/target_counters.lo: ../../include/net-snmp/agent/agent_trap.h
+./target/target_counters.lo: ../../include/net-snmp/agent/all_helpers.h
+./target/target_counters.lo: ../../include/net-snmp/agent/instance.h
+./target/target_counters.lo: ../../include/net-snmp/agent/baby_steps.h
+./target/target_counters.lo: ../../include/net-snmp/agent/scalar.h
+./target/target_counters.lo: ../../include/net-snmp/agent/scalar_group.h
+./target/target_counters.lo: ../../include/net-snmp/agent/watcher.h
+./target/target_counters.lo: ../../include/net-snmp/agent/multiplexer.h
+./target/target_counters.lo: ../../include/net-snmp/agent/null.h
+./target/target_counters.lo: ../../include/net-snmp/agent/debug_handler.h
+./target/target_counters.lo: ../../include/net-snmp/agent/cache_handler.h
+./target/target_counters.lo: ../../include/net-snmp/agent/old_api.h
+./target/target_counters.lo: ../../include/net-snmp/agent/read_only.h
+./target/target_counters.lo: ../../include/net-snmp/agent/row_merge.h
+./target/target_counters.lo: ../../include/net-snmp/agent/serialize.h
+./target/target_counters.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./target/target_counters.lo: ../../include/net-snmp/agent/mode_end_call.h
+./target/target_counters.lo: ../../include/net-snmp/agent/table.h
+./target/target_counters.lo: ../../include/net-snmp/agent/table_data.h
+./target/target_counters.lo: ../../include/net-snmp/agent/table_dataset.h
+./target/target_counters.lo: ../../include/net-snmp/agent/table_tdata.h
+./target/target_counters.lo: ../../include/net-snmp/agent/table_iterator.h
+./target/target_counters.lo: ../../include/net-snmp/agent/table_container.h
+./target/target_counters.lo: ../../include/net-snmp/agent/table_array.h
+./target/target_counters.lo: ../../include/net-snmp/agent/mfd.h
+./target/target_counters.lo: ./target/target_counters.h
+./tunnel/tunnel.lo: ../../include/net-snmp/net-snmp-config.h
+./tunnel/tunnel.lo: ../../include/net-snmp/net-snmp-includes.h
+./tunnel/tunnel.lo: ../../include/net-snmp/definitions.h
+./tunnel/tunnel.lo: ../../include/net-snmp/types.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp_api.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/asn1.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp_impl.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp-tc.h
+./tunnel/tunnel.lo: ../../include/net-snmp/utilities.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp_client.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/system.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/tools.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/int64.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/mt_support.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp_alarm.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/callback.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/data_list.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/oid_stash.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/check_varbind.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/container.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/factory.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp_logging.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/container_binary_array.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/container_list_ssll.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/container_iterator.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/container.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp_assert.h
+./tunnel/tunnel.lo: ../../include/net-snmp/version.h
+./tunnel/tunnel.lo: ../../include/net-snmp/session_api.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp_transport.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp_service.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/ucd_compat.h
+./tunnel/tunnel.lo: ../../include/net-snmp/pdu_api.h
+./tunnel/tunnel.lo: ../../include/net-snmp/mib_api.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/mib.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/parse.h
+./tunnel/tunnel.lo: ../../include/net-snmp/varbind_api.h
+./tunnel/tunnel.lo: ../../include/net-snmp/config_api.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/read_config.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/default_store.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp_enum.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/vacm.h
+./tunnel/tunnel.lo: ../../include/net-snmp/output_api.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp_debug.h
+./tunnel/tunnel.lo: ../../include/net-snmp/snmpv3_api.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmpv3.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/transform_oids.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/keytools.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/scapi.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/lcd_time.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmp_secmod.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/snmpusm.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/mib_module_config.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/agent_module_config.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/snmp_agent.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/snmp_vars.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/agent_handler.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/var_struct.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/agent_registry.h
+./tunnel/tunnel.lo: ../../include/net-snmp/library/fd_event_manager.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/ds_agent.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/agent_read_config.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/agent_trap.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/all_helpers.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/instance.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/baby_steps.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/scalar.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/scalar_group.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/watcher.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/multiplexer.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/null.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/debug_handler.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/cache_handler.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/old_api.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/read_only.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/row_merge.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/serialize.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/mode_end_call.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/table.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/table_data.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/table_dataset.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/table_tdata.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/table_iterator.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/table_container.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/table_array.h
+./tunnel/tunnel.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h struct.h
+./tunnel/tunnel.lo: tunnel.h if-mib/ifTable/ifTable.h
+./tunnel/tunnel.lo: ../../include/net-snmp/data_access/interface.h
+./tunnel/tunnel.lo: if-mib/ifTable/ifTable_constants.h
+./tunnel/tunnel.lo: if-mib/ifTable/ifTable_interface.h
+./tunnel/tunnel.lo: if-mib/ifTable/ifTable.h
+./tunnel/tunnel.lo: if-mib/ifTable/ifTable_data_access.h
+./tunnel/tunnel.lo: if-mib/ifTable/ifTable_defs.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/types.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/version.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/disk.lo: ../../include/net-snmp/agent/auto_nlist.h struct.h
+./ucd-snmp/disk.lo: ./ucd-snmp/disk.h mibdefs.h util_funcs.h
+./ucd-snmp/disk.lo: ./ucd-snmp/errormib.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/types.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/version.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/diskio.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h
+./ucd-snmp/diskio.lo: struct.h ./ucd-snmp/diskio.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/types.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/version.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/dlmod.lo: ../../include/net-snmp/agent/mfd.h struct.h util_funcs.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/types.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/version.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/errormib.lo: ../../include/net-snmp/agent/auto_nlist.h struct.h
+./ucd-snmp/errormib.lo: ./ucd-snmp/errormib.h mibdefs.h util_funcs.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/types.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/version.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/extensible.lo: ../../include/net-snmp/agent/agent_callbacks.h
+./ucd-snmp/extensible.lo: struct.h ./ucd-snmp/extensible.h mibdefs.h
+./ucd-snmp/extensible.lo: utilities/execute.h util_funcs.h
+./ucd-snmp/file.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/file.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/file.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/file.lo: ../../include/net-snmp/types.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/file.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/file.lo: ../../include/net-snmp/version.h
+./ucd-snmp/file.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/file.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/file.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/file.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/file.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/file.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/file.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/file.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/file.lo: ../../include/net-snmp/agent/mfd.h struct.h
+./ucd-snmp/file.lo: ./ucd-snmp/file.h mibdefs.h util_funcs.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/types.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/version.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/hpux.lo: ../../include/net-snmp/agent/mfd.h ./ucd-snmp/hpux.h
+./ucd-snmp/hpux.lo: mibdefs.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/types.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/version.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/lmSensors.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h
+./ucd-snmp/lmSensors.lo: struct.h ./ucd-snmp/lmSensors.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/types.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/version.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/loadave.lo: ../../include/net-snmp/agent/auto_nlist.h struct.h
+./ucd-snmp/loadave.lo: ./ucd-snmp/loadave.h mibdefs.h util_funcs.h
+./ucd-snmp/loadave.lo: ../../agent/kernel.h
+./ucd-snmp/logmatch.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/types.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/version.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/memory.lo: ../../include/net-snmp/agent/hardware/memory.h
+./ucd-snmp/memory.lo: ./ucd-snmp/memory.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/types.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/version.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/memory_aix4.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/memory_aix4.lo: util_funcs.h struct.h ./ucd-snmp/memory.h
+./ucd-snmp/memory_aix4.lo: ./ucd-snmp/memory_aix4.h mibdefs.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/types.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/version.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/memory_darwin7.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/memory_darwin7.lo: util_funcs.h struct.h ./ucd-snmp/memory.h
+./ucd-snmp/memory_darwin7.lo: ./ucd-snmp/memory_darwin7.h mibdefs.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/types.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/version.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/memory_dynix.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/memory_dynix.lo: util_funcs.h struct.h ./ucd-snmp/memory.h
+./ucd-snmp/memory_dynix.lo: ./ucd-snmp/memory_dynix.h mibdefs.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/types.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/version.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/memory_freebsd2.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/memory_freebsd2.lo: util_funcs.h struct.h ./ucd-snmp/memory.h
+./ucd-snmp/memory_freebsd2.lo: ./ucd-snmp/memory_freebsd2.h mibdefs.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/types.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/version.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/memory_hpux.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/memory_hpux.lo: ./ucd-snmp/memory.h ./ucd-snmp/memory_hpux.h
+./ucd-snmp/memory_hpux.lo: mibdefs.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/types.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/version.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/memory_netbsd1.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/memory_netbsd1.lo: util_funcs.h struct.h ./ucd-snmp/memory.h
+./ucd-snmp/memory_netbsd1.lo: ./ucd-snmp/memory_netbsd1.h mibdefs.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/types.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/version.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/memory_solaris2.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/memory_solaris2.lo: util_funcs.h struct.h ./ucd-snmp/memory.h
+./ucd-snmp/memory_solaris2.lo: ./ucd-snmp/memory_solaris2.h mibdefs.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/types.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/version.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/pass.lo: ../../include/net-snmp/agent/mfd.h struct.h
+./ucd-snmp/pass.lo: ./ucd-snmp/pass.h mibdefs.h ./ucd-snmp/extensible.h
+./ucd-snmp/pass.lo: util_funcs.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/types.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/version.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/pass_persist.lo: ../../include/net-snmp/agent/mfd.h struct.h
+./ucd-snmp/pass_persist.lo: ./ucd-snmp/pass_persist.h mibdefs.h
+./ucd-snmp/pass_persist.lo: ./ucd-snmp/extensible.h util_funcs.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/types.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/version.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/proc.lo: ../../include/net-snmp/agent/mfd.h struct.h
+./ucd-snmp/proc.lo: ./ucd-snmp/proc.h mibdefs.h ./ucd-snmp/errormib.h
+./ucd-snmp/proc.lo: util_funcs.h ../../agent/kernel.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/types.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/version.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/proxy.lo: ../../include/net-snmp/agent/mfd.h ./ucd-snmp/proxy.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/types.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/version.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/versioninfo.lo: ../../include/net-snmp/agent/mfd.h struct.h
+./ucd-snmp/versioninfo.lo: ./ucd-snmp/versioninfo.h mibdefs.h util_funcs.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/types.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/version.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/vmstat.lo: ../../include/net-snmp/agent/hardware/cpu.h
+./ucd-snmp/vmstat.lo: ./ucd-snmp/vmstat.h mibdefs.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/types.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/version.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/vmstat_aix4.lo: ../../include/net-snmp/agent/mfd.h mibdefs.h
+./ucd-snmp/vmstat_aix4.lo: util_funcs.h struct.h ./ucd-snmp/vmstat.h
+./ucd-snmp/vmstat_aix4.lo: ./ucd-snmp/vmstat_aix4.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/types.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/version.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/vmstat_bsdi4.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/vmstat_bsdi4.lo: util_funcs.h struct.h ./ucd-snmp/vmstat.h
+./ucd-snmp/vmstat_bsdi4.lo: mibdefs.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/types.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/version.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/vmstat_darwin7.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/vmstat_darwin7.lo: util_funcs.h struct.h ./ucd-snmp/vmstat.h
+./ucd-snmp/vmstat_darwin7.lo: mibdefs.h ./ucd-snmp/vmstat_darwin7.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/types.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/version.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/vmstat_dynix.lo: ../../include/net-snmp/agent/mfd.h mibdefs.h
+./ucd-snmp/vmstat_dynix.lo: util_funcs.h struct.h ./ucd-snmp/vmstat.h
+./ucd-snmp/vmstat_dynix.lo: ./ucd-snmp/vmstat_dynix.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/types.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/version.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/vmstat_freebsd2.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/vmstat_freebsd2.lo: util_funcs.h struct.h ./ucd-snmp/vmstat.h
+./ucd-snmp/vmstat_freebsd2.lo: mibdefs.h ./ucd-snmp/vmstat_freebsd2.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/types.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/version.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/vmstat_hpux.lo: ../../include/net-snmp/agent/mfd.h mibdefs.h
+./ucd-snmp/vmstat_hpux.lo: util_funcs.h struct.h ./ucd-snmp/vmstat.h
+./ucd-snmp/vmstat_hpux.lo: ./ucd-snmp/vmstat_hpux.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/types.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/version.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/vmstat_linux.lo: ../../include/net-snmp/agent/hardware/cpu.h
+./ucd-snmp/vmstat_linux.lo: mibdefs.h struct.h util_funcs.h
+./ucd-snmp/vmstat_linux.lo: ./ucd-snmp/vmstat.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/types.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/version.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/mfd.h
+./ucd-snmp/vmstat_netbsd1.lo: ../../include/net-snmp/agent/auto_nlist.h
+./ucd-snmp/vmstat_netbsd1.lo: util_funcs.h struct.h ./ucd-snmp/vmstat.h
+./ucd-snmp/vmstat_netbsd1.lo: mibdefs.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/net-snmp-config.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/net-snmp-includes.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/definitions.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/types.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp_api.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/asn1.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp_impl.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp-tc.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/utilities.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp_client.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/system.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/tools.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/int64.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/mt_support.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp_alarm.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/callback.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/data_list.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/oid_stash.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/check_varbind.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/factory.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp_logging.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/container_binary_array.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/container_list_ssll.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/container_iterator.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/container.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp_assert.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/version.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/session_api.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp_transport.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp_service.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/ucd_compat.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/pdu_api.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/mib_api.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/mib.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/parse.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/varbind_api.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/config_api.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/read_config.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/default_store.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp_enum.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/vacm.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/output_api.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp_debug.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/snmpv3_api.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmpv3.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/transform_oids.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/keytools.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/scapi.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/lcd_time.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmp_secmod.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/snmpusm.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/mib_module_config.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/agent_module_config.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/snmp_agent.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/snmp_vars.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/agent_handler.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/var_struct.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/agent_registry.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/library/fd_event_manager.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/ds_agent.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/agent_read_config.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/agent_trap.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/all_helpers.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/instance.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/baby_steps.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/scalar.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/scalar_group.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/watcher.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/multiplexer.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/null.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/debug_handler.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/cache_handler.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/old_api.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/read_only.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/row_merge.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/serialize.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/mode_end_call.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/table.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/table_data.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/table_dataset.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/table_tdata.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/table_iterator.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/table_container.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/table_array.h
+./ucd-snmp/vmstat_solaris2.lo: ../../include/net-snmp/agent/mfd.h mibdefs.h
+./ucd-snmp/vmstat_solaris2.lo: util_funcs.h struct.h ./ucd-snmp/vmstat.h
+./ucd-snmp/vmstat_solaris2.lo: ./ucd-snmp/vmstat_solaris2.h
+./utilities/execute.lo: ../../include/net-snmp/net-snmp-config.h
+./utilities/execute.lo: ../../include/net-snmp/net-snmp-includes.h
+./utilities/execute.lo: ../../include/net-snmp/definitions.h
+./utilities/execute.lo: ../../include/net-snmp/types.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp_api.h
+./utilities/execute.lo: ../../include/net-snmp/library/asn1.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp_impl.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp-tc.h
+./utilities/execute.lo: ../../include/net-snmp/utilities.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp_client.h
+./utilities/execute.lo: ../../include/net-snmp/library/system.h
+./utilities/execute.lo: ../../include/net-snmp/library/tools.h
+./utilities/execute.lo: ../../include/net-snmp/library/int64.h
+./utilities/execute.lo: ../../include/net-snmp/library/mt_support.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp_alarm.h
+./utilities/execute.lo: ../../include/net-snmp/library/callback.h
+./utilities/execute.lo: ../../include/net-snmp/library/data_list.h
+./utilities/execute.lo: ../../include/net-snmp/library/oid_stash.h
+./utilities/execute.lo: ../../include/net-snmp/library/check_varbind.h
+./utilities/execute.lo: ../../include/net-snmp/library/container.h
+./utilities/execute.lo: ../../include/net-snmp/library/factory.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp_logging.h
+./utilities/execute.lo: ../../include/net-snmp/library/container_binary_array.h
+./utilities/execute.lo: ../../include/net-snmp/library/container_list_ssll.h
+./utilities/execute.lo: ../../include/net-snmp/library/container_iterator.h
+./utilities/execute.lo: ../../include/net-snmp/library/container.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp_assert.h
+./utilities/execute.lo: ../../include/net-snmp/version.h
+./utilities/execute.lo: ../../include/net-snmp/session_api.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp_transport.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp_service.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./utilities/execute.lo: ../../include/net-snmp/library/ucd_compat.h
+./utilities/execute.lo: ../../include/net-snmp/pdu_api.h
+./utilities/execute.lo: ../../include/net-snmp/mib_api.h
+./utilities/execute.lo: ../../include/net-snmp/library/mib.h
+./utilities/execute.lo: ../../include/net-snmp/library/parse.h
+./utilities/execute.lo: ../../include/net-snmp/varbind_api.h
+./utilities/execute.lo: ../../include/net-snmp/config_api.h
+./utilities/execute.lo: ../../include/net-snmp/library/read_config.h
+./utilities/execute.lo: ../../include/net-snmp/library/default_store.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp_enum.h
+./utilities/execute.lo: ../../include/net-snmp/library/vacm.h
+./utilities/execute.lo: ../../include/net-snmp/output_api.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp_debug.h
+./utilities/execute.lo: ../../include/net-snmp/snmpv3_api.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmpv3.h
+./utilities/execute.lo: ../../include/net-snmp/library/transform_oids.h
+./utilities/execute.lo: ../../include/net-snmp/library/keytools.h
+./utilities/execute.lo: ../../include/net-snmp/library/scapi.h
+./utilities/execute.lo: ../../include/net-snmp/library/lcd_time.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmp_secmod.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./utilities/execute.lo: ../../include/net-snmp/library/snmpusm.h
+./utilities/execute.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./utilities/execute.lo: ../../include/net-snmp/agent/mib_module_config.h
+./utilities/execute.lo: ../../include/net-snmp/agent/agent_module_config.h
+./utilities/execute.lo: ../../include/net-snmp/agent/snmp_agent.h
+./utilities/execute.lo: ../../include/net-snmp/agent/snmp_vars.h
+./utilities/execute.lo: ../../include/net-snmp/agent/agent_handler.h
+./utilities/execute.lo: ../../include/net-snmp/agent/var_struct.h
+./utilities/execute.lo: ../../include/net-snmp/agent/agent_registry.h
+./utilities/execute.lo: ../../include/net-snmp/library/fd_event_manager.h
+./utilities/execute.lo: ../../include/net-snmp/agent/ds_agent.h
+./utilities/execute.lo: ../../include/net-snmp/agent/agent_read_config.h
+./utilities/execute.lo: ../../include/net-snmp/agent/agent_trap.h
+./utilities/execute.lo: ../../include/net-snmp/agent/all_helpers.h
+./utilities/execute.lo: ../../include/net-snmp/agent/instance.h
+./utilities/execute.lo: ../../include/net-snmp/agent/baby_steps.h
+./utilities/execute.lo: ../../include/net-snmp/agent/scalar.h
+./utilities/execute.lo: ../../include/net-snmp/agent/scalar_group.h
+./utilities/execute.lo: ../../include/net-snmp/agent/watcher.h
+./utilities/execute.lo: ../../include/net-snmp/agent/multiplexer.h
+./utilities/execute.lo: ../../include/net-snmp/agent/null.h
+./utilities/execute.lo: ../../include/net-snmp/agent/debug_handler.h
+./utilities/execute.lo: ../../include/net-snmp/agent/cache_handler.h
+./utilities/execute.lo: ../../include/net-snmp/agent/old_api.h
+./utilities/execute.lo: ../../include/net-snmp/agent/read_only.h
+./utilities/execute.lo: ../../include/net-snmp/agent/row_merge.h
+./utilities/execute.lo: ../../include/net-snmp/agent/serialize.h
+./utilities/execute.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./utilities/execute.lo: ../../include/net-snmp/agent/mode_end_call.h
+./utilities/execute.lo: ../../include/net-snmp/agent/table.h
+./utilities/execute.lo: ../../include/net-snmp/agent/table_data.h
+./utilities/execute.lo: ../../include/net-snmp/agent/table_dataset.h
+./utilities/execute.lo: ../../include/net-snmp/agent/table_tdata.h
+./utilities/execute.lo: ../../include/net-snmp/agent/table_iterator.h
+./utilities/execute.lo: ../../include/net-snmp/agent/table_container.h
+./utilities/execute.lo: ../../include/net-snmp/agent/table_array.h
+./utilities/execute.lo: ../../include/net-snmp/agent/mfd.h
+./utilities/execute.lo: ucd-snmp/errormib.h mibdefs.h util_funcs.h struct.h
+./utilities/iquery.lo: ../../include/net-snmp/net-snmp-config.h
+./utilities/iquery.lo: ../../include/net-snmp/net-snmp-includes.h
+./utilities/iquery.lo: ../../include/net-snmp/definitions.h
+./utilities/iquery.lo: ../../include/net-snmp/types.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp_api.h
+./utilities/iquery.lo: ../../include/net-snmp/library/asn1.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp_impl.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp-tc.h
+./utilities/iquery.lo: ../../include/net-snmp/utilities.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp_client.h
+./utilities/iquery.lo: ../../include/net-snmp/library/system.h
+./utilities/iquery.lo: ../../include/net-snmp/library/tools.h
+./utilities/iquery.lo: ../../include/net-snmp/library/int64.h
+./utilities/iquery.lo: ../../include/net-snmp/library/mt_support.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp_alarm.h
+./utilities/iquery.lo: ../../include/net-snmp/library/callback.h
+./utilities/iquery.lo: ../../include/net-snmp/library/data_list.h
+./utilities/iquery.lo: ../../include/net-snmp/library/oid_stash.h
+./utilities/iquery.lo: ../../include/net-snmp/library/check_varbind.h
+./utilities/iquery.lo: ../../include/net-snmp/library/container.h
+./utilities/iquery.lo: ../../include/net-snmp/library/factory.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp_logging.h
+./utilities/iquery.lo: ../../include/net-snmp/library/container_binary_array.h
+./utilities/iquery.lo: ../../include/net-snmp/library/container_list_ssll.h
+./utilities/iquery.lo: ../../include/net-snmp/library/container_iterator.h
+./utilities/iquery.lo: ../../include/net-snmp/library/container.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp_assert.h
+./utilities/iquery.lo: ../../include/net-snmp/version.h
+./utilities/iquery.lo: ../../include/net-snmp/session_api.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp_transport.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp_service.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./utilities/iquery.lo: ../../include/net-snmp/library/ucd_compat.h
+./utilities/iquery.lo: ../../include/net-snmp/pdu_api.h
+./utilities/iquery.lo: ../../include/net-snmp/mib_api.h
+./utilities/iquery.lo: ../../include/net-snmp/library/mib.h
+./utilities/iquery.lo: ../../include/net-snmp/library/parse.h
+./utilities/iquery.lo: ../../include/net-snmp/varbind_api.h
+./utilities/iquery.lo: ../../include/net-snmp/config_api.h
+./utilities/iquery.lo: ../../include/net-snmp/library/read_config.h
+./utilities/iquery.lo: ../../include/net-snmp/library/default_store.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp_enum.h
+./utilities/iquery.lo: ../../include/net-snmp/library/vacm.h
+./utilities/iquery.lo: ../../include/net-snmp/output_api.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp_debug.h
+./utilities/iquery.lo: ../../include/net-snmp/snmpv3_api.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmpv3.h
+./utilities/iquery.lo: ../../include/net-snmp/library/transform_oids.h
+./utilities/iquery.lo: ../../include/net-snmp/library/keytools.h
+./utilities/iquery.lo: ../../include/net-snmp/library/scapi.h
+./utilities/iquery.lo: ../../include/net-snmp/library/lcd_time.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmp_secmod.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./utilities/iquery.lo: ../../include/net-snmp/library/snmpusm.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/mib_module_config.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/agent_module_config.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/snmp_agent.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/snmp_vars.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/agent_handler.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/var_struct.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/agent_registry.h
+./utilities/iquery.lo: ../../include/net-snmp/library/fd_event_manager.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/ds_agent.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/agent_read_config.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/agent_trap.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/all_helpers.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/instance.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/baby_steps.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/scalar.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/scalar_group.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/watcher.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/multiplexer.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/null.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/debug_handler.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/cache_handler.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/old_api.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/read_only.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/row_merge.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/serialize.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/mode_end_call.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/table.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/table_data.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/table_dataset.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/table_tdata.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/table_iterator.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/table_container.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/table_array.h
+./utilities/iquery.lo: ../../include/net-snmp/agent/mfd.h utilities/iquery.h
+./utilities/override.lo: ../../include/net-snmp/net-snmp-config.h
+./utilities/override.lo: ../../include/net-snmp/net-snmp-includes.h
+./utilities/override.lo: ../../include/net-snmp/definitions.h
+./utilities/override.lo: ../../include/net-snmp/types.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp_api.h
+./utilities/override.lo: ../../include/net-snmp/library/asn1.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp_impl.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp-tc.h
+./utilities/override.lo: ../../include/net-snmp/utilities.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp_client.h
+./utilities/override.lo: ../../include/net-snmp/library/system.h
+./utilities/override.lo: ../../include/net-snmp/library/tools.h
+./utilities/override.lo: ../../include/net-snmp/library/int64.h
+./utilities/override.lo: ../../include/net-snmp/library/mt_support.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp_alarm.h
+./utilities/override.lo: ../../include/net-snmp/library/callback.h
+./utilities/override.lo: ../../include/net-snmp/library/data_list.h
+./utilities/override.lo: ../../include/net-snmp/library/oid_stash.h
+./utilities/override.lo: ../../include/net-snmp/library/check_varbind.h
+./utilities/override.lo: ../../include/net-snmp/library/container.h
+./utilities/override.lo: ../../include/net-snmp/library/factory.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp_logging.h
+./utilities/override.lo: ../../include/net-snmp/library/container_binary_array.h
+./utilities/override.lo: ../../include/net-snmp/library/container_list_ssll.h
+./utilities/override.lo: ../../include/net-snmp/library/container_iterator.h
+./utilities/override.lo: ../../include/net-snmp/library/container.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp_assert.h
+./utilities/override.lo: ../../include/net-snmp/version.h
+./utilities/override.lo: ../../include/net-snmp/session_api.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp_transport.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp_service.h
+./utilities/override.lo: ../../include/net-snmp/library/snmpCallbackDomain.h
+./utilities/override.lo: ../../include/net-snmp/library/snmpUnixDomain.h
+./utilities/override.lo: ../../include/net-snmp/library/snmpUDPDomain.h
+./utilities/override.lo: ../../include/net-snmp/library/snmpTCPDomain.h
+./utilities/override.lo: ../../include/net-snmp/library/snmpUDPIPv6Domain.h
+./utilities/override.lo: ../../include/net-snmp/library/snmpTCPIPv6Domain.h
+./utilities/override.lo: ../../include/net-snmp/library/snmpIPXDomain.h
+./utilities/override.lo: ../../include/net-snmp/library/ucd_compat.h
+./utilities/override.lo: ../../include/net-snmp/pdu_api.h
+./utilities/override.lo: ../../include/net-snmp/mib_api.h
+./utilities/override.lo: ../../include/net-snmp/library/mib.h
+./utilities/override.lo: ../../include/net-snmp/library/parse.h
+./utilities/override.lo: ../../include/net-snmp/varbind_api.h
+./utilities/override.lo: ../../include/net-snmp/config_api.h
+./utilities/override.lo: ../../include/net-snmp/library/read_config.h
+./utilities/override.lo: ../../include/net-snmp/library/default_store.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp_parse_args.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp_enum.h
+./utilities/override.lo: ../../include/net-snmp/library/vacm.h
+./utilities/override.lo: ../../include/net-snmp/output_api.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp_debug.h
+./utilities/override.lo: ../../include/net-snmp/snmpv3_api.h
+./utilities/override.lo: ../../include/net-snmp/library/snmpv3.h
+./utilities/override.lo: ../../include/net-snmp/library/transform_oids.h
+./utilities/override.lo: ../../include/net-snmp/library/keytools.h
+./utilities/override.lo: ../../include/net-snmp/library/scapi.h
+./utilities/override.lo: ../../include/net-snmp/library/lcd_time.h
+./utilities/override.lo: ../../include/net-snmp/library/snmp_secmod.h
+./utilities/override.lo: ../../include/net-snmp/library/snmpv3-security-includes.h
+./utilities/override.lo: ../../include/net-snmp/library/snmpusm.h
+./utilities/override.lo: ../../include/net-snmp/agent/net-snmp-agent-includes.h
+./utilities/override.lo: ../../include/net-snmp/agent/mib_module_config.h
+./utilities/override.lo: ../../include/net-snmp/agent/agent_module_config.h
+./utilities/override.lo: ../../include/net-snmp/agent/snmp_agent.h
+./utilities/override.lo: ../../include/net-snmp/agent/snmp_vars.h
+./utilities/override.lo: ../../include/net-snmp/agent/agent_handler.h
+./utilities/override.lo: ../../include/net-snmp/agent/var_struct.h
+./utilities/override.lo: ../../include/net-snmp/agent/agent_registry.h
+./utilities/override.lo: ../../include/net-snmp/library/fd_event_manager.h
+./utilities/override.lo: ../../include/net-snmp/agent/ds_agent.h
+./utilities/override.lo: ../../include/net-snmp/agent/agent_read_config.h
+./utilities/override.lo: ../../include/net-snmp/agent/agent_trap.h
+./utilities/override.lo: ../../include/net-snmp/agent/all_helpers.h
+./utilities/override.lo: ../../include/net-snmp/agent/instance.h
+./utilities/override.lo: ../../include/net-snmp/agent/baby_steps.h
+./utilities/override.lo: ../../include/net-snmp/agent/scalar.h
+./utilities/override.lo: ../../include/net-snmp/agent/scalar_group.h
+./utilities/override.lo: ../../include/net-snmp/agent/watcher.h
+./utilities/override.lo: ../../include/net-snmp/agent/multiplexer.h
+./utilities/override.lo: ../../include/net-snmp/agent/null.h
+./utilities/override.lo: ../../include/net-snmp/agent/debug_handler.h
+./utilities/override.lo: ../../include/net-snmp/agent/cache_handler.h
+./utilities/override.lo: ../../include/net-snmp/agent/old_api.h
+./utilities/override.lo: ../../include/net-snmp/agent/read_only.h
+./utilities/override.lo: ../../include/net-snmp/agent/row_merge.h
+./utilities/override.lo: ../../include/net-snmp/agent/serialize.h
+./utilities/override.lo: ../../include/net-snmp/agent/bulk_to_next.h
+./utilities/override.lo: ../../include/net-snmp/agent/mode_end_call.h
+./utilities/override.lo: ../../include/net-snmp/agent/table.h
+./utilities/override.lo: ../../include/net-snmp/agent/table_data.h
+./utilities/override.lo: ../../include/net-snmp/agent/table_dataset.h
+./utilities/override.lo: ../../include/net-snmp/agent/table_tdata.h
+./utilities/override.lo: ../../include/net-snmp/agent/table_iterator.h
+./utilities/override.lo: ../../include/net-snmp/agent/table_container.h
+./utilities/override.lo: ../../include/net-snmp/agent/table_array.h
+./utilities/override.lo: ../../include/net-snmp/agent/mfd.h util_funcs.h
+./utilities/override.lo: struct.h
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Makefile.in b/cleopatre/application/spidnetsnmp/agent/mibgroup/Makefile.in
new file mode 100644
index 0000000000..f641ab7077
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Makefile.in
@@ -0,0 +1,35 @@
+top_builddir=../..
+# currently assumes gcc: (XXX: fix via configure tests)
+DLFLAGS=-fPIC -shared
+
+# use GNU vpath, if available, to only set a path for source and headers
+# VPATH will pick up objects too, which is bad if you are sharing a
+# source dir...
+@GNU_vpath@ %.h $(srcdir)
+@GNU_vpath@ %.c $(srcdir)
+# fallback to regular VPATH for non-gnu...
+@NON_GNU_VPATH@ $(srcdir)
+
+
+CPPFLAGS= $(TOP_INCLUDES) -I. $(AGENT_INCLUDES) $(MIBGROUP_INCLUDES) \
+ $(SNMPLIB_INCLUDES) @CPPFLAGS@ $(LIB_CFLAGS)
+
+OTHERCLEANTARGETS=@dllcleans@
+
+# Need a special .c -> .o definition here to make sure we place the
+# object files in the sub directory.
+
+.c.o:
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
+
+@mib_module_list_o@
+@mib_module_list_lo@
+@mib_module_list_c@
+
+OBJS = $(mib_module_list_o)
+LOBJS = $(mib_module_list_lo)
+SRCS = $(mib_module_list_c)
+
+all: standardall $(LOBJS)
+
+@module_rules@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/README b/cleopatre/application/spidnetsnmp/agent/mibgroup/README
new file mode 100644
index 0000000000..7d83806d6c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/README
@@ -0,0 +1,113 @@
+This directory holds the implementation of individual MIB groups.
+Currently, this contains the eight MIB-2 groups, plus a basic template
+for new MIB groups (examples/example.c and examples/example.h)
+
+Additionally, you may wish to check out the 'mib2c' perl script in the
+SRCDIR/local directory that can convert a written mib into C template
+files for use with this package as mib modules.
+
+Each group consists of two files:
+
+ examples/example.h: interface information
+
+ - declaration of the initialisation function 'init_example'
+ (optional)
+ - declaration of the function(s) for retrieving variable
+ information 'var_example'
+ - declaration of the function(s) for setting variable
+ information (if appropriate)
+
+ - declaration of the function(s) for parsing the snmpd.conf file
+ (optional)
+ - a call to config_parse_dot_conf() to explain to the .conf
+ parser which tokens we want to parse.
+ (optional)
+
+ - definitions of the MIB group 'magic numbers'
+ declarations of the 'public' functions
+
+ - a list of the variables in the group, including
+ type information, mapping between magic numbers
+ and OID sub-identifiers within the group,
+ accessibility information, and the relevant
+ function for retrieving this variable's value.
+ They *must* be listed in the mib-descending order.
+ - a call to 'config_load_mib', identifying the location of
+ this MIB group within the general MIB structure.
+ - a call to 'config_require' to identify any other files
+ that are required by the implementation of this group.
+ (optional)
+
+ (these last three are only visible within the 'glue' file 'snmp_vars.c'
+ (if at all), but are declared here for ease of maintainance)
+
+
+
+ examples/example.c: implementation code
+ (can be non-existant if only the .h file is needed)
+
+ - a list of kernel information needed to report
+ on this group
+ - an initialisation function (optional)
+ - a routine to parse an snmpd.conf line.
+ - a routine to free resources from above and return to
+ default settings.
+ - 'header' function(s) to map the OID requested
+ to the next appropriate OID
+ (and similar system-independent setup)
+ - function(s) (possibly system-specific) to
+ determine and return the value of the
+ variable requested.
+ - (optionally) functions used to set values
+ - other functions used internally
+
+
+To implement a new MIB group, copy the two files 'example.c'
+and 'example.h' to appropriate new files ({MODULENAME}.c and {MODULENAME}.h),
+and edit them as follows:
+
+ example.h:
+ globally change "example" to the new module name
+ and update the initial comment.
+ replace the EXAMPLE* defines with the list of
+ variables within this new group
+ fill in the 'MODULENAME_variables' structure with these
+ new variables, updating the type, accessibility
+ and sub-identifier information as appropriate.
+ replace 'variableN' with the maximum size of the
+ returned OID (omitting the group prefix).
+ For non-table values, this will probably be one
+ greater than the length of the sub-identifier.
+ update or remove the 'config_parse_dot_conf' call if
+ you need to handle lines in the snmpd.conf files.
+ update the 'config_load_mib' call with the appropriate
+ location within the global MIB structure, and
+ its length (note that 'MIB' has length 6)
+ provide a suitable 'config_require' call if this
+ code uses routines from any other files within
+ the 'mibgroup' directory (such as 'util_funcs.c')
+
+
+
+ example.c:
+ globally change "example" to the new module name
+ and update the initial comment.
+ replace the 'MODULENAME_nl' name list with any necessary
+ kernel variables, and update the associated #define's
+ replace the name length definition within the 'header'
+ function with the length of the requesting OID
+ (i.e. the sum of the lengths given in the subtree
+ definition, and the variable structure above).
+ replace the basic 'switch' structure within the
+ 'var_MODULENAME' function with the necessary code
+ to calculate the required information.
+ (plus any other internal functions as needed).
+
+ It will then be necessary to (re-)run the configure script with the
+option
+ --with-mib-modules="MODULENAME"
+
+(where MODULENAME matches the name of the .c/.h file pair exactly).
+Note that if anything in the config_* macros changes, or the init function
+is added or removed, then the configure script will need to be re-run.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/README.smux b/cleopatre/application/spidnetsnmp/agent/mibgroup/README.smux
new file mode 100644
index 0000000000..b977f2b891
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/README.smux
@@ -0,0 +1,52 @@
+[1] What is SMUX?
+
+SMUX is the snmp multiplexing protocol (RFC 1227). It can be used by an
+snmp agent to query variables maintained by another user-level process.
+
+[2] Why is it relevant to net-snmp?
+
+The original ucd-snmp agent needed a mechanism to query statistics from
+GateD. GateD has traditionally supported this functionality via SMUX.
+Hence SMUX was implemented within the ucd-snmp framework to extract
+routing protocol statistics from GateD.
+
+net-snmp continues to support smux, and many applications still use it.
+
+[3] What is GateD?
+
+GateD is the 'Gateway Daemon' which implements a variety of routing
+protocols on a variety of platforms (OSes). This was formerly available
+as open source, but has since been made closed and entirely un-free.
+Other routing protocol daemons such a quagga (http://www.quagga.net)
+support SMUX.
+
+[4] Can SMUX extract statistics from other user-level processes?
+
+Yes, the current implementation allows for the registration of any MIB
+that might be registered by a SMUX peer.
+
+[5] How does it work?
+
+Assuming 'snmpd' is already up and running, when the SMUX peer comes up,
+it identifies itself with an oid identifier and string password, and
+registers any MIBs it would like to implement. When 'snmpd' receives
+queries for these MIBs, it passes these queries to the peer.
+
+[6] Who implemented SMUX for ucd-snmp?
+
+SMUX was implemented by Rohit Dube. He had oodles of help from
+ucd-snmp-coders (Dave, Niels, Wes, Simon, Felix, Leonti) and gated-people
+(Acee, Feiyi, Larry, Sue). [If I missed somebody, sorry in advance and
+do let me know]. Later, Nick Amato re-write the entire SMUX package so
+the code today is mostly his.
+
+[7] How do I find out more about SMUX?
+
+Read the RFC and the code, mainly, but only for legacy code.
+
+*New* sub-agent development should use the AgentX protocol instead,
+which is not only standardized (RFC 2741 + 2742), but is outright superior
+to smux in a number of important ways (handles SET requests reliably,
+able to handle overlapping registrations, aware of SNMPv3 contexts, etc.)
+
+Only build new smux support if you have to.
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon.h
new file mode 100644
index 0000000000..847eaa9ebc
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon.h
@@ -0,0 +1,54 @@
+/**************************************************************
+ * Copyright (C) 2001 Alex Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+/*
+ * $Log$
+ * Revision 5.0 2002/04/20 07:30:00 hardaker
+ * cvs file version number change
+ *
+ * Revision 1.2 2002/04/20 07:07:34 hardaker
+ * White space, oh glorious white space.
+ * How great our though?
+ * The code is fine.
+ * We agree on functionality easily.
+ * What really troubles us?
+ * Something we can't see.
+ * Something between the code.
+ * We bow down to your magnificence,
+ * For you are everywhere,
+ * Between everything.
+ * Pretty nothingness you are.
+ *
+ * Revision 1.1 2001/05/09 19:36:13 slif
+ * Include Alex Rozin's Rmon.
+ *
+ * Revision 1.1.2.1 2001/04/16 14:45:05 alex
+ * Rmon1 : first edition
+ *
+ */
+
+config_require(Rmon/rows)
+config_require(Rmon/agutil)
+config_require(Rmon/statistics)
+config_require(Rmon/alarm)
+config_require(Rmon/history)
+config_require(Rmon/event)
+config_add_mib(RMON-MIB)
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/README b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/README
new file mode 100644
index 0000000000..c5269ecef1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/README
@@ -0,0 +1,30 @@
+
+Important notes.
+===============
+1. This implementation is actually a system independent
+ template. It means that the question "Where and how
+ may I collect the monitored statistics ?" is taken out
+ from the scope. Actually, it is emulated with random values.
+ You are free to rewrite the function 'get_history_data'
+ for your system. Don't forget also to insert DataSourse
+ checking in 'history_Validate' function. (Both functions
+ are in the file history.c).
+
+2. This implementation has two RMON mib understanding extensions
+ (I hope it does not break anything; nevertheless you may use
+ it in completely standard way).
+
+ 2.1. I permit to set VALID entryStatus when entry doesn't exit;
+ in this case PDU has to have the necessary & valid set
+ of non-default values
+
+ 2.2. I permit to travel from VALID to 'UNDER_CREATION' state:
+ these ways a manager can change control entry and validate
+ it once more.
+
+
+THANKS
+======
+ Mr. Michael J. Slifcak of Internet Security Systems, Inc has provided
+ a number of remarks, I implemented ALL of them.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/agutil.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/agutil.c
new file mode 100644
index 0000000000..3b0c87a615
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/agutil.c
@@ -0,0 +1,314 @@
+/**************************************************************
+ * Copyright (C) 2001 Alex Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "util_funcs.h"
+
+#include "agutil.h"
+#include "agutil_api.h"
+
+#ifndef OPTICALL_ACESS /* in OpticalAccess case : find them in ~agent/mibgroup/nbase directory */
+void
+ag_trace(const char *format, ...)
+{
+#define AG_MAX_MSG_LEN 120
+ char msg[AG_MAX_MSG_LEN];
+ va_list args;
+
+ /*
+ * create msg
+ */
+ va_start(args, format);
+ vsnprintf(msg, AG_MAX_MSG_LEN - 1, format, args);
+
+ snmp_log(LOG_INFO, "%s\n", msg);
+ va_end(args);
+}
+
+int
+AGUTIL_advance_index_name(struct variable *vp, oid * name,
+ size_t * length, int exact)
+{
+ int result;
+
+ if (exact)
+ return 0;
+
+ if (*length <= vp->namelen) {
+ result =
+ snmp_oid_compare(name, *length, vp->name, (int) vp->namelen);
+ memcpy((char *) name, (char *) vp->name,
+ ((int) vp->namelen) * sizeof(oid));
+ *length = vp->namelen;
+ } else {
+ /*
+ * If the name is given with indexes - compare only the oids.
+ */
+ result =
+ snmp_oid_compare(name, (int) vp->namelen, vp->name,
+ (int) vp->namelen);
+ /*
+ * If it's not the same oid - change name to the new oid
+ */
+ if (result < 0) {
+ memcpy((char *) name, (char *) vp->name,
+ ((int) vp->namelen) * sizeof(oid));
+ *length = vp->namelen;
+ }
+ }
+
+ if (result > 0) {
+ ag_trace("*length=%d result=%d !!!", (int) *length, (int) result);
+ return -1;
+ }
+ return 0;
+}
+
+/*********************************************************************
+ * Function: AGUTIL_get_int_value
+ *
+ * Description:
+ * Check/Get long value from the PDU..
+ * The parameters 'min_value' & 'max_value' allow to check the diaposon
+ * of the value. If (max_value <= min_value) we avoid this checking.
+ *
+ * Returns:
+ * SNMP_ERR_NOERROR
+ * SNMP_ERR_WRONGTYPE
+ * SNMP_ERR_WRONGLENGTH
+ * SNMP_ERR_WRONGENCODING
+ * SNMP_ERR_BADVALUE
+ *********************************************************************/
+int
+AGUTIL_get_int_value(u_char * var_val, u_char var_val_type,
+ size_t var_val_len, long min_value, long max_value,
+ long *long_tmp)
+{
+ if (var_val_type != ASN_INTEGER && var_val_type != ASN_TIMETICKS) {
+ ag_trace("not ASN_INTEGER 0x%lx", (long) var_val_type);
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ if (var_val_len > sizeof(long)) {
+ ag_trace("wrong len=%d", (int) var_val_len);
+ return SNMP_ERR_WRONGLENGTH;
+ }
+
+ *long_tmp = *((long *) var_val);
+
+ if (max_value > min_value) {
+ if (*long_tmp < min_value) {
+ ag_trace("%ld=long_tmp < min=%ld", (long) *long_tmp,
+ (long) min_value);
+ return SNMP_ERR_BADVALUE;
+ }
+
+ if (*long_tmp > max_value) {
+ ag_trace("%ld=long_tmp > max=%ld", (long) *long_tmp,
+ (long) max_value);
+ return SNMP_ERR_BADVALUE;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+/*********************************************************************
+ * Function: AGUTIL_get_string_value
+ *
+ * Description:
+ * Check/Get 'DisplayString' value from the PDU..
+ *
+ * Returns:
+ * SNMP_ERR_NOERROR
+ * SNMP_ERR_WRONGTYPE
+ * SNMP_ERR_WRONGLENGTH
+ * SNMP_ERR_WRONGENCODING
+ * SNMP_ERR_BADVALUE
+ *********************************************************************/
+int
+AGUTIL_get_string_value(u_char * var_val, u_char var_val_type,
+ size_t var_val_len, size_t buffer_max_size,
+ u_char should_zero_limited,
+ size_t * buffer_actual_size, char *buffer)
+{
+ if (var_val_type != ASN_OCTET_STR) {
+ ag_trace("not ASN_OCTET_STR 0x%lx", (long) var_val_type);
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ if (var_val_len > buffer_max_size) {
+ ag_trace("wrong len=%d > %d", (int) var_val_len, buffer_max_size);
+ return SNMP_ERR_WRONGLENGTH;
+ }
+
+ if (buffer_actual_size)
+ *buffer_actual_size = var_val_len;
+
+ memcpy(buffer, var_val, var_val_len);
+ if (should_zero_limited) {
+ buffer[var_val_len] = 0;
+ if (buffer_actual_size)
+ *buffer_actual_size += 1;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+#endif
+
+int
+AGUTIL_get_oid_value(u_char * var_val, u_char var_val_type,
+ size_t var_val_len, VAR_OID_T * data_source_ptr)
+{
+ register int iii;
+ register oid *oid_var;
+
+ if (var_val_len > MAX_OID_LEN) {
+ ag_trace("wrong len=%d > %d", (int) var_val_len, MAX_OID_LEN);
+ return SNMP_ERR_WRONGLENGTH;
+ }
+
+ var_val_len /= sizeof(oid);
+ data_source_ptr->length = var_val_len;
+ oid_var = (oid *) var_val;
+ for (iii = 0; iii < (int)data_source_ptr->length; iii++)
+ data_source_ptr->objid[iii] = oid_var[iii];
+
+ return SNMP_ERR_NOERROR;
+}
+
+u_long
+AGUTIL_sys_up_time(void)
+{
+ struct timeval current, delta;
+ extern struct timeval starttime;
+
+ gettimeofday(&current, NULL);
+ current.tv_sec--;
+ current.tv_usec += 1000000L;
+ delta.tv_sec = current.tv_sec - starttime.tv_sec;
+ delta.tv_usec = current.tv_usec - starttime.tv_usec;
+ if (delta.tv_usec > 1000000L) {
+ delta.tv_usec -= 1000000L;
+ delta.tv_sec++;
+ }
+
+ return delta.tv_sec * 100 + delta.tv_usec / 10000;
+}
+
+/*
+ * NOTE: this function is a template for system dependent
+ * implementation. Actually it (in debug purposes) returns
+ * random (but likely) data */
+void
+SYSTEM_get_eth_statistics(VAR_OID_T * data_source, ETH_STATS_T * where)
+{
+#if OPTICALL_ACESS
+ where->ifIndex = data_source->objid[data_source->length - 1];
+ agent_get_Rmon_ethernet_statistics(where->ifIndex, 1, /* exact */
+ where);
+#else /* OPTICALL_ACESS */
+ static ETH_STATS_T prev = { -1, -1 };
+ static time_t ifLastRead = 0;
+ time_t curr_time;
+ u_char need_to_read;
+ u_long rc;
+
+ where->ifIndex = data_source->objid[data_source->length - 1];
+ need_to_read = (where->ifIndex != prev.ifIndex);
+ if (!need_to_read) {
+ curr_time = time(NULL);
+ need_to_read = (curr_time - ifLastRead > 1);
+ }
+
+ if (need_to_read) {
+ rc = (u_long) (1.0 +
+ ((double) rand() / (double) RAND_MAX) * 100.0);
+ ifLastRead = time(NULL);
+ prev.ifIndex = where->ifIndex;
+ } else
+ rc = 0;
+
+ memcpy(where, &prev, sizeof(ETH_STATS_T));
+ where->octets += rc * 100 * 200;
+ where->packets += rc * 100;
+ where->bcast_pkts += rc * 2;
+ where->mcast_pkts += rc * 3;
+ where->crc_align += rc;
+ where->undersize += 0;
+ where->oversize += 0;
+ where->fragments += rc / 2;
+ where->jabbers += 0;
+ where->collisions += rc / 4;
+
+ where->pkts_64 += rc * 10;
+ where->pkts_65_127 += rc * 50;
+ where->pkts_128_255 += rc * 20;
+ where->pkts_256_511 += rc * 10;
+ where->pkts_512_1023 += rc * 15;
+ where->pkts_1024_1518 += rc * 5;
+
+ need_to_read = prev.ifIndex;
+ memcpy(&prev, where, sizeof(ETH_STATS_T));
+ prev.ifIndex = need_to_read;
+#endif /* OPTICALL_ACESS */
+}
+
+#if 0 /* for memory debug */
+static u_long dbg_mem_cnt = 0;
+
+void *
+dbg_f_AGMALLOC(size_t size)
+{
+ dbg_mem_cnt++;
+ return malloc(size);
+}
+
+void
+dbg_f_AGFREE(void *ptr)
+{
+ dbg_mem_cnt--;
+ free(ptr);
+}
+
+char *
+dbg_f_AGSTRDUP(const char *s)
+{
+ dbg_mem_cnt++;
+ return strdup(s);
+}
+
+void
+dbg_f_AG_MEM_REPORT(void)
+{
+ ag_trace("dbg_mem_cnt=%ld", (long) dbg_mem_cnt);
+}
+
+#endif
+
+void
+init_agutil(void)
+{
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/agutil.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/agutil.h
new file mode 100644
index 0000000000..4eb3bf7bc2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/agutil.h
@@ -0,0 +1,26 @@
+/**************************************************************
+ * Copyright (C) 2001 Alex Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#ifndef _agutil_h_included__
+#define _agutil_h_included__
+
+void init_agutil(void);
+
+#endif /* _agutil_h_included__ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/agutil_api.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/agutil_api.h
new file mode 100644
index 0000000000..3959fab0d1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/agutil_api.h
@@ -0,0 +1,93 @@
+/**************************************************************
+ * Copyright (C) 2001 Alex Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#ifndef _agutil_api_h_included__
+#define _agutil_api_h_included__
+
+#include <string.h>
+
+#if 0 /* for debug */
+#warning MEMORY DEBUG VERSION
+void *dbg_f_AGMALLOC(size_t size);
+void dbg_f_AGFREE(void *ptr);
+char *dbg_f_AGSTRDUP(const char *s);
+void dbg_f_AG_MEM_REPORT(void);
+# define AGMALLOC(X) dbg_f_AGMALLOC(X)
+# define AGFREE(X) { dbg_f_AGFREE(X); X = NULL; }
+# define AGSTRDUP(X) dbg_f_AGSTRDUP(X)
+#else
+# define AGMALLOC(X) malloc(X)
+# define AGFREE(X) { free(X); X = NULL; }
+# define AGSTRDUP(X) strdup(X)
+#endif
+
+typedef struct {
+ size_t length;
+ oid objid[MAX_OID_LEN];
+} VAR_OID_T;
+
+void ag_trace(const char *format, ...);
+
+int AGUTIL_advance_index_name(struct variable *vp, oid * name,
+ size_t * length, int exact);
+int AGUTIL_get_int_value(u_char * var_val, u_char var_val_type,
+ size_t var_val_len, long min_value,
+ long max_value, long *long_tmp);
+int AGUTIL_get_string_value(u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ size_t buffer_max_size,
+ u_char should_zero_limited,
+ size_t * buffer_actual_size,
+ char *buffer);
+int AGUTIL_get_oid_value(u_char * var_val, u_char var_val_type,
+ size_t var_val_len,
+ VAR_OID_T * data_source_ptr);
+
+u_long AGUTIL_sys_up_time(void);
+
+#if OPTICALL_ACESS
+#define ETH_STATS_T UID_PORT_STATISTICS_T
+#else
+typedef struct {
+ u_int ifIndex;
+ u_long octets;
+ u_long packets;
+ u_long bcast_pkts;
+ u_long mcast_pkts;
+ u_long crc_align;
+ u_long undersize;
+ u_long oversize;
+ u_long fragments;
+ u_long jabbers;
+ u_long collisions;
+ u_long pkts_64;
+ u_long pkts_65_127;
+ u_long pkts_128_255;
+ u_long pkts_256_511;
+ u_long pkts_512_1023;
+ u_long pkts_1024_1518;
+} ETH_STATS_T;
+#endif
+
+void SYSTEM_get_eth_statistics(VAR_OID_T * data_source,
+ ETH_STATS_T * where);
+
+#endif /* _agutil_api_h_included__ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/alarm.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/alarm.c
new file mode 100644
index 0000000000..a04d415b1c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/alarm.c
@@ -0,0 +1,720 @@
+/**************************************************************
+ * Copyright (C) 2001 Alex Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "util_funcs.h"
+#include "alarm.h"
+ /*
+ * Implementation headers
+ */
+#include "agutil_api.h"
+#include "row_api.h"
+ /*
+ * File scope definitions section
+ */
+ /*
+ * from MIB compilation
+ */
+#define alarmEntryFirstIndexBegin 11
+#define MMM_MAX 0xFFFFFFFFl
+#define IDalarmIndex 1
+#define IDalarmInterval 2
+#define IDalarmVariable 3
+#define IDalarmSampleType 4
+#define IDalarmValue 5
+#define IDalarmStartupAlarm 6
+#define IDalarmRisingThreshold 7
+#define IDalarmFallingThreshold 8
+#define IDalarmRisingEventIndex 9
+#define IDalarmFallingEventIndex 10
+#define IDalarmOwner 11
+#define IDalarmStatus 12
+#define MIN_alarmEventIndex 0
+#define MAX_alarmEventIndex 65535
+ typedef enum {
+ SAMPLE_TYPE_ABSOLUTE =
+ 1,
+ SAMPLE_TYPE_DELTE
+ } SAMPLE_TYPE_T;
+
+ typedef enum {
+ ALARM_NOTHING =
+ 0,
+ ALARM_RISING,
+ ALARM_FALLING,
+ ALARM_BOTH
+ } ALARM_TYPE_T;
+
+ typedef struct {
+ u_long
+ interval;
+ u_long
+ timer_id;
+ VAR_OID_T
+ var_name;
+ SAMPLE_TYPE_T
+ sample_type;
+ ALARM_TYPE_T
+ startup_type; /* RISING | FALLING | BOTH */
+
+ u_long
+ rising_threshold;
+ u_long
+ falling_threshold;
+ u_long
+ rising_event_index;
+ u_long
+ falling_event_index;
+
+ u_long
+ last_abs_value;
+ u_long
+ value;
+ ALARM_TYPE_T
+ prev_alarm; /* NOTHING | RISING | FALLING */
+ } CRTL_ENTRY_T;
+
+/*
+ * Main section
+ */
+
+ static TABLE_DEFINTION_T
+ AlarmCtrlTable;
+ static TABLE_DEFINTION_T *
+ table_ptr = &
+ AlarmCtrlTable;
+
+#if 0 /* KUKU */
+ static u_long
+ kuku_sum =
+ 0,
+ kuku_cnt =
+ 0;
+#endif
+
+/*
+ * find & enjoy it in event.c
+ */
+ extern int
+ event_api_send_alarm(u_char is_rising,
+ u_long alarm_index,
+ u_long event_index,
+ oid * alarmed_var,
+ size_t alarmed_var_length,
+ u_long sample_type,
+ u_long value,
+ u_long the_threshold, char *alarm_descr);
+
+static int
+fetch_var_val(oid * name, size_t namelen, u_long * new_value)
+{
+ netsnmp_subtree *tree_ptr;
+ size_t var_len;
+ WriteMethod *write_method;
+ struct variable called_var;
+ register struct variable *s_var_ptr = NULL;
+ register u_char *access;
+
+
+ tree_ptr = netsnmp_subtree_find(name, namelen, NULL, "");
+ if (!tree_ptr) {
+ ag_trace("tree_ptr is NULL");
+ return SNMP_ERR_NOSUCHNAME;
+ }
+
+
+ memcpy(called_var.name, tree_ptr->name_a,
+ tree_ptr->namelen * sizeof(oid));
+
+ if (tree_ptr->reginfo &&
+ tree_ptr->reginfo->handler &&
+ tree_ptr->reginfo->handler->next &&
+ tree_ptr->reginfo->handler->next->myvoid) {
+ s_var_ptr = (struct variable *)tree_ptr->reginfo->handler->next->myvoid;
+ }
+
+ if (s_var_ptr) {
+ if (s_var_ptr->namelen) {
+ called_var.namelen =
+ tree_ptr->namelen;
+ called_var.type = s_var_ptr->type;
+ called_var.magic = s_var_ptr->magic;
+ called_var.acl = s_var_ptr->acl;
+ called_var.findVar = s_var_ptr->findVar;
+ access =
+ (*(s_var_ptr->findVar)) (&called_var, name, &namelen,
+ 1, &var_len, &write_method);
+
+ if (access
+ && snmp_oid_compare(name, namelen, tree_ptr->end_a,
+ tree_ptr->end_len) > 0) {
+ memcpy(name, tree_ptr->end_a, tree_ptr->end_len);
+ access = 0;
+ ag_trace("access := 0");
+ }
+
+ if (access) {
+
+ /*
+ * check 'var_len' ?
+ */
+
+ /*
+ * check type
+ */
+ switch (called_var.type) {
+ case ASN_INTEGER:
+ case ASN_COUNTER:
+ case ASN_TIMETICKS:
+ case ASN_GAUGE:
+ case ASN_COUNTER64:
+ break;
+ default:
+ ag_trace("invalid type: %d",
+ (int) called_var.type);
+ return SNMP_ERR_GENERR;
+ }
+ *new_value = *(u_long *) access;
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ }
+
+ return SNMP_ERR_NOSUCHNAME;
+}
+
+static void
+alarm_check_var(unsigned int clientreg, void *clientarg)
+{
+ RMON_ENTRY_T *hdr_ptr;
+ CRTL_ENTRY_T *body;
+ u_long new_value;
+ int ierr;
+
+ hdr_ptr = (RMON_ENTRY_T *) clientarg;
+ if (!hdr_ptr) {
+ ag_trace
+ ("Err: history_get_backet: hdr_ptr=NULL ? (Inserted in shock)");
+ return;
+ }
+
+ body = (CRTL_ENTRY_T *) hdr_ptr->body;
+ if (!body) {
+ ag_trace
+ ("Err: history_get_backet: body=NULL ? (Inserted in shock)");
+ return;
+ }
+
+ if (RMON1_ENTRY_VALID != hdr_ptr->status) {
+ ag_trace("Err: history_get_backet when entry %d is not valid ?!!",
+ (int) hdr_ptr->ctrl_index);
+ snmp_alarm_unregister(body->timer_id);
+ return;
+ }
+
+ ierr = fetch_var_val(body->var_name.objid,
+ body->var_name.length, &new_value);
+ if (SNMP_ERR_NOERROR != ierr) {
+ ag_trace("Err: Can't fetch var_name");
+ return;
+ }
+
+ body->value = (SAMPLE_TYPE_ABSOLUTE == body->sample_type) ?
+ new_value : new_value - body->last_abs_value;
+ body->last_abs_value = new_value;
+ /*
+ * ag_trace ("fetched value=%ld check %ld", (long) new_value, (long) body->value);
+ */
+#if 0 /* KUKU */
+ kuku_sum += body->value;
+ kuku_cnt++;
+#endif
+
+ if (ALARM_RISING != body->prev_alarm &&
+ body->value >= body->rising_threshold &&
+ SNMP_ERR_NOERROR == event_api_send_alarm(1, hdr_ptr->ctrl_index,
+ body->rising_event_index,
+ body->var_name.objid,
+ body->var_name.length,
+ ALARM_RISING, body->value,
+ body->rising_threshold,
+ "Rising"))
+ body->prev_alarm = ALARM_RISING;
+ else if (ALARM_FALLING != body->prev_alarm &&
+ body->value <= body->falling_threshold &&
+ SNMP_ERR_NOERROR == event_api_send_alarm(0,
+ hdr_ptr->ctrl_index,
+ body->
+ falling_event_index,
+ body->var_name.objid,
+ body->var_name.
+ length, ALARM_RISING,
+ body->value,
+ body->
+ falling_threshold,
+ "Falling"))
+ body->prev_alarm = ALARM_FALLING;
+}
+
+/*
+ * Control Table RowApi Callbacks
+ */
+
+int
+alarm_Create(RMON_ENTRY_T * eptr)
+{ /* create the body: alloc it and set defaults */
+ CRTL_ENTRY_T *body;
+ static VAR_OID_T DEFAULT_VAR = { 12, /* etherStatsPkts.1 */
+ {1, 3, 6, 1, 2, 1, 16, 1, 1, 1, 5, 1}
+ };
+
+
+ eptr->body = AGMALLOC(sizeof(CRTL_ENTRY_T));
+ if (!eptr->body)
+ return -3;
+ body = (CRTL_ENTRY_T *) eptr->body;
+
+ /*
+ * set defaults
+ */
+ body->interval = 1;
+ memcpy(&body->var_name, &DEFAULT_VAR, sizeof(VAR_OID_T));
+ body->sample_type = SAMPLE_TYPE_ABSOLUTE;
+ body->startup_type = ALARM_BOTH;
+ body->rising_threshold = MMM_MAX;
+ body->falling_threshold = 0;
+ body->rising_event_index = body->falling_event_index = 0;
+
+ body->prev_alarm = ALARM_NOTHING;
+
+ return 0;
+}
+
+int
+alarm_Validate(RMON_ENTRY_T * eptr)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+
+ if (body->rising_threshold <= body->falling_threshold) {
+ ag_trace("alarm_Validate failed: %lu must be > %lu",
+ body->rising_threshold, body->falling_threshold);
+ return SNMP_ERR_BADVALUE;
+ }
+
+ return 0;
+}
+
+int
+alarm_Activate(RMON_ENTRY_T * eptr)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+ int ierr;
+
+#if 0 /* KUKU */
+ kuku_sum = 0;
+ kuku_cnt = 0;
+#endif
+ ierr = fetch_var_val(body->var_name.objid,
+ body->var_name.length, &body->last_abs_value);
+ if (SNMP_ERR_NOERROR != ierr) {
+ ag_trace("Can't fetch var_name");
+ return ierr;
+ }
+
+ if (SAMPLE_TYPE_ABSOLUTE != body->sample_type) {
+ /*
+ * check startup alarm
+ */
+ if (ALARM_RISING == body->startup_type ||
+ ALARM_BOTH == body->startup_type) {
+ if (body->last_abs_value >= body->rising_threshold) {
+ event_api_send_alarm(1, eptr->ctrl_index,
+ body->rising_event_index,
+ body->var_name.objid,
+ body->var_name.length,
+ ALARM_RISING, body->value,
+ body->rising_threshold,
+ "Startup Rising");
+ }
+ }
+
+ if (ALARM_FALLING == body->startup_type ||
+ ALARM_BOTH == body->startup_type) {
+ if (body->last_abs_value <= body->falling_threshold) {
+ event_api_send_alarm(0, eptr->ctrl_index,
+ body->falling_event_index,
+ body->var_name.objid,
+ body->var_name.length,
+ ALARM_RISING, body->value,
+ body->falling_threshold,
+ "Startup Falling");
+ }
+ }
+
+ }
+
+ body->timer_id = snmp_alarm_register(body->interval, SA_REPEAT,
+ alarm_check_var, eptr);
+ return 0;
+}
+
+int
+alarm_Deactivate(RMON_ENTRY_T * eptr)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+
+ snmp_alarm_unregister(body->timer_id);
+#if 0 /* KUKU */
+ ag_trace("kuku_sum=%ld kuku_cnt=%ld sp=%ld",
+ (long) kuku_sum, (long) kuku_cnt,
+ (long) (kuku_sum / kuku_cnt));
+#endif
+ return 0;
+}
+
+int
+alarm_Copy(RMON_ENTRY_T * eptr)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+ CRTL_ENTRY_T *clone = (CRTL_ENTRY_T *) eptr->tmp;
+
+ if (RMON1_ENTRY_VALID == eptr->status &&
+ clone->rising_threshold <= clone->falling_threshold) {
+ ag_trace("alarm_Copy failed: invalid thresholds");
+ return SNMP_ERR_BADVALUE;
+ }
+
+ if (clone->interval != body->interval) {
+ if (RMON1_ENTRY_VALID == eptr->status) {
+ snmp_alarm_unregister(body->timer_id);
+ body->timer_id =
+ snmp_alarm_register(clone->interval, SA_REPEAT,
+ alarm_check_var, eptr);
+ }
+ body->interval = clone->interval;
+ }
+
+ if (snmp_oid_compare(clone->var_name.objid, clone->var_name.length,
+ body->var_name.objid, body->var_name.length)) {
+ memcpy(&body->var_name, &clone->var_name, sizeof(VAR_OID_T));
+ }
+
+ body->sample_type = clone->sample_type;
+ body->startup_type = clone->startup_type;
+ body->sample_type = clone->sample_type;
+ body->rising_threshold = clone->rising_threshold;
+ body->falling_threshold = clone->falling_threshold;
+ body->rising_event_index = clone->rising_event_index;
+ body->falling_event_index = clone->falling_event_index;
+ /*
+ * ag_trace ("alarm_Copy: rising_threshold=%lu falling_threshold=%lu",
+ * body->rising_threshold, body->falling_threshold);
+ */
+ return 0;
+}
+
+static int
+write_alarmEntry(int action, u_char * var_val, u_char var_val_type,
+ size_t var_val_len, u_char * statP,
+ oid * name, size_t name_len)
+{
+ long long_tmp;
+ int leaf_id, snmp_status;
+ static int prev_action = COMMIT;
+ RMON_ENTRY_T *hdr;
+ CRTL_ENTRY_T *cloned_body;
+ CRTL_ENTRY_T *body;
+
+ switch (action) {
+ case RESERVE1:
+ case FREE:
+ case UNDO:
+ case ACTION:
+ case COMMIT:
+ default:
+ return ROWAPI_do_another_action(name, alarmEntryFirstIndexBegin,
+ action, &prev_action,
+ table_ptr, sizeof(CRTL_ENTRY_T));
+ case RESERVE2:
+ /*
+ * get values from PDU, check them and save them in the cloned entry
+ */
+ long_tmp = name[alarmEntryFirstIndexBegin];
+ leaf_id = (int) name[alarmEntryFirstIndexBegin - 1];
+ hdr = ROWAPI_find(table_ptr, long_tmp); /* it MUST be OK */
+ cloned_body = (CRTL_ENTRY_T *) hdr->tmp;
+ body = (CRTL_ENTRY_T *) hdr->body;
+ switch (leaf_id) {
+ case IDalarmInterval:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type,
+ var_val_len,
+ 0, MMM_MAX, &long_tmp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ cloned_body->interval = long_tmp;
+ break;
+ case IDalarmVariable:
+ snmp_status = AGUTIL_get_oid_value(var_val, var_val_type,
+ var_val_len,
+ &cloned_body->var_name);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ if (RMON1_ENTRY_UNDER_CREATION != hdr->status &&
+ snmp_oid_compare(cloned_body->var_name.objid,
+ cloned_body->var_name.length,
+ body->var_name.objid,
+ body->var_name.length))
+ return SNMP_ERR_BADVALUE;
+ break;
+
+ break;
+ case IDalarmSampleType:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type,
+ var_val_len,
+ SAMPLE_TYPE_ABSOLUTE,
+ SAMPLE_TYPE_DELTE,
+ &long_tmp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ cloned_body->sample_type = long_tmp;
+ break;
+ case IDalarmStartupAlarm:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type,
+ var_val_len,
+ ALARM_RISING,
+ ALARM_BOTH, &long_tmp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ cloned_body->startup_type = long_tmp;
+ break;
+ case IDalarmRisingThreshold:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type,
+ var_val_len,
+ 0, MMM_MAX, &long_tmp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ cloned_body->rising_threshold = long_tmp;
+ break;
+ case IDalarmFallingThreshold:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type,
+ var_val_len,
+ 0, 0xFFFFFFFFl, &long_tmp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ cloned_body->falling_threshold = long_tmp;
+ break;
+ case IDalarmRisingEventIndex:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type, var_val_len, 0, /* min. value */
+ 0, /* max. value */
+ &long_tmp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ cloned_body->rising_event_index = long_tmp;
+ break;
+ case IDalarmFallingEventIndex:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type, var_val_len, 0, /* min. value */
+ 0, /* max. value */
+ &long_tmp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ cloned_body->falling_event_index = long_tmp;
+ break;
+ case IDalarmOwner:
+ if (hdr->new_owner)
+ AGFREE(hdr->new_owner);
+ hdr->new_owner = AGMALLOC(MAX_OWNERSTRING);;
+ if (!hdr->new_owner)
+ return SNMP_ERR_TOOBIG;
+ snmp_status = AGUTIL_get_string_value(var_val, var_val_type,
+ var_val_len,
+ MAX_OWNERSTRING,
+ 1, NULL, hdr->new_owner);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+
+ break;
+ case IDalarmStatus:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type,
+ var_val_len,
+ RMON1_ENTRY_VALID,
+ RMON1_ENTRY_INVALID,
+ &long_tmp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ hdr->new_status = long_tmp;
+ break;
+ default:
+ ag_trace("%s:unknown leaf_id=%d\n", table_ptr->name,
+ (int) leaf_id);
+ return SNMP_ERR_NOSUCHNAME;
+ } /* of switch by 'leaf_id' */
+
+ break;
+ } /* of switch by actions */
+
+ prev_action = action;
+ return SNMP_ERR_NOERROR;
+}
+
+u_char *
+var_alarmEntry(struct variable * vp, oid * name, size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ static long long_return;
+ static CRTL_ENTRY_T theEntry;
+ RMON_ENTRY_T *hdr;
+
+ *write_method = write_alarmEntry;
+ hdr = ROWAPI_header_ControlEntry(vp, name, length, exact, var_len,
+ table_ptr,
+ &theEntry, sizeof(CRTL_ENTRY_T));
+ if (!hdr)
+ return NULL;
+
+ *var_len = sizeof(long); /* default */
+
+ switch (vp->magic) {
+ case IDalarmIndex:
+ long_return = hdr->ctrl_index;
+ return (u_char *) & long_return;
+ case IDalarmInterval:
+ long_return = theEntry.interval;
+ return (u_char *) & long_return;
+ case IDalarmVariable:
+ *var_len = sizeof(oid) * theEntry.var_name.length;
+ return (unsigned char *) theEntry.var_name.objid;
+ return (u_char *) & long_return;
+ case IDalarmSampleType:
+ long_return = theEntry.sample_type;
+ return (u_char *) & long_return;
+ case IDalarmValue:
+ long_return = theEntry.value;
+ return (u_char *) & long_return;
+ case IDalarmStartupAlarm:
+ long_return = theEntry.startup_type;
+ return (u_char *) & long_return;
+ case IDalarmRisingThreshold:
+ long_return = theEntry.rising_threshold;
+ return (u_char *) & long_return;
+ case IDalarmFallingThreshold:
+ long_return = theEntry.falling_threshold;
+ return (u_char *) & long_return;
+ case IDalarmRisingEventIndex:
+ long_return = theEntry.rising_event_index;
+ return (u_char *) & long_return;
+ case IDalarmFallingEventIndex:
+ long_return = theEntry.falling_event_index;
+ return (u_char *) & long_return;
+ case IDalarmOwner:
+ if (hdr->owner) {
+ *var_len = strlen(hdr->owner);
+ return (unsigned char *) hdr->owner;
+ } else {
+ *var_len = 0;
+ return (unsigned char *) "";
+ }
+
+ case IDalarmStatus:
+ long_return = hdr->status;
+ return (u_char *) & long_return;
+ default:
+ ag_trace("%s: unknown vp->magic=%d", table_ptr->name,
+ (int) vp->magic);
+ ERROR_MSG("");
+ }; /* of switch by 'vp->magic' */
+
+ return NULL;
+}
+
+/*
+ * Registration & Initializatio section
+ */
+
+oid oidalarmVariablesOid[] = { 1, 3, 6, 1, 2, 1, 16, 3 };
+
+struct variable7 oidalarmVariables[] = {
+ {IDalarmIndex, ASN_INTEGER, RONLY, var_alarmEntry, 3, {1, 1, 1}},
+ {IDalarmInterval, ASN_INTEGER, RWRITE, var_alarmEntry, 3, {1, 1, 2}},
+ {IDalarmVariable, ASN_OBJECT_ID, RWRITE, var_alarmEntry, 3, {1, 1, 3}},
+ {IDalarmSampleType, ASN_INTEGER, RWRITE, var_alarmEntry, 3, {1, 1, 4}},
+ {IDalarmValue, ASN_INTEGER, RONLY, var_alarmEntry, 3, {1, 1, 5}},
+ {IDalarmStartupAlarm, ASN_INTEGER, RWRITE, var_alarmEntry, 3,
+ {1, 1, 6}},
+ {IDalarmRisingThreshold, ASN_INTEGER, RWRITE, var_alarmEntry, 3,
+ {1, 1, 7}},
+ {IDalarmFallingThreshold, ASN_INTEGER, RWRITE, var_alarmEntry, 3,
+ {1, 1, 8}},
+ {IDalarmRisingEventIndex, ASN_INTEGER, RWRITE, var_alarmEntry, 3,
+ {1, 1, 9}},
+ {IDalarmFallingEventIndex, ASN_INTEGER, RWRITE, var_alarmEntry, 3,
+ {1, 1, 10}},
+ {IDalarmOwner, ASN_OCTET_STR, RWRITE, var_alarmEntry, 3, {1, 1, 11}},
+ {IDalarmStatus, ASN_INTEGER, RWRITE, var_alarmEntry, 3, {1, 1, 12}}
+};
+
+void
+init_alarm(void)
+{
+ REGISTER_MIB("alarmTable", oidalarmVariables, variable7,
+ oidalarmVariablesOid);
+
+ ROWAPI_init_table(&AlarmCtrlTable, "Alarm", 0, &alarm_Create, NULL, /* &alarm_Clone, */
+ NULL, /* &alarm_Delete, */
+ &alarm_Validate,
+ &alarm_Activate, &alarm_Deactivate, &alarm_Copy);
+}
+
+/*
+ * end of file alarm.c
+ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/alarm.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/alarm.h
new file mode 100644
index 0000000000..ae48c2ded5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/alarm.h
@@ -0,0 +1,31 @@
+/**************************************************************
+ * Copyright (C) 2001 Alex Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#ifndef _MIBGROUP_ALARM_H
+#define _MIBGROUP_ALARM_H
+
+config_require(util_funcs)
+
+ /*
+ * function prototypes
+ */
+ void init_alarm(void);
+
+#endif /* _MIBGROUP_ALARM_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/event.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/event.c
new file mode 100644
index 0000000000..6001ea9865
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/event.c
@@ -0,0 +1,828 @@
+/**************************************************************
+ * Copyright (C) 2001 Alex Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <ctype.h>
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "util_funcs.h"
+
+#include "event.h"
+
+/*
+ * Implementation headers
+ */
+#include "agutil_api.h"
+#include "row_api.h"
+
+/*
+ * File scope definitions section
+ */
+
+/*
+ * from MIB compilation
+ */
+#define eventEntryFirstIndexBegin 11
+
+#define EVENTINDEX 3
+#define EVENTDESCRIPTION 4
+#define EVENTTYPE 5
+#define EVENTCOMMUNITY 6
+#define EVENTLASTTIMESENT 7
+#define EVENTOWNER 8
+#define EVENTSTATUS 9
+
+#define Leaf_event_description 2
+#define MIN_event_description 0
+#define MAX_event_description 127
+#define Leaf_event_type 3
+#define Leaf_event_community 4
+#define MIN_event_community 0
+#define MAX_event_community 127
+#define Leaf_event_last_time_sent 5
+#define Leaf_eventOwner 6
+#define Leaf_eventStatus 7
+
+
+#define LOGEVENTINDEX 3
+#define LOGINDEX 4
+#define LOGTIME 5
+#define LOGDESCRIPTION 6
+
+
+/*
+ * defaults & limitations
+ */
+
+#define MAX_LOG_ENTRIES_PER_CTRL 200
+
+typedef struct data_struct_t {
+ struct data_struct_t *next;
+ u_long data_index;
+ u_long log_time;
+ char *log_description;
+} DATA_ENTRY_T;
+
+typedef enum {
+ EVENT_NONE = 1,
+ EVENT_LOG,
+ EVENT_TRAP,
+ EVENT_LOG_AND_TRAP
+} EVENT_TYPE_T;
+
+typedef struct {
+ char *event_description;
+ char *event_community;
+ EVENT_TYPE_T event_type;
+ u_long event_last_time_sent;
+
+ SCROLLER_T scrlr;
+#if 0
+ u_long event_last_logged_index;
+ u_long event_number_of_log_entries;
+ DATA_ENTRY_T *log_list;
+ DATA_ENTRY_T *last_log_ptr;
+#endif
+} CRTL_ENTRY_T;
+
+/*
+ * Main section
+ */
+
+static TABLE_DEFINTION_T EventCtrlTable;
+static TABLE_DEFINTION_T *table_ptr = &EventCtrlTable;
+
+/*
+ * Control Table RowApi Callbacks
+ */
+
+static int
+data_destructor(SCROLLER_T * scrlr, void *free_me)
+{
+ DATA_ENTRY_T *lptr = free_me;
+
+ if (lptr->log_description)
+ AGFREE(lptr->log_description);
+
+ return 0;
+}
+
+int
+event_Create(RMON_ENTRY_T * eptr)
+{ /* create the body: alloc it and set defaults */
+ CRTL_ENTRY_T *body;
+
+ eptr->body = AGMALLOC(sizeof(CRTL_ENTRY_T));
+ if (!eptr->body)
+ return -3;
+ body = (CRTL_ENTRY_T *) eptr->body;
+
+ /*
+ * set defaults
+ */
+
+ body->event_description = NULL;
+ body->event_community = AGSTRDUP("public");
+ /*
+ * ag_trace ("Dbg: created event_community=<%s>", body->event_community);
+ */
+ body->event_type = EVENT_NONE;
+ ROWDATAAPI_init(&body->scrlr,
+ MAX_LOG_ENTRIES_PER_CTRL,
+ MAX_LOG_ENTRIES_PER_CTRL,
+ sizeof(DATA_ENTRY_T), &data_destructor);
+
+
+ return 0;
+}
+
+int
+event_Clone(RMON_ENTRY_T * eptr)
+{ /* copy entry_bod -> clone */
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+ CRTL_ENTRY_T *clone = (CRTL_ENTRY_T *) eptr->tmp;
+
+ if (body->event_description)
+ clone->event_description = AGSTRDUP(body->event_description);
+
+ if (body->event_community)
+ clone->event_community = AGSTRDUP(body->event_community);
+ return 0;
+}
+
+int
+event_Copy(RMON_ENTRY_T * eptr)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+ CRTL_ENTRY_T *clone = (CRTL_ENTRY_T *) eptr->tmp;
+
+ if (body->event_type != clone->event_type) {
+ body->event_type = clone->event_type;
+ }
+
+ if (clone->event_description) {
+ if (body->event_description)
+ AGFREE(body->event_description);
+ body->event_description = AGSTRDUP(clone->event_description);
+ }
+
+ if (clone->event_community) {
+ if (body->event_community)
+ AGFREE(body->event_community);
+ body->event_community = AGSTRDUP(clone->event_community);
+ }
+
+ return 0;
+}
+
+int
+event_Delete(RMON_ENTRY_T * eptr)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr;
+
+ if (body->event_description)
+ AGFREE(body->event_description);
+
+ if (body->event_community)
+ AGFREE(body->event_community);
+
+ return 0;
+}
+
+int
+event_Activate(RMON_ENTRY_T * eptr)
+{ /* init logTable */
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+
+ ROWDATAAPI_set_size(&body->scrlr,
+ body->scrlr.data_requested,
+ (u_char)(RMON1_ENTRY_VALID == eptr->status) );
+
+ return 0;
+}
+
+int
+event_Deactivate(RMON_ENTRY_T * eptr)
+{ /* free logTable */
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+
+ /*
+ * free data list
+ */
+ ROWDATAAPI_descructor(&body->scrlr);
+
+ return 0;
+}
+
+static int
+write_eventControl(int action, u_char * var_val, u_char var_val_type,
+ size_t var_val_len, u_char * statP,
+ oid * name, size_t name_len)
+{
+ long long_temp;
+ char *char_temp;
+ int leaf_id, snmp_status;
+ static int prev_action = COMMIT;
+ RMON_ENTRY_T *hdr;
+ CRTL_ENTRY_T *cloned_body;
+ CRTL_ENTRY_T *body;
+
+ switch (action) {
+ case RESERVE1:
+ case FREE:
+ case UNDO:
+ case ACTION:
+ case COMMIT:
+ default:
+ return ROWAPI_do_another_action(name, eventEntryFirstIndexBegin,
+ action, &prev_action,
+ table_ptr, sizeof(CRTL_ENTRY_T));
+
+ case RESERVE2:
+ /*
+ * get values from PDU, check them and save them in the cloned entry
+ */
+ long_temp = name[eventEntryFirstIndexBegin];
+ leaf_id = (int) name[eventEntryFirstIndexBegin - 1];
+ hdr = ROWAPI_find(table_ptr, long_temp); /* it MUST be OK */
+ cloned_body = (CRTL_ENTRY_T *) hdr->tmp;
+ body = (CRTL_ENTRY_T *) hdr->body;
+ switch (leaf_id) {
+ case Leaf_event_description:
+ char_temp = AGMALLOC(1 + MAX_event_description);
+ if (!char_temp)
+ return SNMP_ERR_TOOBIG;
+ snmp_status = AGUTIL_get_string_value(var_val, var_val_type,
+ var_val_len,
+ MAX_event_description,
+ 1, NULL, char_temp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ AGFREE(char_temp);
+ return snmp_status;
+ }
+
+ if (cloned_body->event_description)
+ AGFREE(cloned_body->event_description);
+
+ cloned_body->event_description = AGSTRDUP(char_temp);
+ /*
+ * ag_trace ("rx: event_description=<%s>", cloned_body->event_description);
+ */
+ AGFREE(char_temp);
+
+ break;
+ case Leaf_event_type:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type,
+ var_val_len,
+ EVENT_NONE,
+ EVENT_LOG_AND_TRAP,
+ &long_temp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ cloned_body->event_type = long_temp;
+ break;
+ case Leaf_event_community:
+ char_temp = AGMALLOC(1 + MAX_event_community);
+ if (!char_temp)
+ return SNMP_ERR_TOOBIG;
+ snmp_status = AGUTIL_get_string_value(var_val, var_val_type,
+ var_val_len,
+ MAX_event_community,
+ 1, NULL, char_temp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ AGFREE(char_temp);
+ return snmp_status;
+ }
+
+ if (cloned_body->event_community)
+ AGFREE(cloned_body->event_community);
+
+ cloned_body->event_community = AGSTRDUP(char_temp);
+ AGFREE(char_temp);
+
+ break;
+ case Leaf_eventOwner:
+ if (hdr->new_owner)
+ AGFREE(hdr->new_owner);
+ hdr->new_owner = AGMALLOC(MAX_OWNERSTRING);;
+ if (!hdr->new_owner)
+ return SNMP_ERR_TOOBIG;
+ snmp_status = AGUTIL_get_string_value(var_val, var_val_type,
+ var_val_len,
+ MAX_OWNERSTRING,
+ 1, NULL, hdr->new_owner);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+
+ break;
+ case Leaf_eventStatus:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type,
+ var_val_len,
+ RMON1_ENTRY_VALID,
+ RMON1_ENTRY_INVALID,
+ &long_temp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ hdr->new_status = long_temp;
+ break;
+ default:
+ ag_trace("%s:unknown leaf_id=%d\n", table_ptr->name,
+ (int) leaf_id);
+ return SNMP_ERR_NOSUCHNAME;
+ } /* of switch by 'leaf_id' */
+ break;
+ } /* of switch by actions */
+
+ prev_action = action;
+ return SNMP_ERR_NOERROR;
+}
+
+unsigned char *
+var_eventTable(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ static long long_ret;
+ static CRTL_ENTRY_T theEntry;
+ RMON_ENTRY_T *hdr;
+
+ *write_method = write_eventControl;
+ hdr = ROWAPI_header_ControlEntry(vp, name, length, exact, var_len,
+ table_ptr,
+ &theEntry, sizeof(CRTL_ENTRY_T));
+ if (!hdr)
+ return NULL;
+
+ *var_len = sizeof(long); /* default */
+
+ switch (vp->magic) {
+ case EVENTINDEX:
+ long_ret = hdr->ctrl_index;
+ return (unsigned char *) &long_ret;
+ case EVENTDESCRIPTION:
+ if (theEntry.event_description) {
+ *var_len = strlen(theEntry.event_description);
+ return (unsigned char *) theEntry.event_description;
+ } else {
+ *var_len = 0;
+ return (unsigned char *) "";
+ }
+ case EVENTTYPE:
+ long_ret = theEntry.event_type;
+ return (unsigned char *) &long_ret;
+ case EVENTCOMMUNITY:
+ if (theEntry.event_community) {
+ *var_len = strlen(theEntry.event_community);
+ return (unsigned char *) theEntry.event_community;
+ } else {
+ *var_len = 0;
+ return (unsigned char *) "";
+ }
+ case EVENTLASTTIMESENT:
+ long_ret = theEntry.event_last_time_sent;
+ return (unsigned char *) &long_ret;
+ case EVENTOWNER:
+ if (hdr->owner) {
+ *var_len = strlen(hdr->owner);
+ return (unsigned char *) hdr->owner;
+ } else {
+ *var_len = 0;
+ return (unsigned char *) "";
+ }
+ case EVENTSTATUS:
+ long_ret = hdr->status;
+ return (unsigned char *) &long_ret;
+ default:
+ ag_trace("EventControlTable: unknown vp->magic=%d",
+ (int) vp->magic);
+ ERROR_MSG("");
+ }
+ return NULL;
+}
+
+static SCROLLER_T *
+event_extract_scroller(void *v_body)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) v_body;
+ return &body->scrlr;
+}
+
+unsigned char *
+var_logTable(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ static long long_ret;
+ static DATA_ENTRY_T theEntry;
+ RMON_ENTRY_T *hdr;
+ CRTL_ENTRY_T *ctrl;
+
+ *write_method = NULL;
+ hdr = ROWDATAAPI_header_DataEntry(vp, name, length, exact, var_len,
+ table_ptr,
+ &event_extract_scroller,
+ sizeof(DATA_ENTRY_T), &theEntry);
+ if (!hdr)
+ return NULL;
+
+ ctrl = (CRTL_ENTRY_T *) hdr->body;
+
+ *var_len = sizeof(long); /* default */
+
+ switch (vp->magic) {
+ case LOGEVENTINDEX:
+ long_ret = hdr->ctrl_index;
+ return (unsigned char *) &long_ret;
+ case LOGINDEX:
+ long_ret = theEntry.data_index;
+ return (unsigned char *) &long_ret;
+ case LOGTIME:
+ long_ret = theEntry.log_time;
+ return (unsigned char *) &long_ret;
+ case LOGDESCRIPTION:
+ if (theEntry.log_description) {
+ *var_len = strlen(theEntry.log_description);
+ return (unsigned char *) theEntry.log_description;
+ } else {
+ *var_len = 0;
+ return (unsigned char *) "";
+ }
+ default:
+ ERROR_MSG("");
+ }
+
+ return NULL;
+}
+
+/*
+ * External API section
+ */
+
+static char *
+create_explanaition(CRTL_ENTRY_T * evptr, u_char is_rising,
+ u_long alarm_index, u_long event_index,
+ oid * alarmed_var,
+ size_t alarmed_var_length,
+ u_long value, u_long the_threshold,
+ u_long sample_type, char *alarm_descr)
+{
+#define UNEQ_LENGTH (1 + 11 + 4 + 11 + 1 + 20)
+ char expl[UNEQ_LENGTH];
+ static char c_oid[SPRINT_MAX_LEN];
+ size_t sz;
+ char *descr;
+ register char *pch;
+ register char *tmp;
+
+
+ snprint_objid(c_oid, sizeof(c_oid)-1, alarmed_var, alarmed_var_length);
+ c_oid[sizeof(c_oid)-1] = '\0';
+ for (pch = c_oid;;) {
+ tmp = strchr(pch, '.');
+ if (!tmp)
+ break;
+ if (isdigit(tmp[1]) || '"' == tmp[1])
+ break;
+ pch = tmp + 1;
+ }
+
+ snprintf(expl, UNEQ_LENGTH, "=%ld %s= %ld :%ld, %ld",
+ (unsigned long) value,
+ is_rising ? ">" : "<",
+ (unsigned long) the_threshold,
+ (long) alarm_index, (long) event_index);
+ sz = 3 + strlen(expl) + strlen(pch);
+ if (alarm_descr)
+ sz += strlen(alarm_descr);
+
+ descr = AGMALLOC(sz);
+ if (!descr) {
+ ag_trace("Can't allocate event description");
+ return NULL;
+ }
+
+ if (alarm_descr) {
+ strcpy(descr, alarm_descr);
+ strcat(descr, ":");
+ } else
+ *descr = '\0';
+
+ strcat(descr, pch);
+ strcat(descr, expl);
+ return descr;
+}
+
+extern void send_enterprise_trap_vars(int, int, oid *, int,
+ netsnmp_variable_list *);
+
+static netsnmp_variable_list *
+oa_bind_var(netsnmp_variable_list * prev,
+ void *value, int type, size_t sz_val, oid * oid, size_t sz_oid)
+{
+ netsnmp_variable_list *var;
+
+ var = (netsnmp_variable_list *) malloc(sizeof(netsnmp_variable_list));
+ if (!var) {
+ ag_trace("FATAL: cannot malloc in oa_bind_var\n");
+ exit(-1); /* Sorry :( */
+ }
+ memset(var, 0, sizeof(netsnmp_variable_list));
+ var->next_variable = prev;
+ snmp_set_var_objid(var, oid, sz_oid);
+ snmp_set_var_value(var, (u_char *) value, sz_val);
+ var->type = type;
+
+ return var;
+}
+
+static void
+event_send_trap(CRTL_ENTRY_T * evptr, u_char is_rising,
+ u_int alarm_index,
+ u_int value, u_int the_threshold,
+ oid * alarmed_var, size_t alarmed_var_length,
+ u_int sample_type)
+{
+ static oid rmon1_trap_oid[] = { 1, 3, 6, 1, 2, 1, 16, 0, 0 };
+ static oid alarm_index_oid[] =
+ { 1, 3, 6, 1, 2, 1, 16, 3, 1, 1, 1 };
+ static oid alarmed_var_oid[] =
+ { 1, 3, 6, 1, 2, 1, 16, 3, 1, 1, 3 };
+ static oid sample_type_oid[] =
+ { 1, 3, 6, 1, 2, 1, 16, 3, 1, 1, 4 };
+ static oid value_oid[] = { 1, 3, 6, 1, 2, 1, 16, 3, 1, 1, 5 };
+ static oid threshold_oid[] = { 1, 3, 6, 1, 2, 1, 16, 3, 1, 1, 7 }; /* rising case */
+ netsnmp_variable_list *top = NULL;
+ register int iii;
+
+ /*
+ * set the last 'oid' : risingAlarm or fallingAlarm
+ */
+ if (is_rising) {
+ iii = OID_LENGTH(rmon1_trap_oid);
+ rmon1_trap_oid[iii - 1] = 1;
+ iii = OID_LENGTH(threshold_oid);
+ threshold_oid[iii - 1] = 7;
+ } else {
+ iii = OID_LENGTH(rmon1_trap_oid);
+ rmon1_trap_oid[iii - 1] = 0;
+ iii = OID_LENGTH(threshold_oid);
+ threshold_oid[iii - 1] = 8;
+ }
+
+ /*
+ * build the var list
+ */
+ top = oa_bind_var(top, &alarm_index, ASN_INTEGER, sizeof(u_int),
+ alarm_index_oid, OID_LENGTH(alarm_index_oid));
+
+ top =
+ oa_bind_var(top, alarmed_var, ASN_OBJECT_ID,
+ sizeof(oid) * alarmed_var_length, alarmed_var_oid,
+ OID_LENGTH(alarmed_var_oid));
+
+ top = oa_bind_var(top, &sample_type, ASN_INTEGER, sizeof(u_int),
+ sample_type_oid, OID_LENGTH(sample_type_oid));
+
+ top = oa_bind_var(top, &value, ASN_INTEGER, sizeof(u_int),
+ value_oid, OID_LENGTH(value_oid));
+
+ top = oa_bind_var(top, &the_threshold, ASN_INTEGER, sizeof(u_int),
+ threshold_oid, OID_LENGTH(threshold_oid));
+
+
+ send_enterprise_trap_vars(SNMP_TRAP_ENTERPRISESPECIFIC, 0,
+ rmon1_trap_oid,
+ OID_LENGTH(rmon1_trap_oid), top);
+ ag_trace("rmon trap has been sent");
+ snmp_free_varbind(top);
+
+}
+
+
+static void
+event_save_log(CRTL_ENTRY_T * body, char *event_descr)
+{
+ register DATA_ENTRY_T *lptr;
+
+ lptr = ROWDATAAPI_locate_new_data(&body->scrlr);
+ if (!lptr) {
+ ag_trace("Err: event_save_log:cannot locate ?");
+ return;
+ }
+
+ lptr->log_time = body->event_last_time_sent;
+ if (lptr->log_description)
+ AGFREE(lptr->log_description);
+ lptr->log_description = AGSTRDUP(event_descr);
+ lptr->data_index = ROWDATAAPI_get_total_number(&body->scrlr);
+
+ /*
+ * ag_trace ("log has been saved, data_index=%d", (int) lptr->data_index);
+ */
+}
+
+int
+event_api_send_alarm(u_char is_rising,
+ u_long alarm_index,
+ u_long event_index,
+ oid * alarmed_var,
+ size_t alarmed_var_length,
+ u_long sample_type,
+ u_long value, u_long the_threshold, char *alarm_descr)
+{
+ RMON_ENTRY_T *eptr;
+ CRTL_ENTRY_T *evptr;
+
+ if (!event_index)
+ return SNMP_ERR_NOSUCHNAME;
+
+#if 0
+ ag_trace("event_api_send_alarm(%d,%d,%d,'%s')",
+ (int) is_rising, (int) alarm_index, (int) event_index,
+ alarm_descr);
+#endif
+ eptr = ROWAPI_find(table_ptr, event_index);
+ if (!eptr) {
+ /*
+ * ag_trace ("event cannot find entry %ld", event_index);
+ */
+ return SNMP_ERR_NOSUCHNAME;
+ }
+
+ evptr = (CRTL_ENTRY_T *) eptr->body;
+ evptr->event_last_time_sent = AGUTIL_sys_up_time();
+
+
+ if (EVENT_TRAP == evptr->event_type
+ || EVENT_LOG_AND_TRAP == evptr->event_type) {
+ event_send_trap(evptr, is_rising, alarm_index, value,
+ the_threshold, alarmed_var, alarmed_var_length,
+ sample_type);
+ }
+
+ if (EVENT_LOG == evptr->event_type
+ || EVENT_LOG_AND_TRAP == evptr->event_type) {
+ register char *explain;
+
+ explain = create_explanaition(evptr, is_rising,
+ alarm_index, event_index,
+ alarmed_var, alarmed_var_length,
+ value, the_threshold,
+ sample_type, alarm_descr);
+ /*
+ * if (explain) ag_trace ("Dbg:'%s'", explain);
+ */
+ event_save_log(evptr, explain);
+ if (explain)
+ AGFREE(explain);
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+#if 1 /* debug, but may be used for init. TBD: may be token snmpd.conf ? */
+int
+add_event_entry(int ctrl_index,
+ char *event_description,
+ EVENT_TYPE_T event_type, char *event_community)
+{
+ register RMON_ENTRY_T *eptr;
+ register CRTL_ENTRY_T *body;
+ int ierr;
+
+ ierr = ROWAPI_new(table_ptr, ctrl_index);
+ if (ierr) {
+ ag_trace("ROWAPI_new failed with %d", ierr);
+ return ierr;
+ }
+
+ eptr = ROWAPI_find(table_ptr, ctrl_index);
+ if (!eptr) {
+ ag_trace("ROWAPI_find failed");
+ return -4;
+ }
+
+ body = (CRTL_ENTRY_T *) eptr->body;
+
+ /*
+ * set parameters
+ */
+
+ if (event_description) {
+ if (body->event_description)
+ AGFREE(body->event_description);
+ body->event_description = AGSTRDUP(event_description);
+ }
+
+ if (event_community) {
+ if (body->event_community)
+ AGFREE(body->event_community);
+ body->event_community = AGSTRDUP(event_community);
+ }
+
+ body->event_type = event_type;
+
+ eptr->new_status = RMON1_ENTRY_VALID;
+ ierr = ROWAPI_commit(table_ptr, ctrl_index);
+ if (ierr) {
+ ag_trace("ROWAPI_commit failed with %d", ierr);
+ }
+
+ return ierr;
+}
+#endif
+
+/*
+ * Registration & Initializatio section
+ */
+
+oid eventTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 16, 9, 1 };
+oid logTable_variables_oid[] = { 1, 3, 6, 1, 2, 1, 16, 9, 2 };
+
+struct variable2 eventTable_variables[] = {
+ /*
+ * magic number , variable type, ro/rw , callback fn , L, oidsuffix
+ */
+ {EVENTINDEX, ASN_INTEGER, RONLY, var_eventTable, 2, {1, 1}},
+ {EVENTDESCRIPTION, ASN_OCTET_STR, RWRITE, var_eventTable, 2, {1, 2}},
+ {EVENTTYPE, ASN_INTEGER, RWRITE, var_eventTable, 2, {1, 3}},
+ {EVENTCOMMUNITY, ASN_OCTET_STR, RWRITE, var_eventTable, 2, {1, 4}},
+ {EVENTLASTTIMESENT, ASN_TIMETICKS, RONLY, var_eventTable, 2, {1, 5}},
+ {EVENTOWNER, ASN_OCTET_STR, RWRITE, var_eventTable, 2, {1, 6}},
+ {EVENTSTATUS, ASN_INTEGER, RWRITE, var_eventTable, 2, {1, 7}}
+};
+
+struct variable2 logTable_variables[] = {
+ /*
+ * magic number , variable type, ro/rw , callback fn , L, oidsuffix
+ */
+ {LOGEVENTINDEX, ASN_INTEGER, RONLY, var_logTable, 2, {1, 1}},
+ {LOGINDEX, ASN_INTEGER, RONLY, var_logTable, 2, {1, 2}},
+ {LOGTIME, ASN_TIMETICKS, RONLY, var_logTable, 2, {1, 3}},
+ {LOGDESCRIPTION, ASN_OCTET_STR, RONLY, var_logTable, 2, {1, 4}}
+
+};
+
+void
+init_event(void)
+{
+ REGISTER_MIB("eventTable", eventTable_variables, variable2,
+ eventTable_variables_oid);
+ REGISTER_MIB("logTable", logTable_variables, variable2,
+ logTable_variables_oid);
+
+ ROWAPI_init_table(&EventCtrlTable, "Event", 0, &event_Create, &event_Clone, &event_Delete, NULL, /* &event_Validate, */
+ &event_Activate, &event_Deactivate, &event_Copy);
+#if 0
+ add_event_entry(3, "Alarm", EVENT_LOG_AND_TRAP, NULL);
+ /*
+ * add_event_entry (5, ">=", EVENT_LOG_AND_TRAP, NULL);
+ */
+#endif
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/event.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/event.h
new file mode 100644
index 0000000000..e7993f484b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/event.h
@@ -0,0 +1,31 @@
+/**************************************************************
+ * Copyright (C) 2001 Alex Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#ifndef _MIBGROUP_EVENT_H
+#define _MIBGROUP_EVENT_H
+
+config_require(util_funcs)
+
+ /*
+ * function prototypes
+ */
+ void init_event(void);
+
+#endif /* _MIBGROUP_EVENT_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/history.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/history.c
new file mode 100644
index 0000000000..937c5591df
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/history.c
@@ -0,0 +1,729 @@
+/**************************************************************
+ * Copyright (C) 2001 Alex Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "util_funcs.h"
+
+#include "history.h"
+
+/*
+ * Implementation headers
+ */
+#include "agutil_api.h"
+#include "row_api.h"
+
+/*
+ * File scope definitions section
+ */
+
+#define historyControlEntryFirstIndexBegin 11
+
+#define CTRL_INDEX 3
+#define CTRL_DATASOURCE 4
+#define CTRL_BUCKETSREQUESTED 5
+#define CTRL_BUCKETSGRANTED 6
+#define CTRL_INTERVAL 7
+#define CTRL_OWNER 8
+#define CTRL_STATUS 9
+
+#define DATA_INDEX 3
+#define DATA_SAMPLEINDEX 4
+#define DATA_INTERVALSTART 5
+#define DATA_DROPEVENTS 6
+#define DATA_OCTETS 7
+#define DATA_PKTS 8
+#define DATA_BROADCASTPKTS 9
+#define DATA_MULTICASTPKTS 10
+#define DATA_CRCALIGNERRORS 11
+#define DATA_UNDERSIZEPKTS 12
+#define DATA_OVERSIZEPKTS 13
+#define DATA_FRAGMENTS 14
+#define DATA_JABBERS 15
+#define DATA_COLLISIONS 16
+#define DATA_UTILIZATION 17
+
+/*
+ * defaults & limitations
+ */
+
+#define MAX_BUCKETS_IN_CRTL_ENTRY 50
+#define HIST_DEF_BUCK_REQ 50
+#define HIST_DEF_INTERVAL 1800
+static VAR_OID_T DEFAULT_DATA_SOURCE = { 11, /* ifIndex.1 */
+ {1, 3, 6, 1, 2, 1, 2, 2, 1, 1, 1}
+};
+
+typedef struct data_struct_t {
+ struct data_struct_t *next;
+ u_long data_index;
+ u_long start_interval;
+ u_long utilization;
+ ETH_STATS_T EthData;
+} DATA_ENTRY_T;
+
+typedef struct {
+ u_long interval;
+ u_long timer_id;
+ VAR_OID_T data_source;
+
+ u_long coeff;
+ DATA_ENTRY_T previous_bucket;
+ SCROLLER_T scrlr;
+
+} CRTL_ENTRY_T;
+
+static TABLE_DEFINTION_T HistoryCtrlTable;
+static TABLE_DEFINTION_T *table_ptr = &HistoryCtrlTable;
+
+/*
+ * Main section
+ */
+
+# define Leaf_historyControlDataSource 2
+# define Leaf_historyControlBucketsRequested 3
+# define Leaf_historyControlInterval 5
+# define Leaf_historyControlOwner 6
+# define Leaf_historyControlStatus 7
+# define MIN_historyControlBucketsRequested 1
+# define MAX_historyControlBucketsRequested 65535
+# define MIN_historyControlInterval 1
+# define MAX_historyControlInterval 3600
+
+static int
+write_historyControl(int action, u_char * var_val, u_char var_val_type,
+ size_t var_val_len, u_char * statP,
+ oid * name, size_t name_len)
+{
+ long long_temp;
+ int leaf_id, snmp_status;
+ static int prev_action = COMMIT;
+ RMON_ENTRY_T *hdr;
+ CRTL_ENTRY_T *cloned_body;
+ CRTL_ENTRY_T *body;
+
+ switch (action) {
+ case RESERVE1:
+ case FREE:
+ case UNDO:
+ case ACTION:
+ case COMMIT:
+ default:
+ return ROWAPI_do_another_action(name,
+ historyControlEntryFirstIndexBegin,
+ action, &prev_action, table_ptr,
+ sizeof(CRTL_ENTRY_T));
+ case RESERVE2:
+ /*
+ * get values from PDU, check them and save them in the cloned entry
+ */
+ long_temp = name[historyControlEntryFirstIndexBegin];
+ leaf_id = (int) name[historyControlEntryFirstIndexBegin - 1];
+ hdr = ROWAPI_find(table_ptr, long_temp); /* it MUST be OK */
+ cloned_body = (CRTL_ENTRY_T *) hdr->tmp;
+ body = (CRTL_ENTRY_T *) hdr->body;
+ switch (leaf_id) {
+ case Leaf_historyControlDataSource:
+ snmp_status = AGUTIL_get_oid_value(var_val, var_val_type,
+ var_val_len,
+ &cloned_body->data_source);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ ag_trace("can't browse historyControlDataSource");
+ return snmp_status;
+ }
+ if (RMON1_ENTRY_UNDER_CREATION != hdr->status &&
+ snmp_oid_compare(cloned_body->data_source.objid,
+ cloned_body->data_source.length,
+ body->data_source.objid,
+ body->data_source.length)) {
+ ag_trace
+ ("can't change historyControlDataSource - not Creation");
+ return SNMP_ERR_BADVALUE;
+ }
+ break;
+ case Leaf_historyControlBucketsRequested:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type,
+ var_val_len,
+ MIN_historyControlBucketsRequested,
+ MAX_historyControlBucketsRequested,
+ &cloned_body->scrlr.
+ data_requested);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+#if 0
+ if (RMON1_ENTRY_UNDER_CREATION != hdr->status &&
+ cloned_body->scrlr.data_requested !=
+ body->scrlr.data_requested)
+ return SNMP_ERR_BADVALUE;
+#endif
+ break;
+ case Leaf_historyControlInterval:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type,
+ var_val_len,
+ MIN_historyControlInterval,
+ MAX_historyControlInterval,
+ &cloned_body->interval);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+#if 0
+ if (RMON1_ENTRY_UNDER_CREATION != hdr->status &&
+ cloned_body->interval != body->interval)
+ return SNMP_ERR_BADVALUE;
+#endif
+ break;
+ case Leaf_historyControlOwner:
+ if (hdr->new_owner)
+ AGFREE(hdr->new_owner);
+ hdr->new_owner = AGMALLOC(MAX_OWNERSTRING);;
+ if (!hdr->new_owner)
+ return SNMP_ERR_TOOBIG;
+ snmp_status = AGUTIL_get_string_value(var_val, var_val_type,
+ var_val_len,
+ MAX_OWNERSTRING,
+ 1, NULL, hdr->new_owner);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+
+ break;
+ case Leaf_historyControlStatus:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type,
+ var_val_len,
+ RMON1_ENTRY_VALID,
+ RMON1_ENTRY_INVALID,
+ &long_temp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ hdr->new_status = long_temp;
+ break;
+ default:
+ ag_trace("%s:unknown leaf_id=%d\n", table_ptr->name,
+ (int) leaf_id);
+ return SNMP_ERR_NOSUCHNAME;
+ } /* of switch by 'leaf_id' */
+ break;
+
+ } /* of switch by actions */
+
+ prev_action = action;
+ return SNMP_ERR_NOERROR;
+}
+
+/*
+ * var_historyControlTable():
+ */
+unsigned char *
+var_historyControlTable(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+ static long long_ret;
+ static CRTL_ENTRY_T theEntry;
+ RMON_ENTRY_T *hdr;
+
+ *write_method = write_historyControl;
+ hdr = ROWAPI_header_ControlEntry(vp, name, length, exact, var_len,
+ table_ptr,
+ &theEntry, sizeof(CRTL_ENTRY_T));
+ if (!hdr)
+ return NULL;
+
+ *var_len = sizeof(long); /* default */
+
+ switch (vp->magic) {
+ case CTRL_INDEX:
+ long_ret = hdr->ctrl_index;
+ return (unsigned char *) &long_ret;
+
+ case CTRL_DATASOURCE:
+ *var_len = sizeof(oid) * theEntry.data_source.length;
+ return (unsigned char *) theEntry.data_source.objid;
+
+ case CTRL_BUCKETSREQUESTED:
+ long_ret = theEntry.scrlr.data_requested;
+ return (unsigned char *) &long_ret;
+
+ case CTRL_BUCKETSGRANTED:
+
+ long_ret = theEntry.scrlr.data_granted;
+ return (unsigned char *) &long_ret;
+
+ case CTRL_INTERVAL:
+ long_ret = theEntry.interval;
+ return (unsigned char *) &long_ret;
+
+ case CTRL_OWNER:
+ if (hdr->owner) {
+ *var_len = strlen(hdr->owner);
+ return (unsigned char *) hdr->owner;
+ } else {
+ *var_len = 0;
+ return (unsigned char *) "";
+ }
+
+ case CTRL_STATUS:
+ long_ret = hdr->status;
+ return (unsigned char *) &long_ret;
+
+ default:
+ ag_trace("HistoryControlTable: unknown vp->magic=%d",
+ (int) vp->magic);
+ ERROR_MSG("");
+ }
+ return NULL;
+}
+
+/*
+ * history row management control callbacks
+ */
+
+static void
+compute_delta(ETH_STATS_T * delta,
+ ETH_STATS_T * newval, ETH_STATS_T * prevval)
+{
+#define CNT_DIF(X) delta->X = newval->X - prevval->X
+
+ CNT_DIF(octets);
+ CNT_DIF(packets);
+ CNT_DIF(bcast_pkts);
+ CNT_DIF(mcast_pkts);
+ CNT_DIF(crc_align);
+ CNT_DIF(undersize);
+ CNT_DIF(oversize);
+ CNT_DIF(fragments);
+ CNT_DIF(jabbers);
+ CNT_DIF(collisions);
+}
+
+static void
+history_get_backet(unsigned int clientreg, void *clientarg)
+{
+ RMON_ENTRY_T *hdr_ptr;
+ CRTL_ENTRY_T *body;
+ DATA_ENTRY_T *bptr;
+ ETH_STATS_T newSample;
+
+ /*
+ * ag_trace ("history_get_backet: timer_id=%d", (int) clientreg);
+ */
+ hdr_ptr = (RMON_ENTRY_T *) clientarg;
+ if (!hdr_ptr) {
+ ag_trace
+ ("Err: history_get_backet: hdr_ptr=NULL ? (Inserted in shock)");
+ return;
+ }
+
+ body = (CRTL_ENTRY_T *) hdr_ptr->body;
+ if (!body) {
+ ag_trace
+ ("Err: history_get_backet: body=NULL ? (Inserted in shock)");
+ return;
+ }
+
+ if (RMON1_ENTRY_VALID != hdr_ptr->status) {
+ ag_trace("Err: history_get_backet when entry %d is not valid ?!!",
+ (int) hdr_ptr->ctrl_index);
+ /*
+ * snmp_alarm_print_list ();
+ */
+ snmp_alarm_unregister(body->timer_id);
+ ag_trace("Err: unregistered %ld", (long) body->timer_id);
+ return;
+ }
+
+ SYSTEM_get_eth_statistics(&body->data_source, &newSample);
+
+ bptr = ROWDATAAPI_locate_new_data(&body->scrlr);
+ if (!bptr) {
+ ag_trace
+ ("Err: history_get_backet for %d: empty bucket's list !??\n",
+ (int) hdr_ptr->ctrl_index);
+ return;
+ }
+
+ bptr->data_index = ROWDATAAPI_get_total_number(&body->scrlr);
+
+ bptr->start_interval = body->previous_bucket.start_interval;
+
+ compute_delta(&bptr->EthData, &newSample,
+ &body->previous_bucket.EthData);
+
+ bptr->utilization =
+ bptr->EthData.octets * 8 + bptr->EthData.packets * (96 + 64);
+ bptr->utilization /= body->coeff;
+
+ /*
+ * update previous_bucket
+ */
+ body->previous_bucket.start_interval = AGUTIL_sys_up_time();
+ memcpy(&body->previous_bucket.EthData, &newSample,
+ sizeof(ETH_STATS_T));
+}
+
+/*
+ * Control Table RowApi Callbacks
+ */
+
+int
+history_Create(RMON_ENTRY_T * eptr)
+{ /* create the body: alloc it and set defaults */
+ CRTL_ENTRY_T *body;
+
+ eptr->body = AGMALLOC(sizeof(CRTL_ENTRY_T));
+ if (!eptr->body)
+ return -3;
+ body = (CRTL_ENTRY_T *) eptr->body;
+
+ /*
+ * set defaults
+ */
+ body->interval = HIST_DEF_INTERVAL;
+ body->timer_id = 0;
+ memcpy(&body->data_source, &DEFAULT_DATA_SOURCE, sizeof(VAR_OID_T));
+
+ ROWDATAAPI_init(&body->scrlr, HIST_DEF_BUCK_REQ,
+ MAX_BUCKETS_IN_CRTL_ENTRY, sizeof(DATA_ENTRY_T), NULL);
+
+ return 0;
+}
+
+int
+history_Validate(RMON_ENTRY_T * eptr)
+{
+ /*
+ * T.B.D. (system dependent) check valid inteface in body->data_source;
+ */
+ return 0;
+}
+
+int
+history_Activate(RMON_ENTRY_T * eptr)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+
+ body->coeff = 100000L * (long) body->interval;
+
+ ROWDATAAPI_set_size(&body->scrlr,
+ body->scrlr.data_requested,
+ (u_char)(RMON1_ENTRY_VALID == eptr->status) );
+
+ SYSTEM_get_eth_statistics(&body->data_source,
+ &body->previous_bucket.EthData);
+ body->previous_bucket.start_interval = AGUTIL_sys_up_time();
+
+ body->scrlr.current_data_ptr = body->scrlr.first_data_ptr;
+ /*
+ * ag_trace ("Dbg: registered in history_Activate");
+ */
+ body->timer_id = snmp_alarm_register(body->interval, SA_REPEAT,
+ history_get_backet, eptr);
+ return 0;
+}
+
+int
+history_Deactivate(RMON_ENTRY_T * eptr)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+
+ snmp_alarm_unregister(body->timer_id);
+ /*
+ * ag_trace ("Dbg: unregistered in history_Deactivate timer_id=%d",
+ * (int) body->timer_id);
+ */
+
+ /*
+ * free data list
+ */
+ ROWDATAAPI_descructor(&body->scrlr);
+
+ return 0;
+}
+
+int
+history_Copy(RMON_ENTRY_T * eptr)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+ CRTL_ENTRY_T *clone = (CRTL_ENTRY_T *) eptr->tmp;
+
+ if (body->scrlr.data_requested != clone->scrlr.data_requested) {
+ ROWDATAAPI_set_size(&body->scrlr, clone->scrlr.data_requested,
+ (u_char)(RMON1_ENTRY_VALID == eptr->status) );
+ }
+
+ if (body->interval != clone->interval) {
+ if (RMON1_ENTRY_VALID == eptr->status) {
+ snmp_alarm_unregister(body->timer_id);
+ body->timer_id =
+ snmp_alarm_register(clone->interval, SA_REPEAT,
+ history_get_backet, eptr);
+ }
+
+ body->interval = clone->interval;
+ }
+
+ if (snmp_oid_compare
+ (clone->data_source.objid, clone->data_source.length,
+ body->data_source.objid, body->data_source.length)) {
+ memcpy(&body->data_source, &clone->data_source, sizeof(VAR_OID_T));
+ }
+
+ return 0;
+}
+
+static SCROLLER_T *
+history_extract_scroller(void *v_body)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) v_body;
+ return &body->scrlr;
+}
+
+/*
+ * var_etherHistoryTable():
+ */
+unsigned char *
+var_etherHistoryTable(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+ static long long_ret;
+ static DATA_ENTRY_T theBucket;
+ RMON_ENTRY_T *hdr;
+ CRTL_ENTRY_T *ctrl;
+
+ *write_method = NULL;
+ hdr = ROWDATAAPI_header_DataEntry(vp, name, length, exact, var_len,
+ table_ptr,
+ &history_extract_scroller,
+ sizeof(DATA_ENTRY_T), &theBucket);
+ if (!hdr)
+ return NULL;
+
+ *var_len = sizeof(long); /* default */
+
+ ctrl = (CRTL_ENTRY_T *) hdr->body;
+
+ switch (vp->magic) {
+ case DATA_INDEX:
+ long_ret = hdr->ctrl_index;
+ return (unsigned char *) &long_ret;
+ case DATA_SAMPLEINDEX:
+ long_ret = theBucket.data_index;
+ return (unsigned char *) &long_ret;
+ case DATA_INTERVALSTART:
+ long_ret = 0;
+ return (unsigned char *) &theBucket.start_interval;
+ case DATA_DROPEVENTS:
+ long_ret = 0;
+ return (unsigned char *) &long_ret;
+ case DATA_OCTETS:
+ long_ret = 0;
+ return (unsigned char *) &theBucket.EthData.octets;
+ case DATA_PKTS:
+ long_ret = 0;
+ return (unsigned char *) &theBucket.EthData.packets;
+ case DATA_BROADCASTPKTS:
+ long_ret = 0;
+ return (unsigned char *) &theBucket.EthData.bcast_pkts;
+ case DATA_MULTICASTPKTS:
+ long_ret = 0;
+ return (unsigned char *) &theBucket.EthData.mcast_pkts;
+ case DATA_CRCALIGNERRORS:
+ long_ret = 0;
+ return (unsigned char *) &theBucket.EthData.crc_align;
+ case DATA_UNDERSIZEPKTS:
+ long_ret = 0;
+ return (unsigned char *) &theBucket.EthData.undersize;
+ case DATA_OVERSIZEPKTS:
+ long_ret = 0;
+ return (unsigned char *) &theBucket.EthData.oversize;
+ case DATA_FRAGMENTS:
+ long_ret = 0;
+ return (unsigned char *) &theBucket.EthData.fragments;
+ case DATA_JABBERS:
+ long_ret = 0;
+ return (unsigned char *) &theBucket.EthData.jabbers;
+ case DATA_COLLISIONS:
+ long_ret = 0;
+ return (unsigned char *) &theBucket.EthData.collisions;
+ case DATA_UTILIZATION:
+ long_ret = 0;
+ return (unsigned char *) &theBucket.utilization;
+ default:
+ ag_trace("etherHistoryTable: unknown vp->magic=%d",
+ (int) vp->magic);
+ ERROR_MSG("");
+ }
+ return NULL;
+}
+
+#if 1 /* debug, but may be used for init. TBD: may be token snmpd.conf ? */
+int
+add_hist_entry(int ctrl_index, int ifIndex,
+ u_long interval, u_long requested)
+{
+ register RMON_ENTRY_T *eptr;
+ register CRTL_ENTRY_T *body;
+ int ierr;
+
+ ierr = ROWAPI_new(table_ptr, ctrl_index);
+ if (ierr) {
+ ag_trace("ROWAPI_new failed with %d", ierr);
+ return ierr;
+ }
+
+ eptr = ROWAPI_find(table_ptr, ctrl_index);
+ if (!eptr) {
+ ag_trace("ROWAPI_find failed");
+ return -4;
+ }
+
+ body = (CRTL_ENTRY_T *) eptr->body;
+
+ /*
+ * set parameters
+ */
+
+ body->data_source.objid[body->data_source.length - 1] = ifIndex;
+ body->interval = interval;
+ body->scrlr.data_requested = requested;
+
+ eptr->new_status = RMON1_ENTRY_VALID;
+ ierr = ROWAPI_commit(table_ptr, ctrl_index);
+ if (ierr) {
+ ag_trace("ROWAPI_commit failed with %d", ierr);
+ }
+
+ return ierr;
+
+}
+
+#endif
+
+/*
+ * Registration & Initializatio section
+ */
+
+oid historyControlTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 16, 2, 1 };
+
+struct variable2 historyControlTable_variables[] = {
+ /*
+ * magic number , variable type, ro/rw , callback fn , L, oidsuffix
+ */
+ {CTRL_INDEX, ASN_INTEGER, RONLY, var_historyControlTable, 2, {1, 1}},
+ {CTRL_DATASOURCE, ASN_OBJECT_ID, RWRITE, var_historyControlTable, 2,
+ {1, 2}},
+ {CTRL_BUCKETSREQUESTED, ASN_INTEGER, RWRITE, var_historyControlTable,
+ 2, {1, 3}},
+ {CTRL_BUCKETSGRANTED, ASN_INTEGER, RONLY, var_historyControlTable, 2,
+ {1, 4}},
+ {CTRL_INTERVAL, ASN_INTEGER, RWRITE, var_historyControlTable, 2,
+ {1, 5}},
+ {CTRL_OWNER, ASN_OCTET_STR, RWRITE, var_historyControlTable, 2,
+ {1, 6}},
+ {CTRL_STATUS, ASN_INTEGER, RWRITE, var_historyControlTable, 2, {1, 7}},
+
+};
+
+oid etherHistoryTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 16, 2, 2 };
+
+struct variable2 etherHistoryTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+ {DATA_INDEX, ASN_INTEGER, RONLY, var_etherHistoryTable, 2, {1, 1}},
+ {DATA_SAMPLEINDEX, ASN_INTEGER, RONLY, var_etherHistoryTable, 2,
+ {1, 2}},
+ {DATA_INTERVALSTART, ASN_TIMETICKS, RONLY, var_etherHistoryTable, 2,
+ {1, 3}},
+ {DATA_DROPEVENTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,
+ {1, 4}},
+ {DATA_OCTETS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2, {1, 5}},
+ {DATA_PKTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2, {1, 6}},
+ {DATA_BROADCASTPKTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,
+ {1, 7}},
+ {DATA_MULTICASTPKTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,
+ {1, 8}},
+ {DATA_CRCALIGNERRORS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,
+ {1, 9}},
+ {DATA_UNDERSIZEPKTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,
+ {1, 10}},
+ {DATA_OVERSIZEPKTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,
+ {1, 11}},
+ {DATA_FRAGMENTS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,
+ {1, 12}},
+ {DATA_JABBERS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2, {1, 13}},
+ {DATA_COLLISIONS, ASN_COUNTER, RONLY, var_etherHistoryTable, 2,
+ {1, 14}},
+ {DATA_UTILIZATION, ASN_INTEGER, RONLY, var_etherHistoryTable, 2,
+ {1, 15}},
+
+};
+
+void
+init_history(void)
+{
+ REGISTER_MIB("historyControlTable", historyControlTable_variables,
+ variable2, historyControlTable_variables_oid);
+ REGISTER_MIB("etherHistoryTable", etherHistoryTable_variables,
+ variable2, etherHistoryTable_variables_oid);
+
+ ROWAPI_init_table(&HistoryCtrlTable, "History", 0, &history_Create, NULL, /* &history_Clone, */
+ NULL, /* &history_Delete, */
+ &history_Validate,
+ &history_Activate,
+ &history_Deactivate, &history_Copy);
+
+ /*
+ * add_hist_entry (2, 3, 4, 2);
+ */
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/history.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/history.h
new file mode 100644
index 0000000000..094bee49d5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/history.h
@@ -0,0 +1,31 @@
+/**************************************************************
+ * Copyright (C) 2001 Alex Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#ifndef _MIBGROUP_HISTORY_H
+#define _MIBGROUP_HISTORY_H
+
+config_require(util_funcs)
+
+ /*
+ * function prototypes
+ */
+ void init_history(void);
+
+#endif /* _MIBGROUP_HISTORY_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/row_api.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/row_api.h
new file mode 100644
index 0000000000..bc986a0333
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/row_api.h
@@ -0,0 +1,187 @@
+/**************************************************************
+ * Copyright (C) 2001 Alex Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#ifndef _row_api_h_included__
+#define _row_api_h_included__
+
+/*
+ * control tables API section
+ */
+
+typedef enum {
+ RMON1_ENTRY_VALID = 1,
+ RMON1_ENTRY_CREATE_REQUEST,
+ RMON1_ENTRY_UNDER_CREATION,
+ RMON1_ENTRY_INVALID
+} RMON1_ENTRY_STATUS_T;
+
+#define MAX_OWNERSTRING 128
+
+/*
+ * structure for entry of all 'control' tables
+ */
+typedef struct tagEntry {
+ /*
+ * begin of the header
+ */
+ struct tagEntry *next;
+ void *table_ptr; /* do casting to (TABLE_DEFINTION_T*) */
+ RMON1_ENTRY_STATUS_T status;
+ RMON1_ENTRY_STATUS_T new_status;
+ u_long ctrl_index;
+ u_long timer_id;
+ char *owner;
+ char *new_owner;
+ u_char only_just_created;
+
+ /*
+ * end of the header
+ */
+
+ void *body;
+ void *tmp;
+} RMON_ENTRY_T;
+
+typedef int (ENTRY_CALLBACK_T) (RMON_ENTRY_T *);
+
+typedef struct {
+ char *name;
+ RMON_ENTRY_T *first;
+ u_long max_number_of_entries; /* '<0' means without limit */
+ u_long current_number_of_entries;
+ ENTRY_CALLBACK_T *ClbkCreate;
+ ENTRY_CALLBACK_T *ClbkClone;
+ ENTRY_CALLBACK_T *ClbkValidate;
+ ENTRY_CALLBACK_T *ClbkActivate;
+ ENTRY_CALLBACK_T *ClbkDeactivate;
+ ENTRY_CALLBACK_T *ClbkDelete;
+ ENTRY_CALLBACK_T *ClbkCopy;
+} TABLE_DEFINTION_T;
+
+/*
+ * Api prototypes
+ */
+void ROWAPI_init_table(TABLE_DEFINTION_T * table_ptr,
+ char *name,
+ u_long max_number_of_entries,
+ ENTRY_CALLBACK_T * ClbkCreate,
+ ENTRY_CALLBACK_T * ClbkClone,
+ ENTRY_CALLBACK_T * ClbkDelete,
+ ENTRY_CALLBACK_T * ClbkValidate,
+ ENTRY_CALLBACK_T * ClbkActivate,
+ ENTRY_CALLBACK_T * ClbkDeactivate,
+ ENTRY_CALLBACK_T * ClbkCopy);
+
+int ROWAPI_new(TABLE_DEFINTION_T * table_ptr,
+ u_long ctrl_index);
+
+RMON_ENTRY_T *ROWAPI_get_clone(TABLE_DEFINTION_T * table_ptr,
+ u_long ctrl_index, size_t body_size);
+
+void ROWAPI_delete_clone(TABLE_DEFINTION_T * table_ptr,
+ u_long ctrl_index);
+
+RMON_ENTRY_T *ROWAPI_first(TABLE_DEFINTION_T * table_ptr);
+
+RMON_ENTRY_T *ROWAPI_next(TABLE_DEFINTION_T * table_ptr,
+ u_long prev_index);
+
+RMON_ENTRY_T *ROWAPI_find(TABLE_DEFINTION_T * table_ptr,
+ u_long ctrl_index);
+
+int ROWAPI_action_check(TABLE_DEFINTION_T * table_ptr,
+ u_long ctrl_index);
+
+int ROWAPI_commit(TABLE_DEFINTION_T * table_ptr,
+ u_long ctrl_index);
+
+RMON_ENTRY_T *ROWAPI_header_ControlEntry(struct variable *vp, oid * name,
+ size_t * length, int exact,
+ size_t * var_len,
+ TABLE_DEFINTION_T * table_ptr,
+ void *entry_ptr,
+ size_t entry_size);
+
+int ROWAPI_do_another_action(oid * name,
+ int tbl_first_index_begin,
+ int action, int *prev_action,
+ TABLE_DEFINTION_T * table_ptr,
+ size_t entry_size);
+
+/*
+ * data tables API section
+ */
+
+typedef int (SCROLLER_ENTRY_DESCRUCTOR_T) (void *);
+
+typedef struct nexted_void_t {
+ struct nexted_void_t *next;
+ u_long data_index;
+} NEXTED_PTR_T;
+
+typedef struct data_scroller {
+ u_long max_number_of_entries;
+ u_long data_requested;
+ u_long data_granted;
+ u_long data_created; /* number of allocated data entries */
+ u_long data_stored; /* number of data, currently stored */
+ u_long data_total_number; /* number of data entries, stored after validation */
+
+ /*
+ * these 3 pointers make casting to private (DATA_ENTRY_T*)
+ */
+ void *first_data_ptr;
+ NEXTED_PTR_T *last_data_ptr;
+ void *current_data_ptr;
+
+ size_t data_size;
+ int (*data_destructor) (struct data_scroller *, void *);
+} SCROLLER_T;
+
+int ROWDATAAPI_init(SCROLLER_T * scrlr,
+ u_long max_number_of_entries,
+ u_long data_requested,
+ size_t data_size,
+ int (*data_destructor) (struct
+ data_scroller *,
+ void *));
+
+void
+ ROWDATAAPI_set_size(SCROLLER_T * scrlr,
+ u_long data_requested,
+ u_char do_allocation);
+
+void ROWDATAAPI_descructor(SCROLLER_T * scrlr);
+
+void *ROWDATAAPI_locate_new_data(SCROLLER_T * scrlr);
+
+u_long ROWDATAAPI_get_total_number(SCROLLER_T * scrlr);
+
+RMON_ENTRY_T *ROWDATAAPI_header_DataEntry(struct variable *vp,
+ oid * name, size_t * length,
+ int exact, size_t * var_len,
+ TABLE_DEFINTION_T * table_ptr,
+ SCROLLER_T *
+ (*extract_scroller) (void
+ *body),
+ size_t data_size,
+ void *entry_ptr);
+
+#endif /* _row_api_h_included__ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/rows.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/rows.c
new file mode 100644
index 0000000000..d8c3cc1064
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/rows.c
@@ -0,0 +1,880 @@
+/**************************************************************
+ * Copyright (C) 2001 Alex Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#include <net-snmp/net-snmp-config.h>
+#include <stddef.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "util_funcs.h"
+
+#include "agutil_api.h"
+#include "rows.h"
+#include "row_api.h"
+
+#define MAX_CREATION_TIME 60
+
+/*
+ * ***************************
+ */
+/*
+ * static file scope functions
+ */
+/*
+ * ***************************
+ */
+
+static void
+rowapi_delete(RMON_ENTRY_T * eold)
+{
+ register RMON_ENTRY_T *eptr;
+ register RMON_ENTRY_T *prev = NULL;
+ TABLE_DEFINTION_T *table_ptr;
+
+ table_ptr = (TABLE_DEFINTION_T *) eold->table_ptr;
+
+ /*
+ * delete timout scheduling
+ */
+ snmp_alarm_unregister(eold->timer_id);
+ ag_trace("Entry %ld in %s has been deleted",
+ eold->ctrl_index, table_ptr->name);
+
+ /*
+ * It it was valid entry => deactivate it
+ */
+ if (RMON1_ENTRY_VALID == eold->status) {
+ if (table_ptr->ClbkDeactivate)
+ table_ptr->ClbkDeactivate(eold);
+ }
+
+ /*
+ * delete it in users's sence
+ */
+ if (table_ptr->ClbkDelete)
+ table_ptr->ClbkDelete((RMON_ENTRY_T *) eold->body);
+
+ if (eold->body) {
+ AGFREE(eold->body);
+ }
+
+ if (eold->owner)
+ AGFREE(eold->owner);
+
+ /*
+ * delete it from the list in table
+ */
+
+ table_ptr->current_number_of_entries--;
+
+ for (eptr = table_ptr->first; eptr; eptr = eptr->next) {
+ if (eptr == eold)
+ break;
+ prev = eptr;
+ }
+
+ if (prev)
+ prev->next = eold->next;
+ else
+ table_ptr->first = eold->next;
+
+ AGFREE(eold);
+}
+
+static void
+rowapi_too_long_creation_callback(unsigned int clientreg, void *clientarg)
+{
+ RMON_ENTRY_T *eptr;
+ TABLE_DEFINTION_T *table_ptr;
+
+ eptr = (RMON_ENTRY_T *) clientarg;
+ table_ptr = (TABLE_DEFINTION_T *) eptr->table_ptr;
+ if (RMON1_ENTRY_VALID != eptr->status) {
+ ag_trace("row #%d in %s was under creation more then %ld sec.",
+ eptr->ctrl_index, table_ptr->name,
+ (long) MAX_CREATION_TIME);
+ rowapi_delete(eptr);
+ } else {
+ snmp_alarm_unregister(eptr->timer_id);
+ }
+}
+
+static int
+rowapi_deactivate(TABLE_DEFINTION_T * table_ptr, RMON_ENTRY_T * eptr)
+{
+ if (RMON1_ENTRY_UNDER_CREATION == eptr->status) {
+ /*
+ * nothing to do
+ */
+ return SNMP_ERR_NOERROR;
+ }
+
+ if (table_ptr->ClbkDeactivate)
+ table_ptr->ClbkDeactivate(eptr);
+ eptr->status = RMON1_ENTRY_UNDER_CREATION;
+ eptr->timer_id = snmp_alarm_register(MAX_CREATION_TIME, 0,
+ rowapi_too_long_creation_callback,
+ eptr);
+ ag_trace("Entry %ld in %s has been deactivated",
+ eptr->ctrl_index, table_ptr->name);
+
+ return SNMP_ERR_NOERROR;
+}
+
+static int
+rowapi_activate(TABLE_DEFINTION_T * table_ptr, RMON_ENTRY_T * eptr)
+{
+ RMON1_ENTRY_STATUS_T prev_status = eptr->status;
+
+ eptr->status = RMON1_ENTRY_VALID;
+
+ if (table_ptr->ClbkActivate) {
+ if (0 != table_ptr->ClbkActivate(eptr)) {
+ ag_trace("Can't activate entry #%ld in %s",
+ eptr->ctrl_index, table_ptr->name);
+ eptr->status = prev_status;
+ return SNMP_ERR_BADVALUE;
+ }
+ }
+
+ snmp_alarm_unregister(eptr->timer_id);
+ eptr->timer_id = 0;
+ ag_trace("Entry %ld in %s has been activated",
+ eptr->ctrl_index, table_ptr->name);
+ return SNMP_ERR_NOERROR;
+}
+
+/*
+ * creates an entry, locats it in proper sorted order by index
+ * Row is initialized to zero,
+ * except: 'next', 'table_ptr', 'index',
+ * 'timer_id' & 'status'=(RMON1_ENTRY_UNDER_CREATION)
+ * Calls (if need) ClbkCreate.
+ * Schedules for timeout under entry creation (id of this
+ * scheduling is saved in 'timer_id').
+ * Returns 0: OK,
+ -1:max. number exedes;
+ -2:malloc failed;
+ -3:ClbkCreate failed */
+int
+ROWAPI_new(TABLE_DEFINTION_T * table_ptr, u_long ctrl_index)
+{
+ register RMON_ENTRY_T *eptr;
+ register RMON_ENTRY_T *prev = NULL;
+ register RMON_ENTRY_T *enew;
+
+ /*
+ * check on 'max.number'
+ */
+ if (table_ptr->max_number_of_entries > 0 &&
+ table_ptr->current_number_of_entries >=
+ table_ptr->max_number_of_entries)
+ return -1;
+
+ /*
+ * allocate memory for the header
+ */
+ enew = (RMON_ENTRY_T *) AGMALLOC(sizeof(RMON_ENTRY_T));
+ if (!enew)
+ return -2;
+
+ /*
+ * init the header
+ */
+ memset(enew, 0, sizeof(RMON_ENTRY_T));
+ enew->ctrl_index = ctrl_index;
+ enew->table_ptr = (void *) table_ptr;
+ enew->status = RMON1_ENTRY_UNDER_CREATION;
+ enew->only_just_created = 1;
+
+ /*
+ * create the body: alloc it and set defaults
+ */
+ if (table_ptr->ClbkCreate) {
+ if (0 != table_ptr->ClbkCreate(enew)) {
+ AGFREE(enew);
+ return -3;
+ }
+ }
+
+ table_ptr->current_number_of_entries++;
+
+ /*
+ * find the place : before 'eptr' and after 'prev'
+ */
+ for (eptr = table_ptr->first; eptr; eptr = eptr->next) {
+ if (ctrl_index < eptr->ctrl_index)
+ break;
+ prev = eptr;
+ }
+
+ /*
+ * insert it
+ */
+ enew->next = eptr;
+ if (prev)
+ prev->next = enew;
+ else
+ table_ptr->first = enew;
+
+ enew->timer_id = snmp_alarm_register(MAX_CREATION_TIME, 0,
+ rowapi_too_long_creation_callback,
+ enew);
+ ag_trace("Entry %ld in %s has been created",
+ enew->ctrl_index, table_ptr->name);
+ return 0;
+}
+
+/*
+ * ******************************
+ */
+/*
+ * external usage (API) functions
+ */
+/*
+ * ******************************
+ */
+
+void
+ROWAPI_init_table(TABLE_DEFINTION_T * table_ptr,
+ char *name,
+ u_long max_number_of_entries,
+ ENTRY_CALLBACK_T * ClbkCreate,
+ ENTRY_CALLBACK_T * ClbkClone,
+ ENTRY_CALLBACK_T * ClbkDelete,
+ ENTRY_CALLBACK_T * ClbkValidate,
+ ENTRY_CALLBACK_T * ClbkActivate,
+ ENTRY_CALLBACK_T * ClbkDeactivate,
+ ENTRY_CALLBACK_T * ClbkCopy)
+{
+ table_ptr->name = name;
+ if (!table_ptr->name)
+ table_ptr->name = "Unknown";
+
+ table_ptr->max_number_of_entries = max_number_of_entries;
+ table_ptr->ClbkCreate = ClbkCreate;
+ table_ptr->ClbkClone = ClbkClone;
+ table_ptr->ClbkDelete = ClbkDelete;
+ table_ptr->ClbkValidate = ClbkValidate;
+ table_ptr->ClbkActivate = ClbkActivate;
+ table_ptr->ClbkDeactivate = ClbkDeactivate;
+ table_ptr->ClbkCopy = ClbkCopy;
+
+ table_ptr->first = NULL;
+ table_ptr->current_number_of_entries = 0;
+}
+
+void
+ROWAPI_delete_clone(TABLE_DEFINTION_T * table_ptr, u_long ctrl_index)
+{
+ register RMON_ENTRY_T *eptr;
+
+ eptr = ROWAPI_find(table_ptr, ctrl_index);
+ if (eptr) {
+ if (eptr->new_owner)
+ AGFREE(eptr->new_owner);
+
+ if (eptr->tmp) {
+ if (table_ptr->ClbkDelete)
+ table_ptr->ClbkDelete((RMON_ENTRY_T *) eptr->tmp);
+ AGFREE(eptr->tmp);
+ }
+
+ if (eptr->only_just_created) {
+ rowapi_delete(eptr);
+ }
+ }
+}
+
+RMON_ENTRY_T *
+ROWAPI_get_clone(TABLE_DEFINTION_T * table_ptr,
+ u_long ctrl_index, size_t body_size)
+{
+ register RMON_ENTRY_T *eptr;
+
+ if (ctrl_index < 1 || ctrl_index > 0xFFFFu) {
+ ag_trace("%s: index %ld out of range (1..65535)",
+ table_ptr->name, (long) ctrl_index);
+ return NULL;
+ }
+
+ /*
+ * get it
+ */
+ eptr = ROWAPI_find(table_ptr, ctrl_index);
+
+ if (!eptr) { /* try to create */
+ if (0 != ROWAPI_new(table_ptr, ctrl_index)) {
+ return NULL;
+ }
+
+ /*
+ * get it
+ */
+ eptr = ROWAPI_find(table_ptr, ctrl_index);
+ if (!eptr) /* it is unbelievable, but ... :( */
+ return NULL;
+ }
+
+ eptr->new_status = eptr->status;
+
+ eptr->tmp = AGMALLOC(body_size);
+ if (!eptr->tmp) {
+ if (eptr->only_just_created)
+ rowapi_delete(eptr);
+ return NULL;
+ }
+
+ memcpy(eptr->tmp, eptr->body, body_size);
+ if (table_ptr->ClbkClone)
+ table_ptr->ClbkClone(eptr);
+
+ if (eptr->new_owner)
+ AGFREE(eptr->new_owner);
+ return eptr->tmp;
+}
+
+RMON_ENTRY_T *
+ROWAPI_first(TABLE_DEFINTION_T * table_ptr)
+{
+ return table_ptr->first;
+}
+
+/*
+ * returns an entry with the smallest index
+ * which index > prev_index
+ */
+RMON_ENTRY_T *
+ROWAPI_next(TABLE_DEFINTION_T * table_ptr, u_long prev_index)
+{
+ register RMON_ENTRY_T *eptr;
+
+ for (eptr = table_ptr->first; eptr; eptr = eptr->next)
+ if (eptr->ctrl_index > prev_index)
+ return eptr;
+
+ return NULL;
+}
+
+RMON_ENTRY_T *
+ROWAPI_find(TABLE_DEFINTION_T * table_ptr, u_long ctrl_index)
+{
+ register RMON_ENTRY_T *eptr;
+
+ for (eptr = table_ptr->first; eptr; eptr = eptr->next) {
+ if (eptr->ctrl_index == ctrl_index)
+ return eptr;
+ if (eptr->ctrl_index > ctrl_index)
+ break;
+ }
+
+ return NULL;
+}
+
+int
+ROWAPI_action_check(TABLE_DEFINTION_T * table_ptr, u_long ctrl_index)
+{
+ register RMON_ENTRY_T *eptr;
+
+ eptr = ROWAPI_find(table_ptr, ctrl_index);
+ if (!eptr) {
+ ag_trace("Smth wrong ?");
+ return SNMP_ERR_GENERR;
+ }
+
+ /*
+ * test owner string
+ */
+ if (RMON1_ENTRY_UNDER_CREATION != eptr->status) {
+ /*
+ * Only the same value is allowed
+ */
+ if (eptr->new_owner &&
+ (!eptr->owner
+ || strncmp(eptr->new_owner, eptr->owner, MAX_OWNERSTRING))) {
+ ag_trace("invalid owner string in ROWAPI_action_check");
+ ag_trace("eptr->new_owner=%p eptr->owner=%p", eptr->new_owner,
+ eptr->owner);
+ return SNMP_ERR_BADVALUE;
+ }
+ }
+
+ switch (eptr->new_status) { /* this status we want to set */
+ case RMON1_ENTRY_CREATE_REQUEST:
+ if (RMON1_ENTRY_UNDER_CREATION != eptr->status)
+ return SNMP_ERR_BADVALUE;
+ break;
+ case RMON1_ENTRY_INVALID:
+ break;
+ case RMON1_ENTRY_VALID:
+ if (RMON1_ENTRY_VALID == eptr->status) {
+ break; /* nothing to do */
+ }
+ if (RMON1_ENTRY_UNDER_CREATION != eptr->status) {
+ ag_trace("Validate %s: entry %ld has wrong status %d",
+ table_ptr->name, (long) ctrl_index,
+ (int) eptr->status);
+ return SNMP_ERR_BADVALUE;
+ }
+
+ /*
+ * Our MIB understanding extension: we permit to set
+ * VALID when entry doesn't exit, in this case PDU has to have
+ * the nessessary & valid set of non-default values
+ */
+ if (table_ptr->ClbkValidate) {
+ return table_ptr->ClbkValidate(eptr);
+ }
+ break;
+ case RMON1_ENTRY_UNDER_CREATION:
+ /*
+ * Our MIB understanding extension: we permit to travel from
+ * VALID to 'UNDER_CREATION' state
+ */
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+ROWAPI_commit(TABLE_DEFINTION_T * table_ptr, u_long ctrl_index)
+{
+ register RMON_ENTRY_T *eptr;
+
+ eptr = ROWAPI_find(table_ptr, ctrl_index);
+ if (!eptr) {
+ ag_trace("Smth wrong ?");
+ return SNMP_ERR_GENERR;
+ }
+
+ eptr->only_just_created = 0;
+
+ switch (eptr->new_status) { /* this status we want to set */
+ case RMON1_ENTRY_CREATE_REQUEST: /* copy tmp => eprt */
+ if (eptr->new_owner) {
+ if (eptr->owner)
+ AGFREE(eptr->owner);
+ eptr->owner = AGSTRDUP(eptr->new_owner);
+ }
+
+ if (table_ptr->ClbkCopy && eptr->tmp)
+ table_ptr->ClbkCopy(eptr);
+ break;
+ case RMON1_ENTRY_INVALID:
+ ROWAPI_delete_clone(table_ptr, ctrl_index);
+ rowapi_delete(eptr);
+#if 0 /* for debug */
+ dbg_f_AG_MEM_REPORT();
+#endif
+ break;
+ case RMON1_ENTRY_VALID: /* copy tmp => eprt and activate */
+ /*
+ * Our MIB understanding extension: we permit to set
+ * VALID when entry doesn't exit, in this case PDU has to have
+ * the nessessary & valid set of non-default values
+ */
+ if (eptr->new_owner) {
+ if (eptr->owner)
+ AGFREE(eptr->owner);
+ eptr->owner = AGSTRDUP(eptr->new_owner);
+ }
+ if (table_ptr->ClbkCopy && eptr->tmp)
+ table_ptr->ClbkCopy(eptr);
+ if (RMON1_ENTRY_VALID != eptr->status) {
+ rowapi_activate(table_ptr, eptr);
+ }
+ break;
+ case RMON1_ENTRY_UNDER_CREATION: /* deactivate (if need) and copy tmp => eprt */
+ /*
+ * Our MIB understanding extension: we permit to travel from
+ * VALID to 'UNDER_CREATION' state
+ */
+ rowapi_deactivate(table_ptr, eptr);
+ if (eptr->new_owner) {
+ if (eptr->owner)
+ AGFREE(eptr->owner);
+ eptr->owner = AGSTRDUP(eptr->new_owner);
+ }
+ if (table_ptr->ClbkCopy && eptr->tmp)
+ table_ptr->ClbkCopy(eptr);
+ break;
+ }
+
+ ROWAPI_delete_clone(table_ptr, ctrl_index);
+ return SNMP_ERR_NOERROR;
+}
+
+RMON_ENTRY_T *
+ROWAPI_header_ControlEntry(struct variable * vp, oid * name,
+ size_t * length, int exact,
+ size_t * var_len,
+ TABLE_DEFINTION_T * table_ptr,
+ void *entry_ptr, size_t entry_size)
+{
+ long ctrl_index;
+ RMON_ENTRY_T *hdr = NULL;
+
+ if (0 != AGUTIL_advance_index_name(vp, name, length, exact)) {
+ ag_trace("cannot advance_index_name");
+ return NULL;
+ }
+
+ ctrl_index = vp->namelen >= *length ? 0 : name[vp->namelen];
+
+ if (exact) {
+ if (ctrl_index)
+ hdr = ROWAPI_find(table_ptr, ctrl_index);
+ } else {
+ if (ctrl_index)
+ hdr = ROWAPI_next(table_ptr, ctrl_index);
+ else
+ hdr = ROWAPI_first(table_ptr);
+
+ if (hdr) { /* set new index */
+ name[vp->namelen] = hdr->ctrl_index;
+ *length = vp->namelen + 1;
+ }
+ }
+
+ if (hdr)
+ memcpy(entry_ptr, hdr->body, entry_size);
+ return hdr;
+}
+
+int
+ROWAPI_do_another_action(oid * name, int tbl_first_index_begin,
+ int action, int *prev_action,
+ TABLE_DEFINTION_T * table_ptr, size_t entry_size)
+{
+ long long_temp;
+ RMON_ENTRY_T *tmp;
+
+ if (action == *prev_action)
+ return SNMP_ERR_NOERROR; /* I want to process it only once ! */
+ *prev_action = action;
+
+ long_temp = name[tbl_first_index_begin];
+
+ switch (action) {
+ case RESERVE1:
+ tmp = ROWAPI_get_clone(table_ptr, long_temp, entry_size);
+ if (!tmp) {
+ ag_trace("RESERVE1: cannot get clone\n");
+ return SNMP_ERR_TOOBIG;
+ }
+ break;
+
+ case FREE: /* if RESERVEx failed: release any resources that have been allocated */
+ case UNDO: /* if ACTION failed: release any resources that have been allocated */
+ ROWAPI_delete_clone(table_ptr, long_temp);
+ break;
+
+ case ACTION:
+ long_temp = ROWAPI_action_check(table_ptr, long_temp);
+ if (0 != long_temp)
+ return long_temp;
+ break;
+
+ case COMMIT:
+ long_temp = ROWAPI_commit(table_ptr, long_temp);
+ if (0 != long_temp) /* it MUST NOT be */
+ return long_temp;
+ break;
+ default:
+ ag_trace("Unknown action %d", (int) action);
+ return SNMP_ERR_GENERR;
+ } /* of switch by actions */
+
+ return SNMP_ERR_NOERROR;
+}
+
+/*
+ * data tables API section
+ */
+
+int
+ROWDATAAPI_init(SCROLLER_T * scrlr,
+ u_long data_requested,
+ u_long max_number_of_entries,
+ size_t data_size,
+ int (*data_destructor) (struct data_scroller *, void *))
+{
+ scrlr->data_granted = 0;
+ scrlr->data_created = 0;
+ scrlr->data_total_number = 0;
+ scrlr->first_data_ptr =
+ scrlr->last_data_ptr = scrlr->current_data_ptr = NULL;
+
+ scrlr->max_number_of_entries = max_number_of_entries;
+ scrlr->data_size = data_size;
+
+ scrlr->data_destructor = data_destructor;
+
+ ROWDATAAPI_set_size(scrlr, data_requested, 0);
+
+ return 0;
+}
+
+static int
+delete_data_entry(SCROLLER_T * scrlr, void *delete_me)
+{
+ NEXTED_PTR_T *data_ptr = delete_me;
+ register NEXTED_PTR_T *tmp;
+
+ if (data_ptr == scrlr->first_data_ptr) {
+ scrlr->first_data_ptr = data_ptr->next;
+ if (data_ptr == scrlr->last_data_ptr)
+ scrlr->last_data_ptr = NULL;
+ } else { /* not first */
+ for (tmp = scrlr->first_data_ptr; tmp; tmp = tmp->next) {
+ if (tmp->next == data_ptr) {
+ if (data_ptr == scrlr->last_data_ptr)
+ scrlr->last_data_ptr = tmp;
+ tmp->next = data_ptr->next;
+ break;
+ }
+ } /* for */
+ } /* not first */
+
+ if (data_ptr == scrlr->current_data_ptr)
+ scrlr->current_data_ptr = data_ptr->next;
+
+ if (scrlr->data_destructor)
+ scrlr->data_destructor(scrlr, data_ptr);
+ AGFREE(data_ptr);
+ scrlr->data_created--;
+ scrlr->data_stored--;
+
+ return 0;
+}
+
+static void
+realloc_number_of_data(SCROLLER_T * scrlr, long dlong)
+{
+ void *bptr; /* DATA_ENTRY_T */
+ NEXTED_PTR_T *prev = NULL;
+ void *first = NULL;
+
+ if (dlong > 0) {
+ for (; dlong; dlong--, prev = bptr, scrlr->data_created++) {
+ bptr = AGMALLOC(scrlr->data_size);
+ if (!bptr) {
+ ag_trace("Err: no memory for data");
+ break;
+ }
+ memset(bptr, 0, scrlr->data_size);
+ if (prev)
+ prev->next = bptr;
+ else
+ first = bptr;
+ } /* of loop by malloc bucket */
+
+ if (!scrlr->current_data_ptr)
+ scrlr->current_data_ptr = first;
+ if (scrlr->last_data_ptr) {
+ scrlr->last_data_ptr->next = first;
+ } else
+ scrlr->first_data_ptr = first;
+
+ scrlr->last_data_ptr = bptr;
+
+ } else {
+ for (; dlong && scrlr->data_created > 0; dlong++) {
+ if (scrlr->current_data_ptr)
+ delete_data_entry(scrlr, scrlr->current_data_ptr);
+ else
+ delete_data_entry(scrlr, scrlr->first_data_ptr);
+ }
+ }
+}
+
+void
+ROWDATAAPI_set_size(SCROLLER_T * scrlr,
+ u_long data_requested, u_char do_allocation)
+{
+ long dlong;
+
+ scrlr->data_requested = data_requested;
+ scrlr->data_granted = (data_requested < scrlr->max_number_of_entries) ?
+ data_requested : scrlr->max_number_of_entries;
+ if (do_allocation) {
+ dlong = (long) scrlr->data_granted - (long) scrlr->data_created;
+ realloc_number_of_data(scrlr, dlong);
+ }
+}
+
+void
+ROWDATAAPI_descructor(SCROLLER_T * scrlr)
+{
+ register NEXTED_PTR_T *bptr;
+ register void *next;
+
+ for (bptr = scrlr->first_data_ptr; bptr; bptr = next) {
+ next = bptr->next;
+ if (scrlr->data_destructor)
+ scrlr->data_destructor(scrlr, bptr);
+ AGFREE(bptr);
+ }
+ scrlr->data_created = 0;
+ scrlr->data_granted = 0;
+ scrlr->first_data_ptr =
+ scrlr->last_data_ptr = scrlr->current_data_ptr = NULL;
+}
+
+void *
+ROWDATAAPI_locate_new_data(SCROLLER_T * scrlr)
+{
+ register NEXTED_PTR_T *bptr;
+
+ if (!scrlr->current_data_ptr) { /* there was wrap */
+ bptr = scrlr->first_data_ptr;
+ if (!bptr) {
+ ag_trace("Err: SCROLLER_T:locate_new_data: internal error :(");
+ return NULL;
+ }
+ scrlr->first_data_ptr = bptr->next;
+ scrlr->last_data_ptr->next = bptr;
+ scrlr->last_data_ptr = (NEXTED_PTR_T *) bptr;
+ bptr->next = 0;
+ } else {
+ bptr = scrlr->current_data_ptr;
+ scrlr->current_data_ptr = bptr->next;
+ ++scrlr->data_stored;
+ }
+
+ scrlr->data_total_number++;
+
+ return bptr;
+}
+
+u_long
+ROWDATAAPI_get_total_number(SCROLLER_T * scrlr)
+{
+ return scrlr->data_total_number;
+}
+
+RMON_ENTRY_T *
+ROWDATAAPI_header_DataEntry(struct variable * vp, oid * name,
+ size_t * length, int exact,
+ size_t * var_len,
+ TABLE_DEFINTION_T * table_ptr,
+ SCROLLER_T * (*extract_scroller) (void *body),
+ size_t data_size, void *entry_ptr)
+{
+ long ctrl_indx, data_index;
+ RMON_ENTRY_T *hdr = NULL;
+ SCROLLER_T *scrlr;
+ NEXTED_PTR_T *bptr = NULL;
+ register u_long iii;
+
+ if (0 != AGUTIL_advance_index_name(vp, name, length, exact)) {
+ ag_trace("cannot advance_index_name");
+ return NULL;
+ }
+
+ ctrl_indx = vp->namelen >= *length ? 0 : name[vp->namelen];
+ if (ctrl_indx)
+ data_index =
+ ((int)(vp->namelen + 1) >= (int)*length) ? 0 : name[vp->namelen + 1];
+ else
+ data_index = 0;
+
+ if (exact) {
+ if (ctrl_indx && data_index) {
+ hdr = ROWAPI_find(table_ptr, ctrl_indx);
+ if (hdr) {
+ scrlr = extract_scroller(hdr->body);
+ bptr = scrlr->first_data_ptr;
+ for (iii = 0; iii < scrlr->data_stored && bptr;
+ iii++, bptr = bptr->next) {
+ if ((long)bptr->data_index == data_index)
+ break;
+ }
+ if (!bptr)
+ hdr = NULL;
+ }
+ }
+ } else {
+ if (ctrl_indx)
+ hdr = ROWAPI_find(table_ptr, ctrl_indx);
+ else
+ hdr = ROWAPI_first(table_ptr);
+
+ if (hdr) {
+ scrlr = extract_scroller(hdr->body);
+ /*
+ * ag_trace ("get next after (%d %d)", (int) ctrl_indx, (int) data_index);
+ */
+ bptr = scrlr->first_data_ptr;
+ for (iii = 0; iii < scrlr->data_stored && bptr;
+ iii++, bptr = bptr->next) {
+ if (bptr->data_index && (long)bptr->data_index > data_index)
+ break;
+ }
+
+ if (bptr && (long)bptr->data_index <= data_index)
+ bptr = NULL;
+
+ if (!bptr) { /* travel to next row */
+ /*
+ * ag_trace ("Dbg: travel to next row");
+ */
+ for (hdr = hdr->next; hdr; hdr = hdr->next) {
+ if (RMON1_ENTRY_VALID != hdr->status)
+ continue;
+
+ scrlr = extract_scroller(hdr->body);
+ if (scrlr->data_stored <= 0)
+ continue;
+ for (bptr = scrlr->first_data_ptr; bptr;
+ bptr = bptr->next) {
+ if (bptr->data_index)
+ break;
+ }
+
+ if (bptr)
+ break;
+ }
+ }
+ if (bptr) { /* set new index */
+ /*
+ * ag_trace ("Dbg: So (%d %d)", (int) hdr->index, (int) bptr->data_index);
+ */
+ name[vp->namelen] = hdr->ctrl_index;
+ name[vp->namelen + 1] = bptr->data_index;
+ *length = vp->namelen + 2;
+ } else
+ hdr = NULL;
+ }
+ }
+
+ if (hdr)
+ memcpy(entry_ptr, bptr, data_size);
+ return hdr;
+}
+
+void
+init_rows(void)
+{
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/rows.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/rows.h
new file mode 100644
index 0000000000..a099e6be67
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/rows.h
@@ -0,0 +1,26 @@
+/**************************************************************
+ * Copyright (C) 2001 Alex Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#ifndef _rows_h_included__
+#define _rows_h_included__
+
+void init_rows(void);
+
+#endif /* _rows_h_included__ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/statistics.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/statistics.c
new file mode 100644
index 0000000000..687a43c79f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/statistics.c
@@ -0,0 +1,548 @@
+/**************************************************************
+ * Copyright (C) 2001 Tali Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * TALI ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STDLIB
+#include <stdlib.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "util_funcs.h"
+#include "statistics.h"
+ /*
+ * Implementation headers
+ */
+#include "agutil_api.h"
+#include "row_api.h"
+ /*
+ * File scope definitions section
+ */
+ /*
+ * from MIB compilation
+ */
+#define MIB_DESCR "EthStat"
+#define etherStatsEntryFirstIndexBegin 11
+#define IDetherStatsDroppedFrames 1
+#define IDetherStatsCreateTime 2
+#define IDetherStatsIndex 3
+#define IDetherStatsDataSource 4
+#define IDetherStatsDropEvents 5
+#define IDetherStatsOctets 6
+#define IDetherStatsPkts 7
+#define IDetherStatsBroadcastPkts 8
+#define IDetherStatsMulticastPkts 9
+#define IDetherStatsCRCAlignErrors 10
+#define IDetherStatsUndersizePkts 11
+#define IDetherStatsOversizePkts 12
+#define IDetherStatsFragments 13
+#define IDetherStatsJabbers 14
+#define IDetherStatsCollisions 15
+#define IDetherStatsPkts64Octets 16
+#define IDetherStatsPkts65to127Octets 17
+#define IDetherStatsPkts128to255Octets 18
+#define IDetherStatsPkts256to511Octets 19
+#define IDetherStatsPkts512to1023Octets 20
+#define IDetherStatsPkts1024to1518Octets 21
+#define IDetherStatsOwner 22
+#define IDetherStatsStatus 23
+#define Leaf_etherStatsDataSource 2
+#define Leaf_etherStatsOwner 20
+#define Leaf_etherStatsStatus 21
+#define MIN_etherStatsIndex 1
+#define MAX_etherStatsIndex 65535
+ typedef struct {
+ VAR_OID_T
+ data_source;
+ u_long
+ etherStatsCreateTime;
+ ETH_STATS_T
+ eth;
+ } CRTL_ENTRY_T;
+
+/*
+ * Main section
+ */
+
+ static TABLE_DEFINTION_T
+ StatCtrlTable;
+ static TABLE_DEFINTION_T *
+ table_ptr = &
+ StatCtrlTable;
+
+/*
+ * Control Table RowApi Callbacks
+ */
+
+ int
+ stat_Create(RMON_ENTRY_T * eptr)
+{ /* create the body: alloc it and set defaults */
+ CRTL_ENTRY_T *body;
+ static VAR_OID_T data_src_if_index_1 =
+ { 11, {1, 3, 6, 1, 2, 1, 2, 2, 1, 1, 1} };
+
+ eptr->body = AGMALLOC(sizeof(CRTL_ENTRY_T));
+ if (!eptr->body)
+ return -3;
+ body = (CRTL_ENTRY_T *) eptr->body;
+
+ /*
+ * set defaults
+ */
+ memcpy(&body->data_source, &data_src_if_index_1, sizeof(VAR_OID_T));
+ body->data_source.objid[body->data_source.length - 1] =
+ eptr->ctrl_index;
+ eptr->owner = AGSTRDUP("Startup Mgmt");
+ memset(&body->eth, 0, sizeof(ETH_STATS_T));
+
+ return 0;
+}
+
+int
+stat_Validate(RMON_ENTRY_T * eptr)
+{
+ /*
+ * T.B.D. (system dependent) check valid inteface in body->data_source;
+ */
+
+ return 0;
+}
+
+int
+stat_Activate(RMON_ENTRY_T * eptr)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+
+ body->etherStatsCreateTime = AGUTIL_sys_up_time();
+
+ return 0;
+}
+
+int
+stat_Copy(RMON_ENTRY_T * eptr)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+ CRTL_ENTRY_T *clone = (CRTL_ENTRY_T *) eptr->tmp;
+
+ if (snmp_oid_compare
+ (clone->data_source.objid, clone->data_source.length,
+ body->data_source.objid, body->data_source.length)) {
+ memcpy(&body->data_source, &clone->data_source, sizeof(VAR_OID_T));
+ }
+
+ return 0;
+}
+
+int
+stat_Deactivate(RMON_ENTRY_T * eptr)
+{
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+ memset(&body->eth, 0, sizeof(ETH_STATS_T));
+ return 0;
+}
+
+
+/***************************************************
+ * Function:var_etherStats2Entry
+ * Purpose: Handles the request for etherStats2Entry variable instances
+ ***************************************************/
+u_char *
+var_etherStats2Entry(struct variable * vp, oid * name, size_t * length,
+ int exact, size_t * var_len,
+ WriteMethod ** write_method)
+{
+ static long long_return;
+ static CRTL_ENTRY_T theEntry;
+ RMON_ENTRY_T *hdr;
+
+ *write_method = NULL;
+
+ hdr = ROWAPI_header_ControlEntry(vp, name, length, exact, var_len,
+ table_ptr,
+ &theEntry, sizeof(CRTL_ENTRY_T));
+ if (!hdr)
+ return NULL;
+
+ *var_len = sizeof(long); /* default */
+
+ switch (vp->magic) {
+ case IDetherStatsDroppedFrames:
+ long_return = 0;
+ return (u_char *) & long_return;
+ case IDetherStatsCreateTime:
+ long_return = theEntry.etherStatsCreateTime;
+ return (u_char *) & long_return;
+ default:
+ ag_trace("%s: unknown vp->magic=%d", table_ptr->name,
+ (int) vp->magic);
+ ERROR_MSG("");
+ }; /* of switch by 'vp->magic' */
+
+ return NULL;
+}
+
+
+/***************************************************
+ * Function:write_etherStatsEntry
+ ***************************************************/
+static int
+write_etherStatsEntry(int action, u_char * var_val, u_char var_val_type,
+ size_t var_val_len, u_char * statP,
+ oid * name, size_t name_len)
+{
+ long long_temp;
+ int leaf_id, snmp_status;
+ static int prev_action = COMMIT;
+ RMON_ENTRY_T *hdr;
+ CRTL_ENTRY_T *cloned_body;
+ CRTL_ENTRY_T *body;
+
+ switch (action) {
+ case RESERVE1:
+ case FREE:
+ case UNDO:
+ case ACTION:
+ case COMMIT:
+ default:
+ snmp_status =
+ ROWAPI_do_another_action(name, etherStatsEntryFirstIndexBegin,
+ action, &prev_action, table_ptr,
+ sizeof(CRTL_ENTRY_T));
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ ag_trace("failed action %d with %d", action, snmp_status);
+ }
+ break;
+
+ case RESERVE2:
+ /*
+ * get values from PDU, check them and save them in the cloned entry
+ */
+ long_temp = name[etherStatsEntryFirstIndexBegin];
+ leaf_id = (int) name[etherStatsEntryFirstIndexBegin - 1];
+ hdr = ROWAPI_find(table_ptr, long_temp); /* it MUST be OK */
+ cloned_body = (CRTL_ENTRY_T *) hdr->tmp;
+ body = (CRTL_ENTRY_T *) hdr->body;
+ switch (leaf_id) {
+ case Leaf_etherStatsDataSource:
+ snmp_status = AGUTIL_get_oid_value(var_val, var_val_type,
+ var_val_len,
+ &cloned_body->data_source);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ if (RMON1_ENTRY_UNDER_CREATION != hdr->status &&
+ snmp_oid_compare(cloned_body->data_source.objid,
+ cloned_body->data_source.length,
+ body->data_source.objid,
+ body->data_source.length))
+ return SNMP_ERR_BADVALUE;
+ break;
+
+ break;
+ case Leaf_etherStatsOwner:
+ if (hdr->new_owner)
+ AGFREE(hdr->new_owner);
+ hdr->new_owner = AGMALLOC(MAX_OWNERSTRING);;
+ if (!hdr->new_owner)
+ return SNMP_ERR_TOOBIG;
+ snmp_status = AGUTIL_get_string_value(var_val, var_val_type,
+ var_val_len,
+ MAX_OWNERSTRING,
+ 1, NULL, hdr->new_owner);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ return snmp_status;
+ }
+ break;
+ case Leaf_etherStatsStatus:
+ snmp_status = AGUTIL_get_int_value(var_val, var_val_type,
+ var_val_len,
+ RMON1_ENTRY_VALID,
+ RMON1_ENTRY_INVALID,
+ &long_temp);
+ if (SNMP_ERR_NOERROR != snmp_status) {
+ ag_trace("cannot browse etherStatsStatus");
+ return snmp_status;
+ }
+ hdr->new_status = long_temp;
+ break;
+ break;
+ default:
+ ag_trace("%s:unknown leaf_id=%d\n", table_ptr->name,
+ (int) leaf_id);
+ return SNMP_ERR_NOSUCHNAME;
+ } /* of switch by 'leaf_id' */
+ break;
+ } /* of switch by 'action' */
+
+ prev_action = action;
+ return SNMP_ERR_NOERROR;
+}
+
+/***************************************************
+ * Function:var_etherStatsEntry
+ * Purpose: Handles the request for etherStatsEntry variable instances
+ ***************************************************/
+u_char *
+var_etherStatsEntry(struct variable * vp, oid * name, size_t * length,
+ int exact, size_t * var_len,
+ WriteMethod ** write_method)
+{
+ static long long_return;
+ static CRTL_ENTRY_T theEntry;
+ RMON_ENTRY_T *hdr;
+
+ *write_method = write_etherStatsEntry;
+ hdr = ROWAPI_header_ControlEntry(vp, name, length, exact, var_len,
+ table_ptr,
+ &theEntry, sizeof(CRTL_ENTRY_T));
+ if (!hdr)
+ return NULL;
+
+ if (RMON1_ENTRY_VALID == hdr->status)
+ SYSTEM_get_eth_statistics(&theEntry.data_source, &theEntry.eth);
+
+ *var_len = sizeof(long);
+
+ switch (vp->magic) {
+ case IDetherStatsIndex:
+ long_return = hdr->ctrl_index;
+ return (u_char *) & long_return;
+ case IDetherStatsDataSource:
+ *var_len = sizeof(oid) * theEntry.data_source.length;
+ return (unsigned char *) theEntry.data_source.objid;
+ case IDetherStatsDropEvents:
+ long_return = 0; /* theEntry.eth.etherStatsDropEvents; */
+ return (u_char *) & long_return;
+ case IDetherStatsOctets:
+ long_return = theEntry.eth.octets;
+ return (u_char *) & long_return;
+ case IDetherStatsPkts:
+ long_return = theEntry.eth.packets;
+ return (u_char *) & long_return;
+ case IDetherStatsBroadcastPkts:
+ long_return = theEntry.eth.bcast_pkts;
+ return (u_char *) & long_return;
+ case IDetherStatsMulticastPkts:
+ long_return = theEntry.eth.mcast_pkts;
+ return (u_char *) & long_return;
+ case IDetherStatsCRCAlignErrors:
+ long_return = theEntry.eth.crc_align;
+ return (u_char *) & long_return;
+ case IDetherStatsUndersizePkts:
+ long_return = theEntry.eth.undersize;
+ return (u_char *) & long_return;
+ case IDetherStatsOversizePkts:
+ long_return = theEntry.eth.oversize;
+ return (u_char *) & long_return;
+ case IDetherStatsFragments:
+ long_return = theEntry.eth.fragments;
+ return (u_char *) & long_return;
+ case IDetherStatsJabbers:
+ long_return = theEntry.eth.jabbers;
+ return (u_char *) & long_return;
+ case IDetherStatsCollisions:
+ long_return = theEntry.eth.collisions;
+ return (u_char *) & long_return;
+ case IDetherStatsPkts64Octets:
+ long_return = theEntry.eth.pkts_64;
+ return (u_char *) & long_return;
+ case IDetherStatsPkts65to127Octets:
+ long_return = theEntry.eth.pkts_65_127;
+ return (u_char *) & long_return;
+ case IDetherStatsPkts128to255Octets:
+ long_return = theEntry.eth.pkts_128_255;
+ return (u_char *) & long_return;
+ case IDetherStatsPkts256to511Octets:
+ long_return = theEntry.eth.pkts_256_511;
+ return (u_char *) & long_return;
+ case IDetherStatsPkts512to1023Octets:
+ long_return = theEntry.eth.pkts_512_1023;
+ return (u_char *) & long_return;
+ case IDetherStatsPkts1024to1518Octets:
+ long_return = theEntry.eth.pkts_1024_1518;
+ return (u_char *) & long_return;
+ case IDetherStatsOwner:
+ if (hdr->owner) {
+ *var_len = strlen(hdr->owner);
+ return (unsigned char *) hdr->owner;
+ } else {
+ *var_len = 0;
+ return (unsigned char *) "";
+ }
+ case IDetherStatsStatus:
+ long_return = hdr->status;
+ return (u_char *) & long_return;
+ default:
+ ERROR_MSG("");
+ }; /* of switch by 'vp->magic' */
+
+ return NULL;
+}
+
+#if 1 /* debug, but may be used for init. TBD: may be token snmpd.conf ? */
+int
+add_statistics_entry(int ctrl_index, int ifIndex)
+{
+ int ierr;
+
+ ierr = ROWAPI_new(table_ptr, ctrl_index);
+ switch (ierr) {
+ case -1:
+ ag_trace("max. number exedes\n");
+ break;
+ case -2:
+ ag_trace("malloc failed");
+ break;
+ case -3:
+ ag_trace("ClbkCreate failed");
+ break;
+ case 0:
+ break;
+ default:
+ ag_trace("Unknown code %d", ierr);
+ break;
+ }
+
+ if (!ierr) {
+ register RMON_ENTRY_T *eptr = ROWAPI_find(table_ptr, ctrl_index);
+ if (!eptr) {
+ ag_trace("cannot find it");
+ ierr = -4;
+ } else {
+ CRTL_ENTRY_T *body = (CRTL_ENTRY_T *) eptr->body;
+
+ body->data_source.objid[body->data_source.length - 1] =
+ ifIndex;
+
+ eptr->new_status = RMON1_ENTRY_VALID;
+ ierr = ROWAPI_commit(table_ptr, ctrl_index);
+ if (ierr) {
+ ag_trace("ROWAPI_commit returned %d", ierr);
+ }
+ }
+ }
+
+ return ierr;
+}
+#endif
+
+/***************************************************
+ * define Variables callbacks
+ ***************************************************/
+oid oidstatisticsVariablesOid[] = { 1, 3, 6, 1, 2, 1, 16, 1 };
+
+struct variable7 oidstatisticsVariables[] = {
+ {IDetherStatsIndex, ASN_INTEGER, RONLY, var_etherStatsEntry, 3,
+ {1, 1, 1}},
+ {IDetherStatsDataSource, ASN_OBJECT_ID, RWRITE, var_etherStatsEntry, 3,
+ {1, 1, 2}},
+ {IDetherStatsDropEvents, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,
+ {1, 1, 3}},
+ {IDetherStatsOctets, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,
+ {1, 1, 4}},
+ {IDetherStatsPkts, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,
+ {1, 1, 5}},
+ {IDetherStatsBroadcastPkts, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,
+ {1, 1, 6}},
+ {IDetherStatsMulticastPkts, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,
+ {1, 1, 7}},
+ {IDetherStatsCRCAlignErrors, ASN_COUNTER, RONLY, var_etherStatsEntry,
+ 3, {1, 1, 8}},
+ {IDetherStatsUndersizePkts, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,
+ {1, 1, 9}},
+ {IDetherStatsOversizePkts, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,
+ {1, 1, 10}},
+ {IDetherStatsFragments, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,
+ {1, 1, 11}},
+ {IDetherStatsJabbers, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,
+ {1, 1, 12}},
+ {IDetherStatsCollisions, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,
+ {1, 1, 13}},
+ {IDetherStatsPkts64Octets, ASN_COUNTER, RONLY, var_etherStatsEntry, 3,
+ {1, 1, 14}},
+ {IDetherStatsPkts65to127Octets, ASN_COUNTER, RONLY,
+ var_etherStatsEntry, 3, {1, 1, 15}},
+ {IDetherStatsPkts128to255Octets, ASN_COUNTER, RONLY,
+ var_etherStatsEntry, 3, {1, 1, 16}},
+ {IDetherStatsPkts256to511Octets, ASN_COUNTER, RONLY,
+ var_etherStatsEntry, 3, {1, 1, 17}},
+ {IDetherStatsPkts512to1023Octets, ASN_COUNTER, RONLY,
+ var_etherStatsEntry, 3, {1, 1, 18}},
+ {IDetherStatsPkts1024to1518Octets, ASN_COUNTER, RONLY,
+ var_etherStatsEntry, 3, {1, 1, 19}},
+ {IDetherStatsOwner, ASN_OCTET_STR, RWRITE, var_etherStatsEntry, 3,
+ {1, 1, 20}},
+ {IDetherStatsStatus, ASN_INTEGER, RWRITE, var_etherStatsEntry, 3,
+ {1, 1, 21}},
+ {IDetherStatsDroppedFrames, ASN_COUNTER, RONLY, var_etherStats2Entry,
+ 3, {4, 1, 1}},
+ {IDetherStatsCreateTime, ASN_TIMETICKS, RONLY, var_etherStats2Entry, 3,
+ {4, 1, 2}},
+};
+
+/***************************************************
+ * Function:init_statistics
+ * Purpose: register statistics objects in the agent
+ ***************************************************/
+void
+init_statistics(void)
+{
+ REGISTER_MIB(MIB_DESCR, oidstatisticsVariables, variable7,
+ oidstatisticsVariablesOid);
+
+ ROWAPI_init_table(&StatCtrlTable, MIB_DESCR, 0, &stat_Create, NULL, /* &stat_Clone, */
+ NULL, /* &stat_Delete, */
+ &stat_Validate,
+ &stat_Activate, &stat_Deactivate, &stat_Copy);
+
+#if 0 /* debug */
+ {
+ int iii;
+ for (iii = 1; iii < 6; iii++) {
+ add_statistics_entry(iii, iii);
+ }
+
+ add_statistics_entry(10, 16);
+ add_statistics_entry(12, 11);
+ }
+#endif
+}
+
+/*
+ * end of file statistics.c
+ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/statistics.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/statistics.h
new file mode 100644
index 0000000000..8c6d91db64
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/statistics.h
@@ -0,0 +1,31 @@
+/**************************************************************
+ * Copyright (C) 2001 Tali Rozin, Optical Access
+ *
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * TALI ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ ******************************************************************/
+
+#ifndef _statistics_h_included__
+#define _statistics_h_included__
+
+config_require(util_funcs)
+ void init_statistics(void);
+
+#endif /* _statistics_h_included__ */
+
+/*
+ * end of file statistics.h
+ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/test_alarm.sh b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/test_alarm.sh
new file mode 100755
index 0000000000..b6046c7e5d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/test_alarm.sh
@@ -0,0 +1,82 @@
+:
+
+# Rmon Alarms/Events testing script
+# $Log$
+# Revision 5.0 2002/04/20 07:30:01 hardaker
+# cvs file version number change
+#
+# Revision 1.1 2001/05/09 19:36:13 slif
+# Include Alex Rozin's Rmon.
+#
+#
+
+#Only parameter: number of interface (ifIndex) to be tested.
+#Default: 1
+
+TSTIF=1
+COMPAR="-m ALL localhost public"
+
+if [ "X"${1} = "X" ] ; then
+ echo got default parameter : $TSTIF
+else
+ TSTIF=$1
+fi
+
+#testing parameters:
+ETHIND=3
+EVNIND=7
+ALRIND=2
+LOWLIMIT=4800
+HILIMIT =4900
+INTERVAL=3
+WAITTIME=17
+
+echo interface ifIndex.$TSTIF will be tested
+
+echo " "
+echo 1. Create etherStatsEntry
+snmpset $COMPAR \
+ etherStatsStatus.$ETHIND i 2 \
+ etherStatsDataSource.$ETHIND o interfaces.ifTable.ifEntry.ifIndex.$TSTIF
+snmpset $COMPAR etherStatsStatus.$ETHIND i 1
+snmpwalk $COMPAR statistics
+
+echo 2. Create event control entry
+snmpset $COMPAR \
+ eventStatus.$EVNIND i 1 \
+ eventDescription.$EVNIND s "Alarms" \
+ eventType.$EVNIND i 4 \
+ eventOwner.$EVNIND s "Alex"
+#snmpwalk $COMPAR eventTable
+
+echo 3. Create alarm entry
+snmpset $COMPAR \
+ alarmStatus.$ALRIND i 1 \
+ alarmInterval.$ALRIND i $INTERVAL \
+ alarmVariable.$ALRIND o rmon.statistics.etherStatsTable.etherStatsEntry.etherStatsPkts.$ETHIND \
+ alarmSampleType.$ALRIND i 2 \
+ alarmFallingThreshold.$ALRIND i $LOWLIMIT \
+ alarmRisingThreshold.$ALRIND i $HILIMIT \
+ alarmRisingEventIndex.$ALRIND i $EVNIND \
+ alarmFallingEventIndex.$ALRIND i $EVNIND
+snmpwalk $COMPAR alarm
+
+echo 4. Sleep $WAITTIME to collect log.
+echo This $WAITTIME seconds you may enjoy with Rmon traps.
+sleep $WAITTIME
+
+echo 5. Check log:
+snmpwalk $COMPAR logTable
+snmptable $COMPAR logTable
+snmpwalk $COMPAR eventTable
+
+echo 6. clean everything
+snmpset $COMPAR alarmStatus.$ALRIND i 4
+snmpset $COMPAR eventStatus.$EVNIND i 4
+snmpset $COMPAR etherStatsStatus.$ETHIND i 4
+snmpwalk $COMPAR rmon
+
+echo " "
+echo "Goodbye, I'm a gonner"
+echo " "
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/test_hist.sh b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/test_hist.sh
new file mode 100755
index 0000000000..52bdd884c4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/Rmon/test_hist.sh
@@ -0,0 +1,88 @@
+:
+# Rmon History testing script
+# $Log$
+# Revision 5.0 2002/04/20 07:30:01 hardaker
+# cvs file version number change
+#
+# Revision 1.1 2001/05/09 19:36:13 slif
+# Include Alex Rozin's Rmon.
+#
+#
+
+#Only parameter: number of interface (ifIndex) to be tested.
+#Default: 1
+
+TSTIF=1
+COMPAR="-m ALL localhost public"
+
+if [ "X"${1} = "X" ] ; then
+ echo got default parameter : $TSTIF
+else
+ TSTIF=$1
+fi
+
+echo interface ifIndex.$TSTIF will be tested
+
+echo " "
+echo 1. create control entry
+snmpset $COMPAR historyControlBucketsRequested.4 i 4 historyControlInterval.4 i 3 \
+historyControlDataSource.4 o interfaces.ifTable.ifEntry.ifIndex.$TSTIF \
+historyControlStatus.4 i 2
+
+snmpwalk $COMPAR historyControlTable
+echo " "
+echo 2. validate it
+snmpset $COMPAR historyControlStatus.4 i 1
+snmpwalk $COMPAR historyControlTable
+echo "Sleep 3, take it chance to get something"
+sleep 3
+snmpwalk $COMPAR etherHistoryTable
+echo "Sleep 6, take it chance to advance"
+sleep 6
+snmpwalk $COMPAR etherHistoryTable
+
+
+echo " "
+echo 3. change requested number of buckets
+snmpset $COMPAR historyControlBucketsRequested.4 i 2
+echo "Sleep 9, take it chance to get something"
+sleep 9
+snmpwalk $COMPAR etherHistoryTable
+
+echo " "
+echo 4. invalidate it
+snmpset $COMPAR historyControlStatus.4 i 4
+snmpwalk $COMPAR history
+
+
+echo " "
+echo 5. create and validate 2 control entries
+snmpset $COMPAR historyControlBucketsRequested.4 i 3 historyControlInterval.4 i 2 \
+historyControlDataSource.4 o interfaces.ifTable.ifEntry.ifIndex.$TSTIF \
+historyControlStatus.4 i 1
+snmpset $COMPAR historyControlBucketsRequested.2 i 2 historyControlInterval.2 i 4 \
+historyControlStatus.2 i 1
+snmptable $COMPAR historyControlTable
+echo "Sleep 12, take them chance to get something"
+sleep 12
+snmpwalk $COMPAR etherHistoryTable
+
+echo " "
+echo 6. create entry and let it to be aged
+snmpset $COMPAR historyControlStatus.3 i 2
+snmptable $COMPAR historyControlTable
+echo "Sleep 61, take it chance to be aged"
+sleep 61
+snmptable $COMPAR historyControlTable
+
+echo " "
+echo 7. clean everything
+snmpset $COMPAR historyControlStatus.2 i 4
+snmpset $COMPAR historyControlStatus.4 i 4
+snmpwalk $COMPAR history
+
+
+echo " "
+echo "Goodbye, I'm a gonner"
+echo " "
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/extend.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/extend.c
new file mode 100644
index 0000000000..9ec43baafc
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/extend.c
@@ -0,0 +1,1433 @@
+
+#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/agent/watcher.h>
+#include <net-snmp/agent/agent_callbacks.h>
+
+#include "agent/extend.h"
+#include "utilities/execute.h"
+#include "struct.h"
+
+#ifndef USING_UCD_SNMP_EXTENSIBLE_MODULE
+#include "util_funcs.h"
+#include "mibdefs.h"
+#define SHELLCOMMAND 3
+#endif
+
+oid ns_extend_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 1, 3, 2 };
+oid extend_count_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 1, 3, 2, 1 };
+oid extend_config_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 1, 3, 2, 2 };
+oid extend_out1_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 1, 3, 2, 3 };
+oid extend_out2_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 1, 3, 2, 4 };
+
+typedef struct extend_registration_block_s {
+ netsnmp_table_data *dinfo;
+ oid *root_oid;
+ size_t oid_len;
+ long num_entries;
+ netsnmp_extend *ehead;
+ netsnmp_handler_registration *reg[3];
+ struct extend_registration_block_s *next;
+} extend_registration_block;
+extend_registration_block *ereg_head = NULL;
+
+
+#ifndef USING_UCD_SNMP_EXTENSIBLE_MODULE
+typedef struct netsnmp_old_extend_s {
+ int idx;
+ netsnmp_extend *exec_entry;
+ netsnmp_extend *efix_entry;
+} netsnmp_old_extend;
+
+int num_compatability_entries = 0;
+int max_compatability_entries = 50;
+netsnmp_old_extend *compatability_entries;
+
+WriteMethod fixExec2Error;
+FindVarMethod var_extensible_old;
+oid old_extensible_variables_oid[] = { NETSNMP_UCDAVIS_MIB, NETSNMP_SHELLMIBNUM, 1 };
+struct variable2 old_extensible_variables[] = {
+ {MIBINDEX, ASN_INTEGER, RONLY, var_extensible_old, 1, {MIBINDEX}},
+ {ERRORNAME, ASN_OCTET_STR, RONLY, var_extensible_old, 1, {ERRORNAME}},
+ {SHELLCOMMAND, ASN_OCTET_STR, RONLY, var_extensible_old, 1, {SHELLCOMMAND}},
+ {ERRORFLAG, ASN_INTEGER, RONLY, var_extensible_old, 1, {ERRORFLAG}},
+ {ERRORMSG, ASN_OCTET_STR, RONLY, var_extensible_old, 1, {ERRORMSG}},
+ {ERRORFIX, ASN_INTEGER, RWRITE, var_extensible_old, 1, {ERRORFIX}},
+ {ERRORFIXCMD, ASN_OCTET_STR, RONLY, var_extensible_old, 1, {ERRORFIXCMD}}
+};
+#endif
+
+
+ /*************************
+ *
+ * Main initialisation routine
+ *
+ *************************/
+
+extend_registration_block *
+_find_extension_block( oid *name, size_t name_len )
+{
+ extend_registration_block *eptr;
+ size_t len;
+ for ( eptr=ereg_head; eptr; eptr=eptr->next ) {
+ len = SNMP_MIN(name_len, eptr->oid_len);
+ if (!snmp_oid_compare( name, len, eptr->root_oid, eptr->oid_len))
+ return eptr;
+ }
+ return NULL;
+}
+
+extend_registration_block *
+_register_extend( oid *base, size_t len )
+{
+ extend_registration_block *eptr;
+ oid oid_buf[MAX_OID_LEN];
+
+ netsnmp_table_data *dinfo;
+ netsnmp_table_registration_info *tinfo;
+ netsnmp_watcher_info *winfo;
+ netsnmp_handler_registration *reg;
+
+ for ( eptr=ereg_head; eptr; eptr=eptr->next ) {
+ if (!snmp_oid_compare( base, len, eptr->root_oid, eptr->oid_len))
+ return eptr;
+ }
+ if (!eptr) {
+ eptr = SNMP_MALLOC_TYPEDEF( extend_registration_block );
+ eptr->root_oid = snmp_duplicate_objid( base, len );
+ eptr->oid_len = len;
+ eptr->num_entries = 0;
+ eptr->ehead = NULL;
+ eptr->dinfo = netsnmp_create_table_data( "nsExtendTable" );
+ eptr->next = ereg_head;
+ ereg_head = eptr;
+ }
+
+ dinfo = eptr->dinfo;
+ memcpy( oid_buf, base, len*sizeof(oid) );
+
+ /*
+ * Register the configuration table
+ */
+ tinfo = SNMP_MALLOC_TYPEDEF( netsnmp_table_registration_info );
+ netsnmp_table_helper_add_indexes( tinfo, ASN_OCTET_STR, 0 );
+ tinfo->min_column = COLUMN_EXTCFG_FIRST_COLUMN;
+ tinfo->max_column = COLUMN_EXTCFG_LAST_COLUMN;
+ oid_buf[len] = 2;
+ reg = netsnmp_create_handler_registration(
+ "nsExtendConfigTable", handle_nsExtendConfigTable,
+ oid_buf, len+1, HANDLER_CAN_RWRITE);
+ netsnmp_register_table_data( reg, dinfo, tinfo );
+ eptr->reg[0] = reg;
+
+ /*
+ * Register the main output table
+ * using the same table_data handle.
+ * This is sufficient to link the two tables,
+ * and implement the AUGMENTS behaviour
+ */
+ tinfo = SNMP_MALLOC_TYPEDEF( netsnmp_table_registration_info );
+ netsnmp_table_helper_add_indexes( tinfo, ASN_OCTET_STR, 0 );
+ tinfo->min_column = COLUMN_EXTOUT1_FIRST_COLUMN;
+ tinfo->max_column = COLUMN_EXTOUT1_LAST_COLUMN;
+ oid_buf[len] = 3;
+ reg = netsnmp_create_handler_registration(
+ "nsExtendOut1Table", handle_nsExtendOutput1Table,
+ oid_buf, len+1, HANDLER_CAN_RONLY);
+ netsnmp_register_table_data( reg, dinfo, tinfo );
+ eptr->reg[1] = reg;
+
+ /*
+ * Register the multi-line output table
+ * using a simple table helper.
+ * This handles extracting the indexes from
+ * the request OID, but leaves most of
+ * the work to our handler routine.
+ * Still, it was nice while it lasted...
+ */
+ tinfo = SNMP_MALLOC_TYPEDEF( netsnmp_table_registration_info );
+ netsnmp_table_helper_add_indexes( tinfo, ASN_OCTET_STR, ASN_INTEGER, 0 );
+ tinfo->min_column = COLUMN_EXTOUT2_FIRST_COLUMN;
+ tinfo->max_column = COLUMN_EXTOUT2_LAST_COLUMN;
+ oid_buf[len] = 4;
+ reg = netsnmp_create_handler_registration(
+ "nsExtendOut2Table", handle_nsExtendOutput2Table,
+ oid_buf, len+1, HANDLER_CAN_RONLY);
+ netsnmp_register_table( reg, tinfo );
+ eptr->reg[2] = reg;
+
+ /*
+ * Register a watched scalar to keep track of the number of entries
+ */
+ oid_buf[len] = 1;
+ reg = netsnmp_create_handler_registration(
+ "nsExtendNumEntries", NULL,
+ oid_buf, len+1, HANDLER_CAN_RONLY);
+ winfo = netsnmp_create_watcher_info(
+ &(eptr->num_entries), sizeof(eptr->num_entries),
+ ASN_INTEGER, WATCHER_FIXED_SIZE);
+ netsnmp_register_watched_scalar( reg, winfo );
+
+ return eptr;
+}
+
+int
+extend_clear_callback(int majorID, int minorID,
+ void *serverarg, void *clientarg)
+{
+ extend_registration_block *eptr, *enext = NULL;
+
+ for ( eptr=ereg_head; eptr; eptr=enext ) {
+ enext=eptr->next;
+ netsnmp_unregister_handler( eptr->reg[0] );
+ netsnmp_unregister_handler( eptr->reg[1] );
+ netsnmp_unregister_handler( eptr->reg[2] );
+ SNMP_FREE(eptr);
+ }
+ ereg_head = NULL;
+ return 0;
+}
+
+void init_extend( void )
+{
+ snmpd_register_config_handler("extend", extend_parse_config, NULL, NULL);
+ snmpd_register_config_handler("extend-sh", extend_parse_config, NULL, NULL);
+ snmpd_register_config_handler("extendfix", extend_parse_config, NULL, NULL);
+ snmpd_register_config_handler("exec2", extend_parse_config, NULL, NULL);
+ snmpd_register_config_handler("sh2", extend_parse_config, NULL, NULL);
+ snmpd_register_config_handler("execFix2", extend_parse_config, NULL, NULL);
+ (void)_register_extend( ns_extend_oid, OID_LENGTH(ns_extend_oid));
+
+#ifndef USING_UCD_SNMP_EXTENSIBLE_MODULE
+ snmpd_register_config_handler("exec", extend_parse_config, NULL, NULL);
+ snmpd_register_config_handler("sh", extend_parse_config, NULL, NULL);
+ snmpd_register_config_handler("execFix", extend_parse_config, NULL, NULL);
+ compatability_entries = calloc( max_compatability_entries,
+ sizeof(netsnmp_old_extend));
+ REGISTER_MIB("ucd-extensible", old_extensible_variables,
+ variable2, old_extensible_variables_oid);
+#endif
+
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_PRE_UPDATE_CONFIG,
+ extend_clear_callback, NULL);
+}
+
+ /*************************
+ *
+ * Cached-data hooks
+ * see 'cache_handler' helper
+ *
+ *************************/
+
+int
+extend_load_cache(netsnmp_cache *cache, void *magic)
+{
+ int out_len = 1024*100;
+ char out_buf[ 1024*100 ];
+ int cmd_len = 255*2 + 2; /* 2 * DisplayStrings */
+ char cmd_buf[ 255*2 + 2 ];
+ int ret;
+ char *cp;
+ char *line_buf[ 1024 ];
+ netsnmp_extend *extension = (netsnmp_extend *)magic;
+
+ if (!magic)
+ return -1;
+ DEBUGMSGTL(( "nsExtendTable:cache", "load %s", extension->token ));
+ if ( extension->args )
+ snprintf( cmd_buf, cmd_len, "%s %s", extension->command, extension->args );
+ else
+ snprintf( cmd_buf, cmd_len, "%s", extension->command );
+ if ( extension->flags & NS_EXTEND_FLAGS_SHELL )
+ ret = run_shell_command( cmd_buf, extension->input, out_buf, &out_len);
+ else
+ ret = run_exec_command( cmd_buf, extension->input, out_buf, &out_len);
+ DEBUGMSG(( "nsExtendTable:cache", ": %s : %d\n", cmd_buf, ret));
+ if (ret >= 0) {
+ if (out_buf[ out_len-1 ] == '\n')
+ out_buf[ --out_len ] = '\0'; /* Stomp on trailing newline */
+ extension->output = strdup( out_buf );
+ extension->out_len = out_len;
+ /*
+ * Now we need to pick the output apart into separate lines.
+ * Start by counting how many lines we've got, and keeping
+ * track of where each line starts in a static buffer
+ */
+ extension->numlines = 1;
+ line_buf[ 0 ] = extension->output;
+ for (cp=extension->output; *cp; cp++) {
+ if (*cp == '\n') {
+ line_buf[ extension->numlines++ ] = cp+1;
+ }
+ }
+ if ( extension->numlines > 1 ) {
+ extension->lines = calloc( sizeof(char *), extension->numlines );
+ memcpy( extension->lines, line_buf,
+ sizeof(char *) * extension->numlines );
+ } else {
+ extension->lines = &extension->output;
+ }
+ }
+ extension->result = ret;
+ return ret;
+}
+
+void
+extend_free_cache(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_extend *extension = (netsnmp_extend *)magic;
+ if (!magic)
+ return;
+
+ DEBUGMSGTL(( "nsExtendTable:cache", "free %s\n", extension->token ));
+ if (extension->output) {
+ SNMP_FREE(extension->output);
+ extension->output = NULL;
+ }
+ if ( extension->numlines > 1 ) {
+ SNMP_FREE(extension->lines);
+ }
+ extension->lines = NULL;
+ extension->out_len = 0;
+ extension->numlines = 0;
+}
+
+
+ /*************************
+ *
+ * Utility routines for setting up a new entry
+ * (either via SET requests, or the config file)
+ *
+ *************************/
+
+void
+_free_extension( netsnmp_extend *extension, extend_registration_block *ereg )
+{
+ netsnmp_extend *eptr = NULL;
+ netsnmp_extend *eprev = NULL;
+
+ if (!extension)
+ return;
+
+ if (ereg) {
+ /* Unlink from 'ehead' list */
+ for (eptr=ereg->ehead; eptr; eptr=eptr->next) {
+ if (eptr == extension)
+ break;
+ eprev = eptr;
+ }
+ if (!eptr) {
+ snmp_log(LOG_ERR,
+ "extend: fell off end of list before finding extension\n");
+ return;
+ }
+ if (eprev)
+ eprev->next = eptr->next;
+ else
+ ereg->ehead = eptr->next;
+ }
+
+ netsnmp_table_data_remove_and_delete_row( ereg->dinfo, extension->row);
+ SNMP_FREE( extension->token );
+ SNMP_FREE( extension->cache );
+ SNMP_FREE( extension->command );
+ SNMP_FREE( extension->args );
+ SNMP_FREE( extension->input );
+ SNMP_FREE( extension );
+ return;
+}
+
+netsnmp_extend *
+_new_extension( char *exec_name, int exec_flags, extend_registration_block *ereg )
+{
+ netsnmp_extend *extension;
+ netsnmp_table_row *row;
+ netsnmp_extend *eptr1, *eptr2;
+ netsnmp_table_data *dinfo = ereg->dinfo;
+
+ if (!exec_name)
+ return NULL;
+ extension = SNMP_MALLOC_TYPEDEF( netsnmp_extend );
+ if (!extension)
+ return NULL;
+ extension->token = strdup( exec_name );
+ extension->flags = exec_flags;
+ extension->cache = netsnmp_cache_create( 0, extend_load_cache,
+ extend_free_cache, NULL, 0 );
+ if (extension->cache)
+ extension->cache->magic = extension;
+
+ row = netsnmp_create_table_data_row();
+ if (!row || !extension->cache) {
+ _free_extension( extension, ereg );
+ SNMP_FREE( row );
+ return NULL;
+ }
+ row->data = (void *)extension;
+ extension->row = row;
+ netsnmp_table_row_add_index( row, ASN_OCTET_STR,
+ exec_name, strlen(exec_name));
+ if ( netsnmp_table_data_add_row( dinfo, row) != SNMPERR_SUCCESS ) {
+ /* _free_extension( extension, ereg ); */
+ SNMP_FREE( extension ); /* Probably not sufficient */
+ SNMP_FREE( row );
+ return NULL;
+ }
+
+ ereg->num_entries++;
+ /*
+ * Now add this structure to a private linked list.
+ * We don't need this for the main tables - the
+ * 'table_data' helper will take care of those.
+ * But it's probably easier to handle the multi-line
+ * output table ourselves, for which we need access
+ * to the underlying data.
+ * So we'll keep a list internally as well.
+ */
+ for ( eptr1 = ereg->ehead, eptr2 = NULL;
+ eptr1;
+ eptr2 = eptr1, eptr1 = eptr1->next ) {
+
+ if (strlen( eptr1->token ) > strlen( exec_name ))
+ break;
+ if (strlen( eptr1->token ) == strlen( exec_name ) &&
+ strcmp( eptr1->token, exec_name ) > 0 )
+ break;
+ }
+ if ( eptr2 )
+ eptr2->next = extension;
+ else
+ ereg->ehead = extension;
+ extension->next = eptr1;
+ return extension;
+}
+
+void
+extend_parse_config(const char *token, char *cptr)
+{
+ netsnmp_extend *extension;
+ char exec_name[STRMAX];
+ char exec_command[STRMAX];
+ oid oid_buf[MAX_OID_LEN];
+ size_t oid_len;
+ extend_registration_block *eptr;
+ int flags;
+
+ cptr = copy_nword(cptr, exec_name, sizeof(exec_name));
+ if ( *exec_name == '.' ) {
+ oid_len = MAX_OID_LEN - 2;
+ if (0 == read_objid( exec_name, oid_buf, &oid_len )) {
+ config_perror("ERROR: Unrecognised OID" );
+ return;
+ }
+ cptr = copy_nword(cptr, exec_name, sizeof(exec_name));
+ if (!strcmp( token, "sh" ) ||
+ !strcmp( token, "exec" )) {
+ config_perror("ERROR: This output format has been deprecated - Please use the 'extend' directive instead" );
+ return;
+ }
+ } else {
+ memcpy( oid_buf, ns_extend_oid, sizeof(ns_extend_oid));
+ oid_len = OID_LENGTH(ns_extend_oid);
+ }
+ cptr = copy_nword(cptr, exec_command, sizeof(exec_command));
+ /* XXX - check 'exec_command' exists & is executable */
+ flags = (NS_EXTEND_FLAGS_ACTIVE | NS_EXTEND_FLAGS_CONFIG);
+ if (!strcmp( token, "sh" ) ||
+ !strcmp( token, "extend-sh" ) ||
+ !strcmp( token, "sh2" ))
+ flags |= NS_EXTEND_FLAGS_SHELL;
+ if (!strcmp( token, "execFix" ) ||
+ !strcmp( token, "extendfix" ) ||
+ !strcmp( token, "execFix2" )) {
+ strcat( exec_name, "Fix" );
+ flags |= NS_EXTEND_FLAGS_WRITEABLE;
+ /* XXX - Check for shell... */
+ }
+
+ eptr = _register_extend( oid_buf, oid_len );
+ extension = _new_extension( exec_name, flags, eptr );
+ if (extension) {
+ extension->command = strdup( exec_command );
+ if (cptr)
+ extension->args = strdup( cptr );
+ } else {
+ snmp_log(LOG_ERR, "Failed to register extend entry '%s' - possibly duplicate name.\n", exec_name );
+ return;
+ }
+
+#ifndef USING_UCD_SNMP_EXTENSIBLE_MODULE
+ /*
+ * Compatability with the UCD extTable
+ */
+ if (!strcmp( token, "execFix" )) {
+ int i;
+ for ( i=0; i < num_compatability_entries; i++ ) {
+ if (!strcmp( exec_name,
+ compatability_entries[i].exec_entry->token))
+ break;
+ }
+ if ( i == num_compatability_entries )
+ config_perror("No matching exec entry" );
+ else
+ compatability_entries[ i ].efix_entry = extension;
+
+ } else if (!strcmp( token, "sh" ) ||
+ !strcmp( token, "exec" )) {
+ if ( num_compatability_entries == max_compatability_entries )
+ /* XXX - should really use dynamic allocation */
+ config_perror("No further UCD-compatible entries" );
+ else
+ compatability_entries[
+ num_compatability_entries++ ].exec_entry = extension;
+ }
+#endif
+}
+
+ /*************************
+ *
+ * Main table handlers
+ * Most of the work is handled
+ * by the 'table_data' helper.
+ *
+ *************************/
+
+int
+handle_nsExtendConfigTable(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_extend *extension;
+ extend_registration_block *eptr;
+ int i;
+ int need_to_validate = 0;
+
+ for ( request=requests; request; request=request->next ) {
+ if (request->processed)
+ continue;
+ table_info = netsnmp_extract_table_info( request );
+ extension = (netsnmp_extend*)netsnmp_extract_table_row_data( request );
+
+ DEBUGMSGTL(( "nsExtendTable:config", "varbind: "));
+ DEBUGMSGOID(("nsExtendTable:config", request->requestvb->name,
+ request->requestvb->name_length));
+ DEBUGMSG(( "nsExtendTable:config", " (%s)\n",
+ se_find_label_in_slist("agent_mode", reqinfo->mode)));
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ switch (table_info->colnum) {
+ case COLUMN_EXTCFG_COMMAND:
+ snmp_set_var_typed_value(
+ request->requestvb, ASN_OCTET_STR,
+ extension->command,
+ (extension->command)?strlen(extension->command):0);
+ break;
+ case COLUMN_EXTCFG_ARGS:
+ snmp_set_var_typed_value(
+ request->requestvb, ASN_OCTET_STR,
+ extension->args,
+ (extension->args)?strlen(extension->args):0);
+ break;
+ case COLUMN_EXTCFG_INPUT:
+ snmp_set_var_typed_value(
+ request->requestvb, ASN_OCTET_STR,
+ extension->input,
+ (extension->input)?strlen(extension->input):0);
+ break;
+ case COLUMN_EXTCFG_CACHETIME:
+ snmp_set_var_typed_value(
+ request->requestvb, ASN_INTEGER,
+ (u_char*)&extension->cache->timeout, sizeof(int));
+ break;
+ case COLUMN_EXTCFG_EXECTYPE:
+ i = ((extension->flags & NS_EXTEND_FLAGS_SHELL) ?
+ NS_EXTEND_ETYPE_SHELL :
+ NS_EXTEND_ETYPE_EXEC);
+ snmp_set_var_typed_value(
+ request->requestvb, ASN_INTEGER,
+ (u_char*)&i, sizeof(i));
+ break;
+ case COLUMN_EXTCFG_RUNTYPE:
+ i = ((extension->flags & NS_EXTEND_FLAGS_WRITEABLE) ?
+ NS_EXTEND_RTYPE_RWRITE :
+ NS_EXTEND_RTYPE_RONLY);
+ snmp_set_var_typed_value(
+ request->requestvb, ASN_INTEGER,
+ (u_char*)&i, sizeof(i));
+ break;
+
+ case COLUMN_EXTCFG_STORAGE:
+ i = ((extension->flags & NS_EXTEND_FLAGS_CONFIG) ?
+ ST_PERMANENT : ST_VOLATILE);
+ snmp_set_var_typed_value(
+ request->requestvb, ASN_INTEGER,
+ (u_char*)&i, sizeof(i));
+ break;
+ case COLUMN_EXTCFG_STATUS:
+ i = ((extension->flags & NS_EXTEND_FLAGS_ACTIVE) ?
+ RS_ACTIVE :
+ RS_NOTINSERVICE);
+ snmp_set_var_typed_value(
+ request->requestvb, ASN_INTEGER,
+ (u_char*)&i, sizeof(i));
+ break;
+
+ default:
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ }
+ break;
+
+ /**********
+ *
+ * Start of SET handling
+ *
+ * All config objects are potentially writable except
+ * nsExtendStorage which is fixed as either 'permanent'
+ * (if read from a config file) or 'volatile' (if set via SNMP)
+ * The string-based settings of a 'permanent' entry cannot
+ * be changed - neither can the execution or run type.
+ * Such entries can be (temporarily) marked as inactive,
+ * and the cache timeout adjusted, but these changes are
+ * not persistent.
+ *
+ **********/
+
+ case MODE_SET_RESERVE1:
+ /*
+ * Validate the new assignments
+ */
+ switch (table_info->colnum) {
+ case COLUMN_EXTCFG_COMMAND:
+ if (request->requestvb->type != ASN_OCTET_STR) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ /*
+ * Must have a full path to the command
+ * XXX - Assumes Unix-style paths
+ */
+ if (request->requestvb->val_len == 0 ||
+ request->requestvb->val.string[0] != '/') {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ /*
+ * XXX - need to check this file exists
+ * (and is executable)
+ */
+
+ if (extension && extension->flags & NS_EXTEND_FLAGS_CONFIG) {
+ /*
+ * config entries are "permanent" so can't be changed
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOTWRITABLE);
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+
+ case COLUMN_EXTCFG_ARGS:
+ case COLUMN_EXTCFG_INPUT:
+ if (request->requestvb->type != ASN_OCTET_STR) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ if (extension && extension->flags & NS_EXTEND_FLAGS_CONFIG) {
+ /*
+ * config entries are "permanent" so can't be changed
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOTWRITABLE);
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+
+ case COLUMN_EXTCFG_CACHETIME:
+ if (request->requestvb->type != ASN_INTEGER) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ i = *request->requestvb->val.integer;
+ /*
+ * -1 is a special value indicating "don't cache"
+ * [[ XXX - should this be 0 ?? ]]
+ * Otherwise, cache times must be non-negative
+ */
+ if (i < -1 ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ break;
+
+ case COLUMN_EXTCFG_EXECTYPE:
+ if (request->requestvb->type != ASN_INTEGER) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ i = *request->requestvb->val.integer;
+ if (i<1 || i>2) { /* 'exec(1)' or 'shell(2)' only */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ if (extension && extension->flags & NS_EXTEND_FLAGS_CONFIG) {
+ /*
+ * config entries are "permanent" so can't be changed
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOTWRITABLE);
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+
+ case COLUMN_EXTCFG_RUNTYPE:
+ if (request->requestvb->type != ASN_INTEGER) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ /*
+ * 'run-on-read(1)', 'run-on-set(2)'
+ * or 'run-command(3)' only
+ */
+ i = *request->requestvb->val.integer;
+ if (i<1 || i>3) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ /*
+ * 'run-command(3)' can only be used with
+ * a pre-existing 'run-on-set(2)' entry.
+ */
+ if (i==3 && !(extension && (extension->flags & NS_EXTEND_FLAGS_WRITEABLE))) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ /*
+ * 'run-command(3)' is the only valid assignment
+ * for permanent (i.e. config) entries
+ */
+ if ((extension && extension->flags & NS_EXTEND_FLAGS_CONFIG)
+ && i!=3 ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ break;
+
+ case COLUMN_EXTCFG_STATUS:
+ if (request->requestvb->type != ASN_INTEGER) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ i = *request->requestvb->val.integer;
+ switch (i) {
+ case RS_ACTIVE:
+ case RS_NOTINSERVICE:
+ if (!extension) {
+ /* Must be used with existing rows */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ break; /* OK */
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ if (extension) {
+ /* Can only be used to create new rows */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ break;
+ case RS_DESTROY:
+ break;
+ default:
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ break;
+
+ default:
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOTWRITABLE);
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ switch (table_info->colnum) {
+ case COLUMN_EXTCFG_STATUS:
+ i = *request->requestvb->val.integer;
+ switch (i) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ eptr = _find_extension_block( request->requestvb->name,
+ request->requestvb->name_length );
+ extension = _new_extension( table_info->indexes->val.string,
+ 0, eptr );
+ if (!extension) { /* failed */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_RESOURCEUNAVAILABLE;
+ }
+ netsnmp_insert_table_row( request, extension->row );
+ }
+ }
+ break;
+
+ case MODE_SET_FREE:
+ switch (table_info->colnum) {
+ case COLUMN_EXTCFG_STATUS:
+ i = *request->requestvb->val.integer;
+ switch (i) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ eptr = _find_extension_block( request->requestvb->name,
+ request->requestvb->name_length );
+ _free_extension( extension, eptr );
+ }
+ }
+ break;
+
+ case MODE_SET_ACTION:
+ switch (table_info->colnum) {
+ case COLUMN_EXTCFG_COMMAND:
+ extension->old_command = extension->command;
+ extension->command = netsnmp_strdup_and_null(
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_EXTCFG_ARGS:
+ extension->old_args = extension->args;
+ extension->args = netsnmp_strdup_and_null(
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_EXTCFG_INPUT:
+ extension->old_input = extension->input;
+ extension->input = netsnmp_strdup_and_null(
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_EXTCFG_STATUS:
+ i = *request->requestvb->val.integer;
+ switch (i) {
+ case RS_ACTIVE:
+ case RS_CREATEANDGO:
+ need_to_validate = 1;
+ }
+ break;
+ }
+ break;
+
+ case MODE_SET_UNDO:
+ switch (table_info->colnum) {
+ case COLUMN_EXTCFG_COMMAND:
+ if ( extension && extension->old_command ) {
+ SNMP_FREE(extension->command);
+ extension->command = extension->old_command;
+ extension->old_command = NULL;
+ }
+ break;
+ case COLUMN_EXTCFG_ARGS:
+ if ( extension && extension->old_args ) {
+ SNMP_FREE(extension->args);
+ extension->args = extension->old_args;
+ extension->old_args = NULL;
+ }
+ break;
+ case COLUMN_EXTCFG_INPUT:
+ if ( extension && extension->old_input ) {
+ SNMP_FREE(extension->input);
+ extension->input = extension->old_input;
+ extension->old_input = NULL;
+ }
+ break;
+ case COLUMN_EXTCFG_STATUS:
+ i = *request->requestvb->val.integer;
+ switch (i) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ eptr = _find_extension_block( request->requestvb->name,
+ request->requestvb->name_length );
+ _free_extension( extension, eptr );
+ }
+ break;
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ switch (table_info->colnum) {
+ case COLUMN_EXTCFG_CACHETIME:
+ i = *request->requestvb->val.integer;
+ extension->cache->timeout = i;
+ break;
+
+ case COLUMN_EXTCFG_RUNTYPE:
+ i = *request->requestvb->val.integer;
+ switch (i) {
+ case 1:
+ extension->flags &= ~NS_EXTEND_FLAGS_WRITEABLE;
+ break;
+ case 2:
+ extension->flags |= NS_EXTEND_FLAGS_WRITEABLE;
+ break;
+ case 3:
+ (void)netsnmp_cache_check_and_reload( extension->cache );
+ break;
+ }
+ break;
+
+ case COLUMN_EXTCFG_EXECTYPE:
+ i = *request->requestvb->val.integer;
+ if ( i == NS_EXTEND_ETYPE_SHELL )
+ extension->flags |= NS_EXTEND_FLAGS_SHELL;
+ else
+ extension->flags &= ~NS_EXTEND_FLAGS_SHELL;
+ break;
+
+ case COLUMN_EXTCFG_STATUS:
+ i = *request->requestvb->val.integer;
+ switch (i) {
+ case RS_ACTIVE:
+ case RS_CREATEANDGO:
+ extension->flags |= NS_EXTEND_FLAGS_ACTIVE;
+ break;
+ case RS_NOTINSERVICE:
+ case RS_CREATEANDWAIT:
+ extension->flags &= ~NS_EXTEND_FLAGS_ACTIVE;
+ break;
+ case RS_DESTROY:
+ eptr = _find_extension_block( request->requestvb->name,
+ request->requestvb->name_length );
+ _free_extension( extension, eptr );
+ break;
+ }
+ }
+ break;
+
+ default:
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_GENERR);
+ return SNMP_ERR_GENERR;
+ }
+ }
+
+ /*
+ * If we're marking a given row as active,
+ * then we need to check that it's ready.
+ */
+ if (need_to_validate) {
+ for ( request=requests; request; request=request->next ) {
+ if (request->processed)
+ continue;
+ table_info = netsnmp_extract_table_info( request );
+ extension = (netsnmp_extend*)netsnmp_extract_table_row_data( request );
+ switch (table_info->colnum) {
+ case COLUMN_EXTCFG_STATUS:
+ i = *request->requestvb->val.integer;
+ if (( i == RS_ACTIVE || i == RS_CREATEANDGO ) &&
+ !(extension && extension->command &&
+ extension->command[0] == '/' /* &&
+ is_executable(extension->command) */)) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ }
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+handle_nsExtendOutput1Table(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_extend *extension;
+ int len;
+
+ for ( request=requests; request; request=request->next ) {
+ if (request->processed)
+ continue;
+ table_info = netsnmp_extract_table_info( request );
+ extension = (netsnmp_extend*)netsnmp_extract_table_row_data( request );
+
+ DEBUGMSGTL(( "nsExtendTable:output1", "varbind: "));
+ DEBUGMSGOID(("nsExtendTable:output1", request->requestvb->name,
+ request->requestvb->name_length));
+ DEBUGMSG(( "nsExtendTable:output1", "\n"));
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ if (!extension || !(extension->flags & NS_EXTEND_FLAGS_ACTIVE)) {
+ /*
+ * If this row is inactive, then skip it.
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ if (!(extension->flags & NS_EXTEND_FLAGS_WRITEABLE) &&
+ (netsnmp_cache_check_and_reload( extension->cache ) < 0 )) {
+ /*
+ * If reloading the output cache of a 'run-on-read'
+ * entry fails, then skip it.
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ if ((extension->flags & NS_EXTEND_FLAGS_WRITEABLE) &&
+ (netsnmp_cache_check_expired( extension->cache ) == 1 )) {
+ /*
+ * If the output cache of a 'run-on-write'
+ * entry has expired, then skip it.
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+
+ switch (table_info->colnum) {
+ case COLUMN_EXTOUT1_OUTLEN:
+ snmp_set_var_typed_value(
+ request->requestvb, ASN_INTEGER,
+ (u_char*)&extension->out_len, sizeof(int));
+ break;
+ case COLUMN_EXTOUT1_OUTPUT1:
+ /*
+ * If we've got more than one line,
+ * find the length of the first one.
+ * Otherwise find the length of the whole string.
+ */
+ if (extension->numlines > 1) {
+ len = (extension->lines[1])-(extension->output) -1;
+ } else if (extension->output) {
+ len = strlen(extension->output);
+ } else {
+ len = 0;
+ }
+ snmp_set_var_typed_value(
+ request->requestvb, ASN_OCTET_STR,
+ extension->output, len);
+ break;
+ case COLUMN_EXTOUT1_OUTPUT2:
+ snmp_set_var_typed_value(
+ request->requestvb, ASN_OCTET_STR,
+ extension->output,
+ (extension->output)?extension->out_len:0);
+ break;
+ case COLUMN_EXTOUT1_NUMLINES:
+ snmp_set_var_typed_value(
+ request->requestvb, ASN_INTEGER,
+ (u_char*)&extension->numlines, sizeof(int));
+ break;
+ case COLUMN_EXTOUT1_RESULT:
+ snmp_set_var_typed_value(
+ request->requestvb, ASN_INTEGER,
+ (u_char*)&extension->result, sizeof(int));
+ break;
+ default:
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ }
+ break;
+ default:
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_GENERR);
+ return SNMP_ERR_GENERR;
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+ /*************************
+ *
+ * Multi-line output table handler
+ * Most of the work is handled here.
+ *
+ *************************/
+
+
+/*
+ * Locate the appropriate entry for a given request
+ */
+netsnmp_extend *
+_extend_find_entry( netsnmp_request_info *request,
+ netsnmp_table_request_info *table_info,
+ int mode )
+{
+ netsnmp_extend *eptr;
+ extend_registration_block *ereg;
+ int line_idx;
+ oid oid_buf[MAX_OID_LEN];
+ int oid_len;
+ int i;
+ char *token;
+ int token_len;
+
+ if (!request || !table_info || !table_info->indexes
+ || !table_info->indexes->next_variable) {
+ DEBUGMSGTL(( "nsExtendTable:output2", "invalid invocation\n"));
+ return NULL;
+ }
+
+ ereg = _find_extension_block( request->requestvb->name,
+ request->requestvb->name_length );
+
+ /***
+ * GET handling - find the exact entry being requested
+ ***/
+ if ( mode == MODE_GET ) {
+ DEBUGMSGTL(( "nsExtendTable:output2", "GET: %s / %d\n ",
+ table_info->indexes->val.string,
+ *table_info->indexes->next_variable->val.integer));
+ for ( eptr = ereg->ehead; eptr; eptr = eptr->next ) {
+ if ( !strcmp( eptr->token, table_info->indexes->val.string ))
+ break;
+ }
+
+ if ( eptr ) {
+ /*
+ * Ensure the output is available...
+ */
+ if (!(eptr->flags & NS_EXTEND_FLAGS_ACTIVE) ||
+ (netsnmp_cache_check_and_reload( eptr->cache ) < 0 ))
+ return NULL;
+
+ /*
+ * ...and check the line requested is valid
+ */
+ line_idx = *table_info->indexes->next_variable->val.integer;
+ if (eptr->numlines < line_idx)
+ return NULL;
+ }
+ return eptr;
+ }
+
+ /***
+ * GETNEXT handling - find the first suitable entry
+ ***/
+ else {
+ if (!table_info->indexes->val_len ) {
+ DEBUGMSGTL(( "nsExtendTable:output2", "GETNEXT: first entry\n"));
+ /*
+ * Beginning of the table - find the first active
+ * (and successful) entry, and use the first line of it
+ */
+ for (eptr = ereg->ehead; eptr; eptr = eptr->next ) {
+ if ((eptr->flags & NS_EXTEND_FLAGS_ACTIVE) &&
+ (netsnmp_cache_check_and_reload( eptr->cache ) >= 0 )) {
+ line_idx = 1;
+ break;
+ }
+ }
+ } else {
+ token = table_info->indexes->val.string;
+ token_len = table_info->indexes->val_len;
+ line_idx = *table_info->indexes->next_variable->val.integer;
+ DEBUGMSGTL(( "nsExtendTable:output2", "GETNEXT: %s / %d\n ",
+ token, line_idx ));
+ /*
+ * Otherwise, find the first entry not earlier
+ * than the requested token...
+ */
+ for (eptr = ereg->ehead; eptr; eptr = eptr->next ) {
+ if ( strlen(eptr->token) > token_len )
+ break;
+ if ( strlen(eptr->token) == token_len &&
+ strcmp(eptr->token, token) >= 0 )
+ break;
+ }
+ if (!eptr)
+ return NULL; /* (assuming there is one) */
+
+ /*
+ * ... and make sure it's active & the output is available
+ * (or use the first following entry that is)
+ */
+ for ( ; eptr; eptr = eptr->next ) {
+ if ((eptr->flags & NS_EXTEND_FLAGS_ACTIVE) &&
+ (netsnmp_cache_check_and_reload( eptr->cache ) >= 0 )) {
+ break;
+ }
+ line_idx = 1;
+ }
+
+ if (!eptr)
+ return NULL; /* (assuming there is one) */
+
+ /*
+ * If we're working with the same entry that was requested,
+ * see whether we've reached the end of the output...
+ */
+ if (!strcmp( eptr->token, token )) {
+ if ( eptr->numlines <= line_idx ) {
+ /*
+ * ... and if so, move on to the first line
+ * of the next (active and successful) entry.
+ */
+ line_idx = 1;
+ for (eptr = eptr->next ; eptr; eptr = eptr->next ) {
+ if ((eptr->flags & NS_EXTEND_FLAGS_ACTIVE) &&
+ (netsnmp_cache_check_and_reload( eptr->cache ) >= 0 )) {
+ break;
+ }
+ }
+ } else {
+ /*
+ * Otherwise just use the next line of this entry.
+ */
+ line_idx++;
+ }
+ }
+ else {
+ /*
+ * If this is not the same entry that was requested,
+ * then we should return the first line.
+ */
+ line_idx = 1;
+ }
+ }
+ if (eptr) {
+ DEBUGMSGTL(( "nsExtendTable:output2", "GETNEXT -> %s / %d\n ",
+ eptr->token, line_idx));
+ /*
+ * Since we're processing a GETNEXT request,
+ * now we've found the appropriate entry (and line),
+ * we need to update the varbind OID ...
+ */
+ memset(oid_buf, 0, sizeof(oid_buf));
+ oid_len = ereg->oid_len;
+ memcpy( oid_buf, ereg->root_oid, oid_len*sizeof(oid));
+ oid_buf[ oid_len++ ] = 4; /* nsExtendOutput2Table */
+ oid_buf[ oid_len++ ] = 1; /* nsExtendOutput2Entry */
+ oid_buf[ oid_len++ ] = COLUMN_EXTOUT2_OUTLINE;
+ /* string token index */
+ oid_buf[ oid_len++ ] = strlen(eptr->token);
+ for ( i=0; i < (int)strlen(eptr->token); i++ )
+ oid_buf[ oid_len+i ] = eptr->token[i];
+ oid_len += strlen( eptr->token );
+ /* plus line number */
+ oid_buf[ oid_len++ ] = line_idx;
+ snmp_set_var_objid( request->requestvb, oid_buf, oid_len );
+ /*
+ * ... and index values to match.
+ */
+ snmp_set_var_value( table_info->indexes,
+ eptr->token, strlen(eptr->token));
+ snmp_set_var_value( table_info->indexes->next_variable,
+ &line_idx, sizeof(line_idx));
+ }
+ return eptr; /* Finally, signal success */
+ }
+ return NULL;
+}
+
+/*
+ * Multi-line output handler
+ * Locate the appropriate entry (using _extend_find_entry)
+ * and return the appropriate output line
+ */
+int
+handle_nsExtendOutput2Table(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_extend *extension;
+ char *cp;
+ int line_idx;
+ int len;
+
+ for ( request=requests; request; request=request->next ) {
+ if (request->processed)
+ continue;
+
+ table_info = netsnmp_extract_table_info( request );
+ extension = _extend_find_entry( request, table_info, reqinfo->mode );
+
+ DEBUGMSGTL(( "nsExtendTable:output2", "varbind: "));
+ DEBUGMSGOID(("nsExtendTable:output2", request->requestvb->name,
+ request->requestvb->name_length));
+ DEBUGMSG(( "nsExtendTable:output2", " (%s)\n",
+ (extension) ? extension->token : "[none]"));
+
+ if (!extension) {
+ if (reqinfo->mode == MODE_GET)
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHINSTANCE);
+ else
+ netsnmp_set_request_error(reqinfo, request, SNMP_ENDOFMIBVIEW);
+ continue;
+ }
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ case MODE_GETNEXT:
+ switch (table_info->colnum) {
+ case COLUMN_EXTOUT2_OUTLINE:
+ /*
+ * Determine which line we've been asked for....
+ */
+ line_idx = *table_info->indexes->next_variable->val.integer;
+ cp = extension->lines[line_idx-1];
+
+ /*
+ * ... and how long it is.
+ */
+ if ( extension->numlines > line_idx )
+ len = (extension->lines[line_idx])-cp -1;
+ else if (cp)
+ len = strlen(cp);
+ else
+ len = 0;
+
+ snmp_set_var_typed_value( request->requestvb,
+ ASN_OCTET_STR, cp, len );
+ break;
+ default:
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ }
+ break;
+ default:
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_GENERR);
+ return SNMP_ERR_GENERR;
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+#ifndef USING_UCD_SNMP_EXTENSIBLE_MODULE
+ /*************************
+ *
+ * Compatability with the UCD extTable
+ *
+ *************************/
+
+u_char *
+var_extensible_old(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+ netsnmp_old_extend *exten = NULL;
+ static long long_ret;
+ int idx;
+
+ if (header_simple_table
+ (vp, name, length, exact, var_len, write_method, num_compatability_entries))
+ return (NULL);
+
+ idx = name[*length-1] -1;
+ exten = &compatability_entries[ idx ];
+ if (exten) {
+ switch (vp->magic) {
+ case MIBINDEX:
+ long_ret = name[*length - 1];
+ return ((u_char *) (&long_ret));
+ case ERRORNAME: /* name defined in config file */
+ *var_len = strlen(exten->exec_entry->token);
+ return ((u_char *) (exten->exec_entry->token));
+ case SHELLCOMMAND:
+ *var_len = strlen(exten->exec_entry->command);
+ return ((u_char *) (exten->exec_entry->command));
+ case ERRORFLAG: /* return code from the process */
+ netsnmp_cache_check_and_reload( exten->exec_entry->cache );
+ long_ret = exten->exec_entry->result;
+ return ((u_char *) (&long_ret));
+ case ERRORMSG: /* first line of text returned from the process */
+ netsnmp_cache_check_and_reload( exten->exec_entry->cache );
+ if (exten->exec_entry->numlines > 1) {
+ *var_len = (exten->exec_entry->lines[1])-
+ (exten->exec_entry->output) -1;
+ } else if (exten->exec_entry->output) {
+ *var_len = strlen(exten->exec_entry->output);
+ } else {
+ *var_len = 0;
+ }
+ return ((u_char *) (exten->exec_entry->output));
+ case ERRORFIX:
+ *write_method = fixExec2Error;
+ long_return = 0;
+ return ((u_char *) &long_return);
+
+ case ERRORFIXCMD:
+ if (exten->efix_entry) {
+ *var_len = strlen(exten->efix_entry->command);
+ return ((u_char *) exten->efix_entry->command);
+ } else {
+ *var_len = 0;
+ return ((u_char *) &long_return); /* Just needs to be non-null! */
+ }
+ }
+ return NULL;
+ }
+ return NULL;
+}
+
+
+int
+fixExec2Error(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ netsnmp_old_extend *exten = NULL;
+ int idx;
+
+ idx = name[name_len-1] -1;
+ exten = &compatability_entries[ idx ];
+
+ switch (action) {
+ case MODE_SET_RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR, "Wrong type != int\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ idx = *((long *) var_val);
+ if (idx != 1) {
+ snmp_log(LOG_ERR, "Wrong value != 1\n");
+ return SNMP_ERR_WRONGVALUE;
+ }
+ if (!exten || !exten->efix_entry) {
+ snmp_log(LOG_ERR, "No command to run\n");
+ return SNMP_ERR_GENERR;
+ }
+ return SNMP_ERR_NOERROR;
+
+ case MODE_SET_COMMIT:
+ netsnmp_cache_check_and_reload( exten->efix_entry->cache );
+ }
+ return SNMP_ERR_NOERROR;
+}
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/extend.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/extend.h
new file mode 100644
index 0000000000..8f19db3474
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/extend.h
@@ -0,0 +1,69 @@
+#ifndef NETSNMP_EXTEND_H
+#define NETSNMP_EXTEND_H
+
+config_require( util_funcs )
+config_require( utilities/execute )
+config_add_mib(NET-SNMP-EXTEND-MIB)
+
+typedef struct netsnmp_extend_s {
+ char *token;
+ char *command;
+ char *args;
+ char *input;
+ char *old_command;
+ char *old_args;
+ char *old_input;
+
+ int out_len;
+ char *output;
+ int numlines;
+ char **lines;
+ int result;
+
+ int flags;
+ netsnmp_cache *cache;
+ netsnmp_table_row *row;
+ netsnmp_table_data *dinfo;
+ struct netsnmp_extend_s *next;
+} netsnmp_extend;
+
+void init_extend(void);
+Netsnmp_Node_Handler handle_nsExtendConfigTable;
+Netsnmp_Node_Handler handle_nsExtendOutput1Table;
+Netsnmp_Node_Handler handle_nsExtendOutput2Table;
+void extend_parse_config(const char*, char*);
+
+#define COLUMN_EXTCFG_COMMAND 2
+#define COLUMN_EXTCFG_ARGS 3
+#define COLUMN_EXTCFG_INPUT 4
+#define COLUMN_EXTCFG_CACHETIME 5
+#define COLUMN_EXTCFG_EXECTYPE 6
+#define COLUMN_EXTCFG_RUNTYPE 7
+#define COLUMN_EXTCFG_STORAGE 20
+#define COLUMN_EXTCFG_STATUS 21
+#define COLUMN_EXTCFG_FIRST_COLUMN COLUMN_EXTCFG_COMMAND
+#define COLUMN_EXTCFG_LAST_COLUMN COLUMN_EXTCFG_STATUS
+
+#define COLUMN_EXTOUT1_OUTLEN 0 /* DROPPED */
+#define COLUMN_EXTOUT1_OUTPUT1 1 /* First Line */
+#define COLUMN_EXTOUT1_OUTPUT2 2 /* Full Output */
+#define COLUMN_EXTOUT1_NUMLINES 3
+#define COLUMN_EXTOUT1_RESULT 4
+#define COLUMN_EXTOUT1_FIRST_COLUMN COLUMN_EXTOUT1_OUTPUT1
+#define COLUMN_EXTOUT1_LAST_COLUMN COLUMN_EXTOUT1_RESULT
+
+#define COLUMN_EXTOUT2_OUTLINE 2
+#define COLUMN_EXTOUT2_FIRST_COLUMN COLUMN_EXTOUT2_OUTLINE
+#define COLUMN_EXTOUT2_LAST_COLUMN COLUMN_EXTOUT2_OUTLINE
+
+#define NS_EXTEND_FLAGS_ACTIVE 0x01
+#define NS_EXTEND_FLAGS_SHELL 0x02
+#define NS_EXTEND_FLAGS_WRITEABLE 0x04
+#define NS_EXTEND_FLAGS_CONFIG 0x08
+
+#define NS_EXTEND_ETYPE_EXEC 1
+#define NS_EXTEND_ETYPE_SHELL 2
+#define NS_EXTEND_RTYPE_RONLY 1
+#define NS_EXTEND_RTYPE_RWRITE 2
+
+#endif /* NETSNMP_EXTEND_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsCache.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsCache.c
new file mode 100644
index 0000000000..f8e73f045a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsCache.c
@@ -0,0 +1,419 @@
+#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/agent/scalar.h>
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/agent/cache_handler.h>
+#include "agent/nsCache.h"
+#include "util_funcs.h"
+
+
+/*
+ * use unadvertised function to get cache head. You really should not
+ * do this, since the internal storage mechanism might change.
+ */
+extern netsnmp_cache *netsnmp_cache_get_head(void);
+
+
+/*
+ * OIDs for the cacheging control scalar objects
+ *
+ * Note that these we're registering the full object rather
+ * than the (sole) valid instance in each case, in order
+ * to handle requests for invalid instances properly.
+ */
+oid nsCacheTimeout_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 1, 5, 1};
+oid nsCacheEnabled_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 1, 5, 2};
+
+/*
+ * ... and for the cache table.
+ */
+
+#define NSCACHE_TIMEOUT 2
+#define NSCACHE_STATUS 3
+
+#define NSCACHE_STATUS_ENABLED 1
+#define NSCACHE_STATUS_DISABLED 2
+#define NSCACHE_STATUS_EMPTY 3
+#define NSCACHE_STATUS_ACTIVE 4
+#define NSCACHE_STATUS_EXPIRED 5
+
+oid nsCacheTable_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 1, 5, 3};
+
+extern struct snmp_alarm *
+sa_find_specific(unsigned int clientreg);
+
+
+void
+init_nsCache(void)
+{
+ netsnmp_table_registration_info *table_info;
+ netsnmp_iterator_info *iinfo;
+
+ /*
+ * Register the scalar objects...
+ */
+ DEBUGMSGTL(("nsCacheScalars", "Initializing\n"));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration(
+ "nsCacheTimeout", handle_nsCacheTimeout,
+ nsCacheTimeout_oid, OID_LENGTH(nsCacheTimeout_oid),
+ HANDLER_CAN_RWRITE)
+ );
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration(
+ "nsCacheEnabled", handle_nsCacheEnabled,
+ nsCacheEnabled_oid, OID_LENGTH(nsCacheEnabled_oid),
+ HANDLER_CAN_RWRITE)
+ );
+
+ /*
+ * ... and the table.
+ * We need to define the column structure and indexing....
+ */
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ if (!table_info) {
+ return;
+ }
+ netsnmp_table_helper_add_indexes(table_info, ASN_PRIV_IMPLIED_OBJECT_ID, 0);
+ table_info->min_column = NSCACHE_TIMEOUT;
+ table_info->max_column = NSCACHE_STATUS;
+
+
+ /*
+ * .... and the iteration information ....
+ */
+ iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+ if (!iinfo) {
+ return;
+ }
+ iinfo->get_first_data_point = get_first_cache_entry;
+ iinfo->get_next_data_point = get_next_cache_entry;
+ iinfo->table_reginfo = table_info;
+
+
+ /*
+ * .... and register the table with the agent.
+ */
+ netsnmp_register_table_iterator(
+ netsnmp_create_handler_registration(
+ "tzCacheTable", handle_nsCacheTable,
+ nsCacheTable_oid, OID_LENGTH(nsCacheTable_oid),
+ HANDLER_CAN_RWRITE),
+ iinfo);
+}
+
+
+/*
+ * nsCache scalar handling
+ */
+
+int
+handle_nsCacheTimeout(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ long cache_default_timeout =
+ netsnmp_ds_get_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_CACHE_TIMEOUT);
+ netsnmp_request_info *request=NULL;
+
+ switch (reqinfo->mode) {
+
+ case MODE_GET:
+ for (request = requests; request; request=request->next) {
+ snmp_set_var_typed_value(request->requestvb, ASN_INTEGER,
+ (u_char*)&cache_default_timeout,
+ sizeof(cache_default_timeout));
+ }
+ break;
+
+
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request=request->next) {
+ if ( request->status != 0 ) {
+ return SNMP_ERR_NOERROR; /* Already got an error */
+ }
+ if ( request->requestvb->type != ASN_INTEGER ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if ( *request->requestvb->val.integer < 0 ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_CACHE_TIMEOUT,
+ *requests->requestvb->val.integer);
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+handle_nsCacheEnabled(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ long enabled;
+ netsnmp_request_info *request=NULL;
+
+ switch (reqinfo->mode) {
+
+ case MODE_GET:
+ enabled = (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_CACHING)
+ ? NSCACHE_STATUS_ENABLED /* Actually True/False */
+ : NSCACHE_STATUS_DISABLED );
+ for (request = requests; request; request=request->next) {
+ snmp_set_var_typed_value(request->requestvb, ASN_INTEGER,
+ (u_char*)&enabled, sizeof(enabled));
+ }
+ break;
+
+
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request=request->next) {
+ if ( request->status != 0 ) {
+ return SNMP_ERR_NOERROR; /* Already got an error */
+ }
+ if ( request->requestvb->type != ASN_INTEGER ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if ((*request->requestvb->val.integer != NSCACHE_STATUS_ENABLED) &&
+ (*request->requestvb->val.integer != NSCACHE_STATUS_DISABLED)) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ enabled = *requests->requestvb->val.integer;
+ if (enabled == NSCACHE_STATUS_DISABLED)
+ enabled = 0;
+ netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_CACHING, enabled);
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+/*
+ * nsCacheTable handling
+ */
+
+netsnmp_variable_list *
+get_first_cache_entry(void **loop_context, void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ netsnmp_cache *cache_head = netsnmp_cache_get_head();
+
+ if ( !cache_head )
+ return NULL;
+
+ snmp_set_var_value(index, (u_char*)cache_head->rootoid,
+ sizeof(oid) * cache_head->rootoid_len);
+ *loop_context = (void*)cache_head;
+ *data_context = (void*)cache_head;
+ return index;
+}
+
+netsnmp_variable_list *
+get_next_cache_entry(void **loop_context, void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ netsnmp_cache *cache = (netsnmp_cache *)*loop_context;
+ cache = cache->next;
+
+ if ( !cache )
+ return NULL;
+
+ snmp_set_var_value(index, (u_char*)cache->rootoid,
+ sizeof(oid) * cache->rootoid_len);
+ *loop_context = (void*)cache;
+ *data_context = (void*)cache;
+ return index;
+}
+
+
+int
+handle_nsCacheTable(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ long status;
+ netsnmp_request_info *request = NULL;
+ netsnmp_table_request_info *table_info = NULL;
+ netsnmp_cache *cache_entry = NULL;
+
+ switch (reqinfo->mode) {
+
+ case MODE_GET:
+ for (request=requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+
+ cache_entry = (netsnmp_cache*)netsnmp_extract_iterator_context(request);
+ table_info = netsnmp_extract_table_info(request);
+
+ switch (table_info->colnum) {
+ case NSCACHE_TIMEOUT:
+ if (!cache_entry) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ status = cache_entry->timeout;
+ snmp_set_var_typed_value(request->requestvb, ASN_INTEGER,
+ (u_char*)&status, sizeof(status));
+ break;
+
+ case NSCACHE_STATUS:
+ if (!cache_entry) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ status = (cache_entry->enabled ?
+ (cache_entry->timestamp ?
+ (!atime_ready(cache_entry->timestamp,
+ 1000*cache_entry->timeout) ?
+ NSCACHE_STATUS_ACTIVE:
+ NSCACHE_STATUS_EXPIRED) :
+ NSCACHE_STATUS_EMPTY) :
+ NSCACHE_STATUS_DISABLED);
+ snmp_set_var_typed_value(request->requestvb, ASN_INTEGER,
+ (u_char*)&status, sizeof(status));
+ break;
+
+ default:
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ }
+ }
+ break;
+
+
+ case MODE_SET_RESERVE1:
+ for (request=requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ if ( request->status != 0 ) {
+ return SNMP_ERR_NOERROR; /* Already got an error */
+ }
+ cache_entry = (netsnmp_cache*)netsnmp_extract_iterator_context(request);
+ table_info = netsnmp_extract_table_info(request);
+
+ switch (table_info->colnum) {
+ case NSCACHE_TIMEOUT:
+ if (!cache_entry) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_NOCREATION);
+ return SNMP_ERR_NOCREATION;
+ }
+ if ( request->requestvb->type != ASN_INTEGER ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (*request->requestvb->val.integer < 0 ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ break;
+
+ case NSCACHE_STATUS:
+ if (!cache_entry) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_NOCREATION);
+ return SNMP_ERR_NOCREATION;
+ }
+ if ( request->requestvb->type != ASN_INTEGER ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ status = *request->requestvb->val.integer;
+ if (!((status == NSCACHE_STATUS_ENABLED ) ||
+ (status == NSCACHE_STATUS_DISABLED ) ||
+ (status == NSCACHE_STATUS_EMPTY ))) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ break;
+
+ default:
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_NOCREATION);
+ return SNMP_ERR_NOCREATION; /* XXX - is this right ? */
+ continue;
+ }
+ }
+ break;
+
+
+ case MODE_SET_COMMIT:
+ for (request=requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ if ( request->status != 0 ) {
+ return SNMP_ERR_NOERROR; /* Already got an error */
+ }
+ cache_entry = (netsnmp_cache*)netsnmp_extract_iterator_context(request);
+ if (!cache_entry) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_COMMITFAILED);
+ return SNMP_ERR_COMMITFAILED; /* Shouldn't happen! */
+ }
+ table_info = netsnmp_extract_table_info(request);
+
+ switch (table_info->colnum) {
+ case NSCACHE_TIMEOUT:
+ cache_entry->timeout = *request->requestvb->val.integer;
+ /*
+ * check for auto repeat
+ */
+ if (cache_entry->timer_id) {
+ struct snmp_alarm * sa =
+ sa_find_specific(cache_entry->timer_id);
+ if (NULL != sa)
+ sa->t.tv_sec = cache_entry->timeout;
+ }
+ break;
+
+ case NSCACHE_STATUS:
+ switch (*request->requestvb->val.integer) {
+ case NSCACHE_STATUS_ENABLED:
+ cache_entry->enabled = 1;
+ break;
+ case NSCACHE_STATUS_DISABLED:
+ cache_entry->enabled = 0;
+ break;
+ case NSCACHE_STATUS_EMPTY:
+ cache_entry->free_cache(cache_entry, cache_entry->magic);
+ free(cache_entry->timestamp);
+ cache_entry->timestamp = NULL;
+ break;
+ }
+ break;
+ }
+ }
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsCache.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsCache.h
new file mode 100644
index 0000000000..ab63bc9db8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsCache.h
@@ -0,0 +1,22 @@
+#ifndef NSCACHE_H
+#define NSCACHE_H
+
+/*
+ * function declarations
+ */
+void init_nsCache(void);
+
+/*
+ * Handlers for the scalar objects
+ */
+Netsnmp_Node_Handler handle_nsCacheTimeout;
+Netsnmp_Node_Handler handle_nsCacheEnabled;
+
+/*
+ * Handler and iterators for the cache table
+ */
+Netsnmp_Node_Handler handle_nsCacheTable;
+Netsnmp_First_Data_Point get_first_cache_entry;
+Netsnmp_Next_Data_Point get_next_cache_entry;
+
+#endif /* NSCACHE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsDebug.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsDebug.c
new file mode 100644
index 0000000000..4e92f9d9fb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsDebug.c
@@ -0,0 +1,459 @@
+#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/agent/scalar.h>
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include "agent/nsDebug.h"
+#include "util_funcs.h"
+
+
+
+/*
+ * OIDs for the debugging control scalar objects
+ *
+ * Note that these we're registering the full object rather
+ * than the (sole) valid instance in each case, in order
+ * to handle requests for invalid instances properly.
+ */
+oid nsDebugEnabled_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 1, 7, 1, 1};
+oid nsDebugOutputAll_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 1, 7, 1, 2};
+oid nsDebugDumpPdu_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 1, 7, 1, 3};
+
+/*
+ * ... and for the token table.
+ */
+
+#define DBGTOKEN_PREFIX 2
+#define DBGTOKEN_ENABLED 3
+#define DBGTOKEN_STATUS 4
+oid nsDebugTokenTable_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 1, 7, 1, 4};
+
+
+void
+init_nsDebug(void)
+{
+ netsnmp_table_registration_info *table_info;
+ netsnmp_iterator_info *iinfo;
+
+ /*
+ * Register the scalar objects...
+ */
+ DEBUGMSGTL(("nsDebugScalars", "Initializing\n"));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration(
+ "nsDebugEnabled", handle_nsDebugEnabled,
+ nsDebugEnabled_oid, OID_LENGTH(nsDebugEnabled_oid),
+ HANDLER_CAN_RWRITE)
+ );
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration(
+ "nsDebugOutputAll", handle_nsDebugOutputAll,
+ nsDebugOutputAll_oid, OID_LENGTH(nsDebugOutputAll_oid),
+ HANDLER_CAN_RWRITE)
+ );
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration(
+ "nsDebugDumpPdu", handle_nsDebugDumpPdu,
+ nsDebugDumpPdu_oid, OID_LENGTH(nsDebugDumpPdu_oid),
+ HANDLER_CAN_RWRITE)
+ );
+
+ /*
+ * ... and the table.
+ * We need to define the column structure and indexing....
+ */
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ if (!table_info) {
+ return;
+ }
+ netsnmp_table_helper_add_indexes(table_info, ASN_PRIV_IMPLIED_OCTET_STR, 0);
+ table_info->min_column = DBGTOKEN_STATUS;
+ table_info->max_column = DBGTOKEN_STATUS;
+
+
+ /*
+ * .... and the iteration information ....
+ */
+ iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+ if (!iinfo) {
+ return;
+ }
+ iinfo->get_first_data_point = get_first_debug_entry;
+ iinfo->get_next_data_point = get_next_debug_entry;
+ iinfo->table_reginfo = table_info;
+
+
+ /*
+ * .... and register the table with the agent.
+ */
+ netsnmp_register_table_iterator(
+ netsnmp_create_handler_registration(
+ "tzDebugTable", handle_nsDebugTable,
+ nsDebugTokenTable_oid, OID_LENGTH(nsDebugTokenTable_oid),
+ HANDLER_CAN_RWRITE),
+ iinfo);
+}
+
+
+int
+handle_nsDebugEnabled(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ long enabled;
+ netsnmp_request_info *request=NULL;
+
+ switch (reqinfo->mode) {
+
+ case MODE_GET:
+ enabled = snmp_get_do_debugging();
+ if ( enabled==0 )
+ enabled=2; /* false */
+ for (request = requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ snmp_set_var_typed_value(request->requestvb, ASN_INTEGER,
+ (u_char*)&enabled, sizeof(enabled));
+ }
+ break;
+
+
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ if ( request->status != 0 ) {
+ return SNMP_ERR_NOERROR; /* Already got an error */
+ }
+ if ( request->requestvb->type != ASN_INTEGER ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (( *request->requestvb->val.integer != 1 ) &&
+ ( *request->requestvb->val.integer != 2 )) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ enabled = *requests->requestvb->val.integer;
+ if (enabled == 2 ) /* false */
+ enabled = 0;
+ snmp_set_do_debugging( enabled );
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+handle_nsDebugOutputAll(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ long enabled;
+ netsnmp_request_info *request=NULL;
+
+ switch (reqinfo->mode) {
+
+ case MODE_GET:
+ enabled = snmp_get_do_debugging();
+ if ( enabled==0 )
+ enabled=2; /* false */
+ for (request = requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ snmp_set_var_typed_value(request->requestvb, ASN_INTEGER,
+ (u_char*)&enabled, sizeof(enabled));
+ }
+ break;
+
+
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ if ( request->status != 0 ) {
+ return SNMP_ERR_NOERROR; /* Already got an error */
+ }
+ if ( request->requestvb->type != ASN_INTEGER ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (( *request->requestvb->val.integer != 1 ) &&
+ ( *request->requestvb->val.integer != 2 )) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ enabled = *requests->requestvb->val.integer;
+ if (enabled == 2 ) /* false */
+ enabled = 0;
+ snmp_set_do_debugging( enabled );
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+handle_nsDebugDumpPdu(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ long enabled;
+ netsnmp_request_info *request=NULL;
+
+ switch (reqinfo->mode) {
+
+ case MODE_GET:
+ enabled = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_DUMP_PACKET);
+ if ( enabled==0 )
+ enabled=2; /* false */
+ for (request = requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ snmp_set_var_typed_value(request->requestvb, ASN_INTEGER,
+ (u_char*)&enabled, sizeof(enabled));
+ }
+ break;
+
+
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ if ( request->status != 0 ) {
+ return SNMP_ERR_NOERROR; /* Already got an error */
+ }
+ if ( request->requestvb->type != ASN_INTEGER ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (( *request->requestvb->val.integer != 1 ) &&
+ ( *request->requestvb->val.integer != 2 )) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ enabled = *requests->requestvb->val.integer;
+ if (enabled == 2 ) /* false */
+ enabled = 0;
+ netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_DUMP_PACKET, enabled);
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+/*
+ * var_tzIntTableFixed():
+ * Handle the tzIntTable as a fixed table of NUMBER_TZ_ENTRIES rows,
+ * with the timezone offset hardwired to be the same as the index.
+ */
+
+netsnmp_variable_list *
+get_first_debug_entry(void **loop_context, void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ int i;
+
+ for (i=0; i<debug_num_tokens; i++) {
+ /* skip excluded til mib is updated */
+ if (dbg_tokens[i].token_name && (dbg_tokens[i].enabled != 2))
+ break;
+ }
+ if ( i==debug_num_tokens )
+ return NULL;
+
+ snmp_set_var_value(index, dbg_tokens[i].token_name,
+ strlen(dbg_tokens[i].token_name));
+ *loop_context = (void*)(intptr_t)i;
+ *data_context = (void*)&dbg_tokens[i];
+ return index;
+}
+
+netsnmp_variable_list *
+get_next_debug_entry(void **loop_context, void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ int i = (int)(intptr_t)*loop_context;
+
+ for (i++; i<debug_num_tokens; i++) {
+ /* skip excluded til mib is updated */
+ if (dbg_tokens[i].token_name && (dbg_tokens[i].enabled != 2))
+ break;
+ }
+ if ( i==debug_num_tokens )
+ return NULL;
+
+ snmp_set_var_value(index, dbg_tokens[i].token_name,
+ strlen(dbg_tokens[i].token_name));
+ *loop_context = (void*)(intptr_t)i;
+ *data_context = (void*)&dbg_tokens[i];
+ return index;
+}
+
+
+int
+handle_nsDebugTable(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ long status;
+ netsnmp_request_info *request =NULL;
+ netsnmp_table_request_info *table_info =NULL;
+ netsnmp_token_descr *debug_entry=NULL;
+
+ switch (reqinfo->mode) {
+
+ case MODE_GET:
+ for (request=requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ debug_entry = (netsnmp_token_descr*)
+ netsnmp_extract_iterator_context(request);
+ if (!debug_entry)
+ continue;
+ status = (debug_entry->enabled ? RS_ACTIVE : RS_NOTINSERVICE);
+ snmp_set_var_typed_value(request->requestvb, ASN_INTEGER,
+ (u_char*)&status, sizeof(status));
+ }
+ break;
+
+
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ if ( request->status != 0 ) {
+ return SNMP_ERR_NOERROR; /* Already got an error */
+ }
+ if ( request->requestvb->type != ASN_INTEGER ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ debug_entry = (netsnmp_token_descr*)
+ netsnmp_extract_iterator_context(request);
+ switch (*request->requestvb->val.integer) {
+ case RS_ACTIVE:
+ case RS_NOTINSERVICE:
+ /*
+ * These operations require an existing row
+ */
+ if (!debug_entry) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ break;
+
+ case RS_CREATEANDWAIT:
+ case RS_CREATEANDGO:
+ /*
+ * These operations assume the row doesn't already exist
+ */
+ if (debug_entry) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ break;
+
+ case RS_DESTROY:
+ /*
+ * This operation can work regardless
+ */
+ break;
+
+ case RS_NOTREADY:
+ default:
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ }
+ break;
+
+
+ case MODE_SET_COMMIT:
+ for (request = requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ if ( request->status != 0 ) {
+ return SNMP_ERR_NOERROR; /* Already got an error */
+ }
+
+ switch (*request->requestvb->val.integer) {
+ case RS_ACTIVE:
+ case RS_NOTINSERVICE:
+ /*
+ * Update the enabled field appropriately
+ */
+ debug_entry = (netsnmp_token_descr*)
+ netsnmp_extract_iterator_context(request);
+ debug_entry->enabled =
+ (*request->requestvb->val.integer == RS_ACTIVE);
+ break;
+
+ case RS_CREATEANDWAIT:
+ case RS_CREATEANDGO:
+ /*
+ * Create the entry, and set the enabled field appropriately
+ */
+ table_info = netsnmp_extract_table_info(request);
+ debug_register_tokens(table_info->indexes->val.string);
+#ifdef UMMMMM
+ if (*request->requestvb->val.integer == RS_CREATEANDWAIT) {
+ /* XXX - how to locate the entry ?? */
+ debug_entry->enabled = 0;
+ }
+#endif
+ break;
+
+ case RS_DESTROY:
+ /*
+ * XXX - there's no "remove" API :-(
+ */
+ debug_entry = (netsnmp_token_descr*)
+ netsnmp_extract_iterator_context(request);
+ if (debug_entry) {
+ debug_entry->enabled = 0;
+ free(debug_entry->token_name);
+ debug_entry->token_name = NULL;
+ }
+ break;
+ }
+ }
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsDebug.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsDebug.h
new file mode 100644
index 0000000000..55614ce831
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsDebug.h
@@ -0,0 +1,23 @@
+#ifndef NSDEBUG_H
+#define NSDEBUG_H
+
+/*
+ * function declarations
+ */
+void init_nsDebug(void);
+
+/*
+ * Handlers for the scalar objects
+ */
+Netsnmp_Node_Handler handle_nsDebugEnabled;
+Netsnmp_Node_Handler handle_nsDebugOutputAll;
+Netsnmp_Node_Handler handle_nsDebugDumpPdu;
+
+/*
+ * Handler and iterators for the debug table
+ */
+Netsnmp_Node_Handler handle_nsDebugTable;
+Netsnmp_First_Data_Point get_first_debug_entry;
+Netsnmp_Next_Data_Point get_next_debug_entry;
+
+#endif /* NSDEBUG_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsLogging.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsLogging.c
new file mode 100644
index 0000000000..a8563b37d5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsLogging.c
@@ -0,0 +1,469 @@
+#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/agent/scalar.h>
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/library/snmp_logging.h>
+#include "agent/nsLogging.h"
+#include "util_funcs.h"
+
+
+
+/*
+ * OID and columns for the logging table.
+ */
+
+#define NSLOGGING_TYPE 3
+#define NSLOGGING_MAXLEVEL 4
+#define NSLOGGING_STATUS 5
+
+oid nsLoggingTable_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 1, 7, 2, 1};
+
+
+void
+init_nsLogging(void)
+{
+ netsnmp_table_registration_info *table_info;
+ netsnmp_iterator_info *iinfo;
+
+ /*
+ * Register the table.
+ * We need to define the column structure and indexing....
+ */
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ if (!table_info) {
+ return;
+ }
+ netsnmp_table_helper_add_indexes(table_info, ASN_INTEGER,
+ ASN_PRIV_IMPLIED_OCTET_STR, 0);
+ table_info->min_column = NSLOGGING_TYPE;
+ table_info->max_column = NSLOGGING_STATUS;
+
+
+ /*
+ * .... and the iteration information ....
+ */
+ iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+ if (!iinfo) {
+ return;
+ }
+ iinfo->get_first_data_point = get_first_logging_entry;
+ iinfo->get_next_data_point = get_next_logging_entry;
+ iinfo->table_reginfo = table_info;
+
+
+ /*
+ * .... and register the table with the agent.
+ */
+ netsnmp_register_table_iterator(
+ netsnmp_create_handler_registration(
+ "tzLoggingTable", handle_nsLoggingTable,
+ nsLoggingTable_oid, OID_LENGTH(nsLoggingTable_oid),
+ HANDLER_CAN_RWRITE),
+ iinfo);
+}
+
+
+/*
+ * nsLoggingTable handling
+ */
+
+netsnmp_variable_list *
+get_first_logging_entry(void **loop_context, void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ long temp;
+ netsnmp_log_handler *logh_head = get_logh_head();
+ if ( !logh_head )
+ return NULL;
+
+ temp = logh_head->priority;
+ snmp_set_var_value(index, (u_char*)&temp,
+ sizeof(temp));
+ if ( logh_head->token )
+ snmp_set_var_value(index->next_variable, (const u_char*)logh_head->token,
+ strlen(logh_head->token));
+ else
+ snmp_set_var_value(index->next_variable, NULL, 0);
+ *loop_context = (void*)logh_head;
+ *data_context = (void*)logh_head;
+ return index;
+}
+
+netsnmp_variable_list *
+get_next_logging_entry(void **loop_context, void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ long temp;
+ netsnmp_log_handler *logh = (netsnmp_log_handler *)*loop_context;
+ logh = logh->next;
+
+ if ( !logh )
+ return NULL;
+
+ temp = logh->priority;
+ snmp_set_var_value(index, (u_char*)&temp,
+ sizeof(temp));
+ if ( logh->token )
+ snmp_set_var_value(index->next_variable, (const u_char*)logh->token,
+ strlen(logh->token));
+ else
+ snmp_set_var_value(index->next_variable, NULL, 0);
+ *loop_context = (void*)logh;
+ *data_context = (void*)logh;
+ return index;
+}
+
+
+int
+handle_nsLoggingTable(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ long temp;
+ netsnmp_request_info *request = NULL;
+ netsnmp_table_request_info *table_info = NULL;
+ netsnmp_log_handler *logh = NULL;
+ netsnmp_variable_list *idx = NULL;
+
+ switch (reqinfo->mode) {
+
+ case MODE_GET:
+ for (request=requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ logh = (netsnmp_log_handler*)netsnmp_extract_iterator_context(request);
+ table_info = netsnmp_extract_table_info(request);
+
+ switch (table_info->colnum) {
+ case NSLOGGING_TYPE:
+ if (!logh) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ temp = logh->type;
+ snmp_set_var_typed_value(request->requestvb, ASN_INTEGER,
+ (u_char*)&temp,
+ sizeof(temp));
+ break;
+
+ case NSLOGGING_MAXLEVEL:
+ if (!logh) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ temp = logh->pri_max;
+ snmp_set_var_typed_value(request->requestvb, ASN_INTEGER,
+ (u_char*)&temp,
+ sizeof(temp));
+ break;
+
+ case NSLOGGING_STATUS:
+ if (!logh) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ temp = (logh->type ?
+ (logh->enabled ?
+ RS_ACTIVE:
+ RS_NOTINSERVICE) :
+ RS_NOTREADY);
+ snmp_set_var_typed_value(request->requestvb, ASN_INTEGER,
+ (u_char*)&temp, sizeof(temp));
+ break;
+
+ default:
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ }
+ }
+ break;
+
+
+ case MODE_SET_RESERVE1:
+ for (request=requests; request; request=request->next) {
+ if ( request->status != 0 ) {
+ return SNMP_ERR_NOERROR; /* Already got an error */
+ }
+ logh = (netsnmp_log_handler*)netsnmp_extract_iterator_context(request);
+ table_info = netsnmp_extract_table_info(request);
+
+ switch (table_info->colnum) {
+ case NSLOGGING_TYPE:
+ if ( request->requestvb->type != ASN_INTEGER ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (*request->requestvb->val.integer < 0 ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ /*
+ * It's OK to create a new logging entry
+ * (either in one go, or built up using createAndWait)
+ * but it's not possible to change the type of an entry
+ * once it's been created.
+ */
+ if (logh && logh->type) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_NOTWRITABLE);
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+
+ case NSLOGGING_MAXLEVEL:
+ if ( request->requestvb->type != ASN_INTEGER ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (*request->requestvb->val.integer < 0 ||
+ *request->requestvb->val.integer > 7 ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ break;
+
+ case NSLOGGING_STATUS:
+ if ( request->requestvb->type != ASN_INTEGER ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_WRONGTYPE;
+ }
+ switch ( *request->requestvb->val.integer ) {
+ case RS_ACTIVE:
+ case RS_NOTINSERVICE:
+ /*
+ * Can only work on existing rows
+ */
+ if (!logh) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ break;
+
+ case RS_CREATEANDWAIT:
+ case RS_CREATEANDGO:
+ /*
+ * Can only work with new rows
+ */
+ if (logh) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+
+ /*
+ * Normally, we'd create the row at a later stage
+ * (probably during the RESERVE2 or ACTION passes)
+ *
+ * But we need to check that the values are
+ * consistent during the ACTION pass (which is the
+ * latest that an error can be safely handled),
+ * so the values all need to be set up before this
+ * (i.e. during the RESERVE2 pass)
+ * So the new row needs to be created before that
+ * in order to have somewhere to put them.
+ *
+ * That's why we're doing this here.
+ */
+ idx = table_info->indexes;
+ logh = netsnmp_register_loghandler(
+ /* not really, but we need a valid type */
+ NETSNMP_LOGHANDLER_STDOUT,
+ *idx->val.integer);
+ if (!logh) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_GENERR); /* ??? */
+ return SNMP_ERR_GENERR;
+ }
+ idx = idx->next_variable;
+ logh->type = 0;
+ logh->token = strdup(idx->val.string);
+ netsnmp_insert_iterator_context(request, (void*)logh);
+ break;
+
+ case RS_DESTROY:
+ /*
+ * Can work with new or existing rows
+ */
+ break;
+
+ case RS_NOTREADY:
+ default:
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGVALUE);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ break;
+
+ default:
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ return SNMP_NOSUCHOBJECT;
+ continue;
+ }
+ }
+ break;
+
+
+ case MODE_SET_RESERVE2:
+ for (request=requests; request; request=request->next) {
+ if ( request->status != 0 ) {
+ return SNMP_ERR_NOERROR; /* Already got an error */
+ }
+ logh = (netsnmp_log_handler*)netsnmp_extract_iterator_context(request);
+ table_info = netsnmp_extract_table_info(request);
+
+ switch (table_info->colnum) {
+ case NSLOGGING_TYPE:
+ /*
+ * If we're creating a row using createAndGo,
+ * we need to set the type early, so that we
+ * can validate it in the ACTION pass.
+ *
+ * Remember that we need to be able to reverse this
+ */
+ if ( logh )
+ logh->type = *request->requestvb->val.integer;
+ break;
+ /*
+ * Don't need to handle nsLogToken or nsLogStatus in this pass
+ */
+ }
+ }
+ break;
+
+ case MODE_SET_ACTION:
+ for (request=requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ if ( request->status != 0 ) {
+ return SNMP_ERR_NOERROR; /* Already got an error */
+ }
+ logh = (netsnmp_log_handler*)netsnmp_extract_iterator_context(request);
+ table_info = netsnmp_extract_table_info(request);
+
+ switch (table_info->colnum) {
+ case NSLOGGING_STATUS:
+ /*
+ * This is where we can check the internal consistency
+ * of the request. Basically, for a row to be marked
+ * 'active', then there needs to be a valid type value.
+ */
+ switch ( *request->requestvb->val.integer ) {
+ case RS_ACTIVE:
+ case RS_CREATEANDGO:
+ if ( !logh->type ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ break;
+ }
+ break;
+ /*
+ * Don't need to handle nsLogToken or nsLogType in this pass
+ */
+ }
+ }
+ break;
+
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ /*
+ * If any resources were allocated in either of the
+ * two RESERVE passes, they need to be released here,
+ * and any assignments (in RESERVE2) reversed.
+ *
+ * Nothing additional will have been done during ACTION
+ * so this same code can do for UNDO as well.
+ */
+ for (request=requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ logh = (netsnmp_log_handler*)netsnmp_extract_iterator_context(request);
+ table_info = netsnmp_extract_table_info(request);
+
+ switch (table_info->colnum) {
+ case NSLOGGING_TYPE:
+ /*
+ * If we've been setting the type, and the request
+ * has failed, then revert to an unset type.
+ *
+ * We need to be careful here - if the reason it failed is
+ * that the type was already set, then we shouldn't "undo"
+ * the assignment (since it won't actually have been made).
+ *
+ * Check the current value against the 'new' one. If they're
+ * the same, then this is probably a successful assignment,
+ * and the failure was elsewhere, so we need to undo it.
+ * (Or else there was an attempt to write the same value!)
+ */
+ if ( logh && logh->type == *request->requestvb->val.integer )
+ logh->type = 0;
+ break;
+
+ case NSLOGGING_STATUS:
+ temp = *request->requestvb->val.integer;
+ if ( logh && ( temp == RS_CREATEANDGO ||
+ temp == RS_CREATEANDWAIT)) {
+ netsnmp_remove_loghandler( logh );
+ }
+ break;
+ /*
+ * Don't need to handle nsLogToken in this pass
+ */
+ }
+ }
+ break;
+
+
+ case MODE_SET_COMMIT:
+ for (request=requests; request; request=request->next) {
+ if (request->processed != 0)
+ continue;
+ if ( request->status != 0 ) {
+ return SNMP_ERR_NOERROR; /* Already got an error */
+ }
+ logh = (netsnmp_log_handler*)netsnmp_extract_iterator_context(request);
+ if (!logh) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_ERR_COMMITFAILED);
+ return SNMP_ERR_COMMITFAILED; /* Shouldn't happen! */
+ }
+ table_info = netsnmp_extract_table_info(request);
+
+ switch (table_info->colnum) {
+ case NSLOGGING_MAXLEVEL:
+ logh->pri_max = *request->requestvb->val.integer;
+ break;
+
+ case NSLOGGING_STATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_ACTIVE:
+ case RS_CREATEANDGO:
+ logh->enabled = 1;
+ break;
+ case RS_NOTINSERVICE:
+ case RS_CREATEANDWAIT:
+ logh->enabled = 0;
+ break;
+ case RS_DESTROY:
+ netsnmp_remove_loghandler( logh );
+ break;
+ }
+ break;
+ }
+ }
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsLogging.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsLogging.h
new file mode 100644
index 0000000000..093feccaaf
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsLogging.h
@@ -0,0 +1,16 @@
+#ifndef NSLOGGING_H
+#define NSLOGGING_H
+
+/*
+ * function declarations
+ */
+void init_nsLogging(void);
+
+/*
+ * Handler and iterators for the logging table
+ */
+Netsnmp_Node_Handler handle_nsLoggingTable;
+Netsnmp_First_Data_Point get_first_logging_entry;
+Netsnmp_Next_Data_Point get_next_logging_entry;
+
+#endif /* NSLOGGING_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsModuleTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsModuleTable.c
new file mode 100644
index 0000000000..4f4ea00dee
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsModuleTable.c
@@ -0,0 +1,320 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.iterate.conf,v 1.5 2001/12/04 21:36:27 hardaker Exp $
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "nsModuleTable.h"
+
+void
+nsModuleTable_free(void *context, netsnmp_iterator_info *dont_care)
+{
+ free(context);
+}
+
+/** Initialize the nsModuleTable table by defining it's contents and how it's structured */
+void
+initialize_table_nsModuleTable(void)
+{
+ static oid nsModuleTable_oid[] =
+ { 1, 3, 6, 1, 4, 1, 8072, 1, 2, 1 };
+ netsnmp_table_registration_info *table_info;
+ netsnmp_handler_registration *my_handler;
+ netsnmp_iterator_info *iinfo;
+
+ /*
+ * create the table structure itself
+ */
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+
+ /*
+ * if your table is read only, it's easiest to change the
+ * HANDLER_CAN_RWRITE definition below to HANDLER_CAN_RONLY
+ */
+ my_handler = netsnmp_create_handler_registration("nsModuleTable",
+ nsModuleTable_handler,
+ nsModuleTable_oid,
+ OID_LENGTH
+ (nsModuleTable_oid),
+ HANDLER_CAN_RWRITE);
+
+ if (!my_handler || !table_info || !iinfo) {
+ if (my_handler)
+ netsnmp_handler_registration_free(my_handler);
+ SNMP_FREE(table_info);
+ SNMP_FREE(iinfo);
+ return; /* mallocs failed */
+ }
+
+ /***************************************************
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(table_info, ASN_OCTET_STR, /* context name */
+ ASN_OBJECT_ID, /* reg point */
+ ASN_INTEGER, /* priority */
+ 0);
+
+ table_info->min_column = 4;
+ table_info->max_column = 6;
+
+ /*
+ * iterator access routines
+ */
+ iinfo->get_first_data_point = nsModuleTable_get_first_data_point;
+ iinfo->get_next_data_point = nsModuleTable_get_next_data_point;
+ iinfo->free_loop_context_at_end = nsModuleTable_free;
+ iinfo->table_reginfo = table_info;
+
+ /***************************************************
+ * registering the table with the master agent
+ */
+ DEBUGMSGTL(("initialize_table_nsModuleTable",
+ "Registering table nsModuleTable as a table iterator\n"));
+ netsnmp_register_table_iterator(my_handler, iinfo);
+}
+
+/** Initialzies the nsModuleTable module */
+void
+init_nsModuleTable(void)
+{
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ initialize_table_nsModuleTable();
+}
+
+/** returns the first data point within the nsModuleTable table data.
+
+ Set the my_loop_context variable to the first data point structure
+ of your choice (from which you can find the next one). This could
+ be anything from the first node in a linked list, to an integer
+ pointer containing the beginning of an array variable.
+
+ Set the my_data_context variable to something to be returned to
+ you later that will provide you with the data to return in a given
+ row. This could be the same pointer as what my_loop_context is
+ set to, or something different.
+
+ The put_index_data variable contains a list of snmp variable
+ bindings, one for each index in your table. Set the values of
+ each appropriately according to the data matching the first row
+ and return the put_index_data variable at the end of the function.
+*/
+typedef struct context_tree_ptr_s {
+ netsnmp_subtree *tree;
+ subtree_context_cache *context_ptr;
+} context_tree_ptr;
+
+netsnmp_variable_list *
+nsModuleTable_get_first_data_point(void **my_loop_context,
+ void **my_data_context,
+ netsnmp_variable_list * put_index_data,
+ netsnmp_iterator_info *otherstuff)
+{
+
+ struct variable_list *vptr;
+ u_long ultmp;
+ context_tree_ptr *ctree;
+
+ ctree = SNMP_MALLOC_TYPEDEF(context_tree_ptr);
+
+ ctree->context_ptr = get_top_context_cache();
+ /* Skip empty context registrations */
+ while (!ctree->context_ptr->first_subtree) {
+ ctree->context_ptr = ctree->context_ptr->next;
+ if (!ctree->context_ptr) {
+ SNMP_FREE(ctree);
+ return NULL;
+ }
+ }
+ ctree->tree = ctree->context_ptr->first_subtree;
+
+ *my_loop_context = ctree;
+ *my_data_context = ctree->tree;
+
+ vptr = put_index_data;
+ snmp_set_var_value(vptr, (u_char *) ctree->context_ptr->context_name,
+ strlen(ctree->context_ptr->context_name));
+
+ vptr = vptr->next_variable;
+ snmp_set_var_value(vptr,
+ (u_char *)ctree->context_ptr->first_subtree->name_a,
+ ctree->context_ptr->first_subtree->namelen *
+ sizeof(oid));
+
+ ultmp = ctree->context_ptr->first_subtree->priority;
+ vptr = vptr->next_variable;
+ snmp_set_var_value(vptr, (u_char *) & ultmp, sizeof(ultmp));
+
+ return put_index_data;
+}
+
+/** functionally the same as nsModuleTable_get_first_data_point, but
+ my_loop_context has already been set to a previous value and should
+ be updated to the next in the list. For example, if it was a
+ linked list, you might want to cast it and the return
+ my_loop_context->next. The my_data_context pointer should be set
+ to something you need later and the indexes in put_index_data
+ updated again. */
+
+struct variable_list *
+nsModuleTable_get_next_data_point(void **my_loop_context,
+ void **my_data_context,
+ struct variable_list *put_index_data,
+ netsnmp_iterator_info *otherstuff)
+{
+
+ struct variable_list *vptr;
+ context_tree_ptr *ctree = (context_tree_ptr *) * my_loop_context;
+ u_long ultmp;
+
+ if (ctree->tree->next)
+ ctree->tree = ctree->tree->next;
+ else {
+ ctree->context_ptr = ctree->context_ptr->next;
+ if (!ctree->context_ptr) {
+ return NULL;
+ }
+ ctree->tree = ctree->context_ptr->first_subtree;
+ }
+
+ *my_data_context = ctree->tree;
+
+ vptr = put_index_data;
+ snmp_set_var_value(vptr, (u_char *) ctree->context_ptr->context_name,
+ strlen(ctree->context_ptr->context_name));
+
+ vptr = vptr->next_variable;
+ snmp_set_var_value(vptr, (u_char *) ctree->tree->name_a,
+ ctree->tree->namelen * sizeof(oid));
+
+ ultmp = ctree->tree->priority;
+ vptr = vptr->next_variable;
+ snmp_set_var_value(vptr, (u_char *) & ultmp, sizeof(ultmp));
+
+ return put_index_data;
+}
+
+/** handles requests for the nsModuleTable table, if anything else needs to be done */
+int
+nsModuleTable_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ netsnmp_table_request_info *table_info;
+ netsnmp_request_info *request;
+ netsnmp_variable_list *var;
+ netsnmp_subtree *tree;
+ u_long ultmp;
+ u_char modes[1];
+
+ for (request = requests; request; request = request->next) {
+ var = request->requestvb;
+ if (request->processed != 0)
+ continue;
+
+ /*
+ * perform anything here that you need to do. The request have
+ * already been processed by the master table_dataset handler, but
+ * this gives you chance to act on the request in some other way if
+ * need be.
+ */
+
+ /*
+ * the following extracts the my_data_context pointer set in the
+ * loop functions above. You can then use the results to help
+ * return data for the columns of the nsModuleTable table in
+ * question
+ */
+ tree = (netsnmp_subtree *)netsnmp_extract_iterator_context(request);
+ if (tree == NULL) {
+ if (reqinfo->mode == MODE_GET) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ /*
+ * XXX: no row existed, if you support creation and this is a
+ * set, start dealing with it here, else continue
+ */
+ }
+
+ /*
+ * extracts the information about the table from the request
+ */
+ table_info = netsnmp_extract_table_info(request);
+
+ /*
+ * table_info->colnum contains the column number requested
+ */
+ /*
+ * table_info->indexes contains a linked list of snmp variable
+ * bindings for the indexes of the table. Values in the list have
+ * been set corresponding to the indexes of the request
+ */
+ if (table_info == NULL) {
+ continue;
+ }
+
+ switch (reqinfo->mode) {
+ /*
+ * the table_iterator helper should change all GETNEXTs into
+ * GETs for you automatically, so you don't have to worry
+ * about the GETNEXT case. Only GETs and SETs need to be
+ * dealt with here
+ */
+ case MODE_GET:
+ switch (table_info->colnum) {
+ case COLUMN_NSMODULENAME:
+ if (tree->reginfo->handlerName) {
+ snmp_set_var_typed_value(var, ASN_OCTET_STR,
+ tree->reginfo->handlerName,
+ strlen(tree->reginfo->handlerName));
+ } else {
+ snmp_set_var_typed_value(var, ASN_OCTET_STR, "", 0);
+ }
+ break;
+
+ case COLUMN_NSMODULEMODES:
+ /*
+ * basically, these BITS needs to be inverted in order
+ */
+ modes[0] =
+ ((HANDLER_CAN_GETANDGETNEXT & tree->reginfo->
+ modes) << 7) | ((HANDLER_CAN_SET & tree->reginfo->
+ modes) << 5) | ((HANDLER_CAN_GETBULK
+ & tree->reginfo->
+ modes) << 3);
+ /* yuck */
+ snmp_set_var_typed_value(var, ASN_OCTET_STR, modes, 1);
+ break;
+
+ case COLUMN_NSMODULETIMEOUT:
+ ultmp = tree->timeout;
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (u_char *) & ultmp,
+ sizeof(u_long));
+ break;
+
+ default:
+ /*
+ * We shouldn't get here
+ */
+ snmp_log(LOG_ERR,
+ "problem encountered in nsModuleTable_handler: unknown column\n");
+ }
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "problem encountered in nsModuleTable_handler: unsupported mode\n");
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsModuleTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsModuleTable.h
new file mode 100644
index 0000000000..2a0e63c19b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsModuleTable.h
@@ -0,0 +1,27 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.iterate.conf,v 1.5 2001/12/04 21:36:27 hardaker Exp $
+ */
+#ifndef NSMODULETABLE_H
+#define NSMODULETABLE_H
+
+/*
+ * function declarations
+ */
+void init_nsModuleTable(void);
+void initialize_table_nsModuleTable(void);
+Netsnmp_Node_Handler nsModuleTable_handler;
+
+Netsnmp_First_Data_Point nsModuleTable_get_first_data_point;
+Netsnmp_Next_Data_Point nsModuleTable_get_next_data_point;
+
+/*
+ * column number definitions for table nsModuleTable
+ */
+#define COLUMN_NSMCONTEXTNAME 1
+#define COLUMN_NSMREGISTRATIONPOINT 2
+#define COLUMN_NSMREGISTRATIONPRIORITY 3
+#define COLUMN_NSMODULENAME 4
+#define COLUMN_NSMODULEMODES 5
+#define COLUMN_NSMODULETIMEOUT 6
+#endif /* NSMODULETABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsTransactionTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsTransactionTable.c
new file mode 100644
index 0000000000..71f41887f7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsTransactionTable.c
@@ -0,0 +1,248 @@
+/*
+ * Note: this file originally auto-generated by mib2c
+ */
+
+#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/agent/table.h>
+#include <net-snmp/agent/table_iterator.h>
+#include "nsTransactionTable.h"
+
+/** Initialize the nsTransactionTable table by defining it's contents
+ and how it's structured */
+void
+initialize_table_nsTransactionTable(void)
+{
+ static oid nsTransactionTable_oid[] =
+ { 1, 3, 6, 1, 4, 1, 8072, 1, 8, 1 };
+ size_t nsTransactionTable_oid_len =
+ OID_LENGTH(nsTransactionTable_oid);
+ netsnmp_table_registration_info *table_info;
+ netsnmp_handler_registration *my_handler;
+ netsnmp_iterator_info *iinfo;
+
+ /*
+ * create the table structure itself
+ */
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+
+ /*
+ * if your table is read only, it's easiest to change the
+ * HANDLER_CAN_RWRITE definition below to HANDLER_CAN_RONLY
+ */
+ my_handler = netsnmp_create_handler_registration("nsTransactionTable",
+ nsTransactionTable_handler,
+ nsTransactionTable_oid,
+ nsTransactionTable_oid_len,
+ HANDLER_CAN_RONLY);
+
+ if (!my_handler || !table_info || !iinfo) {
+ if (my_handler)
+ netsnmp_handler_registration_free(my_handler);
+ SNMP_FREE(table_info);
+ SNMP_FREE(iinfo);
+ return; /* mallocs failed */
+ }
+
+ /***************************************************
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_index(table_info, ASN_INTEGER); /* index:
+ * * nsTransactionID
+ */
+
+ table_info->min_column = 2;
+ table_info->max_column = 2;
+ iinfo->get_first_data_point = nsTransactionTable_get_first_data_point;
+ iinfo->get_next_data_point = nsTransactionTable_get_next_data_point;
+ iinfo->table_reginfo = table_info;
+
+ /***************************************************
+ * registering the table with the master agent
+ */
+ DEBUGMSGTL(("initialize_table_nsTransactionTable",
+ "Registering table nsTransactionTable as a table iterator\n"));
+ netsnmp_register_table_iterator(my_handler, iinfo);
+}
+
+/** Initialzies the nsTransactionTable module */
+void
+init_nsTransactionTable(void)
+{
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ initialize_table_nsTransactionTable();
+}
+
+/** returns the first data point within the nsTransactionTable table data.
+
+ Set the my_loop_context variable to the first data point structure
+ of your choice (from which you can find the next one). This could
+ be anything from the first node in a linked list, to an integer
+ pointer containing the beginning of an array variable.
+
+ Set the my_data_context variable to something to be returned to
+ you later that will provide you with the data to return in a given
+ row. This could be the same pointer as what my_loop_context is
+ set to, or something different.
+
+ The put_index_data variable contains a list of snmp variable
+ bindings, one for each index in your table. Set the values of
+ each appropriately according to the data matching the first row
+ and return the put_index_data variable at the end of the function.
+*/
+extern netsnmp_agent_session *agent_delegated_list;
+
+netsnmp_variable_list *
+nsTransactionTable_get_first_data_point(void **my_loop_context,
+ void **my_data_context,
+ netsnmp_variable_list
+ * put_index_data,
+ netsnmp_iterator_info *iinfo)
+{
+
+ netsnmp_variable_list *vptr;
+
+ if (!agent_delegated_list)
+ return NULL;
+
+ *my_loop_context = (void *) agent_delegated_list;
+ *my_data_context = (void *) agent_delegated_list;
+
+ vptr = put_index_data;
+
+ snmp_set_var_value(vptr,
+ (u_char *) & agent_delegated_list->pdu->transid,
+ sizeof(agent_delegated_list->pdu->transid));
+
+ return put_index_data;
+}
+
+/** functionally the same as nsTransactionTable_get_first_data_point, but
+ my_loop_context has already been set to a previous value and should
+ be updated to the next in the list. For example, if it was a
+ linked list, you might want to cast it and the return
+ my_loop_context->next. The my_data_context pointer should be set
+ to something you need later and the indexes in put_index_data
+ updated again. */
+
+netsnmp_variable_list *
+nsTransactionTable_get_next_data_point(void **my_loop_context,
+ void **my_data_context,
+ netsnmp_variable_list
+ * put_index_data,
+ netsnmp_iterator_info *iinfo)
+{
+
+ netsnmp_variable_list *vptr;
+ netsnmp_agent_session *alist = (netsnmp_agent_session *)
+ *my_loop_context;
+
+ if (!alist->next)
+ return NULL;
+
+ alist = alist->next;
+
+ *my_loop_context = (void *) alist;
+ *my_data_context = (void *) alist;
+
+ vptr = put_index_data;
+
+ snmp_set_var_value(vptr, (u_char *) & alist->pdu->transid,
+ sizeof(alist->pdu->transid));
+ return put_index_data;
+}
+
+/** handles requests for the nsTransactionTable table, if anything
+ else needs to be done */
+int
+nsTransactionTable_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ netsnmp_table_request_info *table_info;
+ netsnmp_variable_list *var;
+ netsnmp_agent_session *asp;
+
+ for (; requests; requests = requests->next) {
+ var = requests->requestvb;
+ if (requests->processed != 0)
+ continue;
+
+ /*
+ * perform anything here that you need to do. The requests have
+ * already been processed by the master table_dataset handler, but
+ * this gives you chance to act on the request in some other way if
+ * need be.
+ */
+
+ /*
+ * the following extracts the my_data_context pointer set in the
+ * loop functions above. You can then use the results to help
+ * return data for the columns of the nsTransactionTable table in
+ * question
+ */
+ asp =
+ (netsnmp_agent_session *)
+ netsnmp_extract_iterator_context(requests);
+ if (asp == NULL) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_NOSUCHINSTANCE);
+ }
+
+ /*
+ * extracts the information about the table from the request
+ */
+ table_info = netsnmp_extract_table_info(requests);
+
+ /*
+ * table_info->colnum contains the column number requested
+ */
+ /*
+ * table_info->indexes contains a linked list of snmp variable
+ * bindings for the indexes of the table. Values in the list have
+ * been set corresponding to the indexes of the request
+ */
+ if (table_info == NULL) {
+ continue;
+ }
+
+ switch (reqinfo->mode) {
+ /*
+ * the table_iterator helper should change all GETNEXTs into
+ * GETs for you automatically, so you don't have to worry
+ * about the GETNEXT case. Only GETs and SETs need to be
+ * dealt with here
+ */
+ case MODE_GET:
+ switch (table_info->colnum) {
+
+ case COLUMN_NSTRANSACTIONMODE:
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (u_char *) & asp->mode,
+ sizeof(asp->mode));
+ break;
+
+ default:
+ /*
+ * We shouldn't get here
+ */
+ snmp_log(LOG_ERR,
+ "problem encountered in nsTransactionTable_handler: unknown column\n");
+ }
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "problem encountered in nsTransactionTable_handler: unsupported mode\n");
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsTransactionTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsTransactionTable.h
new file mode 100644
index 0000000000..db997dfced
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsTransactionTable.h
@@ -0,0 +1,21 @@
+/*
+ * Note: this file originally auto-generated by mib2c
+ */
+#ifndef NSTRANSACTIONTABLE_H
+#define NSTRANSACTIONTABLE_H
+
+/*
+ * function declarations
+ */
+void init_nsTransactionTable(void);
+void initialize_table_nsTransactionTable(void);
+Netsnmp_Node_Handler nsTransactionTable_handler;
+Netsnmp_First_Data_Point nsTransactionTable_get_first_data_point;
+Netsnmp_Next_Data_Point nsTransactionTable_get_next_data_point;
+
+/*
+ * column number definitions for table nsTransactionTable
+ */
+#define COLUMN_NSTRANSACTIONID 1
+#define COLUMN_NSTRANSACTIONMODE 2
+#endif /* NSTRANSACTIONTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsVacmAccessTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsVacmAccessTable.c
new file mode 100644
index 0000000000..599bf80071
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsVacmAccessTable.c
@@ -0,0 +1,339 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.iterate.conf,v 5.17 2005/05/09 08:13:45 dts12 Exp $
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/library/vacm.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "nsVacmAccessTable.h"
+
+/** Initializes the nsVacmAccessTable module */
+void
+init_register_nsVacm_context(const char *context)
+{
+ /*
+ * Initialize the nsVacmAccessTable table by defining its
+ * contents and how it's structured
+ */
+ static oid nsVacmAccessTable_oid[] = { 1,3,6,1,4,1,8072,1,9,1 };
+ size_t nsVacmAccessTable_oid_len = OID_LENGTH(nsVacmAccessTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_iterator_info *iinfo;
+ netsnmp_table_registration_info *table_info;
+
+ reg = netsnmp_create_handler_registration("nsVacmAccessTable",
+ nsVacmAccessTable_handler,
+ nsVacmAccessTable_oid,
+ nsVacmAccessTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ ASN_OCTET_STR, /* index: vacmGroupName */
+ ASN_OCTET_STR, /* index: vacmAccessContextPrefix */
+ ASN_INTEGER, /* index: vacmAccessSecurityModel */
+ ASN_INTEGER, /* index: vacmAccessSecurityLevel */
+ ASN_OCTET_STR, /* index: nsVacmAuthType */
+ 0);
+ table_info->min_column = COLUMN_NSVACMCONTEXTMATCH;
+ table_info->max_column = COLUMN_NSVACMACCESSSTATUS;
+
+ iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+ iinfo->get_first_data_point = nsVacmAccessTable_get_first_data_point;
+ iinfo->get_next_data_point = nsVacmAccessTable_get_next_data_point;
+ iinfo->table_reginfo = table_info;
+
+ if ( context && context[0] )
+ reg->contextName = strdup(context);
+
+ netsnmp_register_table_iterator(reg, iinfo);
+}
+
+void
+init_nsVacmAccessTable(void)
+{
+ init_register_nsVacm_context("");
+}
+
+
+/*
+ * Iterator hook routines
+ */
+static int nsViewIdx; /* This should really be handled via the 'loop_context'
+ parameter, but it's easier (read lazier) to use a
+ global variable as well. Bad David! */
+
+netsnmp_variable_list *
+nsVacmAccessTable_get_first_data_point(void **my_loop_context,
+ void **my_data_context,
+ netsnmp_variable_list *put_index_data,
+ netsnmp_iterator_info *mydata)
+{
+ vacm_scanAccessInit();
+ *my_loop_context = vacm_scanAccessNext();
+ nsViewIdx = 0;
+ return nsVacmAccessTable_get_next_data_point(my_loop_context,
+ my_data_context,
+ put_index_data, mydata);
+}
+
+netsnmp_variable_list *
+nsVacmAccessTable_get_next_data_point(void **my_loop_context,
+ void **my_data_context,
+ netsnmp_variable_list *put_index_data,
+ netsnmp_iterator_info *mydata)
+{
+ struct vacm_accessEntry *entry =
+ (struct vacm_accessEntry *) *my_loop_context;
+ netsnmp_variable_list *idx;
+ int len;
+ char *cp;
+
+newView:
+ idx = put_index_data;
+ if ( nsViewIdx == VACM_MAX_VIEWS ) {
+ entry = vacm_scanAccessNext();
+ nsViewIdx = 0;
+ }
+ if (entry) {
+ len = entry->groupName[0];
+ snmp_set_var_value(idx, (u_char *)entry->groupName+1, len);
+ idx = idx->next_variable;
+ len = entry->contextPrefix[0];
+ snmp_set_var_value(idx, (u_char *)entry->contextPrefix+1, len);
+ idx = idx->next_variable;
+ snmp_set_var_value(idx, (u_char *)&entry->securityModel,
+ sizeof(entry->securityModel));
+ idx = idx->next_variable;
+ snmp_set_var_value(idx, (u_char *)&entry->securityLevel,
+ sizeof(entry->securityLevel));
+ /*
+ * Find the next valid authType view - skipping unused entries
+ */
+ idx = idx->next_variable;
+ for (; nsViewIdx < VACM_MAX_VIEWS; nsViewIdx++) {
+ if ( entry->views[ nsViewIdx ][0] )
+ break;
+ }
+ if ( nsViewIdx == VACM_MAX_VIEWS )
+ goto newView;
+ cp = se_find_label_in_slist(VACM_VIEW_ENUM_NAME, nsViewIdx++);
+ DEBUGMSGTL(("nsVacm", "nextDP %s:%s (%d)\n", entry->groupName+1, cp, nsViewIdx-1));
+ snmp_set_var_value(idx, (u_char *)cp, strlen(cp));
+ idx = idx->next_variable;
+ *my_data_context = (void *) entry;
+ *my_loop_context = (void *) entry;
+ return put_index_data;
+ } else {
+ return NULL;
+ }
+}
+
+
+/** handles requests for the nsVacmAccessTable table */
+int
+nsVacmAccessTable_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_variable_list *idx;
+ struct vacm_accessEntry *entry;
+ char atype[20];
+ int viewIdx, ret;
+ char *gName, *cPrefix;
+ int model, level;
+
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct vacm_accessEntry *)
+ netsnmp_extract_iterator_context(request);
+ table_info = netsnmp_extract_table_info(request);
+
+ /* Extract the authType token from the list of indexes */
+ idx = table_info->indexes->next_variable->next_variable->next_variable->next_variable;
+ memset(atype, 0, sizeof(atype));
+ strncpy(atype, (char *)idx->val.string, idx->val_len);
+ viewIdx = se_find_value_in_slist(VACM_VIEW_ENUM_NAME, atype);
+ DEBUGMSGTL(("nsVacm", "GET %s (%d)\n", idx->val.string, viewIdx));
+
+ if (!entry)
+ continue;
+
+ switch (table_info->colnum) {
+ case COLUMN_NSVACMCONTEXTMATCH:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->contextMatch);
+ break;
+ case COLUMN_NSVACMVIEWNAME:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *)entry->views[ viewIdx ],
+ strlen(entry->views[ viewIdx ]));
+ break;
+ case COLUMN_VACMACCESSSTORAGETYPE:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->storageType);
+ break;
+ case COLUMN_NSVACMACCESSSTATUS:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->status);
+ break;
+ }
+ }
+ break;
+
+ /*
+ * Write-support
+ */
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request = request->next) {
+ entry = (struct vacm_accessEntry *)
+ netsnmp_extract_iterator_context(request);
+ table_info = netsnmp_extract_table_info(request);
+ ret = SNMP_ERR_NOERROR;
+
+ switch (table_info->colnum) {
+ case COLUMN_NSVACMCONTEXTMATCH:
+ ret = netsnmp_check_vb_int_range(request->requestvb, 1, 2);
+ break;
+ case COLUMN_NSVACMVIEWNAME:
+ ret = netsnmp_check_vb_type_and_max_size(request->requestvb,
+ ASN_OCTET_STR,
+ VACM_MAX_STRING);
+ break;
+ case COLUMN_VACMACCESSSTORAGETYPE:
+ ret = netsnmp_check_vb_storagetype(request->requestvb,
+ (/*entry ? entry->storageType :*/ SNMP_STORAGE_NONE));
+ break;
+ case COLUMN_NSVACMACCESSSTATUS:
+ /*
+ * The usual 'check_vb_rowstatus' call is too simplistic
+ * to be used here. Because we're implementing a table
+ * within an existing table, it's quite possible for a
+ * the vacmAccessTable entry to exist, even if this is
+ * a "new" nsVacmAccessEntry.
+ *
+ * We can check that the value being assigned is suitable
+ * for a RowStatus syntax object, but the transition
+ * checks need to be done explicitly.
+ */
+ ret = netsnmp_check_vb_rowstatus_value(request->requestvb);
+ if ( ret != SNMP_ERR_NOERROR )
+ break;
+
+ /*
+ * Extract the authType token from the list of indexes
+ */
+ idx = table_info->indexes->next_variable->next_variable->next_variable->next_variable;
+ memset(atype, 0, sizeof(atype));
+ strncpy(atype, (char *)idx->val.string, idx->val_len);
+ viewIdx = se_find_value_in_slist(VACM_VIEW_ENUM_NAME, atype);
+ if ( viewIdx < 0 ) {
+ ret = SNMP_ERR_NOCREATION;
+ break;
+ }
+ switch ( *request->requestvb->val.integer ) {
+ case RS_ACTIVE:
+ case RS_NOTINSERVICE:
+ /* Check that this particular view is already set */
+ if ( !entry || !entry->views[viewIdx][0] )
+ ret = SNMP_ERR_INCONSISTENTVALUE;
+ break;
+ case RS_CREATEANDWAIT:
+ case RS_CREATEANDGO:
+ /* Check that this particular view is not yet set */
+ if ( entry && entry->views[viewIdx][0] )
+ ret = SNMP_ERR_INCONSISTENTVALUE;
+ break;
+ }
+ break;
+ } /* switch(colnum) */
+ if ( ret != SNMP_ERR_NOERROR ) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ for (request = requests; request; request = request->next) {
+ entry = (struct vacm_accessEntry *)
+ netsnmp_extract_iterator_context(request);
+ table_info = netsnmp_extract_table_info(request);
+
+ switch (table_info->colnum) {
+ case COLUMN_NSVACMACCESSSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ if (!entry) {
+ idx = table_info->indexes; gName = (char*)idx->val.string;
+ idx = idx->next_variable; cPrefix = (char*)idx->val.string;
+ idx = idx->next_variable; model = *idx->val.integer;
+ idx = idx->next_variable; level = *idx->val.integer;
+ entry = vacm_createAccessEntry( gName, cPrefix, model, level );
+ entry->storageType = ST_NONVOLATILE;
+ netsnmp_insert_iterator_context(request, (void*)entry);
+ }
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ /* XXX - TODO */
+ break;
+
+ case MODE_SET_ACTION:
+ /* ??? Empty ??? */
+ break;
+
+ case MODE_SET_COMMIT:
+ for (request = requests; request; request = request->next) {
+ entry = (struct vacm_accessEntry *)
+ netsnmp_extract_iterator_context(request);
+ table_info = netsnmp_extract_table_info(request);
+ if ( !entry )
+ continue; /* Shouldn't happen */
+
+ /* Extract the authType token from the list of indexes */
+ idx = table_info->indexes->next_variable->next_variable->next_variable->next_variable;
+ memset(atype, 0, sizeof(atype));
+ strncpy(atype, (char *)idx->val.string, idx->val_len);
+ viewIdx = se_find_value_in_slist(VACM_VIEW_ENUM_NAME, atype);
+
+ switch (table_info->colnum) {
+ case COLUMN_NSVACMCONTEXTMATCH:
+ entry->contextMatch = *request->requestvb->val.integer;
+ break;
+ case COLUMN_NSVACMVIEWNAME:
+ memset( entry->views[viewIdx], 0, VACMSTRINGLEN );
+ memcpy( entry->views[viewIdx], request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_VACMACCESSSTORAGETYPE:
+ entry->storageType = *request->requestvb->val.integer;
+ break;
+ case COLUMN_NSVACMACCESSSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_DESTROY:
+ memset( entry->views[viewIdx], 0, VACMSTRINGLEN );
+ break;
+ }
+ break;
+ }
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsVacmAccessTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsVacmAccessTable.h
new file mode 100644
index 0000000000..e7a7e2090e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent/nsVacmAccessTable.h
@@ -0,0 +1,27 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.iterate.conf,v 5.17 2005/05/09 08:13:45 dts12 Exp $
+ */
+#ifndef NSVACMACCESSTABLE_H
+#define NSVACMACCESSTABLE_H
+
+config_add_mib(NET-SNMP-VACM-MIB)
+
+/*
+ * function declarations
+ */
+void init_nsVacmAccessTable(void);
+void initialize_table_nsVacmAccessTable(void);
+Netsnmp_Node_Handler nsVacmAccessTable_handler;
+Netsnmp_First_Data_Point nsVacmAccessTable_get_first_data_point;
+Netsnmp_Next_Data_Point nsVacmAccessTable_get_next_data_point;
+
+/*
+ * column number definitions for table nsVacmAccessTable
+ */
+#define COLUMN_NSVACMTOKEN 1
+#define COLUMN_NSVACMCONTEXTMATCH 2
+#define COLUMN_NSVACMVIEWNAME 3
+#define COLUMN_VACMACCESSSTORAGETYPE 4
+#define COLUMN_NSVACMACCESSSTATUS 5
+#endif /* NSVACMACCESSTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agent_mibs.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent_mibs.h
new file mode 100644
index 0000000000..8c0de1c2a4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agent_mibs.h
@@ -0,0 +1,7 @@
+config_require(agent/nsTransactionTable)
+config_require(agent/nsModuleTable)
+config_require(agent/nsDebug)
+config_require(agent/nsCache)
+config_require(agent/nsLogging)
+config_require(agent/nsVacmAccessTable)
+config_add_mib(NET-SNMP-AGENT-MIB)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx.h
new file mode 100644
index 0000000000..de47fa8e89
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx.h
@@ -0,0 +1,6 @@
+#ifndef _AGENTX_MIBGROUP_H
+#define _AGENTX_MIBGROUP_H
+
+config_require(agentx/master)
+config_require(agentx/subagent)
+#endif /* _AGENTX_MIBGROUP_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/agentx_config.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/agentx_config.c
new file mode 100644
index 0000000000..90901ecf3c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/agentx_config.c
@@ -0,0 +1,251 @@
+/*
+ * AgentX Configuration
+ */
+#include <net-snmp/net-snmp-config.h>
+
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#if HAVE_PWD_H
+#include <pwd.h>
+#endif
+#if HAVE_GRP_H
+#include <grp.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "snmpd.h"
+#include "agentx/agentx_config.h"
+#include "agentx/protocol.h"
+
+/* ---------------------------------------------------------------------
+ *
+ * Common master and sub-agent
+ */
+void
+agentx_parse_agentx_socket(const char *token, char *cptr)
+{
+ DEBUGMSGTL(("agentx/config", "port spec: %s\n", cptr));
+ netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_X_SOCKET, cptr);
+}
+
+/* ---------------------------------------------------------------------
+ *
+ * Master agent
+ */
+#ifdef USING_AGENTX_MASTER_MODULE
+void
+agentx_parse_master(const char *token, char *cptr)
+{
+ int i = -1;
+ char buf[BUFSIZ];
+
+ if (!strcmp(cptr, "agentx") ||
+ !strcmp(cptr, "all") ||
+ !strcmp(cptr, "yes") || !strcmp(cptr, "on")) {
+ i = 1;
+ snmp_log(LOG_INFO, "Turning on AgentX master support.\n");
+ } else if (!strcmp(cptr, "no") || !strcmp(cptr, "off"))
+ i = 0;
+ else
+ i = atoi(cptr);
+
+ if (i < 0 || i > 1) {
+ sprintf(buf, "master '%s' unrecognised", cptr);
+ config_perror(buf);
+ } else
+ netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_AGENTX_MASTER, i);
+}
+
+void
+agentx_parse_agentx_perms(const char *token, char *cptr)
+{
+ char *socket_perm, *dir_perm, *socket_user, *socket_group;
+ int uid = -1;
+ int gid = -1;
+ int s_perm = -1;
+ int d_perm = -1;
+ char *st;
+#if HAVE_GETPWNAM && HAVE_PWD_H
+ struct passwd *pwd;
+#endif
+#if HAVE_GETGRNAM && HAVE_GRP_H
+ struct group *grp;
+#endif
+
+ DEBUGMSGTL(("agentx/config", "port permissions: %s\n", cptr));
+ socket_perm = strtok_r(cptr, " \t", &st);
+ dir_perm = strtok_r(NULL, " \t", &st);
+ socket_user = strtok_r(NULL, " \t", &st);
+ socket_group = strtok_r(NULL, " \t", &st);
+
+ if (socket_perm) {
+ s_perm = strtol(socket_perm, NULL, 8);
+ netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCK_PERM, s_perm);
+ DEBUGMSGTL(("agentx/config", "socket permissions: %o (%d)\n",
+ s_perm, s_perm));
+ }
+ if (dir_perm) {
+ d_perm = strtol(dir_perm, NULL, 8);
+ netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_DIR_PERM, d_perm);
+ DEBUGMSGTL(("agentx/config", "directory permissions: %o (%d)\n",
+ d_perm, d_perm));
+ }
+
+ /*
+ * Try to handle numeric UIDs or user names for the socket owner
+ */
+ if (socket_user) {
+ uid = atoi(socket_user);
+ if ( uid == 0 ) {
+#if HAVE_GETPWNAM && HAVE_PWD_H
+ pwd = getpwnam( socket_user );
+ if (pwd)
+ uid = pwd->pw_uid;
+ else
+#endif
+ snmp_log(LOG_WARNING, "Can't identify AgentX socket user (%s).\n", socket_user);
+ }
+ if ( uid != 0 )
+ netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCK_USER, uid);
+ DEBUGMSGTL(("agentx/config", "socket owner: %s (%d)\n",
+ socket_user, uid));
+ }
+
+ /*
+ * and similarly for the socket group ownership
+ */
+ if (socket_group) {
+ gid = atoi(socket_group);
+ if ( gid == 0 ) {
+#if HAVE_GETGRNAM && HAVE_GRP_H
+ grp = getgrnam( socket_group );
+ if (grp)
+ gid = grp->gr_gid;
+ else
+#endif
+ snmp_log(LOG_WARNING, "Can't identify AgentX socket group (%s).\n", socket_group);
+ }
+ if ( gid != 0 )
+ netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCK_GROUP, gid);
+ DEBUGMSGTL(("agentx/config", "socket group: %s (%d)\n",
+ socket_group, gid));
+ }
+}
+
+void
+agentx_parse_agentx_timeout(const char *token, char *cptr)
+{
+ int x = atoi(cptr);
+ DEBUGMSGTL(("agentx/config/timeout", "%s\n", cptr));
+ netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_AGENTX_TIMEOUT, x * ONE_SEC);
+}
+
+void
+agentx_parse_agentx_retries(const char *token, char *cptr)
+{
+ int x = atoi(cptr);
+ DEBUGMSGTL(("agentx/config/retries", "%s\n", cptr));
+ netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_AGENTX_RETRIES, x);
+}
+#endif /* USING_AGENTX_MASTER_MODULE */
+
+/* ---------------------------------------------------------------------
+ *
+ * Sub-agent
+ */
+
+
+/* ---------------------------------------------------------------------
+ *
+ * Utility support routines
+ */
+void
+agentx_register_config_handler(const char *token,
+ void (*parser) (const char *, char *),
+ void (*releaser) (void), const char *help)
+{
+ DEBUGMSGTL(("agentx_register_app_config_handler",
+ "registering .conf token for \"%s\"\n", token));
+ register_config_handler(":agentx", token, parser, releaser, help);
+}
+
+void
+agentx_unregister_config_handler(const char *token)
+{
+ unregister_config_handler(":agentx", token);
+}
+
+void
+agentx_config_init(void)
+{
+ int agent_role = netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_ROLE);
+
+ /*
+ * Common tokens for master/subagent
+ */
+ netsnmp_register_default_domain("agentx", "unix tcp");
+ netsnmp_register_default_target("agentx", "unix", NETSNMP_AGENTX_SOCKET);
+#define val(x) __STRING(x)
+ netsnmp_register_default_target("agentx", "tcp", ":" val(AGENTX_PORT));
+#undef val
+ agentx_register_config_handler("agentxsocket",
+ agentx_parse_agentx_socket, NULL,
+ "AgentX bind address");
+#ifdef USING_AGENTX_MASTER_MODULE
+ /*
+ * tokens for master agent
+ */
+ if (MASTER_AGENT == agent_role) {
+ snmpd_register_config_handler("master",
+ agentx_parse_master, NULL,
+ "specify 'agentx' for AgentX support");
+ agentx_register_config_handler("agentxperms",
+ agentx_parse_agentx_perms, NULL,
+ "AgentX socket permissions: socket_perms [directory_perms [username|userid [groupname|groupid]]]");
+ agentx_register_config_handler("agentxRetries",
+ agentx_parse_agentx_retries, NULL,
+ "AgentX Retries");
+ agentx_register_config_handler("agentxTimeout",
+ agentx_parse_agentx_timeout, NULL,
+ "AgentX Timeout (seconds)");
+ }
+#endif /* USING_AGENTX_MASTER_MODULE */
+
+#ifdef USING_AGENTX_SUBAGENT_MODULE
+ /*
+ * tokens for master agent
+ */
+ if (SUB_AGENT == agent_role) {
+ /*
+ * set up callbacks to initiate master agent pings for this session
+ */
+ netsnmp_ds_register_config(ASN_INTEGER,
+ netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_APPTYPE),
+ "agentxPingInterval",
+ NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL);
+ /* ping and/or reconnect by default every 15 seconds */
+ netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL, 15);
+
+ }
+#endif /* USING_AGENTX_SUBAGENT_MODULE */
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/agentx_config.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/agentx_config.h
new file mode 100644
index 0000000000..9496a471ae
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/agentx_config.h
@@ -0,0 +1,18 @@
+#ifndef __AGENTX_CONFIG_H__
+#define __AGENTX_CONFIG_H__
+
+config_belongs_in(agent_module)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ void agentx_parse_master(const char *token, char *cptr);
+ void agentx_parse_agentx_socket(const char *token,
+ char *cptr);
+ void agentx_config_init(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __AGENTX_CONFIG_H__ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/client.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/client.c
new file mode 100644
index 0000000000..b77fc84d89
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/client.c
@@ -0,0 +1,498 @@
+/*
+ * AgentX utility routines
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#include <stdio.h>
+#include <errno.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/agent_index.h>
+
+#include "agentx/protocol.h"
+#include "agentx/client.h"
+#include "agentx/subagent.h"
+
+extern struct timeval starttime;
+
+ /*
+ * AgentX handling utility routines
+ *
+ * Mostly wrappers round, or re-writes of
+ * the SNMP equivalents
+ */
+
+int
+agentx_synch_input(int op,
+ netsnmp_session * session,
+ int reqid, netsnmp_pdu *pdu, void *magic)
+{
+ struct synch_state *state = (struct synch_state *) magic;
+ struct timeval now, diff;
+
+ if (reqid != state->reqid) {
+ return handle_agentx_packet(op, session, reqid, pdu, magic);
+ }
+
+ DEBUGMSGTL(("agentx/subagent", "synching input, op 0x%02x\n", op));
+ state->waiting = 0;
+ if (op == NETSNMP_CALLBACK_OP_RECEIVED_MESSAGE) {
+ if (pdu->command == AGENTX_MSG_RESPONSE) {
+ state->pdu = snmp_clone_pdu(pdu);
+ state->status = STAT_SUCCESS;
+ session->s_snmp_errno = SNMPERR_SUCCESS;
+
+ /*
+ * Synchronise sysUpTime with the master agent
+ */
+ gettimeofday(&now, NULL);
+ now.tv_sec--;
+ now.tv_usec += 1000000L;
+ diff.tv_sec = pdu->time / 100;
+ diff.tv_usec = (pdu->time - (diff.tv_sec * 100)) * 10000;
+ starttime.tv_sec = now.tv_sec - diff.tv_sec;
+ starttime.tv_usec = now.tv_usec - diff.tv_usec;
+ if (starttime.tv_usec > 1000000L) {
+ starttime.tv_usec -= 1000000L;
+ starttime.tv_sec++;
+ }
+ }
+ } else if (op == NETSNMP_CALLBACK_OP_TIMED_OUT) {
+ state->pdu = NULL;
+ state->status = STAT_TIMEOUT;
+ session->s_snmp_errno = SNMPERR_TIMEOUT;
+ } else if (op == NETSNMP_CALLBACK_OP_DISCONNECT) {
+ return handle_agentx_packet(op, session, reqid, pdu, magic);
+ }
+
+ return 1;
+}
+
+
+
+int
+agentx_synch_response(netsnmp_session * ss, netsnmp_pdu *pdu,
+ netsnmp_pdu **response)
+{
+ return snmp_synch_response_cb(ss, pdu, response, agentx_synch_input);
+}
+
+
+ /*
+ * AgentX PofE convenience functions
+ */
+
+int
+agentx_open_session(netsnmp_session * ss)
+{
+ netsnmp_pdu *pdu, *response;
+ extern oid version_sysoid[];
+ extern int version_sysoid_len;
+
+ DEBUGMSGTL(("agentx/subagent", "opening session \n"));
+ if (ss == NULL || !IS_AGENTX_VERSION(ss->version)) {
+ return 0;
+ }
+
+ pdu = snmp_pdu_create(AGENTX_MSG_OPEN);
+ if (pdu == NULL)
+ return 0;
+ pdu->time = 0;
+ snmp_add_var(pdu, version_sysoid, version_sysoid_len,
+ 's', "Net-SNMP AgentX sub-agent");
+
+ if (agentx_synch_response(ss, pdu, &response) != STAT_SUCCESS)
+ return 0;
+
+ if (response->errstat != SNMP_ERR_NOERROR) {
+ snmp_free_pdu(response);
+ return 0;
+ }
+
+ ss->sessid = response->sessid;
+ snmp_free_pdu(response);
+
+ DEBUGMSGTL(("agentx/subagent", "open \n"));
+ return 1;
+}
+
+int
+agentx_close_session(netsnmp_session * ss, int why)
+{
+ netsnmp_pdu *pdu, *response;
+ DEBUGMSGTL(("agentx/subagent", "closing session\n"));
+
+ if (ss == NULL || !IS_AGENTX_VERSION(ss->version)) {
+ return 0;
+ }
+
+ pdu = snmp_pdu_create(AGENTX_MSG_CLOSE);
+ if (pdu == NULL)
+ return 0;
+ pdu->time = 0;
+ pdu->errstat = why;
+ pdu->sessid = ss->sessid;
+
+ if (agentx_synch_response(ss, pdu, &response) == STAT_SUCCESS)
+ snmp_free_pdu(response);
+ DEBUGMSGTL(("agentx/subagent", "closed\n"));
+
+ return 1;
+}
+
+int
+agentx_register(netsnmp_session * ss, oid start[], size_t startlen,
+ int priority, int range_subid, oid range_ubound,
+ int timeout, u_char flags, const char *contextName)
+{
+ netsnmp_pdu *pdu, *response;
+
+ DEBUGMSGTL(("agentx/subagent", "registering: "));
+ DEBUGMSGOIDRANGE(("agentx/subagent", start, startlen, range_subid,
+ range_ubound));
+ DEBUGMSG(("agentx/subagent", "\n"));
+
+ if (ss == NULL || !IS_AGENTX_VERSION(ss->version)) {
+ return 0;
+ }
+
+ pdu = snmp_pdu_create(AGENTX_MSG_REGISTER);
+ if (pdu == NULL) {
+ return 0;
+ }
+ pdu->time = timeout;
+ pdu->priority = priority;
+ pdu->sessid = ss->sessid;
+ pdu->range_subid = range_subid;
+ if (contextName) {
+ pdu->flags |= AGENTX_MSG_FLAG_NON_DEFAULT_CONTEXT;
+ pdu->community = strdup(contextName);
+ pdu->community_len = strlen(contextName);
+ }
+
+ if (flags & FULLY_QUALIFIED_INSTANCE) {
+ pdu->flags |= AGENTX_MSG_FLAG_INSTANCE_REGISTER;
+ }
+
+ if (range_subid) {
+ snmp_pdu_add_variable(pdu, start, startlen, ASN_OBJECT_ID,
+ (u_char *) start, startlen * sizeof(oid));
+ pdu->variables->val.objid[range_subid - 1] = range_ubound;
+ } else {
+ snmp_add_null_var(pdu, start, startlen);
+ }
+
+ if (agentx_synch_response(ss, pdu, &response) != STAT_SUCCESS) {
+ DEBUGMSGTL(("agentx/subagent", "registering failed!\n"));
+ return 0;
+ }
+
+ if (response->errstat != SNMP_ERR_NOERROR) {
+ snmp_log(LOG_ERR,"registering pdu failed: %d!\n", response->errstat);
+ snmp_free_pdu(response);
+ return 0;
+ }
+
+ snmp_free_pdu(response);
+ DEBUGMSGTL(("agentx/subagent", "registered\n"));
+ return 1;
+}
+
+int
+agentx_unregister(netsnmp_session * ss, oid start[], size_t startlen,
+ int priority, int range_subid, oid range_ubound,
+ const char *contextName)
+{
+ netsnmp_pdu *pdu, *response;
+
+ if (ss == NULL || !IS_AGENTX_VERSION(ss->version)) {
+ return 0;
+ }
+
+ DEBUGMSGTL(("agentx/subagent", "unregistering: "));
+ DEBUGMSGOIDRANGE(("agentx/subagent", start, startlen, range_subid,
+ range_ubound));
+ DEBUGMSG(("agentx/subagent", "\n"));
+ pdu = snmp_pdu_create(AGENTX_MSG_UNREGISTER);
+ if (pdu == NULL) {
+ return 0;
+ }
+ pdu->time = 0;
+ pdu->priority = priority;
+ pdu->sessid = ss->sessid;
+ pdu->range_subid = range_subid;
+ if (contextName) {
+ pdu->flags |= AGENTX_MSG_FLAG_NON_DEFAULT_CONTEXT;
+ pdu->community = strdup(contextName);
+ pdu->community_len = strlen(contextName);
+ }
+
+ if (range_subid) {
+ snmp_pdu_add_variable(pdu, start, startlen, ASN_OBJECT_ID,
+ (u_char *) start, startlen * sizeof(oid));
+ pdu->variables->val.objid[range_subid - 1] = range_ubound;
+ } else {
+ snmp_add_null_var(pdu, start, startlen);
+ }
+
+ if (agentx_synch_response(ss, pdu, &response) != STAT_SUCCESS)
+ return 0;
+
+ if (response->errstat != SNMP_ERR_NOERROR) {
+ snmp_free_pdu(response);
+ return 0;
+ }
+
+ snmp_free_pdu(response);
+ DEBUGMSGTL(("agentx/subagent", "unregistered\n"));
+ return 1;
+}
+
+netsnmp_variable_list *
+agentx_register_index(netsnmp_session * ss,
+ netsnmp_variable_list * varbind, int flags)
+{
+ netsnmp_pdu *pdu, *response;
+ netsnmp_variable_list *varbind2;
+
+ if (ss == NULL || !IS_AGENTX_VERSION(ss->version)) {
+ return NULL;
+ }
+
+ /*
+ * Make a copy of the index request varbind
+ * for the AgentX request PDU
+ * (since the pdu structure will be freed)
+ */
+ varbind2 =
+ (netsnmp_variable_list *) malloc(sizeof(netsnmp_variable_list));
+ if (varbind2 == NULL)
+ return NULL;
+ if (snmp_clone_var(varbind, varbind2)) {
+ snmp_free_varbind(varbind2);
+ return NULL;
+ }
+ if (varbind2->val.string == NULL)
+ varbind2->val.string = varbind2->buf; /* ensure it points somewhere */
+
+ pdu = snmp_pdu_create(AGENTX_MSG_INDEX_ALLOCATE);
+ if (pdu == NULL) {
+ snmp_free_varbind(varbind2);
+ return NULL;
+ }
+ pdu->time = 0;
+ pdu->sessid = ss->sessid;
+ if (flags == ALLOCATE_ANY_INDEX)
+ pdu->flags |= AGENTX_MSG_FLAG_ANY_INSTANCE;
+ if (flags == ALLOCATE_NEW_INDEX)
+ pdu->flags |= AGENTX_MSG_FLAG_NEW_INSTANCE;
+
+ /*
+ * Just send a single index request varbind.
+ * Although the AgentX protocol supports
+ * multiple index allocations in a single
+ * request, the model used in the net-snmp agent
+ * doesn't currently take advantage of this.
+ * I believe this is our prerogative - just as
+ * long as the master side Index request handler
+ * can cope with multiple index requests.
+ */
+ pdu->variables = varbind2;
+
+ if (agentx_synch_response(ss, pdu, &response) != STAT_SUCCESS)
+ return NULL;
+
+ if (response->errstat != SNMP_ERR_NOERROR) {
+ snmp_free_pdu(response);
+ return NULL;
+ }
+
+ /*
+ * Unlink the (single) response varbind to return
+ * to the main driving index request routine.
+ *
+ * This is a memory leak, as nothing will ever
+ * release this varbind. If this becomes a problem,
+ * we'll need to keep a list of these here, and
+ * free the memory in the "index release" routine.
+ * But the master side never frees these either (by
+ * design, since it still needs them), so expecting
+ * the subagent to is discrimination, pure & simple :-)
+ */
+ varbind2 = response->variables;
+ response->variables = NULL;
+ snmp_free_pdu(response);
+ return varbind2;
+}
+
+int
+agentx_unregister_index(netsnmp_session * ss,
+ netsnmp_variable_list * varbind)
+{
+ netsnmp_pdu *pdu, *response;
+ netsnmp_variable_list *varbind2;
+
+ if (ss == NULL || !IS_AGENTX_VERSION(ss->version)) {
+ return -1;
+ }
+
+ /*
+ * Make a copy of the index request varbind
+ * for the AgentX request PDU
+ * (since the pdu structure will be freed)
+ */
+ varbind2 =
+ (netsnmp_variable_list *) malloc(sizeof(netsnmp_variable_list));
+ if (varbind2 == NULL)
+ return -1;
+ if (snmp_clone_var(varbind, varbind2)) {
+ snmp_free_varbind(varbind2);
+ return -1;
+ }
+
+ pdu = snmp_pdu_create(AGENTX_MSG_INDEX_DEALLOCATE);
+ if (pdu == NULL) {
+ snmp_free_varbind(varbind2);
+ return -1;
+ }
+ pdu->time = 0;
+ pdu->sessid = ss->sessid;
+
+ /*
+ * Just send a single index release varbind.
+ * (as above)
+ */
+ pdu->variables = varbind2;
+
+ if (agentx_synch_response(ss, pdu, &response) != STAT_SUCCESS)
+ return -1;
+
+ if (response->errstat != SNMP_ERR_NOERROR) {
+ snmp_free_pdu(response);
+ return -1; /* XXX - say why */
+ }
+
+ snmp_free_pdu(response);
+ return SNMP_ERR_NOERROR;
+}
+
+int
+agentx_add_agentcaps(netsnmp_session * ss,
+ oid * agent_cap, size_t agent_caplen,
+ const char *descr)
+{
+ netsnmp_pdu *pdu, *response;
+
+ if (ss == NULL || !IS_AGENTX_VERSION(ss->version)) {
+ return 0;
+ }
+
+ pdu = snmp_pdu_create(AGENTX_MSG_ADD_AGENT_CAPS);
+ if (pdu == NULL)
+ return 0;
+ pdu->time = 0;
+ pdu->sessid = ss->sessid;
+ snmp_add_var(pdu, agent_cap, agent_caplen, 's', descr);
+
+ if (agentx_synch_response(ss, pdu, &response) != STAT_SUCCESS)
+ return 0;
+
+ if (response->errstat != SNMP_ERR_NOERROR) {
+ snmp_free_pdu(response);
+ return 0;
+ }
+
+ snmp_free_pdu(response);
+ return 1;
+}
+
+int
+agentx_remove_agentcaps(netsnmp_session * ss,
+ oid * agent_cap, size_t agent_caplen)
+{
+ netsnmp_pdu *pdu, *response;
+
+ if (ss == NULL || !IS_AGENTX_VERSION(ss->version)) {
+ return 0;
+ }
+
+ pdu = snmp_pdu_create(AGENTX_MSG_REMOVE_AGENT_CAPS);
+ if (pdu == NULL)
+ return 0;
+ pdu->time = 0;
+ pdu->sessid = ss->sessid;
+ snmp_add_null_var(pdu, agent_cap, agent_caplen);
+
+ if (agentx_synch_response(ss, pdu, &response) != STAT_SUCCESS)
+ return 0;
+
+ if (response->errstat != SNMP_ERR_NOERROR) {
+ snmp_free_pdu(response);
+ return 0;
+ }
+
+ snmp_free_pdu(response);
+ return 1;
+}
+
+int
+agentx_send_ping(netsnmp_session * ss)
+{
+ netsnmp_pdu *pdu, *response;
+
+ if (ss == NULL || !IS_AGENTX_VERSION(ss->version)) {
+ return 0;
+ }
+
+ pdu = snmp_pdu_create(AGENTX_MSG_PING);
+ if (pdu == NULL)
+ return 0;
+ pdu->time = 0;
+ pdu->sessid = ss->sessid;
+
+ if (agentx_synch_response(ss, pdu, &response) != STAT_SUCCESS)
+ return 0;
+
+ if (response->errstat != SNMP_ERR_NOERROR) {
+ snmp_free_pdu(response);
+ return 0;
+ }
+
+ snmp_free_pdu(response);
+ return 1;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/client.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/client.h
new file mode 100644
index 0000000000..cedeec0c05
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/client.h
@@ -0,0 +1,42 @@
+#ifndef AGENTX_CLIENT_H
+#define AGENTX_CLIENT_H
+
+config_belongs_in(agent_module)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ /*
+ * Utility functions for Agent Extensibility Protocol (RFC 2257)
+ *
+ */
+
+
+ int agentx_open_session(netsnmp_session *);
+ int agentx_close_session(netsnmp_session *, int);
+ int agentx_register(netsnmp_session *, oid *, size_t, int,
+ int, oid, int, u_char, const char *);
+ int agentx_unregister(netsnmp_session *, oid *, size_t,
+ int, int, oid, const char *);
+ netsnmp_variable_list *agentx_register_index(netsnmp_session *,
+ netsnmp_variable_list *,
+ int);
+ int agentx_unregister_index(netsnmp_session *,
+ netsnmp_variable_list *);
+ int agentx_add_agentcaps(netsnmp_session *, oid *, size_t,
+ const char *);
+ int agentx_remove_agentcaps(netsnmp_session *, oid *,
+ size_t);
+ int agentx_send_ping(netsnmp_session *);
+
+#define AGENTX_CLOSE_OTHER 1
+#define AGENTX_CLOSE_PARSE 2
+#define AGENTX_CLOSE_PROTOCOL 3
+#define AGENTX_CLOSE_TIMEOUT 4
+#define AGENTX_CLOSE_SHUTDOWN 5
+#define AGENTX_CLOSE_MANAGER 6
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* AGENTX_CLIENT_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master.c
new file mode 100644
index 0000000000..1a66b72aff
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master.c
@@ -0,0 +1,627 @@
+/*
+ * AgentX master agent
+ */
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_IO_H
+#include <io.h>
+#endif
+
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#include <errno.h>
+
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#define SNMP_NEED_REQUEST_LIST
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "snmpd.h"
+#include "agentx/protocol.h"
+#include "agentx/master_admin.h"
+
+void
+real_init_master(void)
+{
+ netsnmp_session sess, *session = NULL;
+ char *agentx_sockets;
+ char *cp1;
+
+#ifdef NETSNMP_TRANSPORT_UNIX_DOMAIN
+ int agentx_dir_perm;
+ int agentx_sock_perm;
+ int agentx_sock_user;
+ int agentx_sock_group;
+#endif
+
+ if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE) != MASTER_AGENT)
+ return;
+
+ if (netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCKET)) {
+ agentx_sockets = strdup(netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCKET));
+#ifdef NETSNMP_AGENTX_DOM_SOCK_ONLY
+ if (agentx_sockets[0] != '/') {
+ /* unix:/path */
+ if (agentx_sockets[5] != '/') {
+ snmp_log(LOG_ERR,
+ "Error: %s transport is not supported, disabling agentx/master.\n", agentx_sockets);
+ SNMP_FREE(agentx_sockets);
+ return;
+ }
+ }
+#endif
+ } else {
+ agentx_sockets = strdup("");
+ }
+
+
+ DEBUGMSGTL(("agentx/master", "initializing...\n"));
+ snmp_sess_init(&sess);
+ sess.version = AGENTX_VERSION_1;
+ sess.flags |= SNMP_FLAGS_STREAM_SOCKET;
+ sess.timeout = netsnmp_ds_get_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_AGENTX_TIMEOUT);
+ sess.retries = netsnmp_ds_get_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_AGENTX_RETRIES);
+ cp1 = agentx_sockets;
+ while (cp1) {
+ netsnmp_transport *t;
+ /*
+ * If the AgentX socket string contains multiple descriptors,
+ * then pick this apart and handle them one by one.
+ *
+ */
+ sess.peername = cp1;
+ cp1 = strchr(sess.peername, ',');
+ if (cp1 != NULL) {
+ *cp1++ = '\0';
+ }
+
+ if (sess.peername[0] == '/') {
+#ifdef NETSNMP_TRANSPORT_UNIX_DOMAIN
+ /*
+ * If this is a Unix pathname,
+ * try and create the directory first.
+ */
+ agentx_dir_perm = netsnmp_ds_get_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_DIR_PERM);
+ if (agentx_dir_perm == 0)
+ agentx_dir_perm = NETSNMP_AGENT_DIRECTORY_MODE;
+ if (mkdirhier(sess.peername, (mode_t)agentx_dir_perm, 1)) {
+ snmp_log(LOG_ERR,
+ "Failed to create the directory for the agentX socket: %s\n",
+ sess.peername);
+ }
+#else
+ netsnmp_sess_log_error(LOG_WARNING,
+ "unix domain support not available\n",
+ &sess);
+#endif
+ }
+
+ /*
+ * Otherwise, let 'snmp_open' interpret the string.
+ */
+ sess.local_port = AGENTX_PORT; /* Indicate server & set default port */
+ sess.remote_port = 0;
+ sess.callback = handle_master_agentx_packet;
+ errno = 0;
+ t = netsnmp_transport_open_server("agentx", sess.peername);
+ if (t == NULL && errno == EADDRINUSE) {
+ /*
+ * Could be a left-over socket (now deleted)
+ * Try again
+ */
+ t = netsnmp_transport_open_server("agentx", sess.peername);
+ }
+ if (t == NULL) {
+ /*
+ * diagnose snmp_open errors with the input netsnmp_session
+ * pointer.
+ */
+ char buf[1024];
+ if (!netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ snprintf(buf, sizeof(buf),
+ "Error: Couldn't open a master agentx socket to "
+ "listen on (%s)", sess.peername);
+ snmp_sess_perror(buf, &sess);
+ exit(1);
+ } else {
+ snprintf(buf, sizeof(buf),
+ "Warning: Couldn't open a master agentx socket to "
+ "listen on (%s)", sess.peername);
+ netsnmp_sess_log_error(LOG_WARNING, buf, &sess);
+ }
+ } else {
+#ifdef NETSNMP_TRANSPORT_UNIX_DOMAIN
+ if (t->domain == netsnmp_UnixDomain && t->local != NULL) {
+ char name[sizeof(struct sockaddr_un) + 1];
+ memcpy(name, t->local, t->local_length);
+ name[t->local_length] = '\0';
+ /*
+ * Apply any settings to the ownership/permissions of the
+ * AgentX socket
+ */
+ agentx_sock_perm =
+ netsnmp_ds_get_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCK_PERM);
+ agentx_sock_user =
+ netsnmp_ds_get_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCK_USER);
+ agentx_sock_group =
+ netsnmp_ds_get_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCK_GROUP);
+
+ if (agentx_sock_perm != 0)
+ chmod(name, agentx_sock_perm);
+
+ if (agentx_sock_user || agentx_sock_group) {
+ /*
+ * If either of user or group haven't been set,
+ * then leave them unchanged.
+ */
+ if (agentx_sock_user == 0 )
+ agentx_sock_user = -1;
+ if (agentx_sock_group == 0 )
+ agentx_sock_group = -1;
+ chown(name, agentx_sock_user, agentx_sock_group);
+ }
+ }
+#endif
+ session =
+ snmp_add_full(&sess, t, NULL, agentx_parse, NULL, NULL,
+ agentx_realloc_build, agentx_check_packet, NULL);
+ }
+ if (session == NULL) {
+ netsnmp_transport_free(t);
+ }
+ }
+
+ SNMP_FREE(agentx_sockets);
+ DEBUGMSGTL(("agentx/master", "initializing... DONE\n"));
+}
+
+ /*
+ * Handle the response from an AgentX subagent,
+ * merging the answers back into the original query
+ */
+int
+agentx_got_response(int operation,
+ netsnmp_session * session,
+ int reqid, netsnmp_pdu *pdu, void *magic)
+{
+ netsnmp_delegated_cache *cache = (netsnmp_delegated_cache *) magic;
+ int i, ret;
+ netsnmp_request_info *requests, *request;
+ netsnmp_variable_list *var;
+ netsnmp_session *ax_session;
+
+ cache = netsnmp_handler_check_cache(cache);
+ if (!cache) {
+ DEBUGMSGTL(("agentx/master", "response too late on session %08p\n",
+ session));
+ return 0;
+ }
+ requests = cache->requests;
+
+ switch (operation) {
+ case NETSNMP_CALLBACK_OP_TIMED_OUT:{
+ void *s = snmp_sess_pointer(session);
+ DEBUGMSGTL(("agentx/master", "timeout on session %08p\n",
+ session));
+
+ netsnmp_handler_mark_requests_as_delegated(requests,
+ REQUEST_IS_NOT_DELEGATED);
+ netsnmp_set_request_error(cache->reqinfo, requests,
+ /* XXXWWW: should be index=0 */
+ SNMP_ERR_GENERR);
+
+ /*
+ * This is a bit sledgehammer because the other sessions on this
+ * transport may be okay (e.g. some thread in the subagent has
+ * wedged, but the others are alright). OTOH the overwhelming
+ * probability is that the whole agent has died somehow.
+ */
+
+ if (s != NULL) {
+ netsnmp_transport *t = snmp_sess_transport(s);
+ close_agentx_session(session, -1);
+
+ if (t != NULL) {
+ DEBUGMSGTL(("agentx/master", "close transport\n"));
+ t->f_close(t);
+ } else {
+ DEBUGMSGTL(("agentx/master", "NULL transport??\n"));
+ }
+ } else {
+ DEBUGMSGTL(("agentx/master", "NULL sess_pointer??\n"));
+ }
+ ax_session = (netsnmp_session *) cache->localinfo;
+ netsnmp_free_agent_snmp_session_by_session(ax_session, NULL);
+ netsnmp_free_delegated_cache(cache);
+ return 0;
+ }
+
+ case NETSNMP_CALLBACK_OP_DISCONNECT:
+ case NETSNMP_CALLBACK_OP_SEND_FAILED:
+ if (operation == NETSNMP_CALLBACK_OP_DISCONNECT) {
+ DEBUGMSGTL(("agentx/master", "disconnect on session %08p\n",
+ session));
+ } else {
+ DEBUGMSGTL(("agentx/master", "send failed on session %08p\n",
+ session));
+ }
+ close_agentx_session(session, -1);
+ netsnmp_handler_mark_requests_as_delegated(requests,
+ REQUEST_IS_NOT_DELEGATED);
+ netsnmp_set_request_error(cache->reqinfo, requests, /* XXXWWW: should be index=0 */
+ SNMP_ERR_GENERR);
+ netsnmp_free_delegated_cache(cache);
+ return 0;
+
+ case NETSNMP_CALLBACK_OP_RECEIVED_MESSAGE:
+ /*
+ * This session is alive
+ */
+ CLEAR_SNMP_STRIKE_FLAGS(session->flags);
+ break;
+ default:
+ snmp_log(LOG_ERR, "Unknown operation %d in agentx_got_response\n",
+ operation);
+ netsnmp_free_delegated_cache(cache);
+ return 0;
+ }
+
+ DEBUGMSGTL(("agentx/master", "got response errstat=%d, (req=0x%x,trans="
+ "0x%x,sess=0x%x)\n",
+ pdu->errstat,pdu->reqid,pdu->transid, pdu->sessid));
+
+ if (pdu->errstat != AGENTX_ERR_NOERROR) {
+ /* [RFC 2471 - 7.2.5.2.]
+ *
+ * 1) For any received AgentX response PDU, if res.error is
+ * not `noError', the SNMP response PDU's error code is
+ * set to this value. If res.error contains an AgentX
+ * specific value (e.g. `parseError'), the SNMP response
+ * PDU's error code is set to a value of genErr instead.
+ * Also, the SNMP response PDU's error index is set to
+ * the index of the variable binding corresponding to the
+ * failed VarBind in the subagent's AgentX response PDU.
+ *
+ * All other AgentX response PDUs received due to
+ * processing this SNMP request are ignored. Processing
+ * is complete; the SNMP Response PDU is ready to be sent
+ * (see section 7.2.6, "Sending the SNMP Response-PDU").
+ */
+ int err;
+
+ DEBUGMSGTL(("agentx/master",
+ "agentx_got_response() error branch\n"));
+
+ switch (pdu->errstat) {
+ case AGENTX_ERR_PARSE_FAILED:
+ case AGENTX_ERR_REQUEST_DENIED:
+ case AGENTX_ERR_PROCESSING_ERROR:
+ err = SNMP_ERR_GENERR;
+ break;
+ default:
+ err = pdu->errstat;
+ }
+
+ ret = 0;
+ for (request = requests, i = 1; request;
+ request = request->next, i++) {
+ if (i == pdu->errindex) {
+ /*
+ * Mark this varbind as the one generating the error.
+ * Note that the AgentX errindex may not match the
+ * position in the original SNMP PDU (request->index)
+ */
+ netsnmp_set_request_error(cache->reqinfo, request,
+ err);
+ ret = 1;
+ }
+ request->delegated = REQUEST_IS_NOT_DELEGATED;
+ }
+ if (!ret) {
+ /*
+ * ack, unknown, mark the first one
+ */
+ netsnmp_set_request_error(cache->reqinfo, requests,
+ SNMP_ERR_GENERR);
+ }
+ netsnmp_free_delegated_cache(cache);
+ DEBUGMSGTL(("agentx/master", "end error branch\n"));
+ return 1;
+ } else if (cache->reqinfo->mode == MODE_GET ||
+ cache->reqinfo->mode == MODE_GETNEXT ||
+ cache->reqinfo->mode == MODE_GETBULK) {
+ /*
+ * Replace varbinds for data request types, but not SETs.
+ */
+ DEBUGMSGTL(("agentx/master",
+ "agentx_got_response() beginning...\n"));
+ for (var = pdu->variables, request = requests; request && var;
+ request = request->next, var = var->next_variable) {
+ /*
+ * Otherwise, process successful requests
+ */
+ DEBUGMSGTL(("agentx/master",
+ " handle_agentx_response: processing: "));
+ DEBUGMSGOID(("agentx/master", var->name, var->name_length));
+ DEBUGMSG(("agentx/master", "\n"));
+ if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_VERBOSE)) {
+ DEBUGMSGTL(("snmp_agent", " >> "));
+ DEBUGMSGVAR(("snmp_agent", var));
+ DEBUGMSG(("snmp_agent", "\n"));
+ }
+
+ /*
+ * update the oid in the original request
+ */
+ if (var->type != SNMP_ENDOFMIBVIEW) {
+ snmp_set_var_typed_value(request->requestvb, var->type,
+ var->val.string, var->val_len);
+ snmp_set_var_objid(request->requestvb, var->name,
+ var->name_length);
+ }
+ request->delegated = REQUEST_IS_NOT_DELEGATED;
+ }
+
+ if (request || var) {
+ /*
+ * ack, this is bad. The # of varbinds don't match and
+ * there is no way to fix the problem
+ */
+ snmp_log(LOG_ERR,
+ "response to agentx request illegal. bailing out.\n");
+ netsnmp_set_request_error(cache->reqinfo, requests,
+ SNMP_ERR_GENERR);
+ }
+
+ if (cache->reqinfo->mode == MODE_GETBULK)
+ netsnmp_bulk_to_next_fix_requests(requests);
+ } else {
+ /*
+ * mark set requests as handled
+ */
+ for (request = requests; request; request = request->next) {
+ request->delegated = REQUEST_IS_NOT_DELEGATED;
+ }
+ }
+ DEBUGMSGTL(("agentx/master",
+ "handle_agentx_response() finishing...\n"));
+ netsnmp_free_delegated_cache(cache);
+ return 1;
+}
+
+/*
+ *
+ * AgentX State diagram. [mode] = internal mode it's mapped from:
+ *
+ * TESTSET -success-> COMMIT -success-> CLEANUP
+ * [RESERVE1] [ACTION] [COMMIT]
+ * | |
+ * | \--failure-> UNDO
+ * | [UNDO]
+ * |
+ * --failure-> CLEANUP
+ * [FREE]
+ */
+int
+agentx_master_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_session *ax_session = (netsnmp_session *) handler->myvoid;
+ netsnmp_request_info *request = requests;
+ netsnmp_pdu *pdu;
+ void *cb_data;
+ int result;
+
+ DEBUGMSGTL(("agentx/master",
+ "agentx master handler starting, mode = 0x%02x\n",
+ reqinfo->mode));
+
+ if (!ax_session) {
+ netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_GENERR);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * build a new pdu based on the pdu type coming in
+ */
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ pdu = snmp_pdu_create(AGENTX_MSG_GET);
+ break;
+
+ case MODE_GETNEXT:
+ pdu = snmp_pdu_create(AGENTX_MSG_GETNEXT);
+ break;
+
+ case MODE_GETBULK: /* WWWXXX */
+ pdu = snmp_pdu_create(AGENTX_MSG_GETNEXT);
+ break;
+
+ case MODE_SET_RESERVE1:
+ pdu = snmp_pdu_create(AGENTX_MSG_TESTSET);
+ break;
+
+ case MODE_SET_RESERVE2:
+ /*
+ * don't do anything here for AgentX. Assume all is fine
+ * and go on since AgentX only has one test phase.
+ */
+ return SNMP_ERR_NOERROR;
+
+ case MODE_SET_ACTION:
+ pdu = snmp_pdu_create(AGENTX_MSG_COMMITSET);
+ break;
+
+ case MODE_SET_UNDO:
+ pdu = snmp_pdu_create(AGENTX_MSG_UNDOSET);
+ break;
+
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ pdu = snmp_pdu_create(AGENTX_MSG_CLEANUPSET);
+ break;
+
+ default:
+ snmp_log(LOG_WARNING,
+ "unsupported mode for agentx/master called\n");
+ return SNMP_ERR_NOERROR;
+ }
+
+ if (!pdu) {
+ netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_GENERR);
+ return SNMP_ERR_NOERROR;
+ }
+
+ pdu->version = AGENTX_VERSION_1;
+ pdu->reqid = snmp_get_next_transid();
+ pdu->transid = reqinfo->asp->pdu->transid;
+ pdu->sessid = ax_session->subsession->sessid;
+ if (reginfo->contextName) {
+ pdu->community = strdup(reginfo->contextName);
+ pdu->community_len = strlen(reginfo->contextName);
+ pdu->flags |= AGENTX_MSG_FLAG_NON_DEFAULT_CONTEXT;
+ }
+ if (ax_session->subsession->flags & AGENTX_MSG_FLAG_NETWORK_BYTE_ORDER)
+ pdu->flags |= AGENTX_MSG_FLAG_NETWORK_BYTE_ORDER;
+
+ while (request) {
+
+ size_t nlen = request->requestvb->name_length;
+ oid *nptr = request->requestvb->name;
+
+ DEBUGMSGTL(("agentx/master","request for variable ("));
+ DEBUGMSGOID(("agentx/master", nptr, nlen));
+ DEBUGMSG(("agentx/master", ")\n"));
+
+ /*
+ * loop through all the requests and create agentx ones out of them
+ */
+
+ if (reqinfo->mode == MODE_GETNEXT || reqinfo->mode == MODE_GETBULK) {
+
+ if (snmp_oid_compare(nptr, nlen, request->subtree->start_a,
+ request->subtree->start_len) < 0) {
+ DEBUGMSGTL(("agentx/master","inexact request preceeding region ("));
+ DEBUGMSGOID(("agentx/master", request->subtree->start_a,
+ request->subtree->start_len));
+ DEBUGMSG(("agentx/master", ")\n"));
+ nptr = request->subtree->start_a;
+ nlen = request->subtree->start_len;
+ request->inclusive = 1;
+ }
+
+ if (request->inclusive) {
+ DEBUGMSGTL(("agentx/master", "INCLUSIVE varbind "));
+ DEBUGMSGOID(("agentx/master", nptr, nlen));
+ DEBUGMSG(("agentx/master", " scoped to "));
+ DEBUGMSGOID(("agentx/master", request->range_end,
+ request->range_end_len));
+ DEBUGMSG(("agentx/master", "\n"));
+ snmp_pdu_add_variable(pdu, nptr, nlen, ASN_PRIV_INCL_RANGE,
+ (u_char *) request->range_end,
+ request->range_end_len *
+ sizeof(oid));
+ request->inclusive = 0;
+ } else {
+ DEBUGMSGTL(("agentx/master", "EXCLUSIVE varbind "));
+ DEBUGMSGOID(("agentx/master", nptr, nlen));
+ DEBUGMSG(("agentx/master", " scoped to "));
+ DEBUGMSGOID(("agentx/master", request->range_end,
+ request->range_end_len));
+ DEBUGMSG(("agentx/master", "\n"));
+ snmp_pdu_add_variable(pdu, nptr, nlen, ASN_PRIV_EXCL_RANGE,
+ (u_char *) request->range_end,
+ request->range_end_len *
+ sizeof(oid));
+ }
+ } else {
+ snmp_pdu_add_variable(pdu, request->requestvb->name,
+ request->requestvb->name_length,
+ request->requestvb->type,
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ }
+
+ /*
+ * mark the request as delayed
+ */
+ if (pdu->command != AGENTX_MSG_CLEANUPSET)
+ request->delegated = REQUEST_IS_DELEGATED;
+ else
+ request->delegated = REQUEST_IS_NOT_DELEGATED;
+
+ /*
+ * next...
+ */
+ request = request->next;
+ }
+
+ /*
+ * When the master sends a CleanupSet PDU, it will never get a response
+ * back from the subagent. So we shouldn't allocate the
+ * netsnmp_delegated_cache structure in this case.
+ */
+ if (pdu->command != AGENTX_MSG_CLEANUPSET)
+ cb_data = netsnmp_create_delegated_cache(handler, reginfo,
+ reqinfo, requests,
+ (void *) ax_session);
+ else
+ cb_data = NULL;
+
+ /*
+ * send the requests out.
+ */
+ DEBUGMSGTL(("agentx", "sending pdu (req=0x%x,trans=0x%x,sess=0x%x)\n",
+ pdu->reqid,pdu->transid, pdu->sessid));
+ result = snmp_async_send(ax_session, pdu, agentx_got_response, cb_data);
+
+ if (result == 0 ) {
+ snmp_free_pdu( pdu );
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master.h
new file mode 100644
index 0000000000..b6a7f6bbc4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master.h
@@ -0,0 +1,16 @@
+#ifndef _AGENTX_MASTER_H
+#define _AGENTX_MASTER_H
+
+config_belongs_in(agent_module)
+
+config_require(agentx/protocol)
+config_require(agentx/client)
+config_require(agentx/master_admin)
+config_require(agentx/agentx_config)
+config_require(mibII/sysORTable)
+
+ void init_master(void);
+ void real_init_master(void);
+ Netsnmp_Node_Handler agentx_master_handler;
+
+#endif /* _AGENTX_MASTER_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master_admin.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master_admin.c
new file mode 100644
index 0000000000..a04b18a52c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master_admin.c
@@ -0,0 +1,599 @@
+/*
+ * AgentX Administrative request handling
+ */
+#include <net-snmp/net-snmp-config.h>
+
+#include <sys/types.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "agentx/protocol.h"
+#include "agentx/client.h"
+
+#include <net-snmp/agent/agent_index.h>
+#include <net-snmp/agent/agent_trap.h>
+#include <net-snmp/agent/agent_callbacks.h>
+#include "mibII/sysORTable.h"
+#include "master.h"
+
+extern struct timeval starttime;
+
+
+
+netsnmp_session *
+find_agentx_session(netsnmp_session * session, int sessid)
+{
+ netsnmp_session *sp;
+ for (sp = session->subsession; sp != NULL; sp = sp->next) {
+ if (sp->sessid == sessid)
+ return sp;
+ }
+ return NULL;
+}
+
+
+int
+open_agentx_session(netsnmp_session * session, netsnmp_pdu *pdu)
+{
+ netsnmp_session *sp;
+ struct timeval now;
+
+ DEBUGMSGTL(("agentx/master", "open %08p\n", session));
+ sp = (netsnmp_session *) malloc(sizeof(netsnmp_session));
+ if (sp == NULL) {
+ session->s_snmp_errno = AGENTX_ERR_OPEN_FAILED;
+ return -1;
+ }
+
+ memcpy(sp, session, sizeof(netsnmp_session));
+ sp->sessid = snmp_get_next_sessid();
+ sp->version = pdu->version;
+ sp->timeout = pdu->time;
+
+ /*
+ * Be careful with fields: if these aren't zeroed, they will get free()d
+ * more than once when the session is closed -- once in the main session,
+ * and once in each subsession. Basically, if it's not being used for
+ * some AgentX-specific purpose, it ought to be zeroed here.
+ */
+
+ sp->community = NULL;
+ sp->peername = NULL;
+ sp->contextEngineID = NULL;
+ sp->contextName = NULL;
+ sp->securityEngineID = NULL;
+ sp->securityPrivProto = NULL;
+
+ /*
+ * This next bit utilises unused SNMPv3 fields
+ * to store the subagent OID and description.
+ * This really ought to use AgentX-specific fields,
+ * but it hardly seems worth it for a one-off use.
+ *
+ * But I'm willing to be persuaded otherwise.... */
+ sp->securityAuthProto = snmp_duplicate_objid(pdu->variables->name,
+ pdu->variables->
+ name_length);
+ sp->securityAuthProtoLen = pdu->variables->name_length;
+ sp->securityName = strdup((char *) pdu->variables->val.string);
+ gettimeofday(&now, NULL);
+ sp->engineTime = calculate_time_diff(&now, &starttime);
+
+ sp->subsession = session; /* link back to head */
+ sp->flags |= SNMP_FLAGS_SUBSESSION;
+ sp->flags &= ~AGENTX_MSG_FLAG_NETWORK_BYTE_ORDER;
+ sp->flags |= (pdu->flags & AGENTX_MSG_FLAG_NETWORK_BYTE_ORDER);
+ sp->next = session->subsession;
+ session->subsession = sp;
+ DEBUGMSGTL(("agentx/master", "opened %08p = %d with flags = %02x\n",
+ sp, sp->sessid, sp->flags & AGENTX_MSG_FLAGS_MASK));
+
+ return sp->sessid;
+}
+
+int
+close_agentx_session(netsnmp_session * session, int sessid)
+{
+ netsnmp_session *sp, **prevNext;
+
+ if (!session)
+ return AGENTX_ERR_NOT_OPEN;
+
+ DEBUGMSGTL(("agentx/master", "close %08p, %d\n", session, sessid));
+ if (sessid == -1) {
+ /*
+ * The following is necessary to avoid locking up the agent when
+ * a sugagent dies during a set request. We must clean up the
+ * requests, so that the delegated request will be completed and
+ * further requests can be processed
+ */
+ netsnmp_remove_delegated_requests_for_session(session);
+ if (session->subsession != NULL) {
+ netsnmp_session *subsession = session->subsession;
+ for(; subsession; subsession = subsession->next) {
+ netsnmp_remove_delegated_requests_for_session(subsession);
+ }
+ }
+
+ unregister_mibs_by_session(session);
+ unregister_index_by_session(session);
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REQ_UNREG_SYSOR_SESS,
+ (void*)session);
+ SNMP_FREE(session->myvoid);
+ return AGENTX_ERR_NOERROR;
+ }
+
+ prevNext = &(session->subsession);
+
+ for (sp = session->subsession; sp != NULL; sp = sp->next) {
+
+ if (sp->sessid == sessid) {
+ unregister_mibs_by_session(sp);
+ unregister_index_by_session(sp);
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REQ_UNREG_SYSOR_SESS,
+ (void*)sp);
+
+ *prevNext = sp->next;
+
+ if (sp->securityAuthProto != NULL) {
+ free(sp->securityAuthProto);
+ }
+ if (sp->securityName != NULL) {
+ free(sp->securityName);
+ }
+ free(sp);
+ sp = NULL;
+
+ DEBUGMSGTL(("agentx/master", "closed %08p, %d okay\n",
+ session, sessid));
+ return AGENTX_ERR_NOERROR;
+ }
+
+ prevNext = &(sp->next);
+ }
+
+ DEBUGMSGTL(("agentx/master", "sessid %d not found\n", sessid));
+ return AGENTX_ERR_NOT_OPEN;
+}
+
+int
+register_agentx_list(netsnmp_session * session, netsnmp_pdu *pdu)
+{
+ netsnmp_session *sp;
+ char buf[128];
+ oid ubound = 0;
+ u_long flags = 0;
+ netsnmp_handler_registration *reg;
+ int rc = 0;
+ int cacheid;
+
+ DEBUGMSGTL(("agentx/master", "in register_agentx_list\n"));
+
+ sp = find_agentx_session(session, pdu->sessid);
+ if (sp == NULL)
+ return AGENTX_ERR_NOT_OPEN;
+
+ sprintf(buf, "AgentX subagent %ld, session %8p, subsession %8p",
+ sp->sessid, session, sp);
+ /*
+ * * TODO: registration timeout
+ * * registration context
+ */
+ if (pdu->range_subid) {
+ ubound = pdu->variables->val.objid[pdu->range_subid - 1];
+ }
+
+ if (pdu->flags & AGENTX_MSG_FLAG_INSTANCE_REGISTER) {
+ flags = FULLY_QUALIFIED_INSTANCE;
+ }
+
+ reg = netsnmp_create_handler_registration(buf, agentx_master_handler, pdu->variables->name, pdu->variables->name_length, HANDLER_CAN_RWRITE | HANDLER_CAN_GETBULK); /* fake it */
+ if (!session->myvoid) {
+ session->myvoid = malloc(sizeof(cacheid));
+ cacheid = netsnmp_allocate_globalcacheid();
+ *((int *) session->myvoid) = cacheid;
+ } else {
+ cacheid = *((int *) session->myvoid);
+ }
+
+ reg->handler->myvoid = session;
+ reg->global_cacheid = cacheid;
+ if (NULL != pdu->community)
+ reg->contextName = strdup(pdu->community);
+
+ /*
+ * register mib. Note that for failure cases, the registration info
+ * (reg) will be freed, and thus is no longer a valid pointer.
+ */
+ switch (netsnmp_register_mib(buf, NULL, 0, 1,
+ pdu->variables->name,
+ pdu->variables->name_length,
+ pdu->priority, pdu->range_subid, ubound,
+ sp, (char *) pdu->community, pdu->time,
+ flags, reg, 1)) {
+
+ case MIB_REGISTERED_OK:
+ DEBUGMSGTL(("agentx/master", "registered ok\n"));
+ return AGENTX_ERR_NOERROR;
+
+ case MIB_DUPLICATE_REGISTRATION:
+ DEBUGMSGTL(("agentx/master", "duplicate registration\n"));
+ rc = AGENTX_ERR_DUPLICATE_REGISTRATION;
+ break;
+
+ case MIB_REGISTRATION_FAILED:
+ default:
+ rc = AGENTX_ERR_REQUEST_DENIED;
+ DEBUGMSGTL(("agentx/master", "failed registration\n"));
+ }
+ return rc;
+}
+
+int
+unregister_agentx_list(netsnmp_session * session, netsnmp_pdu *pdu)
+{
+ netsnmp_session *sp;
+ int rc = 0;
+
+ sp = find_agentx_session(session, pdu->sessid);
+ if (sp == NULL) {
+ return AGENTX_ERR_NOT_OPEN;
+ }
+
+ if (pdu->range_subid != 0) {
+ oid ubound =
+ pdu->variables->val.objid[pdu->range_subid - 1];
+ rc = netsnmp_unregister_mib_table_row(pdu->variables->name,
+ pdu->variables->name_length,
+ pdu->priority,
+ pdu->range_subid, ubound,
+ (char *) pdu->community);
+ } else {
+ rc = unregister_mib_context(pdu->variables->name,
+ pdu->variables->name_length,
+ pdu->priority, 0, 0,
+ (char *) pdu->community);
+ }
+
+ switch (rc) {
+ case MIB_UNREGISTERED_OK:
+ return AGENTX_ERR_NOERROR;
+ case MIB_NO_SUCH_REGISTRATION:
+ return AGENTX_ERR_UNKNOWN_REGISTRATION;
+ case MIB_UNREGISTRATION_FAILED:
+ default:
+ return AGENTX_ERR_REQUEST_DENIED;
+ }
+}
+
+int
+allocate_idx_list(netsnmp_session * session, netsnmp_pdu *pdu)
+{
+ netsnmp_session *sp;
+ netsnmp_variable_list *vp, *vp2, *next, *res;
+ int flags = 0;
+
+ sp = find_agentx_session(session, pdu->sessid);
+ if (sp == NULL)
+ return AGENTX_ERR_NOT_OPEN;
+
+ if (pdu->flags & AGENTX_MSG_FLAG_ANY_INSTANCE)
+ flags |= ALLOCATE_ANY_INDEX;
+ if (pdu->flags & AGENTX_MSG_FLAG_NEW_INSTANCE)
+ flags |= ALLOCATE_NEW_INDEX;
+
+ /*
+ * XXX - what about errors?
+ *
+ * If any allocations fail, then we need to
+ * *fully* release the earlier ones.
+ * (i.e. remove them completely from the index registry,
+ * not simply mark them as available for re-use)
+ *
+ * For now - assume they all succeed.
+ */
+ for (vp = pdu->variables; vp != NULL; vp = next) {
+ next = vp->next_variable;
+ res = register_index(vp, flags, session);
+ if (res == NULL) {
+ /*
+ * If any allocations fail, we need to *fully* release
+ * all previous ones (i.e. remove them completely
+ * from the index registry)
+ */
+ for (vp2 = pdu->variables; vp2 != vp; vp2 = vp2->next_variable) {
+ remove_index(vp2, session);
+ }
+ return AGENTX_ERR_INDEX_NONE_AVAILABLE; /* XXX */
+ } else {
+ (void) snmp_clone_var(res, vp);
+ free(res);
+ }
+ vp->next_variable = next;
+ }
+ return AGENTX_ERR_NOERROR;
+}
+
+int
+release_idx_list(netsnmp_session * session, netsnmp_pdu *pdu)
+{
+ netsnmp_session *sp;
+ netsnmp_variable_list *vp, *vp2, *rv = NULL;
+ int res;
+
+ sp = find_agentx_session(session, pdu->sessid);
+ if (sp == NULL)
+ return AGENTX_ERR_NOT_OPEN;
+
+ for (vp = pdu->variables; vp != NULL; vp = vp->next_variable) {
+ res = unregister_index(vp, TRUE, session);
+ /*
+ * If any releases fail,
+ * we need to reinstate all previous ones.
+ */
+ if (res != SNMP_ERR_NOERROR) {
+ for (vp2 = pdu->variables; vp2 != vp; vp2 = vp2->next_variable) {
+ rv = register_index(vp2, ALLOCATE_THIS_INDEX, session);
+ free(rv);
+ }
+ return AGENTX_ERR_INDEX_NOT_ALLOCATED; /* Probably */
+ }
+ }
+ return AGENTX_ERR_NOERROR;
+}
+
+int
+add_agent_caps_list(netsnmp_session * session, netsnmp_pdu *pdu)
+{
+ netsnmp_session *sp;
+ struct sysORTable parms;
+
+ sp = find_agentx_session(session, pdu->sessid);
+ if (sp == NULL)
+ return AGENTX_ERR_NOT_OPEN;
+
+ parms.OR_oid = pdu->variables->name;
+ parms.OR_oidlen = pdu->variables->name_length;
+ parms.OR_descr = netsnmp_strdup_and_null(pdu->variables->val.string,
+ pdu->variables->val_len);
+ parms.OR_sess = sp;
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REQ_REG_SYSOR, (void*)&parms);
+ free(parms.OR_descr);
+ return AGENTX_ERR_NOERROR;
+}
+
+int
+remove_agent_caps_list(netsnmp_session * session, netsnmp_pdu *pdu)
+{
+ netsnmp_session *sp;
+ struct sysORTable parms;
+
+ sp = find_agentx_session(session, pdu->sessid);
+ if (sp == NULL)
+ return AGENTX_ERR_NOT_OPEN;
+
+ parms.OR_oid = pdu->variables->name;
+ parms.OR_oidlen = pdu->variables->name_length;
+ parms.OR_sess = sp;
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REQ_UNREG_SYSOR, (void*)&parms);
+ /*
+ * no easy way to get an error code...
+ * if (rc < 0)
+ * return AGENTX_ERR_UNKNOWN_AGENTCAPS;
+ */
+ return AGENTX_ERR_NOERROR;
+}
+
+int
+agentx_notify(netsnmp_session * session, netsnmp_pdu *pdu)
+{
+ netsnmp_session *sp;
+ netsnmp_variable_list *var;
+ int got_sysuptime = 0;
+ extern oid sysuptime_oid[], snmptrap_oid[];
+ extern size_t sysuptime_oid_len, snmptrap_oid_len;
+
+ sp = find_agentx_session(session, pdu->sessid);
+ if (sp == NULL)
+ return AGENTX_ERR_NOT_OPEN;
+
+ var = pdu->variables;
+ if (!var)
+ return AGENTX_ERR_PROCESSING_ERROR;
+
+ if (snmp_oid_compare(var->name, var->name_length,
+ sysuptime_oid, sysuptime_oid_len) == 0) {
+ got_sysuptime = 1;
+ var = var->next_variable;
+ }
+
+ if (!var || snmp_oid_compare(var->name, var->name_length,
+ snmptrap_oid, snmptrap_oid_len) != 0)
+ return AGENTX_ERR_PROCESSING_ERROR;
+
+ /*
+ * If sysUptime isn't the first varbind, don't worry.
+ * send_trap_vars() will add it if necessary.
+ *
+ * Note that if this behaviour is altered, it will
+ * be necessary to add sysUptime here,
+ * as this is valid AgentX syntax.
+ */
+
+ send_trap_vars(-1, -1, pdu->variables);
+ return AGENTX_ERR_NOERROR;
+}
+
+
+int
+agentx_ping_response(netsnmp_session * session, netsnmp_pdu *pdu)
+{
+ netsnmp_session *sp;
+
+ sp = find_agentx_session(session, pdu->sessid);
+ if (sp == NULL)
+ return AGENTX_ERR_NOT_OPEN;
+ else
+ return AGENTX_ERR_NOERROR;
+}
+
+int
+handle_master_agentx_packet(int operation,
+ netsnmp_session * session,
+ int reqid, netsnmp_pdu *pdu, void *magic)
+{
+ netsnmp_agent_session *asp;
+ struct timeval now;
+
+ if (operation == NETSNMP_CALLBACK_OP_DISCONNECT) {
+ DEBUGMSGTL(("agentx/master",
+ "transport disconnect on session %08p\n", session));
+ /*
+ * Shut this session down gracefully.
+ */
+ close_agentx_session(session, -1);
+ return 1;
+ } else if (operation != NETSNMP_CALLBACK_OP_RECEIVED_MESSAGE) {
+ DEBUGMSGTL(("agentx/master", "unexpected callback op %d\n",
+ operation));
+ return 1;
+ }
+
+ /*
+ * Okay, it's a NETSNMP_CALLBACK_OP_RECEIVED_MESSAGE op.
+ */
+
+ if (magic) {
+ asp = (netsnmp_agent_session *) magic;
+ } else {
+ asp = init_agent_snmp_session(session, pdu);
+ }
+
+ DEBUGMSGTL(("agentx/master", "handle pdu (req=0x%x,trans=0x%x,sess=0x%x)\n",
+ pdu->reqid,pdu->transid, pdu->sessid));
+
+ switch (pdu->command) {
+ case AGENTX_MSG_OPEN:
+ asp->pdu->sessid = open_agentx_session(session, pdu);
+ if (asp->pdu->sessid == -1)
+ asp->status = session->s_snmp_errno;
+ break;
+
+ case AGENTX_MSG_CLOSE:
+ asp->status = close_agentx_session(session, pdu->sessid);
+ break;
+
+ case AGENTX_MSG_REGISTER:
+ asp->status = register_agentx_list(session, pdu);
+ break;
+
+ case AGENTX_MSG_UNREGISTER:
+ asp->status = unregister_agentx_list(session, pdu);
+ break;
+
+ case AGENTX_MSG_INDEX_ALLOCATE:
+ asp->status = allocate_idx_list(session, asp->pdu);
+ if (asp->status != AGENTX_ERR_NOERROR) {
+ snmp_free_pdu(asp->pdu);
+ asp->pdu = snmp_clone_pdu(pdu);
+ }
+ break;
+
+ case AGENTX_MSG_INDEX_DEALLOCATE:
+ asp->status = release_idx_list(session, pdu);
+ break;
+
+ case AGENTX_MSG_ADD_AGENT_CAPS:
+ asp->status = add_agent_caps_list(session, pdu);
+ break;
+
+ case AGENTX_MSG_REMOVE_AGENT_CAPS:
+ asp->status = remove_agent_caps_list(session, pdu);
+ break;
+
+ case AGENTX_MSG_NOTIFY:
+ asp->status = agentx_notify(session, pdu);
+ break;
+
+ case AGENTX_MSG_PING:
+ asp->status = agentx_ping_response(session, pdu);
+ break;
+
+ /*
+ * TODO: Other admin packets
+ */
+
+ case AGENTX_MSG_GET:
+ case AGENTX_MSG_GETNEXT:
+ case AGENTX_MSG_GETBULK:
+ case AGENTX_MSG_TESTSET:
+ case AGENTX_MSG_COMMITSET:
+ case AGENTX_MSG_UNDOSET:
+ case AGENTX_MSG_CLEANUPSET:
+ case AGENTX_MSG_RESPONSE:
+ /*
+ * Shouldn't be handled here
+ */
+ break;
+
+ default:
+ asp->status = AGENTX_ERR_PARSE_FAILED;
+ break;
+ }
+
+ gettimeofday(&now, NULL);
+ asp->pdu->time = calculate_time_diff(&now, &starttime);
+ asp->pdu->command = AGENTX_MSG_RESPONSE;
+ asp->pdu->errstat = asp->status;
+ DEBUGMSGTL(("agentx/master", "send response, stat %d (req=0x%x,trans="
+ "0x%x,sess=0x%x)\n",
+ asp->status, pdu->reqid,pdu->transid, pdu->sessid));
+ if (!snmp_send(asp->session, asp->pdu)) {
+ char *eb = NULL;
+ int pe, pse;
+ snmp_error(asp->session, &pe, &pse, &eb);
+ snmp_free_pdu(asp->pdu);
+ DEBUGMSGTL(("agentx/master", "FAILED %d %d %s\n", pe, pse, eb));
+ free(eb);
+ }
+ asp->pdu = NULL;
+ free_agent_snmp_session(asp);
+
+ return 1;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master_admin.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master_admin.h
new file mode 100644
index 0000000000..8f1a6cc394
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/master_admin.h
@@ -0,0 +1,12 @@
+#ifndef _AGENTX_MASTER_ADMIN_H
+#define _AGENTX_MASTER_ADMIN_H
+
+config_belongs_in(agent_module)
+
+int handle_master_agentx_packet(int, netsnmp_session *,
+ int, netsnmp_pdu *, void *);
+
+int close_agentx_session(netsnmp_session * session,
+ int sessid);
+
+#endif /* _AGENTX_MASTER_ADMIN_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/protocol.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/protocol.c
new file mode 100644
index 0000000000..eaa9b0cef9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/protocol.c
@@ -0,0 +1,2038 @@
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#include <stdio.h>
+#include <errno.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+
+#include "agentx/protocol.h"
+
+const char *
+agentx_cmd(u_char code)
+{
+ switch (code) {
+ case AGENTX_MSG_OPEN:
+ return "Open";
+ case AGENTX_MSG_CLOSE:
+ return "Close";
+ case AGENTX_MSG_REGISTER:
+ return "Register";
+ case AGENTX_MSG_UNREGISTER:
+ return "Unregister";
+ case AGENTX_MSG_GET:
+ return "Get";
+ case AGENTX_MSG_GETNEXT:
+ return "Get Next";
+ case AGENTX_MSG_GETBULK:
+ return "Get Bulk";
+ case AGENTX_MSG_TESTSET:
+ return "Test Set";
+ case AGENTX_MSG_COMMITSET:
+ return "Commit Set";
+ case AGENTX_MSG_UNDOSET:
+ return "Undo Set";
+ case AGENTX_MSG_CLEANUPSET:
+ return "Cleanup Set";
+ case AGENTX_MSG_NOTIFY:
+ return "Notify";
+ case AGENTX_MSG_PING:
+ return "Ping";
+ case AGENTX_MSG_INDEX_ALLOCATE:
+ return "Index Allocate";
+ case AGENTX_MSG_INDEX_DEALLOCATE:
+ return "Index Deallocate";
+ case AGENTX_MSG_ADD_AGENT_CAPS:
+ return "Add Agent Caps";
+ case AGENTX_MSG_REMOVE_AGENT_CAPS:
+ return "Remove Agent Caps";
+ case AGENTX_MSG_RESPONSE:
+ return "Response";
+ default:
+ return "Unknown";
+ }
+}
+
+int
+agentx_realloc_build_int(u_char ** buf, size_t * buf_len, size_t * out_len,
+ int allow_realloc,
+ unsigned int value, int network_order)
+{
+ unsigned int ivalue = value;
+ size_t ilen = *out_len;
+#ifdef WORDS_BIGENDIAN
+ unsigned int i = 0;
+#endif
+
+ while ((*out_len + 4) >= *buf_len) {
+ if (!(allow_realloc && snmp_realloc(buf, buf_len))) {
+ return 0;
+ }
+ }
+
+ if (network_order) {
+#ifndef WORDS_BIGENDIAN
+ value = ntohl(value);
+#endif
+ memmove((*buf + *out_len), &value, 4);
+ *out_len += 4;
+ } else {
+#ifndef WORDS_BIGENDIAN
+ memmove((*buf + *out_len), &value, 4);
+ *out_len += 4;
+#else
+ for (i = 0; i < 4; i++) {
+ *(*buf + *out_len) = (u_char) value & 0xff;
+ (*out_len)++;
+ value >>= 8;
+ }
+#endif
+ }
+ DEBUGDUMPSETUP("send", (*buf + ilen), 4);
+ DEBUGMSG(("dumpv_send", " Integer:\t%lu (0x%.2lX)\n", ivalue,
+ ivalue));
+ return 1;
+}
+
+void
+agentx_build_int(u_char * bufp, u_int value, int network_byte_order)
+{
+ u_char *orig_bufp = bufp;
+ u_int orig_val = value;
+
+ if (network_byte_order) {
+#ifndef WORDS_BIGENDIAN
+ value = ntohl(value);
+#endif
+ memmove(bufp, &value, 4);
+ } else {
+#ifndef WORDS_BIGENDIAN
+ memmove(bufp, &value, 4);
+#else
+ *bufp = (u_char) value & 0xff;
+ value >>= 8;
+ bufp++;
+ *bufp = (u_char) value & 0xff;
+ value >>= 8;
+ bufp++;
+ *bufp = (u_char) value & 0xff;
+ value >>= 8;
+ bufp++;
+ *bufp = (u_char) value & 0xff;
+#endif
+ }
+ DEBUGDUMPSETUP("send", orig_bufp, 4);
+ DEBUGMSG(("dumpv_send", " Integer:\t%ld (0x%.2X)\n", orig_val,
+ orig_val));
+}
+
+int
+agentx_realloc_build_short(u_char ** buf, size_t * buf_len,
+ size_t * out_len, int allow_realloc,
+ unsigned short value, int network_order)
+{
+ unsigned short ivalue = value;
+ size_t ilen = *out_len;
+#ifdef WORDS_BIGENDIAN
+ unsigned short i = 0;
+#endif
+
+ while ((*out_len + 2) >= *buf_len) {
+ if (!(allow_realloc && snmp_realloc(buf, buf_len))) {
+ return 0;
+ }
+ }
+
+ if (network_order) {
+#ifndef WORDS_BIGENDIAN
+ value = ntohs(value);
+#endif
+ memmove((*buf + *out_len), &value, 2);
+ *out_len += 2;
+ } else {
+#ifndef WORDS_BIGENDIAN
+ memmove((*buf + *out_len), &value, 2);
+ *out_len += 2;
+#else
+ for (i = 0; i < 2; i++) {
+ *(*buf + *out_len) = (u_char) value & 0xff;
+ (*out_len)++;
+ value >>= 8;
+ }
+#endif
+ }
+ DEBUGDUMPSETUP("send", (*buf + ilen), 2);
+ DEBUGMSG(("dumpv_send", " Short:\t%hu (0x%.2hX)\n", ivalue, ivalue));
+ return 1;
+}
+
+int
+agentx_realloc_build_oid(u_char ** buf, size_t * buf_len, size_t * out_len,
+ int allow_realloc,
+ int inclusive, oid * name, size_t name_len,
+ int network_order)
+{
+ size_t ilen = *out_len, i = 0;
+ int prefix = 0;
+
+ DEBUGPRINTINDENT("dumpv_send");
+ DEBUGMSG(("dumpv_send", "OID: "));
+ DEBUGMSGOID(("dumpv_send", name, name_len));
+ DEBUGMSG(("dumpv_send", "\n"));
+
+ /*
+ * Updated clarification from the AgentX mailing list.
+ * The "null Object Identifier" mentioned in RFC 2471,
+ * section 5.1 is a special placeholder value, and
+ * should only be used when explicitly mentioned in
+ * this RFC. In particular, it does *not* mean {0, 0}
+ */
+ if (name_len == 0)
+ inclusive = 0;
+
+ /*
+ * 'Compact' internet OIDs
+ */
+ if (name_len >= 5 && (name[0] == 1 && name[1] == 3 &&
+ name[2] == 6 && name[3] == 1 &&
+ name[4] > 0 && name[4] < 256)) {
+ prefix = name[4];
+ name += 5;
+ name_len -= 5;
+ }
+
+ while ((*out_len + 4 + (4 * name_len)) >= *buf_len) {
+ if (!(allow_realloc && snmp_realloc(buf, buf_len))) {
+ return 0;
+ }
+ }
+
+ *(*buf + *out_len) = (u_char) name_len;
+ (*out_len)++;
+ *(*buf + *out_len) = (u_char) prefix;
+ (*out_len)++;
+ *(*buf + *out_len) = (u_char) inclusive;
+ (*out_len)++;
+ *(*buf + *out_len) = (u_char) 0x00;
+ (*out_len)++;
+
+ DEBUGDUMPHEADER("send", "OID Header");
+ DEBUGDUMPSETUP("send", (*buf + ilen), 4);
+ DEBUGMSG(("dumpv_send", " # subids:\t%d (0x%.2X)\n", name_len,
+ name_len));
+ DEBUGPRINTINDENT("dumpv_send");
+ DEBUGMSG(("dumpv_send", " prefix:\t%d (0x%.2X)\n", prefix, prefix));
+ DEBUGPRINTINDENT("dumpv_send");
+ DEBUGMSG(("dumpv_send", " inclusive:\t%d (0x%.2X)\n", inclusive,
+ inclusive));
+ DEBUGINDENTLESS();
+ DEBUGDUMPHEADER("send", "OID Segments");
+
+ for (i = 0; i < name_len; i++) {
+ if (!agentx_realloc_build_int(buf, buf_len, out_len, allow_realloc,
+ name[i], network_order)) {
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ }
+ DEBUGINDENTLESS();
+
+ return 1;
+}
+
+int
+agentx_realloc_build_string(u_char ** buf, size_t * buf_len,
+ size_t * out_len, int allow_realloc,
+ u_char * string, size_t string_len,
+ int network_order)
+{
+ size_t ilen = *out_len, i = 0;
+
+ while ((*out_len + 4 + (4 * ((string_len + 3) / 4))) >= *buf_len) {
+ if (!(allow_realloc && snmp_realloc(buf, buf_len))) {
+ return 0;
+ }
+ }
+
+ DEBUGDUMPHEADER("send", "Build String");
+ DEBUGDUMPHEADER("send", "length");
+ if (!agentx_realloc_build_int(buf, buf_len, out_len, allow_realloc,
+ string_len, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+
+ if (string_len == 0) {
+ DEBUGMSG(("dumpv_send", " String: <empty>\n"));
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 1;
+ }
+
+ memmove((*buf + *out_len), string, string_len);
+ *out_len += string_len;
+
+ /*
+ * Pad to a multiple of 4 bytes if necessary (per RFC 2741).
+ */
+
+ if (string_len % 4 != 0) {
+ for (i = 0; i < 4 - (string_len % 4); i++) {
+ *(*buf + *out_len) = 0;
+ (*out_len)++;
+ }
+ }
+
+ DEBUGDUMPSETUP("send", (*buf + ilen + 4), ((string_len + 3) / 4) * 4);
+ DEBUGMSG(("dumpv_send", " String:\t%s\n", string));
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 1;
+}
+
+#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
+int
+agentx_realloc_build_double(u_char ** buf, size_t * buf_len,
+ size_t * out_len, int allow_realloc,
+ double double_val, int network_order)
+{
+ union {
+ double doubleVal;
+ int intVal[2];
+ char c[sizeof(double)];
+ } du;
+ int tmp;
+ u_char opaque_buffer[3 + sizeof(double)];
+
+ opaque_buffer[0] = ASN_OPAQUE_TAG1;
+ opaque_buffer[1] = ASN_OPAQUE_DOUBLE;
+ opaque_buffer[2] = sizeof(double);
+
+ du.doubleVal = double_val;
+ tmp = htonl(du.intVal[0]);
+ du.intVal[0] = htonl(du.intVal[1]);
+ du.intVal[1] = tmp;
+ memcpy(&opaque_buffer[3], &du.c[0], sizeof(double));
+
+ return agentx_realloc_build_string(buf, buf_len, out_len,
+ allow_realloc, opaque_buffer,
+ 3 + sizeof(double), network_order);
+}
+
+int
+agentx_realloc_build_float(u_char ** buf, size_t * buf_len,
+ size_t * out_len, int allow_realloc,
+ float float_val, int network_order)
+{
+ union {
+ float floatVal;
+ int intVal;
+ char c[sizeof(float)];
+ } fu;
+ u_char opaque_buffer[3 + sizeof(float)];
+
+ opaque_buffer[0] = ASN_OPAQUE_TAG1;
+ opaque_buffer[1] = ASN_OPAQUE_FLOAT;
+ opaque_buffer[2] = sizeof(float);
+
+ fu.floatVal = float_val;
+ fu.intVal = htonl(fu.intVal);
+ memcpy(&opaque_buffer[3], &fu.c[0], sizeof(float));
+
+ return agentx_realloc_build_string(buf, buf_len, out_len,
+ allow_realloc, opaque_buffer,
+ 3 + sizeof(float), network_order);
+}
+#endif
+
+int
+agentx_realloc_build_varbind(u_char ** buf, size_t * buf_len,
+ size_t * out_len, int allow_realloc,
+ netsnmp_variable_list * vp, int network_order)
+{
+ DEBUGDUMPHEADER("send", "VarBind");
+ DEBUGDUMPHEADER("send", "type");
+#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
+ if ((vp->type == ASN_OPAQUE_FLOAT) || (vp->type == ASN_OPAQUE_DOUBLE)
+ || (vp->type == ASN_OPAQUE_I64) || (vp->type == ASN_OPAQUE_U64)
+ || (vp->type == ASN_OPAQUE_COUNTER64)) {
+ if (!agentx_realloc_build_short
+ (buf, buf_len, out_len, allow_realloc,
+ (unsigned short) ASN_OPAQUE, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ } else
+#endif
+ if (vp->type == ASN_PRIV_INCL_RANGE || vp->type == ASN_PRIV_EXCL_RANGE) {
+ if (!agentx_realloc_build_short
+ (buf, buf_len, out_len, allow_realloc,
+ (unsigned short) ASN_OBJECT_ID, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ } else {
+ if (!agentx_realloc_build_short
+ (buf, buf_len, out_len, allow_realloc,
+ (unsigned short) vp->type, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ }
+
+ while ((*out_len + 2) >= *buf_len) {
+ if (!(allow_realloc && snmp_realloc(buf, buf_len))) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ }
+
+ *(*buf + *out_len) = 0;
+ (*out_len)++;
+ *(*buf + *out_len) = 0;
+ (*out_len)++;
+ DEBUGINDENTLESS();
+
+ DEBUGDUMPHEADER("send", "name");
+ if (!agentx_realloc_build_oid(buf, buf_len, out_len, allow_realloc, 0,
+ vp->name, vp->name_length,
+ network_order)) {
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+
+ DEBUGDUMPHEADER("send", "value");
+ switch (vp->type) {
+
+ case ASN_INTEGER:
+ case ASN_COUNTER:
+ case ASN_GAUGE:
+ case ASN_TIMETICKS:
+ if (!agentx_realloc_build_int(buf, buf_len, out_len, allow_realloc,
+ *(vp->val.integer), network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ break;
+
+#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
+ case ASN_OPAQUE_FLOAT:
+ DEBUGDUMPHEADER("send", "Build Opaque Float");
+ DEBUGPRINTINDENT("dumpv_send");
+ DEBUGMSG(("dumpv_send", " Float:\t%f\n", *(vp->val.floatVal)));
+ if (!agentx_realloc_build_float
+ (buf, buf_len, out_len, allow_realloc, *(vp->val.floatVal),
+ network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+ break;
+
+ case ASN_OPAQUE_DOUBLE:
+ DEBUGDUMPHEADER("send", "Build Opaque Double");
+ DEBUGPRINTINDENT("dumpv_send");
+ DEBUGMSG(("dumpv_send", " Double:\t%lf\n", *(vp->val.doubleVal)));
+ if (!agentx_realloc_build_double
+ (buf, buf_len, out_len, allow_realloc, *(vp->val.doubleVal),
+ network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+ break;
+
+ case ASN_OPAQUE_I64:
+ case ASN_OPAQUE_U64:
+ case ASN_OPAQUE_COUNTER64:
+ /*
+ * XXX - TODO - encode as raw OPAQUE for now (so fall through
+ * here).
+ */
+#endif
+
+ case ASN_OCTET_STR:
+ case ASN_IPADDRESS:
+ case ASN_OPAQUE:
+ if (!agentx_realloc_build_string
+ (buf, buf_len, out_len, allow_realloc, vp->val.string,
+ vp->val_len, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ break;
+
+ case ASN_OBJECT_ID:
+ case ASN_PRIV_EXCL_RANGE:
+ case ASN_PRIV_INCL_RANGE:
+ if (!agentx_realloc_build_oid
+ (buf, buf_len, out_len, allow_realloc, 1, vp->val.objid,
+ vp->val_len / sizeof(oid), network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ break;
+
+ case ASN_COUNTER64:
+ if (network_order) {
+ DEBUGDUMPHEADER("send", "Build Counter64 (high, low)");
+ if (!agentx_realloc_build_int
+ (buf, buf_len, out_len, allow_realloc,
+ vp->val.counter64->high, network_order)
+ || !agentx_realloc_build_int(buf, buf_len, out_len,
+ allow_realloc,
+ vp->val.counter64->low,
+ network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ } else {
+ DEBUGDUMPHEADER("send", "Build Counter64 (low, high)");
+ if (!agentx_realloc_build_int
+ (buf, buf_len, out_len, allow_realloc,
+ vp->val.counter64->low, network_order)
+ || !agentx_realloc_build_int(buf, buf_len, out_len,
+ allow_realloc,
+ vp->val.counter64->high,
+ network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ }
+ break;
+
+ case ASN_NULL:
+ case SNMP_NOSUCHOBJECT:
+ case SNMP_NOSUCHINSTANCE:
+ case SNMP_ENDOFMIBVIEW:
+ break;
+
+ default:
+ DEBUGMSGTL(("agentx_build_varbind", "unknown type %d (0x%02x)\n",
+ vp->type, vp->type));
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 1;
+}
+
+int
+agentx_realloc_build_header(u_char ** buf, size_t * buf_len,
+ size_t * out_len, int allow_realloc,
+ netsnmp_pdu *pdu)
+{
+ size_t ilen = *out_len;
+ const int network_order =
+ pdu->flags & AGENTX_FLAGS_NETWORK_BYTE_ORDER;
+
+ while ((*out_len + 4) >= *buf_len) {
+ if (!(allow_realloc && snmp_realloc(buf, buf_len))) {
+ return 0;
+ }
+ }
+
+ /*
+ * First 4 bytes are version, pdu type, flags, and a 0 reserved byte.
+ */
+
+ *(*buf + *out_len) = 1;
+ (*out_len)++;
+ *(*buf + *out_len) = pdu->command;
+ (*out_len)++;
+ *(*buf + *out_len) = (u_char) (pdu->flags & AGENTX_MSG_FLAGS_MASK);
+ (*out_len)++;
+ *(*buf + *out_len) = 0;
+ (*out_len)++;
+
+ DEBUGDUMPHEADER("send", "AgentX Header");
+ DEBUGDUMPSETUP("send", (*buf + ilen), 4);
+ DEBUGMSG(("dumpv_send", " Version:\t%d\n", (int) *(*buf + ilen)));
+ DEBUGPRINTINDENT("dumpv_send");
+ DEBUGMSG(("dumpv_send", " Command:\t%d (%s)\n", pdu->command,
+ agentx_cmd((u_char)pdu->command)));
+ DEBUGPRINTINDENT("dumpv_send");
+ DEBUGMSG(("dumpv_send", " Flags:\t%02x\n", (int) *(*buf + ilen + 2)));
+
+ DEBUGDUMPHEADER("send", "Session ID");
+ if (!agentx_realloc_build_int(buf, buf_len, out_len, allow_realloc,
+ pdu->sessid, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+
+ DEBUGDUMPHEADER("send", "Transaction ID");
+ if (!agentx_realloc_build_int(buf, buf_len, out_len, allow_realloc,
+ pdu->transid, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+
+ DEBUGDUMPHEADER("send", "Request ID");
+ if (!agentx_realloc_build_int(buf, buf_len, out_len, allow_realloc,
+ pdu->reqid, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+
+ DEBUGDUMPHEADER("send", "Dummy Length :-(");
+ if (!agentx_realloc_build_int(buf, buf_len, out_len, allow_realloc,
+ 0, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+
+ if (pdu->flags & AGENTX_MSG_FLAG_NON_DEFAULT_CONTEXT) {
+ DEBUGDUMPHEADER("send", "Community");
+ if (!agentx_realloc_build_string
+ (buf, buf_len, out_len, allow_realloc, pdu->community,
+ pdu->community_len, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+ }
+
+ DEBUGINDENTLESS();
+ return 1;
+}
+
+static int
+_agentx_realloc_build(u_char ** buf, size_t * buf_len, size_t * out_len,
+ int allow_realloc,
+ netsnmp_session * session, netsnmp_pdu *pdu)
+{
+ size_t ilen = *out_len, prefix_offset = 0;
+ netsnmp_variable_list *vp;
+ int inc, i = 0;
+ const int network_order =
+ pdu->flags & AGENTX_FLAGS_NETWORK_BYTE_ORDER;
+
+ session->s_snmp_errno = 0;
+ session->s_errno = 0;
+
+ /*
+ * Various PDU types don't include context information (RFC 2741, p. 20).
+ */
+ switch (pdu->command) {
+ case AGENTX_MSG_OPEN:
+ case AGENTX_MSG_CLOSE:
+ case AGENTX_MSG_RESPONSE:
+ case AGENTX_MSG_COMMITSET:
+ case AGENTX_MSG_UNDOSET:
+ case AGENTX_MSG_CLEANUPSET:
+ pdu->flags &= ~(AGENTX_MSG_FLAG_NON_DEFAULT_CONTEXT);
+ }
+
+ /*
+ * Build the header (and context if appropriate).
+ */
+ if (!agentx_realloc_build_header
+ (buf, buf_len, out_len, allow_realloc, pdu)) {
+ return 0;
+ }
+
+ /*
+ * Everything causes a response, except for agentx-Response-PDU and
+ * agentx-CleanupSet-PDU.
+ */
+
+ pdu->flags |= UCD_MSG_FLAG_EXPECT_RESPONSE;
+
+ DEBUGDUMPHEADER("send", "AgentX Payload");
+ switch (pdu->command) {
+
+ case AGENTX_MSG_OPEN:
+ /*
+ * Timeout
+ */
+ while ((*out_len + 4) >= *buf_len) {
+ if (!(allow_realloc && snmp_realloc(buf, buf_len))) {
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ }
+ *(*buf + *out_len) = (u_char) pdu->time;
+ (*out_len)++;
+ for (i = 0; i < 3; i++) {
+ *(*buf + *out_len) = 0;
+ (*out_len)++;
+ }
+ DEBUGDUMPHEADER("send", "Open Timeout");
+ DEBUGDUMPSETUP("send", (*buf + *out_len - 4), 4);
+ DEBUGMSG(("dumpv_send", " Timeout:\t%d\n",
+ (int) *(*buf + *out_len - 4)));
+ DEBUGINDENTLESS();
+
+ DEBUGDUMPHEADER("send", "Open ID");
+ if (!agentx_realloc_build_oid
+ (buf, buf_len, out_len, allow_realloc, 0, pdu->variables->name,
+ pdu->variables->name_length, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+ DEBUGDUMPHEADER("send", "Open Description");
+ if (!agentx_realloc_build_string
+ (buf, buf_len, out_len, allow_realloc,
+ pdu->variables->val.string, pdu->variables->val_len,
+ network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+ break;
+
+ case AGENTX_MSG_CLOSE:
+ /*
+ * Reason
+ */
+ while ((*out_len + 4) >= *buf_len) {
+ if (!(allow_realloc && snmp_realloc(buf, buf_len))) {
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ }
+ *(*buf + *out_len) = (u_char) pdu->errstat;
+ (*out_len)++;
+ for (i = 0; i < 3; i++) {
+ *(*buf + *out_len) = 0;
+ (*out_len)++;
+ }
+ DEBUGDUMPHEADER("send", "Close Reason");
+ DEBUGDUMPSETUP("send", (*buf + *out_len - 4), 4);
+ DEBUGMSG(("dumpv_send", " Reason:\t%d\n",
+ (int) *(*buf + *out_len - 4)));
+ DEBUGINDENTLESS();
+ break;
+
+ case AGENTX_MSG_REGISTER:
+ case AGENTX_MSG_UNREGISTER:
+ while ((*out_len + 4) >= *buf_len) {
+ if (!(allow_realloc && snmp_realloc(buf, buf_len))) {
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ }
+ if (pdu->command == AGENTX_MSG_REGISTER) {
+ *(*buf + *out_len) = (u_char) pdu->time;
+ } else {
+ *(*buf + *out_len) = 0;
+ }
+ (*out_len)++;
+ *(*buf + *out_len) = (u_char) pdu->priority;
+ (*out_len)++;
+ *(*buf + *out_len) = (u_char) pdu->range_subid;
+ (*out_len)++;
+ *(*buf + *out_len) = (u_char) 0;
+ (*out_len)++;
+
+ DEBUGDUMPHEADER("send", "(Un)Register Header");
+ DEBUGDUMPSETUP("send", (*buf + *out_len - 4), 4);
+ if (pdu->command == AGENTX_MSG_REGISTER) {
+ DEBUGMSG(("dumpv_send", " Timeout:\t%d\n",
+ (int) *(*buf + *out_len - 4)));
+ DEBUGPRINTINDENT("dumpv_send");
+ }
+ DEBUGMSG(("dumpv_send", " Priority:\t%d\n",
+ (int) *(*buf + *out_len - 3)));
+ DEBUGPRINTINDENT("dumpv_send");
+ DEBUGMSG(("dumpv_send", " Range SubID:\t%d\n",
+ (int) *(*buf + *out_len - 2)));
+ DEBUGINDENTLESS();
+
+ vp = pdu->variables;
+ prefix_offset = *out_len + 1;
+ DEBUGDUMPHEADER("send", "(Un)Register Prefix");
+ if (!agentx_realloc_build_oid
+ (buf, buf_len, out_len, allow_realloc, 0, vp->name,
+ vp->name_length, network_order)) {
+
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+
+ if (pdu->range_subid) {
+ DEBUGDUMPHEADER("send", "(Un)Register Range");
+ if (!agentx_realloc_build_int
+ (buf, buf_len, out_len, allow_realloc,
+ vp->val.objid[pdu->range_subid - 1], network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+ }
+ break;
+
+ case AGENTX_MSG_GETBULK:
+ DEBUGDUMPHEADER("send", "GetBulk Non-Repeaters");
+ if (!agentx_realloc_build_short
+ (buf, buf_len, out_len, allow_realloc,
+ (u_short)pdu->non_repeaters,
+ network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+
+ DEBUGDUMPHEADER("send", "GetBulk Max-Repetitions");
+ if (!agentx_realloc_build_short
+ (buf, buf_len, out_len, allow_realloc,
+ (u_short)pdu->max_repetitions,
+ network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+
+ /*
+ * Fallthrough
+ */
+
+ case AGENTX_MSG_GET:
+ case AGENTX_MSG_GETNEXT:
+ DEBUGDUMPHEADER("send", "Get* Variable List");
+ for (vp = pdu->variables; vp != NULL; vp = vp->next_variable) {
+ inc = (vp->type == ASN_PRIV_INCL_RANGE);
+ if (!agentx_realloc_build_oid
+ (buf, buf_len, out_len, allow_realloc, inc, vp->name,
+ vp->name_length, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ if (!agentx_realloc_build_oid
+ (buf, buf_len, out_len, allow_realloc, 0, vp->val.objid,
+ vp->val_len / sizeof(oid), network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ }
+ DEBUGINDENTLESS();
+ break;
+
+ case AGENTX_MSG_RESPONSE:
+ pdu->flags &= ~(UCD_MSG_FLAG_EXPECT_RESPONSE);
+ if (!agentx_realloc_build_int(buf, buf_len, out_len, allow_realloc,
+ pdu->time, network_order)) {
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGDUMPHEADER("send", "Response");
+ DEBUGDUMPSETUP("send", (*buf + *out_len - 4), 4);
+ DEBUGMSG(("dumpv_send", " sysUpTime:\t%d\n", pdu->time));
+ DEBUGINDENTLESS();
+
+ if (!agentx_realloc_build_short
+ (buf, buf_len, out_len, allow_realloc,
+ (u_short)pdu->errstat,
+ network_order)
+ || !agentx_realloc_build_short(buf, buf_len, out_len,
+ allow_realloc,
+ (u_short)pdu->errindex,
+ network_order)) {
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGDUMPHEADER("send", "Response errors");
+ DEBUGDUMPSETUP("send", (*buf + *out_len - 4), 4);
+ DEBUGMSG(("dumpv_send", " errstat:\t%d\n", pdu->errstat));
+ DEBUGPRINTINDENT("dumpv_send");
+ DEBUGMSG(("dumpv_send", " errindex:\t%d\n", pdu->errindex));
+ DEBUGINDENTLESS();
+
+ /*
+ * Fallthrough
+ */
+
+ case AGENTX_MSG_INDEX_ALLOCATE:
+ case AGENTX_MSG_INDEX_DEALLOCATE:
+ case AGENTX_MSG_NOTIFY:
+ case AGENTX_MSG_TESTSET:
+ DEBUGDUMPHEADER("send", "Get* Variable List");
+ for (vp = pdu->variables; vp != NULL; vp = vp->next_variable) {
+ if (!agentx_realloc_build_varbind
+ (buf, buf_len, out_len, allow_realloc, vp,
+ network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ }
+ DEBUGINDENTLESS();
+ break;
+
+ case AGENTX_MSG_COMMITSET:
+ case AGENTX_MSG_UNDOSET:
+ case AGENTX_MSG_PING:
+ /*
+ * "Empty" packet.
+ */
+ break;
+
+ case AGENTX_MSG_CLEANUPSET:
+ pdu->flags &= ~(UCD_MSG_FLAG_EXPECT_RESPONSE);
+ break;
+
+ case AGENTX_MSG_ADD_AGENT_CAPS:
+ DEBUGDUMPHEADER("send", "AgentCaps OID");
+ if (!agentx_realloc_build_oid
+ (buf, buf_len, out_len, allow_realloc, 0, pdu->variables->name,
+ pdu->variables->name_length, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+
+ DEBUGDUMPHEADER("send", "AgentCaps Description");
+ if (!agentx_realloc_build_string
+ (buf, buf_len, out_len, allow_realloc,
+ pdu->variables->val.string, pdu->variables->val_len,
+ network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+ break;
+
+ case AGENTX_MSG_REMOVE_AGENT_CAPS:
+ DEBUGDUMPHEADER("send", "AgentCaps OID");
+ if (!agentx_realloc_build_oid
+ (buf, buf_len, out_len, allow_realloc, 0, pdu->variables->name,
+ pdu->variables->name_length, network_order)) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return 0;
+ }
+ DEBUGINDENTLESS();
+ break;
+
+ default:
+ session->s_snmp_errno = SNMPERR_UNKNOWN_PDU;
+ return 0;
+ }
+ DEBUGINDENTLESS();
+
+ /*
+ * Fix the payload length (ignoring the 20-byte header).
+ */
+
+ agentx_build_int((*buf + 16), (*out_len - ilen) - 20, network_order);
+
+ DEBUGMSGTL(("agentx_build", "packet built okay\n"));
+ return 1;
+}
+
+int
+agentx_realloc_build(netsnmp_session * session, netsnmp_pdu *pdu,
+ u_char ** buf, size_t * buf_len, size_t * out_len)
+{
+ if (session == NULL || buf_len == NULL ||
+ out_len == NULL || pdu == NULL || buf == NULL) {
+ return -1;
+ }
+ if (!_agentx_realloc_build(buf, buf_len, out_len, 1, session, pdu)) {
+ if (session->s_snmp_errno == 0) {
+ session->s_snmp_errno = SNMPERR_BAD_ASN1_BUILD;
+ }
+ return -1;
+ }
+
+ return 0;
+}
+
+ /***********************
+ *
+ * Utility functions for parsing an AgentX packet
+ *
+ ***********************/
+
+int
+agentx_parse_int(u_char * data, u_int network_byte_order)
+{
+ u_int value = 0;
+
+ /*
+ * Note - this doesn't handle 'PDP_ENDIAN' systems
+ * If anyone needs this added, contact the coders list
+ */
+ DEBUGDUMPSETUP("recv", data, 4);
+ if (network_byte_order) {
+ memmove(&value, data, 4);
+#ifndef WORDS_BIGENDIAN
+ value = ntohl(value);
+#endif
+ } else {
+#ifndef WORDS_BIGENDIAN
+ memmove(&value, data, 4);
+#else
+ /*
+ * The equivalent of the 'ntohl()' macro,
+ * except this macro is null on big-endian systems
+ */
+ value += data[3];
+ value <<= 8;
+ value += data[2];
+ value <<= 8;
+ value += data[1];
+ value <<= 8;
+ value += data[0];
+#endif
+ }
+ DEBUGMSG(("dumpv_recv", " Integer:\t%ld (0x%.2X)\n", value, value));
+
+ return value;
+}
+
+
+int
+agentx_parse_short(u_char * data, u_int network_byte_order)
+{
+ u_short value = 0;
+
+ if (network_byte_order) {
+ memmove(&value, data, 2);
+#ifndef WORDS_BIGENDIAN
+ value = ntohs(value);
+#endif
+ } else {
+#ifndef WORDS_BIGENDIAN
+ memmove(&value, data, 2);
+#else
+ /*
+ * The equivalent of the 'ntohs()' macro,
+ * except this macro is null on big-endian systems
+ */
+ value += data[1];
+ value <<= 8;
+ value += data[0];
+#endif
+ }
+
+ DEBUGDUMPSETUP("recv", data, 2);
+ DEBUGMSG(("dumpv_recv", " Short:\t%ld (0x%.2X)\n", value, value));
+ return value;
+}
+
+
+u_char *
+agentx_parse_oid(u_char * data, size_t * length, int *inc,
+ oid * oid_buf, size_t * oid_len, u_int network_byte_order)
+{
+ u_int n_subid;
+ u_int prefix;
+ int i;
+ int int_offset;
+ u_int *int_ptr = (u_int *)oid_buf;
+ u_char *buf_ptr = data;
+
+ if (*length < 4) {
+ DEBUGMSGTL(("agentx", "Incomplete Object ID"));
+ return NULL;
+ }
+
+ DEBUGDUMPHEADER("recv", "OID Header");
+ DEBUGDUMPSETUP("recv", data, 4);
+ DEBUGMSG(("dumpv_recv", " # subids:\t%d (0x%.2X)\n", data[0],
+ data[0]));
+ DEBUGPRINTINDENT("dumpv_recv");
+ DEBUGMSG(("dumpv_recv", " prefix: \t%d (0x%.2X)\n", data[1],
+ data[1]));
+ DEBUGPRINTINDENT("dumpv_recv");
+ DEBUGMSG(("dumpv_recv", " inclusive:\t%d (0x%.2X)\n", data[2],
+ data[2]));
+
+ DEBUGINDENTLESS();
+ DEBUGDUMPHEADER("recv", "OID Segments");
+
+ n_subid = data[0];
+ prefix = data[1];
+ if (inc)
+ *inc = data[2];
+ int_offset = sizeof(oid)/4;
+
+ buf_ptr += 4;
+ *length -= 4;
+
+ DEBUGMSG(("djp", " parse_oid\n"));
+ DEBUGMSG(("djp", " sizeof(oid) = %d\n", sizeof(oid)));
+ if (n_subid == 0 && prefix == 0) {
+ /*
+ * Null OID
+ */
+ *int_ptr = 0;
+ int_ptr++;
+ *int_ptr = 0;
+ int_ptr++;
+ *oid_len = 2;
+ DEBUGPRINTINDENT("dumpv_recv");
+ DEBUGMSG(("dumpv_recv", "OID: NULL (0.0)\n"));
+ DEBUGINDENTLESS();
+ return buf_ptr;
+ }
+
+
+#ifdef WORDS_BIGENDIAN
+# define endianoff 1
+#else
+# define endianoff 0
+#endif
+ if (*length < 4 * n_subid) {
+ DEBUGMSGTL(("agentx", "Incomplete Object ID"));
+ return NULL;
+ }
+
+ if (prefix) {
+ if (int_offset == 2) { /* align OID values in 64 bit agent */
+ memset(int_ptr, 0, 10*sizeof(int_ptr[0]));
+ int_ptr[0+endianoff] = 1;
+ int_ptr[2+endianoff] = 3;
+ int_ptr[4+endianoff] = 6;
+ int_ptr[6+endianoff] = 1;
+ int_ptr[8+endianoff] = prefix;
+ } else { /* assume int_offset == 1 */
+ int_ptr[0] = 1;
+ int_ptr[1] = 3;
+ int_ptr[2] = 6;
+ int_ptr[3] = 1;
+ int_ptr[4] = prefix;
+ }
+ int_ptr = int_ptr + (int_offset * 5);
+ }
+
+ for (i = 0; i < (int) (int_offset * n_subid); i = i + int_offset) {
+ int x;
+
+ x = agentx_parse_int(buf_ptr, network_byte_order);
+ if (int_offset == 2) {
+ int_ptr[i+0] = 0;
+ int_ptr[i+1] = 0;
+ int_ptr[i+endianoff]=x;
+ } else {
+ int_ptr[i] = x;
+ }
+ buf_ptr += 4;
+ *length -= 4;
+ }
+
+ *oid_len = (prefix ? n_subid + 5 : n_subid);
+
+ DEBUGINDENTLESS();
+ DEBUGPRINTINDENT("dumpv_recv");
+ DEBUGMSG(("dumpv_recv", "OID: "));
+ DEBUGMSGOID(("dumpv_recv", oid_buf, *oid_len));
+ DEBUGMSG(("dumpv_recv", "\n"));
+
+ return buf_ptr;
+}
+
+
+
+u_char *
+agentx_parse_string(u_char * data, size_t * length,
+ u_char * string, size_t * str_len,
+ u_int network_byte_order)
+{
+ u_int len;
+
+ if (*length < 4) {
+ DEBUGMSGTL(("agentx", "Incomplete string (too short: %d)",
+ *length));
+ return NULL;
+ }
+
+ len = agentx_parse_int(data, network_byte_order);
+ if (*length < len + 4) {
+ DEBUGMSGTL(("agentx", "Incomplete string (still too short: %d)",
+ *length));
+ return NULL;
+ }
+ if (len > *str_len) {
+ DEBUGMSGTL(("agentx", "String too long (too long)"));
+ return NULL;
+ }
+ memmove(string, data + 4, len);
+ string[len] = '\0';
+ *str_len = len;
+
+ len += 3; /* Extend the string length to include the padding */
+ len >>= 2;
+ len <<= 2;
+
+ *length -= (len + 4);
+ DEBUGDUMPSETUP("recv", data, (len + 4));
+ DEBUGIF("dumpv_recv") {
+ u_char *buf = NULL;
+ size_t buf_len = 0, out_len = 0;
+
+ if (sprint_realloc_asciistring(&buf, &buf_len, &out_len, 1,
+ string, len)) {
+ DEBUGMSG(("dumpv_recv", "String: %s\n", buf));
+ } else {
+ DEBUGMSG(("dumpv_recv", "String: %s [TRUNCATED]\n", buf));
+ }
+ if (buf != NULL) {
+ free(buf);
+ }
+ }
+ return data + (len + 4);
+}
+
+u_char *
+agentx_parse_opaque(u_char * data, size_t * length, int *type,
+ u_char * opaque_buf, size_t * opaque_len,
+ u_int network_byte_order)
+{
+ union {
+ float floatVal;
+ double doubleVal;
+ int intVal[2];
+ char c[sizeof(double)];
+ } fu;
+ int tmp;
+ u_char *buf;
+ u_char *cp;
+
+ cp = agentx_parse_string(data, length,
+ opaque_buf, opaque_len, network_byte_order);
+ if (cp == NULL)
+ return NULL;
+
+ buf = opaque_buf;
+
+#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
+ if ((buf[0] != ASN_OPAQUE_TAG1) || (*opaque_len <= 3))
+ return cp; /* Unrecognised opaque type */
+
+ switch (buf[1]) {
+ case ASN_OPAQUE_FLOAT:
+ if ((*opaque_len != (3 + sizeof(float))) ||
+ (buf[2] != sizeof(float)))
+ return cp; /* Encoding isn't right for FLOAT */
+
+ memcpy(&fu.c[0], &buf[3], sizeof(float));
+ fu.intVal[0] = ntohl(fu.intVal[0]);
+ *opaque_len = sizeof(float);
+ memcpy(opaque_buf, &fu.c[0], sizeof(float));
+ *type = ASN_OPAQUE_FLOAT;
+ DEBUGMSG(("dumpv_recv", "Float: %f\n", fu.floatVal));
+ return cp;
+
+ case ASN_OPAQUE_DOUBLE:
+ if ((*opaque_len != (3 + sizeof(double))) ||
+ (buf[2] != sizeof(double)))
+ return cp; /* Encoding isn't right for DOUBLE */
+
+ memcpy(&fu.c[0], &buf[3], sizeof(double));
+ tmp = ntohl(fu.intVal[1]);
+ fu.intVal[1] = ntohl(fu.intVal[0]);
+ fu.intVal[0] = tmp;
+ *opaque_len = sizeof(double);
+ memcpy(opaque_buf, &fu.c[0], sizeof(double));
+ *type = ASN_OPAQUE_DOUBLE;
+ DEBUGMSG(("dumpv_recv", "Double: %lf\n", fu.doubleVal));
+ return cp;
+
+ case ASN_OPAQUE_I64:
+ case ASN_OPAQUE_U64:
+ case ASN_OPAQUE_COUNTER64:
+ default:
+ return cp; /* Unrecognised opaque sub-type */
+ }
+#else
+ return cp;
+#endif
+}
+
+
+u_char *
+agentx_parse_varbind(u_char * data, size_t * length, int *type,
+ oid * oid_buf, size_t * oid_len,
+ u_char * data_buf, size_t * data_len,
+ u_int network_byte_order)
+{
+ u_char *bufp = data;
+ u_int int_val;
+ int int_offset;
+ u_int *int_ptr = (u_int *) data_buf;
+ struct counter64 tmp64;
+
+ DEBUGDUMPHEADER("recv", "VarBind:");
+ DEBUGDUMPHEADER("recv", "Type");
+ *type = agentx_parse_short(bufp, network_byte_order);
+ DEBUGINDENTLESS();
+ bufp += 4;
+ *length -= 4;
+
+ bufp = agentx_parse_oid(bufp, length, NULL, oid_buf, oid_len,
+ network_byte_order);
+ if (bufp == NULL) {
+ DEBUGINDENTLESS();
+ return NULL;
+ }
+
+ switch (*type) {
+ case ASN_INTEGER:
+ case ASN_COUNTER:
+ case ASN_GAUGE:
+ case ASN_TIMETICKS:
+ int_val = agentx_parse_int(bufp, network_byte_order);
+ memmove(data_buf, &int_val, 4);
+ *data_len = 4;
+ bufp += 4;
+ *length -= 4;
+ break;
+
+ case ASN_OCTET_STR:
+ case ASN_IPADDRESS:
+ bufp = agentx_parse_string(bufp, length, data_buf, data_len,
+ network_byte_order);
+ break;
+
+ case ASN_OPAQUE:
+ bufp = agentx_parse_opaque(bufp, length, type, data_buf, data_len,
+ network_byte_order);
+ break;
+
+ case ASN_PRIV_INCL_RANGE:
+ case ASN_PRIV_EXCL_RANGE:
+ case ASN_OBJECT_ID:
+ bufp =
+ agentx_parse_oid(bufp, length, NULL, (oid *) data_buf,
+ data_len, network_byte_order);
+ *data_len *= sizeof(oid);
+ /*
+ * 'agentx_parse_oid()' returns the number of sub_ids
+ */
+ break;
+
+ case ASN_COUNTER64:
+ memset(&tmp64, 0, sizeof(tmp64));
+ if (network_byte_order) {
+ tmp64.high = agentx_parse_int(bufp, network_byte_order);
+ tmp64.low = agentx_parse_int(bufp+4, network_byte_order);
+ } else {
+ tmp64.high = agentx_parse_int(bufp+4, network_byte_order);
+ tmp64.low = agentx_parse_int(bufp, network_byte_order);
+ }
+
+ memcpy(data_buf, &tmp64, sizeof(tmp64));
+ *data_len = sizeof(tmp64);
+ bufp += 8;
+ *length -= 8;
+ break;
+
+ case ASN_NULL:
+ case SNMP_NOSUCHOBJECT:
+ case SNMP_NOSUCHINSTANCE:
+ case SNMP_ENDOFMIBVIEW:
+ /*
+ * No data associated with these types.
+ */
+ *data_len = 0;
+ break;
+
+ default:
+ DEBUGINDENTLESS();
+ return NULL;
+ }
+ DEBUGINDENTLESS();
+ return bufp;
+}
+
+/*
+ * AgentX header:
+ *
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | h.version | h.type | h.flags | <reserved> |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | h.sessionID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | h.transactionID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | h.packetID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | h.payload_length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * Total length = 20 bytes
+ *
+ * If we don't seem to have the full packet, return NULL
+ * and let the driving code go back for the rest.
+ * Don't report this as an error, as it's quite "normal"
+ * with a connection-oriented service.
+ *
+ * Note that once the header has been successfully processed
+ * (and hence we should have the full packet), any subsequent
+ * "running out of room" is indeed an error.
+ */
+u_char *
+agentx_parse_header(netsnmp_pdu *pdu, u_char * data, size_t * length)
+{
+ register u_char *bufp = data;
+ size_t payload;
+
+ if (*length < 20) { /* Incomplete header */
+ return NULL;
+ }
+
+ DEBUGDUMPHEADER("recv", "AgentX Header");
+ DEBUGDUMPHEADER("recv", "Version");
+ DEBUGDUMPSETUP("recv", bufp, 1);
+ pdu->version = AGENTX_VERSION_BASE | *bufp;
+ DEBUGMSG(("dumpv_recv", " Version:\t%d\n", *bufp));
+ DEBUGINDENTLESS();
+ bufp++;
+
+ DEBUGDUMPHEADER("recv", "Command");
+ DEBUGDUMPSETUP("recv", bufp, 1);
+ pdu->command = *bufp;
+ DEBUGMSG(("dumpv_recv", " Command:\t%d (%s)\n", *bufp,
+ agentx_cmd(*bufp)));
+ DEBUGINDENTLESS();
+ bufp++;
+
+ DEBUGDUMPHEADER("recv", "Flags");
+ DEBUGDUMPSETUP("recv", bufp, 1);
+ pdu->flags |= *bufp;
+ DEBUGMSG(("dumpv_recv", " Flags:\t0x%x\n", *bufp));
+ DEBUGINDENTLESS();
+ bufp++;
+
+ DEBUGDUMPHEADER("recv", "Reserved Byte");
+ DEBUGDUMPSETUP("recv", bufp, 1);
+ DEBUGMSG(("dumpv_recv", " Reserved:\t0x%x\n", *bufp));
+ DEBUGINDENTLESS();
+ bufp++;
+
+ DEBUGDUMPHEADER("recv", "Session ID");
+ pdu->sessid = agentx_parse_int(bufp,
+ pdu->
+ flags &
+ AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ DEBUGINDENTLESS();
+ bufp += 4;
+
+ DEBUGDUMPHEADER("recv", "Transaction ID");
+ pdu->transid = agentx_parse_int(bufp,
+ pdu->
+ flags &
+ AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ DEBUGINDENTLESS();
+ bufp += 4;
+
+ DEBUGDUMPHEADER("recv", "Packet ID");
+ pdu->reqid = agentx_parse_int(bufp,
+ pdu->
+ flags & AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ DEBUGINDENTLESS();
+ bufp += 4;
+
+ DEBUGDUMPHEADER("recv", "Payload Length");
+ payload = agentx_parse_int(bufp,
+ pdu->
+ flags & AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ DEBUGINDENTLESS();
+ bufp += 4;
+
+ *length -= 20;
+ if (*length != payload) { /* Short payload */
+ return NULL;
+ }
+ return bufp;
+}
+
+
+int
+agentx_parse(netsnmp_session * session, netsnmp_pdu *pdu, u_char * data,
+ size_t len)
+{
+ register u_char *bufp = data;
+ u_char buffer[SNMP_MAX_MSG_SIZE];
+ u_char *prefix_ptr;
+ oid oid_buffer[MAX_OID_LEN], end_oid_buf[MAX_OID_LEN];
+ size_t buf_len = sizeof(buffer);
+ size_t oid_buf_len = MAX_OID_LEN;
+ size_t end_oid_buf_len = MAX_OID_LEN;
+
+ int range_bound; /* OID-range upper bound */
+ int inc; /* Inclusive SearchRange flag */
+ int type; /* VarBind data type */
+ size_t *length = &len;
+
+ if (pdu == NULL) {
+ /*
+ * Dump the packet in a formatted style
+ */
+ pdu = (netsnmp_pdu *) malloc(sizeof(netsnmp_pdu));
+ free(pdu);
+ return (0);
+ }
+ if (!IS_AGENTX_VERSION(session->version))
+ return SNMPERR_BAD_VERSION;
+
+#ifndef SNMPERR_INCOMPLETE_PACKET
+ /*
+ * Ideally, "short" packets on stream connections should
+ * be handled specially, and the driving code set up to
+ * keep reading until the full packet is received.
+ *
+ * For now, lets assume that all packets are read in one go.
+ * I've probably inflicted enough damage on the UCD library
+ * for one week!
+ *
+ * I'll come back to this once Wes is speaking to me again.
+ */
+#define SNMPERR_INCOMPLETE_PACKET SNMPERR_ASN_PARSE_ERR
+#endif
+
+
+ /*
+ * Handle (common) header ....
+ */
+ bufp = agentx_parse_header(pdu, bufp, length);
+ if (bufp == NULL)
+ return SNMPERR_INCOMPLETE_PACKET; /* i.e. wait for the rest */
+
+ /*
+ * Control PDU handling
+ */
+ pdu->flags |= UCD_MSG_FLAG_ALWAYS_IN_VIEW;
+ pdu->flags |= UCD_MSG_FLAG_FORCE_PDU_COPY;
+ pdu->flags &= (~UCD_MSG_FLAG_RESPONSE_PDU);
+
+ /*
+ * ... and (not-un-common) context
+ */
+ if (pdu->flags & AGENTX_MSG_FLAG_NON_DEFAULT_CONTEXT) {
+ DEBUGDUMPHEADER("recv", "Context");
+ bufp = agentx_parse_string(bufp, length, buffer, &buf_len,
+ pdu->flags &
+ AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ DEBUGINDENTLESS();
+ if (bufp == NULL)
+ return SNMPERR_ASN_PARSE_ERR;
+
+ pdu->community_len = buf_len;
+ snmp_clone_mem((void **) &pdu->community,
+ (void *) buffer, (unsigned) buf_len);
+ buf_len = sizeof(buffer);
+ }
+
+ DEBUGDUMPHEADER("recv", "PDU");
+ DEBUGINDENTMORE();
+ switch (pdu->command) {
+ case AGENTX_MSG_OPEN:
+ pdu->time = *bufp; /* Timeout */
+ bufp += 4;
+ *length -= 4;
+
+ /*
+ * Store subagent OID & description in a VarBind
+ */
+ DEBUGDUMPHEADER("recv", "Subagent OID");
+ bufp = agentx_parse_oid(bufp, length, NULL,
+ oid_buffer, &oid_buf_len,
+ pdu->flags & AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ DEBUGINDENTLESS();
+ if (bufp == NULL) {
+ DEBUGINDENTLESS();
+ return SNMPERR_ASN_PARSE_ERR;
+ }
+ DEBUGDUMPHEADER("recv", "Subagent Description");
+ bufp = agentx_parse_string(bufp, length, buffer, &buf_len,
+ pdu->flags &
+ AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ DEBUGINDENTLESS();
+ if (bufp == NULL) {
+ DEBUGINDENTLESS();
+ return SNMPERR_ASN_PARSE_ERR;
+ }
+ snmp_pdu_add_variable(pdu, oid_buffer, oid_buf_len,
+ ASN_OCTET_STR, buffer, buf_len);
+
+ oid_buf_len = MAX_OID_LEN;
+ buf_len = sizeof(buffer);
+ break;
+
+ case AGENTX_MSG_CLOSE:
+ pdu->errstat = *bufp; /* Reason */
+ bufp += 4;
+ *length -= 4;
+
+ break;
+
+ case AGENTX_MSG_UNREGISTER:
+ case AGENTX_MSG_REGISTER:
+ DEBUGDUMPHEADER("recv", "Registration Header");
+ if (pdu->command == AGENTX_MSG_REGISTER) {
+ pdu->time = *bufp; /* Timeout (Register only) */
+ DEBUGDUMPSETUP("recv", bufp, 1);
+ DEBUGMSG(("dumpv_recv", " Timeout: \t%d\n", *bufp));
+ }
+ bufp++;
+ pdu->priority = *bufp;
+ DEBUGDUMPSETUP("recv", bufp, 1);
+ DEBUGMSG(("dumpv_recv", " Priority: \t%d\n", *bufp));
+ bufp++;
+ pdu->range_subid = *bufp;
+ DEBUGDUMPSETUP("recv", bufp, 1);
+ DEBUGMSG(("dumpv_recv", " Range Sub-Id:\t%d\n", *bufp));
+ bufp++;
+ bufp++;
+ *length -= 4;
+ DEBUGINDENTLESS();
+
+ prefix_ptr = bufp + 1;
+ DEBUGDUMPHEADER("recv", "Registration OID");
+ bufp = agentx_parse_oid(bufp, length, NULL,
+ oid_buffer, &oid_buf_len,
+ pdu->flags & AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ DEBUGINDENTLESS();
+ if (bufp == NULL) {
+ DEBUGINDENTLESS();
+ return SNMPERR_ASN_PARSE_ERR;
+ }
+
+ if (pdu->range_subid) {
+ range_bound = agentx_parse_int(bufp, pdu->flags &
+ AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ bufp += 4;
+ *length -= 4;
+
+ /*
+ * Construct the end-OID.
+ */
+ end_oid_buf_len = oid_buf_len * sizeof(oid);
+ memcpy(end_oid_buf, oid_buffer, end_oid_buf_len);
+ end_oid_buf[pdu->range_subid - 1] = range_bound;
+
+ snmp_pdu_add_variable(pdu, oid_buffer, oid_buf_len,
+ ASN_PRIV_INCL_RANGE,
+ (u_char *) end_oid_buf, end_oid_buf_len);
+ } else {
+ snmp_add_null_var(pdu, oid_buffer, oid_buf_len);
+ }
+
+ oid_buf_len = MAX_OID_LEN;
+ break;
+
+ case AGENTX_MSG_GETBULK:
+ DEBUGDUMPHEADER("recv", "Non-repeaters");
+ pdu->non_repeaters = agentx_parse_short(bufp, pdu->flags &
+ AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ DEBUGINDENTLESS();
+ DEBUGDUMPHEADER("recv", "Max-repeaters");
+ pdu->max_repetitions = agentx_parse_short(bufp + 2, pdu->flags &
+ AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ DEBUGINDENTLESS();
+ bufp += 4;
+ *length -= 4;
+ /*
+ * Fallthrough - SearchRange handling is the same
+ */
+
+ case AGENTX_MSG_GETNEXT:
+ case AGENTX_MSG_GET:
+
+ /*
+ * * SearchRange List
+ * * Keep going while we have data left
+ */
+ DEBUGDUMPHEADER("recv", "Search Range");
+ while (*length > 0) {
+ bufp = agentx_parse_oid(bufp, length, &inc,
+ oid_buffer, &oid_buf_len,
+ pdu->flags &
+ AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ if (bufp == NULL) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return SNMPERR_ASN_PARSE_ERR;
+ }
+ bufp = agentx_parse_oid(bufp, length, NULL,
+ end_oid_buf, &end_oid_buf_len,
+ pdu->flags &
+ AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ if (bufp == NULL) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return SNMPERR_ASN_PARSE_ERR;
+ }
+ end_oid_buf_len *= sizeof(oid);
+ /*
+ * 'agentx_parse_oid()' returns the number of sub_ids
+ */
+
+ if (inc) {
+ snmp_pdu_add_variable(pdu, oid_buffer, oid_buf_len,
+ ASN_PRIV_INCL_RANGE,
+ (u_char *) end_oid_buf,
+ end_oid_buf_len);
+ } else {
+ snmp_pdu_add_variable(pdu, oid_buffer, oid_buf_len,
+ ASN_PRIV_EXCL_RANGE,
+ (u_char *) end_oid_buf,
+ end_oid_buf_len);
+ }
+ }
+
+ DEBUGINDENTLESS();
+ oid_buf_len = MAX_OID_LEN;
+ end_oid_buf_len = MAX_OID_LEN;
+ break;
+
+
+ case AGENTX_MSG_RESPONSE:
+
+ pdu->flags |= UCD_MSG_FLAG_RESPONSE_PDU;
+
+ /*
+ * sysUpTime
+ */
+ pdu->time = agentx_parse_int(bufp, pdu->flags &
+ AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ bufp += 4;
+ *length -= 4;
+
+ pdu->errstat = agentx_parse_short(bufp, pdu->flags &
+ AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ pdu->errindex =
+ agentx_parse_short(bufp + 2,
+ pdu->flags & AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ bufp += 4;
+ *length -= 4;
+ /*
+ * Fallthrough - VarBind handling is the same
+ */
+
+ case AGENTX_MSG_INDEX_ALLOCATE:
+ case AGENTX_MSG_INDEX_DEALLOCATE:
+ case AGENTX_MSG_NOTIFY:
+ case AGENTX_MSG_TESTSET:
+
+ /*
+ * * VarBind List
+ * * Keep going while we have data left
+ */
+
+ DEBUGDUMPHEADER("recv", "VarBindList");
+ while (*length > 0) {
+ bufp = agentx_parse_varbind(bufp, length, &type,
+ oid_buffer, &oid_buf_len,
+ buffer, &buf_len,
+ pdu->flags &
+ AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ if (bufp == NULL) {
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return SNMPERR_ASN_PARSE_ERR;
+ }
+ snmp_pdu_add_variable(pdu, oid_buffer, oid_buf_len,
+ (u_char) type, buffer, buf_len);
+
+ oid_buf_len = MAX_OID_LEN;
+ buf_len = sizeof(buffer);
+ }
+ DEBUGINDENTLESS();
+ break;
+
+ case AGENTX_MSG_COMMITSET:
+ case AGENTX_MSG_UNDOSET:
+ case AGENTX_MSG_CLEANUPSET:
+ case AGENTX_MSG_PING:
+
+ /*
+ * "Empty" packet
+ */
+ break;
+
+
+ case AGENTX_MSG_ADD_AGENT_CAPS:
+ /*
+ * Store AgentCap OID & description in a VarBind
+ */
+ bufp = agentx_parse_oid(bufp, length, NULL,
+ oid_buffer, &oid_buf_len,
+ pdu->flags & AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ if (bufp == NULL)
+ return SNMPERR_ASN_PARSE_ERR;
+ bufp = agentx_parse_string(bufp, length, buffer, &buf_len,
+ pdu->flags &
+ AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ if (bufp == NULL)
+ return SNMPERR_ASN_PARSE_ERR;
+ snmp_pdu_add_variable(pdu, oid_buffer, oid_buf_len,
+ ASN_OCTET_STR, buffer, buf_len);
+
+ oid_buf_len = MAX_OID_LEN;
+ buf_len = sizeof(buffer);
+ break;
+
+ case AGENTX_MSG_REMOVE_AGENT_CAPS:
+ /*
+ * Store AgentCap OID & description in a VarBind
+ */
+ bufp = agentx_parse_oid(bufp, length, NULL,
+ oid_buffer, &oid_buf_len,
+ pdu->flags & AGENTX_FLAGS_NETWORK_BYTE_ORDER);
+ if (bufp == NULL)
+ return SNMPERR_ASN_PARSE_ERR;
+ snmp_add_null_var(pdu, oid_buffer, oid_buf_len);
+
+ oid_buf_len = MAX_OID_LEN;
+ break;
+
+ default:
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ DEBUGMSGTL(("agentx", "Unrecognised PDU type: %d\n",
+ pdu->command));
+ return SNMPERR_UNKNOWN_PDU;
+ }
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ DEBUGINDENTLESS();
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+#ifdef TESTING
+
+testit(netsnmp_pdu *pdu1)
+{
+ char packet1[BUFSIZ];
+ char packet2[BUFSIZ];
+ int len1, len2;
+ netsnmp_pdu pdu2;
+ netsnmp_session sess;
+
+ memset(&pdu2, 0, sizeof(netsnmp_pdu));
+ memset(packet1, 0, BUFSIZ);
+ memset(packet2, 0, BUFSIZ);
+
+ /*
+ * Encode this into a "packet"
+ */
+ len1 = BUFSIZ;
+ if (agentx_build(&sess, pdu1, packet1, &len1) < 0) {
+ DEBUGMSGTL(("agentx", "First build failed"));
+ exit(1);
+ }
+
+ DEBUGMSGTL(("agentx", "First build succeeded:\n"));
+ xdump(packet1, len1, "Ax1> ");
+
+ /*
+ * Unpack this into a PDU
+ */
+ len2 = len1;
+ if (agentx_parse(&pdu2, packet1, &len2, (u_char **) NULL) < 0) {
+ DEBUGMSGTL(("agentx", "First parse failed\n"));
+ exit(1);
+ }
+ DEBUGMSGTL(("agentx", "First parse succeeded:\n"));
+ if (len2 != 0)
+ DEBUGMSGTL(("agentx",
+ "Warning - parsed packet has %d bytes left\n", len2));
+
+ /*
+ * Encode this into another "packet"
+ */
+ len2 = BUFSIZ;
+ if (agentx_build(&sess, &pdu2, packet2, &len2) < 0) {
+ DEBUGMSGTL(("agentx", "Second build failed\n"));
+ exit(1);
+ }
+
+ DEBUGMSGTL(("agentx", "Second build succeeded:\n"));
+ xdump(packet2, len2, "Ax2> ");
+
+ /*
+ * Compare the results
+ */
+ if (len1 != len2) {
+ DEBUGMSGTL(("agentx",
+ "Error: first build (%d) is different to second (%d)\n",
+ len1, len2));
+ exit(1);
+ }
+ if (memcmp(packet1, packet2, len1) != 0) {
+ DEBUGMSGTL(("agentx",
+ "Error: first build data is different to second\n"));
+ exit(1);
+ }
+
+ DEBUGMSGTL(("agentx", "OK\n"));
+}
+
+
+
+main()
+{
+ netsnmp_pdu pdu1;
+ oid oid_buf[] = { 1, 3, 6, 1, 2, 1, 10 };
+ oid oid_buf2[] = { 1, 3, 6, 1, 2, 1, 20 };
+ oid null_oid[] = { 0, 0 };
+ char *string = "Example string";
+ char *context = "LUCS";
+
+
+ /*
+ * Create an example AgentX pdu structure
+ */
+
+ memset(&pdu1, 0, sizeof(netsnmp_pdu));
+ pdu1.command = AGENTX_MSG_TESTSET;
+ pdu1.flags = 0;
+ pdu1.sessid = 16;
+ pdu1.transid = 24;
+ pdu1.reqid = 132;
+
+ pdu1.time = 10;
+ pdu1.non_repeaters = 3;
+ pdu1.max_repetitions = 32;
+ pdu1.priority = 5;
+ pdu1.range_subid = 0;
+
+ snmp_pdu_add_variable(&pdu1, oid_buf, sizeof(oid_buf) / sizeof(oid),
+ ASN_OBJECT_ID, (char *) oid_buf2,
+ sizeof(oid_buf2));
+ snmp_pdu_add_variable(&pdu1, oid_buf, sizeof(oid_buf) / sizeof(oid),
+ ASN_INTEGER, (char *) &pdu1.reqid,
+ sizeof(pdu1.reqid));
+ snmp_pdu_add_variable(&pdu1, oid_buf, sizeof(oid_buf) / sizeof(oid),
+ ASN_OCTET_STR, (char *) string, strlen(string));
+
+ printf("Test with non-network order.....\n");
+ testit(&pdu1);
+
+ printf("\nTest with network order.....\n");
+ pdu1.flags |= AGENTX_FLAGS_NETWORK_BYTE_ORDER;
+ testit(&pdu1);
+
+ pdu1.community = context;
+ pdu1.community_len = strlen(context);
+ pdu1.flags |= AGENTX_FLAGS_NON_DEFAULT_CONTEXT;
+ printf("Test with non-default context.....\n");
+ testit(&pdu1);
+
+
+}
+#endif
+
+/*
+ * returns the proper length of an incoming agentx packet.
+ */
+/*
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | h.version | h.type | h.flags | <reserved> |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | h.sessionID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | h.transactionID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | h.packetID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | h.payload_length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 20 bytes in header
+ */
+
+int
+agentx_check_packet(u_char * packet, size_t packet_len)
+{
+
+ if (packet_len < 20)
+ return 0; /* minimum header length == 20 */
+
+ return agentx_parse_int(packet + 16,
+ *(packet +
+ 2) & AGENTX_FLAGS_NETWORK_BYTE_ORDER) + 20;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/protocol.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/protocol.h
new file mode 100644
index 0000000000..341923ea3f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/protocol.h
@@ -0,0 +1,114 @@
+#ifndef AGENTX_PROTOCOL_H
+#define AGENTX_PROTOCOL_H
+
+config_belongs_in(agent_module)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ /*
+ * Definitions for Agent Extensibility Protocol (RFC 2257)
+ *
+ */
+
+#define AGENTX_PORT 705
+#ifndef NETSNMP_AGENTX_SOCKET
+#define NETSNMP_AGENTX_SOCKET "/var/agentx/master"
+#endif
+
+ /*
+ * AgentX versions
+ */
+ /*
+ * Use values distinct from those used to represent SNMP versions
+ */
+
+#define AGENTX_VERSION_BASE 192 /* Binary: 11xxxxxx */
+#define AGENTX_VERSION_1 (AGENTX_VERSION_BASE | 0x1)
+
+#define IS_AGENTX_VERSION(v) (((v)&AGENTX_VERSION_BASE) == AGENTX_VERSION_BASE)
+
+
+ /*
+ * PDU types in AgentX
+ */
+#define AGENTX_MSG_OPEN ((u_char)1)
+#define AGENTX_MSG_CLOSE ((u_char)2)
+#define AGENTX_MSG_REGISTER ((u_char)3)
+#define AGENTX_MSG_UNREGISTER ((u_char)4)
+#define AGENTX_MSG_GET ((u_char)5)
+#define AGENTX_MSG_GETNEXT ((u_char)6)
+#define AGENTX_MSG_GETBULK ((u_char)7)
+#define AGENTX_MSG_TESTSET ((u_char)8)
+#define AGENTX_MSG_COMMITSET ((u_char)9)
+#define AGENTX_MSG_UNDOSET ((u_char)10)
+#define AGENTX_MSG_CLEANUPSET ((u_char)11)
+#define AGENTX_MSG_NOTIFY ((u_char)12)
+#define AGENTX_MSG_PING ((u_char)13)
+#define AGENTX_MSG_INDEX_ALLOCATE ((u_char)14)
+#define AGENTX_MSG_INDEX_DEALLOCATE ((u_char)15)
+#define AGENTX_MSG_ADD_AGENT_CAPS ((u_char)16)
+#define AGENTX_MSG_REMOVE_AGENT_CAPS ((u_char)17)
+#define AGENTX_MSG_RESPONSE ((u_char)18)
+
+
+ /*
+ * Error codes from RFC 2257
+ */
+#define AGENTX_ERR_OPEN_FAILED (256)
+#define AGENTX_ERR_NOT_OPEN (257)
+#define AGENTX_ERR_INDEX_WRONG_TYPE (258)
+#define AGENTX_ERR_INDEX_ALREADY_ALLOCATED (259)
+#define AGENTX_ERR_INDEX_NONE_AVAILABLE (260)
+#define AGENTX_ERR_INDEX_NOT_ALLOCATED (261)
+#define AGENTX_ERR_UNSUPPORTED_CONTEXT (262)
+#define AGENTX_ERR_DUPLICATE_REGISTRATION (263)
+#define AGENTX_ERR_UNKNOWN_REGISTRATION (264)
+#define AGENTX_ERR_UNKNOWN_AGENTCAPS (265)
+
+ /*
+ * added in 1999 revision
+ */
+#define AGENTX_ERR_NOERROR SNMP_ERR_NOERROR
+#define AGENTX_ERR_PARSE_FAILED (266)
+#define AGENTX_ERR_REQUEST_DENIED (267)
+#define AGENTX_ERR_PROCESSING_ERROR (268)
+
+ /*
+ * Message processing models
+ */
+#define AGENTX_MP_MODEL_AGENTXv1 (257)
+
+
+ /*
+ * PDU Flags - see also 'UCD_MSG_FLAG_xxx' in snmp.h
+ */
+#define AGENTX_MSG_FLAG_INSTANCE_REGISTER 0x01
+#define AGENTX_MSG_FLAG_NEW_INSTANCE 0x02
+#define AGENTX_MSG_FLAG_ANY_INSTANCE 0x04
+#define AGENTX_MSG_FLAG_NON_DEFAULT_CONTEXT 0x08
+#define AGENTX_MSG_FLAG_NETWORK_BYTE_ORDER 0x10
+
+#define AGENTX_MSG_FLAGS_MASK 0xff
+
+ /*
+ * Session Flags - see also 'UCD_FLAGS_xxx' in snmp.h
+ */
+#define AGENTX_FLAGS_NETWORK_BYTE_ORDER AGENTX_MSG_FLAG_NETWORK_BYTE_ORDER
+
+
+
+ int agentx_build(netsnmp_session *, netsnmp_pdu *,
+ u_char *, size_t *);
+ int agentx_realloc_build(netsnmp_session * session,
+ netsnmp_pdu *pdu, u_char ** buf,
+ size_t * buf_len,
+ size_t * out_len);
+ int agentx_parse(netsnmp_session *, netsnmp_pdu *,
+ u_char *, size_t);
+ int agentx_check_packet(u_char *, size_t);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* AGENTX_PROTOCOL_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/subagent.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/subagent.c
new file mode 100644
index 0000000000..391fe04f84
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/subagent.c
@@ -0,0 +1,995 @@
+/*
+ * AgentX sub-agent
+ */
+#include <net-snmp/net-snmp-config.h>
+
+#include <sys/types.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/library/snmp_assert.h>
+
+#include "snmpd.h"
+#include "agentx/protocol.h"
+#include "agentx/client.h"
+#include "agentx/agentx_config.h"
+#include <net-snmp/agent/agent_callbacks.h>
+#include <net-snmp/agent/agent_trap.h>
+#ifdef USING_MIBII_SYSORTABLE_MODULE
+#include "mibII/sysORTable.h"
+#endif
+
+#include "subagent.h"
+
+#ifdef USING_AGENTX_SUBAGENT_MODULE
+
+static SNMPCallback subagent_register_ping_alarm;
+static SNMPAlarmCallback agentx_reopen_session;
+void agentx_register_callbacks(netsnmp_session * s);
+void agentx_unregister_callbacks(netsnmp_session * ss);
+int handle_subagent_response(int op, netsnmp_session * session,
+ int reqid, netsnmp_pdu *pdu,
+ void *magic);
+int handle_subagent_set_response(int op,
+ netsnmp_session * session,
+ int reqid, netsnmp_pdu *pdu,
+ void *magic);
+void subagent_startup_callback(unsigned int clientreg,
+ void *clientarg);
+int subagent_open_master_session(void);
+
+typedef struct _net_snmpsubagent_magic_s {
+ int original_command;
+ netsnmp_session *session;
+ netsnmp_variable_list *ovars;
+} ns_subagent_magic;
+
+struct agent_netsnmp_set_info {
+ int transID;
+ int mode;
+ int errstat;
+ time_t uptime;
+ netsnmp_session *sess;
+ netsnmp_variable_list *var_list;
+
+ struct agent_netsnmp_set_info *next;
+};
+
+static struct agent_netsnmp_set_info *Sets = NULL;
+
+netsnmp_session *agentx_callback_sess = NULL;
+extern int callback_master_num;
+extern netsnmp_session *main_session; /* from snmp_agent.c */
+
+int
+subagent_startup(int majorID, int minorID,
+ void *serverarg, void *clientarg)
+{
+ DEBUGMSGTL(("agentx/subagent", "connecting to master...\n"));
+ /*
+ * if a valid ping interval has been defined, call agentx_reopen_session
+ * to try to connect to master or setup a ping alarm if it couldn't
+ * succeed. if no ping interval was set up, just try to connect once.
+ */
+ if (netsnmp_ds_get_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL) > 0)
+ agentx_reopen_session(0, NULL);
+ else {
+ subagent_open_master_session();
+ }
+ return 0;
+}
+
+/**
+ * init subagent callback (local) session and connect to master agent
+ *
+ * @returns 0 for success, !0 otherwise
+ */
+int
+subagent_init(void)
+{
+ static int init = 0;
+ int rc = 0;
+
+ DEBUGMSGTL(("agentx/subagent", "initializing....\n"));
+
+ if (++init != 1)
+ return 0;
+
+ netsnmp_assert(netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_ROLE) == SUB_AGENT);
+
+#ifndef NETSNMP_TRANSPORT_CALLBACK_DOMAIN
+ snmp_log(LOG_WARNING,"AgentX subagent has been disabled because "
+ "the callback transport is not available.\n");
+ return -1;
+#endif /* NETSNMP_TRANSPORT_CALLBACK_DOMAIN */
+
+ /*
+ * open (local) callback session
+ */
+ if (agentx_callback_sess == NULL) {
+ agentx_callback_sess = netsnmp_callback_open(callback_master_num,
+ handle_subagent_response,
+ NULL, NULL);
+ DEBUGMSGTL(("agentx/subagent", "subagent_init sess %08x\n",
+ agentx_callback_sess));
+ }
+ if (NULL == agentx_callback_sess)
+ return -1;
+
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY,
+ SNMP_CALLBACK_POST_READ_CONFIG,
+ subagent_startup, NULL);
+
+ DEBUGMSGTL(("agentx/subagent", "initializing.... DONE\n"));
+
+ return rc;
+}
+
+void
+netsnmp_enable_subagent(void) {
+ netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE,
+ SUB_AGENT);
+}
+
+struct agent_netsnmp_set_info *
+save_set_vars(netsnmp_session * ss, netsnmp_pdu *pdu)
+{
+ struct agent_netsnmp_set_info *ptr;
+ struct timeval now;
+ extern struct timeval starttime;
+
+ ptr = (struct agent_netsnmp_set_info *)
+ malloc(sizeof(struct agent_netsnmp_set_info));
+ if (ptr == NULL)
+ return NULL;
+
+ /*
+ * Save the important information
+ */
+ ptr->transID = pdu->transid;
+ ptr->sess = ss;
+ ptr->mode = SNMP_MSG_INTERNAL_SET_RESERVE1;
+ gettimeofday(&now, NULL);
+ ptr->uptime = calculate_time_diff(&now, &starttime);
+
+ ptr->var_list = snmp_clone_varbind(pdu->variables);
+ if (ptr->var_list == NULL) {
+ free(ptr);
+ return NULL;
+ }
+
+ ptr->next = Sets;
+ Sets = ptr;
+
+ return ptr;
+}
+
+struct agent_netsnmp_set_info *
+restore_set_vars(netsnmp_session * sess, netsnmp_pdu *pdu)
+{
+ struct agent_netsnmp_set_info *ptr;
+
+ for (ptr = Sets; ptr != NULL; ptr = ptr->next)
+ if (ptr->sess == sess && ptr->transID == pdu->transid)
+ break;
+
+ if (ptr == NULL || ptr->var_list == NULL)
+ return NULL;
+
+ pdu->variables = snmp_clone_varbind(ptr->var_list);
+ if (pdu->variables == NULL)
+ return NULL;
+
+ return ptr;
+}
+
+
+void
+free_set_vars(netsnmp_session * ss, netsnmp_pdu *pdu)
+{
+ struct agent_netsnmp_set_info *ptr, *prev = NULL;
+
+ for (ptr = Sets; ptr != NULL; ptr = ptr->next) {
+ if (ptr->sess == ss && ptr->transID == pdu->transid) {
+ if (prev)
+ prev->next = ptr->next;
+ else
+ Sets = ptr->next;
+ snmp_free_varbind(ptr->var_list);
+ free(ptr);
+ return;
+ }
+ prev = ptr;
+ }
+}
+
+int
+handle_agentx_packet(int operation, netsnmp_session * session, int reqid,
+ netsnmp_pdu *pdu, void *magic)
+{
+ struct agent_netsnmp_set_info *asi = NULL;
+ snmp_callback mycallback;
+ netsnmp_pdu *internal_pdu = NULL;
+ void *retmagic = NULL;
+ ns_subagent_magic *smagic = NULL;
+ int result;
+
+ if (operation == NETSNMP_CALLBACK_OP_DISCONNECT) {
+ struct synch_state *state = (struct synch_state *) magic;
+ int period =
+ netsnmp_ds_get_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL);
+ DEBUGMSGTL(("agentx/subagent",
+ "transport disconnect indication\n"));
+
+ /*
+ * deal with existing session. This happend if agentx sends
+ * a message to the master, but the master goes away before
+ * a response is sent. agentx will spin in snmp_synch_response_cb,
+ * waiting for a response. At the very least, the waiting
+ * flag must be set to break that loop. The rest is copied
+ * from disconnect handling in snmp_sync_input.
+ */
+ if(state) {
+ state->waiting = 0;
+ state->pdu = NULL;
+ state->status = STAT_ERROR;
+ session->s_snmp_errno = SNMPERR_ABORT;
+ SET_SNMP_ERROR(SNMPERR_ABORT);
+ }
+
+ /*
+ * Deregister the ping alarm, if any, and invalidate all other
+ * references to this session.
+ */
+ if (session->securityModel != SNMP_DEFAULT_SECMODEL) {
+ snmp_alarm_unregister(session->securityModel);
+ }
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_INDEX_STOP, (void *) session);
+ agentx_unregister_callbacks(session);
+ remove_trap_session(session);
+ register_mib_detach();
+ main_session = NULL;
+ if (period != 0) {
+ /*
+ * Pings are enabled, so periodically attempt to re-establish contact
+ * with the master agent. Don't worry about the handle,
+ * agentx_reopen_session unregisters itself if it succeeds in talking
+ * to the master agent.
+ */
+ snmp_alarm_register(period, SA_REPEAT, agentx_reopen_session,
+ NULL);
+ }
+ return 0;
+ } else if (operation != NETSNMP_CALLBACK_OP_RECEIVED_MESSAGE) {
+ DEBUGMSGTL(("agentx/subagent", "unexpected callback op %d\n",
+ operation));
+ return 1;
+ }
+
+ /*
+ * ok, we have a pdu from the net. Modify as needed
+ */
+
+ DEBUGMSGTL(("agentx/subagent", "handling agentx request (req=0x%x,trans="
+ "0x%x,sess=0x%x)\n", pdu->reqid,pdu->transid, pdu->sessid));
+ pdu->version = AGENTX_VERSION_1;
+ pdu->flags |= UCD_MSG_FLAG_ALWAYS_IN_VIEW;
+
+ if (pdu->command == AGENTX_MSG_GET
+ || pdu->command == AGENTX_MSG_GETNEXT
+ || pdu->command == AGENTX_MSG_GETBULK) {
+ smagic =
+ (ns_subagent_magic *) calloc(1, sizeof(ns_subagent_magic));
+ if (smagic == NULL) {
+ DEBUGMSGTL(("agentx/subagent", "couldn't malloc() smagic\n"));
+ return 1;
+ }
+ smagic->original_command = pdu->command;
+ smagic->session = session;
+ smagic->ovars = NULL;
+ retmagic = (void *) smagic;
+ }
+
+ switch (pdu->command) {
+ case AGENTX_MSG_GET:
+ DEBUGMSGTL(("agentx/subagent", " -> get\n"));
+ pdu->command = SNMP_MSG_GET;
+ mycallback = handle_subagent_response;
+ break;
+
+ case AGENTX_MSG_GETNEXT:
+ DEBUGMSGTL(("agentx/subagent", " -> getnext\n"));
+ pdu->command = SNMP_MSG_GETNEXT;
+
+ /*
+ * We have to save a copy of the original variable list here because
+ * if the master agent has requested scoping for some of the varbinds
+ * that information is stored there.
+ */
+
+ smagic->ovars = snmp_clone_varbind(pdu->variables);
+ DEBUGMSGTL(("agentx/subagent", "saved variables\n"));
+ mycallback = handle_subagent_response;
+ break;
+
+ case AGENTX_MSG_GETBULK:
+ /*
+ * WWWXXX
+ */
+ DEBUGMSGTL(("agentx/subagent", " -> getbulk\n"));
+ pdu->command = SNMP_MSG_GETBULK;
+
+ /*
+ * We have to save a copy of the original variable list here because
+ * if the master agent has requested scoping for some of the varbinds
+ * that information is stored there.
+ */
+
+ smagic->ovars = snmp_clone_varbind(pdu->variables);
+ DEBUGMSGTL(("agentx/subagent", "saved variables at %p\n",
+ smagic->ovars));
+ mycallback = handle_subagent_response;
+ break;
+
+ case AGENTX_MSG_RESPONSE:
+ SNMP_FREE(smagic);
+ DEBUGMSGTL(("agentx/subagent", " -> response\n"));
+ return 1;
+
+ case AGENTX_MSG_TESTSET:
+ /*
+ * XXXWWW we have to map this twice to both RESERVE1 and RESERVE2
+ */
+ DEBUGMSGTL(("agentx/subagent", " -> testset\n"));
+ asi = save_set_vars(session, pdu);
+ if (asi == NULL) {
+ SNMP_FREE(smagic);
+ snmp_log(LOG_WARNING, "save_set_vars() failed\n");
+ return 1;
+ }
+ asi->mode = pdu->command = SNMP_MSG_INTERNAL_SET_RESERVE1;
+ mycallback = handle_subagent_set_response;
+ retmagic = asi;
+ break;
+
+ case AGENTX_MSG_COMMITSET:
+ DEBUGMSGTL(("agentx/subagent", " -> commitset\n"));
+ asi = restore_set_vars(session, pdu);
+ if (asi == NULL) {
+ SNMP_FREE(smagic);
+ snmp_log(LOG_WARNING, "restore_set_vars() failed\n");
+ return 1;
+ }
+ if (asi->mode != SNMP_MSG_INTERNAL_SET_RESERVE2) {
+ SNMP_FREE(smagic);
+ snmp_log(LOG_WARNING,
+ "dropping bad AgentX request (wrong mode %d)\n",
+ asi->mode);
+ return 1;
+ }
+ asi->mode = pdu->command = SNMP_MSG_INTERNAL_SET_ACTION;
+ mycallback = handle_subagent_set_response;
+ retmagic = asi;
+ break;
+
+ case AGENTX_MSG_CLEANUPSET:
+ DEBUGMSGTL(("agentx/subagent", " -> cleanupset\n"));
+ asi = restore_set_vars(session, pdu);
+ if (asi == NULL) {
+ SNMP_FREE(smagic);
+ snmp_log(LOG_WARNING, "restore_set_vars() failed\n");
+ return 1;
+ }
+ if (asi->mode == SNMP_MSG_INTERNAL_SET_RESERVE1 ||
+ asi->mode == SNMP_MSG_INTERNAL_SET_RESERVE2) {
+ asi->mode = pdu->command = SNMP_MSG_INTERNAL_SET_FREE;
+ } else if (asi->mode == SNMP_MSG_INTERNAL_SET_ACTION) {
+ asi->mode = pdu->command = SNMP_MSG_INTERNAL_SET_COMMIT;
+ } else {
+ snmp_log(LOG_WARNING,
+ "dropping bad AgentX request (wrong mode %d)\n",
+ asi->mode);
+ SNMP_FREE(retmagic);
+ return 1;
+ }
+ mycallback = handle_subagent_set_response;
+ retmagic = asi;
+ break;
+
+ case AGENTX_MSG_UNDOSET:
+ DEBUGMSGTL(("agentx/subagent", " -> undoset\n"));
+ asi = restore_set_vars(session, pdu);
+ if (asi == NULL) {
+ SNMP_FREE(smagic);
+ snmp_log(LOG_WARNING, "restore_set_vars() failed\n");
+ return 1;
+ }
+ asi->mode = pdu->command = SNMP_MSG_INTERNAL_SET_UNDO;
+ mycallback = handle_subagent_set_response;
+ retmagic = asi;
+ break;
+
+ default:
+ SNMP_FREE(smagic);
+ DEBUGMSGTL(("agentx/subagent", " -> unknown command %d (%02x)\n",
+ pdu->command, pdu->command));
+ return 0;
+ }
+
+ /*
+ * submit the pdu to the internal handler
+ */
+
+ /*
+ * We have to clone the PDU here, because when we return from this
+ * callback, sess_process_packet will free(pdu), but this call also
+ * free()s its argument PDU.
+ */
+
+ internal_pdu = snmp_clone_pdu(pdu);
+ internal_pdu->contextName = internal_pdu->community;
+ internal_pdu->contextNameLen = internal_pdu->community_len;
+ internal_pdu->community = NULL;
+ internal_pdu->community_len = 0;
+ result = snmp_async_send(agentx_callback_sess, internal_pdu, mycallback,
+ retmagic);
+ if (result == 0) {
+ snmp_free_pdu(internal_pdu);
+ }
+ return 1;
+}
+
+int
+handle_subagent_response(int op, netsnmp_session * session, int reqid,
+ netsnmp_pdu *pdu, void *magic)
+{
+ ns_subagent_magic *smagic = (ns_subagent_magic *) magic;
+ netsnmp_variable_list *u = NULL, *v = NULL;
+ int rc = 0;
+
+ if (op != NETSNMP_CALLBACK_OP_RECEIVED_MESSAGE || magic == NULL) {
+ return 1;
+ }
+
+ pdu = snmp_clone_pdu(pdu);
+ DEBUGMSGTL(("agentx/subagent",
+ "handling AgentX response (cmd 0x%02x orig_cmd 0x%02x)\n",
+ pdu->command, smagic->original_command));
+
+ if (pdu->command == SNMP_MSG_INTERNAL_SET_FREE ||
+ pdu->command == SNMP_MSG_INTERNAL_SET_UNDO ||
+ pdu->command == SNMP_MSG_INTERNAL_SET_COMMIT) {
+ free_set_vars(smagic->session, pdu);
+ }
+
+ if (smagic->original_command == AGENTX_MSG_GETNEXT) {
+ DEBUGMSGTL(("agentx/subagent",
+ "do getNext scope processing %p %p\n", smagic->ovars,
+ pdu->variables));
+ for (u = smagic->ovars, v = pdu->variables; u != NULL && v != NULL;
+ u = u->next_variable, v = v->next_variable) {
+ if (snmp_oid_compare
+ (u->val.objid, u->val_len / sizeof(oid), nullOid,
+ nullOidLen) != 0) {
+ /*
+ * The master agent requested scoping for this variable.
+ */
+ rc = snmp_oid_compare(v->name, v->name_length,
+ u->val.objid,
+ u->val_len / sizeof(oid));
+ DEBUGMSGTL(("agentx/subagent", "result "));
+ DEBUGMSGOID(("agentx/subagent", v->name, v->name_length));
+ DEBUGMSG(("agentx/subagent", " scope to "));
+ DEBUGMSGOID(("agentx/subagent",
+ u->val.objid, u->val_len / sizeof(oid)));
+ DEBUGMSG(("agentx/subagent", " result %d\n", rc));
+
+ if (rc >= 0) {
+ /*
+ * The varbind is out of scope. From RFC2741, p. 66: "If
+ * the subagent cannot locate an appropriate variable,
+ * v.name is set to the starting OID, and the VarBind is
+ * set to `endOfMibView'".
+ */
+ snmp_set_var_objid(v, u->name, u->name_length);
+ snmp_set_var_typed_value(v, SNMP_ENDOFMIBVIEW, 0, 0);
+ DEBUGMSGTL(("agentx/subagent",
+ "scope violation -- return endOfMibView\n"));
+ }
+ } else {
+ DEBUGMSGTL(("agentx/subagent", "unscoped var\n"));
+ }
+ }
+ }
+
+ /*
+ * XXXJBPN: similar for GETBULK but the varbinds can get re-ordered I
+ * think which makes it er more difficult.
+ */
+
+ if (smagic->ovars != NULL) {
+ snmp_free_varbind(smagic->ovars);
+ }
+
+ pdu->command = AGENTX_MSG_RESPONSE;
+ pdu->version = smagic->session->version;
+
+ if (!snmp_send(smagic->session, pdu)) {
+ snmp_free_pdu(pdu);
+ }
+ DEBUGMSGTL(("agentx/subagent", " FINISHED\n"));
+ free(smagic);
+ return 1;
+}
+
+int
+handle_subagent_set_response(int op, netsnmp_session * session, int reqid,
+ netsnmp_pdu *pdu, void *magic)
+{
+ netsnmp_session *retsess;
+ struct agent_netsnmp_set_info *asi;
+ int result;
+
+ if (op != NETSNMP_CALLBACK_OP_RECEIVED_MESSAGE || magic == NULL) {
+ return 1;
+ }
+
+ DEBUGMSGTL(("agentx/subagent",
+ "handling agentx subagent set response (mode=%d,req=0x%x,"
+ "trans=0x%x,sess=0x%x)\n",
+ pdu->command, pdu->reqid,pdu->transid, pdu->sessid));
+ pdu = snmp_clone_pdu(pdu);
+
+ asi = (struct agent_netsnmp_set_info *) magic;
+ retsess = asi->sess;
+ asi->errstat = pdu->errstat;
+
+ if (asi->mode == SNMP_MSG_INTERNAL_SET_RESERVE1) {
+ /*
+ * reloop for RESERVE2 mode, an internal only agent mode
+ */
+ /*
+ * XXX: check exception statuses of reserve1 first
+ */
+ if (!pdu->errstat) {
+ asi->mode = pdu->command = SNMP_MSG_INTERNAL_SET_RESERVE2;
+ result = snmp_async_send(agentx_callback_sess, pdu,
+ handle_subagent_set_response, asi);
+ if (result == 0) {
+ snmp_free_pdu(pdu);
+ }
+ DEBUGMSGTL(("agentx/subagent",
+ " going from RESERVE1 -> RESERVE2\n"));
+ return 1;
+ }
+ } else {
+ if (asi->mode == SNMP_MSG_INTERNAL_SET_FREE ||
+ asi->mode == SNMP_MSG_INTERNAL_SET_UNDO ||
+ asi->mode == SNMP_MSG_INTERNAL_SET_COMMIT) {
+ free_set_vars(retsess, pdu);
+ }
+ snmp_free_varbind(pdu->variables);
+ pdu->variables = NULL; /* the variables were added by us */
+ }
+
+ netsnmp_assert(retsess != NULL);
+ pdu->command = AGENTX_MSG_RESPONSE;
+ pdu->version = retsess->version;
+
+ if (!snmp_send(retsess, pdu)) {
+ snmp_free_pdu(pdu);
+ }
+ DEBUGMSGTL(("agentx/subagent", " FINISHED\n"));
+ return 1;
+}
+
+
+
+int
+agentx_registration_callback(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ struct register_parameters *reg_parms =
+ (struct register_parameters *) serverarg;
+ netsnmp_session *agentx_ss = (netsnmp_session *) clientarg;
+
+ if (minorID == SNMPD_CALLBACK_REGISTER_OID)
+ return agentx_register(agentx_ss,
+ reg_parms->name, reg_parms->namelen,
+ reg_parms->priority,
+ reg_parms->range_subid,
+ reg_parms->range_ubound, reg_parms->timeout,
+ reg_parms->flags,
+ reg_parms->contextName);
+ else
+ return agentx_unregister(agentx_ss,
+ reg_parms->name, reg_parms->namelen,
+ reg_parms->priority,
+ reg_parms->range_subid,
+ reg_parms->range_ubound,
+ reg_parms->contextName);
+}
+
+
+#ifdef USING_MIBII_SYSORTABLE_MODULE
+int
+agentx_sysOR_callback(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ struct register_sysOR_parameters *reg_parms =
+ (struct register_sysOR_parameters *) serverarg;
+ netsnmp_session *agentx_ss = (netsnmp_session *) clientarg;
+
+ if (minorID == SNMPD_CALLBACK_REG_SYSOR)
+ return agentx_add_agentcaps(agentx_ss,
+ reg_parms->name, reg_parms->namelen,
+ reg_parms->descr);
+ else
+ return agentx_remove_agentcaps(agentx_ss,
+ reg_parms->name,
+ reg_parms->namelen);
+}
+#endif
+
+
+static int
+subagent_shutdown(int majorID, int minorID, void *serverarg, void *clientarg)
+{
+ netsnmp_session *thesession = (netsnmp_session *)clientarg;
+ DEBUGMSGTL(("agentx/subagent", "shutting down session....\n"));
+ if (thesession == NULL) {
+ DEBUGMSGTL(("agentx/subagent", "Empty session to shutdown\n"));
+ main_session = NULL;
+ return 0;
+ }
+ agentx_close_session(thesession, AGENTX_CLOSE_SHUTDOWN);
+ snmp_close(thesession);
+ main_session = NULL;
+ DEBUGMSGTL(("agentx/subagent", "shut down finished.\n"));
+ return 1;
+}
+
+
+
+/*
+ * Register all the "standard" AgentX callbacks for the given session.
+ */
+
+void
+agentx_register_callbacks(netsnmp_session * s)
+{
+ DEBUGMSGTL(("agentx/subagent",
+ "registering callbacks for session %p\n", s));
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_SHUTDOWN,
+ subagent_shutdown, s);
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REGISTER_OID,
+ agentx_registration_callback, s);
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_UNREGISTER_OID,
+ agentx_registration_callback, s);
+#ifdef USING_MIBII_SYSORTABLE_MODULE
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REG_SYSOR,
+ agentx_sysOR_callback, s);
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_UNREG_SYSOR,
+ agentx_sysOR_callback, s);
+#endif
+}
+
+/*
+ * Unregister all the callbacks associated with this session.
+ */
+
+void
+agentx_unregister_callbacks(netsnmp_session * ss)
+{
+ DEBUGMSGTL(("agentx/subagent",
+ "unregistering callbacks for session %p\n", ss));
+ snmp_unregister_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_SHUTDOWN,
+ subagent_shutdown, ss, 1);
+ snmp_unregister_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REGISTER_OID,
+ agentx_registration_callback, ss, 1);
+ snmp_unregister_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_UNREGISTER_OID,
+ agentx_registration_callback, ss, 1);
+#ifdef USING_MIBII_SYSORTABLE_MODULE
+ snmp_unregister_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REG_SYSOR,
+ agentx_sysOR_callback, ss, 1);
+ snmp_unregister_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_UNREG_SYSOR,
+ agentx_sysOR_callback, ss, 1);
+#endif
+
+}
+
+/*
+ * Open a session to the master agent.
+ */
+int
+subagent_open_master_session(void)
+{
+ netsnmp_transport *t;
+ netsnmp_session sess;
+
+ DEBUGMSGTL(("agentx/subagent", "opening session...\n"));
+
+ if (main_session) {
+ snmp_log(LOG_WARNING,
+ "AgentX session to master agent attempted to be re-opened.\n");
+ return -1;
+ }
+
+ snmp_sess_init(&sess);
+ sess.version = AGENTX_VERSION_1;
+ sess.retries = SNMP_DEFAULT_RETRIES;
+ sess.timeout = SNMP_DEFAULT_TIMEOUT;
+ sess.flags |= SNMP_FLAGS_STREAM_SOCKET;
+ sess.callback = handle_agentx_packet;
+ sess.authenticator = NULL;
+
+ t = netsnmp_transport_open_client(
+ "agentx", netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCKET));
+ if (t == NULL) {
+ /*
+ * Diagnose snmp_open errors with the input
+ * netsnmp_session pointer.
+ */
+ if (!netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS)) {
+ char buf[1024];
+ const char *socket =
+ netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCKET);
+ snprintf(buf, sizeof(buf), "Warning: "
+ "Failed to connect to the agentx master agent (%s)",
+ socket ? socket : "[NIL]");
+ if (!netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ netsnmp_sess_log_error(LOG_WARNING, buf, &sess);
+ } else {
+ snmp_sess_perror(buf, &sess);
+ }
+ }
+ return -1;
+ }
+
+ main_session =
+ snmp_add_full(&sess, t, NULL, agentx_parse, NULL, NULL,
+ agentx_realloc_build, agentx_check_packet, NULL);
+
+ if (main_session == NULL) {
+ if (!netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_CONNECTION_WARNINGS)) {
+ char buf[1024];
+ snprintf(buf, sizeof(buf), "Error: "
+ "Failed to create the agentx master agent session (%s)",
+ netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCKET));
+ snmp_sess_perror(buf, &sess);
+ }
+ netsnmp_transport_free(t);
+ return -1;
+ }
+
+ /*
+ * I don't know why 1 is success instead of the usual 0 = noerr,
+ * but that's what the function returns.
+ */
+ if (1 != agentx_open_session(main_session)) {
+ snmp_close(main_session);
+ main_session = NULL;
+ return -1;
+ }
+
+ /*
+ * subagent_register_ping_alarm assumes that securityModel will
+ * be set to SNMP_DEFAULT_SECMODEL on new AgentX sessions.
+ * This field is then (ab)used to hold the alarm stash.
+ *
+ * Why is the securityModel field used for this purpose, I hear you ask.
+ * Damn good question! (See SVN revision 4886)
+ */
+ main_session->securityModel = SNMP_DEFAULT_SECMODEL;
+
+ if (add_trap_session(main_session, AGENTX_MSG_NOTIFY, 1,
+ AGENTX_VERSION_1)) {
+ DEBUGMSGTL(("agentx/subagent", " trap session registered OK\n"));
+ } else {
+ DEBUGMSGTL(("agentx/subagent",
+ "trap session registration failed\n"));
+ snmp_close(main_session);
+ main_session = NULL;
+ return -1;
+ }
+
+ agentx_register_callbacks(main_session);
+
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_INDEX_START, (void *) main_session);
+
+ snmp_log(LOG_INFO, "NET-SNMP version %s AgentX subagent connected\n",
+ netsnmp_get_version());
+ DEBUGMSGTL(("agentx/subagent", "opening session... DONE (%p)\n",
+ main_session));
+
+ return 0;
+}
+
+
+/*
+ * Alarm callback function to open a session to the master agent. If a
+ * transport disconnection callback occurs, indicating that the master agent
+ * has died (or there has been some strange communication problem), this
+ * alarm is called repeatedly to try to re-open the connection.
+ */
+
+void
+agentx_reopen_session(unsigned int clientreg, void *clientarg)
+{
+ DEBUGMSGTL(("agentx/subagent", "agentx_reopen_session(%d) called\n",
+ clientreg));
+
+ if (subagent_open_master_session() == 0) {
+ /*
+ * Successful. Delete the alarm handle if one exists.
+ */
+ if (clientreg != 0) {
+ snmp_alarm_unregister(clientreg);
+ }
+
+ /*
+ * Reregister all our nodes.
+ */
+ register_mib_reattach();
+
+ /*
+ * Register a ping alarm (if need be).
+ */
+ subagent_register_ping_alarm(0, 0, 0, main_session);
+ } else {
+ if (clientreg == 0) {
+ /*
+ * Register a reattach alarm for later
+ */
+ subagent_register_ping_alarm(0, 0, 0, main_session);
+ }
+ }
+}
+
+/*
+ * If a valid session is passed in (through clientarg), register a
+ * ping handler to ping it frequently, else register an attempt to try
+ * and open it again later.
+ */
+
+static int
+subagent_register_ping_alarm(int majorID, int minorID,
+ void *serverarg, void *clientarg)
+{
+
+ netsnmp_session *ss = (netsnmp_session *) clientarg;
+ int ping_interval =
+ netsnmp_ds_get_int(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL);
+
+ if (!ping_interval) /* don't do anything if not setup properly */
+ return 0;
+
+ /*
+ * register a ping alarm, if desired
+ */
+ if (ss) {
+ if (ss->securityModel != SNMP_DEFAULT_SECMODEL) {
+ DEBUGMSGTL(("agentx/subagent",
+ "unregister existing alarm %d\n",
+ ss->securityModel));
+ snmp_alarm_unregister(ss->securityModel);
+ }
+
+ DEBUGMSGTL(("agentx/subagent",
+ "register ping alarm every %d seconds\n",
+ ping_interval));
+ /*
+ * we re-use the securityModel parameter for an alarm stash,
+ * since agentx doesn't need it
+ */
+ ss->securityModel = snmp_alarm_register(ping_interval, SA_REPEAT,
+ agentx_check_session, ss);
+ } else {
+ /*
+ * attempt to open it later instead
+ */
+ DEBUGMSGTL(("agentx/subagent",
+ "subagent not properly attached, postponing registration till later....\n"));
+ snmp_alarm_register(ping_interval, SA_REPEAT,
+ agentx_reopen_session, NULL);
+ }
+ return 0;
+}
+
+/*
+ * check a session validity for connectivity to the master agent. If
+ * not functioning, close and start attempts to reopen the session
+ */
+void
+agentx_check_session(unsigned int clientreg, void *clientarg)
+{
+ netsnmp_session *ss = (netsnmp_session *) clientarg;
+ if (!ss) {
+ if (clientreg)
+ snmp_alarm_unregister(clientreg);
+ return;
+ }
+ DEBUGMSGTL(("agentx/subagent", "checking status of session %p\n", ss));
+
+ if (!agentx_send_ping(ss)) {
+ snmp_log(LOG_WARNING,
+ "AgentX master agent failed to respond to ping. Attempting to re-register.\n");
+ /*
+ * master agent disappeared? Try and re-register.
+ * close first, just to be sure .
+ */
+ agentx_unregister_callbacks(ss);
+ agentx_close_session(ss, AGENTX_CLOSE_TIMEOUT);
+ snmp_alarm_unregister(clientreg); /* delete ping alarm timer */
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_INDEX_STOP, (void *) ss);
+ register_mib_detach();
+ if (main_session != NULL) {
+ remove_trap_session(ss);
+ snmp_close(main_session);
+ main_session = NULL;
+ agentx_reopen_session(0, NULL);
+ }
+ else {
+ snmp_close(main_session);
+ main_session = NULL;
+ }
+ } else {
+ DEBUGMSGTL(("agentx/subagent", "session %p responded to ping\n",
+ ss));
+ }
+}
+
+
+#endif /* USING_AGENTX_SUBAGENT_MODULE */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/subagent.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/subagent.h
new file mode 100644
index 0000000000..b55bec1d1d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/agentx/subagent.h
@@ -0,0 +1,21 @@
+#ifndef _AGENTX_SUBAGENT_H
+#define _AGENTX_SUBAGENT_H
+
+config_belongs_in(agent_module)
+
+config_require(agentx/protocol)
+config_require(agentx/client)
+config_require(agentx/agentx_config)
+
+#ifndef NETSNMP_TRANSPORT_CALLBACK_DOMAIN
+config_error(agentx/subagent depends on the Callback transport)
+#endif
+
+ int subagent_init(void);
+ int handle_agentx_packet(int, netsnmp_session *, int,
+ netsnmp_pdu *, void *);
+ SNMPCallback agentx_register_callback;
+ SNMPCallback agentx_unregister_callback;
+ SNMPAlarmCallback agentx_check_session;
+
+#endif /* _AGENTX_SUBAGENT_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/default_modules.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/default_modules.h
new file mode 100644
index 0000000000..6a77f708a1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/default_modules.h
@@ -0,0 +1,56 @@
+/* this is a Net-SNMP distributed file that sets all default mib
+ modules to be built into the Net-SNMP agent */
+
+
+/* these go into both the mini agent and the full agent */
+config_require(snmpv3mibs)
+
+#ifdef NETSNMP_MINI_AGENT
+
+/* limit the mibII modules to the bare minimum */
+config_require(mibII/snmp_mib)
+config_require(mibII/system_mib)
+config_require(mibII/sysORTable)
+config_require(mibII/vacm_vars)
+config_require(mibII/vacm_conf)
+config_require(utilities/execute)
+
+/* very few default mibs */
+config_add_mib(SNMPv2-MIB)
+config_add_mib(RFC1213-MIB)
+
+#else /* !NETSNMP_MINI_AGENT == the full shabang */
+
+config_require(mibII)
+config_require(ucd_snmp)
+config_require(notification)
+config_require(notification-log-mib)
+config_require(target)
+config_require(agent_mibs)
+config_require(agentx)
+config_require(disman/event)
+config_require(disman/schedule)
+config_require(utilities)
+
+/* default MIBs to auto-include for parsing */
+/* NOTE: we consider these MIBs users will likely want to load by
+ default, even if they're not supporting it in the agent (ie, the
+ command line tools need to load them anyway) */
+config_add_mib(IP-MIB)
+config_add_mib(IF-MIB)
+config_add_mib(TCP-MIB)
+config_add_mib(UDP-MIB)
+config_add_mib(HOST-RESOURCES-MIB)
+config_add_mib(SNMPv2-MIB)
+config_add_mib(RFC1213-MIB)
+config_add_mib(NOTIFICATION-LOG-MIB)
+config_add_mib(DISMAN-EVENT-MIB)
+config_add_mib(DISMAN-SCHEDULE-MIB)
+
+/* architecture specific extra modules */
+/* these symbols are set in the host specific net-snmp/system/<os>.h files */
+#ifdef NETSNMP_INCLUDE_HOST_RESOURCES
+ config_require(host)
+#endif
+
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman.h
new file mode 100644
index 0000000000..80f3e1fed5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman.h
@@ -0,0 +1,9 @@
+/*
+ * Wrapper for the full DisMan implementation
+ */
+config_require(disman/event-mib)
+config_require(disman/expression-mib)
+config_require(disman/schedule)
+/* config_require(disman/nslookup-mib) */
+/* config_require(disman/ping-mib) */
+/* config_require(disman/traceroute-mib) */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event-mib.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event-mib.h
new file mode 100644
index 0000000000..58c83915c2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event-mib.h
@@ -0,0 +1,2 @@
+config_require(disman/event)
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event.h
new file mode 100644
index 0000000000..e646975858
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event.h
@@ -0,0 +1,34 @@
+config_add_mib(DISMAN-EVENT-MIB)
+
+/*
+ * wrapper for the new disman event mib implementation code files
+ */
+config_require(disman/event/mteScalars)
+config_require(disman/event/mteTrigger)
+config_require(disman/event/mteTriggerTable)
+config_require(disman/event/mteTriggerDeltaTable)
+config_require(disman/event/mteTriggerExistenceTable)
+config_require(disman/event/mteTriggerBooleanTable)
+config_require(disman/event/mteTriggerThresholdTable)
+config_require(disman/event/mteTriggerConf)
+config_require(disman/event/mteEvent)
+config_require(disman/event/mteEventTable)
+config_require(disman/event/mteEventSetTable)
+config_require(disman/event/mteEventNotificationTable)
+config_require(disman/event/mteEventConf)
+config_require(disman/event/mteObjects)
+config_require(disman/event/mteObjectsTable)
+config_require(disman/event/mteObjectsConf)
+
+/*
+ * conflicts with the previous implementation
+ */
+config_exclude(disman/mteTriggerTable)
+config_exclude(disman/mteTriggerDeltaTable)
+config_exclude(disman/mteTriggerExistenceTable)
+config_exclude(disman/mteTriggerBooleanTable)
+config_exclude(disman/mteTriggerThresholdTable)
+config_exclude(disman/mteObjectsTable)
+config_exclude(disman/mteEventTable)
+config_exclude(disman/mteEventNotificationTable)
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEvent.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEvent.c
new file mode 100644
index 0000000000..327f8baba0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEvent.c
@@ -0,0 +1,480 @@
+/*
+ * DisMan Event MIB:
+ * Core implementation of the event handling behaviour
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/event/mteEvent.h"
+#include "disman/event/mteTrigger.h"
+#include "disman/event/mteObjects.h"
+
+netsnmp_tdata *event_table_data;
+
+ /*
+ * Initialize the container for the (combined) mteEvent*Table,
+ * regardless of which table initialisation routine is called first.
+ */
+
+void
+init_event_table_data(void)
+{
+ DEBUGMSGTL(("disman:event:init", "init event container\n"));
+ if (!event_table_data) {
+ event_table_data = netsnmp_tdata_create_table("mteEventTable", 0);
+ DEBUGMSGTL(("disman:event:init", "create event container (%x)\n",
+ event_table_data));
+ }
+}
+
+void _init_default_mteEvent( const char *event, const char *oname, int specific );
+void _init_link_mteEvent( const char *event, const char *oname, int specific );
+void _init_builtin_mteEvent( const char *event, const char *oname,
+ oid *trapOID, size_t trapOID_len );
+
+
+/** Initializes the mteEvent module */
+void
+init_mteEvent(void)
+{
+ static int _defaults_init = 0;
+ init_event_table_data();
+
+ /*
+ * Insert fixed events for the default trigger notifications
+ *
+ * NB: internal events (with an owner of "_snmpd") will not in
+ * fact refer to the mteObjectsTable for the payload varbinds.
+ * The routine mteObjects_internal_vblist() hardcodes the
+ * appropriate varbinds for these internal events.
+ * This routine will need to be updated whenever a new
+ * internal event is added.
+ */
+ if ( _defaults_init)
+ return;
+
+ _init_default_mteEvent( "mteTriggerFired", "_triggerFire", 1 );
+ _init_default_mteEvent( "mteTriggerRising", "_triggerFire", 2 );
+ _init_default_mteEvent( "mteTriggerFalling", "_triggerFire", 3 );
+ _init_default_mteEvent( "mteTriggerFailure", "_triggerFail", 4 );
+
+ _init_link_mteEvent( "linkDown", "_linkUpDown", 3 );
+ _init_link_mteEvent( "linkUp", "_linkUpDown", 4 );
+ _defaults_init = 1;
+}
+
+void
+_init_builtin_mteEvent( const char *event, const char *oname, oid *trapOID, size_t trapOID_len )
+{
+ char ename[ MTE_STR1_LEN+1 ];
+ netsnmp_tdata_row *row;
+ struct mteEvent *entry;
+
+ memset(ename, 0, sizeof(ename));
+ ename[0] = '_';
+ memcpy(ename+1, event, strlen(event));
+
+ row = mteEvent_createEntry( "_snmpd", ename, 1 );
+ if (!row || !row->data)
+ return;
+ entry = (struct mteEvent *)row->data;
+
+ entry->mteEventActions = MTE_EVENT_NOTIFICATION;
+ entry->mteNotification_len = trapOID_len;
+ memcpy( entry->mteNotification, trapOID, trapOID_len*sizeof(oid));
+ memcpy( entry->mteNotifyOwner, "_snmpd", 6 );
+ memcpy( entry->mteNotifyObjects, oname, strlen(oname));
+ entry->flags |= MTE_EVENT_FLAG_ENABLED|
+ MTE_EVENT_FLAG_ACTIVE|
+ MTE_EVENT_FLAG_VALID;
+}
+
+void
+_init_default_mteEvent( const char *event, const char *oname, int specific )
+{
+ oid mteTrapOID[] = {1, 3, 6, 1, 2, 1, 88, 2, 0, 99 /* placeholder */};
+ size_t mteTrapOID_len = OID_LENGTH(mteTrapOID);
+
+ mteTrapOID[ mteTrapOID_len-1 ] = specific;
+ _init_builtin_mteEvent( event, oname, mteTrapOID, mteTrapOID_len );
+}
+
+
+void
+_init_link_mteEvent( const char *event, const char *oname, int specific )
+{
+ oid mteTrapOID[] = {1, 3, 6, 1, 6, 3, 1, 1, 5, 99 /* placeholder */};
+ size_t mteTrapOID_len = OID_LENGTH(mteTrapOID);
+
+ mteTrapOID[ mteTrapOID_len-1 ] = specific;
+ _init_builtin_mteEvent( event, oname, mteTrapOID, mteTrapOID_len );
+}
+
+
+ /* ===================================================
+ *
+ * APIs for maintaining the contents of the (combined)
+ * mteEvent*Table container.
+ *
+ * =================================================== */
+
+void
+_mteEvent_dump(void)
+{
+ struct mteEvent *entry;
+ netsnmp_tdata_row *row;
+ int i = 0;
+
+ for (row = netsnmp_tdata_row_first(event_table_data);
+ row;
+ row = netsnmp_tdata_row_next(event_table_data, row)) {
+ entry = (struct mteEvent *)row->data;
+ DEBUGMSGTL(("disman:event:dump", "EventTable entry %d: ", i));
+ DEBUGMSGOID(("disman:event:dump", row->oid_index.oids, row->oid_index.len));
+ DEBUGMSG(("disman:event:dump", "(%s, %s)",
+ row->indexes->val.string,
+ row->indexes->next_variable->val.string));
+ DEBUGMSG(("disman:event:dump", ": %x, %x\n", row, entry));
+ i++;
+ }
+ DEBUGMSGTL(("disman:event:dump", "EventTable %d entries\n", i));
+}
+
+
+/*
+ * Create a new row in the event table
+ */
+netsnmp_tdata_row *
+mteEvent_createEntry(const char *mteOwner, const char *mteEName, int fixed)
+{
+ struct mteEvent *entry;
+ netsnmp_tdata_row *row;
+ size_t mteOwner_len = (mteOwner) ? strlen(mteOwner) : 0;
+ size_t mteEName_len = (mteEName) ? strlen(mteEName) : 0;
+
+ DEBUGMSGTL(("disman:event:table", "Create event entry (%s, %s)\n",
+ mteOwner, mteEName));
+ /*
+ * Create the mteEvent entry, and the
+ * (table-independent) row wrapper structure...
+ */
+ entry = SNMP_MALLOC_TYPEDEF(struct mteEvent);
+ if (!entry)
+ return NULL;
+
+ row = netsnmp_tdata_create_row();
+ if (!row) {
+ SNMP_FREE(entry);
+ return NULL;
+ }
+ row->data = entry;
+
+ /*
+ * ... initialize this row with the indexes supplied
+ * and the default values for the row...
+ */
+ if (mteOwner)
+ memcpy(entry->mteOwner, mteOwner, mteOwner_len);
+ netsnmp_table_row_add_index(row, ASN_OCTET_STR,
+ entry->mteOwner, mteOwner_len);
+ if (mteEName)
+ memcpy(entry->mteEName, mteEName, mteEName_len);
+ netsnmp_table_row_add_index(row, ASN_PRIV_IMPLIED_OCTET_STR,
+ entry->mteEName, mteEName_len);
+
+ entry->mteNotification_len = 2; /* .0.0 */
+ if (fixed)
+ entry->flags |= MTE_EVENT_FLAG_FIXED;
+
+ /*
+ * ... and insert the row into the (common) table container
+ */
+ netsnmp_tdata_add_row(event_table_data, row);
+ DEBUGMSGTL(("disman:event:table", "Event entry created\n"));
+ return row;
+}
+
+
+/*
+ * Remove a row from the event table
+ */
+void
+mteEvent_removeEntry(netsnmp_tdata_row *row)
+{
+ struct mteEvent *entry;
+
+ if (!row)
+ return; /* Nothing to remove */
+ entry = (struct mteEvent *)
+ netsnmp_tdata_remove_and_delete_row(event_table_data, row);
+ if (entry)
+ SNMP_FREE(entry);
+}
+
+ /* ===================================================
+ *
+ * APIs for processing the firing of an event
+ *
+ * =================================================== */
+
+int
+_mteEvent_fire_notify( struct mteEvent *event,
+ struct mteTrigger *trigger,
+ oid *suffix, size_t sfx_len );
+int
+_mteEvent_fire_set( struct mteEvent *event,
+ struct mteTrigger *trigger,
+ oid *suffix, size_t sfx_len );
+
+int
+mteEvent_fire( char *owner, char *event, /* Event to invoke */
+ struct mteTrigger *trigger, /* Trigger that fired */
+ oid *suffix, size_t s_len ) /* Matching instance */
+{
+ struct mteEvent *entry;
+ int fired = 0;
+ netsnmp_variable_list owner_var, event_var;
+
+ DEBUGMSGTL(("disman:event:fire", "Event fired (%s, %s)\n",
+ owner, event));
+
+ /*
+ * Retrieve the entry for the specified event
+ */
+ memset( &owner_var, 0, sizeof(owner_var));
+ memset( &event_var, 0, sizeof(event_var));
+ snmp_set_var_typed_value(&owner_var, ASN_OCTET_STR, owner, strlen(owner));
+ snmp_set_var_typed_value(&event_var, ASN_PRIV_IMPLIED_OCTET_STR,
+ event, strlen(event));
+ owner_var.next_variable = &event_var;
+ entry = (struct mteEvent *)
+ netsnmp_tdata_row_entry(
+ netsnmp_tdata_row_get_byidx( event_table_data, &owner_var ));
+ if (!entry) {
+ DEBUGMSGTL(("disman:event:fire", "No matching event\n"));
+ return -1;
+ }
+
+ if (entry->mteEventActions & MTE_EVENT_NOTIFICATION) {
+ DEBUGMSGTL(("disman:event:fire", "Firing notification event\n"));
+ _mteEvent_fire_notify( entry, trigger, suffix, s_len );
+ fired = 1;
+ }
+ if (entry->mteEventActions & MTE_EVENT_SET) {
+ DEBUGMSGTL(("disman:event:fire", "Firing set event\n"));
+ _mteEvent_fire_set( entry, trigger, suffix, s_len );
+ fired = 1;
+ }
+
+ if (!fired)
+ DEBUGMSGTL(("disman:event:fire", "Matched event is empty\n"));
+
+ return fired;
+}
+
+
+#ifdef __NOT_NEEDED
+void
+_insert_internal_objects( netsnmp_variable_list *vblist, char *oname,
+ struct mteTrigger *trigger)
+{
+ netsnmp_variable_list *var = NULL, *vp;
+ oid mteHotTrigger[] = {1, 3, 6, 1, 2, 1, 88, 2, 1, 1, 0};
+ oid mteHotTarget[] = {1, 3, 6, 1, 2, 1, 88, 2, 1, 2, 0};
+ oid mteHotContext[] = {1, 3, 6, 1, 2, 1, 88, 2, 1, 3, 0};
+ oid mteHotOID[] = {1, 3, 6, 1, 2, 1, 88, 2, 1, 4, 0};
+ oid mteHotValue[] = {1, 3, 6, 1, 2, 1, 88, 2, 1, 5, 0};
+
+ /*
+ * Construct the varbinds for this (internal) event...
+ */
+ if ((!strcmp(oname, "_mteTriggerFired" )) ||
+ (!strcmp(oname, "_mteTriggerRising" )) ||
+ (!strcmp(oname, "_mteTriggerFalling")) ||
+ (!strcmp(oname, "_triggerFire"))) {
+
+ snmp_varlist_add_variable( &var,
+ mteHotTrigger, OID_LENGTH(mteHotTrigger),
+ ASN_OCTET_STR, trigger->mteTName,
+ strlen(trigger->mteTName));
+ snmp_varlist_add_variable( &var,
+ mteHotTarget, OID_LENGTH(mteHotTarget),
+ ASN_OCTET_STR, trigger->mteTriggerTarget,
+ strlen(trigger->mteTriggerTarget));
+ snmp_varlist_add_variable( &var,
+ mteHotContext, OID_LENGTH(mteHotContext),
+ ASN_OCTET_STR, trigger->mteTriggerContext,
+ strlen(trigger->mteTriggerContext));
+ snmp_varlist_add_variable( &var,
+ mteHotOID, OID_LENGTH(mteHotOID),
+ ASN_OBJECT_ID, (char *)trigger->mteTriggerFired->name,
+ trigger->mteTriggerFired->name_length*sizeof(oid));
+ snmp_varlist_add_variable( &var,
+ mteHotValue, OID_LENGTH(mteHotValue),
+ trigger->mteTriggerFired->type,
+ trigger->mteTriggerFired->val.string,
+ trigger->mteTriggerFired->val_len);
+ } else {
+ DEBUGMSGTL(("disman:event:fire",
+ "Unknown internal objects tag (%s)\n", oname));
+ return;
+ }
+
+ /*
+ * ... and insert them into the main varbind list
+ * (at the point specified)
+ */
+ for (vp = var; vp && vp->next_variable; vp=vp->next_variable)
+ ;
+ vp->next_variable = vblist->next_variable;
+ vblist->next_variable = var;
+}
+#endif
+
+int
+_mteEvent_fire_notify( struct mteEvent *entry, /* The event to fire */
+ struct mteTrigger *trigger, /* Trigger that fired */
+ oid *suffix, size_t sfx_len ) /* Matching instance */
+{
+ netsnmp_variable_list *var, *v2;
+ oid snmptrap_oid[] = { 1,3,6,1,6,3,1,1,4,1,0 };
+ size_t snmptrap_oid_len = OID_LENGTH(snmptrap_oid);
+ netsnmp_session *s;
+
+ /*
+ * The Event-MIB specification says that objects from the
+ * mteEventTable should come after those from the trigger,
+ * but things actually work better if these come first.
+ * Allow the agent to be configured either way.
+ */
+ int strictOrdering = netsnmp_ds_get_boolean(
+ NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_STRICT_DISMAN);
+
+ var = (netsnmp_variable_list *)SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ if (!var)
+ return -1;
+
+ /*
+ * Set the basic notification OID...
+ */
+ memset(var, 0, sizeof(netsnmp_variable_list));
+ snmp_set_var_objid( var, snmptrap_oid, snmptrap_oid_len );
+ snmp_set_var_typed_value( var, ASN_OBJECT_ID,
+ (u_char *)entry->mteNotification,
+ entry->mteNotification_len*sizeof(oid));
+
+ /*
+ * ... then add the specified objects from the Objects Table.
+ *
+ * Strictly speaking, the objects from the EventTable are meant
+ * to be listed last (after the various trigger objects).
+ * But logically things actually work better if the event objects
+ * are placed first. So this code handles things either way :-)
+ */
+
+ if (!strictOrdering) {
+ DEBUGMSGTL(("disman:event:fire", "Adding event objects (first)\n"));
+ if (strcmp(entry->mteNotifyOwner, "_snmpd") != 0)
+ mteObjects_vblist( var, entry->mteNotifyOwner,
+ entry->mteNotifyObjects,
+ suffix, sfx_len );
+ }
+
+ DEBUGMSGTL(("disman:event:fire", "Adding trigger objects (general)\n"));
+ mteObjects_vblist( var, trigger->mteTriggerOOwner,
+ trigger->mteTriggerObjects,
+ suffix, sfx_len );
+ DEBUGMSGTL(("disman:event:fire", "Adding trigger objects (specific)\n"));
+ mteObjects_vblist( var, trigger->mteTriggerXOwner,
+ trigger->mteTriggerXObjects,
+ suffix, sfx_len );
+
+ if (strictOrdering) {
+ DEBUGMSGTL(("disman:event:fire", "Adding event objects (last)\n"));
+ if (strcmp(entry->mteNotifyOwner, "_snmpd") != 0)
+ mteObjects_vblist( var, entry->mteNotifyOwner,
+ entry->mteNotifyObjects,
+ suffix, sfx_len );
+ }
+
+ /*
+ * Query the agent to retrieve the necessary values...
+ * (skipping the initial snmpTrapOID varbind)
+ */
+ v2 = var->next_variable;
+ if (entry->session)
+ s = entry->session;
+ else
+ s = trigger->session;
+ netsnmp_query_get( v2, s );
+
+ /*
+ * ... add any "internal" objects...
+ * (skipped by the processing above, and best handled directly)
+ */
+ if (strcmp(entry->mteNotifyOwner, "_snmpd") == 0) {
+ DEBUGMSGTL(("disman:event:fire", "Adding event objects (internal)\n"));
+ if ( !strictOrdering ) {
+ mteObjects_internal_vblist(var, entry->mteNotifyObjects, trigger, s);
+ } else {
+ for (v2 = var; v2 && v2->next_variable; v2=v2->next_variable)
+ ;
+ mteObjects_internal_vblist(v2, entry->mteNotifyObjects, trigger, s);
+ }
+ }
+
+ /*
+ * ... and send the resulting varbind list as a notification
+ */
+ send_v2trap( var );
+ snmp_free_varbind( var );
+ return 0;
+}
+
+
+int
+_mteEvent_fire_set( struct mteEvent *entry, /* The event to fire */
+ struct mteTrigger *trigger, /* Trigger that fired */
+ oid *suffix, size_t sfx_len ) /* Matching instance */
+{
+ netsnmp_variable_list var;
+ oid set_oid[ MAX_OID_LEN ];
+ size_t set_len;
+
+ /*
+ * Set the basic assignment OID...
+ */
+ memset(set_oid, 0, sizeof(set_oid));
+ memcpy(set_oid, entry->mteSetOID, entry->mteSetOID_len*sizeof(oid));
+ set_len = entry->mteSetOID_len;
+
+ /*
+ * ... if the trigger value is wildcarded (sfx_len > 0),
+ * *and* the SET event entry is wildcarded,
+ * then add the supplied instance suffix...
+ */
+ if (sfx_len &&
+ entry->flags & MTE_SET_FLAG_OBJWILD) {
+ memcpy( &set_oid[set_len], suffix, sfx_len*sizeof(oid));
+ set_len += sfx_len;
+ }
+
+ /*
+ * ... finally build the assignment varbind,
+ * and pass it to be acted on.
+ *
+ * XXX: Need to handle (remote) targets and non-default contexts
+ */
+ memset( &var, 0, sizeof(var));
+ snmp_set_var_objid( &var, set_oid, set_len );
+ snmp_set_var_typed_integer( &var, ASN_INTEGER, entry->mteSetValue );
+ if (entry->session)
+ return netsnmp_query_set( &var, entry->session );
+ else
+ return netsnmp_query_set( &var, trigger->session );
+
+ /* XXX - Need to check result */
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEvent.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEvent.h
new file mode 100644
index 0000000000..b3585193be
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEvent.h
@@ -0,0 +1,87 @@
+#ifndef MTEEVENT_H
+#define MTEEVENT_H
+
+#include "disman/event/mteTrigger.h"
+
+ /*
+ * Values for mteEventActions field
+ */
+#define MTE_EVENT_NOTIFICATION 0x80 /* mteEventActions values */
+#define MTE_EVENT_SET 0x40
+
+ /*
+ * Flags relating to the mteEventTable....
+ */
+#define MTE_EVENT_FLAG_ENABLED 0x01 /* for mteEventEnabled */
+#define MTE_EVENT_FLAG_ACTIVE 0x02 /* for mteEventEntryStatus */
+#define MTE_EVENT_FLAG_FIXED 0x04 /* for snmpd.conf persistence */
+#define MTE_EVENT_FLAG_VALID 0x08 /* for row creation/undo */
+
+ /*
+ * ...and to the mteEventSetTable
+ */
+#define MTE_SET_FLAG_OBJWILD 0x10 /* for mteEventSetObjectWildcard */
+#define MTE_SET_FLAG_CTXWILD 0x20 /* for mteEventSetContextNameWildcard */
+
+
+ /*
+ * All Event-MIB OCTET STRING objects are either short (32-character)
+ * tags, or SnmpAdminString/similar values (i.e. 255 characters)
+ */
+#define MTE_STR1_LEN 32
+#define MTE_STR2_LEN 255
+
+/*
+ * Data structure for a (combined) event row
+ * Covers both Notification and Set events
+ */
+struct mteEvent {
+ /*
+ * Index values
+ */
+ char mteOwner[MTE_STR1_LEN+1];
+ char mteEName[MTE_STR1_LEN+1];
+
+ /*
+ * Column values for the main mteEventTable
+ */
+ char mteEventComment[MTE_STR2_LEN+1];
+ char mteEventActions;
+
+ /*
+ * Column values for Notification events (mteEventNotificationTable)
+ */
+ oid mteNotification[MAX_OID_LEN];
+ size_t mteNotification_len;
+ char mteNotifyOwner[ MTE_STR1_LEN+1];
+ char mteNotifyObjects[MTE_STR1_LEN+1];
+
+ /*
+ * Column values for Set events (mteEventSetTable)
+ */
+ oid mteSetOID[MAX_OID_LEN];
+ size_t mteSetOID_len;
+ long mteSetValue;
+ char mteSetTarget[ MTE_STR2_LEN+1];
+ char mteSetContext[MTE_STR2_LEN+1];
+
+ netsnmp_session *session;
+ long flags;
+};
+
+ /*
+ * Container structure for the (combined) mteEvent*Tables,
+ * and routine to create this.
+ */
+extern netsnmp_tdata *event_table_data;
+extern void init_event_table_data(void);
+
+void init_mteEvent(void);
+void mteEvent_removeEntry(netsnmp_tdata_row *row);
+netsnmp_tdata_row *mteEvent_createEntry(const char *mteOwner,
+ const char *mteEventName, int fixed);
+int mteEvent_fire( char *owner, char *event,
+ struct mteTrigger *trigger,
+ oid *suffix, size_t s_len );
+
+#endif /* MTEEVENT_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventConf.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventConf.c
new file mode 100644
index 0000000000..2561385841
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventConf.c
@@ -0,0 +1,581 @@
+/*
+ * DisMan Event MIB:
+ * Implementation of the event table configure handling
+ */
+
+#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/agent/agent_callbacks.h>
+#include "disman/event/mteObjects.h"
+#include "disman/event/mteEvent.h"
+#include "disman/event/mteEventConf.h"
+
+
+/** Initializes the mteEventsConf module */
+void
+init_mteEventConf(void)
+{
+ init_event_table_data();
+
+ /*
+ * Register config handlers for user-level (fixed) events....
+ */
+ snmpd_register_config_handler("notificationEvent",
+ parse_notificationEvent, NULL,
+ "eventname notifyOID [-m] [-i OID|-o OID]*");
+ snmpd_register_config_handler("setEvent",
+ parse_setEvent, NULL,
+ "eventname [-I] OID = value");
+
+ netsnmp_ds_register_config(ASN_BOOLEAN,
+ netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_APPTYPE),
+ "strictDisman", NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_STRICT_DISMAN);
+
+ /*
+ * ... and for persistent storage of dynamic event table entries.
+ *
+ * (The previous implementation didn't store these entries,
+ * so we don't need to worry about backwards compatability)
+ */
+ snmpd_register_config_handler("_mteETable",
+ parse_mteETable, NULL, NULL);
+ snmpd_register_config_handler("_mteENotTable",
+ parse_mteENotTable, NULL, NULL);
+ snmpd_register_config_handler("_mteESetTable",
+ parse_mteESetTable, NULL, NULL);
+
+ /*
+ * Register to save (non-fixed) entries when the agent shuts down
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_mteETable, NULL);
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_PRE_UPDATE_CONFIG,
+ clear_mteETable, NULL);
+}
+
+
+/* ==============================
+ *
+ * utility routines
+ *
+ * ============================== */
+
+ /*
+ * Find or create the specified event entry
+ */
+static struct mteEvent *
+_find_mteEvent_entry( const char *owner, const char *ename )
+{
+ netsnmp_variable_list owner_var, ename_var;
+ netsnmp_tdata_row *row;
+ /*
+ * If there's already an existing entry,
+ * then use that...
+ */
+ memset(&owner_var, 0, sizeof(netsnmp_variable_list));
+ memset(&ename_var, 0, sizeof(netsnmp_variable_list));
+ snmp_set_var_typed_value(&owner_var, ASN_OCTET_STR, owner, strlen(owner));
+ snmp_set_var_typed_value(&ename_var, ASN_PRIV_IMPLIED_OCTET_STR,
+ ename, strlen(ename));
+ owner_var.next_variable = &ename_var;
+ row = netsnmp_tdata_row_get_byidx( event_table_data, &owner_var );
+ /*
+ * ... otherwise, create a new one
+ */
+ if (!row)
+ row = mteEvent_createEntry( owner, ename, 0 );
+ if (!row)
+ return NULL;
+
+ /* return (struct mteEvent *)netsnmp_tdata_row_entry( row ); */
+ return (struct mteEvent *)row->data;
+}
+
+static struct mteEvent *
+_find_typed_mteEvent_entry( const char *owner, const char *ename, int type )
+{
+ struct mteEvent *entry = _find_mteEvent_entry( owner, ename );
+ if (!entry)
+ return NULL;
+
+ /*
+ * If this is an existing (i.e. valid) entry of the
+ * same type, then throw an error and discard it.
+ * But allow combined Set/Notification events.
+ */
+ if ( entry &&
+ (entry->flags & MTE_EVENT_FLAG_VALID) &&
+ (entry->mteEventActions & type )) {
+ config_perror("error: duplicate event name");
+ return NULL;
+ }
+ return entry;
+}
+
+
+/* ==============================
+ *
+ * User-configured (static) events
+ *
+ * ============================== */
+
+void
+parse_notificationEvent( const char *token, char *line )
+{
+ char ename[MTE_STR1_LEN+1];
+ char buf[SPRINT_MAX_LEN];
+ oid name_buf[MAX_OID_LEN];
+ size_t name_buf_len;
+ struct mteEvent *entry;
+ struct mteObject *object;
+ int wild = 1;
+ int idx = 0;
+ char *cp;
+#ifndef NETSNMP_DISABLE_MIB_LOADING
+ struct tree *tp;
+#endif
+ struct varbind_list *var;
+
+ DEBUGMSGTL(("disman:event:conf", "Parsing notificationEvent config\n"));
+
+ /*
+ * The event name could be used directly to index the mteObjectsTable.
+ * But it's quite possible that the same name could also be used to
+ * set up a mteTriggerTable entry (with trigger-specific objects).
+ *
+ * To avoid such a clash, we'll add a prefix ("_E").
+ */
+ memset(ename, 0, sizeof(ename));
+ ename[0] = '_';
+ ename[1] = 'E';
+ cp = copy_nword(line, ename+2, MTE_STR1_LEN-2);
+ if (!cp || ename[2] == '\0') {
+ config_perror("syntax error: no event name");
+ return;
+ }
+
+ /*
+ * Parse the notification OID field ...
+ */
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ if ( buf[0] == '\0' ) {
+ config_perror("syntax error: no notification OID");
+ return;
+ }
+ name_buf_len = MAX_OID_LEN;
+ if (!snmp_parse_oid(buf, name_buf, &name_buf_len)) {
+ snmp_log(LOG_ERR, "notificationEvent OID: %s\n", buf);
+ config_perror("unknown notification OID");
+ return;
+ }
+
+ /*
+ * ... and the relevant object/instances.
+ */
+ if ( cp && *cp=='-' && *(cp+1)=='m' ) {
+#ifdef NETSNMP_DISABLE_MIB_LOADING
+ config_perror("Can't use -m if MIB loading is disabled");
+ return;
+#else
+ /*
+ * Use the MIB definition to add the standard
+ * notification payload to the mteObjectsTable.
+ */
+ cp = skip_token( cp );
+ tp = get_tree( name_buf, name_buf_len, get_tree_head());
+ if (!tp) {
+ config_perror("Can't locate notification payload info");
+ return;
+ }
+ for (var = tp->varbinds; var; var=var->next) {
+ idx++;
+ object = mteObjects_addOID( "snmpd.conf", ename, idx,
+ var->vblabel, wild );
+ idx = object->mteOIndex;
+ }
+#endif
+ }
+ while (cp) {
+ if ( *cp == '-' ) {
+ switch (*(cp+1)) {
+ case 'm':
+ config_perror("-m option must come first");
+ return;
+ case 'i': /* exact instance */
+ case 'w': /* "not-wild" (backward compatability) */
+ wild = 0;
+ break;
+ case 'o': /* wildcarded object */
+ wild = 1;
+ break;
+ default:
+ config_perror("unrecognised option");
+ return;
+ }
+ cp = skip_token( cp );
+ if (!cp) {
+ config_perror("missing parameter");
+ return;
+ }
+ }
+ idx++;
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ object = mteObjects_addOID( "snmpd.conf", ename, idx, buf, wild );
+ idx = object->mteOIndex;
+ wild = 1; /* default to wildcarded objects */
+ }
+
+ /*
+ * If the entry has parsed successfully, then create,
+ * populate and activate the new event entry.
+ */
+ entry = _find_typed_mteEvent_entry("snmpd.conf", ename+2,
+ MTE_EVENT_NOTIFICATION);
+ if (!entry) {
+ mteObjects_removeEntries( "snmpd.conf", ename );
+ return;
+ }
+ entry->mteNotification_len = name_buf_len;
+ memcpy( entry->mteNotification, name_buf, name_buf_len*sizeof(oid));
+ memcpy( entry->mteNotifyOwner, "snmpd.conf", 10 );
+ memcpy( entry->mteNotifyObjects, ename, MTE_STR1_LEN );
+ entry->mteEventActions |= MTE_EVENT_NOTIFICATION;
+ entry->flags |= MTE_EVENT_FLAG_ENABLED |
+ MTE_EVENT_FLAG_ACTIVE |
+ MTE_EVENT_FLAG_FIXED |
+ MTE_EVENT_FLAG_VALID;
+ return;
+}
+
+void
+parse_setEvent( const char *token, char *line )
+{
+ char ename[MTE_STR1_LEN+1];
+ char buf[SPRINT_MAX_LEN];
+ oid name_buf[MAX_OID_LEN];
+ size_t name_buf_len;
+ long value;
+ int wild = 1;
+ struct mteEvent *entry;
+ char *cp;
+
+ DEBUGMSGTL(("disman:event:conf", "Parsing setEvent config... "));
+
+ memset( ename, 0, sizeof(ename));
+ cp = copy_nword(line, ename, MTE_STR1_LEN);
+ if (!cp || ename[0] == '\0') {
+ config_perror("syntax error: no event name");
+ return;
+ }
+
+ if (cp && *cp=='-' && *(cp+1)=='I') {
+ wild = 0; /* an instance assignment */
+ cp = skip_token( cp );
+ }
+
+ /*
+ * Parse the SET assignment in the form "OID = value"
+ */
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ if ( buf[0] == '\0' ) {
+ config_perror("syntax error: no set OID");
+ return;
+ }
+ name_buf_len = MAX_OID_LEN;
+ if (!snmp_parse_oid(buf, name_buf, &name_buf_len)) {
+ snmp_log(LOG_ERR, "setEvent OID: %s\n", buf);
+ config_perror("unknown set OID");
+ return;
+ }
+ if (cp && *cp == '=') {
+ cp = skip_token( cp ); /* skip the '=' assignment character */
+ }
+ value = strtol( cp, NULL, 0);
+
+ /*
+ * If the entry has parsed successfully, then create,
+ * populate and activate the new event entry.
+ */
+ entry = _find_typed_mteEvent_entry("snmpd.conf", ename, MTE_EVENT_SET);
+ if (!entry) {
+ return;
+ }
+ memcpy( entry->mteSetOID, name_buf, name_buf_len*sizeof(oid));
+ entry->mteSetOID_len = name_buf_len;
+ entry->mteSetValue = value;
+ if (wild)
+ entry->flags |= MTE_SET_FLAG_OBJWILD;
+ entry->mteEventActions |= MTE_EVENT_SET;
+ entry->flags |= MTE_EVENT_FLAG_ENABLED |
+ MTE_EVENT_FLAG_ACTIVE |
+ MTE_EVENT_FLAG_FIXED |
+ MTE_EVENT_FLAG_VALID;
+ return;
+}
+
+
+/* ==============================
+ *
+ * Persistent (dynamic) configuration
+ *
+ * ============================== */
+
+void
+parse_mteETable(const char *token, char *line )
+{
+ char owner[MTE_STR1_LEN+1];
+ char ename[MTE_STR1_LEN+1];
+ void *vp;
+ size_t tmp;
+ size_t len;
+ struct mteEvent *entry;
+
+ DEBUGMSGTL(("disman:event:conf", "Parsing mteEventTable config... "));
+
+ /*
+ * Read in the index information for this entry
+ * and create a (non-fixed) data structure for it.
+ */
+ memset( owner, 0, sizeof(owner));
+ memset( ename, 0, sizeof(ename));
+ len = MTE_STR1_LEN; vp = owner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = ename;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ entry = _find_mteEvent_entry( owner, ename );
+
+ DEBUGMSG(("disman:event:conf", "(%s, %s) ", owner, ename));
+
+ /*
+ * Read in the accessible (event-independent) column values.
+ */
+ len = MTE_STR2_LEN; vp = entry->mteEventComment;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ /*
+ * Skip the mteEventAction field, and note that the
+ * boolean values are combined into a single field.
+ */
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ entry->flags |= (tmp &
+ (MTE_EVENT_FLAG_ENABLED|MTE_EVENT_FLAG_ACTIVE));
+ /*
+ * XXX - Will need to read in the 'iquery' access information
+ */
+ entry->flags |= MTE_EVENT_FLAG_VALID;
+
+ DEBUGMSG(("disman:event:conf", "\n"));
+}
+
+
+void
+parse_mteENotTable(const char *token, char *line)
+{
+ char owner[MTE_STR1_LEN+1];
+ char ename[MTE_STR1_LEN+1];
+ void *vp;
+ size_t len;
+ struct mteEvent *entry;
+
+ DEBUGMSGTL(("disman:event:conf", "Parsing mteENotifyTable config... "));
+
+ /*
+ * Read in the index information for this entry
+ * and create a (non-fixed) data structure for it.
+ */
+ memset( owner, 0, sizeof(owner));
+ memset( ename, 0, sizeof(ename));
+ len = MTE_STR1_LEN; vp = owner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = ename;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ entry = _find_mteEvent_entry( owner, ename );
+
+ DEBUGMSG(("disman:event:conf", "(%s, %s) ", owner, ename));
+
+ /*
+ * Read in the accessible column values.
+ */
+ vp = entry->mteNotification;
+ line = read_config_read_data(ASN_OBJECT_ID, line, &vp,
+ &entry->mteNotification_len);
+ len = MTE_STR1_LEN; vp = entry->mteNotifyOwner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = entry->mteNotifyObjects;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+
+ entry->mteEventActions |= MTE_EVENT_NOTIFICATION;
+ entry->flags |= MTE_EVENT_FLAG_VALID;
+
+ DEBUGMSG(("disman:event:conf", "\n"));
+}
+
+
+void
+parse_mteESetTable(const char *token, char *line)
+{
+ char owner[MTE_STR1_LEN+1];
+ char ename[MTE_STR1_LEN+1];
+ void *vp;
+ size_t len;
+ struct mteEvent *entry;
+
+ DEBUGMSGTL(("disman:event:conf", "Parsing mteESetTable config... "));
+
+ /*
+ * Read in the index information for this entry
+ * and create a (non-fixed) data structure for it.
+ */
+ memset( owner, 0, sizeof(owner));
+ memset( ename, 0, sizeof(ename));
+ len = MTE_STR1_LEN; vp = owner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = ename;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ entry = _find_mteEvent_entry( owner, ename );
+
+ DEBUGMSG(("disman:event:conf", "(%s, %s) ", owner, ename));
+
+ /*
+ * Read in the accessible column values.
+ */
+ vp = entry->mteSetOID;
+ line = read_config_read_data(ASN_OBJECT_ID, line, &vp,
+ &entry->mteSetOID_len);
+ line = read_config_read_data(ASN_UNSIGNED, line,
+ &entry->mteSetValue, &len);
+ len = MTE_STR2_LEN; vp = entry->mteSetTarget;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR2_LEN; vp = entry->mteSetContext;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+
+ entry->mteEventActions |= MTE_EVENT_SET;
+ entry->flags |= MTE_EVENT_FLAG_VALID;
+
+ DEBUGMSG(("disman:event:conf", "\n"));
+}
+
+
+
+int
+store_mteETable(int majorID, int minorID, void *serverarg, void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr;
+ void *vp;
+ size_t tint;
+ netsnmp_tdata_row *row;
+ struct mteEvent *entry;
+
+
+ DEBUGMSGTL(("disman:event:conf", "Storing mteEventTable config:\n"));
+
+ for (row = netsnmp_tdata_row_first( event_table_data );
+ row;
+ row = netsnmp_tdata_row_next( event_table_data, row )) {
+
+ /*
+ * Skip entries that were set up via static config directives
+ */
+ entry = (struct mteEvent *)netsnmp_tdata_row_entry( row );
+ if ( entry->flags & MTE_EVENT_FLAG_FIXED )
+ continue;
+
+ DEBUGMSGTL(("disman:event:conf", " Storing (%s %s)\n",
+ entry->mteOwner, entry->mteEName));
+
+ /*
+ * Save the basic mteEventTable entry...
+ */
+ memset(line, 0, sizeof(line));
+ strcat(line, "_mteETable ");
+ cptr = line + strlen(line);
+
+ vp = entry->mteOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteEName; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteEventComment; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ /* ... (but skip the mteEventAction field)... */
+ tint = entry->flags & (MTE_EVENT_FLAG_ENABLED|MTE_EVENT_FLAG_ACTIVE);
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+ /* XXX - Need to store the 'iquery' access information */
+ snmpd_store_config(line);
+
+ /*
+ * ... then save Notify and/or Set entries separately
+ * (The mteEventAction bits will be set when these are read in).
+ */
+ if ( entry->mteEventActions & MTE_EVENT_NOTIFICATION ) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "_mteENotTable ");
+ cptr = line + strlen(line);
+
+ vp = entry->mteOwner; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteEName; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteNotification;
+ cptr = read_config_store_data(ASN_OBJECT_ID, cptr, &vp,
+ &entry->mteNotification_len);
+ vp = entry->mteNotifyOwner; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteNotifyObjects; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ snmpd_store_config(line);
+ }
+
+ if ( entry->mteEventActions & MTE_EVENT_SET ) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "_mteESetTable ");
+ cptr = line + strlen(line);
+
+ vp = entry->mteOwner; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteEName; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteSetOID;
+ cptr = read_config_store_data(ASN_OBJECT_ID, cptr, &vp,
+ &entry->mteSetOID_len);
+ tint = entry->mteSetValue;
+ cptr = read_config_store_data(ASN_INTEGER, cptr, &tint, NULL);
+ vp = entry->mteSetTarget; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteSetContext; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ tint = entry->flags & (MTE_SET_FLAG_OBJWILD|MTE_SET_FLAG_CTXWILD);
+ cptr = read_config_store_data(ASN_UNSIGNED, cptr, &tint, NULL);
+ snmpd_store_config(line);
+ }
+ }
+
+ DEBUGMSGTL(("disman:event:conf", " done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+int
+clear_mteETable(int majorID, int minorID, void *serverarg, void *clientarg)
+{
+ netsnmp_tdata_row *row;
+ netsnmp_variable_list owner_var;
+
+ /*
+ * We're only interested in entries set up via the config files
+ */
+ memset( &owner_var, 0, sizeof(netsnmp_variable_list));
+ snmp_set_var_typed_value( &owner_var, ASN_OCTET_STR,
+ "snmpd.conf", strlen("snmpd.conf"));
+ while (( row = netsnmp_tdata_row_next_byidx( event_table_data,
+ &owner_var ))) {
+ /*
+ * XXX - check for owner of "snmpd.conf"
+ * and break at the end of these
+ */
+ netsnmp_tdata_remove_and_delete_row( event_table_data, row );
+ }
+ return SNMPERR_SUCCESS;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventConf.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventConf.h
new file mode 100644
index 0000000000..47001f00c4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventConf.h
@@ -0,0 +1,20 @@
+#ifndef MTEEVENTCONF_H
+#define MTEEVENTCONF_H
+
+config_require(utilities/iquery)
+
+/*
+ * function declarations
+ */
+void init_mteEventConf(void);
+
+void parse_notificationEvent(const char *, char *);
+void parse_setEvent( const char *, char *);
+
+void parse_mteETable( const char *, char *);
+void parse_mteENotTable(const char *, char *);
+void parse_mteESetTable(const char *, char *);
+SNMPCallback store_mteETable;
+SNMPCallback clear_mteETable;
+
+#endif /* MTEEVENTCONF_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventNotificationTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventNotificationTable.c
new file mode 100644
index 0000000000..c9b3770ce2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventNotificationTable.c
@@ -0,0 +1,228 @@
+/*
+ * DisMan Event MIB:
+ * Implementation of the mteEventNotificationTable MIB interface
+ * See 'mteEvent.c' for active behaviour of this table.
+ *
+ * (based on mib2c.table_data.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/event/mteEvent.h"
+#include "disman/event/mteEventNotificationTable.h"
+
+
+/* Initializes the mteEventNotificationTable module */
+void
+init_mteEventNotificationTable(void)
+{
+ static oid mteEventNotificationTable_oid[] = { 1, 3, 6, 1, 2, 1, 88, 1, 4, 3 };
+ size_t mteEventNotificationTable_oid_len = OID_LENGTH(mteEventNotificationTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ /*
+ * Ensure the (combined) table container is available...
+ */
+ init_event_table_data();
+
+ /*
+ * ... then set up the MIB interface to the mteEventNotificationTable slice
+ */
+ reg = netsnmp_create_handler_registration("mteEventNotificationTable",
+ mteEventNotificationTable_handler,
+ mteEventNotificationTable_oid,
+ mteEventNotificationTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ ASN_OCTET_STR, /* index: mteOwner */
+ /* index: mteEventName */
+ ASN_PRIV_IMPLIED_OCTET_STR,
+ 0);
+
+ table_info->min_column = COLUMN_MTEEVENTNOTIFICATION;
+ table_info->max_column = COLUMN_MTEEVENTNOTIFICATIONOBJECTS;
+
+ /* Register this using the (common) event_table_data container */
+ netsnmp_tdata_register(reg, event_table_data, table_info);
+ DEBUGMSGTL(("disman:event:init", "Event Notify Table container (%x)\n",
+ event_table_data));
+}
+
+
+
+/** handles requests for the mteEventNotificationTable table */
+int
+mteEventNotificationTable_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 *tinfo;
+ struct mteEvent *entry;
+ int ret;
+
+ DEBUGMSGTL(("disman:event:mib", "Notification Table handler (%d)\n", reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteEvent *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ /*
+ * The mteEventNotificationTable should only contains entries
+ * for rows where the mteEventActions 'notification(0)' bit
+ * is set. So skip entries where this isn't the case.
+ */
+ if (!entry || !(entry->mteEventActions & MTE_EVENT_NOTIFICATION))
+ continue;
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEEVENTNOTIFICATION:
+ snmp_set_var_typed_value(request->requestvb, ASN_OBJECT_ID,
+ (u_char *) entry->mteNotification,
+ entry->mteNotification_len*sizeof(oid));
+ break;
+ case COLUMN_MTEEVENTNOTIFICATIONOBJECTSOWNER:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteNotifyOwner,
+ strlen(entry->mteNotifyOwner));
+ break;
+ case COLUMN_MTEEVENTNOTIFICATIONOBJECTS:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteNotifyObjects,
+ strlen(entry->mteNotifyObjects));
+ break;
+ }
+ }
+ break;
+
+ /*
+ * Write-support
+ */
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ /*
+ * Since the mteEventNotificationTable only contains entries
+ * for rows where the mteEventActions 'notification(0)'
+ * bit is set, strictly speaking we should reject
+ * assignments where this isn't the case.
+ * But SET requests that include an assignment of the
+ * 'notification(0)' bit at the same time are valid,
+ * so would need to be accepted. Unfortunately, this
+ * assignment is only applied in the COMMIT pass, so
+ * it's difficult to detect whether this holds or not.
+ *
+ * Let's fudge things for now, by processing assignments
+ * even if the 'notification(0)' bit isn't set.
+ */
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEEVENTNOTIFICATION:
+ ret = netsnmp_check_vb_oid( request->requestvb );
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTEEVENTNOTIFICATIONOBJECTSOWNER:
+ case COLUMN_MTEEVENTNOTIFICATIONOBJECTS:
+ ret = netsnmp_check_vb_type_and_max_size(
+ request->requestvb, ASN_OCTET_STR, MTE_STR1_LEN);
+ 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;
+ }
+
+ /*
+ * The Event MIB is somewhat ambiguous as to whether
+ * mteEventNotificationTable (and mteEventSetTable)
+ * entries can be modified once the main mteEventTable
+ * entry has been marked 'active'.
+ * But it's clear from discussion on the DisMan mailing
+ * list is that the intention is not.
+ *
+ * So check for whether this row is already active,
+ * and reject *all* SET requests if it is.
+ */
+ entry = (struct mteEvent *) netsnmp_tdata_extract_entry(request);
+ if (entry &&
+ entry->flags & MTE_EVENT_FLAG_ACTIVE ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ break;
+
+ case MODE_SET_ACTION:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteEvent *) netsnmp_tdata_extract_entry(request);
+ if (!entry) {
+ /*
+ * New rows must be created via the RowStatus column
+ * (in the main mteEventTable)
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ /* or inconsistentName? */
+ return SNMP_ERR_NOERROR;
+
+ }
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * All these assignments are "unfailable", so it's
+ * (reasonably) safe to apply them in the Commit phase
+ */
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteEvent *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEEVENTNOTIFICATION:
+ memset(entry->mteNotification, 0, sizeof(entry->mteNotification));
+ memcpy(entry->mteNotification, request->requestvb->val.objid,
+ request->requestvb->val_len);
+ entry->mteNotification_len = request->requestvb->val_len/sizeof(oid);
+ break;
+ case COLUMN_MTEEVENTNOTIFICATIONOBJECTSOWNER:
+ memset(entry->mteNotifyOwner, 0, sizeof(entry->mteNotifyOwner));
+ memcpy(entry->mteNotifyOwner, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTEEVENTNOTIFICATIONOBJECTS:
+ memset(entry->mteNotifyObjects, 0, sizeof(entry->mteNotifyObjects));
+ memcpy(entry->mteNotifyObjects, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ }
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventNotificationTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventNotificationTable.h
new file mode 100644
index 0000000000..be2bcc64ce
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventNotificationTable.h
@@ -0,0 +1,20 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.table_data.conf,v 1.8 2005/07/19 14:52:03 dts12 Exp $
+ */
+#ifndef MTEEVENTNOTIFICATIONTABLE_H
+#define MTEEVENTNOTIFICATIONTABLE_H
+
+/*
+ * function declarations
+ */
+void init_mteEventNotificationTable(void);
+Netsnmp_Node_Handler mteEventNotificationTable_handler;
+
+/*
+ * column number definitions for table mteEventNotificationTable
+ */
+#define COLUMN_MTEEVENTNOTIFICATION 1
+#define COLUMN_MTEEVENTNOTIFICATIONOBJECTSOWNER 2
+#define COLUMN_MTEEVENTNOTIFICATIONOBJECTS 3
+#endif /* MTEEVENTNOTIFICATIONTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventSetTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventSetTable.c
new file mode 100644
index 0000000000..4d0b6ee055
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventSetTable.c
@@ -0,0 +1,271 @@
+/*
+ * DisMan Event MIB:
+ * Implementation of the mteEventSetTable MIB interface
+ * See 'mteEvent.c' for active behaviour of this table.
+ *
+ * (based on mib2c.table_data.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/event/mteEvent.h"
+#include "disman/event/mteEventSetTable.h"
+
+
+/* Initializes the mteEventSetTable module */
+void
+init_mteEventSetTable(void)
+{
+ static oid mteEventSetTable_oid[] = { 1, 3, 6, 1, 2, 1, 88, 1, 4, 4 };
+ size_t mteEventSetTable_oid_len = OID_LENGTH(mteEventSetTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ /*
+ * Ensure the (combined) table container is available...
+ */
+ init_event_table_data();
+
+ /*
+ * ... then set up the MIB interface to the mteEventSetTable slice
+ */
+ reg = netsnmp_create_handler_registration("mteEventSetTable",
+ mteEventSetTable_handler,
+ mteEventSetTable_oid,
+ mteEventSetTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ ASN_OCTET_STR, /* index: mteOwner */
+ /* index: mteEventName */
+ ASN_PRIV_IMPLIED_OCTET_STR,
+ 0);
+
+ table_info->min_column = COLUMN_MTEEVENTSETOBJECT;
+ table_info->max_column = COLUMN_MTEEVENTSETCONTEXTNAMEWILDCARD;
+
+ /* Register this using the (common) event_table_data container */
+ netsnmp_tdata_register(reg, event_table_data, table_info);
+ DEBUGMSGTL(("disman:event:init", "Event Set Table container (%x)\n",
+ event_table_data));
+}
+
+
+/** handles requests for the mteEventSetTable table */
+int
+mteEventSetTable_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 *tinfo;
+ struct mteEvent *entry;
+ int ret;
+
+ DEBUGMSGTL(("disman:event:mib", "Set Table handler (%d)\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteEvent *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ /*
+ * The mteEventSetTable should only contains entries for
+ * rows where the mteEventActions 'set(1)' bit is set.
+ * So skip entries where this isn't the case.
+ */
+ if (!entry || !(entry->mteEventActions & MTE_EVENT_SET))
+ continue;
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEEVENTSETOBJECT:
+ snmp_set_var_typed_value(request->requestvb, ASN_OBJECT_ID,
+ (u_char *) entry->mteSetOID,
+ entry->mteSetOID_len*sizeof(oid));
+ break;
+ case COLUMN_MTEEVENTSETOBJECTWILDCARD:
+ ret = (entry->flags & MTE_SET_FLAG_OBJWILD ) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_MTEEVENTSETVALUE:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->mteSetValue);
+ break;
+ case COLUMN_MTEEVENTSETTARGETTAG:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteSetTarget,
+ strlen(entry->mteSetTarget));
+ break;
+ case COLUMN_MTEEVENTSETCONTEXTNAME:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteSetContext,
+ strlen(entry->mteSetContext));
+ break;
+ case COLUMN_MTEEVENTSETCONTEXTNAMEWILDCARD:
+ ret = (entry->flags & MTE_SET_FLAG_CTXWILD ) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ }
+ }
+ break;
+
+ /*
+ * Write-support
+ */
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ /*
+ * Since the mteEventSetTable only contains entries for
+ * rows where the mteEventActions 'set(1)' bit is set,
+ * strictly speaking we should reject assignments where
+ * this isn't the case.
+ * But SET requests that include an assignment of the
+ * 'set(1)' bit at the same time are valid, so would
+ * need to be accepted. Unfortunately, this assignment
+ * is only applied in the COMMIT pass, so it's difficult
+ * to detect whether this holds or not.
+ *
+ * Let's fudge things for now, by processing assignments
+ * even if the 'set(1)' bit isn't set.
+ */
+ switch (tinfo->colnum) {
+ case COLUMN_MTEEVENTSETOBJECT:
+ ret = netsnmp_check_vb_oid( request->requestvb );
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTEEVENTSETOBJECTWILDCARD:
+ case COLUMN_MTEEVENTSETCONTEXTNAMEWILDCARD:
+ ret = netsnmp_check_vb_truthvalue( request->requestvb );
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTEEVENTSETVALUE:
+ 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_MTEEVENTSETTARGETTAG:
+ case COLUMN_MTEEVENTSETCONTEXTNAME:
+ ret = netsnmp_check_vb_type_and_max_size(
+ request->requestvb, ASN_OCTET_STR, MTE_STR2_LEN);
+ 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;
+ }
+
+ /*
+ * The Event MIB is somewhat ambiguous as to whether
+ * mteEventSetTable (and mteEventNotificationTable)
+ * entries can be modified once the main mteEventTable
+ * entry has been marked 'active'.
+ * But it's clear from discussion on the DisMan mailing
+ * list is that the intention is not.
+ *
+ * So check for whether this row is already active,
+ * and reject *all* SET requests if it is.
+ */
+ entry = (struct mteEvent *) netsnmp_tdata_extract_entry(request);
+ if (entry &&
+ entry->flags & MTE_EVENT_FLAG_ACTIVE ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ break;
+
+ case MODE_SET_ACTION:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteEvent *) netsnmp_tdata_extract_entry(request);
+ if (!entry) {
+ /*
+ * New rows must be created via the RowStatus column
+ * (in the main mteEventTable)
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ /* or inconsistentName? */
+ return SNMP_ERR_NOERROR;
+
+ }
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * All these assignments are "unfailable", so it's
+ * (reasonably) safe to apply them in the Commit phase
+ */
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteEvent *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEEVENTSETOBJECT:
+ memset(entry->mteSetOID, 0, sizeof(entry->mteSetOID));
+ memcpy(entry->mteSetOID, request->requestvb->val.objid,
+ request->requestvb->val_len);
+ entry->mteSetOID_len = request->requestvb->val_len/sizeof(oid);
+ break;
+ case COLUMN_MTEEVENTSETOBJECTWILDCARD:
+ if (*request->requestvb->val.integer == TV_TRUE)
+ entry->flags |= MTE_SET_FLAG_OBJWILD;
+ else
+ entry->flags &= ~MTE_SET_FLAG_OBJWILD;
+ break;
+ case COLUMN_MTEEVENTSETVALUE:
+ entry->mteSetValue = *request->requestvb->val.integer;
+ break;
+ case COLUMN_MTEEVENTSETTARGETTAG:
+ memset(entry->mteSetTarget, 0, sizeof(entry->mteSetTarget));
+ memcpy(entry->mteSetTarget, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTEEVENTSETCONTEXTNAME:
+ memset(entry->mteSetContext, 0, sizeof(entry->mteSetContext));
+ memcpy(entry->mteSetContext, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTEEVENTSETCONTEXTNAMEWILDCARD:
+ if (*request->requestvb->val.integer == TV_TRUE)
+ entry->flags |= MTE_SET_FLAG_CTXWILD;
+ else
+ entry->flags &= ~MTE_SET_FLAG_CTXWILD;
+ break;
+ }
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventSetTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventSetTable.h
new file mode 100644
index 0000000000..b8cb124f87
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventSetTable.h
@@ -0,0 +1,23 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.table_data.conf,v 1.8 2005/07/19 14:52:03 dts12 Exp $
+ */
+#ifndef MTEEVENTSETTABLE_H
+#define MTEEVENTSETTABLE_H
+
+/*
+ * function declarations
+ */
+void init_mteEventSetTable(void);
+Netsnmp_Node_Handler mteEventSetTable_handler;
+
+/*
+ * column number definitions for table mteEventSetTable
+ */
+#define COLUMN_MTEEVENTSETOBJECT 1
+#define COLUMN_MTEEVENTSETOBJECTWILDCARD 2
+#define COLUMN_MTEEVENTSETVALUE 3
+#define COLUMN_MTEEVENTSETTARGETTAG 4
+#define COLUMN_MTEEVENTSETCONTEXTNAME 5
+#define COLUMN_MTEEVENTSETCONTEXTNAMEWILDCARD 6
+#endif /* MTEEVENTSETTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventTable.c
new file mode 100644
index 0000000000..93c902ef8d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventTable.c
@@ -0,0 +1,326 @@
+/*
+ * DisMan Event MIB:
+ * Implementation of the mteEventTable MIB interface
+ * See 'mteEvent.c' for active behaviour of this table.
+ *
+ * (based on mib2c.table_data.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "utilities/iquery.h"
+#include "disman/event/mteEvent.h"
+#include "disman/event/mteEventTable.h"
+
+
+/* Initializes the mteEventTable module */
+void
+init_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);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ /*
+ * Ensure the (combined) table container is available...
+ */
+ init_event_table_data();
+
+ /*
+ * ... then set up the MIB interface to the mteEventTable slice
+ */
+ reg = netsnmp_create_handler_registration("mteEventTable",
+ mteEventTable_handler,
+ mteEventTable_oid,
+ mteEventTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ ASN_OCTET_STR, /* index: mteOwner */
+ /* index: mteEventName */
+ ASN_PRIV_IMPLIED_OCTET_STR,
+ 0);
+
+ table_info->min_column = COLUMN_MTEEVENTCOMMENT;
+ table_info->max_column = COLUMN_MTEEVENTENTRYSTATUS;
+
+ /* Register this using the (common) event_table_data container */
+ netsnmp_tdata_register(reg, event_table_data, table_info);
+ DEBUGMSGTL(("disman:event:init", "Event Table container (%x)\n",
+ event_table_data));
+}
+
+
+/** handles requests for the mteEventTable table */
+int
+mteEventTable_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 *tinfo;
+ netsnmp_tdata_row *row;
+ struct mteEvent *entry;
+ char mteOwner[MTE_STR1_LEN+1];
+ char mteEName[MTE_STR1_LEN+1];
+ long ret;
+
+ DEBUGMSGTL(("disman:event:mib", "Event Table handler (%d)\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteEvent *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+ if (!entry || !(entry->flags & MTE_EVENT_FLAG_VALID))
+ continue;
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEEVENTCOMMENT:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ entry->mteEventComment,
+ strlen(entry->mteEventComment));
+ break;
+ case COLUMN_MTEEVENTACTIONS:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ &entry->mteEventActions, 1);
+ break;
+ case COLUMN_MTEEVENTENABLED:
+ ret = (entry->flags & MTE_EVENT_FLAG_ENABLED ) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_MTEEVENTENTRYSTATUS:
+ ret = (entry->flags & MTE_EVENT_FLAG_ACTIVE ) ?
+ RS_ACTIVE : RS_NOTINSERVICE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ }
+ }
+ break;
+
+ /*
+ * Write-support
+ */
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteEvent *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEEVENTCOMMENT:
+ ret = netsnmp_check_vb_type_and_max_size(
+ request->requestvb, ASN_OCTET_STR, MTE_STR1_LEN);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ /*
+ * Can't modify the comment of an active row
+ * (No good reason for this, but that's what the MIB says!)
+ */
+ if (entry &&
+ entry->flags & MTE_EVENT_FLAG_ACTIVE ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTEEVENTACTIONS:
+ ret = netsnmp_check_vb_type_and_size(
+ request->requestvb, ASN_OCTET_STR, 1);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ /*
+ * Can't modify the event types of an active row
+ * (A little more understandable perhaps,
+ * but still an unnecessary restriction IMO)
+ */
+ if (entry &&
+ entry->flags & MTE_EVENT_FLAG_ACTIVE ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTEEVENTENABLED:
+ ret = netsnmp_check_vb_truthvalue(request->requestvb);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ /*
+ * The published version of the Event MIB forbids
+ * enabling (or disabling) an active row, which
+ * would make this object completely pointless!
+ * Fortunately this ludicrous decision has since been corrected.
+ */
+ break;
+
+ case COLUMN_MTEEVENTENTRYSTATUS:
+ ret = netsnmp_check_vb_rowstatus(request->requestvb,
+ (entry ? RS_ACTIVE : RS_NONEXISTENT));
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ /* An active row can only be deleted */
+ if (entry &&
+ entry->flags & MTE_EVENT_FLAG_ACTIVE &&
+ *request->requestvb->val.integer == RS_NOTINSERVICE ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ 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) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEEVENTENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ /*
+ * Create an (empty) new row structure
+ */
+ memset(mteOwner, 0, sizeof(mteOwner));
+ memcpy(mteOwner, tinfo->indexes->val.string,
+ tinfo->indexes->val_len);
+ memset(mteEName, 0, sizeof(mteEName));
+ memcpy(mteEName,
+ tinfo->indexes->next_variable->val.string,
+ tinfo->indexes->next_variable->val_len);
+
+ row = mteEvent_createEntry(mteOwner, mteEName, 0);
+ if (!row) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+ netsnmp_insert_tdata_row( request, row );
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_FREE:
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEEVENTENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ /*
+ * Tidy up after a failed row creation request
+ */
+ entry = (struct mteEvent *)
+ netsnmp_tdata_extract_entry(request);
+ if (entry &&
+ !(entry->flags & MTE_EVENT_FLAG_VALID)) {
+ row = (netsnmp_tdata_row *)
+ netsnmp_tdata_extract_row(request);
+ mteEvent_removeEntry( row );
+ }
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_ACTION:
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+ entry = (struct mteEvent *) netsnmp_tdata_extract_entry(request);
+ if (!entry) {
+ /*
+ * New rows must be created via the RowStatus column
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ /* or inconsistentName? */
+ return SNMP_ERR_NOERROR;
+
+ }
+ }
+ break;
+
+ case MODE_SET_UNDO:
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * All these assignments are "unfailable", so it's
+ * (reasonably) safe to apply them in the Commit phase
+ */
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteEvent *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEEVENTCOMMENT:
+ memset(entry->mteEventComment, 0,
+ sizeof(entry->mteEventComment));
+ memcpy(entry->mteEventComment,
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+
+ case COLUMN_MTEEVENTACTIONS:
+ entry->mteEventActions = request->requestvb->val.string[0];
+ break;
+
+ case COLUMN_MTEEVENTENABLED:
+ if (*request->requestvb->val.integer == TV_TRUE)
+ entry->flags |= MTE_EVENT_FLAG_ENABLED;
+ else
+ entry->flags &= ~MTE_EVENT_FLAG_ENABLED;
+ break;
+
+ case COLUMN_MTEEVENTENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_ACTIVE:
+ entry->flags |= MTE_EVENT_FLAG_ACTIVE;
+ break;
+ case RS_CREATEANDGO:
+ entry->flags |= MTE_EVENT_FLAG_ACTIVE;
+ /* fall-through */
+ case RS_CREATEANDWAIT:
+ entry->flags |= MTE_EVENT_FLAG_VALID;
+ entry->session =
+ netsnmp_iquery_pdu_session(reqinfo->asp->pdu);
+ break;
+
+ case RS_DESTROY:
+ row = (netsnmp_tdata_row *)
+ netsnmp_tdata_extract_row(request);
+ mteEvent_removeEntry(row);
+ }
+ }
+ }
+ break;
+ }
+ DEBUGMSGTL(("disman:event:mib", "Table handler, done\n"));
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventTable.h
new file mode 100644
index 0000000000..a7d75606dd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteEventTable.h
@@ -0,0 +1,22 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.table_data.conf,v 1.8 2005/07/19 14:52:03 dts12 Exp $
+ */
+#ifndef MTEEVENTTABLE_H
+#define MTEEVENTTABLE_H
+
+/*
+ * function declarations
+ */
+void init_mteEventTable(void);
+Netsnmp_Node_Handler mteEventTable_handler;
+
+/*
+ * column number definitions for mteEventTable
+ */
+#define COLUMN_MTEEVENTNAME 1
+#define COLUMN_MTEEVENTCOMMENT 2
+#define COLUMN_MTEEVENTACTIONS 3
+#define COLUMN_MTEEVENTENABLED 4
+#define COLUMN_MTEEVENTENTRYSTATUS 5
+#endif /* MTEEVENTTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjects.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjects.c
new file mode 100644
index 0000000000..710f8abd33
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjects.c
@@ -0,0 +1,434 @@
+/*
+ * DisMan Event MIB:
+ * Core implementation of the object handling behaviour
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/event/mteObjects.h"
+
+netsnmp_tdata *objects_table_data;
+
+ /*
+ * Initialize the container for the object table
+ * regardless of which initialisation routine is called first.
+ */
+
+void
+init_objects_table_data(void)
+{
+ if (!objects_table_data)
+ objects_table_data = netsnmp_tdata_create_table("mteObjectsTable", 0);
+}
+
+
+
+SNMPCallback _init_default_mteObject_lists;
+
+/** Initializes the mteObjects module */
+void
+init_mteObjects(void)
+{
+ init_objects_table_data();
+
+ /*
+ * Insert fixed object lists for the default trigger
+ * notifications, once the MIB files have been read in.
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY,
+ SNMP_CALLBACK_POST_READ_CONFIG,
+ _init_default_mteObject_lists, NULL);
+}
+
+
+void
+_init_default_mteObject( const char *oname, const char *object, int index, int wcard)
+{
+ struct mteObject *entry;
+
+ entry = mteObjects_addOID( "_snmpd", oname, index, object, 0 );
+ if (entry) {
+ entry->flags |= MTE_OBJECT_FLAG_ACTIVE|
+ MTE_OBJECT_FLAG_FIXED |
+ MTE_OBJECT_FLAG_VALID;
+ if (wcard)
+ entry->flags |= MTE_OBJECT_FLAG_WILD;
+ }
+}
+
+int
+_init_default_mteObject_lists( int majorID, int minorID,
+ void *serverargs, void *clientarg)
+{
+ static int _defaults_init = 0;
+
+ if (_defaults_init)
+ return 0;
+ /* mteHotTrigger */
+ _init_default_mteObject( "_triggerFire", ".1.3.6.1.2.1.88.2.1.1", 1, 0);
+ /* mteHotTargetName */
+ _init_default_mteObject( "_triggerFire", ".1.3.6.1.2.1.88.2.1.2", 2, 0);
+ /* mteHotContextName */
+ _init_default_mteObject( "_triggerFire", ".1.3.6.1.2.1.88.2.1.3", 3, 0);
+ /* mteHotOID */
+ _init_default_mteObject( "_triggerFire", ".1.3.6.1.2.1.88.2.1.4", 4, 0);
+ /* mteHotValue */
+ _init_default_mteObject( "_triggerFire", ".1.3.6.1.2.1.88.2.1.5", 5, 0);
+
+
+ /* mteHotTrigger */
+ _init_default_mteObject( "_triggerFail", ".1.3.6.1.2.1.88.2.1.1", 1, 0);
+ /* mteHotTargetName */
+ _init_default_mteObject( "_triggerFail", ".1.3.6.1.2.1.88.2.1.2", 2, 0);
+ /* mteHotContextName */
+ _init_default_mteObject( "_triggerFail", ".1.3.6.1.2.1.88.2.1.3", 3, 0);
+ /* mteHotOID */
+ _init_default_mteObject( "_triggerFail", ".1.3.6.1.2.1.88.2.1.4", 4, 0);
+ /* mteFailedReason */
+ _init_default_mteObject( "_triggerFail", ".1.3.6.1.2.1.88.2.1.6", 5, 0);
+
+ /* ifIndex */
+ _init_default_mteObject( "_linkUpDown", ".1.3.6.1.2.1.2.2.1.1", 1, 1);
+ /* ifAdminStatus */
+ _init_default_mteObject( "_linkUpDown", ".1.3.6.1.2.1.2.2.1.7", 2, 1);
+ /* ifOperStatus */
+ _init_default_mteObject( "_linkUpDown", ".1.3.6.1.2.1.2.2.1.8", 3, 1);
+
+ _defaults_init = 1;
+ return 0;
+}
+
+ /* ===================================================
+ *
+ * APIs for maintaining the contents of the mteObjectsTable container.
+ *
+ * =================================================== */
+
+/*
+ * Create a new row in the object table
+ */
+netsnmp_tdata_row *
+mteObjects_createEntry(char *owner, char *oname, int index, int flags)
+{
+ struct mteObject *entry;
+ netsnmp_tdata_row *row, *row2;
+ size_t owner_len = (owner) ? strlen(owner) : 0;
+ size_t oname_len = (oname) ? strlen(oname) : 0;
+
+ /*
+ * Create the mteObjects entry, and the
+ * (table-independent) row wrapper structure...
+ */
+ entry = SNMP_MALLOC_TYPEDEF(struct mteObject);
+ if (!entry)
+ return NULL;
+
+
+ row = netsnmp_tdata_create_row();
+ if (!row) {
+ SNMP_FREE(entry);
+ return NULL;
+ }
+ row->data = entry;
+
+ /*
+ * ... initialize this row with the indexes supplied
+ * and the default values for the row...
+ */
+ if (owner)
+ memcpy(entry->mteOwner, owner, owner_len);
+ netsnmp_tdata_row_add_index(row, ASN_OCTET_STR,
+ entry->mteOwner, owner_len);
+ if (oname)
+ memcpy(entry->mteOName, oname, oname_len);
+ netsnmp_tdata_row_add_index(row, ASN_OCTET_STR,
+ entry->mteOName, oname_len);
+ entry->mteOIndex = index;
+ netsnmp_tdata_row_add_index(row, ASN_INTEGER,
+ &entry->mteOIndex, sizeof(long));
+
+ entry->mteObjectID_len = 2; /* .0.0 */
+ if (flags & MTE_OBJECT_FLAG_FIXED)
+ entry->flags |= MTE_OBJECT_FLAG_FIXED;
+
+ /*
+ * Check whether there's already a row with the same indexes
+ * (XXX - relies on private internal data ???)
+ */
+ row2 = netsnmp_tdata_row_get_byoid(objects_table_data,
+ row->oid_index.oids,
+ row->oid_index.len);
+ if (row2) {
+ if (flags & MTE_OBJECT_FLAG_NEXT) {
+ /*
+ * If appropriate, keep incrementing the final
+ * index value until we find a free slot...
+ */
+ while (row2) {
+ row->oid_index.oids[row->oid_index.len]++;
+ row2 = netsnmp_tdata_row_get_byoid(objects_table_data,
+ row->oid_index.oids,
+ row->oid_index.len);
+ }
+ } else {
+ /*
+ * ... otherwise, this is an error.
+ * Tidy up, and return failure.
+ */
+ netsnmp_tdata_delete_row(row);
+ SNMP_FREE(entry);
+ return NULL;
+ }
+ }
+
+ /*
+ * ... finally, insert the row into the (common) table container
+ */
+ netsnmp_tdata_add_row(objects_table_data, row);
+ return row;
+}
+
+
+/*
+ * Add a row to the object table
+ */
+struct mteObject *
+mteObjects_addOID(char *owner, char *oname, int index,
+ char *oid_name_buf, int wild )
+{
+ netsnmp_tdata_row *row;
+ struct mteObject *entry;
+ oid name_buf[ MAX_OID_LEN ];
+ size_t name_buf_len;
+
+ name_buf_len = MAX_OID_LEN;
+ if (!snmp_parse_oid(oid_name_buf, name_buf, &name_buf_len)) {
+ snmp_log(LOG_ERR, "payload OID: %s\n", oid_name_buf);
+ config_perror("unknown payload OID");
+ return NULL;
+ }
+
+ row = mteObjects_createEntry(owner, oname, index,
+ MTE_OBJECT_FLAG_FIXED|MTE_OBJECT_FLAG_NEXT);
+ entry = (struct mteObject *)row->data;
+
+ entry->mteObjectID_len = name_buf_len;
+ memcpy(entry->mteObjectID, name_buf, name_buf_len*sizeof(oid));
+ if (wild)
+ entry->flags |= MTE_OBJECT_FLAG_WILD;
+ entry->flags |= MTE_OBJECT_FLAG_VALID|
+ MTE_OBJECT_FLAG_ACTIVE;
+
+ return entry;
+}
+
+
+/*
+ * Remove a row from the event table
+ */
+void
+mteObjects_removeEntry(netsnmp_tdata_row *row)
+{
+ struct mteObject *entry;
+
+ if (!row)
+ return; /* Nothing to remove */
+ entry = (struct mteObject *)
+ netsnmp_tdata_remove_and_delete_row(objects_table_data, row);
+ if (entry)
+ SNMP_FREE(entry);
+}
+
+
+/*
+ * Remove all matching rows from the event table
+ */
+void
+mteObjects_removeEntries( char *owner, char *oname )
+{
+ netsnmp_tdata_row *row;
+ netsnmp_variable_list owner_var, oname_var;
+
+ memset(&owner_var, 0, sizeof(owner_var));
+ memset(&oname_var, 0, sizeof(oname_var));
+ snmp_set_var_typed_value( &owner_var, ASN_OCTET_STR,
+ owner, strlen(owner));
+ snmp_set_var_typed_value( &oname_var, ASN_OCTET_STR,
+ oname, strlen(oname));
+ owner_var.next_variable = &oname_var;
+
+ row = netsnmp_tdata_row_next_byidx( objects_table_data, &owner_var );
+
+ while (row && !netsnmp_tdata_compare_subtree_idx( row, &owner_var )) {
+ mteObjects_removeEntry(row);
+ row = netsnmp_tdata_row_next_byidx( objects_table_data, &owner_var );
+ }
+ return;
+}
+
+
+ /* ===================================================
+ *
+ * API for retrieving a list of matching objects
+ *
+ * =================================================== */
+
+int
+mteObjects_vblist( netsnmp_variable_list *vblist,
+ char *owner, char *oname,
+ oid *suffix, size_t sfx_len )
+{
+ netsnmp_tdata_row *row;
+ struct mteObject *entry;
+ netsnmp_variable_list owner_var, oname_var;
+ netsnmp_variable_list *var = vblist;
+ oid name[MAX_OID_LEN];
+ size_t name_len;
+
+ if (!oname || !*oname) {
+ DEBUGMSGTL(("disman:event:objects", "No objects to add (%s)\n",
+ owner));
+ return 1; /* Empty object name means nothing to add */
+ }
+
+ DEBUGMSGTL(("disman:event:objects", "Objects add (%s, %s)\n",
+ owner, oname ));
+
+ /*
+ * Retrieve any matching entries from the mteObjectTable
+ * and add them to the specified varbind list.
+ */
+ memset(&owner_var, 0, sizeof(owner_var));
+ memset(&oname_var, 0, sizeof(oname_var));
+ snmp_set_var_typed_value( &owner_var, ASN_OCTET_STR,
+ owner, strlen(owner));
+ snmp_set_var_typed_value( &oname_var, ASN_OCTET_STR,
+ oname, strlen(oname));
+ owner_var.next_variable = &oname_var;
+
+ row = netsnmp_tdata_row_next_byidx( objects_table_data, &owner_var );
+
+ while (row && !netsnmp_tdata_compare_subtree_idx( row, &owner_var )) {
+ entry = (struct mteObject *)netsnmp_tdata_row_entry(row);
+
+ memset(name, 0, MAX_OID_LEN);
+ memcpy(name, entry->mteObjectID,
+ entry->mteObjectID_len*sizeof(oid));
+ name_len = entry->mteObjectID_len;
+
+ /*
+ * If the trigger value is wildcarded (sfx_len > 0),
+ * *and* this object entry is wildcarded,
+ * then add the supplied instance suffix.
+ * Otherwise use the Object OID as it stands.
+ */
+ if (sfx_len &&
+ entry->flags & MTE_OBJECT_FLAG_WILD) {
+ memcpy(&name[name_len], suffix, sfx_len*sizeof(oid));
+ name_len += sfx_len;
+ }
+ snmp_varlist_add_variable( &var, name, name_len, ASN_NULL, NULL, 0);
+
+ row = netsnmp_tdata_row_next( objects_table_data, row );
+ }
+ return 0;
+}
+
+
+int
+mteObjects_internal_vblist( netsnmp_variable_list *vblist,
+ char *oname,
+ struct mteTrigger *trigger,
+ netsnmp_session *sess)
+{
+ netsnmp_variable_list *var = NULL, *vp;
+ oid mteHotTrigger[] = {1, 3, 6, 1, 2, 1, 88, 2, 1, 1, 0};
+ oid mteHotTarget[] = {1, 3, 6, 1, 2, 1, 88, 2, 1, 2, 0};
+ oid mteHotContext[] = {1, 3, 6, 1, 2, 1, 88, 2, 1, 3, 0};
+ oid mteHotOID[] = {1, 3, 6, 1, 2, 1, 88, 2, 1, 4, 0};
+ oid mteHotValue[] = {1, 3, 6, 1, 2, 1, 88, 2, 1, 5, 0};
+
+ oid ifIndexOid[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 1, 0};
+ oid ifAdminStatus[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 7, 0};
+ oid ifOperStatus[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 8, 0};
+
+ oid if_index;
+
+ /*
+ * Construct the varbinds for this (internal) event...
+ */
+ if (!strcmp(oname, "_triggerFire")) {
+
+ snmp_varlist_add_variable( &var,
+ mteHotTrigger, OID_LENGTH(mteHotTrigger),
+ ASN_OCTET_STR, trigger->mteTName,
+ strlen(trigger->mteTName));
+ snmp_varlist_add_variable( &var,
+ mteHotTarget, OID_LENGTH(mteHotTarget),
+ ASN_OCTET_STR, trigger->mteTriggerTarget,
+ strlen(trigger->mteTriggerTarget));
+ snmp_varlist_add_variable( &var,
+ mteHotContext, OID_LENGTH(mteHotContext),
+ ASN_OCTET_STR, trigger->mteTriggerContext,
+ strlen(trigger->mteTriggerContext));
+ snmp_varlist_add_variable( &var,
+ mteHotOID, OID_LENGTH(mteHotOID),
+ ASN_OBJECT_ID, (char *)trigger->mteTriggerFired->name,
+ trigger->mteTriggerFired->name_length*sizeof(oid));
+ snmp_varlist_add_variable( &var,
+ mteHotValue, OID_LENGTH(mteHotValue),
+ trigger->mteTriggerFired->type,
+ trigger->mteTriggerFired->val.string,
+ trigger->mteTriggerFired->val_len);
+ } else if ((!strcmp(oname, "_linkUpDown" ))) {
+ /*
+ * The ifOperStatus varbind that triggered this entry
+ * is held in the trigger->mteTriggerFired field
+ *
+ * We can retrieve the ifIndex and ifOperStatus values
+ * from this varbind. But first we need to tweak the
+ * static ifXXX OID arrays to include the correct index.
+ * (or this could be passed in from the calling routine?)
+ *
+ * Unfortunately we don't have the current AdminStatus value,
+ * so we'll need to make another query to retrieve that.
+ */
+ if_index = trigger->mteTriggerFired->name[10];
+ ifIndexOid[ 10 ] = if_index;
+ ifAdminStatus[ 10 ] = if_index;
+ ifOperStatus[ 10 ] = if_index;
+ snmp_varlist_add_variable( &var,
+ ifIndexOid, OID_LENGTH(ifIndexOid),
+ ASN_INTEGER, &if_index, sizeof(if_index));
+
+ /* Set up a dummy varbind for ifAdminStatus... */
+ snmp_varlist_add_variable( &var,
+ ifAdminStatus, OID_LENGTH(ifAdminStatus),
+ ASN_INTEGER,
+ trigger->mteTriggerFired->val.integer,
+ trigger->mteTriggerFired->val_len);
+ /* ... then retrieve the actual value */
+ netsnmp_query_get( var->next_variable, sess );
+
+ snmp_varlist_add_variable( &var,
+ ifOperStatus, OID_LENGTH(ifOperStatus),
+ ASN_INTEGER,
+ trigger->mteTriggerFired->val.integer,
+ trigger->mteTriggerFired->val_len);
+ } else {
+ DEBUGMSGTL(("disman:event:objects",
+ "Unknown internal objects tag (%s)\n", oname));
+ return 1;
+ }
+
+ /*
+ * ... and insert them into the main varbind list
+ * (at the point specified)
+ */
+ for (vp = var; vp && vp->next_variable; vp=vp->next_variable)
+ ;
+ vp->next_variable = vblist->next_variable;
+ vblist->next_variable = var;
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjects.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjects.h
new file mode 100644
index 0000000000..e0c6ff6dfa
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjects.h
@@ -0,0 +1,59 @@
+#ifndef MTEOBJECTS_H
+#define MTEOBJECTS_H
+
+#include "disman/event/mteTrigger.h"
+
+ /*
+ * Flags relating to the mteObjectsTable
+ */
+#define MTE_OBJECT_FLAG_WILD 0x01 /* for mteObjectsIDWildcard */
+#define MTE_OBJECT_FLAG_ACTIVE 0x02 /* for mteObjectsEntryStatus */
+#define MTE_OBJECT_FLAG_FIXED 0x04 /* for snmpd.conf persistence */
+#define MTE_OBJECT_FLAG_VALID 0x08 /* for row creation/undo */
+#define MTE_OBJECT_FLAG_NEXT 0x10 /* for appending a new row */
+
+#define MTE_STR1_LEN 32
+
+/*
+ * Data structure for an object row
+ */
+struct mteObject {
+ /*
+ * Index values
+ */
+ char mteOwner[MTE_STR1_LEN+1];
+ char mteOName[MTE_STR1_LEN+1];
+ long mteOIndex;
+
+ /*
+ * Column values
+ */
+ oid mteObjectID[MAX_OID_LEN];
+ size_t mteObjectID_len;
+
+ long flags;
+};
+
+ /*
+ * Container structure for the mteObjectsTable,
+ * and routine to create this.
+ */
+extern netsnmp_tdata *objects_table_data;
+extern void init_objects_table_data(void);
+
+void init_mteObjects(void);
+void mteObjects_removeEntry(netsnmp_tdata_row *row);
+void mteObjects_removeEntries(char *owner, char *oname);
+netsnmp_tdata_row *mteObjects_createEntry( char *owner, char *oname,
+ int oindex, int flags);
+struct mteObject * mteObjects_addOID(char *owner, char *oname, int index,
+ char *oid_name_buf, int wild );
+
+int mteObjects_vblist( netsnmp_variable_list *vblist,
+ char *owner, char *oname,
+ oid *suffix, size_t sfx_len );
+int mteObjects_internal_vblist( netsnmp_variable_list *vblist,
+ char *oname, struct mteTrigger *trigger,
+ netsnmp_session *s);
+
+#endif /* MTEOBJECTS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsConf.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsConf.c
new file mode 100644
index 0000000000..3f9293c2aa
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsConf.c
@@ -0,0 +1,179 @@
+/*
+ * DisMan Event MIB:
+ * Implementation of the object table configure handling
+ */
+
+#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/agent/agent_callbacks.h>
+#include "disman/event/mteObjects.h"
+#include "disman/event/mteObjectsConf.h"
+
+
+/** Initializes the mteObjectsConf module */
+void
+init_mteObjectsConf(void)
+{
+ init_objects_table_data();
+
+ /*
+ * Register config handlers for current and previous style
+ * persistent configuration directives
+ */
+ snmpd_register_config_handler("_mteOTable",
+ parse_mteOTable, NULL, NULL);
+ snmpd_register_config_handler("mteObjectsTable",
+ parse_mteOTable, NULL, NULL);
+ /*
+ * Register to save (non-fixed) entries when the agent shuts down
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_mteOTable, NULL);
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_PRE_UPDATE_CONFIG,
+ clear_mteOTable, NULL);
+}
+
+
+void
+parse_mteOTable(const char *token, char *line)
+{
+ char owner[MTE_STR1_LEN+1];
+ char oname[MTE_STR1_LEN+1];
+ void *vp;
+ u_long index;
+ size_t tmpint;
+ size_t len;
+ netsnmp_tdata_row *row;
+ struct mteObject *entry;
+
+ DEBUGMSGTL(("disman:event:conf", "Parsing mteObjectTable config... "));
+
+ /*
+ * Read in the index information for this entry
+ * and create a (non-fixed) data structure for it.
+ */
+ memset( owner, 0, sizeof(owner));
+ memset( oname, 0, sizeof(oname));
+ len = MTE_STR1_LEN; vp = owner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = oname;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ line = read_config_read_data(ASN_UNSIGNED, line, &index, &len);
+
+ DEBUGMSG(("disman:event:conf", "(%s, %s, %d) ", owner, oname, index));
+
+ row = mteObjects_createEntry( owner, oname, index, 0 );
+ /* entry = (struct mteObject *)netsnmp_tdata_row_entry( row ); */
+ entry = (struct mteObject *)row->data;
+
+
+ /*
+ * Read in the accessible column values
+ */
+ entry->mteObjectID_len = MAX_OID_LEN;
+ vp = entry->mteObjectID;
+ line = read_config_read_data(ASN_OBJECT_ID, line, &vp,
+ &entry->mteObjectID_len);
+
+ if (!strcasecmp(token, "mteObjectsTable")) {
+ /*
+ * The previous Event-MIB implementation saved
+ * these fields as separate (integer) values
+ * Accept this (for backwards compatability)
+ */
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmpint, &len);
+ if (tmpint == TV_TRUE)
+ entry->flags |= MTE_OBJECT_FLAG_WILD;
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmpint, &len);
+ if (tmpint == RS_ACTIVE)
+ entry->flags |= MTE_OBJECT_FLAG_ACTIVE;
+ } else {
+ /*
+ * This implementation saves the (relevant) flag bits directly
+ */
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmpint, &len);
+ if (tmpint & MTE_OBJECT_FLAG_WILD)
+ entry->flags |= MTE_OBJECT_FLAG_WILD;
+ if (tmpint & MTE_OBJECT_FLAG_ACTIVE)
+ entry->flags |= MTE_OBJECT_FLAG_ACTIVE;
+ }
+
+ entry->flags |= MTE_OBJECT_FLAG_VALID;
+
+ DEBUGMSG(("disman:event:conf", "\n"));
+}
+
+
+
+int
+store_mteOTable(int majorID, int minorID, void *serverarg, void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr;
+ void *vp;
+ size_t tint;
+ netsnmp_tdata_row *row;
+ struct mteObject *entry;
+
+
+ DEBUGMSGTL(("disman:event:conf", "Storing mteObjectTable config:\n"));
+
+ for (row = netsnmp_tdata_row_first( objects_table_data );
+ row;
+ row = netsnmp_tdata_row_next( objects_table_data, row )) {
+
+ /*
+ * Skip entries that were set up via static config directives
+ */
+ entry = (struct mteObject *)netsnmp_tdata_row_entry( row );
+ if ( entry->flags & MTE_OBJECT_FLAG_FIXED )
+ continue;
+
+ DEBUGMSGTL(("disman:event:conf", " Storing (%s %s %d)\n",
+ entry->mteOwner, entry->mteOName, entry->mteOIndex));
+ memset(line, 0, sizeof(line));
+ strcat(line, "_mteOTable ");
+ cptr = line + strlen(line);
+
+ vp = entry->mteOwner; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteOName; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ cptr = read_config_store_data(ASN_UNSIGNED, cptr,
+ &entry->mteOIndex, NULL);
+ vp = entry->mteObjectID;
+ cptr = read_config_store_data(ASN_OBJECT_ID, cptr, &vp,
+ &entry->mteObjectID_len);
+ tint = entry->flags & (MTE_OBJECT_FLAG_WILD|MTE_OBJECT_FLAG_ACTIVE);
+ cptr = read_config_store_data(ASN_UNSIGNED, cptr, &tint, NULL);
+ snmpd_store_config(line);
+ }
+
+ DEBUGMSGTL(("disman:event:conf", " done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+int
+clear_mteOTable(int majorID, int minorID, void *serverarg, void *clientarg)
+{
+ netsnmp_tdata_row *row;
+ netsnmp_variable_list owner_var;
+
+ /*
+ * We're only interested in entries set up via the config files
+ */
+ memset( &owner_var, 0, sizeof(netsnmp_variable_list));
+ snmp_set_var_typed_value( &owner_var, ASN_OCTET_STR,
+ "snmpd.conf", strlen("snmpd.conf"));
+ while (( row = netsnmp_tdata_row_next_byidx( objects_table_data,
+ &owner_var ))) {
+ /*
+ * XXX - check for owner of "snmpd.conf"
+ * and break at the end of these
+ */
+ netsnmp_tdata_remove_and_delete_row( objects_table_data, row );
+ }
+ return SNMPERR_SUCCESS;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsConf.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsConf.h
new file mode 100644
index 0000000000..d6649ff3bf
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsConf.h
@@ -0,0 +1,12 @@
+#ifndef MTEOBJECTSCONF_H
+#define MTEOBJECTSCONF_H
+
+/*
+ * function declarations
+ */
+void init_mteObjectsConf(void);
+void parse_mteOTable(const char *, char *);
+SNMPCallback store_mteOTable;
+SNMPCallback clear_mteOTable;
+
+#endif /* MTEOBJECTSCONF_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsTable.c
new file mode 100644
index 0000000000..4c879b2dc7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsTable.c
@@ -0,0 +1,299 @@
+/*
+ * DisMan Event MIB:
+ * Implementation of the mteObjectsTable MIB interface
+ * See 'mteObjects.c' for active behaviour of this table.
+ *
+ * (based on mib2c.table_data.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/event/mteObjects.h"
+#include "disman/event/mteObjectsTable.h"
+
+/** Initializes the mteObjectsTable module */
+void
+init_mteObjectsTable(void)
+
+{
+ static oid mteObjectsTable_oid[] = { 1, 3, 6, 1, 2, 1, 88, 1, 3, 1 };
+ size_t mteObjectsTable_oid_len = OID_LENGTH(mteObjectsTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ /*
+ * Ensure the object table container is available...
+ */
+ init_objects_table_data();
+
+ /*
+ * ... then set up the MIB interface to this table
+ */
+ reg = netsnmp_create_handler_registration("mteObjectsTable",
+ mteObjectsTable_handler,
+ mteObjectsTable_oid,
+ mteObjectsTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ ASN_OCTET_STR, /* index: mteOwner */
+ ASN_OCTET_STR, /* index: mteObjectsName */
+ ASN_UNSIGNED, /* index: mteObjectsIndex */
+ 0);
+
+ table_info->min_column = COLUMN_MTEOBJECTSID;
+ table_info->max_column = COLUMN_MTEOBJECTSENTRYSTATUS;
+
+
+ netsnmp_tdata_register(reg, objects_table_data, table_info);
+}
+
+
+/** handles requests for the mteObjectsTable table */
+int
+mteObjectsTable_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 *tinfo;
+ netsnmp_tdata_row *row;
+ struct mteObject *entry;
+ char mteOwner[MTE_STR1_LEN+1];
+ char mteOName[MTE_STR1_LEN+1];
+ long ret;
+
+ DEBUGMSGTL(("disman:event:mib", "ObjTable handler (%d)\n", reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteObject *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ if (!entry) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ switch (tinfo->colnum) {
+ case COLUMN_MTEOBJECTSID:
+ snmp_set_var_typed_value(request->requestvb, ASN_OBJECT_ID,
+ (u_char *) entry->mteObjectID,
+ entry->mteObjectID_len*sizeof(oid));
+ break;
+ case COLUMN_MTEOBJECTSIDWILDCARD:
+ ret = (entry->flags & MTE_OBJECT_FLAG_WILD ) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_MTEOBJECTSENTRYSTATUS:
+ ret = (entry->flags & MTE_OBJECT_FLAG_ACTIVE ) ?
+ RS_ACTIVE : RS_NOTINSERVICE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ }
+ }
+ break;
+
+ /*
+ * Write-support
+ */
+ case MODE_SET_RESERVE1:
+
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteObject *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEOBJECTSID:
+ ret = netsnmp_check_vb_oid( request->requestvb );
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ /*
+ * Can't modify the OID of an active row
+ * (an unnecessary restriction, IMO)
+ */
+ if (entry &&
+ entry->flags & MTE_OBJECT_FLAG_ACTIVE ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTEOBJECTSIDWILDCARD:
+ ret = netsnmp_check_vb_truthvalue( request->requestvb );
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ /*
+ * Can't modify the wildcarding of an active row
+ * (an unnecessary restriction, IMO)
+ */
+ if (entry &&
+ entry->flags & MTE_OBJECT_FLAG_ACTIVE ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTEOBJECTSENTRYSTATUS:
+ ret = netsnmp_check_vb_rowstatus(request->requestvb,
+ (entry ? RS_ACTIVE : RS_NONEXISTENT));
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ /* An active row can only be deleted */
+ if (entry &&
+ entry->flags & MTE_OBJECT_FLAG_ACTIVE &&
+ *request->requestvb->val.integer == RS_NOTINSERVICE ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ 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) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEOBJECTSENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ /*
+ * Create an (empty) new row structure
+ */
+ memset(mteOwner, 0, sizeof(mteOwner));
+ memcpy(mteOwner, tinfo->indexes->val.string,
+ tinfo->indexes->val_len);
+ memset(mteOName, 0, sizeof(mteOName));
+ memcpy(mteOName,
+ tinfo->indexes->next_variable->val.string,
+ tinfo->indexes->next_variable->val_len);
+ ret = *tinfo->indexes->next_variable->next_variable->val.integer;
+
+ row = mteObjects_createEntry(mteOwner, mteOName, ret, 0);
+ if (!row) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+ netsnmp_insert_tdata_row( request, row );
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_FREE:
+
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEOBJECTSENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ /*
+ * Tidy up after a failed row creation request
+ */
+ entry = (struct mteObject *)
+ netsnmp_tdata_extract_entry(request);
+ if (entry &&
+ !(entry->flags & MTE_OBJECT_FLAG_VALID)) {
+ row = (netsnmp_tdata_row *)
+ netsnmp_tdata_extract_row(request);
+ mteObjects_removeEntry( row );
+ }
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_ACTION:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteObject *) netsnmp_tdata_extract_entry(request);
+ if (!entry) {
+ /*
+ * New rows must be created via the RowStatus column
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ /* or inconsistentName? */
+ return SNMP_ERR_NOERROR;
+
+ }
+ }
+ break;
+
+ case MODE_SET_UNDO:
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * All these assignments are "unfailable", so it's
+ * (reasonably) safe to apply them in the Commit phase
+ */
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteObject *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTEOBJECTSID:
+ memset(entry->mteObjectID, 0, sizeof(entry->mteObjectID));
+ memcpy(entry->mteObjectID, request->requestvb->val.objid,
+ request->requestvb->val_len);
+ entry->mteObjectID_len = request->requestvb->val_len/sizeof(oid);
+ break;
+
+ case COLUMN_MTEOBJECTSIDWILDCARD:
+ if (*request->requestvb->val.integer == TV_TRUE)
+ entry->flags |= MTE_OBJECT_FLAG_WILD;
+ else
+ entry->flags &= ~MTE_OBJECT_FLAG_WILD;
+ break;
+
+ case COLUMN_MTEOBJECTSENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_ACTIVE:
+ entry->flags |= MTE_OBJECT_FLAG_ACTIVE;
+ break;
+ case RS_CREATEANDGO:
+ entry->flags |= MTE_OBJECT_FLAG_VALID;
+ entry->flags |= MTE_OBJECT_FLAG_ACTIVE;
+ break;
+ case RS_CREATEANDWAIT:
+ entry->flags |= MTE_OBJECT_FLAG_VALID;
+ break;
+
+ case RS_DESTROY:
+ row = (netsnmp_tdata_row *)
+ netsnmp_tdata_extract_row(request);
+ mteObjects_removeEntry(row);
+ }
+ }
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsTable.h
new file mode 100644
index 0000000000..14bfb26cd3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteObjectsTable.h
@@ -0,0 +1,22 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.table_data.conf,v 1.8 2005/07/19 14:52:03 dts12 Exp $
+ */
+#ifndef MTEOBJECTSTABLE_H
+#define MTEOBJECTSTABLE_H
+
+/*
+ * function declarations
+ */
+void init_mteObjectsTable(void);
+Netsnmp_Node_Handler mteObjectsTable_handler;
+
+/*
+ * column number definitions for table mteObjectsTable
+ */
+#define COLUMN_MTEOBJECTSNAME 1
+#define COLUMN_MTEOBJECTSINDEX 2
+#define COLUMN_MTEOBJECTSID 3
+#define COLUMN_MTEOBJECTSIDWILDCARD 4
+#define COLUMN_MTEOBJECTSENTRYSTATUS 5
+#endif /* MTEOBJECTSTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteScalars.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteScalars.c
new file mode 100644
index 0000000000..769adc1395
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteScalars.c
@@ -0,0 +1,135 @@
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "mteScalars.h"
+#include "mteTrigger.h"
+
+/** Initializes the mteScalars module */
+void
+init_mteScalars(void)
+{
+ static oid mteResource_oid[] = { 1, 3, 6, 1, 2, 1, 88, 1, 1 };
+ static oid mteTriggerFail_oid[] = { 1, 3, 6, 1, 2, 1, 88, 1, 2, 1 };
+
+ DEBUGMSGTL(("mteScalars", "Initializing\n"));
+
+ netsnmp_register_scalar_group(
+ netsnmp_create_handler_registration("mteResource", handle_mteResourceGroup,
+ mteResource_oid, OID_LENGTH(mteResource_oid),
+ HANDLER_CAN_RONLY),
+ MTE_RESOURCE_SAMPLE_MINFREQ, MTE_RESOURCE_SAMPLE_LACKS);
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("mteTriggerFailures",
+ handle_mteTriggerFailures,
+ mteTriggerFail_oid, OID_LENGTH(mteTriggerFail_oid),
+ HANDLER_CAN_RONLY));
+}
+
+int
+handle_mteResourceGroup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ oid obj;
+ long value = 0;
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ obj = requests->requestvb->name[ requests->requestvb->name_length-2 ];
+ switch (obj) {
+ case MTE_RESOURCE_SAMPLE_MINFREQ:
+ value = 1; /* Fixed minimum sample frequency */
+ snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ case MTE_RESOURCE_SAMPLE_MAX_INST:
+ value = 0; /* No fixed maximum */
+ snmp_set_var_typed_value(requests->requestvb, ASN_UNSIGNED,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ case MTE_RESOURCE_SAMPLE_INSTANCES:
+#ifdef USING_DISMAN_EVENT_MTETRIGGER_MODULE
+ value = mteTrigger_getNumEntries(0);
+#else
+ value = 0;
+#endif
+ snmp_set_var_typed_value(requests->requestvb, ASN_GAUGE,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ case MTE_RESOURCE_SAMPLE_HIGH:
+#ifdef USING_DISMAN_EVENT_MTETRIGGER_MODULE
+ value = mteTrigger_getNumEntries(1);
+#else
+ value = 0;
+#endif
+ snmp_set_var_typed_value(requests->requestvb, ASN_GAUGE,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ case MTE_RESOURCE_SAMPLE_LACKS:
+ value = 0; /* mteResSampleInstMax not used */
+ snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown object (%d) in handle_mteResourceGroup\n", (int)obj);
+ return SNMP_ERR_GENERR;
+ }
+ break;
+
+ default:
+ /*
+ * Although mteResourceSampleMinimum and mteResourceSampleInstanceMaximum
+ * are defined with MAX-ACCESS read-write, this version hardcodes
+ * these values, so doesn't need to implement write access.
+ */
+ snmp_log(LOG_ERR,
+ "unknown mode (%d) in handle_mteResourceGroup\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_mteTriggerFailures(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+#ifdef USING_DISMAN_EVENT_MTETRIGGER_MODULE
+ extern long mteTriggerFailures;
+#else
+ long mteTriggerFailures = 0;
+#endif
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER,
+ (u_char *)&mteTriggerFailures,
+ sizeof(mteTriggerFailures));
+ break;
+
+
+ default:
+ /*
+ * we should never get here, so this is a really bad error
+ */
+ snmp_log(LOG_ERR,
+ "unknown mode (%d) in handle_mteTriggerFailures\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteScalars.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteScalars.h
new file mode 100644
index 0000000000..a6ade2e371
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteScalars.h
@@ -0,0 +1,14 @@
+#ifndef MTESCALARS_H
+#define MTESCALARS_H
+
+void init_mteScalars(void);
+Netsnmp_Node_Handler handle_mteResourceGroup;
+Netsnmp_Node_Handler handle_mteTriggerFailures;
+
+#define MTE_RESOURCE_SAMPLE_MINFREQ 1
+#define MTE_RESOURCE_SAMPLE_MAX_INST 2
+#define MTE_RESOURCE_SAMPLE_INSTANCES 3
+#define MTE_RESOURCE_SAMPLE_HIGH 4
+#define MTE_RESOURCE_SAMPLE_LACKS 5
+
+#endif /* MTESCALARS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTrigger.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTrigger.c
new file mode 100644
index 0000000000..074c2615af
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTrigger.c
@@ -0,0 +1,1187 @@
+/*
+ * DisMan Event MIB:
+ * Core implementation of the trigger handling behaviour
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/event/mteTrigger.h"
+#include "disman/event/mteEvent.h"
+
+netsnmp_tdata *trigger_table_data;
+
+oid _sysUpTime_instance[] = { 1, 3, 6, 1, 2, 1, 1, 3, 0 };
+size_t _sysUpTime_inst_len = OID_LENGTH(_sysUpTime_instance);
+
+long mteTriggerFailures;
+
+ /*
+ * Initialize the container for the (combined) mteTrigger*Table,
+ * regardless of which table initialisation routine is called first.
+ */
+
+void
+init_trigger_table_data(void)
+{
+ DEBUGMSGTL(("disman:event:init", "init trigger container\n"));
+ if (!trigger_table_data) {
+ trigger_table_data = netsnmp_tdata_create_table("mteTriggerTable", 0);
+ if (!trigger_table_data) {
+ snmp_log(LOG_ERR, "failed to create mteTriggerTable");
+ return;
+ }
+ DEBUGMSGTL(("disman:event:init", "create trigger container (%x)\n",
+ trigger_table_data));
+ }
+ mteTriggerFailures = 0;
+}
+
+
+/** Initializes the mteTrigger module */
+void
+init_mteTrigger(void)
+{
+ init_trigger_table_data();
+
+}
+
+ /* ===================================================
+ *
+ * APIs for maintaining the contents of the (combined)
+ * mteTrigger*Table container.
+ *
+ * =================================================== */
+
+void
+_mteTrigger_dump(void)
+{
+ struct mteTrigger *entry;
+ netsnmp_tdata_row *row;
+ int i = 0;
+
+ for (row = netsnmp_tdata_row_first(trigger_table_data);
+ row;
+ row = netsnmp_tdata_row_next(trigger_table_data, row)) {
+ entry = (struct mteTrigger *)row->data;
+ DEBUGMSGTL(("disman:event:dump", "TriggerTable entry %d: ", i));
+ DEBUGMSGOID(("disman:event:dump", row->oid_index.oids, row->oid_index.len));
+ DEBUGMSG(("disman:event:dump", "(%s, %s)",
+ row->indexes->val.string,
+ row->indexes->next_variable->val.string));
+ DEBUGMSG(("disman:event:dump", ": %x, %x\n", row, entry));
+ i++;
+ }
+ DEBUGMSGTL(("disman:event:dump", "TriggerTable %d entries\n", i));
+}
+
+
+/*
+ * Create a new row in the trigger table
+ */
+netsnmp_tdata_row *
+mteTrigger_createEntry(char *mteOwner, char *mteTName, int fixed)
+{
+ struct mteTrigger *entry;
+ netsnmp_tdata_row *row;
+ size_t mteOwner_len = (mteOwner) ? strlen(mteOwner) : 0;
+ size_t mteTName_len = (mteTName) ? strlen(mteTName) : 0;
+
+ DEBUGMSGTL(("disman:event:table", "Create trigger entry (%s, %s)\n",
+ mteOwner, mteTName));
+ /*
+ * Create the mteTrigger entry, and the
+ * (table-independent) row wrapper structure...
+ */
+ entry = SNMP_MALLOC_TYPEDEF(struct mteTrigger);
+ if (!entry)
+ return NULL;
+
+ row = netsnmp_tdata_create_row();
+ if (!row) {
+ SNMP_FREE(entry);
+ return NULL;
+ }
+ row->data = entry;
+
+ /*
+ * ... initialize this row with the indexes supplied
+ * and the default values for the row...
+ */
+ if (mteOwner)
+ memcpy(entry->mteOwner, mteOwner, mteOwner_len);
+ netsnmp_table_row_add_index(row, ASN_OCTET_STR,
+ entry->mteOwner, mteOwner_len);
+ if (mteTName)
+ memcpy(entry->mteTName, mteTName, mteTName_len);
+ netsnmp_table_row_add_index(row, ASN_PRIV_IMPLIED_OCTET_STR,
+ entry->mteTName, mteTName_len);
+
+ /* entry->mteTriggerTest = MTE_TRIGGER_BOOLEAN; */
+ entry->mteTriggerValueID_len = 2; /* .0.0 */
+ entry->mteTriggerFrequency = 600;
+ memcpy(entry->mteDeltaDiscontID, _sysUpTime_instance,
+ sizeof(_sysUpTime_instance));
+ entry->mteDeltaDiscontID_len = _sysUpTime_inst_len;
+ entry->mteDeltaDiscontIDType = MTE_DELTAD_TTICKS;
+ entry->flags |= MTE_TRIGGER_FLAG_SYSUPT;
+ entry->mteTExTest = (MTE_EXIST_PRESENT | MTE_EXIST_ABSENT);
+ entry->mteTExStartup = (MTE_EXIST_PRESENT | MTE_EXIST_ABSENT);
+ entry->mteTBoolComparison = MTE_BOOL_UNEQUAL;
+ entry->flags |= MTE_TRIGGER_FLAG_BSTART;
+ entry->mteTThStartup = MTE_THRESH_START_RISEFALL;
+
+ if (fixed)
+ entry->flags |= MTE_TRIGGER_FLAG_FIXED;
+
+ /*
+ * ... and insert the row into the (common) table container
+ */
+ netsnmp_tdata_add_row(trigger_table_data, row);
+ DEBUGMSGTL(("disman:event:table", "Trigger entry created\n"));
+ return row;
+}
+
+/*
+ * Remove a row from the trigger table
+ */
+void
+mteTrigger_removeEntry(netsnmp_tdata_row *row)
+{
+ struct mteTrigger *entry;
+
+ if (!row)
+ return; /* Nothing to remove */
+ entry = (struct mteTrigger *)
+ netsnmp_tdata_remove_and_delete_row(trigger_table_data, row);
+ if (entry) {
+ mteTrigger_disable( entry );
+ SNMP_FREE(entry);
+ }
+}
+
+ /* ===================================================
+ *
+ * APIs for evaluating a trigger,
+ * and firing the appropriate event
+ *
+ * =================================================== */
+const char *_ops[] = { "",
+ "!=", /* MTE_BOOL_UNEQUAL */
+ "==", /* MTE_BOOL_EQUAL */
+ "<", /* MTE_BOOL_LESS */
+ "<=", /* MTE_BOOL_LESSEQUAL */
+ ">", /* MTE_BOOL_GREATER */
+ ">=" /* MTE_BOOL_GREATEREQUAL */ };
+
+void
+_mteTrigger_failure( /* int error, */ const char *msg )
+{
+ /*
+ * XXX - Send an mteTriggerFailure trap
+ * (if configured to do so)
+ */
+ mteTriggerFailures++;
+ snmp_log(LOG_ERR, "%s\n", msg );
+ return;
+}
+
+void
+mteTrigger_run( unsigned int reg, void *clientarg)
+{
+ struct mteTrigger *entry = (struct mteTrigger *)clientarg;
+ netsnmp_variable_list *var, *vtmp;
+ netsnmp_variable_list *vp1, *vp1_prev;
+ netsnmp_variable_list *vp2, *vp2_prev;
+ netsnmp_variable_list *dvar = NULL;
+ netsnmp_variable_list *dv1 = NULL, *dv2 = NULL;
+ netsnmp_variable_list sysUT_var;
+ int cmp = 0, n, n2;
+ long value;
+ const char *reason;
+
+ if (!entry) {
+ snmp_alarm_unregister( reg );
+ return;
+ }
+ if (!(entry->flags & MTE_TRIGGER_FLAG_ENABLED ) ||
+ !(entry->flags & MTE_TRIGGER_FLAG_ACTIVE ) ||
+ !(entry->flags & MTE_TRIGGER_FLAG_VALID )) {
+ return;
+ }
+
+ {
+ extern netsnmp_agent_session *netsnmp_processing_set;
+ if (netsnmp_processing_set) {
+ /*
+ * netsnmp_handle_request will not be responsive to our efforts to
+ * Retrieve the requested MIB value(s)...
+ * so we will skip it.
+ * https://sourceforge.net/tracker/
+ * index.php?func=detail&aid=1557406&group_id=12694&atid=112694
+ */
+ DEBUGMSGTL(("disman:event:trigger:monitor",
+ "Skipping trigger (%s) while netsnmp_processing_set\n",
+ entry->mteTName));
+ return;
+ }
+ }
+
+ /*
+ * Retrieve the requested MIB value(s)...
+ */
+ DEBUGMSGTL(( "disman:event:trigger:monitor", "Running trigger (%s)\n", entry->mteTName));
+ var = (netsnmp_variable_list *)SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ if (!var) {
+ _mteTrigger_failure("failed to create mteTrigger query varbind");
+ return;
+ }
+ snmp_set_var_objid( var, entry->mteTriggerValueID,
+ entry->mteTriggerValueID_len );
+ if ( entry->flags & MTE_TRIGGER_FLAG_VWILD ) {
+ n = netsnmp_query_walk( var, entry->session );
+ } else {
+ n = netsnmp_query_get( var, entry->session );
+ }
+ if ( n != SNMP_ERR_NOERROR ) {
+ DEBUGMSGTL(( "disman:event:trigger:monitor", "Trigger query (%s) failed: %d\n",
+ (( entry->flags & MTE_TRIGGER_FLAG_VWILD ) ? "walk" : "get"), n));
+ _mteTrigger_failure( "failed to run mteTrigger query" );
+ return;
+ }
+
+ /*
+ * ... canonicalise the results (to simplify later comparisons)...
+ */
+
+ vp1 = var; vp1_prev = NULL;
+ vp2 = entry->old_results; vp2_prev = NULL;
+ entry->count=0;
+ while (vp1) {
+ /*
+ * Flatten various missing values/exceptions into a single form
+ */
+ switch (vp1->type) {
+ case SNMP_NOSUCHINSTANCE:
+ case SNMP_NOSUCHOBJECT:
+ case ASN_PRIV_RETRY: /* Internal only ? */
+ vp1->type = ASN_NULL;
+ }
+ /*
+ * Keep track of how many entries have been retrieved.
+ */
+ entry->count++;
+
+ /*
+ * Ensure previous and current result match
+ * (with corresponding entries in both lists)
+ * and set the flags indicating which triggers are armed
+ */
+ if (vp2) {
+ cmp = snmp_oid_compare(vp1->name, vp1->name_length,
+ vp2->name, vp2->name_length);
+ if ( cmp < 0 ) {
+ /*
+ * If a new value has appeared, insert a matching
+ * dummy entry into the previous result list.
+ *
+ * XXX - check how this is best done.
+ */
+ vtmp = SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ if (!vtmp) {
+ _mteTrigger_failure(
+ "failed to create mteTrigger temp varbind");
+ return;
+ }
+ vtmp->type = ASN_NULL;
+ snmp_set_var_objid( vtmp, vp1->name, vp1->name_length );
+ vtmp->next_variable = vp2;
+ if (vp2_prev) {
+ vp2_prev->next_variable = vtmp;
+ } else {
+ entry->old_results = vtmp;
+ }
+ vp2_prev = vtmp;
+ vp1->index = MTE_ARMED_ALL; /* XXX - plus a new flag */
+ vp1_prev = vp1;
+ vp1 = vp1->next_variable;
+ }
+ else if ( cmp == 0 ) {
+ /*
+ * If it's a continuing entry, just copy across the armed flags
+ */
+ vp1->index = vp2->index;
+ vp1_prev = vp1;
+ vp1 = vp1->next_variable;
+ vp2_prev = vp2;
+ vp2 = vp2->next_variable;
+ } else {
+ /*
+ * If a value has just disappeared, insert a
+ * matching dummy entry into the current result list.
+ *
+ * XXX - check how this is best done.
+ *
+ */
+ if ( vp2->type != ASN_NULL ) {
+ vtmp = SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ if (!vtmp) {
+ _mteTrigger_failure(
+ "failed to create mteTrigger temp varbind");
+ return;
+ }
+ vtmp->type = ASN_NULL;
+ snmp_set_var_objid( vtmp, vp2->name, vp2->name_length );
+ vtmp->next_variable = vp1;
+ if (vp1_prev) {
+ vp1_prev->next_variable = vtmp;
+ } else {
+ var = vtmp;
+ }
+ vp1_prev = vtmp;
+ vp2_prev = vp2;
+ vp2 = vp2->next_variable;
+ } else {
+ /*
+ * But only if this entry has *just* disappeared. If the
+ * entry from the last run was a dummy too, then remove it.
+ * (leaving vp2_prev unchanged)
+ */
+ vtmp = vp2;
+ if (vp2_prev) {
+ vp2_prev->next_variable = vp2->next_variable;
+ } else {
+ entry->old_results = vp2->next_variable;
+ }
+ vp2 = vp2->next_variable;
+ vtmp->next_variable = NULL;
+ snmp_free_varbind( vtmp );
+ }
+ }
+ } else {
+ /*
+ * No more old results to compare.
+ * Either all remaining values have only just been created ...
+ * (and we need to create dummy 'old' entries for them)
+ */
+ if ( vp2_prev ) {
+ vtmp = SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ if (!vtmp) {
+ _mteTrigger_failure(
+ "failed to create mteTrigger temp varbind");
+ return;
+ }
+ vtmp->type = ASN_NULL;
+ snmp_set_var_objid( vtmp, vp1->name, vp1->name_length );
+ vtmp->next_variable = vp2_prev->next_variable;
+ vp2_prev->next_variable = vtmp;
+ vp2_prev = vtmp;
+ }
+ /*
+ * ... or this is the first run through
+ * (and there were no old results at all)
+ *
+ * In either case, mark the current entry as armed and new.
+ * Note that we no longer need to maintain 'vp1_prev'
+ */
+ vp1->index = MTE_ARMED_ALL; /* XXX - plus a new flag */
+ vp1 = vp1->next_variable;
+ }
+ }
+
+ /*
+ * ... and then work through these result(s), deciding
+ * whether or not to trigger the corresponding event.
+ *
+ * Note that there's no point in evaluating Existence or
+ * Boolean tests if there's no corresponding event.
+ * (Even if the trigger matched, nothing would be done anyway).
+ */
+ if ((entry->mteTriggerTest & MTE_TRIGGER_EXISTENCE) &&
+ (entry->mteTExEvent[0] != '\0' )) {
+ /*
+ * If we don't have a record of previous results,
+ * this must be the first time through, so consider
+ * the mteTriggerExistenceStartup tests.
+ */
+ if ( !entry->old_results ) {
+ /*
+ * With the 'present(0)' test, the trigger should fire
+ * for each value in the varbind list returned
+ * (whether the monitored value is wildcarded or not).
+ */
+ if (entry->mteTExTest & entry->mteTExStartup & MTE_EXIST_PRESENT) {
+ for (vp1 = var; vp1; vp1=vp1->next_variable) {
+ DEBUGMSGTL(( "disman:event:trigger:fire",
+ "Firing initial existence test: "));
+ DEBUGMSGOID(("disman:event:trigger:fire",
+ vp1->name, vp1->name_length));
+ DEBUGMSG(( "disman:event:trigger:fire",
+ " (present)\n"));;
+ entry->mteTriggerXOwner = entry->mteTExObjOwner;
+ entry->mteTriggerXObjects = entry->mteTExObjects;
+ entry->mteTriggerFired = vp1;
+ n = entry->mteTriggerValueID_len;
+ mteEvent_fire(entry->mteTExEvOwner, entry->mteTExEvent,
+ entry, vp1->name+n, vp1->name_length-n);
+ }
+ }
+ /*
+ * An initial 'absent(1)' test only makes sense when
+ * monitoring a non-wildcarded OID (how would we know
+ * which rows of the table "ought" to exist, but don't?)
+ */
+ if (entry->mteTExTest & entry->mteTExStartup & MTE_EXIST_ABSENT) {
+ if (!(entry->flags & MTE_TRIGGER_FLAG_VWILD) &&
+ var->type == ASN_NULL ) {
+ DEBUGMSGTL(( "disman:event:trigger:fire",
+ "Firing initial existence test: "));
+ DEBUGMSGOID(("disman:event:trigger:fire",
+ var->name, var->name_length));
+ DEBUGMSG(( "disman:event:trigger:fire",
+ " (absent)\n"));;
+ entry->mteTriggerXOwner = entry->mteTExObjOwner;
+ entry->mteTriggerXObjects = entry->mteTExObjects;
+ /*
+ * It's unclear what value the 'mteHotValue' payload
+ * should take when a monitored instance does not
+ * exist on startup. The only sensible option is
+ * to report a NULL value, but this clashes with
+ * the syntax of the mteHotValue MIB object.
+ */
+ entry->mteTriggerFired = var;
+ n = entry->mteTriggerValueID_len;
+ mteEvent_fire(entry->mteTExEvOwner, entry->mteTExEvent,
+ entry, var->name+n, var->name_length-n);
+ }
+ }
+ } /* !old_results */
+ /*
+ * Otherwise, compare the current set of results with
+ * the previous ones, looking for changes. We can
+ * assume that the two lists match (see above).
+ */
+ else {
+ for (vp1 = var, vp2 = entry->old_results;
+ vp1;
+ vp1=vp1->next_variable, vp2=vp2->next_variable) {
+
+ /* Use this field to indicate that the trigger should fire */
+ entry->mteTriggerFired = NULL;
+ reason = NULL;
+
+ if ((entry->mteTExTest & MTE_EXIST_PRESENT) &&
+ (vp1->type != ASN_NULL) &&
+ (vp2->type == ASN_NULL)) {
+ /* A new instance has appeared */
+ entry->mteTriggerFired = vp1;
+ reason = "(present)";
+
+ } else if ((entry->mteTExTest & MTE_EXIST_ABSENT) &&
+ (vp1->type == ASN_NULL) &&
+ (vp2->type != ASN_NULL)) {
+
+ /*
+ * A previous instance has disappeared.
+ *
+ * It's unclear what value the 'mteHotValue' payload
+ * should take when this happens - the previous
+ * value (vp2), or a NULL value (vp1) ?
+ * NULL makes more sense logically, but clashes
+ * with the syntax of the mteHotValue MIB object.
+ */
+ entry->mteTriggerFired = vp2;
+ reason = "(absent)";
+
+ } else if ((entry->mteTExTest & MTE_EXIST_CHANGED) &&
+ ((vp1->val_len != vp2->val_len) ||
+ (memcmp( vp1->val.string, vp2->val.string,
+ vp1->val_len) != 0 ))) {
+ /*
+ * This comparison detects changes in *any* type
+ * of value, numeric or string (or even OID).
+ *
+ * Unfortunately, the default 'mteTriggerFired'
+ * notification payload can't report non-numeric
+ * changes properly (see syntax of 'mteHotValue')
+ */
+ entry->mteTriggerFired = vp1;
+ reason = "(changed)";
+ }
+ if ( entry->mteTriggerFired ) {
+ /*
+ * One of the above tests has matched,
+ * so fire the trigger.
+ */
+ DEBUGMSGTL(( "disman:event:trigger:fire",
+ "Firing existence test: "));
+ DEBUGMSGOID(("disman:event:trigger:fire",
+ vp1->name, vp1->name_length));
+ DEBUGMSG(( "disman:event:trigger:fire",
+ " %s\n", reason));;
+ entry->mteTriggerXOwner = entry->mteTExObjOwner;
+ entry->mteTriggerXObjects = entry->mteTExObjects;
+ n = entry->mteTriggerValueID_len;
+ mteEvent_fire(entry->mteTExEvOwner, entry->mteTExEvent,
+ entry, vp1->name+n, vp1->name_length-n);
+ }
+ }
+ } /* !old_results - end of else block */
+ } /* MTE_TRIGGER_EXISTENCE */
+
+
+ if (( entry->mteTriggerTest & MTE_TRIGGER_BOOLEAN ) ||
+ ( entry->mteTriggerTest & MTE_TRIGGER_THRESHOLD )) {
+ /*
+ * Although Existence tests can work with any syntax values,
+ * Boolean and Threshold tests are integer-only. Ensure that
+ * the returned value(s) are appropriate.
+ *
+ * Note that we only need to check the first value, since all
+ * instances of a given object should have the same syntax.
+ */
+ switch (var->type) {
+ case ASN_INTEGER:
+ case ASN_COUNTER:
+ case ASN_GAUGE:
+ case ASN_TIMETICKS:
+ case ASN_UINTEGER:
+ case ASN_COUNTER64:
+#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
+ case ASN_OPAQUE_COUNTER64:
+ case ASN_OPAQUE_U64:
+ case ASN_OPAQUE_I64:
+#endif
+ /* OK */
+ break;
+ default:
+ /*
+ * Other syntax values can't be used for Boolean/Theshold
+ * tests. Report this as an error, and then rotate the
+ * results ready for the next run, (which will presumably
+ * also detect this as an error once again!)
+ */
+ DEBUGMSGTL(( "disman:event:trigger:fire",
+ "Returned non-integer result(s): "));
+ DEBUGMSGOID(("disman:event:trigger:fire",
+ var->name, var->name_length));
+ DEBUGMSG(( "disman:event:trigger:fire",
+ " (boolean/threshold) %d\n", var->type));;
+ snmp_free_varbind( entry->old_results );
+ entry->old_results = var;
+ return;
+ }
+
+
+ /*
+ * Retrieve the discontinuity markers for delta-valued samples.
+ * (including sysUpTime.0 if not specified explicitly).
+ */
+ if ( entry->flags & MTE_TRIGGER_FLAG_DELTA ) {
+ /*
+ * We'll need sysUpTime.0 regardless...
+ */
+ DEBUGMSGTL(("disman:event:delta", "retrieve sysUpTime.0\n"));
+ memset( &sysUT_var, 0, sizeof( netsnmp_variable_list ));
+ snmp_set_var_objid( &sysUT_var, _sysUpTime_instance,
+ _sysUpTime_inst_len );
+ netsnmp_query_get( &sysUT_var, entry->session );
+
+ if (!(entry->flags & MTE_TRIGGER_FLAG_SYSUPT)) {
+ /*
+ * ... but only retrieve the configured discontinuity
+ * marker(s) if they refer to something different.
+ */
+ DEBUGMSGTL(( "disman:event:delta",
+ "retrieve discontinuity marker(s): "));
+ DEBUGMSGOID(("disman:event:delta", entry->mteDeltaDiscontID,
+ entry->mteDeltaDiscontID_len ));
+ DEBUGMSG(( "disman:event:delta", " %s\n",
+ (entry->flags & MTE_TRIGGER_FLAG_DWILD ? " (wild)" : "")));
+
+ dvar = (netsnmp_variable_list *)
+ SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ if (!dvar) {
+ _mteTrigger_failure(
+ "failed to create mteTrigger delta query varbind");
+ return;
+ }
+ snmp_set_var_objid( dvar, entry->mteDeltaDiscontID,
+ entry->mteDeltaDiscontID_len );
+ if ( entry->flags & MTE_TRIGGER_FLAG_DWILD ) {
+ n = netsnmp_query_walk( dvar, entry->session );
+ } else {
+ n = netsnmp_query_get( dvar, entry->session );
+ }
+ if ( n != SNMP_ERR_NOERROR ) {
+ _mteTrigger_failure( "failed to run mteTrigger delta query" );
+ snmp_free_varbind( dvar );
+ return;
+ }
+ }
+
+ /*
+ * We can't calculate delta values the first time through,
+ * so there's no point in evaluating the remaining tests.
+ *
+ * Save the results (and discontinuity markers),
+ * ready for the next run.
+ */
+ if ( !entry->old_results ) {
+ entry->old_results = var;
+ entry->old_deltaDs = dvar;
+ entry->sysUpTime = *sysUT_var.val.integer;
+ return;
+ }
+ /*
+ * If the sysUpTime marker has been reset (or strictly,
+ * has advanced by less than the monitor frequency),
+ * there's no point in trying the remaining tests.
+ */
+
+ if (*sysUT_var.val.integer < entry->sysUpTime) {
+ DEBUGMSGTL(( "disman:event:delta",
+ "single discontinuity: (sysUT)\n"));
+ snmp_free_varbind( entry->old_results );
+ snmp_free_varbind( entry->old_deltaDs );
+ entry->old_results = var;
+ entry->old_deltaDs = dvar;
+ entry->sysUpTime = *sysUT_var.val.integer;
+ return;
+ }
+ /*
+ * Similarly if a separate (non-wildcarded) discontinuity
+ * marker has changed, then there's no
+ * point in trying to evaluate these tests either.
+ */
+ if (!(entry->flags & MTE_TRIGGER_FLAG_DWILD) &&
+ !(entry->flags & MTE_TRIGGER_FLAG_SYSUPT) &&
+ (!entry->old_deltaDs ||
+ (entry->old_deltaDs->val.integer != dvar->val.integer))) {
+ DEBUGMSGTL(( "disman:event:delta", "single discontinuity: ("));
+ DEBUGMSGOID(( "disman:event:delta", entry->mteDeltaDiscontID,
+ entry->mteDeltaDiscontID_len));
+ DEBUGMSG(( "disman:event:delta", ")\n"));
+ snmp_free_varbind( entry->old_results );
+ snmp_free_varbind( entry->old_deltaDs );
+ entry->old_results = var;
+ entry->old_deltaDs = dvar;
+ entry->sysUpTime = *sysUT_var.val.integer;
+ return;
+ }
+
+ /*
+ * Ensure that the list of (wildcarded) discontinuity
+ * markers matches the list of monitored values
+ * (inserting/removing discontinuity varbinds as needed)
+ *
+ * XXX - An alternative approach would be to use the list
+ * of monitored values (instance subidentifiers) to build
+ * the exact list of delta markers to retrieve earlier.
+ */
+ if (entry->flags & MTE_TRIGGER_FLAG_DWILD) {
+ vp1 = var;
+ vp2 = dvar;
+ vp2_prev = NULL;
+ n = entry->mteTriggerValueID_len;
+ n2 = entry->mteDeltaDiscontID_len;
+ while (vp1) {
+ /*
+ * For each monitored instance, check whether
+ * there's a matching discontinuity entry.
+ */
+ cmp = snmp_oid_compare(vp1->name+n, vp1->name_length-n,
+ vp2->name+n2, vp2->name_length-n2 );
+ if ( cmp < 0 ) {
+ /*
+ * If a discontinuity entry is missing,
+ * insert a (dummy) varbind.
+ * The corresponding delta calculation will
+ * fail, but this simplifies the later code.
+ */
+ vtmp = (netsnmp_variable_list *)
+ SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ if (!vtmp) {
+ _mteTrigger_failure(
+ "failed to create mteTrigger discontinuity varbind");
+ return;
+ }
+ snmp_set_var_objid(vtmp, entry->mteDeltaDiscontID,
+ entry->mteDeltaDiscontID_len);
+ /* XXX - append instance subids */
+ vtmp->next_variable = vp2;
+ vp2_prev->next_variable = vtmp;
+ vp2_prev = vtmp;
+ vp1 = vp1->next_variable;
+ } else if ( cmp == 0 ) {
+ /*
+ * Matching discontinuity entry - all OK.
+ */
+ vp2_prev = vp2;
+ vp2 = vp2->next_variable;
+ vp1 = vp1->next_variable;
+ } else {
+ /*
+ * Remove unneeded discontinuity entry
+ */
+ vtmp = vp2;
+ vp2_prev->next_variable = vp2->next_variable;
+ vp2 = vp2->next_variable;
+ vtmp->next_variable = NULL;
+ snmp_free_varbind( vtmp );
+ }
+ }
+ /*
+ * XXX - Now need to ensure that the old list of
+ * delta discontinuity markers matches as well.
+ */
+ }
+ } /* delta samples */
+ } /* Boolean/Threshold test checks */
+
+
+
+ /*
+ * Only run the Boolean tests if there's an event to be triggered
+ */
+ if ((entry->mteTriggerTest & MTE_TRIGGER_BOOLEAN) &&
+ (entry->mteTBoolEvent[0] != '\0' )) {
+
+ if (entry->flags & MTE_TRIGGER_FLAG_DELTA) {
+ vp2 = entry->old_results;
+ if (entry->flags & MTE_TRIGGER_FLAG_DWILD) {
+ dv1 = dvar;
+ dv2 = entry->old_deltaDs;
+ }
+ }
+ for ( vp1 = var; vp1; vp1=vp1->next_variable ) {
+ /*
+ * Determine the value to be monitored...
+ */
+ if ( !vp1->val.integer ) { /* No value */
+ if ( vp2 )
+ vp2 = vp2->next_variable;
+ continue;
+ }
+ if (entry->flags & MTE_TRIGGER_FLAG_DELTA) {
+ if (entry->flags & MTE_TRIGGER_FLAG_DWILD) {
+ /*
+ * We've already checked any non-wildcarded
+ * discontinuity markers (inc. sysUpTime.0).
+ * Validate this particular sample against
+ * the relevant wildcarded marker...
+ */
+ if ((dv1->type == ASN_NULL) ||
+ (dv1->type != dv2->type) ||
+ (*dv1->val.integer != *dv2->val.integer)) {
+ /*
+ * Bogus or changed discontinuity marker.
+ * Need to skip this sample.
+ */
+ DEBUGMSGTL(( "disman:event:delta", "discontinuity occurred: "));
+ DEBUGMSGOID(("disman:event:delta", vp1->name,
+ vp1->name_length ));
+ DEBUGMSG(( "disman:event:delta", " \n" ));
+ vp2 = vp2->next_variable;
+ continue;
+ }
+ }
+ /*
+ * ... and check there is a previous sample to calculate
+ * the delta value against (regardless of whether the
+ * discontinuity marker was wildcarded or not).
+ */
+ if (vp2->type == ASN_NULL) {
+ DEBUGMSGTL(( "disman:event:delta", "missing sample: "));
+ DEBUGMSGOID(("disman:event:delta", vp1->name,
+ vp1->name_length ));
+ DEBUGMSG(( "disman:event:delta", " \n" ));
+ vp2 = vp2->next_variable;
+ continue;
+ }
+ value = (*vp1->val.integer - *vp2->val.integer);
+ DEBUGMSGTL(( "disman:event:delta", "delta sample: "));
+ DEBUGMSGOID(("disman:event:delta", vp1->name,
+ vp1->name_length ));
+ DEBUGMSG(( "disman:event:delta", " (%d - %d) = %d\n",
+ *vp1->val.integer, *vp2->val.integer, value));
+ vp2 = vp2->next_variable;
+ } else {
+ value = *vp1->val.integer;
+ }
+
+ /*
+ * ... evaluate the comparison ...
+ */
+ switch (entry->mteTBoolComparison) {
+ case MTE_BOOL_UNEQUAL:
+ cmp = ( value != entry->mteTBoolValue );
+ break;
+ case MTE_BOOL_EQUAL:
+ cmp = ( value == entry->mteTBoolValue );
+ break;
+ case MTE_BOOL_LESS:
+ cmp = ( value < entry->mteTBoolValue );
+ break;
+ case MTE_BOOL_LESSEQUAL:
+ cmp = ( value <= entry->mteTBoolValue );
+ break;
+ case MTE_BOOL_GREATER:
+ cmp = ( value > entry->mteTBoolValue );
+ break;
+ case MTE_BOOL_GREATEREQUAL:
+ cmp = ( value >= entry->mteTBoolValue );
+ break;
+ }
+ DEBUGMSGTL(( "disman:event:delta", "Bool comparison: (%d %s %d) %d\n",
+ value, _ops[entry->mteTBoolComparison],
+ entry->mteTBoolValue, cmp));
+
+ /*
+ * ... and decide whether to trigger the event.
+ * (using the 'index' field of the varbind structure
+ * to remember whether the trigger has already fired)
+ */
+ if ( cmp ) {
+ if (vp1->index & MTE_ARMED_BOOLEAN ) {
+ vp1->index &= ~MTE_ARMED_BOOLEAN;
+ /*
+ * NB: Clear the trigger armed flag even if the
+ * (starting) event dosn't actually fire.
+ * Otherwise initially true (but suppressed)
+ * triggers will fire on the *second* probe.
+ */
+ if ( entry->old_results ||
+ (entry->flags & MTE_TRIGGER_FLAG_BSTART)) {
+ DEBUGMSGTL(( "disman:event:trigger:fire",
+ "Firing boolean test: "));
+ DEBUGMSGOID(("disman:event:trigger:fire",
+ vp1->name, vp1->name_length));
+ DEBUGMSG(( "disman:event:trigger:fire", "%s\n",
+ (entry->old_results ? "" : " (startup)")));
+ entry->mteTriggerXOwner = entry->mteTBoolObjOwner;
+ entry->mteTriggerXObjects = entry->mteTBoolObjects;
+ /*
+ * XXX - when firing a delta-based trigger, should
+ * 'mteHotValue' report the actual value sampled
+ * (as here), or the delta that triggered the event ?
+ */
+ entry->mteTriggerFired = vp1;
+ n = entry->mteTriggerValueID_len;
+ mteEvent_fire(entry->mteTBoolEvOwner, entry->mteTBoolEvent,
+ entry, vp1->name+n, vp1->name_length-n);
+ }
+ }
+ } else {
+ vp1->index |= MTE_ARMED_BOOLEAN;
+ }
+ }
+ }
+
+
+ /*
+ * Only run the basic threshold tests if there's an event to
+ * be triggered. (Either rising or falling will do)
+ */
+ if (( entry->mteTriggerTest & MTE_TRIGGER_THRESHOLD ) &&
+ ((entry->mteTThRiseEvent[0] != '\0' ) ||
+ (entry->mteTThFallEvent[0] != '\0' ))) {
+
+ /*
+ * The same delta-sample validation from Boolean
+ * tests also applies here too.
+ */
+ if (entry->flags & MTE_TRIGGER_FLAG_DELTA) {
+ vp2 = entry->old_results;
+ if (entry->flags & MTE_TRIGGER_FLAG_DWILD) {
+ dv1 = dvar;
+ dv2 = entry->old_deltaDs;
+ }
+ }
+ for ( vp1 = var; vp1; vp1=vp1->next_variable ) {
+ /*
+ * Determine the value to be monitored...
+ */
+ if ( !vp1->val.integer ) { /* No value */
+ if ( vp2 )
+ vp2 = vp2->next_variable;
+ continue;
+ }
+ if (entry->flags & MTE_TRIGGER_FLAG_DELTA) {
+ if (entry->flags & MTE_TRIGGER_FLAG_DWILD) {
+ /*
+ * We've already checked any non-wildcarded
+ * discontinuity markers (inc. sysUpTime.0).
+ * Validate this particular sample against
+ * the relevant wildcarded marker...
+ */
+ if ((dv1->type == ASN_NULL) ||
+ (dv1->type != dv2->type) ||
+ (*dv1->val.integer != *dv2->val.integer)) {
+ /*
+ * Bogus or changed discontinuity marker.
+ * Need to skip this sample.
+ */
+ vp2 = vp2->next_variable;
+ continue;
+ }
+ }
+ /*
+ * ... and check there is a previous sample to calculate
+ * the delta value against (regardless of whether the
+ * discontinuity marker was wildcarded or not).
+ */
+ if (vp2->type == ASN_NULL) {
+ vp2 = vp2->next_variable;
+ continue;
+ }
+ value = (*vp1->val.integer - *vp2->val.integer);
+ vp2 = vp2->next_variable;
+ } else {
+ value = *vp1->val.integer;
+ }
+
+ /*
+ * ... evaluate the single-value comparisons,
+ * and decide whether to trigger the event.
+ */
+ cmp = vp1->index; /* working copy of 'armed' flags */
+ if ( value >= entry->mteTThRiseValue ) {
+ if (cmp & MTE_ARMED_TH_RISE ) {
+ cmp &= ~MTE_ARMED_TH_RISE;
+ cmp |= MTE_ARMED_TH_FALL;
+ /*
+ * NB: Clear the trigger armed flag even if the
+ * (starting) event dosn't actually fire.
+ * Otherwise initially true (but suppressed)
+ * triggers will fire on the *second* probe.
+ * Similarly for falling thresholds (see below).
+ */
+ if ( entry->old_results ||
+ (entry->mteTThStartup & MTE_THRESH_START_RISE)) {
+ DEBUGMSGTL(( "disman:event:trigger:fire",
+ "Firing rising threshold test: "));
+ DEBUGMSGOID(("disman:event:trigger:fire",
+ vp1->name, vp1->name_length));
+ DEBUGMSG(( "disman:event:trigger:fire", "%s\n",
+ (entry->old_results ? "" : " (startup)")));
+ /*
+ * If no riseEvent is configured, we need still to
+ * set the armed flags appropriately, but there's
+ * no point in trying to fire the (missing) event.
+ */
+ if (entry->mteTThRiseEvent[0] != '\0' ) {
+ entry->mteTriggerXOwner = entry->mteTThObjOwner;
+ entry->mteTriggerXObjects = entry->mteTThObjects;
+ entry->mteTriggerFired = vp1;
+ n = entry->mteTriggerValueID_len;
+ mteEvent_fire(entry->mteTThRiseOwner,
+ entry->mteTThRiseEvent,
+ entry, vp1->name+n, vp1->name_length-n);
+ }
+ }
+ }
+ }
+
+ if ( value <= entry->mteTThFallValue ) {
+ if (cmp & MTE_ARMED_TH_FALL ) {
+ cmp &= ~MTE_ARMED_TH_FALL;
+ cmp |= MTE_ARMED_TH_RISE;
+ /* Clear the trigger armed flag (see above) */
+ if ( entry->old_results ||
+ (entry->mteTThStartup & MTE_THRESH_START_FALL)) {
+ DEBUGMSGTL(( "disman:event:trigger:fire",
+ "Firing falling threshold test: "));
+ DEBUGMSGOID(("disman:event:trigger:fire",
+ vp1->name, vp1->name_length));
+ DEBUGMSG(( "disman:event:trigger:fire", "%s\n",
+ (entry->old_results ? "" : " (startup)")));
+ /*
+ * Similarly, if no fallEvent is configured,
+ * there's no point in trying to fire it either.
+ */
+ if (entry->mteTThRiseEvent[0] != '\0' ) {
+ entry->mteTriggerXOwner = entry->mteTThObjOwner;
+ entry->mteTriggerXObjects = entry->mteTThObjects;
+ entry->mteTriggerFired = vp1;
+ n = entry->mteTriggerValueID_len;
+ mteEvent_fire(entry->mteTThFallOwner,
+ entry->mteTThFallEvent,
+ entry, vp1->name+n, vp1->name_length-n);
+ }
+ }
+ }
+ }
+ vp1->index = cmp;
+ }
+ }
+
+ /*
+ * The same processing also works for delta-threshold tests (if configured)
+ */
+ if (( entry->mteTriggerTest & MTE_TRIGGER_THRESHOLD ) &&
+ ((entry->mteTThDRiseEvent[0] != '\0' ) ||
+ (entry->mteTThDFallEvent[0] != '\0' ))) {
+
+ /*
+ * Delta-threshold tests can only be used with
+ * absolute valued samples.
+ */
+ vp2 = entry->old_results;
+ if (entry->flags & MTE_TRIGGER_FLAG_DELTA) {
+ DEBUGMSGTL(( "disman:event:trigger",
+ "Delta-threshold on delta-sample\n"));
+ } else if ( vp2 != NULL ) {
+ for ( vp1 = var; vp1; vp1=vp1->next_variable ) {
+ /*
+ * Determine the value to be monitored...
+ * (similar to previous delta-sample processing,
+ * but without the discontinuity marker checks)
+ */
+ if (!vp2) {
+ break; /* Run out of 'old' values */
+ }
+ if (( !vp1->val.integer ) ||
+ (vp2->type == ASN_NULL)) {
+ vp2 = vp2->next_variable;
+ continue;
+ }
+ value = (*vp1->val.integer - *vp2->val.integer);
+ vp2 = vp2->next_variable;
+
+ /*
+ * ... evaluate the single-value comparisons,
+ * and decide whether to trigger the event.
+ */
+ cmp = vp1->index; /* working copy of 'armed' flags */
+ if ( value >= entry->mteTThDRiseValue ) {
+ if (vp1->index & MTE_ARMED_TH_DRISE ) {
+ DEBUGMSGTL(( "disman:event:trigger:fire",
+ "Firing rising delta threshold test: "));
+ DEBUGMSGOID(("disman:event:trigger:fire",
+ vp1->name, vp1->name_length));
+ DEBUGMSG(( "disman:event:trigger:fire", "\n"));
+ cmp &= ~MTE_ARMED_TH_DRISE;
+ cmp |= MTE_ARMED_TH_DFALL;
+ /*
+ * If no riseEvent is configured, we need still to
+ * set the armed flags appropriately, but there's
+ * no point in trying to fire the (missing) event.
+ */
+ if (entry->mteTThDRiseEvent[0] != '\0' ) {
+ entry->mteTriggerXOwner = entry->mteTThObjOwner;
+ entry->mteTriggerXObjects = entry->mteTThObjects;
+ entry->mteTriggerFired = vp1;
+ n = entry->mteTriggerValueID_len;
+ mteEvent_fire(entry->mteTThDRiseOwner,
+ entry->mteTThDRiseEvent,
+ entry, vp1->name+n, vp1->name_length-n);
+ }
+ }
+ }
+
+ if ( value <= entry->mteTThDFallValue ) {
+ if (vp1->index & MTE_ARMED_TH_DFALL ) {
+ DEBUGMSGTL(( "disman:event:trigger:fire",
+ "Firing falling delta threshold test: "));
+ DEBUGMSGOID(("disman:event:trigger:fire",
+ vp1->name, vp1->name_length));
+ DEBUGMSG(( "disman:event:trigger:fire", "\n"));
+ cmp &= ~MTE_ARMED_TH_DFALL;
+ cmp |= MTE_ARMED_TH_DRISE;
+ /*
+ * Similarly, if no fallEvent is configured,
+ * there's no point in trying to fire it either.
+ */
+ if (entry->mteTThDRiseEvent[0] != '\0' ) {
+ entry->mteTriggerXOwner = entry->mteTThObjOwner;
+ entry->mteTriggerXObjects = entry->mteTThObjects;
+ entry->mteTriggerFired = vp1;
+ n = entry->mteTriggerValueID_len;
+ mteEvent_fire(entry->mteTThDFallOwner,
+ entry->mteTThDFallEvent,
+ entry, vp1->name+n, vp1->name_length-n);
+ }
+ }
+ }
+ vp1->index = cmp;
+ }
+ }
+ }
+
+ /*
+ * Finally, rotate the results - ready for the next run.
+ */
+ snmp_free_varbind( entry->old_results );
+ entry->old_results = var;
+ if ( entry->flags & MTE_TRIGGER_FLAG_DELTA ) {
+ snmp_free_varbind( entry->old_deltaDs );
+ entry->old_deltaDs = dvar;
+ entry->sysUpTime = *sysUT_var.val.integer;
+ }
+}
+
+void
+mteTrigger_enable( struct mteTrigger *entry )
+{
+ if (!entry)
+ return;
+
+ if (entry->alarm) {
+ /* XXX - or explicitly call mteTrigger_disable ?? */
+ snmp_alarm_unregister( entry->alarm );
+ entry->alarm = 0;
+ }
+
+ if (entry->mteTriggerFrequency) {
+ /*
+ * register once to run ASAP, and another to run
+ * at the trigger frequency
+ */
+ snmp_alarm_register(0, 0, mteTrigger_run, entry );
+ entry->alarm = snmp_alarm_register(
+ entry->mteTriggerFrequency, SA_REPEAT,
+ mteTrigger_run, entry );
+ }
+}
+
+void
+mteTrigger_disable( struct mteTrigger *entry )
+{
+ if (!entry)
+ return;
+
+ if (entry->alarm) {
+ snmp_alarm_unregister( entry->alarm );
+ entry->alarm = 0;
+ /* XXX - perhaps release any previous results */
+ }
+}
+
+long _mteTrigger_MaxCount = 0;
+long _mteTrigger_countEntries(void)
+{
+ struct mteTrigger *entry;
+ netsnmp_tdata_row *row;
+ long count = 0;
+
+ for (row = netsnmp_tdata_row_first(trigger_table_data);
+ row;
+ row = netsnmp_tdata_row_next(trigger_table_data, row)) {
+ entry = (struct mteTrigger *)row->data;
+ count += entry->count;
+ }
+
+ return count;
+}
+
+long mteTrigger_getNumEntries(int max)
+{
+ long count;
+ /* XXX - implement some form of caching ??? */
+ count = _mteTrigger_countEntries();
+ if ( count > _mteTrigger_MaxCount )
+ _mteTrigger_MaxCount = count;
+
+ return ( max ? _mteTrigger_MaxCount : count);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTrigger.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTrigger.h
new file mode 100644
index 0000000000..aaf949a289
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTrigger.h
@@ -0,0 +1,199 @@
+#ifndef MTETRIGGER_H
+#define MTETRIGGER_H
+
+extern oid _sysUpTime_instance[];
+extern size_t _sysUpTime_inst_len;
+ /*
+ * Flags relating to the mteTriggerTable and related tables
+ */
+#define MTE_TRIGGER_FLAG_DELTA 0x01 /* for mteTriggerSampleType */
+#define MTE_TRIGGER_FLAG_VWILD 0x02 /* for mteTriggerValueIDWildcard */
+#define MTE_TRIGGER_FLAG_CWILD 0x04 /* for mteTriggerContextWildcard */
+#define MTE_TRIGGER_FLAG_DWILD 0x08 /* for mteTriggerDeltaDIDWildcard */
+#define MTE_TRIGGER_FLAG_SYSUPT 0x10 /* using default mteTriggerDeltaID */
+
+#define MTE_TRIGGER_FLAG_BSTART 0x20 /* for mteTriggerBooleanStartup */
+
+#define MTE_TRIGGER_FLAG_ENABLED 0x0100 /* for mteTriggerEnabled */
+#define MTE_TRIGGER_FLAG_ACTIVE 0x0200 /* for mteTriggerEntryStatus */
+#define MTE_TRIGGER_FLAG_FIXED 0x0400 /* for snmpd.conf persistence */
+#define MTE_TRIGGER_FLAG_VALID 0x0800 /* for row creation/undo */
+
+
+ /*
+ * Values for the mteTriggerTest field
+ */
+#define MTE_TRIGGER_EXISTENCE 0x80 /* mteTriggerTest values */
+#define MTE_TRIGGER_BOOLEAN 0x40
+#define MTE_TRIGGER_THRESHOLD 0x20
+
+ /*
+ * Values for the mteTriggerSampleType field
+ */
+#define MTE_SAMPLE_ABSOLUTE 1 /* mteTriggerSampleType values */
+#define MTE_SAMPLE_DELTA 2
+
+ /*
+ * Values for the mteTriggerDeltaDiscontinuityIDType field
+ */
+#define MTE_DELTAD_TTICKS 1
+#define MTE_DELTAD_TSTAMP 2
+#define MTE_DELTAD_DATETIME 3
+
+ /*
+ * Values for the mteTriggerExistenceTest
+ * and mteTriggerExistenceStartup fields
+ */
+#define MTE_EXIST_PRESENT 0x80
+#define MTE_EXIST_ABSENT 0x40
+#define MTE_EXIST_CHANGED 0x20
+
+ /*
+ * Values for the mteTriggerBooleanComparison field
+ */
+#define MTE_BOOL_UNEQUAL 1
+#define MTE_BOOL_EQUAL 2
+#define MTE_BOOL_LESS 3
+#define MTE_BOOL_LESSEQUAL 4
+#define MTE_BOOL_GREATER 5
+#define MTE_BOOL_GREATEREQUAL 6
+
+ /*
+ * Values for the mteTriggerThresholdStartup field
+ */
+#define MTE_THRESH_START_RISE 1
+#define MTE_THRESH_START_FALL 2
+#define MTE_THRESH_START_RISEFALL 3
+ /* Note that RISE and FALL values can be used for bit-wise
+ tests as well, since RISEFALL = RISE | FALL */
+
+
+ /*
+ * Flags to indicate which triggers are armed, and ready to fire.
+ */
+#define MTE_ARMED_TH_RISE 0x01
+#define MTE_ARMED_TH_FALL 0x02
+#define MTE_ARMED_TH_DRISE 0x04
+#define MTE_ARMED_TH_DFALL 0x08
+#define MTE_ARMED_BOOLEAN 0x10
+#define MTE_ARMED_ALL 0x1f
+
+ /*
+ * All Event-MIB OCTET STRING objects are either short (32-character)
+ * tags, or SnmpAdminString/similar values (i.e. 255 characters)
+ */
+#define MTE_STR1_LEN 32
+#define MTE_STR2_LEN 255
+
+/*
+ * Data structure for a (combined) trigger row. Covers delta samples,
+ * and all types (Existence, Boolean and Threshold) of trigger.
+ */
+struct mteTrigger {
+ /*
+ * Index values
+ */
+ char mteOwner[MTE_STR1_LEN+1];
+ char mteTName[MTE_STR1_LEN+1];
+
+ /*
+ * Column values for the main mteTriggerTable
+ */
+ char mteTriggerComment[MTE_STR2_LEN+1];
+ char mteTriggerTest;
+ oid mteTriggerValueID[MAX_OID_LEN];
+ size_t mteTriggerValueID_len;
+ char mteTriggerTarget[ MTE_STR2_LEN+1];
+ char mteTriggerContext[MTE_STR2_LEN+1];
+ u_long mteTriggerFrequency;
+ char mteTriggerOOwner[ MTE_STR1_LEN+1];
+ char mteTriggerObjects[MTE_STR1_LEN+1];
+
+ netsnmp_session *session;
+ long flags;
+
+ /*
+ * Column values for the mteTriggerDeltaTable
+ */
+ oid mteDeltaDiscontID[MAX_OID_LEN];
+ size_t mteDeltaDiscontID_len;
+ long mteDeltaDiscontIDType;
+
+ /*
+ * Column values for Existence tests (mteTriggerExistenceTable)
+ */
+ char mteTExTest;
+ char mteTExStartup;
+ char mteTExObjOwner[MTE_STR1_LEN+1];
+ char mteTExObjects[ MTE_STR1_LEN+1];
+ char mteTExEvOwner[ MTE_STR1_LEN+1];
+ char mteTExEvent[ MTE_STR1_LEN+1];
+
+ /*
+ * Column values for Boolean tests (mteTriggerBooleanTable)
+ */
+ long mteTBoolComparison;
+ long mteTBoolValue;
+ char mteTBoolObjOwner[MTE_STR1_LEN+1];
+ char mteTBoolObjects[ MTE_STR1_LEN+1];
+ char mteTBoolEvOwner[ MTE_STR1_LEN+1];
+ char mteTBoolEvent[ MTE_STR1_LEN+1];
+
+ /*
+ * Column values for Threshold tests (mteTriggerThresholdTable)
+ */
+ long mteTThStartup;
+ long mteTThRiseValue;
+ long mteTThFallValue;
+ long mteTThDRiseValue;
+ long mteTThDFallValue;
+ char mteTThObjOwner[ MTE_STR1_LEN+1];
+ char mteTThObjects[ MTE_STR1_LEN+1];
+ char mteTThRiseOwner[ MTE_STR1_LEN+1];
+ char mteTThRiseEvent[ MTE_STR1_LEN+1];
+ char mteTThFallOwner[ MTE_STR1_LEN+1];
+ char mteTThFallEvent[ MTE_STR1_LEN+1];
+ char mteTThDRiseOwner[MTE_STR1_LEN+1];
+ char mteTThDRiseEvent[MTE_STR1_LEN+1];
+ char mteTThDFallOwner[MTE_STR1_LEN+1];
+ char mteTThDFallEvent[MTE_STR1_LEN+1];
+
+ /*
+ * Additional fields for operation of the Trigger tables:
+ * monitoring...
+ */
+ unsigned int alarm;
+ long sysUpTime;
+ netsnmp_variable_list *old_results;
+ netsnmp_variable_list *old_deltaDs;
+
+ /*
+ * ... stats...
+ */
+ long count;
+
+ /*
+ * ... and firing.
+ */
+ char *mteTriggerXOwner;
+ char *mteTriggerXObjects;
+ netsnmp_variable_list *mteTriggerFired;
+};
+
+ /*
+ * Container structure for the (combined) mteTrigger*Tables,
+ * and routine to create this.
+ */
+extern netsnmp_tdata *trigger_table_data;
+extern void init_trigger_table_data(void);
+
+void init_mteTrigger(void);
+void mteTrigger_removeEntry(netsnmp_tdata_row *row);
+netsnmp_tdata_row *mteTrigger_createEntry(char *mteOwner,
+ char *mteTriggerName, int fixed);
+void mteTrigger_enable( struct mteTrigger *entry );
+void mteTrigger_disable( struct mteTrigger *entry );
+
+long mteTrigger_getNumEntries(int max);
+
+#endif /* MTETRIGGER_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerBooleanTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerBooleanTable.c
new file mode 100644
index 0000000000..52efcac8bd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerBooleanTable.c
@@ -0,0 +1,276 @@
+/*
+ * DisMan Event MIB:
+ * Implementation of the mteTriggerBooleanTable MIB interface
+ * See 'mteTrigger.c' for active behaviour of this table.
+ *
+ * (based on mib2c.table_data.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/event/mteTrigger.h"
+#include "disman/event/mteTriggerBooleanTable.h"
+
+
+/** Initializes the mteTriggerBooleanTable module */
+void
+init_mteTriggerBooleanTable(void)
+{
+ static oid mteTBoolTable_oid[] = { 1, 3, 6, 1, 2, 1, 88, 1, 2, 5 };
+ size_t mteTBoolTable_oid_len = OID_LENGTH(mteTBoolTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ /*
+ * Ensure the (combined) table container is available...
+ */
+ init_trigger_table_data();
+
+ /*
+ * ... then set up the MIB interface to the mteTriggerBooleanTable slice
+ */
+ reg = netsnmp_create_handler_registration("mteTriggerBooleanTable",
+ mteTriggerBooleanTable_handler,
+ mteTBoolTable_oid,
+ mteTBoolTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ ASN_OCTET_STR, /* index: mteOwner */
+ /* index: mteTriggerName */
+ ASN_PRIV_IMPLIED_OCTET_STR,
+ 0);
+
+ table_info->min_column = COLUMN_MTETRIGGERBOOLEANCOMPARISON;
+ table_info->max_column = COLUMN_MTETRIGGERBOOLEANEVENT;
+
+ /* Register this using the (common) trigger_table_data container */
+ netsnmp_tdata_register(reg, trigger_table_data, table_info);
+ DEBUGMSGTL(("disman:event:init", "Trigger Bool Table\n"));
+}
+
+
+/** handles requests for the mteTriggerBooleanTable table */
+int
+mteTriggerBooleanTable_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 *tinfo;
+ struct mteTrigger *entry;
+ int ret;
+
+ DEBUGMSGTL(("disman:event:mib", "Boolean Table handler (%d)\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ /*
+ * The mteTriggerBooleanTable should only contains entries for
+ * rows where the mteTriggerTest 'boolean(1)' bit is set.
+ * So skip entries where this isn't the case.
+ */
+ if (!entry || !(entry->mteTriggerTest & MTE_TRIGGER_BOOLEAN ))
+ continue;
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERBOOLEANCOMPARISON:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->mteTBoolComparison);
+ break;
+ case COLUMN_MTETRIGGERBOOLEANVALUE:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->mteTBoolValue);
+ break;
+ case COLUMN_MTETRIGGERBOOLEANSTARTUP:
+ ret = (entry->flags & MTE_TRIGGER_FLAG_BSTART ) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_MTETRIGGERBOOLEANOBJECTSOWNER:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTBoolObjOwner,
+ strlen(entry->mteTBoolObjOwner));
+ break;
+ case COLUMN_MTETRIGGERBOOLEANOBJECTS:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTBoolObjects,
+ strlen(entry->mteTBoolObjects));
+ break;
+ case COLUMN_MTETRIGGERBOOLEANEVENTOWNER:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTBoolEvOwner,
+ strlen(entry->mteTBoolEvOwner));
+ break;
+ case COLUMN_MTETRIGGERBOOLEANEVENT:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTBoolEvent,
+ strlen(entry->mteTBoolEvent));
+ break;
+ }
+ }
+ break;
+
+ /*
+ * Write-support
+ */
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ /*
+ * Since the mteTriggerBooleanTable only contains entries for
+ * rows where the mteTriggerTest 'boolean(1)' bit is set,
+ * strictly speaking we should reject assignments where
+ * this isn't the case.
+ * But SET requests that include an assignment of the
+ * 'boolean(1)' bit at the same time are valid, so would
+ * need to be accepted. Unfortunately, this assignment
+ * is only applied in the COMMIT pass, so it's difficult
+ * to detect whether this holds or not.
+ *
+ * Let's fudge things for now, by processing assignments
+ * even if the 'boolean(1)' bit isn't set.
+ */
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERBOOLEANCOMPARISON:
+ ret = netsnmp_check_vb_int_range(request->requestvb,
+ MTE_BOOL_UNEQUAL, MTE_BOOL_GREATEREQUAL);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTETRIGGERBOOLEANVALUE:
+ 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_MTETRIGGERBOOLEANSTARTUP:
+ ret = netsnmp_check_vb_truthvalue(request->requestvb);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTETRIGGERBOOLEANOBJECTSOWNER:
+ case COLUMN_MTETRIGGERBOOLEANOBJECTS:
+ case COLUMN_MTETRIGGERBOOLEANEVENTOWNER:
+ case COLUMN_MTETRIGGERBOOLEANEVENT:
+ ret = netsnmp_check_vb_type_and_max_size(
+ request->requestvb, ASN_OCTET_STR, MTE_STR1_LEN);
+ 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;
+ }
+
+ /*
+ * The Event MIB is somewhat ambiguous as to whether the
+ * various trigger table entries can be modified once the
+ * main mteTriggerTable entry has been marked 'active'.
+ * But it's clear from discussion on the DisMan mailing
+ * list is that the intention is not.
+ *
+ * So check for whether this row is already active,
+ * and reject *all* SET requests if it is.
+ */
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ if (entry &&
+ entry->flags & MTE_TRIGGER_FLAG_ACTIVE ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ break;
+
+ case MODE_SET_ACTION:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ if (!entry) {
+ /*
+ * New rows must be created via the RowStatus column
+ * (in the main mteTriggerTable)
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ /* or inconsistentName? */
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * All these assignments are "unfailable", so it's
+ * (reasonably) safe to apply them in the Commit phase
+ */
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERBOOLEANCOMPARISON:
+ entry->mteTBoolComparison = *request->requestvb->val.integer;
+ break;
+ case COLUMN_MTETRIGGERBOOLEANVALUE:
+ entry->mteTBoolValue = *request->requestvb->val.integer;
+ break;
+ case COLUMN_MTETRIGGERBOOLEANSTARTUP:
+ if (*request->requestvb->val.integer == TV_TRUE)
+ entry->flags |= MTE_TRIGGER_FLAG_BSTART;
+ else
+ entry->flags &= ~MTE_TRIGGER_FLAG_BSTART;
+ break;
+ case COLUMN_MTETRIGGERBOOLEANOBJECTSOWNER:
+ memset(entry->mteTBoolObjOwner, 0, sizeof(entry->mteTBoolObjOwner));
+ memcpy(entry->mteTBoolObjOwner, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERBOOLEANOBJECTS:
+ memset(entry->mteTBoolObjects, 0, sizeof(entry->mteTBoolObjects));
+ memcpy(entry->mteTBoolObjects, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERBOOLEANEVENTOWNER:
+ memset(entry->mteTBoolEvOwner, 0, sizeof(entry->mteTBoolEvOwner));
+ memcpy(entry->mteTBoolEvOwner, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERBOOLEANEVENT:
+ memset(entry->mteTBoolEvent, 0, sizeof(entry->mteTBoolEvent));
+ memcpy(entry->mteTBoolEvent, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ }
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerBooleanTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerBooleanTable.h
new file mode 100644
index 0000000000..d2d2dcb238
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerBooleanTable.h
@@ -0,0 +1,24 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.table_data.conf,v 1.8 2005/07/19 14:52:03 dts12 Exp $
+ */
+#ifndef MTETRIGGERBOOLEANTABLE_H
+#define MTETRIGGERBOOLEANTABLE_H
+
+/*
+ * function declarations
+ */
+void init_mteTriggerBooleanTable(void);
+Netsnmp_Node_Handler mteTriggerBooleanTable_handler;
+
+/*
+ * column number definitions for table mteTriggerBooleanTable
+ */
+#define COLUMN_MTETRIGGERBOOLEANCOMPARISON 1
+#define COLUMN_MTETRIGGERBOOLEANVALUE 2
+#define COLUMN_MTETRIGGERBOOLEANSTARTUP 3
+#define COLUMN_MTETRIGGERBOOLEANOBJECTSOWNER 4
+#define COLUMN_MTETRIGGERBOOLEANOBJECTS 5
+#define COLUMN_MTETRIGGERBOOLEANEVENTOWNER 6
+#define COLUMN_MTETRIGGERBOOLEANEVENT 7
+#endif /* MTETRIGGERBOOLEANTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerConf.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerConf.c
new file mode 100644
index 0000000000..c11fbc2d00
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerConf.c
@@ -0,0 +1,1480 @@
+/*
+ * DisMan Event MIB:
+ * Implementation of the trigger table configure handling
+ */
+
+#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/agent/agent_callbacks.h>
+#include "utilities/iquery.h"
+#include "disman/event/mteObjects.h"
+#include "disman/event/mteTrigger.h"
+#include "disman/event/mteTriggerConf.h"
+
+#include <ctype.h>
+
+
+/** Initializes the mteTriggerConf module */
+void
+init_mteTriggerConf(void)
+{
+ init_trigger_table_data();
+
+ /*
+ * Register config handler for user-level (fixed) triggers ...
+ */
+ snmpd_register_config_handler("monitor",
+ parse_mteMonitor, NULL,
+ "triggername [-I] [-i OID | -o OID]* [-e event] expression ");
+ snmpd_register_config_handler("defaultMonitors",
+ parse_default_mteMonitors, NULL, "yes|no");
+ snmpd_register_config_handler("linkUpDownNotifications",
+ parse_linkUpDown_traps, NULL, "yes|no");
+
+ /*
+ * ... for persistent storage of various event table entries ...
+ */
+ snmpd_register_config_handler("_mteTTable",
+ parse_mteTTable, NULL, NULL);
+ snmpd_register_config_handler("_mteTDTable",
+ parse_mteTDTable, NULL, NULL);
+ snmpd_register_config_handler("_mteTExTable",
+ parse_mteTExTable, NULL, NULL);
+ snmpd_register_config_handler("_mteTBlTable",
+ parse_mteTBlTable, NULL, NULL);
+ snmpd_register_config_handler("_mteTThTable",
+ parse_mteTThTable, NULL, NULL);
+
+ /*
+ * ... and backwards compatability with the previous implementation.
+ */
+ snmpd_register_config_handler("mteTriggerTable",
+ parse_mteTriggerTable, NULL, NULL);
+
+ /*
+ * Register to save (non-fixed) entries when the agent shuts down
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_mteTTable, NULL);
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_PRE_UPDATE_CONFIG,
+ clear_mteTTable, NULL);
+}
+
+/* ==============================
+ *
+ * utility routines
+ *
+ * ============================== */
+
+ /*
+ * Find or create the specified trigger entry
+ */
+struct mteTrigger *
+_find_mteTrigger_entry( char *owner, char *tname )
+{
+ netsnmp_variable_list owner_var, tname_var;
+ netsnmp_tdata_row *row;
+
+ /*
+ * If there's already an existing entry,
+ * then use that...
+ */
+ memset(&owner_var, 0, sizeof(netsnmp_variable_list));
+ memset(&tname_var, 0, sizeof(netsnmp_variable_list));
+ snmp_set_var_typed_value(&owner_var, ASN_OCTET_STR, owner, strlen(owner));
+ snmp_set_var_typed_value(&tname_var, ASN_PRIV_IMPLIED_OCTET_STR,
+ tname, strlen(tname));
+ owner_var.next_variable = &tname_var;
+ row = netsnmp_tdata_row_get_byidx( trigger_table_data, &owner_var );
+ /*
+ * ... otherwise, create a new one
+ */
+ if (!row)
+ row = mteTrigger_createEntry( owner, tname, 0 );
+ if (!row)
+ return NULL;
+
+ /* return (struct mteTrigger *)netsnmp_tdata_row_entry( row ); */
+ return (struct mteTrigger *)row->data;
+}
+
+struct mteTrigger *
+_find_typed_mteTrigger_entry( char *owner, char *tname, int type )
+{
+ struct mteTrigger *entry = _find_mteTrigger_entry( owner, tname );
+ if (!entry)
+ return NULL;
+
+ /*
+ * If this is an existing (i.e. valid) entry of the
+ * same type, then throw an error and discard it.
+ * But allow combined Existence/Boolean/Threshold trigger.
+ */
+ if ( entry &&
+ (entry->flags & MTE_TRIGGER_FLAG_VALID) &&
+ (entry->mteTriggerTest & type )) {
+ config_perror("duplicate trigger name");
+ return NULL;
+ }
+ return entry;
+}
+
+
+/* ================================================
+ *
+ * Handlers for user-configured (static) triggers
+ *
+ * ================================================ */
+
+int
+_mteTrigger_callback_enable( int majorID, int minorID,
+ void *serverargs, void *clientarg)
+{
+ struct mteTrigger *entry = (struct mteTrigger *)clientarg;
+ mteTrigger_enable( entry );
+
+ return 0;
+}
+
+
+void
+parse_mteMonitor(const char *token, char *line)
+{
+ char buf[ SPRINT_MAX_LEN];
+ char tname[MTE_STR1_LEN+1];
+ char *cp;
+ long test = 0;
+
+ char ename[MTE_STR1_LEN+1];
+ long flags = MTE_TRIGGER_FLAG_ENABLED |
+ MTE_TRIGGER_FLAG_ACTIVE |
+ MTE_TRIGGER_FLAG_FIXED |
+ MTE_TRIGGER_FLAG_VWILD |
+ MTE_TRIGGER_FLAG_SYSUPT |
+ MTE_TRIGGER_FLAG_VALID;
+ long idx = 0;
+ long startup = 1; /* ??? or 0 */
+ long repeat = 600;
+ netsnmp_session *sess = NULL;
+
+ int seen_name = 0;
+ char oid_name_buf[SPRINT_MAX_LEN];
+ oid name_buf[MAX_OID_LEN];
+ size_t name_buf_len;
+ long op = 0;
+ long value = 0;
+
+ struct mteObject *object;
+ struct mteTrigger *entry;
+
+ DEBUGMSGTL(("disman:event:conf", "Parsing disman monitor config (%s)\n", line));
+
+ /*
+ * Before parsing the configuration fully, first
+ * skim through the config line in order to:
+ * a) locate the name for the trigger, and
+ * b) identify the type of trigger test
+ *
+ * This information will be used both for creating the trigger
+ * entry, and registering any additional payload objects.
+ */
+ memset( buf, 0, sizeof(buf));
+ memset( tname, 0, sizeof(tname));
+ memset( ename, 0, sizeof(ename));
+ for (cp = copy_nword(line, buf, SPRINT_MAX_LEN);
+ ;
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN)) {
+
+ if ( buf[0] == '-' ) {
+ switch (buf[1]) {
+ case 't':
+ /* No longer necessary */
+ break;
+ case 'd':
+ case 'e':
+ case 'o':
+ case 'r':
+ case 'u':
+ /* skip option parameter */
+ cp = skip_token( cp );
+ break;
+ case 'D':
+ case 'I':
+ case 's':
+ case 'S':
+ /* flag options */
+ break;
+ case 'i':
+ /*
+ * '-i' can act as a flag or take a parameter.
+ * Handle either case.
+ */
+ if (cp && *cp != '-')
+ cp = skip_token( cp );
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ /* accept negative values */
+ case '\0':
+ /* and '-' placeholder value */
+ break;
+ default:
+ config_perror("unrecognised option");
+ return;
+ }
+ } else {
+ /*
+ * Save the first non-option parameter as the trigger name.
+ *
+ * This name will also be used to register entries in the
+ * mteObjectsTable, so insert a distinguishing prefix.
+ * This will ensure combined trigger entries don't clash with
+ * each other, or with a similarly-named notification event.
+ */
+ if ( !tname[0] ) {
+ tname[0] = '_';
+ tname[1] = '_'; /* Placeholder */
+ memcpy( tname+2, buf, MTE_STR1_LEN-2 );
+ } else {
+ /*
+ * This marks the beginning of the monitor expression,
+ * so we don't need to scan any further
+ */
+ break;
+ }
+ }
+ if (!cp)
+ break;
+ }
+
+ /*
+ * Now let's examine the expression to determine the type of
+ * monitor being configured. There are four possible forms:
+ * != OID (or ! OID) (existence test)
+ * OID (existence test)
+ * OID op VALUE (boolean test)
+ * OID MIN MAX (threshold test)
+ */
+ if ( *buf == '!' ) {
+ /*
+ * If the expression starts with '!=' or '!', then
+ * it must be the first style of existence test.
+ */
+ test = MTE_TRIGGER_EXISTENCE;
+ } else {
+ /*
+ * Otherwise the first token is the OID to be monitored.
+ * Skip it and look at the next token (if any).
+ */
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ if (cp) {
+ /*
+ * If this is a numeric value, then it'll be the MIN
+ * field of a threshold test (the fourth form)
+ * Otherwise it'll be the operation field of a
+ * boolean test (the third form)
+ */
+ if ( isdigit(buf[0]) || buf[0] == '-' )
+ test = MTE_TRIGGER_THRESHOLD;
+ else
+ test = MTE_TRIGGER_BOOLEAN;
+ } else {
+ /*
+ * If there isn't a "next token", then this
+ * must be the second style of existence test.
+ */
+ test = MTE_TRIGGER_EXISTENCE;
+ }
+ }
+
+ /*
+ * Use the type of trigger test to update the trigger name buffer
+ */
+ switch (test) {
+ case MTE_TRIGGER_BOOLEAN:
+ tname[1] = 'B'; break;
+ case MTE_TRIGGER_THRESHOLD:
+ tname[1] = 'T'; break;
+ case MTE_TRIGGER_EXISTENCE:
+ tname[1] = 'X'; break;
+ }
+
+
+
+ /*
+ * Now start parsing again at the beginning of the directive,
+ * extracting the various options...
+ */
+ for (cp = copy_nword(line, buf, SPRINT_MAX_LEN);
+ ;
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN)) {
+
+ if (buf[0] == '-' ) {
+ switch (buf[1]) {
+ case 'D': /* delta sample value */
+ flags |= MTE_TRIGGER_FLAG_DELTA;
+ break;
+
+ case 'd': /* discontinuity OID (implies delta sample) */
+ flags |= MTE_TRIGGER_FLAG_DELTA;
+ if (buf[2] != 'i')
+ flags |= MTE_TRIGGER_FLAG_DWILD;
+ memset( oid_name_buf, 0, sizeof(oid_name_buf));
+ memset( name_buf, 0, sizeof( name_buf));
+ name_buf_len = MAX_OID_LEN;
+ cp = copy_nword(cp, oid_name_buf, MTE_STR1_LEN);
+ if (!snmp_parse_oid(oid_name_buf, name_buf, &name_buf_len)) {
+ snmp_log(LOG_ERR, "discontinuity OID: %s\n", oid_name_buf);
+ config_perror("unknown discontinuity OID");
+ mteObjects_removeEntries( "snmpd.conf", tname );
+ return;
+ }
+ if ( snmp_oid_compare( name_buf, name_buf_len,
+ _sysUpTime_instance,
+ _sysUpTime_inst_len) != 0 )
+ flags &= ~MTE_TRIGGER_FLAG_SYSUPT;
+ break;
+
+ case 'e': /* event */
+ cp = copy_nword(cp, ename, MTE_STR1_LEN);
+ break;
+
+ case 'I': /* value instance */
+ flags &= ~MTE_TRIGGER_FLAG_VWILD;
+ break;
+
+ /*
+ * "instance" flag:
+ * either non-wildcarded mteTriggerValueID
+ * (backwards compatability - see '-I')
+ * or exact payload OID
+ * (c.f. notificationEvent config)
+ */
+ case 'i':
+ if ( *cp == '-' ) {
+ /* Backwards compatibility - now '-I' */
+ flags &= ~MTE_TRIGGER_FLAG_VWILD;
+ continue;
+ }
+ idx++;
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ object = mteObjects_addOID( "snmpd.conf", tname, idx, buf, 0 );
+ if (!object) {
+ snmp_log(LOG_ERR, "Unknown payload OID: %s\n", buf);
+ config_perror("Unknown payload OID");
+ mteObjects_removeEntries( "snmpd.conf", tname );
+ } else
+ idx = object->mteOIndex;
+ break;
+
+ case 'o': /* object */
+ idx++;
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ object = mteObjects_addOID( "snmpd.conf", tname, idx, buf, 1 );
+ if (!object) {
+ snmp_log(LOG_ERR, "Unknown payload OID: %s\n", buf);
+ config_perror("Unknown payload OID");
+ mteObjects_removeEntries( "snmpd.conf", tname );
+ } else
+ idx = object->mteOIndex;
+ break;
+
+ case 'r': /* repeat frequency */
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ repeat = strtoul(buf, NULL, 0);
+ break;
+
+ case 'S': /* disable startup tests */
+ startup = 0;
+ break;
+
+ case 's': /* enable startup tests (default?) */
+ startup = 1;
+ break;
+
+ case 't': /* threshold test - already handled */
+ break;
+
+ case 'u': /* user */
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ sess = netsnmp_iquery_user_session(buf);
+ if (NULL == sess) {
+ snmp_log(LOG_ERR, "user name %s not found\n", buf);
+ config_perror("Unknown user name\n");
+ mteObjects_removeEntries( "snmpd.conf", tname );
+ return;
+ }
+ break;
+ }
+ } else {
+ /*
+ * Skip the first non-option token - the trigger
+ * name (which has already been processed earlier).
+ */
+ if ( !seen_name ) {
+ seen_name = 1;
+ } else {
+ /*
+ * But the next non-option token encountered will
+ * mark the start of the expression to be monitored.
+ *
+ * There are three possible expression formats:
+ * [op] OID (existence tests)
+ * OID op value (boolean tests)
+ * OID val val [val val] (threshold tests)
+ *
+ * Extract the OID, operation and (first) value.
+ */
+ switch ( test ) {
+ case MTE_TRIGGER_EXISTENCE:
+ /*
+ * Identify the existence operator (if any)...
+ */
+ op = MTE_EXIST_PRESENT;
+ if (buf[0] == '!') {
+ if (buf[1] == '=') {
+ op = MTE_EXIST_CHANGED;
+ } else {
+ op = MTE_EXIST_ABSENT;
+ }
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ }
+ /*
+ * ... then extract the monitored OID.
+ * (ignoring anything that remains)
+ */
+ memcpy(oid_name_buf, buf, SPRINT_MAX_LEN);
+ cp = NULL; /* To terminate the processing loop */
+ DEBUGMSGTL(("disman:event:conf", "%s: Exist (%s, %d)\n",
+ tname, oid_name_buf, op));
+ break;
+
+ case MTE_TRIGGER_BOOLEAN:
+ /*
+ * Extract the monitored OID, and
+ * identify the boolean operator ...
+ */
+ memcpy(oid_name_buf, buf, SPRINT_MAX_LEN);
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ if (buf[0] == '!') {
+ op = MTE_BOOL_UNEQUAL;
+ } else if (buf[0] == '=') {
+ op = MTE_BOOL_EQUAL;
+ } else if (buf[0] == '<') {
+ if (buf[1] == '=') {
+ op = MTE_BOOL_LESSEQUAL;
+ } else {
+ op = MTE_BOOL_LESS;
+ }
+ } else if (buf[0] == '>') {
+ if (buf[1] == '=') {
+ op = MTE_BOOL_GREATEREQUAL;
+ } else {
+ op = MTE_BOOL_GREATER;
+ }
+ }
+ /*
+ * ... then extract the comparison value.
+ * (ignoring anything that remains)
+ */
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ value = strtol(buf, NULL, 0);
+ cp = NULL; /* To terminate the processing loop */
+ DEBUGMSGTL(("disman:event:conf", "%s: Bool (%s, %d, %d)\n",
+ tname, oid_name_buf, op, value));
+ break;
+
+ case MTE_TRIGGER_THRESHOLD:
+ /*
+ * Extract the monitored OID, and
+ * the first comparison value...
+ */
+ memcpy(oid_name_buf, buf, SPRINT_MAX_LEN);
+ memset( buf, 0, SPRINT_MAX_LEN);
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ if ( buf[0] != '-' )
+ value = strtol(buf, NULL, 0);
+
+ /*
+ * ... then save the rest of the line for later.
+ */
+ memset( buf, 0, strlen(buf));
+ memcpy( buf, cp, strlen(cp));
+ cp = NULL; /* To terminate the processing loop */
+ DEBUGMSGTL(("disman:event:conf", "%s: Thresh (%s, %d, %s)\n",
+ tname, oid_name_buf, op, buf));
+ break;
+ }
+ }
+ }
+ if (!cp)
+ break;
+ }
+
+ if (NULL == sess) {
+ sess = netsnmp_query_get_default_session();
+ if (NULL == sess) {
+ config_perror
+ ("You must specify a default user name using the agentSecName token\n");
+ mteObjects_removeEntries( "snmpd.conf", tname );
+ return;
+ }
+ }
+
+ /*
+ * ... and then create the new trigger entry...
+ */
+ entry = _find_typed_mteTrigger_entry( "snmpd.conf", tname+2, test );
+ if (!entry) {
+ /* mteObjects_removeEntries( "snmpd.conf", tname ); */
+ return;
+ }
+
+ /*
+ * ... populate the type-independent fields...
+ * (setting the delta discontinuity OID first)
+ */
+ if ( (flags & MTE_TRIGGER_FLAG_DELTA) &&
+ !(flags & MTE_TRIGGER_FLAG_SYSUPT)) {
+ memset( entry->mteDeltaDiscontID, 0, sizeof(entry->mteDeltaDiscontID));
+ memcpy( entry->mteDeltaDiscontID, name_buf, name_buf_len*sizeof(oid));
+ entry->mteDeltaDiscontID_len = name_buf_len;
+ }
+ name_buf_len = MAX_OID_LEN;
+ if (!snmp_parse_oid(oid_name_buf, name_buf, &name_buf_len)) {
+ snmp_log(LOG_ERR, "trigger OID: %s\n", oid_name_buf);
+ config_perror("unknown monitor OID");
+ mteObjects_removeEntries( "snmpd.conf", tname );
+ return;
+ }
+ entry->session = sess;
+ entry->flags |= flags;
+ entry->mteTriggerTest |= test;
+ entry->mteTriggerFrequency = repeat;
+ entry->mteTriggerValueID_len = name_buf_len;
+ memcpy(entry->mteTriggerValueID, name_buf, name_buf_len*sizeof(oid));
+
+ /*
+ * ... and the relevant test-specific fields.
+ */
+ switch (test) {
+ case MTE_TRIGGER_EXISTENCE:
+ entry->mteTExTest = op;
+ if (op != MTE_EXIST_CHANGED && startup)
+ entry->mteTExStartup = op;
+ if ( idx > 0 ) {
+ /*
+ * Refer to the objects for this trigger (if any)...
+ */
+ memset(entry->mteTExObjOwner, 0, MTE_STR1_LEN+1);
+ memcpy(entry->mteTExObjOwner, "snmpd.conf", 10);
+ memcpy(entry->mteTExObjects, tname, MTE_STR1_LEN+1);
+ }
+ if ( ename[0] ) {
+ /*
+ * ... and the specified event...
+ */
+ memset(entry->mteTExEvOwner, 0, MTE_STR1_LEN+1);
+ if ( ename[0] == '_' )
+ memcpy(entry->mteTExEvOwner, "_snmpd", 6);
+ else
+ memcpy(entry->mteTExEvOwner, "snmpd.conf", 10);
+ memcpy(entry->mteTExEvent, ename, MTE_STR1_LEN+1);
+ } else {
+ /*
+ * ... or the hardcoded default event.
+ */
+ memset(entry->mteTExEvOwner, 0, MTE_STR1_LEN+1);
+ memset(entry->mteTExEvent, 0, MTE_STR1_LEN+1);
+ memcpy(entry->mteTExEvOwner, "_snmpd", 6);
+ memcpy(entry->mteTExEvent, "_mteTriggerFired", 16);
+ }
+ break;
+ case MTE_TRIGGER_BOOLEAN:
+ entry->mteTBoolComparison = op;
+ entry->mteTBoolValue = value;
+ if (!startup)
+ entry->flags &= ~MTE_TRIGGER_FLAG_BSTART;
+ if ( idx > 0 ) {
+ /*
+ * Refer to the objects for this trigger (if any)...
+ */
+ memset(entry->mteTBoolObjOwner, 0, MTE_STR1_LEN+1);
+ memcpy(entry->mteTBoolObjOwner, "snmpd.conf", 10);
+ memcpy(entry->mteTBoolObjects, tname, MTE_STR1_LEN+1);
+ }
+ if ( ename[0] ) {
+ /*
+ * ... and the specified event...
+ */
+ memset(entry->mteTBoolEvOwner, 0, MTE_STR1_LEN+1);
+ if ( ename[0] == '_' )
+ memcpy(entry->mteTBoolEvOwner, "_snmpd", 6);
+ else
+ memcpy(entry->mteTBoolEvOwner, "snmpd.conf", 10);
+ memcpy(entry->mteTBoolEvent, ename, MTE_STR1_LEN+1);
+ } else {
+ /*
+ * ... or the hardcoded default event.
+ */
+ memset(entry->mteTBoolEvOwner, 0, MTE_STR1_LEN+1);
+ memset(entry->mteTBoolEvent, 0, MTE_STR1_LEN+1);
+ memcpy(entry->mteTBoolEvOwner, "_snmpd", 6);
+ memcpy(entry->mteTBoolEvent, "_mteTriggerFired", 16);
+ }
+ break;
+ case MTE_TRIGGER_THRESHOLD:
+ if ( buf[0] != '-' ) {
+ entry->mteTThFallValue = value;
+ value = strtol(buf, NULL, 0);
+ entry->mteTThRiseValue = value;
+ if (!startup)
+ entry->mteTThStartup = 0;
+ if ( idx > 0 ) {
+ /*
+ * Refer to the objects for this trigger (if any)...
+ */
+ memset(entry->mteTThObjOwner, 0, MTE_STR1_LEN+1);
+ memcpy(entry->mteTThObjOwner, "snmpd.conf", 10);
+ memcpy(entry->mteTThObjects, tname, MTE_STR1_LEN+1);
+ }
+ if ( ename[0] ) {
+ /*
+ * ... and the specified event...
+ * (using the same event for all triggers)
+ */
+ memset(entry->mteTThRiseOwner, 0, MTE_STR1_LEN+1);
+ if ( ename[0] == '_' )
+ memcpy(entry->mteTThRiseOwner, "_snmpd", 6);
+ else
+ memcpy(entry->mteTThRiseOwner, "snmpd.conf", 10);
+ memcpy(entry->mteTThRiseEvent, ename, MTE_STR1_LEN+1);
+ memset(entry->mteTThFallOwner, 0, MTE_STR1_LEN+1);
+ if ( ename[0] == '_' )
+ memcpy(entry->mteTThFallOwner, "_snmpd", 6);
+ else
+ memcpy(entry->mteTThFallOwner, "snmpd.conf", 10);
+ memcpy(entry->mteTThFallEvent, ename, MTE_STR1_LEN+1);
+ } else {
+ /*
+ * ... or the hardcoded default events.
+ */
+ memset(entry->mteTThRiseOwner, 0, MTE_STR1_LEN+1);
+ memset(entry->mteTThFallOwner, 0, MTE_STR1_LEN+1);
+ memset(entry->mteTThRiseEvent, 0, MTE_STR1_LEN+1);
+ memset(entry->mteTThFallEvent, 0, MTE_STR1_LEN+1);
+ memcpy(entry->mteTThRiseOwner, "_snmpd", 6);
+ memcpy(entry->mteTThFallOwner, "_snmpd", 6);
+ memcpy(entry->mteTThRiseEvent, "_mteTriggerRising", 17);
+ memcpy(entry->mteTThFallEvent, "_mteTriggerFalling", 18);
+ }
+ cp = skip_token(buf); /* skip riseThreshold value */
+ } else {
+ /* Skip absolute threshold placeholders */
+ cp = skip_token(buf);
+ }
+ /*
+ * Parse and set (optional) Delta thresholds & events
+ */
+ if ( cp && *cp != '\0' ) {
+ if (entry->flags & MTE_TRIGGER_FLAG_DELTA) {
+ config_perror("Delta-threshold on delta-samples not supported");
+ mteObjects_removeEntries( "snmpd.conf", tname );
+ return;
+ }
+ value = strtol(cp, NULL, 0);
+ entry->mteTThDFallValue = value;
+ cp = skip_token(cp);
+ value = strtol(cp, NULL, 0);
+ entry->mteTThDRiseValue = value;
+ /*
+ * Set the events in the same way as before
+ */
+ if ( ename[0] ) {
+ memset(entry->mteTThDRiseOwner, 0, MTE_STR1_LEN+1);
+ if ( ename[0] == '_' )
+ memcpy(entry->mteTThDRiseOwner, "_snmpd", 6);
+ else
+ memcpy(entry->mteTThDRiseOwner, "snmpd.conf", 10);
+ memcpy(entry->mteTThDRiseEvent, ename, MTE_STR1_LEN+1);
+ memset(entry->mteTThDFallOwner, 0, MTE_STR1_LEN+1);
+ if ( ename[0] == '_' )
+ memcpy(entry->mteTThDFallOwner, "_snmpd", 6);
+ else
+ memcpy(entry->mteTThDFallOwner, "snmpd.conf", 10);
+ memcpy(entry->mteTThDFallEvent, ename, MTE_STR1_LEN+1);
+ } else {
+ memset(entry->mteTThDRiseOwner, 0, MTE_STR1_LEN+1);
+ memset(entry->mteTThDFallOwner, 0, MTE_STR1_LEN+1);
+ memset(entry->mteTThDRiseEvent, 0, MTE_STR1_LEN+1);
+ memset(entry->mteTThDFallEvent, 0, MTE_STR1_LEN+1);
+ memcpy(entry->mteTThDRiseOwner, "_snmpd", 6);
+ memcpy(entry->mteTThDFallOwner, "_snmpd", 6);
+ memcpy(entry->mteTThDRiseEvent, "_mteTriggerRising", 17);
+ memcpy(entry->mteTThDFallEvent, "_mteTriggerFalling", 18);
+ }
+ }
+
+ break;
+ }
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY,
+ SNMP_CALLBACK_POST_READ_CONFIG,
+ _mteTrigger_callback_enable, entry );
+ return;
+}
+
+void
+parse_linkUpDown_traps(const char *token, char *line)
+{
+ /*
+ * XXX - This isn't strictly correct according to the
+ * definitions in IF-MIB, but will do for now.
+ */
+ if (strncmp( line, "yes", 3) == 0) {
+ DEBUGMSGTL(("disman:event:conf", "Registering linkUpDown traps\n"));
+
+ /* ifOperStatus */
+ parse_mteMonitor("monitor",
+ "-r 60 -S -e _linkUp \"linkUp\" .1.3.6.1.2.1.2.2.1.8 != 2");
+ parse_mteMonitor("monitor",
+ "-r 60 -S -e _linkDown \"linkDown\" .1.3.6.1.2.1.2.2.1.8 == 2");
+ }
+}
+
+
+void
+parse_default_mteMonitors(const char *token, char *line)
+{
+ if (strncmp( line, "yes", 3) == 0) {
+ DEBUGMSGTL(("disman:event:conf", "Registering default monitors\n"));
+
+ parse_mteMonitor("monitor",
+ "-o prNames -o prErrMessage \"process table\" prErrorFlag != 0");
+ parse_mteMonitor("monitor",
+ "-o memErrorName -o memSwapErrorMsg \"memory\" memSwapError != 0");
+ parse_mteMonitor("monitor",
+ "-o extNames -o extOutput \"extTable\" extResult != 0");
+ parse_mteMonitor("monitor",
+ "-o dskPath -o dskErrorMsg \"dskTable\" dskErrorFlag != 0");
+ parse_mteMonitor("monitor",
+ "-o laNames -o laErrMessage \"laTable\" laErrorFlag != 0");
+ parse_mteMonitor("monitor",
+ "-o fileName -o fileErrorMsg \"fileTable\" fileErrorFlag != 0");
+ parse_mteMonitor("monitor",
+ "-o snmperrErrMessage \"snmperrs\" snmperrErrorFlag != 0");
+ }
+ return;
+}
+
+/* ================================================
+ *
+ * Handlers for loading persistent trigger entries
+ *
+ * ================================================ */
+
+
+
+/*
+ * Entries for the main mteTriggerTable
+ */
+
+char *
+_parse_mteTCols( char *line, struct mteTrigger *entry, int bcomp )
+{
+ void *vp;
+ size_t tmp;
+ size_t len;
+
+ len = MTE_STR2_LEN; vp = entry->mteTriggerComment;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ if ( bcomp ) {
+ /*
+ * The newer style of config directive skips the
+ * mteTriggerTest and mteTriggerSampleType values,
+ * as these are set implicitly from the relevant
+ * config directives.
+ * Backwards compatability with the previous (combined)
+ * style reads these in explicitly.
+ */
+ len = 1;
+ vp = &entry->mteTriggerTest;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ if (tmp == 2)
+ entry->flags |= MTE_TRIGGER_FLAG_DELTA;
+ }
+ vp = entry->mteTriggerValueID;
+ entry->mteTriggerValueID_len = MAX_OID_LEN;
+ line = read_config_read_data(ASN_OBJECT_ID, line, &vp,
+ &entry->mteTriggerValueID_len);
+ if (bcomp) {
+ /*
+ * The newer style combines the various boolean values
+ * into a single field (which comes later).
+ * Backwards compatability means reading these individually.
+ */
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ if (tmp == TV_TRUE)
+ entry->flags |= MTE_TRIGGER_FLAG_VWILD;
+ }
+ len = MTE_STR2_LEN; vp = entry->mteTriggerTarget;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR2_LEN; vp = entry->mteTriggerContext;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ if (bcomp) {
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ if (tmp == TV_TRUE)
+ entry->flags |= MTE_TRIGGER_FLAG_CWILD;
+ }
+
+ line = read_config_read_data(ASN_UNSIGNED, line,
+ &entry->mteTriggerFrequency, NULL);
+
+ len = MTE_STR1_LEN; vp = entry->mteTriggerOOwner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = entry->mteTriggerObjects;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+
+ /*
+ * Assorted boolean flag values, combined into a single field
+ */
+ if (bcomp) {
+ /*
+ * Backwards compatability stores the mteTriggerEnabled
+ * and mteTriggerEntryStatus values separately...
+ */
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ if (tmp == TV_TRUE)
+ entry->flags |= MTE_TRIGGER_FLAG_ENABLED;
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ if (tmp == RS_ACTIVE)
+ entry->flags |= MTE_TRIGGER_FLAG_ACTIVE;
+ } else {
+ /*
+ * ... while the newer style combines all the assorted
+ * boolean values into this single field.
+ */
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ entry->flags |= ( tmp &
+ (MTE_TRIGGER_FLAG_VWILD |MTE_TRIGGER_FLAG_CWILD|
+ MTE_TRIGGER_FLAG_ENABLED|MTE_TRIGGER_FLAG_ACTIVE));
+ }
+
+ return line;
+}
+
+void
+parse_mteTTable(const char *token, char *line)
+{
+ char owner[MTE_STR1_LEN+1];
+ char tname[MTE_STR1_LEN+1];
+ void *vp;
+ size_t len;
+ struct mteTrigger *entry;
+
+ DEBUGMSGTL(("disman:event:conf", "Parsing mteTriggerTable config...\n"));
+
+ /*
+ * Read in the index information for this entry
+ * and create a (non-fixed) data structure for it.
+ */
+ memset( owner, 0, sizeof(owner));
+ memset( tname, 0, sizeof(tname));
+ len = MTE_STR1_LEN; vp = owner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = tname;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ entry = _find_mteTrigger_entry( owner, tname );
+
+ DEBUGMSG(("disman:event:conf", "(%s, %s) ", owner, tname));
+
+ /*
+ * Read in the accessible (trigger-independent) column values.
+ */
+ line = _parse_mteTCols( line, entry, 0 );
+ /*
+ * XXX - Will need to read in the 'iquery' access information
+ */
+ entry->flags |= MTE_TRIGGER_FLAG_VALID;
+
+ DEBUGMSG(("disman:event:conf", "\n"));
+}
+
+
+/*
+ * Entries from the mteTriggerDeltaTable
+ */
+
+char *
+_parse_mteTDCols( char *line, struct mteTrigger *entry, int bcomp )
+{
+ void *vp;
+ size_t tmp;
+
+ entry->mteDeltaDiscontID_len = MAX_OID_LEN;
+ vp = entry->mteDeltaDiscontID;
+ line = read_config_read_data(ASN_OBJECT_ID, line, &vp,
+ &entry->mteDeltaDiscontID_len);
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ if (bcomp) {
+ if ( tmp == TV_TRUE )
+ entry->flags |= MTE_TRIGGER_FLAG_DWILD;
+ } else {
+ if ( tmp & MTE_TRIGGER_FLAG_DWILD )
+ entry->flags |= MTE_TRIGGER_FLAG_DWILD;
+ }
+ line = read_config_read_data(ASN_UNSIGNED, line,
+ &entry->mteDeltaDiscontIDType, NULL);
+
+ return line;
+}
+
+void
+parse_mteTDTable(const char *token, char *line)
+{
+ char owner[MTE_STR1_LEN+1];
+ char tname[MTE_STR1_LEN+1];
+ void *vp;
+ size_t len;
+ struct mteTrigger *entry;
+
+ DEBUGMSGTL(("disman:event:conf", "Parsing mteTriggerDeltaTable config... "));
+
+ /*
+ * Read in the index information for this entry
+ * and create a (non-fixed) data structure for it.
+ */
+ memset( owner, 0, sizeof(owner));
+ memset( tname, 0, sizeof(tname));
+ len = MTE_STR1_LEN; vp = owner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = tname;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ entry = _find_mteTrigger_entry( owner, tname );
+
+ DEBUGMSG(("disman:event:conf", "(%s, %s) ", owner, tname));
+
+ /*
+ * Read in the accessible column values.
+ */
+ line = _parse_mteTDCols( line, entry, 0 );
+
+ entry->flags |= (MTE_TRIGGER_FLAG_DELTA|
+ MTE_TRIGGER_FLAG_VALID);
+
+ DEBUGMSG(("disman:event:conf", "\n"));
+}
+
+
+/*
+ * Entries from the mteTriggerExistenceTable
+ */
+
+char *
+_parse_mteTExCols( char *line, struct mteTrigger *entry, int bcomp )
+{
+ void *vp;
+ size_t tmp;
+ size_t len;
+
+ if (bcomp) {
+ len = 1;
+ vp = &entry->mteTExTest;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = 1;
+ vp = &entry->mteTExStartup;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ } else {
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ entry->mteTExStartup = ( tmp & 0xff ); tmp >>= 8;
+ entry->mteTExTest = ( tmp & 0xff );
+ }
+
+ len = MTE_STR1_LEN; vp = entry->mteTExObjOwner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = entry->mteTExObjects;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+
+ len = MTE_STR1_LEN; vp = entry->mteTExEvOwner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = entry->mteTExEvent;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+
+ return line;
+}
+
+void
+parse_mteTExTable(const char *token, char *line)
+{
+ char owner[MTE_STR1_LEN+1];
+ char tname[MTE_STR1_LEN+1];
+ void *vp;
+ size_t len;
+ struct mteTrigger *entry;
+
+ DEBUGMSGTL(("disman:event:conf", "Parsing mteTriggerExistenceTable config... "));
+
+ /*
+ * Read in the index information for this entry
+ * and create a (non-fixed) data structure for it.
+ */
+ memset( owner, 0, sizeof(owner));
+ memset( tname, 0, sizeof(tname));
+ len = MTE_STR1_LEN; vp = owner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = tname;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ entry = _find_mteTrigger_entry( owner, tname );
+
+ DEBUGMSG(("disman:event:conf", "(%s, %s) ", owner, tname));
+
+ /*
+ * Read in the accessible column values.
+ * (Note that the first two are combined into a single field)
+ */
+ line = _parse_mteTExCols( line, entry, 0 );
+
+ entry->mteTriggerTest |= MTE_TRIGGER_EXISTENCE;
+ entry->flags |= MTE_TRIGGER_FLAG_VALID;
+
+ DEBUGMSG(("disman:event:conf", "\n"));
+}
+
+
+/*
+ * Entries from the mteTriggerBooleanTable
+ */
+
+char *
+_parse_mteTBlCols( char *line, struct mteTrigger *entry, int bcomp )
+{
+ void *vp;
+ size_t tmp;
+ size_t len;
+
+ if (bcomp) {
+ line = read_config_read_data(ASN_UNSIGNED, line,
+ &entry->mteTBoolComparison, NULL);
+ line = read_config_read_data(ASN_INTEGER, line,
+ &entry->mteTBoolValue, NULL);
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ if (tmp == TV_TRUE)
+ entry->flags |= MTE_TRIGGER_FLAG_BSTART;
+ } else {
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ entry->mteTBoolComparison = ( tmp & 0x0f );
+ entry->flags |= ( tmp & MTE_TRIGGER_FLAG_BSTART );
+ line = read_config_read_data(ASN_INTEGER, line,
+ &entry->mteTBoolValue, NULL);
+ }
+
+
+ len = MTE_STR1_LEN; vp = entry->mteTBoolObjOwner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = entry->mteTBoolObjects;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+
+ len = MTE_STR1_LEN; vp = entry->mteTBoolEvOwner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = entry->mteTBoolEvent;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+
+ return line;
+}
+
+void
+parse_mteTBlTable(const char *token, char *line)
+{
+ char owner[MTE_STR1_LEN+1];
+ char tname[MTE_STR1_LEN+1];
+ void *vp;
+ size_t len;
+ struct mteTrigger *entry;
+
+ DEBUGMSGTL(("disman:event:conf", "Parsing mteTriggerBooleanTable config... "));
+
+ /*
+ * Read in the index information for this entry
+ * and create a (non-fixed) data structure for it.
+ */
+ memset( owner, 0, sizeof(owner));
+ memset( tname, 0, sizeof(tname));
+ len = MTE_STR1_LEN; vp = owner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = tname;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ entry = _find_mteTrigger_entry( owner, tname );
+
+ DEBUGMSG(("disman:event:conf", "(%s, %s) ", owner, tname));
+
+ /*
+ * Read in the accessible column values.
+ * (Note that the first & third are combined into a single field)
+ */
+ line = _parse_mteTBlCols( line, entry, 0 );
+
+ entry->mteTriggerTest |= MTE_TRIGGER_BOOLEAN;
+ entry->flags |= MTE_TRIGGER_FLAG_VALID;
+
+ DEBUGMSG(("disman:event:conf", "\n"));
+}
+
+
+/*
+ * Entries from the mteTriggerThresholdTable
+ */
+
+char *
+_parse_mteTThCols( char *line, struct mteTrigger *entry, int bcomp )
+{
+ void *vp;
+ size_t len;
+
+ line = read_config_read_data(ASN_UNSIGNED, line,
+ &entry->mteTThStartup, NULL);
+ line = read_config_read_data(ASN_INTEGER, line,
+ &entry->mteTThRiseValue, NULL);
+ line = read_config_read_data(ASN_INTEGER, line,
+ &entry->mteTThFallValue, NULL);
+ line = read_config_read_data(ASN_INTEGER, line,
+ &entry->mteTThDRiseValue, NULL);
+ line = read_config_read_data(ASN_INTEGER, line,
+ &entry->mteTThDFallValue, NULL);
+
+ len = MTE_STR1_LEN; vp = entry->mteTThObjOwner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = entry->mteTThObjects;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+
+ len = MTE_STR1_LEN; vp = entry->mteTThRiseOwner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = entry->mteTThRiseEvent;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = entry->mteTThFallOwner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = entry->mteTThFallEvent;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+
+ len = MTE_STR1_LEN; vp = entry->mteTThDRiseOwner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = entry->mteTThDRiseEvent;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = entry->mteTThDFallOwner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = entry->mteTThDFallEvent;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+
+ return line;
+}
+
+void
+parse_mteTThTable(const char *token, char *line)
+{
+ char owner[MTE_STR1_LEN+1];
+ char tname[MTE_STR1_LEN+1];
+ void *vp;
+ size_t len;
+ struct mteTrigger *entry;
+
+ DEBUGMSGTL(("disman:event:conf", "Parsing mteTriggerThresholdTable config... "));
+
+ /*
+ * Read in the index information for this entry
+ * and create a (non-fixed) data structure for it.
+ */
+ memset( owner, 0, sizeof(owner));
+ memset( tname, 0, sizeof(tname));
+ len = MTE_STR1_LEN; vp = owner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = tname;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ entry = _find_mteTrigger_entry( owner, tname );
+
+ DEBUGMSG(("disman:event:conf", "(%s, %s) ", owner, tname));
+
+ /*
+ * Read in the accessible column values.
+ */
+ line = _parse_mteTThCols( line, entry, 0 );
+
+ entry->mteTriggerTest |= MTE_TRIGGER_THRESHOLD;
+ entry->flags |= MTE_TRIGGER_FLAG_VALID;
+
+ DEBUGMSG(("disman:event:conf", "\n"));
+}
+
+
+/*
+ * Backwards Compatability with the previous implementation
+ */
+
+void
+parse_mteTriggerTable(const char *token, char *line)
+{
+ char owner[MTE_STR1_LEN+1];
+ char tname[MTE_STR1_LEN+1];
+ void *vp;
+ size_t len;
+ struct mteTrigger *entry;
+
+ DEBUGMSGTL(("disman:event:conf", "Parsing previous mteTriggerTable config... "));
+
+ /*
+ * Read in the index information for this entry
+ * and create a (non-fixed) data structure for it.
+ */
+ memset( owner, 0, sizeof(owner));
+ memset( tname, 0, sizeof(tname));
+ len = MTE_STR1_LEN; vp = owner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MTE_STR1_LEN; vp = tname;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ entry = _find_mteTrigger_entry( owner, tname );
+
+ DEBUGMSG(("disman:event:conf", "(%s, %s) ", owner, tname));
+
+ /*
+ * Read in the accessible column values for each table in turn...
+ * (similar, though not identical to the newer style).
+ */
+ line = _parse_mteTCols( line, entry, 1 );
+ line = _parse_mteTDCols( line, entry, 1 );
+ line = _parse_mteTExCols( line, entry, 1 );
+ line = _parse_mteTBlCols( line, entry, 1 );
+ line = _parse_mteTThCols( line, entry, 1 );
+
+ /*
+ * ... and then read in the "local internal variables"
+ * XXX - TODO
+ */
+ entry->flags |= MTE_TRIGGER_FLAG_VALID;
+
+ /* XXX - mte_enable_trigger(); ??? */
+ DEBUGMSG(("disman:event:conf", "\n"));
+}
+
+/* ===============================================
+ *
+ * Handler for storing persistent trigger entries
+ *
+ * =============================================== */
+
+int
+store_mteTTable(int majorID, int minorID, void *serverarg, void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr;
+ void *vp;
+ size_t tint;
+ netsnmp_tdata_row *row;
+ struct mteTrigger *entry;
+
+
+ DEBUGMSGTL(("disman:event:conf", "Storing mteTriggerTable config:\n"));
+
+ for (row = netsnmp_tdata_row_first( trigger_table_data );
+ row;
+ row = netsnmp_tdata_row_next( trigger_table_data, row )) {
+
+ /*
+ * Skip entries that were set up via static config directives
+ */
+ entry = (struct mteTrigger *)netsnmp_tdata_row_entry( row );
+ if ( entry->flags & MTE_TRIGGER_FLAG_FIXED )
+ continue;
+
+ DEBUGMSGTL(("disman:event:conf", " Storing (%s %s)\n",
+ entry->mteOwner, entry->mteTName));
+
+ /*
+ * Save the basic mteTriggerTable entry...
+ */
+ memset(line, 0, sizeof(line));
+ strcat(line, "_mteTTable ");
+ cptr = line + strlen(line);
+
+ vp = entry->mteOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTName; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTriggerComment; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ /*
+ * ... (but skip the mteTriggerTest and
+ * assorted boolean flag fields)...
+ */
+ vp = entry->mteTriggerValueID;
+ tint = entry->mteTriggerValueID_len;
+ cptr = read_config_store_data( ASN_OBJECT_ID, cptr, &vp, &tint );
+ vp = entry->mteTriggerTarget; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTriggerContext; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ tint = entry->mteTriggerFrequency;
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+ vp = entry->mteTriggerOOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTriggerObjects; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ tint = entry->flags &
+ (MTE_TRIGGER_FLAG_VWILD |MTE_TRIGGER_FLAG_CWILD|
+ MTE_TRIGGER_FLAG_ENABLED|MTE_TRIGGER_FLAG_ACTIVE);
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+ /* XXX - Need to store the 'iquery' access information */
+ snmpd_store_config(line);
+
+ /*
+ * ... then save the other (relevant) table entries separately,
+ * starting with mteDeltaDiscontinuityTable...
+ */
+ if ( entry->flags & MTE_TRIGGER_FLAG_DELTA ) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "_mteTDTable ");
+ cptr = line + strlen(line);
+
+ vp = entry->mteOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTName; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+
+ vp = entry->mteDeltaDiscontID;
+ tint = entry->mteDeltaDiscontID_len;
+ cptr = read_config_store_data( ASN_OBJECT_ID, cptr, &vp, &tint );
+
+ tint = entry->flags & MTE_TRIGGER_FLAG_DWILD;
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+ tint = entry->mteDeltaDiscontIDType;
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+
+ snmpd_store_config(line);
+ }
+
+ /*
+ * ... and the three type-specific trigger tables.
+ */
+ if ( entry->mteTriggerTest & MTE_TRIGGER_EXISTENCE ) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "_mteTExTable ");
+ cptr = line + strlen(line);
+
+ vp = entry->mteOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTName; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+
+ tint = (entry->mteTExTest & 0xff) << 8;
+ tint|= (entry->mteTExStartup & 0xff);
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+
+ vp = entry->mteTExObjOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTExObjects; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+
+ vp = entry->mteTExEvOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTExEvent; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+
+ snmpd_store_config(line);
+ }
+ if ( entry->mteTriggerTest & MTE_TRIGGER_BOOLEAN ) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "_mteTBlTable ");
+ cptr = line + strlen(line);
+
+ vp = entry->mteOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTName; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+
+ tint = entry->mteTBoolComparison;
+ tint |= (entry->flags & MTE_TRIGGER_FLAG_BSTART);
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+ tint = entry->mteTBoolValue;
+ cptr = read_config_store_data( ASN_INTEGER, cptr, &tint, NULL );
+
+ vp = entry->mteTBoolObjOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTBoolObjects; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+
+ vp = entry->mteTBoolEvOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTBoolEvent; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+
+ snmpd_store_config(line);
+ }
+ if ( entry->mteTriggerTest & MTE_TRIGGER_THRESHOLD ) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "_mteTThTable ");
+ cptr = line + strlen(line);
+
+ vp = entry->mteOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTName; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+
+ cptr = read_config_store_data(ASN_UNSIGNED, cptr,
+ &entry->mteTThStartup, NULL );
+ cptr = read_config_store_data(ASN_INTEGER, cptr,
+ &entry->mteTThRiseValue, NULL );
+ cptr = read_config_store_data(ASN_INTEGER, cptr,
+ &entry->mteTThFallValue, NULL );
+ cptr = read_config_store_data(ASN_INTEGER, cptr,
+ &entry->mteTThDRiseValue, NULL );
+ cptr = read_config_store_data(ASN_INTEGER, cptr,
+ &entry->mteTThDFallValue, NULL );
+
+ vp = entry->mteTThObjOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTThObjects; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+
+ vp = entry->mteTThRiseOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTThRiseEvent; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTThFallOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTThFallEvent; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+
+ vp = entry->mteTThDRiseOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTThDRiseEvent; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTThDFallOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->mteTThDFallEvent; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+
+ snmpd_store_config(line);
+ }
+ }
+
+ DEBUGMSGTL(("disman:event:conf", " done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+int
+clear_mteTTable(int majorID, int minorID, void *serverarg, void *clientarg)
+{
+ netsnmp_tdata_row *row;
+
+ while (( row = netsnmp_tdata_row_first( trigger_table_data ))) {
+ netsnmp_tdata_remove_and_delete_row( trigger_table_data, row );
+ }
+ return SNMPERR_SUCCESS;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerConf.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerConf.h
new file mode 100644
index 0000000000..560c3ea4c0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerConf.h
@@ -0,0 +1,23 @@
+#ifndef MTETRIGGERCONF_H
+#define MTETRIGGERCONF_H
+
+config_require(utilities/iquery)
+
+/*
+ * function declarations
+ */
+void init_mteTriggerConf(void);
+void parse_mteMonitor( const char *, char *);
+void parse_default_mteMonitors( const char *, char *);
+void parse_linkUpDown_traps(const char *, char *);
+
+void parse_mteTTable( const char *, char *);
+void parse_mteTDTable( const char *, char *);
+void parse_mteTExTable(const char *, char *);
+void parse_mteTBlTable(const char *, char *);
+void parse_mteTThTable(const char *, char *);
+void parse_mteTriggerTable(const char *, char *);
+SNMPCallback store_mteTTable;
+SNMPCallback clear_mteTTable;
+
+#endif /* MTETRIGGERCONF_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerDeltaTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerDeltaTable.c
new file mode 100644
index 0000000000..cd21f6db2c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerDeltaTable.c
@@ -0,0 +1,239 @@
+/*
+ * DisMan Event MIB:
+ * Implementation of the mteTriggerDeltaTable MIB interface
+ * See 'mteTrigger.c' for active behaviour of this table.
+ *
+ * (based on mib2c.table_data.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/event/mteTrigger.h"
+#include "disman/event/mteTriggerDeltaTable.h"
+
+
+/** Initializes the mteTriggerDeltaTable module */
+void
+init_mteTriggerDeltaTable(void)
+{
+ static oid mteTDeltaTable_oid[] = { 1, 3, 6, 1, 2, 1, 88, 1, 2, 3 };
+ size_t mteTDeltaTable_oid_len = OID_LENGTH(mteTDeltaTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ /*
+ * Ensure the (combined) table container is available...
+ */
+ init_trigger_table_data();
+
+ /*
+ * ... then set up the MIB interface to the mteTriggerDeltaTable slice
+ */
+ reg = netsnmp_create_handler_registration("mteTriggerDeltaTable",
+ mteTriggerDeltaTable_handler,
+ mteTDeltaTable_oid,
+ mteTDeltaTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ ASN_OCTET_STR, /* index: mteOwner */
+ /* index: mteTriggerName */
+ ASN_PRIV_IMPLIED_OCTET_STR,
+ 0);
+
+ table_info->min_column = COLUMN_MTETRIGGERDELTADISCONTINUITYID;
+ table_info->max_column = COLUMN_MTETRIGGERDELTADISCONTINUITYIDTYPE;
+
+ /* Register this using the (common) trigger_table_data container */
+ netsnmp_tdata_register(reg, trigger_table_data, table_info);
+ DEBUGMSGTL(("disman:event:init", "Trigger Delta Table\n"));
+}
+
+
+/** handles requests for the mteTriggerDeltaTable table */
+int
+mteTriggerDeltaTable_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 *tinfo;
+ struct mteTrigger *entry;
+ int ret;
+
+ DEBUGMSGTL(("disman:event:mib", "Delta Table handler (%d)\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ /*
+ * The mteTriggerBooleanTable should only contains entries for
+ * rows where the mteTriggerSampleType is 'deltaValue(2)'
+ * So skip entries where this isn't the case.
+ */
+ if (!entry || !(entry->flags & MTE_TRIGGER_FLAG_DELTA ))
+ continue;
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERDELTADISCONTINUITYID:
+ snmp_set_var_typed_value(request->requestvb, ASN_OBJECT_ID,
+ (u_char *) entry->mteDeltaDiscontID,
+ entry->mteDeltaDiscontID_len*sizeof(oid));
+ break;
+ case COLUMN_MTETRIGGERDELTADISCONTINUITYIDWILDCARD:
+ ret = (entry->flags & MTE_TRIGGER_FLAG_DWILD ) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_MTETRIGGERDELTADISCONTINUITYIDTYPE:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->mteDeltaDiscontIDType);
+ break;
+ }
+ }
+ break;
+
+ /*
+ * Write-support
+ */
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ /*
+ * Since the mteTriggerDeltaTable only contains entries for
+ * rows where mteTriggerSampleType is 'deltaValue(2)',
+ * strictly speaking we should reject assignments where
+ * this isn't the case.
+ * But SET requests that include an assignment of
+ * 'deltaValue(2)' at the same time are valid, so would
+ * need to be accepted. Unfortunately, this assignment
+ * is only applied in the COMMIT pass, so it's difficult
+ * to detect whether this holds or not.
+ *
+ * Let's fudge things for now, by processing
+ * assignments even if this value isn't set.
+ */
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERDELTADISCONTINUITYID:
+ ret = netsnmp_check_vb_oid(request->requestvb);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTETRIGGERDELTADISCONTINUITYIDWILDCARD:
+ ret = netsnmp_check_vb_truthvalue(request->requestvb);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTETRIGGERDELTADISCONTINUITYIDTYPE:
+ ret = netsnmp_check_vb_int_range(request->requestvb,
+ MTE_DELTAD_TTICKS,
+ MTE_DELTAD_DATETIME);
+ 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;
+ }
+
+ /*
+ * The Event MIB is somewhat ambiguous as to whether the
+ * various trigger table entries can be modified once the
+ * main mteTriggerTable entry has been marked 'active'.
+ * But it's clear from discussion on the DisMan mailing
+ * list is that the intention is not.
+ *
+ * So check for whether this row is already active,
+ * and reject *all* SET requests if it is.
+ */
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ if (entry &&
+ entry->flags & MTE_TRIGGER_FLAG_ACTIVE ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ break;
+
+ case MODE_SET_ACTION:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ if (!entry) {
+ /*
+ * New rows must be created via the RowStatus column
+ * (in the main mteTriggerTable)
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ /* or inconsistentName? */
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * All these assignments are "unfailable", so it's
+ * (reasonably) safe to apply them in the Commit phase
+ */
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERDELTADISCONTINUITYID:
+ if ( snmp_oid_compare(
+ request->requestvb->val.objid,
+ request->requestvb->val_len/sizeof(oid),
+ _sysUpTime_instance, _sysUpTime_inst_len) != 0 ) {
+ memset(entry->mteDeltaDiscontID, 0,
+ sizeof(entry->mteDeltaDiscontID));
+ memcpy(entry->mteDeltaDiscontID,
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ entry->mteDeltaDiscontID_len =
+ request->requestvb->val_len/sizeof(oid);
+ entry->flags &= ~MTE_TRIGGER_FLAG_SYSUPT;
+ }
+ break;
+ case COLUMN_MTETRIGGERDELTADISCONTINUITYIDWILDCARD:
+ if (*request->requestvb->val.integer == TV_TRUE)
+ entry->flags |= MTE_TRIGGER_FLAG_DWILD;
+ else
+ entry->flags &= ~MTE_TRIGGER_FLAG_DWILD;
+ break;
+ case COLUMN_MTETRIGGERDELTADISCONTINUITYIDTYPE:
+ entry->mteDeltaDiscontIDType = *request->requestvb->val.integer;
+ break;
+ }
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerDeltaTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerDeltaTable.h
new file mode 100644
index 0000000000..51f0bdb5f4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerDeltaTable.h
@@ -0,0 +1,20 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.table_data.conf,v 1.8 2005/07/19 14:52:03 dts12 Exp $
+ */
+#ifndef MTETRIGGERDELTATABLE_H
+#define MTETRIGGERDELTATABLE_H
+
+/*
+ * function declarations
+ */
+void init_mteTriggerDeltaTable(void);
+Netsnmp_Node_Handler mteTriggerDeltaTable_handler;
+
+/*
+ * column number definitions for table mteTriggerDeltaTable
+ */
+#define COLUMN_MTETRIGGERDELTADISCONTINUITYID 1
+#define COLUMN_MTETRIGGERDELTADISCONTINUITYIDWILDCARD 2
+#define COLUMN_MTETRIGGERDELTADISCONTINUITYIDTYPE 3
+#endif /* MTETRIGGERDELTATABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerExistenceTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerExistenceTable.c
new file mode 100644
index 0000000000..6974f41844
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerExistenceTable.c
@@ -0,0 +1,255 @@
+/*
+ * DisMan Event MIB:
+ * Implementation of the mteTriggerExistenceTable MIB interface
+ * See 'mteTrigger.c' for active behaviour of this table.
+ *
+ * (based on mib2c.table_data.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/event/mteTrigger.h"
+#include "disman/event/mteTriggerExistenceTable.h"
+
+
+/* Initializes the mteTriggerExistenceTable module */
+void
+init_mteTriggerExistenceTable(void)
+{
+ static oid mteTExistTable_oid[] = { 1, 3, 6, 1, 2, 1, 88, 1, 2, 4 };
+ size_t mteTExistTable_oid_len = OID_LENGTH(mteTExistTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ /*
+ * Ensure the (combined) table container is available...
+ */
+ init_trigger_table_data();
+
+ /*
+ * ... then set up the MIB interface to the mteTriggerExistenceTable slice
+ */
+ reg = netsnmp_create_handler_registration("mteTriggerExistenceTable",
+ mteTriggerExistenceTable_handler,
+ mteTExistTable_oid,
+ mteTExistTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ ASN_OCTET_STR, /* index: mteOwner */
+ /* index: mteTriggerName */
+ ASN_PRIV_IMPLIED_OCTET_STR,
+ 0);
+
+ table_info->min_column = COLUMN_MTETRIGGEREXISTENCETEST;
+ table_info->max_column = COLUMN_MTETRIGGEREXISTENCEEVENT;
+
+ /* Register this using the (common) trigger_table_data container */
+ netsnmp_tdata_register(reg, trigger_table_data, table_info);
+ DEBUGMSGTL(("disman:event:init", "Trigger Exist Table\n"));
+}
+
+
+/** handles requests for the mteTriggerExistenceTable table */
+int
+mteTriggerExistenceTable_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 *tinfo;
+ struct mteTrigger *entry;
+ int ret;
+
+ DEBUGMSGTL(("disman:event:mib", "Exist Table handler (%d)\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ /*
+ * The mteTriggerExistenceTable should only contains entries for
+ * rows where the mteTriggerTest 'existence(0)' bit is set.
+ * So skip entries where this isn't the case.
+ */
+ if (!entry || !(entry->mteTriggerTest & MTE_TRIGGER_EXISTENCE ))
+ continue;
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGEREXISTENCETEST:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *)&entry->mteTExTest, 1);
+ break;
+ case COLUMN_MTETRIGGEREXISTENCESTARTUP:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *)&entry->mteTExStartup, 1);
+ break;
+ case COLUMN_MTETRIGGEREXISTENCEOBJECTSOWNER:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTExObjOwner,
+ strlen(entry->mteTExObjOwner));
+ break;
+ case COLUMN_MTETRIGGEREXISTENCEOBJECTS:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTExObjects,
+ strlen(entry->mteTExObjects));
+ break;
+ case COLUMN_MTETRIGGEREXISTENCEEVENTOWNER:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTExEvOwner,
+ strlen(entry->mteTExEvOwner));
+ break;
+ case COLUMN_MTETRIGGEREXISTENCEEVENT:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTExEvent,
+ strlen(entry->mteTExEvent));
+ break;
+ }
+ }
+ break;
+
+ /*
+ * Write-support
+ */
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ /*
+ * Since the mteTriggerExistenceTable only contains entries for
+ * rows where the mteTriggerTest 'existence(0)' bit is set,
+ * strictly speaking we should reject assignments where
+ * this isn't the case.
+ * But SET requests that include an assignment of the
+ * 'existence(0)' bit at the same time are valid, so would
+ * need to be accepted. Unfortunately, this assignment
+ * is only applied in the COMMIT pass, so it's difficult
+ * to detect whether this holds or not.
+ *
+ * Let's fudge things for now, by processing assignments
+ * even if the 'existence(0)' bit isn't set.
+ */
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGEREXISTENCETEST:
+ case COLUMN_MTETRIGGEREXISTENCESTARTUP:
+ ret = netsnmp_check_vb_type_and_size(
+ request->requestvb, ASN_OCTET_STR, 1);
+ if (ret != SNMP_ERR_NOERROR ) {
+ netsnmp_set_request_error(reqinfo, request, ret );
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+
+ case COLUMN_MTETRIGGEREXISTENCEOBJECTSOWNER:
+ case COLUMN_MTETRIGGEREXISTENCEOBJECTS:
+ case COLUMN_MTETRIGGEREXISTENCEEVENTOWNER:
+ case COLUMN_MTETRIGGEREXISTENCEEVENT:
+ ret = netsnmp_check_vb_type_and_max_size(
+ request->requestvb, ASN_OCTET_STR, MTE_STR1_LEN);
+ 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;
+ }
+
+ /*
+ * The Event MIB is somewhat ambiguous as to whether the
+ * various trigger table entries can be modified once the
+ * main mteTriggerTable entry has been marked 'active'.
+ * But it's clear from discussion on the DisMan mailing
+ * list is that the intention is not.
+ *
+ * So check for whether this row is already active,
+ * and reject *all* SET requests if it is.
+ */
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ if (entry &&
+ entry->flags & MTE_TRIGGER_FLAG_ACTIVE ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ break;
+
+ case MODE_SET_ACTION:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ if (!entry) {
+ /*
+ * New rows must be created via the RowStatus column
+ * (in the main mteTriggerTable)
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ /* or inconsistentName? */
+ return SNMP_ERR_NOERROR;
+
+ }
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * All these assignments are "unfailable", so it's
+ * (reasonably) safe to apply them in the Commit phase
+ */
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGEREXISTENCETEST:
+ entry->mteTExTest = request->requestvb->val.string[0];
+ break;
+ case COLUMN_MTETRIGGEREXISTENCESTARTUP:
+ entry->mteTExStartup = request->requestvb->val.string[0];
+ break;
+ case COLUMN_MTETRIGGEREXISTENCEOBJECTSOWNER:
+ memset(entry->mteTExObjOwner, 0, sizeof(entry->mteTExObjOwner));
+ memcpy(entry->mteTExObjOwner, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGEREXISTENCEOBJECTS:
+ memset(entry->mteTExObjects, 0, sizeof(entry->mteTExObjects));
+ memcpy(entry->mteTExObjects, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGEREXISTENCEEVENTOWNER:
+ memset(entry->mteTExEvOwner, 0, sizeof(entry->mteTExEvOwner));
+ memcpy(entry->mteTExEvOwner, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGEREXISTENCEEVENT:
+ memset(entry->mteTExEvent, 0, sizeof(entry->mteTExEvent));
+ memcpy(entry->mteTExEvent, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ }
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerExistenceTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerExistenceTable.h
new file mode 100644
index 0000000000..c84566052c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerExistenceTable.h
@@ -0,0 +1,23 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.table_data.conf,v 1.8 2005/07/19 14:52:03 dts12 Exp $
+ */
+#ifndef MTETRIGGEREXISTENCETABLE_H
+#define MTETRIGGEREXISTENCETABLE_H
+
+/*
+ * function declarations
+ */
+void init_mteTriggerExistenceTable(void);
+Netsnmp_Node_Handler mteTriggerExistenceTable_handler;
+
+/*
+ * column number definitions for table mteTriggerExistenceTable
+ */
+#define COLUMN_MTETRIGGEREXISTENCETEST 1
+#define COLUMN_MTETRIGGEREXISTENCESTARTUP 2
+#define COLUMN_MTETRIGGEREXISTENCEOBJECTSOWNER 3
+#define COLUMN_MTETRIGGEREXISTENCEOBJECTS 4
+#define COLUMN_MTETRIGGEREXISTENCEEVENTOWNER 5
+#define COLUMN_MTETRIGGEREXISTENCEEVENT 6
+#endif /* MTETRIGGEREXISTENCETABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerTable.c
new file mode 100644
index 0000000000..6d43d2730b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerTable.c
@@ -0,0 +1,451 @@
+/*
+ * DisMan Event MIB:
+ * Implementation of the mteTriggerTable MIB interface
+ * See 'mteTrigger.c' for active behaviour of this table.
+ *
+ * (based on mib2c.table_data.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "utilities/iquery.h"
+#include "disman/event/mteTrigger.h"
+#include "disman/event/mteTriggerTable.h"
+
+
+/** Initializes the mteTriggerTable module */
+void
+init_mteTriggerTable(void)
+{
+ static oid mteTriggerTable_oid[] = { 1, 3, 6, 1, 2, 1, 88, 1, 2, 2 };
+ size_t mteTriggerTable_oid_len = OID_LENGTH(mteTriggerTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ /*
+ * Ensure the (combined) table container is available...
+ */
+ init_trigger_table_data();
+
+ /*
+ * ... then set up the MIB interface to the mteTriggerTable slice
+ */
+ reg = netsnmp_create_handler_registration("mteTriggerTable",
+ mteTriggerTable_handler,
+ mteTriggerTable_oid,
+ mteTriggerTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ ASN_OCTET_STR, /* index: mteOwner */
+ /* index: mteTriggerName */
+ ASN_PRIV_IMPLIED_OCTET_STR,
+ 0);
+
+ table_info->min_column = COLUMN_MTETRIGGERCOMMENT;
+ table_info->max_column = COLUMN_MTETRIGGERENTRYSTATUS;
+
+ /* Register this using the (common) trigger_table_data container */
+ netsnmp_tdata_register(reg, trigger_table_data, table_info);
+ DEBUGMSGTL(("disman:event:init", "Trigger Table\n"));
+}
+
+
+/** handles requests for the mteTriggerTable table */
+int
+mteTriggerTable_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 *tinfo;
+ netsnmp_tdata_row *row;
+ struct mteTrigger *entry;
+ char mteOwner[MTE_STR1_LEN+1];
+ char mteTName[MTE_STR1_LEN+1];
+ long ret;
+
+ DEBUGMSGTL(("disman:event:mib", "Trigger Table handler (%d)\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERCOMMENT:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ entry->mteTriggerComment,
+ strlen(entry->mteTriggerComment));
+ break;
+ case COLUMN_MTETRIGGERTEST:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ &entry->mteTriggerTest, 1);
+ break;
+ case COLUMN_MTETRIGGERSAMPLETYPE:
+ ret = (entry->flags & MTE_TRIGGER_FLAG_DELTA ) ?
+ MTE_SAMPLE_DELTA : MTE_SAMPLE_ABSOLUTE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_MTETRIGGERVALUEID:
+ snmp_set_var_typed_value(request->requestvb, ASN_OBJECT_ID,
+ (u_char *) entry->mteTriggerValueID,
+ entry->mteTriggerValueID_len*sizeof(oid));
+ break;
+ case COLUMN_MTETRIGGERVALUEIDWILDCARD:
+ ret = (entry->flags & MTE_TRIGGER_FLAG_VWILD ) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_MTETRIGGERTARGETTAG:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ entry->mteTriggerTarget,
+ strlen(entry->mteTriggerTarget));
+ break;
+ case COLUMN_MTETRIGGERCONTEXTNAME:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ entry->mteTriggerContext,
+ strlen(entry->mteTriggerContext));
+ break;
+ case COLUMN_MTETRIGGERCONTEXTNAMEWILDCARD:
+ ret = (entry->flags & MTE_TRIGGER_FLAG_CWILD ) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_MTETRIGGERFREQUENCY:
+ snmp_set_var_typed_integer(request->requestvb, ASN_UNSIGNED,
+ entry->mteTriggerFrequency);
+ break;
+ case COLUMN_MTETRIGGEROBJECTSOWNER:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ entry->mteTriggerOOwner,
+ strlen(entry->mteTriggerOOwner));
+ break;
+ case COLUMN_MTETRIGGEROBJECTS:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ entry->mteTriggerObjects,
+ strlen(entry->mteTriggerObjects));
+ break;
+ case COLUMN_MTETRIGGERENABLED:
+ ret = (entry->flags & MTE_TRIGGER_FLAG_ENABLED ) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_MTETRIGGERENTRYSTATUS:
+ ret = (entry->flags & MTE_TRIGGER_FLAG_ACTIVE ) ?
+ RS_ACTIVE : RS_NOTINSERVICE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ }
+ }
+ break;
+
+ /*
+ * Write-support
+ */
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERCOMMENT:
+ case COLUMN_MTETRIGGERTARGETTAG:
+ case COLUMN_MTETRIGGERCONTEXTNAME:
+ ret = netsnmp_check_vb_type_and_max_size(
+ request->requestvb, ASN_OCTET_STR, MTE_STR2_LEN);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTETRIGGERTEST:
+ ret = netsnmp_check_vb_type_and_size(
+ request->requestvb, ASN_OCTET_STR, 1);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTETRIGGERSAMPLETYPE:
+ ret = netsnmp_check_vb_int_range(request->requestvb,
+ MTE_SAMPLE_ABSOLUTE, MTE_SAMPLE_DELTA);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTETRIGGERVALUEID:
+ ret = netsnmp_check_vb_oid(request->requestvb);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTETRIGGERVALUEIDWILDCARD:
+ case COLUMN_MTETRIGGERCONTEXTNAMEWILDCARD:
+ case COLUMN_MTETRIGGERENABLED:
+ ret = netsnmp_check_vb_truthvalue(request->requestvb);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+
+ case COLUMN_MTETRIGGERFREQUENCY:
+ ret = netsnmp_check_vb_uint(request->requestvb);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTETRIGGEROBJECTSOWNER:
+ case COLUMN_MTETRIGGEROBJECTS:
+ ret = netsnmp_check_vb_type_and_max_size(
+ request->requestvb, ASN_OCTET_STR, MTE_STR1_LEN);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTETRIGGERENTRYSTATUS:
+ ret = netsnmp_check_vb_rowstatus(request->requestvb,
+ (entry ? RS_ACTIVE : RS_NONEXISTENT));
+ 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;
+ }
+
+
+ /*
+ * Once a row has been made active, it cannot be
+ * modified except to delete it. There's no good
+ * reason for this, but that's what the MIB says.
+ *
+ * The published version of the Event MIB even forbids
+ * enabling (or disabling) an active row, which
+ * would make this object completely pointless!
+ * Fortunately this ludicrous decision has since been corrected.
+ */
+ if (entry &&
+ entry->flags & MTE_TRIGGER_FLAG_ACTIVE ) {
+ /* check for the acceptable assignments */
+ if ((tinfo->colnum == COLUMN_MTETRIGGERENABLED) ||
+ (tinfo->colnum == COLUMN_MTETRIGGERENTRYSTATUS &&
+ *request->requestvb->val.integer != RS_NOTINSERVICE))
+ continue;
+
+ /* Otherwise, reject this request */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ /*
+ * Create an (empty) new row structure
+ */
+ memset(mteOwner, 0, sizeof(mteOwner));
+ memcpy(mteOwner, tinfo->indexes->val.string,
+ tinfo->indexes->val_len);
+ memset(mteTName, 0, sizeof(mteTName));
+ memcpy(mteTName,
+ tinfo->indexes->next_variable->val.string,
+ tinfo->indexes->next_variable->val_len);
+
+ row = mteTrigger_createEntry(mteOwner, mteTName, 0);
+ if (!row) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+ netsnmp_insert_tdata_row( request, row );
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_FREE:
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ /*
+ * Tidy up after a failed row creation request
+ */
+ entry = (struct mteTrigger *)
+ netsnmp_tdata_extract_entry(request);
+ if (entry &&
+ !(entry->flags & MTE_TRIGGER_FLAG_VALID)) {
+ row = (netsnmp_tdata_row *)
+ netsnmp_tdata_extract_row(request);
+ mteTrigger_removeEntry( row );
+ }
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_ACTION:
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ if (!entry) {
+ /*
+ * New rows must be created via the RowStatus column
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ /* or inconsistentName? */
+ return SNMP_ERR_NOERROR;
+
+ }
+ }
+ break;
+
+ case MODE_SET_UNDO:
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * All these assignments are "unfailable", so it's
+ * (reasonably) safe to apply them in the Commit phase
+ */
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERCOMMENT:
+ memset(entry->mteTriggerComment, 0,
+ sizeof(entry->mteTriggerComment));
+ memcpy(entry->mteTriggerComment,
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERTEST:
+ entry->mteTriggerTest = request->requestvb->val.string[0];
+ break;
+ case COLUMN_MTETRIGGERSAMPLETYPE:
+ if (*request->requestvb->val.integer == MTE_SAMPLE_DELTA)
+ entry->flags |= MTE_TRIGGER_FLAG_DELTA;
+ else
+ entry->flags &= ~MTE_TRIGGER_FLAG_DELTA;
+ break;
+ case COLUMN_MTETRIGGERVALUEID:
+ memset(entry->mteTriggerValueID, 0,
+ sizeof(entry->mteTriggerValueID));
+ memcpy(entry->mteTriggerValueID,
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ entry->mteTriggerValueID_len = request->requestvb->val_len/sizeof(oid);
+ break;
+ case COLUMN_MTETRIGGERVALUEIDWILDCARD:
+ if (*request->requestvb->val.integer == TV_TRUE)
+ entry->flags |= MTE_TRIGGER_FLAG_VWILD;
+ else
+ entry->flags &= ~MTE_TRIGGER_FLAG_VWILD;
+ break;
+ case COLUMN_MTETRIGGERTARGETTAG:
+ memset(entry->mteTriggerTarget, 0,
+ sizeof(entry->mteTriggerTarget));
+ memcpy(entry->mteTriggerTarget,
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERCONTEXTNAME:
+ memset(entry->mteTriggerContext, 0,
+ sizeof(entry->mteTriggerContext));
+ memcpy(entry->mteTriggerContext,
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERCONTEXTNAMEWILDCARD:
+ if (*request->requestvb->val.integer == TV_TRUE)
+ entry->flags |= MTE_TRIGGER_FLAG_CWILD;
+ else
+ entry->flags &= ~MTE_TRIGGER_FLAG_CWILD;
+ break;
+ case COLUMN_MTETRIGGERFREQUENCY:
+ entry->mteTriggerFrequency = *request->requestvb->val.integer;
+ break;
+ case COLUMN_MTETRIGGEROBJECTSOWNER:
+ memset(entry->mteTriggerOOwner, 0,
+ sizeof(entry->mteTriggerOOwner));
+ memcpy(entry->mteTriggerOOwner,
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGEROBJECTS:
+ memset(entry->mteTriggerObjects, 0,
+ sizeof(entry->mteTriggerObjects));
+ memcpy(entry->mteTriggerObjects,
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERENABLED:
+ if (*request->requestvb->val.integer == TV_TRUE)
+ entry->flags |= MTE_TRIGGER_FLAG_ENABLED;
+ else
+ entry->flags &= ~MTE_TRIGGER_FLAG_ENABLED;
+ break;
+ case COLUMN_MTETRIGGERENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_ACTIVE:
+ entry->flags |= MTE_TRIGGER_FLAG_ACTIVE;
+ mteTrigger_enable( entry );
+ break;
+ case RS_CREATEANDGO:
+ entry->flags |= MTE_TRIGGER_FLAG_ACTIVE;
+ entry->flags |= MTE_TRIGGER_FLAG_VALID;
+ entry->session =
+ netsnmp_iquery_pdu_session(reqinfo->asp->pdu);
+ mteTrigger_enable( entry );
+ break;
+ case RS_CREATEANDWAIT:
+ entry->flags |= MTE_TRIGGER_FLAG_VALID;
+ entry->session =
+ netsnmp_iquery_pdu_session(reqinfo->asp->pdu);
+ break;
+
+ case RS_DESTROY:
+ row = (netsnmp_tdata_row *)
+ netsnmp_tdata_extract_row(request);
+ mteTrigger_removeEntry(row);
+ }
+ break;
+ }
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerTable.h
new file mode 100644
index 0000000000..e3826125f8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerTable.h
@@ -0,0 +1,34 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.table_data.conf,v 1.8 2005/07/19 14:52:03 dts12 Exp $
+ */
+#ifndef MTETRIGGERTABLE_H
+#define MTETRIGGERTABLE_H
+
+config_require(utilities/iquery)
+
+/*
+ * function declarations
+ */
+void init_mteTriggerTable(void);
+Netsnmp_Node_Handler mteTriggerTable_handler;
+
+/*
+ * column number definitions for table mteTriggerTable
+ */
+#define COLUMN_MTEOWNER 1
+#define COLUMN_MTETRIGGERNAME 2
+#define COLUMN_MTETRIGGERCOMMENT 3
+#define COLUMN_MTETRIGGERTEST 4
+#define COLUMN_MTETRIGGERSAMPLETYPE 5
+#define COLUMN_MTETRIGGERVALUEID 6
+#define COLUMN_MTETRIGGERVALUEIDWILDCARD 7
+#define COLUMN_MTETRIGGERTARGETTAG 8
+#define COLUMN_MTETRIGGERCONTEXTNAME 9
+#define COLUMN_MTETRIGGERCONTEXTNAMEWILDCARD 10
+#define COLUMN_MTETRIGGERFREQUENCY 11
+#define COLUMN_MTETRIGGEROBJECTSOWNER 12
+#define COLUMN_MTETRIGGEROBJECTS 13
+#define COLUMN_MTETRIGGERENABLED 14
+#define COLUMN_MTETRIGGERENTRYSTATUS 15
+#endif /* MTETRIGGERTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerThresholdTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerThresholdTable.c
new file mode 100644
index 0000000000..16b37e590e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerThresholdTable.c
@@ -0,0 +1,349 @@
+/*
+ * DisMan Event MIB:
+ * Implementation of the mteTriggerThresholdTable MIB interface
+ * See 'mteTrigger.c' for active behaviour of this table.
+ *
+ * (based on mib2c.table_data.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/event/mteTrigger.h"
+#include "disman/event/mteTriggerThresholdTable.h"
+
+
+/** Initializes the mteTriggerThresholdTable module */
+void
+init_mteTriggerThresholdTable(void)
+{
+ static oid mteTThreshTable_oid[] = { 1, 3, 6, 1, 2, 1, 88, 1, 2, 6 };
+ size_t mteTThreshTable_oid_len = OID_LENGTH(mteTThreshTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ /*
+ * Ensure the (combined) table container is available...
+ */
+ init_trigger_table_data();
+
+ /*
+ * ... then set up the MIB interface to the mteTriggerThresholdTable slice
+ */
+ reg = netsnmp_create_handler_registration("mteTriggerThresholdTable",
+ mteTriggerThresholdTable_handler,
+ mteTThreshTable_oid,
+ mteTThreshTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ ASN_OCTET_STR, /* index: mteOwner */
+ /* index: mteTriggerName */
+ ASN_PRIV_IMPLIED_OCTET_STR,
+ 0);
+
+ table_info->min_column = COLUMN_MTETRIGGERTHRESHOLDSTARTUP;
+ table_info->max_column = COLUMN_MTETRIGGERTHRESHOLDDELTAFALLINGEVENT;
+
+ /* Register this using the (common) trigger_table_data container */
+ netsnmp_tdata_register(reg, trigger_table_data, table_info);
+ DEBUGMSGTL(("disman:event:init", "Trigger Threshold Table\n"));
+}
+
+
+/** handles requests for the mteTriggerThresholdTable table */
+int
+mteTriggerThresholdTable_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 *tinfo;
+ struct mteTrigger *entry;
+ int ret;
+
+ DEBUGMSGTL(("disman:event:mib", "Threshold Table handler (%d)\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ /*
+ * The mteTriggerThresholdTable should only contains entries for
+ * rows where the mteTriggerTest 'threshold(2)' bit is set.
+ * So skip entries where this isn't the case.
+ */
+ if (!entry || !(entry->mteTriggerTest & MTE_TRIGGER_THRESHOLD ))
+ continue;
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERTHRESHOLDSTARTUP:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->mteTThStartup);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDRISING:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->mteTThRiseValue);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDFALLING:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->mteTThFallValue);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDDELTARISING:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->mteTThDRiseValue);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDDELTAFALLING:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->mteTThDFallValue);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDOBJECTSOWNER:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTThObjOwner,
+ strlen(entry->mteTThObjOwner));
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDOBJECTS:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTThObjects,
+ strlen(entry->mteTThObjects));
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDRISINGEVENTOWNER:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTThRiseOwner,
+ strlen(entry->mteTThRiseOwner));
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDRISINGEVENT:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTThRiseEvent,
+ strlen(entry->mteTThRiseEvent));
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDFALLINGEVENTOWNER:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTThFallOwner,
+ strlen(entry->mteTThFallOwner));
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDFALLINGEVENT:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTThFallEvent,
+ strlen(entry->mteTThFallEvent));
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDDELTARISINGEVENTOWNER:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTThDRiseOwner,
+ strlen(entry->mteTThDRiseOwner));
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDDELTARISINGEVENT:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTThDRiseEvent,
+ strlen(entry->mteTThDRiseEvent));
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDDELTAFALLINGEVENTOWNER:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTThDFallOwner,
+ strlen(entry->mteTThDFallOwner));
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDDELTAFALLINGEVENT:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char *) entry->mteTThDFallEvent,
+ strlen(entry->mteTThDFallEvent));
+ break;
+ }
+ }
+ break;
+
+ /*
+ * Write-support
+ */
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ /*
+ * Since the mteTriggerThresholdTable only contains entries for
+ * rows where the mteTriggerTest 'threshold(2)' bit is set,
+ * strictly speaking we should reject assignments where
+ * this isn't the case.
+ * But SET requests that include an assignment of the
+ * 'threshold(2)' bit at the same time are valid, so would
+ * need to be accepted. Unfortunately, this assignment
+ * is only applied in the COMMIT pass, so it's difficult
+ * to detect whether this holds or not.
+ *
+ * Let's fudge things for now, by processing assignments
+ * even if the 'threshold(2)' bit isn't set.
+ */
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERTHRESHOLDSTARTUP:
+ ret = netsnmp_check_vb_int_range(request->requestvb,
+ MTE_THRESH_START_RISE,
+ MTE_THRESH_START_RISEFALL );
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDRISING:
+ case COLUMN_MTETRIGGERTHRESHOLDFALLING:
+ case COLUMN_MTETRIGGERTHRESHOLDDELTARISING:
+ case COLUMN_MTETRIGGERTHRESHOLDDELTAFALLING:
+ 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_MTETRIGGERTHRESHOLDOBJECTSOWNER:
+ case COLUMN_MTETRIGGERTHRESHOLDOBJECTS:
+ case COLUMN_MTETRIGGERTHRESHOLDRISINGEVENTOWNER:
+ case COLUMN_MTETRIGGERTHRESHOLDRISINGEVENT:
+ case COLUMN_MTETRIGGERTHRESHOLDFALLINGEVENTOWNER:
+ case COLUMN_MTETRIGGERTHRESHOLDFALLINGEVENT:
+ case COLUMN_MTETRIGGERTHRESHOLDDELTARISINGEVENTOWNER:
+ case COLUMN_MTETRIGGERTHRESHOLDDELTARISINGEVENT:
+ case COLUMN_MTETRIGGERTHRESHOLDDELTAFALLINGEVENTOWNER:
+ case COLUMN_MTETRIGGERTHRESHOLDDELTAFALLINGEVENT:
+ ret = netsnmp_check_vb_type_and_max_size(
+ request->requestvb, ASN_OCTET_STR, MTE_STR1_LEN);
+ 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;
+ }
+
+ /*
+ * The Event MIB is somewhat ambiguous as to whether the
+ * various trigger table entries can be modified once the
+ * main mteTriggerTable entry has been marked 'active'.
+ * But it's clear from discussion on the DisMan mailing
+ * list is that the intention is not.
+ *
+ * So check for whether this row is already active,
+ * and reject *all* SET requests if it is.
+ */
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ if (entry &&
+ entry->flags & MTE_TRIGGER_FLAG_ACTIVE ) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_INCONSISTENTVALUE);
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ break;
+
+ case MODE_SET_ACTION:
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ if (!entry) {
+ /*
+ * New rows must be created via the RowStatus column
+ * (in the main mteTriggerTable)
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ /* or inconsistentName? */
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * All these assignments are "unfailable", so it's
+ * (reasonably) safe to apply them in the Commit phase
+ */
+ for (request = requests; request; request = request->next) {
+ entry = (struct mteTrigger *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_MTETRIGGERTHRESHOLDSTARTUP:
+ entry->mteTThStartup = *request->requestvb->val.integer;
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDRISING:
+ entry->mteTThRiseValue = *request->requestvb->val.integer;
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDFALLING:
+ entry->mteTThFallValue = *request->requestvb->val.integer;
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDDELTARISING:
+ entry->mteTThDRiseValue = *request->requestvb->val.integer;
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDDELTAFALLING:
+ entry->mteTThDFallValue = *request->requestvb->val.integer;
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDOBJECTSOWNER:
+ memset(entry->mteTThObjOwner, 0, sizeof(entry->mteTThObjOwner));
+ memcpy(entry->mteTThObjOwner, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDOBJECTS:
+ memset(entry->mteTThObjects, 0, sizeof(entry->mteTThObjects));
+ memcpy(entry->mteTThObjects, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDRISINGEVENTOWNER:
+ memset(entry->mteTThRiseOwner, 0, sizeof(entry->mteTThRiseOwner));
+ memcpy(entry->mteTThRiseOwner, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDRISINGEVENT:
+ memset(entry->mteTThRiseEvent, 0, sizeof(entry->mteTThRiseEvent));
+ memcpy(entry->mteTThRiseEvent, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDFALLINGEVENTOWNER:
+ memset(entry->mteTThFallOwner, 0, sizeof(entry->mteTThFallOwner));
+ memcpy(entry->mteTThFallOwner, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDFALLINGEVENT:
+ memset(entry->mteTThFallEvent, 0, sizeof(entry->mteTThFallEvent));
+ memcpy(entry->mteTThFallEvent, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDDELTARISINGEVENTOWNER:
+ memset(entry->mteTThDRiseOwner, 0, sizeof(entry->mteTThDRiseOwner));
+ memcpy(entry->mteTThDRiseOwner, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDDELTARISINGEVENT:
+ memset(entry->mteTThDRiseEvent, 0, sizeof(entry->mteTThDRiseEvent));
+ memcpy(entry->mteTThDRiseEvent, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDDELTAFALLINGEVENTOWNER:
+ memset(entry->mteTThDFallOwner, 0, sizeof(entry->mteTThDFallOwner));
+ memcpy(entry->mteTThDFallOwner, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_MTETRIGGERTHRESHOLDDELTAFALLINGEVENT:
+ memset(entry->mteTThDFallEvent, 0, sizeof(entry->mteTThDFallEvent));
+ memcpy(entry->mteTThDFallEvent, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ }
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerThresholdTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerThresholdTable.h
new file mode 100644
index 0000000000..282cc671e2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/event/mteTriggerThresholdTable.h
@@ -0,0 +1,33 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.table_data.conf,v 1.8 2005/07/19 14:52:03 dts12 Exp $
+ */
+#ifndef MTETRIGGERTHRESHOLDTABLE_H
+#define MTETRIGGERTHRESHOLDTABLE_H
+
+/*
+ * function declarations
+ */
+void init_mteTriggerThresholdTable(void);
+Netsnmp_Node_Handler mteTriggerThresholdTable_handler;
+
+/*
+ * column number definitions for table mteTriggerThresholdTable
+ */
+#define COLUMN_MTETRIGGERTHRESHOLDSTARTUP 1
+#define COLUMN_MTETRIGGERTHRESHOLDRISING 2
+#define COLUMN_MTETRIGGERTHRESHOLDFALLING 3
+#define COLUMN_MTETRIGGERTHRESHOLDDELTARISING 4
+#define COLUMN_MTETRIGGERTHRESHOLDDELTAFALLING 5
+#define COLUMN_MTETRIGGERTHRESHOLDOBJECTSOWNER 6
+#define COLUMN_MTETRIGGERTHRESHOLDOBJECTS 7
+#define COLUMN_MTETRIGGERTHRESHOLDRISINGEVENTOWNER 8
+#define COLUMN_MTETRIGGERTHRESHOLDRISINGEVENT 9
+#define COLUMN_MTETRIGGERTHRESHOLDFALLINGEVENTOWNER 10
+#define COLUMN_MTETRIGGERTHRESHOLDFALLINGEVENT 11
+#define COLUMN_MTETRIGGERTHRESHOLDDELTARISINGEVENTOWNER 12
+#define COLUMN_MTETRIGGERTHRESHOLDDELTARISINGEVENT 13
+#define COLUMN_MTETRIGGERTHRESHOLDDELTAFALLINGEVENTOWNER 14
+#define COLUMN_MTETRIGGERTHRESHOLDDELTAFALLINGEVENT 15
+
+#endif /* MTETRIGGERTHRESHOLDTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expErrorTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expErrorTable.c
new file mode 100644
index 0000000000..2604bc3dd1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expErrorTable.c
@@ -0,0 +1,114 @@
+/*
+ * DisMan Expression MIB:
+ * Implementation of the expExpressionErrorTable MIB interface
+ * See 'expExpression.c' for active behaviour of this table.
+ *
+ * (Based on mib2c.table_data.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/expr/expExpression.h"
+#include "disman/expr/expErrorTable.h"
+
+/* Initializes the expExpressionErrorTable module */
+void
+init_expErrorTable(void)
+{
+ static oid expErrorTable_oid[] = { 1, 3, 6, 1, 2, 1, 90, 1, 2, 2 };
+ size_t expErrorTable_oid_len = OID_LENGTH(expErrorTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ /*
+ * Ensure the expression table container is available...
+ */
+ init_expr_table_data();
+
+ /*
+ * ... then set up the MIB interface to the expExpressionErrorTable slice
+ */
+ reg = netsnmp_create_handler_registration("expErrorTable",
+ expErrorTable_handler,
+ expErrorTable_oid,
+ expErrorTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ /* index: expExpressionOwner */
+ ASN_OCTET_STR,
+ /* index: expExpressionName */
+ ASN_OCTET_STR,
+ 0);
+
+ table_info->min_column = COLUMN_EXPERRORTIME;
+ table_info->max_column = COLUMN_EXPERRORINSTANCE;
+
+ /* Register this using the (common) expr_table_data container */
+ netsnmp_tdata_register(reg, expr_table_data, table_info);
+ DEBUGMSGTL(("disman:expr:init", "Expression Error Table container (%x)\n",
+ expr_table_data));
+}
+
+
+/** handles requests for the expExpressionErrorTable table */
+int
+expErrorTable_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 *tinfo;
+ struct expExpression *entry;
+
+ DEBUGMSGTL(("disman:expr:mib", "Expression Error Table handler (%d)\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct expExpression *)
+ netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+ if (!entry || !(entry->flags & EXP_FLAG_VALID))
+ continue;
+
+ /*
+ * "Entries only appear in this table ... when there
+ * has been an error for that [matching] expression"
+ */
+ if (entry->expErrorCount == 0)
+ continue;
+
+ switch (tinfo->colnum) {
+ case COLUMN_EXPERRORTIME:
+ snmp_set_var_typed_integer(request->requestvb, ASN_TIMETICKS,
+ entry->expErrorTime);
+ break;
+ case COLUMN_EXPERRORINDEX:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->expErrorIndex);
+ break;
+ case COLUMN_EXPERRORCODE:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->expErrorCode);
+ break;
+ case COLUMN_EXPERRORINSTANCE:
+ snmp_set_var_typed_value(request->requestvb, ASN_OBJECT_ID,
+ (u_char *) entry->expErrorInstance,
+ entry->expErrorInst_len*sizeof(oid));
+ break;
+ }
+ }
+ break;
+ }
+ DEBUGMSGTL(("disman:expr:mib", "Expression Error handler - done \n"));
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expErrorTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expErrorTable.h
new file mode 100644
index 0000000000..1d8339ed55
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expErrorTable.h
@@ -0,0 +1,21 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.table_data.conf,v 1.11 2005/09/16 11:48:12 dts12 Exp $
+ */
+#ifndef EXPEXPRESSIONERRORTABLE_H
+#define EXPEXPRESSIONERRORTABLE_H
+
+/*
+ * function declarations
+ */
+void init_expErrorTable(void);
+Netsnmp_Node_Handler expErrorTable_handler;
+
+/*
+ * column number definitions for table expExpressionErrorTable
+ */
+#define COLUMN_EXPERRORTIME 1
+#define COLUMN_EXPERRORINDEX 2
+#define COLUMN_EXPERRORCODE 3
+#define COLUMN_EXPERRORINSTANCE 4
+#endif /* EXPEXPRESSIONERRORTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpression.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpression.c
new file mode 100644
index 0000000000..aa618b76cb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpression.c
@@ -0,0 +1,365 @@
+/*
+ * DisMan Expression MIB:
+ * Core implementation of the expression handling behaviour
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/expr/expExpression.h"
+#include "disman/expr/expObject.h"
+
+netsnmp_tdata *expr_table_data;
+
+ /*
+ * Initializes the container for the expExpression table,
+ * regardless of which module initialisation routine is called first.
+ */
+void
+init_expr_table_data(void)
+{
+ DEBUGMSGTL(("disman:expr:init", "init expression container\n"));
+ if (!expr_table_data) {
+ expr_table_data = netsnmp_tdata_create_table("expExpressionTable", 0);
+ DEBUGMSGTL(("disman:expr:init", "create expression container (%x)\n",
+ expr_table_data));
+ }
+}
+
+/** Initialize the expExpression module */
+void
+init_expExpression(void)
+{
+ init_expr_table_data();
+}
+
+
+ /* ===================================================
+ *
+ * APIs for maintaining the contents of the
+ * expression table container.
+ *
+ * =================================================== */
+
+void
+_mteExpr_dump(void)
+{
+ struct mteExpression *entry;
+ netsnmp_tdata_row *row;
+ int i = 0;
+
+ for (row = netsnmp_tdata_row_first(expr_table_data);
+ row;
+ row = netsnmp_tdata_row_next(expr_table_data, row)) {
+ entry = (struct mteExpression *)row->data;
+ DEBUGMSGTL(("disman:expr:dump", "ExpressionTable entry %d: ", i));
+ DEBUGMSGOID(("disman:expr:dump", row->oid_index.oids, row->oid_index.len));
+ DEBUGMSG(("disman:expr:dump", "(%s, %s)",
+ row->indexes->val.string,
+ row->indexes->next_variable->val.string));
+ DEBUGMSG(("disman:expr:dump", ": %x, %x\n", row, entry));
+ i++;
+ }
+ DEBUGMSGTL(("disman:expr:dump", "ExpressionTable %d entries\n", i));
+}
+
+
+
+/*
+ * Create a new row in the expression table
+ */
+struct expExpression *
+expExpression_createEntry(char *expOwner, char *expName, int fixed)
+{
+ netsnmp_tdata_row *row;
+
+ row = expExpression_createRow(expOwner, expName, fixed);
+ return row ? (struct expExpression *)row->data : NULL;
+}
+
+
+netsnmp_tdata_row *
+expExpression_createRow(char *expOwner, char *expName, int fixed)
+{
+ struct expExpression *entry;
+ netsnmp_tdata_row *row;
+ size_t expOwner_len = (expOwner) ? strlen(expOwner) : 0;
+ size_t expName_len = (expName) ? strlen(expName) : 0;
+
+ /*
+ * Create the expExpression entry, and the
+ * (table-independent) row wrapper structure...
+ */
+ entry = SNMP_MALLOC_TYPEDEF(struct expExpression);
+ if (!entry)
+ return NULL;
+
+ row = netsnmp_tdata_create_row();
+ if (!row) {
+ SNMP_FREE(entry);
+ return NULL;
+ }
+ row->data = entry;
+
+ /*
+ * ... initialize this row with the indexes supplied
+ * and the default values for the row...
+ */
+ if (expOwner)
+ memcpy(entry->expOwner, expOwner, expOwner_len);
+ netsnmp_tdata_row_add_index(row, ASN_OCTET_STR,
+ entry->expOwner, expOwner_len);
+ if (expName)
+ memcpy(entry->expName, expName, expName_len);
+ netsnmp_tdata_row_add_index(row, ASN_OCTET_STR,
+ entry->expName, expName_len);
+
+ entry->expValueType = EXPVALTYPE_COUNTER;
+ entry->expErrorCount = 0;
+ if (fixed)
+ entry->flags |= EXP_FLAG_FIXED;
+
+ /*
+ * ... and insert the row into the table container.
+ */
+ netsnmp_tdata_add_row(expr_table_data, row);
+ DEBUGMSGTL(("disman:expr:table", "Expression entry created (%s, %s)\n",
+ expOwner, expName));
+ return row;
+}
+
+/*
+ * Remove a row from the expression table
+ */
+void
+expExpression_removeEntry(netsnmp_tdata_row *row)
+{
+ struct expExpression *entry;
+
+ if (!row)
+ return; /* Nothing to remove */
+ entry = (struct expExpression *)
+ netsnmp_tdata_remove_and_delete_row(expr_table_data, row);
+ if (entry) {
+ /* expExpression_disable( entry ) */
+ SNMP_FREE(entry);
+ }
+}
+
+
+struct expExpression *
+expExpression_getFirstEntry( void )
+{
+ return (struct expExpression *)
+ netsnmp_tdata_row_entry(netsnmp_tdata_row_first(expr_table_data));
+}
+
+struct expExpression *
+expExpression_getNextEntry( char *owner, char *name )
+{
+ netsnmp_variable_list owner_var, name_var;
+
+ memset(&owner_var, 0, sizeof(netsnmp_variable_list));
+ memset(&name_var, 0, sizeof(netsnmp_variable_list));
+ snmp_set_var_typed_value( &owner_var, ASN_OCTET_STR,
+ (u_char*)owner, strlen(owner));
+ snmp_set_var_typed_value( &name_var, ASN_OCTET_STR,
+ (u_char*)name, strlen(name));
+ owner_var.next_variable = &name_var;
+
+ return (struct expExpression *)
+ netsnmp_tdata_row_entry(
+ netsnmp_tdata_row_next_byidx(expr_table_data, &owner_var));
+}
+
+struct expExpression *
+expExpression_getEntry( char *owner, char *name )
+{
+ netsnmp_variable_list owner_var, name_var;
+
+ memset(&owner_var, 0, sizeof(netsnmp_variable_list));
+ memset(&name_var, 0, sizeof(netsnmp_variable_list));
+ snmp_set_var_typed_value( &owner_var, ASN_OCTET_STR,
+ (u_char*)owner, strlen(owner));
+ snmp_set_var_typed_value( &name_var, ASN_OCTET_STR,
+ (u_char*)name, strlen(name));
+ owner_var.next_variable = &name_var;
+
+ return (struct expExpression *)
+ netsnmp_tdata_row_entry(
+ netsnmp_tdata_row_get_byidx(expr_table_data, &owner_var));
+}
+
+
+ /* ===================================================
+ *
+ * APIs for evaluating an expression - data gathering
+ *
+ * =================================================== */
+
+
+
+/*
+ * Gather the data necessary for evaluating an expression.
+ *
+ * This will retrieve *all* the data relevant for all
+ * instances of this expression, rather than just the
+ * just the values needed for expanding a given instance.
+ */
+void
+expExpression_getData( unsigned int reg, void *clientarg )
+{
+ struct expExpression *entry = (struct expExpression *)clientarg;
+ netsnmp_tdata_row *row;
+ netsnmp_variable_list *var;
+ int ret;
+
+ if ( !entry && reg ) {
+ snmp_alarm_unregister( reg );
+ return;
+ }
+
+ if (( entry->expExpression[0] == '\0' ) ||
+ !(entry->flags & EXP_FLAG_ACTIVE) ||
+ !(entry->flags & EXP_FLAG_VALID))
+ return;
+
+ DEBUGMSGTL(("disman:expr:run", "Gathering expression data (%s, %s)\n",
+ entry->expOwner, entry->expName));
+
+ /*
+ * This routine can be called in two situations:
+ * - regularly by 'snmp_alarm' (reg != 0)
+ * (as part of ongoing delta-value sampling)
+ * - on-demand (reg == 0)
+ * (for evaluating a particular entry)
+ *
+ * If a regularly sampled expression (entry->alarm != 0)
+ * is invoked on-demand (reg == 0), then use the most
+ * recent sampled values, rather than retrieving them again.
+ */
+ if ( !reg && entry->alarm )
+ return;
+
+ /*
+ * XXX - may want to implement caching for on-demand evaluation
+ * of non-regularly sampled expressions.
+ */
+
+ /*
+ * For a wildcarded expression, expExpressionPrefix is used
+ * to determine which object instances to retrieve.
+ * (For a non-wildcarded expression, we already know
+ * explicitly which object instances will be needed).
+ *
+ * If we walk this object here, then the results can be
+ * used to build the necessary GET requests for each
+ * individual parameter object (within expObject_getData)
+ *
+ * This will probably be simpler (and definitely more efficient)
+ * than walking the object instances separately and merging
+ * merging the results).
+ *
+ * NB: Releasing any old results is handled by expObject_getData.
+ * Assigning to 'entry->pvars' without first releasing the
+ * previous contents does *not* introduce a memory leak.
+ */
+ if ( entry->expPrefix_len ) {
+ var = (netsnmp_variable_list *)
+ SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ snmp_set_var_objid( var, entry->expPrefix, entry->expPrefix_len);
+ ret = netsnmp_query_walk( var, entry->session );
+ DEBUGMSGTL(("disman:expr:run", "Walk returned %d\n", ret ));
+ entry->pvars = var;
+ }
+
+ /* XXX - retrieve sysUpTime.0 value, and check for discontinuity */
+ /*
+ entry->flags &= ~EXP_FLAG_SYSUT;
+ var = (netsnmp_variable_list *)
+ SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ snmp_set_var_objid( var, sysUT_oid, sysUT_oid_len );
+ netsnmp_query_get( var, entry->session );
+ if ( *var->val.integer != entry->sysUpTime ) {
+ entry->flags |= EXP_FLAG_SYSUT;
+ entry->sysUpTime = *var->val.integer;
+ }
+ snmp_free_varbind(var);
+ */
+
+ /*
+ * Loop through the list of relevant objects,
+ * and retrieve the corresponding values.
+ */
+ for ( row = expObject_getFirst( entry->expOwner, entry->expName );
+ row;
+ row = expObject_getNext( row )) {
+
+ /* XXX - may need to check whether owner/name still match */
+ expObject_getData( entry, (struct expObject *)row->data);
+ }
+}
+
+
+void
+expExpression_enable( struct expExpression *entry )
+{
+ DEBUGMSG(("disman:expr:run", "Enabling %s\n", entry->expName));
+ if (!entry)
+ return;
+
+ if (entry->alarm) {
+ /* or explicitly call expExpression_disable ?? */
+ snmp_alarm_unregister( entry->alarm );
+ entry->alarm = 0;
+ }
+
+ if (entry->expDeltaInterval) {
+ entry->alarm = snmp_alarm_register(
+ entry->expDeltaInterval, SA_REPEAT,
+ expExpression_getData, entry );
+ expExpression_getData( entry->alarm, (void*)entry );
+ }
+}
+
+void
+expExpression_disable( struct expExpression *entry )
+{
+ if (!entry)
+ return;
+
+ if (entry->alarm) {
+ snmp_alarm_unregister( entry->alarm );
+ entry->alarm = 0;
+ /* Perhaps release any previous results ?? */
+ }
+}
+
+
+long _expExpression_MaxCount = 0;
+long _expExpression_countEntries(void)
+{
+ struct expExpression *entry;
+ netsnmp_tdata_row *row;
+ long count = 0;
+
+ for (row = netsnmp_tdata_row_first(expr_table_data);
+ row;
+ row = netsnmp_tdata_row_next(expr_table_data, row)) {
+ entry = (struct expExpression *)row->data;
+ count += entry->count;
+ }
+
+ return count;
+}
+
+long expExpression_getNumEntries(int max)
+{
+ long count;
+ /* XXX - implement some form of caching ??? */
+ count = _expExpression_countEntries();
+ if ( count > _expExpression_MaxCount )
+ _expExpression_MaxCount = count;
+
+ return ( max ? _expExpression_MaxCount : count);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpression.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpression.h
new file mode 100644
index 0000000000..16ee80b205
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpression.h
@@ -0,0 +1,91 @@
+#ifndef EXPEXPRESSION_H
+#define EXPEXPRESSION_H
+
+#include "disman/expr/exp_enum.h"
+
+ /*
+ * Flags relating to the expression table ....
+ */
+#define EXP_FLAG_ACTIVE 0x01 /* for expExpressionEntryStatus */
+#define EXP_FLAG_FIXED 0x02 /* for snmpd.conf persistence */
+#define EXP_FLAG_VALID 0x04 /* for row creation/undo */
+#define EXP_FLAG_SYSUT 0x08 /* sysUpTime.0 discontinuity */
+
+ /*
+ * Standard lengths for various Expression-MIB OCTET STRING objects:
+ * short tags ( 32 characters)
+ * SnmpAdminString-style values (255 characters)
+ * "long" DisplayString values (1024 characters)
+ */
+#define EXP_STR1_LEN 32
+#define EXP_STR2_LEN 255
+#define EXP_STR3_LEN 1024
+
+/*
+ * Data structure for an expression row.
+ * Covers both expExpressionTable and expErrorTable
+ */
+struct expExpression {
+ /*
+ * Index values
+ */
+ char expOwner[ EXP_STR1_LEN+1 ];
+ char expName[ EXP_STR1_LEN+1 ];
+
+ /*
+ * Column values for the main expExpressionTable
+ */
+ char expExpression[ EXP_STR3_LEN+1 ];
+ char expComment[ EXP_STR2_LEN+1 ];
+ oid expPrefix[ MAX_OID_LEN ];
+ size_t expPrefix_len;
+ long expValueType;
+ long expDeltaInterval;
+ u_long expErrorCount;
+
+ /*
+ * Column values for the expExpressionErrorTable
+ */
+ u_long expErrorTime;
+ long expErrorIndex;
+ long expErrorCode;
+ oid expErrorInstance[ MAX_OID_LEN ];
+ size_t expErrorInst_len;
+
+ unsigned int alarm;
+ netsnmp_session *session;
+ netsnmp_variable_list *pvars; /* expPrefix values */
+ long sysUpTime;
+ long count;
+ long flags;
+};
+
+
+ /*
+ * Container structure for the expExpressionTable,
+ * and initialisation routine to create this.
+ */
+extern netsnmp_tdata *expr_table_data;
+extern void init_expr_table_data(void);
+
+/*
+ * function declarations
+ */
+void init_expExpression(void);
+
+struct expExpression *expExpression_createEntry( char *, char *, int);
+netsnmp_tdata_row *expExpression_createRow( char *, char *, int);
+void expExpression_removeEntry( netsnmp_tdata_row *);
+
+struct expExpression *expExpression_getEntry( char *, char *);
+struct expExpression *expExpression_getFirstEntry( void );
+struct expExpression *expExpression_getNextEntry( char *, char *);
+
+void expExpression_enable( struct expExpression *);
+void expExpression_disable( struct expExpression *);
+
+void expExpression_getData( unsigned int, void *);
+void expExpression_evaluate(struct expExpression *);
+long expExpression_getNumEntries(int);
+
+#endif /* EXPEXPRESSIONTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionConf.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionConf.c
new file mode 100644
index 0000000000..743ef9d889
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionConf.c
@@ -0,0 +1,286 @@
+/*
+ * DisMan Expression MIB:
+ * Implementation of the expression table configuration handling.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "utilities/iquery.h"
+#include "disman/expr/expExpression.h"
+#include "disman/expr/expObject.h"
+#include "disman/expr/expExpressionConf.h"
+
+/* Initializes the expExpressionConf module */
+void
+init_expExpressionConf(void)
+{
+ init_expr_table_data();
+
+ /*
+ * Register config handler for user-level (fixed) expressions...
+ * XXX - TODO
+ */
+ snmpd_register_config_handler("expression", parse_expression, NULL, NULL);
+
+ /*
+ * ... and persistent storage of dynamically configured entries.
+ */
+ snmpd_register_config_handler("_expETable", parse_expETable, NULL, NULL);
+
+ /*
+ * Register to save (non-fixed) entries when the agent shuts down
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_expETable, NULL);
+}
+
+
+
+/* ================================================
+ *
+ * Handlers for loading/storing persistent expression entries
+ *
+ * ================================================ */
+
+char *
+_parse_expECols( char *line, struct expExpression *entry )
+{
+ void *vp;
+ size_t tmp;
+ size_t len;
+
+ len = EXP_STR3_LEN; vp = entry->expExpression;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ entry->expValueType = tmp;
+
+ len = EXP_STR2_LEN; vp = entry->expComment;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ entry->expDeltaInterval = tmp;
+
+ vp = entry->expPrefix;
+ entry->expPrefix_len = MAX_OID_LEN;
+ line = read_config_read_data(ASN_OBJECT_ID, line, &vp,
+ &entry->expPrefix_len);
+
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ entry->flags |= (tmp & EXP_FLAG_ACTIVE);
+
+ return line;
+}
+
+
+void
+parse_expression(const char *token, char *line)
+{
+ char buf[ SPRINT_MAX_LEN];
+ char ename[EXP_STR1_LEN+1];
+ oid name_buf[MAX_OID_LEN];
+ size_t name_len;
+ char *cp, *cp2;
+ struct expExpression *entry;
+ struct expObject *object;
+ netsnmp_session *sess = NULL;
+ int type=EXPVALTYPE_COUNTER;
+ int i=1;
+
+ DEBUGMSGTL(("disman:expr:conf", "Parsing expression config... "));
+
+ memset(buf, 0, sizeof(buf));
+ memset(ename, 0, sizeof(ename));
+
+ for (cp = copy_nword(line, buf, SPRINT_MAX_LEN);
+ ;
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN)) {
+
+ if (buf[0] == '-' ) {
+ switch (buf[1]) {
+ case 't': /* type */
+ switch (buf[2]) {
+ case 'c': type = EXPVALTYPE_COUNTER; break;
+ case 'u': type = EXPVALTYPE_UNSIGNED; break;
+ case 't': type = EXPVALTYPE_TIMETICKS; break;
+ case 'i': type = EXPVALTYPE_INTEGER; break;
+ case 'a': type = EXPVALTYPE_IPADDRESS; break;
+ case 's': type = EXPVALTYPE_STRING; break;
+ case 'o': type = EXPVALTYPE_OID; break;
+ case 'C': type = EXPVALTYPE_COUNTER64; break;
+ }
+ break;
+ case 'u': /* user */
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ sess = netsnmp_iquery_user_session(buf);
+ break;
+ }
+ } else {
+ break;
+ }
+ }
+
+ memcpy(ename, buf, sizeof(ename));
+ /* cp = copy_nword(line, ename, sizeof(ename)); */
+ entry = expExpression_createEntry( "snmpd.conf", ename, 1 );
+ if (!entry)
+ return;
+
+ cp2 = entry->expExpression;
+ while (cp && *cp) {
+ /*
+ * Copy everything that can't possibly be a MIB
+ * object name into the expression field...
+ */
+ /* XXX - TODO - Handle string literals */
+ if (!isalpha(*cp)) {
+ *cp2++ = *cp++;
+ continue;
+ }
+ /*
+ * ... and copy the defined functions across as well
+ * XXX - TODO
+ */
+
+ /*
+ * Anything else is presumably a MIB object (or instance).
+ * Create an entry in the expObjectTable, and insert a
+ * corresponding parameter in the expression itself.
+ */
+ name_len = MAX_OID_LEN;
+ cp = copy_nword(cp, buf, SPRINT_MAX_LEN);
+ snmp_parse_oid( buf, name_buf, &name_len );
+ object = expObject_createEntry( "snmpd.conf", ename, i, 1 );
+ memcpy( object->expObjectID, name_buf, name_len*sizeof(oid));
+ object->expObjectID_len = name_len;
+ object->flags |= EXP_OBJ_FLAG_VALID
+ | EXP_OBJ_FLAG_ACTIVE
+ | EXP_OBJ_FLAG_OWILD;
+ /*
+ * The first such object can also be used as the
+ * expExpressionPrefix
+ */
+ if ( i == 1 ) {
+ memcpy( entry->expPrefix, name_buf, name_len*sizeof(oid));
+ entry->expPrefix_len = name_len;
+ object->flags |= EXP_OBJ_FLAG_PREFIX;
+ }
+ sprintf(cp2, "$%d", i++);
+ while (*cp2)
+ cp2++; /* Skip over this parameter */
+ }
+
+ if (sess)
+ entry->session = sess;
+ else
+ entry->session = netsnmp_query_get_default_session();
+ entry->expDeltaInterval = 10;
+ entry->expValueType = type;
+ entry->flags |= EXP_FLAG_VALID
+ | EXP_FLAG_ACTIVE;
+ expExpression_enable( entry );
+ DEBUGMSG(("disman:expr:conf", "(%s, %s)\n", ename,
+ entry->expExpression));
+}
+
+void
+parse_expETable(const char *token, char *line)
+{
+ char owner[EXP_STR1_LEN+1];
+ char ename[EXP_STR1_LEN+1];
+ void *vp;
+ size_t len;
+ struct expExpression *entry;
+
+ DEBUGMSGTL(("disman:expr:conf", "Parsing mteExpressionTable config... "));
+
+ /*
+ * Read in the index information for this entry
+ * and create a (non-fixed) data structure for it.
+ */
+ memset( owner, 0, sizeof(owner));
+ memset( ename, 0, sizeof(ename));
+ len = EXP_STR1_LEN; vp = owner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = EXP_STR1_LEN; vp = ename;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ entry = expExpression_createEntry( owner, ename, 0 );
+
+ DEBUGMSG(("disman:expr:conf", "(%s, %s) ", owner, ename));
+
+ /*
+ * Read in the accessible column values.
+ */
+ line = _parse_expECols( line, entry );
+ /*
+ * XXX - Will need to read in the 'iquery' access information
+ */
+ entry->flags |= EXP_FLAG_VALID;
+
+ DEBUGMSG(("disman:expr:conf", "\n"));
+}
+
+
+int
+store_expETable(int majorID, int minorID, void *serverarg, void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr;
+ void *vp;
+ size_t tint;
+ netsnmp_tdata_row *row;
+ struct expExpression *entry;
+
+
+ DEBUGMSGTL(("disman:expr:conf", "Storing expExpressionTable config:\n"));
+
+ for (row = netsnmp_tdata_row_first( expr_table_data );
+ row;
+ row = netsnmp_tdata_row_next( expr_table_data, row )) {
+
+ /*
+ * Skip entries that were set up via static config directives
+ */
+ entry = (struct expExpression *)netsnmp_tdata_row_entry( row );
+ if ( entry->flags & EXP_FLAG_FIXED )
+ continue;
+
+ DEBUGMSGTL(("disman:expr:conf", " Storing (%s %s)\n",
+ entry->expOwner, entry->expName));
+
+ /*
+ * Save the basic expExpression entry
+ */
+ memset(line, 0, sizeof(line));
+ strcat(line, "_expETable ");
+ cptr = line + strlen(line);
+
+ vp = entry->expOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->expName; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+
+ vp = entry->expExpression; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ tint = entry->expValueType;
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+ vp = entry->expComment; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ tint = entry->expDeltaInterval;
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+
+ vp = entry->expPrefix;
+ tint = entry->expPrefix_len;
+ cptr = read_config_store_data( ASN_OBJECT_ID, cptr, &vp, &tint );
+
+ tint = entry->flags;
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+
+ /* XXX - Need to store the 'iquery' access information */
+ snmpd_store_config(line);
+ }
+
+ DEBUGMSGTL(("disman:expr:conf", " done.\n"));
+ return SNMPERR_SUCCESS;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionConf.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionConf.h
new file mode 100644
index 0000000000..2729109637
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionConf.h
@@ -0,0 +1,10 @@
+#ifndef EXPEXPRESSIONCONF_H
+#define EXPEXPRESSIONCONF_H
+
+void init_expExpressionConf(void);
+
+void parse_expression(const char *, char *);
+void parse_expETable( const char *, char *);
+SNMPCallback store_expETable;
+
+#endif /* EXPEXPRESSIONCONF_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionTable.c
new file mode 100644
index 0000000000..c00ed4907f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionTable.c
@@ -0,0 +1,337 @@
+/*
+ * DisMan Expression MIB:
+ * Implementation of the expExpressionTable MIB interface
+ * See 'expExpression.c' for active behaviour of this table.
+ *
+ * (Based on mib2c.table_data.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "utilities/iquery.h"
+#include "disman/expr/expExpression.h"
+#include "disman/expr/expExpressionTable.h"
+
+/* Initializes the expExpressionTable module */
+void
+init_expExpressionTable(void)
+{
+ static oid expExpressionTable_oid[] = { 1, 3, 6, 1, 2, 1, 90, 1, 2, 1 };
+ size_t expExpressionTable_oid_len = OID_LENGTH(expExpressionTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ /*
+ * Ensure the expression table container is available...
+ */
+ init_expr_table_data();
+
+ /*
+ * ... then set up the MIB interface to the expExpressionTable slice
+ */
+ reg = netsnmp_create_handler_registration("expExpressionTable",
+ expExpressionTable_handler,
+ expExpressionTable_oid,
+ expExpressionTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ /* index: expExpressionOwner */
+ ASN_OCTET_STR,
+ /* index: expExpressionName */
+ ASN_OCTET_STR,
+ 0);
+
+ table_info->min_column = COLUMN_EXPEXPRESSION;
+ table_info->max_column = COLUMN_EXPEXPRESSIONENTRYSTATUS;
+
+ /* Register this using the (common) expr_table_data container */
+ netsnmp_tdata_register(reg, expr_table_data, table_info);
+ DEBUGMSGTL(("disman:expr:init", "Expression Table container (%x)\n",
+ expr_table_data));
+}
+
+
+/** handles requests for the expExpressionTable table */
+int
+expExpressionTable_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 *tinfo;
+ netsnmp_tdata_row *row;
+ struct expExpression *entry;
+ char expOwner[EXP_STR1_LEN+1];
+ char expName[ EXP_STR1_LEN+1];
+ long ret;
+
+ DEBUGMSGTL(("disman:expr:mib", "Expression Table handler (%d)\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct expExpression *)
+ netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+ if (!entry || !(entry->flags & EXP_FLAG_VALID))
+ continue;
+
+ switch (tinfo->colnum) {
+ case COLUMN_EXPEXPRESSION:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char*)entry->expExpression,
+ strlen(entry->expExpression));
+ break;
+ case COLUMN_EXPEXPRESSIONVALUETYPE:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->expValueType);
+ break;
+ case COLUMN_EXPEXPRESSIONCOMMENT:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ (u_char*)entry->expComment,
+ strlen(entry->expComment));
+ break;
+ case COLUMN_EXPEXPRESSIONDELTAINTERVAL:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->expDeltaInterval);
+ break;
+ case COLUMN_EXPEXPRESSIONPREFIX:
+ /*
+ * XXX - Need to search expObjectTable for a suitable OID
+ */
+ /*
+ * Empty OIDs (len=0) are converted into .0.0
+ * by the SNMP library automatically :-(
+ */
+ if ( entry->expPrefix_len ) {
+ snmp_set_var_typed_value(request->requestvb, ASN_OBJECT_ID,
+ (u_char *) entry->expPrefix,
+ entry->expPrefix_len*sizeof(oid));
+ } else {
+ /* XXX - possibly not needed */
+ request->requestvb->type = ASN_OBJECT_ID;
+ request->requestvb->val_len = 0;
+ }
+ break;
+ case COLUMN_EXPEXPRESSIONERRORS:
+ snmp_set_var_typed_integer(request->requestvb, ASN_COUNTER,
+ entry->expErrorCount);
+ break;
+ case COLUMN_EXPEXPRESSIONENTRYSTATUS:
+ /* What would indicate 'notReady' ? */
+ ret = (entry->flags & EXP_FLAG_ACTIVE) ?
+ RS_ACTIVE : RS_NOTINSERVICE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ }
+ }
+ break;
+
+ /*
+ * Write-support
+ */
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request = request->next) {
+ entry = (struct expExpression *)
+ netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_EXPEXPRESSION:
+ ret = netsnmp_check_vb_type_and_max_size(
+ request->requestvb, ASN_OCTET_STR, EXP_STR3_LEN);
+ /* XXX - check new expression is syntactically valid */
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_EXPEXPRESSIONVALUETYPE:
+ ret = netsnmp_check_vb_int_range(request->requestvb, 1, 8);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_EXPEXPRESSIONCOMMENT:
+ ret = netsnmp_check_vb_type_and_max_size(
+ request->requestvb, ASN_OCTET_STR, EXP_STR2_LEN);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_EXPEXPRESSIONDELTAINTERVAL:
+ ret = netsnmp_check_vb_int_range(request->requestvb, 0, 86400);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_EXPEXPRESSIONENTRYSTATUS:
+ ret = netsnmp_check_vb_rowstatus(request->requestvb,
+ (entry ? RS_ACTIVE : RS_NONEXISTENT));
+ 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) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_EXPEXPRESSIONENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ /*
+ * Create an (empty) new row structure
+ */
+ memset(expOwner, 0, sizeof(expOwner));
+ memcpy(expOwner, tinfo->indexes->val.string,
+ tinfo->indexes->val_len);
+ memset(expName, 0, sizeof(expName));
+ memcpy(expName,
+ tinfo->indexes->next_variable->val.string,
+ tinfo->indexes->next_variable->val_len);
+
+ row = expExpression_createRow(expOwner, expName, 0);
+ if (!row) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+ netsnmp_insert_tdata_row( request, row );
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_FREE:
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_EXPEXPRESSIONENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ /*
+ * Tidy up after a failed row creation request
+ */
+ entry = (struct expExpression *)
+ netsnmp_tdata_extract_entry(request);
+ if (entry &&
+ !(entry->flags & EXP_FLAG_VALID)) {
+ row = (netsnmp_tdata_row *)
+ netsnmp_tdata_extract_row(request);
+ expExpression_removeEntry( row );
+ }
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_ACTION:
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+ entry = (struct expExpression *)
+ netsnmp_tdata_extract_entry(request);
+ if (!entry) {
+ /*
+ * New rows must be created via the RowStatus column
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ /* or inconsistentName? */
+ return SNMP_ERR_NOERROR;
+
+ }
+ }
+ break;
+
+ case MODE_SET_UNDO:
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * All these assignments are "unfailable", so it's
+ * (reasonably) safe to apply them in the Commit phase
+ */
+ for (request = requests; request; request = request->next) {
+ entry = (struct expExpression *)
+ netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_EXPEXPRESSION:
+ memset(entry->expExpression, 0, EXP_STR3_LEN+1);
+ memcpy(entry->expExpression,
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_EXPEXPRESSIONVALUETYPE:
+ entry->expValueType = *request->requestvb->val.integer;
+ break;
+ case COLUMN_EXPEXPRESSIONCOMMENT:
+ memset(entry->expComment, 0, EXP_STR2_LEN+1);
+ memcpy(entry->expComment,
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_EXPEXPRESSIONDELTAINTERVAL:
+ entry->expDeltaInterval = *request->requestvb->val.integer;
+ break;
+ case COLUMN_EXPEXPRESSIONENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_ACTIVE:
+ entry->flags |= EXP_FLAG_ACTIVE;
+ expExpression_enable( entry );
+ break;
+ case RS_NOTINSERVICE:
+ entry->flags &= ~EXP_FLAG_ACTIVE;
+ expExpression_disable( entry );
+ break;
+ case RS_CREATEANDGO:
+ entry->flags |= EXP_FLAG_ACTIVE;
+ entry->flags |= EXP_FLAG_VALID;
+ entry->session =
+ netsnmp_iquery_pdu_session(reqinfo->asp->pdu);
+ expExpression_enable( entry );
+ break;
+ case RS_CREATEANDWAIT:
+ entry->flags |= EXP_FLAG_VALID;
+ entry->session =
+ netsnmp_iquery_pdu_session(reqinfo->asp->pdu);
+ break;
+
+ case RS_DESTROY:
+ row = (netsnmp_tdata_row *)
+ netsnmp_tdata_extract_row(request);
+ expExpression_removeEntry(row);
+ }
+ }
+ }
+ break;
+ }
+ DEBUGMSGTL(("disman:expr:mib", "Expression Table handler - done \n"));
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionTable.h
new file mode 100644
index 0000000000..a32d8f506f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expExpressionTable.h
@@ -0,0 +1,26 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.table_data.conf,v 1.11 2005/09/16 11:48:12 dts12 Exp $
+ */
+#ifndef EXPEXPRESSIONTABLE_H
+#define EXPEXPRESSIONTABLE_H
+
+/*
+ * function declarations
+ */
+void init_expExpressionTable(void);
+Netsnmp_Node_Handler expExpressionTable_handler;
+
+/*
+ * column number definitions for table expExpressionTable
+ */
+#define COLUMN_EXPEXPRESSIONOWNER 1
+#define COLUMN_EXPEXPRESSIONNAME 2
+#define COLUMN_EXPEXPRESSION 3
+#define COLUMN_EXPEXPRESSIONVALUETYPE 4
+#define COLUMN_EXPEXPRESSIONCOMMENT 5
+#define COLUMN_EXPEXPRESSIONDELTAINTERVAL 6
+#define COLUMN_EXPEXPRESSIONPREFIX 7
+#define COLUMN_EXPEXPRESSIONERRORS 8
+#define COLUMN_EXPEXPRESSIONENTRYSTATUS 9
+#endif /* EXPEXPRESSIONTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObject.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObject.c
new file mode 100644
index 0000000000..ddb071b21b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObject.c
@@ -0,0 +1,346 @@
+/*
+ * DisMan Expression MIB:
+ * Core implementation of expression object handling
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/expr/expObject.h"
+#include "disman/expr/expExpression.h"
+
+netsnmp_tdata *expObject_table_data;
+
+ /*
+ * Initializes the container for the expression object table,
+ * regardless of which module is initialised first.
+ */
+void
+init_expObject_table_data(void)
+{
+ DEBUGMSGTL(("disman:expr:init", "init expObject container\n"));
+ if (!expObject_table_data) {
+ expObject_table_data = netsnmp_tdata_create_table("expObjectTable", 0);
+ DEBUGMSGTL(("disman:expr:init", "create expObject container (%x)\n",
+ expObject_table_data));
+ }
+}
+
+/* Initialize the expObject module */
+void
+init_expObject(void)
+{
+ init_expObject_table_data();
+}
+
+
+/*
+ * Create a new row in the object table
+ */
+struct expObject *
+expObject_createEntry(char *expOwner, char *expName, long expIndex, int fixed)
+{
+ netsnmp_tdata_row *row;
+
+ row = expObject_createRow(expOwner, expName, expIndex, fixed);
+ return row ? (struct expObject *)row->data : NULL;
+}
+
+netsnmp_tdata_row *
+expObject_createRow( char *expOwner, char *expName, long expIndex, int fixed)
+{
+ struct expObject *entry;
+ netsnmp_tdata_row *row;
+ size_t expOwner_len = (expOwner) ? strlen(expOwner) : 0;
+ size_t expName_len = (expName) ? strlen(expName) : 0;
+
+ /*
+ * Create the expObject entry, and the
+ * (table-independent) row wrapper structure...
+ */
+ entry = SNMP_MALLOC_TYPEDEF(struct expObject);
+ if (!entry)
+ return NULL;
+
+ row = netsnmp_tdata_create_row();
+ if (!row) {
+ SNMP_FREE(entry);
+ return NULL;
+ }
+ row->data = entry;
+
+ /*
+ * ... initialize this row with the indexes supplied
+ * and the default values for the row...
+ */
+ if (expOwner)
+ memcpy(entry->expOwner, expOwner, expOwner_len);
+ netsnmp_tdata_row_add_index(row, ASN_OCTET_STR,
+ entry->expOwner, expOwner_len);
+ if (expName)
+ memcpy(entry->expName, expName, expName_len);
+ netsnmp_tdata_row_add_index(row, ASN_OCTET_STR,
+ entry->expName, expName_len);
+ entry->expObjectIndex = expIndex;
+ netsnmp_tdata_row_add_index(row, ASN_INTEGER,
+ &entry->expObjectIndex, sizeof(long));
+
+ entry->expObjectSampleType = 1; /* absoluteValue */
+ entry->expObjDiscontinuityType = 1; /* timeTicks */
+ if (fixed)
+ entry->flags |= EXP_OBJ_FLAG_FIXED;
+
+ /*
+ * ... and insert the row into the table container.
+ */
+ netsnmp_tdata_add_row(expObject_table_data, row);
+ return row;
+}
+
+/*
+ * Remove a row from the expression object table
+ */
+void
+expObject_removeEntry(netsnmp_tdata_row * row)
+{
+ struct expObject *entry;
+
+ if (!row)
+ return; /* Nothing to remove */
+ entry = (struct expObject *)
+ netsnmp_tdata_remove_and_delete_row(expObject_table_data, row);
+ if (entry) {
+ if (entry->vars ) snmp_free_varbind( entry->vars );
+ if (entry->old_vars ) snmp_free_varbind( entry->old_vars );
+ if (entry->dvars ) snmp_free_varbind( entry->dvars );
+ if (entry->old_dvars ) snmp_free_varbind( entry->old_dvars );
+ if (entry->cvars ) snmp_free_varbind( entry->cvars );
+ SNMP_FREE(entry);
+ }
+}
+
+
+netsnmp_tdata_row *
+expObject_getFirst( char *expOwner, char *expName )
+{
+ netsnmp_tdata_row *row;
+ struct expObject *entry;
+ netsnmp_variable_list owner_var;
+ netsnmp_variable_list name_var;
+
+ if (!expOwner || !expName)
+ return NULL;
+
+ /*
+ * Find the first object entry that could potentially
+ * refer to the specified expression...
+ */
+ memset(&owner_var, 0, sizeof(netsnmp_variable_list));
+ memset(&name_var, 0, sizeof(netsnmp_variable_list));
+ snmp_set_var_typed_value( &owner_var, ASN_OCTET_STR,
+ (u_char*)expOwner, strlen(expOwner));
+ snmp_set_var_typed_value( &name_var, ASN_OCTET_STR,
+ (u_char*)expName, strlen(expName));
+ owner_var.next_variable = &name_var;
+ row = netsnmp_tdata_row_next_byidx( expObject_table_data, &owner_var );
+
+ /*
+ * ... and check that it does!
+ */
+ if (!row || !row->data)
+ return NULL;
+ entry = (struct expObject *)row->data;
+
+ if ((strcmp( entry->expOwner, expOwner ) != 0) ||
+ (strcmp( entry->expName, expName ) != 0))
+ return NULL;
+
+ return row;
+}
+
+netsnmp_tdata_row *
+expObject_getNext( netsnmp_tdata_row *thisRow )
+{
+ struct expObject *thisEntry;
+ struct expObject *nextEntry;
+ netsnmp_tdata_row *nextRow;
+
+ if (!thisRow || !thisRow->data)
+ return NULL;
+ thisEntry = (struct expObject *)thisRow->data;
+
+ /*
+ * Retrieve the next row, and check whether this
+ * refers to the same expression too.
+ */
+ nextRow = netsnmp_tdata_row_next( expObject_table_data, thisRow );
+
+ if (!nextRow || !nextRow->data)
+ return NULL;
+ nextEntry = (struct expObject *)nextRow->data;
+
+ if ((strcmp( nextEntry->expOwner, thisEntry->expOwner ) != 0) ||
+ (strcmp( nextEntry->expName, thisEntry->expName ) != 0))
+ return NULL;
+
+ return nextRow;
+}
+
+
+netsnmp_variable_list *
+_expObject_buildList( oid *root, size_t root_len, size_t prefix_len,
+ netsnmp_variable_list *template_list )
+{
+ netsnmp_variable_list *query_list = NULL;
+ netsnmp_variable_list *vp1, *vp2 = NULL;
+ oid name[ MAX_OID_LEN ];
+ int i;
+
+ if ( prefix_len ) {
+ /*
+ * For wildcarded objects, build a list of all relevant
+ * instances, using the template_list to provide the
+ * necessary instance suffixes.
+ */
+ memset( name, 0, sizeof(name));
+ memcpy( name, root, root_len*sizeof(oid));
+ for ( vp1 = template_list; vp1; vp1=vp1->next_variable ) {
+ /*
+ * Append a new varbind to the list for this object ...
+ */
+ if ( !query_list ) {
+ query_list = (netsnmp_variable_list*)
+ SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ vp2 = query_list;
+ } else {
+ vp2->next_variable = (netsnmp_variable_list*)
+ SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ vp2 = vp2->next_variable;
+ }
+ /*
+ * ... and set the OID using the template suffix
+ */
+ for ( i=0; i <= vp1->name_length - prefix_len; i++)
+ name[ root_len+i ] = vp1->name[ prefix_len+i ];
+ snmp_set_var_objid( vp2, name, root_len+i );
+ }
+ } else {
+ /*
+ * Otherwise, just use the (single) OID provided.
+ */
+ query_list = (netsnmp_variable_list*)
+ SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ snmp_set_var_objid( query_list, root, root_len );
+ }
+ return query_list;
+}
+
+
+void
+expObject_getData( struct expExpression *expr, struct expObject *obj )
+{
+ netsnmp_variable_list *var;
+ int res;
+
+ /*
+ * Retrieve and store the basic object value(s)
+ * (keeping the previous values if necessary)
+ */
+ if (obj->flags & EXP_OBJ_FLAG_PREFIX ) {
+ /*
+ * If this is the expExpressionPrefix object, then
+ * we already have the necessary list of values.
+ * There's no need to retrieve it again.
+ * This also takes care of releasing the prefix list
+ * once the results are no longer needed.
+ */
+ var = expr->pvars;
+ } else {
+ if (!(obj->flags & EXP_OBJ_FLAG_OWILD ))
+ /*
+ * Set up the request 'list' for an
+ * exact (non-wildcarded) object.
+ */
+ var = _expObject_buildList( obj->expObjectID,
+ obj->expObjectID_len, 0, NULL );
+ else {
+ if ( !expr->expPrefix_len ) {
+ /*
+ * You can't really have wildcarded objects unless
+ * the expression as a whole is wildcarded too.
+ */
+ return;
+ }
+ /*
+ * Set up the request list for a wildcarded object
+ */
+ var = _expObject_buildList( obj->expObjectID,
+ obj->expObjectID_len,
+ expr->expPrefix_len,
+ expr->pvars );
+ }
+ res = netsnmp_query_get( var, expr->session );
+ }
+
+ if ( obj->expObjectSampleType != EXPSAMPLETYPE_ABSOLUTE ) {
+ /*
+ * For Delta (and Changed) samples, we need
+ * to store the previous value as well.
+ */
+ if ( obj->old_vars )
+ snmp_free_varbind( obj->old_vars );
+ obj->old_vars = obj->vars;
+ } else
+ snmp_free_varbind( obj->vars );
+
+ obj->vars = var;
+
+
+ /*
+ * For Delta samples, there may be a discontinuity marker
+ * (or set of wildcarded markers) to be sampled as well.
+ * This necessarily requires storing the previous marker(s).
+ */
+ if (( obj->expObjectSampleType != EXPSAMPLETYPE_ABSOLUTE ) &&
+ ( obj->flags & EXP_OBJ_FLAG_DDISC )) {
+
+ if ( obj->flags & EXP_OBJ_FLAG_DWILD )
+ var = _expObject_buildList( obj->expObjDeltaD,
+ obj->expObjDeltaD_len,
+ expr->expPrefix_len,
+ expr->pvars );
+ else
+ var = _expObject_buildList( obj->expObjDeltaD,
+ obj->expObjDeltaD_len, 0, NULL );
+ res = netsnmp_query_get( var, expr->session );
+ if ( obj->old_dvars )
+ snmp_free_varbind( obj->old_dvars );
+ obj->old_dvars = obj->dvars;
+ obj->dvars = var;
+ }
+
+ /*
+ * If there's an expObjectConditional value specified
+ * (or set of wildcarded values) then add these to the
+ * ever-growing collection of retrieved values.
+ */
+ if ( obj->expObjCond_len ) {
+ if ( obj->flags & EXP_OBJ_FLAG_CWILD )
+ var = _expObject_buildList( obj->expObjCond,
+ obj->expObjCond_len,
+ expr->expPrefix_len,
+ expr->pvars );
+ else
+ var = _expObject_buildList( obj->expObjCond,
+ obj->expObjCond_len, 0, NULL );
+ /*
+ * XXX - Check when to use GetNext
+ *
+ * (The MIB description seems bogus?)
+ */
+ res = netsnmp_query_get( var, expr->session );
+ if ( obj->cvars )
+ snmp_free_varbind( obj->cvars );
+ obj->cvars = var;
+ }
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObject.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObject.h
new file mode 100644
index 0000000000..5b386c2df0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObject.h
@@ -0,0 +1,77 @@
+#ifndef EXPOBJECT_H
+#define EXPOBJECT_H
+
+#include "disman/expr/expExpression.h"
+
+ /*
+ * Flags relating to the expression object table
+ */
+#define EXP_OBJ_FLAG_OWILD 0x01 /* for expObjectIDWildcard */
+#define EXP_OBJ_FLAG_DDISC 0x02 /* non-trivial expObjDiscontinuityID */
+#define EXP_OBJ_FLAG_DWILD 0x04 /* for expObjDiscontinuityIDWildcard */
+#define EXP_OBJ_FLAG_CWILD 0x08 /* for expObjConditionalWildcard */
+#define EXP_OBJ_FLAG_PREFIX 0x10 /* expExpressionPrefix object */
+#define EXP_OBJ_FLAG_ACTIVE 0x20 /* for expObjectEntryStatus */
+#define EXP_OBJ_FLAG_FIXED 0x40 /* for snmpd.conf persistence */
+#define EXP_OBJ_FLAG_VALID 0x80 /* for row creation/undo */
+
+ /*
+ * Standard lengths for various Expression-MIB OCTET STRING objects:
+ * short tags ( 32 characters)
+ * SnmpAdminString-style values (255 characters)
+ * "long" DisplayString values (1024 characters)
+ */
+#define EXP_STR1_LEN 32
+#define EXP_STR2_LEN 255
+#define EXP_STR3_LEN 1024
+
+/*
+ * Data structure for an expObject row.
+ */
+struct expObject {
+ /*
+ * Index values
+ */
+ char expOwner[ EXP_STR1_LEN+1 ];
+ char expName[ EXP_STR1_LEN+1 ];
+ u_long expObjectIndex;
+
+ /*
+ * Column values
+ */
+ oid expObjectID[ MAX_OID_LEN ];
+ oid expObjDeltaD[ MAX_OID_LEN ];
+ oid expObjCond[ MAX_OID_LEN ];
+ size_t expObjectID_len;
+ size_t expObjDeltaD_len;
+ size_t expObjCond_len;
+ long expObjectSampleType;
+ long expObjDiscontinuityType;
+
+ netsnmp_variable_list *vars, *old_vars;
+ netsnmp_variable_list *dvars, *old_dvars;
+ netsnmp_variable_list *cvars, *old_cvars;
+
+ long flags;
+};
+
+ /*
+ * Container structure for the expObjectTable,
+ * and initialisation routine to create this.
+ */
+extern netsnmp_tdata *expObject_table_data;
+void init_expObject_table_data(void);
+
+/*
+ * function declarations
+ */
+void init_expObject(void);
+struct expObject * expObject_createEntry( char *, char *, long, int );
+netsnmp_tdata_row * expObject_createRow( char *, char *, long, int );
+void expObject_removeEntry( netsnmp_tdata_row * );
+
+netsnmp_tdata_row * expObject_getFirst( char *, char * );
+netsnmp_tdata_row * expObject_getNext( netsnmp_tdata_row * );
+void expObject_getData( struct expExpression *,
+ struct expObject * );
+#endif /* EXPOBJECT_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectConf.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectConf.c
new file mode 100644
index 0000000000..bac37825f5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectConf.c
@@ -0,0 +1,182 @@
+/*
+ * DisMan Expression MIB:
+ * Implementation of the object table configuration handling.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "utilities/iquery.h"
+#include "disman/expr/expObject.h"
+#include "disman/expr/expObjectConf.h"
+
+/* Initializes the expObjectConf module */
+void
+init_expObjectConf(void)
+{
+ init_expObject_table_data();
+
+ /*
+ * Register config handler for persistent storage
+ * of dynamically configured entries.
+ */
+ snmpd_register_config_handler("_expOTable", parse_expOTable, NULL, NULL);
+
+ /*
+ * Register to save (non-fixed) entries when the agent shuts down
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_expOTable, NULL);
+}
+
+
+
+/* ================================================
+ *
+ * Handlers for loading/storing persistent expression entries
+ *
+ * ================================================ */
+
+char *
+_parse_expOCols( char *line, struct expObject *entry )
+{
+ void *vp;
+ size_t tmp;
+
+ vp = entry->expObjectID;
+ entry->expObjectID_len = MAX_OID_LEN;
+ line = read_config_read_data(ASN_OBJECT_ID, line, &vp,
+ &entry->expObjectID_len);
+
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ entry->expObjectSampleType = tmp;
+
+ vp = entry->expObjDeltaD;
+ entry->expObjDeltaD_len = MAX_OID_LEN;
+ line = read_config_read_data(ASN_OBJECT_ID, line, &vp,
+ &entry->expObjDeltaD_len);
+
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ entry->expObjDiscontinuityType = tmp;
+
+ vp = entry->expObjCond;
+ entry->expObjCond_len = MAX_OID_LEN;
+ line = read_config_read_data(ASN_OBJECT_ID, line, &vp,
+ &entry->expObjCond_len);
+
+ line = read_config_read_data(ASN_UNSIGNED, line, &tmp, NULL);
+ entry->flags |= tmp;
+
+ return line;
+}
+
+
+void
+parse_expOTable(const char *token, char *line)
+{
+ char owner[EXP_STR1_LEN+1];
+ char oname[EXP_STR1_LEN+1];
+ long idx;
+ void *vp;
+ size_t len;
+ struct expObject *entry;
+
+ DEBUGMSGTL(("disman:expr:conf", "Parsing mteObjectTable config... "));
+
+ /*
+ * Read in the index information for this entry
+ * and create a (non-fixed) data structure for it.
+ */
+ memset( owner, 0, sizeof(owner));
+ memset( oname, 0, sizeof(oname));
+ len = EXP_STR1_LEN; vp = owner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = EXP_STR1_LEN; vp = oname;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ line = read_config_read_data(ASN_UNSIGNED, line, &idx, NULL);
+ entry = expObject_createEntry( owner, oname, idx, 0 );
+
+ DEBUGMSG(("disman:expr:conf", "(%s, %s, %d) ", owner, oname, idx));
+
+ /*
+ * Read in the accessible column values.
+ */
+ line = _parse_expOCols( line, entry );
+ /*
+ * XXX - Will need to read in the 'iquery' access information
+ */
+ entry->flags |= EXP_OBJ_FLAG_VALID;
+
+ DEBUGMSG(("disman:expr:conf", "\n"));
+}
+
+
+int
+store_expOTable(int majorID, int minorID, void *serverarg, void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr;
+ void *vp;
+ size_t tint;
+ netsnmp_tdata_row *row;
+ struct expObject *entry;
+
+
+ DEBUGMSGTL(("disman:expr:conf", "Storing expObjectTable config:\n"));
+
+ for (row = netsnmp_tdata_row_first( expObject_table_data );
+ row;
+ row = netsnmp_tdata_row_next( expObject_table_data, row )) {
+
+ /*
+ * Skip entries that were set up via static config directives
+ */
+ entry = (struct expObject *)netsnmp_tdata_row_entry( row );
+ if ( entry->flags & EXP_OBJ_FLAG_FIXED )
+ continue;
+
+ DEBUGMSGTL(("disman:expr:conf", " Storing (%s %s %d)\n",
+ entry->expOwner, entry->expName, entry->expObjectIndex));
+
+ /*
+ * Save the basic expObject entry, indexes...
+ */
+ memset(line, 0, sizeof(line));
+ strcat(line, "_expOTable ");
+ cptr = line + strlen(line);
+
+ vp = entry->expOwner; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->expName; tint = strlen( vp );
+ cptr = read_config_store_data( ASN_OCTET_STR, cptr, &vp, &tint );
+ tint = entry->expObjectIndex;
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+
+ /*
+ * ... and column values.
+ */
+ vp = entry->expObjectID;
+ tint = entry->expObjectID_len;
+ cptr = read_config_store_data( ASN_OBJECT_ID, cptr, &vp, &tint );
+ tint = entry->expObjectSampleType;
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+
+ vp = entry->expObjDeltaD;
+ tint = entry->expObjDeltaD_len;
+ cptr = read_config_store_data( ASN_OBJECT_ID, cptr, &vp, &tint );
+ tint = entry->expObjDiscontinuityType;
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+
+ vp = entry->expObjCond;
+ tint = entry->expObjCond_len;
+ cptr = read_config_store_data( ASN_OBJECT_ID, cptr, &vp, &tint );
+
+ tint = entry->flags;
+ cptr = read_config_store_data( ASN_UNSIGNED, cptr, &tint, NULL );
+
+ snmpd_store_config(line);
+ }
+
+ DEBUGMSGTL(("disman:expr:conf", " done.\n"));
+ return SNMPERR_SUCCESS;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectConf.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectConf.h
new file mode 100644
index 0000000000..8a67cca92f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectConf.h
@@ -0,0 +1,9 @@
+#ifndef EXPOBJECTCONF_H
+#define EXPOBJECTCONF_H
+
+void init_expObjectConf(void);
+
+void parse_expOTable(const char *, char *);
+SNMPCallback store_expOTable;
+
+#endif /* EXPOBJECTCONF_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectTable.c
new file mode 100644
index 0000000000..e5c189fe48
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectTable.c
@@ -0,0 +1,436 @@
+/*
+ * DisMan Expression MIB:
+ * Implementation of the expExpressionObjectTable MIB interface
+ * See 'expObject.c' for active behaviour of this table.
+ *
+ * (Based on mib2c.table_data.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/expr/expObject.h"
+#include "disman/expr/expObjectTable.h"
+
+
+/* Initializes the expObjectTable module */
+void
+init_expObjectTable(void)
+{
+ static oid expObjectTable_oid[] = { 1, 3, 6, 1, 2, 1, 90, 1, 2, 3 };
+ size_t expObjectTable_oid_len = OID_LENGTH(expObjectTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ /*
+ * Ensure the expObject table container is available...
+ */
+ init_expObject_table_data();
+
+ /*
+ * ... then set up the MIB interface to the expObjectTable
+ */
+ reg = netsnmp_create_handler_registration("expObjectTable",
+ expObjectTable_handler,
+ expObjectTable_oid,
+ expObjectTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ /* index: expExpressionOwner */
+ ASN_OCTET_STR,
+ /* index: expExpressionName */
+ ASN_OCTET_STR,
+ /* index: expObjectIndex */
+ ASN_UNSIGNED,
+ 0);
+
+ table_info->min_column = COLUMN_EXPOBJECTID;
+ table_info->max_column = COLUMN_EXPOBJECTENTRYSTATUS;
+
+ /* Register this using the common expObject_table_data container */
+ netsnmp_tdata_register(reg, expObject_table_data, table_info);
+ DEBUGMSGTL(("disman:expr:init", "Expression Object Table container (%x)\n",
+ expObject_table_data));
+}
+
+
+/** handles requests for the expObjectTable table */
+int
+expObjectTable_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 *tinfo;
+ netsnmp_tdata_row *row;
+ struct expObject *entry;
+ struct expExpression *exp;
+ char expOwner[EXP_STR1_LEN+1];
+ char expName[ EXP_STR1_LEN+1];
+ long objIndex;
+ long ret;
+ netsnmp_variable_list *vp;
+
+ DEBUGMSGTL(("disman:expr:mib", "Expression Object Table handler (%d)\n",
+ reqinfo->mode));
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct expObject *)netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+ if (!entry || !(entry->flags & EXP_OBJ_FLAG_VALID))
+ continue;
+
+ switch (tinfo->colnum) {
+ case COLUMN_EXPOBJECTID:
+ snmp_set_var_typed_value(request->requestvb, ASN_OBJECT_ID,
+ (u_char *) entry->expObjectID,
+ entry->expObjectID_len*sizeof(oid));
+ break;
+ case COLUMN_EXPOBJECTIDWILDCARD:
+ ret = (entry->flags & EXP_OBJ_FLAG_OWILD) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_EXPOBJECTSAMPLETYPE:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->expObjectSampleType);
+ break;
+ case COLUMN_EXPOBJECTDELTADISCONTINUITYID:
+ /*
+ * "This object [and the next two] are instantiated only if
+ * expObjectSampleType is 'deltaValue' or 'changedValue'"
+ */
+ if ( entry->expObjectSampleType == 1 )
+ continue;
+ snmp_set_var_typed_value(request->requestvb, ASN_OBJECT_ID,
+ (u_char *) entry->expObjDeltaD,
+ entry->expObjDeltaD_len*sizeof(oid));
+ break;
+ case COLUMN_EXPOBJECTDISCONTINUITYIDWILDCARD:
+ if ( entry->expObjectSampleType == 1 )
+ continue;
+ ret = (entry->flags & EXP_OBJ_FLAG_DWILD) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_EXPOBJECTDISCONTINUITYIDTYPE:
+ if ( entry->expObjectSampleType == 1 )
+ continue;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->expObjDiscontinuityType);
+ break;
+ case COLUMN_EXPOBJECTCONDITIONAL:
+ snmp_set_var_typed_value(request->requestvb, ASN_OBJECT_ID,
+ (u_char *) entry->expObjCond,
+ entry->expObjCond_len*sizeof(oid));
+ break;
+ case COLUMN_EXPOBJECTCONDITIONALWILDCARD:
+ ret = (entry->flags & EXP_OBJ_FLAG_CWILD) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_EXPOBJECTENTRYSTATUS:
+ /* What would indicate 'notReady' ? */
+ ret = (entry->flags & EXP_OBJ_FLAG_ACTIVE) ?
+ RS_ACTIVE : RS_NOTINSERVICE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ }
+ }
+ break;
+
+ /*
+ * Write-support
+ */
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request = request->next) {
+ entry = (struct expObject *)
+ netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_EXPOBJECTID:
+ case COLUMN_EXPOBJECTDELTADISCONTINUITYID:
+ case COLUMN_EXPOBJECTCONDITIONAL:
+ ret = netsnmp_check_vb_oid(request->requestvb);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+
+ case COLUMN_EXPOBJECTIDWILDCARD:
+ case COLUMN_EXPOBJECTDISCONTINUITYIDWILDCARD:
+ case COLUMN_EXPOBJECTCONDITIONALWILDCARD:
+ ret = netsnmp_check_vb_truthvalue(request->requestvb);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+
+ case COLUMN_EXPOBJECTSAMPLETYPE:
+ case COLUMN_EXPOBJECTDISCONTINUITYIDTYPE:
+ ret = netsnmp_check_vb_int_range(request->requestvb, 1, 3);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+
+ case COLUMN_EXPOBJECTENTRYSTATUS:
+ ret = netsnmp_check_vb_rowstatus(request->requestvb,
+ (entry ? RS_ACTIVE : RS_NONEXISTENT));
+ 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) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_EXPOBJECTENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ /*
+ * Create an (empty) new row structure
+ */
+ memset(expOwner, 0, sizeof(expOwner));
+ memcpy(expOwner, tinfo->indexes->val.string,
+ tinfo->indexes->val_len);
+ memset(expName, 0, sizeof(expName));
+ memcpy(expName,
+ tinfo->indexes->next_variable->val.string,
+ tinfo->indexes->next_variable->val_len);
+ vp = tinfo->indexes->next_variable->next_variable;
+ objIndex = *vp->val.integer;
+
+ row = expObject_createRow(expOwner, expName, objIndex, 0);
+ if (!row) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+ netsnmp_insert_tdata_row( request, row );
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_FREE:
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_EXPOBJECTENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ /*
+ * Tidy up after a failed row creation request
+ */
+ entry = (struct expObject *)
+ netsnmp_tdata_extract_entry(request);
+ if (entry &&
+ !(entry->flags & EXP_OBJ_FLAG_VALID)) {
+ row = (netsnmp_tdata_row *)
+ netsnmp_tdata_extract_row(request);
+ expObject_removeEntry( row );
+ }
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_ACTION:
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+ entry = (struct expObject *)
+ netsnmp_tdata_extract_entry(request);
+ if (!entry) {
+ /*
+ * New rows must be created via the RowStatus column
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ /* or inconsistentName? */
+ return SNMP_ERR_NOERROR;
+
+ }
+ }
+ break;
+
+ case MODE_SET_UNDO:
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * All these assignments are "unfailable", so it's
+ * (reasonably) safe to apply them in the Commit phase
+ */
+ ret = 0; /* Flag to re-check expExpressionPrefix settings */
+ for (request = requests; request; request = request->next) {
+ entry = (struct expObject *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_EXPOBJECTID:
+ memset(entry->expObjectID, 0, sizeof(entry->expObjectID));
+ memcpy(entry->expObjectID, request->requestvb->val.string,
+ request->requestvb->val_len);
+ entry->expObjectID_len = request->requestvb->val_len;
+ break;
+ case COLUMN_EXPOBJECTIDWILDCARD:
+ if (*request->requestvb->val.integer == TV_TRUE)
+ entry->flags |= EXP_OBJ_FLAG_OWILD;
+ else
+ entry->flags &= ~EXP_OBJ_FLAG_OWILD;
+ break;
+ case COLUMN_EXPOBJECTSAMPLETYPE:
+ entry->expObjectSampleType = *request->requestvb->val.integer;
+ break;
+ case COLUMN_EXPOBJECTDELTADISCONTINUITYID:
+ memset(entry->expObjDeltaD, 0, sizeof(entry->expObjDeltaD));
+ memcpy(entry->expObjDeltaD, request->requestvb->val.string,
+ request->requestvb->val_len);
+ entry->expObjDeltaD_len = request->requestvb->val_len/sizeof(oid);
+ /* XXX
+ if ( snmp_oid_compare( entry->expObjDeltaD,
+ entry->expObjDeltaD_len,
+ sysUpTime_inst,
+ sysUpTime_inst_len ) != 0 )
+ entry->flags |= EXP_OBJ_FLAG_DDISC;
+ */
+
+ /*
+ * If the OID used for the expExpressionPrefix object
+ * has changed, then update the expression structure.
+ */
+ if ( entry->flags & EXP_OBJ_FLAG_PREFIX ) {
+ exp = expExpression_getEntry( entry->expOwner,
+ entry->expName );
+ memcpy( exp->expPrefix, entry->expObjDeltaD,
+ MAX_OID_LEN*sizeof(oid));
+ exp->expPrefix_len = entry->expObjDeltaD_len;
+ }
+ break;
+ case COLUMN_EXPOBJECTDISCONTINUITYIDWILDCARD:
+ if (*request->requestvb->val.integer == TV_TRUE) {
+ /*
+ * Possible new prefix OID candidate
+ * Can't set the value here, since the OID
+ * assignment might not have been processed yet.
+ */
+ exp = expExpression_getEntry( entry->expOwner,
+ entry->expName );
+ if (exp && exp->expPrefix_len == 0 )
+ ret = 1; /* Set the prefix later */
+ entry->flags |= EXP_OBJ_FLAG_DWILD;
+ } else {
+ if ( entry->flags | EXP_OBJ_FLAG_PREFIX ) {
+ exp = expExpression_getEntry( entry->expOwner,
+ entry->expName );
+ memset( exp->expPrefix, 0, MAX_OID_LEN*sizeof(oid));
+ exp->expPrefix_len = 0;
+ ret = 1; /* Need a new prefix OID */
+ }
+ entry->flags &= ~EXP_OBJ_FLAG_DWILD;
+ }
+ break;
+ case COLUMN_EXPOBJECTDISCONTINUITYIDTYPE:
+ entry->expObjDiscontinuityType =
+ *request->requestvb->val.integer;
+ break;
+ case COLUMN_EXPOBJECTCONDITIONAL:
+ memset(entry->expObjCond, 0, sizeof(entry->expObjCond));
+ memcpy(entry->expObjCond, request->requestvb->val.string,
+ request->requestvb->val_len);
+ entry->expObjCond_len = request->requestvb->val_len/sizeof(oid);
+ break;
+ case COLUMN_EXPOBJECTCONDITIONALWILDCARD:
+ if (*request->requestvb->val.integer == TV_TRUE)
+ entry->flags |= EXP_OBJ_FLAG_CWILD;
+ else
+ entry->flags &= ~EXP_OBJ_FLAG_CWILD;
+ break;
+ case COLUMN_EXPOBJECTENTRYSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_ACTIVE:
+ entry->flags |= EXP_OBJ_FLAG_ACTIVE;
+ break;
+ case RS_NOTINSERVICE:
+ entry->flags &= ~EXP_OBJ_FLAG_ACTIVE;
+ break;
+ case RS_CREATEANDGO:
+ entry->flags |= EXP_OBJ_FLAG_ACTIVE;
+ entry->flags |= EXP_OBJ_FLAG_VALID;
+ break;
+ case RS_CREATEANDWAIT:
+ entry->flags |= EXP_OBJ_FLAG_VALID;
+ break;
+
+ case RS_DESTROY:
+ row = (netsnmp_tdata_row *)
+ netsnmp_tdata_extract_row(request);
+ expObject_removeEntry(row);
+ }
+ }
+ }
+
+ /*
+ * Need to check for changes in expExpressionPrefix handling
+ */
+ for (request = requests; request; request = request->next) {
+ entry = (struct expObject *) netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_EXPOBJECTDISCONTINUITYIDWILDCARD:
+ /*
+ * If a column has just been marked as wild,
+ * then consider using it as the prefix OID
+ */
+ if (*request->requestvb->val.integer == TV_TRUE) {
+ exp = expExpression_getEntry( entry->expOwner,
+ entry->expName );
+ if ( exp->expPrefix_len == 0 ) {
+ memcpy( exp->expPrefix, entry->expObjDeltaD,
+ MAX_OID_LEN*sizeof(oid));
+ exp->expPrefix_len = entry->expObjDeltaD_len;
+ entry->flags |= EXP_OBJ_FLAG_PREFIX;
+ }
+ }
+ /*
+ * If it's just been marked as non-wildcarded
+ * then we need to look for a new candidate.
+ */
+ else {
+
+ }
+ break;
+ }
+ }
+ break;
+ }
+ DEBUGMSGTL(("disman:expr:mib", "Expression Object handler - done \n"));
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectTable.h
new file mode 100644
index 0000000000..568f67a443
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expObjectTable.h
@@ -0,0 +1,27 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.table_data.conf,v 1.11 2005/09/16 11:48:12 dts12 Exp $
+ */
+#ifndef EXPOBJECTTABLE_H
+#define EXPOBJECTTABLE_H
+
+/*
+ * function declarations
+ */
+void init_expObjectTable(void);
+Netsnmp_Node_Handler expObjectTable_handler;
+
+/*
+ * column number definitions for table expObjectTable
+ */
+#define COLUMN_EXPOBJECTINDEX 1
+#define COLUMN_EXPOBJECTID 2
+#define COLUMN_EXPOBJECTIDWILDCARD 3
+#define COLUMN_EXPOBJECTSAMPLETYPE 4
+#define COLUMN_EXPOBJECTDELTADISCONTINUITYID 5
+#define COLUMN_EXPOBJECTDISCONTINUITYIDWILDCARD 6
+#define COLUMN_EXPOBJECTDISCONTINUITYIDTYPE 7
+#define COLUMN_EXPOBJECTCONDITIONAL 8
+#define COLUMN_EXPOBJECTCONDITIONALWILDCARD 9
+#define COLUMN_EXPOBJECTENTRYSTATUS 10
+#endif /* EXPOBJECTTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expScalars.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expScalars.c
new file mode 100644
index 0000000000..4a3ebc7008
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expScalars.c
@@ -0,0 +1,97 @@
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "expScalars.h"
+#include "expExpression.h"
+
+/** Initializes the expScalars module */
+void
+init_expScalars(void)
+{
+ static oid expResource_oid[] = { 1, 3, 6, 1, 2, 1, 90, 1, 1 };
+
+ DEBUGMSGTL(("expScalars", "Initializing\n"));
+
+ netsnmp_register_scalar_group(
+ netsnmp_create_handler_registration("expResource",
+ handle_expResourceGroup,
+ expResource_oid, OID_LENGTH(expResource_oid),
+ HANDLER_CAN_RONLY),
+ EXP_RESOURCE_MIN_DELTA, EXP_RESOURCE_SAMPLE_LACKS);
+
+}
+
+int
+handle_expResourceGroup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ oid obj;
+ long value = 0;
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ obj = requests->requestvb->name[ requests->requestvb->name_length-2 ];
+ switch (obj) {
+ case EXP_RESOURCE_MIN_DELTA:
+ value = 1; /* Fixed minimum sample frequency */
+ snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ case EXP_RESOURCE_SAMPLE_MAX:
+ value = 0; /* No fixed maximum */
+ snmp_set_var_typed_value(requests->requestvb, ASN_UNSIGNED,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ case EXP_RESOURCE_SAMPLE_INSTANCES:
+#ifdef USING_DISMAN_EXPR_EXPEXPRESSION_MODULE
+ value = expExpression_getNumEntries(0);
+#else
+ value = 0;
+#endif
+ snmp_set_var_typed_value(requests->requestvb, ASN_GAUGE,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ case EXP_RESOURCE_SAMPLE_HIGH:
+#ifdef USING_DISMAN_EXPR_EXPEXPRESSION_MODULE
+ value = expExpression_getNumEntries(1);
+#else
+ value = 0;
+#endif
+ snmp_set_var_typed_value(requests->requestvb, ASN_GAUGE,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ case EXP_RESOURCE_SAMPLE_LACKS:
+ value = 0; /* expResSampleInstMax not used */
+ snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER,
+ (u_char *)&value, sizeof(value));
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown object (%d) in handle_expResourceGroup\n", (int)obj);
+ return SNMP_ERR_GENERR;
+ }
+ break;
+
+ default:
+ /*
+ * Although expResourceDeltaMinimum and expResDeltaWildcardInstMaximum
+ * are defined with MAX-ACCESS read-write, this version hardcodes
+ * these values, so doesn't need to implement write access.
+ */
+ snmp_log(LOG_ERR,
+ "unknown mode (%d) in handle_expResourceGroup\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expScalars.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expScalars.h
new file mode 100644
index 0000000000..022e01be67
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expScalars.h
@@ -0,0 +1,13 @@
+#ifndef EXPSCALARS_H
+#define EXPSCALARS_H
+
+void init_expScalars(void);
+Netsnmp_Node_Handler handle_expResourceGroup;
+
+#define EXP_RESOURCE_MIN_DELTA 1
+#define EXP_RESOURCE_SAMPLE_MAX 2
+#define EXP_RESOURCE_SAMPLE_INSTANCES 3
+#define EXP_RESOURCE_SAMPLE_HIGH 4
+#define EXP_RESOURCE_SAMPLE_LACKS 5
+
+#endif /* EXPSCALARS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValue.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValue.c
new file mode 100644
index 0000000000..98f1c502c0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValue.c
@@ -0,0 +1,808 @@
+/*
+ * DisMan Expression MIB:
+ * Core implementation of expression evaluation
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/expr/expExpression.h"
+#include "disman/expr/expObject.h"
+#include "disman/expr/expValue.h"
+
+#include <ctype.h>
+
+void _expValue_setError( struct expExpression *exp, int reason,
+ oid *suffix, size_t suffix_len,
+ netsnmp_variable_list *var);
+
+
+#define ASN_PRIV_OPERATOR (ASN_PRIVATE | 0x0f)
+#define ASN_PRIV_FUNCTION (ASN_PRIVATE | 0x0e)
+
+int ops[128]; /* mapping from operator characters to numeric
+ tokens (ordered by priority). */
+
+void
+init_expValue(void)
+{
+DEBUGMSGTL(("disman:expr:eval", "Init expValue"));
+ /* Single-character operators */
+ ops['+'] = EXP_OPERATOR_ADD;
+ ops['-'] = EXP_OPERATOR_SUBTRACT;
+ ops['*'] = EXP_OPERATOR_MULTIPLY;
+ ops['/'] = EXP_OPERATOR_DIVIDE;
+ ops['%'] = EXP_OPERATOR_REMAINDER;
+ ops['^'] = EXP_OPERATOR_BITXOR;
+ ops['~'] = EXP_OPERATOR_BITNEGATE;
+ ops['|'] = EXP_OPERATOR_BITOR;
+ ops['&'] = EXP_OPERATOR_BITAND;
+ ops['!'] = EXP_OPERATOR_NOT;
+ ops['<'] = EXP_OPERATOR_LESS;
+ ops['>'] = EXP_OPERATOR_GREAT;
+
+ /*
+ * Arbitrary offsets, chosen so
+ * the three blocks don't overlap.
+ */
+ /* "X=" operators */
+ ops['='+20] = EXP_OPERATOR_EQUAL;
+ ops['!'+20] = EXP_OPERATOR_NOTEQ;
+ ops['<'+20] = EXP_OPERATOR_LESSEQ;
+ ops['>'+20] = EXP_OPERATOR_GREATEQ;
+
+ /* "XX" operators */
+ ops['|'-30] = EXP_OPERATOR_OR;
+ ops['&'-30] = EXP_OPERATOR_AND;
+ ops['<'-30] = EXP_OPERATOR_LSHIFT;
+ ops['>'-30] = EXP_OPERATOR_RSHIFT;
+}
+
+ /*
+ * Insert the value of the specified object parameter,
+ * using the instance 'suffix' for wildcarded objects.
+ */
+netsnmp_variable_list *
+_expValue_evalParam( netsnmp_variable_list *expIdx, int param,
+ oid *suffix, size_t suffix_len )
+{
+ netsnmp_variable_list *var = SNMP_MALLOC_TYPEDEF( netsnmp_variable_list );
+ struct expObject *obj;
+ netsnmp_variable_list *val_var = NULL, *oval_var = NULL; /* values */
+ netsnmp_variable_list *dd_var = NULL, *odd_var = NULL; /* deltaDs */
+ netsnmp_variable_list *cond_var = NULL; /* conditionals */
+ int n;
+
+ /*
+ * Retrieve the expObject entry for the requested parameter.
+ */
+ if ( !var || !expIdx || !expIdx->next_variable ||
+ !expIdx->next_variable->next_variable )
+ return NULL;
+
+ *expIdx->next_variable->next_variable->val.integer = param;
+ obj = (struct expObject *)
+ netsnmp_tdata_row_entry(
+ netsnmp_tdata_row_get_byidx( expObject_table_data, expIdx ));
+ if (!obj) {
+ /*
+ * No such parameter configured for this expression
+ */
+ snmp_set_var_typed_integer( var, ASN_INTEGER, EXPERRCODE_INDEX );
+ var->type = ASN_NULL;
+ return var;
+ }
+ if ( obj->expObjectSampleType != EXPSAMPLETYPE_ABSOLUTE &&
+ obj->old_vars == NULL ) {
+ /*
+ * Can't calculate delta values until the second pass
+ */
+ snmp_set_var_typed_integer( var, ASN_INTEGER, EXPERRCODE_RESOURCE );
+ var->type = ASN_NULL;
+ return var;
+ }
+
+
+ /*
+ * For a wildcarded object, search for the matching suffix.
+ */
+ val_var = obj->vars;
+ if ( obj->flags & EXP_OBJ_FLAG_OWILD ) {
+ if ( !suffix ) {
+ /*
+ * If there's no suffix to match against, throw an error.
+ * An exact expression with a wildcarded object is invalid.
+ * XXX - Or just use first entry?
+ */
+ snmp_set_var_typed_integer( var, ASN_INTEGER, EXPERRCODE_INDEX );
+ var->type = ASN_NULL;
+ return var;
+ }
+ /*
+ * Otherwise, we'll walk *all* wildcarded values in parallel.
+ * This relies on the various varbind lists being set up with
+ * exactly the same entries. A little extra preparation
+ * during the data gathering simplifies things significantly!
+ */
+ if ( obj->expObjectSampleType != EXPSAMPLETYPE_ABSOLUTE )
+ oval_var = obj->old_vars;
+ if ( obj->flags & EXP_OBJ_FLAG_DWILD ) {
+ dd_var = obj->dvars;
+ odd_var = obj->old_dvars;
+ }
+ if ( obj->flags & EXP_OBJ_FLAG_CWILD )
+ cond_var = obj->cvars;
+
+ n = obj->expObjectID_len;
+ while ( val_var ) {
+ if ( snmp_oid_compare( val_var->name+n, val_var->name_length-n,
+ suffix, suffix_len ))
+ break;
+ val_var = val_var->next_variable;
+ if (oval_var)
+ oval_var = oval_var->next_variable;
+ if (dd_var) {
+ dd_var = dd_var->next_variable;
+ odd_var = odd_var->next_variable;
+ }
+ if (cond_var)
+ cond_var = cond_var->next_variable;
+ }
+
+ }
+ if (!val_var) {
+ /*
+ * No matching entry
+ */
+ snmp_set_var_typed_integer( var, ASN_INTEGER, EXPERRCODE_INDEX );
+ var->type = ASN_NULL;
+ return var;
+ }
+ /*
+ * Set up any non-wildcarded values - some
+ * of which may be null. That's fine.
+ */
+ if (!oval_var)
+ oval_var = obj->old_vars;
+ if (!dd_var) {
+ dd_var = obj->dvars;
+ odd_var = obj->old_dvars;
+ }
+ if (!cond_var)
+ cond_var = obj->cvars;
+
+
+ /*
+ * ... and return the appropriate value.
+ */
+ if (obj->expObjCond_len &&
+ (!cond_var || *cond_var->val.integer == 0)) {
+ /*
+ * expObjectConditional says no
+ */
+ snmp_set_var_typed_integer( var, ASN_INTEGER, EXPERRCODE_INDEX );
+ var->type = ASN_NULL;
+ return var;
+ }
+ if (dd_var && odd_var &&
+ *dd_var->val.integer != *odd_var->val.integer) {
+ /*
+ * expObjectDeltaD says no
+ */
+ snmp_set_var_typed_integer( var, ASN_INTEGER, EXPERRCODE_INDEX );
+ var->type = ASN_NULL;
+ return var;
+ }
+
+ /*
+ * XXX - May need to check sysUpTime discontinuities
+ * (unless this is handled earlier....)
+ */
+ switch ( obj->expObjectSampleType ) {
+ case EXPSAMPLETYPE_ABSOLUTE:
+ snmp_clone_var( val_var, var );
+ break;
+ case EXPSAMPLETYPE_DELTA:
+ snmp_set_var_typed_integer( var, ASN_INTEGER /* or UNSIGNED? */,
+ *val_var->val.integer - *oval_var->val.integer );
+ break;
+ case EXPSAMPLETYPE_CHANGED:
+ if ( val_var->val_len != oval_var->val_len )
+ n = 1;
+ else if (memcmp( val_var->val.string, oval_var->val.string,
+ val_var->val_len ) != 0 )
+ n = 1;
+ else
+ n = 0;
+ snmp_set_var_typed_integer( var, ASN_UNSIGNED, n );
+ }
+ return var;
+}
+
+
+ /*
+ * Utility routine to parse (and skip over) an integer constant
+ */
+int
+_expParse_integer( char *start, char **end ) {
+ int n;
+ char *cp;
+
+ n = atoi(start);
+ for (cp=start; *cp; cp++)
+ if (!isdigit(*cp))
+ break;
+ *end = cp;
+ return n;
+}
+
+netsnmp_variable_list *
+_expValue_evalOperator(netsnmp_variable_list *left,
+ netsnmp_variable_list *op,
+ netsnmp_variable_list *right) {
+ int n;
+
+ switch( *op->val.integer ) {
+ case EXP_OPERATOR_ADD:
+ n = *left->val.integer + *right->val.integer; break;
+ case EXP_OPERATOR_SUBTRACT:
+ n = *left->val.integer - *right->val.integer; break;
+ case EXP_OPERATOR_MULTIPLY:
+ n = *left->val.integer * *right->val.integer; break;
+ case EXP_OPERATOR_DIVIDE:
+ n = *left->val.integer / *right->val.integer; break;
+ case EXP_OPERATOR_REMAINDER:
+ n = *left->val.integer % *right->val.integer; break;
+ case EXP_OPERATOR_BITXOR:
+ n = *left->val.integer ^ *right->val.integer; break;
+ case EXP_OPERATOR_BITNEGATE:
+ n = 99; /* *left->val.integer ~ *right->val.integer; */ break;
+ case EXP_OPERATOR_BITOR:
+ n = *left->val.integer | *right->val.integer; break;
+ case EXP_OPERATOR_BITAND:
+ n = *left->val.integer & *right->val.integer; break;
+ case EXP_OPERATOR_NOT:
+ n = 99; /* *left->val.integer ! *right->val.integer; */ break;
+ case EXP_OPERATOR_LESS:
+ n = *left->val.integer < *right->val.integer; break;
+ case EXP_OPERATOR_GREAT:
+ n = *left->val.integer > *right->val.integer; break;
+ case EXP_OPERATOR_EQUAL:
+ n = *left->val.integer == *right->val.integer; break;
+ case EXP_OPERATOR_NOTEQ:
+ n = *left->val.integer != *right->val.integer; break;
+ case EXP_OPERATOR_LESSEQ:
+ n = *left->val.integer <= *right->val.integer; break;
+ case EXP_OPERATOR_GREATEQ:
+ n = *left->val.integer >= *right->val.integer; break;
+ case EXP_OPERATOR_OR:
+ n = *left->val.integer || *right->val.integer; break;
+ case EXP_OPERATOR_AND:
+ n = *left->val.integer && *right->val.integer; break;
+ case EXP_OPERATOR_LSHIFT:
+ n = *left->val.integer << *right->val.integer; break;
+ case EXP_OPERATOR_RSHIFT:
+ n = *left->val.integer >> *right->val.integer; break;
+ break;
+ default:
+ left->next_variable = NULL;
+ snmp_free_var(left);
+ right->next_variable = NULL;
+ snmp_free_var(right);
+
+ snmp_set_var_typed_integer( op, ASN_INTEGER, EXPERRCODE_OPERATOR );
+ op->type = ASN_NULL;
+ return op;
+ }
+
+ /* XXX */
+ left->next_variable = NULL;
+ snmp_free_var(left);
+ op->next_variable = NULL;
+ snmp_free_var(op);
+ snmp_set_var_typed_integer( right, ASN_INTEGER, n );
+ return right;
+}
+
+netsnmp_variable_list *
+_expValue_evalFunction(netsnmp_variable_list *func) {
+ netsnmp_variable_list *params = func->next_variable;
+ /* XXX */
+ params->next_variable = NULL;
+ snmp_free_var(params);
+ snmp_set_var_typed_integer( func, ASN_INTEGER, 99 );
+ return func;
+}
+
+netsnmp_variable_list *_expValue_evalExpr2(netsnmp_variable_list *exprAlDente);
+netsnmp_variable_list *
+_expValue_evalExpr( netsnmp_variable_list *expIdx,
+ char *exprRaw, char **exprEnd,
+ oid *suffix, size_t suffix_len )
+{
+ netsnmp_variable_list *exprAlDente = NULL;
+ netsnmp_variable_list *vtail = NULL;
+ char *cp1, *cp2;
+ netsnmp_variable_list *var = NULL;
+ int i, n;
+ int neg = 0;
+ oid oid_buf[MAX_OID_LEN];
+
+ DEBUGMSGTL(("disman:expr:eval1", "Evaluating '%s'\n", exprRaw));
+ if (!expIdx || !exprRaw)
+ return NULL;
+
+ /*
+ * The expression is evaluated in two stages.
+ * First, we simplify ("parboil") the raw expression,
+ * tokenizing it into a sequence of varbind values, inserting
+ * object parameters, and (recursively) evaluating any
+ * parenthesised sub-expressions or function arguments.
+ */
+
+ for (cp1=exprRaw; cp1 && *cp1; ) {
+ switch (*cp1) {
+ case '$':
+ /*
+ * Locate the appropriate instance of the specified
+ * parameter, and insert the corresponding value.
+ */
+ n = _expParse_integer( cp1+1, &cp1 );
+ var = _expValue_evalParam( expIdx, n, suffix, suffix_len );
+ if ( var && var->type == ASN_NULL ) {
+ DEBUGMSGTL(("disman:expr:eval", "Invalid parameter '%d'\n", n));
+ /* Note position of failure in expression */
+ var->data = (void *)(cp1 - exprRaw);
+ snmp_free_var(exprAlDente);
+ return var;
+ } else {
+ if (vtail)
+ vtail->next_variable = var;
+ else
+ exprAlDente = var;
+ vtail = var;
+ var = NULL;
+ }
+ break;
+ case '(':
+ /*
+ * Recursively evaluate the sub-expression
+ */
+ var = _expValue_evalExpr( expIdx, cp1+1, &cp2,
+ suffix, suffix_len );
+ if ( var && var->type == ASN_NULL ) {
+ /* Adjust position of failure */
+ var->data = (void *)(cp1 - exprRaw + (int)var->data);
+ return var;
+ } else if (*cp2 != ')') {
+ snmp_free_var(exprAlDente);
+ DEBUGMSGTL(("disman:expr:eval", "Unbalanced parenthesis\n"));
+ snmp_set_var_typed_integer( var, ASN_INTEGER,
+ EXPERRCODE_PARENTHESIS );
+ var->type = ASN_NULL;
+ var->data = (void *)(cp2 - exprRaw);
+ return var;
+ } else {
+ if (vtail)
+ vtail->next_variable = var;
+ else
+ exprAlDente = var;
+ vtail = var;
+ var = NULL;
+ cp1 = cp2+1; /* Skip to end of sub-expression */
+ }
+ break;
+ case ')':
+ case ',':
+ /*
+ * End of current (sub-)expression
+ * Note the end-position, and evaluate
+ * the parboiled list of tokens.
+ */
+ *exprEnd = cp1;
+ var = _expValue_evalExpr2( exprAlDente );
+ snmp_free_var(exprAlDente);
+ return var;
+
+ /* === Constants === */
+ case '.': /* OID */
+ i = 0;
+ memset( oid_buf, 0, sizeof(oid_buf));
+ while ( cp1 && *cp1 == '.' ) {
+ n = _expParse_integer( cp1+1, &cp2 );
+OID:
+ oid_buf[i++] = n;
+ cp1 = cp2;
+ }
+ var = snmp_varlist_add_variable( &exprAlDente, NULL, 0,
+ ASN_OBJECT_ID,
+ (u_char*)oid_buf, i*sizeof(oid));
+ break;
+DIGIT:
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ n = _expParse_integer( cp1, &cp2 );
+ if ( cp2 && *cp2 == '.' ) {
+ i = 0;
+ memset( oid_buf, 0, sizeof(oid_buf));
+ goto OID;
+ }
+ if ( neg )
+ n = -n;
+ var = snmp_varlist_add_variable( &exprAlDente, NULL, 0,
+ ASN_INTEGER,
+ (u_char*)&n, sizeof(n));
+ vtail = var;
+ var = NULL;
+ neg = 0;
+ cp1 = cp2;
+ break;
+
+ case '"': /* String Constant */
+ for ( cp2 = cp1+1; *cp2; cp2++ ) {
+ if ( *cp2 == '"' )
+ break;
+ if ( *cp2 == '\\' && *(cp2+1) == '"' )
+ cp2++;
+ }
+ if ( *cp2 != '"' ) {
+ /*
+ * Unterminated string
+ */
+ DEBUGMSGTL(("disman:expr:eval", "Unterminated string\n"));
+ snmp_set_var_typed_integer( var, ASN_INTEGER,
+ EXPERRCODE_SYNTAX );
+ var->type = ASN_NULL;
+ var->data = (void *)(cp2 - exprRaw);
+ return var;
+ }
+ n = cp2 - cp1;
+ var = snmp_varlist_add_variable( &exprAlDente, NULL, 0,
+ ASN_OCTET_STR,
+ (u_char*)cp1+1, n);
+ vtail = var;
+ var = NULL;
+ break;
+
+
+ /* === Operators === */
+ case '-':
+ /*
+ * Could be a unary minus....
+ */
+ if (!vtail || vtail->type == ASN_PRIV_OPERATOR) {
+ neg = 1;
+ goto DIGIT;
+ }
+ /*
+ * ... or a (single-character) binary operator.
+ */
+ /* Fallthrough */
+ case '+':
+ case '*':
+ case '/':
+ case '%':
+ case '^':
+ case '~':
+ if ( !vtail ) {
+ /*
+ * Can't start an expression with a binary operator
+ */
+ DEBUGMSGTL(("disman:expr:eval", "Initial binary operator\n"));
+ snmp_set_var_typed_integer( var, ASN_INTEGER,
+ EXPERRCODE_SYNTAX );
+ var->type = ASN_NULL;
+ var->data = (void *)(cp1 - exprRaw);
+ return var;
+ }
+ n = ops[ *cp1 ];
+ DEBUGMSGTL(("disman:expr:eval", "Binary operator %c (%d)\n", *cp1, n));
+ var = snmp_varlist_add_variable( &exprAlDente, NULL, 0,
+ ASN_INTEGER,
+ (u_char*)&n, sizeof(n));
+ var->type = ASN_PRIV_OPERATOR;
+ vtail = var;
+ cp1++;
+ break;
+
+ /*
+ * Multi-character binary operators
+ */
+ case '&':
+ case '|':
+ case '!':
+ case '>':
+ case '<':
+ case '=':
+ if ( !vtail ) {
+ /*
+ * Can't start an expression with a binary operator
+ */
+ DEBUGMSGTL(("disman:expr:eval", "Initial binary operator\n"));
+ snmp_set_var_typed_integer( var, ASN_INTEGER,
+ EXPERRCODE_SYNTAX );
+ var->type = ASN_NULL;
+ var->data = (void *)(cp1 - exprRaw);
+ return var;
+ }
+ if ( *(cp1+1) == '=' )
+ n = ops[ *cp1++ + 20];
+ else if ( *(cp1+1) == *cp1 )
+ n = ops[ *cp1++ - 30];
+ else
+ n = ops[ *cp1 ];
+ var = snmp_varlist_add_variable( &exprAlDente, NULL, 0,
+ ASN_INTEGER,
+ (u_char*)&n, sizeof(n));
+ var->type = ASN_PRIV_OPERATOR;
+ vtail = var;
+ cp1++;
+ break;
+
+ /* === Functions === */
+ case 'a': /* average/arraySection */
+ case 'c': /* counter32/counter64 */
+ case 'e': /* exists */
+ case 'm': /* maximum/minimum */
+ case 'o': /* oidBegins/Ends/Contains */
+ case 's': /* sum / string{B,E,C} */
+ var = snmp_varlist_add_variable( &exprAlDente, NULL, 0,
+ ASN_OCTET_STR,
+ (u_char*)cp1, 3 );
+ /* XXX */
+ var->type = ASN_PRIV_FUNCTION;
+ vtail = var;
+ while (*cp1 >= 'a' && *cp1 <= 'z')
+ cp1++;
+ break;
+
+ default:
+ if (isalpha( *cp1 )) {
+ /*
+ * Unrecognised function call ?
+ */
+ DEBUGMSGTL(("disman:expr:eval", "Unrecognised function '%s'\n", cp1));
+ snmp_set_var_typed_integer( var, ASN_INTEGER,
+ EXPERRCODE_FUNCTION );
+ var->type = ASN_NULL;
+ var->data = (void *)(cp1 - exprRaw);
+ return var;
+ }
+ else if (!isspace( *cp1 )) {
+ /*
+ * Unrecognised operator ?
+ */
+ DEBUGMSGTL(("disman:expr:eval", "Unrecognised operator '%c'\n", *cp1));
+ snmp_set_var_typed_integer( var, ASN_INTEGER,
+ EXPERRCODE_OPERATOR );
+ var->type = ASN_NULL;
+ var->data = (void *)(cp1 - exprRaw);
+ return var;
+ }
+ cp1++;
+ break;
+ }
+ }
+
+ /*
+ * ... then we evaluate the resulting simplified ("al dente")
+ * expression, in the usual manner.
+ */
+ *exprEnd = cp1;
+ var = _expValue_evalExpr2( exprAlDente );
+ DEBUGMSGTL(( "disman:expr:eval1", "Evaluated to "));
+ DEBUGMSGVAR(("disman:expr:eval1", var));
+ DEBUGMSG(( "disman:expr:eval1", "\n"));
+/* snmp_free_var(exprAlDente); XXX - Crashes */
+ return var;
+}
+
+netsnmp_variable_list *
+_expValue_evalExpr2( netsnmp_variable_list *exprAlD )
+{
+ netsnmp_variable_list *stack = NULL;
+ netsnmp_variable_list *lval, *rval, *op;
+ netsnmp_variable_list *vp, *vp1 = NULL;
+
+ DEBUGIF(( "disman:expr:eval2")) {
+ for (vp = exprAlD; vp; vp=vp->next_variable) {
+ if ( vp->type == ASN_PRIV_OPERATOR )
+ DEBUGMSGTL(( "disman:expr:eval2", "Operator %d\n",
+ *vp->val.integer));
+ else if ( vp->type == ASN_PRIV_FUNCTION )
+ DEBUGMSGTL(( "disman:expr:eval2", "Function %s\n",
+ vp->val.string));
+ else {
+ DEBUGMSGTL(( "disman:expr:eval2", "Operand "));
+ DEBUGMSGVAR(("disman:expr:eval2", vp));
+ DEBUGMSG(( "disman:expr:eval2", "\n"));
+ }
+ }
+ }
+
+ for (vp = exprAlD; vp; vp=vp1) {
+ vp1 = vp->next_variable;
+ if ( vp->type == ASN_PRIV_OPERATOR ) {
+ /* Must *always* follow a value */
+ if ( !stack || stack->type == ASN_PRIV_OPERATOR ) {
+ snmp_set_var_typed_integer( vp, ASN_INTEGER,
+ EXPERRCODE_SYNTAX );
+ vp->type = ASN_NULL;
+ snmp_free_var( stack );
+ return vp;
+ }
+ /*
+ * Evaluate any higher priority operators
+ * already on the stack....
+ */
+ while ( stack->next_variable &&
+ stack->next_variable->type == ASN_PRIV_OPERATOR &&
+ (*stack->next_variable->val.integer > *vp->val.integer)) {
+ rval = stack;
+ op = stack->next_variable;
+ lval = op->next_variable;
+ stack = lval->next_variable;
+
+ rval = _expValue_evalOperator( lval, op, rval );
+ rval->next_variable = stack;
+ stack = rval;
+ }
+ /*
+ * ... and then push this operator onto the stack.
+ */
+ vp->next_variable = stack;
+ stack = vp;
+ } else if ( vp->type == ASN_PRIV_FUNCTION ) {
+ /* Must be first, or follow an operator */
+ if ( stack && stack->type != ASN_PRIV_OPERATOR ) {
+ snmp_set_var_typed_integer( vp, ASN_INTEGER,
+ EXPERRCODE_SYNTAX );
+ vp->type = ASN_NULL;
+ snmp_free_var( stack );
+ return vp;
+ }
+ /*
+ * Evaluate this function (consuming the
+ * appropriate parameters from the token
+ * list), and push the result onto the stack.
+ */
+ vp = _expValue_evalFunction( vp );
+ vp1 = vp->next_variable;
+ vp->next_variable = stack;
+ stack = vp;
+ } else {
+ /* Must be first, or follow an operator */
+ if ( stack && stack->type != ASN_PRIV_OPERATOR ) {
+ snmp_set_var_typed_integer( vp, ASN_INTEGER,
+ EXPERRCODE_SYNTAX );
+ vp->type = ASN_NULL;
+ snmp_free_var( stack );
+ return vp;
+ }
+ /*
+ * Push this value onto the stack
+ */
+ vp->next_variable = stack;
+ stack = vp;
+ }
+ }
+
+ /*
+ * Now evaluate whatever's left on the stack
+ * and return the final result.
+ */
+ while ( stack && stack->next_variable ) {
+ rval = stack;
+ op = stack->next_variable;
+ lval = op->next_variable;
+ stack = lval->next_variable;
+
+ rval = _expValue_evalOperator( lval, op, rval );
+ rval->next_variable = stack;
+ stack = rval;
+ }
+ return stack;
+}
+
+/* =============
+ * Main API
+ * ============= */
+netsnmp_variable_list *
+expValue_evaluateExpression( struct expExpression *exp,
+ oid *suffix, size_t suffix_len )
+{
+ char exprRaw[ EXP_STR3_LEN+1 ];
+ netsnmp_variable_list *var;
+ netsnmp_variable_list owner_var, name_var, param_var;
+ long n;
+ char *cp;
+
+ if (!exp)
+ return NULL;
+
+ /*
+ * Set up a varbind list containing the various index values
+ * (including a placeholder for expObjectIndex).
+ *
+ * This saves having to construct the same index list repeatedly
+ */
+ memset(&owner_var, 0, sizeof(netsnmp_variable_list));
+ memset(&name_var, 0, sizeof(netsnmp_variable_list));
+ memset(&param_var, 0, sizeof(netsnmp_variable_list));
+ snmp_set_var_typed_value( &owner_var, ASN_OCTET_STR,
+ (u_char*)exp->expOwner, strlen(exp->expOwner));
+ snmp_set_var_typed_value( &name_var, ASN_OCTET_STR,
+ (u_char*)exp->expName, strlen(exp->expName));
+ n = 99; /* dummy value */
+ snmp_set_var_typed_value( &param_var, ASN_INTEGER,
+ (u_char*)&n, sizeof(long));
+ owner_var.next_variable = &name_var;
+ name_var.next_variable = &param_var;
+
+ /*
+ * Make a working copy of the expression, and evaluate it.
+ */
+ memset(exprRaw, 0, sizeof(exprRaw));
+ memcpy(exprRaw, exp->expExpression, sizeof(exprRaw));
+
+ var = _expValue_evalExpr( &owner_var, exprRaw, &cp, suffix, suffix_len );
+ /*
+ * Check for any problems, and record the appropriate error
+ */
+ if (!cp || *cp != '\0') {
+ /*
+ * When we had finished, there was a lot
+ * of bricks^Wcharacters left over....
+ */
+ _expValue_setError( exp, EXPERRCODE_SYNTAX, suffix, suffix_len, NULL );
+ return NULL;
+ }
+ if (!var) {
+ /* Shouldn't happen */
+ _expValue_setError( exp, EXPERRCODE_RESOURCE, suffix, suffix_len, NULL );
+ return NULL;
+ }
+ if (var->type == ASN_NULL) {
+ /*
+ * Error explicitly reported from the evaluation routines.
+ */
+ _expValue_setError( exp, *(var->val.integer), suffix, suffix_len, var );
+ return NULL;
+ }
+ if (0 /* COMPARE var->type WITH exp->expValueType */ ) {
+ /*
+ * XXX - Check to see whether the returned type (ASN_XXX)
+ * is compatible with the requested type (an enum)
+ */
+
+ /* If not, throw an error */
+ _expValue_setError( exp, EXPERRCODE_TYPE, suffix, suffix_len, var );
+ return NULL;
+ }
+ return var;
+}
+
+void
+_expValue_setError( struct expExpression *exp, int reason,
+ oid *suffix, size_t suffix_len,
+ netsnmp_variable_list *var)
+{
+ if (!exp)
+ return;
+ exp->expErrorCount++;
+ /* exp->expErrorTime = NOW; */
+ exp->expErrorIndex = ( var && var->data ? (int)var->data : 0 );
+ exp->expErrorCode = reason;
+ memset( exp->expErrorInstance, 0, sizeof(exp->expErrorInstance));
+ memcpy( exp->expErrorInstance, suffix, suffix_len * sizeof(oid));
+ exp->expErrorInst_len = suffix_len;
+ snmp_free_var( var );
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValue.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValue.h
new file mode 100644
index 0000000000..5b9bffb0af
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValue.h
@@ -0,0 +1,12 @@
+
+#ifndef EXPVALUE_H
+#define EXPVALUE_H
+
+#include "disman/expr/expExpression.h"
+
+void init_expValue(void);
+netsnmp_variable_list *
+expValue_evaluateExpression( struct expExpression *exp,
+ oid *suffix, size_t suffix_len );
+
+#endif /* EXPVALUE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValueTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValueTable.c
new file mode 100644
index 0000000000..3c36f38aa6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValueTable.c
@@ -0,0 +1,327 @@
+/*
+ * DisMan Expression MIB:
+ * Implementation of the expValueTable MIB interface
+ * See 'expValue.c' for active evaluation of expressions.
+ *
+ * (Based roughly on mib2c.raw-table.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "expValue.h"
+#include "expValueTable.h"
+
+/** Initializes the expValueTable module */
+void
+init_expValueTable(void)
+{
+ static oid expValueTable_oid[] = { 1, 3, 6, 1, 2, 1, 90, 1, 3, 1 };
+ size_t expValueTable_oid_len = OID_LENGTH(expValueTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ reg =
+ netsnmp_create_handler_registration("expValueTable",
+ expValueTable_handler,
+ expValueTable_oid,
+ expValueTable_oid_len,
+ HANDLER_CAN_RONLY);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ ASN_OCTET_STR, /* expExpressionOwner */
+ ASN_OCTET_STR, /* expExpressionName */
+ /* expValueInstance */
+ ASN_PRIV_IMPLIED_OBJECT_ID,
+ 0);
+
+ table_info->min_column = COLUMN_EXPVALUECOUNTER32VAL;
+ table_info->max_column = COLUMN_EXPVALUECOUNTER64VAL;
+
+ netsnmp_register_table(reg, table_info);
+ DEBUGMSGTL(("disman:expr:init", "Expression Value Table\n"));
+}
+
+
+netsnmp_variable_list *
+expValueTable_getEntry(netsnmp_variable_list * indexes,
+ int mode, unsigned int colnum)
+{
+ struct expExpression *exp;
+ netsnmp_variable_list *res, *vp, *vp2;
+ oid nullInstance[] = {0, 0, 0};
+ int plen;
+ size_t len;
+ unsigned int type = colnum-1; /* column object subIDs and type
+ enumerations are off by one. */
+
+ if (!indexes || !indexes->next_variable ||
+ !indexes->next_variable->next_variable ) {
+ /* XXX - Shouldn't happen! */
+ return 0;
+ }
+
+ DEBUGMSGTL(( "disman:expr:val", "get (%d) entry (%s, %s, ", mode,
+ indexes->val.string, indexes->next_variable->val.string));
+ DEBUGMSGOID(("disman:expr:val",
+ indexes->next_variable->next_variable->val.objid,
+ indexes->next_variable->next_variable->val_len/sizeof(oid)));
+ DEBUGMSG(( "disman:expr:val", ")\n"));
+
+ /*
+ * Locate the expression that we've been asked to evaluate
+ */
+ if (!indexes->val_len || !indexes->next_variable->val_len ) {
+ /*
+ * Incomplete expression specification
+ */
+ if (mode == MODE_GETNEXT || mode == MODE_GETBULK) {
+ exp = expExpression_getFirstEntry();
+ DEBUGMSGTL(( "disman:expr:val", "first entry (%x)\n", exp ));
+ } else {
+ DEBUGMSGTL(( "disman:expr:val", "incomplete request\n" ));
+ return NULL; /* No match */
+ }
+ } else {
+ exp = expExpression_getEntry( (char*)indexes->val.string,
+ (char*)indexes->next_variable->val.string);
+ DEBUGMSGTL(( "disman:expr:val", "using entry (%x)\n", exp ));
+ }
+
+ /*
+ * We know what type of value was requested,
+ * so ignore any non-matching expressions.
+ */
+ while (exp && exp->expValueType != type) {
+ if (mode != MODE_GETNEXT && mode != MODE_GETBULK) {
+ DEBUGMSGTL(( "disman:expr:val", "wrong type (%d != %d)\n",
+ type, (exp ? exp->expValueType : 0 )));
+ return NULL; /* Wrong type */
+ }
+NEXT_EXP:
+ exp = expExpression_getNextEntry( exp->expOwner, exp->expName );
+ DEBUGMSGTL(( "disman:expr:val", "using next entry (%x)\n", exp ));
+ }
+ if (!exp) {
+ DEBUGMSGTL(( "disman:expr:val", "no more entries\n"));
+ return NULL; /* No match (of the required type) */
+ }
+
+
+ /*
+ * Now consider which instance of the chosen expression is needed
+ */
+ vp = indexes->next_variable->next_variable;
+ if ( mode == MODE_GET ) {
+ /*
+ * For a GET request, check that the specified value instance
+ * is valid, and evaluate the expression using this.
+ */
+ if ( !vp || !vp->val_len ) {
+ DEBUGMSGTL(( "disman:expr:val", "no instance index\n"));
+ return NULL; /* No instance provided */
+ }
+ if ( vp->val.objid[0] != 0 ) {
+ DEBUGMSGTL(( "disman:expr:val",
+ "non-zero instance (%d)\n", vp->val.objid[0]));
+ return NULL; /* Invalid instance */
+ }
+
+ if (exp->expPrefix_len == 0 ) {
+ /*
+ * The only valid instance for a non-wildcarded
+ * expression is .0.0.0
+ */
+ if ( vp->val_len != 3*sizeof(oid) ||
+ vp->val.objid[1] != 0 ||
+ vp->val.objid[2] != 0 ) {
+ DEBUGMSGTL(( "disman:expr:val", "invalid scalar instance\n"));
+ return NULL;
+ }
+ res = expValue_evaluateExpression( exp, NULL, 0 );
+ DEBUGMSGTL(( "disman:expr:val", "scalar get returned (%x)\n", res));
+ } else {
+ /*
+ * Otherwise, skip the leading '.0' and use
+ * the remaining instance subidentifiers.
+ */
+ res = expValue_evaluateExpression( exp, vp->val.objid+1,
+ vp->val_len/sizeof(oid)-1);
+ DEBUGMSGTL(( "disman:expr:val", "w/card get returned (%x)\n", res));
+ }
+ } else {
+ /*
+ * For a GETNEXT request, identify the appropriate next
+ * value instance, and evaluate the expression using
+ * that, updating the index list appropriately.
+ */
+ if ( vp->val_len > 0 && vp->val.objid[0] != 0 ) {
+ DEBUGMSGTL(( "disman:expr:val",
+ "non-zero next instance (%d)\n", vp->val.objid[0]));
+ return NULL; /* All valid instances start with .0 */
+ }
+ plen = exp->expPrefix_len;
+ if (plen == 0 ) {
+ /*
+ * The only valid instances for GETNEXT on a
+ * non-wildcarded expression are .0 and .0.0
+ * Anything else is too late.
+ */
+ if ((vp->val_len > 2*sizeof(oid)) ||
+ (vp->val_len == 2*sizeof(oid) &&
+ vp->val.objid[1] != 0)) {
+ DEBUGMSGTL(( "disman:expr:val", "invalid scalar next instance\n"));
+ return NULL; /* Invalid instance */
+ }
+
+ /*
+ * Make sure the index varbind list refers to the
+ * (only) valid instance of this expression,
+ * and evaluate it.
+ */
+ snmp_set_var_typed_value( indexes, ASN_OCTET_STR,
+ (u_char*)exp->expOwner, strlen(exp->expOwner));
+ snmp_set_var_typed_value( indexes->next_variable, ASN_OCTET_STR,
+ (u_char*)exp->expName, strlen(exp->expName));
+ snmp_set_var_typed_value( vp, ASN_PRIV_IMPLIED_OBJECT_ID,
+ (u_char*)nullInstance, 3*sizeof(oid));
+ res = expValue_evaluateExpression( exp, NULL, 0 );
+ DEBUGMSGTL(( "disman:expr:val", "scalar next returned (%x)\n", res));
+ } else {
+ /*
+ * Now comes the interesting case - finding the
+ * appropriate instance of a wildcarded expression.
+ */
+ if ( vp->val_len == 0 ) {
+ if ( !exp->pvars ) {
+ DEBUGMSGTL(( "disman:expr:val", "no instances\n"));
+ goto NEXT_EXP;
+ }
+ DEBUGMSGTL(( "disman:expr:val", "using first instance\n"));
+ vp2 = exp->pvars;
+ } else {
+ /*
+ * Search the list of instances for the (first) greater one
+ * XXX - This comparison relies on the OID of the prefix
+ * object being the same length as the wildcarded
+ * parameter objects. It ain't necessarily so.
+ */
+ for ( vp2 = exp->pvars; vp2; vp2 = vp2->next_variable ) {
+ if ( snmp_oid_compare( vp2->name + plen,
+ vp2->name_length - plen,
+ vp->name,
+ vp->name_length) < 0 ) {
+ DEBUGMSGTL(( "disman:expr:val", "next instance "));
+ DEBUGMSGOID(("disman:expr:val", vp2->name, vp2->name_length ));
+ DEBUGMSG(( "disman:expr:val", "\n"));
+ break;
+ }
+ }
+ if (!vp2) {
+ DEBUGMSGTL(( "disman:expr:val", "no next instance\n"));
+ goto NEXT_EXP;
+ }
+ }
+ snmp_set_var_typed_value( indexes, ASN_OCTET_STR,
+ (u_char*)exp->expOwner, strlen(exp->expOwner));
+ snmp_set_var_typed_value( indexes->next_variable, ASN_OCTET_STR,
+ (u_char*)exp->expName, strlen(exp->expName));
+ if (vp2) {
+ len = vp2->name_length - exp->expPrefix_len;
+ snmp_set_var_typed_value( vp, ASN_PRIV_IMPLIED_OBJECT_ID,
+ (u_char*)(vp2->name+exp->expPrefix_len), len);
+ }
+ res = expValue_evaluateExpression( exp, vp->val.objid+1, len-1);
+ DEBUGMSGTL(( "disman:expr:val", "w/card next returned (%x)\n", res));
+ }
+ }
+ return res;
+}
+
+/** handles requests for the expValueTable table */
+int
+expValueTable_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 *tinfo;
+ netsnmp_variable_list *value;
+ oid expValueOID[] = { 1, 3, 6, 1, 2, 1, 90, 1, 3, 1, 1, 99 };
+ size_t expValueOID_len = OID_LENGTH(expValueOID);
+ oid name_buf[ MAX_OID_LEN ];
+ size_t name_buf_len = MAX_OID_LEN;
+
+ DEBUGMSGTL(("disman:expr:mib", "Expression Value Table handler (%d)\n",
+ reqinfo->mode));
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ case MODE_GETNEXT:
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+ value = expValueTable_getEntry(tinfo->indexes,
+ reqinfo->mode,
+ tinfo->colnum);
+ if (!value || !value->val.integer) {
+ netsnmp_set_request_error(reqinfo, request,
+ (reqinfo->mode == MODE_GET) ?
+ SNMP_NOSUCHINSTANCE :
+ SNMP_ENDOFMIBVIEW);
+ continue;
+ }
+ if ( reqinfo->mode == MODE_GETNEXT ) {
+ /*
+ * Need to update the request varbind OID
+ * to match the instance just evaluated.
+ * (XXX - Is this the appropriate mechanism?)
+ */
+ build_oid_noalloc( name_buf, MAX_OID_LEN, &name_buf_len,
+ expValueOID, expValueOID_len, tinfo->indexes );
+ name_buf[ expValueOID_len -1 ] = tinfo->colnum;
+ snmp_set_var_objid(request->requestvb, name_buf, name_buf_len);
+ }
+
+ switch (tinfo->colnum) {
+ case COLUMN_EXPVALUECOUNTER32VAL:
+ snmp_set_var_typed_integer(request->requestvb, ASN_COUNTER,
+ *value->val.integer);
+ break;
+ case COLUMN_EXPVALUEUNSIGNED32VAL:
+ snmp_set_var_typed_integer(request->requestvb, ASN_UNSIGNED,
+ *value->val.integer);
+ break;
+ case COLUMN_EXPVALUETIMETICKSVAL:
+ snmp_set_var_typed_integer(request->requestvb, ASN_TIMETICKS,
+ *value->val.integer);
+ break;
+ case COLUMN_EXPVALUEINTEGER32VAL:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ *value->val.integer);
+ break;
+ case COLUMN_EXPVALUEIPADDRESSVAL:
+ snmp_set_var_typed_integer(request->requestvb, ASN_IPADDRESS,
+ *value->val.integer);
+ break;
+ case COLUMN_EXPVALUEOCTETSTRINGVAL:
+ snmp_set_var_typed_value( request->requestvb, ASN_OCTET_STR,
+ value->val.string, value->val_len);
+ break;
+ case COLUMN_EXPVALUEOIDVAL:
+ snmp_set_var_typed_value( request->requestvb, ASN_OBJECT_ID,
+ (u_char *)value->val.objid, value->val_len);
+ break;
+ case COLUMN_EXPVALUECOUNTER64VAL:
+ snmp_set_var_typed_value( request->requestvb, ASN_COUNTER64,
+ (u_char *)value->val.counter64, value->val_len);
+ break;
+ }
+ }
+ break;
+
+ }
+ DEBUGMSGTL(("disman:expr:mib", "Expression Value handler - done \n"));
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValueTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValueTable.h
new file mode 100644
index 0000000000..15f320265a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/expValueTable.h
@@ -0,0 +1,23 @@
+#ifndef EXPVALUETABLE_H
+#define EXPVALUETABLE_H
+
+/*
+ * function declarations
+ */
+void init_expValueTable(void);
+Netsnmp_Node_Handler expValueTable_handler;
+netsnmp_variable_list *expValue_getVal(netsnmp_variable_list *, int);
+
+/*
+ * column number definitions for table expValueTable
+ */
+#define COLUMN_EXPVALUEINSTANCE 1
+#define COLUMN_EXPVALUECOUNTER32VAL 2
+#define COLUMN_EXPVALUEUNSIGNED32VAL 3
+#define COLUMN_EXPVALUETIMETICKSVAL 4
+#define COLUMN_EXPVALUEINTEGER32VAL 5
+#define COLUMN_EXPVALUEIPADDRESSVAL 6
+#define COLUMN_EXPVALUEOCTETSTRINGVAL 7
+#define COLUMN_EXPVALUEOIDVAL 8
+#define COLUMN_EXPVALUECOUNTER64VAL 9
+#endif /* EXPVALUETABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/exp_enum.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/exp_enum.h
new file mode 100755
index 0000000000..47085b21e7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expr/exp_enum.h
@@ -0,0 +1,60 @@
+#ifndef EXP_ENUM_H
+#define EXP_ENUM_H
+
+ /* expExpressionValueType */
+#define EXPVALTYPE_COUNTER 1
+#define EXPVALTYPE_UNSIGNED 2
+#define EXPVALTYPE_TIMETICKS 3
+#define EXPVALTYPE_INTEGER 4
+#define EXPVALTYPE_IPADDRESS 5
+#define EXPVALTYPE_STRING 6
+#define EXPVALTYPE_OID 7
+#define EXPVALTYPE_COUNTER64 8
+
+ /* expErrorCode */
+#define EXPERRCODE_SYNTAX 1
+#define EXPERRCODE_INDEX 2
+#define EXPERRCODE_OPERATOR 3
+#define EXPERRCODE_FUNCTION 4
+#define EXPERRCODE_TYPE 5
+#define EXPERRCODE_PARENTHESIS 6
+#define EXPERRCODE_WILDCARD 7
+#define EXPERRCODE_RECURSION 8
+#define EXPERRCODE_DELTA 9
+#define EXPERRCODE_RESOURCE 10
+#define EXPERRCODE_DIVZERO 11
+
+ /* expObjectSampleType */
+#define EXPSAMPLETYPE_ABSOLUTE 1
+#define EXPSAMPLETYPE_DELTA 2
+#define EXPSAMPLETYPE_CHANGED 3
+
+ /* expObjectDiscontinuityIDType */
+#define EXPDISCID_TIMETICKS 1
+#define EXPDISCID_TIMESTAMP 2
+#define EXPDISCID_DATETIME 3
+
+ /* expression operators (in increasing order of priority) */
+ /* XXX - Check priority ordering */
+#define EXP_OPERATOR_ADD 1
+#define EXP_OPERATOR_SUBTRACT 2
+#define EXP_OPERATOR_MULTIPLY 3
+#define EXP_OPERATOR_DIVIDE 4
+#define EXP_OPERATOR_REMAINDER 5
+#define EXP_OPERATOR_BITXOR 6
+#define EXP_OPERATOR_BITNEGATE 7
+#define EXP_OPERATOR_BITOR 8
+#define EXP_OPERATOR_BITAND 9
+#define EXP_OPERATOR_NOT 10
+#define EXP_OPERATOR_OR 11
+#define EXP_OPERATOR_AND 12
+#define EXP_OPERATOR_EQUAL 13
+#define EXP_OPERATOR_NOTEQ 14
+#define EXP_OPERATOR_LESS 15
+#define EXP_OPERATOR_LESSEQ 16
+#define EXP_OPERATOR_GREAT 17
+#define EXP_OPERATOR_GREATEQ 18
+#define EXP_OPERATOR_LSHIFT 19
+#define EXP_OPERATOR_RSHIFT 20
+#endif /* EXP_ENUM_H */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression-mib.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression-mib.h
new file mode 100644
index 0000000000..18db2afddb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression-mib.h
@@ -0,0 +1,21 @@
+/*
+*Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+*
+*All right reserved
+*
+*File Name:expression-mib.h
+*File Description: add DISMAN-EXPRESSION-MIB.
+*
+*Current Version:1.0
+*Author:JianShun Tong
+*Date:2004.8.20
+*/
+
+/*
+ * wrapper for the disman expression mib code files
+ */
+config_require(disman/expression/expExpressionTable)
+config_require(disman/expression/expErrorTable)
+config_require(disman/expression/expObjectTable)
+config_require(disman/expression/expValueTable)
+config_add_mib(DISMAN-EXPRESSION-MIB)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression.h
new file mode 100644
index 0000000000..82f7cc0955
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression.h
@@ -0,0 +1,13 @@
+/*
+ * wrapper for the disman expression mib code files
+ */
+config_require(disman/expr/expScalars)
+config_require(disman/expr/expExpression)
+config_require(disman/expr/expExpressionTable)
+config_require(disman/expr/expErrorTable)
+config_require(disman/expr/expExpressionConf)
+config_require(disman/expr/expObject)
+config_require(disman/expr/expObjectTable)
+config_require(disman/expr/expObjectConf)
+config_require(disman/expr/expValue)
+config_require(disman/expr/expValueTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expErrorTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expErrorTable.c
new file mode 100644
index 0000000000..b7b257eb57
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expErrorTable.c
@@ -0,0 +1,138 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name: expErrorTable.c
+ *File Description: expErrorTable MIB operation.
+ *
+ *Current Version:1.0
+ *Author:JianShun Tong
+ *Date:2004.8.20
+ */
+
+
+/*
+ * This file was generated by mib2c and is intended for use as
+ * a mib module for the ucd-snmp snmpd agent.
+ */
+
+
+/*
+ * This should always be included first before anything else
+ */
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+
+/*
+ * minimal include directives
+ */
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "header_complex.h"
+#include "expErrorTable.h"
+#include "expExpressionTable.h"
+
+
+
+/*
+ * expErrorTable_variables_oid:
+ * this is the top level oid that we want to register under. This
+ * is essentially a prefix, with the suffix appearing in the
+ * variable below.
+ */
+
+oid expErrorTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 90, 1, 2, 2 };
+
+/*
+ * variable2 expErrorTable_variables:
+ */
+
+struct variable2 expErrorTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+#define EXPERRORTIME 1
+ {EXPERRORTIME, ASN_UNSIGNED, RONLY, var_expErrorTable, 2, {1, 1}},
+#define EXPERRORINDEX 2
+ {EXPERRORINDEX, ASN_INTEGER, RONLY, var_expErrorTable, 2, {1, 2}},
+#define EXPERRORCODE 3
+ {EXPERRORCODE, ASN_INTEGER, RONLY, var_expErrorTable, 2, {1, 3}},
+#define EXPERRORINSTANCE 4
+ {EXPERRORINSTANCE, ASN_OBJECT_ID, RONLY, var_expErrorTable, 2, {1, 4}}
+};
+
+extern struct header_complex_index *expExpressionTableStorage;
+
+
+void
+init_expErrorTable(void)
+{
+ DEBUGMSGTL(("expErrorTable", "initializing... "));
+
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("expErrorTable",
+ expErrorTable_variables, variable2,
+ expErrorTable_variables_oid);
+
+ DEBUGMSGTL(("expErrorTable", "done.\n"));
+}
+
+
+
+unsigned char *
+var_expErrorTable(struct variable *vp,
+ oid * name,
+ size_t *length,
+ int exact, size_t *var_len, WriteMethod ** write_method)
+{
+ struct expExpressionTable_data *StorageTmp = NULL;
+
+ DEBUGMSGTL(("expErrorTable", "var_expErrorTable: Entering... \n"));
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(expExpressionTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL)
+ return NULL;
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+
+ case EXPERRORTIME:
+ *var_len = sizeof(StorageTmp->expErrorTime);
+ return (u_char *) & StorageTmp->expErrorTime;
+
+ case EXPERRORINDEX:
+ *var_len = sizeof(StorageTmp->expErrorIndex);
+ return (u_char *) & StorageTmp->expErrorIndex;
+
+ case EXPERRORCODE:
+ *var_len = sizeof(StorageTmp->expErrorCode);
+ return (u_char *) & StorageTmp->expErrorCode;
+
+ case EXPERRORINSTANCE:
+ *var_len = StorageTmp->expErrorInstanceLen * sizeof(oid);
+ return (u_char *) StorageTmp->expErrorInstance;
+ }
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expErrorTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expErrorTable.h
new file mode 100644
index 0000000000..539915934b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expErrorTable.h
@@ -0,0 +1,49 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:expErrorTable.h
+ *File Description: head file.
+ *
+ *Current Version:1.0
+ *Author:JianShun Tong
+ *Date:2004.8.20
+ */
+
+
+/*
+ * This file was generated by mib2c and is intended for use as a mib module
+ * for the ucd-snmp snmpd agent.
+ */
+
+
+#ifndef _MIBGROUP_EXPERRORTALBE_H
+#define _MIBGROUP_EXPERRORTALBE_H
+
+
+
+/*
+ * we may use header_complex from the header_complex module
+ */
+config_require(header_complex)
+
+
+ struct expErrorTable_data {
+
+ unsigned long expErrorTime;
+ long expErrorIndex;
+ long expErrorCode;
+ oid *expErrorInstance;
+ size_t expErrorInstanceLen;
+ };
+
+ /*
+ * function prototypes
+ */
+ void init_expErrorTable(void);
+ FindVarMethod var_expErrorTable;
+
+
+
+#endif /* _MIBGROUP_EXPERRORTALBE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expExpressionTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expExpressionTable.c
new file mode 100644
index 0000000000..f6f7d8dc36
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expExpressionTable.c
@@ -0,0 +1,1162 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name: expExpressionTable.c
+ *File Description: expExpressionTable MIB operation.
+ *
+ *Current Version:1.0
+ *Author:JianShun Tong
+ *Date:2004.8.20
+ */
+
+/*
+ * This file was generated by mib2c and is intended for use as
+ * a mib module for the ucd-snmp snmpd agent.
+ */
+
+
+/*
+ * This should always be included first before anything else
+ */
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+
+/*
+ * minimal include directives
+ */
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "header_complex.h"
+#include "expErrorTable.h"
+#include "expExpressionTable.h"
+#include "expObjectTable.h"
+#include "expValueTable.h"
+
+
+/*
+ * expExpressionTable_variables_oid:
+ * this is the top level oid that we want to register under. This
+ * is essentially a prefix, with the suffix appearing in the
+ * variable below.
+ */
+
+oid expExpressionTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 90, 1, 2, 1 };
+
+/*
+ * variable2 expExpressionTable_variables:
+ */
+
+struct variable2 expExpressionTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+#define EXPEXPRESSION 3
+ {EXPEXPRESSION, ASN_OCTET_STR, RWRITE, var_expExpressionTable, 2, {1, 3}},
+#define EXPEXPRESSIONVALUETYPE 4
+ {EXPEXPRESSIONVALUETYPE, ASN_INTEGER, RWRITE, var_expExpressionTable, 2, {1, 4}},
+#define EXPEXPRESSIONCOMMENT 5
+ {EXPEXPRESSIONCOMMENT, ASN_OCTET_STR, RWRITE, var_expExpressionTable, 2, {1, 5}},
+#define EXPEXPRESSIONDELTALNTERVAL 6
+ {EXPEXPRESSIONDELTALNTERVAL, ASN_INTEGER, RWRITE, var_expExpressionTable, 2, {1, 6}},
+#define EXPEXPRESSIONPREFIX 7
+ {EXPEXPRESSIONPREFIX, ASN_OBJECT_ID, RONLY, var_expExpressionTable, 2, {1, 7}},
+#define EXPEXPRESSIONERRORS 8
+ {EXPEXPRESSIONERRORS, ASN_UNSIGNED, RONLY, var_expExpressionTable, 2, {1, 8}},
+#define EXPEXPRESSIONENTRYSTATUS 9
+ {EXPEXPRESSIONENTRYSTATUS, ASN_INTEGER, RWRITE, var_expExpressionTable, 2, {1, 9}}
+};
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+
+struct header_complex_index *expExpressionTableStorage = NULL;
+extern struct header_complex_index *expObjectTableStorage;
+extern struct header_complex_index *expValueTableStorage;
+
+oid mmTimeInstance[] = { 1, 3, 6, 1, 2, 1, 1, 3, 0 };
+
+/*
+ * init_expExpressionTable():
+ * Initialization routine. This is called when the agent starts up.
+ * At a minimum, registration of your variables should take place here.
+ */
+void
+init_expExpressionTable(void)
+{
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("expExpressionTable", expExpressionTable_variables,
+ variable2, expExpressionTable_variables_oid);
+
+ /*
+ * register our config handler(s) to deal with registrations
+ */
+ snmpd_register_config_handler("expExpressionTable",
+ parse_expExpressionTable, NULL, NULL);
+
+
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_expExpressionTable, NULL);
+
+
+ DEBUGMSGTL(("expExpressionTable", "done.\n"));
+}
+
+struct expExpressionTable_data *
+create_expExpressionTable_data(void)
+{
+ struct expExpressionTable_data *StorageNew;
+ StorageNew = SNMP_MALLOC_STRUCT(expExpressionTable_data);
+ /*
+ * fill in default row values here into StorageNew
+ */
+ /*
+ * fill in values for all tables (even if not
+ * appropriate), since its easier to do here than anywhere
+ * else
+ */
+
+ StorageNew->expExpression = strdup("");
+ StorageNew->expExpressionValueType = EXPEXPRESSION_COUNTER32;
+ StorageNew->expExpressionComment = strdup("");
+ StorageNew->expExpressionDeltaInterval = 0;
+ StorageNew->expExpressionPrefix = calloc(1, sizeof(oid) * 2); /* 0.0 */
+ StorageNew->expExpressionPrefixLen = 2;
+ StorageNew->hc_ObjectTableStorage = NULL;
+ StorageNew->hc_ValueTableStorage = NULL;
+ StorageNew->storageType = ST_NONVOLATILE;
+ return StorageNew;
+}
+
+int
+expExpressionTable_add(struct expExpressionTable_data *thedata)
+{
+ netsnmp_variable_list *vars = NULL;
+
+
+ DEBUGMSGTL(("expExpressionTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->expExpressionOwner, thedata->expExpressionOwnerLen); /* expExpressionOwner */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->expExpressionName, thedata->expExpressionNameLen); /* expExpressionName */
+
+ header_complex_add_data(&expExpressionTableStorage, vars, thedata);
+ DEBUGMSGTL(("expExpressionTable", "registered an entry\n"));
+
+
+ DEBUGMSGTL(("expExpressionTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+
+/*
+ * parse_mteTriggerTable():
+ * parses .conf file entries needed to configure the mib.
+ */
+void
+parse_expExpressionTable(const char *token, char *line)
+{
+ size_t tmpint;
+ oid *tmpoid = NULL;
+ struct expExpressionTable_data *StorageTmp =
+ SNMP_MALLOC_STRUCT(expExpressionTable_data);
+
+ DEBUGMSGTL(("expExpressionTable", "parsing config... "));
+
+ if (StorageTmp == NULL) {
+ config_perror("malloc failure");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->expExpressionOwner,
+ &StorageTmp->expExpressionOwnerLen);
+ if (StorageTmp->expExpressionOwner == NULL) {
+ config_perror("invalid specification for expExpressionOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->expExpressionName,
+ &StorageTmp->expExpressionNameLen);
+ if (StorageTmp->expExpressionName == NULL) {
+ config_perror("invalid specification for expExpressionName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->expExpression,
+ &StorageTmp->expExpressionLen);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->expExpressionValueType,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->expExpressionComment,
+ &StorageTmp->expExpressionCommentLen);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->expExpressionDeltaInterval,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OBJECT_ID, line,
+ &StorageTmp->expExpressionPrefix,
+ &StorageTmp->expExpressionPrefixLen);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->expExpressionErrors, &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->expExpressionEntryStatus,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->have_copied_auth_info, &tmpint);
+ if (StorageTmp->have_copied_auth_info) {
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pdu_version, &tmpint);
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pdu_securityModel, &tmpint);
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pdu_securityLevel, &tmpint);
+ line =
+ read_config_read_data(ASN_OBJECT_ID, line, &tmpoid, &tmpint);
+ if (!netsnmp_tdomain_support
+ (tmpoid, tmpint, &StorageTmp->pdu_tDomain,
+ &StorageTmp->pdu_tDomainLen)) {
+ config_perror
+ ("unsupported transport domain for mteTriggerEntry");
+ return;
+ }
+ if (tmpoid != NULL) {
+ free(tmpoid);
+ }
+
+ /*
+ * can be NULL? Yes.
+ */
+ line = read_config_read_data(ASN_OCTET_STR, line,
+ &(StorageTmp->pdu_transport),
+ &StorageTmp->pdu_transportLen);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pdu_community,
+ &StorageTmp->pdu_community_len);
+ if (StorageTmp->pdu_community == NULL) {
+ config_perror("invalid specification for pdu_community");
+ return;
+ }
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pdu_securityName,
+ &StorageTmp->pdu_securityNameLen);
+ if (StorageTmp->pdu_securityName == NULL) {
+ config_perror("invalid specification for pdu_securityName");
+ return;
+ }
+ }
+ StorageTmp->storageType = ST_NONVOLATILE;
+ expExpressionTable_add(StorageTmp);
+
+
+ DEBUGMSGTL(("expExpressionTable", "done.\n"));
+}
+
+
+/*
+ * store_expExpressionTable():
+ * stores .conf file entries needed to configure the mib.
+ */
+int
+store_expExpressionTable(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr;
+ size_t tmpint;
+ struct expExpressionTable_data *StorageTmp;
+ struct expObjectTable_data *ObjectStorageTmp;
+ struct expValueTable_data *ValueStorageTmp;
+ struct header_complex_index *hcindex, *hc_object, *hc_value;
+
+ DEBUGMSGTL(("expExpressionTable", "storing data... "));
+
+ for (hcindex = expExpressionTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp = (struct expExpressionTable_data *) hcindex->data;
+
+
+ if (StorageTmp->storageType == ST_NONVOLATILE) {
+
+ memset(line, 0, sizeof(line));
+ strcat(line, "expExpressionTable ");
+ cptr = line + strlen(line);
+ /*
+ * expExpressionTable
+ */
+
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->expExpressionOwner,
+ &StorageTmp->expExpressionOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->expExpressionName,
+ &StorageTmp->expExpressionNameLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->expExpression,
+ &StorageTmp->expExpressionLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->expExpressionValueType,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->expExpressionComment,
+ &StorageTmp->
+ expExpressionCommentLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ expExpressionDeltaInterval,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OBJECT_ID, cptr,
+ &StorageTmp->expExpressionPrefix,
+ &StorageTmp->
+ expExpressionPrefixLen);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->expExpressionErrors,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ expExpressionEntryStatus, &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->have_copied_auth_info,
+ &tmpint);
+ if (StorageTmp->have_copied_auth_info) {
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->pdu_version,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->pdu_securityModel,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->pdu_securityLevel,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OBJECT_ID, cptr,
+ (void *) (&StorageTmp->
+ pdu_tDomain),
+ &StorageTmp->pdu_tDomainLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pdu_transport,
+ &StorageTmp->pdu_transportLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pdu_community,
+ &StorageTmp->pdu_community_len);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pdu_securityName,
+ &StorageTmp->
+ pdu_securityNameLen);
+ }
+
+
+ snmpd_store_config(line);
+ }
+ }
+ DEBUGMSGTL(("expExpressionTable", "storage done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+
+
+/*
+ * var_expExpressionTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_expExpressionTable above.
+ */
+unsigned char *
+var_expExpressionTable(struct variable *vp,
+ oid * name,
+ size_t *length,
+ int exact,
+ size_t *var_len, WriteMethod ** write_method)
+{
+ struct expExpressionTable_data *StorageTmp = NULL;
+
+ DEBUGMSGTL(("expExpressionTable",
+ "var_expExpressionTable: Entering... \n"));
+
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(expExpressionTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL) {
+ if (vp->magic == EXPEXPRESSIONENTRYSTATUS)
+ *write_method = write_expExpressionEntryStatus;
+ return NULL;
+ }
+
+
+ switch (vp->magic) {
+
+
+ case EXPEXPRESSION:
+ *write_method = write_expExpression;
+ *var_len = StorageTmp->expExpressionLen;
+ return (u_char *) StorageTmp->expExpression;
+
+ case EXPEXPRESSIONVALUETYPE:
+ *write_method = write_expExpressionValueType;
+ *var_len = sizeof(StorageTmp->expExpressionValueType);
+ return (u_char *) & StorageTmp->expExpressionValueType;
+
+ case EXPEXPRESSIONCOMMENT:
+ *write_method = write_expExpressionComment;
+ *var_len = StorageTmp->expExpressionCommentLen;
+ return (u_char *) StorageTmp->expExpressionComment;
+
+ case EXPEXPRESSIONDELTALNTERVAL:
+ *write_method = write_expExpressionDeltaInterval;
+ *var_len = sizeof(StorageTmp->expExpressionDeltaInterval);
+ return (u_char *) & StorageTmp->expExpressionDeltaInterval;
+
+ case EXPEXPRESSIONPREFIX:
+ *var_len = StorageTmp->expExpressionPrefixLen * sizeof(oid);
+ return (u_char *) StorageTmp->expExpressionPrefix;
+
+ case EXPEXPRESSIONERRORS:
+ *var_len = sizeof(StorageTmp->expExpressionErrors);
+ return (u_char *) & StorageTmp->expExpressionErrors;
+
+ case EXPEXPRESSIONENTRYSTATUS:
+ *write_method = write_expExpressionEntryStatus;
+ *var_len = sizeof(StorageTmp->expExpressionEntryStatus);
+ return (u_char *) & StorageTmp->expExpressionEntryStatus;
+
+ default:
+ ERROR_MSG("");
+
+ }
+ return NULL;
+}
+
+
+
+int
+write_expExpression(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct expExpressionTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(expExpressionTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+
+ DEBUGMSGTL(("expExpressionTable",
+ "write_expExpression entering action=%d... \n", action));
+ if ((StorageTmp =
+ header_complex(expExpressionTableStorage, NULL,
+ &name[sizeof(expExpressionTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to expExpression not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->expExpression;
+ tmplen = StorageTmp->expExpressionLen;
+ memdup((u_char **) & StorageTmp->expExpression, var_val,
+ var_val_len);
+ StorageTmp->expExpressionLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->expExpression);
+ StorageTmp->expExpression = tmpvar;
+ StorageTmp->expExpressionLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+
+}
+
+
+
+int
+write_expExpressionValueType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct expExpressionTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(expExpressionTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+
+ DEBUGMSGTL(("expExpressionTable",
+ "write_expExpressionValueType entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(expExpressionTableStorage, NULL,
+ &name[sizeof(expExpressionTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to expExpressionValueType not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->expExpressionValueType;
+ StorageTmp->expExpressionValueType = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->expExpressionValueType = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+
+}
+
+
+int
+write_expExpressionComment(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct expExpressionTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(expExpressionTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+
+ DEBUGMSGTL(("expExpressionTable",
+ "write_expExpression entering action=%d... \n", action));
+ if ((StorageTmp =
+ header_complex(expExpressionTableStorage, NULL,
+ &name[sizeof(expExpressionTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to expExpressionComment not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->expExpressionComment;
+ tmplen = StorageTmp->expExpressionCommentLen;
+ memdup((u_char **) & StorageTmp->expExpressionComment, var_val,
+ var_val_len);
+ StorageTmp->expExpressionCommentLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->expExpressionComment);
+ StorageTmp->expExpressionComment = tmpvar;
+ StorageTmp->expExpressionCommentLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+
+}
+
+
+int
+write_expExpressionDeltaInterval(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static int tmpvar;
+ struct expExpressionTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(expExpressionTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+
+ DEBUGMSGTL(("expExpressionTable",
+ "write_expExpressionValueType entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(expExpressionTableStorage, NULL,
+ &name[sizeof(expExpressionTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to expExpressionDeltalnterval not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->expExpressionDeltaInterval;
+ StorageTmp->expExpressionDeltaInterval = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->expExpressionDeltaInterval = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+
+}
+
+
+int
+write_expExpressionEntryStatus(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ struct expExpressionTable_data *StorageTmp = NULL;
+ static struct expExpressionTable_data *StorageNew, *StorageDel;
+ size_t newlen =
+ name_len -
+ (sizeof(expExpressionTable_variables_oid) / sizeof(oid) + 3 - 1);
+ static int old_value;
+ int set_value;
+ static netsnmp_variable_list *vars, *vp;
+ struct header_complex_index *hciptr;
+
+ StorageTmp =
+ header_complex(expExpressionTableStorage, NULL,
+ &name[sizeof(expExpressionTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL, NULL);
+
+
+
+
+ if (var_val_type != ASN_INTEGER || var_val == NULL) {
+ snmp_log(LOG_ERR,
+ "write to expExpressionEntryStatus not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ set_value = *((long *) var_val);
+
+
+ /*
+ * check legal range, and notReady is reserved for us, not a user
+ */
+ if (set_value < 1 || set_value > 6 || set_value == RS_NOTREADY)
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+
+ switch (action) {
+ case RESERVE1:
+ /*
+ * stage one: test validity
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * create the row now?
+ */
+
+
+ /*
+ * ditch illegal values now
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE)
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+
+ /*
+ * destroying a non-existent row is actually legal
+ */
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+
+
+ /*
+ * illegal creation values
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE) {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ } else {
+ /*
+ * row exists. Check for a valid state change
+ */
+ if (set_value == RS_CREATEANDGO
+ || set_value == RS_CREATEANDWAIT) {
+ /*
+ * can't create a row that exists
+ */
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+
+ if (StorageTmp->expExpressionEntryStatus == RS_ACTIVE &&
+ set_value != RS_DESTROY) {
+ /*
+ * "Once made active an entry may not be modified except to
+ * delete it." XXX: doesn't this in fact apply to ALL
+ * columns of the table and not just this one?
+ */
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+
+
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * creation
+ */
+ vars = NULL;
+
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0); /* expExpressionOwner */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0); /* expExpressionName */
+
+
+
+ if (header_complex_parse_oid
+ (&
+ (name
+ [sizeof(expExpressionTable_variables_oid) / sizeof(oid) +
+ 2]), newlen, vars) != SNMPERR_SUCCESS) {
+ /*
+ * XXX: free, zero vars
+ */
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+ vp = vars;
+
+
+ StorageNew = create_expExpressionTable_data();
+
+ StorageNew->expExpressionOwner = malloc(vp->val_len + 1);
+ memcpy(StorageNew->expExpressionOwner, vp->val.string,
+ vp->val_len);
+ StorageNew->expExpressionOwner[vp->val_len] = '\0';
+ StorageNew->expExpressionOwnerLen = vp->val_len;
+
+ vp = vp->next_variable;
+ StorageNew->expExpressionName = malloc(vp->val_len + 1);
+ memcpy(StorageNew->expExpressionName, vp->val.string,
+ vp->val_len);
+ StorageNew->expExpressionName[vp->val_len] = '\0';
+ StorageNew->expExpressionNameLen = vp->val_len;
+
+ vp = vp->next_variable;
+
+ StorageNew->expExpressionEntryStatus = set_value;
+
+ }
+
+
+ break;
+
+
+
+
+ case FREE:
+ /*
+ * XXX: free, zero vars
+ */
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in set_value for you to
+ * use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in
+ * the UNDO case
+ */
+
+
+ if (StorageTmp == NULL) {
+ /*
+ * row creation, so add it
+ */
+ if (StorageNew != NULL)
+ expExpressionTable_add(StorageNew);
+ /*
+ * XXX: ack, and if it is NULL?
+ */
+ } else if (set_value != RS_DESTROY) {
+ /*
+ * set the flag?
+ */
+ old_value = StorageTmp->expExpressionEntryStatus;
+ StorageTmp->expExpressionEntryStatus = *((long *) var_val);
+ } else {
+ /*
+ * destroy... extract it for now
+ */
+ hciptr =
+ header_complex_find_entry(expExpressionTableStorage,
+ StorageTmp);
+ StorageDel =
+ header_complex_extract_entry(&expExpressionTableStorage,
+ hciptr);
+ }
+ break;
+
+
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * row creation, so remove it again
+ */
+ hciptr =
+ header_complex_find_entry(expExpressionTableStorage,
+ StorageTmp);
+ StorageDel =
+ header_complex_extract_entry(&expExpressionTableStorage,
+ hciptr);
+ /*
+ * XXX: free it
+ */
+ } else if (StorageDel != NULL) {
+ /*
+ * row deletion, so add it again
+ */
+ expExpressionTable_add(StorageDel);
+ } else {
+ StorageTmp->expExpressionEntryStatus = old_value;
+ }
+ break;
+
+
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ if (StorageDel != NULL) {
+ StorageDel = 0;
+ /*
+ * XXX: free it, its dead
+ */
+ } else {
+ if (StorageTmp
+ && StorageTmp->expExpressionEntryStatus ==
+ RS_CREATEANDGO) {
+ StorageTmp->expExpressionEntryStatus = RS_ACTIVE;
+ } else if (StorageTmp &&
+ StorageTmp->expExpressionEntryStatus ==
+ RS_CREATEANDWAIT) {
+ StorageTmp->expExpressionEntryStatus = RS_NOTINSERVICE;
+ }
+ }
+ if (StorageTmp &&
+ StorageTmp->expExpressionEntryStatus == RS_ACTIVE &&
+ !StorageTmp->have_copied_auth_info) {
+
+ netsnmp_agent_session *asp =
+ netsnmp_get_current_agent_session();
+ netsnmp_pdu *pdu = NULL;
+
+ if (!asp) {
+ snmp_log(LOG_ERR,
+ "snmpTriggerTable: can't get master session for authentication params\n");
+ } else {
+ pdu = asp->orig_pdu;
+ if (!pdu) {
+ snmp_log(LOG_ERR,
+ "snmpTriggerTable: can't get master pdu for authentication params\n");
+ }
+ }
+
+ if (pdu) {
+ DEBUGMSGTL(("expExpressionTest",
+ "copying PDU auth info\n"));
+ StorageTmp->pdu_version = pdu->version;
+ StorageTmp->pdu_securityModel = pdu->securityModel;
+ StorageTmp->pdu_securityLevel = pdu->securityLevel;
+ StorageTmp->pdu_tDomain = pdu->tDomain;
+ StorageTmp->pdu_tDomainLen = pdu->tDomainLen;
+ if (pdu->transport_data != NULL) {
+ StorageTmp->pdu_transport =
+ malloc(pdu->transport_data_length);
+ memcpy(StorageTmp->pdu_transport, pdu->transport_data,
+ pdu->transport_data_length);
+ }
+ StorageTmp->pdu_transportLen = pdu->transport_data_length;
+ if (pdu->community) {
+ StorageTmp->pdu_community =
+ calloc(1, pdu->community_len + 1);
+ memcpy(StorageTmp->pdu_community, pdu->community,
+ pdu->community_len);
+ StorageTmp->pdu_community_len = pdu->community_len;
+ } else {
+ StorageTmp->pdu_community = NULL;
+ StorageTmp->pdu_community_len = 0;
+ }
+ if (pdu->securityName) {
+ StorageTmp->pdu_securityName =
+ calloc(1, pdu->securityNameLen + 1);
+ memcpy(StorageTmp->pdu_securityName, pdu->securityName,
+ pdu->securityNameLen);
+ StorageTmp->pdu_securityNameLen = pdu->securityNameLen;
+ } else {
+ StorageTmp->pdu_securityName = NULL;
+ StorageTmp->pdu_securityNameLen = 0;
+ }
+ StorageTmp->have_copied_auth_info = 1;
+ }
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expExpressionTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expExpressionTable.h
new file mode 100644
index 0000000000..6c139f8319
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expExpressionTable.h
@@ -0,0 +1,139 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name: expExpressionTable.h
+ *File Description: head file.
+ *
+ *Current Version:1.0
+ *Author:JianShun Tong
+ *Date:2004.8.20
+ */
+
+/*
+ * This file was generated by mib2c and is intended for use as a mib module
+ * for the ucd-snmp snmpd agent.
+ */
+
+
+#ifndef _MIBGROUP_EXPEXPRESSIONTABLE_H
+#define _MIBGROUP_EXPEXPRESSIONTABLE_H
+
+/*
+ * we may use header_complex from the header_complex module
+ */
+
+
+config_require(header_complex)
+
+ /*
+ * our storage structure(s)
+ */
+ struct expExpressionTable_data {
+
+ /*
+ * expExpressionTable
+ */
+ char *expExpressionOwner;
+ size_t expExpressionOwnerLen;
+ char *expExpressionName;
+ size_t expExpressionNameLen;
+ char *expExpression;
+ size_t expExpressionLen;
+ long expExpressionValueType;
+ char *expExpressionComment;
+ size_t expExpressionCommentLen;
+ long expExpressionDeltaInterval;
+ oid *expExpressionPrefix;
+ size_t expExpressionPrefixLen;
+ unsigned long expExpressionErrors;
+ long expExpressionEntryStatus;
+
+ /*
+ * expError Table
+ */
+ unsigned long expErrorTime;
+ long expErrorIndex;
+ long expErrorCode;
+ oid *expErrorInstance;
+ size_t expErrorInstanceLen;
+
+ /*
+ * internal variables
+ */
+ int storageType;
+
+ /*
+ * other tables storage
+ */
+ struct header_complex_index *hc_ObjectTableStorage;
+ struct header_complex_index *hc_ValueTableStorage;
+
+
+
+ /*
+ * pdu auth contents
+ */
+ long have_copied_auth_info;
+ long pdu_version;
+ long pdu_securityModel;
+ long pdu_securityLevel;
+ void *pdu_transport;
+ size_t pdu_transportLen;
+ const oid *pdu_tDomain;
+ size_t pdu_tDomainLen;
+ u_char *pdu_community;
+ size_t pdu_community_len;
+ char *pdu_contextName;
+ size_t pdu_contextNameLen;
+ char *pdu_securityName;
+ size_t pdu_securityNameLen;
+ };
+
+
+
+#define EXPEXPRESSION_COUNTER32 1
+#define EXPEXPRESSION_UNSIGNED32 2
+#define EXPEXPRESSION_TIMETICKS 3
+#define EXPEXPRESSION_INTEGER32 4
+#define EXPEXPRESSION_IPADDRESS 5
+#define EXPEXPRESSION_OCTETSTRING 6
+#define EXPEXPRESSION_OBJECTID 7
+#define EXPEXPRESSION_COUNTER64 8
+
+
+#define EXP_FAILURE_INVALIDSYNTAX 1
+#define EXP_FAILURE_UNDEFINEOBJECTINDEX 2
+#define EXP_FAILURE_UNRECOGNIZEOPERATOR 3
+#define EXP_FAILURE_UNRECOGNIZEDFUNCTION 4
+#define EXP_FAILURE_INVALIDOPERANDTYPE 5
+#define EXP_FAILURE_UNMATCHEDPARENTHESIS 6
+#define EXP_FAILURE_TOOMANYWILDCARDVALUES 7
+#define EXP_FAILURE_RECURSION 8
+#define EXP_FAILURE_DELTATOOSHORT 9
+#define EXP_FAILURE_RESOURCEUNAVAILABLE 10
+#define EXP_FAILURE_DIVIDEBYZERO 11
+
+
+/*
+ * function prototypes
+ */
+
+
+ void init_expExpressionTable(void);
+ FindVarMethod var_expExpressionTable;
+ SNMPCallback store_expExpressionTable;
+ void parse_expExpressionTable(const char *, char *);
+
+ WriteMethod write_expExpression;
+ WriteMethod write_expExpressionValueType;
+ WriteMethod write_expExpressionComment;
+ WriteMethod write_expExpressionDeltaInterval;
+ WriteMethod write_expExpressionEntryStatus;
+
+
+
+
+
+#endif /*_MIBGROUP_EXPEXPRESSIONTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expObjectTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expObjectTable.c
new file mode 100644
index 0000000000..6de4bf5feb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expObjectTable.c
@@ -0,0 +1,1447 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name: expObjectTable.c
+ *File Description: expObjectTable MIB operation.
+ *
+ *Current Version:1.0
+ *Author:JianShun Tong
+ *Date:2004.8.20
+ */
+
+
+/*
+ * This file was generated by mib2c and is intended for use as
+ * a mib module for the ucd-snmp snmpd agent.
+ */
+
+
+/*
+ * This should always be included first before anything else
+ */
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+
+/*
+ * minimal include directives
+ */
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "header_complex.h"
+#include "expExpressionTable.h"
+#include "expObjectTable.h"
+
+
+/*
+ * expObjectTable_variables_oid:
+ * this is the top level oid that we want to register under. This
+ * is essentially a prefix, with the suffix appearing in the
+ * variable below.
+ */
+oid TimeInstance[] = { 1, 3, 6, 1, 2, 1, 1, 3, 0 };
+
+oid expObjectTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 90, 1, 2, 3 };
+
+/*
+ * variable2 expObjectTable_variables:
+ */
+
+struct variable2 expObjectTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+#define EXPOBJECTID 2
+ {EXPOBJECTID, ASN_OBJECT_ID, RWRITE, var_expObjectTable, 2, {1, 2}},
+#define EXPOBJECTIDWILDCARD 3
+ {EXPOBJECTIDWILDCARD, ASN_INTEGER, RWRITE, var_expObjectTable, 2, {1, 3}},
+#define EXPOBJECTSAMPLETYPE 4
+ {EXPOBJECTSAMPLETYPE, ASN_INTEGER, RWRITE, var_expObjectTable, 2, {1, 4}},
+#define EXPOBJECTDELTADISCONTINUITYID 5
+ {EXPOBJECTDELTADISCONTINUITYID, ASN_OBJECT_ID, RWRITE, var_expObjectTable, 2, {1, 5}},
+#define EXPOBJECTDISCONTINUITYIDWILDCARD 6
+ {EXPOBJECTDISCONTINUITYIDWILDCARD, ASN_INTEGER, RWRITE, var_expObjectTable, 2, {1, 6}},
+#define EXPOBJECTDISCONTINUITYIDTYPE 7
+ {EXPOBJECTDISCONTINUITYIDTYPE, ASN_INTEGER, RWRITE, var_expObjectTable, 2, {1, 7}},
+#define EXPOBJECTCONDITIONAL 8
+ {EXPOBJECTCONDITIONAL, ASN_OBJECT_ID, RWRITE, var_expObjectTable, 2, {1, 8}},
+#define EXPOBJECTCONDITIONALWILDCARD 9
+ {EXPOBJECTCONDITIONALWILDCARD, ASN_INTEGER, RWRITE, var_expObjectTable, 2, {1, 9}},
+#define EXPOBJECTENTRYSTATUS 10
+ {EXPOBJECTENTRYSTATUS, ASN_INTEGER, RWRITE, var_expObjectTable, 2, {1, 10}}
+};
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+extern struct header_complex_index *expExpressionTableStorage;
+extern struct header_complex_index *expValueTableStorage;
+
+struct header_complex_index *expObjectTableStorage = NULL;
+
+/*
+ * init_expObjectTable():
+ * Initialization routine. This is called when the agent starts up.
+ * At a minimum, registration of your variables should take place here.
+ */
+void
+init_expObjectTable(void)
+{
+ DEBUGMSGTL(("expObjectTable", "initializing... "));
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("expObjectTable",
+ expObjectTable_variables, variable2,
+ expObjectTable_variables_oid);
+
+ /*
+ * register our config handler(s) to deal with registrations
+ */
+ snmpd_register_config_handler("expObjectTable", parse_expObjectTable,
+ NULL, NULL);
+
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_expObjectTable, NULL);
+
+ DEBUGMSGTL(("expObjectTable", "done.\n"));
+}
+
+
+struct expObjectTable_data *
+create_expObjectTable_data(void)
+{
+ struct expObjectTable_data *StorageNew;
+
+ StorageNew = SNMP_MALLOC_STRUCT(expObjectTable_data);
+
+ /*
+ * fill in default row values here into StorageNew
+ */
+ /*
+ * fill in values for all tables (even if not
+ * appropriate), since its easier to do here than anywhere
+ * else
+ */
+
+ StorageNew->expObjectIDWildcard = EXPOBJCETIDWILDCARD_FALSE;
+ StorageNew->expObjectSampleType = EXPOBJCETSAMPLETYPE_ABSOLUTEVALUE;
+ memdup((unsigned char **)
+ &(StorageNew->expObjectDeltaDiscontinuityID),
+ (unsigned char *) TimeInstance, sizeof(TimeInstance));
+ StorageNew->expObjectDeltaDiscontinuityIDLen =
+ sizeof(TimeInstance) / sizeof(oid);
+
+
+
+
+ StorageNew->expObjectDiscontinuityIDWildcard =
+ EXPOBJCETDISCONTINUITYIDWILDCARD_FALSE;
+ StorageNew->expObjectDiscontinuityIDType =
+ EXPOBJECTDISCONTINUITYIDTYPE_TIMETICKS;
+
+ StorageNew->expObjectConditional = calloc(1, sizeof(oid) * 2); /* 0.0 */
+ StorageNew->expObjectConditionalLen = 2;
+
+ StorageNew->expObjectID = calloc(1, sizeof(oid) * 2); /* 0.0 */
+ StorageNew->expObjectIDLen = 2;
+
+ StorageNew->expObjectConditionalWildcard =
+ EXPOBJECTCONDITIONALWILDCARD_FALSE;
+ StorageNew->storageType = ST_NONVOLATILE;
+
+ return StorageNew;
+}
+
+int
+expObjectTable_add(struct expObjectTable_data *thedata)
+{
+ netsnmp_variable_list *vars = NULL;
+
+
+ DEBUGMSGTL(("expObjectTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->expExpressionOwner, thedata->expExpressionOwnerLen); /* expExpressionOwner */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->expExpressionName, thedata->expExpressionNameLen); /* expExpressionName */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_UNSIGNED, (char *) &thedata->expObjectIndex, sizeof(thedata->expObjectIndex)); /* expExpressionName */
+
+
+
+
+ header_complex_add_data(&expObjectTableStorage, vars, thedata);
+ DEBUGMSGTL(("expObjectTable", "registered an entry\n"));
+
+
+ DEBUGMSGTL(("expObjectTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+
+/*
+ * parse_mteTriggerTable():
+ * parses .conf file entries needed to configure the mib.
+ */
+void
+parse_expObjectTable(const char *token, char *line)
+{
+ size_t tmpint;
+ oid *tmpoid = NULL;
+ struct expObjectTable_data *StorageTmp =
+ SNMP_MALLOC_STRUCT(expObjectTable_data);
+
+ DEBUGMSGTL(("expObjectTable", "parsing config... "));
+
+ if (StorageTmp == NULL) {
+ config_perror("malloc failure");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->expExpressionOwner,
+ &StorageTmp->expExpressionOwnerLen);
+ if (StorageTmp->expExpressionOwner == NULL) {
+ config_perror("invalid specification for expExpressionOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->expExpressionName,
+ &StorageTmp->expExpressionNameLen);
+ if (StorageTmp->expExpressionName == NULL) {
+ config_perror("invalid specification for expExpressionName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->expObjectIndex, &tmpint);
+
+ line =
+ read_config_read_data(ASN_OBJECT_ID, line,
+ &StorageTmp->expObjectID,
+ &StorageTmp->expObjectIDLen);
+ if (StorageTmp->expObjectID == NULL) {
+ config_perror("invalid specification for expObjectID");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->expObjectIDWildcard, &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->expObjectSampleType, &tmpint);
+
+ line =
+ read_config_read_data(ASN_OBJECT_ID, line,
+ &StorageTmp->expObjectDeltaDiscontinuityID,
+ &StorageTmp->
+ expObjectDeltaDiscontinuityIDLen);
+ if (StorageTmp->expObjectDeltaDiscontinuityID == NULL) {
+ config_perror
+ ("invalid specification for expObjectDeltaDiscontinuityID");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->
+ expObjectDiscontinuityIDWildcard, &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->expObjectDiscontinuityIDType,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OBJECT_ID, line,
+ &StorageTmp->expObjectConditional,
+ &StorageTmp->expObjectConditionalLen);
+ if (StorageTmp->expObjectConditional == NULL) {
+ config_perror("invalid specification for expObjectConditional");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->expObjectConditionalWildcard,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->expObjectEntryStatus, &tmpint);
+
+ StorageTmp->storageType = ST_NONVOLATILE;
+ expObjectTable_add(StorageTmp);
+
+ DEBUGMSGTL(("expObjectTable", "done.\n"));
+
+}
+
+
+
+/*
+ * store_expExpressionTable():
+ * stores .conf file entries needed to configure the mib.
+ */
+int
+store_expObjectTable(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr;
+ size_t tmpint;
+ struct expObjectTable_data *StorageTmp;
+ struct header_complex_index *hcindex;
+
+ DEBUGMSGTL(("expObjectTable", "storing data... "));
+
+ for (hcindex = expObjectTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp = (struct expObjectTable_data *) hcindex->data;
+
+
+
+ if (StorageTmp->storageType == ST_NONVOLATILE) {
+
+ memset(line, 0, sizeof(line));
+ strcat(line, "expObjectTable ");
+ cptr = line + strlen(line);
+ /*
+ * expObjectTable
+ */
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->expExpressionOwner,
+ &StorageTmp->expExpressionOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->expExpressionName,
+ &StorageTmp->expExpressionNameLen);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->expObjectIndex,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OBJECT_ID, cptr,
+ &StorageTmp->expObjectID,
+ &StorageTmp->expObjectIDLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->expObjectIDWildcard,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->expObjectSampleType,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OBJECT_ID, cptr,
+ &StorageTmp->
+ expObjectDeltaDiscontinuityID,
+ &StorageTmp->
+ expObjectDeltaDiscontinuityIDLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ expObjectDiscontinuityIDWildcard,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ expObjectDiscontinuityIDType,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OBJECT_ID, cptr,
+ &StorageTmp->expObjectConditional,
+ &StorageTmp->
+ expObjectConditionalLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ expObjectConditionalWildcard,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->expObjectEntryStatus,
+ &tmpint);
+ snmpd_store_config(line);
+ }
+ }
+ DEBUGMSGTL(("expObjectTable", "storage done\n"));
+}
+
+
+/*
+ * var_expObjectTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_expObjectTable above.
+ */
+unsigned char *
+var_expObjectTable(struct variable *vp,
+ oid * name,
+ size_t *length,
+ int exact, size_t *var_len, WriteMethod ** write_method)
+{
+ struct expObjectTable_data *StorageTmp = NULL;
+
+
+ DEBUGMSGTL(("expObjectTable", "var_expObjectTable: Entering... \n"));
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(expObjectTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL) {
+ if (vp->magic == EXPOBJECTENTRYSTATUS)
+ *write_method = write_expObjectEntryStatus;
+ return NULL;
+ }
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+
+ case EXPOBJECTID:
+ *write_method = write_expObjectID;
+ *var_len = StorageTmp->expObjectIDLen * sizeof(oid);
+ return (u_char *) StorageTmp->expObjectID;
+
+ case EXPOBJECTIDWILDCARD:
+ *write_method = write_expObjectIDWildcard;
+ *var_len = sizeof(StorageTmp->expObjectIDWildcard);
+ return (u_char *) & StorageTmp->expObjectIDWildcard;
+
+ case EXPOBJECTSAMPLETYPE:
+ *write_method = write_expObjectSampleType;
+ *var_len = sizeof(StorageTmp->expObjectSampleType);
+ return (u_char *) & StorageTmp->expObjectSampleType;
+
+ case EXPOBJECTDELTADISCONTINUITYID:
+ *write_method = write_expObjectDeltaDiscontinuityID;
+ *var_len =
+ StorageTmp->expObjectDeltaDiscontinuityIDLen * sizeof(oid);
+ return (u_char *) StorageTmp->expObjectDeltaDiscontinuityID;
+
+ case EXPOBJECTDISCONTINUITYIDWILDCARD:
+ *write_method = write_expObjectDiscontinuityIDWildcard;
+ *var_len = sizeof(StorageTmp->expObjectDiscontinuityIDWildcard);
+ return (u_char *) & StorageTmp->expObjectDiscontinuityIDWildcard;
+
+ case EXPOBJECTDISCONTINUITYIDTYPE:
+ *write_method = write_expObjectDiscontinuityIDWildcard;
+ *var_len = sizeof(StorageTmp->expObjectDiscontinuityIDType);
+ return (u_char *) & StorageTmp->expObjectDiscontinuityIDType;
+
+ case EXPOBJECTCONDITIONAL:
+ *write_method = write_expObjectConditional;
+ *var_len = StorageTmp->expObjectConditionalLen * sizeof(oid);
+ return (u_char *) StorageTmp->expObjectConditional;
+
+ case EXPOBJECTCONDITIONALWILDCARD:
+ *write_method = write_expObjectConditionalWildcard;
+ *var_len = sizeof(StorageTmp->expObjectConditionalWildcard);
+ return (u_char *) & StorageTmp->expObjectConditionalWildcard;
+
+ case EXPOBJECTENTRYSTATUS:
+ *write_method = write_expObjectEntryStatus;
+ *var_len = sizeof(StorageTmp->expObjectEntryStatus);
+ return (u_char *) & StorageTmp->expObjectEntryStatus;
+
+
+ default:
+ ERROR_MSG("");
+ }
+ return NULL;
+}
+
+int
+write_expObjectID(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static oid *tmpvar;
+ struct expObjectTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(expObjectTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("expObjectTable",
+ "write_expObjectID entering action=%d... \n", action));
+ if ((StorageTmp =
+ header_complex(expObjectTableStorage, NULL,
+ &name[sizeof(expObjectTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OBJECT_ID) {
+ snmp_log(LOG_ERR, "write to expObjectID not ASN_OBJECT_ID\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->expObjectID;
+ tmplen = StorageTmp->expObjectIDLen;
+ memdup((u_char **) & StorageTmp->expObjectID, var_val,
+ var_val_len);
+ StorageTmp->expObjectIDLen = var_val_len / sizeof(oid);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->expObjectID);
+ StorageTmp->expObjectID = tmpvar;
+ StorageTmp->expObjectIDLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ /*
+ * XXX: if the valueID has actually changed, shouldn't we dump any
+ * previous values, as these are from a different object?
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_expObjectIDWildcard(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct expObjectTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(expObjectTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("expObjectTable",
+ "write_expObjectIDWildcard entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(expObjectTableStorage, NULL,
+ &name[sizeof(expObjectTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to expObjectIDWildcard not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->expObjectIDWildcard;
+ StorageTmp->expObjectIDWildcard = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->expObjectIDWildcard = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+write_expObjectSampleType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct expObjectTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(expObjectTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("expObjectTable",
+ "write_expObjectSampleType entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(expObjectTableStorage, NULL,
+ &name[sizeof(expObjectTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to expObjectSampleTypenot ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->expObjectSampleType;
+ StorageTmp->expObjectSampleType = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->expObjectSampleType = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_expObjectDeltaDiscontinuityID(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static oid *tmpvar;
+ struct expObjectTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(expObjectTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("expObjectTable",
+ "write_expObjectDeltaDiscontinuityID entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(expObjectTableStorage, NULL,
+ &name[sizeof(expObjectTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OBJECT_ID) {
+ snmp_log(LOG_ERR,
+ "write to expObjectDeltaDiscontinuityID not ASN_OBJECT_ID\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->expObjectDeltaDiscontinuityID;
+ tmplen = StorageTmp->expObjectDeltaDiscontinuityIDLen;
+ memdup((u_char **) & StorageTmp->expObjectDeltaDiscontinuityID,
+ var_val, var_val_len);
+ StorageTmp->expObjectDeltaDiscontinuityIDLen =
+ var_val_len / sizeof(oid);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->expObjectDeltaDiscontinuityID);
+ StorageTmp->expObjectDeltaDiscontinuityID = tmpvar;
+ StorageTmp->expObjectDeltaDiscontinuityIDLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ /*
+ * XXX: if the valueID has actually changed, shouldn't we dump any
+ * previous values, as these are from a different object?
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_expObjectDiscontinuityIDWildcard(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct expObjectTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(expObjectTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("expObjectTable",
+ "write_expObjectDiscontinuityIDWildcard entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(expObjectTableStorage, NULL,
+ &name[sizeof(expObjectTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to expObjectDiscontinuityIDWildcard not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->expObjectDiscontinuityIDWildcard;
+ StorageTmp->expObjectDiscontinuityIDWildcard = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->expObjectDiscontinuityIDWildcard = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_expObjectDiscontinuityIDType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct expObjectTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(expObjectTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("expObjectTable",
+ "write_expObjectDiscontinuityIDWildcard entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(expObjectTableStorage, NULL,
+ &name[sizeof(expObjectTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to expObjectDiscontinuityIDType not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->expObjectDiscontinuityIDType;
+ StorageTmp->expObjectDiscontinuityIDType = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->expObjectDiscontinuityIDType = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_expObjectConditional(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static oid *tmpvar;
+ struct expObjectTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(expObjectTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("expObjectTable",
+ "write_expObjectConditional entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(expObjectTableStorage, NULL,
+ &name[sizeof(expObjectTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OBJECT_ID) {
+ snmp_log(LOG_ERR,
+ "write to expObjectConditional not ASN_OBJECT_ID\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->expObjectConditional;
+ tmplen = StorageTmp->expObjectConditionalLen;
+ memdup((u_char **) & StorageTmp->expObjectConditional, var_val,
+ var_val_len);
+ StorageTmp->expObjectConditionalLen = var_val_len / sizeof(oid);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->expObjectConditional);
+ StorageTmp->expObjectConditional = tmpvar;
+ StorageTmp->expObjectConditionalLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ /*
+ * XXX: if the valueID has actually changed, shouldn't we dump any
+ * previous values, as these are from a different object?
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_expObjectConditionalWildcard(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct expObjectTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(expObjectTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("expObjectTable",
+ "write_expObjectConditionalWildcard entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(expObjectTableStorage, NULL,
+ &name[sizeof(expObjectTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to expObjectConditionalWildcard not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->expObjectConditionalWildcard;
+ StorageTmp->expObjectConditionalWildcard = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->expObjectConditionalWildcard = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_expObjectEntryStatus(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ struct expObjectTable_data *StorageTmp = NULL;
+ static struct expObjectTable_data *StorageNew, *StorageDel;
+ size_t newlen =
+ name_len - (sizeof(expObjectTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+ static int old_value;
+ int set_value;
+ static netsnmp_variable_list *vars, *vp;
+ struct header_complex_index *hciptr;
+
+ StorageTmp =
+ header_complex(expObjectTableStorage, NULL,
+ &name[sizeof(expObjectTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL, NULL);
+
+
+
+
+ if (var_val_type != ASN_INTEGER || var_val == NULL) {
+ snmp_log(LOG_ERR,
+ "write to expObjectEntryStatus not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ set_value = *((long *) var_val);
+
+
+ /*
+ * check legal range, and notReady is reserved for us, not a user
+ */
+ if (set_value < 1 || set_value > 6 || set_value == RS_NOTREADY)
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+
+ switch (action) {
+ case RESERVE1:
+ /*
+ * stage one: test validity
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * create the row now?
+ */
+
+
+ /*
+ * ditch illegal values now
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE)
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+
+ /*
+ * destroying a non-existent row is actually legal
+ */
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+
+
+ /*
+ * illegal creation values
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE) {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ } else {
+ /*
+ * row exists. Check for a valid state change
+ */
+ if (set_value == RS_CREATEANDGO
+ || set_value == RS_CREATEANDWAIT) {
+ /*
+ * can't create a row that exists
+ */
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+
+ if (StorageTmp->expObjectEntryStatus == RS_ACTIVE &&
+ set_value != RS_DESTROY) {
+ /*
+ * "Once made active an entry may not be modified except to
+ * delete it." XXX: doesn't this in fact apply to ALL
+ * columns of the table and not just this one?
+ */
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+
+
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * creation
+ */
+ vars = NULL;
+
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0); /* expExpressionOwner */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0); /* expExpressionName */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_UNSIGNED, NULL, 0); /* expObjectIndex */
+
+
+
+ if (header_complex_parse_oid
+ (&
+ (name
+ [sizeof(expObjectTable_variables_oid) / sizeof(oid) +
+ 2]), newlen, vars) != SNMPERR_SUCCESS) {
+ /*
+ * XXX: free, zero vars
+ */
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+ vp = vars;
+
+
+ StorageNew = create_expObjectTable_data();
+
+ StorageNew->expExpressionOwner = malloc(vp->val_len + 1);
+ memcpy(StorageNew->expExpressionOwner, vp->val.string,
+ vp->val_len);
+ StorageNew->expExpressionOwner[vp->val_len] = '\0';
+ StorageNew->expExpressionOwnerLen = vp->val_len;
+
+ vp = vp->next_variable;
+ StorageNew->expExpressionName = malloc(vp->val_len + 1);
+ memcpy(StorageNew->expExpressionName, vp->val.string,
+ vp->val_len);
+
+ StorageNew->expExpressionName[vp->val_len] = '\0';
+ StorageNew->expExpressionNameLen = vp->val_len;
+
+ vp = vp->next_variable;
+ StorageNew->expObjectIndex = *vp->val.integer;
+
+ StorageNew->expObjectEntryStatus = set_value;
+
+ }
+
+
+ break;
+
+
+
+
+ case FREE:
+ /*
+ * XXX: free, zero vars
+ */
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in set_value for you to
+ * use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in
+ * the UNDO case
+ */
+
+
+ if (StorageTmp == NULL) {
+ /*
+ * row creation, so add it
+ */
+ if (StorageNew != NULL)
+ expObjectTable_add(StorageNew);
+ /*
+ * XXX: ack, and if it is NULL?
+ */
+ } else if (set_value != RS_DESTROY) {
+ /*
+ * set the flag?
+ */
+ old_value = StorageTmp->expObjectEntryStatus;
+ StorageTmp->expObjectEntryStatus = *((long *) var_val);
+ } else {
+ /*
+ * destroy... extract it for now
+ */
+ hciptr =
+ header_complex_find_entry(expObjectTableStorage,
+ StorageTmp);
+ StorageDel =
+ header_complex_extract_entry(&expObjectTableStorage,
+ hciptr);
+ }
+ break;
+
+
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * row creation, so remove it again
+ */
+ hciptr =
+ header_complex_find_entry(expObjectTableStorage,
+ StorageTmp);
+ StorageDel =
+ header_complex_extract_entry(&expObjectTableStorage,
+ hciptr);
+ /*
+ * XXX: free it
+ */
+ } else if (StorageDel != NULL) {
+ /*
+ * row deletion, so add it again
+ */
+ expObjectTable_add(StorageDel);
+ } else {
+ StorageTmp->expObjectEntryStatus = old_value;
+ }
+ break;
+
+
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ if (StorageDel != NULL) {
+ StorageDel = 0;
+ /*
+ * XXX: free it, its dead
+ */
+ } else {
+ if (StorageTmp
+ && StorageTmp->expObjectEntryStatus == RS_CREATEANDGO) {
+ StorageTmp->expObjectEntryStatus = RS_ACTIVE;
+ } else if (StorageTmp &&
+ StorageTmp->expObjectEntryStatus ==
+ RS_CREATEANDWAIT) {
+ StorageTmp->expObjectEntryStatus = RS_NOTINSERVICE;
+ }
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expObjectTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expObjectTable.h
new file mode 100644
index 0000000000..86fea31a6f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expObjectTable.h
@@ -0,0 +1,92 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name: expObjectTable.h
+ *File Description: head file.
+ *
+ *Current Version:1.0
+ *Author:JianShun Tong
+ *Date:2004.8.20
+ */
+
+/*
+ * This file was generated by mib2c and is intended for use as a mib module
+ * for the ucd-snmp snmpd agent.
+ */
+
+
+#ifndef _MIBGROUP_EXPOBJECTABLE_H
+#define _MIBGROUP_EXPOBJECTABLE_H
+
+
+/*
+ * we may use header_complex from the header_complex module
+ */
+config_require(header_complex)
+
+ struct expObjectTable_data {
+ char *expExpressionOwner;
+ size_t expExpressionOwnerLen;
+ char *expExpressionName;
+ size_t expExpressionNameLen;
+ unsigned long expObjectIndex;
+ oid *expObjectID;
+ size_t expObjectIDLen;
+ long expObjectIDWildcard;
+ long expObjectSampleType;
+ oid *expObjectDeltaDiscontinuityID;
+ size_t expObjectDeltaDiscontinuityIDLen;
+ long expObjectDiscontinuityIDWildcard;
+ long expObjectDiscontinuityIDType;
+ oid *expObjectConditional;
+ size_t expObjectConditionalLen;
+ long expObjectConditionalWildcard;
+ long expObjectEntryStatus;
+
+
+ /*
+ * internal variables
+ */
+ int storageType;
+
+
+ };
+ /*
+ * enum definitions from the covered mib sections
+ */
+#define EXPOBJCETIDWILDCARD_TRUE 1
+#define EXPOBJCETIDWILDCARD_FALSE 2
+#define EXPOBJCETDISCONTINUITYIDWILDCARD_TRUE 1
+#define EXPOBJCETDISCONTINUITYIDWILDCARD_FALSE 2
+#define EXPOBJECTCONDITIONALWILDCARD_TRUE 1
+#define EXPOBJECTCONDITIONALWILDCARD_FALSE 2
+#define EXPOBJECTDISCONTINUITYIDTYPE_TIMETICKS 1
+#define EXPOBJECTDISCONTINUITYIDTYPE_TIMESTAMP 2
+#define EXPOBJECTDISCONTINUITYIDTYPE_DATEANDTIME 3
+#define EXPOBJCETSAMPLETYPE_ABSOLUTEVALUE 1
+#define EXPOBJCETSAMPLETYPE_DELTAVALUE 2
+#define EXPOBJCETSAMPLETYPE_CHANGEVALUE 3
+ /*
+ * function prototypes
+ */
+ void init_expObjectTable(void);
+ FindVarMethod var_expObjectTable;
+ SNMPCallback store_expObjectTable;
+ void parse_expObjectTable(const char *, char *);
+
+ WriteMethod write_expObjectID;
+ WriteMethod write_expObjectIDWildcard;
+ WriteMethod write_expObjectSampleType;
+ WriteMethod write_expObjectDeltaDiscontinuityID;
+ WriteMethod write_expObjectDiscontinuityIDWildcard;
+ WriteMethod write_expObjectDiscontinuityIDType;
+ WriteMethod write_expObjectConditional;
+ WriteMethod write_expObjectConditionalWildcard;
+ WriteMethod write_expObjectEntryStatus;
+
+
+
+
+#endif /* _MIBGROUP_EXPOBJECTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expValueTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expValueTable.c
new file mode 100644
index 0000000000..668988240d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expValueTable.c
@@ -0,0 +1,888 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name: expValueTable.c
+ *File Description: expValueTable MIB operation.
+ *
+ *Current Version:1.0
+ *Author:JianShun Tong
+ *Date:2004.8.20
+ */
+
+
+/*
+ * This file was generated by mib2c and is intended for use as
+ * a mib module for the ucd-snmp snmpd agent.
+ */
+
+
+/*
+ * This should always be included first before anything else
+ */
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <stdio.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+
+/*
+ * minimal include directives
+ */
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "header_complex.h"
+#include "expExpressionTable.h"
+#include "expValueTable.h"
+#include "expObjectTable.h"
+
+
+/*
+ * expValueTable_variables_oid:
+ * this is the top level oid that we want to register under. This
+ * is essentially a prefix, with the suffix appearing in the
+ * variable below.
+ */
+
+oid expValueTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 90, 1, 3, 1 };
+
+struct s_node {
+ unsigned data;
+ struct s_node *next;
+};
+typedef struct s_node link;
+link *operater = NULL;
+link *operand = NULL;
+
+/*
+ * variable2 expObjectTable_variables:
+ */
+
+struct variable2 expValueTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+#define EXPVALUECOUNTER32VAL 2
+ {EXPVALUECOUNTER32VAL, ASN_COUNTER, RONLY, var_expValueTable, 2, {1, 2}},
+#define EXPVALUEUNSIGNED32VAL 3
+ {EXPVALUEUNSIGNED32VAL, ASN_UNSIGNED, RONLY, var_expValueTable, 2, {1, 3}},
+#define EXPVALUETIMETICKSVAL 4
+ {EXPVALUETIMETICKSVAL, ASN_UNSIGNED, RONLY, var_expValueTable, 2, {1, 4}},
+#define EXPVALUEINTEGER32VAL 5
+ {EXPVALUEINTEGER32VAL, ASN_INTEGER, RONLY, var_expValueTable, 2, {1, 5}},
+#define EXPVALUEIPADDRESSVAL 6
+ {EXPVALUEIPADDRESSVAL, ASN_IPADDRESS, RONLY, var_expValueTable, 2, {1, 6}},
+#define EXPVALUEOCTETSTRINGVAL 7
+ {EXPVALUEOCTETSTRINGVAL, ASN_OCTET_STR, RONLY, var_expValueTable, 2, {1, 7}},
+#define EXPVALUEOIDVAL 8
+ {EXPVALUEOIDVAL, ASN_OBJECT_ID, RONLY, var_expValueTable, 2, {1, 8}},
+#define EXPVALUECOUNTER64VAL 9
+ {EXPVALUECOUNTER64VAL, ASN_INTEGER, RONLY, var_expValueTable, 2, {1, 9}}
+};
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+extern struct header_complex_index *expExpressionTableStorage;
+extern struct header_complex_index *expObjectTableStorage;
+struct header_complex_index *expValueTableStorage = NULL;
+struct snmp_session session;
+
+/*
+ * init_expValueTable():
+ * Initialization routine. This is called when the agent starts up.
+ * At a minimum, registration of your variables should take place here.
+ */
+void
+init_expValueTable(void)
+{
+ DEBUGMSGTL(("expValueTable", "initializing... "));
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("expValueTable",
+ expValueTable_variables, variable2,
+ expValueTable_variables_oid);
+ init_snmp("snmpapp");
+
+ /*
+ * Initialize a "session" that defines who we're going to talk to
+ */
+ snmp_sess_init(&session); /* set up defaults */
+ session.peername = "localhost";
+
+ DEBUGMSGTL(("expValueTable", "done.\n"));
+}
+
+struct expValueTable_data *
+create_expValueTable_data(void)
+{
+ struct expValueTable_data *StorageNew;
+
+ StorageNew = SNMP_MALLOC_STRUCT(expValueTable_data);
+
+ /*
+ * fill in default row values here into StorageNew
+ */
+ /*
+ * fill in values for all tables (even if not
+ * appropriate), since its easier to do here than anywhere
+ * else
+ */
+ StorageNew->expExpressionOwner = strdup("");
+ StorageNew->expExpressionName = strdup("");
+ StorageNew->expValueInstance = calloc(1, sizeof(oid) * sizeof(2)); /* 0.0.0 */
+ StorageNew->expValueInstanceLen = 3;
+ return StorageNew;
+}
+
+/*
+ * mteTriggerTable_add(): adds a structure node to our data set
+ */
+int
+expValueTable_add(struct expExpressionTable_data *expression_data,
+ char *owner, size_t owner_len, char *name,
+ size_t name_len, oid * index, size_t index_len)
+{
+ netsnmp_variable_list *vars = NULL;
+ struct expValueTable_data *thedata, *StorageTmp;
+ struct header_complex_index *hcindex;
+ int founded = 0;
+ thedata = create_expValueTable_data();
+ thedata->expValueCounter32Val = 0;
+ thedata->expExpressionOwner = owner;
+ thedata->expExpressionOwnerLen = owner_len;
+ thedata->expExpressionName = name;
+ thedata->expExpressionNameLen = name_len;
+ thedata->expValueInstance = index;
+ thedata->expValueInstanceLen = index_len;
+ thedata->expression_data = expression_data;
+ DEBUGMSGTL(("expValueTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->expExpressionOwner, thedata->expExpressionOwnerLen); /* expExpressionOwner */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->expExpressionName, thedata->expExpressionNameLen); /* expExpressionName */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_PRIV_IMPLIED_OBJECT_ID,
+ (u_char *) thedata->expValueInstance,
+ thedata->expValueInstanceLen * sizeof(oid));
+
+ for (hcindex = expValueTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp = (struct expValueTable_data *) hcindex->data;
+ if (!strcmp
+ (StorageTmp->expExpressionOwner, thedata->expExpressionOwner)
+ && (StorageTmp->expExpressionOwnerLen ==
+ thedata->expExpressionOwnerLen)
+ && !strcmp(StorageTmp->expExpressionName,
+ thedata->expExpressionName)
+ && (StorageTmp->expExpressionNameLen ==
+ thedata->expExpressionNameLen)
+ && !snmp_oid_compare(StorageTmp->expValueInstance,
+ StorageTmp->expValueInstanceLen,
+ thedata->expValueInstance,
+ thedata->expValueInstanceLen)) {
+ founded = 1;
+ break;
+ }
+
+ }
+ if (!founded) {
+ header_complex_add_data(&expValueTableStorage, vars, thedata);
+ DEBUGMSGTL(("expValueTable", "registered an entry\n"));
+ } else {
+ SNMP_FREE(thedata);
+ DEBUGMSGTL(("expValueTable",
+ "already have an entry, dont registe\n"));
+ }
+
+
+ DEBUGMSGTL(("expValueTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+
+
+
+unsigned long
+Evaluate_Expression(struct expValueTable_data *vtable_data)
+{
+
+ struct header_complex_index *hcindex;
+ struct expObjectTable_data *objstorage, *objfound;
+ struct expValueTable_data *valstorage;
+ valstorage = vtable_data;
+
+ char *expression;
+ char *result, *resultbak;
+ char *temp, *tempbak;
+ char intchar[10];
+ int dollar1, dollar2;
+ int i = 0, j, k, l;
+ long value;
+ unsigned long result_u_long;
+ temp = malloc(100);
+ result = malloc(100);
+ tempbak = temp;
+ memset(result, 0, 100);
+ *result = '\0';
+ resultbak = result;
+
+ expression = vtable_data->expression_data->expExpression;
+
+ while (*expression != '\0') {
+ if (*expression == '$') {
+ objfound = NULL;
+ i++;
+ for (j = 1; j < 100; j++) {
+ if ((*(expression + j) == '+') ||
+ (*(expression + j) == '-') ||
+ (*(expression + j) == '*') ||
+ (*(expression + j) == '/') ||
+ (*(expression + j) == '(') ||
+ (*(expression + j) == ')') ||
+ *(expression + j) == '\0') {
+ break;
+ }
+ }
+ strncpy(temp, expression + 1, j - 1);
+ *(temp + j - 1) = '\0';
+ l = atoi(temp);
+ expression = expression + j;
+ /*
+ * here use snmpget to get value
+ */
+ for (hcindex = expObjectTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ objstorage = (struct expObjectTable_data *) hcindex->data;
+ if (!strcmp
+ (objstorage->expExpressionOwner,
+ valstorage->expExpressionOwner)
+ && (objstorage->expExpressionOwnerLen ==
+ valstorage->expExpressionOwnerLen)
+ && !strcmp(objstorage->expExpressionName,
+ valstorage->expExpressionName)
+ && (objstorage->expExpressionNameLen ==
+ valstorage->expExpressionNameLen)
+ && (l == objstorage->expObjectIndex)) {
+ objfound = objstorage;
+ break;
+ }
+ }
+
+
+ if (!objfound) {
+ /* have err */
+ return 0;
+ }
+ struct snmp_session *ss;
+ struct snmp_pdu *pdu;
+ struct snmp_pdu *response;
+
+ oid anOID[MAX_OID_LEN];
+ size_t anOID_len;
+
+ memcpy(anOID, objfound->expObjectID,
+ objfound->expObjectIDLen * sizeof(oid));
+ anOID_len = objfound->expObjectIDLen;
+ if (objfound->expObjectIDWildcard == EXPOBJCETIDWILDCARD_TRUE) {
+ anOID_len =
+ anOID_len + valstorage->expValueInstanceLen - 2;
+ memcpy(anOID + objfound->expObjectIDLen,
+ valstorage->expValueInstance + 2,
+ (valstorage->expValueInstanceLen -
+ 2) * sizeof(oid));
+ }
+ struct variable_list *vars;
+ int status;
+ int count = 1;
+
+ /*
+ * Initialize the SNMP library
+ */
+
+ /*
+ * Initialize a "session" that defines who we're going to talk to
+ */
+ session.version = vtable_data->expression_data->pdu_version;
+
+ /*
+ * set the SNMPv1 community name used for authentication
+ */
+ session.community =
+ vtable_data->expression_data->pdu_community;
+ session.community_len =
+ vtable_data->expression_data->pdu_community_len;
+ /*
+ * Open the session
+ */
+ SOCK_STARTUP;
+ ss = snmp_open(&session); /* establish the session */
+
+ if (!ss) {
+ /* err */
+ exit(2);
+ }
+ pdu = snmp_pdu_create(SNMP_MSG_GET);
+ snmp_add_null_var(pdu, anOID, anOID_len);
+
+ /*
+ * Send the Request out.
+ */
+ status = snmp_synch_response(ss, pdu, &response);
+
+ /*
+ * Process the response.
+ */
+ if (status == STAT_SUCCESS
+ && response->errstat == SNMP_ERR_NOERROR) {
+ /*
+ * SUCCESS: Print the result variables
+ */
+
+ vars = response->variables;
+ value = *(vars->val.integer);
+ sprintf(intchar, "%u", value);
+ for (k = 1; k <= strlen(intchar); k++) {
+ *result = intchar[k - 1];
+ result++;
+ }
+
+ } else {
+ /*
+ * FAILURE: print what went wrong!
+ */
+
+ if (status == STAT_SUCCESS)
+ fprintf(stderr, "Error in packet\nReason: %s\n",
+ snmp_errstring(response->errstat));
+ else
+ snmp_sess_perror("snmpget", ss);
+
+ }
+
+ /*
+ * Clean up:
+ * 1) free the response.
+ * 2) close the session.
+ */
+ if (response)
+ snmp_free_pdu(response);
+ snmp_close(ss);
+
+ SOCK_CLEANUP;
+
+ } else {
+ *result = *expression;
+ result++;
+ expression++;
+ }
+ }
+ result_u_long = get_result(resultbak);
+ free(tempbak);
+ free(resultbak);
+ return result_u_long;
+}
+
+
+
+
+
+
+
+
+void
+expValueTable_clean(void *data)
+{
+ struct expValueTable_data *cleanme =
+ (struct expValueTable_data *) data;
+ SNMP_FREE(cleanme->expValueInstance);
+ SNMP_FREE(cleanme->expValueIpAddressVal);
+ SNMP_FREE(cleanme->expValueOctetStringVal);
+ SNMP_FREE(cleanme->expValueOidVal);
+ SNMP_FREE(cleanme);
+}
+
+
+
+void
+build_valuetable()
+{
+ struct expExpressionTable_data *expstorage, *expfound;
+ struct expObjectTable_data *objstorage, *objfound = NULL;
+ struct header_complex_index *hcindex, *object_hcindex;
+ char *owner;
+ size_t owner_len;
+ char *name;
+ size_t name_len;
+ char *expression;
+ size_t expression_len;
+ oid *index;
+
+
+ char *result, *resultbak;
+ char *temp, *tempbak;
+ int i = 0, j, k, l;
+ temp = malloc(100);
+ result = malloc(100);
+ tempbak = temp;
+ memset(result, 0, 100);
+ *result = '\0';
+ resultbak = result;
+
+
+ DEBUGMSGTL(("expValueTable", "building valuetable... \n"));
+
+ for (hcindex = expExpressionTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ expstorage = (struct expExpressionTable_data *) hcindex->data;
+ if (expstorage->expExpressionEntryStatus == RS_ACTIVE) {
+ expression = expstorage->expExpression;
+ expression_len = expstorage->expExpressionLen;
+ while (*expression != '\0') {
+ if (*expression == '$') {
+ i++;
+ for (j = 1; j < 100; j++) {
+ if ((*(expression + j) == '+') ||
+ (*(expression + j) == '-') ||
+ (*(expression + j) == '*') ||
+ (*(expression + j) == '/') ||
+ (*(expression + j) == '(') ||
+ (*(expression + j) == ')') ||
+ *(expression + j) == '\0') {
+ break;
+ }
+ }
+ strncpy(temp, expression + 1, j - 1);
+ *(temp + j - 1) = '\0';
+ l = atoi(temp);
+ for (object_hcindex = expObjectTableStorage;
+ object_hcindex != NULL;
+ object_hcindex = object_hcindex->next) {
+ objstorage =
+ (struct expObjectTable_data *) object_hcindex->
+ data;
+ if (!strcmp
+ (objstorage->expExpressionOwner,
+ expstorage->expExpressionOwner)
+ && (objstorage->expExpressionOwnerLen ==
+ expstorage->expExpressionOwnerLen)
+ && !strcmp(objstorage->expExpressionName,
+ expstorage->expExpressionName)
+ && (objstorage->expExpressionNameLen ==
+ expstorage->expExpressionNameLen)
+ && (l == objstorage->expObjectIndex)) {
+ if (objfound == NULL) {
+ expfound = expstorage;
+ objfound = objstorage;
+ }
+ if (objstorage->expObjectIDWildcard ==
+ EXPOBJCETIDWILDCARD_TRUE)
+ objfound = objstorage;
+ }
+ }
+ expression = expression + j;
+ } else {
+ expression++;
+ }
+ };
+ }
+
+ if (!objfound) {
+ continue;
+ }
+ if (objfound->expObjectIDWildcard == EXPOBJCETIDWILDCARD_FALSE) {
+ index = calloc(1, MAX_OID_LEN);
+ *index = 0;
+ *(index + 1) = 0;
+ *(index + 2) = 0;
+ expValueTable_add(expstorage, objfound->expExpressionOwner,
+ objfound->expExpressionOwnerLen,
+ objfound->expExpressionName,
+ objfound->expExpressionNameLen, index, 3);
+ } else {
+ oid *targetOID;
+ size_t taggetOID_len;
+ targetOID = objfound->expObjectID;
+ struct snmp_pdu *pdu;
+ struct snmp_pdu *response;
+ oid *next_OID;
+ size_t next_OID_len;
+ taggetOID_len = objfound->expObjectIDLen;
+ struct variable_list *vars;
+ int status;
+ int count = 1;
+ struct snmp_session *ss;
+ /*
+ * Initialize the SNMP library
+ */
+
+
+ /*
+ * set the SNMP version number
+ */
+ session.version = expstorage->pdu_version;
+
+ /*
+ * set the SNMPv1 community name used for authentication
+ */
+ session.community = expstorage->pdu_community;
+ session.community_len = expstorage->pdu_community_len;
+
+ /*
+ * Open the session
+ */
+ SOCK_STARTUP;
+ ss = snmp_open(&session); /* establish the session */
+ if (!ss) {
+ snmp_perror("ack");
+ snmp_log(LOG_ERR, "something horrible happened!!!\n");
+ exit(2);
+ }
+
+ next_OID = targetOID;
+ next_OID_len = taggetOID_len;
+ do {
+ index = calloc(1, MAX_OID_LEN);
+ pdu = snmp_pdu_create(SNMP_MSG_GETNEXT);
+
+ snmp_add_null_var(pdu, next_OID, next_OID_len);
+
+ /*
+ * Send the Request out.
+ */
+ status = snmp_synch_response(ss, pdu, &response);
+
+ /*
+ * Process the response.
+ */
+ if (status == STAT_SUCCESS
+ && response->errstat == SNMP_ERR_NOERROR) {
+ /*
+ * SUCCESS: Print the result variables
+ */
+
+ if (((response->variables->type >= SNMP_NOSUCHOBJECT &&
+ response->variables->type <= SNMP_ENDOFMIBVIEW)
+ || snmp_oid_compare(targetOID, taggetOID_len,
+ response->variables->name,
+ taggetOID_len) != 0)) {
+ break;
+ }
+ /* add to expValueTable */
+
+ *index = 0;
+ *(index + 1) = 0;
+ memcpy(index + 2,
+ response->variables->name + taggetOID_len,
+ (response->variables->name_length -
+ taggetOID_len) * sizeof(oid));
+ expValueTable_add(expstorage,
+ objfound->expExpressionOwner,
+ objfound->expExpressionOwnerLen,
+ objfound->expExpressionName,
+ objfound->expExpressionNameLen,
+ index,
+ response->variables->name_length -
+ taggetOID_len + 2);
+
+ next_OID = response->variables->name;
+
+ next_OID_len = response->variables->name_length;
+
+
+
+
+ } else {
+ /*
+ * FAILURE: print what went wrong!
+ */
+ if (status == STAT_SUCCESS)
+ fprintf(stderr, "Error in packet\nReason: %s\n",
+ snmp_errstring(response->errstat));
+ else
+ snmp_sess_perror("snmpget", ss);
+ }
+ } while (TRUE);
+
+ }
+
+ }
+
+}
+
+
+
+/*
+ * var_expValueTable():
+ */
+unsigned char *
+var_expValueTable(struct variable *vp,
+ oid * name,
+ size_t *length,
+ int exact, size_t *var_len, WriteMethod ** write_method)
+{
+
+ static netsnmp_variable_list *vars;
+ size_t newlen =
+ *length - (sizeof(expValueTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+ struct expValueTable_data *StorageTmp = NULL;
+ unsigned int counter32;
+
+
+
+
+ DEBUGMSGTL(("expValueTable", "var_expValueTable: Entering... \n"));
+
+ /*
+ * before we build valuetable we must free any other valutable if exist
+ */
+ header_complex_free_all(expValueTableStorage, expValueTable_clean);
+ expValueTableStorage = NULL;
+
+
+ build_valuetable();
+
+
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(expValueTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL)
+ return NULL;
+
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+ /*
+ * we only support counter32val
+ */
+
+ case EXPVALUECOUNTER32VAL:
+ StorageTmp->expValueCounter32Val = Evaluate_Expression(StorageTmp);
+ *var_len = sizeof(StorageTmp->expValueCounter32Val);
+ return (u_char *) & StorageTmp->expValueCounter32Val;
+
+ case EXPVALUEUNSIGNED32VAL:
+ /* var_len = sizeof(StorageTmp->expValueUnsigned32Val); */
+ /* return (u_char *) & StorageTmp->expValueUnsigned32Val; */
+ return NULL;
+
+ case EXPVALUETIMETICKSVAL:
+ /* var_len = sizeof(StorageTmp->expValueTimeTicksVal); */
+ /* return (u_char *) & StorageTmp->expValueTimeTicksVal; */
+ return NULL;
+
+ case EXPVALUEINTEGER32VAL:
+ /* var_len = sizeof(StorageTmp->expValueInteger32Val); */
+ /* return (u_char *) & StorageTmp->expValueInteger32Val; */
+ return NULL;
+
+ case EXPVALUEIPADDRESSVAL:
+ /* var_len = sizeof(StorageTmp->expValueIpAddressVal); */
+ /* return (u_char *) & StorageTmp->expValueIpAddressVal; */
+ return NULL;
+
+ case EXPVALUEOCTETSTRINGVAL:
+ /* var_len = sizeof(StorageTmp->expValueOctetStringVal); */
+ /* return (u_char *) & StorageTmp->expValueOctetStringVal; */
+ return NULL;
+
+ case EXPVALUEOIDVAL:
+ /* var_len = StorageTmp->expValueOidValLen; */
+ /* return (u_char *) & StorageTmp->expValueOidVal; */
+ return NULL;
+
+ case EXPVALUECOUNTER64VAL:
+ /* var_len = sizeof(StorageTmp->expValueCounter64Val); */
+ /* return (u_char *) & StorageTmp->expValueCounter64Val; */
+ return NULL;
+ default:
+ ERROR_MSG("");
+ }
+}
+
+
+
+
+
+void
+push(link ** stack, unsigned long value)
+{
+ link *newnode;
+ newnode = (link *) malloc(sizeof(link));
+ if (!newnode) {
+ printf("\nMemory allocation failure!");
+ return;
+ }
+ newnode->data = value;
+ newnode->next = *stack;
+ *stack = newnode;
+}
+
+unsigned long
+pop(link ** stack)
+{
+ unsigned long value;
+ link *top;
+ top = *stack;
+ *stack = (*stack)->next;
+ value = top->data;
+ free(top);
+ return value;
+}
+
+int
+priority(char operater)
+{
+ switch (operater) {
+ case '*':
+ case '/':
+ return 4;
+ case '+':
+ case '-':
+ return 3;
+ case ')':
+ return 2;
+ case '(':
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+unsigned long
+calculate(int operater, unsigned long a, unsigned long b)
+{
+ switch (operater) {
+ case '+':
+ return (a + b);
+ case '-':
+ return (a - b);
+ case '*':
+ return (a * b);
+ case '/':
+ if (operater == '/' && b == 0) {
+ printf("\nDivision mustn\'t be 0!");
+ exit(0);
+ } else
+ return (a / b);
+ }
+}
+
+unsigned long
+get_operand(char *p, int *length)
+{
+ char c[13];
+ int i = 0, k = 1;
+ unsigned long result = 0;
+ while (*p <= 57 && *p >= 48)
+ c[i++] = *(p++);
+ *length += --i;
+ for (; i >= 0; i--) {
+ result += (c[i] - 48) * k;
+ k *= 10;
+ }
+ return result;
+}
+
+int
+operator_class(char c)
+{
+ if (c <= 57 && c >= 48)
+ return 1;
+ if (c == 42 || c == 43 || c == 45 || c == 47)
+ return 2;
+ if (c == 41)
+ return 3;
+ if (c == 40)
+ return 4;
+ return 0;
+}
+
+unsigned long
+get_result(char *expr)
+{
+ int position = 0;
+ unsigned long op = 0, a = 0, b = 0, result = 0;
+ char *expression;
+ expression = expr;
+ while (*(expression + position) != '\0'
+ && *(expression + position) != '\n') {
+ switch (operator_class(*(expression + position))) {
+ case 1:
+ push(&operand, get_operand(expression + position, &position));
+ break;
+ case 2:
+ if (operater != NULL)
+ while (operater != NULL
+ && priority(*(expression + position)) <=
+ priority(operater->data)) {
+ a = pop(&operand);
+ b = pop(&operand);
+ op = pop(&operater);
+ push(&operand, calculate(op, b, a));
+ }
+ push(&operater, *(expression + position));
+ break;
+ case 3:
+ while (operater != NULL && operater->data != '(') {
+ a = pop(&operand);
+ b = pop(&operand);
+ op = pop(&operater);
+ push(&operand, calculate(op, b, a));
+ }
+ if (operater->data == '(')
+ pop(&operater);
+ break;
+ case 4:
+ push(&operater, '(');
+ break;
+ default:
+ printf("\nInvalid character in expression:");
+ a = 0;
+ while (*(expression + (int) a) != '\n'
+ && *(expression + (int) a) != '\0') {
+ if (a != position)
+ printf("%c", *(expression + (int) a));
+ else
+ printf("<%c>", *(expression + (int) a));
+ a++;
+ }
+ exit(0);
+ } /* end switch */
+ position++;
+ }
+ while (operater != NULL) {
+ op = pop(&operater);
+ a = pop(&operand);
+ b = pop(&operand);
+ push(&operand, calculate(op, b, a));
+ }
+ result = pop(&operand);
+ return result;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expValueTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expValueTable.h
new file mode 100644
index 0000000000..8569f9d63f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/expression/expValueTable.h
@@ -0,0 +1,63 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:expValueTable.h
+ *File Description: head file.
+ *
+ *Current Version:1.0
+ *Author:JianShun Tong
+ *Date:2004.8.20
+ */
+
+/*
+ * This file was generated by mib2c and is intended for use as a mib module
+ * for the ucd-snmp snmpd agent.
+ */
+
+
+/*
+ * we may use header_complex from the header_complex module
+ */
+config_require(header_complex)
+
+#ifndef _MIBGROUP_EXPVALUETABLE_H
+#define _MIBGROUP_EXPVALUETABLE_H
+ struct expValueTable_data {
+ char *expExpressionOwner;
+ size_t expExpressionOwnerLen;
+ char *expExpressionName;
+ size_t expExpressionNameLen;
+ oid *expValueInstance;
+ size_t expValueInstanceLen;
+ unsigned long expValueCounter32Val;
+ unsigned long expValueUnsigned32Val;
+ unsigned long expValueTimeTicksVal;
+ long expValueInteger32Val;
+ u_long *expValueIpAddressVal;
+ char *expValueOctetStringVal;
+ size_t expValueOctetStringValLen;
+ oid *expValueOidVal;
+ size_t expValueOidValLen;
+ long expValueCounter64Val;
+
+ /* internal var */
+ struct expExpressionTable_data *expression_data;
+ char *valuestr;
+ };
+
+
+ /*
+ * function prototypes
+ */
+ void init_expValueTable(void);
+ unsigned long get_result(char *expr);
+ FindVarMethod var_expValueTable;
+ int expValueTable_add(struct expExpressionTable_data
+ *expression_data, char *owner,
+ size_t owner_len, char *name,
+ size_t name_len, oid * index,
+ size_t index_len);
+
+#endif /* _MIBGROUP_EXPVALUETABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventNotificationTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventNotificationTable.c
new file mode 100644
index 0000000000..3e0786febc
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventNotificationTable.c
@@ -0,0 +1,97 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.create-dataset.conf,v 5.2 2002/07/17 14:41:53 dts12 Exp $
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "mteEventNotificationTable.h"
+
+netsnmp_table_data_set *mteEventNotif_table_set;
+
+
+/** Initialize the mteEventNotificationTable table by defining its contents and how it's structured */
+void
+initialize_table_mteEventNotificationTable(void)
+{
+ static oid mteEventNotificationTable_oid[] =
+ { 1, 3, 6, 1, 2, 1, 88, 1, 4, 3 };
+ size_t mteEventNotificationTable_oid_len =
+ OID_LENGTH(mteEventNotificationTable_oid);
+
+ /*
+ * create the table structure itself
+ */
+ mteEventNotif_table_set = netsnmp_create_table_data_set("mteEventNotificationTable");
+
+ /*
+ * comment this out or delete if you don't support creation of new rows
+ */
+ mteEventNotif_table_set->allow_creation = 1;
+
+ /***************************************************
+ * Adding indexes
+ */
+ DEBUGMSGTL(("initialize_table_mteEventNotificationTable",
+ "adding indexes to table mteEventNotificationTable\n"));
+ netsnmp_table_set_add_indexes(mteEventNotif_table_set,
+ /* index: mteOwner */
+ ASN_OCTET_STR,
+ /* index: mteEventName */
+ ASN_PRIV_IMPLIED_OCTET_STR,
+ 0);
+
+ DEBUGMSGTL(("initialize_table_mteEventNotificationTable",
+ "adding column types to table mteEventNotificationTable\n"));
+ netsnmp_table_set_multi_add_default_row(mteEventNotif_table_set,
+ COLUMN_MTEEVENTNOTIFICATION,
+ ASN_OBJECT_ID, 1, NULL, 0,
+ COLUMN_MTEEVENTNOTIFICATIONOBJECTSOWNER,
+ ASN_OCTET_STR, 1, NULL, 0,
+ COLUMN_MTEEVENTNOTIFICATIONOBJECTS,
+ ASN_OCTET_STR, 1, NULL, 0, 0);
+
+ /* keep index values around for comparisons later */
+ mteEventNotif_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 mteEventNotificationTable_handler to "NULL"
+ */
+ netsnmp_register_table_data_set(netsnmp_create_handler_registration
+ ("mteEventNotificationTable",
+ mteEventNotificationTable_handler,
+ mteEventNotificationTable_oid,
+ mteEventNotificationTable_oid_len,
+ HANDLER_CAN_RWRITE), mteEventNotif_table_set, NULL);
+}
+
+/** Initializes the mteEventNotificationTable module */
+void
+init_mteEventNotificationTable(void)
+{
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ initialize_table_mteEventNotificationTable();
+}
+
+/** handles requests for the mteEventNotificationTable table, if anything else needs to be done */
+int
+mteEventNotificationTable_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ /*
+ * perform anything here that you need to do. The requests have
+ * already been processed by the master table_dataset handler, but
+ * this gives you chance to act on the request in some other way
+ * if need be.
+ */
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventNotificationTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventNotificationTable.h
new file mode 100644
index 0000000000..dd9bdfa5eb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventNotificationTable.h
@@ -0,0 +1,23 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.create-dataset.conf,v 5.2 2002/07/17 14:41:53 dts12 Exp $
+ */
+#ifndef MTEEVENTNOTIFICATIONTABLE_H
+#define MTEEVENTNOTIFICATIONTABLE_H
+
+/*
+ * function declarations
+ */
+void init_mteEventNotificationTable(void);
+void initialize_table_mteEventNotificationTable(void);
+Netsnmp_Node_Handler mteEventNotificationTable_handler;
+
+/*
+ * column number definitions for table mteEventNotificationTable
+ */
+#define COLUMN_MTEEVENTNOTIFICATION 1
+#define COLUMN_MTEEVENTNOTIFICATIONOBJECTSOWNER 2
+#define COLUMN_MTEEVENTNOTIFICATIONOBJECTS 3
+
+extern netsnmp_table_data_set *mteEventNotif_table_set;
+#endif /* MTEEVENTNOTIFICATIONTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventTable.c
new file mode 100644
index 0000000000..a168fb0c42
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventTable.c
@@ -0,0 +1,340 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.create-dataset.conf,v 5.2 2002/07/17 14:41:53 dts12 Exp $
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "mteTriggerTable.h"
+#include "mteEventTable.h"
+#include "mteEventNotificationTable.h"
+#include "mteObjectsTable.h"
+
+static netsnmp_table_data_set *table_set = NULL;
+
+/** 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 mteEventTable module */
+void
+init_mteEventTable(void)
+{
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ initialize_table_mteEventTable();
+
+ snmpd_register_config_handler("notificationEvent", parse_notificationEvent,
+ NULL,
+ "notificationEvent NAME TRAP_OID [[-w] EXTRA_OID ...]");
+
+ snmpd_register_config_handler("linkUpDownNotifications",
+ parse_linkUpDownNotifications,
+ NULL,
+ "linkUpDownNotifications (yes|no)");
+}
+
+/** handles requests for the mteEventTable table, if anything else needs to be done */
+int
+mteEventTable_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ /*
+ * perform anything here that you need to do. The requests have
+ * already been processed by the master table_dataset handler, but
+ * this gives you chance to act on the request in some other way
+ * if need be.
+ */
+
+ /* XXX: on rowstatus = destroy, remove the corresponding rows from the
+ other tables: snmpEventNotificationTable and the set table */
+ return SNMP_ERR_NOERROR;
+}
+
+void
+parse_linkUpDownNotifications(const char *token, char *line) {
+ if (strncmp(line, "y", 1) == 0) {
+ parse_notificationEvent("notificationEvent", "linkUpTrap linkUp ifIndex ifAdminStatus ifOperStatus");
+ parse_notificationEvent("notificationEvent", "linkDownTrap linkDown ifIndex ifAdminStatus ifOperStatus");
+
+ parse_simple_monitor("monitor", "-r 60 -e linkUpTrap \"Generate linkUp\" ifOperStatus != 2");
+ parse_simple_monitor("monitor", "-r 60 -e linkDownTrap \"Generate linkDown\" ifOperStatus == 2");
+ }
+}
+
+void
+parse_notificationEvent(const char *token, char *line) {
+ char name_buf[64];
+ char oid_name_buf[SPRINT_MAX_LEN];
+ oid oid_buf[MAX_OID_LEN];
+ size_t oid_buf_len = sizeof(oid_buf);
+ int wild = 1;
+ netsnmp_table_row *row;
+ long tlong;
+ char tc;
+
+ /* get the owner */
+ const char *owner = "snmpd.conf";
+
+ /* get the name */
+ char *cp = copy_nword(line, name_buf, SPRINT_MAX_LEN);
+
+ if (!cp || name_buf[0] == '\0') {
+ config_perror("syntax error.");
+ return;
+ }
+
+ for(row = table_set->table->first_row; row; row = row->next) {
+ if (strcmp(row->indexes->val.string, owner) == 0 &&
+ strcmp(row->indexes->next_variable->val.string,
+ name_buf) == 0) {
+ config_perror("An eventd by that name has already been defined.");
+ return;
+ }
+ }
+
+ /* now, get all the trap oid */
+ cp = copy_nword(cp, oid_name_buf, SPRINT_MAX_LEN);
+
+ if (oid_name_buf[0] == '\0') {
+ config_perror("syntax error.");
+ return;
+ }
+ if (!snmp_parse_oid(oid_name_buf, oid_buf, &oid_buf_len)) {
+ snmp_log(LOG_ERR,"namebuf: %s\n",oid_name_buf);
+ config_perror("unable to parse trap oid");
+ return;
+ }
+
+ /*
+ * add to the mteEventNotificationtable to point to the
+ * notification and the objects.
+ */
+ row = netsnmp_create_table_data_row();
+
+ /* indexes */
+ netsnmp_table_row_add_index(row, ASN_OCTET_STR, owner, strlen(owner));
+ netsnmp_table_row_add_index(row, ASN_PRIV_IMPLIED_OCTET_STR,
+ name_buf, strlen(name_buf));
+
+
+ /* columns */
+ netsnmp_set_row_column(row, COLUMN_MTEEVENTNOTIFICATION, ASN_OBJECT_ID,
+ (char *) oid_buf, oid_buf_len * sizeof(oid));
+ netsnmp_set_row_column(row, COLUMN_MTEEVENTNOTIFICATIONOBJECTSOWNER,
+ ASN_OCTET_STR, owner, strlen(owner));
+ netsnmp_set_row_column(row, COLUMN_MTEEVENTNOTIFICATIONOBJECTS,
+ ASN_OCTET_STR, name_buf, strlen(name_buf));
+
+ netsnmp_table_data_add_row(mteEventNotif_table_set->table, row);
+
+ /*
+ * add to the mteEventTable to make it a notification to trigger
+ * notification and the objects.
+ */
+ row = netsnmp_create_table_data_row();
+
+ /* indexes */
+ netsnmp_table_row_add_index(row, ASN_OCTET_STR, owner, strlen(owner));
+ netsnmp_table_row_add_index(row, ASN_PRIV_IMPLIED_OCTET_STR,
+ name_buf, strlen(name_buf));
+
+
+ /* columns */
+ tc = (u_char)0x80;
+ netsnmp_set_row_column(row, COLUMN_MTEEVENTACTIONS, ASN_OCTET_STR,
+ &tc, 1);
+ tlong = MTETRIGGERENABLED_TRUE;
+ netsnmp_set_row_column(row, COLUMN_MTEEVENTENABLED,
+ ASN_INTEGER, (char *) &tlong, sizeof(tlong));
+ tlong = RS_ACTIVE;
+ netsnmp_set_row_column(row, COLUMN_MTEEVENTENTRYSTATUS,
+ ASN_INTEGER, (char *) &tlong, sizeof(tlong));
+
+ netsnmp_table_data_add_row(table_set->table, row);
+
+ /*
+ * now all the objects to put into the trap's object row
+ */
+ while(cp) {
+ cp = copy_nword(cp, oid_name_buf, SPRINT_MAX_LEN);
+ if (strcmp(oid_name_buf, "-w") == 0) {
+ wild = 0;
+ continue;
+ }
+ if (!snmp_parse_oid(oid_name_buf, oid_buf, &oid_buf_len)) {
+ config_perror("unable to parse an object oid");
+ return;
+ }
+ mte_add_object_to_table("snmpd.conf", name_buf,
+ oid_buf, oid_buf_len, wild);
+ wild = 1;
+ }
+}
+
+/*
+ * send trap
+ */
+void
+run_mte_events(struct mteTriggerTable_data *item,
+ oid * name_oid, size_t name_oid_len,
+ const char *eventobjowner, const char *eventobjname)
+{
+ static oid objid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 }; /* snmpTrapIOD.0 */
+
+ netsnmp_variable_list *var_list = NULL;
+
+ netsnmp_table_row *row, *notif_row;
+ netsnmp_table_data_set_storage *col1, *tc, *no, *noo;
+
+ for(row = table_set->table->first_row; row; row = row->next) {
+ if (strcmp(row->indexes->val.string, eventobjowner) == 0 &&
+ strcmp(row->indexes->next_variable->val.string,
+ eventobjname) == 0) {
+ /* run this event */
+ col1 = (netsnmp_table_data_set_storage *) row->data;
+
+ tc = netsnmp_table_data_set_find_column(col1,
+ COLUMN_MTEEVENTACTIONS);
+ if (!tc->data.bitstring[0] & 0x80) {
+ /* not a notification. next! (XXX: do sets) */
+ continue;
+ }
+
+ tc = netsnmp_table_data_set_find_column(col1,
+ COLUMN_MTEEVENTENABLED);
+ if (*(tc->data.integer) != 1) {
+ /* not enabled. next! */
+ continue;
+ }
+
+ if (!mteEventNotif_table_set) {
+ /* no notification info */
+ continue;
+ }
+
+ /* send the notification */
+ var_list = NULL;
+
+ /* XXX: get notif information */
+ for(notif_row = mteEventNotif_table_set->table->first_row;
+ notif_row; notif_row = notif_row->next) {
+ if (strcmp(notif_row->indexes->val.string,
+ eventobjowner) == 0 &&
+ strcmp(notif_row->indexes->next_variable->val.string,
+ eventobjname) == 0) {
+
+ /* run this event */
+ col1 = (netsnmp_table_data_set_storage *) notif_row->data;
+
+ tc = netsnmp_table_data_set_find_column(col1, COLUMN_MTEEVENTNOTIFICATION);
+ no = netsnmp_table_data_set_find_column(col1, COLUMN_MTEEVENTNOTIFICATIONOBJECTS);
+ noo = netsnmp_table_data_set_find_column(col1, COLUMN_MTEEVENTNOTIFICATIONOBJECTSOWNER);
+ if (!tc)
+ continue; /* no notification to be had. XXX: return? */
+
+ /*
+ * snmpTrap oid
+ */
+ snmp_varlist_add_variable(&var_list, objid_snmptrap,
+ sizeof(objid_snmptrap) /
+ sizeof(oid),
+ ASN_OBJECT_ID,
+ (u_char *) tc->data.objid,
+ tc->data_len);
+
+ /* XXX: add objects from the mteObjectsTable */
+ DEBUGMSGTL(("mteEventTable:send_events", "no: %x, no->data: %s", no, no->data.string));
+ DEBUGMSGTL(("mteEventTable:send_events", "noo: %x, noo->data: %s", noo, noo->data.string));
+ DEBUGMSGTL(("mteEventTable:send_events", "name_oid: %x",name_oid));
+ if (no && no->data.string &&
+ noo && noo->data.string && name_oid) {
+ char *tmpowner =
+ netsnmp_strdup_and_null(noo->data.string,
+ noo->data_len);
+ char *tmpname =
+ netsnmp_strdup_and_null(no->data.string,
+ no->data_len);
+
+ DEBUGMSGTL(("mteEventTable:send_events", "Adding objects for owner=%s name=%s", tmpowner, tmpname));
+ mte_add_objects(var_list, item,
+ tmpowner, tmpname,
+ name_oid + item->mteTriggerValueIDLen,
+ name_oid_len - item->mteTriggerValueIDLen);
+ free(tmpowner);
+ free(tmpname);
+ }
+
+ DEBUGMSGTL(("mteEventTable:send_events", "sending an event "));
+ DEBUGMSGOID(("mteEventTable:send_events", tc->data.objid, tc->data_len / sizeof(oid)));
+ DEBUGMSG(("mteEventTable:send_events", "\n"));
+
+ send_v2trap(var_list);
+ snmp_free_varbind(var_list);
+ }
+ }
+ }
+ }
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventTable.h
new file mode 100644
index 0000000000..c67b880456
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteEventTable.h
@@ -0,0 +1,30 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.create-dataset.conf,v 5.2 2002/07/17 14:41:53 dts12 Exp $
+ */
+#ifndef MTEEVENTTABLE_H
+#define MTEEVENTTABLE_H
+
+/*
+ * function declarations
+ */
+void init_mteEventTable(void);
+void initialize_table_mteEventTable(void);
+void run_mte_events(struct mteTriggerTable_data *item,
+ oid * name_oid, size_t name_oid_len,
+ const char *eventobjowner, const char *eventobjname);
+
+
+void parse_notificationEvent(const char *token, char *line);
+void parse_linkUpDownNotifications(const char *token, char *line);
+Netsnmp_Node_Handler mteEventTable_handler;
+
+/*
+ * column number definitions for table mteEventTable
+ */
+#define COLUMN_MTEEVENTNAME 1
+#define COLUMN_MTEEVENTCOMMENT 2
+#define COLUMN_MTEEVENTACTIONS 3
+#define COLUMN_MTEEVENTENABLED 4
+#define COLUMN_MTEEVENTENTRYSTATUS 5
+#endif /* MTEEVENTTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteObjectsTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteObjectsTable.c
new file mode 100644
index 0000000000..1c36df78d8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteObjectsTable.c
@@ -0,0 +1,946 @@
+/*
+ * This file was generated by mib2c and is intended for use as
+ * a mib module for the ucd-snmp snmpd agent.
+ */
+
+
+/*
+ * This should always be included first before anything else
+ */
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+
+/*
+ * minimal include directives
+ */
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "header_complex.h"
+#include "mteTriggerTable.h"
+#include "mteObjectsTable.h"
+
+
+/*
+ * mteObjectsTable_variables_oid:
+ * this is the top level oid that we want to register under. This
+ * is essentially a prefix, with the suffix appearing in the
+ * variable below.
+ */
+
+
+oid mteObjectsTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 88, 1, 3, 1 };
+
+
+/*
+ * variable2 mteObjectsTable_variables:
+ * this variable defines function callbacks and type return information
+ * for the mteObjectsTable mib section
+ */
+
+
+struct variable2 mteObjectsTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+#define MTEOBJECTSID 5
+ {MTEOBJECTSID, ASN_OBJECT_ID, RWRITE, var_mteObjectsTable, 2, {1, 3}},
+#define MTEOBJECTSIDWILDCARD 6
+ {MTEOBJECTSIDWILDCARD, ASN_INTEGER, RWRITE, var_mteObjectsTable, 2,
+ {1, 4}},
+#define MTEOBJECTSENTRYSTATUS 7
+ {MTEOBJECTSENTRYSTATUS, ASN_INTEGER, RWRITE, var_mteObjectsTable, 2,
+ {1, 5}},
+
+};
+/*
+ * (L = length of the oidsuffix)
+ */
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+static struct header_complex_index *mteObjectsTableStorage = NULL;
+
+
+
+
+/*
+ * init_mteObjectsTable():
+ * Initialization routine. This is called when the agent starts up.
+ * At a minimum, registration of your variables should take place here.
+ */
+void
+init_mteObjectsTable(void)
+{
+ DEBUGMSGTL(("mteObjectsTable", "initializing... "));
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("mteObjectsTable", mteObjectsTable_variables, variable2,
+ mteObjectsTable_variables_oid);
+
+
+ /*
+ * register our config handler(s) to deal with registrations
+ */
+ snmpd_register_config_handler("mteObjectsTable", parse_mteObjectsTable,
+ NULL, NULL);
+
+
+ /*
+ * we need to be called back later to store our data
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_mteObjectsTable, NULL);
+
+
+ /*
+ * place any other initialization junk you need here
+ */
+
+
+ DEBUGMSGTL(("mteObjectsTable", "done.\n"));
+}
+
+
+/*
+ * mteObjectsTable_add(): adds a structure node to our data set
+ */
+int
+mteObjectsTable_add(struct mteObjectsTable_data *thedata)
+{
+ netsnmp_variable_list *vars = NULL;
+
+
+ DEBUGMSGTL(("mteObjectsTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->mteOwner, thedata->mteOwnerLen); /* mteOwner */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->mteObjectsName, thedata->mteObjectsNameLen); /* mteObjectsName */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_UNSIGNED, (char *) &thedata->mteObjectsIndex, sizeof(thedata->mteObjectsIndex)); /* mteObjectsIndex */
+
+
+
+ header_complex_add_data(&mteObjectsTableStorage, vars, thedata);
+ DEBUGMSGTL(("mteObjectsTable", "registered an entry\n"));
+
+
+ DEBUGMSGTL(("mteObjectsTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+/*
+ * parse_mteObjectsTable():
+ * parses .conf file entries needed to configure the mib.
+ */
+void
+parse_mteObjectsTable(const char *token, char *line)
+{
+ size_t tmpint;
+ struct mteObjectsTable_data *StorageTmp =
+ SNMP_MALLOC_STRUCT(mteObjectsTable_data);
+
+ DEBUGMSGTL(("mteObjectsTable", "parsing config... "));
+
+
+ if (StorageTmp == NULL) {
+ config_perror("malloc failure");
+ return;
+ }
+
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line, &StorageTmp->mteOwner,
+ &StorageTmp->mteOwnerLen);
+ if (StorageTmp->mteOwner == NULL) {
+ config_perror("invalid specification for mteOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteObjectsName,
+ &StorageTmp->mteObjectsNameLen);
+ if (StorageTmp->mteObjectsName == NULL) {
+ config_perror("invalid specification for mteObjectsName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->mteObjectsIndex, &tmpint);
+
+ line =
+ read_config_read_data(ASN_OBJECT_ID, line,
+ &StorageTmp->mteObjectsID,
+ &StorageTmp->mteObjectsIDLen);
+ if (StorageTmp->mteObjectsID == NULL) {
+ config_perror("invalid specification for mteObjectsID");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteObjectsIDWildcard, &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteObjectsEntryStatus, &tmpint);
+
+
+
+
+ mteObjectsTable_add(StorageTmp);
+
+
+ DEBUGMSGTL(("mteObjectsTable", "done.\n"));
+}
+
+
+
+
+/*
+ * store_mteObjectsTable():
+ * stores .conf file entries needed to configure the mib.
+ */
+int
+store_mteObjectsTable(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr;
+ size_t tmpint;
+ struct mteObjectsTable_data *StorageTmp;
+ struct header_complex_index *hcindex;
+
+
+ DEBUGMSGTL(("mteObjectsTable", "storing data... "));
+
+
+ for (hcindex = mteObjectsTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp = (struct mteObjectsTable_data *) hcindex->data;
+
+ if (StorageTmp->storagetype != ST_READONLY) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "mteObjectsTable ");
+ cptr = line + strlen(line);
+
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->mteOwner,
+ &StorageTmp->mteOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->mteObjectsName,
+ &StorageTmp->mteObjectsNameLen);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->mteObjectsIndex,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OBJECT_ID, cptr,
+ &StorageTmp->mteObjectsID,
+ &StorageTmp->mteObjectsIDLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->mteObjectsIDWildcard,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->mteObjectsEntryStatus,
+ &tmpint);
+
+
+
+ snmpd_store_config(line);
+ }
+ }
+ DEBUGMSGTL(("mteObjectsTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+
+
+/*
+ * var_mteObjectsTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_mteObjectsTable above.
+ */
+unsigned char *
+var_mteObjectsTable(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+
+
+ struct mteObjectsTable_data *StorageTmp = NULL;
+
+
+ DEBUGMSGTL(("mteObjectsTable",
+ "var_mteObjectsTable: Entering... \n"));
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(mteObjectsTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL) {
+ if (vp->magic == MTEOBJECTSENTRYSTATUS)
+ *write_method = write_mteObjectsEntryStatus;
+ return NULL;
+ }
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+
+
+ case MTEOBJECTSID:
+ *write_method = write_mteObjectsID;
+ *var_len = (StorageTmp->mteObjectsIDLen) * sizeof(oid);
+ return (u_char *) StorageTmp->mteObjectsID;
+
+ case MTEOBJECTSIDWILDCARD:
+ *write_method = write_mteObjectsIDWildcard;
+ *var_len = sizeof(StorageTmp->mteObjectsIDWildcard);
+ return (u_char *) & StorageTmp->mteObjectsIDWildcard;
+
+ case MTEOBJECTSENTRYSTATUS:
+ *write_method = write_mteObjectsEntryStatus;
+ *var_len = sizeof(StorageTmp->mteObjectsEntryStatus);
+ return (u_char *) & StorageTmp->mteObjectsEntryStatus;
+
+
+ default:
+ ERROR_MSG("");
+ }
+ return NULL;
+}
+
+
+
+
+int
+write_mteObjectsID(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static oid *tmpvar;
+ struct mteObjectsTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(mteObjectsTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteObjectsTable",
+ "write_mteObjectsID entering action=%d... \n", action));
+ if ((StorageTmp =
+ header_complex(mteObjectsTableStorage, NULL,
+ &name[sizeof(mteObjectsTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storagetype == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OBJECT_ID) {
+ snmp_log(LOG_ERR, "write to mteObjectsID not ASN_OBJECT_ID\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteObjectsID;
+ tmplen = StorageTmp->mteObjectsIDLen;
+ memdup((u_char **) & StorageTmp->mteObjectsID, var_val,
+ var_val_len);
+ StorageTmp->mteObjectsIDLen = var_val_len / sizeof(oid);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteObjectsID);
+ StorageTmp->mteObjectsID = tmpvar;
+ StorageTmp->mteObjectsIDLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteObjectsIDWildcard(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteObjectsTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(mteObjectsTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteObjectsTable",
+ "write_mteObjectsIDWildcard entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteObjectsTableStorage, NULL,
+ &name[sizeof(mteObjectsTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storagetype == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to mteObjectsIDWildcard not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteObjectsIDWildcard;
+ StorageTmp->mteObjectsIDWildcard = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteObjectsIDWildcard = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+
+
+int
+write_mteObjectsEntryStatus(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ struct mteObjectsTable_data *StorageTmp = NULL;
+ static struct mteObjectsTable_data *StorageNew, *StorageDel;
+ size_t newlen =
+ name_len - (sizeof(mteObjectsTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+ static int old_value;
+ int set_value;
+ static netsnmp_variable_list *vars, *vp;
+ struct header_complex_index *hciptr;
+
+
+ StorageTmp =
+ header_complex(mteObjectsTableStorage, NULL,
+ &name[sizeof(mteObjectsTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL, NULL);
+
+ if (var_val_type != ASN_INTEGER || var_val == NULL) {
+ snmp_log(LOG_ERR,
+ "write to mteObjectsEntryStatus not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ if (StorageTmp && StorageTmp->storagetype == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ set_value = *((long *) var_val);
+
+
+ /*
+ * check legal range, and notReady is reserved for us, not a user
+ */
+ if (set_value < 1 || set_value > 6 || set_value == RS_NOTREADY)
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+
+ switch (action) {
+ case RESERVE1:
+ /*
+ * stage one: test validity
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * create the row now?
+ */
+
+
+ /*
+ * ditch illegal values now
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE)
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+
+ /*
+ * destroying a non-existent row is actually legal
+ */
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+
+
+ /*
+ * illegal creation values
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE) {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ } else {
+ /*
+ * row exists. Check for a valid state change
+ */
+ if (set_value == RS_CREATEANDGO
+ || set_value == RS_CREATEANDWAIT) {
+ /*
+ * can't create a row that exists
+ */
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ /*
+ * XXX: interaction with row storage type needed
+ */
+ }
+ break;
+
+
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * creation
+ */
+ vars = NULL;
+
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0); /* mteOwner */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0); /* mteObjectsName */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_UNSIGNED, NULL, 0); /* mteObjectsIndex */
+
+ if (header_complex_parse_oid
+ (&
+ (name
+ [sizeof(mteObjectsTable_variables_oid) / sizeof(oid) +
+ 2]), newlen, vars) != SNMPERR_SUCCESS) {
+ /*
+ * XXX: free, zero vars
+ */
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+ vp = vars;
+
+
+ StorageNew = SNMP_MALLOC_STRUCT(mteObjectsTable_data);
+ StorageNew->mteOwner = netsnmp_strdup_and_null(vp->val.string,
+ vp->val_len);
+ StorageNew->mteOwnerLen = vp->val_len;
+ vp = vp->next_variable;
+ StorageNew->mteObjectsName =
+ netsnmp_strdup_and_null(vp->val.string,
+ vp->val_len);
+ StorageNew->mteObjectsNameLen = vp->val_len;
+ vp = vp->next_variable;
+ StorageNew->mteObjectsIndex = *(vp->val.integer);
+
+ /*
+ * XXX: fill in default row values here into StorageNew
+ */
+ StorageNew->mteObjectsID = calloc(1, sizeof(oid) * sizeof(2)); /* 0.0 */
+ StorageNew->mteObjectsIDLen = 2;
+ StorageNew->mteObjectsIDWildcard = MTEOBJECTSIDWILDCARD_FALSE;
+
+ StorageNew->mteObjectsEntryStatus = set_value;
+ /*
+ * XXX: free, zero vars, no longer needed?
+ */
+ }
+
+
+ break;
+
+
+
+
+ case FREE:
+ /*
+ * XXX: free, zero vars
+ */
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in set_value for you to
+ * use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in
+ * the UNDO case
+ */
+
+
+ if (StorageTmp == NULL) {
+ /*
+ * row creation, so add it
+ */
+ if (StorageNew != NULL)
+ mteObjectsTable_add(StorageNew);
+ /*
+ * XXX: ack, and if it is NULL?
+ */
+ } else if (set_value != RS_DESTROY) {
+ /*
+ * set the flag?
+ */
+ old_value = StorageTmp->mteObjectsEntryStatus;
+ StorageTmp->mteObjectsEntryStatus = *((long *) var_val);
+ } else {
+ /*
+ * destroy... extract it for now
+ */
+ hciptr =
+ header_complex_find_entry(mteObjectsTableStorage,
+ StorageTmp);
+ StorageDel =
+ header_complex_extract_entry(&mteObjectsTableStorage,
+ hciptr);
+ }
+ break;
+
+
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * row creation, so remove it again
+ */
+ hciptr =
+ header_complex_find_entry(mteObjectsTableStorage,
+ StorageTmp);
+ StorageDel =
+ header_complex_extract_entry(&mteObjectsTableStorage,
+ hciptr);
+ /*
+ * XXX: free it
+ */
+ } else if (StorageDel != NULL) {
+ /*
+ * row deletion, so add it again
+ */
+ mteObjectsTable_add(StorageDel);
+ } else {
+ StorageTmp->mteObjectsEntryStatus = old_value;
+ }
+ break;
+
+
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ if (StorageDel != NULL) {
+ StorageDel = 0;
+ /*
+ * XXX: free it, its dead
+ */
+ } else {
+ if (StorageTmp
+ && StorageTmp->mteObjectsEntryStatus == RS_CREATEANDGO) {
+ StorageTmp->mteObjectsEntryStatus = RS_ACTIVE;
+ } else if (StorageTmp &&
+ StorageTmp->mteObjectsEntryStatus ==
+ RS_CREATEANDWAIT) {
+ StorageTmp->mteObjectsEntryStatus = RS_NOTINSERVICE;
+ }
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+void
+mte_add_objects(netsnmp_variable_list * vars,
+ struct mteTriggerTable_data *item, const char *owner,
+ const char *name, oid * suffix, size_t suffix_len)
+{
+ struct header_complex_index *hcptr = mteObjectsTableStorage;
+
+ DEBUGMSGTL(("mteObjectsTable",
+ "Searching for objects to add for owner=%s / name=%s\n",
+ owner, name));
+
+ if (vars == NULL || item == NULL || owner == NULL || name == NULL ||
+ hcptr == NULL)
+ return;
+
+ /*
+ * get to end of variable chain
+ */
+ while (vars->next_variable != NULL)
+ vars = vars->next_variable;
+
+
+ /*
+ * get to start of objects list
+ */
+ while (hcptr &&
+ (strcmp(((struct mteObjectsTable_data *) hcptr->data)->mteOwner,
+ owner) != 0 ||
+ strcmp(((struct mteObjectsTable_data *) hcptr->data)->
+ mteObjectsName, name) != 0))
+ hcptr = hcptr->next;
+
+ /*
+ * add all objects
+ */
+ while (hcptr &&
+ strcmp(((struct mteObjectsTable_data *) hcptr->data)->mteOwner,
+ owner) == 0 &&
+ strcmp(((struct mteObjectsTable_data *) hcptr->data)->
+ mteObjectsName, name) == 0) {
+ /*
+ * loop through objects
+ */
+ netsnmp_pdu *pdu = NULL, *response = NULL;
+ struct mteObjectsTable_data *node =
+ (struct mteObjectsTable_data *) hcptr->data;
+ oid theoid[MAX_OID_LEN];
+ size_t theoid_len;
+
+ /*
+ * copy in the suffix
+ */
+ memcpy(theoid, node->mteObjectsID,
+ node->mteObjectsIDLen * sizeof(oid));
+ theoid_len = node->mteObjectsIDLen;
+ if (node->mteObjectsIDWildcard == MTEOBJECTSIDWILDCARD_TRUE &&
+ suffix && suffix_len > 0) {
+ theoid_len += suffix_len;
+ if (theoid_len > MAX_OID_LEN) {
+ break; /* XXX: properly send trap or something? */
+ }
+
+ memcpy(&theoid[node->mteObjectsIDLen], suffix,
+ suffix_len * sizeof(oid));
+ }
+
+ /*
+ * retrieve the value
+ */
+ pdu = snmp_pdu_create(SNMP_MSG_GET);
+ snmp_add_null_var(pdu, theoid, theoid_len);
+ response = mte_get_response(item, pdu);
+
+ if (response) {
+ if (vars) {
+ vars->next_variable = response->variables;
+ vars = vars->next_variable;
+ DEBUGMSGTL(("mteObjectsTable", "Adding: "));
+ DEBUGMSGOID(("mteObjectsTable", response->variables->name,
+ response->variables->name_length));
+ DEBUGMSG(("mteObjectsTable", "\n"));
+ } else {
+ vars = response->variables;
+ }
+ /*
+ * erase response notion of the values we stole from it
+ */
+ response->variables = NULL;
+ snmp_free_pdu(response);
+ }
+
+ /*
+ * move along
+ */
+ hcptr = hcptr->next;
+ }
+ DEBUGMSGTL(("mteObjectsTable", "Done adding objects\n"));
+}
+
+int
+mte_add_object_to_table(const char *owner, const char *objname,
+ oid * oidname, size_t oidname_len, int iswild)
+{
+ struct header_complex_index *hcptr = mteObjectsTableStorage, *lastnode;
+ static struct mteObjectsTable_data *StorageNew;
+
+ /*
+ * malloc initial struct
+ */
+ StorageNew = SNMP_MALLOC_STRUCT(mteObjectsTable_data);
+ StorageNew->mteOwner = netsnmp_strdup_and_null(owner, strlen(owner));
+ StorageNew->mteOwnerLen = strlen(owner);
+ StorageNew->mteObjectsName = netsnmp_strdup_and_null(objname,
+ strlen(objname));
+ StorageNew->mteObjectsNameLen = strlen(objname);
+
+ /*
+ * find the next number
+ */
+ /*
+ * get to start of objects list
+ */
+ while (hcptr &&
+ (strcmp(((struct mteObjectsTable_data *) hcptr->data)->mteOwner,
+ owner) != 0 ||
+ strcmp(((struct mteObjectsTable_data *) hcptr->data)->
+ mteObjectsName, objname) != 0))
+ hcptr = hcptr->next;
+
+ if (hcptr) {
+ /*
+ * an object existed. Find the first one past and increment
+ * the previous number
+ */
+ lastnode = hcptr;
+ while (hcptr &&
+ strcmp(((struct mteObjectsTable_data *) hcptr->data)->
+ mteOwner, owner) == 0
+ && strcmp(((struct mteObjectsTable_data *) hcptr->data)->
+ mteObjectsName, objname) == 0) {
+ lastnode = hcptr;
+ hcptr = hcptr->next;
+ }
+ StorageNew->mteObjectsIndex =
+ ((struct mteObjectsTable_data *) lastnode->data)->
+ mteObjectsIndex + 1;
+ } else {
+ StorageNew->mteObjectsIndex = 1;
+ }
+
+ /*
+ * XXX: fill in default row values here into StorageNew
+ */
+ StorageNew->mteObjectsID = snmp_duplicate_objid(oidname, oidname_len);
+ StorageNew->mteObjectsIDLen = oidname_len;
+
+ if (iswild)
+ StorageNew->mteObjectsIDWildcard = MTEOBJECTSIDWILDCARD_TRUE;
+ else
+ StorageNew->mteObjectsIDWildcard = MTEOBJECTSIDWILDCARD_FALSE;
+
+ StorageNew->mteObjectsEntryStatus = RS_ACTIVE;
+ StorageNew->storagetype = ST_READONLY;
+ return mteObjectsTable_add(StorageNew);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteObjectsTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteObjectsTable.h
new file mode 100644
index 0000000000..d3c3c500c5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteObjectsTable.h
@@ -0,0 +1,70 @@
+/*
+ * This file was generated by mib2c and is intended for use as a mib module
+ * for the ucd-snmp snmpd agent.
+ */
+
+
+#ifndef _MIBGROUP_MTEOBJECTSTABLE_H
+#define _MIBGROUP_MTEOBJECTSTABLE_H
+
+
+/*
+ * we may use header_complex from the header_complex module
+ */
+
+
+config_require(header_complex)
+
+
+ /*
+ * our storage structure(s)
+ */
+ struct mteObjectsTable_data {
+
+ char *mteOwner;
+ size_t mteOwnerLen;
+ char *mteObjectsName;
+ size_t mteObjectsNameLen;
+ unsigned long mteObjectsIndex;
+ oid *mteObjectsID;
+ size_t mteObjectsIDLen;
+ long mteObjectsIDWildcard;
+ long mteObjectsEntryStatus;
+ int storagetype;
+ };
+
+/*
+ * enum definitions from the covered mib sections
+ */
+
+
+#define MTEOBJECTSIDWILDCARD_TRUE 1
+#define MTEOBJECTSIDWILDCARD_FALSE 2
+
+/*
+ * function prototypes
+ */
+
+
+ void init_mteObjectsTable(void);
+ FindVarMethod var_mteObjectsTable;
+ void parse_mteObjectsTable(const char *, char *);
+ SNMPCallback store_mteObjectsTable;
+ void mte_add_objects(netsnmp_variable_list *,
+ struct mteTriggerTable_data *,
+ const char *, const char *, oid *,
+ size_t);
+ int mte_add_object_to_table(const char *owner,
+ const char *objname,
+ oid * oidname,
+ size_t oidname_len,
+ int iswild);
+ WriteMethod write_mteObjectsID;
+ WriteMethod write_mteObjectsIDWildcard;
+ WriteMethod write_mteObjectsEntryStatus;
+
+ WriteMethod write_mteObjectsEntryStatus;
+
+
+
+#endif /* _MIBGROUP_MTEOBJECTSTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerBooleanTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerBooleanTable.c
new file mode 100644
index 0000000000..49ceb5fb5d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerBooleanTable.c
@@ -0,0 +1,802 @@
+/*
+ * This file was generated by mib2c and is intended for use as
+ * a mib module for the ucd-snmp snmpd agent.
+ */
+
+
+/*
+ * This should always be included first before anything else
+ */
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+
+/*
+ * minimal include directives
+ */
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "header_complex.h"
+#include "mteTriggerBooleanTable.h"
+#include "mteTriggerTable.h"
+
+
+/*
+ * mteTriggerBooleanTable_variables_oid:
+ * this is the top level oid that we want to register under. This
+ * is essentially a prefix, with the suffix appearing in the
+ * variable below.
+ */
+
+
+oid mteTriggerBooleanTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 88, 1, 2, 5 };
+
+
+/*
+ * variable2 mteTriggerBooleanTable_variables:
+ * this variable defines function callbacks and type return information
+ * for the mteTriggerBooleanTable mib section
+ */
+
+
+struct variable2 mteTriggerBooleanTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+#define MTETRIGGERBOOLEANCOMPARISON 3
+ {MTETRIGGERBOOLEANCOMPARISON, ASN_INTEGER, RWRITE,
+ var_mteTriggerBooleanTable, 2, {1, 1}},
+#define MTETRIGGERBOOLEANVALUE 4
+ {MTETRIGGERBOOLEANVALUE, ASN_INTEGER, RWRITE,
+ var_mteTriggerBooleanTable, 2, {1, 2}},
+#define MTETRIGGERBOOLEANSTARTUP 5
+ {MTETRIGGERBOOLEANSTARTUP, ASN_INTEGER, RWRITE,
+ var_mteTriggerBooleanTable, 2, {1, 3}},
+#define MTETRIGGERBOOLEANOBJECTSOWNER 6
+ {MTETRIGGERBOOLEANOBJECTSOWNER, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerBooleanTable, 2, {1, 4}},
+#define MTETRIGGERBOOLEANOBJECTS 7
+ {MTETRIGGERBOOLEANOBJECTS, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerBooleanTable, 2, {1, 5}},
+#define MTETRIGGERBOOLEANEVENTOWNER 8
+ {MTETRIGGERBOOLEANEVENTOWNER, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerBooleanTable, 2, {1, 6}},
+#define MTETRIGGERBOOLEANEVENT 9
+ {MTETRIGGERBOOLEANEVENT, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerBooleanTable, 2, {1, 7}},
+
+};
+/*
+ * (L = length of the oidsuffix)
+ */
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+extern struct header_complex_index *mteTriggerTableStorage;
+
+
+/*
+ * init_mteTriggerBooleanTable():
+ * Initialization routine. This is called when the agent starts up.
+ * At a minimum, registration of your variables should take place here.
+ */
+void
+init_mteTriggerBooleanTable(void)
+{
+ DEBUGMSGTL(("mteTriggerBooleanTable", "initializing... "));
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("mteTriggerBooleanTable",
+ mteTriggerBooleanTable_variables, variable2,
+ mteTriggerBooleanTable_variables_oid);
+
+ DEBUGMSGTL(("mteTriggerBooleanTable", "done.\n"));
+}
+
+/*
+ * var_mteTriggerBooleanTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_mteTriggerBooleanTable above.
+ */
+unsigned char *
+var_mteTriggerBooleanTable(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+
+
+ struct mteTriggerTable_data *StorageTmp = NULL;
+
+
+ DEBUGMSGTL(("mteTriggerBooleanTable",
+ "var_mteTriggerBooleanTable: Entering... \n"));
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL)
+ return NULL;
+
+ if (!(StorageTmp->mteTriggerTest[0] & MTETRIGGERTEST_BOOLEAN))
+ return NULL;
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+
+
+ case MTETRIGGERBOOLEANCOMPARISON:
+ *write_method = write_mteTriggerBooleanComparison;
+ *var_len = sizeof(StorageTmp->mteTriggerBooleanComparison);
+ return (u_char *) & StorageTmp->mteTriggerBooleanComparison;
+
+ case MTETRIGGERBOOLEANVALUE:
+ *write_method = write_mteTriggerBooleanValue;
+ *var_len = sizeof(StorageTmp->mteTriggerBooleanValue);
+ return (u_char *) & StorageTmp->mteTriggerBooleanValue;
+
+ case MTETRIGGERBOOLEANSTARTUP:
+ *write_method = write_mteTriggerBooleanStartup;
+ *var_len = sizeof(StorageTmp->mteTriggerBooleanStartup);
+ return (u_char *) & StorageTmp->mteTriggerBooleanStartup;
+
+ case MTETRIGGERBOOLEANOBJECTSOWNER:
+ *write_method = write_mteTriggerBooleanObjectsOwner;
+ *var_len = StorageTmp->mteTriggerBooleanObjectsOwnerLen;
+ return (u_char *) StorageTmp->mteTriggerBooleanObjectsOwner;
+
+ case MTETRIGGERBOOLEANOBJECTS:
+ *write_method = write_mteTriggerBooleanObjects;
+ *var_len = StorageTmp->mteTriggerBooleanObjectsLen;
+ return (u_char *) StorageTmp->mteTriggerBooleanObjects;
+
+ case MTETRIGGERBOOLEANEVENTOWNER:
+ *write_method = write_mteTriggerBooleanEventOwner;
+ *var_len = StorageTmp->mteTriggerBooleanEventOwnerLen;
+ return (u_char *) StorageTmp->mteTriggerBooleanEventOwner;
+
+ case MTETRIGGERBOOLEANEVENT:
+ *write_method = write_mteTriggerBooleanEvent;
+ *var_len = StorageTmp->mteTriggerBooleanEventLen;
+ return (u_char *) StorageTmp->mteTriggerBooleanEvent;
+
+
+ default:
+ ERROR_MSG("");
+ }
+ return NULL;
+}
+
+
+
+
+int
+write_mteTriggerBooleanComparison(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerBooleanTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerBooleanTable",
+ "write_mteTriggerBooleanComparison entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerBooleanTable_variables_oid)
+ / sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ fprintf(stderr,
+ "write to mteTriggerBooleanComparison not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerBooleanComparison;
+ StorageTmp->mteTriggerBooleanComparison = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerBooleanComparison = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerBooleanValue(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerBooleanTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerBooleanTable",
+ "write_mteTriggerBooleanValue entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerBooleanTable_variables_oid)
+ / sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ fprintf(stderr,
+ "write to mteTriggerBooleanValue not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerBooleanValue;
+ StorageTmp->mteTriggerBooleanValue = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerBooleanValue = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerBooleanStartup(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerBooleanTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerBooleanTable",
+ "write_mteTriggerBooleanStartup entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerBooleanTable_variables_oid)
+ / sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ fprintf(stderr,
+ "write to mteTriggerBooleanStartup not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerBooleanStartup;
+ StorageTmp->mteTriggerBooleanStartup = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerBooleanStartup = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerBooleanObjectsOwner(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerBooleanTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerBooleanTable",
+ "write_mteTriggerBooleanObjectsOwner entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerBooleanTable_variables_oid)
+ / sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerBooleanObjectsOwner not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerBooleanObjectsOwner;
+ tmplen = StorageTmp->mteTriggerBooleanObjectsOwnerLen;
+ StorageTmp->mteTriggerBooleanObjectsOwner =
+ netsnmp_strdup_and_null(var_val, var_val_len);
+ StorageTmp->mteTriggerBooleanObjectsOwnerLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerBooleanObjectsOwner);
+ StorageTmp->mteTriggerBooleanObjectsOwner = tmpvar;
+ StorageTmp->mteTriggerBooleanObjectsOwnerLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerBooleanObjects(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerBooleanTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerBooleanTable",
+ "write_mteTriggerBooleanObjects entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerBooleanTable_variables_oid)
+ / sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerBooleanObjects not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerBooleanObjects;
+ tmplen = StorageTmp->mteTriggerBooleanObjectsLen;
+ StorageTmp->mteTriggerBooleanObjects =
+ netsnmp_strdup_and_null(var_val, var_val_len);
+ StorageTmp->mteTriggerBooleanObjectsLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerBooleanObjects);
+ StorageTmp->mteTriggerBooleanObjects = tmpvar;
+ StorageTmp->mteTriggerBooleanObjectsLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerBooleanEventOwner(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerBooleanTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerBooleanTable",
+ "write_mteTriggerBooleanEventOwner entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerBooleanTable_variables_oid)
+ / sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerBooleanEventOwner not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerBooleanEventOwner;
+ tmplen = StorageTmp->mteTriggerBooleanEventOwnerLen;
+ StorageTmp->mteTriggerBooleanEventOwner =
+ netsnmp_strdup_and_null(var_val, var_val_len);
+ StorageTmp->mteTriggerBooleanEventOwnerLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerBooleanEventOwner);
+ StorageTmp->mteTriggerBooleanEventOwner = tmpvar;
+ StorageTmp->mteTriggerBooleanEventOwnerLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerBooleanEvent(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerBooleanTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerBooleanTable",
+ "write_mteTriggerBooleanEvent entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerBooleanTable_variables_oid)
+ / sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerBooleanEvent not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerBooleanEvent;
+ tmplen = StorageTmp->mteTriggerBooleanEventLen;
+ StorageTmp->mteTriggerBooleanEvent =
+ netsnmp_strdup_and_null(var_val, var_val_len);
+ StorageTmp->mteTriggerBooleanEventLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerBooleanEvent);
+ StorageTmp->mteTriggerBooleanEvent = tmpvar;
+ StorageTmp->mteTriggerBooleanEventLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerBooleanTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerBooleanTable.h
new file mode 100644
index 0000000000..f685586eec
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerBooleanTable.h
@@ -0,0 +1,45 @@
+/*
+ * This file was generated by mib2c and is intended for use as a mib module
+ * for the ucd-snmp snmpd agent.
+ */
+
+
+#ifndef _MIBGROUP_MTETRIGGERBOOLEANTABLE_H
+#define _MIBGROUP_MTETRIGGERBOOLEANTABLE_H
+
+
+/*
+ * we may use header_complex from the header_complex module
+ */
+
+
+config_require(header_complex)
+ /*
+ * enum definitions from the covered mib sections
+ */
+#define MTETRIGGERBOOLEANCOMPARISON_UNEQUAL 1
+#define MTETRIGGERBOOLEANCOMPARISON_EQUAL 2
+#define MTETRIGGERBOOLEANCOMPARISON_LESS 3
+#define MTETRIGGERBOOLEANCOMPARISON_LESSOREQUAL 4
+#define MTETRIGGERBOOLEANCOMPARISON_GREATER 5
+#define MTETRIGGERBOOLEANCOMPARISON_GREATEROREQUAL 6
+#define MTETRIGGERBOOLEANSTARTUP_TRUE 1
+#define MTETRIGGERBOOLEANSTARTUP_FALSE 2
+ /*
+ * function prototypes
+ */
+ void init_mteTriggerBooleanTable(void);
+ FindVarMethod var_mteTriggerBooleanTable;
+
+ WriteMethod write_mteTriggerBooleanComparison;
+ WriteMethod write_mteTriggerBooleanValue;
+ WriteMethod write_mteTriggerBooleanStartup;
+ WriteMethod write_mteTriggerBooleanObjectsOwner;
+ WriteMethod write_mteTriggerBooleanObjects;
+ WriteMethod write_mteTriggerBooleanEventOwner;
+ WriteMethod write_mteTriggerBooleanEvent;
+
+
+
+
+#endif /* _MIBGROUP_MTETRIGGERBOOLEANTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerDeltaTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerDeltaTable.c
new file mode 100644
index 0000000000..457f83138a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerDeltaTable.c
@@ -0,0 +1,416 @@
+/*
+ * This file was generated by mib2c and is intended for use as
+ * a mib module for the ucd-snmp snmpd agent.
+ */
+
+
+/*
+ * This should always be included first before anything else
+ */
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+
+/*
+ * minimal include directives
+ */
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "header_complex.h"
+#include "mteTriggerDeltaTable.h"
+#include "mteTriggerTable.h"
+
+
+/*
+ * mteTriggerDeltaTable_variables_oid:
+ * this is the top level oid that we want to register under. This
+ * is essentially a prefix, with the suffix appearing in the
+ * variable below.
+ */
+
+
+oid mteTriggerDeltaTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 88, 1, 2, 3 };
+
+
+/*
+ * variable2 mteTriggerDeltaTable_variables:
+ * this variable defines function callbacks and type return information
+ * for the mteTriggerDeltaTable mib section
+ */
+
+
+struct variable2 mteTriggerDeltaTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+#define MTETRIGGERDELTADISCONTINUITYID 3
+ {MTETRIGGERDELTADISCONTINUITYID, ASN_OBJECT_ID, RWRITE,
+ var_mteTriggerDeltaTable, 2, {1, 1}},
+#define MTETRIGGERDELTADISCONTINUITYIDWILDCARD 4
+ {MTETRIGGERDELTADISCONTINUITYIDWILDCARD, ASN_INTEGER, RWRITE,
+ var_mteTriggerDeltaTable, 2, {1, 2}},
+#define MTETRIGGERDELTADISCONTINUITYIDTYPE 5
+ {MTETRIGGERDELTADISCONTINUITYIDTYPE, ASN_INTEGER, RWRITE,
+ var_mteTriggerDeltaTable, 2, {1, 3}},
+
+};
+/*
+ * (L = length of the oidsuffix)
+ */
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+extern struct header_complex_index *mteTriggerTableStorage;
+
+
+
+/*
+ * init_mteTriggerDeltaTable():
+ * Initialization routine. This is called when the agent starts up.
+ * At a minimum, registration of your variables should take place here.
+ */
+void
+init_mteTriggerDeltaTable(void)
+{
+ DEBUGMSGTL(("mteTriggerDeltaTable", "initializing... "));
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("mteTriggerDeltaTable", mteTriggerDeltaTable_variables,
+ variable2, mteTriggerDeltaTable_variables_oid);
+
+ DEBUGMSGTL(("mteTriggerDeltaTable", "done.\n"));
+}
+
+/*
+ * var_mteTriggerDeltaTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_mteTriggerDeltaTable above.
+ */
+unsigned char *
+var_mteTriggerDeltaTable(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+
+
+ struct mteTriggerTable_data *StorageTmp = NULL;
+
+
+ DEBUGMSGTL(("mteTriggerDeltaTable",
+ "var_mteTriggerDeltaTable: Entering... \n"));
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL)
+ return NULL;
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+
+
+ case MTETRIGGERDELTADISCONTINUITYID:
+ *write_method = write_mteTriggerDeltaDiscontinuityID;
+ *var_len =
+ StorageTmp->mteTriggerDeltaDiscontinuityIDLen * sizeof(oid);
+ return (u_char *) StorageTmp->mteTriggerDeltaDiscontinuityID;
+
+ case MTETRIGGERDELTADISCONTINUITYIDWILDCARD:
+ *write_method = write_mteTriggerDeltaDiscontinuityIDWildcard;
+ *var_len =
+ sizeof(StorageTmp->mteTriggerDeltaDiscontinuityIDWildcard);
+ return (u_char *) & StorageTmp->
+ mteTriggerDeltaDiscontinuityIDWildcard;
+
+ case MTETRIGGERDELTADISCONTINUITYIDTYPE:
+ *write_method = write_mteTriggerDeltaDiscontinuityIDType;
+ *var_len = sizeof(StorageTmp->mteTriggerDeltaDiscontinuityIDType);
+ return (u_char *) & StorageTmp->mteTriggerDeltaDiscontinuityIDType;
+
+
+ default:
+ ERROR_MSG("");
+ }
+ return NULL;
+}
+
+
+
+
+int
+write_mteTriggerDeltaDiscontinuityID(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static oid *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerDeltaTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerDeltaTable",
+ "write_mteTriggerDeltaDiscontinuityID entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerDeltaTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OBJECT_ID) {
+ fprintf(stderr,
+ "write to mteTriggerDeltaDiscontinuityID not ASN_OBJECT_ID\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerDeltaDiscontinuityID;
+ tmplen = StorageTmp->mteTriggerDeltaDiscontinuityIDLen;
+ memdup((u_char **) & StorageTmp->mteTriggerDeltaDiscontinuityID,
+ var_val, var_val_len);
+ StorageTmp->mteTriggerDeltaDiscontinuityIDLen =
+ var_val_len / sizeof(oid);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerDeltaDiscontinuityID);
+ StorageTmp->mteTriggerDeltaDiscontinuityID = tmpvar;
+ StorageTmp->mteTriggerDeltaDiscontinuityIDLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerDeltaDiscontinuityIDWildcard(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerDeltaTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerDeltaTable",
+ "write_mteTriggerDeltaDiscontinuityIDWildcard entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerDeltaTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ fprintf(stderr,
+ "write to mteTriggerDeltaDiscontinuityIDWildcard not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerDeltaDiscontinuityIDWildcard;
+ StorageTmp->mteTriggerDeltaDiscontinuityIDWildcard =
+ *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerDeltaDiscontinuityIDWildcard = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerDeltaDiscontinuityIDType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerDeltaTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerDeltaTable",
+ "write_mteTriggerDeltaDiscontinuityIDType entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerDeltaTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ fprintf(stderr,
+ "write to mteTriggerDeltaDiscontinuityIDType not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerDeltaDiscontinuityIDType;
+ StorageTmp->mteTriggerDeltaDiscontinuityIDType =
+ *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerDeltaDiscontinuityIDType = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerDeltaTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerDeltaTable.h
new file mode 100644
index 0000000000..0e8a17e75e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerDeltaTable.h
@@ -0,0 +1,37 @@
+/*
+ * This file was generated by mib2c and is intended for use as a mib module
+ * for the ucd-snmp snmpd agent.
+ */
+
+
+#ifndef _MIBGROUP_MTETRIGGERDELTATABLE_H
+#define _MIBGROUP_MTETRIGGERDELTATABLE_H
+
+
+/*
+ * we may use header_complex from the header_complex module
+ */
+
+
+config_require(header_complex)
+
+
+ /*
+ * enum definitions from the covered mib sections
+ */
+#define MTETRIGGERDELTADISCONTINUITYIDWILDCARD_TRUE 1
+#define MTETRIGGERDELTADISCONTINUITYIDWILDCARD_FALSE 2
+#define MTETRIGGERDELTADISCONTINUITYIDTYPE_TIMETICKS 1
+#define MTETRIGGERDELTADISCONTINUITYIDTYPE_TIMESTAMP 2
+#define MTETRIGGERDELTADISCONTINUITYIDTYPE_DATEANDTIME 3
+ /*
+ * function prototypes
+ */
+ void init_mteTriggerDeltaTable(void);
+ FindVarMethod var_mteTriggerDeltaTable;
+
+ WriteMethod write_mteTriggerDeltaDiscontinuityID;
+ WriteMethod write_mteTriggerDeltaDiscontinuityIDWildcard;
+ WriteMethod write_mteTriggerDeltaDiscontinuityIDType;
+
+#endif /* _MIBGROUP_MTETRIGGERDELTATABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerExistenceTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerExistenceTable.c
new file mode 100644
index 0000000000..1aec2cd246
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerExistenceTable.c
@@ -0,0 +1,737 @@
+/*
+ * This file was generated by mib2c and is intended for use as
+ * a mib module for the ucd-snmp snmpd agent.
+ */
+
+
+/*
+ * This should always be included first before anything else
+ */
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+
+/*
+ * minimal include directives
+ */
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "header_complex.h"
+#include "mteTriggerExistenceTable.h"
+#include "mteTriggerTable.h"
+
+
+/*
+ * mteTriggerExistenceTable_variables_oid:
+ * this is the top level oid that we want to register under. This
+ * is essentially a prefix, with the suffix appearing in the
+ * variable below.
+ */
+
+
+oid mteTriggerExistenceTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 88, 1, 2, 4 };
+
+
+/*
+ * variable2 mteTriggerExistenceTable_variables:
+ * this variable defines function callbacks and type return information
+ * for the mteTriggerExistenceTable mib section
+ */
+
+
+struct variable2 mteTriggerExistenceTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+#define MTETRIGGEREXISTENCETEST 3
+ {MTETRIGGEREXISTENCETEST, ASN_BIT_STR, RWRITE,
+ var_mteTriggerExistenceTable, 2, {1, 1}},
+#define MTETRIGGEREXISTENCESTARTUP 4
+ {MTETRIGGEREXISTENCESTARTUP, ASN_BIT_STR, RWRITE,
+ var_mteTriggerExistenceTable, 2, {1, 2}},
+#define MTETRIGGEREXISTENCEOBJECTSOWNER 5
+ {MTETRIGGEREXISTENCEOBJECTSOWNER, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerExistenceTable, 2, {1, 3}},
+#define MTETRIGGEREXISTENCEOBJECTS 6
+ {MTETRIGGEREXISTENCEOBJECTS, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerExistenceTable, 2, {1, 4}},
+#define MTETRIGGEREXISTENCEEVENTOWNER 7
+ {MTETRIGGEREXISTENCEEVENTOWNER, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerExistenceTable, 2, {1, 5}},
+#define MTETRIGGEREXISTENCEEVENT 8
+ {MTETRIGGEREXISTENCEEVENT, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerExistenceTable, 2, {1, 6}},
+
+};
+/*
+ * (L = length of the oidsuffix)
+ */
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+extern struct header_complex_index *mteTriggerTableStorage;
+
+
+
+
+/*
+ * init_mteTriggerExistenceTable():
+ * Initialization routine. This is called when the agent starts up.
+ * At a minimum, registration of your variables should take place here.
+ */
+void
+init_mteTriggerExistenceTable(void)
+{
+ DEBUGMSGTL(("mteTriggerExistenceTable", "initializing... "));
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("mteTriggerExistenceTable",
+ mteTriggerExistenceTable_variables, variable2,
+ mteTriggerExistenceTable_variables_oid);
+
+
+ /*
+ * place any other initialization junk you need here
+ */
+
+
+ DEBUGMSGTL(("mteTriggerExistenceTable", "done.\n"));
+}
+
+/*
+ * var_mteTriggerExistenceTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_mteTriggerExistenceTable above.
+ */
+unsigned char *
+var_mteTriggerExistenceTable(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+
+
+ struct mteTriggerTable_data *StorageTmp = NULL;
+
+
+ DEBUGMSGTL(("mteTriggerExistenceTable",
+ "var_mteTriggerExistenceTable: Entering... \n"));
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL)
+ return NULL;
+
+ if (!(StorageTmp->mteTriggerTest[0] & MTETRIGGERTEST_EXISTENCE))
+ return NULL;
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+
+
+ case MTETRIGGEREXISTENCETEST:
+ *write_method = write_mteTriggerExistenceTest;
+ *var_len = StorageTmp->mteTriggerExistenceTestLen;
+ return (u_char *) StorageTmp->mteTriggerExistenceTest;
+
+ case MTETRIGGEREXISTENCESTARTUP:
+ *write_method = write_mteTriggerExistenceStartup;
+ *var_len = StorageTmp->mteTriggerExistenceStartupLen;
+ return (u_char *) StorageTmp->mteTriggerExistenceStartup;
+
+ case MTETRIGGEREXISTENCEOBJECTSOWNER:
+ *write_method = write_mteTriggerExistenceObjectsOwner;
+ *var_len = StorageTmp->mteTriggerExistenceObjectsOwnerLen;
+ return (u_char *) StorageTmp->mteTriggerExistenceObjectsOwner;
+
+ case MTETRIGGEREXISTENCEOBJECTS:
+ *write_method = write_mteTriggerExistenceObjects;
+ *var_len = StorageTmp->mteTriggerExistenceObjectsLen;
+ return (u_char *) StorageTmp->mteTriggerExistenceObjects;
+
+ case MTETRIGGEREXISTENCEEVENTOWNER:
+ *write_method = write_mteTriggerExistenceEventOwner;
+ *var_len = StorageTmp->mteTriggerExistenceEventOwnerLen;
+ return (u_char *) StorageTmp->mteTriggerExistenceEventOwner;
+
+ case MTETRIGGEREXISTENCEEVENT:
+ *write_method = write_mteTriggerExistenceEvent;
+ *var_len = StorageTmp->mteTriggerExistenceEventLen;
+ return (u_char *) StorageTmp->mteTriggerExistenceEvent;
+
+
+ default:
+ ERROR_MSG("");
+ }
+ return NULL;
+}
+
+
+
+
+int
+write_mteTriggerExistenceTest(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerExistenceTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerExistenceTable",
+ "write_mteTriggerExistenceTest entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerExistenceTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerExistenceTest not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerExistenceTest;
+ tmplen = StorageTmp->mteTriggerExistenceTestLen;
+ memdup((u_char **) & StorageTmp->mteTriggerExistenceTest, var_val,
+ var_val_len);
+ StorageTmp->mteTriggerExistenceTestLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerExistenceTest);
+ StorageTmp->mteTriggerExistenceTest = tmpvar;
+ StorageTmp->mteTriggerExistenceTestLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerExistenceStartup(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerExistenceTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerExistenceTable",
+ "write_mteTriggerExistenceStartup entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerExistenceTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerExistenceStartup not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerExistenceStartup;
+ tmplen = StorageTmp->mteTriggerExistenceStartupLen;
+ memdup((u_char **) & StorageTmp->mteTriggerExistenceStartup,
+ var_val, var_val_len);
+ StorageTmp->mteTriggerExistenceStartupLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerExistenceStartup);
+ StorageTmp->mteTriggerExistenceStartup = tmpvar;
+ StorageTmp->mteTriggerExistenceStartupLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerExistenceObjectsOwner(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerExistenceTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerExistenceTable",
+ "write_mteTriggerExistenceObjectsOwner entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerExistenceTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerExistenceObjectsOwner not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerExistenceObjectsOwner;
+ tmplen = StorageTmp->mteTriggerExistenceObjectsOwnerLen;
+ memdup((u_char **) & StorageTmp->mteTriggerExistenceObjectsOwner,
+ var_val, var_val_len);
+ StorageTmp->mteTriggerExistenceObjectsOwnerLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerExistenceObjectsOwner);
+ StorageTmp->mteTriggerExistenceObjectsOwner = tmpvar;
+ StorageTmp->mteTriggerExistenceObjectsOwnerLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerExistenceObjects(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerExistenceTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerExistenceTable",
+ "write_mteTriggerExistenceObjects entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerExistenceTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerExistenceObjects not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerExistenceObjects;
+ tmplen = StorageTmp->mteTriggerExistenceObjectsLen;
+ memdup((u_char **) & StorageTmp->mteTriggerExistenceObjects,
+ var_val, var_val_len);
+ StorageTmp->mteTriggerExistenceObjectsLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerExistenceObjects);
+ StorageTmp->mteTriggerExistenceObjects = tmpvar;
+ StorageTmp->mteTriggerExistenceObjectsLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerExistenceEventOwner(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerExistenceTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerExistenceTable",
+ "write_mteTriggerExistenceEventOwner entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerExistenceTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerExistenceEventOwner not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerExistenceEventOwner;
+ tmplen = StorageTmp->mteTriggerExistenceEventOwnerLen;
+ memdup((u_char **) & StorageTmp->mteTriggerExistenceEventOwner,
+ var_val, var_val_len);
+ StorageTmp->mteTriggerExistenceEventOwnerLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerExistenceEventOwner);
+ StorageTmp->mteTriggerExistenceEventOwner = tmpvar;
+ StorageTmp->mteTriggerExistenceEventOwnerLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerExistenceEvent(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerExistenceTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerExistenceTable",
+ "write_mteTriggerExistenceEvent entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerExistenceTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerExistenceEvent not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerExistenceEvent;
+ tmplen = StorageTmp->mteTriggerExistenceEventLen;
+ memdup((u_char **) & StorageTmp->mteTriggerExistenceEvent, var_val,
+ var_val_len);
+ StorageTmp->mteTriggerExistenceEventLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerExistenceEvent);
+ StorageTmp->mteTriggerExistenceEvent = tmpvar;
+ StorageTmp->mteTriggerExistenceEventLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerExistenceTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerExistenceTable.h
new file mode 100644
index 0000000000..40dbd4e08d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerExistenceTable.h
@@ -0,0 +1,39 @@
+/*
+ * This file was generated by mib2c and is intended for use as a mib module
+ * for the ucd-snmp snmpd agent.
+ */
+
+
+#ifndef _MIBGROUP_MTETRIGGEREXISTENCETABLE_H
+#define _MIBGROUP_MTETRIGGEREXISTENCETABLE_H
+
+
+/*
+ * we may use header_complex from the header_complex module
+ */
+
+
+config_require(header_complex)
+
+ /*
+ * enum definitions from the covered mib sections
+ */
+#define MTETRIGGEREXISTENCETEST_PRESENT 0x80
+#define MTETRIGGEREXISTENCETEST_ABSENT 0x40
+#define MTETRIGGEREXISTENCETEST_CHANGED 0x20
+#define MTETRIGGEREXISTENCESTARTUP_PRESENT 0x80
+#define MTETRIGGEREXISTENCESTARTUP_ABSENT 0x40
+ /*
+ * function prototypes
+ */
+ void init_mteTriggerExistenceTable(void);
+ FindVarMethod var_mteTriggerExistenceTable;
+
+ WriteMethod write_mteTriggerExistenceTest;
+ WriteMethod write_mteTriggerExistenceStartup;
+ WriteMethod write_mteTriggerExistenceObjectsOwner;
+ WriteMethod write_mteTriggerExistenceObjects;
+ WriteMethod write_mteTriggerExistenceEventOwner;
+ WriteMethod write_mteTriggerExistenceEvent;
+
+#endif /* _MIBGROUP_MTETRIGGEREXISTENCETABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerTable.c
new file mode 100644
index 0000000000..16fee0b710
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerTable.c
@@ -0,0 +1,3716 @@
+/*
+ * This file was generated by mib2c and is intended for use as
+ * a mib module for the ucd-snmp snmpd agent.
+ */
+
+
+/*
+ * This should always be included first before anything else
+ */
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+
+/*
+ * minimal include directives
+ */
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "header_complex.h"
+#include "mteTriggerTable.h"
+#include "mteTriggerBooleanTable.h"
+#include "mteTriggerDeltaTable.h"
+#include "mteTriggerExistenceTable.h"
+#include "mteTriggerThresholdTable.h"
+#include "mteEventTable.h"
+#include "mteObjectsTable.h"
+
+/*
+ * mteTriggerTable_variables_oid:
+ * this is the top level oid that we want to register under. This
+ * is essentially a prefix, with the suffix appearing in the
+ * variable below.
+ */
+
+/*
+ * trap definitions
+ */
+oid mteTriggerFired[] = { 1, 3, 6, 1, 2, 1, 88, 2, 0, 1 };
+oid mteTriggerRising[] = { 1, 3, 6, 1, 2, 1, 88, 2, 0, 2 };
+oid mteTriggerFalling[] = { 1, 3, 6, 1, 2, 1, 88, 2, 0, 3 };
+oid mteTriggerFailure[] = { 1, 3, 6, 1, 2, 1, 88, 2, 0, 4 };
+oid mteEventSetFailure[] = { 1, 3, 6, 1, 2, 1, 88, 2, 0, 5 };
+
+/*
+ * trap objects
+ */
+oid mteHotTrigger[] = { 1, 3, 6, 1, 2, 1, 88, 2, 1, 1 };
+oid mteHotTargetName[] = { 1, 3, 6, 1, 2, 1, 88, 2, 1, 2 };
+oid mteHotContextName[] = { 1, 3, 6, 1, 2, 1, 88, 2, 1, 3 };
+oid mteHotOID[] = { 1, 3, 6, 1, 2, 1, 88, 2, 1, 4 };
+oid mteHotValue[] = { 1, 3, 6, 1, 2, 1, 88, 2, 1, 5 };
+oid mteFailedReason[] = { 1, 3, 6, 1, 2, 1, 88, 2, 1, 6 };
+
+/*
+ * For discontinuity checking.
+ */
+oid sysUpTimeInstance[] = { 1, 3, 6, 1, 2, 1, 1, 3, 0 };
+
+oid mteTriggerTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 88, 1, 2, 2 };
+
+
+/*
+ * variable2 mteTriggerTable_variables:
+ * this variable defines function callbacks and type return information
+ * for the mteTriggerTable mib section
+ */
+
+
+struct variable2 mteTriggerTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+#define MTETRIGGERCOMMENT 5
+ {MTETRIGGERCOMMENT, ASN_OCTET_STR, RWRITE, var_mteTriggerTable, 2,
+ {1, 3}},
+#define MTETRIGGERTEST 6
+ {MTETRIGGERTEST, ASN_OCTET_STR, RWRITE, var_mteTriggerTable, 2, {1, 4}},
+#define MTETRIGGERSAMPLETYPE 7
+ {MTETRIGGERSAMPLETYPE, ASN_INTEGER, RWRITE, var_mteTriggerTable, 2,
+ {1, 5}},
+#define MTETRIGGERVALUEID 8
+ {MTETRIGGERVALUEID, ASN_OBJECT_ID, RWRITE, var_mteTriggerTable, 2,
+ {1, 6}},
+#define MTETRIGGERVALUEIDWILDCARD 9
+ {MTETRIGGERVALUEIDWILDCARD, ASN_INTEGER, RWRITE, var_mteTriggerTable,
+ 2, {1, 7}},
+#define MTETRIGGERTARGETTAG 10
+ {MTETRIGGERTARGETTAG, ASN_OCTET_STR, RWRITE, var_mteTriggerTable, 2,
+ {1, 8}},
+#define MTETRIGGERCONTEXTNAME 11
+ {MTETRIGGERCONTEXTNAME, ASN_OCTET_STR, RWRITE, var_mteTriggerTable, 2,
+ {1, 9}},
+#define MTETRIGGERCONTEXTNAMEWILDCARD 12
+ {MTETRIGGERCONTEXTNAMEWILDCARD, ASN_INTEGER, RWRITE,
+ var_mteTriggerTable, 2, {1, 10}},
+#define MTETRIGGERFREQUENCY 13
+ {MTETRIGGERFREQUENCY, ASN_UNSIGNED, RWRITE, var_mteTriggerTable, 2,
+ {1, 11}},
+#define MTETRIGGEROBJECTSOWNER 14
+ {MTETRIGGEROBJECTSOWNER, ASN_OCTET_STR, RWRITE, var_mteTriggerTable, 2,
+ {1, 12}},
+#define MTETRIGGEROBJECTS 15
+ {MTETRIGGEROBJECTS, ASN_OCTET_STR, RWRITE, var_mteTriggerTable, 2,
+ {1, 13}},
+#define MTETRIGGERENABLED 16
+ {MTETRIGGERENABLED, ASN_INTEGER, RWRITE, var_mteTriggerTable, 2,
+ {1, 14}},
+#define MTETRIGGERENTRYSTATUS 17
+ {MTETRIGGERENTRYSTATUS, ASN_INTEGER, RWRITE, var_mteTriggerTable, 2,
+ {1, 15}},
+
+};
+/*
+ * (L = length of the oidsuffix)
+ */
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+struct header_complex_index *mteTriggerTableStorage = NULL;
+
+netsnmp_session *mte_callback_sess = NULL;
+extern int callback_master_num;
+
+/*
+ * init_mteTriggerTable():
+ * Initialization routine. This is called when the agent starts up.
+ * At a minimum, registration of your variables should take place here.
+ */
+void
+init_mteTriggerTable(void)
+{
+ DEBUGMSGTL(("mteTriggerTable", "initializing... "));
+
+#ifndef NETSNMP_TRANSPORT_CALLBACK_DOMAIN
+ snmp_log(LOG_WARNING,"mteTriggerTable has been disabled because "
+ "the callback transport is not available.\n");
+ return;
+#endif
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("mteTriggerTable", mteTriggerTable_variables, variable2,
+ mteTriggerTable_variables_oid);
+
+
+ /*
+ * register our config handler(s) to deal with registrations
+ */
+ snmpd_register_config_handler("mteTriggerTable", parse_mteTriggerTable,
+ NULL, NULL);
+
+ snmpd_register_config_handler("monitor", parse_simple_monitor, NULL,
+ "[options] monitor_expression [see \"man snmpd.conf\"]");
+ snmpd_register_config_handler("defaultMonitors",
+ parse_default_monitors, NULL, "yes|no");
+
+ /*
+ * we need to be called back later to store our data
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_mteTriggerTable, NULL);
+
+
+ /*
+ * place any other initialization junk you need here
+ */
+ se_add_pair_to_slist("mteBooleanOperators", strdup("!="),
+ MTETRIGGERBOOLEANCOMPARISON_UNEQUAL);
+ se_add_pair_to_slist("mteBooleanOperators", strdup("=="),
+ MTETRIGGERBOOLEANCOMPARISON_EQUAL);
+ se_add_pair_to_slist("mteBooleanOperators", strdup("<"),
+ MTETRIGGERBOOLEANCOMPARISON_LESS);
+ se_add_pair_to_slist("mteBooleanOperators", strdup("<="),
+ MTETRIGGERBOOLEANCOMPARISON_LESSOREQUAL);
+ se_add_pair_to_slist("mteBooleanOperators", strdup(">"),
+ MTETRIGGERBOOLEANCOMPARISON_GREATER);
+ se_add_pair_to_slist("mteBooleanOperators", strdup(">="),
+ MTETRIGGERBOOLEANCOMPARISON_GREATEROREQUAL);
+
+#ifdef NETSNMP_TRANSPORT_CALLBACK_DOMAIN
+ /*
+ * open a 'callback' session to the main agent
+ */
+ if (mte_callback_sess == NULL) {
+ mte_callback_sess = netsnmp_callback_open(callback_master_num,
+ NULL, NULL, NULL);
+ DEBUGMSGTL(("mteTriggerTable", "created callback session = %08x\n",
+ mte_callback_sess));
+ }
+#endif
+ DEBUGMSGTL(("mteTriggerTable", "done.\n"));
+}
+
+struct mteTriggerTable_data *
+create_mteTriggerTable_data(void)
+{
+ struct mteTriggerTable_data *StorageNew;
+
+ StorageNew = SNMP_MALLOC_STRUCT(mteTriggerTable_data);
+
+ /*
+ * fill in default row values here into StorageNew
+ */
+ /*
+ * fill in values for all tables (even if not
+ * appropriate), since its easier to do here than anywhere
+ * else
+ */
+ StorageNew->mteTriggerComment = strdup("");
+ StorageNew->mteTriggerTest = strdup("");
+ StorageNew->mteTriggerTest[0] |= (char) MTETRIGGERTEST_BOOLEAN;
+ StorageNew->mteTriggerTestLen = 1;
+ StorageNew->mteTriggerSampleType = MTETRIGGERSAMPLETYPE_ABSOLUTEVALUE;
+ StorageNew->mteTriggerValueID = calloc(1, sizeof(oid) * sizeof(2)); /* 0.0 */
+ StorageNew->mteTriggerValueIDLen = 2;
+ StorageNew->mteTriggerValueIDWildcard =
+ MTETRIGGERVALUEIDWILDCARD_FALSE;
+ StorageNew->mteTriggerTargetTag = strdup("");
+ StorageNew->mteTriggerContextName = strdup("");
+ StorageNew->mteTriggerContextNameWildcard =
+ MTETRIGGERCONTEXTNAMEWILDCARD_FALSE;
+ StorageNew->mteTriggerFrequency = 600;
+ StorageNew->mteTriggerObjectsOwner = strdup("");
+ StorageNew->mteTriggerObjects = strdup("");
+ StorageNew->mteTriggerEnabled = MTETRIGGERENABLED_FALSE;
+ memdup((unsigned char **)
+ &(StorageNew->mteTriggerDeltaDiscontinuityID),
+ (unsigned char *) sysUpTimeInstance, sizeof(sysUpTimeInstance));
+ StorageNew->mteTriggerDeltaDiscontinuityIDLen =
+ sizeof(sysUpTimeInstance) / sizeof(oid);
+ StorageNew->mteTriggerDeltaDiscontinuityIDWildcard = TV_FALSE;
+ StorageNew->mteTriggerDeltaDiscontinuityIDType =
+ MTETRIGGERDELTADISCONTINUITYIDTYPE_TIMETICKS;
+ StorageNew->mteTriggerExistenceTest = strdup("");
+ StorageNew->mteTriggerExistenceTest[0] =
+ (char) (MTETRIGGEREXISTENCETEST_PRESENT |
+ MTETRIGGEREXISTENCETEST_ABSENT);
+ StorageNew->mteTriggerExistenceTestLen = 1;
+ StorageNew->mteTriggerExistenceStartup = strdup("");
+ StorageNew->mteTriggerExistenceStartup[0] =
+ (char) (MTETRIGGEREXISTENCESTARTUP_PRESENT);
+ StorageNew->mteTriggerExistenceStartupLen = 1;
+ StorageNew->mteTriggerExistenceObjectsOwner = strdup("");
+ StorageNew->mteTriggerExistenceObjects = strdup("");
+ StorageNew->mteTriggerExistenceEventOwner = strdup("");
+ StorageNew->mteTriggerExistenceEvent = strdup("");
+ StorageNew->mteTriggerBooleanComparison =
+ MTETRIGGERBOOLEANCOMPARISON_UNEQUAL;
+ StorageNew->mteTriggerBooleanStartup = MTETRIGGERBOOLEANSTARTUP_TRUE;
+ StorageNew->mteTriggerBooleanObjectsOwner = strdup("");
+ StorageNew->mteTriggerBooleanObjects = strdup("");
+ StorageNew->mteTriggerBooleanEventOwner = strdup("");
+ StorageNew->mteTriggerBooleanEvent = strdup("");
+ StorageNew->mteTriggerThresholdStartup =
+ MTETRIGGERTHRESHOLDSTARTUP_RISINGORFALLING;
+ StorageNew->mteTriggerThresholdObjectsOwner = strdup("");
+ StorageNew->mteTriggerThresholdObjects = strdup("");
+ StorageNew->mteTriggerThresholdRisingEventOwner = strdup("");
+ StorageNew->mteTriggerThresholdRisingEvent = strdup("");
+ StorageNew->mteTriggerThresholdFallingEventOwner = strdup("");
+ StorageNew->mteTriggerThresholdFallingEvent = strdup("");
+ StorageNew->mteTriggerThresholdDeltaRisingEventOwner = strdup("");
+ StorageNew->mteTriggerThresholdDeltaRisingEvent = strdup("");
+ StorageNew->mteTriggerThresholdDeltaFallingEventOwner = strdup("");
+ StorageNew->mteTriggerThresholdDeltaFallingEvent = strdup("");
+ StorageNew->lastboolresult = -1;
+ StorageNew->storageType = ST_NONVOLATILE;
+ StorageNew->prevDiscoTicks = 0;
+ StorageNew->prevUptimeTicks = 0;
+ return StorageNew;
+}
+
+/*
+ * mteTriggerTable_add(): adds a structure node to our data set
+ */
+int
+mteTriggerTable_add(struct mteTriggerTable_data *thedata)
+{
+ netsnmp_variable_list *vars = NULL;
+
+
+ DEBUGMSGTL(("mteTriggerTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->mteOwner, thedata->mteOwnerLen); /* mteOwner */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_PRIV_IMPLIED_OCTET_STR, (char *) thedata->mteTriggerName, thedata->mteTriggerNameLen); /* mteTriggerName */
+
+
+
+ header_complex_add_data(&mteTriggerTableStorage, vars, thedata);
+ DEBUGMSGTL(("mteTriggerTable", "registered an entry\n"));
+
+
+ DEBUGMSGTL(("mteTriggerTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+#define MTE_PROCESS_LINE(line) \
+ snprintf(buf, SPRINT_MAX_LEN, "-u %s %s", mte_default_user, line); \
+ parse_simple_monitor("monitor", buf);
+
+void
+parse_default_monitors(const char *token, char *line)
+{
+ char buf[SPRINT_MAX_LEN];
+ char *mte_default_user =
+ netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_INTERNAL_SECNAME);
+
+ if (strncmp(line, "yes", 3) == 0) {
+
+ DEBUGMSGTL(("mteTriggerTable", "registering default monitors\n"));
+
+ if (mte_default_user == NULL) {
+ config_perror
+ ("You must specify a user name first using the agentSecName token\n");
+ return;
+ }
+
+ /*
+ * we don't include many additional objects here as most of
+ * the error messages are complete with the needed
+ * information
+ */
+ MTE_PROCESS_LINE
+ ("-o prNames -o prErrMessage \"process table\" prErrorFlag != 0");
+ MTE_PROCESS_LINE
+ ("-o memErrorName -o memSwapErrorMsg \"memory\" memSwapError != 0");
+ MTE_PROCESS_LINE
+ ("-o extNames -o extOutput \"extTable\" extResult != 0");
+ MTE_PROCESS_LINE
+ ("-o dskPath -o dskErrorMsg \"dskTable\" dskErrorFlag != 0");
+ MTE_PROCESS_LINE
+ ("-o laNames -o laErrMessage \"laTable\" laErrorFlag != 0");
+ MTE_PROCESS_LINE
+ ("-o fileName -o fileErrorMsg \"fileTable\" fileErrorFlag != 0");
+ /*
+ * this one is not *all* that useful, because the error is
+ * only kept for 30 seconds at most. Maybe scan it every 30
+ * seconds, but I'm not doing so without seeking other peoples
+ * opinions first.
+ */
+ MTE_PROCESS_LINE
+ ("-o snmperrErrMessage \"snmperrs\" snmperrErrorFlag != 0");
+ }
+}
+
+static int monitor_call_count = 0;
+void
+parse_simple_monitor(const char *token, char *line)
+{
+ char buf[SPRINT_MAX_LEN], *cp, ebuf[SPRINT_MAX_LEN],
+ eventname[64];
+ oid obuf[MAX_OID_LEN];
+ size_t obufLen;
+ struct mteTriggerTable_data *StorageNew;
+
+ monitor_call_count++;
+ eventname[0] = '\0';
+
+ StorageNew = create_mteTriggerTable_data();
+ StorageNew->storageType = ST_READONLY;
+ StorageNew->mteTriggerEnabled = MTETRIGGERENABLED_TRUE;
+ StorageNew->mteTriggerEntryStatus = RS_ACTIVE;
+ StorageNew->mteTriggerValueIDWildcard = MTETRIGGERVALUEIDWILDCARD_TRUE;
+ StorageNew->mteTriggerBooleanStartup = MTETRIGGERBOOLEANSTARTUP_TRUE;
+ StorageNew->mteTriggerThresholdStartup =
+ MTETRIGGERTHRESHOLDSTARTUP_RISINGORFALLING;
+ StorageNew->mteTriggerExistenceTest[0] = 0;
+
+ /*
+ * owner = snmpd.conf, why not?
+ */
+ StorageNew->mteOwner = strdup("snmpd.conf");
+ StorageNew->mteOwnerLen = strlen(StorageNew->mteOwner);
+ StorageNew->pdu_version = SNMP_VERSION_3;
+ StorageNew->pdu_securityModel = SNMP_SEC_MODEL_USM;
+ StorageNew->pdu_securityLevel = SNMP_SEC_LEVEL_AUTHNOPRIV;
+
+ cp = line;
+
+ while (cp && *cp == '-') {
+ cp = copy_nword(cp, buf, sizeof(buf));
+ switch (buf[1]) {
+ case 't':
+ /*
+ * Threshold toggle
+ */
+ StorageNew->mteTriggerTest[0] = MTETRIGGERTEST_THRESHOLD;
+ break;
+ case 'i':
+ /*
+ * Single instance
+ */
+ StorageNew->mteTriggerValueIDWildcard = MTETRIGGERVALUEIDWILDCARD_FALSE;
+ break;
+ case 'r':
+ if (cp) {
+ cp = copy_nword(cp, buf, sizeof(buf));
+ StorageNew->mteTriggerFrequency = strtoul(buf, NULL, 0);
+ } else {
+ config_perror("No parameter after -r given\n");
+ /*
+ * XXX: free StorageNew
+ */
+ return;
+ }
+ break;
+ case 'u':
+ if (cp) {
+ cp = copy_nword(cp, buf, sizeof(buf));
+ StorageNew->pdu_securityName = strdup(buf);
+ StorageNew->pdu_securityNameLen = strlen(buf);
+ } else {
+ config_perror("No parameter after -u given\n");
+ /*
+ * XXX: free StorageNew
+ */
+ return;
+ }
+ break;
+ case 'e':
+ if (cp) {
+ cp = copy_nword(cp, eventname, sizeof(eventname));
+ } else {
+ config_perror("No parameter after -e given\n");
+ /*
+ * XXX: free StorageNew
+ */
+ return;
+ }
+ break;
+ case 'o':
+ /*
+ * oid
+ */
+ cp = copy_nword(cp, buf, sizeof(buf));
+ obufLen = MAX_OID_LEN;
+ if (!snmp_parse_oid(buf, obuf, &obufLen)) {
+ sprintf(ebuf, "unable to parse oid: %s", buf);
+ config_perror(ebuf);
+ /*
+ * XXX: free StorageNew
+ */
+ return;
+ }
+ sprintf(buf, "snmpd.conf%d", monitor_call_count);
+ mte_add_object_to_table("snmpd.conf", buf, obuf, obufLen, 1);
+
+ if (StorageNew->mteTriggerObjectsOwnerLen == 0) {
+ SNMP_FREE(StorageNew->mteTriggerObjectsOwner);
+ StorageNew->mteTriggerObjectsOwner = strdup("snmpd.conf");
+ StorageNew->mteTriggerObjectsOwnerLen =
+ strlen("snmpd.conf");
+ }
+
+ if (StorageNew->mteTriggerObjectsLen == 0) {
+ SNMP_FREE(StorageNew->mteTriggerObjects);
+ StorageNew->mteTriggerObjects = strdup(buf);
+ StorageNew->mteTriggerObjectsLen = strlen(buf);
+ }
+ break;
+ }
+ }
+
+ if (StorageNew->pdu_securityNameLen == 0) {
+ char *mte_default_user =
+ netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_INTERNAL_SECNAME);
+ if (mte_default_user) {
+ StorageNew->pdu_securityName = strdup(mte_default_user);
+ StorageNew->pdu_securityNameLen = strlen(mte_default_user);
+ } else {
+ config_perror("-u USER parameter required\n");
+ /*
+ * XXX: free StorageNew
+ */
+ return;
+ }
+ }
+
+ /*
+ * name
+ */
+ cp = copy_nword(cp, buf, sizeof(buf));
+ if (!cp) {
+ config_perror("illegal monitor: no name specified");
+ /*
+ * XXX: free StorageNew
+ */
+ return;
+ }
+
+ StorageNew->mteTriggerName = strdup(buf);
+ StorageNew->mteTriggerNameLen = strlen(StorageNew->mteTriggerName);
+
+ /*
+ * oid
+ */
+ cp = copy_nword(cp, buf, sizeof(buf));
+ obufLen = MAX_OID_LEN;
+ if (!snmp_parse_oid(buf, obuf, &obufLen)) {
+ sprintf(ebuf, "unable to parse oid: %s", buf);
+ config_perror(ebuf);
+ /*
+ * XXX: free StorageNew
+ */
+ return;
+ }
+ if (StorageNew->mteTriggerValueID)
+ free(StorageNew->mteTriggerValueID);
+ StorageNew->mteTriggerValueID = snmp_duplicate_objid(obuf, obufLen);
+ StorageNew->mteTriggerValueIDLen = obufLen;
+
+ if (StorageNew->mteTriggerTest[0] == MTETRIGGERTEST_THRESHOLD) {
+ /*
+ * it's a threshold
+ * grab 'low' and 'high' params
+ */
+ if (!cp) {
+ config_perror("no lower threshold value specified");
+ }
+ cp = copy_nword(cp, buf, sizeof(buf));
+ StorageNew->mteTriggerThresholdFalling = strtol(buf, NULL, 0);
+
+ if (!cp) {
+ config_perror("no upper threshold value specified");
+ }
+ cp = copy_nword(cp, buf, sizeof(buf));
+ StorageNew->mteTriggerThresholdRising = strtol(buf, NULL, 0);
+ } else {
+ /*
+ * if nothing beyond here, it's an existence test
+ */
+ if (!cp) {
+ StorageNew->mteTriggerTest[0] = (u_char)MTETRIGGERTEST_EXISTENCE;
+ if (eventname[0] != '\0') {
+ StorageNew->mteTriggerExistenceEventOwner =
+ strdup("snmpd.conf");
+ StorageNew->mteTriggerExistenceEventOwnerLen =
+ strlen(StorageNew->mteTriggerExistenceEventOwner);
+ StorageNew->mteTriggerExistenceEvent =
+ strdup(eventname);
+ StorageNew->mteTriggerExistenceEventLen =
+ strlen(eventname);
+ }
+ mteTriggerTable_add(StorageNew);
+ return;
+ }
+
+ /*
+ * assume boolean (need to deal with threshold statements)
+ */
+ cp = copy_nword(cp, buf, sizeof(buf));
+ if ((StorageNew->mteTriggerBooleanComparison =
+ se_find_value_in_slist("mteBooleanOperators", buf)) == -1) {
+ config_perror("illegal boolean operator");
+ return;
+ }
+
+ /*
+ * XXX: add threshold
+ */
+ StorageNew->mteTriggerTest[0] = MTETRIGGERTEST_BOOLEAN;
+ if (!cp) {
+ config_perror("no comparison value specified");
+ /*
+ * XXX: free StorageNew
+ */
+ return;
+ }
+
+ cp = copy_nword(cp, buf, sizeof(buf));
+ StorageNew->mteTriggerBooleanValue = strtol(buf, NULL, 0);
+
+ if (eventname[0] != '\0') {
+ StorageNew->mteTriggerBooleanEventOwner =
+ strdup("snmpd.conf");
+ StorageNew->mteTriggerBooleanEventOwnerLen =
+ strlen(StorageNew->mteTriggerBooleanEventOwner);
+ StorageNew->mteTriggerBooleanEvent =
+ strdup(eventname);
+ StorageNew->mteTriggerBooleanEventLen =
+ strlen(eventname);
+ }
+ }
+ mteTriggerTable_add(StorageNew);
+ mte_enable_trigger(StorageNew);
+
+ DEBUGMSGTL(("mteTriggerTable", "added simple monitor: %s\n",
+ StorageNew->mteTriggerName));
+}
+
+
+/*
+ * parse_mteTriggerTable():
+ * parses .conf file entries needed to configure the mib.
+ */
+void
+parse_mteTriggerTable(const char *token, char *line)
+{
+ size_t tmpint;
+ oid *tmpoid = NULL;
+ struct mteTriggerTable_data *StorageTmp =
+ SNMP_MALLOC_STRUCT(mteTriggerTable_data);
+
+ DEBUGMSGTL(("mteTriggerTable", "parsing config... "));
+
+ if (StorageTmp == NULL) {
+ config_perror("malloc failure");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line, &StorageTmp->mteOwner,
+ &StorageTmp->mteOwnerLen);
+ if (StorageTmp->mteOwner == NULL) {
+ config_perror("invalid specification for mteOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerName,
+ &StorageTmp->mteTriggerNameLen);
+ if (StorageTmp->mteTriggerName == NULL) {
+ config_perror("invalid specification for mteTriggerName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerComment,
+ &StorageTmp->mteTriggerCommentLen);
+ if (StorageTmp->mteTriggerComment == NULL) {
+ config_perror("invalid specification for mteTriggerComment");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerTest,
+ &StorageTmp->mteTriggerTestLen);
+ if (StorageTmp->mteTriggerTest == NULL) {
+ config_perror("invalid specification for mteTriggerTest");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteTriggerSampleType, &tmpint);
+
+ line =
+ read_config_read_data(ASN_OBJECT_ID, line,
+ &StorageTmp->mteTriggerValueID,
+ &StorageTmp->mteTriggerValueIDLen);
+ if (StorageTmp->mteTriggerValueID == NULL) {
+ config_perror("invalid specification for mteTriggerValueID");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteTriggerValueIDWildcard,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerTargetTag,
+ &StorageTmp->mteTriggerTargetTagLen);
+ if (StorageTmp->mteTriggerTargetTag == NULL) {
+ config_perror("invalid specification for mteTriggerTargetTag");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerContextName,
+ &StorageTmp->mteTriggerContextNameLen);
+ if (StorageTmp->mteTriggerContextName == NULL) {
+ config_perror("invalid specification for mteTriggerContextName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteTriggerContextNameWildcard,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->mteTriggerFrequency, &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerObjectsOwner,
+ &StorageTmp->mteTriggerObjectsOwnerLen);
+ if (StorageTmp->mteTriggerObjectsOwner == NULL) {
+ config_perror("invalid specification for mteTriggerObjectsOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerObjects,
+ &StorageTmp->mteTriggerObjectsLen);
+ if (StorageTmp->mteTriggerObjects == NULL) {
+ config_perror("invalid specification for mteTriggerObjects");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteTriggerEnabled, &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteTriggerEntryStatus, &tmpint);
+
+ /*
+ * delta table
+ */
+ line =
+ read_config_read_data(ASN_OBJECT_ID, line,
+ &StorageTmp->mteTriggerDeltaDiscontinuityID,
+ &StorageTmp->
+ mteTriggerDeltaDiscontinuityIDLen);
+ if (StorageTmp->mteTriggerDeltaDiscontinuityID == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerDeltaDiscontinuityID");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->
+ mteTriggerDeltaDiscontinuityIDWildcard,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->
+ mteTriggerDeltaDiscontinuityIDType, &tmpint);
+
+ /*
+ * existence table
+ */
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerExistenceTest,
+ &StorageTmp->mteTriggerExistenceTestLen);
+ if (StorageTmp->mteTriggerExistenceTest == NULL) {
+ config_perror("invalid specification for mteTriggerExistenceTest");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerExistenceStartup,
+ &StorageTmp->mteTriggerExistenceStartupLen);
+ if (StorageTmp->mteTriggerExistenceStartup == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerExistenceStartup");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerExistenceObjectsOwner,
+ &StorageTmp->
+ mteTriggerExistenceObjectsOwnerLen);
+ if (StorageTmp->mteTriggerExistenceObjectsOwner == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerExistenceObjectsOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerExistenceObjects,
+ &StorageTmp->mteTriggerExistenceObjectsLen);
+ if (StorageTmp->mteTriggerExistenceObjects == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerExistenceObjects");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerExistenceEventOwner,
+ &StorageTmp->
+ mteTriggerExistenceEventOwnerLen);
+ if (StorageTmp->mteTriggerExistenceEventOwner == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerExistenceEventOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerExistenceEvent,
+ &StorageTmp->mteTriggerExistenceEventLen);
+ if (StorageTmp->mteTriggerExistenceEvent == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerExistenceEvent");
+ return;
+ }
+
+ /*
+ * boolean table
+ */
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteTriggerBooleanComparison,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteTriggerBooleanValue,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteTriggerBooleanStartup,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerBooleanObjectsOwner,
+ &StorageTmp->
+ mteTriggerBooleanObjectsOwnerLen);
+ if (StorageTmp->mteTriggerBooleanObjectsOwner == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerBooleanObjectsOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerBooleanObjects,
+ &StorageTmp->mteTriggerBooleanObjectsLen);
+ if (StorageTmp->mteTriggerBooleanObjects == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerBooleanObjects");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerBooleanEventOwner,
+ &StorageTmp->mteTriggerBooleanEventOwnerLen);
+ if (StorageTmp->mteTriggerBooleanEventOwner == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerBooleanEventOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerBooleanEvent,
+ &StorageTmp->mteTriggerBooleanEventLen);
+ if (StorageTmp->mteTriggerBooleanEvent == NULL) {
+ config_perror("invalid specification for mteTriggerBooleanEvent");
+ return;
+ }
+
+ /*
+ * threshold table
+ */
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteTriggerThresholdStartup,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteTriggerThresholdRising,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteTriggerThresholdFalling,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteTriggerThresholdDeltaRising,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->mteTriggerThresholdDeltaFalling,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerThresholdObjectsOwner,
+ &StorageTmp->
+ mteTriggerThresholdObjectsOwnerLen);
+ if (StorageTmp->mteTriggerThresholdObjectsOwner == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerThresholdObjectsOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerThresholdObjects,
+ &StorageTmp->mteTriggerThresholdObjectsLen);
+ if (StorageTmp->mteTriggerThresholdObjects == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerThresholdObjects");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->
+ mteTriggerThresholdRisingEventOwner,
+ &StorageTmp->
+ mteTriggerThresholdRisingEventOwnerLen);
+ if (StorageTmp->mteTriggerThresholdRisingEventOwner == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerThresholdRisingEventOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerThresholdRisingEvent,
+ &StorageTmp->
+ mteTriggerThresholdRisingEventLen);
+ if (StorageTmp->mteTriggerThresholdRisingEvent == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerThresholdRisingEvent");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->
+ mteTriggerThresholdFallingEventOwner,
+ &StorageTmp->
+ mteTriggerThresholdFallingEventOwnerLen);
+ if (StorageTmp->mteTriggerThresholdFallingEventOwner == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerThresholdFallingEventOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->mteTriggerThresholdFallingEvent,
+ &StorageTmp->
+ mteTriggerThresholdFallingEventLen);
+ if (StorageTmp->mteTriggerThresholdFallingEvent == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerThresholdFallingEvent");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->
+ mteTriggerThresholdDeltaRisingEventOwner,
+ &StorageTmp->
+ mteTriggerThresholdDeltaRisingEventOwnerLen);
+ if (StorageTmp->mteTriggerThresholdDeltaRisingEventOwner == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerThresholdDeltaRisingEventOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->
+ mteTriggerThresholdDeltaRisingEvent,
+ &StorageTmp->
+ mteTriggerThresholdDeltaRisingEventLen);
+ if (StorageTmp->mteTriggerThresholdDeltaRisingEvent == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerThresholdDeltaRisingEvent");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->
+ mteTriggerThresholdDeltaFallingEventOwner,
+ &StorageTmp->
+ mteTriggerThresholdDeltaFallingEventOwnerLen);
+ if (StorageTmp->mteTriggerThresholdDeltaFallingEventOwner == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerThresholdDeltaFallingEventOwner");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->
+ mteTriggerThresholdDeltaFallingEvent,
+ &StorageTmp->
+ mteTriggerThresholdDeltaFallingEventLen);
+ if (StorageTmp->mteTriggerThresholdDeltaFallingEvent == NULL) {
+ config_perror
+ ("invalid specification for mteTriggerThresholdDeltaFallingEvent");
+ return;
+ }
+
+ /*
+ * local internal variables
+ */
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->have_copied_auth_info, &tmpint);
+ if (StorageTmp->have_copied_auth_info) {
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pdu_version, &tmpint);
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pdu_securityModel, &tmpint);
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pdu_securityLevel, &tmpint);
+ line =
+ read_config_read_data(ASN_OBJECT_ID, line, &tmpoid, &tmpint);
+ if (!netsnmp_tdomain_support
+ (tmpoid, tmpint, &StorageTmp->pdu_tDomain,
+ &StorageTmp->pdu_tDomainLen)) {
+ config_perror
+ ("unsupported transport domain for mteTriggerEntry");
+ return;
+ }
+ if (tmpoid != NULL) {
+ free(tmpoid);
+ }
+
+ /*
+ * can be NULL? Yes.
+ */
+ line = read_config_read_data(ASN_OCTET_STR, line,
+ &(StorageTmp->pdu_transport),
+ &StorageTmp->pdu_transportLen);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pdu_community,
+ &StorageTmp->pdu_community_len);
+ if (StorageTmp->pdu_community == NULL) {
+ config_perror("invalid specification for pdu_community");
+ return;
+ }
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pdu_securityName,
+ &StorageTmp->pdu_securityNameLen);
+ if (StorageTmp->pdu_securityName == NULL) {
+ config_perror("invalid specification for pdu_securityName");
+ return;
+ }
+ }
+ StorageTmp->storageType = ST_NONVOLATILE; /* the only type stored */
+
+ mteTriggerTable_add(StorageTmp);
+
+ /*
+ * technically this is too early
+ */
+ if (StorageTmp->mteTriggerEnabled == MTETRIGGERENABLED_TRUE &&
+ StorageTmp->mteTriggerEntryStatus == RS_ACTIVE)
+ mte_enable_trigger(StorageTmp);
+
+ DEBUGMSGTL(("mteTriggerTable", "done.\n"));
+}
+
+
+
+
+/*
+ * store_mteTriggerTable():
+ * stores .conf file entries needed to configure the mib.
+ */
+int
+store_mteTriggerTable(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr;
+ size_t tmpint;
+ struct mteTriggerTable_data *StorageTmp;
+ struct header_complex_index *hcindex;
+
+ DEBUGMSGTL(("mteTriggerTable", "storing data... "));
+
+ for (hcindex = mteTriggerTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp = (struct mteTriggerTable_data *) hcindex->data;
+
+
+ if (StorageTmp->storageType == ST_NONVOLATILE) {
+
+ memset(line, 0, sizeof(line));
+ strcat(line, "mteTriggerTable ");
+ cptr = line + strlen(line);
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->mteOwner,
+ &StorageTmp->mteOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->mteTriggerName,
+ &StorageTmp->mteTriggerNameLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->mteTriggerComment,
+ &StorageTmp->mteTriggerCommentLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->mteTriggerTest,
+ &StorageTmp->mteTriggerTestLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->mteTriggerSampleType,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OBJECT_ID, cptr,
+ &StorageTmp->mteTriggerValueID,
+ &StorageTmp->mteTriggerValueIDLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ mteTriggerValueIDWildcard, &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->mteTriggerTargetTag,
+ &StorageTmp->
+ mteTriggerTargetTagLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->mteTriggerContextName,
+ &StorageTmp->
+ mteTriggerContextNameLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ mteTriggerContextNameWildcard,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->mteTriggerFrequency,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->mteTriggerObjectsOwner,
+ &StorageTmp->
+ mteTriggerObjectsOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->mteTriggerObjects,
+ &StorageTmp->mteTriggerObjectsLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->mteTriggerEnabled,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->mteTriggerEntryStatus,
+ &tmpint);
+
+ /*
+ * delta table
+ */
+ cptr =
+ read_config_store_data(ASN_OBJECT_ID, cptr,
+ &StorageTmp->
+ mteTriggerDeltaDiscontinuityID,
+ &StorageTmp->
+ mteTriggerDeltaDiscontinuityIDLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ mteTriggerDeltaDiscontinuityIDWildcard,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ mteTriggerDeltaDiscontinuityIDType,
+ &tmpint);
+
+ /*
+ * existence table
+ */
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerExistenceTest,
+ &StorageTmp->
+ mteTriggerExistenceTestLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerExistenceStartup,
+ &StorageTmp->
+ mteTriggerExistenceStartupLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerExistenceObjectsOwner,
+ &StorageTmp->
+ mteTriggerExistenceObjectsOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerExistenceObjects,
+ &StorageTmp->
+ mteTriggerExistenceObjectsLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerExistenceEventOwner,
+ &StorageTmp->
+ mteTriggerExistenceEventOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerExistenceEvent,
+ &StorageTmp->
+ mteTriggerExistenceEventLen);
+
+ /*
+ * boolean table
+ */
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ mteTriggerBooleanComparison,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->mteTriggerBooleanValue,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ mteTriggerBooleanStartup, &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerBooleanObjectsOwner,
+ &StorageTmp->
+ mteTriggerBooleanObjectsOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerBooleanObjects,
+ &StorageTmp->
+ mteTriggerBooleanObjectsLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerBooleanEventOwner,
+ &StorageTmp->
+ mteTriggerBooleanEventOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->mteTriggerBooleanEvent,
+ &StorageTmp->
+ mteTriggerBooleanEventLen);
+
+ /*
+ * threshold table
+ */
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ mteTriggerThresholdStartup,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ mteTriggerThresholdRising, &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ mteTriggerThresholdFalling,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ mteTriggerThresholdDeltaRising,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ mteTriggerThresholdDeltaFalling,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerThresholdObjectsOwner,
+ &StorageTmp->
+ mteTriggerThresholdObjectsOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerThresholdObjects,
+ &StorageTmp->
+ mteTriggerThresholdObjectsLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerThresholdRisingEventOwner,
+ &StorageTmp->
+ mteTriggerThresholdRisingEventOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerThresholdRisingEvent,
+ &StorageTmp->
+ mteTriggerThresholdRisingEventLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerThresholdFallingEventOwner,
+ &StorageTmp->
+ mteTriggerThresholdFallingEventOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerThresholdFallingEvent,
+ &StorageTmp->
+ mteTriggerThresholdFallingEventLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerThresholdDeltaRisingEventOwner,
+ &StorageTmp->
+ mteTriggerThresholdDeltaRisingEventOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerThresholdDeltaRisingEvent,
+ &StorageTmp->
+ mteTriggerThresholdDeltaRisingEventLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerThresholdDeltaFallingEventOwner,
+ &StorageTmp->
+ mteTriggerThresholdDeltaFallingEventOwnerLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ mteTriggerThresholdDeltaFallingEvent,
+ &StorageTmp->
+ mteTriggerThresholdDeltaFallingEventLen);
+
+ /*
+ * local internal variables
+ */
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->have_copied_auth_info,
+ &tmpint);
+ if (StorageTmp->have_copied_auth_info) {
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->pdu_version,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->pdu_securityModel,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->pdu_securityLevel,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OBJECT_ID, cptr,
+ (void *)(&StorageTmp->pdu_tDomain),
+ &StorageTmp->pdu_tDomainLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pdu_transport,
+ &StorageTmp->pdu_transportLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pdu_community,
+ &StorageTmp->pdu_community_len);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pdu_securityName,
+ &StorageTmp->
+ pdu_securityNameLen);
+ }
+
+ snmpd_store_config(line);
+ }
+ }
+ DEBUGMSGTL(("mteTriggerTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+
+
+/*
+ * var_mteTriggerTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_mteTriggerTable above.
+ */
+unsigned char *
+var_mteTriggerTable(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+
+
+ struct mteTriggerTable_data *StorageTmp = NULL;
+
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "var_mteTriggerTable: Entering... \n"));
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL) {
+ if (vp->magic == MTETRIGGERENTRYSTATUS)
+ *write_method = write_mteTriggerEntryStatus;
+ return NULL;
+ }
+
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+
+
+ case MTETRIGGERCOMMENT:
+ *write_method = write_mteTriggerComment;
+ *var_len = StorageTmp->mteTriggerCommentLen;
+ return (u_char *) StorageTmp->mteTriggerComment;
+
+ case MTETRIGGERTEST:
+ *write_method = write_mteTriggerTest;
+ *var_len = StorageTmp->mteTriggerTestLen;
+ return (u_char *) StorageTmp->mteTriggerTest;
+
+ case MTETRIGGERSAMPLETYPE:
+ *write_method = write_mteTriggerSampleType;
+ *var_len = sizeof(StorageTmp->mteTriggerSampleType);
+ return (u_char *) & StorageTmp->mteTriggerSampleType;
+
+ case MTETRIGGERVALUEID:
+ *write_method = write_mteTriggerValueID;
+ *var_len = StorageTmp->mteTriggerValueIDLen * sizeof(oid);
+ return (u_char *) StorageTmp->mteTriggerValueID;
+
+ case MTETRIGGERVALUEIDWILDCARD:
+ *write_method = write_mteTriggerValueIDWildcard;
+ *var_len = sizeof(StorageTmp->mteTriggerValueIDWildcard);
+ return (u_char *) & StorageTmp->mteTriggerValueIDWildcard;
+
+ case MTETRIGGERTARGETTAG:
+ *write_method = write_mteTriggerTargetTag;
+ *var_len = StorageTmp->mteTriggerTargetTagLen;
+ return (u_char *) StorageTmp->mteTriggerTargetTag;
+
+ case MTETRIGGERCONTEXTNAME:
+ *write_method = write_mteTriggerContextName;
+ *var_len = StorageTmp->mteTriggerContextNameLen;
+ return (u_char *) StorageTmp->mteTriggerContextName;
+
+ case MTETRIGGERCONTEXTNAMEWILDCARD:
+ *write_method = write_mteTriggerContextNameWildcard;
+ *var_len = sizeof(StorageTmp->mteTriggerContextNameWildcard);
+ return (u_char *) & StorageTmp->mteTriggerContextNameWildcard;
+
+ case MTETRIGGERFREQUENCY:
+ *write_method = write_mteTriggerFrequency;
+ *var_len = sizeof(StorageTmp->mteTriggerFrequency);
+ return (u_char *) & StorageTmp->mteTriggerFrequency;
+
+ case MTETRIGGEROBJECTSOWNER:
+ *write_method = write_mteTriggerObjectsOwner;
+ *var_len = StorageTmp->mteTriggerObjectsOwnerLen;
+ return (u_char *) StorageTmp->mteTriggerObjectsOwner;
+
+ case MTETRIGGEROBJECTS:
+ *write_method = write_mteTriggerObjects;
+ *var_len = StorageTmp->mteTriggerObjectsLen;
+ return (u_char *) StorageTmp->mteTriggerObjects;
+
+ case MTETRIGGERENABLED:
+ *write_method = write_mteTriggerEnabled;
+ *var_len = sizeof(StorageTmp->mteTriggerEnabled);
+ return (u_char *) & StorageTmp->mteTriggerEnabled;
+
+ case MTETRIGGERENTRYSTATUS:
+ *write_method = write_mteTriggerEntryStatus;
+ *var_len = sizeof(StorageTmp->mteTriggerEntryStatus);
+ return (u_char *) & StorageTmp->mteTriggerEntryStatus;
+
+
+ default:
+ ERROR_MSG("");
+ }
+ return NULL;
+}
+
+
+
+
+int
+write_mteTriggerComment(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "write_mteTriggerComment entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to mteTriggerComment not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerComment;
+ tmplen = StorageTmp->mteTriggerCommentLen;
+ memdup((u_char **) & StorageTmp->mteTriggerComment, var_val,
+ var_val_len);
+ StorageTmp->mteTriggerCommentLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerComment);
+ StorageTmp->mteTriggerComment = tmpvar;
+ StorageTmp->mteTriggerCommentLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerTest(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "write_mteTriggerTest entering action=%d... \n", action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR, "write to mteTriggerTest not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerTest;
+ tmplen = StorageTmp->mteTriggerTestLen;
+ memdup((u_char **) & StorageTmp->mteTriggerTest, var_val,
+ var_val_len);
+ StorageTmp->mteTriggerTestLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerTest);
+ StorageTmp->mteTriggerTest = tmpvar;
+ StorageTmp->mteTriggerTestLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerSampleType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "write_mteTriggerSampleType entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to mteTriggerSampleType not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerSampleType;
+ StorageTmp->mteTriggerSampleType = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerSampleType = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerValueID(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static oid *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "write_mteTriggerValueID entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OBJECT_ID) {
+ snmp_log(LOG_ERR,
+ "write to mteTriggerValueID not ASN_OBJECT_ID\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerValueID;
+ tmplen = StorageTmp->mteTriggerValueIDLen;
+ memdup((u_char **) & StorageTmp->mteTriggerValueID, var_val,
+ var_val_len);
+ StorageTmp->mteTriggerValueIDLen = var_val_len / sizeof(oid);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerValueID);
+ StorageTmp->mteTriggerValueID = tmpvar;
+ StorageTmp->mteTriggerValueIDLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ /*
+ * XXX: if the valueID has actually changed, shouldn't we dump any
+ * previous values, as these are from a different object?
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerValueIDWildcard(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "write_mteTriggerValueIDWildcard entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to mteTriggerValueIDWildcard not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerValueIDWildcard;
+ StorageTmp->mteTriggerValueIDWildcard = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerValueIDWildcard = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerTargetTag(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "write_mteTriggerTargetTag entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to mteTriggerTargetTag not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerTargetTag;
+ tmplen = StorageTmp->mteTriggerTargetTagLen;
+ memdup((u_char **) & StorageTmp->mteTriggerTargetTag, var_val,
+ var_val_len);
+ StorageTmp->mteTriggerTargetTagLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerTargetTag);
+ StorageTmp->mteTriggerTargetTag = tmpvar;
+ StorageTmp->mteTriggerTargetTagLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerContextName(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "write_mteTriggerContextName entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to mteTriggerContextName not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerContextName;
+ tmplen = StorageTmp->mteTriggerContextNameLen;
+ memdup((u_char **) & StorageTmp->mteTriggerContextName, var_val,
+ var_val_len);
+ StorageTmp->mteTriggerContextNameLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerContextName);
+ StorageTmp->mteTriggerContextName = tmpvar;
+ StorageTmp->mteTriggerContextNameLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerContextNameWildcard(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "write_mteTriggerContextNameWildcard entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to mteTriggerContextNameWildcard not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerContextNameWildcard;
+ StorageTmp->mteTriggerContextNameWildcard = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerContextNameWildcard = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerFrequency(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "write_mteTriggerFrequency entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to mteTriggerFrequency not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in ulong_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerFrequency;
+ StorageTmp->mteTriggerFrequency = *((unsigned long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerFrequency = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ if (StorageTmp->mteTriggerEnabled == MTETRIGGERENABLED_TRUE &&
+ StorageTmp->mteTriggerEntryStatus == RS_ACTIVE)
+ mte_enable_trigger(StorageTmp);
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerObjectsOwner(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "write_mteTriggerObjectsOwner entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to mteTriggerObjectsOwner not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerObjectsOwner;
+ tmplen = StorageTmp->mteTriggerObjectsOwnerLen;
+ memdup((u_char **) & StorageTmp->mteTriggerObjectsOwner, var_val,
+ var_val_len);
+ StorageTmp->mteTriggerObjectsOwnerLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerObjectsOwner);
+ StorageTmp->mteTriggerObjectsOwner = tmpvar;
+ StorageTmp->mteTriggerObjectsOwnerLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerObjects(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "write_mteTriggerObjects entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to mteTriggerObjects not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerObjects;
+ tmplen = StorageTmp->mteTriggerObjectsLen;
+ memdup((u_char **) & StorageTmp->mteTriggerObjects, var_val,
+ var_val_len);
+ StorageTmp->mteTriggerObjectsLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerObjects);
+ StorageTmp->mteTriggerObjects = tmpvar;
+ StorageTmp->mteTriggerObjectsLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerEnabled(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "write_mteTriggerEnabled entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to mteTriggerEnabled not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerEnabled;
+ StorageTmp->mteTriggerEnabled = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerEnabled = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ if (StorageTmp->mteTriggerEnabled == MTETRIGGERENABLED_TRUE &&
+ StorageTmp->mteTriggerEntryStatus == RS_ACTIVE)
+ mte_enable_trigger(StorageTmp);
+ else if (StorageTmp->mteTriggerEnabled == MTETRIGGERENABLED_FALSE)
+ mte_disable_trigger(StorageTmp);
+
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+
+
+int
+write_mteTriggerEntryStatus(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static struct mteTriggerTable_data *StorageNew, *StorageDel;
+ size_t newlen =
+ name_len - (sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+ static int old_value;
+ int set_value;
+ static netsnmp_variable_list *vars, *vp;
+ struct header_complex_index *hciptr;
+
+ StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof(mteTriggerTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL, NULL);
+
+
+
+
+ if (var_val_type != ASN_INTEGER || var_val == NULL) {
+ snmp_log(LOG_ERR,
+ "write to mteTriggerEntryStatus not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ set_value = *((long *) var_val);
+
+
+ /*
+ * check legal range, and notReady is reserved for us, not a user
+ */
+ if (set_value < 1 || set_value > 6 || set_value == RS_NOTREADY)
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+
+ switch (action) {
+ case RESERVE1:
+ /*
+ * stage one: test validity
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * create the row now?
+ */
+
+
+ /*
+ * ditch illegal values now
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE)
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+
+ /*
+ * destroying a non-existent row is actually legal
+ */
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+
+
+ /*
+ * illegal creation values
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE) {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ } else {
+ /*
+ * row exists. Check for a valid state change
+ */
+ if (set_value == RS_CREATEANDGO
+ || set_value == RS_CREATEANDWAIT) {
+ /*
+ * can't create a row that exists
+ */
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+
+ if (StorageTmp->mteTriggerEntryStatus == RS_ACTIVE &&
+ set_value != RS_DESTROY) {
+ /*
+ * "Once made active an entry may not be modified except to
+ * delete it." XXX: doesn't this in fact apply to ALL
+ * columns of the table and not just this one?
+ */
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+
+
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * creation
+ */
+ vars = NULL;
+
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0); /* mteOwner */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_PRIV_IMPLIED_OCTET_STR, NULL, 0); /* mteTriggerName */
+
+
+
+ if (header_complex_parse_oid
+ (&
+ (name
+ [sizeof(mteTriggerTable_variables_oid) / sizeof(oid) +
+ 2]), newlen, vars) != SNMPERR_SUCCESS) {
+ /*
+ * XXX: free, zero vars
+ */
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+ vp = vars;
+
+
+ StorageNew = create_mteTriggerTable_data();
+
+ StorageNew->mteOwner = malloc(vp->val_len + 1);
+ memcpy(StorageNew->mteOwner, vp->val.string, vp->val_len);
+ StorageNew->mteOwner[vp->val_len] = '\0';
+ StorageNew->mteOwnerLen = vp->val_len;
+
+ vp = vp->next_variable;
+ StorageNew->mteTriggerName = malloc(vp->val_len + 1);
+ memcpy(StorageNew->mteTriggerName, vp->val.string,
+ vp->val_len);
+ StorageNew->mteTriggerName[vp->val_len] = '\0';
+ StorageNew->mteTriggerNameLen = vp->val_len;
+
+ vp = vp->next_variable;
+
+ StorageNew->mteTriggerEntryStatus = set_value;
+
+ }
+
+
+ break;
+
+
+
+
+ case FREE:
+ /*
+ * XXX: free, zero vars
+ */
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in set_value for you to
+ * use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in
+ * the UNDO case
+ */
+
+
+ if (StorageTmp == NULL) {
+ /*
+ * row creation, so add it
+ */
+ if (StorageNew != NULL)
+ mteTriggerTable_add(StorageNew);
+ /*
+ * XXX: ack, and if it is NULL?
+ */
+ } else if (set_value != RS_DESTROY) {
+ /*
+ * set the flag?
+ */
+ old_value = StorageTmp->mteTriggerEntryStatus;
+ StorageTmp->mteTriggerEntryStatus = *((long *) var_val);
+ } else {
+ /*
+ * destroy... extract it for now
+ */
+ hciptr =
+ header_complex_find_entry(mteTriggerTableStorage,
+ StorageTmp);
+ StorageDel =
+ header_complex_extract_entry(&mteTriggerTableStorage,
+ hciptr);
+ }
+ break;
+
+
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * row creation, so remove it again
+ */
+ hciptr =
+ header_complex_find_entry(mteTriggerTableStorage,
+ StorageTmp);
+ StorageDel =
+ header_complex_extract_entry(&mteTriggerTableStorage,
+ hciptr);
+ /*
+ * XXX: free it
+ */
+ } else if (StorageDel != NULL) {
+ /*
+ * row deletion, so add it again
+ */
+ mteTriggerTable_add(StorageDel);
+ } else {
+ StorageTmp->mteTriggerEntryStatus = old_value;
+ }
+ break;
+
+
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ if (StorageDel != NULL) {
+ mte_disable_trigger(StorageDel);
+ StorageDel = 0;
+ /*
+ * XXX: free it, its dead
+ */
+ } else {
+ if (StorageTmp
+ && StorageTmp->mteTriggerEntryStatus == RS_CREATEANDGO) {
+ StorageTmp->mteTriggerEntryStatus = RS_ACTIVE;
+ } else if (StorageTmp &&
+ StorageTmp->mteTriggerEntryStatus ==
+ RS_CREATEANDWAIT) {
+ StorageTmp->mteTriggerEntryStatus = RS_NOTINSERVICE;
+ }
+ }
+ if (StorageTmp &&
+ StorageTmp->mteTriggerEntryStatus == RS_ACTIVE &&
+ !StorageTmp->have_copied_auth_info) {
+
+ netsnmp_agent_session *asp =
+ netsnmp_get_current_agent_session();
+ netsnmp_pdu *pdu = NULL;
+
+ if (!asp) {
+ snmp_log(LOG_ERR,
+ "snmpTriggerTable: can't get master session for authentication params\n");
+ } else {
+ pdu = asp->orig_pdu;
+ if (!pdu) {
+ snmp_log(LOG_ERR,
+ "snmpTriggerTable: can't get master pdu for authentication params\n");
+ }
+ }
+
+ if (pdu) {
+ DEBUGMSGTL(("mteTriggerTest", "copying PDU auth info\n"));
+ StorageTmp->pdu_version = pdu->version;
+ StorageTmp->pdu_securityModel = pdu->securityModel;
+ StorageTmp->pdu_securityLevel = pdu->securityLevel;
+ StorageTmp->pdu_tDomain = pdu->tDomain;
+ StorageTmp->pdu_tDomainLen = pdu->tDomainLen;
+ if (pdu->transport_data != NULL) {
+ StorageTmp->pdu_transport =
+ malloc(pdu->transport_data_length);
+ memcpy(StorageTmp->pdu_transport, pdu->transport_data,
+ pdu->transport_data_length);
+ }
+ StorageTmp->pdu_transportLen = pdu->transport_data_length;
+ if (pdu->community) {
+ StorageTmp->pdu_community =
+ calloc(1, pdu->community_len + 1);
+ memcpy(StorageTmp->pdu_community, pdu->community,
+ pdu->community_len);
+ StorageTmp->pdu_community_len = pdu->community_len;
+ } else {
+ StorageTmp->pdu_community = NULL;
+ StorageTmp->pdu_community_len = 0;
+ }
+ if (pdu->securityName) {
+ StorageTmp->pdu_securityName =
+ calloc(1, pdu->securityNameLen + 1);
+ memcpy(StorageTmp->pdu_securityName, pdu->securityName,
+ pdu->securityNameLen);
+ StorageTmp->pdu_securityNameLen = pdu->securityNameLen;
+ } else {
+ StorageTmp->pdu_securityName = NULL;
+ StorageTmp->pdu_securityNameLen = 0;
+ }
+ StorageTmp->have_copied_auth_info = 1;
+ }
+ }
+
+ if (StorageTmp &&
+ StorageTmp->mteTriggerEnabled == MTETRIGGERENABLED_TRUE &&
+ StorageTmp->mteTriggerEntryStatus == RS_ACTIVE)
+ mte_enable_trigger(StorageTmp);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+/*
+ * send trap
+ */
+void
+send_mte_trap(struct mteTriggerTable_data *item,
+ oid * trap_oid, size_t trap_oid_len,
+ oid * name_oid, size_t name_oid_len,
+ long *value, const char *objowner, const char *objname,
+ const char *reason)
+{
+ static oid objid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 }; /* snmpTrapIOD.0 */
+
+ netsnmp_variable_list *var_list = NULL;
+
+ /*
+ * snmpTrap oid
+ */
+ snmp_varlist_add_variable(&var_list, objid_snmptrap,
+ sizeof(objid_snmptrap) / sizeof(oid),
+ ASN_OBJECT_ID, (u_char *) trap_oid,
+ trap_oid_len * sizeof(oid));
+
+ /*
+ * mteHotTrigger
+ */
+ snmp_varlist_add_variable(&var_list, mteHotTrigger,
+ sizeof(mteHotTrigger) / sizeof(oid),
+ ASN_OCTET_STR,
+ (u_char *) item->mteTriggerName,
+ item->mteTriggerNameLen);
+
+ /*
+ * mteHotTargetName
+ */
+ snmp_varlist_add_variable(&var_list, mteHotTargetName, sizeof(mteHotTargetName) / sizeof(oid), ASN_OCTET_STR, (u_char *) item->mteTriggerTargetTag, /*XXX: targetName,not tag */
+ item->mteTriggerTargetTagLen); /*XXX */
+
+ /*
+ * mteHotContextName
+ */
+ snmp_varlist_add_variable(&var_list, mteHotContextName,
+ sizeof(mteHotContextName) / sizeof(oid),
+ ASN_OCTET_STR,
+ (u_char *) item->mteTriggerContextName,
+ item->mteTriggerContextNameLen);
+
+ snmp_varlist_add_variable(&var_list, mteHotOID,
+ sizeof(mteHotOID) / sizeof(oid),
+ ASN_OBJECT_ID, (u_char *) name_oid,
+ sizeof(oid) * name_oid_len);
+
+ if (trap_oid == mteTriggerFailure || trap_oid == mteEventSetFailure) {
+ /*
+ * mteFailedReason
+ */
+ snmp_varlist_add_variable(&var_list, mteFailedReason,
+ sizeof(mteFailedReason) / sizeof(oid),
+ ASN_INTEGER, (u_char *) value,
+ sizeof(value));
+ } else {
+ /*
+ * mteHotValue
+ */
+ snmp_varlist_add_variable(&var_list, mteHotValue,
+ sizeof(mteHotValue) / sizeof(oid),
+ ASN_INTEGER, (u_char *) value,
+ sizeof(value));
+ }
+
+ /*
+ * add in traps from main table
+ */
+ mte_add_objects(var_list, item, item->mteTriggerObjectsOwner,
+ item->mteTriggerObjects,
+ name_oid + item->mteTriggerValueIDLen,
+ name_oid_len - item->mteTriggerValueIDLen);
+ /*
+ * add in traps from sub table
+ */
+ mte_add_objects(var_list, item, objowner, objname,
+ name_oid + item->mteTriggerValueIDLen,
+ name_oid_len - item->mteTriggerValueIDLen);
+
+ /*
+ * XXX: stuff based on event table
+ */
+ DEBUGMSGTL(("mteTriggerTest:send_mte_trap", "sending the trap (%s): ",
+ reason));
+ DEBUGMSGOID(("mteTriggerTest:send_mte_trap", name_oid, name_oid_len));
+ DEBUGMSG(("mteTriggerTest:send_mte_trap", " = %ld\n", *value));
+
+ send_v2trap(var_list);
+ snmp_free_varbind(var_list);
+}
+
+void
+last_state_clean(void *data)
+{
+ struct last_state *cleanme = (struct last_state *) data;
+ SNMP_FREE(cleanme->value);
+ SNMP_FREE(cleanme);
+}
+
+/*
+ * retrieves requested info in pdu from the current target
+ */
+netsnmp_pdu *
+mte_get_response(struct mteTriggerTable_data *item, netsnmp_pdu *pdu)
+{
+ netsnmp_pdu *response = NULL;
+ int status = 0;
+ char buf[SPRINT_MAX_LEN];
+
+ /*
+ * local agent check
+ */
+ pdu->errstat = SNMPERR_SUCCESS;
+ pdu->errindex = 0;
+ pdu->version = item->pdu_version;
+ pdu->securityModel = item->pdu_securityModel;
+ pdu->securityLevel = item->pdu_securityLevel;
+ pdu->tDomain = item->pdu_tDomain;
+ pdu->tDomainLen = item->pdu_tDomainLen;
+ memdup((u_char **) & pdu->transport_data, item->pdu_transport,
+ item->pdu_transportLen);
+ pdu->transport_data_length = item->pdu_transportLen;
+ memdup(&pdu->community, item->pdu_community, item->pdu_community_len);
+ pdu->community_len = item->pdu_community_len;
+ memdup((u_char **) & pdu->contextName, item->mteTriggerContextName,
+ item->mteTriggerContextNameLen);
+ pdu->contextNameLen = item->mteTriggerContextNameLen;
+ memdup((u_char **) & pdu->securityName, item->pdu_securityName,
+ item->pdu_securityNameLen);
+ pdu->securityNameLen = item->pdu_securityNameLen;
+ DEBUGMSGTL(("mteTriggerTable",
+ "accessing locally with secName \"%s\" community \"%s\"\n",
+ item->pdu_securityName ? (char *) item->
+ pdu_securityName : "[NIL]",
+ item->pdu_community ? (char *) item->
+ pdu_community : "[NIL]"));
+
+ if (item->mteTriggerTargetTagLen == 0) {
+ /*
+ * send to the local agent
+ */
+
+ status = snmp_synch_response(mte_callback_sess, pdu, &response);
+
+ if (status != SNMP_ERR_NOERROR ||
+ response->errstat != SNMP_ERR_NOERROR) {
+ /*
+ * xxx
+ */
+ char *errstr;
+ snmp_error(mte_callback_sess, 0, 0, &errstr);
+ if (response) {
+ DEBUGMSGTL(("mteTriggerTable",
+ "Error received: status=%d, sess_error=%s, pduerr=%d/%s, pdu version=%d\n",
+ status, errstr,
+ response->errstat,
+ snmp_api_errstring(response->errstat),
+ response->version));
+ } else {
+ DEBUGMSGTL(("mteTriggerTable",
+ "Error received: status=%d, sess_error=%s [no response pointer]\n",
+ status, errstr));
+ }
+ if (errstr)
+ free(errstr);
+ return NULL; /* XXX: proper failure, trap sent, etc */
+ }
+ } else {
+ /*
+ * remote target list
+ */
+ /*
+ * XXX
+ */
+ }
+ if (response->variables)
+ snprint_variable(buf, sizeof(buf), response->variables->name,
+ response->variables->name_length,
+ response->variables);
+ else
+ strcpy(buf, "empty");
+ buf[sizeof(buf) - 1] = '\0';
+ DEBUGMSGTL(("mteTriggerTable", "got a variables: %s\n", buf));
+ return response;
+}
+
+
+/*
+ * Return 1 if `type' is an integer type; specifically, to quote RFC 2981,
+ * p. 13, "anything that ends up encoded for transmission (that is, in BER,
+ * not ASN.1) as an integer". Return 0 for all other types.
+ */
+
+int
+mte_is_integer_type(unsigned char type)
+{
+ switch (type) {
+ case ASN_INTEGER:
+ case ASN_COUNTER:
+ case ASN_GAUGE:
+ case ASN_TIMETICKS:
+ case ASN_UINTEGER:
+ case ASN_COUNTER64:
+#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
+ case ASN_OPAQUE_COUNTER64:
+ case ASN_OPAQUE_U64:
+ case ASN_OPAQUE_I64:
+#endif /* NETSNMP_WITH_OPAQUE_SPECIAL_TYPES */
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+
+
+/*
+ * Return 0 if the discontinuity object was checked and no discontinuity has
+ * occurred, 1 if the discontinuity object was checked and a discontinuity
+ * has occurred or -1 if the discontinuity object is not accessible.
+ */
+
+int
+mte_discontinuity_occurred(struct mteTriggerTable_data *item)
+{
+ netsnmp_pdu *pdu = NULL, *response = NULL;
+ unsigned long discoTicks = 0; /* cool var name */
+
+ if (item->mteTriggerDeltaDiscontinuityIDLen == 0 ||
+ (snmp_oid_compare(item->mteTriggerDeltaDiscontinuityID,
+ item->mteTriggerDeltaDiscontinuityIDLen,
+ sysUpTimeInstance,
+ sizeof(sysUpTimeInstance) / sizeof(oid)) == 0)) {
+ DEBUGMSGTL(("mte_disco",
+ "discoID either zero-length or sysUpTimeInstance\n"));
+ } else {
+ if (item->mteTriggerValueIDWildcard == TV_TRUE) {
+ pdu = snmp_pdu_create(SNMP_MSG_GETNEXT);
+ } else {
+ pdu = snmp_pdu_create(SNMP_MSG_GET);
+ }
+ snmp_add_null_var(pdu, item->mteTriggerDeltaDiscontinuityID,
+ item->mteTriggerDeltaDiscontinuityIDLen);
+ response = mte_get_response(item, pdu);
+ if (response == NULL) {
+ /*
+ * XXX: send a mteTriggerFailure notification with the appropriate
+ * error code here.
+ */
+ /*
+ * "If the object identified is not accessible the sample attempt is in
+ * error, with the error code as from an SNMP request."
+ */
+ DEBUGMSGTL(("mte_disco", "failure (auth?) getting discoID\n"));
+ return -1;
+ } else {
+ if (item->mteTriggerDeltaDiscontinuityIDType ==
+ MTETRIGGERDELTADISCONTINUITYIDTYPE_TIMETICKS ||
+ item->mteTriggerDeltaDiscontinuityIDType ==
+ MTETRIGGERDELTADISCONTINUITYIDTYPE_TIMESTAMP) {
+ if (response->errstat == SNMPERR_SUCCESS) {
+ if (response->variables != NULL &&
+ response->variables->type == ASN_TIMETICKS) {
+ DEBUGMSGTL(("mte_disco",
+ "got ASN_TIMETICKS-valued variable\n"));
+ discoTicks =
+ *((unsigned long *) response->variables->val.
+ integer);
+ if (item->prevDiscoTicks != 0) {
+ if (discoTicks != item->prevDiscoTicks) {
+ /*
+ * Danger Will Robinson: there has been a discontinuity!
+ */
+ DEBUGMSGTL(("mte_disco",
+ "a discontinuity has occurred\n"));
+ item->prevDiscoTicks = discoTicks;
+ snmp_free_pdu(response);
+ return 1;
+ }
+ }
+ item->prevDiscoTicks = discoTicks;
+ } else {
+ /*
+ * XXX: send a mteTriggerFailure notification with the
+ * appropriate error code here.
+ */
+ if (response->variables != NULL &&
+ (response->variables->type == SNMP_NOSUCHOBJECT
+ || response->variables->type ==
+ SNMP_NOSUCHINSTANCE
+ || response->variables->type ==
+ SNMP_ENDOFMIBVIEW)) {
+ /*
+ * noSuchName I guess.
+ */
+ } else {
+ /*
+ * badType.
+ */
+ }
+ DEBUGMSGTL(("mte_disco",
+ "failure getting discoID\n"));
+ snmp_free_pdu(response);
+ return -1;
+ }
+ } else {
+ /*
+ * XXX: send a mteTriggerFailure notification with the appropriate
+ * error code (just use response->errstat) here.
+ */
+ DEBUGMSGTL(("mte_disco", "failure getting discoID\n"));
+ snmp_free_pdu(response);
+ return -1;
+ }
+ } else {
+ /*
+ * Don't handle dateAndTime type queries yet.
+ */
+ DEBUGMSGTL(("mte_disco",
+ "dateAndTime query UNIMPLEMENTED\n"));
+ }
+ snmp_free_pdu(response);
+ }
+ }
+
+ /*
+ * "...if this object does not point to sysUpTime discontinuity checking
+ * MUST still check sysUpTime for an overall discontinuity."
+ */
+ if (snmp_oid_compare(item->mteTriggerDeltaDiscontinuityID,
+ item->mteTriggerDeltaDiscontinuityIDLen,
+ sysUpTimeInstance,
+ sizeof(sysUpTimeInstance) / sizeof(oid)) != 0) {
+ DEBUGMSGTL(("mte_disco", "discoID != sysUpTimeInstance\n"));
+ /*
+ * At the moment we only support checking the local system so there's no
+ * point doing anything extra here.
+ */
+ }
+
+ /*
+ * Well if we got all the way to here, then there has been neither a
+ * discontinuity nor an error.
+ */
+ DEBUGMSGTL(("mte_disco", "no discontinuity\n"));
+ return 0;
+}
+
+
+void
+mte_run_trigger(unsigned int clientreg, void *clientarg)
+{
+
+ struct mteTriggerTable_data *item =
+ (struct mteTriggerTable_data *) clientarg;
+ netsnmp_pdu *pdu = NULL, *response = NULL;
+ char buf[SPRINT_MAX_LEN];
+ int msg_type = SNMP_MSG_GET, disco;
+
+ oid *next_oid;
+ size_t next_oid_len;
+ long *value, *old_value, x;
+ struct last_state *laststate;
+ char lastbool = 0, boolresult = 0, lastthresh = 0;
+
+ if (!item) {
+ /*
+ * ack
+ */
+ snmp_alarm_unregister(clientreg);
+ return;
+ }
+ DEBUGMSGTL(("mteTriggertable", "Running trigger for %s/%s\n",
+ item->mteOwner, item->mteTriggerName));
+
+ next_oid = item->mteTriggerValueID;
+ next_oid_len = item->mteTriggerValueIDLen;
+ if (item->mteTriggerValueIDWildcard == TV_TRUE)
+ msg_type = SNMP_MSG_GETNEXT;
+
+ item->hc_storage_old = item->hc_storage;
+ item->hc_storage = NULL;
+ do {
+ pdu = snmp_pdu_create(msg_type);
+ snmp_add_null_var(pdu, next_oid, next_oid_len);
+
+ if(response)
+ snmp_free_pdu(response);
+
+ response = mte_get_response(item, pdu);
+ if (!response)
+ break; /* XXX: proper failure */
+
+ if (item->mteTriggerValueIDWildcard == TV_TRUE &&
+ ((response->variables->type >= SNMP_NOSUCHOBJECT &&
+ response->variables->type <= SNMP_ENDOFMIBVIEW) ||
+ snmp_oid_compare(item->mteTriggerValueID,
+ item->mteTriggerValueIDLen,
+ response->variables->name,
+ item->mteTriggerValueIDLen) != 0)) {
+ DEBUGMSGTL(("mteTriggerTable",
+ "DONE, last varbind processed\n"));
+ break;
+ }
+
+ /*
+ * shorter pointers
+ */
+ next_oid = response->variables->name;
+ next_oid_len = response->variables->name_length;
+
+ /*
+ * Send a "bad type" notification if the type of the target object is
+ * non-INTEGER and the test type is either `boolean' or `threshold'
+ * (which want to do arithmetic).
+ */
+ if (((item->mteTriggerTest[0] & MTETRIGGERTEST_BOOLEAN) ||
+ (item->mteTriggerTest[0] & MTETRIGGERTEST_THRESHOLD)) &&
+ response->errstat == SNMPERR_SUCCESS &&
+ !mte_is_integer_type(response->variables->type)) {
+ long failure = MTE_FAILURE_BADTYPE;
+ send_mte_trap(item, mteTriggerFailure,
+ sizeof(mteTriggerFailure) / sizeof(oid),
+ next_oid, next_oid_len, &failure,
+ NULL, NULL, "failure: bad type");
+ /*
+ * RFC2981, p.15: "If the value syntax of those objects
+ * [returned by a getNext-style match] is not usable, that
+ * results in a `badType' error THAT TERMINATES THE SCAN."
+ * (my emphasis).
+ */
+ break;
+ }
+
+ /*
+ * Clone the value. XXX: What happens if it's an unsigned type? Or a
+ * 64-bit type, or an OCTET STRING for the sake of argument. Do
+ * everything in 64-bit arithmetic perhaps? Generate "bad type"
+ * notifications for non-INTEGER cases (except for existence).
+ */
+ if (response->errstat == SNMPERR_SUCCESS &&
+ response->variables->val.integer)
+ memdup((unsigned char **) &value,
+ (unsigned char *) response->variables->val.integer,
+ sizeof(*response->variables->val.integer));
+ else
+ value = NULL;
+
+ snprint_variable(buf, sizeof(buf),
+ next_oid, next_oid_len, response->variables);
+ buf[sizeof(buf) - 1] = '\0';
+ DEBUGMSGTL(("mteTriggerTable", "received %s (type %d)\n", buf,
+ response->variables->type));
+
+ /*
+ * see if we have old values for this
+ */
+ laststate = header_complex_get_from_oid(item->hc_storage_old,
+ next_oid, next_oid_len);
+ if (laststate) {
+ old_value = laststate->value;
+ lastbool = laststate->lastbool;
+ lastthresh = laststate->lastthreshold;
+ } else {
+ old_value = NULL;
+ lastthresh = MTE_THRESHOLD_BEGIN;
+ }
+
+ /*
+ * deal with existence tests
+ */
+ if (item->mteTriggerTest[0] & MTETRIGGERTEST_EXISTENCE) {
+ if ((item->mteTriggerExistenceTest[0] &
+ MTETRIGGEREXISTENCETEST_PRESENT)
+ && value && !old_value &&
+ (item->started ||
+ (item->mteTriggerExistenceStartup[0] &
+ MTETRIGGEREXISTENCESTARTUP_PRESENT))) {
+ /*
+ * XXX: if mteTriggerExistenceTest is not "present", for
+ * example, and then turned on when has been previously
+ * off, do we respect the value of the last known
+ * existence status?
+ */
+ send_mte_trap(item, mteTriggerFired,
+ sizeof(mteTriggerFired) / sizeof(oid),
+ next_oid, next_oid_len,
+ value, item->mteTriggerExistenceObjectsOwner,
+ item->mteTriggerExistenceObjects,
+ "existence: present");
+ run_mte_events(item, next_oid, next_oid_len,
+ item->mteTriggerExistenceEventOwner,
+ item->mteTriggerExistenceEvent);
+ }
+
+ if ((item->mteTriggerExistenceTest[0] &
+ MTETRIGGEREXISTENCETEST_CHANGED)
+ && value && old_value && *old_value != *value) {
+ /*
+ * XXX: if mteTriggerExistenceTest is not "present", for
+ * example, and then turned on when has been previously
+ * off, do we respect the value of the last known
+ * existence status?
+ */
+ send_mte_trap(item, mteTriggerFired,
+ sizeof(mteTriggerFired) / sizeof(oid),
+ next_oid, next_oid_len,
+ value, item->mteTriggerExistenceObjectsOwner,
+ item->mteTriggerExistenceObjects,
+ "existence: changed");
+ run_mte_events(item, next_oid, next_oid_len,
+ item->mteTriggerExistenceEventOwner,
+ item->mteTriggerExistenceEvent);
+ }
+ }
+
+ /*
+ * Deal with boolean tests.
+ */
+ if ((item->mteTriggerTest[0] & MTETRIGGERTEST_BOOLEAN) &&
+ ((item->mteTriggerSampleType ==
+ MTETRIGGERSAMPLETYPE_ABSOLUTEVALUE && value)
+ || (item->mteTriggerSampleType ==
+ MTETRIGGERSAMPLETYPE_DELTAVALUE && value && old_value))) {
+ if (item->mteTriggerSampleType ==
+ MTETRIGGERSAMPLETYPE_DELTAVALUE) {
+ /*
+ * XXX: Must check the discontinuity OID here.
+ */
+ disco = mte_discontinuity_occurred(item);
+ if (disco == -1) {
+ /*
+ * An error notification has already been sent; just bail
+ * out now.
+ */
+ /*
+ * XXX: should save values here?
+ */
+ return;
+ } else if (disco == 1) {
+ /*
+ * A discontinuity has occurred; the right thing to do here
+ * depends on the exact type. FOR NOW, assume long.
+ */
+ x = *((long *) value) + (INT_MAX -
+ *((long *) old_value));
+ } else {
+ x = *((long *) value) - *((long *) old_value);
+ }
+ } else {
+ x = *((long *) value);
+ }
+
+ switch (item->mteTriggerBooleanComparison) {
+ case MTETRIGGERBOOLEANCOMPARISON_UNEQUAL:
+ boolresult = (x != item->mteTriggerBooleanValue);
+ break;
+
+ case MTETRIGGERBOOLEANCOMPARISON_EQUAL:
+ boolresult = (x == item->mteTriggerBooleanValue);
+ break;
+
+ case MTETRIGGERBOOLEANCOMPARISON_LESS:
+ boolresult = (x < item->mteTriggerBooleanValue);
+ break;
+
+ case MTETRIGGERBOOLEANCOMPARISON_LESSOREQUAL:
+ boolresult = (x <= item->mteTriggerBooleanValue);
+ break;
+
+ case MTETRIGGERBOOLEANCOMPARISON_GREATER:
+ boolresult = (x > item->mteTriggerBooleanValue);
+ break;
+
+ case MTETRIGGERBOOLEANCOMPARISON_GREATEROREQUAL:
+ boolresult = (x >= item->mteTriggerBooleanValue);
+ break;
+
+ default:
+ snmp_log(LOG_WARNING,
+ "illegal value in mteTriggerBooleanComparison object: %ld",
+ item->mteTriggerBooleanComparison);
+ boolresult = item->lastboolresult; /* to fail next test */
+ }
+
+ if (boolresult &&
+ ((item->mteTriggerBooleanStartup ==
+ MTETRIGGERBOOLEANSTARTUP_TRUE
+ && lastbool == (char)-1) || lastbool != boolresult)) {
+ send_mte_trap(item, mteTriggerFired,
+ sizeof(mteTriggerFired) / sizeof(oid),
+ next_oid, next_oid_len,
+ &x, item->mteTriggerBooleanObjectsOwner,
+ item->mteTriggerBooleanObjects,
+ "boolean: true");
+ run_mte_events(item, next_oid, next_oid_len,
+ item->mteTriggerBooleanEventOwner,
+ item->mteTriggerBooleanEvent);
+ }
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "value: %d %ld %lu x: %d %ld %lu\n", *value,
+ *value, *value, x, x, x));
+
+ DEBUGMSGTL(("mteTriggerTable",
+ "boolean result: x=%d %s configured=%d = %d\n",
+ x,
+ se_find_label_in_slist("mteBooleanOperators",
+ item->
+ mteTriggerBooleanComparison),
+ item->mteTriggerBooleanValue, boolresult));
+ }
+
+ /*
+ * Deal with threshold tests. XXX: doesn't handle "delta-type"
+ * sampling.
+ */
+ if ((item->mteTriggerTest[0] & MTETRIGGERTEST_THRESHOLD) &&
+ ((item->mteTriggerSampleType ==
+ MTETRIGGERSAMPLETYPE_ABSOLUTEVALUE && value)
+ || (item->mteTriggerSampleType ==
+ MTETRIGGERSAMPLETYPE_DELTAVALUE && value && old_value))) {
+ /*
+ * XXX: correct intepretation of mteTriggerThresholdStartup?
+ */
+ /*
+ * only fires when passed and just set to active? What
+ * about a newly discovered node that is past a
+ * threshold once we've been active for a turn at least?
+ */
+ /*
+ * XXX: Check notions of > vs >=
+ */
+ if (((item->started == MTE_STARTED && laststate &&
+ lastthresh == MTE_THRESHOLD_LOW) ||
+ (item->started != MTE_STARTED &&
+ (item->mteTriggerThresholdStartup ==
+ MTETRIGGERTHRESHOLDSTARTUP_RISING
+ || item->mteTriggerThresholdStartup ==
+ MTETRIGGERTHRESHOLDSTARTUP_RISINGORFALLING)))
+ && (*value >= item->mteTriggerThresholdRising)) {
+ send_mte_trap(item, mteTriggerRising,
+ sizeof(mteTriggerRising) / sizeof(oid),
+ next_oid, next_oid_len, value,
+ item->mteTriggerThresholdObjectsOwner,
+ item->mteTriggerThresholdObjects,
+ "threshold: rising");
+ run_mte_events(item, next_oid, next_oid_len,
+ item->mteTriggerThresholdRisingEventOwner,
+ item->mteTriggerThresholdRisingEvent);
+ }
+ if (((item->started == MTE_STARTED && laststate &&
+ lastthresh == MTE_THRESHOLD_HIGH) ||
+ (item->started != MTE_STARTED &&
+ (item->mteTriggerThresholdStartup ==
+ MTETRIGGERTHRESHOLDSTARTUP_FALLING
+ || item->mteTriggerThresholdStartup ==
+ MTETRIGGERTHRESHOLDSTARTUP_RISINGORFALLING)))
+ && (*value <= item->mteTriggerThresholdFalling)) {
+ send_mte_trap(item, mteTriggerFalling,
+ sizeof(mteTriggerFalling) / sizeof(oid),
+ next_oid, next_oid_len, value,
+ item->mteTriggerThresholdObjectsOwner,
+ item->mteTriggerThresholdObjects,
+ "threshold: falling");
+ run_mte_events(item, next_oid, next_oid_len,
+ item->mteTriggerThresholdFallingEventOwner,
+ item->mteTriggerThresholdFallingEvent);
+ }
+
+ }
+
+ if (value) {
+ struct last_state *new_last_state =
+ SNMP_MALLOC_STRUCT(last_state);
+ new_last_state->value = value;
+ new_last_state->lastbool = boolresult;
+ header_complex_add_data_by_oid(&item->hc_storage, next_oid,
+ next_oid_len, new_last_state);
+
+ /*
+ * set our notion of the current known threshold state
+ */
+ if (lastthresh == MTE_THRESHOLD_LOW &&
+ *value >= item->mteTriggerThresholdRising &&
+ *value > item->mteTriggerThresholdFalling)
+ new_last_state->lastthreshold = MTE_THRESHOLD_HIGH;
+ else if (lastthresh == MTE_THRESHOLD_HIGH &&
+ *value < item->mteTriggerThresholdRising &&
+ *value <= item->mteTriggerThresholdFalling)
+ new_last_state->lastthreshold = MTE_THRESHOLD_LOW;
+ else if (lastthresh == MTE_THRESHOLD_BEGIN) {
+ if (*value >= item->mteTriggerThresholdRising)
+ new_last_state->lastthreshold = MTE_THRESHOLD_HIGH;
+ else if (*value <= item->mteTriggerThresholdFalling)
+ new_last_state->lastthreshold = MTE_THRESHOLD_LOW;
+ /*
+ * XXX: else??? in between? undefined?
+ */
+ } else {
+ new_last_state->lastthreshold = lastthresh;
+ }
+ }
+
+ /*
+ * extract from old hc storage
+ */
+ if (laststate) {
+ header_complex_extract_entry(&item->hc_storage_old,
+ header_complex_find_entry(item->
+ hc_storage_old,
+ (void *)
+ laststate));
+ last_state_clean(laststate);
+ }
+
+ } while (item->mteTriggerValueIDWildcard == TV_TRUE);
+
+ if(response)
+ snmp_free_pdu(response);
+
+ /*
+ * loop through old values for DNE cases
+ */
+ if (item->mteTriggerExistenceTest[0] & MTETRIGGEREXISTENCETEST_ABSENT) {
+
+ struct header_complex_index *iter;
+
+ /*
+ * XXX: broken
+ */
+ if ((item->mteTriggerExistenceStartup[0] &
+ MTETRIGGEREXISTENCESTARTUP_ABSENT)) {
+ /*
+ * XXX: send trap that nothing was found?
+ */
+ /*
+ * only if !wild? (see mib)
+ */
+ }
+ for (iter = item->hc_storage_old; iter; iter = iter->next) {
+ laststate = (struct last_state *) iter->data;
+ send_mte_trap(item, mteTriggerFired,
+ sizeof(mteTriggerFired) / sizeof(oid),
+ iter->name, iter->namelen, laststate->value,
+ item->mteTriggerExistenceObjectsOwner,
+ item->mteTriggerExistenceObjects,
+ "existence: absent");
+ }
+ header_complex_free_all(item->hc_storage_old, last_state_clean);
+ item->hc_storage_old = NULL;
+ }
+
+ item->started = MTE_STARTED;
+}
+
+
+/*
+ * handling routines
+ */
+void
+mte_enable_trigger(struct mteTriggerTable_data *item)
+{
+ if (!item)
+ return;
+
+ if (item->alarmreg)
+ snmp_alarm_unregister(item->alarmreg);
+
+ if (item->mteTriggerFrequency > 0) {
+ DEBUGMSGTL(("mteTriggertable", "Enabling trigger for %s/%s @ %u\n",
+ item->mteOwner, item->mteTriggerName,
+ item->mteTriggerFrequency));
+ item->alarmreg =
+ snmp_alarm_register(item->mteTriggerFrequency, SA_REPEAT,
+ mte_run_trigger, item);
+ }
+}
+
+void
+mte_disable_trigger(struct mteTriggerTable_data *item)
+{
+ if (!item)
+ return;
+
+ if (item->alarmreg) {
+ DEBUGMSGTL(("mteTriggertable", "Disabling trigger for %s/%s\n",
+ item->mteOwner, item->mteTriggerName));
+ snmp_alarm_unregister(item->alarmreg);
+ item->alarmreg = 0;
+ }
+ item->started = MTE_NOTSTARTED;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerTable.h
new file mode 100644
index 0000000000..18914dd99f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerTable.h
@@ -0,0 +1,254 @@
+/*
+ * This file was generated by mib2c and is intended for use as a mib module
+ * for the ucd-snmp snmpd agent.
+ */
+
+
+#ifndef _MIBGROUP_MTETRIGGERTABLE_H
+#define _MIBGROUP_MTETRIGGERTABLE_H
+
+
+/*
+ * we may use header_complex from the header_complex module
+ */
+
+
+config_require(header_complex)
+config_require(utilities/iquery)
+
+#ifndef NETSNMP_TRANSPORT_CALLBACK_DOMAIN
+config_error(disman/mteTriggerTable depends on the Callback transport)
+#endif
+
+ /*
+ * our storage structure(s)
+ */
+ struct mteTriggerTable_data {
+
+
+ char *mteOwner;
+ size_t mteOwnerLen;
+ char *mteTriggerName;
+ size_t mteTriggerNameLen;
+ char *mteTriggerComment;
+ size_t mteTriggerCommentLen;
+ char *mteTriggerTest;
+ size_t mteTriggerTestLen;
+ long mteTriggerSampleType;
+ oid *mteTriggerValueID;
+ size_t mteTriggerValueIDLen;
+ long mteTriggerValueIDWildcard;
+ char *mteTriggerTargetTag;
+ size_t mteTriggerTargetTagLen;
+ char *mteTriggerContextName;
+ size_t mteTriggerContextNameLen;
+ long mteTriggerContextNameWildcard;
+ unsigned long mteTriggerFrequency;
+ char *mteTriggerObjectsOwner;
+ size_t mteTriggerObjectsOwnerLen;
+ char *mteTriggerObjects;
+ size_t mteTriggerObjectsLen;
+ long mteTriggerEnabled;
+ long mteTriggerEntryStatus;
+
+ /*
+ * delta table
+ */
+ oid *mteTriggerDeltaDiscontinuityID;
+ size_t mteTriggerDeltaDiscontinuityIDLen;
+ long mteTriggerDeltaDiscontinuityIDWildcard;
+ long mteTriggerDeltaDiscontinuityIDType;
+ unsigned long prevDiscoTicks;
+ unsigned long prevUptimeTicks;
+
+ /*
+ * existence table
+ */
+ char *mteTriggerExistenceTest;
+ size_t mteTriggerExistenceTestLen;
+ char *mteTriggerExistenceStartup;
+ size_t mteTriggerExistenceStartupLen;
+ char *mteTriggerExistenceObjectsOwner;
+ size_t mteTriggerExistenceObjectsOwnerLen;
+ char *mteTriggerExistenceObjects;
+ size_t mteTriggerExistenceObjectsLen;
+ char *mteTriggerExistenceEventOwner;
+ size_t mteTriggerExistenceEventOwnerLen;
+ char *mteTriggerExistenceEvent;
+ size_t mteTriggerExistenceEventLen;
+
+ /*
+ * boolean table
+ */
+ long mteTriggerBooleanComparison;
+ long mteTriggerBooleanValue;
+ long mteTriggerBooleanStartup;
+ char *mteTriggerBooleanObjectsOwner;
+ size_t mteTriggerBooleanObjectsOwnerLen;
+ char *mteTriggerBooleanObjects;
+ size_t mteTriggerBooleanObjectsLen;
+ char *mteTriggerBooleanEventOwner;
+ size_t mteTriggerBooleanEventOwnerLen;
+ char *mteTriggerBooleanEvent;
+ size_t mteTriggerBooleanEventLen;
+
+ /*
+ * threshold table
+ */
+ long mteTriggerThresholdStartup;
+ long mteTriggerThresholdRising;
+ long mteTriggerThresholdFalling;
+ long mteTriggerThresholdDeltaRising;
+ long mteTriggerThresholdDeltaFalling;
+ char *mteTriggerThresholdObjectsOwner;
+ size_t mteTriggerThresholdObjectsOwnerLen;
+ char *mteTriggerThresholdObjects;
+ size_t mteTriggerThresholdObjectsLen;
+ char *mteTriggerThresholdRisingEventOwner;
+ size_t mteTriggerThresholdRisingEventOwnerLen;
+ char *mteTriggerThresholdRisingEvent;
+ size_t mteTriggerThresholdRisingEventLen;
+ char *mteTriggerThresholdFallingEventOwner;
+ size_t mteTriggerThresholdFallingEventOwnerLen;
+ char *mteTriggerThresholdFallingEvent;
+ size_t mteTriggerThresholdFallingEventLen;
+ char *mteTriggerThresholdDeltaRisingEventOwner;
+ size_t mteTriggerThresholdDeltaRisingEventOwnerLen;
+ char *mteTriggerThresholdDeltaRisingEvent;
+ size_t mteTriggerThresholdDeltaRisingEventLen;
+ char *mteTriggerThresholdDeltaFallingEventOwner;
+ size_t mteTriggerThresholdDeltaFallingEventOwnerLen;
+ char *mteTriggerThresholdDeltaFallingEvent;
+ size_t mteTriggerThresholdDeltaFallingEventLen;
+
+ /*
+ * internal variables
+ */
+ int storageType;
+ unsigned int alarmreg;
+ int lastboolresult;
+ int started;
+ long lastvalue;
+ struct header_complex_index *hc_storage, *hc_storage_old;
+ unsigned long threshold_state;
+
+ /*
+ * pdu auth contents
+ */
+ long have_copied_auth_info;
+ long pdu_version;
+ long pdu_securityModel;
+ long pdu_securityLevel;
+ void *pdu_transport;
+ size_t pdu_transportLen;
+ const oid *pdu_tDomain;
+ size_t pdu_tDomainLen;
+ u_char *pdu_community;
+ size_t pdu_community_len;
+ char *pdu_contextName;
+ size_t pdu_contextNameLen;
+ char *pdu_securityName;
+ size_t pdu_securityNameLen;
+ };
+
+ struct last_state {
+ long *value;
+ char lastbool;
+ char lastthreshold;
+ };
+
+
+/*
+ * enum definitions from the covered mib sections
+ */
+
+
+
+
+
+
+
+#define MTETRIGGERTEST_EXISTENCE 0x80
+#define MTETRIGGERTEST_BOOLEAN 0x40
+#define MTETRIGGERTEST_THRESHOLD 0x20
+
+#define MTETRIGGERSAMPLETYPE_ABSOLUTEVALUE 1
+#define MTETRIGGERSAMPLETYPE_DELTAVALUE 2
+
+
+/*
+ * What's wrong with using the regular TruthValue definitions TV_TRUE
+ * and TV_FALSE (snmp-tc.h) which are up to 77% shorter?
+ */
+
+#define MTETRIGGERVALUEIDWILDCARD_TRUE 1
+#define MTETRIGGERVALUEIDWILDCARD_FALSE 2
+
+
+
+#define MTETRIGGERCONTEXTNAMEWILDCARD_TRUE 1
+#define MTETRIGGERCONTEXTNAMEWILDCARD_FALSE 2
+
+
+
+
+#define MTETRIGGERENABLED_TRUE 1
+#define MTETRIGGERENABLED_FALSE 2
+
+#define MTE_NOTSTARTED 0
+#define MTE_STARTED 1
+
+#define MTE_THRESHOLD_BEGIN 0
+#define MTE_THRESHOLD_HIGH 1
+#define MTE_THRESHOLD_LOW 2
+
+/*
+ * Just the first (MTE-specific) groups of errors defined here;
+ * others are numerically equal to the regular SNMP errors.
+ */
+
+#define MTE_FAILURE_LOCALRESOURCELACK -1
+#define MTE_FAILURE_BADDESTINATION -2
+#define MTE_FAILURE_DESTINATIONUNREACHABLE -3
+#define MTE_FAILURE_NORESPONSE -4
+#define MTE_FAILURE_BADTYPE -5
+#define MTE_FAILURE_SAMPLEOVERRUN -6
+
+
+/*
+ * function prototypes
+ */
+
+
+ void init_mteTriggerTable(void);
+ FindVarMethod var_mteTriggerTable;
+ void parse_mteTriggerTable(const char *, char *);
+ void parse_simple_monitor(const char *, char *);
+ void parse_default_monitors(const char *, char *);
+ SNMPCallback store_mteTriggerTable;
+ netsnmp_pdu *mte_get_response(struct mteTriggerTable_data *,
+ netsnmp_pdu *);
+
+
+ WriteMethod write_mteTriggerComment;
+ WriteMethod write_mteTriggerTest;
+ WriteMethod write_mteTriggerSampleType;
+ WriteMethod write_mteTriggerValueID;
+ WriteMethod write_mteTriggerValueIDWildcard;
+ WriteMethod write_mteTriggerTargetTag;
+ WriteMethod write_mteTriggerContextName;
+ WriteMethod write_mteTriggerContextNameWildcard;
+ WriteMethod write_mteTriggerFrequency;
+ WriteMethod write_mteTriggerObjectsOwner;
+ WriteMethod write_mteTriggerObjects;
+ WriteMethod write_mteTriggerEnabled;
+ WriteMethod write_mteTriggerEntryStatus;
+
+ WriteMethod write_mteTriggerEntryStatus;
+
+ void mte_enable_trigger(struct mteTriggerTable_data *item);
+ void mte_disable_trigger(struct mteTriggerTable_data
+ *item);
+ SNMPAlarmCallback mte_run_trigger;
+
+#endif /* _MIBGROUP_MTETRIGGERTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerThresholdTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerThresholdTable.c
new file mode 100644
index 0000000000..11fa0688ef
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerThresholdTable.c
@@ -0,0 +1,1611 @@
+/*
+ * This file was generated by mib2c and is intended for use as
+ * a mib module for the ucd-snmp snmpd agent.
+ */
+
+
+/*
+ * This should always be included first before anything else
+ */
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+
+/*
+ * minimal include directives
+ */
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "header_complex.h"
+#include "mteTriggerThresholdTable.h"
+#include "mteTriggerTable.h"
+
+
+/*
+ * mteTriggerThresholdTable_variables_oid:
+ * this is the top level oid that we want to register under. This
+ * is essentially a prefix, with the suffix appearing in the
+ * variable below.
+ */
+
+
+oid mteTriggerThresholdTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 88, 1, 2, 6 };
+
+
+/*
+ * variable2 mteTriggerThresholdTable_variables:
+ * this variable defines function callbacks and type return information
+ * for the mteTriggerThresholdTable mib section
+ */
+
+
+struct variable2 mteTriggerThresholdTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+#define MTETRIGGERTHRESHOLDSTARTUP 3
+ {MTETRIGGERTHRESHOLDSTARTUP, ASN_INTEGER, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 1}},
+#define MTETRIGGERTHRESHOLDRISING 4
+ {MTETRIGGERTHRESHOLDRISING, ASN_INTEGER, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 2}},
+#define MTETRIGGERTHRESHOLDFALLING 5
+ {MTETRIGGERTHRESHOLDFALLING, ASN_INTEGER, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 3}},
+#define MTETRIGGERTHRESHOLDDELTARISING 6
+ {MTETRIGGERTHRESHOLDDELTARISING, ASN_INTEGER, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 4}},
+#define MTETRIGGERTHRESHOLDDELTAFALLING 7
+ {MTETRIGGERTHRESHOLDDELTAFALLING, ASN_INTEGER, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 5}},
+#define MTETRIGGERTHRESHOLDOBJECTSOWNER 8
+ {MTETRIGGERTHRESHOLDOBJECTSOWNER, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 6}},
+#define MTETRIGGERTHRESHOLDOBJECTS 9
+ {MTETRIGGERTHRESHOLDOBJECTS, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 7}},
+#define MTETRIGGERTHRESHOLDRISINGEVENTOWNER 10
+ {MTETRIGGERTHRESHOLDRISINGEVENTOWNER, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 8}},
+#define MTETRIGGERTHRESHOLDRISINGEVENT 11
+ {MTETRIGGERTHRESHOLDRISINGEVENT, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 9}},
+#define MTETRIGGERTHRESHOLDFALLINGEVENTOWNER 12
+ {MTETRIGGERTHRESHOLDFALLINGEVENTOWNER, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 10}},
+#define MTETRIGGERTHRESHOLDFALLINGEVENT 13
+ {MTETRIGGERTHRESHOLDFALLINGEVENT, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 11}},
+#define MTETRIGGERTHRESHOLDDELTARISINGEVENTOWNER 14
+ {MTETRIGGERTHRESHOLDDELTARISINGEVENTOWNER, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 12}},
+#define MTETRIGGERTHRESHOLDDELTARISINGEVENT 15
+ {MTETRIGGERTHRESHOLDDELTARISINGEVENT, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 13}},
+#define MTETRIGGERTHRESHOLDDELTAFALLINGEVENTOWNER 16
+ {MTETRIGGERTHRESHOLDDELTAFALLINGEVENTOWNER, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 14}},
+#define MTETRIGGERTHRESHOLDDELTAFALLINGEVENT 17
+ {MTETRIGGERTHRESHOLDDELTAFALLINGEVENT, ASN_OCTET_STR, RWRITE,
+ var_mteTriggerThresholdTable, 2, {1, 15}},
+
+};
+/*
+ * (L = length of the oidsuffix)
+ */
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+extern struct header_complex_index *mteTriggerTableStorage;
+
+
+/*
+ * init_mteTriggerThresholdTable():
+ * Initialization routine. This is called when the agent starts up.
+ * At a minimum, registration of your variables should take place here.
+ */
+void
+init_mteTriggerThresholdTable(void)
+{
+ DEBUGMSGTL(("mteTriggerThresholdTable", "initializing... "));
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("mteTriggerThresholdTable",
+ mteTriggerThresholdTable_variables, variable2,
+ mteTriggerThresholdTable_variables_oid);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable", "done.\n"));
+}
+
+/*
+ * var_mteTriggerThresholdTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_mteTriggerThresholdTable above.
+ */
+unsigned char *
+var_mteTriggerThresholdTable(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+
+
+ struct mteTriggerTable_data *StorageTmp = NULL;
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "var_mteTriggerThresholdTable: Entering... \n"));
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL)
+ return NULL;
+
+
+ if (!(StorageTmp->mteTriggerTest[0] & MTETRIGGERTEST_THRESHOLD))
+ return NULL;
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+
+
+ case MTETRIGGERTHRESHOLDSTARTUP:
+ *write_method = write_mteTriggerThresholdStartup;
+ *var_len = sizeof(StorageTmp->mteTriggerThresholdStartup);
+ return (u_char *) & StorageTmp->mteTriggerThresholdStartup;
+
+ case MTETRIGGERTHRESHOLDRISING:
+ *write_method = write_mteTriggerThresholdRising;
+ *var_len = sizeof(StorageTmp->mteTriggerThresholdRising);
+ return (u_char *) & StorageTmp->mteTriggerThresholdRising;
+
+ case MTETRIGGERTHRESHOLDFALLING:
+ *write_method = write_mteTriggerThresholdFalling;
+ *var_len = sizeof(StorageTmp->mteTriggerThresholdFalling);
+ return (u_char *) & StorageTmp->mteTriggerThresholdFalling;
+
+ case MTETRIGGERTHRESHOLDDELTARISING:
+ *write_method = write_mteTriggerThresholdDeltaRising;
+ *var_len = sizeof(StorageTmp->mteTriggerThresholdDeltaRising);
+ return (u_char *) & StorageTmp->mteTriggerThresholdDeltaRising;
+
+ case MTETRIGGERTHRESHOLDDELTAFALLING:
+ *write_method = write_mteTriggerThresholdDeltaFalling;
+ *var_len = sizeof(StorageTmp->mteTriggerThresholdDeltaFalling);
+ return (u_char *) & StorageTmp->mteTriggerThresholdDeltaFalling;
+
+ case MTETRIGGERTHRESHOLDOBJECTSOWNER:
+ *write_method = write_mteTriggerThresholdObjectsOwner;
+ *var_len = StorageTmp->mteTriggerThresholdObjectsOwnerLen;
+ return (u_char *) StorageTmp->mteTriggerThresholdObjectsOwner;
+
+ case MTETRIGGERTHRESHOLDOBJECTS:
+ *write_method = write_mteTriggerThresholdObjects;
+ *var_len = StorageTmp->mteTriggerThresholdObjectsLen;
+ return (u_char *) StorageTmp->mteTriggerThresholdObjects;
+
+ case MTETRIGGERTHRESHOLDRISINGEVENTOWNER:
+ *write_method = write_mteTriggerThresholdRisingEventOwner;
+ *var_len = StorageTmp->mteTriggerThresholdRisingEventOwnerLen;
+ return (u_char *) StorageTmp->mteTriggerThresholdRisingEventOwner;
+
+ case MTETRIGGERTHRESHOLDRISINGEVENT:
+ *write_method = write_mteTriggerThresholdRisingEvent;
+ *var_len = StorageTmp->mteTriggerThresholdRisingEventLen;
+ return (u_char *) StorageTmp->mteTriggerThresholdRisingEvent;
+
+ case MTETRIGGERTHRESHOLDFALLINGEVENTOWNER:
+ *write_method = write_mteTriggerThresholdFallingEventOwner;
+ *var_len = StorageTmp->mteTriggerThresholdFallingEventOwnerLen;
+ return (u_char *) StorageTmp->mteTriggerThresholdFallingEventOwner;
+
+ case MTETRIGGERTHRESHOLDFALLINGEVENT:
+ *write_method = write_mteTriggerThresholdFallingEvent;
+ *var_len = StorageTmp->mteTriggerThresholdFallingEventLen;
+ return (u_char *) StorageTmp->mteTriggerThresholdFallingEvent;
+
+ case MTETRIGGERTHRESHOLDDELTARISINGEVENTOWNER:
+ *write_method = write_mteTriggerThresholdDeltaRisingEventOwner;
+ *var_len = StorageTmp->mteTriggerThresholdDeltaRisingEventOwnerLen;
+ return (u_char *) StorageTmp->
+ mteTriggerThresholdDeltaRisingEventOwner;
+
+ case MTETRIGGERTHRESHOLDDELTARISINGEVENT:
+ *write_method = write_mteTriggerThresholdDeltaRisingEvent;
+ *var_len = StorageTmp->mteTriggerThresholdDeltaRisingEventLen;
+ return (u_char *) StorageTmp->mteTriggerThresholdDeltaRisingEvent;
+
+ case MTETRIGGERTHRESHOLDDELTAFALLINGEVENTOWNER:
+ *write_method = write_mteTriggerThresholdDeltaFallingEventOwner;
+ *var_len =
+ StorageTmp->mteTriggerThresholdDeltaFallingEventOwnerLen;
+ return (u_char *) StorageTmp->
+ mteTriggerThresholdDeltaFallingEventOwner;
+
+ case MTETRIGGERTHRESHOLDDELTAFALLINGEVENT:
+ *write_method = write_mteTriggerThresholdDeltaFallingEvent;
+ *var_len = StorageTmp->mteTriggerThresholdDeltaFallingEventLen;
+ return (u_char *) StorageTmp->mteTriggerThresholdDeltaFallingEvent;
+
+
+ default:
+ ERROR_MSG("");
+ }
+ return NULL;
+}
+
+
+
+
+int
+write_mteTriggerThresholdStartup(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdStartup entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdStartup not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdStartup;
+ StorageTmp->mteTriggerThresholdStartup = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerThresholdStartup = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdRising(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdRising entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdRising not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdRising;
+ StorageTmp->mteTriggerThresholdRising = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerThresholdRising = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdFalling(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdFalling entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdFalling not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdFalling;
+ StorageTmp->mteTriggerThresholdFalling = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerThresholdFalling = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdDeltaRising(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdDeltaRising entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdDeltaRising not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdDeltaRising;
+ StorageTmp->mteTriggerThresholdDeltaRising = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerThresholdDeltaRising = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdDeltaFalling(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static int tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdDeltaFalling entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdDeltaFalling not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdDeltaFalling;
+ StorageTmp->mteTriggerThresholdDeltaFalling = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->mteTriggerThresholdDeltaFalling = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdObjectsOwner(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdObjectsOwner entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdObjectsOwner not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdObjectsOwner;
+ tmplen = StorageTmp->mteTriggerThresholdObjectsOwnerLen;
+ memdup((u_char **) & StorageTmp->mteTriggerThresholdObjectsOwner,
+ var_val, var_val_len);
+ StorageTmp->mteTriggerThresholdObjectsOwnerLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerThresholdObjectsOwner);
+ StorageTmp->mteTriggerThresholdObjectsOwner = tmpvar;
+ StorageTmp->mteTriggerThresholdObjectsOwnerLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdObjects(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdObjects entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdObjects not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdObjects;
+ tmplen = StorageTmp->mteTriggerThresholdObjectsLen;
+ memdup((u_char **) & StorageTmp->mteTriggerThresholdObjects,
+ var_val, var_val_len);
+ StorageTmp->mteTriggerThresholdObjectsLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerThresholdObjects);
+ StorageTmp->mteTriggerThresholdObjects = tmpvar;
+ StorageTmp->mteTriggerThresholdObjectsLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdRisingEventOwner(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdRisingEventOwner entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdRisingEventOwner not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdRisingEventOwner;
+ tmplen = StorageTmp->mteTriggerThresholdRisingEventOwnerLen;
+ memdup((u_char **) & StorageTmp->
+ mteTriggerThresholdRisingEventOwner, var_val, var_val_len);
+ StorageTmp->mteTriggerThresholdRisingEventOwnerLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerThresholdRisingEventOwner);
+ StorageTmp->mteTriggerThresholdRisingEventOwner = tmpvar;
+ StorageTmp->mteTriggerThresholdRisingEventOwnerLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdRisingEvent(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdRisingEvent entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdRisingEvent not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdRisingEvent;
+ tmplen = StorageTmp->mteTriggerThresholdRisingEventLen;
+ memdup((u_char **) & StorageTmp->mteTriggerThresholdRisingEvent,
+ var_val, var_val_len);
+ StorageTmp->mteTriggerThresholdRisingEventLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerThresholdRisingEvent);
+ StorageTmp->mteTriggerThresholdRisingEvent = tmpvar;
+ StorageTmp->mteTriggerThresholdRisingEventLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdFallingEventOwner(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdFallingEventOwner entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdFallingEventOwner not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdFallingEventOwner;
+ tmplen = StorageTmp->mteTriggerThresholdFallingEventOwnerLen;
+ memdup((u_char **) & StorageTmp->
+ mteTriggerThresholdFallingEventOwner, var_val, var_val_len);
+ StorageTmp->mteTriggerThresholdFallingEventOwnerLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerThresholdFallingEventOwner);
+ StorageTmp->mteTriggerThresholdFallingEventOwner = tmpvar;
+ StorageTmp->mteTriggerThresholdFallingEventOwnerLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdFallingEvent(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdFallingEvent entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdFallingEvent not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdFallingEvent;
+ tmplen = StorageTmp->mteTriggerThresholdFallingEventLen;
+ memdup((u_char **) & StorageTmp->mteTriggerThresholdFallingEvent,
+ var_val, var_val_len);
+ StorageTmp->mteTriggerThresholdFallingEventLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerThresholdFallingEvent);
+ StorageTmp->mteTriggerThresholdFallingEvent = tmpvar;
+ StorageTmp->mteTriggerThresholdFallingEventLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdDeltaRisingEventOwner(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdDeltaRisingEventOwner entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdDeltaRisingEventOwner not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdDeltaRisingEventOwner;
+ tmplen = StorageTmp->mteTriggerThresholdDeltaRisingEventOwnerLen;
+ memdup((u_char **) & StorageTmp->
+ mteTriggerThresholdDeltaRisingEventOwner, var_val,
+ var_val_len);
+ StorageTmp->mteTriggerThresholdDeltaRisingEventOwnerLen =
+ var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerThresholdDeltaRisingEventOwner);
+ StorageTmp->mteTriggerThresholdDeltaRisingEventOwner = tmpvar;
+ StorageTmp->mteTriggerThresholdDeltaRisingEventOwnerLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdDeltaRisingEvent(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdDeltaRisingEvent entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdDeltaRisingEvent not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdDeltaRisingEvent;
+ tmplen = StorageTmp->mteTriggerThresholdDeltaRisingEventLen;
+ memdup((u_char **) & StorageTmp->
+ mteTriggerThresholdDeltaRisingEvent, var_val, var_val_len);
+ StorageTmp->mteTriggerThresholdDeltaRisingEventLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerThresholdDeltaRisingEvent);
+ StorageTmp->mteTriggerThresholdDeltaRisingEvent = tmpvar;
+ StorageTmp->mteTriggerThresholdDeltaRisingEventLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdDeltaFallingEventOwner(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name,
+ size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdDeltaFallingEventOwner entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdDeltaFallingEventOwner not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdDeltaFallingEventOwner;
+ tmplen = StorageTmp->mteTriggerThresholdDeltaFallingEventOwnerLen;
+ memdup((u_char **) & StorageTmp->
+ mteTriggerThresholdDeltaFallingEventOwner, var_val,
+ var_val_len);
+ StorageTmp->mteTriggerThresholdDeltaFallingEventOwnerLen =
+ var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerThresholdDeltaFallingEventOwner);
+ StorageTmp->mteTriggerThresholdDeltaFallingEventOwner = tmpvar;
+ StorageTmp->mteTriggerThresholdDeltaFallingEventOwnerLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_mteTriggerThresholdDeltaFallingEvent(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ struct mteTriggerTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(mteTriggerThresholdTable_variables_oid) / sizeof(oid) + 3 -
+ 1);
+
+
+ DEBUGMSGTL(("mteTriggerThresholdTable",
+ "write_mteTriggerThresholdDeltaFallingEvent entering action=%d... \n",
+ action));
+ if ((StorageTmp =
+ header_complex(mteTriggerTableStorage, NULL,
+ &name[sizeof
+ (mteTriggerThresholdTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ fprintf(stderr,
+ "write to mteTriggerThresholdDeltaFallingEvent not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in string for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->mteTriggerThresholdDeltaFallingEvent;
+ tmplen = StorageTmp->mteTriggerThresholdDeltaFallingEventLen;
+ memdup((u_char **) & StorageTmp->
+ mteTriggerThresholdDeltaFallingEvent, var_val, var_val_len);
+ StorageTmp->mteTriggerThresholdDeltaFallingEventLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->mteTriggerThresholdDeltaFallingEvent);
+ StorageTmp->mteTriggerThresholdDeltaFallingEvent = tmpvar;
+ StorageTmp->mteTriggerThresholdDeltaFallingEventLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerThresholdTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerThresholdTable.h
new file mode 100644
index 0000000000..7aa6cecf4a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/mteTriggerThresholdTable.h
@@ -0,0 +1,46 @@
+/*
+ * This file was generated by mib2c and is intended for use as a mib module
+ * for the ucd-snmp snmpd agent.
+ */
+
+
+#ifndef _MIBGROUP_MTETRIGGERTHRESHOLDTABLE_H
+#define _MIBGROUP_MTETRIGGERTHRESHOLDTABLE_H
+
+
+/*
+ * we may use header_complex from the header_complex module
+ */
+
+
+config_require(header_complex)
+
+ /*
+ * enum definitions from the covered mib sections
+ */
+#define MTETRIGGERTHRESHOLDSTARTUP_RISING 1
+#define MTETRIGGERTHRESHOLDSTARTUP_FALLING 2
+#define MTETRIGGERTHRESHOLDSTARTUP_RISINGORFALLING 3
+ /*
+ * function prototypes
+ */
+ void init_mteTriggerThresholdTable(void);
+ FindVarMethod var_mteTriggerThresholdTable;
+
+ WriteMethod write_mteTriggerThresholdStartup;
+ WriteMethod write_mteTriggerThresholdRising;
+ WriteMethod write_mteTriggerThresholdFalling;
+ WriteMethod write_mteTriggerThresholdDeltaRising;
+ WriteMethod write_mteTriggerThresholdDeltaFalling;
+ WriteMethod write_mteTriggerThresholdObjectsOwner;
+ WriteMethod write_mteTriggerThresholdObjects;
+ WriteMethod write_mteTriggerThresholdRisingEventOwner;
+ WriteMethod write_mteTriggerThresholdRisingEvent;
+ WriteMethod write_mteTriggerThresholdFallingEventOwner;
+ WriteMethod write_mteTriggerThresholdFallingEvent;
+ WriteMethod write_mteTriggerThresholdDeltaRisingEventOwner;
+ WriteMethod write_mteTriggerThresholdDeltaRisingEvent;
+ WriteMethod write_mteTriggerThresholdDeltaFallingEventOwner;
+ WriteMethod write_mteTriggerThresholdDeltaFallingEvent;
+
+#endif /* _MIBGROUP_MTETRIGGERTHRESHOLDTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup-mib.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup-mib.h
new file mode 100644
index 0000000000..1c3fb1c582
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup-mib.h
@@ -0,0 +1,20 @@
+/*
+*Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+*
+*All right reserved
+*
+*File Name:nslookup-mib.h
+*File Description:Add DISMAN-NSLOOKUP-MIB.
+*
+*Current Version:1.0
+*Author:ChenJing
+*Date:2004.8.20
+*/
+
+/*
+ * wrapper for the disman name lookup mib code files
+ */
+config_require(disman/nslookup/lookupCtlTable)
+config_require(disman/nslookup/lookupResultsTable)
+config_add_mib(DISMAN-NSLOOKUP-MIB)
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupCtlTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupCtlTable.c
new file mode 100644
index 0000000000..7d21b0496e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupCtlTable.c
@@ -0,0 +1,1554 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:lookupCtlTable.c
+ *File Description:Rows of the lookupCtlTable MIB add , delete and read.Rows of lookupResultsTable
+ * MIB add and delete.
+
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+/*
+ * This should always be included first before anything else
+ */
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+#include <netdb.h>
+#include <netinet/in.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "lookupCtlTable.h"
+#include "lookupResultsTable.h"
+#include "header_complex.h"
+
+/*
+ *For discontinuity checking.
+ */
+
+oid lookupCtlTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 82, 1, 3 };
+
+
+struct variable2 lookupCtlTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+ {COLUMN_LOOKUPCTLTARGETADDRESSTYPE, ASN_INTEGER, RWRITE, var_lookupCtlTable, 2, {1, 3}},
+ {COLUMN_LOOKUPCTLTARGETADDRESS, ASN_OCTET_STR, RWRITE, var_lookupCtlTable, 2, {1, 4}},
+ {COLUMN_LOOKUPCTLOPERSTATUS, ASN_INTEGER, RONLY, var_lookupCtlTable, 2, {1, 5}},
+ {COLUMN_LOOKUPCTLTIME, ASN_UNSIGNED, RONLY, var_lookupCtlTable, 2, {1, 6}},
+ {COLUMN_LOOKUPCTLRC, ASN_INTEGER, RONLY, var_lookupCtlTable, 2, {1, 7}},
+ {COLUMN_LOOKUPCTLROWSTATUS, ASN_INTEGER, RWRITE, var_lookupCtlTable, 2, {1, 8}}
+};
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+
+
+struct header_complex_index *lookupCtlTableStorage = NULL;
+struct header_complex_index *lookupResultsTableStorage = NULL;
+
+void
+init_lookupCtlTable(void)
+{
+ DEBUGMSGTL(("lookupCtlTable", "initializing... "));
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("lookupCtlTable", lookupCtlTable_variables, variable2,
+ lookupCtlTable_variables_oid);
+
+
+ /*
+ * register our config handler(s) to deal with registrations
+ */
+ snmpd_register_config_handler("lookupCtlTable", parse_lookupCtlTable,
+ NULL, NULL);
+
+ /*
+ * we need to be called back later to store our data
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_lookupCtlTable, NULL);
+
+ DEBUGMSGTL(("lookupCtlTable", "done.\n"));
+}
+
+struct lookupTable_data *
+create_lookupTable_data(void)
+{
+ struct lookupTable_data *StorageNew = NULL;
+ StorageNew = SNMP_MALLOC_STRUCT(lookupTable_data);
+ if (StorageNew == NULL) {
+ exit(1);
+ }
+ StorageNew->lookupCtlTargetAddress = strdup("");
+ StorageNew->lookupCtlTargetAddressLen = 0;
+ StorageNew->lookupCtlOperStatus = 2l;
+ StorageNew->lookupCtlTime = 0;
+ StorageNew->storagetype = ST_NONVOLATILE;
+ return StorageNew;
+}
+
+/*
+ * lookupCtlTable_add(): adds a structure node to our data set
+ */
+int
+lookupCtlTable_add(struct lookupTable_data *thedata)
+{
+ netsnmp_variable_list *vars = NULL;
+
+
+ DEBUGMSGTL(("lookupCtlTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->lookupCtlOwnerIndex, thedata->lookupCtlOwnerIndexLen); /* lookupCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->lookupCtlOperationName, thedata->lookupCtlOperationNameLen); /* lookupCtlOperationName */
+
+
+ if (header_complex_add_data(&lookupCtlTableStorage, vars, thedata) ==
+ NULL) {
+ return SNMPERR_GENERR;
+ }
+ DEBUGMSGTL(("lookupCtlTable", "registered an entry\n"));
+ vars = NULL;
+
+ DEBUGMSGTL(("lookupCtlTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+int
+lookupResultsTable_add(struct lookupTable_data *thedata)
+{
+ netsnmp_variable_list *vars_list = NULL;
+ struct lookupResultsTable_data *p = NULL;
+ p = thedata->ResultsTable;
+ if (thedata->ResultsTable != NULL)
+ do {
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) p->lookupCtlOwnerIndex, p->lookupCtlOwnerIndexLen); /* lookupCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) p->lookupCtlOperationName, p->lookupCtlOperationNameLen); /* lookupCtlOperationName */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &p->lookupResultsIndex, sizeof(p->lookupResultsIndex)); /* lookupResultsIndex */
+
+
+ DEBUGMSGTL(("lookupResultsTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ if (header_complex_add_data
+ (&lookupResultsTableStorage, vars_list, p) == NULL) {
+ return SNMPERR_GENERR;
+ }
+
+ DEBUGMSGTL(("lookupResultsTable", "out finished\n"));
+ vars_list = NULL;
+ p = p->next;
+ } while (p != NULL);
+
+
+ DEBUGMSGTL(("lookupResultsTable", "done.\n"));
+}
+
+void
+lookupCtlTable_cleaner(struct header_complex_index *thestuff)
+{
+ struct header_complex_index *hciptr = NULL;
+ struct lookupTable_data *StorageDel = NULL;
+ DEBUGMSGTL(("lookupCtlTable", "cleanerout "));
+ for (hciptr = thestuff; hciptr != NULL; hciptr = hciptr->next) {
+ StorageDel =
+ header_complex_extract_entry(&lookupCtlTableStorage, hciptr);
+ if (StorageDel != NULL) {
+ free(StorageDel->lookupCtlOwnerIndex);
+ StorageDel->lookupCtlOwnerIndex = NULL;
+ free(StorageDel->lookupCtlOperationName);
+ StorageDel->lookupCtlOperationName = NULL;
+ free(StorageDel->lookupCtlTargetAddress);
+ StorageDel->lookupCtlTargetAddress = NULL;
+ free(StorageDel);
+ StorageDel = NULL;
+
+ }
+ DEBUGMSGTL(("lookupCtlTable", "cleaner "));
+ }
+}
+
+/*
+ * parse_lookupCtlTable():
+ * parses .conf file entries needed to configure the mib.
+ */
+void
+parse_lookupCtlTable(const char *token, char *line)
+{
+ size_t tmpint;
+ struct lookupTable_data *StorageTmp =
+ SNMP_MALLOC_STRUCT(lookupTable_data);
+
+ DEBUGMSGTL(("lookupCtlTable", "parsing config... "));
+
+
+ if (StorageTmp == NULL) {
+ config_perror("malloc failure");
+ return;
+ }
+
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->lookupCtlOwnerIndex,
+ &StorageTmp->lookupCtlOwnerIndexLen);
+ if (StorageTmp->lookupCtlOwnerIndex == NULL) {
+ config_perror("invalid specification for lookupCtlOwnerIndex");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->lookupCtlOperationName,
+ &StorageTmp->lookupCtlOperationNameLen);
+ if (StorageTmp->lookupCtlOperationName == NULL) {
+ config_perror("invalid specification for lookupCtlOperationName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->lookupCtlTargetAddressType,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->lookupCtlTargetAddress,
+ &StorageTmp->lookupCtlTargetAddressLen);
+ if (StorageTmp->lookupCtlTargetAddress == NULL) {
+ config_perror("invalid specification for lookupCtlTargetAddress");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->lookupCtlOperStatus, &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->lookupCtlTime, &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->lookupCtlRc, &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->lookupCtlRowStatus, &tmpint);
+
+
+ StorageTmp->storagetype = ST_NONVOLATILE;
+ lookupCtlTable_add(StorageTmp);
+ /* lookupCtlTable_cleaner(lookupCtlTableStorage); */
+
+ DEBUGMSGTL(("lookupCtlTable", "done.\n"));
+}
+
+
+
+/*
+ * store_lookupCtlTable():
+ * stores .conf file entries needed to configure the mib.
+ */
+int
+store_lookupCtlTable(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr;
+ size_t tmpint;
+ struct lookupTable_data *StorageTmp;
+ struct header_complex_index *hcindex;
+
+
+ DEBUGMSGTL(("lookupCtlTable", "storing data... "));
+
+
+ for (hcindex = lookupCtlTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp = (struct lookupTable_data *) hcindex->data;
+
+ if (StorageTmp->storagetype != ST_READONLY) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "lookupCtlTable ");
+ cptr = line + strlen(line);
+
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->lookupCtlOwnerIndex,
+ &StorageTmp->
+ lookupCtlOwnerIndexLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->lookupCtlOperationName,
+ &StorageTmp->
+ lookupCtlOperationNameLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ lookupCtlTargetAddressType,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->lookupCtlTargetAddress,
+ &StorageTmp->
+ lookupCtlTargetAddressLen);
+
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->lookupCtlOperStatus,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->lookupCtlTime,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->lookupCtlRc, &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->lookupCtlRowStatus,
+ &tmpint);
+
+
+
+ snmpd_store_config(line);
+ }
+ }
+ DEBUGMSGTL(("lookupCtlTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+
+
+/*
+ * var_lookupCtlTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_mteObjectsTable above.
+ */
+unsigned char *
+var_lookupCtlTable(struct variable *vp,
+ oid * name,
+ size_t *length,
+ int exact, size_t *var_len, WriteMethod ** write_method)
+{
+
+
+ struct lookupTable_data *StorageTmp = NULL;
+
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(lookupCtlTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL) {
+ if (vp->magic == COLUMN_LOOKUPCTLROWSTATUS)
+ *write_method = write_lookupCtlRowStatus;
+ return NULL;
+ }
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+
+
+ case COLUMN_LOOKUPCTLTARGETADDRESSTYPE:
+ *write_method = write_lookupCtlTargetAddressType;
+ *var_len = sizeof(StorageTmp->lookupCtlTargetAddressType);
+ return (u_char *) & StorageTmp->lookupCtlTargetAddressType;
+
+ case COLUMN_LOOKUPCTLTARGETADDRESS:
+ *write_method = write_lookupCtlTargetAddress;
+ *var_len = (StorageTmp->lookupCtlTargetAddressLen);
+
+ return (u_char *) StorageTmp->lookupCtlTargetAddress;
+
+ case COLUMN_LOOKUPCTLOPERSTATUS:
+ *var_len = sizeof(StorageTmp->lookupCtlOperStatus);
+
+ return (u_char *) & StorageTmp->lookupCtlOperStatus;
+
+ case COLUMN_LOOKUPCTLTIME:
+ *var_len = sizeof(StorageTmp->lookupCtlTime);
+
+ return (u_char *) & StorageTmp->lookupCtlTime;
+
+ case COLUMN_LOOKUPCTLRC:
+ *var_len = sizeof(StorageTmp->lookupCtlRc);
+
+ return (u_char *) & StorageTmp->lookupCtlRc;
+
+ case COLUMN_LOOKUPCTLROWSTATUS:
+ *write_method = write_lookupCtlRowStatus;
+ *var_len = sizeof(StorageTmp->lookupCtlRowStatus);
+
+ return (u_char *) & StorageTmp->lookupCtlRowStatus;
+
+ default:
+ ERROR_MSG("");
+ }
+ return NULL;
+}
+
+
+void
+run_lookup(struct lookupTable_data *item)
+{
+
+ long addressType;
+ char *address = NULL;
+ size_t addresslen;
+ struct lookupResultsTable_data *head = NULL;
+ struct lookupResultsTable_data *current = NULL;
+ struct lookupResultsTable_data *temp = NULL;
+ int i = 0, n = 1, t = 0;
+
+ /* for ipv4,ipv6 */
+ unsigned int addr_in, addr_in6;
+ struct hostent *lookup = NULL;
+ struct sockaddr_in *addr = NULL;
+
+ struct timeval tpstart, tpend;
+ unsigned long timeuse, timeuse4, timeuse6;
+
+ /* for dns */
+
+ struct in_addr a;
+ struct in6_addr a6;
+ char *strptr = NULL;
+ struct addrinfo hints, *res = NULL, *tempinfo = NULL;
+ struct sockaddr_in6 myaddress6;
+ char buf[BUFSIZ];
+
+
+ if (item == NULL)
+ return;
+
+ addressType = (long) item->lookupCtlTargetAddressType;
+ addresslen = (size_t) item->lookupCtlTargetAddressLen;
+ address = (char *) malloc(addresslen + 1);
+ memcpy(address, item->lookupCtlTargetAddress, addresslen + 1);
+ address[addresslen] = '\0';
+
+ if (addressType == 1) {
+ addr_in = inet_addr(address);
+ if (addr_in == 0xffffffff
+ && strcmp(address, "255.255.255.255") != 0) {
+ DEBUGMSGTL(("lookupResultsTable", "Invalid argument: %s\n",
+ address));
+ return;
+ }
+
+ gettimeofday(&tpstart, NULL);
+ lookup = gethostbyaddr((char *) &addr_in, 4, AF_INET);
+ gettimeofday(&tpend, NULL);
+ timeuse = 1000000 * (tpend.tv_sec - tpstart.tv_sec) +
+ tpend.tv_usec - tpstart.tv_usec;
+ timeuse /= 1000;
+ modify_lookupCtlTime(item, timeuse);
+ modify_lookupCtlOperStatus(item, 3l);
+
+ if (lookup == NULL) {
+ DEBUGMSGTL(("lookupCtlTable",
+ "Can't get a network host entry for ipv4 address: %s\n",
+ address));
+ modify_lookupCtlRc(item, 1l);
+ return;
+ } else {
+ modify_lookupCtlRc(item, 0l);
+ if (lookup->h_name != NULL) {
+ current = temp =
+ SNMP_MALLOC_STRUCT(lookupResultsTable_data);
+ if (temp == NULL) {
+ exit(1);
+ }
+ temp->lookupResultsIndex = n;
+
+ temp->lookupCtlOwnerIndex =
+ (char *) malloc(item->lookupCtlOwnerIndexLen + 1);
+ if (temp->lookupCtlOwnerIndex == NULL) {
+ exit(1);
+ }
+ memcpy(temp->lookupCtlOwnerIndex,
+ item->lookupCtlOwnerIndex,
+ item->lookupCtlOwnerIndexLen + 1);
+ temp->lookupCtlOwnerIndex[item->lookupCtlOwnerIndexLen] =
+ '\0';
+ temp->lookupCtlOwnerIndexLen =
+ item->lookupCtlOwnerIndexLen;
+
+ temp->lookupCtlOperationName =
+ (char *) malloc(item->lookupCtlOperationNameLen + 1);
+ if (temp->lookupCtlOperationName == NULL) {
+ exit(1);
+ }
+ memcpy(temp->lookupCtlOperationName,
+ item->lookupCtlOperationName,
+ item->lookupCtlOperationNameLen + 1);
+ temp->lookupCtlOperationName[item->
+ lookupCtlOperationNameLen] =
+ '\0';
+ temp->lookupCtlOperationNameLen =
+ item->lookupCtlOperationNameLen;
+
+ temp->lookupResultsAddressType = 16;
+ temp->lookupResultsAddress =
+ (char *) malloc(strlen(lookup->h_name) + 1);
+ memcpy(temp->lookupResultsAddress, lookup->h_name,
+ strlen(lookup->h_name) + 1);
+ temp->lookupResultsAddress[strlen(lookup->h_name)] = '\0';
+ temp->lookupResultsAddressLen = strlen(lookup->h_name);
+ item->ResultsTable = temp;
+ n = n + 1;
+
+ }
+
+ i = 0;
+ while (lookup->h_aliases[i]) {
+ temp = SNMP_MALLOC_STRUCT(lookupResultsTable_data);
+ if (temp == NULL) {
+ exit(1);
+ }
+ temp->lookupCtlOwnerIndex =
+ (char *) malloc(item->lookupCtlOwnerIndexLen + 1);
+ if (temp->lookupCtlOwnerIndex == NULL) {
+ exit(1);
+ }
+ memcpy(temp->lookupCtlOwnerIndex,
+ item->lookupCtlOwnerIndex,
+ item->lookupCtlOwnerIndexLen + 1);
+ temp->lookupCtlOwnerIndex[item->lookupCtlOwnerIndexLen] =
+ '\0';
+ temp->lookupCtlOwnerIndexLen =
+ item->lookupCtlOwnerIndexLen;
+
+ temp->lookupCtlOperationName =
+ (char *) malloc(item->lookupCtlOperationNameLen + 1);
+ if (temp->lookupCtlOperationName == NULL) {
+ exit(1);
+ }
+ memcpy(temp->lookupCtlOperationName,
+ item->lookupCtlOperationName,
+ item->lookupCtlOperationNameLen + 1);
+ temp->lookupCtlOperationName[item->
+ lookupCtlOperationNameLen] =
+ '\0';
+ temp->lookupCtlOperationNameLen =
+ item->lookupCtlOperationNameLen;
+
+ temp->lookupResultsIndex = n;
+ temp->lookupResultsAddressType = 16;
+ temp->lookupResultsAddress =
+ (char *) malloc(strlen(lookup->h_aliases[i]) + 1);
+ memcpy(temp->lookupResultsAddress, lookup->h_aliases[i],
+ strlen(lookup->h_aliases[i]) + 1);
+ temp->lookupResultsAddress[strlen(lookup->h_aliases[i])] =
+ '\0';
+ temp->lookupResultsAddressLen =
+ strlen(lookup->h_aliases[i]);
+ current->next = temp;
+ current = temp;
+ i = i + 1;
+ n = n + 1;
+ }
+ current->next = NULL;
+
+ }
+
+
+ if (item->ResultsTable != NULL)
+ if (lookupResultsTable_add(item) != SNMPERR_SUCCESS)
+ DEBUGMSGTL(("lookupResultsTable",
+ "registered an entry error\n"));
+
+ SNMP_FREE(address);
+ address = NULL;
+ return;
+ }
+
+ else if (addressType == 16) {
+
+ gettimeofday(&tpstart, NULL);
+ lookup = gethostbyname(address);
+ gettimeofday(&tpend, NULL);
+ timeuse4 = 1000000 * (tpend.tv_sec - tpstart.tv_sec) +
+ tpend.tv_usec - tpstart.tv_usec;
+ timeuse4 /= 1000;
+ if (lookup == NULL) {
+ DEBUGMSGTL(("lookupCtlTable",
+ "Can't get a network host entry for %s\n",
+ address));
+ } else {
+ while (*lookup->h_addr_list) {
+ bcopy(*lookup->h_addr_list++, (char *) &a, sizeof(a));
+
+ temp = SNMP_MALLOC_STRUCT(lookupResultsTable_data);
+ if (temp == NULL) {
+ exit(1);
+ }
+ temp->lookupResultsIndex = n;
+
+ temp->lookupCtlOwnerIndex =
+ (char *) malloc(item->lookupCtlOwnerIndexLen + 1);
+ if (temp->lookupCtlOwnerIndex == NULL) {
+ exit(1);
+ }
+ memcpy(temp->lookupCtlOwnerIndex,
+ item->lookupCtlOwnerIndex,
+ item->lookupCtlOwnerIndexLen + 1);
+ temp->lookupCtlOwnerIndex[item->lookupCtlOwnerIndexLen] =
+ '\0';
+ temp->lookupCtlOwnerIndexLen =
+ item->lookupCtlOwnerIndexLen;
+
+ temp->lookupCtlOperationName =
+ (char *) malloc(item->lookupCtlOperationNameLen + 1);
+ if (temp->lookupCtlOperationName == NULL) {
+ exit(1);
+ }
+
+ memcpy(temp->lookupCtlOperationName,
+ item->lookupCtlOperationName,
+ item->lookupCtlOperationNameLen + 1);
+ temp->lookupCtlOperationName[item->
+ lookupCtlOperationNameLen] =
+ '\0';
+ temp->lookupCtlOperationNameLen =
+ item->lookupCtlOperationNameLen;
+
+ temp->lookupResultsAddressType = 1;
+ temp->lookupResultsAddress =
+ (char *) malloc(strlen(inet_ntoa(a)) + 1);
+ if (temp->lookupResultsAddress == NULL) {
+ exit(1);
+ }
+ memcpy(temp->lookupResultsAddress, inet_ntoa(a),
+ strlen(inet_ntoa(a)) + 1);
+ temp->lookupResultsAddress[strlen(inet_ntoa(a))] = '\0';
+ temp->lookupResultsAddressLen = strlen(inet_ntoa(a));
+ if (n == 1)
+ item->ResultsTable = temp;
+ else
+ current->next = temp;
+ current = temp;
+ n = n + 1;
+
+ }
+ current->next = NULL;
+ t = n;
+
+ }
+
+ struct hostent *hp;
+ char pa[64];
+ char *hostname = NULL;
+
+ gettimeofday(&tpstart, NULL);
+ hp = gethostbyname2(address, AF_INET6);
+ gettimeofday(&tpend, NULL);
+ timeuse6 = 1000000 * (tpend.tv_sec - tpstart.tv_sec) +
+ tpend.tv_usec - tpstart.tv_usec;
+ timeuse6 /= 1000;
+
+ if (hp == NULL) {
+ DEBUGMSGTL(("lookupCtlTable",
+ "Can't get a ipv6 network host entry for %s\n",
+ address));
+ } else {
+ while (*hp->h_addr_list) {
+ memmove((caddr_t) & a6, *hp->h_addr_list++, 16);
+ hostname = (char *) hp->h_name;
+
+ temp = SNMP_MALLOC_STRUCT(lookupResultsTable_data);
+ if (temp == NULL) {
+ exit(1);
+ }
+ temp->lookupResultsIndex = n;
+
+ temp->lookupCtlOwnerIndex =
+ (char *) malloc(item->lookupCtlOwnerIndexLen + 1);
+ if (temp->lookupCtlOwnerIndex == NULL) {
+ exit(1);
+ }
+ memcpy(temp->lookupCtlOwnerIndex,
+ item->lookupCtlOwnerIndex,
+ item->lookupCtlOwnerIndexLen + 1);
+ temp->lookupCtlOwnerIndex[item->lookupCtlOwnerIndexLen] =
+ '\0';
+ temp->lookupCtlOwnerIndexLen =
+ item->lookupCtlOwnerIndexLen;
+
+ temp->lookupCtlOperationName =
+ (char *) malloc(item->lookupCtlOperationNameLen + 1);
+ if (temp->lookupCtlOperationName == NULL) {
+ exit(1);
+ }
+ memcpy(temp->lookupCtlOperationName,
+ item->lookupCtlOperationName,
+ item->lookupCtlOperationNameLen + 1);
+ temp->lookupCtlOperationName[item->
+ lookupCtlOperationNameLen] =
+ '\0';
+ temp->lookupCtlOperationNameLen =
+ item->lookupCtlOperationNameLen;
+
+ temp->lookupResultsAddressType = 2;
+ temp->lookupResultsAddress =
+ (char *)
+ malloc(strlen(inet_ntop(AF_INET6, &a6, pa, 64)) + 1);
+ memcpy(temp->lookupResultsAddress,
+ inet_ntop(AF_INET6, &a6, pa, 64),
+ strlen(inet_ntop(AF_INET6, &a6, pa, 64)) + 1);
+ temp->
+ lookupResultsAddress[strlen
+ (inet_ntop
+ (AF_INET6, &a6, pa, 64))] = '\0';
+ temp->lookupResultsAddressLen =
+ strlen(inet_ntop(AF_INET6, &a6, pa, 64));
+ if (n == 1)
+ item->ResultsTable = temp;
+ else
+ current->next = temp;
+ current = temp;
+ n = n + 1;
+
+ }
+ current->next = NULL;
+ }
+ timeuse = timeuse4 + timeuse6;
+ modify_lookupCtlTime(item, timeuse);
+ modify_lookupCtlOperStatus(item, 3l);
+
+ if (item->ResultsTable != NULL) {
+
+ modify_lookupCtlRc(item, 0l);
+ if (lookupResultsTable_add(item) != SNMPERR_SUCCESS)
+ DEBUGMSGTL(("lookupResultsTable",
+ "registered an entry error\n"));
+ } else {
+ modify_lookupCtlRc(item, 1l);
+ }
+ SNMP_FREE(address);
+ address = NULL;
+
+ return;
+
+ }
+
+
+ else if (addressType == 2) {
+ if (inet_pton(AF_INET6, address, &addr_in6) == 1)
+ DEBUGMSGTL(("lookupCtlTable", "success! \n"));
+ else
+ DEBUGMSGTL(("lookupCtlTable", "error! \n"));
+
+
+ gettimeofday(&tpstart, NULL);
+ lookup = gethostbyaddr((char *) &addr_in6, 16, AF_INET6);
+ gettimeofday(&tpend, NULL);
+ timeuse = 1000000 * (tpend.tv_sec - tpstart.tv_sec) +
+ tpend.tv_usec - tpstart.tv_usec;
+ timeuse /= 1000;
+ modify_lookupCtlTime(item, timeuse);
+ modify_lookupCtlOperStatus(item, 3l);
+
+ if (lookup == NULL) {
+ DEBUGMSGTL(("lookupCtlTable",
+ "Can't get a network host entry for %s\n",
+ address));
+ modify_lookupCtlRc(item, 1l);
+ return;
+ } else {
+ modify_lookupCtlRc(item, 0l);
+ if (lookup->h_name != NULL) {
+ current = temp =
+ SNMP_MALLOC_STRUCT(lookupResultsTable_data);
+ if (temp == NULL) {
+ exit(1);
+ }
+ temp->lookupResultsIndex = n;
+
+ temp->lookupCtlOwnerIndex =
+ (char *) malloc(item->lookupCtlOwnerIndexLen + 1);
+ if (temp->lookupCtlOwnerIndex == NULL) {
+ exit(1);
+ }
+ memcpy(temp->lookupCtlOwnerIndex,
+ item->lookupCtlOwnerIndex,
+ item->lookupCtlOwnerIndexLen + 1);
+ temp->lookupCtlOwnerIndex[item->lookupCtlOwnerIndexLen] =
+ '\0';
+ temp->lookupCtlOwnerIndexLen =
+ item->lookupCtlOwnerIndexLen;
+
+ temp->lookupCtlOperationName =
+ (char *) malloc(item->lookupCtlOperationNameLen + 1);
+ if (temp->lookupCtlOperationName == NULL) {
+ exit(1);
+ }
+ memcpy(temp->lookupCtlOperationName,
+ item->lookupCtlOperationName,
+ item->lookupCtlOperationNameLen + 1);
+ temp->lookupCtlOperationName[item->
+ lookupCtlOperationNameLen] =
+ '\0';
+ temp->lookupCtlOperationNameLen =
+ item->lookupCtlOperationNameLen;
+
+ temp->lookupResultsAddressType = 16;
+ temp->lookupResultsAddress =
+ (char *) malloc(strlen(lookup->h_name) + 1);
+ memcpy(temp->lookupResultsAddress, lookup->h_name,
+ strlen(lookup->h_name) + 1);
+ temp->lookupResultsAddress[strlen(lookup->h_name)] = '\0';
+ temp->lookupResultsAddressLen = strlen(lookup->h_name);
+ item->ResultsTable = temp;
+ n = n + 1;
+
+ }
+
+ i = 0;
+ while (lookup->h_aliases[i]) {
+ temp = SNMP_MALLOC_STRUCT(lookupResultsTable_data);
+ if (temp == NULL) {
+ exit(1);
+ }
+ temp->lookupCtlOwnerIndex =
+ (char *) malloc(item->lookupCtlOwnerIndexLen + 1);
+ if (temp->lookupCtlOwnerIndex == NULL) {
+ exit(1);
+ }
+ memcpy(temp->lookupCtlOwnerIndex,
+ item->lookupCtlOwnerIndex,
+ item->lookupCtlOwnerIndexLen + 1);
+ temp->lookupCtlOwnerIndex[item->lookupCtlOwnerIndexLen] =
+ '\0';
+ temp->lookupCtlOwnerIndexLen =
+ item->lookupCtlOwnerIndexLen;
+
+ temp->lookupCtlOperationName =
+ (char *) malloc(item->lookupCtlOperationNameLen + 1);
+ if (temp->lookupCtlOperationName == NULL) {
+ exit(1);
+ }
+ memcpy(temp->lookupCtlOperationName,
+ item->lookupCtlOperationName,
+ item->lookupCtlOperationNameLen + 1);
+ temp->lookupCtlOperationName[item->
+ lookupCtlOperationNameLen] =
+ '\0';
+ temp->lookupCtlOperationNameLen =
+ item->lookupCtlOperationNameLen;
+
+ temp->lookupResultsIndex = n;
+ temp->lookupResultsAddressType = 16;
+ temp->lookupResultsAddress =
+ (char *) malloc(strlen(lookup->h_aliases[i]) + 1);
+ if (temp->lookupResultsAddress == NULL) {
+ exit(1);
+ }
+ memcpy(temp->lookupResultsAddress, lookup->h_aliases[i],
+ strlen(lookup->h_aliases[i]) + 1);
+ temp->lookupResultsAddress[strlen(lookup->h_aliases[i])] =
+ '\0';
+ temp->lookupResultsAddressLen =
+ strlen(lookup->h_aliases[i]);
+ current->next = temp;
+ current = temp;
+ i = i + 1;
+ n = n + 1;
+
+ }
+
+ if (item->ResultsTable != NULL)
+ current->next = NULL;
+ else
+ current = NULL;
+
+ }
+
+
+ if (item->ResultsTable != NULL)
+ if (lookupResultsTable_add(item) != SNMPERR_SUCCESS)
+ DEBUGMSGTL(("lookupResultsTable",
+ "registered an entry error\n"));
+ SNMP_FREE(address);
+ address = NULL;
+ return;
+ } else {
+ SNMP_FREE(address);
+ address = NULL;
+ return;
+ }
+}
+
+
+int
+modify_lookupCtlOperStatus(struct lookupTable_data *thedata, long val)
+{
+ netsnmp_variable_list *vars = NULL;
+ struct lookupTable_data *StorageTmp = NULL;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->lookupCtlOwnerIndex, thedata->lookupCtlOwnerIndexLen); /* lookupCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->lookupCtlOperationName, thedata->lookupCtlOperationNameLen); /* lookupCtlOperationName */
+
+
+ if ((StorageTmp =
+ header_complex_get(lookupCtlTableStorage, vars)) == NULL) {
+ snmp_free_varbind(vars);
+ vars = NULL;
+ return SNMP_ERR_NOSUCHNAME;
+ }
+ StorageTmp->lookupCtlOperStatus = val;
+
+ snmp_free_varbind(vars);
+ vars = NULL;
+
+ DEBUGMSGTL(("lookupOperStatus", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+int
+modify_lookupCtlTime(struct lookupTable_data *thedata, unsigned long val)
+{
+ netsnmp_variable_list *vars = NULL;
+ struct lookupTable_data *StorageTmp = NULL;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->lookupCtlOwnerIndex, thedata->lookupCtlOwnerIndexLen); /* lookupCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->lookupCtlOperationName, thedata->lookupCtlOperationNameLen); /* lookupCtlOperationName */
+
+
+ if ((StorageTmp =
+ header_complex_get(lookupCtlTableStorage, vars)) == NULL) {
+ snmp_free_varbind(vars);
+ vars = NULL;
+ return SNMP_ERR_NOSUCHNAME;
+ }
+ StorageTmp->lookupCtlTime = val;
+
+ snmp_free_varbind(vars);
+ vars = NULL;
+
+ DEBUGMSGTL(("lookupCtlTime", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+int
+modify_lookupCtlRc(struct lookupTable_data *thedata, long val)
+{
+ netsnmp_variable_list *vars = NULL;
+ struct lookupTable_data *StorageTmp = NULL;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->lookupCtlOwnerIndex, thedata->lookupCtlOwnerIndexLen); /* lookupCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->lookupCtlOperationName, thedata->lookupCtlOperationNameLen); /* lookupCtlOperationName */
+
+
+ if ((StorageTmp =
+ header_complex_get(lookupCtlTableStorage, vars)) == NULL) {
+ snmp_free_varbind(vars);
+ vars = NULL;
+ return SNMP_ERR_NOSUCHNAME;
+ }
+ StorageTmp->lookupCtlRc = val;
+
+ snmp_free_varbind(vars);
+ vars = NULL;
+ DEBUGMSGTL(("lookupOperStatus", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+int
+lookupResultsTable_del(struct lookupTable_data *thedata)
+{
+ struct header_complex_index *hciptr2 = NULL;
+ struct lookupResultsTable_data *StorageDel = NULL;
+ netsnmp_variable_list *vars = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->lookupCtlOwnerIndex, thedata->lookupCtlOwnerIndexLen); /* lookupCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->lookupCtlOperationName, thedata->lookupCtlOperationNameLen); /* lookupCtlOperationName */
+ bzero(newoid, MAX_OID_LEN * sizeof(oid));
+ header_complex_generate_oid(newoid, &newoid_len, NULL, 0, vars);
+
+
+ snmp_free_varbind(vars);
+ vars = NULL;
+ for (hciptr2 = lookupResultsTableStorage; hciptr2 != NULL;
+ hciptr2 = hciptr2->next) {
+ if (snmp_oid_compare(newoid, newoid_len, hciptr2->name, newoid_len)
+ == 0) {
+ StorageDel =
+ header_complex_extract_entry(&lookupResultsTableStorage,
+ hciptr2);
+ if (StorageDel != NULL) {
+ SNMP_FREE(StorageDel->lookupCtlOwnerIndex);
+ SNMP_FREE(StorageDel->lookupCtlOperationName);
+ SNMP_FREE(StorageDel->lookupResultsAddress);
+ SNMP_FREE(StorageDel);
+ }
+ DEBUGMSGTL(("lookupResultsTable", "delete success!\n"));
+
+ }
+ }
+ return SNMPERR_SUCCESS;
+}
+
+
+int
+write_lookupCtlTargetAddressType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static size_t tmpvar;
+ struct lookupTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(lookupCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(lookupCtlTableStorage, NULL,
+ &name[sizeof(lookupCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storagetype == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->lookupCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to lookupCtlTargetAddressType not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->lookupCtlTargetAddressType;
+ StorageTmp->lookupCtlTargetAddressType = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->lookupCtlTargetAddressType = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_lookupCtlTargetAddress(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar = NULL;
+ static size_t tmplen;
+ struct lookupTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(lookupCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+ if ((StorageTmp =
+ header_complex(lookupCtlTableStorage, NULL,
+ &name[sizeof(lookupCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storagetype == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->lookupCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to lookupCtlTargetAddress not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->lookupCtlTargetAddress;
+ tmplen = StorageTmp->lookupCtlTargetAddressLen;
+
+ if ((StorageTmp->lookupCtlTargetAddress =
+ (char *) malloc(var_val_len + 1)) == NULL) {
+ exit(1);
+ }
+ memcpy(StorageTmp->lookupCtlTargetAddress, var_val, var_val_len);
+ StorageTmp->lookupCtlTargetAddress[var_val_len] = '\0';
+ StorageTmp->lookupCtlTargetAddressLen = var_val_len;
+
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ free(StorageTmp->lookupCtlTargetAddress);
+ StorageTmp->lookupCtlTargetAddress = NULL;
+ StorageTmp->lookupCtlTargetAddress = tmpvar;
+ StorageTmp->lookupCtlTargetAddressLen = tmplen;
+
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ free(tmpvar);
+ tmpvar = NULL;
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+
+
+int
+write_lookupCtlRowStatus(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ struct lookupTable_data *StorageTmp = NULL;
+ static struct lookupTable_data *StorageNew, *StorageDel = NULL;
+ size_t newlen =
+ name_len - (sizeof(lookupCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+ static int old_value;
+ int set_value;
+ static netsnmp_variable_list *vars, *vp;
+ struct header_complex_index *hciptr = NULL;
+
+ StorageTmp =
+ header_complex(lookupCtlTableStorage, NULL,
+ &name[sizeof(lookupCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL, NULL);
+
+ if (var_val_type != ASN_INTEGER || var_val == NULL) {
+ snmp_log(LOG_ERR, "write to lookupCtlRowStatus not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp && StorageTmp->storagetype == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ set_value = *((long *) var_val);
+
+
+ /*
+ * check legal range, and notReady is reserved for us, not a user
+ */
+ if (set_value < 1 || set_value > 6 || set_value == RS_NOTREADY)
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+
+ switch (action) {
+ case RESERVE1:
+ /*
+ * stage one: test validity
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * create the row now?
+ */
+
+
+ /*
+ * ditch illegal values now
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE) {
+
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+
+ /*
+ * destroying a non-existent row is actually legal
+ */
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+
+
+ /*
+ * illegal creation values
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE) {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ } else {
+ /*
+ * row exists. Check for a valid state change
+ */
+ if (set_value == RS_CREATEANDGO
+ || set_value == RS_CREATEANDWAIT) {
+ /*
+ * can't create a row that exists
+ */
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+
+ /*
+ * XXX: interaction with row storage type needed
+ */
+
+ if (StorageTmp->lookupCtlRowStatus == RS_ACTIVE &&
+ set_value != RS_DESTROY) {
+ /*
+ * "Once made active an entry may not be modified except to
+ * delete it." XXX: doesn't this in fact apply to ALL
+ * columns of the table and not just this one?
+ */
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ if (StorageTmp->storagetype != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+
+
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * creation
+ */
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+ vars = NULL;
+
+ /*
+ * ½«nameΪ¿ÕµÄÈý¸öË÷Òý×ֶμӵ½var±äÁ¿ÁбíµÄĩβ
+ */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0); /* lookupCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0); /* lookupCtlOperationName */
+
+ if (header_complex_parse_oid
+ (&
+ (name
+ [sizeof(lookupCtlTable_variables_oid) / sizeof(oid) +
+ 2]), newlen, vars) != SNMPERR_SUCCESS) {
+ /*
+ * XXX: free, zero vars
+ */
+ snmp_free_varbind(vars);
+ vars = NULL;
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+ vp = vars;
+ StorageNew = create_lookupTable_data();
+ StorageNew->lookupCtlOwnerIndex = malloc(vp->val_len + 1);
+ memcpy(StorageNew->lookupCtlOwnerIndex, vp->val.string,
+ vp->val_len);
+ StorageNew->lookupCtlOwnerIndex[vp->val_len] = '\0';
+ StorageNew->lookupCtlOwnerIndexLen = vp->val_len;
+ vp = vp->next_variable;
+
+ StorageNew->lookupCtlOperationName = malloc(vp->val_len + 1);
+ memcpy(StorageNew->lookupCtlOperationName, vp->val.string,
+ vp->val_len);
+ StorageNew->lookupCtlOperationName[vp->val_len] = '\0';
+ StorageNew->lookupCtlOperationNameLen = vp->val_len;
+ vp = vp->next_variable;
+
+ /*
+ * XXX: fill in default row values here into StorageNew
+ */
+
+ StorageNew->lookupCtlTargetAddressType = 1; /* ipv4 */
+
+ StorageNew->lookupCtlRowStatus = set_value;
+
+ snmp_free_varbind(vars);
+ vars = NULL;
+
+ /*
+ * XXX: free, zero vars, no longer needed?
+ */
+ }
+
+
+ break;
+
+
+
+
+ case FREE:
+ /*
+ * XXX: free, zero vars
+ */
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in set_value for you to
+ * use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in
+ * the UNDO case
+ */
+
+
+ if (StorageTmp == NULL) {
+ /*
+ * row creation, so add it
+ */
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+ if (StorageNew != NULL)
+#if 1
+ DEBUGMSGTL(("lookupCtlTable",
+ "write_lookupCtlRowStatus entering new=%d... \n",
+ action));
+#endif
+ lookupCtlTable_add(StorageNew);
+ /*
+ * XXX: ack, and if it is NULL?
+ */
+ } else if (set_value != RS_DESTROY) {
+ /*
+ * set the flag?
+ */
+ old_value = StorageTmp->lookupCtlRowStatus;
+ StorageTmp->lookupCtlRowStatus = *((long *) var_val);
+ } else {
+ /*
+ * destroy... extract it for now
+ */
+ DEBUGMSGTL(("lookupCtlTable",
+ "write_lookupCtlTable_delete 1 \n"));
+ hciptr =
+ header_complex_find_entry(lookupCtlTableStorage,
+ StorageTmp);
+
+ StorageDel =
+ header_complex_extract_entry(&lookupCtlTableStorage,
+ hciptr);
+ lookupResultsTable_del(StorageTmp);
+
+ DEBUGMSGTL(("lookupCtlTable",
+ "write_lookupCtlTable_delete \n"));
+
+ }
+ break;
+
+
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * row creation, so remove it again
+ */
+ hciptr =
+ header_complex_find_entry(lookupCtlTableStorage,
+ StorageTmp);
+ StorageDel =
+ header_complex_extract_entry(&lookupCtlTableStorage,
+ hciptr);
+
+ lookupResultsTable_del(StorageTmp);
+
+ /*
+ * XXX: free it
+ */
+ } else if (StorageDel != NULL) {
+ /*
+ * row deletion, so add it again
+ */
+ lookupCtlTable_add(StorageDel);
+ lookupResultsTable_add(StorageDel);
+ } else {
+ StorageTmp->lookupCtlRowStatus = old_value;
+ }
+ break;
+
+
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ if (StorageTmp == NULL) {
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+ }
+
+ if (StorageDel != NULL) {
+ SNMP_FREE(StorageDel->lookupCtlOwnerIndex);
+ StorageDel->lookupCtlOwnerIndex = NULL;
+ SNMP_FREE(StorageDel->lookupCtlOperationName);
+ StorageDel->lookupCtlOperationName = NULL;
+ SNMP_FREE(StorageDel->lookupCtlTargetAddress);
+ StorageDel->lookupCtlTargetAddress = NULL;
+ SNMP_FREE(StorageDel);
+ StorageDel = NULL;
+
+ StorageDel = 0;
+ /*
+ * XXX: free it, its dead
+ */
+ } else {
+ if (StorageTmp
+ && StorageTmp->lookupCtlRowStatus == RS_CREATEANDGO) {
+ StorageTmp->lookupCtlRowStatus = RS_ACTIVE;
+ } else if (StorageTmp &&
+ StorageTmp->lookupCtlRowStatus ==
+ RS_CREATEANDWAIT) {
+
+ StorageTmp->lookupCtlRowStatus = RS_NOTINSERVICE;
+ }
+ }
+ if (StorageTmp && StorageTmp->lookupCtlRowStatus == RS_ACTIVE) {
+#if 1
+ DEBUGMSGTL(("lookupCtlTable",
+ "write_lookupCtlRowStatus entering runbefore=%ld... \n",
+ StorageTmp->lookupCtlTargetAddressType));
+
+#endif
+ modify_lookupCtlOperStatus(StorageTmp, 2l);
+ run_lookup((struct lookupTable_data *) StorageTmp);
+
+ }
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupCtlTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupCtlTable.h
new file mode 100644
index 0000000000..f73b0628ce
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupCtlTable.h
@@ -0,0 +1,87 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:lookupCtlTable.h
+ *File Description:The head file of lookupCtlTable.c
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+#ifndef LOOKUPCTLTABLE_H
+#define LOOKUPCTLTABLE_H
+
+/*
+ * we may use header_complex from the header_complex module
+ */
+
+
+config_require(header_complex);
+
+ /*
+ * our storage structure(s)
+ */
+struct lookupTable_data {
+
+
+ char *lookupCtlOwnerIndex; /* string */
+ size_t lookupCtlOwnerIndexLen;
+ char *lookupCtlOperationName; /* string */
+ size_t lookupCtlOperationNameLen;
+ long lookupCtlTargetAddressType; /* integer32 */
+ char *lookupCtlTargetAddress; /* string */
+ size_t lookupCtlTargetAddressLen;
+ long lookupCtlOperStatus; /* integer */
+ unsigned long lookupCtlTime; /* unsigned integer */
+ long lookupCtlRc; /* integer32 */
+ long lookupCtlRowStatus; /* integer */
+ int storagetype;
+
+ struct lookupResultsTable_data *ResultsTable;
+
+
+};
+typedef struct lookupResultsTable_data {
+ struct lookupResultsTable_data *next;
+ char *lookupCtlOwnerIndex; /* string */
+ size_t lookupCtlOwnerIndexLen;
+ char *lookupCtlOperationName; /* string */
+ size_t lookupCtlOperationNameLen;
+ unsigned long lookupResultsIndex;
+ long lookupResultsAddressType;
+ char *lookupResultsAddress;
+ size_t lookupResultsAddressLen;
+ int storagetype;
+} resultsIns;
+
+/*
+ * function declarations
+ */
+void init_lookupCtlTable(void);
+FindVarMethod var_lookupCtlTable;
+void parse_lookupCtlTable(const char *, char *);
+SNMPCallback store_lookupCtlTable;
+
+
+WriteMethod write_lookupCtlTargetAddressType;
+WriteMethod write_lookupCtlTargetAddress;
+WriteMethod write_lookupCtlRowStatus;
+
+WriteMethod write_lookupCtlRowStatus;
+
+/*
+ * column number definitions for table lookupCtlTable
+ */
+#define COLUMN_LOOKUPCTLOWNERINDEX 1
+#define COLUMN_LOOKUPCTLOPERATIONNAME 2
+#define COLUMN_LOOKUPCTLTARGETADDRESSTYPE 3
+#define COLUMN_LOOKUPCTLTARGETADDRESS 4
+#define COLUMN_LOOKUPCTLOPERSTATUS 5
+#define COLUMN_LOOKUPCTLTIME 6
+#define COLUMN_LOOKUPCTLRC 7
+#define COLUMN_LOOKUPCTLROWSTATUS 8
+
+#endif /* LOOKUPMIB_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupResultsTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupResultsTable.c
new file mode 100644
index 0000000000..b011140779
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupResultsTable.c
@@ -0,0 +1,309 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:lookupResultsTable.c
+ *File Description:Rows of the lookupResultsTable MIB read.
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+/*
+ * This should always be included first before anything else
+ */
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+
+
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "lookupCtlTable.h"
+#include "lookupResultsTable.h"
+#include "header_complex.h"
+
+
+oid lookupResultsTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 82, 1, 4 };
+
+struct variable2 lookupResultsTable_variables[] = {
+ {COLUMN_LOOKUPRESULTSADDRESSTYPE, ASN_INTEGER, RONLY, var_lookupResultsTable, 2, {1, 2}},
+ {COLUMN_LOOKUPRESULTSADDRESS, ASN_OCTET_STR, RONLY, var_lookupResultsTable, 2, {1, 3}}
+};
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+
+extern struct header_complex_index *lookupCtlTableStorage;
+extern struct header_complex_index *lookupResultsTableStorage;
+
+void
+lookupResultsTable_cleaner(struct header_complex_index *thestuff)
+{
+ struct header_complex_index *hciptr = NULL;
+ struct lookupResultsTable_data *StorageDel = NULL;
+ DEBUGMSGTL(("lookupResultsTable", "cleanerout "));
+ for (hciptr = thestuff; hciptr != NULL; hciptr = hciptr->next) {
+ StorageDel =
+ header_complex_extract_entry(&lookupResultsTableStorage,
+ hciptr);
+ if (StorageDel != NULL) {
+ SNMP_FREE(StorageDel->lookupCtlOwnerIndex);
+ SNMP_FREE(StorageDel->lookupCtlOperationName);
+ SNMP_FREE(StorageDel->lookupResultsAddress);
+ SNMP_FREE(StorageDel);
+ }
+ DEBUGMSGTL(("lookupResultsTable", "cleaner "));
+ }
+
+}
+void
+init_lookupResultsTable(void)
+{
+
+ DEBUGMSGTL(("lookupResultsTable", "initializing... "));
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("lookupResultsTable", lookupResultsTable_variables,
+ variable2, lookupResultsTable_variables_oid);
+
+
+ /*
+ * register our config handler(s) to deal with registrations
+ */
+ snmpd_register_config_handler("lookupResultsTable",
+ parse_lookupResultsTable, NULL, NULL);
+
+ /*
+ * we need to be called back later to store our data
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_lookupResultsTable, NULL);
+
+ DEBUGMSGTL(("lookupResultsTable", "done.\n"));
+}
+
+/*
+ * parse_mteObjectsTable():
+ * parses .conf file entries needed to configure the mib.
+ */
+
+void
+parse_lookupResultsTable(const char *token, char *line)
+{
+ size_t tmpint;
+ struct lookupResultsTable_data *StorageTmp =
+ SNMP_MALLOC_STRUCT(lookupResultsTable_data);
+
+ DEBUGMSGTL(("lookupResultsTable", "parsing config... "));
+
+
+ if (StorageTmp == NULL) {
+ config_perror("malloc failure");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->lookupCtlOwnerIndex,
+ &StorageTmp->lookupCtlOwnerIndexLen);
+ if (StorageTmp->lookupCtlOwnerIndex == NULL) {
+ config_perror("invalid specification for lookupCtlOwnerIndex");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->lookupCtlOperationName,
+ &StorageTmp->lookupCtlOperationNameLen);
+ if (StorageTmp->lookupCtlOperationName == NULL) {
+ config_perror("invalid specification for lookupCtlOperationName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->lookupResultsIndex, &tmpint);
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->lookupResultsAddressType,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->lookupResultsAddress,
+ &StorageTmp->lookupResultsAddressLen);
+ if (StorageTmp->lookupResultsAddress == NULL) {
+ config_perror("invalid specification for lookupResultsAddress");
+ return;
+ }
+
+
+ lookupResultsTable_inadd(StorageTmp);
+
+ /* lookupResultsTable_cleaner(lookupResultsTableStorage); */
+
+ DEBUGMSGTL(("lookupResultsTable", "done.\n"));
+}
+
+
+
+
+
+/*
+ * store_lookupResultsTable():
+ * stores .conf file entries needed to configure the mib.
+ */
+
+int
+store_lookupResultsTable(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr = NULL;
+ size_t tmpint;
+ struct lookupResultsTable_data *StorageTmp = NULL;
+ struct header_complex_index *hcindex = NULL;
+
+
+ DEBUGMSGTL(("lookupResultsTable", "storing data... "));
+
+
+ for (hcindex = lookupResultsTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp = (struct lookupResultsTable_data *) hcindex->data;
+
+ if (StorageTmp->storagetype != ST_READONLY) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "lookupResultsTable ");
+ cptr = line + strlen(line);
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->lookupCtlOwnerIndex,
+ &StorageTmp->
+ lookupCtlOwnerIndexLen);
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->lookupCtlOperationName,
+ &StorageTmp->
+ lookupCtlOperationNameLen);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->lookupResultsIndex,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ lookupResultsAddressType, &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->lookupResultsAddress,
+ &StorageTmp->
+ lookupResultsAddressLen);
+
+ snmpd_store_config(line);
+ }
+ }
+ DEBUGMSGTL(("lookupResultsTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+int
+lookupResultsTable_inadd(struct lookupResultsTable_data *thedata)
+{
+ netsnmp_variable_list *vars_list = NULL;
+
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->lookupCtlOwnerIndex, thedata->lookupCtlOwnerIndexLen); /* lookupCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->lookupCtlOperationName, thedata->lookupCtlOperationNameLen); /* lookupCtlOperationName */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &thedata->lookupResultsIndex, sizeof(thedata->lookupResultsIndex)); /* lookupResultsIndex */
+
+ /*
+ * XXX: fill in default row values here into StorageNew
+ *
+ */
+
+
+ DEBUGMSGTL(("lookupResultsTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ header_complex_add_data(&lookupResultsTableStorage, vars_list,
+ thedata);
+ DEBUGMSGTL(("lookupResultsTable", "registered an entry\n"));
+
+
+ DEBUGMSGTL(("lookupResultsTable", "done.\n"));
+ vars_list = NULL;
+ return SNMPERR_SUCCESS;
+}
+
+
+/*
+ * var_lookupResultsTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_lookupResultsTable above.
+ */
+unsigned char *
+var_lookupResultsTable(struct variable *vp,
+ oid * name,
+ size_t *length,
+ int exact,
+ size_t *var_len, WriteMethod ** write_method)
+{
+
+
+ struct lookupResultsTable_data *StorageTmp = NULL;
+
+ *write_method = NULL;
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(lookupResultsTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL) {
+ return NULL;
+ }
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+
+ switch (vp->magic) {
+
+ case COLUMN_LOOKUPRESULTSADDRESSTYPE:
+ *var_len = sizeof(StorageTmp->lookupResultsAddressType);
+ return (u_char *) & StorageTmp->lookupResultsAddressType;
+
+ case COLUMN_LOOKUPRESULTSADDRESS:
+ *var_len = (StorageTmp->lookupResultsAddressLen);
+ return (u_char *) StorageTmp->lookupResultsAddress;
+
+ default:
+ ERROR_MSG("");
+ }
+
+ return NULL;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupResultsTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupResultsTable.h
new file mode 100644
index 0000000000..4abfb115ae
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/nslookup/lookupResultsTable.h
@@ -0,0 +1,39 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:lookupResultsTable.h
+ *File Description:The head file of lookupResultsTable.c
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+
+#ifndef LOOKUPRESULTSTABLE_H
+#define LOOKUPRESULTSTABLE_H
+
+/*
+ * we may use header_complex from the header_complex module
+ */
+
+
+config_require(header_complex);
+
+/*
+ * function declarations
+ */
+void init_lookupResultsTable(void);
+FindVarMethod var_lookupResultsTable;
+void parse_lookupResultsTable(const char *, char *);
+SNMPCallback store_lookupResultsTable;
+
+/*
+ * column number definitions for table lookupResultsTable
+ */
+#define COLUMN_LOOKUPRESULTSINDEX 1
+#define COLUMN_LOOKUPRESULTSADDRESSTYPE 2
+#define COLUMN_LOOKUPRESULTSADDRESS 3
+#endif /* LOOKUPMIB_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/old-event-mib.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/old-event-mib.h
new file mode 100644
index 0000000000..71ef1f528d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/old-event-mib.h
@@ -0,0 +1,33 @@
+config_add_mib(DISMAN-EVENT-MIB)
+
+/*
+ * wrapper for the original disman event mib implementation code files
+ */
+config_require(disman/mteTriggerTable)
+config_require(disman/mteTriggerDeltaTable)
+config_require(disman/mteTriggerExistenceTable)
+config_require(disman/mteTriggerBooleanTable)
+config_require(disman/mteTriggerThresholdTable)
+config_require(disman/mteObjectsTable)
+config_require(disman/mteEventTable)
+config_require(disman/mteEventNotificationTable)
+
+/*
+ * conflicts with the new implementation
+ */
+config_exclude(disman/event/mteScalars)
+config_exclude(disman/event/mteTrigger)
+config_exclude(disman/event/mteTriggerTable)
+config_exclude(disman/event/mteTriggerDeltaTable)
+config_exclude(disman/event/mteTriggerExistenceTable)
+config_exclude(disman/event/mteTriggerBooleanTable)
+config_exclude(disman/event/mteTriggerThresholdTable)
+config_exclude(disman/event/mteTriggerConf)
+config_exclude(disman/event/mteEvent)
+config_exclude(disman/event/mteEventTable)
+config_exclude(disman/event/mteEventSetTable)
+config_exclude(disman/event/mteEventNotificationTable)
+config_exclude(disman/event/mteEventConf)
+config_exclude(disman/event/mteObjects)
+config_exclude(disman/event/mteObjectsTable)
+config_exclude(disman/event/mteObjectsConf)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping-mib.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping-mib.h
new file mode 100644
index 0000000000..640b37f9b8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping-mib.h
@@ -0,0 +1,20 @@
+/*
+*Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+*
+*All right reserved
+*
+*File Name:ping-mib.h
+*File Description:Add DISMAN-PING-MIB.
+*
+*Current Version:1.0
+*Author:ChenJing
+*Date:2004.8.20
+*/
+
+/*
+ * wrapper for the disman ping mib code files
+ */
+config_require(disman/ping/pingCtlTable)
+config_require(disman/ping/pingResultsTable)
+config_require(disman/ping/pingProbeHistoryTable)
+config_add_mib(DISMAN-PING-MIB)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingCtlTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingCtlTable.c
new file mode 100644
index 0000000000..b16f03d40f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingCtlTable.c
@@ -0,0 +1,5804 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:pingCtlTable.c
+ *File Description:Rows of the pingCtlTable MIB add , delete and read.Rows of lookupResultsTable
+ * MIB add and delete.Rows of pingProbeHistoryTable MIB add and delete.
+ * The main function is also here.
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+/*
+ * This should always be included first before anything else
+ */
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+#include <netdb.h>
+#include <netinet/in.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "pingCtlTable.h"
+#include "pingResultsTable.h"
+#include "pingProbeHistoryTable.h"
+#include "header_complex.h"
+
+
+/*
+ *pingCtlTable_variables_oid:
+ *
+ */
+
+
+oid pingCtlTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 80, 1, 2 };
+
+/* trap */
+oid pingProbeFailed[] = { 1, 3, 6, 1, 2, 1, 80, 0, 1 };
+oid pingTestFailed[] = { 1, 3, 6, 1, 2, 1, 80, 0, 2 };
+oid pingTestCompleted[] = { 1, 3, 6, 1, 2, 1, 80, 0, 3 };
+
+
+struct variable2 pingCtlTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+ {COLUMN_PINGCTLTARGETADDRESSTYPE, ASN_INTEGER, RWRITE, var_pingCtlTable, 2, {1, 3}},
+ {COLUMN_PINGCTLTARGETADDRESS, ASN_OCTET_STR, RWRITE, var_pingCtlTable, 2, {1, 4}},
+ {COLUMN_PINGCTLDATASIZE, ASN_UNSIGNED, RONLY, var_pingCtlTable, 2, {1, 5}},
+ {COLUMN_PINGCTLTIMEOUT, ASN_UNSIGNED, RONLY, var_pingCtlTable, 2, {1, 6}},
+ {COLUMN_PINGCTLPROBECOUNT, ASN_UNSIGNED, RONLY, var_pingCtlTable, 2, {1, 7}},
+ {COLUMN_PINGCTLADMINSTATUS, ASN_INTEGER, RWRITE, var_pingCtlTable, 2, {1, 8}},
+ {COLUMN_PINGCTLDATAFILL, ASN_OCTET_STR, RWRITE, var_pingCtlTable, 2, {1, 9}},
+ {COLUMN_PINGCTLFREQUENCY, ASN_UNSIGNED, RWRITE, var_pingCtlTable, 2, {1, 10}},
+ {COLUMN_PINGCTLMAXROWS, ASN_UNSIGNED, RWRITE, var_pingCtlTable, 2, {1, 11}},
+ {COLUMN_PINGCTLSTORAGETYPE, ASN_INTEGER, RWRITE, var_pingCtlTable, 2, {1, 12}},
+ {COLUMN_PINGCTLTRAPGENERATION, ASN_OCTET_STR, RWRITE, var_pingCtlTable, 2, {1, 13}},
+ {COLUMN_PINGCTLTRAPPROBEFAILUREFILTER, ASN_UNSIGNED, RWRITE, var_pingCtlTable, 2, {1, 14}},
+ {COLUMN_PINGCTLTRAPTESTFAILUREFILTER, ASN_UNSIGNED, RWRITE, var_pingCtlTable, 2, {1, 15}},
+ {COLUMN_PINGCTLTYPE, ASN_OBJECT_ID, RWRITE, var_pingCtlTable, 2, {1, 16}},
+ {COLUMN_PINGCTLDESCR, ASN_OCTET_STR, RWRITE, var_pingCtlTable, 2, {1, 17}},
+ {COLUMN_PINGCTLSOURCEADDRESSTYPE, ASN_INTEGER, RWRITE, var_pingCtlTable, 2, {1, 18}},
+ {COLUMN_PINGCTLSOURCEADDRESS, ASN_OCTET_STR, RWRITE, var_pingCtlTable, 2, {1, 19}},
+ {COLUMN_PINGCTLIFINDEX, ASN_INTEGER, RWRITE, var_pingCtlTable, 2, {1, 20}},
+ {COLUMN_PINGCTLBYPASSROUTETABLE, ASN_INTEGER, RWRITE, var_pingCtlTable, 2, {1, 21}},
+ {COLUMN_PINGCTLDSFIELD, ASN_UNSIGNED, RWRITE, var_pingCtlTable, 2, {1, 22}},
+ {COLUMN_PINGCTLROWSTATUS, ASN_INTEGER, RWRITE, var_pingCtlTable, 2, {1, 23}}
+};
+
+
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+
+
+struct header_complex_index *pingCtlTableStorage = NULL;
+struct header_complex_index *pingResultsTableStorage = NULL;
+struct header_complex_index *pingProbeHistoryTableStorage = NULL;
+
+void
+init_pingCtlTable(void)
+{
+ DEBUGMSGTL(("pingCtlTable", "initializing... "));
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("pingCtlTable", pingCtlTable_variables, variable2,
+ pingCtlTable_variables_oid);
+
+
+ /*
+ * register our config handler(s) to deal with registrations
+ */
+ snmpd_register_config_handler("pingCtlTable", parse_pingCtlTable,
+ NULL, NULL);
+
+ /*
+ * we need to be called back later to store our data
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_pingCtlTable, NULL);
+
+ DEBUGMSGTL(("pingCtlTable", "done.\n"));
+}
+
+struct pingCtlTable_data *
+create_pingCtlTable_data(void)
+{
+ struct pingCtlTable_data *StorageNew = NULL;
+ StorageNew = SNMP_MALLOC_STRUCT(pingCtlTable_data);
+ if (StorageNew == NULL) {
+ exit(1);
+ }
+ StorageNew->pingCtlTargetAddressType = 1;
+ StorageNew->pingCtlTargetAddress = strdup("");
+ StorageNew->pingCtlTargetAddressLen = 0;
+ StorageNew->pingCtlDataSize = 0;
+ StorageNew->pingCtlTimeOut = 3;
+ StorageNew->pingCtlProbeCount = 1;
+ StorageNew->pingCtlAdminStatus = 2;
+ StorageNew->pingCtlDataFill = (char *) malloc(strlen("00") + 1);
+ if (StorageNew->pingCtlDataFill == NULL) {
+ exit(1);
+ }
+ memcpy(StorageNew->pingCtlDataFill, "00", strlen("00") + 1);
+ StorageNew->pingCtlDataFill[strlen("00")] = '\0';
+ StorageNew->pingCtlDataFillLen = strlen(StorageNew->pingCtlDataFill);
+ StorageNew->pingCtlFrequency = 0;
+ StorageNew->pingCtlMaxRows = 50;
+ StorageNew->pingCtlStorageType = 1;
+ StorageNew->pingCtlTrapGeneration = strdup("");
+ StorageNew->pingCtlTrapGenerationLen = 0;
+ StorageNew->pingCtlTrapGenerationLen = 0;
+ StorageNew->pingCtlTrapProbeFailureFilter = 1;
+ StorageNew->pingCtlTrapTestFailureFilter = 1;
+ StorageNew->pingCtlType = calloc(1, sizeof(oid) * sizeof(2)); /* 0.0 */
+ StorageNew->pingCtlTypeLen = 2;
+ StorageNew->pingCtlDescr = strdup("");
+ StorageNew->pingCtlDescrLen = 0;
+ StorageNew->pingCtlSourceAddressType = 1;
+ StorageNew->pingCtlSourceAddress = strdup("");
+ StorageNew->pingCtlSourceAddressLen = 0;
+ StorageNew->pingCtlIfIndex = 0;
+ StorageNew->pingCtlByPassRouteTable = 2;
+ StorageNew->pingCtlDSField = 0;
+ StorageNew->pingResults = NULL;
+ StorageNew->pingProbeHis = NULL;
+
+ StorageNew->storageType = ST_NONVOLATILE;
+ StorageNew->pingProbeHistoryMaxIndex = 0;
+ return StorageNew;
+}
+
+/*
+ * pingCtlTable_add(): adds a structure node to our data set
+ */
+int
+pingCtlTable_add(struct pingCtlTable_data *thedata)
+{
+ netsnmp_variable_list *vars = NULL;
+
+
+ DEBUGMSGTL(("pingCtlTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlOwnerIndex, thedata->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlTestName, thedata->pingCtlTestNameLen); /* pingCtlOperationName */
+
+
+ header_complex_add_data(&pingCtlTableStorage, vars, thedata);
+
+ DEBUGMSGTL(("pingCtlTable", "registered an entry\n"));
+ vars = NULL;
+ DEBUGMSGTL(("pingCtlTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+int
+pingResultsTable_add(struct pingCtlTable_data *thedata)
+{
+ netsnmp_variable_list *vars_list = NULL;
+ struct pingResultsTable_data *p = NULL;
+ p = thedata->pingResults;
+ if (thedata->pingResults != NULL) {
+
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) p->pingCtlOwnerIndex, p->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) p->pingCtlTestName, p->pingCtlTestNameLen); /* pingCtlOperationName */
+
+ /*
+ * XXX: fill in default row values here into StorageNew
+ *
+ */
+
+
+ DEBUGMSGTL(("pingResultsTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ header_complex_add_data(&pingResultsTableStorage, vars_list, p);
+
+ DEBUGMSGTL(("pingResultsTable", "out finished\n"));
+
+ }
+
+ DEBUGMSGTL(("pingResultsTable", "done.\n"));
+ vars_list = NULL;
+ return SNMPERR_SUCCESS;
+}
+
+
+int
+pingProbeHistoryTable_add(struct pingProbeHistoryTable_data *thedata)
+{
+ netsnmp_variable_list *vars_list;
+ vars_list = NULL;
+ if (thedata != NULL) {
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlOwnerIndex, thedata->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlTestName, thedata->pingCtlTestNameLen); /* pingCtlTestName */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &thedata->pingProbeHistoryIndex, sizeof(thedata->pingProbeHistoryIndex)); /* pingProbeHistoryIndex */
+
+ /*
+ * XXX: fill in default row values here into StorageNew
+ *
+ */
+
+
+ DEBUGMSGTL(("pingProbeHistoryTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ header_complex_add_data(&pingProbeHistoryTableStorage, vars_list,
+ thedata);
+ DEBUGMSGTL(("pingProbeHistoryTable", "out finished\n"));
+ }
+
+ vars_list = NULL;
+ DEBUGMSGTL(("pingProbeHistoryTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+int
+pingProbeHistoryTable_addall(struct pingCtlTable_data *thedata)
+{
+ netsnmp_variable_list *vars_list = NULL;
+ struct pingProbeHistoryTable_data *p = NULL;
+ p = thedata->pingProbeHis;
+ if (thedata->pingProbeHis != NULL)
+ do {
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) p->pingCtlOwnerIndex, p->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) p->pingCtlTestName, p->pingCtlTestNameLen); /* pingCtlTestName */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &p->pingProbeHistoryIndex, sizeof(p->pingProbeHistoryIndex)); /* pingProbeHistoryIndex */
+
+ /*
+ * XXX: fill in default row values here into StorageNew
+ *
+ */
+
+
+ DEBUGMSGTL(("pingProbeHistoryTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ header_complex_add_data(&pingProbeHistoryTableStorage,
+ vars_list, p);
+
+
+ DEBUGMSGTL(("pingProbeHistoryTable", "out finished\n"));
+ vars_list = NULL;
+ p = p->next;
+ } while (p != NULL);
+
+ DEBUGMSGTL(("pingProbeHistoryTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+void
+pingCtlTable_cleaner(struct header_complex_index *thestuff)
+{
+ struct header_complex_index *hciptr = NULL;
+ struct pingCtlTable_data *StorageDel = NULL;
+ DEBUGMSGTL(("pingProbeHistoryTable", "cleanerout "));
+ for (hciptr = thestuff; hciptr != NULL; hciptr = hciptr->next) {
+ StorageDel =
+ header_complex_extract_entry(&pingCtlTableStorage, hciptr);
+ DEBUGMSGTL(("pingProbeHistoryTable", "cleaner "));
+ }
+}
+
+/*
+ * parse_mteObjectsTable():
+ * parses .conf file entries needed to configure the mib.
+ */
+void
+parse_pingCtlTable(const char *token, char *line)
+{
+ size_t tmpint;
+ struct pingCtlTable_data *StorageTmp =
+ SNMP_MALLOC_STRUCT(pingCtlTable_data);
+
+ DEBUGMSGTL(("pingCtlTable", "parsing config... "));
+
+
+ if (StorageTmp == NULL) {
+ config_perror("malloc failure");
+ return;
+ }
+
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingCtlOwnerIndex,
+ &StorageTmp->pingCtlOwnerIndexLen);
+ if (StorageTmp->pingCtlOwnerIndex == NULL) {
+ config_perror("invalid specification for pingCtlOwnerIndex");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingCtlTestName,
+ &StorageTmp->pingCtlTestNameLen);
+ if (StorageTmp->pingCtlTestName == NULL) {
+ config_perror("invalid specification for pingCtlTestName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pingCtlTargetAddressType,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingCtlTargetAddress,
+ &StorageTmp->pingCtlTargetAddressLen);
+ if (StorageTmp->pingCtlTargetAddress == NULL) {
+ config_perror("invalid specification for pingCtlTargetAddress");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingCtlDataSize, &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingCtlTimeOut, &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingCtlProbeCount, &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pingCtlAdminStatus, &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingCtlDataFill,
+ &StorageTmp->pingCtlDataFillLen);
+ if (StorageTmp->pingCtlDataFill == NULL) {
+ config_perror("invalid specification for pingCtlDataFill");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingCtlFrequency, &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingCtlMaxRows, &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pingCtlStorageType, &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingCtlTrapGeneration,
+ &StorageTmp->pingCtlTrapGenerationLen);
+ if (StorageTmp->pingCtlTrapGeneration == NULL) {
+ config_perror("invalid specification for pingCtlTrapGeneration");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingCtlTrapProbeFailureFilter,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingCtlTrapTestFailureFilter,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OBJECT_ID, line,
+ &StorageTmp->pingCtlType,
+ &StorageTmp->pingCtlTypeLen);
+ if (StorageTmp->pingCtlType == NULL) {
+ config_perror("invalid specification for pingCtlType");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingCtlDescr,
+ &StorageTmp->pingCtlDescrLen);
+ if (StorageTmp->pingCtlDescr == NULL) {
+ config_perror("invalid specification for pingCtlTrapDescr");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pingCtlSourceAddressType,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingCtlSourceAddress,
+ &StorageTmp->pingCtlSourceAddressLen);
+ if (StorageTmp->pingCtlSourceAddress == NULL) {
+ config_perror("invalid specification for pingCtlSourceAddress");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pingCtlIfIndex, &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pingCtlByPassRouteTable,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingCtlDSField, &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pingCtlRowStatus, &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingProbeHistoryMaxIndex,
+ &tmpint);
+
+ StorageTmp->storageType = ST_NONVOLATILE;
+ pingCtlTable_add(StorageTmp);
+ /* pingCtlTable_cleaner(pingCtlTableStorage); */
+
+ DEBUGMSGTL(("pingCtlTable", "done.\n"));
+}
+
+
+
+/*
+ * store_pingCtlTable():
+ * stores .conf file entries needed to configure the mib.
+ */
+int
+store_pingCtlTable(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr = NULL;
+ size_t tmpint;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ struct header_complex_index *hcindex = NULL;
+
+
+ DEBUGMSGTL(("pingCtlTable", "storing data... "));
+
+
+ for (hcindex = pingCtlTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp = (struct pingCtlTable_data *) hcindex->data;
+
+ if (StorageTmp->storageType != ST_READONLY) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "pingCtlTable ");
+ cptr = line + strlen(line);
+
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pingCtlOwnerIndex,
+ &StorageTmp->pingCtlOwnerIndexLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pingCtlTestName,
+ &StorageTmp->pingCtlTestNameLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ pingCtlTargetAddressType, &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pingCtlTargetAddress,
+ &StorageTmp->
+ pingCtlTargetAddressLen);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->pingCtlDataSize,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->pingCtlTimeOut,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->pingCtlProbeCount,
+ &tmpint);
+
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->pingCtlAdminStatus,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pingCtlDataFill,
+ &StorageTmp->pingCtlDataFillLen);
+
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->pingCtlFrequency,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->pingCtlMaxRows,
+ &tmpint);
+
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->pingCtlStorageType,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pingCtlTrapGeneration,
+ &StorageTmp->
+ pingCtlTrapGenerationLen);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ pingCtlTrapProbeFailureFilter,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ pingCtlTrapTestFailureFilter,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OBJECT_ID, cptr,
+ &StorageTmp->pingCtlType,
+ &StorageTmp->pingCtlTypeLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pingCtlDescr,
+ &StorageTmp->pingCtlDescrLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ pingCtlSourceAddressType, &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pingCtlSourceAddress,
+ &StorageTmp->
+ pingCtlSourceAddressLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->pingCtlIfIndex,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ pingCtlByPassRouteTable, &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->pingCtlDSField,
+ &tmpint);
+
+ if (StorageTmp->pingCtlRowStatus == RS_ACTIVE)
+ StorageTmp->pingCtlRowStatus = RS_NOTINSERVICE;
+
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->pingCtlRowStatus,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ pingProbeHistoryMaxIndex, &tmpint);
+
+
+
+ snmpd_store_config(line);
+ }
+ }
+ DEBUGMSGTL(("pingCtlTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+
+
+/*
+ * var_pingCtlTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_mteObjectsTable above.
+ */
+unsigned char *
+var_pingCtlTable(struct variable *vp,
+ oid * name,
+ size_t *length,
+ int exact, size_t *var_len, WriteMethod ** write_method)
+{
+
+
+ struct pingCtlTable_data *StorageTmp = NULL;
+
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL) {
+ if (vp->magic == COLUMN_PINGCTLROWSTATUS)
+ *write_method = write_pingCtlRowStatus;
+ return NULL;
+ }
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+
+
+ case COLUMN_PINGCTLTARGETADDRESSTYPE:
+ *write_method = write_pingCtlTargetAddressType;
+ *var_len = sizeof(StorageTmp->pingCtlTargetAddressType);
+ return (u_char *) & StorageTmp->pingCtlTargetAddressType;
+
+ case COLUMN_PINGCTLTARGETADDRESS:
+ *write_method = write_pingCtlTargetAddress;
+ *var_len = (StorageTmp->pingCtlTargetAddressLen);
+
+ return (u_char *) StorageTmp->pingCtlTargetAddress;
+
+ case COLUMN_PINGCTLDATASIZE:
+ *write_method = write_pingCtlDataSize;
+ *var_len = sizeof(StorageTmp->pingCtlDataSize);
+
+ return (u_char *) & StorageTmp->pingCtlDataSize;
+
+ case COLUMN_PINGCTLTIMEOUT:
+ *write_method = write_pingCtlTimeOut;
+ *var_len = sizeof(StorageTmp->pingCtlTimeOut);
+
+ return (u_char *) & StorageTmp->pingCtlTimeOut;
+
+ case COLUMN_PINGCTLPROBECOUNT:
+ *write_method = write_pingCtlProbeCount;
+ *var_len = sizeof(StorageTmp->pingCtlProbeCount);
+
+ return (u_char *) & StorageTmp->pingCtlProbeCount;
+
+ case COLUMN_PINGCTLADMINSTATUS:
+ *write_method = write_pingCtlAdminStatus;
+ *var_len = sizeof(StorageTmp->pingCtlAdminStatus);
+
+ return (u_char *) & StorageTmp->pingCtlAdminStatus;
+
+ case COLUMN_PINGCTLDATAFILL:
+ *write_method = write_pingCtlDataFill;
+ *var_len = (StorageTmp->pingCtlDataFillLen);
+
+ return (u_char *) StorageTmp->pingCtlDataFill;
+
+ case COLUMN_PINGCTLFREQUENCY:
+ *write_method = write_pingCtlFrequency;
+ *var_len = sizeof(StorageTmp->pingCtlFrequency);
+
+ return (u_char *) & StorageTmp->pingCtlFrequency;
+
+ case COLUMN_PINGCTLMAXROWS:
+ *write_method = write_pingCtlMaxRows;
+ *var_len = sizeof(StorageTmp->pingCtlMaxRows);
+
+ return (u_char *) & StorageTmp->pingCtlMaxRows;
+
+ case COLUMN_PINGCTLSTORAGETYPE:
+ *write_method = write_pingCtlStorageType;
+ *var_len = sizeof(StorageTmp->pingCtlStorageType);
+
+ return (u_char *) & StorageTmp->pingCtlStorageType;
+
+ case COLUMN_PINGCTLTRAPGENERATION:
+ *write_method = write_pingCtlTrapGeneration;
+ *var_len = (StorageTmp->pingCtlTrapGenerationLen);
+
+ return (u_char *) StorageTmp->pingCtlTrapGeneration;
+
+ case COLUMN_PINGCTLTRAPPROBEFAILUREFILTER:
+ *write_method = write_pingCtlTrapProbeFailureFilter;
+ *var_len = sizeof(StorageTmp->pingCtlTrapProbeFailureFilter);
+
+ return (u_char *) & StorageTmp->pingCtlTrapProbeFailureFilter;
+
+ case COLUMN_PINGCTLTRAPTESTFAILUREFILTER:
+ *write_method = write_pingCtlTrapTestFailureFilter;
+ *var_len = sizeof(StorageTmp->pingCtlTrapTestFailureFilter);
+
+ return (u_char *) & StorageTmp->pingCtlTrapTestFailureFilter;
+
+ case COLUMN_PINGCTLTYPE:
+ *write_method = write_pingCtlType;
+ *var_len = (StorageTmp->pingCtlTypeLen) * sizeof(oid);
+
+ return (u_char *) StorageTmp->pingCtlType;
+
+ case COLUMN_PINGCTLDESCR:
+ *write_method = write_pingCtlDescr;
+ *var_len = (StorageTmp->pingCtlDescrLen);
+
+ return (u_char *) StorageTmp->pingCtlDescr;
+
+ case COLUMN_PINGCTLSOURCEADDRESSTYPE:
+ *write_method = write_pingCtlSourceAddressType;
+ *var_len = sizeof(StorageTmp->pingCtlSourceAddressType);
+
+ return (u_char *) & StorageTmp->pingCtlSourceAddressType;
+
+ case COLUMN_PINGCTLSOURCEADDRESS:
+ *write_method = write_pingCtlSourceAddress;
+ *var_len = (StorageTmp->pingCtlSourceAddressLen);
+
+ return (u_char *) StorageTmp->pingCtlSourceAddress;
+
+ case COLUMN_PINGCTLIFINDEX:
+ *write_method = write_pingCtlIfIndex;
+ *var_len = sizeof(StorageTmp->pingCtlIfIndex);
+
+ return (u_char *) & StorageTmp->pingCtlIfIndex;
+
+ case COLUMN_PINGCTLBYPASSROUTETABLE:
+ *write_method = write_pingCtlByPassRouteTable;
+ *var_len = sizeof(StorageTmp->pingCtlByPassRouteTable);
+
+ return (u_char *) & StorageTmp->pingCtlByPassRouteTable;
+
+ case COLUMN_PINGCTLDSFIELD:
+ *write_method = write_pingCtlDSField;
+ *var_len = sizeof(StorageTmp->pingCtlDSField);
+
+ return (u_char *) & StorageTmp->pingCtlDSField;
+
+
+
+ case COLUMN_PINGCTLROWSTATUS:
+ *write_method = write_pingCtlRowStatus;
+ *var_len = sizeof(StorageTmp->pingCtlRowStatus);
+
+ return (u_char *) & StorageTmp->pingCtlRowStatus;
+
+ default:
+ ERROR_MSG("");
+ }
+ return NULL;
+}
+
+
+unsigned long
+pingProbeHistoryTable_count(struct pingCtlTable_data *thedata)
+{
+ struct header_complex_index *hciptr2 = NULL;
+ netsnmp_variable_list *vars = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len;
+ unsigned long count = 0;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlOwnerIndex, thedata->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlTestName, thedata->pingCtlTestNameLen); /* pingCtlOperationName */
+
+ header_complex_generate_oid(newoid, &newoid_len, NULL, 0, vars);
+
+ for (hciptr2 = pingProbeHistoryTableStorage; hciptr2 != NULL;
+ hciptr2 = hciptr2->next) {
+ if (snmp_oid_compare(newoid, newoid_len, hciptr2->name, newoid_len)
+ == 0) {
+ count = count + 1;
+ }
+ }
+ return count;
+}
+
+
+
+
+int
+pingProbeHistoryTable_delLast(struct pingCtlTable_data *thedata)
+{
+ struct header_complex_index *hciptr2 = NULL;
+ struct header_complex_index *hcilast = NULL;
+ struct pingProbeHistoryTable_data *StorageDel = NULL;
+ struct pingProbeHistoryTable_data *StorageTmp = NULL;
+ netsnmp_variable_list *vars = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len;
+ time_t last_time = 2147483647;
+ struct tm *tp;
+
+ tp = (struct tm *) malloc(sizeof(struct tm));
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlOwnerIndex, thedata->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlTestName, thedata->pingCtlTestNameLen); /* pingCtlOperationName */
+
+ header_complex_generate_oid(newoid, &newoid_len, NULL, 0, vars);
+
+ for (hcilast = hciptr2 = pingProbeHistoryTableStorage; hciptr2 != NULL;
+ hciptr2 = hciptr2->next) {
+ if (snmp_oid_compare(newoid, newoid_len, hciptr2->name, newoid_len)
+ == 0) {
+
+ StorageTmp =
+ header_complex_get_from_oid(pingProbeHistoryTableStorage,
+ hciptr2->name,
+ hciptr2->namelen);
+ strptime(StorageTmp->pingProbeHistoryTime, "%c", tp);
+
+ if (last_time > timegm(tp)) {
+ last_time = timegm(tp);
+ hcilast = hciptr2;
+ }
+
+ }
+ }
+ StorageDel =
+ header_complex_extract_entry(&pingProbeHistoryTableStorage,
+ hcilast);
+ DEBUGMSGTL(("pingProbeHistoryTable",
+ "delete the last one success!\n"));
+ SNMP_FREE(tp);
+}
+
+
+char *
+sock_ntop_host(const struct sockaddr *sa, socklen_t salen)
+{
+ static char str[128]; /* Unix domain is largest */
+
+ switch (sa->sa_family) {
+ case AF_INET:{
+ struct sockaddr_in *sin = (struct sockaddr_in *) sa;
+
+ if (inet_ntop(AF_INET, &sin->sin_addr, str, sizeof(str)) ==
+ NULL)
+ return (NULL);
+ return (str);
+ }
+
+#ifdef IPV6
+ case AF_INET6:{
+ struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
+
+ if (inet_ntop(AF_INET6, &sin6->sin6_addr, str, sizeof(str)) ==
+ NULL)
+ return (NULL);
+ return (str);
+ }
+#endif
+
+#ifdef AF_UNIX
+ case AF_UNIX:{
+ struct sockaddr_un *unp = (struct sockaddr_un *) sa;
+
+ /*
+ * OK to have no pathname bound to the socket: happens on
+ * every connect() unless client calls bind() first.
+ */
+ if (unp->sun_path[0] == 0)
+ strcpy(str, "(no pathname bound)");
+ else
+ snprintf(str, sizeof(str), "%s", unp->sun_path);
+ return (str);
+ }
+#endif
+
+#ifdef HAVE_SOCKADDR_DL_STRUCT
+ case AF_LINK:{
+ struct sockaddr_dl *sdl = (struct sockaddr_dl *) sa;
+
+ if (sdl->sdl_nlen > 0)
+ snprintf(str, sizeof(str), "%*s",
+ sdl->sdl_nlen, &sdl->sdl_data[0]);
+ else
+ snprintf(str, sizeof(str), "AF_LINK, index=%d",
+ sdl->sdl_index);
+ return (str);
+ }
+#endif
+ default:
+ snprintf(str, sizeof(str),
+ "sock_ntop_host: unknown AF_xxx: %d, len %d",
+ sa->sa_family, salen);
+ return (str);
+ }
+ return (NULL);
+}
+
+
+char *
+Sock_ntop_host(const struct sockaddr *sa, socklen_t salen)
+{
+ char *ptr;
+
+ if ((ptr = sock_ntop_host(sa, salen)) == NULL)
+ printf("sock_ntop_host error"); /* inet_ntop() sets errno */
+ return (ptr);
+}
+
+
+
+unsigned short
+in_cksum(unsigned short *addr, int len)
+{
+ int nleft = len;
+ int sum = 0;
+ unsigned short *w = addr;
+ unsigned short answer = 0;
+
+ /*
+ * Our algorithm is simple, using a 32 bit accumulator (sum), we add
+ * sequential 16 bit words to it, and at the end, fold back all the
+ * carry bits from the top 16 bits into the lower 16 bits.
+ */
+ while (nleft > 1) {
+ sum += *w++;
+ nleft -= 2;
+ }
+
+ /*
+ * 4mop up an odd byte, if necessary
+ */
+ if (nleft == 1) {
+ *(unsigned char *) (&answer) = *(unsigned char *) w;
+ sum += answer;
+ }
+
+ /*
+ * 4add back carry outs from top 16 bits to low 16 bits
+ */
+ sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
+ sum += (sum >> 16); /* add carry */
+ answer = ~sum; /* truncate to 16 bits */
+ return (answer);
+}
+
+
+
+struct addrinfo *
+host_serv(const char *host, const char *serv, int family, int socktype)
+{
+ int n;
+ struct addrinfo hints, *res;
+
+ bzero(&hints, sizeof(struct addrinfo));
+ hints.ai_flags = AI_CANONNAME; /* always return canonical name */
+ hints.ai_family = family; /* AF_UNSPEC, AF_INET, AF_INET6, etc. */
+ hints.ai_socktype = socktype; /* 0, SOCK_STREAM, SOCK_DGRAM, etc. */
+
+ if ((n = getaddrinfo(host, serv, &hints, &res)) != 0)
+ return (NULL);
+
+ return (res); /* return pointer to first on linked list */
+}
+
+/*
+ * end host_serv
+ */
+
+/*
+ * There is no easy way to pass back the integer return code from
+ * getaddrinfo() in the function above, short of adding another argument
+ * that is a pointer, so the easiest way to provide the wrapper function
+ * is just to duplicate the simple function as we do here.
+ */
+
+struct addrinfo *
+Host_serv(const char *host, const char *serv, int family, int socktype)
+{
+ int n;
+ struct addrinfo hints, *res;
+
+ bzero(&hints, sizeof(struct addrinfo));
+ hints.ai_flags = AI_CANONNAME; /* always return canonical name */
+ hints.ai_family = family; /* 0, AF_INET, AF_INET6, etc. */
+ hints.ai_socktype = socktype; /* 0, SOCK_STREAM, SOCK_DGRAM, etc. */
+
+ if ((n = getaddrinfo(host, serv, &hints, &res)) != 0)
+#if HAVE_GAI_STRERROR
+ printf("host_serv error for %s, %s: %s",
+ (host == NULL) ? "(no hostname)" : host,
+ (serv == NULL) ? "(no service name)" : serv,
+ gai_strerror(n));
+#else
+ printf("host_serv error for %s, %s",
+ (host == NULL) ? "(no hostname)" : host,
+ (serv == NULL) ? "(no service name)" : serv);
+#endif
+
+ return (res); /* return pointer to first on linked list */
+}
+
+int
+readable_timeo(int fd, int sec)
+{
+ fd_set rset;
+ struct timeval tv;
+ FD_ZERO(&rset);
+ FD_SET(fd, &rset);
+ tv.tv_sec = sec;
+ tv.tv_usec = 0;
+ return (select(fd + 1, &rset, NULL, NULL, &tv));
+
+}
+
+/*
+ * send trap
+ */
+int
+send_ping_trap(struct pingCtlTable_data *item,
+ oid * trap_oid, size_t trap_oid_len)
+{
+ static oid objid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 }; /* snmpTrapIOD.0 */
+ struct pingResultsTable_data *StorageTmp = NULL;
+ netsnmp_variable_list *var_list = NULL, *vars = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len;
+
+ oid pingCtlTargetAddress[] =
+ { 1, 3, 6, 1, 2, 1, 80, 1, 2, 1, 4 };
+ oid pingResultsMinRtt[] =
+ { 1, 3, 6, 1, 2, 1, 80, 1, 3, 1, 4 };
+ oid pingResultsMaxRtt[] =
+ { 1, 3, 6, 1, 2, 1, 80, 1, 3, 1, 5 };
+ oid pingResultsAverageRtt[] =
+ { 1, 3, 6, 1, 2, 1, 80, 1, 3, 1, 6 };
+ oid pingResultsProbeResponses[] =
+ { 1, 3, 6, 1, 2, 1, 80, 1, 3, 1, 7 };
+ oid pingResultsSendProbes[] =
+ { 1, 3, 6, 1, 2, 1, 80, 1, 3, 1, 8 };
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlOwnerIndex, item->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlTestName, item->pingCtlTestNameLen); /* pingCtlOperationName */
+ StorageTmp = SNMP_MALLOC_STRUCT(pingResultsTable_data);
+ if ((StorageTmp =
+ (struct pingResultsTable_data *)
+ header_complex_get(pingResultsTableStorage, vars)) == NULL)
+ return SNMP_ERR_NOSUCHNAME;
+
+ /*
+ * snmpTrap oid
+ */
+ snmp_varlist_add_variable(&var_list, objid_snmptrap,
+ sizeof(objid_snmptrap) / sizeof(oid),
+ ASN_OBJECT_ID, (u_char *) trap_oid,
+ trap_oid_len * sizeof(oid));
+ /*
+ * pingCtlTargetAddress
+ */
+ bzero(newoid, MAX_OID_LEN * sizeof(oid));
+ header_complex_generate_oid(newoid, &newoid_len, pingCtlTargetAddress,
+ sizeof(pingCtlTargetAddress) / sizeof(oid),
+ vars);
+
+ snmp_varlist_add_variable(&var_list, newoid,
+ newoid_len,
+ ASN_OCTET_STR,
+ (u_char *) item->pingCtlTargetAddress,
+ item->pingCtlTargetAddressLen);
+
+ /*
+ * pingResultsMinRtt
+ */
+ bzero(newoid, newoid_len);
+ header_complex_generate_oid(newoid, &newoid_len, pingResultsMinRtt,
+ sizeof(pingResultsMinRtt) / sizeof(oid),
+ vars);
+
+ snmp_varlist_add_variable(&var_list, newoid,
+ newoid_len,
+ ASN_UNSIGNED,
+ (u_char *) & (StorageTmp->pingResultsMinRtt),
+ sizeof(StorageTmp->pingResultsMinRtt));
+ /*
+ * pingResultsMaxRtt
+ */
+ bzero(newoid, newoid_len);
+ header_complex_generate_oid(newoid, &newoid_len, pingResultsMaxRtt,
+ sizeof(pingResultsMaxRtt) / sizeof(oid),
+ vars);
+
+ snmp_varlist_add_variable(&var_list, newoid,
+ newoid_len,
+ ASN_UNSIGNED,
+ (u_char *) & (StorageTmp->pingResultsMaxRtt),
+ sizeof(StorageTmp->pingResultsMaxRtt));
+
+ /*
+ * pingResultsAverageRtt
+ */
+ bzero(newoid, newoid_len);
+ header_complex_generate_oid(newoid, &newoid_len, pingResultsAverageRtt,
+ sizeof(pingResultsAverageRtt) /
+ sizeof(oid), vars);
+
+ snmp_varlist_add_variable(&var_list, newoid,
+ newoid_len,
+ ASN_UNSIGNED,
+ (u_char *) & (StorageTmp->
+ pingResultsAverageRtt),
+ sizeof(StorageTmp->pingResultsAverageRtt));
+
+ /*
+ * pingResultsProbeResponses
+ */
+ bzero(newoid, newoid_len);
+ header_complex_generate_oid(newoid, &newoid_len,
+ pingResultsProbeResponses,
+ sizeof(pingResultsProbeResponses) /
+ sizeof(oid), vars);
+
+ snmp_varlist_add_variable(&var_list, newoid,
+ newoid_len,
+ ASN_UNSIGNED,
+ (u_char *) & (StorageTmp->
+ pingResultsProbeResponses),
+ sizeof(StorageTmp->
+ pingResultsProbeResponses));
+ /*
+ * pingResultsSendProbes
+ */
+ bzero(newoid, newoid_len);
+ header_complex_generate_oid(newoid, &newoid_len, pingResultsSendProbes,
+ sizeof(pingResultsSendProbes) /
+ sizeof(oid), vars);
+
+ snmp_varlist_add_variable(&var_list, newoid,
+ newoid_len,
+ ASN_UNSIGNED,
+ (u_char *) & (StorageTmp->
+ pingResultsSendProbes),
+ sizeof(StorageTmp->pingResultsSendProbes));
+
+ /*
+ * XXX: stuff based on event table
+ */
+
+ DEBUGMSG(("pingTest:send_ping_trap", "success!\n"));
+
+ send_v2trap(var_list);
+ snmp_free_varbind(vars);
+ vars = NULL;
+ snmp_free_varbind(var_list);
+ vars = NULL;
+}
+
+
+
+void
+readloop(struct pingCtlTable_data *item, struct addrinfo *ai, int datalen,
+ unsigned long *minrtt, unsigned long *maxrtt,
+ unsigned long *averagertt, pid_t pid)
+{
+ int size;
+ char recvbuf[BUFSIZE];
+ char sendbuf[BUFSIZE];
+ int nsent = 1;
+ socklen_t len;
+ ssize_t n;
+ struct timeval tval;
+ /* static int loop_num; */
+ /* struct pingProbeHistoryTable_data * current=NULL; */
+ struct pingProbeHistoryTable_data current_var;
+ int sockfd;
+ int current_probe_temp;
+ int success_probe = 0;
+ int fail_probe = 0;
+ int flag;
+ unsigned long *sumrtt;
+ struct timeval tv;
+
+ sumrtt = (unsigned long *) malloc(sizeof(unsigned long));
+ sockfd = socket(pr->sasend->sa_family, SOCK_RAW, pr->icmpproto);
+ setuid(getuid()); /* don't need special permissions any more */
+
+ size = 60 * 1024; /* OK if setsockopt fails */
+
+ tv.tv_sec = 5;
+ tv.tv_usec = 0;
+ setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
+
+ for (current_probe_temp = 1;
+ current_probe_temp <= item->pingCtlProbeCount;
+ current_probe_temp++) {
+ (*pr->fsend) (datalen, pid, nsent, sockfd, sendbuf);
+ nsent++;
+ len = pr->salen;
+ if (readable_timeo(sockfd, item->pingCtlTimeOut) == 0) {
+ /* printf("socket timeout!\n"); */
+ fail_probe = fail_probe + 1;
+ flag = 1;
+ } else {
+ n = recvfrom(sockfd, recvbuf, sizeof(recvbuf), 0, pr->sarecv,
+ &len);
+ success_probe = success_probe + 1;
+ flag = 0;
+ }
+
+ gettimeofday(&tval, NULL);
+
+ time_t timep;
+ time(&timep);
+
+ (*pr->fproc) (recvbuf, n, &tval, timep, item, ai, datalen, minrtt,
+ maxrtt, sumrtt, averagertt, current_probe_temp,
+ success_probe, fail_probe, flag, &current_var, pid);
+ printf("receiver success!\n");
+ if (current_probe_temp >= item->pingCtlProbeCount) {
+ SNMP_FREE(sumrtt);
+ sumrtt = NULL;
+ return;
+ }
+ }
+}
+
+unsigned long
+round_double(double number)
+{
+ unsigned long ret_num = 0;
+ if (number - (unsigned long) number < 0.5)
+ ret_num = (unsigned long) number;
+ else
+ ret_num = (unsigned long) number + 1;
+ return ret_num;
+}
+
+int
+proc_v4(char *ptr, ssize_t len, struct timeval *tvrecv, time_t timep,
+ struct pingCtlTable_data *item, struct addrinfo *ai, int datalen,
+ unsigned long *minrtt, unsigned long *maxrtt,
+ unsigned long *sumrtt, unsigned long *averagertt,
+ unsigned long current_probe, int success_probe, int fail_probe,
+ int flag, struct pingProbeHistoryTable_data *current_temp,
+ pid_t pid)
+{
+ int hlen1 = 0, icmplen = 0;
+ unsigned long rtt = 0;
+
+ struct ip *ip = NULL;
+ struct icmp *icmp = NULL;
+ struct timeval *tvsend = NULL;
+ struct pingProbeHistoryTable_data *temp = NULL;
+ static int probeFailed = 0;
+ static int testFailed = 0;
+ static int series = 0;
+
+ netsnmp_variable_list *vars = NULL;
+ struct pingResultsTable_data *StorageNew = NULL;
+ if (flag == 0) {
+ series = 0;
+ ip = (struct ip *) ptr; /* start of IP header */
+ hlen1 = ip->ip_hl << 2; /* length of IP header */
+
+ icmp = (struct icmp *) (ptr + hlen1); /* start of ICMP header */
+ if ((icmplen = len - hlen1) < 8)
+ printf("icmplen (%d) < 8", icmplen);
+
+ if (icmp->icmp_type == ICMP_ECHOREPLY) {
+ if (icmp->icmp_id != pid)
+ return; /* not a response to our ECHO_REQUEST */
+ if (icmplen < 16)
+ printf("icmplen (%d) < 16", icmplen);
+
+
+ tvsend = (struct timeval *) icmp->icmp_data;
+
+ rtt =
+ round_double((1000000 * (tvrecv->tv_sec - tvsend->tv_sec) +
+ tvrecv->tv_usec - tvsend->tv_usec) / 1000);
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlOwnerIndex, item->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlTestName, item->pingCtlTestNameLen); /* pingCtlTestName */
+
+
+ if ((StorageNew =
+ header_complex_get(pingResultsTableStorage,
+ vars)) == NULL)
+ return SNMP_ERR_NOSUCHNAME;
+
+ if (current_probe == 1) {
+ *averagertt = rtt;
+ *minrtt = rtt;
+ *maxrtt = rtt;
+ *sumrtt = rtt;
+ } else {
+ printf("else\n");
+ if (rtt < *minrtt)
+ *minrtt = rtt;
+ if (rtt > *maxrtt)
+ *maxrtt = rtt;
+ *sumrtt = (*sumrtt) + rtt;
+ *averagertt =
+ round_double((*sumrtt) /
+ (StorageNew->pingResultsProbeResponses +
+ 1));
+ }
+
+
+ StorageNew->pingResultsMinRtt = *minrtt;
+ StorageNew->pingResultsMaxRtt = *maxrtt;
+ StorageNew->pingResultsAverageRtt = *averagertt;
+ StorageNew->pingResultsProbeResponses =
+ StorageNew->pingResultsProbeResponses + 1;
+ StorageNew->pingResultsSendProbes =
+ StorageNew->pingResultsSendProbes + 1;
+ StorageNew->pingResultsRttSumOfSquares =
+ StorageNew->pingResultsRttSumOfSquares + rtt * rtt;
+
+ StorageNew->pingResultsLastGoodProbe =
+ (char *) malloc(strlen(asctime(gmtime(&timep))));
+ StorageNew->pingResultsLastGoodProbe =
+ strdup(asctime(gmtime(&timep)));
+ StorageNew->
+ pingResultsLastGoodProbe[strlen(asctime(gmtime(&timep))) -
+ 1] = '\0';
+ StorageNew->pingResultsLastGoodProbeLen =
+ strlen(asctime(gmtime(&timep))) - 1;
+
+
+
+ temp = SNMP_MALLOC_STRUCT(pingProbeHistoryTable_data);
+
+ temp->pingCtlOwnerIndex =
+ (char *) malloc(item->pingCtlOwnerIndexLen + 1);
+ memcpy(temp->pingCtlOwnerIndex, item->pingCtlOwnerIndex,
+ item->pingCtlOwnerIndexLen + 1);
+ temp->pingCtlOwnerIndex[item->pingCtlOwnerIndexLen] = '\0';
+ temp->pingCtlOwnerIndexLen = item->pingCtlOwnerIndexLen;
+
+ temp->pingCtlTestName =
+ (char *) malloc(item->pingCtlTestNameLen + 1);
+ memcpy(temp->pingCtlTestName, item->pingCtlTestName,
+ item->pingCtlTestNameLen + 1);
+ temp->pingCtlTestName[item->pingCtlTestNameLen] = '\0';
+ temp->pingCtlTestNameLen = item->pingCtlTestNameLen;
+
+ /* add lock to protect */
+ pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;
+ pthread_mutex_lock(&counter_mutex);
+ if (item->pingProbeHistoryMaxIndex >=
+ (unsigned long) (2147483647))
+ item->pingProbeHistoryMaxIndex = 0;
+ temp->pingProbeHistoryIndex =
+ ++(item->pingProbeHistoryMaxIndex);
+ pthread_mutex_unlock(&counter_mutex);
+
+
+ temp->pingProbeHistoryResponse = rtt;
+ temp->pingProbeHistoryStatus = 1;
+ temp->pingProbeHistoryLastRC = 0;
+
+ temp->pingProbeHistoryTime =
+ (char *) malloc(strlen(asctime(gmtime(&timep))));
+ temp->pingProbeHistoryTime = strdup(asctime(gmtime(&timep)));
+ temp->pingProbeHistoryTime[strlen(asctime(gmtime(&timep))) -
+ 1] = '\0';
+ temp->pingProbeHistoryTimeLen =
+ strlen(asctime(gmtime(&timep))) - 1;
+
+ if (StorageNew->pingResultsSendProbes == 1)
+ item->pingProbeHis = temp;
+ else {
+ (current_temp)->next = temp;
+ }
+
+ current_temp = temp;
+
+ if (StorageNew->pingResultsSendProbes >=
+ item->pingCtlProbeCount) {
+ current_temp->next = NULL;
+ }
+
+ if (item->pingProbeHis != NULL)
+ if (pingProbeHistoryTable_count(item) <
+ item->pingCtlMaxRows) {
+ if (pingProbeHistoryTable_add(current_temp) !=
+ SNMPERR_SUCCESS)
+ DEBUGMSGTL(("pingProbeHistoryTable",
+ "registered an entry error\n"));
+ } else {
+ pingProbeHistoryTable_delLast(item);
+ if (pingProbeHistoryTable_add(current_temp) !=
+ SNMPERR_SUCCESS)
+ DEBUGMSGTL(("pingProbeHistoryTable",
+ "registered an entry error\n"));
+
+ }
+
+ }
+ }
+
+ else if (flag == 1)
+ {
+
+
+ if (series == 0)
+ probeFailed = 1;
+ else
+ probeFailed = probeFailed + 1;
+ series = 1;
+ testFailed = testFailed + 1;
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlOwnerIndex, item->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlTestName, item->pingCtlTestNameLen); /* pingCtlTestName */
+
+
+ if ((StorageNew =
+ header_complex_get(pingResultsTableStorage, vars)) == NULL)
+ return SNMP_ERR_NOSUCHNAME;
+
+ if (current_probe == 1) {
+ *averagertt = rtt;
+ *minrtt = rtt;
+ *maxrtt = rtt;
+ *sumrtt = rtt;
+ }
+ StorageNew->pingResultsSendProbes =
+ StorageNew->pingResultsSendProbes + 1;
+
+
+
+ temp = SNMP_MALLOC_STRUCT(pingProbeHistoryTable_data);
+
+ temp->pingCtlOwnerIndex =
+ (char *) malloc(item->pingCtlOwnerIndexLen + 1);
+ memcpy(temp->pingCtlOwnerIndex, item->pingCtlOwnerIndex,
+ item->pingCtlOwnerIndexLen + 1);
+ temp->pingCtlOwnerIndex[item->pingCtlOwnerIndexLen] = '\0';
+ temp->pingCtlOwnerIndexLen = item->pingCtlOwnerIndexLen;
+
+ temp->pingCtlTestName =
+ (char *) malloc(item->pingCtlTestNameLen + 1);
+ memcpy(temp->pingCtlTestName, item->pingCtlTestName,
+ item->pingCtlTestNameLen + 1);
+ temp->pingCtlTestName[item->pingCtlTestNameLen] = '\0';
+ temp->pingCtlTestNameLen = item->pingCtlTestNameLen;
+
+ /* add lock to protect */
+ pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;
+ pthread_mutex_lock(&counter_mutex);
+ temp->pingProbeHistoryIndex = ++(item->pingProbeHistoryMaxIndex);
+ pthread_mutex_unlock(&counter_mutex);
+ /* end */
+
+ temp->pingProbeHistoryResponse = item->pingCtlTimeOut * 1000;
+ temp->pingProbeHistoryStatus = 4;
+ temp->pingProbeHistoryLastRC = 1;
+
+ temp->pingProbeHistoryTime =
+ (char *) malloc(strlen(asctime(gmtime(&timep))));
+ temp->pingProbeHistoryTime = strdup(asctime(gmtime(&timep)));
+ temp->pingProbeHistoryTime[strlen(asctime(gmtime(&timep))) - 1] =
+ '\0';
+ temp->pingProbeHistoryTimeLen =
+ strlen(asctime(gmtime(&timep))) - 1;
+
+ if (StorageNew->pingResultsSendProbes == 1)
+ item->pingProbeHis = temp;
+ else {
+ (current_temp)->next = temp;
+ }
+
+ current_temp = temp;
+
+ if (StorageNew->pingResultsSendProbes >= item->pingCtlProbeCount) {
+ current_temp->next = NULL;
+ }
+
+ if (item->pingProbeHis != NULL)
+ if (pingProbeHistoryTable_count(item) < item->pingCtlMaxRows) {
+ if (pingProbeHistoryTable_add(current_temp) !=
+ SNMPERR_SUCCESS)
+ DEBUGMSGTL(("pingProbeHistoryTable",
+ "registered an entry error\n"));
+ } else {
+
+ pingProbeHistoryTable_delLast(item);
+ if (pingProbeHistoryTable_add(current_temp) !=
+ SNMPERR_SUCCESS)
+ DEBUGMSGTL(("pingProbeHistoryTable",
+ "registered an entry error\n"));
+
+ }
+
+ if ((item->
+ pingCtlTrapGeneration[0] & PINGTRAPGENERATION_PROBEFAILED) !=
+ 0) {
+ if (probeFailed >= item->pingCtlTrapProbeFailureFilter)
+ send_ping_trap(item, pingProbeFailed,
+ sizeof(pingProbeFailed) / sizeof(oid));
+ }
+
+
+ }
+
+ if (current_probe == item->pingCtlProbeCount) {
+ if ((item->
+ pingCtlTrapGeneration[0] & PINGTRAPGENERATION_TESTCOMPLETED)
+ != 0) {
+ send_ping_trap(item, pingTestCompleted,
+ sizeof(pingTestCompleted) / sizeof(oid));
+ } else
+ if ((item->
+ pingCtlTrapGeneration[0] & PINGTRAPGENERATION_TESTFAILED)
+ != 0) {
+
+ if (testFailed >= item->pingCtlTrapTestFailureFilter)
+ send_ping_trap(item, pingTestFailed,
+ sizeof(pingTestFailed) / sizeof(oid));
+ }
+
+ else if ((item->
+ pingCtlTrapGeneration[0] &
+ PINGTRAPGENERATION_PROBEFAILED) != 0) {;
+ } else {
+ ;
+ }
+
+ series = 0;
+ probeFailed = 0;
+ testFailed = 0;
+
+ }
+ return;
+}
+
+
+
+void
+send_v4(int datalen, pid_t pid, int nsent, int sockfd, char *sendbuf)
+{
+ int len;
+ struct icmp *icmp = NULL;
+ struct timeval *temp = NULL;
+
+ icmp = (struct icmp *) sendbuf;
+ icmp->icmp_type = ICMP_ECHO;
+ icmp->icmp_code = 0;
+ icmp->icmp_id = pid;
+ icmp->icmp_seq = nsent;
+ gettimeofday((struct timeval *) icmp->icmp_data, NULL);
+ temp = (struct timeval *) icmp->icmp_data;
+
+ len = 8 + datalen; /* checksum ICMP header and data */
+ icmp->icmp_cksum = 0;
+ icmp->icmp_cksum = in_cksum((u_short *) icmp, len);
+
+ sendto(sockfd, sendbuf, len, 0, pr->sasend, pr->salen);
+}
+
+
+void
+run_ping(unsigned int clientreg, void *clientarg)
+/* run_ping(struct pingCtlTable_data *item) */
+{
+ struct pingCtlTable_data *item = clientarg;
+ netsnmp_variable_list *vars = NULL;
+ struct pingResultsTable_data *StorageNew = NULL;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlOwnerIndex, item->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlTestName, item->pingCtlTestNameLen); /* pingCtlTestName */
+
+
+ if ((StorageNew =
+ header_complex_get(pingResultsTableStorage, vars)) == NULL)
+ return;
+
+ StorageNew->pingResultsSendProbes = 0;
+ StorageNew->pingResultsProbeResponses = 0;
+
+ if (item->pingCtlTargetAddressType == 1
+ || item->pingCtlTargetAddressType == 16) {
+ struct proto proto_v4 =
+ { proc_v4, send_v4, NULL, NULL, 0, IPPROTO_ICMP };
+ char *host = NULL;
+ pid_t pid; /* our PID */
+
+ int datalen;
+ unsigned long *minrtt = NULL;
+ unsigned long *maxrtt = NULL;
+ unsigned long *averagertt = NULL;
+
+ datalen = 56; /* data that goes with ICMP echo request */
+ unsigned int n = 1;
+ int c;
+ struct addrinfo *ai = NULL;
+ minrtt = malloc(sizeof(unsigned long));
+ maxrtt = malloc(sizeof(unsigned long));
+ averagertt = malloc(sizeof(unsigned long));
+ host = item->pingCtlTargetAddress;
+ pid = getpid();
+
+ ai = host_serv(host, NULL, 0, 0);
+
+ printf("PING %s (%s): %d data bytes\n", ai->ai_canonname,
+ sock_ntop_host(ai->ai_addr, ai->ai_addrlen), datalen);
+
+ /*
+ * 4initialize according to protocol
+ */
+ if (ai->ai_family == AF_INET) {
+ pr = &proto_v4;
+#ifdef IPV6
+ } else if (ai->ai_family == AF_INET6) {
+ pr = &proto_v6;
+
+ if (IN6_IS_ADDR_V4MAPPED(&(((struct sockaddr_in6 *)
+ ai->ai_addr)->sin6_addr)))
+ printf("cannot ping IPv4-mapped IPv6 address");
+#endif
+ } else
+ printf("unknown address family %d", ai->ai_family);
+
+ pr->sasend = ai->ai_addr;
+ pr->sarecv = calloc(1, ai->ai_addrlen);
+ pr->salen = ai->ai_addrlen;
+ readloop(item, ai, datalen, minrtt, maxrtt, averagertt, pid);
+
+ SNMP_FREE(minrtt);
+ minrtt = NULL;
+ SNMP_FREE(maxrtt);
+ maxrtt = NULL;
+ SNMP_FREE(averagertt);
+ averagertt = NULL;
+ free(ai);
+ ai = NULL;
+ }
+
+ else if (item->pingCtlTargetAddressType == 2) {
+
+ int ch = 0, hold = 0, packlen = 0;
+ u_char *packet = NULL;
+ char *target = NULL;
+ struct sockaddr_in6 firsthop;
+ int socket_errno = 0;
+ struct icmp6_filter filter;
+ int err = 0, csum_offset = 0, sz_opt = 0;
+
+ static int icmp_sock = 0;
+ int uid = 0;
+ struct sockaddr_in6 source;
+ int preload = 0;
+ struct cmsghdr *srcrt = NULL;
+ static unsigned char cmsgbuf[4096];
+ static int cmsglen = 0;
+ struct sockaddr_in6 whereto; /* who to ping */
+ int options = 0;
+ char *hostname = NULL;
+ char *device = NULL;
+ int interval = 1000; /* interval between packets (msec) */
+ int pmtudisc = -1;
+ int datalen = DEFDATALEN;
+ int timing = 0; /* flag to do timing */
+ int working_recverr = 0;
+ __u32 flowlabel = 0;
+ __u32 tclass = 0;
+
+ int ident = 0; /* process id to identify our packets */
+ u_char outpack[MAX_PACKET];
+ struct timeval start_time;
+ static int screen_width = INT_MAX;
+ int deadline = 0; /* time to die */
+ int timeout = 0;
+
+ timeout = item->pingCtlTimeOut;
+ memset(&source, 0, sizeof(source));
+ icmp_sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
+ socket_errno = errno;
+
+ uid = getuid();
+ setuid(uid);
+
+ source.sin6_family = AF_INET6;
+ memset(&firsthop, 0, sizeof(firsthop));
+ firsthop.sin6_family = AF_INET6;
+ preload = 1;
+
+ target = item->pingCtlTargetAddress;
+
+ memset(&whereto, 0, sizeof(struct sockaddr_in6));
+ whereto.sin6_family = AF_INET6;
+ whereto.sin6_port = htons(IPPROTO_ICMPV6);
+
+ if (inet_pton(AF_INET6, target, &whereto.sin6_addr) <= 0) {
+ struct hostent *hp = NULL;
+
+ hp = gethostbyname2(target, AF_INET6);
+
+ if (hp == NULL) {
+ fprintf(stderr, "unknown host\n");
+ return;
+ }
+
+ memcpy(&whereto.sin6_addr, hp->h_addr_list[0], 16);
+ } else {
+ options |= F_NUMERIC;
+ }
+ if (ipv6_addr_any(&firsthop.sin6_addr))
+ memcpy(&firsthop.sin6_addr, &whereto.sin6_addr, 16);
+
+ hostname = target;
+
+ if (ipv6_addr_any(&source.sin6_addr)) {
+
+ int alen;
+ int probe_fd = socket(AF_INET6, SOCK_DGRAM, 0);
+
+ if (probe_fd < 0) {
+ printf("error!\n");
+ perror("socket");
+ return;
+ }
+ if (device) {
+ struct ifreq ifr;
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, device, IFNAMSIZ - 1);
+ if (setsockopt
+ (probe_fd, SOL_SOCKET, SO_BINDTODEVICE, device,
+ strlen(device) + 1) == -1) {
+#ifdef HAVE_SIN6_SCOPEID
+ if ((firsthop.sin6_addr.
+ s6_addr16[0] & htons(0xffc0)) == htons(0xfe80)
+ || (firsthop.sin6_addr.
+ s6_addr16[0] & htons(0xffff)) ==
+ htons(0xff02)) {
+ if (ioctl(probe_fd, SIOCGIFINDEX, &ifr) < 0) {
+ fprintf(stderr, "ping: unknown iface %s\n",
+ device);
+ return;
+ }
+ firsthop.sin6_scope_id = ifr.ifr_ifindex;
+ }
+#endif
+ }
+ }
+ firsthop.sin6_port = htons(1025);
+ if (connect
+ (probe_fd, (struct sockaddr *) &firsthop,
+ sizeof(firsthop)) == -1) {
+ perror("connect");
+ return;
+ }
+ alen = sizeof(source);
+ if (getsockname(probe_fd, (struct sockaddr *) &source, &alen)
+ == -1) {
+ perror("getsockname");
+ return;
+ }
+ source.sin6_port = 0;
+ close(probe_fd);
+ }
+
+ if (icmp_sock < 0) {
+ errno = socket_errno;
+ perror("ping: icmp open socket");
+ return;
+ }
+
+ if ((whereto.sin6_addr.s6_addr16[0] & htons(0xff00)) ==
+ htons(0xff00)) {
+ if (uid) {
+ if (interval < 1000) {
+ fprintf(stderr,
+ "ping: multicast ping with too short interval.\n");
+ return;
+ }
+ if (pmtudisc >= 0 && pmtudisc != IPV6_PMTUDISC_DO) {
+ fprintf(stderr,
+ "ping: multicast ping does not fragment.\n");
+ return;
+ }
+ }
+ if (pmtudisc < 0)
+ pmtudisc = IPV6_PMTUDISC_DO;
+ }
+
+ if (pmtudisc >= 0) {
+ if (setsockopt
+ (icmp_sock, SOL_IPV6, IPV6_MTU_DISCOVER, &pmtudisc,
+ sizeof(pmtudisc)) == -1) {
+ perror("ping: IPV6_MTU_DISCOVER");
+ return;
+ }
+ }
+ if (bind(icmp_sock, (struct sockaddr *) &source, sizeof(source)) ==
+ -1) {
+ perror("ping: bind icmp socket");
+ return;
+ }
+ if (datalen >= sizeof(struct timeval)) /* can we time transfer */
+ timing = 1;
+ packlen = datalen + 8 + 4096 + 40 + 8; /* 4096 for rthdr */
+ if (!(packet = (u_char *) malloc((u_int) packlen))) {
+ fprintf(stderr, "ping: out of memory.\n");
+ return;
+ }
+
+ working_recverr = 1;
+ hold = 1;
+ if (setsockopt
+ (icmp_sock, SOL_IPV6, IPV6_RECVERR, (char *) &hold,
+ sizeof(hold))) {
+ fprintf(stderr,
+ "WARNING: your kernel is veeery old. No problems.\n");
+ working_recverr = 0;
+ }
+
+ /*
+ * Estimate memory eaten by single packet. It is rough estimate.
+ * * Actually, for small datalen's it depends on kernel side a lot.
+ */
+ hold = datalen + 8;
+ hold += ((hold + 511) / 512) * (40 + 16 + 64 + 160);
+ sock_setbufs(icmp_sock, hold, preload);
+
+ csum_offset = 2;
+ sz_opt = sizeof(int);
+
+ err =
+ setsockopt(icmp_sock, SOL_RAW, IPV6_CHECKSUM, &csum_offset,
+ sz_opt);
+ if (err < 0) {
+ perror("setsockopt(RAW_CHECKSUM)");
+ return;
+ }
+
+ /*
+ * select icmp echo reply as icmp type to receive
+ */
+
+ ICMPV6_FILTER_SETBLOCKALL(&filter);
+
+ if (!working_recverr) {
+ ICMPV6_FILTER_SETPASS(ICMPV6_DEST_UNREACH, &filter);
+ ICMPV6_FILTER_SETPASS(ICMPV6_PKT_TOOBIG, &filter);
+ ICMPV6_FILTER_SETPASS(ICMPV6_TIME_EXCEED, &filter);
+ ICMPV6_FILTER_SETPASS(ICMPV6_PARAMPROB, &filter);
+ }
+
+ ICMPV6_FILTER_SETPASS(ICMPV6_ECHO_REPLY, &filter);
+
+ err = setsockopt(icmp_sock, SOL_ICMPV6, ICMPV6_FILTER, &filter,
+ sizeof(struct icmp6_filter));
+
+ if (err < 0) {
+ perror("setsockopt(ICMPV6_FILTER)");
+ return;
+ }
+
+ if (1) {
+ int on = 1;
+ if (setsockopt(icmp_sock, IPPROTO_IPV6, IPV6_HOPLIMIT,
+ &on, sizeof(on)) == -1) {
+ perror("can't receive hop limit");
+ return;
+ }
+ }
+
+ printf("PING %s(%s) ", hostname,
+ pr_addr(&whereto.sin6_addr, options));
+ if (flowlabel)
+ printf(", flow 0x%05x, ", (unsigned) ntohl(flowlabel));
+ if (device || (options & F_NUMERIC)) {
+ printf("from %s %s: ",
+ pr_addr_n(&source.sin6_addr), device ? : "");
+ }
+ printf("%d data bytes\n", datalen);
+
+ setup(icmp_sock, options, uid, timeout, preload, interval, datalen,
+ (char *) outpack, &ident, &start_time, &screen_width,
+ &deadline);
+
+ main_loop(item, icmp_sock, preload, packet, packlen, cmsglen,
+ (char *) cmsgbuf, &whereto, options, uid, hostname,
+ interval, datalen, timing, working_recverr,
+ (char *) outpack, &ident, &start_time, &screen_width,
+ &deadline);
+
+ }
+ return;
+}
+
+void
+init_resultsTable(struct pingCtlTable_data *item)
+{
+ struct pingResultsTable_data *StorageTmp = NULL;
+ struct pingResultsTable_data *StorageNew = NULL;
+ struct addrinfo *ai = NULL;
+ char *host = NULL;
+ netsnmp_variable_list *vars = NULL;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlOwnerIndex, item->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlTestName, item->pingCtlTestNameLen); /* pingCtlTestName */
+
+
+ if ((StorageNew =
+ header_complex_get(pingResultsTableStorage, vars)) != NULL) {
+ StorageNew->pingResultsSendProbes = 0;
+ StorageNew->pingResultsProbeResponses = 0;
+ return;
+
+ }
+ ai = malloc(sizeof(struct addrinfo));
+ host = item->pingCtlTargetAddress;
+ ai = host_serv(host, NULL, 0, 0);
+ StorageTmp = SNMP_MALLOC_STRUCT(pingResultsTable_data);
+
+ StorageTmp->pingCtlOwnerIndex =
+ (char *) malloc(item->pingCtlOwnerIndexLen + 1);
+ memcpy(StorageTmp->pingCtlOwnerIndex, item->pingCtlOwnerIndex,
+ item->pingCtlOwnerIndexLen + 1);
+ StorageTmp->pingCtlOwnerIndex[item->pingCtlOwnerIndexLen] = '\0';
+ StorageTmp->pingCtlOwnerIndexLen = item->pingCtlOwnerIndexLen;
+
+ StorageTmp->pingCtlTestName =
+ (char *) malloc(item->pingCtlTestNameLen + 1);
+ memcpy(StorageTmp->pingCtlTestName, item->pingCtlTestName,
+ item->pingCtlTestNameLen + 1);
+ StorageTmp->pingCtlTestName[item->pingCtlTestNameLen] = '\0';
+ StorageTmp->pingCtlTestNameLen = item->pingCtlTestNameLen;
+
+ StorageTmp->pingResultsOperStatus = 1;
+
+ if (item->pingCtlTargetAddressType == 1
+ || item->pingCtlTargetAddressType == 16) {
+ if (ai == NULL) {
+ StorageTmp->pingResultsIpTargetAddressType = 0;
+ StorageTmp->pingResultsIpTargetAddress = strdup("");
+ StorageTmp->pingResultsIpTargetAddressLen = 0;
+ } else {
+ StorageTmp->pingResultsIpTargetAddressType = 1;
+ StorageTmp->pingResultsIpTargetAddress =
+ (char *)
+ malloc(strlen(sock_ntop_host(ai->ai_addr, ai->ai_addrlen))
+ + 1);
+ StorageTmp->pingResultsIpTargetAddress =
+ strdup(sock_ntop_host(ai->ai_addr, ai->ai_addrlen));
+ StorageTmp->
+ pingResultsIpTargetAddress[strlen
+ (sock_ntop_host
+ (ai->ai_addr,
+ ai->ai_addrlen))] = '\0';
+ StorageTmp->pingResultsIpTargetAddressLen =
+ strlen(sock_ntop_host(ai->ai_addr, ai->ai_addrlen));
+ }
+ }
+ if (item->pingCtlTargetAddressType == 2) {
+
+ struct sockaddr_in6 whereto; /* Who to try to reach */
+ register struct sockaddr_in6 *to =
+ (struct sockaddr_in6 *) &whereto;
+ struct hostent *hp = NULL;
+ char pa[64];
+
+ to->sin6_family = AF_INET6;
+ to->sin6_port = htons(33434);
+
+ if (inet_pton(AF_INET6, host, &to->sin6_addr) > 0) {
+ StorageTmp->pingResultsIpTargetAddressType = 2;
+ StorageTmp->pingResultsIpTargetAddress =
+ (char *) malloc(strlen(host) + 1);
+ StorageTmp->pingResultsIpTargetAddress = strdup(host);
+ StorageTmp->pingResultsIpTargetAddress[strlen(host)] = '\0';
+ StorageTmp->pingResultsIpTargetAddressLen = strlen(host);
+ } else {
+ hp = gethostbyname2(host, AF_INET6);
+ if (hp != NULL) {
+ const char *hostname = NULL;
+ memmove((caddr_t) & to->sin6_addr, hp->h_addr, 16);
+ hostname = inet_ntop(AF_INET6, &to->sin6_addr, pa, 64);
+ StorageTmp->pingResultsIpTargetAddressType = 2;
+ StorageTmp->pingResultsIpTargetAddress =
+ (char *) malloc(strlen(hostname) + 1);
+ StorageTmp->pingResultsIpTargetAddress = strdup(hostname);
+ StorageTmp->pingResultsIpTargetAddress[strlen(hostname)] =
+ '\0';
+ StorageTmp->pingResultsIpTargetAddressLen =
+ strlen(hostname);
+ } else {
+ (void) fprintf(stderr,
+ "traceroute: unknown host %s\n", host);
+ StorageTmp->pingResultsIpTargetAddressType = 0;
+ StorageTmp->pingResultsIpTargetAddress = strdup("");
+ StorageTmp->pingResultsIpTargetAddressLen = 0;
+ }
+ }
+ }
+
+
+ StorageTmp->pingResultsMinRtt = 0;
+ StorageTmp->pingResultsMaxRtt = 0;
+ StorageTmp->pingResultsAverageRtt = 0;
+ StorageTmp->pingResultsProbeResponses = 0;
+ StorageTmp->pingResultsSendProbes = 0;
+ StorageTmp->pingResultsRttSumOfSquares = 0;
+
+ StorageTmp->pingResultsLastGoodProbe = strdup("");
+ StorageTmp->pingResultsLastGoodProbeLen = 0;
+
+ item->pingResults = StorageTmp;
+ if (item->pingProbeHistoryMaxIndex == 0) {
+ if (item->pingResults != NULL) {
+ if (pingResultsTable_add(item) != SNMPERR_SUCCESS) {
+ DEBUGMSGTL(("pingResultsTable", "init an entry error\n"));
+ }
+ }
+ }
+ SNMP_FREE(ai);
+ ai = NULL;
+
+}
+
+
+int
+modify_ResultsOper(struct pingCtlTable_data *thedata, long val)
+{
+ netsnmp_variable_list *vars = NULL;
+ struct pingResultsTable_data *StorageTmp = NULL;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlOwnerIndex, thedata->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlTestName, thedata->pingCtlTestNameLen); /* pingCtlTestName */
+
+
+ if ((StorageTmp =
+ header_complex_get(pingResultsTableStorage, vars)) == NULL)
+ return SNMP_ERR_NOSUCHNAME;
+ StorageTmp->pingResultsOperStatus = val;
+
+ DEBUGMSGTL(("pingResultsOperStatus", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+int
+pingResultsTable_del(struct pingCtlTable_data *thedata)
+{
+ struct header_complex_index *hciptr2 = NULL;
+ struct pingResultsTable_data *StorageDel = NULL;
+ netsnmp_variable_list *vars = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlOwnerIndex, thedata->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlTestName, thedata->pingCtlTestNameLen); /* pingCtlOperationName */
+
+ header_complex_generate_oid(newoid, &newoid_len, NULL, 0, vars);
+
+ for (hciptr2 = pingResultsTableStorage; hciptr2 != NULL;
+ hciptr2 = hciptr2->next) {
+ if (snmp_oid_compare(newoid, newoid_len, hciptr2->name, newoid_len)
+ == 0) {
+ StorageDel =
+ header_complex_extract_entry(&pingResultsTableStorage,
+ hciptr2);
+ if (StorageDel != NULL) {
+ SNMP_FREE(StorageDel->pingCtlOwnerIndex);
+ SNMP_FREE(StorageDel->pingCtlTestName);
+ SNMP_FREE(StorageDel->pingResultsIpTargetAddress);
+ SNMP_FREE(StorageDel->pingResultsLastGoodProbe);
+ SNMP_FREE(StorageDel);
+ }
+ DEBUGMSGTL(("pingResultsTable", "delete success!\n"));
+
+ }
+ }
+ return SNMPERR_SUCCESS;
+}
+
+
+int
+pingProbeHistoryTable_del(struct pingCtlTable_data *thedata)
+{
+ struct header_complex_index *hciptr2 = NULL;
+ struct pingProbeHistoryTable_data *StorageDel = NULL;
+ netsnmp_variable_list *vars = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlOwnerIndex, thedata->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlTestName, thedata->pingCtlTestNameLen); /* pingCtlOperationName */
+
+ header_complex_generate_oid(newoid, &newoid_len, NULL, 0, vars);
+
+ for (hciptr2 = pingProbeHistoryTableStorage; hciptr2 != NULL;
+ hciptr2 = hciptr2->next) {
+ if (snmp_oid_compare(newoid, newoid_len, hciptr2->name, newoid_len)
+ == 0) {
+ StorageDel =
+ header_complex_extract_entry(&pingProbeHistoryTableStorage,
+ hciptr2);
+ if (StorageDel != NULL) {
+ SNMP_FREE(StorageDel->pingCtlOwnerIndex);
+ SNMP_FREE(StorageDel->pingCtlTestName);
+ SNMP_FREE(StorageDel->pingProbeHistoryTime);
+ SNMP_FREE(StorageDel);
+ }
+ DEBUGMSGTL(("pingProbeHistoryTable", "delete success!\n"));
+
+ }
+ }
+ return SNMPERR_SUCCESS;
+}
+
+
+int
+write_pingCtlTargetAddressType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "write_pingCtlTargetAddressType entering action=%d... \n",
+ action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlTargetAddressType not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlTargetAddressType;
+ StorageTmp->pingCtlTargetAddressType = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlTargetAddressType = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_pingCtlTargetAddress(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ static size_t tmplen;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlTargetAddress not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlTargetAddress;
+ tmplen = StorageTmp->pingCtlTargetAddressLen;
+
+ StorageTmp->pingCtlTargetAddress =
+ (char *) malloc(var_val_len + 1);
+ if (StorageTmp->pingCtlTargetAddress == NULL) {
+ exit(1);
+ }
+ memcpy(StorageTmp->pingCtlTargetAddress, var_val, var_val_len);
+ StorageTmp->pingCtlTargetAddress[var_val_len] = '\0';
+ StorageTmp->pingCtlTargetAddressLen = var_val_len;
+
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->pingCtlTargetAddress);
+ StorageTmp->pingCtlTargetAddress = NULL;
+ StorageTmp->pingCtlTargetAddress = tmpvar;
+ StorageTmp->pingCtlTargetAddressLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_pingCtlDataSize(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "pingCtlDataSize entering action=%d... \n", action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlDataSize not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlDataSize;
+ if ((*((long *) var_val)) >= 0 && (*((long *) var_val)) <= 65507)
+ StorageTmp->pingCtlDataSize = *((long *) var_val);
+ else
+ StorageTmp->pingCtlDataSize = 56;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlDataSize = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_pingCtlTimeOut(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "pingCtlTimeOut entering action=%d... \n", action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlDataSize not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlTimeOut;
+ if ((*((long *) var_val)) >= 1 && (*((long *) var_val)) <= 60)
+ StorageTmp->pingCtlTimeOut = *((long *) var_val);
+ else
+ StorageTmp->pingCtlTimeOut = 3;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlTimeOut = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+
+int
+write_pingCtlProbeCount(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "pingCtlProbeCount entering action=%d... \n", action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlDataSize not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlProbeCount;
+
+ if ((*((long *) var_val)) >= 1 && (*((long *) var_val)) <= 15)
+ StorageTmp->pingCtlProbeCount = *((long *) var_val);
+ else
+ StorageTmp->pingCtlProbeCount = 15;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlProbeCount = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_pingCtlAdminStatus(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "pingCtlAdminStatus entering action=%d... \n", action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlTargetAddressType not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlAdminStatus;
+ StorageTmp->pingCtlAdminStatus = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlAdminStatus = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ if (StorageTmp->pingCtlAdminStatus == 1
+ && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ StorageTmp->pingResults->pingResultsOperStatus = 1;
+ modify_ResultsOper(StorageTmp, 1);
+ if (StorageTmp->pingCtlFrequency != 0)
+ StorageTmp->timer_id =
+ snmp_alarm_register(StorageTmp->pingCtlFrequency,
+ SA_REPEAT, run_ping, StorageTmp);
+ else
+ StorageTmp->timer_id = snmp_alarm_register(1, (int) NULL,
+ run_ping,
+ StorageTmp);
+
+ } else if (StorageTmp->pingCtlAdminStatus == 2
+ && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ snmp_alarm_unregister(StorageTmp->timer_id);
+ StorageTmp->pingResults->pingResultsOperStatus = 2;
+ modify_ResultsOper(StorageTmp, 2);
+ }
+
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_pingCtlDataFill(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ static size_t tmplen;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlTargetAddress not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlDataFill;
+ tmplen = StorageTmp->pingCtlDataFillLen;
+ StorageTmp->pingCtlDataFill = (char *) malloc(var_val_len + 1);
+ if (StorageTmp->pingCtlDataFill == NULL) {
+ exit(1);
+ }
+ memcpy(StorageTmp->pingCtlDataFill, var_val, var_val_len);
+ StorageTmp->pingCtlDataFill[var_val_len] = '\0';
+ StorageTmp->pingCtlDataFillLen = var_val_len;
+
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->pingCtlDataFill);
+ StorageTmp->pingCtlDataFill = NULL;
+ StorageTmp->pingCtlDataFill = tmpvar;
+ StorageTmp->pingCtlDataFillLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+write_pingCtlFrequency(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "pingCtlFrequency entering action=%d... \n", action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlDataSize not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlFrequency;
+ StorageTmp->pingCtlFrequency = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlFrequency = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+write_pingCtlMaxRows(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "pingCtlMaxRows entering action=%d... \n", action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlMaxRows not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlMaxRows;
+ StorageTmp->pingCtlMaxRows = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlMaxRows = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_pingCtlStorageType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "pingCtlStorageType entering action=%d... \n", action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlStorageType not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlStorageType;
+ StorageTmp->pingCtlStorageType = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlStorageType = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_pingCtlTrapGeneration(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ static size_t tmplen;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlTargetAddress not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlTrapGeneration;
+ tmplen = StorageTmp->pingCtlTrapGenerationLen;
+
+ StorageTmp->pingCtlTrapGeneration =
+ (char *) malloc(var_val_len + 1);
+ if (StorageTmp->pingCtlTrapGeneration == NULL) {
+ exit(1);
+ }
+ memcpy(StorageTmp->pingCtlTrapGeneration, var_val, var_val_len);
+ StorageTmp->pingCtlTrapGeneration[var_val_len] = '\0';
+ StorageTmp->pingCtlTrapGenerationLen = var_val_len;
+
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->pingCtlTrapGeneration);
+ StorageTmp->pingCtlTrapGeneration = NULL;
+ StorageTmp->pingCtlTrapGeneration = tmpvar;
+ StorageTmp->pingCtlTrapGenerationLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_pingCtlTrapProbeFailureFilter(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "pingCtlTrapProbeFailureFilter entering action=%d... \n",
+ action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlTrapProbeFailureFilter not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlTrapProbeFailureFilter;
+
+ if ((*((long *) var_val)) >= 0 && (*((long *) var_val)) <= 15)
+ StorageTmp->pingCtlTrapProbeFailureFilter =
+ *((long *) var_val);
+ else
+ StorageTmp->pingCtlTrapProbeFailureFilter = 1;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlTrapProbeFailureFilter = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+write_pingCtlTrapTestFailureFilter(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "pingCtlTrapTestFailureFilter entering action=%d... \n",
+ action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlTrapTestFailureFilter not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlTrapTestFailureFilter;
+
+ if ((*((long *) var_val)) >= 0 && (*((long *) var_val)) <= 15)
+ StorageTmp->pingCtlTrapTestFailureFilter = *((long *) var_val);
+ else
+ StorageTmp->pingCtlTrapTestFailureFilter = 1;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlTrapTestFailureFilter = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+
+int
+write_pingCtlType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static oid *tmpvar;
+ static size_t tmplen;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OBJECT_ID) {
+ snmp_log(LOG_ERR, "write to pingCtlType not ASN_OBJECT_ID\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlType;
+ tmplen = StorageTmp->pingCtlTypeLen;
+
+ StorageTmp->pingCtlType = (oid *) malloc(var_val_len);
+ if (StorageTmp->pingCtlType == NULL) {
+ exit(1);
+ }
+ memcpy(StorageTmp->pingCtlType, var_val, var_val_len);
+
+ StorageTmp->pingCtlTypeLen = var_val_len / sizeof(oid);
+
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->pingCtlType);
+ StorageTmp->pingCtlType = NULL;
+ StorageTmp->pingCtlType = tmpvar;
+ StorageTmp->pingCtlTypeLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_pingCtlDescr(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ static size_t tmplen;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR, "write to pingCtlDescr not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlDescr;
+ tmplen = StorageTmp->pingCtlDescrLen;
+
+ StorageTmp->pingCtlDescr = (char *) malloc(var_val_len + 1);
+ if (StorageTmp->pingCtlDescr == NULL) {
+ exit(1);
+ }
+ memcpy(StorageTmp->pingCtlDescr, var_val, var_val_len);
+ StorageTmp->pingCtlDescr[var_val_len] = '\0';
+ StorageTmp->pingCtlDescrLen = var_val_len;
+
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->pingCtlDescr);
+ StorageTmp->pingCtlDescr = NULL;
+ StorageTmp->pingCtlDescr = tmpvar;
+ StorageTmp->pingCtlDescrLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+write_pingCtlSourceAddressType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "pingCtlSourceAddressType entering action=%d... \n",
+ action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlSourceAddressType not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlSourceAddressType;
+ StorageTmp->pingCtlSourceAddressType = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlSourceAddressType = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_pingCtlSourceAddress(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ static size_t tmplen;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlSourceAddress not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlSourceAddress;
+ tmplen = StorageTmp->pingCtlSourceAddressLen;
+
+ StorageTmp->pingCtlSourceAddress =
+ (char *) malloc(var_val_len + 1);
+ if (StorageTmp->pingCtlSourceAddress == NULL) {
+ exit(1);
+ }
+ memcpy(StorageTmp->pingCtlSourceAddress, var_val, var_val_len);
+ StorageTmp->pingCtlSourceAddress[var_val_len] = '\0';
+ StorageTmp->pingCtlSourceAddressLen = var_val_len;
+
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->pingCtlSourceAddress);
+ StorageTmp->pingCtlSourceAddress = NULL;
+ StorageTmp->pingCtlSourceAddress = tmpvar;
+ StorageTmp->pingCtlSourceAddressLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_pingCtlIfIndex(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "pingCtlIfIndex entering action=%d... \n", action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR, "write to pingCtlIfIndex not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlIfIndex;
+ StorageTmp->pingCtlIfIndex = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlIfIndex = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_pingCtlByPassRouteTable(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "pingCtlByPassRouteTable entering action=%d... \n",
+ action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlByPassRouteTable not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlByPassRouteTable;
+ StorageTmp->pingCtlByPassRouteTable = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlByPassRouteTable = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+
+int
+write_pingCtlDSField(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+
+
+ DEBUGMSGTL(("pingCtlTable",
+ "pingCtlDSField entering action=%d... \n", action));
+
+ if ((StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to pingCtlDSField not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->pingCtlDSField;
+ StorageTmp->pingCtlDSField = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->pingCtlDSField = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+write_pingCtlRowStatus(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ struct pingCtlTable_data *StorageTmp = NULL;
+ static struct pingCtlTable_data *StorageNew, *StorageDel;
+ size_t newlen =
+ name_len - (sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 3 - 1);
+ static int old_value;
+ int set_value;
+ static netsnmp_variable_list *vars, *vp;
+ struct header_complex_index *hciptr = NULL;
+
+ DEBUGMSGTL(("pingCtlTable",
+ "var_pingCtlTable: Entering... action=%ul\n", action));
+ StorageTmp =
+ header_complex(pingCtlTableStorage, NULL,
+ &name[sizeof(pingCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL, NULL);
+
+ if (var_val_type != ASN_INTEGER || var_val == NULL) {
+ snmp_log(LOG_ERR, "write to pingCtlRowStatus not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ set_value = *((long *) var_val);
+
+
+ /*
+ * check legal range, and notReady is reserved for us, not a user
+ */
+ if (set_value < 1 || set_value > 6 || set_value == RS_NOTREADY)
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+
+ switch (action) {
+ case RESERVE1:
+ /*
+ * stage one: test validity
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * create the row now?
+ */
+
+
+ /*
+ * ditch illegal values now
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE) {
+
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+
+ /*
+ * destroying a non-existent row is actually legal
+ */
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+
+
+ /*
+ * illegal creation values
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE) {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ } else {
+ /*
+ * row exists. Check for a valid state change
+ */
+ if (set_value == RS_CREATEANDGO
+ || set_value == RS_CREATEANDWAIT) {
+ /*
+ * can't create a row that exists
+ */
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+
+ /*
+ * XXX: interaction with row storage type needed
+ */
+
+ if (StorageTmp->pingCtlRowStatus == RS_ACTIVE &&
+ set_value != RS_DESTROY) {
+ /*
+ * "Once made active an entry may not be modified except to
+ * delete it." XXX: doesn't this in fact apply to ALL
+ * columns of the table and not just this one?
+ */
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE)
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+
+
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ if (StorageTmp == NULL) {
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+ /*
+ * creation
+ */
+ vars = NULL;
+
+ /*
+ * ½«nameΪ¿ÕµÄÈý¸öË÷Òý×ֶμӵ½var±äÁ¿ÁбíµÄĩβ
+ */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0); /* pingCtlTestName */
+
+ if (header_complex_parse_oid
+ (&
+ (name
+ [sizeof(pingCtlTable_variables_oid) / sizeof(oid) +
+ 2]), newlen, vars) != SNMPERR_SUCCESS) {
+ /*
+ * XXX: free, zero vars
+ */
+ /* snmp_free_varbind(vars); */
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+ vp = vars;
+
+ StorageNew = create_pingCtlTable_data();
+ if (vp->val_len <= 32) {
+ StorageNew->pingCtlOwnerIndex = malloc(vp->val_len + 1);
+ memcpy(StorageNew->pingCtlOwnerIndex, vp->val.string,
+ vp->val_len);
+ StorageNew->pingCtlOwnerIndex[vp->val_len] = '\0';
+ StorageNew->pingCtlOwnerIndexLen = vp->val_len;
+ } else {
+ StorageNew->pingCtlOwnerIndex = malloc(33);
+ memcpy(StorageNew->pingCtlOwnerIndex, vp->val.string, 32);
+ StorageNew->pingCtlOwnerIndex[32] = '\0';
+ StorageNew->pingCtlOwnerIndexLen = 32;
+ }
+
+ vp = vp->next_variable;
+
+ if (vp->val_len <= 32) {
+ StorageNew->pingCtlTestName = malloc(vp->val_len + 1);
+ memcpy(StorageNew->pingCtlTestName, vp->val.string,
+ vp->val_len);
+ StorageNew->pingCtlTestName[vp->val_len] = '\0';
+ StorageNew->pingCtlTestNameLen = vp->val_len;
+ } else {
+ StorageNew->pingCtlTestName = malloc(33);
+ memcpy(StorageNew->pingCtlTestName, vp->val.string, 32);
+ StorageNew->pingCtlTestName[32] = '\0';
+ StorageNew->pingCtlTestNameLen = 32;
+ }
+ vp = vp->next_variable;
+
+ /*
+ * XXX: fill in default row values here into StorageNew
+ */
+
+ StorageNew->pingCtlRowStatus = set_value;
+
+
+ /*
+ * XXX: free, zero vars, no longer needed?
+ */
+ /* snmp_free_varbind(vars); */
+ }
+
+
+ break;
+
+
+
+
+ case FREE:
+ /*
+ * XXX: free, zero vars
+ */
+
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in set_value for you to
+ * use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in
+ * the UNDO case
+ */
+
+ if (StorageTmp == NULL) {
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+ /*
+ * row creation, so add it
+ */
+ if (StorageNew != NULL)
+#if 1
+ DEBUGMSGTL(("pingCtlTable",
+ "write_pingCtlRowStatus entering new=%d... \n",
+ action));
+#endif
+ pingCtlTable_add(StorageNew);
+ /*
+ * XXX: ack, and if it is NULL?
+ */
+ } else if (set_value != RS_DESTROY) {
+ /*
+ * set the flag?
+ */
+ old_value = StorageTmp->pingCtlRowStatus;
+ StorageTmp->pingCtlRowStatus = *((long *) var_val);
+ } else {
+ /*
+ * destroy... extract it for now
+ */
+
+ hciptr =
+ header_complex_find_entry(pingCtlTableStorage, StorageTmp);
+ StorageDel =
+ header_complex_extract_entry(&pingCtlTableStorage, hciptr);
+ snmp_alarm_unregister(StorageDel->timer_id);
+
+ pingResultsTable_del(StorageTmp);
+ pingProbeHistoryTable_del(StorageTmp);
+ }
+ break;
+
+
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ if (StorageTmp == NULL) {
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+ /*
+ * row creation, so remove it again
+ */
+ hciptr =
+ header_complex_find_entry(pingCtlTableStorage, StorageNew);
+ StorageDel =
+ header_complex_extract_entry(&pingCtlTableStorage, hciptr);
+
+ /*
+ * XXX: free it
+ */
+ } else if (StorageDel != NULL) {
+ /*
+ * row deletion, so add it again
+ */
+ pingCtlTable_add(StorageDel);
+ pingResultsTable_add(StorageDel);
+ pingProbeHistoryTable_addall(StorageDel);
+ } else {
+ StorageTmp->pingCtlRowStatus = old_value;
+ }
+ break;
+
+
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ if (StorageTmp == NULL) {
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+ }
+
+ if (StorageDel != NULL) {
+ /*
+ * if(strlen(StorageDel->pingCtlOwnerIndex)!=0)
+ * SNMP_FREE(StorageDel->pingCtlOwnerIndex);
+ * printf("COMMIT1 \n");
+ * if(strlen(StorageDel->pingCtlTestName)!=0)
+ * SNMP_FREE(StorageDel->pingCtlTestName);
+ * printf("COMMIT2 \n");
+ * if(strlen(StorageDel->pingCtlTargetAddress)!=0)
+ * SNMP_FREE(StorageDel->pingCtlTargetAddress);
+ * printf("COMMIT3 \n");
+ * if(strlen(StorageDel->pingCtlDataFill)!=0)
+ * SNMP_FREE(StorageDel->pingCtlDataFill);
+ * printf("COMMIT4 \n");
+ * if(strlen(StorageDel->pingCtlTrapGeneration)!=0)
+ * SNMP_FREE(StorageDel->pingCtlTrapGeneration);
+ * printf("COMMIT5 \n");
+ * if(StorageDel->pingCtlTypeLen!=0)
+ * SNMP_FREE(StorageDel->pingCtlType);
+ * printf("COMMIT6 \n");
+ * if(strlen(StorageDel->pingCtlDescr)!=0)
+ * SNMP_FREE(StorageDel->pingCtlDescr);
+ * printf("COMMIT7 \n");
+ * if(strlen(StorageDel->pingCtlSourceAddress)!=0)
+ * SNMP_FREE(StorageDel->pingCtlSourceAddress);
+ * printf("COMMIT8 \n");
+ */
+ StorageDel = NULL;
+ /* StorageDel = 0; */
+ /*
+ * XXX: free it, its dead
+ */
+ } else {
+ if (StorageTmp
+ && StorageTmp->pingCtlRowStatus == RS_CREATEANDGO) {
+ StorageTmp->pingCtlRowStatus = RS_ACTIVE;
+ } else if (StorageTmp &&
+ StorageTmp->pingCtlRowStatus == RS_CREATEANDWAIT) {
+ DEBUGMSGTL(("pingCtlTable",
+ "write_pingCtlRowStatus entering pingCtlRowStatus=%ld... \n",
+ StorageTmp->pingCtlRowStatus));
+
+ StorageTmp->pingCtlRowStatus = RS_NOTINSERVICE;
+ }
+ }
+ if (StorageTmp && StorageTmp->pingCtlRowStatus == RS_ACTIVE) {
+#if 1
+ DEBUGMSGTL(("pingCtlTable",
+ "write_pingCtlRowStatus entering runbefore \n"));
+
+#endif
+
+ if (StorageTmp->pingCtlAdminStatus == 1) {
+ init_resultsTable(StorageTmp);
+ if (StorageTmp->pingCtlFrequency != 0)
+ StorageTmp->timer_id =
+ snmp_alarm_register(StorageTmp->pingCtlFrequency,
+ SA_REPEAT, run_ping,
+ StorageTmp);
+ else
+ StorageTmp->timer_id =
+ snmp_alarm_register(1, (int) NULL, run_ping,
+ StorageTmp);
+
+ }
+
+ }
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+static inline void
+tvsub(struct timeval *out, struct timeval *in)
+{
+ if ((out->tv_usec -= in->tv_usec) < 0) {
+ --out->tv_sec;
+ out->tv_usec += 1000000;
+ }
+ out->tv_sec -= in->tv_sec;
+}
+
+
+static inline int
+schedule_exit(int next, int *deadline, long *npackets, long *nreceived,
+ long *ntransmitted, long *tmax)
+{
+ if ((*npackets) && (*ntransmitted) >= (*npackets) && !(*deadline))
+ next = __schedule_exit(next, nreceived, tmax);
+ return next;
+}
+
+static inline int
+in_flight(__u16 * acked, long *nreceived, long *ntransmitted,
+ long *nerrors)
+{
+ __u16 diff = (__u16) (*ntransmitted) - (*acked);
+ return (diff <=
+ 0x7FFF) ? diff : (*ntransmitted) - (*nreceived) - (*nerrors);
+}
+
+static inline void
+acknowledge(__u16 seq, __u16 * acked, long *ntransmitted, int *pipesize)
+{
+ __u16 diff = (__u16) (*ntransmitted) - seq;
+ if (diff <= 0x7FFF) {
+ if ((int) diff + 1 > (*pipesize))
+ (*pipesize) = (int) diff + 1;
+ if ((__s16) (seq - (*acked)) > 0 ||
+ (__u16) (*ntransmitted) - (*acked) > 0x7FFF)
+ *acked = seq;
+ }
+}
+
+static inline void
+advance_ntransmitted(__u16 * acked, long *ntransmitted)
+{
+ (*ntransmitted)++;
+ /*
+ * Invalidate acked, if 16 bit seq overflows.
+ */
+ if ((__u16) (*ntransmitted) - (*acked) > 0x7FFF)
+ *acked = (__u16) (*ntransmitted) + 1;
+}
+
+
+static inline void
+update_interval(int uid, int interval, int *rtt_addend, int *rtt)
+{
+ int est = (*rtt) ? (*rtt) / 8 : interval * 1000;
+
+ interval = (est + (*rtt_addend) + 500) / 1000;
+ if (uid && interval < MINUSERINTERVAL)
+ interval = MINUSERINTERVAL;
+}
+
+
+
+int
+__schedule_exit(int next, long *nreceived, long *tmax)
+{
+ unsigned long waittime;
+ struct itimerval it;
+
+ if (*nreceived) {
+ waittime = 2 * (*tmax);
+ if (waittime < 1000000)
+ waittime = 1000000;
+ } else
+ waittime = MAXWAIT * 1000000;
+
+ if (next < 0 || next < waittime / 1000)
+ next = waittime / 1000;
+
+ it.it_interval.tv_sec = 0;
+ it.it_interval.tv_usec = 0;
+ it.it_value.tv_sec = waittime / 1000000;
+ it.it_value.tv_usec = waittime % 1000000;
+ /* setitimer(ITIMER_REAL, &it, NULL); */
+ return next;
+}
+
+
+/*
+ * pinger --
+ * Compose and transmit an ICMP ECHO REQUEST packet. The IP packet
+ * will be added on by the kernel. The ID field is our UNIX process ID,
+ * and the sequence number is an ascending integer. The first 8 bytes
+ * of the data portion are used to hold a UNIX "timeval" struct in VAX
+ * byte-order, to compute the round-trip time.
+ */
+
+int
+pinger(int icmp_sock, int preload, int cmsglen, char *cmsgbuf,
+ struct sockaddr_in6 *whereto, int *rtt_addend, int options, int uid,
+ int interval, int datalen, int timing, char *outpack, int *rtt,
+ int *ident, int *screen_width, int *deadline, __u16 * acked,
+ long *npackets, long *nreceived, long *ntransmitted, long *nerrors,
+ int *confirm_flag, int *confirm, int *pipesize,
+ struct timeval *cur_time)
+{
+ static int tokens;
+ int i;
+
+ /*
+ * Have we already sent enough? If we have, return an arbitrary positive value.
+ */
+
+ if (exiting
+ || ((*npackets) && (*ntransmitted) >= (*npackets)
+ && !(*deadline))) {
+
+ return 1000;
+ }
+ /*
+ * Check that packets < rate*time + preload
+ */
+ if ((*cur_time).tv_sec == 0) {
+
+ gettimeofday(cur_time, NULL);
+ tokens = interval * (preload - 1);
+ } else {
+ long ntokens;
+ struct timeval tv;
+
+ gettimeofday(&tv, NULL);
+ ntokens = (tv.tv_sec - (*cur_time).tv_sec) * 1000 +
+ (tv.tv_usec - (*cur_time).tv_usec) / 1000;
+ if (!interval) {
+ /*
+ * Case of unlimited flood is special;
+ * * if we see no reply, they are limited to 100pps
+ */
+ if (ntokens < MININTERVAL
+ && in_flight(acked, nreceived, ntransmitted,
+ nerrors) >= preload)
+ return MININTERVAL - ntokens;
+ }
+ ntokens += tokens;
+
+ if (ntokens > interval * preload)
+ ntokens = interval * preload;
+
+ if (ntokens < interval) {
+ return interval - ntokens;
+ }
+ *cur_time = tv;
+ tokens = ntokens - interval;
+ }
+
+ resend:
+ i = send_v6(icmp_sock, cmsglen, cmsgbuf, whereto, datalen, timing,
+ outpack, ident, ntransmitted, confirm);
+
+ if (i == 0) {
+ advance_ntransmitted(acked, ntransmitted);
+ if (!(options & F_QUIET) && (options & F_FLOOD)) {
+ /*
+ * Very silly, but without this output with
+ * * high preload or pipe size is very confusing.
+ */
+ if ((preload < (*screen_width)
+ && (*pipesize) < (*screen_width))
+ || in_flight(acked, nreceived, ntransmitted,
+ nerrors) < (*screen_width))
+ write(STDOUT_FILENO, ".", 1);
+ }
+
+ return interval - tokens;
+ }
+
+ /*
+ * And handle various errors...
+ */
+ if (i > 0) {
+ /*
+ * Apparently, it is some fatal bug.
+ */
+ abort();
+ } else if (errno == ENOBUFS || errno == ENOMEM) {
+ /*
+ * Device queue overflow or OOM. Packet is not sent.
+ */
+ tokens = 0;
+ /*
+ * Slowdown. This works only in adaptive mode (option -A)
+ */
+ (*rtt_addend) += ((*rtt) < 8 * 50000 ? (*rtt) / 8 : 50000);
+ if (options & F_ADAPTIVE)
+ update_interval(uid, interval, rtt_addend, rtt);
+
+ return SCHINT(interval);
+ } else if (errno == EAGAIN) {
+ /*
+ * Socket buffer is full.
+ */
+ tokens += interval;
+
+ return MININTERVAL;
+ } else {
+ if ((i =
+ receive_error_msg(icmp_sock, whereto, options, ident,
+ nerrors)) > 0) {
+ /*
+ * An ICMP error arrived.
+ */
+ tokens += interval;
+
+ return MININTERVAL;
+ }
+ /*
+ * Compatibility with old linuces.
+ */
+ if (i == 0 && (*confirm_flag) && errno == EINVAL) {
+ *confirm_flag = 0;
+ errno = 0;
+ }
+ if (!errno)
+ goto resend;
+
+ /*
+ * Hard local error. Pretend we sent packet.
+ */
+ advance_ntransmitted(acked, ntransmitted);
+
+ if (i == 0 && !(options & F_QUIET)) {
+ if (options & F_FLOOD)
+ write(STDOUT_FILENO, "E", 1);
+ else
+ perror("ping: sendmsg");
+ }
+ tokens = 0;
+
+ return SCHINT(interval);
+ }
+}
+
+/*
+ * Set socket buffers, "alloc" is an esimate of memory taken by single packet.
+ */
+
+void
+sock_setbufs(int icmp_sock, int alloc, int preload)
+{
+ int rcvbuf, hold;
+ int tmplen = sizeof(hold);
+ int sndbuf;
+
+ if (!sndbuf)
+ sndbuf = alloc;
+ setsockopt(icmp_sock, SOL_SOCKET, SO_SNDBUF, (char *) &sndbuf,
+ sizeof(sndbuf));
+
+ rcvbuf = hold = alloc * preload;
+ if (hold < 65536)
+ hold = 65536;
+ setsockopt(icmp_sock, SOL_SOCKET, SO_RCVBUF, (char *) &hold,
+ sizeof(hold));
+ if (getsockopt
+ (icmp_sock, SOL_SOCKET, SO_RCVBUF, (char *) &hold, &tmplen) == 0) {
+ if (hold < rcvbuf)
+ fprintf(stderr,
+ "WARNING: probably, rcvbuf is not enough to hold preload.\n");
+ }
+}
+
+/*
+ * Protocol independent setup and parameter checks.
+ */
+
+void
+setup(int icmp_sock, int options, int uid, int timeout, int preload,
+ int interval, int datalen, char *outpack, int *ident,
+ struct timeval *start_time, int *screen_width, int *deadline)
+{
+ int hold;
+ struct timeval tv;
+
+ if ((options & F_FLOOD) && !(options & F_INTERVAL))
+ interval = 0;
+
+ if (uid && interval < MINUSERINTERVAL) {
+ fprintf(stderr,
+ "ping: cannot flood; minimal interval, allowed for user, is %dms\n",
+ MINUSERINTERVAL);
+ return;
+ }
+
+ if (interval >= INT_MAX / preload) {
+ fprintf(stderr, "ping: illegal preload and/or interval\n");
+ return;
+ }
+
+ hold = 1;
+ if (options & F_SO_DEBUG)
+ setsockopt(icmp_sock, SOL_SOCKET, SO_DEBUG, (char *) &hold,
+ sizeof(hold));
+ if (options & F_SO_DONTROUTE)
+ setsockopt(icmp_sock, SOL_SOCKET, SO_DONTROUTE, (char *) &hold,
+ sizeof(hold));
+
+#ifdef SO_TIMESTAMP
+ if (!(options & F_LATENCY)) {
+ int on = 1;
+ if (setsockopt
+ (icmp_sock, SOL_SOCKET, SO_TIMESTAMP, &on, sizeof(on)))
+ fprintf(stderr,
+ "Warning: no SO_TIMESTAMP support, falling back to SIOCGSTAMP\n");
+ }
+#endif
+
+ /*
+ * Set some SNDTIMEO to prevent blocking forever
+ * * on sends, when device is too slow or stalls. Just put limit
+ * * of one second, or "interval", if it is less.
+ */
+ tv.tv_sec = 1;
+ tv.tv_usec = 0;
+ if (interval < 1000) {
+ tv.tv_sec = 0;
+ tv.tv_usec = 1000 * SCHINT(interval);
+ }
+ setsockopt(icmp_sock, SOL_SOCKET, SO_SNDTIMEO, (char *) &tv,
+ sizeof(tv));
+
+ /*
+ * Set RCVTIMEO to "interval". Note, it is just an optimization
+ * * allowing to avoid redundant poll().
+ */
+
+ tv.tv_sec = timeout;
+ tv.tv_usec = 0;
+ if (setsockopt
+ (icmp_sock, SOL_SOCKET, SO_RCVTIMEO, (char *) &tv, sizeof(tv)))
+ options |= F_FLOOD_POLL;
+
+ if (!(options & F_PINGFILLED)) {
+ int i;
+ char *p = outpack + 8;
+
+ /*
+ * Do not forget about case of small datalen,
+ * * fill timestamp area too!
+ */
+ for (i = 0; i < datalen; ++i)
+ *p++ = i;
+ }
+
+ *ident = getpid() & 0xFFFF;
+
+ gettimeofday(start_time, NULL);
+
+ if (*deadline) {
+ struct itimerval it;
+
+ it.it_interval.tv_sec = 0;
+ it.it_interval.tv_usec = 0;
+ it.it_value.tv_sec = (*deadline);
+ it.it_value.tv_usec = 0;
+ }
+
+ if (isatty(STDOUT_FILENO)) {
+ struct winsize w;
+
+ if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1) {
+ if (w.ws_col > 0)
+ *screen_width = w.ws_col;
+ }
+ }
+}
+
+void
+main_loop(struct pingCtlTable_data *item, int icmp_sock, int preload,
+ __u8 * packet, int packlen, int cmsglen, char *cmsgbuf,
+ struct sockaddr_in6 *whereto, int options, int uid,
+ char *hostname, int interval, int datalen, int timing,
+ int working_recverr, char *outpack, int *ident,
+ struct timeval *start_time, int *screen_width, int *deadline)
+{
+ char addrbuf[128];
+ char ans_data[4096];
+ struct iovec iov;
+ struct msghdr msg;
+ struct cmsghdr *c;
+ int cc = 0;
+ int next = 0;
+ int polling = 0;
+ int rtt = 0;
+ int rtt_addend = 0;
+
+ __u16 acked = 0;
+ /*
+ * counters
+ */
+ long npackets = 0; /* max packets to transmit */
+ long nreceived = 0; /* # of packets we got back */
+ long nrepeats = 0; /* number of duplicates */
+ long ntransmitted = 0; /* sequence # for outbound packets = #sent */
+ long nchecksum = 0; /* replies with bad checksum */
+ long nerrors = 0; /* icmp errors */
+
+ /*
+ * timing
+ */
+ long tmin = LONG_MAX; /* minimum round trip time */
+ long tmax = 0; /* maximum round trip time */
+ long long tsum = 0; /* sum of all times, for doing average */
+ long long tsum2 = 0;
+
+ int confirm_flag = MSG_CONFIRM;
+ int confirm = 0;
+
+ int pipesize = -1;
+ struct timeval cur_time;
+ cur_time.tv_sec = 0;
+ cur_time.tv_usec = 0;
+
+ struct pingProbeHistoryTable_data current_temp;
+ static int probeFailed = 0;
+ static int testFailed = 0;
+ static int series = 0;
+
+ iov.iov_base = (char *) packet;
+ npackets = item->pingCtlProbeCount;
+ for (;;) {
+ /*
+ * Check exit conditions.
+ */
+ if (exiting) {
+ break;
+ }
+ if (npackets && nreceived >= npackets) {
+ printf("npackets,nreceived=%d\n", nreceived);
+ break;
+ }
+ if (deadline && nerrors) {
+ printf("deadline\n");
+ break;
+ }
+
+ /*
+ * Check for and do special actions.
+ */
+ if (status_snapshot)
+ status(timing, &rtt, &nreceived, &nrepeats, &ntransmitted,
+ &tmin, &tmax, &tsum, &tsum2);
+
+ /*
+ * Send probes scheduled to this time.
+ */
+ do {
+ printf("pinger\n");
+ next =
+ pinger(icmp_sock, preload, cmsglen, cmsgbuf, whereto,
+ &rtt_addend, uid, options, interval, datalen,
+ timing, outpack, &rtt, ident, screen_width,
+ deadline, &acked, &npackets, &nreceived,
+ &ntransmitted, &nerrors, &confirm_flag, &confirm,
+ &pipesize, &cur_time);
+ printf("1:next=%d\n", next);
+ next =
+ schedule_exit(next, deadline, &npackets, &nreceived,
+ &ntransmitted, &tmax);
+ printf("2:next=%d\n", next);
+ } while (next <= 0);
+
+ /*
+ * "next" is time to send next probe, if positive.
+ * * If next<=0 send now or as soon as possible.
+ */
+
+ /*
+ * Technical part. Looks wicked. Could be dropped,
+ * * if everyone used the newest kernel. :-)
+ * * Its purpose is:
+ * * 1. Provide intervals less than resolution of scheduler.
+ * * Solution: spinning.
+ * * 2. Avoid use of poll(), when recvmsg() can provide
+ * * timed waiting (SO_RCVTIMEO).
+ */
+ polling = 0;
+ if ((options & (F_ADAPTIVE | F_FLOOD_POLL))
+ || next < SCHINT(interval)) {
+ int recv_expected =
+ in_flight(&acked, &nreceived, &ntransmitted, &nerrors);
+
+ /*
+ * If we are here, recvmsg() is unable to wait for
+ * * required timeout.
+ */
+ if (1000 * next <= 1000000 / (int) HZ) {
+ /*
+ * Very short timeout... So, if we wait for
+ * * something, we sleep for MININTERVAL.
+ * * Otherwise, spin!
+ */
+ if (recv_expected) {
+ next = MININTERVAL;
+ } else {
+ next = 0;
+ /*
+ * When spinning, no reasons to poll.
+ * * Use nonblocking recvmsg() instead.
+ */
+ polling = MSG_DONTWAIT;
+ /*
+ * But yield yet.
+ */
+ sched_yield();
+ }
+ }
+
+ if (!polling &&
+ ((options & (F_ADAPTIVE | F_FLOOD_POLL)) || interval)) {
+ struct pollfd pset;
+ pset.fd = icmp_sock;
+ pset.events = POLLIN | POLLERR;
+ pset.revents = 0;
+ if (poll(&pset, 1, next) < 1 ||
+ !(pset.revents & (POLLIN | POLLERR)))
+ continue;
+ polling = MSG_DONTWAIT;
+ }
+ }
+
+ for (;;) {
+ struct timeval *recv_timep = NULL;
+ struct timeval recv_time;
+ int not_ours = 0; /* Raw socket can receive messages
+ * destined to other running pings. */
+
+ iov.iov_len = packlen;
+ msg.msg_name = addrbuf;
+ msg.msg_namelen = sizeof(addrbuf);
+ msg.msg_iov = &iov;
+ msg.msg_iovlen = 1;
+ msg.msg_control = ans_data;
+ msg.msg_controllen = sizeof(ans_data);
+
+ cc = recvmsg(icmp_sock, &msg, polling);
+ time_t timep;
+ time(&timep);
+ polling = MSG_DONTWAIT;
+
+ if (cc < 0) {
+ if (errno == EAGAIN || errno == EINTR)
+ break;
+ if (errno == EWOULDBLOCK) {
+ struct pingResultsTable_data *StorageNew = NULL;
+ struct pingProbeHistoryTable_data *temp = NULL;
+ netsnmp_variable_list *vars = NULL;
+
+
+
+ if (series == 0)
+ probeFailed = 1;
+ else
+ probeFailed = probeFailed + 1;
+ series = 1;
+ testFailed = testFailed + 1;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlOwnerIndex, item->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlTestName, item->pingCtlTestNameLen); /* pingCtlTestName */
+
+
+ if ((StorageNew =
+ header_complex_get(pingResultsTableStorage,
+ vars)) == NULL)
+ return;
+
+ StorageNew->pingResultsSendProbes =
+ StorageNew->pingResultsSendProbes + 1;
+
+ temp = SNMP_MALLOC_STRUCT(pingProbeHistoryTable_data);
+
+ temp->pingCtlOwnerIndex =
+ (char *) malloc(item->pingCtlOwnerIndexLen + 1);
+ memcpy(temp->pingCtlOwnerIndex,
+ item->pingCtlOwnerIndex,
+ item->pingCtlOwnerIndexLen + 1);
+ temp->pingCtlOwnerIndex[item->pingCtlOwnerIndexLen] =
+ '\0';
+ temp->pingCtlOwnerIndexLen =
+ item->pingCtlOwnerIndexLen;
+
+ temp->pingCtlTestName =
+ (char *) malloc(item->pingCtlTestNameLen + 1);
+ memcpy(temp->pingCtlTestName, item->pingCtlTestName,
+ item->pingCtlTestNameLen + 1);
+ temp->pingCtlTestName[item->pingCtlTestNameLen] = '\0';
+ temp->pingCtlTestNameLen = item->pingCtlTestNameLen;
+
+ /* add lock to protect */
+ pthread_mutex_t counter_mutex =
+ PTHREAD_MUTEX_INITIALIZER;
+ pthread_mutex_lock(&counter_mutex);
+ temp->pingProbeHistoryIndex =
+ ++(item->pingProbeHistoryMaxIndex);
+ pthread_mutex_unlock(&counter_mutex);
+ /* end */
+
+ temp->pingProbeHistoryResponse =
+ item->pingCtlTimeOut * 1000;
+ temp->pingProbeHistoryStatus = 4;
+ temp->pingProbeHistoryLastRC = 1;
+
+ temp->pingProbeHistoryTime =
+ (char *) malloc(strlen(asctime(gmtime(&timep))));
+ temp->pingProbeHistoryTime =
+ strdup(asctime(gmtime(&timep)));
+ temp->
+ pingProbeHistoryTime[strlen
+ (asctime(gmtime(&timep))) -
+ 1] = '\0';
+ temp->pingProbeHistoryTimeLen =
+ strlen(asctime(gmtime(&timep))) - 1;
+
+ if (StorageNew->pingResultsSendProbes == 1)
+ item->pingProbeHis = temp;
+ else {
+ (current_temp).next = temp;
+ }
+
+ current_temp = (*temp);
+
+ if (StorageNew->pingResultsSendProbes >=
+ item->pingCtlProbeCount) {
+ current_temp.next = NULL;
+ }
+
+ if (item->pingProbeHis != NULL)
+ if (pingProbeHistoryTable_count(item) <
+ item->pingCtlMaxRows) {
+ if (pingProbeHistoryTable_add(&current_temp) !=
+ SNMPERR_SUCCESS)
+ DEBUGMSGTL(("pingProbeHistoryTable",
+ "registered an entry error\n"));
+ } else {
+ pingProbeHistoryTable_delLast(item);
+ if (pingProbeHistoryTable_add(&current_temp) !=
+ SNMPERR_SUCCESS)
+ DEBUGMSGTL(("pingProbeHistoryTable",
+ "registered an entry error\n"));
+
+ }
+ if ((item->
+ pingCtlTrapGeneration[0] &
+ PINGTRAPGENERATION_PROBEFAILED) != 0) {
+ if (probeFailed >=
+ item->pingCtlTrapProbeFailureFilter)
+ send_ping_trap(item, pingProbeFailed,
+ sizeof(pingProbeFailed) /
+ sizeof(oid));
+ }
+ break;
+ }
+ /* timeout finish */
+ if (!receive_error_msg
+ (icmp_sock, whereto, options, ident, &nerrors)) {
+ if (errno) {
+ perror("ping: recvmsg");
+ break;
+ }
+ not_ours = 1;
+ }
+ } else {
+ printf("cc>=0,else\n");
+#ifdef SO_TIMESTAMP
+ for (c = CMSG_FIRSTHDR(&msg); c; c = CMSG_NXTHDR(&msg, c)) {
+ if (c->cmsg_level != SOL_SOCKET ||
+ c->cmsg_type != SO_TIMESTAMP)
+ continue;
+ if (c->cmsg_len < CMSG_LEN(sizeof(struct timeval)))
+ continue;
+ recv_timep = (struct timeval *) CMSG_DATA(c);
+ }
+#endif
+
+ if ((options & F_LATENCY) || recv_timep == NULL) {
+ if ((options & F_LATENCY) ||
+ ioctl(icmp_sock, SIOCGSTAMP, &recv_time))
+ gettimeofday(&recv_time, NULL);
+ recv_timep = &recv_time;
+ }
+
+ not_ours =
+ parse_reply(&series, item, &msg, cc, addrbuf,
+ recv_timep, timep, uid, whereto,
+ &rtt_addend, options, interval, datalen,
+ timing, working_recverr, outpack, &rtt,
+ ident, &acked, &nreceived, &nrepeats,
+ &ntransmitted, &nchecksum, &nerrors, &tmin,
+ &tmax, &tsum, &tsum2, &confirm_flag,
+ &confirm, &pipesize, &current_temp);
+ }
+
+ /*
+ * See? ... someone runs another ping on this host.
+ */
+ if (not_ours)
+ install_filter(icmp_sock, ident);
+
+ /*
+ * If nothing is in flight, "break" returns us to pinger.
+ */
+ if (in_flight(&acked, &nreceived, &ntransmitted, &nerrors) ==
+ 0)
+ break;
+
+ /*
+ * Otherwise, try to recvmsg() again. recvmsg()
+ * * is nonblocking after the first iteration, so that
+ * * if nothing is queued, it will receive EAGAIN
+ * * and return to pinger.
+ */
+ }
+ }
+
+ if (ntransmitted == item->pingCtlProbeCount) {
+
+ if ((item->
+ pingCtlTrapGeneration[0] & PINGTRAPGENERATION_TESTCOMPLETED)
+ != 0) {
+ send_ping_trap(item, pingTestCompleted,
+ sizeof(pingTestCompleted) / sizeof(oid));
+ } else
+ if ((item->
+ pingCtlTrapGeneration[0] & PINGTRAPGENERATION_TESTFAILED)
+ != 0) {
+
+ if (testFailed >= item->pingCtlTrapTestFailureFilter)
+ send_ping_trap(item, pingTestFailed,
+ sizeof(pingTestFailed) / sizeof(oid));
+ }
+
+ else if ((item->
+ pingCtlTrapGeneration[0] &
+ PINGTRAPGENERATION_PROBEFAILED) != 0) {;
+ } else {
+ ;
+ }
+
+ series = 0;
+ probeFailed = 0;
+ testFailed = 0;
+
+ }
+
+ finish(options, hostname, interval, timing, &rtt, start_time, deadline,
+ &npackets, &nreceived, &nrepeats, &ntransmitted, &nchecksum,
+ &nerrors, &tmin, &tmax, &tsum, &tsum2, &pipesize, &cur_time);
+}
+
+int
+gather_statistics(int *series, struct pingCtlTable_data *item, __u8 * ptr,
+ int cc, __u16 seq, int hops, int csfailed,
+ struct timeval *tv, time_t timep, int *rtt_addend,
+ int uid, int options, char *from, int interval,
+ int datalen, int timing, char *outpack, int *rtt,
+ __u16 * acked, long *nreceived, long *nrepeats,
+ long *ntransmitted, long *nchecksum, long *tmin,
+ long *tmax, long long *tsum, long long *tsum2,
+ int *confirm_flag, int *confirm, int *pipesize,
+ struct pingProbeHistoryTable_data *current_temp)
+{
+ int dupflag = 0;
+ long triptime = 0;
+ int mx_dup_ck = MAX_DUP_CHK;
+
+ netsnmp_variable_list *vars = NULL;
+ struct pingResultsTable_data *StorageNew = NULL;
+ struct pingProbeHistoryTable_data *temp = NULL;
+ ++(*nreceived);
+ *series = 0;
+ if (!csfailed)
+ acknowledge(seq, acked, ntransmitted, pipesize);
+
+ if (timing && cc >= 8 + sizeof(struct timeval)) {
+ struct timeval tmp_tv;
+ memcpy(&tmp_tv, ptr, sizeof(tmp_tv));
+
+ restamp:
+ tvsub(tv, &tmp_tv);
+ triptime = tv->tv_sec * 1000000 + tv->tv_usec;
+ if (triptime < 0) {
+ fprintf(stderr,
+ "Warning: time of day goes back (%ldus), taking countermeasures.\n",
+ triptime);
+ triptime = 0;
+ if (!(options & F_LATENCY)) {
+ gettimeofday(tv, NULL);
+ options |= F_LATENCY;
+ goto restamp;
+ }
+ }
+ if (!csfailed) {
+ (*tsum) += triptime;
+ (*tsum2) += (long long) triptime *(long long) triptime;
+ if (triptime < (*tmin))
+ (*tmin) = triptime;
+ if (triptime > (*tmax))
+ (*tmax) = triptime;
+ if (!(*rtt))
+ *rtt = triptime * 8;
+ else
+ *rtt += triptime - (*rtt) / 8;
+ if (options & F_ADAPTIVE)
+ update_interval(uid, interval, rtt_addend, rtt);
+ }
+ }
+
+ if (csfailed) {
+ ++(*nchecksum);
+ --(*nreceived);
+ } else if (TST(seq % mx_dup_ck)) {
+ ++(*nrepeats);
+ --(*nreceived);
+ dupflag = 1;
+ } else {
+ SET(seq % mx_dup_ck);
+ dupflag = 0;
+ }
+ *confirm = *confirm_flag;
+
+ if (options & F_QUIET)
+ return 1;
+
+ if (options & F_FLOOD) {
+ if (!csfailed)
+ write(STDOUT_FILENO, "\b \b", 3);
+ else
+ write(STDOUT_FILENO, "\bC", 1);
+ } else {
+ int i;
+ __u8 *cp, *dp;
+ printf("%d bytes from %s: icmp_seq=%u", cc, from, seq);
+
+ if (hops >= 0)
+ printf(" ttl=%d", hops);
+
+ if (cc < datalen + 8) {
+ printf(" (truncated)\n");
+ return 1;
+ }
+ if (timing) {
+ if (triptime >= 100000)
+ printf(" time=%ld ms", triptime / 1000);
+ else if (triptime >= 10000)
+ printf(" time=%ld.%01ld ms", triptime / 1000,
+ (triptime % 1000) / 100);
+ else if (triptime >= 1000)
+ printf(" time=%ld.%02ld ms", triptime / 1000,
+ (triptime % 1000) / 10);
+ else
+ printf(" time=%ld.%03ld ms", triptime / 1000,
+ triptime % 1000);
+ }
+ if (dupflag)
+ printf(" (DUP!)");
+ if (csfailed)
+ printf(" (BAD CHECKSUM!)");
+
+ /*
+ * check the data
+ */
+ cp = ((u_char *) ptr) + sizeof(struct timeval);
+ dp = &outpack[8 + sizeof(struct timeval)];
+ for (i = sizeof(struct timeval); i < datalen; ++i, ++cp, ++dp) {
+ if (*cp != *dp) {
+ printf("\nwrong data byte #%d should be 0x%x but was 0x%x",
+ i, *dp, *cp);
+ cp = (u_char *) ptr + sizeof(struct timeval);
+ for (i = sizeof(struct timeval); i < datalen; ++i, ++cp) {
+ if ((i % 32) == sizeof(struct timeval))
+ printf("\n#%d\t", i);
+ printf("%x ", *cp);
+ }
+ break;
+ }
+ }
+ }
+
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlOwnerIndex, item->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->pingCtlTestName, item->pingCtlTestNameLen); /* pingCtlTestName */
+
+
+ if ((StorageNew =
+ header_complex_get(pingResultsTableStorage, vars)) == NULL)
+ return SNMP_ERR_NOSUCHNAME;
+
+
+ StorageNew->pingResultsMinRtt = *tmin;
+ StorageNew->pingResultsMaxRtt = *tmax;
+ StorageNew->pingResultsAverageRtt =
+ (*tsum) / (StorageNew->pingResultsProbeResponses + 1);
+ StorageNew->pingResultsProbeResponses =
+ StorageNew->pingResultsProbeResponses + 1;
+ StorageNew->pingResultsSendProbes =
+ StorageNew->pingResultsSendProbes + 1;
+ StorageNew->pingResultsRttSumOfSquares = *tsum2;
+
+ StorageNew->pingResultsLastGoodProbe =
+ (char *) malloc(strlen(asctime(gmtime(&timep))));
+ StorageNew->pingResultsLastGoodProbe = strdup(asctime(gmtime(&timep)));
+ StorageNew->pingResultsLastGoodProbe[strlen(asctime(gmtime(&timep))) -
+ 1] = '\0';
+ StorageNew->pingResultsLastGoodProbeLen =
+ strlen(asctime(gmtime(&timep))) - 1;
+
+ /* ProbeHistory */
+ if (item->pingCtlMaxRows != 0) {
+ temp = SNMP_MALLOC_STRUCT(pingProbeHistoryTable_data);
+
+ temp->pingCtlOwnerIndex =
+ (char *) malloc(item->pingCtlOwnerIndexLen + 1);
+ memcpy(temp->pingCtlOwnerIndex, item->pingCtlOwnerIndex,
+ item->pingCtlOwnerIndexLen + 1);
+ temp->pingCtlOwnerIndex[item->pingCtlOwnerIndexLen] = '\0';
+ temp->pingCtlOwnerIndexLen = item->pingCtlOwnerIndexLen;
+
+ temp->pingCtlTestName =
+ (char *) malloc(item->pingCtlTestNameLen + 1);
+ memcpy(temp->pingCtlTestName, item->pingCtlTestName,
+ item->pingCtlTestNameLen + 1);
+ temp->pingCtlTestName[item->pingCtlTestNameLen] = '\0';
+ temp->pingCtlTestNameLen = item->pingCtlTestNameLen;
+
+ /* add lock to protect */
+ pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;
+ pthread_mutex_lock(&counter_mutex);
+ if (item->pingProbeHistoryMaxIndex >= (unsigned long) (2147483647))
+ item->pingProbeHistoryMaxIndex = 0;
+ temp->pingProbeHistoryIndex = ++(item->pingProbeHistoryMaxIndex);
+ pthread_mutex_unlock(&counter_mutex);
+ /* end */
+
+
+ temp->pingProbeHistoryResponse = triptime;
+ temp->pingProbeHistoryStatus = 1;
+ temp->pingProbeHistoryLastRC = 0;
+
+ temp->pingProbeHistoryTime =
+ (char *) malloc(strlen(asctime(gmtime(&timep))));
+ temp->pingProbeHistoryTime = strdup(asctime(gmtime(&timep)));
+ temp->pingProbeHistoryTime[strlen(asctime(gmtime(&timep))) - 1] = '\0';
+ temp->pingProbeHistoryTimeLen =
+ strlen(asctime(gmtime(&timep))) - 1;
+
+ if (StorageNew->pingResultsSendProbes == 1)
+ item->pingProbeHis = temp;
+ else {
+ (current_temp)->next = temp;
+ }
+
+ current_temp = temp;
+
+ if (StorageNew->pingResultsSendProbes >= item->pingCtlProbeCount) {
+ current_temp->next = NULL;
+ }
+
+ if (item->pingProbeHis != NULL) {
+
+ if (pingProbeHistoryTable_count(item) < item->pingCtlMaxRows) {
+ if (pingProbeHistoryTable_add(current_temp) !=
+ SNMPERR_SUCCESS)
+ DEBUGMSGTL(("pingProbeHistoryTable",
+ "registered an entry error\n"));
+ } else {
+ pingProbeHistoryTable_delLast(item);
+
+ if (pingProbeHistoryTable_add(current_temp) !=
+ SNMPERR_SUCCESS)
+ DEBUGMSGTL(("pingProbeHistoryTable",
+ "registered an entry error\n"));
+
+ }
+
+ }
+ }
+ return 0;
+}
+
+static long
+llsqrt(long long a)
+{
+ long long prev = ~((long long) 1 << 63);
+ long long x = a;
+
+ if (x > 0) {
+ while (x < prev) {
+ prev = x;
+ x = (x + (a / x)) / 2;
+ }
+ }
+
+ return (long) x;
+}
+
+/*
+ * finish --
+ * Print out statistics, and give up.
+ */
+void
+finish(int options, char *hostname, int interval, int timing, int *rtt,
+ struct timeval *start_time, int *deadline, long *npackets,
+ long *nreceived, long *nrepeats, long *ntransmitted,
+ long *nchecksum, long *nerrors, long *tmin, long *tmax,
+ long long *tsum, long long *tsum2, int *pipesize,
+ struct timeval *cur_time)
+{
+ struct timeval tv = *cur_time;
+
+ tvsub(&tv, start_time);
+
+ putchar('\n');
+ fflush(stdout);
+ printf("--- %s ping statistics ---\n", hostname);
+
+ if (*nrepeats)
+ printf(", +%ld duplicates", *nrepeats);
+ if (*nchecksum)
+ printf(", +%ld corrupted", *nchecksum);
+ if (*nerrors)
+ printf(", +%ld errors", *nerrors);
+ if (*ntransmitted) {
+ printf(", %d%% loss",
+ (int) ((((long long) ((*ntransmitted) -
+ (*nreceived))) * 100) /
+ (*ntransmitted)));
+ printf(", time %ldms", 1000 * tv.tv_sec + tv.tv_usec / 1000);
+ }
+ putchar('\n');
+
+ if ((*nreceived) && timing) {
+ long tmdev;
+
+ (*tsum) /= (*nreceived) + (*nrepeats);
+ (*tsum2) /= (*nreceived) + (*nrepeats);
+ tmdev = llsqrt((*tsum2) - (*tsum) * (*tsum));
+
+ printf
+ ("rtt min/avg/max/mdev = %ld.%03ld/%lu.%03ld/%ld.%03ld/%ld.%03ld ms",
+ (*tmin) / 1000, (*tmin) % 1000,
+ (unsigned long) ((*tsum) / 1000), (long) ((*tsum) % 1000),
+ (*tmax) / 1000, (*tmax) % 1000, tmdev / 1000, tmdev % 1000);
+ }
+ if ((*pipesize) > 1)
+ printf(", pipe %d", *pipesize);
+ if ((*ntransmitted) > 1
+ && (!interval || (options & (F_FLOOD | F_ADAPTIVE)))) {
+ int ipg =
+ (1000000 * (long long) tv.tv_sec +
+ tv.tv_usec) / ((*ntransmitted) - 1);
+ printf(", ipg/ewma %d.%03d/%d.%03d ms", ipg / 1000, ipg % 1000,
+ (*rtt) / 8000, ((*rtt) / 8) % 1000);
+ }
+ putchar('\n');
+ return;
+ /* return(deadline ? (*nreceived)<(*npackets) : (*nreceived)==0); */
+}
+
+
+void
+status(int timing, int *rtt, long *nreceived, long *nrepeats,
+ long *ntransmitted, long *tmin, long *tmax, long long *tsum,
+ long long *tsum2)
+{
+ int loss = 0;
+ long tavg = 0;
+
+ status_snapshot = 0;
+
+ if (*ntransmitted)
+ loss =
+ (((long long) ((*ntransmitted) -
+ (*nreceived))) * 100) / (*ntransmitted);
+
+ fprintf(stderr, "\r%ld/%ld packets, %d%% loss", *ntransmitted,
+ *nreceived, loss);
+
+ if ((*nreceived) && timing) {
+ tavg = (*tsum) / ((*nreceived) + (*nrepeats));
+
+ fprintf(stderr,
+ ", min/avg/ewma/max = %ld.%03ld/%lu.%03ld/%d.%03d/%ld.%03ld ms",
+ (*tmin) / 1000, (*tmin) % 1000, tavg / 1000, tavg % 1000,
+ (*rtt) / 8000, ((*rtt) / 8) % 1000, (*tmax) / 1000,
+ (*tmax) % 1000);
+ }
+ fprintf(stderr, "\n");
+}
+
+
+static __inline__ int
+ipv6_addr_any(struct in6_addr *addr)
+{
+ static struct in6_addr in6_anyaddr;
+ return (memcmp(addr, &in6_anyaddr, 16) == 0);
+}
+
+int
+receive_error_msg(int icmp_sock, struct sockaddr_in6 *whereto, int options,
+ int *ident, long *nerrors)
+{
+ int res;
+ char cbuf[512];
+ struct iovec iov;
+ struct msghdr msg;
+ struct cmsghdr *cmsg;
+ struct sock_extended_err *e;
+ struct icmp6hdr icmph;
+ struct sockaddr_in6 target;
+ int net_errors = 0;
+ int local_errors = 0;
+ int saved_errno = errno;
+
+ iov.iov_base = &icmph;
+ iov.iov_len = sizeof(icmph);
+ msg.msg_name = (void *) &target;
+ msg.msg_namelen = sizeof(target);
+ msg.msg_iov = &iov;
+ msg.msg_iovlen = 1;
+ msg.msg_flags = 0;
+ msg.msg_control = cbuf;
+ msg.msg_controllen = sizeof(cbuf);
+
+ res = recvmsg(icmp_sock, &msg, MSG_ERRQUEUE | MSG_DONTWAIT);
+ if (res < 0)
+ goto out;
+
+ e = NULL;
+ for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
+ if (cmsg->cmsg_level == SOL_IPV6) {
+ if (cmsg->cmsg_type == IPV6_RECVERR)
+ e = (struct sock_extended_err *) CMSG_DATA(cmsg);
+ }
+ }
+ if (e == NULL)
+ abort();
+
+ if (e->ee_origin == SO_EE_ORIGIN_LOCAL) {
+ local_errors++;
+ if (options & F_QUIET)
+ goto out;
+ if (options & F_FLOOD)
+ write(STDOUT_FILENO, "E", 1);
+ else if (e->ee_errno != EMSGSIZE)
+ fprintf(stderr, "ping: local error: %s\n",
+ strerror(e->ee_errno));
+ else
+ fprintf(stderr,
+ "ping: local error: Message too long, mtu=%u\n",
+ e->ee_info);
+ (*nerrors)++;
+ } else if (e->ee_origin == SO_EE_ORIGIN_ICMP6) {
+ struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) (e + 1);
+
+ if (res < sizeof(icmph) ||
+ memcmp(&target.sin6_addr, &(whereto->sin6_addr), 16) ||
+ icmph.icmp6_type != ICMPV6_ECHO_REQUEST ||
+ icmph.icmp6_identifier != *ident) {
+ /*
+ * Not our error, not an error at all. Clear.
+ */
+ saved_errno = 0;
+ goto out;
+ }
+
+ net_errors++;
+ (*nerrors)++;
+ if (options & F_QUIET)
+ goto out;
+ if (options & F_FLOOD) {
+ write(STDOUT_FILENO, "\bE", 2);
+ } else {
+ fflush(stdout);
+ }
+ }
+
+ out:
+ errno = saved_errno;
+ return net_errors ? : -local_errors;
+}
+
+int
+send_v6(int icmp_sock, int cmsglen, char *cmsgbuf,
+ struct sockaddr_in6 *whereto, int datalen, int timing,
+ char *outpack, int *ident, long *ntransmitted, int *confirm)
+{
+ struct icmp6hdr *icmph;
+ int cc;
+ int i;
+ int mx_dup_ck = MAX_DUP_CHK;
+
+ icmph = (struct icmp6hdr *) outpack;
+ icmph->icmp6_type = ICMPV6_ECHO_REQUEST;
+ icmph->icmp6_code = 0;
+ icmph->icmp6_cksum = 0;
+ icmph->icmp6_sequence = (*ntransmitted) + 1;
+ icmph->icmp6_identifier = *ident;
+
+ CLR(icmph->icmp6_sequence % mx_dup_ck);
+
+ if (timing)
+ gettimeofday((struct timeval *) &outpack[8],
+ (struct timezone *) NULL);
+
+ cc = datalen + 8; /* skips ICMP portion */
+
+ if (cmsglen == 0) {
+ i = sendto(icmp_sock, (char *) outpack, cc, *confirm,
+ (struct sockaddr *) whereto,
+ sizeof(struct sockaddr_in6));
+ } else {
+ struct msghdr mhdr;
+ struct iovec iov;
+
+ iov.iov_len = cc;
+ iov.iov_base = outpack;
+
+ mhdr.msg_name = whereto;
+ mhdr.msg_namelen = sizeof(struct sockaddr_in6);
+ mhdr.msg_iov = &iov;
+ mhdr.msg_iovlen = 1;
+ mhdr.msg_control = cmsgbuf;
+ mhdr.msg_controllen = cmsglen;
+
+ i = sendmsg(icmp_sock, &mhdr, *confirm);
+ }
+ *confirm = 0;
+
+ return (cc == i ? 0 : i);
+}
+
+/*
+ * parse_reply --
+ * Print out the packet, if it came from us. This logic is necessary
+ * because ALL readers of the ICMP socket get a copy of ALL ICMP packets
+ * which arrive ('tis only fair). This permits multiple copies of this
+ * program to be run without having intermingled output (or statistics!).
+ */
+int
+parse_reply(int *series, struct pingCtlTable_data *item,
+ struct msghdr *msg, int cc, void *addr, struct timeval *tv,
+ time_t timep, int uid, struct sockaddr_in6 *whereto,
+ int *rtt_addend, int options, int interval, int datalen,
+ int timing, int working_recverr, char *outpack, int *rtt,
+ int *ident, __u16 * acked, long *nreceived, long *nrepeats,
+ long *ntransmitted, long *nchecksum, long *nerrors, long *tmin,
+ long *tmax, long long *tsum, long long *tsum2,
+ int *confirm_flag, int *confirm, int *pipesize,
+ struct pingProbeHistoryTable_data *current_temp)
+{
+ struct sockaddr_in6 *from = addr;
+ __u8 *buf = msg->msg_iov->iov_base;
+ struct cmsghdr *c;
+ struct icmp6hdr *icmph;
+ int hops = -1;
+
+
+ for (c = CMSG_FIRSTHDR(msg); c; c = CMSG_NXTHDR(msg, c)) {
+ if (c->cmsg_level != SOL_IPV6 || c->cmsg_type != IPV6_HOPLIMIT)
+ continue;
+ if (c->cmsg_len < CMSG_LEN(sizeof(int)))
+ continue;
+ hops = *(int *) CMSG_DATA(c);
+ }
+
+
+ /*
+ * Now the ICMP part
+ */
+
+ icmph = (struct icmp6hdr *) buf;
+ if (cc < 8) {
+ if (options & F_VERBOSE)
+ fprintf(stderr, "ping: packet too short (%d bytes)\n", cc);
+ return 1;
+ }
+ if (icmph->icmp6_type == ICMPV6_ECHO_REPLY) {
+ if (icmph->icmp6_identifier != *ident)
+ return 1;
+ if (gather_statistics(series, item, (__u8 *) (icmph + 1), cc,
+ icmph->icmp6_sequence,
+ hops, 0, tv, timep, rtt_addend, uid, options,
+ pr_addr(&from->sin6_addr, options), interval,
+ datalen, timing, outpack, rtt, acked,
+ nreceived, nrepeats, ntransmitted, nchecksum,
+ tmin, tmax, tsum, tsum2, confirm_flag,
+ confirm, pipesize, current_temp))
+ return 0;
+ } else {
+ int nexthdr;
+ struct ipv6hdr *iph1 = (struct ipv6hdr *) (icmph + 1);
+ struct icmp6hdr *icmph1 = (struct icmp6hdr *) (iph1 + 1);
+
+ /*
+ * We must not ever fall here. All the messages but
+ * * echo reply are blocked by filter and error are
+ * * received with IPV6_RECVERR. Ugly code is preserved
+ * * however, just to remember what crap we avoided
+ * * using RECVRERR. :-)
+ */
+
+ if (cc < 8 + sizeof(struct ipv6hdr) + 8)
+ return 1;
+
+ if (memcmp(&iph1->daddr, &(whereto->sin6_addr), 16))
+ return 1;
+
+ nexthdr = iph1->nexthdr;
+
+ if (nexthdr == 44) {
+ nexthdr = *(__u8 *) icmph1;
+ icmph1++;
+ }
+ if (nexthdr == IPPROTO_ICMPV6) {
+ if (icmph1->icmp6_type != ICMPV6_ECHO_REQUEST ||
+ icmph1->icmp6_identifier != *ident)
+ return 1;
+ acknowledge(icmph1->icmp6_sequence, acked, ntransmitted,
+ pipesize);
+ if (working_recverr)
+ return 0;
+ (*nerrors)++;
+ if (options & F_FLOOD) {
+ write(STDOUT_FILENO, "\bE", 2);
+ return 0;
+ }
+ printf("From %s: icmp_seq=%u ",
+ pr_addr(&from->sin6_addr, options),
+ icmph1->icmp6_sequence);
+ } else {
+ /*
+ * We've got something other than an ECHOREPLY
+ */
+ if (!(options & F_VERBOSE) || uid)
+ return 1;
+ printf("From %s: ", pr_addr(&from->sin6_addr, options));
+ }
+ /* pr_icmph(icmph->icmp6_type, icmph->icmp6_code, ntohl(icmph->icmp6_mtu)); */
+ }
+
+ if (!(options & F_FLOOD)) {
+ if (options & F_AUDIBLE)
+ putchar('\a');
+ putchar('\n');
+ fflush(stdout);
+ }
+ return 0;
+}
+
+
+
+#include <linux/filter.h>
+void
+install_filter(int icmp_sock, int *ident)
+{
+ static int once;
+ static struct sock_filter insns[] = {
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 4), /* Load icmp echo ident */
+ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0xAAAA, 0, 1), /* Ours? */
+ BPF_STMT(BPF_RET | BPF_K, ~0U), /* Yes, it passes. */
+ BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 0), /* Load icmp type */
+ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, ICMPV6_ECHO_REPLY, 1, 0), /* Echo? */
+ BPF_STMT(BPF_RET | BPF_K, ~0U), /* No. It passes. This must not happen. */
+ BPF_STMT(BPF_RET | BPF_K, 0), /* Echo with wrong ident. Reject. */
+ };
+ static struct sock_fprog filter = {
+ sizeof insns / sizeof(insns[0]),
+ insns
+ };
+
+ if (once)
+ return;
+ once = 1;
+
+ /*
+ * Patch bpflet for current identifier.
+ */
+ insns[1] =
+ (struct sock_filter) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K,
+ __constant_htons(*ident), 0, 1);
+
+ if (setsockopt
+ (icmp_sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)))
+ perror("WARNING: failed to install socket filter\n");
+}
+
+
+/*
+ * pr_addr --
+ * Return an ascii host address as a dotted quad and optionally with
+ * a hostname.
+ */
+static char *
+pr_addr(struct in6_addr *addr, int options)
+{
+ struct hostent *hp = NULL;
+
+ if (!(options & F_NUMERIC))
+ hp = gethostbyaddr((__u8 *) addr, sizeof(struct in6_addr),
+ AF_INET6);
+
+ return hp ? hp->h_name : pr_addr_n(addr);
+}
+
+static char *
+pr_addr_n(struct in6_addr *addr)
+{
+ static char str[64];
+ inet_ntop(AF_INET6, addr, str, sizeof(str));
+ return str;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingCtlTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingCtlTable.h
new file mode 100644
index 0000000000..2234ec9f55
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingCtlTable.h
@@ -0,0 +1,465 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:pingCtlTable.h
+ *File Description:The head file of pingCtlTable.c
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+
+#ifndef PINGCTLTABLE_H
+#define PINGCTLTABLE_H
+
+
+
+#include <sys/types.h> /* basic system data types */
+#include <sys/socket.h> /* basic socket definitions */
+#include <sys/time.h> /* timeval{} for select() */
+#include <time.h> /* timespec{} for pselect() */
+#include <netinet/in.h> /* sockaddr_in{} and other Internet defns */
+#include <arpa/inet.h> /* inet(3) functions */
+#include <errno.h>
+#include <fcntl.h> /* for nonblocking */
+#include <netdb.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h> /* for S_xxx file mode constants */
+#include <sys/uio.h> /* for iovec{} and readv/writev */
+#include <unistd.h>
+#include <sys/wait.h>
+#include <sys/un.h> /* for Unix domain sockets */
+#include <netdb.h>
+#include <pthread.h>
+
+#ifdef HAVE_SYS_SELECT_H
+# include <sys/select.h> /* for convenience */
+#endif
+
+#ifdef HAVE_POLL_H
+# include <poll.h> /* for convenience */
+#endif
+
+#ifdef HAVE_STRINGS_H
+# include <strings.h> /* for convenience */
+#endif
+
+/*
+ * Three headers are normally needed for socket/file ioctl's:
+ * * <sys/ioctl.h>, <sys/filio.h>, and <sys/sockio.h>.
+ */
+#ifdef HAVE_SYS_IOCTL_H
+# include <sys/ioctl.h>
+#endif
+#ifdef HAVE_SYS_FILIO_H
+# include <sys/filio.h>
+#endif
+#ifdef HAVE_SYS_SOCKIO_H
+# include <sys/sockio.h>
+#endif
+
+#ifdef HAVE_PTHREAD_H
+# include <pthread.h>
+#endif
+
+#ifdef HAVE_SOCKADDR_DL_STRUCT
+# include <net/if_dl.h>
+#endif
+
+#include <netinet/in_systm.h>
+#include <netinet/ip.h>
+#include <netinet/ip_icmp.h>
+
+#define BUFSIZE 1500
+
+/*
+ * ipv6 include
+ */
+#include <sys/param.h>
+#include <linux/sockios.h>
+#include <sys/file.h>
+#include <sys/signal.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
+#include <sys/poll.h>
+#include <linux/types.h>
+#include <ctype.h>
+#include <linux/errqueue.h>
+
+/* #include <linux/in6.h> */
+/* #include <linux/ipv6.h> */
+
+#include "in6.h"
+#include "ipv6.h"
+
+
+#include <linux/icmpv6.h>
+#include <sched.h>
+
+
+
+
+#define BUFSIZE 1500
+
+
+
+/*
+ * ipv4 include
+ */
+
+#include <netinet/in_systm.h>
+#include <netinet/ip.h>
+
+#include <netinet/ip_icmp.h>
+#include <netinet/in.h> /* sockaddr_in{} and other Internet defns */
+
+
+config_require(header_complex);
+
+struct pingCtlTable_data {
+ char *pingCtlOwnerIndex; /* string */
+ size_t pingCtlOwnerIndexLen;
+
+ char *pingCtlTestName; /* string */
+ size_t pingCtlTestNameLen;
+
+ long pingCtlTargetAddressType; /* integer32 */
+
+ char *pingCtlTargetAddress; /* string */
+ size_t pingCtlTargetAddressLen;
+
+ unsigned long pingCtlDataSize;
+ unsigned long pingCtlTimeOut;
+ unsigned long pingCtlProbeCount;
+ long pingCtlAdminStatus;
+ char *pingCtlDataFill;
+ size_t pingCtlDataFillLen;
+
+ unsigned long pingCtlFrequency;
+ unsigned long pingCtlMaxRows;
+ long pingCtlStorageType;
+
+ char *pingCtlTrapGeneration;
+ size_t pingCtlTrapGenerationLen;
+ unsigned long pingCtlTrapProbeFailureFilter;
+ unsigned long pingCtlTrapTestFailureFilter;
+ oid *pingCtlType;
+ size_t pingCtlTypeLen;
+
+ char *pingCtlDescr;
+ size_t pingCtlDescrLen;
+ long pingCtlSourceAddressType;
+ char *pingCtlSourceAddress;
+ size_t pingCtlSourceAddressLen;
+ long pingCtlIfIndex;
+ long pingCtlByPassRouteTable;
+ unsigned long pingCtlDSField;
+ long pingCtlRowStatus;
+
+ int storageType;
+ u_long timer_id;
+ unsigned long pingProbeHistoryMaxIndex;
+
+ struct pingResultsTable_data *pingResults;
+ struct pingProbeHistoryTable_data *pingProbeHis;
+
+};
+
+struct pingResultsTable_data {
+ char *pingCtlOwnerIndex; /* string */
+ size_t pingCtlOwnerIndexLen;
+ char *pingCtlTestName; /* string */
+ size_t pingCtlTestNameLen;
+
+ long pingResultsOperStatus;
+ long pingResultsIpTargetAddressType;
+ char *pingResultsIpTargetAddress;
+ size_t pingResultsIpTargetAddressLen;
+ unsigned long pingResultsMinRtt;
+ unsigned long pingResultsMaxRtt;
+ unsigned long pingResultsAverageRtt;
+ unsigned long pingResultsProbeResponses;
+ unsigned long pingResultsSendProbes;
+ unsigned long pingResultsRttSumOfSquares;
+ char *pingResultsLastGoodProbe;
+ size_t pingResultsLastGoodProbeLen;
+
+ int storageType;
+
+};
+
+struct pingProbeHistoryTable_data {
+ struct pingProbeHistoryTable_data *next;
+ char *pingCtlOwnerIndex; /* string */
+ size_t pingCtlOwnerIndexLen;
+ char *pingCtlTestName; /* string */
+ size_t pingCtlTestNameLen;
+
+ unsigned long pingProbeHistoryIndex;
+ unsigned long pingProbeHistoryResponse;
+ long pingProbeHistoryStatus;
+ long pingProbeHistoryLastRC;
+ char *pingProbeHistoryTime;
+ size_t pingProbeHistoryTimeLen;
+
+ int storageType;
+
+};
+
+
+/*
+ * function declarations
+ */
+void init_pingCtlTable(void);
+FindVarMethod var_pingCtlTable;
+void parse_pingCtlTable(const char *, char *);
+SNMPCallback store_pingCtlTable;
+
+
+WriteMethod write_pingCtlTargetAddressType;
+WriteMethod write_pingCtlTargetAddress;
+WriteMethod write_pingCtlDataSize;
+WriteMethod write_pingCtlTimeOut;
+WriteMethod write_pingCtlProbeCount;
+WriteMethod write_pingCtlAdminStatus;
+WriteMethod write_pingCtlDataFill;
+WriteMethod write_pingCtlFrequency;
+WriteMethod write_pingCtlMaxRows;
+WriteMethod write_pingCtlStorageType;
+WriteMethod write_pingCtlTrapGeneration;
+WriteMethod write_pingCtlTrapProbeFailureFilter;
+WriteMethod write_pingCtlTrapTestFailureFilter;
+WriteMethod write_pingCtlType;
+WriteMethod write_pingCtlDescr;
+WriteMethod write_pingCtlSourceAddressType;
+WriteMethod write_pingCtlSourceAddress;
+WriteMethod write_pingCtlIfIndex;
+WriteMethod write_pingCtlByPassRouteTable;
+WriteMethod write_pingCtlDSField;
+
+WriteMethod write_pingCtlRowStatus;
+
+
+
+#define PINGTRAPGENERATION_PROBEFAILED 0x80
+#define PINGTRAPGENERATION_TESTFAILED 0x40
+#define PINGTRAPGENERATION_TESTCOMPLETED 0x20
+#define PINGTRAPGENERATION_NULL 0x00
+
+/*
+ * column number definitions for table pingCtlTable
+ */
+#define COLUMN_PINGCTLOWNERINDEX 1
+#define COLUMN_PINGCTLTESTNAME 2
+#define COLUMN_PINGCTLTARGETADDRESSTYPE 3
+#define COLUMN_PINGCTLTARGETADDRESS 4
+#define COLUMN_PINGCTLDATASIZE 5
+#define COLUMN_PINGCTLTIMEOUT 6
+#define COLUMN_PINGCTLPROBECOUNT 7
+#define COLUMN_PINGCTLADMINSTATUS 8
+#define COLUMN_PINGCTLDATAFILL 9
+#define COLUMN_PINGCTLFREQUENCY 10
+#define COLUMN_PINGCTLMAXROWS 11
+#define COLUMN_PINGCTLSTORAGETYPE 12
+#define COLUMN_PINGCTLTRAPGENERATION 13
+#define COLUMN_PINGCTLTRAPPROBEFAILUREFILTER 14
+#define COLUMN_PINGCTLTRAPTESTFAILUREFILTER 15
+#define COLUMN_PINGCTLTYPE 16
+#define COLUMN_PINGCTLDESCR 17
+#define COLUMN_PINGCTLSOURCEADDRESSTYPE 18
+#define COLUMN_PINGCTLSOURCEADDRESS 19
+#define COLUMN_PINGCTLIFINDEX 20
+#define COLUMN_PINGCTLBYPASSROUTETABLE 21
+#define COLUMN_PINGCTLDSFIELD 22
+#define COLUMN_PINGCTLROWSTATUS 23
+
+
+/*
+ * ipv4 function
+ */
+int proc_v4(char *, ssize_t, struct timeval *, time_t,
+ struct pingCtlTable_data *, struct addrinfo *, int,
+ unsigned long *, unsigned long *, unsigned long *,
+ unsigned long *, unsigned long, int, int, int,
+ struct pingProbeHistoryTable_data *, pid_t);
+void send_v4(int, pid_t, int, int, char *);
+void readloop(struct pingCtlTable_data *, struct addrinfo *,
+ int, unsigned long *, unsigned long *,
+ unsigned long *, pid_t);
+void sig_alrm(int);
+void tv_sub(struct timeval *, struct timeval *);
+unsigned long round_double(double);
+struct proto {
+ int (*fproc) (char *, ssize_t, struct timeval *, time_t,
+ struct pingCtlTable_data *,
+ struct addrinfo *, int, unsigned long *,
+ unsigned long *, unsigned long *,
+ unsigned long *, unsigned long, int, int,
+ int, struct pingProbeHistoryTable_data *,
+ pid_t);
+ void (*fsend) (int, pid_t, int, int, char *);
+ struct sockaddr *sasend; /* sockaddr{} for send, from getaddrinfo */
+ struct sockaddr *sarecv; /* sockaddr{} for receiving */
+ socklen_t salen; /* length of sockaddr{}s */
+ int icmpproto; /* IPPROTO_xxx value for ICMP */
+} *pr;
+
+
+/*
+ * ipv6 function
+ */
+
+#define BIT_CLEAR(nr, addr) do { ((__u32 *)(addr))[(nr) >> 5] &= ~(1U << ((nr) & 31)); } while(0)
+#define BIT_SET(nr, addr) do { ((__u32 *)(addr))[(nr) >> 5] |= (1U << ((nr) & 31)); } while(0)
+#define BIT_TEST(nr, addr) do { (__u32 *)(addr))[(nr) >> 5] & (1U << ((nr) & 31)); } while(0)
+
+#define ICMPV6_FILTER_WILLPASS(type, filterp) \
+ (BIT_TEST((type), filterp) == 0)
+
+#define ICMPV6_FILTER_WILLBLOCK(type, filterp) \
+ BIT_TEST((type), filterp)
+
+#define ICMPV6_FILTER_SETPASS(type, filterp) \
+ BIT_CLEAR((type), filterp)
+
+#define ICMPV6_FILTER_SETBLOCK(type, filterp) \
+ BIT_SET((type), filterp)
+
+#define ICMPV6_FILTER_SETPASSALL(filterp) \
+ memset(filterp, 0, sizeof(struct icmp6_filter));
+
+#define ICMPV6_FILTER_SETBLOCKALL(filterp) \
+ memset(filterp, 0xFF, sizeof(struct icmp6_filter));
+
+
+#define MAX_PACKET 128000 /* max packet size */
+
+#ifdef SO_TIMESTAMP
+#define HAVE_SIN6_SCOPEID 1
+#endif
+
+
+static char *pr_addr(struct in6_addr *addr, int options);
+static char *pr_addr_n(struct in6_addr *addr);
+static int pr_icmph(__u8 type, __u8 code, __u32 info);
+
+#define MAX_DUP_CHK 0x10000
+char rcvd_tbl[MAX_DUP_CHK / 8];
+
+volatile int exiting;
+volatile int status_snapshot;
+
+#ifndef MSG_CONFIRM
+#define MSG_CONFIRM 0
+#endif
+
+#define DEFDATALEN (64 - 8) /* default data length */
+
+#define MAXWAIT 10 /* max seconds to wait for response */
+#define MININTERVAL 10 /* Minimal interpacket gap */
+#define MINUSERINTERVAL 200 /* Minimal allowed interval for non-root */
+
+#define SCHINT(a) (((a) <= MININTERVAL) ? MININTERVAL : (a))
+
+#define A(bit) rcvd_tbl[(bit)>>3] /* identify byte in array */
+#define B(bit) (1 << ((bit) & 0x07)) /* identify bit in byte */
+#define SET(bit) (A(bit) |= B(bit))
+#define CLR(bit) (A(bit) &= (~B(bit)))
+#define TST(bit) (A(bit) & B(bit))
+
+/*
+ * various options
+ */
+#define F_FLOOD 0x001
+#define F_INTERVAL 0x002
+#define F_NUMERIC 0x004
+#define F_PINGFILLED 0x008
+#define F_QUIET 0x010
+#define F_RROUTE 0x020
+#define F_SO_DEBUG 0x040
+#define F_SO_DONTROUTE 0x080
+#define F_VERBOSE 0x100
+#define F_TIMESTAMP 0x200
+#define F_FLOWINFO 0x200
+#define F_SOURCEROUTE 0x400
+#define F_TCLASS 0x400
+#define F_FLOOD_POLL 0x800
+#define F_LATENCY 0x1000
+#define F_AUDIBLE 0x2000
+#define F_ADAPTIVE 0x4000
+
+/*
+ * multicast options
+ */
+#define MULTICAST_NOLOOP 0x001
+#define MULTICAST_TTL 0x002
+#define MULTICAST_IF 0x004
+
+static inline void tvsub(struct timeval *, struct timeval *);
+static inline void set_signal(int, void (*)(int));
+static inline int schedule_exit(int, int *, long *, long *, long *,
+ long *);
+static inline int in_flight(__u16 *, long *, long *, long *);
+static inline void acknowledge(__u16, __u16 *, long *, int *);
+static inline void advance_ntransmitted(__u16 *, long *);
+static void sigexit(int);
+static void sigexit(int);
+static inline void update_interval(int, int, int *, int *);
+int __schedule_exit(int, long *, long *);
+int pinger(int, int, int, char *, struct sockaddr_in6 *, int *,
+ int, int, int, int, int, char *, int *, int *,
+ int *, int *, __u16 *, long *, long *, long *,
+ long *, int *, int *, int *, struct timeval *);
+void sock_setbufs(int, int, int);
+void setup(int, int, int, int, int, int, int, char *, int *,
+ struct timeval *, int *, int *);
+void main_loop(struct pingCtlTable_data *, int, int, __u8 *,
+ int, int, char *, struct sockaddr_in6 *, int,
+ int, char *, int, int, int, int, char *, int *,
+ struct timeval *, int *, int *);
+int gather_statistics(int *, struct pingCtlTable_data *,
+ __u8 *, int, __u16, int, int,
+ struct timeval *, time_t, int *, int,
+ int, char *, int, int, int, char *,
+ int *, __u16 *, long *, long *, long *,
+ long *, long *, long *, long long *,
+ long long *, int *, int *, int *,
+ struct pingProbeHistoryTable_data *);
+static long llsqrt(long long);
+void finish(int, char *, int, int, int *, struct timeval *,
+ int *, long *, long *, long *, long *, long *,
+ long *, long *, long *, long long *, long long *,
+ int *, struct timeval *);
+void status(int, int *, long *, long *, long *, long *, long *,
+ long long *, long long *);
+static __inline__ int ipv6_addr_any(struct in6_addr *);
+size_t inet6_srcrt_space(int, int);
+struct cmsghdr *inet6_srcrt_init(void *, int);
+int inet6_srcrt_add(struct cmsghdr *, const struct in6_addr *);
+int receive_error_msg(int, struct sockaddr_in6 *, int, int *,
+ long *);
+int send_v6(int, int, char *, struct sockaddr_in6 *, int, int,
+ char *, int *, long *, int *);
+int parse_reply(int *, struct pingCtlTable_data *,
+ struct msghdr *, int, void *, struct timeval *,
+ time_t, int, struct sockaddr_in6 *, int *, int,
+ int, int, int, int, char *, int *, int *,
+ __u16 *, long *, long *, long *, long *,
+ long *, long *, long *, long long *,
+ long long *, int *, int *, int *,
+ struct pingProbeHistoryTable_data *);
+static int pr_icmph(__u8, __u8, __u32);
+void install_filter(int, int *);
+static char *pr_addr(struct in6_addr *, int);
+static char *pr_addr_n(struct in6_addr *);
+
+#endif
+/*
+ * PINGCTLTABLE_H
+ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingProbeHistoryTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingProbeHistoryTable.c
new file mode 100644
index 0000000000..29599c565b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingProbeHistoryTable.c
@@ -0,0 +1,338 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:pingProbeHistoryTable.c
+ *File Description:Rows of pingProbeHistoryTable MIB read.
+ *
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+
+/*
+ * This should always be included first before anything else
+ */
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+
+
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "pingCtlTable.h"
+#include "pingResultsTable.h"
+#include "pingProbeHistoryTable.h"
+#include "header_complex.h"
+
+
+/*
+ *pingProbeHistoryTable_variables_oid:
+ *
+ */
+
+oid pingProbeHistoryTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 80, 1, 4 };
+
+struct variable2 pingProbeHistoryTable_variables[] = {
+ {COLUMN_PINGPROBEHISTORYRESPONSE, ASN_UNSIGNED, RONLY, var_pingProbeHistoryTable, 2, {1, 2}},
+ {COLUMN_PINGPROBEHISTORYSTATUS, ASN_INTEGER, RONLY, var_pingProbeHistoryTable, 2, {1, 3}},
+ {COLUMN_PINGPROBEHISTORYLASTRC, ASN_INTEGER, RONLY, var_pingProbeHistoryTable, 2, {1, 4}},
+ {COLUMN_PINGPROBEHISTORYTIME, ASN_OCTET_STR, RONLY, var_pingProbeHistoryTable, 2, {1, 5}}
+};
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+
+extern struct header_complex_index *pingCtlTableStorage;
+extern struct header_complex_index *pingProbeHistoryTableStorage;
+
+void
+pingProbeHistoryTable_cleaner(struct header_complex_index *thestuff)
+{
+ struct header_complex_index *hciptr = NULL;
+ struct pingProbeHistoryTable_data *StorageDel = NULL;
+ DEBUGMSGTL(("pingProbeHistoryTable", "cleanerout "));
+ for (hciptr = thestuff; hciptr != NULL; hciptr = hciptr->next) {
+ StorageDel =
+ header_complex_extract_entry(&pingProbeHistoryTableStorage,
+ hciptr);
+ DEBUGMSGTL(("pingProbeHistoryTable", "cleaner "));
+ }
+
+}
+void
+init_pingProbeHistoryTable(void)
+{
+
+ DEBUGMSGTL(("pingProbeHistoryTable", "initializing... "));
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("pingProbeHistoryTable", pingProbeHistoryTable_variables,
+ variable2, pingProbeHistoryTable_variables_oid);
+
+
+ /*
+ * register our config handler(s) to deal with registrations
+ */
+ snmpd_register_config_handler("pingProbeHistoryTable",
+ parse_pingProbeHistoryTable, NULL, NULL);
+
+ /*
+ * we need to be called back later to store our data
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_pingProbeHistoryTable, NULL);
+
+ DEBUGMSGTL(("pingProbeHistoryTable", "done.\n"));
+}
+
+/*
+ * parse_mteObjectsTable():
+ * parses .conf file entries needed to configure the mib.
+ */
+
+void
+parse_pingProbeHistoryTable(const char *token, char *line)
+{
+ size_t tmpint;
+ struct pingProbeHistoryTable_data *StorageTmp =
+ SNMP_MALLOC_STRUCT(pingProbeHistoryTable_data);
+
+ DEBUGMSGTL(("pingProbeHistoryTable", "parsing config... "));
+
+
+ if (StorageTmp == NULL) {
+ config_perror("malloc failure");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingCtlOwnerIndex,
+ &StorageTmp->pingCtlOwnerIndexLen);
+ if (StorageTmp->pingCtlOwnerIndex == NULL) {
+ config_perror("invalid specification for pingCtlOwnerIndex");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingCtlTestName,
+ &StorageTmp->pingCtlTestNameLen);
+ if (StorageTmp->pingCtlTestName == NULL) {
+ config_perror("invalid specification for pingCtlTestName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingProbeHistoryIndex, &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingProbeHistoryResponse,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pingProbeHistoryStatus,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pingProbeHistoryLastRC,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingProbeHistoryTime,
+ &StorageTmp->pingProbeHistoryTimeLen);
+ if (StorageTmp->pingProbeHistoryTime == NULL) {
+ config_perror("invalid specification for pingProbeHistoryTime");
+ return;
+ }
+
+
+ pingProbeHistoryTable_inadd(StorageTmp);
+
+ /* pingProbeHistoryTable_cleaner(pingProbeHistoryTableStorage); */
+
+ DEBUGMSGTL(("pingProbeHistoryTable", "done.\n"));
+}
+
+
+
+
+
+/*
+ * store_pingProbeHistoryTable():
+ * stores .conf file entries needed to configure the mib.
+ */
+
+int
+store_pingProbeHistoryTable(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr;
+ size_t tmpint;
+ struct pingProbeHistoryTable_data *StorageTmp;
+ struct header_complex_index *hcindex;
+
+
+ DEBUGMSGTL(("pingProbeHistoryTable", "storing data... "));
+
+
+ for (hcindex = pingProbeHistoryTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp = (struct pingProbeHistoryTable_data *) hcindex->data;
+
+ if (StorageTmp->storageType != ST_READONLY) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "pingProbeHistoryTable ");
+ cptr = line + strlen(line);
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pingCtlOwnerIndex,
+ &StorageTmp->pingCtlOwnerIndexLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pingCtlTestName,
+ &StorageTmp->pingCtlTestNameLen);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->pingProbeHistoryIndex,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ pingProbeHistoryResponse, &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->pingProbeHistoryStatus,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->pingProbeHistoryLastRC,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pingProbeHistoryTime,
+ &StorageTmp->
+ pingProbeHistoryTimeLen);
+
+ snmpd_store_config(line);
+ }
+ }
+ DEBUGMSGTL(("pingProbeHistoryTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+int
+pingProbeHistoryTable_inadd(struct pingProbeHistoryTable_data *thedata)
+{
+ netsnmp_variable_list *vars_list;
+ vars_list = NULL;
+
+
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlOwnerIndex, thedata->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlTestName, thedata->pingCtlTestNameLen); /* pingCtlTestName */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &thedata->pingProbeHistoryIndex, sizeof(thedata->pingProbeHistoryIndex)); /* pingProbeHistoryIndex */
+
+ /*
+ * XXX: fill in default row values here into StorageNew
+ *
+ */
+
+
+ DEBUGMSGTL(("pingProbeHistoryTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ header_complex_add_data(&pingProbeHistoryTableStorage, vars_list,
+ thedata);
+ DEBUGMSGTL(("pingProbeHistoryTable", "registered an entry\n"));
+
+
+ DEBUGMSGTL(("pingProbeHistoryTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+/*
+ * var_pingProbeHistoryTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_pingProbeHistoryTable above.
+ */
+unsigned char *
+var_pingProbeHistoryTable(struct variable *vp,
+ oid * name,
+ size_t *length,
+ int exact,
+ size_t *var_len, WriteMethod ** write_method)
+{
+
+
+ struct pingProbeHistoryTable_data *StorageTmp = NULL;
+
+ *write_method = NULL;
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(pingProbeHistoryTableStorage, vp, name, length,
+ exact, var_len, write_method)) == NULL) {
+
+ return NULL;
+ }
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+
+ switch (vp->magic) {
+
+ case COLUMN_PINGPROBEHISTORYRESPONSE:
+ *var_len = sizeof(StorageTmp->pingProbeHistoryResponse);
+ return (u_char *) & StorageTmp->pingProbeHistoryResponse;
+
+ case COLUMN_PINGPROBEHISTORYSTATUS:
+ *var_len = sizeof(StorageTmp->pingProbeHistoryStatus);
+ return (u_char *) & StorageTmp->pingProbeHistoryStatus;
+
+ case COLUMN_PINGPROBEHISTORYLASTRC:
+ *var_len = sizeof(StorageTmp->pingProbeHistoryLastRC);
+ return (u_char *) & StorageTmp->pingProbeHistoryLastRC;
+
+ case COLUMN_PINGPROBEHISTORYTIME:
+ *var_len = (StorageTmp->pingProbeHistoryTimeLen);
+ return (u_char *) StorageTmp->pingProbeHistoryTime;
+
+ default:
+ ERROR_MSG("");
+ }
+
+ return NULL;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingProbeHistoryTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingProbeHistoryTable.h
new file mode 100644
index 0000000000..1c3eadb00e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingProbeHistoryTable.h
@@ -0,0 +1,36 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:pingProbeHistoryTable.h
+ *File Description:The head file of pingProbeHistoryTable.c
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+#ifndef PINGPROBEHISTORYTABLE_H
+#define PINGPROBEHISTORYTABLE_H
+
+config_require(header_complex);
+
+/*
+ * function declarations
+ */
+void init_pingProbeHistoryTable(void);
+FindVarMethod var_pingProbeHistoryTable;
+void parse_pingProbeHistoryTable(const char *, char *);
+SNMPCallback store_pingProbeHistoryTable;
+
+
+/*
+ * column number definitions for table pingProbeHistoryTable
+ */
+#define COLUMN_PINGPROBEHISTORYINDEX 1
+#define COLUMN_PINGPROBEHISTORYRESPONSE 2
+#define COLUMN_PINGPROBEHISTORYSTATUS 3
+#define COLUMN_PINGPROBEHISTORYLASTRC 4
+#define COLUMN_PINGPROBEHISTORYTIME 5
+#endif /* PINGPROBEHISTORYTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingResultsTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingResultsTable.c
new file mode 100644
index 0000000000..440edb498c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingResultsTable.c
@@ -0,0 +1,414 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:pingResultsTable.c
+ *File Description:Rows of lookupResultsTable MIB add and delete.
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+
+/*
+ * This should always be included first before anything else
+ */
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+
+
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "pingCtlTable.h"
+#include "pingResultsTable.h"
+#include "pingProbeHistoryTable.h"
+#include "header_complex.h"
+
+
+/*
+ *pingResultsTable_variables_oid:
+ *
+ */
+oid pingResultsTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 80, 1, 3 };
+
+struct variable2 pingResultsTable_variables[] = {
+ {COLUMN_PINGRESULTSOPERSTATUS, ASN_INTEGER, RONLY, var_pingResultsTable, 2, {1, 1}},
+ {COLUMN_PINGRESULTSIPTARGETADDRESSTYPE, ASN_INTEGER, RONLY, var_pingResultsTable, 2, {1, 2}},
+ {COLUMN_PINGRESULTSIPTARGETADDRESS, ASN_OCTET_STR, RONLY, var_pingResultsTable, 2, {1, 3}},
+ {COLUMN_PINGRESULTSMINRTT, ASN_UNSIGNED, RONLY, var_pingResultsTable, 2, {1, 4}},
+ {COLUMN_PINGRESULTSMAXRTT, ASN_UNSIGNED, RONLY, var_pingResultsTable, 2, {1, 5}},
+ {COLUMN_PINGRESULTSAVERAGERTT, ASN_UNSIGNED, RONLY, var_pingResultsTable, 2, {1, 6}},
+ {COLUMN_PINGRESULTSPROBERESPONSES, ASN_UNSIGNED, RONLY, var_pingResultsTable, 2, {1, 7}},
+ {COLUMN_PINGRESULTSSENTPROBES, ASN_UNSIGNED, RONLY, var_pingResultsTable, 2, {1, 8}},
+ {COLUMN_PINGRESULTSRTTSUMOFSQUARES, ASN_UNSIGNED, RONLY, var_pingResultsTable, 2, {1, 9}},
+ {COLUMN_PINGRESULTSLASTGOODPROBE, ASN_OCTET_STR, RONLY, var_pingResultsTable, 2, {1, 10}}
+};
+
+
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+
+extern struct header_complex_index *pingCtlTableStorage;
+extern struct header_complex_index *pingResultsTableStorage;
+
+void
+pingResultsTable_cleaner(struct header_complex_index *thestuff)
+{
+ struct header_complex_index *hciptr = NULL;
+ struct pingResultsTable_data *StorageDel = NULL;
+ DEBUGMSGTL(("pingResultsTable", "cleanerout "));
+ for (hciptr = thestuff; hciptr != NULL; hciptr = hciptr->next) {
+ StorageDel =
+ header_complex_extract_entry(&pingResultsTableStorage, hciptr);
+ DEBUGMSGTL(("pingResultsTable", "cleaner "));
+ }
+
+}
+void
+init_pingResultsTable(void)
+{
+
+ DEBUGMSGTL(("pingResultsTable", "initializing... "));
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("pingResultsTable", pingResultsTable_variables, variable2,
+ pingResultsTable_variables_oid);
+
+
+ /*
+ * register our config handler(s) to deal with registrations
+ */
+ snmpd_register_config_handler("pingResultsTable",
+ parse_pingResultsTable, NULL, NULL);
+
+ /*
+ * we need to be called back later to store our data
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_pingResultsTable, NULL);
+
+ DEBUGMSGTL(("pingResultsTable", "done.\n"));
+}
+
+/*
+ * parse_mteObjectsTable():
+ * parses .conf file entries needed to configure the mib.
+ */
+
+void
+parse_pingResultsTable(const char *token, char *line)
+{
+ size_t tmpint;
+ struct pingResultsTable_data *StorageTmp =
+ SNMP_MALLOC_STRUCT(pingResultsTable_data);
+
+ DEBUGMSGTL(("pingResultsTable", "parsing config... "));
+
+
+ if (StorageTmp == NULL) {
+ config_perror("malloc failure");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingCtlOwnerIndex,
+ &StorageTmp->pingCtlOwnerIndexLen);
+ if (StorageTmp->pingCtlOwnerIndex == NULL) {
+ config_perror("invalid specification for pingCtlOwnerIndex");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingCtlTestName,
+ &StorageTmp->pingCtlTestNameLen);
+ if (StorageTmp->pingCtlTestName == NULL) {
+ config_perror("invalid specification for pingCtlTestName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pingResultsOperStatus, &tmpint);
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->pingResultsIpTargetAddressType,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingResultsIpTargetAddress,
+ &StorageTmp->pingResultsIpTargetAddressLen);
+ if (StorageTmp->pingResultsIpTargetAddress == NULL) {
+ config_perror
+ ("invalid specification for pingResultsIpTargetAddress");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingResultsMinRtt, &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingResultsMaxRtt, &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingResultsAverageRtt, &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingResultsProbeResponses,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingResultsSendProbes, &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->pingResultsRttSumOfSquares,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->pingResultsLastGoodProbe,
+ &StorageTmp->pingResultsLastGoodProbeLen);
+ if (StorageTmp->pingResultsLastGoodProbe == NULL) {
+ config_perror
+ ("invalid specification for pingResultsLastGoodProbe!");
+ return;
+ }
+
+ pingResultsTable_inadd(StorageTmp);
+
+ /* pingResultsTable_cleaner(pingResultsTableStorage); */
+
+ DEBUGMSGTL(("pingResultsTable", "done.\n"));
+}
+
+
+
+
+
+/*
+ * store_pingResultsTable():
+ * stores .conf file entries needed to configure the mib.
+ */
+
+int
+store_pingResultsTable(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr;
+ size_t tmpint;
+ struct pingResultsTable_data *StorageTmp;
+ struct header_complex_index *hcindex;
+
+
+ DEBUGMSGTL(("pingResultsTable", "storing data... "));
+
+
+ for (hcindex = pingResultsTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp = (struct pingResultsTable_data *) hcindex->data;
+
+ if (StorageTmp->storageType != ST_READONLY) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "pingResultsTable ");
+ cptr = line + strlen(line);
+
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pingCtlOwnerIndex,
+ &StorageTmp->pingCtlOwnerIndexLen);
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->pingCtlTestName,
+ &StorageTmp->pingCtlTestNameLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->pingResultsOperStatus,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ pingResultsIpTargetAddressType,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ pingResultsIpTargetAddress,
+ &StorageTmp->
+ pingResultsIpTargetAddressLen);
+
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->pingResultsMinRtt,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->pingResultsMaxRtt,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->pingResultsAverageRtt,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ pingResultsProbeResponses, &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->pingResultsSendProbes,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ pingResultsRttSumOfSquares,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ pingResultsLastGoodProbe,
+ &StorageTmp->
+ pingResultsLastGoodProbeLen);
+
+ snmpd_store_config(line);
+ }
+ }
+ DEBUGMSGTL(("pingResultsTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+int
+pingResultsTable_inadd(struct pingResultsTable_data *thedata)
+{
+ netsnmp_variable_list *vars_list;
+ vars_list = NULL;
+
+
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlOwnerIndex, thedata->pingCtlOwnerIndexLen); /* pingCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->pingCtlTestName, thedata->pingCtlTestNameLen); /* pingCtlTestName */
+
+ /*
+ * XXX: fill in default row values here into StorageNew
+ *
+ */
+
+
+ DEBUGMSGTL(("pingResultsTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ header_complex_add_data(&pingResultsTableStorage, vars_list, thedata);
+ DEBUGMSGTL(("pingResultsTable", "registered an entry\n"));
+
+
+ DEBUGMSGTL(("pingResultsTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+/*
+ * var_pingResultsTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_pingResultsTable above.
+ */
+unsigned char *
+var_pingResultsTable(struct variable *vp,
+ oid * name,
+ size_t *length,
+ int exact,
+ size_t *var_len, WriteMethod ** write_method)
+{
+
+
+ struct pingResultsTable_data *StorageTmp = NULL;
+
+ *write_method = NULL;
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(pingResultsTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL) {
+
+ return NULL;
+ }
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+
+ switch (vp->magic) {
+
+ case COLUMN_PINGRESULTSOPERSTATUS:
+ *var_len = sizeof(StorageTmp->pingResultsOperStatus);
+ return (u_char *) & StorageTmp->pingResultsOperStatus;
+
+ case COLUMN_PINGRESULTSIPTARGETADDRESSTYPE:
+ *var_len = sizeof(StorageTmp->pingResultsIpTargetAddressType);
+ return (u_char *) & StorageTmp->pingResultsIpTargetAddressType;
+
+ case COLUMN_PINGRESULTSIPTARGETADDRESS:
+ *var_len = (StorageTmp->pingResultsIpTargetAddressLen);
+ return (u_char *) StorageTmp->pingResultsIpTargetAddress;
+
+ case COLUMN_PINGRESULTSMINRTT:
+ *var_len = sizeof(StorageTmp->pingResultsMinRtt);
+ return (u_char *) & StorageTmp->pingResultsMinRtt;
+
+ case COLUMN_PINGRESULTSMAXRTT:
+ *var_len = sizeof(StorageTmp->pingResultsMaxRtt);
+ return (u_char *) & StorageTmp->pingResultsMaxRtt;
+
+ case COLUMN_PINGRESULTSAVERAGERTT:
+ *var_len = sizeof(StorageTmp->pingResultsAverageRtt);
+ return (u_char *) & StorageTmp->pingResultsAverageRtt;
+
+ case COLUMN_PINGRESULTSPROBERESPONSES:
+ *var_len = sizeof(StorageTmp->pingResultsProbeResponses);
+ return (u_char *) & StorageTmp->pingResultsProbeResponses;
+
+ case COLUMN_PINGRESULTSSENTPROBES:
+ *var_len = sizeof(StorageTmp->pingResultsSendProbes);
+ return (u_char *) & StorageTmp->pingResultsSendProbes;
+
+ case COLUMN_PINGRESULTSRTTSUMOFSQUARES:
+ *var_len = sizeof(StorageTmp->pingResultsRttSumOfSquares);
+ return (u_char *) & StorageTmp->pingResultsRttSumOfSquares;
+
+ case COLUMN_PINGRESULTSLASTGOODPROBE:
+ *var_len = (StorageTmp->pingResultsLastGoodProbeLen);
+ return (u_char *) StorageTmp->pingResultsLastGoodProbe;
+
+ default:
+ ERROR_MSG("");
+ }
+
+ return NULL;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingResultsTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingResultsTable.h
new file mode 100644
index 0000000000..5cfa33918d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/ping/pingResultsTable.h
@@ -0,0 +1,42 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:pingResultsTable.h
+ *File Description:The head file of pingResultsTable.c
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+
+#ifndef PINGRESULTSTABLE_H
+#define PINGRESULTSTABLE_H
+
+config_require(header_complex);
+
+/*
+ * function declarations
+ */
+void init_pingResultsTable(void);
+FindVarMethod var_pingResultsTable;
+void parse_pingResultsTable(const char *, char *);
+SNMPCallback store_pingResultsTable;
+
+
+/*
+ * column number definitions for table pingResultsTable
+ */
+#define COLUMN_PINGRESULTSOPERSTATUS 1
+#define COLUMN_PINGRESULTSIPTARGETADDRESSTYPE 2
+#define COLUMN_PINGRESULTSIPTARGETADDRESS 3
+#define COLUMN_PINGRESULTSMINRTT 4
+#define COLUMN_PINGRESULTSMAXRTT 5
+#define COLUMN_PINGRESULTSAVERAGERTT 6
+#define COLUMN_PINGRESULTSPROBERESPONSES 7
+#define COLUMN_PINGRESULTSSENTPROBES 8
+#define COLUMN_PINGRESULTSRTTSUMOFSQUARES 9
+#define COLUMN_PINGRESULTSLASTGOODPROBE 10
+#endif /* PINGRESULTSTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule.h
new file mode 100644
index 0000000000..a3351b692b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule.h
@@ -0,0 +1,3 @@
+config_require(disman/schedule/schedCore)
+config_require(disman/schedule/schedConf)
+config_require(disman/schedule/schedTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedConf.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedConf.c
new file mode 100644
index 0000000000..2e67b73e77
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedConf.c
@@ -0,0 +1,427 @@
+/*
+ * DisMan Schedule MIB:
+ * Implementation of the schedule MIB config handling
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <ctype.h>
+#include "disman/schedule/schedCore.h"
+#include "disman/schedule/schedConf.h"
+
+static int schedEntries;
+
+/** Initializes the schedConf module */
+void
+init_schedConf(void)
+{
+ DEBUGMSGTL(("disman:schedule:init", "Initializing config module\n"));
+ init_schedule_container();
+
+ /*
+ * Register public configuration directives
+ */
+ snmpd_register_config_handler("repeat", parse_sched_periodic, NULL,
+ "repeat period OID = value");
+ snmpd_register_config_handler("cron", parse_sched_timed, NULL,
+ "cron * * * * * OID = value");
+ snmpd_register_config_handler("at", parse_sched_timed, NULL,
+ "at * * * * * OID = value");
+
+ /*
+ * Register internal configuration directive,
+ * and arrange for dynamically configured entries to be saved
+ */
+ snmpd_register_config_handler("_schedTable", parse_schedTable, NULL, NULL);
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_schedTable, NULL);
+ schedEntries = 0;
+}
+
+
+/* =======================================================
+ *
+ * Handlers for user-configured (static) scheduled actions
+ *
+ * ======================================================= */
+
+void
+parse_sched_periodic( const char *token, char *line )
+{
+ netsnmp_tdata_row *row;
+ struct schedTable_entry *entry;
+ char buf[24];
+ long frequency;
+ long value;
+ size_t tmpint;
+ oid variable[ MAX_OID_LEN], *var_ptr = variable;
+ size_t var_len = MAX_OID_LEN;
+
+ schedEntries++;
+ sprintf(buf, "_conf%03d", schedEntries);
+
+ DEBUGMSGTL(( "disman:schedule:conf", "periodic: %s %s\n", token, line));
+ /*
+ * Parse the configure directive line
+ */
+ line = read_config_read_data(ASN_INTEGER, line, &frequency, &tmpint);
+ line = read_config_read_data(ASN_OBJECT_ID, line, &var_ptr, &var_len);
+ if (var_len == 0) {
+ config_perror("invalid specification for schedVariable");
+ return;
+ }
+ /*
+ * Skip over optional assignment in "var = value"
+ */
+ while (line && isspace(*line))
+ line++;
+ if (line && *line == '=' ) {
+ line++;
+ while (line && isspace(*line)) {
+ line++;
+ }
+ }
+ line = read_config_read_data(ASN_INTEGER, line, &value, &tmpint);
+
+ /*
+ * Create an entry in the schedTable
+ */
+ row = schedTable_createEntry( "snmpd.conf", buf );
+ if (!row || !row->data) {
+ config_perror("create schedule entry failure");
+ return;
+ }
+ entry = (struct schedTable_entry *)row->data;
+
+ entry->schedInterval = frequency;
+ entry->schedValue = value;
+ entry->schedVariable_len = var_len;
+ memcpy(entry->schedVariable, variable, var_len*sizeof(oid));
+
+ entry->schedType = SCHED_TYPE_PERIODIC;
+ entry->schedStorageType = ST_READONLY; /* or PERMANENT */
+ entry->flags = SCHEDULE_FLAG_ENABLED |
+ SCHEDULE_FLAG_ACTIVE |
+ SCHEDULE_FLAG_VALID;
+ entry->session = netsnmp_query_get_default_session();
+ sched_nextTime( entry );
+}
+
+
+/*
+ * Timed-schedule utility:
+ * Convert from a cron-style specification to the equivalent set
+ * of bits. Note that minute, hour and weekday crontab fields are
+ * 0-based, while day and month more naturally start from 1.
+ */
+void
+_sched_convert_bits( char *cron_spec, char *bit_buf,
+ int bit_buf_len, int max_val, int startAt1 ) {
+ char *cp = cron_spec;
+ char b[] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
+ int val, major, minor;
+ int overshoot;
+
+ if (!cron_spec || !bit_buf)
+ return;
+
+ /*
+ * Wildcard field - set all bits
+ */
+ if ( *cp == '*' ) {
+ memset( bit_buf, 0xff, bit_buf_len );
+
+ /*
+ * An "all-bits" specification may not be an exact multiple of 8.
+ * Work out how far we've overshot things, and tidy up the excess.
+ */
+ overshoot = 8*bit_buf_len-max_val;
+ while ( overshoot > 0 ) {
+ bit_buf[ bit_buf_len-1 ] ^= b[8-overshoot];
+ overshoot--;
+ }
+ return;
+ }
+
+ /*
+ * Otherwise, clear the bit string buffer,
+ * and start calculating which bits to set
+ */
+ memset( bit_buf, 0, bit_buf_len );
+
+ while (1) {
+ sscanf( cp, "%d", &val);
+ /* Handle negative day specification */
+ if ( val < 0 ) {
+ val = max_val - val;
+ }
+ if ( startAt1 )
+ val--;
+ major = val/8;
+ minor = val%8;
+ bit_buf[ major ] |= b[minor];
+
+ /* XXX - ideally we should handle "X-Y" syntax as well */
+ while (*cp && *cp!=',')
+ cp++;
+ if (!*cp)
+ break;
+ cp++;
+ }
+}
+
+void
+parse_sched_timed( const char *token, char *line )
+{
+ netsnmp_tdata_row *row;
+ struct schedTable_entry *entry;
+ char buf[24], *cp;
+
+ char minConf[512]; size_t min_len = sizeof(minConf); char minVal[8];
+ char hourConf[512]; size_t hour_len = sizeof(hourConf); char hourVal[3];
+ char dateConf[512]; size_t date_len = sizeof(dateConf); char dateVal[8];
+ char monConf[512]; size_t mon_len = sizeof(monConf); char monVal[2];
+ char dayConf[512]; size_t day_len = sizeof(dayConf); char dayVal;
+
+ long value;
+ size_t tmpint;
+ oid variable[ MAX_OID_LEN], *var_ptr = variable;
+ size_t var_len = MAX_OID_LEN;
+
+ schedEntries++;
+ sprintf(buf, "_conf%03d", schedEntries);
+
+ DEBUGMSGTL(( "sched", "config: %s %s\n", token, line));
+ /*
+ * Parse the configure directive line
+ */
+ cp = minConf;
+ line = read_config_read_data(ASN_OCTET_STR, line, &cp, &min_len);
+ cp = hourConf;
+ line = read_config_read_data(ASN_OCTET_STR, line, &cp, &hour_len);
+ cp = dateConf;
+ line = read_config_read_data(ASN_OCTET_STR, line, &cp, &date_len);
+ cp = monConf;
+ line = read_config_read_data(ASN_OCTET_STR, line, &cp, &mon_len);
+ cp = dayConf;
+ line = read_config_read_data(ASN_OCTET_STR, line, &cp, &day_len);
+ if (!line) {
+ config_perror("invalid schedule time specification");
+ return;
+ }
+
+ line = read_config_read_data(ASN_OBJECT_ID, line, &var_ptr, &var_len);
+ if (var_len == 0) {
+ config_perror("invalid specification for schedVariable");
+ return;
+ }
+ /*
+ * Skip over optional assignment in "var = value"
+ */
+ while (line && isspace(*line))
+ line++;
+ if ( *line == '=' ) {
+ line++;
+ while (line && isspace(*line)) {
+ line++;
+ }
+ }
+ line = read_config_read_data(ASN_INTEGER, line, &value, &tmpint);
+
+ /*
+ * Convert from cron-style specifications into bits
+ */
+ _sched_convert_bits( minConf, minVal, 8, 60, 0 );
+ _sched_convert_bits( hourConf, hourVal, 3, 24, 0 );
+ memset(dateVal+4, 0, 4); /* Clear the reverse day bits */
+ _sched_convert_bits( dateConf, dateVal, 4, 31, 1 );
+ _sched_convert_bits( monConf, monVal, 2, 12, 1 );
+ _sched_convert_bits( dayConf, &dayVal, 1, 8, 0 );
+ if ( dayVal & 0x01 ) { /* sunday(7) = sunday(0) */
+ dayVal |= 0x80;
+ dayVal &= 0xfe;
+ }
+
+ /*
+ * Create an entry in the schedTable
+ */
+ row = schedTable_createEntry("snmpd.conf", buf);
+ if (!row || !row->data) {
+ config_perror("create schedule entry failure");
+ return;
+ }
+ entry = (struct schedTable_entry *)row->data;
+
+ entry->schedWeekDay = dayVal;
+ memcpy(entry->schedMonth, monVal, 2);
+ memcpy(entry->schedDay, dateVal, 4+4);
+ memcpy(entry->schedHour, hourVal, 3);
+ memcpy(entry->schedMinute, minVal, 8);
+
+ memcpy(entry->schedVariable, variable, var_len*sizeof(oid));
+ entry->schedVariable_len = var_len;
+ entry->schedValue = value;
+
+ if ( !strcmp( token, "at" ))
+ entry->schedType = SCHED_TYPE_ONESHOT;
+ else
+ entry->schedType = SCHED_TYPE_CALENDAR;
+ entry->schedStorageType = ST_READONLY; /* or PERMANENT */
+ entry->flags = SCHEDULE_FLAG_ENABLED |
+ SCHEDULE_FLAG_ACTIVE |
+ SCHEDULE_FLAG_VALID;
+ entry->session = netsnmp_query_get_default_session();
+ sched_nextTime( entry );
+}
+
+
+/* ========================================
+ *
+ * Handlers for persistent schedule entries
+ *
+ * ======================================== */
+
+void
+parse_schedTable( const char *token, char *line )
+{
+ char owner[SCHED_STR1_LEN+1];
+ char name[ SCHED_STR1_LEN+1];
+ char time_bits[22]; /* schedWeekDay..schedMinute */
+ void *vp;
+ size_t len;
+ netsnmp_tdata_row *row;
+ struct schedTable_entry *entry;
+
+ DEBUGMSGTL(("disman:schedule:conf", "Parsing schedTable config... "));
+
+ /*
+ * Read in the index information for this entry
+ * and create a (non-fixed) data structure for it.
+ */
+ memset( owner, 0, sizeof(owner));
+ memset( name, 0, sizeof(name));
+ len = SCHED_STR1_LEN; vp = owner;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = SCHED_STR1_LEN; vp = name;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ row = schedTable_createEntry(owner, name);
+ if (!row || !row->data) {
+ config_perror("create schedule entry failure");
+ return;
+ }
+ entry = (struct schedTable_entry *)row->data;
+ DEBUGMSG(("disman:schedule:conf", "(%s, %s) ", owner, name));
+
+ /*
+ * Read in the column values.
+ */
+ len = SCHED_STR2_LEN; vp = entry->schedDescr;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ line = read_config_read_data(ASN_UNSIGNED, line,
+ &entry->schedInterval, NULL);
+ /* Unpick the various timed bits */
+ len = 22; vp = time_bits;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ entry->schedWeekDay = time_bits[0];
+ entry->schedMonth[0] = time_bits[1];
+ entry->schedMonth[1] = time_bits[2];
+ entry->schedHour[0] = time_bits[11];
+ entry->schedHour[1] = time_bits[12];
+ entry->schedHour[2] = time_bits[13];
+ memcpy(entry->schedDay, time_bits+3, 8);
+ memcpy(entry->schedMinute, time_bits+14, 8);
+
+ len = SCHED_STR1_LEN; vp = entry->schedContextName;
+ line = read_config_read_data(ASN_OCTET_STR, line, &vp, &len);
+ len = MAX_OID_LEN; vp = entry->schedVariable;
+ line = read_config_read_data(ASN_OBJECT_ID, line, &vp, &len);
+ entry->schedVariable_len = len;
+ line = read_config_read_data(ASN_INTEGER, line,
+ &entry->schedValue, NULL);
+ line = read_config_read_data(ASN_UNSIGNED, line,
+ &entry->schedType, NULL);
+ line = read_config_read_data(ASN_UNSIGNED, line, &len, NULL);
+ entry->flags |= (len /* & WHAT ?? */);
+ /* XXX - Will need to read in the 'iquery' access information */
+ entry->flags |= SCHEDULE_FLAG_VALID;
+
+ DEBUGMSG(("disman:schedule:conf", "\n"));
+}
+
+/*
+ * Save dynamically-configured schedTable entries into persistent storage
+ */
+int
+store_schedTable(int majorID, int minorID, void *serverarg, void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char time_bits[22]; /* schedWeekDay..schedMinute */
+ char *cptr;
+ void *vp;
+ size_t tint;
+ netsnmp_tdata_row *row;
+ struct schedTable_entry *entry;
+
+
+ DEBUGMSGTL(( "disman:schedule:conf", "Storing schedTable:\n"));
+
+ for (row = netsnmp_tdata_row_first( schedule_table );
+ row;
+ row = netsnmp_tdata_row_next( schedule_table, row )) {
+
+ if (!row->data)
+ continue;
+ entry = (struct schedTable_entry *)row->data;
+
+ /*
+ * Only save (dynamically-created) 'nonVolatile' entries
+ * (XXX - what about dynamic 'permanent' entries ??)
+ */
+ if (entry->schedStorageType != ST_NONVOLATILE )
+ continue;
+ DEBUGMSGTL(( "disman:schedule:conf", " Storing (%s, %s)\n",
+ entry->schedOwner, entry->schedName));
+
+ memset(line, 0, sizeof(line));
+ strcpy(line, "_schedTable ");
+ cptr = line + strlen(line);
+
+ vp = entry->schedOwner; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->schedName; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->schedDescr; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ tint = entry->schedInterval;
+ cptr = read_config_store_data(ASN_UNSIGNED, cptr, &tint, NULL );
+
+ /* Combine all the timed bits into a single field */
+ time_bits[0] = entry->schedWeekDay;
+ time_bits[1] = entry->schedMonth[0];
+ time_bits[2] = entry->schedMonth[1];
+ time_bits[11] = entry->schedHour[0];
+ time_bits[12] = entry->schedHour[1];
+ time_bits[13] = entry->schedHour[2];
+ memcpy(time_bits+3, entry->schedDay, 8);
+ memcpy(time_bits+14, entry->schedMinute, 8);
+ vp = time_bits; tint = 22;
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+
+ vp = entry->schedContextName; tint = strlen( vp );
+ cptr = read_config_store_data(ASN_OCTET_STR, cptr, &vp, &tint );
+ vp = entry->schedVariable;
+ tint = entry->schedVariable_len;
+ cptr = read_config_store_data(ASN_OBJECT_ID, cptr, &vp, &tint );
+ tint = entry->schedValue;
+ cptr = read_config_store_data(ASN_INTEGER, cptr, &tint, NULL );
+ tint = entry->schedType;
+ cptr = read_config_store_data(ASN_UNSIGNED, cptr, &tint, NULL );
+ tint = entry->flags /* & WHAT ?? */;
+ cptr = read_config_store_data(ASN_UNSIGNED, cptr, &tint, NULL );
+ /* XXX - Need to store the 'iquery' access information */
+ snmpd_store_config(line);
+ }
+ DEBUGMSGTL(( "disman:schedule:conf", " done.\n"));
+ return SNMPERR_SUCCESS;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedConf.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedConf.h
new file mode 100644
index 0000000000..91f496579c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedConf.h
@@ -0,0 +1,17 @@
+#ifndef SCHEDCONF_H
+#define SCHEDCONF_H
+
+config_require(disman/schedule/schedCore)
+
+/*
+ * function declarations
+ */
+void init_schedConf(void);
+
+void parse_sched_periodic(const char *, char *);
+void parse_sched_timed( const char *, char *);
+void parse_schedTable( const char *, char *);
+SNMPCallback store_schedTable;
+
+
+#endif /* SCHEDCONF_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedCore.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedCore.c
new file mode 100644
index 0000000000..94c9f25574
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedCore.c
@@ -0,0 +1,503 @@
+/*
+ * DisMan Schedule MIB:
+ * Core implementation of the schedule handling behaviour
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "disman/schedule/schedCore.h"
+#include "utilities/iquery.h"
+
+netsnmp_tdata *schedule_table;
+
+ /*
+ * Initialize the container for the schedule table,
+ * regardless of which initialisation routine is called first.
+ */
+void
+init_schedule_container(void)
+{
+ DEBUGMSGTL(("disman:schedule:init", "init schedule container\n"));
+ if (!schedule_table) {
+ schedule_table = netsnmp_tdata_create_table("schedTable", 0);
+ DEBUGMSGTL(("disman:schedule:init",
+ "create schedule container(%x)\n", schedule_table));
+ }
+}
+
+/** Initializes the schedCore module */
+void
+init_schedCore(void)
+{
+ /*
+ * Create a table structure for the schedule table
+ * This will typically be registered by the schedTable module
+ */
+ DEBUGMSGTL(("disman:schedule:init", "Initializing core module\n"));
+ init_schedule_container();
+}
+
+
+/*
+ * Callback to invoke a scheduled action
+ */
+static void
+_sched_callback( unsigned int reg, void *magic )
+{
+ struct schedTable_entry *entry = (struct schedTable_entry *)magic;
+ int ret;
+ netsnmp_variable_list assign;
+
+ if ( !entry ) {
+ DEBUGMSGTL(("disman:schedule:callback", "missing entry\n"));
+ return;
+ }
+ entry->schedLastRun = time(0);
+ entry->schedTriggers++;
+
+ DEBUGMSGTL(( "disman:schedule:callback", "assignment "));
+ DEBUGMSGOID(("disman:schedule:callback", entry->schedVariable,
+ entry->schedVariable_len));
+ DEBUGMSG(( "disman:schedule:callback", " = %d\n", entry->schedValue));
+
+ memset(&assign, 0, sizeof(netsnmp_variable_list));
+ snmp_set_var_objid(&assign, entry->schedVariable, entry->schedVariable_len);
+ snmp_set_var_typed_value(&assign, ASN_INTEGER,
+ (u_char *)&entry->schedValue,
+ sizeof(entry->schedValue));
+
+ ret = netsnmp_query_set( &assign, entry->session );
+ if ( ret != SNMP_ERR_NOERROR ) {
+ DEBUGMSGTL(( "disman:schedule:callback",
+ "assignment failed (%d)\n", ret));
+ entry->schedFailures++;
+ entry->schedLastFailure = ret;
+ time ( &entry->schedLastFailed );
+ }
+
+ sched_nextTime( entry );
+}
+
+
+ /*
+ * Internal utility routines to help interpret
+ * calendar-based schedule bit strings
+ */
+static char _masks[] = { /* 0xff, */ 0x7f, 0x3f, 0x1f,
+ 0x0f, 0x07, 0x03, 0x01, 0x00 };
+static char _bits[] = { 0x80, 0x40, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x01 };
+
+/*
+ * Are any of the bits set?
+ */
+static int
+_bit_allClear( char *pattern, int len ) {
+ int i;
+
+ for (i=0; i<len; i++) {
+ if ( pattern[i] != 0 )
+ return 0; /* At least one bit set */
+ }
+ return 1; /* All bits clear */
+}
+
+/*
+ * Is a particular bit set?
+ */
+static int
+_bit_set( char *pattern, int bit ) {
+ int major, minor;
+
+ major = bit/8;
+ minor = bit%8;
+ if ( pattern[major] & _bits[minor] ) {
+ return 1; /* Specified bit is set */
+ }
+ return 0; /* Bit not set */
+}
+
+/*
+ * What is the next bit set?
+ * (after a specified point)
+ */
+static int
+_bit_next( char *pattern, int current, size_t len ) {
+ char buf[ 8 ];
+ int major, minor, i, j;
+
+ /* Make a working copy of the bit pattern */
+ memset( buf, 0, 8 );
+ memcpy( buf, pattern, len );
+
+ /*
+ * If we're looking for the first bit after some point,
+ * then clear all earlier bits from the working copy.
+ */
+ if ( current > -1 ) {
+ major = current/8;
+ minor = current%8;
+ for ( i=0; i<major; i++ )
+ buf[i]=0;
+ buf[major] &= _masks[minor];
+ }
+
+ /*
+ * Look for the first bit that's set
+ */
+ for ( i=0; i<len; i++ ) {
+ if ( buf[i] != 0 ) {
+ major = i*8;
+ for ( j=0; j<8; j++ ) {
+ if ( buf[i] & _bits[j] ) {
+ return major+j;
+ }
+ }
+ }
+ }
+ return -1; /* No next bit */
+}
+
+
+static int _daysPerMonth[] = { 31, 28, 31, 30,
+ 31, 30, 31, 31,
+ 30, 31, 30, 31, 29 };
+
+static char _truncate[] = { 0xfe, 0xf0, 0xfe, 0xfc,
+ 0xfe, 0xfc, 0xfe, 0xfe,
+ 0xfc, 0xfe, 0xfc, 0xfe, 0xf8 };
+
+/*
+ * What is the next day with a relevant bit set?
+ *
+ * Merge the forward and reverse day bits into a single
+ * pattern relevant for this particular month,
+ * and apply the standard _bit_next() call.
+ * Then check this result against the day of the week bits.
+ */
+static int
+_bit_next_day( char *day_pattern, char weekday_pattern,
+ int day, int month, int year ) {
+ char buf[4];
+ union {
+ char buf2[4];
+ int int_val;
+ } rev;
+ int next_day, i;
+ struct tm tm_val;
+
+ /* Make a working copy of the forward day bits ... */
+ memset( buf, 0, 4 );
+ memcpy( buf, day_pattern, 4 );
+
+ /* ... and another (right-aligned) of the reverse day bits */
+ memset( rev.buf2, 0, 4 );
+ memcpy( rev.buf2, day_pattern+4, 4 );
+ rev.int_val >>= 2;
+ if ( buf[3] & 0x01 )
+ rev.buf2[0] |= 0x40;
+ if ( month == 3 || month == 5 ||
+ month == 8 || month == 10 )
+ rev.int_val >>= 1; /* April, June, September, November */
+ if ( month == 1 )
+ rev.int_val >>= 3; /* February */
+ if ( month == 12 )
+ rev.int_val >>= 2; /* February (leap year) */
+
+ /* Combine the two bit patterns, and truncate to the month end */
+ for ( i=0; i<4; i++ ) {
+ if ( rev.buf2[i] & 0x80 ) buf[3-i] |= 0x01;
+ if ( rev.buf2[i] & 0x40 ) buf[3-i] |= 0x02;
+ if ( rev.buf2[i] & 0x20 ) buf[3-i] |= 0x04;
+ if ( rev.buf2[i] & 0x10 ) buf[3-i] |= 0x08;
+ if ( rev.buf2[i] & 0x08 ) buf[3-i] |= 0x10;
+ if ( rev.buf2[i] & 0x04 ) buf[3-i] |= 0x20;
+ if ( rev.buf2[i] & 0x02 ) buf[3-i] |= 0x40;
+ if ( rev.buf2[i] & 0x01 ) buf[3-i] |= 0x80;
+ }
+
+ buf[3] &= _truncate[ month ];
+
+ next_day = day-1; /* tm_day is 1-based, not 0-based */
+ do {
+ next_day = _bit_next( buf, next_day, 4 );
+ if ( next_day < 0 )
+ return -1;
+
+ /*
+ * Calculate the day of the week, and
+ * check this against the weekday pattern
+ */
+ memset( &tm_val, 0, sizeof(struct tm));
+ tm_val.tm_mday = next_day+1;
+ tm_val.tm_mon = month;
+ tm_val.tm_year = year;
+ mktime( &tm_val );
+ } while ( !_bit_set( &weekday_pattern, tm_val.tm_wday ));
+ return next_day+1; /* Convert back to 1-based list */
+}
+
+
+#ifndef HAVE_LOCALTIME_R
+struct tm *
+localtime_r(const time_t *timep, struct tm *result) {
+ struct tm *tmp;
+
+ tmp = localtime( timep );
+ if ( tmp && result ) {
+ memcpy( result, tmp, sizeof(struct tm));
+ }
+
+ return (tmp ? result : NULL );
+}
+#endif
+
+/*
+ * determine the time for the next scheduled action of a given entry
+ */
+void
+sched_nextTime( struct schedTable_entry *entry )
+{
+ time_t now;
+ struct tm now_tm, next_tm;
+ int rev_day, mon;
+
+ time( &now );
+
+ if ( !entry ) {
+ DEBUGMSGTL(("disman:schedule:time", "missing entry\n"));
+ return;
+ }
+
+ if ( entry->schedCallbackID )
+ snmp_alarm_unregister( entry->schedCallbackID );
+
+ if (!(entry->flags & SCHEDULE_FLAG_ENABLED) ||
+ !(entry->flags & SCHEDULE_FLAG_ACTIVE)) {
+ DEBUGMSGTL(("disman:schedule:time", "inactive entry\n"));
+ return;
+ }
+
+ switch ( entry->schedType ) {
+ case SCHED_TYPE_PERIODIC:
+ if ( !entry->schedInterval ) {
+ DEBUGMSGTL(("disman:schedule:time", "periodic: no interval\n"));
+ return;
+ }
+ if ( entry->schedLastRun ) {
+ entry->schedNextRun = entry->schedLastRun +
+ entry->schedInterval;
+ } else {
+ entry->schedNextRun = now + entry->schedInterval;
+ }
+ DEBUGMSGTL(("disman:schedule:time", "periodic: (%d) %s",
+ entry->schedNextRun,
+ ctime(&entry->schedNextRun)));
+ break;
+
+ case SCHED_TYPE_ONESHOT:
+ if ( entry->schedLastRun ) {
+ DEBUGMSGTL(("disman:schedule:time", "one-shot: expired (%d) %s",
+ entry->schedNextRun,
+ ctime(&entry->schedNextRun)));
+ return;
+ }
+ /* Fallthrough */
+ DEBUGMSGTL(("disman:schedule:time", "one-shot: fallthrough\n"));
+ case SCHED_TYPE_CALENDAR:
+ /*
+ * Check for complete time specification
+ * If any of the five fields have no bits set,
+ * the entry can't possibly match any time.
+ */
+ if ( _bit_allClear( entry->schedMinute, 8 ) ||
+ _bit_allClear( entry->schedHour, 3 ) ||
+ _bit_allClear( entry->schedDay, 4+4 ) ||
+ _bit_allClear( entry->schedMonth, 2 ) ||
+ _bit_allClear(&entry->schedWeekDay, 1 )) {
+ DEBUGMSGTL(("disman:schedule:time", "calendar: incomplete spec\n"));
+ return;
+ }
+
+ /*
+ * Calculate the next run time:
+ *
+ * If the current Month, Day & Hour bits are set
+ * calculate the next specified minute
+ * If this fails (or the current Hour bit is not set)
+ * use the first specified minute,
+ * and calculate the next specified hour
+ * If this fails (or the current Day bit is not set)
+ * use the first specified minute and hour
+ * and calculate the next specified day (in this month)
+ * If this fails (or the current Month bit is not set)
+ * use the first specified minute and hour
+ * calculate the next specified month, and
+ * the first specified day (in that month)
+ */
+
+ localtime_r( &now, &now_tm );
+ localtime_r( &now, &next_tm );
+
+ next_tm.tm_mon=-1;
+ next_tm.tm_mday=-1;
+ next_tm.tm_hour=-1;
+ next_tm.tm_min=-1;
+ next_tm.tm_sec=0;
+ if ( _bit_set( entry->schedMonth, now_tm.tm_mon )) {
+ next_tm.tm_mon = now_tm.tm_mon;
+ rev_day = _daysPerMonth[ now_tm.tm_mon ] - now_tm.tm_mday;
+ if ( _bit_set( &entry->schedWeekDay, now_tm.tm_wday ) &&
+ (_bit_set( entry->schedDay, now_tm.tm_mday-1 ) ||
+ _bit_set( entry->schedDay, 31+rev_day ))) {
+ next_tm.tm_mday = now_tm.tm_mday;
+
+ if ( _bit_set( entry->schedHour, now_tm.tm_hour )) {
+ next_tm.tm_hour = now_tm.tm_hour;
+ /* XXX - Check Fall timechange */
+ next_tm.tm_min = _bit_next( entry->schedMinute,
+ now_tm.tm_min, 8 );
+ } else {
+ next_tm.tm_min = -1;
+ }
+
+ if ( next_tm.tm_min == -1 ) {
+ next_tm.tm_min = _bit_next( entry->schedMinute, -1, 8 );
+ next_tm.tm_hour = _bit_next( entry->schedHour,
+ now_tm.tm_hour, 3 );
+ }
+ } else {
+ next_tm.tm_hour = -1;
+ }
+
+ if ( next_tm.tm_hour == -1 ) {
+ next_tm.tm_min = _bit_next( entry->schedMinute, -1, 8 );
+ next_tm.tm_hour = _bit_next( entry->schedHour, -1, 3 );
+ /* Handle leap years */
+ mon = now_tm.tm_mon;
+ if ( mon == 1 && (now_tm.tm_year%4 == 0) )
+ mon = 12;
+ next_tm.tm_mday = _bit_next_day( entry->schedDay,
+ entry->schedWeekDay,
+ now_tm.tm_mday,
+ mon, now_tm.tm_year );
+ }
+ } else {
+ next_tm.tm_min = _bit_next( entry->schedMinute, -1, 2 );
+ next_tm.tm_hour = _bit_next( entry->schedHour, -1, 3 );
+ next_tm.tm_mday = -1;
+ next_tm.tm_mon = now_tm.tm_mon;
+ }
+
+ while ( next_tm.tm_mday == -1 ) {
+ next_tm.tm_mon = _bit_next( entry->schedMonth,
+ next_tm.tm_mon, 2 );
+ if ( next_tm.tm_mon == -1 ) {
+ next_tm.tm_year++;
+ next_tm.tm_mon = _bit_next( entry->schedMonth,
+ -1, 2 );
+ }
+ /* Handle leap years */
+ mon = next_tm.tm_mon;
+ if ( mon == 1 && (next_tm.tm_year%4 == 0) )
+ mon = 12;
+ next_tm.tm_mday = _bit_next_day( entry->schedDay,
+ entry->schedWeekDay,
+ -1, mon, next_tm.tm_year );
+ /* XXX - catch infinite loop */
+ }
+
+ /* XXX - Check for Spring timechange */
+
+ /*
+ * 'next_tm' now contains the time for the next scheduled run
+ */
+ entry->schedNextRun = mktime( &next_tm );
+ DEBUGMSGTL(("disman:schedule:time", "calendar: (%d) %s",
+ entry->schedNextRun,
+ ctime(&entry->schedNextRun)));
+ return;
+
+ default:
+ DEBUGMSGTL(("disman:schedule:time", "unknown type (%d)\n",
+ entry->schedType));
+ return;
+ }
+ entry->schedCallbackID = snmp_alarm_register(
+ entry->schedNextRun - now,
+ 0, _sched_callback, entry );
+ return;
+}
+
+void
+sched_nextRowTime( netsnmp_tdata_row *row )
+{
+ sched_nextTime((struct schedTable_entry *) row->data );
+}
+
+/*
+ * create a new row in the table
+ */
+netsnmp_tdata_row *
+schedTable_createEntry(const char *schedOwner, const char *schedName)
+{
+ struct schedTable_entry *entry;
+ netsnmp_tdata_row *row;
+
+ DEBUGMSGTL(("disman:schedule:entry", "creating entry (%s, %s)\n",
+ schedOwner, schedName));
+ entry = SNMP_MALLOC_TYPEDEF(struct schedTable_entry);
+ if (!entry)
+ return NULL;
+
+ row = netsnmp_tdata_create_row();
+ if (!row) {
+ SNMP_FREE(entry);
+ return NULL;
+ }
+ row->data = entry;
+ /*
+ * Set the indexing for this entry, both in the row
+ * data structure, and in the table_data helper.
+ */
+ if (schedOwner) {
+ memcpy(entry->schedOwner, schedOwner, strlen(schedOwner));
+ }
+ memcpy( entry->schedName, schedName, strlen(schedName));
+ netsnmp_tdata_row_add_index(row, ASN_OCTET_STR,
+ (entry->schedOwner || ""),
+ ((schedOwner) ? strlen(schedOwner) : 0));
+ netsnmp_tdata_row_add_index(row, ASN_OCTET_STR,
+ entry->schedName, strlen(schedName));
+ /*
+ * Set the (non-zero) default values in the row data structure.
+ */
+ entry->schedType = SCHED_TYPE_PERIODIC;
+ entry->schedVariable_len = 2; /* .0.0 */
+
+ netsnmp_tdata_add_row(schedule_table, row);
+ return row;
+}
+
+
+/*
+ * remove a row from the table
+ */
+void
+schedTable_removeEntry(netsnmp_tdata_row *row)
+{
+ struct schedTable_entry *entry;
+
+ if (!row || !row->data) {
+ DEBUGMSGTL(("disman:schedule:entry", "remove: missing entry\n"));
+ return; /* Nothing to remove */
+ }
+ entry = (struct schedTable_entry *)
+ netsnmp_tdata_remove_and_delete_row(schedule_table, row);
+ if (entry) {
+ DEBUGMSGTL(("disman:schedule:entry", "remove entry (%s, %s)\n",
+ entry->schedOwner, entry->schedName));
+ SNMP_FREE(entry);
+ }
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedCore.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedCore.h
new file mode 100644
index 0000000000..4436711037
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedCore.h
@@ -0,0 +1,85 @@
+#ifndef SCHEDCORE_H
+#define SCHEDCORE_H
+
+config_require(utilities/iquery)
+
+ /*
+ * Values for schedType field
+ */
+#define SCHED_TYPE_PERIODIC 1
+#define SCHED_TYPE_CALENDAR 2
+#define SCHED_TYPE_ONESHOT 3
+
+ /*
+ * Schedule flags
+ */
+#define SCHEDULE_FLAG_ENABLED 0x01 /* for schedAdminStatus */
+#define SCHEDULE_FLAG_ACTIVE 0x02 /* for schedRowStatus */
+#define SCHEDULE_FLAG_VALID 0x04 /* for row creation/undo */
+
+ /*
+ * All Schedule-MIB OCTET STRING objects are either short (32-char)
+ * tags, or SnmpAdminString values (i.e. 255 characters)
+ */
+#define SCHED_STR1_LEN 32
+#define SCHED_STR2_LEN 255
+
+ /*
+ * Data structure for a schedTable row entry
+ */
+struct schedTable_entry {
+ /*
+ * Index values
+ */
+ char schedOwner[SCHED_STR1_LEN+1];
+ char schedName[ SCHED_STR1_LEN+1];
+
+ /*
+ * Column values - schedule actions
+ */
+ char schedDescr[SCHED_STR2_LEN+1];
+ u_long schedInterval;
+ char schedWeekDay;
+ char schedMonth[2];
+ char schedDay[4+4];
+ char schedHour[3];
+ char schedMinute[8];
+ char schedContextName[SCHED_STR1_LEN];
+ oid schedVariable[ MAX_OID_LEN ];
+ size_t schedVariable_len;
+ long schedValue;
+
+ /*
+ * Column values - schedule control
+ */
+ long schedType;
+ u_long schedFailures;
+ long schedLastFailure;
+ time_t schedLastFailed;
+ long schedStorageType;
+ u_long schedTriggers;
+
+ /*
+ * Supporting values
+ */
+ time_t schedLastRun;
+ time_t schedNextRun;
+ unsigned int schedCallbackID;
+ netsnmp_session *session;
+ long flags;
+};
+
+/*
+ * function declarations
+ */
+extern netsnmp_tdata *schedule_table;
+void init_schedule_container(void);
+void init_schedCore(void);
+
+netsnmp_tdata_row *
+ schedTable_createEntry(const char *schedOwner, const char *schedName);
+void schedTable_removeEntry(netsnmp_tdata_row *row);
+void sched_nextTime( struct schedTable_entry *entry );
+void sched_nextRowTime( netsnmp_tdata_row *row );
+
+#endif /* SCHEDCORE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedTable.c
new file mode 100644
index 0000000000..ddb1be3d29
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedTable.c
@@ -0,0 +1,500 @@
+/*
+ * DisMan Schedule MIB:
+ * Core implementation of the schedTable MIB interface.
+ * See 'schedCore.c' for active behaviour of this table.
+ *
+ * (based on mib2c.table_data.conf output)
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "utilities/iquery.h"
+#include "disman/schedule/schedCore.h"
+#include "disman/schedule/schedTable.h"
+
+/** Initializes the schedTable module */
+void
+init_schedTable(void)
+{
+ static oid schedTable_oid[] = { 1, 3, 6, 1, 2, 1, 63, 1, 2 };
+ size_t schedTable_oid_len = OID_LENGTH(schedTable_oid);
+ netsnmp_handler_registration *reg;
+ netsnmp_table_registration_info *table_info;
+
+ DEBUGMSGTL(("disman:schedule:init", "Initializing table\n"));
+ /*
+ * Ensure the schedule table container is available...
+ */
+ init_schedule_container();
+
+ /*
+ * ... then set up the MIB interface.
+ */
+ reg = netsnmp_create_handler_registration("schedTable",
+ schedTable_handler,
+ schedTable_oid,
+ schedTable_oid_len,
+ HANDLER_CAN_RWRITE);
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ netsnmp_table_helper_add_indexes(table_info,
+ ASN_OCTET_STR, /* index: schedOwner */
+ ASN_OCTET_STR, /* index: schedName */
+ 0);
+ table_info->min_column = COLUMN_SCHEDDESCR;
+ table_info->max_column = COLUMN_SCHEDTRIGGERS;
+
+ netsnmp_tdata_register(reg, schedule_table, table_info);
+}
+
+
+/** handles requests for the schedTable table */
+int
+schedTable_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 *tinfo;
+ netsnmp_tdata_row *row;
+ struct schedTable_entry *entry;
+ int recalculate = 0;
+ size_t len;
+ char *cp;
+ char owner[SCHED_STR1_LEN+1];
+ char name[ SCHED_STR1_LEN+1];
+ int ret;
+
+ DEBUGMSGTL(("disman:schedule:mib", "Schedule handler (%d)\n",
+ reqinfo->mode));
+ switch (reqinfo->mode) {
+ /*
+ * Read-support (also covers GetNext requests)
+ */
+ case MODE_GET:
+ for (request = requests; request; request = request->next) {
+ entry = (struct schedTable_entry *)
+ netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info( request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_SCHEDDESCR:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ entry->schedDescr,
+ strlen(entry->schedDescr));
+ break;
+ case COLUMN_SCHEDINTERVAL:
+ snmp_set_var_typed_integer(request->requestvb, ASN_UNSIGNED,
+ entry->schedInterval);
+ break;
+ case COLUMN_SCHEDWEEKDAY:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ &entry->schedWeekDay,
+ sizeof(entry->schedWeekDay));
+ break;
+ case COLUMN_SCHEDMONTH:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ entry->schedMonth,
+ sizeof(entry->schedMonth));
+ break;
+ case COLUMN_SCHEDDAY:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ entry->schedDay,
+ sizeof(entry->schedDay));
+ break;
+ case COLUMN_SCHEDHOUR:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ entry->schedHour,
+ sizeof(entry->schedHour));
+ break;
+ case COLUMN_SCHEDMINUTE:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ entry->schedMinute,
+ sizeof(entry->schedMinute));
+ break;
+ case COLUMN_SCHEDCONTEXTNAME:
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ entry->schedContextName,
+ strlen(entry->schedContextName));
+ break;
+ case COLUMN_SCHEDVARIABLE:
+ snmp_set_var_typed_value(request->requestvb, ASN_OBJECT_ID,
+ (u_char *)entry->schedVariable,
+ entry->schedVariable_len*sizeof(oid));
+ break;
+ case COLUMN_SCHEDVALUE:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->schedValue);
+ break;
+ case COLUMN_SCHEDTYPE:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->schedType);
+ break;
+ case COLUMN_SCHEDADMINSTATUS:
+ ret = (entry->flags & SCHEDULE_FLAG_ENABLED ) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_SCHEDOPERSTATUS:
+ ret = (entry->flags & SCHEDULE_FLAG_ENABLED ) ?
+ TV_TRUE : TV_FALSE;
+ /*
+ * Check for one-shot entries that have already fired
+ */
+ if ((entry->schedType == SCHED_TYPE_ONESHOT) &&
+ (entry->schedLastRun != 0 ))
+ ret = 3; /* finished(3) */
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_SCHEDFAILURES:
+ snmp_set_var_typed_integer(request->requestvb, ASN_COUNTER,
+ entry->schedFailures);
+ break;
+ case COLUMN_SCHEDLASTFAILURE:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->schedLastFailure);
+ break;
+ case COLUMN_SCHEDLASTFAILED:
+ /*
+ * Convert 'schedLastFailed' timestamp
+ * into DateAndTime string
+ */
+ cp = date_n_time( &entry->schedLastFailed, &len );
+ snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
+ cp, len);
+ break;
+ case COLUMN_SCHEDSTORAGETYPE:
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
+ entry->schedStorageType);
+ break;
+ case COLUMN_SCHEDROWSTATUS:
+ ret = (entry->flags & SCHEDULE_FLAG_ACTIVE ) ?
+ TV_TRUE : TV_FALSE;
+ snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, ret);
+ break;
+ case COLUMN_SCHEDTRIGGERS:
+ snmp_set_var_typed_integer(request->requestvb, ASN_COUNTER,
+ entry->schedTriggers);
+ break;
+ }
+ }
+ break;
+
+ /*
+ * Write-support
+ */
+ case MODE_SET_RESERVE1:
+ for (request = requests; request; request = request->next) {
+ entry = (struct schedTable_entry *)
+ netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info( request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_SCHEDDESCR:
+ ret = netsnmp_check_vb_type_and_max_size(
+ request->requestvb, ASN_OCTET_STR, SCHED_STR2_LEN);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_SCHEDINTERVAL:
+ ret = netsnmp_check_vb_uint( request->requestvb );
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_SCHEDWEEKDAY:
+ ret = netsnmp_check_vb_type_and_size(
+ request->requestvb, ASN_OCTET_STR, 1);
+ /* XXX - check for bit(7) set */
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_SCHEDMONTH:
+ ret = netsnmp_check_vb_type_and_size( /* max_size ?? */
+ request->requestvb, ASN_OCTET_STR, 2);
+ /* XXX - check for bit(12)-bit(15) set */
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_SCHEDDAY:
+ ret = netsnmp_check_vb_type_and_size( /* max_size ?? */
+ request->requestvb, ASN_OCTET_STR, 4+4);
+ /* XXX - check for bit(62) or bit(63) set */
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_SCHEDHOUR:
+ ret = netsnmp_check_vb_type_and_size( /* max_size ?? */
+ request->requestvb, ASN_OCTET_STR, 3);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_SCHEDMINUTE:
+ ret = netsnmp_check_vb_type_and_size( /* max_size ?? */
+ request->requestvb, ASN_OCTET_STR, 8);
+ /* XXX - check for bit(60)-bit(63) set */
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_SCHEDCONTEXTNAME:
+ ret = netsnmp_check_vb_type_and_max_size(
+ request->requestvb, ASN_OCTET_STR, SCHED_STR1_LEN);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_SCHEDVARIABLE:
+ ret = netsnmp_check_vb_oid( request->requestvb );
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_SCHEDVALUE:
+ 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_SCHEDTYPE:
+ ret = netsnmp_check_vb_int_range( request->requestvb,
+ SCHED_TYPE_PERIODIC, SCHED_TYPE_ONESHOT );
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_SCHEDADMINSTATUS:
+ ret = netsnmp_check_vb_truthvalue( request->requestvb );
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_WRONGTYPE);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_SCHEDSTORAGETYPE:
+ ret = netsnmp_check_vb_int_range( request->requestvb,
+ ST_NONE, ST_READONLY );
+ /* XXX - check valid/consistent assignments */
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ return SNMP_ERR_NOERROR;
+ }
+ break;
+ case COLUMN_SCHEDROWSTATUS:
+ ret = netsnmp_check_vb_rowstatus( request->requestvb,
+ (entry ? RS_ACTIVE: RS_NONEXISTENT));
+ /* XXX - check consistency assignments */
+ 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) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_SCHEDROWSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ /*
+ * Create an (empty) new row structure
+ */
+ memset(owner, 0, SCHED_STR1_LEN+1);
+ memset(name, 0, SCHED_STR1_LEN+1);
+ memcpy(owner, tinfo->indexes->val.string,
+ tinfo->indexes->val_len);
+ memcpy(name, tinfo->indexes->next_variable->val.string,
+ tinfo->indexes->next_variable->val_len);
+ row = schedTable_createEntry(owner, name);
+ if (!row) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+ netsnmp_insert_tdata_row(request, row);
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_FREE:
+ for (request = requests; request; request = request->next) {
+ tinfo = netsnmp_extract_table_info(request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_SCHEDROWSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_CREATEANDGO:
+ case RS_CREATEANDWAIT:
+ /*
+ * Tidy up after a failed row creation request
+ */
+ entry = (struct schedTable_entry *)
+ netsnmp_tdata_extract_entry(request);
+ if (entry &&
+ !(entry->flags & SCHEDULE_FLAG_VALID)) {
+ row = (netsnmp_tdata_row *)
+ netsnmp_tdata_extract_row(request);
+ schedTable_removeEntry(row);
+ }
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_ACTION:
+ for (request = requests; request; request = request->next) {
+ entry = (struct schedTable_entry *)
+ netsnmp_tdata_extract_entry(request);
+ if (!entry) {
+ /*
+ * New rows must be created via the RowStatus column
+ */
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOCREATION);
+ /* or inconsistentName? */
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ break;
+
+ case MODE_SET_UNDO:
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * All these assignments are "unfailable", so it's
+ * (reasonably) safe to apply them in the Commit phase
+ */
+ for (request = requests; request; request = request->next) {
+ entry = (struct schedTable_entry *)
+ netsnmp_tdata_extract_entry(request);
+ tinfo = netsnmp_extract_table_info( request);
+
+ switch (tinfo->colnum) {
+ case COLUMN_SCHEDDESCR:
+ memset(entry->schedDescr, 0, sizeof(entry->schedDescr));
+ memcpy(entry->schedDescr, request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_SCHEDINTERVAL:
+ entry->schedInterval = *request->requestvb->val.integer;
+ recalculate = 1;
+ break;
+ case COLUMN_SCHEDWEEKDAY:
+ entry->schedWeekDay = request->requestvb->val.string[0];
+ recalculate = 1;
+ break;
+ case COLUMN_SCHEDMONTH:
+ entry->schedMonth[0] = request->requestvb->val.string[0];
+ entry->schedMonth[1] = request->requestvb->val.string[1];
+ recalculate = 1;
+ break;
+ case COLUMN_SCHEDDAY:
+ memset(entry->schedDay, 0, sizeof(entry->schedDay));
+ memcpy(entry->schedDay, request->requestvb->val.string,
+ request->requestvb->val_len);
+ recalculate = 1;
+ break;
+ case COLUMN_SCHEDHOUR:
+ entry->schedHour[0] = request->requestvb->val.string[0];
+ entry->schedHour[1] = request->requestvb->val.string[1];
+ entry->schedHour[2] = request->requestvb->val.string[2];
+ recalculate = 1;
+ break;
+ case COLUMN_SCHEDMINUTE:
+ memset(entry->schedMinute, 0, sizeof(entry->schedMinute));
+ memcpy(entry->schedMinute, request->requestvb->val.string,
+ request->requestvb->val_len);
+ recalculate = 1;
+ break;
+ case COLUMN_SCHEDCONTEXTNAME:
+ memset(entry->schedContextName, 0, SCHED_STR1_LEN+1);
+ memcpy(entry->schedContextName,
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ break;
+ case COLUMN_SCHEDVARIABLE:
+ memset(entry->schedVariable, 0, sizeof(entry->schedVariable));
+ memcpy(entry->schedVariable,
+ request->requestvb->val.string,
+ request->requestvb->val_len);
+ entry->schedVariable_len =
+ request->requestvb->val_len/sizeof(oid);
+ break;
+ case COLUMN_SCHEDVALUE:
+ entry->schedValue = *request->requestvb->val.integer;
+ break;
+ case COLUMN_SCHEDTYPE:
+ entry->schedType = *request->requestvb->val.integer;
+ break;
+ case COLUMN_SCHEDADMINSTATUS:
+ if (*request->requestvb->val.integer == TV_TRUE)
+ entry->flags |= SCHEDULE_FLAG_ENABLED;
+ else
+ entry->flags &= ~SCHEDULE_FLAG_ENABLED;
+ break;
+ case COLUMN_SCHEDSTORAGETYPE:
+ entry->schedStorageType = *request->requestvb->val.integer;
+ break;
+ case COLUMN_SCHEDROWSTATUS:
+ switch (*request->requestvb->val.integer) {
+ case RS_ACTIVE:
+ entry->flags |= SCHEDULE_FLAG_ACTIVE;
+ break;
+ case RS_CREATEANDGO:
+ entry->flags |= SCHEDULE_FLAG_ACTIVE;
+ entry->flags |= SCHEDULE_FLAG_VALID;
+ entry->session =
+ netsnmp_iquery_pdu_session(reqinfo->asp->pdu);
+ break;
+ case RS_CREATEANDWAIT:
+ entry->flags |= SCHEDULE_FLAG_VALID;
+ entry->session =
+ netsnmp_iquery_pdu_session(reqinfo->asp->pdu);
+ break;
+
+ case RS_DESTROY:
+ row = (netsnmp_tdata_row *)
+ netsnmp_tdata_extract_row(request);
+ schedTable_removeEntry(row);
+ }
+ recalculate = 1;
+ break;
+ }
+ }
+ if (recalculate)
+ sched_nextTime(entry);
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedTable.h
new file mode 100644
index 0000000000..efd1f2eb50
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/schedule/schedTable.h
@@ -0,0 +1,38 @@
+#ifndef SCHEDTABLE_H
+#define SCHEDTABLE_H
+
+config_require(disman/schedule/schedCore)
+config_add_mib(DISMAN-SCHEDULE-MIB)
+
+/*
+ * function declarations
+ */
+void init_schedTable(void);
+Netsnmp_Node_Handler schedTable_handler;
+
+/*
+ * column number definitions for table schedTable
+ */
+#define COLUMN_SCHEDOWNER 1
+#define COLUMN_SCHEDNAME 2
+#define COLUMN_SCHEDDESCR 3
+#define COLUMN_SCHEDINTERVAL 4
+#define COLUMN_SCHEDWEEKDAY 5
+#define COLUMN_SCHEDMONTH 6
+#define COLUMN_SCHEDDAY 7
+#define COLUMN_SCHEDHOUR 8
+#define COLUMN_SCHEDMINUTE 9
+#define COLUMN_SCHEDCONTEXTNAME 10
+#define COLUMN_SCHEDVARIABLE 11
+#define COLUMN_SCHEDVALUE 12
+#define COLUMN_SCHEDTYPE 13
+#define COLUMN_SCHEDADMINSTATUS 14
+#define COLUMN_SCHEDOPERSTATUS 15
+#define COLUMN_SCHEDFAILURES 16
+#define COLUMN_SCHEDLASTFAILURE 17
+#define COLUMN_SCHEDLASTFAILED 18
+#define COLUMN_SCHEDSTORAGETYPE 19
+#define COLUMN_SCHEDROWSTATUS 20
+#define COLUMN_SCHEDTRIGGERS 21
+
+#endif /* SCHEDTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute-mib.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute-mib.h
new file mode 100644
index 0000000000..b33d69eafc
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute-mib.h
@@ -0,0 +1,21 @@
+/*
+*Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+*
+*All right reserved
+*
+*File Name:traceroute-mib.h
+*File Description:Add DISMAN-TRACEROUTE-MIB.
+*
+*Current Version:1.0
+*Author:ChenJing
+*Date:2004.8.20
+*/
+
+/*
+ * wrapper for the disman traceroute mib code files
+ */
+config_require(disman/traceroute/traceRouteCtlTable)
+config_require(disman/traceroute/traceRouteResultsTable)
+config_require(disman/traceroute/traceRouteProbeHistoryTable)
+config_require(disman/traceroute/traceRouteHopsTable)
+config_add_mib(DISMAN-TRACEROUTE-MIB)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteCtlTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteCtlTable.c
new file mode 100644
index 0000000000..17493d38df
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteCtlTable.c
@@ -0,0 +1,6258 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:traceRouteCtlTable.c
+ *File Description:Rows of traceRouteCtlTable MIB add delete ans read.
+ * Rows of traceRouteResultsTable MIB add and delete.
+ * Rows of traceRouteProbeHistoryTable MIB add and delete.
+ * Rows of traceRouteHopsTable MIB add and delete.
+ * The main function is also here.
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <pthread.h>
+
+#include "traceRouteCtlTable.h"
+#include "traceRouteResultsTable.h"
+#include "traceRouteProbeHistoryTable.h"
+#include "traceRouteHopsTable.h"
+#include "header_complex.h"
+
+oid traceRouteCtlTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 81, 1, 2 };
+
+/* trap */
+oid traceRoutePathChange[] = { 1, 3, 6, 1, 2, 1, 81, 0, 1 };
+oid traceRouteTestFailed[] = { 1, 3, 6, 1, 2, 1, 81, 0, 2 };
+oid traceRouteTestCompleted[] = { 1, 3, 6, 1, 2, 1, 81, 0, 3 };
+
+struct variable2 traceRouteCtlTable_variables[] = {
+ /*
+ * magic number , variable type , ro/rw , callback fn , L, oidsuffix
+ */
+
+ {COLUMN_TRACEROUTECTLTARGETADDRESSTYPE, ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 3}},
+ {COLUMN_TRACEROUTECTLTARGETADDRESS, ASN_OCTET_STR, RWRITE, var_traceRouteCtlTable, 2, {1, 4}},
+ {COLUMN_TRACEROUTECTLBYPASSROUTETABLE, ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 5}},
+ {COLUMN_TRACEROUTECTLDATASIZE, ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 6}},
+ {COLUMN_TRACEROUTECTLTIMEOUT, ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 7}},
+ {COLUMN_TRACEROUTECTLPROBESPERHOP, ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 8}},
+ {COLUMN_TRACEROUTECTLPORT, ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 9}},
+ {COLUMN_TRACEROUTECTLMAXTTL, ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 10}},
+ {COLUMN_TRACEROUTECTLDSFIELD, ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 11}},
+ {COLUMN_TRACEROUTECTLSOURCEADDRESSTYPE, ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 12}},
+ {COLUMN_TRACEROUTECTLSOURCEADDRESS, ASN_OCTET_STR, RWRITE, var_traceRouteCtlTable, 2, {1, 13}},
+ {COLUMN_TRACEROUTECTLIFINDEX, ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 14}},
+ {COLUMN_TRACEROUTECTLMISCOPTIONS, ASN_OCTET_STR, RWRITE, var_traceRouteCtlTable, 2, {1, 15}},
+ {COLUMN_TRACEROUTECTLMAXFAILURES, ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 16}},
+ {COLUMN_TRACEROUTECTLDONTFRAGMENT, ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 17}},
+ {COLUMN_TRACEROUTECTLINITIALTTL, ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 18}},
+ {COLUMN_TRACEROUTECTLFREQUENCY, ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 19}},
+ {COLUMN_TRACEROUTECTLSTORAGETYPE, ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 20}},
+ {COLUMN_TRACEROUTECTLADMINSTATUS, ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 21}},
+ {COLUMN_TRACEROUTECTLDESCR, ASN_OCTET_STR, RWRITE, var_traceRouteCtlTable, 2, {1, 22}},
+ {COLUMN_TRACEROUTECTLMAXROWS, ASN_UNSIGNED, RWRITE, var_traceRouteCtlTable, 2, {1, 23}},
+ {COLUMN_TRACEROUTECTLTRAPGENERATION, ASN_OCTET_STR, RWRITE, var_traceRouteCtlTable, 2, {1, 24}},
+ {COLUMN_TRACEROUTECTLCREATEHOPSENTRIES, ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 25}},
+ {COLUMN_TRACEROUTECTLTYPE, ASN_OBJECT_ID, RWRITE, var_traceRouteCtlTable, 2, {1, 26}},
+ {COLUMN_TRACEROUTECTLROWSTATUS, ASN_INTEGER, RWRITE, var_traceRouteCtlTable, 2, {1, 27}}
+
+};
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+
+struct header_complex_index *traceRouteCtlTableStorage = NULL;
+struct header_complex_index *traceRouteResultsTableStorage = NULL;
+struct header_complex_index *traceRouteProbeHistoryTableStorage = NULL;
+struct header_complex_index *traceRouteHopsTableStorage = NULL;
+
+void
+init_traceRouteCtlTable(void)
+{
+ DEBUGMSGTL(("traceRouteCtlTable", "initializing... "));
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("traceRouteCtlTable", traceRouteCtlTable_variables,
+ variable2, traceRouteCtlTable_variables_oid);
+
+ /*
+ * register our config handler(s) to deal with registrations
+ */
+ snmpd_register_config_handler("traceRouteCtlTable",
+ parse_traceRouteCtlTable, NULL, NULL);
+
+ /*
+ * we need to be called back later to store our data
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_traceRouteCtlTable, NULL);
+
+ DEBUGMSGTL(("traceRouteCtlTable", "done.\n"));
+}
+
+
+void
+init_trResultsTable(struct traceRouteCtlTable_data *item)
+{
+ struct traceRouteResultsTable_data *StorageTmp = NULL;
+ netsnmp_variable_list *vars = NULL;
+ char *host = NULL;
+
+ host =
+ (char *) malloc(sizeof(char) *
+ (item->traceRouteCtlTargetAddressLen + 1));
+
+ if (host == NULL) {
+ DEBUGMSGTL(("traceRouteCtlTable", "host calloc %s\n",
+ strerror(errno)));
+ exit(1);
+ }
+
+ bzero(host, sizeof(char) * (item->traceRouteCtlTargetAddressLen + 1));
+ strcpy(host, item->traceRouteCtlTargetAddress);
+ host[item->traceRouteCtlTargetAddressLen] = '\0';
+
+ StorageTmp = SNMP_MALLOC_STRUCT(traceRouteResultsTable_data);
+ if (StorageTmp == NULL) {
+ DEBUGMSGTL(("traceRouteCtlTable", "StorageTmp malloc %s\n",
+ strerror(errno)));
+ exit(1);
+ }
+
+ StorageTmp->traceRouteCtlOwnerIndex =
+ (char *) malloc(sizeof(char) *
+ (item->traceRouteCtlOwnerIndexLen + 1));
+ if (StorageTmp->traceRouteCtlOwnerIndex == NULL) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "traceRouteCtlOwnerIndex malloc %s\n",
+ strerror(errno)));
+ exit(1);
+ }
+
+ memcpy(StorageTmp->traceRouteCtlOwnerIndex,
+ item->traceRouteCtlOwnerIndex,
+ item->traceRouteCtlOwnerIndexLen + 1);
+ StorageTmp->traceRouteCtlOwnerIndex[item->traceRouteCtlOwnerIndexLen] =
+ '\0';
+ StorageTmp->traceRouteCtlOwnerIndexLen =
+ item->traceRouteCtlOwnerIndexLen;
+
+ StorageTmp->traceRouteCtlTestName =
+ (char *) malloc(sizeof(char) *
+ (item->traceRouteCtlTestNameLen + 1));
+ if (StorageTmp->traceRouteCtlTestName == NULL) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "traceRouteCtlTestName malloc %s\n", strerror(errno)));
+ exit(1);
+ }
+
+ memcpy(StorageTmp->traceRouteCtlTestName, item->traceRouteCtlTestName,
+ item->traceRouteCtlTestNameLen + 1);
+ StorageTmp->traceRouteCtlTestName[item->traceRouteCtlTestNameLen] =
+ '\0';
+ StorageTmp->traceRouteCtlTestNameLen = item->traceRouteCtlTestNameLen;
+
+ StorageTmp->traceRouteResultsOperStatus = 1;
+
+ if (item->traceRouteCtlTargetAddressType == 1
+ || item->traceRouteCtlTargetAddressType == 16) {
+ struct sockaddr whereto; /* Who to try to reach */
+ register struct sockaddr_in *to = (struct sockaddr_in *) &whereto;
+ register struct hostinfo *hi = NULL;
+ hi = gethostinfo(host);
+ if (hi == NULL) {
+ DEBUGMSGTL(("traceRouteCtlTable", "hi calloc %s\n",
+ strerror(errno)));
+ exit(1);
+ }
+
+ setsin(to, hi->addrs[0]);
+ if (inet_ntoa(to->sin_addr) == NULL) {
+ StorageTmp->traceRouteResultsIpTgtAddrType = 0;
+ StorageTmp->traceRouteResultsIpTgtAddr = strdup("");
+ StorageTmp->traceRouteResultsIpTgtAddrLen = 0;
+ } else {
+ StorageTmp->traceRouteResultsIpTgtAddrType = 1;
+ StorageTmp->traceRouteResultsIpTgtAddr =
+ (char *) malloc(sizeof(char) *
+ (strlen(inet_ntoa(to->sin_addr)) + 1));
+ if (StorageTmp->traceRouteResultsIpTgtAddr == NULL) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "traceRouteResultsIpTgtAddr malloc %s\n",
+ strerror(errno)));
+ exit(1);
+ }
+
+ memcpy(StorageTmp->traceRouteResultsIpTgtAddr,
+ inet_ntoa(to->sin_addr),
+ strlen(inet_ntoa(to->sin_addr)) + 1);
+ StorageTmp->
+ traceRouteResultsIpTgtAddr[strlen(inet_ntoa(to->sin_addr))]
+ = '\0';
+ StorageTmp->traceRouteResultsIpTgtAddrLen =
+ strlen(inet_ntoa(to->sin_addr));
+ }
+ }
+ if (item->traceRouteCtlTargetAddressType == 2) {
+
+ struct sockaddr_in6 whereto; /* Who to try to reach */
+ register struct sockaddr_in6 *to =
+ (struct sockaddr_in6 *) &whereto;
+ struct hostent *hp = NULL;
+ /* struct hostenv hp; */
+ char pa[64];
+ bzero(pa, 64);
+
+ to->sin6_family = AF_INET6;
+ to->sin6_port = htons(33434);
+
+ if (inet_pton(AF_INET6, host, &to->sin6_addr) > 0) {
+ StorageTmp->traceRouteResultsIpTgtAddrType = 2;
+ StorageTmp->traceRouteResultsIpTgtAddr =
+ (char *) malloc(sizeof(char) * (strlen(host) + 1));
+ if (StorageTmp->traceRouteResultsIpTgtAddr == NULL) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "traceRouteResultsIpTgtAddr malloc %s\n",
+ strerror(errno)));
+ exit(1);
+ }
+ bzero(StorageTmp->traceRouteResultsIpTgtAddr,
+ sizeof(char) * (strlen(host) + 1));
+ memcpy(StorageTmp->traceRouteResultsIpTgtAddr, host,
+ strlen(host) + 1);
+ StorageTmp->traceRouteResultsIpTgtAddr[strlen(host)] = '\0';
+ StorageTmp->traceRouteResultsIpTgtAddrLen = strlen(host);
+ } else {
+ hp = gethostbyname2(host, AF_INET6);
+ if (hp != NULL) {
+ const char *hostname;
+ memmove((caddr_t) & to->sin6_addr, hp->h_addr, 16);
+ hostname = inet_ntop(AF_INET6, &to->sin6_addr, pa, 64);
+ StorageTmp->traceRouteResultsIpTgtAddrType = 2;
+ StorageTmp->traceRouteResultsIpTgtAddr =
+ (char *) malloc(sizeof(char) * (strlen(hostname) + 1));
+ if (StorageTmp->traceRouteResultsIpTgtAddr == NULL) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "traceRouteResultsIpTgtAddr malloc %s\n",
+ strerror(errno)));
+ exit(1);
+ }
+ bzero(StorageTmp->traceRouteResultsIpTgtAddr,
+ sizeof(char) * (strlen(host) + 1));
+ memcpy(StorageTmp->traceRouteResultsIpTgtAddr, hostname,
+ strlen(hostname) + 1);
+ StorageTmp->traceRouteResultsIpTgtAddr[strlen(hostname)] =
+ '\0';
+ StorageTmp->traceRouteResultsIpTgtAddrLen =
+ strlen(hostname);
+ } else {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "traceroute: unknown host %s\n", host));
+
+ StorageTmp->traceRouteResultsIpTgtAddrType = 0;
+ StorageTmp->traceRouteResultsIpTgtAddr = strdup("");
+ StorageTmp->traceRouteResultsIpTgtAddrLen = 0;
+ }
+ }
+ }
+
+ StorageTmp->traceRouteResultsCurHopCount = 0;
+ StorageTmp->traceRouteResultsCurProbeCount = 0;
+ StorageTmp->traceRouteResultsTestAttempts = 0;
+ StorageTmp->traceRouteResultsTestSuccesses = 0;
+
+ StorageTmp->traceRouteResultsLastGoodPath = strdup("");
+ StorageTmp->traceRouteResultsLastGoodPathLen = 0;
+
+ item->traceRouteResults = StorageTmp;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlOwnerIndex, item->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlTestName, item->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+ if ((header_complex_get(traceRouteResultsTableStorage, vars)) != NULL) {
+ traceRouteResultsTable_del(item);
+ }
+ snmp_free_varbind(vars);
+ vars = NULL;
+ if (item->traceRouteResults != NULL) {
+ if (traceRouteResultsTable_add(item) != SNMPERR_SUCCESS) {
+ DEBUGMSGTL(("traceRouteResultsTable",
+ "init an entry error\n"));
+ }
+ }
+
+}
+
+
+
+int
+modify_trResultsOper(struct traceRouteCtlTable_data *thedata, long val)
+{
+ netsnmp_variable_list *vars = NULL;
+ struct traceRouteResultsTable_data *StorageTmp = NULL;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+
+ if ((StorageTmp =
+ header_complex_get(traceRouteResultsTableStorage,
+ vars)) == NULL) {
+ snmp_free_varbind(vars);
+ vars = NULL;
+ return SNMP_ERR_NOSUCHNAME;
+ } else {
+ StorageTmp->traceRouteResultsOperStatus = val;
+ DEBUGMSGTL(("traceRouteResultsOperStatus", "done.\n"));
+ snmp_free_varbind(vars);
+ vars = NULL;
+ return SNMPERR_SUCCESS;
+ }
+}
+
+
+struct traceRouteCtlTable_data *
+create_traceRouteCtlTable_data(void)
+{
+ struct traceRouteCtlTable_data *StorageNew = NULL;
+ StorageNew = SNMP_MALLOC_STRUCT(traceRouteCtlTable_data);
+ if (StorageNew == NULL) {
+ exit(1);
+ }
+ StorageNew->traceRouteCtlTargetAddressType = 1;
+ StorageNew->traceRouteCtlTargetAddress = strdup("");
+ StorageNew->traceRouteCtlTargetAddressLen = 0;
+ StorageNew->traceRouteCtlByPassRouteTable = 2;
+ StorageNew->traceRouteCtlDataSize = 0;
+ StorageNew->traceRouteCtlTimeOut = 3;
+ StorageNew->traceRouteCtlProbesPerHop = 3;
+ StorageNew->traceRouteCtlPort = 33434;
+ StorageNew->traceRouteCtlMaxTtl = 30;
+ StorageNew->traceRouteCtlDSField = 0;
+ StorageNew->traceRouteCtlSourceAddressType = 0;
+ StorageNew->traceRouteCtlSourceAddress = strdup("");
+ StorageNew->traceRouteCtlSourceAddressLen = 0;
+ StorageNew->traceRouteCtlIfIndex = 0;
+ StorageNew->traceRouteCtlMiscOptions = strdup("");
+ StorageNew->traceRouteCtlMiscOptionsLen = 0;
+ StorageNew->traceRouteCtlMaxFailures = 5;
+ StorageNew->traceRouteCtlDontFragment = 2;
+ StorageNew->traceRouteCtlInitialTtl = 1;
+ StorageNew->traceRouteCtlFrequency = 0;
+ StorageNew->traceRouteCtlStorageType = ST_NONVOLATILE;
+ StorageNew->traceRouteCtlAdminStatus = 2;
+ StorageNew->traceRouteCtlDescr = (char *) malloc(strlen("00") + 1);
+ if (StorageNew->traceRouteCtlDescr == NULL) {
+ exit(1);
+ }
+ memcpy(StorageNew->traceRouteCtlDescr, "00", strlen("00") + 1);
+ StorageNew->traceRouteCtlDescr[strlen("00")] = '\0';
+ StorageNew->traceRouteCtlDescrLen =
+ strlen(StorageNew->traceRouteCtlDescr);
+
+ StorageNew->traceRouteCtlMaxRows = 50;
+ StorageNew->traceRouteCtlTrapGeneration = strdup("");
+ StorageNew->traceRouteCtlTrapGenerationLen = 0;
+ StorageNew->traceRouteCtlCreateHopsEntries = 2;
+
+ StorageNew->traceRouteCtlType = calloc(1, sizeof(oid) * sizeof(2)); /* 0.0 */
+ StorageNew->traceRouteCtlTypeLen = 2;
+
+ StorageNew->traceRouteResults = NULL;
+ StorageNew->traceRouteProbeHis = NULL;
+ StorageNew->traceRouteHops = NULL;
+
+ StorageNew->storageType = ST_NONVOLATILE;
+ /* StorageNew->traceRouteProbeHistoryMaxIndex=0; */
+ return StorageNew;
+}
+
+
+/*
+ * traceRouteCtlTable_add(): adds a structure node to our data set
+ */
+int
+traceRouteCtlTable_add(struct traceRouteCtlTable_data *thedata)
+{
+ netsnmp_variable_list *vars = NULL;
+
+
+ DEBUGMSGTL(("traceRouteCtlTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen); /* traceRouteCtlOperationName */
+
+ if (header_complex_add_data(&traceRouteCtlTableStorage, vars, thedata)
+ == NULL) {
+ vars = NULL;
+ return SNMPERR_GENERR;
+ } else {
+
+ DEBUGMSGTL(("traceRouteCtlTable", "registered an entry\n"));
+
+
+ DEBUGMSGTL(("traceRouteCtlTable", "done.\n"));
+ vars = NULL;
+ return SNMPERR_SUCCESS;
+ }
+}
+
+int
+traceRouteResultsTable_add(struct traceRouteCtlTable_data *thedata)
+{
+ netsnmp_variable_list *vp = NULL;
+ netsnmp_variable_list *vars_list = NULL;
+ struct traceRouteResultsTable_data *p = NULL;
+ p = thedata->traceRouteResults;
+ if (thedata->traceRouteResults != NULL) {
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) p->traceRouteCtlOwnerIndex, p->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) p->traceRouteCtlTestName, p->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+ DEBUGMSGTL(("traceRouteResultsTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ header_complex_add_data(&traceRouteResultsTableStorage, vars_list,
+ p);
+ DEBUGMSGTL(("traceRouteResultsTable", "out finished\n"));
+ vars_list = NULL;
+ DEBUGMSGTL(("traceRouteResultsTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+ } else {
+ vars_list = NULL;
+ DEBUGMSGTL(("traceRouteResultsTable", "error.\n"));
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+}
+
+
+int
+traceRouteProbeHistoryTable_add(struct traceRouteProbeHistoryTable_data
+ *thedata)
+{
+ netsnmp_variable_list *vars_list = NULL;
+ if (thedata != NULL) {
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &thedata->traceRouteProbeHistoryIndex, sizeof(thedata->traceRouteProbeHistoryIndex)); /* traceRouteProbeHistoryIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &thedata->traceRouteProbeHistoryHopIndex, sizeof(thedata->traceRouteProbeHistoryHopIndex)); /* traceRouteProbeHistoryHopIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &thedata->traceRouteProbeHistoryProbeIndex, sizeof(thedata->traceRouteProbeHistoryProbeIndex)); /* traceRouteProbeHistoryProbeIndex */
+
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ if (header_complex_add_data
+ (&traceRouteProbeHistoryTableStorage, vars_list,
+ thedata) == NULL) {
+ vars_list = NULL;
+ return SNMP_ERR_INCONSISTENTNAME;
+ } else {
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "out finished\n"));
+
+ vars_list = NULL;
+
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+ }
+ } else {
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+}
+
+int
+traceRouteProbeHistoryTable_addall(struct traceRouteCtlTable_data *thedata)
+{
+ netsnmp_variable_list *vars_list = NULL;
+ struct traceRouteProbeHistoryTable_data *p = NULL;
+ p = thedata->traceRouteProbeHis;
+ if (thedata->traceRouteProbeHis != NULL)
+ do {
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) p->traceRouteCtlOwnerIndex, p->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) p->traceRouteCtlTestName, p->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &p->traceRouteProbeHistoryIndex, sizeof(p->traceRouteProbeHistoryIndex)); /* traceRouteProbeHistoryIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &p->traceRouteProbeHistoryHopIndex, sizeof(p->traceRouteProbeHistoryHopIndex)); /* traceRouteProbeHistoryHopIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &p->traceRouteProbeHistoryProbeIndex, sizeof(p->traceRouteProbeHistoryProbeIndex)); /* traceRouteProbeHistoryProbeIndex */
+
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ if (header_complex_add_data
+ (&traceRouteProbeHistoryTableStorage, vars_list,
+ p) == NULL) {
+ vars_list = NULL;
+ return SNMP_ERR_INCONSISTENTNAME;
+ } else {
+
+ struct header_complex_index *temp = NULL;
+ temp = traceRouteProbeHistoryTableStorage;
+ if (traceRouteProbeHistoryTableStorage != NULL)
+ do {
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "adding data,vars_oid=%u\n ",
+ temp->name));
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "adding data,vars_oid=%d\n ",
+ temp->namelen));
+ temp = temp->next;
+ } while (temp != NULL);
+
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "out finished\n"));
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "done.\n"));
+ vars_list = NULL;
+ return SNMPERR_SUCCESS;
+ }
+
+ p = p->next;
+ } while (p != NULL);
+ else {
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+
+}
+
+
+
+int
+traceRouteHopsTable_add(struct traceRouteHopsTable_data *thedata)
+{
+ netsnmp_variable_list *vars_list = NULL;
+
+ if (thedata != NULL) {
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &thedata->traceRouteHopsHopIndex, sizeof(thedata->traceRouteHopsHopIndex)); /* traceRouteHopsHopIndex */
+
+ DEBUGMSGTL(("traceRouteHopsTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ if (header_complex_add_data
+ (&traceRouteHopsTableStorage, vars_list, thedata) == NULL) {
+ vars_list = NULL;
+ return SNMP_ERR_INCONSISTENTNAME;
+ } else {
+ DEBUGMSGTL(("traceRouteHopsTable", "out finished\n"));
+ DEBUGMSGTL(("traceRouteHopsTable", "done.\n"));
+ vars_list = NULL;
+ return SNMPERR_SUCCESS;
+ }
+ }
+}
+
+int
+traceRouteHopsTable_addall(struct traceRouteCtlTable_data *thedata)
+{
+ netsnmp_variable_list *vars_list = NULL;
+ struct traceRouteHopsTable_data *p = NULL;
+ vars_list = NULL;
+ p = thedata->traceRouteHops;
+ if (thedata->traceRouteHops != NULL) {
+ do {
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) p->traceRouteCtlOwnerIndex, p->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) p->traceRouteCtlTestName, p->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &p->traceRouteHopsHopIndex, sizeof(p->traceRouteHopsHopIndex)); /* traceRouteHopsHopIndex */
+
+ DEBUGMSGTL(("traceRouteHopsTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ if (header_complex_add_data
+ (&traceRouteHopsTableStorage, vars_list, p) == NULL) {
+ vars_list = NULL;
+ return SNMP_ERR_INCONSISTENTNAME;
+ } else {
+
+ struct header_complex_index *temp = NULL;
+ temp = traceRouteHopsTableStorage;
+ if (traceRouteHopsTableStorage != NULL)
+ do {
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "adding data,vars_oid=%u\n ",
+ temp->name));
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "adding data,vars_oid=%d\n ",
+ temp->namelen));
+ temp = temp->next;
+ } while (temp != NULL);
+ DEBUGMSGTL(("traceRouteHopsTable", "out finished\n"));
+
+ vars_list = NULL;
+ }
+ p = p->next;
+ } while (p != NULL);
+ DEBUGMSGTL(("traceRouteHopsTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+ } else {
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+
+}
+
+
+unsigned long
+traceRouteProbeHistoryTable_count(struct traceRouteCtlTable_data *thedata)
+{
+ struct header_complex_index *hciptr2 = NULL;
+ netsnmp_variable_list *vars = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len;
+ unsigned long count = 0;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+
+ header_complex_generate_oid(newoid, &newoid_len, NULL, 0, vars);
+
+ vars = NULL;
+ for (hciptr2 = traceRouteProbeHistoryTableStorage; hciptr2 != NULL;
+ hciptr2 = hciptr2->next) {
+ if (snmp_oid_compare(newoid, newoid_len, hciptr2->name, newoid_len)
+ == 0) {
+ count = count + 1;
+ }
+ }
+ return count;
+}
+
+
+
+unsigned long
+traceRouteHopsTable_count(struct traceRouteCtlTable_data *thedata)
+{
+ struct header_complex_index *hciptr2 = NULL;
+ netsnmp_variable_list *vars = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len;
+ unsigned long count = 0;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen); /* traceRouteCtlOperationName */
+
+ header_complex_generate_oid(newoid, &newoid_len, NULL, 0, vars);
+
+ vars = NULL;
+ for (hciptr2 = traceRouteHopsTableStorage; hciptr2 != NULL;
+ hciptr2 = hciptr2->next) {
+ if (snmp_oid_compare(newoid, newoid_len, hciptr2->name, newoid_len)
+ == 0) {
+ count = count + 1;
+ }
+ }
+ return count;
+}
+
+
+
+int
+traceRouteProbeHistoryTable_delLast(struct traceRouteCtlTable_data
+ *thedata)
+{
+ struct traceRouteProbeHistoryTable_data *p = NULL;
+ struct header_complex_index *hciptr1 = NULL;
+ struct header_complex_index *hciptr2 = NULL;
+ struct header_complex_index *hcilast = NULL;
+ struct traceRouteProbeHistoryTable_data *StorageDel = NULL;
+ struct traceRouteProbeHistoryTable_data *StorageTmp = NULL;
+ netsnmp_variable_list *vars = NULL;
+ netsnmp_variable_list *vars_temp = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len = 0;
+ time_t last_time = 2147483647;
+ struct tm *tp = NULL;
+
+ tp = (struct tm *) malloc(sizeof(struct tm));
+ if (tp == NULL) {
+ exit(1);
+ }
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen); /* traceRouteCtlOperationName */
+
+ bzero(newoid, sizeof(oid) * MAX_OID_LEN);
+ header_complex_generate_oid(newoid, &newoid_len, NULL, 0, vars);
+
+ for (hcilast = hciptr2 = traceRouteProbeHistoryTableStorage;
+ hciptr2 != NULL; hciptr2 = hciptr2->next) {
+ if (snmp_oid_compare(newoid, newoid_len, hciptr2->name, newoid_len)
+ == 0) {
+
+ StorageTmp =
+ header_complex_get_from_oid
+ (traceRouteProbeHistoryTableStorage, hciptr2->name,
+ hciptr2->namelen);
+ strptime(StorageTmp->traceRouteProbeHistoryTime, "%c", tp);
+
+ if (last_time > timegm(tp)) {
+ last_time = timegm(tp);
+ hcilast = hciptr2;
+ }
+
+ }
+ }
+ StorageDel =
+ header_complex_extract_entry(&traceRouteProbeHistoryTableStorage,
+ hcilast);
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "delete the last one success!\n"));
+ vars = NULL;
+ free(tp);
+ tp = NULL;
+}
+
+
+
+void
+traceRouteCtlTable_cleaner(struct header_complex_index *thestuff)
+{
+ struct header_complex_index *hciptr = NULL;
+ struct traceRouteCtlTable_data *StorageDel = NULL;
+ DEBUGMSGTL(("traceRouteCtlTable", "cleanerout "));
+ for (hciptr = thestuff; hciptr != NULL; hciptr = hciptr->next) {
+ StorageDel =
+ header_complex_extract_entry(&traceRouteCtlTableStorage,
+ hciptr);
+ if (StorageDel != NULL) {
+ free(StorageDel->traceRouteCtlOwnerIndex);
+ StorageDel->traceRouteCtlOwnerIndex = NULL;
+ free(StorageDel->traceRouteCtlTestName);
+ StorageDel->traceRouteCtlTestName = NULL;
+ free(StorageDel->traceRouteCtlTargetAddress);
+ StorageDel->traceRouteCtlTargetAddress = NULL;
+ free(StorageDel->traceRouteCtlSourceAddress);
+ StorageDel->traceRouteCtlSourceAddress = NULL;
+ free(StorageDel->traceRouteCtlMiscOptions);
+ StorageDel->traceRouteCtlMiscOptions = NULL;
+ free(StorageDel->traceRouteCtlDescr);
+ StorageDel->traceRouteCtlDescr = NULL;
+ free(StorageDel->traceRouteCtlTrapGeneration);
+ StorageDel->traceRouteCtlTrapGeneration = NULL;
+ free(StorageDel->traceRouteCtlType);
+ StorageDel->traceRouteCtlType = NULL;
+ free(StorageDel);
+ StorageDel = NULL;
+
+ }
+ DEBUGMSGTL(("traceRouteCtlTable", "cleaner "));
+ }
+}
+
+
+/*
+ * parse_mteObjectsTable():
+ * parses .conf file entries needed to configure the mib.
+ */
+void
+parse_traceRouteCtlTable(const char *token, char *line)
+{
+ size_t tmpint;
+ struct traceRouteCtlTable_data *StorageTmp =
+ SNMP_MALLOC_STRUCT(traceRouteCtlTable_data);
+
+ DEBUGMSGTL(("traceRouteCtlTable", "parsing config... "));
+
+
+ if (StorageTmp == NULL) {
+ config_perror("malloc failure");
+ return;
+ }
+
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteCtlOwnerIndex,
+ &StorageTmp->traceRouteCtlOwnerIndexLen);
+ if (StorageTmp->traceRouteCtlOwnerIndex == NULL) {
+ config_perror("invalid specification for traceRouteCtlOwnerIndex");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteCtlTestName,
+ &StorageTmp->traceRouteCtlTestNameLen);
+ if (StorageTmp->traceRouteCtlTestName == NULL) {
+ config_perror("invalid specification for traceRouteCtlTestName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteCtlTargetAddressType,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteCtlTargetAddress,
+ &StorageTmp->traceRouteCtlTargetAddressLen);
+ if (StorageTmp->traceRouteCtlTargetAddress == NULL) {
+ config_perror
+ ("invalid specification for traceRouteCtlTargetAddress");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteCtlByPassRouteTable,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteCtlDataSize, &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteCtlTimeOut, &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteCtlProbesPerHop,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteCtlPort, &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteCtlMaxTtl, &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteCtlDSField, &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteCtlSourceAddressType,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteCtlSourceAddress,
+ &StorageTmp->traceRouteCtlSourceAddressLen);
+ if (StorageTmp->traceRouteCtlSourceAddress == NULL) {
+ config_perror
+ ("invalid specification for traceRouteCtlSourceAddress");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteCtlIfIndex, &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteCtlMiscOptions,
+ &StorageTmp->traceRouteCtlMiscOptionsLen);
+ if (StorageTmp->traceRouteCtlMiscOptions == NULL) {
+ config_perror
+ ("invalid specification for traceRouteCtlMiscOptions");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteCtlMaxFailures,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteCtlDontFragment,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteCtlInitialTtl,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteCtlFrequency,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteCtlStorageType,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteCtlAdminStatus,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteCtlDescr,
+ &StorageTmp->traceRouteCtlDescrLen);
+ if (StorageTmp->traceRouteCtlDescr == NULL) {
+ config_perror("invalid specification for traceRouteCtlTrapDescr");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteCtlMaxRows, &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteCtlTrapGeneration,
+ &StorageTmp->traceRouteCtlTrapGenerationLen);
+ if (StorageTmp->traceRouteCtlTrapGeneration == NULL) {
+ config_perror
+ ("invalid specification for traceRouteCtlTrapGeneration");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteCtlCreateHopsEntries,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OBJECT_ID, line,
+ &StorageTmp->traceRouteCtlType,
+ &StorageTmp->traceRouteCtlTypeLen);
+ if (StorageTmp->traceRouteCtlType == NULL) {
+ config_perror("invalid specification for traceRouteCtlType");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteCtlRowStatus,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteProbeHistoryMaxIndex,
+ &tmpint);
+
+ StorageTmp->storageType = ST_NONVOLATILE;
+ traceRouteCtlTable_add(StorageTmp);
+ /* traceRouteCtlTable_cleaner(traceRouteCtlTableStorage); */
+
+ DEBUGMSGTL(("traceRouteCtlTable", "done.\n"));
+}
+
+
+
+/*
+ * store_traceRouteCtlTable():
+ * stores .conf file entries needed to configure the mib.
+ */
+int
+store_traceRouteCtlTable(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr = NULL;
+ size_t tmpint;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ struct header_complex_index *hcindex = NULL;
+
+
+ DEBUGMSGTL(("traceRouteCtlTable", "storing data... "));
+
+
+ for (hcindex = traceRouteCtlTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp = (struct traceRouteCtlTable_data *) hcindex->data;
+
+ if (StorageTmp->storageType != ST_READONLY) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "traceRouteCtlTable ");
+ cptr = line + strlen(line);
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteCtlOwnerIndex,
+ &StorageTmp->
+ traceRouteCtlOwnerIndexLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->traceRouteCtlTestName,
+ &StorageTmp->
+ traceRouteCtlTestNameLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ traceRouteCtlTargetAddressType,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteCtlTargetAddress,
+ &StorageTmp->
+ traceRouteCtlTargetAddressLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ traceRouteCtlByPassRouteTable,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->traceRouteCtlDataSize,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->traceRouteCtlTimeOut,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteCtlProbesPerHop, &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->traceRouteCtlPort,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->traceRouteCtlMaxTtl,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->traceRouteCtlDSField,
+ &tmpint);
+
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ traceRouteCtlSourceAddressType,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteCtlSourceAddress,
+ &StorageTmp->
+ traceRouteCtlSourceAddressLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->traceRouteCtlIfIndex,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteCtlMiscOptions,
+ &StorageTmp->
+ traceRouteCtlMiscOptionsLen);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteCtlMaxFailures, &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ traceRouteCtlDontFragment, &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteCtlInitialTtl, &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->traceRouteCtlFrequency,
+ &tmpint);
+
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ traceRouteCtlStorageType, &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ traceRouteCtlAdminStatus, &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->traceRouteCtlDescr,
+ &StorageTmp->traceRouteCtlDescrLen);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->traceRouteCtlMaxRows,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteCtlTrapGeneration,
+ &StorageTmp->
+ traceRouteCtlTrapGenerationLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ traceRouteCtlCreateHopsEntries,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OBJECT_ID, cptr,
+ &StorageTmp->traceRouteCtlType,
+ &StorageTmp->traceRouteCtlTypeLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->traceRouteCtlRowStatus,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteProbeHistoryMaxIndex,
+ &tmpint);
+
+
+
+ snmpd_store_config(line);
+ }
+ }
+ DEBUGMSGTL(("traceRouteCtlTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+
+
+/*
+ * var_traceRouteCtlTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_mteObjectsTable above.
+ */
+unsigned char *
+var_traceRouteCtlTable(struct variable *vp,
+ oid * name,
+ size_t *length,
+ int exact,
+ size_t *var_len, WriteMethod ** write_method)
+{
+
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, vp, name, length, exact,
+ var_len, write_method)) == NULL) {
+ if (vp->magic == COLUMN_TRACEROUTECTLROWSTATUS)
+ *write_method = write_traceRouteCtlRowStatus;
+
+ return NULL;
+ }
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+
+
+ case COLUMN_TRACEROUTECTLTARGETADDRESSTYPE:
+ *write_method = write_traceRouteCtlTargetAddressType;
+ *var_len = sizeof(StorageTmp->traceRouteCtlTargetAddressType);
+
+ return (u_char *) & StorageTmp->traceRouteCtlTargetAddressType;
+
+ case COLUMN_TRACEROUTECTLTARGETADDRESS:
+ *write_method = write_traceRouteCtlTargetAddress;
+ *var_len = (StorageTmp->traceRouteCtlTargetAddressLen);
+
+ return (u_char *) StorageTmp->traceRouteCtlTargetAddress;
+
+ case COLUMN_TRACEROUTECTLBYPASSROUTETABLE:
+ *write_method = write_traceRouteCtlByPassRouteTable;
+ *var_len = sizeof(StorageTmp->traceRouteCtlByPassRouteTable);
+
+ return (u_char *) & StorageTmp->traceRouteCtlByPassRouteTable;
+
+ case COLUMN_TRACEROUTECTLDATASIZE:
+ *write_method = write_traceRouteCtlDataSize;
+ *var_len = sizeof(StorageTmp->traceRouteCtlDataSize);
+
+ return (u_char *) & StorageTmp->traceRouteCtlDataSize;
+
+ case COLUMN_TRACEROUTECTLTIMEOUT:
+ *write_method = write_traceRouteCtlTimeOut;
+ *var_len = sizeof(StorageTmp->traceRouteCtlTimeOut);
+
+ return (u_char *) & StorageTmp->traceRouteCtlTimeOut;
+
+ case COLUMN_TRACEROUTECTLPROBESPERHOP:
+ *write_method = write_traceRouteCtlProbesPerHop;
+ *var_len = sizeof(StorageTmp->traceRouteCtlProbesPerHop);
+
+ return (u_char *) & StorageTmp->traceRouteCtlProbesPerHop;
+
+ case COLUMN_TRACEROUTECTLPORT:
+ *write_method = write_traceRouteCtlPort;
+ *var_len = sizeof(StorageTmp->traceRouteCtlPort);
+
+ return (u_char *) & StorageTmp->traceRouteCtlPort;
+
+ case COLUMN_TRACEROUTECTLMAXTTL:
+ *write_method = write_traceRouteCtlMaxTtl;
+ *var_len = sizeof(StorageTmp->traceRouteCtlMaxTtl);
+
+ return (u_char *) & StorageTmp->traceRouteCtlMaxTtl;
+
+ case COLUMN_TRACEROUTECTLDSFIELD:
+ *write_method = write_traceRouteCtlDSField;
+ *var_len = sizeof(StorageTmp->traceRouteCtlDSField);
+
+ return (u_char *) & StorageTmp->traceRouteCtlDSField;
+
+ case COLUMN_TRACEROUTECTLSOURCEADDRESSTYPE:
+ *write_method = write_traceRouteCtlSourceAddressType;
+ *var_len = sizeof(StorageTmp->traceRouteCtlSourceAddressType);
+
+ return (u_char *) & StorageTmp->traceRouteCtlSourceAddressType;
+
+ case COLUMN_TRACEROUTECTLSOURCEADDRESS:
+ *write_method = write_traceRouteCtlSourceAddress;
+ *var_len = (StorageTmp->traceRouteCtlSourceAddressLen);
+
+ return (u_char *) StorageTmp->traceRouteCtlSourceAddress;
+
+ case COLUMN_TRACEROUTECTLIFINDEX:
+ *write_method = write_traceRouteCtlIfIndex;
+ *var_len = sizeof(StorageTmp->traceRouteCtlIfIndex);
+
+ return (u_char *) & StorageTmp->traceRouteCtlIfIndex;
+
+ case COLUMN_TRACEROUTECTLMISCOPTIONS:
+ *write_method = write_traceRouteCtlMiscOptions;
+ *var_len = (StorageTmp->traceRouteCtlMiscOptionsLen);
+
+ return (u_char *) StorageTmp->traceRouteCtlMiscOptions;
+
+ case COLUMN_TRACEROUTECTLMAXFAILURES:
+ *write_method = write_traceRouteCtlMaxFailures;
+ *var_len = sizeof(StorageTmp->traceRouteCtlMaxFailures);
+
+ return (u_char *) & StorageTmp->traceRouteCtlMaxFailures;
+
+ case COLUMN_TRACEROUTECTLDONTFRAGMENT:
+ *write_method = write_traceRouteCtlDontFragment;
+ *var_len = sizeof(StorageTmp->traceRouteCtlDontFragment);
+
+ return (u_char *) & StorageTmp->traceRouteCtlDontFragment;
+
+ case COLUMN_TRACEROUTECTLINITIALTTL:
+ *write_method = write_traceRouteCtlInitialTtl;
+ *var_len = sizeof(StorageTmp->traceRouteCtlInitialTtl);
+
+ return (u_char *) & StorageTmp->traceRouteCtlInitialTtl;
+
+ case COLUMN_TRACEROUTECTLFREQUENCY:
+ *write_method = write_traceRouteCtlFrequency;
+ *var_len = sizeof(StorageTmp->traceRouteCtlFrequency);
+
+ return (u_char *) & StorageTmp->traceRouteCtlFrequency;
+
+ case COLUMN_TRACEROUTECTLSTORAGETYPE:
+ *write_method = write_traceRouteCtlStorageType;
+ *var_len = sizeof(StorageTmp->traceRouteCtlStorageType);
+
+ return (u_char *) & StorageTmp->traceRouteCtlStorageType;
+
+ case COLUMN_TRACEROUTECTLADMINSTATUS:
+ *write_method = write_traceRouteCtlAdminStatus;
+ *var_len = sizeof(StorageTmp->traceRouteCtlAdminStatus);
+
+ return (u_char *) & StorageTmp->traceRouteCtlAdminStatus;
+
+ case COLUMN_TRACEROUTECTLDESCR:
+ *write_method = write_traceRouteCtlDescr;
+ *var_len = (StorageTmp->traceRouteCtlDescrLen);
+
+ return (u_char *) StorageTmp->traceRouteCtlDescr;
+
+ case COLUMN_TRACEROUTECTLMAXROWS:
+ *write_method = write_traceRouteCtlMaxRows;
+ *var_len = sizeof(StorageTmp->traceRouteCtlMaxRows);
+
+ return (u_char *) & StorageTmp->traceRouteCtlMaxRows;
+
+ case COLUMN_TRACEROUTECTLTRAPGENERATION:
+ *write_method = write_traceRouteCtlTrapGeneration;
+ *var_len = (StorageTmp->traceRouteCtlTrapGenerationLen);
+
+ return (u_char *) StorageTmp->traceRouteCtlTrapGeneration;
+
+ case COLUMN_TRACEROUTECTLCREATEHOPSENTRIES:
+ *write_method = write_traceRouteCtlCreateHopsEntries;
+ *var_len = sizeof(StorageTmp->traceRouteCtlCreateHopsEntries);
+
+ return (u_char *) & StorageTmp->traceRouteCtlCreateHopsEntries;
+
+ case COLUMN_TRACEROUTECTLTYPE:
+ *write_method = write_traceRouteCtlType;
+ *var_len = (StorageTmp->traceRouteCtlTypeLen) * sizeof(oid);
+
+ return (u_char *) StorageTmp->traceRouteCtlType;
+
+ case COLUMN_TRACEROUTECTLROWSTATUS:
+ *write_method = write_traceRouteCtlRowStatus;
+ *var_len = sizeof(StorageTmp->traceRouteCtlRowStatus);
+
+ return (u_char *) & StorageTmp->traceRouteCtlRowStatus;
+
+ default:
+ ERROR_MSG("");
+ }
+ return NULL;
+}
+
+
+
+int
+traceRouteResultsTable_del(struct traceRouteCtlTable_data *thedata)
+{
+ struct header_complex_index *hciptr2 = NULL;
+ struct traceRouteResultsTable_data *StorageDel = NULL;
+ netsnmp_variable_list *vars = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len = 0;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+
+ bzero(newoid, sizeof(oid) * MAX_OID_LEN);
+ header_complex_generate_oid(newoid, &newoid_len, NULL, 0, vars);
+
+ for (hciptr2 = traceRouteResultsTableStorage; hciptr2 != NULL;
+ hciptr2 = hciptr2->next) {
+ if (snmp_oid_compare(newoid, newoid_len, hciptr2->name, newoid_len)
+ == 0) {
+ StorageDel =
+ header_complex_extract_entry
+ (&traceRouteResultsTableStorage, hciptr2);
+ DEBUGMSGTL(("traceRouteResultsTable", "delete success!\n"));
+
+ }
+ }
+ vars = NULL;
+ return SNMPERR_SUCCESS;
+}
+
+
+
+
+int
+traceRouteProbeHistoryTable_del(struct traceRouteCtlTable_data *thedata)
+{
+ struct header_complex_index *hciptr2 = NULL;
+ struct traceRouteProbeHistoryTable_data *StorageDel = NULL;
+ netsnmp_variable_list *vars = NULL;
+ netsnmp_variable_list *vars_temp = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len = 0;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen); /* traceRouteCtlOperationName */
+
+ bzero(newoid, sizeof(oid) * MAX_OID_LEN);
+
+ header_complex_generate_oid(newoid, &newoid_len, NULL, 0, vars);
+
+ for (hciptr2 = traceRouteProbeHistoryTableStorage; hciptr2 != NULL;
+ hciptr2 = hciptr2->next) {
+ if (snmp_oid_compare(newoid, newoid_len, hciptr2->name, newoid_len)
+ == 0) {
+ StorageDel =
+ header_complex_extract_entry
+ (&traceRouteProbeHistoryTableStorage, hciptr2);
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "delete success!\n"));
+
+ }
+ }
+ vars = NULL;
+ return SNMPERR_SUCCESS;
+}
+
+
+
+
+
+int
+traceRouteHopsTable_del(struct traceRouteCtlTable_data *thedata)
+{
+ struct header_complex_index *hciptr2 = NULL;
+ struct traceRouteHopsTable_data *StorageDel = NULL;
+ netsnmp_variable_list *vars = NULL;
+ netsnmp_variable_list *vars_temp = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len = 0;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+
+ bzero(newoid, sizeof(oid) * MAX_OID_LEN);
+
+ header_complex_generate_oid(newoid, &newoid_len, NULL, 0, vars);
+
+ for (hciptr2 = traceRouteHopsTableStorage; hciptr2 != NULL;
+ hciptr2 = hciptr2->next) {
+ if (snmp_oid_compare(newoid, newoid_len, hciptr2->name, newoid_len)
+ == 0) {
+ StorageDel =
+ header_complex_extract_entry(&traceRouteHopsTableStorage,
+ hciptr2);
+ DEBUGMSGTL(("traceRouteHopsTable", "delete success!\n"));
+
+ }
+ }
+ vars = NULL;
+ return SNMPERR_SUCCESS;
+}
+
+/*
+ * send trap
+ */
+
+int
+send_traceRoute_trap(struct traceRouteCtlTable_data *item,
+ oid * trap_oid, size_t trap_oid_len)
+{
+ static oid objid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 }; /* snmpTrapIOD.0 */
+ struct traceRouteResultsTable_data *StorageTmp = NULL;
+ struct traceRouteHopsTable_data *StorageHops = NULL;
+ netsnmp_variable_list *var_list = NULL;
+ netsnmp_variable_list *vars = NULL;
+ netsnmp_variable_list *var_hops = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len = 0;
+
+ oid indexoid[MAX_OID_LEN];
+ size_t indexoid_len = 0;
+
+ struct header_complex_index *hciptr;
+ oid tempoid[MAX_OID_LEN];
+ size_t tempoid_len = 0;
+
+ oid traceRouteCtlTargetAddress[] =
+ { 1, 3, 6, 1, 2, 1, 81, 1, 2, 1, 4 };
+ oid traceRouteHopsIpTgAddress[] =
+ { 1, 3, 6, 1, 2, 1, 81, 1, 5, 1, 3 };
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlOwnerIndex, item->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlTestName, item->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+
+ /*
+ * snmpTrap oid
+ */
+ snmp_varlist_add_variable(&var_list, objid_snmptrap,
+ sizeof(objid_snmptrap) / sizeof(oid),
+ ASN_OBJECT_ID, (u_char *) trap_oid,
+ trap_oid_len * sizeof(oid));
+
+ /*
+ * traceRouteCtlTargetAddress
+ */
+ bzero(newoid, MAX_OID_LEN * sizeof(oid));
+ header_complex_generate_oid(newoid, &newoid_len,
+ traceRouteCtlTargetAddress,
+ sizeof(traceRouteCtlTargetAddress) /
+ sizeof(oid), vars);
+
+ snmp_varlist_add_variable(&var_list, newoid,
+ newoid_len,
+ ASN_OCTET_STR,
+ (u_char *) item->traceRouteCtlTargetAddress,
+ item->traceRouteCtlTargetAddressLen);
+
+ for (hciptr = traceRouteHopsTableStorage; hciptr != NULL;
+ hciptr = hciptr->next) {
+ bzero(indexoid, MAX_OID_LEN * sizeof(oid));
+ header_complex_generate_oid(indexoid, &indexoid_len, NULL, 0,
+ vars);
+ if (snmp_oid_compare
+ (indexoid, indexoid_len, hciptr->name, indexoid_len) == 0) {
+ StorageHops =
+ (struct traceRouteHopsTable_data *)
+ header_complex_get_from_oid(traceRouteHopsTableStorage,
+ hciptr->name, hciptr->namelen);
+ bzero(tempoid, MAX_OID_LEN * sizeof(oid));
+ header_complex_generate_oid(tempoid, &tempoid_len,
+ traceRouteHopsIpTgAddress,
+ sizeof(traceRouteHopsIpTgAddress) /
+ sizeof(oid), vars);
+ snmp_varlist_add_variable(&var_hops, NULL, 0, ASN_UNSIGNED, (char *) &StorageHops->traceRouteHopsHopIndex, sizeof(StorageHops->traceRouteHopsHopIndex)); /* traceRouteCtlTestName */
+ bzero(newoid, MAX_OID_LEN * sizeof(oid));
+ header_complex_generate_oid(newoid, &newoid_len, tempoid,
+ tempoid_len, var_hops);
+ snmp_varlist_add_variable(&var_list, newoid, newoid_len,
+ ASN_OCTET_STR,
+ (u_char *) StorageHops->
+ traceRouteHopsIpTgtAddress,
+ StorageHops->
+ traceRouteHopsIpTgtAddressLen);
+
+ var_hops = NULL;
+ }
+ }
+
+ /*
+ * XXX: stuff based on event table
+ */
+
+ DEBUGMSG(("pingTest:send_ping_trap", "success!\n"));
+
+ send_v2trap(var_list);
+ snmp_free_varbind(vars);
+ vars = NULL;
+ snmp_free_varbind(var_list);
+ var_list = NULL;
+}
+
+
+int
+write_traceRouteCtlTargetAddressType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlTargetAddressType not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlTargetAddressType;
+ StorageTmp->traceRouteCtlTargetAddressType = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlTargetAddressType = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_traceRouteCtlTargetAddress(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static char *tmpvar;
+ static size_t tmplen;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlTargetAddress not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlTargetAddress;
+ tmplen = StorageTmp->traceRouteCtlTargetAddressLen;
+
+ StorageTmp->traceRouteCtlTargetAddress =
+ (char *) malloc(var_val_len + 1);
+ if (StorageTmp->traceRouteCtlTargetAddress == NULL) {
+ exit(1);
+ }
+ memcpy(StorageTmp->traceRouteCtlTargetAddress, var_val,
+ var_val_len);
+ StorageTmp->traceRouteCtlTargetAddress[var_val_len] = '\0';
+ StorageTmp->traceRouteCtlTargetAddressLen = var_val_len;
+
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->traceRouteCtlTargetAddress);
+ StorageTmp->traceRouteCtlTargetAddress = NULL;
+
+ StorageTmp->traceRouteCtlTargetAddress = tmpvar;
+ StorageTmp->traceRouteCtlTargetAddressLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ tmpvar = NULL;
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_traceRouteCtlByPassRouteTable(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlTargetAddressType not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlByPassRouteTable;
+ StorageTmp->traceRouteCtlByPassRouteTable = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlByPassRouteTable = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+
+}
+
+int
+write_traceRouteCtlDataSize(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlDataSize not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlDataSize;
+ if ((*((long *) var_val)) >= 0 && (*((long *) var_val)) <= 65507)
+ StorageTmp->traceRouteCtlDataSize = *((long *) var_val);
+ else
+ StorageTmp->traceRouteCtlDataSize = 56;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlDataSize = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_traceRouteCtlTimeOut(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlDataSize not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlTimeOut;
+
+ if ((*((long *) var_val)) >= 1 && (*((long *) var_val)) <= 60)
+ StorageTmp->traceRouteCtlTimeOut = *((long *) var_val);
+ else
+ StorageTmp->traceRouteCtlTimeOut = 3;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlTimeOut = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+
+int
+write_traceRouteCtlProbesPerHop(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlDataSize not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlProbesPerHop;
+
+ if ((*((long *) var_val)) >= 1 && (*((long *) var_val)) <= 10)
+ StorageTmp->traceRouteCtlProbesPerHop = *((long *) var_val);
+ else
+ StorageTmp->traceRouteCtlProbesPerHop = 3;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlProbesPerHop = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_traceRouteCtlPort(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlTargetAddressType not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlPort;
+ StorageTmp->traceRouteCtlPort = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlPort = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_traceRouteCtlMaxTtl(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlDataSize not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlMaxTtl;
+ if ((*((long *) var_val)) >= 1 && (*((long *) var_val)) <= 255)
+ StorageTmp->traceRouteCtlMaxTtl = *((long *) var_val);
+ else
+ StorageTmp->traceRouteCtlMaxTtl = 30;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlMaxTtl = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+write_traceRouteCtlDSField(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlDataSize not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlDSField;
+ StorageTmp->traceRouteCtlDSField = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlDSField = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_traceRouteCtlSourceAddressType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlMaxRows not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlSourceAddressType;
+ StorageTmp->traceRouteCtlSourceAddressType = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlSourceAddressType = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_traceRouteCtlSourceAddress(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static char *tmpvar;
+ static size_t tmplen;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlTargetAddress not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlSourceAddress;
+ tmplen = StorageTmp->traceRouteCtlSourceAddressLen;
+ StorageTmp->traceRouteCtlSourceAddress =
+ (char *) malloc(var_val_len + 1);
+ if (StorageTmp->traceRouteCtlSourceAddress == NULL) {
+ exit(1);
+ }
+ memcpy(StorageTmp->traceRouteCtlSourceAddress, var_val,
+ var_val_len + 1);
+ StorageTmp->traceRouteCtlSourceAddress[var_val_len] = '\0';
+ StorageTmp->traceRouteCtlSourceAddressLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->traceRouteCtlSourceAddress);
+ StorageTmp->traceRouteCtlSourceAddress = NULL;
+ StorageTmp->traceRouteCtlSourceAddress = tmpvar;
+ StorageTmp->traceRouteCtlSourceAddressLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ tmpvar = NULL;
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_traceRouteCtlIfIndex(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlMaxRows not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlIfIndex;
+ StorageTmp->traceRouteCtlIfIndex = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlIfIndex = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_traceRouteCtlMiscOptions(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ static size_t tmplen;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlTargetAddress not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlMiscOptions;
+ tmplen = StorageTmp->traceRouteCtlMiscOptionsLen;
+ StorageTmp->traceRouteCtlMiscOptions =
+ (char *) malloc(var_val_len + 1);
+ if (StorageTmp->traceRouteCtlMiscOptions == NULL) {
+ exit(1);
+ }
+ memcpy(StorageTmp->traceRouteCtlMiscOptions, var_val,
+ var_val_len + 1);
+ StorageTmp->traceRouteCtlMiscOptions[var_val_len] = '\0';
+ StorageTmp->traceRouteCtlMiscOptionsLen = var_val_len;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->traceRouteCtlMiscOptions);
+ StorageTmp->traceRouteCtlMiscOptions = NULL;
+ StorageTmp->traceRouteCtlMiscOptions = tmpvar;
+ StorageTmp->traceRouteCtlMiscOptionsLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ tmpvar = NULL;
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_traceRouteCtlMaxFailures(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlTrapTestFailureFilter not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlMaxFailures;
+ if ((*((long *) var_val)) >= 0 && (*((long *) var_val)) <= 15)
+ StorageTmp->traceRouteCtlMaxFailures = *((long *) var_val);
+ else
+ StorageTmp->traceRouteCtlMaxFailures = 1;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlMaxFailures = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+
+int
+write_traceRouteCtlDontFragment(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlMaxRows not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlDontFragment;
+ StorageTmp->traceRouteCtlDontFragment = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlDontFragment = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_traceRouteCtlInitialTtl(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlTrapTestFailureFilter not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlInitialTtl;
+ if ((*((long *) var_val)) >= 0 && (*((long *) var_val)) <= 255)
+ StorageTmp->traceRouteCtlInitialTtl = *((long *) var_val);
+ else
+ StorageTmp->traceRouteCtlInitialTtl = 1;
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlInitialTtl = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+write_traceRouteCtlFrequency(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlSourceAddressType not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlFrequency;
+ StorageTmp->traceRouteCtlFrequency = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlFrequency = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_traceRouteCtlStorageType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ int set_value;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+
+ set_value = *((long *) var_val);
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlMaxRows not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ if ((StorageTmp->traceRouteCtlStorageType == 2
+ || StorageTmp->traceRouteCtlStorageType == 3)
+ && (set_value == 4 || set_value == 5)) {
+ return SNMP_ERR_WRONGVALUE;
+ }
+ break;
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlStorageType;
+ StorageTmp->traceRouteCtlStorageType = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlStorageType = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+write_traceRouteCtlAdminStatus(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ netsnmp_variable_list *vars = NULL;
+ struct traceRouteResultsTable_data *StorageNew = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlIfIndex not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlAdminStatus;
+ StorageTmp->traceRouteCtlAdminStatus = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlAdminStatus = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) StorageTmp->traceRouteCtlOwnerIndex, StorageTmp->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) StorageTmp->traceRouteCtlTestName, StorageTmp->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+ StorageNew =
+ header_complex_get(traceRouteResultsTableStorage, vars);
+
+ if (StorageTmp->traceRouteCtlAdminStatus == 1
+ && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ if (StorageNew == NULL)
+ init_trResultsTable(StorageTmp);
+ else {
+ StorageTmp->traceRouteResults->
+ traceRouteResultsOperStatus = 1;
+ modify_trResultsOper(StorageTmp, 1);
+ }
+ if (StorageTmp->traceRouteCtlFrequency != 0)
+ StorageTmp->timer_id =
+ snmp_alarm_register(StorageTmp->traceRouteCtlFrequency,
+ SA_REPEAT, run_traceRoute,
+ StorageTmp);
+ else
+ StorageTmp->timer_id = snmp_alarm_register(1, (int) NULL,
+ run_traceRoute,
+ StorageTmp);
+
+ } else if (StorageTmp->traceRouteCtlAdminStatus == 2
+ && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ snmp_alarm_unregister(StorageTmp->timer_id);
+ if (StorageNew == NULL)
+ init_trResultsTable(StorageTmp);
+ else {
+ StorageTmp->traceRouteResults->
+ traceRouteResultsOperStatus = 2;
+ modify_trResultsOper(StorageTmp, 2);
+ }
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+int
+write_traceRouteCtlDescr(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static char *tmpvar;
+ static size_t tmplen;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlTargetAddress not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlDescr;
+ tmplen = StorageTmp->traceRouteCtlDescrLen;
+
+ StorageTmp->traceRouteCtlDescr = (char *) malloc(var_val_len + 1);
+ if (StorageTmp->traceRouteCtlDescr == NULL) {
+ exit(1);
+ }
+ memcpy(StorageTmp->traceRouteCtlDescr, var_val, var_val_len + 1);
+ StorageTmp->traceRouteCtlDescr[var_val_len] = '\0';
+ StorageTmp->traceRouteCtlDescrLen = var_val_len;
+
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->traceRouteCtlDescr);
+ StorageTmp->traceRouteCtlDescr = NULL;
+ StorageTmp->traceRouteCtlDescr = tmpvar;
+ StorageTmp->traceRouteCtlDescrLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ tmpvar = NULL;
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+
+
+int
+write_traceRouteCtlMaxRows(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_UNSIGNED) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlDSField not ASN_UNSIGNED\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlMaxRows;
+ StorageTmp->traceRouteCtlMaxRows = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlMaxRows = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_traceRouteCtlTrapGeneration(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static char *tmpvar;
+ static size_t tmplen;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlTargetAddress not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlTrapGeneration;
+ tmplen = StorageTmp->traceRouteCtlTrapGenerationLen;
+ StorageTmp->traceRouteCtlTrapGeneration =
+ (char *) malloc(var_val_len + 1);
+ if (StorageTmp->traceRouteCtlTrapGeneration == NULL) {
+ exit(1);
+ }
+
+ memcpy(StorageTmp->traceRouteCtlTrapGeneration, var_val,
+ var_val_len + 1);
+ StorageTmp->traceRouteCtlTrapGeneration[var_val_len] = '\0';
+ StorageTmp->traceRouteCtlTrapGenerationLen = var_val_len;
+
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->traceRouteCtlTrapGeneration);
+ StorageTmp->traceRouteCtlTrapGeneration = NULL;
+ StorageTmp->traceRouteCtlTrapGeneration = tmpvar;
+ StorageTmp->traceRouteCtlTrapGenerationLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ tmpvar = NULL;
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_traceRouteCtlCreateHopsEntries(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name,
+ size_t name_len)
+{
+ static size_t tmpvar;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static size_t tmplen;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlDSField not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in objid for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlCreateHopsEntries;
+ StorageTmp->traceRouteCtlCreateHopsEntries = *((long *) var_val);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ StorageTmp->traceRouteCtlCreateHopsEntries = tmpvar;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_traceRouteCtlType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static oid *tmpvar;
+ static size_t tmplen;
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+
+ if ((StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL,
+ NULL)) == NULL)
+ return SNMP_ERR_NOSUCHNAME; /* remove if you support creation here */
+
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1:
+ if (var_val_type != ASN_OBJECT_ID) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlType not ASN_OBJECT_ID\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ break;
+
+
+ case FREE:
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+
+ case ACTION:
+ /*
+ * The variable has been stored in long_ret for
+ * you to use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in the UNDO case
+ */
+ tmpvar = StorageTmp->traceRouteCtlType;
+ tmplen = StorageTmp->traceRouteCtlTypeLen;
+
+ StorageTmp->traceRouteCtlType = (oid *) malloc(var_val_len);
+ if (StorageTmp->traceRouteCtlType == NULL) {
+ exit(1);
+ }
+ memcpy(StorageTmp->traceRouteCtlType, var_val, var_val_len);
+ StorageTmp->traceRouteCtlTypeLen = var_val_len / sizeof(oid);
+ break;
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ SNMP_FREE(StorageTmp->traceRouteCtlType);
+ StorageTmp->traceRouteCtlType = NULL;
+ StorageTmp->traceRouteCtlType = tmpvar;
+ StorageTmp->traceRouteCtlTypeLen = tmplen;
+ break;
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ SNMP_FREE(tmpvar);
+ tmpvar = NULL;
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_traceRouteCtlRowStatus(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ struct traceRouteCtlTable_data *StorageTmp = NULL;
+ static struct traceRouteCtlTable_data *StorageNew = NULL;
+ static struct traceRouteCtlTable_data *StorageDel = NULL;
+ size_t newlen =
+ name_len -
+ (sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) + 3 - 1);
+ static int old_value;
+ int set_value;
+ static netsnmp_variable_list *vars = NULL, *vp = NULL;
+ struct header_complex_index *hciptr = NULL;
+
+ StorageTmp =
+ header_complex(traceRouteCtlTableStorage, NULL,
+ &name[sizeof(traceRouteCtlTable_variables_oid) /
+ sizeof(oid) + 3 - 1], &newlen, 1, NULL, NULL);
+
+ if (var_val_type != ASN_INTEGER || var_val == NULL) {
+ snmp_log(LOG_ERR,
+ "write to traceRouteCtlRowStatus not ASN_INTEGER\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (StorageTmp && StorageTmp->storageType == ST_READONLY) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ set_value = *((long *) var_val);
+
+
+ /*
+ * check legal range, and notReady is reserved for us, not a user
+ */
+ if (set_value < 1 || set_value > 6 || set_value == RS_NOTREADY)
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+
+ switch (action) {
+ case RESERVE1:
+ /*
+ * stage one: test validity
+ */
+ if (StorageTmp == NULL) {
+ /*
+ * create the row now?
+ */
+
+ /*
+ * ditch illegal values now
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE) {
+
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+
+ /*
+ * destroying a non-existent row is actually legal
+ */
+ if (set_value == RS_DESTROY) {
+
+ return SNMP_ERR_NOERROR;
+ }
+
+
+ /*
+ * illegal creation values
+ */
+ if (set_value == RS_ACTIVE || set_value == RS_NOTINSERVICE) {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ } else {
+ /*
+ * row exists. Check for a valid state change
+ */
+ if (set_value == RS_CREATEANDGO
+ || set_value == RS_CREATEANDWAIT) {
+ /*
+ * can't create a row that exists
+ */
+
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+
+ /*
+ * XXX: interaction with row storage type needed
+ */
+
+ if (StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE &&
+ set_value != RS_DESTROY) {
+ /*
+ * "Once made active an entry may not be modified except to
+ * delete it." XXX: doesn't this in fact apply to ALL
+ * columns of the table and not just this one?
+ */
+
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ if (StorageTmp->storageType != ST_NONVOLATILE) {
+
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ }
+
+ break;
+
+
+
+
+ case RESERVE2:
+ /*
+ * memory reseveration, final preparation...
+ */
+ if (StorageTmp == NULL) {
+
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+ /*
+ * creation
+ */
+
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0); /* traceRouteCtlTestName */
+
+ if (header_complex_parse_oid
+ (&
+ (name
+ [sizeof(traceRouteCtlTable_variables_oid) / sizeof(oid) +
+ 2]), newlen, vars) != SNMPERR_SUCCESS) {
+ /*
+ * XXX: free, zero vars
+ */
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+
+
+ StorageNew = create_traceRouteCtlTable_data();
+ if (vars->val_len <= 32) {
+ StorageNew->traceRouteCtlOwnerIndex =
+ malloc(vars->val_len + 1);
+ memcpy(StorageNew->traceRouteCtlOwnerIndex,
+ vars->val.string, vars->val_len);
+ StorageNew->traceRouteCtlOwnerIndex[vars->val_len] = '\0';
+ StorageNew->traceRouteCtlOwnerIndexLen = vars->val_len;
+ } else {
+ StorageNew->traceRouteCtlOwnerIndex = malloc(33);
+ memcpy(StorageNew->traceRouteCtlOwnerIndex,
+ vars->val.string, 32);
+ StorageNew->traceRouteCtlOwnerIndex[32] = '\0';
+ StorageNew->traceRouteCtlOwnerIndexLen = 32;
+ }
+
+ vars = vars->next_variable;
+
+ if (vars->val_len <= 32) {
+ StorageNew->traceRouteCtlTestName =
+ malloc(vars->val_len + 1);
+ memcpy(StorageNew->traceRouteCtlTestName, vars->val.string,
+ vars->val_len);
+ StorageNew->traceRouteCtlTestName[vars->val_len] = '\0';
+ StorageNew->traceRouteCtlTestNameLen = vars->val_len;
+ } else {
+ StorageNew->traceRouteCtlTestName = malloc(33);
+ memcpy(StorageNew->traceRouteCtlTestName, vars->val.string,
+ 32);
+ StorageNew->traceRouteCtlTestName[32] = '\0';
+ StorageNew->traceRouteCtlTestNameLen = 32;
+ }
+ vars = vars->next_variable;
+
+ /*
+ * XXX: fill in default row values here into StorageNew
+ */
+
+ StorageNew->traceRouteCtlRowStatus = set_value;
+
+
+ /*
+ * XXX: free, zero vars, no longer needed?
+ */
+ }
+ snmp_free_varbind(vars);
+ vars = NULL;
+ break;
+
+ case FREE:
+ /*
+ * XXX: free, zero vars
+ */
+ snmp_free_varbind(vars);
+ vars = NULL;
+ /*
+ * Release any resources that have been allocated
+ */
+ break;
+
+ case ACTION:
+ /*
+ * The variable has been stored in set_value for you to
+ * use, and you have just been asked to do something with
+ * it. Note that anything done here must be reversable in
+ * the UNDO case
+ */
+
+ if (StorageTmp == NULL) {
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+ /*
+ * row creation, so add it
+ */
+ if (StorageNew != NULL) {
+#if 1
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "write_traceRouteCtlRowStatus entering new=%d... \n",
+ action));
+#endif
+ traceRouteCtlTable_add(StorageNew);
+ }
+
+ /*
+ * XXX: ack, and if it is NULL?
+ */
+ } else if (set_value != RS_DESTROY) {
+ /*
+ * set the flag?
+ */
+ old_value = StorageTmp->traceRouteCtlRowStatus;
+ StorageTmp->traceRouteCtlRowStatus = *((long *) var_val);
+ } else {
+ /*
+ * destroy... extract it for now
+ */
+
+ hciptr =
+ header_complex_find_entry(traceRouteCtlTableStorage,
+ StorageTmp);
+ StorageDel =
+ header_complex_extract_entry(&traceRouteCtlTableStorage,
+ hciptr);
+ snmp_alarm_unregister(StorageDel->timer_id);
+
+ traceRouteResultsTable_del(StorageTmp);
+ traceRouteProbeHistoryTable_del(StorageTmp);
+ traceRouteHopsTable_del(StorageTmp);
+ }
+ break;
+
+
+
+
+ case UNDO:
+ /*
+ * Back out any changes made in the ACTION case
+ */
+ if (StorageTmp == NULL) {
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+ /*
+ * row creation, so remove it again
+ */
+ hciptr =
+ header_complex_find_entry(traceRouteCtlTableStorage,
+ StorageTmp);
+ StorageDel =
+ header_complex_extract_entry(&traceRouteCtlTableStorage,
+ hciptr);
+ /*
+ * XXX: free it
+ */
+ } else if (StorageDel != NULL) {
+ /*
+ * row deletion, so add it again
+ */
+ traceRouteCtlTable_add(StorageDel);
+ traceRouteResultsTable_add(StorageDel);
+ traceRouteProbeHistoryTable_addall(StorageDel);
+ traceRouteHopsTable_addall(StorageDel);
+ } else {
+ StorageTmp->traceRouteCtlRowStatus = old_value;
+ }
+ break;
+
+
+
+
+ case COMMIT:
+ /*
+ * Things are working well, so it's now safe to make the change
+ * permanently. Make sure that anything done here can't fail!
+ */
+ if (StorageTmp == NULL) {
+ if (set_value == RS_DESTROY) {
+ return SNMP_ERR_NOERROR;
+ }
+ }
+ if (StorageDel != NULL) {
+ free(StorageDel->traceRouteCtlOwnerIndex);
+ StorageDel->traceRouteCtlOwnerIndex = NULL;
+ free(StorageDel->traceRouteCtlTestName);
+ StorageDel->traceRouteCtlTestName = NULL;
+ free(StorageDel->traceRouteCtlTargetAddress);
+ StorageDel->traceRouteCtlTargetAddress = NULL;
+ free(StorageDel->traceRouteCtlSourceAddress);
+ StorageDel->traceRouteCtlSourceAddress = NULL;
+ free(StorageDel->traceRouteCtlMiscOptions);
+ StorageDel->traceRouteCtlMiscOptions = NULL;
+ free(StorageDel->traceRouteCtlDescr);
+ StorageDel->traceRouteCtlDescr = NULL;
+ free(StorageDel->traceRouteCtlTrapGeneration);
+ StorageDel->traceRouteCtlTrapGeneration = NULL;
+ free(StorageDel->traceRouteCtlType);
+ StorageDel->traceRouteCtlType = NULL;
+ free(StorageDel);
+ StorageDel = NULL;
+
+ /*
+ * XXX: free it, its dead
+ */
+ } else {
+ if (StorageTmp
+ && StorageTmp->traceRouteCtlRowStatus == RS_CREATEANDGO) {
+ StorageTmp->traceRouteCtlRowStatus = RS_ACTIVE;
+ } else if (StorageTmp &&
+ StorageTmp->traceRouteCtlRowStatus ==
+ RS_CREATEANDWAIT) {
+
+ StorageTmp->traceRouteCtlRowStatus = RS_NOTINSERVICE;
+ }
+ }
+ if (StorageTmp && StorageTmp->traceRouteCtlRowStatus == RS_ACTIVE) {
+#if 1
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "write_traceRouteCtlRowStatus entering runbefore=%ld... \n",
+ StorageTmp->traceRouteCtlTargetAddressType));
+
+#endif
+ if (StorageTmp->traceRouteCtlAdminStatus == 1) {
+ init_trResultsTable(StorageTmp);
+ if (StorageTmp->traceRouteCtlFrequency != 0)
+ StorageTmp->timer_id =
+ snmp_alarm_register(StorageTmp->
+ traceRouteCtlFrequency,
+ SA_REPEAT, run_traceRoute,
+ StorageTmp);
+ else
+ StorageTmp->timer_id =
+ snmp_alarm_register(1, (int) NULL, run_traceRoute,
+ StorageTmp);
+
+ }
+
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+unsigned long
+round(double number)
+{
+ unsigned long ret_num = 0;
+ if (number - (unsigned long) number < 0.5)
+ ret_num = (unsigned long) number;
+ else
+ ret_num = (unsigned long) number + 1;
+ return ret_num;
+}
+
+void
+run_traceRoute(unsigned int clientreg, void *clientarg)
+{
+ struct traceRouteCtlTable_data *item = clientarg;
+ u_short port = item->traceRouteCtlPort; /* start udp dest port # for probe packets Ï൱ÓÚctlport */
+ int waittime = item->traceRouteCtlTimeOut; /* time to wait for response (in seconds) ÏàµÈÓÚctltimeout */
+ prog = "traceroute";
+ int nprobes = item->traceRouteCtlProbesPerHop;
+
+ if (item->traceRouteCtlInitialTtl > item->traceRouteCtlMaxTtl) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "first ttl (%d) may not be greater than max ttl (%d)\n",
+ item->traceRouteCtlInitialTtl,
+ item->traceRouteCtlMaxTtl));
+ return;
+ }
+
+ char *old_HopsAddress[255];
+ int count = 0;
+ int flag = 0;
+
+ if (item->traceRouteCtlTargetAddressType == 1
+ || item->traceRouteCtlTargetAddressType == 16) {
+ register int op, code, n;
+ register char *cp;
+ register const char *err;
+ register u_char *outp;
+ register u_int32_t *ap;
+ struct sockaddr whereto; /* Who to try to reach */
+ struct sockaddr wherefrom; /* Who we are */
+
+ register struct sockaddr_in *from =
+ (struct sockaddr_in *) &wherefrom;
+ register struct sockaddr_in *to = (struct sockaddr_in *) &whereto;
+ register struct hostinfo *hi;
+ int on = 1;
+ register struct protoent *pe;
+ register int ttl, probe, i;
+ register int seq = 0;
+ int tos = 0, settos = 0;
+ register int lsrr = 0;
+ register u_short off = 0;
+ struct ifaddrlist *al;
+ char errbuf[132];
+ int minpacket = 0; /* min ip packet size */
+
+
+ struct ip *outip; /* last output (udp) packet */
+ struct udphdr *outudp; /* last output (udp) packet */
+ int packlen = 0; /* total length of packet */
+ int optlen = 0; /* length of ip options */
+ int options = 0; /* socket options */
+ int s; /* receive (icmp) socket file descriptor */
+ int sndsock; /* send (udp/icmp) socket file descriptor */
+
+ u_short ident;
+ /*
+ * loose source route gateway list (including room for final destination)
+ */
+ u_int32_t gwlist[NGATEWAYS + 1];
+ static const char devnull[] = "/dev/null";
+ char *device = NULL;
+ char *source = NULL;
+ char *hostname;
+ u_int pausemsecs = 0;
+ u_char packet[512]; /* last inbound (icmp) packet */
+
+ int pmtu = 0; /* Path MTU Discovery (RFC1191) */
+
+ struct outdata *outdata; /* last output (udp) packet */
+
+ minpacket = sizeof(*outip) + sizeof(*outdata) + optlen;
+ minpacket += sizeof(*outudp);
+ packlen = minpacket; /* minimum sized packet */
+
+ hostname =
+ (char *) malloc(item->traceRouteCtlTargetAddressLen + 1);
+ if (hostname == NULL)
+ return;
+ memcpy(hostname, item->traceRouteCtlTargetAddress,
+ item->traceRouteCtlTargetAddressLen + 1);
+ hostname[item->traceRouteCtlTargetAddressLen] = '\0';
+
+ hi = gethostinfo(hostname);
+ setsin(to, hi->addrs[0]);
+ if (hi->n > 1)
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "Warning: %s has multiple addresses; using %s\n",
+ hostname, inet_ntoa(to->sin_addr)));
+ hostname = hi->name;
+ hi->name = NULL;
+ freehostinfo(hi);
+
+
+#ifdef HAVE_SETLINEBUF
+ setlinebuf(stdout);
+#else
+ setvbuf(stdout, NULL, _IOLBF, 0);
+#endif
+
+ outip = (struct ip *) malloc(packlen);
+ if (outip == NULL) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "malloc: %s\n", strerror(errno)));
+ exit(1);
+ }
+ memset((char *) outip, 0, packlen);
+
+ outip->ip_v = IPVERSION;
+ if (settos)
+ outip->ip_tos = tos;
+#ifdef BYTESWAP_IP_HDR
+ outip->ip_len = htons(packlen);
+ outip->ip_off = htons(off);
+#else
+ outip->ip_len = packlen;
+ outip->ip_off = off;
+#endif
+ outp = (u_char *) (outip + 1);
+#ifdef HAVE_RAW_OPTIONS
+ if (lsrr > 0) {
+ register u_char *optlist;
+
+ optlist = outp;
+ outp += optlen;
+
+ /*
+ * final hop
+ */
+ gwlist[lsrr] = to->sin_addr.s_addr;
+
+ outip->ip_dst.s_addr = gwlist[0];
+
+ /*
+ * force 4 byte alignment
+ */
+ optlist[0] = IPOPT_NOP;
+ /*
+ * loose source route option
+ */
+ optlist[1] = IPOPT_LSRR;
+ i = lsrr * sizeof(gwlist[0]);
+ optlist[2] = i + 3;
+ /*
+ * Pointer to LSRR addresses
+ */
+ optlist[3] = IPOPT_MINOFF;
+ memcpy(optlist + 4, gwlist + 1, i);
+ } else
+#endif
+ outip->ip_dst = to->sin_addr;
+ outip->ip_hl = (outp - (u_char *) outip) >> 2;
+ ident = (getpid() & 0xffff) | 0x8000;
+
+ outip->ip_p = IPPROTO_UDP;
+
+ outudp = (struct udphdr *) outp;
+ outudp->source = htons(ident);
+ outudp->len =
+ htons((u_short) (packlen - (sizeof(*outip) + optlen)));
+ outdata = (struct outdata *) (outudp + 1);
+
+ cp = "icmp";
+ if ((pe = getprotobyname(cp)) == NULL) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "unknown protocol %s\n", cp));
+ exit(1);
+ }
+
+ /*
+ * Insure the socket fds won't be 0, 1 or 2
+ */
+ if (open(devnull, O_RDONLY) < 0 ||
+ open(devnull, O_RDONLY) < 0 || open(devnull, O_RDONLY) < 0) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "open \"%s\": %s\n", devnull, strerror(errno)));
+ exit(1);
+ }
+ if ((s = socket(AF_INET, SOCK_RAW, pe->p_proto)) < 0) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "icmp socket: %s\n", strerror(errno)));
+ exit(1);
+ }
+ if (options & SO_DEBUG)
+ (void) setsockopt(s, SOL_SOCKET, SO_DEBUG, (char *) &on,
+ sizeof(on));
+ if (options & SO_DONTROUTE)
+ (void) setsockopt(s, SOL_SOCKET, SO_DONTROUTE, (char *) &on,
+ sizeof(on));
+#ifndef __hpux
+ printf("raw\n");
+ sndsock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
+#else
+ printf("udp\n");
+ sndsock = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
+#endif
+ if (sndsock < 0) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "raw socket: %s\n", strerror(errno)));
+ exit(1);
+ }
+#if defined(IP_OPTIONS) && !defined(HAVE_RAW_OPTIONS)
+ if (lsrr > 0) {
+ u_char optlist[MAX_IPOPTLEN];
+
+ cp = "ip";
+ if ((pe = getprotobyname(cp)) == NULL) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "unknown protocol %s\n", cp));
+ exit(1);
+ }
+ /*
+ * final hop
+ */
+ gwlist[lsrr] = to->sin_addr.s_addr;
+ ++lsrr;
+
+ /*
+ * force 4 byte alignment
+ */
+ optlist[0] = IPOPT_NOP;
+ /*
+ * loose source route option
+ */
+ optlist[1] = IPOPT_LSRR;
+ i = lsrr * sizeof(gwlist[0]);
+ optlist[2] = i + 3;
+ /*
+ * Pointer to LSRR addresses
+ */
+ optlist[3] = IPOPT_MINOFF;
+ memcpy(optlist + 4, gwlist, i);
+
+ if ((setsockopt(sndsock, pe->p_proto, IP_OPTIONS,
+ (char *) optlist,
+ i + sizeof(gwlist[0]))) < 0) {
+ DEBUGMSGTL(("traceRouteCtlTable", "IP_OPTIONS: %s\n",
+ strerror(errno)));
+ exit(1);
+ }
+ }
+#endif
+#ifdef SO_SNDBUF
+ if (setsockopt(sndsock, SOL_SOCKET, SO_SNDBUF, (char *) &packlen,
+ sizeof(packlen)) < 0) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "SO_SNDBUF: %s\n", strerror(errno)));
+ exit(1);
+ }
+#endif
+#ifdef IP_HDRINCL
+ if (setsockopt(sndsock, IPPROTO_IP, IP_HDRINCL, (char *) &on,
+ sizeof(on)) < 0) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "IP_HDRINCL: %s\n", strerror(errno)));
+ exit(1);
+ }
+#else
+#ifdef IP_TOS
+ if (settos && setsockopt(sndsock, IPPROTO_IP, IP_TOS,
+ (char *) &tos, sizeof(tos)) < 0) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ "setsockopt tos %d: %s\n", strerror(errno)));
+ exit(1);
+ }
+#endif
+#endif
+ if (options & SO_DEBUG)
+ (void) setsockopt(sndsock, SOL_SOCKET, SO_DEBUG, (char *) &on,
+ sizeof(on));
+ if (options & SO_DONTROUTE)
+ (void) setsockopt(sndsock, SOL_SOCKET, SO_DONTROUTE,
+ (char *) &on, sizeof(on));
+ /*
+ * Get the interface address list
+ */
+ n = ifaddrlist(&al, errbuf);
+ if (n < 0) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ " ifaddrlist: %s\n", errbuf));
+ exit(1);
+ }
+ if (n == 0) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ " Can't find any network interfaces\n"));
+
+ exit(1);
+ }
+
+ /*
+ * Look for a specific device
+ */
+ if (device != NULL) {
+ for (i = n; i > 0; --i, ++al)
+ if (strcmp(device, al->device) == 0)
+ break;
+ if (i <= 0) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ " Can't find interface %.32s\n", device));
+
+ exit(1);
+ }
+ }
+ /*
+ * Determine our source address
+ */
+ if (source == NULL) {
+ /*
+ * If a device was specified, use the interface address.
+ * Otherwise, try to determine our source address.
+ */
+ if (device != NULL)
+ setsin(from, al->addr);
+ else if ((err = findsaddr(to, from)) != NULL) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ " findsaddr: %s\n", err));
+ exit(1);
+ }
+
+ } else {
+ hi = gethostinfo(source);
+ source = hi->name;
+ hi->name = NULL;
+ /*
+ * If the device was specified make sure it
+ * corresponds to the source address specified.
+ * Otherwise, use the first address (and warn if
+ * there are more than one).
+ */
+ if (device != NULL) {
+ for (i = hi->n, ap = hi->addrs; i > 0; --i, ++ap)
+ if (*ap == al->addr)
+ break;
+ if (i <= 0) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ " %s is not on interface %.32s\n",
+ source, device));
+
+ exit(1);
+ }
+ setsin(from, *ap);
+ } else {
+ setsin(from, hi->addrs[0]);
+ if (hi->n > 1)
+ DEBUGMSGTL(("traceRouteCtlTable",
+ " Warning: %s has multiple addresses; using %s\n",
+ source, inet_ntoa(from->sin_addr)));
+
+ }
+ freehostinfo(hi);
+ }
+ /*
+ * Revert to non-privileged user after opening sockets
+ */
+ setgid(getgid());
+ setuid(getuid());
+
+ outip->ip_src = from->sin_addr;
+#ifndef IP_HDRINCL
+ if (bind(sndsock, (struct sockaddr *) from, sizeof(*from)) < 0) {
+ DEBUGMSGTL(("traceRouteCtlTable",
+ " bind: %s\n", strerror(errno)));
+ exit(1);
+ }
+#endif
+ DEBUGMSGTL(("traceRouteCtlTable",
+ " to %s (%s)", hostname, inet_ntoa(to->sin_addr)));
+
+ if (source)
+ DEBUGMSGTL(("traceRouteCtlTable", " from %s", source));
+
+ DEBUGMSGTL(("traceRouteCtlTable",
+ ", %d hops max, %d byte packets\n",
+ item->traceRouteCtlMaxTtl, packlen));
+ (void) fflush(stderr);
+
+ struct traceRouteResultsTable_data *StorageResults = NULL;
+ netsnmp_variable_list *vars_results = NULL;
+
+ struct traceRouteHopsTable_data *StorageHops = NULL;
+ struct traceRouteHopsTable_data *temp = NULL;
+ struct traceRouteHopsTable_data *current_temp = NULL;
+ struct traceRouteHopsTable_data *current = NULL;
+
+ unsigned long index = 0;
+
+ struct traceRouteProbeHistoryTable_data *StorageProbe = NULL;
+ struct traceRouteProbeHistoryTable_data *temp_his = NULL;
+ struct traceRouteProbeHistoryTable_data *current_temp_his = NULL;
+ netsnmp_variable_list *vars_probe = NULL;
+
+ snmp_varlist_add_variable(&vars_results, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlOwnerIndex, item->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_results, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlTestName, item->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+ if ((StorageResults =
+ header_complex_get(traceRouteResultsTableStorage,
+ vars_results)) == NULL)
+ return;
+ snmp_free_varbind(vars_results);
+ vars_results = NULL;
+
+
+ for (ttl = item->traceRouteCtlInitialTtl;
+ ttl <= item->traceRouteCtlMaxTtl; ++ttl) {
+
+ u_int32_t lastaddr = 0;
+ int gotlastaddr = 0;
+ int got_there = 0;
+ int unreachable = 0;
+ int sentfirst = 0;
+ time_t timep = 0;
+
+ StorageResults->traceRouteResultsCurHopCount = ttl;
+ if (item->traceRouteCtlCreateHopsEntries == 1) {
+ if (ttl == item->traceRouteCtlInitialTtl) {
+ int k = 0;
+ count = traceRouteHopsTable_count(item);
+
+
+ struct traceRouteHopsTable_data *StorageTmp = NULL;
+ struct header_complex_index *hciptr2 = NULL;
+ netsnmp_variable_list *vars = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlOwnerIndex, item->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlTestName, item->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+
+ header_complex_generate_oid(newoid, &newoid_len, NULL,
+ 0, vars);
+
+ for (hciptr2 = traceRouteHopsTableStorage;
+ hciptr2 != NULL; hciptr2 = hciptr2->next) {
+ if (snmp_oid_compare
+ (newoid, newoid_len, hciptr2->name,
+ newoid_len) == 0) {
+ StorageTmp =
+ header_complex_extract_entry
+ (&traceRouteHopsTableStorage, hciptr2);
+
+ old_HopsAddress[k] =
+ (char *) malloc(StorageTmp->
+ traceRouteHopsIpTgtAddressLen
+ + 1);
+ if (old_HopsAddress[k] == NULL) {
+ exit(1);
+ }
+ memdup((u_char **) & old_HopsAddress[k],
+ StorageTmp->traceRouteHopsIpTgtAddress,
+ StorageTmp->
+ traceRouteHopsIpTgtAddressLen + 1);
+ old_HopsAddress[k][StorageTmp->
+ traceRouteHopsIpTgtAddressLen]
+ = '\0';
+
+ k++;
+ StorageTmp = NULL;
+ }
+ }
+ traceRouteHopsTable_del(item);
+ index = 0;
+ }
+
+ temp = SNMP_MALLOC_STRUCT(traceRouteHopsTable_data);
+ temp->traceRouteCtlOwnerIndex =
+ (char *) malloc(item->traceRouteCtlOwnerIndexLen + 1);
+ memcpy(temp->traceRouteCtlOwnerIndex,
+ item->traceRouteCtlOwnerIndex,
+ item->traceRouteCtlOwnerIndexLen + 1);
+ temp->traceRouteCtlOwnerIndex[item->
+ traceRouteCtlOwnerIndexLen] =
+ '\0';
+ temp->traceRouteCtlOwnerIndexLen =
+ item->traceRouteCtlOwnerIndexLen;
+
+ temp->traceRouteCtlTestName =
+ (char *) malloc(item->traceRouteCtlTestNameLen + 1);
+ memcpy(temp->traceRouteCtlTestName,
+ item->traceRouteCtlTestName,
+ item->traceRouteCtlTestNameLen + 1);
+ temp->traceRouteCtlTestName[item->
+ traceRouteCtlTestNameLen] =
+ '\0';
+ temp->traceRouteCtlTestNameLen =
+ item->traceRouteCtlTestNameLen;
+
+ /* add lock to protect */
+ pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;
+ pthread_mutex_lock(&counter_mutex);
+ temp->traceRouteHopsHopIndex = ++index;
+ pthread_mutex_unlock(&counter_mutex);
+ /* endsadsadsad */
+
+
+ temp->traceRouteHopsIpTgtAddressType = 0;
+ temp->traceRouteHopsIpTgtAddress = strdup("");
+ temp->traceRouteHopsIpTgtAddressLen = 0;
+ temp->traceRouteHopsMinRtt = 0;
+ temp->traceRouteHopsMaxRtt = 0;
+ temp->traceRouteHopsAverageRtt = 0;
+ temp->traceRouteHopsRttSumOfSquares = 0;
+ temp->traceRouteHopsSentProbes = 0;
+ temp->traceRouteHopsProbeResponses = 0;
+
+ temp->traceRouteHopsLastGoodProbe = strdup("");
+ temp->traceRouteHopsLastGoodProbeLen = 0;
+ if (index == 1)
+ item->traceRouteHops = temp;
+ else {
+ (current_temp)->next = temp;
+ }
+
+ current_temp = temp;
+
+ if (index + 1 >= item->traceRouteCtlMaxTtl) {
+ current_temp->next = NULL;
+ }
+
+ if (item->traceRouteHops != NULL)
+
+ if (traceRouteHopsTable_add(current_temp) !=
+ SNMPERR_SUCCESS)
+ DEBUGMSGTL(("traceRouteHopsTable",
+ "registered an entry error\n"));
+
+ }
+ register unsigned long maxRtt = 0;
+ register unsigned long minRtt = 0;
+ register unsigned long averageRtt = 0;
+ register unsigned long sumRtt = 0;
+ register unsigned long responseProbe = 0;
+ register unsigned long sumOfSquare = 0;
+ for (probe = 0; probe < nprobes; ++probe) {
+ register int cc;
+ struct timeval t1, t2;
+ struct timezone tz;
+ register struct ip *ip = NULL;
+ register unsigned long Rtt = 0;
+
+ if (sentfirst && pausemsecs > 0)
+ usleep(pausemsecs * 1000);
+ (void) gettimeofday(&t1, &tz);
+ send_probe(to, ++seq, ttl, &t1, outip, outudp, packlen,
+ optlen, hostname, ident, sndsock, port,
+ outdata);
+ ++sentfirst;
+ while ((cc =
+ wait_for_reply(s, from, &t1, packet,
+ waittime)) != 0) {
+ (void) gettimeofday(&t2, &tz);
+ timep = 0;
+ time(&timep);
+ i = packet_ok(packet, cc, from, seq, ident, pmtu,
+ port);
+ /*
+ * Skip short packet
+ */
+ if (i == 0)
+ continue;
+ if (!gotlastaddr || from->sin_addr.s_addr != lastaddr) {
+ register struct ip *ip;
+ register int hlen;
+ ip = (struct ip *) packet;
+ hlen = ip->ip_hl << 2;
+ cc -= hlen;
+ DEBUGMSGTL(("traceRouteCtlTable",
+ " %s", inet_ntoa(from->sin_addr)));
+
+
+ lastaddr = from->sin_addr.s_addr;
+ ++gotlastaddr;
+ }
+ Rtt = deltaT(&t1, &t2);
+ responseProbe = responseProbe + 1;
+ if (probe == 0) {
+ minRtt = Rtt;
+ maxRtt = Rtt;
+ averageRtt = Rtt;
+ sumRtt = Rtt;
+ sumOfSquare = Rtt * Rtt;
+ } else {
+ if (Rtt < minRtt)
+ minRtt = Rtt;
+ if (Rtt > maxRtt)
+ maxRtt = Rtt;
+ sumRtt = (sumRtt) + Rtt;
+ averageRtt =
+ round((double) (sumRtt) /
+ (double) responseProbe);
+ sumOfSquare = sumOfSquare + Rtt * Rtt;
+ }
+
+ StorageResults->traceRouteResultsCurProbeCount =
+ probe + 1;
+ if (i == -2) {
+#ifndef ARCHAIC
+ ip = (struct ip *) packet;
+ if (ip->ip_ttl <= 1)
+ Printf(" !");
+#endif
+ ++got_there;
+ break;
+ }
+ /*
+ * time exceeded in transit
+ */
+ if (i == -1)
+ break;
+ code = i - 1;
+ switch (code) {
+
+ case ICMP_UNREACH_PORT:
+#ifndef ARCHAIC
+ ip = (struct ip *) packet;
+ if (ip->ip_ttl <= 1)
+ Printf(" !");
+#endif
+ ++got_there;
+ break;
+
+ case ICMP_UNREACH_NET:
+ ++unreachable;
+ Printf(" !N");
+ break;
+
+ case ICMP_UNREACH_HOST:
+ ++unreachable;
+ Printf(" !H");
+ break;
+
+ case ICMP_UNREACH_PROTOCOL:
+ ++got_there;
+ Printf(" !P");
+ break;
+
+ case ICMP_UNREACH_NEEDFRAG:
+ ++unreachable;
+ Printf(" !F-%d", pmtu);
+ break;
+
+ case ICMP_UNREACH_SRCFAIL:
+ ++unreachable;
+ Printf(" !S");
+ break;
+
+ case ICMP_UNREACH_FILTER_PROHIB:
+ ++unreachable;
+ Printf(" !X");
+ break;
+
+ case ICMP_UNREACH_HOST_PRECEDENCE:
+ ++unreachable;
+ Printf(" !V");
+ break;
+
+ case ICMP_UNREACH_PRECEDENCE_CUTOFF:
+ ++unreachable;
+ Printf(" !C");
+ break;
+
+ default:
+ ++unreachable;
+ Printf(" !<%d>", code);
+ break;
+ }
+ break;
+ }
+ if (cc == 0) {
+ timep = 0;
+ time(&timep);
+ Printf(" *");
+ Rtt = (item->traceRouteCtlTimeOut) * 1000;
+ }
+ if (item->traceRouteCtlMaxRows != 0) {
+
+ temp_his =
+ SNMP_MALLOC_STRUCT
+ (traceRouteProbeHistoryTable_data);
+ temp_his->traceRouteCtlOwnerIndex =
+ (char *) malloc(item->traceRouteCtlOwnerIndexLen +
+ 1);
+ memcpy(temp_his->traceRouteCtlOwnerIndex,
+ item->traceRouteCtlOwnerIndex,
+ item->traceRouteCtlOwnerIndexLen + 1);
+ temp_his->traceRouteCtlOwnerIndex[item->
+ traceRouteCtlOwnerIndexLen]
+ = '\0';
+ temp_his->traceRouteCtlOwnerIndexLen =
+ item->traceRouteCtlOwnerIndexLen;
+
+ temp_his->traceRouteCtlTestName =
+ (char *) malloc(item->traceRouteCtlTestNameLen +
+ 1);
+ memcpy(temp_his->traceRouteCtlTestName,
+ item->traceRouteCtlTestName,
+ item->traceRouteCtlTestNameLen + 1);
+ temp_his->traceRouteCtlTestName[item->
+ traceRouteCtlTestNameLen]
+ = '\0';
+ temp_his->traceRouteCtlTestNameLen =
+ item->traceRouteCtlTestNameLen;
+
+ /* add lock to protect */
+ pthread_mutex_t counter_mutex =
+ PTHREAD_MUTEX_INITIALIZER;
+ pthread_mutex_lock(&counter_mutex);
+ if (item->traceRouteProbeHistoryMaxIndex >=
+ (unsigned long) (2147483647))
+ item->traceRouteProbeHistoryMaxIndex = 0;
+ temp_his->traceRouteProbeHistoryIndex =
+ ++(item->traceRouteProbeHistoryMaxIndex);
+ pthread_mutex_unlock(&counter_mutex);
+ /* endsadsadsad */
+ temp_his->traceRouteProbeHistoryHopIndex = ttl;
+ temp_his->traceRouteProbeHistoryProbeIndex = probe + 1;
+
+ temp_his->traceRouteProbeHistoryHAddrType = 1;
+ temp_his->traceRouteProbeHistoryHAddr =
+ (char *) malloc(strlen(inet_ntoa(from->sin_addr)) +
+ 1);
+ strcpy(temp_his->traceRouteProbeHistoryHAddr,
+ (inet_ntoa(from->sin_addr)));
+ temp_his->
+ traceRouteProbeHistoryHAddr[strlen
+ (inet_ntoa
+ (from->sin_addr))] =
+ '\0';
+ temp_his->traceRouteProbeHistoryHAddrLen =
+ strlen(inet_ntoa(from->sin_addr));
+
+ temp_his->traceRouteProbeHistoryResponse = Rtt;
+ temp_his->traceRouteProbeHistoryStatus = 1;
+ temp_his->traceRouteProbeHistoryLastRC = 0;
+
+ temp_his->traceRouteProbeHistoryTime =
+ (char *) malloc(strlen(asctime(gmtime(&timep))));
+ temp_his->traceRouteProbeHistoryTime =
+ strdup(asctime(gmtime(&timep)));
+ temp_his->
+ traceRouteProbeHistoryTime[strlen
+ (asctime
+ (gmtime(&timep))) -
+ 1] = '\0';
+ temp_his->traceRouteProbeHistoryTimeLen =
+ strlen(asctime(gmtime(&timep))) - 1;
+ if (probe == 0)
+ item->traceRouteProbeHis = temp_his;
+ else {
+ (current_temp_his)->next = temp_his;
+ }
+
+ current_temp_his = temp_his;
+
+ if (probe + 1 >= nprobes) {
+ current_temp_his->next = NULL;
+
+ }
+
+ if (item->traceRouteProbeHis != NULL)
+ if (traceRouteProbeHistoryTable_count(item) <
+ item->traceRouteCtlMaxRows) {
+ if (traceRouteProbeHistoryTable_add
+ (current_temp_his) != SNMPERR_SUCCESS)
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "registered an entry error\n"));
+ } else {
+ traceRouteProbeHistoryTable_delLast(item);
+ if (traceRouteProbeHistoryTable_add
+ (current_temp_his) != SNMPERR_SUCCESS)
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "registered an entry error\n"));
+
+ }
+
+
+ }
+
+ if (item->traceRouteCtlCreateHopsEntries == 1) {
+ netsnmp_variable_list *vars_hops = NULL;
+ snmp_varlist_add_variable(&vars_hops, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlOwnerIndex, item->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_hops, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlTestName, item->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+ snmp_varlist_add_variable(&vars_hops, NULL, 0, ASN_UNSIGNED, (char *) &index, sizeof(index)); /* traceRouteHopsIndex */
+ if ((current =
+ header_complex_get(traceRouteHopsTableStorage,
+ vars_hops)) == NULL)
+ return;
+ snmp_free_varbind(vars_hops);
+ vars_hops = NULL;
+
+ current->traceRouteHopsIpTgtAddressType = 1;
+ current->traceRouteHopsIpTgtAddress =
+ (char *) malloc(strlen(inet_ntoa(from->sin_addr)) +
+ 1);
+ current->traceRouteHopsIpTgtAddress =
+ strdup(inet_ntoa(from->sin_addr));
+ current->
+ traceRouteHopsIpTgtAddress[strlen
+ (inet_ntoa
+ (from->sin_addr))] =
+ '\0';
+ current->traceRouteHopsIpTgtAddressLen =
+ strlen(inet_ntoa(from->sin_addr));
+ if (count != 0) {
+ if (strcmp
+ (old_HopsAddress[index - 1],
+ current->traceRouteHopsIpTgtAddress) != 0)
+ flag = 1;
+ }
+
+ current->traceRouteHopsIpTgtAddressLen =
+ strlen(inet_ntoa(from->sin_addr));
+ current->traceRouteHopsMinRtt = minRtt;
+ current->traceRouteHopsMaxRtt = maxRtt;
+ current->traceRouteHopsAverageRtt = averageRtt;
+ current->traceRouteHopsRttSumOfSquares = sumOfSquare;
+ current->traceRouteHopsSentProbes = probe + 1;
+ current->traceRouteHopsProbeResponses = responseProbe;
+ current->traceRouteHopsLastGoodProbe =
+ (char *) malloc(strlen(asctime(gmtime(&timep))));
+ current->traceRouteHopsLastGoodProbe =
+ strdup(asctime(gmtime(&timep)));
+ current->
+ traceRouteHopsLastGoodProbe[strlen
+ (asctime
+ (gmtime(&timep))) -
+ 1] = '\0';
+ current->traceRouteHopsLastGoodProbeLen =
+ strlen(asctime(gmtime(&timep))) - 1;
+
+ }
+
+ (void) fflush(stdout);
+ }
+ putchar('\n');
+
+
+ if (got_there
+ || (unreachable > 0 && unreachable >= nprobes - 1)) {
+
+ if (got_there != 0) {
+ StorageResults->traceRouteResultsTestAttempts =
+ StorageResults->traceRouteResultsTestAttempts + 1;
+
+ StorageResults->traceRouteResultsTestSuccesses =
+ StorageResults->traceRouteResultsTestSuccesses + 1;
+
+ StorageResults->traceRouteResultsLastGoodPath =
+ (char *) malloc(strlen(asctime(gmtime(&timep))) -
+ 1);
+ StorageResults->traceRouteResultsLastGoodPath =
+ strdup(asctime(gmtime(&timep)));
+ StorageResults->
+ traceRouteResultsLastGoodPath[strlen
+ (asctime
+ (gmtime(&timep))) -
+ 1] = '\0';
+ StorageResults->traceRouteResultsLastGoodPathLen =
+ strlen(asctime(gmtime(&timep))) - 1;
+ if ((item->
+ traceRouteCtlTrapGeneration[0] &
+ TRACEROUTETRAPGENERATION_TESTCOMPLETED) != 0) {
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "TEST completed!\n"));
+ send_traceRoute_trap(item, traceRouteTestCompleted,
+ sizeof
+ (traceRouteTestCompleted) /
+ sizeof(oid));
+ }
+ }
+
+ else {
+ StorageResults->traceRouteResultsTestAttempts =
+ StorageResults->traceRouteResultsTestAttempts + 1;
+ if ((item->
+ traceRouteCtlTrapGeneration[0] &
+ TRACEROUTETRAPGENERATION_TESTFAILED) != 0) {
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "test Failed!\n"));
+ send_ping_trap(item, traceRouteTestFailed,
+ sizeof(traceRouteTestFailed) /
+ sizeof(oid));
+ }
+ }
+ break;
+
+ } else if (ttl == item->traceRouteCtlMaxTtl
+ && (probe + 1) == nprobes) {
+ StorageResults->traceRouteResultsTestAttempts =
+ StorageResults->traceRouteResultsTestAttempts + 1;
+
+ if ((item->
+ traceRouteCtlTrapGeneration[0] &
+ TRACEROUTETRAPGENERATION_TESTFAILED) != 0) {
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "test Failed!\n"));
+ send_ping_trap(item, traceRouteTestFailed,
+ sizeof(traceRouteTestFailed) /
+ sizeof(oid));
+ }
+ }
+
+ }
+
+ if (flag == 1) {
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "path changed!\n"));
+ send_traceRoute_trap(item, traceRoutePathChange,
+ sizeof(traceRoutePathChange) /
+ sizeof(oid));
+ }
+
+ int k = 0;
+ for (k = 0; k < count; k++) {
+ free(old_HopsAddress[k]);
+ old_HopsAddress[k] = NULL;
+ }
+ }
+ if (item->traceRouteCtlTargetAddressType == 2) {
+ static char SNAPSHOT[] = "020124";
+ int icmp_sock = 0; /* receive (icmp) socket file descriptor */
+ int sndsock = 0; /* send (udp) socket file descriptor */
+ struct timezone tz; /* leftover */
+
+ struct sockaddr_in6 whereto; /* Who to try to reach */
+
+ struct sockaddr_in6 saddr;
+ struct sockaddr_in6 firsthop;
+ char *source = NULL;
+ char *device = NULL;
+ char *hostname = NULL;
+
+ pid_t ident = 0;
+ u_short port = 32768 + 666; /* start udp dest port # for probe packets */
+ int options = 0; /* socket options */
+ int verbose = 0;
+ int waittime = 5; /* time to wait for response (in seconds) */
+ int nflag = 0; /* print addresses numerically */
+
+ char *sendbuff = NULL;
+ int datalen = sizeof(struct pkt_format);
+
+ u_char packet[512]; /* last inbound (icmp) packet */
+
+ char pa[64];
+ struct hostent *hp = NULL;
+ struct sockaddr_in6 from, *to = NULL;
+ int ch = 0, i = 0, on = 0, probe = 0, seq = 0, tos =
+ 0, ttl = 0;
+ int socket_errno = 0;
+
+ icmp_sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
+ socket_errno = errno;
+
+ setuid(getuid());
+
+ on = 1;
+ seq = tos = 0;
+ to = (struct sockaddr_in6 *) &whereto;
+
+ hostname =
+ (char *) malloc(item->traceRouteCtlTargetAddressLen + 1);
+ memcpy(hostname, item->traceRouteCtlTargetAddress,
+ item->traceRouteCtlTargetAddressLen + 1);
+ hostname[item->traceRouteCtlTargetAddressLen] = '\0';
+
+ setlinebuf(stdout);
+
+ (void) bzero((char *) &whereto, sizeof(struct sockaddr_in6));
+
+ to->sin6_family = AF_INET6;
+ to->sin6_port = htons(port);
+
+ if (inet_pton(AF_INET6, hostname, &to->sin6_addr) > 0) {
+ NULL;
+ } else {
+ hp = gethostbyname2(hostname, AF_INET6);
+ if (hp != NULL) {
+ memmove((caddr_t) & to->sin6_addr, hp->h_addr, 16);
+ hostname = (char *) hp->h_name;
+ } else {
+ (void) fprintf(stderr,
+ "traceroute: unknown host %s\n", hostname);
+ return;
+ }
+ }
+ firsthop = *to;
+
+ datalen = item->traceRouteCtlDataSize;
+ if (datalen < (int) sizeof(struct pkt_format)
+ || datalen >= MAXPACKET) {
+ Fprintf(stderr,
+ "traceroute: packet size must be %d <= s < %d.\n",
+ (int) sizeof(struct pkt_format), MAXPACKET);
+ datalen = 16;
+ }
+
+ ident = getpid();
+
+ sendbuff = malloc(datalen);
+ if (sendbuff == NULL) {
+ fprintf(stderr, "malloc failed\n");
+ return;
+ }
+
+ if (icmp_sock < 0) {
+ errno = socket_errno;
+ perror("traceroute6: icmp socket");
+ return;
+ }
+
+ if (options & SO_DEBUG)
+ setsockopt(icmp_sock, SOL_SOCKET, SO_DEBUG,
+ (char *) &on, sizeof(on));
+ if (options & SO_DONTROUTE)
+ setsockopt(icmp_sock, SOL_SOCKET, SO_DONTROUTE,
+ (char *) &on, sizeof(on));
+
+ if ((sndsock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
+ perror("traceroute: UDP socket");
+ return;
+ }
+#ifdef SO_SNDBUF
+ if (setsockopt(sndsock, SOL_SOCKET, SO_SNDBUF, (char *) &datalen,
+ sizeof(datalen)) < 0) {
+ perror("traceroute: SO_SNDBUF");
+ return;
+ }
+#endif /* SO_SNDBUF */
+
+ if (options & SO_DEBUG)
+ (void) setsockopt(sndsock, SOL_SOCKET, SO_DEBUG,
+ (char *) &on, sizeof(on));
+ if (options & SO_DONTROUTE)
+ (void) setsockopt(sndsock, SOL_SOCKET, SO_DONTROUTE,
+ (char *) &on, sizeof(on));
+
+ if (source == NULL) {
+ int alen;
+ int probe_fd = socket(AF_INET6, SOCK_DGRAM, 0);
+
+ if (probe_fd < 0) {
+ perror("socket");
+ return;
+ }
+ if (device) {
+ if (setsockopt
+ (probe_fd, SOL_SOCKET, SO_BINDTODEVICE, device,
+ strlen(device) + 1) == -1)
+ perror("WARNING: interface is ignored");
+ }
+ firsthop.sin6_port = htons(1025);
+ if (connect
+ (probe_fd, (struct sockaddr *) &firsthop,
+ sizeof(firsthop)) == -1) {
+ perror("connect");
+ return;
+ }
+ alen = sizeof(saddr);
+ if (getsockname(probe_fd, (struct sockaddr *) &saddr, &alen) ==
+ -1) {
+ perror("getsockname");
+ return;
+ }
+ saddr.sin6_port = 0;
+ close(probe_fd);
+ } else {
+ (void) bzero((char *) &saddr, sizeof(struct sockaddr_in6));
+ saddr.sin6_family = AF_INET6;
+ if (inet_pton(AF_INET6, source, &saddr.sin6_addr) < 0) {
+ Printf("traceroute: unknown addr %s\n", source);
+ return;
+ }
+ }
+
+ if (bind(sndsock, (struct sockaddr *) &saddr, sizeof(saddr)) < 0) {
+ perror("traceroute: bind sending socket");
+ return;
+ }
+ if (bind(icmp_sock, (struct sockaddr *) &saddr, sizeof(saddr)) < 0) {
+ perror("traceroute: bind icmp6 socket");
+ return;
+ }
+
+ Fprintf(stderr, "traceroute to %s (%s)", hostname,
+ inet_ntop(AF_INET6, &to->sin6_addr, pa, 64));
+
+ Fprintf(stderr, " from %s",
+ inet_ntop(AF_INET6, &saddr.sin6_addr, pa, 64));
+ Fprintf(stderr, ", %d hops max, %d byte packets\n",
+ item->traceRouteCtlMaxTtl, datalen);
+ (void) fflush(stderr);
+
+
+ struct traceRouteResultsTable_data *StorageResults = NULL;
+ netsnmp_variable_list *vars_results = NULL;
+
+ struct traceRouteHopsTable_data *StorageHops = NULL;
+ struct traceRouteHopsTable_data *temp = NULL;
+ struct traceRouteHopsTable_data *current_temp = NULL;
+ struct traceRouteHopsTable_data *current = NULL;
+
+ unsigned long index = 0;
+
+ struct traceRouteProbeHistoryTable_data *StorageProbe = NULL;
+ struct traceRouteProbeHistoryTable_data *temp_his = NULL;
+ struct traceRouteProbeHistoryTable_data *current_temp_his = NULL;
+ netsnmp_variable_list *vars_probe = NULL;
+
+ snmp_varlist_add_variable(&vars_results, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlOwnerIndex, item->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_results, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlTestName, item->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+ if ((StorageResults =
+ header_complex_get(traceRouteResultsTableStorage,
+ vars_results)) == NULL)
+ return;
+ snmp_free_varbind(vars_results);
+ vars_results = NULL;
+
+ for (ttl = item->traceRouteCtlInitialTtl;
+ ttl <= item->traceRouteCtlMaxTtl; ++ttl) {
+ struct in6_addr lastaddr = { {{0,}} };
+ int got_there = 0;
+ int unreachable = 0;
+ time_t timep = 0;
+ Printf("%2d ", ttl);
+
+
+ StorageResults->traceRouteResultsCurHopCount = ttl;
+ if (item->traceRouteCtlCreateHopsEntries == 1) {
+ if (ttl == item->traceRouteCtlInitialTtl) {
+
+ int k = 0;
+ count = traceRouteHopsTable_count(item);
+ struct traceRouteHopsTable_data *StorageTmp = NULL;
+ struct header_complex_index *hciptr2 = NULL;
+ netsnmp_variable_list *vars = NULL;
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len;
+
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlOwnerIndex, item->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlTestName, item->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+
+ header_complex_generate_oid(newoid, &newoid_len, NULL,
+ 0, vars);
+
+ snmp_free_varbind(vars);
+ vars = NULL;
+
+ for (hciptr2 = traceRouteHopsTableStorage;
+ hciptr2 != NULL; hciptr2 = hciptr2->next) {
+ if (snmp_oid_compare
+ (newoid, newoid_len, hciptr2->name,
+ newoid_len) == 0) {
+ StorageTmp =
+ header_complex_extract_entry
+ (&traceRouteHopsTableStorage, hciptr2);
+
+ old_HopsAddress[k] =
+ (char *) malloc(StorageTmp->
+ traceRouteHopsIpTgtAddressLen
+ + 1);
+ if (old_HopsAddress[k] == NULL) {
+ exit(1);
+ }
+ memdup((u_char **) & old_HopsAddress[k],
+ StorageTmp->traceRouteHopsIpTgtAddress,
+ StorageTmp->
+ traceRouteHopsIpTgtAddressLen + 1);
+ old_HopsAddress[k][StorageTmp->
+ traceRouteHopsIpTgtAddressLen]
+ = '\0';
+
+ k++;
+ }
+ }
+ traceRouteHopsTable_del(item);
+ index = 0;
+ }
+
+ temp = SNMP_MALLOC_STRUCT(traceRouteHopsTable_data);
+ temp->traceRouteCtlOwnerIndex =
+ (char *) malloc(item->traceRouteCtlOwnerIndexLen + 1);
+ memcpy(temp->traceRouteCtlOwnerIndex,
+ item->traceRouteCtlOwnerIndex,
+ item->traceRouteCtlOwnerIndexLen + 1);
+ temp->traceRouteCtlOwnerIndex[item->
+ traceRouteCtlOwnerIndexLen] =
+ '\0';
+ temp->traceRouteCtlOwnerIndexLen =
+ item->traceRouteCtlOwnerIndexLen;
+
+ temp->traceRouteCtlTestName =
+ (char *) malloc(item->traceRouteCtlTestNameLen + 1);
+ memcpy(temp->traceRouteCtlTestName,
+ item->traceRouteCtlTestName,
+ item->traceRouteCtlTestNameLen + 1);
+ temp->traceRouteCtlTestName[item->
+ traceRouteCtlTestNameLen] =
+ '\0';
+ temp->traceRouteCtlTestNameLen =
+ item->traceRouteCtlTestNameLen;
+
+ /* add lock to protect */
+ pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;
+ pthread_mutex_lock(&counter_mutex);
+ temp->traceRouteHopsHopIndex = ++index;
+ pthread_mutex_unlock(&counter_mutex);
+ /* endsadsadsad */
+
+
+ temp->traceRouteHopsIpTgtAddressType = 0;
+ temp->traceRouteHopsIpTgtAddress = strdup("");
+ temp->traceRouteHopsIpTgtAddressLen = 0;
+ temp->traceRouteHopsMinRtt = 0;
+ temp->traceRouteHopsMaxRtt = 0;
+ temp->traceRouteHopsAverageRtt = 0;
+ temp->traceRouteHopsRttSumOfSquares = 0;
+ temp->traceRouteHopsSentProbes = 0;
+ temp->traceRouteHopsProbeResponses = 0;
+
+ temp->traceRouteHopsLastGoodProbe = strdup("");
+ temp->traceRouteHopsLastGoodProbeLen = 0;
+ if (index == 1)
+ item->traceRouteHops = temp;
+ else {
+ (current_temp)->next = temp;
+ }
+
+ current_temp = temp;
+
+ if (index >= item->traceRouteCtlMaxTtl) {
+ current_temp->next = NULL;
+ }
+
+ if (item->traceRouteHops != NULL)
+
+ if (traceRouteHopsTable_add(current_temp) !=
+ SNMPERR_SUCCESS)
+ DEBUGMSGTL(("traceRouteHopsTable",
+ "registered an entry error\n"));
+
+ }
+
+ register unsigned long maxRtt = 0;
+ register unsigned long minRtt = 0;
+ register unsigned long averageRtt = 0;
+ register unsigned long sumRtt = 0;
+ register unsigned long responseProbe = 0;
+ register unsigned long sumOfSquare = 0;
+ for (probe = 0; probe < nprobes; ++probe) {
+ int cc = 0, reset_timer = 0;
+ struct timeval t1, t2;
+ struct timezone tz;
+ register unsigned long Rtt = 0;
+
+ gettimeofday(&t1, &tz);
+
+ send_probe_v6(++seq, ttl, sendbuff, ident, &tz, sndsock,
+ datalen, &whereto, hostname);
+ reset_timer = 1;
+
+ while ((cc =
+ wait_for_reply_v6(icmp_sock, &from, reset_timer,
+ waittime, icmp_sock,
+ packet)) != 0) {
+ gettimeofday(&t2, &tz);
+ timep = 0;
+ time(&timep);
+ if ((i =
+ packet_ok_v6(packet, cc, &from, seq, &t1,
+ ident))) {
+ reset_timer = 1;
+ if (memcmp
+ (&from.sin6_addr, &lastaddr,
+ sizeof(struct in6_addr))) {
+
+ memcpy(&lastaddr,
+ &from.sin6_addr,
+ sizeof(struct in6_addr));
+ }
+
+ Rtt = deltaT(&t1, &t2);
+ responseProbe = responseProbe + 1;
+ if (probe == 0) {
+ minRtt = Rtt;
+ maxRtt = Rtt;
+ averageRtt = Rtt;
+ sumRtt = Rtt;
+ sumOfSquare = Rtt * Rtt;
+ } else {
+ if (Rtt < minRtt)
+ minRtt = Rtt;
+ if (Rtt > maxRtt)
+ maxRtt = Rtt;
+ sumRtt = (sumRtt) + Rtt;
+ averageRtt =
+ round((double) (sumRtt) /
+ (double) responseProbe);
+ sumOfSquare = sumOfSquare + Rtt * Rtt;
+ }
+
+ StorageResults->traceRouteResultsCurProbeCount =
+ probe + 1;
+
+
+ switch (i - 1) {
+ case ICMPV6_PORT_UNREACH:
+ ++got_there;
+ break;
+
+ case ICMPV6_NOROUTE:
+ ++unreachable;
+ Printf(" !N");
+ break;
+ case ICMPV6_ADDR_UNREACH:
+ ++unreachable;
+ Printf(" !H");
+ break;
+
+ case ICMPV6_ADM_PROHIBITED:
+ ++unreachable;
+ Printf(" !S");
+ break;
+ }
+ break;
+ } else
+ reset_timer = 0;
+ }
+ if (cc == 0) {
+ timep = 0;
+ time(&timep);
+ Printf(" *");
+ Rtt = (item->traceRouteCtlTimeOut) * 1000;
+ }
+
+ if (item->traceRouteCtlMaxRows != 0) {
+
+ temp_his =
+ SNMP_MALLOC_STRUCT
+ (traceRouteProbeHistoryTable_data);
+ temp_his->traceRouteCtlOwnerIndex =
+ (char *) malloc(item->traceRouteCtlOwnerIndexLen +
+ 1);
+ memcpy(temp_his->traceRouteCtlOwnerIndex,
+ item->traceRouteCtlOwnerIndex,
+ item->traceRouteCtlOwnerIndexLen + 1);
+ temp_his->traceRouteCtlOwnerIndex[item->
+ traceRouteCtlOwnerIndexLen]
+ = '\0';
+ temp_his->traceRouteCtlOwnerIndexLen =
+ item->traceRouteCtlOwnerIndexLen;
+
+ temp_his->traceRouteCtlTestName =
+ (char *) malloc(item->traceRouteCtlTestNameLen +
+ 1);
+ memcpy(temp_his->traceRouteCtlTestName,
+ item->traceRouteCtlTestName,
+ item->traceRouteCtlTestNameLen + 1);
+ temp_his->traceRouteCtlTestName[item->
+ traceRouteCtlTestNameLen]
+ = '\0';
+ temp_his->traceRouteCtlTestNameLen =
+ item->traceRouteCtlTestNameLen;
+
+ /* add lock to protect */
+ pthread_mutex_t counter_mutex =
+ PTHREAD_MUTEX_INITIALIZER;
+ pthread_mutex_lock(&counter_mutex);
+ if (item->traceRouteProbeHistoryMaxIndex >=
+ (unsigned long) (2147483647))
+ item->traceRouteProbeHistoryMaxIndex = 0;
+ temp_his->traceRouteProbeHistoryIndex =
+ ++(item->traceRouteProbeHistoryMaxIndex);
+ pthread_mutex_unlock(&counter_mutex);
+ /* endsadsadsad */
+ temp_his->traceRouteProbeHistoryHopIndex = ttl;
+ temp_his->traceRouteProbeHistoryProbeIndex = probe + 1;
+
+ temp_his->traceRouteProbeHistoryHAddrType = 2;
+ temp_his->traceRouteProbeHistoryHAddr =
+ (char *)
+ malloc(strlen
+ (inet_ntop
+ (AF_INET6, &from.sin6_addr, pa, 64)) + 1);
+ temp_his->traceRouteProbeHistoryHAddr =
+ strdup(inet_ntop
+ (AF_INET6, &from.sin6_addr, pa, 64));
+ temp_his->
+ traceRouteProbeHistoryHAddr[strlen
+ (inet_ntop
+ (AF_INET6,
+ &from.sin6_addr, pa,
+ 64))] = '\0';
+ temp_his->traceRouteProbeHistoryHAddrLen =
+ strlen(inet_ntop
+ (AF_INET6, &from.sin6_addr, pa, 64));
+
+ temp_his->traceRouteProbeHistoryResponse = Rtt;
+ temp_his->traceRouteProbeHistoryStatus = 1;
+ temp_his->traceRouteProbeHistoryLastRC = 0;
+
+ temp_his->traceRouteProbeHistoryTime =
+ (char *) malloc(strlen(asctime(gmtime(&timep))));
+ temp_his->traceRouteProbeHistoryTime =
+ strdup(asctime(gmtime(&timep)));
+ temp_his->
+ traceRouteProbeHistoryTime[strlen
+ (asctime
+ (gmtime(&timep))) -
+ 1] = '\0';
+ temp_his->traceRouteProbeHistoryTimeLen =
+ strlen(asctime(gmtime(&timep))) - 1;
+
+ if (probe == 0)
+ item->traceRouteProbeHis = temp_his;
+ else {
+ (current_temp_his)->next = temp_his;
+ }
+
+ current_temp_his = temp_his;
+
+ if (probe + 1 >= nprobes) {
+ current_temp_his->next = NULL;
+ }
+
+ if (item->traceRouteProbeHis != NULL)
+ if (traceRouteProbeHistoryTable_count(item) <
+ item->traceRouteCtlMaxRows) {
+ if (traceRouteProbeHistoryTable_add
+ (current_temp_his) != SNMPERR_SUCCESS)
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "registered an entry error\n"));
+ } else {
+ traceRouteProbeHistoryTable_delLast(item);
+ if (traceRouteProbeHistoryTable_add
+ (current_temp_his) != SNMPERR_SUCCESS)
+ DEBUGMSGTL(("traceRouteProbeHistoryTable",
+ "registered an entry error\n"));
+
+ }
+
+
+ }
+ if (item->traceRouteCtlCreateHopsEntries == 1) {
+ netsnmp_variable_list *vars_hops = NULL;
+ snmp_varlist_add_variable(&vars_hops, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlOwnerIndex, item->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_hops, NULL, 0, ASN_OCTET_STR, (char *) item->traceRouteCtlTestName, item->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+ snmp_varlist_add_variable(&vars_hops, NULL, 0, ASN_UNSIGNED, (char *) &index, sizeof(index)); /* traceRouteHopsIndex */
+ if ((current =
+ header_complex_get(traceRouteHopsTableStorage,
+ vars_hops)) == NULL)
+ return;
+ current->traceRouteHopsIpTgtAddressType = 2;
+ current->traceRouteHopsIpTgtAddress =
+ (char *)
+ malloc(strlen
+ (inet_ntop
+ (AF_INET6, &from.sin6_addr, pa, 64)) + 1);
+ current->traceRouteHopsIpTgtAddress =
+ strdup(inet_ntop
+ (AF_INET6, &from.sin6_addr, pa, 64));
+ current->
+ traceRouteHopsIpTgtAddress[strlen
+ (inet_ntop
+ (AF_INET6,
+ &from.sin6_addr, pa,
+ 64))] = '\0';
+
+ if (count != 0) {
+ if (strcmp
+ (old_HopsAddress[index - 1],
+ current->traceRouteHopsIpTgtAddress) != 0)
+ flag = 1;
+ }
+
+ current->traceRouteHopsIpTgtAddressLen =
+ strlen(inet_ntop
+ (AF_INET6, &from.sin6_addr, pa, 64));
+ current->traceRouteHopsMinRtt = minRtt;
+ current->traceRouteHopsMaxRtt = maxRtt;
+ current->traceRouteHopsAverageRtt = averageRtt;
+ current->traceRouteHopsRttSumOfSquares = sumOfSquare;
+ current->traceRouteHopsSentProbes = probe + 1;
+ current->traceRouteHopsProbeResponses = responseProbe;
+ current->traceRouteHopsLastGoodProbe =
+ (char *) malloc(strlen(asctime(gmtime(&timep))));
+ current->traceRouteHopsLastGoodProbe =
+ strdup(asctime(gmtime(&timep)));
+ current->
+ traceRouteHopsLastGoodProbe[strlen
+ (asctime
+ (gmtime(&timep))) -
+ 1] = '\0';
+ current->traceRouteHopsLastGoodProbeLen =
+ strlen(asctime(gmtime(&timep))) - 1;
+
+ snmp_free_varbind(vars_hops);
+ vars_hops = NULL;
+ }
+
+
+ (void) fflush(stdout);
+ }
+ putchar('\n');
+
+
+ if (got_there || unreachable >= nprobes - 1) {
+
+
+ if (got_there != 0) {
+ StorageResults->traceRouteResultsTestAttempts =
+ StorageResults->traceRouteResultsTestAttempts + 1;
+
+ StorageResults->traceRouteResultsTestSuccesses =
+ StorageResults->traceRouteResultsTestSuccesses + 1;
+ StorageResults->traceRouteResultsLastGoodPath =
+ (char *) malloc(strlen(asctime(gmtime(&timep))) -
+ 1);
+ StorageResults->traceRouteResultsLastGoodPath =
+ strdup(asctime(gmtime(&timep)));
+ StorageResults->
+ traceRouteResultsLastGoodPath[strlen
+ (asctime
+ (gmtime(&timep))) -
+ 1] = '\0';
+ StorageResults->traceRouteResultsLastGoodPathLen =
+ strlen(asctime(gmtime(&timep))) - 1;
+ if ((item->
+ traceRouteCtlTrapGeneration[0] &
+ TRACEROUTETRAPGENERATION_TESTCOMPLETED) != 0) {
+ printf("TEST completed!\n");
+ send_traceRoute_trap(item, traceRouteTestCompleted,
+ sizeof
+ (traceRouteTestCompleted) /
+ sizeof(oid));
+ }
+ }
+
+ else {
+ StorageResults->traceRouteResultsTestAttempts =
+ StorageResults->traceRouteResultsTestAttempts + 1;
+ if ((item->
+ traceRouteCtlTrapGeneration[0] &
+ TRACEROUTETRAPGENERATION_TESTFAILED) != 0) {
+ printf("test Failed!\n");
+ send_traceRoute_trap(item, traceRouteTestFailed,
+ sizeof(traceRouteTestFailed) /
+ sizeof(oid));
+ }
+ }
+ break;
+
+ } else if (ttl == item->traceRouteCtlMaxTtl
+ && (probe + 1) == nprobes) {
+ StorageResults->traceRouteResultsTestAttempts =
+ StorageResults->traceRouteResultsTestAttempts + 1;
+
+ if ((item->
+ traceRouteCtlTrapGeneration[0] &
+ TRACEROUTETRAPGENERATION_TESTFAILED) != 0) {
+ printf("test Failed!\n");
+ send_ping_trap(item, traceRouteTestFailed,
+ sizeof(traceRouteTestFailed) /
+ sizeof(oid));
+ }
+ }
+
+ }
+
+ if (flag == 1) {
+ printf("path changed!\n");
+ send_traceRoute_trap(item, traceRoutePathChange,
+ sizeof(traceRoutePathChange) /
+ sizeof(oid));
+ }
+
+ int k = 0;
+ for (k = 0; k < count; k++) {
+ free(old_HopsAddress[k]);
+ old_HopsAddress[k] = NULL;
+ }
+
+ }
+ return;
+}
+
+
+int
+wait_for_reply(register int sock, register struct sockaddr_in *fromp,
+ register const struct timeval *tp, u_char * packet,
+ int waittime)
+{
+ fd_set fds;
+ struct timeval now, wait;
+ struct timezone tz;
+ register int cc = 0;
+ int fromlen = sizeof(*fromp);
+
+ FD_ZERO(&fds);
+ FD_SET(sock, &fds);
+ wait.tv_sec = tp->tv_sec + waittime;
+ wait.tv_usec = tp->tv_usec;
+ (void) gettimeofday(&now, &tz);
+ tvsub(&wait, &now);
+ if (select(sock + 1, &fds, NULL, NULL, &wait) > 0)
+ cc = recvfrom(sock, (char *) packet, 512, 0,
+ (struct sockaddr *) fromp, &fromlen);
+ return (cc);
+}
+
+
+int
+wait_for_reply_v6(int sock, struct sockaddr_in6 *from, int reset_timer,
+ int waittime, int icmp_sock, u_char * packet)
+{
+ fd_set fds;
+ static struct timeval wait;
+ int cc = 0;
+ int fromlen = sizeof(*from);
+
+ FD_ZERO(&fds);
+ FD_SET(sock, &fds);
+ if (reset_timer) {
+ /*
+ * traceroute could hang if someone else has a ping
+ * running and our ICMP reply gets dropped but we don't
+ * realize it because we keep waking up to handle those
+ * other ICMP packets that keep coming in. To fix this,
+ * "reset_timer" will only be true if the last packet that
+ * came in was for us or if this is the first time we're
+ * waiting for a reply since sending out a probe. Note
+ * that this takes advantage of the select() feature on
+ * Linux where the remaining timeout is written to the
+ * struct timeval area.
+ */
+ wait.tv_sec = waittime;
+ wait.tv_usec = 0;
+ }
+
+ if (select(sock + 1, &fds, (fd_set *) 0, (fd_set *) 0, &wait) > 0) {
+ cc = recvfrom(icmp_sock, (char *) packet, 512, 0,
+ (struct sockaddr *) from, &fromlen);
+ }
+
+ return (cc);
+}
+
+void
+send_probe(struct sockaddr_in *whereto, register int seq, int ttl,
+ register struct timeval *tp, register struct ip *outip,
+ register struct udphdr *outudp, int packlen, int optlen,
+ char *hostname, u_short ident, int sndsock, u_short port,
+ struct outdata *outdata)
+{
+ register int cc = 0;
+ register struct udpiphdr *ui = NULL, *oui = NULL;
+ struct ip tip;
+
+ outip->ip_ttl = ttl;
+#ifndef __hpux
+ outip->ip_id = htons(ident + seq);
+#endif
+
+ /*
+ * In most cases, the kernel will recalculate the ip checksum.
+ * But we must do it anyway so that the udp checksum comes out
+ * right.
+ */
+
+ outip->ip_sum =
+ in_checksum((u_short *) outip, sizeof(*outip) + optlen);
+ if (outip->ip_sum == 0)
+ outip->ip_sum = 0xffff;
+
+
+ /*
+ * Payload
+ */
+ outdata->seq = seq;
+ outdata->ttl = ttl;
+ outdata->tv = *tp;
+
+
+ outudp->dest = htons(port + seq);
+
+
+ /*
+ * Checksum (we must save and restore ip header)
+ */
+ tip = *outip;
+ ui = (struct udpiphdr *) outip;
+ oui = (struct udpiphdr *) &tip;
+ /*
+ * Easier to zero and put back things that are ok
+ */
+ memset((char *) ui, 0, sizeof(ui->ui_i));
+ ui->ui_src = oui->ui_src;
+ ui->ui_dst = oui->ui_dst;
+ ui->ui_pr = oui->ui_pr;
+ ui->ui_len = outudp->len;
+ outudp->check = 0;
+ outudp->check = in_checksum((u_short *) ui, packlen);
+ if (outudp->check == 0)
+ outudp->check = 0xffff;
+ *outip = tip;
+
+
+ /*
+ * XXX undocumented debugging hack
+ */
+
+
+#if !defined(IP_HDRINCL) && defined(IP_TTL)
+ printf("ttl\n");
+ if (setsockopt(sndsock, IPPROTO_IP, IP_TTL,
+ (char *) &ttl, sizeof(ttl)) < 0) {
+ Fprintf(stderr, "%s: setsockopt ttl %d: %s\n",
+ prog, ttl, strerror(errno));
+ exit(1);
+ }
+#endif
+
+#ifdef __hpux
+
+ Printf("whereto=%s\n",
+ inet_ntoa(((struct sockaddr_in *) whereto)->sin_addr));
+ cc = sendto(sndsock, (char *) outudp,
+ packlen - (sizeof(*outip) + optlen), 0, whereto,
+ sizeof(*whereto));
+ if (cc > 0)
+ cc += sizeof(*outip) + optlen;
+#else
+
+ cc = sendto(sndsock, (char *) outip,
+ packlen, 0, whereto, sizeof(*whereto));
+#endif
+ if (cc < 0 || cc != packlen) {
+ if (cc < 0)
+ Fprintf(stderr, "%s: sendto: %s\n", prog, strerror(errno));
+ Printf("%s: wrote %s %d chars, ret=%d\n",
+ prog, hostname, packlen, cc);
+ (void) fflush(stdout);
+ }
+}
+
+
+
+void
+send_probe_v6(int seq, int ttl, char *sendbuff, pid_t ident,
+ struct timezone *tz, int sndsock, int datalen,
+ struct sockaddr_in6 *whereto, char *hostname)
+{
+ struct pkt_format *pkt = (struct pkt_format *) sendbuff;
+ int i = 0;
+
+ pkt->ident = htonl(ident);
+ pkt->seq = htonl(seq);
+ gettimeofday(&pkt->tv, tz);
+
+ i = setsockopt(sndsock, SOL_IPV6, IPV6_UNICAST_HOPS, &ttl,
+ sizeof(int));
+ if (i < 0) {
+ perror("setsockopt");
+ exit(1);
+ }
+
+ do {
+ i = sendto(sndsock, sendbuff, datalen, 0,
+ (struct sockaddr *) whereto,
+ sizeof(struct sockaddr_in6));
+ } while (i < 0 && errno == ECONNREFUSED);
+
+ if (i < 0 || i != datalen) {
+ if (i < 0)
+ perror("sendto");
+ Printf("traceroute: wrote %s %d chars, ret=%d\n", hostname,
+ datalen, i);
+ (void) fflush(stdout);
+ }
+}
+
+
+unsigned long
+deltaT(struct timeval *t1p, struct timeval *t2p)
+{
+ register unsigned long dt;
+
+ dt = (unsigned long) ((long) (t2p->tv_sec - t1p->tv_sec) * 1000 +
+ (long) (t2p->tv_usec - t1p->tv_usec) / 1000);
+ return (dt);
+}
+
+
+int
+packet_ok(register u_char * buf, int cc, register struct sockaddr_in *from,
+ register int seq, u_short ident, int pmtu, u_short port)
+{
+ register struct icmp *icp = NULL;
+ register u_char type, code;
+ register int hlen = 0;
+#ifndef ARCHAIC
+ register struct ip *ip = NULL;
+
+ ip = (struct ip *) buf;
+ hlen = ip->ip_hl << 2;
+ if (cc < hlen + ICMP_MINLEN) {
+
+ return (0);
+ }
+ cc -= hlen;
+ icp = (struct icmp *) (buf + hlen);
+#else
+ icp = (struct icmp *) buf;
+#endif
+ type = icp->icmp_type;
+ code = icp->icmp_code;
+ /*
+ * Path MTU Discovery (RFC1191)
+ */
+ if (code != ICMP_UNREACH_NEEDFRAG)
+ pmtu = 0;
+ else {
+#ifdef HAVE_ICMP_NEXTMTU
+ pmtu = ntohs(icp->icmp_nextmtu);
+#else
+ pmtu = ntohs(((struct my_pmtu *) &icp->icmp_void)->ipm_nextmtu);
+#endif
+ }
+ if ((type == ICMP_TIMXCEED && code == ICMP_TIMXCEED_INTRANS) ||
+ type == ICMP_UNREACH || type == ICMP_ECHOREPLY) {
+ register struct ip *hip;
+ register struct udphdr *up;
+ register struct icmp *hicmp;
+
+ hip = &icp->icmp_ip;
+ hlen = hip->ip_hl << 2;
+ up = (struct udphdr *) ((u_char *) hip + hlen);
+ /*
+ * XXX 8 is a magic number
+ */
+ if (hlen + 12 <= cc &&
+ hip->ip_p == IPPROTO_UDP &&
+ up->source == htons(ident) && up->dest == htons(port + seq))
+ return (type == ICMP_TIMXCEED ? -1 : code + 1);
+ }
+
+
+ return (0);
+}
+
+
+
+
+int
+packet_ok_v6(u_char * buf, int cc, struct sockaddr_in6 *from, int seq,
+ struct timeval *tv, pid_t ident)
+{
+ struct icmp6hdr *icp = NULL;
+ u_char type, code;
+
+ icp = (struct icmp6hdr *) buf;
+
+ type = icp->icmp6_type;
+ code = icp->icmp6_code;
+
+ if ((type == ICMPV6_TIME_EXCEED && code == ICMPV6_EXC_HOPLIMIT) ||
+ type == ICMPV6_DEST_UNREACH) {
+ struct ipv6hdr *hip = NULL;
+ struct udphdr *up = NULL;
+ int nexthdr = 0;
+
+ hip = (struct ipv6hdr *) (icp + 1);
+ up = (struct udphdr *) (hip + 1);
+ nexthdr = hip->nexthdr;
+
+ if (nexthdr == 44) {
+ nexthdr = *(unsigned char *) up;
+ up++;
+ }
+ if (nexthdr == IPPROTO_UDP) {
+ struct pkt_format *pkt;
+
+ pkt = (struct pkt_format *) (up + 1);
+
+ if (ntohl(pkt->ident) == ident && ntohl(pkt->seq) == seq) {
+ *tv = pkt->tv;
+ return (type == ICMPV6_TIME_EXCEED ? -1 : code + 1);
+ }
+ }
+
+ }
+
+ return (0);
+}
+
+
+/*
+ * Checksum routine for Internet Protocol family headers (C Version)
+ */
+
+u_short
+in_checksum(register u_short * addr, register int len)
+{
+ register int nleft = len;
+ register u_short *w = addr;
+ register u_short answer;
+ register int sum = 0;
+
+ /*
+ * Our algorithm is simple, using a 32 bit accumulator (sum),
+ * we add sequential 16 bit words to it, and at the end, fold
+ * back all the carry bits from the top 16 bits into the lower
+ * 16 bits.
+ */
+ while (nleft > 1) {
+ sum += *w++;
+ nleft -= 2;
+ }
+
+ /*
+ * mop up an odd byte, if necessary
+ */
+ if (nleft == 1)
+ sum += *(u_char *) w;
+
+ /*
+ * add back carry outs from top 16 bits to low 16 bits
+ */
+ sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
+ sum += (sum >> 16); /* add carry */
+ answer = ~sum; /* truncate to 16 bits */
+ return (answer);
+}
+
+/*
+ * Subtract 2 timeval structs: out = out - in.
+ * Out is assumed to be >= in.
+ */
+void
+tvsub(register struct timeval *out, register struct timeval *in)
+{
+
+ if ((out->tv_usec -= in->tv_usec) < 0) {
+ --out->tv_sec;
+ out->tv_usec += 1000000;
+ }
+ out->tv_sec -= in->tv_sec;
+}
+
+
+struct hostinfo *
+gethostinfo(register char *hostname)
+{
+ register int n;
+ register struct hostent *hp = NULL;
+ register struct hostinfo *hi = NULL;
+ register char **p = NULL;
+ register u_int32_t addr, *ap = NULL;
+
+ if (strlen(hostname) > 64) {
+ Fprintf(stderr, "%s: hostname \"%.32s...\" is too long\n",
+ prog, hostname);
+ exit(1);
+ }
+ hi = calloc(1, sizeof(*hi));
+ if (hi == NULL) {
+ Fprintf(stderr, "%s: calloc %s\n", prog, strerror(errno));
+ exit(1);
+ }
+ addr = inet_addr(hostname);
+ if ((int32_t) addr != -1) {
+ hi->name = strdup(hostname);
+ hi->n = 1;
+ hi->addrs = calloc(1, sizeof(hi->addrs[0]));
+ if (hi->addrs == NULL) {
+ Fprintf(stderr, "%s: calloc %s\n", prog, strerror(errno));
+ exit(1);
+ }
+ hi->addrs[0] = addr;
+ return (hi);
+ }
+
+ hp = gethostbyname(hostname);
+ if (hp == NULL) {
+ Fprintf(stderr, "%s: unknown host %s\n", prog, hostname);
+ printf("hp=NULL\n");
+ exit(1);
+ }
+ if (hp->h_addrtype != AF_INET || hp->h_length != 4) {
+ Fprintf(stderr, "%s: bad host %s\n", prog, hostname);
+ exit(1);
+ }
+ hi->name = strdup(hp->h_name);
+ for (n = 0, p = hp->h_addr_list; *p != NULL; ++n, ++p)
+ continue;
+ hi->n = n;
+ hi->addrs = calloc(n, sizeof(hi->addrs[0]));
+ if (hi->addrs == NULL) {
+ Fprintf(stderr, "%s: calloc %s\n", prog, strerror(errno));
+ exit(1);
+ }
+ for (ap = hi->addrs, p = hp->h_addr_list; *p != NULL; ++ap, ++p)
+ memcpy(ap, *p, sizeof(*ap));
+ return (hi);
+}
+
+void
+freehostinfo(register struct hostinfo *hi)
+{
+ if (hi->name != NULL) {
+ free(hi->name);
+ hi->name = NULL;
+ }
+ free((char *) hi->addrs);
+ free((char *) hi);
+}
+
+void
+setsin(register struct sockaddr_in *sin, register u_int32_t addr)
+{
+
+ memset(sin, 0, sizeof(*sin));
+#ifdef HAVE_SOCKADDR_SA_LEN
+ sin->sin_len = sizeof(*sin);
+#endif
+ sin->sin_family = AF_INET;
+ sin->sin_addr.s_addr = addr;
+}
+
+
+/*
+ * Return the source address for the given destination address
+ */
+const char *
+findsaddr(register const struct sockaddr_in *to,
+ register struct sockaddr_in *from)
+{
+ register int i, n;
+ register FILE *f;
+ register u_int32_t mask;
+ u_int32_t dest, tmask;
+ struct ifaddrlist *al;
+ char buf[256], tdevice[256], device[256];
+ static char errbuf[132];
+ static const char route[] = "/proc/net/route";
+
+ if ((f = fopen(route, "r")) == NULL) {
+ sprintf(errbuf, "open %s: %.128s", route, strerror(errno));
+ return (errbuf);
+ }
+
+ /*
+ * Find the appropriate interface
+ */
+ n = 0;
+ mask = 0;
+ device[0] = '\0';
+ while (fgets(buf, sizeof(buf), f) != NULL) {
+ ++n;
+ if (n == 1 && strncmp(buf, "Iface", 5) == 0)
+ continue;
+ if ((i = sscanf(buf, "%s %x %*s %*s %*s %*s %*s %x",
+ tdevice, &dest, &tmask)) != 3)
+ return ("junk in buffer");
+ if ((to->sin_addr.s_addr & tmask) == dest &&
+ (tmask > mask || mask == 0)) {
+ mask = tmask;
+ strcpy(device, tdevice);
+ }
+ }
+ fclose(f);
+
+ if (device[0] == '\0')
+ return ("Can't find interface");
+
+ /*
+ * Get the interface address list
+ */
+ if ((n = ifaddrlist(&al, errbuf)) < 0)
+ return (errbuf);
+
+ if (n == 0)
+ return ("Can't find any network interfaces");
+
+ /*
+ * Find our appropriate source address
+ */
+ for (i = n; i > 0; --i, ++al)
+ if (strcmp(device, al->device) == 0)
+ break;
+ if (i <= 0) {
+ sprintf(errbuf, "Can't find interface \"%.32s\"", device);
+ return (errbuf);
+ }
+
+ setsin(from, al->addr);
+ return (NULL);
+}
+
+int
+ifaddrlist(register struct ifaddrlist **ipaddrp, register char *errbuf)
+{
+ register int fd, nipaddr;
+#ifdef HAVE_SOCKADDR_SA_LEN
+ register int n;
+#endif
+ register struct ifreq *ifrp, *ifend, *ifnext, *mp;
+ register struct sockaddr_in *sin;
+ register struct ifaddrlist *al;
+ struct ifconf ifc;
+ struct ifreq ibuf[(32 * 1024) / sizeof(struct ifreq)], ifr;
+#define MAX_IPADDR (sizeof(ibuf) / sizeof(ibuf[0]))
+ static struct ifaddrlist ifaddrlist[MAX_IPADDR];
+ char device[sizeof(ifr.ifr_name) + 1];
+
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (fd < 0) {
+ (void) sprintf(errbuf, "socket: %s", strerror(errno));
+ return (-1);
+ }
+ ifc.ifc_len = sizeof(ibuf);
+ ifc.ifc_buf = (caddr_t) ibuf;
+
+ if (ioctl(fd, SIOCGIFCONF, (char *) &ifc) < 0 ||
+ ifc.ifc_len < sizeof(struct ifreq)) {
+ if (errno == EINVAL)
+ (void) sprintf(errbuf,
+ "SIOCGIFCONF: ifreq struct too small (%d bytes)",
+ sizeof(ibuf));
+ else
+ (void) sprintf(errbuf, "SIOCGIFCONF: %s", strerror(errno));
+ (void) close(fd);
+ return (-1);
+ }
+ ifrp = ibuf;
+ ifend = (struct ifreq *) ((char *) ibuf + ifc.ifc_len);
+
+ al = ifaddrlist;
+ mp = NULL;
+ nipaddr = 0;
+ for (; ifrp < ifend; ifrp = ifnext) {
+#ifdef HAVE_SOCKADDR_SA_LEN
+ n = ifrp->ifr_addr.sa_len + sizeof(ifrp->ifr_name);
+ if (n < sizeof(*ifrp))
+ ifnext = ifrp + 1;
+ else
+ ifnext = (struct ifreq *) ((char *) ifrp + n);
+ if (ifrp->ifr_addr.sa_family != AF_INET)
+ continue;
+#else
+ ifnext = ifrp + 1;
+#endif
+ /*
+ * Need a template to preserve address info that is
+ * used below to locate the next entry. (Otherwise,
+ * SIOCGIFFLAGS stomps over it because the requests
+ * are returned in a union.)
+ */
+ strncpy(ifr.ifr_name, ifrp->ifr_name, sizeof(ifr.ifr_name));
+ if (ioctl(fd, SIOCGIFFLAGS, (char *) &ifr) < 0) {
+ if (errno == ENXIO)
+ continue;
+ (void) sprintf(errbuf, "SIOCGIFFLAGS: %.*s: %s",
+ (int) sizeof(ifr.ifr_name), ifr.ifr_name,
+ strerror(errno));
+ (void) close(fd);
+ return (-1);
+ }
+
+ /*
+ * Must be up
+ */
+ if ((ifr.ifr_flags & IFF_UP) == 0)
+ continue;
+
+
+ (void) strncpy(device, ifr.ifr_name, sizeof(ifr.ifr_name));
+ device[sizeof(device) - 1] = '\0';
+#ifdef sun
+ /*
+ * Ignore sun virtual interfaces
+ */
+ if (strchr(device, ':') != NULL)
+ continue;
+#endif
+ if (ioctl(fd, SIOCGIFADDR, (char *) &ifr) < 0) {
+ (void) sprintf(errbuf, "SIOCGIFADDR: %s: %s",
+ device, strerror(errno));
+ (void) close(fd);
+ return (-1);
+ }
+
+ if (nipaddr >= MAX_IPADDR) {
+ (void) sprintf(errbuf, "Too many interfaces (%d)", MAX_IPADDR);
+ (void) close(fd);
+ return (-1);
+ }
+ sin = (struct sockaddr_in *) &ifr.ifr_addr;
+ al->addr = sin->sin_addr.s_addr;
+ al->device = strdup(device);
+ ++al;
+ ++nipaddr;
+ }
+ (void) close(fd);
+
+ *ipaddrp = ifaddrlist;
+ return (nipaddr);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteCtlTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteCtlTable.h
new file mode 100644
index 0000000000..da34f46208
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteCtlTable.h
@@ -0,0 +1,627 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:traceRouteCtlTable.h
+ *File Description:The head file of traceRouteCtlTable.c
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.create-dataset.conf,v 5.3 2002/12/05 00:29:45 hardaker Exp $
+ */
+#ifndef TRACEROUTECTLTABLE_H
+#define TRACEROUTECTLTABLE_H
+
+
+config_require(header_complex);
+
+struct traceRouteCtlTable_data {
+ char *traceRouteCtlOwnerIndex; /* string */
+ size_t traceRouteCtlOwnerIndexLen;
+
+ char *traceRouteCtlTestName; /* string */
+ size_t traceRouteCtlTestNameLen;
+
+
+ long traceRouteCtlTargetAddressType;
+
+ char *traceRouteCtlTargetAddress;
+ size_t traceRouteCtlTargetAddressLen;
+
+ long traceRouteCtlByPassRouteTable;
+
+ unsigned long traceRouteCtlDataSize;
+
+ unsigned long traceRouteCtlTimeOut;
+
+ unsigned long traceRouteCtlProbesPerHop;
+
+ unsigned long traceRouteCtlPort;
+
+ unsigned long traceRouteCtlMaxTtl;
+
+ unsigned long traceRouteCtlDSField;
+
+ long traceRouteCtlSourceAddressType;
+
+ char *traceRouteCtlSourceAddress;
+ size_t traceRouteCtlSourceAddressLen;
+
+ long traceRouteCtlIfIndex;
+
+ char *traceRouteCtlMiscOptions;
+ size_t traceRouteCtlMiscOptionsLen;
+
+ unsigned long traceRouteCtlMaxFailures;
+
+ long traceRouteCtlDontFragment;
+
+ unsigned long traceRouteCtlInitialTtl;
+
+ unsigned long traceRouteCtlFrequency;
+
+ long traceRouteCtlStorageType;
+
+ long traceRouteCtlAdminStatus;
+
+ char *traceRouteCtlDescr;
+ size_t traceRouteCtlDescrLen;
+
+ unsigned long traceRouteCtlMaxRows;
+
+ char *traceRouteCtlTrapGeneration;
+ size_t traceRouteCtlTrapGenerationLen;
+
+ long traceRouteCtlCreateHopsEntries;
+
+ oid *traceRouteCtlType;
+ size_t traceRouteCtlTypeLen;
+
+ long traceRouteCtlRowStatus;
+
+
+ int storageType;
+ u_long timer_id;
+ unsigned long traceRouteProbeHistoryMaxIndex;
+
+ struct traceRouteResultsTable_data *traceRouteResults;
+ struct traceRouteProbeHistoryTable_data *traceRouteProbeHis;
+ struct traceRouteHopsTable_data *traceRouteHops;
+
+};
+
+struct traceRouteResultsTable_data {
+ /* struct pingResultsTable_data *next; */
+ char *traceRouteCtlOwnerIndex; /* string */
+ size_t traceRouteCtlOwnerIndexLen;
+
+ char *traceRouteCtlTestName; /* string */
+ size_t traceRouteCtlTestNameLen;
+
+ long traceRouteResultsOperStatus;
+ unsigned long traceRouteResultsCurHopCount;
+ unsigned long traceRouteResultsCurProbeCount;
+ long traceRouteResultsIpTgtAddrType;
+ char *traceRouteResultsIpTgtAddr;
+ size_t traceRouteResultsIpTgtAddrLen;
+ unsigned long traceRouteResultsTestAttempts;
+ unsigned long traceRouteResultsTestSuccesses;
+ char *traceRouteResultsLastGoodPath;
+ size_t traceRouteResultsLastGoodPathLen;
+
+ int storageType;
+
+};
+
+struct traceRouteProbeHistoryTable_data {
+ struct traceRouteProbeHistoryTable_data *next;
+ /* index */
+ char *traceRouteCtlOwnerIndex; /* string */
+ size_t traceRouteCtlOwnerIndexLen;
+
+ char *traceRouteCtlTestName; /* string */
+ size_t traceRouteCtlTestNameLen;
+ unsigned long traceRouteProbeHistoryIndex;
+ unsigned long traceRouteProbeHistoryHopIndex;
+ unsigned long traceRouteProbeHistoryProbeIndex;
+ /* index */
+ long traceRouteProbeHistoryHAddrType;
+ char *traceRouteProbeHistoryHAddr;
+ size_t traceRouteProbeHistoryHAddrLen;
+ unsigned long traceRouteProbeHistoryResponse;
+ long traceRouteProbeHistoryStatus;
+ long traceRouteProbeHistoryLastRC;
+ char *traceRouteProbeHistoryTime;
+ size_t traceRouteProbeHistoryTimeLen;
+
+ int storageType;
+
+};
+
+struct traceRouteHopsTable_data {
+ struct traceRouteHopsTable_data *next;
+
+ char *traceRouteCtlOwnerIndex; /* string */
+ size_t traceRouteCtlOwnerIndexLen;
+
+ char *traceRouteCtlTestName; /* string */
+ size_t traceRouteCtlTestNameLen;
+
+ unsigned long traceRouteHopsHopIndex;
+ long traceRouteHopsIpTgtAddressType;
+ char *traceRouteHopsIpTgtAddress;
+ size_t traceRouteHopsIpTgtAddressLen;
+
+ unsigned long traceRouteHopsMinRtt;
+ unsigned long traceRouteHopsMaxRtt;
+ unsigned long traceRouteHopsAverageRtt;
+ unsigned long traceRouteHopsRttSumOfSquares;
+ unsigned long traceRouteHopsSentProbes;
+ unsigned long traceRouteHopsProbeResponses;
+ char *traceRouteHopsLastGoodProbe;
+ size_t traceRouteHopsLastGoodProbeLen;
+
+ int storageType;
+};
+/*
+ * function declarations
+ */
+void init_traceRouteCtlTable(void);
+FindVarMethod var_traceRouteCtlTable;
+void parse_traceRouteCtlTable(const char *, char *);
+SNMPCallback store_traceRouteCtlTable;
+void init_trResultsTable(struct traceRouteCtlTable_data *);
+
+WriteMethod write_traceRouteCtlTargetAddressType;
+WriteMethod write_traceRouteCtlTargetAddress;
+WriteMethod write_traceRouteCtlByPassRouteTable;
+WriteMethod write_traceRouteCtlDataSize;
+WriteMethod write_traceRouteCtlTimeOut;
+WriteMethod write_traceRouteCtlProbesPerHop;
+WriteMethod write_traceRouteCtlPort;
+WriteMethod write_traceRouteCtlMaxTtl;
+WriteMethod write_traceRouteCtlDSField;
+WriteMethod write_traceRouteCtlSourceAddressType;
+WriteMethod write_traceRouteCtlSourceAddress;
+WriteMethod write_traceRouteCtlIfIndex;
+WriteMethod write_traceRouteCtlMiscOptions;
+WriteMethod write_traceRouteCtlMaxFailures;
+WriteMethod write_traceRouteCtlDontFragment;
+WriteMethod write_traceRouteCtlInitialTtl;
+WriteMethod write_traceRouteCtlFrequency;
+WriteMethod write_traceRouteCtlStorageType;
+WriteMethod write_traceRouteCtlAdminStatus;
+WriteMethod write_traceRouteCtlDescr;
+WriteMethod write_traceRouteCtlMaxRows;
+WriteMethod write_traceRouteCtlTrapGeneration;
+WriteMethod write_traceRouteCtlCreateHopsEntries;
+WriteMethod write_traceRouteCtlType;
+
+WriteMethod write_traceRouteCtlRowStatus;
+
+
+
+#define TRACEROUTETRAPGENERATION_PATHCHANGE 0x80
+#define TRACEROUTETRAPGENERATION_TESTFAILED 0x40
+#define TRACEROUTETRAPGENERATION_TESTCOMPLETED 0x20
+#define TRACEROUTETRAPGENERATION_NULL 0x00
+
+
+/*
+ * column number definitions for table traceRouteCtlTable
+ */
+#define COLUMN_TRACEROUTECTLOWNERINDEX 1
+#define COLUMN_TRACEROUTECTLTESTNAME 2
+#define COLUMN_TRACEROUTECTLTARGETADDRESSTYPE 3
+#define COLUMN_TRACEROUTECTLTARGETADDRESS 4
+#define COLUMN_TRACEROUTECTLBYPASSROUTETABLE 5
+#define COLUMN_TRACEROUTECTLDATASIZE 6
+#define COLUMN_TRACEROUTECTLTIMEOUT 7
+#define COLUMN_TRACEROUTECTLPROBESPERHOP 8
+#define COLUMN_TRACEROUTECTLPORT 9
+#define COLUMN_TRACEROUTECTLMAXTTL 10
+#define COLUMN_TRACEROUTECTLDSFIELD 11
+#define COLUMN_TRACEROUTECTLSOURCEADDRESSTYPE 12
+#define COLUMN_TRACEROUTECTLSOURCEADDRESS 13
+#define COLUMN_TRACEROUTECTLIFINDEX 14
+#define COLUMN_TRACEROUTECTLMISCOPTIONS 15
+#define COLUMN_TRACEROUTECTLMAXFAILURES 16
+#define COLUMN_TRACEROUTECTLDONTFRAGMENT 17
+#define COLUMN_TRACEROUTECTLINITIALTTL 18
+#define COLUMN_TRACEROUTECTLFREQUENCY 19
+#define COLUMN_TRACEROUTECTLSTORAGETYPE 20
+#define COLUMN_TRACEROUTECTLADMINSTATUS 21
+#define COLUMN_TRACEROUTECTLDESCR 22
+#define COLUMN_TRACEROUTECTLMAXROWS 23
+#define COLUMN_TRACEROUTECTLTRAPGENERATION 24
+#define COLUMN_TRACEROUTECTLCREATEHOPSENTRIES 25
+#define COLUMN_TRACEROUTECTLTYPE 26
+#define COLUMN_TRACEROUTECTLROWSTATUS 27
+#endif /* TRACEROUTECTLTABLE_H */
+
+/*
+ * Copyright (c) 1988, 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999, 2000
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef lint
+static const char copyright[] =
+ "@(#) Copyright (c) 1988, 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999, 2000\n\
+The Regents of the University of California. All rights reserved.\n";
+static const char rcsid[] =
+ "@(#)$Id: traceRouteCtlTable.h 10899 2004-08-24 15:15:03Z dts12 $ (LBL)";
+#endif
+
+/*
+ * traceroute host - trace the route ip packets follow going to "host".
+ *
+ * Attempt to trace the route an ip packet would follow to some
+ * internet host. We find out intermediate hops by launching probe
+ * packets with a small ttl (time to live) then listening for an
+ * icmp "time exceeded" reply from a gateway. We start our probes
+ * with a ttl of one and increase by one until we get an icmp "port
+ * unreachable" (which means we got to "host") or hit a max (which
+ * defaults to 30 hops & can be changed with the -m flag). Three
+ * probes (change with -q flag) are sent at each ttl setting and a
+ * line is printed showing the ttl, address of the gateway and
+ * round trip time of each probe. If the probe answers come from
+ * different gateways, the address of each responding system will
+ * be printed. If there is no response within a 5 sec. timeout
+ * interval (changed with the -w flag), a "*" is printed for that
+ * probe.
+ *
+ * Probe packets are UDP format. We don't want the destination
+ * host to process them so the destination port is set to an
+ * unlikely value (if some clod on the destination is using that
+ * value, it can be changed with the -p flag).
+ *
+ * A sample use might be:
+ *
+ * [yak 71]% traceroute nis.nsf.net.
+ * traceroute to nis.nsf.net (35.1.1.48), 30 hops max, 56 byte packet
+ * 1 helios.ee.lbl.gov (128.3.112.1) 19 ms 19 ms 0 ms
+ * 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms
+ * 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms
+ * 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 39 ms
+ * 5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 39 ms 39 ms 39 ms
+ * 6 128.32.197.4 (128.32.197.4) 40 ms 59 ms 59 ms
+ * 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 59 ms
+ * 8 129.140.70.13 (129.140.70.13) 99 ms 99 ms 80 ms
+ * 9 129.140.71.6 (129.140.71.6) 139 ms 239 ms 319 ms
+ * 10 129.140.81.7 (129.140.81.7) 220 ms 199 ms 199 ms
+ * 11 nic.merit.edu (35.1.1.48) 239 ms 239 ms 239 ms
+ *
+ * Note that lines 2 & 3 are the same. This is due to a buggy
+ * kernel on the 2nd hop system -- lbl-csam.arpa -- that forwards
+ * packets with a zero ttl.
+ *
+ * A more interesting example is:
+ *
+ * [yak 72]% traceroute allspice.lcs.mit.edu.
+ * traceroute to allspice.lcs.mit.edu (18.26.0.115), 30 hops max
+ * 1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms
+ * 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 19 ms 19 ms
+ * 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 19 ms
+ * 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 19 ms 39 ms 39 ms
+ * 5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 20 ms 39 ms 39 ms
+ * 6 128.32.197.4 (128.32.197.4) 59 ms 119 ms 39 ms
+ * 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 39 ms
+ * 8 129.140.70.13 (129.140.70.13) 80 ms 79 ms 99 ms
+ * 9 129.140.71.6 (129.140.71.6) 139 ms 139 ms 159 ms
+ * 10 129.140.81.7 (129.140.81.7) 199 ms 180 ms 300 ms
+ * 11 129.140.72.17 (129.140.72.17) 300 ms 239 ms 239 ms
+ * 12 * * *
+ * 13 128.121.54.72 (128.121.54.72) 259 ms 499 ms 279 ms
+ * 14 * * *
+ * 15 * * *
+ * 16 * * *
+ * 17 * * *
+ * 18 ALLSPICE.LCS.MIT.EDU (18.26.0.115) 339 ms 279 ms 279 ms
+ *
+ * (I start to see why I'm having so much trouble with mail to
+ * MIT.) Note that the gateways 12, 14, 15, 16 & 17 hops away
+ * either don't send ICMP "time exceeded" messages or send them
+ * with a ttl too small to reach us. 14 - 17 are running the
+ * MIT C Gateway code that doesn't send "time exceeded"s. God
+ * only knows what's going on with 12.
+ *
+ * The silent gateway 12 in the above may be the result of a bug in
+ * the 4.[23]BSD network code (and its derivatives): 4.x (x <= 3)
+ * sends an unreachable message using whatever ttl remains in the
+ * original datagram. Since, for gateways, the remaining ttl is
+ * zero, the icmp "time exceeded" is guaranteed to not make it back
+ * to us. The behavior of this bug is slightly more interesting
+ * when it appears on the destination system:
+ *
+ * 1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms
+ * 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 39 ms
+ * 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 39 ms 19 ms
+ * 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 19 ms
+ * 5 ccn-nerif35.Berkeley.EDU (128.32.168.35) 39 ms 39 ms 39 ms
+ * 6 csgw.Berkeley.EDU (128.32.133.254) 39 ms 59 ms 39 ms
+ * 7 * * *
+ * 8 * * *
+ * 9 * * *
+ * 10 * * *
+ * 11 * * *
+ * 12 * * *
+ * 13 rip.Berkeley.EDU (128.32.131.22) 59 ms ! 39 ms ! 39 ms !
+ *
+ * Notice that there are 12 "gateways" (13 is the final
+ * destination) and exactly the last half of them are "missing".
+ * What's really happening is that rip (a Sun-3 running Sun OS3.5)
+ * is using the ttl from our arriving datagram as the ttl in its
+ * icmp reply. So, the reply will time out on the return path
+ * (with no notice sent to anyone since icmp's aren't sent for
+ * icmp's) until we probe with a ttl that's at least twice the path
+ * length. I.e., rip is really only 7 hops away. A reply that
+ * returns with a ttl of 1 is a clue this problem exists.
+ * Traceroute prints a "!" after the time if the ttl is <= 1.
+ * Since vendors ship a lot of obsolete (DEC's Ultrix, Sun 3.x) or
+ * non-standard (HPUX) software, expect to see this problem
+ * frequently and/or take care picking the target host of your
+ * probes.
+ *
+ * Other possible annotations after the time are !H, !N, !P (got a host,
+ * network or protocol unreachable, respectively), !S or !F (source
+ * route failed or fragmentation needed -- neither of these should
+ * ever occur and the associated gateway is busted if you see one). If
+ * almost all the probes result in some kind of unreachable, traceroute
+ * will give up and exit.
+ *
+ * Notes
+ * -----
+ * This program must be run by root or be setuid. (I suggest that
+ * you *don't* make it setuid -- casual use could result in a lot
+ * of unnecessary traffic on our poor, congested nets.)
+ *
+ * This program requires a kernel mod that does not appear in any
+ * system available from Berkeley: A raw ip socket using proto
+ * IPPROTO_RAW must interpret the data sent as an ip datagram (as
+ * opposed to data to be wrapped in a ip datagram). See the README
+ * file that came with the source to this program for a description
+ * of the mods I made to /sys/netinet/raw_ip.c. Your mileage may
+ * vary. But, again, ANY 4.x (x < 4) BSD KERNEL WILL HAVE TO BE
+ * MODIFIED TO RUN THIS PROGRAM.
+ *
+ * The udp port usage may appear bizarre (well, ok, it is bizarre).
+ * The problem is that an icmp message only contains 8 bytes of
+ * data from the original datagram. 8 bytes is the size of a udp
+ * header so, if we want to associate replies with the original
+ * datagram, the necessary information must be encoded into the
+ * udp header (the ip id could be used but there's no way to
+ * interlock with the kernel's assignment of ip id's and, anyway,
+ * it would have taken a lot more kernel hacking to allow this
+ * code to set the ip id). So, to allow two or more users to
+ * use traceroute simultaneously, we use this task's pid as the
+ * source port (the high bit is set to move the port number out
+ * of the "likely" range). To keep track of which probe is being
+ * replied to (so times and/or hop counts don't get confused by a
+ * reply that was delayed in transit), we increment the destination
+ * port number before each probe.
+ *
+ * Don't use this as a coding example. I was trying to find a
+ * routing problem and this code sort-of popped out after 48 hours
+ * without sleep. I was amazed it ever compiled, much less ran.
+ *
+ * I stole the idea for this program from Steve Deering. Since
+ * the first release, I've learned that had I attended the right
+ * IETF working group meetings, I also could have stolen it from Guy
+ * Almes or Matt Mathis. I don't know (or care) who came up with
+ * the idea first. I envy the originators' perspicacity and I'm
+ * glad they didn't keep the idea a secret.
+ *
+ * Tim Seaver, Ken Adelman and C. Philip Wood provided bug fixes and/or
+ * enhancements to the original distribution.
+ *
+ * I've hacked up a round-trip-route version of this that works by
+ * sending a loose-source-routed udp datagram through the destination
+ * back to yourself. Unfortunately, SO many gateways botch source
+ * routing, the thing is almost worthless. Maybe one day...
+ *
+ * -- Van Jacobson (van@ee.lbl.gov)
+ * Tue Dec 20 03:50:13 PST 1988
+ */
+
+#include <sys/param.h>
+#include <sys/file.h>
+#include <sys/ioctl.h>
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#include <sys/socket.h>
+#include <sys/time.h>
+
+/* include <linux/ipv6.h> */
+/* include <linux/in6.h> */
+
+#include "in6.h"
+#include "ipv6.h"
+
+#include <linux/icmpv6.h>
+
+#include <netinet/in_systm.h>
+#include <netinet/in.h>
+#include <netinet/ip.h>
+#include "ip_var.h"
+#include <netinet/ip_icmp.h>
+#include <netinet/udp.h>
+#include "udp_var.h"
+
+/* include <linux/if.h> */
+#include <arpa/inet.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+#include <memory.h>
+#include <netdb.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "gnuc.h"
+#ifdef HAVE_OS_PROTO_H
+#include "os-proto.h"
+#endif
+
+#include <net/if.h>
+
+#if __linux__
+#include <endian.h>
+#endif
+
+
+
+/*
+ * rfc1716
+ */
+#ifndef ICMP_UNREACH_FILTER_PROHIB
+#define ICMP_UNREACH_FILTER_PROHIB 13 /* admin prohibited filter */
+#endif
+#ifndef ICMP_UNREACH_HOST_PRECEDENCE
+#define ICMP_UNREACH_HOST_PRECEDENCE 14 /* host precedence violation */
+#endif
+#ifndef ICMP_UNREACH_PRECEDENCE_CUTOFF
+#define ICMP_UNREACH_PRECEDENCE_CUTOFF 15 /* precedence cutoff */
+#endif
+
+#define MAXPACKET 65535
+
+/*
+ * Maximum number of gateways (include room for one noop)
+ */
+#define NGATEWAYS ((int)((MAX_IPOPTLEN - IPOPT_MINOFF - 1) / sizeof(u_int32_t)))
+
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN 64
+#endif
+
+#ifndef FD_SET
+#define NFDBITS (8*sizeof(fd_set))
+#define FD_SETSIZE NFDBITS
+#define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
+#define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
+#define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
+#define FD_ZERO(p) bzero((char *)(p), sizeof(*(p)))
+#endif
+
+#define Fprintf (void)fprintf
+#define Printf (void)printf
+
+/*
+ * Host name and address list
+ */
+struct hostinfo {
+ char *name;
+ int n;
+ u_int32_t *addrs;
+};
+
+/*
+ * Data section of the probe packet
+ */
+struct outdata {
+ u_char seq; /* sequence number of this packet */
+ u_char ttl; /* ttl packet left with */
+ struct timeval tv; /* time packet left */
+};
+
+#ifndef HAVE_ICMP_NEXTMTU
+/*
+ * Path MTU Discovery (RFC1191)
+ */
+struct my_pmtu {
+ u_short ipm_void;
+ u_short ipm_nextmtu;
+};
+#endif
+
+struct ifaddrlist {
+ u_int32_t addr;
+ char *device;
+};
+
+
+
+
+char *prog;
+
+struct pkt_format {
+ __u32 ident;
+ __u32 seq;
+ struct timeval tv;
+};
+
+
+extern int optind;
+extern int opterr;
+extern char *optarg;
+
+/*
+ * Forwards
+ */
+unsigned long deltaT(struct timeval *, struct timeval *);
+unsigned long round(double);
+void freehostinfo(struct hostinfo *);
+void getaddr(u_int32_t *, char *);
+struct hostinfo *gethostinfo(char *);
+u_short in_checksum(u_short *, int);
+char *inetname(struct in_addr);
+void run_traceRoute(unsigned int, void *);
+int packet_ok(u_char *, int, struct sockaddr_in *, int,
+ u_short, int, u_short);
+char *pr_type(u_char);
+ /* void print(u_char *, int, struct sockaddr_in *); */
+void send_probe(struct sockaddr_in *, int, int,
+ struct timeval *, struct ip *, struct udphdr *,
+ int, int, char *, u_short, int, u_short,
+ struct outdata *);
+int str2val(const char *, const char *, int, int);
+void tvsub(struct timeval *, struct timeval *);
+int wait_for_reply(int, struct sockaddr_in *,
+ const struct timeval *, u_char *, int);
+#ifndef HAVE_USLEEP
+int usleep(u_int);
+#endif
+void setsin(struct sockaddr_in *, u_int32_t);
+int ifaddrlist(struct ifaddrlist **, char *);
+const char *findsaddr(const struct sockaddr_in *,
+ struct sockaddr_in *);
+struct addrinfo *host_serv_tr(const char *, const char *, int, int);
+char *sock_ntop_host_tr(const struct sockaddr *, socklen_t);
+
+void send_probe_v6(int, int, char *, pid_t, struct timezone *,
+ int, int, struct sockaddr_in6 *, char *);
+int wait_for_reply_v6(int, struct sockaddr_in6 *, int, int,
+ int, u_char *);
+int packet_ok_v6(u_char *, int, struct sockaddr_in6 *, int,
+ struct timeval *, pid_t);
+void print_v6(unsigned char *, int, struct sockaddr_in6 *);
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteHopsTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteHopsTable.c
new file mode 100644
index 0000000000..7149129141
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteHopsTable.c
@@ -0,0 +1,409 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:traceRouteHopsTable.c
+ *File Description:Rows of traceRouteHopsTable MIB read.
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "traceRouteCtlTable.h"
+#include "traceRouteResultsTable.h"
+#include "traceRouteProbeHistoryTable.h"
+#include "traceRouteHopsTable.h"
+
+#include "header_complex.h"
+
+
+oid traceRouteHopsTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 81, 1, 5 };
+
+struct variable2 traceRouteHopsTable_variables[] = {
+ {COLUMN_TRACEROUTEHOPSIPTGTADDRESSTYPE, ASN_INTEGER, RONLY, var_traceRouteHopsTable, 2, {1, 2}},
+ {COLUMN_TRACEROUTEHOPSIPTGTADDRESS, ASN_OCTET_STR, RONLY, var_traceRouteHopsTable, 2, {1, 3}},
+ {COLUMN_TRACEROUTEHOPSMINRTT, ASN_UNSIGNED, RONLY, var_traceRouteHopsTable, 2, {1, 4}},
+ {COLUMN_TRACEROUTEHOPSMAXRTT, ASN_UNSIGNED, RONLY, var_traceRouteHopsTable, 2, {1, 5}},
+ {COLUMN_TRACEROUTEHOPSAVERAGERTT, ASN_UNSIGNED, RONLY, var_traceRouteHopsTable, 2, {1, 6}},
+ {COLUMN_TRACEROUTEHOPSRTTSUMOFSQUARES, ASN_UNSIGNED, RONLY, var_traceRouteHopsTable, 2, {1, 7}},
+ {COLUMN_TRACEROUTEHOPSSENTPROBES, ASN_UNSIGNED, RONLY, var_traceRouteHopsTable, 2, {1, 8}},
+ {COLUMN_TRACEROUTEHOPSPROBERESPONSES, ASN_UNSIGNED, RONLY, var_traceRouteHopsTable, 2, {1, 9}},
+ {COLUMN_TRACEROUTEHOPSLASTGOODPROBE, ASN_OCTET_STR, RONLY, var_traceRouteHopsTable, 2, {1, 10}}
+};
+
+
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+
+extern struct header_complex_index *traceRouteCtlTableStorage;
+extern struct header_complex_index *traceRouteHopsTableStorage;
+
+void
+traceRouteHopsTable_cleaner(struct header_complex_index *thestuff)
+{
+ struct header_complex_index *hciptr = NULL;
+ struct traceRouteHopsTable_data *StorageDel = NULL;
+ DEBUGMSGTL(("traceRouteHopsTable", "cleanerout "));
+ for (hciptr = thestuff; hciptr != NULL; hciptr = hciptr->next) {
+ StorageDel =
+ header_complex_extract_entry(&traceRouteHopsTableStorage,
+ hciptr);
+ if (StorageDel != NULL) {
+ free(StorageDel->traceRouteCtlOwnerIndex);
+ StorageDel->traceRouteCtlOwnerIndex = NULL;
+ free(StorageDel->traceRouteCtlTestName);
+ StorageDel->traceRouteCtlTestName = NULL;
+ free(StorageDel->traceRouteHopsLastGoodProbe);
+ StorageDel->traceRouteHopsLastGoodProbe = NULL;
+ free(StorageDel);
+ StorageDel = NULL;
+ }
+ DEBUGMSGTL(("traceRouteHopsTable", "cleaner "));
+ }
+
+}
+void
+init_traceRouteHopsTable(void)
+{
+
+ DEBUGMSGTL(("traceRouteHopsTable", "initializing... "));
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("traceRouteHopsTable", traceRouteHopsTable_variables,
+ variable2, traceRouteHopsTable_variables_oid);
+
+
+ /*
+ * register our config handler(s) to deal with registrations
+ */
+ snmpd_register_config_handler("traceRouteHopsTable",
+ parse_traceRouteHopsTable, NULL, NULL);
+
+ /*
+ * we need to be called back later to store our data
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_traceRouteHopsTable, NULL);
+
+ DEBUGMSGTL(("traceRouteHopsTable", "done.\n"));
+}
+
+/*
+ * parse_mteObjectsTable():
+ * parses .conf file entries needed to configure the mib.
+ */
+
+void
+parse_traceRouteHopsTable(const char *token, char *line)
+{
+ size_t tmpint;
+ struct traceRouteHopsTable_data *StorageTmp =
+ SNMP_MALLOC_STRUCT(traceRouteHopsTable_data);
+
+ DEBUGMSGTL(("traceRouteHopsTable", "parsing config... "));
+
+
+ if (StorageTmp == NULL) {
+ config_perror("malloc failure");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteCtlOwnerIndex,
+ &StorageTmp->traceRouteCtlOwnerIndexLen);
+ if (StorageTmp->traceRouteCtlOwnerIndex == NULL) {
+ config_perror("invalid specification for traceRouteCtlOwnerIndex");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteCtlTestName,
+ &StorageTmp->traceRouteCtlTestNameLen);
+ if (StorageTmp->traceRouteCtlTestName == NULL) {
+ config_perror("invalid specification for traceRouteCtlTestName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteHopsHopIndex,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteHopsIpTgtAddressType,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteHopsIpTgtAddress,
+ &StorageTmp->traceRouteHopsIpTgtAddressLen);
+ if (StorageTmp->traceRouteHopsIpTgtAddress == NULL) {
+ config_perror
+ ("invalid specification for traceRouteHopsIpTgtAddress");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteHopsMinRtt, &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteHopsMaxRtt, &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteHopsAverageRtt,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteHopsRttSumOfSquares,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteHopsSentProbes,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteHopsProbeResponses,
+ &tmpint);
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteHopsLastGoodProbe,
+ &StorageTmp->traceRouteHopsLastGoodProbeLen);
+ if (StorageTmp->traceRouteHopsLastGoodProbe == NULL) {
+ config_perror
+ ("invalid specification for traceRouteHopsLastGoodProbe");
+ return;
+ }
+
+ traceRouteHopsTable_inadd(StorageTmp);
+
+ /* traceRouteHopsTable_cleaner(traceRouteHopsTableStorage); */
+
+ DEBUGMSGTL(("traceRouteHopsTable", "done.\n"));
+}
+
+
+
+
+
+/*
+ * store_traceRouteHopsTable():
+ * stores .conf file entries needed to configure the mib.
+ */
+
+int
+store_traceRouteHopsTable(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr = NULL;
+ size_t tmpint;
+ struct traceRouteHopsTable_data *StorageTmp = NULL;
+ struct header_complex_index *hcindex = NULL;
+
+
+ DEBUGMSGTL(("traceRouteHopsTable", "storing data... "));
+
+
+ for (hcindex = traceRouteHopsTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp = (struct traceRouteHopsTable_data *) hcindex->data;
+
+ if (StorageTmp->storageType != ST_READONLY) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "traceRouteHopsTable ");
+ cptr = line + strlen(line);
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteCtlOwnerIndex,
+ &StorageTmp->
+ traceRouteCtlOwnerIndexLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->traceRouteCtlTestName,
+ &StorageTmp->
+ traceRouteCtlTestNameLen);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->traceRouteHopsHopIndex,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ traceRouteHopsIpTgtAddressType,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteHopsIpTgtAddress,
+ &StorageTmp->
+ traceRouteHopsIpTgtAddressLen);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->traceRouteHopsMinRtt,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->traceRouteHopsMaxRtt,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteHopsAverageRtt, &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteHopsRttSumOfSquares,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteHopsSentProbes, &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteHopsProbeResponses,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteHopsLastGoodProbe,
+ &StorageTmp->
+ traceRouteHopsLastGoodProbeLen);
+
+ snmpd_store_config(line);
+ }
+ }
+ DEBUGMSGTL(("traceRouteHopsTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+int
+traceRouteHopsTable_inadd(struct traceRouteHopsTable_data *thedata)
+{
+ netsnmp_variable_list *vars_list = NULL;
+
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &thedata->traceRouteHopsHopIndex, sizeof(thedata->traceRouteHopsHopIndex)); /* traceRouteHopsHopIndex */
+
+ DEBUGMSGTL(("traceRouteHopsTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ header_complex_add_data(&traceRouteHopsTableStorage, vars_list,
+ thedata);
+ DEBUGMSGTL(("traceRouteHopsTable", "registered an entry\n"));
+
+
+ DEBUGMSGTL(("traceRouteHopsTable", "done.\n"));
+}
+
+
+/*
+ * var_traceRouteHopsTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_traceRouteHopsTable above.
+ */
+unsigned char *
+var_traceRouteHopsTable(struct variable *vp,
+ oid * name,
+ size_t *length,
+ int exact,
+ size_t *var_len, WriteMethod ** write_method)
+{
+
+
+ struct traceRouteHopsTable_data *StorageTmp = NULL;
+
+ *write_method = NULL;
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(traceRouteHopsTableStorage, vp, name, length,
+ exact, var_len, write_method)) == NULL) {
+ return NULL;
+ }
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+
+ switch (vp->magic) {
+
+ case COLUMN_TRACEROUTEHOPSIPTGTADDRESSTYPE:
+ *var_len = sizeof(StorageTmp->traceRouteHopsIpTgtAddressType);
+ return (u_char *) & StorageTmp->traceRouteHopsIpTgtAddressType;
+
+ case COLUMN_TRACEROUTEHOPSIPTGTADDRESS:
+ *var_len = (StorageTmp->traceRouteHopsIpTgtAddressLen);
+ return (u_char *) StorageTmp->traceRouteHopsIpTgtAddress;
+
+ case COLUMN_TRACEROUTEHOPSMINRTT:
+ *var_len = sizeof(StorageTmp->traceRouteHopsMinRtt);
+ return (u_char *) & StorageTmp->traceRouteHopsMinRtt;
+
+ case COLUMN_TRACEROUTEHOPSMAXRTT:
+ *var_len = sizeof(StorageTmp->traceRouteHopsMaxRtt);
+ return (u_char *) & StorageTmp->traceRouteHopsMaxRtt;
+
+ case COLUMN_TRACEROUTEHOPSAVERAGERTT:
+ *var_len = sizeof(StorageTmp->traceRouteHopsAverageRtt);
+ return (u_char *) & StorageTmp->traceRouteHopsAverageRtt;
+
+ case COLUMN_TRACEROUTEHOPSRTTSUMOFSQUARES:
+ *var_len = sizeof(StorageTmp->traceRouteHopsRttSumOfSquares);
+ return (u_char *) & StorageTmp->traceRouteHopsRttSumOfSquares;
+
+ case COLUMN_TRACEROUTEHOPSSENTPROBES:
+ *var_len = sizeof(StorageTmp->traceRouteHopsSentProbes);
+ return (u_char *) & StorageTmp->traceRouteHopsSentProbes;
+
+ case COLUMN_TRACEROUTEHOPSPROBERESPONSES:
+ *var_len = sizeof(StorageTmp->traceRouteHopsProbeResponses);
+ return (u_char *) & StorageTmp->traceRouteHopsProbeResponses;
+
+ case COLUMN_TRACEROUTEHOPSLASTGOODPROBE:
+ *var_len = (StorageTmp->traceRouteHopsLastGoodProbeLen);
+ return (u_char *) StorageTmp->traceRouteHopsLastGoodProbe;
+
+ default:
+ ERROR_MSG("");
+ }
+
+ return NULL;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteHopsTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteHopsTable.h
new file mode 100644
index 0000000000..f7e7746bd8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteHopsTable.h
@@ -0,0 +1,41 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:traceRouteHopsTable.h
+ *File Description:The head file of traceRouteHopsTable.c
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+
+#ifndef TRACEROUTEHOPSTABLE_H
+#define TRACEROUTEHOPSTABLE_H
+
+config_require(header_complex);
+
+/*
+ * function declarations
+ */
+void init_traceRouteHopsTable(void);
+FindVarMethod var_traceRouteHopsTable;
+void parse_traceRouteHopsTable(const char *, char *);
+SNMPCallback store_traceRouteHopsTable;
+
+/*
+ * column number definitions for table traceRouteHopsTable
+ */
+#define COLUMN_TRACEROUTEHOPSHOPINDEX 1
+#define COLUMN_TRACEROUTEHOPSIPTGTADDRESSTYPE 2
+#define COLUMN_TRACEROUTEHOPSIPTGTADDRESS 3
+#define COLUMN_TRACEROUTEHOPSMINRTT 4
+#define COLUMN_TRACEROUTEHOPSMAXRTT 5
+#define COLUMN_TRACEROUTEHOPSAVERAGERTT 6
+#define COLUMN_TRACEROUTEHOPSRTTSUMOFSQUARES 7
+#define COLUMN_TRACEROUTEHOPSSENTPROBES 8
+#define COLUMN_TRACEROUTEHOPSPROBERESPONSES 9
+#define COLUMN_TRACEROUTEHOPSLASTGOODPROBE 10
+#endif /* TRACEROUTEHOPSTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteProbeHistoryTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteProbeHistoryTable.c
new file mode 100644
index 0000000000..456efb9688
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteProbeHistoryTable.c
@@ -0,0 +1,408 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:traceRouteProbeHistoryTable.c
+ *File Description:Rows of traceRouteProbeHistoryTable MIB read.
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "traceRouteCtlTable.h"
+#include "traceRouteResultsTable.h"
+#include "traceRouteProbeHistoryTable.h"
+#include "traceRouteHopsTable.h"
+
+#include "header_complex.h"
+
+
+oid traceRouteProbeHistoryTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 81, 1, 4 };
+
+struct variable2 traceRouteProbeHistoryTable_variables[] = {
+ {COLUMN_TRACEROUTEPROBEHISTORYHADDRTYPE, ASN_INTEGER, RONLY, var_traceRouteProbeHistoryTable, 2, {1, 4}},
+ {COLUMN_TRACEROUTEPROBEHISTORYHADDR, ASN_OCTET_STR, RONLY, var_traceRouteProbeHistoryTable, 2, {1, 5}},
+ {COLUMN_TRACEROUTEPROBEHISTORYRESPONSE, ASN_UNSIGNED, RONLY, var_traceRouteProbeHistoryTable, 2, {1, 6}},
+ {COLUMN_TRACEROUTEPROBEHISTORYSTATUS, ASN_INTEGER, RONLY, var_traceRouteProbeHistoryTable, 2, {1, 7}},
+ {COLUMN_TRACEROUTEPROBEHISTORYLASTRC, ASN_INTEGER, RONLY, var_traceRouteProbeHistoryTable, 2, {1, 8}},
+ {COLUMN_TRACEROUTEPROBEHISTORYTIME, ASN_OCTET_STR, RONLY, var_traceRouteProbeHistoryTable, 2, {1, 9}}
+};
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+
+extern struct header_complex_index *traceRouteCtlTableStorage;
+extern struct header_complex_index *traceRouteProbeHistoryTableStorage;
+
+void
+traceRouteProbeHistoryTable_cleaner(struct header_complex_index *thestuff)
+{
+ struct header_complex_index *hciptr = NULL;
+ struct traceRouteProbeHistoryTable_data *StorageDel = NULL;
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "cleanerout "));
+ for (hciptr = thestuff; hciptr != NULL; hciptr = hciptr->next) {
+ StorageDel =
+ header_complex_extract_entry
+ (&traceRouteProbeHistoryTableStorage, hciptr);
+ if (StorageDel != NULL) {
+ free(StorageDel->traceRouteCtlOwnerIndex);
+ StorageDel->traceRouteCtlOwnerIndex = NULL;
+ free(StorageDel->traceRouteCtlTestName);
+ StorageDel->traceRouteCtlTestName = NULL;
+ free(StorageDel->traceRouteProbeHistoryHAddr);
+ StorageDel->traceRouteProbeHistoryHAddr = NULL;
+ free(StorageDel->traceRouteProbeHistoryTime);
+ StorageDel->traceRouteProbeHistoryTime = NULL;
+ free(StorageDel);
+ StorageDel = NULL;
+ }
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "cleaner "));
+ }
+
+}
+void
+init_traceRouteProbeHistoryTable(void)
+{
+
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "initializing... "));
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("traceRouteProbeHistoryTable",
+ traceRouteProbeHistoryTable_variables, variable2,
+ traceRouteProbeHistoryTable_variables_oid);
+
+
+ /*
+ * register our config handler(s) to deal with registrations
+ */
+ snmpd_register_config_handler("traceRouteProbeHistoryTable",
+ parse_traceRouteProbeHistoryTable, NULL,
+ NULL);
+
+ /*
+ * we need to be called back later to store our data
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_traceRouteProbeHistoryTable, NULL);
+
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "done.\n"));
+}
+
+/*
+ * parse_mteObjectsTable():
+ * parses .conf file entries needed to configure the mib.
+ */
+
+void
+parse_traceRouteProbeHistoryTable(const char *token, char *line)
+{
+ size_t tmpint;
+ struct traceRouteProbeHistoryTable_data *StorageTmp =
+ SNMP_MALLOC_STRUCT(traceRouteProbeHistoryTable_data);
+
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "parsing config... "));
+
+
+ if (StorageTmp == NULL) {
+ config_perror("malloc failure");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteCtlOwnerIndex,
+ &StorageTmp->traceRouteCtlOwnerIndexLen);
+ if (StorageTmp->traceRouteCtlOwnerIndex == NULL) {
+ config_perror("invalid specification for traceRouteCtlOwnerIndex");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteCtlTestName,
+ &StorageTmp->traceRouteCtlTestNameLen);
+ if (StorageTmp->traceRouteCtlTestName == NULL) {
+ config_perror("invalid specification for traceRouteCtlTestName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteProbeHistoryIndex,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteProbeHistoryHopIndex,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->
+ traceRouteProbeHistoryProbeIndex, &tmpint);
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteProbeHistoryHAddrType,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteProbeHistoryHAddr,
+ &StorageTmp->traceRouteProbeHistoryHAddrLen);
+ if (StorageTmp->traceRouteProbeHistoryHAddr == NULL) {
+ config_perror
+ ("invalid specification for traceRouteProbeHistoryHAddr");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteProbeHistoryResponse,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteProbeHistoryStatus,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteProbeHistoryLastRC,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteProbeHistoryTime,
+ &StorageTmp->traceRouteProbeHistoryTimeLen);
+ if (StorageTmp->traceRouteProbeHistoryTime == NULL) {
+ config_perror
+ ("invalid specification for traceRouteProbeHistoryTime");
+ return;
+ }
+
+
+ traceRouteProbeHistoryTable_inadd(StorageTmp);
+
+ /* traceRouteProbeHistoryTable_cleaner(traceRouteProbeHistoryTableStorage); */
+
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "done.\n"));
+}
+
+
+
+
+
+/*
+ * store_traceRouteProbeHistoryTable():
+ * stores .conf file entries needed to configure the mib.
+ */
+
+int
+store_traceRouteProbeHistoryTable(int majorID, int minorID,
+ void *serverarg, void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr = NULL;
+ size_t tmpint;
+ struct traceRouteProbeHistoryTable_data *StorageTmp = NULL;
+ struct header_complex_index *hcindex = NULL;
+
+
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "storing data... "));
+
+
+ for (hcindex = traceRouteProbeHistoryTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp =
+ (struct traceRouteProbeHistoryTable_data *) hcindex->data;
+
+ if (StorageTmp->storageType != ST_READONLY) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "traceRouteProbeHistoryTable ");
+ cptr = line + strlen(line);
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteCtlOwnerIndex,
+ &StorageTmp->
+ traceRouteCtlOwnerIndexLen);
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->traceRouteCtlTestName,
+ &StorageTmp->
+ traceRouteCtlTestNameLen);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteProbeHistoryIndex,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteProbeHistoryHopIndex,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteProbeHistoryProbeIndex,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ traceRouteProbeHistoryHAddrType,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteProbeHistoryHAddr,
+ &StorageTmp->
+ traceRouteProbeHistoryHAddrLen);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteProbeHistoryResponse,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ traceRouteProbeHistoryStatus,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ traceRouteProbeHistoryLastRC,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteProbeHistoryTime,
+ &StorageTmp->
+ traceRouteProbeHistoryTimeLen);
+
+ snmpd_store_config(line);
+ }
+ }
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+
+int
+traceRouteProbeHistoryTable_inadd(struct traceRouteProbeHistoryTable_data
+ *thedata)
+{
+ netsnmp_variable_list *vars_list = NULL;
+
+
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &thedata->traceRouteProbeHistoryIndex, sizeof(thedata->traceRouteProbeHistoryIndex)); /* traceRouteProbeHistoryIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &thedata->traceRouteProbeHistoryHopIndex, sizeof(thedata->traceRouteProbeHistoryHopIndex)); /* traceRouteProbeHistoryHopIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_UNSIGNED, (char *) &thedata->traceRouteProbeHistoryProbeIndex, sizeof(thedata->traceRouteProbeHistoryProbeIndex)); /* traceRouteProbeHistoryProbeIndex */
+
+
+ /*
+ * XXX: fill in default row values here into StorageNew
+ *
+ */
+
+
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ header_complex_add_data(&traceRouteProbeHistoryTableStorage, vars_list,
+ thedata);
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "registered an entry\n"));
+
+
+ DEBUGMSGTL(("traceRouteProbeHistoryTable", "done.\n"));
+}
+
+
+/*
+ * var_traceRouteProbeHistoryTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_traceRouteProbeHistoryTable above.
+ */
+unsigned char *
+var_traceRouteProbeHistoryTable(struct variable *vp,
+ oid * name,
+ size_t *length,
+ int exact,
+ size_t *var_len,
+ WriteMethod ** write_method)
+{
+
+
+ struct traceRouteProbeHistoryTable_data *StorageTmp = NULL;
+
+ *write_method = NULL;
+
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(traceRouteProbeHistoryTableStorage, vp, name,
+ length, exact, var_len, write_method)) == NULL) {
+ return NULL;
+ }
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+
+ switch (vp->magic) {
+
+ case COLUMN_TRACEROUTEPROBEHISTORYHADDRTYPE:
+ *var_len = sizeof(StorageTmp->traceRouteProbeHistoryHAddrType);
+ return (u_char *) & StorageTmp->traceRouteProbeHistoryHAddrType;
+
+ case COLUMN_TRACEROUTEPROBEHISTORYHADDR:
+ *var_len = (StorageTmp->traceRouteProbeHistoryHAddrLen);
+ return (u_char *) StorageTmp->traceRouteProbeHistoryHAddr;
+
+ case COLUMN_TRACEROUTEPROBEHISTORYRESPONSE:
+ *var_len = sizeof(StorageTmp->traceRouteProbeHistoryResponse);
+ return (u_char *) & StorageTmp->traceRouteProbeHistoryResponse;
+
+ case COLUMN_TRACEROUTEPROBEHISTORYSTATUS:
+ *var_len = sizeof(StorageTmp->traceRouteProbeHistoryStatus);
+ return (u_char *) & StorageTmp->traceRouteProbeHistoryStatus;
+
+ case COLUMN_TRACEROUTEPROBEHISTORYLASTRC:
+ *var_len = sizeof(StorageTmp->traceRouteProbeHistoryLastRC);
+ return (u_char *) & StorageTmp->traceRouteProbeHistoryLastRC;
+
+ case COLUMN_TRACEROUTEPROBEHISTORYTIME:
+ *var_len = (StorageTmp->traceRouteProbeHistoryTimeLen);
+ return (u_char *) StorageTmp->traceRouteProbeHistoryTime;
+
+ default:
+ ERROR_MSG("");
+ }
+
+ return NULL;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteProbeHistoryTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteProbeHistoryTable.h
new file mode 100644
index 0000000000..e99d9484e1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteProbeHistoryTable.h
@@ -0,0 +1,39 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:traceRouteProbeHistoryTable.h
+ *File Description:The head file of traceRouteProbeHistoryTable.c
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+#ifndef TRACEROUTEPROBEHISTORYTABLE_H
+#define TRACEROUTEPROBEHISTORYTABLE_H
+
+config_require(header_complex);
+
+/*
+ * function declarations
+ */
+void init_traceRouteProbeHistoryTable(void);
+FindVarMethod var_traceRouteProbeHistoryTable;
+void parse_traceRouteProbeHistoryTable(const char *, char *);
+SNMPCallback store_traceRouteProbeHistoryTable;
+
+/*
+ * column number definitions for table traceRouteProbeHistoryTable
+ */
+#define COLUMN_TRACEROUTEPROBEHISTORYINDEX 1
+#define COLUMN_TRACEROUTEPROBEHISTORYHOPINDEX 2
+#define COLUMN_TRACEROUTEPROBEHISTORYPROBEINDEX 3
+#define COLUMN_TRACEROUTEPROBEHISTORYHADDRTYPE 4
+#define COLUMN_TRACEROUTEPROBEHISTORYHADDR 5
+#define COLUMN_TRACEROUTEPROBEHISTORYRESPONSE 6
+#define COLUMN_TRACEROUTEPROBEHISTORYSTATUS 7
+#define COLUMN_TRACEROUTEPROBEHISTORYLASTRC 8
+#define COLUMN_TRACEROUTEPROBEHISTORYTIME 9
+#endif /* TRACEROUTEPROBEHISTORYTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteResultsTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteResultsTable.c
new file mode 100644
index 0000000000..cc421e30f7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteResultsTable.c
@@ -0,0 +1,407 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:traceRouteResultsTable.c
+ *File Description:Rows of traceRouteResultsTable MIB read.
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.create-dataset.conf,v 5.3 2002/12/05 00:29:45 hardaker Exp $
+ */
+
+
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "traceRouteResultsTable.h"
+#include "traceRouteCtlTable.h"
+#include "traceRouteProbeHistoryTable.h"
+#include "traceRouteHopsTable.h"
+#include "header_complex.h"
+
+/*
+ *traceRouteResultsTable_variables_oid:
+ *
+ */
+oid traceRouteResultsTable_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 81, 1, 3 };
+
+struct variable2 traceRouteResultsTable_variables[] = {
+ {COLUMN_TRACEROUTERESULTSOPERSTATUS, ASN_INTEGER, RONLY, var_traceRouteResultsTable, 2, {1, 1}},
+ {COLUMN_TRACEROUTERESULTSCURHOPCOUNT, ASN_GAUGE, RONLY, var_traceRouteResultsTable, 2, {1, 2}},
+ {COLUMN_TRACEROUTERESULTSCURPROBECOUNT, ASN_GAUGE, RONLY, var_traceRouteResultsTable, 2, {1, 3}},
+ {COLUMN_TRACEROUTERESULTSIPTGTADDRTYPE, ASN_INTEGER, RONLY, var_traceRouteResultsTable, 2, {1, 4}},
+ {COLUMN_TRACEROUTERESULTSIPTGTADDR, ASN_OCTET_STR, RONLY, var_traceRouteResultsTable, 2, {1, 5}},
+ {COLUMN_TRACEROUTERESULTSTESTATTEMPTS, ASN_UNSIGNED, RONLY, var_traceRouteResultsTable, 2, {1, 6}},
+ {COLUMN_TRACEROUTERESULTSTESTSUCCESSES, ASN_UNSIGNED, RONLY, var_traceRouteResultsTable, 2, {1, 7}},
+ {COLUMN_TRACEROUTERESULTSLASTGOODPATH, ASN_OCTET_STR, RONLY, var_traceRouteResultsTable, 2, {1, 8}}
+};
+
+
+
+/*
+ * global storage of our data, saved in and configured by header_complex()
+ */
+
+extern struct header_complex_index *traceRouteCtlTableStorage;
+extern struct header_complex_index *traceRouteResultsTableStorage;
+
+void
+traceRouteResultsTable_cleaner(struct header_complex_index *thestuff)
+{
+ struct header_complex_index *hciptr = NULL;
+ struct traceRouteResultsTable_data *StorageDel = NULL;
+ DEBUGMSGTL(("traceRouteResultsTable", "cleanerout "));
+ for (hciptr = thestuff; hciptr != NULL; hciptr = hciptr->next) {
+ StorageDel =
+ header_complex_extract_entry(&traceRouteResultsTableStorage,
+ hciptr);
+ if (StorageDel != NULL) {
+ free(StorageDel->traceRouteCtlOwnerIndex);
+ StorageDel->traceRouteCtlOwnerIndex = NULL;
+ free(StorageDel->traceRouteCtlTestName);
+ StorageDel->traceRouteCtlTestName = NULL;
+ free(StorageDel->traceRouteResultsIpTgtAddr);
+ StorageDel->traceRouteResultsIpTgtAddr = NULL;
+ free(StorageDel->traceRouteResultsLastGoodPath);
+ StorageDel->traceRouteResultsLastGoodPath = NULL;
+ free(StorageDel);
+ StorageDel = NULL;
+
+ }
+ DEBUGMSGTL(("traceRouteResultsTable", "cleaner "));
+ }
+
+}
+
+void
+init_traceRouteResultsTable(void)
+{
+
+ DEBUGMSGTL(("traceRouteResultsTable", "initializing... "));
+
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("traceRouteResultsTable",
+ traceRouteResultsTable_variables, variable2,
+ traceRouteResultsTable_variables_oid);
+
+
+ /*
+ * register our config handler(s) to deal with registrations
+ */
+ snmpd_register_config_handler("traceRouteResultsTable",
+ parse_traceRouteResultsTable, NULL,
+ NULL);
+
+ /*
+ * we need to be called back later to store our data
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_traceRouteResultsTable, NULL);
+
+ DEBUGMSGTL(("traceRouteResultsTable", "done.\n"));
+}
+
+/*
+ * parse_mteObjectsTable():
+ * parses .conf file entries needed to configure the mib.
+ */
+
+void
+parse_traceRouteResultsTable(const char *token, char *line)
+{
+ size_t tmpint;
+ struct traceRouteResultsTable_data *StorageTmp =
+ SNMP_MALLOC_STRUCT(traceRouteResultsTable_data);
+
+ DEBUGMSGTL(("traceRouteResultsTable", "parsing config... "));
+
+
+ if (StorageTmp == NULL) {
+ config_perror("malloc failure");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteCtlOwnerIndex,
+ &StorageTmp->traceRouteCtlOwnerIndexLen);
+ if (StorageTmp->traceRouteCtlOwnerIndex == NULL) {
+ config_perror("invalid specification for traceRouteCtlOwnerIndex");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteCtlTestName,
+ &StorageTmp->traceRouteCtlTestNameLen);
+ if (StorageTmp->traceRouteCtlTestName == NULL) {
+ config_perror("invalid specification for traceRouteCtlTestName");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteResultsOperStatus,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_GAUGE, line,
+ &StorageTmp->traceRouteResultsCurHopCount,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_GAUGE, line,
+ &StorageTmp->traceRouteResultsCurProbeCount,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_INTEGER, line,
+ &StorageTmp->traceRouteResultsIpTgtAddrType,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteResultsIpTgtAddr,
+ &StorageTmp->traceRouteResultsIpTgtAddrLen);
+ if (StorageTmp->traceRouteResultsIpTgtAddr == NULL) {
+ config_perror
+ ("invalid specification for traceRouteResultsIpTgtAddr");
+ return;
+ }
+
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteResultsTestAttempts,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_UNSIGNED, line,
+ &StorageTmp->traceRouteResultsTestSuccesses,
+ &tmpint);
+ line =
+ read_config_read_data(ASN_OCTET_STR, line,
+ &StorageTmp->traceRouteResultsLastGoodPath,
+ &StorageTmp->
+ traceRouteResultsLastGoodPathLen);
+ if (StorageTmp->traceRouteResultsLastGoodPath == NULL) {
+ config_perror
+ ("invalid specification for traceRouteResultsLastGoodPath!");
+ return;
+ }
+
+
+ traceRouteResultsTable_inadd(StorageTmp);
+
+ /* traceRouteResultsTable_cleaner(traceRouteResultsTableStorage); */
+
+ DEBUGMSGTL(("traceRouteResultsTable", "done.\n"));
+}
+
+
+
+
+
+/*
+ * store_traceRouteResultsTable():
+ * stores .conf file entries needed to configure the mib.
+ */
+
+int
+store_traceRouteResultsTable(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char line[SNMP_MAXBUF];
+ char *cptr = NULL;
+ size_t tmpint;
+ struct traceRouteResultsTable_data *StorageTmp = NULL;
+ struct header_complex_index *hcindex = NULL;
+
+
+ DEBUGMSGTL(("traceRouteResultsTable", "storing data... "));
+
+
+ for (hcindex = traceRouteResultsTableStorage; hcindex != NULL;
+ hcindex = hcindex->next) {
+ StorageTmp = (struct traceRouteResultsTable_data *) hcindex->data;
+
+ if (StorageTmp->storageType != ST_READONLY) {
+ memset(line, 0, sizeof(line));
+ strcat(line, "traceRouteResultsTable ");
+ cptr = line + strlen(line);
+
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteCtlOwnerIndex,
+ &StorageTmp->
+ traceRouteCtlOwnerIndexLen);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->traceRouteCtlTestName,
+ &StorageTmp->
+ traceRouteCtlTestNameLen);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ traceRouteResultsOperStatus,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_GAUGE, cptr,
+ &StorageTmp->
+ traceRouteResultsCurHopCount,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_GAUGE, cptr,
+ &StorageTmp->
+ traceRouteResultsCurProbeCount,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_INTEGER, cptr,
+ &StorageTmp->
+ traceRouteResultsIpTgtAddrType,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteResultsIpTgtAddr,
+ &StorageTmp->
+ traceRouteResultsIpTgtAddrLen);
+
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteResultsTestAttempts,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_UNSIGNED, cptr,
+ &StorageTmp->
+ traceRouteResultsTestSuccesses,
+ &tmpint);
+ cptr =
+ read_config_store_data(ASN_OCTET_STR, cptr,
+ &StorageTmp->
+ traceRouteResultsLastGoodPath,
+ &StorageTmp->
+ traceRouteResultsLastGoodPathLen);
+
+ snmpd_store_config(line);
+ }
+ }
+ DEBUGMSGTL(("traceRouteResultsTable", "done.\n"));
+ return SNMPERR_SUCCESS;
+}
+
+int
+traceRouteResultsTable_inadd(struct traceRouteResultsTable_data *thedata)
+{
+ netsnmp_variable_list *vars_list = NULL;
+
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlOwnerIndex, thedata->traceRouteCtlOwnerIndexLen); /* traceRouteCtlOwnerIndex */
+ snmp_varlist_add_variable(&vars_list, NULL, 0, ASN_OCTET_STR, (char *) thedata->traceRouteCtlTestName, thedata->traceRouteCtlTestNameLen); /* traceRouteCtlTestName */
+
+ DEBUGMSGTL(("traceRouteResultsTable", "adding data... "));
+ /*
+ * add the index variables to the varbind list, which is
+ * used by header_complex to index the data
+ */
+
+ header_complex_add_data(&traceRouteResultsTableStorage, vars_list,
+ thedata);
+ DEBUGMSGTL(("traceRouteResultsTable", "registered an entry\n"));
+
+
+ DEBUGMSGTL(("traceRouteResultsTable", "done.\n"));
+}
+
+
+/*
+ * var_traceRouteResultsTable():
+ * Handle this table separately from the scalar value case.
+ * The workings of this are basically the same as for var_traceRouteResultsTable above.
+ */
+unsigned char *
+var_traceRouteResultsTable(struct variable *vp,
+ oid * name,
+ size_t *length,
+ int exact,
+ size_t *var_len, WriteMethod ** write_method)
+{
+
+
+ struct traceRouteResultsTable_data *StorageTmp = NULL;
+
+ *write_method = NULL;
+
+ /*
+ * this assumes you have registered all your data properly
+ */
+ if ((StorageTmp =
+ header_complex(traceRouteResultsTableStorage, vp, name, length,
+ exact, var_len, write_method)) == NULL) {
+ return NULL;
+ }
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+
+ switch (vp->magic) {
+
+ case COLUMN_TRACEROUTERESULTSOPERSTATUS:
+ *var_len = sizeof(StorageTmp->traceRouteResultsOperStatus);
+ return (u_char *) & StorageTmp->traceRouteResultsOperStatus;
+
+ case COLUMN_TRACEROUTERESULTSCURHOPCOUNT:
+ *var_len = sizeof(StorageTmp->traceRouteResultsCurHopCount);
+ return (u_char *) & StorageTmp->traceRouteResultsCurHopCount;
+
+ case COLUMN_TRACEROUTERESULTSCURPROBECOUNT:
+ *var_len = sizeof(StorageTmp->traceRouteResultsCurProbeCount);
+ return (u_char *) & StorageTmp->traceRouteResultsCurProbeCount;
+
+ case COLUMN_TRACEROUTERESULTSIPTGTADDRTYPE:
+ *var_len = sizeof(StorageTmp->traceRouteResultsIpTgtAddrType);
+ return (u_char *) & StorageTmp->traceRouteResultsIpTgtAddrType;
+
+ case COLUMN_TRACEROUTERESULTSIPTGTADDR:
+ *var_len = (StorageTmp->traceRouteResultsIpTgtAddrLen);
+ return (u_char *) StorageTmp->traceRouteResultsIpTgtAddr;
+
+ case COLUMN_TRACEROUTERESULTSTESTATTEMPTS:
+ *var_len = sizeof(StorageTmp->traceRouteResultsTestAttempts);
+ return (u_char *) & StorageTmp->traceRouteResultsTestAttempts;
+
+ case COLUMN_TRACEROUTERESULTSTESTSUCCESSES:
+ *var_len = sizeof(StorageTmp->traceRouteResultsTestSuccesses);
+ return (u_char *) & StorageTmp->traceRouteResultsTestSuccesses;
+
+ case COLUMN_TRACEROUTERESULTSLASTGOODPATH:
+ *var_len = (StorageTmp->traceRouteResultsLastGoodPathLen);
+ return (u_char *) StorageTmp->traceRouteResultsLastGoodPath;
+
+ default:
+ ERROR_MSG("");
+ }
+
+ return NULL;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteResultsTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteResultsTable.h
new file mode 100644
index 0000000000..f31ffbf235
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/disman/traceroute/traceRouteResultsTable.h
@@ -0,0 +1,40 @@
+/*
+ *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
+ *
+ *All right reserved
+ *
+ *File Name:traceRouteResultsTable.h
+ *File Description:The head file of traceRouteResultsTable.c
+ *
+ *Current Version:1.0
+ *Author:ChenJing
+ *Date:2004.8.20
+ */
+
+#ifndef TRACEROUTERESULTSTABLE_H
+#define TRACEROUTERESULTSTABLE_H
+
+
+config_require(header_complex);
+
+/*
+ * function declarations
+ */
+void init_traceRouteResultsTable(void);
+FindVarMethod var_traceRouteResultsTable;
+void parse_traceRouteResultsTable(const char *, char *);
+SNMPCallback store_traceRouteResultsTable;
+
+
+/*
+ * column number definitions for table traceRouteResultsTable
+ */
+#define COLUMN_TRACEROUTERESULTSOPERSTATUS 1
+#define COLUMN_TRACEROUTERESULTSCURHOPCOUNT 2
+#define COLUMN_TRACEROUTERESULTSCURPROBECOUNT 3
+#define COLUMN_TRACEROUTERESULTSIPTGTADDRTYPE 4
+#define COLUMN_TRACEROUTERESULTSIPTGTADDR 5
+#define COLUMN_TRACEROUTERESULTSTESTATTEMPTS 6
+#define COLUMN_TRACEROUTERESULTSTESTSUCCESSES 7
+#define COLUMN_TRACEROUTERESULTSLASTGOODPATH 8
+#endif /* TRACEROUTERESULTSTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps.h
new file mode 100644
index 0000000000..0c4a7b44c8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps.h
@@ -0,0 +1,2 @@
+config_require(eoc-alarms-traps/EoCAlarmsAndTraps)
+config_require(eoc-alarms-traps/EoCAlarmsAndTraps_interface)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps.c
new file mode 100644
index 0000000000..27e1586728
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps.c
@@ -0,0 +1,2039 @@
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "EoCAlarmsAndTraps.h"
+
+/* include header with interface functions */
+#include "EoCAlarmsAndTraps_interface.h"
+
+/** global trap counter
+ * if trap is issued for the first time, add new rows to snmpNotifyTable,
+ * snmpTargetAddrTable and snmpTargetParamsTable
+ * for subsequently issued traps, modify existing rows of these tables
+ */
+int trap_count = 0;
+
+/** global maximum current alarm counter
+ * used to ensure that no more than LIBSPID_CURRENT_ALARMS_MAX_NUM are stored
+ * in alarm info file
+ */
+int max_alarm_count = 0;
+
+/* global alarm log list */
+alarm_log_list_t list;
+
+/* old contents of analog alarm entries read from config file */
+libspid_eoc_analog_alarm_entry_t
+old_analog_alarm_entries[LIBSPID_ANALOG_ALARMS_MAX_NUM];
+
+/*
+ * definition of snmpTrapOID.0 object
+ */
+oid objid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 };
+size_t objid_snmptrap_len = OID_LENGTH(objid_snmptrap);
+
+/*
+ * our initialization routine
+ * (to get called, the function name must match init_FILENAME()
+ */
+void
+init_EoCAlarmsAndTraps (void)
+{
+ int value = LIBSPID_FALSE;
+ DEBUGMSGTL (("EoCAlarmsAndTraps",
+ "initializing (setting callback alarm)\n"));
+
+ if (LIBSPID_SUCCESS != libspid_system_nscrtv_eponeoc_mod_eoc (&value))
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: error getting mod eoc version!\n");
+ }
+
+ if (LIBSPID_FALSE == value)
+ {
+
+
+ /* make sure current alarm and trap files are empty at initialization */
+ if (0 != clearCurrentAlarms ())
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: error clearing current alarm file!\n");
+ }
+
+ if (0 != clearCurrentTraps ())
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: error clearing current traps file!\n");
+ }
+
+ /* reset all alarm states to nominal */
+ if (0 != resetAllAlarmPropertyState ())
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: error resetting alarm states!\n");
+ }
+
+ /* make sure log list is empty at initialization */
+ clearAlarmLogList ();
+
+ /* initialize old contents of analog alarm entries */
+ memset (old_analog_alarm_entries, 0x0,
+ sizeof (old_analog_alarm_entries));
+
+ snmp_alarm_register (ALARM_CHECK_FREQUENCY, /* in seconds */
+ SA_REPEAT, /* callback is called repeatedly */
+ alarm_callback, /* our callback */
+ NULL /* no callback data needed */
+ );
+ }
+}
+
+/* callback function used for alarm registration */
+void
+alarm_callback (unsigned int clientreg, void *clientarg)
+{
+ if (alarmsEnabled ())
+ checkAllAlarms ();
+}
+
+/*
+ * function returns 1 if trap generation status is enabled
+ * 0 if it is disabled
+ */
+int
+trapsEnabled ()
+{
+ int trap_status;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ if (LIBSPID_SUCCESS != libspid_config_read_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_TRAP_ENABLE,
+ buffer,
+ LIBSPID_LINE_MAX_LEN))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error reading trap enable\n");
+ /* trap generation status set to disabled */
+ trap_status = 0;
+ }
+ else
+ {
+ /* parse trap enable settings from buffer */
+ if (!strncmp (buffer, LIBSPID_SNMP_CONF_VALUE_YES,
+ strlen (LIBSPID_SNMP_CONF_VALUE_YES)))
+ trap_status = 1;
+ else
+ trap_status = 0; /* disabled trap status is presumed as default */
+ }
+
+ return trap_status;
+}
+
+/*
+ * function returns 1 if alarm detection is enabled
+ * or enabled with regeneration, and 0 otherwise
+ */
+int
+alarmsEnabled ()
+{
+ admin_alarm_detect_t alarm_detect;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ if (LIBSPID_SUCCESS != libspid_config_read_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ENABLE,
+ buffer,
+ LIBSPID_LINE_MAX_LEN))
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: error reading alarm detection\n");
+ /* AlarmDetection set to disabled */
+ alarm_detect = ADMIN_ALARM_DETECT_DISABLED;
+ }
+ else
+ {
+ /* parse alarm detection settings from buffer */
+ if (!strncmp (buffer, LIBSPID_SNMP_CONF_VALUE_YES,
+ strlen (LIBSPID_SNMP_CONF_VALUE_YES)))
+ {
+ alarm_detect = ADMIN_ALARM_DETECT_ENABLED;
+ }
+ else if (!strncmp (buffer, LIBSPID_SNMP_CONF_VALUE_REGENERATE,
+ strlen (LIBSPID_SNMP_CONF_VALUE_REGENERATE)))
+ {
+ alarm_detect = ADMIN_ALARM_DETECT_REGENERATE;
+ }
+ else
+ {
+ /* disabled alarm detection is presumed as default */
+ alarm_detect = ADMIN_ALARM_DETECT_DISABLED;
+ }
+ }
+
+ if ((alarm_detect == ADMIN_ALARM_DETECT_ENABLED)
+ || (alarm_detect == ADMIN_ALARM_DETECT_REGENERATE))
+ return 1;
+
+ return 0;
+}
+
+
+void
+checkAllAlarms ()
+{
+
+ /* discrete alarm entries read from config file */
+ libspid_eoc_discrete_alarm_entry_t
+ discrete_alarm_entries[LIBSPID_DISCRETE_ALARMS_MAX_NUM];
+ int discrete_alarm_count;
+ /* analog alarm entries read from config file */
+ libspid_eoc_analog_alarm_entry_t
+ analog_alarm_entries[LIBSPID_ANALOG_ALARMS_MAX_NUM];
+ int analog_alarm_count;
+ /* old contents of current alarm entries read from config file */
+ libspid_eoc_current_alarm_entry_t
+ old_curr_alarm_entries[LIBSPID_CURRENT_ALARMS_MAX_NUM];
+ int old_curr_alarm_count;
+
+
+ int i;
+
+ memset (discrete_alarm_entries, 0x0, sizeof (discrete_alarm_entries));
+ memset (analog_alarm_entries, 0x0, sizeof (analog_alarm_entries));
+ memset (old_curr_alarm_entries, 0x0, sizeof (old_curr_alarm_entries));
+
+
+ /* get current contents of analog alarm config file */
+ if (LIBSPID_SUCCESS != libspid_eoc_analog_alarm_get_list (
+ analog_alarm_entries,
+ &analog_alarm_count))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: "
+ "analog alarm config file not read correctly\n");
+ analog_alarm_count = 0;
+ }
+ /* get current contents of discrete alarm config file */
+ if (LIBSPID_SUCCESS != libspid_eoc_discrete_alarm_get_list (
+ discrete_alarm_entries,
+ &discrete_alarm_count))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: "
+ "discrete alarm config file not read correctly\n");
+ discrete_alarm_count = 0;
+ }
+ /* get old contents of current alarm config file */
+ if (LIBSPID_SUCCESS != libspid_eoc_current_alarm_get_list (
+ old_curr_alarm_entries,
+ &old_curr_alarm_count))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: old current alarm config file "
+ "not read correctly\n");
+ old_curr_alarm_count = 0;
+ }
+
+ /* clear old contents of current alarm file */
+ if (0 != clearCurrentAlarms ())
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: "
+ "error clearing old current alarm file!\n");
+ }
+
+ /* reset maximum current alarm counter */
+ max_alarm_count = 0;
+
+ /* iterate through list of defined analog alarms
+ for each alarm entry, check if it has been triggered */
+ for (i = 0; i < analog_alarm_count; i++)
+ {
+ /* check if current alarm OID matches defined analog alarm OID
+ if so, check if alarm has been triggered */
+ if (0 != handleAnalogAlarmOID (&analog_alarm_entries[i],
+ &old_analog_alarm_entries[i],
+ old_curr_alarm_entries,
+ old_curr_alarm_count))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: "
+ "error handling analog alarm with OID: %s",
+ analog_alarm_entries[i].oid);
+ }
+ /* store current analog alarms as old analog alarms */
+ old_analog_alarm_entries[i] = analog_alarm_entries[i];
+ }
+
+ /* iterate through list of defined discrete alarms
+ for each alarm entry, check if it has been triggered */
+ for (i = 0; i < discrete_alarm_count; i++)
+ {
+ /* check if current alarm OID matches defined discrete alarm OID
+ if so, check if alarm has been triggered */
+ if (0 != handleDiscreteAlarmOID (&discrete_alarm_entries[i]))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: "
+ "error handling discrete alarm with OID: %s",
+ discrete_alarm_entries[i].oid);
+ }
+ }
+
+}
+
+int
+handleAnalogAlarmOID (libspid_eoc_analog_alarm_entry_t *analog_alarm,
+ libspid_eoc_analog_alarm_entry_t *old_analog_alarm,
+ libspid_eoc_current_alarm_entry_t *old_curr_alarms,
+ int old_curr_alarm_count)
+{
+
+ /* declarations for calls to libspid */
+ int mac_address_count;
+ char key_buffer[LIBSPID_KEY_MAX_LEN] = {0};
+ const char delimiters[2] = LIBSPID_ONLINE_INFO_DELIMITER "\0";
+ char buffer[LIBSPID_LINE_MAX_LEN] = {0};
+ unsigned int elt_number = LIBSPID_ELT_MAX_NB;
+ char *elt_buffer[LIBSPID_ELT_MAX_NB] = {0};
+ libspid_eoc_wl_entry_t wl_entry;
+ int tei;
+ char slave_analog_alarm_complete_oid[LIBSPID_OID_MAX_LEN];
+
+ long modEoCOnlineCNURFUpstreamAttenuation = 0;
+ long modEoCOnlineCNURFDownstreamQuality = 0;
+ long modEoCOnlineCNURFUpstreamQuality = 0;
+ long modEoCOnlineCNUPhyDownstreamRate = 0;
+ long modEoCOnlineCNUPhyUpstreamRate = 0;
+
+ int modEoCCLTAdminInternalTemperature = 0;
+ libspid_eoc_alarm_state_t last_analog_state;
+
+ /* enable bitfield used to store information on active triggers */
+ libspid_eoc_analog_alarm_enable_t active_triggers;
+
+
+ /* check input parameters */
+ if ((analog_alarm == NULL) || (old_analog_alarm == NULL)
+ || (old_curr_alarms == NULL))
+ return -1;
+
+ /* check OIDs */
+ if ((analog_alarm->oid == NULL)
+ || (old_analog_alarm->oid == NULL))
+ return -1;
+
+ memset (&wl_entry, 0, sizeof (wl_entry));
+
+ /* check if alarm with this OID has previously been triggered,
+ also considering old analog alarm settings */
+ checkTriggeredAnalogOID (analog_alarm, old_analog_alarm,
+ &active_triggers, old_curr_alarms,
+ old_curr_alarm_count);
+
+ /* handle modEoCOnlineCNURFUpstreamAttenuation alarm */
+ if (!strcmp (analog_alarm->oid,
+ MODEOCONLINECNURFUPSTREAMATTENUATION_OID_STR)
+ || !strcmp (analog_alarm->oid,
+ MODEOCONLINECNURFUPSTREAMATTENUATION_OID_STR_ALT))
+ {
+
+ /* reset state of lastly set alarm */
+ last_analog_state = LIBSPID_AS_DISABLE;
+
+ for (mac_address_count = 0;
+ mac_address_count < LIBSPID_ONLINE_INFO_LINE_MAX_NB;
+ mac_address_count++)
+ {
+ /* read line from file with online information
+ and extract MAC address as key */
+ if (LIBSPID_SUCCESS != libspid_config_read_line (
+ LIBSPID_ONLINE_INFO_PATH,
+ delimiters, key_buffer,
+ &elt_number, elt_buffer,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps:handleAnalogAlarmOID: "
+ "error reading online entry "
+ "for MAC address_count: %d\n",
+ mac_address_count);
+ return -1;
+ }
+
+ /* check that eof is not reached */
+ if (!strcmp (key_buffer, ""))
+ {
+ DEBUGMSGTL(("EoCAlarmsAndTraps:handleAnalogAlarmOID",
+ "eof reached for mac_address_count : %d \n",
+ mac_address_count));
+ break;
+ }
+
+ /* set number of remaining line elements to extract */
+ elt_number = LIBSPID_ONLINE_INFO_HEADER_LENGTH;
+
+
+ /*
+ * parse remainder of the line into elements for rows
+ */
+
+ if (LIBSPID_SUCCESS != libspid_config_read_line (
+ LIBSPID_ONLINE_INFO_PATH,
+ delimiters, key_buffer,
+ &elt_number, elt_buffer,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_line error\n");
+ return -1;
+ }
+
+ /* copy current working buffer to buffer for next MAC address */
+ strcpy (key_buffer, buffer);
+
+
+ if (1 != sscanf (elt_buffer[5], "%d",
+ &modEoCOnlineCNURFUpstreamAttenuation))
+ {
+ snmp_log (LOG_ERR, "error parsing upstream attenuation\n");
+ return -1;
+ }
+
+
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_get (key_buffer, &wl_entry))
+ {
+ snmp_log (LOG_ERR, "EoCAlarmsAndTraps: Cannot read current "
+ "online entry from white list\n");
+ continue;
+ }
+ else
+ {
+ /* parse TEI from white list entry */
+ if (1 != sscanf (wl_entry.tei, "%d", &tei))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: parsing TEI "
+ "from white list entry failed\n");
+ return -1;
+ }
+ }
+
+ /* use current alarm OID to build sub-OID
+ for modEoCOnlineCNURFUpstreamAttenuation entry
+ with current slave index */
+ memset (slave_analog_alarm_complete_oid, 0x0,
+ sizeof (slave_analog_alarm_complete_oid));
+ sprintf (slave_analog_alarm_complete_oid, "%s.0.%d",
+ MODEOCONLINECNURFUPSTREAMATTENUATION_OID_STR, tei-2);
+
+ /* check if alarm needs to be triggered and if so,
+ perform necessary actions to register alarm */
+ if (0 != checkAnalogAlarm (analog_alarm, &active_triggers,
+ modEoCOnlineCNURFUpstreamAttenuation,
+ slave_analog_alarm_complete_oid))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error checking "
+ "UpstreamAttenuation analog alarm for OID: "
+ "%s", slave_analog_alarm_complete_oid);
+ return -1;
+ }
+
+ /* if current slave triggered an alarm,
+ update state of lastly set alarm */
+ if (LIBSPID_AS_DISABLE != analog_alarm->state)
+ last_analog_state = analog_alarm->state;
+ }
+
+ /* set alarm state to lastly updated state */
+ analog_alarm->state = last_analog_state;
+
+ /* update modEoCOnlineCNURFUpstreamAttenuation alarm entry
+ in analog alarm configuration file */
+ if (LIBSPID_SUCCESS != libspid_eoc_analog_alarm_set (
+ MODEOCONLINECNURFUPSTREAMATTENUATION_OID_STR,
+ analog_alarm))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error updating "
+ "UpstreamAttenuation analog alarm entry "
+ "in configuration file!\n");
+ return -1;
+ }
+ }
+
+ /* handle modEoCOnlineCNURFDownstreamQuality alarm */
+ if (!strcmp (analog_alarm->oid, MODEOCONLINECNURFDOWNSTREAMQUALITY_OID_STR)
+ || !strcmp (analog_alarm->oid,
+ MODEOCONLINECNURFDOWNSTREAMQUALITY_OID_STR_ALT))
+ {
+
+ /* reset state of lastly set alarm */
+ last_analog_state = LIBSPID_AS_DISABLE;
+
+ for (mac_address_count = 0;
+ mac_address_count < LIBSPID_ONLINE_INFO_LINE_MAX_NB;
+ mac_address_count++)
+ {
+ /* read line from file with online information
+ and extract MAC address as key */
+ if (LIBSPID_SUCCESS != libspid_config_read_line (
+ LIBSPID_ONLINE_INFO_PATH, delimiters,
+ key_buffer, &elt_number, elt_buffer,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps:handleAnalogAlarmOID: "
+ "error reading online entry "
+ "for MAC address_count: %d\n",
+ mac_address_count);
+ return -1;
+ }
+
+ /* check that eof is not reached */
+ if (!strcmp (key_buffer, ""))
+ {
+ DEBUGMSGTL(("EoCAlarmsAndTraps:handleAnalogAlarmOID",
+ "eof reached for mac_address_count : %d \n",
+ mac_address_count));
+ break;
+ }
+
+ /* set number of remaining line elements to extract */
+ elt_number = LIBSPID_ONLINE_INFO_HEADER_LENGTH;
+
+
+ /* parse remainder of the line into elements for rows */
+
+ if (LIBSPID_SUCCESS != libspid_config_read_line (
+ LIBSPID_ONLINE_INFO_PATH, delimiters,
+ key_buffer, &elt_number, elt_buffer,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_line error\n");
+ return -1;
+ }
+
+ /* copy current working buffer to buffer for next MAC address */
+ strcpy (key_buffer, buffer);
+
+ if (1 != sscanf (elt_buffer[6], "%d",
+ &modEoCOnlineCNURFDownstreamQuality))
+ {
+ snmp_log (LOG_ERR, "error parsing upstream attenuation\n");
+ return -1;
+ }
+
+ /* verify that downstream quality does not exceed 100 percent */
+ if (modEoCOnlineCNURFDownstreamQuality > 100)
+ modEoCOnlineCNURFDownstreamQuality = 100;
+
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_get (key_buffer, &wl_entry))
+ {
+ snmp_log (LOG_ERR, "EoCAlarmsAndTraps: Cannot read "
+ "current online entry from white list\n");
+ continue;
+ }
+ else
+ {
+ /* parse TEI from white list entry */
+ if (1 != sscanf (wl_entry.tei, "%d", &tei))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: parsing TEI "
+ "from white list entry failed\n");
+ return -1;
+ }
+ }
+
+ /* use current alarm OID to build sub-OID for
+ modEoCOnlineCNURFDownstreamQuality entry
+ with current slave index */
+ memset (slave_analog_alarm_complete_oid, 0x0,
+ sizeof (slave_analog_alarm_complete_oid));
+ sprintf (slave_analog_alarm_complete_oid, "%s.0.%d",
+ MODEOCONLINECNURFDOWNSTREAMQUALITY_OID_STR, tei-2);
+
+ /* check if alarm needs to be triggered and if so,
+ perform necessary actions to register alarm */
+ if (0 != checkAnalogAlarm (analog_alarm,
+ &active_triggers,
+ modEoCOnlineCNURFDownstreamQuality,
+ slave_analog_alarm_complete_oid))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error checking "
+ "DownstreamQuality analog alarm for OID: "
+ "%s", slave_analog_alarm_complete_oid);
+ return -1;
+ }
+
+ /* if current slave triggered an alarm,
+ update state of lastly set alarm */
+ if (LIBSPID_AS_DISABLE != analog_alarm->state)
+ last_analog_state = analog_alarm->state;
+ }
+
+ /* set alarm state to lastly updated state */
+ analog_alarm->state = last_analog_state;
+
+ /* update modEoCOnlineCNURFDownstreamQuality alarm entry
+ in analog alarm configuration file */
+ if (LIBSPID_SUCCESS != libspid_eoc_analog_alarm_set (
+ MODEOCONLINECNURFDOWNSTREAMQUALITY_OID_STR,
+ analog_alarm))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error updating "
+ "DownstreamQuality analog alarm entry "
+ "in configuration file!\n");
+ return -1;
+ }
+ }
+
+ /* handle modEoCOnlineCNURFUpstreamQuality alarm */
+ if (!strcmp (analog_alarm->oid, MODEOCONLINECNURFUPSTREAMQUALITY_OID_STR)
+ || !strcmp (analog_alarm->oid,
+ MODEOCONLINECNURFUPSTREAMQUALITY_OID_STR_ALT))
+ {
+ /* reset state of lastly set alarm */
+ last_analog_state = LIBSPID_AS_DISABLE;
+
+ for (mac_address_count = 0;
+ mac_address_count < LIBSPID_ONLINE_INFO_LINE_MAX_NB;
+ mac_address_count++)
+ {
+ /* read line from file with online information
+ and extract MAC address as key */
+ if (LIBSPID_SUCCESS != libspid_config_read_line (
+ LIBSPID_ONLINE_INFO_PATH, delimiters,
+ key_buffer, &elt_number, elt_buffer,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps:handleAnalogAlarmOID: "
+ "error reading online entry for "
+ "MAC address count: %d\n",
+ mac_address_count);
+ return -1;
+ }
+
+ /* check that eof is not reached */
+ if (!strcmp (key_buffer, ""))
+ {
+ DEBUGMSGTL(("EoCAlarmsAndTraps:handleAnalogAlarmOID",
+ "eof reached for mac_address_count : %d \n",
+ mac_address_count));
+ break;
+ }
+
+ /* set number of remaining line elements to extract */
+ elt_number = LIBSPID_ONLINE_INFO_HEADER_LENGTH;
+
+
+ /*
+ * parse remainder of the line into elements for rows
+ */
+
+ if (LIBSPID_SUCCESS != libspid_config_read_line (
+ LIBSPID_ONLINE_INFO_PATH, delimiters,
+ key_buffer, &elt_number, elt_buffer,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_line error\n");
+ return -1;
+ }
+
+ /* copy current working buffer to buffer for next MAC address */
+ strcpy (key_buffer, buffer);
+
+ if (1 != sscanf (elt_buffer[7], "%d",
+ &modEoCOnlineCNURFUpstreamQuality))
+ {
+ snmp_log (LOG_ERR, "error parsing upstream quality\n");
+ return -1;
+ }
+
+ /* verify that upstream quality does not exceed 100 percent */
+ if (modEoCOnlineCNURFUpstreamQuality > 100)
+ modEoCOnlineCNURFUpstreamQuality = 100;
+
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_get (key_buffer, &wl_entry))
+ {
+ snmp_log (LOG_ERR, "EoCAlarmsAndTraps: Cannot read current "
+ "online entry from white list\n");
+ continue;
+ }
+ else
+ {
+ /* parse TEI from white list entry */
+ if (1 != sscanf (wl_entry.tei, "%d", &tei))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: parsing TEI "
+ "from white list entry failed\n");
+ return -1;
+ }
+ }
+
+ /* use current alarm OID to build sub-OID for
+ modEoCOnlineCNURFUpstreamQuality entry
+ with current slave index */
+ memset (slave_analog_alarm_complete_oid, 0x0,
+ sizeof (slave_analog_alarm_complete_oid));
+ sprintf (slave_analog_alarm_complete_oid, "%s.0.%d",
+ MODEOCONLINECNURFUPSTREAMQUALITY_OID_STR, tei-2);
+
+ /* check if alarm needs to be triggered and if so,
+ perform necessary actions to register alarm */
+ if (0 != checkAnalogAlarm (analog_alarm,
+ &active_triggers,
+ modEoCOnlineCNURFUpstreamQuality,
+ slave_analog_alarm_complete_oid))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error checking "
+ "UpstreamQuality analog alarm for OID: %s",
+ slave_analog_alarm_complete_oid);
+ return -1;
+ }
+
+ /* if current slave triggered an alarm,
+ update state of lastly set alarm */
+ if (LIBSPID_AS_DISABLE != analog_alarm->state)
+ last_analog_state = analog_alarm->state;
+ }
+
+ /* set alarm state to lastly updated state */
+ analog_alarm->state = last_analog_state;
+
+ /* update modEoCOnlineCNURFUpstreamQuality alarm entry
+ in analog alarm configuration file */
+ if (LIBSPID_SUCCESS != libspid_eoc_analog_alarm_set (
+ MODEOCONLINECNURFUPSTREAMQUALITY_OID_STR, analog_alarm))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error updating "
+ "UpstreamQuality analog alarm entry "
+ "in configuration file!\n");
+ return -1;
+ }
+
+ }
+
+ /* handle modEoCOnlineCNUPhyDownstreamRate alarm */
+ if (!strcmp (analog_alarm->oid, MODEOCONLINECNUPHYDOWNSTREAMRATE_OID_STR)
+ || !strcmp (analog_alarm->oid,
+ MODEOCONLINECNUPHYDOWNSTREAMRATE_OID_STR_ALT))
+ {
+ /* reset state of lastly set alarm */
+ last_analog_state = LIBSPID_AS_DISABLE;
+
+ for (mac_address_count = 0;
+ mac_address_count < LIBSPID_ONLINE_INFO_LINE_MAX_NB;
+ mac_address_count++)
+ {
+ /* read line from file with online information
+ and extract MAC address as key */
+ if (LIBSPID_SUCCESS != libspid_config_read_line (
+ LIBSPID_ONLINE_INFO_PATH, delimiters,
+ key_buffer, &elt_number, elt_buffer,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps:handleAnalogAlarmOID: "
+ "error reading online entry for "
+ "MAC address count: %d\n",
+ mac_address_count);
+ return -1;
+ }
+
+ /* check that eof is not reached */
+ if (!strcmp (key_buffer, ""))
+ {
+ DEBUGMSGTL(("EoCAlarmsAndTraps:handleAnalogAlarmOID",
+ "eof reached for mac_address_count : %d \n",
+ mac_address_count));
+ break;
+ }
+
+ /* set number of remaining line elements to extract */
+ elt_number = LIBSPID_ONLINE_INFO_HEADER_LENGTH;
+
+
+ /*
+ * parse remainder of the line into elements for rows
+ */
+
+ if (LIBSPID_SUCCESS != libspid_config_read_line (
+ LIBSPID_ONLINE_INFO_PATH, delimiters,
+ key_buffer, &elt_number, elt_buffer,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_line error\n");
+ return -1;
+ }
+
+ /* copy current working buffer to buffer for next MAC address */
+ strcpy (key_buffer, buffer);
+
+ if (1 != sscanf (elt_buffer[8], "%d",
+ &modEoCOnlineCNUPhyDownstreamRate))
+ {
+ snmp_log (LOG_ERR, "error parsing downstream rate\n");
+ return -1;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_get (key_buffer, &wl_entry))
+ {
+ snmp_log (LOG_ERR, "EoCAlarmsAndTraps: Cannot read current "
+ "online entry from white list\n");
+ continue;
+ }
+ else
+ {
+ /* parse TEI from white list entry */
+ if (1 != sscanf (wl_entry.tei, "%d", &tei))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: parsing TEI "
+ "from white list entry failed\n");
+ return -1;
+ }
+ }
+
+ /* use current alarm OID to build sub-OID for
+ modEoCOnlineCNUPhyDownstreamRate entry
+ with current slave index */
+ memset (slave_analog_alarm_complete_oid, 0x0,
+ sizeof (slave_analog_alarm_complete_oid));
+ sprintf (slave_analog_alarm_complete_oid, "%s.0.%d",
+ MODEOCONLINECNUPHYDOWNSTREAMRATE_OID_STR, tei-2);
+
+
+ /* check if alarm needs to be triggered and if so,
+ perform necessary actions to register alarm */
+ if (0 != checkAnalogAlarm (analog_alarm, &active_triggers,
+ modEoCOnlineCNUPhyDownstreamRate,
+ slave_analog_alarm_complete_oid))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error checking "
+ "DownstreamRate analog alarm for OID: %s",
+ slave_analog_alarm_complete_oid);
+ return -1;
+ }
+
+ /* if current slave triggered an alarm,
+ update state of lastly set alarm */
+ if (LIBSPID_AS_DISABLE != analog_alarm->state)
+ last_analog_state = analog_alarm->state;
+ }
+
+ /* set alarm state to lastly updated state */
+ analog_alarm->state = last_analog_state;
+
+ /* update modEoCOnlineCNUPhyDownstreamRate alarm entry
+ in analog alarm configuration file */
+ if (LIBSPID_SUCCESS != libspid_eoc_analog_alarm_set (
+ MODEOCONLINECNUPHYDOWNSTREAMRATE_OID_STR,
+ analog_alarm))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error updating "
+ "DownstreamRate analog alarm entry "
+ "in configuration file!\n");
+ return -1;
+ }
+ }
+
+ /* handle modEoCOnlineCNUPhyUpstreamRate alarm */
+ if (!strcmp (analog_alarm->oid, MODEOCONLINECNUPHYUPSTREAMRATE_OID_STR)
+ || !strcmp (analog_alarm->oid,
+ MODEOCONLINECNUPHYUPSTREAMRATE_OID_STR_ALT))
+ {
+ /* reset state of lastly set alarm */
+ last_analog_state = LIBSPID_AS_DISABLE;
+
+ for (mac_address_count = 0;
+ mac_address_count < LIBSPID_ONLINE_INFO_LINE_MAX_NB;
+ mac_address_count++)
+ {
+ /* read line from file with online information
+ and extract MAC address as key */
+ if (LIBSPID_SUCCESS != libspid_config_read_line (
+ LIBSPID_ONLINE_INFO_PATH, delimiters,
+ key_buffer, &elt_number, elt_buffer,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps:handleAnalogAlarmOID: "
+ "error reading online entry for "
+ "MAC address count: %d\n",
+ mac_address_count);
+ return -1;
+ }
+
+ /* check that eof is not reached */
+ if (!strcmp (key_buffer, ""))
+ {
+ DEBUGMSGTL(("EoCAlarmsAndTraps:handleAnalogAlarmOID",
+ "eof reached for mac_address_count : %d \n",
+ mac_address_count));
+ break;
+ }
+
+ /* set number of remaining line elements to extract */
+ elt_number = LIBSPID_ONLINE_INFO_HEADER_LENGTH;
+
+
+ /*
+ * parse remainder of the line into elements for rows
+ */
+
+ if (LIBSPID_SUCCESS != libspid_config_read_line (
+ LIBSPID_ONLINE_INFO_PATH, delimiters,
+ key_buffer, &elt_number, elt_buffer,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_line error\n");
+ return -1;
+ }
+
+ /* copy current working buffer to buffer for next MAC address */
+ strcpy (key_buffer, buffer);
+
+ if (1 != sscanf (elt_buffer[9], "%d",
+ &modEoCOnlineCNUPhyUpstreamRate))
+ {
+ snmp_log (LOG_ERR, "error parsing upstream rate\n");
+ return -1;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_get (key_buffer, &wl_entry))
+ {
+ snmp_log (LOG_ERR, "EoCAlarmsAndTraps: Cannot read current "
+ "online entry from white list\n");
+ continue;
+ }
+ else
+ {
+ /* parse TEI from white list entry */
+ if (1 != sscanf (wl_entry.tei, "%d", &tei))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: parsing TEI "
+ "from white list entry failed\n");
+ return -1;
+ }
+ }
+
+ /* use current alarm OID to build sub-OID for
+ modEoCOnlineCNUPhyUpstreamRate entry with current slave index */
+ memset (slave_analog_alarm_complete_oid, 0x0,
+ sizeof (slave_analog_alarm_complete_oid));
+ sprintf (slave_analog_alarm_complete_oid, "%s.0.%d",
+ MODEOCONLINECNUPHYUPSTREAMRATE_OID_STR, tei-2);
+
+ /* check if alarm needs to be triggered and if so,
+ perform necessary actions to register alarm */
+ if (0 != checkAnalogAlarm (analog_alarm, &active_triggers,
+ modEoCOnlineCNUPhyUpstreamRate,
+ slave_analog_alarm_complete_oid))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error checking "
+ "UpstreamRate analog alarm for OID: %s",
+ slave_analog_alarm_complete_oid);
+ return -1;
+ }
+
+ /* if current slave triggered an alarm,
+ update state of lastly set alarm */
+ if (LIBSPID_AS_DISABLE != analog_alarm->state)
+ last_analog_state = analog_alarm->state;
+ }
+
+ /* set alarm state to lastly updated state */
+ analog_alarm->state = last_analog_state;
+
+ /* update modEoCOnlineCNUPhyUpstreamRate alarm entry
+ in analog alarm configuration file */
+ if (LIBSPID_SUCCESS != libspid_eoc_analog_alarm_set (
+ MODEOCONLINECNUPHYUPSTREAMRATE_OID_STR,
+ analog_alarm))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error updating "
+ "UpstreamRate analog alarm entry "
+ "in configuration file!\n");
+ return -1;
+ }
+ }
+
+ /* handle modEoCCLTAdminInternalTemperature alarm */
+ if (!strcmp(analog_alarm->oid, MODEOCCLTADMININTERNALTEMPERATURE_OID_STR) || !strcmp(analog_alarm->oid, MODEOCCLTADMININTERNALTEMPERATURE_OID_STR_ALT)){
+ /* get current value of internal temperature */
+ if (LIBSPID_SUCCESS != libspid_hardware_get_temperature (&modEoCCLTAdminInternalTemperature)){
+ syslog(LOG_DEBUG, "EoCAlarmsAndTraps:handleAnalogAlarmOID: error obtaining temperature value for modEoCCLTAdminInternalTemperature alarm\n");
+ return -1;
+ }
+
+ /* check if alarm needs to be triggered and if so, perform necessary actions to register alarm */
+ if (0 != checkAnalogAlarm(analog_alarm, &active_triggers, modEoCCLTAdminInternalTemperature, analog_alarm->oid)){
+ syslog(LOG_DEBUG, "EoCAlarmsAndTraps: error checking InternalTemperature analog alarm for OID: %s", analog_alarm->oid);
+ return -1;
+ }
+
+ /* update modEoCCLTAdminInternalTemperature alarm entry in analog alarm configuration file */
+ if (LIBSPID_SUCCESS != libspid_eoc_analog_alarm_set(MODEOCCLTADMININTERNALTEMPERATURE_OID_STR, analog_alarm)){
+ syslog(LOG_DEBUG, "EoCAlarmsAndTraps: error updating InternalTemperature analog alarm entry in configuration file!\n");
+ return -1;
+ }
+
+ }
+
+
+ return 0;
+}
+
+
+int
+handleDiscreteAlarmOID (libspid_eoc_discrete_alarm_entry_t *discrete_alarm)
+{
+
+ /* declarations for modEoCCNUWhiteListRegisterOnlineState alarm */
+ char slave_online_state_oid[LIBSPID_OID_MAX_LEN];
+ int tei;
+ libspid_eoc_wl_entry_t wl_entries[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ int slave_count;
+ int i;
+ int tmp;
+ int slave_online_state;
+ /* declarations for calls to libspid */
+ const char online_delimiters[2] = LIBSPID_ONLINE_INFO_DELIMITER "\0";
+ char online_buffer[LIBSPID_LINE_MAX_LEN] = {0};
+ unsigned int online_elt_number = LIBSPID_ELT_MAX_NB;
+ char *online_elt_buffer[LIBSPID_ELT_MAX_NB] = {0};
+
+ libspid_eoc_tamper_status_t modEoCCLTAdminTamperStatus;
+
+ /* check input parameters */
+ if (discrete_alarm == NULL)
+ return -1;
+
+ /* check OID */
+ if (discrete_alarm->oid == NULL)
+ return -1;
+
+ memset(wl_entries, 0x0, sizeof(wl_entries));
+
+ /* handle modEoCCNUWhiteListRegisterOnlineState alarm */
+ if (!strcmp (discrete_alarm->oid,
+ MODEOCCNUWHITELISTREGISTERONLINESTATE_OID_STR)
+ || !strcmp (discrete_alarm->oid,
+ MODEOCCNUWHITELISTREGISTERONLINESTATE_OID_STR_ALT))
+ {
+ /* get current contents of white list config file */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_get_list (wl_entries,
+ &slave_count))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: White list "
+ "config file not read correctly\n");
+ return -1;
+ }
+
+ /* iterate through white list entries and check if
+ alarm has to be triggered for each slave */
+ for (i=0; i < slave_count; i++)
+ {
+ /* parse TEI from white list entry */
+ if (1 != sscanf (wl_entries[i].tei, "%d", &tei))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: parsing TEI "
+ "from white list entry failed\n");
+ return -1;
+ }
+
+ /* obtain slave online state by reading line indexed by
+ MAC address from online information file */
+ if (LIBSPID_SUCCESS == libspid_config_read_line (
+ LIBSPID_ONLINE_INFO_PATH, online_delimiters,
+ wl_entries[i].mac_addr, &online_elt_number,
+ online_elt_buffer, online_buffer,
+ LIBSPID_LINE_MAX_LEN))
+ slave_online_state = 1;
+ else
+ slave_online_state = 0;
+
+
+ /* use current alarm OID to build sub-OID for
+ modEoCCNUWhiteListRegisterOnlineState entry
+ with current slave index */
+ memset (slave_online_state_oid, 0x0,
+ sizeof (slave_online_state_oid));
+
+ sprintf (slave_online_state_oid, "%s.%d",
+ MODEOCCNUWHITELISTREGISTERONLINESTATE_OID_STR, tei-2);
+
+ /* check if alarm needs to be triggered and if so,
+ perform necessary actions to register alarm */
+ if (0 != checkDiscreteAlarm (discrete_alarm, slave_online_state,
+ slave_online_state_oid))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error checking "
+ "OnlineState discrete alarm for OID: %s",
+ slave_online_state_oid);
+ return -1;
+ }
+ }
+ }
+
+ /* handle modEoCCLTAdminTamperStatus alarm */
+ if (!strcmp(discrete_alarm->oid, MODEOCCLTADMINTAMPERSTATUS_OID_STR)
+ || !strcmp(discrete_alarm->oid,
+ MODEOCCLTADMINTAMPERSTATUS_OID_STR_ALT))
+ {
+ /* get current tamper status */
+ if (LIBSPID_SUCCESS
+ != libspid_hardware_get_tamper (&modEoCCLTAdminTamperStatus))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps:handleDiscreteAlarmOID: "
+ "error obtaining value for "
+ "modEoCCLTAdminTamperStatus alarm\n");
+ return -1;
+ }
+
+ /* check if alarm needs to be triggered and if so,
+ perform necessary actions to register alarm */
+ if (0 != checkDiscreteAlarm (discrete_alarm,
+ modEoCCLTAdminTamperStatus,
+ discrete_alarm->oid))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error checking "
+ "TamperStatus discrete alarm for OID: %s",
+ discrete_alarm->oid);
+ return -1;
+ }
+
+ /* update modEoCCLTAdminTamperStatus alarm entry
+ in discrete alarm configuration file */
+ if (LIBSPID_SUCCESS
+ != libspid_eoc_discrete_alarm_set
+ (MODEOCCLTADMINTAMPERSTATUS_OID_STR, discrete_alarm))
+ {
+ syslog(LOG_DEBUG, "EoCAlarmsAndTraps: error updating "
+ "TamperStatus discrete alarm entry "
+ "in configuration file!\n");
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+int
+checkAnalogAlarm (libspid_eoc_analog_alarm_entry_t *analog_alarm,
+ libspid_eoc_analog_alarm_enable_t *active_triggers,
+ int value, char *suboid)
+{
+ libspid_boolean_t analog_alarm_detected = LIBSPID_FALSE;
+
+
+ /* check if LO alarm has already been generated */
+ /* if not, generate alarm if condition for activation is met,
+ otherwise generate if removal condition is not met */
+ if (active_triggers->LO_alarm_enable == 0)
+ {
+ if (analog_alarm->enable.LO_alarm_enable == 1
+ && value < (analog_alarm->lo - analog_alarm->deadband))
+ {
+ analog_alarm->state = LIBSPID_AS_ANALOG_LO;
+ /* register alarm in current alarm info file */
+ if (0 != registerAlarm (suboid, analog_alarm->state, value))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error registering "
+ "LO analog alarm!\n");
+ return -1;
+ }
+
+ active_triggers->LO_alarm_enable = 1;
+ analog_alarm_detected = LIBSPID_TRUE;
+ }
+ }
+ else
+ {
+ if (analog_alarm->enable.LO_alarm_enable == 1
+ && value < (analog_alarm->lo + analog_alarm->deadband))
+ {
+ analog_alarm->state = LIBSPID_AS_ANALOG_LO;
+ /* register alarm in current alarm info file */
+ if (0 != registerAlarm (suboid, analog_alarm->state, value))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error registering "
+ "LO analog alarm!\n");
+ return -1;
+ }
+
+ analog_alarm_detected = LIBSPID_TRUE;
+ }
+ }
+
+ /* check if LOLO alarm has already been generated */
+ /* if not, generate alarm if condition for activation is met,
+ otherwise generate if removal condition is not met */
+ if (active_triggers->LOLO_alarm_enable == 0)
+ {
+ if (analog_alarm->enable.LOLO_alarm_enable == 1
+ && value < (analog_alarm->lolo - analog_alarm->deadband))
+ {
+ analog_alarm->state = LIBSPID_AS_ANALOG_LOLO;
+ /* register alarm in current alarm info file */
+ if (0 != registerAlarm (suboid, analog_alarm->state, value))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error registering "
+ "LOLO analog alarm!\n");
+ return -1;
+ }
+
+ active_triggers->LOLO_alarm_enable = 1;
+ analog_alarm_detected = LIBSPID_TRUE;
+ }
+ }
+ else
+ {
+ if (analog_alarm->enable.LOLO_alarm_enable == 1
+ && value < (analog_alarm->lolo + analog_alarm->deadband))
+ {
+ analog_alarm->state = LIBSPID_AS_ANALOG_LOLO;
+ /* register alarm in current alarm info file */
+ if (0 != registerAlarm (suboid, analog_alarm->state, value))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error registering "
+ "LOLO analog alarm!\n");
+ return -1;
+ }
+
+ analog_alarm_detected = LIBSPID_TRUE;
+ }
+ }
+
+ /* check if HI alarm has already been generated */
+ /* if not, generate alarm if condition for activation is met,
+ otherwise generate if removal condition is not met */
+ if (active_triggers->HI_alarm_enable == 0)
+ {
+ if (analog_alarm->enable.HI_alarm_enable == 1
+ && value > (analog_alarm->hi + analog_alarm->deadband))
+ {
+ analog_alarm->state = LIBSPID_AS_ANALOG_HI;
+ /* register alarm in current alarm info file */
+ if (0 != registerAlarm (suboid, analog_alarm->state, value))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error registering "
+ "HI analog alarm!\n");
+ return -1;
+ }
+
+ active_triggers->HI_alarm_enable = 1;
+ analog_alarm_detected = LIBSPID_TRUE;
+ }
+ }
+ else
+ {
+ if (analog_alarm->enable.HI_alarm_enable == 1
+ && value > (analog_alarm->hi - analog_alarm->deadband))
+ {
+ analog_alarm->state = LIBSPID_AS_ANALOG_HI;
+ /* register alarm in current alarm info file */
+ if (0 != registerAlarm (suboid, analog_alarm->state, value))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error registering "
+ "HI analog alarm!\n");
+ return -1;
+ }
+
+ analog_alarm_detected = LIBSPID_TRUE;
+ }
+ }
+
+ /* check if HIHI alarm has already been generated */
+ /* if not, generate alarm if condition for activation is met,
+ otherwise generate if removal condition is not met */
+ if (active_triggers->HIHI_alarm_enable == 0)
+ {
+ if (analog_alarm->enable.HIHI_alarm_enable == 1
+ && value > (analog_alarm->hihi + analog_alarm->deadband))
+ {
+ analog_alarm->state = LIBSPID_AS_ANALOG_HIHI;
+ /* register alarm in current alarm info file */
+ if (0 != registerAlarm (suboid, analog_alarm->state, value))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error registering "
+ "HIHI analog alarm!\n");
+ return -1;
+ }
+
+ active_triggers->HIHI_alarm_enable = 1;
+ analog_alarm_detected = LIBSPID_TRUE;
+ }
+ }
+ else
+ {
+ if (analog_alarm->enable.HIHI_alarm_enable == 1
+ && value > (analog_alarm->hihi - analog_alarm->deadband))
+ {
+ analog_alarm->state = LIBSPID_AS_ANALOG_HIHI;
+ /* register alarm in current alarm info file */
+ if (0 != registerAlarm (suboid, analog_alarm->state, value))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error registering "
+ "HIHI analog alarm!\n");
+ return -1;
+ }
+
+ analog_alarm_detected = LIBSPID_TRUE;
+ }
+ }
+
+ if (analog_alarm_detected == LIBSPID_FALSE)
+ analog_alarm->state = LIBSPID_AS_DISABLE;
+
+ return 0;
+}
+
+int
+checkDiscreteAlarm (libspid_eoc_discrete_alarm_entry_t *discrete_alarm,
+ int value, char *suboid)
+{
+
+ switch (discrete_alarm->enable)
+ {
+ case LIBSPID_DAE_ENABLE_MAJOR:
+ if (value > discrete_alarm->trigger)
+ {
+ discrete_alarm->state = LIBSPID_AS_DISCRETE_MAJOR;
+ /* register alarm in current alarm info file */
+ if (0 != registerAlarm (suboid, discrete_alarm->state, value))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error registering "
+ "major discrete alarm!\n");
+ return -1;
+ }
+ }
+ else
+ discrete_alarm->state = LIBSPID_AS_DISABLE;
+ break;
+ case LIBSPID_DAE_ENABLE_MINOR:
+ if (value < discrete_alarm->trigger)
+ {
+ discrete_alarm->state = LIBSPID_AS_DISCRETE_MINOR;
+ /* register alarm in current alarm info file */
+ if (0 != registerAlarm (suboid, discrete_alarm->state, value))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error registering "
+ "minor discrete alarm!\n");
+ return -1;
+ }
+ }
+ else
+ discrete_alarm->state = LIBSPID_AS_DISABLE;
+ break;
+ default:
+ discrete_alarm->state = LIBSPID_AS_DISABLE;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_discrete_alarm_set (
+ discrete_alarm->oid, discrete_alarm))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error updating discrete alarm "
+ "entry in configuration file!\n");
+ return -1;
+ }
+
+ return 0;
+
+}
+
+void
+checkTriggeredAnalogOID (libspid_eoc_analog_alarm_entry_t *analog_alarm,
+ libspid_eoc_analog_alarm_entry_t *old_analog_alarm,
+ libspid_eoc_analog_alarm_enable_t *active_triggers,
+ libspid_eoc_current_alarm_entry_t *old_curr_alarms,
+ int old_curr_alarm_count)
+{
+
+ int i;
+
+ /* initialize all triggers as inactive */
+ active_triggers->LOLO_alarm_enable = 0;
+ active_triggers->LO_alarm_enable = 0;
+ active_triggers->HI_alarm_enable = 0;
+ active_triggers->HIHI_alarm_enable = 0;
+
+ /* verify that deadband value has not changed */
+ if (old_analog_alarm->deadband == analog_alarm->deadband)
+ {
+ /* iterate through old contents of triggered alarms and search for
+ first entry with sub-OID of current OID as a key */
+ /* check only for enabled alarm thresholds */
+ for (i=0; i < old_curr_alarm_count; i++)
+ {
+ /* check if analog OID is a substring
+ of old triggered OID string */
+ /* also check if threshold was previously enabled and if so,
+ check if its value has changed */
+ if (NULL != strstr (old_curr_alarms->oid, analog_alarm->oid))
+ {
+
+ if ((1 == analog_alarm->enable.LOLO_alarm_enable)
+ && (LIBSPID_AS_ANALOG_LOLO == old_curr_alarms->state))
+ {
+ if ((old_analog_alarm->enable.LOLO_alarm_enable == 0)
+ || (old_analog_alarm->lolo == analog_alarm->lolo))
+ active_triggers->LOLO_alarm_enable = 1;
+ }
+
+ if ((1 == analog_alarm->enable.LO_alarm_enable)
+ && (LIBSPID_AS_ANALOG_LO == old_curr_alarms->state))
+ {
+ if ((old_analog_alarm->enable.LO_alarm_enable == 0)
+ || (old_analog_alarm->lo == analog_alarm->lo))
+ active_triggers->LO_alarm_enable = 1;
+ }
+
+ if ((1 == analog_alarm->enable.HI_alarm_enable)
+ && (LIBSPID_AS_ANALOG_HI == old_curr_alarms->state))
+ {
+ if ((old_analog_alarm->enable.HI_alarm_enable == 0)
+ || (old_analog_alarm->hi == analog_alarm->hi))
+ active_triggers->HI_alarm_enable = 1;
+ }
+
+ if ((1 == analog_alarm->enable.HIHI_alarm_enable)
+ && (LIBSPID_AS_ANALOG_HIHI == old_curr_alarms->state))
+ {
+ if ((old_analog_alarm->enable.HIHI_alarm_enable == 0)
+ || (old_analog_alarm->hihi == analog_alarm->hihi))
+ active_triggers->HIHI_alarm_enable = 1;
+ }
+ }
+ }
+ }
+
+}
+
+int
+updateCurrentTraps (char *trap_oid_str)
+{
+ const char delimiter = LIBSPID_TRAP_INFO_DELIMITER[0];
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN] = {0};
+ unsigned int elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ char *elt[LIBSPID_CONFIG_ELT_MAX_NB] = {0};
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+
+ /* string with current timestamp */
+ char curr_time_str[32];
+
+ /* old value of number of times a trap has been generated */
+ int times_old = 0;
+ /* string with new number of times a trap has been generated */
+ char times_new_str[32];
+
+
+ /* copy given OID string to key */
+ strcpy (key, trap_oid_str);
+
+ /* store current timestamp to string */
+ sprintf (curr_time_str, "%ld", time (NULL));
+
+ /* attempt to read line with given key from trap info file */
+ if (LIBSPID_SUCCESS != libspid_config_read_line (
+ LIBSPID_TRAP_INFO_PATH,
+ LIBSPID_TRAP_INFO_DELIMITER, key, &elt_number,
+ elt, buffer, LIBSPID_CONFIG_LINE_MAX_LEN))
+ {
+ /* in case line with trap OID as a key hasn't been read successfully,
+ it is assumed that trap with this OID has never been issued
+ and new line is added */
+ elt[0] = "1";
+ elt[1] = curr_time_str;
+
+ return libspid_config_write_line (LIBSPID_TRAP_INFO_PATH,
+ delimiter, key, 2, elt);
+ }
+
+ /* otherwise update existing line for current key */
+ /* parse old value of number of times */
+ if (1 != sscanf (elt[0], "%d", &times_old))
+ times_old = 0;
+
+ times_old++;
+
+ sprintf (times_new_str, "%d", times_old);
+
+ elt[0] = times_new_str;
+ elt[1] = curr_time_str;
+
+ return libspid_config_write_line (LIBSPID_TRAP_INFO_PATH,
+ delimiter, trap_oid_str, 2, elt);
+}
+
+
+int
+registerAlarm (char *alarm_oid_str, int state, int value)
+{
+
+ const char delimiter = LIBSPID_ALARM_INFO_DELIMITER[0];
+ char *elt[2];
+
+ char state_str[16];
+ char value_str[16];
+
+ char admin_mac_addr[6];
+
+ oid alarm_oid[LIBSPID_OID_MAX_LEN];
+ size_t alarm_oid_len = LIBSPID_OID_MAX_LEN;
+
+ unsigned char taddress[6];
+ char trap_community[DEFAULT_SNMP_STRING_MAX_LENGTH];
+
+ /*
+ * here is where we store the variables to be sent in the trap
+ */
+ netsnmp_variable_list *trap_vars = NULL;
+
+
+ /* check OID string */
+ if (alarm_oid_str == NULL)
+ return -1;
+
+
+ sprintf (state_str, "%d", state);
+ sprintf (value_str, "%d", value);
+
+ elt[0] = state_str;
+ elt[1] = value_str;
+
+ /* register alarm in current alarm info file
+ if maximum count not exceeded */
+ if (max_alarm_count <= LIBSPID_CURRENT_ALARMS_MAX_NUM)
+ {
+ if (LIBSPID_SUCCESS != libspid_config_write_line (
+ LIBSPID_ALARM_INFO_PATH, delimiter,
+ alarm_oid_str, 2, elt))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error, couldn't update "
+ "current alarm file");
+ return -1;
+ }
+ max_alarm_count++;
+ }
+
+ /* store alarm information alarm in log */
+ if (0 != storeLog (alarm_oid_str))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error logging alarm");
+ return -1;
+ }
+
+
+ /* get trap parameters for notify and target tables */
+ getTrapParams (taddress, trap_community);
+
+ /* check if traps are allowed in snmp.conf file and verify that trap
+ for particular OID has not reached maximum times and
+ that the minimum interval has passed */
+ if (trapsEnabled () && trapOIDAllowed (alarm_oid_str))
+ {
+ if (trap_count == 0)
+ {
+ /* if current trap is first one to be issued,
+ add new rows to snmpNotifyTable, snmpTargetAddrTable
+ and snmpTargetParamsTable */
+ initNotifyAndTarget (taddress, 6, trap_community,
+ strlen (trap_community));
+ }
+ else
+ {
+ /* if traps were issued before the current one,
+ modify rows in snmpNotifyTable, snmpTargetAddrTable
+ and snmpTargetParamsTable */
+ updateNotifyAndTarget (taddress, 6, trap_community,
+ strlen (trap_community));
+ }
+
+ /* send trap */
+ issueTrap (alarm_oid_str);
+
+ /* update global trap count */
+ trap_count++;
+
+ /* update trap count and registered time for current trap
+ in trap.info file */
+ return updateCurrentTraps (alarm_oid_str);
+
+ }
+
+ return 0;
+}
+
+int
+clearCurrentAlarms ()
+{
+ const char delimiter = LIBSPID_ALARM_INFO_DELIMITER[0];
+ char *header_key = "#<OID>";
+ char *header_elt[2] = {"<State>", "<Value>"};
+
+ /* remove current alarm file */
+ if (0 != unlink (LIBSPID_ALARM_INFO_PATH))
+ return -1;
+
+ /* create current alarm file and write header line */
+ if (LIBSPID_SUCCESS != libspid_config_write_line (LIBSPID_ALARM_INFO_PATH,
+ delimiter, header_key,
+ 2, header_elt))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error, couldn't write header "
+ "for current alarm file");
+ }
+
+ return 0;
+}
+
+int
+clearCurrentTraps ()
+{
+ const char delimiter = LIBSPID_TRAP_INFO_DELIMITER[0];
+ char *header_key = "#<OID>";
+ char *header_elt[2] = {"<Number of times>", "<Last time>"};
+
+ /* remove current trap file */
+ if (0 != unlink (LIBSPID_TRAP_INFO_PATH))
+ return -1;
+
+ /* create current trap file and write header line */
+ if (LIBSPID_SUCCESS != libspid_config_write_line (LIBSPID_TRAP_INFO_PATH,
+ delimiter, header_key,
+ 2, header_elt))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error, couldn't write header "
+ "for current trap file");
+ }
+
+ return 0;
+}
+
+
+int
+resetAllAlarmPropertyState ()
+{
+ /* discrete alarm entries read from config file */
+ libspid_eoc_discrete_alarm_entry_t
+ discrete_alarm_entries[LIBSPID_DISCRETE_ALARMS_MAX_NUM];
+ int discrete_alarm_count;
+ /* analog alarm entries read from config file */
+ libspid_eoc_analog_alarm_entry_t
+ analog_alarm_entries[LIBSPID_ANALOG_ALARMS_MAX_NUM];
+ int analog_alarm_count;
+ int i;
+
+ memset(discrete_alarm_entries, 0x0, sizeof(discrete_alarm_entries));
+ memset(analog_alarm_entries, 0x0, sizeof(analog_alarm_entries));
+
+ /* get current contents of analog alarm config file */
+ if (LIBSPID_SUCCESS != libspid_eoc_analog_alarm_get_list (
+ analog_alarm_entries, &analog_alarm_count))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: analog alarm config file "
+ "not read correctly\n");
+ analog_alarm_count = 0;
+ }
+ /* get current contents of discrete alarm config file */
+ if (LIBSPID_SUCCESS != libspid_eoc_discrete_alarm_get_list (
+ discrete_alarm_entries, &discrete_alarm_count))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: discrete alarm config file "
+ "not read correctly\n");
+ discrete_alarm_count = 0;
+ }
+
+ /* iterate through list of defined analog alarms
+ and reset each state to nominal */
+ for (i=0; i < analog_alarm_count; i++)
+ {
+ analog_alarm_entries[i].state = LIBSPID_AS_DISABLE;
+ if (LIBSPID_SUCCESS != libspid_eoc_analog_alarm_set (
+ analog_alarm_entries[i].oid,
+ &analog_alarm_entries[i]))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error resetting analog "
+ "alarm state in configuration file!\n");
+ return -1;
+ }
+ }
+
+ /* iterate through list of defined discrete alarms
+ and reset each state to nominal */
+ for (i=0; i < discrete_alarm_count; i++)
+ {
+ discrete_alarm_entries[i].state = LIBSPID_AS_DISABLE;
+ if (LIBSPID_SUCCESS != libspid_eoc_discrete_alarm_set (
+ discrete_alarm_entries[i].oid,
+ &discrete_alarm_entries[i]))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error resetting discrete "
+ "alarm state in configuration file!\n");
+ return -1;
+ }
+ }
+
+ return 0;
+
+}
+/* obtain trap parameters necessary for target and notification tables
+ from values in trap configuration file */
+/* buffers for retrieving trap parameters: trap destination address
+ and security name must be provided as arguments */
+void
+getTrapParams (unsigned char *taddress, char *sec_name)
+{
+ char trap_ip[4];
+
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ char trap_ip_str[LIBSPID_IP_STR_MAX_LEN];
+ int ret;
+
+ /* trap destination address for Target table is obtained
+ from trap IP and port */
+ /* read trap IP string from config file */
+ ret = libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_TRAP_SERVER_IP,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "EoCAlarmsAndTraps: libspid_config_read_item error "
+ "for trap IP\n");
+ /* trap IP address set to default value */
+ strcpy (trap_ip_str, TRAP_IP_STR_DEFAULT_VALUE);
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than maximum value,
+ copy only maximum permitted number of bytes */
+ strncpy (trap_ip_str, buffer, LIBSPID_IP_STR_MAX_LEN-1);
+ trap_ip_str[LIBSPID_IP_STR_MAX_LEN-1]='\0';
+ }
+
+ /* convert trap IP address from string to array of bytes */
+ ret = libspid_ip_str_to_bin (trap_ip_str, trap_ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "EoCAlarmsAndTraps: cannot parse trap IP address "
+ "from string %s, setting to default value\n",
+ trap_ip_str);
+ memset (trap_ip, 255, 4);
+ }
+
+ /* read trap port from config file */
+ ret = libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_TRAP_SERVER_PORT,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "EoCAlarmsAndTraps: libspid_config_read_item error "
+ "for trap port\n");
+ /* trap port set to default value */
+ memset (buffer, 0x0, LIBSPID_LINE_MAX_LEN);
+ sprintf (buffer, "%d", TRAP_PORT_DEFAULT_VALUE);
+ }
+
+ /* build trap destination address from IP address and port */
+ memset (taddress, 0x0, 6);
+ memcpy (taddress, trap_ip, 4);
+ taddress[5] = (uint16_t) strtol (buffer, NULL, 10);
+
+
+ /* security name for Target table is read from trap community field */
+ /* read buffer for trap community from config file */
+ ret = libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_TRAP_COMMUNITY,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "EoCAlarmsAndTraps: libspid_config_read_item error "
+ "for trap community\n");
+ /* security name set to default value for trap community */
+ memset (sec_name, 0, DEFAULT_SNMP_STRING_MAX_LENGTH);
+ strcpy (sec_name, TRAP_COMMUNITY_DEFAULT_VALUE);
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than maximum value,
+ copy only maximum permitted number of bytes */
+ strncpy (sec_name, buffer, DEFAULT_SNMP_STRING_MAX_LENGTH-1);
+ sec_name[DEFAULT_SNMP_STRING_MAX_LENGTH-1]='\0';
+ }
+}
+
+/* obtain trap maximum times and minimal interval necessary for checking
+ whether generation of particular trap is allowed */
+/* pointers to integers containing maximum times and minimal interval
+ must be provided as arguments */
+void
+getTrapTimesAndInterval (int *max_times, int *min_interval)
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ int ret;
+ int value;
+
+ /* read buffer for max times from config file */
+ ret = libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_TRAP_MAX_TIMES,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "EoCAlarmsAndTraps: libspid_config_read_item error "
+ "for trap max times\n");
+ /* max times set to default value */
+ *max_times = TRAP_MAX_TIMES_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* parse max times from buffer */
+ if (1 != sscanf (buffer, "%d", &value))
+ *max_times = TRAP_MAX_TIMES_DEFAULT_VALUE;
+ else if ((TRAP_MAX_TIMES_MIN <= value)
+ && (TRAP_MAX_TIMES_MAX >= value))
+ *max_times = value;
+ else
+ *max_times = TRAP_MAX_TIMES_DEFAULT_VALUE;
+ }
+
+ /* read buffer for min interval from config file */
+ ret = libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_TRAP_MIN_INTERVAL,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "EoCAlarmsAndTraps: libspid_config_read_item error "
+ "for trap min interval\n");
+ /* min interval set to default value */
+ *min_interval = TRAP_MIN_INTERVAL_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* parse min interval from buffer */
+ if (1 != sscanf (buffer, "%d", &value))
+ *min_interval = TRAP_MIN_INTERVAL_DEFAULT_VALUE;
+ else if (value >= 0)
+ *min_interval = value;
+ else
+ {
+ snmp_log (LOG_ERR, "EoCAlarmsAndTraps: error: negative config "
+ "file value for min interval: %d\n", value);
+ *min_interval = TRAP_MIN_INTERVAL_DEFAULT_VALUE;
+ }
+ }
+}
+
+
+
+/* add new rows to snmpNotifyTable, snmpTargetAddrTable
+ and snmpTargetParamsTable */
+int
+initNotifyAndTarget (unsigned char *taddress, size_t taddress_len,
+ char *sec_name, size_t sec_name_len)
+{
+
+ addRow_snmpNotifyTable ();
+ addRow_snmpTargetAddrTable (taddress, taddress_len);
+ addRow_snmpTargetParamsTable (sec_name, sec_name_len);
+
+ return 0;
+}
+
+
+/* modify trap destination address and security name in snmpNotifyTable,
+ snmpTargetAddrTable and snmpTargetParamsTable */
+int
+updateNotifyAndTarget (unsigned char *taddress, size_t taddress_len,
+ char *sec_name, size_t sec_name_len)
+{
+
+ modifyRow_snmpTargetAddrTable (taddress, taddress_len);
+ modifyRow_snmpTargetParamsTable (sec_name, sec_name_len);
+
+ return 0;
+}
+
+/* function returns 1 if it is allowed to generate trap with given OID
+ and 0 otherwise, based on number of time trap has already been issued,
+ and interval from last occurrence */
+int
+trapOIDAllowed (char *trap_oid_str)
+{
+ const char delimiters[2] = LIBSPID_TRAP_INFO_DELIMITER "\0";
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN] = {0};
+ unsigned int elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ char *elt[LIBSPID_CONFIG_ELT_MAX_NB] = {0};
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN] = {0};
+ libspid_error_t error;
+
+ /* current value of number of times a trap has been generated */
+ int times_curr;
+ /* current value of last timestamp of trap generation */
+ int last_time_curr;
+
+ /* value of maximum trap times from configuration file */
+ int max_times_conf;
+ /* value of minimal interval between traps from configuration file */
+ int min_interval_conf;
+
+ /* current interval of time passed from last generated timestamp */
+ int interval_curr;
+
+ /* copy given OID string to key */
+ strcpy (key, trap_oid_str);
+
+ /* attempt to read line with given key from trap info file */
+ if (LIBSPID_SUCCESS != (error = libspid_config_read_line (
+ LIBSPID_TRAP_INFO_PATH, delimiters, key,
+ &elt_number, elt,
+ buffer, LIBSPID_CONFIG_LINE_MAX_LEN)))
+ {
+ /* in case line with trap OID as a key hasn't been read successfully,
+ it is assumed that trap with this OID has never been issued */
+ return 1;
+ }
+
+ /* parse current values of number of times and last timestamp */
+ if (1 != sscanf (elt[0], "%d", &times_curr))
+ times_curr = 0;
+ if (1 != sscanf (elt[1], "%d", &last_time_curr))
+ last_time_curr = 0;
+
+ interval_curr = time (NULL) - last_time_curr;
+
+ /* obtain values of maximum times and minimal interval
+ from configuration file */
+ getTrapTimesAndInterval (&max_times_conf, &min_interval_conf);
+
+ /* compare time and interval values between info file and configuration
+ and determine if a trap should be allowed */
+ if ( (times_curr >= max_times_conf)
+ || (interval_curr < min_interval_conf) )
+ return 0;
+
+ return 1;
+
+}
+
+
+/* send trap with alarm OID as parameter */
+int
+issueTrap (char *alarm_oid_str)
+{
+ oid alarm_oid[LIBSPID_OID_MAX_LEN];
+ size_t alarm_oid_len = LIBSPID_OID_MAX_LEN;
+
+ /*
+ * here is where we store the variables to be sent in the trap
+ */
+ netsnmp_variable_list *trap_vars = NULL;
+
+ /* add alarm OID as trap variable */
+
+ /* parse alarm OID from string representation */
+ if (!read_objid (alarm_oid_str, alarm_oid, &alarm_oid_len))
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: error parsing alarm OID from "
+ "string representation, setting OID to invalid\n");
+ read_objid ("0.0", alarm_oid, &alarm_oid_len);
+ }
+ else
+ {
+ /* check if length of parsed OID is within allowed range */
+ if (alarm_oid_len < 1 || alarm_oid_len > LIBSPID_OID_MAX_LEN)
+ {
+ syslog (LOG_DEBUG, "EoCAlarmsAndTraps: alarm OID length "
+ "out of range, setting OID to invalid\n");
+ read_objid ("0.0", alarm_oid, &alarm_oid_len);
+ }
+ }
+
+ /*
+ * add in the trap definition object
+ */
+ snmp_varlist_add_variable (&trap_vars,
+ /*
+ * the snmpTrapOID.0 variable
+ */
+ objid_snmptrap, objid_snmptrap_len,
+ /*
+ * value type is an OID
+ */
+ ASN_OBJECT_ID,
+ /*
+ * value contents is alarm OID
+ */
+ (u_char *) alarm_oid,
+ /*
+ * size in bytes = oid length * sizeof(oid)
+ */
+ alarm_oid_len * sizeof (oid));
+
+ /* send trap */
+ send_v2trap (trap_vars);
+
+ /*
+ * free the created notification variable list
+ */
+ snmp_free_varbind (trap_vars);
+
+ return 0;
+
+}
+
+int storeLog (const char* info)
+{
+ unsigned int position;
+
+ /* check information string */
+ if (info == NULL)
+ return -1;
+
+ if ((list.beginning + list.size) >= ALARM_LOG_SIZE)
+ position = list.beginning + list.size - ALARM_LOG_SIZE;
+ else
+ position = list.beginning + list.size;
+
+ strncpy(list.entries[position].information, info,
+ ALARM_LOG_INFO_MAX_LENGTH-1);
+ list.entries[position].information[ALARM_LOG_INFO_MAX_LENGTH-1] = '\0';
+ list.entries[position].index = list.next_index;
+
+ if (list.next_index < ALARM_LOG_MAX_INDEX)
+ list.next_index++;
+ else
+ list.next_index=0;
+
+ if (list.size < ALARM_LOG_SIZE)
+ list.size++;
+ else if (list.beginning >= ALARM_LOG_SIZE-1)
+ list.beginning = 0;
+ else
+ list.beginning++;
+
+ return 0;
+}
+
+void clearAlarmLogList ()
+{
+ list.size = 0;
+ list.beginning = 0;
+ list.next_index = 0;
+
+ memset (list.entries, 0, ALARM_LOG_SIZE);
+
+}
+
+int retrieveAlarmLogList (alarm_log_entry_t* entry_pointers[ALARM_LOG_SIZE],
+ int* size)
+{
+ int i;
+ unsigned int position;
+
+ /* check parameters */
+ if ((entry_pointers == NULL) || (size == NULL))
+ return -1;
+
+ *size = list.size;
+ position = list.beginning;
+
+ for (i=0; i < list.size; i++)
+ {
+ if (position + i >= ALARM_LOG_SIZE)
+ entry_pointers[i] = &list.entries[position + i - ALARM_LOG_SIZE];
+ else
+ entry_pointers[i] = &list.entries[position + i];
+ }
+
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps.h
new file mode 100644
index 0000000000..3e50117e7c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps.h
@@ -0,0 +1,122 @@
+#ifndef EOCALARMSANDTRAPS_H
+#define EOCALARMSANDTRAPS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* include common header */
+#include "EoCCommon.h"
+
+
+/* definitions for OID strings */
+/* modEoCCNUWhiteListRegisterOnlineState */
+#define MODEOCCNUWHITELISTREGISTERONLINESTATE_OID_STR \
+ ".1.3.6.1.4.1.22764.3.1.5.1.6.1.6"
+#define MODEOCCNUWHITELISTREGISTERONLINESTATE_OID_STR_ALT \
+ "1.3.6.1.4.1.22764.3.1.5.1.6.1.6"
+/* modEoCOnlineCNURFUpstreamAttenuation */
+#define MODEOCONLINECNURFUPSTREAMATTENUATION_OID_STR \
+ ".1.3.6.1.4.1.22764.3.1.5.2.4.1.10"
+#define MODEOCONLINECNURFUPSTREAMATTENUATION_OID_STR_ALT \
+ "1.3.6.1.4.1.22764.3.1.5.2.4.1.10"
+/* modEoCOnlineCNURFDownstreamQuality */
+#define MODEOCONLINECNURFDOWNSTREAMQUALITY_OID_STR \
+ ".1.3.6.1.4.1.22764.3.1.5.2.4.1.11"
+#define MODEOCONLINECNURFDOWNSTREAMQUALITY_OID_STR_ALT \
+ "1.3.6.1.4.1.22764.3.1.5.2.4.1.11"
+/* modEoCOnlineCNURFUpstreamQuality */
+#define MODEOCONLINECNURFUPSTREAMQUALITY_OID_STR \
+ ".1.3.6.1.4.1.22764.3.1.5.2.4.1.12"
+#define MODEOCONLINECNURFUPSTREAMQUALITY_OID_STR_ALT \
+ "1.3.6.1.4.1.22764.3.1.5.2.4.1.12"
+/* modEoCOnlineCNUPhyDownstreamRate */
+#define MODEOCONLINECNUPHYDOWNSTREAMRATE_OID_STR \
+ ".1.3.6.1.4.1.22764.3.1.5.2.4.1.13"
+#define MODEOCONLINECNUPHYDOWNSTREAMRATE_OID_STR_ALT \
+ "1.3.6.1.4.1.22764.3.1.5.2.4.1.13"
+/* modEoCOnlineCNUPhyUpstreamRate */
+#define MODEOCONLINECNUPHYUPSTREAMRATE_OID_STR \
+ ".1.3.6.1.4.1.22764.3.1.5.2.4.1.14"
+#define MODEOCONLINECNUPHYUPSTREAMRATE_OID_STR_ALT \
+ "1.3.6.1.4.1.22764.3.1.5.2.4.1.14"
+/* modEoCCLTAdminInternalTemperature */
+#define MODEOCCLTADMININTERNALTEMPERATURE_OID_STR \
+ ".1.3.6.1.4.1.22764.3.1.1.3.3.0"
+#define MODEOCCLTADMININTERNALTEMPERATURE_OID_STR_ALT \
+ "1.3.6.1.4.1.22764.3.1.1.3.3.0"
+/* modEoCCLTAdminTamperStatus */
+#define MODEOCCLTADMINTAMPERSTATUS_OID_STR \
+ ".1.3.6.1.4.1.22764.3.1.1.3.4.0"
+#define MODEOCCLTADMINTAMPERSTATUS_OID_STR_ALT \
+ "1.3.6.1.4.1.22764.3.1.1.3.4.0"
+
+#define ALARM_LOG_INFO_MAX_LENGTH 255
+#define ALARM_LOG_SIZE 64
+#define ALARM_LOG_MAX_INDEX 32767
+
+/* structure for alarm log entry */
+typedef struct
+{
+ unsigned int index;
+ char information[ALARM_LOG_INFO_MAX_LENGTH+1];
+} alarm_log_entry_t;
+
+/* structure for alarm log list */
+typedef struct
+{
+ unsigned int size;
+ unsigned int beginning;
+ unsigned int next_index;
+ alarm_log_entry_t entries[ALARM_LOG_SIZE];
+} alarm_log_list_t;
+
+
+
+
+/* function declarations */
+void init_EoCAlarmsAndTraps (void);
+int alarmsEnabled (void);
+int trapsEnabled (void);
+SNMPAlarmCallback alarm_callback;
+void checkAllAlarms (void);
+int handleAnalogAlarmOID (libspid_eoc_analog_alarm_entry_t *analog_alarm,
+ libspid_eoc_analog_alarm_entry_t *old_analog_alarm,
+ libspid_eoc_current_alarm_entry_t *old_curr_alarms,
+ int old_curr_alarm_count);
+int handleDiscreteAlarmOID (libspid_eoc_discrete_alarm_entry_t
+ *discrete_alarm);
+int checkAnalogAlarm (libspid_eoc_analog_alarm_entry_t *analog_alarm,
+ libspid_eoc_analog_alarm_enable_t *active_triggers,
+ int value, char *suboid);
+int checkDiscreteAlarm (libspid_eoc_discrete_alarm_entry_t *discrete_alarm,
+ int value, char *suboid);
+void
+checkTriggeredAnalogOID(libspid_eoc_analog_alarm_entry_t *analog_alarm,
+ libspid_eoc_analog_alarm_entry_t *old_analog_alarm,
+ libspid_eoc_analog_alarm_enable_t *active_triggers,
+ libspid_eoc_current_alarm_entry_t *old_curr_alarms,
+ int old_curr_alarm_count);
+int registerAlarm (char *alarm_oid, int state, int value);
+int updateCurrentTraps (char *trap_oid_str);
+int clearCurrentAlarms ();
+int clearCurrentTraps ();
+void getTrapParams (unsigned char *taddress, char *sec_name);
+void getTrapTimesAndInterval (int *max_times, int *min_interval);
+int initNotifyAndTarget (unsigned char *taddress, size_t taddress_len,
+ char *sec_name, size_t sec_name_len);
+int updateNotifyAndTarget (unsigned char *taddress, size_t taddress_len,
+ char *sec_name, size_t sec_name_len);
+int trapOIDAllowed (char *trap_oid_str);
+int issueTrap (char *alarm_oid_str);
+int storeAlarmLog (const char* info);
+void clearAlarmLogList ();
+int retrieveAlarmLogList (alarm_log_entry_t* entry_pointers[ALARM_LOG_SIZE],
+ int* size);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCALARMSANDTRAPS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps_interface.c
new file mode 100644
index 0000000000..7e8ba1297d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps_interface.c
@@ -0,0 +1,1012 @@
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+
+/* include header with interface functions */
+#include "EoCAlarmsAndTraps_interface.h"
+
+/** These functions serve as interface between EoC module for alarms and traps
+ * and existing net-snmp support for trap destination and community.
+ * Functions are used to add necessary information defined in trap
+ * configuration file to snmpNotifyTable, snmpTargetAddrTable or
+ * snmpTargetParamsTable, or to modify existing information.
+ * Note: since EoC trap configuration file defines only one trap destination
+ * and community, all functions add or modify single row of notify
+ * and target tables. For convenience, this row is indexed by constant string
+ * value hard-coded in interface header.
+ * ASCII representation of this index value is also embedded in defines
+ * for all OIDs necessary for manipulation of tables.
+ */
+
+/*
+ * variable definitions
+ */
+
+/* constant values necessary for setting target and notifications parameters */
+char *index_str = TABLE_INDEX_STR;
+int index_str_len = TABLE_INDEX_LEN;
+
+/*
+ * OID definitions
+ *
+ */
+
+/** snmpNotifyTable OID definitions **/
+oid snmpNotifyRowStatus_index_oid[] =
+ { SNMPNOTIFYROWSTATUSINDEX_OID };
+int snmpNotifyRowStatus_index_oid_size =
+OID_LENGTH(snmpNotifyRowStatus_index_oid);
+
+oid snmpNotifyTag_index_oid[] =
+ { SNMPNOTIFYTAGINDEX_OID };
+int snmpNotifyTag_index_oid_size =
+OID_LENGTH(snmpNotifyTag_index_oid);
+
+oid snmpNotifyType_index_oid[] =
+ { SNMPNOTIFYTYPEINDEX_OID };
+int snmpNotifyType_index_oid_size =
+OID_LENGTH(snmpNotifyType_index_oid);
+
+oid snmpNotifyStorageType_index_oid[] =
+ { SNMPNOTIFYSTORAGETYPEINDEX_OID };
+int snmpNotifyStorageType_index_oid_size =
+OID_LENGTH(snmpNotifyStorageType_index_oid);
+
+
+/** snmpTargetAddrTable OID definitions **/
+oid snmpTargetAddrRowStatus_index_oid[] =
+ { SNMPTARGETADDRROWSTATUSINDEX_OID };
+int snmpTargetAddrRowStatus_index_oid_size =
+OID_LENGTH(snmpTargetAddrRowStatus_index_oid);
+
+oid snmpTargetAddrTDomain_index_oid[] =
+ { SNMPTARGETADDRTDOMAININDEX_OID };
+int snmpTargetAddrTDomain_index_oid_size =
+OID_LENGTH(snmpTargetAddrTDomain_index_oid);
+
+/* represents UDP transport domain OID */
+oid snmpTargetAddrTDomain_value_oid[] =
+ { SNMPTARGETADDRTDOMAINUDP_OID };
+int snmpTargetAddrTDomain_value_oid_size =
+OID_LENGTH(snmpTargetAddrTDomain_value_oid);
+
+oid snmpTargetAddrTAddress_index_oid[] =
+ { SNMPTARGETADDRTADDRESSINDEX_OID };
+int snmpTargetAddrTAddress_index_oid_size =
+OID_LENGTH(snmpTargetAddrTAddress_index_oid);
+
+oid snmpTargetAddrParams_index_oid[] =
+ { SNMPTARGETADDRPARAMSINDEX_OID };
+int snmpTargetAddrParams_index_oid_size =
+OID_LENGTH(snmpTargetAddrParams_index_oid);
+
+oid snmpTargetAddrTagList_index_oid[] =
+ { SNMPTARGETADDRTAGLISTINDEX_OID };
+int snmpTargetAddrTagList_index_oid_size =
+OID_LENGTH(snmpTargetAddrTagList_index_oid);
+
+
+/** snmpTargetParamsTable OID definitions **/
+oid snmpTargetParamsRowStatus_index_oid[] =
+ { SNMPTARGETPARAMSROWSTATUSINDEX_OID };
+int snmpTargetParamsRowStatus_index_oid_size =
+OID_LENGTH(snmpTargetParamsRowStatus_index_oid);
+
+oid snmpTargetParamsMPModel_index_oid[] =
+ { SNMPTARGETPARAMSMPMODELINDEX_OID };
+int snmpTargetParamsMPModel_index_oid_size =
+OID_LENGTH(snmpTargetParamsMPModel_index_oid);
+
+oid snmpTargetParamsSecurityModel_index_oid[] =
+ { SNMPTARGETPARAMSSECURITYMODELINDEX_OID };
+int snmpTargetParamsSecurityModel_index_oid_size =
+OID_LENGTH(snmpTargetParamsSecurityModel_index_oid);
+
+oid snmpTargetParamsSecurityName_index_oid[] =
+ { SNMPTARGETPARAMSSECURITYNAMEINDEX_OID };
+int snmpTargetParamsSecurityName_index_oid_size =
+OID_LENGTH(snmpTargetParamsSecurityName_index_oid);
+
+oid snmpTargetParamsSecurityLevel_index_oid[] =
+ { SNMPTARGETPARAMSSECURITYLEVELINDEX_OID };
+int snmpTargetParamsSecurityLevel_index_oid_size =
+OID_LENGTH(snmpTargetParamsSecurityLevel_index_oid);
+
+oid snmpTargetParamsStorageType_index_oid[] =
+ { SNMPTARGETPARAMSSTORAGETYPEINDEX_OID };
+int snmpTargetParamsStorageType_index_oid_size =
+OID_LENGTH(snmpTargetParamsStorageType_index_oid);
+
+/*** snmpNotifyTable ***/
+/* set snmpNotifyRowStatus to given value */
+int
+set_snmpNotifyRowStatus (int row_status)
+{
+ if (SNMP_ERR_NOERROR != write_snmpNotifyRowStatus (
+ RESERVE1,
+ (u_char *) &row_status,
+ ASN_INTEGER,
+ sizeof (long),
+ NULL,
+ snmpNotifyRowStatus_index_oid,
+ snmpNotifyRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyRowStatus (RESERVE1) error\n" ));
+ write_snmpNotifyRowStatus (FREE, (u_char *) &row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ snmpNotifyRowStatus_index_oid,
+ snmpNotifyRowStatus_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpNotifyRowStatus (
+ RESERVE2,
+ (u_char *) &row_status,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpNotifyRowStatus_index_oid,
+ snmpNotifyRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyRowStatus (RESERVE2) error\n" ));
+ write_snmpNotifyRowStatus (FREE, (u_char *) &row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ snmpNotifyRowStatus_index_oid,
+ snmpNotifyRowStatus_index_oid_size);
+ }
+
+
+ if (SNMP_ERR_NOERROR != write_snmpNotifyRowStatus (
+ ACTION,
+ (u_char *) &row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ snmpNotifyRowStatus_index_oid,
+ snmpNotifyRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyRowStatus (ACTION) error\n" ));
+ write_snmpNotifyRowStatus (UNDO, (u_char *) &row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ snmpNotifyRowStatus_index_oid,
+ snmpNotifyRowStatus_index_oid_size);
+ }
+
+ write_snmpNotifyRowStatus (COMMIT, (u_char *) &row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ snmpNotifyRowStatus_index_oid,
+ snmpNotifyRowStatus_index_oid_size);
+
+ return 0;
+}
+
+/* set snmpNotifyTag to given value */
+int
+set_snmpNotifyTag (char *tag, size_t tag_len)
+{
+
+ if (SNMP_ERR_NOERROR != write_snmpNotifyTag (RESERVE1, (u_char *) tag,
+ ASN_OCTET_STR, tag_len,
+ NULL, snmpNotifyTag_index_oid,
+ snmpNotifyTag_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyTag (RESERVE1) error\n" ));
+ write_snmpNotifyTag (FREE, (u_char *) tag, ASN_OCTET_STR, tag_len,
+ NULL, snmpNotifyTag_index_oid,
+ snmpNotifyTag_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpNotifyTag (RESERVE2, (u_char *) tag,
+ ASN_OCTET_STR, tag_len,
+ NULL, snmpNotifyTag_index_oid,
+ snmpNotifyTag_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyTag (RESERVE2) error\n" ));
+ write_snmpNotifyTag (FREE, (u_char *) tag, ASN_OCTET_STR, tag_len,
+ NULL, snmpNotifyTag_index_oid,
+ snmpNotifyTag_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpNotifyTag (ACTION, (u_char *) tag,
+ ASN_OCTET_STR, tag_len,
+ NULL, snmpNotifyTag_index_oid,
+ snmpNotifyTag_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyTag(ACTION) error\n" ));
+ write_snmpNotifyTag (UNDO, (u_char *) tag, ASN_OCTET_STR, tag_len,
+ NULL, snmpNotifyTag_index_oid,
+ snmpNotifyTag_index_oid_size);
+ }
+
+ write_snmpNotifyTag (COMMIT, (u_char *) tag, ASN_OCTET_STR, tag_len,
+ NULL, snmpNotifyTag_index_oid,
+ snmpNotifyTag_index_oid_size);
+
+ return 0;
+}
+
+
+/* set snmpNotifyType to given value */
+int
+set_snmpNotifyType (int type)
+{
+
+ if (SNMP_ERR_NOERROR != write_snmpNotifyType (
+ RESERVE1, (u_char *) &type,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpNotifyType_index_oid,
+ snmpNotifyType_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyType (RESERVE1) error\n" ));
+ write_snmpNotifyType (FREE, (u_char *) &type, ASN_INTEGER,
+ sizeof (long), NULL, snmpNotifyType_index_oid,
+ snmpNotifyType_index_oid_size);
+ }
+
+
+ if (SNMP_ERR_NOERROR != write_snmpNotifyType (
+ RESERVE2, (u_char *) &type,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpNotifyType_index_oid,
+ snmpNotifyType_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyType (RESERVE2) error\n" ));
+
+ write_snmpNotifyType (FREE, (u_char *) &type, ASN_INTEGER,
+ sizeof (long), NULL, snmpNotifyType_index_oid,
+ snmpNotifyType_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpNotifyType (
+ ACTION, (u_char *) &type,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpNotifyType_index_oid,
+ snmpNotifyType_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpNotifyType(ACTION) error\n" ));
+ write_snmpNotifyType (UNDO, (u_char *) &type, ASN_INTEGER,
+ sizeof (long), NULL, snmpNotifyType_index_oid,
+ snmpNotifyType_index_oid_size);
+ }
+
+ write_snmpNotifyType (COMMIT, (u_char *) &type, ASN_INTEGER, sizeof (long),
+ NULL, snmpNotifyType_index_oid,
+ snmpNotifyType_index_oid_size);
+
+ return 0;
+}
+
+/* set snmpNotifyStorageType to given value */
+int
+set_snmpNotifyStorageType (int storage_type)
+{
+
+ if (SNMP_ERR_NOERROR != write_snmpNotifyStorageType (
+ RESERVE1, (u_char *) &storage_type,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpNotifyStorageType_index_oid,
+ snmpNotifyStorageType_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpNotifyStorageType (RESERVE1) error\n" ));
+ write_snmpNotifyStorageType (FREE, (u_char *) &storage_type,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpNotifyStorageType_index_oid,
+ snmpNotifyStorageType_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpNotifyStorageType (
+ RESERVE2, (u_char *) &storage_type,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpNotifyStorageType_index_oid,
+ snmpNotifyStorageType_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpNotifyStorageType (RESERVE2) error\n" ));
+ write_snmpNotifyStorageType (FREE, (u_char *) &storage_type,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpNotifyStorageType_index_oid,
+ snmpNotifyStorageType_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpNotifyStorageType (
+ RESERVE1, (u_char *) &storage_type,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpNotifyStorageType_index_oid,
+ snmpNotifyStorageType_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpNotifyStorageType (ACTION) error\n" ));
+ write_snmpNotifyStorageType (UNDO, (u_char *) &storage_type,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpNotifyStorageType_index_oid,
+ snmpNotifyStorageType_index_oid_size);
+ }
+
+ write_snmpNotifyStorageType (RESERVE1, (u_char *) &storage_type,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpNotifyStorageType_index_oid,
+ snmpNotifyStorageType_index_oid_size);
+
+ return 0;
+}
+
+
+int
+addRow_snmpNotifyTable (void)
+{
+ set_snmpNotifyRowStatus (RS_CREATEANDWAIT);
+ set_snmpNotifyTag (index_str, index_str_len);
+ set_snmpNotifyType (SNMPNOTIFYTYPE_TRAP);
+ set_snmpNotifyStorageType (ST_VOLATILE);
+ set_snmpNotifyRowStatus (RS_ACTIVE);
+
+ return 0;
+}
+
+
+
+ /*** snmpTargetAddrTable ***/
+/* set snmpTargetAddrRowStatus to given value */
+int
+set_snmpTargetAddrRowStatus (int row_status)
+{
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrRowStatus (
+ RESERVE1, (u_char *) &row_status,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpTargetAddrRowStatus_index_oid,
+ snmpTargetAddrRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrRowStatus (RESERVE1) error\n" ));
+ write_snmpTargetAddrRowStatus (FREE, (u_char *) &row_status,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpTargetAddrRowStatus_index_oid,
+ snmpTargetAddrRowStatus_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrRowStatus (
+ RESERVE2, (u_char *) &row_status, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetAddrRowStatus_index_oid,
+ snmpTargetAddrRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrRowStatus (RESERVE2) error\n" ));
+ write_snmpTargetAddrRowStatus (FREE, (u_char *) &row_status,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpTargetAddrRowStatus_index_oid,
+ snmpTargetAddrRowStatus_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrRowStatus (
+ ACTION, (u_char *) &row_status, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetAddrRowStatus_index_oid,
+ snmpTargetAddrRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrRowStatus (ACTION) error\n" ));
+ write_snmpTargetAddrRowStatus (UNDO, (u_char *) &row_status,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpTargetAddrRowStatus_index_oid,
+ snmpTargetAddrRowStatus_index_oid_size);
+ }
+
+ write_snmpTargetAddrRowStatus (COMMIT, (u_char *) &row_status, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetAddrRowStatus_index_oid,
+ snmpTargetAddrRowStatus_index_oid_size);
+
+ return 0;
+}
+
+/* set snmpTargetAddrTDomain to given value */
+int
+set_snmpTargetAddrTDomain (oid *tdomain, size_t tdomain_len)
+{
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrTDomain (
+ RESERVE1, (u_char *) tdomain, ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid),
+ NULL, snmpTargetAddrTDomain_index_oid,
+ snmpTargetAddrTDomain_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrTDomain (RESERVE1) error\n" ));
+ write_snmpTargetAddrTDomain (FREE, (u_char *) tdomain, ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid),
+ NULL, snmpTargetAddrTDomain_index_oid,
+ snmpTargetAddrTDomain_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrTDomain (
+ RESERVE2, (u_char *) tdomain, ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid),
+ NULL, snmpTargetAddrTDomain_index_oid,
+ snmpTargetAddrTDomain_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrTDomain (RESERVE2) error\n" ));
+ write_snmpTargetAddrTDomain (FREE, (u_char *) tdomain, ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid),
+ NULL, snmpTargetAddrTDomain_index_oid,
+ snmpTargetAddrTDomain_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrTDomain (
+ ACTION, (u_char *) tdomain, ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid),
+ NULL, snmpTargetAddrTDomain_index_oid,
+ snmpTargetAddrTDomain_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrTDomain (ACTION) error\n" ));
+ write_snmpTargetAddrTDomain (UNDO, (u_char *) tdomain, ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid),
+ NULL, snmpTargetAddrTDomain_index_oid,
+ snmpTargetAddrTDomain_index_oid_size);
+
+ }
+
+ write_snmpTargetAddrTDomain (COMMIT, (u_char *) tdomain, ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid),
+ NULL, snmpTargetAddrTDomain_index_oid,
+ snmpTargetAddrTDomain_index_oid_size);
+
+ return 0;
+}
+
+/* set snmpTargetAddrTAddress to given value */
+int
+set_snmpTargetAddrTAddress (unsigned char *taddress, size_t taddress_len)
+{
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrTAddress (
+ RESERVE1, (u_char *) taddress, ASN_OCTET_STR,
+ taddress_len, NULL,
+ snmpTargetAddrTAddress_index_oid,
+ snmpTargetAddrTAddress_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrTAddress (RESERVE1) error\n" ));
+ write_snmpTargetAddrTAddress (FREE, (u_char *) taddress, ASN_OCTET_STR,
+ taddress_len, NULL,
+ snmpTargetAddrTAddress_index_oid,
+ snmpTargetAddrTAddress_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrTAddress (
+ RESERVE2, (u_char *) taddress, ASN_OCTET_STR,
+ taddress_len, NULL,
+ snmpTargetAddrTAddress_index_oid,
+ snmpTargetAddrTAddress_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrTAddress (RESERVE2) error\n" ));
+ write_snmpTargetAddrTAddress (FREE, (u_char *) taddress, ASN_OCTET_STR,
+ taddress_len, NULL,
+ snmpTargetAddrTAddress_index_oid,
+ snmpTargetAddrTAddress_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrTAddress (
+ ACTION, (u_char *) taddress, ASN_OCTET_STR,
+ taddress_len, NULL,
+ snmpTargetAddrTAddress_index_oid,
+ snmpTargetAddrTAddress_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrTAddress (ACTION) error\n" ));
+ write_snmpTargetAddrTAddress (UNDO, (u_char *) taddress, ASN_OCTET_STR,
+ taddress_len, NULL,
+ snmpTargetAddrTAddress_index_oid,
+ snmpTargetAddrTAddress_index_oid_size);
+ }
+
+ write_snmpTargetAddrTAddress (COMMIT, (u_char *) taddress, ASN_OCTET_STR,
+ taddress_len, NULL,
+ snmpTargetAddrTAddress_index_oid,
+ snmpTargetAddrTAddress_index_oid_size);
+ return 0;
+}
+
+
+/* set snmpTargetAddrParams to given value */
+int
+set_snmpTargetAddrParams (char *params, size_t params_len)
+{
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrParams (
+ RESERVE1, (u_char *) params, ASN_OCTET_STR,
+ params_len, NULL,
+ snmpTargetAddrParams_index_oid,
+ snmpTargetAddrParams_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrAddrParams (RESERVE1) error\n" ));
+ write_snmpTargetAddrParams (FREE, (u_char *) params, ASN_OCTET_STR,
+ params_len, NULL,
+ snmpTargetAddrParams_index_oid,
+ snmpTargetAddrParams_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrParams (
+ RESERVE2, (u_char *) params, ASN_OCTET_STR,
+ params_len, NULL,
+ snmpTargetAddrParams_index_oid,
+ snmpTargetAddrParams_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrAddrParams (RESERVE2) error\n" ));
+ write_snmpTargetAddrParams (FREE, (u_char *) params, ASN_OCTET_STR,
+ params_len, NULL,
+ snmpTargetAddrParams_index_oid,
+ snmpTargetAddrParams_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrParams (
+ ACTION, (u_char *) params, ASN_OCTET_STR,
+ params_len, NULL,
+ snmpTargetAddrParams_index_oid,
+ snmpTargetAddrParams_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrAddrParams (ACTION) error\n" ));
+ write_snmpTargetAddrParams (UNDO, (u_char *) params, ASN_OCTET_STR,
+ params_len, NULL,
+ snmpTargetAddrParams_index_oid,
+ snmpTargetAddrParams_index_oid_size);
+ }
+
+ write_snmpTargetAddrParams (COMMIT, (u_char *) params, ASN_OCTET_STR,
+ params_len, NULL,
+ snmpTargetAddrParams_index_oid,
+ snmpTargetAddrParams_index_oid_size);
+
+ return 0;
+}
+
+/* set snmpTargetAddrTagList to given value */
+int
+set_snmpTargetAddrTagList (char *tag_list, size_t tag_list_len)
+{
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrTagList (
+ RESERVE1, (u_char *) tag_list, ASN_OCTET_STR,
+ tag_list_len, NULL,
+ snmpTargetAddrTagList_index_oid,
+ snmpTargetAddrTagList_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrAddrTagList (RESERVE1) error\n" ));
+ write_snmpTargetAddrTagList (FREE, (u_char *) tag_list, ASN_OCTET_STR,
+ tag_list_len, NULL,
+ snmpTargetAddrTagList_index_oid,
+ snmpTargetAddrTagList_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrTagList (
+ RESERVE2, (u_char *) tag_list, ASN_OCTET_STR,
+ tag_list_len, NULL,
+ snmpTargetAddrTagList_index_oid,
+ snmpTargetAddrTagList_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrAddrTagList (RESERVE2) error\n" ));
+ write_snmpTargetAddrTagList (FREE, (u_char *) tag_list, ASN_OCTET_STR,
+ tag_list_len, NULL,
+ snmpTargetAddrTagList_index_oid,
+ snmpTargetAddrTagList_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetAddrTagList (
+ ACTION, (u_char *) tag_list, ASN_OCTET_STR,
+ tag_list_len, NULL,
+ snmpTargetAddrTagList_index_oid,
+ snmpTargetAddrTagList_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrAddrTagList (ACTION) error\n" ));
+ write_snmpTargetAddrTagList (UNDO, (u_char *) tag_list, ASN_OCTET_STR,
+ tag_list_len, NULL,
+ snmpTargetAddrTagList_index_oid,
+ snmpTargetAddrTagList_index_oid_size);
+ }
+
+ write_snmpTargetAddrTagList (COMMIT, (u_char *) tag_list, ASN_OCTET_STR,
+ tag_list_len, NULL,
+ snmpTargetAddrTagList_index_oid,
+ snmpTargetAddrTagList_index_oid_size);
+
+ return 0;
+}
+
+int
+addRow_snmpTargetAddrTable (unsigned char *taddress, size_t taddress_len)
+{
+ set_snmpTargetAddrRowStatus (RS_CREATEANDWAIT);
+ set_snmpTargetAddrTDomain (snmpTargetAddrTDomain_value_oid,
+ snmpTargetAddrTDomain_value_oid_size);
+ set_snmpTargetAddrTAddress (taddress, taddress_len);
+ set_snmpTargetAddrParams (index_str, index_str_len);
+ set_snmpTargetAddrTagList (index_str, index_str_len);
+ set_snmpTargetAddrRowStatus (RS_ACTIVE);
+
+ return 0;
+}
+
+int
+modifyRow_snmpTargetAddrTable (unsigned char *taddress, size_t taddress_len)
+{
+ set_snmpTargetAddrRowStatus (RS_NOTINSERVICE);
+ set_snmpTargetAddrTAddress (taddress, taddress_len);
+ set_snmpTargetAddrRowStatus (RS_ACTIVE);
+
+ return 0;
+}
+
+
+/*** snmpTargetParamTable ***/
+/* set snmpTargetParamsRowStatus to given value */
+int
+set_snmpTargetParamsRowStatus (int row_status)
+{
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsRowStatus (
+ RESERVE1, (u_char *) &row_status, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsRowStatus_index_oid,
+ snmpTargetParamsRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsRowStatus (RESERVE1) error\n" ));
+ write_snmpTargetParamsRowStatus (
+ FREE, (u_char *) &row_status, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsRowStatus_index_oid,
+ snmpTargetParamsRowStatus_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsRowStatus (
+ RESERVE2, (u_char *) &row_status, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsRowStatus_index_oid,
+ snmpTargetParamsRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsRowStatus (RESERVE2) error\n" ));
+ write_snmpTargetParamsRowStatus (
+ FREE, (u_char *) &row_status, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsRowStatus_index_oid,
+ snmpTargetParamsRowStatus_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsRowStatus (
+ ACTION, (u_char *) &row_status, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsRowStatus_index_oid,
+ snmpTargetParamsRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsRowStatus (ACTION) error\n" ));
+ write_snmpTargetParamsRowStatus (
+ UNDO, (u_char *) &row_status, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsRowStatus_index_oid,
+ snmpTargetParamsRowStatus_index_oid_size);
+ }
+
+ write_snmpTargetParamsRowStatus (COMMIT, (u_char *) &row_status,
+ ASN_INTEGER, sizeof (long),
+ NULL, snmpTargetParamsRowStatus_index_oid,
+ snmpTargetParamsRowStatus_index_oid_size);
+
+ return 0;
+}
+
+/* snmpTargetParamsMPModel */
+/* set snmpTargetParamsMPModel to given value */
+int
+set_snmpTargetParamsMPModel (int mp_model)
+{
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsMPModel (
+ RESERVE1, (u_char *) &mp_model, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsMPModel_index_oid,
+ snmpTargetParamsMPModel_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsMPModel (RESERVE1) error\n" ));
+ write_snmpTargetParamsMPModel (FREE, (u_char *) &mp_model, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsMPModel_index_oid,
+ snmpTargetParamsMPModel_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsMPModel (
+ RESERVE2, (u_char *) &mp_model, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsMPModel_index_oid,
+ snmpTargetParamsMPModel_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsMPModel (RESERVE2) error\n" ));
+ write_snmpTargetParamsMPModel (FREE, (u_char *) &mp_model, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsMPModel_index_oid,
+ snmpTargetParamsMPModel_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsMPModel (
+ ACTION, (u_char *) &mp_model, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsMPModel_index_oid,
+ snmpTargetParamsMPModel_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsMPModel (ACTION) error\n" ));
+ write_snmpTargetParamsMPModel (UNDO, (u_char *) &mp_model, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsMPModel_index_oid,
+ snmpTargetParamsMPModel_index_oid_size);
+ }
+
+ write_snmpTargetParamsMPModel (COMMIT, (u_char *) &mp_model, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsMPModel_index_oid,
+ snmpTargetParamsMPModel_index_oid_size);
+
+ return 0;
+}
+
+/* set snmpTargetParamsSecurityModel to given value */
+int
+set_snmpTargetParamsSecurityModel (int sec_model)
+{
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsSecModel (
+ RESERVE1, (u_char *) &sec_model, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsSecurityModel_index_oid,
+ snmpTargetParamsSecurityModel_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecModel (RESERVE1) error\n" ));
+ write_snmpTargetParamsSecModel (
+ FREE, (u_char *) &sec_model, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsSecurityModel_index_oid,
+ snmpTargetParamsSecurityModel_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsSecModel (
+ RESERVE2, (u_char *) &sec_model, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsSecurityModel_index_oid,
+ snmpTargetParamsSecurityModel_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecModel (RESERVE2) error\n" ));
+ write_snmpTargetParamsSecModel (
+ FREE, (u_char *) &sec_model, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsSecurityModel_index_oid,
+ snmpTargetParamsSecurityModel_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsSecModel (
+ ACTION, (u_char *) &sec_model, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsSecurityModel_index_oid,
+ snmpTargetParamsSecurityModel_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecModel (ACTION) error\n" ));
+ write_snmpTargetParamsSecModel (
+ UNDO, (u_char *) &sec_model, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsSecurityModel_index_oid,
+ snmpTargetParamsSecurityModel_index_oid_size);
+ }
+
+ write_snmpTargetParamsSecModel (
+ COMMIT, (u_char *) &sec_model, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsSecurityModel_index_oid,
+ snmpTargetParamsSecurityModel_index_oid_size);
+
+ return 0;
+}
+
+/* set snmpTargetParamsSecurityName to given value */
+int
+set_snmpTargetParamsSecurityName (char *sec_name, size_t sec_name_len)
+{
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsSecName (
+ RESERVE1, (u_char *) sec_name, ASN_OCTET_STR,
+ sec_name_len, NULL,
+ snmpTargetParamsSecurityName_index_oid,
+ snmpTargetParamsSecurityName_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecName (RESERVE1) error\n" ));
+ write_snmpTargetParamsSecName (
+ FREE, (u_char *) sec_name, ASN_OCTET_STR, sec_name_len, NULL,
+ snmpTargetParamsSecurityName_index_oid,
+ snmpTargetParamsSecurityName_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsSecName (
+ RESERVE2, (u_char *) sec_name, ASN_OCTET_STR,
+ sec_name_len, NULL,
+ snmpTargetParamsSecurityName_index_oid,
+ snmpTargetParamsSecurityName_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecName (RESERVE2) error\n" ));
+ write_snmpTargetParamsSecName (
+ FREE, (u_char *) sec_name, ASN_OCTET_STR, sec_name_len, NULL,
+ snmpTargetParamsSecurityName_index_oid,
+ snmpTargetParamsSecurityName_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsSecName (
+ ACTION, (u_char *) sec_name, ASN_OCTET_STR,
+ sec_name_len, NULL,
+ snmpTargetParamsSecurityName_index_oid,
+ snmpTargetParamsSecurityName_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecName (ACTION) error\n" ));
+ write_snmpTargetParamsSecName (
+ UNDO, (u_char *) sec_name, ASN_OCTET_STR, sec_name_len, NULL,
+ snmpTargetParamsSecurityName_index_oid,
+ snmpTargetParamsSecurityName_index_oid_size);
+ }
+
+ write_snmpTargetParamsSecName (
+ COMMIT, (u_char *) sec_name, ASN_OCTET_STR, sec_name_len, NULL,
+ snmpTargetParamsSecurityName_index_oid,
+ snmpTargetParamsSecurityName_index_oid_size);
+ return 0;
+
+}
+
+/* set snmpTargetParamsSecurityLevel to given value */
+int
+set_snmpTargetParamsSecurityLevel (int sec_level)
+{
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsSecLevel (
+ RESERVE1, (u_char *) &sec_level, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsSecurityLevel_index_oid,
+ snmpTargetParamsSecurityLevel_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecLevel (RESERVE1) error\n" ));
+ write_snmpTargetParamsSecLevel (
+ FREE, (u_char *) &sec_level, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsSecurityLevel_index_oid,
+ snmpTargetParamsSecurityLevel_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsSecLevel (
+ RESERVE2, (u_char *) &sec_level, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsSecurityLevel_index_oid,
+ snmpTargetParamsSecurityLevel_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecLevel (RESERVE2) error\n" ));
+ write_snmpTargetParamsSecLevel (
+ FREE, (u_char *) &sec_level, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsSecurityLevel_index_oid,
+ snmpTargetParamsSecurityLevel_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsSecLevel (
+ ACTION, (u_char *) &sec_level, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsSecurityLevel_index_oid,
+ snmpTargetParamsSecurityLevel_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecLevel (ACTION) error\n" ));
+ write_snmpTargetParamsSecLevel (
+ UNDO, (u_char *) &sec_level, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsSecurityLevel_index_oid,
+ snmpTargetParamsSecurityLevel_index_oid_size);
+ }
+
+ write_snmpTargetParamsSecLevel (
+ COMMIT, (u_char *) &sec_level, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsSecurityLevel_index_oid,
+ snmpTargetParamsSecurityLevel_index_oid_size);
+
+ return 0;
+
+}
+
+/* set snmpTargetParamsStorageType to given value */
+int
+set_snmpTargetParamsStorageType (int st_type)
+{
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsStorageType (
+ RESERVE1, (u_char *) &st_type, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsStorageType_index_oid,
+ snmpTargetParamsStorageType_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsStorageType (RESERVE1) error\n" ));
+ write_snmpTargetParamsStorageType (
+ FREE, (u_char *) &st_type, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsStorageType_index_oid,
+ snmpTargetParamsStorageType_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsStorageType (
+ RESERVE2, (u_char *) &st_type, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsStorageType_index_oid,
+ snmpTargetParamsStorageType_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsStorageType (RESERVE2) error\n" ));
+ write_snmpTargetParamsStorageType (
+ FREE, (u_char *) &st_type, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsStorageType_index_oid,
+ snmpTargetParamsStorageType_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR != write_snmpTargetParamsStorageType (
+ ACTION, (u_char *) &st_type, ASN_INTEGER,
+ sizeof (long), NULL,
+ snmpTargetParamsStorageType_index_oid,
+ snmpTargetParamsStorageType_index_oid_size))
+ {
+ DEBUGMSGTL(("EoCAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsStorageType (ACTION) error\n" ));
+ write_snmpTargetParamsStorageType (
+ UNDO, (u_char *) &st_type, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsStorageType_index_oid,
+ snmpTargetParamsStorageType_index_oid_size);
+ }
+
+ write_snmpTargetParamsStorageType (
+ COMMIT, (u_char *) &st_type, ASN_INTEGER, sizeof (long), NULL,
+ snmpTargetParamsStorageType_index_oid,
+ snmpTargetParamsStorageType_index_oid_size);
+
+ return 0;
+
+}
+
+
+int
+addRow_snmpTargetParamsTable (char *sec_name, size_t sec_name_len)
+{
+ set_snmpTargetParamsRowStatus (RS_CREATEANDWAIT);
+ set_snmpTargetParamsMPModel (SNMP_MP_MODEL_SNMPv2c);
+ set_snmpTargetParamsSecurityModel (SNMP_SEC_MODEL_SNMPv2c);
+ set_snmpTargetParamsSecurityName (sec_name, sec_name_len);
+ set_snmpTargetParamsSecurityLevel (SNMP_SEC_LEVEL_NOAUTH);
+ set_snmpTargetParamsStorageType (ST_VOLATILE);
+ set_snmpTargetParamsRowStatus (RS_ACTIVE);
+
+ return 0;
+}
+
+int
+modifyRow_snmpTargetParamsTable (char *sec_name, size_t sec_name_len)
+{
+ set_snmpTargetParamsRowStatus (RS_NOTINSERVICE);
+ set_snmpTargetParamsSecurityName (sec_name, sec_name_len);
+ set_snmpTargetParamsRowStatus (RS_ACTIVE);
+
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps_interface.h
new file mode 100644
index 0000000000..ac95c68221
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/eoc-alarms-traps/EoCAlarmsAndTraps_interface.h
@@ -0,0 +1,71 @@
+#ifndef EOCALARMSANDTRAPS_INTERFACE_H
+#define EOCALARMSANDTRAPS_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* include headers for notification and target tables */
+#include "notification/snmpNotifyTable.h"
+#include "target/snmpTargetAddrEntry.h"
+#include "target/snmpTargetParamsEntry.h"
+
+#define ROW_ADD 1
+#define ROW_MODIFY 2
+
+#define TABLE_INDEX_STR "addr1"
+#define TABLE_INDEX_LEN 5
+#define TABLE_INDEX_ASC 97, 100, 100, 114, 49
+
+/* definitions for OID strings */
+/** snmpNotifyTable **/
+#define SNMPNOTIFYROWSTATUSINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 13, 1, 1, 1, 5, TABLE_INDEX_ASC
+#define SNMPNOTIFYTAGINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 13, 1, 1, 1, 2, TABLE_INDEX_ASC
+#define SNMPNOTIFYTYPEINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 13, 1, 1, 1, 3, TABLE_INDEX_ASC
+#define SNMPNOTIFYSTORAGETYPEINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 13, 1, 1, 1, 4, TABLE_INDEX_ASC
+
+/** snmpTargetAddrTable **/
+#define SNMPTARGETADDRROWSTATUSINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 9, TABLE_INDEX_ASC
+#define SNMPTARGETADDRTDOMAININDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 2, TABLE_INDEX_ASC
+#define SNMPTARGETADDRTDOMAINUDP_OID \
+ 1, 3, 6, 1, 6, 1, 1
+#define SNMPTARGETADDRTADDRESSINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 3, TABLE_INDEX_ASC
+#define SNMPTARGETADDRPARAMSINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 7, TABLE_INDEX_ASC
+#define SNMPTARGETADDRTAGLISTINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 6, TABLE_INDEX_ASC
+
+/** snmpTargetParamsTable **/
+#define SNMPTARGETPARAMSROWSTATUSINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 3, 1, 7, TABLE_INDEX_ASC
+#define SNMPTARGETPARAMSMPMODELINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 3, 1, 2, TABLE_INDEX_ASC
+#define SNMPTARGETPARAMSSECURITYMODELINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 3, 1, 3, TABLE_INDEX_ASC
+#define SNMPTARGETPARAMSSECURITYNAMEINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 3, 1, 4, TABLE_INDEX_ASC
+#define SNMPTARGETPARAMSSECURITYLEVELINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 3, 1, 5, TABLE_INDEX_ASC
+#define SNMPTARGETPARAMSSTORAGETYPEINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 3, 1, 6, TABLE_INDEX_ASC
+
+/* function declarations */
+int addRow_snmpNotifyTable(void);
+int addRow_snmpTargetAddrTable(unsigned char *taddress, size_t taddress_len);
+int modifyRow_snmpTargetAddrTable(unsigned char *taddress,
+ size_t taddress_len);
+int addRow_snmpTargetParamsTable(char *sec_name, size_t sec_name_len);
+int modifyRow_snmpTargetParamsTable(char *sec_name, size_t sec_name_len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCALARMSANDTRAPS_INTERFACE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples.h
new file mode 100644
index 0000000000..83d3ccb050
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples.h
@@ -0,0 +1,4 @@
+config_require(examples/scalar_int)
+config_require(examples/watched)
+config_require(examples/data_set)
+config_require(examples/delayed_instance)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/Makefile.dlmod b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/Makefile.dlmod
new file mode 100644
index 0000000000..13bf3e45ad
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/Makefile.dlmod
@@ -0,0 +1,34 @@
+#
+# Makefile for dynamically loadable module `example'
+#
+#DLMODDIR = $(libdir)/snmp/dlmod
+#UCDTOPDIR = $(top_srcdir)
+DLMODDIR = /usr/local/lib/snmp/dlmod
+UCDTOPDIR = /usr/home/strauss/src/ucd-snmp-ibr
+TARG = example.so
+OBJS = example.o
+CC = gcc
+CFLAGS = -I$(UCDTOPDIR) -I$(UCDTOPDIR)/snmplib -I$(UCDTOPDIR)/agent -I$(UCDTOPDIR)/agent/mibgroup -shared -fPIC
+#LD = ld
+#LDFLAGS = -G -o
+LD = gcc -shared -o
+LDFLAGS =
+INSTALL = install
+LIBS =
+
+all: $(TARG)
+
+.c.o:
+ $(CC) $(CFLAGS) -o $@ -c $<
+
+$(TARG): $(OBJS)
+ $(LD) $(LDFLAGS) $@ $(OBJS) $(LIBS)
+
+clean:
+ rm -f $(OBJS) $(TARG)
+
+install: all installdirs
+ $(INSTALL) $(TARG) $(DLMODDIR)
+
+installdirs:
+ @$(SHELL) $(UCDTOPDIR)/mkinstalldirs $(DLMODDIR)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/data_set.c
new file mode 100644
index 0000000000..daed8f3921
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/data_set.c
@@ -0,0 +1,206 @@
+/** @example data_set.c
+ * This example creates a table full of information and stores all
+ * that information within the agent's memory. The "table_dataset"
+ * helper routines take care of handling all aspects of SNMP requests
+ * as they come in (yay!).
+ *
+ * The exmaple we are instrumenting is an otherwise-useless table
+ * containing the names of IETF working group chairs. Obviously,
+ * this data isn't all that useful from a network management point of
+ * view but this example only demonstrates how to use and store data.
+ * For more useful examples (but more complex), check out the
+ * apps/notification_log.c file which implements parts of the
+ * NOTIFICATION-LOG-MIB for logging incoming SNMP notifications.
+ *
+ * Much of this code could be automatically generated by running
+ * mib2c as follows:
+ *
+ * - mib2c -c mib2c.create-dataset.conf netSnmpIETFWGTable
+ *
+ * The table is defined roughly as follows:
+ *
+ * <pre>
+ * % snmptranslate -m NET-SNMP-EXAMPLES-MIB -Tp -IR netSnmpIETFWGTable
+ * |+--netSnmpIETFWGTable(1)
+ * | |
+ * | +--netSnmpIETFWGEntry(1)
+ * | | Index: nsIETFWGName
+ * | |
+ * | +-- ---- String nsIETFWGName(1)
+ * | | Size: 1..32
+ * | +-- CR-- String nsIETFWGChair1(2)
+ * | +-- CR-- String nsIETFWGChair2(3)
+ * </pre>
+ *
+ * If this module is compiled into an agent, you should be able to
+ * issue snmp commands that look something like (valid authentication
+ * information not shown in these commands):
+ *
+ * <pre>
+ * % snmpwalk localhost netSnmpIETFWGTable
+ * nsIETFWGChair1."snmpv3" = "Russ Mundy"
+ * nsIETFWGChair2."snmpv3" = "David Harrington"
+ *
+ * % snmpset localhost nsIETFWGChair1.\"sming\" = "David Durham"
+ * nsIETFWGChair1."sming" = "David Durham"
+ *
+ * % snmpwalk localhost netSnmpIETFWGTable
+ * nsIETFWGChair1."sming" = "David Durham"
+ * nsIETFWGChair1."snmpv3" = "Russ Mundy"
+ * nsIETFWGChair2."snmpv3" = "David Harrington"
+ *
+ * In your snmpd.conf file, put the following line:
+ * add_row netSnmpIETFWGTable eos "Glenn Waters" "Dale Francisco"
+ *
+ * % snmpwalk localhost netSnmpIETFWGTable
+ * nsIETFWGChair1.\"eos\" = "Glenn Waters"
+ * nsIETFWGChair1.\"snmpv3\" = "Russ Mundy"
+ * nsIETFWGChair2.\"eos\" = "Dale Francisco"
+ * nsIETFWGChair2.\"snmpv3\" = "David Harrington"
+ * </pre>
+ */
+
+/*
+ * start be including the appropriate header files
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * our initialization routine, automatically called by the agent
+ */
+/*
+ * (to get called, the function name must match init_FILENAME()
+ */
+void
+init_data_set(void)
+{
+ netsnmp_table_data_set *table_set;
+ netsnmp_table_row *row;
+
+ /*
+ * the OID we want to register our integer at. This should be the
+ * * OID node for the entire table. In our case this is the
+ * * netSnmpIETFWGTable oid definition
+ */
+ oid my_registration_oid[] =
+ { 1, 3, 6, 1, 4, 1, 8072, 2, 2, 1 };
+
+ /*
+ * a debugging statement. Run the agent with -Dexample_data_set to see
+ * * the output of this debugging statement.
+ */
+ DEBUGMSGTL(("example_data_set",
+ "Initalizing example dataset table\n"));
+
+ /*
+ * It's going to be the "working group chairs" table, since I'm
+ * * sitting at an IETF convention while I'm writing this.
+ * *
+ * * column 1 = index = string = WG name
+ * * column 2 = string = chair #1
+ * * column 3 = string = chair #2 (most WGs have 2 chairs now)
+ */
+
+ table_set = netsnmp_create_table_data_set("netSnmpIETFWGTable");
+
+ /*
+ * allow the creation of new rows via SNMP SETs
+ */
+ table_set->allow_creation = 1;
+
+ /*
+ * set up what a row "should" look like, starting with the index
+ */
+ netsnmp_table_dataset_add_index(table_set, ASN_OCTET_STR);
+
+ /*
+ * define what the columns should look like. both are octet strings here
+ */
+ netsnmp_table_set_multi_add_default_row(table_set,
+ /*
+ * column 2 = OCTET STRING,
+ * writable = 1,
+ * default value = NULL,
+ * default value len = 0
+ */
+ 2, ASN_OCTET_STR, 1, NULL, 0,
+ /*
+ * similar
+ */
+ 3, ASN_OCTET_STR, 1, NULL, 0,
+ 0 /* done */ );
+
+ /*
+ * register the table
+ */
+ /*
+ * if we wanted to handle specific data in a specific way, or note
+ * * when requests came in we could change the NULL below to a valid
+ * * handler method in which we could over ride the default
+ * * behaviour of the table_dataset helper
+ */
+ netsnmp_register_table_data_set(netsnmp_create_handler_registration
+ ("netSnmpIETFWGTable", NULL,
+ my_registration_oid,
+ OID_LENGTH(my_registration_oid),
+ HANDLER_CAN_RWRITE), table_set, NULL);
+
+
+ /*
+ * create the a row for the table, and add the data
+ */
+ row = netsnmp_create_table_data_row();
+ /*
+ * set the index to the IETF WG name "snmpv3"
+ */
+ netsnmp_table_row_add_index(row, ASN_OCTET_STR, "snmpv3",
+ strlen("snmpv3"));
+
+
+ /*
+ * set column 2 to be the WG chair name "Russ Mundy"
+ */
+ netsnmp_set_row_column(row, 2, ASN_OCTET_STR,
+ "Russ Mundy", strlen("Russ Mundy"));
+ netsnmp_mark_row_column_writable(row, 2, 1); /* make writable via SETs */
+
+ /*
+ * set column 3 to be the WG chair name "David Harrington"
+ */
+ netsnmp_set_row_column(row, 3, ASN_OCTET_STR, "David Harrington",
+ strlen("David Harrington"));
+ netsnmp_mark_row_column_writable(row, 3, 1); /* make writable via SETs */
+
+ /*
+ * add the row to the table
+ */
+ netsnmp_table_dataset_add_row(table_set, row);
+
+#ifdef ADD_MORE_DATA
+ /*
+ * add the data, for the second row
+ */
+ row = netsnmp_create_table_data_row();
+ netsnmp_table_row_add_index(row, ASN_OCTET_STR, "snmpconf",
+ strlen("snmpconf"));
+ netsnmp_set_row_column(row, 2, ASN_OCTET_STR, "David Partain",
+ strlen("David Partain"));
+ netsnmp_mark_row_column_writable(row, 2, 1); /* make writable */
+ netsnmp_set_row_column(row, 3, ASN_OCTET_STR, "Jon Saperia",
+ strlen("Jon Saperia"));
+ netsnmp_mark_row_column_writable(row, 3, 1); /* make writable */
+ netsnmp_table_dataset_add_row(table_set, row);
+#endif
+
+ /*
+ * Finally, this actually allows the "add_row" token it the
+ * * snmpd.conf file to add rows to this table.
+ * * Example snmpd.conf line:
+ * * add_row netSnmpIETFWGTable eos "Glenn Waters" "Dale Francisco"
+ */
+ netsnmp_register_auto_data_table(table_set, NULL);
+
+ DEBUGMSGTL(("example_data_set", "Done initializing.\n"));
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/data_set.h
new file mode 100644
index 0000000000..e56f6007df
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/data_set.h
@@ -0,0 +1,15 @@
+#ifndef DATA_SET_H
+#define DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void init_data_set(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/delayed_instance.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/delayed_instance.c
new file mode 100644
index 0000000000..850db8c61b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/delayed_instance.c
@@ -0,0 +1,256 @@
+/** @example delayed_instance.c
+ * This example implements the netSnmpExampleSleeper object.
+ *
+ * It demonstrates 2 things:
+ *
+ * - The instance helper, which is a way of registering an exact OID
+ * such that GENEXT requests are handled entirely by the helper.
+ *
+ * - how to implement objects which normally would block the agent as
+ * it waits for external events in such a way that the agent can
+ * continue responding to other requests while this implementation
+ * waits.
+ *
+ * - Added bonus: normally the nsTransactionTable is empty, since
+ * there aren't any outstanding requests generally. When accessed,
+ * this module will create some however. Try setting
+ * netSnmpExampleSleeper.0 to 10 and then accessing it (use
+ * "snmpget -t 15 ..." to access it), and then walk the
+ * nsTransactionTable from another shell to see that not only is
+ * the walk not blocked, but that the nsTransactionTable is not
+ * empty.
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "delayed_instance.h"
+
+static u_long delay_time = 1;
+
+void
+init_delayed_instance(void)
+{
+ static oid my_delayed_oid[] =
+ { 1, 3, 6, 1, 4, 1, 8072, 2, 1, 2, 0 };
+ /*
+ * delayed handler test
+ */
+ netsnmp_handler_registration *my_test;
+
+ my_test =
+ netsnmp_create_handler_registration("delayed_instance_example",
+ delayed_instance_handler,
+ my_delayed_oid,
+ OID_LENGTH(my_delayed_oid),
+ HANDLER_CAN_RWRITE);
+
+ netsnmp_register_instance(my_test);
+}
+
+#define DELAYED_INSTANCE_SET_NAME "test_delayed"
+
+int
+delayed_instance_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+
+ DEBUGMSGTL(("delayed_instance", "Got request, mode = %d:\n",
+ reqinfo->mode));
+
+ switch (reqinfo->mode) {
+ /*
+ * here we merely mention that we'll answer this request
+ * later. we don't actually care about the mode type in this
+ * example, but for certain cases you may, so I'll leave in the
+ * otherwise useless switch and case statements
+ */
+
+ default:
+ /*
+ * mark this variable as something that can't be handled now.
+ * We'll answer it later.
+ */
+ requests->delegated = 1;
+
+ /*
+ * register an alarm to update the results at a later
+ * time. Normally, we might have to query something else
+ * (like an external request sent to a different network
+ * or system socket, etc), but for this example we'll do
+ * something really simply and just insert an alarm for a
+ * certain period of time
+ */
+ snmp_alarm_register(delay_time, /* seconds */
+ 0, /* dont repeat. */
+ return_delayed_response, /* the function
+ * to call */
+ /*
+ * here we create a "cache" of useful
+ * information that we'll want later
+ * on. This argument is passed back
+ * to us in the callback function for
+ * an alarm
+ */
+ (void *)
+ netsnmp_create_delegated_cache(handler,
+ reginfo,
+ reqinfo,
+ requests,
+ NULL));
+ break;
+
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+void
+return_delayed_response(unsigned int clientreg, void *clientarg)
+{
+ /*
+ * extract the cache from the passed argument
+ */
+ netsnmp_delegated_cache *cache = (netsnmp_delegated_cache *) clientarg;
+
+ netsnmp_request_info *requests;
+ netsnmp_agent_request_info *reqinfo;
+ u_long *delay_time_cache = NULL;
+
+ /*
+ * here we double check that the cache we created earlier is still
+ * * valid. If not, the request timed out for some reason and we
+ * * don't need to keep processing things. Should never happen, but
+ * * this double checks.
+ */
+ cache = netsnmp_handler_check_cache(cache);
+
+ if (!cache) {
+ snmp_log(LOG_ERR, "illegal call to return delayed response\n");
+ return;
+ }
+
+ /*
+ * re-establish the previous pointers we are used to having
+ */
+ reqinfo = cache->reqinfo;
+ requests = cache->requests;
+
+ DEBUGMSGTL(("delayed_instance",
+ "continuing delayed request, mode = %d\n",
+ cache->reqinfo->mode));
+
+ /*
+ * mention that it's no longer delegated, and we've now answered
+ * the query (which we'll do down below).
+ */
+ requests->delegated = 0;
+
+ switch (cache->reqinfo->mode) {
+ /*
+ * registering as an instance means we don't need to deal with
+ * getnext processing, so we don't handle it here at all.
+ *
+ * However, since the instance handler already reset the mode
+ * back to GETNEXT from the faked GET mode, we need to do the
+ * same thing in both cases. This should be fixed in future
+ * versions of net-snmp hopefully.
+ */
+
+ case MODE_GET:
+ case MODE_GETNEXT:
+ /*
+ * return the currend delay time
+ */
+ snmp_set_var_typed_value(cache->requests->requestvb,
+ ASN_INTEGER,
+ (u_char *) & delay_time,
+ sizeof(delay_time));
+ break;
+
+ case MODE_SET_RESERVE1:
+ /*
+ * check type
+ */
+ if (requests->requestvb->type != ASN_INTEGER) {
+ /*
+ * not an integer. Bad dog, no bone.
+ */
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_WRONGTYPE);
+ /*
+ * we don't need the cache any longer
+ */
+ netsnmp_free_delegated_cache(cache);
+ return;
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /*
+ * store old value for UNDO support in the future.
+ */
+ memdup((u_char **) & delay_time_cache,
+ (u_char *) & delay_time, sizeof(delay_time));
+
+ /*
+ * malloc failed
+ */
+ if (delay_time_cache == NULL) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ netsnmp_free_delegated_cache(cache);
+ return;
+ }
+
+ /*
+ * Add our temporary information to the request itself.
+ * This is then retrivable later. The free function
+ * passed auto-frees it when the request is later
+ * deleted.
+ */
+ netsnmp_request_add_list_data(requests,
+ netsnmp_create_data_list
+ (DELAYED_INSTANCE_SET_NAME,
+ delay_time_cache, free));
+ break;
+
+ case MODE_SET_ACTION:
+ /*
+ * update current value
+ */
+ delay_time = *(requests->requestvb->val.integer);
+ DEBUGMSGTL(("testhandler", "updated delay_time -> %d\n",
+ delay_time));
+ break;
+
+ case MODE_SET_UNDO:
+ /*
+ * ack, something somewhere failed. We reset back to the
+ * previously old value by extracting the previosuly
+ * stored information back out of the request
+ */
+ delay_time =
+ *((u_long *) netsnmp_request_get_list_data(requests,
+ DELAYED_INSTANCE_SET_NAME));
+ break;
+
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ /*
+ * the only thing to do here is free the old memdup'ed
+ * value, but it's auto-freed by the datalist recovery, so
+ * we don't have anything to actually do here
+ */
+ break;
+ }
+
+ /*
+ * free the information cache
+ */
+ netsnmp_free_delegated_cache(cache);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/delayed_instance.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/delayed_instance.h
new file mode 100644
index 0000000000..9d0e5225ae
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/delayed_instance.h
@@ -0,0 +1,16 @@
+#ifndef DELAYED_INSTANCE_H
+#define DELAYED_INSTANCE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+Netsnmp_Node_Handler delayed_instance_handler;
+void init_delayed_instance(void);
+SNMPAlarmCallback return_delayed_response;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DELAYED_INSTANCE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/example.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/example.c
new file mode 100644
index 0000000000..7af86636ea
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/example.c
@@ -0,0 +1,743 @@
+/*
+ * Template MIB group implementation - example.c
+ *
+ */
+
+/*
+ * include important headers
+ */
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+/*
+ * needed by util_funcs.h
+ */
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * header_generic() comes from here
+ */
+#include "util_funcs.h"
+
+/*
+ * include our .h file
+ */
+#include "example.h"
+
+
+ /*
+ * Certain objects can be set via configuration file directives.
+ * These variables hold the values for such objects, as they need to
+ * be accessible to both the config handlers, and the callback routine.
+ */
+#define EXAMPLE_STR_LEN 300
+#define EXAMPLE_STR_DEFAULT "life the universe and everything"
+int example_int = 42;
+char example_str[EXAMPLE_STR_LEN];
+
+ /*
+ * Forward declarations for the config handlers
+ */
+void example_parse_config_exampleint(const char *token,
+ char *cptr);
+void example_parse_config_examplestr(const char *token,
+ char *cptr);
+void example_free_config_exampleint(void);
+void example_free_config_examplestr(void);
+
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+ /*
+ * This array structure defines a representation of the
+ * MIB being implemented.
+ *
+ * The type of the array is 'struct variableN', where N is
+ * large enough to contain the longest OID sub-component
+ * being loaded. This will normally be the maximum value
+ * of the fifth field in each line. In this case, the second
+ * and third entries are both of size 2, so we're using
+ * 'struct variable2'
+ *
+ * The supported values for N are listed in <agent/var_struct.h>
+ * If the value you need is not listed there, simply use the
+ * next largest that is.
+ *
+ * The format of each line is as follows
+ * (using the first entry as an example):
+ * 1: EXAMPLESTRING:
+ * The magic number defined in the example header file.
+ * This is passed to the callback routine and is used
+ * to determine which object is being queried.
+ * 2: ASN_OCTET_STR:
+ * The type of the object.
+ * Valid types are listed in <snmp_impl.h>
+ * 3: RONLY (or RWRITE):
+ * Whether this object can be SET or not.
+ * 4: var_example:
+ * The callback routine, used when the object is queried.
+ * This will usually be the same for all objects in a module
+ * and is typically defined later in this file.
+ * 5: 1:
+ * The length of the OID sub-component (the next field)
+ * 6: {1}:
+ * The OID sub-components of this entry.
+ * In other words, the bits of the full OID that differ
+ * between the various entries of this array.
+ * This value is appended to the common prefix (defined later)
+ * to obtain the full OID of each entry.
+ */
+struct variable2 example_variables[] = {
+ {EXAMPLESTRING, ASN_OCTET_STR, RONLY, var_example, 1, {1}},
+ {EXAMPLEINTEGER, ASN_INTEGER, RWRITE, var_example, 2, {2, 1}},
+ {EXAMPLEOBJECTID, ASN_OBJECT_ID, RONLY, var_example, 2, {2, 2}},
+ {EXAMPLETIMETICKS, ASN_TIMETICKS, RONLY, var_example, 1, {3}},
+ {EXAMPLEIPADDRESS, ASN_IPADDRESS, RONLY, var_example, 1, {4}},
+ {EXAMPLECOUNTER, ASN_COUNTER, RONLY, var_example, 1, {5}},
+ {EXAMPLEGAUGE, ASN_GAUGE, RONLY, var_example, 1, {6}},
+ {EXAMPLETRIGGERTRAP, ASN_INTEGER, RWRITE, var_example, 1, {7}},
+ {EXAMPLETRIGGERTRAP2, ASN_INTEGER, RWRITE, var_example, 1, {8}}
+};
+
+ /*
+ * This array defines the OID of the top of the mib tree that we're
+ * registering underneath.
+ * Note that this needs to be the correct size for the OID being
+ * registered, so that the length of the OID can be calculated.
+ * The format given here is the simplest way to achieve this.
+ */
+oid example_variables_oid[] = { 1, 3, 6, 1, 4, 1, 2021, 254 };
+
+
+
+ /*
+ * This function is called at the time the agent starts up
+ * to do any initializations that might be required.
+ *
+ * In theory it is optional and can be omitted if no
+ * initialization is needed. In practise, every module
+ * will need to register itself (or the objects being
+ * implemented will not appear in the MIB tree), and this
+ * registration is typically done here.
+ *
+ * If this function is added or removed, you must re-run
+ * the configure script, to detect this change.
+ */
+void
+init_example(void)
+{
+ /*
+ * Register ourselves with the agent to handle our mib tree.
+ * The arguments are:
+ * descr: A short description of the mib group being loaded.
+ * var: The variable structure to load.
+ * (the name of the variable structure defined above)
+ * vartype: The type of this variable structure
+ * theoid: The OID pointer this MIB is being registered underneath.
+ */
+ REGISTER_MIB("example", example_variables, variable2,
+ example_variables_oid);
+
+
+ /*
+ * Register config handlers for the two objects that can be set
+ * via configuration file directive.
+ * Also set a default value for the string object. Note that the
+ * example integer variable was initialised above.
+ */
+ strncpy(example_str, EXAMPLE_STR_DEFAULT, EXAMPLE_STR_LEN);
+
+ snmpd_register_config_handler("exampleint",
+ example_parse_config_exampleint,
+ example_free_config_exampleint,
+ "exampleint value");
+ snmpd_register_config_handler("examplestr",
+ example_parse_config_examplestr,
+ example_free_config_examplestr,
+ "examplestr value");
+ snmpd_register_config_handler("examplestring",
+ example_parse_config_examplestr,
+ example_free_config_examplestr,
+ "examplestring value");
+
+ /*
+ * One common requirement is to read values from the kernel.
+ * This is usually initialised here, to speed up access when the
+ * information is read in, as a response to an incoming request.
+ *
+ * This module doesn't actually use this mechanism,
+ * so this call is commented out here.
+ */
+ /*
+ * auto_nlist( "example_symbol", 0, 0 );
+ */
+}
+
+ /*********************
+ *
+ * Configuration file handling functions
+ *
+ *********************/
+
+void
+example_parse_config_exampleint(const char *token, char *cptr)
+{
+ example_int = atoi(cptr);
+}
+
+void
+example_parse_config_examplestr(const char *token, char *cptr)
+{
+ /*
+ * Make sure the string fits in the space allocated for it.
+ */
+ if (strlen(cptr) < EXAMPLE_STR_LEN)
+ strcpy(example_str, cptr);
+ else {
+ /*
+ * Truncate the string if necessary.
+ * An alternative approach would be to log an error,
+ * and discard this value altogether.
+ */
+ strncpy(example_str, cptr, EXAMPLE_STR_LEN - 4);
+ example_str[EXAMPLE_STR_LEN - 4] = 0;
+ strcat(example_str, "...");
+ example_str[EXAMPLE_STR_LEN - 1] = 0;
+ }
+}
+
+ /*
+ * We don't need to do anything special when closing down
+ */
+void
+example_free_config_exampleint(void)
+{
+}
+
+void
+example_free_config_examplestr(void)
+{
+}
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+ /*
+ * Define the callback function used in the example_variables structure.
+ * This is called whenever an incoming request refers to an object
+ * within this sub-tree.
+ *
+ * Four of the parameters are used to pass information in.
+ * These are:
+ * vp The entry from the 'example_variables' array for the
+ * object being queried.
+ * name The OID from the request.
+ * length The length of this OID.
+ * exact A flag to indicate whether this is an 'exact' request
+ * (GET/SET) or an 'inexact' one (GETNEXT/GETBULK).
+ *
+ * Four of the parameters are used to pass information back out.
+ * These are:
+ * name The OID being returned.
+ * length The length of this OID.
+ * var_len The length of the answer being returned.
+ * write_method A pointer to the SET function for this object.
+ *
+ * Note that name & length serve a dual purpose in both roles.
+ */
+
+u_char *
+var_example(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ /*
+ * The result returned from this function needs to be a pointer to
+ * static data (so that it can be accessed from outside).
+ * Define suitable variables for any type of data we may return.
+ */
+ static char string[EXAMPLE_STR_LEN]; /* for EXAMPLESTRING */
+ static oid oid_ret[8]; /* for EXAMPLEOBJECTID */
+ static long long_ret; /* for everything else */
+
+ /*
+ * Before returning an answer, we need to check that the request
+ * refers to a valid instance of this object. The utility routine
+ * 'header_generic' can be used to do this for scalar objects.
+ *
+ * This routine 'header_simple_table' does the same thing for "simple"
+ * tables. (See the AGENT.txt file for the definition of a simple table).
+ *
+ * Both these utility routines also set up default values for the
+ * return arguments (assuming the check succeeded).
+ * The name and length are set suitably for the current object,
+ * var_len assumes that the result is an integer of some form,
+ * and write_method assumes that the object cannot be set.
+ *
+ * If these assumptions are correct, this callback routine simply
+ * needs to return a pointer to the appropriate value (using 'long_ret').
+ * Otherwise, 'var_len' and/or 'write_method' should be set suitably.
+ */
+ DEBUGMSGTL(("example", "var_example entered\n"));
+ if (header_generic(vp, name, length, exact, var_len, write_method) ==
+ MATCH_FAILED)
+ return NULL;
+
+
+ /*
+ * Many object will need to obtain data from the operating system in
+ * order to return the appropriate value. Typically, this is done
+ * here - immediately following the 'header' call, and before the
+ * switch statement. This is particularly appropriate if a single
+ * interface call can return data for all the objects supported.
+ *
+ * This example module does not rely on external data, so no such
+ * calls are needed in this case.
+ */
+
+ /*
+ * Now use the magic number from the variable pointer 'vp' to
+ * select the particular object being queried.
+ * In each case, one of the static objects is set up with the
+ * appropriate information, and returned mapped to a 'u_char *'
+ */
+ switch (vp->magic) {
+ case EXAMPLESTRING:
+ sprintf(string, example_str);
+ /*
+ * Note that the assumption that the answer will be an
+ * integer does not hold true in this case, so the length
+ * of the answer needs to be set explicitly.
+ */
+ *var_len = strlen(string);
+ return (u_char *) string;
+
+ case EXAMPLEINTEGER:
+ /*
+ * Here the length assumption is correct, but the
+ * object is writeable, so we need to set the
+ * write_method pointer as well as the current value.
+ */
+ long_ret = example_int;
+ *write_method = write_exampleint;
+ return (u_char *) & long_ret;
+
+ case EXAMPLEOBJECTID:
+ oid_ret[0] = 1;
+ oid_ret[1] = 3;
+ oid_ret[2] = 6;
+ oid_ret[3] = 1;
+ oid_ret[4] = 4;
+ oid_ret[5] = oid_ret[6] = oid_ret[7] = 42;
+ /*
+ * Again, the assumption regarding the answer length is wrong.
+ */
+ *var_len = 8 * sizeof(oid);
+ return (u_char *) oid_ret;
+
+ case EXAMPLETIMETICKS:
+ /*
+ * Here both assumptions are correct,
+ * so we just need to set up the answer.
+ */
+ long_ret = 363136200; /* 42 days, 42 minutes and 42.0 seconds */
+ return (u_char *) & long_ret;
+
+ case EXAMPLEIPADDRESS:
+ /*
+ * ipaddresses get returned as a long. ick
+ */
+ /*
+ * we're returning 127.0.0.1
+ */
+ long_ret = ntohl(INADDR_LOOPBACK);
+ return (u_char *) & long_ret;
+
+ case EXAMPLECOUNTER:
+ long_ret = 42;
+ return (u_char *) & long_ret;
+
+ case EXAMPLEGAUGE:
+ long_ret = 42; /* Do we detect a theme running through these answers? */
+ return (u_char *) & long_ret;
+
+ case EXAMPLETRIGGERTRAP:
+ /*
+ * This object is essentially "write-only".
+ * It only exists to trigger the sending of a trap.
+ * Reading it will always return 0.
+ */
+ long_ret = 0;
+ *write_method = write_exampletrap;
+ return (u_char *) & long_ret;
+
+ case EXAMPLETRIGGERTRAP2:
+ /*
+ * This object is essentially "write-only".
+ * It only exists to trigger the sending of a v2 trap.
+ * Reading it will always return 0.
+ */
+ long_ret = 0;
+ *write_method = write_exampletrap2;
+ return (u_char *) & long_ret;
+
+ default:
+ /*
+ * This will only be triggered if there's a problem with
+ * the coding of the module. SNMP requests that reference
+ * a non-existant OID will be directed elsewhere.
+ * If this branch is reached, log an error, so that
+ * the problem can be investigated.
+ */
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in examples/var_example\n",
+ vp->magic));
+ }
+ /*
+ * If we fall through to here, fail by returning NULL.
+ * This is essentially a continuation of the 'default' case above.
+ */
+ return NULL;
+}
+
+ /*********************
+ *
+ * Writeable object SET handling routines
+ *
+ *********************/
+int
+write_exampleint(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ /*
+ * Define an arbitrary maximum permissible value
+ */
+#define MAX_EXAMPLE_INT 100
+ static long intval;
+ static long old_intval;
+
+ switch (action) {
+ case RESERVE1:
+ /*
+ * Check that the value being set is acceptable
+ */
+ if (var_val_type != ASN_INTEGER) {
+ DEBUGMSGTL(("example", "%x not integer type", var_val_type));
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > sizeof(long)) {
+ DEBUGMSGTL(("example", "wrong length %x", var_val_len));
+ return SNMP_ERR_WRONGLENGTH;
+ }
+
+ intval = *((long *) var_val);
+ if (intval > MAX_EXAMPLE_INT) {
+ DEBUGMSGTL(("example", "wrong value %x", intval));
+ return SNMP_ERR_WRONGVALUE;
+ }
+ break;
+
+ case RESERVE2:
+ /*
+ * This is conventially where any necesary
+ * resources are allocated (e.g. calls to malloc)
+ * Here, we are using static variables
+ * so don't need to worry about this.
+ */
+ break;
+
+ case FREE:
+ /*
+ * This is where any of the above resources
+ * are freed again (because one of the other
+ * values being SET failed for some reason).
+ * Again, since we are using static variables
+ * we don't need to worry about this either.
+ */
+ break;
+
+ case ACTION:
+ /*
+ * Set the variable as requested.
+ * Note that this may need to be reversed,
+ * so save any information needed to do this.
+ */
+ old_intval = example_int;
+ example_int = intval;
+ break;
+
+ case UNDO:
+ /*
+ * Something failed, so re-set the
+ * variable to its previous value
+ * (and free any allocated resources).
+ */
+ example_int = old_intval;
+ break;
+
+ case COMMIT:
+ /*
+ * Everything worked, so we can discard any
+ * saved information, and make the change
+ * permanent (e.g. write to the config file).
+ * We also free any allocated resources.
+ *
+ * In this case, there's nothing to do.
+ */
+ break;
+
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_exampletrap(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ long intval;
+
+ DEBUGMSGTL(("example", "write_exampletrap entered: action=%d\n",
+ action));
+ switch (action) {
+ case RESERVE1:
+ /*
+ * The only acceptable value is the integer 1
+ */
+ if (var_val_type != ASN_INTEGER) {
+ DEBUGMSGTL(("example", "%x not integer type", var_val_type));
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > sizeof(long)) {
+ DEBUGMSGTL(("example", "wrong length %x", var_val_len));
+ return SNMP_ERR_WRONGLENGTH;
+ }
+
+ intval = *((long *) var_val);
+ if (intval != 1) {
+ DEBUGMSGTL(("example", "wrong value %x", intval));
+ return SNMP_ERR_WRONGVALUE;
+ }
+ break;
+
+ case RESERVE2:
+ /*
+ * No resources are required....
+ */
+ break;
+
+ case FREE:
+ /*
+ * ... so no resources need be freed
+ */
+ break;
+
+ case ACTION:
+ /*
+ * Having triggered the sending of a trap,
+ * it would be impossible to revoke this,
+ * so we can't actually invoke the action here.
+ */
+ break;
+
+ case UNDO:
+ /*
+ * We haven't done anything yet,
+ * so there's nothing to undo
+ */
+ break;
+
+ case COMMIT:
+ /*
+ * Everything else worked, so it's now safe
+ * to trigger the trap.
+ * Note that this is *only* acceptable since
+ * the trap sending routines are "failsafe".
+ * (In fact, they can fail, but they return no
+ * indication of this, which is the next best thing!)
+ */
+ DEBUGMSGTL(("example", "write_exampletrap sending the trap\n"));
+ send_easy_trap(SNMP_TRAP_ENTERPRISESPECIFIC, 99);
+ DEBUGMSGTL(("example", "write_exampletrap trap sent\n"));
+ break;
+
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+/*
+ * this documents how to send a SNMPv2 (and higher) trap via the
+ * send_v2trap() API.
+ *
+ * Coding SNMP-v2 Trap:
+ *
+ * The SNMPv2-Trap PDU contains at least a pair of object names and
+ * values: - sysUpTime.0 whose value is the time in hundredths of a
+ * second since the netwok management portion of system was last
+ * reinitialized. - snmpTrapOID.0 which is part of the trap group SNMPv2
+ * MIB whose value is the object-id of the specific trap you have defined
+ * in your own MIB. Other variables can be added to caracterize the
+ * trap.
+ *
+ * The function send_v2trap adds automaticallys the two objects but the
+ * value of snmpTrapOID.0 is 0.0 by default. If you want to add your trap
+ * name, you have to reconstruct this object and to add your own
+ * variable.
+ *
+ */
+
+
+
+int
+write_exampletrap2(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ long intval;
+
+ /*
+ * these variales will be used when we send the trap
+ */
+ oid objid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 }; /* snmpTrapOID.0 */
+ oid demo_trap[] = { 1, 3, 6, 1, 4, 1, 2021, 13, 990 }; /*demo-trap */
+ oid example_string_oid[] =
+ { 1, 3, 6, 1, 4, 1, 2021, 254, 1, 0 };
+ static netsnmp_variable_list var_trap;
+ static netsnmp_variable_list var_obj;
+
+ DEBUGMSGTL(("example", "write_exampletrap2 entered: action=%d\n",
+ action));
+ switch (action) {
+ case RESERVE1:
+ /*
+ * The only acceptable value is the integer 1
+ */
+ if (var_val_type != ASN_INTEGER) {
+ DEBUGMSGTL(("example", "%x not integer type", var_val_type));
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > sizeof(long)) {
+ DEBUGMSGTL(("example", "wrong length %x", var_val_len));
+ return SNMP_ERR_WRONGLENGTH;
+ }
+
+ intval = *((long *) var_val);
+ if (intval != 1) {
+ DEBUGMSGTL(("example", "wrong value %x", intval));
+ return SNMP_ERR_WRONGVALUE;
+ }
+ break;
+
+ case RESERVE2:
+ /*
+ * No resources are required....
+ */
+ break;
+
+ case FREE:
+ /*
+ * ... so no resources need be freed
+ */
+ break;
+
+ case ACTION:
+ /*
+ * Having triggered the sending of a trap,
+ * it would be impossible to revoke this,
+ * so we can't actually invoke the action here.
+ */
+ break;
+
+ case UNDO:
+ /*
+ * We haven't done anything yet,
+ * so there's nothing to undo
+ */
+ break;
+
+ case COMMIT:
+ /*
+ * Everything else worked, so it's now safe
+ * to trigger the trap.
+ * Note that this is *only* acceptable since
+ * the trap sending routines are "failsafe".
+ * (In fact, they can fail, but they return no
+ * indication of this, which is the next best thing!)
+ */
+
+ /*
+ * trap definition objects
+ */
+
+ var_trap.next_variable = &var_obj; /* next variable */
+ var_trap.name = objid_snmptrap; /* snmpTrapOID.0 */
+ var_trap.name_length = sizeof(objid_snmptrap) / sizeof(oid); /* number of sub-ids */
+ var_trap.type = ASN_OBJECT_ID;
+ var_trap.val.objid = demo_trap; /* demo-trap objid */
+ var_trap.val_len = sizeof(demo_trap); /* length in bytes (not number of subids!) */
+
+
+ /*
+ * additional objects
+ */
+
+
+ var_obj.next_variable = NULL; /* No more variables after this one */
+ var_obj.name = example_string_oid;
+ var_obj.name_length = sizeof(example_string_oid) / sizeof(oid); /* number of sub-ids */
+ var_obj.type = ASN_OCTET_STR; /* type of variable */
+ var_obj.val.string = example_str; /* value */
+ var_obj.val_len = strlen(example_str);
+ DEBUGMSGTL(("example", "write_exampletrap2 sending the v2 trap\n"));
+ send_v2trap(&var_trap);
+ DEBUGMSGTL(("example", "write_exampletrap2 v2 trap sent\n"));
+
+ break;
+
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/example.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/example.h
new file mode 100644
index 0000000000..9de5748447
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/example.h
@@ -0,0 +1,67 @@
+/*
+ * Template MIB group interface - example.h
+ *
+ */
+
+/*
+ * Don't include ourselves twice
+ */
+#ifndef _MIBGROUP_EXAMPLE_H
+#define _MIBGROUP_EXAMPLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * We use 'header_generic' from the util_funcs module,
+ * so make sure this module is included in the agent.
+ */
+config_require(util_funcs)
+
+
+ /*
+ * Declare our publically-visible functions.
+ * Typically, these will include the initialization and shutdown functions,
+ * the main request callback routine and any writeable object methods.
+ *
+ * Function prototypes are provided for the callback routine ('FindVarMethod')
+ * and writeable object methods ('WriteMethod').
+ */
+ void init_example(void);
+ FindVarMethod var_example;
+ WriteMethod write_exampleint;
+ WriteMethod write_exampletrap;
+ WriteMethod write_exampletrap2;
+
+
+ /*
+ * Magic number definitions.
+ * These must be unique for each object implemented within a
+ * single mib module callback routine.
+ *
+ * Typically, these will be the last OID sub-component for
+ * each entry, or integers incrementing from 1.
+ * (which may well result in the same values anyway).
+ *
+ * Here, the second and third objects are form a 'sub-table' and
+ * the magic numbers are chosen to match these OID sub-components.
+ * This is purely for programmer convenience.
+ * All that really matters is that the numbers are unique.
+ */
+
+#define EXAMPLESTRING 1
+#define EXAMPLEINTEGER 21
+#define EXAMPLEOBJECTID 22
+#define EXAMPLETIMETICKS 3
+#define EXAMPLEIPADDRESS 4
+#define EXAMPLECOUNTER 5
+#define EXAMPLEGAUGE 6
+#define EXAMPLETRIGGERTRAP 7
+#define EXAMPLETRIGGERTRAP2 8
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _MIBGROUP_EXAMPLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable.c
new file mode 100644
index 0000000000..714eca8241
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable.c
@@ -0,0 +1,566 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.iterate_access.conf,v 1.4 2003/07/01 00:15:11 hardaker Exp $
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "netSnmpHostsTable.h"
+#include "netSnmpHostsTable_checkfns.h"
+#include "netSnmpHostsTable_access.h"
+
+static netsnmp_oid_stash_node *undoStorage = NULL;
+static netsnmp_oid_stash_node *commitStorage = NULL;
+
+struct undoInfo {
+ void *ptr;
+ size_t len;
+};
+
+struct commitInfo {
+ void *data_context;
+ int have_committed;
+ int new_row;
+};
+
+void
+netSnmpHostsTable_free_undoInfo(void *vptr)
+{
+ struct undoInfo *ui = vptr;
+ if (!ui)
+ return;
+ SNMP_FREE(ui->ptr);
+ SNMP_FREE(ui);
+}
+
+/** Initialize the netSnmpHostsTable table by defining its contents and how it's structured */
+void
+initialize_table_netSnmpHostsTable(void)
+{
+ static oid netSnmpHostsTable_oid[] =
+ { 1, 3, 6, 1, 4, 1, 8072, 2, 2, 2 };
+ netsnmp_table_registration_info *table_info;
+ netsnmp_handler_registration *my_handler;
+ netsnmp_iterator_info *iinfo;
+
+ /** create the table registration information structures */
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+
+ /** if your table is read only, it's easiest to change the
+ HANDLER_CAN_RWRITE definition below to HANDLER_CAN_RONLY */
+ my_handler = netsnmp_create_handler_registration("netSnmpHostsTable",
+ netSnmpHostsTable_handler,
+ netSnmpHostsTable_oid,
+ OID_LENGTH
+ (netSnmpHostsTable_oid),
+ HANDLER_CAN_RWRITE);
+
+ if (!my_handler || !table_info || !iinfo) {
+ snmp_log(LOG_ERR,
+ "malloc failed in initialize_table_netSnmpHostsTable");
+ return; /** Serious error. */
+ }
+
+ /***************************************************
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(table_info, ASN_OCTET_STR,
+ /** index: netSnmpHostName */
+ 0);
+
+ /** Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ table_info->min_column = 2;
+ table_info->max_column = 5;
+
+ /** iterator access routines */
+ iinfo->get_first_data_point = netSnmpHostsTable_get_first_data_point;
+ iinfo->get_next_data_point = netSnmpHostsTable_get_next_data_point;
+
+ /** you may wish to set these as well */
+ iinfo->make_data_context = netSnmpHostsTable_context_convert_function;
+ iinfo->free_data_context = netSnmpHostsTable_data_free;
+ iinfo->free_loop_context_at_end = netSnmpHostsTable_loop_free;
+
+ /** tie the two structures together */
+ iinfo->table_reginfo = table_info;
+
+ /***************************************************
+ * registering the table with the master agent
+ */
+ DEBUGMSGTL(("initialize_table_netSnmpHostsTable",
+ "Registering table netSnmpHostsTable as a table iterator\n"));
+ netsnmp_register_table_iterator(my_handler, iinfo);
+}
+
+/** Initializes the netSnmpHostsTable module */
+void
+init_netSnmpHostsTable(void)
+{
+
+ /** here we initialize all the tables we're planning on supporting */
+ initialize_table_netSnmpHostsTable();
+}
+
+/** handles requests for the netSnmpHostsTable table, if anything else needs to be done */
+int
+netSnmpHostsTable_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_variable_list *var;
+ struct commitInfo *ci = NULL;
+
+ void *data_context = NULL;
+
+ oid *suffix;
+ size_t suffix_len;
+
+ for (request = requests; request; request = request->next) {
+ /* column and row index encoded portion */
+ var = request->requestvb;
+ suffix = var->name + reginfo->rootoid_len + 1;
+ suffix_len = var->name_length - (reginfo->rootoid_len + 1);
+
+ if (request->processed != 0)
+ continue;
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ case MODE_SET_RESERVE1:
+ data_context = netsnmp_extract_iterator_context(request);
+ if (data_context == NULL) {
+ if (reqinfo->mode == MODE_GET) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ }
+ break;
+
+ default: /* == the other SET modes */
+ ci = netsnmp_oid_stash_get_data(commitStorage,
+ suffix + 1, suffix_len - 1);
+ break;
+
+ }
+
+ /** extracts the information about the table from the request */
+ table_info = netsnmp_extract_table_info(request);
+ /** table_info->colnum contains the column number requested */
+ /** table_info->indexes contains a linked list of snmp variable
+ bindings for the indexes of the table. Values in the list
+ have been set corresponding to the indexes of the
+ request */
+ if (table_info == NULL) {
+ continue;
+ }
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ switch (table_info->colnum) {
+ case COLUMN_NETSNMPHOSTADDRESSTYPE:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_netSnmpHostAddressType(data_context,
+ &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_NETSNMPHOSTADDRESS:
+ {
+ char *retval;
+ size_t retval_len = 0;
+ retval =
+ get_netSnmpHostAddress(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_OCTET_STR,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_NETSNMPHOSTSTORAGE:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_netSnmpHostStorage(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_NETSNMPHOSTROWSTATUS:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_netSnmpHostRowStatus(data_context,
+ &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ default:
+ /** We shouldn't get here */
+ snmp_log(LOG_ERR,
+ "problem encountered in netSnmpHostsTable_handler: unknown column\n");
+ }
+ break;
+
+ case MODE_SET_RESERVE1:
+ ci = netsnmp_oid_stash_get_data(commitStorage,
+ suffix + 1, suffix_len - 1);
+
+ if (!ci) {
+ /** create the commit storage info */
+ ci = SNMP_MALLOC_STRUCT(commitInfo);
+ if (!data_context) {
+ ci->data_context =
+ netSnmpHostsTable_create_data_context(table_info->
+ indexes);
+ ci->new_row = 1;
+ } else {
+ ci->data_context = data_context;
+ }
+ netsnmp_oid_stash_add_data(&commitStorage,
+ suffix + 1, suffix_len - 1, ci);
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ switch (table_info->colnum) {
+ case COLUMN_NETSNMPHOSTADDRESSTYPE:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui = NULL;
+ int ret;
+
+ /** first, get the old value */
+ retval =
+ get_netSnmpHostAddressType(ci->data_context,
+ &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ }
+
+ /** check the new value, possibly against the
+ older value for a valid state transition */
+ ret =
+ check_netSnmpHostAddressType(request->requestvb->
+ type,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len, retval,
+ retval_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ netSnmpHostsTable_free_undoInfo(ui);
+ } else if (ui) {
+ /** remember information for undo purposes later */
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+
+ }
+ break;
+ case COLUMN_NETSNMPHOSTADDRESS:
+ {
+ char *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui = NULL;
+ int ret;
+
+ /** first, get the old value */
+ retval =
+ get_netSnmpHostAddress(ci->data_context,
+ &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ }
+
+ /** check the new value, possibly against the
+ older value for a valid state transition */
+ ret =
+ check_netSnmpHostAddress(request->requestvb->type,
+ (char *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len, retval,
+ retval_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ netSnmpHostsTable_free_undoInfo(ui);
+ } else if (ui) {
+ /** remember information for undo purposes later */
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+
+ }
+ break;
+ case COLUMN_NETSNMPHOSTSTORAGE:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui = NULL;
+ int ret;
+
+ /** first, get the old value */
+ retval =
+ get_netSnmpHostStorage(ci->data_context,
+ &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ }
+
+ /** check the new value, possibly against the
+ older value for a valid state transition */
+ ret =
+ check_netSnmpHostStorage(request->requestvb->type,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len, retval,
+ retval_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ netSnmpHostsTable_free_undoInfo(ui);
+ } else if (ui) {
+ /** remember information for undo purposes later */
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+
+ }
+ break;
+ case COLUMN_NETSNMPHOSTROWSTATUS:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui = NULL;
+ int ret;
+
+ /** first, get the old value */
+ retval =
+ get_netSnmpHostRowStatus(ci->data_context,
+ &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ }
+
+ /** check the new value, possibly against the
+ older value for a valid state transition */
+ ret =
+ check_netSnmpHostRowStatus(request->requestvb->
+ type,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len, retval,
+ retval_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ netSnmpHostsTable_free_undoInfo(ui);
+ } else if (ui) {
+ /** remember information for undo purposes later */
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+
+ }
+ break;
+ default:
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_NOTWRITABLE);
+ break;
+ }
+ break;
+
+ case MODE_SET_ACTION:
+ /** save a variable copy */
+ switch (table_info->colnum) {
+ case COLUMN_NETSNMPHOSTADDRESSTYPE:
+ {
+ int ret;
+ ret = set_netSnmpHostAddressType(ci->data_context,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ }
+ }
+ break;
+ case COLUMN_NETSNMPHOSTADDRESS:
+ {
+ int ret;
+ ret = set_netSnmpHostAddress(ci->data_context,
+ (char *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ }
+ }
+ break;
+ case COLUMN_NETSNMPHOSTSTORAGE:
+ {
+ int ret;
+ ret = set_netSnmpHostStorage(ci->data_context,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ }
+ }
+ break;
+ case COLUMN_NETSNMPHOSTROWSTATUS:
+ {
+ int ret;
+ ret = set_netSnmpHostRowStatus(ci->data_context,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, request, ret);
+ }
+ if (*request->requestvb->val.integer == RS_DESTROY) {
+ ci->new_row = -1;
+ }
+ }
+ break;
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ if (!ci->have_committed) {
+ /** do this once per row only */
+ netSnmpHostsTable_commit_row(&ci->data_context,
+ ci->new_row);
+ ci->have_committed = 1;
+ }
+ break;
+
+ case MODE_SET_UNDO:
+ /** save a variable copy */
+ switch (table_info->colnum) {
+ case COLUMN_NETSNMPHOSTADDRESSTYPE:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_netSnmpHostAddressType(ci->data_context,
+ ui->ptr, ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ case COLUMN_NETSNMPHOSTADDRESS:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_netSnmpHostAddress(ci->data_context, ui->ptr,
+ ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ case COLUMN_NETSNMPHOSTSTORAGE:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_netSnmpHostStorage(ci->data_context, ui->ptr,
+ ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ case COLUMN_NETSNMPHOSTROWSTATUS:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_netSnmpHostRowStatus(ci->data_context, ui->ptr,
+ ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ }
+ break;
+
+ case MODE_SET_FREE:
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "problem encountered in netSnmpHostsTable_handler: unsupported mode\n");
+ }
+ }
+
+ /** clean up after all requset processing has ended */
+ switch (reqinfo->mode) {
+ case MODE_SET_UNDO:
+ case MODE_SET_FREE:
+ case MODE_SET_COMMIT:
+ /** clear out the undo cache */
+ netsnmp_oid_stash_free(&undoStorage,
+ netSnmpHostsTable_free_undoInfo);
+ netsnmp_oid_stash_free(&commitStorage, netsnmp_oid_stash_no_free);
+ }
+
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable.h
new file mode 100644
index 0000000000..b6164a96a7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable.h
@@ -0,0 +1,40 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.iterate_access.conf,v 1.4 2003/07/01 00:15:11 hardaker Exp $
+ */
+#ifndef NETSNMPHOSTSTABLE_H
+#define NETSNMPHOSTSTABLE_H
+
+/** other required module components */
+config_require(examples/netSnmpHostsTable_access)
+config_require(examples/netSnmpHostsTable_checkfns)
+config_add_mib(NET-SNMP-EXAMPLES-MIB)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * function declarations
+ */
+ void init_netSnmpHostsTable(void);
+ void initialize_table_netSnmpHostsTable(void);
+ Netsnmp_Node_Handler netSnmpHostsTable_handler;
+
+
+/*
+ * column number definitions for table netSnmpHostsTable
+ */
+#include "netSnmpHostsTable_columns.h"
+
+/*
+ * enum definions
+ */
+#include "netSnmpHostsTable_enums.h"
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /** NETSNMPHOSTSTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_access.c
new file mode 100644
index 0000000000..04f6bbdba3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_access.c
@@ -0,0 +1,364 @@
+
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.access_functions.conf,v 1.3 2003/05/31 00:11:57 hardaker Exp $
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "netSnmpHostsTable_access.h"
+#include "netSnmpHostsTable_enums.h"
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#define MAX_HOSTS_LINE 4096
+
+/* XXX: make .conf token */
+#define HOSTS_FILE "/etc/hosts"
+
+typedef struct my_loop_info_s {
+ FILE *filep;
+ in_addr_t theaddr;
+ char line[MAX_HOSTS_LINE];
+ char hostname[64];
+ int lineno;
+ char *current_ptr;
+} my_loop_info;
+
+typedef struct my_data_info_s {
+ in_addr_t theaddr;
+ in_addr_t theoldaddr;
+ char hostname[64];
+ int lineno;
+} my_data_info;
+
+/** NOTE:
+ * - these get_ routines MUST return data that will not be freed (ie,
+ * use static variables or persistent data). It will be copied, if
+ * needed, immediately after the get_ routine has been called.
+ * - these SET routines must copy the incoming data and can not take
+ * ownership of the memory passed in by the val pointer.
+ */
+
+
+/** returns the first data point within the netSnmpHostsTable table data.
+
+ Set the my_loop_context variable to the first data point structure
+ of your choice (from which you can find the next one). This could
+ be anything from the first node in a linked list, to an integer
+ pointer containing the beginning of an array variable.
+
+ Set the my_data_context variable to something to be returned to
+ you later that will provide you with the data to return in a given
+ row. This could be the same pointer as what my_loop_context is
+ set to, or something different.
+
+ The put_index_data variable contains a list of snmp variable
+ bindings, one for each index in your table. Set the values of
+ each appropriately according to the data matching the first row
+ and return the put_index_data variable at the end of the function.
+*/
+netsnmp_variable_list *
+netSnmpHostsTable_get_first_data_point(void **my_loop_context,
+ void **my_data_context,
+ netsnmp_variable_list *
+ put_index_data,
+ netsnmp_iterator_info *mydata)
+{
+ my_loop_info *loopctx;
+
+ loopctx = SNMP_MALLOC_TYPEDEF(my_loop_info);
+
+ if (!loopctx)
+ return NULL; /*XXX log err */
+
+ loopctx->filep = fopen("/etc/hosts","r");
+
+ if (!loopctx->filep) {
+ free(loopctx);
+ return NULL;
+ }
+
+ /* at this point, we need to get the first name and address from
+ the file. But since our get_next_data_point function does
+ this, we'll use it instead of duplicating code */
+ *my_loop_context = loopctx;
+
+ return netSnmpHostsTable_get_next_data_point(my_loop_context,
+ my_data_context,
+ put_index_data,
+ mydata);
+}
+
+/** functionally the same as netSnmpHostsTable_get_first_data_point, but
+ my_loop_context has already been set to a previous value and should
+ be updated to the next in the list. For example, if it was a
+ linked list, you might want to cast it to your local data type and
+ then return my_loop_context->next. The my_data_context pointer
+ should be set to something you need later and the indexes in
+ put_index_data updated again. */
+netsnmp_variable_list *
+netSnmpHostsTable_get_next_data_point(void **my_loop_context,
+ void **my_data_context,
+ netsnmp_variable_list *
+ put_index_data,
+ netsnmp_iterator_info *mydata)
+{
+ my_loop_info *loopctx = *my_loop_context;
+ char tmpstring[64];
+
+ if (!loopctx)
+ return NULL;
+
+ while(loopctx->filep) {
+ if (!loopctx->current_ptr) {
+ if (!fgets(loopctx->line, sizeof(loopctx->line), loopctx->filep)) {
+ /* we're done */
+ fclose(loopctx->filep);
+ loopctx->filep = NULL;
+ return NULL;
+ }
+ loopctx->lineno++;
+ loopctx->current_ptr = loopctx->line;
+ loopctx->current_ptr = skip_white(loopctx->current_ptr);
+
+ if (loopctx->current_ptr == NULL || *loopctx->current_ptr == '#') {
+ loopctx->current_ptr = NULL;
+ continue;
+ }
+
+ loopctx->current_ptr =
+ copy_nword(loopctx->current_ptr, tmpstring, sizeof(tmpstring));
+ loopctx->theaddr = inet_addr(tmpstring);
+
+ if (!loopctx->current_ptr)
+ continue;
+ }
+
+ loopctx->current_ptr =
+ copy_nword(loopctx->current_ptr, loopctx->hostname, sizeof(loopctx->hostname));
+
+ snmp_set_var_value(put_index_data, (u_char *) loopctx->hostname,
+ strlen(loopctx->hostname));
+ return put_index_data;
+ }
+
+ /* we're out of data */
+ *my_loop_context = NULL;
+ return NULL;
+}
+
+void *
+netSnmpHostsTable_context_convert_function(void *loop_context,
+ netsnmp_iterator_info *iinfo)
+{
+ my_loop_info *loopctx = loop_context;
+ my_data_info *datactx = SNMP_MALLOC_TYPEDEF(my_data_info);
+ if (!datactx)
+ return NULL;
+ datactx->theoldaddr = datactx->theaddr = loopctx->theaddr;
+ datactx->lineno = loopctx->lineno;
+ strcpy(datactx->hostname, loopctx->hostname);
+ return datactx;
+}
+
+/** Create a data_context for non-existent rows that SETs are performed on.
+ * return a void * pointer which will be passed to subsequent get_XXX
+ * and set_XXX functions for data retrival and modification during
+ * this SET request.
+ *
+ * The indexs are encoded (in order) into the index_data pointer if it
+ * would be helpful to use that information.
+ */
+void *
+netSnmpHostsTable_create_data_context(netsnmp_variable_list * index_data)
+{
+ my_data_info *datactx = SNMP_MALLOC_TYPEDEF(my_data_info);
+ if (!datactx)
+ return NULL;
+ strncpy(datactx->hostname, index_data->val.string,
+ strlen(index_data->val.string));
+ return datactx;
+}
+
+void
+netSnmpHostsTable_data_free(void *data, netsnmp_iterator_info *iinfo)
+{
+ free(data);
+}
+
+void
+netSnmpHostsTable_loop_free(void *loopctx, netsnmp_iterator_info *iinfo)
+{
+ free(loopctx);
+}
+
+/** If the implemented set_* functions don't operate directly on the
+ real-live data (which is actually recommended), then this function
+ can be used to take a given my_data_context pointer and "commit" it
+ to whereever the modified data needs to be put back to. For
+ example, if this was a routing table you could publish the modified
+ routes back into the kernel at this point.
+
+ rowStatus will be set to 1 if new, 0 if not or -1 if it should
+ be deleted.
+
+ If you free the data yourself, make sure to *my_data_context = NULL */
+int
+netSnmpHostsTable_commit_row(void **my_data_context, int new_or_del)
+{
+ /** Add any necessary commit code here */
+ FILE *in, *out;
+ char line[MAX_HOSTS_LINE], line2[MAX_HOSTS_LINE];
+ char myaddr[64], *cp;
+ my_data_info *datactx = *my_data_context;
+ size_t line2_sz;
+ int foundit = 0;
+
+ if (datactx->theaddr == datactx->theoldaddr && new_or_del != -1)
+ return SNMP_ERR_NOERROR; /* no change in the value */
+
+ if ((out = fopen(HOSTS_FILE ".snmp", "w")) == NULL)
+ return SNMP_ERR_COMMITFAILED;
+
+ if ((in = fopen(HOSTS_FILE, "r")) == NULL)
+ return SNMP_ERR_COMMITFAILED;
+
+ while(fgets(line, sizeof(line), in)) {
+ copy_nword(line,myaddr,sizeof(myaddr));
+ if (inet_addr(myaddr) == datactx->theaddr && new_or_del != -1) {
+ foundit = 1;
+ /* right line to append to */
+ line[strlen(line)-1] = '\0'; /* nuke the new line */
+ fprintf(out, "%s %s\n", line, datactx->hostname);
+ } else if (inet_addr(myaddr) == datactx->theoldaddr) {
+ /* find and remove the name from the current line */
+ int count = 0;
+ cp = copy_nword(line, line2, sizeof(line2)); /* pass the addr */
+ if (strlen(line2) > sizeof(line2)-2) {
+ errorit:
+ fclose(in);
+ fclose(out);
+ unlink(HOSTS_FILE ".snmp");
+ return SNMP_ERR_RESOURCEUNAVAILABLE;
+ }
+ line2_sz = strlen(line2);
+ line2[line2_sz++] = '\t';
+ while(cp) {
+ cp = copy_nword(cp, &line2[line2_sz], sizeof(line2)-line2_sz);
+ if (strcmp(&line2[line2_sz], datactx->hostname) == 0) {
+ /* a match, so don't add it to line2 (which means
+ don't update the write line2_sz index */
+ } else {
+ if (strlen(line2) > sizeof(line2)-2) {
+ goto errorit;
+ }
+ line2_sz = strlen(line2);
+ line2[line2_sz++] = ' ';
+ count++;
+ }
+ }
+ if (count) {
+ /* at least one name was still present on the line, so
+ save it to the new file */
+ line2[line2_sz] = '\0';
+ fprintf(out, "%s\n", line2);
+ }
+ } else {
+ fputs(line, out);
+ }
+ }
+
+ if (!foundit && new_or_del != -1) {
+ /* couldn't add it to an existing line, so append a new one */
+ fprintf(out, "%d.%d.%d.%d\t%s\n",
+ (0x000000ff & datactx->theaddr),
+ (0x0000ff00 & datactx->theaddr) >> 8,
+ (0x00ff0000 & datactx->theaddr) >> 16,
+ (0xff000000 & datactx->theaddr) >> 24,
+ datactx->hostname);
+ }
+ fclose(out); /* close out first to minimize race condition */
+ fclose(in);
+ /*
+ * race condition here - someone else could open the file after
+ * we close it but before we can rename it.
+ */
+ if (!rename(HOSTS_FILE ".snmp", HOSTS_FILE))
+ return SNMP_ERR_COMMITFAILED;
+
+ /*
+ * return no errors. And there shouldn't be any!!! Ever!!! You
+ * should have checked the values long before this.
+ */
+ return SNMP_ERR_NOERROR;
+}
+
+
+/*
+ * User-defined data access functions (per column) for data in table
+ * netSnmpHostsTable
+ */
+
+
+long *
+get_netSnmpHostAddressType(void *data_context, size_t * ret_len)
+{
+ static long ret = NETSNMPHOSTADDRESSTYPE_IPV4;
+ *ret_len = sizeof(ret);
+ return &ret;
+}
+
+int
+set_netSnmpHostAddressType(void *data_context, long *val, size_t val_len)
+{
+ return SNMP_ERR_NOERROR; /* always ipv4 */
+}
+
+char *
+get_netSnmpHostAddress(void *data_context, size_t * ret_len)
+{
+ my_data_info *datainfo = data_context;
+ *ret_len = sizeof(in_addr_t); /* XXX: make sure it's 4 */
+ return (char *) &datainfo->theaddr;
+}
+
+int
+set_netSnmpHostAddress(void *data_context, char *val, size_t val_len)
+{
+ my_data_info *datainfo = data_context;
+ memcpy(&datainfo->theaddr, val, val_len);
+ return SNMP_ERR_NOERROR;
+}
+
+long *
+get_netSnmpHostStorage(void *data_context, size_t * ret_len)
+{
+ static long ret = ST_NONVOLATILE;
+ *ret_len = sizeof(ret);
+ return &ret;
+}
+
+int
+set_netSnmpHostStorage(void *data_context, long *val, size_t val_len)
+{
+ return SNMP_ERR_NOERROR;
+}
+
+long *
+get_netSnmpHostRowStatus(void *data_context, size_t * ret_len)
+{
+ static long ret = RS_ACTIVE;
+ *ret_len = sizeof(ret);
+ return &ret;
+}
+
+int
+set_netSnmpHostRowStatus(void *data_context, long *val, size_t val_len)
+{
+ /* XXX */
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_access.h
new file mode 100644
index 0000000000..3be2a5cc9b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_access.h
@@ -0,0 +1,48 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.access_functions.conf,v 1.3 2003/05/31 00:11:57 hardaker Exp $
+ */
+#ifndef NETSNMPHOSTSTABLE_ACCESS_H
+#define NETSNMPHOSTSTABLE_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** User-defined data access functions for data in table netSnmpHostsTable */
+/** row level accessors */
+Netsnmp_First_Data_Point netSnmpHostsTable_get_first_data_point;
+Netsnmp_Next_Data_Point netSnmpHostsTable_get_next_data_point;
+Netsnmp_Make_Data_Context netSnmpHostsTable_context_convert_function;
+Netsnmp_Free_Loop_Context netSnmpHostsTable_loop_free;
+Netsnmp_Free_Data_Context netSnmpHostsTable_data_free;
+
+int netSnmpHostsTable_commit_row(void **my_data_context,
+ int new_or_del);
+void *netSnmpHostsTable_create_data_context(netsnmp_variable_list
+ * index_data);
+
+/** column accessors */
+long *get_netSnmpHostAddressType(void *data_context,
+ size_t * ret_len);
+int set_netSnmpHostAddressType(void *data_context, long *val,
+ size_t val_len);
+char *get_netSnmpHostAddress(void *data_context,
+ size_t * ret_len);
+int set_netSnmpHostAddress(void *data_context, char *val,
+ size_t val_len);
+long *get_netSnmpHostStorage(void *data_context,
+ size_t * ret_len);
+int set_netSnmpHostStorage(void *data_context, long *val,
+ size_t val_len);
+long *get_netSnmpHostRowStatus(void *data_context,
+ size_t * ret_len);
+int set_netSnmpHostRowStatus(void *data_context, long *val,
+ size_t val_len);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NETSNMPHOSTSTABLE_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns.c
new file mode 100644
index 0000000000..f29ba9837d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns.c
@@ -0,0 +1,197 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.check_values.conf,v 1.5 2003/05/31 00:11:57 hardaker Exp $
+ */
+
+/********************************************************************
+ * NOTE NOTE NOTE
+ * This file is auto-generated and SHOULD NOT BE EDITED by hand.
+ * Modify the netSnmpHostsTable_checkfns_local.[ch] files insead so that you
+ * can regenerate this one as mib2c improvements are made.
+ ********************************************************************/
+
+/*
+ * standard headers
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include "netSnmpHostsTable_checkfns.h"
+#include "netSnmpHostsTable_checkfns_local.h"
+#include "netSnmpHostsTable_enums.h"
+
+/** Decides if an incoming value for the netSnmpHostAddressType mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @param old_val
+ * @param old_val_len
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_netSnmpHostAddressType(int type, long *val, size_t val_len,
+ long *old_val, size_t old_val_len)
+{
+
+ int ret;
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_INTEGER)
+ return SNMP_ERR_WRONGTYPE;
+
+ /** Check the enums. Legal values will continue, others return error. */
+ switch (*val) {
+ case NETSNMPHOSTADDRESSTYPE_UNKNOWN:
+ case NETSNMPHOSTADDRESSTYPE_IPV4:
+ case NETSNMPHOSTADDRESSTYPE_IPV6:
+ case NETSNMPHOSTADDRESSTYPE_IPV4Z:
+ case NETSNMPHOSTADDRESSTYPE_IPV6Z:
+ case NETSNMPHOSTADDRESSTYPE_DNS:
+ break;
+
+ /** not a legal enum value. return an error */
+ default:
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ ret = SNMP_ERR_NOERROR;
+
+
+ /** looks ok, call the local version of the same function. */
+ return check_netSnmpHostAddressType_local(type, val, val_len, old_val,
+ old_val_len);
+}
+
+/** Decides if an incoming value for the netSnmpHostAddress mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @param old_val
+ * @param old_val_len
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_netSnmpHostAddress(int type, char *val, size_t val_len,
+ char *old_val, size_t old_val_len)
+{
+
+ int ret;
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_OCTET_STR)
+ return SNMP_ERR_WRONGTYPE;
+
+ /** Check the ranges of the passed value for legality */
+ if (!(val_len >= 0 && val_len <= 255)
+ ) {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+
+ /** looks ok, call the local version of the same function. */
+ return check_netSnmpHostAddress_local(type, val, val_len, old_val,
+ old_val_len);
+}
+
+/** Decides if an incoming value for the netSnmpHostStorage mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @param old_val
+ * @param old_val_len
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_netSnmpHostStorage(int type, long *val, size_t val_len,
+ long *old_val, size_t old_val_len)
+{
+
+ int ret;
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_INTEGER)
+ return SNMP_ERR_WRONGTYPE;
+
+ /** Check the enums. Legal values will continue, others return error. */
+ switch (*val) {
+ case NETSNMPHOSTSTORAGE_OTHER:
+ case NETSNMPHOSTSTORAGE_VOLATILE:
+ case NETSNMPHOSTSTORAGE_NONVOLATILE:
+ case NETSNMPHOSTSTORAGE_PERMANENT:
+ case NETSNMPHOSTSTORAGE_READONLY:
+ break;
+
+ /** not a legal enum value. return an error */
+ default:
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ ret = SNMP_ERR_NOERROR;
+
+ if (ret =
+ check_storage_transition((old_val) ? *old_val : SNMP_STORAGE_NONE,
+ *val))
+ return ret;
+
+ /** looks ok, call the local version of the same function. */
+ return check_netSnmpHostStorage_local(type, val, val_len, old_val,
+ old_val_len);
+}
+
+/** Decides if an incoming value for the netSnmpHostRowStatus mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @param old_val
+ * @param old_val_len
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_netSnmpHostRowStatus(int type, long *val, size_t val_len,
+ long *old_val, size_t old_val_len)
+{
+
+ int ret;
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_INTEGER)
+ return SNMP_ERR_WRONGTYPE;
+
+ /** Check the enums. Legal values will continue, others return error. */
+ switch (*val) {
+ case NETSNMPHOSTROWSTATUS_ACTIVE:
+ case NETSNMPHOSTROWSTATUS_NOTINSERVICE:
+ case NETSNMPHOSTROWSTATUS_NOTREADY:
+ case NETSNMPHOSTROWSTATUS_CREATEANDGO:
+ case NETSNMPHOSTROWSTATUS_CREATEANDWAIT:
+ case NETSNMPHOSTROWSTATUS_DESTROY:
+ break;
+
+ /** not a legal enum value. return an error */
+ default:
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ ret = SNMP_ERR_NOERROR;
+
+ if (ret =
+ check_rowstatus_transition((old_val) ? *old_val : RS_NONEXISTENT,
+ *val))
+ return ret;
+
+ /** looks ok, call the local version of the same function. */
+ return check_netSnmpHostRowStatus_local(type, val, val_len, old_val,
+ old_val_len);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns.h
new file mode 100644
index 0000000000..cb996bb1aa
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns.h
@@ -0,0 +1,47 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.iterate.conf,v 5.6 2003/02/20 00:52:07 hardaker Exp $
+ */
+
+/***********************************************************************
+ * This file is auto-generated and SHOULD NOT BE EDITED by hand.
+ * Modify the netSnmpHostsTable_checkfns_local.[ch] files insead.
+ * (so that you can regenerate this one as mib2c improvements are made)
+ ***********************************************************************/
+#ifndef NETSNMPHOSTSTABLE_CHECKFNS_H
+#define NETSNMPHOSTSTABLE_CHECKFNS_H
+
+/** make sure we load the functions that you can modify */
+config_require(examples/netSnmpHostsTable_checkfns_local)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * these functions are designed to check incoming values for
+ * columns in the netSnmpHostsTable table for legality with respect to
+ * datatype and value.
+ */
+ int check_netSnmpHostAddressType(int type, long *val,
+ size_t val_len,
+ long *old_val,
+ size_t old_val_len);
+ int check_netSnmpHostAddress(int type, char *val,
+ size_t val_len,
+ char *old_val,
+ size_t old_val_len);
+ int check_netSnmpHostStorage(int type, long *val,
+ size_t val_len,
+ long *old_val,
+ size_t old_val_len);
+ int check_netSnmpHostRowStatus(int type, long *val,
+ size_t val_len,
+ long *old_val,
+ size_t old_val_len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NETSNMPHOSTSTABLE_CHECKFNS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns_local.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns_local.c
new file mode 100644
index 0000000000..a29360d7e1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns_local.c
@@ -0,0 +1,117 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.check_values_local.conf,v 5.1 2003/05/30 23:53:15 hardaker Exp $
+ */
+
+/*
+ * standard headers
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include "netSnmpHostsTable_checkfns.h"
+#include "netSnmpHostsTable_enums.h"
+
+/** Decides if an incoming value for the netSnmpHostAddressType mib node is legal, from a local implementation specific viewpoint.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @param old_val
+ * @param old_val_len
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_netSnmpHostAddressType_local(int type, long *val, size_t val_len,
+ long *old_val, size_t old_val_len)
+{
+
+ /** XXX: you may want to check aspects of the new value that
+ were not covered by the automatic checks by the parent function. */
+
+ /** XXX: you make want to check that the requested change from
+ the old value to the new value is legal (ie, the transistion
+ from one value to another is legal */
+
+ if (*val != NETSNMPHOSTADDRESSTYPE_IPV4)
+ return SNMP_ERR_WRONGVALUE;
+
+ /** if everything looks ok, return SNMP_ERR_NOERROR */
+ return SNMP_ERR_NOERROR;
+}
+
+/** Decides if an incoming value for the netSnmpHostAddress mib node is legal, from a local implementation specific viewpoint.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @param old_val
+ * @param old_val_len
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_netSnmpHostAddress_local(int type, char *val, size_t val_len,
+ char *old_val, size_t old_val_len)
+{
+
+ /** XXX: you may want to check aspects of the new value that
+ were not covered by the automatic checks by the parent function. */
+
+ /** XXX: you make want to check that the requested change from
+ the old value to the new value is legal (ie, the transistion
+ from one value to another is legal */
+
+ if (val_len != 4)
+ return SNMP_ERR_WRONGVALUE;
+
+ /** if everything looks ok, return SNMP_ERR_NOERROR */
+ return SNMP_ERR_NOERROR;
+}
+
+/** Decides if an incoming value for the netSnmpHostStorage mib node is legal, from a local implementation specific viewpoint.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @param old_val
+ * @param old_val_len
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_netSnmpHostStorage_local(int type, long *val, size_t val_len,
+ long *old_val, size_t old_val_len)
+{
+
+ /** XXX: you may want to check aspects of the new value that
+ were not covered by the automatic checks by the parent function. */
+
+ /** XXX: you make want to check that the requested change from
+ the old value to the new value is legal (ie, the transistion
+ from one value to another is legal */
+
+ if (*val != ST_NONVOLATILE)
+ return SNMP_ERR_WRONGVALUE;
+
+ /** if everything looks ok, return SNMP_ERR_NOERROR */
+ return SNMP_ERR_NOERROR;
+}
+
+/** Decides if an incoming value for the netSnmpHostRowStatus mib node is legal, from a local implementation specific viewpoint.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @param old_val
+ * @param old_val_len
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_netSnmpHostRowStatus_local(int type, long *val, size_t val_len,
+ long *old_val, size_t old_val_len)
+{
+
+ /** XXX: you may want to check aspects of the new value that
+ were not covered by the automatic checks by the parent function. */
+
+ /** XXX: you make want to check that the requested change from
+ the old value to the new value is legal (ie, the transistion
+ from one value to another is legal */
+
+ /** if everything looks ok, return SNMP_ERR_NOERROR */
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns_local.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns_local.h
new file mode 100644
index 0000000000..335a0ae72e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_checkfns_local.h
@@ -0,0 +1,36 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : : mib2c.check_values_local.conf,v 5.1 2003/05/30 23:53:15 hardaker Exp $
+ *
+ */
+#ifndef NETSNMPHOSTSTABLE_CHECKFNS_H
+#define NETSNMPHOSTSTABLE_CHECKFNS_H
+
+/*
+ * these functions are designed to check incoming values for
+ * columns in the netSnmpHostsTable table for legality with respect to
+ * datatype and value according to local conventions. You should modify
+ * them as appropriate. They will be called from parent check_value
+ * functions that are auto-generated using mib2c and the parent functions
+ * should NOT be modified.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int check_(int type, long *val, size_t val_len, long *old_val,
+ size_t old_val_len);
+int check_(int type, char *val, size_t val_len, char *old_val,
+ size_t old_val_len);
+int check_(int type, long *val, size_t val_len, long *old_val,
+ size_t old_val_len);
+int check_(int type, long *val, size_t val_len, long *old_val,
+ size_t old_val_len);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NETSNMPHOSTSTABLE_CHECKFNS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_columns.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_columns.h
new file mode 100644
index 0000000000..2b3af76aba
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_columns.h
@@ -0,0 +1,16 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.column_defines.conf,v 5.1 2002/05/08 05:42:47 hardaker Exp $
+ */
+#ifndef NETSNMPHOSTSTABLE_COLUMNS_H
+#define NETSNMPHOSTSTABLE_COLUMNS_H
+
+/*
+ * column number definitions for table netSnmpHostsTable
+ */
+#define COLUMN_NETSNMPHOSTNAME 1
+#define COLUMN_NETSNMPHOSTADDRESSTYPE 2
+#define COLUMN_NETSNMPHOSTADDRESS 3
+#define COLUMN_NETSNMPHOSTSTORAGE 4
+#define COLUMN_NETSNMPHOSTROWSTATUS 5
+#endif /* NETSNMPHOSTSTABLE_COLUMNS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_enums.h
new file mode 100644
index 0000000000..fcff3920ca
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/netSnmpHostsTable_enums.h
@@ -0,0 +1,37 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.column_enums.conf,v 5.2 2003/02/22 04:09:25 hardaker Exp $
+ */
+#ifndef NETSNMPHOSTSTABLE_ENUMS_H
+#define NETSNMPHOSTSTABLE_ENUMS_H
+
+/*
+ * enums for column netSnmpHostAddressType
+ */
+#define NETSNMPHOSTADDRESSTYPE_UNKNOWN 0
+#define NETSNMPHOSTADDRESSTYPE_IPV4 1
+#define NETSNMPHOSTADDRESSTYPE_IPV6 2
+#define NETSNMPHOSTADDRESSTYPE_IPV4Z 3
+#define NETSNMPHOSTADDRESSTYPE_IPV6Z 4
+#define NETSNMPHOSTADDRESSTYPE_DNS 16
+
+/*
+ * enums for column netSnmpHostStorage
+ */
+#define NETSNMPHOSTSTORAGE_OTHER 1
+#define NETSNMPHOSTSTORAGE_VOLATILE 2
+#define NETSNMPHOSTSTORAGE_NONVOLATILE 3
+#define NETSNMPHOSTSTORAGE_PERMANENT 4
+#define NETSNMPHOSTSTORAGE_READONLY 5
+
+/*
+ * enums for column netSnmpHostRowStatus
+ */
+#define NETSNMPHOSTROWSTATUS_ACTIVE 1
+#define NETSNMPHOSTROWSTATUS_NOTINSERVICE 2
+#define NETSNMPHOSTROWSTATUS_NOTREADY 3
+#define NETSNMPHOSTROWSTATUS_CREATEANDGO 4
+#define NETSNMPHOSTROWSTATUS_CREATEANDWAIT 5
+#define NETSNMPHOSTROWSTATUS_DESTROY 6
+
+#endif /* NETSNMPHOSTSTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/notification.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/notification.c
new file mode 100644
index 0000000000..ab602018cf
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/notification.c
@@ -0,0 +1,175 @@
+/** @example notification.c
+ * This example shows how to send a notification from inside the
+ * agent. In this case we do something really boring to decide
+ * whether to send a notification or not: we simply sleep for 30
+ * seconds and send it, then we sleep for 30 more and send it again.
+ * We do this through the snmp_alarm mechanisms (which are safe to
+ * use within the agent. Don't use the system alarm() call, it won't
+ * work properly). Normally, you would probably want to do something
+ * to test whether or not to send an alarm, based on the type of mib
+ * module you were creating.
+ *
+ * When this module is compiled into the agent (run configure with
+ * --with-mib-modules="examples/notification") then it should send
+ * out traps, which when received by the snmptrapd demon will look
+ * roughly like:
+ *
+ * 2002-05-08 08:57:05 localhost.localdomain [udp:127.0.0.1:32865]:
+ * sysUpTimeInstance = Timeticks: (3803) 0:00:38.03 snmpTrapOID.0 = OID: netSnmpExampleNotification
+ *
+ */
+
+/*
+ * start be including the appropriate header files
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * contains prototypes
+ */
+#include "notification.h"
+
+/*
+ * our initialization routine
+ * (to get called, the function name must match init_FILENAME()
+ */
+void
+init_notification(void)
+{
+ DEBUGMSGTL(("example_notification",
+ "initializing (setting callback alarm)\n"));
+ snmp_alarm_register(30, /* seconds */
+ SA_REPEAT, /* repeat (every 30 seconds). */
+ send_example_notification, /* our callback */
+ NULL /* no callback data needed */
+ );
+}
+
+/** here we send a SNMP v2 trap (which can be sent through snmpv3 and
+ * snmpv1 as well) and send it out.
+ *
+ * The various "send_trap()" calls allow you to specify traps in different
+ * formats. And the various "trapsink" directives allow you to specify
+ * destinations to receive different formats.
+ * But *all* traps are sent to *all* destinations, regardless of how they
+ * were specified.
+ *
+ *
+ * I.e. it's
+ * @verbatim
+ * ___ trapsink
+ * /
+ * send_easy_trap \___ [ Trap ] ____ trap2sink
+ * ___ [ Generator ]
+ * send_v2trap / [ ] ----- informsink
+ * \____
+ * trapsess
+ *
+ * *Not*
+ * send_easy_trap -------------------> trapsink
+ * send_v2trap -------------------> trap2sink
+ * ???? -------------------> informsink
+ * ???? -------------------> trapsess
+ * @endverbatim
+ */
+void
+send_example_notification(unsigned int clientreg, void *clientarg)
+{
+ /*
+ * define the OID for the notification we're going to send
+ * NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification
+ */
+ oid notification_oid[] =
+ { 1, 3, 6, 1, 4, 1, 8072, 2, 3, 0, 1 };
+ size_t notification_oid_len = OID_LENGTH(notification_oid);
+ static u_long count = 0;
+
+ /*
+ * In the notification, we have to assign our notification OID to
+ * the snmpTrapOID.0 object. Here is it's definition.
+ */
+ oid objid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 };
+ size_t objid_snmptrap_len = OID_LENGTH(objid_snmptrap);
+
+ /*
+ * define the OIDs for the varbinds we're going to include
+ * with the notification -
+ * NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatRate and
+ * NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatName
+ */
+ oid hbeat_rate_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 2, 3, 2, 1, 0 };
+ size_t hbeat_rate_oid_len = OID_LENGTH(hbeat_rate_oid);
+ oid hbeat_name_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 2, 3, 2, 2, 0 };
+ size_t hbeat_name_oid_len = OID_LENGTH(hbeat_name_oid);
+
+ /*
+ * here is where we store the variables to be sent in the trap
+ */
+ netsnmp_variable_list *notification_vars = NULL;
+ const char *heartbeat_name = "A girl named Maria";
+#ifdef RANDOM_HEARTBEAT
+ int heartbeat_rate = rand() % 60;
+#else
+ int heartbeat_rate = 30;
+#endif
+
+ DEBUGMSGTL(("example_notification", "defining the trap\n"));
+
+ /*
+ * add in the trap definition object
+ */
+ snmp_varlist_add_variable(&notification_vars,
+ /*
+ * the snmpTrapOID.0 variable
+ */
+ objid_snmptrap, objid_snmptrap_len,
+ /*
+ * value type is an OID
+ */
+ ASN_OBJECT_ID,
+ /*
+ * value contents is our notification OID
+ */
+ (u_char *) notification_oid,
+ /*
+ * size in bytes = oid length * sizeof(oid)
+ */
+ notification_oid_len * sizeof(oid));
+
+ /*
+ * add in the additional objects defined as part of the trap
+ */
+
+ snmp_varlist_add_variable(&notification_vars,
+ hbeat_rate_oid, hbeat_rate_oid_len,
+ ASN_INTEGER,
+ (u_char *)&heartbeat_rate,
+ sizeof(heartbeat_rate));
+
+ /*
+ * if we want to insert additional objects, we do it here
+ */
+ if (heartbeat_rate < 30 ) {
+ snmp_varlist_add_variable(&notification_vars,
+ hbeat_name_oid, hbeat_name_oid_len,
+ ASN_OCTET_STR,
+ heartbeat_name, strlen(heartbeat_name));
+ }
+
+ /*
+ * send the trap out. This will send it to all registered
+ * receivers (see the "SETTING UP TRAP AND/OR INFORM DESTINATIONS"
+ * section of the snmpd.conf manual page.
+ */
+ ++count;
+ DEBUGMSGTL(("example_notification", "sending trap %ld\n",count));
+ send_v2trap(notification_vars);
+
+ /*
+ * free the created notification variable list
+ */
+ DEBUGMSGTL(("example_notification", "cleaning up\n"));
+ snmp_free_varbind(notification_vars);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/notification.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/notification.h
new file mode 100644
index 0000000000..2adfdb2bbf
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/notification.h
@@ -0,0 +1,17 @@
+#ifndef NOTIFICATION_H
+#define NOTIFICATION_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* prototypes for the example */
+void init_notification(void);
+SNMPAlarmCallback send_example_notification;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NOTIFICATION_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/scalar_int.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/scalar_int.c
new file mode 100644
index 0000000000..20afabd041
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/scalar_int.c
@@ -0,0 +1,77 @@
+/** @example scalar_int.c
+ * This example creates some scalar registrations that allows
+ * some simple variables to be accessed via SNMP. In a more
+ * realistic example, it is likely that these variables would also be
+ * manipulated in other ways outside of SNMP gets/sets.
+ *
+ * If this module is compiled into an agent, you should be able to
+ * issue snmp commands that look something like (authentication
+ * information not shown in these commands):
+ *
+ * - snmpget localhost netSnmpExampleInteger.0
+ * - netSnmpExampleScalars = 42
+ *
+ * - snmpset localhost netSnmpExampleInteger.0 = 1234
+ * - netSnmpExampleScalars = 1234
+ *
+ * - snmpget localhost netSnmpExampleInteger.0
+ * - netSnmpExampleScalars = 1234
+ *
+ */
+
+/*
+ * start be including the appropriate header files
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * Then, we declare the variables we want to be accessed
+ */
+static int example1 = 42; /* default value */
+
+/*
+ * our initialization routine, automatically called by the agent
+ * (to get called, the function name must match init_FILENAME())
+ */
+void
+init_scalar_int(void)
+{
+ /*
+ * the OID we want to register our integer at. This should be a
+ * fully qualified instance. In our case, it's a scalar at:
+ * NET-SNMP-EXAMPLES-MIB::netSnmpExampleInteger.0 (note the
+ * trailing 0 which is required for any instantiation of any
+ * scalar object)
+ */
+ oid my_registration_oid[] =
+ { 1, 3, 6, 1, 4, 1, 8072, 2, 1, 1, 0 };
+
+ /*
+ * a debugging statement. Run the agent with -Dexample_scalar_int to see
+ * the output of this debugging statement.
+ */
+ DEBUGMSGTL(("example_scalar_int",
+ "Initalizing example scalar int. Default value = %d\n",
+ example1));
+
+ /*
+ * the line below registers our "example1" variable above as
+ * accessible and makes it writable. A read only version of the
+ * same registration would merely call
+ * register_read_only_int_instance() instead.
+ *
+ * If we wanted a callback when the value was retrieved or set
+ * (even though the details of doing this are handled for you),
+ * you could change the NULL pointer below to a valid handler
+ * function.
+ */
+ netsnmp_register_int_instance("my example int variable",
+ my_registration_oid,
+ OID_LENGTH(my_registration_oid),
+ &example1, NULL);
+
+ DEBUGMSGTL(("example_scalar_int",
+ "Done initalizing example scalar int\n"));
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/scalar_int.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/scalar_int.h
new file mode 100644
index 0000000000..223b5681dd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/scalar_int.h
@@ -0,0 +1,14 @@
+#ifndef SCALAR_INT_H
+#define SCALAR_INT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void init_scalar_int(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SCALAR_INT_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.c
new file mode 100644
index 0000000000..bdab64afea
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.c
@@ -0,0 +1,228 @@
+/*
+ * ucdDemoPublic.c
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "util_funcs.h"
+#include "ucdDemoPublic.h"
+
+#define MYMAX 1024
+#define MAXUSERS 10
+
+int num = 0;
+static char demoUsers[MAXUSERS][MYMAX + 1];
+static char demopass[MYMAX + 1];
+
+void
+ucdDemo_parse_user(const char *word, char *line)
+{
+ if (num == MAXUSERS)
+ return;
+
+ if (strlen(line) > MYMAX)
+ return;
+
+ strcpy(demoUsers[num++], line);
+}
+
+
+void
+ucdDemo_parse_userpass(const char *word, char *line)
+{
+ if (strlen(line) > MYMAX)
+ return;
+
+ strcpy(demopass, line);
+}
+
+/*
+ * this variable defines function callbacks and type return information
+ * for the ucdDemoPublic mib
+ */
+
+struct variable2 ucdDemoPublic_variables[] = {
+ {UCDDEMORESETKEYS, ASN_INTEGER, RWRITE, var_ucdDemoPublic, 1, {1}},
+ {UCDDEMOPUBLICSTRING, ASN_OCTET_STR, RWRITE, var_ucdDemoPublic, 1,
+ {2}},
+ {UCDDEMOUSERLIST, ASN_OCTET_STR, RWRITE, var_ucdDemoPublic, 1, {3}},
+ {UCDDEMOPASSPHRASE, ASN_OCTET_STR, RWRITE, var_ucdDemoPublic, 1, {4}},
+
+};
+
+/*
+ * Define the OID pointer to the top of the mib tree that we're
+ * registering underneath
+ */
+oid ucdDemoPublic_variables_oid[] =
+ { 1, 3, 6, 1, 4, 1, 2021, 14, 1, 1 };
+
+void
+init_ucdDemoPublic(void)
+{
+ REGISTER_MIB("examples/ucdDemoPublic", ucdDemoPublic_variables,
+ variable2, ucdDemoPublic_variables_oid);
+ snmpd_register_config_handler("demoUser",
+ ucdDemo_parse_user, NULL, "USER");
+ snmpd_register_config_handler("demoPass",
+ ucdDemo_parse_userpass, NULL,
+ "PASSPHASE");
+}
+
+unsigned char publicString[MYMAX + 1];
+
+unsigned char *
+var_ucdDemoPublic(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ static long long_ret;
+ static char string[MYMAX + 1], *cp;
+ int i;
+
+ *write_method = 0; /* assume it isnt writable for the time being */
+ *var_len = sizeof(long_ret); /* assume an integer and change later if not */
+
+ if (header_generic(vp, name, length, exact, var_len, write_method))
+ return 0;
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+
+ case UCDDEMORESETKEYS:
+ *write_method = write_ucdDemoResetKeys;
+ long_ret = 0;
+ return (unsigned char *) &long_ret;
+
+ case UCDDEMOPUBLICSTRING:
+ *write_method = write_ucdDemoPublicString;
+ *var_len = strlen(publicString);
+ return (unsigned char *) publicString;
+
+ case UCDDEMOUSERLIST:
+ cp = string;
+ for (i = 0; i < num; i++) {
+ snprintf(cp, sizeof(string)-strlen(string), " %s", demoUsers[i]);
+ string[MYMAX] = 0;
+ cp = cp + strlen(cp);
+ }
+ *var_len = strlen(string);
+ return (unsigned char *) string;
+
+ case UCDDEMOPASSPHRASE:
+ *var_len = strlen(demopass);
+ return (unsigned char *) demopass;
+
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ucdDemoPublic\n",
+ vp->magic));
+ }
+ return 0;
+}
+
+int
+write_ucdDemoResetKeys(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ /*
+ * variables we may use later
+ */
+ static long long_ret;
+ unsigned char *engineID;
+ size_t engineIDLen;
+ int i;
+ struct usmUser *user;
+
+ if (var_val_type != ASN_INTEGER) {
+ DEBUGMSGTL(("ucdDemoPublic",
+ "write to ucdDemoResetKeys not ASN_INTEGER\n"));
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > sizeof(long_ret)) {
+ DEBUGMSGTL(("ucdDemoPublic",
+ "write to ucdDemoResetKeys: bad length\n"));
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ if (action == COMMIT) {
+ long_ret = *((long *) var_val);
+ if (long_ret == 1) {
+ engineID = snmpv3_generate_engineID(&engineIDLen);
+ for (i = 0; i < num; i++) {
+ user = usm_get_user(engineID, engineIDLen, demoUsers[i]);
+ if (user) {
+ usm_set_user_password(user, "userSetAuthPass",
+ demopass);
+ usm_set_user_password(user, "userSetPrivPass",
+ demopass);
+ }
+ }
+ /*
+ * reset the keys
+ */
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_ucdDemoPublicString(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ if (var_val_type != ASN_OCTET_STR) {
+ DEBUGMSGTL(("ucdDemoPublic",
+ "write to ucdDemoPublicString not ASN_OCTET_STR\n"));
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > MYMAX) {
+ DEBUGMSGTL(("ucdDemoPublic",
+ "write to ucdDemoPublicString: bad length\n"));
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ if (action == COMMIT) {
+ if (var_val_len != 0) {
+ strcpy(publicString, var_val);
+ publicString[var_val_len] = '\0';
+ } else
+ publicString[0] = '\0';
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.cmds b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.cmds
new file mode 100755
index 0000000000..41ce10e6a4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.cmds
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+snmpusm -e 800007e501d0d6a623 -v 3 -p 1633 localhost create noAuthUser
+snmpusm -e 800007e501d0d6a623 -v 3 -p 1633 localhost create MD5DESUser templateMD5
+snmpusm -e 800007e501d0d6a623 -v 3 -p 1633 localhost create SHADESUser templateSHA
+snmpusm -e 800007e501d0d6a623 -v 3 -p 1633 localhost create MD5User templateMD5
+snmpusm -e 800007e501d0d6a623 -v 3 -p 1633 localhost create SHAUser templateSHA
+snmpset -R -v 3 -p 1633 localhost usmUserPrivProtocol.9.128.0.7.229.1.208.214.166.35.7.77.68.53.85.115.101.114 o .1.3.6.1.6.3.10.1.2.1 usmUserPrivProtocol.9.128.0.7.229.1.208.214.166.35.7.83.72.65.85.115.101.114 o .1.3.6.1.6.3.10.1.2.1
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.conf b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.conf
new file mode 100644
index 0000000000..ff4a207272
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.conf
@@ -0,0 +1,89 @@
+#*************************************************************
+# Define the views that the demogroup will be
+# restricted to.
+#
+# Format:
+# view NAME TYPE SUBTREE [MASK]
+#
+view demoWrite included .1.3.6.1.4.1.2021.14.1.1
+view demoRead included .1.3.6.1.4.1.2021.14.1.1
+view demoRead included .1.3.6.1.2.1.1
+# ---+----
+# +---------------------------------------------------------+
+# |
+#************************************************************* |
+# Map any v1 style communities to a securityName |
+# |
+# Format: |
+# com2sec NAME SOURCE COMMUNITY |
+# |
+com2sec v1User default v1demopublic |
+com2sec v2cUser default demopublic |
+# ---+--- |
+# +----------------------------------------------------+ |
+# | |
+# | |
+#************************************************************** | |
+# Define the demogroup users and their access models | |
+# | |
+# Format: | |
+# group NAME MODEL SECURITY | |
+# | |
+# +----------------------------------------+ |
+# \|/ |
+# _______ |
+group demogroup v1 v1User |
+group demogroup v2c v2cUser |
+# ----+---- |
+# +---------------------------------------------------+ |
+# | |
+# | |
+#*********************************************************** | |
+# Define views for the group | |
+# | |
+# Format: | |
+# access NAME CONTEXT MODEL LEVEL PREFX READ WRITE NOTIFY | |
+# | |
+# +--------------------------------------------------+ |
+# | +--------+---------------+
+# \|/ \|/ \|/
+# _________ ________ _________
+access demogroup "" any noauth prefix demoRead demoWrite none
+
+#
+# the demoUser token is supported by the examples/ucdDempPublic module
+#
+demoUser noAuthUser
+demoUser MD5User
+demoUser MD5DESUser
+demoUser SHAUser
+demoUser SHADESUser
+demoPass The Net-SNMP Demo Password
+
+#
+# more security names for demogroup
+#
+group demogroup usm noAuthUser
+group demogroup usm MD5User
+group demogroup usm SHAUser
+group demogroup usm MD5DESUser
+group demogroup usm SHADESUser
+#
+# more views for demowrite
+#
+view demowrite included .1.3.6.1.6.3.12.1.2.2.1.10.9.128.0.7.229.1.208.214.166.35.7.77.68.53.85.115.101.114
+view demowrite included .1.3.6.1.6.3.12.1.2.2.1.10.9.128.0.7.229.1.208.214.166.35.7.83.72.65.85.115.101.114
+view demowrite included .1.3.6.1.6.3.12.1.2.2.1.10.9.128.0.7.229.1.208.214.166.35.10.77.68.53.68.69.83.85.115.101.114
+view demowrite included .1.3.6.1.6.3.12.1.2.2.1.10.9.128.0.7.229.1.208.214.166.35.10.83.72.65.68.69.83.85.115.101.114
+view demowrite included .1.3.6.1.6.3.12.1.2.2.1.10.9.128.0.7.229.1.208.214.166.35.10.110.111.65.117.116.104.85.115.101.114
+#
+#
+# normally these would be added in /var/net-snmp/snmpd.conf (while
+# snmpd was not running), where they will be replaced by a local
+# key when the agent started up, thus providing a bit more security.
+#
+createUser noAuthUser
+createUser MD5User MD5 "The Net-SNMP Demo Password"
+createUser SHAUser SHA "The Net-SNMP Demo Password"
+createUser MD5DESUser MD5 "The Net-SNMP Demo Password" DES "The Net-SNMP Demo Password"
+createUser SHADESUser SHA "The Net-SNMP Demo Password" DES "The Net-SNMP Demo Password"
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.h
new file mode 100644
index 0000000000..fd9f12fdb1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/ucdDemoPublic.h
@@ -0,0 +1,38 @@
+/*
+ * ucdDemoPublic.h
+ */
+
+#ifndef _MIBGROUP_UCDDEMOPUBLIC_H
+#define _MIBGROUP_UCDDEMOPUBLIC_H
+
+/*
+ * we use header_generic and checkmib from the util_funcs module
+ */
+
+config_require(util_funcs)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * Magic number definitions:
+ */
+#define UCDDEMORESETKEYS 1
+#define UCDDEMOPUBLICSTRING 2
+#define UCDDEMOUSERLIST 3
+#define UCDDEMOPASSPHRASE 4
+ /*
+ * function definitions
+ */
+ void init_ucdDemoPublic(void);
+ FindVarMethod var_ucdDemoPublic;
+ WriteMethod write_ucdDemoResetKeys;
+ WriteMethod write_ucdDemoPublicString;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _MIBGROUP_UCDDEMOPUBLIC_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/watched.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/watched.c
new file mode 100644
index 0000000000..a1b58b6288
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/watched.c
@@ -0,0 +1,104 @@
+/*
+ * watched.c
+ * $Id: watched.c 12097 2005-04-20 18:03:47Z rstory $
+ *
+ */
+/** @example watched.c
+ * These examples creates some scalar registrations that allows
+ * some simple variables to be accessed via SNMP. In a more
+ * realistic example, it is likely that these variables would also be
+ * manipulated in other ways outside of SNMP gets/sets.
+ */
+
+/*
+ * start by including the appropriate header files
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+void init_watched_string(void);
+
+void init_watched(void)
+{
+ init_watched_string();
+}
+
+void init_watched_string(void)
+{
+ /*
+ * the storage for our string. It must be static or allocated.
+ * we use static here for simplicity.
+ */
+ static char my_string[256] = "So long, and thanks for all the fish!";
+
+ /*
+ * the OID we want to register our string at. This should be a
+ * fully qualified instance. In our case, it's a scalar at:
+ * NET-SNMP-EXAMPLES-MIB::netSnmpExampleString.0 (note the trailing
+ * 0 which is required for any instantiation of any scalar object)
+ */
+ oid my_registration_oid[] =
+ { 1, 3, 6, 1, 4, 1, 8072, 2, 1, 3, 0 };
+
+ /*
+ * variables needed for registration
+ */
+ netsnmp_handler_registration *reginfo;
+ netsnmp_watcher_info *watcher_info;
+ int watcher_flags;
+
+ /*
+ * a debugging statement. Run the agent with -Dexample_string_instance
+ * to see the output of this debugging statement.
+ */
+ DEBUGMSGTL(("example_string_instance",
+ "Initalizing example string instance. Default value = %s\n",
+ my_string));
+
+ /*
+ * create the registration info for our string. If you want to
+ *
+ * If we wanted a callback when the value was retrieved or set
+ * (even though the details of doing this are handled for you),
+ * you could change the NULL pointer below to a valid handler
+ * function.
+ *
+ * Change RWRITE to RONLY for a read-only string.
+ */
+ reginfo = netsnmp_create_handler_registration("my example string", NULL,
+ my_registration_oid,
+ OID_LENGTH(my_registration_oid),
+ HANDLER_CAN_RWRITE);
+
+ /*
+ * the two options for a string watcher are:
+ * fixed size string (length never changes)
+ * variable size (length can be 0 - MAX, for some MAX)
+ *
+ * we'll use a variable length string.
+ */
+ watcher_flags = WATCHER_MAX_SIZE;
+
+ /*
+ * create the watcher info for our string, and set the max size.
+ */
+ watcher_info =
+ netsnmp_create_watcher_info(my_string, strlen(my_string),
+ ASN_OCTET_STR, watcher_flags);
+ watcher_info->max_size = sizeof(my_string);
+
+ /*
+ * the line below registers our "my_string" variable above as
+ * accessible and makes it writable.
+ *
+ * If we wanted a callback when the value was retrieved or set
+ * (even though the details of doing this are handled for you),
+ * you could change the NULL pointer below to a valid handler
+ * function.
+ */
+ netsnmp_register_watched_instance(reginfo, watcher_info);
+
+ DEBUGMSGTL(("example_string_instance",
+ "Done initalizing example string instance\n"));
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/watched.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/watched.h
new file mode 100644
index 0000000000..84e5f335c5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/examples/watched.h
@@ -0,0 +1,14 @@
+#ifndef EXAMPLES_WATCHED_H
+#define EXAMPLES_WATCHED_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void init_watched(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EXAMPLES_WATCHED_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu.h
new file mode 100644
index 0000000000..3ee7162c67
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu.h
@@ -0,0 +1,32 @@
+config_require(hardware/cpu/cpu)
+
+#if defined(linux)
+config_require(hardware/cpu/cpu_linux)
+
+#elif defined(darwin)
+config_require(hardware/cpu/cpu_mach)
+
+#elif (defined(irix6) && defined(NETSNMP_INCLUDE_HARDWARE_CPU_PCP_MODULE))
+config_require(hardware/cpu/cpu_pcp)
+
+#elif defined(irix6)
+config_require(hardware/cpu/cpu_sysinfo)
+
+#elif (defined(netbsd) || defined(netbsd1) || defined(netbsdelf) || defined(netbsdelf2)|| defined(netbsdelf3) || defined(openbsd2) || defined(openbsd3) || defined(openbsd4) || defined(freebsd4) || defined(freebsd5) || defined(freebsd6))
+config_require(hardware/cpu/cpu_sysctl)
+
+#elif (defined(freebsd2) || defined(freebsd3))
+config_require(hardware/cpu/cpu_nlist)
+
+#elif (defined(aix4) || defined(aix5) || defined(aix6))
+config_require(hardware/cpu/cpu_perfstat)
+
+#elif (defined(solaris2))
+config_require(hardware/cpu/cpu_kstat)
+
+#elif (defined(hpux10) || defined(hpux11))
+config_require(hardware/cpu/cpu_pstat)
+
+#else
+config_require(hardware/cpu/cpu_null)
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu.c
new file mode 100644
index 0000000000..201eff7128
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu.c
@@ -0,0 +1,246 @@
+#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/agent/hardware/cpu.h>
+
+extern NetsnmpCacheLoad netsnmp_cpu_arch_load;
+static void _cpu_update_stats( unsigned int, void* );
+
+static int _cpuAutoUpdate = 5;
+static int _cpuHistoryLen;
+int cpu_num = 0;
+
+static netsnmp_cpu_info *_cpu_head = NULL;
+static netsnmp_cpu_info *_cpu_tail = NULL;
+static netsnmp_cache *_cpu_cache = NULL;
+
+void init_cpu( void ) {
+ /*
+ * If we're sampling the CPU statistics automatically,
+ * then arrange for this to be triggered regularly,
+ * keeping sufficient samples to cover the last minute.
+ * If the system-specific code has already initialised
+ * the list of CPU entries, then retrieve the first set
+ * of stats immediately.
+ * Otherwise, wait until the regular sampling kicks in.
+ *
+ * If we're not sampling these statistics regularly,
+ * create a suitable cache handler instead.
+ */
+ if ( _cpuAutoUpdate ) {
+
+ _cpuHistoryLen = 60/_cpuAutoUpdate;
+ snmp_alarm_register( _cpuAutoUpdate, SA_REPEAT, _cpu_update_stats,
+ NULL );
+ if ( _cpu_head )
+ _cpu_update_stats( 0, NULL );
+ } else
+ _cpu_cache = netsnmp_cache_create( 5, netsnmp_cpu_arch_load,
+ NULL, NULL, 0 );
+}
+
+void shutdown_cpu( void ) {
+ while ( _cpu_head ) {
+ netsnmp_cpu_info *tmp = _cpu_head;
+ _cpu_head = _cpu_head->next;
+ SNMP_FREE(tmp->history);
+ SNMP_FREE(tmp);
+ }
+ _cpu_tail = NULL;
+}
+
+
+netsnmp_cpu_info *netsnmp_cpu_get_first( void ) {
+ return _cpu_head;
+}
+netsnmp_cpu_info *netsnmp_cpu_get_next( netsnmp_cpu_info *this_ptr ) {
+ return ( this_ptr ? this_ptr->next : NULL );
+}
+
+ /*
+ * Work with a list of CPU entries, indexed numerically
+ */
+netsnmp_cpu_info *netsnmp_cpu_get_byIdx( int idx, int create ) {
+ netsnmp_cpu_info *cpu, *cpu2;
+
+ /*
+ * Find the specified CPU entry
+ */
+ DEBUGMSGTL(("cpu", "cpu_get_byIdx %d ", idx));
+ for ( cpu=_cpu_head; cpu; cpu=cpu->next ) {
+ if ( cpu->idx == idx ) {
+ DEBUGMSG(("cpu", "(found)\n"));
+ return cpu;
+ }
+ }
+ if (!create) {
+ DEBUGMSG(("cpu", "(not found)\n"));
+ return NULL;
+ }
+
+ /*
+ * Create a new CPU entry, and insert it into the list....
+ */
+ cpu = SNMP_MALLOC_TYPEDEF( netsnmp_cpu_info );
+ if (!cpu) {
+ return NULL;
+ DEBUGMSG(("cpu", "(failed)\n"));
+ }
+ DEBUGMSG(("cpu", "(created)\n"));
+ cpu->idx = idx;
+ /* ... either as the first (or only) entry.... */
+ if ( !_cpu_head || _cpu_head->idx > idx ) {
+ cpu->next = _cpu_head;
+ _cpu_head = cpu;
+ if (!_cpu_tail)
+ _cpu_tail = cpu;
+ return cpu;
+ }
+ /* ... or in the appropriate position */
+ for ( cpu2=_cpu_head; cpu2; cpu2=cpu2->next ) {
+ if ( !cpu2->next || cpu2->next->idx > idx ) {
+ cpu->next = cpu2->next;
+ cpu2->next = cpu;
+ if (!cpu->next)
+ _cpu_tail = cpu;
+ return cpu;
+ }
+ }
+ if (cpu)
+ SNMP_FREE(cpu); /* just in case */
+ return NULL; /* Shouldn't happen! */
+}
+
+ /*
+ * Work with a list of CPU entries, indexed by name
+ */
+netsnmp_cpu_info *netsnmp_cpu_get_byName( char *name, int create ) {
+ netsnmp_cpu_info *cpu;
+
+ /*
+ * Find the specified CPU entry
+ */
+ for ( cpu=_cpu_head; cpu; cpu=cpu->next ) {
+ if ( !strcmp(cpu->name, name))
+ return cpu;
+ }
+ if (!create)
+ return NULL;
+
+ /*
+ * Create a new CPU entry, and append it to the list
+ */
+ cpu = SNMP_MALLOC_TYPEDEF( netsnmp_cpu_info );
+ if (!cpu)
+ return NULL;
+ strcpy(cpu->name, name);
+ if ( _cpu_tail ) {
+ cpu->idx = _cpu_tail->idx+1;
+ _cpu_tail->next = cpu;
+ _cpu_tail = cpu;
+ } else {
+ cpu->idx = 0;
+ _cpu_head = cpu;
+ _cpu_tail = cpu;
+ }
+ return cpu;
+}
+
+netsnmp_cache *netsnmp_cpu_get_cache( void ) {
+ return _cpu_cache;
+}
+
+int netsnmp_cpu_load( void ) {
+ /*
+ * If we're automatically updating the stats regularly,
+ * then don't invoke the cache handling.
+ */
+ return ( _cpuAutoUpdate ? 1
+ : netsnmp_cache_check_and_reload( _cpu_cache ));
+}
+
+ /*
+ * Call the system-specific load routine regularly,
+ * keeping track of the relevant earlier results.
+ */
+static void
+_cpu_update_stats( unsigned int reg, void* magic ) {
+ netsnmp_cpu_info *cpu;
+ int i;
+
+ for ( cpu=_cpu_head; cpu; cpu=cpu->next ) {
+ if ( !cpu->history ) {
+ /*
+ * First time through, we need to create buffers
+ * for the historical stats
+ */
+ cpu->history = calloc( _cpuHistoryLen, sizeof(struct netsnmp_cpu_history));
+ } else {
+ /*
+ * Otherwise, rotate these values - in descending order
+ * with the earliest (relevant) statistics in entry 0.
+ * This means that the code to calculate the rolling averages
+ * is independent of the number of historical samples saved.
+ */
+ for (i=0; i<_cpuHistoryLen-2; i++) {
+ cpu->history[i] = cpu->history[i+1];
+ }
+ cpu->history[i].user_hist = cpu->user_ticks;
+ cpu->history[i].sys_hist = cpu->sys_ticks;
+ cpu->history[i].idle_hist = cpu->idle_ticks;
+ cpu->history[i].nice_hist = cpu->nice_ticks;
+ cpu->history[i].total_hist = cpu->total_ticks;
+
+ cpu->history[i].ctx_hist = cpu->nCtxSwitches;
+ cpu->history[i].intr_hist = cpu->nInterrupts;
+ cpu->history[i].swpi_hist = cpu->swapIn;
+ cpu->history[i].swpo_hist = cpu->swapOut;
+ cpu->history[i].pagei_hist = cpu->pageIn;
+ cpu->history[i].pageo_hist = cpu->pageOut;
+ }
+ }
+
+ /*
+ * Now call the system-specific load routine, to
+ * retrieve the latest set of data.
+ */
+ netsnmp_cpu_arch_load( NULL, NULL );
+ for ( cpu=_cpu_head; cpu; cpu=cpu->next ) {
+ cpu->total_ticks = cpu->user_ticks +
+ cpu->nice_ticks +
+ cpu->sys_ticks +
+ cpu->idle_ticks +
+ cpu->wait_ticks +
+ cpu->kern_ticks +
+ cpu->intrpt_ticks +
+ cpu->sirq_ticks;
+ }
+}
+
+void _cpu_copy_stats( netsnmp_cpu_info *cpu )
+{
+ netsnmp_cpu_info *cpu2;
+
+ /*
+ * Copy "overall" statistics to the 'cpu0' entry
+ * on single CPU systems where this isn't done automatically
+ */
+ cpu2 = netsnmp_cpu_get_byIdx( 0, 1 );
+ if (!cpu || !cpu2) return;
+ cpu2->user_ticks = cpu->user_ticks;
+ cpu2->nice_ticks = cpu->nice_ticks;
+ cpu2->sys_ticks = cpu->sys_ticks;
+ cpu2->sys2_ticks = cpu->sys2_ticks;
+ cpu2->idle_ticks = cpu->idle_ticks;
+ cpu2->wait_ticks = cpu->wait_ticks;
+ cpu2->kern_ticks = cpu->kern_ticks;
+ cpu2->intrpt_ticks = cpu->intrpt_ticks;
+ cpu2->sirq_ticks = cpu->sirq_ticks;
+
+ cpu2->nInterrupts = cpu->nInterrupts;
+ cpu2->nCtxSwitches = cpu->nCtxSwitches;
+ cpu2->swapIn = cpu->swapIn;
+ cpu2->swapOut = cpu->swapOut;
+ cpu2->pageIn = cpu->pageIn;
+ cpu2->pageOut = cpu->pageOut;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu.h
new file mode 100644
index 0000000000..bb7a1e465f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu.h
@@ -0,0 +1,2 @@
+void init_cpu(void);
+void shutdown_cpu(void);
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kerndata.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kerndata.c
new file mode 100644
index 0000000000..9a9c4a4d6f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kerndata.c
@@ -0,0 +1,95 @@
+/*
+ * getkerndata() interface
+ * e.g. Dynix
+ */
+#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/agent/hardware/cpu.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+#include <sys/sysctl.h>
+#include <sys/vmmeter.h>
+#include <vm/vm_param.h>
+#include <vm/vm_extern.h>
+
+
+ /*
+ * Initialise the list of CPUs on the system
+ * (including descriptions)
+ */
+void init_cpu_nlist( void ) {
+ int i;
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 1 );
+ strcpy(cpu->name, "Overall CPU statistics");
+
+ cpu_num = tmp_ctl( TMP_NENG, 0 );
+ if ( cpu_num <= 0 )
+ cpu_num = 1; /* Single CPU system */
+ for ( i=0; i < cpu_num; i++ ) {
+ cpu = netsnmp_cpu_get_byIdx( i, 1 );
+ sprintf( cpu->name, "cpu%d", i );
+ }
+}
+
+
+ /*
+ * Load the latest CPU usage statistics
+ */
+int netsnmp_cpu_arch_load( netsnmp_cache *cache, void *magic ) {
+ int i;
+ exp_vmmeter_t *vminfo;
+ size_t vminfo_size;
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 0 );
+ netsnmp_cpu_info *cpu2;
+
+ /* Clear overall stats, ready for summing individual CPUs */
+ cpu->user_ticks = 0;
+ cpu->idle_ticks = 0;
+ cpu->kern_ticks = 0;
+ cpu->wait_ticks = 0;
+ cpu->sys2_ticks = 0;
+ cpu->swapIn = 0;
+ cpu->swapOut = 0;
+ cpu->nInterrupts = 0;
+ cpu->nCtxSwitches = 0;
+
+ vminfo_size = cpu_num * sizeof(exp_vmmeter_t);
+ vminfo = (exp_vmmeter_t *)malloc( vminfo_size );
+ getkerninfo(VMMETER_DATAID, vminfo, vminfo_size);
+
+ for ( i=0; i < cpu_num; i++ ) {
+ cpu2 = netsnmp_cpu_get_byIdx( i, 0 );
+
+ cpu2->user_ticks = (unsigned long)vminfo[i].v_time[V_CPU_USER];
+ cpu2->idle_ticks = (unsigned long)vminfo[i].v_time[V_CPU_IDLE];
+ cpu2->kern_ticks = (unsigned long)vminfo[i].v_time[V_CPU_KERNEL];
+ cpu2->wait_ticks = (unsigned long)vminfo[i].v_time[V_CPU_STREAM];
+ cpu2->sys2_ticks = (unsigned long)vminfo[i].v_time[V_CPU_KERNEL]+
+ vminfo[i].v_time[V_CPU_STREAM];
+ /* nice_ticks, intrpt_ticks, sirq_ticks unused */
+
+ /* sum these for the overall stats */
+ cpu->user_ticks += (unsigned long)vminfo[i].v_time[V_CPU_USER];
+ cpu->idle_ticks += (unsigned long)vminfo[i].v_time[V_CPU_IDLE];
+ cpu->kern_ticks += (unsigned long)vminfo[i].v_time[V_CPU_KERNEL];
+ cpu->wait_ticks += (unsigned long)vminfo[i].v_time[V_CPU_STREAM];
+ cpu->sys2_ticks += (unsigned long)vminfo[i].v_time[V_CPU_KERNEL]+
+ vminfo[i].v_time[V_CPU_STREAM];
+
+ /*
+ * Interrupt/Context Switch statistics
+ * XXX - Do these really belong here ?
+ */
+ cpu->swapIn += (unsigned long)vminfo[i].v_swpin;
+ cpu->swapOut += (unsigned long)vminfo[i].v_swpout;
+ cpu->pageIn += (unsigned long)vminfo[i].v_phread;
+ cpu->pageOut += (unsigned long)vminfo[i].v_phwrite;
+ cpu->nInterrupts += (unsigned long)vminfo[i].v_intr;
+ cpu->nCtxSwitches += (unsigned long)vminfo[i].v_swtch;
+ }
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kerndata.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kerndata.h
new file mode 100755
index 0000000000..7a0d9c786e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kerndata.h
@@ -0,0 +1,2 @@
+config_require(hardware/cpu/cpu)
+void init_cpu_kerndata(void);
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kstat.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kstat.c
new file mode 100644
index 0000000000..e7b8c5e719
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kstat.c
@@ -0,0 +1,162 @@
+/*
+ * kstat() interface
+ * e.g. Solaris
+ */
+#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/agent/hardware/cpu.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+#include <kstat.h>
+#include <sys/sysinfo.h>
+
+extern kstat_ctl_t *kstat_fd;
+extern int cpu_num;
+int _cpu_status(char *state);
+
+ /*
+ * Initialise the list of CPUs on the system
+ * (including descriptions)
+ */
+void init_cpu_kstat( void ) {
+ int i, n=0, clock, state_begin;
+ char ctype[15], ftype[15], state[10];
+ kstat_t *ksp;
+ kstat_named_t *ks_data;
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 1 );
+ strcpy(cpu->name, "Overall CPU statistics");
+
+ if (kstat_fd == NULL)
+ kstat_fd = kstat_open();
+ kstat_chain_update( kstat_fd );
+
+ DEBUGMSGTL(("cpu", "cpu_kstat init\n "));
+ for (ksp = kstat_fd->kc_chain; ksp != NULL; ksp = ksp->ks_next) {
+ if (ksp->ks_flags & KSTAT_FLAG_INVALID)
+ continue;
+ if ((strcmp(ksp->ks_module, "cpu_info") == 0) &&
+ (strcmp(ksp->ks_class, "misc" ) == 0)) {
+ kstat_read(kstat_fd, ksp, NULL );
+ n++;
+ clock = 999999;
+ memset(ctype, 0, sizeof(ctype));
+ memset(ftype, 0, sizeof(ftype));
+ memset(state, 0, sizeof(state));
+ for (i=0, ks_data = ksp->ks_data; i < ksp->ks_ndata; i++, ks_data++) {
+ if ( strcmp( ks_data->name, "state" ) == 0 ) {
+ strncpy( state, ks_data->value.c, sizeof(state));
+ state[sizeof(state)-1] = '\0';
+ } else if ( strcmp( ks_data->name, "state_begin" ) == 0 ) {
+ state_begin = ks_data->value.i32;
+ } else if ( strcmp( ks_data->name, "cpu_type" ) == 0 ) {
+ strncpy( ctype, ks_data->value.c, sizeof(ctype));
+ state[sizeof(ctype)-1] = '\0';
+ } else if ( strcmp( ks_data->name, "fpu_type" ) == 0 ) {
+ strncpy( ftype, ks_data->value.c, sizeof(ftype));
+ state[sizeof(ftype)-1] = '\0';
+ } else if ( strcmp( ks_data->name, "clock_MHz" ) == 0 ) {
+ clock = ks_data->value.i32;
+ }
+ }
+ i = ksp->ks_instance;
+ cpu = netsnmp_cpu_get_byIdx( i, 1 );
+ sprintf( cpu->name, "cpu%d", i );
+ sprintf( cpu->descr, "CPU %d Sun %d MHz %s with %s FPU %s",
+ i, clock, ctype, ftype, state );
+ cpu->status = _cpu_status(state); /* XXX - or in 'n_c_a_load' ? */
+ }
+ }
+ cpu_num = i;
+}
+
+
+ /*
+ * Load the latest CPU usage statistics
+ */
+int netsnmp_cpu_arch_load( netsnmp_cache *cache, void *magic ) {
+ int i=1;
+ kstat_t *ksp;
+ cpu_stat_t cs;
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 0 );
+ netsnmp_cpu_info *cpu2;
+
+ /* Clear overall stats, ready for summing individual CPUs */
+ cpu->user_ticks = 0;
+ cpu->idle_ticks = 0;
+ cpu->kern_ticks = 0;
+ cpu->wait_ticks = 0;
+ cpu->sys2_ticks = 0;
+ cpu->swapIn = 0;
+ cpu->swapOut = 0;
+ cpu->nInterrupts = 0;
+ cpu->nCtxSwitches = 0;
+
+ kstat_chain_update( kstat_fd );
+ DEBUGMSGTL(("cpu", "cpu_kstat load\n "));
+ for (ksp = kstat_fd->kc_chain; ksp != NULL; ksp = ksp->ks_next) {
+ if (ksp->ks_flags & KSTAT_FLAG_INVALID)
+ continue;
+ if (strcmp(ksp->ks_module, "cpu_stat") == 0) {
+ i = ksp->ks_instance;
+ cpu2 = netsnmp_cpu_get_byIdx( i, 0 );
+ if ((ksp->ks_type != KSTAT_TYPE_RAW) ||
+ (ksp->ks_data_size != sizeof(cs))||
+ (kstat_read(kstat_fd, ksp, &cs) == -1)) {
+ DEBUGMSGTL(("cpu", "cpu_kstat load failed (%d)\n ", i));
+ break; /* or continue ? */
+ }
+
+ cpu2->user_ticks = (unsigned long)cs.cpu_sysinfo.cpu[CPU_USER];
+ cpu2->idle_ticks = (unsigned long)cs.cpu_sysinfo.cpu[CPU_IDLE];
+ cpu2->kern_ticks = (unsigned long)cs.cpu_sysinfo.cpu[CPU_KERNEL];
+ cpu2->wait_ticks = (unsigned long)cs.cpu_sysinfo.cpu[CPU_WAIT];
+ /* or cs.cpu_sysinfo.wait[W_IO]+cs.cpu_sysinfo.wait[W_PIO] */
+ cpu2->sys2_ticks = (unsigned long)cpu2->kern_ticks+cpu2->wait_ticks;
+ /* nice_ticks, intrpt_ticks, sirq_ticks unused */
+
+ /* sum these for the overall stats */
+ cpu->user_ticks += (unsigned long)cs.cpu_sysinfo.cpu[CPU_USER];
+ cpu->idle_ticks += (unsigned long)cs.cpu_sysinfo.cpu[CPU_IDLE];
+ cpu->kern_ticks += (unsigned long)cs.cpu_sysinfo.cpu[CPU_KERNEL];
+ cpu->wait_ticks += (unsigned long)cs.cpu_sysinfo.cpu[CPU_WAIT];
+ /* or cs.cpu_sysinfo.wait[W_IO]+cs.cpu_sysinfo.wait[W_PIO] */
+ cpu->sys2_ticks += (unsigned long)cpu2->kern_ticks+cpu2->wait_ticks;
+
+ /*
+ * Interrupt/Context Switch statistics
+ * XXX - Do these really belong here ?
+ */
+ cpu->swapIn += (unsigned long)cs.cpu_vminfo.swapin;
+ cpu->swapOut += (unsigned long)cs.cpu_vminfo.swapout;
+ cpu->nInterrupts += (unsigned long)cs.cpu_sysinfo.intr;
+ cpu->nCtxSwitches += (unsigned long)cs.cpu_sysinfo.pswitch;
+ }
+ }
+ return 0;
+}
+
+int
+_cpu_status( char *state)
+{
+ /*
+ * hrDeviceStatus OBJECT-TYPE
+ * SYNTAX INTEGER {
+ * unknown(1), running(2), warning(3), testing(4), down(5)
+ * }
+ */
+ if (strcmp(state,"on-line")==0)
+ { return 2; /* running */ }
+ else if (strcmp(state,"off-line")==0)
+ { return 5; /* down */ }
+ else if (strcmp(state,"missing")==0)
+ { return 3; /* warning, went missing */ }
+ else if (strcmp(state,"testing")==0)
+ { return 4; /* somebody must be testing code somewhere */ }
+ else
+ { return 1; /* unknown */ }
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kstat.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kstat.h
new file mode 100755
index 0000000000..ce3862865c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_kstat.h
@@ -0,0 +1,2 @@
+config_require(hardware/cpu/cpu)
+void init_cpu_kstat(void);
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_linux.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_linux.c
new file mode 100644
index 0000000000..7ee82ede12
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_linux.c
@@ -0,0 +1,301 @@
+#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/agent/hardware/cpu.h>
+
+#include <unistd.h>
+#include <fcntl.h>
+
+#define CPU_FILE "/proc/cpuinfo"
+#define STAT_FILE "/proc/stat"
+#define VMSTAT_FILE "/proc/vmstat"
+
+
+ /* Which field(s) describe the type of CPU */
+#if defined(__i386__) || defined(__x86_64__)
+#define DESCR_FIELD "vendor_id"
+#define DESCR2_FIELD "model name"
+#endif
+#if defined(__powerpc__) || defined(__powerpc64__)
+#define DESCR_FIELD "cpu\t"
+#endif
+#if defined(__ia64__)
+ /* since vendor is always Intel ... we don't parse vendor */
+#define DESCR_FIELD "family"
+#endif
+
+
+ /*
+ * Initialise the list of CPUs on the system
+ * (including descriptions)
+ *
+ * XXX - Assumes x86-style /proc/cpuinfo format
+ * See CPUinfo database at
+ * http://www.rush3d.com/gcc/
+ * for info on alternative styles
+ */
+void init_cpu_linux( void ) {
+ FILE *fp;
+ char buf[1024], *cp;
+ int i, n = 0;
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 1 );
+ strcpy(cpu->name, "Overall CPU statistics");
+
+ fp = fopen( CPU_FILE, "r" );
+ if (!fp) {
+ snmp_log(LOG_ERR, "Can't open procinfo file %s\n", CPU_FILE);
+ return;
+ }
+ while ( fgets( buf, sizeof(buf), fp)) {
+ if ( sscanf( buf, "processor : %d", &i ) == 1) {
+ n++;
+ cpu = netsnmp_cpu_get_byIdx( i, 1 );
+ cpu->status = 2; /* running */
+ sprintf( cpu->name, "cpu%d", i );
+#if defined(__s390__) || defined(__s390x__)
+ strcat( cpu->descr, "An S/390 CPU" );
+#endif
+ }
+#if defined(__s390__) || defined(__s390x__)
+ /* s390 may different format of CPU_FILE */
+ else {
+ if (sscanf( buf, "processor %d:", &i ) == 1) {
+ n++;
+ cpu = netsnmp_cpu_get_byIdx( i, 1 );
+ cpu->status = 2; /* running */
+ sprintf( cpu->name, "cpu%d", i );
+ strcat( cpu->descr, "An S/390 CPU" );
+ }
+ }
+#endif
+
+#ifdef DESCR_FIELD
+ if (!strncmp( buf, DESCR_FIELD, strlen(DESCR_FIELD))) {
+ cp = strchr( buf, ':' );
+ strcpy( cpu->descr, cp+2 );
+ cp = strchr( cpu->descr, '\n' );
+ *cp = 0;
+ }
+#endif
+#ifdef DESCR2_FIELD
+ if (!strncmp( buf, DESCR2_FIELD, strlen(DESCR2_FIELD))) {
+ cp = strchr( buf, ':' );
+ strcat( cpu->descr, cp );
+ cp = strchr( cpu->descr, '\n' );
+ *cp = 0;
+ }
+#endif
+ }
+ fclose(fp);
+ cpu_num = n;
+}
+
+void _cpu_load_swap_etc( char *buff, netsnmp_cpu_info *cpu );
+
+ /*
+ * Load the latest CPU usage statistics
+ */
+int netsnmp_cpu_arch_load( netsnmp_cache *cache, void *magic ) {
+ static char *buff = NULL;
+ static int bsize = 0;
+ static int first = 1;
+ static int has_cpu_26 = 1;
+ int statfd, i;
+ char *b1, *b2;
+ unsigned long long cusell = 0, cicell = 0, csysll = 0, cidell = 0,
+ ciowll = 0, cirqll = 0, csoftll = 0;
+ netsnmp_cpu_info* cpu;
+
+ if ((statfd = open(STAT_FILE, O_RDONLY, 0)) == -1) {
+ snmp_log_perror(STAT_FILE);
+ return -1;
+ }
+ if (bsize == 0) {
+ bsize = 256;
+ buff = malloc(bsize);
+ }
+ while (read(statfd, buff, bsize) == bsize) {
+ bsize += 256;
+ buff = realloc(buff, bsize);
+ DEBUGMSGTL(("cpu", "/proc/stat buffer increased to %d\n", bsize));
+ close(statfd);
+ statfd = open(STAT_FILE, O_RDONLY, 0);
+ }
+ close(statfd);
+
+ /*
+ * CPU statistics (overall and per-CPU)
+ */
+ b1 = buff;
+ while ((b2 = strstr( b1, "cpu" ))) {
+ if (b2[3] == ' ') {
+ cpu = netsnmp_cpu_get_byIdx( -1, 0 );
+ if (!cpu) {
+ snmp_log_perror("No (overall) CPU info entry");
+ return -1;
+ }
+ b1 = b2+4; /* Skip "cpu " */
+ } else {
+ sscanf( b2, "cpu%d", &i );
+ /* Create on the fly to support non-x86 systems - see init */
+ cpu = netsnmp_cpu_get_byIdx( i, 1 );
+ if (!cpu) {
+ snmp_log_perror("Missing CPU info entry");
+ break;
+ }
+ b1 = b2+5; /* Skip "cpuN " */
+ }
+
+ if (!has_cpu_26 ||
+ sscanf(b1, "%llu %llu %llu %llu %llu %llu %llu", &cusell,
+ &cicell, &csysll, &cidell, &ciowll, &cirqll, &csoftll) != 7) {
+ has_cpu_26 = 0;
+ sscanf(b1, "%llu %llu %llu %llu", &cusell, &cicell, &csysll,
+ &cidell);
+
+ } else {
+ cpu->wait_ticks = (unsigned long)ciowll;
+ cpu->intrpt_ticks = (unsigned long)cirqll;
+ cpu->sirq_ticks = (unsigned long)csoftll;
+ }
+ cpu->user_ticks = (unsigned long)cusell;
+ cpu->nice_ticks = (unsigned long)cicell;
+ cpu->sys_ticks = (unsigned long)csysll;
+ cpu->idle_ticks = (unsigned long)cidell;
+ }
+ if ( b1 == buff ) {
+ if (first)
+ snmp_log(LOG_ERR, "No cpu line in %s\n", STAT_FILE);
+ }
+
+ /*
+ * Interrupt/Context Switch statistics
+ * XXX - Do these really belong here ?
+ */
+ cpu = netsnmp_cpu_get_byIdx( -1, 0 );
+ _cpu_load_swap_etc( buff, cpu );
+
+ /*
+ * XXX - TODO: extract per-CPU statistics
+ * (Into separate netsnmp_cpu_info data structures)
+ */
+
+ first = 0;
+ return 0;
+}
+
+
+ /*
+ * Interrupt/Context Switch statistics
+ * XXX - Do these really belong here ?
+ */
+void _cpu_load_swap_etc( char *buff, netsnmp_cpu_info *cpu ) {
+ static int has_vmstat = 1;
+ static char *vmbuff = NULL;
+ static int vmbsize = 0;
+ static int first = 1;
+ int vmstatfd;
+ char *b;
+ unsigned long long pin, pout, swpin, swpout;
+ unsigned long long itot, iticks, ctx;
+
+ if (has_vmstat && (vmstatfd = open(VMSTAT_FILE, O_RDONLY, 0)) != -1) {
+ if (vmbsize == 0) {
+ vmbsize = 256;
+ vmbuff = malloc(vmbsize);
+ }
+ while (read(vmstatfd, vmbuff, vmbsize) == vmbsize) {
+ vmbsize += 256;
+ vmbuff = realloc(vmbuff, vmbsize);
+ close(vmstatfd);
+ vmstatfd = open(VMSTAT_FILE, O_RDONLY, 0);
+ }
+ close(vmstatfd);
+ }
+ else
+ has_vmstat = 0;
+
+ if (has_vmstat) {
+ b = strstr(vmbuff, "pgpgin ");
+ if (b) {
+ sscanf(b, "pgpgin %llu", &pin);
+ cpu->pageIn = (unsigned long)pin*2; /* ??? */
+ } else {
+ if (first)
+ snmp_log(LOG_ERR, "No pgpgin line in %s\n", VMSTAT_FILE);
+ cpu->pageIn = 0;
+ }
+ b = strstr(vmbuff, "pgpgout ");
+ if (b) {
+ sscanf(b, "pgpgout %llu", &pout);
+ cpu->pageOut = (unsigned long)pout*2; /* ??? */
+ } else {
+ if (first)
+ snmp_log(LOG_ERR, "No pgpgout line in %s\n", VMSTAT_FILE);
+ cpu->pageOut = 0;
+ }
+ b = strstr(vmbuff, "pswpin ");
+ if (b) {
+ sscanf(b, "pswpin %llu", &swpin);
+ cpu->swapIn = (unsigned long)swpin;
+ } else {
+ if (first)
+ snmp_log(LOG_ERR, "No pswpin line in %s\n", VMSTAT_FILE);
+ cpu->swapIn = 0;
+ }
+ b = strstr(vmbuff, "pswpout ");
+ if (b) {
+ sscanf(b, "pswpout %llu", &swpout);
+ cpu->swapOut = (unsigned long)swpout;
+ } else {
+ if (first)
+ snmp_log(LOG_ERR, "No pswpout line in %s\n", VMSTAT_FILE);
+ cpu->swapOut = 0;
+ }
+ }
+ else {
+ b = strstr(buff, "page ");
+ if (b) {
+ sscanf(b, "page %llu %llu", &pin, &pout);
+ cpu->pageIn = (unsigned long)pin;
+ cpu->pageOut = (unsigned long)pout;
+ } else {
+ if (first)
+ snmp_log(LOG_ERR, "No page line in %s\n", STAT_FILE);
+ cpu->pageIn = cpu->pageOut = 0;
+ }
+ b = strstr(buff, "swap ");
+ if (b) {
+ sscanf(b, "swap %llu %llu", &swpin, &swpout);
+ cpu->swapIn = (unsigned long)swpin;
+ cpu->swapOut = (unsigned long)swpout;
+ } else {
+ if (first)
+ snmp_log(LOG_ERR, "No swap line in %s\n", STAT_FILE);
+ cpu->swapIn = cpu->swapOut = 0;
+ }
+ }
+
+
+
+ b = strstr(buff, "intr ");
+ if (b) {
+ sscanf(b, "intr %llu %llu", &itot, &iticks);
+ cpu->nInterrupts = (unsigned long)itot;
+ /* iticks not used? */
+ } else {
+ if (first)
+ snmp_log(LOG_ERR, "No intr line in %s\n", STAT_FILE);
+ }
+ b = strstr(buff, "ctxt ");
+ if (b) {
+ sscanf(b, "ctxt %llu", &ctx);
+ cpu->nCtxSwitches = (unsigned long)ctx;
+ } else {
+ if (first)
+ snmp_log(LOG_ERR, "No ctxt line in %s\n", STAT_FILE);
+ }
+
+
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_linux.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_linux.h
new file mode 100644
index 0000000000..9bcdb19332
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_linux.h
@@ -0,0 +1,2 @@
+config_require(hardware/cpu/cpu)
+void init_cpu_linux(void);
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_mach.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_mach.c
new file mode 100644
index 0000000000..d527b3df89
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_mach.c
@@ -0,0 +1,113 @@
+/*
+ * mach interface
+ * Apple darwin specific
+ */
+#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/agent/hardware/cpu.h>
+
+#include <mach/mach.h>
+
+#include <errno.h>
+
+static host_name_port_t host;
+static struct host_basic_info hi;
+
+ /*
+ * Initialise the list of CPUs on the system
+ * (including descriptions)
+ */
+void init_cpu_mach( void ) {
+ int ret, i;
+ mach_msg_type_number_t size;
+ char *cpu_type, *cpu_subtype;
+ netsnmp_cpu_info *cpu;
+
+ cpu = netsnmp_cpu_get_byIdx( -1, 1 );
+ strcpy(cpu->name, "Overall CPU statistics");
+
+ host = mach_host_self();
+ size = sizeof(hi);
+ ret = host_info(host, HOST_BASIC_INFO, (host_info_t)&hi, &size);
+ if (ret != KERN_SUCCESS) {
+ snmp_log(LOG_ERR, "HOST_BASIC_INFO: %s - %s\n", mach_error_string(ret), strerror(errno));
+ return;
+ }
+ for ( i = 0; i < hi.avail_cpus; i++) {
+ cpu = netsnmp_cpu_get_byIdx( i, 1 );
+ cpu->status = 2; /* running */
+ sprintf( cpu->name, "cpu%d", i );
+ /* XXX get per-cpu type? Could it be different? */
+ slot_name(hi.cpu_type, hi.cpu_subtype, &cpu_type, &cpu_subtype);
+ sprintf( cpu->descr, "%s - %s", cpu_type, cpu_subtype );
+ }
+ cpu_num = hi.avail_cpus;
+}
+
+int netsnmp_cpu_arch_load( netsnmp_cache *cache, void *magic ) {
+ int i, ret;
+ mach_msg_type_number_t numcpu, nummsg;
+ processor_cpu_load_info_t pcli;
+ vm_statistics_data_t vmstat;
+ netsnmp_cpu_info *cpu, *cpu0;
+
+ /*
+ * Load the latest CPU usage statistics
+ */
+ ret = host_processor_info(host, PROCESSOR_CPU_LOAD_INFO, &numcpu,
+ (processor_info_array_t *)&pcli,
+ &nummsg);
+ if (ret != KERN_SUCCESS) {
+ snmp_log(LOG_ERR, "PROCESSOR_CPU_LOAD_INFO: %s - %s\n", mach_error_string(ret), strerror(errno));
+ return 0;
+ }
+
+ cpu0 = netsnmp_cpu_get_byIdx( -1, 0 );
+ for ( i = 0; i < numcpu; i++) {
+ /* Note: using sys_ticks so that CPUSYSTEM gets calculated right. */
+ /* many collectors use sys2_ticks instead. */
+ if (i == 0) {
+ cpu0->user_ticks = pcli[i].cpu_ticks[CPU_STATE_USER];
+ cpu0->nice_ticks = pcli[i].cpu_ticks[CPU_STATE_NICE];
+ cpu0->sys_ticks = pcli[i].cpu_ticks[CPU_STATE_SYSTEM];
+ cpu0->idle_ticks = pcli[i].cpu_ticks[CPU_STATE_IDLE];
+ } else {
+ cpu0->user_ticks += pcli[i].cpu_ticks[CPU_STATE_USER];
+ cpu0->nice_ticks += pcli[i].cpu_ticks[CPU_STATE_NICE];
+ cpu0->sys_ticks += pcli[i].cpu_ticks[CPU_STATE_SYSTEM];
+ cpu0->idle_ticks += pcli[i].cpu_ticks[CPU_STATE_IDLE];
+ }
+ cpu = netsnmp_cpu_get_byIdx( i, 0 );
+ if (cpu == NULL) {
+ snmp_log(LOG_ERR, "forgot to create cpu #%d\n", i);
+ continue;
+ }
+ cpu->user_ticks = pcli[i].cpu_ticks[CPU_STATE_USER];
+ cpu->nice_ticks = pcli[i].cpu_ticks[CPU_STATE_NICE];
+ cpu->sys_ticks = pcli[i].cpu_ticks[CPU_STATE_SYSTEM];
+ cpu->idle_ticks = pcli[i].cpu_ticks[CPU_STATE_IDLE];
+ /* kern_ticks, intrpt_ticks, wait_ticks, sirq_ticks unused */
+ }
+ ret = vm_deallocate(mach_task_self(), (vm_address_t)pcli, nummsg * sizeof(int));
+ if (ret != KERN_SUCCESS) {
+ snmp_log(LOG_ERR, "vm_deallocate: %s - %s\n", mach_error_string(ret), strerror(errno));
+ }
+
+ /*
+ * Interrupt/Context Switch statistics
+ * XXX - Do these really belong here ?
+ */
+ /* Darwin doesn't keep paging stats per CPU. */
+ nummsg = HOST_VM_INFO_COUNT;
+ ret = host_statistics(host, HOST_VM_INFO, (host_info_t)&vmstat, &nummsg);
+ if (ret != KERN_SUCCESS) {
+ snmp_log(LOG_ERR, "HOST_VM_INFO: %s - %s\n", mach_error_string(ret), strerror(errno));
+ return 0;
+ }
+ cpu0->pageIn = vmstat.pageins;
+ cpu0->pageOut = vmstat.pageouts;
+ /* not implemented: swapIn, swapOut, nInterrupts, nCtxSwitches */
+}
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_mach.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_mach.h
new file mode 100644
index 0000000000..f3f408fd93
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_mach.h
@@ -0,0 +1,4 @@
+config_require(hardware/cpu/cpu)
+void init_cpu_mach( void );
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_nlist.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_nlist.c
new file mode 100644
index 0000000000..61ba75615e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_nlist.c
@@ -0,0 +1,109 @@
+/*
+ * nlist() interface
+ * e.g. FreeBSD
+ */
+#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/agent/hardware/cpu.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/resource.h>
+
+#ifdef HAVE_SYS_DKSTAT_H
+#include <sys/dkstat.h>
+#endif
+#ifdef HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif
+#ifdef HAVE_SYS_VMMETER_H
+#include <sys/vmmeter.h>
+#endif
+#ifdef HAVE_VM_VM_PARAM_H
+#include <vm/vm_param.h>
+#endif
+#ifdef HAVE_VM_VM_EXTERN_H
+#include <vm/vm_extern.h>
+#endif
+
+#define CPU_SYMBOL "cp_time"
+#define MEM_SYMBOL "cnt"
+
+void _cpu_copy_stats( netsnmp_cpu_info *cpu );
+
+ /*
+ * Initialise the list of CPUs on the system
+ * (including descriptions)
+ */
+void init_cpu_nlist( void ) {
+ int i, n;
+ int ncpu_mib[] = { CTL_HW, HW_NCPU };
+ int model_mib[] = { CTL_HW, HW_MODEL };
+ char descr[ SNMP_MAXBUF ];
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 1 );
+ strcpy(cpu->name, "Overall CPU statistics");
+
+ i = sizeof(n);
+ sysctl(ncpu_mib, 2, &n, &i, NULL, 0);
+ i = sizeof(descr);
+ sysctl(model_mib, 2, descr, &i, NULL, 0);
+
+ if ( n <= 0 )
+ n = 1; /* Single CPU system */
+ for ( i=0; i<n; i++ ) {
+ cpu = netsnmp_cpu_get_byIdx( i, 1 );
+ cpu->status = 2; /* running */
+ sprintf(cpu->name, "cpu%d", i);
+ sprintf(cpu->descr, "%s", descr);
+ }
+ cpu_num = n;
+}
+
+
+ /*
+ * Load the latest CPU usage statistics
+ */
+int netsnmp_cpu_arch_load( netsnmp_cache *cache, void *magic ) {
+ long cpu_stats[CPUSTATES];
+ struct vmmeter mem_stats;
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 0 );
+
+ auto_nlist( CPU_SYMBOL, (char *) cpu_stats, sizeof(cpu_stats));
+ auto_nlist( MEM_SYMBOL, (char *)&mem_stats, sizeof(mem_stats));
+
+ cpu->user_ticks = (unsigned long)cpu_stats[CP_USER];
+ cpu->nice_ticks = (unsigned long)cpu_stats[CP_NICE];
+ cpu->sys2_ticks = (unsigned long)cpu_stats[CP_SYS]+cpu_stats[CP_INTR];
+ cpu->idle_ticks = (unsigned long)cpu_stats[CP_IDLE];
+ cpu->kern_ticks = (unsigned long)cpu_stats[CP_SYS];
+ cpu->intrpt_ticks = (unsigned long)cpu_stats[CP_INTR];
+ /* wait_ticks, sirq_ticks unused */
+
+ /*
+ * Interrupt/Context Switch statistics
+ * XXX - Do these really belong here ?
+ */
+#if defined(openbsd2) || defined(darwin)
+ cpu->swapIn = (unsigned long)mem_stats.v_swpin;
+ cpu->swapOut = (unsigned long)mem_stats.v_swpout;
+#else
+ cpu->swapIn = (unsigned long)mem_stats.v_swappgsin+mem_stats.v_vnodepgsin;
+ cpu->swapOut = (unsigned long)mem_stats.v_swappgsout+mem_stats.v_vnodepgsout;
+#endif
+ cpu->nInterrupts = (unsigned long)mem_stats.v_intr;
+ cpu->nCtxSwitches = (unsigned long)mem_stats.v_swtch;
+
+#ifdef PER_CPU_INFO
+ for ( i = 0; i < n; i++ ) {
+ cpu = netsnmp_cpu_get_byIdx( i, 0 );
+ /* XXX - per-CPU statistics */
+ }
+#else
+ /* Copy "overall" figures to cpu0 entry */
+ _cpu_copy_stats( cpu );
+#endif
+
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_nlist.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_nlist.h
new file mode 100755
index 0000000000..d28ba6f58e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_nlist.h
@@ -0,0 +1,2 @@
+config_require(hardware/cpu/cpu)
+void init_cpu_nlist( void );
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_null.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_null.c
new file mode 100644
index 0000000000..3ec19383d3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_null.c
@@ -0,0 +1,38 @@
+/*
+ * dummy HAL CPU module
+ * for systems not using any of the supported interfaces
+ */
+#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/agent/hardware/cpu.h>
+
+ /*
+ * Initialise the HAL CPU system
+ * (including a basic description)
+ */
+void init_cpu_null( void ) {
+
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 1 );
+ strcpy(cpu->name, "Overall CPU statistics");
+ strcpy(cpu->descr, "An electronic chip that makes the computer work");
+ strcat(cpu->descr, " (but that's not important right now)");
+
+ cpu = netsnmp_cpu_get_byIdx( 0, 1 );
+ strcpy(cpu->name, "cpu0");
+ strcpy(cpu->descr, "An electronic chip that makes the computer work");
+ cpu->status = 2; /* running */
+
+ cpu_num = 1;
+}
+
+
+
+ /*
+ * We can't load the CPU usage statistics
+ * because we don't know how to do this!
+ */
+int netsnmp_cpu_arch_load( netsnmp_cache *cache, void *magic ) {
+
+ return 0; /* or -1 ? */
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_null.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_null.h
new file mode 100644
index 0000000000..3150358517
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_null.h
@@ -0,0 +1,2 @@
+config_require(hardware/cpu/cpu)
+void init_cpu_null(void);
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pcp.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pcp.c
new file mode 100644
index 0000000000..dcc2724e2c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pcp.c
@@ -0,0 +1,191 @@
+/*
+ * pcp interface
+ * e.g. IRIX
+ */
+#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/agent/hardware/cpu.h>
+
+#include <unistd.h>
+#include <pcp/pmapi.h>
+
+/*
+ * Performance Metrics Name Space Map
+ * Built by pmgenmap from the file irix_kernstats.pcp
+ */
+char *kernstats[] = {
+#define NCPU 0
+ "hinv.ncpu",
+#define CPUTYPE 1
+ "hinv.cputype",
+#define CPUIDLE 2
+ "kernel.all.cpu.idle",
+#define CPUINTR 3
+ "kernel.all.cpu.intr",
+#define CPUSYS 4
+ "kernel.all.cpu.sys",
+#define CPUUSER 5
+ "kernel.all.cpu.user",
+#define CPUWAIT 6
+ "kernel.all.cpu.wait.total",
+#define PAGESIN 7
+ "swap.pagesin",
+#define PAGESOUT 8
+ "swap.pagesout",
+#define SWAPIN 9
+ "swap.in",
+#define SWAPOUT 10
+ "swap.out",
+#define INTR 11
+ "kernel.all.intr.non_vme",
+#define CTXT 12
+ "kernel.all.kswitch"
+};
+
+# define MAX_MID 17
+
+pmResult *resp;
+pmID pmidlist[MAX_MID];
+int numpmid;
+int pmInitDone = 0;
+
+/* initialize pcp if necessary */
+void init_pcp () {
+ int err;
+
+ if (pmInitDone == 1) {
+ return;
+ }
+
+ snmp_log_perror("Initializing pcp");
+ numpmid = sizeof(kernstats)/sizeof(kernstats[0]);
+
+ /* Load default namespace */
+ if ((err=pmLoadNameSpace(PM_NS_DEFAULT)) < 0) {
+ snmp_log_perror("pmLoadNameSpace returned an error.");
+ snmp_log_perror(pmErrStr(err));
+ exit (1);
+ }
+
+ /* get mappings between internal IDs and external IDs */
+ if ((err=pmLookupName(numpmid, kernstats, pmidlist)) < 0) {
+ snmp_log_perror("pmLookupName returned an error.");
+ snmp_log_perror(pmErrStr(err));
+ exit (1);
+ }
+
+ /* specify a context to use */
+ /* a type of PM_CONTEXT_HOST lets you specify a hostname */
+ /* a type of PM_CONTEXT_LOCAL should ignore the string param */
+ if ((err=pmNewContext(PM_CONTEXT_LOCAL,"localhost")) < 0) {
+ snmp_log_perror("pmNewContext returned error opening a LOCAL Context");
+ snmp_log_perror(pmErrStr(err));
+
+ if ((err=pmNewContext(PM_CONTEXT_HOST,"localhost")) < 0) {
+ snmp_log_perror("pmNewContext returned error opening a HOST Context");
+ snmp_log_perror(pmErrStr(err));
+ exit(1);
+ }
+ }
+ snmp_log_perror ("done initializing pcp");
+ pmInitDone = 1;
+}
+
+ /*
+ * Initialise the list of CPUs on the system
+ * (including descriptions)
+ */
+void init_cpu_pcp( void ) {
+ int i, n = 0;
+ char tstr[1024];
+ int err;
+ netsnmp_cpu_info *cpu;
+
+ init_pcp();
+
+ /* At this stage, pmidlist contains the PMID for my metrics of interest */
+
+ cpu = netsnmp_cpu_get_byIdx( -1, 1 );
+ strcpy(cpu->name, "Overall CPU statistics");
+
+ if ((err=pmFetch(numpmid, pmidlist, &resp)) < 0) {
+ snmp_log_perror ("init_cpu_pcp: pmFetch returned error");
+ snmp_log_perror (pmErrStr(err));
+ exit (1);
+ }
+ cpu_num = resp->vset[NCPU]->vlist[0].value.lval;
+ pmFreeResult(resp);
+
+ for (i=0; i<cpu_num ; i++) {
+ cpu = netsnmp_cpu_get_byIdx( i, 1 );
+ sprintf(tstr, "cpu%d",i);
+ strcpy(cpu->name, tstr);
+ strcpy(cpu->descr, "An electronic chip that makes the computer work");
+ }
+}
+
+/*void _cpu_load_swap_etc( char *buff, netsnmp_cpu_info *cpu );*/
+
+ /*
+ * Load the latest CPU usage statistics
+ */
+int netsnmp_cpu_arch_load( netsnmp_cache *cache, void *magic ) {
+ int err;
+ /*static char *buff = NULL;*/
+ static int first = 1;
+ netsnmp_cpu_info* cpu;
+
+ init_pcp();
+
+ /*
+ * CPU statistics (overall and per-CPU)
+ */
+ if ((err=pmFetch(numpmid, pmidlist, &resp)) < 0) {
+ snmp_log_perror ("netsnmp_cpu_arch_load: pmFetch returned an error.");
+ snmp_log_perror (pmErrStr(err));
+ exit (1);
+ }
+
+ cpu = netsnmp_cpu_get_byIdx( -1, 0 );
+ if (!cpu) {
+ snmp_log_perror ("netsnmp_cpu_arch_load: netsnmp_cpu_get_byIdx failed!");
+ exit(1);
+ }
+
+ cpu->wait_ticks = (unsigned long)resp->vset[CPUWAIT]->vlist[0].value.lval / 10;
+ cpu->intrpt_ticks = (unsigned long)resp->vset[CPUINTR]->vlist[0].value.lval / 10;
+ /*cpu->sirq_ticks = (unsigned long)csoftll / 10;*/
+ cpu->user_ticks = (unsigned long)resp->vset[CPUUSER]->vlist[0].value.lval / 10;
+ /*cpu->nice_ticks = (unsigned long)cicell / 10;*/
+ cpu->sys_ticks = (unsigned long)resp->vset[CPUSYS]->vlist[0].value.lval / 10;
+ cpu->idle_ticks = (unsigned long)resp->vset[CPUIDLE]->vlist[0].value.lval / 10;
+
+
+ /*
+ * Interrupt/Context Switch statistics
+ * XXX - Do these really belong here ?
+ */
+ /*cpu = netsnmp_cpu_get_byIdx( -1, 0 );*/
+ /*_cpu_load_swap_etc( buff, cpu );*/
+ cpu->pageIn = (unsigned long)resp->vset[PAGESIN]->vlist[0].value.lval;
+ cpu->pageOut = (unsigned long)resp->vset[PAGESOUT]->vlist[0].value.lval;
+ cpu->swapIn = (unsigned long)resp->vset[SWAPIN]->vlist[0].value.lval;
+ cpu->swapOut = (unsigned long)resp->vset[SWAPOUT]->vlist[0].value.lval;
+ cpu->nInterrupts = (unsigned long)resp->vset[INTR]->vlist[0].value.lval;
+ cpu->nCtxSwitches = (unsigned long)resp->vset[CTXT]->vlist[0].value.lval;
+
+ /*
+ * XXX - TODO: extract per-CPU statistics
+ * (Into separate netsnmp_cpu_info data structures)
+ */
+
+ /* free pcp response */
+ pmFreeResult(resp);
+
+ first = 0;
+ return 0;
+}
+
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pcp.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pcp.h
new file mode 100644
index 0000000000..ddb7547bfd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pcp.h
@@ -0,0 +1,2 @@
+config_require(hardware/cpu/cpu)
+void init_cpu_pcp(void);
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_perfstat.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_perfstat.c
new file mode 100644
index 0000000000..c15fa2f77c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_perfstat.c
@@ -0,0 +1,107 @@
+/*
+ * perfstat() interface
+ * e.g. AIX
+ */
+#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/agent/hardware/cpu.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+#include <libperfstat.h>
+
+void _cpu_copy_stats( netsnmp_cpu_info *cpu );
+
+ /*
+ * Initialise the list of CPUs on the system
+ * (including descriptions)
+ */
+void init_cpu_perfstat( void ) {
+ int i;
+ perfstat_id_t name;
+ perfstat_cpu_t *cs2;
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 1 );
+ strcpy(cpu->name, "Overall CPU statistics");
+
+ cpu_num = perfstat_cpu( NULL, NULL, sizeof(perfstat_cpu_t), 0 );
+ cs2 = malloc( cpu_num*sizeof(perfstat_cpu_t));
+
+ strcpy( name.name, "");
+ if (perfstat_cpu(&name, cs2, sizeof(perfstat_cpu_t), cpu_num) > 0) {
+ for ( i = 0; i < cpu_num; i++ ) {
+ cpu = netsnmp_cpu_get_byIdx( i, 1 );
+ sprintf( cpu->name, cs2[i].name);
+ }
+ }
+ free(cs2);
+}
+
+
+ /*
+ * Load the latest CPU usage statistics
+ */
+int netsnmp_cpu_arch_load( netsnmp_cache *cache, void *magic ) {
+ int i,n;
+ perfstat_id_t name;
+ perfstat_cpu_total_t cs;
+ perfstat_cpu_t *cs2;
+ perfstat_memory_total_t ms;
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 0 );
+
+ if (perfstat_cpu_total((perfstat_id_t *)NULL, &cs,
+ sizeof(perfstat_cpu_total_t), 1) > 0) {
+
+ /* Returns 'u_longlong_t' statistics */
+ cpu->user_ticks = (unsigned long)cs.user / cs.ncpus;
+ cpu->sys_ticks = ((unsigned long)cs.sys + (unsigned long)cs.wait) / cs.ncpus;
+ cpu->kern_ticks = (unsigned long)cs.sys / cs.ncpus;
+ cpu->wait_ticks = (unsigned long)cs.wait / cs.ncpus;
+ cpu->idle_ticks = (unsigned long)cs.idle / cs.ncpus;
+ /* intrpt_ticks, sirq_ticks, nice_ticks unused */
+
+ /*
+ * Interrupt/Context Switch statistics
+ * XXX - Do these really belong here ?
+ */
+ cpu->pageIn = (unsigned long)cs.sysread;
+ cpu->pageOut = (unsigned long)cs.syswrite;
+ cpu->nInterrupts = (unsigned long)cs.devintrs + cs.softintrs;
+ cpu->nCtxSwitches = (unsigned long)cs.pswitch;
+ }
+
+ if (perfstat_memory_total((perfstat_id_t *)NULL, &ms,
+ sizeof(perfstat_memory_total_t), 1) > 0) {
+ cpu->swapIn = (unsigned long)ms.pgspins;
+ cpu->swapOut = (unsigned long)ms.pgspouts;
+ }
+
+
+ /*
+ * Per-CPU statistics
+ */
+ n = cs.ncpus; /* XXX - Compare against cpu_num */
+ cs2 = malloc( n*sizeof(perfstat_cpu_t));
+ strcpy( name.name, "");
+ if (perfstat_cpu(&name, cs2, sizeof(perfstat_cpu_t), n) > 0) {
+ for ( i = 0; i < n; i++ ) {
+ cpu = netsnmp_cpu_get_byIdx( i, 0 );
+ cpu->user_ticks = (unsigned long)cs2[i].user;
+ cpu->sys_ticks = (unsigned long)cs2[i].sys + (unsigned long)cs2[i].wait;
+ cpu->kern_ticks = (unsigned long)cs2[i].sys;
+ cpu->wait_ticks = (unsigned long)cs2[i].wait;
+ cpu->idle_ticks = (unsigned long)cs2[i].idle;
+ cpu->pageIn = (unsigned long)cs2[i].sysread;
+ cpu->pageOut = (unsigned long)cs2[i].syswrite;
+ cpu->nCtxSwitches = (unsigned long)cs2[i].pswitch;
+ /* Interrupt stats only apply overall, not per-CPU */
+ }
+ } else {
+ _cpu_copy_stats( cpu );
+ }
+ free(cs2);
+
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_perfstat.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_perfstat.h
new file mode 100755
index 0000000000..8b8b62cf9b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_perfstat.h
@@ -0,0 +1,2 @@
+config_require(hardware/cpu/cpu)
+void init_cpu_perfstat(void);
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pstat.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pstat.c
new file mode 100644
index 0000000000..c68739b402
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pstat.c
@@ -0,0 +1,109 @@
+/*
+ * pstat() interface
+ * e.g. HP-UX
+ */
+#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/agent/hardware/cpu.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+#include <sys/pstat.h>
+#include <sys/dk.h>
+
+
+ /*
+ * Initialise the list of CPUs on the system
+ * (including descriptions)
+ */
+void init_cpu_pstat( void ) {
+ int i, cpuversion;
+ struct pst_dynamic psd;
+ char descr[ SNMP_MAXBUF ];
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 1 );
+ strcpy(cpu->name, "Overall CPU statistics");
+
+#ifdef _SC_CPU_VERSION
+ cpuversion = sysconf( _SC_CPU_VERSION );
+ switch (cpuversion) {
+ case CPU_HP_MC68020:
+ snprintf(descr, SNMP_MAXBUF, " Motorola MC68020 ");
+ case CPU_HP_MC68030:
+ snprintf(descr, SNMP_MAXBUF, " Motorola MC68030 ");
+ case CPU_HP_MC68040:
+ snprintf(descr, SNMP_MAXBUF, " Motorola MC68040 ");
+ case CPU_PA_RISC1_0:
+ snprintf(descr, SNMP_MAXBUF, " HP PA-RISC 1.0 ");
+ case CPU_PA_RISC1_1:
+ snprintf(descr, SNMP_MAXBUF, " HP PA-RISC 1.1 ");
+ case CPU_PA_RISC1_2:
+ snprintf(descr, SNMP_MAXBUF, " HP PA-RISC 1.2 ");
+ case CPU_PA_RISC2_0:
+ snprintf(descr, SNMP_MAXBUF, " HP PA-RISC 2.0 ");
+ default:
+ snprintf(descr, SNMP_MAXBUF, "An electronic chip with an HP label");
+ }
+#else
+ snprintf(descr, SNMP_MAXBUF, "An electronic chip without(?) an HP label");
+#endif
+
+ if (pstat_getdynamic(&psd, sizeof(psd), 1, 0) > 0) {
+ for ( i = 0; i < psd.psd_proc_cnt; i++ ) {
+ cpu = netsnmp_cpu_get_byIdx( i, 1 );
+ sprintf( cpu->name, "cpu%d", i );
+ sprintf( cpu->descr, descr );
+ }
+ }
+ cpu_num = psd.psd_proc_cnt;
+}
+
+
+ /*
+ * Load the latest CPU usage statistics
+ */
+int netsnmp_cpu_arch_load( netsnmp_cache *cache, void *magic ) {
+ int i;
+ struct pst_dynamic psd;
+ struct pst_vminfo psv;
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 0 );
+
+ pstat_getdynamic(&psd, sizeof(psd), 1, 0);
+ /* XXX - Compare cpu_num against psd.psd_proc_cnt */
+ cpu->user_ticks = (unsigned long)psd.psd_cpu_time[CP_USER];
+ cpu->nice_ticks = (unsigned long)psd.psd_cpu_time[CP_NICE];
+ cpu->sys2_ticks = (unsigned long)psd.psd_cpu_time[CP_SYS]+
+ psd.psd_cpu_time[CP_WAIT];
+ cpu->idle_ticks = (unsigned long)psd.psd_cpu_time[CP_IDLE];
+ cpu->wait_ticks = (unsigned long)psd.psd_cpu_time[CP_WAIT];
+ cpu->kern_ticks = (unsigned long)psd.psd_cpu_time[CP_SYS];
+ /* XXX - record (sum of) "all other ticks" */
+ /* intrpt_ticks, sirq_ticks unused */
+
+ /*
+ * Interrupt/Context Switch statistics
+ * XXX - Do these really belong here ?
+ */
+ pstat_getvminfo(&psv, sizeof(psv), 1, 0);
+ cpu->swapIn = (unsigned long)psv.psv_sswpin;
+ cpu->swapOut = (unsigned long)psv.psv_sswpout;
+ cpu->nInterrupts = (unsigned long)psv.psv_sintr;
+ cpu->nCtxSwitches = (unsigned long)psv.psv_sswtch;
+
+
+ for ( i = 0; i < psd.psd_proc_cnt; i++ ) {
+ cpu = netsnmp_cpu_get_byIdx( i, 0 );
+ cpu->user_ticks = (unsigned long)psd.psd_mp_cpu_time[i][CP_USER];
+ cpu->nice_ticks = (unsigned long)psd.psd_mp_cpu_time[i][CP_NICE];
+ cpu->sys2_ticks = (unsigned long)psd.psd_mp_cpu_time[i][CP_SYS]+
+ psd.psd_mp_cpu_time[i][CP_WAIT];
+ cpu->idle_ticks = (unsigned long)psd.psd_mp_cpu_time[i][CP_IDLE];
+ cpu->wait_ticks = (unsigned long)psd.psd_mp_cpu_time[i][CP_WAIT];
+ cpu->kern_ticks = (unsigned long)psd.psd_mp_cpu_time[i][CP_SYS];
+ /* XXX - record (sum of) "all other ticks" */
+ }
+
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pstat.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pstat.h
new file mode 100755
index 0000000000..2353f68bd6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_pstat.h
@@ -0,0 +1,2 @@
+config_require(hardware/cpu/cpu)
+void init_cpu_pstat(void);
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysctl.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysctl.c
new file mode 100644
index 0000000000..0b18b5451a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysctl.c
@@ -0,0 +1,205 @@
+/*
+ * sysctl() interface
+ * e.g. BSD/OS, NetBSD, OpenBSD, later Darwin releases
+ */
+#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/agent/hardware/cpu.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+#if defined(__FreeBSD__)
+#include <sys/resource.h>
+#if !defined(CPUSTATES)
+#include <sys/dkstat.h>
+#endif
+#else
+#include <sys/sched.h>
+#endif
+
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/vmmeter.h>
+#ifdef HAVE_VM_VM_PARAM_H
+#include <vm/vm_param.h>
+#endif
+#ifdef HAVE_VM_VM_EXTERN_H
+#include <vm/vm_extern.h>
+#endif
+
+void _cpu_copy_stats( netsnmp_cpu_info *cpu );
+
+ /*
+ * Initialise the list of CPUs on the system
+ * (including descriptions)
+ */
+void init_cpu_sysctl( void ) {
+ int i, n;
+ int ncpu_mib[] = { CTL_HW, HW_NCPU };
+ int model_mib[] = { CTL_HW, HW_MODEL };
+ char descr[ SNMP_MAXBUF ];
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 1 );
+ strcpy(cpu->name, "Overall CPU statistics");
+
+ i = sizeof(n);
+ sysctl(ncpu_mib, 2, &n, (void *)&i, NULL, 0);
+ if ( n <= 0 )
+ n = 1; /* Single CPU system */
+ i = sizeof(descr);
+ sysctl(model_mib, 2, descr, (void *)&i, NULL, 0);
+ for ( i = 0; i < n; i++ ) {
+ cpu = netsnmp_cpu_get_byIdx( i, 1 );
+ cpu->status = 2; /* running */
+ sprintf( cpu->name, "cpu%d", i );
+ sprintf( cpu->descr, "%s", descr );
+ }
+ cpu_num = n;
+}
+
+
+#define NETSNMP_CPU_STATS long
+#if defined(KERN_CPUSTATS) /* BSDi */
+#define NETSNMP_KERN_CPU KERN_CPUSTATS
+#elif defined(KERN_CPTIME) /* OpenBSD */
+#define NETSNMP_KERN_CPU KERN_CPTIME
+#elif defined(KERN_CP_TIME) /* NetBSD */
+#define NETSNMP_KERN_CPU KERN_CP_TIME
+
+#if defined(netbsdelf3)
+#undef NETSNMP_CPU_STATS
+#define NETSNMP_CPU_STATS uint64_t
+#endif
+
+#elif defined(__FreeBSD__)
+#define NETSNMP_KERN_CPU 0 /* dummy value - sysctlnametomib(2) should be used */
+
+#else
+#error "No CPU statistics sysctl token"
+#endif
+
+/*
+ Need to check details before enabling this!
+#if defined(KERN_MPCPUSTATS)
+#define NETSNMP_KERN_MCPU KERN_MPCPUSTATS
+#define NETSNMP_KERN_MCPU_TYPE struct mpcpustats
+#elif defined(KERN_MP_CPUSTATS)
+#define NETSNMP_KERN_MCPU KERN_MP_CPUSTATS
+#define NETSNMP_KERN_MCPU_TYPE struct cpustats
+#endif
+ */
+
+#if defined(VM_UVMEXP2) || defined(VM_UVMEXP)
+ #define NS_VM_INTR intrs
+ #define NS_VM_SWTCH swtch
+ #define NS_VM_PAGEIN pageins
+ #define NS_VM_PAGEOUT pdpageouts
+ #define NS_VM_SWAPIN swapins
+ #define NS_VM_SWAPOUT swapouts
+
+#if defined(VM_UVMEXP2) /* NetBSD 1.6+ */
+#define NETSNMP_VM_STATS VM_UVMEXP2
+#define NETSNMP_VM_STATS_TYPE struct uvmexp_sysctl
+#else /* VM_UVMEXP */ /* OpenBSD 3+, NetBSD 1.6+ */
+#define NETSNMP_VM_STATS VM_UVMEXP
+#define NETSNMP_VM_STATS_TYPE struct uvmexp
+#endif /* VM_UVMEXP2 || VM_UVMEXP */
+
+#elif defined(__FreeBSD__) /* FreeBSD */
+#define NETSNMP_VM_STATS VM_METER
+#define NETSNMP_VM_STATS_TYPE struct vmmeter
+ #define NS_VM_INTR v_intr
+ #define NS_VM_SWTCH v_swtch
+ #define NS_VM_PAGEIN v_swappgsin
+ #define NS_VM_PAGEOUT v_swappgsout
+ #define NS_VM_SWAPIN v_swapin
+ #define NS_VM_SWAPOUT v_swapout
+
+#elif defined(VM_METER) /* OpenBSD, NetBSD */
+#define NETSNMP_VM_STATS VM_METER
+#define NETSNMP_VM_STATS_TYPE struct vmtotal
+
+#elif defined(VM_CNT) /* BSDi */
+#define NETSNMP_VM_STATS VM_CNT
+#define NETSNMP_VM_STATS_TYPE struct vmmeter
+ #define NS_VM_INTR v_intr
+ #define NS_VM_SWTCH v_swtch
+ #undef NS_VM_PAGEIN
+ #undef NS_VM_PAGEOUT
+ #define NS_VM_SWAPIN v_swpin
+ #define NS_VM_SWAPOUT v_swpout
+#endif
+
+
+ /*
+ * Load the latest CPU usage statistics
+ */
+int netsnmp_cpu_arch_load( netsnmp_cache *cache, void *magic ) {
+ int i;
+
+ /*
+ * Strictly speaking, BSDi ought to use
+ * "struct cpustats cpu_stats"
+ * but this array was used in the previous code, and
+ * is correct for the {Open,Net}BSD versions too.
+ * Don't fight it, Dave - go with the flow....
+ */
+ NETSNMP_CPU_STATS cpu_stats[CPUSTATES];
+ int cpu_mib[] = { CTL_KERN, NETSNMP_KERN_CPU };
+ size_t cpu_size = sizeof(cpu_stats);
+#ifdef NETSNMP_KERN_MCPU
+ NETSNMP_KERN_MCPU_TYPE *mcpu_stats;
+ int mcpu_mib[] = { CTL_KERN, NETSNMP_KERN_MCPU };
+ size_t mcpu_size = sizeof(NETSNMP_KERN_MCPU_TYPE);
+#endif
+ NETSNMP_VM_STATS_TYPE mem_stats;
+ int mem_mib[] = { CTL_VM, NETSNMP_VM_STATS };
+ size_t mem_size = sizeof(NETSNMP_VM_STATS_TYPE);
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( -1, 0 );
+
+#if defined(__FreeBSD__)
+ sysctlbyname("kern.cp_time", cpu_stats, &cpu_size, NULL, 0);
+#else
+ sysctl(cpu_mib, 2, cpu_stats, &cpu_size, NULL, 0);
+#endif
+ cpu->user_ticks = (unsigned long)cpu_stats[CP_USER];
+ cpu->nice_ticks = (unsigned long)cpu_stats[CP_NICE];
+ cpu->sys2_ticks = (unsigned long)cpu_stats[CP_SYS]+cpu_stats[CP_INTR];
+ cpu->kern_ticks = (unsigned long)cpu_stats[CP_SYS];
+ cpu->idle_ticks = (unsigned long)cpu_stats[CP_IDLE];
+ cpu->intrpt_ticks = (unsigned long)cpu_stats[CP_INTR];
+ /* wait_ticks, sirq_ticks unused */
+
+ /*
+ * Interrupt/Context Switch statistics
+ * XXX - Do these really belong here ?
+ */
+ sysctl(mem_mib, 2, &mem_stats, &mem_size, NULL, 0);
+ cpu->nInterrupts = (unsigned long)mem_stats.NS_VM_INTR;
+ cpu->nCtxSwitches = (unsigned long)mem_stats.NS_VM_SWTCH;
+ cpu->swapIn = (unsigned long)mem_stats.NS_VM_SWAPIN;
+ cpu->swapOut = (unsigned long)mem_stats.NS_VM_SWAPOUT;
+#ifdef NS_VM_PAGEIN
+ cpu->pageIn = (unsigned long)mem_stats.NS_VM_PAGEIN;
+#endif
+#ifdef NS_VM_PAGEOUT
+ cpu->pageOut = (unsigned long)mem_stats.NS_VM_PAGEOUT;
+#endif
+
+#ifdef NETSNMP_KERN_MCPU
+ mcpu_stats = malloc(cpu_num*sizeof(NETSNMP_KERN_MCPU_TYPE));
+ sysctl(mcpu_mib, 2, mcpu_stats,
+ cpu_num*sizeof(NETSNMP_KERN_MCPU_TYPE), NULL, 0);
+ for ( i = 0; i < cpu_num; i++ ) {
+ cpu = netsnmp_cpu_get_byIdx( i, 0 );
+ /* XXX - per-CPU statistics - mcpu_mib[i].??? */
+ }
+#else
+ /* Copy "overall" figures to cpu0 entry */
+ _cpu_copy_stats( cpu );
+#endif
+
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysctl.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysctl.h
new file mode 100755
index 0000000000..f37b907aef
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysctl.h
@@ -0,0 +1,2 @@
+config_require(hardware/cpu/cpu)
+void init_cpu_sysctl(void);
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysinfo.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysinfo.c
new file mode 100644
index 0000000000..d510308e24
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysinfo.c
@@ -0,0 +1,132 @@
+/*
+ * sysinfo (sysget/sysmp) interface
+ * e.g. IRIX 6.x
+ */
+#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/agent/hardware/cpu.h>
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/sysmp.h>
+#include <sys/sysinfo.h>
+#include <sys/sysget.h>
+
+int cpu_count;
+int sinfo_ksize;
+struct sysinfo* sinfo_cpus; /* individual cpu stats */
+struct sysinfo* sinfo_gen; /* global stats */
+
+/*
+* Initialise the list of CPUs on the system
+* (including descriptions)
+*/
+void init_cpu_sysinfo( void )
+{
+ int i;
+ netsnmp_cpu_info *cpu;
+ char tstr[1024];
+
+ cpu_count = sysmp(MP_NPROCS);
+
+ /* fetch struct sysinfo size in kernel */
+
+ if ((sinfo_ksize = sysmp(MP_SASZ, MPSA_SINFO)) < 0) {
+ snmp_log_perror("init_cpu_sysinfo: sysinfo scall interface not supported");
+ exit(1);
+ }
+
+ if (sizeof(struct sysinfo) != sinfo_ksize)
+ {
+ snmp_log_perror("init_cpu_sysinfo: size mismatch between userland and kernel sysinfo struct");
+ exit(1);
+ }
+
+ /* allocate sysinfo for all cpus + global stats */
+
+ sinfo_cpus = (struct sysinfo *) calloc(cpu_count, sinfo_ksize);
+ if (!sinfo_cpus) {
+ snmp_log_perror("init_cpu_sysinfo: Couldn't allocate memory bytes for sinfo_cpus");
+ exit(1);
+ }
+
+ sinfo_gen = (struct sysinfo *) calloc(1, sinfo_ksize);
+ if (!sinfo_gen) {
+ snmp_log_perror("init_cpu_sysinfo: Couldn't allocate memory bytes for sinfo_gen");
+ exit(1);
+ }
+
+ /* register cpus */
+
+ cpu = netsnmp_cpu_get_byIdx(-1, 1);
+ strcpy(cpu->name, "Overall CPU statistics");
+
+ for (i = 0; i < cpu_count ; ++i)
+ {
+ cpu = netsnmp_cpu_get_byIdx(i, 1);
+ sprintf(tstr, "cpu%d",i);
+ strcpy(cpu->name, tstr);
+ strcpy(cpu->descr, "Central Processing Unit");
+ }
+}
+
+/*
+* Load the latest CPU usage statistics
+*/
+int netsnmp_cpu_arch_load( netsnmp_cache *cache, void *magic )
+{
+ int i;
+ netsnmp_cpu_info* cpu;
+ sgt_cookie_t ck;
+
+ /* fetch global stats */
+
+ cpu = netsnmp_cpu_get_byIdx(-1, 0);
+
+ if (sysmp(MP_SAGET, MPSA_SINFO, (char *) sinfo_gen, sinfo_ksize) < 0)
+ {
+ snmp_log_perror("netsnmp_cpu_arch_load: sysmp() failed");
+ exit(1);
+ }
+
+ DEBUGMSGTL(("cpu_sysinfo", "total cpu kernel: %lu\n", sinfo_gen->cpu[CPU_KERNEL]));
+ cpu->sys2_ticks = (unsigned long) sinfo_gen->cpu[CPU_KERNEL] + (unsigned long) sinfo_gen->cpu[CPU_SXBRK] + (unsigned long) sinfo_gen->cpu[CPU_INTR];
+ cpu->kern_ticks = (unsigned long) sinfo_gen->cpu[CPU_KERNEL];
+ cpu->intrpt_ticks = (unsigned long) sinfo_gen->cpu[CPU_INTR];
+ cpu->user_ticks = (unsigned long) sinfo_gen->cpu[CPU_USER];
+ cpu->wait_ticks = (unsigned long) sinfo_gen->cpu[CPU_WAIT];
+ cpu->idle_ticks = (unsigned long) sinfo_gen->cpu[CPU_IDLE];
+
+ /* XXX - Do these really belong here ? */
+ cpu->pageIn = (unsigned long)0;
+ cpu->pageOut = (unsigned long)0;
+ cpu->swapIn = (unsigned long)sinfo_gen->swapin;
+ cpu->swapOut = (unsigned long)sinfo_gen->swapout;
+ cpu->nInterrupts = (unsigned long)sinfo_gen->intr_svcd;
+ cpu->nCtxSwitches = (unsigned long)sinfo_gen->pswitch;
+
+ /* fetch individual cpu stats */
+
+ SGT_COOKIE_INIT(&ck);
+ if (sysget(MPSA_SINFO, (char *) sinfo_cpus, sinfo_ksize * cpu_count, SGT_READ | SGT_CPUS | SGT_SUM, &ck) < 0)
+ {
+ snmp_log_perror("netsnmp_cpu_arch_load: sysget() failed");
+ exit(1);
+ }
+
+ for (i = 0; i < cpu_count ; ++i)
+ {
+ cpu = netsnmp_cpu_get_byIdx(i, 0);
+
+ DEBUGMSGTL(("cpu_sysinfo", "cpu %u kernel: %lu\n", i, sinfo_cpus[i].cpu[CPU_KERNEL]));
+ cpu->sys2_ticks = (unsigned long)sinfo_cpus[i].cpu[CPU_KERNEL] + (unsigned long) sinfo_cpus[i].cpu[CPU_SXBRK] + (unsigned long)sinfo_cpus[i].cpu[CPU_INTR];
+ cpu->intrpt_ticks = (unsigned long)sinfo_cpus[i].cpu[CPU_INTR];
+ cpu->user_ticks = (unsigned long)sinfo_cpus[i].cpu[CPU_USER];
+ cpu->wait_ticks = (unsigned long)sinfo_cpus[i].cpu[CPU_WAIT];
+ cpu->idle_ticks = (unsigned long)sinfo_cpus[i].cpu[CPU_IDLE];
+ }
+
+ return 0;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysinfo.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysinfo.h
new file mode 100644
index 0000000000..36c6e13a54
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/cpu/cpu_sysinfo.h
@@ -0,0 +1,2 @@
+config_require(hardware/cpu/cpu)
+void init_cpu_sysinfo(void);
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory.h
new file mode 100644
index 0000000000..fd1e36a90b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory.h
@@ -0,0 +1,32 @@
+config_require(hardware/memory/hw_mem)
+
+#if defined(linux)
+config_require(hardware/memory/memory_linux)
+
+#elif (defined(darwin7) || defined(darwin8) || defined(darwin9))
+config_require(hardware/memory/memory_darwin)
+
+#elif (defined(freebsd2) || defined(freebsd3) || defined(freebsd4) || defined(freebsd5)|| defined(freebsd6))
+config_require(hardware/memory/memory_freebsd)
+
+#elif (defined(netbsd) || defined(netbsd1) || defined(netbsdelf) || defined(netbsdelf2)|| defined(netbsdelf3) || defined(openbsd2) || defined(openbsd3) || defined(openbsd4))
+config_require(hardware/memory/memory_netbsd)
+
+#elif (defined(aix4) || defined(aix5) || defined(aix6))
+config_require(hardware/memory/memory_aix)
+
+#elif (defined(solaris2))
+config_require(hardware/memory/memory_solaris)
+
+#elif (defined(irix6))
+config_require(hardware/memory/memory_irix)
+
+#elif (defined(dynix))
+config_require(hardware/memory/memory_dynix)
+
+#elif (defined(hpux10) || defined(hpux11))
+config_require(hardware/memory/memory_hpux)
+
+#else
+config_require(hardware/memory/memory_null)
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/hw_mem.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/hw_mem.c
new file mode 100644
index 0000000000..d027218e56
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/hw_mem.c
@@ -0,0 +1,94 @@
+#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/agent/hardware/memory.h>
+
+extern NetsnmpCacheLoad netsnmp_mem_arch_load;
+
+netsnmp_memory_info *_mem_head = NULL;
+netsnmp_cache *_mem_cache = NULL;
+
+void init_hw_mem( void ) {
+ _mem_cache = netsnmp_cache_create( 5, netsnmp_mem_arch_load, NULL, NULL, 0);
+}
+
+
+
+netsnmp_memory_info *netsnmp_memory_get_first( int type ) {
+ netsnmp_memory_info *mem;
+
+ for ( mem=_mem_head; mem; mem=mem->next )
+ if (mem->type == type) /* Or treat as bits? */
+ return mem;
+ return NULL;
+}
+
+netsnmp_memory_info *netsnmp_memory_get_next( netsnmp_memory_info *this_ptr, int type ) {
+ netsnmp_memory_info *mem;
+
+ if (this_ptr)
+ for ( mem=this_ptr->next; mem; mem=mem->next )
+ if (mem->type == type) /* Or treat as bits? */
+ return mem;
+ return NULL;
+}
+
+ /*
+ * Work with a list of Memory entries, indexed numerically
+ */
+netsnmp_memory_info *netsnmp_memory_get_byIdx( int idx, int create ) {
+ netsnmp_memory_info *mem, *mem2;
+
+ /*
+ * Find the specified Memory entry
+ */
+ for ( mem=_mem_head; mem; mem=mem->next ) {
+ if ( mem->idx == idx )
+ return mem;
+ }
+ if (!create)
+ return NULL;
+
+ /*
+ * Create a new memory entry, and insert it into the list....
+ */
+ mem = SNMP_MALLOC_TYPEDEF( netsnmp_memory_info );
+ if (!mem)
+ return NULL;
+ mem->idx = idx;
+ /* ... either as the first (or only) entry.... */
+ if ( !_mem_head || _mem_head->idx > idx ) {
+ mem->next = _mem_head;
+ _mem_head = mem;
+ return mem;
+ }
+ /* ... or in the appropriate position */
+ for ( mem2=_mem_head; mem2; mem2=mem2->next ) {
+ if ( !mem2->next || mem2->next->idx > idx ) {
+ mem->next = mem2->next;
+ mem2->next = mem;
+ return mem;
+ }
+ }
+ SNMP_FREE(mem);
+ return NULL; /* Shouldn't happen! */
+}
+
+netsnmp_memory_info *netsnmp_memory_get_next_byIdx( int idx, int type ) {
+ netsnmp_memory_info *mem;
+
+ for ( mem=_mem_head; mem; mem=mem->next )
+ if (mem->type == type && mem->idx > idx) /* Or treat as bits? */
+ return mem;
+ return NULL;
+}
+
+
+
+netsnmp_cache *netsnmp_memory_get_cache( void ) {
+ return _mem_cache;
+}
+
+int netsnmp_memory_load( void ) {
+ return netsnmp_cache_check_and_reload( _mem_cache );
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/hw_mem.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/hw_mem.h
new file mode 100644
index 0000000000..12fd90b41c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/hw_mem.h
@@ -0,0 +1 @@
+void init_hw_mem(void);
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_aix.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_aix.c
new file mode 100644
index 0000000000..2519dd96d3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_aix.c
@@ -0,0 +1,80 @@
+#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/agent/hardware/memory.h>
+
+#include <unistd.h>
+#include <libperfstat.h>
+#include <sys/stat.h>
+
+
+ /*
+ * Load the latest memory usage statistics
+ */
+int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
+
+ netsnmp_memory_info *mem;
+ perfstat_memory_total_t pstat_mem;
+ long pagesize;
+
+ /*
+ * Retrieve the memory information from the underlying O/S...
+ */
+ if (perfstat_memory_total((perfstat_id_t *)NULL, &pstat_mem,
+ sizeof(perfstat_memory_total_t), 1) < 1) {
+ snmp_log(LOG_ERR, "memory_aix: perfstat_memory_total failed!\n");
+ return -1;
+ }
+ pagesize = getpagesize();
+
+ /*
+ * ... and save this in a standard form.
+ */
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Physical Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Physical memory");
+ mem->units = pagesize; /* or 4096 */
+ mem->size = pstat_mem.real_total;
+ mem->free = pstat_mem.real_free;
+ }
+
+ /* ??? Duplicates Physical Memory statistics? */
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_USERMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No (user) Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Real memory");
+ mem->units = pagesize; /* or 4096 */
+ mem->size = pstat_mem.real_total; /* ? less system memory ? */
+ mem->free = pstat_mem.real_free;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_VIRTMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Virtual Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Virtual memory");
+ mem->units = pagesize; /* or 4096 */
+ mem->size = pstat_mem.virt_total;
+ mem->free = pstat_mem.real_free + pstat_mem.pgsp_free;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 1 );
+ if (!mem) {
+ snmp_log_perror("No Swap info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Swap space");
+ mem->units = pagesize; /* or 4096 */
+ mem->size = pstat_mem.pgsp_total;
+ mem->free = pstat_mem.pgsp_free;
+ mem->other = pstat_mem.pgsp_rsvd;
+ }
+
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_darwin.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_darwin.c
new file mode 100644
index 0000000000..4914f0c415
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_darwin.c
@@ -0,0 +1,215 @@
+#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/agent/hardware/memory.h>
+
+#include <dirent.h>
+#include <unistd.h>
+#include <mach/mach_host.h>
+#include <sys/stat.h>
+#include <sys/sysctl.h>
+
+
+/*
+ * Retained from UCD implementation
+ */
+
+/*
+ * Get the number of pages that are swapped out.
+ * We think this is correct and are valid values
+ * but not sure. Time will tell if it's correct.
+ * Note: this routine is _expensive_!!! we run this
+ * as little as possible by caching it's return so
+ * it's not run on every poll.
+ * Apple, please give us a better way! :)
+ */
+int pages_swapped(void) {
+ boolean_t retval;
+ kern_return_t error;
+ processor_set_t *psets, pset;
+ task_t *tasks;
+ unsigned i, j, pcnt, tcnt;
+ int pid;
+ mach_msg_type_number_t count;
+ vm_address_t address;
+ mach_port_t object_name;
+ vm_region_extended_info_data_t info;
+ vm_size_t size;
+ mach_port_t mach_port;
+ int swapped_pages;
+ int swapped_pages_total = 0;
+ char errmsg[1024];
+
+
+ mach_port = mach_host_self();
+ error = host_processor_sets(mach_port, &psets, &pcnt);
+ if (error != KERN_SUCCESS) {
+ snprintf(errmsg, sizeof(errmsg), "Error in host_processor_sets(): %s\n", mach_error_string(error));
+ snmp_log_perror(errmsg);
+ return(0);
+ }
+
+ for (i = 0; i < pcnt; i++) {
+ error = host_processor_set_priv(mach_port, psets[i], &pset);
+ if (error != KERN_SUCCESS) {
+ snprintf(errmsg, sizeof(errmsg),"Error in host_processor_set_priv(): %s\n", mach_error_string(error));
+ snmp_log_perror(errmsg);
+ return(0);
+ }
+
+ error = processor_set_tasks(pset, &tasks, &tcnt);
+ if (error != KERN_SUCCESS) {
+ snprintf(errmsg, sizeof(errmsg),"Error in processor_set_tasks(): %s\n", mach_error_string(error));
+ snmp_log_perror(errmsg);
+ return(0);
+ }
+
+ for (j = 0; j < tcnt; j++) {
+ error = pid_for_task(tasks[j], &pid);
+ if (error != KERN_SUCCESS) {
+ /* Not a process, or the process is gone. */
+ continue;
+ }
+
+ swapped_pages = 0;
+ for (address = 0;; address += size) {
+ /* Get memory region. */
+ count = VM_REGION_EXTENDED_INFO_COUNT;
+ if (vm_region(tasks[j], &address, &size, VM_REGION_EXTENDED_INFO, (vm_region_extended_info_t)&info, &count, &object_name) != KERN_SUCCESS) {
+ /* No more memory regions. */
+ break;
+ }
+
+ if(info.pages_swapped_out > 0) {
+ swapped_pages += info.pages_swapped_out;
+ }
+ }
+
+ if(swapped_pages > 0) {
+ swapped_pages_total += swapped_pages;
+ }
+
+ if (tasks[j] != mach_task_self()) {
+ mach_port_deallocate(mach_task_self(), tasks[j]);
+ }
+ }
+ }
+
+ return(swapped_pages_total);
+}
+
+off_t
+swapsize(void)
+{
+ int pagesize;
+ int i, n;
+ DIR *dirp;
+ struct dirent *dp;
+ struct stat buf;
+ char errmsg[1024];
+ char full_name[1024];
+ off_t swapSize;
+
+ /* we set the size to -1 if we're not supported */
+ swapSize = -1;
+
+#if defined(SWAPFILE_DIR) && defined(SWAPFILE_PREFIX)
+ dirp = opendir((const char *) SWAPFILE_DIR);
+ while((dp = readdir(dirp)) != NULL) {
+ /* if the file starts with the same as SWAPFILE_PREFIX
+ * we want to stat the file to get it's size
+ */
+ if(strspn(dp->d_name,(char *) SWAPFILE_PREFIX) == strlen((char *) SWAPFILE_PREFIX)) {
+ snprintf(full_name, sizeof(full_name),"%s/%s",SWAPFILE_DIR,dp->d_name);
+ /* we need to stat each swapfile to get it's size */
+ if(stat(full_name,&buf) != 0) {
+ snprintf(errmsg, sizeof(errmsg), "swapsize: can't stat file %s",full_name);
+ snmp_log_perror(errmsg);
+ } else {
+ /* total swap allocated is the size of
+ * all the swapfile's that exist in
+ * the SWAPFILE_DIR dir
+ */
+ swapSize += buf.st_size;
+ }
+ }
+
+ }
+ closedir(dirp);
+
+#else
+ /* we set the size to -1 if we're not supported */
+ swapSize = -1;
+#endif
+
+ return swapSize;
+}
+
+ /*
+ * Load the latest memory usage statistics
+ *
+ * HW_PHYSMEM is capped at 2 Gigs so we use HW_MEMSIZE
+ */
+int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
+
+ netsnmp_memory_info *mem;
+
+ uint64_t phys_mem; /* bytes */
+ size_t phys_mem_size = sizeof(phys_mem);
+ int phys_mem_mib[] = { CTL_HW, HW_MEMSIZE };
+
+ int pagesize; /* bytes */
+ size_t pagesize_size = sizeof(pagesize);
+ int pagesize_mib[] = { CTL_HW, HW_PAGESIZE };
+
+ uint64_t pages_used;
+ off_t swapSize;
+ off_t swapUsed;
+ vm_statistics_data_t vm_stat;
+ unsigned int count = HOST_VM_INFO_COUNT;
+
+ sysctl(phys_mem_mib, 2, &phys_mem, &phys_mem_size, NULL, 0);
+ sysctl(pagesize_mib, 2, &pagesize, &pagesize_size, NULL, 0);
+ host_statistics(mach_host_self(),HOST_VM_INFO,(host_info_t)&vm_stat,&count);
+ pages_used = vm_stat.active_count + vm_stat.inactive_count
+ + vm_stat.wire_count;
+ swapSize = swapsize(); /* in bytes */
+ swapUsed = pages_swapped();
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup( "Physical memory" );
+ mem->units = pagesize; /* 4096 */
+ mem->size = phys_mem/pagesize;
+ mem->free = (phys_mem/pagesize) - pages_used;
+ mem->other = -1;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 1 );
+ if (!mem) {
+ snmp_log_perror("No Swap info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup( "Swap space" );
+ mem->units = pagesize; /* 4096 */
+ mem->size = swapSize/pagesize;
+ mem->free = (swapSize/pagesize) - swapUsed;
+ mem->other = -1;
+ }
+
+/*
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_MISC, 1 );
+ if (!mem) {
+ snmp_log_perror("No Buffer, etc info entry");
+ } else {
+ mem->units = pagesize;
+ mem->size = -1;
+ mem->free = (phys_mem - pages_used) + (swapSize - swapUsed);
+ mem->other = -1;
+ }
+*/
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_dynix.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_dynix.c
new file mode 100644
index 0000000000..9b0bc507a3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_dynix.c
@@ -0,0 +1,117 @@
+#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/agent/hardware/memory.h>
+
+#include <unistd.h>
+
+# ifdef HAVE_SYS_SWAP_H
+# include <sys/swap.h>
+# endif
+# ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+# endif
+
+/*
+ * Retained from UCD implementation
+ */
+long
+getTotalSwap(void)
+{
+ long total_swp_sectors = -1;
+
+ size_t max_elements = MAXSWAPDEVS;
+ swapsize_t swap_dblks[MAXSWAPDEVS];
+ swapstat_t swap_status;
+ int swap_sizes;
+
+ if ((swap_sizes =
+ getswapstat(max_elements, swap_dblks, &swap_status) >= 0))
+ total_swp_sectors =
+ swap_dblks[0].sws_size * swap_dblks[0].sws_total;
+
+ return (total_swp_sectors);
+}
+
+long
+getFreeSwap(void)
+{
+ long free_swp_sectors = -1;
+
+ size_t max_elements = MAXSWAPDEVS;
+ swapsize_t swap_dblks[MAXSWAPDEVS];
+ swapstat_t swap_status;
+ int i, swap_sizes;
+
+ if ((swap_sizes =
+ getswapstat(max_elements, swap_dblks, &swap_status) >= 0)) {
+ for (i = 0; i < swap_sizes; i++)
+ free_swp_sectors +=
+ swap_dblks[0].sws_size * swap_dblks[i].sws_avail;
+ }
+
+ return (free_swp_sectors);
+}
+
+/*
+ * return is in kilobytes
+ */
+long
+getTotalFree(void)
+{
+ long free_swap = S2KB(getFreeSwap());
+ long free_mem = P2KB(sysconf(_SC_FREEMEM));
+
+ if (free_swap < 0)
+ return (free_swap);
+ if (free_mem < 0)
+ return (free_mem);
+
+ free_mem += free_swap;
+ return (free_mem);
+}
+
+
+ /*
+ * Load the latest memory usage statistics
+ */
+int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
+
+ netsnmp_memory_info *mem;
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup( "Physical memory" );
+ mem->units = P2KB(1)*1024;
+ mem->size = sysconf(_SC_PHYSMEM);
+ mem->free = sysconf(_SC_FREEMEM);
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 1 );
+ if (!mem) {
+ snmp_log_perror("No Swap info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup( "Swap space" );
+ mem->units = S2KB(1)*1024;
+ mem->size = getTotalSwap();
+ mem->free = getFreeSwap();
+ }
+
+/*
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_MISC, 1 );
+ if (!mem) {
+ snmp_log_perror("No Buffer, etc info entry");
+ } else {
+ mem->units = 1024;
+ mem->size = -1;
+ mem->free = getTotalFree();
+ mem->other = -1;
+ }
+*/
+
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_freebsd.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_freebsd.c
new file mode 100644
index 0000000000..6df244b206
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_freebsd.c
@@ -0,0 +1,258 @@
+#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/agent/auto_nlist.h>
+#include <net-snmp/agent/hardware/memory.h>
+
+#include <unistd.h>
+#include <sys/param.h>
+#include <sys/fcntl.h>
+#include <sys/sysctl.h>
+#include <sys/vmmeter.h>
+#include <kvm.h>
+
+#if HAVE_SYS_VMPARAM_H
+#include <sys/vmparam.h>
+#else
+#include <vm/vm_param.h>
+#endif
+
+#define SUM_SYMBOL "cnt"
+#define BUFSPACE_SYMBOL "bufspace"
+
+quad_t swapTotal;
+quad_t swapUsed;
+quad_t swapFree;
+
+int swapmode(long);
+
+
+ /*
+ * Load the latest memory usage statistics
+ */
+int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
+
+ netsnmp_memory_info *mem;
+ long pagesize;
+ int nswap;
+
+ struct vmmeter vmem;
+ struct vmtotal total;
+ size_t total_size = sizeof(total);
+ int total_mib[] = { CTL_VM, VM_METER };
+
+ u_long phys_mem;
+ u_long user_mem;
+ unsigned int bufspace;
+ unsigned int maxbufspace;
+ size_t mem_size = sizeof(phys_mem);
+ size_t buf_size = sizeof(bufspace);
+ int phys_mem_mib[] = { CTL_HW, HW_PHYSMEM };
+ int user_mem_mib[] = { CTL_HW, HW_USERMEM };
+
+ /*
+ * Retrieve the memory information from the underlying O/S...
+ */
+ sysctl(total_mib, 2, &total, &total_size, NULL, 0);
+ sysctl(phys_mem_mib, 2, &phys_mem, &mem_size, NULL, 0);
+ sysctl(user_mem_mib, 2, &user_mem, &mem_size, NULL, 0);
+ sysctlbyname("vfs.bufspace", &bufspace, &buf_size, NULL, 0);
+ sysctlbyname("vfs.maxbufspace", &maxbufspace, &buf_size, NULL, 0);
+ auto_nlist(SUM_SYMBOL, (char *) &vmem, sizeof(vmem));
+#ifndef freebsd4
+ pagesize = 1024;
+#else
+ pagesize = getpagesize();
+#endif
+
+ /*
+ * ... and save this in a standard form.
+ */
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Physical Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Physical memory");
+ mem->units = pagesize;
+ mem->size = user_mem/pagesize;
+ mem->free = total.t_free;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_USERMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No (user) Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Real memory");
+ mem->units = pagesize;
+ mem->size = total.t_rm;
+ mem->free = total.t_arm;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_VIRTMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Virtual Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Virtual memory");
+ mem->units = pagesize;
+ mem->size = total.t_vm;
+ mem->free = total.t_avm;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SHARED, 1 );
+ if (!mem) {
+ snmp_log_perror("No Shared Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Shared virtual memory");
+ mem->units = pagesize;
+ mem->size = total.t_vmshr;
+ mem->free = total.t_avmshr;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SHARED2, 1 );
+ if (!mem) {
+ snmp_log_perror("No Shared2 Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Shared real memory");
+ mem->units = pagesize;
+ mem->size = total.t_rmshr;
+ mem->free = total.t_armshr;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_CACHED, 1 );
+ if (!mem) {
+ snmp_log_perror("No Cached Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Cached memory");
+ mem->units = vmem.v_page_size;
+ mem->size = vmem.v_cache_max;
+ mem->free = vmem.v_cache_max - vmem.v_cache_count;
+ }
+
+ nswap = swapmode(pagesize);
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 1 );
+ if (!mem) {
+ snmp_log_perror("No Swap info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup( (nswap>1) ? "Swap space (total)"
+ : "Swap space");
+ mem->units = pagesize;
+ mem->size = swapTotal;
+ mem->free = swapFree;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_MBUF, 1 );
+ if (!mem) {
+ snmp_log_perror("No Buffer, etc info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Memory buffers");
+ mem->units = 1024;
+ mem->size = maxbufspace / 1024;
+ mem->free = (maxbufspace - bufspace)/1024;
+ }
+
+ return 0;
+}
+
+
+
+/*
+ * Retained from UCD implementation
+ */
+
+
+#ifndef freebsd4
+/*
+ * Executes swapinfo and parses last line
+ * This is just way too ugly ;)
+ */
+
+int
+swapmode(long pagesize)
+{
+ struct extensible ext;
+ int fd;
+ FILE *file;
+
+ strcpy(ext.command, "/usr/sbin/swapinfo -k");
+
+ if ((fd = get_exec_output(&ext)) != -1) {
+ file = fdopen(fd, "r");
+
+ while (fgets(ext.output, sizeof(ext.output), file) != NULL);
+
+ fclose(file);
+ wait_on_exec(&ext);
+
+ sscanf(ext.output, "%*s%*d%qd%qd", &swapUsed, &swapFree);
+
+ swapTotal = swapUsed + swapFree;
+ }
+ return 1;
+}
+#else
+/*
+ * swapmode is based on a program called swapinfo written
+ * by Kevin Lahey <kml@rokkaku.atl.ga.us>.
+ */
+
+#include <sys/conf.h>
+
+int
+swapmode(long pagesize)
+{
+ int i, n;
+ static kvm_t *kd = NULL;
+ struct kvm_swap kswap[16];
+ netsnmp_memory_info *mem;
+ char buf[1024];
+
+ if (kd == NULL)
+ kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, NULL);
+ n = kvm_getswapinfo(kd, kswap, sizeof(kswap) / sizeof(kswap[0]), 0);
+
+ swapUsed = swapTotal = swapFree = 0;
+
+ if ( n > 1 ) {
+ /*
+ * If there are multiple swap devices, then record
+ * the statistics for each one separately...
+ */
+ for (i = 0; i < n; ++i) {
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP+1+i, 1 );
+ if (!mem)
+ continue;
+ if (!mem->descr) {
+ sprintf(buf, "swap %s", kswap[i].ksw_devname);
+ mem->descr = strdup( buf );
+ }
+ mem->units = pagesize;
+ mem->size = kswap[i].ksw_total;
+ mem->free = kswap[i].ksw_total - kswap[i].ksw_used;
+ /*
+ * ... and keep a running total for the overall swap stats
+ */
+ swapTotal += kswap[i].ksw_total;
+ swapUsed += kswap[i].ksw_used;
+ }
+ } else {
+ /*
+ * If there's only one swap device, then don't bother
+ * with individual statistics.
+ */
+ swapTotal += kswap[0].ksw_total;
+ swapUsed += kswap[0].ksw_used;
+ }
+
+ swapFree = swapTotal - swapUsed;
+ return n;
+}
+#endif
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_hpux.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_hpux.c
new file mode 100644
index 0000000000..6e631c6c91
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_hpux.c
@@ -0,0 +1,132 @@
+#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/agent/hardware/memory.h>
+
+#include <sys/pstat.h>
+
+
+void get_swapinfo(long *total, long *free, long *size);
+
+ /*
+ * Load the latest memory usage statistics
+ */
+int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
+
+ struct pst_static pst;
+ struct pst_dynamic psd;
+ netsnmp_memory_info *mem;
+ long total_swap = 0;
+ long free_swap = 0;
+ long size = 0;
+
+ /*
+ * Retrieve the memory information from the underlying O/S...
+ */
+ if (pstat_getstatic(&pst, sizeof(pst), (size_t) 1, 0) == -1) {
+ snmp_log(LOG_ERR, "memory_hpux: pstat_getstatic failed!\n");
+ return -1;
+ }
+ if (pstat_getdynamic(&psd, sizeof(psd), (size_t) 1, 0) == -1) {
+ snmp_log(LOG_ERR, "memory_hpux: pstat_getdynamic failed!\n");
+ return -1;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup( "Physical memory" );
+ mem->units = pst.page_size;
+ mem->size = pst.physical_memory;
+ mem->free = psd.psd_free;
+ mem->other = -1;
+ }
+
+ get_swapinfo(&total_swap, &free_swap, &size);
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 1 );
+ if (!mem) {
+ snmp_log_perror("No Swap info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup( "Swap space (total)" );
+ mem->units = size;
+ mem->size = total_swap;
+ mem->free = free_swap;
+ mem->other = -1;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_STEXT, 1 );
+ if (!mem) {
+ snmp_log_perror("No Swap text entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup( "Swapped text pages" );
+ mem->units = pst.page_size;
+ mem->size = psd.psd_vmtxt;
+ mem->free = psd.psd_avmtxt;
+ mem->other = -1;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_RTEXT, 1 );
+ if (!mem) {
+ snmp_log_perror("No real text entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup( "Real text pages" );
+ mem->units = pst.page_size;
+ mem->size = psd.psd_rmtxt;
+ mem->free = psd.psd_armtxt;
+ mem->other = -1;
+ }
+
+/*
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_MISC, 1 );
+ if (!mem) {
+ snmp_log_perror("No Buffer, etc info entry");
+ } else {
+ mem->units = 1024;
+ mem->size = -1;
+ mem->free = (pst.page_size/1024)*psd.psd_free + swap.free_swap;
+ mem->other = -1;
+ }
+ */
+ return 0;
+}
+/*
+ * Retained from UCD implementation
+ */
+void
+get_swapinfo(long *total, long *free, long *size)
+{
+ struct pst_swapinfo pss;
+ netsnmp_memory_info *mem;
+ int i = 0;
+ char buf[1024];
+
+ while (pstat_getswap(&pss, sizeof(pss), (size_t) 1, i) != -1) {
+ if (pss.pss_idx == (unsigned) i) {
+ /*
+ * TODO - Skip if only one swap device
+ */
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP+1+i, 1 );
+ if (!mem)
+ continue;
+ if (!mem->descr) {
+ sprintf(buf, "swap #%d %s", i, pss.pss_mntpt);
+ mem->descr = strdup( buf );
+ }
+ mem->units = pss.pss_swapchunk;
+ mem->size = pss.pss_nblksenabled; /* Or pss_nblks ? */
+ mem->free = pss.pss_nfpgs; /* Or pss_nblksavail ? */
+ mem->other = -1;
+ *total += mem->size;
+ *free += mem->other;
+ *size = pss.pss_swapchunk; /* Hopefully consistent! */
+ i++;
+ } else
+ return;
+ }
+} /* end get_swapinfo */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_irix.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_irix.c
new file mode 100644
index 0000000000..377f007025
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_irix.c
@@ -0,0 +1,87 @@
+#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/agent/hardware/memory.h>
+
+#if HAVE_SYS_SWAP_H
+#include <sys/swap.h>
+#endif
+
+#if HAVE_SYS_SYSGET_H
+#include <sys/sysget.h>
+#endif
+
+#if HAVE_SYS_SYSMP_H
+#include <sys/sysmp.h>
+#endif
+
+ /*
+ * Load the latest memory usage statistics
+ */
+int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
+
+ netsnmp_memory_info *mem;
+ struct rminfo meminfo; /* struct for getting memory info, see sys/sysmp.h */
+ int pagesz, rminfosz;
+ off_t swaptotal, swapfree;
+
+ /*
+ * Retrieve the memory information from the underlying O/S...
+ */
+ DEBUGMSGTL(("hardware/memory/memory_irix", "Start retrieving values from OS\n"));
+ pagesz = getpagesize();
+ DEBUGMSGTL(("hardware/memory/memory_irix", "Page size: %d\n", pagesz));
+ rminfosz = (int)sysmp(MP_SASZ, MPSA_RMINFO);
+ DEBUGMSGTL(("hardware/memory/memory_irix", "rminfo size: %d\n", rminfosz));
+ if (sysmp(MP_SAGET, MPSA_RMINFO, &meminfo, rminfosz) < 0) {
+ snmp_log(LOG_ERR, "memory_irix: sysmp failed!\n");
+ return -1;
+ }
+ swapctl(SC_GETSWAPTOT, &swaptotal);
+ swapctl(SC_GETFREESWAP, &swapfree);
+
+ /*
+ * ... and save this in a standard form.
+ */
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Physical Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Physical memory");
+ mem->units = pagesz;
+ mem->size = meminfo.physmem;
+ mem->free = meminfo.availrmem;
+ mem->other = -1;
+ DEBUGMSGTL(("hardware/memory/memory_irix", "Physical memory: size %u, free %u\n", mem->size, mem->free));
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_VIRTMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Virtual Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Virtual memory");
+ mem->units = pagesz; /* swaptotal is in blocks, so adjust below */
+ mem->size = meminfo.physmem + (swaptotal*512/pagesz);
+ mem->free = meminfo.availsmem;
+ mem->other = -1;
+ DEBUGMSGTL(("hardware/memory/memory_irix", "Virtual memory: size %u, free %u\n", mem->size, mem->free));
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 1 );
+ if (!mem) {
+ snmp_log_perror("No Swap info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Swap space");
+ mem->units = 1024;
+ mem->size = swaptotal/2; /* blocks to KB */
+ mem->free = swapfree/2; /* blocks to KB */
+ mem->other = -1;
+ DEBUGMSGTL(("hardware/memory/memory_irix", "Swap: size %u, free %u\n", mem->size, mem->free));
+ }
+
+ return 0;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_linux.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_linux.c
new file mode 100644
index 0000000000..40819af273
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_linux.c
@@ -0,0 +1,207 @@
+#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/agent/hardware/memory.h>
+
+#include <unistd.h>
+#include <fcntl.h>
+
+/*
+ * Try to use an initial size that will cover default cases. We aren't talking
+ * about huge files, so why fiddle about with reallocs?
+ * I checked /proc/meminfo sizes on 3 different systems: 598, 644, 654
+ */
+#define MEMINFO_INIT_SIZE 768
+#define MEMINFO_STEP_SIZE 256
+#define MEMINFO_FILE "/proc/meminfo"
+
+ /*
+ * Load the latest memory usage statistics
+ */
+int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
+ int statfd;
+ static char *buff = NULL;
+ static int bsize = 0;
+ static int first = 1;
+ ssize_t bytes_read;
+ char *b;
+ unsigned long memtotal = 0, memfree = 0, memshared = 0,
+ buffers = 0, cached = 0,
+ swaptotal = 0, swapfree = 0;
+
+ netsnmp_memory_info *mem;
+
+ /*
+ * Retrieve the memory information from the underlying O/S...
+ */
+ if ((statfd = open(MEMINFO_FILE, O_RDONLY, 0)) == -1) {
+ snmp_log_perror(MEMINFO_FILE);
+ return -1;
+ }
+ if (bsize == 0) {
+ bsize = MEMINFO_INIT_SIZE;
+ buff = malloc(bsize);
+ if (NULL == buff) {
+ snmp_log(LOG_ERR, "malloc failed\n");
+ return -1;
+ }
+ }
+ while ((bytes_read = read(statfd, buff, bsize)) == bsize) {
+ b = realloc(buff, bsize + MEMINFO_STEP_SIZE);
+ if (NULL == b) {
+ snmp_log(LOG_ERR, "malloc failed\n");
+ return -1;
+ }
+ buff = b;
+ bsize += MEMINFO_STEP_SIZE;
+ DEBUGMSGTL(("mem", "/proc/meminfo buffer increased to %d\n", bsize));
+ close(statfd);
+ statfd = open(MEMINFO_FILE, O_RDONLY, 0);
+ if (statfd == -1) {
+ snmp_log_perror(MEMINFO_FILE);
+ return -1;
+ }
+ }
+ close(statfd);
+ if (bytes_read <= 0) {
+ snmp_log_perror(MEMINFO_FILE);
+ }
+
+ /*
+ * ... parse this into a more useable form...
+ */
+ b = strstr(buff, "MemTotal: ");
+ if (b)
+ sscanf(b, "MemTotal: %lu", &memtotal);
+ else {
+ if (first)
+ snmp_log(LOG_ERR, "No MemTotal line in /proc/meminfo\n");
+ }
+ b = strstr(buff, "MemFree: ");
+ if (b)
+ sscanf(b, "MemFree: %lu", &memfree);
+ else {
+ if (first)
+ snmp_log(LOG_ERR, "No MemFree line in /proc/meminfo\n");
+ }
+ b = strstr(buff, "MemShared: ");
+ if (b)
+ sscanf(b, "MemShared: %lu", &memshared);
+ else {
+ if (first)
+ if (0 == netsnmp_os_prematch("Linux","2.4"))
+ snmp_log(LOG_ERR, "No MemShared line in /proc/meminfo\n");
+ }
+ b = strstr(buff, "Buffers: ");
+ if (b)
+ sscanf(b, "Buffers: %lu", &buffers);
+ else {
+ if (first)
+ snmp_log(LOG_ERR, "No Buffers line in /proc/meminfo\n");
+ }
+ b = strstr(buff, "Cached: ");
+ if (b)
+ sscanf(b, "Cached: %lu", &cached);
+ else {
+ if (first)
+ snmp_log(LOG_ERR, "No Cached line in /proc/meminfo\n");
+ }
+ b = strstr(buff, "SwapTotal: ");
+ if (b)
+ sscanf(b, "SwapTotal: %lu", &swaptotal);
+ else {
+ if (first)
+ snmp_log(LOG_ERR, "No SwapTotal line in /proc/meminfo\n");
+ }
+ b = strstr(buff, "SwapFree: ");
+ if (b)
+ sscanf(b, "SwapFree: %lu", &swapfree);
+ else {
+ if (first)
+ snmp_log(LOG_ERR, "No SwapFree line in /proc/meminfo\n");
+ }
+ first = 0;
+
+
+ /*
+ * ... and save this in a standard form.
+ */
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Physical Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Physical memory");
+ mem->units = 1024;
+ mem->size = memtotal;
+ mem->free = memfree;
+ mem->other = -1;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_VIRTMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Virtual Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Virtual memory");
+ mem->units = 1024;
+ mem->size = memtotal+swaptotal;
+ mem->free = memfree +swapfree;
+ mem->other = -1;
+ }
+
+ /* Shared memory is not reported by Linux 2.6 kernel */
+ if (0 != netsnmp_os_prematch("Linux","2.6")) {
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SHARED, 1 );
+ if (!mem) {
+ snmp_log_perror("No Shared Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Shared memory");
+ mem->units = 1024;
+ mem->size = memshared;
+ mem->free = -1;
+ mem->other = -1;
+ }
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_CACHED, 1 );
+ if (!mem) {
+ snmp_log_perror("No Cached Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Cached memory");
+ mem->units = 1024;
+ mem->size = cached;
+ mem->free = 0; /* Report cached size/used as equal */
+ mem->other = -1;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 1 );
+ if (!mem) {
+ snmp_log_perror("No Swap info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Swap space");
+ mem->units = 1024;
+ mem->size = swaptotal;
+ mem->free = swapfree;
+ mem->other = -1;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_MBUF, 1 );
+ if (!mem) {
+ snmp_log_perror("No Buffer, etc info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Memory buffers");
+ mem->units = 1024;
+ mem->size = memtotal; /* Traditionally we've always regarded
+ all memory as potentially available
+ for memory buffers. */
+ mem->free = memtotal - buffers;
+ mem->other = -1;
+ }
+
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_linux.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_linux.h
new file mode 100644
index 0000000000..1b59cfba6f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_linux.h
@@ -0,0 +1 @@
+config_require(hardware/memory/hw_mem)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_netbsd.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_netbsd.c
new file mode 100644
index 0000000000..746fea0490
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_netbsd.c
@@ -0,0 +1,139 @@
+#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/agent/hardware/memory.h>
+
+#include <unistd.h>
+#include <sys/sysctl.h>
+#include <sys/swap.h>
+
+#if defined(HAVE_UVM_UVM_PARAM_H) && defined(HAVE_UVM_UVM_EXTERN_H)
+#include <uvm/uvm_param.h>
+#include <uvm/uvm_extern.h>
+#elif defined(HAVE_VM_VM_PARAM_H) && defined(HAVE_VM_VM_EXTERN_H)
+#include <vm/vm_param.h>
+#include <vm/vm_extern.h>
+#else
+#error memory_netbsd1.c: Is this really a NetBSD system?
+#endif
+
+#ifdef SWAP_NSWAP
+void swapinfo(long);
+#endif
+
+ /*
+ * Load the latest memory usage statistics
+ */
+int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
+
+ netsnmp_memory_info *mem;
+ long pagesize;
+
+ struct uvmexp uvmexp;
+ int uvmexp_size = sizeof(uvmexp);
+ int uvmexp_mib[] = { CTL_VM, VM_UVMEXP };
+
+ struct vmtotal total;
+ size_t total_size = sizeof(total);
+ int total_mib[] = { CTL_VM, VM_METER };
+
+ long phys_mem;
+ long user_mem;
+ size_t mem_size = sizeof(phys_mem);
+ int phys_mem_mib[] = { CTL_HW, HW_PHYSMEM };
+ int user_mem_mib[] = { CTL_HW, HW_USERMEM };
+
+ /*
+ * Retrieve the memory information from the underlying O/S...
+ */
+ sysctl(uvmexp_mib, 2, &uvmexp, &uvmexp_size, NULL, 0);
+ sysctl(total_mib, 2, &total, &total_size, NULL, 0);
+ sysctl(phys_mem_mib, 2, &phys_mem, &mem_size, NULL, 0);
+ sysctl(user_mem_mib, 2, &user_mem, &mem_size, NULL, 0);
+ pagesize = uvmexp.pagesize;
+
+ /*
+ * ... and save this in a standard form.
+ */
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Physical Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Physical memory");
+ mem->units = pagesize;
+ mem->size = phys_mem/pagesize;
+ mem->free = total.t_free;
+ mem->other = -1;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_USERMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No (user) Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Real memory");
+ mem->units = pagesize;
+ mem->size = user_mem/pagesize;
+ mem->free = uvmexp.free;
+ mem->other = -1;
+ }
+
+#ifdef SWAP_NSWAP
+ swapinfo(pagesize);
+#endif
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 1 );
+ if (!mem) {
+ snmp_log_perror("No Swap info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Swap space");
+ mem->units = pagesize;
+ mem->size = uvmexp.swpages;
+ mem->free = uvmexp.swpages - uvmexp.swpginuse;
+ mem->other = -1;
+ }
+
+ return 0;
+}
+
+
+#ifdef SWAP_NSWAP
+ /*
+ * If there are multiple swap devices, record
+ * the statistics for each one individually.
+ */
+void
+swapinfo(long pagesize)
+{
+ int i, n;
+ struct swapent *s;
+ netsnmp_memory_info *mem;
+ char buf[1024];
+
+ /*
+ * If there's only one swap device, don't bother
+ */
+ n = swapctl( SWAP_NSWAP, NULL, 0 );
+ if ( n <= 1 )
+ return;
+
+ s = (struct swapent*)calloc(n, sizeof(struct swapent));
+ swapctl( SWAP_STATS, s, n );
+
+ for (i = 0; i < n; ++i) {
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP+1+i, 1 );
+ if (!mem)
+ continue;
+ if (!mem->descr) {
+ /* sprintf(buf, "swap #%d", s[i].se_dev); */
+ sprintf(buf, "swap %s", s[i].se_path);
+ mem->descr = strdup( buf );
+ }
+ mem->units = pagesize;
+ mem->size = s[i].se_nblks;
+ mem->free = s[i].se_nblks - s[i].se_inuse;
+ mem->other = -1;
+ }
+}
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_null.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_null.c
new file mode 100644
index 0000000000..54ca6df74d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_null.c
@@ -0,0 +1,18 @@
+/*
+ * dummy HAL memory module
+ * for systems not using any of the supported interfaces
+ */
+#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/agent/hardware/memory.h>
+
+
+ /*
+ * We can't load the memory usage statistics
+ * because we don't know how to do this!
+ */
+int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
+
+ return 0; /* or -1 ? */
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_solaris.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_solaris.c
new file mode 100644
index 0000000000..3dfff8b239
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_solaris.c
@@ -0,0 +1,172 @@
+#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/agent/hardware/memory.h>
+
+#include <unistd.h>
+#include <kstat.h>
+#include <sys/stat.h>
+#include <sys/swap.h>
+
+#ifndef MAXSTRSIZE
+#define MAXSTRSIZE 1024
+#endif
+
+void getSwapInfo(long *total_mem, long *free_mem);
+
+
+ /*
+ * Load the latest memory usage statistics
+ */
+int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
+
+#ifndef _SC_PHYS_PAGES
+ extern kstat_ctl_t *kstat_fd; /* defined in kernel_sunos5.c */
+ kstat_t *ksp1;
+ kstat_named_t *kn;
+#endif
+#ifdef SC_AINFO
+ struct anoninfo ai;
+#endif
+
+ long phys_mem = 0;
+ long phys_free = 0;
+ long swap_pages = 0;
+ long swap_free = 0;
+ long pagesize = 0;
+ netsnmp_memory_info *mem;
+
+ /*
+ * Retrieve the memory information from the underlying O/S...
+ */
+ pagesize = getpagesize();
+ getSwapInfo( &swap_pages, &swap_free );
+#ifdef SC_AINFO
+ swapctl(SC_AINFO, &ai);
+#endif
+#ifdef _SC_PHYS_PAGES
+ phys_mem = sysconf(_SC_PHYS_PAGES);
+ phys_free = sysconf(_SC_AVPHYS_PAGES);
+#else
+ ksp1 = kstat_lookup(kstat_fd, "unix", 0, "system_pages");
+ kstat_read(kstat_fd, ksp1, 0);
+ kn = kstat_data_lookup(ksp1, "physmem");
+ phys_mem = kn->value.ul;
+#ifdef SC_AINFO
+ phys_free = (ai.ani_max - ai.ani_resv) - swap_free;
+#else
+ phys_free = -1;
+#endif
+#endif
+
+ /*
+ * ... and save this in a standard form.
+ */
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup( "Physical memory" );
+ mem->units = pagesize;
+ mem->size = phys_mem;
+ mem->free = phys_free;
+ mem->other = -1;
+ }
+
+#ifdef SC_AINFO
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_VIRTMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Virtual Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup( " Virtual memory" );
+ mem->units = pagesize; /* or 1024? */
+ mem->size = ai.ani_max;
+ mem->free = (ai.ani_max - ai.ani_resv);
+ mem->other = -1;
+ }
+#endif
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 1 );
+ if (!mem) {
+ snmp_log_perror("No Swap info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup( "Swap space" );
+ mem->units = pagesize;
+ mem->size = swap_pages;
+ mem->free = swap_free;
+ mem->other = -1;
+ }
+
+/*
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_MISC, 1 );
+ if (!mem) {
+ snmp_log_perror("No Buffer, etc info entry");
+ } else {
+ mem->units = getpagesize();
+ mem->size = -1;
+ mem->free = getTotalFree();
+ mem->other = -1;
+ }
+*/
+
+ return 0;
+}
+
+/*
+ * Adapted from UCD implementation
+ */
+void
+getSwapInfo(long *total_mem, long *total_free)
+{
+ size_t num;
+ int i, n;
+ swaptbl_t *s;
+ netsnmp_memory_info *mem;
+ char *strtab;
+ char buf[1024];
+
+ num = swapctl(SC_GETNSWP, 0);
+ s = malloc(num * sizeof(swapent_t) + sizeof(struct swaptable));
+ if (!s)
+ return;
+
+ strtab = (char *) malloc((num + 1) * MAXSTRSIZE);
+ if (!strtab) {
+ free(s);
+ return;
+ }
+
+ for (i = 0; i < (num + 1); i++) {
+ s->swt_ent[i].ste_path = strtab + (i * MAXSTRSIZE);
+ }
+ s->swt_n = num + 1;
+ n = swapctl(SC_LIST, s);
+
+ if (n > 1) {
+ for (i = 0; i < n; ++i) {
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP+1+i, 1 );
+ if (!mem)
+ continue;
+ if (!mem->descr) {
+ sprintf(buf, "swap #%d %s", i, s->swt_ent[i].ste_path);
+ mem->descr = strdup( buf );
+ }
+ mem->units = getpagesize();
+ mem->size = s->swt_ent[i].ste_pages;
+ mem->free = s->swt_ent[i].ste_free;
+ mem->other = -1;
+ *total_mem += mem->size;
+ *total_free += mem->free;
+ }
+ }
+ else {
+ *total_mem = s->swt_ent[0].ste_pages;
+ *total_free = s->swt_ent[0].ste_free;
+ }
+
+ free(strtab);
+ free(s);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_win.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_win.c
new file mode 100644
index 0000000000..849aae713d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/hardware/memory/memory_win.c
@@ -0,0 +1,63 @@
+#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/agent/hardware/memory.h>
+
+#include <windows.h>
+
+
+ /*
+ * Load the latest memory usage statistics
+ */
+int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
+
+ netsnmp_memory_info *mem;
+ MEMORYSTATUS stat;
+
+ /*
+ * Retrieve the memory information from the underlying O/S...
+ */
+ GlobalMemoryStatus(&stat);
+
+ /*
+ * ... and save this in a standard form.
+ */
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Physical Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Physical memory");
+ mem->units = 1024;
+ mem->size = stat.dwTotalPhys/1024;
+ mem->free = stat.dwAvailPhys/1024;
+ mem->other = -1;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_VIRTMEM, 1 );
+ if (!mem) {
+ snmp_log_perror("No Virtual Memory info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Virtual memory");
+ mem->units = 1024;
+ mem->size = stat.dwTotalVirtual/1024;
+ mem->free = stat.dwAvailVirtual/1024;
+ mem->other = -1;
+ }
+
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 1 );
+ if (!mem) {
+ snmp_log_perror("No Swap info entry");
+ } else {
+ if (!mem->descr)
+ mem->descr = strdup("Swap space");
+ mem->units = 1024;
+ mem->size = stat.dwTotalPageFile/1024;
+ mem->free = stat.dwAvailPageFile/1024;
+ mem->other = -1;
+ }
+
+ return 0;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/header_complex.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/header_complex.c
new file mode 100644
index 0000000000..c385ede92c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/header_complex.c
@@ -0,0 +1,595 @@
+/*
+ * header complex: More complex storage and data sorting for mib modules
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#include <sys/types.h>
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "header_complex.h"
+
+int
+header_complex_generate_varoid(netsnmp_variable_list * var)
+{
+ int i;
+
+ if (var->name == NULL) {
+ /*
+ * assume cached value is correct
+ */
+ switch (var->type) {
+ case ASN_INTEGER:
+ case ASN_COUNTER:
+ case ASN_GAUGE:
+ case ASN_TIMETICKS:
+ var->name_length = 1;
+ var->name = (oid *) malloc(sizeof(oid));
+ if (var->name == NULL)
+ return SNMPERR_GENERR;
+ var->name[0] = *(var->val.integer);
+ break;
+
+ case ASN_PRIV_IMPLIED_OBJECT_ID:
+ var->name_length = var->val_len / sizeof(oid);
+ var->name = (oid *) malloc(sizeof(oid) * (var->name_length));
+ if (var->name == NULL)
+ return SNMPERR_GENERR;
+
+ for (i = 0; i < (int) var->name_length; i++)
+ var->name[i] = var->val.objid[i];
+ break;
+
+ case ASN_OBJECT_ID:
+ var->name_length = var->val_len / sizeof(oid) + 1;
+ var->name = (oid *) malloc(sizeof(oid) * (var->name_length));
+ if (var->name == NULL)
+ return SNMPERR_GENERR;
+
+ var->name[0] = var->name_length - 1;
+ for (i = 0; i < (int) var->name_length - 1; i++)
+ var->name[i + 1] = var->val.objid[i];
+ break;
+
+ case ASN_PRIV_IMPLIED_OCTET_STR:
+ var->name_length = var->val_len;
+ var->name = (oid *) malloc(sizeof(oid) * (var->name_length));
+ if (var->name == NULL)
+ return SNMPERR_GENERR;
+
+ for (i = 0; i < (int) var->val_len; i++)
+ var->name[i] = (oid) var->val.string[i];
+ break;
+
+ case ASN_OPAQUE:
+ case ASN_OCTET_STR:
+ var->name_length = var->val_len + 1;
+ var->name = (oid *) malloc(sizeof(oid) * (var->name_length));
+ if (var->name == NULL)
+ return SNMPERR_GENERR;
+
+ var->name[0] = (oid) var->val_len;
+ for (i = 0; i < (int) var->val_len; i++)
+ var->name[i + 1] = (oid) var->val.string[i];
+ break;
+
+ default:
+ DEBUGMSGTL(("header_complex_generate_varoid",
+ "invalid asn type: %d\n", var->type));
+ return SNMPERR_GENERR;
+ }
+ }
+ if (var->name_length > MAX_OID_LEN) {
+ DEBUGMSGTL(("header_complex_generate_varoid",
+ "Something terribly wrong, namelen = %d\n",
+ var->name_length));
+ return SNMPERR_GENERR;
+ }
+
+ return SNMPERR_SUCCESS;
+}
+
+/*
+ * header_complex_parse_oid(): parses an index to the usmTable to
+ * break it down into a engineID component and a name component.
+ * The results are stored in the data pointer, as a varbindlist:
+ *
+ *
+ * returns 1 if an error is encountered, or 0 if successful.
+ */
+int
+header_complex_parse_oid(oid * oidIndex, size_t oidLen,
+ netsnmp_variable_list * data)
+{
+ netsnmp_variable_list *var = data;
+ int i, itmp;
+
+ while (var && oidLen > 0) {
+ switch (var->type) {
+ case ASN_INTEGER:
+ case ASN_COUNTER:
+ case ASN_GAUGE:
+ case ASN_TIMETICKS:
+ var->val.integer = (long *) calloc(1, sizeof(long));
+ if (var->val.string == NULL)
+ return SNMPERR_GENERR;
+
+ *var->val.integer = (long) *oidIndex++;
+ var->val_len = sizeof(long);
+ oidLen--;
+ DEBUGMSGTL(("header_complex_parse_oid",
+ "Parsed int(%d): %d\n", var->type,
+ *var->val.integer));
+ break;
+
+ case ASN_OBJECT_ID:
+ case ASN_PRIV_IMPLIED_OBJECT_ID:
+ if (var->type == ASN_PRIV_IMPLIED_OBJECT_ID) {
+ itmp = oidLen;
+ } else {
+ itmp = (long) *oidIndex++;
+ oidLen--;
+ if (itmp > (int) oidLen)
+ return SNMPERR_GENERR;
+ }
+
+ if (itmp == 0)
+ break; /* zero length strings shouldn't malloc */
+
+ var->val_len = itmp * sizeof(oid);
+ var->val.objid = (oid *) calloc(1, var->val_len);
+ if (var->val.objid == NULL)
+ return SNMPERR_GENERR;
+
+ for (i = 0; i < itmp; i++)
+ var->val.objid[i] = (u_char) * oidIndex++;
+ oidLen -= itmp;
+
+ DEBUGMSGTL(("header_complex_parse_oid", "Parsed oid: "));
+ DEBUGMSGOID(("header_complex_parse_oid", var->val.objid,
+ var->val_len / sizeof(oid)));
+ DEBUGMSG(("header_complex_parse_oid", "\n"));
+ break;
+
+ case ASN_OPAQUE:
+ case ASN_OCTET_STR:
+ case ASN_PRIV_IMPLIED_OCTET_STR:
+ if (var->type == ASN_PRIV_IMPLIED_OCTET_STR) {
+ itmp = oidLen;
+ } else {
+ itmp = (long) *oidIndex++;
+ oidLen--;
+ if (itmp > (int) oidLen)
+ return SNMPERR_GENERR;
+ }
+
+ if (itmp == 0)
+ break; /* zero length strings shouldn't malloc */
+
+ /*
+ * malloc by size+1 to allow a null to be appended.
+ */
+ var->val_len = itmp;
+ var->val.string = (u_char *) calloc(1, itmp + 1);
+ if (var->val.string == NULL)
+ return SNMPERR_GENERR;
+
+ for (i = 0; i < itmp; i++)
+ var->val.string[i] = (u_char) * oidIndex++;
+ var->val.string[itmp] = '\0';
+ oidLen -= itmp;
+
+ DEBUGMSGTL(("header_complex_parse_oid",
+ "Parsed str(%d): %s\n", var->type,
+ var->val.string));
+ break;
+
+ default:
+ DEBUGMSGTL(("header_complex_parse_oid",
+ "invalid asn type: %d\n", var->type));
+ return SNMPERR_GENERR;
+ }
+ var = var->next_variable;
+ }
+ if (var != NULL || oidLen > 0)
+ return SNMPERR_GENERR;
+ return SNMPERR_SUCCESS;
+}
+
+
+void
+header_complex_generate_oid(oid * name, /* out */
+ size_t * length, /* out */
+ oid * prefix,
+ size_t prefix_len,
+ netsnmp_variable_list * data)
+{
+
+ oid *oidptr;
+ netsnmp_variable_list *var;
+
+ if (prefix) {
+ memcpy(name, prefix, prefix_len * sizeof(oid));
+ oidptr = (name + (prefix_len));
+ *length = prefix_len;
+ } else {
+ oidptr = name;
+ *length = 0;
+ }
+
+ for (var = data; var != NULL; var = var->next_variable) {
+ header_complex_generate_varoid(var);
+ memcpy(oidptr, var->name, sizeof(oid) * var->name_length);
+ oidptr = oidptr + var->name_length;
+ *length += var->name_length;
+ }
+
+ DEBUGMSGTL(("header_complex_generate_oid", "generated: "));
+ DEBUGMSGOID(("header_complex_generate_oid", name, *length));
+ DEBUGMSG(("header_complex_generate_oid", "\n"));
+}
+
+/*
+ * finds the data in "datalist" stored at "index"
+ */
+void *
+header_complex_get(struct header_complex_index *datalist,
+ netsnmp_variable_list * index)
+{
+ oid searchfor[MAX_OID_LEN];
+ size_t searchfor_len;
+
+ header_complex_generate_oid(searchfor, /* out */
+ &searchfor_len, /* out */
+ NULL, 0, index);
+ return header_complex_get_from_oid(datalist, searchfor, searchfor_len);
+}
+
+void *
+header_complex_get_from_oid(struct header_complex_index *datalist,
+ oid * searchfor, size_t searchfor_len)
+{
+ struct header_complex_index *nptr;
+ for (nptr = datalist; nptr != NULL; nptr = nptr->next) {
+ if (netsnmp_oid_equals(searchfor, searchfor_len,
+ nptr->name, nptr->namelen) == 0)
+ return nptr->data;
+ }
+ return NULL;
+}
+
+
+void *
+header_complex(struct header_complex_index *datalist,
+ struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+
+ struct header_complex_index *nptr, *found = NULL;
+ oid indexOid[MAX_OID_LEN];
+ size_t len;
+ int result;
+
+ /*
+ * set up some nice defaults for the user
+ */
+ if (write_method)
+ *write_method = NULL;
+ if (var_len)
+ *var_len = sizeof(long);
+
+ for (nptr = datalist; nptr != NULL && found == NULL; nptr = nptr->next) {
+ if (vp) {
+ memcpy(indexOid, vp->name, vp->namelen * sizeof(oid));
+ memcpy(indexOid + vp->namelen, nptr->name,
+ nptr->namelen * sizeof(oid));
+ len = vp->namelen + nptr->namelen;
+ } else {
+ memcpy(indexOid, nptr->name, nptr->namelen * sizeof(oid));
+ len = nptr->namelen;
+ }
+ result = snmp_oid_compare(name, *length, indexOid, len);
+ DEBUGMSGTL(("header_complex", "Checking: "));
+ DEBUGMSGOID(("header_complex", indexOid, len));
+ DEBUGMSG(("header_complex", "\n"));
+
+ if (exact) {
+ if (result == 0) {
+ found = nptr;
+ }
+ } else {
+ if (result == 0) {
+ /*
+ * found an exact match. Need the next one for !exact
+ */
+ if (nptr->next)
+ found = nptr->next;
+ } else if (result == -1) {
+ found = nptr;
+ }
+ }
+ }
+ if (found) {
+ if (vp) {
+ memcpy(name, vp->name, vp->namelen * sizeof(oid));
+ memcpy(name + vp->namelen, found->name,
+ found->namelen * sizeof(oid));
+ *length = vp->namelen + found->namelen;
+ } else {
+ memcpy(name, found->name, found->namelen * sizeof(oid));
+ *length = found->namelen;
+ }
+ return found->data;
+ }
+
+ return NULL;
+}
+
+struct header_complex_index *
+header_complex_add_data(struct header_complex_index **thedata,
+ netsnmp_variable_list * var, void *data)
+{
+ oid newoid[MAX_OID_LEN];
+ size_t newoid_len;
+ struct header_complex_index *ret;
+
+ if (thedata == NULL || var == NULL || data == NULL)
+ return NULL;
+
+ header_complex_generate_oid(newoid, &newoid_len, NULL, 0, var);
+ ret =
+ header_complex_add_data_by_oid(thedata, newoid, newoid_len, data);
+ /*
+ * free the variable list, but not the enclosed data! it's not ours!
+ */
+ snmp_free_varbind(var);
+ return (ret);
+}
+
+struct header_complex_index *
+header_complex_add_data_by_oid(struct header_complex_index **thedata,
+ oid * newoid, size_t newoid_len, void *data)
+{
+ struct header_complex_index *hciptrn, *hciptrp, *ourself;
+ int rc;
+
+ if (thedata == NULL || newoid == NULL || data == NULL)
+ return NULL;
+
+ for (hciptrn = *thedata, hciptrp = NULL;
+ hciptrn != NULL; hciptrp = hciptrn, hciptrn = hciptrn->next) {
+ /*
+ * XXX: check for == and error (overlapping table entries)
+ * 8/2005 rks Ok, I added duplicate entry check, but only log
+ * warning and continue, because it seems that nobody
+ * that calls this fucntion does error checking!.
+ */
+ rc = snmp_oid_compare(hciptrn->name, hciptrn->namelen,
+ newoid, newoid_len);
+ if (rc > 0)
+ break;
+ else if (0 == rc) {
+ snmp_log(LOG_WARNING, "header_complex_add_data_by_oid with "
+ "duplicate index.\n");
+ /** uncomment null return when callers do error checking */
+ /** return NULL; */
+ }
+ }
+
+ /*
+ * nptr should now point to the spot that we need to add ourselves
+ * in front of, and pptr should be our new 'prev'.
+ */
+
+ /*
+ * create ourselves
+ */
+ ourself = (struct header_complex_index *)
+ SNMP_MALLOC_STRUCT(header_complex_index);
+
+ /*
+ * change our pointers
+ */
+ ourself->prev = hciptrp;
+ ourself->next = hciptrn;
+
+ if (ourself->next)
+ ourself->next->prev = ourself;
+
+ if (ourself->prev)
+ ourself->prev->next = ourself;
+
+ ourself->data = data;
+ ourself->name = snmp_duplicate_objid(newoid, newoid_len);
+ ourself->namelen = newoid_len;
+
+ /*
+ * rewind to the head of the list and return it (since the new head
+ * could be us, we need to notify the above routine who the head now is.
+ */
+ for (hciptrp = ourself; hciptrp->prev != NULL;
+ hciptrp = hciptrp->prev);
+
+ *thedata = hciptrp;
+ DEBUGMSGTL(("header_complex_add_data", "adding something...\n"));
+
+ return hciptrp;
+}
+
+/*
+ * extracts an entry from the storage space (removing it from future
+ * accesses) and returns the data stored there
+ *
+ * Modifies "thetop" pointer as needed (and if present) if were
+ * extracting the first node.
+ */
+
+void *
+header_complex_extract_entry(struct header_complex_index **thetop,
+ struct header_complex_index *thespot)
+{
+ struct header_complex_index *hciptrp, *hciptrn;
+ void *retdata;
+
+ if (thespot == NULL) {
+ DEBUGMSGTL(("header_complex_extract_entry",
+ "Null pointer asked to be extracted\n"));
+ return NULL;
+ }
+
+ retdata = thespot->data;
+
+ hciptrp = thespot->prev;
+ hciptrn = thespot->next;
+
+ if (hciptrp)
+ hciptrp->next = hciptrn;
+ else if (thetop)
+ *thetop = hciptrn;
+
+ if (hciptrn)
+ hciptrn->prev = hciptrp;
+
+ if (thespot->name)
+ free(thespot->name);
+
+ free(thespot);
+ return retdata;
+}
+
+/*
+ * wipe out a single entry
+ */
+void
+header_complex_free_entry(struct header_complex_index *theentry,
+ HeaderComplexCleaner * cleaner)
+{
+ void *data;
+ data = header_complex_extract_entry(NULL, theentry);
+ (*cleaner) (data);
+}
+
+/*
+ * completely wipe out all entries in our data store
+ */
+void
+header_complex_free_all(struct header_complex_index *thestuff,
+ HeaderComplexCleaner * cleaner)
+{
+ struct header_complex_index *hciptr, *hciptrn;
+
+ for (hciptr = thestuff; hciptr != NULL; hciptr = hciptrn) {
+ hciptrn = hciptr->next; /* need to extract this before deleting it */
+ header_complex_free_entry(hciptr, cleaner);
+ }
+}
+
+struct header_complex_index *
+header_complex_find_entry(struct header_complex_index *thestuff,
+ void *theentry)
+{
+ struct header_complex_index *hciptr;
+
+ for (hciptr = thestuff; hciptr != NULL && hciptr->data != theentry;
+ hciptr = hciptr->next);
+ return hciptr;
+}
+
+#ifdef TESTING
+
+void
+header_complex_dump(struct header_complex_index *thestuff)
+{
+ struct header_complex_index *hciptr;
+ oid oidsave[MAX_OID_LEN];
+ size_t len;
+
+ for (hciptr = thestuff; hciptr != NULL; hciptr = hciptr->next) {
+ DEBUGMSGTL(("header_complex_dump", "var: "));
+ header_complex_generate_oid(oidsave, &len, NULL, 0, hciptr->);
+ DEBUGMSGOID(("header_complex_dump", oidsave, len));
+ DEBUGMSG(("header_complex_dump", "\n"));
+ }
+}
+
+main()
+{
+ oid oidsave[MAX_OID_LEN];
+ int len = MAX_OID_LEN, len2;
+ netsnmp_variable_list *vars;
+ long ltmp = 4242, ltmp2 = 88, ltmp3 = 1, ltmp4 = 4200;
+ oid ourprefix[] = { 1, 2, 3, 4 };
+ oid testparse[] = { 4, 116, 101, 115, 116, 4200 };
+ int ret;
+
+ char *string = "wes", *string2 = "dawn", *string3 = "test";
+
+ struct header_complex_index *thestorage = NULL;
+
+ debug_register_tokens("header_complex");
+ snmp_set_do_debugging(1);
+
+ vars = NULL;
+ len2 = sizeof(ltmp);
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_INTEGER, (char *) &ltmp,
+ len2);
+ header_complex_add_data(&thestorage, vars, ourprefix);
+
+ vars = NULL;
+ len2 = strlen(string);
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, string, len2);
+ header_complex_add_data(&thestorage, vars, ourprefix);
+
+ vars = NULL;
+ len2 = sizeof(ltmp2);
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_INTEGER, (char *) &ltmp2,
+ len2);
+ header_complex_add_data(&thestorage, vars, ourprefix);
+
+ vars = NULL;
+ len2 = strlen(string2);
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, string2,
+ len2);
+ header_complex_add_data(&thestorage, vars, ourprefix);
+
+ vars = NULL;
+ len2 = sizeof(ltmp3);
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_INTEGER, (char *) &ltmp3,
+ len2);
+ header_complex_add_data(&thestorage, vars, ourprefix);
+
+ vars = NULL;
+ len2 = strlen(string3);
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, string3,
+ len2);
+ len2 = sizeof(ltmp4);
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_INTEGER, (char *) &ltmp4,
+ len2);
+ header_complex_add_data(&thestorage, vars, ourprefix);
+
+ header_complex_dump(thestorage);
+
+ vars = NULL;
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_OCTET_STR, NULL, 0);
+ snmp_varlist_add_variable(&vars, NULL, 0, ASN_INTEGER, NULL, 0);
+ ret =
+ header_complex_parse_oid(testparse,
+ sizeof(testparse) / sizeof(oid), vars);
+ DEBUGMSGTL(("header_complex_test", "parse returned %d...\n", ret));
+
+}
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/header_complex.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/header_complex.h
new file mode 100644
index 0000000000..2028ceed82
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/header_complex.h
@@ -0,0 +1,72 @@
+/*
+ * header_complex.h: More complex storage and data sorting for mib modules
+ */
+#ifndef _MIBGROUP_HEADER_COMPLEX_H
+#define _MIBGROUP_HEADER_COMPLEX_H
+
+struct header_complex_index {
+ oid *name;
+ size_t namelen;
+ void *data;
+ struct header_complex_index *next;
+ struct header_complex_index *prev;
+};
+
+/*
+ * Function pointer called by the header_comlpex functions when a client pointer (void * to us) needs to be cleaned.
+ */
+
+typedef void (HeaderComplexCleaner) (void *);
+void *header_complex(struct header_complex_index *datalist,
+ struct variable *vp, oid * name,
+ size_t * length, int exact,
+ size_t * var_len,
+ WriteMethod ** write_method);
+
+int header_complex_generate_varoid(netsnmp_variable_list *
+ var);
+int header_complex_parse_oid(oid * oidIndex, size_t oidLen,
+ netsnmp_variable_list * data);
+void header_complex_generate_oid(oid * name, size_t * length,
+ oid * prefix,
+ size_t prefix_len,
+ netsnmp_variable_list * data);
+void header_complex_free_all(struct header_complex_index
+ *thestuff,
+ HeaderComplexCleaner * cleaner);
+void header_complex_free_entry(struct header_complex_index
+ *theentry,
+ HeaderComplexCleaner * cleaner);
+void *header_complex_extract_entry(struct header_complex_index
+ **thetop,
+ struct header_complex_index
+ *thespot);
+struct header_complex_index *header_complex_find_entry(struct
+ header_complex_index
+ *thestuff,
+ void *entry);
+
+void *header_complex_get(struct header_complex_index *datalist,
+ netsnmp_variable_list * index);
+void *header_complex_get_from_oid(struct header_complex_index
+ *datalist, oid * searchfor,
+ size_t searchfdor_len);
+
+struct header_complex_index *header_complex_add_data(struct
+ header_complex_index
+ **thedata,
+ netsnmp_variable_list
+ * var, void *data);
+
+/*
+ * Note: newoid is copied/cloned for you
+ */
+struct header_complex_index *header_complex_add_data_by_oid(struct
+ header_complex_index
+ **thedata,
+ oid * newoid,
+ size_t
+ newoid_len,
+ void *data);
+
+#endif /* _MIBGROUP_HEADER_COMPLEX_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host.h
new file mode 100644
index 0000000000..4b7870686f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host.h
@@ -0,0 +1,85 @@
+/*
+ * Host Resources 'wrapper' interface
+ * calls the per-group interfaces from 'hr_*.h'
+ */
+
+ config_require(host/hr_system)
+ config_require(host/hr_storage)
+ config_require(host/hr_device)
+ config_require(host/hr_other)
+ config_require(host/hr_proc)
+ config_require(host/hr_network)
+ config_require(host/hr_print)
+ config_require(host/hr_disk)
+ config_require(host/hr_partition)
+ config_require(host/hr_filesys)
+ config_require(host/hr_swrun)
+ config_require(host/hr_swinst)
+
+/* add the host resources mib to the default mibs to load */
+config_add_mib(HOST-RESOURCES-MIB)
+config_add_mib(HOST-RESOURCES-TYPES)
+
+/*********************************************
+ *
+ * A few words about the design of the Host Resources
+ * implementation - particularly as regards the hrDevice
+ * group and hrDeviceIndex. This (and hrStorageIndex) make
+ * use of the non-consecutive nature of SNMP instance identifiers.
+ *
+ * hrDeviceIndex is structured in a 'major/minor' form,
+ * with the high end indicating the type of device
+ * (following the enumerations of hrDeviceType) and the low
+ * end being used to differentiate between devices of that type.
+ *
+ * The implementation of walking through the available devices
+ * uses a pair of arrays of functions - indexed by hrDeviceType
+ * These are used to perform any initialisation needed for that
+ * type of device, and to step through the instances of that type.
+ * This latter 'get_next' routing returns the hrDeviceIndex (including
+ * the hrDeviceType major number), or -1 if there are no further
+ * instances of that type.
+ * When all devices of a particular type have been processed, the
+ * initialisation function for the next device type is called,
+ * and so on until all devices have been proceesed.
+ *
+ * Similar arrays are used to provide type-specific functions to
+ * return the "common" device information (description, ID, status
+ * and error count), and to save any internal structures needed
+ * to provide these.
+ * A final array is used to indicate whether hrDeviceIndexes are
+ * returned in a random order, or strictly increasing. In the
+ * latter case, this allows the search for a particular index to
+ * terminate as soon as the 'next' device is reached, without needing
+ * to check the rest of them. Similarly, once a particular type of
+ * device has been scanned, further types will not be examined unless
+ * a suitable index has not yet been found.
+ *
+ * The index used for hrFSIndex is also used as hrStorageIndex,
+ * for those storage areas corresponding to filestore.
+ * Additional storage areas (such as memory or swap space) are
+ * distinguished by index values greater than a defined constant.
+ * Currently these are individually defined entries, but other
+ * ranges could be implemented similarly.
+ * If hrFSIndex was re-implemented to reflect internal identifiers,
+ * it would be possible to reverse the sense of the current
+ * implementation, with non-filestore storage having indices
+ * less than a defined constant, rather than greater.
+ *
+ *
+ * Much of the detailed implementation of this group (as opposed to
+ * the implementation infrastructure outlined about) is likely to
+ * be very system-specific.
+ * The initial implementation (for HP-UX 9 and Linux) should be
+ * regarded as a 'proof of concept' example, rather than as
+ * finished, releasable code. This particularly hold for the
+ * disk device discovery code, which is gross in the extreme,
+ * and should never have seen the light of day!
+ * Hopefully this can be ripped out and given a quiet burial as
+ * soon as is decently possible.
+ *
+ * Now it's up to the rest of you to hammer this into some sort of
+ * sensible shape.
+ * Dave Shield
+ *
+ *********************************************/
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_device.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_device.c
new file mode 100644
index 0000000000..86db54ad39
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_device.c
@@ -0,0 +1,350 @@
+/*
+ * Host Resources MIB - Device group implementation - hr_device.c
+ *
+ */
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include "host_res.h"
+#include "hr_device.h"
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+int Get_Next_Device(void);
+
+PFV init_device[HRDEV_TYPE_MAX];
+PFIV next_device[HRDEV_TYPE_MAX];
+PFV save_device[HRDEV_TYPE_MAX];
+int dev_idx_inc[HRDEV_TYPE_MAX];
+
+PFS device_descr[HRDEV_TYPE_MAX];
+PFO device_prodid[HRDEV_TYPE_MAX];
+PFI device_status[HRDEV_TYPE_MAX];
+PFI device_errors[HRDEV_TYPE_MAX];
+
+int current_type;
+
+void Init_Device(void);
+int header_hrdevice(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod **);
+
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+#define HRDEV_INDEX 1
+#define HRDEV_TYPE 2
+#define HRDEV_DESCR 3
+#define HRDEV_ID 4
+#define HRDEV_STATUS 5
+#define HRDEV_ERRORS 6
+
+struct variable4 hrdevice_variables[] = {
+ {HRDEV_INDEX, ASN_INTEGER, RONLY, var_hrdevice, 2, {1, 1}},
+ {HRDEV_TYPE, ASN_OBJECT_ID, RONLY, var_hrdevice, 2, {1, 2}},
+ {HRDEV_DESCR, ASN_OCTET_STR, RONLY, var_hrdevice, 2, {1, 3}},
+ {HRDEV_ID, ASN_OBJECT_ID, RONLY, var_hrdevice, 2, {1, 4}},
+ {HRDEV_STATUS, ASN_INTEGER, RONLY, var_hrdevice, 2, {1, 5}},
+ {HRDEV_ERRORS, ASN_COUNTER, RONLY, var_hrdevice, 2, {1, 6}}
+};
+oid hrdevice_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 3, 2 };
+
+
+void
+init_hr_device(void)
+{
+ int i;
+
+ /*
+ * Initially assume no devices
+ * Insert pointers to initialisation/get_next routines
+ * for particular device types as they are implemented
+ * (set up in the appropriate 'init_*()' routine )
+ */
+
+ for (i = 0; i < HRDEV_TYPE_MAX; ++i) {
+ init_device[i] = NULL;
+ next_device[i] = NULL;
+ save_device[i] = NULL;
+ dev_idx_inc[i] = 0; /* Assume random indices */
+
+ device_descr[i] = NULL;
+ device_prodid[i] = NULL;
+ device_status[i] = NULL;
+ device_errors[i] = NULL;
+ }
+
+ REGISTER_MIB("host/hr_device", hrdevice_variables, variable4,
+ hrdevice_variables_oid);
+}
+
+
+/*
+ * header_hrdevice(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ *
+ */
+
+int
+header_hrdevice(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#define HRDEV_ENTRY_NAME_LENGTH 11
+ oid newname[MAX_OID_LEN];
+ int dev_idx, LowIndex = -1, LowType = -1;
+ int result;
+
+ DEBUGMSGTL(("host/hr_device", "var_hrdevice: "));
+ DEBUGMSGOID(("host/hr_device", name, *length));
+ DEBUGMSG(("host/hr_device", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+
+
+ /*
+ * Find the "next" device entry.
+ * If we're in the middle of the table, then there's
+ * no point in examining earlier types of devices,
+ * so set the starting type to that of the variable
+ * being queried.
+ * If we've moved from one column of the table to another,
+ * then we need to start at the beginning again.
+ * (i.e. the 'compare' fails to match)
+ * Similarly if we're at the start of the table
+ * (i.e. *length is too short to be a full instance)
+ */
+
+ if ((snmp_oid_compare(vp->name, vp->namelen, name, vp->namelen) == 0)
+ && (*length > HRDEV_ENTRY_NAME_LENGTH))
+ current_type = (name[HRDEV_ENTRY_NAME_LENGTH] >> HRDEV_TYPE_SHIFT);
+ else
+ current_type = 0;
+
+ Init_Device();
+ for (;;) {
+ dev_idx = Get_Next_Device();
+ DEBUGMSG(("host/hr_device", "(index %d ....", dev_idx));
+ if (dev_idx == -1)
+ break;
+ if (LowType != -1 && LowType < (dev_idx >> HRDEV_TYPE_SHIFT))
+ break;
+ newname[HRDEV_ENTRY_NAME_LENGTH] = dev_idx;
+ DEBUGMSGOID(("host/hr_device", newname, *length));
+ DEBUGMSG(("host/hr_device", "\n"));
+ result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);
+ if (exact && (result == 0)) {
+ if (save_device[current_type] != NULL)
+ (*save_device[current_type]) ();
+ LowIndex = dev_idx;
+ break;
+ }
+ if ((!exact && (result < 0)) &&
+ (LowIndex == -1 || dev_idx < LowIndex)) {
+ if (save_device[current_type] != NULL)
+ (*save_device[current_type]) ();
+ LowIndex = dev_idx;
+ LowType = (dev_idx >> HRDEV_TYPE_SHIFT);
+ if (dev_idx_inc[LowType]) /* Increasing indices => now done */
+ break;
+ }
+
+ }
+
+ if (LowIndex == -1) {
+ DEBUGMSGTL(("host/hr_device", "... index out of range\n"));
+ return (MATCH_FAILED);
+ }
+
+ newname[HRDEV_ENTRY_NAME_LENGTH] = LowIndex;
+ memcpy((char *) name, (char *) newname,
+ ((int) vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ DEBUGMSGTL(("host/hr_device", "... get device stats "));
+ DEBUGMSGOID(("host/hr_device", name, *length));
+ DEBUGMSG(("host/hr_device", "\n"));
+
+ return LowIndex;
+}
+
+
+oid device_type_id[] = { 1, 3, 6, 1, 2, 1, 25, 3, 1, 99 }; /* hrDeviceType99 */
+int device_type_len =
+ sizeof(device_type_id) / sizeof(device_type_id[0]);
+
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+
+u_char *
+var_hrdevice(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int dev_idx, type;
+ oid *oid_p;
+ const char *tmp_str;
+ static char string[1024];
+
+really_try_next:
+ dev_idx =
+ header_hrdevice(vp, name, length, exact, var_len, write_method);
+ if (dev_idx == MATCH_FAILED)
+ return NULL;
+
+ type = (dev_idx >> HRDEV_TYPE_SHIFT);
+
+ switch (vp->magic) {
+ case HRDEV_INDEX:
+ long_return = dev_idx;
+ return (u_char *) & long_return;
+ case HRDEV_TYPE:
+ device_type_id[device_type_len - 1] = type;
+ *var_len = sizeof(device_type_id);
+ return (u_char *) device_type_id;
+ case HRDEV_DESCR:
+ if ((device_descr[type] != NULL) &&
+ (NULL!=(tmp_str=((*device_descr[type])(dev_idx))))) {
+ strncpy(string, tmp_str, sizeof(string)-1);
+ string[ sizeof(string)-1] = 0;
+ } else
+#if NETSNMP_NO_DUMMY_VALUES
+ goto try_next;
+#else
+ sprintf(string, "a black box of some sort");
+#endif
+ *var_len = strlen(string);
+ return (u_char *) string;
+ case HRDEV_ID:
+ if (device_prodid[type] != NULL)
+ oid_p = ((*device_prodid[type]) (dev_idx, var_len));
+ else {
+ oid_p = nullOid;
+ *var_len = nullOidLen;
+ }
+ return (u_char *) oid_p;
+ case HRDEV_STATUS:
+ if (device_status[type] != NULL)
+ long_return = ((*device_status[type]) (dev_idx));
+ else
+#if NETSNMP_NO_DUMMY_VALUES
+ goto try_next;
+#else
+ long_return = 2; /* Assume running */
+#endif
+ if ( !long_return )
+ goto try_next;
+ return (u_char *) & long_return;
+ case HRDEV_ERRORS:
+ if (device_errors[type] != NULL)
+ long_return = (*device_errors[type]) (dev_idx);
+ else
+#if NETSNMP_NO_DUMMY_VALUES
+ goto try_next;
+#else
+ long_return = 0; /* Assume OK */
+#endif
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_hrdevice\n",
+ vp->magic));
+ }
+
+ try_next:
+ if (!exact)
+ goto really_try_next;
+
+ return NULL;
+}
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+
+void
+Init_Device(void)
+{
+ /*
+ * Find the first non-NULL initialisation function
+ * and call it
+ */
+ while (current_type < HRDEV_TYPE_MAX &&
+ init_device[current_type] == NULL)
+ if (++current_type >= HRDEV_TYPE_MAX)
+ return;
+ /* Check current_type, if >= MAX first time into loop, would fail below */
+ if (current_type < HRDEV_TYPE_MAX)
+ (*init_device[current_type]) ();
+}
+
+int
+Get_Next_Device(void)
+{
+ int result = -1;
+
+ /*
+ * Call the 'next device' function for the current
+ * type of device
+ *
+ * TODO: save the necessary information about that device
+ */
+ if (current_type < HRDEV_TYPE_MAX && next_device[current_type] != NULL)
+ result = (*next_device[current_type]) ();
+
+ /*
+ * No more devices of the current type.
+ * Try the next type (if any)
+ */
+ if (result == -1) {
+ if (++current_type >= HRDEV_TYPE_MAX) {
+ current_type = 0;
+ return -1;
+ }
+ Init_Device();
+ return Get_Next_Device();
+ }
+ return result;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_device.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_device.h
new file mode 100644
index 0000000000..0e29489a9d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_device.h
@@ -0,0 +1,11 @@
+/*
+ * Host Resources MIB - device group interface - hr_device.h
+ *
+ */
+#ifndef _MIBGROUP_HRDEVICE_H
+#define _MIBGROUP_HRDEVICE_H
+
+extern void init_hr_device(void);
+extern FindVarMethod var_hrdevice;
+
+#endif /* _MIBGROUP_HRDEVICE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_disk.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_disk.c
new file mode 100644
index 0000000000..e4c5b9595f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_disk.c
@@ -0,0 +1,1024 @@
+/*
+ * Host Resources MIB - disk device group implementation - hr_disk.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include "host_res.h"
+#include "hr_disk.h"
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <fcntl.h>
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_KVM_H
+#include <kvm.h>
+#endif
+#if HAVE_DIRENT_H
+#include <dirent.h>
+#else
+# define dirent direct
+# if HAVE_SYS_NDIR_H
+# include <sys/ndir.h>
+# endif
+# if HAVE_SYS_DIR_H
+# include <sys/dir.h>
+# endif
+# if HAVE_NDIR_H
+# include <ndir.h>
+# endif
+#endif
+#if HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+
+#if HAVE_SYS_DKIO_H
+#include <sys/dkio.h>
+#endif
+#if HAVE_SYS_DISKIO_H /* HP-UX only ? */
+#include <sys/diskio.h>
+#endif
+#if HAVE_LINUX_HDREG_H
+#include <linux/hdreg.h>
+#endif
+#if HAVE_SYS_DISKLABEL_H
+#define DKTYPENAMES
+#include <sys/disklabel.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#if HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+#ifdef linux
+/*
+ * define BLKGETSIZE from <linux/fs.h>:
+ * Note: cannot include this file completely due to errors with redefinition
+ * of structures (at least with older linux versions) --jsf
+ */
+#define BLKGETSIZE _IO(0x12,96) /* return device size */
+#endif
+
+#include <net-snmp/agent/agent_read_config.h>
+#include <net-snmp/library/read_config.h>
+
+#define HRD_MONOTONICALLY_INCREASING
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+void Init_HR_Disk(void);
+int Get_Next_HR_Disk(void);
+int Get_Next_HR_Disk_Partition(char *, size_t, int);
+static void Add_HR_Disk_entry(const char *, int, int, int, int,
+ const char *, int, int);
+static void Save_HR_Disk_General(void);
+static void Save_HR_Disk_Specific(void);
+static int Query_Disk(int, const char *);
+static int Is_It_Writeable(void);
+static int What_Type_Disk(void);
+static int Is_It_Removeable(void);
+static const char *describe_disk(int);
+
+int header_hrdisk(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod **);
+
+static int HRD_type_index;
+static int HRD_index;
+static char HRD_savedModel[40];
+static long HRD_savedCapacity = 1044;
+static int HRD_savedFlags;
+static time_t HRD_history[HRDEV_TYPE_MASK + 1];
+
+#ifdef DIOC_DESCRIBE
+static disk_describe_type HRD_info;
+static capacity_type HRD_cap;
+
+static int HRD_savedIntf_type;
+static int HRD_savedDev_type;
+#endif
+
+#ifdef DKIOCINFO
+static struct dk_cinfo HRD_info;
+static struct dk_geom HRD_cap;
+
+static int HRD_savedCtrl_type;
+#endif
+
+#ifdef HAVE_LINUX_HDREG_H
+static struct hd_driveid HRD_info;
+#endif
+
+#ifdef DIOCGDINFO
+static struct disklabel HRD_info;
+#endif
+
+static void parse_disk_config(const char *, char *);
+static void free_disk_config(void);
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+#define HRDISK_ACCESS 1
+#define HRDISK_MEDIA 2
+#define HRDISK_REMOVEABLE 3
+#define HRDISK_CAPACITY 4
+
+struct variable4 hrdisk_variables[] = {
+ {HRDISK_ACCESS, ASN_INTEGER, RONLY, var_hrdisk, 2, {1, 1}},
+ {HRDISK_MEDIA, ASN_INTEGER, RONLY, var_hrdisk, 2, {1, 2}},
+ {HRDISK_REMOVEABLE, ASN_INTEGER, RONLY, var_hrdisk, 2, {1, 3}},
+ {HRDISK_CAPACITY, ASN_INTEGER, RONLY, var_hrdisk, 2, {1, 4}}
+};
+oid hrdisk_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 3, 6 };
+
+
+void
+init_hr_disk(void)
+{
+ int i;
+
+ init_device[HRDEV_DISK] = Init_HR_Disk;
+ next_device[HRDEV_DISK] = Get_Next_HR_Disk;
+ save_device[HRDEV_DISK] = Save_HR_Disk_General;
+#ifdef HRD_MONOTONICALLY_INCREASING
+ dev_idx_inc[HRDEV_DISK] = 1;
+#endif
+
+#if defined(linux)
+ Add_HR_Disk_entry("/dev/hd%c%d", -1, -1, 'a', 'l', "/dev/hd%c", 1, 15);
+ Add_HR_Disk_entry("/dev/sd%c%d", -1, -1, 'a', 'p', "/dev/sd%c", 1, 15);
+ Add_HR_Disk_entry("/dev/md%d", -1, -1, 0, 3, "/dev/md%d", 0, 0);
+ Add_HR_Disk_entry("/dev/fd%d", -1, -1, 0, 1, "/dev/fd%d", 0, 0);
+#elif defined(hpux)
+#if defined(hpux10) || defined(hpux11)
+ Add_HR_Disk_entry("/dev/rdsk/c%dt%xd%d", 0, 1, 0, 15,
+ "/dev/rdsk/c%dt%xd0", 0, 4);
+#else /* hpux9 */
+ Add_HR_Disk_entry("/dev/rdsk/c%dd%xs%d", 201, 201, 0, 15,
+ "/dev/rdsk/c%dd%xs0", 0, 4);
+#endif
+#elif defined(solaris2)
+ Add_HR_Disk_entry("/dev/rdsk/c%dt%dd0s%d", 0, 7, 0, 15,
+ "/dev/rdsk/c%dt%dd0s0", 0, 7);
+ Add_HR_Disk_entry("/dev/rdsk/c%dd%ds%d", 0, 7, 0, 15,
+ "/dev/rdsk/c%dd%ds0", 0, 7);
+#elif defined(freebsd4) || defined(freebsd5)
+ Add_HR_Disk_entry("/dev/ad%ds%d%c", 0, 1, 1, 4, "/dev/ad%ds%d", 'a', 'h');
+ Add_HR_Disk_entry("/dev/da%ds%d%c", 0, 1, 1, 4, "/dev/da%ds%d", 'a', 'h');
+#elif defined(freebsd3)
+ Add_HR_Disk_entry("/dev/wd%ds%d%c", 0, 1, 1, 4, "/dev/wd%ds%d", 'a',
+ 'h');
+ Add_HR_Disk_entry("/dev/sd%ds%d%c", 0, 1, 1, 4, "/dev/sd%ds%d", 'a',
+ 'h');
+#elif defined(freebsd2)
+ Add_HR_Disk_entry("/dev/wd%d%c", -1, -1, 0, 3, "/dev/wd%d", 'a', 'h');
+ Add_HR_Disk_entry("/dev/sd%d%c", -1, -1, 0, 3, "/dev/sd%d", 'a', 'h');
+#elif defined(netbsd1)
+ Add_HR_Disk_entry("/dev/wd%d%c", -1, -1, 0, 3, "/dev/wd%dc", 'a', 'h');
+ Add_HR_Disk_entry("/dev/sd%d%c", -1, -1, 0, 3, "/dev/sd%dc", 'a', 'h');
+#endif
+
+ device_descr[HRDEV_DISK] = describe_disk;
+ HRD_savedModel[0] = '\0';
+ HRD_savedCapacity = 0;
+
+ for (i = 0; i < HRDEV_TYPE_MASK; ++i)
+ HRD_history[i] = -1;
+
+ REGISTER_MIB("host/hr_disk", hrdisk_variables, variable4,
+ hrdisk_variables_oid);
+
+ snmpd_register_config_handler("ignoredisk", parse_disk_config,
+ free_disk_config, "name");
+}
+
+#define ITEM_STRING 1
+#define ITEM_SET 2
+#define ITEM_STAR 3
+#define ITEM_ANY 4
+
+typedef unsigned char details_set[32];
+
+typedef struct _conf_disk_item {
+ int item_type; /* ITEM_STRING, ITEM_SET, ITEM_STAR, ITEM_ANY */
+ void *item_details; /* content depends upon item_type */
+ struct _conf_disk_item *item_next;
+} conf_disk_item;
+
+typedef struct _conf_disk_list {
+ conf_disk_item *list_item;
+ struct _conf_disk_list *list_next;
+} conf_disk_list;
+static conf_disk_list *conf_list = NULL;
+
+static int match_disk_config(const char *);
+static int match_disk_config_item(const char *, conf_disk_item *);
+
+static void
+parse_disk_config(const char *token, char *cptr)
+{
+ conf_disk_list *d_new = 0;
+ conf_disk_item *di_curr = 0;
+ details_set *d_set = 0;
+ char *name = 0, *p = 0, *d_str = 0, c;
+ unsigned int i, neg, c1, c2;
+ char *st = 0;
+
+ name = strtok_r(cptr, " \t", &st);
+ if (!name) {
+ config_perror("Missing NAME parameter");
+ return;
+ }
+ d_new = (conf_disk_list *) malloc(sizeof(conf_disk_list));
+ if (!d_new) {
+ config_perror("Out of memory");
+ return;
+ }
+ di_curr = (conf_disk_item *) malloc(sizeof(conf_disk_item));
+ if (!di_curr) {
+ SNMP_FREE(d_new);
+ config_perror("Out of memory");
+ return;
+ }
+ d_new->list_item = di_curr;
+ /* XXX: on error/return conditions we need to free the entire new
+ list, not just the last node like this is doing! */
+ for (;;) {
+ if (*name == '?') {
+ di_curr->item_type = ITEM_ANY;
+ di_curr->item_details = (void *) 0;
+ name++;
+ } else if (*name == '*') {
+ di_curr->item_type = ITEM_STAR;
+ di_curr->item_details = (void *) 0;
+ name++;
+ } else if (*name == '[') {
+ d_set = (details_set *) malloc(sizeof(details_set));
+ if (!d_set) {
+ config_perror("Out of memory");
+ SNMP_FREE(d_new);
+ SNMP_FREE(di_curr);
+ SNMP_FREE(d_set);
+ SNMP_FREE(d_str);
+ return;
+ }
+ for (i = 0; i < sizeof(details_set); i++)
+ (*d_set)[i] = (unsigned char) 0;
+ name++;
+ if (*name == '^' || *name == '!') {
+ neg = 1;
+ name++;
+ } else {
+ neg = 0;
+ }
+ while (*name && *name != ']') {
+ c1 = ((unsigned int) *name++) & 0xff;
+ if (*name == '-' && *(name + 1) != ']') {
+ name++;
+ c2 = ((unsigned int) *name++) & 0xff;
+ } else {
+ c2 = c1;
+ }
+ for (i = c1; i <= c2; i++)
+ (*d_set)[i / 8] |= (unsigned char) (1 << (i % 8));
+ }
+ if (*name != ']') {
+ config_perror
+ ("Syntax error in NAME: invalid set specified");
+ SNMP_FREE(d_new);
+ SNMP_FREE(di_curr);
+ SNMP_FREE(d_set);
+ SNMP_FREE(d_str);
+ return;
+ }
+ if (neg) {
+ for (i = 0; i < sizeof(details_set); i++)
+ (*d_set)[i] = (*d_set)[i] ^ (unsigned char) 0xff;
+ }
+ di_curr->item_type = ITEM_SET;
+ di_curr->item_details = (void *) d_set;
+ name++;
+ } else {
+ for (p = name;
+ *p != '\0' && *p != '?' && *p != '*' && *p != '['; p++);
+ c = *p;
+ *p = '\0';
+ d_str = (char *) malloc(strlen(name) + 1);
+ if (!d_str) {
+ SNMP_FREE(d_new);
+ SNMP_FREE(d_str);
+ SNMP_FREE(di_curr);
+ SNMP_FREE(d_set);
+ config_perror("Out of memory");
+ return;
+ }
+ strcpy(d_str, name);
+ *p = c;
+ di_curr->item_type = ITEM_STRING;
+ di_curr->item_details = (void *) d_str;
+ name = p;
+ }
+ if (!*name) {
+ di_curr->item_next = (conf_disk_item *) 0;
+ break;
+ }
+ di_curr->item_next =
+ (conf_disk_item *) malloc(sizeof(conf_disk_item));
+ if (!di_curr->item_next) {
+ SNMP_FREE(di_curr->item_next);
+ SNMP_FREE(d_new);
+ SNMP_FREE(di_curr);
+ SNMP_FREE(d_set);
+ SNMP_FREE(d_str);
+ config_perror("Out of memory");
+ return;
+ }
+ di_curr = di_curr->item_next;
+ }
+ d_new->list_next = conf_list;
+ conf_list = d_new;
+}
+
+static void
+free_disk_config(void)
+{
+ conf_disk_list *d_ptr = conf_list, *d_next;
+ conf_disk_item *di_ptr, *di_next;
+
+ while (d_ptr) {
+ d_next = d_ptr->list_next;
+ di_ptr = d_ptr->list_item;
+ while (di_ptr) {
+ di_next = di_ptr->item_next;
+ if (di_ptr->item_details)
+ free(di_ptr->item_details);
+ free((void *) di_ptr);
+ di_ptr = di_next;
+ }
+ free((void *) d_ptr);
+ d_ptr = d_next;
+ }
+ conf_list = (conf_disk_list *) 0;
+}
+
+static int
+match_disk_config_item(const char *name, conf_disk_item * di_ptr)
+{
+ int result = 0;
+ size_t len;
+ details_set *d_set;
+ unsigned int c;
+
+ if (di_ptr) {
+ switch (di_ptr->item_type) {
+ case ITEM_STRING:
+ len = strlen((const char *) di_ptr->item_details);
+ if (!strncmp(name, (const char *) di_ptr->item_details, len))
+ result = match_disk_config_item(name + len,
+ di_ptr->item_next);
+ break;
+ case ITEM_SET:
+ if (*name) {
+ d_set = (details_set *) di_ptr->item_details;
+ c = ((unsigned int) *name) & 0xff;
+ if ((*d_set)[c / 8] & (unsigned char) (1 << (c % 8)))
+ result = match_disk_config_item(name + 1,
+ di_ptr->item_next);
+ }
+ break;
+ case ITEM_STAR:
+ if (di_ptr->item_next) {
+ for (; !result && *name; name++)
+ result = match_disk_config_item(name,
+ di_ptr->item_next);
+ } else {
+ result = 1;
+ }
+ break;
+ case ITEM_ANY:
+ if (*name)
+ result = match_disk_config_item(name + 1,
+ di_ptr->item_next);
+ break;
+ }
+ } else {
+ if (*name == '\0')
+ result = 1;
+ }
+
+ return result;
+}
+
+static int
+match_disk_config(const char *name)
+{
+ conf_disk_list *d_ptr = conf_list;
+
+ while (d_ptr) {
+ if (match_disk_config_item(name, d_ptr->list_item))
+ return 1; /* match found in ignorelist */
+ d_ptr = d_ptr->list_next;
+ }
+
+ /*
+ * no match in ignorelist
+ */
+ return 0;
+}
+
+/*
+ * header_hrdisk(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ */
+
+int
+header_hrdisk(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#define HRDISK_ENTRY_NAME_LENGTH 11
+ oid newname[MAX_OID_LEN];
+ int disk_idx, LowIndex = -1;
+ int result;
+
+ DEBUGMSGTL(("host/hr_disk", "var_hrdisk: "));
+ DEBUGMSGOID(("host/hr_disk", name, *length));
+ DEBUGMSG(("host/hr_disk", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+ /*
+ * Find "next" disk entry
+ */
+
+ Init_HR_Disk();
+ for (;;) {
+ disk_idx = Get_Next_HR_Disk();
+ if (disk_idx == -1)
+ break;
+ newname[HRDISK_ENTRY_NAME_LENGTH] = disk_idx;
+ result =
+ snmp_oid_compare(name, *length, newname,
+ (int) vp->namelen + 1);
+ if (exact && (result == 0)) {
+ LowIndex = disk_idx;
+ Save_HR_Disk_Specific();
+ break;
+ }
+ if ((!exact && (result < 0)) &&
+ (LowIndex == -1 || disk_idx < LowIndex)) {
+ LowIndex = disk_idx;
+ Save_HR_Disk_Specific();
+#ifdef HRD_MONOTONICALLY_INCREASING
+ break;
+#endif
+ }
+ }
+
+ if (LowIndex == -1) {
+ DEBUGMSGTL(("host/hr_disk", "... index out of range\n"));
+ return (MATCH_FAILED);
+ }
+
+ newname[HRDISK_ENTRY_NAME_LENGTH] = LowIndex;
+ memcpy((char *) name, (char *) newname,
+ ((int) vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ DEBUGMSGTL(("host/hr_disk", "... get disk stats "));
+ DEBUGMSGOID(("host/hr_disk", name, *length));
+ DEBUGMSG(("host/hr_disk", "\n"));
+
+ return LowIndex;
+}
+
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+
+u_char *
+var_hrdisk(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int disk_idx;
+
+ disk_idx =
+ header_hrdisk(vp, name, length, exact, var_len, write_method);
+ if (disk_idx == MATCH_FAILED)
+ return NULL;
+
+
+ switch (vp->magic) {
+ case HRDISK_ACCESS:
+ long_return = Is_It_Writeable();
+ return (u_char *) & long_return;
+ case HRDISK_MEDIA:
+ long_return = What_Type_Disk();
+ return (u_char *) & long_return;
+ case HRDISK_REMOVEABLE:
+ long_return = Is_It_Removeable();
+ return (u_char *) & long_return;
+ case HRDISK_CAPACITY:
+ long_return = HRD_savedCapacity;
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_hrdisk\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+#define MAX_NUMBER_DISK_TYPES 16 /* probably should be a variable */
+#define MAX_DISKS_PER_TYPE 15 /* SCSI disks - not a hard limit */
+#define HRDISK_TYPE_SHIFT 4 /* log2 (MAX_DISKS_PER_TYPE+1) */
+
+typedef struct {
+ const char *disk_devpart_string; /* printf() format disk part. name */
+ short disk_controller; /* controller id or -1 if NA */
+ short disk_device_first; /* first device id */
+ short disk_device_last; /* last device id */
+ const char *disk_devfull_string; /* printf() format full disk name */
+ short disk_partition_first; /* first partition id */
+ short disk_partition_last; /* last partition id */
+} HRD_disk_t;
+
+static HRD_disk_t disk_devices[MAX_NUMBER_DISK_TYPES];
+static int HR_number_disk_types = 0;
+
+static void
+Add_HR_Disk_entry(const char *devpart_string,
+ int first_ctl,
+ int last_ctl,
+ int first_dev,
+ int last_dev,
+ const char *devfull_string,
+ int first_partn, int last_partn)
+{
+ int lodev, hidev, nbr_created = 0;
+
+ while (first_ctl <= last_ctl) {
+ for (lodev = first_dev;
+ lodev < last_dev && MAX_NUMBER_DISK_TYPES > HR_number_disk_types;
+ lodev += (1+MAX_DISKS_PER_TYPE), HR_number_disk_types++)
+ {
+ nbr_created++;
+ /*
+ * Split long runs of disks into separate "types"
+ */
+ hidev = lodev + MAX_DISKS_PER_TYPE;
+ if (last_dev < hidev)
+ hidev = last_dev;
+ disk_devices[HR_number_disk_types].disk_devpart_string =
+ devpart_string;
+ disk_devices[HR_number_disk_types].disk_controller = first_ctl;
+ disk_devices[HR_number_disk_types].disk_device_first = lodev;
+ disk_devices[HR_number_disk_types].disk_device_last = hidev;
+ disk_devices[HR_number_disk_types].disk_devfull_string =
+ devfull_string;
+ disk_devices[HR_number_disk_types].disk_partition_first =
+ first_partn;
+ disk_devices[HR_number_disk_types].disk_partition_last =
+ last_partn;
+#if DEBUG_TEST
+ DEBUGMSGTL(("host/hr_disk",
+ "Add_HR %02d '%s' first=%d last=%d\n",
+ HR_number_disk_types, devpart_string, lodev, hidev));
+#endif
+ }
+ first_ctl++;
+ }
+
+ if (nbr_created == 0 || MAX_NUMBER_DISK_TYPES < HR_number_disk_types) {
+ HR_number_disk_types = MAX_NUMBER_DISK_TYPES;
+ DEBUGMSGTL(("host/hr_disk",
+ "WARNING! Add_HR_Disk_entry '%s' incomplete, %d created\n",
+ devpart_string, nbr_created));
+ }
+#if DEBUG_TEST
+ else
+ DEBUGMSGTL(("host/hr_disk",
+ "Add_HR_Disk_entry '%s' completed, %d created\n",
+ devpart_string, nbr_created));
+#endif
+}
+
+void
+Init_HR_Disk(void)
+{
+ HRD_type_index = 0;
+ HRD_index = -1;
+ DEBUGMSGTL(("host/hr_disk", "Init_Disk\n"));
+}
+
+int
+Get_Next_HR_Disk(void)
+{
+ char string[1024];
+ int fd, result;
+ int iindex;
+ int max_disks;
+ time_t now;
+
+ HRD_index++;
+ (void *) time(&now);
+ DEBUGMSGTL(("host/hr_disk", "Next_Disk type %d of %d\n",
+ HRD_type_index, HR_number_disk_types));
+ while (HRD_type_index < HR_number_disk_types) {
+ max_disks = disk_devices[HRD_type_index].disk_device_last -
+ disk_devices[HRD_type_index].disk_device_first + 1;
+ DEBUGMSGTL(("host/hr_disk", "Next_Disk max %d of type %d\n",
+ max_disks, HRD_type_index));
+
+ while (HRD_index < max_disks) {
+ iindex = (HRD_type_index << HRDISK_TYPE_SHIFT) + HRD_index;
+
+ /*
+ * Check to see whether this device
+ * has been probed for 'recently'
+ * and skip if so.
+ * This has a *major* impact on run
+ * times (by a factor of 10!)
+ */
+ if ((HRD_history[iindex] > 0) &&
+ ((now - HRD_history[iindex]) < 60)) {
+ HRD_index++;
+ continue;
+ }
+
+ /*
+ * Construct the full device name in "string"
+ */
+ if (disk_devices[HRD_type_index].disk_controller != -1) {
+ snprintf(string, sizeof(string)-1,
+ disk_devices[HRD_type_index].disk_devfull_string,
+ disk_devices[HRD_type_index].disk_controller,
+ disk_devices[HRD_type_index].disk_device_first +
+ HRD_index);
+ } else {
+ snprintf(string, sizeof(string)-1,
+ disk_devices[HRD_type_index].disk_devfull_string,
+ disk_devices[HRD_type_index].disk_device_first +
+ HRD_index);
+ }
+ string[ sizeof(string)-1 ] = 0;
+
+ DEBUGMSGTL(("host/hr_disk", "Get_Next_HR_Disk: %s (%d/%d)\n",
+ string, HRD_type_index, HRD_index));
+
+ if (HRD_history[iindex] == -1) {
+ /*
+ * check whether this device is in the "ignoredisk" list in
+ * the config file. if yes this device will be marked as
+ * invalid for the future, i.e. it won't ever be checked
+ * again.
+ */
+ if (match_disk_config(string)) {
+ /*
+ * device name matches entry in ignoredisk list
+ */
+ DEBUGMSGTL(("host/hr_disk",
+ "Get_Next_HR_Disk: %s ignored\n", string));
+ HRD_history[iindex] = LONG_MAX;
+ HRD_index++;
+ continue;
+ }
+ }
+
+ /*
+ * use O_NDELAY to avoid CDROM spin-up and media detection
+ * * (too slow) --okir
+ */
+ /*
+ * at least with HP-UX 11.0 this doesn't seem to work properly
+ * * when accessing an empty CDROM device --jsf
+ */
+#ifdef O_NDELAY /* I'm sure everything has it, but just in case... --Wes */
+ fd = open(string, O_RDONLY | O_NDELAY);
+#else
+ fd = open(string, O_RDONLY);
+#endif
+ if (fd != -1) {
+ result = Query_Disk(fd, string);
+ close(fd);
+ if (result != -1) {
+ HRD_history[iindex] = 0;
+ return ((HRDEV_DISK << HRDEV_TYPE_SHIFT) + iindex);
+ }
+ }
+ HRD_history[iindex] = now;
+ HRD_index++;
+ }
+ HRD_type_index++;
+ HRD_index = 0;
+ }
+ HRD_index = -1;
+ return -1;
+}
+
+int
+Get_Next_HR_Disk_Partition(char *string, size_t str_len, int HRP_index)
+{
+ DEBUGMSGTL(("host/hr_disk", "Next_Partition type %d/%d:%d\n",
+ HRD_type_index, HRD_index, HRP_index));
+
+ /*
+ * no more partition names => return -1
+ */
+ if (disk_devices[HRD_type_index].disk_partition_last -
+ disk_devices[HRD_type_index].disk_partition_first + 1
+ <= HRP_index) {
+ return -1;
+ }
+
+ /*
+ * Construct the partition name in "string"
+ */
+ if (disk_devices[HRD_type_index].disk_controller != -1) {
+ snprintf(string, str_len-1,
+ disk_devices[HRD_type_index].disk_devpart_string,
+ disk_devices[HRD_type_index].disk_controller,
+ disk_devices[HRD_type_index].disk_device_first + HRD_index,
+ disk_devices[HRD_type_index].disk_partition_first +
+ HRP_index);
+ } else {
+ snprintf(string, str_len-1,
+ disk_devices[HRD_type_index].disk_devpart_string,
+ disk_devices[HRD_type_index].disk_device_first + HRD_index,
+ disk_devices[HRD_type_index].disk_partition_first +
+ HRP_index);
+ }
+ string[ str_len-1 ] = 0;
+
+ DEBUGMSGTL(("host/hr_disk",
+ "Get_Next_HR_Disk_Partition: %s (%d/%d:%d)\n", string,
+ HRD_type_index, HRD_index, HRP_index));
+
+ return 0;
+}
+
+static void
+Save_HR_Disk_Specific(void)
+{
+#ifdef DIOC_DESCRIBE
+ HRD_savedIntf_type = HRD_info.intf_type;
+ HRD_savedDev_type = HRD_info.dev_type;
+ HRD_savedFlags = HRD_info.flags;
+ HRD_savedCapacity = HRD_cap.lba / 2;
+#endif
+#ifdef DKIOCINFO
+ HRD_savedCtrl_type = HRD_info.dki_ctype;
+ HRD_savedFlags = HRD_info.dki_flags;
+ HRD_savedCapacity = HRD_cap.dkg_ncyl * HRD_cap.dkg_nhead * HRD_cap.dkg_nsect / 2; /* ??? */
+#endif
+#ifdef HAVE_LINUX_HDREG_H
+ HRD_savedCapacity = HRD_info.lba_capacity / 2;
+ HRD_savedFlags = HRD_info.config;
+#endif
+#ifdef DIOCGDINFO
+ HRD_savedCapacity = HRD_info.d_secperunit / 2;
+#endif
+}
+
+static void
+Save_HR_Disk_General(void)
+{
+#ifdef DIOC_DESCRIBE
+ strncpy(HRD_savedModel, HRD_info.model_num, sizeof(HRD_savedModel)-1);
+ HRD_savedModel[ sizeof(HRD_savedModel)-1 ] = 0;
+#endif
+#ifdef DKIOCINFO
+ strncpy(HRD_savedModel, HRD_info.dki_dname, sizeof(HRD_savedModel)-1);
+ HRD_savedModel[ sizeof(HRD_savedModel)-1 ] = 0;
+#endif
+#ifdef HAVE_LINUX_HDREG_H
+ strncpy(HRD_savedModel, (const char *) HRD_info.model,
+ sizeof(HRD_savedModel)-1);
+ HRD_savedModel[ sizeof(HRD_savedModel)-1 ] = 0;
+#endif
+#ifdef DIOCGDINFO
+ strncpy(HRD_savedModel, dktypenames[HRD_info.d_type],
+ sizeof(HRD_savedModel)-1);
+ HRD_savedModel[ sizeof(HRD_savedModel)-1 ] = 0;
+#endif
+}
+
+static const char *
+describe_disk(int idx)
+{
+ if (HRD_savedModel[0] == '\0')
+ return ("some sort of disk");
+ else
+ return (HRD_savedModel);
+}
+
+
+static int
+Query_Disk(int fd, const char *devfull)
+{
+ int result = -1;
+
+#ifdef DIOC_DESCRIBE
+ result = ioctl(fd, DIOC_DESCRIBE, &HRD_info);
+ if (result != -1)
+ result = ioctl(fd, DIOC_CAPACITY, &HRD_cap);
+#endif
+
+#ifdef DKIOCINFO
+ result = ioctl(fd, DKIOCINFO, &HRD_info);
+ if (result != -1)
+ result = ioctl(fd, DKIOCGGEOM, &HRD_cap);
+#endif
+
+#ifdef HAVE_LINUX_HDREG_H
+ if (HRD_type_index == 0) /* IDE hard disk */
+ result = ioctl(fd, HDIO_GET_IDENTITY, &HRD_info);
+ else if (HRD_type_index <= 2) { /* SCSI hard disk and md devices */
+ long h;
+ result = ioctl(fd, BLKGETSIZE, &h);
+ if (result != -1 && HRD_type_index == 2 && h == 0L)
+ result = -1; /* ignore empty md devices */
+ if (result != -1) {
+ HRD_info.lba_capacity = h;
+ if (HRD_type_index == 1)
+ snprintf( HRD_info.model, sizeof(HRD_info.model)-1,
+ "SCSI disk (%s)", devfull);
+ else
+ snprintf( HRD_info.model, sizeof(HRD_info.model)-1,
+ "RAID disk (%s)", devfull);
+ HRD_info.model[ sizeof(HRD_info.model)-1 ] = 0;
+ HRD_info.config = 0;
+ }
+ }
+#endif
+
+#ifdef DIOCGDINFO
+ result = ioctl(fd, DIOCGDINFO, &HRD_info);
+#endif
+
+ return (result);
+}
+
+
+static int
+Is_It_Writeable(void)
+{
+#ifdef DIOC_DESCRIBE
+ if ((HRD_savedFlags & WRITE_PROTECT_FLAG) ||
+ (HRD_savedDev_type == CDROM_DEV_TYPE))
+ return (2); /* read only */
+#endif
+
+#ifdef DKIOCINFO
+ if (HRD_savedCtrl_type == DKC_CDROM)
+ return (2); /* read only */
+#endif
+
+ return (1); /* read-write */
+}
+
+static int
+What_Type_Disk(void)
+{
+#ifdef DIOC_DESCRIBE
+ switch (HRD_savedDev_type) {
+ case DISK_DEV_TYPE:
+ if (HRD_savedIntf_type == PC_FDC_INTF)
+ return (4); /* Floppy Disk */
+ else
+ return (3); /* Hard Disk */
+ break;
+ case CDROM_DEV_TYPE:
+ return (5); /* Optical RO */
+ break;
+ case WORM_DEV_TYPE:
+ return (6); /* Optical WORM */
+ break;
+ case MO_DEV_TYPE:
+ return (7); /* Optical R/W */
+ break;
+ default:
+ return (2); /* Unknown */
+ break;
+ }
+#endif
+
+#ifdef DKIOCINFO
+ switch (HRD_savedCtrl_type) {
+ case DKC_WDC2880:
+ case DKC_DSD5215:
+#ifdef DKC_XY450
+ case DKC_XY450:
+#endif
+ case DKC_ACB4000:
+ case DKC_MD21:
+#ifdef DKC_XD7053
+ case DKC_XD7053:
+#endif
+ case DKC_SCSI_CCS:
+#ifdef DKC_PANTHER
+ case DKC_PANTHER:
+#endif
+#ifdef DKC_CDC_9057
+ case DKC_CDC_9057:
+#endif
+#ifdef DKC_FJ_M1060
+ case DKC_FJ_M1060:
+#endif
+ case DKC_DIRECT:
+ case DKC_PCMCIA_ATA:
+ return (3); /* Hard Disk */
+ break;
+ case DKC_NCRFLOPPY:
+ case DKC_SMSFLOPPY:
+ case DKC_INTEL82077:
+ return (4); /* Floppy Disk */
+ break;
+ case DKC_CDROM:
+ return (5); /* Optical RO */
+ break;
+ case DKC_PCMCIA_MEM:
+ return (8); /* RAM disk */
+ break;
+ case DKC_MD: /* "meta-disk" driver */
+ return (1); /* Other */
+ break;
+ }
+#endif
+
+
+ return (2); /* Unknown */
+}
+
+static int
+Is_It_Removeable(void)
+{
+#ifdef DIOC_DESCRIBE
+ if ((HRD_savedIntf_type == PC_FDC_INTF) ||
+ (HRD_savedDev_type == WORM_DEV_TYPE) ||
+ (HRD_savedDev_type == MO_DEV_TYPE) ||
+ (HRD_savedDev_type == CDROM_DEV_TYPE))
+ return (1); /* true */
+#endif
+
+#ifdef DKIOCINFO
+ if ((HRD_savedCtrl_type == DKC_CDROM) ||
+ (HRD_savedCtrl_type == DKC_NCRFLOPPY) ||
+ (HRD_savedCtrl_type == DKC_SMSFLOPPY) ||
+ (HRD_savedCtrl_type == DKC_INTEL82077) ||
+ (HRD_savedCtrl_type == DKC_PCMCIA_MEM) ||
+ (HRD_savedCtrl_type == DKC_PCMCIA_ATA))
+ return (1); /* true */
+#endif
+
+#ifdef HAVE_LINUX_HDREG_H
+ if (HRD_savedFlags & 0x80)
+ return (1); /* true */
+#endif
+
+ return (2); /* false */
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_disk.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_disk.h
new file mode 100644
index 0000000000..eff2a67962
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_disk.h
@@ -0,0 +1,17 @@
+/*
+ * Host Resources MIB - disk device group interface - hr_disk.h
+ *
+ */
+#ifndef _MIBGROUP_HRDISK_H
+#define _MIBGROUP_HRDISK_H
+
+config_require(host/hr_device)
+
+extern void init_hr_disk(void);
+extern void Init_HR_Disk(void);
+extern int Get_Next_HR_Disk(void);
+extern int Get_Next_HR_Disk_Partition(char *, size_t, int);
+extern FindVarMethod var_hrdisk;
+
+
+#endif /* _MIBGROUP_HRDISK_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_filesys.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_filesys.c
new file mode 100644
index 0000000000..c53aa99035
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_filesys.c
@@ -0,0 +1,971 @@
+/*
+ * Host Resources MIB - File System device group implementation - hr_filesys.c
+ *
+ */
+
+#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/agent/hardware/memory.h>
+#include "host_res.h"
+#include "hr_filesys.h"
+#include "hr_storage.h"
+#include <net-snmp/utilities.h>
+
+#if HAVE_MNTENT_H
+#include <mntent.h>
+#endif
+#if HAVE_SYS_MNTENT_H
+#include <sys/mntent.h>
+#endif
+#if HAVE_SYS_MNTTAB_H
+#include <sys/mnttab.h>
+#endif
+#if HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
+#if HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+
+#include <ctype.h>
+#if HAVE_STRING_H
+#include <string.h>
+#endif
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#if defined(aix4) || defined(aix5) || defined(aix6)
+#include <sys/mntctl.h>
+#include <sys/vmount.h>
+#include <sys/statfs.h>
+#endif
+
+#if defined(bsdi4) || defined(freebsd3) || defined(freebsd4) || defined(freebsd5) || defined(darwin)
+#if HAVE_GETFSSTAT && defined(MFSNAMELEN)
+#define MOUNT_NFS "nfs"
+#define MNTTYPE_UFS "ufs"
+#define BerkelyFS
+#define MNTTYPE_FFS "ffs"
+#define MNTTYPE_NFS "nfs"
+#define MNTTYPE_NFS3 "nfs"
+#define MNTTYPE_HFS "hfs"
+#define MNTTYPE_MFS "mfs"
+#define MNTTYPE_MSDOS "msdos"
+#define MNTTYPE_LFS "lfs"
+#define MNTTYPE_FDESC "fdesc"
+#define MNTTYPE_PORTAL "portal"
+#define MNTTYPE_NULL "null"
+#define MNTTYPE_UMAP "umap"
+#define MNTTYPE_KERNFS "kernfs"
+#define MNTTYPE_PROCFS "procfs"
+#define MNTTYPE_AFS "afs"
+#define MNTTYPE_CD9660 "cd9660"
+#define MNTTYPE_UNION "union"
+#define MNTTYPE_ADOSFS "adosfs"
+#define MNTTYPE_EXT2FS "ext2fs"
+#define MNTTYPE_CFS "coda"
+#define MNTTYPE_NTFS "ntfs"
+#endif
+#endif /* freebsd3 */
+
+#define HRFS_MONOTONICALLY_INCREASING
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+#ifdef solaris2
+
+struct mnttab HRFS_entry_struct;
+struct mnttab *HRFS_entry = &HRFS_entry_struct;
+#define HRFS_name mnt_special
+#define HRFS_mount mnt_mountp
+#define HRFS_type mnt_fstype
+#define HRFS_statfs statvfs
+
+#elif defined(HAVE_STATVFS) && defined(__NetBSD__)
+
+static struct statvfs *fsstats = NULL;
+struct statvfs *HRFS_entry;
+static int fscount;
+#define HRFS_mount f_mntonname
+#define HRFS_name f_mntfromname
+#define HRFS_statfs statvfs
+#define HRFS_type f_fstypename
+#elif defined(HAVE_GETFSSTAT)
+static struct statfs *fsstats = 0;
+static int fscount;
+struct statfs *HRFS_entry;
+#define HRFS_statfs statfs
+#ifdef MFSNAMELEN
+#define HRFS_type f_fstypename
+#else
+#define HRFS_type f_type
+#endif
+#define HRFS_mount f_mntonname
+#define HRFS_name f_mntfromname
+
+#elif defined(dynix)
+struct mntent *HRFS_entry;
+#define HRFS_name mnt_fsname
+#define HRFS_mount mnt_dir
+#define HRFS_type mnt_type
+#define HRFS_statfs statvfs
+
+#elif defined(WIN32)
+struct win_statfs *HRFS_entry;
+static int fscount;
+#define HRFS_mount f_driveletter
+#define HRFS_name f_fsid
+#define HRFS_statfs win_statfs
+#define HRFS_type f_type
+
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+
+struct vmount *aixmnt, *aixcurr;
+struct HRFS_entry {
+ char *HRFS_name;
+ char *HRFS_mount;
+ int HRFS_type;
+ int HRFS_flags;
+} *HRFS_entry;
+#define HRFS_statfs statfs
+
+#else
+struct mntent *HRFS_entry;
+#define HRFS_name mnt_fsname
+#define HRFS_mount mnt_dir
+#define HRFS_type mnt_type
+#define HRFS_statfs statfs
+
+#ifdef linux
+#define MNTTYPE_CD9660 "iso9660"
+#define MNTTYPE_EXT2FS "ext2"
+#define MNTTYPE_EXT3FS "ext3"
+#define MNTTYPE_SMBFS "smbfs"
+#define MNTTYPE_MSDOS "msdos"
+#define MNTTYPE_FAT32 "vfat"
+#define MNTTYPE_NTFS "ntfs"
+#define MNTTYPE_NFS4 "nfs4"
+#endif /* linux */
+
+#endif
+
+#define FULL_DUMP 0
+#define PART_DUMP 1
+
+extern void Init_HR_FileSys(void);
+extern int Get_Next_HR_FileSys(void);
+char *cook_device(char *);
+static u_char *when_dumped(char *filesys, int level, size_t * length);
+int header_hrfilesys(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod **);
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+#define HRFSYS_INDEX 1
+#define HRFSYS_MOUNT 2
+#define HRFSYS_RMOUNT 3
+#define HRFSYS_TYPE 4
+#define HRFSYS_ACCESS 5
+#define HRFSYS_BOOT 6
+#define HRFSYS_STOREIDX 7
+#define HRFSYS_FULLDUMP 8
+#define HRFSYS_PARTDUMP 9
+
+struct variable4 hrfsys_variables[] = {
+ {HRFSYS_INDEX, ASN_INTEGER, RONLY, var_hrfilesys, 2, {1, 1}},
+ {HRFSYS_MOUNT, ASN_OCTET_STR, RONLY, var_hrfilesys, 2, {1, 2}},
+ {HRFSYS_RMOUNT, ASN_OCTET_STR, RONLY, var_hrfilesys, 2, {1, 3}},
+ {HRFSYS_TYPE, ASN_OBJECT_ID, RONLY, var_hrfilesys, 2, {1, 4}},
+ {HRFSYS_ACCESS, ASN_INTEGER, RONLY, var_hrfilesys, 2, {1, 5}},
+ {HRFSYS_BOOT, ASN_INTEGER, RONLY, var_hrfilesys, 2, {1, 6}},
+ {HRFSYS_STOREIDX, ASN_INTEGER, RONLY, var_hrfilesys, 2, {1, 7}},
+ {HRFSYS_FULLDUMP, ASN_OCTET_STR, RONLY, var_hrfilesys, 2, {1, 8}},
+ {HRFSYS_PARTDUMP, ASN_OCTET_STR, RONLY, var_hrfilesys, 2, {1, 9}},
+};
+oid hrfsys_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 3, 8 };
+
+void
+init_hr_filesys(void)
+{
+ REGISTER_MIB("host/hr_filesys", hrfsys_variables, variable4,
+ hrfsys_variables_oid);
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ /* something leaks, make it idiot-safe */
+ aixmnt = NULL;
+ aixcurr = NULL;
+#endif
+}
+
+/*
+ * header_hrfilesys(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ *
+ */
+
+int
+header_hrfilesys(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#define HRFSYS_ENTRY_NAME_LENGTH 11
+ oid newname[MAX_OID_LEN];
+ int fsys_idx, LowIndex = -1;
+ int result;
+
+ DEBUGMSGTL(("host/hr_filesys", "var_hrfilesys: "));
+ DEBUGMSGOID(("host/hr_filesys", name, *length));
+ DEBUGMSG(("host/hr_filesys", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name, vp->namelen * sizeof(oid));
+ /*
+ * Find "next" file system entry
+ */
+
+ Init_HR_FileSys();
+ for (;;) {
+ fsys_idx = Get_Next_HR_FileSys();
+ if (fsys_idx == -1)
+ break;
+ newname[HRFSYS_ENTRY_NAME_LENGTH] = fsys_idx;
+ result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);
+ if (exact && (result == 0)) {
+ LowIndex = fsys_idx;
+ break;
+ }
+ if ((!exact && (result < 0)) &&
+ (LowIndex == -1 || fsys_idx < LowIndex)) {
+ LowIndex = fsys_idx;
+#ifdef HRFS_MONOTONICALLY_INCREASING
+ break;
+#endif
+ }
+ }
+
+ if (LowIndex == -1) {
+ DEBUGMSGTL(("host/hr_filesys", "... index out of range\n"));
+ return (MATCH_FAILED);
+ }
+
+ memcpy((char *) name, (char *) newname,
+ (vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ DEBUGMSGTL(("host/hr_filesys", "... get filesys stats "));
+ DEBUGMSGOID(("host/hr_filesys", name, *length));
+ DEBUGMSG(("host/hr_filesys", "\n"));
+
+ return LowIndex;
+}
+
+
+oid fsys_type_id[] = { 1, 3, 6, 1, 2, 1, 25, 3, 9, 1 }; /* hrFSOther */
+int fsys_type_len =
+ sizeof(fsys_type_id) / sizeof(fsys_type_id[0]);
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+
+u_char *
+var_hrfilesys(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int fsys_idx;
+ static char string[1024];
+ char *mnt_type;
+
+ fsys_idx =
+ header_hrfilesys(vp, name, length, exact, var_len, write_method);
+ if (fsys_idx == MATCH_FAILED)
+ return NULL;
+
+
+ switch (vp->magic) {
+ case HRFSYS_INDEX:
+ long_return = fsys_idx;
+ return (u_char *) & long_return;
+ case HRFSYS_MOUNT:
+ snprintf(string, sizeof(string), HRFS_entry->HRFS_mount);
+ string[ sizeof(string)-1 ] = 0;
+ *var_len = strlen(string);
+ return (u_char *) string;
+ case HRFSYS_RMOUNT:
+ if (Check_HR_FileSys_NFS()) {
+ snprintf(string, sizeof(string), HRFS_entry->HRFS_name);
+ string[ sizeof(string)-1 ] = 0;
+ } else
+ string[0] = '\0';
+ *var_len = strlen(string);
+ return (u_char *) string;
+
+ case HRFSYS_TYPE:
+ if (Check_HR_FileSys_NFS())
+ fsys_type_id[fsys_type_len - 1] = 14;
+ else {
+ /*
+ * Not sufficient to identity the file
+ * type precisely, but it's a start.
+ */
+#if HAVE_GETFSSTAT && !defined(MFSNAMELEN)
+ switch (HRFS_entry->HRFS_type) {
+ case MOUNT_UFS:
+ fsys_type_id[fsys_type_len - 1] = 3;
+ break;
+ case MOUNT_NFS:
+ fsys_type_id[fsys_type_len - 1] = 14;
+ break;
+ case MOUNT_HFS:
+ fsys_type_id[fsys_type_len - 1] = 7;
+ break;
+ case MOUNT_MFS:
+ fsys_type_id[fsys_type_len - 1] = 8;
+ break;
+ case MOUNT_MSDOS:
+ fsys_type_id[fsys_type_len - 1] = 5;
+ break;
+ case MOUNT_LFS:
+ fsys_type_id[fsys_type_len - 1] = 1;
+ break;
+ case MOUNT_LOFS:
+ fsys_type_id[fsys_type_len - 1] = 1;
+ break;
+ case MOUNT_FDESC:
+ fsys_type_id[fsys_type_len - 1] = 1;
+ break;
+ case MOUNT_PORTAL:
+ fsys_type_id[fsys_type_len - 1] = 1;
+ break;
+ case MOUNT_NULL:
+ fsys_type_id[fsys_type_len - 1] = 1;
+ break;
+ case MOUNT_UMAP:
+ fsys_type_id[fsys_type_len - 1] = 1;
+ break;
+ case MOUNT_KERNFS:
+ fsys_type_id[fsys_type_len - 1] = 1;
+ break;
+ case MOUNT_PROCFS:
+ fsys_type_id[fsys_type_len - 1] = 1;
+ break;
+ case MOUNT_AFS:
+ fsys_type_id[fsys_type_len - 1] = 16;
+ break;
+ case MOUNT_CD9660:
+ fsys_type_id[fsys_type_len - 1] = 12;
+ break;
+ case MOUNT_UNION:
+ fsys_type_id[fsys_type_len - 1] = 1;
+ break;
+ case MOUNT_DEVFS:
+ fsys_type_id[fsys_type_len - 1] = 1;
+ break;
+#ifdef MOUNT_EXT2FS
+ case MOUNT_EXT2FS:
+ fsys_type_id[fsys_type_len - 1] = 23;
+ break;
+#endif
+#ifdef MOUNT_TFS
+ case MOUNT_TFS:
+ fsys_type_id[fsys_type_len - 1] = 15;
+ break;
+#endif
+ }
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ switch (HRFS_entry->HRFS_type) {
+ case MNT_AIX:
+ case MNT_JFS:
+ fsys_type_id[fsys_type_len - 1] = 3;
+ break;
+ case MNT_CDROM:
+ fsys_type_id[fsys_type_len - 1] = 12;
+ break;
+#ifdef MNT_NAMEFS
+ case MNT_NAMEFS:
+#endif
+#ifdef MNT_PROCFS
+ case MNT_PROCFS:
+#endif
+ case MNT_SFS:
+ case MNT_CACHEFS:
+ fsys_type_id[fsys_type_len - 1] = 1;
+ break;
+ case MNT_NFS:
+ case MNT_NFS3:
+ case MNT_AUTOFS:
+ fsys_type_id[fsys_type_len - 1] = 14;
+ break;
+ }
+#else
+ mnt_type = HRFS_entry->HRFS_type;
+ if (mnt_type == NULL)
+ fsys_type_id[fsys_type_len - 1] = 2; /* unknown */
+#ifdef MNTTYPE_HFS
+ else if (!strcmp(mnt_type, MNTTYPE_HFS))
+ fsys_type_id[fsys_type_len - 1] = 7;
+#endif
+#ifdef MNTTYPE_UFS
+ else if (!strcmp(mnt_type, MNTTYPE_UFS))
+#if (defined(BerkelyFS) && !defined(MNTTYPE_HFS)) || defined(solaris2)
+ fsys_type_id[fsys_type_len - 1] = 3;
+#else /* SysV */
+ fsys_type_id[fsys_type_len - 1] = 4; /* or 3? XXX */
+#endif
+#endif
+#ifdef MNTTYPE_SYSV
+ else if (!strcmp(mnt_type, MNTTYPE_SYSV))
+ fsys_type_id[fsys_type_len - 1] = 4;
+#endif
+#ifdef MNTTYPE_PC
+ else if (!strcmp(mnt_type, MNTTYPE_PC))
+ fsys_type_id[fsys_type_len - 1] = 5;
+#endif
+#ifdef MNTTYPE_MSDOS
+ else if (!strcmp(mnt_type, MNTTYPE_MSDOS))
+ fsys_type_id[fsys_type_len - 1] = 5;
+#endif
+#ifdef MNTTYPE_FAT32
+ else if (!strcmp(mnt_type, MNTTYPE_FAT32))
+ fsys_type_id[fsys_type_len - 1] = 22;
+#endif
+#ifdef MNTTYPE_CDFS
+ else if (!strcmp(mnt_type, MNTTYPE_CDFS))
+#ifdef RockRidge
+ fsys_type_id[fsys_type_len - 1] = 13;
+#else /* ISO 9660 */
+ fsys_type_id[fsys_type_len - 1] = 12;
+#endif
+#endif
+#ifdef MNTTYPE_HSFS
+ else if (!strcmp(mnt_type, MNTTYPE_HSFS))
+ fsys_type_id[fsys_type_len - 1] = 13;
+#endif
+#ifdef MNTTYPE_ISO9660
+ else if (!strcmp(mnt_type, MNTTYPE_ISO9660))
+ fsys_type_id[fsys_type_len - 1] = 12;
+#endif
+#ifdef MNTTYPE_CD9660
+ else if (!strcmp(mnt_type, MNTTYPE_CD9660))
+ fsys_type_id[fsys_type_len - 1] = 12;
+#endif
+#ifdef MNTTYPE_SMBFS
+ else if (!strcmp(mnt_type, MNTTYPE_SMBFS))
+ fsys_type_id[fsys_type_len - 1] = 14;
+#endif
+#ifdef MNTTYPE_NFS
+ else if (!strcmp(mnt_type, MNTTYPE_NFS))
+ fsys_type_id[fsys_type_len - 1] = 14;
+#endif
+#ifdef MNTTYPE_NFS3
+ else if (!strcmp(mnt_type, MNTTYPE_NFS3))
+ fsys_type_id[fsys_type_len - 1] = 14;
+#endif
+#ifdef MNTTYPE_NFS4
+ else if (!strcmp(mnt_type, MNTTYPE_NFS4))
+ fsys_type_id[fsys_type_len - 1] = 14;
+#endif
+#ifdef MNTTYPE_MFS
+ else if (!strcmp(mnt_type, MNTTYPE_MFS))
+ fsys_type_id[fsys_type_len - 1] = 8;
+#endif
+#ifdef MNTTYPE_EXT2FS
+ else if (!strcmp(mnt_type, MNTTYPE_EXT2FS))
+ fsys_type_id[fsys_type_len - 1] = 23;
+#endif
+#ifdef MNTTYPE_EXT3FS
+ else if (!strcmp(mnt_type, MNTTYPE_EXT3FS))
+ fsys_type_id[fsys_type_len - 1] = 23;
+#endif
+#ifdef MNTTYPE_NTFS
+ else if (!strcmp(mnt_type, MNTTYPE_NTFS))
+ fsys_type_id[fsys_type_len - 1] = 9;
+#endif
+ else
+ fsys_type_id[fsys_type_len - 1] = 1; /* Other */
+#endif /* HAVE_GETFSSTAT */
+ }
+
+ *var_len = sizeof(fsys_type_id);
+ return (u_char *) fsys_type_id;
+
+ case HRFSYS_ACCESS:
+#if defined(HAVE_STATVFS) && defined(__NetBSD__)
+ long_return = HRFS_entry->f_flag & MNT_RDONLY ? 2 : 1;
+#elif defined(HAVE_GETFSSTAT)
+ long_return = HRFS_entry->f_flags & MNT_RDONLY ? 2 : 1;
+#elif defined(cygwin)
+ long_return = 1;
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = (HRFS_entry->HRFS_flags & MNT_READONLY) == 0 ? 1 : 2;
+#else
+#if HAVE_HASMNTOPT
+ if (hasmntopt(HRFS_entry, "ro") != NULL)
+ long_return = 2; /* Read Only */
+ else
+#endif
+ long_return = 1; /* Read-Write */
+#endif
+ return (u_char *) & long_return;
+ case HRFSYS_BOOT:
+ if (HRFS_entry->HRFS_mount[0] == '/' &&
+ HRFS_entry->HRFS_mount[1] == 0)
+ long_return = 1; /* root is probably bootable! */
+ else
+ long_return = 2; /* others probably aren't */
+ return (u_char *) & long_return;
+ case HRFSYS_STOREIDX:
+ long_return = fsys_idx + NETSNMP_MEM_TYPE_MAX;
+ return (u_char *) & long_return;
+ case HRFSYS_FULLDUMP:
+ return when_dumped(HRFS_entry->HRFS_name, FULL_DUMP, var_len);
+ case HRFSYS_PARTDUMP:
+ return when_dumped(HRFS_entry->HRFS_name, PART_DUMP, var_len);
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_hrfilesys\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+static int HRFS_index;
+#ifndef HAVE_GETFSSTAT
+static FILE *fp;
+#endif
+
+void
+Init_HR_FileSys(void)
+{
+#if HAVE_GETFSSTAT
+#if defined(HAVE_STATVFS) && defined(__NetBSD__)
+ fscount = getvfsstat(NULL, 0, ST_NOWAIT);
+#else
+ fscount = getfsstat(NULL, 0, MNT_NOWAIT);
+#endif
+ if (fsstats)
+ free((char *) fsstats);
+ fsstats = NULL;
+ fsstats = malloc(fscount * sizeof(*fsstats));
+#if defined(HAVE_STATVFS) && defined(__NetBSD__)
+ getvfsstat(fsstats, fscount * sizeof(*fsstats), ST_NOWAIT);
+#else
+ getfsstat(fsstats, fscount * sizeof(*fsstats), MNT_NOWAIT);
+#endif
+ HRFS_index = 0;
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ int ret;
+ uint size;
+ ret = 0;
+ size = 0;
+ if(aixmnt != NULL) free(aixmnt); /* something leaks, make it idiot-safe */
+ aixmnt = NULL;
+ aixcurr = NULL;
+ HRFS_index = 0;
+ ret = mntctl(MCTL_QUERY, sizeof(uint), &size);
+ if(ret == 0 && size > 0) {
+ aixmnt = malloc(size + sizeof(struct HRFS_entry));
+ if(aixmnt != NULL) {
+ HRFS_entry = (char *) aixmnt + size;
+ ret = mntctl(MCTL_QUERY, size, aixmnt);
+ HRFS_index = 1;
+ if(ret <= 0) {
+ free(aixmnt);
+ aixmnt = NULL;
+ HRFS_entry = NULL;
+ } else aixcurr = aixmnt;
+ }
+ }
+#else
+ HRFS_index = 1;
+ if (fp != NULL)
+ fclose(fp);
+ fp = fopen(ETC_MNTTAB, "r");
+ if (!fp) {
+ char tmpbuf[STRINGMAX];
+ snprintf( tmpbuf, sizeof(tmpbuf), "Can't open %s\n", ETC_MNTTAB );
+ config_perror(tmpbuf);
+ }
+#endif
+}
+
+const char *HRFS_ignores[] = {
+#ifdef MNTTYPE_IGNORE
+ MNTTYPE_IGNORE,
+#endif
+#ifdef MNTTYPE_SWAP
+ MNTTYPE_SWAP,
+#endif
+#ifdef MNTTYPE_PROC
+ MNTTYPE_PROC,
+#endif
+#ifdef MNTTYPE_PROCFS
+ MNTTYPE_PROCFS,
+#endif
+#ifdef MNTTYPE_AUTOFS
+ MNTTYPE_AUTOFS,
+#else
+ "autofs",
+#endif
+#ifdef linux
+ "autofs",
+ "bdev",
+ "binfmt_misc",
+ "cpuset",
+ "debugfs",
+ "devfs",
+ "devpts",
+ "eventpollfs",
+ "futexfs",
+ "hugetlbfs",
+ "inotifyfs",
+ "mqueue",
+ "nfsd",
+ "pipefs",
+ "proc",
+ "ramfs",
+ "rootfs",
+ "rpc_pipefs",
+ "securityfs",
+ "shm",
+ "sockfs",
+ "sysfs",
+ "tmpfs",
+ "usbdevfs",
+ "usbfs",
+#endif
+#ifdef solaris2
+ "mntfs",
+ "proc",
+ "fd",
+#endif
+ 0
+};
+
+int
+Get_Next_HR_FileSys(void)
+{
+#if HAVE_GETFSSTAT
+ if (HRFS_index >= fscount)
+ return -1;
+ HRFS_entry = fsstats + HRFS_index;
+ return ++HRFS_index;
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ if(aixcurr == NULL) {
+ if(aixmnt != NULL) free(aixmnt);
+ aixmnt = NULL;
+ HRFS_entry = NULL;
+ return -1;
+ }
+ HRFS_entry->HRFS_name = vmt2dataptr(aixcurr, VMT_OBJECT);
+ HRFS_entry->HRFS_mount = vmt2dataptr(aixcurr, VMT_STUB);
+ HRFS_entry->HRFS_type = aixcurr->vmt_gfstype;
+ HRFS_entry->HRFS_flags = aixcurr->vmt_flags;
+ aixcurr = (char *) aixcurr + aixcurr->vmt_length;
+ if((char *) aixcurr >= (char *) HRFS_entry) aixcurr = NULL;
+ switch(HRFS_entry->HRFS_type) {
+#ifdef MNT_NAMEFS
+ case MNT_NAMEFS:
+#endif
+#ifdef MNT_PROCFS
+ case MNT_PROCFS:
+#endif
+ case MNT_SFS:
+ return Get_Next_HR_FileSys();
+ break;
+ }
+ return HRFS_index++;
+#else
+ const char **cpp;
+
+ if (fp == NULL)
+ return -1;
+
+#ifdef solaris2
+ if (getmntent(fp, HRFS_entry) != 0)
+ return -1;
+#else
+ HRFS_entry = getmntent(fp);
+ if (HRFS_entry == NULL)
+ return -1;
+#endif /* solaris2 */
+
+ DEBUGMSGTL(("host/hr_filesys", "Get_Next_HRFS %s\n", HRFS_entry->HRFS_name));
+
+ for (cpp = HRFS_ignores; *cpp != NULL; ++cpp)
+ if (!strcmp(HRFS_entry->HRFS_type, *cpp)) {
+ DEBUGMSGTL(("host/hr_filesys", "Get_Next_HRFS: skipping %s (%s)\n", HRFS_entry->HRFS_type, cpp));
+ return Get_Next_HR_FileSys();
+ }
+
+ /*
+ * Try and ensure that index values are persistent
+ * at least within a single run of the agent
+ */
+ HRFS_index = se_find_value_in_slist("filesys", HRFS_entry->HRFS_name );
+ if (HRFS_index == SE_DNE) {
+ HRFS_index = se_find_free_value_in_slist("filesys");
+ if (HRFS_index == SE_DNE) { HRFS_index = 1; }
+ se_add_pair_to_slist( "filesys",
+ strdup( HRFS_entry->HRFS_name ), HRFS_index);
+ }
+
+ return HRFS_index++;
+#endif /* HAVE_GETFSSTAT */
+}
+
+/*
+ * this function checks whether the current file system (info can be found
+ * in HRFS_entry) is a NFS file system
+ * HRFS_entry must be valid prior to calling this function
+ * returns 1 if NFS file system, 0 otherwise
+ */
+int
+Check_HR_FileSys_NFS (void)
+{
+#if HAVE_GETFSSTAT && !defined(MFSNAMELEN)
+ if ((HRFS_entry->HRFS_type == MOUNT_NFS) ||
+ (HRFS_entry->HRFS_type == MOUNT_AFS))
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ if(HRFS_entry->HRFS_type == MNT_NFS || HRFS_entry->HRFS_type == MNT_NFS3)
+#else /* HAVE_GETFSSTAT */
+ if ( HRFS_entry->HRFS_type != NULL && (
+#if defined(MNTTYPE_NFS)
+ !strcmp( HRFS_entry->HRFS_type, MNTTYPE_NFS) ||
+#else
+ !strcmp( HRFS_entry->HRFS_type, "nfs") ||
+#endif
+#if defined(MNTTYPE_NFS3)
+ !strcmp( HRFS_entry->HRFS_type, MNTTYPE_NFS3) ||
+#endif
+#if defined(MNTTYPE_NFS4)
+ !strcmp( HRFS_entry->HRFS_type, MNTTYPE_NFS4) ||
+#endif
+#if defined(MNTTYPE_SMBFS)
+ !strcmp( HRFS_entry->HRFS_type, MNTTYPE_SMBFS) ||
+#endif
+#if defined(MNTTYPE_LOFS)
+ !strcmp( HRFS_entry->HRFS_type, MNTTYPE_LOFS) ||
+#endif
+#if defined(MNTTYPE_AFP)
+ !strcmp( HRFS_entry->HRFS_type, MNTTYPE_AFP) ||
+#endif
+ !strcmp( HRFS_entry->HRFS_type, "cifs") ||
+ /*
+ * MVFS is Rational ClearCase's view file system
+ * it is similiar to NFS file systems in that it is mounted
+ * locally or remotely from the ClearCase server
+ */
+ !strcmp( HRFS_entry->HRFS_type, "mvfs")))
+#endif /* HAVE_GETFSSTAT */
+ return 1; /* NFS file system */
+
+ return 0; /* no NFS file system */
+}
+
+void
+End_HR_FileSys(void)
+{
+#ifdef HAVE_GETFSSTAT
+ if (fsstats)
+ free((char *) fsstats);
+ fsstats = NULL;
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ if(aixmnt != NULL) {
+ free(aixmnt);
+ aixmnt = NULL;
+ aixcurr = NULL;
+ HRFS_entry = NULL;
+ }
+#else
+ if (fp != NULL)
+ fclose(fp);
+ fp = NULL;
+#endif
+}
+
+
+static u_char *
+when_dumped(char *filesys, int level, size_t * length)
+{
+ time_t dumpdate = 0, tmp;
+ FILE *dump_fp;
+ char line[1024];
+ char *cp1, *cp2, *cp3;
+
+ /*
+ * Look for the relevent entries in /etc/dumpdates
+ *
+ * This is complicated by the fact that disks are
+ * mounted using block devices, but dumps are
+ * done via the raw character devices.
+ * Thus the device names in /etc/dumpdates and
+ * /etc/mnttab don't match.
+ * These comparisons are therefore made using the
+ * final portion of the device name only.
+ */
+
+ if (*filesys == '\0') /* No filesystem name? */
+ return date_n_time(NULL, length);
+ cp1 = strrchr(filesys, '/'); /* Find the last element of the current FS */
+
+ if (cp1 == NULL)
+ cp1 = filesys;
+
+ if ((dump_fp = fopen("/etc/dumpdates", "r")) == NULL)
+ return date_n_time(NULL, length);
+
+ while (fgets(line, sizeof(line), dump_fp) != NULL) {
+ cp2 = strchr(line, ' '); /* Start by looking at the device name only */
+ if (cp2 != NULL) {
+ *cp2 = '\0';
+ cp3 = strrchr(line, '/'); /* and find the last element */
+ if (cp3 == NULL)
+ cp3 = line;
+
+ if (strcmp(cp1, cp3) != 0) /* Wrong FS */
+ continue;
+
+ ++cp2;
+ while (isspace(*cp2))
+ ++cp2; /* Now find the dump level */
+
+ if (level == FULL_DUMP) {
+ if (*(cp2++) != '0')
+ continue; /* Not interested in partial dumps */
+ while (isspace(*cp2))
+ ++cp2;
+
+ dumpdate = ctime_to_timet(cp2);
+ fclose(dump_fp);
+ return date_n_time(&dumpdate, length);
+ } else { /* Partial Dump */
+ if (*(cp2++) == '0')
+ continue; /* Not interested in full dumps */
+ while (isspace(*cp2))
+ ++cp2;
+
+ tmp = ctime_to_timet(cp2);
+ if (tmp > dumpdate)
+ dumpdate = tmp; /* Remember the 'latest' partial dump */
+ }
+ }
+ }
+
+ fclose(dump_fp);
+
+ return date_n_time(&dumpdate, length);
+}
+
+
+#define RAW_DEVICE_PREFIX "/dev/rdsk"
+#define COOKED_DEVICE_PREFIX "/dev/dsk"
+
+char *
+cook_device(char *dev)
+{
+ static char cooked_dev[SNMP_MAXPATH+1];
+
+ if (!strncmp(dev, RAW_DEVICE_PREFIX, strlen(RAW_DEVICE_PREFIX))) {
+ strncpy(cooked_dev, COOKED_DEVICE_PREFIX, sizeof(cooked_dev)-1);
+ cooked_dev[ sizeof(cooked_dev)-1 ] = 0;
+ strncat(cooked_dev, dev + strlen(RAW_DEVICE_PREFIX),
+ sizeof(cooked_dev)-strlen(cooked_dev)-1);
+ cooked_dev[ sizeof(cooked_dev)-1 ] = 0;
+ } else {
+ strncpy(cooked_dev, dev, sizeof(cooked_dev)-1);
+ cooked_dev[ sizeof(cooked_dev)-1 ] = 0;
+ }
+
+ return (cooked_dev);
+}
+
+
+int
+Get_FSIndex(char *dev)
+{
+ int iindex;
+
+ Init_HR_FileSys();
+
+ while ((iindex = Get_Next_HR_FileSys()) != -1)
+ if (!strcmp(HRFS_entry->HRFS_name, cook_device(dev))) {
+ End_HR_FileSys();
+ return iindex;
+ }
+
+ End_HR_FileSys();
+ return 0;
+}
+
+long
+Get_FSSize(char *dev)
+{
+ struct HRFS_statfs statfs_buf;
+
+ Init_HR_FileSys();
+
+ while (Get_Next_HR_FileSys() != -1)
+ if (!strcmp(HRFS_entry->HRFS_name, cook_device(dev))) {
+ End_HR_FileSys();
+
+ if (HRFS_statfs(HRFS_entry->HRFS_mount, &statfs_buf) != -1)
+ /*
+ * with large file systems the following calculation produces
+ * an overflow:
+ * (statfs_buf.f_blocks*statfs_buf.f_bsize)/1024
+ *
+ * assumption: f_bsize is either 512 or a multiple of 1024
+ * in case of 512 (f_blocks/2) is returned
+ * otherwise (f_blocks*(f_bsize/1024)) is returned
+ */
+#if defined(solaris2) && defined(STRUCT_STATVFS_HAS_F_FRSIZE)
+ return (statfs_buf.f_blocks*(statfs_buf.f_frsize/1024));
+#else
+ if (statfs_buf.f_bsize == 512)
+ return (statfs_buf.f_blocks/2);
+ else
+ return (statfs_buf.f_blocks*(statfs_buf.f_bsize/1024));
+#endif
+ else
+ return -1;
+ }
+
+ End_HR_FileSys();
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_filesys.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_filesys.h
new file mode 100644
index 0000000000..2f00355f3b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_filesys.h
@@ -0,0 +1,18 @@
+/*
+ * Host Resources MIB - file system device group interface - hr_filesys.h
+ *
+ */
+#ifndef _MIBGROUP_HRFSYS_H
+#define _MIBGROUP_HRFSYS_H
+
+extern void init_hr_filesys(void);
+extern void Init_HR_FileSys(void);
+extern FindVarMethod var_hrfilesys;
+extern int Get_Next_HR_FileSys(void);
+extern int Check_HR_FileSys_NFS(void);
+
+extern int Get_FSIndex(char *);
+extern long Get_FSSize(char *); /* Temporary */
+
+
+#endif /* _MIBGROUP_HRFSYS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_network.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_network.c
new file mode 100644
index 0000000000..6d267e65ff
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_network.c
@@ -0,0 +1,288 @@
+/*
+ * Host Resources MIB - network device group implementation - hr_network.c
+ *
+ */
+
+#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/data_access/interface.h>
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#ifdef hpux11
+#include <sys/mib.h>
+#include <netinet/mib_kern.h>
+#endif
+
+#include "host_res.h"
+#include "mibII/interfaces.h"
+#include "hr_network.h"
+
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+void Init_HR_Network(void);
+int Get_Next_HR_Network(void);
+void Save_HR_Network_Info(void);
+
+const char *describe_networkIF(int);
+int network_status(int);
+int network_errors(int);
+int header_hrnet(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod **);
+
+#define HRN_MONOTONICALLY_INCREASING
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+#define HRNET_IFINDEX 1
+
+struct variable4 hrnet_variables[] = {
+ {HRNET_IFINDEX, ASN_INTEGER, RONLY, var_hrnet, 2, {1, 1}}
+};
+oid hrnet_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 3, 4 };
+
+
+void
+init_hr_network(void)
+{
+ init_device[HRDEV_NETWORK] = Init_HR_Network;
+ next_device[HRDEV_NETWORK] = Get_Next_HR_Network;
+ save_device[HRDEV_NETWORK] = Save_HR_Network_Info;
+#ifdef HRN_MONOTONICALLY_INCREASING
+ dev_idx_inc[HRDEV_NETWORK] = 1;
+#endif
+
+ device_descr[HRDEV_NETWORK] = describe_networkIF;
+ device_status[HRDEV_NETWORK] = network_status;
+ device_errors[HRDEV_NETWORK] = network_errors;
+
+ REGISTER_MIB("host/hr_network", hrnet_variables, variable4,
+ hrnet_variables_oid);
+}
+
+/*
+ * header_hrnet(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ *
+ */
+
+int
+header_hrnet(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#define HRNET_ENTRY_NAME_LENGTH 11
+ oid newname[MAX_OID_LEN];
+ int net_idx;
+ int result;
+ int LowIndex = -1;
+
+ DEBUGMSGTL(("host/hr_network", "var_hrnet: "));
+ DEBUGMSGOID(("host/hr_network", name, *length));
+ DEBUGMSG(("host/hr_network", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name, vp->namelen * sizeof(oid));
+ /*
+ * Find "next" net entry
+ */
+
+ Init_HR_Network();
+ for (;;) {
+ net_idx = Get_Next_HR_Network();
+ if (net_idx == -1)
+ break;
+ newname[HRNET_ENTRY_NAME_LENGTH] = net_idx;
+ result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);
+ if (exact && (result == 0)) {
+ LowIndex = net_idx;
+ break;
+ }
+ if (!exact && (result < 0) &&
+ (LowIndex == -1 || net_idx < LowIndex)) {
+ LowIndex = net_idx;
+#ifdef HRN_MONOTONICALLY_INCREASING
+ break;
+#endif
+ }
+ }
+
+ if (LowIndex == -1) {
+ DEBUGMSGTL(("host/hr_network", "... index out of range\n"));
+ return (MATCH_FAILED);
+ }
+
+ newname[HRNET_ENTRY_NAME_LENGTH] = LowIndex;
+ memcpy((char *) name, (char *) newname,
+ (vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ DEBUGMSGTL(("host/hr_network", "... get net stats "));
+ DEBUGMSGOID(("host/hr_network", name, *length));
+ DEBUGMSG(("host/hr_network", "\n"));
+ return LowIndex;
+}
+
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+
+u_char *
+var_hrnet(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int net_idx;
+
+ net_idx = header_hrnet(vp, name, length, exact, var_len, write_method);
+ if (net_idx == MATCH_FAILED)
+ return NULL;
+
+
+ switch (vp->magic) {
+ case HRNET_IFINDEX:
+ long_return = net_idx & ((1 << HRDEV_TYPE_SHIFT) - 1);
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_hrnet\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+
+#if defined( USING_IF_MIB_IFTABLE_IFTABLE_DATA_ACCESS_MODULE )
+static char HRN_name[16];
+static netsnmp_interface_entry *HRN_ifnet;
+#define M_Interface_Scan_Next(a, b, c, d) Interface_Scan_Next(a, b, c, d)
+#elif defined(hpux11)
+static char HRN_name[MAX_PHYSADDR_LEN];
+static nmapi_phystat HRN_ifnet;
+#define M_Interface_Scan_Next(a, b, c, d) Interface_Scan_Next(a, b, c)
+#else /* hpux11 */
+static char HRN_name[16];
+#ifndef WIN32
+static struct ifnet HRN_ifnet;
+#endif /* WIN32 */
+#define M_Interface_Scan_Next(a, b, c, d) Interface_Scan_Next(a, b, c, d)
+#endif
+
+#ifdef hpux11
+static char HRN_savedName[MAX_PHYSADDR_LEN];
+#else
+static char HRN_savedName[16];
+#endif
+static u_short HRN_savedFlags;
+static int HRN_savedErrors;
+
+
+void
+Init_HR_Network(void)
+{
+#if !defined( solaris2 )
+ Interface_Scan_Init();
+#endif
+}
+
+int
+Get_Next_HR_Network(void)
+{
+short HRN_index;
+#if !defined( solaris2) && ! defined( WIN32 )
+ if (M_Interface_Scan_Next(&HRN_index, HRN_name, &HRN_ifnet, NULL) == 0)
+ HRN_index = -1;
+#else
+ HRN_index = -1;
+#endif
+ if (-1 == HRN_index)
+ return HRN_index;
+
+ return (HRDEV_NETWORK << HRDEV_TYPE_SHIFT) + HRN_index;
+}
+
+void
+Save_HR_Network_Info(void)
+{
+ strcpy(HRN_savedName, HRN_name);
+#if defined( USING_IF_MIB_IFTABLE_IFTABLE_DATA_ACCESS_MODULE )
+ HRN_savedFlags = HRN_ifnet->os_flags;
+ HRN_savedErrors = HRN_ifnet->stats.ierrors + HRN_ifnet->stats.oerrors;
+#elif defined( hpux11 )
+ HRN_savedFlags = HRN_ifnet.if_entry.ifOper;
+ HRN_savedErrors = HRN_ifnet.if_entry.ifInErrors +
+ HRN_ifnet.if_entry.ifOutErrors;
+#else /* hpux11 */
+#ifndef WIN32
+ HRN_savedFlags = HRN_ifnet.if_flags;
+ HRN_savedErrors = HRN_ifnet.if_ierrors + HRN_ifnet.if_oerrors;
+#endif /* WIN32 */
+#endif /* hpux11 */
+}
+
+
+const char *
+describe_networkIF(int idx)
+{
+ static char string[1024];
+
+ snprintf(string, sizeof(string)-1, "network interface %s", HRN_savedName);
+ string[ sizeof(string)-1 ] = 0;
+ return string;
+}
+
+
+int
+network_status(int idx)
+{
+#ifndef WIN32
+#ifdef hpux11
+ if (HRN_savedFlags == LINK_UP)
+#else
+ if (HRN_savedFlags & IFF_UP)
+#endif
+ return 2; /* running */
+ else
+ return 5; /* down */
+#endif /* WIN32 */
+
+}
+
+int
+network_errors(int idx)
+{
+ return HRN_savedErrors;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_network.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_network.h
new file mode 100644
index 0000000000..d7bcb48ee8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_network.h
@@ -0,0 +1,14 @@
+/*
+ * Host Resources MIB - network device group interface - hr_network.h
+ *
+ */
+#ifndef _MIBGROUP_HRNET_H
+#define _MIBGROUP_HRNET_H
+
+config_require(host/hr_device)
+
+extern void init_hr_network(void);
+extern FindVarMethod var_hrnet;
+
+config_require(host/hr_device mibII/ifTable)
+#endif /* _MIBGROUP_HRNET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_other.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_other.c
new file mode 100644
index 0000000000..9e4b16a267
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_other.c
@@ -0,0 +1,66 @@
+/*
+ * Host Resources MIB - other device implementation - hr_other.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#include "host_res.h"
+#include "hr_other.h"
+
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+
+void Init_HR_CoProc(void);
+int Get_Next_HR_CoProc(void);
+const char *describe_coproc(int);
+
+void
+init_hr_other(void)
+{
+ init_device[HRDEV_COPROC] = Init_HR_CoProc;
+ next_device[HRDEV_COPROC] = Get_Next_HR_CoProc;
+ device_descr[HRDEV_COPROC] = describe_coproc;
+}
+
+
+
+static int done_coProc;
+
+void
+Init_HR_CoProc(void)
+{
+#ifdef solaris2
+ /*
+ * Sun didn't sell many Windows Co-processor boards
+ * somebody who has one will have to figure out how to discover it
+ * so assume there are none
+ */
+ done_coProc = 1;
+#else
+ done_coProc = 0;
+#endif
+}
+
+int
+Get_Next_HR_CoProc(void)
+{
+ /*
+ * How to identify the presence of a co-processor ?
+ */
+
+ if (done_coProc != 1) {
+ done_coProc = 1;
+ return (HRDEV_COPROC << HRDEV_TYPE_SHIFT);
+ } else
+ return -1;
+}
+
+
+const char *
+describe_coproc(int idx)
+{
+ return ("Guessing that there's a floating point co-processor");
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_other.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_other.h
new file mode 100644
index 0000000000..c1865d1196
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_other.h
@@ -0,0 +1,12 @@
+/*
+ * Host Resources MIB - other devices interface - hr_other.h
+ *
+ */
+#ifndef _MIBGROUP_HROTHER_H
+#define _MIBGROUP_HROTHER_H
+
+config_require(host/hr_device)
+
+void init_hr_other(void);
+
+#endif /* _MIBGROUP_HROTHER_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_partition.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_partition.c
new file mode 100644
index 0000000000..ae0bd8e53f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_partition.c
@@ -0,0 +1,312 @@
+
+/*
+ * Host Resources MIB - partition device group implementation - hr_partition.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <fcntl.h>
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <errno.h>
+
+#include "host_res.h"
+#include "hr_partition.h"
+#include "hr_filesys.h"
+#include "hr_disk.h"
+
+#include <sys/stat.h>
+
+#define HRP_MONOTONICALLY_INCREASING
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+static int HRP_savedDiskIndex;
+static int HRP_savedPartIndex;
+static char HRP_savedName[1024];
+
+static int HRP_DiskIndex;
+
+static void Save_HR_Partition(int, int);
+
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+static void Init_HR_Partition(void);
+static int Get_Next_HR_Partition(void);
+int header_hrpartition(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod **);
+
+
+#define HRPART_INDEX 1
+#define HRPART_LABEL 2
+#define HRPART_ID 3
+#define HRPART_SIZE 4
+#define HRPART_FSIDX 5
+
+struct variable4 hrpartition_variables[] = {
+ {HRPART_INDEX, ASN_INTEGER, RONLY, var_hrpartition, 2, {1, 1}},
+ {HRPART_LABEL, ASN_OCTET_STR, RONLY, var_hrpartition, 2, {1, 2}},
+ {HRPART_ID, ASN_OCTET_STR, RONLY, var_hrpartition, 2, {1, 3}},
+ {HRPART_SIZE, ASN_INTEGER, RONLY, var_hrpartition, 2, {1, 4}},
+ {HRPART_FSIDX, ASN_INTEGER, RONLY, var_hrpartition, 2, {1, 5}}
+};
+oid hrpartition_variables_oid[] =
+ { 1, 3, 6, 1, 2, 1, 25, 3, 7 };
+
+
+void
+init_hr_partition(void)
+{
+ REGISTER_MIB("host/hr_partition", hrpartition_variables, variable4,
+ hrpartition_variables_oid);
+}
+
+
+/*
+ * header_hrpartition(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ *
+ */
+
+int
+header_hrpartition(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+#define HRPART_DISK_NAME_LENGTH 11
+#define HRPART_ENTRY_NAME_LENGTH 12
+ oid newname[MAX_OID_LEN];
+ int part_idx, LowDiskIndex = -1, LowPartIndex = -1;
+ int result;
+
+ DEBUGMSGTL(("host/hr_partition", "var_hrpartition: "));
+ DEBUGMSGOID(("host/hr_partition", name, *length));
+ DEBUGMSG(("host/hr_partition", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+ /*
+ * Find "next" partition entry
+ */
+
+ Init_HR_Disk();
+ Init_HR_Partition();
+
+ /*
+ * Find the "next" disk and partition entries.
+ * If we're in the middle of the table, then there's
+ * no point in examining earlier disks, so set the
+ * starting disk to that of the variable being queried.
+ *
+ * If we've moved from one column of the table to another,
+ * then we need to start at the beginning again.
+ * (i.e. the 'compare' fails to match)
+ * Similarly if we're at the start of the table
+ * (i.e. *length is too short to be a full instance)
+ */
+
+ if ((snmp_oid_compare(vp->name, vp->namelen, name, vp->namelen) == 0)
+ && (*length > HRPART_DISK_NAME_LENGTH)) {
+ LowDiskIndex =
+ (name[HRPART_DISK_NAME_LENGTH] &
+ ((1 << HRDEV_TYPE_SHIFT) - 1));
+
+ while (HRP_DiskIndex < LowDiskIndex) {
+ Init_HR_Partition(); /* moves to next disk */
+ if (HRP_DiskIndex == -1)
+ return (MATCH_FAILED);
+ }
+ }
+
+ for (;;) {
+ part_idx = Get_Next_HR_Partition();
+ if (part_idx == 0)
+ break;
+ newname[HRPART_DISK_NAME_LENGTH] =
+ (HRDEV_DISK << HRDEV_TYPE_SHIFT) + HRP_DiskIndex;
+ newname[HRPART_ENTRY_NAME_LENGTH] = part_idx;
+ result = snmp_oid_compare(name, *length, newname, vp->namelen + 2);
+ if (exact && (result == 0)) {
+ Save_HR_Partition(HRP_DiskIndex, part_idx);
+ LowDiskIndex = HRP_DiskIndex;
+ LowPartIndex = part_idx;
+ break;
+ }
+ if (!exact && (result < 0)) {
+ if (LowPartIndex == -1) {
+ Save_HR_Partition(HRP_DiskIndex, part_idx);
+ LowDiskIndex = HRP_DiskIndex;
+ LowPartIndex = part_idx;
+ } else if (LowDiskIndex < HRP_DiskIndex)
+ break;
+ else if (part_idx < LowPartIndex) {
+ Save_HR_Partition(HRP_DiskIndex, part_idx);
+ LowDiskIndex = HRP_DiskIndex;
+ LowPartIndex = part_idx;
+ }
+#ifdef HRP_MONOTONICALLY_INCREASING
+ break;
+#endif
+ }
+ }
+
+ if (LowPartIndex == -1) {
+ DEBUGMSGTL(("host/hr_partition", "... index out of range\n"));
+ return (MATCH_FAILED);
+ }
+
+ newname[HRPART_DISK_NAME_LENGTH] =
+ (HRDEV_DISK << HRDEV_TYPE_SHIFT) + LowDiskIndex;
+ newname[HRPART_ENTRY_NAME_LENGTH] = LowPartIndex;
+ memcpy((char *) name, (char *) newname,
+ ((int) vp->namelen + 2) * sizeof(oid));
+ *length = vp->namelen + 2;
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ DEBUGMSGTL(("host/hr_partition", "... get partition stats "));
+ DEBUGMSGOID(("host/hr_partition", name, *length));
+ DEBUGMSG(("host/hr_partition", "\n"));
+ return LowPartIndex;
+}
+
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+
+u_char *
+var_hrpartition(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int part_idx;
+ static char string[1024];
+ struct stat stat_buf;
+
+ part_idx =
+ header_hrpartition(vp, name, length, exact, var_len, write_method);
+ if (part_idx == MATCH_FAILED)
+ return NULL;
+
+ if (stat(HRP_savedName, &stat_buf) == -1)
+ return NULL;
+
+ switch (vp->magic) {
+ case HRPART_INDEX:
+ long_return = part_idx;
+ return (u_char *) & long_return;
+ case HRPART_LABEL:
+ *var_len = strlen(HRP_savedName);
+ return (u_char *) HRP_savedName;
+ case HRPART_ID: /* Use the device number */
+ sprintf(string, "0x%x", (int) stat_buf.st_rdev);
+ *var_len = strlen(string);
+ return (u_char *) string;
+ case HRPART_SIZE:
+ /*
+ * XXX - based on single partition assumption
+ */
+ long_return = Get_FSSize(HRP_savedName);
+ return (u_char *) & long_return;
+ case HRPART_FSIDX:
+ long_return = Get_FSIndex(HRP_savedName);
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_hrpartition\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+static int HRP_index;
+
+static void
+Init_HR_Partition(void)
+{
+ HRP_DiskIndex = Get_Next_HR_Disk();
+ if (HRP_DiskIndex != -1)
+ HRP_DiskIndex &= ((1 << HRDEV_TYPE_SHIFT) - 1);
+
+ HRP_index = -1;
+}
+
+static int
+Get_Next_HR_Partition(void)
+{
+ char string[1024];
+ int fd;
+
+ if (HRP_DiskIndex == -1) {
+ return 0;
+ }
+
+ HRP_index++;
+ while (Get_Next_HR_Disk_Partition(string, sizeof(string), HRP_index) != -1) {
+ DEBUGMSGTL(("host/hr_partition",
+ "Get_Next_HR_Partition: %s (:%d)\n",
+ string, HRP_index));
+
+#ifdef O_NDELAY
+ fd = open(string, O_RDONLY|O_NDELAY);
+#else
+ fd = open(string, O_RDONLY);
+#endif
+ if (fd != -1) {
+ close(fd);
+ return HRP_index + 1;
+ } else if (errno == EBUSY) {
+ return HRP_index + 1;
+ }
+ HRP_index++;
+ }
+
+ /*
+ * Finished with this disk, try the next
+ */
+ Init_HR_Partition();
+ return (Get_Next_HR_Partition());
+}
+
+static void
+Save_HR_Partition(int disk_idx, int part_idx)
+{
+ HRP_savedDiskIndex = disk_idx;
+ HRP_savedPartIndex = part_idx;
+ (void) Get_Next_HR_Disk_Partition(HRP_savedName, sizeof(HRP_savedName), HRP_index);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_partition.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_partition.h
new file mode 100644
index 0000000000..c4992dd80e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_partition.h
@@ -0,0 +1,14 @@
+/*
+ * Host Resources MIB - partition device group interface - hr_partition.h
+ *
+ */
+#ifndef _MIBGROUP_HRPART_H
+#define _MIBGROUP_HRPART_H
+
+config_require(host/hr_disk)
+
+extern void init_hr_partition(void);
+extern FindVarMethod var_hrpartition;
+
+
+#endif /* _MIBGROUP_HRPART_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_print.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_print.c
new file mode 100644
index 0000000000..488b55afea
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_print.c
@@ -0,0 +1,365 @@
+/*
+ * Host Resources MIB - printer device group implementation - hr_print.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include "host_res.h"
+#include "hr_print.h"
+#include "struct.h"
+#include "util_funcs.h"
+
+#define HRPRINT_MONOTONICALLY_INCREASING
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+void Init_HR_Print(void);
+int Get_Next_HR_Print(void);
+void Save_HR_Print(void);
+const char *describe_printer(int);
+int printer_status(int);
+int printer_detail_status(int);
+int printer_errors(int);
+int header_hrprint(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod **);
+FILE *run_lpstat(int *);
+
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+#define HRPRINT_STATUS 1
+#define HRPRINT_ERROR 2
+
+struct variable4 hrprint_variables[] = {
+ {HRPRINT_STATUS, ASN_INTEGER, RONLY, var_hrprint, 2, {1, 1}},
+ {HRPRINT_ERROR, ASN_OCTET_STR, RONLY, var_hrprint, 2, {1, 2}}
+};
+oid hrprint_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 3, 5 };
+
+
+void
+init_hr_print(void)
+{
+ init_device[HRDEV_PRINTER] = Init_HR_Print;
+ next_device[HRDEV_PRINTER] = Get_Next_HR_Print;
+ /*
+ * save_device[ HRDEV_PRINTER ] = Save_HR_Print;
+ */
+#ifdef HRPRINT_MONOTONICALLY_INCREASING
+ dev_idx_inc[HRDEV_PRINTER] = 1;
+#endif
+
+ device_descr[HRDEV_PRINTER] = describe_printer;
+ device_status[HRDEV_PRINTER] = printer_status;
+ device_errors[HRDEV_PRINTER] = printer_errors;
+
+ REGISTER_MIB("host/hr_print", hrprint_variables, variable4,
+ hrprint_variables_oid);
+}
+
+/*
+ * header_hrprint(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ *
+ */
+int
+header_hrprint(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#define HRPRINT_ENTRY_NAME_LENGTH 11
+ oid newname[MAX_OID_LEN];
+ int print_idx, LowIndex = -1;
+ int result;
+
+ DEBUGMSGTL(("host/hr_print", "var_hrprint: "));
+ DEBUGMSGOID(("host/hr_print", name, *length));
+ DEBUGMSG(("host/hr_print", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name, vp->namelen * sizeof(oid));
+ /*
+ * Find "next" print entry
+ */
+
+ Init_HR_Print();
+ for (;;) {
+ print_idx = Get_Next_HR_Print();
+ if (print_idx == -1)
+ break;
+ newname[HRPRINT_ENTRY_NAME_LENGTH] = print_idx;
+ result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);
+ if (exact && (result == 0)) {
+ LowIndex = print_idx;
+ /*
+ * Save printer status information
+ */
+ break;
+ }
+ if ((!exact && (result < 0)) &&
+ (LowIndex == -1 || print_idx < LowIndex)) {
+ LowIndex = print_idx;
+ /*
+ * Save printer status information
+ */
+#ifdef HRPRINT_MONOTONICALLY_INCREASING
+ break;
+#endif
+ }
+ }
+
+ if (LowIndex == -1) {
+ DEBUGMSGTL(("host/hr_print", "... index out of range\n"));
+ return (MATCH_FAILED);
+ }
+
+ memcpy((char *) name, (char *) newname,
+ (vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ DEBUGMSGTL(("host/hr_print", "... get print stats "));
+ DEBUGMSGOID(("host/hr_print", name, *length));
+ DEBUGMSG(("host/hr_print", "\n"));
+ return LowIndex;
+}
+
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+
+u_char *
+var_hrprint(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int print_idx;
+
+ print_idx =
+ header_hrprint(vp, name, length, exact, var_len, write_method);
+ if (print_idx == MATCH_FAILED)
+ return NULL;
+
+
+ switch (vp->magic) {
+ case HRPRINT_STATUS:
+ long_return = printer_detail_status(print_idx);
+ return (u_char *) & long_return;
+ case HRPRINT_ERROR:
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = 0; /* Null string */
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("host/hr_print", "unknown sub-id %d in var_hrprint\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+static int HRP_index;
+static char **HRP_name;
+static int HRP_nbrnames, HRP_maxnames;
+
+#define HRP_MAX_INCR 10
+
+void
+Init_HR_Print(void)
+{
+#if HAVE_LPSTAT || HAVE_CGETNEXT || HAVE_PRINTCAP
+ int i;
+#if HAVE_PRINTCAP
+ FILE *p;
+#elif HAVE_CGETNEXT
+ const char *caps[] = { "/etc/printcap", NULL };
+#elif HAVE_LPSTAT
+ int fd;
+ FILE *p;
+#endif
+
+ HRP_index = 0; /* fail safe at Get_Next_HR_Print */
+
+ if (HRP_name) {
+ for (i = 0; i < HRP_nbrnames; i++)
+ free(HRP_name[i]);
+ HRP_nbrnames = 0;
+ HRP_maxnames = 0;
+ SNMP_FREE(HRP_name);
+ }
+
+#if HAVE_PRINTCAP
+ if ((p = fopen("/etc/printcap", "r")) != NULL) {
+ char buf[BUFSIZ], *ptr;
+ while (fgets(buf, sizeof buf, p)) {
+ buf[strlen(buf) - 1] = 0;
+ if (buf[0] == '#' || buf[0] == 0 || buf[0] == ' '
+ || buf[0] == '\t')
+ continue;
+ if ((ptr = strchr(buf, '\\')))
+ *ptr = 0;
+ if ((ptr = strchr(buf, ':')))
+ *ptr = 0;
+ if ((ptr = strchr(buf, '|')))
+ *ptr = 0;
+ ptr = buf;
+#elif HAVE_CGETNEXT
+ {
+ char *buf = NULL, *ptr;
+ while (cgetnext(&buf, caps) > 0) {
+ if ((ptr = strchr(buf, ':')))
+ *ptr = 0;
+ if ((ptr = strchr(buf, '|')))
+ *ptr = 0;
+ ptr = buf;
+#elif HAVE_LPSTAT
+ if ((p = run_lpstat(&fd)) != NULL) {
+ char buf[BUFSIZ], ptr[BUFSIZ];
+ while (fgets(buf, sizeof buf, p)) {
+ sscanf(buf, "%*s %*s %[^:]", ptr);
+#endif
+ if (HRP_nbrnames == HRP_maxnames) {
+ char **tmp;
+ tmp = (char **) calloc(HRP_maxnames + HRP_MAX_INCR, sizeof(char *));
+ if (!tmp)
+ goto finish;
+ if (HRP_name) {
+ memcpy(tmp, HRP_name, HRP_nbrnames * sizeof(char *));
+ free(HRP_name);
+ }
+ HRP_maxnames += HRP_MAX_INCR;
+ HRP_name = tmp;
+ }
+ HRP_name[HRP_nbrnames++] = strdup(ptr);
+#if !defined(HAVE_PRINTCAP) && defined(HAVE_CGETNEXT)
+ if (buf)
+ free(buf);
+#endif
+ }
+finish:
+#if HAVE_PRINTCAP
+ fclose(p);
+#elif HAVE_CGETNEXT
+ cgetclose();
+#elif HAVE_LPSTAT
+ fclose(p);
+ close(fd);
+#endif
+ }
+#endif /* HAVE_anything */
+}
+
+int
+Get_Next_HR_Print(void)
+{
+ /*
+ * The initial implementation system
+ * has no printers attached, and I've
+ * no real idea how to detect them,
+ * so don't bother.
+ */
+ if (HRP_index < HRP_nbrnames) /* No printer */
+ return (HRDEV_PRINTER << HRDEV_TYPE_SHIFT) + HRP_index++;
+ else
+ return -1;
+}
+
+const char *
+describe_printer(int idx)
+{
+ if (HRP_index == 0) /* return empty string if not initialized */
+ return "";
+
+ DEBUGMSGTL(("host/hr_print", "describe p: %d/%d %s\n", HRP_index, idx,
+ HRP_name[HRP_index - 1]));
+ return HRP_name[HRP_index - 1];
+}
+
+int
+printer_status(int idx)
+{
+ /*
+ * hrDeviceStatus OBJECT-TYPE
+ * SYNTAX INTEGER {
+ * unknown(1), running(2), warning(3), testing(4), down(5)
+ * }
+ */
+
+ return 1; /* unknown */
+}
+
+int
+printer_detail_status(int idx)
+{
+ /*
+ * hrPrinterStatus OBJECT-TYPE
+ * SYNTAX INTEGER {
+ * other(1), unknown(2), idle(3), printing(4), warmup(5)
+ * }
+ */
+
+ return 2; /* unknown */
+}
+
+int
+printer_errors(int idx)
+{
+ return 0;
+}
+
+#ifdef HAVE_LPSTAT
+/*
+ * Run the lpstat command. If compiled with EXCACHE support, this
+ * will actually cache the output for a while which helps a lot
+ * with snmpbulkwalk (in fact, it keeps the client from exiting
+ * due to timeouts).
+ */
+FILE *
+run_lpstat(int *fd)
+{
+ struct extensible ex;
+
+ memset(&ex, 0, sizeof(ex));
+ strcpy(ex.command, LPSTAT_PATH " -v");
+ if ((*fd = get_exec_output(&ex)) < 0)
+ return NULL;
+
+ return fdopen(*fd, "r");
+}
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_print.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_print.h
new file mode 100644
index 0000000000..23ca143ef8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_print.h
@@ -0,0 +1,14 @@
+/*
+ * Host Resources MIB - printer device group interface - hr_print.h
+ *
+ */
+#ifndef _MIBGROUP_HRPRINT_H
+#define _MIBGROUP_HRPRINT_H
+
+config_require(host/hr_device)
+
+extern void init_hr_print(void);
+extern FindVarMethod var_hrprint;
+
+
+#endif /* _MIBGROUP_HRPRINT_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_proc.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_proc.c
new file mode 100644
index 0000000000..6728fce147
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_proc.c
@@ -0,0 +1,229 @@
+/*
+ * Host Resources MIB - proc processor group implementation - hr_proc.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#include <ctype.h>
+
+#include "host_res.h"
+#include "hr_proc.h"
+#include <net-snmp/agent/auto_nlist.h>
+#include <net-snmp/agent/agent_read_config.h>
+#include <net-snmp/agent/hardware/cpu.h>
+#include "ucd-snmp/loadave.h"
+
+#define HRPROC_MONOTONICALLY_INCREASING
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+extern void Init_HR_Proc(void);
+extern int Get_Next_HR_Proc(void);
+const char *describe_proc(int);
+int proc_status(int);
+int header_hrproc(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod **);
+
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+netsnmp_cpu_info *HRP_cpu;
+
+#define HRPROC_ID 1
+#define HRPROC_LOAD 2
+
+struct variable4 hrproc_variables[] = {
+ {HRPROC_ID, ASN_OBJECT_ID, RONLY, var_hrproc, 2, {1, 1}},
+ {HRPROC_LOAD, ASN_INTEGER, RONLY, var_hrproc, 2, {1, 2}}
+};
+oid hrproc_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 3, 3 };
+
+
+void
+init_hr_proc(void)
+{
+ init_device[HRDEV_PROC] = Init_HR_Proc;
+ next_device[HRDEV_PROC] = Get_Next_HR_Proc;
+ device_descr[HRDEV_PROC] = describe_proc;
+ device_status[HRDEV_PROC] = proc_status;
+#ifdef HRPROC_MONOTONICALLY_INCREASING
+ dev_idx_inc[HRDEV_PROC] = 1;
+#endif
+
+ REGISTER_MIB("host/hr_proc", hrproc_variables, variable4,
+ hrproc_variables_oid);
+}
+
+/*
+ * header_hrproc(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ *
+ */
+
+int
+header_hrproc(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#define HRPROC_ENTRY_NAME_LENGTH 11
+ oid newname[MAX_OID_LEN];
+ int proc_idx, LowIndex = -1;
+ int result;
+
+ DEBUGMSGTL(("host/hr_proc", "var_hrproc: "));
+ DEBUGMSGOID(("host/hr_proc", name, *length));
+ DEBUGMSG(("host/hr_proc", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name, vp->namelen * sizeof(oid));
+ /*
+ * Find "next" proc entry
+ */
+
+ Init_HR_Proc();
+ for (;;) {
+ proc_idx = Get_Next_HR_Proc();
+ if (proc_idx == -1)
+ break;
+ newname[HRPROC_ENTRY_NAME_LENGTH] = proc_idx;
+ result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);
+ if (exact && (result == 0)) {
+ LowIndex = proc_idx;
+ /*
+ * Save processor status information
+ */
+ break;
+ }
+ if ((!exact && (result < 0)) &&
+ (LowIndex == -1 || proc_idx < LowIndex)) {
+ LowIndex = proc_idx;
+ /*
+ * Save processor status information
+ */
+#ifdef HRPROC_MONOTONICALLY_INCREASING
+ break;
+#endif
+ }
+ }
+
+ if (LowIndex == -1) {
+ DEBUGMSGTL(("host/hr_proc", "... index out of range\n"));
+ return (MATCH_FAILED);
+ }
+
+ memcpy((char *) name, (char *) newname,
+ (vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ DEBUGMSGTL(("host/hr_proc", "... get proc stats "));
+ DEBUGMSGOID(("host/hr_proc", name, *length));
+ DEBUGMSG(("host/hr_proc", "\n"));
+ return LowIndex;
+}
+
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+
+u_char *
+var_hrproc(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int proc_idx;
+ netsnmp_cpu_info *cpu;
+
+ proc_idx =
+ header_hrproc(vp, name, length, exact, var_len, write_method);
+ if (proc_idx == MATCH_FAILED)
+ return NULL;
+
+ switch (vp->magic) {
+ case HRPROC_ID:
+ *var_len = nullOidLen;
+ return (u_char *) nullOid;
+ case HRPROC_LOAD:
+ cpu = netsnmp_cpu_get_byIdx( proc_idx & HRDEV_TYPE_MASK, 0 );
+ if ( !cpu || !cpu->history || !cpu->history[0].total_hist )
+ return NULL;
+
+ long_return = (cpu->idle_ticks - cpu->history[0].idle_hist)*100;
+ long_return /= (cpu->total_ticks - cpu->history[0].total_hist);
+ long_return = 100 - long_return;
+ if (long_return < 0)
+ long_return = 0;
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("host/hr_proc", "unknown sub-id %d in var_hrproc\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+void
+Init_HR_Proc(void)
+{
+ HRP_cpu = netsnmp_cpu_get_first(); /* 'Overall' entry */
+}
+
+int
+Get_Next_HR_Proc(void)
+{
+ HRP_cpu = netsnmp_cpu_get_next( HRP_cpu );
+ if ( HRP_cpu )
+ return (HRDEV_PROC << HRDEV_TYPE_SHIFT) + HRP_cpu->idx;
+ else
+ return -1;
+}
+
+const char *
+describe_proc(int idx)
+{
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( idx & HRDEV_TYPE_MASK, 0 );
+ return (cpu ? cpu->descr : NULL );
+}
+
+int
+proc_status(int idx)
+{
+ netsnmp_cpu_info *cpu = netsnmp_cpu_get_byIdx( idx & HRDEV_TYPE_MASK, 0 );
+ return (cpu ? cpu->status : 0 );
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_proc.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_proc.h
new file mode 100644
index 0000000000..1e4a926b70
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_proc.h
@@ -0,0 +1,14 @@
+/*
+ * Host Resources MIB - processor device group interface - hr_proc.h
+ *
+ */
+#ifndef _MIBGROUP_HRPROC_H
+#define _MIBGROUP_HRPROC_H
+
+config_require(hardware/cpu)
+config_require(host/hr_device)
+
+extern void init_hr_proc(void);
+extern FindVarMethod var_hrproc;
+
+#endif /* _MIBGROUP_HRPROC_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_storage.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_storage.c
new file mode 100644
index 0000000000..c525452ddd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_storage.c
@@ -0,0 +1,780 @@
+/*
+ * Host Resources MIB - storage group implementation - hr_storage.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#if defined(freebsd5)
+/* undefine these in order to use getfsstat */
+#undef HAVE_STATVFS
+#undef STRUCT_STATVFS_HAS_F_FRSIZE
+#endif
+
+#include <sys/types.h>
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <windows.h>
+# include <errno.h>
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#if (!defined(mingw32) && !defined(WIN32))
+#if HAVE_UTMPX_H
+#include <utmpx.h>
+#else
+#include <utmp.h>
+#endif
+#endif /* mingw32 */
+#ifndef dynix
+#if HAVE_SYS_VM_H
+#include <sys/vm.h>
+#if (!defined(KERNEL) || defined(MACH_USER_API)) && defined(HAVE_SYS_VMMETER_H) /*OS X does not #include <sys/vmmeter.h> if (defined(KERNEL) && !defined(MACH_USER_API)) */
+#include <sys/vmmeter.h>
+#endif
+#else
+#if HAVE_VM_VM_H
+#include <vm/vm.h>
+#if HAVE_MACHINE_TYPES_H
+#include <machine/types.h>
+#endif
+#if HAVE_SYS_VMMETER_H
+#include <sys/vmmeter.h>
+#endif
+#if HAVE_VM_VM_PARAM_H
+#include <vm/vm_param.h>
+#endif
+#else
+#if HAVE_SYS_VMPARAM_H
+#include <sys/vmparam.h>
+#endif
+#if HAVE_SYS_VMMAC_H
+#include <sys/vmmac.h>
+#endif
+#if HAVE_SYS_VMMETER_H
+#include <sys/vmmeter.h>
+#endif
+#if HAVE_SYS_VMSYSTM_H
+#include <sys/vmsystm.h>
+#endif
+#endif /* vm/vm.h */
+#endif /* sys/vm.h */
+#if defined(HAVE_UVM_UVM_PARAM_H) && defined(HAVE_UVM_UVM_EXTERN_H)
+#include <uvm/uvm_param.h>
+#include <uvm/uvm_extern.h>
+#elif defined(HAVE_VM_VM_PARAM_H) && defined(HAVE_VM_VM_EXTERN_H)
+#include <vm/vm_param.h>
+#include <vm/vm_extern.h>
+#endif
+#if HAVE_KVM_H
+#include <kvm.h>
+#endif
+#if HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#if HAVE_SYS_POOL_H
+#if defined(MBPOOL_SYMBOL) && defined(MCLPOOL_SYMBOL)
+#define __POOL_EXPOSE
+#include <sys/pool.h>
+#else
+#undef HAVE_SYS_POOL_H
+#endif
+#endif
+#if HAVE_SYS_MBUF_H
+#include <sys/mbuf.h>
+#endif
+#if HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#if defined(CTL_HW) && defined(HW_PAGESIZE)
+#define USE_SYSCTL
+#endif
+#if USE_MACH_HOST_STATISTICS
+#include <mach/mach.h>
+#elif defined(CTL_VM) && (defined(VM_METER) || defined(VM_UVMEXP))
+#define USE_SYSCTL_VM
+#endif
+#endif /* if HAVE_SYS_SYSCTL_H */
+#endif /* ifndef dynix */
+
+#if (defined(aix4) || defined(aix5) || defined(aix6)) && HAVE_LIBPERFSTAT_H
+#include <libperfstat.h>
+#endif
+
+
+#include "host_res.h"
+#include "hr_storage.h"
+#include "hr_filesys.h"
+#include <net-snmp/agent/auto_nlist.h>
+
+#if HAVE_MNTENT_H
+#include <mntent.h>
+#endif
+#if HAVE_SYS_MNTTAB_H
+#include <sys/mnttab.h>
+#endif
+#if HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
+#if HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+#if HAVE_SYS_MOUNT_H
+#ifdef __osf__
+#undef m_next
+#undef m_data
+#endif
+#include <sys/mount.h>
+#endif
+#ifdef HAVE_MACHINE_PARAM_H
+#include <machine/param.h>
+#endif
+#include <sys/stat.h>
+
+#if defined(hpux10) || defined(hpux11)
+#include <sys/pstat.h>
+#endif
+#if defined(solaris2)
+#if HAVE_SYS_SWAP_H
+#include <sys/swap.h>
+#endif
+#endif
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/utilities.h>
+#include <net-snmp/output_api.h>
+
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/hardware/memory.h>
+
+#ifdef solaris2
+#include "kernel_sunos5.h"
+#endif
+
+#include <net-snmp/agent/agent_read_config.h>
+#include <net-snmp/library/read_config.h>
+
+#define HRSTORE_MONOTONICALLY_INCREASING
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+
+#ifdef solaris2
+
+extern struct mnttab *HRFS_entry;
+#define HRFS_mount mnt_mountp
+#define HRFS_statfs statvfs
+#define HRFS_HAS_FRSIZE STRUCT_STATVFS_HAS_F_FRSIZE
+
+#elif defined(WIN32)
+/* fake block size */
+#define FAKED_BLOCK_SIZE 512
+
+extern struct win_statfs *HRFS_entry;
+#define HRFS_statfs win_statfs
+#define HRFS_mount f_driveletter
+
+#elif defined(HAVE_STATVFS) && defined(__NetBSD__)
+
+extern struct statvfs *HRFS_entry;
+extern int fscount;
+#define HRFS_statfs statvfs
+#define HRFS_mount f_mntonname
+#define HRFS_HAS_FRSIZE STRUCT_STATVFS_HAS_F_FRSIZE
+
+#elif defined(HAVE_STATVFS) && defined(STRUCT_STATVFS_HAS_MNT_DIR)
+
+extern struct mntent *HRFS_entry;
+extern int fscount;
+#define HRFS_statfs statvfs
+#define HRFS_mount mnt_dir
+#define HRFS_HAS_FRSIZE STRUCT_STATVFS_HAS_F_FRSIZE
+
+#elif defined(HAVE_GETFSSTAT)
+
+extern struct statfs *HRFS_entry;
+extern int fscount;
+#define HRFS_statfs statfs
+#define HRFS_mount f_mntonname
+#define HRFS_HAS_FRSIZE STRUCT_STATFS_HAS_F_FRSIZE
+
+#else
+
+extern struct mntent *HRFS_entry;
+#define HRFS_mount mnt_dir
+#define HRFS_statfs statfs
+#define HRFS_HAS_FRSIZE STRUCT_STATFS_HAS_F_FRSIZE
+
+#endif
+
+#if defined(USE_MACH_HOST_STATISTICS)
+mach_port_t myHost;
+#endif
+
+static void parse_storage_config(const char *, char *);
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+int Get_Next_HR_Store(void);
+void Init_HR_Store(void);
+int header_hrstore(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod **);
+void* header_hrstoreEntry(struct variable *, oid *, size_t *,
+ int, size_t *, WriteMethod **);
+
+#ifdef solaris2
+void sol_get_swapinfo(int *, int *);
+#endif
+
+#define HRSTORE_MEMSIZE 1
+#define HRSTORE_INDEX 2
+#define HRSTORE_TYPE 3
+#define HRSTORE_DESCR 4
+#define HRSTORE_UNITS 5
+#define HRSTORE_SIZE 6
+#define HRSTORE_USED 7
+#define HRSTORE_FAILS 8
+
+struct variable4 hrstore_variables[] = {
+ {HRSTORE_MEMSIZE, ASN_INTEGER, RONLY, var_hrstore, 1, {2}},
+ {HRSTORE_INDEX, ASN_INTEGER, RONLY, var_hrstore, 3, {3, 1, 1}},
+ {HRSTORE_TYPE, ASN_OBJECT_ID, RONLY, var_hrstore, 3, {3, 1, 2}},
+ {HRSTORE_DESCR, ASN_OCTET_STR, RONLY, var_hrstore, 3, {3, 1, 3}},
+ {HRSTORE_UNITS, ASN_INTEGER, RONLY, var_hrstore, 3, {3, 1, 4}},
+ {HRSTORE_SIZE, ASN_INTEGER, RONLY, var_hrstore, 3, {3, 1, 5}},
+ {HRSTORE_USED, ASN_INTEGER, RONLY, var_hrstore, 3, {3, 1, 6}},
+ {HRSTORE_FAILS, ASN_COUNTER, RONLY, var_hrstore, 3, {3, 1, 7}}
+};
+oid hrstore_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 2 };
+
+
+void
+init_hr_storage(void)
+{
+ char *appname;
+
+ REGISTER_MIB("host/hr_storage", hrstore_variables, variable4,
+ hrstore_variables_oid);
+
+ appname = netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_APPTYPE);
+ netsnmp_ds_register_config(ASN_BOOLEAN, appname, "skipNFSInHostResources",
+ NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES);
+
+ snmpd_register_config_handler("storageUseNFS", parse_storage_config, NULL,
+ "1 | 2\t\t(1 = enable, 2 = disable)");
+}
+
+static int storageUseNFS = 1; /* Default to reporting NFS mounts as NetworkDisk */
+
+static void
+parse_storage_config(const char *token, char *cptr)
+{
+ char *val;
+ int ival;
+ char *st;
+
+ val = strtok_r(cptr, " \t", &st);
+ if (!val) {
+ config_perror("Missing FLAG parameter in storageUseNFS");
+ return;
+ }
+ ival = atoi(val);
+ if (ival < 1 || ival > 2) {
+ config_perror("storageUseNFS must be 1 or 2");
+ return;
+ }
+ storageUseNFS = (ival == 1) ? 1 : 0;
+}
+
+/*
+ * header_hrstore(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ *
+ */
+
+int
+header_hrstore(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#define HRSTORE_NAME_LENGTH 9
+ oid newname[MAX_OID_LEN];
+ int result;
+
+ DEBUGMSGTL(("host/hr_storage", "var_hrstore: "));
+ DEBUGMSGOID(("host/hr_storage", name, *length));
+ DEBUGMSG(("host/hr_storage", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name, vp->namelen * sizeof(oid));
+ newname[HRSTORE_NAME_LENGTH] = 0;
+ result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);
+ if ((exact && (result != 0)) || (!exact && (result >= 0)))
+ return (MATCH_FAILED);
+ memcpy((char *) name, (char *) newname,
+ (vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+ return (MATCH_SUCCEEDED);
+}
+
+void *
+header_hrstoreEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+#define HRSTORE_ENTRY_NAME_LENGTH 11
+ oid newname[MAX_OID_LEN];
+ int storage_idx, LowIndex = -1;
+ int result;
+ int idx = -1;
+ netsnmp_memory_info *mem = NULL;
+
+ DEBUGMSGTL(("host/hr_storage", "var_hrstoreEntry: request "));
+ DEBUGMSGOID(("host/hr_storage", name, *length));
+ DEBUGMSG(("host/hr_storage", " exact=%d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+ result = snmp_oid_compare(name, *length, vp->name, vp->namelen);
+
+ DEBUGMSGTL(("host/hr_storage", "var_hrstoreEntry: compare "));
+ DEBUGMSGOID(("host/hr_storage", vp->name, vp->namelen));
+ DEBUGMSG(("host/hr_storage", " => %d\n", result));
+
+
+ if (result < 0 ||
+ *length <= HRSTORE_ENTRY_NAME_LENGTH ) {
+ /*
+ * Requested OID too early or too short to refer
+ * to a valid row (for the current column object).
+ * GET requests should fail, GETNEXT requests
+ * should use the first row.
+ */
+ if ( exact )
+ return NULL;
+ netsnmp_memory_load();
+ mem = netsnmp_memory_get_first( 0 );
+ }
+ else {
+ /*
+ * Otherwise, retrieve the requested
+ * (or following) row as appropriate.
+ */
+ if ( exact && *length > HRSTORE_ENTRY_NAME_LENGTH+1 )
+ return NULL; /* Too long for a valid instance */
+ idx = name[ HRSTORE_ENTRY_NAME_LENGTH ];
+ if ( idx < NETSNMP_MEM_TYPE_MAX ) {
+ netsnmp_memory_load();
+ mem = ( exact ? netsnmp_memory_get_byIdx( idx, 0 ) :
+ netsnmp_memory_get_next_byIdx( idx, 0 ));
+ }
+ }
+
+ /*
+ * If this matched a memory-based entry, then
+ * update the OID parameter(s) for GETNEXT requests.
+ */
+ if ( mem ) {
+ if ( !exact ) {
+ newname[ HRSTORE_ENTRY_NAME_LENGTH ] = mem->idx;
+ memcpy((char *) name, (char *) newname,
+ ((int) vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ }
+ }
+ /*
+ * If this didn't match a memory-based entry,
+ * then consider the disk-based storage.
+ */
+ else {
+ Init_HR_Store();
+ for (;;) {
+ storage_idx = Get_Next_HR_Store();
+ DEBUGMSG(("host/hr_storage", "(index %d ....", storage_idx));
+ if (storage_idx == -1)
+ break;
+ newname[HRSTORE_ENTRY_NAME_LENGTH] = storage_idx;
+ DEBUGMSGOID(("host/hr_storage", newname, *length));
+ DEBUGMSG(("host/hr_storage", "\n"));
+ result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);
+ if (exact && (result == 0)) {
+ LowIndex = storage_idx;
+ /*
+ * Save storage status information
+ */
+ break;
+ }
+ if ((!exact && (result < 0)) &&
+ (LowIndex == -1 || storage_idx < LowIndex)) {
+ LowIndex = storage_idx;
+ /*
+ * Save storage status information
+ */
+#ifdef HRSTORE_MONOTONICALLY_INCREASING
+ break;
+#endif
+ }
+ }
+ if ( LowIndex != -1 ) {
+ if ( !exact ) {
+ newname[ HRSTORE_ENTRY_NAME_LENGTH ] = LowIndex;
+ memcpy((char *) name, (char *) newname,
+ ((int) vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ }
+ mem = (netsnmp_memory_info*)0xffffffff; /* To indicate 'success' */
+ }
+ }
+
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ /*
+ * ... and return the appropriate row
+ */
+ DEBUGMSGTL(("host/hr_storage", "var_hrstoreEntry: process "));
+ DEBUGMSGOID(("host/hr_storage", name, *length));
+ DEBUGMSG(("host/hr_storage", " (%x)\n", mem));
+ return (void*)mem;
+}
+
+oid storage_type_id[] = { 1, 3, 6, 1, 2, 1, 25, 2, 1, 1 }; /* hrStorageOther */
+int storage_type_len =
+ sizeof(storage_type_id) / sizeof(storage_type_id[0]);
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+static const char *hrs_descr[] = {
+ NULL,
+ "Memory Buffers", /* HRS_TYPE_MBUF */
+ "Real Memory", /* HRS_TYPE_MEM */
+ "Swap Space" /* HRS_TYPE_SWAP */
+};
+
+
+
+u_char *
+var_hrstore(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int store_idx = 0;
+ static char string[1024];
+ struct HRFS_statfs stat_buf;
+ void *ptr;
+ netsnmp_memory_info *mem = NULL;
+
+ if (vp->magic == HRSTORE_MEMSIZE) {
+ if (header_hrstore(vp, name, length, exact, var_len, write_method)
+ == MATCH_FAILED)
+ return NULL;
+ } else {
+
+really_try_next:
+ ptr = header_hrstoreEntry(vp, name, length, exact, var_len,
+ write_method);
+ if (ptr == NULL)
+ return NULL;
+
+ store_idx = name[ HRSTORE_ENTRY_NAME_LENGTH ];
+ if (HRFS_entry &&
+ netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES) &&
+ Check_HR_FileSys_NFS())
+ return NULL;
+ if (store_idx > NETSNMP_MEM_TYPE_MAX ) {
+ if (HRFS_statfs(HRFS_entry->HRFS_mount, &stat_buf) < 0) {
+ snmp_log_perror(HRFS_entry->HRFS_mount);
+ goto try_next;
+ }
+ } else {
+ mem = (netsnmp_memory_info*)ptr;
+ }
+ }
+
+
+
+ switch (vp->magic) {
+ case HRSTORE_MEMSIZE:
+ netsnmp_memory_load();
+ mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 0 );
+ if ( !mem || mem->size == -1 || mem->units == -1 )
+ return NULL;
+ long_return = mem->size * (mem->units / 1024);
+ return (u_char *) & long_return;
+
+ case HRSTORE_INDEX:
+ long_return = store_idx;
+ return (u_char *) & long_return;
+ case HRSTORE_TYPE:
+ if (store_idx > NETSNMP_MEM_TYPE_MAX)
+ if (storageUseNFS && Check_HR_FileSys_NFS())
+ storage_type_id[storage_type_len - 1] = 10; /* Network Disk */
+#if HAVE_HASMNTOPT
+ else if (hasmntopt(HRFS_entry, "loop") != NULL)
+ storage_type_id[storage_type_len - 1] = 5; /* Removable Disk */
+#endif
+ else
+ storage_type_id[storage_type_len - 1] = 4; /* Assume fixed */
+ else
+ switch (store_idx) {
+ case NETSNMP_MEM_TYPE_PHYSMEM:
+ case NETSNMP_MEM_TYPE_USERMEM:
+ storage_type_id[storage_type_len - 1] = 2; /* RAM */
+ break;
+ case NETSNMP_MEM_TYPE_VIRTMEM:
+ case NETSNMP_MEM_TYPE_SWAP:
+ storage_type_id[storage_type_len - 1] = 3; /* Virtual Mem */
+ break;
+ default:
+ storage_type_id[storage_type_len - 1] = 1; /* Other */
+ break;
+ }
+ *var_len = sizeof(storage_type_id);
+ return (u_char *) storage_type_id;
+ case HRSTORE_DESCR:
+ if (store_idx > NETSNMP_MEM_TYPE_MAX) {
+ strncpy(string, HRFS_entry->HRFS_mount, sizeof(string)-1);
+ string[ sizeof(string)-1 ] = 0;
+ *var_len = strlen(string);
+ return (u_char *) string;
+ } else {
+ if ( !mem || !mem->descr )
+ goto try_next;
+ *var_len = strlen(mem->descr);
+ return (u_char *) mem->descr;
+ }
+ case HRSTORE_UNITS:
+ if (store_idx > NETSNMP_MEM_TYPE_MAX)
+#if HRFS_HAS_FRSIZE
+ long_return = stat_buf.f_frsize;
+#else
+ long_return = stat_buf.f_bsize;
+#endif
+ else {
+ if ( !mem || mem->units == -1 )
+ goto try_next;
+ long_return = mem->units;
+ }
+ return (u_char *) & long_return;
+ case HRSTORE_SIZE:
+ if (store_idx > NETSNMP_MEM_TYPE_MAX)
+ long_return = stat_buf.f_blocks;
+ else {
+ if ( !mem || mem->size == -1 )
+ goto try_next;
+ long_return = mem->size;
+ }
+ return (u_char *) & long_return;
+ case HRSTORE_USED:
+ if (store_idx > NETSNMP_MEM_TYPE_MAX)
+ long_return = (stat_buf.f_blocks - stat_buf.f_bfree);
+ else {
+ if ( !mem || mem->size == -1 || mem->free == -1 )
+ goto try_next;
+ long_return = mem->size - mem->free;
+ }
+ return (u_char *) & long_return;
+ case HRSTORE_FAILS:
+ if (store_idx > NETSNMP_MEM_TYPE_MAX)
+#if NETSNMP_NO_DUMMY_VALUES
+ goto try_next;
+#else
+ long_return = 0;
+#endif
+ else {
+ if ( !mem || mem->other == -1 )
+ goto try_next;
+ long_return = mem->other;
+ }
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_hrstore\n",
+ vp->magic));
+ }
+ return NULL;
+
+ try_next:
+ if (!exact)
+ goto really_try_next;
+
+ return NULL;
+}
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+static int FS_storage;
+static int HRS_index;
+
+void
+Init_HR_Store(void)
+{
+ HRS_index = 0;
+ Init_HR_FileSys();
+}
+
+int
+Get_Next_HR_Store(void)
+{
+ /*
+ * File-based storage
+ */
+ for (;;) {
+ HRS_index = Get_Next_HR_FileSys();
+ if (HRS_index >= 0) {
+ if (!(netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_SKIPNFSINHOSTRESOURCES) &&
+ Check_HR_FileSys_NFS())) {
+ return HRS_index + NETSNMP_MEM_TYPE_MAX;
+ }
+ } else {
+ return -1;
+ }
+ }
+}
+
+#ifdef solaris2
+void
+sol_get_swapinfo(int *totalP, int *usedP)
+{
+ struct anoninfo ainfo;
+
+ if (swapctl(SC_AINFO, &ainfo) < 0) {
+ *totalP = *usedP = 0;
+ return;
+ }
+
+ *totalP = ainfo.ani_max;
+ *usedP = ainfo.ani_resv;
+}
+#endif /* solaris2 */
+
+#ifdef WIN32
+char *win_realpath(const char *file_name, char *resolved_name)
+{
+ char szFile[_MAX_PATH + 1];
+ char *pszRet;
+
+ pszRet = _fullpath(szFile, resolved_name, MAX_PATH);
+
+ return pszRet;
+}
+
+static int win_statfs (const char *path, struct win_statfs *buf)
+{
+ HINSTANCE h;
+ FARPROC f;
+ int retval = 0;
+ char tmp [MAX_PATH], resolved_path [MAX_PATH];
+ GetFullPathName(path, MAX_PATH, resolved_path, NULL);
+ /* TODO - Fix this! The realpath macro needs defined
+ * or rewritten into the function.
+ */
+
+ win_realpath(path, resolved_path);
+
+ if (!resolved_path)
+ retval = - 1;
+ else {
+ /* check whether GetDiskFreeSpaceExA is supported */
+ h = LoadLibraryA ("kernel32.dll");
+ if (h)
+ f = GetProcAddress (h, "GetDiskFreeSpaceExA");
+ else
+ f = NULL;
+
+ if (f) {
+ ULARGE_INTEGER bytes_free, bytes_total, bytes_free2;
+ if (!f (resolved_path, &bytes_free2, &bytes_total, &bytes_free)) {
+ errno = ENOENT;
+ retval = - 1;
+ } else {
+ buf -> f_bsize = FAKED_BLOCK_SIZE;
+ buf -> f_bfree = (bytes_free.QuadPart) / FAKED_BLOCK_SIZE;
+ buf -> f_files = buf -> f_blocks = (bytes_total.QuadPart) / FAKED_BLOCK_SIZE;
+ buf -> f_ffree = buf -> f_bavail = (bytes_free2.QuadPart) / FAKED_BLOCK_SIZE;
+ }
+ } else {
+ DWORD sectors_per_cluster, bytes_per_sector;
+ if (h) FreeLibrary (h);
+ if (!GetDiskFreeSpaceA (resolved_path, &sectors_per_cluster,
+ &bytes_per_sector, &buf -> f_bavail, &buf -> f_blocks)) {
+ errno = ENOENT;
+ retval = - 1;
+ } else {
+ buf -> f_bsize = sectors_per_cluster * bytes_per_sector;
+ buf -> f_files = buf -> f_blocks;
+ buf -> f_ffree = buf -> f_bavail;
+ buf -> f_bfree = buf -> f_bavail;
+ }
+ }
+ if (h) FreeLibrary (h);
+ }
+
+ /* get the FS volume information */
+ if (strspn (":", resolved_path) > 0) resolved_path [3] = '\0'; /* we want only the root */
+ if (GetVolumeInformation (resolved_path, NULL, 0, &buf -> f_fsid, &buf -> f_namelen,
+ NULL, tmp, MAX_PATH)) {
+ if (strcasecmp ("NTFS", tmp) == 0) {
+ buf -> f_type = NTFS_SUPER_MAGIC;
+ } else {
+ buf -> f_type = MSDOS_SUPER_MAGIC;
+ }
+ } else {
+ errno = ENOENT;
+ retval = - 1;
+ }
+ return retval;
+}
+#endif /* WIN32 */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_storage.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_storage.h
new file mode 100644
index 0000000000..ffa1f52abf
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_storage.h
@@ -0,0 +1,43 @@
+/*
+ * Host Resources MIB - storage group interface - hr_system.h
+ *
+ */
+#ifndef _MIBGROUP_HRSTORAGE_H
+#define _MIBGROUP_HRSTORAGE_H
+
+config_require(hardware/memory)
+config_require(host/hr_filesys)
+
+extern void init_hr_storage(void);
+extern FindVarMethod var_hrstore;
+
+
+#define HRS_TYPE_MBUF 1
+#define HRS_TYPE_MEM 2
+#define HRS_TYPE_SWAP 3
+#define HRS_TYPE_FIXED_MAX 3 /* the largest fixed type */
+
+#ifdef WIN32
+/* linux-compatible values for fs type */
+#define MSDOS_SUPER_MAGIC 0x4d44
+#define NTFS_SUPER_MAGIC 0x5346544E
+
+/* Define the statfs structure for Windows. */
+struct win_statfs {
+ long f_type; /* type of filesystem */
+ long f_bsize; /* optimal transfer block size */
+ long f_blocks; /* total data blocks in file system */
+ long f_bfree; /* free blocks in fs */
+ long f_bavail; /* free blocks avail to non-superuser */
+ long f_files; /* total file nodes in file system */
+ long f_ffree; /* free file nodes in fs */
+ long f_fsid; /* file system id */
+ long f_namelen; /* maximum length of filenames */
+ long f_spare[6]; /* spare for later */
+ char f_driveletter[6];
+};
+
+static int win_statfs (const char *path, struct win_statfs *buf);
+#endif /* WIN32*/
+
+#endif /* _MIBGROUP_HRSTORAGE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swinst.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swinst.c
new file mode 100644
index 0000000000..3d67a83f53
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swinst.c
@@ -0,0 +1,718 @@
+/*
+ * Host Resources MIB - Installed Software group implementation - hr_swinst.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#include <sys/stat.h>
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_DIRENT_H
+#include <dirent.h>
+#else
+# define dirent direct
+# if HAVE_SYS_NDIR_H
+# include <sys/ndir.h>
+# endif
+# if HAVE_SYS_DIR_H
+# include <sys/dir.h>
+# endif
+# if HAVE_NDIR_H
+# include <ndir.h>
+# endif
+#endif
+#ifdef HAVE_PKGLOCS_H
+#include <pkglocs.h>
+#endif
+#ifdef HAVE_PKGINFO_H
+#include <pkginfo.h>
+#endif
+
+#ifdef HAVE_LIBRPM
+#include <rpm/rpmlib.h>
+#include <rpm/header.h>
+#include <fcntl.h>
+
+#ifdef HAVE_RPMGETPATH
+#include <rpm/rpmmacro.h>
+#endif
+
+#ifdef HAVE_RPM_RPMDB_H
+#include <rpm/rpmdb.h>
+#endif
+#endif
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include "host_res.h"
+#include "hr_swinst.h"
+#include <net-snmp/utilities.h>
+
+#define HRSWINST_MONOTONICALLY_INCREASING
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+/*
+ * Reorganize the global data into a single static structure.
+ *
+ * Old New
+ *======================================================
+ * HRSW_directory swi->swi_directory
+ * HRSW_name[100] swi->swi_name[SNMP_MAXPATH]
+ * HRSW_index swi->swi_index
+ *
+ * swi->swi_dbpath (RPM only)
+ * swi->swi_maxrec (RPM only)
+ * swi->swi_nrec (RPM only)
+ * swi->swi_recs (RPM only)
+ * rpm_db swi->swi_rpmdb (RPM only)
+ * swi->swi_h (RPM only)
+ * swi->swi_prevx (RPM only)
+ *
+ * dp swi->swi_dp
+ * de_p swi->swi_dep
+ */
+typedef struct {
+#if HAVE_LIBRPM
+ char *swi_directory;
+#else
+ const char *swi_directory;
+#endif
+ char swi_name[SNMP_MAXPATH]; /* XXX longest file name */
+ int swi_index;
+
+#if HAVE_LIBRPM
+ const char *swi_dbpath;
+
+ time_t swi_timestamp; /* modify time on database */
+ int swi_maxrec; /* no. of allocations */
+ int swi_nrec; /* no. of valid offsets */
+ int *swi_recs; /* db record offsets */
+ rpmdb swi_rpmdb;
+ Header swi_h;
+ int swi_prevx;
+#else
+ DIR *swi_dp;
+ struct dirent *swi_dep;
+#endif
+
+} SWI_t;
+
+static SWI_t _myswi = { NULL, "", 0 }; /* XXX static for now */
+
+int header_hrswinst(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod **);
+int header_hrswInstEntry(struct variable *, oid *, size_t *,
+ int, size_t *, WriteMethod **);
+
+extern struct timeval starttime;
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+extern void Init_HR_SWInst(void);
+extern int Get_Next_HR_SWInst(void);
+extern void End_HR_SWInst(void);
+extern void Save_HR_SW_info(int ix);
+
+#ifdef HAVE_LIBRPM
+static void Mark_HRSW_token(void);
+static void Release_HRSW_token(void);
+#else
+#define Mark_HRSW_token()
+#define Release_HRSW_token()
+#endif
+
+
+#define HRSWINST_CHANGE 1
+#define HRSWINST_UPDATE 2
+#define HRSWINST_INDEX 3
+#define HRSWINST_NAME 4
+#define HRSWINST_ID 5
+#define HRSWINST_TYPE 6
+#define HRSWINST_DATE 7
+
+struct variable4 hrswinst_variables[] = {
+ {HRSWINST_CHANGE, ASN_TIMETICKS, RONLY, var_hrswinst, 1, {1}},
+ {HRSWINST_UPDATE, ASN_TIMETICKS, RONLY, var_hrswinst, 1, {2}},
+ {HRSWINST_INDEX, ASN_INTEGER, RONLY, var_hrswinst, 3, {3, 1, 1}},
+ {HRSWINST_NAME, ASN_OCTET_STR, RONLY, var_hrswinst, 3, {3, 1, 2}},
+ {HRSWINST_ID, ASN_OBJECT_ID, RONLY, var_hrswinst, 3, {3, 1, 3}},
+ {HRSWINST_TYPE, ASN_INTEGER, RONLY, var_hrswinst, 3, {3, 1, 4}},
+ {HRSWINST_DATE, ASN_OCTET_STR, RONLY, var_hrswinst, 3, {3, 1, 5}}
+};
+oid hrswinst_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 6 };
+
+
+#ifdef PKGLOC /* Description from HRSW_dir/.../pkginfo: DESC= */
+#define _PATH_HRSW_directory PKGLOC
+#endif
+#ifdef hpux9 /* Description from HRSW_dir/.../index: fd: */
+#define _PATH_HRSW_directory "/system"
+#endif
+#ifdef hpux10 /* Description from HRSW_dir/.../pfiles/INDEX: title */
+#define _PATH_HRSW_directory "/var/adm/sw/products"
+#endif
+#ifdef hpux11 /* Description from HRSW_dir/.../pfiles/INDEX: title */
+#define _PATH_HRSW_directory "/var/adm/sw/products"
+#endif
+#ifdef freebsd2
+#define _PATH_HRSW_directory "/var/db/pkg"
+#endif
+
+void
+init_hr_swinst(void)
+{
+#if defined(HAVE_LIBRPM) || defined(_PATH_HRSW_directory)
+ SWI_t *swi = &_myswi; /* XXX static for now */
+#endif
+#ifdef HAVE_LIBRPM
+ struct stat stat_buf;
+#endif
+
+ /*
+ * Read settings from config file,
+ * or take system-specific defaults
+ */
+
+#ifdef HAVE_LIBRPM
+ if (swi->swi_directory == NULL) {
+ char path[SNMP_MAXPATH];
+
+ /*
+ * XXX distinguish between rpm-2.5.x and rpm-2.9x
+ */
+#ifdef HAVE_RPMGETPATH
+ rpmReadConfigFiles(NULL, NULL);
+ swi->swi_dbpath = rpmGetPath("%{_dbpath}", NULL);
+#else
+ rpmReadConfigFiles(NULL, NULL, NULL, 0);
+ swi->swi_dbpath = rpmGetVar(RPMVAR_DBPATH);
+#endif
+ if (swi->swi_directory != NULL)
+ free(swi->swi_directory);
+ snprintf(path, sizeof(path), "%s/Packages", swi->swi_dbpath);
+ if (stat(path, &stat_buf) == -1)
+ snprintf(path, sizeof(path), "%s/packages.rpm", swi->swi_dbpath);
+ path[ sizeof(path)-1 ] = 0;
+ swi->swi_directory = strdup(path);
+ }
+#else
+# ifdef _PATH_HRSW_directory
+ if (swi->swi_directory == NULL) {
+ swi->swi_directory = _PATH_HRSW_directory;
+ }
+ strcpy(swi->swi_name, "[installed name]"); /* default name */
+# else
+ /*
+ * XXX SunOS4 package directory is ?? -MJS
+ */
+ return; /* packages not known - don't register */
+# endif
+#endif
+
+ REGISTER_MIB("host/hr_swinst", hrswinst_variables, variable4,
+ hrswinst_variables_oid);
+}
+
+/*
+ * header_hrswinst(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ */
+
+int
+header_hrswinst(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#define HRSWINST_NAME_LENGTH 9
+ oid newname[MAX_OID_LEN];
+ int result;
+
+ DEBUGMSGTL(("host/hr_swinst", "var_hrswinst: "));
+ DEBUGMSGOID(("host/hr_swinst", name, *length));
+ DEBUGMSG(("host/hr_swinst", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name, vp->namelen * sizeof(oid));
+ newname[HRSWINST_NAME_LENGTH] = 0;
+ result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);
+ if ((exact && (result != 0)) || (!exact && (result >= 0)))
+ return (MATCH_FAILED);
+ memcpy((char *) name, (char *) newname,
+ (vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+ return (MATCH_SUCCEEDED);
+}
+
+int
+header_hrswInstEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+#define HRSWINST_ENTRY_NAME_LENGTH 11
+ oid newname[MAX_OID_LEN];
+ int swinst_idx, LowIndex = -1;
+ int result;
+
+ DEBUGMSGTL(("host/hr_swinst", "var_hrswinstEntry: "));
+ DEBUGMSGOID(("host/hr_swinst", name, *length));
+ DEBUGMSG(("host/hr_swinst", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name, vp->namelen * sizeof(oid));
+ /*
+ * Find "next" installed software entry
+ */
+
+ Init_HR_SWInst();
+ while ((swinst_idx = Get_Next_HR_SWInst()) != -1) {
+ DEBUGMSG(("host/hr_swinst", "(index %d ....", swinst_idx));
+
+ newname[HRSWINST_ENTRY_NAME_LENGTH] = swinst_idx;
+ DEBUGMSGOID(("host/hr_swinst", newname, *length));
+ DEBUGMSG(("host/hr_swinst", "\n"));
+ result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);
+ if (exact && (result == 0)) {
+ LowIndex = swinst_idx;
+ Save_HR_SW_info(LowIndex);
+ break;
+ }
+ if ((!exact && (result < 0)) &&
+ (LowIndex == -1 || swinst_idx < LowIndex)) {
+ LowIndex = swinst_idx;
+ Save_HR_SW_info(LowIndex);
+#ifdef HRSWINST_MONOTONICALLY_INCREASING
+ break;
+#endif
+ }
+ }
+
+ Mark_HRSW_token();
+ End_HR_SWInst();
+
+ if (LowIndex == -1) {
+ DEBUGMSGTL(("host/hr_swinst", "... index out of range\n"));
+ return (MATCH_FAILED);
+ }
+
+ memcpy((char *) name, (char *) newname,
+ (vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ DEBUGMSGTL(("host/hr_inst", "... get installed S/W stats "));
+ DEBUGMSGOID(("host/hr_inst", name, *length));
+ DEBUGMSG(("host/hr_inst", "\n"));
+ return LowIndex;
+}
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+
+u_char *
+var_hrswinst(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ SWI_t *swi = &_myswi; /* XXX static for now */
+ int sw_idx = 0;
+ static char string[SNMP_MAXPATH];
+ u_char *ret = NULL;
+ struct stat stat_buf;
+
+ if (vp->magic < HRSWINST_INDEX) {
+ if (header_hrswinst(vp, name, length, exact, var_len, write_method)
+ == MATCH_FAILED)
+ return NULL;
+ } else {
+
+ sw_idx =
+ header_hrswInstEntry(vp, name, length, exact, var_len,
+ write_method);
+ if (sw_idx == MATCH_FAILED)
+ return NULL;
+ }
+
+ switch (vp->magic) {
+ case HRSWINST_CHANGE:
+ case HRSWINST_UPDATE:
+ string[0] = '\0';
+
+ if (swi->swi_directory != NULL) {
+ strncpy(string, swi->swi_directory, sizeof(string));
+ string[ sizeof(string)-1 ] = 0;
+ }
+
+ if (*string && (stat(string, &stat_buf) != -1)) {
+ if (stat_buf.st_mtime > starttime.tv_sec)
+ /*
+ * changed 'recently' - i.e. since this agent started
+ */
+ long_return = (stat_buf.st_mtime - starttime.tv_sec) * 100;
+ else
+ long_return = 0; /* predates this agent */
+ } else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#else
+ long_return = 363136200;
+#endif
+ ret = (u_char *) & long_return;
+ break;
+
+ case HRSWINST_INDEX:
+ long_return = sw_idx;
+ ret = (u_char *) & long_return;
+ break;
+ case HRSWINST_NAME:
+ {
+#ifdef HAVE_PKGINFO
+ char *pver;
+# endif
+ strncpy(string, swi->swi_name, sizeof(string) - 1);
+
+/* If we are on a solaris machine, the package names do not include versioning info,
+ * so we must add it manually
+ */
+#ifdef HAVE_PKGINFO
+ pver = pkgparam(swi->swi_name, "VERSION");
+ /* 1 spot for the terminating null and one for the dash */
+ if (strlen(pver) + 2 + strlen(string) <= sizeof(string)) {
+ strcat(string, "-");
+ strcat(string, pver);
+ }
+# endif
+
+ /*
+ * This will be unchanged from the initial "null"
+ * value, if swi->swi_name is not defined
+ */
+ string[sizeof(string) - 1] = '\0';
+ *var_len = strlen(string);
+ ret = (u_char *) string;
+ }
+ break;
+ case HRSWINST_ID:
+ *var_len = nullOidLen;
+ ret = (u_char *) nullOid;
+ break;
+ case HRSWINST_TYPE:
+ {
+#ifdef HAVE_PKGINFO
+ /*
+ * at least on solaris2 this works
+ */
+ char *catg = pkgparam(swi->swi_name, "CATEGORY");
+
+ if (catg == NULL) {
+ long_return = 1; /* unknown */
+ } else {
+ if (strstr(catg, "system") != NULL) {
+ long_return = 2; /* operatingSystem */
+ } else if (strstr(catg, "application") != NULL) {
+ long_return = 4; /* applcation */
+ } else {
+ long_return = 1; /* unknown */
+ }
+ free(catg);
+ }
+#else
+# ifdef HAVE_LIBRPM
+ char *rpm_groups;
+ if ( headerGetEntry(swi->swi_h, RPMTAG_GROUP, NULL, (void **) &rpm_groups, NULL) ) {
+ if ( strstr(rpm_groups, "System Environment") != NULL )
+ long_return = 2; /* operatingSystem */
+ else
+ long_return = 4; /* applcation */
+ } else {
+ long_return = 1; /* unknown */
+ }
+# else
+ long_return = 1; /* unknown */
+# endif
+#endif
+ ret = (u_char *) & long_return;
+ }
+ break;
+ case HRSWINST_DATE:
+ {
+#ifdef HAVE_LIBRPM
+ int_32 *rpm_data;
+ if ( headerGetEntry(swi->swi_h, RPMTAG_INSTALLTIME, NULL, (void **) &rpm_data, NULL) ) {
+ time_t installTime = *rpm_data;
+ ret = date_n_time(&installTime, var_len);
+ } else {
+ ret = date_n_time(0, var_len);
+ }
+#else
+ if (swi->swi_directory != NULL) {
+ snprintf(string, sizeof(string), "%s/%s",
+ swi->swi_directory, swi->swi_name);
+ string[ sizeof(string)-1 ] = 0;
+ stat(string, &stat_buf);
+ ret = date_n_time(&stat_buf.st_mtime, var_len);
+ } else {
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ sprintf(string, "back in the mists of time");
+ *var_len = strlen(string);
+ ret = (u_char *) string;
+ }
+#endif
+ }
+ break;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_hrswinst\n",
+ vp->magic));
+ ret = NULL;
+ break;
+ }
+ Release_HRSW_token();
+ return ret;
+}
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+#ifdef HAVE_LIBRPM
+static void
+Check_HRSW_cache(void *xxx)
+{
+ SWI_t *swi = (SWI_t *) xxx;
+
+ /*
+ * Make sure cache is up-to-date
+ */
+ if (swi->swi_recs != NULL) {
+ struct stat sb;
+ lstat(swi->swi_directory, &sb);
+ if (swi->swi_timestamp == sb.st_mtime)
+ return;
+ swi->swi_timestamp = sb.st_mtime;
+ swi->swi_maxrec = 0;
+ }
+
+ /*
+ * Get header offsets
+ */
+ {
+ int ix = 0;
+ int offset;
+
+#if defined(RPMDBI_PACKAGES)
+ rpmdbMatchIterator mi = NULL;
+ Header h;
+ mi = rpmdbInitIterator(swi->swi_rpmdb, RPMDBI_PACKAGES, NULL, 0);
+ while ((h = rpmdbNextIterator(mi)) != NULL) {
+ offset = rpmdbGetIteratorOffset(mi);
+#else
+ for (offset = rpmdbFirstRecNum(swi->swi_rpmdb);
+ offset != 0;
+ offset = rpmdbNextRecNum(swi->swi_rpmdb, offset)) {
+#endif
+
+ if (ix >= swi->swi_maxrec) {
+ swi->swi_maxrec += 256;
+ swi->swi_recs = (swi->swi_recs == NULL)
+ ? (int *) malloc(swi->swi_maxrec * sizeof(int))
+ : (int *) realloc(swi->swi_recs,
+ swi->swi_maxrec * sizeof(int));
+ }
+ swi->swi_recs[ix++] = offset;
+
+#if !defined(RPMDBI_PACKAGES)
+ }
+#else
+ }
+ rpmdbFreeIterator(mi);
+#endif
+
+ swi->swi_nrec = ix;
+ }
+}
+#endif /* HAVE_LIBRPM */
+
+void
+Init_HR_SWInst(void)
+{
+ SWI_t *swi = &_myswi; /* XXX static for now */
+ swi->swi_index = 0;
+
+#ifdef HAVE_LIBRPM
+ if (swi->swi_rpmdb != NULL)
+ return;
+ if (rpmdbOpen("", &swi->swi_rpmdb, O_RDONLY, 0644) != 0)
+ swi->swi_index = -1;
+ Check_HRSW_cache(swi);
+#else
+ if (swi->swi_directory != NULL) {
+ if (swi->swi_dp != NULL) {
+ closedir(swi->swi_dp);
+ swi->swi_dp = NULL;
+ }
+ if ((swi->swi_dp = opendir(swi->swi_directory)) == NULL)
+ swi->swi_index = -1;
+ } else
+ swi->swi_index = -1;
+#endif
+}
+
+int
+Get_Next_HR_SWInst(void)
+{
+ SWI_t *swi = &_myswi; /* XXX static for now */
+
+ if (swi->swi_index == -1)
+ return -1;
+
+#ifdef HAVE_LIBRPM
+ /*
+ * XXX Watchout: index starts with 1
+ */
+ if (0 <= swi->swi_index && swi->swi_index < swi->swi_nrec)
+ return ++swi->swi_index;
+#else
+ if (swi->swi_directory != NULL) {
+ while ((swi->swi_dep = readdir(swi->swi_dp)) != NULL) {
+ if (swi->swi_dep->d_name[0] == '.')
+ continue;
+
+ /*
+ * Ought to check for "properly-formed" entry
+ */
+
+ return ++swi->swi_index;
+ }
+ }
+#endif
+
+ return -1;
+}
+
+void
+Save_HR_SW_info(int ix)
+{
+ SWI_t *swi = &_myswi; /* XXX static for now */
+
+#ifdef HAVE_LIBRPM
+ /*
+ * XXX Watchout: ix starts with 1
+ */
+ if (1 <= ix && ix <= swi->swi_nrec && ix != swi->swi_prevx) {
+ int offset;
+ Header h;
+ char *n, *v, *r;
+
+ offset = swi->swi_recs[ix - 1];
+
+#if defined(RPMDBI_PACKAGES)
+ {
+ rpmdbMatchIterator mi;
+ mi = rpmdbInitIterator(swi->swi_rpmdb, RPMDBI_PACKAGES,
+ &offset, sizeof(offset));
+ if ((h = rpmdbNextIterator(mi)) != NULL)
+ h = headerLink(h);
+ rpmdbFreeIterator(mi);
+ }
+#else
+ h = rpmdbGetRecord(swi->swi_rpmdb, offset);
+#endif
+
+ if (h == NULL)
+ return;
+ if (swi->swi_h != NULL)
+ headerFree(swi->swi_h);
+ swi->swi_h = h;
+ swi->swi_prevx = ix;
+
+ headerGetEntry(swi->swi_h, RPMTAG_NAME, NULL, (void **) &n, NULL);
+ headerGetEntry(swi->swi_h, RPMTAG_VERSION, NULL, (void **) &v,
+ NULL);
+ headerGetEntry(swi->swi_h, RPMTAG_RELEASE, NULL, (void **) &r,
+ NULL);
+ snprintf(swi->swi_name, sizeof(swi->swi_name), "%s-%s-%s", n, v, r);
+ swi->swi_name[ sizeof(swi->swi_name)-1 ] = 0;
+ }
+#else
+ snprintf(swi->swi_name, sizeof(swi->swi_name), swi->swi_dep->d_name);
+ swi->swi_name[ sizeof(swi->swi_name)-1 ] = 0;
+#endif
+}
+
+#ifdef HAVE_LIBRPM
+void
+Mark_HRSW_token(void)
+{
+}
+
+void
+Release_HRSW_token(void)
+{
+ SWI_t *swi = &_myswi; /* XXX static for now */
+ if (swi != NULL && swi->swi_h) {
+ headerFree(swi->swi_h);
+ swi->swi_h = NULL;
+ swi->swi_prevx = -1;
+ }
+}
+#endif /* HAVE_LIBRPM */
+
+void
+End_HR_SWInst(void)
+{
+ SWI_t *swi = &_myswi; /* XXX static for now */
+
+#ifdef HAVE_LIBRPM
+ rpmdbClose(swi->swi_rpmdb); /* or only on finishing ? */
+ swi->swi_rpmdb = NULL;
+#else
+ if (swi->swi_dp != NULL)
+ closedir(swi->swi_dp);
+ swi->swi_dp = NULL;
+#endif
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swinst.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swinst.h
new file mode 100644
index 0000000000..0c95ce15c3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swinst.h
@@ -0,0 +1,12 @@
+/*
+ * Host Resources MIB - Running Software group interface - hr_swinst.h
+ *
+ */
+#ifndef _MIBGROUP_HRSWINST_H
+#define _MIBGROUP_HRSWINST_H
+
+extern void init_hr_swinst(void);
+extern FindVarMethod var_hrswinst;
+
+
+#endif /* _MIBGROUP_HRSWINST_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swrun.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swrun.c
new file mode 100644
index 0000000000..2d85be71c9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swrun.c
@@ -0,0 +1,1545 @@
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+/*
+ * Host Resources MIB - Running Software group implementation - hr_swrun.c
+ * (also includes Running Software Performance group )
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <fcntl.h>
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <sys/param.h>
+#include <ctype.h>
+#if HAVE_SYS_PSTAT_H
+#include <sys/pstat.h>
+#endif
+#if HAVE_SYS_USER_H
+#ifdef solaris2
+#include <libgen.h>
+#define _KMEMUSER
+#endif
+#include <sys/user.h>
+#endif
+#if HAVE_SYS_PROC_H
+#include <sys/proc.h>
+#endif
+#if HAVE_KVM_H
+#include <kvm.h>
+#endif
+#if HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif
+#if HAVE_DIRENT_H && !defined(cygwin)
+#include <dirent.h>
+#else
+# define dirent direct
+# if HAVE_SYS_NDIR_H
+# include <sys/ndir.h>
+# endif
+# if HAVE_SYS_DIR_H
+# include <sys/dir.h>
+# endif
+# if HAVE_NDIR_H
+# include <ndir.h>
+# endif
+#endif
+#ifdef cygwin
+#include <windows.h>
+#include <sys/cygwin.h>
+#include <tlhelp32.h>
+#include <psapi.h>
+#endif
+
+#if _SLASH_PROC_METHOD_
+#include <procfs.h>
+#endif
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <stdio.h>
+
+#include <net-snmp/output_api.h>
+#include "host_res.h"
+#include "hr_swrun.h"
+#include <net-snmp/agent/auto_nlist.h>
+#include "kernel.h"
+#ifdef solaris2
+#include "kernel_sunos5.h"
+#endif
+#if defined(aix4) || defined(aix5) || defined(aix6)
+#include <procinfo.h>
+#include <sys/types.h>
+#endif
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+void Init_HR_SWRun(void);
+int Get_Next_HR_SWRun(void);
+void End_HR_SWRun(void);
+int header_hrswrun(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod **);
+int header_hrswrunEntry(struct variable *, oid *, size_t *,
+ int, size_t *, WriteMethod **);
+
+#ifdef dynix
+pid_t nextproc;
+static prpsinfo_t lowpsinfo, mypsinfo;
+#endif
+#ifdef cygwin
+static struct external_pinfo *curproc;
+static struct external_pinfo lowproc;
+#elif !defined(linux)
+static int LowProcIndex;
+#endif
+#if defined(hpux10) || defined(hpux11)
+struct pst_status *proc_table;
+struct pst_dynamic pst_dyn;
+#elif HAVE_KVM_GETPROCS
+struct kinfo_proc *proc_table;
+#elif defined(solaris2)
+int *proc_table;
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+struct procsinfo *proc_table;
+#else
+struct proc *proc_table;
+#endif
+#ifndef dynix
+int current_proc_entry;
+#endif
+
+
+#define HRSWRUN_OSINDEX 1
+
+#define HRSWRUN_INDEX 2
+#define HRSWRUN_NAME 3
+#define HRSWRUN_ID 4
+#define HRSWRUN_PATH 5
+#define HRSWRUN_PARAMS 6
+#define HRSWRUN_TYPE 7
+#define HRSWRUN_STATUS 8
+
+#define HRSWRUNPERF_CPU 9
+#define HRSWRUNPERF_MEM 10
+
+struct variable4 hrswrun_variables[] = {
+ {HRSWRUN_OSINDEX, ASN_INTEGER, RONLY, var_hrswrun, 1, {1}},
+ {HRSWRUN_INDEX, ASN_INTEGER, RONLY, var_hrswrun, 3, {2, 1, 1}},
+ {HRSWRUN_NAME, ASN_OCTET_STR, RONLY, var_hrswrun, 3, {2, 1, 2}},
+ {HRSWRUN_ID, ASN_OBJECT_ID, RONLY, var_hrswrun, 3, {2, 1, 3}},
+ {HRSWRUN_PATH, ASN_OCTET_STR, RONLY, var_hrswrun, 3, {2, 1, 4}},
+ {HRSWRUN_PARAMS, ASN_OCTET_STR, RONLY, var_hrswrun, 3, {2, 1, 5}},
+ {HRSWRUN_TYPE, ASN_INTEGER, RONLY, var_hrswrun, 3, {2, 1, 6}},
+ {HRSWRUN_STATUS, ASN_INTEGER, RONLY, var_hrswrun, 3, {2, 1, 7}}
+};
+
+struct variable4 hrswrunperf_variables[] = {
+ {HRSWRUNPERF_CPU, ASN_INTEGER, RONLY, var_hrswrun, 3, {1, 1, 1}},
+ {HRSWRUNPERF_MEM, ASN_INTEGER, RONLY, var_hrswrun, 3, {1, 1, 2}}
+};
+
+oid hrswrun_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 4 };
+oid hrswrunperf_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 5 };
+
+#ifdef cygwin
+
+/*
+ * a lot of this is "stolen" from cygwin ps.cc
+ */
+
+typedef BOOL(WINAPI * ENUMPROCESSMODULES) (HANDLE hProcess,
+ HMODULE * lphModule,
+ DWORD cb,
+ LPDWORD lpcbNeeded);
+
+typedef DWORD(WINAPI * GETMODULEFILENAME) (HANDLE hProcess,
+ HMODULE hModule,
+ LPTSTR lpstrFIleName,
+ DWORD nSize);
+
+typedef DWORD(WINAPI * GETPROCESSMEMORYINFO) (HANDLE hProcess,
+ PPROCESS_MEMORY_COUNTERS
+ pmc, DWORD nSize);
+
+typedef HANDLE(WINAPI * CREATESNAPSHOT) (DWORD dwFlags,
+ DWORD th32ProcessID);
+
+typedef BOOL(WINAPI * PROCESSWALK) (HANDLE hSnapshot,
+ LPPROCESSENTRY32 lppe);
+
+ENUMPROCESSMODULES myEnumProcessModules;
+GETMODULEFILENAME myGetModuleFileNameEx;
+CREATESNAPSHOT myCreateToolhelp32Snapshot;
+PROCESSWALK myProcess32First;
+PROCESSWALK myProcess32Next;
+GETPROCESSMEMORYINFO myGetProcessMemoryInfo = NULL;
+cygwin_getinfo_types query = CW_GETPINFO;
+
+static BOOL WINAPI
+dummyprocessmodules(HANDLE hProcess,
+ HMODULE * lphModule, DWORD cb, LPDWORD lpcbNeeded)
+{
+ lphModule[0] = (HMODULE) * lpcbNeeded;
+ *lpcbNeeded = 1;
+ return 1;
+}
+
+static DWORD WINAPI
+GetModuleFileNameEx95(HANDLE hProcess,
+ HMODULE hModule, LPTSTR lpstrFileName, DWORD n)
+{
+ HANDLE h;
+ DWORD pid = (DWORD) hModule;
+ PROCESSENTRY32 proc;
+
+ h = myCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
+ if (!h)
+ return 0;
+ proc.dwSize = sizeof(proc);
+ if (myProcess32First(h, &proc))
+ do
+ if (proc.th32ProcessID == pid) {
+ CloseHandle(h);
+ strcpy(lpstrFileName, proc.szExeFile);
+ return 1;
+ }
+ while (myProcess32Next(h, &proc));
+ CloseHandle(h);
+ return 0;
+}
+
+#define FACTOR (0x19db1ded53ea710LL)
+#define NSPERSEC 10000000LL
+#define NSPERMSEC 10000LL
+
+static time_t __stdcall
+to_time_t(PFILETIME ptr)
+{
+ long rem;
+ long long x =
+ ((long long) ptr->dwHighDateTime << 32) +
+ ((unsigned) ptr->dwLowDateTime);
+ x -= FACTOR;
+ rem = x % NSPERSEC;
+ rem += NSPERSEC / 2;
+ x /= NSPERSEC;
+ x += rem / NSPERSEC;
+ return x;
+}
+
+static long
+to_msec(PFILETIME ptr)
+{
+ long long x =
+ ((long long) ptr->dwHighDateTime << 32) +
+ (unsigned) ptr->dwLowDateTime;
+ x /= NSPERMSEC;
+ return x;
+}
+
+#endif /* cygwin */
+
+
+void
+init_hr_swrun(void)
+{
+#ifdef cygwin
+ OSVERSIONINFO ver;
+ HMODULE h;
+
+ memset(&ver, 0, sizeof ver);
+ ver.dwOSVersionInfoSize = sizeof ver;
+ GetVersionEx(&ver);
+
+ if (ver.dwPlatformId == VER_PLATFORM_WIN32_NT) {
+ h = LoadLibrary("psapi.dll");
+ if (h) {
+ myEnumProcessModules =
+ (ENUMPROCESSMODULES) GetProcAddress(h,
+ "EnumProcessModules");
+ myGetModuleFileNameEx =
+ (GETMODULEFILENAME) GetProcAddress(h,
+ "GetModuleFileNameExA");
+ myGetProcessMemoryInfo =
+ (GETPROCESSMEMORYINFO) GetProcAddress(h,
+ "GetProcessMemoryInfo");
+ if (myEnumProcessModules && myGetModuleFileNameEx)
+ query = CW_GETPINFO_FULL;
+ else
+ snmp_log(LOG_ERR, "hr_swrun failed NT init\n");
+ } else
+ snmp_log(LOG_ERR, "hr_swrun failed to load psapi.dll\n");
+ } else {
+ h = GetModuleHandle("KERNEL32.DLL");
+ myCreateToolhelp32Snapshot =
+ (CREATESNAPSHOT) GetProcAddress(h, "CreateToolhelp32Snapshot");
+ myProcess32First =
+ (PROCESSWALK) GetProcAddress(h, "Process32First");
+ myProcess32Next = (PROCESSWALK) GetProcAddress(h, "Process32Next");
+ myEnumProcessModules = dummyprocessmodules;
+ myGetModuleFileNameEx = GetModuleFileNameEx95;
+ if (myCreateToolhelp32Snapshot && myProcess32First
+ && myProcess32Next)
+#if 0
+ /*
+ * This doesn't work after all on Win98 SE
+ */
+ query = CW_GETPINFO_FULL;
+#else
+ query = CW_GETPINFO;
+#endif
+ else
+ snmp_log(LOG_ERR, "hr_swrun failed non-NT init\n");
+ }
+#endif /* cygwin */
+#ifdef PROC_SYMBOL
+ auto_nlist(PROC_SYMBOL, 0, 0);
+#endif
+#ifdef NPROC_SYMBOL
+ auto_nlist(NPROC_SYMBOL, 0, 0);
+#endif
+
+ proc_table = 0;
+
+ REGISTER_MIB("host/hr_swrun", hrswrun_variables, variable4,
+ hrswrun_variables_oid);
+ REGISTER_MIB("host/hr_swrun", hrswrunperf_variables, variable4,
+ hrswrunperf_variables_oid);
+}
+
+/*
+ * header_hrswrun(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ *
+ */
+
+int
+header_hrswrun(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#define HRSWRUN_NAME_LENGTH 9
+ oid newname[MAX_OID_LEN];
+ int result;
+
+ DEBUGMSGTL(("host/hr_swrun", "var_hrswrun: "));
+ DEBUGMSGOID(("host/hr_swrun", name, *length));
+ DEBUGMSG(("host/hr_swrun", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name, vp->namelen * sizeof(oid));
+ newname[HRSWRUN_NAME_LENGTH] = 0;
+ result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);
+ if ((exact && (result != 0)) || (!exact && (result >= 0)))
+ return (MATCH_FAILED);
+ memcpy((char *) name, (char *) newname,
+ (vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+ return (MATCH_SUCCEEDED);
+}
+
+int
+header_hrswrunEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+#define HRSWRUN_ENTRY_NAME_LENGTH 11
+ oid newname[MAX_OID_LEN];
+ int pid, LowPid = -1;
+ int result;
+
+ DEBUGMSGTL(("host/hr_swrun", "var_hrswrunEntry: "));
+ DEBUGMSGOID(("host/hr_swrun", name, *length));
+ DEBUGMSG(("host/hr_swrun", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name, vp->namelen * sizeof(oid));
+
+ /*
+ * Find the "next" running process
+ */
+ Init_HR_SWRun();
+ for (;;) {
+ pid = Get_Next_HR_SWRun();
+#ifndef linux
+#ifndef dynix
+ DEBUGMSG(("host/hr_swrun",
+ "(index %d (entry #%d) ....", pid, current_proc_entry));
+#else
+ DEBUGMSG(("host/hr_swrun", "pid %d; nextproc %d ....", pid,
+ nextproc));
+#endif
+#endif
+ if (pid == -1)
+ break;
+ newname[HRSWRUN_ENTRY_NAME_LENGTH] = pid;
+ DEBUGMSGOID(("host/hr_swrun", newname, *length));
+ DEBUGMSG(("host/hr_swrun", "\n"));
+ result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);
+ if (exact && (result == 0)) {
+ LowPid = pid;
+#ifdef cygwin
+ lowproc = *curproc;
+#elif dynix
+ memcpy(&lowpsinfo, &mypsinfo, sizeof(prpsinfo_t));
+#elif !defined(linux)
+ LowProcIndex = current_proc_entry - 1;
+#endif
+ DEBUGMSGTL(("host/hr_swrun", " saved\n"));
+ /*
+ * Save process status information
+ */
+ break;
+ }
+ if ((!exact && (result < 0)) && (LowPid == -1 || pid < LowPid)) {
+ LowPid = pid;
+#ifdef cygwin
+ lowproc = *curproc;
+#elif !defined(linux)
+ LowProcIndex = current_proc_entry - 1;
+#endif
+ /*
+ * Save process status information
+ */
+ DEBUGMSG(("host/hr_swrun", " saved"));
+ }
+ DEBUGMSG(("host/hr_swrun", "\n"));
+ }
+ End_HR_SWRun();
+
+ if (LowPid == -1) {
+ DEBUGMSGTL(("host/hr_swrun", "... index out of range\n"));
+ return (MATCH_FAILED);
+ }
+
+ newname[HRSWRUN_ENTRY_NAME_LENGTH] = LowPid;
+ memcpy((char *) name, (char *) newname,
+ (vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ DEBUGMSGTL(("host/hr_swrun", "... get process stats "));
+ DEBUGMSGOID(("host/hr_swrun", name, *length));
+ DEBUGMSG(("host/hr_swrun", "\n"));
+ return LowPid;
+}
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+
+u_char *
+var_hrswrun(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int pid = 0;
+ static char string[1024];
+#ifdef HAVE_SYS_PSTAT_H
+ struct pst_status proc_buf;
+#elif defined(solaris2)
+#if _SLASH_PROC_METHOD_
+ static psinfo_t psinfo;
+ static psinfo_t *proc_buf;
+ int procfd;
+ int ret;
+ char procfn[sizeof "/proc/00000/psinfo"];
+#else
+ static struct proc *proc_buf;
+ char *cp1;
+#endif /* _SLASH_PROC_METHOD_ */
+ static time_t when = 0;
+ time_t now;
+ static int oldpid = -1;
+#endif
+#if HAVE_KVM_GETPROCS
+ char **argv;
+#endif
+#ifdef linux
+ FILE *fp;
+ char buf[1024];
+ int i;
+#endif
+ char *cp;
+
+ if (vp->magic == HRSWRUN_OSINDEX) {
+ if (header_hrswrun(vp, name, length, exact, var_len, write_method)
+ == MATCH_FAILED)
+ return NULL;
+ } else {
+
+ pid =
+ header_hrswrunEntry(vp, name, length, exact, var_len,
+ write_method);
+ if (pid == MATCH_FAILED)
+ return NULL;
+ }
+
+#ifdef HAVE_SYS_PSTAT_H
+ if (pstat_getproc(&proc_buf, sizeof(struct pst_status), 0, pid) == -1)
+ return NULL;
+#elif defined(solaris2)
+ time(&now);
+ if (pid == oldpid) {
+ if (now != when)
+ oldpid = -1;
+ }
+ if (oldpid != pid || proc_buf == NULL) {
+#if _SLASH_PROC_METHOD_
+ proc_buf = &psinfo;
+ sprintf(procfn, "/proc/%.5d/psinfo", pid);
+ if ((procfd = open(procfn, O_RDONLY)) != -1) {
+ ret = read(procfd, proc_buf, sizeof(*proc_buf));
+ close(procfd);
+ if (ret != sizeof(*proc_buf))
+ proc_buf = NULL;
+ } else
+ proc_buf = NULL;
+#else
+ if (kd == NULL)
+ return NULL;
+ if ((proc_buf = kvm_getproc(kd, pid)) == NULL)
+ return NULL;
+#endif
+ oldpid = pid;
+ when = now;
+ }
+#endif
+
+ switch (vp->magic) {
+ case HRSWRUN_OSINDEX:
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#else
+ /*
+ * per dts, on coders:
+ * cos (in general) we won't know which process should
+ * be regarded as "the primary O/S process".
+ * The most obvious candidate on a Unix box is probably 'init'
+ * which is typically (always?) process #1.
+ */
+ long_return = 1; /* Probably! */
+ return (u_char *) & long_return;
+#endif
+
+ case HRSWRUN_INDEX:
+ long_return = pid;
+ return (u_char *) & long_return;
+ case HRSWRUN_NAME:
+#ifdef HAVE_SYS_PSTAT_H
+ snprintf(string, sizeof(string), "%s", proc_buf.pst_cmd);
+ string[ sizeof(string)-1 ] = 0;
+ cp = strchr(string, ' ');
+ if (cp != NULL)
+ *cp = '\0';
+#elif defined(dynix)
+ snprintf(string, sizeof(string), "%s", lowpsinfo.pr_fname);
+ string[ sizeof(string)-1 ] = 0;
+ cp = strchr(string, ' ');
+ if (cp != NULL)
+ *cp = '\0';
+#elif defined(solaris2)
+#if _SLASH_PROC_METHOD_
+ if (proc_buf) {
+ char *pos=strchr(proc_buf->pr_psargs,' ');
+ if (pos != NULL) *pos = '\0';
+ strlcpy(string, basename(proc_buf->pr_psargs),sizeof(string));
+ if (pos != NULL) *pos=' ';
+ } else {
+ strcpy(string, "<exited>");
+ }
+ string[ sizeof(string)-1 ] = 0;
+#else
+ strncpy(string, proc_buf->p_user.u_comm, sizeof(string));
+ string[ sizeof(string)-1 ] = 0;
+#endif
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ strncpy(string, proc_table[LowProcIndex].pi_comm, sizeof(string));
+ string[ sizeof(string)-1 ] = 0;
+ cp = strchr(string, ' ');
+ if (cp != NULL)
+ *cp = '\0';
+#elif HAVE_KVM_GETPROCS
+ #if defined(freebsd5) && __FreeBSD_version >= 500014
+ strcpy(string, proc_table[LowProcIndex].ki_comm);
+ #else
+ strcpy(string, proc_table[LowProcIndex].kp_proc.p_comm);
+ #endif
+#elif defined(linux)
+ sprintf(string, "/proc/%d/status", pid);
+ if ((fp = fopen(string, "r")) == NULL) {
+ strcpy(string, "<exited>");
+ *var_len = strlen(string);
+ return (u_char *) string;
+ }
+ fgets(buf, sizeof(buf), fp); /* Name: process name */
+ cp = buf;
+ while (*cp != ':')
+ ++cp;
+ ++cp;
+ while (isspace(*cp))
+ ++cp;
+ strcpy(string, cp);
+ fclose(fp);
+#elif defined(cygwin)
+ /* if (lowproc.process_state & (PID_ZOMBIE | PID_EXITED)) */
+ if (lowproc.process_state & PID_EXITED || (lowproc.exitcode & ~0xffff))
+ strcpy(string, "<defunct>");
+ else if (lowproc.ppid) {
+ cygwin_conv_to_posix_path(lowproc.progname, string);
+ cp = strrchr(string, '/');
+ if (cp)
+ strcpy(string, cp + 1);
+ } else if (query == CW_GETPINFO_FULL) {
+ DWORD n = lowproc.dwProcessId & 0xffff;
+ HANDLE h =
+ OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
+ FALSE, n);
+
+ if (h) {
+ HMODULE hm[1000];
+ if (!myEnumProcessModules(h, hm, sizeof hm, &n)) {
+ snmp_log(LOG_DEBUG, "no module handle for %lu\n", n);
+ n = 0;
+ }
+ if (n
+ && myGetModuleFileNameEx(h, hm[0], string,
+ sizeof string)) {
+ cp = strrchr(string, '\\');
+ if (cp)
+ strcpy(string, cp + 1);
+ } else
+ strcpy(string, "*** unknown");
+ CloseHandle(h);
+ } else {
+ snmp_log(LOG_INFO, "no process handle for %lu\n", n);
+ strcpy(string, "** unknown");
+ }
+ } else
+ strcpy(string, "* unknown");
+ cp = strchr(string, '\0') - 4;
+ if (cp > string && strcasecmp(cp, ".exe") == 0)
+ *cp = '\0';
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ sprintf(string, "process name");
+#endif
+ *var_len = strlen(string);
+ /*
+ * remove trailing newline
+ */
+ if (*var_len) {
+ cp = string + *var_len - 1;
+ if (*cp == '\n')
+ --(*var_len);
+ }
+ if (*var_len > 64) { /* MIB limit */
+ *var_len = 64;
+ string[64] = '\0';
+ }
+ return (u_char *) string;
+ case HRSWRUN_ID:
+ *var_len = nullOidLen;
+ return (u_char *) nullOid;
+ case HRSWRUN_PATH:
+#ifdef HAVE_SYS_PSTAT_H
+ /*
+ * Path not available - use argv[0]
+ */
+ sprintf(string, "%s", proc_buf.pst_cmd);
+ cp = strchr(string, ' ');
+ if (cp != NULL)
+ *cp = '\0';
+#elif defined(dynix)
+ /*
+ * Path not available - use argv[0]
+ */
+ sprintf(string, "%s", lowpsinfo.pr_psargs);
+ cp = strchr(string, ' ');
+ if (cp != NULL)
+ *cp = '\0';
+#elif defined(solaris2)
+#ifdef _SLASH_PROC_METHOD_
+ if (proc_buf)
+ strcpy(string, proc_buf->pr_psargs);
+ else
+ sprintf(string, "<exited>");
+ cp = strchr(string, ' ');
+ if (cp)
+ *cp = 0;
+#else
+ cp = proc_buf->p_user.u_psargs;
+ cp1 = string;
+ while (*cp && *cp != ' ')
+ *cp1++ = *cp++;
+ *cp1 = 0;
+#endif
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ strncpy(string, proc_table[LowProcIndex].pi_comm, sizeof(string));
+ string[ sizeof(string)-1 ] = 0;
+ cp = strchr(string, ' ');
+ if (cp != NULL)
+ *cp = '\0';
+#elif HAVE_KVM_GETPROCS
+ #if defined(freebsd5) && __FreeBSD_version >= 500014
+ strcpy(string, proc_table[LowProcIndex].ki_comm);
+ #else
+ strcpy(string, proc_table[LowProcIndex].kp_proc.p_comm);
+ #endif
+#elif defined(linux)
+ sprintf(string, "/proc/%d/cmdline", pid);
+ if ((fp = fopen(string, "r")) == NULL) {
+ strcpy(string, "<exited>");
+ *var_len = strlen(string);
+ return (u_char *) string;
+ }
+ if (fgets(buf, sizeof(buf) - 1, fp)) /* argv[0] '\0' argv[1] '\0' .... */
+ strcpy(string, buf);
+ else {
+ /*
+ * swapped out - no cmdline
+ */
+ fclose(fp);
+ sprintf(string, "/proc/%d/status", pid);
+ if ((fp = fopen(string, "r")) == NULL)
+ return NULL;
+ fgets(buf, sizeof(buf), fp); /* Name: process name */
+ if ( cp == NULL ) {
+ fclose(fp);
+ return NULL; /* the process probably died */
+ }
+ cp = strchr(buf, ':');
+ if ( cp == NULL ) {
+ fclose(fp);
+ return NULL; /* the process file is malformed */
+ }
+ ++cp;
+ while (isspace(*cp))
+ ++cp;
+ strcpy(string, cp);
+ cp = strchr(string, '\n');
+ if (cp)
+ *cp = 0;
+ }
+ fclose(fp);
+#elif defined(cygwin)
+ /* if (lowproc.process_state & (PID_ZOMBIE | PID_EXITED)) */
+ if (lowproc.process_state & PID_EXITED || (lowproc.exitcode & ~0xffff))
+ strcpy(string, "<defunct>");
+ else if (lowproc.ppid)
+ cygwin_conv_to_posix_path(lowproc.progname, string);
+ else if (query == CW_GETPINFO_FULL) {
+ DWORD n = lowproc.dwProcessId & 0xFFFF;
+ HANDLE h =
+ OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
+ FALSE, n);
+ if (h) {
+ HMODULE hm[1000];
+ if (!myEnumProcessModules(h, hm, sizeof hm, &n))
+ n = 0;
+ if (!n
+ || !myGetModuleFileNameEx(h, hm[0], string,
+ sizeof string))
+ strcpy(string, "*** unknown");
+ CloseHandle(h);
+ } else
+ strcpy(string, "** unknown");
+ } else
+ strcpy(string, "* unknown");
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ sprintf(string, "/bin/wombat");
+#endif
+ *var_len = strlen(string);
+ if (*var_len > 128) { /* MIB limit */
+ *var_len = 128;
+ string[128] = '\0';
+ }
+ return (u_char *) string;
+ case HRSWRUN_PARAMS:
+#ifdef HAVE_SYS_PSTAT_H
+ cp = strchr(proc_buf.pst_cmd, ' ');
+ if (cp != NULL) {
+ cp++;
+ sprintf(string, "%s", cp);
+ } else
+ string[0] = '\0';
+#elif defined(dynix)
+ cp = strchr(lowpsinfo.pr_psargs, ' ');
+ if (cp != NULL) {
+ cp++;
+ sprintf(string, "%s", cp);
+ } else
+ string[0] = '\0';
+#elif defined(solaris2)
+#ifdef _SLASH_PROC_METHOD_
+ if (proc_buf) {
+ cp = strchr(proc_buf->pr_psargs, ' ');
+ if (cp)
+ strcpy(string, cp + 1);
+ else
+ string[0] = 0;
+ } else
+ string[0] = 0;
+#else
+ cp = proc_buf->p_user.u_psargs;
+ while (*cp && *cp != ' ')
+ cp++;
+ if (*cp == ' ')
+ cp++;
+ strcpy(string, cp);
+#endif
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ cp = strchr(proc_table[LowProcIndex].pi_comm, ' ');
+ if (cp != NULL) {
+ cp++;
+ sprintf(string, "%s", cp);
+ } else
+ string[0] = '\0';
+#elif HAVE_KVM_GETPROCS
+ string[0] = 0;
+ argv = kvm_getargv(kd, proc_table + LowProcIndex, sizeof(string));
+ if (argv)
+ argv++;
+ while (argv && *argv) {
+ if (string[0] != 0)
+ strcat(string, " ");
+ strcat(string, *argv);
+ argv++;
+ }
+#elif defined(linux)
+ sprintf(string, "/proc/%d/cmdline", pid);
+ if ((fp = fopen(string, "r")) == NULL) {
+ strcpy(string, "");
+ *var_len = 0;
+ return (u_char *) string;
+ }
+ memset(buf, 0, sizeof(buf));
+
+ /*
+ * argv[0] '\0' argv[1] '\0' ....
+ */
+ if (!fgets(buf, sizeof(buf) - 2, fp)) {
+ /*
+ * maybe be empty (even argv[0] is missing)
+ */
+ string[0] = '\0';
+ *var_len = 0;
+ fclose(fp);
+ return string;
+ }
+
+ /*
+ * Skip over argv[0]
+ */
+ cp = buf;
+ while (*cp)
+ ++cp;
+ ++cp;
+ /*
+ * Now join together separate arguments.
+ */
+ while (1) {
+ while (*cp)
+ ++cp;
+ if (*(cp + 1) == '\0')
+ break; /* '\0''\0' => End of command line */
+ *cp = ' ';
+ }
+
+ cp = buf;
+ while (*cp)
+ ++cp;
+ ++cp;
+ strcpy(string, cp);
+ fclose(fp);
+#elif defined(cygwin)
+ string[0] = 0;
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ sprintf(string, "-h -q -v");
+#endif
+ *var_len = strlen(string);
+ if (*var_len > 128) { /* MIB limit */
+ *var_len = 128;
+ string[128] = '\0';
+ }
+ return (u_char *) string;
+ case HRSWRUN_TYPE:
+#ifdef PID_MAXSYS
+ if (pid < PID_MAXSYS)
+ long_return = 2; /* operatingSystem */
+ else
+ long_return = 4; /* application */
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ if (proc_table[LowProcIndex].pi_flags & SKPROC) {
+ long_return = 2; /* kernel process */
+ } else
+ long_return = 4; /* application */
+#elif HAVE_KVM_GETPROCS
+ #if defined(freebsd5) && __FreeBSD_version >= 500014
+ if (proc_table[LowProcIndex].ki_flag & P_SYSTEM) {
+ if (proc_table[LowProcIndex].ki_pri.pri_class == PRI_ITHD)
+ long_return = 3;/* deviceDriver */
+ else
+ long_return = 2;/* operatingSystem */
+ } else
+ long_return = 4; /* application */
+ #else
+ if (proc_table[LowProcIndex].kp_proc.p_flag & P_SYSTEM)
+ long_return = 2; /* operatingSystem */
+ else
+ long_return = 4; /* application */
+ #endif
+#else
+ long_return = 4; /* application */
+#endif
+ return (u_char *) & long_return;
+ case HRSWRUN_STATUS:
+#if defined(cygwin)
+ if (lowproc.process_state & PID_STOPPED)
+ long_return = 3; /* notRunnable */
+ /* else if (lowproc.process_state & PID_ZOMBIE) */
+ else if (lowproc.exitcode & ~0xffff)
+ long_return = 4; /* invalid */
+ else
+ long_return = 1; /* running */
+#elif !defined(linux)
+#if defined(hpux10) || defined(hpux11)
+ switch (proc_table[LowProcIndex].pst_stat) {
+ case PS_STOP:
+ long_return = 3; /* notRunnable */
+ break;
+ case PS_SLEEP:
+ long_return = 2; /* runnable */
+ break;
+ case PS_RUN:
+ long_return = 1; /* running */
+ break;
+ case PS_ZOMBIE:
+ case PS_IDLE:
+ case PS_OTHER:
+ default:
+ long_return = 4; /* invalid */
+ break;
+ }
+#else
+#if HAVE_KVM_GETPROCS
+ #if defined(freebsd5) && __FreeBSD_version >= 500014
+ switch (proc_table[LowProcIndex].ki_stat) {
+ #else
+ switch (proc_table[LowProcIndex].kp_proc.p_stat) {
+ #endif
+#elif defined(dynix)
+ switch (lowpsinfo.pr_state) {
+#elif defined(solaris2)
+#if _SLASH_PROC_METHOD_
+ switch (proc_buf ? proc_buf->pr_lwp.pr_state : SIDL) {
+#else
+ switch (proc_buf->p_stat) {
+#endif
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ switch (proc_table[LowProcIndex].pi_state) {
+#else
+ switch (proc_table[LowProcIndex].p_stat) {
+#endif
+ case SSTOP:
+ long_return = 3; /* notRunnable */
+ break;
+ case 0:
+#ifdef SSWAP
+ case SSWAP:
+#endif
+#ifdef SSLEEP
+ case SSLEEP:
+#endif
+#ifdef SWAIT
+ case SWAIT:
+#endif
+ long_return = 2; /* runnable */
+ break;
+#ifdef SACTIVE
+ case SACTIVE:
+#endif
+#ifdef SRUN
+ case SRUN:
+#endif
+#ifdef SONPROC
+ case SONPROC:
+#endif
+ long_return = 1; /* running */
+ break;
+ case SIDL:
+ case SZOMB:
+ default:
+ long_return = 4; /* invalid */
+ break;
+ }
+#endif
+#else
+ sprintf(string, "/proc/%d/stat", pid);
+ if ((fp = fopen(string, "r")) != NULL) {
+ fgets(buf, sizeof(buf), fp);
+ cp = buf;
+ for (i = 0; i < 2; ++i) { /* skip two fields */
+ while (*cp != ' ')
+ ++cp;
+ ++cp;
+ }
+
+ switch (*cp) {
+ case 'R':
+ long_return = 1; /* running */
+ break;
+ case 'S':
+ long_return = 2; /* runnable */
+ break;
+ case 'D':
+ case 'T':
+ long_return = 3; /* notRunnable */
+ break;
+ case 'Z':
+ default:
+ long_return = 4; /* invalid */
+ break;
+ }
+ fclose(fp);
+ } else
+ long_return = 4; /* invalid */
+#endif
+ return (u_char *) & long_return;
+
+ case HRSWRUNPERF_CPU:
+#ifdef HAVE_SYS_PSTAT_H
+ long_return = proc_buf.pst_cptickstotal;
+ /*
+ * Not convinced this is right, but....
+ */
+#elif defined(dynix)
+ long_return = lowpsinfo.pr_time.tv_sec * 100 +
+ lowpsinfo.pr_time.tv_nsec / 10000000;
+#elif defined(solaris2)
+#if _SLASH_PROC_METHOD_
+ long_return = proc_buf ? proc_buf->pr_time.tv_sec * 100 +
+ proc_buf->pr_time.tv_nsec / 10000000 : 0;
+#else
+ long_return = proc_buf->p_utime * 100 + proc_buf->p_stime * 100;
+#endif
+#elif HAVE_KVM_GETPROCS
+ #if defined(NOT_DEFINED) && defined(freebsd5) && __FreeBSD_version >= 500014
+ /* XXX: Accessing ki_paddr causes sig10 ...
+ long_return = proc_table[LowProcIndex].ki_paddr->p_uticks +
+ proc_table[LowProcIndex].ki_paddr->p_sticks +
+ proc_table[LowProcIndex].ki_paddr->p_iticks; */
+ long_return = 0;
+ #elif defined(freebsd5)
+ long_return = proc_table[LowProcIndex].ki_runtime / 100000;
+ #else
+ long_return = proc_table[LowProcIndex].kp_proc.p_uticks +
+ proc_table[LowProcIndex].kp_proc.p_sticks +
+ proc_table[LowProcIndex].kp_proc.p_iticks;
+ #endif
+#elif defined(linux)
+ sprintf(string, "/proc/%d/stat", pid);
+ if ((fp = fopen(string, "r")) == NULL) {
+ long_return = 0;
+ return (u_char *) & long_return;
+ }
+ fgets(buf, sizeof(buf), fp);
+ cp = buf;
+ for (i = 0; i < 13; ++i) { /* skip 13 fields */
+ while (*cp != ' ')
+ ++cp;
+ ++cp;
+ }
+
+ long_return = atoi(cp); /* utime */
+
+ while (*cp != ' ')
+ ++cp;
+ ++cp;
+ long_return += atoi(cp); /* + stime */
+ fclose(fp);
+#elif defined(sunos4)
+ long_return = proc_table[LowProcIndex].p_time;
+#elif defined(cygwin)
+ {
+ DWORD n = lowproc.dwProcessId;
+ HANDLE h =
+ OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
+ FALSE, n);
+ FILETIME ct, et, kt, ut;
+
+ if (h) {
+ if (GetProcessTimes(h, &ct, &et, &kt, &ut))
+ long_return = (to_msec(&kt) + to_msec(&ut)) / 10;
+ else {
+ snmp_log(LOG_INFO, "no process times for %lu (%lu)\n",
+ lowproc.pid, n);
+ long_return = 0;
+ }
+ CloseHandle(h);
+ } else {
+ snmp_log(LOG_INFO, "no process handle for %lu (%lu)\n",
+ lowproc.pid, n);
+ long_return = 0;
+ }
+ }
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = proc_table[LowProcIndex].pi_ru.ru_utime.tv_sec * 100 +
+ proc_table[LowProcIndex].pi_ru.ru_utime.tv_usec / 10000000 + /* nanoseconds */
+ proc_table[LowProcIndex].pi_ru.ru_stime.tv_sec * 100 +
+ proc_table[LowProcIndex].pi_ru.ru_stime.tv_usec / 10000000; /* nanoseconds */
+#else
+ long_return = proc_table[LowProcIndex].p_utime.tv_sec * 100 +
+ proc_table[LowProcIndex].p_utime.tv_usec / 10000 +
+ proc_table[LowProcIndex].p_stime.tv_sec * 100 +
+ proc_table[LowProcIndex].p_stime.tv_usec / 10000;
+#endif
+ return (u_char *) & long_return;
+ case HRSWRUNPERF_MEM:
+#ifdef HAVE_SYS_PSTAT_H
+# ifdef PGSHIFT
+ long_return = (proc_buf.pst_rssize << PGSHIFT) / 1024;
+# else
+ long_return = proc_buf.pst_rssize * getpagesize() / 1024;
+# endif
+#elif defined(dynix)
+ long_return = (lowpsinfo.pr_rssize * MMU_PAGESIZE) / 1024;
+#elif defined(solaris2)
+#if _SLASH_PROC_METHOD_
+ long_return = proc_buf ? proc_buf->pr_rssize : 0;
+#else
+ long_return = proc_buf->p_swrss;
+#endif
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = proc_table[LowProcIndex].pi_size * getpagesize() / 1024;
+#elif HAVE_KVM_GETPROCS && !defined(darwin8)
+ #if defined(NOT_DEFINED) && defined(freebsd5) && __FreeBSD_version >= 500014
+ /* XXX
+ long_return = proc_table[LowProcIndex].ki_vmspace->vm_tsize +
+ proc_table[LowProcIndex].ki_vmspace->vm_ssize +
+ proc_table[LowProcIndex].ki_vmspace->vm_dsize;
+ long_return = long_return * (getpagesize() / 1024); */
+ long_return = 0;
+ #elif defined(freebsd3) && !defined(darwin)
+ long_return =
+ #if defined(freebsd5)
+ proc_table[LowProcIndex].ki_size / 1024;
+ #else
+ proc_table[LowProcIndex].kp_eproc.e_vm.vm_map.size / 1024;
+ #endif
+ #else
+ long_return = proc_table[LowProcIndex].kp_eproc.e_vm.vm_tsize +
+ proc_table[LowProcIndex].kp_eproc.e_vm.vm_ssize +
+ proc_table[LowProcIndex].kp_eproc.e_vm.vm_dsize;
+ long_return = long_return * (getpagesize() / 1024);
+ #endif
+#elif defined(linux)
+ sprintf(string, "/proc/%d/stat", pid);
+ if ((fp = fopen(string, "r")) == NULL) {
+ long_return = 0;
+ return (u_char *) & long_return;
+ }
+ fgets(buf, sizeof(buf), fp);
+ cp = buf;
+ for (i = 0; i < 23; ++i) { /* skip 23 fields */
+ while (*cp != ' ')
+ ++cp;
+ ++cp;
+ }
+ long_return = atoi(cp) * (getpagesize() / 1024); /* rss */
+ fclose(fp);
+#elif defined(cygwin)
+ {
+ DWORD n = lowproc.dwProcessId;
+ HANDLE h =
+ OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
+ FALSE, n);
+ PROCESS_MEMORY_COUNTERS pmc;
+
+ if (h) {
+ if (myGetProcessMemoryInfo
+ && myGetProcessMemoryInfo(h, &pmc, sizeof pmc))
+ long_return = pmc.WorkingSetSize / 1024;
+ else {
+ snmp_log(LOG_INFO, "no process times for %lu (%lu)\n",
+ lowproc.pid, n);
+ long_return = 0;
+ }
+ CloseHandle(h);
+ } else {
+ snmp_log(LOG_INFO, "no process handle for %lu (%lu)\n",
+ lowproc.pid, n);
+ long_return = 0;
+ }
+ }
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = 16 * 1024; /* XXX - 16M! */
+#endif
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_hrswrun\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+#if defined(linux)
+
+DIR *procdir = NULL;
+struct dirent *procentry_p;
+
+void
+Init_HR_SWRun(void)
+{
+ if (procdir != NULL)
+ closedir(procdir);
+ procdir = opendir("/proc");
+}
+
+int
+Get_Next_HR_SWRun(void)
+{
+ int pid;
+ if (procdir == NULL)
+ return -1;
+ procentry_p = readdir(procdir);
+
+ if (procentry_p == NULL)
+ return -1;
+
+ pid = atoi(procentry_p->d_name);
+ if (pid == 0)
+ return (Get_Next_HR_SWRun());
+ return pid;
+}
+
+void
+End_HR_SWRun(void)
+{
+ if (procdir)
+ closedir(procdir);
+ procdir = NULL;
+}
+
+#elif defined(cygwin)
+
+static pid_t curpid;
+
+void
+Init_HR_SWRun(void)
+{
+ cygwin_internal(CW_LOCK_PINFO, 1000);
+ curpid = 0;
+}
+
+int
+Get_Next_HR_SWRun(void)
+{
+ curproc =
+ (struct external_pinfo *) cygwin_internal(query,
+ curpid | CW_NEXTPID);
+ if (curproc)
+ curpid = curproc->pid;
+ else {
+ curpid = -1;
+ }
+ return curpid;
+}
+
+void
+End_HR_SWRun(void)
+{
+ cygwin_internal(CW_UNLOCK_PINFO);
+}
+
+#elif defined(dynix)
+
+void
+Init_HR_SWRun(void)
+{
+ nextproc = 0;
+}
+
+int
+Get_Next_HR_SWRun(void)
+{
+ getprpsinfo_t *select = 0;
+
+ DEBUGMSGTL(("host/hr_swrun::GetNextHR_SWRun",
+ "nextproc == %d... &nextproc = %u\n", nextproc,
+ &nextproc));
+ if ((nextproc = getprpsinfo(nextproc, select, &mypsinfo)) < 0) {
+ return -1;
+ } else {
+ DEBUGMSGTL(("host/hr_swrun::GetNextHR_SWRun",
+ "getprpsinfo returned %d\n", nextproc));
+ return mypsinfo.pr_pid;
+ }
+
+}
+
+void
+End_HR_SWRun(void)
+{
+ /*
+ * just a stub... because it's declared
+ */
+}
+
+#else /* linux */
+
+static int nproc;
+
+void
+Init_HR_SWRun(void)
+{
+ size_t bytes;
+ static time_t iwhen = 0;
+ time_t now;
+
+ time(&now);
+ if (now == iwhen) {
+ current_proc_entry = 0;
+ return;
+ }
+ iwhen = now;
+
+#if defined(hpux10) || defined(hpux11)
+ pstat_getdynamic(&pst_dyn, sizeof(struct pst_dynamic), 1, 0);
+ nproc = pst_dyn.psd_activeprocs;
+ bytes = nproc * sizeof(struct pst_status);
+ if ((proc_table =
+ (struct pst_status *) realloc(proc_table, bytes)) == NULL) {
+ current_proc_entry = nproc + 1;
+ return;
+ }
+ pstat_getproc(proc_table, sizeof(struct pst_status), nproc, 0);
+
+#elif defined(solaris2)
+ if (getKstatInt("unix", "system_misc", "nproc", &nproc)) {
+ current_proc_entry = nproc + 1;
+ return;
+ }
+ bytes = nproc * sizeof(int);
+ if ((proc_table = (int *) realloc(proc_table, bytes)) == NULL) {
+ current_proc_entry = nproc + 1;
+ return;
+ }
+ {
+ DIR *f;
+ struct dirent *dp;
+#if _SLASH_PROC_METHOD_ == 0
+ if (kd == NULL) {
+ current_proc_entry = nproc + 1;
+ return;
+ }
+#endif
+ f = opendir("/proc");
+ current_proc_entry = 0;
+ while ((dp = readdir(f)) != NULL && current_proc_entry < nproc)
+ if (dp->d_name[0] != '.')
+ proc_table[current_proc_entry++] = atoi(dp->d_name);
+ /*
+ * if we are in a Solaris zone, nproc > current_proc_entry !
+ * but we only want the processes from the local zone
+ */
+ if (current_proc_entry != nproc)
+ nproc = current_proc_entry;
+ closedir(f);
+ }
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ {
+ pid_t proc_index = 0;
+ int avail = 1024;
+ if (proc_table) {
+ free(proc_table);
+ }
+ nproc = 0;
+ proc_table = malloc(sizeof(proc_table[0]) * avail);
+ for (;;) {
+ int got;
+ if (!proc_table) {
+ nproc = 0;
+ snmp_log_perror("Init_HR_SWRun-malloc");
+ return;
+ }
+ got = getprocs(proc_table + nproc, sizeof(proc_table[0]),
+ 0, sizeof(struct fdsinfo),
+ &proc_index, avail - nproc);
+ nproc += got;
+ if (nproc < avail) {
+ break;
+ }
+ avail += 1024;
+ proc_table = realloc(proc_table, avail * sizeof(proc_table[0]));
+ }
+ }
+#elif HAVE_KVM_GETPROCS
+ {
+ if (kd == NULL) {
+ nproc = 0;
+ return;
+ }
+ proc_table = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc);
+ }
+#else
+
+ current_proc_entry = 1;
+#ifndef bsdi2
+ nproc = 0;
+
+ if (auto_nlist(NPROC_SYMBOL, (char *) &nproc, sizeof(int)) == 0) {
+ snmp_log_perror("Init_HR_SWRun-auto_nlist NPROC");
+ return;
+ }
+#endif
+ bytes = nproc * sizeof(struct proc);
+
+ if (proc_table)
+ free((char *) proc_table);
+ if ((proc_table = (struct proc *) malloc(bytes)) == NULL) {
+ nproc = 0;
+ snmp_log_perror("Init_HR_SWRun-malloc");
+ return;
+ }
+
+ {
+ int proc_table_base;
+ if (auto_nlist
+ (PROC_SYMBOL, (char *) &proc_table_base,
+ sizeof(proc_table_base)) == 0) {
+ nproc = 0;
+ snmp_log_perror("Init_HR_SWRun-auto_nlist PROC");
+ return;
+ }
+ if (NETSNMP_KLOOKUP(proc_table_base, (char *) proc_table, bytes) == 0) {
+ nproc = 0;
+ snmp_log_perror("Init_HR_SWRun-klookup");
+ return;
+ }
+ }
+#endif
+ current_proc_entry = 0;
+}
+
+int
+Get_Next_HR_SWRun(void)
+{
+ while (current_proc_entry < nproc) {
+#if defined(hpux10) || defined(hpux11)
+ return proc_table[current_proc_entry++].pst_pid;
+#elif defined(solaris2)
+ return proc_table[current_proc_entry++];
+#elif HAVE_KVM_GETPROCS
+ #if defined(freebsd5) && __FreeBSD_version >= 500014
+ if (proc_table[current_proc_entry].ki_stat != 0)
+ return proc_table[current_proc_entry++].ki_pid;
+ #else
+ if (proc_table[current_proc_entry].kp_proc.p_stat != 0)
+ return proc_table[current_proc_entry++].kp_proc.p_pid;
+ #endif
+#elif defined(aix4) || defined(aix5) || defined(aix6)
+ if (proc_table[current_proc_entry].pi_state != 0)
+ return proc_table[current_proc_entry++].pi_pid;
+ else
+ ++current_proc_entry;
+#else
+ if (proc_table[current_proc_entry].p_stat != 0)
+ return proc_table[current_proc_entry++].p_pid;
+ else
+ ++current_proc_entry;
+#endif
+
+ }
+ return -1;
+}
+
+void
+End_HR_SWRun(void)
+{
+ current_proc_entry = nproc + 1;
+}
+#endif
+
+int
+count_processes(void)
+{
+#if !(defined(linux) || defined(cygwin) || defined(hpux10) || defined(hpux11) || defined(solaris2) || HAVE_KVM_GETPROCS || defined(dynix))
+ int i;
+#endif
+ int total = 0;
+
+ Init_HR_SWRun();
+#if defined(hpux10) || defined(hpux11) || HAVE_KVM_GETPROCS || defined(solaris2)
+ total = nproc;
+#else
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ for (i = 0; i < nproc; ++i) {
+ if (proc_table[i].pi_state != 0)
+#elif !defined(linux) && !defined(cygwin) && !defined(dynix)
+ for (i = 0; i < nproc; ++i) {
+ if (proc_table[i].p_stat != 0)
+#else
+ while (Get_Next_HR_SWRun() != -1) {
+#endif
+ ++total;
+ }
+#endif /* !hpux10 && !hpux11 && !HAVE_KVM_GETPROCS && !solaris2 */
+ End_HR_SWRun();
+ return total;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swrun.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swrun.h
new file mode 100644
index 0000000000..ce19629282
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_swrun.h
@@ -0,0 +1,13 @@
+/*
+ * Host Resources MIB - Running Software group interface - hr_swrun.h
+ * (also includes Running Software Performance group )
+ *
+ */
+#ifndef _MIBGROUP_HRSWRUN_H
+#define _MIBGROUP_HRSWRUN_H
+
+extern void init_hr_swrun(void);
+extern FindVarMethod var_hrswrun;
+
+
+#endif /* _MIBGROUP_HRSWRUN_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_system.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_system.c
new file mode 100644
index 0000000000..6d6afb56dd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_system.c
@@ -0,0 +1,681 @@
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+/*
+ * Host Resources MIB - system group implementation - hr_system.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "host.h"
+#include "host_res.h"
+#include "hr_system.h"
+#include <net-snmp/agent/auto_nlist.h>
+
+#ifdef HAVE_SYS_PROC_H
+#include <sys/param.h>
+#include "sys/proc.h"
+#endif
+#ifndef mingw32
+#if HAVE_UTMPX_H
+#include <utmpx.h>
+#else
+#include <utmp.h>
+#endif
+#endif /* mingw32 */
+#include <signal.h>
+#include <errno.h>
+
+#ifdef WIN32
+#include <lm.h>
+#endif
+
+#ifdef linux
+#ifdef HAVE_LINUX_TASKS_H
+#include <linux/tasks.h>
+#else
+/*
+ * If this file doesn't exist, then there is no hard limit on the number
+ * of processes, so return 0 for hrSystemMaxProcesses.
+ */
+#define NR_TASKS 0
+#endif
+#endif
+
+#if defined(hpux10) || defined(hpux11)
+#include <sys/pstat.h>
+#endif
+
+#if defined(solaris2)
+#include <kstat.h>
+#include <sys/var.h>
+#include <time.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/openpromio.h>
+#endif
+
+#ifdef HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif
+
+#if !defined(UTMP_FILE) && defined(_PATH_UTMP)
+#define UTMP_FILE _PATH_UTMP
+#endif
+
+#if defined(UTMP_FILE) && !HAVE_UTMPX_H
+void setutent(void);
+void endutent(void);
+struct utmp *getutent(void);
+#endif /* UTMP_FILE */
+
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+#if defined(solaris2)
+static struct openpromio * op_malloc(size_t size);
+static void op_free(struct openpromio *op);
+static int set_solaris_bootcommand_parameter(int action, u_char * var_val, u_char var_val_type, size_t var_val_len, u_char * statP, oid * name, size_t name_len);
+static int set_solaris_eeprom_parameter(const char *key, const char *value, size_t value_len);
+static int get_solaris_eeprom_parameter(const char *parameter, char *output);
+static long get_max_solaris_processes(void);
+#endif
+static int get_load_dev(void);
+static int count_users(void);
+extern int count_processes(void);
+
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+#define HRSYS_UPTIME 1
+#define HRSYS_DATE 2
+#define HRSYS_LOAD_DEV 3
+#define HRSYS_LOAD_PARAM 4
+#define HRSYS_USERS 5
+#define HRSYS_PROCS 6
+#define HRSYS_MAXPROCS 7
+
+#if defined(solaris2)
+struct variable2 hrsystem_variables[] = {
+ {HRSYS_UPTIME, ASN_TIMETICKS, RONLY, var_hrsys, 1, {1}},
+ {HRSYS_DATE, ASN_OCTET_STR, RWRITE, var_hrsys, 1, {2}},
+ {HRSYS_LOAD_DEV, ASN_INTEGER, RONLY, var_hrsys, 1, {3}},
+ {HRSYS_LOAD_PARAM, ASN_OCTET_STR, RWRITE, var_hrsys, 1, {4}},
+ {HRSYS_USERS, ASN_GAUGE, RONLY, var_hrsys, 1, {5}},
+ {HRSYS_PROCS, ASN_GAUGE, RONLY, var_hrsys, 1, {6}},
+ {HRSYS_MAXPROCS, ASN_INTEGER, RONLY, var_hrsys, 1, {7}}
+};
+#else
+struct variable2 hrsystem_variables[] = {
+ {HRSYS_UPTIME, ASN_TIMETICKS, RONLY, var_hrsys, 1, {1}},
+ {HRSYS_DATE, ASN_OCTET_STR, RONLY, var_hrsys, 1, {2}},
+ {HRSYS_LOAD_DEV, ASN_INTEGER, RONLY, var_hrsys, 1, {3}},
+ {HRSYS_LOAD_PARAM, ASN_OCTET_STR, RONLY, var_hrsys, 1, {4}},
+ {HRSYS_USERS, ASN_GAUGE, RONLY, var_hrsys, 1, {5}},
+ {HRSYS_PROCS, ASN_GAUGE, RONLY, var_hrsys, 1, {6}},
+ {HRSYS_MAXPROCS, ASN_INTEGER, RONLY, var_hrsys, 1, {7}}
+};
+#endif
+oid hrsystem_variables_oid[] = { 1, 3, 6, 1, 2, 1, 25, 1 };
+
+
+void
+init_hr_system(void)
+{
+#ifdef NPROC_SYMBOL
+ auto_nlist(NPROC_SYMBOL, 0, 0);
+#endif
+
+ REGISTER_MIB("host/hr_system", hrsystem_variables, variable2,
+ hrsystem_variables_oid);
+} /* end init_hr_system */
+
+/*
+ * header_hrsys(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ */
+
+int
+header_hrsys(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#define HRSYS_NAME_LENGTH 9
+ oid newname[MAX_OID_LEN];
+ int result;
+
+ DEBUGMSGTL(("host/hr_system", "var_hrsys: "));
+ DEBUGMSGOID(("host/hr_system", name, *length));
+ DEBUGMSG(("host/hr_system", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name, vp->namelen * sizeof(oid));
+ newname[HRSYS_NAME_LENGTH] = 0;
+ result = snmp_oid_compare(name, *length, newname, vp->namelen + 1);
+ if ((exact && (result != 0)) || (!exact && (result >= 0)))
+ return (MATCH_FAILED);
+ memcpy((char *) name, (char *) newname,
+ (vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+ return (MATCH_SUCCEEDED);
+} /* end header_hrsys */
+
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+u_char *
+var_hrsys(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ static char string[129]; /* per MIB, max size is 128 */
+#if defined(solaris2)
+ /* max size of nvram property */
+ char bootparam[8192];
+#endif
+ time_t now;
+#if !(defined(NR_TASKS) || defined(solaris2) || defined(hpux10) || defined(hpux11))
+ int nproc = 0;
+#endif
+#ifdef linux
+ FILE *fp;
+#endif
+#if NETSNMP_CAN_USE_SYSCTL && defined(CTL_KERN) && defined(KERN_MAXPROC)
+ static int maxproc_mib[] = { CTL_KERN, KERN_MAXPROC };
+ int buf_size;
+#endif
+#if defined(hpux10) || defined(hpux11)
+ struct pst_static pst_buf;
+#endif
+
+ if (header_hrsys(vp, name, length, exact, var_len, write_method) ==
+ MATCH_FAILED)
+ return NULL;
+
+ switch (vp->magic) {
+ case HRSYS_UPTIME:
+ long_return = get_uptime();
+ return (u_char *) & long_return;
+ case HRSYS_DATE:
+#if defined(HAVE_MKTIME) && defined(HAVE_STIME)
+ *write_method=ns_set_time;
+#endif
+ (void *) time(&now);
+ return (u_char *) date_n_time(&now, var_len);
+ case HRSYS_LOAD_DEV:
+ long_return = get_load_dev();
+ return (u_char *) & long_return;
+ case HRSYS_LOAD_PARAM:
+#ifdef linux
+ if((fp = fopen("/proc/cmdline", "r")) != NULL) {
+ fgets(string, sizeof(string), fp);
+ fclose(fp);
+ } else {
+ return NULL;
+ }
+#elif defined(solaris2)
+ *write_method=set_solaris_bootcommand_parameter;
+ if ( get_solaris_eeprom_parameter("boot-command",bootparam) ) {
+ snmp_log(LOG_ERR,"unable to lookup boot-command from eeprom\n");
+ return NULL;
+ }
+ strlcpy(string,bootparam,sizeof(string));
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ sprintf(string, "ask Dave"); /* XXX */
+#endif
+ *var_len = strlen(string);
+ return (u_char *) string;
+ case HRSYS_USERS:
+ long_return = count_users();
+ return (u_char *) & long_return;
+ case HRSYS_PROCS:
+#if USING_HOST_HR_SWRUN_MODULE
+ long_return = count_processes();
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = 0;
+#endif
+ return (u_char *) & long_return;
+ case HRSYS_MAXPROCS:
+#if defined(NR_TASKS)
+ long_return = NR_TASKS; /* <linux/tasks.h> */
+#elif NETSNMP_CAN_USE_SYSCTL && defined(CTL_KERN) && defined(KERN_MAXPROC)
+ buf_size = sizeof(nproc);
+ if (sysctl(maxproc_mib, 2, &nproc, &buf_size, NULL, 0) < 0)
+ return NULL;
+ long_return = nproc;
+#elif defined(hpux10) || defined(hpux11)
+ pstat_getstatic(&pst_buf, sizeof(struct pst_static), 1, 0);
+ long_return = pst_buf.max_proc;
+#elif defined(solaris2)
+ long_return=get_max_solaris_processes();
+ if(long_return == -1) return NULL;
+#elif defined(NPROC_SYMBOL)
+ auto_nlist(NPROC_SYMBOL, (char *) &nproc, sizeof(int));
+ long_return = nproc;
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = 0;
+#endif
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_hrsys\n",
+ vp->magic));
+ }
+ return NULL;
+} /* end var_hrsys */
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+
+#if defined(solaris2)
+
+/* functions for malloc and freeing openpromio structure */
+static struct openpromio * op_malloc(size_t size)
+{
+ struct openpromio *op;
+ op=malloc(sizeof(struct openpromio) + size);
+ if(op == NULL) {
+ snmp_log(LOG_ERR,"unable to malloc memory\n");
+ return NULL;
+ }
+
+ memset(op, 0, sizeof(struct openpromio)+size);
+ op->oprom_size=size;
+
+ return op;
+}
+
+static void op_free(struct openpromio *op) {
+ free(op);
+}
+
+static int
+set_solaris_bootcommand_parameter(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len) {
+
+ static char old_value[1024],*p_old_value=old_value;
+ int status=0;
+
+ switch (action) {
+ case RESERVE1:
+ /* check type */
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,"write to set_solaris_bootcommand_parameter not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ break;
+
+ case RESERVE2: {
+ /* create copy of old value */
+ if(statP) {
+ int old_val_len=strlen(statP);
+ if(old_val_len >= sizeof(old_value)) {
+ p_old_value=(char *)malloc(old_val_len+1);
+ if(p_old_value==NULL) {
+ snmp_log(LOG_ERR,"unable to malloc memory\n");
+ return SNMP_ERR_GENERR;
+ }
+ }
+ strlcpy(p_old_value,statP,old_val_len+1);
+ } else {
+ p_old_value=NULL;
+ }
+ break;
+ }
+
+ case ACTION: {
+ status=set_solaris_eeprom_parameter("boot-command",(char *)var_val,var_val_len);
+ if(status!=0) return SNMP_ERR_GENERR;
+ break;
+ }
+
+ case UNDO: {
+ /* revert to old value */
+ if(p_old_value) {
+ status=set_solaris_eeprom_parameter("boot-command",(char *)p_old_value,strlen(p_old_value));
+ p_old_value=old_value;
+ if(status!=0) return SNMP_ERR_GENERR;
+ }
+ break;
+ }
+
+ case FREE:
+ case COMMIT:
+ /* free memory if necessary */
+ if(p_old_value != old_value) {
+ free(p_old_value);
+ p_old_value=old_value;
+ }
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+static int set_solaris_eeprom_parameter(const char *key, const char *value,
+ size_t var_val_len) {
+
+ int status=0;
+ char buffer[1024],*pbuffer=buffer;
+
+ if( strlen(key)+strlen(value)+16 > sizeof(buffer) ) {
+ pbuffer=(char *)malloc(strlen(key)+strlen(value)+16);
+ }
+
+
+ sprintf(pbuffer,"eeprom %s=\"",key);
+ strncat(pbuffer,value,var_val_len);
+ strcat(pbuffer,"\"\n");
+
+ status=system(pbuffer);
+
+ if(pbuffer!=buffer) free(pbuffer);
+ return status;
+}
+
+static int get_solaris_eeprom_parameter(const char *parameter, char *outbuffer) {
+
+ int fd=0,status=0;
+ struct openpromio *openprominfo=NULL;
+
+ fd=open("/dev/openprom",O_RDONLY);
+ if ( fd == -1 ) {
+ snmp_log_perror("/dev/openprom");
+ return 1;
+ }
+
+ openprominfo = op_malloc(8192);
+ if(!openprominfo) return 1;
+
+ strcpy(openprominfo->oprom_array,parameter);
+
+ status=ioctl(fd,OPROMGETOPT,openprominfo);
+ if ( status == -1 ) {
+ snmp_log_perror("/dev/openprom");
+ close(fd);
+ op_free(openprominfo);
+ return 1;
+ }
+ strcpy(outbuffer,openprominfo->oprom_array);
+
+ op_free(openprominfo);
+
+ /* close file */
+ close(fd);
+
+ return(0);
+}
+
+static long get_max_solaris_processes(void) {
+
+ kstat_ctl_t *ksc=NULL;
+ kstat_t *ks=NULL;
+ struct var v;
+ static long maxprocs=-1;
+
+ /* assume only necessary to compute once, since /etc/system must be modified */
+ if (maxprocs == -1) {
+ if ( (ksc=kstat_open()) != NULL &&
+ (ks=kstat_lookup(ksc, "unix", 0, "var")) != NULL &&
+ (kstat_read(ksc, ks, &v) != -1)) {
+
+ maxprocs=v.v_proc;
+ }
+ if(ksc) {
+ kstat_close(ksc);
+ }
+ }
+
+ return maxprocs;
+}
+
+#endif
+
+#if defined(HAVE_MKTIME) && defined(HAVE_STIME)
+int
+ns_set_time(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+
+ static time_t oldtime=0;
+
+ switch (action) {
+ case RESERVE1:
+ /* check type */
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR,"write to ns_set_time not ASN_OCTET_STR\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len != 8 && var_val_len!=11) {
+ snmp_log(LOG_ERR,"write to ns_set_time not a proper length\n");
+ return SNMP_ERR_WRONGVALUE;
+ }
+ break;
+
+ case RESERVE2:
+ break;
+
+ case FREE:
+ break;
+
+ case ACTION: {
+ long status=0;
+ time_t seconds=0;
+ struct tm newtimetm;
+ int hours_from_utc= 0;
+ int minutes_from_utc= 0;
+
+ if (var_val_len == 11) {
+ /* timezone inforamation was present */
+ hours_from_utc=(int)var_val[9];
+ minutes_from_utc=(int)var_val[10];
+ }
+
+ newtimetm.tm_sec=(int)var_val[6];;
+ newtimetm.tm_min=(int)var_val[5];
+ newtimetm.tm_hour=(int)var_val[4];
+
+ newtimetm.tm_mon=(int)var_val[2]-1;
+ newtimetm.tm_year=256*(int)var_val[0]+(int)var_val[1]-1900;
+ newtimetm.tm_mday=(int)var_val[3];
+
+ /* determine if day light savings time in effect DST */
+ if ( ( hours_from_utc*60*60+minutes_from_utc*60 ) == abs(timezone) ) {
+ newtimetm.tm_isdst=0;
+ } else {
+ newtimetm.tm_isdst=1;
+ }
+
+ /* create copy of old value */
+ oldtime=time(NULL);
+
+ seconds=mktime(&newtimetm);
+ if(seconds == (time_t)-1) {
+ snmp_log(LOG_ERR, "Unable to convert time value\n");
+ return SNMP_ERR_GENERR;
+ }
+ status=stime(&seconds);
+ if(status!=0) {
+ snmp_log(LOG_ERR, "Unable to set time\n");
+ return SNMP_ERR_GENERR;
+ }
+ break;
+ }
+ case UNDO: {
+ /* revert to old value */
+ int status=0;
+ if(oldtime != 0) {
+ status=stime(&oldtime);
+ oldtime=0;
+ if(status!=0) {
+ snmp_log(LOG_ERR, "Unable to set time\n");
+ return SNMP_ERR_GENERR;
+ }
+ }
+ break;
+ }
+
+ case COMMIT: {
+ oldtime=0;
+ break;
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+#endif
+
+ /*
+ * Return the DeviceIndex corresponding
+ * to the boot device
+ */
+static int
+get_load_dev(void)
+{
+ return (HRDEV_DISK << HRDEV_TYPE_SHIFT); /* XXX */
+} /* end get_load_dev */
+
+static int
+count_users(void)
+{
+ int total = 0;
+#ifndef WIN32
+#if HAVE_UTMPX_H
+#define setutent setutxent
+#define pututline pututxline
+#define getutent getutxent
+#define endutent endutxent
+ struct utmpx *utmp_p;
+#else
+ struct utmp *utmp_p;
+#endif
+
+ setutent();
+ while ((utmp_p = getutent()) != NULL) {
+#ifndef UTMP_HAS_NO_TYPE
+ if (utmp_p->ut_type != USER_PROCESS)
+ continue;
+#endif
+#ifndef UTMP_HAS_NO_PID
+ /* This block of code fixes zombie user PIDs in the
+ utmp/utmpx file that would otherwise be counted as a
+ current user */
+ if (kill(utmp_p->ut_pid, 0) == -1 && errno == ESRCH) {
+ utmp_p->ut_type = DEAD_PROCESS;
+ pututline(utmp_p);
+ continue;
+ }
+#endif
+ ++total;
+ }
+ endutent();
+#else /* WIN32 */
+ /*
+ * TODO - Error checking.
+ */
+ LPWKSTA_INFO_102 wkinfo;
+ NET_API_STATUS nstatus;
+
+ nstatus = NetWkstaGetInfo(NULL, 102, (LPBYTE*)&wkinfo);
+ if (nstatus != NERR_Success) {
+ return 0;
+ }
+ total = (int)wkinfo->wki102_logged_on_users;
+
+ NetApiBufferFree(wkinfo);
+#endif /* WIN32 */
+ return total;
+}
+
+#if defined(UTMP_FILE) && !HAVE_UTMPX_H
+
+static FILE *utmp_file;
+static struct utmp utmp_rec;
+
+void
+setutent(void)
+{
+ if (utmp_file)
+ fclose(utmp_file);
+ utmp_file = fopen(UTMP_FILE, "r");
+}
+
+void
+endutent(void)
+{
+ if (utmp_file) {
+ fclose(utmp_file);
+ utmp_file = NULL;
+ }
+}
+
+struct utmp *
+getutent(void)
+{
+ if (!utmp_file)
+ return NULL;
+ while (fread(&utmp_rec, sizeof(utmp_rec), 1, utmp_file) == 1)
+ if (*utmp_rec.ut_name && *utmp_rec.ut_line)
+ return &utmp_rec;
+ return NULL;
+}
+
+#endif /* UTMP_FILE */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_system.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_system.h
new file mode 100644
index 0000000000..5e12c0df6c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host/hr_system.h
@@ -0,0 +1,15 @@
+/*
+ * Host Resources MIB - system group interface - hr_system.h
+ *
+ */
+#ifndef _MIBGROUP_HRSYSTEM_H
+#define _MIBGROUP_HRSYSTEM_H
+
+extern void init_hr_system(void);
+extern FindVarMethod var_hrsys;
+
+#if defined(HAVE_MKTIME) && defined(HAVE_STIME)
+int ns_set_time(int action, u_char * var_val, u_char var_val_type, size_t var_val_len, u_char * statP, oid * name, size_t name_len);
+#endif
+
+#endif /* _MIBGROUP_HRSYSTEM_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/host_res.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/host_res.h
new file mode 100644
index 0000000000..fcb4db97dc
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/host_res.h
@@ -0,0 +1,88 @@
+/*
+ * Host Resources
+ * Device index manipulation data
+ */
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <sys/types.h>
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/snmp_agent.h>
+#include <net-snmp/agent/agent_handler.h>
+#include <net-snmp/agent/snmp_vars.h>
+#include <net-snmp/agent/var_struct.h>
+
+#if defined(IFNET_NEEDS_KERNEL) && !defined(_KERNEL)
+#define _KERNEL 1
+#define _I_DEFINED_KERNEL
+#endif
+#if defined (WIN32) && !defined (cygwin)
+#include <winsock.h>
+#else /* WIN32 */
+#include <sys/socket.h>
+#include <net/if.h>
+#endif /* WIN32 */
+#ifdef _I_DEFINED_KERNEL
+#undef _KERNEL
+#endif
+#if HAVE_NET_IF_VAR_H
+#include <net/if_var.h>
+#endif
+#if HAVE_NETINET_IN_VAR_H
+#ifdef HAVE_SYS_QUEUE_H
+#include <sys/queue.h>
+#endif
+#include <netinet/in_var.h>
+#endif
+
+/*
+ * #include "snmp_vars.linux.h"
+ */
+
+ /*
+ * Deliberately set to the same values as hrDeviceTypes
+ */
+#define HRDEV_OTHER 1
+#define HRDEV_UNKNOWN 2
+#define HRDEV_PROC 3
+#define HRDEV_NETWORK 4
+#define HRDEV_PRINTER 5
+#define HRDEV_DISK 6
+#define HRDEV_VIDEO 10
+#define HRDEV_AUDIO 11
+#define HRDEV_COPROC 12
+#define HRDEV_KEYBOARD 13
+#define HRDEV_MODEM 14
+#define HRDEV_PARALLEL 15
+#define HRDEV_POINTER 16
+#define HRDEV_SERIAL 17
+#define HRDEV_TAPE 18
+#define HRDEV_CLOCK 19
+#define HRDEV_VMEM 20
+#define HRDEV_NVMEM 21
+
+#define HRDEV_TYPE_MAX 22 /* one greater than largest device type */
+#define HRDEV_TYPE_SHIFT 8
+#define HRDEV_TYPE_MASK 0xff
+
+typedef void (*PFV) (void);
+typedef int (*PFI) (int);
+typedef int (*PFIV) (void);
+typedef const char *(*PFS) (int);
+typedef oid *(*PFO) (int, size_t *);
+
+extern PFV init_device[]; /* Routines for stepping through devices */
+extern PFIV next_device[];
+extern PFV save_device[];
+extern int dev_idx_inc[]; /* Flag - are indices returned in strictly
+ * increasing order */
+
+extern PFS device_descr[]; /* Return data for a particular device */
+extern PFO device_prodid[];
+extern PFI device_status[];
+extern PFI device_errors[];
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib.h
new file mode 100644
index 0000000000..998a46b5da
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib.h
@@ -0,0 +1,7 @@
+/*
+ * module to include the modules
+ */
+
+config_require(if-mib/ifTable);
+config_require(if-mib/ifXTable);
+config_add_mib(IF-MIB)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface.c
new file mode 100644
index 0000000000..1e9b8ef993
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface.c
@@ -0,0 +1,783 @@
+/*
+ * Interface MIB architecture support
+ *
+ * $Id: interface.c 16830 2008-02-22 23:52:33Z hardaker $
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include "mibII/mibII_common.h"
+#include "if-mib/ifTable/ifTable_constants.h"
+#include "if-mib/data_access/interface.h"
+
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/library/snmp_enum.h>
+#include <net-snmp/data_access/interface.h>
+
+
+/**---------------------------------------------------------------------*/
+/*
+ * local static vars
+ */
+static netsnmp_conf_if_list *conf_list = NULL;
+static int need_wrap_check = -1;
+static int _access_interface_init = 0;
+
+/*
+ * local static prototypes
+ */
+static int _access_interface_entry_compare_name(const void *lhs,
+ const void *rhs);
+#ifndef NETSNMP_ACCESS_INTERFACE_NOARCH
+static void _access_interface_entry_release(netsnmp_interface_entry * entry,
+ void *unused);
+#endif
+static void _access_interface_entry_save_name(const char *name, oid index);
+static void _parse_interface_config(const char *token, char *cptr);
+static void _free_interface_config(void);
+
+/**---------------------------------------------------------------------*/
+/*
+ * external per-architecture functions prototypes
+ *
+ * These shouldn't be called by the general public, so they aren't in
+ * the header file.
+ */
+#ifndef NETSNMP_ACCESS_INTERFACE_NOARCH
+extern void netsnmp_arch_interface_init(void);
+extern int
+netsnmp_arch_interface_container_load(netsnmp_container* container,
+ u_int load_flags);
+extern int
+netsnmp_arch_set_admin_status(netsnmp_interface_entry * entry,
+ int ifAdminStatus);
+extern int netsnmp_arch_interface_index_find(const char*name);
+#endif
+
+
+/**
+ * initialization
+ */
+void
+init_interface(void)
+{
+ snmpd_register_config_handler("interface", _parse_interface_config,
+ _free_interface_config,
+ "name type speed");
+}
+
+
+void
+netsnmp_access_interface_init(void)
+{
+ netsnmp_assert(0 == _access_interface_init); /* who is calling twice? */
+
+ if (1 == _access_interface_init)
+ return;
+
+ _access_interface_init = 1;
+
+#ifndef NETSNMP_ACCESS_INTERFACE_NOARCH
+ {
+ netsnmp_container * ifcontainer;
+
+ netsnmp_arch_interface_init();
+
+ /*
+ * load once to set up ifIndexes
+ */
+ ifcontainer = netsnmp_access_interface_container_load(NULL, 0);
+ if(NULL != ifcontainer)
+ netsnmp_access_interface_container_free(ifcontainer, 0);
+ }
+#endif
+}
+
+/**---------------------------------------------------------------------*/
+/*
+ * container functions
+ */
+/**
+ * initialize interface container
+ */
+netsnmp_container *
+netsnmp_access_interface_container_init(u_int flags)
+{
+ netsnmp_container *container1;
+
+ DEBUGMSGTL(("access:interface:container", "init\n"));
+
+ /*
+ * create the containers. one indexed by ifIndex, the other
+ * indexed by ifName.
+ */
+ container1 = netsnmp_container_find("access_interface:table_container");
+ if (NULL == container1)
+ return NULL;
+
+ container1->container_name = strdup("interface container");
+ if (flags & NETSNMP_ACCESS_INTERFACE_INIT_ADDL_IDX_BY_NAME) {
+ netsnmp_container *container2 =
+ netsnmp_container_find("access_interface_by_name:access_interface:table_container");
+ if (NULL == container2)
+ return NULL;
+
+ container2->container_name = strdup("interface name container");
+ container2->compare = _access_interface_entry_compare_name;
+
+ netsnmp_container_add_index(container1, container2);
+ }
+
+ return container1;
+}
+
+/**
+ * load interface information in specified container
+ *
+ * @param container empty container, or NULL to have one created for you
+ * @param load_flags flags to modify behaviour. Examples:
+ * NETSNMP_ACCESS_INTERFACE_INIT_ADDL_IDX_BY_NAME
+ *
+ * @retval NULL error
+ * @retval !NULL pointer to container
+ */
+#ifndef NETSNMP_ACCESS_INTERFACE_NOARCH
+netsnmp_container*
+netsnmp_access_interface_container_load(netsnmp_container* container, u_int load_flags)
+{
+ int rc;
+
+ DEBUGMSGTL(("access:interface:container", "load\n"));
+ netsnmp_assert(1 == _access_interface_init);
+
+ if (NULL == container)
+ container = netsnmp_access_interface_container_init(load_flags);
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "no container specified/found for access_interface\n");
+ return NULL;
+ }
+
+ rc = netsnmp_arch_interface_container_load(container, load_flags);
+ if (0 != rc) {
+ netsnmp_access_interface_container_free(container,
+ NETSNMP_ACCESS_INTERFACE_FREE_NOFLAGS);
+ container = NULL;
+ }
+
+ return container;
+}
+
+void
+netsnmp_access_interface_container_free(netsnmp_container *container, u_int free_flags)
+{
+ DEBUGMSGTL(("access:interface:container", "free\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container for netsnmp_access_interface_free\n");
+ return;
+ }
+
+ if(! (free_flags & NETSNMP_ACCESS_INTERFACE_FREE_DONT_CLEAR)) {
+ /*
+ * free all items.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func*)_access_interface_entry_release,
+ NULL);
+ }
+
+ CONTAINER_FREE(container);
+}
+
+/**
+ * @retval 0 interface not found
+ */
+oid
+netsnmp_access_interface_index_find(const char *name)
+{
+ DEBUGMSGTL(("access:interface:find", "index\n"));
+ netsnmp_assert(1 == _access_interface_init);
+
+ return netsnmp_arch_interface_index_find(name);
+}
+#endif
+
+/**---------------------------------------------------------------------*/
+/*
+ * ifentry functions
+ */
+/**
+ */
+netsnmp_interface_entry *
+netsnmp_access_interface_entry_get_by_index(netsnmp_container *container, oid index)
+{
+ netsnmp_index tmp;
+
+ DEBUGMSGTL(("access:interface:entry", "by_index\n"));
+ netsnmp_assert(1 == _access_interface_init);
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR,
+ "invalid container for netsnmp_access_interface_entry_get_by_index\n");
+ return NULL;
+ }
+
+ tmp.len = 1;
+ tmp.oids = &index;
+
+ return (netsnmp_interface_entry *) CONTAINER_FIND(container, &tmp);
+}
+
+/**
+ */
+netsnmp_interface_entry *
+netsnmp_access_interface_entry_get_by_name(netsnmp_container *container,
+ const char *name)
+{
+ netsnmp_interface_entry tmp;
+
+ DEBUGMSGTL(("access:interface:entry", "by_name\n"));
+ netsnmp_assert(1 == _access_interface_init);
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR,
+ "invalid container for netsnmp_access_interface_entry_get_by_name\n");
+ return NULL;
+ }
+
+ if (NULL == container->next) {
+ snmp_log(LOG_ERR,
+ "secondary index missing for netsnmp_access_interface_entry_get_by_name\n");
+ return NULL;
+ }
+
+ tmp.name = (char *)name;
+ return CONTAINER_FIND(container->next, &tmp);
+}
+
+/**
+ * @retval NULL index not found
+ */
+const char *
+netsnmp_access_interface_name_find(oid index)
+{
+ DEBUGMSGTL(("access:interface:find", "name\n"));
+ netsnmp_assert(1 == _access_interface_init);
+
+ return se_find_label_in_slist("interfaces", index);
+}
+
+/**
+ */
+netsnmp_interface_entry *
+netsnmp_access_interface_entry_create(const char *name, oid if_index)
+{
+ netsnmp_interface_entry *entry =
+ SNMP_MALLOC_TYPEDEF(netsnmp_interface_entry);
+
+ DEBUGMSGTL(("access:interface:entry", "create\n"));
+ netsnmp_assert(1 == _access_interface_init);
+
+ if(NULL == entry)
+ return NULL;
+
+ if(NULL != name)
+ entry->name = strdup(name);
+
+ /*
+ * get if index, and save name for reverse lookup
+ */
+#ifndef NETSNMP_ACCESS_INTERFACE_NOARCH
+ if (0 == if_index)
+ entry->index = netsnmp_access_interface_index_find(name);
+ else
+#endif
+ entry->index = if_index;
+ _access_interface_entry_save_name(name, entry->index);
+
+ entry->descr = strdup(name);
+
+ /*
+ * make some assumptions
+ */
+ entry->connector_present = 1;
+
+ entry->oid_index.len = 1;
+ entry->oid_index.oids = (oid *) & entry->index;
+
+ return entry;
+}
+
+/**
+ */
+void
+netsnmp_access_interface_entry_free(netsnmp_interface_entry * entry)
+{
+ DEBUGMSGTL(("access:interface:entry", "free\n"));
+
+ if (NULL == entry)
+ return;
+
+ /*
+ * SNMP_FREE not needed, for any of these,
+ * since the whole entry is about to be freed
+ */
+
+ if (NULL != entry->old_stats)
+ free(entry->old_stats);
+
+ if (NULL != entry->name)
+ free(entry->name);
+
+ if (NULL != entry->descr)
+ free(entry->descr);
+
+ if (NULL != entry->paddr)
+ free(entry->paddr);
+
+ free(entry);
+}
+
+/*
+ * Blech - backwards compatible mibII/interfaces style interface
+ * functions, so we don't have to update older modules to use
+ * the new code to get correct ifIndex values.
+ */
+#if defined( USING_IF_MIB_IFTABLE_IFTABLE_DATA_ACCESS_MODULE ) && \
+ ! defined( NETSNMP_NO_BACKWARDS_COMPATABILITY )
+
+static netsnmp_iterator *it = NULL;
+static netsnmp_container *c = NULL;
+static netsnmp_interface_entry *e = NULL;
+
+/**
+ *
+ */
+void
+Interface_Scan_Init(void)
+{
+ /*
+ * ifTable container shouldn't change, so we shouldn' have to
+ * re-fetch it every time.
+ */
+ if (NULL != c)
+ netsnmp_access_interface_container_free(c, 0);
+
+ c = netsnmp_access_interface_container_load(NULL, 0);
+
+ if (NULL != c) {
+ if (NULL != it)
+ ITERATOR_RELEASE(it);
+
+ it = CONTAINER_ITERATOR(c);
+ }
+
+ if (NULL != it)
+ e = ITERATOR_FIRST(it);
+}
+
+int
+Interface_Scan_Next(short *index, char *name, netsnmp_interface_entry **entry,
+ void *dc)
+{
+ if (NULL == e)
+ return 0;
+
+ if(index)
+ *index = e->index;
+
+ if(name)
+ strcpy(name, e->name);
+
+ if (entry)
+ *entry = e;
+
+ e = ITERATOR_NEXT(it);
+
+ return 1;
+}
+#endif /* NETSNMP_NO_BACKWARDS_COMPATABILITY */
+
+
+/**
+ *
+ * @retval 0 : success
+ * @retval < 0 : error
+ */
+#ifndef NETSNMP_ACCESS_INTERFACE_NOARCH
+int
+netsnmp_access_interface_entry_set_admin_status(netsnmp_interface_entry * entry,
+ int ifAdminStatus)
+{
+ int rc;
+
+ DEBUGMSGTL(("access:interface:entry", "set_admin_status\n"));
+
+ if (NULL == entry)
+ return -1;
+
+ if ((ifAdminStatus < IFADMINSTATUS_UP) ||
+ (ifAdminStatus > IFADMINSTATUS_TESTING))
+ return -2;
+
+ rc = netsnmp_arch_set_admin_status(entry, ifAdminStatus);
+ if (0 == rc) /* success */
+ entry->admin_status = ifAdminStatus;
+
+ return rc;
+}
+#endif
+
+/**---------------------------------------------------------------------*/
+/*
+ * Utility routines
+ */
+
+/**
+ */
+static int
+_access_interface_entry_compare_name(const void *lhs, const void *rhs)
+{
+ return strcmp(((const netsnmp_interface_entry *) lhs)->name,
+ ((const netsnmp_interface_entry *) rhs)->name);
+}
+
+/**
+ */
+static void
+_access_interface_entry_release(netsnmp_interface_entry * entry, void *context)
+{
+ netsnmp_access_interface_entry_free(entry);
+}
+
+/**
+ */
+static void
+_access_interface_entry_save_name(const char *name, oid index)
+{
+ oid tmp;
+
+ if(NULL == name)
+ return;
+
+ tmp = se_find_value_in_slist("interfaces", name);
+ if (tmp == SE_DNE) {
+ se_add_pair_to_slist("interfaces", strdup(name), index);
+ DEBUGMSGTL(("access:interface:ifIndex", "saved ifIndex %d for %s\n",
+ index, name));
+ }
+ else
+ if (index != tmp) {
+ static int logged = 0;
+ if (!logged) {
+ snmp_log(LOG_ERR, "IfIndex of an interface changed. Such " \
+ "interfaces will appear multiple times in IF-MIB.\n");
+ logged = 1;
+ }
+ DEBUGMSGTL(("access:interface:ifIndex", "index %d != tmp for %s\n",
+ index, name));
+ }
+}
+
+/**
+ * update stats
+ *
+ * @retval 0 : success
+ * @retval -1 : error
+ */
+int
+netsnmp_access_interface_entry_update_stats(netsnmp_interface_entry * prev_vals,
+ netsnmp_interface_entry * new_vals)
+{
+ DEBUGMSGTL(("access:interface", "check_wrap\n"));
+
+ /*
+ * sanity checks
+ */
+ if ((NULL == prev_vals) || (NULL == new_vals) ||
+ (NULL == prev_vals->name) || (NULL == new_vals->name) ||
+ (0 != strncmp(prev_vals->name, new_vals->name, strlen(prev_vals->name))))
+ return -1;
+
+ /*
+ * if we've determined that we have 64 bit counters, just copy them.
+ */
+ if (0 == need_wrap_check) {
+ memcpy(&prev_vals->stats, &new_vals->stats, sizeof(new_vals->stats));
+ return 0;
+ }
+
+ if (NULL == prev_vals->old_stats) {
+ /*
+ * if we don't have old stats, copy previous stats
+ */
+ prev_vals->old_stats = SNMP_MALLOC_TYPEDEF(netsnmp_interface_stats);
+ if (NULL == prev_vals->old_stats) {
+ return -2;
+ }
+ memcpy(prev_vals->old_stats, &prev_vals->stats, sizeof(new_vals->stats));
+ }
+
+ netsnmp_c64_check32_and_update(&prev_vals->stats.ibytes,
+ &new_vals->stats.ibytes,
+ &prev_vals->old_stats->ibytes,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.iucast,
+ &new_vals->stats.iucast,
+ &prev_vals->old_stats->iucast,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.imcast,
+ &new_vals->stats.imcast,
+ &prev_vals->old_stats->imcast,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.ibcast,
+ &new_vals->stats.ibcast,
+ &prev_vals->old_stats->ibcast,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.obytes,
+ &new_vals->stats.obytes,
+ &prev_vals->old_stats->obytes,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.oucast,
+ &new_vals->stats.oucast,
+ &prev_vals->old_stats->oucast,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.omcast,
+ &new_vals->stats.omcast,
+ &prev_vals->old_stats->omcast,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.obcast,
+ &new_vals->stats.obcast,
+ &prev_vals->old_stats->obcast,
+ &need_wrap_check);
+
+ /*
+ * Copy 32 bit counters
+ */
+ prev_vals->stats.ierrors = new_vals->stats.ierrors;
+ prev_vals->stats.idiscards = new_vals->stats.idiscards;
+ prev_vals->stats.iunknown_protos = new_vals->stats.iunknown_protos;
+ prev_vals->stats.inucast = new_vals->stats.inucast;
+ prev_vals->stats.oerrors = new_vals->stats.oerrors;
+ prev_vals->stats.odiscards = new_vals->stats.odiscards;
+ prev_vals->stats.oqlen = new_vals->stats.oqlen;
+ prev_vals->stats.collisions = new_vals->stats.collisions;
+ prev_vals->stats.onucast = new_vals->stats.onucast;
+
+ /*
+ * if we've decided we no longer need to check wraps, free old stats
+ */
+ if (0 == need_wrap_check) {
+ SNMP_FREE(prev_vals->old_stats);
+ }
+ else {
+ /*
+ * update old stats from new stats.
+ * careful - old_stats is a pointer to stats...
+ */
+ memcpy(prev_vals->old_stats, &new_vals->stats, sizeof(new_vals->stats));
+ }
+
+ return 0;
+}
+
+/**
+ * copy interface entry data (after checking for counter wraps)
+ *
+ * @retval -2 : malloc failed
+ * @retval -1 : interfaces not the same
+ * @retval 0 : no error
+ */
+int
+netsnmp_access_interface_entry_copy(netsnmp_interface_entry * lhs,
+ netsnmp_interface_entry * rhs)
+{
+ DEBUGMSGTL(("access:interface", "copy\n"));
+
+ if ((NULL == lhs) || (NULL == rhs) ||
+ (NULL == lhs->name) || (NULL == rhs->name) ||
+ (0 != strncmp(lhs->name, rhs->name, strlen(rhs->name))))
+ return -1;
+
+ /*
+ * update stats
+ */
+ netsnmp_access_interface_entry_update_stats(lhs, rhs);
+
+ /*
+ * update data
+ */
+ lhs->ns_flags = rhs->ns_flags;
+ if((NULL != lhs->descr) && (NULL != rhs->descr) &&
+ (0 == strcmp(lhs->descr, rhs->descr)))
+ ;
+ else {
+ if (NULL != lhs->descr)
+ SNMP_FREE(lhs->descr);
+ if (rhs->descr) {
+ lhs->descr = strdup(rhs->descr);
+ if(NULL == lhs->descr)
+ return -2;
+ }
+ }
+ lhs->type = rhs->type;
+ lhs->speed = rhs->speed;
+ lhs->speed_high = rhs->speed_high;
+ lhs->retransmit_v6 = rhs->retransmit_v6;
+ lhs->retransmit_v4 = rhs->retransmit_v4;
+ lhs->reachable_time = rhs->reachable_time;
+ lhs->mtu = rhs->mtu;
+ lhs->lastchange = rhs->lastchange;
+ lhs->discontinuity = rhs->discontinuity;
+ lhs->reasm_max_v4 = rhs->reasm_max_v4;
+ lhs->reasm_max_v6 = rhs->reasm_max_v6;
+ lhs->admin_status = rhs->admin_status;
+ lhs->oper_status = rhs->oper_status;
+ lhs->promiscuous = rhs->promiscuous;
+ lhs->connector_present = rhs->connector_present;
+ lhs->forwarding_v6 = rhs->forwarding_v6;
+ lhs->os_flags = rhs->os_flags;
+ if(lhs->paddr_len == rhs->paddr_len) {
+ if(rhs->paddr_len)
+ memcpy(lhs->paddr,rhs->paddr,rhs->paddr_len);
+ } else {
+ if (NULL != lhs->paddr)
+ SNMP_FREE(lhs->paddr);
+ if (rhs->paddr) {
+ lhs->paddr = malloc(rhs->paddr_len);
+ if(NULL == lhs->paddr)
+ return -2;
+ memcpy(lhs->paddr,rhs->paddr,rhs->paddr_len);
+ }
+ }
+ lhs->paddr_len = rhs->paddr_len;
+
+ return 0;
+}
+
+void
+netsnmp_access_interface_entry_guess_speed(netsnmp_interface_entry *entry)
+{
+ if (entry->type == IANAIFTYPE_ETHERNETCSMACD)
+ entry->speed = 10000000;
+ else if (entry->type == IANAIFTYPE_SOFTWARELOOPBACK)
+ entry->speed = 10000000;
+ else if (entry->type == IANAIFTYPE_ISO88025TOKENRING)
+ entry->speed = 4000000;
+ else
+ entry->speed = 0;
+}
+
+netsnmp_conf_if_list *
+netsnmp_access_interface_entry_overrides_get(const char * name)
+{
+ netsnmp_conf_if_list * if_ptr;
+
+ netsnmp_assert(1 == _access_interface_init);
+ if(NULL == name)
+ return NULL;
+
+ for (if_ptr = conf_list; if_ptr; if_ptr = if_ptr->next)
+ if (!strcmp(if_ptr->name, name))
+ break;
+
+ return if_ptr;
+}
+
+void
+netsnmp_access_interface_entry_overrides(netsnmp_interface_entry *entry)
+{
+ netsnmp_conf_if_list * if_ptr;
+
+ netsnmp_assert(1 == _access_interface_init);
+ if (NULL == entry)
+ return;
+
+ /*
+ * enforce mib size limit
+ */
+ if(entry->descr && (strlen(entry->descr) > 255))
+ entry->descr[255] = 0;
+
+ if_ptr =
+ netsnmp_access_interface_entry_overrides_get(entry->name);
+ if (if_ptr) {
+ entry->type = if_ptr->type;
+ entry->speed = if_ptr->speed;
+ }
+}
+
+/**---------------------------------------------------------------------*/
+/*
+ * interface config token
+ */
+/**
+ */
+static void
+_parse_interface_config(const char *token, char *cptr)
+{
+ netsnmp_conf_if_list *if_ptr, *if_new;
+ char *name, *type, *speed, *ecp;
+ char *st;
+
+ name = strtok_r(cptr, " \t", &st);
+ if (!name) {
+ config_perror("Missing NAME parameter");
+ return;
+ }
+ type = strtok_r(NULL, " \t", &st);
+ if (!type) {
+ config_perror("Missing TYPE parameter");
+ return;
+ }
+ speed = strtok_r(NULL, " \t", &st);
+ if (!speed) {
+ config_perror("Missing SPEED parameter");
+ return;
+ }
+ if_ptr = conf_list;
+ while (if_ptr)
+ if (strcmp(if_ptr->name, name))
+ if_ptr = if_ptr->next;
+ else
+ break;
+ if (if_ptr)
+ config_pwarn("Duplicate interface specification");
+ if_new = SNMP_MALLOC_TYPEDEF(netsnmp_conf_if_list);
+ if (!if_new) {
+ config_perror("Out of memory");
+ return;
+ }
+ if_new->speed = strtoul(speed, &ecp, 0);
+ if (*ecp) {
+ config_perror("Bad SPEED value");
+ free(if_new);
+ return;
+ }
+ if_new->type = strtol(type, &ecp, 0);
+ if (*ecp || if_new->type < 0) {
+ config_perror("Bad TYPE");
+ free(if_new);
+ return;
+ }
+ if_new->name = strdup(name);
+ if (!if_new->name) {
+ config_perror("Out of memory");
+ free(if_new);
+ return;
+ }
+ if_new->next = conf_list;
+ conf_list = if_new;
+}
+
+static void
+_free_interface_config(void)
+{
+ netsnmp_conf_if_list *if_ptr = conf_list, *if_next;
+ while (if_ptr) {
+ if_next = if_ptr->next;
+ free((char *) if_ptr->name);
+ free(if_ptr);
+ if_ptr = if_next;
+ }
+ conf_list = NULL;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface.h
new file mode 100644
index 0000000000..74ea4baaed
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface.h
@@ -0,0 +1,56 @@
+/*
+ * interface data access header
+ *
+ * $Id: interface.h 16536 2007-06-18 21:13:46Z hardaker $
+ */
+#ifndef NETSNMP_ACCESS_INTERFACE_CONFIG_H
+#define NETSNMP_ACCESS_INTERFACE_CONFIG_H
+
+/*
+ * all platforms use this generic code
+ */
+config_require(if-mib/data_access/interface)
+
+/**---------------------------------------------------------------------*/
+/*
+ * configure required files
+ *
+ * Notes:
+ *
+ * 1) prefer functionality over platform, where possible. If a method
+ * is available for multiple platforms, test that first. That way
+ * when a new platform is ported, it won't need a new test here.
+ *
+ * 2) don't do detail requirements here. If, for example,
+ * HPUX11 had different reuirements than other HPUX, that should
+ * be handled in the *_hpux.h header file.
+ */
+
+#ifdef NETSNMP_INCLUDE_IFTABLE_REWRITES
+
+config_exclude(mibII/interfaces)
+
+# if defined( linux )
+
+ config_require(if-mib/data_access/interface_linux)
+ config_require(if-mib/data_access/interface_ioctl)
+
+# elif defined( openbsd3 ) || defined( openbsd4 ) || \
+ defined( freebsd4 ) || defined( freebsd5 ) || defined( freebsd6 ) || defined (darwin)
+
+ config_require(if-mib/data_access/interface_sysctl)
+
+# elif defined( solaris2 )
+
+ config_require(if-mib/data_access/interface_solaris2)
+
+# else
+
+ config_error(This platform does not yet support IF-MIB rewrites)
+
+# endif
+#else
+# define NETSNMP_ACCESS_INTERFACE_NOARCH 1
+#endif
+
+#endif /* NETSNMP_ACCESS_INTERFACE_CONFIG_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_ioctl.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_ioctl.c
new file mode 100644
index 0000000000..ecc8222110
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_ioctl.c
@@ -0,0 +1,494 @@
+/*
+ * Interface MIB architecture support
+ *
+ * $Id: interface_ioctl.c 15638 2006-12-06 14:34:11Z rstory $
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include "mibII/mibII_common.h"
+#include "if-mib/ifTable/ifTable_constants.h"
+
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/data_access/interface.h>
+#include <net-snmp/data_access/ipaddress.h>
+#include "if-mib/data_access/interface.h"
+
+#ifdef HAVE_NET_IF_H
+#include <net/if.h>
+#endif
+#ifdef HAVE_NET_IF_ARP_H
+#include <net/if_arp.h>
+#endif
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+
+#include "interface_ioctl.h"
+#include "ip-mib/data_access/ipaddress_ioctl.h"
+
+/**
+ * ioctl wrapper
+ *
+ * @param fd : socket fd to use w/ioctl, or -1 to open/close one
+ * @param which
+ * @param ifrq
+ * param ifentry : ifentry to update
+ * @param name
+ *
+ * @retval 0 : success
+ * @retval -1 : invalid parameters
+ * @retval -2 : couldn't create socket
+ * @retval -3 : ioctl call failed
+ */
+static int
+_ioctl_get(int fd, int which, struct ifreq *ifrq, const char* name)
+{
+ int ourfd = -1, rc = 0;
+
+ DEBUGMSGTL(("verbose:access:interface:ioctl",
+ "ioctl %d for %s\n", which, name));
+
+ /*
+ * sanity checks
+ */
+ if(NULL == name) {
+ snmp_log(LOG_ERR, "invalid ifentry\n");
+ return -1;
+ }
+
+ /*
+ * create socket for ioctls
+ */
+ if(fd < 0) {
+ fd = ourfd = socket(AF_INET, SOCK_DGRAM, 0);
+ if(ourfd < 0) {
+ snmp_log(LOG_ERR,"couldn't create socket\n");
+ return -2;
+ }
+ }
+
+ strncpy(ifrq->ifr_name, name, sizeof(ifrq->ifr_name));
+ ifrq->ifr_name[ sizeof(ifrq->ifr_name)-1 ] = 0;
+ rc = ioctl(fd, which, ifrq);
+ if (rc < 0) {
+ snmp_log(LOG_ERR,"ioctl %d returned %d\n", which, rc);
+ rc = -3;
+ }
+
+ if(ourfd >= 0)
+ close(ourfd);
+
+ return rc;
+}
+
+#ifdef SIOCGIFHWADDR
+/**
+ * interface entry physaddr ioctl wrapper
+ *
+ * @param fd : socket fd to use w/ioctl, or -1 to open/close one
+ * @param ifentry : ifentry to update
+ *
+ * @retval 0 : success
+ * @retval -1 : invalid parameters
+ * @retval -2 : couldn't create socket
+ * @retval -3 : ioctl call failed
+ * @retval -4 : malloc error
+ */
+int
+netsnmp_access_interface_ioctl_physaddr_get(int fd,
+ netsnmp_interface_entry *ifentry)
+{
+ struct ifreq ifrq;
+ int rc = 0;
+
+ DEBUGMSGTL(("access:interface:ioctl", "physaddr_get\n"));
+
+ if((NULL != ifentry->paddr) &&
+ (ifentry->paddr_len != IFHWADDRLEN)) {
+ SNMP_FREE(ifentry->paddr);
+ }
+ if(NULL == ifentry->paddr)
+ ifentry->paddr = malloc(IFHWADDRLEN);
+
+ if(NULL == ifentry->paddr) {
+ rc = -4;
+ } else {
+
+ /*
+ * NOTE: this ioctl does not guarantee 6 bytes of a physaddr.
+ * In particular, a 'sit0' interface only appears to get back
+ * 4 bytes of sa_data. Uncomment this memset, and suddenly
+ * the sit interface will be 0:0:0:0:?:? where ? is whatever was
+ * in the memory before. Not sure if this memset should be done
+ * for every ioctl, as the rest seem to work ok...
+ */
+ memset(ifrq.ifr_hwaddr.sa_data, (0), IFHWADDRLEN);
+ ifentry->paddr_len = IFHWADDRLEN;
+ rc = _ioctl_get(fd, SIOCGIFHWADDR, &ifrq, ifentry->name);
+ if (rc < 0) {
+ memset(ifentry->paddr, (0), IFHWADDRLEN);
+ rc = -3; /* msg already logged */
+ }
+ else {
+ memcpy(ifentry->paddr, ifrq.ifr_hwaddr.sa_data, IFHWADDRLEN);
+
+ /*
+ * arphrd defines vary greatly. ETHER seems to be the only common one
+ */
+#ifdef ARPHRD_ETHER
+ switch (ifrq.ifr_hwaddr.sa_family) {
+ case ARPHRD_ETHER:
+ ifentry->type = 6;
+ break;
+#if defined(ARPHRD_TUNNEL) || defined(ARPHRD_IPGRE) || defined(ARPHRD_SIT)
+#ifdef ARPHRD_TUNNEL
+ case ARPHRD_TUNNEL:
+ case ARPHRD_TUNNEL6:
+#endif
+#ifdef ARPHRD_IPGRE
+ case ARPHRD_IPGRE:
+#endif
+#ifdef ARPHRD_SIT
+ case ARPHRD_SIT:
+#endif
+ ifentry->type = 131;
+ break; /* tunnel */
+#endif
+#ifdef ARPHRD_SLIP
+ case ARPHRD_SLIP:
+ case ARPHRD_CSLIP:
+ case ARPHRD_SLIP6:
+ case ARPHRD_CSLIP6:
+ ifentry->type = 28;
+ break; /* slip */
+#endif
+#ifdef ARPHRD_PPP
+ case ARPHRD_PPP:
+ ifentry->type = 23;
+ break; /* ppp */
+#endif
+#ifdef ARPHRD_LOOPBACK
+ case ARPHRD_LOOPBACK:
+ ifentry->type = 24;
+ break; /* softwareLoopback */
+#endif
+#ifdef ARPHRD_FDDI
+ case ARPHRD_FDDI:
+ ifentry->type = 15;
+ break;
+#endif
+#ifdef ARPHRD_ARCNET
+ case ARPHRD_ARCNET:
+ ifentry->type = 35;
+ break;
+#endif
+#ifdef ARPHRD_LOCALTLK
+ case ARPHRD_LOCALTLK:
+ ifentry->type = 42;
+ break;
+#endif
+#ifdef ARPHRD_HIPPI
+ case ARPHRD_HIPPI:
+ ifentry->type = 47;
+ break;
+#endif
+#ifdef ARPHRD_ATM
+ case ARPHRD_ATM:
+ ifentry->type = 37;
+ break;
+#endif
+ /*
+ * XXX: more if_arp.h:ARPHRD_xxx to IANAifType mappings...
+ */
+ default:
+ DEBUGMSGTL(("access:interface:ioctl", "unknown entry type %d\n",
+ ifrq.ifr_hwaddr.sa_family));
+ } /* switch */
+#endif /* ARPHRD_LOOPBACK */
+
+ }
+ }
+
+ return rc;
+}
+#endif /* SIOCGIFHWADDR */
+
+
+#ifdef SIOCGIFFLAGS
+/**
+ * interface entry flags ioctl wrapper
+ *
+ * @param fd : socket fd to use w/ioctl, or -1 to open/close one
+ * @param ifentry : ifentry to update
+ *
+ * @retval 0 : success
+ * @retval -1 : invalid parameters
+ * @retval -2 : couldn't create socket
+ * @retval -3 : ioctl call failed
+ */
+int
+netsnmp_access_interface_ioctl_flags_get(int fd,
+ netsnmp_interface_entry *ifentry)
+{
+ struct ifreq ifrq;
+ int rc = 0;
+
+ DEBUGMSGTL(("access:interface:ioctl", "flags_get\n"));
+
+ rc = _ioctl_get(fd, SIOCGIFFLAGS, &ifrq, ifentry->name);
+ if (rc < 0) {
+ ifentry->ns_flags &= ~NETSNMP_INTERFACE_FLAGS_HAS_IF_FLAGS;
+ return rc; /* msg already logged */
+ }
+ else {
+ ifentry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_IF_FLAGS;
+ ifentry->os_flags = ifrq.ifr_flags;
+
+ /*
+ * ifOperStatus description:
+ * If ifAdminStatus is down(2) then ifOperStatus should be down(2).
+ */
+ if(ifentry->os_flags & IFF_UP) {
+ ifentry->admin_status = IFADMINSTATUS_UP;
+ if(ifentry->os_flags & IFF_RUNNING)
+ ifentry->oper_status = IFOPERSTATUS_UP;
+ else
+ ifentry->oper_status = IFOPERSTATUS_DOWN;
+ }
+ else {
+ ifentry->admin_status = IFADMINSTATUS_DOWN;
+ ifentry->oper_status = IFOPERSTATUS_DOWN;
+ }
+
+ /*
+ * ifConnectorPresent description:
+ * This object has the value 'true(1)' if the interface sublayer has a
+ * physical connector and the value 'false(2)' otherwise."
+ * So, at very least, false(2) should be returned for loopback devices.
+ */
+ if(ifentry->os_flags & IFF_LOOPBACK) {
+ ifentry->connector_present = 0;
+ }
+ else {
+ ifentry->connector_present = 1;
+ }
+ }
+
+ return rc;
+}
+
+/**
+ * interface entry flags ioctl wrapper
+ *
+ * @param fd : socket fd to use w/ioctl, or -1 to open/close one
+ * @param ifentry : ifentry to update
+ *
+ * @retval 0 : success
+ * @retval -1 : invalid parameters
+ * @retval -2 : couldn't create socket
+ * @retval -3 : ioctl get call failed
+ * @retval -4 : ioctl set call failed
+ */
+int
+netsnmp_access_interface_ioctl_flags_set(int fd,
+ netsnmp_interface_entry *ifentry,
+ unsigned int flags, int and_complement)
+{
+ struct ifreq ifrq;
+ int ourfd = -1, rc = 0;
+
+ DEBUGMSGTL(("access:interface:ioctl", "flags_set\n"));
+
+ /*
+ * sanity checks
+ */
+ if((NULL == ifentry) || (NULL == ifentry->name)) {
+ snmp_log(LOG_ERR, "invalid ifentry\n");
+ return -1;
+ }
+
+ /*
+ * create socket for ioctls
+ */
+ if(fd < 0) {
+ fd = ourfd = socket(AF_INET, SOCK_DGRAM, 0);
+ if(ourfd < 0) {
+ snmp_log(LOG_ERR,"couldn't create socket\n");
+ return -2;
+ }
+ }
+
+ strncpy(ifrq.ifr_name, ifentry->name, sizeof(ifrq.ifr_name));
+ ifrq.ifr_name[ sizeof(ifrq.ifr_name)-1 ] = 0;
+ rc = ioctl(fd, SIOCGIFFLAGS, &ifrq);
+ if(rc < 0) {
+ snmp_log(LOG_ERR,"error getting flags\n");
+ close(fd);
+ return -3;
+ }
+ if(0 == and_complement)
+ ifrq.ifr_flags |= flags;
+ else
+ ifrq.ifr_flags &= ~flags;
+ rc = ioctl(fd, SIOCSIFFLAGS, &ifrq);
+ if(rc < 0) {
+ close(fd);
+ snmp_log(LOG_ERR,"error setting flags\n");
+ ifentry->os_flags = 0;
+ return -4;
+ }
+
+ if(ourfd >= 0)
+ close(ourfd);
+
+ ifentry->os_flags = ifrq.ifr_flags;
+
+ return 0;
+}
+#endif /* SIOCGIFFLAGS */
+
+#ifdef SIOCGIFMTU
+/**
+ * interface entry mtu ioctl wrapper
+ *
+ * @param fd : socket fd to use w/ioctl, or -1 to open/close one
+ * @param ifentry : ifentry to update
+ *
+ * @retval 0 : success
+ * @retval -1 : invalid parameters
+ * @retval -2 : couldn't create socket
+ * @retval -3 : ioctl call failed
+ */
+int
+netsnmp_access_interface_ioctl_mtu_get(int fd,
+ netsnmp_interface_entry *ifentry)
+{
+ struct ifreq ifrq;
+ int rc = 0;
+
+ DEBUGMSGTL(("access:interface:ioctl", "mtu_get\n"));
+
+ rc = _ioctl_get(fd, SIOCGIFMTU, &ifrq, ifentry->name);
+ if (rc < 0) {
+ ifentry->mtu = 0;
+ return rc; /* msg already logged */
+ }
+ else {
+ ifentry->mtu = ifrq.ifr_mtu;
+ }
+
+ return rc;
+}
+#endif /* SIOCGIFMTU */
+
+/**
+ * interface entry ifIndex ioctl wrapper
+ *
+ * @param fd : socket fd to use w/ioctl, or -1 to open/close one
+ * @param name : ifentry to update
+ *
+ * @retval 0 : not found
+ * @retval !0 : ifIndex
+ */
+oid
+netsnmp_access_interface_ioctl_ifindex_get(int fd, const char *name)
+{
+#ifndef SIOCGIFINDEX
+ return 0;
+#else
+ struct ifreq ifrq;
+ int rc = 0;
+
+ DEBUGMSGTL(("access:interface:ioctl", "ifindex_get\n"));
+
+ rc = _ioctl_get(fd, SIOCGIFINDEX, &ifrq, name);
+ if (rc < 0) {
+ DEBUGMSGTL(("access:interface:ioctl",
+ "ifindex_get error on inerface '%s'\n", name));
+ return 0;
+ }
+
+ return ifrq.ifr_ifindex;
+#endif /* SIOCGIFINDEX */
+}
+
+/**
+ * check an interface for ipv4 addresses
+ *
+ * @param sd : open socket descriptor
+ * @param if_name : optional name. takes precedent over if_index.
+ * @param if_index: optional if index. only used if no if_name specified
+ * @param flags :
+ *
+ * @retval < 0 : error
+ * @retval 0 : no ip v4 addresses
+ * @retval 1 : 1 or more ip v4 addresses
+ */
+int
+netsnmp_access_interface_ioctl_has_ipv4(int sd, const char *if_name,
+ int if_index, u_int *flags)
+{
+ int i, interfaces = 0;
+ struct ifconf ifc;
+ struct ifreq *ifrp;
+
+ /*
+ * one or the other
+ */
+ if ((NULL == flags) ||
+ ((0 == if_index) && (NULL == if_name))) {
+ return -1;
+ }
+
+ interfaces = netsnmp_access_ipaddress_ioctl_get_interface_count(sd, &ifc);
+ if(interfaces < 0) {
+ close(sd);
+ return -2;
+ }
+ netsnmp_assert(NULL != ifc.ifc_buf);
+
+ *flags &= ~NETSNMP_INTERFACE_FLAGS_HAS_IPV4;
+
+ ifrp = ifc.ifc_req;
+ for(i=0; i < interfaces; ++i, ++ifrp) {
+
+ DEBUGMSGTL(("access:ipaddress:container",
+ " interface %d, %s\n", i, ifrp->ifr_name));
+
+ /*
+ * search for matching if_name or if_index
+ */
+ if (NULL != if_name) {
+ if (strncmp(if_name, ifrp->ifr_name, sizeof(ifrp->ifr_name)) != 0)
+ continue;
+ }
+ else {
+ /*
+ * I think that Linux and Solaris both use ':' in the
+ * interface name for aliases.
+ */
+ char *ptr = strchr(ifrp->ifr_name, ':');
+ if (NULL != ptr)
+ *ptr = 0;
+
+ if (if_index !=
+ netsnmp_access_interface_ioctl_ifindex_get(sd, ifrp->ifr_name))
+ continue;
+ }
+
+ /*
+ * check and set v4 or v6 flag, and break if we've found both
+ */
+ if (AF_INET == ifrp->ifr_addr.sa_family) {
+ *flags |= NETSNMP_INTERFACE_FLAGS_HAS_IPV4;
+ break;
+ }
+ }
+
+ /*
+ * clean up
+ */
+ free(ifc.ifc_buf);
+
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_ioctl.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_ioctl.h
new file mode 100644
index 0000000000..611880b468
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_ioctl.h
@@ -0,0 +1,52 @@
+/*
+ * ioctl interface data access header
+ *
+ * $Id: interface_ioctl.h 13309 2005-10-29 03:30:43Z rstory $
+ */
+#ifndef NETSNMP_ACCESS_INTERFACE_IOCTL_H
+#define NETSNMP_ACCESS_INTERFACE_IOCTL_H
+
+/*
+ * need ipaddress functions to get ipversions of an interface
+*/
+config_require(ip-mib/data_access/ipaddress)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**---------------------------------------------------------------------*/
+/**/
+
+int
+netsnmp_access_interface_ioctl_physaddr_get(int fd,
+ netsnmp_interface_entry *ifentry);
+
+int
+netsnmp_access_interface_ioctl_flags_get(int fd,
+ netsnmp_interface_entry *ifentry);
+
+int
+netsnmp_access_interface_ioctl_flags_set(int fd,
+ netsnmp_interface_entry *ifentry,
+ unsigned int flags,
+ int and_complement);
+
+int
+netsnmp_access_interface_ioctl_mtu_get(int fd,
+ netsnmp_interface_entry *ifentry);
+
+oid
+netsnmp_access_interface_ioctl_ifindex_get(int fd, const char *name);
+
+int
+netsnmp_access_interface_ioctl_has_ipv4(int sd, const char *if_name,
+ int if_index, u_int *flags);
+
+/**---------------------------------------------------------------------*/
+
+# ifdef __cplusplus
+}
+#endif
+
+#endif /* NETSNMP_ACCESS_INTERFACE_IOCTL_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_linux.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_linux.c
new file mode 100644
index 0000000000..245fa99e77
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_linux.c
@@ -0,0 +1,856 @@
+/*
+ * Interface MIB architecture support
+ *
+ * $Id: interface_linux.c 16944 2008-05-14 13:35:40Z tanders $
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+
+#ifdef HAVE_LINUX_ETHTOOL_H
+#include <linux/types.h>
+typedef __u64 u64; /* hack, so we may include kernel's ethtool.h */
+typedef __u32 u32; /* ditto */
+typedef __u16 u16; /* ditto */
+typedef __u8 u8; /* ditto */
+#include <linux/ethtool.h>
+#endif /* HAVE_LINUX_ETHTOOL_H */
+
+#include "mibII/mibII_common.h"
+#include "if-mib/ifTable/ifTable_constants.h"
+
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#if HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#else
+#error "linux should have sys/ioctl header"
+#endif
+
+#include <net-snmp/data_access/interface.h>
+#include <net-snmp/data_access/ipaddress.h>
+#include "if-mib/data_access/interface.h"
+#include "interface_ioctl.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <linux/sockios.h>
+
+#ifndef IF_NAMESIZE
+#define IF_NAMESIZE 16
+#endif
+
+unsigned int
+netsnmp_linux_interface_get_if_speed(int fd, const char *name);
+#ifdef HAVE_LINUX_ETHTOOL_H
+unsigned int
+netsnmp_linux_interface_get_if_speed_mii(int fd, const char *name);
+#endif
+
+#define PROC_SYS_NET_IPVx_NEIGH_RETRANS_TIME_MS "/proc/sys/net/ipv%d/neigh/%s/retrans_time_ms"
+#define PROC_SYS_NET_IPVx_NEIGH_RETRANS_TIME "/proc/sys/net/ipv%d/neigh/%s/retrans_time"
+static const char *proc_sys_retrans_time;
+static unsigned short retrans_time_factor = 1;
+
+
+#define PROC_SYS_NET_IPVx_BASE_REACHABLE_TIME_MS "/proc/sys/net/ipv%d/neigh/%s/base_reachable_time_ms"
+#define PROC_SYS_NET_IPVx_BASE_REACHABLE_TIME "/proc/sys/net/ipv%d/neigh/%s/base_reachable_time"
+static const char *proc_sys_basereachable_time;
+static unsigned short basereachable_time_ms = 0;
+void
+netsnmp_arch_interface_init(void)
+{
+ /*
+ * Check which retransmit time interface is available
+ */
+ char proc_path[ 64+IF_NAMESIZE];
+ char proc_path2[64+IF_NAMESIZE];
+ struct stat st;
+
+ snprintf(proc_path, sizeof(proc_path),
+ PROC_SYS_NET_IPVx_NEIGH_RETRANS_TIME_MS, 6, "default");
+ snprintf(proc_path2, sizeof(proc_path2),
+ PROC_SYS_NET_IPVx_NEIGH_RETRANS_TIME_MS, 4, "default");
+
+ if ((stat(proc_path, &st) == 0) || (stat(proc_path2, &st) == 0)) {
+ proc_sys_retrans_time = PROC_SYS_NET_IPVx_NEIGH_RETRANS_TIME_MS;
+ } else {
+ proc_sys_retrans_time = PROC_SYS_NET_IPVx_NEIGH_RETRANS_TIME;
+ retrans_time_factor = 10;
+ }
+
+ snprintf(proc_path, sizeof(proc_path), PROC_SYS_NET_IPVx_BASE_REACHABLE_TIME_MS, 6, "default");
+ snprintf(proc_path2, sizeof(proc_path), PROC_SYS_NET_IPVx_BASE_REACHABLE_TIME, 4, "default");
+
+ if ((stat(proc_path, &st) == 0) || (stat(proc_path2, &st) == 0)) {
+ proc_sys_basereachable_time = PROC_SYS_NET_IPVx_BASE_REACHABLE_TIME_MS;
+ basereachable_time_ms = 1;
+ }
+ else {
+ proc_sys_basereachable_time = PROC_SYS_NET_IPVx_BASE_REACHABLE_TIME;
+ }
+}
+
+/*
+ * find the ifIndex for an interface name
+ * NOTE: The Linux version is not efficient for large numbers of calls.
+ * consider using netsnmp_access_interface_ioctl_ifindex_get()
+ * for loops which need to look up a lot of indexes.
+ *
+ * @retval 0 : no index found
+ * @retval >0: ifIndex for interface
+ */
+oid
+netsnmp_arch_interface_index_find(const char *name)
+{
+ return netsnmp_access_interface_ioctl_ifindex_get(-1, name);
+}
+
+
+/*
+ * check for ipv6 addresses
+ */
+void
+_arch_interface_has_ipv6(oid if_index, u_int *flags,
+ netsnmp_container *addr_container)
+{
+#ifdef NETSNMP_ENABLE_IPV6
+ netsnmp_ipaddress_entry *addr_entry = NULL;
+ netsnmp_iterator *addr_it = NULL;
+ u_int addr_container_flags = 0; /* must init to 0 */
+#endif
+
+ if (NULL == flags)
+ return;
+
+ *flags &= ~NETSNMP_INTERFACE_FLAGS_HAS_IPV6;
+
+#ifndef SIOCGMIIPHY
+#define SIOCGMIIPHY 0x8947
+#endif
+
+#ifndef SIOCGMIIREG
+#define SIOCGMIIREG 0x8948
+#endif
+
+#ifdef NETSNMP_ENABLE_IPV6
+ /*
+ * get ipv6 addresses
+ */
+ if (NULL == addr_container) {
+ /*
+ * we only care about ipv6, if we need to allocate our own
+ * temporary container. set the flags (which we also use later
+ * to determine if we need to free the container).
+ */
+ addr_container_flags = NETSNMP_ACCESS_IPADDRESS_LOAD_IPV6_ONLY;
+ addr_container =
+ netsnmp_access_ipaddress_container_load(NULL,
+ addr_container_flags);
+ if (NULL == addr_container) {
+ DEBUGMSGTL(("access:ifcontainer",
+ "couldn't get ip addresses container\n"));
+ return;
+ }
+ }
+ else {
+ /*
+ * addr_container flags must be 0, so we don't release the
+ * user's container.
+ */
+ netsnmp_assert(0 == addr_container_flags);
+ }
+
+
+ /*
+ * get an ipaddress container iterator, and look for ipv6 addrs
+ */
+ addr_it = CONTAINER_ITERATOR(addr_container);
+ if (NULL == addr_it) {
+ DEBUGMSGTL(("access:ifcontainer",
+ "couldn't get ip addresses iterator\n"));
+ if (0!=addr_container_flags)
+ netsnmp_access_ipaddress_container_free(addr_container, 0);
+ return;
+ }
+
+ addr_entry = ITERATOR_FIRST(addr_it);
+ for( ; addr_entry ; addr_entry = ITERATOR_NEXT(addr_it) ) {
+ /*
+ * skip non matching indexes and ipv4 addresses
+ */
+ if ((if_index != addr_entry->if_index) ||
+ (4 == addr_entry->ia_address_len))
+ continue;
+
+ /*
+ * found one! no need to keep looking, set the flag and bail
+ */
+ *flags |= NETSNMP_INTERFACE_FLAGS_HAS_IPV6;
+ break;
+ }
+
+ /*
+ * make mama proud and clean up after ourselves
+ */
+ ITERATOR_RELEASE(addr_it);
+ if (0!=addr_container_flags)
+ netsnmp_access_ipaddress_container_free(addr_container, 0);
+#endif
+}
+
+/**
+ * @internal
+ */
+static void
+_arch_interface_flags_v4_get(netsnmp_interface_entry *entry)
+{
+ FILE *fin;
+ char line[256];
+
+ /*
+ * get the retransmit time
+ */
+ snprintf(line,sizeof(line), proc_sys_retrans_time, 4,
+ entry->name);
+ if (!(fin = fopen(line, "r"))) {
+ DEBUGMSGTL(("access:interface",
+ "Failed to open %s\n", line));
+ }
+ else {
+ if (fgets(line, sizeof(line), fin)) {
+ entry->retransmit_v4 = atoi(line) * retrans_time_factor;
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_V4_RETRANSMIT;
+ }
+ fclose(fin);
+ }
+}
+
+
+#ifdef NETSNMP_ENABLE_IPV6
+/**
+ * @internal
+ */
+static void
+_arch_interface_flags_v6_get(netsnmp_interface_entry *entry)
+{
+ FILE *fin;
+ char line[256];
+
+ /*
+ * get the retransmit time
+ */
+ snprintf(line,sizeof(line), proc_sys_retrans_time, 6,
+ entry->name);
+ if (!(fin = fopen(line, "r"))) {
+ DEBUGMSGTL(("access:interface",
+ "Failed to open %s\n", line));
+ }
+ else {
+ if (fgets(line, sizeof(line), fin)) {
+ entry->retransmit_v6 = atoi(line) * retrans_time_factor;
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_V6_RETRANSMIT;
+ }
+ fclose(fin);
+ }
+
+ /*
+ * get the forwarding status
+ */
+ snprintf(line, sizeof(line), "/proc/sys/net/ipv6/conf/%s/forwarding",
+ entry->name);
+ if (!(fin = fopen(line, "r"))) {
+ DEBUGMSGTL(("access:interface",
+ "Failed to open %s\n", line));
+ }
+ else {
+ if (fgets(line, sizeof(line), fin)) {
+ entry->forwarding_v6 = atoi(line);
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_V6_FORWARDING;
+ }
+ fclose(fin);
+ }
+
+ /*
+ * get the reachable time
+ */
+ snprintf(line, sizeof(line), proc_sys_basereachable_time, 6, entry->name);
+ if (!(fin = fopen(line, "r"))) {
+ DEBUGMSGTL(("access:interface",
+ "Failed to open %s\n", line));
+ }
+ else {
+ if (fgets(line, sizeof(line), fin)) {
+ if (basereachable_time_ms) {
+ entry->reachable_time = atoi(line); /* millisec */
+ } else {
+ entry->reachable_time = atoi(line)*1000; /* sec to millisec */
+ }
+
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_V6_REACHABLE;
+ }
+ fclose(fin);
+ }
+}
+#endif /* NETSNMP_ENABLE_IPV6 */
+
+/**
+ * @internal
+ */
+static int
+_parse_stats(netsnmp_interface_entry *entry, char *stats, int expected)
+{
+ /*
+ * scanline_2_2:
+ * [ IN ]
+ * byte pkts errs drop fifo frame cmprs mcst |
+ * [ OUT ]
+ * byte pkts errs drop fifo colls carrier compressed
+ */
+#ifdef SCNuMAX
+ uintmax_t rec_pkt, rec_oct, rec_err, rec_drop, rec_mcast;
+ uintmax_t snd_pkt, snd_oct, snd_err, snd_drop, coll;
+ const char *scan_line_2_2 =
+ "%" SCNuMAX " %" SCNuMAX " %" SCNuMAX " %" SCNuMAX
+ " %*" SCNuMAX " %*" SCNuMAX " %*" SCNuMAX " %" SCNuMAX
+ " %" SCNuMAX " %" SCNuMAX " %" SCNuMAX " %" SCNuMAX
+ " %*" SCNuMAX " %" SCNuMAX;
+ const char *scan_line_2_0 =
+ "%" SCNuMAX " %" SCNuMAX " %*" SCNuMAX " %*" SCNuMAX
+ " %*" SCNuMAX " %" SCNuMAX " %" SCNuMAX " %*" SCNuMAX
+ " %*" SCNuMAX " %" SCNuMAX;
+#else
+ unsigned long rec_pkt, rec_oct, rec_err, rec_drop, rec_mcast;
+ unsigned long snd_pkt, snd_oct, snd_err, snd_drop, coll;
+ const char *scan_line_2_2 =
+ "%lu %lu %lu %lu %*lu %*lu %*lu %lu %lu %lu %lu %lu %*lu %lu";
+ const char *scan_line_2_0 =
+ "%lu %lu %*lu %*lu %*lu %lu %lu %*lu %*lu %lu";
+#endif
+ static const char *scan_line_to_use = NULL;
+ int scan_count;
+
+ if (10 == expected)
+ scan_line_to_use = scan_line_2_2;
+ else {
+ netsnmp_assert(5 == expected);
+ scan_line_to_use = scan_line_2_0;
+ }
+
+ while (*stats == ' ')
+ stats++;
+
+ if ((*stats == 'N') &&
+ (0 == strncmp(stats, "No statistics available",
+ sizeof("No statistics available"))))
+ return -1;
+
+ /*
+ * Now parse the rest of the line (i.e. starting from 'stats')
+ * to extract the relevant statistics, and populate
+ * data structure accordingly.
+ * Use the entry flags field to indicate which counters are valid
+ */
+ rec_pkt = rec_oct = rec_err = rec_drop = rec_mcast = 0;
+ snd_pkt = snd_oct = snd_err = snd_drop = coll = 0;
+ if (scan_line_to_use == scan_line_2_2) {
+ scan_count = sscanf(stats, scan_line_to_use,
+ &rec_oct, &rec_pkt, &rec_err, &rec_drop, &rec_mcast,
+ &snd_oct, &snd_pkt, &snd_err, &snd_drop,
+ &coll);
+ if (scan_count == expected) {
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_BYTES;
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_DROPS;
+ /*
+ * 2.4 kernel includes a single multicast (input) counter?
+ */
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_MCAST_PKTS;
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_HIGH_SPEED;
+#ifdef SCNuMAX /* XXX - should be flag for 64-bit variables */
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_HIGH_BYTES;
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_HIGH_PACKETS;
+#endif
+ }
+ } else {
+ scan_count = sscanf(stats, scan_line_to_use,
+ &rec_pkt, &rec_err,
+ &snd_pkt, &snd_err, &coll);
+ if (scan_count == expected) {
+ entry->ns_flags &= ~NETSNMP_INTERFACE_FLAGS_HAS_MCAST_PKTS;
+ rec_oct = rec_drop = 0;
+ snd_oct = snd_drop = 0;
+ }
+ }
+ if(scan_count != expected) {
+ snmp_log(LOG_ERR,
+ "error scanning interface data (expected %d, got %d)\n",
+ expected, scan_count);
+ return scan_count;
+ }
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_ACTIVE;
+
+ /*
+ * linux previous to 1.3.~13 may miss transmitted loopback pkts:
+ */
+ if (!strcmp(entry->name, "lo") && rec_pkt > 0 && !snd_pkt)
+ snd_pkt = rec_pkt;
+
+ /*
+ * subtract out multicast packets from rec_pkt before
+ * we store it as unicast counter.
+ */
+ rec_pkt -= rec_mcast;
+
+ entry->stats.ibytes.low = rec_oct & 0xffffffff;
+ entry->stats.iucast.low = rec_pkt & 0xffffffff;
+ entry->stats.imcast.low = rec_mcast & 0xffffffff;
+ entry->stats.obytes.low = snd_oct & 0xffffffff;
+ entry->stats.oucast.low = snd_pkt & 0xffffffff;
+#ifdef SCNuMAX /* XXX - should be flag for 64-bit variables */
+ entry->stats.ibytes.high = rec_oct >> 32;
+ entry->stats.iucast.high = rec_pkt >> 32;
+ entry->stats.imcast.high = rec_mcast >> 32;
+ entry->stats.obytes.high = snd_oct >> 32;
+ entry->stats.oucast.high = snd_pkt >> 32;
+#endif
+ entry->stats.ierrors = rec_err;
+ entry->stats.idiscards = rec_drop;
+ entry->stats.oerrors = snd_err;
+ entry->stats.odiscards = snd_drop;
+ entry->stats.collisions = coll;
+
+ /*
+ * calculated stats.
+ *
+ * we have imcast, but not ibcast.
+ */
+ entry->stats.inucast = entry->stats.imcast.low +
+ entry->stats.ibcast.low;
+ entry->stats.onucast = entry->stats.omcast.low +
+ entry->stats.obcast.low;
+
+ return 0;
+}
+
+/*
+ *
+ * @retval 0 success
+ * @retval -1 no container specified
+ * @retval -2 could not open /proc/net/dev
+ * @retval -3 could not create entry (probably malloc)
+ */
+int
+netsnmp_arch_interface_container_load(netsnmp_container* container,
+ u_int load_flags)
+{
+ FILE *devin;
+ char line[256];
+ netsnmp_interface_entry *entry = NULL;
+ static char scan_expected = 0;
+ int fd;
+#ifdef NETSNMP_ENABLE_IPV6
+ netsnmp_container *addr_container;
+#endif
+
+ DEBUGMSGTL(("access:interface:container:arch", "load (flags %p)\n",
+ load_flags));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "no container specified/found for interface\n");
+ return -1;
+ }
+
+ if (!(devin = fopen("/proc/net/dev", "r"))) {
+ DEBUGMSGTL(("access:interface",
+ "Failed to load Interface Table (linux1)\n"));
+ snmp_log(LOG_ERR, "cannot open /proc/net/dev ...\n");
+ return -2;
+ }
+
+ /*
+ * create socket for ioctls
+ */
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if(fd < 0) {
+ snmp_log(LOG_ERR, "could not create socket\n");
+ return -2;
+ }
+
+#ifdef NETSNMP_ENABLE_IPV6
+ /*
+ * get ipv6 addresses
+ */
+ addr_container = netsnmp_access_ipaddress_container_load(NULL, 0);
+#endif
+
+ /*
+ * Read the first two lines of the file, containing the header
+ * This indicates which version of the kernel we're working with,
+ * and hence which statistics are actually available.
+ *
+ * Wes originally suggested parsing the field names in this header
+ * to detect the position of individual fields directly,
+ * but I suspect this is probably more trouble than it's worth.
+ */
+ fgets(line, sizeof(line), devin);
+ fgets(line, sizeof(line), devin);
+
+ if( 0 == scan_expected ) {
+ if (strstr(line, "compressed")) {
+ scan_expected = 10;
+ DEBUGMSGTL(("access:interface",
+ "using linux 2.2 kernel /proc/net/dev\n"));
+ } else {
+ scan_expected = 5;
+ DEBUGMSGTL(("access:interface",
+ "using linux 2.0 kernel /proc/net/dev\n"));
+ }
+ }
+
+ /*
+ * The rest of the file provides the statistics for each interface.
+ * Read in each line in turn, isolate the interface name
+ * and retrieve (or create) the corresponding data structure.
+ */
+ while (fgets(line, sizeof(line), devin)) {
+ char *stats, *ifstart = line;
+ u_int flags;
+ oid if_index;
+
+ flags = 0;
+ if (line[strlen(line) - 1] == '\n')
+ line[strlen(line) - 1] = '\0';
+
+ while (*ifstart && *ifstart == ' ')
+ ifstart++;
+
+ if ((!*ifstart) || ((stats = strrchr(ifstart, ':')) == NULL)) {
+ snmp_log(LOG_ERR,
+ "interface data format error 1, line ==|%s|\n", line);
+ continue;
+ }
+ if ((scan_expected == 10) && ((stats - line) < 6)) {
+ snmp_log(LOG_ERR,
+ "interface data format error 2 (%d < 6), line ==|%s|\n",
+ stats - line, line);
+ }
+
+ DEBUGMSGTL(("9:access:ifcontainer", "processing '%s'\n", ifstart));
+
+ /*
+ * get index via ioctl.
+ * If we've met this interface before, use the same index.
+ * Otherwise find an unused index value and use that.
+ */
+ *stats++ = 0; /* null terminate name */
+
+ if_index = netsnmp_arch_interface_index_find(ifstart);
+
+ /*
+ * set address type flags.
+ * the only way I know of to check an interface for
+ * ip version is to look for ip addresses. If anyone
+ * knows a better way, put it here!
+ */
+#ifdef NETSNMP_ENABLE_IPV6
+ _arch_interface_has_ipv6(if_index, &flags, addr_container);
+#endif
+ netsnmp_access_interface_ioctl_has_ipv4(fd, ifstart, 0, &flags);
+
+ /*
+ * do we only want one address type?
+ */
+ if (((load_flags & NETSNMP_ACCESS_INTERFACE_LOAD_IP4_ONLY) &&
+ ((flags & NETSNMP_INTERFACE_FLAGS_HAS_IPV4) == 0)) ||
+ ((load_flags & NETSNMP_ACCESS_INTERFACE_LOAD_IP6_ONLY) &&
+ ((flags & NETSNMP_INTERFACE_FLAGS_HAS_IPV6) == 0))) {
+ DEBUGMSGTL(("9:access:ifcontainer",
+ "interface '%s' excluded by ip version\n",
+ ifstart));
+ continue;
+ }
+
+ entry = netsnmp_access_interface_entry_create(ifstart, 0);
+ if(NULL == entry) {
+#ifdef NETSNMP_ENABLE_IPV6
+ netsnmp_access_ipaddress_container_free(addr_container, 0);
+#endif
+ netsnmp_access_interface_container_free(container,
+ NETSNMP_ACCESS_INTERFACE_FREE_NOFLAGS);
+ fclose(devin);
+ close(fd);
+ return -3;
+ }
+ entry->ns_flags = flags; /* initial flags; we'll set more later */
+
+ /*
+ * xxx-rks: get descr by linking mem from /proc/pci and /proc/iomem
+ */
+
+
+ /*
+ * use ioctls for some stuff
+ * (ignore rc, so we get as much info as possible)
+ */
+ netsnmp_access_interface_ioctl_physaddr_get(fd, entry);
+
+ /*
+ * physaddr should have set type. make some guesses (based
+ * on name) if not.
+ */
+ if(0 == entry->type) {
+ typedef struct _match_if {
+ int mi_type;
+ const char *mi_name;
+ } *pmatch_if, match_if;
+
+ static match_if lmatch_if[] = {
+ {IANAIFTYPE_SOFTWARELOOPBACK, "lo"},
+ {IANAIFTYPE_ETHERNETCSMACD, "eth"},
+ {IANAIFTYPE_ETHERNETCSMACD, "vmnet"},
+ {IANAIFTYPE_ISO88025TOKENRING, "tr"},
+ {IANAIFTYPE_FASTETHER, "feth"},
+ {IANAIFTYPE_GIGABITETHERNET,"gig"},
+ {IANAIFTYPE_PPP, "ppp"},
+ {IANAIFTYPE_SLIP, "sl"},
+ {IANAIFTYPE_TUNNEL, "sit"},
+ {IANAIFTYPE_BASICISDN, "ippp"},
+ {IANAIFTYPE_PROPVIRTUAL, "bond"}, /* Bonding driver find fastest slave */
+ {IANAIFTYPE_PROPVIRTUAL, "vad"}, /* ANS driver - ?speed? */
+ {0, 0} /* end of list */
+ };
+
+ int ii, len;
+ register pmatch_if pm;
+
+ for (ii = 0, pm = lmatch_if; pm->mi_name; pm++) {
+ len = strlen(pm->mi_name);
+ if (0 == strncmp(entry->name, pm->mi_name, len)) {
+ entry->type = pm->mi_type;
+ break;
+ }
+ }
+ if(NULL == pm->mi_name)
+ entry->type = IANAIFTYPE_OTHER;
+ }
+
+ if (IANAIFTYPE_ETHERNETCSMACD == entry->type)
+ entry->speed =
+ netsnmp_linux_interface_get_if_speed(fd, entry->name);
+#ifdef APPLIED_PATCH_836390 /* xxx-rks ifspeed fixes */
+ else if (IANAIFTYPE_PROPVIRTUAL == entry->type)
+ entry->speed = _get_bonded_if_speed(entry);
+#endif
+ else
+ netsnmp_access_interface_entry_guess_speed(entry);
+
+ netsnmp_access_interface_ioctl_flags_get(fd, entry);
+
+ netsnmp_access_interface_ioctl_mtu_get(fd, entry);
+
+ /*
+ * Zero speed means link problem.
+ * - i'm not sure this is always true...
+ */
+ if((entry->speed == 0) && (entry->os_flags & IFF_UP)) {
+ entry->os_flags &= ~IFF_RUNNING;
+ }
+
+ /*
+ * check for promiscuous mode.
+ * NOTE: there are 2 ways to set promiscuous mode in Linux
+ * (kernels later than 2.2.something) - using ioctls and
+ * using setsockopt. The ioctl method tested here does not
+ * detect if an interface was set using setsockopt. google
+ * on IFF_PROMISC and linux to see lots of arguments about it.
+ */
+ if(entry->os_flags & IFF_PROMISC) {
+ entry->promiscuous = 1; /* boolean */
+ }
+
+ /*
+ * hardcoded max packet size
+ * (see ip_frag_reasm: if(len > 65535) goto out_oversize;)
+ */
+ entry->reasm_max_v4 = entry->reasm_max_v6 = 65535;
+ entry->ns_flags |=
+ NETSNMP_INTERFACE_FLAGS_HAS_V4_REASMMAX |
+ NETSNMP_INTERFACE_FLAGS_HAS_V6_REASMMAX;
+
+ netsnmp_access_interface_entry_overrides(entry);
+
+ entry->speed_high = entry->speed / 1000000;
+
+ if (! (load_flags & NETSNMP_ACCESS_INTERFACE_LOAD_NO_STATS))
+ _parse_stats(entry, stats, scan_expected);
+
+ if (flags & NETSNMP_INTERFACE_FLAGS_HAS_IPV4)
+ _arch_interface_flags_v4_get(entry);
+
+#ifdef NETSNMP_ENABLE_IPV6
+ if (flags & NETSNMP_INTERFACE_FLAGS_HAS_IPV6)
+ _arch_interface_flags_v6_get(entry);
+#endif /* NETSNMP_ENABLE_IPV6 */
+
+ /*
+ * add to container
+ */
+ CONTAINER_INSERT(container, entry);
+ }
+#ifdef NETSNMP_ENABLE_IPV6
+ netsnmp_access_ipaddress_container_free(addr_container, 0);
+#endif
+ fclose(devin);
+ close(fd);
+ return 0;
+}
+
+int
+netsnmp_arch_set_admin_status(netsnmp_interface_entry * entry,
+ int ifAdminStatus_val)
+{
+ int and_complement;
+
+ DEBUGMSGTL(("access:interface:arch", "set_admin_status\n"));
+
+ if(IFADMINSTATUS_UP == ifAdminStatus_val)
+ and_complement = 0; /* |= */
+ else
+ and_complement = 1; /* &= ~ */
+
+ return netsnmp_access_interface_ioctl_flags_set(-1, entry,
+ IFF_UP, and_complement);
+}
+
+#ifdef HAVE_LINUX_ETHTOOL_H
+/**
+ * Determines network interface speed from ETHTOOL_GSET
+ */
+unsigned int
+netsnmp_linux_interface_get_if_speed(int fd, const char *name)
+{
+ struct ifreq ifr;
+ struct ethtool_cmd edata;
+
+ memset(&ifr, 0, sizeof(ifr));
+ edata.cmd = ETHTOOL_GSET;
+
+ strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)-1);
+ ifr.ifr_data = (char *) &edata;
+
+ if (ioctl(fd, SIOCETHTOOL, &ifr) == -1) {
+ DEBUGMSGTL(("mibII/interfaces", "ETHTOOL_GSET on %s failed\n",
+ ifr.ifr_name));
+ return netsnmp_linux_interface_get_if_speed_mii(fd,name);
+ }
+
+ if (edata.speed != SPEED_10 && edata.speed != SPEED_100 &&
+ edata.speed != SPEED_1000) {
+ DEBUGMSGTL(("mibII/interfaces", "fallback to mii for %s\n",
+ ifr.ifr_name));
+ /* try MII */
+ return netsnmp_linux_interface_get_if_speed_mii(fd,name);
+ }
+
+ /* return in bps */
+ DEBUGMSGTL(("mibII/interfaces", "ETHTOOL_GSET on %s speed = %d\n",
+ ifr.ifr_name, edata.speed));
+ return edata.speed*1000*1000;
+}
+#endif
+
+/**
+ * Determines network interface speed from MII
+ */
+unsigned int
+#ifdef HAVE_LINUX_ETHTOOL_H
+netsnmp_linux_interface_get_if_speed_mii(int fd, const char *name)
+#else
+netsnmp_linux_interface_get_if_speed(int fd, const char *name)
+#endif
+{
+ unsigned int retspeed = 10000000;
+ struct ifreq ifr;
+
+ /* the code is based on mii-diag utility by Donald Becker
+ * see ftp://ftp.scyld.com/pub/diag/mii-diag.c
+ */
+ ushort *data = (ushort *)(&ifr.ifr_data);
+ unsigned phy_id;
+ int mii_reg, i;
+ ushort mii_val[32];
+ ushort bmcr, bmsr, nway_advert, lkpar;
+ const unsigned int media_speeds[] = {10000000, 10000000, 100000000, 100000000, 10000000, 0};
+ /* It corresponds to "10baseT", "10baseT-FD", "100baseTx", "100baseTx-FD", "100baseT4", "Flow-control", 0, */
+
+ strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));
+ ifr.ifr_name[ sizeof(ifr.ifr_name)-1 ] = 0;
+ data[0] = 0;
+
+ /*
+ * SIOCGMIIPHY has been defined since at least kernel 2.4.10 (Sept 2001).
+ * It's probably safe to drop the interim SIOCDEVPRIVATE handling now!
+ */
+ if (ioctl(fd, SIOCGMIIPHY, &ifr) < 0) {
+ DEBUGMSGTL(("mibII/interfaces", "SIOCGMIIPHY on %s failed\n",
+ ifr.ifr_name));
+ return retspeed;
+ }
+
+ /* Begin getting mii register values */
+ phy_id = data[0];
+ for (mii_reg = 0; mii_reg < 8; mii_reg++){
+ data[0] = phy_id;
+ data[1] = mii_reg;
+ if(ioctl(fd, SIOCGMIIREG, &ifr) <0){
+ DEBUGMSGTL(("mibII/interfaces", "SIOCGMIIREG on %s failed\n", ifr.ifr_name));
+ }
+ mii_val[mii_reg] = data[3];
+ }
+ /*Parsing of mii values*/
+ /*Invalid basic mode control register*/
+ if (mii_val[0] == 0xffff || mii_val[1] == 0x0000) {
+ DEBUGMSGTL(("mibII/interfaces", "No MII transceiver present!.\n"));
+ return retspeed;
+ }
+ /* Descriptive rename. */
+ bmcr = mii_val[0]; /*basic mode control register*/
+ bmsr = mii_val[1]; /* basic mode status register*/
+ nway_advert = mii_val[4]; /* autonegotiation advertisement*/
+ lkpar = mii_val[5]; /*link partner ability*/
+
+ /*Check for link existence, returns 0 if link is absent*/
+ if ((bmsr & 0x0016) != 0x0004){
+ DEBUGMSGTL(("mibII/interfaces", "No link...\n"));
+ retspeed = 0;
+ return retspeed;
+ }
+
+ if(!(bmcr & 0x1000) ){
+ DEBUGMSGTL(("mibII/interfaces", "Auto-negotiation disabled.\n"));
+ retspeed = bmcr & 0x2000 ? 100000000 : 10000000;
+ return retspeed;
+ }
+ /* Link partner got our advertised abilities */
+ if (lkpar & 0x4000) {
+ int negotiated = nway_advert & lkpar & 0x3e0;
+ int max_capability = 0;
+ /* Scan for the highest negotiated capability, highest priority
+ (100baseTx-FDX) to lowest (10baseT-HDX). */
+ int media_priority[] = {8, 9, 7, 6, 5}; /* media_names[i-5] */
+ for (i = 0; media_priority[i]; i++){
+ if (negotiated & (1 << media_priority[i])) {
+ max_capability = media_priority[i];
+ break;
+ }
+ }
+ if (max_capability)
+ retspeed = media_speeds[max_capability - 5];
+ else
+ DEBUGMSGTL(("mibII/interfaces", "No common media type was autonegotiated!\n"));
+ }else if(lkpar & 0x00A0){
+ retspeed = (lkpar & 0x0080) ? 100000000 : 10000000;
+ }
+ return retspeed;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_solaris2.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_solaris2.c
new file mode 100644
index 0000000000..66fb22f7f1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_solaris2.c
@@ -0,0 +1,358 @@
+/*
+ * Interface MIB architecture support for Solaris
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include "mibII/mibII_common.h"
+#include "if-mib/ifTable/ifTable_constants.h"
+#include "kernel_sunos5.h"
+
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/data_access/interface.h>
+#include "if-mib/data_access/interface.h"
+#include <sys/ioctl.h>
+#include <sys/sockio.h>
+#include <strings.h>
+#include <string.h>
+
+static int _set_ip_flags_v4(netsnmp_interface_entry *, mib2_ifEntry_t *);
+static int _match_ifname_v4addr(void *ifname, void *ipaddr);
+static int _get_v4addr(mib2_ifEntry_t *ife, mib2_ipAddrEntry_t *e);
+
+static int _set_ip_flags_v6(netsnmp_interface_entry *, mib2_ifEntry_t *);
+#ifdef SOLARIS_HAVE_IPV6_MIB_SUPPORT
+static int _get_v6addr(mib2_ifEntry_t *ife, mib2_ipv6AddrEntry_t *ipv6e);
+static int _match_ifname_v6addr(void *ifname, void *ipaddr);
+#endif
+
+void
+netsnmp_arch_interface_init(void)
+{
+ init_kernel_sunos5();
+}
+
+/*
+ * find the ifIndex for an interface name
+ *
+ * @retval 0 : no index found
+ * @retval >0: ifIndex for interface
+ */
+oid
+netsnmp_arch_interface_index_find(const char *name)
+{
+#if defined(HAVE_IF_NAMETOINDEX)
+ return if_nametoindex(name);
+#else /* use GIFINDEX */
+ return solaris2_if_nametoindex(name, strlen(name));
+#endif /* defined(HAVE_IF_NAMETOINDEX) */
+}
+
+/*
+ * @retval 0 success
+ * @retval -1 no container specified
+ * @retval -2 could not create entry (probably malloc)
+ */
+int
+netsnmp_arch_interface_container_load(netsnmp_container* container,
+ u_int l_flags)
+{
+ netsnmp_interface_entry *entry = NULL;
+ mib2_ifEntry_t ife;
+ int rc;
+ req_e req = GET_FIRST;
+ int error = 0;
+
+ DEBUGMSGTL(("access:interface:container:arch", "load (flags %p)\n",
+ l_flags));
+
+ if (container == NULL) {
+ snmp_log(LOG_ERR,
+ "no container specified/found for interface\n");
+ return -1;
+ }
+
+ while ((rc = getMibstat(MIB_INTERFACES, &ife, sizeof(ife), req,
+ &Get_everything, NULL)) == 0) {
+
+ req = GET_NEXT;
+
+ DEBUGMSGTL(("access:interface:container:arch",
+ "processing '%s'\n", ife.ifDescr.o_bytes));
+ entry =
+ netsnmp_access_interface_entry_create(ife.ifDescr.o_bytes,
+ ife.ifIndex);
+ if (entry == NULL) {
+ error = 1;
+ break;
+ }
+ entry->ns_flags = 0;
+
+ if (l_flags & NETSNMP_ACCESS_INTERFACE_LOAD_IP4_ONLY &&
+ _set_ip_flags_v4(entry, &ife) == 0) {
+ netsnmp_access_interface_entry_free(entry);
+ continue;
+ } else if (l_flags & NETSNMP_ACCESS_INTERFACE_LOAD_IP6_ONLY &&
+ _set_ip_flags_v6(entry, &ife) == 0) {
+ netsnmp_access_interface_entry_free(entry);
+ continue;
+ } else {
+ (void) _set_ip_flags_v4(entry, &ife);
+ (void) _set_ip_flags_v6(entry, &ife);
+ }
+
+ /*
+ * collect the information needed by IF-MIB
+ */
+ entry->paddr = malloc(ife.ifPhysAddress.o_length);
+ if (entry->paddr == NULL) {
+ netsnmp_access_interface_entry_free(entry);
+ error = 1;
+ break;
+ }
+ entry->paddr_len = ife.ifPhysAddress.o_length;
+ (void)memcpy(entry->paddr, ife.ifPhysAddress.o_bytes,
+ ife.ifPhysAddress.o_length);
+
+ entry->type = ife.ifType;
+ entry->mtu = ife.ifMtu;
+ entry->speed = ife.ifSpeed;
+ entry->speed_high = entry->speed / 1000000;
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_HIGH_SPEED;
+ entry->oper_status = ife.ifOperStatus;
+ entry->admin_status = ife.ifAdminStatus;
+
+ if (ife.flags & IFF_PROMISC)
+ entry->promiscuous = 1;
+
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_ACTIVE;
+
+ /*
+ * Interface Stats.
+ */
+ if (! (l_flags & NETSNMP_ACCESS_INTERFACE_LOAD_NO_STATS)) {
+ entry->ns_flags |=
+ NETSNMP_INTERFACE_FLAGS_HAS_BYTES |
+ NETSNMP_INTERFACE_FLAGS_HAS_DROPS |
+ NETSNMP_INTERFACE_FLAGS_HAS_MCAST_PKTS;
+ if (ife.ifHCInOctets > 0 || ife.ifHCOutOctets > 0) {
+ /*
+ * We make the assumption that if we have
+ * a 64-bit Octet counter, then the other
+ * counters are 64-bit as well.
+ */
+ DEBUGMSGTL(("access:interface:container:arch",
+ "interface '%s' have 64-bit stat counters\n",
+ entry->name));
+ entry->ns_flags |=
+ NETSNMP_INTERFACE_FLAGS_HAS_HIGH_BYTES |
+ NETSNMP_INTERFACE_FLAGS_HAS_HIGH_PACKETS;
+ /* in stats */
+ entry->stats.ibytes.low = ife.ifHCInOctets & 0xffffffff;
+ entry->stats.ibytes.high = ife.ifHCInOctets >> 32;
+ entry->stats.iucast.low = ife.ifHCInUcastPkts & 0xffffffff;
+ entry->stats.iucast.high = ife.ifHCInUcastPkts >> 32;
+ entry->stats.imcast.low = ife.ifHCInMulticastPkts & 0xffffffff;
+ entry->stats.imcast.high = ife.ifHCInMulticastPkts >> 32;
+ entry->stats.ibcast.low = ife.ifHCInBroadcastPkts & 0xffffffff;
+ entry->stats.ibcast.high = ife.ifHCInBroadcastPkts >> 32;
+ /* out stats */
+ entry->stats.obytes.low = ife.ifHCOutOctets & 0xffffffff;
+ entry->stats.obytes.high = ife.ifHCOutOctets >> 32;
+ entry->stats.oucast.low = ife.ifHCOutUcastPkts & 0xffffffff;
+ entry->stats.oucast.high = ife.ifHCOutUcastPkts >> 32;
+ entry->stats.omcast.low = ife.ifHCOutMulticastPkts & 0xffffffff;
+ entry->stats.omcast.high = ife.ifHCOutMulticastPkts >> 32;
+ entry->stats.obcast.low = ife.ifHCOutBroadcastPkts & 0xffffffff;
+ entry->stats.obcast.high = ife.ifHCOutBroadcastPkts >> 32;
+ } else {
+ DEBUGMSGTL(("access:interface:container:arch",
+ "interface '%s' have 32-bit stat counters\n",
+ entry->name));
+ /* in stats */
+ entry->stats.ibytes.low = ife.ifInOctets;
+ entry->stats.iucast.low = ife.ifInUcastPkts;
+ entry->stats.imcast.low = ife.ifHCInMulticastPkts & 0xffffffff;
+ entry->stats.ibcast.low = ife.ifHCInBroadcastPkts & 0xffffffff;
+ /* out stats */
+ entry->stats.obytes.low = ife.ifOutOctets;
+ entry->stats.oucast.low = ife.ifOutUcastPkts;
+ entry->stats.omcast.low = ife.ifHCOutMulticastPkts & 0xffffffff;
+ entry->stats.obcast.low = ife.ifHCOutBroadcastPkts & 0xffffffff;
+ }
+ /* in stats */
+ entry->stats.ierrors = ife.ifInErrors;
+ entry->stats.idiscards = ife.ifInDiscards;
+ entry->stats.iunknown_protos = ife.ifInUnknownProtos;
+ entry->stats.inucast = ife.ifInNUcastPkts;
+ /* out stats */
+ entry->stats.oerrors = ife.ifOutErrors;
+ entry->stats.odiscards = ife.ifOutDiscards;
+ entry->stats.onucast = ife.ifOutNUcastPkts;
+ entry->stats.oqlen = ife.ifOutQLen;
+
+ /* other stats */
+ entry->stats.collisions = ife.ifCollisions;
+ }
+
+ netsnmp_access_interface_entry_overrides(entry);
+
+ /*
+ * add to container
+ */
+ CONTAINER_INSERT(container, entry);
+ }
+ DEBUGMSGTL(("access:interface:container:arch", "rc = %d\n", rc));
+
+ if (error) {
+ DEBUGMSGTL(("access:interface:container:arch",
+ "error %d, free container\n", error));
+ netsnmp_access_interface_container_free(container,
+ NETSNMP_ACCESS_INTERFACE_FREE_NOFLAGS);
+ return -2;
+ }
+
+ return 0;
+}
+/**
+ * @internal
+ */
+static int
+_set_ip_flags_v4(netsnmp_interface_entry *entry, mib2_ifEntry_t *ife)
+{
+ mib2_ipAddrEntry_t ipv4e;
+
+ if (_get_v4addr(ife, &ipv4e) > 0) {
+ entry->reasm_max_v4 = ipv4e.ipAdEntReasmMaxSize;
+ entry->ns_flags |=
+ NETSNMP_INTERFACE_FLAGS_HAS_IPV4 |
+ NETSNMP_INTERFACE_FLAGS_HAS_V4_REASMMAX;
+#if defined( SOLARIS_HAVE_RFC4293_SUPPORT )
+ entry->retransmit_v4 = ipv4e.ipAdEntRetransmitTime;
+ entry->ns_flags |=
+ NETSNMP_INTERFACE_FLAGS_HAS_V4_RETRANSMIT;
+#endif
+ return (1);
+ }
+ return (0);
+}
+
+/**
+ * @internal
+ */
+static int
+_set_ip_flags_v6(netsnmp_interface_entry *entry, mib2_ifEntry_t *ife)
+{
+#ifdef SOLARIS_HAVE_IPV6_MIB_SUPPORT
+ mib2_ipv6AddrEntry_t ipv6e;
+
+ if (_get_v6addr(ife, &ipv6e) > 0) {
+ entry->ns_flags |=
+ NETSNMP_INTERFACE_FLAGS_HAS_IPV6;
+#if defined( SOLARIS_HAVE_RFC4293_SUPPORT )
+ if (ipv6e.ipv6AddrIdentifierLen <= sizeof(entry->v6_if_id)) {
+ entry->v6_if_id_len = ipv6e.ipv6AddrIdentifierLen;
+ (void)memcpy(&entry->v6_if_id, &ipv6e.ipv6AddrIdentifier,
+ entry->v6_if_id_len);
+ entry->ns_flags |=
+ NETSNMP_INTERFACE_FLAGS_HAS_V6_IFID;
+ }
+ entry->reasm_max_v6 = ipv6e.ipv6AddrReasmMaxSize;
+ entry->retransmit_v6 = ipv6e.ipv6AddrRetransmitTime;
+ entry->reachable_time = ipv6e.ipv6AddrReachableTime;
+ entry->ns_flags |=
+ NETSNMP_INTERFACE_FLAGS_HAS_V6_REASMMAX |
+ NETSNMP_INTERFACE_FLAGS_HAS_V6_RETRANSMIT |
+ NETSNMP_INTERFACE_FLAGS_HAS_V6_REACHABLE;
+
+ /* XXX forwarding info missing */
+#else
+ /* XXX Don't have this info, 1500 is the minimum */
+ entry->reasm_max_v6 = 1500;
+ entry->ns_flags |=
+ NETSNMP_INTERFACE_FLAGS_HAS_V6_REASMMAX; /* ??? */
+#endif /* SOLARIS_HAVE_RFC4293_SUPPORT */
+ return (1);
+ }
+#endif /* SOLARIS_HAVE_IPV6_MIB_SUPPORT */
+ return (0);
+}
+
+/**
+ * @internal
+ */
+static int
+_match_ifname_v4addr(void *ifname, void *ipaddr)
+{
+ DeviceName *devname = &((mib2_ipAddrEntry_t *)ipaddr)->ipAdEntIfIndex;
+
+ return (strncmp((char *)ifname, devname->o_bytes, devname->o_length));
+
+}
+
+/**
+ * @internal
+ *
+ * Search for address entry that belongs to the IF entry.
+ * Returns 1 if an address was found, in which case the entry
+ * will be stored in ipv4e. If not entry was found, 0 is returned.
+ *
+ */
+static int
+_get_v4addr(mib2_ifEntry_t *ife, mib2_ipAddrEntry_t *ipv4e)
+{
+ int rc;
+
+ if ((rc = getMibstat(MIB_IP_ADDR, ipv4e, sizeof(*ipv4e), GET_EXACT,
+ &_match_ifname_v4addr, &ife->ifDescr.o_bytes)) == 0)
+ return (1);
+ bzero((void *)ipv4e, sizeof(*ipv4e));
+ return (0);
+}
+
+#ifdef SOLARIS_HAVE_IPV6_MIB_SUPPORT
+/**
+ * @internal
+ */
+static int
+_match_ifname_v6addr(void *ifname, void *ipaddr)
+{
+ DeviceName *devname = &((mib2_ipv6AddrEntry_t*)ipaddr)->ipv6AddrIfIndex;
+
+ return (strncmp((char *)ifname, devname->o_bytes, devname->o_length));
+
+}
+
+/**
+ * @internal
+ *
+ * Search for address entry that belongs to the IF entry.
+ * Returns 1 if an address was found, in which case the entry
+ * will be stored in ipv4e. If not entry was found, 0 is returned.
+ *
+ */
+static int
+_get_v6addr(mib2_ifEntry_t *ife, mib2_ipv6AddrEntry_t *ipv6e)
+{
+ int rc;
+
+ if ((rc = getMibstat(MIB_IP6_ADDR, ipv6e, sizeof(*ipv6e), GET_EXACT,
+ &_match_ifname_v6addr, &ife->ifDescr.o_bytes)) == 0) {
+ return (1);
+ }
+ bzero((void *)ipv6e, sizeof(*ipv6e));
+ return (0);
+}
+#endif /* SOLARIS_HAVE_IPV6_MIB_SUPPORT */
+
+int
+netsnmp_arch_set_admin_status(netsnmp_interface_entry * entry,
+ int ifAdminStatus_val)
+{
+ DEBUGMSGTL(("access:interface:arch", "set_admin_status\n"));
+
+ /*
+ * XXX Not supported yet
+ */
+ return (-1);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_sysctl.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_sysctl.c
new file mode 100644
index 0000000000..27b2aae5d6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_sysctl.c
@@ -0,0 +1,565 @@
+/*
+ * Interface MIB architecture support
+ *
+ * Based on patch 1362403, submited by Rojer
+ *
+ * $Id: interface_sysctl.c 16552 2007-06-20 21:34:24Z tanders $
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include "mibII/mibII_common.h"
+#include "if-mib/ifTable/ifTable_constants.h"
+
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#if HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#else
+#error "BSD should have sys/ioctl header"
+#endif
+
+#include <net-snmp/data_access/interface.h>
+#include <net-snmp/data_access/ipaddress.h>
+#include "if-mib/data_access/interface.h"
+
+#include <sys/types.h>
+#include <sys/time.h>
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_types.h>
+#include <net/if_media.h>
+
+/*
+ * account for minor differences between FreeBSD and OpenBSD.
+ * If this gets unruly, split stuff out into the respective
+ * files (interface_*BDS.c).
+ */
+/*
+ * FreeBSD has 2 promiscuous flags: kernel/user; check either
+ * http://unix.derkeiler.com/Mailing-Lists/FreeBSD/net/2004-09/0289.html
+ * which says:
+ * The first flag (IFF_PROMISC) is the one that the kernel code uses and
+ * sets on an interface's ifp structure. The second one is the one that
+ * comes from user space programs and is sent to the routine ifhwioctl()
+ * to set the first flag.
+ */
+#ifdef IFF_PPROMISC
+# define ARCH_PROMISC_FLAG (IFF_PPROMISC|IFF_PROMISC)
+#else
+# define ARCH_PROMISC_FLAG IFF_PROMISC
+#endif
+
+extern struct timeval starttime;
+
+/* sa_len roundup macro. */
+#define ROUNDUP(a) \
+ ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
+
+void
+netsnmp_arch_interface_init(void)
+{
+ /*
+ * nothing to do
+ */
+}
+
+/*
+ * find the ifIndex for an interface name
+ *
+ * @retval 0 : no index found
+ * @retval >0: ifIndex for interface
+ */
+oid
+netsnmp_arch_interface_index_find(const char *name)
+{
+ return if_nametoindex(name);
+}
+
+/*
+ * subroutine to translate known media typed to speed.
+ * see /usr/include/net/if_media.h for definitions
+ */
+
+void
+netsnmp_sysctl_ifmedia_to_speed(int media, u_int *speed,
+ u_int *speed_high)
+{
+ *speed = 0;
+ *speed_high = 0;
+
+ switch (IFM_TYPE(media)) {
+ case IFM_ETHER:
+ switch (IFM_SUBTYPE(media)) {
+ case IFM_10_T:
+ case IFM_10_2:
+ case IFM_10_5:
+ case IFM_10_STP:
+ case IFM_10_FL:
+ *speed = 10000000;
+ *speed_high = 10; break;
+ case IFM_100_TX:
+ case IFM_100_FX:
+ case IFM_100_T4:
+ case IFM_100_VG:
+ case IFM_100_T2:
+ *speed = 100000000;
+ *speed_high = 100; break;
+ case IFM_1000_LX:
+ case IFM_1000_CX:
+#ifdef IFM_1000_T
+ case IFM_1000_T:
+#endif
+ *speed = 1000000000;
+ *speed_high = 1000; break;
+#ifdef IFM_10GBASE_SR
+ case IFM_10GBASE_SR:
+ case IFM_10GBASE_LR:
+ *speed = (u_int) -1; /* 4294967295; */
+ *speed_high = 10000; break;
+#endif
+ }
+ break;
+ case IFM_IEEE80211:
+ switch (IFM_SUBTYPE(media)) {
+ case IFM_IEEE80211_FH1:
+ case IFM_IEEE80211_DS1:
+ *speed = 1000000;
+ *speed_high = 1;
+ break;
+ case IFM_IEEE80211_FH2:
+ case IFM_IEEE80211_DS2:
+ *speed = 2000000;
+ *speed_high = 2;
+ break;
+ case IFM_IEEE80211_DS5:
+ *speed = 5500000;
+ *speed_high = 5;
+ break;
+ case IFM_IEEE80211_DS11:
+ *speed = 11000000;
+ *speed_high = 11;
+ break;
+ case IFM_IEEE80211_DS22:
+ *speed = 22000000;
+ *speed_high = 22;
+ break;
+#ifdef IFM_IEEE80211_OFDM6
+ case IFM_IEEE80211_OFDM6:
+ *speed = 6000000;
+ *speed_high = 6;
+ break;
+ case IFM_IEEE80211_OFDM9:
+ *speed = 9000000;
+ *speed_high = 9;
+ break;
+ case IFM_IEEE80211_OFDM12:
+ *speed = 12000000;
+ *speed_high = 12;
+ break;
+ case IFM_IEEE80211_OFDM18:
+ *speed = 18000000;
+ *speed_high = 18;
+ break;
+ case IFM_IEEE80211_OFDM24:
+ *speed = 24000000;
+ *speed_high = 24;
+ break;
+ case IFM_IEEE80211_OFDM36:
+ *speed = 36000000;
+ *speed_high = 36;
+ break;
+ case IFM_IEEE80211_OFDM48:
+ *speed = 48000000;
+ *speed_high = 48;
+ break;
+ case IFM_IEEE80211_OFDM54:
+ *speed = 54000000;
+ *speed_high = 54;
+ break;
+ case IFM_IEEE80211_OFDM72:
+ *speed = 72000000;
+ *speed_high = 72;
+ break;
+#endif
+ }
+ break;
+ case IFM_TOKEN:
+ switch (IFM_SUBTYPE(media)) {
+ case IFM_TOK_STP4:
+ case IFM_TOK_UTP4:
+ *speed = 4000000;
+ *speed_high = 4;
+ break;
+ case IFM_TOK_STP16:
+ case IFM_TOK_UTP16:
+ *speed = 16000000;
+ *speed_high = 16;
+ break;
+#if defined(IFM_TOK_STP100) /* guessing if you've got one, you've got the other.. */
+ case IFM_TOK_STP100:
+ case IFM_TOK_UTP100:
+ *speed = 100000000;
+ *speed_high = 100;
+ break;
+#endif
+ }
+ break;
+#ifdef IFM_ATM
+ case IFM_ATM:
+ switch (IFM_SUBTYPE(media)) {
+ case IFM_ATM_MM_155:
+ case IFM_ATM_SM_155:
+ *speed = 155000000;
+ *speed_high = 155;
+ break;
+ case IFM_ATM_MM_622:
+ case IFM_ATM_SM_622:
+ *speed = 622000000;
+ *speed_high = 622;
+ break;
+ }
+#endif
+ }
+ return;
+}
+
+/*
+ * @retval 0 speed could not be determined (error, unknown media)
+ * @retval >0 speed, equal to *speed.
+ * sets *speed=2^31 and returns *speed_high=speed/10^6 as required
+ * by ifSpeed/ifHighSpeed.
+ */
+
+int
+netsnmp_sysctl_get_if_speed(char *name, u_int *speed,
+ u_int *speed_high)
+{
+ int s;
+ struct ifmediareq ifmr;
+ int *media_list, i;
+ u_int t_speed, t_speed_high;
+ u_int m_speed, m_speed_high;
+
+ *speed = 0;
+ *speed_high = 0;
+
+ if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ return 0;
+ }
+
+ (void) memset(&ifmr, 0, sizeof(ifmr));
+ (void) strncpy(ifmr.ifm_name, name, sizeof(ifmr.ifm_name));
+
+ DEBUGMSGTL(("access:interface:container:sysctl"," speed in\n"));
+ if (ioctl(s, SIOCGIFMEDIA, (caddr_t)&ifmr) < 0 ||
+ ifmr.ifm_count == 0) {
+
+ close(s);
+ return 0;
+ }
+
+ /*
+ * try to get speed from current media.
+ * if unsuccessful (e.g., interface is down), get a list of capabilities,
+ * try each and return maximum speed the interface is capable of.
+ */
+
+ netsnmp_sysctl_ifmedia_to_speed(ifmr.ifm_current, speed, speed_high);
+
+ if (*speed == 0 &&
+ (media_list = (int *) malloc(ifmr.ifm_count * sizeof(int))) != NULL ) {
+
+ ifmr.ifm_ulist = media_list;
+
+ if (ioctl(s, SIOCGIFMEDIA, (caddr_t)&ifmr) == 0) {
+ m_speed = 0;
+ m_speed_high = 0;
+ for (i = 0; i < ifmr.ifm_count; i++) {
+
+ netsnmp_sysctl_ifmedia_to_speed(media_list[i], &t_speed,
+ &t_speed_high);
+ if (t_speed_high > m_speed_high ||
+ (t_speed_high == m_speed_high && t_speed > t_speed)) {
+ m_speed_high = t_speed_high;
+ m_speed = t_speed;
+ }
+ }
+ *speed = m_speed;
+ *speed_high = m_speed_high;
+ }
+ free(media_list);
+ }
+
+ close(s);
+
+ DEBUGMSGTL(("access:interface:container:sysctl",
+ "%s: speed: %u, speed_high: %u\n",
+ name, *speed, *speed_high));
+
+ return *speed;
+}
+
+/*
+ *
+ * @retval 0 success
+ * @retval -1 no container specified
+ * @retval -2 could not get interface info
+ * @retval -3 could not create entry (probably malloc)
+ */
+int
+netsnmp_arch_interface_container_load(netsnmp_container* container,
+ u_int load_flags)
+{
+ netsnmp_interface_entry *entry = NULL;
+ u_char *if_list = NULL, *cp;
+ size_t if_list_size = 0;
+ struct if_msghdr *ifp;
+ int sysctl_oid[] = { CTL_NET, PF_ROUTE, 0, 0, NET_RT_IFLIST, 0 };
+ struct ifa_msghdr *ifa;
+ struct sockaddr *a;
+ struct sockaddr_dl *adl;
+ int amask;
+ char *if_name;
+ int flags;
+
+ DEBUGMSGTL(("access:interface:container:sysctl",
+ "load (flags %p)\n", load_flags));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "no container specified/found for interface\n");
+ return -1;
+ }
+
+ if (sysctl(sysctl_oid, sizeof(sysctl_oid)/sizeof(int), 0,
+ &if_list_size, 0, 0) == -1) {
+ snmp_log(LOG_ERR, "could not get interface info (size)\n");
+ return -2;
+ }
+
+ if_list = malloc(if_list_size);
+ if (if_list == NULL) {
+ snmp_log(LOG_ERR, "could not allocate memory for interface info "
+ "(%lu bytes)\n", if_list_size);
+ return -3;
+ } else {
+ DEBUGMSGTL(("access:interface:container:sysctl",
+ "allocated %lu bytes for if_list\n", if_list_size));
+ }
+
+ if (sysctl(sysctl_oid, sizeof(sysctl_oid)/sizeof(int), if_list,
+ &if_list_size, 0, 0) == -1) {
+ snmp_log(LOG_ERR, "could not get interface info\n");
+ free(if_list);
+ return -2;
+ }
+
+ /* 1st pass: create interface entries */
+ for (cp = if_list; cp < if_list + if_list_size; cp += ifp->ifm_msglen) {
+
+ ifp = (struct if_msghdr *) cp;
+ if_name = NULL;
+ flags = 0;
+ adl = NULL;
+
+ if (ifp->ifm_type != RTM_IFINFO)
+ continue;
+
+ if (ifp->ifm_addrs & RTA_IFP) {
+ a = (struct sockaddr *) (ifp + 1);
+ /*
+ * if_msghdr is followed by one or more sockaddrs, of which we
+ * need only RTA_IFP. most of the time RTA_IFP is the first
+ * address we get, hence the shortcut.
+ */
+ if ((ifp->ifm_addrs & (~RTA_IFP - 1)) != 0) {
+ /* skip all addresses up to RTA_IFP. */
+ for (amask = (RTA_IFP >> 1); amask != 0; amask >>= 1) {
+ if (ifp->ifm_addrs & amask)
+ a = (struct sockaddr *)
+ ( ((char *) a) + ROUNDUP(a->sa_len) );
+ }
+ }
+ adl = (struct sockaddr_dl *) a;
+ if_name = (char *) adl->sdl_data;
+ if_name[adl->sdl_nlen] = '\0';
+ }
+ if (!(ifp->ifm_addrs & RTA_IFP) || if_name == NULL) {
+ snmp_log(LOG_ERR, "ifm_index %u: no interface name in message, "
+ "skipping\n", ifp->ifm_index);
+ continue;
+ }
+
+ entry = netsnmp_access_interface_entry_create(if_name, ifp->ifm_index);
+ if(NULL == entry) {
+ netsnmp_access_interface_container_free(container,
+ NETSNMP_ACCESS_INTERFACE_FREE_NOFLAGS);
+ free(if_list);
+ return -3;
+ }
+
+ /* get physical address */
+ if (adl != NULL && adl->sdl_alen > 0) {
+ entry->paddr_len = adl->sdl_alen;
+ entry->paddr = malloc(entry->paddr_len);
+ memcpy(entry->paddr, adl->sdl_data + adl->sdl_nlen, adl->sdl_alen);
+ DEBUGMSGTL(("access:interface:container:sysctl",
+ "%s: paddr_len=%d, entry->paddr=%x:%x:%x:%x:%x:%x\n",
+ if_name, entry->paddr_len,
+ entry->paddr[0], entry->paddr[1], entry->paddr[2],
+ entry->paddr[3], entry->paddr[4], entry->paddr[5]));
+ } else {
+ entry->paddr = malloc(6);
+ entry->paddr_len = 6;
+ memset(entry->paddr, 0, 6);
+ }
+
+ entry->mtu = ifp->ifm_data.ifi_mtu;
+ entry->type = ifp->ifm_data.ifi_type;
+
+
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_IF_FLAGS;
+ entry->os_flags = ifp->ifm_flags;
+
+ if (ifp->ifm_flags & IFF_UP) {
+ entry->admin_status = IFADMINSTATUS_UP;
+#if defined( LINK_STATE_UP ) && defined( LINK_STATE_DOWN )
+ if (ifp->ifm_data.ifi_link_state == LINK_STATE_UP) {
+ entry->oper_status = IFOPERSTATUS_UP;
+ } else if (ifp->ifm_data.ifi_link_state == LINK_STATE_DOWN) {
+ entry->oper_status = IFOPERSTATUS_DOWN;
+ } else
+#endif
+ {
+ /*
+ * link state is unknown, which is not very useful to report.
+ * use running state instead.
+ */
+ entry->oper_status = ifp->ifm_flags & IFF_RUNNING ? 1 : 2;
+ }
+ } else {
+ entry->admin_status = IFADMINSTATUS_DOWN;
+ /*
+ * IF-MIB specifically says that ifOperStatus should be down in
+ * this case
+ */
+ entry->oper_status = IFOPERSTATUS_DOWN;
+ }
+
+ entry->reasm_max_v4 = entry->reasm_max_v6 = IP_MAXPACKET;
+ entry->ns_flags |=
+ NETSNMP_INTERFACE_FLAGS_HAS_V4_REASMMAX |
+ NETSNMP_INTERFACE_FLAGS_HAS_V6_REASMMAX;
+
+ /* get counters */
+ entry->stats.ibytes.low = ifp->ifm_data.ifi_ibytes;
+ entry->stats.ibytes.high = 0;
+ entry->stats.iucast.low = ifp->ifm_data.ifi_ipackets;
+ entry->stats.iucast.high = 0;
+ entry->stats.imcast.low = ifp->ifm_data.ifi_imcasts;
+ entry->stats.imcast.high = 0;
+ entry->stats.ierrors = ifp->ifm_data.ifi_ierrors;
+ entry->stats.idiscards = ifp->ifm_data.ifi_iqdrops;
+ entry->stats.iunknown_protos = ifp->ifm_data.ifi_noproto;
+
+ entry->stats.obytes.low = ifp->ifm_data.ifi_obytes;
+ entry->stats.obytes.high = 0;
+ entry->stats.oucast.low = ifp->ifm_data.ifi_opackets;
+ entry->stats.oucast.high = 0;
+ entry->stats.omcast.low = ifp->ifm_data.ifi_omcasts;
+ entry->stats.omcast.high = 0;
+ entry->stats.oerrors = ifp->ifm_data.ifi_oerrors;
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_BYTES |
+ NETSNMP_INTERFACE_FLAGS_HAS_DROPS |
+ NETSNMP_INTERFACE_FLAGS_HAS_MCAST_PKTS;
+
+ if (timercmp(&ifp->ifm_data.ifi_lastchange, &starttime, >)) {
+ entry->lastchange = (ifp->ifm_data.ifi_lastchange.tv_sec -
+ starttime.tv_sec) * 100;
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_LASTCHANGE;
+ } else {
+ entry->lastchange = 0;
+ }
+
+ if (ifp->ifm_flags & ARCH_PROMISC_FLAG)
+ entry->promiscuous = 1;
+
+ /* try to guess the speed from media type */
+ netsnmp_sysctl_get_if_speed(entry->name, &entry->speed,
+ &entry->speed_high);
+ if (entry->speed_high != 0) {
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_HIGH_SPEED;
+ } else {
+ /* or resort to ifi_baudrate */
+ entry->speed = ifp->ifm_data.ifi_baudrate;
+ }
+
+ netsnmp_access_interface_entry_overrides(entry);
+
+ CONTAINER_INSERT(container, entry);
+ DEBUGMSGTL(("access:interface:container:sysctl",
+ "created entry %u for %s\n", entry->index, entry->name));
+ } /* for (each interface entry) */
+
+ /* pass 2: walk addresses */
+ for (cp = if_list; cp < if_list + if_list_size; cp += ifa->ifam_msglen) {
+
+ ifa = (struct ifa_msghdr *) cp;
+
+ if (ifa->ifam_type != RTM_NEWADDR)
+ continue;
+
+ DEBUGMSGTL(("access:interface:container:sysctl",
+ "received 0x%x in RTM_NEWADDR for ifindex %u\n",
+ ifa->ifam_addrs, ifa->ifam_index));
+
+ entry = netsnmp_access_interface_entry_get_by_index(container,
+ ifa->ifam_index);
+ if (entry == NULL) {
+ snmp_log(LOG_ERR, "address for a nonexistent interface? index=%d",
+ ifa->ifam_index);
+ continue;
+ }
+
+ /*
+ * walk the list of addresses received. we do not use actual
+ * addresses, the sole purpose of this is to set flags
+ */
+ a = (struct sockaddr *) (ifa + 1);
+ for (amask = ifa->ifam_addrs; amask != 0; amask >>= 1) {
+ if ((amask & 1) != 0) {
+ DEBUGMSGTL(("access:interface:container:sysctl",
+ "%s: a=%p, sa_len=%d, sa_family=0x%x\n",
+ entry->name, a, a->sa_len, a->sa_family));
+
+ if (a->sa_family == AF_INET)
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_IPV4;
+ else if (a->sa_family == AF_INET6)
+ entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_IPV6;
+
+ a = (struct sockaddr *) ( ((char *) a) + ROUNDUP(a->sa_len) );
+ }
+ }
+ DEBUGMSGTL(("access:interface:container:sysctl",
+ "%s: flags=0x%x\n", entry->name, entry->ns_flags));
+ }
+
+ if (if_list != NULL)
+ free(if_list);
+
+ return 0;
+}
+
+int
+netsnmp_arch_set_admin_status(netsnmp_interface_entry * entry,
+ int ifAdminStatus_val)
+{
+ DEBUGMSGTL(("access:interface:arch", "set_admin_status\n"));
+
+ /* TODO: implement this call */
+
+ /* not implemented */
+ snmp_log(LOG_ERR, "netsnmp_arch_set_admin_status not (yet) implemented "
+ "for BSD sysctl.\n");
+
+ return -4;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_sysctl.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_sysctl.h
new file mode 100644
index 0000000000..ea5c05c2f7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/data_access/interface_sysctl.h
@@ -0,0 +1,31 @@
+/*
+ * Interface MIB architecture support
+ *
+ * Based on patch 1362403, submited by Rojer
+ *
+ * $Id: interface_sysctl.h 15068 2006-08-24 14:30:04Z rstory $
+ */
+#ifndef INTERFACE_SYSCTL_H
+#define INTERFACE_SYSCTL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int
+netsnmp_access_interface_sysctl_container_load(netsnmp_container* container,
+ u_int load_flags);
+
+void
+netsnmp_access_interface_sysctl_ifmedia_to_speed(int media, u_int *speed,
+ u_int *speed_high);
+
+int
+netsnmp_access_interface_sysctl_get_if_speed(char *name, u_int *speed,
+ u_int *speed_high);
+
+# ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable.h
new file mode 100644
index 0000000000..65fa09a80e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable.h
@@ -0,0 +1,5 @@
+/*
+ * module to include the modules
+ */
+
+config_require(if-mib/ifTable/ifTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable.c
new file mode 100644
index 0000000000..1710b519d9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable.c
@@ -0,0 +1,2352 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ifTable.c 15461 2006-10-19 20:38:00Z hardaker $
+ */
+/** \page MFD helper for ifTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ifTable.h"
+#include "ifTable_defs.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "ifTable_interface.h"
+
+#ifdef USING_IP_MIB_IPV4INTERFACETABLE_IPV4INTERFACETABLE_MODULE
+# include "ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.h"
+#endif
+#ifdef USING_IP_MIB_IPV6INTERFACETABLE_IPV6INTERFACETABLE_MODULE
+# include "ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.h"
+#endif
+#ifdef USING_IF_MIB_IFXTABLE_IFXTABLE_MODULE
+# include "if-mib/ifXTable/ifXTable.h"
+#endif
+
+oid ifTable_oid[] = { IFTABLE_OID };
+int ifTable_oid_size = OID_LENGTH(ifTable_oid);
+
+ifTable_registration ifTable_user_context;
+
+void initialize_table_ifTable(void);
+void shutdown_table_ifTable(void);
+
+static int
+_if_number_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests);
+
+
+/**
+ * Initializes the ifTable module
+ */
+void
+init_ifTable(void)
+{
+ static int ifTable_did_init = 0;
+
+ DEBUGMSGTL(("verbose:ifTable:init_ifTable", "called\n"));
+
+ /*
+ * TODO:300:o: Perform ifTable one-time module initialization.
+ */
+ if (++ifTable_did_init != 1) {
+ DEBUGMSGTL(("ifTable:init_ifTable", "ignoring duplicate call\n"));
+ return;
+ }
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("ifTable")) {
+
+#ifdef USING_IP_MIB_IPV4INTERFACETABLE_IPV4INTERFACETABLE_MODULE
+ if (should_init("ipv4InterfaceTable"))
+ initialize_table_ipv4InterfaceTable();
+#endif
+
+#ifdef USING_IP_MIB_IPV6INTERFACETABLE_IPV6INTERFACETABLE_MODULE
+ if (should_init("ipv6InterfaceTable"))
+ initialize_table_ipv6InterfaceTable();
+#endif
+
+ initialize_table_ifTable();
+
+#ifdef USING_IF_MIB_IFXTABLE_IFXTABLE_MODULE
+ if (should_init("ifXTable"))
+ initialize_table_ifXTable();
+#endif
+ }
+} /* init_ifTable */
+
+/**
+ * Shut-down the ifTable module (agent is exiting)
+ */
+void
+shutdown_ifTable(void)
+{
+ if (should_init("ifTable"))
+ shutdown_table_ifTable();
+
+}
+
+/**
+ * Initialize the table ifTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_ifTable(void)
+{
+ ifTable_registration *user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:ifTable:initialize_table_ifTable", "called\n"));
+
+ /*
+ * TODO:301:o: Perform ifTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize ifTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("ifTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _ifTable_initialize_interface(user_context, flags);
+
+ /*
+ * register scalar for ifNumber
+ */
+ {
+ oid reg_oid[] =
+ { IFTABLE_NUMBER };
+ netsnmp_handler_registration *myreg;
+
+ myreg =
+ netsnmp_create_handler_registration("if number",
+ _if_number_handler,
+ reg_oid,
+ OID_LENGTH(reg_oid),
+ HANDLER_CAN_RONLY);
+ netsnmp_register_scalar(myreg);
+ }
+
+} /* initialize_table_ifTable */
+
+/**
+ * Shutdown the table ifTable
+ */
+void
+shutdown_table_ifTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _ifTable_shutdown_interface(&ifTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+ifTable_rowreq_ctx_init(ifTable_rowreq_ctx * rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifTable_rowreq_ctx_init", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra ifTable rowreq initialization. (eg DEFVALS)
+ */
+ if (NULL == user_init_ctx)
+ rowreq_ctx->data.ifentry =
+ netsnmp_access_interface_entry_create(NULL, 0);
+ else
+ rowreq_ctx->data.ifentry =
+ (netsnmp_interface_entry *) user_init_ctx;
+
+ return MFD_SUCCESS;
+} /* ifTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ * @param rowreq_ctx
+ */
+void
+ifTable_rowreq_ctx_cleanup(ifTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifTable_rowreq_ctx_cleanup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra ifTable rowreq cleanup.
+ */
+ if (NULL != rowreq_ctx->data.ifentry) {
+ netsnmp_access_interface_entry_free(rowreq_ctx->data.ifentry);
+ rowreq_ctx->data.ifentry = NULL;
+ }
+} /* ifTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ * @param user_context
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+ifTable_pre_request(ifTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifTable_pre_request", "called\n"));
+
+ /*
+ * TODO:510:o: Perform ifTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* ifTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+ifTable_post_request(ifTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifTable_post_request", "called\n"));
+
+ /*
+ * TODO:511:o: Perform ifTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (ifTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ snmp_store(netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_APPTYPE));
+ }
+
+ ifTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* ifTable_post_request */
+
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IF-MIB::ifTable is subid 2 of interfaces.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.2.2, length: 8
+ */
+
+/*
+ * ---------------------------------------------------------------------
+ * * TODO:200:r: Implement ifTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param ifIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+ifTable_indexes_set_tbl_idx(ifTable_mib_index * tbl_idx, long ifIndex_val)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifTable_indexes_set_tbl_idx",
+ "called\n"));
+
+ /*
+ * ifIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+ */
+ tbl_idx->ifIndex = ifIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* ifTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ * @param ifIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+ifTable_indexes_set(ifTable_rowreq_ctx * rowreq_ctx, long ifIndex_val)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifTable_indexes_set", "called\n"));
+
+ if (MFD_SUCCESS !=
+ ifTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx, ifIndex_val))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if (0 != ifTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* ifTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifDescr
+ * ifDescr is subid 2 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.2
+ * Description:
+A textual string containing information about the
+ interface. This string should include the name of the
+ manufacturer, the product name and the version of the
+ interface hardware/software.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 0
+ * hint: 255a
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the ifDescr data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifDescr_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param ifDescr_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by ifDescr.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*ifDescr_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update ifDescr_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+ifDescr_get(ifTable_rowreq_ctx * rowreq_ctx, char **ifDescr_val_ptr_ptr,
+ size_t * ifDescr_val_ptr_len_ptr)
+{
+ char *tmp_descr = NULL;
+ u_char tmp_len = 0;
+
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert((NULL != ifDescr_val_ptr_ptr)
+ && (NULL != *ifDescr_val_ptr_ptr));
+ netsnmp_assert(NULL != ifDescr_val_ptr_len_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifDescr_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * if ifDescr is NULL, use the ifName
+ */
+ if (NULL == rowreq_ctx->data.ifDescr) {
+#ifdef USING_IF_MIB_IFXTABLE_IFXTABLE_MODULE
+ tmp_descr = rowreq_ctx->data.ifName;
+#else
+ tmp_descr = NULL;
+#endif
+ } else
+ tmp_descr = rowreq_ctx->data.ifDescr;
+
+ if (NULL != tmp_descr)
+ tmp_len = strlen(tmp_descr);
+ else
+ tmp_len = 0;
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifDescr data.
+ * copy (* ifDescr_val_ptr_ptr ) data and (* ifDescr_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for ifDescr data
+ */
+ if ((NULL == (*ifDescr_val_ptr_ptr)) ||
+ ((*ifDescr_val_ptr_len_ptr) < tmp_len)) {
+ /*
+ * allocate space for ifDescr data
+ */
+ (*ifDescr_val_ptr_ptr) =
+ malloc(tmp_len * sizeof(rowreq_ctx->data.ifDescr[0]));
+ if (NULL == (*ifDescr_val_ptr_ptr)) {
+ snmp_log(LOG_ERR, "could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (*ifDescr_val_ptr_len_ptr) =
+ tmp_len * sizeof(rowreq_ctx->data.ifDescr[0]);
+ memcpy((*ifDescr_val_ptr_ptr), tmp_descr, (*ifDescr_val_ptr_len_ptr));
+
+ return MFD_SUCCESS;
+} /* ifDescr_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifType
+ * ifType is subid 3 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.3
+ * Description:
+The type of interface. Additional values for ifType are
+ assigned by the Internet Assigned Numbers Authority (IANA),
+ through updating the syntax of the IANAifType textual
+ convention.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 149/256. Values: other(1), regular1822(2), hdh1822(3), ddnX25(4), rfc877x25(5), ethernetCsmacd(6), iso88023Csmacd(7), iso88024TokenBus(8), iso88025TokenRing(9), iso88026Man(10), starLan(11), proteon10Mbit(12), proteon80Mbit(13), hyperchannel(14), fddi(15), lapb(16), sdlc(17), ds1(18), e1(19), basicISDN(20), primaryISDN(21), propPointToPointSerial(22), ppp(23), softwareLoopback(24), eon(25), ethernet3Mbit(26), nsip(27), slip(28), ultra(29), ds3(30), sip(31), frameRelay(32), rs232(33), para(34), arcnet(35), arcnetPlus(36), atm(37), miox25(38), sonet(39), x25ple(40), iso88022llc(41), localTalk(42), smdsDxi(43), frameRelayService(44), v35(45), hssi(46), hippi(47), modem(48), aal5(49), sonetPath(50), sonetVT(51), smdsIcip(52), propVirtual(53), propMultiplexor(54), ieee80212(55), fibreChannel(56), hippiInterface(57), frameRelayInterconnect(58), aflane8023(59), aflane8025(60), cctEmul(61), fastEther(62), isdn(63), v11(64), v36(65), g703at64k(66), g703at2mb(67), qllc(68), fastEtherFX(69), channel(70), ieee80211(71), ibm370parChan(72), escon(73), dlsw(74), isdns(75), isdnu(76), lapd(77), ipSwitch(78), rsrb(79), atmLogical(80), ds0(81), ds0Bundle(82), bsc(83), async(84), cnr(85), iso88025Dtr(86), eplrs(87), arap(88), propCnls(89), hostPad(90), termPad(91), frameRelayMPI(92), x213(93), adsl(94), radsl(95), sdsl(96), vdsl(97), iso88025CRFPInt(98), myrinet(99), voiceEM(100), voiceFXO(101), voiceFXS(102), voiceEncap(103), voiceOverIp(104), atmDxi(105), atmFuni(106), atmIma(107), pppMultilinkBundle(108), ipOverCdlc(109), ipOverClaw(110), stackToStack(111), virtualIpAddress(112), mpc(113), ipOverAtm(114), iso88025Fiber(115), tdlc(116), gigabitEthernet(117), hdlc(118), lapf(119), v37(120), x25mlp(121), x25huntGroup(122), trasnpHdlc(123), interleave(124), fast(125), ip(126), docsCableMaclayer(127), docsCableDownstream(128), docsCableUpstream(129), a12MppSwitch(130), tunnel(131), coffee(132), ces(133), atmSubInterface(134), l2vlan(135), l3ipvlan(136), l3ipxvlan(137), digitalPowerline(138), mediaMailOverIp(139), dtm(140), dcn(141), ipForward(142), msdsl(143), ieee1394(144), if_gsn(145), dvbRccMacLayer(146), dvbRccDownstream(147), dvbRccUpstream(148), atmVirtual(149), mplsTunnel(150), srp(151), voiceOverAtm(152), voiceOverFrameRelay(153), idsl(154), compositeLink(155), ss7SigLink(156), propWirelessP2P(157), frForward(158), rfc1483(159), usb(160), ieee8023adLag(161), bgppolicyaccounting(162), frf16MfrBundle(163), h323Gatekeeper(164), h323Proxy(165), mpls(166), mfSigLink(167), hdsl2(168), shdsl(169), ds1FDL(170), pos(171), dvbAsiIn(172), dvbAsiOut(173), plc(174), nfas(175), tr008(176), gr303RDT(177), gr303IDT(178), isup(179), propDocsWirelessMaclayer(180), propDocsWirelessDownstream(181), propDocsWirelessUpstream(182), hiperlan2(183), propBWAp2Mp(184), sonetOverheadChannel(185), digitalWrapperOverheadChannel(186), aal2(187), radioMAC(188), atmRadio(189), imt(190), mvl(191), reachDSL(192), frDlciEndPt(193), atmVciEndPt(194), opticalChannel(195), opticalTransport(196), propAtm(197), voiceOverCable(198), infiniband(199), teLink(200), q2931(201), virtualTg(202), sipTg(203), sipSig(204), docsCableUpstreamChannel(205), econet(206), pon155(207), pon622(208), bridge(209), linegroup(210), voiceEMFGD(211), voiceFGDEANA(212), voiceDID(213), mpegTransport(214), sixToFour(215), gtp(216), pdnEtherLoop1(217), pdnEtherLoop2(218), opticalChannelGroup(219), homepna(220), gfp(221), ciscoISLvlan(222), actelisMetaLOOP(223), fcipLink(224)
+ *
+ * Its syntax is IANAifType (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ifType data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifType_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifType_get(ifTable_rowreq_ctx * rowreq_ctx, u_long * ifType_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifType_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifType_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifType data.
+ * copy (* ifType_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifType_val_ptr) = rowreq_ctx->data.ifType;
+
+ return MFD_SUCCESS;
+} /* ifType_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifMtu
+ * ifMtu is subid 4 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.4
+ * Description:
+The size of the largest packet which can be sent/received
+ on the interface, specified in octets. For interfaces that
+ are used for transmitting network datagrams, this is the
+ size of the largest network datagram that can be sent on the
+ interface.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the ifMtu data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifMtu_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifMtu_get(ifTable_rowreq_ctx * rowreq_ctx, long *ifMtu_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifMtu_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifMtu_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifMtu data.
+ * copy (* ifMtu_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifMtu_val_ptr) = rowreq_ctx->data.ifMtu;
+
+ return MFD_SUCCESS;
+} /* ifMtu_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifSpeed
+ * ifSpeed is subid 5 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.5
+ * Description:
+An estimate of the interface's current bandwidth in bits
+ per second. For interfaces which do not vary in bandwidth
+ or for those where no accurate estimation can be made, this
+ object should contain the nominal bandwidth. If the
+ bandwidth of the interface is greater than the maximum value
+ reportable by this object then this object should report its
+ maximum value (4,294,967,295) and ifHighSpeed must be used
+ to report the interace's speed. For a sub-layer which has
+ no concept of bandwidth, this object should be zero.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is GAUGE (based on perltype GAUGE)
+ * The net-snmp type is ASN_GAUGE. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifSpeed data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifSpeed_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifSpeed_get(ifTable_rowreq_ctx * rowreq_ctx, u_long * ifSpeed_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifSpeed_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifSpeed_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifSpeed data.
+ * copy (* ifSpeed_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifSpeed_val_ptr) = rowreq_ctx->data.ifSpeed;
+
+ return MFD_SUCCESS;
+} /* ifSpeed_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifPhysAddress
+ * ifPhysAddress is subid 6 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.6
+ * Description:
+The interface's address at its protocol sub-layer. For
+ example, for an 802.x interface, this object normally
+ contains a MAC address. The interface's media-specific MIB
+ must define the bit and byte ordering and the format of the
+ value of this object. For interfaces which do not have such
+ an address (e.g., a serial line), this object should contain
+ an octet string of zero length.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 1
+ * settable 0
+ * hint: 1x:
+ *
+ *
+ * Its syntax is PhysAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the ifPhysAddress data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifPhysAddress_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param ifPhysAddress_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by ifPhysAddress.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*ifPhysAddress_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update ifPhysAddress_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+ifPhysAddress_get(ifTable_rowreq_ctx * rowreq_ctx,
+ char **ifPhysAddress_val_ptr_ptr,
+ size_t * ifPhysAddress_val_ptr_len_ptr)
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert((NULL != ifPhysAddress_val_ptr_ptr)
+ && (NULL != *ifPhysAddress_val_ptr_ptr));
+ netsnmp_assert(NULL != ifPhysAddress_val_ptr_len_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifPhysAddress_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if ((rowreq_ctx->data.ifPhysAddress[0] == 0) &&
+ (rowreq_ctx->data.ifPhysAddress[1] == 0) &&
+ (rowreq_ctx->data.ifPhysAddress[2] == 0) &&
+ (rowreq_ctx->data.ifPhysAddress[3] == 0) &&
+ (rowreq_ctx->data.ifPhysAddress[4] == 0) &&
+ (rowreq_ctx->data.ifPhysAddress[5] == 0)) {
+ /*
+ * all 0s = empty string
+ */
+ (*ifPhysAddress_val_ptr_len_ptr) = 0;
+ return MFD_SUCCESS;
+ }
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifPhysAddress data.
+ * copy (* ifPhysAddress_val_ptr_ptr ) data and (* ifPhysAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for ifPhysAddress data
+ */
+ if ((NULL == (*ifPhysAddress_val_ptr_ptr)) ||
+ ((*ifPhysAddress_val_ptr_len_ptr) <
+ (rowreq_ctx->data.ifPhysAddress_len *
+ sizeof(rowreq_ctx->data.ifPhysAddress[0])))) {
+ /*
+ * allocate space for ifPhysAddress data
+ */
+ (*ifPhysAddress_val_ptr_ptr) =
+ malloc(rowreq_ctx->data.ifPhysAddress_len *
+ sizeof(rowreq_ctx->data.ifPhysAddress[0]));
+ if (NULL == (*ifPhysAddress_val_ptr_ptr)) {
+ snmp_log(LOG_ERR, "could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (*ifPhysAddress_val_ptr_len_ptr) =
+ rowreq_ctx->data.ifPhysAddress_len *
+ sizeof(rowreq_ctx->data.ifPhysAddress[0]);
+ memcpy((*ifPhysAddress_val_ptr_ptr), rowreq_ctx->data.ifPhysAddress,
+ (*ifPhysAddress_val_ptr_len_ptr));
+
+ return MFD_SUCCESS;
+} /* ifPhysAddress_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifAdminStatus
+ * ifAdminStatus is subid 7 of ifEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.2.2.1.7
+ * Description:
+The desired state of the interface. The testing(3) state
+ indicates that no operational packets can be passed. When a
+ managed system initializes, all interfaces start with
+ ifAdminStatus in the down(2) state. As a result of either
+ explicit management action or per configuration information
+ retained by the managed system, ifAdminStatus is then
+ changed to either the up(1) or testing(3) states (or remains
+ in the down(2) state).
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: up(1), down(2), testing(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ifAdminStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifAdminStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifAdminStatus_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifAdminStatus_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifAdminStatus_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifAdminStatus_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifAdminStatus data.
+ * copy (* ifAdminStatus_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifAdminStatus_val_ptr) = rowreq_ctx->data.ifAdminStatus;
+
+ return MFD_SUCCESS;
+} /* ifAdminStatus_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifOperStatus
+ * ifOperStatus is subid 8 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.8
+ * Description:
+The current operational state of the interface. The
+ testing(3) state indicates that no operational packets can
+ be passed. If ifAdminStatus is down(2) then ifOperStatus
+ should be down(2). If ifAdminStatus is changed to up(1)
+ then ifOperStatus should change to up(1) if the interface is
+ ready to transmit and receive network traffic; it should
+ change to dormant(5) if the interface is waiting for
+ external actions (such as a serial line waiting for an
+ incoming connection); it should remain in the down(2) state
+ if and only if there is a fault that prevents it from going
+ to the up(1) state; it should remain in the notPresent(6)
+ state if the interface has missing (typically, hardware)
+ components.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 5/8. Values: up(1), down(2), testing(3), unknown(4), dormant(5), notPresent(6), lowerLayerDown(7)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ifOperStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifOperStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifOperStatus_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOperStatus_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifOperStatus_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifOperStatus_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifOperStatus data.
+ * copy (* ifOperStatus_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifOperStatus_val_ptr) = rowreq_ctx->data.ifOperStatus;
+
+ return MFD_SUCCESS;
+} /* ifOperStatus_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifLastChange
+ * ifLastChange is subid 9 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.9
+ * Description:
+The value of sysUpTime at the time the interface entered
+ its current operational state. If the current state was
+ entered prior to the last re-initialization of the local
+ network management subsystem, then this object contains a
+ zero value.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is TICKS (based on perltype TICKS)
+ * The net-snmp type is ASN_TIMETICKS. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifLastChange data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifLastChange_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifLastChange_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifLastChange_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifLastChange_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifLastChange_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifLastChange data.
+ * copy (* ifLastChange_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifLastChange_val_ptr) = rowreq_ctx->data.ifLastChange;
+
+ return MFD_SUCCESS;
+} /* ifLastChange_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifInOctets
+ * ifInOctets is subid 10 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.10
+ * Description:
+The total number of octets received on the interface,
+ including framing characters.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifInOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifInOctets_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifInOctets_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifInOctets_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifInOctets_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifInOctets data.
+ * copy (* ifInOctets_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifInOctets_val_ptr) = rowreq_ctx->data.ifInOctets;
+
+ return MFD_SUCCESS;
+} /* ifInOctets_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifInUcastPkts
+ * ifInUcastPkts is subid 11 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.11
+ * Description:
+The number of packets, delivered by this sub-layer to a
+ higher (sub-)layer, which were not addressed to a multicast
+ or broadcast address at this sub-layer.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifInUcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifInUcastPkts_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifInUcastPkts_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInUcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifInUcastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifInUcastPkts_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifInUcastPkts data.
+ * copy (* ifInUcastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifInUcastPkts_val_ptr) = rowreq_ctx->data.ifInUcastPkts;
+
+ return MFD_SUCCESS;
+} /* ifInUcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifInNUcastPkts
+ * ifInNUcastPkts is subid 12 of ifEntry.
+ * Its status is Deprecated, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.12
+ * Description:
+The number of packets, delivered by this sub-layer to a
+ higher (sub-)layer, which were addressed to a multicast or
+ broadcast address at this sub-layer.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+
+ This object is deprecated in favour of ifInMulticastPkts and
+ ifInBroadcastPkts.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifInNUcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifInNUcastPkts_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifInNUcastPkts_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInNUcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifInNUcastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifInNUcastPkts_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifInNUcastPkts data.
+ * copy (* ifInNUcastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifInNUcastPkts_val_ptr) = rowreq_ctx->data.ifInNUcastPkts;
+
+ return MFD_SUCCESS;
+} /* ifInNUcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifInDiscards
+ * ifInDiscards is subid 13 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.13
+ * Description:
+The number of inbound packets which were chosen to be
+ discarded even though no errors had been detected to prevent
+
+ their being deliverable to a higher-layer protocol. One
+ possible reason for discarding such a packet could be to
+ free up buffer space.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifInDiscards data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifInDiscards_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifInDiscards_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInDiscards_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifInDiscards_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifInDiscards_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifInDiscards data.
+ * copy (* ifInDiscards_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifInDiscards_val_ptr) = rowreq_ctx->data.ifInDiscards;
+
+ return MFD_SUCCESS;
+} /* ifInDiscards_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifInErrors
+ * ifInErrors is subid 14 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.14
+ * Description:
+For packet-oriented interfaces, the number of inbound
+ packets that contained errors preventing them from being
+ deliverable to a higher-layer protocol. For character-
+ oriented or fixed-length interfaces, the number of inbound
+ transmission units that contained errors preventing them
+ from being deliverable to a higher-layer protocol.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifInErrors data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifInErrors_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifInErrors_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInErrors_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifInErrors_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifInErrors_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifInErrors data.
+ * copy (* ifInErrors_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifInErrors_val_ptr) = rowreq_ctx->data.ifInErrors;
+
+ return MFD_SUCCESS;
+} /* ifInErrors_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifInUnknownProtos
+ * ifInUnknownProtos is subid 15 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.15
+ * Description:
+For packet-oriented interfaces, the number of packets
+ received via the interface which were discarded because of
+ an unknown or unsupported protocol. For character-oriented
+ or fixed-length interfaces that support protocol
+ multiplexing the number of transmission units received via
+ the interface which were discarded because of an unknown or
+ unsupported protocol. For any interface that does not
+ support protocol multiplexing, this counter will always be
+ 0.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifInUnknownProtos data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifInUnknownProtos_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifInUnknownProtos_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInUnknownProtos_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifInUnknownProtos_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifInUnknownProtos_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifInUnknownProtos data.
+ * copy (* ifInUnknownProtos_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifInUnknownProtos_val_ptr) = rowreq_ctx->data.ifInUnknownProtos;
+
+ return MFD_SUCCESS;
+} /* ifInUnknownProtos_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifOutOctets
+ * ifOutOctets is subid 16 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.16
+ * Description:
+The total number of octets transmitted out of the
+ interface, including framing characters.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifOutOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifOutOctets_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifOutOctets_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifOutOctets_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifOutOctets_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifOutOctets data.
+ * copy (* ifOutOctets_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifOutOctets_val_ptr) = rowreq_ctx->data.ifOutOctets;
+
+ return MFD_SUCCESS;
+} /* ifOutOctets_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifOutUcastPkts
+ * ifOutUcastPkts is subid 17 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.17
+ * Description:
+The total number of packets that higher-level protocols
+ requested be transmitted, and which were not addressed to a
+ multicast or broadcast address at this sub-layer, including
+ those that were discarded or not sent.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifOutUcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifOutUcastPkts_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifOutUcastPkts_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutUcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifOutUcastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifOutUcastPkts_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifOutUcastPkts data.
+ * copy (* ifOutUcastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifOutUcastPkts_val_ptr) = rowreq_ctx->data.ifOutUcastPkts;
+
+ return MFD_SUCCESS;
+} /* ifOutUcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifOutNUcastPkts
+ * ifOutNUcastPkts is subid 18 of ifEntry.
+ * Its status is Deprecated, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.18
+ * Description:
+The total number of packets that higher-level protocols
+ requested be transmitted, and which were addressed to a
+ multicast or broadcast address at this sub-layer, including
+ those that were discarded or not sent.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+
+ This object is deprecated in favour of ifOutMulticastPkts
+ and ifOutBroadcastPkts.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifOutNUcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifOutNUcastPkts_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifOutNUcastPkts_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutNUcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifOutNUcastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifOutNUcastPkts_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifOutNUcastPkts data.
+ * copy (* ifOutNUcastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifOutNUcastPkts_val_ptr) = rowreq_ctx->data.ifOutNUcastPkts;
+
+ return MFD_SUCCESS;
+} /* ifOutNUcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifOutDiscards
+ * ifOutDiscards is subid 19 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.19
+ * Description:
+The number of outbound packets which were chosen to be
+ discarded even though no errors had been detected to prevent
+ their being transmitted. One possible reason for discarding
+ such a packet could be to free up buffer space.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifOutDiscards data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifOutDiscards_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifOutDiscards_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutDiscards_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifOutDiscards_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifOutDiscards_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifOutDiscards data.
+ * copy (* ifOutDiscards_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifOutDiscards_val_ptr) = rowreq_ctx->data.ifOutDiscards;
+
+ return MFD_SUCCESS;
+} /* ifOutDiscards_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifOutErrors
+ * ifOutErrors is subid 20 of ifEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.20
+ * Description:
+For packet-oriented interfaces, the number of outbound
+ packets that could not be transmitted because of errors.
+ For character-oriented or fixed-length interfaces, the
+ number of outbound transmission units that could not be
+ transmitted because of errors.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifOutErrors data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifOutErrors_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifOutErrors_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutErrors_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifOutErrors_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifOutErrors_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifOutErrors data.
+ * copy (* ifOutErrors_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifOutErrors_val_ptr) = rowreq_ctx->data.ifOutErrors;
+
+ return MFD_SUCCESS;
+} /* ifOutErrors_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifOutQLen
+ * ifOutQLen is subid 21 of ifEntry.
+ * Its status is Deprecated, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.21
+ * Description:
+The length of the output packet queue (in packets).
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is GAUGE (based on perltype GAUGE)
+ * The net-snmp type is ASN_GAUGE. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifOutQLen data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifOutQLen_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifOutQLen_get(ifTable_rowreq_ctx * rowreq_ctx, u_long * ifOutQLen_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifOutQLen_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifOutQLen_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifOutQLen data.
+ * copy (* ifOutQLen_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifOutQLen_val_ptr) = rowreq_ctx->data.ifOutQLen;
+
+ return MFD_SUCCESS;
+} /* ifOutQLen_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifSpecific
+ * ifSpecific is subid 22 of ifEntry.
+ * Its status is Deprecated, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.2.2.1.22
+ * Description:
+A reference to MIB definitions specific to the particular
+ media being used to realize the interface. It is
+
+ recommended that this value point to an instance of a MIB
+ object in the media-specific MIB, i.e., that this object
+ have the semantics associated with the InstancePointer
+ textual convention defined in RFC 2579. In fact, it is
+ recommended that the media-specific MIB specify what value
+ ifSpecific should/can take for values of ifType. If no MIB
+ definitions specific to the particular media are available,
+ the value should be set to the OBJECT IDENTIFIER { 0 0 }.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is OBJECTID (based on perltype OBJECTID)
+ * The net-snmp type is ASN_OBJECT_ID. The C type decl is oid (oid)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the ifSpecific data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifSpecific_val_ptr_ptr
+ * Pointer to storage for a oid variable
+ * @param ifSpecific_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by ifSpecific.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*ifSpecific_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update ifSpecific_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+ifSpecific_get(ifTable_rowreq_ctx * rowreq_ctx,
+ oid ** ifSpecific_val_ptr_ptr,
+ size_t * ifSpecific_val_ptr_len_ptr)
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert((NULL != ifSpecific_val_ptr_ptr)
+ && (NULL != *ifSpecific_val_ptr_ptr));
+ netsnmp_assert(NULL != ifSpecific_val_ptr_len_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifSpecific_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifSpecific data.
+ * copy (* ifSpecific_val_ptr_ptr ) data and (* ifSpecific_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+#ifdef IFTABLE_HAS_IFSPECIFIC
+ /*
+ * make sure there is enough space for ifSpecific data
+ */
+ if ((NULL == (*ifSpecific_val_ptr_ptr)) ||
+ ((*ifSpecific_val_ptr_len_ptr) <
+ (rowreq_ctx->data.ifSpecific_len *
+ sizeof(rowreq_ctx->data.ifSpecific[0])))) {
+ /*
+ * allocate space for ifSpecific data
+ */
+ (*ifSpecific_val_ptr_ptr) =
+ malloc(rowreq_ctx->data.ifSpecific_len *
+ sizeof(rowreq_ctx->data.ifSpecific[0]));
+ if (NULL == (*ifSpecific_val_ptr_ptr)) {
+ snmp_log(LOG_ERR, "could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (*ifSpecific_val_ptr_len_ptr) =
+ rowreq_ctx->data.ifSpecific_len *
+ sizeof(rowreq_ctx->data.ifSpecific[0]);
+ memcpy((*ifSpecific_val_ptr_ptr), rowreq_ctx->data.ifSpecific,
+ (*ifSpecific_val_ptr_len_ptr));
+#else
+ /*
+ * hard coded
+ */
+ netsnmp_assert((*ifSpecific_val_ptr_len_ptr) > nullOidLen);
+ (*ifSpecific_val_ptr_len_ptr) = nullOidLen;
+ memcpy(*ifSpecific_val_ptr_ptr, &nullOid, nullOidLen);
+#endif
+
+ return MFD_SUCCESS;
+} /* ifSpecific_get */
+
+
+
+/** @} */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IF-MIB::ifTable is subid 2 of interfaces.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.2.2, length: 8
+ */
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * Undo storage is in (* ifSpecific_val_ptr_ptr )*
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * ifTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * ifTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * Undo storage is in (* ifSpecific_val_ptr_ptr )*
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ifTable_undo_setup(ifTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ifTable:ifTable_undo_setup", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> Setup ifTable undo.
+ * set up ifTable undo information, in preparation for a set.
+ * Undo storage is in (* ifSpecific_val_ptr_ptr )*
+ */
+
+ return rc;
+} /* ifTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ifTable_undo(ifTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ifTable:ifTable_undo", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> ifTable undo.
+ * ifTable undo information, in response to a failed set.
+ * Undo storage is in (* ifSpecific_val_ptr_ptr )*
+ */
+
+ return rc;
+} /* ifTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ifTable_undo_cleanup(ifTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ifTable:ifTable_undo_cleanup", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:452:M: |-> Cleanup ifTable undo.
+ * Undo storage is in (* ifSpecific_val_ptr_ptr )*
+ */
+
+ return rc;
+} /* ifTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ifTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ifTable_commit(ifTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL(("verbose:ifTable:ifTable_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit ifTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_IFADMINSTATUS_FLAG) {
+ save_flags &= ~COLUMN_IFADMINSTATUS_FLAG; /* clear ifAdminStatus */
+ /*
+ * TODO:482:o: |-> commit column ifAdminStatus.
+ */
+ rc = netsnmp_access_interface_entry_set_admin_status(rowreq_ctx->
+ data.ifentry,
+ rowreq_ctx->
+ data.
+ ifAdminStatus);
+ if (0 != rc) {
+ snmp_log(LOG_ERR,
+ "ifTable column ifAdminStatus commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ifAdminStatus
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IFADMINSTATUS_FLAG;
+ }
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* ifTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ifTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ifTable_undo_commit(ifTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ifTable:ifTable_undo_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:485:M: |-> Undo ifTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+ /*
+ * no undo cleanup, undo entry simply freed
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* ifTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement ifTable node value checks.
+ * TODO:450:M: Implement ifTable undo functions.
+ * TODO:460:M: Implement ifTable set functions.
+ * TODO:480:M: Implement ifTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * IF-MIB::ifEntry.ifAdminStatus
+ * ifAdminStatus is subid 7 of ifEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.2.2.1.7
+ * Description:
+The desired state of the interface. The testing(3) state
+ indicates that no operational packets can be passed. When a
+ managed system initializes, all interfaces start with
+ ifAdminStatus in the down(2) state. As a result of either
+ explicit management action or per configuration information
+ retained by the managed system, ifAdminStatus is then
+ changed to either the up(1) or testing(3) states (or remains
+ in the down(2) state).
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: up(1), down(2), testing(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifAdminStatus_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ifTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of up(1), down(2), testing(3)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ifAdminStatus_check_value(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifAdminStatus_val)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifAdminStatus_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ifAdminStatus value.
+ */
+ /*
+ * we don't support test
+ */
+ if (ifAdminStatus_val == IFADMINSTATUS_TESTING)
+ return MFD_ERROR;
+
+ return MFD_SUCCESS; /* ifAdminStatus value not illegal */
+} /* ifAdminStatus_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ifTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ifAdminStatus_undo_setup(ifTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifAdminStatus_undo_setup", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ifAdminStatus undo.
+ */
+ /*
+ * copy ifAdminStatus data
+ * set rowreq_ctx->undo->ifAdminStatus from rowreq_ctx->data.ifAdminStatus
+ */
+ rowreq_ctx->undo->ifAdminStatus = rowreq_ctx->data.ifAdminStatus;
+
+ return MFD_SUCCESS;
+} /* ifAdminStatus_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ifAdminStatus_val
+ * A long containing the new value.
+ */
+int
+ifAdminStatus_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifAdminStatus_val)
+{
+
+ DEBUGMSGTL(("verbose:ifTable:ifAdminStatus_set", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ifAdminStatus value.
+ * set ifAdminStatus value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.ifAdminStatus = ifAdminStatus_val;
+
+ return MFD_SUCCESS;
+} /* ifAdminStatus_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ifAdminStatus_undo(ifTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ifTable:ifAdminStatus_undo", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ifAdminStatus undo.
+ */
+ /*
+ * copy ifAdminStatus data
+ * set rowreq_ctx->data.ifAdminStatus from rowreq_ctx->undo->ifAdminStatus
+ */
+ rowreq_ctx->data.ifAdminStatus = rowreq_ctx->undo->ifAdminStatus;
+
+
+ return MFD_SUCCESS;
+} /* ifAdminStatus_undo */
+
+/**
+ * check dependencies
+ *
+ * This is useful for for tables which have dependencies between columns
+ * (or rows, or tables). For example, two columns allocating a percentage
+ * of something add up 100%.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ifTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ *
+ * @retval MFD_SUCCESS all the changes to the row are legal
+ * @retval MFD_ERROR one or more changes are not legal
+ *
+ * (see README-table-ifTable if you don't have dependencies)
+ */
+int
+ifTable_check_dependencies(ifTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("internal:ifTable:ifTable_check_dependencies",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:470:o: Check ifTable row dependencies.
+ * check that all new value are legal and consistent with each other
+ */
+ return rc;
+} /* ifTable_check_dependencies */
+
+
+static int
+_if_number_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ if (MODE_GET == reqinfo->mode) {
+ int val = ifTable_container_size();
+ snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+ (u_char *) &val, sizeof(val));
+ } else
+ netsnmp_assert("bad mode in RO handler");
+
+ if (handler->next && handler->next->access_method)
+ return netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+
+ return SNMP_ERR_NOERROR;
+}
+
+/** @} */
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable.h
new file mode 100644
index 0000000000..6b73c40e59
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable.h
@@ -0,0 +1,683 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ifTable.h 15461 2006-10-19 20:38:00Z hardaker $
+ */
+#ifndef IFTABLE_H
+#define IFTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @ingroup agent
+ * @defgroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+#include <net-snmp/data_access/interface.h>
+
+ /*
+ * other required module components
+ */
+ /* *INDENT-OFF* */
+config_require(if-mib/data_access/interface)
+config_require(if-mib/ifTable/ifTable_interface)
+config_require(if-mib/ifTable/ifTable_data_access)
+/*
+ * conflicts with mibII/interfaces
+ */
+config_exclude(mibII/interfaces)
+ /* *INDENT-ON* */
+
+ /*
+ * OID, column number and enum definions for ifTable
+ */
+#include "ifTable_constants.h"
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+ void init_ifTable(void);
+ void shutdown_ifTable(void);
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IF-MIB::ifTable is subid 2 of interfaces.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.2.2, length: 8
+ */
+ /*
+ *********************************************************************
+ * 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 ifTable registration context.
+ */
+ typedef netsnmp_data_list ifTable_registration;
+
+/**********************************************************************/
+ /*
+ * TODO:110:r: |-> Review ifTable data context structure.
+ * This structure is used to represent the data for ifTable.
+ */
+ /*
+ * This structure contains storage for all the columns defined in the
+ * ifTable.
+ */
+ typedef struct ifTable_data_s {
+
+ /*
+ * ifDescr(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+
+ /*
+ * ifType(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+
+ /*
+ * ifMtu(4)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifSpeed(5)/GAUGE/ASN_GAUGE/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifPhysAddress(6)/PhysAddress/ASN_OCTET_STR/char(char)//L/A/w/e/r/d/h
+ */
+
+ /*
+ * ifAdminStatus(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+
+ /*
+ * ifOperStatus(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+
+ /*
+ * ifLastChange(9)/TICKS/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifInOctets(10)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifInUcastPkts(11)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifInNUcastPkts(12)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifInDiscards(13)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifInErrors(14)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifInUnknownProtos(15)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifOutOctets(16)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifOutUcastPkts(17)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifOutNUcastPkts(18)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifOutDiscards(19)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifOutErrors(20)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifOutQLen(21)/GAUGE/ASN_GAUGE/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifSpecific(22)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/w/e/r/d/h
+ */
+#ifdef IFTABLE_HAS_IFSPECIFIC
+ oid ifSpecific[128];
+ size_t ifSpecific_len; /* # of oid elements, not bytes */
+#endif
+
+#ifdef USING_IF_MIB_IFXTABLE_IFXTABLE_MODULE
+ /*
+ * ifXTable stuff
+ */
+ /*
+ * ifName(1)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+ */
+
+ /*
+ * ifInMulticastPkts(2)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifInBroadcastPkts(3)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifOutMulticastPkts(4)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifOutBroadcastPkts(5)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifHCInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifHCInUcastPkts(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifHCInMulticastPkts(8)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifHCInBroadcastPkts(9)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifHCOutOctets(10)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifHCOutUcastPkts(11)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifHCOutMulticastPkts(12)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifHCOutBroadcastPkts(13)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifLinkUpDownTrapEnable(14)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long ifLinkUpDownTrapEnable;
+
+ /*
+ * ifHighSpeed(15)/GAUGE/ASN_GAUGE/u_long(u_long)//l/A/w/e/r/d/h
+ */
+
+ /*
+ * ifPromiscuousMode(16)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+
+ /*
+ * ifConnectorPresent(17)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+
+ /*
+ * ifAlias(18)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ char ifAlias[64];
+ size_t ifAlias_len; /* # of char elements, not bytes */
+
+ /*
+ * ifCounterDiscontinuityTime(19)/TimeStamp/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ u_long ifCounterDiscontinuityTime;
+#endif /* USING_IF_MIB_IFXTABLE_IFXTABLE_MODULE */
+
+
+ /*
+ * some data kept externally
+ */
+ netsnmp_interface_entry *ifentry;
+ } ifTable_data;
+
+
+ /*
+ *********************************************************************
+ * TODO:115:o: |-> Review ifTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+ typedef ifTable_data ifTable_undo_data;
+
+ /*
+ * TODO:120:r: |-> Review ifTable mib index.
+ * This structure is used to represent the index for ifTable.
+ */
+ typedef struct ifTable_mib_index_s {
+
+ /*
+ * ifIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+ */
+ long ifIndex;
+
+
+ } ifTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review ifTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+ */
+#define MAX_ifTable_IDX_LEN 1
+
+
+ /*
+ *********************************************************************
+ * TODO:130:o: |-> Review ifTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * ifTable_rowreq_ctx pointer.
+ */
+ typedef struct ifTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_ifTable_IDX_LEN];
+
+ ifTable_mib_index tbl_idx;
+
+ ifTable_data data;
+ ifTable_undo_data *undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 ifTable rowreq context.
+ */
+ char known_missing;
+ u_char undo_ref_count;
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *ifTable_data_list;
+
+ } ifTable_rowreq_ctx;
+
+ typedef struct ifTable_ref_rowreq_ctx_s {
+ ifTable_rowreq_ctx *rowreq_ctx;
+ } ifTable_ref_rowreq_ctx;
+
+ /*
+ *********************************************************************
+ * function prototypes
+ */
+ int ifTable_pre_request(ifTable_registration *
+ user_context);
+ int ifTable_post_request(ifTable_registration *
+ user_context, int rc);
+
+ int ifTable_rowreq_ctx_init(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ void *user_init_ctx);
+ void ifTable_rowreq_ctx_cleanup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifTable_check_dependencies(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifTable_commit(ifTable_rowreq_ctx * rowreq_ctx);
+
+ ifTable_rowreq_ctx *ifTable_row_find_by_mib_index(ifTable_mib_index *
+ mib_idx);
+
+ extern oid ifTable_oid[];
+ extern int ifTable_oid_size;
+
+
+#include "ifTable_interface.h"
+#include "ifTable_data_access.h"
+ /*
+ *********************************************************************
+ * GET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IF-MIB::ifTable is subid 2 of interfaces.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.2.2, length: 8
+ */
+ /*
+ * indexes
+ */
+
+ int ifDescr_get(ifTable_rowreq_ctx * rowreq_ctx,
+ char **ifDescr_val_ptr_ptr,
+ size_t * ifDescr_val_ptr_len_ptr);
+ int ifType_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifType_val_ptr);
+ int ifMtu_get(ifTable_rowreq_ctx * rowreq_ctx,
+ long *ifMtu_val_ptr);
+ int ifSpeed_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifSpeed_val_ptr);
+ int ifPhysAddress_get(ifTable_rowreq_ctx * rowreq_ctx,
+ char **ifPhysAddress_val_ptr_ptr,
+ size_t
+ * ifPhysAddress_val_ptr_len_ptr);
+ int ifAdminStatus_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifAdminStatus_val_ptr);
+ int ifOperStatus_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOperStatus_val_ptr);
+ int ifLastChange_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifLastChange_val_ptr);
+ int ifInOctets_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInOctets_val_ptr);
+ int ifInUcastPkts_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInUcastPkts_val_ptr);
+ int ifInNUcastPkts_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInNUcastPkts_val_ptr);
+ int ifInDiscards_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInDiscards_val_ptr);
+ int ifInErrors_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInErrors_val_ptr);
+ int ifInUnknownProtos_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long *
+ ifInUnknownProtos_val_ptr);
+ int ifOutOctets_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutOctets_val_ptr);
+ int ifOutUcastPkts_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutUcastPkts_val_ptr);
+ int ifOutNUcastPkts_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutNUcastPkts_val_ptr);
+ int ifOutDiscards_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutDiscards_val_ptr);
+ int ifOutErrors_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutErrors_val_ptr);
+ int ifOutQLen_get(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutQLen_val_ptr);
+ int ifSpecific_get(ifTable_rowreq_ctx * rowreq_ctx,
+ oid ** ifSpecific_val_ptr_ptr,
+ size_t * ifSpecific_val_ptr_len_ptr);
+
+
+ int ifTable_indexes_set_tbl_idx(ifTable_mib_index *
+ tbl_idx, long ifIndex_val);
+ int ifTable_indexes_set(ifTable_rowreq_ctx * rowreq_ctx,
+ long ifIndex_val);
+
+
+
+ /*
+ *********************************************************************
+ * SET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IF-MIB::ifTable is subid 2 of interfaces.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.2.2, length: 8
+ */
+
+
+ int ifTable_undo_setup(ifTable_rowreq_ctx * rowreq_ctx);
+ int ifTable_undo_cleanup(ifTable_rowreq_ctx * rowreq_ctx);
+ int ifTable_undo(ifTable_rowreq_ctx * rowreq_ctx);
+ int ifTable_commit(ifTable_rowreq_ctx * rowreq_ctx);
+ int ifTable_undo_commit(ifTable_rowreq_ctx * rowreq_ctx);
+
+
+ int ifDescr_check_value(ifTable_rowreq_ctx * rowreq_ctx,
+ char *ifDescr_val_ptr,
+ size_t ifDescr_val_ptr_len);
+ int ifDescr_undo_setup(ifTable_rowreq_ctx * rowreq_ctx);
+ int ifDescr_set(ifTable_rowreq_ctx * rowreq_ctx,
+ char *ifDescr_val_ptr,
+ size_t ifDescr_val_ptr_len);
+ int ifDescr_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifType_check_value(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifType_val);
+ int ifType_undo_setup(ifTable_rowreq_ctx * rowreq_ctx);
+ int ifType_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifType_val);
+ int ifType_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifMtu_check_value(ifTable_rowreq_ctx * rowreq_ctx,
+ long ifMtu_val);
+ int ifMtu_undo_setup(ifTable_rowreq_ctx * rowreq_ctx);
+ int ifMtu_set(ifTable_rowreq_ctx * rowreq_ctx,
+ long ifMtu_val);
+ int ifMtu_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifSpeed_check_value(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifSpeed_val);
+ int ifSpeed_undo_setup(ifTable_rowreq_ctx * rowreq_ctx);
+ int ifSpeed_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifSpeed_val);
+ int ifSpeed_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifPhysAddress_check_value(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ char *ifPhysAddress_val_ptr,
+ size_t
+ ifPhysAddress_val_ptr_len);
+ int ifPhysAddress_undo_setup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifPhysAddress_set(ifTable_rowreq_ctx * rowreq_ctx,
+ char *ifPhysAddress_val_ptr,
+ size_t ifPhysAddress_val_ptr_len);
+ int ifPhysAddress_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifAdminStatus_check_value(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifAdminStatus_val);
+ int ifAdminStatus_undo_setup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifAdminStatus_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifAdminStatus_val);
+ int ifAdminStatus_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifOperStatus_check_value(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifOperStatus_val);
+ int ifOperStatus_undo_setup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifOperStatus_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifOperStatus_val);
+ int ifOperStatus_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifLastChange_check_value(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifLastChange_val);
+ int ifLastChange_undo_setup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifLastChange_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifLastChange_val);
+ int ifLastChange_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifInOctets_check_value(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifInOctets_val);
+ int ifInOctets_undo_setup(ifTable_rowreq_ctx * rowreq_ctx);
+ int ifInOctets_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifInOctets_val);
+ int ifInOctets_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifInUcastPkts_check_value(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifInUcastPkts_val);
+ int ifInUcastPkts_undo_setup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifInUcastPkts_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifInUcastPkts_val);
+ int ifInUcastPkts_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifInNUcastPkts_check_value(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifInNUcastPkts_val);
+ int ifInNUcastPkts_undo_setup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifInNUcastPkts_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifInNUcastPkts_val);
+ int ifInNUcastPkts_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifInDiscards_check_value(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifInDiscards_val);
+ int ifInDiscards_undo_setup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifInDiscards_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifInDiscards_val);
+ int ifInDiscards_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifInErrors_check_value(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifInErrors_val);
+ int ifInErrors_undo_setup(ifTable_rowreq_ctx * rowreq_ctx);
+ int ifInErrors_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifInErrors_val);
+ int ifInErrors_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifInUnknownProtos_check_value(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ifInUnknownProtos_val);
+ int ifInUnknownProtos_undo_setup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifInUnknownProtos_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifInUnknownProtos_val);
+ int ifInUnknownProtos_undo(ifTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifOutOctets_check_value(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifOutOctets_val);
+ int ifOutOctets_undo_setup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifOutOctets_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifOutOctets_val);
+ int ifOutOctets_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifOutUcastPkts_check_value(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifOutUcastPkts_val);
+ int ifOutUcastPkts_undo_setup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifOutUcastPkts_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifOutUcastPkts_val);
+ int ifOutUcastPkts_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifOutNUcastPkts_check_value(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ifOutNUcastPkts_val);
+ int ifOutNUcastPkts_undo_setup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifOutNUcastPkts_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifOutNUcastPkts_val);
+ int ifOutNUcastPkts_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifOutDiscards_check_value(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifOutDiscards_val);
+ int ifOutDiscards_undo_setup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifOutDiscards_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifOutDiscards_val);
+ int ifOutDiscards_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifOutErrors_check_value(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifOutErrors_val);
+ int ifOutErrors_undo_setup(ifTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifOutErrors_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifOutErrors_val);
+ int ifOutErrors_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifOutQLen_check_value(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifOutQLen_val);
+ int ifOutQLen_undo_setup(ifTable_rowreq_ctx * rowreq_ctx);
+ int ifOutQLen_set(ifTable_rowreq_ctx * rowreq_ctx,
+ u_long ifOutQLen_val);
+ int ifOutQLen_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+ int ifSpecific_check_value(ifTable_rowreq_ctx * rowreq_ctx,
+ oid * ifSpecific_val_ptr,
+ size_t ifSpecific_val_ptr_len);
+ int ifSpecific_undo_setup(ifTable_rowreq_ctx * rowreq_ctx);
+ int ifSpecific_set(ifTable_rowreq_ctx * rowreq_ctx,
+ oid * ifSpecific_val_ptr,
+ size_t ifSpecific_val_ptr_len);
+ int ifSpecific_undo(ifTable_rowreq_ctx * rowreq_ctx);
+
+
+ int ifTable_check_dependencies(ifTable_rowreq_ctx * ctx);
+
+
+ /*
+ * DUMMY markers, ignore
+ *
+ * TODO:099:x: *************************************************************
+ * TODO:199:x: *************************************************************
+ * TODO:299:x: *************************************************************
+ * TODO:399:x: *************************************************************
+ * TODO:499:x: *************************************************************
+ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IFTABLE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_constants.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_constants.h
new file mode 100644
index 0000000000..17a87c7f13
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_constants.h
@@ -0,0 +1,381 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-constants.m2c,v 1.5 2005/07/15 22:41:16 rstory Exp $
+ *
+ * $Id: ifTable_constants.h 14253 2006-02-14 14:40:55Z dts12 $
+ */
+#ifndef IFTABLE_CONSTANTS_H
+#define IFTABLE_CONSTANTS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * scalars
+ */
+#define IFTABLE_LAST_CHANGE 1,3,6,1,2,1,31,1,5
+#define IFTABLE_NUMBER 1,3,6,1,2,1,2,1
+
+
+ /*
+ * column number definitions for table ifTable
+ */
+#define IFTABLE_OID 1,3,6,1,2,1,2,2
+
+#define COLUMN_IFINDEX 1
+
+#define COLUMN_IFDESCR 2
+
+#define COLUMN_IFTYPE 3
+
+#define COLUMN_IFADMINSTATUS_FLAG (0x1 << 6)
+#define COLUMN_IFMTU 4
+
+#define COLUMN_IFSPEED 5
+
+#define COLUMN_IFPHYSADDRESS 6
+
+#define COLUMN_IFADMINSTATUS 7
+#define COLUMN_IFADMINSTATUS_FLAG (0x1 << 6)
+
+#define COLUMN_IFOPERSTATUS 8
+
+#define COLUMN_IFLASTCHANGE 9
+
+#define COLUMN_IFINOCTETS 10
+
+#define COLUMN_IFINUCASTPKTS 11
+
+#define COLUMN_IFINNUCASTPKTS 12
+
+#define COLUMN_IFINDISCARDS 13
+
+#define COLUMN_IFINERRORS 14
+
+#define COLUMN_IFINUNKNOWNPROTOS 15
+
+#define COLUMN_IFOUTOCTETS 16
+
+#define COLUMN_IFOUTUCASTPKTS 17
+
+#define COLUMN_IFOUTNUCASTPKTS 18
+
+#define COLUMN_IFOUTDISCARDS 19
+
+#define COLUMN_IFOUTERRORS 20
+
+#define COLUMN_IFOUTQLEN 21
+
+#define COLUMN_IFSPECIFIC 22
+
+
+#define IFTABLE_MIN_COL COLUMN_IFINDEX
+#define IFTABLE_MAX_COL COLUMN_IFSPECIFIC
+
+
+ /*
+ * TODO:405:r: Review IFTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define IFTABLE_SETTABLE_COLS (COLUMN_IFADMINSTATUS_FLAG)
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table ifTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ifType (IANAifType / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IANAIFTYPE_ENUMS
+#define IANAIFTYPE_ENUMS
+
+#define IANAIFTYPE_OTHER 1
+#define IANAIFTYPE_REGULAR1822 2
+#define IANAIFTYPE_HDH1822 3
+#define IANAIFTYPE_DDNX25 4
+#define IANAIFTYPE_RFC877X25 5
+#define IANAIFTYPE_ETHERNETCSMACD 6
+#define IANAIFTYPE_ISO88023CSMACD 7
+#define IANAIFTYPE_ISO88024TOKENBUS 8
+#define IANAIFTYPE_ISO88025TOKENRING 9
+#define IANAIFTYPE_ISO88026MAN 10
+#define IANAIFTYPE_STARLAN 11
+#define IANAIFTYPE_PROTEON10MBIT 12
+#define IANAIFTYPE_PROTEON80MBIT 13
+#define IANAIFTYPE_HYPERCHANNEL 14
+#define IANAIFTYPE_FDDI 15
+#define IANAIFTYPE_LAPB 16
+#define IANAIFTYPE_SDLC 17
+#define IANAIFTYPE_DS1 18
+#define IANAIFTYPE_E1 19
+#define IANAIFTYPE_BASICISDN 20
+#define IANAIFTYPE_PRIMARYISDN 21
+#define IANAIFTYPE_PROPPOINTTOPOINTSERIAL 22
+#define IANAIFTYPE_PPP 23
+#define IANAIFTYPE_SOFTWARELOOPBACK 24
+#define IANAIFTYPE_EON 25
+#define IANAIFTYPE_ETHERNET3MBIT 26
+#define IANAIFTYPE_NSIP 27
+#define IANAIFTYPE_SLIP 28
+#define IANAIFTYPE_ULTRA 29
+#define IANAIFTYPE_DS3 30
+#define IANAIFTYPE_SIP 31
+#define IANAIFTYPE_FRAMERELAY 32
+#define IANAIFTYPE_RS232 33
+#define IANAIFTYPE_PARA 34
+#define IANAIFTYPE_ARCNET 35
+#define IANAIFTYPE_ARCNETPLUS 36
+#define IANAIFTYPE_ATM 37
+#define IANAIFTYPE_MIOX25 38
+#define IANAIFTYPE_SONET 39
+#define IANAIFTYPE_X25PLE 40
+#define IANAIFTYPE_ISO88022LLC 41
+#define IANAIFTYPE_LOCALTALK 42
+#define IANAIFTYPE_SMDSDXI 43
+#define IANAIFTYPE_FRAMERELAYSERVICE 44
+#define IANAIFTYPE_V35 45
+#define IANAIFTYPE_HSSI 46
+#define IANAIFTYPE_HIPPI 47
+#define IANAIFTYPE_MODEM 48
+#define IANAIFTYPE_AAL5 49
+#define IANAIFTYPE_SONETPATH 50
+#define IANAIFTYPE_SONETVT 51
+#define IANAIFTYPE_SMDSICIP 52
+#define IANAIFTYPE_PROPVIRTUAL 53
+#define IANAIFTYPE_PROPMULTIPLEXOR 54
+#define IANAIFTYPE_IEEE80212 55
+#define IANAIFTYPE_FIBRECHANNEL 56
+#define IANAIFTYPE_HIPPIINTERFACE 57
+#define IANAIFTYPE_FRAMERELAYINTERCONNECT 58
+#define IANAIFTYPE_AFLANE8023 59
+#define IANAIFTYPE_AFLANE8025 60
+#define IANAIFTYPE_CCTEMUL 61
+#define IANAIFTYPE_FASTETHER 62
+#define IANAIFTYPE_ISDN 63
+#define IANAIFTYPE_V11 64
+#define IANAIFTYPE_V36 65
+#define IANAIFTYPE_G703AT64K 66
+#define IANAIFTYPE_G703AT2MB 67
+#define IANAIFTYPE_QLLC 68
+#define IANAIFTYPE_FASTETHERFX 69
+#define IANAIFTYPE_CHANNEL 70
+#define IANAIFTYPE_IEEE80211 71
+#define IANAIFTYPE_IBM370PARCHAN 72
+#define IANAIFTYPE_ESCON 73
+#define IANAIFTYPE_DLSW 74
+#define IANAIFTYPE_ISDNS 75
+#define IANAIFTYPE_ISDNU 76
+#define IANAIFTYPE_LAPD 77
+#define IANAIFTYPE_IPSWITCH 78
+#define IANAIFTYPE_RSRB 79
+#define IANAIFTYPE_ATMLOGICAL 80
+#define IANAIFTYPE_DS0 81
+#define IANAIFTYPE_DS0BUNDLE 82
+#define IANAIFTYPE_BSC 83
+#define IANAIFTYPE_ASYNC 84
+#define IANAIFTYPE_CNR 85
+#define IANAIFTYPE_ISO88025DTR 86
+#define IANAIFTYPE_EPLRS 87
+#define IANAIFTYPE_ARAP 88
+#define IANAIFTYPE_PROPCNLS 89
+#define IANAIFTYPE_HOSTPAD 90
+#define IANAIFTYPE_TERMPAD 91
+#define IANAIFTYPE_FRAMERELAYMPI 92
+#define IANAIFTYPE_X213 93
+#define IANAIFTYPE_ADSL 94
+#define IANAIFTYPE_RADSL 95
+#define IANAIFTYPE_SDSL 96
+#define IANAIFTYPE_VDSL 97
+#define IANAIFTYPE_ISO88025CRFPINT 98
+#define IANAIFTYPE_MYRINET 99
+#define IANAIFTYPE_VOICEEM 100
+#define IANAIFTYPE_VOICEFXO 101
+#define IANAIFTYPE_VOICEFXS 102
+#define IANAIFTYPE_VOICEENCAP 103
+#define IANAIFTYPE_VOICEOVERIP 104
+#define IANAIFTYPE_ATMDXI 105
+#define IANAIFTYPE_ATMFUNI 106
+#define IANAIFTYPE_ATMIMA 107
+#define IANAIFTYPE_PPPMULTILINKBUNDLE 108
+#define IANAIFTYPE_IPOVERCDLC 109
+#define IANAIFTYPE_IPOVERCLAW 110
+#define IANAIFTYPE_STACKTOSTACK 111
+#define IANAIFTYPE_VIRTUALIPADDRESS 112
+#define IANAIFTYPE_MPC 113
+#define IANAIFTYPE_IPOVERATM 114
+#define IANAIFTYPE_ISO88025FIBER 115
+#define IANAIFTYPE_TDLC 116
+#define IANAIFTYPE_GIGABITETHERNET 117
+#define IANAIFTYPE_HDLC 118
+#define IANAIFTYPE_LAPF 119
+#define IANAIFTYPE_V37 120
+#define IANAIFTYPE_X25MLP 121
+#define IANAIFTYPE_X25HUNTGROUP 122
+#define IANAIFTYPE_TRASNPHDLC 123
+#define IANAIFTYPE_INTERLEAVE 124
+#define IANAIFTYPE_FAST 125
+#define IANAIFTYPE_IP 126
+#define IANAIFTYPE_DOCSCABLEMACLAYER 127
+#define IANAIFTYPE_DOCSCABLEDOWNSTREAM 128
+#define IANAIFTYPE_DOCSCABLEUPSTREAM 129
+#define IANAIFTYPE_A12MPPSWITCH 130
+#define IANAIFTYPE_TUNNEL 131
+#define IANAIFTYPE_COFFEE 132
+#define IANAIFTYPE_CES 133
+#define IANAIFTYPE_ATMSUBINTERFACE 134
+#define IANAIFTYPE_L2VLAN 135
+#define IANAIFTYPE_L3IPVLAN 136
+#define IANAIFTYPE_L3IPXVLAN 137
+#define IANAIFTYPE_DIGITALPOWERLINE 138
+#define IANAIFTYPE_MEDIAMAILOVERIP 139
+#define IANAIFTYPE_DTM 140
+#define IANAIFTYPE_DCN 141
+#define IANAIFTYPE_IPFORWARD 142
+#define IANAIFTYPE_MSDSL 143
+#define IANAIFTYPE_IEEE1394 144
+#define IANAIFTYPE_IF_GSN 145
+#define IANAIFTYPE_DVBRCCMACLAYER 146
+#define IANAIFTYPE_DVBRCCDOWNSTREAM 147
+#define IANAIFTYPE_DVBRCCUPSTREAM 148
+#define IANAIFTYPE_ATMVIRTUAL 149
+#define IANAIFTYPE_MPLSTUNNEL 150
+#define IANAIFTYPE_SRP 151
+#define IANAIFTYPE_VOICEOVERATM 152
+#define IANAIFTYPE_VOICEOVERFRAMERELAY 153
+#define IANAIFTYPE_IDSL 154
+#define IANAIFTYPE_COMPOSITELINK 155
+#define IANAIFTYPE_SS7SIGLINK 156
+#define IANAIFTYPE_PROPWIRELESSP2P 157
+#define IANAIFTYPE_FRFORWARD 158
+#define IANAIFTYPE_RFC1483 159
+#define IANAIFTYPE_USB 160
+#define IANAIFTYPE_IEEE8023ADLAG 161
+#define IANAIFTYPE_BGPPOLICYACCOUNTING 162
+#define IANAIFTYPE_FRF16MFRBUNDLE 163
+#define IANAIFTYPE_H323GATEKEEPER 164
+#define IANAIFTYPE_H323PROXY 165
+#define IANAIFTYPE_MPLS 166
+#define IANAIFTYPE_MFSIGLINK 167
+#define IANAIFTYPE_HDSL2 168
+#define IANAIFTYPE_SHDSL 169
+#define IANAIFTYPE_DS1FDL 170
+#define IANAIFTYPE_POS 171
+#define IANAIFTYPE_DVBASIIN 172
+#define IANAIFTYPE_DVBASIOUT 173
+#define IANAIFTYPE_PLC 174
+#define IANAIFTYPE_NFAS 175
+#define IANAIFTYPE_TR008 176
+#define IANAIFTYPE_GR303RDT 177
+#define IANAIFTYPE_GR303IDT 178
+#define IANAIFTYPE_ISUP 179
+#define IANAIFTYPE_PROPDOCSWIRELESSMACLAYER 180
+#define IANAIFTYPE_PROPDOCSWIRELESSDOWNSTREAM 181
+#define IANAIFTYPE_PROPDOCSWIRELESSUPSTREAM 182
+#define IANAIFTYPE_HIPERLAN2 183
+#define IANAIFTYPE_PROPBWAP2MP 184
+#define IANAIFTYPE_SONETOVERHEADCHANNEL 185
+#define IANAIFTYPE_DIGITALWRAPPEROVERHEADCHANNEL 186
+#define IANAIFTYPE_AAL2 187
+#define IANAIFTYPE_RADIOMAC 188
+#define IANAIFTYPE_ATMRADIO 189
+#define IANAIFTYPE_IMT 190
+#define IANAIFTYPE_MVL 191
+#define IANAIFTYPE_REACHDSL 192
+#define IANAIFTYPE_FRDLCIENDPT 193
+#define IANAIFTYPE_ATMVCIENDPT 194
+#define IANAIFTYPE_OPTICALCHANNEL 195
+#define IANAIFTYPE_OPTICALTRANSPORT 196
+#define IANAIFTYPE_PROPATM 197
+#define IANAIFTYPE_VOICEOVERCABLE 198
+#define IANAIFTYPE_INFINIBAND 199
+#define IANAIFTYPE_TELINK 200
+#define IANAIFTYPE_Q2931 201
+#define IANAIFTYPE_VIRTUALTG 202
+#define IANAIFTYPE_SIPTG 203
+#define IANAIFTYPE_SIPSIG 204
+#define IANAIFTYPE_DOCSCABLEUPSTREAMCHANNEL 205
+#define IANAIFTYPE_ECONET 206
+#define IANAIFTYPE_PON155 207
+#define IANAIFTYPE_PON622 208
+#define IANAIFTYPE_BRIDGE 209
+#define IANAIFTYPE_LINEGROUP 210
+#define IANAIFTYPE_VOICEEMFGD 211
+#define IANAIFTYPE_VOICEFGDEANA 212
+#define IANAIFTYPE_VOICEDID 213
+#define IANAIFTYPE_MPEGTRANSPORT 214
+#define IANAIFTYPE_SIXTOFOUR 215
+#define IANAIFTYPE_GTP 216
+#define IANAIFTYPE_PDNETHERLOOP1 217
+#define IANAIFTYPE_PDNETHERLOOP2 218
+#define IANAIFTYPE_OPTICALCHANNELGROUP 219
+#define IANAIFTYPE_HOMEPNA 220
+#define IANAIFTYPE_GFP 221
+#define IANAIFTYPE_CISCOISLVLAN 222
+#define IANAIFTYPE_ACTELISMETALOOP 223
+#define IANAIFTYPE_FCIPLINK 224
+
+#endif /* IANAIFTYPE_ENUMS */
+/*************************************************************
+ * constants for enums for the MIB node
+ * ifAdminStatus (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IFADMINSTATUS_ENUMS
+#define IFADMINSTATUS_ENUMS
+
+#define IFADMINSTATUS_UP 1
+#define IFADMINSTATUS_DOWN 2
+#define IFADMINSTATUS_TESTING 3
+
+#endif /* IFADMINSTATUS_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ifOperStatus (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IFOPERSTATUS_ENUMS
+#define IFOPERSTATUS_ENUMS
+
+#define IFOPERSTATUS_UP 1
+#define IFOPERSTATUS_DOWN 2
+#define IFOPERSTATUS_TESTING 3
+#define IFOPERSTATUS_UNKNOWN 4
+#define IFOPERSTATUS_DORMANT 5
+#define IFOPERSTATUS_NOTPRESENT 6
+#define IFOPERSTATUS_LOWERLAYERDOWN 7
+
+#endif /* IFOPERSTATUS_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IFTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_data_access.c
new file mode 100644
index 0000000000..327c3dc470
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_data_access.c
@@ -0,0 +1,480 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ifTable_data_access.c 16790 2008-02-12 19:05:24Z hardaker $
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ifTable.h"
+#include "ifTable_defs.h"
+
+#include "ifTable_data_access.h"
+
+#ifdef USING_IP_MIB_IPV4INTERFACETABLE_IPV4INTERFACETABLE_MODULE
+# include "mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.h"
+#endif
+
+/*
+ * flag so we know not to set row/table last change times
+ * during startup.
+ */
+static int _first_load = 1;
+
+/** @ingroup interface
+ * @defgroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IF-MIB::ifTable is subid 2 of interfaces.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.2.2, length: 8
+ */
+
+/**
+ * initialization for ifTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param ifTable_reg
+ * Pointer to ifTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+ifTable_init_data(ifTable_registration * ifTable_reg)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifTable_init_data", "called\n"));
+
+ /*
+ * TODO:303:o: Initialize ifTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* ifTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+ifTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache * cache)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifTable_container_init", "called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,
+ "bad container param to ifTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR, "bad cache param to ifTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up ifTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ /*
+ * since we set AUTO_RELOAD below, this timer controls how
+ * often the cache is reloaded. A 10 Mbps stream can wrap if*Octets in ~57 minutes.
+ * At 100 Mbps it is ~5 minutes, and at 1 Gbps, ~34 seconds.
+ */
+ cache->timeout = IFTABLE_CACHE_TIMEOUT; /* seconds */
+
+ /*
+ * don't release resources
+ */
+ cache->flags |=
+ (NETSNMP_CACHE_DONT_AUTO_RELEASE | NETSNMP_CACHE_DONT_FREE_EXPIRED
+ | NETSNMP_CACHE_DONT_FREE_BEFORE_LOAD | NETSNMP_CACHE_PRELOAD |
+ NETSNMP_CACHE_AUTO_RELOAD | NETSNMP_CACHE_DONT_INVALIDATE_ON_SET);
+} /* ifTable_container_init */
+
+/**
+ * check entry for update
+ *
+ */
+static void
+_check_interface_entry_for_updates(ifTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_container *ifcontainer)
+{
+ char oper_changed = 0;
+ u_long lastchange = rowreq_ctx->data.ifLastChange;
+
+ /*
+ * check for matching entry. We can do this directly, since
+ * both containers use the same index.
+ */
+ netsnmp_interface_entry *ifentry =
+ CONTAINER_FIND(ifcontainer, rowreq_ctx);
+
+#ifdef USING_IP_MIB_IPV4INTERFACETABLE_IPV4INTERFACETABLE_MODULE
+ /*
+ * give ipv4If table a crack at the entry
+ */
+ ipv4InterfaceTable_check_entry_for_updates(rowreq_ctx, ifentry);
+#endif
+
+#ifdef USING_IP_MIB_IPV6INTERFACETABLE_IPV6INTERFACETABLE_MODULE
+ /*
+ * give ipv6If table a crack at the entry
+ */
+ ipv6InterfaceTable_check_entry_for_updates(rowreq_ctx, ifentry);
+#endif
+
+ if (NULL == ifentry) {
+ /*
+ * if this is the first time we detected that this interface is
+ * missing, set admin/oper status down, and set last change.
+ *
+ * yyy-rks: when, if ever, would we consider an entry
+ * deleted (and thus need to update ifTableLastChanged)?
+ */
+ if (!rowreq_ctx->known_missing) {
+ DEBUGMSGTL(("ifTable:access", "updating missing entry\n"));
+ rowreq_ctx->known_missing = 1;
+ rowreq_ctx->data.ifAdminStatus = IFADMINSTATUS_DOWN;
+ if ((!(rowreq_ctx->data.ifentry->ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_LASTCHANGE))
+ && (rowreq_ctx->data.ifOperStatus != IFOPERSTATUS_DOWN))
+ oper_changed = 1;
+ rowreq_ctx->data.ifOperStatus = IFOPERSTATUS_DOWN;
+ }
+ } else {
+ DEBUGMSGTL(("ifTable:access", "updating existing entry\n"));
+
+#ifdef USING_IF_MIB_IFXTABLE_IFXTABLE_MODULE
+ {
+ int rc = strcmp(rowreq_ctx->data.ifName,
+ ifentry->name);
+ if (rc != 0) {
+ static int logged = 0;
+ if (!logged) {
+ snmp_log(LOG_ERR, "Name of an interface changed. Such " \
+ "interfaces will keep its old name in IF-MIB.\n");
+ logged = 1;
+ }
+ DEBUGMSGTL(("ifTable:access", "interface %s changed name to %s, ignoring\n",
+ rowreq_ctx->data.ifName, ifentry->name));
+ }
+ }
+#endif
+ /*
+ * if the interface was missing, but came back, clear the
+ * missing flag and set the discontinuity time. (if an os keeps
+ * persistent counters, tough cookies. We'll cross that
+ * bridge if we come to it).
+ */
+ if (rowreq_ctx->known_missing) {
+ rowreq_ctx->known_missing = 0;
+#ifdef USING_IF_MIB_IFXTABLE_IFXTABLE_MODULE
+ rowreq_ctx->data.ifCounterDiscontinuityTime =
+ netsnmp_get_agent_uptime();
+#endif
+ }
+
+ /*
+ * Check for changes, then update
+ */
+ if ((!(ifentry->ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_LASTCHANGE))
+ && (rowreq_ctx->data.ifOperStatus != ifentry->oper_status))
+ oper_changed = 1;
+ netsnmp_access_interface_entry_copy(rowreq_ctx->data.ifentry,
+ ifentry);
+
+ /*
+ * remove entry from temporary ifcontainer
+ */
+ CONTAINER_REMOVE(ifcontainer, ifentry);
+ netsnmp_access_interface_entry_free(ifentry);
+ }
+
+ /*
+ * if ifOperStatus changed, update ifLastChange
+ */
+ if (oper_changed)
+ rowreq_ctx->data.ifLastChange = netsnmp_get_agent_uptime();
+ else
+ rowreq_ctx->data.ifLastChange = lastchange;
+}
+
+/**
+ * add new entry
+ */
+static void
+_add_new_interface(netsnmp_interface_entry *ifentry,
+ netsnmp_container *container)
+{
+ ifTable_rowreq_ctx *rowreq_ctx;
+
+ DEBUGMSGTL(("ifTable:access", "creating new entry\n"));
+
+ /*
+ * allocate an row context and set the index(es), then add it to
+ * the container and set ifTableLastChanged.
+ */
+ rowreq_ctx = ifTable_allocate_rowreq_ctx(ifentry);
+ if ((NULL != rowreq_ctx) &&
+ (MFD_SUCCESS == ifTable_indexes_set(rowreq_ctx, ifentry->index))) {
+ CONTAINER_INSERT(container, rowreq_ctx);
+ /*
+ * fix this when we hit an arch that reports its own last change
+ */
+ netsnmp_assert(0 == (ifentry->ns_flags &
+ NETSNMP_INTERFACE_FLAGS_HAS_LASTCHANGE));
+ if (0 == _first_load) {
+ rowreq_ctx->data.ifLastChange = netsnmp_get_agent_uptime();
+ ifTable_lastChange_set(rowreq_ctx->data.ifLastChange);
+ }
+#ifdef USING_IP_MIB_IPV4INTERFACETABLE_IPV4INTERFACETABLE_MODULE
+ /*
+ * give ipv4If table a crack at the entry
+ */
+ ipv4InterfaceTable_check_entry_for_updates(rowreq_ctx, ifentry);
+#endif
+#ifdef USING_IP_MIB_IPV6INTERFACETABLE_IPV6INTERFACETABLE_MODULE
+ /*
+ * give ipv6If table a crack at the entry
+ */
+ ipv6InterfaceTable_check_entry_for_updates(rowreq_ctx, ifentry);
+#endif
+ } else {
+ if (rowreq_ctx) {
+ snmp_log(LOG_ERR, "error setting index while loading "
+ "ifTable cache.\n");
+ ifTable_release_rowreq_ctx(rowreq_ctx);
+ } else {
+ snmp_log(LOG_ERR, "memory allocation failed while loading "
+ "ifTable cache.\n");
+ netsnmp_access_interface_entry_free(ifentry);
+ }
+ }
+}
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before ifTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+ifTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifTable_container_shutdown", "called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR, "bad params to ifTable_container_shutdown\n");
+ return;
+ }
+
+} /* ifTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement ifTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * ifTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+ifTable_container_load(netsnmp_container *container)
+{
+ netsnmp_container *ifcontainer;
+
+ DEBUGMSGTL(("verbose:ifTable:ifTable_container_load", "called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the ifTable container.
+ * loop over your ifTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ /*
+ * ifTable gets its data from the netsnmp_interface API.
+ */
+ ifcontainer =
+ netsnmp_access_interface_container_load(NULL,
+ NETSNMP_ACCESS_INTERFACE_INIT_NOFLAGS);
+ if (NULL == ifcontainer)
+ return MFD_RESOURCE_UNAVAILABLE; /* msg already logged */
+
+ /*
+ * we just got a fresh copy of interface data. compare it to
+ * what we've already got, and make any adjustements...
+ */
+ CONTAINER_FOR_EACH(container, (netsnmp_container_obj_func *)
+ _check_interface_entry_for_updates, ifcontainer);
+
+ /*
+ * now add any new interfaces
+ */
+ CONTAINER_FOR_EACH(ifcontainer,
+ (netsnmp_container_obj_func *) _add_new_interface,
+ container);
+
+ /*
+ * free the container. we've either claimed each ifentry, or released it,
+ * so the dal function doesn't need to clear the container.
+ */
+ netsnmp_access_interface_container_free(ifcontainer,
+ NETSNMP_ACCESS_INTERFACE_FREE_DONT_CLEAR);
+
+ DEBUGMSGT(("verbose:ifTable:ifTable_cache_load",
+ "%d records\n", CONTAINER_SIZE(container)));
+
+ if (_first_load)
+ _first_load = 0;
+
+ return MFD_SUCCESS;
+} /* ifTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+ifTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifTable_container_free", "called\n"));
+
+ /*
+ * TODO:380:M: Free ifTable container data.
+ */
+} /* ifTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+ifTable_row_prep(ifTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifTable_row_prep", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* ifTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_data_access.h
new file mode 100644
index 0000000000..8a2875d550
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_data_access.h
@@ -0,0 +1,84 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ifTable_data_access.h 14459 2006-04-10 04:59:10Z hardaker $
+ */
+#ifndef IFTABLE_DATA_ACCESS_H
+#define IFTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IF-MIB::ifTable is subid 2 of interfaces.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.2.2, length: 8
+ */
+
+
+ int ifTable_init_data(ifTable_registration * ifTable_reg);
+
+
+ /*
+ * TODO:180:o: Review ifTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+ /*
+ * A 10 Mbps stream can wrap if*Octets in ~57 minutes.
+ * At 100 Mbps it is ~5 minutes, and at 1 Gbps, ~34 seconds.
+ */
+#define IFTABLE_CACHE_TIMEOUT 15
+
+ void ifTable_container_init(netsnmp_container
+ **container_ptr_ptr,
+ netsnmp_cache * cache);
+ void ifTable_container_shutdown(netsnmp_container
+ *container_ptr);
+
+ int ifTable_container_load(netsnmp_container *container);
+ void ifTable_container_free(netsnmp_container *container);
+
+ void ifTable_container_shutdown(netsnmp_container
+ *container_ptr);
+
+ int ifTable_container_load(netsnmp_container *container);
+ void ifTable_container_free(netsnmp_container *container);
+
+ void ifTable_container_shutdown(netsnmp_container
+ *container_ptr);
+
+ int ifTable_container_load(netsnmp_container *container);
+ void ifTable_container_free(netsnmp_container *container);
+
+ int ifTable_cache_load(netsnmp_container *container);
+ void ifTable_cache_free(netsnmp_container *container);
+
+ int ifTable_row_prep(ifTable_rowreq_ctx * rowreq_ctx);
+
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IFTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_defs.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_defs.h
new file mode 100644
index 0000000000..b9750e9344
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_defs.h
@@ -0,0 +1,37 @@
+#define ifDescr ifentry->descr
+#define ifType ifentry->type
+#define ifMtu ifentry->mtu
+#define ifSpeed ifentry->speed
+#define ifPhysAddress ifentry->paddr
+#define ifPhysAddress_len ifentry->paddr_len /* # of char elements, not bytes */
+#define ifAdminStatus ifentry->admin_status
+#define ifOperStatus ifentry->oper_status
+#define ifLastChange ifentry->lastchange
+#define ifInOctets ifentry->stats.ibytes.low
+#define ifInUcastPkts ifentry->stats.iucast.low
+#define ifInNUcastPkts ifentry->stats.inucast
+#define ifInDiscards ifentry->stats.idiscards
+#define ifInErrors ifentry->stats.ierrors
+#define ifInUnknownProtos ifentry->stats.iunknown_protos
+#define ifOutOctets ifentry->stats.obytes.low
+#define ifOutUcastPkts ifentry->stats.oucast.low
+#define ifOutNUcastPkts ifentry->stats.onucast
+#define ifOutDiscards ifentry->stats.odiscards
+#define ifOutErrors ifentry->stats.oerrors
+#define ifOutQLen ifentry->stats.oqlen
+#define ifName ifentry->name
+#define ifInMulticastPkts ifentry->stats.imcast.low
+#define ifInBroadcastPkts ifentry->stats.ibcast.low
+#define ifOutMulticastPkts ifentry->stats.omcast.low
+#define ifOutBroadcastPkts ifentry->stats.obcast.low
+#define ifHCInOctets ifentry->stats.ibytes
+#define ifHCInUcastPkts ifentry->stats.iucast
+#define ifHCInMulticastPkts ifentry->stats.imcast
+#define ifHCInBroadcastPkts ifentry->stats.ibcast
+#define ifHCOutOctets ifentry->stats.obytes
+#define ifHCOutUcastPkts ifentry->stats.oucast
+#define ifHCOutMulticastPkts ifentry->stats.omcast
+#define ifHCOutBroadcastPkts ifentry->stats.obcast
+#define ifHighSpeed ifentry->speed_high
+#define ifPromiscuousMode ifentry->promiscuous
+#define ifConnectorPresent ifentry->connector_present
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_interface.c
new file mode 100644
index 0000000000..1c8b795b78
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_interface.c
@@ -0,0 +1,1980 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ifTable_interface.c 15461 2006-10-19 20:38:00Z hardaker $
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ifTable.h"
+#include "ifTable_defs.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "ifTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IF-MIB::ifTable is subid 2 of interfaces.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.2.2, length: 8
+ */
+typedef struct ifTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ ifTable_registration *user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+ u_long last_changed;
+
+} ifTable_interface_ctx;
+
+static ifTable_interface_ctx ifTable_if_ctx;
+
+static void _ifTable_container_init(ifTable_interface_ctx * if_ctx);
+static void _ifTable_container_shutdown(ifTable_interface_ctx *
+ if_ctx);
+
+
+netsnmp_container *
+ifTable_container_get(void)
+{
+ return ifTable_if_ctx.container;
+}
+
+ifTable_registration *
+ifTable_registration_get(void)
+{
+ return ifTable_if_ctx.user_ctx;
+}
+
+ifTable_registration *
+ifTable_registration_set(ifTable_registration * newreg)
+{
+ ifTable_registration *old = ifTable_if_ctx.user_ctx;
+ ifTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+ifTable_container_size(void)
+{
+ return CONTAINER_SIZE(ifTable_if_ctx.container);
+}
+
+u_int
+ifTable_dirty_get(void)
+{
+ return ifTable_if_ctx.table_dirty;
+}
+
+void
+ifTable_dirty_set(u_int status)
+{
+ DEBUGMSGTL(("ifTable:ifTable_dirty_set",
+ "called. was %d, now %d\n",
+ ifTable_if_ctx.table_dirty, status));
+ ifTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * ifTableLastChanged, which is not the last time that a row in
+ * the table was changed, but rather is the last time a row was
+ * added/deleted from the table.
+ */
+void
+ifTable_lastChange_set(u_long table_changed)
+{
+ DEBUGMSGTL(("ifTable:ifTable_lastChanged_set",
+ "called. was %ld, now %ld\n",
+ ifTable_if_ctx.last_changed, table_changed));
+ ifTable_if_ctx.last_changed = table_changed;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_ifTable_pre_request;
+static Netsnmp_Node_Handler _mfd_ifTable_post_request;
+static Netsnmp_Node_Handler _mfd_ifTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_ifTable_get_values;
+static Netsnmp_Node_Handler _mfd_ifTable_check_objects;
+static Netsnmp_Node_Handler _mfd_ifTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_ifTable_set_values;
+static Netsnmp_Node_Handler _mfd_ifTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_ifTable_undo_values;
+static Netsnmp_Node_Handler _mfd_ifTable_commit;
+static Netsnmp_Node_Handler _mfd_ifTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_ifTable_irreversible_commit;
+static Netsnmp_Node_Handler _mfd_ifTable_check_dependencies;
+
+NETSNMP_STATIC_INLINE int _ifTable_undo_column(ifTable_rowreq_ctx *
+ rowreq_ctx,
+ netsnmp_variable_list * var,
+ int column);
+
+ifTable_data *ifTable_allocate_data(void);
+
+/**
+ * common init of container for ifTable and ifXTable
+ */
+void
+if_mib_container_init(void)
+{
+ static int done = 0;
+
+ if (done)
+ return;
+
+ DEBUGMSGTL(("internal:ifTable:ifTable_container_init", "called\n"));
+
+ done = 1;
+
+ /*
+ * set up the container. This is outside the rewrite ifdef, because
+ * the container is used by the ifXTable too..
+ */
+ _ifTable_container_init(&ifTable_if_ctx);
+}
+
+/**
+ * @internal
+ * Initialize the table ifTable
+ * (Define its contents and how it's structured)
+ */
+void
+_ifTable_initialize_interface(ifTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &ifTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &ifTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:ifTable:_ifTable_initialize_interface",
+ "called\n"));
+
+ (void) if_mib_container_init();
+ if (NULL == ifTable_if_ctx.container)
+ return; /* msg already logged */
+
+#ifndef USING_MIBII_INTERFACES_MODULE
+ /*************************************************
+ *
+ * save interface context for ifTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
+ /** index: ifIndex */
+ 0);
+
+ /*
+ * Define the minimum and maximum accessible columns. This
+ * optimizes retrival.
+ */
+ tbl_info->min_column = IFTABLE_MIN_COL;
+ tbl_info->max_column = IFTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ ifTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ ifTable_init_data(reg_ptr);
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_ifTable_object_lookup;
+ access_multiplexer->get_values = _mfd_ifTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_ifTable_pre_request;
+ access_multiplexer->post_request = _mfd_ifTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_ifTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_ifTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_ifTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_ifTable_set_values;
+ access_multiplexer->undo_sets = _mfd_ifTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_ifTable_commit;
+ access_multiplexer->undo_commit = _mfd_ifTable_undo_commit;
+ access_multiplexer->irreversible_commit =
+ _mfd_ifTable_irreversible_commit;
+
+ /*
+ * REQUIRED for tables with dependencies
+ */
+ access_multiplexer->consistency_checks =
+ _mfd_ifTable_check_dependencies;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("ifTable:init_ifTable",
+ "Registering ifTable as a mibs-for-dummies table.\n"));
+ handler =
+ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo =
+ netsnmp_handler_registration_create("ifTable", handler,
+ ifTable_oid, ifTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE);
+ if (NULL == reginfo) {
+ snmp_log(LOG_ERR, "error registering table ifTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &ifTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if (access_multiplexer->object_lookup)
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if (access_multiplexer->set_values)
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if (access_multiplexer->irreversible_commit)
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if (access_multiplexer->object_syntax_checks)
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if (access_multiplexer->pre_request)
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if (access_multiplexer->post_request)
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if (access_multiplexer->undo_setup)
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if (access_multiplexer->undo_cleanup)
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if (access_multiplexer->undo_sets)
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if (access_multiplexer->row_creation)
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if (access_multiplexer->consistency_checks)
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if (access_multiplexer->commit)
+ mfd_modes |= BABY_STEP_COMMIT;
+ if (access_multiplexer->undo_commit)
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ ifTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if (NULL != ifTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(ifTable_if_ctx.cache);
+ netsnmp_inject_handler(reginfo, handler);
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+
+ /*
+ * register ifTableLastChanged
+ */
+ {
+ oid iftlc_oid[] = { IFTABLE_LAST_CHANGE };
+ netsnmp_register_watched_scalar(netsnmp_create_handler_registration
+ ("ifTableLastChanged", NULL,
+ iftlc_oid, OID_LENGTH(iftlc_oid),
+ HANDLER_CAN_RONLY),
+ netsnmp_create_watcher_info((void
+ *)
+ &ifTable_if_ctx.
+ last_changed,
+ sizeof
+ (u_long),
+ ASN_TIMETICKS,
+ WATCHER_FIXED_SIZE));
+ }
+#endif /* USING_MIBII_INTERFACES_MODULE */
+
+} /* _ifTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table ifTable
+ */
+void
+_ifTable_shutdown_interface(ifTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _ifTable_container_shutdown(&ifTable_if_ctx);
+}
+
+void
+ifTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ ifTable_if_ctx.tbl_info.valid_columns = vc;
+} /* ifTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+ifTable_index_to_oid(netsnmp_index * oid_idx, ifTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * ifIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+ */
+ netsnmp_variable_list var_ifIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_ifIndex, 0x00, sizeof(var_ifIndex));
+ var_ifIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_ifIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifTable_index_to_oid", "called\n"));
+
+ /*
+ * ifIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+ */
+ snmp_set_var_value(&var_ifIndex, (u_char *) & mib_idx->ifIndex,
+ sizeof(mib_idx->ifIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_ifIndex);
+ if (err)
+ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_ifIndex);
+
+ return err;
+} /* ifTable_index_to_oid */
+
+/**
+ * extract ifTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+ifTable_index_from_oid(netsnmp_index * oid_idx,
+ ifTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * ifIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+ */
+ netsnmp_variable_list var_ifIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_ifIndex, 0x00, sizeof(var_ifIndex));
+ var_ifIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_ifIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:ifTable:ifTable_index_from_oid", "called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes(oid_idx->oids, oid_idx->len, &var_ifIndex);
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->ifIndex = *((long *) var_ifIndex.val.string);
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_ifIndex);
+
+ return err;
+} /* ifTable_index_from_oid */
+
+
+/*
+ * ifTable_allocate_data
+ *
+ * Purpose: create new ifTable_data.
+ */
+ifTable_data *
+ifTable_allocate_data(void)
+{
+ ifTable_data *rtn = SNMP_MALLOC_TYPEDEF(ifTable_data);
+
+ DEBUGMSGTL(("verbose:ifTable:ifTable_allocate_data", "called\n"));
+
+ if (NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "ifTable_data.\n");
+ }
+
+ return rtn;
+} /* ifTable_allocate_data */
+
+/*
+ * ifTable_release_data
+ *
+ * Purpose: release ifTable data.
+ */
+void
+ifTable_release_data(ifTable_data * data)
+{
+ DEBUGMSGTL(("verbose:ifTable:ifTable_release_data", "called\n"));
+
+ free(data);
+} /* ifTable_release_data */
+
+/*
+ *********************************************************************
+ * @internal
+ * allocate resources for a ifTable_rowreq_ctx
+ */
+ifTable_rowreq_ctx *
+ifTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ ifTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(ifTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:ifTable:ifTable_allocate_rowreq_ctx",
+ "called\n"));
+
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+ "ifTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->ifTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if (SNMPERR_SUCCESS !=
+ ifTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ ifTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* ifTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a ifTable_rowreq_ctx
+ */
+void
+ifTable_release_rowreq_ctx(ifTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:ifTable:ifTable_release_rowreq_ctx",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ ifTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if (rowreq_ctx->undo) {
+ ifTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+ /*
+ * free index oid pointer
+ */
+ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* ifTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ifTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_pre_request", "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ifTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = ifTable_pre_request(ifTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ifTable", "error %d from "
+ "ifTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ifTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ifTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_post_request", "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ ifTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ifTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && ifTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "ifTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = ifTable_post_request(ifTable_if_ctx.user_ctx, packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ifTable", "error %d from "
+ "ifTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ifTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ ifTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_object_lookup",
+ "called\n"));
+
+ /*
+ * get our context from mfd
+ * ifTable_interface_ctx *if_ctx =
+ * (ifTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if (NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ ifTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_ifTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ifTable_get_column(ifTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * (INDEX) ifIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+ */
+ case COLUMN_IFINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.ifIndex;
+ break;
+
+ /*
+ * ifDescr(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+ */
+ case COLUMN_IFDESCR:
+ var->type = ASN_OCTET_STR;
+ rc = ifDescr_get(rowreq_ctx, (char **) &var->val.string,
+ &var->val_len);
+ break;
+
+ /*
+ * ifType(3)/IANAifType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_IFTYPE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ifType_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifMtu(4)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFMTU:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = ifMtu_get(rowreq_ctx, (long *) var->val.string);
+ break;
+
+ /*
+ * ifSpeed(5)/GAUGE/ASN_GAUGE/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFSPEED:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_GAUGE;
+ rc = ifSpeed_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifPhysAddress(6)/PhysAddress/ASN_OCTET_STR/char(char)//L/A/w/e/r/d/H
+ */
+ case COLUMN_IFPHYSADDRESS:
+ var->type = ASN_OCTET_STR;
+ rc = ifPhysAddress_get(rowreq_ctx, (char **) &var->val.string,
+ &var->val_len);
+ break;
+
+ /*
+ * ifAdminStatus(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFADMINSTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ifAdminStatus_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifOperStatus(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_IFOPERSTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ifOperStatus_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifLastChange(9)/TICKS/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFLASTCHANGE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_TIMETICKS;
+ rc = ifLastChange_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifInOctets(10)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINOCTETS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifInOctets_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifInUcastPkts(11)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINUCASTPKTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifInUcastPkts_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifInNUcastPkts(12)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINNUCASTPKTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifInNUcastPkts_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifInDiscards(13)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINDISCARDS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifInDiscards_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifInErrors(14)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINERRORS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifInErrors_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifInUnknownProtos(15)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINUNKNOWNPROTOS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifInUnknownProtos_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifOutOctets(16)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTOCTETS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifOutOctets_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifOutUcastPkts(17)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTUCASTPKTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifOutUcastPkts_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifOutNUcastPkts(18)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTNUCASTPKTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifOutNUcastPkts_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifOutDiscards(19)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTDISCARDS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifOutDiscards_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifOutErrors(20)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTERRORS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifOutErrors_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifOutQLen(21)/GAUGE/ASN_GAUGE/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTQLEN:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_GAUGE;
+ rc = ifOutQLen_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifSpecific(22)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/w/e/r/d/h
+ */
+ case COLUMN_IFSPECIFIC:
+ var->type = ASN_OBJECT_ID;
+ rc = ifSpecific_get(rowreq_ctx, (oid **) & var->val.string,
+ &var->val_len);
+ break;
+
+ default:
+ snmp_log(LOG_ERR, "unknown column %d in _ifTable_get_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ifTable_get_column */
+
+int
+_mfd_ifTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ifTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ u_char *old_string;
+ void (*dataFreeHook) (void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_get_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if (NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ } else if (requests->requestvb->buf ==
+ requests->requestvb->val.string) {
+ if (requests->requestvb->val_len !=
+ sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ifTable_get_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ if (MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ } else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if (rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if (old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if (dataFreeHook)
+ (*dataFreeHook) (old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifTable_get_values */
+
+
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ifTable_check_column(ifTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ifTable:_ifTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+ /*
+ * (INDEX) ifIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+ */
+ case COLUMN_IFINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /*
+ * ifDescr(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+ */
+ case COLUMN_IFDESCR:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifType(3)/IANAifType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_IFTYPE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifMtu(4)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFMTU:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifSpeed(5)/GAUGE/ASN_GAUGE/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFSPEED:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifPhysAddress(6)/PhysAddress/ASN_OCTET_STR/char(char)//L/A/w/e/r/d/H
+ */
+ case COLUMN_IFPHYSADDRESS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifAdminStatus(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFADMINSTATUS:
+ /** special case: we are using exernal storage w/smaller data size
+ ** for storage, so we can't use sizeof on data context. So we
+ ** just check that it's the expected size. The enum tests below
+ ** will ensure that there is no data overflow. */
+ rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
+ sizeof(u_long));
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (*var->val.integer != IFADMINSTATUS_UP)
+ && (*var->val.integer != IFADMINSTATUS_DOWN)
+ && (*var->val.integer != IFADMINSTATUS_TESTING)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ifTable:_ifTable_check_column:ifAdminStatus",
+ "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ifAdminStatus_check_value(rowreq_ctx,
+ *((u_long *) var->val.string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ifAdminStatus_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ifOperStatus(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_IFOPERSTATUS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifLastChange(9)/TICKS/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFLASTCHANGE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifInOctets(10)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINOCTETS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifInUcastPkts(11)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINUCASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifInNUcastPkts(12)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINNUCASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifInDiscards(13)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINDISCARDS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifInErrors(14)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINERRORS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifInUnknownProtos(15)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINUNKNOWNPROTOS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifOutOctets(16)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTOCTETS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifOutUcastPkts(17)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTUCASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifOutNUcastPkts(18)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTNUCASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifOutDiscards(19)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTDISCARDS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifOutErrors(20)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTERRORS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifOutQLen(21)/GAUGE/ASN_GAUGE/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTQLEN:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifSpecific(22)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/w/e/r/d/h
+ */
+ case COLUMN_IFSPECIFIC:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _ifTable_check_column\n",
+ column);
+ }
+
+ return rc;
+} /* _ifTable_check_column */
+
+int
+_mfd_ifTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ifTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_check_objects",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ifTable_check_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifTable_check_objects */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: check dependencies
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check dependencies wrapper
+ */
+static int
+_mfd_ifTable_check_dependencies(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ifTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_check_dependencies",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ifTable_check_dependencies(rowreq_ctx);
+ if (rc) {
+ DEBUGMSGTL(("ifTable:mfd", "error %d from "
+ "ifTable_check_dependencies\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifTable_check_dependencies */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ifTable_undo_setup_column(ifTable_rowreq_ctx * rowreq_ctx, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ifTable:_ifTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ifAdminStatus(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFADMINSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_IFADMINSTATUS_FLAG;
+ rc = ifAdminStatus_undo_setup(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ifTable_undo_setup_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ifTable_undo_setup_column */
+
+int
+_mfd_ifTable_undo_setup_allocate(ifTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ if (NULL == rowreq_ctx)
+ return MFD_ERROR;
+
+ /*
+ * other tables share our container/context and call
+ * this function. so we need to check and see if
+ * someone else already allocated the ifentry
+ */
+ if (NULL == rowreq_ctx->undo) {
+ rowreq_ctx->undo = ifTable_allocate_data();
+ if (NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ rc = SNMP_ERR_RESOURCEUNAVAILABLE;
+ }
+ else {
+ rowreq_ctx->undo->ifentry =
+ netsnmp_access_interface_entry_create(rowreq_ctx->data.ifentry->
+ name,
+ rowreq_ctx->data.ifentry->
+ index);
+ if (NULL == rowreq_ctx->undo->ifentry) {
+ rc = SNMP_ERR_RESOURCEUNAVAILABLE;
+ ifTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+ else {
+ netsnmp_access_interface_entry_copy(rowreq_ctx->undo->ifentry,
+ rowreq_ctx->data.ifentry);
+ netsnmp_assert(0 == rowreq_ctx->undo_ref_count);
+ }
+ }
+ }
+ ++rowreq_ctx->undo_ref_count;
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_undo_setup_allocate",
+ "++undo_refcount = %d\n",rowreq_ctx->undo_ref_count));
+
+ return rc;
+}
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_ifTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ifTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_undo_setup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rc = _mfd_ifTable_undo_setup_allocate(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ netsnmp_request_set_error_all(requests, rc);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rc = ifTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ifTable:mfd", "error %d from "
+ "ifTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ } else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info *tri;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ifTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ifTable:mfd", "error %d from "
+ "ifTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifTable_undo_setup */
+
+void
+_mfd_ifTable_undo_setup_release(ifTable_rowreq_ctx *rowreq_ctx)
+{
+ netsnmp_assert(rowreq_ctx->undo_ref_count > 0);
+ --rowreq_ctx->undo_ref_count;
+ snmp_log(LOG_ERR, "undo_refcount at %d\n", rowreq_ctx->undo_ref_count);
+
+ if (0 == rowreq_ctx->undo_ref_count) {
+ netsnmp_access_interface_entry_free(rowreq_ctx->undo->ifentry);
+ ifTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+}
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_ifTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ifTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_undo_cleanup", "called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = ifTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ifTable:mfd", "error %d from "
+ "ifTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ _mfd_ifTable_undo_setup_release(rowreq_ctx);
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ifTable_set_column(ifTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ifTable:_ifTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ifAdminStatus(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFADMINSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_IFADMINSTATUS_FLAG;
+ rc = ifAdminStatus_set(rowreq_ctx, *((u_long *) var->val.string));
+ break;
+
+ default:
+ snmp_log(LOG_ERR, "unknown column %d in _ifTable_set_column\n",
+ column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _ifTable_set_column */
+
+int
+_mfd_ifTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ifTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_set_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ifTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ifTable:mfd", "error %d from "
+ "ifTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_ifTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ifTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ifTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ifTable:mfd", "error %d from "
+ "ifTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ ifTable_dirty_set(ifTable_dirty_get() + 1); /* set table dirty flag */
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ ifTable_dirty_set(ifTable_dirty_get() + 1); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_ifTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ifTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_undo_commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = ifTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if (d)
+ ifTable_dirty_set(d - 1);
+ }
+
+ rc = ifTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ifTable:mfd", "error %d from "
+ "ifTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING,
+ "ifTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ifTable_undo_column(ifTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ifTable:_ifTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ifAdminStatus(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFADMINSTATUS:
+ rc = ifAdminStatus_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR, "unknown column %d in _ifTable_undo_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ifTable_undo_column */
+
+int
+_mfd_ifTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ifTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_undo_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ifTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ifTable:mfd", "error %d from " "ifTable_undo\n", rc));
+ }
+
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ifTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ifTable:mfd", "error %d from "
+ "ifTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_ifTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ifTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ifTable:_mfd_ifTable_irreversible:commit",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ CONTAINER_REMOVE(ifTable_if_ctx.container, rowreq_ctx);
+ } else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache * cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:ifTable:_cache_load", "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for ifTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return ifTable_container_load((netsnmp_container *) cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache * cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:ifTable:_cache_free", "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in ifTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container *) cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(ifTable_rowreq_ctx * rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:ifTable:_container_item_free", "called\n"));
+
+ if (NULL == rowreq_ctx)
+ return;
+
+ ifTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:ifTable:_container_free", "called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in ifTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ ifTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *) _container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_ifTable_container_init(ifTable_interface_ctx * if_ctx)
+{
+ DEBUGMSGTL(("internal:ifTable:_ifTable_container_init", "called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ ifTable_oid, ifTable_oid_size);
+
+ if (NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for ifTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ ifTable_container_init(&if_ctx->container, if_ctx->cache);
+ if (NULL == if_ctx->container)
+ if_ctx->container =
+ netsnmp_container_find("ifTable:table_container");
+ if (NULL == if_ctx->container) {
+ snmp_log(LOG_ERR, "error creating container in "
+ "ifTable_container_init\n");
+ return;
+ }
+
+ if_ctx->container->container_name = strdup("ifTable container");
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void *) if_ctx->container;
+} /* _ifTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_ifTable_container_shutdown(ifTable_interface_ctx * if_ctx)
+{
+ DEBUGMSGTL(("internal:ifTable:_ifTable_container_shutdown",
+ "called\n"));
+
+ ifTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _ifTable_container_shutdown */
+
+
+ifTable_rowreq_ctx *
+ifTable_row_find_by_mib_index(ifTable_mib_index * mib_idx)
+{
+ ifTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = ifTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(ifTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_interface.h
new file mode 100644
index 0000000000..f28de78a60
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifTable/ifTable_interface.h
@@ -0,0 +1,101 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ifTable_interface.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/** @ingroup misc
+ * @defgroup interface Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef IFTABLE_INTERFACE_H
+#define IFTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "ifTable.h"
+
+
+ /*
+ ********************************************************************
+ * Table declarations
+ */
+
+ /*
+ * PUBLIC interface initialization routine
+ */
+ void _ifTable_initialize_interface(ifTable_registration *
+ user_ctx, u_long flags);
+ void _ifTable_shutdown_interface(ifTable_registration *
+ user_ctx);
+
+ ifTable_registration *ifTable_registration_get(void);
+
+ ifTable_registration *ifTable_registration_set(ifTable_registration *
+ newreg);
+
+ netsnmp_container *ifTable_container_get(void);
+ int ifTable_container_size(void);
+
+ u_int ifTable_dirty_get(void);
+ void ifTable_dirty_set(u_int status);
+
+ ifTable_rowreq_ctx *ifTable_allocate_rowreq_ctx(void *);
+ void ifTable_release_rowreq_ctx(ifTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifTable_index_to_oid(netsnmp_index * oid_idx,
+ ifTable_mib_index * mib_idx);
+ int ifTable_index_from_oid(netsnmp_index * oid_idx,
+ ifTable_mib_index * mib_idx);
+
+ /*
+ * access to certain internals. use with caution!
+ */
+ void ifTable_valid_columns_set(netsnmp_column_info *vc);
+
+ /*
+ * special container init for shared ifTable/ifXTable container
+ */
+ void if_mib_container_init(void);
+
+ /*
+ */
+ void ifTable_lastChange_set(u_long uptime);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IFTABLE_INTERFACE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable.h
new file mode 100644
index 0000000000..5e99c0acfc
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable.h
@@ -0,0 +1,6 @@
+/*
+ * module to include the modules
+ */
+
+config_require(if-mib/ifXTable/ifXTable)
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable.c
new file mode 100644
index 0000000000..4cf4d4634e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable.c
@@ -0,0 +1,2535 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ifXTable.c 15462 2006-10-19 21:42:46Z hardaker $
+ */
+/** \page MFD helper for ifXTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <ctype.h>
+
+/*
+ * include our parent header
+ */
+#include "ifXTable.h"
+#include "if-mib/ifTable/ifTable_defs.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "ifXTable_interface.h"
+
+/*
+ * not sure if we want to support set for promiscuous mode, because
+ * 1) careful thought should go into any settable object that performs
+ * an action that requires root access
+ * 2) i don't want to write the code right now
+ *
+ */
+#undef NETSNMP_ENABLE_PROMISCUOUSMODE_SET
+
+oid ifXTable_oid[] = { IFXTABLE_OID };
+int ifXTable_oid_size = OID_LENGTH(ifXTable_oid);
+const char *row_token = "ifXTable";
+
+ifXTable_registration ifXTable_user_context;
+
+/**
+ * Initializes the ifXTable module
+ */
+void
+init_ifXTable(void)
+{
+ DEBUGMSGTL(("verbose:ifXTable:init_ifXTable", "called\n"));
+
+ /*
+ * TODO:300:o: Perform ifXTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ init_ifTable();
+
+} /* init_ifXTable */
+
+/**
+ * Initialize the table ifXTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_ifXTable(void)
+{
+ ifXTable_registration *user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:ifXTable:initialize_table_ifXTable", "called\n"));
+
+ /*
+ * TODO:301:o: Perform ifXTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize ifXTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("ifXTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _ifXTable_initialize_interface(user_context, flags);
+
+ /*
+ * if there is no container, bail. otherwise, register the callbacks
+ * for persistent storage.
+ */
+ if (NULL == ifTable_container_get())
+ return; /* msg already logged */
+
+} /* initialize_table_ifXTable */
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+ifXTable_rowreq_ctx_init(ifXTable_rowreq_ctx * rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_rowreq_ctx_init", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra ifXTable rowreq initialization. (eg DEFVALS)
+ * should never get here - ifTable should handle this
+ */
+ netsnmp_assert(0);
+
+ return MFD_ERROR;
+} /* ifXTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void
+ifXTable_rowreq_ctx_cleanup(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_rowreq_ctx_cleanup",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra ifXTable rowreq cleanup.
+ */
+ /*
+ * should never get here - ifTable should handle this
+ */
+ netsnmp_assert(0);
+} /* ifXTable_rowreq_ctx_cleanup */
+
+/**
+ * the *_should_save routine is called to determine if a row
+ * should be stored persistently.
+ *
+ * Note that this is not a 'dirty' check (i.e. if a row has changed),
+ * but a check for volatile rows that should not be saved between
+ * restarts.
+ *
+ * @param rowreq_ctx
+ *
+ * @return 1 if the row should be stored
+ * @return 0 if the row should not be stored
+ */
+int
+ifXTable_container_should_save(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+
+ return 1; /* save the row */
+}
+
+/**
+ * pre-request callback
+ *
+ * @param user_context
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+ifXTable_pre_request(ifXTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_pre_request", "called\n"));
+
+ /*
+ * TODO:510:o: Perform ifXTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* ifXTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+ifXTable_post_request(ifXTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_post_request", "called\n"));
+
+ /*
+ * TODO:511:o: Perform ifXTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (ifXTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ snmp_store(netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_APPTYPE));
+ }
+
+ ifXTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* ifXTable_post_request */
+
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifXTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IF-MIB::ifXTable is subid 1 of ifMIBObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.31.1.1, length: 9
+ */
+
+/*
+ * ---------------------------------------------------------------------
+ * * TODO:200:r: Implement ifXTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param ifIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+ifXTable_indexes_set_tbl_idx(ifXTable_mib_index * tbl_idx,
+ long ifIndex_val)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_indexes_set_tbl_idx",
+ "called\n"));
+
+ /*
+ * ifIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+ */
+ tbl_idx->ifIndex = ifIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* ifXTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ * @param ifIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+ifXTable_indexes_set(ifXTable_rowreq_ctx * rowreq_ctx, long ifIndex_val)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_indexes_set", "called\n"));
+
+ if (MFD_SUCCESS !=
+ ifXTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx, ifIndex_val))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if (0 != ifXTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* ifXTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifName
+ * ifName is subid 1 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.1
+ * Description:
+The textual name of the interface. The value of this
+ object should be the name of the interface as assigned by
+ the local device and should be suitable for use in commands
+ entered at the device's `console'. This might be a text
+ name, such as `le0' or a simple port number, such as `1',
+ depending on the interface naming syntax of the device. If
+ several entries in the ifTable together represent a single
+ interface as named by the device, then each will have the
+ same value of ifName. Note that for an agent which responds
+ to SNMP queries concerning an interface on some other
+ (proxied) device, then the value of ifName for such an
+ interface is the proxied device's local name for it.
+
+ If there is no local name, or this object is otherwise not
+ applicable, then this object contains a zero-length string.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 0
+ * hint: 255a
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the ifName data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifName_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param ifName_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by ifName.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*ifName_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update ifName_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+ifName_get(ifXTable_rowreq_ctx * rowreq_ctx, char **ifName_val_ptr_ptr,
+ size_t * ifName_val_ptr_len_ptr)
+{
+ int tmp_len;
+
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert((NULL != ifName_val_ptr_ptr)
+ && (NULL != *ifName_val_ptr_ptr));
+ netsnmp_assert(NULL != ifName_val_ptr_len_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifName_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifName data.
+ * copy (* ifName_val_ptr_ptr ) data and (* ifName_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for ifName data
+ */
+ tmp_len = strlen(rowreq_ctx->data.ifName);
+ if ((NULL == (*ifName_val_ptr_ptr)) ||
+ ((*ifName_val_ptr_len_ptr) < tmp_len)) {
+ /*
+ * allocate space for ifName data
+ */
+ (*ifName_val_ptr_ptr) = malloc(tmp_len);
+ if (NULL == (*ifName_val_ptr_ptr)) {
+ snmp_log(LOG_ERR, "could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (*ifName_val_ptr_len_ptr) = tmp_len;
+ memcpy((*ifName_val_ptr_ptr), rowreq_ctx->data.ifName, tmp_len);
+
+ return MFD_SUCCESS;
+} /* ifName_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifInMulticastPkts
+ * ifInMulticastPkts is subid 2 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.2
+ * Description:
+The number of packets, delivered by this sub-layer to a
+ higher (sub-)layer, which were addressed to a multicast
+ address at this sub-layer. For a MAC layer protocol, this
+ includes both Group and Functional addresses.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifInMulticastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifInMulticastPkts_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifInMulticastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInMulticastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifInMulticastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifInMulticastPkts_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifInMulticastPkts data.
+ * copy (* ifInMulticastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifInMulticastPkts_val_ptr) = rowreq_ctx->data.ifInMulticastPkts;
+
+ return MFD_SUCCESS;
+} /* ifInMulticastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifInBroadcastPkts
+ * ifInBroadcastPkts is subid 3 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.3
+ * Description:
+The number of packets, delivered by this sub-layer to a
+ higher (sub-)layer, which were addressed to a broadcast
+ address at this sub-layer.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifInBroadcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifInBroadcastPkts_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifInBroadcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifInBroadcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifInBroadcastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifInBroadcastPkts_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifInBroadcastPkts data.
+ * copy (* ifInBroadcastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifInBroadcastPkts_val_ptr) = rowreq_ctx->data.ifInBroadcastPkts;
+
+ return MFD_SUCCESS;
+} /* ifInBroadcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifOutMulticastPkts
+ * ifOutMulticastPkts is subid 4 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.4
+ * Description:
+The total number of packets that higher-level protocols
+ requested be transmitted, and which were addressed to a
+ multicast address at this sub-layer, including those that
+ were discarded or not sent. For a MAC layer protocol, this
+ includes both Group and Functional addresses.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifOutMulticastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifOutMulticastPkts_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifOutMulticastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutMulticastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifOutMulticastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifOutMulticastPkts_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifOutMulticastPkts data.
+ * copy (* ifOutMulticastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifOutMulticastPkts_val_ptr) = rowreq_ctx->data.ifOutMulticastPkts;
+
+ return MFD_SUCCESS;
+} /* ifOutMulticastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifOutBroadcastPkts
+ * ifOutBroadcastPkts is subid 5 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.5
+ * Description:
+The total number of packets that higher-level protocols
+ requested be transmitted, and which were addressed to a
+ broadcast address at this sub-layer, including those that
+ were discarded or not sent.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifOutBroadcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifOutBroadcastPkts_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifOutBroadcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifOutBroadcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifOutBroadcastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifOutBroadcastPkts_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifOutBroadcastPkts data.
+ * copy (* ifOutBroadcastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifOutBroadcastPkts_val_ptr) = rowreq_ctx->data.ifOutBroadcastPkts;
+
+ return MFD_SUCCESS;
+} /* ifOutBroadcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCInOctets
+ * ifHCInOctets is subid 6 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.6
+ * Description:
+The total number of octets received on the interface,
+ including framing characters. This object is a 64-bit
+ version of ifInOctets.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ifHCInOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCInOctets_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifHCInOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCInOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCInOctets_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCInOctets data.
+ * get (* ifHCInOctets_val_ptr ).low and (* ifHCInOctets_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCInOctets_val_ptr).high = rowreq_ctx->data.ifHCInOctets.high;
+ (*ifHCInOctets_val_ptr).low = rowreq_ctx->data.ifHCInOctets.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCInOctets_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCInUcastPkts
+ * ifHCInUcastPkts is subid 7 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.7
+ * Description:
+The number of packets, delivered by this sub-layer to a
+ higher (sub-)layer, which were not addressed to a multicast
+ or broadcast address at this sub-layer. This object is a
+ 64-bit version of ifInUcastPkts.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ifHCInUcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCInUcastPkts_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifHCInUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCInUcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCInUcastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCInUcastPkts data.
+ * get (* ifHCInUcastPkts_val_ptr ).low and (* ifHCInUcastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCInUcastPkts_val_ptr).high =
+ rowreq_ctx->data.ifHCInUcastPkts.high;
+ (*ifHCInUcastPkts_val_ptr).low = rowreq_ctx->data.ifHCInUcastPkts.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCInUcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCInMulticastPkts
+ * ifHCInMulticastPkts is subid 8 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.8
+ * Description:
+The number of packets, delivered by this sub-layer to a
+ higher (sub-)layer, which were addressed to a multicast
+ address at this sub-layer. For a MAC layer protocol, this
+ includes both Group and Functional addresses. This object
+ is a 64-bit version of ifInMulticastPkts.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ifHCInMulticastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCInMulticastPkts_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifHCInMulticastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCInMulticastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCInMulticastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCInMulticastPkts data.
+ * get (* ifHCInMulticastPkts_val_ptr ).low and (* ifHCInMulticastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCInMulticastPkts_val_ptr).high =
+ rowreq_ctx->data.ifHCInMulticastPkts.high;
+ (*ifHCInMulticastPkts_val_ptr).low =
+ rowreq_ctx->data.ifHCInMulticastPkts.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCInMulticastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCInBroadcastPkts
+ * ifHCInBroadcastPkts is subid 9 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.9
+ * Description:
+The number of packets, delivered by this sub-layer to a
+ higher (sub-)layer, which were addressed to a broadcast
+ address at this sub-layer. This object is a 64-bit version
+ of ifInBroadcastPkts.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ifHCInBroadcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCInBroadcastPkts_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifHCInBroadcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCInBroadcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCInBroadcastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCInBroadcastPkts data.
+ * get (* ifHCInBroadcastPkts_val_ptr ).low and (* ifHCInBroadcastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCInBroadcastPkts_val_ptr).high =
+ rowreq_ctx->data.ifHCInBroadcastPkts.high;
+ (*ifHCInBroadcastPkts_val_ptr).low =
+ rowreq_ctx->data.ifHCInBroadcastPkts.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCInBroadcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCOutOctets
+ * ifHCOutOctets is subid 10 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.10
+ * Description:
+The total number of octets transmitted out of the
+ interface, including framing characters. This object is a
+ 64-bit version of ifOutOctets.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ifHCOutOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCOutOctets_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifHCOutOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCOutOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCOutOctets_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCOutOctets data.
+ * get (* ifHCOutOctets_val_ptr ).low and (* ifHCOutOctets_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCOutOctets_val_ptr).high = rowreq_ctx->data.ifHCOutOctets.high;
+ (*ifHCOutOctets_val_ptr).low = rowreq_ctx->data.ifHCOutOctets.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCOutOctets_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCOutUcastPkts
+ * ifHCOutUcastPkts is subid 11 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.11
+ * Description:
+The total number of packets that higher-level protocols
+ requested be transmitted, and which were not addressed to a
+ multicast or broadcast address at this sub-layer, including
+ those that were discarded or not sent. This object is a
+ 64-bit version of ifOutUcastPkts.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ifHCOutUcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCOutUcastPkts_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifHCOutUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCOutUcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCOutUcastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCOutUcastPkts data.
+ * get (* ifHCOutUcastPkts_val_ptr ).low and (* ifHCOutUcastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCOutUcastPkts_val_ptr).high =
+ rowreq_ctx->data.ifHCOutUcastPkts.high;
+ (*ifHCOutUcastPkts_val_ptr).low =
+ rowreq_ctx->data.ifHCOutUcastPkts.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCOutUcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCOutMulticastPkts
+ * ifHCOutMulticastPkts is subid 12 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.12
+ * Description:
+The total number of packets that higher-level protocols
+ requested be transmitted, and which were addressed to a
+ multicast address at this sub-layer, including those that
+ were discarded or not sent. For a MAC layer protocol, this
+ includes both Group and Functional addresses. This object
+ is a 64-bit version of ifOutMulticastPkts.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ifHCOutMulticastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCOutMulticastPkts_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifHCOutMulticastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCOutMulticastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCOutMulticastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCOutMulticastPkts data.
+ * get (* ifHCOutMulticastPkts_val_ptr ).low and (* ifHCOutMulticastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCOutMulticastPkts_val_ptr).high =
+ rowreq_ctx->data.ifHCOutMulticastPkts.high;
+ (*ifHCOutMulticastPkts_val_ptr).low =
+ rowreq_ctx->data.ifHCOutMulticastPkts.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCOutMulticastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHCOutBroadcastPkts
+ * ifHCOutBroadcastPkts is subid 13 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.13
+ * Description:
+The total number of packets that higher-level protocols
+ requested be transmitted, and which were addressed to a
+ broadcast address at this sub-layer, including those that
+ were discarded or not sent. This object is a 64-bit version
+ of ifOutBroadcastPkts.
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ifCounterDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ifHCOutBroadcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHCOutBroadcastPkts_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifHCOutBroadcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCOutBroadcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCOutBroadcastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ifHCOutBroadcastPkts data.
+ * get (* ifHCOutBroadcastPkts_val_ptr ).low and (* ifHCOutBroadcastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ifHCOutBroadcastPkts_val_ptr).high =
+ rowreq_ctx->data.ifHCOutBroadcastPkts.high;
+ (*ifHCOutBroadcastPkts_val_ptr).low =
+ rowreq_ctx->data.ifHCOutBroadcastPkts.low;
+
+
+ return MFD_SUCCESS;
+} /* ifHCOutBroadcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifLinkUpDownTrapEnable
+ * ifLinkUpDownTrapEnable is subid 14 of ifXEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.31.1.1.1.14
+ * Description:
+Indicates whether linkUp/linkDown traps should be generated
+ for this interface.
+
+ By default, this object should have the value enabled(1) for
+ interfaces which do not operate on 'top' of any other
+ interface (as defined in the ifStackTable), and disabled(2)
+ otherwise.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: enabled(1), disabled(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ifLinkUpDownTrapEnable data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifLinkUpDownTrapEnable_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifLinkUpDownTrapEnable_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifLinkUpDownTrapEnable_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifLinkUpDownTrapEnable_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifLinkUpDownTrapEnable_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (0 == rowreq_ctx->data.ifLinkUpDownTrapEnable)
+ return MFD_SKIP;
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifLinkUpDownTrapEnable data.
+ * copy (* ifLinkUpDownTrapEnable_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifLinkUpDownTrapEnable_val_ptr) =
+ rowreq_ctx->data.ifLinkUpDownTrapEnable;
+
+ return MFD_SUCCESS;
+} /* ifLinkUpDownTrapEnable_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifHighSpeed
+ * ifHighSpeed is subid 15 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.15
+ * Description:
+An estimate of the interface's current bandwidth in units
+ of 1,000,000 bits per second. If this object reports a
+ value of `n' then the speed of the interface is somewhere in
+ the range of `n-500,000' to `n+499,999'. For interfaces
+ which do not vary in bandwidth or for those where no
+ accurate estimation can be made, this object should contain
+ the nominal bandwidth. For a sub-layer which has no concept
+ of bandwidth, this object should be zero.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is GAUGE (based on perltype GAUGE)
+ * The net-snmp type is ASN_GAUGE. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifHighSpeed data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifHighSpeed_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifHighSpeed_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifHighSpeed_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHighSpeed_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifHighSpeed_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifHighSpeed data.
+ * copy (* ifHighSpeed_val_ptr ) from rowreq_ctx->data
+ */
+ if (0 == rowreq_ctx->data.ifHighSpeed)
+ (*ifHighSpeed_val_ptr) = rowreq_ctx->data.ifSpeed / 100000;
+ else
+ (*ifHighSpeed_val_ptr) = rowreq_ctx->data.ifHighSpeed;
+
+ return MFD_SUCCESS;
+} /* ifHighSpeed_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifPromiscuousMode
+ * ifPromiscuousMode is subid 16 of ifXEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.31.1.1.1.16
+ * Description:
+This object has a value of false(2) if this interface only
+ accepts packets/frames that are addressed to this station.
+ This object has a value of true(1) when the station accepts
+ all packets/frames transmitted on the media. The value
+ true(1) is only legal on certain types of media. If legal,
+ setting this object to a value of true(1) may require the
+ interface to be reset before becoming effective.
+
+ The value of ifPromiscuousMode does not affect the reception
+ of broadcast and multicast packets/frames by the interface.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: true(1), false(2)
+ *
+ * Its syntax is TruthValue (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ifPromiscuousMode data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifPromiscuousMode_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifPromiscuousMode_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifPromiscuousMode_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifPromiscuousMode_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifPromiscuousMode_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifPromiscuousMode data.
+ * copy (* ifPromiscuousMode_val_ptr ) from rowreq_ctx->data
+ */
+ /** this is coming from the interface entry, which is a boolean */
+ if (rowreq_ctx->data.ifPromiscuousMode)
+ (*ifPromiscuousMode_val_ptr) = 1;
+ else
+ (*ifPromiscuousMode_val_ptr) = 2;
+
+ return MFD_SUCCESS;
+} /* ifPromiscuousMode_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifConnectorPresent
+ * ifConnectorPresent is subid 17 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.17
+ * Description:
+This object has the value 'true(1)' if the interface
+ sublayer has a physical connector and the value 'false(2)'
+ otherwise.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: true(1), false(2)
+ *
+ * Its syntax is TruthValue (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ifConnectorPresent data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifConnectorPresent_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifConnectorPresent_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifConnectorPresent_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifConnectorPresent_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifConnectorPresent_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (0 == rowreq_ctx->data.ifConnectorPresent)
+ return MFD_SKIP;
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifConnectorPresent data.
+ * copy (* ifConnectorPresent_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifConnectorPresent_val_ptr) = rowreq_ctx->data.ifConnectorPresent ?
+ TV_TRUE : TV_FALSE;
+
+ return MFD_SUCCESS;
+} /* ifConnectorPresent_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifAlias
+ * ifAlias is subid 18 of ifXEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.31.1.1.1.18
+ * Description:
+This object is an 'alias' name for the interface as
+ specified by a network manager, and provides a non-volatile
+ 'handle' for the interface.
+
+ On the first instantiation of an interface, the value of
+ ifAlias associated with that interface is the zero-length
+ string. As and when a value is written into an instance of
+ ifAlias through a network management set operation, then the
+ agent must retain the supplied value in the ifAlias instance
+ associated with the same interface for as long as that
+ interface remains instantiated, including across all re-
+ initializations/reboots of the network management system,
+ including those which result in a change of the interface's
+ ifIndex value.
+
+ An example of the value which a network manager might store
+ in this object for a WAN interface is the (Telco's) circuit
+ number/identifier of the interface.
+
+ Some agents may support write-access only for interfaces
+ having particular values of ifType. An agent which supports
+ write access to this object is required to keep the value in
+ non-volatile storage, but it may limit the length of new
+ values depending on how much storage is already occupied by
+ the current values for other interfaces.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 255a
+ *
+ * Ranges: 0 - 64;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 64)
+ */
+/**
+ * Extract the current value of the ifAlias data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifAlias_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param ifAlias_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by ifAlias.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*ifAlias_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update ifAlias_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+ifAlias_get(ifXTable_rowreq_ctx * rowreq_ctx, char **ifAlias_val_ptr_ptr,
+ size_t * ifAlias_val_ptr_len_ptr)
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert((NULL != ifAlias_val_ptr_ptr)
+ && (NULL != *ifAlias_val_ptr_ptr));
+ netsnmp_assert(NULL != ifAlias_val_ptr_len_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifAlias_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifAlias data.
+ * copy (* ifAlias_val_ptr_ptr ) data and (* ifAlias_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for ifAlias data
+ */
+ if ((NULL == (*ifAlias_val_ptr_ptr)) ||
+ ((*ifAlias_val_ptr_len_ptr) <
+ (rowreq_ctx->data.ifAlias_len *
+ sizeof(rowreq_ctx->data.ifAlias[0])))) {
+ /*
+ * allocate space for ifAlias data
+ */
+ (*ifAlias_val_ptr_ptr) =
+ malloc(rowreq_ctx->data.ifAlias_len *
+ sizeof(rowreq_ctx->data.ifAlias[0]));
+ if (NULL == (*ifAlias_val_ptr_ptr)) {
+ snmp_log(LOG_ERR, "could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (*ifAlias_val_ptr_len_ptr) =
+ rowreq_ctx->data.ifAlias_len * sizeof(rowreq_ctx->data.ifAlias[0]);
+ memcpy((*ifAlias_val_ptr_ptr), rowreq_ctx->data.ifAlias,
+ rowreq_ctx->data.ifAlias_len *
+ sizeof(rowreq_ctx->data.ifAlias[0]));
+
+ return MFD_SUCCESS;
+} /* ifAlias_get */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifCounterDiscontinuityTime
+ * ifCounterDiscontinuityTime is subid 19 of ifXEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.31.1.1.1.19
+ * Description:
+The value of sysUpTime on the most recent occasion at which
+ any one or more of this interface's counters suffered a
+ discontinuity. The relevant counters are the specific
+ instances associated with this interface of any Counter32 or
+
+ Counter64 object contained in the ifTable or ifXTable. If
+ no such discontinuities have occurred since the last re-
+ initialization of the local management subsystem, then this
+ object contains a zero value.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is TimeStamp (based on perltype TICKS)
+ * The net-snmp type is ASN_TIMETICKS. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ifCounterDiscontinuityTime data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifCounterDiscontinuityTime_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ifCounterDiscontinuityTime_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifCounterDiscontinuityTime_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifCounterDiscontinuityTime_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifCounterDiscontinuityTime_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ifCounterDiscontinuityTime data.
+ * copy (* ifCounterDiscontinuityTime_val_ptr ) from rowreq_ctx->data
+ */
+ (*ifCounterDiscontinuityTime_val_ptr) =
+ rowreq_ctx->data.ifCounterDiscontinuityTime;
+
+ return MFD_SUCCESS;
+} /* ifCounterDiscontinuityTime_get */
+
+
+
+/** @} */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifXTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IF-MIB::ifXTable is subid 1 of ifMIBObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.31.1.1, length: 9
+ */
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * ifXTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * ifXTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifXTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ifXTable_undo_setup(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_undo_setup", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> Setup ifXTable undo.
+ * set up ifXTable undo information, in preparation for a set.
+ * Undo storage is in (* ifCounterDiscontinuityTime_val_ptr )*
+ */
+
+ return rc;
+} /* ifXTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifXTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ifXTable_undo(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_undo", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> ifXTable undo.
+ * ifXTable undo information, in response to a failed set.
+ * Undo storage is in (* ifCounterDiscontinuityTime_val_ptr )*
+ */
+
+ return rc;
+} /* ifXTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifXTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ifXTable_undo_cleanup(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_undo_cleanup", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:452:M: |-> Cleanup ifXTable undo.
+ * Undo storage is in (* ifCounterDiscontinuityTime_val_ptr )*
+ */
+
+ return rc;
+} /* ifXTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ifXTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ifXTable_commit(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit ifXTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ *
+ * this is where one would usually commit data. In this case,
+ * ifLinkUpDownTrapEnable and ifAlias are purely internal, so
+ * nothing needs to be done. That leaves ifPromiscuosMode,
+ * which I'm leery about implementing. Thus, at this point,
+ * there is nothing to do except twiddle flag bits.
+ */
+ if (save_flags & COLUMN_IFLINKUPDOWNTRAPENABLE_FLAG) {
+ save_flags &= ~COLUMN_IFLINKUPDOWNTRAPENABLE_FLAG; /* clear ifLinkUpDownTrapEnable */
+ /*
+ * TODO:482:o: |-> commit column ifLinkUpDownTrapEnable.
+ */
+ /*
+ * set flag, in case we need to undo ifLinkUpDownTrapEnable
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IFLINKUPDOWNTRAPENABLE_FLAG;
+ }
+#ifdef NETSNMP_ENABLE_PROMISCUOUSMODE_SET
+ if (save_flags & COLUMN_IFPROMISCUOUSMODE_FLAG) {
+ save_flags &= ~COLUMN_IFPROMISCUOUSMODE_FLAG; /* clear ifPromiscuousMode */
+ /*
+ * TODO:482:o: |-> commit column ifPromiscuousMode.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ifXTable column ifPromiscuousMode commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ifPromiscuousMode
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IFPROMISCUOUSMODE_FLAG;
+ }
+ }
+#endif /* NETSNMP_ENABLE_PROMISCUOUSMODE_SET */
+
+ if (save_flags & COLUMN_IFALIAS_FLAG) {
+ save_flags &= ~COLUMN_IFALIAS_FLAG; /* clear ifAlias */
+ /*
+ * set flag, in case we need to undo ifAlias
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IFALIAS_FLAG;
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* ifXTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ifXTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ifXTable_undo_commit(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_undo_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:485:M: |-> Undo ifXTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* ifXTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement ifXTable node value checks.
+ * TODO:450:M: Implement ifXTable undo functions.
+ * TODO:460:M: Implement ifXTable set functions.
+ * TODO:480:M: Implement ifXTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifLinkUpDownTrapEnable
+ * ifLinkUpDownTrapEnable is subid 14 of ifXEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.31.1.1.1.14
+ * Description:
+Indicates whether linkUp/linkDown traps should be generated
+ for this interface.
+
+ By default, this object should have the value enabled(1) for
+ interfaces which do not operate on 'top' of any other
+ interface (as defined in the ifStackTable), and disabled(2)
+ otherwise.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: enabled(1), disabled(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifLinkUpDownTrapEnable_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ifXTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of enabled(1), disabled(2)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ifLinkUpDownTrapEnable_check_value(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long ifLinkUpDownTrapEnable_val)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifLinkUpDownTrapEnable_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ifLinkUpDownTrapEnable value.
+ */
+
+ return MFD_SUCCESS; /* ifLinkUpDownTrapEnable value not illegal */
+} /* ifLinkUpDownTrapEnable_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifXTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ifXTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ifLinkUpDownTrapEnable_undo_setup(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifLinkUpDownTrapEnable_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ifLinkUpDownTrapEnable undo.
+ */
+ /*
+ * copy ifLinkUpDownTrapEnable data
+ * set rowreq_ctx->undo->ifLinkUpDownTrapEnable from rowreq_ctx->data.ifLinkUpDownTrapEnable
+ */
+ rowreq_ctx->undo->ifLinkUpDownTrapEnable =
+ rowreq_ctx->data.ifLinkUpDownTrapEnable;
+
+
+ return MFD_SUCCESS;
+} /* ifLinkUpDownTrapEnable_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ifLinkUpDownTrapEnable_val
+ * A long containing the new value.
+ */
+int
+ifLinkUpDownTrapEnable_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long ifLinkUpDownTrapEnable_val)
+{
+
+ DEBUGMSGTL(("verbose:ifXTable:ifLinkUpDownTrapEnable_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ifLinkUpDownTrapEnable value.
+ * set ifLinkUpDownTrapEnable value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.ifLinkUpDownTrapEnable = ifLinkUpDownTrapEnable_val;
+
+ return MFD_SUCCESS;
+} /* ifLinkUpDownTrapEnable_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ifLinkUpDownTrapEnable_undo(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ifXTable:ifLinkUpDownTrapEnable_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ifLinkUpDownTrapEnable undo.
+ */
+ /*
+ * copy ifLinkUpDownTrapEnable data
+ * set rowreq_ctx->data.ifLinkUpDownTrapEnable from rowreq_ctx->undo->ifLinkUpDownTrapEnable
+ */
+ rowreq_ctx->data.ifLinkUpDownTrapEnable =
+ rowreq_ctx->undo->ifLinkUpDownTrapEnable;
+
+
+ return MFD_SUCCESS;
+} /* ifLinkUpDownTrapEnable_undo */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifPromiscuousMode
+ * ifPromiscuousMode is subid 16 of ifXEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.31.1.1.1.16
+ * Description:
+This object has a value of false(2) if this interface only
+ accepts packets/frames that are addressed to this station.
+ This object has a value of true(1) when the station accepts
+ all packets/frames transmitted on the media. The value
+ true(1) is only legal on certain types of media. If legal,
+ setting this object to a value of true(1) may require the
+ interface to be reset before becoming effective.
+
+ The value of ifPromiscuousMode does not affect the reception
+ of broadcast and multicast packets/frames by the interface.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: true(1), false(2)
+ *
+ * Its syntax is TruthValue (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifPromiscuousMode_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ifXTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of true(1), false(2)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ifPromiscuousMode_check_value(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long ifPromiscuousMode_val)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifPromiscuousMode_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ifPromiscuousMode value.
+ */
+
+ return MFD_SUCCESS; /* ifPromiscuousMode value not illegal */
+} /* ifPromiscuousMode_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifXTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ifXTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ifPromiscuousMode_undo_setup(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifPromiscuousMode_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ifPromiscuousMode undo.
+ */
+#ifdef NETSNMP_ENABLE_PROMISCUOUSMODE_SET
+ /*
+ * copy ifPromiscuousMode data
+ * set rowreq_ctx->undo->ifPromiscuousMode from rowreq_ctx->data.ifPromiscuousMode
+ */
+ rowreq_ctx->undo->ifPromiscuousMode =
+ rowreq_ctx->data.ifPromiscuousMode;
+
+
+ return MFD_SUCCESS;
+#else
+ return MFD_NOT_VALID_EVER;
+#endif
+} /* ifPromiscuousMode_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ifPromiscuousMode_val
+ * A long containing the new value.
+ */
+int
+ifPromiscuousMode_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long ifPromiscuousMode_val)
+{
+
+ DEBUGMSGTL(("verbose:ifXTable:ifPromiscuousMode_set", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ifPromiscuousMode value.
+ * set ifPromiscuousMode value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.ifPromiscuousMode = ifPromiscuousMode_val;
+
+ return MFD_SUCCESS;
+} /* ifPromiscuousMode_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ifPromiscuousMode_undo(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ifXTable:ifPromiscuousMode_undo", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ifPromiscuousMode undo.
+ */
+#ifdef NETSNMP_ENABLE_PROMISCUOUSMODE_SET
+ /*
+ * copy ifPromiscuousMode data
+ * set rowreq_ctx->data.ifPromiscuousMode from rowreq_ctx->undo->ifPromiscuousMode
+ */
+ rowreq_ctx->data.ifPromiscuousMode =
+ rowreq_ctx->undo->ifPromiscuousMode;
+#endif
+
+ return MFD_SUCCESS;
+} /* ifPromiscuousMode_undo */
+
+/*---------------------------------------------------------------------
+ * IF-MIB::ifXEntry.ifAlias
+ * ifAlias is subid 18 of ifXEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.31.1.1.1.18
+ * Description:
+This object is an 'alias' name for the interface as
+ specified by a network manager, and provides a non-volatile
+ 'handle' for the interface.
+
+ On the first instantiation of an interface, the value of
+ ifAlias associated with that interface is the zero-length
+ string. As and when a value is written into an instance of
+ ifAlias through a network management set operation, then the
+ agent must retain the supplied value in the ifAlias instance
+ associated with the same interface for as long as that
+ interface remains instantiated, including across all re-
+ initializations/reboots of the network management system,
+ including those which result in a change of the interface's
+ ifIndex value.
+
+ An example of the value which a network manager might store
+ in this object for a WAN interface is the (Telco's) circuit
+ number/identifier of the interface.
+
+ Some agents may support write-access only for interfaces
+ having particular values of ifType. An agent which supports
+ write access to this object is required to keep the value in
+ non-volatile storage, but it may limit the length of new
+ values depending on how much storage is already occupied by
+ the current values for other interfaces.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 255a
+ *
+ * Ranges: 0 - 64;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 64)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ifAlias_val_ptr
+ * A char containing the new value.
+ * @param ifAlias_val_ptr_len
+ * The size (in bytes) of the data pointed to by ifAlias_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ifXTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OCTET_STR
+ * The length is < sizeof(rowreq_ctx->data.ifAlias).
+ * The length is in (one of) the range set(s): 0 - 64
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ifAlias_check_value(ifXTable_rowreq_ctx * rowreq_ctx,
+ char *ifAlias_val_ptr, size_t ifAlias_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifAlias_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != ifAlias_val_ptr);
+
+ /*
+ * TODO:441:o: |-> Check for valid ifAlias value.
+ */
+
+ return MFD_SUCCESS; /* ifAlias value not illegal */
+} /* ifAlias_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ifXTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ifXTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ifAlias_undo_setup(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifAlias_undo_setup", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ifAlias undo.
+ */
+ /*
+ * copy ifAlias and ifAlias_len data
+ * set rowreq_ctx->undo->ifAlias from rowreq_ctx->data.ifAlias
+ */
+ memcpy(rowreq_ctx->undo->ifAlias, rowreq_ctx->data.ifAlias,
+ (rowreq_ctx->data.ifAlias_len *
+ sizeof(rowreq_ctx->undo->ifAlias[0])));
+ rowreq_ctx->undo->ifAlias_len = rowreq_ctx->data.ifAlias_len;
+
+
+ return MFD_SUCCESS;
+} /* ifAlias_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ifAlias_val_ptr
+ * A char containing the new value.
+ * @param ifAlias_val_ptr_len
+ * The size (in bytes) of the data pointed to by ifAlias_val_ptr
+ */
+int
+ifAlias_set(ifXTable_rowreq_ctx * rowreq_ctx, char *ifAlias_val_ptr,
+ size_t ifAlias_val_ptr_len)
+{
+
+ DEBUGMSGTL(("verbose:ifXTable:ifAlias_set", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != ifAlias_val_ptr);
+
+ /*
+ * TODO:461:M: |-> Set ifAlias value.
+ * set ifAlias value in rowreq_ctx->data
+ */
+ memcpy(rowreq_ctx->data.ifAlias, ifAlias_val_ptr, ifAlias_val_ptr_len);
+ /** convert bytes to number of char */
+ rowreq_ctx->data.ifAlias_len =
+ ifAlias_val_ptr_len / sizeof(ifAlias_val_ptr[0]);
+
+ return MFD_SUCCESS;
+} /* ifAlias_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ifAlias_undo(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ifXTable:ifAlias_undo", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ifAlias undo.
+ */
+ /*
+ * copy ifAlias and ifAlias_len data
+ * set rowreq_ctx->data.ifAlias from rowreq_ctx->undo->ifAlias
+ */
+ memcpy(rowreq_ctx->data.ifAlias, rowreq_ctx->undo->ifAlias,
+ (rowreq_ctx->undo->ifAlias_len *
+ sizeof(rowreq_ctx->data.ifAlias[0])));
+ rowreq_ctx->data.ifAlias_len = rowreq_ctx->undo->ifAlias_len;
+
+
+ return MFD_SUCCESS;
+} /* ifAlias_undo */
+
+/**
+ * check dependencies
+ *
+ * This is useful for for tables which have dependencies between columns
+ * (or rows, or tables). For example, two columns allocating a percentage
+ * of something add up 100%.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ifXTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @retval MFD_SUCCESS all the changes to the row are legal
+ * @retval MFD_ERROR one or more changes are not legal
+ *
+ * (see README-table-ifXTable if you don't have dependencies)
+ */
+int
+ifXTable_check_dependencies(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("internal:ifXTable:ifXTable_check_dependencies",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:470:o: Check ifXTable row dependencies.
+ * check that all new value are legal and consistent with each other
+ */
+ return rc;
+} /* ifXTable_check_dependencies */
+
+/** @} */
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable.h
new file mode 100644
index 0000000000..72c0c84324
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable.h
@@ -0,0 +1,458 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ifXTable.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+#ifndef IFXTABLE_H
+#define IFXTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+#include <net-snmp/data_access/interface.h>
+
+#include "if-mib/ifTable/ifTable.h"
+
+ /*
+ * other required module components
+ */
+ /* *INDENT-OFF* */
+config_require(if-mib/ifTable/ifTable)
+config_require(if-mib/ifXTable/ifXTable_interface)
+config_require(if-mib/ifXTable/ifXTable_data_access)
+ /* *INDENT-ON* */
+
+ /*
+ * OID, column number and enum definions for ifXTable
+ */
+#include "ifXTable_constants.h"
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+ void init_ifXTable(void);
+ void initialize_table_ifXTable(void);
+ void shutdown_ifXTable(void);
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifXTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IF-MIB::ifXTable is subid 1 of ifMIBObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.31.1.1, length: 9
+ *
+ * we share data structures (data too, in fact) with ifTable
+ */
+
+ typedef ifTable_registration ifXTable_registration;
+ typedef ifTable_data ifXTable_data;
+ typedef ifTable_undo_data ifXTable_undo_data;
+ typedef ifTable_mib_index ifXTable_mib_index;
+ typedef ifTable_rowreq_ctx ifXTable_rowreq_ctx;
+ typedef ifTable_ref_rowreq_ctx ifXTable_ref_rowreq_ctx;
+
+#define ifXTable_data_list ifTable_data_list
+#define ifXTable_reg ifTable_reg
+
+ /*
+ *********************************************************************
+ * function prototypes
+ */
+ int ifXTable_pre_request(ifXTable_registration *
+ user_context);
+ int ifXTable_post_request(ifXTable_registration *
+ user_context, int rc);
+
+ int ifXTable_rowreq_ctx_init(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ void *user_init_ctx);
+ void ifXTable_rowreq_ctx_cleanup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifXTable_check_dependencies(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifXTable_commit(ifXTable_rowreq_ctx * rowreq_ctx);
+
+ ifXTable_rowreq_ctx *ifXTable_row_find_by_mib_index(ifXTable_mib_index
+ * mib_idx);
+
+ extern oid ifXTable_oid[];
+ extern int ifXTable_oid_size;
+
+
+#include "ifXTable_interface.h"
+#include "ifXTable_data_access.h"
+ /*
+ *********************************************************************
+ * GET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifXTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IF-MIB::ifXTable is subid 1 of ifMIBObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.31.1.1, length: 9
+ */
+ /*
+ * indexes
+ */
+
+ int ifName_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ char **ifName_val_ptr_ptr,
+ size_t * ifName_val_ptr_len_ptr);
+ int ifInMulticastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long *
+ ifInMulticastPkts_val_ptr);
+ int ifInBroadcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long *
+ ifInBroadcastPkts_val_ptr);
+ int ifOutMulticastPkts_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ifOutMulticastPkts_val_ptr);
+ int ifOutBroadcastPkts_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ifOutBroadcastPkts_val_ptr);
+ int ifHCInOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCInOctets_val_ptr);
+ int ifHCInUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCInUcastPkts_val_ptr);
+ int ifHCInMulticastPkts_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ifHCInMulticastPkts_val_ptr);
+ int ifHCInBroadcastPkts_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ifHCInBroadcastPkts_val_ptr);
+ int ifHCOutOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCOutOctets_val_ptr);
+ int ifHCOutUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 * ifHCOutUcastPkts_val_ptr);
+ int ifHCOutMulticastPkts_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ifHCOutMulticastPkts_val_ptr);
+ int ifHCOutBroadcastPkts_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ifHCOutBroadcastPkts_val_ptr);
+ int ifLinkUpDownTrapEnable_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ifLinkUpDownTrapEnable_val_ptr);
+ int ifHighSpeed_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long * ifHighSpeed_val_ptr);
+ int ifPromiscuousMode_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long *
+ ifPromiscuousMode_val_ptr);
+ int ifConnectorPresent_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ifConnectorPresent_val_ptr);
+ int ifAlias_get(ifXTable_rowreq_ctx * rowreq_ctx,
+ char **ifAlias_val_ptr_ptr,
+ size_t * ifAlias_val_ptr_len_ptr);
+ int ifCounterDiscontinuityTime_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ifCounterDiscontinuityTime_val_ptr);
+
+
+ int ifXTable_indexes_set_tbl_idx(ifXTable_mib_index *
+ tbl_idx,
+ long ifIndex_val);
+ int ifXTable_indexes_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ long ifIndex_val);
+
+
+
+ /*
+ *********************************************************************
+ * SET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifXTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IF-MIB::ifXTable is subid 1 of ifMIBObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.31.1.1, length: 9
+ */
+
+
+ int ifXTable_undo_setup(ifXTable_rowreq_ctx * rowreq_ctx);
+ int ifXTable_undo_cleanup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifXTable_undo(ifXTable_rowreq_ctx * rowreq_ctx);
+ int ifXTable_commit(ifXTable_rowreq_ctx * rowreq_ctx);
+ int ifXTable_undo_commit(ifXTable_rowreq_ctx * rowreq_ctx);
+
+
+ int ifName_check_value(ifXTable_rowreq_ctx * rowreq_ctx,
+ char *ifName_val_ptr,
+ size_t ifName_val_ptr_len);
+ int ifName_undo_setup(ifXTable_rowreq_ctx * rowreq_ctx);
+ int ifName_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ char *ifName_val_ptr,
+ size_t ifName_val_ptr_len);
+ int ifName_undo(ifXTable_rowreq_ctx * rowreq_ctx);
+
+ int ifInMulticastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ifInMulticastPkts_val);
+ int ifInMulticastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifInMulticastPkts_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long ifInMulticastPkts_val);
+ int ifInMulticastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifInBroadcastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ifInBroadcastPkts_val);
+ int ifInBroadcastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifInBroadcastPkts_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long ifInBroadcastPkts_val);
+ int ifInBroadcastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifOutMulticastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ifOutMulticastPkts_val);
+ int ifOutMulticastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifOutMulticastPkts_set(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifOutMulticastPkts_val);
+ int ifOutMulticastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifOutBroadcastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ifOutBroadcastPkts_val);
+ int ifOutBroadcastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifOutBroadcastPkts_set(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifOutBroadcastPkts_val);
+ int ifOutBroadcastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifHCInOctets_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 ifHCInOctets_val);
+ int ifHCInOctets_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCInOctets_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 ifHCInOctets_val);
+ int ifHCInOctets_undo(ifXTable_rowreq_ctx * rowreq_ctx);
+
+ int ifHCInUcastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 ifHCInUcastPkts_val);
+ int ifHCInUcastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCInUcastPkts_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 ifHCInUcastPkts_val);
+ int ifHCInUcastPkts_undo(ifXTable_rowreq_ctx * rowreq_ctx);
+
+ int ifHCInMulticastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64
+ ifHCInMulticastPkts_val);
+ int ifHCInMulticastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCInMulticastPkts_set(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 ifHCInMulticastPkts_val);
+ int ifHCInMulticastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifHCInBroadcastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64
+ ifHCInBroadcastPkts_val);
+ int ifHCInBroadcastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCInBroadcastPkts_set(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 ifHCInBroadcastPkts_val);
+ int ifHCInBroadcastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifHCOutOctets_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 ifHCOutOctets_val);
+ int ifHCOutOctets_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCOutOctets_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 ifHCOutOctets_val);
+ int ifHCOutOctets_undo(ifXTable_rowreq_ctx * rowreq_ctx);
+
+ int ifHCOutUcastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 ifHCOutUcastPkts_val);
+ int ifHCOutUcastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCOutUcastPkts_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ U64 ifHCOutUcastPkts_val);
+ int ifHCOutUcastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifHCOutMulticastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64
+ ifHCOutMulticastPkts_val);
+ int ifHCOutMulticastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCOutMulticastPkts_set(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 ifHCOutMulticastPkts_val);
+ int ifHCOutMulticastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifHCOutBroadcastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64
+ ifHCOutBroadcastPkts_val);
+ int ifHCOutBroadcastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCOutBroadcastPkts_set(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 ifHCOutBroadcastPkts_val);
+ int ifHCOutBroadcastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifLinkUpDownTrapEnable_check_value(ifXTable_rowreq_ctx
+ * rowreq_ctx,
+ u_long
+ ifLinkUpDownTrapEnable_val);
+ int ifLinkUpDownTrapEnable_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifLinkUpDownTrapEnable_set(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ifLinkUpDownTrapEnable_val);
+ int ifLinkUpDownTrapEnable_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifHighSpeed_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifHighSpeed_val);
+ int ifHighSpeed_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHighSpeed_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long ifHighSpeed_val);
+ int ifHighSpeed_undo(ifXTable_rowreq_ctx * rowreq_ctx);
+
+ int ifPromiscuousMode_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ifPromiscuousMode_val);
+ int ifPromiscuousMode_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifPromiscuousMode_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_long ifPromiscuousMode_val);
+ int ifPromiscuousMode_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifConnectorPresent_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ifConnectorPresent_val);
+ int ifConnectorPresent_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifConnectorPresent_set(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ifConnectorPresent_val);
+ int ifConnectorPresent_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifAlias_check_value(ifXTable_rowreq_ctx * rowreq_ctx,
+ char *ifAlias_val_ptr,
+ size_t ifAlias_val_ptr_len);
+ int ifAlias_undo_setup(ifXTable_rowreq_ctx * rowreq_ctx);
+ int ifAlias_set(ifXTable_rowreq_ctx * rowreq_ctx,
+ char *ifAlias_val_ptr,
+ size_t ifAlias_val_ptr_len);
+ int ifAlias_undo(ifXTable_rowreq_ctx * rowreq_ctx);
+
+ int
+ ifCounterDiscontinuityTime_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ifCounterDiscontinuityTime_val);
+ int
+ ifCounterDiscontinuityTime_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifCounterDiscontinuityTime_set(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ifCounterDiscontinuityTime_val);
+ int ifCounterDiscontinuityTime_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+ int ifXTable_check_dependencies(ifXTable_rowreq_ctx * ctx);
+
+
+ /*
+ * DUMMY markers, ignore
+ *
+ * TODO:099:x: *************************************************************
+ * TODO:199:x: *************************************************************
+ * TODO:299:x: *************************************************************
+ * TODO:399:x: *************************************************************
+ * TODO:499:x: *************************************************************
+ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IFXTABLE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_constants.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_constants.h
new file mode 100644
index 0000000000..51770ecf23
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_constants.h
@@ -0,0 +1,144 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-constants.m2c,v 1.5 2005/07/15 22:41:16 rstory Exp $
+ *
+ * $Id: ifXTable_constants.h 14043 2006-01-05 23:48:58Z rstory $
+ */
+#ifndef IFXTABLE_CONSTANTS_H
+#define IFXTABLE_CONSTANTS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ * column number definitions for table ifXTable
+ */
+#define IFXTABLE_OID 1,3,6,1,2,1,31,1,1
+
+#define COLUMN_IFNAME 1
+
+#define COLUMN_IFINMULTICASTPKTS 2
+
+#define COLUMN_IFINBROADCASTPKTS 3
+
+#define COLUMN_IFOUTMULTICASTPKTS 4
+
+#define COLUMN_IFOUTBROADCASTPKTS 5
+
+#define COLUMN_IFHCINOCTETS 6
+
+#define COLUMN_IFHCINUCASTPKTS 7
+
+#define COLUMN_IFHCINMULTICASTPKTS 8
+
+#define COLUMN_IFHCINBROADCASTPKTS 9
+
+#define COLUMN_IFHCOUTOCTETS 10
+
+#define COLUMN_IFHCOUTUCASTPKTS 11
+
+#define COLUMN_IFHCOUTMULTICASTPKTS 12
+
+#define COLUMN_IFHCOUTBROADCASTPKTS 13
+
+#define COLUMN_IFLINKUPDOWNTRAPENABLE 14
+#define COLUMN_IFLINKUPDOWNTRAPENABLE_FLAG (0x1 << 13)
+
+#define COLUMN_IFHIGHSPEED 15
+
+#define COLUMN_IFPROMISCUOUSMODE 16
+#define COLUMN_IFPROMISCUOUSMODE_FLAG (0x1 << 15)
+
+#define COLUMN_IFCONNECTORPRESENT 17
+
+#define COLUMN_IFALIAS 18
+#define COLUMN_IFALIAS_FLAG (0x1 << 17)
+
+#define COLUMN_IFCOUNTERDISCONTINUITYTIME 19
+
+
+#define IFXTABLE_MIN_COL COLUMN_IFNAME
+#define IFXTABLE_MAX_COL COLUMN_IFCOUNTERDISCONTINUITYTIME
+
+
+ /*
+ * TODO:405:r: Review IFXTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define IFXTABLE_SETTABLE_COLS (COLUMN_IFLINKUPDOWNTRAPENABLE_FLAG | COLUMN_IFALIAS_FLAG)
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table ifXTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ifLinkUpDownTrapEnable (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IFLINKUPDOWNTRAPENABLE_ENUMS
+#define IFLINKUPDOWNTRAPENABLE_ENUMS
+
+#define IFLINKUPDOWNTRAPENABLE_ENABLED 1
+#define IFLINKUPDOWNTRAPENABLE_DISABLED 2
+
+#endif /* IFLINKUPDOWNTRAPENABLE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ifPromiscuousMode (TruthValue / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef TRUTHVALUE_ENUMS
+#define TRUTHVALUE_ENUMS
+
+#define TRUTHVALUE_TRUE 1
+#define TRUTHVALUE_FALSE 2
+
+#endif /* TRUTHVALUE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ifConnectorPresent (TruthValue / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef TRUTHVALUE_ENUMS
+#define TRUTHVALUE_ENUMS
+
+#define TRUTHVALUE_TRUE 1
+#define TRUTHVALUE_FALSE 2
+
+#endif /* TRUTHVALUE_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IFXTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_data_access.c
new file mode 100644
index 0000000000..d87369bc2f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_data_access.c
@@ -0,0 +1,104 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ifXTable_data_access.c 15462 2006-10-19 21:42:46Z hardaker $
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ifXTable.h"
+
+
+#include "ifXTable_data_access.h"
+#include "if-mib/ifTable/ifTable_defs.h"
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifXTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IF-MIB::ifXTable is subid 1 of ifMIBObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.31.1.1, length: 9
+ */
+
+/**
+ * initialization for ifXTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param ifXTable_reg
+ * Pointer to ifXTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+ifXTable_init_data(ifXTable_registration * ifXTable_reg)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_init_data", "called\n"));
+
+ /*
+ * TODO:303:o: Initialize ifXTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* ifXTable_init_data */
+
+/**
+ * container overview
+ *
+ * N/A; we use the ifTable container
+ */
+
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+ifXTable_row_prep(ifXTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_row_prep", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* ifXTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_data_access.h
new file mode 100644
index 0000000000..82646fba83
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_data_access.h
@@ -0,0 +1,44 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ifXTable_data_access.h 13748 2005-11-30 20:16:18Z rstory $
+ */
+#ifndef IFXTABLE_DATA_ACCESS_H
+#define IFXTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifXTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IF-MIB::ifXTable is subid 1 of ifMIBObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.31.1.1, length: 9
+ */
+ int ifXTable_init_data(ifXTable_registration *
+ ifXTable_reg);
+
+ int ifXTable_row_prep(ifXTable_rowreq_ctx * rowreq_ctx);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IFXTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c
new file mode 100644
index 0000000000..8c329bc8f9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c
@@ -0,0 +1,2160 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ifXTable_interface.c 15462 2006-10-19 21:42:46Z hardaker $
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ifXTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "ifXTable_interface.h"
+#include "if-mib/ifTable/ifTable_interface.h"
+#include "if-mib/ifTable/ifTable_defs.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ifXTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IF-MIB::ifXTable is subid 1 of ifMIBObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.31.1.1, length: 9
+ */
+typedef struct ifXTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ ifXTable_registration *user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} ifXTable_interface_ctx;
+
+static ifXTable_interface_ctx ifXTable_if_ctx;
+
+static void _ifXTable_container_init(ifXTable_interface_ctx * if_ctx);
+static void _ifXTable_container_shutdown(ifXTable_interface_ctx *
+ if_ctx);
+
+
+netsnmp_container *
+ifXTable_container_get(void)
+{
+ return ifXTable_if_ctx.container;
+}
+
+ifXTable_registration *
+ifXTable_registration_get(void)
+{
+ return ifXTable_if_ctx.user_ctx;
+}
+
+ifXTable_registration *
+ifXTable_registration_set(ifXTable_registration * newreg)
+{
+ ifXTable_registration *old = ifXTable_if_ctx.user_ctx;
+ ifXTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+ifXTable_container_size(void)
+{
+ return CONTAINER_SIZE(ifXTable_if_ctx.container);
+}
+
+u_int
+ifXTable_dirty_get(void)
+{
+ return ifXTable_if_ctx.table_dirty;
+}
+
+void
+ifXTable_dirty_set(u_int status)
+{
+ DEBUGMSGTL(("ifXTable:ifXTable_dirty_set",
+ "called. was %d, now %d\n",
+ ifXTable_if_ctx.table_dirty, status));
+ ifXTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_ifXTable_pre_request;
+static Netsnmp_Node_Handler _mfd_ifXTable_post_request;
+static Netsnmp_Node_Handler _mfd_ifXTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_ifXTable_get_values;
+static Netsnmp_Node_Handler _mfd_ifXTable_check_objects;
+static Netsnmp_Node_Handler _mfd_ifXTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_ifXTable_set_values;
+static Netsnmp_Node_Handler _mfd_ifXTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_ifXTable_undo_values;
+static Netsnmp_Node_Handler _mfd_ifXTable_commit;
+static Netsnmp_Node_Handler _mfd_ifXTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_ifXTable_irreversible_commit;
+static Netsnmp_Node_Handler _mfd_ifXTable_check_dependencies;
+
+NETSNMP_STATIC_INLINE int _ifXTable_undo_column(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+ netsnmp_variable_list *
+ var, int column);
+
+ifXTable_data *ifXTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table ifXTable
+ * (Define its contents and how it's structured)
+ */
+void
+_ifXTable_initialize_interface(ifXTable_registration * reg_ptr,
+ u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &ifXTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &ifXTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:ifXTable:_ifXTable_initialize_interface",
+ "called\n"));
+
+ /*
+ * make sure the ifTable container has been initialized, since
+ * we use its container, and we can't guarantee that it has
+ * already been initialized.
+ */
+ (void) if_mib_container_init();
+
+ /*************************************************
+ *
+ * save interface context for ifXTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
+ /** index: ifIndex */
+ 0);
+
+ /*
+ * Define the minimum and maximum accessible columns. This
+ * optimizes retrival.
+ */
+ tbl_info->min_column = IFXTABLE_MIN_COL;
+ tbl_info->max_column = IFXTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ ifXTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ ifXTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _ifXTable_container_init(&ifXTable_if_ctx);
+ if (NULL == ifXTable_if_ctx.container)
+ return; /* msg already logged */
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_ifXTable_object_lookup;
+ access_multiplexer->get_values = _mfd_ifXTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_ifXTable_pre_request;
+ access_multiplexer->post_request = _mfd_ifXTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_ifXTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_ifXTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_ifXTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_ifXTable_set_values;
+ access_multiplexer->undo_sets = _mfd_ifXTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_ifXTable_commit;
+ access_multiplexer->undo_commit = _mfd_ifXTable_undo_commit;
+ access_multiplexer->irreversible_commit =
+ _mfd_ifXTable_irreversible_commit;
+
+ /*
+ * REQUIRED for tables with dependencies
+ */
+ access_multiplexer->consistency_checks =
+ _mfd_ifXTable_check_dependencies;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("ifXTable:init_ifXTable",
+ "Registering ifXTable as a mibs-for-dummies table.\n"));
+ handler =
+ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo =
+ netsnmp_handler_registration_create("ifXTable", handler,
+ ifXTable_oid,
+ ifXTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE);
+ if (NULL == reginfo) {
+ snmp_log(LOG_ERR, "error registering table ifXTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &ifXTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if (access_multiplexer->object_lookup)
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if (access_multiplexer->set_values)
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if (access_multiplexer->irreversible_commit)
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if (access_multiplexer->object_syntax_checks)
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if (access_multiplexer->pre_request)
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if (access_multiplexer->post_request)
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if (access_multiplexer->undo_setup)
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if (access_multiplexer->undo_cleanup)
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if (access_multiplexer->undo_sets)
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if (access_multiplexer->row_creation)
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if (access_multiplexer->consistency_checks)
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if (access_multiplexer->commit)
+ mfd_modes |= BABY_STEP_COMMIT;
+ if (access_multiplexer->undo_commit)
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ ifXTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if (NULL != ifXTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(ifXTable_if_ctx.cache);
+ netsnmp_inject_handler(reginfo, handler);
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+ /*
+ * register config/persistence callbacks
+ */
+ ifXTable_container_init_persistence(ifXTable_if_ctx.container);
+
+} /* _ifXTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table ifXTable
+ */
+void
+_ifXTable_shutdown_interface(ifXTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _ifXTable_container_shutdown(&ifXTable_if_ctx);
+}
+
+void
+ifXTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ ifXTable_if_ctx.tbl_info.valid_columns = vc;
+} /* ifXTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+ifXTable_index_to_oid(netsnmp_index * oid_idx,
+ ifXTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * ifIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+ */
+ netsnmp_variable_list var_ifIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_ifIndex, 0x00, sizeof(var_ifIndex));
+ var_ifIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_ifIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_index_to_oid", "called\n"));
+
+ /*
+ * ifIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+ */
+ snmp_set_var_value(&var_ifIndex, (u_char *) & mib_idx->ifIndex,
+ sizeof(mib_idx->ifIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_ifIndex);
+ if (err)
+ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_ifIndex);
+
+ return err;
+} /* ifXTable_index_to_oid */
+
+/**
+ * extract ifXTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+ifXTable_index_from_oid(netsnmp_index * oid_idx,
+ ifXTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * ifIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
+ */
+ netsnmp_variable_list var_ifIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_ifIndex, 0x00, sizeof(var_ifIndex));
+ var_ifIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_ifIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_index_from_oid", "called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes(oid_idx->oids, oid_idx->len, &var_ifIndex);
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->ifIndex = *((long *) var_ifIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_ifIndex);
+
+ return err;
+} /* ifXTable_index_from_oid */
+
+
+/*
+ * ifXTable_allocate_data
+ *
+ * Purpose: create new ifXTable_data.
+ */
+ifXTable_data *
+ifXTable_allocate_data(void)
+{
+ ifXTable_data *rtn = SNMP_MALLOC_TYPEDEF(ifXTable_data);
+
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_allocate_data", "called\n"));
+
+ if (NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "ifXTable_data.\n");
+ }
+
+ return rtn;
+} /* ifXTable_allocate_data */
+
+/*
+ * ifXTable_release_data
+ *
+ * Purpose: release ifXTable data.
+ */
+void
+ifXTable_release_data(ifXTable_data * data)
+{
+ DEBUGMSGTL(("verbose:ifXTable:ifXTable_release_data", "called\n"));
+
+ free(data);
+} /* ifXTable_release_data */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ifXTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ifXTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = ifXTable_pre_request(ifXTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ifXTable", "error %d from "
+ "ifXTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifXTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ifXTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ifXTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ ifTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ifXTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && ifXTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "ifXTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = ifXTable_post_request(ifXTable_if_ctx.user_ctx, packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ifXTable", "error %d from "
+ "ifXTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifXTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ifXTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ ifXTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_object_lookup",
+ "called\n"));
+
+ /*
+ * get our context from mfd
+ * ifXTable_interface_ctx *if_ctx =
+ * (ifXTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if (NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ ifXTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_ifXTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ifXTable_get_column(ifXTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ifName(1)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+ */
+ case COLUMN_IFNAME:
+ var->type = ASN_OCTET_STR;
+ rc = ifName_get(rowreq_ctx, (char **) &var->val.string,
+ &var->val_len);
+ break;
+
+ /*
+ * ifInMulticastPkts(2)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINMULTICASTPKTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifInMulticastPkts_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifInBroadcastPkts(3)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINBROADCASTPKTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifInBroadcastPkts_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifOutMulticastPkts(4)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTMULTICASTPKTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifOutMulticastPkts_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifOutBroadcastPkts(5)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTBROADCASTPKTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ifOutBroadcastPkts_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifHCInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCINOCTETS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ifHCInOctets_get(rowreq_ctx, (U64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCInUcastPkts(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCINUCASTPKTS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ifHCInUcastPkts_get(rowreq_ctx, (U64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCInMulticastPkts(8)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCINMULTICASTPKTS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ifHCInMulticastPkts_get(rowreq_ctx, (U64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCInBroadcastPkts(9)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCINBROADCASTPKTS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ifHCInBroadcastPkts_get(rowreq_ctx, (U64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCOutOctets(10)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCOUTOCTETS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ifHCOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCOutUcastPkts(11)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCOUTUCASTPKTS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ifHCOutUcastPkts_get(rowreq_ctx, (U64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCOutMulticastPkts(12)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCOUTMULTICASTPKTS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ifHCOutMulticastPkts_get(rowreq_ctx, (U64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCOutBroadcastPkts(13)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCOUTBROADCASTPKTS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ifHCOutBroadcastPkts_get(rowreq_ctx, (U64 *) var->val.string);
+ break;
+
+ /*
+ * ifLinkUpDownTrapEnable(14)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFLINKUPDOWNTRAPENABLE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ifLinkUpDownTrapEnable_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifHighSpeed(15)/GAUGE/ASN_GAUGE/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHIGHSPEED:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_GAUGE;
+ rc = ifHighSpeed_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifPromiscuousMode(16)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFPROMISCUOUSMODE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ifPromiscuousMode_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifConnectorPresent(17)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_IFCONNECTORPRESENT:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ifConnectorPresent_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ifAlias(18)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ case COLUMN_IFALIAS:
+ var->type = ASN_OCTET_STR;
+ rc = ifAlias_get(rowreq_ctx, (char **) &var->val.string,
+ &var->val_len);
+ break;
+
+ /*
+ * ifCounterDiscontinuityTime(19)/TimeStamp/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFCOUNTERDISCONTINUITYTIME:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_TIMETICKS;
+ rc = ifCounterDiscontinuityTime_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ default:
+ snmp_log(LOG_ERR, "unknown column %d in _ifXTable_get_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ifXTable_get_column */
+
+int
+_mfd_ifXTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ifXTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ u_char *old_string;
+ void (*dataFreeHook) (void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_get_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if (NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ } else if (requests->requestvb->buf ==
+ requests->requestvb->val.string) {
+ if (requests->requestvb->val_len !=
+ sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ifXTable_get_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ if (MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ } else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if (rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if (old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if (dataFreeHook)
+ (*dataFreeHook) (old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifXTable_get_values */
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ifXTable_check_column(ifXTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ifXTable:_ifXTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ifName(1)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+ */
+ case COLUMN_IFNAME:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifInMulticastPkts(2)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINMULTICASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifInBroadcastPkts(3)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFINBROADCASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifOutMulticastPkts(4)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTMULTICASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifOutBroadcastPkts(5)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFOUTBROADCASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifHCInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCINOCTETS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifHCInUcastPkts(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCINUCASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifHCInMulticastPkts(8)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCINMULTICASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifHCInBroadcastPkts(9)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCINBROADCASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifHCOutOctets(10)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCOUTOCTETS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifHCOutUcastPkts(11)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCOUTUCASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifHCOutMulticastPkts(12)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCOUTMULTICASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifHCOutBroadcastPkts(13)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCOUTBROADCASTPKTS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifLinkUpDownTrapEnable(14)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFLINKUPDOWNTRAPENABLE:
+ rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
+ sizeof(rowreq_ctx->data.
+ ifLinkUpDownTrapEnable));
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (*var->val.integer != IFLINKUPDOWNTRAPENABLE_ENABLED)
+ && (*var->val.integer != IFLINKUPDOWNTRAPENABLE_DISABLED)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ifXTable:_ifXTable_check_column:ifLinkUpDownTrapEnable", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ifLinkUpDownTrapEnable_check_value(rowreq_ctx,
+ *((u_long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ifLinkUpDownTrapEnable_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ifHighSpeed(15)/GAUGE/ASN_GAUGE/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHIGHSPEED:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifPromiscuousMode(16)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFPROMISCUOUSMODE:
+ rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
+ sizeof(rowreq_ctx->data.
+ ifPromiscuousMode));
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (*var->val.integer != TRUTHVALUE_TRUE)
+ && (*var->val.integer != TRUTHVALUE_FALSE)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ifXTable:_ifXTable_check_column:ifPromiscuousMode", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ifPromiscuousMode_check_value(rowreq_ctx,
+ *((u_long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ifPromiscuousMode_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ifConnectorPresent(17)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_IFCONNECTORPRESENT:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ifAlias(18)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ case COLUMN_IFALIAS:
+ rc = netsnmp_check_vb_type_and_max_size(var, ASN_OCTET_STR,
+ sizeof(rowreq_ctx->data.
+ ifAlias));
+ /*
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((var->val_len < 0) || (var->val_len > 64))
+ ) {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ifXTable:_ifXTable_check_column:ifAlias",
+ "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ifAlias_check_value(rowreq_ctx, (char *) var->val.string,
+ var->val_len);
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from ifAlias_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ifCounterDiscontinuityTime(19)/TimeStamp/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFCOUNTERDISCONTINUITYTIME:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _ifXTable_check_column\n",
+ column);
+ }
+
+ return rc;
+} /* _ifXTable_check_column */
+
+int
+_mfd_ifXTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ifXTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_check_objects",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ifXTable_check_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifXTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: check dependencies
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check dependencies wrapper
+ */
+static int
+_mfd_ifXTable_check_dependencies(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ifXTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_check_dependencies",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ifXTable_check_dependencies(rowreq_ctx);
+ if (rc) {
+ DEBUGMSGTL(("ifXTable:mfd", "error %d from "
+ "ifXTable_check_dependencies\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifXTable_check_dependencies */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ifXTable_undo_setup_column(ifXTable_rowreq_ctx * rowreq_ctx, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ifXTable:_ifXTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ifLinkUpDownTrapEnable(14)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFLINKUPDOWNTRAPENABLE:
+ rowreq_ctx->column_set_flags |= COLUMN_IFLINKUPDOWNTRAPENABLE_FLAG;
+ rc = ifLinkUpDownTrapEnable_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ifPromiscuousMode(16)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFPROMISCUOUSMODE:
+ rowreq_ctx->column_set_flags |= COLUMN_IFPROMISCUOUSMODE_FLAG;
+ rc = ifPromiscuousMode_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ifAlias(18)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ case COLUMN_IFALIAS:
+ rowreq_ctx->column_set_flags |= COLUMN_IFALIAS_FLAG;
+ rc = ifAlias_undo_setup(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ifXTable_undo_setup_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ifXTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_ifXTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ifXTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_undo_setup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = ifXTable_allocate_data();
+ if (NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = ifXTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ifXTable:mfd", "error %d from "
+ "ifXTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ } else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info *tri;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ifXTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ifXTable:mfd", "error %d from "
+ "ifXTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifXTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_ifXTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ifXTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_undo_cleanup",
+ "called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = ifXTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ifXTable:mfd", "error %d from "
+ "ifXTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if (rowreq_ctx->undo) {
+ ifXTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifXTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ifXTable_set_column(ifXTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ifXTable:_ifXTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ifLinkUpDownTrapEnable(14)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFLINKUPDOWNTRAPENABLE:
+ rowreq_ctx->column_set_flags |= COLUMN_IFLINKUPDOWNTRAPENABLE_FLAG;
+ rc = ifLinkUpDownTrapEnable_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ /*
+ * ifPromiscuousMode(16)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFPROMISCUOUSMODE:
+ rowreq_ctx->column_set_flags |= COLUMN_IFPROMISCUOUSMODE_FLAG;
+ rc = ifPromiscuousMode_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ /*
+ * ifAlias(18)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ case COLUMN_IFALIAS:
+ rowreq_ctx->column_set_flags |= COLUMN_IFALIAS_FLAG;
+ rc = ifAlias_set(rowreq_ctx, (char *) var->val.string,
+ var->val_len);
+ break;
+
+ default:
+ snmp_log(LOG_ERR, "unknown column %d in _ifXTable_set_column\n",
+ column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _ifXTable_set_column */
+
+int
+_mfd_ifXTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ifXTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_set_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ifXTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ifXTable:mfd", "error %d from "
+ "ifXTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifXTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_ifXTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ifXTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ifXTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ifXTable:mfd", "error %d from "
+ "ifXTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ ifXTable_dirty_set(ifXTable_dirty_get() + 1); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_ifXTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ifXTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_undo_commit",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = ifXTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if (d)
+ ifXTable_dirty_set(d - 1);
+ }
+
+ rc = ifXTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ifXTable:mfd", "error %d from "
+ "ifXTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING,
+ "ifXTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifXTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ifXTable_undo_column(ifXTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ifXTable:_ifXTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ifLinkUpDownTrapEnable(14)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFLINKUPDOWNTRAPENABLE:
+ rc = ifLinkUpDownTrapEnable_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ifPromiscuousMode(16)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IFPROMISCUOUSMODE:
+ rc = ifPromiscuousMode_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ifAlias(18)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ case COLUMN_IFALIAS:
+ rc = ifAlias_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR, "unknown column %d in _ifXTable_undo_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ifXTable_undo_column */
+
+int
+_mfd_ifXTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ifXTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_undo_values",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ifXTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ifXTable:mfd", "error %d from "
+ "ifXTable_undo\n", rc));
+ }
+
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ifXTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ifXTable:mfd", "error %d from "
+ "ifXTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifXTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_ifXTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ifXTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ifXTable:_mfd_ifXTable_irreversible:commit",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ CONTAINER_REMOVE(ifXTable_if_ctx.container, rowreq_ctx);
+ } else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ifXTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_ifXTable_container_init(ifXTable_interface_ctx * if_ctx)
+{
+ DEBUGMSGTL(("internal:ifXTable:_ifXTable_container_init", "called\n"));
+
+ /*
+ * cache init
+ *
+ * special case: sharing a cache
+ */
+ if_ctx->cache =
+ netsnmp_cache_find_by_oid(ifTable_oid, ifTable_oid_size);
+ if (NULL != if_ctx->cache) {
+ if_ctx->container = (netsnmp_container *) if_ctx->cache->magic;
+ return;
+ } else {
+ snmp_log(LOG_ERR, "error finding ifTable cache\n");
+ }
+}
+
+/*
+ * allow direct access to container.
+ */
+netsnmp_container *
+_ifXTable_container_get(void)
+{
+ return ifXTable_if_ctx.container;
+}
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_ifXTable_container_shutdown(ifXTable_interface_ctx * if_ctx)
+{
+ DEBUGMSGTL(("internal:ifXTable:_ifXTable_container_shutdown",
+ "called\n"));
+
+ /*
+ * ifTable does this for us
+ */
+} /* _ifXTable_container_shutdown */
+
+/***********************************************************************
+ *
+ * PERSISTENCE
+ *
+ ***********************************************************************/
+
+static int _ifXTable_container_save_rows(int majorID, int minorID,
+ void *serverarg,
+ void *clientarg);
+static void _ifXTable_container_row_restore(const char *token,
+ char *buf);
+static int _ifXTable_container_row_save(ifXTable_rowreq_ctx *
+ rowreq_ctx, void *type);
+static char *_ifXTable_container_col_restore(ifXTable_rowreq_ctx *
+ rowreq_ctx, u_int col,
+ char *buf);
+static char *_ifXTable_container_col_save(ifXTable_rowreq_ctx *
+ rowreq_ctx, u_int col,
+ char *buf);
+
+static char row_token[] = "ifXTable";
+
+/************************************************************
+ * *_init_persistence should be called from the main table
+ * init routine.
+ *
+ * If your table depends on rows in another table,
+ * you should register your callback after the other table,
+ * which should ensure the rows on which you depend are saved
+ * (and re-created) before the dependent rows.
+ */
+void
+ifXTable_container_init_persistence(netsnmp_container *container)
+{
+ int rc;
+
+ register_config_handler(NULL, row_token,
+ _ifXTable_container_row_restore, NULL, NULL);
+ rc = snmp_register_callback(SNMP_CALLBACK_LIBRARY,
+ SNMP_CALLBACK_STORE_DATA,
+ _ifXTable_container_save_rows, container);
+
+ if (rc != SNMP_ERR_NOERROR)
+ snmp_log(LOG_ERR, "error registering for STORE_DATA callback "
+ "in _ifXTable_container_init_persistence\n");
+}
+
+static int
+_ifXTable_container_save_rows(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char sep[] =
+ "##############################################################";
+ char buf[] = "#\n" "# ifXTable persistent data\n" "#";
+ char *type = netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_APPTYPE);
+
+ read_config_store((char *) type, sep);
+ read_config_store((char *) type, buf);
+
+ /*
+ * save all rows
+ */
+ CONTAINER_FOR_EACH((netsnmp_container *) clientarg,
+ (netsnmp_container_obj_func *)
+ _ifXTable_container_row_save, type);
+
+ read_config_store((char *) type, sep);
+ read_config_store((char *) type, "\n");
+
+ /*
+ * never fails
+ */
+ return SNMPERR_SUCCESS;
+}
+
+
+
+/************************************************************
+ * _ifXTable_container_row_save
+ */
+static int
+_ifXTable_container_row_save(ifXTable_rowreq_ctx * rowreq_ctx, void *type)
+{
+ /*
+ * Allocate space for a line with all data for a row. An
+ * attempt is made to come up with a default maximum size, but
+ * there is no guarantee it will be enough. It probably will be,
+ * unless you are dealing with large values or you have external
+ * indexes.
+ *
+ * 1) allocate space for each column. Comment out columns you don't
+ * intend to save. You may also need to add room for any non-
+ * column data you want to store. Remeber, data will be stored in
+ * ASCII form, so you need to allow for that. Here are some
+ * general guidelines:
+ *
+ * Object ID : 12 * len [ASCII len of max int + 1 for .]
+ * Octet String: (2 * len) + 2 [2 ASCII chars per byte + "0x"]
+ * Integers : 12 [ASCII len for smallest negative number]
+ *
+ * 2) You also need to allocate space for the row index. This will
+ * be stored as an OID, which means that Octet Strings need to
+ * be treated a little differently. Specifically, you will need
+ * (4 * len) + 4 [3 ASCII chars per byte + 1 for ., + 4 for len].
+ *
+ * 3) Also, remeber to add space for the identifier and seperator
+ * characters (for example, each column is prefixed by the
+ * column number and a semicolon. To allow for the maximum
+ * column values, 12 bytes [11 for oid + 1 for ':'] per
+ * column are added).
+ */
+ /** xxx: add storage for external index(s)! */
+#define MAX_ROW_SIZE (sizeof(row_token) + 1 + \
+ ( 12 ) + /* ASN_INTEGER ifLinkUpDownTrapEnable */ \
+ ( 12 ) + /* ASN_INTEGER ifPromiscuousMode */ \
+ ( ( 2 * sizeof(rowreq_ctx->data.ifAlias) ) + 3 ) + /* ASN_OCTET_STR */ \
+ ( IFXTABLE_MAX_COL * 12 ) + /* column num prefix + : */ \
+ 2 /* LINE_TERM_CHAR + \n */ )
+
+ char buf[MAX_ROW_SIZE], *pos = buf, *max =
+ &buf[MAX_ROW_SIZE - 1];
+ char *tmp;
+ int i;
+
+ if (ifXTable_container_should_save(rowreq_ctx) == 0) {
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * build the line
+ */
+ pos += sprintf(pos, "%s ", row_token);
+ pos = read_config_save_objid(pos, rowreq_ctx->oid_idx.oids,
+ rowreq_ctx->oid_idx.len);
+ if (NULL == pos) {
+ snmp_log(LOG_ERR, "error saving ifXTable row "
+ "to persistent file\n");
+ return SNMP_ERR_GENERR;
+ }
+ *pos++ = ' ';
+ if (pos > max) {
+ snmp_log(LOG_ERR, "error saving ifXTable row "
+ "to persistent file (too long)\n");
+ return SNMP_ERR_GENERR;
+ }
+
+ /*
+ * add each column
+ */
+ for (i = IFXTABLE_MIN_COL; i <= IFXTABLE_MAX_COL; ++i) {
+
+ if ((0x1 << (i - 1)) & ~IFXTABLE_SETTABLE_COLS)
+ continue;
+
+ tmp = pos;
+ pos = _ifXTable_container_col_save(rowreq_ctx, i, pos);
+ if (NULL == pos)
+ pos = tmp;
+ else
+ *pos++ = ' ';
+ if (pos > max) {
+ snmp_log(LOG_ERR, "error saving ifXTable row "
+ "to persistent file (too long)\n");
+ return SNMP_ERR_GENERR;
+ }
+ }
+
+ /*
+ * if you have non-column data, add it here
+ */
+
+
+ /*
+ * store the line
+ */
+ pos += sprintf(pos, "%c", LINE_TERM_CHAR);
+ if (pos > max) {
+ snmp_log(LOG_ERR, "error saving ifXTable row "
+ "to persistent file (too long)\n");
+ return SNMP_ERR_GENERR;
+ }
+ read_config_store((char *) type, buf);
+
+ DEBUGMSGTL(("internal:ifXTable:_ifXTable_container_row_save",
+ "saving line '%s'\n", buf));
+
+ return SNMP_ERR_NOERROR;
+}
+
+static void
+_ifXTable_container_row_restore(const char *token, char *buf)
+{
+ ifXTable_rowreq_ctx *rowreq_ctx;
+ netsnmp_container *container;
+ netsnmp_index index;
+ oid tmp_oid[MAX_ifTable_IDX_LEN];
+ u_int col = 0, found = 0;
+
+
+ if (strncmp(token, row_token, sizeof(row_token)) != 0) {
+ snmp_log(LOG_ERR,
+ "unknown token in _ifXTable_container_row_restore\n");
+ return;
+ }
+
+ container = _ifXTable_container_get();
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "null container in _ifXTable_restore\n");
+ return;
+ }
+
+ DEBUGMSGTL(("internal:ifXTable:_ifXTable_container_row_restore",
+ "parsing line '%s'\n", buf));
+
+ /*
+ * pull out index and find row. (Since we populate the cache
+ * during startup, all rows should exist.)
+ */
+ index.oids = tmp_oid;
+ index.len = OID_LENGTH(tmp_oid);
+ buf = read_config_read_objid(buf, &index.oids, &index.len);
+ if (NULL == buf) {
+ snmp_log(LOG_ERR, "error reading row index in "
+ "_ifXTable_container_row_restore\n");
+ return;
+ }
+ rowreq_ctx = CONTAINER_FIND(container, &index);
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "error finding row index in "
+ "_ifXTable_container_row_restore\n");
+ return;
+ }
+
+ /*
+ * loop through and get each column
+ */
+ buf = skip_white(buf);
+ while ((NULL != buf) && isdigit(*buf)) {
+ /*
+ * extract column, skip ':'
+ */
+ col = (u_int) strtol(buf, &buf, 10);
+ if (NULL == buf)
+ break;
+ if (*buf != ':') {
+ buf = NULL;
+ break;
+ }
+ ++buf; /* skip : */
+
+ /*
+ * parse value
+ */
+ DEBUGMSGTL(("_ifXTable_container_row_restore",
+ "parsing column %d\n", col));
+ buf = _ifXTable_container_col_restore(rowreq_ctx, col, buf);
+ ++found;
+ }
+ if (0 == found) {
+ snmp_log(LOG_ERR, "error parsing ifXTable row; no columns found\n");
+ ifTable_release_rowreq_ctx(rowreq_ctx);
+ return;
+ }
+
+ /*
+ * if you added any non-column data, this is where
+ * you should handle it.
+ */
+
+ /*
+ * if the pointer is NULL and we didn't reach the
+ * end of the line, something went wrong. Log message,
+ * and bail.
+ */
+ if ((buf == NULL) || (*buf != LINE_TERM_CHAR)) {
+ snmp_log(LOG_ERR, "error parsing ifXTable row around column %d\n",
+ col);
+ return;
+ }
+
+ DEBUGMSGTL(("internal:ifXTable:_ifXTable_container_row_restore",
+ "inserting row\n"));
+}
+
+/************************************************************
+ * _ifXTable_container_col_save
+ */
+static char *
+_ifXTable_container_col_save(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_int col, char *buf)
+{
+ if ((NULL == rowreq_ctx) || (NULL == buf)) {
+ snmp_log(LOG_ERR, "bad parameter in "
+ "_ifXTable_container_col_save\n");
+ return NULL;
+ }
+
+ DEBUGMSGTL(("internal:ifXTable:_ifXTable_container_col_save",
+ "processing column %d\n", col));
+
+ /*
+ * prefix with column number, so we don't ever depend on
+ * order saved.
+ */
+ buf += sprintf(buf, "%u:", col);
+
+ /*
+ * save data for the column
+ */
+ switch (col) {
+
+ case COLUMN_IFLINKUPDOWNTRAPENABLE: /** INTEGER = ASN_INTEGER */
+ buf +=
+ sprintf(buf, "%ld", rowreq_ctx->data.ifLinkUpDownTrapEnable);
+ break;
+
+ case COLUMN_IFALIAS: /** DisplayString = ASN_OCTET_STR */
+ buf = read_config_save_octet_string(buf, rowreq_ctx->data.ifAlias,
+ rowreq_ctx->data.ifAlias_len);
+ break;
+
+ default:
+ /** We shouldn't get here */
+ snmp_log(LOG_ERR, "unknown column %d in "
+ "_ifXTable_container_col_save\n", col);
+ return NULL;
+ }
+
+ return buf;
+}
+
+/************************************************************
+ * _ifXTable_container_col_restore
+ */
+static char *
+_ifXTable_container_col_restore(ifXTable_rowreq_ctx * rowreq_ctx,
+ u_int col, char *buf)
+{
+ size_t len;
+ if ((NULL == rowreq_ctx) || (NULL == buf)) {
+ snmp_log(LOG_ERR, "bad parameter in "
+ "_ifXTable_container_col_restore\n");
+ return NULL;
+ }
+
+ DEBUGMSGTL(("verbose:ifXTable:_ifXTable_container_col_restore",
+ "processing column %d\n", col));
+
+ /*
+ * restore data for the column
+ */
+ switch (col) {
+
+ case COLUMN_IFLINKUPDOWNTRAPENABLE: /** INTEGER = ASN_INTEGER */
+ len = sizeof(rowreq_ctx->data.ifLinkUpDownTrapEnable);
+ buf = read_config_read_memory(ASN_INTEGER, buf,
+ (char *) &rowreq_ctx->data.
+ ifLinkUpDownTrapEnable, &len);
+ break;
+
+ case COLUMN_IFALIAS: /** DisplayString = ASN_OCTET_STR */
+ rowreq_ctx->data.ifAlias_len = sizeof(rowreq_ctx->data.ifAlias);
+ buf = read_config_read_memory(ASN_OCTET_STR, buf,
+ (char *) &rowreq_ctx->data.ifAlias,
+ (size_t *) & rowreq_ctx->data.
+ ifAlias_len);
+ break;
+
+ default:
+ /** We shouldn't get here */
+ snmp_log(LOG_ERR, "unknown column %d in "
+ "_ifXTable_container_col_restore\n", col);
+ return NULL;
+ }
+
+ return buf;
+}
+
+
+ifXTable_rowreq_ctx *
+ifXTable_row_find_by_mib_index(ifXTable_mib_index * mib_idx)
+{
+ ifXTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = ifXTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(ifXTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.h
new file mode 100644
index 0000000000..f94fb5720b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.h
@@ -0,0 +1,105 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ifXTable_interface.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/** @ingroup interface Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef IFXTABLE_INTERFACE_H
+#define IFXTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "ifXTable.h"
+
+ /*
+ ********************************************************************
+ * Table declarations
+ */
+
+ /*
+ * PUBLIC interface initialization routine
+ */
+ void _ifXTable_initialize_interface(ifXTable_registration *
+ user_ctx, u_long flags);
+ void _ifXTable_shutdown_interface(ifXTable_registration *
+ user_ctx);
+
+ ifXTable_registration *ifXTable_registration_get(void);
+
+ ifXTable_registration *ifXTable_registration_set(ifXTable_registration
+ * newreg);
+
+ netsnmp_container *ifXTable_container_get(void);
+ int ifXTable_container_size(void);
+
+ u_int ifXTable_dirty_get(void);
+ void ifXTable_dirty_set(u_int status);
+
+ ifXTable_rowreq_ctx *ifXTable_allocate_rowreq_ctx(void *);
+ void ifXTable_release_rowreq_ctx(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifXTable_index_to_oid(netsnmp_index * oid_idx,
+ ifXTable_mib_index * mib_idx);
+ int ifXTable_index_from_oid(netsnmp_index * oid_idx,
+ ifXTable_mib_index * mib_idx);
+
+ /*
+ *********************************************************************
+ * Persistent declarations
+ */
+ /*
+ * persistence
+ */
+#define LINE_TERM_CHAR '$'
+
+ void ifXTable_container_init_persistence(netsnmp_container
+ *container);
+ int ifXTable_container_should_save(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+ /*
+ * access to certain internals. use with caution!
+ */
+ void ifXTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IFXTABLE_INTERFACE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib.h
new file mode 100644
index 0000000000..969ba17bd6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib.h
@@ -0,0 +1,7 @@
+/*
+ * module to include the modules
+ */
+
+config_require(ip-forward-mib/ipCidrRouteTable);
+config_require(ip-forward-mib/inetCidrRouteTable);
+config_add_mib(IP-FORWARD-MIB)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route.h
new file mode 100644
index 0000000000..83eb6518d0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route.h
@@ -0,0 +1,31 @@
+/*
+ * route data access header
+ *
+ * $Id: route.h 13271 2005-10-28 15:29:23Z rstory $
+ */
+/**---------------------------------------------------------------------*/
+/*
+ * configure required files
+ *
+ * Notes:
+ *
+ * 1) prefer functionality over platform, where possible. If a method
+ * is available for multiple platforms, test that first. That way
+ * when a new platform is ported, it won't need a new test here.
+ *
+ * 2) don't do detail requirements here. If, for example,
+ * HPUX11 had different reuirements than other HPUX, that should
+ * be handled in the *_hpux.h header file.
+ */
+config_require(ip-forward-mib/data_access/route_common)
+
+#if defined( linux )
+config_require(ip-forward-mib/data_access/route_linux)
+config_require(ip-forward-mib/data_access/route_ioctl)
+#else
+#error "the route data access library is not available for this platform."
+#endif
+
+/** need interface for ifIndex */
+config_require(if-mib/data_access/interface)
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_common.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_common.c
new file mode 100644
index 0000000000..4882615c3a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_common.c
@@ -0,0 +1,279 @@
+/*
+ * Interface MIB architecture support
+ *
+ * $Id: route_common.c 16612 2007-07-16 23:59:44Z hardaker $
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include "mibII/mibII_common.h"
+
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/data_access/route.h>
+
+/**---------------------------------------------------------------------*/
+/*
+ * local static prototypes
+ */
+static void _access_route_entry_release(netsnmp_route_entry * entry, void *unused);
+
+/**---------------------------------------------------------------------*/
+/*
+ * external per-architecture functions prototypes
+ *
+ * These shouldn't be called by the general public, so they aren't in
+ * the header file.
+ */
+extern int netsnmp_access_route_container_arch_load(netsnmp_container* container,
+ u_int load_flags);
+extern int
+netsnmp_arch_route_create(netsnmp_route_entry *entry);
+extern int
+netsnmp_arch_route_delete(netsnmp_route_entry *entry);
+
+
+/**---------------------------------------------------------------------*/
+/*
+ * container functions
+ */
+
+/**
+ * @retval NULL error
+ * @retval !NULL pointer to container
+ */
+netsnmp_container*
+netsnmp_access_route_container_load(netsnmp_container* container, u_int load_flags)
+{
+ int rc;
+
+ DEBUGMSGTL(("access:route:container", "load\n"));
+
+ if (NULL == container)
+ container = netsnmp_container_find("access:_route:table_container");
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "no container specified/found for access_route\n");
+ return NULL;
+ }
+
+ rc = netsnmp_access_route_container_arch_load(container, load_flags);
+ if (0 != rc) {
+ netsnmp_access_route_container_free(container, NETSNMP_ACCESS_ROUTE_FREE_NOFLAGS);
+ container = NULL;
+ }
+
+ return container;
+}
+
+void
+netsnmp_access_route_container_free(netsnmp_container *container, u_int free_flags)
+{
+ DEBUGMSGTL(("access:route:container", "free\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container for netsnmp_access_route_free\n");
+ return;
+ }
+
+ if(! (free_flags & NETSNMP_ACCESS_ROUTE_FREE_DONT_CLEAR)) {
+ /*
+ * free all items.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func*)_access_route_entry_release,
+ NULL);
+ }
+
+ if(! (free_flags & NETSNMP_ACCESS_ROUTE_FREE_KEEP_CONTAINER))
+ CONTAINER_FREE(container);
+}
+
+/**---------------------------------------------------------------------*/
+/*
+ * ifentry functions
+ */
+/** create route entry
+ *
+ * @note:
+ * if you create a route for entry into a container of your own, you
+ * must set ns_rt_index to a unique index for your container.
+ */
+netsnmp_route_entry *
+netsnmp_access_route_entry_create(void)
+{
+ netsnmp_route_entry *entry = SNMP_MALLOC_TYPEDEF(netsnmp_route_entry);
+ if(NULL == entry) {
+ snmp_log(LOG_ERR, "could not allocate route entry\n");
+ return NULL;
+ }
+
+ entry->oid_index.oids = &entry->ns_rt_index;
+ entry->oid_index.len = 1;
+
+ entry->rt_metric1 = -1;
+ entry->rt_metric2 = -1;
+ entry->rt_metric3 = -1;
+ entry->rt_metric4 = -1;
+ entry->rt_metric5 = -1;
+
+ /** entry->row_status? */
+
+ return entry;
+}
+
+/**
+ */
+void
+netsnmp_access_route_entry_free(netsnmp_route_entry * entry)
+{
+ if (NULL == entry)
+ return;
+
+#ifdef USING_IP_FORWARD_MIB_INETCIDRROUTETABLE_INETCIDRROUTETABLE_MODULE
+ if ((NULL != entry->rt_policy) &&
+ !(entry->flags & NETSNMP_ACCESS_ROUTE_POLICY_STATIC))
+ free(entry->rt_policy);
+#endif
+#ifdef USING_IP_FORWARD_MIB_IPCIDRROUTETABLE_IPCIDRROUTETABLE_MODULE
+ if (NULL != entry->rt_info)
+ free(entry->rt_info);
+#endif
+
+ free(entry);
+}
+
+
+/**
+ * update underlying data store (kernel) for entry
+ *
+ * @retval 0 : success
+ * @retval -1 : error
+ */
+int
+netsnmp_access_route_entry_set(netsnmp_route_entry * entry)
+{
+ int rc = SNMP_ERR_NOERROR;
+
+ if (NULL == entry) {
+ netsnmp_assert(NULL != entry);
+ return -1;
+ }
+
+ /*
+ *
+ */
+ if (entry->flags & NETSNMP_ACCESS_ROUTE_CREATE) {
+ rc = netsnmp_arch_route_create(entry);
+ }
+ else if (entry->flags & NETSNMP_ACCESS_ROUTE_CHANGE) {
+ /** xxx-rks:9 route change not implemented */
+ snmp_log(LOG_ERR,"netsnmp_access_route_entry_set change not supported yet\n");
+ rc = -1;
+ }
+ else if (entry->flags & NETSNMP_ACCESS_ROUTE_DELETE) {
+ rc = netsnmp_arch_route_delete(entry);
+ }
+ else {
+ snmp_log(LOG_ERR,"netsnmp_access_route_entry_set with no mode\n");
+ netsnmp_assert(!"route_entry_set == unknown mode"); /* always false */
+ rc = -1;
+ }
+
+ return rc;
+}
+
+/**
+ * copy an route_entry
+ *
+ * @retval -1 : error
+ * @retval 0 : no error
+ */
+int
+netsnmp_access_route_entry_copy(netsnmp_route_entry *lhs,
+ netsnmp_route_entry *rhs)
+{
+#if 0 /* no arch stuff in route (yet) */
+ int rc;
+
+ /*
+ * copy arch stuff. we don't care if it changed
+ */
+ rc = netsnmp_arch_route_entry_copy(lhs,rhs);
+ if (0 != rc) {
+ snmp_log(LOG_ERR,"arch route copy failed\n");
+ return -1;
+ }
+#endif
+
+ lhs->if_index = rhs->if_index;
+
+ lhs->rt_dest_len = rhs->rt_dest_len;
+ memcpy(lhs->rt_dest, rhs->rt_dest, rhs->rt_dest_len);
+ lhs->rt_dest_type = rhs->rt_dest_type;
+
+ lhs->rt_nexthop_len = rhs->rt_nexthop_len;
+ memcpy(lhs->rt_nexthop, rhs->rt_nexthop, rhs->rt_nexthop_len);
+ lhs->rt_nexthop_type = rhs->rt_nexthop_type;
+
+#ifdef USING_IP_FORWARD_MIB_INETCIDRROUTETABLE_INETCIDRROUTETABLE_MODULE
+ if (NULL != lhs->rt_policy) {
+ if (NETSNMP_ACCESS_ROUTE_POLICY_STATIC & lhs->flags)
+ lhs->rt_policy = NULL;
+ else {
+ SNMP_FREE(lhs->rt_policy);
+ }
+ }
+ if (NULL != rhs->rt_policy) {
+ if ((NETSNMP_ACCESS_ROUTE_POLICY_STATIC & rhs->flags) &&
+ ! (NETSNMP_ACCESS_ROUTE_POLICY_DEEP_COPY & rhs->flags)) {
+ lhs->rt_policy = rhs->rt_policy;
+ }
+ else {
+ snmp_clone_mem((void **) &lhs->rt_policy, rhs->rt_policy,
+ rhs->rt_policy_len * sizeof(oid));
+ }
+ }
+ lhs->rt_policy_len = rhs->rt_policy_len;
+#endif
+
+ lhs->rt_pfx_len = rhs->rt_pfx_len;
+ lhs->rt_type = rhs->rt_type;
+ lhs->rt_proto = rhs->rt_proto;
+
+#ifdef USING_IP_FORWARD_MIB_IPCIDRROUTETABLE_IPCIDRROUTETABLE_MODULE
+ if (NULL != lhs->rt_info)
+ SNMP_FREE(lhs->rt_info);
+ if (NULL != rhs->rt_info)
+ snmp_clone_mem((void **) &lhs->rt_info, rhs->rt_info,
+ rhs->rt_info_len * sizeof(oid));
+ lhs->rt_info_len = rhs->rt_info_len;
+
+ lhs->rt_mask = rhs->rt_mask;
+ lhs->rt_tos = rhs->rt_tos;
+#endif
+
+ lhs->rt_age = rhs->rt_age;
+ lhs->rt_nexthop_as = rhs->rt_nexthop_as;
+
+ lhs->rt_metric1 = rhs->rt_metric1;
+ lhs->rt_metric2 = rhs->rt_metric2;
+ lhs->rt_metric3 = rhs->rt_metric3;
+ lhs->rt_metric4 = rhs->rt_metric4;
+ lhs->rt_metric5 = rhs->rt_metric5;
+
+ lhs->flags = rhs->flags;
+
+ return 0;
+}
+
+
+/**---------------------------------------------------------------------*/
+/*
+ * Utility routines
+ */
+
+/**
+ */
+void
+_access_route_entry_release(netsnmp_route_entry * entry, void *context)
+{
+ netsnmp_access_route_entry_free(entry);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_ioctl.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_ioctl.c
new file mode 100644
index 0000000000..de42920bbc
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_ioctl.c
@@ -0,0 +1,197 @@
+/*
+ * Portions of this file are subject to copyright(s). See the Net-SNMP's
+ * COPYING file for more details and other copyrights that may apply.
+ */
+#include <net-snmp/net-snmp-config.h>
+
+#include <sys/types.h>
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#if HAVE_SYS_FILE_H
+#include <sys/file.h>
+#endif
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#if HAVE_SYS_SOCKIO_H
+#include <sys/sockio.h>
+#endif
+#if HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#if HAVE_SYS_MBUF_H
+#include <sys/mbuf.h>
+#endif
+
+
+#if HAVE_SYS_STREAM_H
+#include <sys/stream.h>
+#endif
+#if HAVE_NET_ROUTE_H
+#include <net/route.h>
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#if HAVE_NETDB_H
+#include <netdb.h>
+#endif
+
+#include <errno.h>
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <stdio.h>
+#include <ctype.h>
+#if HAVE_STRING_H
+#include <string.h>
+#endif
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/data_access/route.h>
+
+#include "ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h"
+#include "route_ioctl.h"
+
+#ifdef cygwin
+#include <windows.h>
+#endif
+
+#ifndef STRUCT_RTENTRY_HAS_RT_DST
+# define rt_dst rt_nodes->rn_key
+#endif
+#ifndef STRUCT_RTENTRY_HAS_RT_HASH
+# define rt_hash rt_pad1
+#endif
+
+
+#ifdef linux
+# define NETSNMP_ROUTE_WRITE_PROTOCOL PF_ROUTE
+#else
+# define NETSNMP_ROUTE_WRITE_PROTOCOL 0
+#endif
+
+#ifdef irix6
+#define SIOCADDRT SIOCADDMULTI
+#define SIOCDELRT SIOCDELMULTI
+#endif
+
+#if defined SIOCADDRT && !defined(irix6)
+int _netsnmp_ioctl_route_set_v4(netsnmp_route_entry * entry)
+{
+ struct sockaddr_in dst, gateway, mask;
+ int s, rc;
+ RTENTRY route;
+ char * DEBUGSTR;
+
+ netsnmp_assert(NULL != entry); /* checked in netsnmp_arch_route_create */
+ netsnmp_assert((4 == entry->rt_dest_len) && (4 == entry->rt_nexthop_len));
+
+ s = socket(AF_INET, SOCK_RAW, NETSNMP_ROUTE_WRITE_PROTOCOL);
+ if (s < 0) {
+ snmp_log_perror("socket");
+ return -3;
+ }
+
+ memset(&route, 0, sizeof(route));
+
+ dst.sin_family = AF_INET;
+ memcpy(&dst.sin_addr.s_addr, entry->rt_dest, 4);
+ DEBUGSTR = inet_ntoa(dst.sin_addr);
+ DEBUGMSGTL(("access:route","*** route to %s\n", DEBUGSTR));
+
+ gateway.sin_family = AF_INET;
+ memcpy(&gateway.sin_addr.s_addr, entry->rt_nexthop, 4);
+ DEBUGSTR = inet_ntoa(gateway.sin_addr);
+ DEBUGMSGTL(("access:route"," via %s\n", DEBUGSTR));
+
+ mask.sin_family = AF_INET;
+ mask.sin_addr.s_addr = htonl(0);
+ DEBUGSTR = inet_ntoa(mask.sin_addr);
+ DEBUGMSGTL(("access:route"," mask %s\n", DEBUGSTR));
+
+ memcpy(&route.rt_dst, &dst, sizeof(struct sockaddr_in));
+ memcpy(&route.rt_gateway, &gateway, sizeof(struct sockaddr_in));
+ memcpy(&route.rt_genmask, &mask, sizeof(struct sockaddr_in));
+
+ if (32 == entry->rt_pfx_len)
+ route.rt_flags |= RTF_HOST;
+ if (INETCIDRROUTETYPE_REMOTE == entry->rt_type)
+ route.rt_flags |= RTF_GATEWAY;
+ route.rt_flags |= RTF_UP;
+
+#ifndef RTENTRY_4_4
+ route.rt_hash = entry->if_index;
+#endif
+
+ rc = ioctl(s, SIOCADDRT, (caddr_t) & route);
+ close(s);
+ if (rc < 0) {
+ snmp_log_perror("ioctl");
+ return -4;
+ }
+
+ return 0;
+}
+#endif
+
+#if defined SIOCDELRT && !defined(irix6)
+int _netsnmp_ioctl_route_delete_v4(netsnmp_route_entry * entry)
+{
+ struct sockaddr_in dst;
+ struct sockaddr_in gateway;
+ int s, rc;
+ RTENTRY route;
+
+ netsnmp_assert(NULL != entry); /* checked in netsnmp_arch_route_delete */
+ netsnmp_assert((4 == entry->rt_dest_len) && (4 == entry->rt_nexthop_len));
+
+ s = socket(AF_INET, SOCK_RAW, NETSNMP_ROUTE_WRITE_PROTOCOL);
+ if (s < 0) {
+ snmp_log_perror("socket");
+ return -3;
+ }
+
+ memset(&route, 0, sizeof(route));
+
+ dst.sin_family = AF_INET;
+ memcpy(&dst.sin_addr.s_addr, entry->rt_dest, 4);
+
+ gateway.sin_family = AF_INET;
+ memcpy(&gateway.sin_addr.s_addr, entry->rt_nexthop, 4);
+
+ memcpy(&route.rt_dst, &dst, sizeof(struct sockaddr_in));
+ memcpy(&route.rt_gateway, &gateway, sizeof(struct sockaddr_in));
+
+ if (32 == entry->rt_pfx_len)
+ route.rt_flags |= RTF_HOST;
+ if (INETCIDRROUTETYPE_REMOTE == entry->rt_type)
+ route.rt_flags |= RTF_GATEWAY;
+ route.rt_flags |= RTF_UP;
+
+#ifndef RTENTRY_4_4
+ route.rt_hash = entry->if_index;
+#endif
+
+ rc = ioctl(s, SIOCDELRT, (caddr_t) & route);
+ close(s);
+ if (rc < 0) {
+ snmp_log_perror("ioctl");
+ rc = -4;
+ }
+
+ return rc;
+}
+#endif /* SIOCDELRT */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_ioctl.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_ioctl.h
new file mode 100644
index 0000000000..18c24afad7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_ioctl.h
@@ -0,0 +1,8 @@
+/*
+ * internal header, not for distribution
+ */
+
+int _netsnmp_ioctl_route_set_v4(netsnmp_route_entry * entry);
+int _netsnmp_ioctl_route_remove_v4(netsnmp_route_entry * entry);
+int _netsnmp_ioctl_route_delete_v4(netsnmp_route_entry * entry);
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_linux.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_linux.c
new file mode 100644
index 0000000000..0bbabb9c26
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_linux.c
@@ -0,0 +1,427 @@
+/*
+ * Interface MIB architecture support
+ *
+ * $Id: route_linux.c 17099 2008-07-02 12:39:23Z jsafranek $
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include "mibII/mibII_common.h"
+
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/data_access/interface.h>
+#include <net-snmp/data_access/route.h>
+#include <net-snmp/data_access/ipaddress.h>
+
+#include "ip-forward-mib/data_access/route_ioctl.h"
+#include "ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_constants.h"
+#include "if-mib/data_access/interface_ioctl.h"
+
+static int
+_type_from_flags(unsigned int flags)
+{
+ /*
+ * RTF_GATEWAY RTF_UP RTF_DYNAMIC RTF_CACHE
+ * RTF_MODIFIED RTF_EXPIRES RTF_NONEXTHOP
+ * RTF_DYNAMIC RTF_LOCAL RTF_PREFIX_RT
+ *
+ * xxx: can we distinguish between reject & blackhole?
+ */
+ if (flags & RTF_UP) {
+ if (flags & RTF_GATEWAY)
+ return INETCIDRROUTETYPE_REMOTE;
+ else /*if (flags & RTF_LOCAL) */
+ return INETCIDRROUTETYPE_LOCAL;
+ } else
+ return 0; /* route not up */
+
+}
+static int
+_load_ipv4(netsnmp_container* container, u_long *index )
+{
+ FILE *in;
+ char line[256];
+ netsnmp_route_entry *entry = NULL;
+ char name[16];
+ int fd;
+
+ DEBUGMSGTL(("access:route:container",
+ "route_container_arch_load ipv4\n"));
+
+ netsnmp_assert(NULL != container);
+
+ /*
+ * fetch routes from the proc file-system:
+ */
+ if (!(in = fopen("/proc/net/route", "r"))) {
+ snmp_log(LOG_ERR, "cannot open /proc/net/route\n");
+ return -2;
+ }
+
+ /*
+ * create socket for ioctls (see NOTE[1], below)
+ */
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if(fd < 0) {
+ snmp_log(LOG_ERR, "could not create socket\n");
+ fclose(in);
+ return -2;
+ }
+
+ fgets(line, sizeof(line), in); /* skip header */
+
+ while (fgets(line, sizeof(line), in)) {
+ char rtent_name[32];
+ int refcnt, flags, rc;
+ uint32_t dest, nexthop, mask, tmp_mask;
+ unsigned use;
+
+ entry = netsnmp_access_route_entry_create();
+
+ /*
+ * as with 1.99.14:
+ * Iface Dest GW Flags RefCnt Use Met Mask MTU Win IRTT
+ * BE eth0 00000000 C0A80101 0003 0 0 0 FFFFFFFF 1500 0 0
+ * LE eth0 00000000 0101A8C0 0003 0 0 0 00FFFFFF 0 0 0
+ */
+ rc = sscanf(line, "%s %x %x %x %u %d %d %x %*d %*d %*d\n",
+ rtent_name, &dest, &nexthop,
+ /*
+ * XXX: fix type of the args
+ */
+ &flags, &refcnt, &use, &entry->rt_metric1,
+ &tmp_mask);
+ DEBUGMSGTL(("9:access:route:container", "line |%s|\n", line));
+ if (8 != rc) {
+ snmp_log(LOG_ERR,
+ "/proc/net/route data format error (%d!=8), line ==|%s|",
+ rc, line);
+
+ netsnmp_access_route_entry_free(entry);
+ continue;
+ }
+
+ /*
+ * temporary null terminated name
+ */
+ strncpy(name, rtent_name, sizeof(name));
+ name[ sizeof(name)-1 ] = 0;
+
+ /*
+ * don't bother to try and get the ifindex for routes with
+ * no interface name.
+ * NOTE[1]: normally we'd use netsnmp_access_interface_index_find,
+ * but since that will open/close a socket, and we might
+ * have a lot of routes, call the ioctl routine directly.
+ */
+ if ('*' != name[0])
+ entry->if_index =
+ netsnmp_access_interface_ioctl_ifindex_get(fd,name);
+
+ /*
+ * arbitrary index
+ */
+ entry->ns_rt_index = ++(*index);
+
+ mask = htonl(tmp_mask);
+
+#ifdef USING_IP_FORWARD_MIB_IPCIDRROUTETABLE_IPCIDRROUTETABLE_MODULE
+ entry->rt_mask = mask;
+ /** entry->rt_tos = XXX; */
+ /** rt info ?? */
+#endif
+ /*
+ * copy dest & next hop
+ */
+ entry->rt_dest_type = INETADDRESSTYPE_IPV4;
+ entry->rt_dest_len = 4;
+ memcpy(entry->rt_dest, &dest, 4);
+
+ entry->rt_nexthop_type = INETADDRESSTYPE_IPV4;
+ entry->rt_nexthop_len = 4;
+ memcpy(entry->rt_nexthop, &nexthop, 4);
+
+ /*
+ * count bits in mask
+ */
+ entry->rt_pfx_len = netsnmp_ipaddress_ipv4_prefix_len(mask);
+
+#ifdef USING_IP_FORWARD_MIB_INETCIDRROUTETABLE_INETCIDRROUTETABLE_MODULE
+ /*
+ inetCidrRoutePolicy OBJECT-TYPE
+ SYNTAX OBJECT IDENTIFIER
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "This object is an opaque object without any defined
+ semantics. Its purpose is to serve as an additional
+ index which may delineate between multiple entries to
+ the same destination. The value { 0 0 } shall be used
+ as the default value for this object."
+ */
+ /*
+ * on linux, default routes all look alike, and would have the same
+ * indexed based on dest and next hop. So we use the if index
+ * as the policy, to distinguise between them. Hopefully this is
+ * unique.
+ * xxx-rks: It should really only be for the duplicate case, but that
+ * would be more complicated thanI want to get into now. Fix later.
+ */
+ if (0 == nexthop) {
+ entry->rt_policy = &entry->if_index;
+ entry->rt_policy_len = 1;
+ entry->flags |= NETSNMP_ACCESS_ROUTE_POLICY_STATIC;
+ }
+#endif
+
+ /*
+ * get protocol and type from flags
+ */
+ entry->rt_type = _type_from_flags(flags);
+
+ entry->rt_proto = (flags & RTF_DYNAMIC)
+ ? IANAIPROUTEPROTOCOL_ICMP : IANAIPROUTEPROTOCOL_LOCAL;
+
+ /*
+ * insert into container
+ */
+ if (CONTAINER_INSERT(container, entry) < 0)
+ {
+ DEBUGMSGTL(("access:route:container", "error with route_entry: insert into container failed.\n"));
+ netsnmp_access_route_entry_free(entry);
+ continue;
+ }
+ }
+
+ fclose(in);
+ close(fd);
+ return 0;
+}
+
+#ifdef NETSNMP_ENABLE_IPV6
+static int
+_load_ipv6(netsnmp_container* container, u_long *index )
+{
+ FILE *in;
+ char line[256];
+ netsnmp_route_entry *entry = NULL;
+ char name[16];
+ static int log_open_err = 1;
+
+ DEBUGMSGTL(("access:route:container",
+ "route_container_arch_load ipv6\n"));
+
+ netsnmp_assert(NULL != container);
+
+ /*
+ * fetch routes from the proc file-system:
+ */
+ if (!(in = fopen("/proc/net/ipv6_route", "r"))) {
+ if (1 == log_open_err) {
+ snmp_log(LOG_ERR, "cannot open /proc/net/ipv6_route\n");
+ log_open_err = 0;
+ }
+ return -2;
+ }
+ /*
+ * if we turned off logging of open errors, turn it back on now that
+ * we have been able to open the file.
+ */
+ if (0 == log_open_err)
+ log_open_err = 1;
+ fgets(line,sizeof(line),in); /* skip header */
+ while (fgets(line, sizeof(line), in)) {
+ char c_name[IFNAMSIZ+1];
+ char c_dest[33], c_src[33], c_next[33];
+ int rc;
+ unsigned int dest_pfx, flags;
+ size_t buf_len, buf_offset;
+ u_char *temp_uchar_ptr;
+
+ entry = netsnmp_access_route_entry_create();
+
+ /*
+ * based on /usr/src/linux/net/ipv6/route.c, kernel 2.6.7:
+ *
+ * [ Dest addr / plen ]
+ * fe80000000000000025056fffec00008 80 \
+ *
+ * [ (?subtree) : src addr/plen : 0/0]
+ * 00000000000000000000000000000000 00 \
+ *
+ * [ next hop ][ metric ][ref ctn][ use ]
+ * 00000000000000000000000000000000 00000000 00000000 00000000 \
+ *
+ * [ flags ][dev name]
+ * 80200001 lo
+ */
+ rc = sscanf(line, "%32s %2x %32s %*x %32s %x %*x %*x %x %"
+ SNMP_MACRO_VAL_TO_STR(IFNAMSIZ) "s\n",
+ c_dest, &dest_pfx, c_src, /*src_pfx,*/ c_next,
+ &entry->rt_metric1, /** ref,*/ /* use, */ &flags, c_name);
+ DEBUGMSGTL(("9:access:route:container", "line |%s|\n", line));
+ if (7 != rc) {
+ snmp_log(LOG_ERR,
+ "/proc/net/ipv6_route data format error (%d!=8), "
+ "line ==|%s|", rc, line);
+ continue;
+ }
+
+ /*
+ * temporary null terminated name
+ */
+ c_name[ sizeof(c_name)-1 ] = 0;
+ entry->if_index = se_find_value_in_slist("interfaces", c_name);
+ if(SE_DNE == entry->if_index) {
+ snmp_log(LOG_ERR,"unknown interface in /proc/net/ipv6_route "
+ "('%s')\n", name);
+ netsnmp_access_route_entry_free(entry);
+ continue;
+ }
+ /*
+ * arbitrary index
+ */
+ entry->ns_rt_index = ++(*index);
+
+#ifdef USING_IP_FORWARD_MIB_IPCIDRROUTETABLE_IPCIDRROUTETABLE_MODULE
+ /** entry->rt_mask = mask; */ /* IPv4 only */
+ /** entry->rt_tos = XXX; */
+ /** rt info ?? */
+#endif
+ /*
+ * convert hex addresses to binary
+ */
+ entry->rt_dest_type = INETADDRESSTYPE_IPV6;
+ entry->rt_dest_len = 16;
+ buf_len = sizeof(entry->rt_dest);
+ buf_offset = 0;
+ temp_uchar_ptr = entry->rt_dest;
+ netsnmp_hex_to_binary(&temp_uchar_ptr, &buf_len, &buf_offset, 0,
+ c_dest, NULL);
+
+ entry->rt_nexthop_type = INETADDRESSTYPE_IPV6;
+ entry->rt_nexthop_len = 16;
+ buf_len = sizeof(entry->rt_nexthop);
+ buf_offset = 0;
+ temp_uchar_ptr = entry->rt_nexthop;
+ netsnmp_hex_to_binary(&temp_uchar_ptr, &buf_len, &buf_offset, 0,
+ c_next, NULL);
+
+ entry->rt_pfx_len = dest_pfx;
+
+#ifdef USING_IP_FORWARD_MIB_INETCIDRROUTETABLE_INETCIDRROUTETABLE_MODULE
+ /*
+ inetCidrRoutePolicy OBJECT-TYPE
+ SYNTAX OBJECT IDENTIFIER
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "This object is an opaque object without any defined
+ semantics. Its purpose is to serve as an additional
+ index which may delineate between multiple entries to
+ the same destination. The value { 0 0 } shall be used
+ as the default value for this object."
+ */
+ /*
+ * on linux, default routes all look alike, and would have the same
+ * indexed based on dest and next hop. So we use our arbitrary index
+ * as the policy, to distinguise between them.
+ */
+ entry->rt_policy = &entry->ns_rt_index;
+ entry->rt_policy_len = 1;
+ entry->flags |= NETSNMP_ACCESS_ROUTE_POLICY_STATIC;
+#endif
+
+ /*
+ * get protocol and type from flags
+ */
+ entry->rt_type = _type_from_flags(flags);
+
+ entry->rt_proto = (flags & RTF_DYNAMIC)
+ ? IANAIPROUTEPROTOCOL_ICMP : IANAIPROUTEPROTOCOL_LOCAL;
+
+ /*
+ * insert into container
+ */
+ CONTAINER_INSERT(container, entry);
+ }
+
+ fclose(in);
+ return 0;
+}
+#endif
+
+/** arch specific load
+ * @internal
+ *
+ * @retval 0 success
+ * @retval -1 no container specified
+ * @retval -2 could not open data file
+ */
+int
+netsnmp_access_route_container_arch_load(netsnmp_container* container,
+ u_int load_flags)
+{
+ u_long count = 0;
+ int rc;
+
+ DEBUGMSGTL(("access:route:container",
+ "route_container_arch_load (flags %x)\n", load_flags));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "no container specified/found for access_route\n");
+ return -1;
+ }
+
+ rc = _load_ipv4(container, &count);
+
+#ifdef NETSNMP_ENABLE_IPV6
+ if((0 != rc) || (load_flags & NETSNMP_ACCESS_ROUTE_LOAD_IPV4_ONLY))
+ return rc;
+
+ /*
+ * load ipv6. ipv6 module might not be loaded,
+ * so ignore -2 err (file not found)
+ */
+ rc = _load_ipv6(container, &count);
+ if (-2 == rc)
+ rc = 0;
+#endif
+
+ return rc;
+}
+
+/*
+ * create a new entry
+ */
+int
+netsnmp_arch_route_create(netsnmp_route_entry *entry)
+{
+ if (NULL == entry)
+ return -1;
+
+ if (4 != entry->rt_dest_len) {
+ DEBUGMSGT(("access:route:create", "only ipv4 supported\n"));
+ return -2;
+ }
+
+ return _netsnmp_ioctl_route_set_v4(entry);
+}
+
+/*
+ * create a new entry
+ */
+int
+netsnmp_arch_route_delete(netsnmp_route_entry *entry)
+{
+ if (NULL == entry)
+ return -1;
+
+ if (4 != entry->rt_dest_len) {
+ DEBUGMSGT(("access:route:create", "only ipv4 supported\n"));
+ return -2;
+ }
+
+ return _netsnmp_ioctl_route_delete_v4(entry);
+}
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_linux.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_linux.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/data_access/route_linux.h
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable.h
new file mode 100644
index 0000000000..542d5168c2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable.h
@@ -0,0 +1,5 @@
+/*
+ * module to include the modules
+ */
+
+config_require(ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.c
new file mode 100644
index 0000000000..408fb90942
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.c
@@ -0,0 +1,2676 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: inetCidrRouteTable.c 15639 2006-12-06 15:01:27Z rstory $
+ */
+/** \page MFD helper for inetCidrRouteTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "inetCidrRouteTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "inetCidrRouteTable_interface.h"
+
+oid inetCidrRouteTable_oid[] = { INETCIDRROUTETABLE_OID };
+int inetCidrRouteTable_oid_size =
+OID_LENGTH(inetCidrRouteTable_oid);
+
+inetCidrRouteTable_registration inetCidrRouteTable_user_context;
+
+void initialize_table_inetCidrRouteTable(void);
+void shutdown_table_inetCidrRouteTable(void);
+
+int
+_route_number_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests);
+
+
+/**
+ * Initializes the inetCidrRouteTable module
+ */
+void
+init_inetCidrRouteTable(void)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:init_inetCidrRouteTable",
+ "called\n"));
+
+ /*
+ * TODO:300:o: Perform inetCidrRouteTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("inetCidrRouteTable"))
+ initialize_table_inetCidrRouteTable();
+
+} /* init_inetCidrRouteTable */
+
+/**
+ * Shut-down the inetCidrRouteTable module (agent is exiting)
+ */
+void
+shutdown_inetCidrRouteTable(void)
+{
+ if (should_init("inetCidrRouteTable"))
+ shutdown_table_inetCidrRouteTable();
+
+}
+
+/**
+ * Initialize the table inetCidrRouteTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_inetCidrRouteTable(void)
+{
+ inetCidrRouteTable_registration *user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:initialize_table_inetCidrRouteTable", "called\n"));
+
+ /*
+ * TODO:301:o: Perform inetCidrRouteTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize inetCidrRouteTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context =
+ netsnmp_create_data_list("inetCidrRouteTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _inetCidrRouteTable_initialize_interface(user_context, flags);
+
+ /*
+ * regester scalar for route number
+ */
+ {
+ oid reg_oid[] =
+ { INETCIDRROUTENUMBER_OID };
+ netsnmp_handler_registration *myreg;
+ netsnmp_mib_handler *handler;
+
+ myreg =
+ netsnmp_create_handler_registration("route number",
+ _route_number_handler,
+ reg_oid,
+ OID_LENGTH(reg_oid),
+ HANDLER_CAN_RONLY);
+ /*
+ * snarf cache to use w/cache handler to make sure the
+ * container is loaded w/up to date data.
+ */
+ netsnmp_assert(NULL != inetCidrRouteTable_get_cache());
+ handler =
+ netsnmp_cache_handler_get(inetCidrRouteTable_get_cache());
+ netsnmp_inject_handler(myreg, handler);
+
+ netsnmp_register_instance(myreg);
+ }
+} /* initialize_table_inetCidrRouteTable */
+
+/**
+ * Shutdown the table inetCidrRouteTable
+ */
+void
+shutdown_table_inetCidrRouteTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _inetCidrRouteTable_shutdown_interface
+ (&inetCidrRouteTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+inetCidrRouteTable_rowreq_ctx_init(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_rowreq_ctx_init", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra inetCidrRouteTable rowreq initialization. (eg DEFVALS)
+ */
+ rowreq_ctx->data->rt_nexthop_type = 0;
+
+ rowreq_ctx->data->rt_metric1 = -1;
+
+ rowreq_ctx->data->rt_metric2 = -1;
+
+ rowreq_ctx->data->rt_metric3 = -1;
+
+ rowreq_ctx->data->rt_metric4 = -1;
+
+ rowreq_ctx->data->rt_metric5 = -1;
+
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void
+inetCidrRouteTable_rowreq_ctx_cleanup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_rowreq_ctx_cleanup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra inetCidrRouteTable rowreq cleanup.
+ */
+ if (NULL != rowreq_ctx->data) {
+ inetCidrRouteTable_release_data(rowreq_ctx->data);
+ rowreq_ctx->data = NULL;
+ }
+} /* inetCidrRouteTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+inetCidrRouteTable_pre_request(inetCidrRouteTable_registration *
+ user_context)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_pre_request", "called\n"));
+
+ /*
+ * TODO:510:o: Perform inetCidrRouteTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+inetCidrRouteTable_post_request(inetCidrRouteTable_registration *
+ user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_post_request", "called\n"));
+
+ /*
+ * TODO:511:o: Perform inetCidrRouteTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (inetCidrRouteTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ inetCidrRouteTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteTable_post_request */
+
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-FORWARD-MIB::inetCidrRouteTable is subid 7 of ipForward.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.24.7, length: 9
+ */
+
+/*
+ * ---------------------------------------------------------------------
+ * * TODO:200:r: Implement inetCidrRouteTable data context functions.
+ */
+/*
+ * inetCidrRouteTable_allocate_data
+ *
+ * Purpose: create new inetCidrRouteTable_data->
+ */
+inetCidrRouteTable_data *
+inetCidrRouteTable_allocate_data(void)
+{
+ /*
+ * TODO:201:r: |-> allocate memory for the inetCidrRouteTable data context.
+ */
+ inetCidrRouteTable_data *rtn = netsnmp_access_route_entry_create();
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_allocate_data", "called\n"));
+
+ if (NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "inetCidrRouteTable_data->\n");
+ }
+
+ return rtn;
+} /* inetCidrRouteTable_allocate_data */
+
+/*
+ * inetCidrRouteTable_release_data
+ *
+ * Purpose: release inetCidrRouteTable data->
+ */
+void
+inetCidrRouteTable_release_data(inetCidrRouteTable_data * data)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_release_data", "called\n"));
+
+ /*
+ * TODO:202:r: |-> release memory for the inetCidrRouteTable data context.
+ */
+ netsnmp_access_route_entry_free(data);
+} /* inetCidrRouteTable_release_data */
+
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param inetCidrRouteDestType_val
+ * @param inetCidrRouteDest_val_ptr
+ * @param inetCidrRouteDest_val_ptr_len
+ * @param inetCidrRoutePfxLen_val
+ * @param inetCidrRoutePolicy_val_ptr
+ * @param inetCidrRoutePolicy_val_ptr_len
+ * @param inetCidrRouteNextHopType_val
+ * @param inetCidrRouteNextHop_val_ptr
+ * @param inetCidrRouteNextHop_val_ptr_len
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+inetCidrRouteTable_indexes_set_tbl_idx(inetCidrRouteTable_mib_index *
+ tbl_idx,
+ u_long inetCidrRouteDestType_val,
+ char *inetCidrRouteDest_val_ptr,
+ size_t
+ inetCidrRouteDest_val_ptr_len,
+ u_long inetCidrRoutePfxLen_val,
+ oid * inetCidrRoutePolicy_val_ptr,
+ size_t
+ inetCidrRoutePolicy_val_ptr_len,
+ u_long inetCidrRouteNextHopType_val,
+ char *inetCidrRouteNextHop_val_ptr,
+ size_t
+ inetCidrRouteNextHop_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_indexes_set_tbl_idx", "called\n"));
+
+ /*
+ * inetCidrRouteDestType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ /** WARNING: this code might not work for netsnmp_route_entry */
+ tbl_idx->inetCidrRouteDestType = inetCidrRouteDestType_val;
+
+ /*
+ * inetCidrRouteDest(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ tbl_idx->inetCidrRouteDest_len = sizeof(tbl_idx->inetCidrRouteDest) / sizeof(tbl_idx->inetCidrRouteDest[0]); /* max length */
+ /** WARNING: this code might not work for netsnmp_route_entry */
+ /*
+ * make sure there is enough space for inetCidrRouteDest data
+ */
+ if ((NULL == tbl_idx->inetCidrRouteDest) ||
+ (tbl_idx->inetCidrRouteDest_len <
+ (inetCidrRouteDest_val_ptr_len))) {
+ snmp_log(LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ tbl_idx->inetCidrRouteDest_len = inetCidrRouteDest_val_ptr_len;
+ memcpy(tbl_idx->inetCidrRouteDest, inetCidrRouteDest_val_ptr,
+ inetCidrRouteDest_val_ptr_len *
+ sizeof(inetCidrRouteDest_val_ptr[0]));
+
+ /*
+ * inetCidrRoutePfxLen(3)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
+ */
+ /** WARNING: this code might not work for netsnmp_route_entry */
+ tbl_idx->inetCidrRoutePfxLen = inetCidrRoutePfxLen_val;
+
+ /*
+ * inetCidrRoutePolicy(4)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/a/w/e/r/d/h
+ */
+ tbl_idx->inetCidrRoutePolicy_len = sizeof(tbl_idx->inetCidrRoutePolicy) / sizeof(tbl_idx->inetCidrRoutePolicy[0]); /* max length */
+ /** WARNING: this code might not work for netsnmp_route_entry */
+ /*
+ * make sure there is enough space for inetCidrRoutePolicy data
+ */
+ if ((NULL == tbl_idx->inetCidrRoutePolicy) ||
+ (tbl_idx->inetCidrRoutePolicy_len <
+ (inetCidrRoutePolicy_val_ptr_len))) {
+ snmp_log(LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ if (0 == inetCidrRoutePolicy_val_ptr_len) {
+ inetCidrRoutePolicy_val_ptr_len = nullOidLen / sizeof(oid);
+ inetCidrRoutePolicy_val_ptr = nullOid;
+ }
+ tbl_idx->inetCidrRoutePolicy_len = inetCidrRoutePolicy_val_ptr_len;
+ memcpy(tbl_idx->inetCidrRoutePolicy, inetCidrRoutePolicy_val_ptr,
+ inetCidrRoutePolicy_val_ptr_len *
+ sizeof(inetCidrRoutePolicy_val_ptr[0]));
+
+ /*
+ * inetCidrRouteNextHopType(5)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ /** WARNING: this code might not work for netsnmp_route_entry */
+ tbl_idx->inetCidrRouteNextHopType = inetCidrRouteNextHopType_val;
+
+ /*
+ * inetCidrRouteNextHop(6)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ tbl_idx->inetCidrRouteNextHop_len = sizeof(tbl_idx->inetCidrRouteNextHop) / sizeof(tbl_idx->inetCidrRouteNextHop[0]); /* max length */
+ /** WARNING: this code might not work for netsnmp_route_entry */
+ /*
+ * make sure there is enough space for inetCidrRouteNextHop data
+ */
+ if ((NULL == tbl_idx->inetCidrRouteNextHop) ||
+ (tbl_idx->inetCidrRouteNextHop_len <
+ (inetCidrRouteNextHop_val_ptr_len))) {
+ snmp_log(LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ tbl_idx->inetCidrRouteNextHop_len = inetCidrRouteNextHop_val_ptr_len;
+ memcpy(tbl_idx->inetCidrRouteNextHop, inetCidrRouteNextHop_val_ptr,
+ inetCidrRouteNextHop_val_ptr_len *
+ sizeof(inetCidrRouteNextHop_val_ptr[0]));
+
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param rowreq_ctx the row context that needs updated indexes
+ * @param inetCidrRouteDestType_val
+ * @param inetCidrRouteDest_val_ptr
+ * @param inetCidrRouteDest_val_ptr_len
+ * @param inetCidrRoutePfxLen_val
+ * @param inetCidrRoutePolicy_val_ptr
+ * @param inetCidrRoutePolicy_val_ptr_len
+ * @param inetCidrRouteNextHopType_val
+ * @param inetCidrRouteNextHop_val_ptr
+ * @param inetCidrRouteNextHop_val_ptr_len
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+inetCidrRouteTable_indexes_set(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long inetCidrRouteDestType_val,
+ char *inetCidrRouteDest_val_ptr,
+ size_t inetCidrRouteDest_val_ptr_len,
+ u_long inetCidrRoutePfxLen_val,
+ oid * inetCidrRoutePolicy_val_ptr,
+ size_t inetCidrRoutePolicy_val_ptr_len,
+ u_long inetCidrRouteNextHopType_val,
+ char *inetCidrRouteNextHop_val_ptr,
+ size_t inetCidrRouteNextHop_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_indexes_set", "called\n"));
+
+ if (MFD_SUCCESS !=
+ inetCidrRouteTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+ inetCidrRouteDestType_val,
+ inetCidrRouteDest_val_ptr,
+ inetCidrRouteDest_val_ptr_len,
+ inetCidrRoutePfxLen_val,
+ inetCidrRoutePolicy_val_ptr,
+ inetCidrRoutePolicy_val_ptr_len,
+ inetCidrRouteNextHopType_val,
+ inetCidrRouteNextHop_val_ptr,
+ inetCidrRouteNextHop_val_ptr_len))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if (0 != inetCidrRouteTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteIfIndex
+ * inetCidrRouteIfIndex is subid 7 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.7
+ * Description:
+The ifIndex value which identifies the local interface
+ through which the next hop of this route should be
+ reached. A value of 0 is valid and represents the
+ scenario where no interface is specified.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: d
+ *
+ * Ranges: 0 - 2147483647;
+ *
+ * Its syntax is InterfaceIndexOrZero (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the inetCidrRouteIfIndex data->
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteIfIndex_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetCidrRouteIfIndex_get(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *inetCidrRouteIfIndex_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetCidrRouteIfIndex_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteIfIndex_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetCidrRouteIfIndex data->
+ * copy (* inetCidrRouteIfIndex_val_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * TODO:235:M: |-> Remove log message/SKIP once you've set inetCidrRouteIfIndex data
+ */
+ (*inetCidrRouteIfIndex_val_ptr) = rowreq_ctx->data->if_index;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteIfIndex_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteType
+ * inetCidrRouteType is subid 8 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.8
+ * Description:
+The type of route. Note that local(3) refers to a
+ route for which the next hop is the final destination;
+ remote(4)refers to a route for which the next hop is
+ not the final destination.
+
+ Routes which do not result in traffic forwarding or
+ rejection should not be displayed even if the
+ implementation keeps them stored internally.
+
+ reject(2) refers to a route which, if matched, discards
+ the message as unreachable and returns a notification
+ (e.g. ICMP error) to the message sender. This is used
+ in some protocols as a means of correctly aggregating
+ routes.
+
+ blackhole(5) refers to a route which, if matched,
+ discards the message silently.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: other(1), reject(2), local(3), remote(4), blackhole(5)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the inetCidrRouteType data->
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteType_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetCidrRouteType_get(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long * inetCidrRouteType_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetCidrRouteType_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteType_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetCidrRouteType data->
+ * copy (* inetCidrRouteType_val_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * TODO:235:M: |-> Remove log message/SKIP once you've set inetCidrRouteType data
+ */
+ (*inetCidrRouteType_val_ptr) = rowreq_ctx->data->rt_type;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteType_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteProto
+ * inetCidrRouteProto is subid 9 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.24.7.1.9
+ * Description:
+The routing mechanism via which this route was learned.
+ Inclusion of values for gateway routing protocols is
+ not intended to imply that hosts should support those
+ protocols.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 13/32. Values: other(1), local(2), netmgmt(3), icmp(4), egp(5), ggp(6), hello(7), rip(8), isIs(9), esIs(10), ciscoIgrp(11), bbnSpfIgp(12), ospf(13), bgp(14), idpr(15), ciscoEigrp(16), dvmrp(17)
+ *
+ * Its syntax is IANAipRouteProtocol (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the inetCidrRouteProto data->
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteProto_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetCidrRouteProto_get(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long * inetCidrRouteProto_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetCidrRouteProto_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteProto_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetCidrRouteProto data->
+ * copy (* inetCidrRouteProto_val_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * TODO:235:M: |-> Remove log message/SKIP once you've set inetCidrRouteProto data
+ */
+ (*inetCidrRouteProto_val_ptr) = rowreq_ctx->data->rt_proto;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteProto_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteAge
+ * inetCidrRouteAge is subid 10 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.24.7.1.10
+ * Description:
+The number of seconds since this route was last updated
+ or otherwise determined to be correct. Note that no
+ semantics of 'too old' can be implied except through
+ knowledge of the routing protocol by which the route
+ was learned.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is GAUGE (based on perltype GAUGE)
+ * The net-snmp type is ASN_GAUGE. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the inetCidrRouteAge data->
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteAge_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetCidrRouteAge_get(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long * inetCidrRouteAge_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetCidrRouteAge_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteAge_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetCidrRouteAge data->
+ * copy (* inetCidrRouteAge_val_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * TODO:235:M: |-> Remove log message/SKIP once you've set inetCidrRouteAge data
+ */
+ (*inetCidrRouteAge_val_ptr) = rowreq_ctx->data->rt_age;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteAge_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteNextHopAS
+ * inetCidrRouteNextHopAS is subid 11 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.11
+ * Description:
+The Autonomous System Number of the Next Hop. The
+ semantics of this object are determined by the routing-
+ protocol specified in the route's inetCidrRouteProto
+ value. When this object is unknown or not relevant its
+ value should be set to zero.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 1
+ * settable 1
+ * defval: 0
+ * hint: d
+ *
+ *
+ * Its syntax is InetAutonomousSystemNumber (based on perltype UNSIGNED32)
+ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the inetCidrRouteNextHopAS data->
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteNextHopAS_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetCidrRouteNextHopAS_get(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long * inetCidrRouteNextHopAS_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetCidrRouteNextHopAS_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteNextHopAS_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetCidrRouteNextHopAS data->
+ * copy (* inetCidrRouteNextHopAS_val_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * TODO:235:M: |-> Remove log message/SKIP once you've set inetCidrRouteNextHopAS data
+ */
+ (*inetCidrRouteNextHopAS_val_ptr) = rowreq_ctx->data->rt_nexthop_as;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteNextHopAS_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteMetric1
+ * inetCidrRouteMetric1 is subid 12 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.12
+ * Description:
+The primary routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's inetCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the inetCidrRouteMetric1 data->
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteMetric1_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetCidrRouteMetric1_get(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *inetCidrRouteMetric1_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetCidrRouteMetric1_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric1_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetCidrRouteMetric1 data->
+ * copy (* inetCidrRouteMetric1_val_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * TODO:235:M: |-> Remove log message/SKIP once you've set inetCidrRouteMetric1 data
+ */
+ (*inetCidrRouteMetric1_val_ptr) = rowreq_ctx->data->rt_metric1;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteMetric1_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteMetric2
+ * inetCidrRouteMetric2 is subid 13 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.13
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's inetCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the inetCidrRouteMetric2 data->
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteMetric2_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetCidrRouteMetric2_get(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *inetCidrRouteMetric2_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetCidrRouteMetric2_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric2_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetCidrRouteMetric2 data->
+ * copy (* inetCidrRouteMetric2_val_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * TODO:235:M: |-> Remove log message/SKIP once you've set inetCidrRouteMetric2 data
+ */
+ (*inetCidrRouteMetric2_val_ptr) = rowreq_ctx->data->rt_metric2;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteMetric2_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteMetric3
+ * inetCidrRouteMetric3 is subid 14 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.14
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's inetCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the inetCidrRouteMetric3 data->
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteMetric3_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetCidrRouteMetric3_get(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *inetCidrRouteMetric3_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetCidrRouteMetric3_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric3_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetCidrRouteMetric3 data->
+ * copy (* inetCidrRouteMetric3_val_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * TODO:235:M: |-> Remove log message/SKIP once you've set inetCidrRouteMetric3 data
+ */
+ (*inetCidrRouteMetric3_val_ptr) = rowreq_ctx->data->rt_metric3;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteMetric3_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteMetric4
+ * inetCidrRouteMetric4 is subid 15 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.15
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's inetCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the inetCidrRouteMetric4 data->
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteMetric4_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetCidrRouteMetric4_get(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *inetCidrRouteMetric4_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetCidrRouteMetric4_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric4_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetCidrRouteMetric4 data->
+ * copy (* inetCidrRouteMetric4_val_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * TODO:235:M: |-> Remove log message/SKIP once you've set inetCidrRouteMetric4 data
+ */
+ (*inetCidrRouteMetric4_val_ptr) = rowreq_ctx->data->rt_metric4;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteMetric4_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteMetric5
+ * inetCidrRouteMetric5 is subid 16 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.16
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's inetCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the inetCidrRouteMetric5 data->
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteMetric5_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetCidrRouteMetric5_get(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *inetCidrRouteMetric5_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetCidrRouteMetric5_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric5_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetCidrRouteMetric5 data->
+ * copy (* inetCidrRouteMetric5_val_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * TODO:235:M: |-> Remove log message/SKIP once you've set inetCidrRouteMetric5 data
+ */
+ (*inetCidrRouteMetric5_val_ptr) = rowreq_ctx->data->rt_metric5;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteMetric5_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteStatus
+ * inetCidrRouteStatus is subid 17 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.17
+ * Description:
+The row status variable, used according to row
+ installation and removal conventions.
+
+ A row entry cannot be modified when the status is
+ marked as active(1).
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the inetCidrRouteStatus data->
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetCidrRouteStatus_get(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long * inetCidrRouteStatus_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetCidrRouteStatus_val_ptr);
+
+ /** WARNING: this code might not work for netsnmp_route_entry */
+ (*inetCidrRouteStatus_val_ptr) = rowreq_ctx->row_status;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteStatus_get */
+
+
+
+/** @} */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-FORWARD-MIB::inetCidrRouteTable is subid 7 of ipForward.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.24.7, length: 9
+ */
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +-------------+ +==============+
+ * | row |f|<-------|| object ||
+ * | create |1| E || lookup ||
+ * +-------------+ +==============+
+ * E | | S | S
+ * | +------------------>|
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * |
+ * (err && f1)------------------->+
+ * | |
+ * +--------------+ +--------------+
+ * | post |<--------| row |
+ * | request | U | release |
+ * +--------------+ +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * inetCidrRouteTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * inetCidrRouteTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (inetCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+inetCidrRouteTable_undo_setup(inetCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_undo_setup",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> Setup inetCidrRouteTable undo.
+ * set up inetCidrRouteTable undo information, in preparation for a set.
+ * Undo storage is in (* inetCidrRouteStatus_val_ptr )*
+ */
+ rowreq_ctx->row_status_undo = rowreq_ctx->row_status;
+
+ rc = netsnmp_access_route_entry_copy(rowreq_ctx->undo,
+ rowreq_ctx->data);
+
+ return rc;
+} /* inetCidrRouteTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (inetCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+inetCidrRouteTable_undo(inetCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_undo",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> inetCidrRouteTable undo.
+ * inetCidrRouteTable undo information, in response to a failed set.
+ * Undo storage is in (* inetCidrRouteStatus_val_ptr )*
+ */
+ rowreq_ctx->row_status = rowreq_ctx->row_status_undo;
+
+ rc = netsnmp_access_route_entry_copy(rowreq_ctx->data,
+ rowreq_ctx->undo);
+
+ return rc;
+} /* inetCidrRouteTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (inetCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+inetCidrRouteTable_undo_cleanup(inetCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_undo_cleanup", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:452:M: |-> Cleanup inetCidrRouteTable undo.
+ * Undo storage is in (* inetCidrRouteStatus_val_ptr )*
+ */
+
+ return rc;
+} /* inetCidrRouteTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * inetCidrRouteTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+inetCidrRouteTable_commit(inetCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_commit",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit inetCidrRouteTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ /*
+ * did anything change?
+ */
+ if (0 == save_flags) {
+ DEBUGMSGTL(("ipAddressTable:ipAddressTable_commit",
+ "no change\n"));
+ return MFD_SUCCESS;
+ }
+
+ /*
+ * pass everything to data access
+ */
+ if (save_flags & COLUMN_INETCIDRROUTESTATUS_FLAG) {
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ if (ROWSTATUS_DESTROY == rowreq_ctx->row_status) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED;
+ return MFD_SUCCESS;
+ }
+ netsnmp_assert(ROWSTATUS_ACTIVE == rowreq_ctx->row_status);
+ rowreq_ctx->data->flags |= NETSNMP_ACCESS_ROUTE_CREATE;
+ } else if (ROWSTATUS_DESTROY == rowreq_ctx->row_status) {
+ rowreq_ctx->data->flags |= NETSNMP_ACCESS_ROUTE_DELETE;
+ } else
+ rowreq_ctx->data->flags |= NETSNMP_ACCESS_ROUTE_CHANGE;
+ } else
+ rowreq_ctx->data->flags |= NETSNMP_ACCESS_ROUTE_CHANGE;
+
+ /*
+ * do it
+ * let data access know what columns are set
+ */
+ rowreq_ctx->data->flags |=
+ (save_flags & NETSNMP_ACCESS_ROUTE_RESERVED_BITS);
+ rc = netsnmp_access_route_entry_set(rowreq_ctx->data);
+ if (rc) {
+ snmp_log(LOG_ERR,
+ "inetCidrRouteTable column inetCidrRouteStatus commit failed\n");
+ rc = MFD_ERROR;
+ } else {
+ /*
+ * set flag, in case we need to undo
+ */
+ rowreq_ctx->column_set_flags |= save_flags;
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* inetCidrRouteTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * inetCidrRouteTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+inetCidrRouteTable_undo_commit(inetCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_undo_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:485:M: |-> Undo inetCidrRouteTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+ if (rowreq_ctx->column_set_flags & COLUMN_INETCIDRROUTESTATUS_FLAG) {
+ /*
+ * if we created an addr, delete it. if we deleted it,
+ * re-create it. If we changed it, change it back.
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ rowreq_ctx->undo->flags |= NETSNMP_ACCESS_ROUTE_DELETE;
+ } else if (ROWSTATUS_DESTROY == rowreq_ctx->row_status) {
+ rowreq_ctx->undo->flags |= NETSNMP_ACCESS_ROUTE_CREATE;
+ } else
+ rowreq_ctx->undo->flags |= NETSNMP_ACCESS_ROUTE_CHANGE;
+ } else
+ rowreq_ctx->undo->flags |= NETSNMP_ACCESS_ROUTE_CHANGE;
+
+ /*
+ * do it
+ */
+ rc = netsnmp_access_route_entry_set(rowreq_ctx->undo);
+ if (rc) {
+ DEBUGMSGTL(("ipAddressTable",
+ "bad rc %d from IP address data access\n", rc));
+ rc = MFD_ERROR;
+ }
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* inetCidrRouteTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement inetCidrRouteTable node value checks.
+ * TODO:450:M: Implement inetCidrRouteTable undo functions.
+ * TODO:460:M: Implement inetCidrRouteTable set functions.
+ * TODO:480:M: Implement inetCidrRouteTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteIfIndex
+ * inetCidrRouteIfIndex is subid 7 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.7
+ * Description:
+The ifIndex value which identifies the local interface
+ through which the next hop of this route should be
+ reached. A value of 0 is valid and represents the
+ scenario where no interface is specified.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: d
+ *
+ * Ranges: 0 - 2147483647;
+ *
+ * Its syntax is InterfaceIndexOrZero (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteIfIndex_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * inetCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is in (one of) the range set(s): 0 - 2147483647
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+inetCidrRouteIfIndex_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long inetCidrRouteIfIndex_val)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteIfIndex_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid inetCidrRouteIfIndex value.
+ */
+
+ return MFD_SUCCESS; /* inetCidrRouteIfIndex value not illegal */
+} /* inetCidrRouteIfIndex_check_value */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param inetCidrRouteIfIndex_val
+ * A long containing the new value.
+ */
+int
+inetCidrRouteIfIndex_set(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long inetCidrRouteIfIndex_val)
+{
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteIfIndex_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set inetCidrRouteIfIndex value.
+ * set inetCidrRouteIfIndex value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->if_index = inetCidrRouteIfIndex_val;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteIfIndex_set */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteType
+ * inetCidrRouteType is subid 8 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.8
+ * Description:
+The type of route. Note that local(3) refers to a
+ route for which the next hop is the final destination;
+ remote(4)refers to a route for which the next hop is
+ not the final destination.
+
+ Routes which do not result in traffic forwarding or
+ rejection should not be displayed even if the
+ implementation keeps them stored internally.
+
+ reject(2) refers to a route which, if matched, discards
+ the message as unreachable and returns a notification
+ (e.g. ICMP error) to the message sender. This is used
+ in some protocols as a means of correctly aggregating
+ routes.
+
+ blackhole(5) refers to a route which, if matched,
+ discards the message silently.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: other(1), reject(2), local(3), remote(4), blackhole(5)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteType_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * inetCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of other(1), reject(2), local(3), remote(4), blackhole(5)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+inetCidrRouteType_check_value(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long inetCidrRouteType_val)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteType_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid inetCidrRouteType value.
+ */
+
+ return MFD_SUCCESS; /* inetCidrRouteType value not illegal */
+} /* inetCidrRouteType_check_value */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param inetCidrRouteType_val
+ * A long containing the new value.
+ */
+int
+inetCidrRouteType_set(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long inetCidrRouteType_val)
+{
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteType_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set inetCidrRouteType value.
+ * set inetCidrRouteType value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->rt_type = inetCidrRouteType_val;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteType_set */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteNextHopAS
+ * inetCidrRouteNextHopAS is subid 11 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.11
+ * Description:
+The Autonomous System Number of the Next Hop. The
+ semantics of this object are determined by the routing-
+ protocol specified in the route's inetCidrRouteProto
+ value. When this object is unknown or not relevant its
+ value should be set to zero.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 1
+ * settable 1
+ * defval: 0
+ * hint: d
+ *
+ *
+ * Its syntax is InetAutonomousSystemNumber (based on perltype UNSIGNED32)
+ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteNextHopAS_val
+ * A u_long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * inetCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_UNSIGNED
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+inetCidrRouteNextHopAS_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetCidrRouteNextHopAS_val)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteNextHopAS_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid inetCidrRouteNextHopAS value.
+ */
+
+ return MFD_SUCCESS; /* inetCidrRouteNextHopAS value not illegal */
+} /* inetCidrRouteNextHopAS_check_value */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param inetCidrRouteNextHopAS_val
+ * A u_long containing the new value.
+ */
+int
+inetCidrRouteNextHopAS_set(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long inetCidrRouteNextHopAS_val)
+{
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteNextHopAS_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set inetCidrRouteNextHopAS value.
+ * set inetCidrRouteNextHopAS value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->rt_nexthop_type = inetCidrRouteNextHopAS_val;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteNextHopAS_set */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteMetric1
+ * inetCidrRouteMetric1 is subid 12 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.12
+ * Description:
+The primary routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's inetCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteMetric1_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * inetCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+inetCidrRouteMetric1_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long inetCidrRouteMetric1_val)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric1_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid inetCidrRouteMetric1 value.
+ */
+
+ return MFD_SUCCESS; /* inetCidrRouteMetric1 value not illegal */
+} /* inetCidrRouteMetric1_check_value */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param inetCidrRouteMetric1_val
+ * A long containing the new value.
+ */
+int
+inetCidrRouteMetric1_set(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long inetCidrRouteMetric1_val)
+{
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric1_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set inetCidrRouteMetric1 value.
+ * set inetCidrRouteMetric1 value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->rt_metric1 = inetCidrRouteMetric1_val;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteMetric1_set */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteMetric2
+ * inetCidrRouteMetric2 is subid 13 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.13
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's inetCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteMetric2_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * inetCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+inetCidrRouteMetric2_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long inetCidrRouteMetric2_val)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric2_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid inetCidrRouteMetric2 value.
+ */
+ /*
+ * does any os use metrics 2-5? If so, update this to deal with it.
+ */
+
+ return MFD_NOT_VALID_EVER;
+} /* inetCidrRouteMetric2_check_value */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param inetCidrRouteMetric2_val
+ * A long containing the new value.
+ */
+int
+inetCidrRouteMetric2_set(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long inetCidrRouteMetric2_val)
+{
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric2_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set inetCidrRouteMetric2 value.
+ * set inetCidrRouteMetric2 value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->rt_metric2 = inetCidrRouteMetric2_val;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteMetric2_set */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteMetric3
+ * inetCidrRouteMetric3 is subid 14 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.14
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's inetCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteMetric3_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * inetCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+inetCidrRouteMetric3_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long inetCidrRouteMetric3_val)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric3_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid inetCidrRouteMetric3 value.
+ */
+ /*
+ * does any os use metrics 2-5? If so, update this to deal with it.
+ */
+
+ return MFD_NOT_VALID_NOW;
+} /* inetCidrRouteMetric3_check_value */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param inetCidrRouteMetric3_val
+ * A long containing the new value.
+ */
+int
+inetCidrRouteMetric3_set(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long inetCidrRouteMetric3_val)
+{
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric3_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set inetCidrRouteMetric3 value.
+ * set inetCidrRouteMetric3 value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->rt_metric3 = inetCidrRouteMetric3_val;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteMetric3_set */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteMetric4
+ * inetCidrRouteMetric4 is subid 15 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.15
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's inetCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteMetric4_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * inetCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+inetCidrRouteMetric4_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long inetCidrRouteMetric4_val)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric4_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid inetCidrRouteMetric4 value.
+ */
+ /*
+ * does any os use metrics 2-5? If so, update this to deal with it.
+ */
+
+ return MFD_NOT_VALID_NOW;
+} /* inetCidrRouteMetric4_check_value */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param inetCidrRouteMetric4_val
+ * A long containing the new value.
+ */
+int
+inetCidrRouteMetric4_set(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long inetCidrRouteMetric4_val)
+{
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric4_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set inetCidrRouteMetric4 value.
+ * set inetCidrRouteMetric4 value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->rt_metric4 = inetCidrRouteMetric4_val;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteMetric4_set */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteMetric5
+ * inetCidrRouteMetric5 is subid 16 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.16
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's inetCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteMetric5_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * inetCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+inetCidrRouteMetric5_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long inetCidrRouteMetric5_val)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric5_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid inetCidrRouteMetric5 value.
+ */
+ /*
+ * does any os use metrics 2-5? If so, update this to deal with it.
+ */
+ return MFD_NOT_VALID_NOW;
+} /* inetCidrRouteMetric5_check_value */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param inetCidrRouteMetric5_val
+ * A long containing the new value.
+ */
+int
+inetCidrRouteMetric5_set(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long inetCidrRouteMetric5_val)
+{
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric5_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set inetCidrRouteMetric5 value.
+ * set inetCidrRouteMetric5 value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->rt_metric5 = inetCidrRouteMetric5_val;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteMetric5_set */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteStatus
+ * inetCidrRouteStatus is subid 17 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.7.1.17
+ * Description:
+The row status variable, used according to row
+ installation and removal conventions.
+
+ A row entry cannot be modified when the status is
+ marked as active(1).
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetCidrRouteStatus_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * inetCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+inetCidrRouteStatus_check_value(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long inetCidrRouteStatus_val)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteStatus_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid inetCidrRouteStatus value.
+ */
+
+ return MFD_SUCCESS; /* inetCidrRouteStatus value not illegal */
+} /* inetCidrRouteStatus_check_value */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param inetCidrRouteStatus_val
+ * A long containing the new value.
+ */
+int
+inetCidrRouteStatus_set(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long inetCidrRouteStatus_val)
+{
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteStatus_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set inetCidrRouteStatus value.
+ * set inetCidrRouteStatus value in rowreq_ctx->data
+ */
+ rowreq_ctx->row_status = inetCidrRouteStatus_val;
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteStatus_set */
+
+/**
+ * check dependencies
+ *
+ * This is useful for for tables which have dependencies between columns
+ * (or rows, or tables). For example, two columns allocating a percentage
+ * of something add up 100%.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * inetCidrRouteTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @retval MFD_SUCCESS all the changes to the row are legal
+ * @retval MFD_ERROR one or more changes are not legal
+ *
+ * (see README-table-inetCidrRouteTable if you don't have dependencies)
+ */
+int
+inetCidrRouteTable_check_dependencies(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:inetCidrRouteTable_check_dependencies", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:470:o: Check inetCidrRouteTable row dependencies.
+ * check that all new value are legal and consistent with each other
+ */
+ /*
+ * can't modify an active row
+ */
+ if ((ROWSTATUS_ACTIVE == rowreq_ctx->row_status) &&
+ (ROWSTATUS_ACTIVE == rowreq_ctx->row_status_undo)) {
+ DEBUGMSGTL(("inetCidrRouteTable",
+ "can't change active row (yet)\n"));
+ return MFD_ERROR;
+ }
+
+ /*
+ * check RowStatus dependencies
+ */
+ if (rowreq_ctx->column_set_flags & COLUMN_INETCIDRROUTESTATUS_FLAG) {
+ /*
+ * check for valid RowStatus transition (old, new)
+ * (Note: move transition check to
+ * to catch errors earlier)
+ */
+ rc = check_rowstatus_transition(rowreq_ctx->row_status_undo,
+ rowreq_ctx->row_status);
+ if (MFD_SUCCESS != rc)
+ return rc;
+
+ /*
+ * row creation requirements
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ if (ROWSTATUS_DESTROY == rowreq_ctx->row_status) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED;
+ } else if (ROWSTATUS_CREATEANDGO == rowreq_ctx->row_status) {
+ if ((rowreq_ctx->
+ column_set_flags & INETCIDRROUTETABLE_REQUIRED_COLS)
+ != INETCIDRROUTETABLE_REQUIRED_COLS) {
+ DEBUGMSGTL(("inetCidrRouteTable",
+ "required columns missing (0x%0x != 0x%0x)\n",
+ rowreq_ctx->column_set_flags,
+ INETCIDRROUTETABLE_REQUIRED_COLS));
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ rowreq_ctx->row_status = ROWSTATUS_ACTIVE;
+ }
+ } /* row creation */
+ else {
+ /*
+ * row change requirements
+ */
+ /*
+ * don't allow a destroy if any other value was changed, since
+ * that might call data access routines with bad info.
+ *
+ * you may or may not require the row be notInService before it
+ * can be destroyed.
+ */
+ if (ROWSTATUS_DESTROY == rowreq_ctx->row_status) {
+ if (rowreq_ctx->
+ column_set_flags & ~COLUMN_INETCIDRROUTESTATUS_FLAG) {
+ DEBUGMSGTL(("inetCidrRouteTable",
+ "destroy must be only varbind for row\n"));
+ return MFD_NOT_VALID_NOW;
+ }
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED;
+
+ } /* row destroy */
+ } /* row change */
+ } else {
+ /*
+ * must have row status to create a row
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ DEBUGMSGTL(("inetCidrRouteTable",
+ "must use RowStatus to create rows\n"));
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ } /* row status not set */
+
+ if (MFD_SUCCESS != rc)
+ return rc;
+
+ return rc;
+} /* inetCidrRouteTable_check_dependencies */
+
+
+int
+_route_number_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ if (MODE_GET == reqinfo->mode) {
+ int val = inetCidrRouteTable_container_size();
+ snmp_set_var_typed_value(requests->requestvb, ASN_UNSIGNED,
+ (u_char *) &val, sizeof(val));
+ } else
+ netsnmp_assert("bad mode in RO handler");
+
+ if (handler->next && handler->next->access_method)
+ return netsnmp_call_next_handler(handler, reginfo, reqinfo,
+ requests);
+
+ return SNMP_ERR_NOERROR;
+}
+
+/** @} */
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
new file mode 100644
index 0000000000..d663c2d995
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable.h
@@ -0,0 +1,537 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: inetCidrRouteTable.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+#ifndef INETCIDRROUTETABLE_H
+#define INETCIDRROUTETABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+#include <net-snmp/data_access/route.h>
+
+ /*
+ * other required module components
+ */
+ /* *INDENT-OFF* */
+config_require(ip-forward-mib/data_access/route)
+config_require(ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface)
+config_require(ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access)
+ /* *INDENT-ON* */
+
+ /*
+ * OID, column number and enum definions for inetCidrRouteTable
+ */
+#include "inetCidrRouteTable_constants.h"
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+ void init_inetCidrRouteTable(void);
+ void shutdown_inetCidrRouteTable(void);
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-FORWARD-MIB::inetCidrRouteTable is subid 7 of ipForward.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.24.7, length: 9
+ */
+ /*
+ *********************************************************************
+ * 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 inetCidrRouteTable registration context.
+ */
+ typedef netsnmp_data_list inetCidrRouteTable_registration;
+
+/**********************************************************************/
+ /*
+ * TODO:110:r: |-> Review inetCidrRouteTable data context structure.
+ * This structure is used to represent the data for inetCidrRouteTable.
+ */
+ typedef netsnmp_route_entry inetCidrRouteTable_data;
+
+
+ /*
+ *********************************************************************
+ * TODO:115:o: |-> Review inetCidrRouteTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+ typedef inetCidrRouteTable_data inetCidrRouteTable_undo_data;
+
+ /*
+ * TODO:120:r: |-> Review inetCidrRouteTable mib index.
+ * This structure is used to represent the index for inetCidrRouteTable.
+ */
+ typedef struct inetCidrRouteTable_mib_index_s {
+
+ /*
+ * inetCidrRouteDestType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ u_long inetCidrRouteDestType;
+
+ /*
+ * inetCidrRouteDest(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ char
+ inetCidrRouteDest[NETSNMP_ACCESS_ROUTE_ADDR_BUF_SIZE];
+ size_t inetCidrRouteDest_len;
+
+ /*
+ * inetCidrRoutePfxLen(3)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
+ */
+ u_long inetCidrRoutePfxLen;
+
+ /*
+ * inetCidrRoutePolicy(4)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/a/w/e/r/d/h
+ */
+ oid inetCidrRoutePolicy[NETSNMP_POLICY_OID_MAX_LEN];
+ size_t inetCidrRoutePolicy_len;
+
+ /*
+ * inetCidrRouteNextHopType(5)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ u_long inetCidrRouteNextHopType;
+
+ /*
+ * inetCidrRouteNextHop(6)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ char
+ inetCidrRouteNextHop[NETSNMP_ACCESS_ROUTE_ADDR_BUF_SIZE];
+ size_t inetCidrRouteNextHop_len;
+
+
+ } inetCidrRouteTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review inetCidrRouteTable 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!
+ */
+#define MAX_inetCidrRouteTable_IDX_LEN (((NETSNMP_ACCESS_ROUTE_ADDR_BUF_SIZE+1)*2)+ 3 + (NETSNMP_POLICY_OID_MAX_LEN + 1))
+
+
+ /*
+ *********************************************************************
+ * TODO:130:o: |-> Review inetCidrRouteTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * inetCidrRouteTable_rowreq_ctx pointer.
+ */
+ typedef struct inetCidrRouteTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_inetCidrRouteTable_IDX_LEN];
+
+ inetCidrRouteTable_mib_index tbl_idx;
+
+ inetCidrRouteTable_data *data;
+ inetCidrRouteTable_undo_data *undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 inetCidrRouteTable rowreq context.
+ */
+ u_char row_status;
+ u_char row_status_undo;
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *inetCidrRouteTable_data_list;
+
+ } inetCidrRouteTable_rowreq_ctx;
+
+ typedef struct inetCidrRouteTable_ref_rowreq_ctx_s {
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx;
+ } inetCidrRouteTable_ref_rowreq_ctx;
+
+ /*
+ *********************************************************************
+ * function prototypes
+ */
+ int
+ inetCidrRouteTable_pre_request(inetCidrRouteTable_registration *
+ user_context);
+ int
+ inetCidrRouteTable_post_request(inetCidrRouteTable_registration *
+ user_context, int rc);
+
+ int
+ inetCidrRouteTable_rowreq_ctx_init(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ void *user_init_ctx);
+ void
+ inetCidrRouteTable_rowreq_ctx_cleanup(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+
+ inetCidrRouteTable_data *inetCidrRouteTable_allocate_data(void);
+ void inetCidrRouteTable_release_data(inetCidrRouteTable_data
+ * data);
+
+ int
+ inetCidrRouteTable_check_dependencies(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+ int inetCidrRouteTable_commit(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+
+
+ inetCidrRouteTable_rowreq_ctx
+ * inetCidrRouteTable_row_find_by_mib_index
+ (inetCidrRouteTable_mib_index * mib_idx);
+
+ extern oid inetCidrRouteTable_oid[];
+ extern int inetCidrRouteTable_oid_size;
+
+
+#include "inetCidrRouteTable_interface.h"
+#include "inetCidrRouteTable_data_access.h"
+ /*
+ *********************************************************************
+ * GET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-FORWARD-MIB::inetCidrRouteTable is subid 7 of ipForward.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.24.7, length: 9
+ */
+ /*
+ * indexes
+ */
+
+ int inetCidrRouteIfIndex_get(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx, long
+ *inetCidrRouteIfIndex_val_ptr);
+ int inetCidrRouteType_get(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ inetCidrRouteType_val_ptr);
+ int inetCidrRouteProto_get(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ inetCidrRouteProto_val_ptr);
+ int inetCidrRouteAge_get(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ inetCidrRouteAge_val_ptr);
+ int
+ inetCidrRouteNextHopAS_get(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ inetCidrRouteNextHopAS_val_ptr);
+ int inetCidrRouteMetric1_get(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx, long
+ *inetCidrRouteMetric1_val_ptr);
+ int inetCidrRouteMetric2_get(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx, long
+ *inetCidrRouteMetric2_val_ptr);
+ int inetCidrRouteMetric3_get(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx, long
+ *inetCidrRouteMetric3_val_ptr);
+ int inetCidrRouteMetric4_get(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx, long
+ *inetCidrRouteMetric4_val_ptr);
+ int inetCidrRouteMetric5_get(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx, long
+ *inetCidrRouteMetric5_val_ptr);
+ int inetCidrRouteStatus_get(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ inetCidrRouteStatus_val_ptr);
+
+
+ int
+ inetCidrRouteTable_indexes_set_tbl_idx(inetCidrRouteTable_mib_index
+ * tbl_idx,
+ u_long
+ inetCidrRouteDestType_val,
+ char
+ *inetCidrRouteDest_val_ptr,
+ size_t
+ inetCidrRouteDest_val_ptr_len,
+ u_long
+ inetCidrRoutePfxLen_val,
+ oid *
+ inetCidrRoutePolicy_val_ptr,
+ size_t
+ inetCidrRoutePolicy_val_ptr_len,
+ u_long
+ inetCidrRouteNextHopType_val,
+ char
+ *inetCidrRouteNextHop_val_ptr,
+ size_t
+ inetCidrRouteNextHop_val_ptr_len);
+ int
+ inetCidrRouteTable_indexes_set(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetCidrRouteDestType_val,
+ char *inetCidrRouteDest_val_ptr,
+ size_t
+ inetCidrRouteDest_val_ptr_len,
+ u_long inetCidrRoutePfxLen_val,
+ oid * inetCidrRoutePolicy_val_ptr,
+ size_t
+ inetCidrRoutePolicy_val_ptr_len,
+ u_long inetCidrRouteNextHopType_val,
+ char *inetCidrRouteNextHop_val_ptr,
+ size_t
+ inetCidrRouteNextHop_val_ptr_len);
+
+
+
+ /*
+ *********************************************************************
+ * SET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-FORWARD-MIB::inetCidrRouteTable is subid 7 of ipForward.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.24.7, length: 9
+ */
+
+
+ int
+ inetCidrRouteTable_undo_setup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int
+ inetCidrRouteTable_undo_cleanup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetCidrRouteTable_undo(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetCidrRouteTable_commit(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+ int
+ inetCidrRouteTable_undo_commit(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+ int
+ inetCidrRouteIfIndex_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long inetCidrRouteIfIndex_val);
+ int
+ inetCidrRouteIfIndex_undo_setup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetCidrRouteIfIndex_set(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx, long
+ inetCidrRouteIfIndex_val);
+ int inetCidrRouteIfIndex_undo(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+
+ int
+ inetCidrRouteType_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetCidrRouteType_val);
+ int
+ inetCidrRouteType_undo_setup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetCidrRouteType_set(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetCidrRouteType_val);
+ int inetCidrRouteType_undo(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ inetCidrRouteProto_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetCidrRouteProto_val);
+ int
+ inetCidrRouteProto_undo_setup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetCidrRouteProto_set(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetCidrRouteProto_val);
+ int inetCidrRouteProto_undo(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ inetCidrRouteAge_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetCidrRouteAge_val);
+ int
+ inetCidrRouteAge_undo_setup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetCidrRouteAge_set(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetCidrRouteAge_val);
+ int inetCidrRouteAge_undo(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ inetCidrRouteNextHopAS_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ inetCidrRouteNextHopAS_val);
+ int
+ inetCidrRouteNextHopAS_undo_setup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int
+ inetCidrRouteNextHopAS_set(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetCidrRouteNextHopAS_val);
+ int
+ inetCidrRouteNextHopAS_undo(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ inetCidrRouteMetric1_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long inetCidrRouteMetric1_val);
+ int
+ inetCidrRouteMetric1_undo_setup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetCidrRouteMetric1_set(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx, long
+ inetCidrRouteMetric1_val);
+ int inetCidrRouteMetric1_undo(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+
+ int
+ inetCidrRouteMetric2_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long inetCidrRouteMetric2_val);
+ int
+ inetCidrRouteMetric2_undo_setup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetCidrRouteMetric2_set(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx, long
+ inetCidrRouteMetric2_val);
+ int inetCidrRouteMetric2_undo(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+
+ int
+ inetCidrRouteMetric3_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long inetCidrRouteMetric3_val);
+ int
+ inetCidrRouteMetric3_undo_setup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetCidrRouteMetric3_set(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx, long
+ inetCidrRouteMetric3_val);
+ int inetCidrRouteMetric3_undo(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+
+ int
+ inetCidrRouteMetric4_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long inetCidrRouteMetric4_val);
+ int
+ inetCidrRouteMetric4_undo_setup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetCidrRouteMetric4_set(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx, long
+ inetCidrRouteMetric4_val);
+ int inetCidrRouteMetric4_undo(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+
+ int
+ inetCidrRouteMetric5_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long inetCidrRouteMetric5_val);
+ int
+ inetCidrRouteMetric5_undo_setup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetCidrRouteMetric5_set(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx, long
+ inetCidrRouteMetric5_val);
+ int inetCidrRouteMetric5_undo(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+
+ int
+ inetCidrRouteStatus_check_value(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetCidrRouteStatus_val);
+ int
+ inetCidrRouteStatus_undo_setup(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetCidrRouteStatus_set(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ inetCidrRouteStatus_val);
+ int inetCidrRouteStatus_undo(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+
+
+ int
+ inetCidrRouteTable_check_dependencies(inetCidrRouteTable_rowreq_ctx
+ * ctx);
+
+
+ /*
+ * DUMMY markers, ignore
+ *
+ * TODO:099:x: *************************************************************
+ * TODO:199:x: *************************************************************
+ * TODO:299:x: *************************************************************
+ * TODO:399:x: *************************************************************
+ * TODO:499:x: *************************************************************
+ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* INETCIDRROUTETABLE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_constants.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_constants.h
new file mode 100644
index 0000000000..84e9fe6643
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_constants.h
@@ -0,0 +1,216 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-constants.m2c,v 1.5 2005/07/15 22:41:16 rstory Exp $
+ *
+ * $Id: inetCidrRouteTable_constants.h 14049 2006-01-06 21:26:49Z rstory $
+ */
+#ifndef INETCIDRROUTETABLE_CONSTANTS_H
+#define INETCIDRROUTETABLE_CONSTANTS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ * column number definitions for table inetCidrRouteTable
+ */
+#define INETCIDRROUTENUMBER_OID 1,3,6,1,2,1,4,24,6,0
+#define INETCIDRROUTETABLE_OID 1,3,6,1,2,1,4,24,7
+
+#define COLUMN_INETCIDRROUTEDESTTYPE 1
+
+#define COLUMN_INETCIDRROUTEDEST 2
+
+#define COLUMN_INETCIDRROUTEPFXLEN 3
+
+#define COLUMN_INETCIDRROUTEPOLICY 4
+
+#define COLUMN_INETCIDRROUTENEXTHOPTYPE 5
+
+#define COLUMN_INETCIDRROUTENEXTHOP 6
+
+#define COLUMN_INETCIDRROUTEIFINDEX 7
+#define COLUMN_INETCIDRROUTEIFINDEX_FLAG (0x1 << 6)
+
+#define COLUMN_INETCIDRROUTETYPE 8
+#define COLUMN_INETCIDRROUTETYPE_FLAG (0x1 << 7)
+
+#define COLUMN_INETCIDRROUTEPROTO 9
+
+#define COLUMN_INETCIDRROUTEAGE 10
+
+#define COLUMN_INETCIDRROUTENEXTHOPAS 11
+#define COLUMN_INETCIDRROUTENEXTHOPAS_FLAG (0x1 << 10)
+
+#define COLUMN_INETCIDRROUTEMETRIC1 12
+#define COLUMN_INETCIDRROUTEMETRIC1_FLAG (0x1 << 11)
+
+#define COLUMN_INETCIDRROUTEMETRIC2 13
+#define COLUMN_INETCIDRROUTEMETRIC2_FLAG (0x1 << 12)
+
+#define COLUMN_INETCIDRROUTEMETRIC3 14
+#define COLUMN_INETCIDRROUTEMETRIC3_FLAG (0x1 << 13)
+
+#define COLUMN_INETCIDRROUTEMETRIC4 15
+#define COLUMN_INETCIDRROUTEMETRIC4_FLAG (0x1 << 14)
+
+#define COLUMN_INETCIDRROUTEMETRIC5 16
+#define COLUMN_INETCIDRROUTEMETRIC5_FLAG (0x1 << 15)
+
+#define COLUMN_INETCIDRROUTESTATUS 17
+#define COLUMN_INETCIDRROUTESTATUS_FLAG (0x1 << 16)
+
+
+#define INETCIDRROUTETABLE_MIN_COL COLUMN_INETCIDRROUTEIFINDEX
+#define INETCIDRROUTETABLE_MAX_COL COLUMN_INETCIDRROUTESTATUS
+
+
+ /*
+ * TODO:405:r: Review INETCIDRROUTETABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define INETCIDRROUTETABLE_SETTABLE_COLS (COLUMN_INETCIDRROUTEIFINDEX_FLAG | COLUMN_INETCIDRROUTETYPE_FLAG | COLUMN_INETCIDRROUTENEXTHOPAS_FLAG | COLUMN_INETCIDRROUTEMETRIC1_FLAG | COLUMN_INETCIDRROUTEMETRIC2_FLAG | COLUMN_INETCIDRROUTEMETRIC3_FLAG | COLUMN_INETCIDRROUTEMETRIC4_FLAG | COLUMN_INETCIDRROUTEMETRIC5_FLAG | COLUMN_INETCIDRROUTESTATUS_FLAG)
+ /*
+ * TODO:405:r: Review INETCIDRROUTETABLE_REQUIRED_COLS macro.
+ * OR together all the required rows for row creation.
+ * default is writable cols w/out defaults.
+ */
+#define INETCIDRROUTETABLE_REQUIRED_COLS (COLUMN_INETCIDRROUTEIFINDEX_FLAG | COLUMN_INETCIDRROUTETYPE_FLAG | COLUMN_INETCIDRROUTESTATUS_FLAG)
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table inetCidrRouteTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * inetCidrRouteDestType (InetAddressType / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef INETADDRESSTYPE_ENUMS
+#define INETADDRESSTYPE_ENUMS
+
+#define INETADDRESSTYPE_UNKNOWN 0
+#define INETADDRESSTYPE_IPV4 1
+#define INETADDRESSTYPE_IPV6 2
+#define INETADDRESSTYPE_IPV4Z 3
+#define INETADDRESSTYPE_IPV6Z 4
+#define INETADDRESSTYPE_DNS 16
+
+#endif /* INETADDRESSTYPE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * inetCidrRouteNextHopType (InetAddressType / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef INETADDRESSTYPE_ENUMS
+#define INETADDRESSTYPE_ENUMS
+
+#define INETADDRESSTYPE_UNKNOWN 0
+#define INETADDRESSTYPE_IPV4 1
+#define INETADDRESSTYPE_IPV6 2
+#define INETADDRESSTYPE_IPV4Z 3
+#define INETADDRESSTYPE_IPV6Z 4
+#define INETADDRESSTYPE_DNS 16
+
+#endif /* INETADDRESSTYPE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * inetCidrRouteType (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef INETCIDRROUTETYPE_ENUMS
+#define INETCIDRROUTETYPE_ENUMS
+
+#define INETCIDRROUTETYPE_OTHER 1
+#define INETCIDRROUTETYPE_REJECT 2
+#define INETCIDRROUTETYPE_LOCAL 3
+#define INETCIDRROUTETYPE_REMOTE 4
+#define INETCIDRROUTETYPE_BLACKHOLE 5
+
+#endif /* INETCIDRROUTETYPE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * inetCidrRouteProto (IANAipRouteProtocol / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IANAIPROUTEPROTOCOL_ENUMS
+#define IANAIPROUTEPROTOCOL_ENUMS
+
+#define IANAIPROUTEPROTOCOL_OTHER 1
+#define IANAIPROUTEPROTOCOL_LOCAL 2
+#define IANAIPROUTEPROTOCOL_NETMGMT 3
+#define IANAIPROUTEPROTOCOL_ICMP 4
+#define IANAIPROUTEPROTOCOL_EGP 5
+#define IANAIPROUTEPROTOCOL_GGP 6
+#define IANAIPROUTEPROTOCOL_HELLO 7
+#define IANAIPROUTEPROTOCOL_RIP 8
+#define IANAIPROUTEPROTOCOL_ISIS 9
+#define IANAIPROUTEPROTOCOL_ESIS 10
+#define IANAIPROUTEPROTOCOL_CISCOIGRP 11
+#define IANAIPROUTEPROTOCOL_BBNSPFIGP 12
+#define IANAIPROUTEPROTOCOL_OSPF 13
+#define IANAIPROUTEPROTOCOL_BGP 14
+#define IANAIPROUTEPROTOCOL_IDPR 15
+#define IANAIPROUTEPROTOCOL_CISCOEIGRP 16
+#define IANAIPROUTEPROTOCOL_DVMRP 17
+
+#endif /* IANAIPROUTEPROTOCOL_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * inetCidrRouteStatus (RowStatus / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef ROWSTATUS_ENUMS
+#define ROWSTATUS_ENUMS
+
+#define ROWSTATUS_ACTIVE 1
+#define ROWSTATUS_NOTINSERVICE 2
+#define ROWSTATUS_NOTREADY 3
+#define ROWSTATUS_CREATEANDGO 4
+#define ROWSTATUS_CREATEANDWAIT 5
+#define ROWSTATUS_DESTROY 6
+
+#endif /* ROWSTATUS_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* INETCIDRROUTETABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.c
new file mode 100644
index 0000000000..03c3f0877a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.c
@@ -0,0 +1,932 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: inetCidrRouteTable_data_access.c 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "inetCidrRouteTable.h"
+
+
+#include "inetCidrRouteTable_data_access.h"
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-FORWARD-MIB::inetCidrRouteTable is subid 7 of ipForward.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.24.7, length: 9
+ */
+
+/**
+ * initialization for inetCidrRouteTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param inetCidrRouteTable_reg
+ * Pointer to inetCidrRouteTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+inetCidrRouteTable_init_data(inetCidrRouteTable_registration *
+ inetCidrRouteTable_reg)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_init_data",
+ "called\n"));
+
+ /*
+ * TODO:303:o: Initialize inetCidrRouteTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+inetCidrRouteTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache * cache)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_container_init", "called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,
+ "bad container param to inetCidrRouteTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,
+ "bad cache param to inetCidrRouteTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up inetCidrRouteTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = INETCIDRROUTETABLE_CACHE_TIMEOUT; /* seconds */
+} /* inetCidrRouteTable_container_init */
+
+/**
+ * check entry for update
+ */
+static void
+_snarf_route_entry(netsnmp_route_entry *route_entry,
+ netsnmp_container *container)
+{
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx;
+
+ netsnmp_assert(NULL != route_entry);
+ netsnmp_assert(NULL != container);
+
+ /*
+ * per inetCidrRouteType:
+ *
+ * Routes which do not result in traffic forwarding or
+ * rejection should not be displayed even if the
+ * implementation keeps them stored internally.
+ */
+ if (route_entry->rt_type == 0) { /* set when route not up */
+ DEBUGMSGT(("verbose:inetCidrRouteTable:inetCidrRouteTable_cache_load", "skipping route\n"));
+ netsnmp_access_route_entry_free(route_entry);
+ return;
+ }
+
+ /*
+ * allocate an row context and set the index(es), then add it to
+ * the container
+ */
+ rowreq_ctx = inetCidrRouteTable_allocate_rowreq_ctx(route_entry, NULL);
+ if ((NULL != rowreq_ctx) &&
+ (MFD_SUCCESS == inetCidrRouteTable_indexes_set
+ (rowreq_ctx, route_entry->rt_dest_type,
+ route_entry->rt_dest, route_entry->rt_dest_len,
+ route_entry->rt_pfx_len,
+ route_entry->rt_policy, route_entry->rt_policy_len,
+ route_entry->rt_nexthop_type,
+ route_entry->rt_nexthop, route_entry->rt_nexthop_len))) {
+ CONTAINER_INSERT(container, rowreq_ctx);
+ rowreq_ctx->row_status = ROWSTATUS_ACTIVE;
+ } else {
+ if (rowreq_ctx) {
+ snmp_log(LOG_ERR, "error setting index while loading "
+ "inetCidrRoute cache.\n");
+ inetCidrRouteTable_release_rowreq_ctx(rowreq_ctx);
+ } else
+ netsnmp_access_route_entry_free(route_entry);
+ }
+}
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before inetCidrRouteTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+inetCidrRouteTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_container_shutdown", "called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,
+ "bad params to inetCidrRouteTable_container_shutdown\n");
+ return;
+ }
+
+} /* inetCidrRouteTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement inetCidrRouteTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * inetCidrRouteTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+inetCidrRouteTable_container_load(netsnmp_container *container)
+{
+ netsnmp_container *route_container;
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_container_load", "called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the inetCidrRouteTable container.
+ * loop over your inetCidrRouteTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ *
+ * we use the netsnmp data access api to get the data
+ */
+ route_container =
+ netsnmp_access_route_container_load(NULL,
+ NETSNMP_ACCESS_ROUTE_LOAD_NOFLAGS);
+ DEBUGMSGT(("verbose:inetCidrRouteTable:inetCidrRouteTable_cache_load",
+ "%d records\n", CONTAINER_SIZE(route_container)));
+
+ if (NULL == route_container)
+ return MFD_RESOURCE_UNAVAILABLE; /* msg already logged */
+
+ /*
+ * we just got a fresh copy of route data. snarf data
+ */
+ CONTAINER_FOR_EACH(route_container,
+ (netsnmp_container_obj_func *) _snarf_route_entry,
+ container);
+
+ /*
+ * free the container. we've either claimed each ifentry, or released it,
+ * so the dal function doesn't need to clear the container.
+ */
+ netsnmp_access_route_container_free(route_container,
+ NETSNMP_ACCESS_ROUTE_FREE_DONT_CLEAR);
+
+ DEBUGMSGT(("verbose:inetCidrRouteTable:inetCidrRouteTable_cache_load",
+ "%d records\n", CONTAINER_SIZE(container)));
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+inetCidrRouteTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_container_free", "called\n"));
+
+ /*
+ * TODO:380:M: Free inetCidrRouteTable container data.
+ */
+} /* inetCidrRouteTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+inetCidrRouteTable_row_prep(inetCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_row_prep",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+ if (MFD_ROW_CREATED & rowreq_ctx->rowreq_flags) {
+ memcpy(rowreq_ctx->data->rt_dest,
+ rowreq_ctx->tbl_idx.inetCidrRouteDest,
+ rowreq_ctx->tbl_idx.inetCidrRouteDest_len);
+ rowreq_ctx->data->rt_dest_len =
+ rowreq_ctx->tbl_idx.inetCidrRouteDest_len;
+ rowreq_ctx->data->rt_dest_type =
+ rowreq_ctx->tbl_idx.inetCidrRouteDestType;
+
+ memcpy(rowreq_ctx->data->rt_nexthop,
+ rowreq_ctx->tbl_idx.inetCidrRouteNextHop,
+ rowreq_ctx->tbl_idx.inetCidrRouteNextHop_len);
+ rowreq_ctx->data->rt_nexthop_len =
+ rowreq_ctx->tbl_idx.inetCidrRouteNextHop_len;
+ rowreq_ctx->data->rt_nexthop_type =
+ rowreq_ctx->tbl_idx.inetCidrRouteNextHopType;
+
+ rowreq_ctx->data->rt_pfx_len =
+ rowreq_ctx->tbl_idx.inetCidrRoutePfxLen;
+
+ rowreq_ctx->data->rt_policy_len =
+ rowreq_ctx->tbl_idx.inetCidrRoutePolicy_len;
+ rowreq_ctx->data->rt_policy =
+ rowreq_ctx->tbl_idx.inetCidrRoutePolicy;
+ /*
+ * policy pointing to rowreq array, set flag so
+ * it won't be freed
+ */
+ rowreq_ctx->data->flags |= NETSNMP_ACCESS_ROUTE_POLICY_STATIC;
+ }
+
+
+ return MFD_SUCCESS;
+} /* inetCidrRouteTable_row_prep */
+
+/*
+ * TODO:420:r: Implement inetCidrRouteTable index validation.
+ */
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteDestType
+ * inetCidrRouteDestType is subid 1 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.2.1.4.24.7.1.1
+ * Description:
+The type of the inetCidrRouteDest address, as defined
+ in the InetAddress MIB.
+
+ Only those address types that may appear in an actual
+ routing table are allowed as values of this object.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 1 hasdefval 0
+ * readable 0 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 5/8. Values: unknown(0), ipv4(1), ipv6(2), ipv4z(3), ipv6z(4), dns(16)
+ *
+ * Its syntax is InetAddressType (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ *
+ *
+ *
+ * NOTE: NODE inetCidrRouteDestType IS NOT ACCESSIBLE
+ *
+ *
+ */
+/**
+ * check validity of inetCidrRouteDestType index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * inetCidrRouteTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ * The value is one of unknown(0), ipv4(1), ipv6(2), ipv4z(3), ipv6z(4), dns(16)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+inetCidrRouteDestType_check_index(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteDestType_check_index", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check inetCidrRouteTable index inetCidrRouteDestType.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.inetCidrRouteDestType)
+ */
+ /*
+ * we don't support all types
+ */
+ switch (rowreq_ctx->tbl_idx.inetCidrRouteDestType) {
+
+ case INETADDRESSTYPE_IPV4:
+ case INETADDRESSTYPE_IPV6:
+ break;
+
+ case INETADDRESSTYPE_UNKNOWN:
+ case INETADDRESSTYPE_IPV4Z:
+ case INETADDRESSTYPE_IPV6Z:
+ case INETADDRESSTYPE_DNS:
+ /*
+ * fall through
+ */
+
+ default:
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS; /* inetCidrRouteDestType index ok */
+} /* inetCidrRouteDestType_check_index */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteDest
+ * inetCidrRouteDest is subid 2 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.2.1.4.24.7.1.2
+ * Description:
+The destination IP address of this route.
+
+ The type of this address is determined by the value of
+ the inetCidrRouteDestType object.
+
+ The values for the index objects inetCidrRouteDest and
+ inetCidrRoutePfxLen must be consistent. When the value
+ of inetCidrRouteDest (excluding the zone index, if one
+ is present) is x, then the bitwise logical-AND
+ of x with the value of the mask formed from the
+ corresponding index object inetCidrRoutePfxLen MUST be
+ equal to x. If not, then the index pair is not
+ consistent and an inconsistentName error must be
+ returned on SET or CREATE requests.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is InetAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ *
+ *
+ *
+ * NOTE: NODE inetCidrRouteDest IS NOT ACCESSIBLE
+ *
+ *
+ */
+/**
+ * check validity of inetCidrRouteDest index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * inetCidrRouteTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ * The length is in (one of) the range set(s): 0 - 255
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+inetCidrRouteDest_check_index(inetCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteDest_check_index",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check inetCidrRouteTable index inetCidrRouteDest.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.inetCidrRouteDest)
+ */
+
+ return MFD_SUCCESS; /* inetCidrRouteDest index ok */
+} /* inetCidrRouteDest_check_index */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRoutePfxLen
+ * inetCidrRoutePfxLen is subid 3 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.2.1.4.24.7.1.3
+ * Description:
+Indicates the number of leading one bits which form the
+ mask to be logical-ANDed with the destination address
+ before being compared to the value in the
+ inetCidrRouteDest field.
+
+ The values for the index objects inetCidrRouteDest and
+ inetCidrRoutePfxLen must be consistent. When the value
+ of inetCidrRouteDest (excluding the zone index, if one
+ is present) is x, then the bitwise logical-AND
+ of x with the value of the mask formed from the
+ corresponding index object inetCidrRoutePfxLen MUST be
+ equal to x. If not, then the index pair is not
+ consistent and an inconsistentName error must be
+ returned on SET or CREATE requests.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 1 hashint 1
+ * settable 0
+ * hint: d
+ *
+ * Ranges: 0 - 2040;
+ *
+ * Its syntax is InetAddressPrefixLength (based on perltype UNSIGNED32)
+ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+ *
+ *
+ *
+ * NOTE: NODE inetCidrRoutePfxLen IS NOT ACCESSIBLE
+ *
+ *
+ */
+/**
+ * check validity of inetCidrRoutePfxLen index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * inetCidrRouteTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ * The value is in (one of) the range set(s): 0 - 2040
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+inetCidrRoutePfxLen_check_index(inetCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRoutePfxLen_check_index", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check inetCidrRouteTable index inetCidrRoutePfxLen.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.inetCidrRoutePfxLen)
+ */
+
+ return MFD_SUCCESS; /* inetCidrRoutePfxLen index ok */
+} /* inetCidrRoutePfxLen_check_index */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRoutePolicy
+ * inetCidrRoutePolicy is subid 4 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.2.1.4.24.7.1.4
+ * Description:
+This object is an opaque object without any defined
+ semantics. Its purpose is to serve as an additional
+ index which may delineate between multiple entries to
+ the same destination. The value { 0 0 } shall be used
+ as the default value for this object.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is OBJECTID (based on perltype OBJECTID)
+ * The net-snmp type is ASN_OBJECT_ID. The C type decl is oid (oid)
+ * This data type requires a length. (Max 2040)
+ *
+ *
+ *
+ * NOTE: NODE inetCidrRoutePolicy IS NOT ACCESSIBLE
+ *
+ *
+ */
+/**
+ * check validity of inetCidrRoutePolicy index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * inetCidrRouteTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+inetCidrRoutePolicy_check_index(inetCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRoutePolicy_check_index", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check inetCidrRouteTable index inetCidrRoutePolicy.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.inetCidrRoutePolicy)
+ */
+
+ return MFD_SUCCESS; /* inetCidrRoutePolicy index ok */
+} /* inetCidrRoutePolicy_check_index */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteNextHopType
+ * inetCidrRouteNextHopType is subid 5 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.2.1.4.24.7.1.5
+ * Description:
+The type of the inetCidrRouteNextHop address, as
+ defined in the InetAddress MIB.
+
+ Value should be set to unknown(0) for non-remote
+ routes.
+
+ Only those address types that may appear in an actual
+ routing table are allowed as values of this object.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 1 hasdefval 0
+ * readable 0 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 5/8. Values: unknown(0), ipv4(1), ipv6(2), ipv4z(3), ipv6z(4), dns(16)
+ *
+ * Its syntax is InetAddressType (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ *
+ *
+ *
+ * NOTE: NODE inetCidrRouteNextHopType IS NOT ACCESSIBLE
+ *
+ *
+ */
+/**
+ * check validity of inetCidrRouteNextHopType index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * inetCidrRouteTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ * The value is one of unknown(0), ipv4(1), ipv6(2), ipv4z(3), ipv6z(4), dns(16)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+inetCidrRouteNextHopType_check_index(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteNextHopType_check_index", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check inetCidrRouteTable index inetCidrRouteNextHopType.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.inetCidrRouteNextHopType)
+ */
+ /*
+ * we don't support all types
+ */
+ switch (rowreq_ctx->tbl_idx.inetCidrRouteDestType) {
+
+ case INETADDRESSTYPE_IPV4:
+ case INETADDRESSTYPE_IPV6:
+ break;
+
+ case INETADDRESSTYPE_UNKNOWN:
+ case INETADDRESSTYPE_IPV4Z:
+ case INETADDRESSTYPE_IPV6Z:
+ case INETADDRESSTYPE_DNS:
+ /*
+ * fall through
+ */
+
+ default:
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS; /* inetCidrRouteNextHopType index ok */
+} /* inetCidrRouteNextHopType_check_index */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteNextHop
+ * inetCidrRouteNextHop is subid 6 of inetCidrRouteEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.2.1.4.24.7.1.6
+ * Description:
+On remote routes, the address of the next system en
+ route. For non-remote routes, a zero length string.
+
+ The type of this address is determined by the value of
+ the inetCidrRouteNextHopType object.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is InetAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ *
+ *
+ *
+ * NOTE: NODE inetCidrRouteNextHop IS NOT ACCESSIBLE
+ *
+ *
+ */
+/**
+ * check validity of inetCidrRouteNextHop index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * inetCidrRouteTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ * The length is in (one of) the range set(s): 0 - 255
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+inetCidrRouteNextHop_check_index(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteNextHop_check_index", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check inetCidrRouteTable index inetCidrRouteNextHop.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.inetCidrRouteNextHop)
+ */
+
+ return MFD_SUCCESS; /* inetCidrRouteNextHop index ok */
+} /* inetCidrRouteNextHop_check_index */
+
+/**
+ * verify specified index is valid.
+ *
+ * This check is independent of whether or not the values specified for
+ * the columns of the new row are valid. Column values and row consistency
+ * will be checked later. At this point, only the index values should be
+ * checked.
+ *
+ * All of the individual index validation functions have been called, so this
+ * is the place to make sure they are valid as a whole when combined. If
+ * you only have one index, then you probably don't need to do anything else
+ * here.
+ *
+ * @note Keep in mind that if the indexes refer to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ *
+ * @param inetCidrRouteTable_reg
+ * Pointer to the user registration data
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_CANNOT_CREATE_NOW : index not valid right now
+ * @retval MFD_CANNOT_CREATE_EVER : index never valid
+ */
+int
+inetCidrRouteTable_validate_index(inetCidrRouteTable_registration *
+ inetCidrRouteTable_reg,
+ inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_validate_index", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:430:M: |-> Validate potential inetCidrRouteTable index.
+ */
+ if (rowreq_ctx->tbl_idx.inetCidrRouteDestType !=
+ rowreq_ctx->tbl_idx.inetCidrRouteNextHopType) {
+ DEBUGMSGTL(("inetCidrRouteTable:validate_index",
+ "ipv4/v6 cross routing not supported\n"));
+ return MFD_CANNOT_CREATE_EVER;
+ }
+
+ /*
+ * InetAddress
+ */
+ if (((INETADDRESSTYPE_IPV4 ==
+ rowreq_ctx->tbl_idx.inetCidrRouteDestType)
+ && (4 != rowreq_ctx->tbl_idx.inetCidrRouteDest_len))
+ ||
+ ((INETADDRESSTYPE_IPV6 ==
+ rowreq_ctx->tbl_idx.inetCidrRouteDestType)
+ && (16 != rowreq_ctx->tbl_idx.inetCidrRouteDest_len))) {
+ DEBUGMSGTL(("inetCidrRouteTable:validate_index",
+ "dest addr type/size mismatch\n"));
+ return MFD_CANNOT_CREATE_EVER;
+ }
+ /*
+ * InetAddress
+ */
+ if (((INETADDRESSTYPE_IPV4 ==
+ rowreq_ctx->tbl_idx.inetCidrRouteNextHopType)
+ && (4 != rowreq_ctx->tbl_idx.inetCidrRouteNextHop_len))
+ ||
+ ((INETADDRESSTYPE_IPV6 ==
+ rowreq_ctx->tbl_idx.inetCidrRouteNextHopType)
+ && (16 != rowreq_ctx->tbl_idx.inetCidrRouteNextHop_len))) {
+ DEBUGMSGTL(("inetCidrRouteTable:validate_index",
+ "next hop addr type/size mismatch\n"));
+ return MFD_CANNOT_CREATE_EVER;
+ }
+
+ return rc;
+} /* inetCidrRouteTable_validate_index */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.h
new file mode 100644
index 0000000000..89048e86b9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_data_access.h
@@ -0,0 +1,86 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: inetCidrRouteTable_data_access.h 13750 2005-11-30 21:07:05Z rstory $
+ */
+#ifndef INETCIDRROUTETABLE_DATA_ACCESS_H
+#define INETCIDRROUTETABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-FORWARD-MIB::inetCidrRouteTable is subid 7 of ipForward.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.24.7, length: 9
+ */
+
+
+ int
+ inetCidrRouteTable_init_data(inetCidrRouteTable_registration *
+ inetCidrRouteTable_reg);
+
+
+ /*
+ * TODO:180:o: Review inetCidrRouteTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define INETCIDRROUTETABLE_CACHE_TIMEOUT 60
+
+ void inetCidrRouteTable_container_init(netsnmp_container
+ **container_ptr_ptr,
+ netsnmp_cache *
+ cache);
+ void inetCidrRouteTable_container_shutdown(netsnmp_container
+ *container_ptr);
+
+ int inetCidrRouteTable_container_load(netsnmp_container
+ *container);
+ void inetCidrRouteTable_container_free(netsnmp_container
+ *container);
+
+ int inetCidrRouteTable_cache_load(netsnmp_container
+ *container);
+ void inetCidrRouteTable_cache_free(netsnmp_container
+ *container);
+
+ int
+ inetCidrRouteTable_row_prep(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ inetCidrRouteTable_validate_index(inetCidrRouteTable_registration *
+ inetCidrRouteTable_reg,
+ inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetCidrRouteDestType_check_index(inetCidrRouteTable_rowreq_ctx * rowreq_ctx); /* internal */
+ int inetCidrRouteDest_check_index(inetCidrRouteTable_rowreq_ctx * rowreq_ctx); /* internal */
+ int inetCidrRoutePfxLen_check_index(inetCidrRouteTable_rowreq_ctx * rowreq_ctx); /* internal */
+ int inetCidrRoutePolicy_check_index(inetCidrRouteTable_rowreq_ctx * rowreq_ctx); /* internal */
+ int inetCidrRouteNextHopType_check_index(inetCidrRouteTable_rowreq_ctx * rowreq_ctx); /* internal */
+ int inetCidrRouteNextHop_check_index(inetCidrRouteTable_rowreq_ctx * rowreq_ctx); /* internal */
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* INETCIDRROUTETABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c
new file mode 100644
index 0000000000..8b6e1d9fce
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c
@@ -0,0 +1,2366 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: inetCidrRouteTable_interface.c 15781 2007-01-23 22:55:06Z rstory $
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "inetCidrRouteTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "inetCidrRouteTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-FORWARD-MIB::inetCidrRouteTable is subid 7 of ipForward.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.24.7, length: 9
+ */
+typedef struct inetCidrRouteTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ inetCidrRouteTable_registration *user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} inetCidrRouteTable_interface_ctx;
+
+static inetCidrRouteTable_interface_ctx inetCidrRouteTable_if_ctx;
+
+static void
+ _inetCidrRouteTable_container_init(inetCidrRouteTable_interface_ctx *
+ if_ctx);
+static void
+ _inetCidrRouteTable_container_shutdown(inetCidrRouteTable_interface_ctx *
+ if_ctx);
+
+
+netsnmp_container *
+inetCidrRouteTable_container_get(void)
+{
+ return inetCidrRouteTable_if_ctx.container;
+}
+
+inetCidrRouteTable_registration *
+inetCidrRouteTable_registration_get(void)
+{
+ return inetCidrRouteTable_if_ctx.user_ctx;
+}
+
+inetCidrRouteTable_registration *
+inetCidrRouteTable_registration_set(inetCidrRouteTable_registration *
+ newreg)
+{
+ inetCidrRouteTable_registration *old =
+ inetCidrRouteTable_if_ctx.user_ctx;
+ inetCidrRouteTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+inetCidrRouteTable_container_size(void)
+{
+ return CONTAINER_SIZE(inetCidrRouteTable_if_ctx.container);
+}
+
+u_int
+inetCidrRouteTable_dirty_get(void)
+{
+ return inetCidrRouteTable_if_ctx.table_dirty;
+}
+
+void
+inetCidrRouteTable_dirty_set(u_int status)
+{
+ DEBUGMSGTL(("inetCidrRouteTable:inetCidrRouteTable_dirty_set",
+ "called. was %d, now %d\n",
+ inetCidrRouteTable_if_ctx.table_dirty, status));
+ inetCidrRouteTable_if_ctx.table_dirty = status;
+}
+
+netsnmp_cache *
+inetCidrRouteTable_get_cache(void)
+{
+ return inetCidrRouteTable_if_ctx.cache;
+}
+
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_inetCidrRouteTable_pre_request;
+static Netsnmp_Node_Handler _mfd_inetCidrRouteTable_post_request;
+static Netsnmp_Node_Handler _mfd_inetCidrRouteTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_inetCidrRouteTable_get_values;
+static Netsnmp_Node_Handler _mfd_inetCidrRouteTable_check_objects;
+static Netsnmp_Node_Handler _mfd_inetCidrRouteTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_inetCidrRouteTable_set_values;
+static Netsnmp_Node_Handler _mfd_inetCidrRouteTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_inetCidrRouteTable_undo_values;
+static Netsnmp_Node_Handler _mfd_inetCidrRouteTable_commit;
+static Netsnmp_Node_Handler _mfd_inetCidrRouteTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_inetCidrRouteTable_irreversible_commit;
+static Netsnmp_Node_Handler _mfd_inetCidrRouteTable_check_dependencies;
+
+NETSNMP_STATIC_INLINE int
+ _inetCidrRouteTable_check_indexes(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+/**
+ * @internal
+ * Initialize the table inetCidrRouteTable
+ * (Define its contents and how it's structured)
+ */
+void
+_inetCidrRouteTable_initialize_interface(inetCidrRouteTable_registration *
+ reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &inetCidrRouteTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info =
+ &inetCidrRouteTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_inetCidrRouteTable_initialize_interface", "called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for inetCidrRouteTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
+ /** index: inetCidrRouteDestType */
+ ASN_OCTET_STR,
+ /** index: inetCidrRouteDest */
+ ASN_UNSIGNED,
+ /** index: inetCidrRoutePfxLen */
+ ASN_OBJECT_ID,
+ /** index: inetCidrRoutePolicy */
+ ASN_INTEGER,
+ /** index: inetCidrRouteNextHopType */
+ ASN_OCTET_STR,
+ /** index: inetCidrRouteNextHop */
+ 0);
+
+ /*
+ * Define the minimum and maximum accessible columns. This
+ * optimizes retrival.
+ */
+ tbl_info->min_column = INETCIDRROUTETABLE_MIN_COL;
+ tbl_info->max_column = INETCIDRROUTETABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ inetCidrRouteTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ inetCidrRouteTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _inetCidrRouteTable_container_init(&inetCidrRouteTable_if_ctx);
+ if (NULL == inetCidrRouteTable_if_ctx.container) {
+ snmp_log(LOG_ERR,
+ "could not initialize container for inetCidrRouteTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup =
+ _mfd_inetCidrRouteTable_object_lookup;
+ access_multiplexer->get_values = _mfd_inetCidrRouteTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_inetCidrRouteTable_pre_request;
+ access_multiplexer->post_request =
+ _mfd_inetCidrRouteTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks =
+ _mfd_inetCidrRouteTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_inetCidrRouteTable_undo_setup;
+ access_multiplexer->undo_cleanup =
+ _mfd_inetCidrRouteTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_inetCidrRouteTable_set_values;
+ access_multiplexer->undo_sets = _mfd_inetCidrRouteTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_inetCidrRouteTable_commit;
+ access_multiplexer->undo_commit = _mfd_inetCidrRouteTable_undo_commit;
+ access_multiplexer->irreversible_commit =
+ _mfd_inetCidrRouteTable_irreversible_commit;
+
+ /*
+ * REQUIRED for tables with dependencies
+ */
+ access_multiplexer->consistency_checks =
+ _mfd_inetCidrRouteTable_check_dependencies;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("inetCidrRouteTable:init_inetCidrRouteTable",
+ "Registering inetCidrRouteTable as a mibs-for-dummies table.\n"));
+ handler =
+ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo =
+ netsnmp_handler_registration_create("inetCidrRouteTable", handler,
+ inetCidrRouteTable_oid,
+ inetCidrRouteTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE);
+ if (NULL == reginfo) {
+ snmp_log(LOG_ERR, "error registering table inetCidrRouteTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &inetCidrRouteTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if (access_multiplexer->object_lookup)
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if (access_multiplexer->set_values)
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if (access_multiplexer->irreversible_commit)
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if (access_multiplexer->object_syntax_checks)
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if (access_multiplexer->pre_request)
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if (access_multiplexer->post_request)
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if (access_multiplexer->undo_setup)
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if (access_multiplexer->undo_cleanup)
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if (access_multiplexer->undo_sets)
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if (access_multiplexer->row_creation)
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if (access_multiplexer->consistency_checks)
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if (access_multiplexer->commit)
+ mfd_modes |= BABY_STEP_COMMIT;
+ if (access_multiplexer->undo_commit)
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ inetCidrRouteTable_if_ctx.
+ container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if (NULL != inetCidrRouteTable_if_ctx.cache) {
+ handler =
+ netsnmp_cache_handler_get(inetCidrRouteTable_if_ctx.cache);
+ netsnmp_inject_handler(reginfo, handler);
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _inetCidrRouteTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table inetCidrRouteTable
+ */
+void
+_inetCidrRouteTable_shutdown_interface(inetCidrRouteTable_registration *
+ reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _inetCidrRouteTable_container_shutdown(&inetCidrRouteTable_if_ctx);
+}
+
+void
+inetCidrRouteTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ inetCidrRouteTable_if_ctx.tbl_info.valid_columns = vc;
+} /* inetCidrRouteTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+inetCidrRouteTable_index_to_oid(netsnmp_index * oid_idx,
+ inetCidrRouteTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * inetCidrRouteDestType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ netsnmp_variable_list var_inetCidrRouteDestType;
+ /*
+ * inetCidrRouteDest(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ netsnmp_variable_list var_inetCidrRouteDest;
+ /*
+ * inetCidrRoutePfxLen(3)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
+ */
+ netsnmp_variable_list var_inetCidrRoutePfxLen;
+ /*
+ * inetCidrRoutePolicy(4)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_inetCidrRoutePolicy;
+ /*
+ * inetCidrRouteNextHopType(5)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ netsnmp_variable_list var_inetCidrRouteNextHopType;
+ /*
+ * inetCidrRouteNextHop(6)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ netsnmp_variable_list var_inetCidrRouteNextHop;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_inetCidrRouteDestType, 0x00,
+ sizeof(var_inetCidrRouteDestType));
+ var_inetCidrRouteDestType.type = ASN_INTEGER;
+ memset(&var_inetCidrRouteDest, 0x00, sizeof(var_inetCidrRouteDest));
+ var_inetCidrRouteDest.type = ASN_OCTET_STR;
+ memset(&var_inetCidrRoutePfxLen, 0x00,
+ sizeof(var_inetCidrRoutePfxLen));
+ var_inetCidrRoutePfxLen.type = ASN_UNSIGNED;
+ memset(&var_inetCidrRoutePolicy, 0x00,
+ sizeof(var_inetCidrRoutePolicy));
+ var_inetCidrRoutePolicy.type = ASN_OBJECT_ID;
+ memset(&var_inetCidrRouteNextHopType, 0x00,
+ sizeof(var_inetCidrRouteNextHopType));
+ var_inetCidrRouteNextHopType.type = ASN_INTEGER;
+ memset(&var_inetCidrRouteNextHop, 0x00,
+ sizeof(var_inetCidrRouteNextHop));
+ var_inetCidrRouteNextHop.type = ASN_OCTET_STR;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_inetCidrRouteDestType.next_variable = &var_inetCidrRouteDest;
+ var_inetCidrRouteDest.next_variable = &var_inetCidrRoutePfxLen;
+ var_inetCidrRoutePfxLen.next_variable = &var_inetCidrRoutePolicy;
+ var_inetCidrRoutePolicy.next_variable = &var_inetCidrRouteNextHopType;
+ var_inetCidrRouteNextHopType.next_variable = &var_inetCidrRouteNextHop;
+ var_inetCidrRouteNextHop.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_index_to_oid", "called\n"));
+
+ /*
+ * inetCidrRouteDestType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ snmp_set_var_value(&var_inetCidrRouteDestType,
+ (u_char *) & mib_idx->inetCidrRouteDestType,
+ sizeof(mib_idx->inetCidrRouteDestType));
+
+ /*
+ * inetCidrRouteDest(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ snmp_set_var_value(&var_inetCidrRouteDest,
+ (u_char *) & mib_idx->inetCidrRouteDest,
+ mib_idx->inetCidrRouteDest_len *
+ sizeof(mib_idx->inetCidrRouteDest[0]));
+
+ /*
+ * inetCidrRoutePfxLen(3)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
+ */
+ snmp_set_var_value(&var_inetCidrRoutePfxLen,
+ (u_char *) & mib_idx->inetCidrRoutePfxLen,
+ sizeof(mib_idx->inetCidrRoutePfxLen));
+
+ /*
+ * inetCidrRoutePolicy(4)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/a/w/e/r/d/h
+ */
+ snmp_set_var_value(&var_inetCidrRoutePolicy,
+ (u_char *) & mib_idx->inetCidrRoutePolicy,
+ mib_idx->inetCidrRoutePolicy_len *
+ sizeof(mib_idx->inetCidrRoutePolicy[0]));
+
+ /*
+ * inetCidrRouteNextHopType(5)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ snmp_set_var_value(&var_inetCidrRouteNextHopType,
+ (u_char *) & mib_idx->inetCidrRouteNextHopType,
+ sizeof(mib_idx->inetCidrRouteNextHopType));
+
+ /*
+ * inetCidrRouteNextHop(6)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ snmp_set_var_value(&var_inetCidrRouteNextHop,
+ (u_char *) & mib_idx->inetCidrRouteNextHop,
+ mib_idx->inetCidrRouteNextHop_len *
+ sizeof(mib_idx->inetCidrRouteNextHop[0]));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_inetCidrRouteDestType);
+ if (err)
+ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_inetCidrRouteDestType);
+
+ return err;
+} /* inetCidrRouteTable_index_to_oid */
+
+/**
+ * extract inetCidrRouteTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+inetCidrRouteTable_index_from_oid(netsnmp_index * oid_idx,
+ inetCidrRouteTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * inetCidrRouteDestType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ netsnmp_variable_list var_inetCidrRouteDestType;
+ /*
+ * inetCidrRouteDest(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ netsnmp_variable_list var_inetCidrRouteDest;
+ /*
+ * inetCidrRoutePfxLen(3)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
+ */
+ netsnmp_variable_list var_inetCidrRoutePfxLen;
+ /*
+ * inetCidrRoutePolicy(4)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_inetCidrRoutePolicy;
+ /*
+ * inetCidrRouteNextHopType(5)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ netsnmp_variable_list var_inetCidrRouteNextHopType;
+ /*
+ * inetCidrRouteNextHop(6)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ netsnmp_variable_list var_inetCidrRouteNextHop;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_inetCidrRouteDestType, 0x00,
+ sizeof(var_inetCidrRouteDestType));
+ var_inetCidrRouteDestType.type = ASN_INTEGER;
+ memset(&var_inetCidrRouteDest, 0x00, sizeof(var_inetCidrRouteDest));
+ var_inetCidrRouteDest.type = ASN_OCTET_STR;
+ memset(&var_inetCidrRoutePfxLen, 0x00,
+ sizeof(var_inetCidrRoutePfxLen));
+ var_inetCidrRoutePfxLen.type = ASN_UNSIGNED;
+ memset(&var_inetCidrRoutePolicy, 0x00,
+ sizeof(var_inetCidrRoutePolicy));
+ var_inetCidrRoutePolicy.type = ASN_OBJECT_ID;
+ memset(&var_inetCidrRouteNextHopType, 0x00,
+ sizeof(var_inetCidrRouteNextHopType));
+ var_inetCidrRouteNextHopType.type = ASN_INTEGER;
+ memset(&var_inetCidrRouteNextHop, 0x00,
+ sizeof(var_inetCidrRouteNextHop));
+ var_inetCidrRouteNextHop.type = ASN_OCTET_STR;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_inetCidrRouteDestType.next_variable = &var_inetCidrRouteDest;
+ var_inetCidrRouteDest.next_variable = &var_inetCidrRoutePfxLen;
+ var_inetCidrRoutePfxLen.next_variable = &var_inetCidrRoutePolicy;
+ var_inetCidrRoutePolicy.next_variable = &var_inetCidrRouteNextHopType;
+ var_inetCidrRouteNextHopType.next_variable = &var_inetCidrRouteNextHop;
+ var_inetCidrRouteNextHop.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_index_from_oid", "called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
+ &var_inetCidrRouteDestType);
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->inetCidrRouteDestType =
+ *((u_long *) var_inetCidrRouteDestType.val.string);
+ /*
+ * NOTE: val_len is in bytes, inetCidrRouteDest_len might not be
+ */
+ if (var_inetCidrRouteDest.val_len >
+ sizeof(mib_idx->inetCidrRouteDest))
+ err = SNMP_ERR_GENERR;
+ else {
+ memcpy(mib_idx->inetCidrRouteDest,
+ var_inetCidrRouteDest.val.string,
+ var_inetCidrRouteDest.val_len);
+ mib_idx->inetCidrRouteDest_len =
+ var_inetCidrRouteDest.val_len /
+ sizeof(mib_idx->inetCidrRouteDest[0]);
+ }
+ mib_idx->inetCidrRoutePfxLen =
+ *((u_long *) var_inetCidrRoutePfxLen.val.string);
+ /*
+ * NOTE: val_len is in bytes, inetCidrRoutePolicy_len might not be
+ */
+ if (var_inetCidrRoutePolicy.val_len >
+ sizeof(mib_idx->inetCidrRoutePolicy))
+ err = SNMP_ERR_GENERR;
+ else {
+ memcpy(mib_idx->inetCidrRoutePolicy,
+ var_inetCidrRoutePolicy.val.string,
+ var_inetCidrRoutePolicy.val_len);
+ mib_idx->inetCidrRoutePolicy_len =
+ var_inetCidrRoutePolicy.val_len /
+ sizeof(mib_idx->inetCidrRoutePolicy[0]);
+ }
+ mib_idx->inetCidrRouteNextHopType =
+ *((u_long *) var_inetCidrRouteNextHopType.val.string);
+ /*
+ * NOTE: val_len is in bytes, inetCidrRouteNextHop_len might not be
+ */
+ if (var_inetCidrRouteNextHop.val_len >
+ sizeof(mib_idx->inetCidrRouteNextHop))
+ err = SNMP_ERR_GENERR;
+ else {
+ memcpy(mib_idx->inetCidrRouteNextHop,
+ var_inetCidrRouteNextHop.val.string,
+ var_inetCidrRouteNextHop.val_len);
+ mib_idx->inetCidrRouteNextHop_len =
+ var_inetCidrRouteNextHop.val_len /
+ sizeof(mib_idx->inetCidrRouteNextHop[0]);
+ }
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_inetCidrRouteDestType);
+
+ return err;
+} /* inetCidrRouteTable_index_from_oid */
+
+
+/*
+ *********************************************************************
+ * @internal
+ * allocate resources for a inetCidrRouteTable_rowreq_ctx
+ */
+inetCidrRouteTable_rowreq_ctx *
+inetCidrRouteTable_allocate_rowreq_ctx(inetCidrRouteTable_data * data,
+ void *user_init_ctx)
+{
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(inetCidrRouteTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:inetCidrRouteTable_allocate_rowreq_ctx", "called\n"));
+
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+ "inetCidrRouteTable_rowreq_ctx.\n");
+ return NULL;
+ } else {
+ if (NULL != data) {
+ /*
+ * track if we got data from user
+ */
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DATA_FROM_USER;
+ rowreq_ctx->data = data;
+ } else if (NULL ==
+ (rowreq_ctx->data =
+ inetCidrRouteTable_allocate_data())) {
+ SNMP_FREE(rowreq_ctx);
+ return NULL;
+ }
+ }
+
+ /*
+ * undo context will be allocated when needed (in *_undo_setup)
+ */
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->inetCidrRouteTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if (SNMPERR_SUCCESS !=
+ inetCidrRouteTable_rowreq_ctx_init(rowreq_ctx,
+ user_init_ctx)) {
+ inetCidrRouteTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* inetCidrRouteTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a inetCidrRouteTable_rowreq_ctx
+ */
+void
+inetCidrRouteTable_release_rowreq_ctx(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:inetCidrRouteTable:inetCidrRouteTable_release_rowreq_ctx", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ inetCidrRouteTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ /*
+ * for non-transient data, don't free data we got from the user
+ */
+ if ((rowreq_ctx->data) &&
+ !(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER))
+ inetCidrRouteTable_release_data(rowreq_ctx->data);
+
+ if (rowreq_ctx->undo)
+ inetCidrRouteTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* inetCidrRouteTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_inetCidrRouteTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_pre_request", "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:inetCidrRouteTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = inetCidrRouteTable_pre_request(inetCidrRouteTable_if_ctx.
+ user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("inetCidrRouteTable", "error %d from "
+ "inetCidrRouteTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetCidrRouteTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_inetCidrRouteTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_post_request", "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ inetCidrRouteTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:inetCidrRouteTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && inetCidrRouteTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING,
+ "inetCidrRouteTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = inetCidrRouteTable_post_request(inetCidrRouteTable_if_ctx.
+ user_ctx, packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("inetCidrRouteTable", "error %d from "
+ "inetCidrRouteTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetCidrRouteTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static inetCidrRouteTable_rowreq_ctx *
+_mfd_inetCidrRouteTable_rowreq_from_index(netsnmp_index * oid_idx,
+ int *rc_ptr)
+{
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx;
+ inetCidrRouteTable_mib_index mib_idx;
+ int rc;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_rowreq_from_index", "called\n"));
+
+ if (NULL == rc_ptr)
+ rc_ptr = &rc;
+ *rc_ptr = MFD_SUCCESS;
+
+ memset(&mib_idx, 0x0, sizeof(mib_idx));
+
+ /*
+ * try to parse oid
+ */
+ *rc_ptr = inetCidrRouteTable_index_from_oid(oid_idx, &mib_idx);
+ if (MFD_SUCCESS != *rc_ptr) {
+ DEBUGMSGT(("inetCidrRouteTable", "error parsing index\n"));
+ return NULL;
+ }
+
+ /*
+ * allocate new context
+ */
+ rowreq_ctx = inetCidrRouteTable_allocate_rowreq_ctx(NULL, NULL);
+ if (NULL == rowreq_ctx) {
+ *rc_ptr = MFD_ERROR;
+ return NULL; /* msg already logged */
+ }
+
+ memcpy(&rowreq_ctx->tbl_idx, &mib_idx, sizeof(mib_idx));
+
+ /*
+ * check indexes
+ */
+ *rc_ptr = _inetCidrRouteTable_check_indexes(rowreq_ctx);
+ if (MFD_SUCCESS != *rc_ptr) {
+ netsnmp_assert((*rc_ptr == SNMP_ERR_NOCREATION) ||
+ (*rc_ptr == SNMP_ERR_INCONSISTENTNAME));
+ inetCidrRouteTable_release_rowreq_ctx(rowreq_ctx);
+ return NULL;
+ }
+
+ /*
+ * copy indexes
+ */
+ rowreq_ctx->oid_idx.len = oid_idx->len;
+ memcpy(rowreq_ctx->oid_idx.oids, oid_idx->oids,
+ oid_idx->len * sizeof(oid));
+
+ return rowreq_ctx;
+} /* _mfd_inetCidrRouteTable_rowreq_from_index */
+
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_inetCidrRouteTable_object_lookup(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_object_lookup", "called\n"));
+
+ /*
+ * get our context from mfd
+ * inetCidrRouteTable_interface_ctx *if_ctx =
+ * (inetCidrRouteTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if (NULL == rowreq_ctx) {
+ netsnmp_table_request_info *tblreq_info;
+ netsnmp_index oid_idx;
+
+ tblreq_info = netsnmp_extract_table_info(requests);
+ if (NULL == tblreq_info) {
+ snmp_log(LOG_ERR, "request had no table info\n");
+ return MFD_ERROR;
+ }
+
+ /*
+ * try create rowreq
+ */
+ oid_idx.oids = tblreq_info->index_oid;
+ oid_idx.len = tblreq_info->index_oid_len;
+
+ rowreq_ctx =
+ _mfd_inetCidrRouteTable_rowreq_from_index(&oid_idx, &rc);
+ if (MFD_SUCCESS == rc) {
+ netsnmp_assert(NULL != rowreq_ctx);
+ rowreq_ctx->rowreq_flags |= MFD_ROW_CREATED;
+ /*
+ * add rowreq_ctx to request data lists
+ */
+ netsnmp_container_table_row_insert(requests, (netsnmp_index *)
+ rowreq_ctx);
+ }
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ inetCidrRouteTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_inetCidrRouteTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_inetCidrRouteTable_get_column(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_get_column", "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * inetCidrRouteIfIndex(7)/InterfaceIndexOrZero/ASN_INTEGER/long(long)//l/A/W/e/R/d/H
+ */
+ case COLUMN_INETCIDRROUTEIFINDEX:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = inetCidrRouteIfIndex_get(rowreq_ctx,
+ (long *) var->val.string);
+ break;
+
+ /*
+ * inetCidrRouteType(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_INETCIDRROUTETYPE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = inetCidrRouteType_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * inetCidrRouteProto(9)/IANAipRouteProtocol/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_INETCIDRROUTEPROTO:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = inetCidrRouteProto_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * inetCidrRouteAge(10)/GAUGE/ASN_GAUGE/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_INETCIDRROUTEAGE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_GAUGE;
+ rc = inetCidrRouteAge_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * inetCidrRouteNextHopAS(11)/InetAutonomousSystemNumber/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/D/H
+ */
+ case COLUMN_INETCIDRROUTENEXTHOPAS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_UNSIGNED;
+ rc = inetCidrRouteNextHopAS_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * inetCidrRouteMetric1(12)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC1:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = inetCidrRouteMetric1_get(rowreq_ctx,
+ (long *) var->val.string);
+ break;
+
+ /*
+ * inetCidrRouteMetric2(13)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC2:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = inetCidrRouteMetric2_get(rowreq_ctx,
+ (long *) var->val.string);
+ break;
+
+ /*
+ * inetCidrRouteMetric3(14)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC3:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = inetCidrRouteMetric3_get(rowreq_ctx,
+ (long *) var->val.string);
+ break;
+
+ /*
+ * inetCidrRouteMetric4(15)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC4:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = inetCidrRouteMetric4_get(rowreq_ctx,
+ (long *) var->val.string);
+ break;
+
+ /*
+ * inetCidrRouteMetric5(16)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC5:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = inetCidrRouteMetric5_get(rowreq_ctx,
+ (long *) var->val.string);
+ break;
+
+ /*
+ * inetCidrRouteStatus(17)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_INETCIDRROUTESTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = inetCidrRouteStatus_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _inetCidrRouteTable_get_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _inetCidrRouteTable_get_column */
+
+int
+_mfd_inetCidrRouteTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ u_char *old_string;
+ void (*dataFreeHook) (void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_get_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if (NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ } else if (requests->requestvb->buf ==
+ requests->requestvb->val.string) {
+ if (requests->requestvb->val_len !=
+ sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _inetCidrRouteTable_get_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ if (MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ } else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if (rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if (old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if (dataFreeHook)
+ (*dataFreeHook) (old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetCidrRouteTable_get_values */
+
+NETSNMP_STATIC_INLINE int
+_inetCidrRouteTable_check_indexes(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_inetCidrRouteTable_check_indexes", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+
+ /*
+ * (INDEX) inetCidrRouteDestType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (rowreq_ctx->tbl_idx.inetCidrRouteDestType !=
+ INETADDRESSTYPE_UNKNOWN)
+ && (rowreq_ctx->tbl_idx.inetCidrRouteDestType !=
+ INETADDRESSTYPE_IPV4)
+ && (rowreq_ctx->tbl_idx.inetCidrRouteDestType !=
+ INETADDRESSTYPE_IPV6)
+ && (rowreq_ctx->tbl_idx.inetCidrRouteDestType !=
+ INETADDRESSTYPE_IPV4Z)
+ && (rowreq_ctx->tbl_idx.inetCidrRouteDestType !=
+ INETADDRESSTYPE_IPV6Z)
+ && (rowreq_ctx->tbl_idx.inetCidrRouteDestType !=
+ INETADDRESSTYPE_DNS)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = inetCidrRouteDestType_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * (INDEX) inetCidrRouteDest(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ /*
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((rowreq_ctx->tbl_idx.inetCidrRouteDest_len < 0)
+ || (rowreq_ctx->tbl_idx.inetCidrRouteDest_len > 255))
+ ) {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = inetCidrRouteDest_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * (INDEX) inetCidrRoutePfxLen(3)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
+ */
+ /*
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((rowreq_ctx->tbl_idx.inetCidrRoutePfxLen < 0)
+ || (rowreq_ctx->tbl_idx.inetCidrRoutePfxLen > 2040))
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = inetCidrRoutePfxLen_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * (INDEX) inetCidrRoutePolicy(4)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/a/w/e/r/d/h
+ */
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = inetCidrRoutePolicy_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * (INDEX) inetCidrRouteNextHopType(5)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (rowreq_ctx->tbl_idx.inetCidrRouteNextHopType !=
+ INETADDRESSTYPE_UNKNOWN)
+ && (rowreq_ctx->tbl_idx.inetCidrRouteNextHopType !=
+ INETADDRESSTYPE_IPV4)
+ && (rowreq_ctx->tbl_idx.inetCidrRouteNextHopType !=
+ INETADDRESSTYPE_IPV6)
+ && (rowreq_ctx->tbl_idx.inetCidrRouteNextHopType !=
+ INETADDRESSTYPE_IPV4Z)
+ && (rowreq_ctx->tbl_idx.inetCidrRouteNextHopType !=
+ INETADDRESSTYPE_IPV6Z)
+ && (rowreq_ctx->tbl_idx.inetCidrRouteNextHopType !=
+ INETADDRESSTYPE_DNS)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = inetCidrRouteNextHopType_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * (INDEX) inetCidrRouteNextHop(6)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ /*
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((rowreq_ctx->tbl_idx.inetCidrRouteNextHop_len < 0)
+ || (rowreq_ctx->tbl_idx.inetCidrRouteNextHop_len > 255))
+ ) {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = inetCidrRouteNextHop_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * if individual parts look ok, check them as a whole
+ */
+ return inetCidrRouteTable_validate_index(inetCidrRouteTable_if_ctx.
+ user_ctx, rowreq_ctx);
+} /* _inetCidrRouteTable_check_indexes */
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_inetCidrRouteTable_check_column(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, netsnmp_variable_list * var,
+ int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_inetCidrRouteTable_check_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+ /*
+ * (INDEX) inetCidrRouteDestType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ case COLUMN_INETCIDRROUTEDESTTYPE:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /*
+ * (INDEX) inetCidrRouteDest(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ case COLUMN_INETCIDRROUTEDEST:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /*
+ * (INDEX) inetCidrRoutePfxLen(3)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
+ */
+ case COLUMN_INETCIDRROUTEPFXLEN:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /*
+ * (INDEX) inetCidrRoutePolicy(4)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/a/w/e/r/d/h
+ */
+ case COLUMN_INETCIDRROUTEPOLICY:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /*
+ * (INDEX) inetCidrRouteNextHopType(5)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ case COLUMN_INETCIDRROUTENEXTHOPTYPE:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /*
+ * (INDEX) inetCidrRouteNextHop(6)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ case COLUMN_INETCIDRROUTENEXTHOP:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /*
+ * inetCidrRouteIfIndex(7)/InterfaceIndexOrZero/ASN_INTEGER/long(long)//l/A/W/e/R/d/H
+ */
+ case COLUMN_INETCIDRROUTEIFINDEX:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ /*
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((*var->val.integer < 0)
+ || (*var->val.integer > 2147483647))
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:_inetCidrRouteTable_check_column:inetCidrRouteIfIndex", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = inetCidrRouteIfIndex_check_value(rowreq_ctx,
+ *((long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from inetCidrRouteIfIndex_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * inetCidrRouteType(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_INETCIDRROUTETYPE:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (*var->val.integer != INETCIDRROUTETYPE_OTHER)
+ && (*var->val.integer != INETCIDRROUTETYPE_REJECT)
+ && (*var->val.integer != INETCIDRROUTETYPE_LOCAL)
+ && (*var->val.integer != INETCIDRROUTETYPE_REMOTE)
+ && (*var->val.integer != INETCIDRROUTETYPE_BLACKHOLE)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:_inetCidrRouteTable_check_column:inetCidrRouteType", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = inetCidrRouteType_check_value(rowreq_ctx,
+ *((u_long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from inetCidrRouteType_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * inetCidrRouteProto(9)/IANAipRouteProtocol/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_INETCIDRROUTEPROTO:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * inetCidrRouteAge(10)/GAUGE/ASN_GAUGE/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_INETCIDRROUTEAGE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * inetCidrRouteNextHopAS(11)/InetAutonomousSystemNumber/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/D/H
+ */
+ case COLUMN_INETCIDRROUTENEXTHOPAS:
+ rc = netsnmp_check_vb_type(var, ASN_UNSIGNED);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:_inetCidrRouteTable_check_column:inetCidrRouteNextHopAS", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = inetCidrRouteNextHopAS_check_value(rowreq_ctx,
+ *((u_long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from inetCidrRouteNextHopAS_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * inetCidrRouteMetric1(12)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC1:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:_inetCidrRouteTable_check_column:inetCidrRouteMetric1", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = inetCidrRouteMetric1_check_value(rowreq_ctx,
+ *((long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from inetCidrRouteMetric1_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * inetCidrRouteMetric2(13)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC2:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:_inetCidrRouteTable_check_column:inetCidrRouteMetric2", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = inetCidrRouteMetric2_check_value(rowreq_ctx,
+ *((long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from inetCidrRouteMetric2_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * inetCidrRouteMetric3(14)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC3:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:_inetCidrRouteTable_check_column:inetCidrRouteMetric3", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = inetCidrRouteMetric3_check_value(rowreq_ctx,
+ *((long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from inetCidrRouteMetric3_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * inetCidrRouteMetric4(15)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC4:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:_inetCidrRouteTable_check_column:inetCidrRouteMetric4", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = inetCidrRouteMetric4_check_value(rowreq_ctx,
+ *((long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from inetCidrRouteMetric4_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * inetCidrRouteMetric5(16)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC5:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:_inetCidrRouteTable_check_column:inetCidrRouteMetric5", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = inetCidrRouteMetric5_check_value(rowreq_ctx,
+ *((long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from inetCidrRouteMetric5_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * inetCidrRouteStatus(17)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_INETCIDRROUTESTATUS:
+ rc = netsnmp_check_vb_rowstatus_value(var);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:_inetCidrRouteTable_check_column:inetCidrRouteStatus", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = inetCidrRouteStatus_check_value(rowreq_ctx,
+ *((u_long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from inetCidrRouteStatus_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR,
+ "unknown column %d in _inetCidrRouteTable_check_column\n",
+ column);
+ }
+
+ return rc;
+} /* _inetCidrRouteTable_check_column */
+
+int
+_mfd_inetCidrRouteTable_check_objects(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_check_objects", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _inetCidrRouteTable_check_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetCidrRouteTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: check dependencies
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check dependencies wrapper
+ */
+static int
+_mfd_inetCidrRouteTable_check_dependencies(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_check_dependencies", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = inetCidrRouteTable_check_dependencies(rowreq_ctx);
+ if (rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:mfd", "error %d from "
+ "inetCidrRouteTable_check_dependencies\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetCidrRouteTable_check_dependencies */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_inetCidrRouteTable_undo_setup_column(inetCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_inetCidrRouteTable_undo_setup_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * inetCidrRouteIfIndex(7)/InterfaceIndexOrZero/ASN_INTEGER/long(long)//l/A/W/e/R/d/H
+ */
+ case COLUMN_INETCIDRROUTEIFINDEX:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTEIFINDEX_FLAG;
+ break;
+
+ /*
+ * inetCidrRouteType(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_INETCIDRROUTETYPE:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTETYPE_FLAG;
+ break;
+
+ /*
+ * inetCidrRouteNextHopAS(11)/InetAutonomousSystemNumber/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/D/H
+ */
+ case COLUMN_INETCIDRROUTENEXTHOPAS:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTENEXTHOPAS_FLAG;
+ break;
+
+ /*
+ * inetCidrRouteMetric1(12)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC1:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTEMETRIC1_FLAG;
+ break;
+
+ /*
+ * inetCidrRouteMetric2(13)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC2:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTEMETRIC2_FLAG;
+ break;
+
+ /*
+ * inetCidrRouteMetric3(14)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC3:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTEMETRIC3_FLAG;
+ break;
+
+ /*
+ * inetCidrRouteMetric4(15)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC4:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTEMETRIC4_FLAG;
+ break;
+
+ /*
+ * inetCidrRouteMetric5(16)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC5:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTEMETRIC5_FLAG;
+ break;
+
+ /*
+ * inetCidrRouteStatus(17)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_INETCIDRROUTESTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTESTATUS_FLAG;
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _inetCidrRouteTable_undo_setup_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _inetCidrRouteTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_inetCidrRouteTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_undo_setup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = inetCidrRouteTable_allocate_data();
+ if (NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = inetCidrRouteTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:mfd", "error %d from "
+ "inetCidrRouteTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ } else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info *tri;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _inetCidrRouteTable_undo_setup_column(rowreq_ctx,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:mfd", "error %d from "
+ "inetCidrRouteTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetCidrRouteTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_inetCidrRouteTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_undo_cleanup", "called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = inetCidrRouteTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("inetCidrRouteTable:mfd", "error %d from "
+ "inetCidrRouteTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if (rowreq_ctx->undo) {
+ inetCidrRouteTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetCidrRouteTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_inetCidrRouteTable_set_column(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_inetCidrRouteTable_set_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * inetCidrRouteIfIndex(7)/InterfaceIndexOrZero/ASN_INTEGER/long(long)//l/A/W/e/R/d/H
+ */
+ case COLUMN_INETCIDRROUTEIFINDEX:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTEIFINDEX_FLAG;
+ rc = inetCidrRouteIfIndex_set(rowreq_ctx,
+ *((long *) var->val.string));
+ break;
+
+ /*
+ * inetCidrRouteType(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_INETCIDRROUTETYPE:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTETYPE_FLAG;
+ rc = inetCidrRouteType_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ /*
+ * inetCidrRouteNextHopAS(11)/InetAutonomousSystemNumber/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/D/H
+ */
+ case COLUMN_INETCIDRROUTENEXTHOPAS:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTENEXTHOPAS_FLAG;
+ rc = inetCidrRouteNextHopAS_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ /*
+ * inetCidrRouteMetric1(12)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC1:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTEMETRIC1_FLAG;
+ rc = inetCidrRouteMetric1_set(rowreq_ctx,
+ *((long *) var->val.string));
+ break;
+
+ /*
+ * inetCidrRouteMetric2(13)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC2:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTEMETRIC2_FLAG;
+ rc = inetCidrRouteMetric2_set(rowreq_ctx,
+ *((long *) var->val.string));
+ break;
+
+ /*
+ * inetCidrRouteMetric3(14)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC3:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTEMETRIC3_FLAG;
+ rc = inetCidrRouteMetric3_set(rowreq_ctx,
+ *((long *) var->val.string));
+ break;
+
+ /*
+ * inetCidrRouteMetric4(15)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC4:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTEMETRIC4_FLAG;
+ rc = inetCidrRouteMetric4_set(rowreq_ctx,
+ *((long *) var->val.string));
+ break;
+
+ /*
+ * inetCidrRouteMetric5(16)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_INETCIDRROUTEMETRIC5:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTEMETRIC5_FLAG;
+ rc = inetCidrRouteMetric5_set(rowreq_ctx,
+ *((long *) var->val.string));
+ break;
+
+ /*
+ * inetCidrRouteStatus(17)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_INETCIDRROUTESTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_INETCIDRROUTESTATUS_FLAG;
+ rc = inetCidrRouteStatus_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _inetCidrRouteTable_set_column\n",
+ column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _inetCidrRouteTable_set_column */
+
+int
+_mfd_inetCidrRouteTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_set_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _inetCidrRouteTable_set_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:mfd", "error %d from "
+ "inetCidrRouteTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetCidrRouteTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_inetCidrRouteTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = inetCidrRouteTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("inetCidrRouteTable:mfd", "error %d from "
+ "inetCidrRouteTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ inetCidrRouteTable_dirty_set(inetCidrRouteTable_dirty_get() + 1); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_inetCidrRouteTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_undo_commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = inetCidrRouteTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if (d)
+ inetCidrRouteTable_dirty_set(d - 1);
+ }
+
+ rc = inetCidrRouteTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("inetCidrRouteTable:mfd", "error %d from "
+ "inetCidrRouteTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING,
+ "inetCidrRouteTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetCidrRouteTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+int
+_mfd_inetCidrRouteTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_undo_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = inetCidrRouteTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("inetCidrRouteTable:mfd", "error %d from "
+ "inetCidrRouteTable_undo\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetCidrRouteTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_inetCidrRouteTable_irreversible_commit(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_mfd_inetCidrRouteTable_irreversible:commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(inetCidrRouteTable_if_ctx.container, rowreq_ctx);
+ } else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_CREATED;
+ CONTAINER_INSERT(inetCidrRouteTable_if_ctx.container,
+ rowreq_ctx);
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetCidrRouteTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache * cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_cache_load", "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR,
+ "invalid cache for inetCidrRouteTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return inetCidrRouteTable_container_load((netsnmp_container *) cache->
+ magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache * cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_cache_free", "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR,
+ "invalid cache in inetCidrRouteTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container *) cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(inetCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ void *context)
+{
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_container_item_free",
+ "called\n"));
+
+ if (NULL == rowreq_ctx)
+ return;
+
+ inetCidrRouteTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_container_free",
+ "called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR,
+ "invalid container in inetCidrRouteTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ inetCidrRouteTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *) _container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_inetCidrRouteTable_container_init(inetCidrRouteTable_interface_ctx *
+ if_ctx)
+{
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_inetCidrRouteTable_container_init", "called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ inetCidrRouteTable_oid,
+ inetCidrRouteTable_oid_size);
+
+ if (NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for ipCidrRouteTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ inetCidrRouteTable_container_init(&if_ctx->container, if_ctx->cache);
+ if (NULL == if_ctx->container)
+ if_ctx->container =
+ netsnmp_container_find("inetCidrRouteTable:table_container");
+ if (NULL == if_ctx->container) {
+ snmp_log(LOG_ERR, "error creating container in "
+ "inetCidrRouteTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void *) if_ctx->container;
+} /* _inetCidrRouteTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_inetCidrRouteTable_container_shutdown(inetCidrRouteTable_interface_ctx *
+ if_ctx)
+{
+ DEBUGMSGTL(("internal:inetCidrRouteTable:_inetCidrRouteTable_container_shutdown", "called\n"));
+
+ inetCidrRouteTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _inetCidrRouteTable_container_shutdown */
+
+
+inetCidrRouteTable_rowreq_ctx *
+inetCidrRouteTable_row_find_by_mib_index(inetCidrRouteTable_mib_index *
+ mib_idx)
+{
+ inetCidrRouteTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = inetCidrRouteTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx =
+ CONTAINER_FIND(inetCidrRouteTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h
new file mode 100644
index 0000000000..339756bf15
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.h
@@ -0,0 +1,102 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: inetCidrRouteTable_interface.h 14708 2006-06-12 20:03:59Z rstory $
+ */
+/** @ingroup interface Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef INETCIDRROUTETABLE_INTERFACE_H
+#define INETCIDRROUTETABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "inetCidrRouteTable.h"
+
+
+ /*
+ ********************************************************************
+ * Table declarations
+ */
+
+ /*
+ * PUBLIC interface initialization routine
+ */
+ void
+ _inetCidrRouteTable_initialize_interface
+ (inetCidrRouteTable_registration * user_ctx, u_long flags);
+ void
+ _inetCidrRouteTable_shutdown_interface
+ (inetCidrRouteTable_registration * user_ctx);
+
+ inetCidrRouteTable_registration
+ * inetCidrRouteTable_registration_set
+ (inetCidrRouteTable_registration * newreg);
+
+ netsnmp_container *inetCidrRouteTable_container_get(void);
+ int inetCidrRouteTable_container_size(void);
+
+ u_int inetCidrRouteTable_dirty_get(void);
+ void inetCidrRouteTable_dirty_set(u_int status);
+
+ netsnmp_cache *inetCidrRouteTable_get_cache(void);
+
+ inetCidrRouteTable_rowreq_ctx
+ * inetCidrRouteTable_allocate_rowreq_ctx(inetCidrRouteTable_data *,
+ void *);
+ void
+ inetCidrRouteTable_release_rowreq_ctx(inetCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+
+ int inetCidrRouteTable_index_to_oid(netsnmp_index *
+ oid_idx,
+ inetCidrRouteTable_mib_index
+ * mib_idx);
+ int inetCidrRouteTable_index_from_oid(netsnmp_index *
+ oid_idx,
+ inetCidrRouteTable_mib_index
+ * mib_idx);
+
+ /*
+ * access to certain internals. use with caution!
+ */
+ void
+ inetCidrRouteTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* INETCIDRROUTETABLE_INTERFACE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable.h
new file mode 100644
index 0000000000..0214caf055
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable.h
@@ -0,0 +1,5 @@
+/*
+ * module to include the modules
+ */
+
+config_require(ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c
new file mode 100644
index 0000000000..fceb1a1f0b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c
@@ -0,0 +1,3358 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ipCidrRouteTable.c 15639 2006-12-06 15:01:27Z rstory $
+ */
+/** \page MFD helper for ipCidrRouteTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipCidrRouteTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "ipCidrRouteTable_interface.h"
+
+oid ipCidrRouteTable_oid[] = { IPCIDRROUTETABLE_OID };
+int ipCidrRouteTable_oid_size =
+OID_LENGTH(ipCidrRouteTable_oid);
+
+ipCidrRouteTable_registration ipCidrRouteTable_user_context;
+
+void initialize_table_ipCidrRouteTable(void);
+void shutdown_table_ipCidrRouteTable(void);
+
+
+/**
+ * Initializes the ipCidrRouteTable module
+ */
+void
+init_ipCidrRouteTable(void)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:init_ipCidrRouteTable",
+ "called\n"));
+
+ /*
+ * TODO:300:o: Perform ipCidrRouteTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("ipCidrRouteTable"))
+ initialize_table_ipCidrRouteTable();
+
+} /* init_ipCidrRouteTable */
+
+/**
+ * Shut-down the ipCidrRouteTable module (agent is exiting)
+ */
+void
+shutdown_ipCidrRouteTable(void)
+{
+ if (should_init("ipCidrRouteTable"))
+ shutdown_table_ipCidrRouteTable();
+
+}
+
+/**
+ * Initialize the table ipCidrRouteTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_ipCidrRouteTable(void)
+{
+ ipCidrRouteTable_registration *user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:initialize_table_ipCidrRouteTable", "called\n"));
+
+ /*
+ * TODO:301:o: Perform ipCidrRouteTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize ipCidrRouteTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context =
+ netsnmp_create_data_list("ipCidrRouteTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _ipCidrRouteTable_initialize_interface(user_context, flags);
+} /* initialize_table_ipCidrRouteTable */
+
+/**
+ * Shutdown the table ipCidrRouteTable
+ */
+void
+shutdown_table_ipCidrRouteTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _ipCidrRouteTable_shutdown_interface(&ipCidrRouteTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+ipCidrRouteTable_rowreq_ctx_init(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_rowreq_ctx_init", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra ipCidrRouteTable rowreq initialization. (eg DEFVALS)
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void
+ipCidrRouteTable_rowreq_ctx_cleanup(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_rowreq_ctx_cleanup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra ipCidrRouteTable rowreq cleanup.
+ */
+ if (NULL != rowreq_ctx->data) {
+ ipCidrRouteTable_release_data(rowreq_ctx->data);
+ rowreq_ctx->data = NULL;
+ }
+} /* ipCidrRouteTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ * @param user_context
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+ipCidrRouteTable_pre_request(ipCidrRouteTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_pre_request",
+ "called\n"));
+
+ /*
+ * TODO:510:o: Perform ipCidrRouteTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+ipCidrRouteTable_post_request(ipCidrRouteTable_registration * user_context,
+ int rc)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_post_request",
+ "called\n"));
+
+ /*
+ * TODO:511:o: Perform ipCidrRouteTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (ipCidrRouteTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ ipCidrRouteTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteTable_post_request */
+
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-FORWARD-MIB::ipCidrRouteTable is subid 4 of ipForward.
+ * Its status is Deprecated.
+ * OID: .1.3.6.1.2.1.4.24.4, length: 9
+ */
+
+/*
+ * ---------------------------------------------------------------------
+ * * TODO:200:r: Implement ipCidrRouteTable data context functions.
+ */
+/*
+ * ipCidrRouteTable_allocate_data
+ *
+ * Purpose: create new ipCidrRouteTable_data.
+ */
+ipCidrRouteTable_data *
+ipCidrRouteTable_allocate_data(void)
+{
+ /*
+ * TODO:201:r: |-> allocate memory for the ipCidrRouteTable data context.
+ */
+ ipCidrRouteTable_data *rtn = netsnmp_access_route_entry_create();
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_allocate_data",
+ "called\n"));
+
+ if (NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "ipCidrRouteTable_data.\n");
+ }
+
+ return rtn;
+} /* ipCidrRouteTable_allocate_data */
+
+/*
+ * ipCidrRouteTable_release_data
+ *
+ * Purpose: release ipCidrRouteTable data.
+ */
+void
+ipCidrRouteTable_release_data(ipCidrRouteTable_data * data)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_release_data",
+ "called\n"));
+
+ /*
+ * TODO:202:r: |-> release memory for the ipCidrRouteTable data context.
+ */
+ netsnmp_access_route_entry_free(data);
+} /* ipCidrRouteTable_release_data */
+
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param ipCidrRouteDest_val
+ * @param ipCidrRouteMask_val
+ * @param ipCidrRouteTos_val
+ * @param ipCidrRouteNextHop_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+ipCidrRouteTable_indexes_set_tbl_idx(ipCidrRouteTable_mib_index * tbl_idx,
+ u_long ipCidrRouteDest_val,
+ u_long ipCidrRouteMask_val,
+ long ipCidrRouteTos_val,
+ u_long ipCidrRouteNextHop_val)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_indexes_set_tbl_idx", "called\n"));
+
+ /*
+ * ipCidrRouteDest(1)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ tbl_idx->ipCidrRouteDest = ipCidrRouteDest_val;
+
+ /*
+ * ipCidrRouteMask(2)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ tbl_idx->ipCidrRouteMask = ipCidrRouteMask_val;
+
+ /*
+ * ipCidrRouteTos(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ tbl_idx->ipCidrRouteTos = ipCidrRouteTos_val;
+
+ /*
+ * ipCidrRouteNextHop(4)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ tbl_idx->ipCidrRouteNextHop = ipCidrRouteNextHop_val;
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+ipCidrRouteTable_indexes_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long ipCidrRouteDest_val,
+ u_long ipCidrRouteMask_val,
+ long ipCidrRouteTos_val,
+ u_long ipCidrRouteNextHop_val)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_indexes_set",
+ "called\n"));
+
+ if (MFD_SUCCESS !=
+ ipCidrRouteTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+ ipCidrRouteDest_val,
+ ipCidrRouteMask_val,
+ ipCidrRouteTos_val,
+ ipCidrRouteNextHop_val))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if (0 != ipCidrRouteTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteIfIndex
+ * ipCidrRouteIfIndex is subid 5 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.5
+ * Description:
+The ifIndex value which identifies the local interface
+
+
+ through which the next hop of this route should be
+ reached.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the ipCidrRouteIfIndex data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteIfIndex_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipCidrRouteIfIndex_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *ipCidrRouteIfIndex_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipCidrRouteIfIndex_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipCidrRouteIfIndex data.
+ * copy (* ipCidrRouteIfIndex_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipCidrRouteIfIndex_val_ptr) = rowreq_ctx->data->if_index;
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteIfIndex_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteType
+ * ipCidrRouteType is subid 6 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.6
+ * Description:
+The type of route. Note that local(3) refers to a
+ route for which the next hop is the final destination;
+ remote(4) refers to a route for which the next hop is
+ not the final destination.
+
+ Routes which do not result in traffic forwarding or
+ rejection should not be displayed even if the
+ implementation keeps them stored internally.
+
+ reject (2) refers to a route which, if matched,
+ discards the message as unreachable. This is used in
+ some protocols as a means of correctly aggregating
+ routes.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: other(1), reject(2), local(3), remote(4)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipCidrRouteType data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteType_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipCidrRouteType_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipCidrRouteType_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipCidrRouteType_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipCidrRouteType data.
+ * copy (* ipCidrRouteType_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipCidrRouteType_val_ptr) = rowreq_ctx->data->rt_type;
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteType_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteProto
+ * ipCidrRouteProto is subid 7 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.24.4.1.7
+ * Description:
+The routing mechanism via which this route was learned.
+ Inclusion of values for gateway routing protocols is
+ not intended to imply that hosts should support those
+ protocols.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 11/16. Values: other(1), local(2), netmgmt(3), icmp(4), egp(5), ggp(6), hello(7), rip(8), isIs(9), esIs(10), ciscoIgrp(11), bbnSpfIgp(12), ospf(13), bgp(14), idpr(15), ciscoEigrp(16)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipCidrRouteProto data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteProto_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipCidrRouteProto_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipCidrRouteProto_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipCidrRouteProto_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteProto_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipCidrRouteProto data.
+ * copy (* ipCidrRouteProto_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipCidrRouteProto_val_ptr) = rowreq_ctx->data->rt_proto;
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteProto_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteAge
+ * ipCidrRouteAge is subid 8 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.24.4.1.8
+ * Description:
+The number of seconds since this route was last updated
+ or otherwise determined to be correct. Note that no
+ semantics of `too old' can be implied except through
+ knowledge of the routing protocol by which the route
+ was learned.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ * defval: 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the ipCidrRouteAge data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteAge_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipCidrRouteAge_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *ipCidrRouteAge_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipCidrRouteAge_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteAge_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipCidrRouteAge data.
+ * copy (* ipCidrRouteAge_val_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * TODO:235:M: |-> Remove log message/SKIP once you've set ipCidrRouteAge data
+ */
+ return MFD_SKIP;
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteAge_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteInfo
+ * ipCidrRouteInfo is subid 9 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.9
+ * Description:
+A reference to MIB definitions specific to the
+ particular routing protocol which is responsible for
+ this route, as determined by the value specified in the
+ route's ipCidrRouteProto value. If this information is
+ not present, its value should be set to the OBJECT
+ IDENTIFIER { 0 0 }, which is a syntactically valid
+ object identifier, and any implementation conforming to
+ ASN.1 and the Basic Encoding Rules must be able to
+ generate and recognize this value.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is OBJECTID (based on perltype OBJECTID)
+ * The net-snmp type is ASN_OBJECT_ID. The C type decl is oid (oid)
+ * This data type requires a length. (Max )
+ */
+/**
+ * Extract the current value of the ipCidrRouteInfo data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteInfo_val_ptr_ptr
+ * Pointer to storage for a oid variable
+ * @param ipCidrRouteInfo_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by ipCidrRouteInfo.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*ipCidrRouteInfo_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update ipCidrRouteInfo_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+ipCidrRouteInfo_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ oid ** ipCidrRouteInfo_val_ptr_ptr,
+ size_t * ipCidrRouteInfo_val_ptr_len_ptr)
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert((NULL != ipCidrRouteInfo_val_ptr_ptr)
+ && (NULL != *ipCidrRouteInfo_val_ptr_ptr));
+ netsnmp_assert(NULL != ipCidrRouteInfo_val_ptr_len_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipCidrRouteInfo data.
+ * copy (* ipCidrRouteInfo_val_ptr_ptr ) data and (* ipCidrRouteInfo_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /** nullOidLen is in bytes, so not sizeof(oid) needed */
+ if ((*ipCidrRouteInfo_val_ptr_len_ptr) < nullOidLen) {
+ (*ipCidrRouteInfo_val_ptr_ptr) = malloc(nullOidLen);
+ if (NULL == (*ipCidrRouteInfo_val_ptr_ptr))
+ return MFD_ERROR;
+ }
+ (*ipCidrRouteInfo_val_ptr_len_ptr) = nullOidLen;
+ memcpy((*ipCidrRouteInfo_val_ptr_ptr), nullOid, nullOidLen);
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteInfo_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteNextHopAS
+ * ipCidrRouteNextHopAS is subid 10 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.10
+ * Description:
+The Autonomous System Number of the Next Hop. The
+ semantics of this object are determined by the routing-
+ protocol specified in the route's ipCidrRouteProto
+ value. When this object is unknown or not relevant its
+ value should be set to zero.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the ipCidrRouteNextHopAS data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteNextHopAS_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipCidrRouteNextHopAS_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *ipCidrRouteNextHopAS_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipCidrRouteNextHopAS_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipCidrRouteNextHopAS data.
+ * copy (* ipCidrRouteNextHopAS_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipCidrRouteNextHopAS_val_ptr) = rowreq_ctx->data->rt_nexthop_as;
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteNextHopAS_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric1
+ * ipCidrRouteMetric1 is subid 11 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.11
+ * Description:
+The primary routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's ipCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the ipCidrRouteMetric1 data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteMetric1_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipCidrRouteMetric1_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *ipCidrRouteMetric1_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipCidrRouteMetric1_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric1 data.
+ * copy (* ipCidrRouteMetric1_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipCidrRouteMetric1_val_ptr) = rowreq_ctx->data->rt_metric1;
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric1_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric2
+ * ipCidrRouteMetric2 is subid 12 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.12
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's ipCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the ipCidrRouteMetric2 data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteMetric2_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipCidrRouteMetric2_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *ipCidrRouteMetric2_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipCidrRouteMetric2_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric2 data.
+ * copy (* ipCidrRouteMetric2_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipCidrRouteMetric2_val_ptr) = rowreq_ctx->data->rt_metric2;
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric2_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric3
+ * ipCidrRouteMetric3 is subid 13 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.13
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's ipCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the ipCidrRouteMetric3 data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteMetric3_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipCidrRouteMetric3_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *ipCidrRouteMetric3_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipCidrRouteMetric3_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric3 data.
+ * copy (* ipCidrRouteMetric3_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipCidrRouteMetric3_val_ptr) = rowreq_ctx->data->rt_metric3;
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric3_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric4
+ * ipCidrRouteMetric4 is subid 14 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.14
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's ipCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the ipCidrRouteMetric4 data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteMetric4_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipCidrRouteMetric4_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *ipCidrRouteMetric4_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipCidrRouteMetric4_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric4 data.
+ * copy (* ipCidrRouteMetric4_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipCidrRouteMetric4_val_ptr) = rowreq_ctx->data->rt_metric4;
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric4_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric5
+ * ipCidrRouteMetric5 is subid 15 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.15
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+
+
+ protocol specified in the route's ipCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the ipCidrRouteMetric5 data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteMetric5_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipCidrRouteMetric5_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long *ipCidrRouteMetric5_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipCidrRouteMetric5_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric5 data.
+ * copy (* ipCidrRouteMetric5_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipCidrRouteMetric5_val_ptr) = rowreq_ctx->data->rt_metric5;
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric5_get */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteStatus
+ * ipCidrRouteStatus is subid 16 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.16
+ * Description:
+The row status variable, used according to row
+ installation and removal conventions.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipCidrRouteStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipCidrRouteStatus_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipCidrRouteStatus_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipCidrRouteStatus_val_ptr);
+
+ (*ipCidrRouteStatus_val_ptr) = rowreq_ctx->ipCidrRouteStatus;
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteStatus_get */
+
+
+
+/** @} */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-FORWARD-MIB::ipCidrRouteTable is subid 4 of ipForward.
+ * Its status is Deprecated.
+ * OID: .1.3.6.1.2.1.4.24.4, length: 9
+ */
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +-------------+ +==============+
+ * | row |f|<-------|| object ||
+ * | create |1| E || lookup ||
+ * +-------------+ +==============+
+ * E | | S | S
+ * | +------------------>|
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * |
+ * (err && f1)------------------->+
+ * | |
+ * +--------------+ +--------------+
+ * | post |<--------| row |
+ * | request | U | release |
+ * +--------------+ +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * ipCidrRouteTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * ipCidrRouteTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ipCidrRouteTable_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_undo_setup",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> Setup ipCidrRouteTable undo.
+ * set up ipCidrRouteTable undo information, in preparation for a set.
+ * Undo storage is in (* ipCidrRouteStatus_val_ptr )*
+ */
+
+ return rc;
+} /* ipCidrRouteTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ipCidrRouteTable_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_undo",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> ipCidrRouteTable undo.
+ * ipCidrRouteTable undo information, in response to a failed set.
+ * Undo storage is in (* ipCidrRouteStatus_val_ptr )*
+ */
+
+ return rc;
+} /* ipCidrRouteTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ipCidrRouteTable_undo_cleanup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_undo_cleanup",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:452:M: |-> Cleanup ipCidrRouteTable undo.
+ * Undo storage is in (* ipCidrRouteStatus_val_ptr )*
+ */
+
+ return rc;
+} /* ipCidrRouteTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ipCidrRouteTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ipCidrRouteTable_commit(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_commit",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit ipCidrRouteTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_IPCIDRROUTEIFINDEX_FLAG) {
+ save_flags &= ~COLUMN_IPCIDRROUTEIFINDEX_FLAG; /* clear ipCidrRouteIfIndex */
+ /*
+ * TODO:482:o: |-> commit column ipCidrRouteIfIndex.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ipCidrRouteTable column ipCidrRouteIfIndex commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ipCidrRouteIfIndex
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEIFINDEX_FLAG;
+ }
+ }
+
+ if (save_flags & COLUMN_IPCIDRROUTETYPE_FLAG) {
+ save_flags &= ~COLUMN_IPCIDRROUTETYPE_FLAG; /* clear ipCidrRouteType */
+ /*
+ * TODO:482:o: |-> commit column ipCidrRouteType.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ipCidrRouteTable column ipCidrRouteType commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ipCidrRouteType
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTETYPE_FLAG;
+ }
+ }
+
+ if (save_flags & COLUMN_IPCIDRROUTEINFO_FLAG) {
+ save_flags &= ~COLUMN_IPCIDRROUTEINFO_FLAG; /* clear ipCidrRouteInfo */
+ /*
+ * TODO:482:o: |-> commit column ipCidrRouteInfo.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ipCidrRouteTable column ipCidrRouteInfo commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ipCidrRouteInfo
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEINFO_FLAG;
+ }
+ }
+
+ if (save_flags & COLUMN_IPCIDRROUTENEXTHOPAS_FLAG) {
+ save_flags &= ~COLUMN_IPCIDRROUTENEXTHOPAS_FLAG; /* clear ipCidrRouteNextHopAS */
+ /*
+ * TODO:482:o: |-> commit column ipCidrRouteNextHopAS.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ipCidrRouteTable column ipCidrRouteNextHopAS commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ipCidrRouteNextHopAS
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_IPCIDRROUTENEXTHOPAS_FLAG;
+ }
+ }
+
+ if (save_flags & COLUMN_IPCIDRROUTEMETRIC1_FLAG) {
+ save_flags &= ~COLUMN_IPCIDRROUTEMETRIC1_FLAG; /* clear ipCidrRouteMetric1 */
+ /*
+ * TODO:482:o: |-> commit column ipCidrRouteMetric1.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ipCidrRouteTable column ipCidrRouteMetric1 commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ipCidrRouteMetric1
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC1_FLAG;
+ }
+ }
+
+ if (save_flags & COLUMN_IPCIDRROUTEMETRIC2_FLAG) {
+ save_flags &= ~COLUMN_IPCIDRROUTEMETRIC2_FLAG; /* clear ipCidrRouteMetric2 */
+ /*
+ * TODO:482:o: |-> commit column ipCidrRouteMetric2.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ipCidrRouteTable column ipCidrRouteMetric2 commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ipCidrRouteMetric2
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC2_FLAG;
+ }
+ }
+
+ if (save_flags & COLUMN_IPCIDRROUTEMETRIC3_FLAG) {
+ save_flags &= ~COLUMN_IPCIDRROUTEMETRIC3_FLAG; /* clear ipCidrRouteMetric3 */
+ /*
+ * TODO:482:o: |-> commit column ipCidrRouteMetric3.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ipCidrRouteTable column ipCidrRouteMetric3 commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ipCidrRouteMetric3
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC3_FLAG;
+ }
+ }
+
+ if (save_flags & COLUMN_IPCIDRROUTEMETRIC4_FLAG) {
+ save_flags &= ~COLUMN_IPCIDRROUTEMETRIC4_FLAG; /* clear ipCidrRouteMetric4 */
+ /*
+ * TODO:482:o: |-> commit column ipCidrRouteMetric4.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ipCidrRouteTable column ipCidrRouteMetric4 commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ipCidrRouteMetric4
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC4_FLAG;
+ }
+ }
+
+ if (save_flags & COLUMN_IPCIDRROUTEMETRIC5_FLAG) {
+ save_flags &= ~COLUMN_IPCIDRROUTEMETRIC5_FLAG; /* clear ipCidrRouteMetric5 */
+ /*
+ * TODO:482:o: |-> commit column ipCidrRouteMetric5.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ipCidrRouteTable column ipCidrRouteMetric5 commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ipCidrRouteMetric5
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC5_FLAG;
+ }
+ }
+
+ if (save_flags & COLUMN_IPCIDRROUTESTATUS_FLAG) {
+ save_flags &= ~COLUMN_IPCIDRROUTESTATUS_FLAG; /* clear ipCidrRouteStatus */
+ /*
+ * TODO:482:o: |-> commit column ipCidrRouteStatus.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ipCidrRouteTable column ipCidrRouteStatus commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ipCidrRouteStatus
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTESTATUS_FLAG;
+ }
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* ipCidrRouteTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ipCidrRouteTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ipCidrRouteTable_undo_commit(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_undo_commit",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:485:M: |-> Undo ipCidrRouteTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* ipCidrRouteTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement ipCidrRouteTable node value checks.
+ * TODO:450:M: Implement ipCidrRouteTable undo functions.
+ * TODO:460:M: Implement ipCidrRouteTable set functions.
+ * TODO:480:M: Implement ipCidrRouteTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteIfIndex
+ * ipCidrRouteIfIndex is subid 5 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.5
+ * Description:
+The ifIndex value which identifies the local interface
+
+
+ through which the next hop of this route should be
+ reached.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteIfIndex_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipCidrRouteIfIndex_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteIfIndex_val)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipCidrRouteIfIndex value.
+ */
+
+ return MFD_SUCCESS; /* ipCidrRouteIfIndex value not illegal */
+} /* ipCidrRouteIfIndex_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipCidrRouteTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipCidrRouteIfIndex_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipCidrRouteIfIndex undo.
+ */
+ /*
+ * copy ipCidrRouteIfIndex data
+ * set rowreq_ctx->undo->ipCidrRouteIfIndex from rowreq_ctx->data->ipCidrRouteIfIndex
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteIfIndex_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipCidrRouteIfIndex_val
+ * A long containing the new value.
+ */
+int
+ipCidrRouteIfIndex_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteIfIndex_val)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipCidrRouteIfIndex value.
+ * set ipCidrRouteIfIndex value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteIfIndex_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipCidrRouteIfIndex_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipCidrRouteIfIndex undo.
+ */
+ /*
+ * copy ipCidrRouteIfIndex data
+ * set rowreq_ctx->data->ipCidrRouteIfIndex from rowreq_ctx->undo->ipCidrRouteIfIndex
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteIfIndex_undo */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteType
+ * ipCidrRouteType is subid 6 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.6
+ * Description:
+The type of route. Note that local(3) refers to a
+ route for which the next hop is the final destination;
+ remote(4) refers to a route for which the next hop is
+ not the final destination.
+
+ Routes which do not result in traffic forwarding or
+ rejection should not be displayed even if the
+ implementation keeps them stored internally.
+
+ reject (2) refers to a route which, if matched,
+ discards the message as unreachable. This is used in
+ some protocols as a means of correctly aggregating
+ routes.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: other(1), reject(2), local(3), remote(4)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteType_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of other(1), reject(2), local(3), remote(4)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipCidrRouteType_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long ipCidrRouteType_val)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipCidrRouteType value.
+ */
+
+ return MFD_SUCCESS; /* ipCidrRouteType value not illegal */
+} /* ipCidrRouteType_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipCidrRouteTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipCidrRouteType_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipCidrRouteType undo.
+ */
+ /*
+ * copy ipCidrRouteType data
+ * set rowreq_ctx->undo->ipCidrRouteType from rowreq_ctx->data->ipCidrRouteType
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteType_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipCidrRouteType_val
+ * A long containing the new value.
+ */
+int
+ipCidrRouteType_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long ipCidrRouteType_val)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipCidrRouteType value.
+ * set ipCidrRouteType value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteType_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipCidrRouteType_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipCidrRouteType undo.
+ */
+ /*
+ * copy ipCidrRouteType data
+ * set rowreq_ctx->data->ipCidrRouteType from rowreq_ctx->undo->ipCidrRouteType
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteType_undo */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteInfo
+ * ipCidrRouteInfo is subid 9 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.9
+ * Description:
+A reference to MIB definitions specific to the
+ particular routing protocol which is responsible for
+ this route, as determined by the value specified in the
+ route's ipCidrRouteProto value. If this information is
+ not present, its value should be set to the OBJECT
+ IDENTIFIER { 0 0 }, which is a syntactically valid
+ object identifier, and any implementation conforming to
+ ASN.1 and the Basic Encoding Rules must be able to
+ generate and recognize this value.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is OBJECTID (based on perltype OBJECTID)
+ * The net-snmp type is ASN_OBJECT_ID. The C type decl is oid (oid)
+ * This data type requires a length. (Max )
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteInfo_val_ptr
+ * A oid containing the new value.
+ * @param ipCidrRouteInfo_val_ptr_len
+ * The size (in bytes) of the data pointed to by ipCidrRouteInfo_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * Since you aren't using a generated data context, you also need to
+ * check the length, to make sure you don't overflow your storage space.
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OBJECT_ID
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipCidrRouteInfo_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ oid * ipCidrRouteInfo_val_ptr,
+ size_t ipCidrRouteInfo_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != ipCidrRouteInfo_val_ptr);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipCidrRouteInfo value.
+ */
+
+ return MFD_SUCCESS; /* ipCidrRouteInfo value not illegal */
+} /* ipCidrRouteInfo_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipCidrRouteTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipCidrRouteInfo_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipCidrRouteInfo undo.
+ */
+ /*
+ * copy ipCidrRouteInfo and ipCidrRouteInfo_len data
+ * set rowreq_ctx->undo->ipCidrRouteInfo from rowreq_ctx->data->ipCidrRouteInfo
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteInfo_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipCidrRouteInfo_val_ptr
+ * A oid containing the new value.
+ * @param ipCidrRouteInfo_val_ptr_len
+ * The size (in bytes) of the data pointed to by ipCidrRouteInfo_val_ptr
+ */
+int
+ipCidrRouteInfo_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ oid * ipCidrRouteInfo_val_ptr,
+ size_t ipCidrRouteInfo_val_ptr_len)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != ipCidrRouteInfo_val_ptr);
+
+ /*
+ * TODO:461:M: |-> Set ipCidrRouteInfo value.
+ * set ipCidrRouteInfo value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteInfo_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipCidrRouteInfo_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipCidrRouteInfo undo.
+ */
+ /*
+ * copy ipCidrRouteInfo and ipCidrRouteInfo_len data
+ * set rowreq_ctx->data->ipCidrRouteInfo from rowreq_ctx->undo->ipCidrRouteInfo
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteInfo_undo */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteNextHopAS
+ * ipCidrRouteNextHopAS is subid 10 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.10
+ * Description:
+The Autonomous System Number of the Next Hop. The
+ semantics of this object are determined by the routing-
+ protocol specified in the route's ipCidrRouteProto
+ value. When this object is unknown or not relevant its
+ value should be set to zero.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteNextHopAS_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipCidrRouteNextHopAS_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteNextHopAS_val)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipCidrRouteNextHopAS value.
+ */
+
+ return MFD_SUCCESS; /* ipCidrRouteNextHopAS value not illegal */
+} /* ipCidrRouteNextHopAS_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipCidrRouteTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipCidrRouteNextHopAS_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipCidrRouteNextHopAS undo.
+ */
+ /*
+ * copy ipCidrRouteNextHopAS data
+ * set rowreq_ctx->undo->ipCidrRouteNextHopAS from rowreq_ctx->data->ipCidrRouteNextHopAS
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteNextHopAS_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipCidrRouteNextHopAS_val
+ * A long containing the new value.
+ */
+int
+ipCidrRouteNextHopAS_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteNextHopAS_val)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipCidrRouteNextHopAS value.
+ * set ipCidrRouteNextHopAS value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteNextHopAS_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipCidrRouteNextHopAS_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipCidrRouteNextHopAS undo.
+ */
+ /*
+ * copy ipCidrRouteNextHopAS data
+ * set rowreq_ctx->data->ipCidrRouteNextHopAS from rowreq_ctx->undo->ipCidrRouteNextHopAS
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteNextHopAS_undo */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric1
+ * ipCidrRouteMetric1 is subid 11 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.11
+ * Description:
+The primary routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's ipCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteMetric1_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipCidrRouteMetric1_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteMetric1_val)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipCidrRouteMetric1 value.
+ */
+
+ return MFD_SUCCESS; /* ipCidrRouteMetric1 value not illegal */
+} /* ipCidrRouteMetric1_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipCidrRouteTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipCidrRouteMetric1_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipCidrRouteMetric1 undo.
+ */
+ /*
+ * copy ipCidrRouteMetric1 data
+ * set rowreq_ctx->undo->ipCidrRouteMetric1 from rowreq_ctx->data->ipCidrRouteMetric1
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric1_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipCidrRouteMetric1_val
+ * A long containing the new value.
+ */
+int
+ipCidrRouteMetric1_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteMetric1_val)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipCidrRouteMetric1 value.
+ * set ipCidrRouteMetric1 value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric1_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipCidrRouteMetric1_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipCidrRouteMetric1 undo.
+ */
+ /*
+ * copy ipCidrRouteMetric1 data
+ * set rowreq_ctx->data->ipCidrRouteMetric1 from rowreq_ctx->undo->ipCidrRouteMetric1
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric1_undo */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric2
+ * ipCidrRouteMetric2 is subid 12 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.12
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's ipCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteMetric2_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipCidrRouteMetric2_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteMetric2_val)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipCidrRouteMetric2 value.
+ */
+ /*
+ * does any os use metric 2-5? if so, update to deal with it.
+ * otherwise, only accept same value we have.
+ */
+ if (ipCidrRouteMetric2_val != rowreq_ctx->data->rt_metric2)
+ return MFD_NOT_VALID_EVER;
+
+ return MFD_SUCCESS; /* ipCidrRouteMetric2 value not illegal */
+} /* ipCidrRouteMetric2_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipCidrRouteTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipCidrRouteMetric2_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipCidrRouteMetric2 undo.
+ */
+ /*
+ * copy ipCidrRouteMetric2 data
+ * set rowreq_ctx->undo->ipCidrRouteMetric2 from rowreq_ctx->data->ipCidrRouteMetric2
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric2_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipCidrRouteMetric2_val
+ * A long containing the new value.
+ */
+int
+ipCidrRouteMetric2_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteMetric2_val)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipCidrRouteMetric2 value.
+ * set ipCidrRouteMetric2 value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric2_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipCidrRouteMetric2_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipCidrRouteMetric2 undo.
+ */
+ /*
+ * copy ipCidrRouteMetric2 data
+ * set rowreq_ctx->data->ipCidrRouteMetric2 from rowreq_ctx->undo->ipCidrRouteMetric2
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric2_undo */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric3
+ * ipCidrRouteMetric3 is subid 13 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.13
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's ipCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteMetric3_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipCidrRouteMetric3_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteMetric3_val)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipCidrRouteMetric3 value.
+ */
+ /*
+ * does any os use metric 2-5? if so, update to deal with it.
+ * otherwise, only accept same value we have.
+ */
+ if (ipCidrRouteMetric3_val != rowreq_ctx->data->rt_metric3)
+ return MFD_NOT_VALID_EVER;
+
+ return MFD_SUCCESS; /* ipCidrRouteMetric3 value not illegal */
+} /* ipCidrRouteMetric3_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipCidrRouteTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipCidrRouteMetric3_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipCidrRouteMetric3 undo.
+ */
+ /*
+ * copy ipCidrRouteMetric3 data
+ * set rowreq_ctx->undo->ipCidrRouteMetric3 from rowreq_ctx->data->ipCidrRouteMetric3
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric3_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipCidrRouteMetric3_val
+ * A long containing the new value.
+ */
+int
+ipCidrRouteMetric3_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteMetric3_val)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipCidrRouteMetric3 value.
+ * set ipCidrRouteMetric3 value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric3_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipCidrRouteMetric3_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipCidrRouteMetric3 undo.
+ */
+ /*
+ * copy ipCidrRouteMetric3 data
+ * set rowreq_ctx->data->ipCidrRouteMetric3 from rowreq_ctx->undo->ipCidrRouteMetric3
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric3_undo */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric4
+ * ipCidrRouteMetric4 is subid 14 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.14
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+ protocol specified in the route's ipCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteMetric4_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipCidrRouteMetric4_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteMetric4_val)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipCidrRouteMetric4 value.
+ */
+ /*
+ * does any os use metric 2-5? if so, update to deal with it.
+ * otherwise, only accept same value we have.
+ */
+ if (ipCidrRouteMetric4_val != rowreq_ctx->data->rt_metric4)
+ return MFD_NOT_VALID_EVER;
+
+ return MFD_SUCCESS; /* ipCidrRouteMetric4 value not illegal */
+} /* ipCidrRouteMetric4_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipCidrRouteTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipCidrRouteMetric4_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipCidrRouteMetric4 undo.
+ */
+ /*
+ * copy ipCidrRouteMetric4 data
+ * set rowreq_ctx->undo->ipCidrRouteMetric4 from rowreq_ctx->data->ipCidrRouteMetric4
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric4_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipCidrRouteMetric4_val
+ * A long containing the new value.
+ */
+int
+ipCidrRouteMetric4_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteMetric4_val)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipCidrRouteMetric4 value.
+ * set ipCidrRouteMetric4 value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric4_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipCidrRouteMetric4_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipCidrRouteMetric4 undo.
+ */
+ /*
+ * copy ipCidrRouteMetric4 data
+ * set rowreq_ctx->data->ipCidrRouteMetric4 from rowreq_ctx->undo->ipCidrRouteMetric4
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric4_undo */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric5
+ * ipCidrRouteMetric5 is subid 15 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.15
+ * Description:
+An alternate routing metric for this route. The
+ semantics of this metric are determined by the routing-
+
+
+ protocol specified in the route's ipCidrRouteProto
+ value. If this metric is not used, its value should be
+ set to -1.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: -1
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteMetric5_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipCidrRouteMetric5_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteMetric5_val)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipCidrRouteMetric5 value.
+ */
+ /*
+ * does any os use metric 2-5? if so, update to deal with it.
+ * otherwise, only accept same value we have.
+ */
+ if (ipCidrRouteMetric5_val != rowreq_ctx->data->rt_metric5)
+ return MFD_NOT_VALID_EVER;
+
+ return MFD_SUCCESS; /* ipCidrRouteMetric5 value not illegal */
+} /* ipCidrRouteMetric5_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipCidrRouteTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipCidrRouteMetric5_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipCidrRouteMetric5 undo.
+ */
+ /*
+ * copy ipCidrRouteMetric5 data
+ * set rowreq_ctx->undo->ipCidrRouteMetric5 from rowreq_ctx->data->ipCidrRouteMetric5
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric5_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipCidrRouteMetric5_val
+ * A long containing the new value.
+ */
+int
+ipCidrRouteMetric5_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ long ipCidrRouteMetric5_val)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipCidrRouteMetric5 value.
+ * set ipCidrRouteMetric5 value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric5_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipCidrRouteMetric5_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipCidrRouteMetric5 undo.
+ */
+ /*
+ * copy ipCidrRouteMetric5 data
+ * set rowreq_ctx->data->ipCidrRouteMetric5 from rowreq_ctx->undo->ipCidrRouteMetric5
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteMetric5_undo */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteStatus
+ * ipCidrRouteStatus is subid 16 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.24.4.1.16
+ * Description:
+The row status variable, used according to row
+ installation and removal conventions.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipCidrRouteStatus_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipCidrRouteTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipCidrRouteStatus_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long ipCidrRouteStatus_val)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteStatus_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipCidrRouteStatus value.
+ */
+
+ return MFD_SUCCESS; /* ipCidrRouteStatus value not illegal */
+} /* ipCidrRouteStatus_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipCidrRouteTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipCidrRouteStatus_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteStatus_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipCidrRouteStatus undo.
+ */
+ /*
+ * copy ipCidrRouteStatus data
+ * set rowreq_ctx->undo->ipCidrRouteStatus from rowreq_ctx->data->ipCidrRouteStatus
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteStatus_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipCidrRouteStatus_val
+ * A long containing the new value.
+ */
+int
+ipCidrRouteStatus_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ u_long ipCidrRouteStatus_val)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteStatus_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipCidrRouteStatus value.
+ * set ipCidrRouteStatus value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteStatus_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipCidrRouteStatus_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteStatus_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipCidrRouteStatus undo.
+ */
+ /*
+ * copy ipCidrRouteStatus data
+ * set rowreq_ctx->data->ipCidrRouteStatus from rowreq_ctx->undo->ipCidrRouteStatus
+ */
+
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteStatus_undo */
+
+/** @} */
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
new file mode 100644
index 0000000000..18c82f3654
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.h
@@ -0,0 +1,501 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ipCidrRouteTable.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+#ifndef IPCIDRROUTETABLE_H
+#define IPCIDRROUTETABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+#include <net-snmp/data_access/route.h>
+
+#include "mibII/route_headers.h"
+
+ /*
+ * other required module components
+ */
+ /* *INDENT-OFF* */
+config_require(ip-forward-mib/data_access/route)
+config_require(ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface)
+config_require(ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access)
+ /* *INDENT-ON* */
+
+ /*
+ * OID, column number and enum definions for ipCidrRouteTable
+ */
+#include "ipCidrRouteTable_constants.h"
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+ void init_ipCidrRouteTable(void);
+ void shutdown_ipCidrRouteTable(void);
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-FORWARD-MIB::ipCidrRouteTable is subid 4 of ipForward.
+ * Its status is Deprecated.
+ * OID: .1.3.6.1.2.1.4.24.4, length: 9
+ */
+ /*
+ *********************************************************************
+ * 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 ipCidrRouteTable registration context.
+ */
+ typedef netsnmp_data_list ipCidrRouteTable_registration;
+
+/**********************************************************************/
+ /*
+ * TODO:110:r: |-> Review ipCidrRouteTable data context structure.
+ * This structure is used to represent the data for ipCidrRouteTable.
+ */
+ typedef netsnmp_route_entry ipCidrRouteTable_data;
+
+
+ /*
+ *********************************************************************
+ * TODO:115:o: |-> Review ipCidrRouteTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+ typedef ipCidrRouteTable_data ipCidrRouteTable_undo_data;
+
+ /*
+ * TODO:120:r: |-> Review ipCidrRouteTable mib index.
+ * This structure is used to represent the index for ipCidrRouteTable.
+ */
+ typedef struct ipCidrRouteTable_mib_index_s {
+
+ /*
+ * ipCidrRouteDest(1)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ uint32_t ipCidrRouteDest;
+
+ /*
+ * ipCidrRouteMask(2)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ uint32_t ipCidrRouteMask;
+
+ /*
+ * ipCidrRouteTos(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ long ipCidrRouteTos;
+
+ /*
+ * ipCidrRouteNextHop(4)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ uint32_t ipCidrRouteNextHop;
+
+
+ } ipCidrRouteTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review ipCidrRouteTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+ */
+#define MAX_ipCidrRouteTable_IDX_LEN 13
+
+
+ /*
+ *********************************************************************
+ * TODO:130:o: |-> Review ipCidrRouteTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * ipCidrRouteTable_rowreq_ctx pointer.
+ */
+ typedef struct ipCidrRouteTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_ipCidrRouteTable_IDX_LEN];
+
+ ipCidrRouteTable_mib_index tbl_idx;
+
+ ipCidrRouteTable_data *data;
+ ipCidrRouteTable_undo_data *undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 ipCidrRouteTable rowreq context.
+ */
+ u_char ipCidrRouteStatus;
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *ipCidrRouteTable_data_list;
+
+ } ipCidrRouteTable_rowreq_ctx;
+
+ typedef struct ipCidrRouteTable_ref_rowreq_ctx_s {
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx;
+ } ipCidrRouteTable_ref_rowreq_ctx;
+
+ /*
+ *********************************************************************
+ * function prototypes
+ */
+ int
+ ipCidrRouteTable_pre_request(ipCidrRouteTable_registration *
+ user_context);
+ int
+ ipCidrRouteTable_post_request(ipCidrRouteTable_registration *
+ user_context, int rc);
+
+ int
+ ipCidrRouteTable_rowreq_ctx_init(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, void *user_init_ctx);
+ void
+ ipCidrRouteTable_rowreq_ctx_cleanup(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ ipCidrRouteTable_data *ipCidrRouteTable_allocate_data(void);
+ void ipCidrRouteTable_release_data(ipCidrRouteTable_data *
+ data);
+
+ int ipCidrRouteTable_commit(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ ipCidrRouteTable_rowreq_ctx
+ * ipCidrRouteTable_row_find_by_mib_index(ipCidrRouteTable_mib_index
+ * mib_idx);
+
+ extern oid ipCidrRouteTable_oid[];
+ extern int ipCidrRouteTable_oid_size;
+
+
+#include "ipCidrRouteTable_interface.h"
+#include "ipCidrRouteTable_data_access.h"
+ /*
+ *********************************************************************
+ * GET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-FORWARD-MIB::ipCidrRouteTable is subid 4 of ipForward.
+ * Its status is Deprecated.
+ * OID: .1.3.6.1.2.1.4.24.4, length: 9
+ */
+ /*
+ * indexes
+ */
+
+ int ipCidrRouteIfIndex_get(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long
+ *ipCidrRouteIfIndex_val_ptr);
+ int ipCidrRouteType_get(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long * ipCidrRouteType_val_ptr);
+ int ipCidrRouteProto_get(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipCidrRouteProto_val_ptr);
+ int ipCidrRouteAge_get(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long *ipCidrRouteAge_val_ptr);
+ int ipCidrRouteInfo_get(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ oid ** ipCidrRouteInfo_val_ptr_ptr,
+ size_t
+ * ipCidrRouteInfo_val_ptr_len_ptr);
+ int ipCidrRouteNextHopAS_get(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long
+ *ipCidrRouteNextHopAS_val_ptr);
+ int ipCidrRouteMetric1_get(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long
+ *ipCidrRouteMetric1_val_ptr);
+ int ipCidrRouteMetric2_get(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long
+ *ipCidrRouteMetric2_val_ptr);
+ int ipCidrRouteMetric3_get(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long
+ *ipCidrRouteMetric3_val_ptr);
+ int ipCidrRouteMetric4_get(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long
+ *ipCidrRouteMetric4_val_ptr);
+ int ipCidrRouteMetric5_get(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long
+ *ipCidrRouteMetric5_val_ptr);
+ int ipCidrRouteStatus_get(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipCidrRouteStatus_val_ptr);
+
+
+ int
+ ipCidrRouteTable_indexes_set_tbl_idx(ipCidrRouteTable_mib_index *
+ tbl_idx,
+ u_long ipCidrRouteDest_val,
+ u_long ipCidrRouteMask_val,
+ long ipCidrRouteTos_val,
+ u_long
+ ipCidrRouteNextHop_val);
+ int
+ ipCidrRouteTable_indexes_set(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipCidrRouteDest_val,
+ u_long ipCidrRouteMask_val,
+ long ipCidrRouteTos_val,
+ u_long ipCidrRouteNextHop_val);
+
+
+
+ /*
+ *********************************************************************
+ * SET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-FORWARD-MIB::ipCidrRouteTable is subid 4 of ipForward.
+ * Its status is Deprecated.
+ * OID: .1.3.6.1.2.1.4.24.4, length: 9
+ */
+
+
+ int ipCidrRouteTable_undo_setup(ipCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+ int
+ ipCidrRouteTable_undo_cleanup(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipCidrRouteTable_undo(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipCidrRouteTable_commit(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int
+ ipCidrRouteTable_undo_commit(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+ int
+ ipCidrRouteIfIndex_check_value(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteIfIndex_val);
+ int
+ ipCidrRouteIfIndex_undo_setup(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipCidrRouteIfIndex_set(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteIfIndex_val);
+ int ipCidrRouteIfIndex_undo(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ipCidrRouteType_check_value(ipCidrRouteTable_rowreq_ctx
+ * rowreq_ctx,
+ u_long
+ ipCidrRouteType_val);
+ int ipCidrRouteType_undo_setup(ipCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+ int ipCidrRouteType_set(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipCidrRouteType_val);
+ int ipCidrRouteType_undo(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipCidrRouteProto_check_value(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipCidrRouteProto_val);
+ int ipCidrRouteProto_undo_setup(ipCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+ int ipCidrRouteProto_set(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipCidrRouteProto_val);
+ int ipCidrRouteProto_undo(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ipCidrRouteAge_check_value(ipCidrRouteTable_rowreq_ctx
+ * rowreq_ctx,
+ long ipCidrRouteAge_val);
+ int ipCidrRouteAge_undo_setup(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipCidrRouteAge_set(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteAge_val);
+ int ipCidrRouteAge_undo(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ipCidrRouteInfo_check_value(ipCidrRouteTable_rowreq_ctx
+ * rowreq_ctx,
+ oid *
+ ipCidrRouteInfo_val_ptr,
+ size_t
+ ipCidrRouteInfo_val_ptr_len);
+ int ipCidrRouteInfo_undo_setup(ipCidrRouteTable_rowreq_ctx
+ * rowreq_ctx);
+ int ipCidrRouteInfo_set(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ oid * ipCidrRouteInfo_val_ptr,
+ size_t
+ ipCidrRouteInfo_val_ptr_len);
+ int ipCidrRouteInfo_undo(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipCidrRouteNextHopAS_check_value(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteNextHopAS_val);
+ int
+ ipCidrRouteNextHopAS_undo_setup(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipCidrRouteNextHopAS_set(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, long
+ ipCidrRouteNextHopAS_val);
+ int ipCidrRouteNextHopAS_undo(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipCidrRouteMetric1_check_value(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteMetric1_val);
+ int
+ ipCidrRouteMetric1_undo_setup(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipCidrRouteMetric1_set(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteMetric1_val);
+ int ipCidrRouteMetric1_undo(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipCidrRouteMetric2_check_value(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteMetric2_val);
+ int
+ ipCidrRouteMetric2_undo_setup(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipCidrRouteMetric2_set(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteMetric2_val);
+ int ipCidrRouteMetric2_undo(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipCidrRouteMetric3_check_value(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteMetric3_val);
+ int
+ ipCidrRouteMetric3_undo_setup(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipCidrRouteMetric3_set(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteMetric3_val);
+ int ipCidrRouteMetric3_undo(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipCidrRouteMetric4_check_value(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteMetric4_val);
+ int
+ ipCidrRouteMetric4_undo_setup(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipCidrRouteMetric4_set(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteMetric4_val);
+ int ipCidrRouteMetric4_undo(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipCidrRouteMetric5_check_value(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteMetric5_val);
+ int
+ ipCidrRouteMetric5_undo_setup(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipCidrRouteMetric5_set(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipCidrRouteMetric5_val);
+ int ipCidrRouteMetric5_undo(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipCidrRouteStatus_check_value(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipCidrRouteStatus_val);
+ int
+ ipCidrRouteStatus_undo_setup(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipCidrRouteStatus_set(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipCidrRouteStatus_val);
+ int ipCidrRouteStatus_undo(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+ int
+ ipCidrRouteTable_check_dependencies(ipCidrRouteTable_rowreq_ctx *
+ ctx);
+
+
+ /*
+ * DUMMY markers, ignore
+ *
+ * TODO:099:x: *************************************************************
+ * TODO:199:x: *************************************************************
+ * TODO:299:x: *************************************************************
+ * TODO:399:x: *************************************************************
+ * TODO:499:x: *************************************************************
+ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPCIDRROUTETABLE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_constants.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_constants.h
new file mode 100644
index 0000000000..7d99e000de
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_constants.h
@@ -0,0 +1,172 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-constants.m2c,v 1.5 2005/07/15 22:41:16 rstory Exp $
+ *
+ * $Id: ipCidrRouteTable_constants.h 13754 2005-11-30 22:32:31Z rstory $
+ */
+#ifndef IPCIDRROUTETABLE_CONSTANTS_H
+#define IPCIDRROUTETABLE_CONSTANTS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ * column number definitions for table ipCidrRouteTable
+ */
+#define IPCIDRROUTETABLE_OID 1,3,6,1,2,1,4,24,4
+
+#define COLUMN_IPCIDRROUTEDEST 1
+
+#define COLUMN_IPCIDRROUTEMASK 2
+
+#define COLUMN_IPCIDRROUTETOS 3
+
+#define COLUMN_IPCIDRROUTENEXTHOP 4
+
+#define COLUMN_IPCIDRROUTEIFINDEX 5
+#define COLUMN_IPCIDRROUTEIFINDEX_FLAG (0x1 << 4)
+
+#define COLUMN_IPCIDRROUTETYPE 6
+#define COLUMN_IPCIDRROUTETYPE_FLAG (0x1 << 5)
+
+#define COLUMN_IPCIDRROUTEPROTO 7
+
+#define COLUMN_IPCIDRROUTEAGE 8
+
+#define COLUMN_IPCIDRROUTEINFO 9
+#define COLUMN_IPCIDRROUTEINFO_FLAG (0x1 << 8)
+
+#define COLUMN_IPCIDRROUTENEXTHOPAS 10
+#define COLUMN_IPCIDRROUTENEXTHOPAS_FLAG (0x1 << 9)
+
+#define COLUMN_IPCIDRROUTEMETRIC1 11
+#define COLUMN_IPCIDRROUTEMETRIC1_FLAG (0x1 << 10)
+
+#define COLUMN_IPCIDRROUTEMETRIC2 12
+#define COLUMN_IPCIDRROUTEMETRIC2_FLAG (0x1 << 11)
+
+#define COLUMN_IPCIDRROUTEMETRIC3 13
+#define COLUMN_IPCIDRROUTEMETRIC3_FLAG (0x1 << 12)
+
+#define COLUMN_IPCIDRROUTEMETRIC4 14
+#define COLUMN_IPCIDRROUTEMETRIC4_FLAG (0x1 << 13)
+
+#define COLUMN_IPCIDRROUTEMETRIC5 15
+#define COLUMN_IPCIDRROUTEMETRIC5_FLAG (0x1 << 14)
+
+#define COLUMN_IPCIDRROUTESTATUS 16
+#define COLUMN_IPCIDRROUTESTATUS_FLAG (0x1 << 15)
+
+
+#define IPCIDRROUTETABLE_MIN_COL COLUMN_IPCIDRROUTEDEST
+#define IPCIDRROUTETABLE_MAX_COL COLUMN_IPCIDRROUTESTATUS
+
+
+ /*
+ * TODO:405:r: Review IPCIDRROUTETABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define IPCIDRROUTETABLE_SETTABLE_COLS (COLUMN_IPCIDRROUTEIFINDEX_FLAG | COLUMN_IPCIDRROUTETYPE_FLAG | COLUMN_IPCIDRROUTEINFO_FLAG | COLUMN_IPCIDRROUTENEXTHOPAS_FLAG | COLUMN_IPCIDRROUTEMETRIC1_FLAG | COLUMN_IPCIDRROUTEMETRIC2_FLAG | COLUMN_IPCIDRROUTEMETRIC3_FLAG | COLUMN_IPCIDRROUTEMETRIC4_FLAG | COLUMN_IPCIDRROUTEMETRIC5_FLAG | COLUMN_IPCIDRROUTESTATUS_FLAG)
+ /*
+ * TODO:405:r: Review IPCIDRROUTETABLE_REQUIRED_COLS macro.
+ * OR together all the required rows for row creation.
+ * default is writable cols w/out defaults.
+ */
+#define IPCIDRROUTETABLE_REQUIRED_COLS (COLUMN_IPCIDRROUTETYPE_FLAG | COLUMN_IPCIDRROUTEINFO_FLAG | COLUMN_IPCIDRROUTESTATUS_FLAG)
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table ipCidrRouteTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipCidrRouteType (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IPCIDRROUTETYPE_ENUMS
+#define IPCIDRROUTETYPE_ENUMS
+
+#define IPCIDRROUTETYPE_OTHER 1
+#define IPCIDRROUTETYPE_REJECT 2
+#define IPCIDRROUTETYPE_LOCAL 3
+#define IPCIDRROUTETYPE_REMOTE 4
+
+#endif /* IPCIDRROUTETYPE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipCidrRouteProto (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IPCIDRROUTEPROTO_ENUMS
+#define IPCIDRROUTEPROTO_ENUMS
+
+#define IPCIDRROUTEPROTO_OTHER 1
+#define IPCIDRROUTEPROTO_LOCAL 2
+#define IPCIDRROUTEPROTO_NETMGMT 3
+#define IPCIDRROUTEPROTO_ICMP 4
+#define IPCIDRROUTEPROTO_EGP 5
+#define IPCIDRROUTEPROTO_GGP 6
+#define IPCIDRROUTEPROTO_HELLO 7
+#define IPCIDRROUTEPROTO_RIP 8
+#define IPCIDRROUTEPROTO_ISIS 9
+#define IPCIDRROUTEPROTO_ESIS 10
+#define IPCIDRROUTEPROTO_CISCOIGRP 11
+#define IPCIDRROUTEPROTO_BBNSPFIGP 12
+#define IPCIDRROUTEPROTO_OSPF 13
+#define IPCIDRROUTEPROTO_BGP 14
+#define IPCIDRROUTEPROTO_IDPR 15
+#define IPCIDRROUTEPROTO_CISCOEIGRP 16
+
+#endif /* IPCIDRROUTEPROTO_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipCidrRouteStatus (RowStatus / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef ROWSTATUS_ENUMS
+#define ROWSTATUS_ENUMS
+
+#define ROWSTATUS_ACTIVE 1
+#define ROWSTATUS_NOTINSERVICE 2
+#define ROWSTATUS_NOTREADY 3
+#define ROWSTATUS_CREATEANDGO 4
+#define ROWSTATUS_CREATEANDWAIT 5
+#define ROWSTATUS_DESTROY 6
+
+#endif /* ROWSTATUS_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPCIDRROUTETABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.c
new file mode 100644
index 0000000000..b82ed63295
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.c
@@ -0,0 +1,671 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ipCidrRouteTable_data_access.c 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipCidrRouteTable.h"
+
+
+#include "ipCidrRouteTable_data_access.h"
+
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-FORWARD-MIB::ipCidrRouteTable is subid 4 of ipForward.
+ * Its status is Deprecated.
+ * OID: .1.3.6.1.2.1.4.24.4, length: 9
+ */
+
+/**
+ * initialization for ipCidrRouteTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param ipCidrRouteTable_reg
+ * Pointer to ipCidrRouteTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+ipCidrRouteTable_init_data(ipCidrRouteTable_registration *
+ ipCidrRouteTable_reg)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_init_data",
+ "called\n"));
+
+ /*
+ * TODO:303:o: Initialize ipCidrRouteTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+ipCidrRouteTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache * cache)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_container_init",
+ "called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,
+ "bad container param to ipCidrRouteTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,
+ "bad cache param to ipCidrRouteTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up ipCidrRouteTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = IPCIDRROUTETABLE_CACHE_TIMEOUT; /* seconds */
+} /* ipCidrRouteTable_container_init */
+
+/**
+ * check entry for update
+ *
+ */
+static void
+_snarf_route_entry(netsnmp_route_entry *route_entry,
+ netsnmp_container *container)
+{
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx;
+
+ DEBUGTRACE;
+
+ netsnmp_assert(NULL != route_entry);
+ netsnmp_assert(NULL != container);
+
+ /*
+ * allocate an row context and set the index(es), then add it to
+ * the container
+ */
+ rowreq_ctx = ipCidrRouteTable_allocate_rowreq_ctx(route_entry, NULL);
+ if ((NULL != rowreq_ctx) &&
+ (MFD_SUCCESS == ipCidrRouteTable_indexes_set
+ (rowreq_ctx, *((u_long *) route_entry->rt_dest),
+ route_entry->rt_mask, route_entry->rt_tos,
+ *((u_long *) route_entry->rt_nexthop)))) {
+ CONTAINER_INSERT(container, rowreq_ctx);
+ rowreq_ctx->ipCidrRouteStatus = ROWSTATUS_ACTIVE;
+ } else {
+ if (rowreq_ctx) {
+ snmp_log(LOG_ERR, "error setting index while loading "
+ "ipCidrRoute cache.\n");
+ ipCidrRouteTable_release_rowreq_ctx(rowreq_ctx);
+ } else
+ netsnmp_access_route_entry_free(route_entry);
+ }
+}
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before ipCidrRouteTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+ipCidrRouteTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_container_shutdown", "called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,
+ "bad params to ipCidrRouteTable_container_shutdown\n");
+ return;
+ }
+
+} /* ipCidrRouteTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement ipCidrRouteTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * ipCidrRouteTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+ipCidrRouteTable_container_load(netsnmp_container *container)
+{
+ netsnmp_container *route_container;
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_cache_load",
+ "called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the ipCidrRouteTable container.
+ * loop over your ipCidrRouteTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ route_container =
+ netsnmp_access_route_container_load(NULL,
+ NETSNMP_ACCESS_ROUTE_LOAD_IPV4_ONLY);
+
+ if (NULL == route_container)
+ return MFD_RESOURCE_UNAVAILABLE; /* msg already logged */
+
+ /*
+ * we just got a fresh copy of route data. snarf data
+ */
+ CONTAINER_FOR_EACH(route_container,
+ (netsnmp_container_obj_func *) _snarf_route_entry,
+ container);
+
+ /*
+ * free the container. we've either claimed each ifentry, or released it,
+ * so the dal function doesn't need to clear the container.
+ */
+ netsnmp_access_route_container_free(route_container,
+ NETSNMP_ACCESS_ROUTE_FREE_DONT_CLEAR);
+
+ DEBUGMSGT(("verbose:ipCidrRouteTable:ipCidrRouteTable_cache_load",
+ "%d records\n", CONTAINER_SIZE(container)));
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+ipCidrRouteTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_container_free",
+ "called\n"));
+
+ /*
+ * TODO:380:M: Free ipCidrRouteTable container data.
+ */
+} /* ipCidrRouteTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+ipCidrRouteTable_row_prep(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_row_prep",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* ipCidrRouteTable_row_prep */
+
+/*
+ * TODO:420:r: Implement ipCidrRouteTable index validation.
+ */
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteDest
+ * ipCidrRouteDest is subid 1 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.24.4.1.1
+ * Description:
+The destination IP address of this route.
+
+ This object may not take a Multicast (Class D) address
+ value.
+
+ Any assignment (implicit or otherwise) of an instance
+ of this object to a value x must be rejected if the
+ bitwise logical-AND of x with the value of the
+ corresponding instance of the ipCidrRouteMask object is
+ not equal to x.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is IPADDR (based on perltype IPADDR)
+ * The net-snmp type is ASN_IPADDRESS. The C type decl is u_long (u_long)
+ */
+/**
+ * check validity of ipCidrRouteDest index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * ipCidrRouteTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+ipCidrRouteDest_check_index(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteDest_check_index",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check ipCidrRouteTable index ipCidrRouteDest.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.ipCidrRouteDest)
+ */
+
+ return MFD_SUCCESS; /* ipCidrRouteDest index ok */
+} /* ipCidrRouteDest_check_index */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMask
+ * ipCidrRouteMask is subid 2 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.24.4.1.2
+ * Description:
+Indicate the mask to be logical-ANDed with the
+ destination address before being compared to the value
+ in the ipCidrRouteDest field. For those systems that
+ do not support arbitrary subnet masks, an agent
+ constructs the value of the ipCidrRouteMask by
+ reference to the IP Address Class.
+
+ Any assignment (implicit or otherwise) of an instance
+ of this object to a value x must be rejected if the
+ bitwise logical-AND of x with the value of the
+ corresponding instance of the ipCidrRouteDest object is
+
+
+ not equal to ipCidrRouteDest.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is IPADDR (based on perltype IPADDR)
+ * The net-snmp type is ASN_IPADDRESS. The C type decl is u_long (u_long)
+ */
+/**
+ * check validity of ipCidrRouteMask index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * ipCidrRouteTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+ipCidrRouteMask_check_index(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMask_check_index",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check ipCidrRouteTable index ipCidrRouteMask.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.ipCidrRouteMask)
+ */
+
+ return MFD_SUCCESS; /* ipCidrRouteMask index ok */
+} /* ipCidrRouteMask_check_index */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteTos
+ * ipCidrRouteTos is subid 3 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.24.4.1.3
+ * Description:
+The policy specifier is the IP TOS Field. The encoding
+ of IP TOS is as specified by the following convention.
+ Zero indicates the default path if no more specific
+ policy applies.
+
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | | | |
+ | PRECEDENCE | TYPE OF SERVICE | 0 |
+ | | | |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+
+ IP TOS IP TOS
+ Field Policy Field Policy
+ Contents Code Contents Code
+ 0 0 0 0 ==> 0 0 0 0 1 ==> 2
+ 0 0 1 0 ==> 4 0 0 1 1 ==> 6
+ 0 1 0 0 ==> 8 0 1 0 1 ==> 10
+ 0 1 1 0 ==> 12 0 1 1 1 ==> 14
+ 1 0 0 0 ==> 16 1 0 0 1 ==> 18
+ 1 0 1 0 ==> 20 1 0 1 1 ==> 22
+ 1 1 0 0 ==> 24 1 1 0 1 ==> 26
+ 1 1 1 0 ==> 28 1 1 1 1 ==> 30
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 2147483647;
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * check validity of ipCidrRouteTos index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * ipCidrRouteTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ * The value is in (one of) the range set(s): 0 - 2147483647
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+ipCidrRouteTos_check_index(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTos_check_index",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check ipCidrRouteTable index ipCidrRouteTos.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.ipCidrRouteTos)
+ */
+
+ return MFD_SUCCESS; /* ipCidrRouteTos index ok */
+} /* ipCidrRouteTos_check_index */
+
+/*---------------------------------------------------------------------
+ * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteNextHop
+ * ipCidrRouteNextHop is subid 4 of ipCidrRouteEntry.
+ * Its status is Deprecated, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.24.4.1.4
+ * Description:
+On remote routes, the address of the next system en
+ route; Otherwise, 0.0.0.0.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is IPADDR (based on perltype IPADDR)
+ * The net-snmp type is ASN_IPADDRESS. The C type decl is u_long (u_long)
+ */
+/**
+ * check validity of ipCidrRouteNextHop index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * ipCidrRouteTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+ipCidrRouteNextHop_check_index(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHop_check_index",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check ipCidrRouteTable index ipCidrRouteNextHop.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.ipCidrRouteNextHop)
+ */
+
+ return MFD_SUCCESS; /* ipCidrRouteNextHop index ok */
+} /* ipCidrRouteNextHop_check_index */
+
+/**
+ * verify specified index is valid.
+ *
+ * This check is independent of whether or not the values specified for
+ * the columns of the new row are valid. Column values and row consistency
+ * will be checked later. At this point, only the index values should be
+ * checked.
+ *
+ * All of the individual index validation functions have been called, so this
+ * is the place to make sure they are valid as a whole when combined. If
+ * you only have one index, then you probably don't need to do anything else
+ * here.
+ *
+ * @note Keep in mind that if the indexes refer to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ *
+ * @param ipCidrRouteTable_reg
+ * Pointer to the user registration data
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_CANNOT_CREATE_NOW : index not valid right now
+ * @retval MFD_CANNOT_CREATE_EVER : index never valid
+ */
+int
+ipCidrRouteTable_validate_index(ipCidrRouteTable_registration *
+ ipCidrRouteTable_reg,
+ ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_validate_index",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:430:M: |-> Validate potential ipCidrRouteTable index.
+ */
+ if (1) {
+ snmp_log(LOG_WARNING, "invalid index for a new row in the "
+ "ipCidrRouteTable table.\n");
+ /*
+ * determine failure type.
+ *
+ * If the index could not ever be created, return MFD_NOT_EVER
+ * If the index can not be created under the present circumstances
+ * (even though it could be created under other circumstances),
+ * return MFD_NOT_NOW.
+ */
+ if (0) {
+ return MFD_CANNOT_CREATE_EVER;
+ } else {
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ }
+
+ return rc;
+} /* ipCidrRouteTable_validate_index */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.h
new file mode 100644
index 0000000000..331939fad7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_data_access.h
@@ -0,0 +1,82 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ipCidrRouteTable_data_access.h 13754 2005-11-30 22:32:31Z rstory $
+ */
+#ifndef IPCIDRROUTETABLE_DATA_ACCESS_H
+#define IPCIDRROUTETABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-FORWARD-MIB::ipCidrRouteTable is subid 4 of ipForward.
+ * Its status is Deprecated.
+ * OID: .1.3.6.1.2.1.4.24.4, length: 9
+ */
+
+
+ int
+ ipCidrRouteTable_init_data(ipCidrRouteTable_registration *
+ ipCidrRouteTable_reg);
+
+
+ /*
+ * TODO:180:o: Review ipCidrRouteTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define IPCIDRROUTETABLE_CACHE_TIMEOUT 60
+
+ void ipCidrRouteTable_container_init(netsnmp_container
+ **container_ptr_ptr,
+ netsnmp_cache * cache);
+ void ipCidrRouteTable_container_shutdown(netsnmp_container
+ *container_ptr);
+
+ int ipCidrRouteTable_container_load(netsnmp_container
+ *container);
+ void ipCidrRouteTable_container_free(netsnmp_container
+ *container);
+
+ int ipCidrRouteTable_cache_load(netsnmp_container
+ *container);
+ void ipCidrRouteTable_cache_free(netsnmp_container
+ *container);
+
+ int ipCidrRouteTable_row_prep(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipCidrRouteTable_validate_index(ipCidrRouteTable_registration *
+ ipCidrRouteTable_reg,
+ ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipCidrRouteDest_check_index(ipCidrRouteTable_rowreq_ctx * rowreq_ctx); /* internal */
+ int ipCidrRouteMask_check_index(ipCidrRouteTable_rowreq_ctx * rowreq_ctx); /* internal */
+ int ipCidrRouteTos_check_index(ipCidrRouteTable_rowreq_ctx * rowreq_ctx); /* internal */
+ int ipCidrRouteNextHop_check_index(ipCidrRouteTable_rowreq_ctx * rowreq_ctx); /* internal */
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPCIDRROUTETABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c
new file mode 100644
index 0000000000..f67626b47f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c
@@ -0,0 +1,2318 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ipCidrRouteTable_interface.c 15781 2007-01-23 22:55:06Z rstory $
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipCidrRouteTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "ipCidrRouteTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipCidrRouteTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-FORWARD-MIB::ipCidrRouteTable is subid 4 of ipForward.
+ * Its status is Deprecated.
+ * OID: .1.3.6.1.2.1.4.24.4, length: 9
+ */
+typedef struct ipCidrRouteTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ ipCidrRouteTable_registration *user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} ipCidrRouteTable_interface_ctx;
+
+static ipCidrRouteTable_interface_ctx ipCidrRouteTable_if_ctx;
+
+static void
+ _ipCidrRouteTable_container_init(ipCidrRouteTable_interface_ctx * if_ctx);
+static void
+ _ipCidrRouteTable_container_shutdown(ipCidrRouteTable_interface_ctx *
+ if_ctx);
+
+
+netsnmp_container *
+ipCidrRouteTable_container_get(void)
+{
+ return ipCidrRouteTable_if_ctx.container;
+}
+
+ipCidrRouteTable_registration *
+ipCidrRouteTable_registration_get(void)
+{
+ return ipCidrRouteTable_if_ctx.user_ctx;
+}
+
+ipCidrRouteTable_registration *
+ipCidrRouteTable_registration_set(ipCidrRouteTable_registration * newreg)
+{
+ ipCidrRouteTable_registration *old = ipCidrRouteTable_if_ctx.user_ctx;
+ ipCidrRouteTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+ipCidrRouteTable_container_size(void)
+{
+ return CONTAINER_SIZE(ipCidrRouteTable_if_ctx.container);
+}
+
+u_int
+ipCidrRouteTable_dirty_get(void)
+{
+ return ipCidrRouteTable_if_ctx.table_dirty;
+}
+
+void
+ipCidrRouteTable_dirty_set(u_int status)
+{
+ DEBUGMSGTL(("ipCidrRouteTable:ipCidrRouteTable_dirty_set",
+ "called. was %d, now %d\n",
+ ipCidrRouteTable_if_ctx.table_dirty, status));
+ ipCidrRouteTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_ipCidrRouteTable_pre_request;
+static Netsnmp_Node_Handler _mfd_ipCidrRouteTable_post_request;
+static Netsnmp_Node_Handler _mfd_ipCidrRouteTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_ipCidrRouteTable_get_values;
+static Netsnmp_Node_Handler _mfd_ipCidrRouteTable_check_objects;
+static Netsnmp_Node_Handler _mfd_ipCidrRouteTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_ipCidrRouteTable_set_values;
+static Netsnmp_Node_Handler _mfd_ipCidrRouteTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_ipCidrRouteTable_undo_values;
+static Netsnmp_Node_Handler _mfd_ipCidrRouteTable_commit;
+static Netsnmp_Node_Handler _mfd_ipCidrRouteTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_ipCidrRouteTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int
+ _ipCidrRouteTable_undo_column(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var,
+ int column);
+
+NETSNMP_STATIC_INLINE int
+ _ipCidrRouteTable_check_indexes(ipCidrRouteTable_rowreq_ctx * rowreq_ctx);
+
+/**
+ * @internal
+ * Initialize the table ipCidrRouteTable
+ * (Define its contents and how it's structured)
+ */
+void
+_ipCidrRouteTable_initialize_interface(ipCidrRouteTable_registration *
+ reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &ipCidrRouteTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info =
+ &ipCidrRouteTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_ipCidrRouteTable_initialize_interface", "called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for ipCidrRouteTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info, ASN_IPADDRESS,
+ /** index: ipCidrRouteDest */
+ ASN_IPADDRESS,
+ /** index: ipCidrRouteMask */
+ ASN_INTEGER,
+ /** index: ipCidrRouteTos */
+ ASN_IPADDRESS,
+ /** index: ipCidrRouteNextHop */
+ 0);
+
+ /*
+ * Define the minimum and maximum accessible columns. This
+ * optimizes retrival.
+ */
+ tbl_info->min_column = IPCIDRROUTETABLE_MIN_COL;
+ tbl_info->max_column = IPCIDRROUTETABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ ipCidrRouteTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ ipCidrRouteTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _ipCidrRouteTable_container_init(&ipCidrRouteTable_if_ctx);
+ if (NULL == ipCidrRouteTable_if_ctx.container) {
+ snmp_log(LOG_ERR,
+ "could not initialize container for ipCidrRouteTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup =
+ _mfd_ipCidrRouteTable_object_lookup;
+ access_multiplexer->get_values = _mfd_ipCidrRouteTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_ipCidrRouteTable_pre_request;
+ access_multiplexer->post_request = _mfd_ipCidrRouteTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks =
+ _mfd_ipCidrRouteTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_ipCidrRouteTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_ipCidrRouteTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_ipCidrRouteTable_set_values;
+ access_multiplexer->undo_sets = _mfd_ipCidrRouteTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_ipCidrRouteTable_commit;
+ access_multiplexer->undo_commit = _mfd_ipCidrRouteTable_undo_commit;
+ access_multiplexer->irreversible_commit =
+ _mfd_ipCidrRouteTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("ipCidrRouteTable:init_ipCidrRouteTable",
+ "Registering ipCidrRouteTable as a mibs-for-dummies table.\n"));
+ handler =
+ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo =
+ netsnmp_handler_registration_create("ipCidrRouteTable", handler,
+ ipCidrRouteTable_oid,
+ ipCidrRouteTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RONLY);
+ if (NULL == reginfo) {
+ snmp_log(LOG_ERR, "error registering table ipCidrRouteTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &ipCidrRouteTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if (access_multiplexer->object_lookup)
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if (access_multiplexer->set_values)
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if (access_multiplexer->irreversible_commit)
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if (access_multiplexer->object_syntax_checks)
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if (access_multiplexer->pre_request)
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if (access_multiplexer->post_request)
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if (access_multiplexer->undo_setup)
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if (access_multiplexer->undo_cleanup)
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if (access_multiplexer->undo_sets)
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if (access_multiplexer->row_creation)
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if (access_multiplexer->consistency_checks)
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if (access_multiplexer->commit)
+ mfd_modes |= BABY_STEP_COMMIT;
+ if (access_multiplexer->undo_commit)
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ ipCidrRouteTable_if_ctx.
+ container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if (NULL != ipCidrRouteTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(ipCidrRouteTable_if_ctx.cache);
+ netsnmp_inject_handler(reginfo, handler);
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _ipCidrRouteTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table ipCidrRouteTable
+ */
+void
+_ipCidrRouteTable_shutdown_interface(ipCidrRouteTable_registration *
+ reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _ipCidrRouteTable_container_shutdown(&ipCidrRouteTable_if_ctx);
+}
+
+void
+ipCidrRouteTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ ipCidrRouteTable_if_ctx.tbl_info.valid_columns = vc;
+} /* ipCidrRouteTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+ipCidrRouteTable_index_to_oid(netsnmp_index * oid_idx,
+ ipCidrRouteTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * ipCidrRouteDest(1)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_ipCidrRouteDest;
+ /*
+ * ipCidrRouteMask(2)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_ipCidrRouteMask;
+ /*
+ * ipCidrRouteTos(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ netsnmp_variable_list var_ipCidrRouteTos;
+ /*
+ * ipCidrRouteNextHop(4)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_ipCidrRouteNextHop;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_ipCidrRouteDest, 0x00, sizeof(var_ipCidrRouteDest));
+ var_ipCidrRouteDest.type = ASN_PRIV_IMPLIED_OCTET_STR;
+ memset(&var_ipCidrRouteMask, 0x00, sizeof(var_ipCidrRouteMask));
+ var_ipCidrRouteMask.type = ASN_PRIV_IMPLIED_OCTET_STR;
+ memset(&var_ipCidrRouteTos, 0x00, sizeof(var_ipCidrRouteTos));
+ var_ipCidrRouteTos.type = ASN_INTEGER;
+ memset(&var_ipCidrRouteNextHop, 0x00, sizeof(var_ipCidrRouteNextHop));
+ var_ipCidrRouteNextHop.type = ASN_PRIV_IMPLIED_OCTET_STR;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_ipCidrRouteDest.next_variable = &var_ipCidrRouteMask;
+ var_ipCidrRouteMask.next_variable = &var_ipCidrRouteTos;
+ var_ipCidrRouteTos.next_variable = &var_ipCidrRouteNextHop;
+ var_ipCidrRouteNextHop.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_index_to_oid",
+ "called\n"));
+
+ /*
+ * ipCidrRouteDest(1)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ snmp_set_var_value(&var_ipCidrRouteDest,
+ (u_char *) & mib_idx->ipCidrRouteDest,
+ sizeof(mib_idx->ipCidrRouteDest));
+
+ /*
+ * ipCidrRouteMask(2)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ snmp_set_var_value(&var_ipCidrRouteMask,
+ (u_char *) & mib_idx->ipCidrRouteMask,
+ sizeof(mib_idx->ipCidrRouteMask));
+
+ /*
+ * ipCidrRouteTos(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ snmp_set_var_value(&var_ipCidrRouteTos,
+ (u_char *) & mib_idx->ipCidrRouteTos,
+ sizeof(mib_idx->ipCidrRouteTos));
+
+ /*
+ * ipCidrRouteNextHop(4)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ snmp_set_var_value(&var_ipCidrRouteNextHop,
+ (u_char *) & mib_idx->ipCidrRouteNextHop,
+ sizeof(mib_idx->ipCidrRouteNextHop));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_ipCidrRouteDest);
+ if (err)
+ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_ipCidrRouteDest);
+
+ return err;
+} /* ipCidrRouteTable_index_to_oid */
+
+/**
+ * extract ipCidrRouteTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+ipCidrRouteTable_index_from_oid(netsnmp_index * oid_idx,
+ ipCidrRouteTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * ipCidrRouteDest(1)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_ipCidrRouteDest;
+ /*
+ * ipCidrRouteMask(2)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_ipCidrRouteMask;
+ /*
+ * ipCidrRouteTos(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ netsnmp_variable_list var_ipCidrRouteTos;
+ /*
+ * ipCidrRouteNextHop(4)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_ipCidrRouteNextHop;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_ipCidrRouteDest, 0x00, sizeof(var_ipCidrRouteDest));
+ var_ipCidrRouteDest.type = ASN_IPADDRESS;
+ memset(&var_ipCidrRouteMask, 0x00, sizeof(var_ipCidrRouteMask));
+ var_ipCidrRouteMask.type = ASN_IPADDRESS;
+ memset(&var_ipCidrRouteTos, 0x00, sizeof(var_ipCidrRouteTos));
+ var_ipCidrRouteTos.type = ASN_INTEGER;
+ memset(&var_ipCidrRouteNextHop, 0x00, sizeof(var_ipCidrRouteNextHop));
+ var_ipCidrRouteNextHop.type = ASN_IPADDRESS;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_ipCidrRouteDest.next_variable = &var_ipCidrRouteMask;
+ var_ipCidrRouteMask.next_variable = &var_ipCidrRouteTos;
+ var_ipCidrRouteTos.next_variable = &var_ipCidrRouteNextHop;
+ var_ipCidrRouteNextHop.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_index_from_oid",
+ "called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
+ &var_ipCidrRouteDest);
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->ipCidrRouteDest =
+ *((u_long *) var_ipCidrRouteDest.val.string);
+ mib_idx->ipCidrRouteMask =
+ *((u_long *) var_ipCidrRouteMask.val.string);
+ mib_idx->ipCidrRouteTos =
+ *((long *) var_ipCidrRouteTos.val.string);
+ mib_idx->ipCidrRouteNextHop =
+ *((u_long *) var_ipCidrRouteNextHop.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_ipCidrRouteDest);
+
+ return err;
+} /* ipCidrRouteTable_index_from_oid */
+
+
+/*
+ *********************************************************************
+ * @internal
+ * allocate resources for a ipCidrRouteTable_rowreq_ctx
+ */
+ipCidrRouteTable_rowreq_ctx *
+ipCidrRouteTable_allocate_rowreq_ctx(ipCidrRouteTable_data * data,
+ void *user_init_ctx)
+{
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(ipCidrRouteTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:ipCidrRouteTable_allocate_rowreq_ctx", "called\n"));
+
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+ "ipCidrRouteTable_rowreq_ctx.\n");
+ return NULL;
+ } else {
+ if (NULL != data) {
+ /*
+ * track if we got data from user
+ */
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DATA_FROM_USER;
+ rowreq_ctx->data = data;
+ } else if (NULL ==
+ (rowreq_ctx->data = ipCidrRouteTable_allocate_data())) {
+ SNMP_FREE(rowreq_ctx);
+ return NULL;
+ }
+ }
+
+ /*
+ * undo context will be allocated when needed (in *_undo_setup)
+ */
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->ipCidrRouteTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if (SNMPERR_SUCCESS !=
+ ipCidrRouteTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ ipCidrRouteTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* ipCidrRouteTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a ipCidrRouteTable_rowreq_ctx
+ */
+void
+ipCidrRouteTable_release_rowreq_ctx(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:ipCidrRouteTable:ipCidrRouteTable_release_rowreq_ctx", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ ipCidrRouteTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ /*
+ * for non-transient data, don't free data we got from the user
+ */
+ if ((rowreq_ctx->data) &&
+ !(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER))
+ ipCidrRouteTable_release_data(rowreq_ctx->data);
+
+ if (rowreq_ctx->undo)
+ ipCidrRouteTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* ipCidrRouteTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipCidrRouteTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_pre_request", "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ipCidrRouteTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = ipCidrRouteTable_pre_request(ipCidrRouteTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipCidrRouteTable", "error %d from "
+ "ipCidrRouteTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipCidrRouteTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipCidrRouteTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_post_request", "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ ipCidrRouteTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ipCidrRouteTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && ipCidrRouteTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING,
+ "ipCidrRouteTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = ipCidrRouteTable_post_request(ipCidrRouteTable_if_ctx.user_ctx,
+ packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipCidrRouteTable", "error %d from "
+ "ipCidrRouteTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipCidrRouteTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static ipCidrRouteTable_rowreq_ctx *
+_mfd_ipCidrRouteTable_rowreq_from_index(netsnmp_index * oid_idx,
+ int *rc_ptr)
+{
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx;
+ ipCidrRouteTable_mib_index mib_idx;
+ int rc;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_rowreq_from_index", "called\n"));
+
+ if (NULL == rc_ptr)
+ rc_ptr = &rc;
+ *rc_ptr = MFD_SUCCESS;
+
+ memset(&mib_idx, 0x0, sizeof(mib_idx));
+
+ /*
+ * try to parse oid
+ */
+ *rc_ptr = ipCidrRouteTable_index_from_oid(oid_idx, &mib_idx);
+ if (MFD_SUCCESS != *rc_ptr) {
+ DEBUGMSGT(("ipCidrRouteTable", "error parsing index\n"));
+ return NULL;
+ }
+
+ /*
+ * allocate new context
+ */
+ rowreq_ctx = ipCidrRouteTable_allocate_rowreq_ctx(NULL, NULL);
+ if (NULL == rowreq_ctx) {
+ *rc_ptr = MFD_ERROR;
+ return NULL; /* msg already logged */
+ }
+
+ memcpy(&rowreq_ctx->tbl_idx, &mib_idx, sizeof(mib_idx));
+
+ /*
+ * check indexes
+ */
+ *rc_ptr = _ipCidrRouteTable_check_indexes(rowreq_ctx);
+ if (MFD_SUCCESS != *rc_ptr) {
+ netsnmp_assert((*rc_ptr == SNMP_ERR_NOCREATION) ||
+ (*rc_ptr == SNMP_ERR_INCONSISTENTNAME));
+ ipCidrRouteTable_release_rowreq_ctx(rowreq_ctx);
+ return NULL;
+ }
+
+ /*
+ * copy indexes
+ */
+ rowreq_ctx->oid_idx.len = oid_idx->len;
+ memcpy(rowreq_ctx->oid_idx.oids, oid_idx->oids,
+ oid_idx->len * sizeof(oid));
+
+ return rowreq_ctx;
+} /* _mfd_ipCidrRouteTable_rowreq_from_index */
+
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipCidrRouteTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_object_lookup", "called\n"));
+
+ /*
+ * get our context from mfd
+ * ipCidrRouteTable_interface_ctx *if_ctx =
+ * (ipCidrRouteTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if (NULL == rowreq_ctx) {
+ netsnmp_table_request_info *tblreq_info;
+ netsnmp_index oid_idx;
+
+ tblreq_info = netsnmp_extract_table_info(requests);
+ if (NULL == tblreq_info) {
+ snmp_log(LOG_ERR, "request had no table info\n");
+ return MFD_ERROR;
+ }
+
+ /*
+ * try create rowreq
+ */
+ oid_idx.oids = tblreq_info->index_oid;
+ oid_idx.len = tblreq_info->index_oid_len;
+
+ rowreq_ctx =
+ _mfd_ipCidrRouteTable_rowreq_from_index(&oid_idx, &rc);
+ if (MFD_SUCCESS == rc) {
+ netsnmp_assert(NULL != rowreq_ctx);
+ rowreq_ctx->rowreq_flags |= MFD_ROW_CREATED;
+ /*
+ * add rowreq_ctx to request data lists
+ */
+ netsnmp_container_table_row_insert(requests, (netsnmp_index *)
+ rowreq_ctx);
+ }
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ ipCidrRouteTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_ipCidrRouteTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipCidrRouteTable_get_column(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_get_column", "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * (INDEX) ipCidrRouteDest(1)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPCIDRROUTEDEST:
+ var->type = ASN_IPADDRESS;
+ var->val_len = sizeof(u_long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.ipCidrRouteDest;
+ break;
+
+ /*
+ * (INDEX) ipCidrRouteMask(2)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPCIDRROUTEMASK:
+ var->type = ASN_IPADDRESS;
+ var->val_len = sizeof(u_long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.ipCidrRouteMask;
+ break;
+
+ /*
+ * (INDEX) ipCidrRouteTos(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ case COLUMN_IPCIDRROUTETOS:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.ipCidrRouteTos;
+ break;
+
+ /*
+ * (INDEX) ipCidrRouteNextHop(4)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPCIDRROUTENEXTHOP:
+ var->type = ASN_IPADDRESS;
+ var->val_len = sizeof(u_long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.ipCidrRouteNextHop;
+ break;
+
+ /*
+ * ipCidrRouteIfIndex(5)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEIFINDEX:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = ipCidrRouteIfIndex_get(rowreq_ctx, (long *) var->val.string);
+ break;
+
+ /*
+ * ipCidrRouteType(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPCIDRROUTETYPE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipCidrRouteType_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipCidrRouteProto(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_IPCIDRROUTEPROTO:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipCidrRouteProto_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipCidrRouteAge(8)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEAGE:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = ipCidrRouteAge_get(rowreq_ctx, (long *) var->val.string);
+ break;
+
+ /*
+ * ipCidrRouteInfo(9)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/W/e/r/d/h
+ */
+ case COLUMN_IPCIDRROUTEINFO:
+ var->type = ASN_OBJECT_ID;
+ rc = ipCidrRouteInfo_get(rowreq_ctx, (oid **) & var->val.string,
+ &var->val_len);
+ break;
+
+ /*
+ * ipCidrRouteNextHopAS(10)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTENEXTHOPAS:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = ipCidrRouteNextHopAS_get(rowreq_ctx,
+ (long *) var->val.string);
+ break;
+
+ /*
+ * ipCidrRouteMetric1(11)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC1:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = ipCidrRouteMetric1_get(rowreq_ctx, (long *) var->val.string);
+ break;
+
+ /*
+ * ipCidrRouteMetric2(12)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC2:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = ipCidrRouteMetric2_get(rowreq_ctx, (long *) var->val.string);
+ break;
+
+ /*
+ * ipCidrRouteMetric3(13)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC3:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = ipCidrRouteMetric3_get(rowreq_ctx, (long *) var->val.string);
+ break;
+
+ /*
+ * ipCidrRouteMetric4(14)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC4:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = ipCidrRouteMetric4_get(rowreq_ctx, (long *) var->val.string);
+ break;
+
+ /*
+ * ipCidrRouteMetric5(15)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC5:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = ipCidrRouteMetric5_get(rowreq_ctx, (long *) var->val.string);
+ break;
+
+ /*
+ * ipCidrRouteStatus(16)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPCIDRROUTESTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipCidrRouteStatus_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipCidrRouteTable_get_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ipCidrRouteTable_get_column */
+
+int
+_mfd_ipCidrRouteTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ u_char *old_string;
+ void (*dataFreeHook) (void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_get_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if (NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ } else if (requests->requestvb->buf ==
+ requests->requestvb->val.string) {
+ if (requests->requestvb->val_len !=
+ sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipCidrRouteTable_get_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ if (MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ } else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if (rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if (old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if (dataFreeHook)
+ (*dataFreeHook) (old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipCidrRouteTable_get_values */
+
+NETSNMP_STATIC_INLINE int
+_ipCidrRouteTable_check_indexes(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_ipCidrRouteTable_check_indexes", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+
+ /*
+ * (INDEX) ipCidrRouteDest(1)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = ipCidrRouteDest_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * (INDEX) ipCidrRouteMask(2)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = ipCidrRouteMask_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * (INDEX) ipCidrRouteTos(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ /*
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((rowreq_ctx->tbl_idx.ipCidrRouteTos < 0)
+ || (rowreq_ctx->tbl_idx.ipCidrRouteTos > 2147483647))
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = ipCidrRouteTos_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * (INDEX) ipCidrRouteNextHop(4)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = ipCidrRouteNextHop_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * if individual parts look ok, check them as a whole
+ */
+ return ipCidrRouteTable_validate_index(ipCidrRouteTable_if_ctx.
+ user_ctx, rowreq_ctx);
+} /* _ipCidrRouteTable_check_indexes */
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipCidrRouteTable_check_column(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_ipCidrRouteTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+ /*
+ * (INDEX) ipCidrRouteDest(1)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPCIDRROUTEDEST:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /*
+ * (INDEX) ipCidrRouteMask(2)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPCIDRROUTEMASK:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /*
+ * (INDEX) ipCidrRouteTos(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ case COLUMN_IPCIDRROUTETOS:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /*
+ * (INDEX) ipCidrRouteNextHop(4)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPCIDRROUTENEXTHOP:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /*
+ * ipCidrRouteIfIndex(5)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEIFINDEX:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:_ipCidrRouteTable_check_column:ipCidrRouteIfIndex", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipCidrRouteIfIndex_check_value(rowreq_ctx,
+ *((long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipCidrRouteIfIndex_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipCidrRouteType(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPCIDRROUTETYPE:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (*var->val.integer != IPCIDRROUTETYPE_OTHER)
+ && (*var->val.integer != IPCIDRROUTETYPE_REJECT)
+ && (*var->val.integer != IPCIDRROUTETYPE_LOCAL)
+ && (*var->val.integer != IPCIDRROUTETYPE_REMOTE)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:_ipCidrRouteTable_check_column:ipCidrRouteType", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipCidrRouteType_check_value(rowreq_ctx,
+ *((u_long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipCidrRouteType_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipCidrRouteProto(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_IPCIDRROUTEPROTO:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ipCidrRouteAge(8)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEAGE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ipCidrRouteInfo(9)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/W/e/r/d/h
+ */
+ case COLUMN_IPCIDRROUTEINFO:
+ rc = netsnmp_check_vb_type(var, ASN_OBJECT_ID);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:_ipCidrRouteTable_check_column:ipCidrRouteInfo", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipCidrRouteInfo_check_value(rowreq_ctx,
+ (oid *) var->val.string,
+ var->val_len);
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipCidrRouteInfo_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipCidrRouteNextHopAS(10)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTENEXTHOPAS:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:_ipCidrRouteTable_check_column:ipCidrRouteNextHopAS", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipCidrRouteNextHopAS_check_value(rowreq_ctx,
+ *((long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipCidrRouteNextHopAS_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipCidrRouteMetric1(11)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC1:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:_ipCidrRouteTable_check_column:ipCidrRouteMetric1", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipCidrRouteMetric1_check_value(rowreq_ctx,
+ *((long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipCidrRouteMetric1_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipCidrRouteMetric2(12)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC2:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:_ipCidrRouteTable_check_column:ipCidrRouteMetric2", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipCidrRouteMetric2_check_value(rowreq_ctx,
+ *((long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipCidrRouteMetric2_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipCidrRouteMetric3(13)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC3:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:_ipCidrRouteTable_check_column:ipCidrRouteMetric3", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipCidrRouteMetric3_check_value(rowreq_ctx,
+ *((long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipCidrRouteMetric3_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipCidrRouteMetric4(14)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC4:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:_ipCidrRouteTable_check_column:ipCidrRouteMetric4", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipCidrRouteMetric4_check_value(rowreq_ctx,
+ *((long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipCidrRouteMetric4_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipCidrRouteMetric5(15)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC5:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:_ipCidrRouteTable_check_column:ipCidrRouteMetric5", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipCidrRouteMetric5_check_value(rowreq_ctx,
+ *((long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipCidrRouteMetric5_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipCidrRouteStatus(16)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPCIDRROUTESTATUS:
+ rc = netsnmp_check_vb_rowstatus_value(var);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:_ipCidrRouteTable_check_column:ipCidrRouteStatus", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipCidrRouteStatus_check_value(rowreq_ctx,
+ *((u_long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipCidrRouteStatus_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipCidrRouteTable_check_column\n",
+ column);
+ }
+
+ return rc;
+} /* _ipCidrRouteTable_check_column */
+
+int
+_mfd_ipCidrRouteTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_check_objects", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ netsnmp_table_request_info *tri;
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipCidrRouteTable_check_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipCidrRouteTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipCidrRouteTable_undo_setup_column(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_ipCidrRouteTable_undo_setup_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipCidrRouteIfIndex(5)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEIFINDEX:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEIFINDEX_FLAG;
+ rc = ipCidrRouteIfIndex_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteType(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPCIDRROUTETYPE:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTETYPE_FLAG;
+ rc = ipCidrRouteType_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteInfo(9)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/W/e/r/d/h
+ */
+ case COLUMN_IPCIDRROUTEINFO:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEINFO_FLAG;
+ rc = ipCidrRouteInfo_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteNextHopAS(10)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTENEXTHOPAS:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTENEXTHOPAS_FLAG;
+ rc = ipCidrRouteNextHopAS_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteMetric1(11)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC1:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC1_FLAG;
+ rc = ipCidrRouteMetric1_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteMetric2(12)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC2:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC2_FLAG;
+ rc = ipCidrRouteMetric2_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteMetric3(13)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC3:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC3_FLAG;
+ rc = ipCidrRouteMetric3_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteMetric4(14)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC4:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC4_FLAG;
+ rc = ipCidrRouteMetric4_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteMetric5(15)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC5:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC5_FLAG;
+ rc = ipCidrRouteMetric5_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteStatus(16)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPCIDRROUTESTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTESTATUS_FLAG;
+ rc = ipCidrRouteStatus_undo_setup(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipCidrRouteTable_undo_setup_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ipCidrRouteTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_ipCidrRouteTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_undo_setup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = ipCidrRouteTable_allocate_data();
+ if (NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = ipCidrRouteTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:mfd", "error %d from "
+ "ipCidrRouteTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ } else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info *tri;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipCidrRouteTable_undo_setup_column(rowreq_ctx,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:mfd", "error %d from "
+ "ipCidrRouteTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipCidrRouteTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_ipCidrRouteTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_undo_cleanup", "called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = ipCidrRouteTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipCidrRouteTable:mfd", "error %d from "
+ "ipCidrRouteTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if (rowreq_ctx->undo) {
+ ipCidrRouteTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipCidrRouteTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipCidrRouteTable_set_column(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_ipCidrRouteTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipCidrRouteIfIndex(5)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEIFINDEX:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEIFINDEX_FLAG;
+ rc = ipCidrRouteIfIndex_set(rowreq_ctx,
+ *((long *) var->val.string));
+ break;
+
+ /*
+ * ipCidrRouteType(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPCIDRROUTETYPE:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTETYPE_FLAG;
+ rc = ipCidrRouteType_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ /*
+ * ipCidrRouteInfo(9)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/W/e/r/d/h
+ */
+ case COLUMN_IPCIDRROUTEINFO:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEINFO_FLAG;
+ rc = ipCidrRouteInfo_set(rowreq_ctx, (oid *) var->val.string,
+ var->val_len);
+ break;
+
+ /*
+ * ipCidrRouteNextHopAS(10)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTENEXTHOPAS:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTENEXTHOPAS_FLAG;
+ rc = ipCidrRouteNextHopAS_set(rowreq_ctx,
+ *((long *) var->val.string));
+ break;
+
+ /*
+ * ipCidrRouteMetric1(11)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC1:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC1_FLAG;
+ rc = ipCidrRouteMetric1_set(rowreq_ctx,
+ *((long *) var->val.string));
+ break;
+
+ /*
+ * ipCidrRouteMetric2(12)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC2:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC2_FLAG;
+ rc = ipCidrRouteMetric2_set(rowreq_ctx,
+ *((long *) var->val.string));
+ break;
+
+ /*
+ * ipCidrRouteMetric3(13)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC3:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC3_FLAG;
+ rc = ipCidrRouteMetric3_set(rowreq_ctx,
+ *((long *) var->val.string));
+ break;
+
+ /*
+ * ipCidrRouteMetric4(14)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC4:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC4_FLAG;
+ rc = ipCidrRouteMetric4_set(rowreq_ctx,
+ *((long *) var->val.string));
+ break;
+
+ /*
+ * ipCidrRouteMetric5(15)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC5:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC5_FLAG;
+ rc = ipCidrRouteMetric5_set(rowreq_ctx,
+ *((long *) var->val.string));
+ break;
+
+ /*
+ * ipCidrRouteStatus(16)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPCIDRROUTESTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTESTATUS_FLAG;
+ rc = ipCidrRouteStatus_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipCidrRouteTable_set_column\n",
+ column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _ipCidrRouteTable_set_column */
+
+int
+_mfd_ipCidrRouteTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_set_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipCidrRouteTable_set_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:mfd", "error %d from "
+ "ipCidrRouteTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipCidrRouteTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_ipCidrRouteTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_commit",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ipCidrRouteTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipCidrRouteTable:mfd", "error %d from "
+ "ipCidrRouteTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ ipCidrRouteTable_dirty_set(ipCidrRouteTable_dirty_get() + 1); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_ipCidrRouteTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_undo_commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = ipCidrRouteTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if (d)
+ ipCidrRouteTable_dirty_set(d - 1);
+ }
+
+ rc = ipCidrRouteTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipCidrRouteTable:mfd", "error %d from "
+ "ipCidrRouteTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING,
+ "ipCidrRouteTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipCidrRouteTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipCidrRouteTable_undo_column(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_ipCidrRouteTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipCidrRouteIfIndex(5)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEIFINDEX:
+ rc = ipCidrRouteIfIndex_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteType(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPCIDRROUTETYPE:
+ rc = ipCidrRouteType_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteInfo(9)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/W/e/r/d/h
+ */
+ case COLUMN_IPCIDRROUTEINFO:
+ rc = ipCidrRouteInfo_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteNextHopAS(10)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTENEXTHOPAS:
+ rc = ipCidrRouteNextHopAS_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteMetric1(11)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC1:
+ rc = ipCidrRouteMetric1_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteMetric2(12)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC2:
+ rc = ipCidrRouteMetric2_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteMetric3(13)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC3:
+ rc = ipCidrRouteMetric3_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteMetric4(14)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC4:
+ rc = ipCidrRouteMetric4_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteMetric5(15)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/D/h
+ */
+ case COLUMN_IPCIDRROUTEMETRIC5:
+ rc = ipCidrRouteMetric5_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipCidrRouteStatus(16)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPCIDRROUTESTATUS:
+ rc = ipCidrRouteStatus_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipCidrRouteTable_undo_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ipCidrRouteTable_undo_column */
+
+int
+_mfd_ipCidrRouteTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_undo_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ipCidrRouteTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipCidrRouteTable:mfd", "error %d from "
+ "ipCidrRouteTable_undo\n", rc));
+ }
+
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipCidrRouteTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipCidrRouteTable:mfd", "error %d from "
+ "ipCidrRouteTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipCidrRouteTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_ipCidrRouteTable_irreversible_commit(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_mfd_ipCidrRouteTable_irreversible:commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(ipCidrRouteTable_if_ctx.container, rowreq_ctx);
+ } else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_CREATED;
+ CONTAINER_INSERT(ipCidrRouteTable_if_ctx.container,
+ rowreq_ctx);
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipCidrRouteTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache * cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_cache_load", "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR,
+ "invalid cache for ipCidrRouteTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return ipCidrRouteTable_container_load((netsnmp_container *) cache->
+ magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache * cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_cache_free", "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR,
+ "invalid cache in ipCidrRouteTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container *) cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
+ void *context)
+{
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_container_item_free",
+ "called\n"));
+
+ if (NULL == rowreq_ctx)
+ return;
+
+ ipCidrRouteTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_container_free", "called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR,
+ "invalid container in ipCidrRouteTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ ipCidrRouteTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *) _container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_ipCidrRouteTable_container_init(ipCidrRouteTable_interface_ctx * if_ctx)
+{
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_ipCidrRouteTable_container_init", "called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ ipCidrRouteTable_oid,
+ ipCidrRouteTable_oid_size);
+
+ if (NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for ipCidrRouteTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ ipCidrRouteTable_container_init(&if_ctx->container, if_ctx->cache);
+ if (NULL == if_ctx->container)
+ if_ctx->container =
+ netsnmp_container_find("ipCidrRouteTable:table_container");
+ if (NULL == if_ctx->container) {
+ snmp_log(LOG_ERR, "error creating container in "
+ "ipCidrRouteTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void *) if_ctx->container;
+} /* _ipCidrRouteTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_ipCidrRouteTable_container_shutdown(ipCidrRouteTable_interface_ctx *
+ if_ctx)
+{
+ DEBUGMSGTL(("internal:ipCidrRouteTable:_ipCidrRouteTable_container_shutdown", "called\n"));
+
+ ipCidrRouteTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _ipCidrRouteTable_container_shutdown */
+
+
+ipCidrRouteTable_rowreq_ctx *
+ipCidrRouteTable_row_find_by_mib_index(ipCidrRouteTable_mib_index *
+ mib_idx)
+{
+ ipCidrRouteTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = ipCidrRouteTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx =
+ CONTAINER_FIND(ipCidrRouteTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.h
new file mode 100644
index 0000000000..11afdacea3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.h
@@ -0,0 +1,100 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ipCidrRouteTable_interface.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/** @ingroup interface Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef IPCIDRROUTETABLE_INTERFACE_H
+#define IPCIDRROUTETABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "ipCidrRouteTable.h"
+
+
+ /*
+ ********************************************************************
+ * Table declarations
+ */
+
+ /*
+ * PUBLIC interface initialization routine
+ */
+ void
+ _ipCidrRouteTable_initialize_interface
+ (ipCidrRouteTable_registration * user_ctx, u_long flags);
+ void
+ _ipCidrRouteTable_shutdown_interface(ipCidrRouteTable_registration
+ * user_ctx);
+ ipCidrRouteTable_registration *ipCidrRouteTable_registration_get(void);
+
+ ipCidrRouteTable_registration
+ * ipCidrRouteTable_registration_set(ipCidrRouteTable_registration *
+ newreg);
+
+ netsnmp_container *ipCidrRouteTable_container_get(void);
+ int ipCidrRouteTable_container_size(void);
+
+ u_int ipCidrRouteTable_dirty_get(void);
+ void ipCidrRouteTable_dirty_set(u_int status);
+
+ ipCidrRouteTable_rowreq_ctx
+ * ipCidrRouteTable_allocate_rowreq_ctx(ipCidrRouteTable_data *,
+ void *);
+ void
+ ipCidrRouteTable_release_rowreq_ctx(ipCidrRouteTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ipCidrRouteTable_index_to_oid(netsnmp_index * oid_idx,
+ ipCidrRouteTable_mib_index
+ * mib_idx);
+ int ipCidrRouteTable_index_from_oid(netsnmp_index *
+ oid_idx,
+ ipCidrRouteTable_mib_index
+ * mib_idx);
+
+ /*
+ * access to certain internals. use with caution!
+ */
+ void ipCidrRouteTable_valid_columns_set(netsnmp_column_info
+ *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPCIDRROUTETABLE_INTERFACE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib.h
new file mode 100644
index 0000000000..b45cbb4a01
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib.h
@@ -0,0 +1,9 @@
+/*
+ * module to include the modules
+ */
+
+config_require(ip-mib/ipAddressTable);
+config_require(ip-mib/inetNetToMediaTable);
+config_require(ip-mib/ipSystemStatsTable);
+config_require(ip-mib/ip_scalars);
+config_add_mib(IP-MIB)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/arp.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/arp.h
new file mode 100644
index 0000000000..1fcc67f4d9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/arp.h
@@ -0,0 +1,30 @@
+/*
+ * arp data access header
+ *
+ * $Id: arp.h 13310 2005-10-29 03:31:29Z rstory $
+ */
+/**---------------------------------------------------------------------*/
+/*
+ * configure required files
+ *
+ * Notes:
+ *
+ * 1) prefer functionality over platform, where possible. If a method
+ * is available for multiple platforms, test that first. That way
+ * when a new platform is ported, it won't need a new test here.
+ *
+ * 2) don't do detail requirements here. If, for example,
+ * HPUX11 had different reuirements than other HPUX, that should
+ * be handled in the *_hpux.h header file.
+ */
+config_require(ip-mib/data_access/arp_common)
+#if defined( linux )
+config_require(ip-mib/data_access/arp_linux)
+#else
+/*
+ * couldn't determine the correct file!
+ * require a bogus file to generate an error.
+ */
+config_require(ip-mib/data_access/arp-unknown-arch)
+#endif
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/arp_common.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/arp_common.c
new file mode 100644
index 0000000000..e8795f9904
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/arp_common.c
@@ -0,0 +1,142 @@
+/*
+ * Arp MIB architecture support
+ *
+ * $Id: arp_common.c 13920 2005-12-11 17:55:01Z rstory $
+ */
+#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/data_access/arp.h>
+
+/**---------------------------------------------------------------------*/
+/*
+ * local static prototypes
+ */
+static void _access_arp_entry_release(netsnmp_arp_entry * entry,
+ void *unused);
+
+/**---------------------------------------------------------------------*/
+/*
+ * external per-architecture functions prototypes
+ *
+ * These shouldn't be called by the general public, so they aren't in
+ * the header file.
+ */
+extern int
+netsnmp_access_arp_container_arch_load(netsnmp_container* container,
+ u_int load_flags);
+
+
+/**---------------------------------------------------------------------*/
+/*
+ * container functions
+ */
+/**
+ */
+netsnmp_container *
+netsnmp_access_arp_container_init(u_int flags)
+{
+ netsnmp_container *container1;
+
+ DEBUGMSGTL(("access:arp:container", "init\n"));
+
+ /*
+ * create the containers. one indexed by ifIndex, the other
+ * indexed by ifName.
+ */
+ container1 = netsnmp_container_find("access_arp:table_container");
+ if (NULL == container1)
+ return NULL;
+ return container1;
+}
+
+/**
+ * @retval NULL error
+ * @retval !NULL pointer to container
+ */
+netsnmp_container*
+netsnmp_access_arp_container_load(netsnmp_container* container, u_int load_flags)
+{
+ int rc;
+
+ DEBUGMSGTL(("access:arp:container", "load\n"));
+
+ if (NULL == container)
+ container = netsnmp_container_find("access:arp:table_container");
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "no container specified/found for access_arp\n");
+ return NULL;
+ }
+
+ rc = netsnmp_access_arp_container_arch_load(container, load_flags);
+ if (0 != rc) {
+ netsnmp_access_arp_container_free(container,
+ NETSNMP_ACCESS_ARP_FREE_NOFLAGS);
+ container = NULL;
+ }
+
+ return container;
+}
+
+void
+netsnmp_access_arp_container_free(netsnmp_container *container, u_int free_flags)
+{
+ DEBUGMSGTL(("access:arp:container", "free\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container for netsnmp_access_arp_free\n");
+ return;
+ }
+
+ if(! (free_flags & NETSNMP_ACCESS_ARP_FREE_DONT_CLEAR)) {
+ /*
+ * free all items.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func*)_access_arp_entry_release,
+ NULL);
+ }
+
+ if(! (free_flags & NETSNMP_ACCESS_ARP_FREE_KEEP_CONTAINER))
+ CONTAINER_FREE(container);
+}
+
+/**---------------------------------------------------------------------*/
+/*
+ * arp_entry functions
+ */
+/**
+ */
+netsnmp_arp_entry *
+netsnmp_access_arp_entry_create(void)
+{
+ netsnmp_arp_entry *entry =
+ SNMP_MALLOC_TYPEDEF(netsnmp_arp_entry);
+
+ entry->oid_index.len = 1;
+ entry->oid_index.oids = &entry->ns_arp_index;
+
+ return entry;
+}
+
+/**
+ */
+void
+netsnmp_access_arp_entry_free(netsnmp_arp_entry * entry)
+{
+ free(entry);
+}
+
+/**---------------------------------------------------------------------*/
+/*
+ * Utility routines
+ */
+
+/**
+ */
+void
+_access_arp_entry_release(netsnmp_arp_entry * entry, void *context)
+{
+ netsnmp_access_arp_entry_free(entry);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/arp_linux.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/arp_linux.c
new file mode 100644
index 0000000000..e1d20c1da9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/arp_linux.c
@@ -0,0 +1,194 @@
+/*
+ * Interface MIB architecture support
+ *
+ * $Id: arp_linux.c 16381 2007-05-17 21:53:28Z hardaker $
+ */
+#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/data_access/arp.h>
+#include <net-snmp/data_access/interface.h>
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <net/if_arp.h>
+#include <arpa/inet.h>
+
+int _load_v4(netsnmp_container *container, int idx_offset);
+
+/**
+ */
+int
+netsnmp_access_arp_container_arch_load(netsnmp_container *container)
+{
+ int rc = 0, idx_offset = 0;
+
+ rc = _load_v4(container, idx_offset);
+ if(rc < 0) {
+ u_int flags = NETSNMP_ACCESS_ARP_FREE_KEEP_CONTAINER;
+ netsnmp_access_arp_container_free(container, flags);
+ return rc;
+ }
+
+#if defined (NETSNMP_ENABLE_IPV6) && 0 /* xx-rks: arp for v6? */
+ idx_offset = rc;
+
+ rc = _load_v6(container, idx_offset);
+ if(rc < 0) {
+ u_int flags = NETSNMP_ACCESS_ARP_FREE_KEEP_CONTAINER;
+ netsnmp_access_arp_container_free(container, flags);
+ }
+#endif
+
+ /*
+ * return no errors (0) if we found any interfaces
+ */
+ if(rc > 0)
+ rc = 0;
+
+ return rc;
+}
+
+/**
+ */
+int
+_load_v4(netsnmp_container *container, int idx_offset)
+{
+ FILE *in;
+ char line[128];
+ int rc = 0;
+ netsnmp_arp_entry *entry;
+
+ netsnmp_assert(NULL != container);
+
+#define PROCFILE "/proc/net/arp"
+ if (!(in = fopen(PROCFILE, "r"))) {
+ snmp_log(LOG_ERR,"could not open " PROCFILE "\n");
+ return -2;
+ }
+
+ /*
+ * Get rid of the header line
+ */
+ fgets(line, sizeof(line), in);
+
+ /*
+ * IP address | HW | Flag | HW address | Mask | Device
+ * 192.168.1.4 0x1 0x2 00:40:63:CC:1C:8C * eth0
+ */
+ while (fgets(line, sizeof(line), in)) {
+
+ int za, zb, zc, zd, ze, zf, zg, zh, zi, zj;
+ int tmp_flags;
+ char ifname[21];
+
+ rc = sscanf(line,
+ "%d.%d.%d.%d 0x%*x 0x%x %x:%x:%x:%x:%x:%x %*[^ ] %20s\n",
+ &za, &zb, &zc, &zd, &tmp_flags, &ze, &zf, &zg, &zh, &zi,
+ &zj, ifname);
+ if (12 != rc) {
+ snmp_log(LOG_ERR, PROCFILE " data format error (%d!=12)\n", rc);
+ snmp_log(LOG_ERR, " line ==|%s|\n", line);
+ continue;
+ }
+ DEBUGMSGTL(("access:arp:container",
+ "ip addr %d.%d.%d.%d, flags 0x%X, hw addr "
+ "%x:%x:%x:%x:%x:%x, name %s\n",
+ za,zb,zc,zd, tmp_flags, ze,zf,zg,zh,zi,zj, ifname ));
+
+ /*
+ */
+ entry = netsnmp_access_arp_entry_create();
+ if(NULL == entry) {
+ rc = -3;
+ break;
+ }
+
+ /*
+ * look up ifIndex
+ */
+ entry->if_index = netsnmp_access_interface_index_find(ifname);
+ if(0 == entry->if_index) {
+ snmp_log(LOG_ERR,"couldn't find ifIndex for '%s', skipping\n",
+ ifname);
+ netsnmp_access_arp_entry_free(entry);
+ continue;
+ }
+
+ /*
+ * now that we've passed all the possible 'continue', assign
+ * index offset.
+ */
+ entry->ns_arp_index = ++idx_offset;
+
+ /*
+ * parse ip addr
+ */
+ entry->arp_ipaddress[0] = za;
+ entry->arp_ipaddress[1] = zb;
+ entry->arp_ipaddress[2] = zc;
+ entry->arp_ipaddress[3] = zd;
+ entry->arp_ipaddress_len = 4;
+
+ /*
+ * parse hw addr
+ */
+ entry->arp_physaddress[0] = ze;
+ entry->arp_physaddress[1] = zf;
+ entry->arp_physaddress[2] = zg;
+ entry->arp_physaddress[3] = zh;
+ entry->arp_physaddress[4] = zi;
+ entry->arp_physaddress[5] = zj;
+ entry->arp_physaddress_len = 6;
+
+ /*
+ * what can we do with hw? from arp manpage:
+
+ default value of this parameter is ether (i.e. hardware code
+ 0x01 for IEEE 802.3 10Mbps Ethernet). Other values might
+ include network technologies such as ARCnet (arcnet) , PROnet
+ (pronet) , AX.25 (ax25) and NET/ROM (netrom).
+ */
+
+ /*
+ * parse mask
+ */
+ /* xxx-rks: what is mask? how to interpret '*'? */
+
+
+ /*
+ * process type
+ */
+ if(tmp_flags & ATF_PERM)
+ entry->arp_type = INETNETTOMEDIATYPE_STATIC;
+ else
+ entry->arp_type = INETNETTOMEDIATYPE_DYNAMIC;
+
+ /*
+ * process status
+ * if flags are 0, we can't tell the difference between
+ * stale or incomplete.
+ */
+ if(tmp_flags & ATF_COM)
+ entry->arp_state = INETNETTOMEDIASTATE_REACHABLE;
+ else
+ entry->arp_state = INETNETTOMEDIASTATE_UNKNOWN;
+
+ /*
+ * add entry to container
+ */
+ if (CONTAINER_INSERT(container, entry) < 0)
+ {
+ DEBUGMSGTL(("access:arp:container","error with arp_entry: insert into container failed.\n"));
+ netsnmp_access_arp_entry_free(entry);
+ continue;
+ }
+ }
+
+ fclose(in);
+ if( rc < 0 )
+ return rc;
+
+ return idx_offset;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress.h
new file mode 100644
index 0000000000..f1d471abb5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress.h
@@ -0,0 +1,30 @@
+/*
+ * ipaddress data access header
+ *
+ * $Id: ipaddress.h 13271 2005-10-28 15:29:23Z rstory $
+ */
+/**---------------------------------------------------------------------*/
+/*
+ * configure required files
+ *
+ * Notes:
+ *
+ * 1) prefer functionality over platform, where possible. If a method
+ * is available for multiple platforms, test that first. That way
+ * when a new platform is ported, it won't need a new test here.
+ *
+ * 2) don't do detail requirements here. If, for example,
+ * HPUX11 had different reuirements than other HPUX, that should
+ * be handled in the *_hpux.h header file.
+ */
+config_require(ip-mib/data_access/ipaddress_common)
+#if defined( linux )
+config_require(ip-mib/data_access/ipaddress_linux)
+#else
+/*
+ * couldn't determine the correct file!
+ * require a bogus file to generate an error.
+ */
+config_require(ip-mib/data_access/ipaddress-unknown-arch)
+#endif
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_common.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_common.c
new file mode 100644
index 0000000000..396fc96454
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_common.c
@@ -0,0 +1,430 @@
+/*
+ * Ipaddress MIB architecture support
+ *
+ * $Id: ipaddress_common.c 16724 2007-10-14 22:10:09Z magfr $
+ */
+#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/data_access/ipaddress.h>
+#include <net-snmp/data_access/interface.h>
+
+#include "ip-mib/ipAddressTable/ipAddressTable_constants.h"
+
+/**---------------------------------------------------------------------*/
+/*
+ * local static prototypes
+ */
+static int _access_ipaddress_entry_compare_addr(const void *lhs,
+ const void *rhs);
+static void _access_ipaddress_entry_release(netsnmp_ipaddress_entry * entry,
+ void *unused);
+
+/**---------------------------------------------------------------------*/
+/*
+ * external per-architecture functions prototypes
+ *
+ * These shouldn't be called by the general public, so they aren't in
+ * the header file.
+ */
+extern int
+netsnmp_arch_ipaddress_container_load(netsnmp_container* container,
+ u_int load_flags);
+extern int
+netsnmp_arch_ipaddress_entry_init(netsnmp_ipaddress_entry *entry);
+extern int
+netsnmp_arch_ipaddress_entry_copy(netsnmp_ipaddress_entry *lhs,
+ netsnmp_ipaddress_entry *rhs);
+extern void
+netsnmp_arch_ipaddress_entry_cleanup(netsnmp_ipaddress_entry *entry);
+extern int
+netsnmp_arch_ipaddress_create(netsnmp_ipaddress_entry *entry);
+extern int
+netsnmp_arch_ipaddress_delete(netsnmp_ipaddress_entry *entry);
+
+
+/**---------------------------------------------------------------------*/
+/*
+ * container functions
+ */
+/**
+ */
+netsnmp_container *
+netsnmp_access_ipaddress_container_init(u_int flags)
+{
+ netsnmp_container *container1;
+
+ DEBUGMSGTL(("access:ipaddress:container", "init\n"));
+
+ /*
+ * create the containers. one indexed by ifIndex, the other
+ * indexed by ifName.
+ */
+ container1 = netsnmp_container_find("access_ipaddress:table_container");
+ if (NULL == container1) {
+ snmp_log(LOG_ERR, "ipaddress primary container not found\n");
+ return NULL;
+ }
+ container1->container_name = strdup("ia_index");
+
+ if (flags & NETSNMP_ACCESS_IPADDRESS_INIT_ADDL_IDX_BY_ADDR) {
+ netsnmp_container *container2 =
+ netsnmp_container_find("ipaddress_addr:access_ipaddress:table_container");
+ if (NULL == container2) {
+ snmp_log(LOG_ERR, "ipaddress secondary container not found\n");
+ CONTAINER_FREE(container1);
+ return NULL;
+ }
+
+ container2->compare = _access_ipaddress_entry_compare_addr;
+ container2->container_name = strdup("ia_addr");
+
+ netsnmp_container_add_index(container1, container2);
+ }
+
+ return container1;
+}
+
+/**
+ * @retval NULL error
+ * @retval !NULL pointer to container
+ */
+netsnmp_container*
+netsnmp_access_ipaddress_container_load(netsnmp_container* container,
+ u_int load_flags)
+{
+ int rc;
+ u_int container_flags = 0;
+
+ DEBUGMSGTL(("access:ipaddress:container", "load\n"));
+
+ if (NULL == container) {
+ if (load_flags & NETSNMP_ACCESS_IPADDRESS_LOAD_ADDL_IDX_BY_ADDR)
+ container_flags |= NETSNMP_ACCESS_IPADDRESS_INIT_ADDL_IDX_BY_ADDR;
+ container = netsnmp_access_ipaddress_container_init(container_flags);
+ }
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "no container specified/found for access_ipaddress\n");
+ return NULL;
+ }
+
+ rc = netsnmp_arch_ipaddress_container_load(container, load_flags);
+ if (0 != rc) {
+ netsnmp_access_ipaddress_container_free(container,
+ NETSNMP_ACCESS_IPADDRESS_FREE_NOFLAGS);
+ container = NULL;
+ }
+
+ return container;
+}
+
+void
+netsnmp_access_ipaddress_container_free(netsnmp_container *container, u_int free_flags)
+{
+ DEBUGMSGTL(("access:ipaddress:container", "free\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container for netsnmp_access_ipaddress_free\n");
+ return;
+ }
+
+ if(! (free_flags & NETSNMP_ACCESS_IPADDRESS_FREE_DONT_CLEAR)) {
+ /*
+ * free all items.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func*)_access_ipaddress_entry_release,
+ NULL);
+ }
+
+ if(! (free_flags & NETSNMP_ACCESS_IPADDRESS_FREE_KEEP_CONTAINER))
+ CONTAINER_FREE(container);
+}
+
+/**---------------------------------------------------------------------*/
+/*
+ * ipaddress_entry functions
+ */
+/**
+ */
+/**
+ */
+netsnmp_ipaddress_entry *
+netsnmp_access_ipaddress_entry_create(void)
+{
+ netsnmp_ipaddress_entry *entry =
+ SNMP_MALLOC_TYPEDEF(netsnmp_ipaddress_entry);
+ int rc = 0;
+
+ entry->oid_index.len = 1;
+ entry->oid_index.oids = &entry->ns_ia_index;
+
+ /*
+ * set up defaults
+ */
+ entry->ia_type = IPADDRESSTYPE_UNICAST;
+ entry->ia_status = IPADDRESSSTATUSTC_PREFERRED;
+ entry->ia_storagetype = STORAGETYPE_VOLATILE;
+
+ rc = netsnmp_arch_ipaddress_entry_init(entry);
+ if (SNMP_ERR_NOERROR != rc) {
+ DEBUGMSGT(("access:ipaddress:create","error %d in arch init\n", rc));
+ netsnmp_access_ipaddress_entry_free(entry);
+ entry = NULL;
+ }
+
+ return entry;
+}
+
+/**
+ */
+void
+netsnmp_access_ipaddress_entry_free(netsnmp_ipaddress_entry * entry)
+{
+ if (NULL == entry)
+ return;
+
+ if (NULL != entry->arch_data)
+ netsnmp_arch_ipaddress_entry_cleanup(entry);
+
+ free(entry);
+}
+
+/**
+ * update underlying data store (kernel) for entry
+ *
+ * @retval 0 : success
+ * @retval -1 : error
+ */
+int
+netsnmp_access_ipaddress_entry_set(netsnmp_ipaddress_entry * entry)
+{
+ int rc = SNMP_ERR_NOERROR;
+
+ if (NULL == entry) {
+ netsnmp_assert(NULL != entry);
+ return -1;
+ }
+
+ /*
+ * make sure interface and ifIndex match up
+ */
+ if (NULL == netsnmp_access_interface_name_find(entry->if_index)) {
+ DEBUGMSGT(("access:ipaddress:set", "cant find name for index %d\n",
+ entry->if_index));
+ return -1;
+ }
+
+ /*
+ * don't support non-volatile yet
+ */
+ if (STORAGETYPE_VOLATILE != entry->ia_storagetype) {
+ DEBUGMSGT(("access:ipaddress:set",
+ "non-volatile storagetypes unsupported\n"));
+ return -1;
+ }
+
+ /*
+ *
+ */
+ rc = -1;
+ if (entry->flags & NETSNMP_ACCESS_IPADDRESS_CREATE) {
+ rc = netsnmp_arch_ipaddress_create(entry);
+ }
+ else if (entry->flags & NETSNMP_ACCESS_IPADDRESS_CHANGE) {
+ }
+ else if (entry->flags & NETSNMP_ACCESS_IPADDRESS_DELETE) {
+ rc = netsnmp_arch_ipaddress_delete(entry);
+ }
+ else {
+ snmp_log(LOG_ERR,"netsnmp_access_ipaddress_entry_set with no mode\n");
+ netsnmp_assert(!"ipaddress_entry_set == unknown mode"); /* always false */
+ rc = -1;
+ }
+
+ return rc;
+}
+
+/**
+ * update an old ipaddress_entry from a new one
+ *
+ * @note: only mib related items are compared. Internal objects
+ * such as oid_index, ns_ia_index and flags are not compared.
+ *
+ * @retval -1 : error
+ * @retval >=0 : number of fields updated
+ */
+int
+netsnmp_access_ipaddress_entry_update(netsnmp_ipaddress_entry *lhs,
+ netsnmp_ipaddress_entry *rhs)
+{
+ int rc, changed = 0;
+
+ /*
+ * copy arch stuff. we don't care if it changed
+ */
+ rc = netsnmp_arch_ipaddress_entry_copy(lhs,rhs);
+ if (0 != rc) {
+ snmp_log(LOG_ERR,"arch ipaddress copy failed\n");
+ return -1;
+ }
+
+ if (lhs->if_index != rhs->if_index) {
+ ++changed;
+ lhs->if_index = rhs->if_index;
+ }
+
+ if (lhs->ia_storagetype != rhs->ia_storagetype) {
+ ++changed;
+ lhs->ia_storagetype = rhs->ia_storagetype;
+ }
+
+ if (lhs->ia_address_len != rhs->ia_address_len) {
+ changed += 2;
+ lhs->ia_address_len = rhs->ia_address_len;
+ memcpy(lhs->ia_address, rhs->ia_address, rhs->ia_address_len);
+ }
+ else if (memcmp(lhs->ia_address, rhs->ia_address, rhs->ia_address_len) != 0) {
+ ++changed;
+ memcpy(lhs->ia_address, rhs->ia_address, rhs->ia_address_len);
+ }
+
+ if (lhs->ia_type != rhs->ia_type) {
+ ++changed;
+ lhs->ia_type = rhs->ia_type;
+ }
+
+ if (lhs->ia_status != rhs->ia_status) {
+ ++changed;
+ lhs->ia_status = rhs->ia_status;
+ }
+
+ if (lhs->ia_origin != rhs->ia_origin) {
+ ++changed;
+ lhs->ia_origin = rhs->ia_origin;
+ }
+
+ return changed;
+}
+
+/**
+ * copy an ipaddress_entry
+ *
+ * @retval -1 : error
+ * @retval 0 : no error
+ */
+int
+netsnmp_access_ipaddress_entry_copy(netsnmp_ipaddress_entry *lhs,
+ netsnmp_ipaddress_entry *rhs)
+{
+ int rc;
+
+ /*
+ * copy arch stuff. we don't care if it changed
+ */
+ rc = netsnmp_arch_ipaddress_entry_copy(lhs,rhs);
+ if (0 != rc) {
+ snmp_log(LOG_ERR,"arch ipaddress copy failed\n");
+ return -1;
+ }
+
+ lhs->if_index = rhs->if_index;
+ lhs->ia_storagetype = rhs->ia_storagetype;
+ lhs->ia_address_len = rhs->ia_address_len;
+ memcpy(lhs->ia_address, rhs->ia_address, rhs->ia_address_len);
+ lhs->ia_type = rhs->ia_type;
+ lhs->ia_status = rhs->ia_status;
+ lhs->ia_origin = rhs->ia_origin;
+
+ return 0;
+}
+
+/**---------------------------------------------------------------------*/
+/*
+ * Utility routines
+ */
+
+/**
+ * copy the prefix portion of an ip address
+ */
+int
+netsnmp_ipaddress_prefix_copy(u_char *dst, u_char *src, int addr_len, int pfx_len)
+{
+ int bytes = pfx_len / 8;
+ int bits = pfx_len % 8;
+
+ if ((NULL == dst) || (NULL == src) || (0 == pfx_len))
+ return 0;
+
+ memcpy(dst, src, bytes);
+
+ if (bytes < addr_len)
+ memset(&dst[bytes],0x0, addr_len - bytes);
+
+ if (bits) {
+ u_char mask = (0xff << (8-bits));
+
+ dst[bytes] = (src[bytes] & mask);
+ }
+
+ return pfx_len;
+}
+
+
+/**
+ * copy the prefix portion of an ip address
+ *
+ * @param mask network byte order make
+ *
+ * @returns number of prefix bits
+ */
+int
+netsnmp_ipaddress_ipv4_prefix_len(in_addr_t mask)
+{
+ int len = 0;
+
+ while((0xff000000 & mask) == 0xff000000) {
+ len += 8;
+ mask = mask << 8;
+ }
+
+ while(0x80000000 & mask) {
+ ++len;
+ mask = mask << 1;
+ }
+
+ return len;
+}
+
+
+/**
+ */
+void
+_access_ipaddress_entry_release(netsnmp_ipaddress_entry * entry, void *context)
+{
+ netsnmp_access_ipaddress_entry_free(entry);
+}
+
+static int _access_ipaddress_entry_compare_addr(const void *lhs,
+ const void *rhs)
+{
+ const netsnmp_ipaddress_entry *lh = (const netsnmp_ipaddress_entry *)lhs;
+ const netsnmp_ipaddress_entry *rh = (const netsnmp_ipaddress_entry *)rhs;
+
+ netsnmp_assert(NULL != lhs);
+ netsnmp_assert(NULL != rhs);
+
+ /*
+ * compare address length
+ */
+ if (lh->ia_address_len < rh->ia_address_len)
+ return -1;
+ else if (lh->ia_address_len > rh->ia_address_len)
+ return 1;
+
+ /*
+ * length equal, compare address
+ */
+ return memcmp(lh->ia_address, rh->ia_address, lh->ia_address_len);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c
new file mode 100644
index 0000000000..d5e78f06e1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.c
@@ -0,0 +1,596 @@
+/*
+ * Interface MIB architecture support
+ *
+ * $Id: ipaddress_ioctl.c 16778 2008-01-17 00:09:33Z magfr $
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include "mibII/mibII_common.h"
+
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/data_access/ipaddress.h>
+#include <net-snmp/data_access/interface.h>
+
+#include "ip-mib/ipAddressTable/ipAddressTable_constants.h"
+#include "if-mib/data_access/interface_ioctl.h"
+
+#include <errno.h>
+#include <net/if.h>
+#include <sys/ioctl.h>
+
+#include "ipaddress_ioctl.h"
+
+static void _print_flags(short flags);
+
+#define LIST_TOKEN "ioctl_extras"
+
+/*
+ * get extra structure
+ *
+ * @returns the extras structure from the entry
+ */
+_ioctl_extras *
+netsnmp_ioctl_ipaddress_extras_get(netsnmp_ipaddress_entry *entry)
+{
+ if ((NULL == entry) || (NULL == entry->arch_data))
+ return NULL;
+
+ return netsnmp_get_list_data(entry->arch_data, LIST_TOKEN);
+}
+
+/**
+ * initialize ioctl extras
+ *
+ * @returns _ioctl_extras pointer, or NULL on error
+ */
+_ioctl_extras *
+netsnmp_ioctl_ipaddress_entry_init(netsnmp_ipaddress_entry *entry)
+{
+ netsnmp_data_list *node;
+ _ioctl_extras *extras;
+
+ if (NULL == entry)
+ return NULL;
+
+ extras = SNMP_MALLOC_TYPEDEF(_ioctl_extras);
+ if (NULL == extras)
+ return NULL;
+
+ node = netsnmp_create_data_list(LIST_TOKEN, extras, free);
+ if (NULL == node) {
+ free(extras);
+ return NULL;
+ }
+
+ netsnmp_data_list_add_node( &entry->arch_data, node );
+
+ return extras;
+}
+
+/**
+ * cleanup ioctl extras
+ */
+void
+netsnmp_ioctl_ipaddress_entry_cleanup(netsnmp_ipaddress_entry *entry)
+{
+ if (NULL == entry) {
+ netsnmp_assert(NULL != entry);
+ return;
+ }
+
+ if (NULL == entry->arch_data) {
+ netsnmp_assert(NULL != entry->arch_data);
+ return;
+ }
+
+ netsnmp_remove_list_node(&entry->arch_data, LIST_TOKEN);
+}
+
+/**
+ * copy ioctl extras
+ *
+ * @retval 0: success
+ * @retval <0: error
+ */
+int
+netsnmp_ioctl_ipaddress_entry_copy(netsnmp_ipaddress_entry *lhs,
+ netsnmp_ipaddress_entry *rhs)
+{
+ _ioctl_extras *lhs_extras, *rhs_extras;
+ int rc = SNMP_ERR_NOERROR;
+
+ if ((NULL == lhs) || (NULL == rhs)) {
+ netsnmp_assert((NULL != lhs) && (NULL != rhs));
+ return -1;
+ }
+
+ rhs_extras = netsnmp_ioctl_ipaddress_extras_get(rhs);
+ lhs_extras = netsnmp_ioctl_ipaddress_extras_get(lhs);
+ if (NULL == rhs_extras) {
+ if (NULL != lhs_extras)
+ netsnmp_ioctl_ipaddress_entry_cleanup(lhs);
+ }
+ else {
+ if (NULL == lhs_extras)
+ lhs_extras = netsnmp_ioctl_ipaddress_entry_init(lhs);
+
+ if (NULL != lhs_extras)
+ memcpy(lhs_extras, rhs_extras, sizeof(_ioctl_extras));
+ else
+ rc = -1;
+ }
+
+ return rc;
+}
+
+/**
+ * load ipv4 address via ioctl
+ */
+int
+_netsnmp_ioctl_ipaddress_container_load_v4(netsnmp_container *container,
+ int idx_offset)
+{
+ int i, sd, rc = 0, interfaces = 0;
+ struct ifconf ifc;
+ struct ifreq *ifrp;
+ struct sockaddr save_addr;
+ struct sockaddr_in * si;
+ netsnmp_ipaddress_entry *entry;
+ _ioctl_extras *extras;
+
+ if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ snmp_log(LOG_ERR, "could not create socket\n");
+ return -1;
+ }
+
+ interfaces =
+ netsnmp_access_ipaddress_ioctl_get_interface_count(sd, &ifc);
+ if(interfaces < 0) {
+ close(sd);
+ return -2;
+ }
+ netsnmp_assert(NULL != ifc.ifc_buf);
+ DEBUGMSGTL(("access:ipaddress:container", "processing %d interfaces\n", interfaces));
+
+ ifrp = ifc.ifc_req;
+ for(i=0; i < interfaces; ++i, ++ifrp) {
+
+ DEBUGMSGTL(("access:ipaddress:container",
+ " interface %d, %s\n", i, ifrp->ifr_name));
+ /*
+ */
+ entry = netsnmp_access_ipaddress_entry_create();
+ if(NULL == entry) {
+ rc = -3;
+ break;
+ }
+ entry->ns_ia_index = ++idx_offset;
+
+ /*
+ * save if name
+ */
+ extras = netsnmp_ioctl_ipaddress_extras_get(entry);
+ memcpy(extras->name, ifrp->ifr_name, sizeof(extras->name));
+
+ /*
+ * each time we make an ioctl, we need to specify the address, but
+ * it will be overwritten in the call. so we save address here.
+ */
+ save_addr = ifrp->ifr_addr;
+
+ /*
+ * set indexes
+ */
+ netsnmp_assert(AF_INET == ifrp->ifr_addr.sa_family);
+ si = (struct sockaddr_in *) &ifrp->ifr_addr;
+ entry->ia_address_len = sizeof(si->sin_addr.s_addr);
+ memcpy(entry->ia_address, &si->sin_addr.s_addr,
+ entry->ia_address_len);
+
+ /*
+ * get ifindex
+ */
+ {
+ /*
+ * I think that Linux and Solaris both use ':' in the
+ * interface name for aliases. When a new arch is added
+ * that uses some other indicator, a new function, maybe
+ * netsnmp_access_ipaddress_entry_name_alias_check(), will
+ * need to be written.
+ */
+ char *ptr = strchr(ifrp->ifr_name, ':');
+ if (NULL != ptr) {
+ entry->flags |= NETSNMP_ACCESS_IPADDRESS_ISALIAS;
+ *ptr = 0;
+ }
+ }
+ entry->if_index =
+ netsnmp_access_interface_ioctl_ifindex_get(sd, ifrp->ifr_name);
+ if (0 == entry->if_index) {
+ snmp_log(LOG_ERR,"no ifindex found for interface\n");
+ netsnmp_access_ipaddress_entry_free(entry);
+ continue;
+ }
+
+ /* restore the interface name if we modifed it due to unaliasing
+ * above
+ */
+ if (entry->flags | NETSNMP_ACCESS_IPADDRESS_ISALIAS) {
+ memcpy(ifrp->ifr_name, extras->name, sizeof(extras->name));
+ }
+
+ /*
+ * get netmask
+ */
+ ifrp->ifr_addr = save_addr;
+ if (ioctl(sd, SIOCGIFNETMASK, ifrp) < 0) {
+ snmp_log(LOG_ERR,
+ "error getting netmask for interface %d\n", i);
+ netsnmp_access_ipaddress_entry_free(entry);
+ continue;
+ }
+ netsnmp_assert(AF_INET == ifrp->ifr_addr.sa_family);
+ si = (struct sockaddr_in *) &ifrp->ifr_addr;
+ entry->ia_prefix_len =
+ netsnmp_ipaddress_ipv4_prefix_len(si->sin_addr.s_addr);
+
+ /*
+ * get flags
+ */
+ ifrp->ifr_addr = save_addr;
+ if (ioctl(sd, SIOCGIFFLAGS, ifrp) < 0) {
+ snmp_log(LOG_ERR,
+ "error getting if_flags for interface %d\n", i);
+ netsnmp_access_ipaddress_entry_free(entry);
+ continue;
+ }
+ extras->flags = ifrp->ifr_flags;
+
+ entry->ia_type = IPADDRESSTYPE_UNICAST; /* assume unicast? */
+
+ /** entry->ia_prefix_oid ? */
+
+ /*
+ * per the MIB:
+ * In the absence of other information, an IPv4 address is
+ * always preferred(1).
+ */
+ entry->ia_status = IPADDRESSSTATUSTC_PREFERRED;
+
+ /*
+ * can we figure out if an address is from DHCP?
+ * use manual until then...
+ */
+ entry->ia_origin = IPADDRESSORIGINTC_MANUAL;
+
+ DEBUGIF("access:ipaddress:container") {
+ DEBUGMSGT_NC(("access:ipaddress:container",
+ " if %d: addr len %d, index 0x%x\n",
+ i, entry->ia_address_len, entry->if_index));
+ if (4 == entry->ia_address_len)
+ DEBUGMSGT_NC(("access:ipaddress:container", " address %p\n",
+ *((void**)entry->ia_address)));
+ DEBUGMSGT_NC(("access:ipaddress:container", "flags 0x%x\n",
+ extras->flags));
+ _print_flags(extras->flags);
+
+ }
+
+ /*
+ * add entry to container
+ */
+ if (CONTAINER_INSERT(container, entry) < 0)
+ {
+ DEBUGMSGTL(("access:ipaddress:container","error with ipaddress_entry: insert into container failed.\n"));
+ netsnmp_access_ipaddress_entry_free(entry);
+ continue;
+ }
+ }
+
+ /*
+ * clean up
+ */
+ free(ifc.ifc_buf);
+ close(sd);
+
+ /*
+ * return number of interfaces seen
+ */
+ if(rc < 0)
+ return rc;
+
+ return idx_offset;
+}
+
+/**
+ * find unused alias number
+ */
+static int
+_next_alias(const char *if_name)
+{
+ int i, j, k, sd, interfaces = 0, len;
+ struct ifconf ifc;
+ struct ifreq *ifrp;
+ char *alias;
+ int *alias_list;
+
+ if (NULL == if_name)
+ return -1;
+ len = strlen(if_name);
+
+ if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ snmp_log(LOG_ERR, "could not create socket\n");
+ return -1;
+ }
+
+ interfaces =
+ netsnmp_access_ipaddress_ioctl_get_interface_count(sd, &ifc);
+ if(interfaces < 0) {
+ close(sd);
+ return -2;
+ }
+ netsnmp_assert(NULL != ifc.ifc_buf);
+ DEBUGMSGTL(("access:ipaddress:container", "processing %d interfaces\n", interfaces));
+
+ alias_list = malloc(interfaces * sizeof(int));
+ if (NULL == alias_list) {
+ close(sd);
+ return -2;
+ }
+
+ ifrp = ifc.ifc_req;
+ for(i=0,j=0; i < interfaces; ++i, ++ifrp) {
+
+ if (strncmp(ifrp->ifr_name, if_name, len) != 0)
+ continue;
+
+ DEBUGMSGTL(("access:ipaddress:container",
+ " interface %d, %s\n", i, ifrp->ifr_name));
+
+ alias = strchr(ifrp->ifr_name, ':');
+ if (NULL == alias)
+ continue;
+
+ ++alias; /* skip ':' */
+ alias_list[j++] = atoi(alias);
+ }
+
+ /*
+ * clean up
+ */
+ free(ifc.ifc_buf);
+ close(sd);
+
+ /*
+ * return first unused alias
+ */
+ for(i=1; i<=interfaces; ++i) {
+ for(k=0;k<j;++k)
+ if (alias_list[k] == i)
+ break;
+ if (k == j)
+ return i;
+ }
+
+ return interfaces + 1;
+}
+
+
+/**
+ *
+ * @retval 0 : no error
+ * @retval -1 : bad parameter
+ * @retval -2 : couldn't create socket
+ * @retval -3 : ioctl failed
+ */
+int
+_netsnmp_ioctl_ipaddress_set_v4(netsnmp_ipaddress_entry * entry)
+{
+ struct ifreq ifrq;
+ struct sockaddr_in *sin;
+ int rc, fd = -1;
+ _ioctl_extras *extras;
+
+ if (NULL == entry)
+ return -1;
+
+ netsnmp_assert(4 == entry->ia_address_len);
+
+ extras = netsnmp_ioctl_ipaddress_extras_get(entry);
+ if (NULL == extras)
+ return -1;
+
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if(fd < 0) {
+ snmp_log(LOG_ERR,"couldn't create socket\n");
+ return -2;
+ }
+ memset(&ifrq, 0, sizeof(ifrq));
+
+ if ('\0' == extras->name[0]) {
+ const char *name = netsnmp_access_interface_name_find(entry->if_index);
+ int alias_idx;
+
+ if (NULL == name) {
+ DEBUGMSGT(("access:ipaddress:set", "cant find name for index %d\n",
+ entry->if_index));
+ close(fd);
+ return -1;
+ }
+
+ /*
+ * search for unused alias
+ */
+ alias_idx = _next_alias(name);
+ snprintf(ifrq.ifr_name,sizeof(ifrq.ifr_name), "%s:%d",
+ name, alias_idx);
+ }
+ else
+ strncpy(ifrq.ifr_name, extras->name, sizeof(ifrq.ifr_name));
+
+ ifrq.ifr_name[ sizeof(ifrq.ifr_name)-1 ] = 0;
+
+ sin = (struct sockaddr_in*)&ifrq.ifr_addr;
+ sin->sin_family = AF_INET;
+ memcpy(&sin->sin_addr.s_addr, entry->ia_address,
+ entry->ia_address_len);
+
+ rc = ioctl(fd, SIOCSIFADDR, &ifrq);
+ close(fd);
+ if(rc < 0) {
+ snmp_log(LOG_ERR,"error setting address\n");
+ return -3;
+ }
+
+ return 0;
+}
+
+/**
+ *
+ * @retval 0 : no error
+ * @retval -1 : bad parameter
+ * @retval -2 : couldn't create socket
+ * @retval -3 : ioctl failed
+ */
+int
+_netsnmp_ioctl_ipaddress_delete_v4(netsnmp_ipaddress_entry * entry)
+{
+ struct ifreq ifrq;
+ int rc, fd = -1;
+ _ioctl_extras *extras;
+
+ if (NULL == entry)
+ return -1;
+
+ netsnmp_assert(4 == entry->ia_address_len);
+
+ extras = netsnmp_ioctl_ipaddress_extras_get(entry);
+ if (NULL == extras)
+ return -1;
+
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if(fd < 0) {
+ snmp_log(LOG_ERR,"couldn't create socket\n");
+ return -2;
+ }
+
+ memset(&ifrq, 0, sizeof(ifrq));
+
+ strncpy(ifrq.ifr_name, extras->name, sizeof(ifrq.ifr_name));
+ ifrq.ifr_name[ sizeof(ifrq.ifr_name)-1 ] = 0;
+
+ ifrq.ifr_flags = 0;
+
+ rc = ioctl(fd, SIOCSIFFLAGS, &ifrq);
+ close(fd);
+ if(rc < 0) {
+ snmp_log(LOG_ERR,"error deleting address\n");
+ return -3;
+ }
+
+ return 0;
+}
+
+/**
+ * get the interface count and populate the ifc_buf
+ *
+ * Note: the caller assumes responsbility for the ifc->ifc_buf
+ * memory, and should free() it when done.
+ *
+ * @retval -1 : malloc error
+ */
+int
+netsnmp_access_ipaddress_ioctl_get_interface_count(int sd, struct ifconf * ifc)
+{
+ int lastlen = 0, i;
+ struct ifconf ifc_tmp;
+
+ if (NULL == ifc) {
+ memset(&ifc_tmp, 0x0, sizeof(ifc_tmp));
+ ifc = &ifc_tmp;
+ }
+
+ /*
+ * Cope with lots of interfaces and brokenness of ioctl SIOCGIFCONF
+ * on some platforms; see W. R. Stevens, ``Unix Network Programming
+ * Volume I'', p.435.
+ */
+
+ for (i = 8;; i *= 2) {
+ ifc->ifc_buf = calloc(i, sizeof(struct ifreq));
+ if (NULL == ifc->ifc_buf) {
+ snmp_log(LOG_ERR, "could not allocate memory for %d interfaces\n",
+ i);
+ return -1;
+ }
+ ifc->ifc_len = i * sizeof(struct ifreq);
+
+ if (ioctl(sd, SIOCGIFCONF, (char *) ifc) < 0) {
+ if (errno != EINVAL || lastlen != 0) {
+ /*
+ * Something has gone genuinely wrong.
+ */
+ snmp_log(LOG_ERR, "bad rc from ioctl, errno %d", errno);
+ SNMP_FREE(ifc->ifc_buf);
+ break;
+ }
+ /*
+ * Otherwise, it could just be that the buffer is too small.
+ */
+ } else {
+ if (ifc->ifc_len == lastlen) {
+ /*
+ * The length is the same as the last time; we're done.
+ */
+ break;
+ }
+ lastlen = ifc->ifc_len;
+ }
+ free(ifc->ifc_buf); /* no SNMP_FREE, getting ready to reassign */
+ }
+
+ if (ifc == &ifc_tmp)
+ free(ifc_tmp.ifc_buf);
+
+ return ifc->ifc_len / sizeof(struct ifreq);
+}
+
+/**
+ */
+static void
+_print_flags(short flags)
+{
+/** Standard interface flags. */
+ struct {
+ short flag;
+ const char *name;
+ } map[] = {
+ { IFF_UP, "interface is up"},
+ { IFF_BROADCAST, "broadcast address valid"},
+ { IFF_DEBUG, "turn on debugging"},
+ { IFF_LOOPBACK, "is a loopback net"},
+ { IFF_POINTOPOINT, "interface is has p-p link"},
+ { IFF_NOTRAILERS, "avoid use of trailers"},
+ { IFF_RUNNING, "resources allocated"},
+ { IFF_NOARP, "no ARP protocol"},
+ { IFF_PROMISC, "receive all packets"},
+ { IFF_ALLMULTI, "receive all multicast packets"},
+ { IFF_MASTER, "master of a load balancer"},
+ { IFF_SLAVE, "slave of a load balancer"},
+ { IFF_MULTICAST, "Supports multicast"},
+ { IFF_PORTSEL, "can set media type"},
+ { IFF_AUTOMEDIA, "auto media select active"},
+ };
+ short unknown = flags;
+ int i;
+
+ for(i = 0; i < sizeof(map)/sizeof(map[0]); ++i)
+ if(flags & map[i].flag) {
+ DEBUGMSGT_NC(("access:ipaddress:container"," %s\n", map[i].name));
+ unknown &= ~map[i].flag;
+ }
+
+ if(unknown)
+ DEBUGMSGT_NC(("access:ipaddress:container"," unknown 0x%x\n", unknown));
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.h
new file mode 100644
index 0000000000..a7a0ea2a39
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_ioctl.h
@@ -0,0 +1,44 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int
+_netsnmp_ioctl_ipaddress_container_load_v4(netsnmp_container *container,
+ int idx_offset);
+int
+_netsnmp_ioctl_ipaddress_set_v4(netsnmp_ipaddress_entry * entry);
+int
+_netsnmp_ioctl_ipaddress_remove_v4(netsnmp_ipaddress_entry * entry);
+
+int
+netsnmp_access_ipaddress_ioctl_get_interface_count(int sd, struct ifconf * ifc);
+
+
+/*
+ * struct ioctl for arch_data
+ */
+typedef struct _ioctl_extras {
+ u_int flags;
+ u_char name[IFNAMSIZ];
+} _ioctl_extras;
+
+
+
+_ioctl_extras *
+netsnmp_ioctl_ipaddress_entry_init(netsnmp_ipaddress_entry *entry);
+void
+netsnmp_ioctl_ipaddress_entry_cleanup(netsnmp_ipaddress_entry *entry);
+int
+netsnmp_ioctl_ipaddress_entry_copy(netsnmp_ipaddress_entry *lhs,
+ netsnmp_ipaddress_entry *rhs);
+
+_ioctl_extras *
+netsnmp_ioctl_ipaddress_extras_get(netsnmp_ipaddress_entry *entry);
+
+int
+_netsnmp_ioctl_ipaddress_delete_v4(netsnmp_ipaddress_entry * entry);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_linux.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_linux.c
new file mode 100644
index 0000000000..8cb06a250f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_linux.c
@@ -0,0 +1,338 @@
+/*
+ * Interface MIB architecture support
+ *
+ * $Id: ipaddress_linux.c 17155 2008-08-13 13:02:12Z jsafranek $
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include "mibII/mibII_common.h"
+
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/data_access/ipaddress.h>
+#include <net-snmp/data_access/interface.h>
+
+#include "ip-mib/ipAddressTable/ipAddressTable_constants.h"
+
+#include <errno.h>
+#include <sys/ioctl.h>
+
+#if defined (NETSNMP_ENABLE_IPV6)
+#include <linux/types.h>
+#include <asm/types.h>
+#include <linux/rtnetlink.h>
+#endif
+
+#include "ipaddress_ioctl.h"
+
+int _load_v6(netsnmp_container *container, int idx_offset);
+
+/*
+ * initialize arch specific storage
+ *
+ * @retval 0: success
+ * @retval <0: error
+ */
+int
+netsnmp_arch_ipaddress_entry_init(netsnmp_ipaddress_entry *entry)
+{
+ /*
+ * init ipv4 stuff
+ */
+ if (NULL == netsnmp_ioctl_ipaddress_entry_init(entry))
+ return -1;
+
+ /*
+ * init ipv6 stuff
+ * so far, we can just share the ipv4 stuff, so nothing to do
+ */
+
+ return 0;
+}
+
+/*
+ * cleanup arch specific storage
+ */
+void
+netsnmp_arch_ipaddress_entry_cleanup(netsnmp_ipaddress_entry *entry)
+{
+ /*
+ * cleanup ipv4 stuff
+ */
+ netsnmp_ioctl_ipaddress_entry_cleanup(entry);
+
+ /*
+ * cleanup ipv6 stuff
+ * so far, we can just share the ipv4 stuff, so nothing to do
+ */
+}
+
+/*
+ * copy arch specific storage
+ */
+int
+netsnmp_arch_ipaddress_entry_copy(netsnmp_ipaddress_entry *lhs,
+ netsnmp_ipaddress_entry *rhs)
+{
+ int rc;
+
+ /*
+ * copy ipv4 stuff
+ */
+ rc = netsnmp_ioctl_ipaddress_entry_copy(lhs, rhs);
+ if (rc)
+ return rc;
+
+ /*
+ * copy ipv6 stuff
+ * so far, we can just share the ipv4 stuff, so nothing to do
+ */
+
+ return rc;
+}
+
+/*
+ * create a new entry
+ */
+int
+netsnmp_arch_ipaddress_create(netsnmp_ipaddress_entry *entry)
+{
+ if (NULL == entry)
+ return -1;
+
+ if (4 != entry->ia_address_len) {
+ DEBUGMSGT(("access:ipaddress:create", "only ipv4 supported\n"));
+ return -2;
+ }
+
+ return _netsnmp_ioctl_ipaddress_set_v4(entry);
+}
+
+/*
+ * create a new entry
+ */
+int
+netsnmp_arch_ipaddress_delete(netsnmp_ipaddress_entry *entry)
+{
+ if (NULL == entry)
+ return -1;
+
+ if (4 != entry->ia_address_len) {
+ DEBUGMSGT(("access:ipaddress:create", "only ipv4 supported\n"));
+ return -2;
+ }
+
+ return _netsnmp_ioctl_ipaddress_delete_v4(entry);
+}
+
+/**
+ *
+ * @retval 0 no errors
+ * @retval !0 errors
+ */
+int
+netsnmp_arch_ipaddress_container_load(netsnmp_container *container,
+ u_int load_flags)
+{
+ int rc = 0, idx_offset = 0;
+
+ if (0 == (load_flags & NETSNMP_ACCESS_IPADDRESS_LOAD_IPV6_ONLY)) {
+ rc = _netsnmp_ioctl_ipaddress_container_load_v4(container, idx_offset);
+ if(rc < 0) {
+ u_int flags = NETSNMP_ACCESS_IPADDRESS_FREE_KEEP_CONTAINER;
+ netsnmp_access_ipaddress_container_free(container, flags);
+ }
+ }
+
+#if defined (NETSNMP_ENABLE_IPV6)
+
+ if (0 == (load_flags & NETSNMP_ACCESS_IPADDRESS_LOAD_IPV4_ONLY)) {
+ if (rc < 0)
+ rc = 0;
+
+ idx_offset = rc;
+
+ /*
+ * load ipv6, ignoring errors if file not found
+ */
+ rc = _load_v6(container, idx_offset);
+ if (-2 == rc)
+ rc = 0;
+ else if(rc < 0) {
+ u_int flags = NETSNMP_ACCESS_IPADDRESS_FREE_KEEP_CONTAINER;
+ netsnmp_access_ipaddress_container_free(container, flags);
+ }
+ }
+#endif
+
+ /*
+ * return no errors (0) if we found any interfaces
+ */
+ if(rc > 0)
+ rc = 0;
+
+ return rc;
+}
+
+#if defined (NETSNMP_ENABLE_IPV6)
+/**
+ */
+int
+_load_v6(netsnmp_container *container, int idx_offset)
+{
+ FILE *in;
+ char line[80], addr[40];
+ char if_name[IFNAMSIZ+1];/* +1 for '\0' because of the ugly sscanf below */
+ u_char *buf;
+ int if_index, pfx_len, scope, flags, rc = 0;
+ size_t in_len, out_len;
+ netsnmp_ipaddress_entry *entry;
+ _ioctl_extras *extras;
+ static int log_open_err = 1;
+
+ netsnmp_assert(NULL != container);
+
+#define PROCFILE "/proc/net/if_inet6"
+ if (!(in = fopen(PROCFILE, "r"))) {
+ if (1 == log_open_err) {
+ snmp_log(LOG_ERR,"could not open " PROCFILE "\n");
+ log_open_err = 0;
+ }
+ return -2;
+ }
+ /*
+ * if we hadn't been able to open file and turned of err logging,
+ * turn it back on now that we opened the file.
+ */
+ if (0 == log_open_err)
+ log_open_err = 1;
+
+ /*
+ * address index prefix_len scope status if_name
+ */
+ while (fgets(line, sizeof(line), in)) {
+ /*
+ * fe800000000000000200e8fffe5b5c93 05 40 20 80 eth0
+ * A D P S F I
+ * A: address
+ * D: device number
+ * P: prefix len
+ * S: scope (see include/net/ipv6.h, net/ipv6/addrconf.c)
+ * F: flags (see include/linux/rtnetlink.h, net/ipv6/addrconf.c)
+ * I: interface
+ */
+ rc = sscanf(line, "%39s %04x %02x %02x %02x %" SNMP_MACRO_VAL_TO_STR(IFNAMSIZ) "s\n",
+ addr, &if_index, &pfx_len, &scope, &flags, if_name);
+ if( 6 != rc ) {
+ snmp_log(LOG_ERR, PROCFILE " data format error (%d!=6), line ==|%s|\n",
+ rc, line);
+ continue;
+ }
+ DEBUGMSGTL(("access:ipaddress:container",
+ "addr %s, index %d, pfx %d, scope %d, flags 0x%X, name %s\n",
+ addr, if_index, pfx_len, scope, flags, if_name));
+ /*
+ */
+ entry = netsnmp_access_ipaddress_entry_create();
+ if(NULL == entry) {
+ rc = -3;
+ break;
+ }
+
+ in_len = entry->ia_address_len = sizeof(entry->ia_address);
+ netsnmp_assert(16 == in_len);
+ out_len = 0;
+ buf = entry->ia_address;
+ if(1 != netsnmp_hex_to_binary(&buf, &in_len,
+ &out_len, 0, addr, ":")) {
+ snmp_log(LOG_ERR,"error parsing '%s', skipping\n",
+ entry->ia_address);
+ netsnmp_access_ipaddress_entry_free(entry);
+ continue;
+ }
+ netsnmp_assert(16 == out_len);
+ entry->ia_address_len = out_len;
+
+ entry->ns_ia_index = ++idx_offset;
+
+ /*
+ * save if name
+ */
+ extras = netsnmp_ioctl_ipaddress_extras_get(entry);
+ memcpy(extras->name, if_name, sizeof(extras->name));
+ extras->flags = flags;
+
+ /*
+ * yyy-rks: optimization: create a socket outside the loop and use
+ * netsnmp_access_interface_ioctl_ifindex_get() here, since
+ * netsnmp_access_interface_index_find will open/close a socket
+ * every time it is called.
+ */
+ entry->if_index = netsnmp_access_interface_index_find(if_name);
+
+ /*
+ #define IPADDRESSSTATUSTC_PREFERRED 1
+ #define IPADDRESSSTATUSTC_DEPRECATED 2
+ #define IPADDRESSSTATUSTC_INVALID 3
+ #define IPADDRESSSTATUSTC_INACCESSIBLE 4
+ #define IPADDRESSSTATUSTC_UNKNOWN 5
+ #define IPADDRESSSTATUSTC_TENTATIVE 6
+ #define IPADDRESSSTATUSTC_DUPLICATE 7
+ */
+ if(flags & IFA_F_PERMANENT)
+ entry->ia_status = IPADDRESSSTATUSTC_PREFERRED; /* ?? */
+ else if(flags & IFA_F_DEPRECATED)
+ entry->ia_status = IPADDRESSSTATUSTC_DEPRECATED;
+ else if(flags & IFA_F_TENTATIVE)
+ entry->ia_status = IPADDRESSSTATUSTC_TENTATIVE;
+ else {
+ entry->ia_status = IPADDRESSSTATUSTC_UNKNOWN;
+ DEBUGMSGTL(("access:ipaddress:ipv6",
+ "unknown flags 0x%x\n", flags));
+ }
+
+ /*
+ * if it's not multi, it must be uni.
+ * (an ipv6 address is never broadcast)
+ */
+ if (IN6_IS_ADDR_MULTICAST(entry->ia_address))
+ entry->ia_type = IPADDRESSTYPE_ANYCAST;
+ else
+ entry->ia_type = IPADDRESSTYPE_UNICAST;
+
+
+ entry->ia_prefix_len = pfx_len;
+
+ /*
+ * can we figure out if an address is from DHCP?
+ * use manual until then...
+ *
+ *#define IPADDRESSORIGINTC_OTHER 1
+ *#define IPADDRESSORIGINTC_MANUAL 2
+ *#define IPADDRESSORIGINTC_DHCP 4
+ *#define IPADDRESSORIGINTC_LINKLAYER 5
+ *#define IPADDRESSORIGINTC_RANDOM 6
+ *
+ * are 'local' address assigned by link layer??
+ */
+ if (IN6_IS_ADDR_LINKLOCAL(entry->ia_address) ||
+ IN6_IS_ADDR_SITELOCAL(entry->ia_address))
+ entry->ia_origin = IPADDRESSORIGINTC_LINKLAYER;
+ else
+ entry->ia_origin = IPADDRESSORIGINTC_MANUAL;
+
+ /* xxx-rks: what can we do with scope? */
+
+ /*
+ * add entry to container
+ */
+ CONTAINER_INSERT(container, entry);
+ }
+
+ fclose(in);
+
+ if(rc<0)
+ return rc;
+
+ return idx_offset;
+}
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_linux.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_linux.h
new file mode 100644
index 0000000000..ab46955cbf
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/ipaddress_linux.h
@@ -0,0 +1,22 @@
+/*
+ * ipaddress data access header
+ *
+ * $Id: ipaddress_linux.h 13371 2005-11-02 17:07:28Z rstory $
+ */
+/**---------------------------------------------------------------------*/
+/*
+ * configure required files
+ *
+ * Notes:
+ *
+ * 1) prefer functionality over platform, where possible. If a method
+ * is available for multiple platforms, test that first. That way
+ * when a new platform is ported, it won't need a new test here.
+ *
+ * 2) don't do detail requirements here. If, for example,
+ * HPUX11 had different reuirements than other HPUX, that should
+ * be handled in the *_hpux.h header file.
+ */
+config_require(ip-mib/data_access/ipaddress_linux)
+config_require(ip-mib/data_access/ipaddress_ioctl)
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/scalars_common.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/scalars_common.h
new file mode 100644
index 0000000000..0404bd5f3c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/scalars_common.h
@@ -0,0 +1,29 @@
+/*
+ * ip scalar data access header
+ *
+ * $Id: scalars_common.h 13271 2005-10-28 15:29:23Z rstory $
+ */
+/**---------------------------------------------------------------------*/
+/*
+ * configure required files
+ *
+ * Notes:
+ *
+ * 1) prefer functionality over platform, where possible. If a method
+ * is available for multiple platforms, test that first. That way
+ * when a new platform is ported, it won't need a new test here.
+ *
+ * 2) don't do detail requirements here. If, for example,
+ * HPUX11 had different reuirements than other HPUX, that should
+ * be handled in the *_hpux.h header file.
+ */
+#if defined( linux )
+config_require(ip-mib/data_access/scalars_linux)
+#else
+/*
+ * couldn't determine the correct file!
+ * require a bogus file to generate an error.
+ */
+config_require(ip-mib/data_access/scalars-unknown-arch)
+#endif
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/scalars_linux.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/scalars_linux.c
new file mode 100644
index 0000000000..aedcd8b1f1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/scalars_linux.c
@@ -0,0 +1,79 @@
+/*
+ * Arp MIB architecture support
+ *
+ * $Id: scalars_linux.c 16965 2008-05-25 07:14:16Z magfr $
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+
+#include <net-snmp/data_access/ip_scalars.h>
+
+static const char ipfw_name[] = "/proc/sys/net/ipv6/conf/all/forwarding";
+
+int
+netsnmp_arch_ip_scalars_ipv6IpForwarding_get(u_long *value)
+{
+ FILE *filep;
+ int rc;
+
+ if (NULL == value)
+ return -1;
+
+
+ filep = fopen(ipfw_name, "r");
+ if (NULL == filep) {
+ DEBUGMSGTL(("access:ipv6IpForwarding", "could not open %s\n",
+ ipfw_name));
+ return -2;
+ }
+
+ rc = fscanf(filep, "%ld", value);
+ fclose(filep);
+ if (1 != rc) {
+ DEBUGMSGTL(("access:ipv6IpForwarding", "could not read %s\n",
+ ipfw_name));
+ return -3;
+ }
+
+ if ((0 != *value) && (1 != *value)) {
+ DEBUGMSGTL(("access:ipv6IpForwarding", "unexpected value %ld in %s\n",
+ *value, ipfw_name));
+ return -4;
+ }
+
+ return 0;
+}
+
+int
+netsnmp_arch_ip_scalars_ipv6IpForwarding_set(u_long value)
+{
+ FILE *filep;
+ int rc;
+
+ if (1 == value)
+ ;
+ else if (2 == value)
+ value = 0;
+ else {
+ DEBUGMSGTL(("access:ipv6IpForwarding",
+ "bad value %ld for ipv6IpForwarding\n", value));
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ filep = fopen(ipfw_name, "w");
+ if (NULL == filep) {
+ DEBUGMSGTL(("access:ipv6IpForwarding", "could not open %s\n",
+ ipfw_name));
+ return SNMP_ERR_RESOURCEUNAVAILABLE;
+ }
+
+ rc = fprintf(filep, "%ld", value);
+ fclose(filep);
+ if (1 != rc) {
+ DEBUGMSGTL(("access:ipv6IpForwarding", "could not write %s\n",
+ ipfw_name));
+ return SNMP_ERR_GENERR;
+ }
+
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/systemstats.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/systemstats.h
new file mode 100644
index 0000000000..84ca0c89f8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/systemstats.h
@@ -0,0 +1,30 @@
+/*
+ * systemstats data access header
+ *
+ * $Id: systemstats.h 13271 2005-10-28 15:29:23Z rstory $
+ */
+/**---------------------------------------------------------------------*/
+/*
+ * configure required files
+ *
+ * Notes:
+ *
+ * 1) prefer functionality over platform, where possible. If a method
+ * is available for multiple platforms, test that first. That way
+ * when a new platform is ported, it won't need a new test here.
+ *
+ * 2) don't do detail requirements here. If, for example,
+ * HPUX11 had different reuirements than other HPUX, that should
+ * be handled in the *_hpux.h header file.
+ */
+config_require(ip-mib/data_access/systemstats_common)
+#if defined( linux )
+config_require(ip-mib/data_access/systemstats_linux)
+#else
+/*
+ * couldn't determine the correct file!
+ * require a bogus file to generate an error.
+ */
+config_require(ip-mib/data_access/systemstats-unknown-arch);
+#endif
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/systemstats_common.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/systemstats_common.c
new file mode 100644
index 0000000000..83e1867442
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/systemstats_common.c
@@ -0,0 +1,389 @@
+/*
+ * Systemstats MIB architecture support
+ *
+ * $Id: systemstats_common.c 11913 2005-02-08 21:58:36Z nba $
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include "ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h"
+
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/data_access/ipstats.h>
+#include <net-snmp/data_access/systemstats.h>
+
+/**---------------------------------------------------------------------*/
+/*
+ * local static vars
+ */
+static int need_wrap_check = -1;
+
+/*
+ * local static prototypes
+ */
+static void _entry_release(netsnmp_systemstats_entry * entry, void *unused);
+
+/**---------------------------------------------------------------------*/
+/*
+ * external per-architecture functions prototypes
+ *
+ * These shouldn't be called by the general public, so they aren't in
+ * the header file.
+ */
+extern int
+netsnmp_access_systemstats_container_arch_load(netsnmp_container* container,
+ u_int load_flags);
+extern void
+netsnmp_access_systemstats_arch_init(void);
+
+/**---------------------------------------------------------------------*/
+/*
+ * initialization
+ */
+void
+netsnmp_access_systemstats_init(void)
+{
+ netsnmp_container * ifcontainer;
+
+ netsnmp_access_systemstats_arch_init();
+
+ /*
+ * load once to set up ifIndexes
+ */
+ ifcontainer = netsnmp_access_systemstats_container_load(NULL, 0);
+ if(NULL != ifcontainer)
+ netsnmp_access_systemstats_container_free(ifcontainer, 0);
+
+}
+
+/**---------------------------------------------------------------------*/
+/*
+ * container functions
+ */
+/**
+ * initialize systemstats container
+ */
+netsnmp_container *
+netsnmp_access_systemstats_container_init(u_int flags)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("access:systemstats:container", "init\n"));
+
+ /*
+ * create the containers. one indexed by ifIndex, the other
+ * indexed by ifName.
+ */
+ container = netsnmp_container_find("access_systemstats:table_container");
+ if (NULL == container)
+ return NULL;
+
+ return container;
+}
+
+/**
+ * load systemstats information in specified container
+ *
+ * @param container empty container, or NULL to have one created for you
+ * @param load_flags flags to modify behaviour.
+ *
+ * @retval NULL error
+ * @retval !NULL pointer to container
+ */
+netsnmp_container*
+netsnmp_access_systemstats_container_load(netsnmp_container* container, u_int load_flags)
+{
+ int rc;
+
+ DEBUGMSGTL(("access:systemstats:container", "load\n"));
+
+ if (NULL == container)
+ container = netsnmp_access_systemstats_container_init(load_flags);
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "no container specified/found for access_systemstats\n");
+ return NULL;
+ }
+
+ rc = netsnmp_access_systemstats_container_arch_load(container, load_flags);
+ if (0 != rc) {
+ netsnmp_access_systemstats_container_free(container,
+ NETSNMP_ACCESS_SYSTEMSTATS_FREE_NOFLAGS);
+ container = NULL;
+ }
+
+ return container;
+}
+
+void
+netsnmp_access_systemstats_container_free(netsnmp_container *container, u_int free_flags)
+{
+ DEBUGMSGTL(("access:systemstats:container", "free\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container for netsnmp_access_systemstats_free\n");
+ return;
+ }
+
+ if(! (free_flags & NETSNMP_ACCESS_SYSTEMSTATS_FREE_DONT_CLEAR)) {
+ /*
+ * free all items.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func*)_entry_release,
+ NULL);
+ }
+
+ CONTAINER_FREE(container);
+}
+
+/**---------------------------------------------------------------------*/
+/*
+ * entry functions
+ */
+/**
+ */
+netsnmp_systemstats_entry *
+netsnmp_access_systemstats_entry_get_by_index(netsnmp_container *container, oid index)
+{
+ netsnmp_index tmp;
+
+ DEBUGMSGTL(("access:systemstats:entry", "by_index\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR,
+ "invalid container for netsnmp_access_systemstats_entry_get_by_index\n");
+ return NULL;
+ }
+
+ tmp.len = 1;
+ tmp.oids = &index;
+
+ return (netsnmp_systemstats_entry *) CONTAINER_FIND(container, &tmp);
+}
+
+/**
+ */
+netsnmp_systemstats_entry *
+netsnmp_access_systemstats_entry_create(int version)
+{
+ netsnmp_systemstats_entry *entry =
+ SNMP_MALLOC_TYPEDEF(netsnmp_systemstats_entry);
+
+ DEBUGMSGTL(("access:systemstats:entry", "create\n"));
+
+ if(NULL == entry)
+ return NULL;
+
+ entry->ns_ip_version = version;
+
+ entry->oid_index.len = 1;
+ entry->oid_index.oids = (oid *) & entry->ns_ip_version;
+
+ return entry;
+}
+
+/**
+ */
+void
+netsnmp_access_systemstats_entry_free(netsnmp_systemstats_entry * entry)
+{
+ DEBUGMSGTL(("access:systemstats:entry", "free\n"));
+
+ if (NULL == entry)
+ return;
+
+ /*
+ * SNMP_FREE not needed, for any of these,
+ * since the whole entry is about to be freed
+ */
+
+ if (NULL != entry->old_stats)
+ free(entry->old_stats);
+
+ free(entry);
+}
+
+
+/**---------------------------------------------------------------------*/
+/*
+ * Utility routines
+ */
+
+/**
+ * \internal
+ */
+static void
+_entry_release(netsnmp_systemstats_entry * entry, void *context)
+{
+ netsnmp_access_systemstats_entry_free(entry);
+}
+
+/**
+ * update entry stats (checking for counter wrap)
+ *
+ * @retval 0 : success
+ * @retval <0 : error
+ */
+int
+netsnmp_access_systemstats_entry_update_stats(netsnmp_systemstats_entry * prev_vals,
+ netsnmp_systemstats_entry * new_vals)
+{
+ DEBUGMSGTL(("access:systemstats", "check_wrap\n"));
+
+ /*
+ * sanity checks
+ */
+ if ((NULL == prev_vals) || (NULL == new_vals) ||
+ (prev_vals->ns_ip_version != new_vals->ns_ip_version))
+ return -1;
+
+ /*
+ * if we've determined that we have 64 bit counters, just copy them.
+ */
+ if (0 == need_wrap_check) {
+ memcpy(&prev_vals->stats, &new_vals->stats, sizeof(new_vals->stats));
+ return 0;
+ }
+
+ if (NULL == prev_vals->old_stats) {
+ /*
+ * if we don't have old stats, they can't have wrapped, so just copy
+ */
+ prev_vals->old_stats = SNMP_MALLOC_TYPEDEF(netsnmp_ipstats);
+ if (NULL == prev_vals->old_stats) {
+ return -2;
+ }
+ }
+ else {
+ /*
+ * update straight 32 bit counters
+ */
+ prev_vals->stats.InHdrErrors = new_vals->stats.InHdrErrors;
+ prev_vals->stats.InNoRoutes = new_vals->stats.InNoRoutes;
+ prev_vals->stats.InAddrErrors = new_vals->stats.InAddrErrors;
+ prev_vals->stats.InUnknownProtos = new_vals->stats.InUnknownProtos;
+ prev_vals->stats.InTruncatedPkts = new_vals->stats.InTruncatedPkts;
+ prev_vals->stats.ReasmReqds = new_vals->stats.InTruncatedPkts;
+ prev_vals->stats.ReasmOKs = new_vals->stats.ReasmOKs;
+ prev_vals->stats.ReasmFails = new_vals->stats.ReasmFails;
+ prev_vals->stats.InDiscards = new_vals->stats.InDiscards;
+ prev_vals->stats.OutNoRoutes = new_vals->stats.OutNoRoutes;
+ prev_vals->stats.OutDiscards = new_vals->stats.OutDiscards;
+ prev_vals->stats.OutFragReqds = new_vals->stats.OutFragReqds;
+ prev_vals->stats.OutFragOKs = new_vals->stats.OutFragOKs;
+ prev_vals->stats.OutFragFails = new_vals->stats.OutFragFails;
+ prev_vals->stats.OutFragCreates = new_vals->stats.OutFragCreates;
+
+ /*
+ * update 64bit counters
+ */
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCInReceives,
+ &new_vals->stats.HCInReceives,
+ &prev_vals->old_stats->HCInReceives,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCInOctets,
+ &new_vals->stats.HCInOctets,
+ &prev_vals->old_stats->HCInOctets,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCInForwDatagrams,
+ &new_vals->stats.HCInForwDatagrams,
+ &prev_vals->old_stats->HCInForwDatagrams,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCInDelivers,
+ &new_vals->stats.HCInDelivers,
+ &prev_vals->old_stats->HCInDelivers,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutRequests,
+ &new_vals->stats.HCOutRequests,
+ &prev_vals->old_stats->HCOutRequests,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutForwDatagrams,
+ &new_vals->stats.HCOutForwDatagrams,
+ &prev_vals->old_stats->HCOutForwDatagrams,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutTransmits,
+ &new_vals->stats.HCOutTransmits,
+ &prev_vals->old_stats->HCOutTransmits,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutOctets,
+ &new_vals->stats.HCOutOctets,
+ &prev_vals->old_stats->HCOutOctets,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCInMcastPkts,
+ &new_vals->stats.HCInMcastPkts,
+ &prev_vals->old_stats->HCInMcastPkts,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCInMcastOctets,
+ &new_vals->stats.HCInMcastOctets,
+ &prev_vals->old_stats->HCInMcastOctets,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutMcastPkts,
+ &new_vals->stats.HCOutMcastPkts,
+ &prev_vals->old_stats->HCOutMcastPkts,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutMcastOctets,
+ &new_vals->stats.HCOutMcastOctets,
+ &prev_vals->old_stats->HCOutMcastOctets,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCInBcastPkts,
+ &new_vals->stats.HCInBcastPkts,
+ &prev_vals->old_stats->HCInBcastPkts,
+ &need_wrap_check);
+ netsnmp_c64_check32_and_update(&prev_vals->stats.HCOutBcastPkts,
+ &new_vals->stats.HCOutBcastPkts,
+ &prev_vals->old_stats->HCOutBcastPkts,
+ &need_wrap_check);
+ }
+
+ /*
+ * if we've decided we no longer need to check wraps, free old stats
+ */
+ if (0 == need_wrap_check) {
+ SNMP_FREE(prev_vals->old_stats);
+ }
+
+ /*
+ * update old stats from new stats.
+ * careful - old_stats is a pointer to stats...
+ */
+ memcpy(prev_vals->old_stats, &new_vals->stats, sizeof(new_vals->stats));
+
+ return 0;
+}
+
+/**
+ * update systemstats entry data (checking for counter wraps)
+ *
+ * Given an existing entry, update it with the new values from another
+ * entry.
+ *
+ * @retval -2 : malloc failed
+ * @retval -1 : systemstatss not the same
+ * @retval 0 : no error
+ */
+int
+netsnmp_access_systemstats_entry_update(netsnmp_systemstats_entry * lhs,
+ netsnmp_systemstats_entry * rhs)
+{
+ DEBUGMSGTL(("access:systemstats", "copy\n"));
+
+ if ((NULL == lhs) || (NULL == rhs) ||
+ (lhs->ns_ip_version != rhs->ns_ip_version))
+ return -1;
+
+ /*
+ * update stats
+ */
+ netsnmp_access_systemstats_entry_update_stats(lhs, rhs);
+
+ /*
+ * update other data
+ */
+ lhs->flags = rhs->flags;
+
+ return 0;
+}
+
+/**---------------------------------------------------------------------*/
+/*
+ *
+ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/systemstats_linux.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/systemstats_linux.c
new file mode 100644
index 0000000000..947afe805f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/data_access/systemstats_linux.c
@@ -0,0 +1,376 @@
+/*
+ * Interface MIB architecture support
+ *
+ * $Id: systemstats_linux.c 15220 2006-09-15 00:48:50Z tanders $
+ */
+#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/data_access/ipstats.h>
+#include <net-snmp/data_access/systemstats.h>
+
+static int _systemstats_v4(netsnmp_container* container, u_int load_flags);
+#if defined (NETSNMP_ENABLE_IPV6)
+static int _systemstats_v6(netsnmp_container* container, u_int load_flags);
+#endif
+
+
+void
+netsnmp_access_systemstats_arch_init(void)
+{
+ /*
+ * nothing to do
+ */
+}
+
+/*
+ /proc/net/snmp
+
+ Ip: Forwarding DefaultTTL InReceives InHdrErrors InAddrErrors ForwDatagrams InUnknownProtos InDiscards InDelivers OutRequests OutDiscards OutNoRoutes ReasmTimeout ReasmReqds ReasmOKs ReasmFails FragOKs FragFails FragCreates
+ Ip: 2 64 7083534 0 0 0 0 0 6860233 6548963 0 0 1 286623 63322 1 259920 0 0
+
+ Icmp: InMsgs InErrors InDestUnreachs InTimeExcds InParmProbs InSrcQuenchs InRedirects InEchos InEchoReps InTimestamps InTimestampReps InAddrMasks InAddrMaskReps OutMsgs OutErrors OutDestUnreachs OutTimeExcds OutParmProbs OutSrcQuenchs OutRedirects OutEchos OutEchoReps OutTimestamps OutTimestampReps OutAddrMasks OutAddrMaskReps
+ Icmp: 335 36 254 72 0 0 0 0 9 0 0 0 0 257 0 257 0 0 0 0 0 0 0 0 0 0
+
+ Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs InErrs OutRsts
+ Tcp: 1 200 120000 -1 5985 55 27 434 10 5365077 5098096 10902 2 4413
+
+ Udp: InDatagrams NoPorts InErrors OutDatagrams
+ Udp: 1491094 122 0 1466178
+*/
+
+
+/*
+ *
+ * @retval 0 success
+ * @retval -1 no container specified
+ * @retval -2 could not open file
+ * @retval -3 could not create entry (probably malloc)
+ * @retval -4 file format error
+ */
+int
+netsnmp_access_systemstats_container_arch_load(netsnmp_container* container,
+ u_int load_flags)
+{
+ int rc1;
+#if defined (NETSNMP_ENABLE_IPV6)
+ int rc2;
+#endif
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "no container specified/found for access_systemstats_\n");
+ return -1;
+ }
+
+ /*
+ * load v4 and v6 stats. Even if one fails, try the other.
+ * If they have the same rc, return it. if the differ, return
+ * the smaller one. No log messages, since each individual function
+ * would have logged its own message.
+ */
+ rc1 = _systemstats_v4(container, load_flags);
+#if defined (NETSNMP_ENABLE_IPV6)
+ rc2 = _systemstats_v6(container, load_flags);
+ if ((rc1 == rc2) || (rc1 < rc2))
+ return rc1;
+
+ return rc2;
+#else
+ return rc1;
+#endif
+}
+
+static int
+_systemstats_v4(netsnmp_container* container, u_int load_flags)
+{
+ FILE *devin;
+ char line[1024];
+ netsnmp_systemstats_entry *entry = NULL;
+ int scan_count;
+ char *stats, *start = line;
+ int len;
+ uintmax_t scan_vals[19];
+
+ DEBUGMSGTL(("access:systemstats:container:arch", "load v4 (flags %p)\n",
+ load_flags));
+
+ netsnmp_assert(container != NULL); /* load function shoulda checked this */
+
+ if (!(devin = fopen("/proc/net/snmp", "r"))) {
+ DEBUGMSGTL(("access:systemstats",
+ "Failed to load Systemstats Table (linux1)\n"));
+ snmp_log(LOG_ERR, "cannot open /proc/net/snmp ...\n");
+ return -2;
+ }
+
+ /*
+ * skip header, but make sure it's the length we expect...
+ */
+ fgets(line, sizeof(line), devin);
+ len = strlen(line);
+ if (224 != len) {
+ fclose(devin);
+ snmp_log(LOG_ERR, "unexpected header length in /proc/net/snmp."
+ " %d != 224\n", len);
+ return -4;
+ }
+
+ /*
+ * This file provides the statistics for each systemstats.
+ * Read in each line in turn, isolate the systemstats name
+ * and retrieve (or create) the corresponding data structure.
+ */
+ start = fgets(line, sizeof(line), devin);
+ fclose(devin);
+ if (start) {
+
+ len = strlen(line);
+ if (line[len - 1] == '\n')
+ line[len - 1] = '\0';
+
+ while (*start && *start == ' ')
+ start++;
+
+ if ((!*start) || ((stats = strrchr(start, ':')) == NULL)) {
+ snmp_log(LOG_ERR,
+ "systemstats data format error 1, line ==|%s|\n", line);
+ return -4;
+ }
+
+ DEBUGMSGTL(("access:systemstats", "processing '%s'\n", start));
+
+ *stats++ = 0; /* null terminate name */
+ while (*stats == ' ') /* skip spaces before stats */
+ stats++;
+
+ entry = netsnmp_access_systemstats_entry_create(1);
+ if(NULL == entry) {
+ netsnmp_access_systemstats_container_free(container,
+ NETSNMP_ACCESS_SYSTEMSTATS_FREE_NOFLAGS);
+ return -3;
+ }
+
+ /*
+ * OK - we've now got (or created) the data structure for
+ * this systemstats, including any "static" information.
+ * Now parse the rest of the line (i.e. starting from 'stats')
+ * to extract the relevant statistics, and populate
+ * data structure accordingly.
+ */
+
+ memset(scan_vals, 0x0, sizeof(scan_vals));
+ scan_count = sscanf(stats,
+ "%llu %llu %llu %llu %llu %llu %llu %llu %llu %llu"
+ "%llu %llu %llu %llu %llu %llu %llu %llu %llu",
+ &scan_vals[0],&scan_vals[1],&scan_vals[2],
+ &scan_vals[3],&scan_vals[4],&scan_vals[5],
+ &scan_vals[6],&scan_vals[7],&scan_vals[8],
+ &scan_vals[9],&scan_vals[10],&scan_vals[11],
+ &scan_vals[12],&scan_vals[13],&scan_vals[14],
+ &scan_vals[15],&scan_vals[16],&scan_vals[17],
+ &scan_vals[18]);
+ DEBUGMSGTL(("access:systemstats", " read %d values\n", scan_count));
+
+ if(scan_count != 19) {
+ snmp_log(LOG_ERR,
+ "error scanning systemstats data (expected %d, got %d)\n",
+ 19, scan_count);
+ netsnmp_access_systemstats_entry_free(entry);
+ return -4;
+ }
+ /* entry->stats. = scan_vals[0]; / * Forwarding */
+ /* entry->stats. = scan_vals[1]; / * DefaultTTL */
+ entry->stats.HCInReceives.low = scan_vals[2] & 0xffffffff;
+ entry->stats.HCInReceives.high = scan_vals[2] >> 32;
+ entry->stats.InHdrErrors = scan_vals[3];
+ entry->stats.InAddrErrors = scan_vals[4];
+ entry->stats.HCInForwDatagrams.low = scan_vals[5] & 0xffffffff;
+ entry->stats.HCInForwDatagrams.high = scan_vals[5] >> 32;
+ entry->stats.InUnknownProtos = scan_vals[6];
+ entry->stats.InDiscards = scan_vals[7];
+ entry->stats.HCInDelivers.low = scan_vals[8] & 0xffffffff;
+ entry->stats.HCInDelivers.high = scan_vals[8] >> 32;
+ entry->stats.HCOutRequests.low = scan_vals[9] & 0xffffffff;
+ entry->stats.HCOutRequests.high = scan_vals[9] >> 32;
+ entry->stats.OutDiscards = scan_vals[10];
+ entry->stats.OutNoRoutes = scan_vals[11];
+ /* entry->stats. = scan_vals[12]; / * ReasmTimeout */
+ entry->stats.ReasmReqds = scan_vals[13];
+ entry->stats.ReasmOKs = scan_vals[14];
+ entry->stats.ReasmFails = scan_vals[15];
+ entry->stats.OutFragOKs = scan_vals[16];
+ entry->stats.OutFragFails = scan_vals[17];
+ entry->stats.OutFragCreates = scan_vals[18];
+
+ /*
+ * add to container
+ */
+ CONTAINER_INSERT(container, entry);
+ }
+ return 0;
+}
+
+#if defined (NETSNMP_ENABLE_IPV6)
+static int
+_systemstats_v6(netsnmp_container* container, u_int load_flags)
+{
+ FILE *devin;
+ char line[1024];
+ netsnmp_systemstats_entry *entry = NULL;
+ int scan_count = 0;
+ char *stats, *start = line;
+ int len, rc;
+ uintmax_t scan_val;
+ const char *filename = "/proc/net/snmp6";
+ static int warned_open = 0;
+
+ DEBUGMSGTL(("access:systemstats:container:arch", "load v6 (flags %p)\n",
+ load_flags));
+
+ netsnmp_assert(container != NULL); /* load function shoulda checked this */
+
+ entry = netsnmp_access_systemstats_entry_create(2);
+ if(NULL == entry)
+ return -3;
+
+ /*
+ * try to open file. If we can't, that's ok - maybe the module hasn't
+ * been loaded yet.
+ */
+ if (!(devin = fopen(filename, "r"))) {
+ DEBUGMSGTL(("access:systemstats",
+ "Failed to load Systemstats Table (linux1)\n"));
+ if(!warned_open) {
+ ++warned_open;
+ snmp_log(LOG_ERR, "cannot open %s ...\n", filename);
+ }
+ free(entry);
+ return 0;
+ }
+
+ /*
+ * This file provides the statistics for each systemstats.
+ * Read in each line in turn, isolate the systemstats name
+ * and retrieve (or create) the corresponding data structure.
+ */
+ while (1) {
+ start = fgets(line, sizeof(line), devin);
+ if (NULL == start)
+ break;
+
+ len = strlen(line);
+ if (line[len - 1] == '\n')
+ line[len - 1] = '\0';
+
+ if (('I' != line[0]) || ('6' != line[2]))
+ continue;
+
+ stats = strrchr(line, ' ');
+ if (NULL == stats) {
+ snmp_log(LOG_ERR,
+ "systemstats data format error 1, line ==|%s|\n", line);
+ continue;
+ }
+
+ DEBUGMSGTL(("access:systemstats", "processing '%s'\n", line));
+
+ /*
+ * OK - we've now got (or created) the data structure for
+ * this systemstats, including any "static" information.
+ * Now parse the rest of the line (i.e. starting from 'stats')
+ * to extract the relevant statistics, and populate
+ * data structure accordingly.
+ */
+ scan_val = atoll(stats);
+ if (0 == scan_val)
+ continue;
+
+ rc = 0;
+ if ('I' == line[3]) { /* In */
+ if ('A' == line[5]) {
+ entry->stats.InAddrErrors = scan_val;
+ } else if ('D' == line[5]) {
+ if ('e' == line[6]) {
+ entry->stats.HCInDelivers.low = scan_val & 0xffffffff;
+ entry->stats.HCInDelivers.high = scan_val >> 32;
+ } else if ('i' == line[6])
+ entry->stats.InDiscards = scan_val;
+ else
+ rc = 1;
+ } else if ('H' == line[5]) {
+ entry->stats.InHdrErrors = scan_val;
+ } else if ('M' == line[5]) {
+ entry->stats.HCInMcastPkts.low = scan_val & 0xffffffff;
+ entry->stats.HCInMcastPkts.high = scan_val >> 32;
+ } else if ('N' == line[5]) {
+ entry->stats.InNoRoutes = scan_val;
+ } else if ('R' == line[5]) {
+ entry->stats.HCInReceives.low = scan_val & 0xffffffff;
+ entry->stats.HCInReceives.high = scan_val >> 32;
+ } else if ('T' == line[5]) {
+ if ('r' == line[6]) {
+ entry->stats.InTruncatedPkts = scan_val & 0xffffffff;
+ } else if ('o' == line[6])
+ ; /* TooBig isn't in the MIB, so ignore it */
+ else
+ rc = 1;
+ } else if ('U' == line[5]) {
+ entry->stats.InUnknownProtos = scan_val;
+ } else
+ rc = 1;
+ } else if ('O' == line[3]) { /* Out */
+ if ('D' == line[6]) {
+ entry->stats.OutDiscards = scan_val;
+ } else if ('F' == line[6]) {
+ entry->stats.HCOutForwDatagrams.low = scan_val & 0xffffffff;
+ entry->stats.HCOutForwDatagrams.high = scan_val >> 32;
+ } else if ('M' == line[6]) {
+ entry->stats.HCOutMcastPkts.low = scan_val & 0xffffffff;
+ entry->stats.HCOutMcastPkts.high = scan_val >> 32;
+ } else if ('N' == line[6]) {
+ entry->stats.OutNoRoutes = scan_val;
+ } else if ('R' == line[6]) {
+ entry->stats.HCOutRequests.low = scan_val & 0xffffffff;
+ entry->stats.HCOutRequests.high = scan_val >> 32;
+ } else
+ rc = 1;
+ } else if ('R' == line[3]) { /* Reasm */
+ if ('F' == line[8]) {
+ entry->stats.ReasmFails = scan_val;
+ } else if ('O' == line[8]) {
+ entry->stats.ReasmOKs = scan_val;
+ } else if ('R' == line[8]) {
+ entry->stats.ReasmReqds = scan_val;
+ } else if ('T' == line[8]) {
+ ; /* no mib entry for reasm timeout */
+ } else
+ rc = 1;
+ } else if ('F' == line[3]) { /* Frag */
+ if ('C' == line[7])
+ entry->stats.OutFragCreates = scan_val;
+ else if ('O' == line[7])
+ entry->stats.OutFragOKs = scan_val;
+ else if ('F' == line[7])
+ entry->stats.OutFragFails = scan_val;
+ else
+ rc = 1;
+ } else
+ rc = 1;
+
+ if (rc)
+ DEBUGMSGTL(("access:systemstats", "unknown stat %s\n", line));
+ else
+ ++scan_count;
+ }
+
+ fclose(devin);
+
+ /*
+ * add to container
+ */
+ CONTAINER_INSERT(container, entry);
+
+ return rc;
+}
+#endif /* NETSNMP_ENABLE_IPV6 */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable.h
new file mode 100644
index 0000000000..c2faab8468
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable.h
@@ -0,0 +1,8 @@
+/*
+ * module to include the modules
+ */
+
+config_require(ip-mib/data_access/arp)
+config_require(ip-mib/inetNetToMediaTable/inetNetToMediaTable)
+config_require(ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface)
+config_require(ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.c
new file mode 100644
index 0000000000..640c2e219a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.c
@@ -0,0 +1,1818 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: inetNetToMediaTable.c 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/** \page MFD helper for inetNetToMediaTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "inetNetToMediaTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "inetNetToMediaTable_interface.h"
+
+oid inetNetToMediaTable_oid[] = { INETNETTOMEDIATABLE_OID };
+int inetNetToMediaTable_oid_size =
+OID_LENGTH(inetNetToMediaTable_oid);
+
+inetNetToMediaTable_registration inetNetToMediaTable_user_context;
+
+void initialize_table_inetNetToMediaTable(void);
+void shutdown_table_inetNetToMediaTable(void);
+
+
+/**
+ * Initializes the inetNetToMediaTable module
+ */
+void
+init_inetNetToMediaTable(void)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:init_inetNetToMediaTable",
+ "called\n"));
+
+ /*
+ * TODO:300:o: Perform inetNetToMediaTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("inetNetToMediaTable"))
+ initialize_table_inetNetToMediaTable();
+
+} /* init_inetNetToMediaTable */
+
+/**
+ * Shut-down the inetNetToMediaTable module (agent is exiting)
+ */
+void
+shutdown_inetNetToMediaTable(void)
+{
+ if (should_init("inetNetToMediaTable"))
+ shutdown_table_inetNetToMediaTable();
+
+}
+
+/**
+ * Initialize the table inetNetToMediaTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_inetNetToMediaTable(void)
+{
+ inetNetToMediaTable_registration *user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:initialize_table_inetNetToMediaTable", "called\n"));
+
+ /*
+ * TODO:301:o: Perform inetNetToMediaTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize inetNetToMediaTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context =
+ netsnmp_create_data_list("inetNetToMediaTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _inetNetToMediaTable_initialize_interface(user_context, flags);
+} /* initialize_table_inetNetToMediaTable */
+
+/**
+ * Shutdown the table inetNetToMediaTable
+ */
+void
+shutdown_table_inetNetToMediaTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _inetNetToMediaTable_shutdown_interface
+ (&inetNetToMediaTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+inetNetToMediaTable_rowreq_ctx_init(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx, void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_rowreq_ctx_init", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra inetNetToMediaTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void
+inetNetToMediaTable_rowreq_ctx_cleanup(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_rowreq_ctx_cleanup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra inetNetToMediaTable rowreq cleanup.
+ */
+} /* inetNetToMediaTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+inetNetToMediaTable_pre_request(inetNetToMediaTable_registration *
+ user_context)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_pre_request", "called\n"));
+
+ /*
+ * TODO:510:o: Perform inetNetToMediaTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+inetNetToMediaTable_post_request(inetNetToMediaTable_registration *
+ user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_post_request", "called\n"));
+
+ /*
+ * TODO:511:o: Perform inetNetToMediaTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (inetNetToMediaTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ inetNetToMediaTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaTable_post_request */
+
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetNetToMediaTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::inetNetToMediaTable is subid 35 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.35, length: 8
+ */
+
+/*
+ * ---------------------------------------------------------------------
+ * * TODO:200:r: Implement inetNetToMediaTable data context functions.
+ */
+/*
+ * inetNetToMediaTable_allocate_data
+ *
+ * Purpose: create new inetNetToMediaTable_data.
+ */
+inetNetToMediaTable_data *
+inetNetToMediaTable_allocate_data(void)
+{
+ /*
+ * TODO:201:r: |-> allocate memory for the inetNetToMediaTable data context.
+ */
+ /** this might not be right for netsnmp_inetmedia_entry */
+ inetNetToMediaTable_data *rtn = netsnmp_access_arp_entry_create();
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_allocate_data", "called\n"));
+
+ if (NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "inetNetToMediaTable_data.\n");
+ }
+
+ return rtn;
+} /* inetNetToMediaTable_allocate_data */
+
+/*
+ * inetNetToMediaTable_release_data
+ *
+ * Purpose: release inetNetToMediaTable data.
+ */
+void
+inetNetToMediaTable_release_data(inetNetToMediaTable_data * data)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_release_data", "called\n"));
+
+ /*
+ * TODO:202:r: |-> release memory for the inetNetToMediaTable data context.
+ */
+ netsnmp_access_arp_entry_free(data);
+} /* inetNetToMediaTable_release_data */
+
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param inetNetToMediaIfIndex_val
+ * @param inetNetToMediaNetAddressType_val
+ * @param inetNetToMediaNetAddress_val_ptr
+ * @param inetNetToMediaNetAddress_val_ptr_len
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+inetNetToMediaTable_indexes_set_tbl_idx(inetNetToMediaTable_mib_index *
+ tbl_idx,
+ long inetNetToMediaIfIndex_val,
+ u_long
+ inetNetToMediaNetAddressType_val,
+ char
+ *inetNetToMediaNetAddress_val_ptr,
+ size_t
+ inetNetToMediaNetAddress_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_indexes_set_tbl_idx", "called\n"));
+
+ /*
+ * inetNetToMediaIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ /** WARNING: this code might not work for netsnmp_arp_entry */
+ tbl_idx->inetNetToMediaIfIndex = inetNetToMediaIfIndex_val;
+
+ /*
+ * inetNetToMediaNetAddressType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ /** WARNING: this code might not work for netsnmp_arp_entry */
+ tbl_idx->inetNetToMediaNetAddressType =
+ inetNetToMediaNetAddressType_val;
+
+ /*
+ * inetNetToMediaNetAddress(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ tbl_idx->inetNetToMediaNetAddress_len = sizeof(tbl_idx->inetNetToMediaNetAddress) / sizeof(tbl_idx->inetNetToMediaNetAddress[0]); /* max length */
+ /** WARNING: this code might not work for netsnmp_arp_entry */
+ /*
+ * make sure there is enough space for inetNetToMediaNetAddress data
+ */
+ if (tbl_idx->inetNetToMediaNetAddress_len <
+ inetNetToMediaNetAddress_val_ptr_len) {
+ snmp_log(LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ tbl_idx->inetNetToMediaNetAddress_len =
+ inetNetToMediaNetAddress_val_ptr_len;
+ memcpy(tbl_idx->inetNetToMediaNetAddress,
+ inetNetToMediaNetAddress_val_ptr,
+ inetNetToMediaNetAddress_val_ptr_len *
+ sizeof(inetNetToMediaNetAddress_val_ptr[0]));
+
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+inetNetToMediaTable_indexes_set(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx, long inetNetToMediaIfIndex_val,
+ u_long inetNetToMediaNetAddressType_val,
+ char *inetNetToMediaNetAddress_val_ptr,
+ size_t
+ inetNetToMediaNetAddress_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_indexes_set", "called\n"));
+
+ if (MFD_SUCCESS !=
+ inetNetToMediaTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+ inetNetToMediaIfIndex_val,
+ inetNetToMediaNetAddressType_val,
+ inetNetToMediaNetAddress_val_ptr,
+ inetNetToMediaNetAddress_val_ptr_len))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if (0 != inetNetToMediaTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * IP-MIB::inetNetToMediaEntry.inetNetToMediaPhysAddress
+ * inetNetToMediaPhysAddress is subid 4 of inetNetToMediaEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.35.1.4
+ * Description:
+The media-dependent `physical' address.
+
+
+ As the entries in this table are typically not persistent
+ when this object is written the entity SHOULD NOT save the
+ change to non-volatile storage.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 1x:
+ *
+ * Ranges: 0 - 65535;
+ *
+ * Its syntax is PhysAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 65535)
+ */
+/**
+ * Extract the current value of the inetNetToMediaPhysAddress data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetNetToMediaPhysAddress_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param inetNetToMediaPhysAddress_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by inetNetToMediaPhysAddress.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*inetNetToMediaPhysAddress_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update inetNetToMediaPhysAddress_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+inetNetToMediaPhysAddress_get(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
+ char **inetNetToMediaPhysAddress_val_ptr_ptr,
+ size_t
+ * inetNetToMediaPhysAddress_val_ptr_len_ptr)
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert((NULL != inetNetToMediaPhysAddress_val_ptr_ptr)
+ && (NULL != *inetNetToMediaPhysAddress_val_ptr_ptr));
+ netsnmp_assert(NULL != inetNetToMediaPhysAddress_val_ptr_len_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaPhysAddress_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetNetToMediaPhysAddress data.
+ * copy (* inetNetToMediaPhysAddress_val_ptr_ptr ) data and (* inetNetToMediaPhysAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ if ((*inetNetToMediaPhysAddress_val_ptr_len_ptr) <
+ rowreq_ctx->data->arp_physaddress_len)
+ return MFD_SKIP;
+
+ memcpy((*inetNetToMediaPhysAddress_val_ptr_ptr),
+ rowreq_ctx->data->arp_physaddress,
+ rowreq_ctx->data->arp_physaddress_len);
+ (*inetNetToMediaPhysAddress_val_ptr_len_ptr) =
+ rowreq_ctx->data->arp_physaddress_len;
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaPhysAddress_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::inetNetToMediaEntry.inetNetToMediaLastUpdated
+ * inetNetToMediaLastUpdated is subid 5 of inetNetToMediaEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.35.1.5
+ * Description:
+The value of sysUpTime at the time this entry was last
+ updated. If this entry was updated prior to the last re-
+ initialization of the local network management subsystem,
+ then this object contains a zero value.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is TimeStamp (based on perltype TICKS)
+ * The net-snmp type is ASN_TIMETICKS. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the inetNetToMediaLastUpdated data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetNetToMediaLastUpdated_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetNetToMediaLastUpdated_get(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
+ u_long * inetNetToMediaLastUpdated_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetNetToMediaLastUpdated_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaLastUpdated_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetNetToMediaLastUpdated data.
+ * copy (* inetNetToMediaLastUpdated_val_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * xxx-rks: get this value?
+ */
+ return MFD_SKIP;
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaLastUpdated_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::inetNetToMediaEntry.inetNetToMediaType
+ * inetNetToMediaType is subid 6 of inetNetToMediaEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.35.1.6
+ * Description:
+The type of mapping.
+
+
+ Setting this object to the value invalid(2) has the effect
+ of invalidating the corresponding entry in the
+ inetNetToMediaTable. That is, it effectively dis-
+ associates the interface identified with said entry from the
+ mapping identified with said entry. It is an
+ implementation- specific matter as to whether the agent
+ removes an invalidated entry from the table. Accordingly,
+ management stations must be prepared to receive tabular
+ information from agents that corresponds to entries not
+ currently in use. Proper interpretation of such entries
+ requires examination of the relevant inetNetToMediaType
+ object.
+
+
+ The 'dynamic(3)' type indicates that the IP address to
+ physical addresses mapping has been dynamically resolved
+ using e.g. IPv4 ARP or the IPv6 Neighbor Discovery protocol.
+
+
+ The 'static(4)' type indicates that the mapping has been
+ statically configured. Both of these refer to entries that
+ provide mappings for other entities addresses.
+
+
+ The 'local(5)' type indicates that the mapping is provided
+ for an entity's own interface address.
+
+
+ As the entries in this table are typically not persistent
+ when this object is written the entity SHOULD NOT save the
+
+
+
+
+ change to non-volatile storage.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: static
+ *
+ * Enum range: 5/8. Values: other(1), invalid(2), dynamic(3), static(4), local(5)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the inetNetToMediaType data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetNetToMediaType_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetNetToMediaType_get(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
+ u_long * inetNetToMediaType_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetNetToMediaType_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaType_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetNetToMediaType data.
+ * copy (* inetNetToMediaType_val_ptr ) from rowreq_ctx->data
+ */
+ (*inetNetToMediaType_val_ptr) = rowreq_ctx->data->arp_type;
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaType_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::inetNetToMediaEntry.inetNetToMediaState
+ * inetNetToMediaState is subid 7 of inetNetToMediaEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.35.1.7
+ * Description:
+The Neighbor Unreachability Detection [4] state for the
+ interface when the address mapping in this entry is used.
+ If Neighbor Unreachability Detection is not in use (e.g. for
+ IPv4), this object is always unknown(6).
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 6/8. Values: reachable(1), stale(2), delay(3), probe(4), invalid(5), unknown(6), incomplete(7)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the inetNetToMediaState data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetNetToMediaState_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetNetToMediaState_get(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
+ u_long * inetNetToMediaState_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetNetToMediaState_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaState_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the inetNetToMediaState data.
+ * copy (* inetNetToMediaState_val_ptr ) from rowreq_ctx->data
+ */
+ (*inetNetToMediaState_val_ptr) = rowreq_ctx->data->arp_state;
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaState_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::inetNetToMediaEntry.inetNetToMediaRowStatus
+ * inetNetToMediaRowStatus is subid 8 of inetNetToMediaEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.35.1.8
+ * Description:
+The status of this conceptual row.
+
+
+ The RowStatus TC requires that this DESCRIPTION clause
+ states under which circumstances other objects in this row
+ can be modified. The value of this object has no effect on
+ whether other objects in this conceptual row can be
+ modified.
+
+
+ A conceptual row can not be made active until the
+ inetNetToMediaPhysAddress object has been set.
+
+
+
+
+ Note that if the inetNetToMediaType is set to 'invalid' the
+ managed node may delete the entry independent of the state
+ of this object.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the inetNetToMediaRowStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetNetToMediaRowStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+inetNetToMediaRowStatus_get(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
+ u_long * inetNetToMediaRowStatus_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != inetNetToMediaRowStatus_val_ptr);
+
+ (*inetNetToMediaRowStatus_val_ptr) =
+ rowreq_ctx->inetNetToMediaRowStatus;
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaRowStatus_get */
+
+
+
+/** @} */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetNetToMediaTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::inetNetToMediaTable is subid 35 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.35, length: 8
+ */
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +-------------+ +==============+
+ * | row |f|<-------|| object ||
+ * | create |1| E || lookup ||
+ * +-------------+ +==============+
+ * E | | S | S
+ * | +------------------>|
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * |
+ * (err && f1)------------------->+
+ * | |
+ * +--------------+ +--------------+
+ * | post |<--------| row |
+ * | request | U | release |
+ * +--------------+ +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * inetNetToMediaTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * inetNetToMediaTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (inetNetToMediaTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+inetNetToMediaTable_undo_setup(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_undo_setup", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> Setup inetNetToMediaTable undo.
+ * set up inetNetToMediaTable undo information, in preparation for a set.
+ * Undo storage is in (* inetNetToMediaRowStatus_val_ptr )*
+ */
+
+ return rc;
+} /* inetNetToMediaTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (inetNetToMediaTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+inetNetToMediaTable_undo(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_undo",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> inetNetToMediaTable undo.
+ * inetNetToMediaTable undo information, in response to a failed set.
+ * Undo storage is in (* inetNetToMediaRowStatus_val_ptr )*
+ */
+
+ return rc;
+} /* inetNetToMediaTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (inetNetToMediaTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+inetNetToMediaTable_undo_cleanup(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_undo_cleanup", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:452:M: |-> Cleanup inetNetToMediaTable undo.
+ * Undo storage is in (* inetNetToMediaRowStatus_val_ptr )*
+ */
+
+ return rc;
+} /* inetNetToMediaTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * inetNetToMediaTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+inetNetToMediaTable_commit(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_commit",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit inetNetToMediaTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+#if 1
+ /** xxx-rks:9 nettomedia commit */
+#else
+ if (save_flags & COLUMN_INETNETTOMEDIAPHYSADDRESS_FLAG) {
+ save_flags &= ~COLUMN_INETNETTOMEDIAPHYSADDRESS_FLAG; /* clear inetNetToMediaPhysAddress */
+ /*
+ * TODO:482:o: |-> commit column inetNetToMediaPhysAddress.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "inetNetToMediaTable column inetNetToMediaPhysAddress commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo inetNetToMediaPhysAddress
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_INETNETTOMEDIAPHYSADDRESS_FLAG;
+ }
+ }
+
+ if (save_flags & COLUMN_INETNETTOMEDIATYPE_FLAG) {
+ save_flags &= ~COLUMN_INETNETTOMEDIATYPE_FLAG; /* clear inetNetToMediaType */
+ /*
+ * TODO:482:o: |-> commit column inetNetToMediaType.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "inetNetToMediaTable column inetNetToMediaType commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo inetNetToMediaType
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_INETNETTOMEDIATYPE_FLAG;
+ }
+ }
+
+ if (save_flags & COLUMN_INETNETTOMEDIAROWSTATUS_FLAG) {
+ save_flags &= ~COLUMN_INETNETTOMEDIAROWSTATUS_FLAG; /* clear inetNetToMediaRowStatus */
+ /*
+ * TODO:482:o: |-> commit column inetNetToMediaRowStatus.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "inetNetToMediaTable column inetNetToMediaRowStatus commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo inetNetToMediaRowStatus
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_INETNETTOMEDIAROWSTATUS_FLAG;
+ }
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+#endif
+
+ if (save_flags) {
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* inetNetToMediaTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * inetNetToMediaTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+inetNetToMediaTable_undo_commit(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_undo_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:485:M: |-> Undo inetNetToMediaTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* inetNetToMediaTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement inetNetToMediaTable node value checks.
+ * TODO:450:M: Implement inetNetToMediaTable undo functions.
+ * TODO:460:M: Implement inetNetToMediaTable set functions.
+ * TODO:480:M: Implement inetNetToMediaTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * IP-MIB::inetNetToMediaEntry.inetNetToMediaPhysAddress
+ * inetNetToMediaPhysAddress is subid 4 of inetNetToMediaEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.35.1.4
+ * Description:
+The media-dependent `physical' address.
+
+
+ As the entries in this table are typically not persistent
+ when this object is written the entity SHOULD NOT save the
+ change to non-volatile storage.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 1x:
+ *
+ * Ranges: 0 - 65535;
+ *
+ * Its syntax is PhysAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 65535)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetNetToMediaPhysAddress_val_ptr
+ * A char containing the new value.
+ * @param inetNetToMediaPhysAddress_val_ptr_len
+ * The size (in bytes) of the data pointed to by inetNetToMediaPhysAddress_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * Since you aren't using a generated data context, you also need to
+ * check the length, to make sure you don't overflow your storage space.
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * inetNetToMediaTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OCTET_STR
+ * The length is in (one of) the range set(s): 0 - 65535
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+inetNetToMediaPhysAddress_check_value(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx, char
+ *inetNetToMediaPhysAddress_val_ptr,
+ size_t
+ inetNetToMediaPhysAddress_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaPhysAddress_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != inetNetToMediaPhysAddress_val_ptr);
+
+ /*
+ * TODO:441:o: |-> Check for valid inetNetToMediaPhysAddress value.
+ */
+
+ return MFD_SUCCESS; /* inetNetToMediaPhysAddress value not illegal */
+} /* inetNetToMediaPhysAddress_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (inetNetToMediaTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * inetNetToMediaTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+inetNetToMediaPhysAddress_undo_setup(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaPhysAddress_undo_setup", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup inetNetToMediaPhysAddress undo.
+ */
+ /*
+ * copy inetNetToMediaPhysAddress and inetNetToMediaPhysAddress_len data
+ * set rowreq_ctx->undo->inetNetToMediaPhysAddress from rowreq_ctx->data->inetNetToMediaPhysAddress
+ */
+
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaPhysAddress_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param inetNetToMediaPhysAddress_val_ptr
+ * A char containing the new value.
+ * @param inetNetToMediaPhysAddress_val_ptr_len
+ * The size (in bytes) of the data pointed to by inetNetToMediaPhysAddress_val_ptr
+ */
+int
+inetNetToMediaPhysAddress_set(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
+ char *inetNetToMediaPhysAddress_val_ptr,
+ size_t inetNetToMediaPhysAddress_val_ptr_len)
+{
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaPhysAddress_set", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != inetNetToMediaPhysAddress_val_ptr);
+
+ /*
+ * TODO:461:M: |-> Set inetNetToMediaPhysAddress value.
+ * set inetNetToMediaPhysAddress value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaPhysAddress_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+inetNetToMediaPhysAddress_undo(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaPhysAddress_undo", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up inetNetToMediaPhysAddress undo.
+ */
+ /*
+ * copy inetNetToMediaPhysAddress and inetNetToMediaPhysAddress_len data
+ * set rowreq_ctx->data->inetNetToMediaPhysAddress from rowreq_ctx->undo->inetNetToMediaPhysAddress
+ */
+
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaPhysAddress_undo */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::inetNetToMediaEntry.inetNetToMediaType
+ * inetNetToMediaType is subid 6 of inetNetToMediaEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.35.1.6
+ * Description:
+The type of mapping.
+
+
+ Setting this object to the value invalid(2) has the effect
+ of invalidating the corresponding entry in the
+ inetNetToMediaTable. That is, it effectively dis-
+ associates the interface identified with said entry from the
+ mapping identified with said entry. It is an
+ implementation- specific matter as to whether the agent
+ removes an invalidated entry from the table. Accordingly,
+ management stations must be prepared to receive tabular
+ information from agents that corresponds to entries not
+ currently in use. Proper interpretation of such entries
+ requires examination of the relevant inetNetToMediaType
+ object.
+
+
+ The 'dynamic(3)' type indicates that the IP address to
+ physical addresses mapping has been dynamically resolved
+ using e.g. IPv4 ARP or the IPv6 Neighbor Discovery protocol.
+
+
+ The 'static(4)' type indicates that the mapping has been
+ statically configured. Both of these refer to entries that
+ provide mappings for other entities addresses.
+
+
+ The 'local(5)' type indicates that the mapping is provided
+ for an entity's own interface address.
+
+
+ As the entries in this table are typically not persistent
+ when this object is written the entity SHOULD NOT save the
+
+
+
+
+ change to non-volatile storage.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: static
+ *
+ * Enum range: 5/8. Values: other(1), invalid(2), dynamic(3), static(4), local(5)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetNetToMediaType_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * inetNetToMediaTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of other(1), invalid(2), dynamic(3), static(4), local(5)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+inetNetToMediaType_check_value(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
+ u_long inetNetToMediaType_val)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaType_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid inetNetToMediaType value.
+ */
+
+ return MFD_SUCCESS; /* inetNetToMediaType value not illegal */
+} /* inetNetToMediaType_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (inetNetToMediaTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * inetNetToMediaTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+inetNetToMediaType_undo_setup(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaType_undo_setup", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup inetNetToMediaType undo.
+ */
+ /*
+ * copy inetNetToMediaType data
+ * set rowreq_ctx->undo->inetNetToMediaType from rowreq_ctx->data->inetNetToMediaType
+ */
+
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaType_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param inetNetToMediaType_val
+ * A long containing the new value.
+ */
+int
+inetNetToMediaType_set(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
+ u_long inetNetToMediaType_val)
+{
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaType_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set inetNetToMediaType value.
+ * set inetNetToMediaType value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaType_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+inetNetToMediaType_undo(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaType_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up inetNetToMediaType undo.
+ */
+ /*
+ * copy inetNetToMediaType data
+ * set rowreq_ctx->data->inetNetToMediaType from rowreq_ctx->undo->inetNetToMediaType
+ */
+
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaType_undo */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::inetNetToMediaEntry.inetNetToMediaRowStatus
+ * inetNetToMediaRowStatus is subid 8 of inetNetToMediaEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.35.1.8
+ * Description:
+The status of this conceptual row.
+
+
+ The RowStatus TC requires that this DESCRIPTION clause
+ states under which circumstances other objects in this row
+ can be modified. The value of this object has no effect on
+ whether other objects in this conceptual row can be
+ modified.
+
+
+ A conceptual row can not be made active until the
+ inetNetToMediaPhysAddress object has been set.
+
+
+
+
+ Note that if the inetNetToMediaType is set to 'invalid' the
+ managed node may delete the entry independent of the state
+ of this object.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param inetNetToMediaRowStatus_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * inetNetToMediaTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+inetNetToMediaRowStatus_check_value(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetNetToMediaRowStatus_val)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaRowStatus_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid inetNetToMediaRowStatus value.
+ */
+
+ return MFD_SUCCESS; /* inetNetToMediaRowStatus value not illegal */
+} /* inetNetToMediaRowStatus_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (inetNetToMediaTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * inetNetToMediaTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+inetNetToMediaRowStatus_undo_setup(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaRowStatus_undo_setup", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup inetNetToMediaRowStatus undo.
+ */
+ /*
+ * copy inetNetToMediaRowStatus data
+ * set rowreq_ctx->undo->inetNetToMediaRowStatus from rowreq_ctx->data->inetNetToMediaRowStatus
+ */
+ rowreq_ctx->inetNetToMediaRowStatus_undo =
+ rowreq_ctx->inetNetToMediaRowStatus;
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaRowStatus_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param inetNetToMediaRowStatus_val
+ * A long containing the new value.
+ */
+int
+inetNetToMediaRowStatus_set(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
+ u_long inetNetToMediaRowStatus_val)
+{
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaRowStatus_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set inetNetToMediaRowStatus value.
+ * set inetNetToMediaRowStatus value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaRowStatus_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+inetNetToMediaRowStatus_undo(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaRowStatus_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up inetNetToMediaRowStatus undo.
+ */
+ /*
+ * copy inetNetToMediaRowStatus data
+ * set rowreq_ctx->data->inetNetToMediaRowStatus from rowreq_ctx->undo->inetNetToMediaRowStatus
+ */
+ rowreq_ctx->inetNetToMediaRowStatus =
+ rowreq_ctx->inetNetToMediaRowStatus_undo;
+
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaRowStatus_undo */
+
+/**
+ * check dependencies
+ *
+ * This is useful for for tables which have dependencies between columns
+ * (or rows, or tables). For example, two columns allocating a percentage
+ * of something add up 100%.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * inetNetToMediaTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ *
+ * @retval MFD_SUCCESS all the changes to the row are legal
+ * @retval MFD_ERROR one or more changes are not legal
+ *
+ * (see README-table-inetNetToMediaTable if you don't have dependencies)
+ */
+int
+inetNetToMediaTable_check_dependencies(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:inetNetToMediaTable_check_dependencies", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:470:o: Check inetNetToMediaTable row dependencies.
+ * check that all new value are legal and consistent with each other
+ */
+ /*
+ * check RowStatus dependencies
+ */
+ if (rowreq_ctx->column_set_flags & COLUMN_INETNETTOMEDIAROWSTATUS_FLAG) {
+ /*
+ * check for valid RowStatus transition (old, new)
+ * (Note: move transition check to
+ * to catch errors earlier)
+ */
+ rc = check_rowstatus_transition(rowreq_ctx->
+ inetNetToMediaRowStatus_undo,
+ rowreq_ctx->
+ inetNetToMediaRowStatus);
+ if (MFD_SUCCESS != rc)
+ return rc;
+
+ /*
+ * row creation requirements
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ if (ROWSTATUS_DESTROY == rowreq_ctx->inetNetToMediaRowStatus) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED;
+ } else if (ROWSTATUS_CREATEANDGO ==
+ rowreq_ctx->inetNetToMediaRowStatus) {
+ if ((rowreq_ctx->
+ column_set_flags & INETNETTOMEDIATABLE_REQUIRED_COLS)
+ != INETNETTOMEDIATABLE_REQUIRED_COLS) {
+ DEBUGMSGTL(("inetNetToMediaTable",
+ "required columns missing (0x%0x != 0x%0x)\n",
+ rowreq_ctx->column_set_flags,
+ INETNETTOMEDIATABLE_REQUIRED_COLS));
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ rowreq_ctx->inetNetToMediaRowStatus = ROWSTATUS_ACTIVE;
+ }
+ } /* row creation */
+ else {
+ /*
+ * row change requirements
+ */
+ /*
+ * don't allow a destroy if any other value was changed, since
+ * that might call data access routines with bad info.
+ *
+ * you may or may not require the row be notInService before it
+ * can be destroyed.
+ */
+ if (ROWSTATUS_DESTROY == rowreq_ctx->inetNetToMediaRowStatus) {
+ if (rowreq_ctx->
+ column_set_flags &
+ ~COLUMN_INETNETTOMEDIAROWSTATUS_FLAG) {
+ DEBUGMSGTL(("inetNetToMediaTable",
+ "destroy must be only varbind for row\n"));
+ return MFD_NOT_VALID_NOW;
+ }
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED;
+
+ } /* row destroy */
+ } /* row change */
+ } else {
+ /*
+ * must have row status to create a row
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ DEBUGMSGTL(("inetNetToMediaTable",
+ "must use RowStatus to create rows\n"));
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ } /* row status not set */
+
+ if (MFD_SUCCESS != rc)
+ return rc;
+
+ return rc;
+} /* inetNetToMediaTable_check_dependencies */
+
+/** @} */
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
new file mode 100644
index 0000000000..aad8ad9a83
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable.h
@@ -0,0 +1,413 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: inetNetToMediaTable.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+#ifndef INETNETTOMEDIATABLE_H
+#define INETNETTOMEDIATABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+#include <net-snmp/data_access/arp.h>
+
+ /*
+ * other required module components
+ */
+ /* *INDENT-OFF* */
+config_require(ip-mib/data_access/arp)
+config_require(ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface)
+config_require(ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access)
+ /* *INDENT-ON* */
+
+ /*
+ * OID, column number and enum definions for inetNetToMediaTable
+ */
+#include "inetNetToMediaTable_constants.h"
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+ void init_inetNetToMediaTable(void);
+ void shutdown_inetNetToMediaTable(void);
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetNetToMediaTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::inetNetToMediaTable is subid 35 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.35, length: 8
+ */
+ /*
+ *********************************************************************
+ * 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 inetNetToMediaTable registration context.
+ */
+ typedef netsnmp_data_list inetNetToMediaTable_registration;
+
+/**********************************************************************/
+ /*
+ * TODO:110:r: |-> Review inetNetToMediaTable data context structure.
+ * This structure is used to represent the data for inetNetToMediaTable.
+ */
+ typedef netsnmp_arp_entry inetNetToMediaTable_data;
+
+
+ /*
+ *********************************************************************
+ * TODO:115:o: |-> Review inetNetToMediaTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+ typedef inetNetToMediaTable_data inetNetToMediaTable_undo_data;
+
+ /*
+ * TODO:120:r: |-> Review inetNetToMediaTable mib index.
+ * This structure is used to represent the index for inetNetToMediaTable.
+ */
+ typedef struct inetNetToMediaTable_mib_index_s {
+
+ /*
+ * inetNetToMediaIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ long inetNetToMediaIfIndex;
+
+ /*
+ * inetNetToMediaNetAddressType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ u_long inetNetToMediaNetAddressType;
+
+ /*
+ * inetNetToMediaNetAddress(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ /** 128 - 2(other indexes) - oid length(10) = 115 */
+ char inetNetToMediaNetAddress[115];
+ size_t inetNetToMediaNetAddress_len;
+
+
+ } inetNetToMediaTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review inetNetToMediaTable 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(8)
+ */
+#define MAX_inetNetToMediaTable_IDX_LEN 118
+
+
+ /*
+ *********************************************************************
+ * TODO:130:o: |-> Review inetNetToMediaTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * inetNetToMediaTable_rowreq_ctx pointer.
+ */
+ typedef struct inetNetToMediaTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_inetNetToMediaTable_IDX_LEN];
+
+ inetNetToMediaTable_mib_index tbl_idx;
+
+ inetNetToMediaTable_data *data;
+ inetNetToMediaTable_undo_data *undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 inetNetToMediaTable rowreq context.
+ */
+ int inetNetToMediaRowStatus,
+ inetNetToMediaRowStatus_undo;
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *inetNetToMediaTable_data_list;
+
+ } inetNetToMediaTable_rowreq_ctx;
+
+ typedef struct inetNetToMediaTable_ref_rowreq_ctx_s {
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx;
+ } inetNetToMediaTable_ref_rowreq_ctx;
+
+ /*
+ *********************************************************************
+ * function prototypes
+ */
+ int
+ inetNetToMediaTable_pre_request(inetNetToMediaTable_registration *
+ user_context);
+ int
+ inetNetToMediaTable_post_request(inetNetToMediaTable_registration *
+ user_context, int rc);
+
+ int
+ inetNetToMediaTable_rowreq_ctx_init(inetNetToMediaTable_rowreq_ctx
+ * rowreq_ctx,
+ void *user_init_ctx);
+ void
+ inetNetToMediaTable_rowreq_ctx_cleanup
+ (inetNetToMediaTable_rowreq_ctx * rowreq_ctx);
+
+ inetNetToMediaTable_data *inetNetToMediaTable_allocate_data(void);
+ void
+ inetNetToMediaTable_release_data(inetNetToMediaTable_data * data);
+
+ int
+ inetNetToMediaTable_check_dependencies
+ (inetNetToMediaTable_rowreq_ctx * rowreq_ctx);
+ int
+ inetNetToMediaTable_commit(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+
+ inetNetToMediaTable_rowreq_ctx
+ * inetNetToMediaTable_row_find_by_mib_index
+ (inetNetToMediaTable_mib_index * mib_idx);
+
+ extern oid inetNetToMediaTable_oid[];
+ extern int inetNetToMediaTable_oid_size;
+
+
+#include "inetNetToMediaTable_interface.h"
+#include "inetNetToMediaTable_data_access.h"
+ /*
+ *********************************************************************
+ * GET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetNetToMediaTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::inetNetToMediaTable is subid 35 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.35, length: 8
+ */
+ /*
+ * indexes
+ */
+
+ int
+ inetNetToMediaPhysAddress_get(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx, char
+ **inetNetToMediaPhysAddress_val_ptr_ptr,
+ size_t *
+ inetNetToMediaPhysAddress_val_ptr_len_ptr);
+ int
+ inetNetToMediaLastUpdated_get(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ inetNetToMediaLastUpdated_val_ptr);
+ int inetNetToMediaType_get(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ inetNetToMediaType_val_ptr);
+ int inetNetToMediaState_get(inetNetToMediaTable_rowreq_ctx
+ * rowreq_ctx,
+ u_long *
+ inetNetToMediaState_val_ptr);
+ int
+ inetNetToMediaRowStatus_get(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ inetNetToMediaRowStatus_val_ptr);
+
+
+ int
+ inetNetToMediaTable_indexes_set_tbl_idx
+ (inetNetToMediaTable_mib_index * tbl_idx,
+ long inetNetToMediaIfIndex_val,
+ u_long inetNetToMediaNetAddressType_val,
+ char *inetNetToMediaNetAddress_val_ptr,
+ size_t inetNetToMediaNetAddress_val_ptr_len);
+ int
+ inetNetToMediaTable_indexes_set(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx,
+ long inetNetToMediaIfIndex_val,
+ u_long
+ inetNetToMediaNetAddressType_val,
+ char
+ *inetNetToMediaNetAddress_val_ptr,
+ size_t
+ inetNetToMediaNetAddress_val_ptr_len);
+
+
+
+ /*
+ *********************************************************************
+ * SET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetNetToMediaTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::inetNetToMediaTable is subid 35 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.35, length: 8
+ */
+
+
+ int
+ inetNetToMediaTable_undo_setup(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+ int
+ inetNetToMediaTable_undo_cleanup(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetNetToMediaTable_undo(inetNetToMediaTable_rowreq_ctx
+ * rowreq_ctx);
+ int
+ inetNetToMediaTable_commit(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+ int
+ inetNetToMediaTable_undo_commit(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+ int
+ inetNetToMediaPhysAddress_check_value
+ (inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
+ char *inetNetToMediaPhysAddress_val_ptr,
+ size_t inetNetToMediaPhysAddress_val_ptr_len);
+ int
+ inetNetToMediaPhysAddress_undo_setup(inetNetToMediaTable_rowreq_ctx
+ * rowreq_ctx);
+ int
+ inetNetToMediaPhysAddress_set(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx, char
+ *inetNetToMediaPhysAddress_val_ptr,
+ size_t
+ inetNetToMediaPhysAddress_val_ptr_len);
+ int
+ inetNetToMediaPhysAddress_undo(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ inetNetToMediaLastUpdated_check_value
+ (inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
+ u_long inetNetToMediaLastUpdated_val);
+ int
+ inetNetToMediaLastUpdated_undo_setup(inetNetToMediaTable_rowreq_ctx
+ * rowreq_ctx);
+ int
+ inetNetToMediaLastUpdated_set(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ inetNetToMediaLastUpdated_val);
+ int
+ inetNetToMediaLastUpdated_undo(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ inetNetToMediaType_check_value(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetNetToMediaType_val);
+ int
+ inetNetToMediaType_undo_setup(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetNetToMediaType_set(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetNetToMediaType_val);
+ int inetNetToMediaType_undo(inetNetToMediaTable_rowreq_ctx
+ * rowreq_ctx);
+
+ int
+ inetNetToMediaState_check_value(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long inetNetToMediaState_val);
+ int
+ inetNetToMediaState_undo_setup(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetNetToMediaState_set(inetNetToMediaTable_rowreq_ctx
+ * rowreq_ctx,
+ u_long
+ inetNetToMediaState_val);
+ int inetNetToMediaState_undo(inetNetToMediaTable_rowreq_ctx
+ * rowreq_ctx);
+
+ int
+ inetNetToMediaRowStatus_check_value(inetNetToMediaTable_rowreq_ctx
+ * rowreq_ctx,
+ u_long
+ inetNetToMediaRowStatus_val);
+ int
+ inetNetToMediaRowStatus_undo_setup(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+ int
+ inetNetToMediaRowStatus_undo(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+ int
+ inetNetToMediaTable_check_dependencies
+ (inetNetToMediaTable_rowreq_ctx * ctx);
+
+
+ /*
+ * DUMMY markers, ignore
+ *
+ * TODO:099:x: *************************************************************
+ * TODO:199:x: *************************************************************
+ * TODO:299:x: *************************************************************
+ * TODO:399:x: *************************************************************
+ * TODO:499:x: *************************************************************
+ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* INETNETTOMEDIATABLE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h
new file mode 100644
index 0000000000..819739581e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_constants.h
@@ -0,0 +1,161 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-constants.m2c,v 1.5 2005/07/15 22:41:16 rstory Exp $
+ *
+ * $Id: inetNetToMediaTable_constants.h 13759 2005-12-01 00:45:50Z rstory $
+ */
+#ifndef INETNETTOMEDIATABLE_CONSTANTS_H
+#define INETNETTOMEDIATABLE_CONSTANTS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ * column number definitions for table inetNetToMediaTable
+ */
+#define INETNETTOMEDIATABLE_OID 1,3,6,1,2,1,4,35
+
+#define COLUMN_INETNETTOMEDIAIFINDEX 1
+
+#define COLUMN_INETNETTOMEDIANETADDRESSTYPE 2
+
+#define COLUMN_INETNETTOMEDIANETADDRESS 3
+
+#define COLUMN_INETNETTOMEDIAPHYSADDRESS 4
+#define COLUMN_INETNETTOMEDIAPHYSADDRESS_FLAG (0x1 << 3)
+
+#define COLUMN_INETNETTOMEDIALASTUPDATED 5
+
+#define COLUMN_INETNETTOMEDIATYPE 6
+#define COLUMN_INETNETTOMEDIATYPE_FLAG (0x1 << 5)
+
+#define COLUMN_INETNETTOMEDIASTATE 7
+
+#define COLUMN_INETNETTOMEDIAROWSTATUS 8
+#define COLUMN_INETNETTOMEDIAROWSTATUS_FLAG (0x1 << 7)
+
+
+#define INETNETTOMEDIATABLE_MIN_COL COLUMN_INETNETTOMEDIAPHYSADDRESS
+#define INETNETTOMEDIATABLE_MAX_COL COLUMN_INETNETTOMEDIAROWSTATUS
+
+
+ /*
+ * TODO:405:r: Review INETNETTOMEDIATABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define INETNETTOMEDIATABLE_SETTABLE_COLS (COLUMN_INETNETTOMEDIAPHYSADDRESS_FLAG | COLUMN_INETNETTOMEDIATYPE_FLAG | COLUMN_INETNETTOMEDIAROWSTATUS_FLAG)
+ /*
+ * TODO:405:r: Review INETNETTOMEDIATABLE_REQUIRED_COLS macro.
+ * OR together all the required rows for row creation.
+ * default is writable cols w/out defaults.
+ */
+#define INETNETTOMEDIATABLE_REQUIRED_COLS (COLUMN_INETNETTOMEDIAPHYSADDRESS_FLAG | COLUMN_INETNETTOMEDIAROWSTATUS_FLAG)
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table inetNetToMediaTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * inetNetToMediaNetAddressType (InetAddressType / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef INETADDRESSTYPE_ENUMS
+#define INETADDRESSTYPE_ENUMS
+
+#define INETADDRESSTYPE_UNKNOWN 0
+#define INETADDRESSTYPE_IPV4 1
+#define INETADDRESSTYPE_IPV6 2
+#define INETADDRESSTYPE_IPV4Z 3
+#define INETADDRESSTYPE_IPV6Z 4
+#define INETADDRESSTYPE_DNS 16
+
+#endif /* INETADDRESSTYPE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * inetNetToMediaType (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef INETNETTOMEDIATYPE_ENUMS
+#define INETNETTOMEDIATYPE_ENUMS
+
+#define INETNETTOMEDIATYPE_OTHER 1
+#define INETNETTOMEDIATYPE_INVALID 2
+#define INETNETTOMEDIATYPE_DYNAMIC 3
+#define INETNETTOMEDIATYPE_STATIC 4
+#define INETNETTOMEDIATYPE_LOCAL 5
+
+#endif /* INETNETTOMEDIATYPE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * inetNetToMediaState (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef INETNETTOMEDIASTATE_ENUMS
+#define INETNETTOMEDIASTATE_ENUMS
+
+#define INETNETTOMEDIASTATE_REACHABLE 1
+#define INETNETTOMEDIASTATE_STALE 2
+#define INETNETTOMEDIASTATE_DELAY 3
+#define INETNETTOMEDIASTATE_PROBE 4
+#define INETNETTOMEDIASTATE_INVALID 5
+#define INETNETTOMEDIASTATE_UNKNOWN 6
+#define INETNETTOMEDIASTATE_INCOMPLETE 7
+
+#endif /* INETNETTOMEDIASTATE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * inetNetToMediaRowStatus (RowStatus / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef ROWSTATUS_ENUMS
+#define ROWSTATUS_ENUMS
+
+#define ROWSTATUS_ACTIVE 1
+#define ROWSTATUS_NOTINSERVICE 2
+#define ROWSTATUS_NOTREADY 3
+#define ROWSTATUS_CREATEANDGO 4
+#define ROWSTATUS_CREATEANDWAIT 5
+#define ROWSTATUS_DESTROY 6
+
+#endif /* ROWSTATUS_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* INETNETTOMEDIATABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.c
new file mode 100644
index 0000000000..cad942c621
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.c
@@ -0,0 +1,619 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: inetNetToMediaTable_data_access.c 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "inetNetToMediaTable.h"
+
+
+#include "inetNetToMediaTable_data_access.h"
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetNetToMediaTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::inetNetToMediaTable is subid 35 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.35, length: 8
+ */
+
+/**
+ * initialization for inetNetToMediaTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param inetNetToMediaTable_reg
+ * Pointer to inetNetToMediaTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+inetNetToMediaTable_init_data(inetNetToMediaTable_registration *
+ inetNetToMediaTable_reg)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_init_data", "called\n"));
+
+ /*
+ * TODO:303:o: Initialize inetNetToMediaTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+inetNetToMediaTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache * cache)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_container_init", "called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,
+ "bad container param to inetNetToMediaTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,
+ "bad cache param to inetNetToMediaTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up inetNetToMediaTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = INETNETTOMEDIATABLE_CACHE_TIMEOUT; /* seconds */
+} /* inetNetToMediaTable_container_init */
+
+/**
+ * check entry for update
+ *
+ */
+static void
+_snarf_arp_entry(netsnmp_arp_entry *arp_entry,
+ netsnmp_container *container)
+{
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx;
+ int inetAddressType;
+
+ DEBUGTRACE;
+
+ netsnmp_assert(NULL != arp_entry);
+ netsnmp_assert(NULL != container);
+
+ /*
+ * convert the addr len to an inetAddressType
+ */
+ switch (arp_entry->arp_ipaddress_len) {
+ case 4:
+ inetAddressType = INETADDRESSTYPE_IPV4;
+ break;
+
+ case 6:
+ inetAddressType = INETADDRESSTYPE_IPV6;
+ break;
+
+ default:
+ netsnmp_access_arp_entry_free(arp_entry);
+ snmp_log(LOG_ERR, "unsupported address type\n");
+ return;
+ }
+
+ /*
+ * allocate an row context and set the index(es), then add it to
+ * the container
+ */
+ rowreq_ctx = inetNetToMediaTable_allocate_rowreq_ctx(arp_entry, NULL);
+ if ((NULL != rowreq_ctx) &&
+ (MFD_SUCCESS == inetNetToMediaTable_indexes_set
+ (rowreq_ctx, rowreq_ctx->data->if_index, inetAddressType,
+ rowreq_ctx->data->arp_ipaddress,
+ rowreq_ctx->data->arp_ipaddress_len))) {
+ rowreq_ctx->inetNetToMediaRowStatus = ROWSTATUS_ACTIVE;
+ CONTAINER_INSERT(container, rowreq_ctx);
+ } else {
+ if (rowreq_ctx) {
+ snmp_log(LOG_ERR, "error setting index while loading "
+ "inetNetToMediaTable cache.\n");
+ inetNetToMediaTable_release_rowreq_ctx(rowreq_ctx);
+ } else
+ netsnmp_access_arp_entry_free(arp_entry);
+ }
+}
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before inetNetToMediaTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+inetNetToMediaTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_container_shutdown", "called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,
+ "bad params to inetNetToMediaTable_container_shutdown\n");
+ return;
+ }
+
+} /* inetNetToMediaTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement inetNetToMediaTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * inetNetToMediaTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+inetNetToMediaTable_container_load(netsnmp_container *container)
+{
+ netsnmp_container *arp_container;
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_cache_load", "called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the inetNetToMediaTable container.
+ * loop over your inetNetToMediaTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ arp_container =
+ netsnmp_access_arp_container_load(NULL,
+ NETSNMP_ACCESS_ARP_LOAD_NOFLAGS);
+ if (NULL == arp_container)
+ return MFD_RESOURCE_UNAVAILABLE; /* msg already logged */
+
+ /*
+ * we just got a fresh copy of data. snarf data
+ */
+ CONTAINER_FOR_EACH(arp_container,
+ (netsnmp_container_obj_func *) _snarf_arp_entry,
+ container);
+
+ /*
+ * free the container. we've either claimed each entry, or released it,
+ * so the access function doesn't need to clear the container.
+ */
+ netsnmp_access_arp_container_free(arp_container,
+ NETSNMP_ACCESS_ARP_FREE_DONT_CLEAR);
+
+ DEBUGMSGT(("verbose:inetNetToMediaTable:inetNetToMediaTable_cache_load", "%d records\n", CONTAINER_SIZE(container)));
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+inetNetToMediaTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_container_free", "called\n"));
+
+ /*
+ * TODO:380:M: Free inetNetToMediaTable container data.
+ */
+} /* inetNetToMediaTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+inetNetToMediaTable_row_prep(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_row_prep",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* inetNetToMediaTable_row_prep */
+
+/*
+ * TODO:420:r: Implement inetNetToMediaTable index validation.
+ */
+/*---------------------------------------------------------------------
+ * IP-MIB::inetNetToMediaEntry.inetNetToMediaIfIndex
+ * inetNetToMediaIfIndex is subid 1 of inetNetToMediaEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.2.1.4.35.1.1
+ * Description:
+The index value which uniquely identifies the interface to
+ which this entry is applicable. The interface identified by
+ a particular value of this index is the same interface as
+ identified by the same value of the IF-MIB's ifIndex.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 1 hashint 1
+ * settable 0
+ * hint: d
+ *
+ * Ranges: 1 - 2147483647;
+ *
+ * Its syntax is InterfaceIndex (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ *
+ *
+ *
+ * NOTE: NODE inetNetToMediaIfIndex IS NOT ACCESSIBLE
+ *
+ *
+ */
+/**
+ * check validity of inetNetToMediaIfIndex index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * inetNetToMediaTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ * The value is in (one of) the range set(s): 1 - 2147483647
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+inetNetToMediaIfIndex_check_index(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaIfIndex_check_index", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check inetNetToMediaTable index inetNetToMediaIfIndex.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.inetNetToMediaIfIndex)
+ */
+
+ return MFD_SUCCESS; /* inetNetToMediaIfIndex index ok */
+} /* inetNetToMediaIfIndex_check_index */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::inetNetToMediaEntry.inetNetToMediaNetAddressType
+ * inetNetToMediaNetAddressType is subid 2 of inetNetToMediaEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.2.1.4.35.1.2
+ * Description:
+The type of inetNetToMediaNetAddress.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 1 hasdefval 0
+ * readable 0 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 5/8. Values: unknown(0), ipv4(1), ipv6(2), ipv4z(3), ipv6z(4), dns(16)
+ *
+ * Its syntax is InetAddressType (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ *
+ *
+ *
+ * NOTE: NODE inetNetToMediaNetAddressType IS NOT ACCESSIBLE
+ *
+ *
+ */
+/**
+ * check validity of inetNetToMediaNetAddressType index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * inetNetToMediaTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ * The value is one of unknown(0), ipv4(1), ipv6(2), ipv4z(3), ipv6z(4), dns(16)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+inetNetToMediaNetAddressType_check_index(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaNetAddressType_check_index", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check inetNetToMediaTable index inetNetToMediaNetAddressType.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.inetNetToMediaNetAddressType)
+ */
+
+ return MFD_SUCCESS; /* inetNetToMediaNetAddressType index ok */
+} /* inetNetToMediaNetAddressType_check_index */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::inetNetToMediaEntry.inetNetToMediaNetAddress
+ * inetNetToMediaNetAddress is subid 3 of inetNetToMediaEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.2.1.4.35.1.3
+ * Description:
+The IP Address corresponding to the media-dependent
+ `physical' address. The address type of this object is
+ specified in inetNetToMediaAddressType.
+
+
+ Implementors need to be aware that if the size of
+ inetNetToMediaNetAddress exceeds 115 octets then OIDS of
+ instances of columns in this row will have more than 128
+ sub-identifiers and cannot be accessed using SNMPv1, SNMPv2c
+ or SNMPv3.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is InetAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ *
+ *
+ *
+ * NOTE: NODE inetNetToMediaNetAddress IS NOT ACCESSIBLE
+ *
+ *
+ */
+/**
+ * check validity of inetNetToMediaNetAddress index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * inetNetToMediaTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ * The length is in (one of) the range set(s): 0 - 255
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+inetNetToMediaNetAddress_check_index(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaNetAddress_check_index", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check inetNetToMediaTable index inetNetToMediaNetAddress.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.inetNetToMediaNetAddress)
+ */
+
+ return MFD_SUCCESS; /* inetNetToMediaNetAddress index ok */
+} /* inetNetToMediaNetAddress_check_index */
+
+/**
+ * verify specified index is valid.
+ *
+ * This check is independent of whether or not the values specified for
+ * the columns of the new row are valid. Column values and row consistency
+ * will be checked later. At this point, only the index values should be
+ * checked.
+ *
+ * All of the individual index validation functions have been called, so this
+ * is the place to make sure they are valid as a whole when combined. If
+ * you only have one index, then you probably don't need to do anything else
+ * here.
+ *
+ * @note Keep in mind that if the indexes refer to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ *
+ * @param inetNetToMediaTable_reg
+ * Pointer to the user registration data
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_CANNOT_CREATE_NOW : index not valid right now
+ * @retval MFD_CANNOT_CREATE_EVER : index never valid
+ */
+int
+inetNetToMediaTable_validate_index(inetNetToMediaTable_registration *
+ inetNetToMediaTable_reg,
+ inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_validate_index", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:430:M: |-> Validate potential inetNetToMediaTable index.
+ */
+ if (1) {
+ snmp_log(LOG_WARNING, "invalid index for a new row in the "
+ "inetNetToMediaTable table.\n");
+ /*
+ * determine failure type.
+ *
+ * If the index could not ever be created, return MFD_NOT_EVER
+ * If the index can not be created under the present circumstances
+ * (even though it could be created under other circumstances),
+ * return MFD_NOT_NOW.
+ */
+ if (0) {
+ return MFD_CANNOT_CREATE_EVER;
+ } else {
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ }
+
+ return rc;
+} /* inetNetToMediaTable_validate_index */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h
new file mode 100644
index 0000000000..d1638cf51f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_data_access.h
@@ -0,0 +1,84 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: inetNetToMediaTable_data_access.h 13759 2005-12-01 00:45:50Z rstory $
+ */
+#ifndef INETNETTOMEDIATABLE_DATA_ACCESS_H
+#define INETNETTOMEDIATABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetNetToMediaTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::inetNetToMediaTable is subid 35 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.35, length: 8
+ */
+
+
+ int
+ inetNetToMediaTable_init_data(inetNetToMediaTable_registration *
+ inetNetToMediaTable_reg);
+
+
+ /*
+ * TODO:180:o: Review inetNetToMediaTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define INETNETTOMEDIATABLE_CACHE_TIMEOUT 60
+
+ void inetNetToMediaTable_container_init(netsnmp_container
+ **container_ptr_ptr,
+ netsnmp_cache *
+ cache);
+ void
+ inetNetToMediaTable_container_shutdown(netsnmp_container
+ *container_ptr);
+
+ int inetNetToMediaTable_container_load(netsnmp_container
+ *container);
+ void inetNetToMediaTable_container_free(netsnmp_container
+ *container);
+
+ int inetNetToMediaTable_cache_load(netsnmp_container
+ *container);
+ void inetNetToMediaTable_cache_free(netsnmp_container
+ *container);
+
+ int
+ inetNetToMediaTable_row_prep(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ inetNetToMediaTable_validate_index(inetNetToMediaTable_registration
+ * inetNetToMediaTable_reg,
+ inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+ int inetNetToMediaIfIndex_check_index(inetNetToMediaTable_rowreq_ctx * rowreq_ctx); /* internal */
+ int inetNetToMediaNetAddressType_check_index(inetNetToMediaTable_rowreq_ctx * rowreq_ctx); /* internal */
+ int inetNetToMediaNetAddress_check_index(inetNetToMediaTable_rowreq_ctx * rowreq_ctx); /* internal */
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* INETNETTOMEDIATABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c
new file mode 100644
index 0000000000..33393090b7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c
@@ -0,0 +1,1994 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: inetNetToMediaTable_interface.c 15781 2007-01-23 22:55:06Z rstory $
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "inetNetToMediaTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "inetNetToMediaTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table inetNetToMediaTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::inetNetToMediaTable is subid 35 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.35, length: 8
+ */
+typedef struct inetNetToMediaTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ inetNetToMediaTable_registration *user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} inetNetToMediaTable_interface_ctx;
+
+static inetNetToMediaTable_interface_ctx inetNetToMediaTable_if_ctx;
+
+static void
+ _inetNetToMediaTable_container_init(inetNetToMediaTable_interface_ctx *
+ if_ctx);
+static void
+ _inetNetToMediaTable_container_shutdown(inetNetToMediaTable_interface_ctx *
+ if_ctx);
+
+
+netsnmp_container *
+inetNetToMediaTable_container_get(void)
+{
+ return inetNetToMediaTable_if_ctx.container;
+}
+
+inetNetToMediaTable_registration *
+inetNetToMediaTable_registration_get(void)
+{
+ return inetNetToMediaTable_if_ctx.user_ctx;
+}
+
+inetNetToMediaTable_registration *
+inetNetToMediaTable_registration_set(inetNetToMediaTable_registration *
+ newreg)
+{
+ inetNetToMediaTable_registration *old =
+ inetNetToMediaTable_if_ctx.user_ctx;
+ inetNetToMediaTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+inetNetToMediaTable_container_size(void)
+{
+ return CONTAINER_SIZE(inetNetToMediaTable_if_ctx.container);
+}
+
+u_int
+inetNetToMediaTable_dirty_get(void)
+{
+ return inetNetToMediaTable_if_ctx.table_dirty;
+}
+
+void
+inetNetToMediaTable_dirty_set(u_int status)
+{
+ DEBUGMSGTL(("inetNetToMediaTable:inetNetToMediaTable_dirty_set",
+ "called. was %d, now %d\n",
+ inetNetToMediaTable_if_ctx.table_dirty, status));
+ inetNetToMediaTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_inetNetToMediaTable_pre_request;
+static Netsnmp_Node_Handler _mfd_inetNetToMediaTable_post_request;
+static Netsnmp_Node_Handler _mfd_inetNetToMediaTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_inetNetToMediaTable_get_values;
+static Netsnmp_Node_Handler _mfd_inetNetToMediaTable_check_objects;
+static Netsnmp_Node_Handler _mfd_inetNetToMediaTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_inetNetToMediaTable_set_values;
+static Netsnmp_Node_Handler _mfd_inetNetToMediaTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_inetNetToMediaTable_undo_values;
+static Netsnmp_Node_Handler _mfd_inetNetToMediaTable_commit;
+static Netsnmp_Node_Handler _mfd_inetNetToMediaTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_inetNetToMediaTable_irreversible_commit;
+static Netsnmp_Node_Handler _mfd_inetNetToMediaTable_check_dependencies;
+
+NETSNMP_STATIC_INLINE int
+ _inetNetToMediaTable_undo_column(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx,
+ netsnmp_variable_list *
+ var, int column);
+
+NETSNMP_STATIC_INLINE int
+ _inetNetToMediaTable_check_indexes(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx);
+
+/**
+ * @internal
+ * Initialize the table inetNetToMediaTable
+ * (Define its contents and how it's structured)
+ */
+void
+_inetNetToMediaTable_initialize_interface(inetNetToMediaTable_registration
+ * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &inetNetToMediaTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info =
+ &inetNetToMediaTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_inetNetToMediaTable_initialize_interface", "called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for inetNetToMediaTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
+ /** index: inetNetToMediaIfIndex */
+ ASN_INTEGER,
+ /** index: inetNetToMediaNetAddressType */
+ ASN_OCTET_STR,
+ /** index: inetNetToMediaNetAddress */
+ 0);
+
+ /*
+ * Define the minimum and maximum accessible columns. This
+ * optimizes retrival.
+ */
+ tbl_info->min_column = INETNETTOMEDIATABLE_MIN_COL;
+ tbl_info->max_column = INETNETTOMEDIATABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ inetNetToMediaTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ inetNetToMediaTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _inetNetToMediaTable_container_init(&inetNetToMediaTable_if_ctx);
+ if (NULL == inetNetToMediaTable_if_ctx.container) {
+ snmp_log(LOG_ERR,
+ "could not initialize container for inetNetToMediaTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup =
+ _mfd_inetNetToMediaTable_object_lookup;
+ access_multiplexer->get_values = _mfd_inetNetToMediaTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_inetNetToMediaTable_pre_request;
+ access_multiplexer->post_request =
+ _mfd_inetNetToMediaTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks =
+ _mfd_inetNetToMediaTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_inetNetToMediaTable_undo_setup;
+ access_multiplexer->undo_cleanup =
+ _mfd_inetNetToMediaTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_inetNetToMediaTable_set_values;
+ access_multiplexer->undo_sets = _mfd_inetNetToMediaTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_inetNetToMediaTable_commit;
+ access_multiplexer->undo_commit = _mfd_inetNetToMediaTable_undo_commit;
+ access_multiplexer->irreversible_commit =
+ _mfd_inetNetToMediaTable_irreversible_commit;
+
+ /*
+ * REQUIRED for tables with dependencies
+ */
+ access_multiplexer->consistency_checks =
+ _mfd_inetNetToMediaTable_check_dependencies;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("inetNetToMediaTable:init_inetNetToMediaTable",
+ "Registering inetNetToMediaTable as a mibs-for-dummies table.\n"));
+ handler =
+ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo =
+ netsnmp_handler_registration_create("inetNetToMediaTable", handler,
+ inetNetToMediaTable_oid,
+ inetNetToMediaTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE);
+ if (NULL == reginfo) {
+ snmp_log(LOG_ERR, "error registering table inetNetToMediaTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &inetNetToMediaTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if (access_multiplexer->object_lookup)
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if (access_multiplexer->set_values)
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if (access_multiplexer->irreversible_commit)
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if (access_multiplexer->object_syntax_checks)
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if (access_multiplexer->pre_request)
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if (access_multiplexer->post_request)
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if (access_multiplexer->undo_setup)
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if (access_multiplexer->undo_cleanup)
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if (access_multiplexer->undo_sets)
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if (access_multiplexer->row_creation)
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if (access_multiplexer->consistency_checks)
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if (access_multiplexer->commit)
+ mfd_modes |= BABY_STEP_COMMIT;
+ if (access_multiplexer->undo_commit)
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ inetNetToMediaTable_if_ctx.
+ container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if (NULL != inetNetToMediaTable_if_ctx.cache) {
+ handler =
+ netsnmp_cache_handler_get(inetNetToMediaTable_if_ctx.cache);
+ netsnmp_inject_handler(reginfo, handler);
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _inetNetToMediaTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table inetNetToMediaTable
+ */
+void
+_inetNetToMediaTable_shutdown_interface(inetNetToMediaTable_registration *
+ reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _inetNetToMediaTable_container_shutdown(&inetNetToMediaTable_if_ctx);
+}
+
+void
+inetNetToMediaTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ inetNetToMediaTable_if_ctx.tbl_info.valid_columns = vc;
+} /* inetNetToMediaTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+inetNetToMediaTable_index_to_oid(netsnmp_index * oid_idx,
+ inetNetToMediaTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * inetNetToMediaIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ netsnmp_variable_list var_inetNetToMediaIfIndex;
+ /*
+ * inetNetToMediaNetAddressType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ netsnmp_variable_list var_inetNetToMediaNetAddressType;
+ /*
+ * inetNetToMediaNetAddress(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ netsnmp_variable_list var_inetNetToMediaNetAddress;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_inetNetToMediaIfIndex, 0x00,
+ sizeof(var_inetNetToMediaIfIndex));
+ var_inetNetToMediaIfIndex.type = ASN_INTEGER;
+ memset(&var_inetNetToMediaNetAddressType, 0x00,
+ sizeof(var_inetNetToMediaNetAddressType));
+ var_inetNetToMediaNetAddressType.type = ASN_INTEGER;
+ memset(&var_inetNetToMediaNetAddress, 0x00,
+ sizeof(var_inetNetToMediaNetAddress));
+ var_inetNetToMediaNetAddress.type = ASN_OCTET_STR;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_inetNetToMediaIfIndex.next_variable =
+ &var_inetNetToMediaNetAddressType;
+ var_inetNetToMediaNetAddressType.next_variable =
+ &var_inetNetToMediaNetAddress;
+ var_inetNetToMediaNetAddress.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_index_to_oid", "called\n"));
+
+ /*
+ * inetNetToMediaIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ snmp_set_var_value(&var_inetNetToMediaIfIndex,
+ (u_char *) & mib_idx->inetNetToMediaIfIndex,
+ sizeof(mib_idx->inetNetToMediaIfIndex));
+
+ /*
+ * inetNetToMediaNetAddressType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ snmp_set_var_value(&var_inetNetToMediaNetAddressType,
+ (u_char *) & mib_idx->inetNetToMediaNetAddressType,
+ sizeof(mib_idx->inetNetToMediaNetAddressType));
+
+ /*
+ * inetNetToMediaNetAddress(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ snmp_set_var_value(&var_inetNetToMediaNetAddress,
+ (u_char *) & mib_idx->inetNetToMediaNetAddress,
+ mib_idx->inetNetToMediaNetAddress_len *
+ sizeof(mib_idx->inetNetToMediaNetAddress[0]));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_inetNetToMediaIfIndex);
+ if (err)
+ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_inetNetToMediaIfIndex);
+
+ return err;
+} /* inetNetToMediaTable_index_to_oid */
+
+/**
+ * extract inetNetToMediaTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+inetNetToMediaTable_index_from_oid(netsnmp_index * oid_idx,
+ inetNetToMediaTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * inetNetToMediaIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ netsnmp_variable_list var_inetNetToMediaIfIndex;
+ /*
+ * inetNetToMediaNetAddressType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ netsnmp_variable_list var_inetNetToMediaNetAddressType;
+ /*
+ * inetNetToMediaNetAddress(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ netsnmp_variable_list var_inetNetToMediaNetAddress;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_inetNetToMediaIfIndex, 0x00,
+ sizeof(var_inetNetToMediaIfIndex));
+ var_inetNetToMediaIfIndex.type = ASN_INTEGER;
+ memset(&var_inetNetToMediaNetAddressType, 0x00,
+ sizeof(var_inetNetToMediaNetAddressType));
+ var_inetNetToMediaNetAddressType.type = ASN_INTEGER;
+ memset(&var_inetNetToMediaNetAddress, 0x00,
+ sizeof(var_inetNetToMediaNetAddress));
+ var_inetNetToMediaNetAddress.type = ASN_OCTET_STR;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_inetNetToMediaIfIndex.next_variable =
+ &var_inetNetToMediaNetAddressType;
+ var_inetNetToMediaNetAddressType.next_variable =
+ &var_inetNetToMediaNetAddress;
+ var_inetNetToMediaNetAddress.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_index_from_oid", "called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
+ &var_inetNetToMediaIfIndex);
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->inetNetToMediaIfIndex =
+ *((long *) var_inetNetToMediaIfIndex.val.string);
+ mib_idx->inetNetToMediaNetAddressType =
+ *((u_long *) var_inetNetToMediaNetAddressType.val.string);
+ /*
+ * NOTE: val_len is in bytes, inetNetToMediaNetAddress_len might not be
+ */
+ if (var_inetNetToMediaNetAddress.val_len >
+ sizeof(mib_idx->inetNetToMediaNetAddress))
+ err = SNMP_ERR_GENERR;
+ else {
+ memcpy(mib_idx->inetNetToMediaNetAddress,
+ var_inetNetToMediaNetAddress.val.string,
+ var_inetNetToMediaNetAddress.val_len);
+ mib_idx->inetNetToMediaNetAddress_len =
+ var_inetNetToMediaNetAddress.val_len /
+ sizeof(mib_idx->inetNetToMediaNetAddress[0]);
+ }
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_inetNetToMediaIfIndex);
+
+ return err;
+} /* inetNetToMediaTable_index_from_oid */
+
+
+/*
+ *********************************************************************
+ * @internal
+ * allocate resources for a inetNetToMediaTable_rowreq_ctx
+ */
+inetNetToMediaTable_rowreq_ctx *
+inetNetToMediaTable_allocate_rowreq_ctx(inetNetToMediaTable_data * data,
+ void *user_init_ctx)
+{
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(inetNetToMediaTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:inetNetToMediaTable_allocate_rowreq_ctx", "called\n"));
+
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+ "inetNetToMediaTable_rowreq_ctx.\n");
+ return NULL;
+ } else {
+ if (NULL != data) {
+ /*
+ * track if we got data from user
+ */
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DATA_FROM_USER;
+ rowreq_ctx->data = data;
+ } else if (NULL ==
+ (rowreq_ctx->data =
+ inetNetToMediaTable_allocate_data())) {
+ SNMP_FREE(rowreq_ctx);
+ return NULL;
+ }
+ }
+
+ /*
+ * undo context will be allocated when needed (in *_undo_setup)
+ */
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->inetNetToMediaTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if (SNMPERR_SUCCESS !=
+ inetNetToMediaTable_rowreq_ctx_init(rowreq_ctx,
+ user_init_ctx)) {
+ inetNetToMediaTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* inetNetToMediaTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a inetNetToMediaTable_rowreq_ctx
+ */
+void
+inetNetToMediaTable_release_rowreq_ctx(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:inetNetToMediaTable:inetNetToMediaTable_release_rowreq_ctx", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ inetNetToMediaTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ /*
+ * for non-transient data, don't free data we got from the user
+ */
+ if ((rowreq_ctx->data) &&
+ !(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER))
+ inetNetToMediaTable_release_data(rowreq_ctx->data);
+
+ if (rowreq_ctx->undo)
+ inetNetToMediaTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* inetNetToMediaTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_inetNetToMediaTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_pre_request", "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:inetNetToMediaTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = inetNetToMediaTable_pre_request(inetNetToMediaTable_if_ctx.
+ user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("inetNetToMediaTable", "error %d from "
+ "inetNetToMediaTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetNetToMediaTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_inetNetToMediaTable_post_request(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_post_request", "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ inetNetToMediaTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:inetNetToMediaTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && inetNetToMediaTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING,
+ "inetNetToMediaTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = inetNetToMediaTable_post_request(inetNetToMediaTable_if_ctx.
+ user_ctx, packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("inetNetToMediaTable", "error %d from "
+ "inetNetToMediaTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetNetToMediaTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static inetNetToMediaTable_rowreq_ctx *
+_mfd_inetNetToMediaTable_rowreq_from_index(netsnmp_index * oid_idx,
+ int *rc_ptr)
+{
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx;
+ inetNetToMediaTable_mib_index mib_idx;
+ int rc;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_rowreq_from_index", "called\n"));
+
+ if (NULL == rc_ptr)
+ rc_ptr = &rc;
+ *rc_ptr = MFD_SUCCESS;
+
+ memset(&mib_idx, 0x0, sizeof(mib_idx));
+
+ /*
+ * try to parse oid
+ */
+ *rc_ptr = inetNetToMediaTable_index_from_oid(oid_idx, &mib_idx);
+ if (MFD_SUCCESS != *rc_ptr) {
+ DEBUGMSGT(("inetNetToMediaTable", "error parsing index\n"));
+ return NULL;
+ }
+
+ /*
+ * allocate new context
+ */
+ rowreq_ctx = inetNetToMediaTable_allocate_rowreq_ctx(NULL, NULL);
+ if (NULL == rowreq_ctx) {
+ *rc_ptr = MFD_ERROR;
+ return NULL; /* msg already logged */
+ }
+
+ memcpy(&rowreq_ctx->tbl_idx, &mib_idx, sizeof(mib_idx));
+
+ /*
+ * check indexes
+ */
+ *rc_ptr = _inetNetToMediaTable_check_indexes(rowreq_ctx);
+ if (MFD_SUCCESS != *rc_ptr) {
+ netsnmp_assert((*rc_ptr == SNMP_ERR_NOCREATION) ||
+ (*rc_ptr == SNMP_ERR_INCONSISTENTNAME));
+ inetNetToMediaTable_release_rowreq_ctx(rowreq_ctx);
+ return NULL;
+ }
+
+ /*
+ * copy indexes
+ */
+ rowreq_ctx->oid_idx.len = oid_idx->len;
+ memcpy(rowreq_ctx->oid_idx.oids, oid_idx->oids,
+ oid_idx->len * sizeof(oid));
+
+ return rowreq_ctx;
+} /* _mfd_inetNetToMediaTable_rowreq_from_index */
+
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_inetNetToMediaTable_object_lookup(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_object_lookup", "called\n"));
+
+ /*
+ * get our context from mfd
+ * inetNetToMediaTable_interface_ctx *if_ctx =
+ * (inetNetToMediaTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if (NULL == rowreq_ctx) {
+ netsnmp_table_request_info *tblreq_info;
+ netsnmp_index oid_idx;
+
+ tblreq_info = netsnmp_extract_table_info(requests);
+ if (NULL == tblreq_info) {
+ snmp_log(LOG_ERR, "request had no table info\n");
+ return MFD_ERROR;
+ }
+
+ /*
+ * try create rowreq
+ */
+ oid_idx.oids = tblreq_info->index_oid;
+ oid_idx.len = tblreq_info->index_oid_len;
+
+ rowreq_ctx =
+ _mfd_inetNetToMediaTable_rowreq_from_index(&oid_idx, &rc);
+ if (MFD_SUCCESS == rc) {
+ netsnmp_assert(NULL != rowreq_ctx);
+ rowreq_ctx->rowreq_flags |= MFD_ROW_CREATED;
+ /*
+ * add rowreq_ctx to request data lists
+ */
+ netsnmp_container_table_row_insert(requests, (netsnmp_index *)
+ rowreq_ctx);
+ }
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ inetNetToMediaTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_inetNetToMediaTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_inetNetToMediaTable_get_column(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx, netsnmp_variable_list * var,
+ int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_get_column", "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * inetNetToMediaPhysAddress(4)/PhysAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ case COLUMN_INETNETTOMEDIAPHYSADDRESS:
+ var->type = ASN_OCTET_STR;
+ rc = inetNetToMediaPhysAddress_get(rowreq_ctx,
+ (char **) &var->val.string,
+ &var->val_len);
+ break;
+
+ /*
+ * inetNetToMediaLastUpdated(5)/TimeStamp/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_INETNETTOMEDIALASTUPDATED:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_TIMETICKS;
+ rc = inetNetToMediaLastUpdated_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * inetNetToMediaType(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_INETNETTOMEDIATYPE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = inetNetToMediaType_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * inetNetToMediaState(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_INETNETTOMEDIASTATE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = inetNetToMediaState_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * inetNetToMediaRowStatus(8)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_INETNETTOMEDIAROWSTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = inetNetToMediaRowStatus_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _inetNetToMediaTable_get_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _inetNetToMediaTable_get_column */
+
+int
+_mfd_inetNetToMediaTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ u_char *old_string;
+ void (*dataFreeHook) (void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_get_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if (NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ } else if (requests->requestvb->buf ==
+ requests->requestvb->val.string) {
+ if (requests->requestvb->val_len !=
+ sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _inetNetToMediaTable_get_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ if (MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ } else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if (rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if (old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if (dataFreeHook)
+ (*dataFreeHook) (old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetNetToMediaTable_get_values */
+
+NETSNMP_STATIC_INLINE int
+_inetNetToMediaTable_check_indexes(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_inetNetToMediaTable_check_indexes", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+
+ /*
+ * (INDEX) inetNetToMediaIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ /*
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((rowreq_ctx->tbl_idx.inetNetToMediaIfIndex < 1)
+ || (rowreq_ctx->tbl_idx.inetNetToMediaIfIndex > 2147483647))
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = inetNetToMediaIfIndex_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * (INDEX) inetNetToMediaNetAddressType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (rowreq_ctx->tbl_idx.inetNetToMediaNetAddressType !=
+ INETADDRESSTYPE_UNKNOWN)
+ && (rowreq_ctx->tbl_idx.inetNetToMediaNetAddressType !=
+ INETADDRESSTYPE_IPV4)
+ && (rowreq_ctx->tbl_idx.inetNetToMediaNetAddressType !=
+ INETADDRESSTYPE_IPV6)
+ && (rowreq_ctx->tbl_idx.inetNetToMediaNetAddressType !=
+ INETADDRESSTYPE_IPV4Z)
+ && (rowreq_ctx->tbl_idx.inetNetToMediaNetAddressType !=
+ INETADDRESSTYPE_IPV6Z)
+ && (rowreq_ctx->tbl_idx.inetNetToMediaNetAddressType !=
+ INETADDRESSTYPE_DNS)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = inetNetToMediaNetAddressType_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * (INDEX) inetNetToMediaNetAddress(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ /*
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((rowreq_ctx->tbl_idx.inetNetToMediaNetAddress_len < 0)
+ || (rowreq_ctx->tbl_idx.inetNetToMediaNetAddress_len > 255))
+ ) {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = inetNetToMediaNetAddress_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * if individual parts look ok, check them as a whole
+ */
+ return inetNetToMediaTable_validate_index(inetNetToMediaTable_if_ctx.
+ user_ctx, rowreq_ctx);
+} /* _inetNetToMediaTable_check_indexes */
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_inetNetToMediaTable_check_column(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx, netsnmp_variable_list * var,
+ int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_inetNetToMediaTable_check_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+ /*
+ * (INDEX) inetNetToMediaIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ case COLUMN_INETNETTOMEDIAIFINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /*
+ * (INDEX) inetNetToMediaNetAddressType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ case COLUMN_INETNETTOMEDIANETADDRESSTYPE:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /*
+ * (INDEX) inetNetToMediaNetAddress(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ case COLUMN_INETNETTOMEDIANETADDRESS:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /*
+ * inetNetToMediaPhysAddress(4)/PhysAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ case COLUMN_INETNETTOMEDIAPHYSADDRESS:
+ rc = netsnmp_check_vb_type(var, ASN_OCTET_STR);
+ /*
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((var->val_len < 0) || (var->val_len > 65535))
+ ) {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("inetNetToMediaTable:_inetNetToMediaTable_check_column:inetNetToMediaPhysAddress", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = inetNetToMediaPhysAddress_check_value(rowreq_ctx,
+ (char *) var->val.
+ string,
+ var->val_len);
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from inetNetToMediaPhysAddress_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * inetNetToMediaLastUpdated(5)/TimeStamp/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_INETNETTOMEDIALASTUPDATED:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * inetNetToMediaType(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_INETNETTOMEDIATYPE:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (*var->val.integer != INETNETTOMEDIATYPE_OTHER)
+ && (*var->val.integer != INETNETTOMEDIATYPE_INVALID)
+ && (*var->val.integer != INETNETTOMEDIATYPE_DYNAMIC)
+ && (*var->val.integer != INETNETTOMEDIATYPE_STATIC)
+ && (*var->val.integer != INETNETTOMEDIATYPE_LOCAL)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("inetNetToMediaTable:_inetNetToMediaTable_check_column:inetNetToMediaType", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = inetNetToMediaType_check_value(rowreq_ctx,
+ *((u_long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from inetNetToMediaType_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * inetNetToMediaState(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_INETNETTOMEDIASTATE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * inetNetToMediaRowStatus(8)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_INETNETTOMEDIAROWSTATUS:
+ rc = netsnmp_check_vb_rowstatus_value(var);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("inetNetToMediaTable:_inetNetToMediaTable_check_column:inetNetToMediaRowStatus", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = inetNetToMediaRowStatus_check_value(rowreq_ctx,
+ *((u_long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from inetNetToMediaRowStatus_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR,
+ "unknown column %d in _inetNetToMediaTable_check_column\n",
+ column);
+ }
+
+ return rc;
+} /* _inetNetToMediaTable_check_column */
+
+int
+_mfd_inetNetToMediaTable_check_objects(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_check_objects", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _inetNetToMediaTable_check_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetNetToMediaTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: check dependencies
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check dependencies wrapper
+ */
+static int
+_mfd_inetNetToMediaTable_check_dependencies(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_check_dependencies", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = inetNetToMediaTable_check_dependencies(rowreq_ctx);
+ if (rc) {
+ DEBUGMSGTL(("inetNetToMediaTable:mfd", "error %d from "
+ "inetNetToMediaTable_check_dependencies\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetNetToMediaTable_check_dependencies */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_inetNetToMediaTable_undo_setup_column(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_inetNetToMediaTable_undo_setup_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * inetNetToMediaPhysAddress(4)/PhysAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ case COLUMN_INETNETTOMEDIAPHYSADDRESS:
+ rowreq_ctx->column_set_flags |=
+ COLUMN_INETNETTOMEDIAPHYSADDRESS_FLAG;
+ rc = inetNetToMediaPhysAddress_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * inetNetToMediaType(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_INETNETTOMEDIATYPE:
+ rowreq_ctx->column_set_flags |= COLUMN_INETNETTOMEDIATYPE_FLAG;
+ rc = inetNetToMediaType_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * inetNetToMediaRowStatus(8)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_INETNETTOMEDIAROWSTATUS:
+ rowreq_ctx->column_set_flags |=
+ COLUMN_INETNETTOMEDIAROWSTATUS_FLAG;
+ rc = inetNetToMediaRowStatus_undo_setup(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _inetNetToMediaTable_undo_setup_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _inetNetToMediaTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_inetNetToMediaTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_undo_setup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = inetNetToMediaTable_allocate_data();
+ if (NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = inetNetToMediaTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("inetNetToMediaTable:mfd", "error %d from "
+ "inetNetToMediaTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ } else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info *tri;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _inetNetToMediaTable_undo_setup_column(rowreq_ctx,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("inetNetToMediaTable:mfd", "error %d from "
+ "inetNetToMediaTable_undo_setup_column\n",
+ rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetNetToMediaTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_inetNetToMediaTable_undo_cleanup(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_undo_cleanup", "called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = inetNetToMediaTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("inetNetToMediaTable:mfd", "error %d from "
+ "inetNetToMediaTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if (rowreq_ctx->undo) {
+ inetNetToMediaTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetNetToMediaTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_inetNetToMediaTable_set_column(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx, netsnmp_variable_list * var,
+ int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_inetNetToMediaTable_set_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * inetNetToMediaPhysAddress(4)/PhysAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ case COLUMN_INETNETTOMEDIAPHYSADDRESS:
+ rowreq_ctx->column_set_flags |=
+ COLUMN_INETNETTOMEDIAPHYSADDRESS_FLAG;
+ rc = inetNetToMediaPhysAddress_set(rowreq_ctx,
+ (char *) var->val.string,
+ var->val_len);
+ break;
+
+ /*
+ * inetNetToMediaType(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_INETNETTOMEDIATYPE:
+ rowreq_ctx->column_set_flags |= COLUMN_INETNETTOMEDIATYPE_FLAG;
+ rc = inetNetToMediaType_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ /*
+ * inetNetToMediaRowStatus(8)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_INETNETTOMEDIAROWSTATUS:
+ rowreq_ctx->column_set_flags |=
+ COLUMN_INETNETTOMEDIAROWSTATUS_FLAG;
+ rc = inetNetToMediaRowStatus_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _inetNetToMediaTable_set_column\n",
+ column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _inetNetToMediaTable_set_column */
+
+int
+_mfd_inetNetToMediaTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_set_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _inetNetToMediaTable_set_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("inetNetToMediaTable:mfd", "error %d from "
+ "inetNetToMediaTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetNetToMediaTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_inetNetToMediaTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = inetNetToMediaTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("inetNetToMediaTable:mfd", "error %d from "
+ "inetNetToMediaTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ inetNetToMediaTable_dirty_set(inetNetToMediaTable_dirty_get() + 1); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_inetNetToMediaTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_undo_commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = inetNetToMediaTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if (d)
+ inetNetToMediaTable_dirty_set(d - 1);
+ }
+
+ rc = inetNetToMediaTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("inetNetToMediaTable:mfd", "error %d from "
+ "inetNetToMediaTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING,
+ "inetNetToMediaTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetNetToMediaTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_inetNetToMediaTable_undo_column(inetNetToMediaTable_rowreq_ctx *
+ rowreq_ctx, netsnmp_variable_list * var,
+ int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_inetNetToMediaTable_undo_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * inetNetToMediaPhysAddress(4)/PhysAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ case COLUMN_INETNETTOMEDIAPHYSADDRESS:
+ rc = inetNetToMediaPhysAddress_undo(rowreq_ctx);
+ break;
+
+ /*
+ * inetNetToMediaType(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_INETNETTOMEDIATYPE:
+ rc = inetNetToMediaType_undo(rowreq_ctx);
+ break;
+
+ /*
+ * inetNetToMediaRowStatus(8)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_INETNETTOMEDIAROWSTATUS:
+ rc = inetNetToMediaRowStatus_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _inetNetToMediaTable_undo_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _inetNetToMediaTable_undo_column */
+
+int
+_mfd_inetNetToMediaTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_undo_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = inetNetToMediaTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("inetNetToMediaTable:mfd", "error %d from "
+ "inetNetToMediaTable_undo\n", rc));
+ }
+
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _inetNetToMediaTable_undo_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("inetNetToMediaTable:mfd", "error %d from "
+ "inetNetToMediaTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetNetToMediaTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_inetNetToMediaTable_irreversible_commit(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info, netsnmp_request_info
+ *requests)
+{
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_mfd_inetNetToMediaTable_irreversible:commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(inetNetToMediaTable_if_ctx.container, rowreq_ctx);
+ } else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_CREATED;
+ CONTAINER_INSERT(inetNetToMediaTable_if_ctx.container,
+ rowreq_ctx);
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_inetNetToMediaTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache * cache, void *vmagic)
+{
+ DEBUGTRACE;
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR,
+ "invalid cache for inetNetToMediaTable_cache_load\n");
+ return -1;
+ }
+ DEBUGMSGTL(("inetNetToMediaTable/cache", "inetNetToMedia_load %p/%p\n",
+ cache, cache->magic));
+
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return inetNetToMediaTable_container_load((netsnmp_container *) cache->
+ magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache * cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_cache_free", "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR,
+ "invalid cache in inetNetToMediaTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container *) cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
+ void *context)
+{
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_container_item_free",
+ "called\n"));
+
+ if (NULL == rowreq_ctx)
+ return;
+
+ inetNetToMediaTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_container_free",
+ "called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR,
+ "invalid container in inetNetToMediaTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ inetNetToMediaTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *) _container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_inetNetToMediaTable_container_init(inetNetToMediaTable_interface_ctx *
+ if_ctx)
+{
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_inetNetToMediaTable_container_init", "called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ inetNetToMediaTable_oid,
+ inetNetToMediaTable_oid_size);
+
+ if (NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR,
+ "error creating cache for inetNetToMediaTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ inetNetToMediaTable_container_init(&if_ctx->container, if_ctx->cache);
+ if (NULL == if_ctx->container)
+ if_ctx->container =
+ netsnmp_container_find("inetNetToMediaTable:table_container");
+ if (NULL == if_ctx->container) {
+ snmp_log(LOG_ERR, "error creating container in "
+ "inetNetToMediaTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void *) if_ctx->container;
+} /* _inetNetToMediaTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_inetNetToMediaTable_container_shutdown(inetNetToMediaTable_interface_ctx *
+ if_ctx)
+{
+ DEBUGMSGTL(("internal:inetNetToMediaTable:_inetNetToMediaTable_container_shutdown", "called\n"));
+
+ inetNetToMediaTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _inetNetToMediaTable_container_shutdown */
+
+
+inetNetToMediaTable_rowreq_ctx *
+inetNetToMediaTable_row_find_by_mib_index(inetNetToMediaTable_mib_index *
+ mib_idx)
+{
+ inetNetToMediaTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = inetNetToMediaTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx =
+ CONTAINER_FIND(inetNetToMediaTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h
new file mode 100644
index 0000000000..a111a23abe
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.h
@@ -0,0 +1,103 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: inetNetToMediaTable_interface.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/** @ingroup interface Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef INETNETTOMEDIATABLE_INTERFACE_H
+#define INETNETTOMEDIATABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "inetNetToMediaTable.h"
+
+
+ /*
+ ********************************************************************
+ * Table declarations
+ */
+
+ /*
+ * PUBLIC interface initialization routine
+ */
+ void
+ _inetNetToMediaTable_initialize_interface
+ (inetNetToMediaTable_registration * user_ctx, u_long flags);
+ void
+ _inetNetToMediaTable_shutdown_interface
+ (inetNetToMediaTable_registration * user_ctx);
+
+ inetNetToMediaTable_registration
+ * inetNetToMediaTable_registration_get(void);
+
+ inetNetToMediaTable_registration
+ * inetNetToMediaTable_registration_set
+ (inetNetToMediaTable_registration * newreg);
+
+ netsnmp_container *inetNetToMediaTable_container_get(void);
+ int inetNetToMediaTable_container_size(void);
+
+ u_int inetNetToMediaTable_dirty_get(void);
+ void inetNetToMediaTable_dirty_set(u_int status);
+
+ inetNetToMediaTable_rowreq_ctx
+ * inetNetToMediaTable_allocate_rowreq_ctx(inetNetToMediaTable_data
+ *, void *);
+ void
+ inetNetToMediaTable_release_rowreq_ctx
+ (inetNetToMediaTable_rowreq_ctx * rowreq_ctx);
+
+ int inetNetToMediaTable_index_to_oid(netsnmp_index *
+ oid_idx,
+ inetNetToMediaTable_mib_index
+ * mib_idx);
+ int inetNetToMediaTable_index_from_oid(netsnmp_index *
+ oid_idx,
+ inetNetToMediaTable_mib_index
+ * mib_idx);
+
+ /*
+ * access to certain internals. use with caution!
+ */
+ void
+ inetNetToMediaTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* INETNETTOMEDIATABLE_INTERFACE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable.h
new file mode 100644
index 0000000000..abfa1000c1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable.h
@@ -0,0 +1,5 @@
+/*
+ * module to include the modules
+ */
+
+config_require(ip-mib/ipAddressPrefixTable/ipAddressPrefixTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable.c
new file mode 100644
index 0000000000..ecd26a050e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable.c
@@ -0,0 +1,673 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ipAddressPrefixTable.c 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/** \page MFD helper for ipAddressPrefixTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipAddressPrefixTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "ipAddressPrefixTable_interface.h"
+
+oid ipAddressPrefixTable_oid[] = { IPADDRESSPREFIXTABLE_OID };
+int ipAddressPrefixTable_oid_size =
+OID_LENGTH(ipAddressPrefixTable_oid);
+
+ipAddressPrefixTable_registration ipAddressPrefixTable_user_context;
+
+void initialize_table_ipAddressPrefixTable(void);
+void shutdown_table_ipAddressPrefixTable(void);
+
+
+/**
+ * Initializes the ipAddressPrefixTable module
+ */
+void
+init_ipAddressPrefixTable(void)
+{
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:init_ipAddressPrefixTable",
+ "called\n"));
+
+ /*
+ * TODO:300:o: Perform ipAddressPrefixTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("ipAddressPrefixTable"))
+ initialize_table_ipAddressPrefixTable();
+
+} /* init_ipAddressPrefixTable */
+
+/**
+ * Shut-down the ipAddressPrefixTable module (agent is exiting)
+ */
+void
+shutdown_ipAddressPrefixTable(void)
+{
+ if (should_init("ipAddressPrefixTable"))
+ shutdown_table_ipAddressPrefixTable();
+
+}
+
+/**
+ * Initialize the table ipAddressPrefixTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_ipAddressPrefixTable(void)
+{
+ ipAddressPrefixTable_registration *user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:initialize_table_ipAddressPrefixTable", "called\n"));
+
+ /*
+ * TODO:301:o: Perform ipAddressPrefixTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize ipAddressPrefixTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context =
+ netsnmp_create_data_list("ipAddressPrefixTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _ipAddressPrefixTable_initialize_interface(user_context, flags);
+} /* initialize_table_ipAddressPrefixTable */
+
+/**
+ * Shutdown the table ipAddressPrefixTable
+ */
+void
+shutdown_table_ipAddressPrefixTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _ipAddressPrefixTable_shutdown_interface
+ (&ipAddressPrefixTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+ipAddressPrefixTable_rowreq_ctx_init(ipAddressPrefixTable_rowreq_ctx *
+ rowreq_ctx, void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_rowreq_ctx_init", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra ipAddressPrefixTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefixTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void
+ipAddressPrefixTable_rowreq_ctx_cleanup(ipAddressPrefixTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_rowreq_ctx_cleanup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra ipAddressPrefixTable rowreq cleanup.
+ */
+} /* ipAddressPrefixTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+ipAddressPrefixTable_pre_request(ipAddressPrefixTable_registration *
+ user_context)
+{
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_pre_request", "called\n"));
+
+ /*
+ * TODO:510:o: Perform ipAddressPrefixTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefixTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+ipAddressPrefixTable_post_request(ipAddressPrefixTable_registration *
+ user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_post_request", "called\n"));
+
+ /*
+ * TODO:511:o: Perform ipAddressPrefixTable post-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefixTable_post_request */
+
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressPrefixTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipAddressPrefixTable is subid 32 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.32, length: 8
+ */
+
+/*
+ * ---------------------------------------------------------------------
+ * * TODO:200:r: Implement ipAddressPrefixTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param ipAddressPrefixIfIndex_val
+ * @param ipAddressPrefixType_val
+ * @param ipAddressPrefixPrefix_val_ptr
+ * @param ipAddressPrefixPrefix_val_ptr_len
+ * @param ipAddressPrefixLength_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+ipAddressPrefixTable_indexes_set_tbl_idx(ipAddressPrefixTable_mib_index *
+ tbl_idx,
+ long ipAddressPrefixIfIndex_val,
+ u_long ipAddressPrefixType_val,
+ char
+ *ipAddressPrefixPrefix_val_ptr,
+ size_t
+ ipAddressPrefixPrefix_val_ptr_len,
+ u_long ipAddressPrefixLength_val)
+{
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_indexes_set_tbl_idx", "called\n"));
+
+ /*
+ * ipAddressPrefixIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ tbl_idx->ipAddressPrefixIfIndex = ipAddressPrefixIfIndex_val;
+
+ /*
+ * ipAddressPrefixType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ tbl_idx->ipAddressPrefixType = ipAddressPrefixType_val;
+
+ /*
+ * ipAddressPrefixPrefix(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ tbl_idx->ipAddressPrefixPrefix_len = sizeof(tbl_idx->ipAddressPrefixPrefix) / sizeof(tbl_idx->ipAddressPrefixPrefix[0]); /* max length */
+ /*
+ * make sure there is enough space for ipAddressPrefixPrefix data
+ */
+ if ((NULL == tbl_idx->ipAddressPrefixPrefix) ||
+ (tbl_idx->ipAddressPrefixPrefix_len <
+ (ipAddressPrefixPrefix_val_ptr_len))) {
+ snmp_log(LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ tbl_idx->ipAddressPrefixPrefix_len = ipAddressPrefixPrefix_val_ptr_len;
+ memcpy(tbl_idx->ipAddressPrefixPrefix, ipAddressPrefixPrefix_val_ptr,
+ ipAddressPrefixPrefix_val_ptr_len *
+ sizeof(ipAddressPrefixPrefix_val_ptr[0]));
+
+ /*
+ * ipAddressPrefixLength(4)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
+ */
+ tbl_idx->ipAddressPrefixLength = ipAddressPrefixLength_val;
+
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefixTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+ipAddressPrefixTable_indexes_set(ipAddressPrefixTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipAddressPrefixIfIndex_val,
+ u_long ipAddressPrefixType_val,
+ char *ipAddressPrefixPrefix_val_ptr,
+ size_t ipAddressPrefixPrefix_val_ptr_len,
+ u_long ipAddressPrefixLength_val)
+{
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_indexes_set", "called\n"));
+
+ if (MFD_SUCCESS !=
+ ipAddressPrefixTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+ ipAddressPrefixIfIndex_val,
+ ipAddressPrefixType_val,
+ ipAddressPrefixPrefix_val_ptr,
+ ipAddressPrefixPrefix_val_ptr_len,
+ ipAddressPrefixLength_val))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if (0 != ipAddressPrefixTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefixTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressPrefixEntry.ipAddressPrefixOrigin
+ * ipAddressPrefixOrigin is subid 5 of ipAddressPrefixEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.32.1.5
+ * Description:
+The origin of this prefix.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 4/8. Values: other(1), manual(2), wellknown(3), dhcp(4), routeradv(5)
+ *
+ * Its syntax is IpAddressPrefixOriginTC (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipAddressPrefixOrigin data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressPrefixOrigin_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipAddressPrefixOrigin_get(ipAddressPrefixTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipAddressPrefixOrigin_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipAddressPrefixOrigin_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixOrigin_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipAddressPrefixOrigin data.
+ * copy (* ipAddressPrefixOrigin_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipAddressPrefixOrigin_val_ptr) =
+ rowreq_ctx->data.ipAddressPrefixOrigin;
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefixOrigin_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressPrefixEntry.ipAddressPrefixOnLinkFlag
+ * ipAddressPrefixOnLinkFlag is subid 6 of ipAddressPrefixEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.32.1.6
+ * Description:
+This object has the value 'true(1)', if this prefix can be
+ used for on-link determination and the value 'false(2)'
+ otherwise.
+
+
+ The default for IPv4 prefixes is 'true(1)'.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: true(1), false(2)
+ *
+ * Its syntax is TruthValue (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipAddressPrefixOnLinkFlag data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressPrefixOnLinkFlag_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipAddressPrefixOnLinkFlag_get(ipAddressPrefixTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipAddressPrefixOnLinkFlag_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipAddressPrefixOnLinkFlag_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixOnLinkFlag_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipAddressPrefixOnLinkFlag data.
+ * copy (* ipAddressPrefixOnLinkFlag_val_ptr ) from rowreq_ctx->data
+ */
+ if (INETADDRESSTYPE_IPV4 == rowreq_ctx->tbl_idx.ipAddressPrefixType) {
+ (*ipAddressPrefixOnLinkFlag_val_ptr) = 1; /* per MIB */
+ } else
+ (*ipAddressPrefixOnLinkFlag_val_ptr) =
+ rowreq_ctx->data.ipAddressPrefixOnLinkFlag;
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefixOnLinkFlag_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressPrefixEntry.ipAddressPrefixAutonomousFlag
+ * ipAddressPrefixAutonomousFlag is subid 7 of ipAddressPrefixEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.32.1.7
+ * Description:
+Autonomous address configuration flag. When true(1),
+ indicates that this prefix can be used for autonomous
+ address configuration (i.e. can be used to form a local
+ interface address). If false(2), it is not used to auto-
+ configure a local interface address.
+
+
+ The default for IPv4 prefixes is 'false(2)'.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: true(1), false(2)
+ *
+ * Its syntax is TruthValue (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipAddressPrefixAutonomousFlag data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressPrefixAutonomousFlag_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipAddressPrefixAutonomousFlag_get(ipAddressPrefixTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipAddressPrefixAutonomousFlag_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipAddressPrefixAutonomousFlag_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixAutonomousFlag_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipAddressPrefixAutonomousFlag data.
+ * copy (* ipAddressPrefixAutonomousFlag_val_ptr ) from rowreq_ctx->data
+ */
+ if (INETADDRESSTYPE_IPV4 == rowreq_ctx->tbl_idx.ipAddressPrefixType)
+ (*ipAddressPrefixAutonomousFlag_val_ptr) = 2; /* per MIB */
+ else
+ (*ipAddressPrefixAutonomousFlag_val_ptr) =
+ rowreq_ctx->data.ipAddressPrefixAutonomousFlag;
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefixAutonomousFlag_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressPrefixEntry.ipAddressPrefixAdvPreferredLifetime
+ * ipAddressPrefixAdvPreferredLifetime is subid 8 of ipAddressPrefixEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.32.1.8
+ * Description:
+The remaining length of time in seconds that this prefix
+ will continue to be preferred, i.e. time until deprecation.
+
+
+
+
+ A value of 4,294,967,295 represents infinity.
+
+
+ The address generated from a deprecated prefix should no
+ longer be used as a source address in new communications,
+ but packets received on such an interface are processed as
+ expected.
+
+
+ The default for IPv4 prefixes is 4,294,967,295 (infinity).
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
+ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipAddressPrefixAdvPreferredLifetime data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressPrefixAdvPreferredLifetime_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipAddressPrefixAdvPreferredLifetime_get(ipAddressPrefixTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipAddressPrefixAdvPreferredLifetime_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipAddressPrefixAdvPreferredLifetime_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixAdvPreferredLifetime_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipAddressPrefixAdvPreferredLifetime data.
+ * copy (* ipAddressPrefixAdvPreferredLifetime_val_ptr ) from rowreq_ctx->data
+ */
+ if (INETADDRESSTYPE_IPV4 == rowreq_ctx->tbl_idx.ipAddressPrefixType)
+ (*ipAddressPrefixAdvPreferredLifetime_val_ptr) = 4294967295; /* per MIB */
+ else
+ (*ipAddressPrefixAdvPreferredLifetime_val_ptr) =
+ rowreq_ctx->data.ipAddressPrefixAdvPreferredLifetime;
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefixAdvPreferredLifetime_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressPrefixEntry.ipAddressPrefixAdvValidLifetime
+ * ipAddressPrefixAdvValidLifetime is subid 9 of ipAddressPrefixEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.32.1.9
+ * Description:
+The remaining length of time, in seconds, that this prefix
+ will continue to be valid, i.e. time until invalidation. A
+ value of 4,294,967,295 represents infinity.
+
+
+ The address generated from an invalidated prefix should not
+ appear as the destination or source address of a packet.
+
+
+ The default for IPv4 prefixes is 4,294,967,295 (infinity).
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
+ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipAddressPrefixAdvValidLifetime data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressPrefixAdvValidLifetime_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipAddressPrefixAdvValidLifetime_get(ipAddressPrefixTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipAddressPrefixAdvValidLifetime_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipAddressPrefixAdvValidLifetime_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixAdvValidLifetime_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipAddressPrefixAdvValidLifetime data.
+ * copy (* ipAddressPrefixAdvValidLifetime_val_ptr ) from rowreq_ctx->data
+ */
+ if (INETADDRESSTYPE_IPV4 == rowreq_ctx->tbl_idx.ipAddressPrefixType)
+ (*ipAddressPrefixAdvValidLifetime_val_ptr) = 4294967295; /* per MIB */
+ else
+ (*ipAddressPrefixAdvValidLifetime_val_ptr) =
+ rowreq_ctx->data.ipAddressPrefixAdvValidLifetime;
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefixAdvValidLifetime_get */
+
+
+
+/** @} */
+/** @} */
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable.h
new file mode 100644
index 0000000000..5030f98fa2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable.h
@@ -0,0 +1,316 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ipAddressPrefixTable.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+#ifndef IPADDRESSPREFIXTABLE_H
+#define IPADDRESSPREFIXTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+ /*
+ * other required module components
+ */
+ /* *INDENT-OFF* */
+config_require(ip-mib/ipAddressTable/ipAddressTable)
+config_require(ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_interface)
+config_require(ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access)
+ /* *INDENT-ON* */
+
+ /*
+ * OID, column number and enum definions for ipAddressPrefixTable
+ */
+#include "ipAddressPrefixTable_constants.h"
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+ void init_ipAddressPrefixTable(void);
+ void shutdown_ipAddressPrefixTable(void);
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressPrefixTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipAddressPrefixTable is subid 32 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.32, length: 8
+ */
+ /*
+ *********************************************************************
+ * 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 ipAddressPrefixTable registration context.
+ */
+ typedef netsnmp_data_list ipAddressPrefixTable_registration;
+
+/**********************************************************************/
+ /*
+ * TODO:110:r: |-> Review ipAddressPrefixTable data context structure.
+ * This structure is used to represent the data for ipAddressPrefixTable.
+ */
+ /*
+ * This structure contains storage for all the columns defined in the
+ * ipAddressPrefixTable.
+ */
+ typedef struct ipAddressPrefixTable_data_s {
+
+ /*
+ * ipAddressPrefixOrigin(5)/IpAddressPrefixOriginTC/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long ipAddressPrefixOrigin;
+
+ /*
+ * ipAddressPrefixOnLinkFlag(6)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long ipAddressPrefixOnLinkFlag;
+
+ /*
+ * ipAddressPrefixAutonomousFlag(7)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long ipAddressPrefixAutonomousFlag;
+
+ /*
+ * ipAddressPrefixAdvPreferredLifetime(8)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ u_long ipAddressPrefixAdvPreferredLifetime;
+
+ /*
+ * ipAddressPrefixAdvValidLifetime(9)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ u_long ipAddressPrefixAdvValidLifetime;
+
+ } ipAddressPrefixTable_data;
+
+
+ /*
+ * TODO:120:r: |-> Review ipAddressPrefixTable mib index.
+ * This structure is used to represent the index for ipAddressPrefixTable.
+ */
+ typedef struct ipAddressPrefixTable_mib_index_s {
+
+ /*
+ * ipAddressPrefixIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ long ipAddressPrefixIfIndex;
+
+ /*
+ * ipAddressPrefixType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ u_long ipAddressPrefixType;
+
+ /*
+ * ipAddressPrefixPrefix(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ /** 128 - 3(other indexes) - oid length(10) = 114 */
+ char ipAddressPrefixPrefix[114];
+ size_t ipAddressPrefixPrefix_len;
+
+ /*
+ * ipAddressPrefixLength(4)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
+ */
+ u_long ipAddressPrefixLength;
+
+
+ } ipAddressPrefixTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review ipAddressPrefixTable 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(8)
+ */
+#define MAX_ipAddressPrefixTable_IDX_LEN 118
+
+
+ /*
+ *********************************************************************
+ * TODO:130:o: |-> Review ipAddressPrefixTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * ipAddressPrefixTable_rowreq_ctx pointer.
+ */
+ typedef struct ipAddressPrefixTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_ipAddressPrefixTable_IDX_LEN];
+
+ ipAddressPrefixTable_mib_index tbl_idx;
+
+ ipAddressPrefixTable_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 ipAddressPrefixTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *ipAddressPrefixTable_data_list;
+
+ } ipAddressPrefixTable_rowreq_ctx;
+
+ typedef struct ipAddressPrefixTable_ref_rowreq_ctx_s {
+ ipAddressPrefixTable_rowreq_ctx *rowreq_ctx;
+ } ipAddressPrefixTable_ref_rowreq_ctx;
+
+ /*
+ *********************************************************************
+ * function prototypes
+ */
+ int
+ ipAddressPrefixTable_pre_request(ipAddressPrefixTable_registration
+ * user_context);
+ int
+ ipAddressPrefixTable_post_request(ipAddressPrefixTable_registration
+ * user_context, int rc);
+
+ int
+ ipAddressPrefixTable_rowreq_ctx_init
+ (ipAddressPrefixTable_rowreq_ctx * rowreq_ctx,
+ void *user_init_ctx);
+ void
+ ipAddressPrefixTable_rowreq_ctx_cleanup
+ (ipAddressPrefixTable_rowreq_ctx * rowreq_ctx);
+
+
+ ipAddressPrefixTable_rowreq_ctx
+ * ipAddressPrefixTable_row_find_by_mib_index
+ (ipAddressPrefixTable_mib_index * mib_idx);
+
+ extern oid ipAddressPrefixTable_oid[];
+ extern int ipAddressPrefixTable_oid_size;
+
+
+#include "ipAddressPrefixTable_interface.h"
+#include "ipAddressPrefixTable_data_access.h"
+ /*
+ *********************************************************************
+ * GET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressPrefixTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipAddressPrefixTable is subid 32 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.32, length: 8
+ */
+ /*
+ * indexes
+ */
+
+ int
+ ipAddressPrefixOrigin_get(ipAddressPrefixTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long * ipAddressPrefixOrigin_val_ptr);
+ int
+ ipAddressPrefixOnLinkFlag_get(ipAddressPrefixTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipAddressPrefixOnLinkFlag_val_ptr);
+ int
+ ipAddressPrefixAutonomousFlag_get(ipAddressPrefixTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipAddressPrefixAutonomousFlag_val_ptr);
+ int
+ ipAddressPrefixAdvPreferredLifetime_get
+ (ipAddressPrefixTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipAddressPrefixAdvPreferredLifetime_val_ptr);
+ int
+ ipAddressPrefixAdvValidLifetime_get(ipAddressPrefixTable_rowreq_ctx
+ * rowreq_ctx,
+ u_long *
+ ipAddressPrefixAdvValidLifetime_val_ptr);
+
+
+ int
+ ipAddressPrefixTable_indexes_set_tbl_idx
+ (ipAddressPrefixTable_mib_index * tbl_idx,
+ long ipAddressPrefixIfIndex_val, u_long ipAddressPrefixType_val,
+ char *ipAddressPrefixPrefix_val_ptr,
+ size_t ipAddressPrefixPrefix_val_ptr_len,
+ u_long ipAddressPrefixLength_val);
+ int
+ ipAddressPrefixTable_indexes_set(ipAddressPrefixTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipAddressPrefixIfIndex_val,
+ u_long ipAddressPrefixType_val,
+ char
+ *ipAddressPrefixPrefix_val_ptr,
+ size_t
+ ipAddressPrefixPrefix_val_ptr_len,
+ u_long ipAddressPrefixLength_val);
+
+
+
+ /*
+ *********************************************************************
+ * SET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * SET Table declarations
+ */
+
+
+ /*
+ * DUMMY markers, ignore
+ *
+ * TODO:099:x: *************************************************************
+ * TODO:199:x: *************************************************************
+ * TODO:299:x: *************************************************************
+ * TODO:399:x: *************************************************************
+ * TODO:499:x: *************************************************************
+ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPADDRESSPREFIXTABLE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_constants.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_constants.h
new file mode 100644
index 0000000000..d9c0cb0e61
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_constants.h
@@ -0,0 +1,139 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-constants.m2c,v 1.5 2005/07/15 22:41:16 rstory Exp $
+ *
+ * $Id: ipAddressPrefixTable_constants.h 13763 2005-12-01 15:49:39Z rstory $
+ */
+#ifndef IPADDRESSPREFIXTABLE_CONSTANTS_H
+#define IPADDRESSPREFIXTABLE_CONSTANTS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ * column number definitions for table ipAddressPrefixTable
+ */
+#define IPADDRESSPREFIXTABLE_OID 1,3,6,1,2,1,4,32
+
+#define COLUMN_IPADDRESSPREFIXIFINDEX 1
+
+#define COLUMN_IPADDRESSPREFIXTYPE 2
+
+#define COLUMN_IPADDRESSPREFIXPREFIX 3
+
+#define COLUMN_IPADDRESSPREFIXLENGTH 4
+
+#define COLUMN_IPADDRESSPREFIXORIGIN 5
+
+#define COLUMN_IPADDRESSPREFIXONLINKFLAG 6
+
+#define COLUMN_IPADDRESSPREFIXAUTONOMOUSFLAG 7
+
+#define COLUMN_IPADDRESSPREFIXADVPREFERREDLIFETIME 8
+
+#define COLUMN_IPADDRESSPREFIXADVVALIDLIFETIME 9
+
+
+#define IPADDRESSPREFIXTABLE_MIN_COL COLUMN_IPADDRESSPREFIXORIGIN
+#define IPADDRESSPREFIXTABLE_MAX_COL COLUMN_IPADDRESSPREFIXADVVALIDLIFETIME
+
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table ipAddressPrefixTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipAddressPrefixType (InetAddressType / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef INETADDRESSTYPE_ENUMS
+#define INETADDRESSTYPE_ENUMS
+
+#define INETADDRESSTYPE_UNKNOWN 0
+#define INETADDRESSTYPE_IPV4 1
+#define INETADDRESSTYPE_IPV6 2
+#define INETADDRESSTYPE_IPV4Z 3
+#define INETADDRESSTYPE_IPV6Z 4
+#define INETADDRESSTYPE_DNS 16
+
+#endif /* INETADDRESSTYPE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipAddressPrefixOrigin (IpAddressPrefixOriginTC / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IPADDRESSPREFIXORIGINTC_ENUMS
+#define IPADDRESSPREFIXORIGINTC_ENUMS
+
+#define IPADDRESSPREFIXORIGINTC_OTHER 1
+#define IPADDRESSPREFIXORIGINTC_MANUAL 2
+#define IPADDRESSPREFIXORIGINTC_WELLKNOWN 3
+#define IPADDRESSPREFIXORIGINTC_DHCP 4
+#define IPADDRESSPREFIXORIGINTC_ROUTERADV 5
+
+#endif /* IPADDRESSPREFIXORIGINTC_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipAddressPrefixOnLinkFlag (TruthValue / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef TRUTHVALUE_ENUMS
+#define TRUTHVALUE_ENUMS
+
+#define TRUTHVALUE_TRUE 1
+#define TRUTHVALUE_FALSE 2
+
+#endif /* TRUTHVALUE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipAddressPrefixAutonomousFlag (TruthValue / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef TRUTHVALUE_ENUMS
+#define TRUTHVALUE_ENUMS
+
+#define TRUTHVALUE_TRUE 1
+#define TRUTHVALUE_FALSE 2
+
+#endif /* TRUTHVALUE_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPADDRESSPREFIXTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c
new file mode 100644
index 0000000000..4cda4de3cd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.c
@@ -0,0 +1,353 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ipAddressPrefixTable_data_access.c 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipAddressPrefixTable.h"
+
+
+#include "ipAddressPrefixTable_data_access.h"
+
+#include "ip-mib/ipAddressTable/ipAddressTable.h"
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressPrefixTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipAddressPrefixTable is subid 32 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.32, length: 8
+ */
+
+/**
+ * initialization for ipAddressPrefixTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param ipAddressPrefixTable_reg
+ * Pointer to ipAddressPrefixTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+ipAddressPrefixTable_init_data(ipAddressPrefixTable_registration *
+ ipAddressPrefixTable_reg)
+{
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_init_data", "called\n"));
+
+ /*
+ * TODO:303:o: Initialize ipAddressPrefixTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefixTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+ipAddressPrefixTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache * cache)
+{
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_container_init", "called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,
+ "bad container param to ipAddressPrefixTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,
+ "bad cache param to ipAddressPrefixTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up ipAddressPrefixTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = IPADDRESSPREFIXTABLE_CACHE_TIMEOUT; /* seconds */
+} /* ipAddressPrefixTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before ipAddressPrefixTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+ipAddressPrefixTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_container_shutdown", "called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,
+ "bad params to ipAddressPrefixTable_container_shutdown\n");
+ return;
+ }
+
+} /* ipAddressPrefixTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement ipAddressPrefixTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * ipAddressPrefixTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+ipAddressPrefixTable_container_load(netsnmp_container *container)
+{
+ ipAddressPrefixTable_rowreq_ctx *rowreq_ctx = NULL, *tmp_rowreq_ctx;
+ ipAddressTable_rowreq_ctx *addr_rowreq_ctx;
+ netsnmp_container *addr_container;
+ netsnmp_iterator *addr_it;
+ size_t count = 0;
+ u_char tmp_pfx[NETSNMP_ACCESS_IPADDRESS_BUF_SIZE];
+
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_container_load", "called\n"));
+
+ addr_container = ipAddressTable_container_get();
+ if (NULL == addr_container) {
+ DEBUGMSGTL(("ipAddressPrefixTable:container_load",
+ "couldn't get ipAddress container\n"));
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+
+ addr_it = CONTAINER_ITERATOR(addr_container);
+ if (NULL == addr_container) {
+ DEBUGMSGTL(("ipAddressPrefixTable:container_load",
+ "couldn't get ipAddress iterator\n"));
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+
+ /*
+ * TODO:351:M: |-> Load/update data in the ipAddressPrefixTable container.
+ * loop over your ipAddressPrefixTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ for (addr_rowreq_ctx = ITERATOR_FIRST(addr_it);
+ addr_rowreq_ctx; addr_rowreq_ctx = ITERATOR_NEXT(addr_it)) {
+
+
+
+ /*
+ * TODO:352:M: | |-> set indexes in new ipAddressPrefixTable rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ if (NULL == rowreq_ctx) {
+ rowreq_ctx = ipAddressPrefixTable_allocate_rowreq_ctx(NULL);
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ }
+ netsnmp_ipaddress_prefix_copy(tmp_pfx,
+ addr_rowreq_ctx->tbl_idx.
+ ipAddressAddr,
+ addr_rowreq_ctx->data->
+ ia_address_len,
+ addr_rowreq_ctx->data->
+ ia_prefix_len);
+ if (MFD_SUCCESS !=
+ ipAddressPrefixTable_indexes_set(rowreq_ctx,
+ addr_rowreq_ctx->data->
+ if_index,
+ addr_rowreq_ctx->tbl_idx.
+ ipAddressAddrType, tmp_pfx,
+ addr_rowreq_ctx->data->
+ ia_address_len,
+ addr_rowreq_ctx->data->
+ ia_prefix_len)) {
+ snmp_log(LOG_ERR,
+ "error setting index while loading "
+ "ipAddressPrefixTable data.\n");
+ ipAddressPrefixTable_release_rowreq_ctx(rowreq_ctx);
+ continue;
+ }
+
+ /** do we already have this prefix? */
+ tmp_rowreq_ctx = CONTAINER_FIND(container, rowreq_ctx);
+ if (NULL != tmp_rowreq_ctx)
+ continue;
+
+ /*
+ * TODO:352:r: | |-> populate ipAddressPrefixTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ rowreq_ctx->data.ipAddressPrefixOrigin =
+ addr_rowreq_ctx->data->ia_origin;
+
+ /** defer the rest til row prep */
+
+ /*
+ * insert into table container, clear ptr so we reallocate
+ */
+ CONTAINER_INSERT(container, rowreq_ctx);
+ rowreq_ctx = NULL;
+ ++count;
+ }
+
+ DEBUGMSGT(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_container_load", "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefixTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+ipAddressPrefixTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_container_free", "called\n"));
+
+ /*
+ * TODO:380:M: Free ipAddressPrefixTable container data.
+ */
+} /* ipAddressPrefixTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+ipAddressPrefixTable_row_prep(ipAddressPrefixTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_row_prep", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+ if (INETADDRESSTYPE_IPV6 == rowreq_ctx->tbl_idx.ipAddressPrefixType) {
+
+ }
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefixTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.h
new file mode 100644
index 0000000000..4f20577320
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_data_access.h
@@ -0,0 +1,76 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ipAddressPrefixTable_data_access.h 13763 2005-12-01 15:49:39Z rstory $
+ */
+#ifndef IPADDRESSPREFIXTABLE_DATA_ACCESS_H
+#define IPADDRESSPREFIXTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressPrefixTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipAddressPrefixTable is subid 32 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.32, length: 8
+ */
+
+
+ int
+ ipAddressPrefixTable_init_data(ipAddressPrefixTable_registration *
+ ipAddressPrefixTable_reg);
+
+
+ /*
+ * TODO:180:o: Review ipAddressPrefixTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define IPADDRESSPREFIXTABLE_CACHE_TIMEOUT 60
+
+ void ipAddressPrefixTable_container_init(netsnmp_container
+ **container_ptr_ptr,
+ netsnmp_cache *
+ cache);
+ void
+ ipAddressPrefixTable_container_shutdown(netsnmp_container
+ *container_ptr);
+
+ int ipAddressPrefixTable_container_load(netsnmp_container
+ *container);
+ void ipAddressPrefixTable_container_free(netsnmp_container
+ *container);
+
+ int ipAddressPrefixTable_cache_load(netsnmp_container
+ *container);
+ void ipAddressPrefixTable_cache_free(netsnmp_container
+ *container);
+
+ int
+ ipAddressPrefixTable_row_prep(ipAddressPrefixTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPADDRESSPREFIXTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_interface.c
new file mode 100644
index 0000000000..7159836ba4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_interface.c
@@ -0,0 +1,1038 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ipAddressPrefixTable_interface.c 15015 2006-08-17 15:06:43Z rstory $
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipAddressPrefixTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "ipAddressPrefixTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressPrefixTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipAddressPrefixTable is subid 32 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.32, length: 8
+ */
+typedef struct ipAddressPrefixTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ ipAddressPrefixTable_registration *user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+} ipAddressPrefixTable_interface_ctx;
+
+static ipAddressPrefixTable_interface_ctx ipAddressPrefixTable_if_ctx;
+
+static void
+ _ipAddressPrefixTable_container_init(ipAddressPrefixTable_interface_ctx *
+ if_ctx);
+static void
+ _ipAddressPrefixTable_container_shutdown(ipAddressPrefixTable_interface_ctx
+ * if_ctx);
+
+
+netsnmp_container *
+ipAddressPrefixTable_container_get(void)
+{
+ return ipAddressPrefixTable_if_ctx.container;
+}
+
+ipAddressPrefixTable_registration *
+ipAddressPrefixTable_registration_get(void)
+{
+ return ipAddressPrefixTable_if_ctx.user_ctx;
+}
+
+ipAddressPrefixTable_registration *
+ipAddressPrefixTable_registration_set(ipAddressPrefixTable_registration *
+ newreg)
+{
+ ipAddressPrefixTable_registration *old =
+ ipAddressPrefixTable_if_ctx.user_ctx;
+ ipAddressPrefixTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+ipAddressPrefixTable_container_size(void)
+{
+ return CONTAINER_SIZE(ipAddressPrefixTable_if_ctx.container);
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_ipAddressPrefixTable_pre_request;
+static Netsnmp_Node_Handler _mfd_ipAddressPrefixTable_post_request;
+static Netsnmp_Node_Handler _mfd_ipAddressPrefixTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_ipAddressPrefixTable_get_values;
+/**
+ * @internal
+ * Initialize the table ipAddressPrefixTable
+ * (Define its contents and how it's structured)
+ */
+void
+ _ipAddressPrefixTable_initialize_interface
+ (ipAddressPrefixTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &ipAddressPrefixTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info =
+ &ipAddressPrefixTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:_ipAddressPrefixTable_initialize_interface", "called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for ipAddressPrefixTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
+ /** index: ipAddressPrefixIfIndex */
+ ASN_INTEGER,
+ /** index: ipAddressPrefixType */
+ ASN_OCTET_STR,
+ /** index: ipAddressPrefixPrefix */
+ ASN_UNSIGNED,
+ /** index: ipAddressPrefixLength */
+ 0);
+
+ /*
+ * Define the minimum and maximum accessible columns. This
+ * optimizes retrival.
+ */
+ tbl_info->min_column = IPADDRESSPREFIXTABLE_MIN_COL;
+ tbl_info->max_column = IPADDRESSPREFIXTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ ipAddressPrefixTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ ipAddressPrefixTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _ipAddressPrefixTable_container_init(&ipAddressPrefixTable_if_ctx);
+ if (NULL == ipAddressPrefixTable_if_ctx.container) {
+ snmp_log(LOG_ERR,
+ "could not initialize container for ipAddressPrefixTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup =
+ _mfd_ipAddressPrefixTable_object_lookup;
+ access_multiplexer->get_values = _mfd_ipAddressPrefixTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request =
+ _mfd_ipAddressPrefixTable_pre_request;
+ access_multiplexer->post_request =
+ _mfd_ipAddressPrefixTable_post_request;
+
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("ipAddressPrefixTable:init_ipAddressPrefixTable",
+ "Registering ipAddressPrefixTable as a mibs-for-dummies table.\n"));
+ handler =
+ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo =
+ netsnmp_handler_registration_create("ipAddressPrefixTable",
+ handler,
+ ipAddressPrefixTable_oid,
+ ipAddressPrefixTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RONLY);
+ if (NULL == reginfo) {
+ snmp_log(LOG_ERR,
+ "error registering table ipAddressPrefixTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &ipAddressPrefixTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if (access_multiplexer->object_lookup)
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if (access_multiplexer->set_values)
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if (access_multiplexer->irreversible_commit)
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if (access_multiplexer->object_syntax_checks)
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if (access_multiplexer->pre_request)
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if (access_multiplexer->post_request)
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if (access_multiplexer->undo_setup)
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if (access_multiplexer->undo_cleanup)
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if (access_multiplexer->undo_sets)
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if (access_multiplexer->row_creation)
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if (access_multiplexer->consistency_checks)
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if (access_multiplexer->commit)
+ mfd_modes |= BABY_STEP_COMMIT;
+ if (access_multiplexer->undo_commit)
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ ipAddressPrefixTable_if_ctx.
+ container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if (NULL != ipAddressPrefixTable_if_ctx.cache) {
+ handler =
+ netsnmp_cache_handler_get(ipAddressPrefixTable_if_ctx.cache);
+ netsnmp_inject_handler(reginfo, handler);
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _ipAddressPrefixTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table ipAddressPrefixTable
+ */
+void
+_ipAddressPrefixTable_shutdown_interface(ipAddressPrefixTable_registration
+ * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _ipAddressPrefixTable_container_shutdown(&ipAddressPrefixTable_if_ctx);
+}
+
+void
+ipAddressPrefixTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ ipAddressPrefixTable_if_ctx.tbl_info.valid_columns = vc;
+} /* ipAddressPrefixTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+ipAddressPrefixTable_index_to_oid(netsnmp_index * oid_idx,
+ ipAddressPrefixTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * ipAddressPrefixIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ netsnmp_variable_list var_ipAddressPrefixIfIndex;
+ /*
+ * ipAddressPrefixType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ netsnmp_variable_list var_ipAddressPrefixType;
+ /*
+ * ipAddressPrefixPrefix(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ netsnmp_variable_list var_ipAddressPrefixPrefix;
+ /*
+ * ipAddressPrefixLength(4)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
+ */
+ netsnmp_variable_list var_ipAddressPrefixLength;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_ipAddressPrefixIfIndex, 0x00,
+ sizeof(var_ipAddressPrefixIfIndex));
+ var_ipAddressPrefixIfIndex.type = ASN_INTEGER;
+ memset(&var_ipAddressPrefixType, 0x00,
+ sizeof(var_ipAddressPrefixType));
+ var_ipAddressPrefixType.type = ASN_INTEGER;
+ memset(&var_ipAddressPrefixPrefix, 0x00,
+ sizeof(var_ipAddressPrefixPrefix));
+ var_ipAddressPrefixPrefix.type = ASN_OCTET_STR;
+ memset(&var_ipAddressPrefixLength, 0x00,
+ sizeof(var_ipAddressPrefixLength));
+ var_ipAddressPrefixLength.type = ASN_UNSIGNED;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_ipAddressPrefixIfIndex.next_variable = &var_ipAddressPrefixType;
+ var_ipAddressPrefixType.next_variable = &var_ipAddressPrefixPrefix;
+ var_ipAddressPrefixPrefix.next_variable = &var_ipAddressPrefixLength;
+ var_ipAddressPrefixLength.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_index_to_oid", "called\n"));
+
+ /*
+ * ipAddressPrefixIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ snmp_set_var_value(&var_ipAddressPrefixIfIndex,
+ (u_char *) & mib_idx->ipAddressPrefixIfIndex,
+ sizeof(mib_idx->ipAddressPrefixIfIndex));
+
+ /*
+ * ipAddressPrefixType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ snmp_set_var_value(&var_ipAddressPrefixType,
+ (u_char *) & mib_idx->ipAddressPrefixType,
+ sizeof(mib_idx->ipAddressPrefixType));
+
+ /*
+ * ipAddressPrefixPrefix(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ snmp_set_var_value(&var_ipAddressPrefixPrefix,
+ (u_char *) & mib_idx->ipAddressPrefixPrefix,
+ mib_idx->ipAddressPrefixPrefix_len *
+ sizeof(mib_idx->ipAddressPrefixPrefix[0]));
+
+ /*
+ * ipAddressPrefixLength(4)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
+ */
+ snmp_set_var_value(&var_ipAddressPrefixLength,
+ (u_char *) & mib_idx->ipAddressPrefixLength,
+ sizeof(mib_idx->ipAddressPrefixLength));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_ipAddressPrefixIfIndex);
+ if (err)
+ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_ipAddressPrefixIfIndex);
+
+ return err;
+} /* ipAddressPrefixTable_index_to_oid */
+
+/**
+ * extract ipAddressPrefixTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+ipAddressPrefixTable_index_from_oid(netsnmp_index * oid_idx,
+ ipAddressPrefixTable_mib_index *
+ mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * ipAddressPrefixIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ netsnmp_variable_list var_ipAddressPrefixIfIndex;
+ /*
+ * ipAddressPrefixType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ netsnmp_variable_list var_ipAddressPrefixType;
+ /*
+ * ipAddressPrefixPrefix(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ netsnmp_variable_list var_ipAddressPrefixPrefix;
+ /*
+ * ipAddressPrefixLength(4)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
+ */
+ netsnmp_variable_list var_ipAddressPrefixLength;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_ipAddressPrefixIfIndex, 0x00,
+ sizeof(var_ipAddressPrefixIfIndex));
+ var_ipAddressPrefixIfIndex.type = ASN_INTEGER;
+ memset(&var_ipAddressPrefixType, 0x00,
+ sizeof(var_ipAddressPrefixType));
+ var_ipAddressPrefixType.type = ASN_INTEGER;
+ memset(&var_ipAddressPrefixPrefix, 0x00,
+ sizeof(var_ipAddressPrefixPrefix));
+ var_ipAddressPrefixPrefix.type = ASN_OCTET_STR;
+ memset(&var_ipAddressPrefixLength, 0x00,
+ sizeof(var_ipAddressPrefixLength));
+ var_ipAddressPrefixLength.type = ASN_UNSIGNED;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_ipAddressPrefixIfIndex.next_variable = &var_ipAddressPrefixType;
+ var_ipAddressPrefixType.next_variable = &var_ipAddressPrefixPrefix;
+ var_ipAddressPrefixPrefix.next_variable = &var_ipAddressPrefixLength;
+ var_ipAddressPrefixLength.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_index_from_oid", "called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
+ &var_ipAddressPrefixIfIndex);
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->ipAddressPrefixIfIndex =
+ *((long *) var_ipAddressPrefixIfIndex.val.string);
+ mib_idx->ipAddressPrefixType =
+ *((u_long *) var_ipAddressPrefixType.val.string);
+ /*
+ * NOTE: val_len is in bytes, ipAddressPrefixPrefix_len might not be
+ */
+ if (var_ipAddressPrefixPrefix.val_len >
+ sizeof(mib_idx->ipAddressPrefixPrefix))
+ err = SNMP_ERR_GENERR;
+ else {
+ memcpy(mib_idx->ipAddressPrefixPrefix,
+ var_ipAddressPrefixPrefix.val.string,
+ var_ipAddressPrefixPrefix.val_len);
+ mib_idx->ipAddressPrefixPrefix_len =
+ var_ipAddressPrefixPrefix.val_len /
+ sizeof(mib_idx->ipAddressPrefixPrefix[0]);
+ }
+ mib_idx->ipAddressPrefixLength =
+ *((u_long *) var_ipAddressPrefixLength.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_ipAddressPrefixIfIndex);
+
+ return err;
+} /* ipAddressPrefixTable_index_from_oid */
+
+
+/*
+ *********************************************************************
+ * @internal
+ * allocate resources for a ipAddressPrefixTable_rowreq_ctx
+ */
+ipAddressPrefixTable_rowreq_ctx *
+ipAddressPrefixTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ ipAddressPrefixTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(ipAddressPrefixTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:ipAddressPrefixTable_allocate_rowreq_ctx", "called\n"));
+
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+ "ipAddressPrefixTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->ipAddressPrefixTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if (SNMPERR_SUCCESS !=
+ ipAddressPrefixTable_rowreq_ctx_init(rowreq_ctx,
+ user_init_ctx)) {
+ ipAddressPrefixTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* ipAddressPrefixTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a ipAddressPrefixTable_rowreq_ctx
+ */
+void
+ipAddressPrefixTable_release_rowreq_ctx(ipAddressPrefixTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:ipAddressPrefixTable_release_rowreq_ctx", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ ipAddressPrefixTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ /*
+ * free index oid pointer
+ */
+ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* ipAddressPrefixTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipAddressPrefixTable_pre_request(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:_mfd_ipAddressPrefixTable_pre_request", "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ipAddressPrefixTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = ipAddressPrefixTable_pre_request(ipAddressPrefixTable_if_ctx.
+ user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipAddressPrefixTable", "error %d from "
+ "ipAddressPrefixTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressPrefixTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipAddressPrefixTable_post_request(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipAddressPrefixTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:_mfd_ipAddressPrefixTable_post_request", "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ ipAddressPrefixTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ipAddressPrefixTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ rc = ipAddressPrefixTable_post_request(ipAddressPrefixTable_if_ctx.
+ user_ctx, packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipAddressPrefixTable", "error %d from "
+ "ipAddressPrefixTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressPrefixTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipAddressPrefixTable_object_lookup(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ ipAddressPrefixTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:_mfd_ipAddressPrefixTable_object_lookup", "called\n"));
+
+ /*
+ * get our context from mfd
+ * ipAddressPrefixTable_interface_ctx *if_ctx =
+ * (ipAddressPrefixTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if (NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ ipAddressPrefixTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_ipAddressPrefixTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipAddressPrefixTable_get_column(ipAddressPrefixTable_rowreq_ctx *
+ rowreq_ctx, netsnmp_variable_list * var,
+ int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:_mfd_ipAddressPrefixTable_get_column", "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipAddressPrefixOrigin(5)/IpAddressPrefixOriginTC/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_IPADDRESSPREFIXORIGIN:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipAddressPrefixOrigin_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipAddressPrefixOnLinkFlag(6)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_IPADDRESSPREFIXONLINKFLAG:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipAddressPrefixOnLinkFlag_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipAddressPrefixAutonomousFlag(7)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_IPADDRESSPREFIXAUTONOMOUSFLAG:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipAddressPrefixAutonomousFlag_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipAddressPrefixAdvPreferredLifetime(8)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPADDRESSPREFIXADVPREFERREDLIFETIME:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_UNSIGNED;
+ rc = ipAddressPrefixAdvPreferredLifetime_get(rowreq_ctx,
+ (u_long *) var->val.
+ string);
+ break;
+
+ /*
+ * ipAddressPrefixAdvValidLifetime(9)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPADDRESSPREFIXADVVALIDLIFETIME:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_UNSIGNED;
+ rc = ipAddressPrefixAdvValidLifetime_get(rowreq_ctx,
+ (u_long *) var->val.
+ string);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipAddressPrefixTable_get_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ipAddressPrefixTable_get_column */
+
+int
+_mfd_ipAddressPrefixTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipAddressPrefixTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ u_char *old_string;
+ void (*dataFreeHook) (void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:_mfd_ipAddressPrefixTable_get_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if (NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ } else if (requests->requestvb->buf ==
+ requests->requestvb->val.string) {
+ if (requests->requestvb->val_len !=
+ sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipAddressPrefixTable_get_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ if (MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ } else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if (rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if (old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if (dataFreeHook)
+ (*dataFreeHook) (old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressPrefixTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*
+ * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
+ */
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache * cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:_cache_load", "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR,
+ "invalid cache for ipAddressPrefixTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return ipAddressPrefixTable_container_load((netsnmp_container *)
+ cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache * cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:_cache_free", "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR,
+ "invalid cache in ipAddressPrefixTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container *) cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(ipAddressPrefixTable_rowreq_ctx * rowreq_ctx,
+ void *context)
+{
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:_container_item_free",
+ "called\n"));
+
+ if (NULL == rowreq_ctx)
+ return;
+
+ ipAddressPrefixTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:_container_free",
+ "called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR,
+ "invalid container in ipAddressPrefixTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ ipAddressPrefixTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *) _container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_ipAddressPrefixTable_container_init(ipAddressPrefixTable_interface_ctx *
+ if_ctx)
+{
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:_ipAddressPrefixTable_container_init", "called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ ipAddressPrefixTable_oid,
+ ipAddressPrefixTable_oid_size);
+
+ if (NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR,
+ "error creating cache for ipAddressPrefixTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ ipAddressPrefixTable_container_init(&if_ctx->container, if_ctx->cache);
+ if (NULL == if_ctx->container)
+ if_ctx->container =
+ netsnmp_container_find("ipAddressPrefixTable:table_container");
+ if (NULL == if_ctx->container) {
+ snmp_log(LOG_ERR, "error creating container in "
+ "ipAddressPrefixTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void *) if_ctx->container;
+} /* _ipAddressPrefixTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_ipAddressPrefixTable_container_shutdown(ipAddressPrefixTable_interface_ctx
+ * if_ctx)
+{
+ DEBUGMSGTL(("internal:ipAddressPrefixTable:_ipAddressPrefixTable_container_shutdown", "called\n"));
+
+ ipAddressPrefixTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _ipAddressPrefixTable_container_shutdown */
+
+
+ipAddressPrefixTable_rowreq_ctx *
+ipAddressPrefixTable_row_find_by_mib_index(ipAddressPrefixTable_mib_index *
+ mib_idx)
+{
+ ipAddressPrefixTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = ipAddressPrefixTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx =
+ CONTAINER_FIND(ipAddressPrefixTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_interface.h
new file mode 100644
index 0000000000..ca829ac597
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressPrefixTable/ipAddressPrefixTable_interface.h
@@ -0,0 +1,98 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ipAddressPrefixTable_interface.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/** @ingroup interface Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef IPADDRESSPREFIXTABLE_INTERFACE_H
+#define IPADDRESSPREFIXTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "ipAddressPrefixTable.h"
+
+
+ /*
+ ********************************************************************
+ * Table declarations
+ */
+
+ /*
+ * PUBLIC interface initialization routine
+ */
+ void
+ _ipAddressPrefixTable_initialize_interface
+ (ipAddressPrefixTable_registration * user_ctx, u_long flags);
+ void
+ _ipAddressPrefixTable_shutdown_interface
+ (ipAddressPrefixTable_registration * user_ctx);
+
+ ipAddressPrefixTable_registration
+ * ipAddressPrefixTable_registration_get(void);
+
+ ipAddressPrefixTable_registration
+ * ipAddressPrefixTable_registration_set
+ (ipAddressPrefixTable_registration * newreg);
+
+ netsnmp_container *ipAddressPrefixTable_container_get(void);
+ int ipAddressPrefixTable_container_size(void);
+ ipAddressPrefixTable_rowreq_ctx
+ * ipAddressPrefixTable_allocate_rowreq_ctx(void *);
+ void
+ ipAddressPrefixTable_release_rowreq_ctx
+ (ipAddressPrefixTable_rowreq_ctx * rowreq_ctx);
+
+ int ipAddressPrefixTable_index_to_oid(netsnmp_index *
+ oid_idx,
+ ipAddressPrefixTable_mib_index
+ * mib_idx);
+ int ipAddressPrefixTable_index_from_oid(netsnmp_index *
+ oid_idx,
+ ipAddressPrefixTable_mib_index
+ * mib_idx);
+
+ /*
+ * access to certain internals. use with caution!
+ */
+ void
+ ipAddressPrefixTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPADDRESSPREFIXTABLE_INTERFACE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable.h
new file mode 100644
index 0000000000..8d4d27443e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable.h
@@ -0,0 +1,5 @@
+/*
+ * module to include the modules
+ */
+
+config_require(ip-mib/ipAddressTable/ipAddressTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c
new file mode 100644
index 0000000000..e9a957e896
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c
@@ -0,0 +1,2426 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ipAddressTable.c 15640 2006-12-06 15:10:40Z rstory $
+ */
+/** \page MFD helper for ipAddressTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#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/data_access/interface.h>
+
+/*
+ * include our parent header
+ */
+#include "ipAddressTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "ipAddressTable_interface.h"
+
+oid ipAddressTable_oid[] = { IPADDRESSTABLE_OID };
+int ipAddressTable_oid_size = OID_LENGTH(ipAddressTable_oid);
+
+ipAddressTable_registration ipAddressTable_user_context;
+
+void initialize_table_ipAddressTable(void);
+void shutdown_table_ipAddressTable(void);
+
+
+/**
+ * Initializes the ipAddressTable module
+ */
+void
+init_ipAddressTable(void)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:init_ipAddressTable", "called\n"));
+
+ /*
+ * TODO:300:o: Perform ipAddressTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("ipAddressTable"))
+ initialize_table_ipAddressTable();
+
+} /* init_ipAddressTable */
+
+/**
+ * Shut-down the ipAddressTable module (agent is exiting)
+ */
+void
+shutdown_ipAddressTable(void)
+{
+ if (should_init("ipAddressTable"))
+ shutdown_table_ipAddressTable();
+
+}
+
+/**
+ * Initialize the table ipAddressTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_ipAddressTable(void)
+{
+ ipAddressTable_registration *user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:ipAddressTable:initialize_table_ipAddressTable",
+ "called\n"));
+
+ /*
+ * TODO:301:o: Perform ipAddressTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize ipAddressTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ user_context = NULL;
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _ipAddressTable_initialize_interface(user_context, flags);
+} /* initialize_table_ipAddressTable */
+
+/**
+ * Shutdown the table ipAddressTable
+ */
+void
+shutdown_table_ipAddressTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _ipAddressTable_shutdown_interface(&ipAddressTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+ipAddressTable_rowreq_ctx_init(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_rowreq_ctx_init",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra ipAddressTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* ipAddressTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void
+ipAddressTable_rowreq_ctx_cleanup(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_rowreq_ctx_cleanup",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra ipAddressTable rowreq cleanup.
+ */
+ if (NULL != rowreq_ctx->data) {
+ ipAddressTable_release_data(rowreq_ctx->data);
+ rowreq_ctx->data = NULL;
+ }
+} /* ipAddressTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ * @param user_context
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+ipAddressTable_pre_request(ipAddressTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_pre_request",
+ "called\n"));
+
+ /*
+ * TODO:510:o: Perform ipAddressTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* ipAddressTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+ipAddressTable_post_request(ipAddressTable_registration * user_context,
+ int rc)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_post_request",
+ "called\n"));
+
+ /*
+ * TODO:511:o: Perform ipAddressTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (ipAddressTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ ipAddressTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* ipAddressTable_post_request */
+
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipAddressTable is subid 34 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.34, length: 8
+ */
+
+/*
+ * ---------------------------------------------------------------------
+ * * TODO:200:r: Implement ipAddressTable data context functions.
+ */
+/*
+ * ipAddressTable_allocate_data
+ *
+ * Purpose: create new ipAddressTable_data.
+ */
+ipAddressTable_data *
+ipAddressTable_allocate_data(void)
+{
+ /*
+ * TODO:201:r: |-> allocate memory for the ipAddressTable data context.
+ */
+ ipAddressTable_data *rtn = netsnmp_access_ipaddress_entry_create();
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_allocate_data",
+ "called\n"));
+
+ if (NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "ipAddressTable_data.\n");
+ }
+
+ return rtn;
+} /* ipAddressTable_allocate_data */
+
+/*
+ * ipAddressTable_release_data
+ *
+ * Purpose: release ipAddressTable data.
+ */
+void
+ipAddressTable_release_data(ipAddressTable_data * data)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_release_data",
+ "called\n"));
+
+ /*
+ * TODO:202:r: |-> release memory for the ipAddressTable data context.
+ */
+ netsnmp_access_ipaddress_entry_free(data);
+} /* ipAddressTable_release_data */
+
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressAddrType
+ * ipAddressAddrType is subid 1 of ipAddressEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.2.1.4.34.1.1
+ * Description:
+The address type of ipAddressAddr.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 1 hasdefval 0
+ * readable 0 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 5/8. Values: unknown(0), ipv4(1), ipv6(2), ipv4z(3), ipv6z(4), dns(16)
+ *
+ * Its syntax is InetAddressType (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ *
+ *
+ *
+ * NOTE: NODE ipAddressAddrType IS NOT ACCESSIBLE
+ *
+ *
+ */
+/**
+ * map a value from its original native format to the MIB format.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : Any other error
+ *
+ * @note parameters follow the memset convention (dest, src).
+ *
+ * @note generation and use of this function can be turned off by re-running
+ * mib2c after adding the following line to the file
+ * default-node-ipAddressAddrType.m2d :
+ * @verbatim $m2c_node_skip_mapping = 1@endverbatim
+ *
+ * @remark
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them here.
+ * Otherwise, just do a direct copy.
+ */
+int
+ipAddressAddrType_map(u_long * mib_ipAddressAddrType_val_ptr,
+ u_long raw_ipAddressAddrType_val)
+{
+ netsnmp_assert(NULL != mib_ipAddressAddrType_val_ptr);
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressAddrType_map",
+ "called\n"));
+
+ /*
+ * TODO:241:o: |-> Implement ipAddressAddrType enum mapping.
+ * uses INTERNAL_* macros defined in the header files
+ */
+ switch (raw_ipAddressAddrType_val) {
+ case INTERNAL_IPADDRESSTABLE_IPADDRESSADDRTYPE_IPV4:
+ *mib_ipAddressAddrType_val_ptr = INETADDRESSTYPE_IPV4;
+ break;
+
+ case INTERNAL_IPADDRESSTABLE_IPADDRESSADDRTYPE_IPV6:
+ *mib_ipAddressAddrType_val_ptr = INETADDRESSTYPE_IPV6;
+ break;
+
+ default:
+ snmp_log(LOG_ERR, "couldn't map value %ld for ipAddressAddrType\n",
+ raw_ipAddressAddrType_val);
+ *mib_ipAddressAddrType_val_ptr = INETADDRESSTYPE_UNKNOWN;
+ }
+
+ return MFD_SUCCESS;
+} /* ipAddressAddrType_map */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param ipAddressAddrType_val
+ * @param ipAddressAddr_val_ptr
+ * @param ipAddressAddr_val_ptr_len
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+ipAddressTable_indexes_set_tbl_idx(ipAddressTable_mib_index * tbl_idx,
+ u_long ipAddressAddrType_val,
+ char *ipAddressAddr_val_ptr,
+ size_t ipAddressAddr_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_indexes_set_tbl_idx", "called\n"));
+
+ /*
+ * ipAddressAddrType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ /** WARNING: this code might not work for netsnmp_ipaddress_entry */
+ ipAddressAddrType_map(&tbl_idx->ipAddressAddrType,
+ ipAddressAddrType_val);
+
+ /*
+ * ipAddressAddr(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ tbl_idx->ipAddressAddr_len = sizeof(tbl_idx->ipAddressAddr) / sizeof(tbl_idx->ipAddressAddr[0]); /* max length */
+ /** WARNING: this code might not work for netsnmp_ipaddress_entry */
+ /*
+ * make sure there is enough space for ipAddressAddr data
+ */
+ if (tbl_idx->ipAddressAddr_len < ipAddressAddr_val_ptr_len) {
+ snmp_log(LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ tbl_idx->ipAddressAddr_len = ipAddressAddr_val_ptr_len;
+ memcpy(tbl_idx->ipAddressAddr, ipAddressAddr_val_ptr,
+ ipAddressAddr_val_ptr_len * sizeof(ipAddressAddr_val_ptr[0]));
+
+
+ return MFD_SUCCESS;
+} /* ipAddressTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+ipAddressTable_indexes_set(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long ipAddressAddrType_val,
+ char *ipAddressAddr_val_ptr,
+ size_t ipAddressAddr_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_indexes_set",
+ "called\n"));
+
+ if (MFD_SUCCESS !=
+ ipAddressTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+ ipAddressAddrType_val,
+ ipAddressAddr_val_ptr,
+ ipAddressAddr_val_ptr_len))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if (0 != ipAddressTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* ipAddressTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressIfIndex
+ * ipAddressIfIndex is subid 3 of ipAddressEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.34.1.3
+ * Description:
+The index value which uniquely identifies the interface to
+ which this entry is applicable. The interface identified by
+ a particular value of this index is the same interface as
+ identified by the same value of the IF-MIB's ifIndex.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: d
+ *
+ * Ranges: 1 - 2147483647;
+ *
+ * Its syntax is InterfaceIndex (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the ipAddressIfIndex data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressIfIndex_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipAddressIfIndex_get(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ long *ipAddressIfIndex_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipAddressIfIndex_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressIfIndex_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipAddressIfIndex data.
+ * copy (* ipAddressIfIndex_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipAddressIfIndex_val_ptr) = rowreq_ctx->data->if_index;
+
+ return MFD_SUCCESS;
+} /* ipAddressIfIndex_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressType
+ * ipAddressType is subid 4 of ipAddressEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.34.1.4
+ * Description:
+The type of address. broadcast(3) is not a valid value for
+ IPv6 addresses (RFC3513).
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: unicast
+ *
+ * Enum range: 2/8. Values: unicast(1), anycast(2), broadcast(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipAddressType data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressType_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipAddressType_get(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipAddressType_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipAddressType_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressType_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipAddressType data.
+ * copy (* ipAddressType_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipAddressType_val_ptr) = rowreq_ctx->data->ia_type;
+
+ return MFD_SUCCESS;
+} /* ipAddressType_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressPrefix
+ * ipAddressPrefix is subid 5 of ipAddressEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.34.1.5
+ * Description:
+A pointer to the row in the prefix table to which this
+ address belongs. May be { 0 0 } if there is no such row.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ * defval: zeroDotZero
+ *
+ *
+ * Its syntax is RowPointer (based on perltype OBJECTID)
+ * The net-snmp type is ASN_OBJECT_ID. The C type decl is oid (oid)
+ * This data type requires a length.
+ */
+/**
+ * Extract the current value of the ipAddressPrefix data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressPrefix_val_ptr_ptr
+ * Pointer to storage for a oid variable
+ * @param ipAddressPrefix_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by ipAddressPrefix.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*ipAddressPrefix_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update ipAddressPrefix_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+ipAddressPrefix_get(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ oid ** ipAddressPrefix_val_ptr_ptr,
+ size_t * ipAddressPrefix_val_ptr_len_ptr)
+{
+ oid *dst, tmp_oid[MAX_OID_LEN] =
+ { 1, 3, 6, 1, 2, 1, 4, 32, 1, 5 };
+ u_char tmp_buf[NETSNMP_ACCESS_IPADDRESS_BUF_SIZE];
+ int len;
+
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert((NULL != ipAddressPrefix_val_ptr_ptr)
+ && (NULL != *ipAddressPrefix_val_ptr_ptr));
+ netsnmp_assert(NULL != ipAddressPrefix_val_ptr_len_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressPrefix_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipAddressPrefix data.
+ * copy (* ipAddressPrefix_val_ptr_ptr ) data and (* ipAddressPrefix_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ dst = &tmp_oid[10];
+ *(dst++) = rowreq_ctx->data->if_index;
+ *(dst++) = rowreq_ctx->tbl_idx.ipAddressAddrType;
+ *(dst++) = rowreq_ctx->data->ia_address_len;
+ netsnmp_ipaddress_prefix_copy(tmp_buf,
+ rowreq_ctx->tbl_idx.ipAddressAddr,
+ rowreq_ctx->data->ia_address_len,
+ rowreq_ctx->data->ia_prefix_len);
+ for (len = 0; len < rowreq_ctx->data->ia_address_len; ++len)
+ *(dst++) = tmp_buf[len];
+ *(dst++) = rowreq_ctx->data->ia_prefix_len;
+ len = dst - tmp_oid;
+
+ len *= sizeof((*ipAddressPrefix_val_ptr_ptr)[0]);
+ if ((*ipAddressPrefix_val_ptr_len_ptr) < len) {
+ (*ipAddressPrefix_val_ptr_ptr) = malloc(len);
+ if (NULL == (*ipAddressPrefix_val_ptr_ptr)) {
+ snmp_log(LOG_ERR, "could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (*ipAddressPrefix_val_ptr_len_ptr) = len;
+ memcpy((*ipAddressPrefix_val_ptr_ptr), tmp_oid, len);
+
+ return MFD_SUCCESS;
+} /* ipAddressPrefix_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressOrigin
+ * ipAddressOrigin is subid 6 of ipAddressEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.34.1.6
+ * Description:
+The origin of the address.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 4/8. Values: other(1), manual(2), dhcp(4), linklayer(5), random(6)
+ *
+ * Its syntax is IpAddressOriginTC (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipAddressOrigin data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressOrigin_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipAddressOrigin_get(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipAddressOrigin_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipAddressOrigin_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressOrigin_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipAddressOrigin data.
+ * copy (* ipAddressOrigin_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipAddressOrigin_val_ptr) = rowreq_ctx->data->ia_origin;
+
+ return MFD_SUCCESS;
+} /* ipAddressOrigin_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressStatus
+ * ipAddressStatus is subid 7 of ipAddressEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.34.1.7
+ * Description:
+The status of the address, describing if the address can be
+ used for communication.
+
+
+ In the absence of other information, an IPv4 address is
+ always preferred(1).
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: preferred
+ *
+ * Enum range: 5/8. Values: preferred(1), invalid(3), inaccessible(4), unknown(5), tentative(6), duplicate(7)
+ *
+ * Its syntax is IpAddressStatusTC (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipAddressStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipAddressStatus_get(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipAddressStatus_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipAddressStatus_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressStatus_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipAddressStatus data.
+ * copy (* ipAddressStatus_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipAddressStatus_val_ptr) = rowreq_ctx->data->ia_status;
+
+ return MFD_SUCCESS;
+} /* ipAddressStatus_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressCreated
+ * ipAddressCreated is subid 8 of ipAddressEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.34.1.8
+ * Description:
+The value of sysUpTime at the time this entry was created.
+ If this entry was created prior to the last re-
+ initialization of the local network management subsystem,
+ then this object contains a zero value.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is TimeStamp (based on perltype TICKS)
+ * The net-snmp type is ASN_TIMETICKS. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipAddressCreated data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressCreated_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipAddressCreated_get(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipAddressCreated_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipAddressCreated_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressCreated_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipAddressCreated data.
+ * copy (* ipAddressCreated_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipAddressCreated_val_ptr) = rowreq_ctx->ipAddressCreated;
+
+ return MFD_SUCCESS;
+} /* ipAddressCreated_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressLastChanged
+ * ipAddressLastChanged is subid 9 of ipAddressEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.34.1.9
+ * Description:
+The value of sysUpTime at the time this entry was last
+ updated. If this entry was updated prior to the last re-
+ initialization of the local network management subsystem,
+ then this object contains a zero value.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is TimeStamp (based on perltype TICKS)
+ * The net-snmp type is ASN_TIMETICKS. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipAddressLastChanged data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressLastChanged_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipAddressLastChanged_get(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipAddressLastChanged_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipAddressLastChanged_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressLastChanged_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipAddressLastChanged data.
+ * copy (* ipAddressLastChanged_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipAddressLastChanged_val_ptr) = rowreq_ctx->ipAddressLastChanged;
+
+ return MFD_SUCCESS;
+} /* ipAddressLastChanged_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressRowStatus
+ * ipAddressRowStatus is subid 10 of ipAddressEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.34.1.10
+ * Description:
+The status of this conceptual row.
+
+
+ The RowStatus TC requires that this DESCRIPTION clause
+ states under which circumstances other objects in this row
+ can be modified. The value of this object has no effect on
+ whether other objects in this conceptual row can be
+ modified.
+
+
+ A conceptual row can not be made active until the
+ ipAddressIfIndex has been set to a valid index.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipAddressRowStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressRowStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipAddressRowStatus_get(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipAddressRowStatus_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipAddressRowStatus_val_ptr);
+
+ /** WARNING: this code might not work for netsnmp_ipaddress_entry */
+ (*ipAddressRowStatus_val_ptr) = rowreq_ctx->ipAddressRowStatus;
+
+ return MFD_SUCCESS;
+} /* ipAddressRowStatus_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressStorageType
+ * ipAddressStorageType is subid 11 of ipAddressEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.34.1.11
+ * Description:
+The storage type for this conceptual row. If this object
+ has a value of 'permanent' then no other objects are
+ required to be able to be modified.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: volatile
+ *
+ * Enum range: 4/8. Values: other(1), volatile(2), nonVolatile(3), permanent(4), readOnly(5)
+ *
+ * Its syntax is StorageType (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipAddressStorageType data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressStorageType_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipAddressStorageType_get(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipAddressStorageType_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipAddressStorageType_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressStorageType_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipAddressStorageType data.
+ * copy (* ipAddressStorageType_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipAddressStorageType_val_ptr) = rowreq_ctx->data->ia_storagetype;
+
+ return MFD_SUCCESS;
+} /* ipAddressStorageType_get */
+
+
+
+/** @} */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipAddressTable is subid 34 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.34, length: 8
+ */
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +-------------+ +==============+
+ * | row |f|<-------|| object ||
+ * | create |1| E || lookup ||
+ * +-------------+ +==============+
+ * E | | S | S
+ * | +------------------>|
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * |
+ * (err && f1)------------------->+
+ * | |
+ * +--------------+ +--------------+
+ * | post |<--------| row |
+ * | request | U | release |
+ * +--------------+ +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * ipAddressTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * ipAddressTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipAddressTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ipAddressTable_undo_setup(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_undo_setup",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> Setup ipAddressTable undo.
+ * set up ipAddressTable undo information, in preparation for a set.
+ * Undo storage is in (* ipAddressStorageType_val_ptr )*
+ */
+ /*
+ * check for storage types that don't allow modification.
+ * probably should try and do this earlier (and we could, by
+ * adding code to the interface file), but this ought to suffice.
+ */
+ if (STORAGETYPE_READONLY == rowreq_ctx->data->ia_storagetype) {
+ DEBUGMSGTL(("ipAddressTable", "can't change readonly row\n"));
+ return MFD_NOT_VALID_EVER;
+ }
+
+ /*
+ * save last changed
+ */
+ rowreq_ctx->ipAddressLastChanged_undo =
+ rowreq_ctx->ipAddressLastChanged;
+
+
+ /*
+ * just copy everything
+ */
+ rc = netsnmp_access_ipaddress_entry_copy(rowreq_ctx->undo,
+ rowreq_ctx->data);
+
+ return rc;
+} /* ipAddressTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipAddressTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ipAddressTable_undo(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_undo", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> ipAddressTable undo.
+ * ipAddressTable undo information, in response to a failed set.
+ * Undo storage is in (* ipAddressStorageType_val_ptr )*
+ */
+
+ return rc;
+} /* ipAddressTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipAddressTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ipAddressTable_undo_cleanup(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_undo_cleanup",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:452:M: |-> Cleanup ipAddressTable undo.
+ * Undo storage is in (* ipAddressStorageType_val_ptr )*
+ */
+ rowreq_ctx->ipAddressLastChanged =
+ rowreq_ctx->ipAddressLastChanged_undo;
+
+ return rc;
+} /* ipAddressTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ipAddressTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ipAddressTable_commit(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_commit",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * commit ipAddressTable data
+ * 1) check the column's flag to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ /*
+ * did anything change?
+ */
+ if (0 == rowreq_ctx->column_set_flags) {
+ DEBUGMSGTL(("ipAddressTable:ipAddressTable_commit",
+ "no change\n"));
+ return MFD_SUCCESS;
+ }
+
+
+ /*
+ * pass everything to data access
+ * let data access know what columns are set
+ */
+ rowreq_ctx->data->flags = rowreq_ctx->column_set_flags;
+
+ if (rowreq_ctx->column_set_flags & COLUMN_IPADDRESSROWSTATUS_FLAG) {
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ rowreq_ctx->data->flags |= NETSNMP_ACCESS_IPADDRESS_CREATE;
+ rowreq_ctx->ipAddressCreated = netsnmp_get_agent_uptime();
+ } else if (ROWSTATUS_DESTROY == rowreq_ctx->ipAddressRowStatus) {
+ rowreq_ctx->data->flags |= NETSNMP_ACCESS_IPADDRESS_DELETE;
+ } else
+ rowreq_ctx->data->flags |= NETSNMP_ACCESS_IPADDRESS_CHANGE;
+ } else
+ rowreq_ctx->data->flags |= NETSNMP_ACCESS_IPADDRESS_CHANGE;
+
+ /*
+ * do it
+ */
+ rc = netsnmp_access_ipaddress_entry_set(rowreq_ctx->data);
+ if (rc) {
+ DEBUGMSGTL(("ipAddressTable",
+ "bad rc %d from IP address data access\n", rc));
+ rc = MFD_ERROR;
+ } else {
+ rowreq_ctx->ipAddressLastChanged = netsnmp_get_agent_uptime();
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+ return rc;
+} /* ipAddressTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ipAddressTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ipAddressTable_undo_commit(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_undo_commit",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:485:M: |-> Undo ipAddressTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+ if (rowreq_ctx->column_set_flags & COLUMN_IPADDRESSROWSTATUS_FLAG) {
+ /*
+ * if we created an addr, delete it. if we deleted it,
+ * re-create it. If we changed it, change it back.
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ rowreq_ctx->undo->flags |= NETSNMP_ACCESS_IPADDRESS_DELETE;
+ } else if (ROWSTATUS_DESTROY == rowreq_ctx->ipAddressRowStatus) {
+ rowreq_ctx->undo->flags |= NETSNMP_ACCESS_IPADDRESS_CREATE;
+ } else
+ rowreq_ctx->undo->flags |= NETSNMP_ACCESS_IPADDRESS_CHANGE;
+ } else
+ rowreq_ctx->undo->flags |= NETSNMP_ACCESS_IPADDRESS_CHANGE;
+
+ /*
+ * do it
+ */
+ rc = netsnmp_access_ipaddress_entry_set(rowreq_ctx->undo);
+ if (rc) {
+ DEBUGMSGTL(("ipAddressTable",
+ "bad rc %d from IP address data access\n", rc));
+ rc = MFD_ERROR;
+ }
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* ipAddressTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement ipAddressTable node value checks.
+ * TODO:450:M: Implement ipAddressTable undo functions.
+ * TODO:460:M: Implement ipAddressTable set functions.
+ * TODO:480:M: Implement ipAddressTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressIfIndex
+ * ipAddressIfIndex is subid 3 of ipAddressEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.34.1.3
+ * Description:
+The index value which uniquely identifies the interface to
+ which this entry is applicable. The interface identified by
+ a particular value of this index is the same interface as
+ identified by the same value of the IF-MIB's ifIndex.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: d
+ *
+ * Ranges: 1 - 2147483647;
+ *
+ * Its syntax is InterfaceIndex (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressIfIndex_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipAddressTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is in (one of) the range set(s): 1 - 2147483647
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipAddressIfIndex_check_value(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ long ipAddressIfIndex_val)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressIfIndex_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipAddressIfIndex value.
+ */
+ /*
+ * if the new value is the same as the old, accept it.
+ */
+ if (ipAddressIfIndex_val == rowreq_ctx->data->if_index)
+ return MFD_SUCCESS;
+
+ /*
+ * currently don't support moving addresses between interfaces, so
+ * if this isn't a new row, return error.
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)) {
+ DEBUGMSGT(("ipAddressTable",
+ "changing ifIndex value not supported\n"));
+ return MFD_NOT_VALID_EVER;
+ }
+
+ /*
+ * find name for ifIndex
+ */
+ if (NULL == netsnmp_access_interface_name_find(ipAddressIfIndex_val)) {
+ DEBUGMSGT(("ipAddressTable", "cant find name for index %d\n",
+ ipAddressIfIndex_val));
+ return MFD_NOT_VALID_NOW;
+ }
+
+ return MFD_SUCCESS; /* ipAddressIfIndex value not illegal */
+} /* ipAddressIfIndex_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipAddressTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipAddressTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipAddressIfIndex_undo_setup(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressIfIndex_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipAddressIfIndex undo.
+ */
+ /*
+ * handled in ipAddressTable_undo_setup
+ */
+
+ return MFD_SUCCESS;
+} /* ipAddressIfIndex_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipAddressIfIndex_val
+ * A long containing the new value.
+ */
+int
+ipAddressIfIndex_set(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ long ipAddressIfIndex_val)
+{
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressIfIndex_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipAddressIfIndex value.
+ * set ipAddressIfIndex value in rowreq_ctx->data
+ */
+ if (rowreq_ctx->data->if_index != ipAddressIfIndex_val)
+ rowreq_ctx->data->if_index = ipAddressIfIndex_val;
+ else
+ rowreq_ctx->column_set_flags &= ~COLUMN_IPADDRESSIFINDEX_FLAG;
+
+ return MFD_SUCCESS;
+} /* ipAddressIfIndex_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipAddressIfIndex_undo(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressIfIndex_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipAddressIfIndex undo.
+ */
+ /*
+ * copy ipAddressIfIndex data
+ * set rowreq_ctx->data->ipAddressIfIndex from rowreq_ctx->undo->ipAddressIfIndex
+ */
+ rowreq_ctx->data->if_index = rowreq_ctx->undo->if_index;
+
+ return MFD_SUCCESS;
+} /* ipAddressIfIndex_undo */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressType
+ * ipAddressType is subid 4 of ipAddressEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.34.1.4
+ * Description:
+The type of address. broadcast(3) is not a valid value for
+ IPv6 addresses (RFC3513).
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: unicast
+ *
+ * Enum range: 2/8. Values: unicast(1), anycast(2), broadcast(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressType_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipAddressTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of unicast(1), anycast(2), broadcast(3)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipAddressType_check_value(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long ipAddressType_val)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressType_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipAddressType value.
+ *
+ * no support for anything but unicast yet
+ */
+ if (ipAddressType_val != IPADDRESSTYPE_UNICAST)
+ return MFD_NOT_VALID_EVER;
+
+ return MFD_SUCCESS; /* ipAddressType value not illegal */
+} /* ipAddressType_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipAddressTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipAddressTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipAddressType_undo_setup(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressType_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipAddressType undo.
+ */
+ /*
+ * handled in ipAddressTable_undo_setup
+ */
+
+ return MFD_SUCCESS;
+} /* ipAddressType_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipAddressType_val
+ * A long containing the new value.
+ */
+int
+ipAddressType_set(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long ipAddressType_val)
+{
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressType_set", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipAddressType value.
+ * set ipAddressType value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->ia_type = ipAddressType_val;
+
+ return MFD_SUCCESS;
+} /* ipAddressType_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipAddressType_undo(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressType_undo", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipAddressType undo.
+ */
+ /*
+ * copy ipAddressType data
+ * set rowreq_ctx->data->ipAddressType from rowreq_ctx->undo->ipAddressType
+ */
+ rowreq_ctx->data->ia_type = rowreq_ctx->undo->ia_type;
+
+ return MFD_SUCCESS;
+} /* ipAddressType_undo */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressStatus
+ * ipAddressStatus is subid 7 of ipAddressEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.34.1.7
+ * Description:
+The status of the address, describing if the address can be
+ used for communication.
+
+
+ In the absence of other information, an IPv4 address is
+ always preferred(1).
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: preferred
+ *
+ * Enum range: 5/8. Values: preferred(1), invalid(3), inaccessible(4), unknown(5), tentative(6), duplicate(7)
+ *
+ * Its syntax is IpAddressStatusTC (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressStatus_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipAddressTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of preferred(1), invalid(3), inaccessible(4), unknown(5), tentative(6), duplicate(7)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipAddressStatus_check_value(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long ipAddressStatus_val)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressStatus_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipAddressStatus value.
+ *
+ * nothing but preferred supported yet
+ */
+ if (IPADDRESSSTATUSTC_PREFERRED != ipAddressStatus_val)
+ return MFD_NOT_VALID_EVER;
+
+ return MFD_SUCCESS; /* ipAddressStatus value not illegal */
+} /* ipAddressStatus_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipAddressTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipAddressTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipAddressStatus_undo_setup(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressStatus_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipAddressStatus undo.
+ */
+ /*
+ * handled in ipAddressTable_undo_setup
+ */
+
+ return MFD_SUCCESS;
+} /* ipAddressStatus_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipAddressStatus_val
+ * A long containing the new value.
+ */
+int
+ipAddressStatus_set(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long ipAddressStatus_val)
+{
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressStatus_set", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipAddressStatus value.
+ * set ipAddressStatus value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->ia_status = ipAddressStatus_val;
+
+ return MFD_SUCCESS;
+} /* ipAddressStatus_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipAddressStatus_undo(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressStatus_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipAddressStatus undo.
+ */
+ /*
+ * copy ipAddressStatus data
+ * set rowreq_ctx->data->ipAddressStatus from rowreq_ctx->undo->ipAddressStatus
+ */
+ rowreq_ctx->data->ia_status = rowreq_ctx->undo->ia_status;
+
+ return MFD_SUCCESS;
+} /* ipAddressStatus_undo */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressRowStatus
+ * ipAddressRowStatus is subid 10 of ipAddressEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.34.1.10
+ * Description:
+The status of this conceptual row.
+
+
+ The RowStatus TC requires that this DESCRIPTION clause
+ states under which circumstances other objects in this row
+ can be modified. The value of this object has no effect on
+ whether other objects in this conceptual row can be
+ modified.
+
+
+ A conceptual row can not be made active until the
+ ipAddressIfIndex has been set to a valid index.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressRowStatus_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipAddressTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipAddressRowStatus_check_value(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long ipAddressRowStatus_val)
+{
+ int rc;
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressRowStatus_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipAddressRowStatus value.
+ *
+ * don't support createAndWait
+ * check for valid RowStatus transition (old, new)
+ */
+ if (ROWSTATUS_CREATEANDWAIT == ipAddressRowStatus_val) {
+ DEBUGMSGTL(("ipAddressTable", "createAndWait not supported\n"));
+ return MFD_NOT_VALID_EVER;
+ }
+
+ rc = check_rowstatus_transition(rowreq_ctx->ipAddressRowStatus,
+ ipAddressRowStatus_val);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipAddressTable",
+ "row status transition from %d to %d\n",
+ rowreq_ctx->ipAddressRowStatus,
+ ipAddressRowStatus_val));
+ return rc;
+ }
+
+ return MFD_SUCCESS; /* ipAddressRowStatus value not illegal */
+} /* ipAddressRowStatus_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipAddressTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipAddressTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipAddressRowStatus_undo_setup(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressRowStatus_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipAddressRowStatus undo.
+ */
+ /*
+ * handled in ipAddressTable_undo_setup
+ */
+
+ return MFD_SUCCESS;
+} /* ipAddressRowStatus_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipAddressRowStatus_val
+ * A long containing the new value.
+ */
+int
+ipAddressRowStatus_set(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long ipAddressRowStatus_val)
+{
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressRowStatus_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipAddressRowStatus value.
+ * set ipAddressRowStatus value in rowreq_ctx->data
+ */
+ rowreq_ctx->ipAddressRowStatus = ipAddressRowStatus_val;
+
+ return MFD_SUCCESS;
+} /* ipAddressRowStatus_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipAddressRowStatus_undo(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressRowStatus_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipAddressRowStatus undo.
+ */
+ /*
+ * copy ipAddressRowStatus data
+ * set rowreq_ctx->data->ipAddressRowStatus from rowreq_ctx->undo->ipAddressRowStatus
+ */
+ rowreq_ctx->ipAddressRowStatus = rowreq_ctx->ipAddressRowStatus_undo;
+
+ return MFD_SUCCESS;
+} /* ipAddressRowStatus_undo */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressStorageType
+ * ipAddressStorageType is subid 11 of ipAddressEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.2.1.4.34.1.11
+ * Description:
+The storage type for this conceptual row. If this object
+ has a value of 'permanent' then no other objects are
+ required to be able to be modified.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ * defval: volatile
+ *
+ * Enum range: 4/8. Values: other(1), volatile(2), nonVolatile(3), permanent(4), readOnly(5)
+ *
+ * Its syntax is StorageType (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipAddressStorageType_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipAddressTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of other(1), volatile(2), nonVolatile(3), permanent(4), readOnly(5)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipAddressStorageType_check_value(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long ipAddressStorageType_val)
+{
+ int rc;
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressStorageType_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipAddressStorageType value.
+ */
+ /*
+ * since I don't know how the various operating systems
+ * deal with ip addresses, and whether or not changes will
+ * be saved on reboot, so don't allow rows to be set to anything
+ * but volatile. I'd prefer other, but since the default for
+ * new rows, per the mib, is volatile...
+ *
+ * If some industrious soul would like
+ * non-volaltile support, the first would need to
+ * add it in the data access code for their os
+ * define a flag bit for volatile/permanent/readonly
+ * set the bit in data access
+ * copy the bit to a new var in the rowreq_ctx (see _add_new_entry)
+ * with a default of volatile (for os' w/out nonvolatile support)
+ * update this code to use new flag
+ */
+ if (STORAGETYPE_VOLATILE != ipAddressStorageType_val)
+ return MFD_NOT_VALID_EVER;
+
+ /*
+ * check for valid StorageType transition (old, new)
+ */
+ rc = check_storage_transition(rowreq_ctx->data->ia_storagetype,
+ ipAddressStorageType_val);
+ if (MFD_SUCCESS != rc)
+ return rc;
+
+ return MFD_SUCCESS; /* ipAddressStorageType value not illegal */
+} /* ipAddressStorageType_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipAddressTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipAddressTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipAddressStorageType_undo_setup(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressStorageType_undo_setup",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipAddressStorageType undo.
+ */
+ /*
+ * handled in ipAddressTable_undo_setup
+ */
+
+ return MFD_SUCCESS;
+} /* ipAddressStorageType_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipAddressStorageType_val
+ * A long containing the new value.
+ */
+int
+ipAddressStorageType_set(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ u_long ipAddressStorageType_val)
+{
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressStorageType_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipAddressStorageType value.
+ * set ipAddressStorageType value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->ia_storagetype = ipAddressStorageType_val;
+
+ return MFD_SUCCESS;
+} /* ipAddressStorageType_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipAddressStorageType_undo(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressStorageType_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipAddressStorageType undo.
+ */
+ /*
+ * copy ipAddressStorageType data
+ * set rowreq_ctx->data->ipAddressStorageType from rowreq_ctx->undo->ipAddressStorageType
+ */
+ rowreq_ctx->data->ia_storagetype = rowreq_ctx->undo->ia_storagetype;
+
+ return MFD_SUCCESS;
+} /* ipAddressStorageType_undo */
+
+/**
+ * check dependencies
+ *
+ * This is useful for for tables which have dependencies between columns
+ * (or rows, or tables). For example, two columns allocating a percentage
+ * of something add up 100%.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ipAddressTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @retval MFD_SUCCESS all the changes to the row are legal
+ * @retval MFD_ERROR one or more changes are not legal
+ *
+ * (see README-table-ipAddressTable if you don't have dependencies)
+ */
+int
+ipAddressTable_check_dependencies(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipAddressTable:ipAddressTable_check_dependencies", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:470:o: Check ipAddressTable row dependencies.
+ * check that all new value are legal and consistent with each other
+ */
+ /*
+ * check RowStatus dependencies
+ */
+ if (rowreq_ctx->column_set_flags & COLUMN_IPADDRESSROWSTATUS_FLAG) {
+ /*
+ * row creation requirements
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ if (ROWSTATUS_DESTROY == rowreq_ctx->ipAddressRowStatus) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED;
+ } else if (ROWSTATUS_CREATEANDGO ==
+ rowreq_ctx->ipAddressRowStatus) {
+ if ((rowreq_ctx->
+ column_set_flags & IPADDRESSTABLE_REQUIRED_COLS)
+ != IPADDRESSTABLE_REQUIRED_COLS) {
+ DEBUGMSGTL(("ipAddressTable",
+ "required columns missing (0x%0x != 0x%0x)\n",
+ rowreq_ctx->column_set_flags,
+ IPADDRESSTABLE_REQUIRED_COLS));
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ rowreq_ctx->ipAddressRowStatus = ROWSTATUS_ACTIVE;
+ }
+ } /* row creation */
+ else {
+ /*
+ * row change requirements
+ */
+ /*
+ * don't allow a destroy if any other value was changed, since
+ * that might call data access routines with bad info.
+ *
+ * you may or may not require the row be notInService before it
+ * can be destroyed.
+ */
+ if (ROWSTATUS_DESTROY == rowreq_ctx->ipAddressRowStatus) {
+ if (rowreq_ctx->
+ column_set_flags & ~COLUMN_IPADDRESSROWSTATUS_FLAG) {
+ DEBUGMSGTL(("ipAddressTable",
+ "destroy must be only varbind for row\n"));
+ return MFD_NOT_VALID_NOW;
+ }
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED;
+
+ } /* row destroy */
+ } /* row change */
+ } else {
+ /*
+ * must have row status to create a row
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ DEBUGMSGTL(("ipAddressTable",
+ "must use RowStatus to create rows\n"));
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ } /* row status not set */
+
+ return rc;
+} /* ipAddressTable_check_dependencies */
+
+/** @} */
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
new file mode 100644
index 0000000000..6f4cafe042
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
@@ -0,0 +1,457 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ipAddressTable.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+#ifndef IPADDRESSTABLE_H
+#define IPADDRESSTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+#include <net-snmp/data_access/ipaddress.h>
+
+ /*
+ * other required module components
+ */
+ /* *INDENT-OFF* */
+config_require(if-mib/data_access/interface)
+config_require(ip-mib/data_access/ipaddress)
+config_require(ip-mib/ipAddressTable/ipAddressTable_interface)
+config_require(ip-mib/ipAddressTable/ipAddressTable_data_access)
+ /* *INDENT-ON* */
+
+ /*
+ * OID, column number and enum definions for ipAddressTable
+ */
+#include "ipAddressTable_constants.h"
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+ void init_ipAddressTable(void);
+ void shutdown_ipAddressTable(void);
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipAddressTable is subid 34 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.34, length: 8
+ */
+ /*
+ *********************************************************************
+ * 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 ipAddressTable registration context.
+ */
+ typedef netsnmp_data_list ipAddressTable_registration;
+
+/**********************************************************************/
+ /*
+ * TODO:110:r: |-> Review ipAddressTable data context structure.
+ * This structure is used to represent the data for ipAddressTable.
+ */
+ typedef netsnmp_ipaddress_entry ipAddressTable_data;
+
+
+ /*
+ *********************************************************************
+ * TODO:115:o: |-> Review ipAddressTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+ typedef ipAddressTable_data ipAddressTable_undo_data;
+
+ /*
+ * TODO:120:r: |-> Review ipAddressTable mib index.
+ * This structure is used to represent the index for ipAddressTable.
+ */
+ typedef struct ipAddressTable_mib_index_s {
+
+ /*
+ * ipAddressAddrType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ u_long ipAddressAddrType;
+
+ /*
+ * ipAddressAddr(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ /** 128 - 1(other indexes) - oid length(10) = 116 */
+ char ipAddressAddr[116];
+ size_t ipAddressAddr_len;
+
+
+ } ipAddressTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review ipAddressTable 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(8)
+ */
+#define MAX_ipAddressTable_IDX_LEN 118
+
+
+ /*
+ *********************************************************************
+ * TODO:130:o: |-> Review ipAddressTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * ipAddressTable_rowreq_ctx pointer.
+ */
+ typedef struct ipAddressTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_ipAddressTable_IDX_LEN];
+
+ ipAddressTable_mib_index tbl_idx;
+
+ ipAddressTable_data *data;
+ ipAddressTable_undo_data *undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 ipAddressTable rowreq context.
+ */
+
+ /*
+ * not available from net-snmp ipaddress data_access
+ */
+ uint32_t ipAddressCreated; /* sysUpTime */
+ uint32_t ipAddressLastChanged, ipAddressLastChanged_undo; /* sysUpTime */
+ int ipAddressRowStatus, ipAddressRowStatus_undo;
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *ipAddressTable_data_list;
+
+ } ipAddressTable_rowreq_ctx;
+
+ typedef struct ipAddressTable_ref_rowreq_ctx_s {
+ ipAddressTable_rowreq_ctx *rowreq_ctx;
+ } ipAddressTable_ref_rowreq_ctx;
+
+ /*
+ *********************************************************************
+ * function prototypes
+ */
+ int ipAddressTable_pre_request(ipAddressTable_registration
+ * user_context);
+ int ipAddressTable_post_request(ipAddressTable_registration
+ * user_context, int rc);
+
+ int
+ ipAddressTable_rowreq_ctx_init(ipAddressTable_rowreq_ctx *
+ rowreq_ctx, void *user_init_ctx);
+ void
+ ipAddressTable_rowreq_ctx_cleanup(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+ ipAddressTable_data *ipAddressTable_allocate_data(void);
+ void ipAddressTable_release_data(ipAddressTable_data *
+ data);
+
+ int
+ ipAddressTable_check_dependencies(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressTable_commit(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+ ipAddressTable_rowreq_ctx
+ * ipAddressTable_row_find_by_mib_index(ipAddressTable_mib_index *
+ mib_idx);
+
+ extern oid ipAddressTable_oid[];
+ extern int ipAddressTable_oid_size;
+
+
+#include "ipAddressTable_interface.h"
+#include "ipAddressTable_data_access.h"
+ /*
+ *********************************************************************
+ * GET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipAddressTable is subid 34 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.34, length: 8
+ */
+ /*
+ * indexes
+ */
+ int ipAddressAddrType_map(u_long *
+ mib_ipAddressAddrType_val_ptr,
+ u_long
+ raw_ipAddressAddrType_val);
+
+ int ipAddressIfIndex_get(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ long *ipAddressIfIndex_val_ptr);
+ int ipAddressType_get(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long * ipAddressType_val_ptr);
+ int ipAddressPrefix_get(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ oid ** ipAddressPrefix_val_ptr_ptr,
+ size_t
+ * ipAddressPrefix_val_ptr_len_ptr);
+ int ipAddressOrigin_get(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long * ipAddressOrigin_val_ptr);
+ int ipAddressStatus_get(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long * ipAddressStatus_val_ptr);
+ int ipAddressCreated_get(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipAddressCreated_val_ptr);
+ int ipAddressLastChanged_get(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipAddressLastChanged_val_ptr);
+ int ipAddressRowStatus_get(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipAddressRowStatus_val_ptr);
+ int ipAddressStorageType_get(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipAddressStorageType_val_ptr);
+
+
+ int
+ ipAddressTable_indexes_set_tbl_idx(ipAddressTable_mib_index *
+ tbl_idx,
+ u_long ipAddressAddrType_val,
+ char *ipAddressAddr_val_ptr,
+ size_t
+ ipAddressAddr_val_ptr_len);
+ int ipAddressTable_indexes_set(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ipAddressAddrType_val,
+ char *ipAddressAddr_val_ptr,
+ size_t
+ ipAddressAddr_val_ptr_len);
+
+
+
+ /*
+ *********************************************************************
+ * SET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipAddressTable is subid 34 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.34, length: 8
+ */
+
+
+ int ipAddressTable_undo_setup(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressTable_undo_cleanup(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressTable_undo(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressTable_commit(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressTable_undo_commit(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+ int ipAddressIfIndex_check_value(ipAddressTable_rowreq_ctx
+ * rowreq_ctx, long
+ ipAddressIfIndex_val);
+
+ int ipAddressIfIndex_undo_setup(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressIfIndex_set(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipAddressIfIndex_val);
+ int ipAddressIfIndex_undo(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ipAddressType_check_value(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipAddressType_val);
+ int ipAddressType_undo_setup(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressType_set(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipAddressType_val);
+ int ipAddressType_undo(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ipAddressPrefix_check_value(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ oid *
+ ipAddressPrefix_val_ptr,
+ size_t
+ ipAddressPrefix_val_ptr_len);
+ int ipAddressPrefix_undo_setup(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressPrefix_set(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ oid * ipAddressPrefix_val_ptr,
+ size_t
+ ipAddressPrefix_val_ptr_len);
+ int ipAddressPrefix_undo(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ipAddressOrigin_check_value(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ipAddressOrigin_val);
+ int ipAddressOrigin_undo_setup(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressOrigin_set(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipAddressOrigin_val);
+ int ipAddressOrigin_undo(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ipAddressStatus_check_value(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ipAddressStatus_val);
+ int ipAddressStatus_undo_setup(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressStatus_set(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipAddressStatus_val);
+ int ipAddressStatus_undo(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ipAddressCreated_check_value(ipAddressTable_rowreq_ctx
+ * rowreq_ctx,
+ u_long
+ ipAddressCreated_val);
+ int ipAddressCreated_undo_setup(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressCreated_set(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipAddressCreated_val);
+ int ipAddressCreated_undo(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipAddressLastChanged_check_value(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipAddressLastChanged_val);
+ int
+ ipAddressLastChanged_undo_setup(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressLastChanged_set(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ipAddressLastChanged_val);
+ int ipAddressLastChanged_undo(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipAddressRowStatus_check_value(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipAddressRowStatus_val);
+ int ipAddressRowStatus_undo_setup(ipAddressTable_rowreq_ctx
+ * rowreq_ctx);
+ int ipAddressRowStatus_set(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipAddressRowStatus_val);
+ int ipAddressRowStatus_undo(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipAddressStorageType_check_value(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipAddressStorageType_val);
+ int
+ ipAddressStorageType_undo_setup(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressStorageType_set(ipAddressTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ipAddressStorageType_val);
+ int ipAddressStorageType_undo(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+ int
+ ipAddressTable_check_dependencies(ipAddressTable_rowreq_ctx * ctx);
+
+
+ /*
+ * DUMMY markers, ignore
+ *
+ * TODO:099:x: *************************************************************
+ * TODO:199:x: *************************************************************
+ * TODO:299:x: *************************************************************
+ * TODO:399:x: *************************************************************
+ * TODO:499:x: *************************************************************
+ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPADDRESSTABLE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h
new file mode 100644
index 0000000000..e7a7ae50a6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h
@@ -0,0 +1,213 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-constants.m2c,v 1.5 2005/07/15 22:41:16 rstory Exp $
+ *
+ * $Id: ipAddressTable_constants.h 13767 2005-12-01 17:00:57Z rstory $
+ */
+#ifndef IPADDRESSTABLE_CONSTANTS_H
+#define IPADDRESSTABLE_CONSTANTS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ * column number definitions for table ipAddressTable
+ */
+#define IPADDRESSTABLE_OID 1,3,6,1,2,1,4,34
+
+#define COLUMN_IPADDRESSADDRTYPE 1
+
+#define COLUMN_IPADDRESSADDR 2
+
+#define COLUMN_IPADDRESSIFINDEX 3
+#define COLUMN_IPADDRESSIFINDEX_FLAG (0x1 << 2)
+
+#define COLUMN_IPADDRESSTYPE 4
+#define COLUMN_IPADDRESSTYPE_FLAG (0x1 << 3)
+
+#define COLUMN_IPADDRESSPREFIX 5
+
+#define COLUMN_IPADDRESSORIGIN 6
+
+#define COLUMN_IPADDRESSSTATUS 7
+#define COLUMN_IPADDRESSSTATUS_FLAG (0x1 << 6)
+
+#define COLUMN_IPADDRESSCREATED 8
+
+#define COLUMN_IPADDRESSLASTCHANGED 9
+
+#define COLUMN_IPADDRESSROWSTATUS 10
+#define COLUMN_IPADDRESSROWSTATUS_FLAG (0x1 << 9)
+
+#define COLUMN_IPADDRESSSTORAGETYPE 11
+#define COLUMN_IPADDRESSSTORAGETYPE_FLAG (0x1 << 10)
+
+
+#define IPADDRESSTABLE_MIN_COL COLUMN_IPADDRESSIFINDEX
+#define IPADDRESSTABLE_MAX_COL COLUMN_IPADDRESSSTORAGETYPE
+
+ /*
+ * TODO:405:r: Review IPADDRESSTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define IPADDRESSTABLE_SETTABLE_COLS (COLUMN_IPADDRESSIFINDEX_FLAG | COLUMN_IPADDRESSTYPE_FLAG | COLUMN_IPADDRESSSTATUS_FLAG | COLUMN_IPADDRESSROWSTATUS_FLAG | COLUMN_IPADDRESSSTORAGETYPE_FLAG)
+ /*
+ * TODO:405:r: Review IPADDRESSTABLE_REQUIRED_COLS macro.
+ * OR together all the required rows for row creation.
+ * default is writable cols w/out defaults.
+ */
+#define IPADDRESSTABLE_REQUIRED_COLS (COLUMN_IPADDRESSIFINDEX_FLAG | COLUMN_IPADDRESSROWSTATUS_FLAG)
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table ipAddressTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipAddressAddrType (InetAddressType / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef INETADDRESSTYPE_ENUMS
+#define INETADDRESSTYPE_ENUMS
+
+#define INETADDRESSTYPE_UNKNOWN 0
+#define INETADDRESSTYPE_IPV4 1
+#define INETADDRESSTYPE_IPV6 2
+#define INETADDRESSTYPE_IPV4Z 3
+#define INETADDRESSTYPE_IPV6Z 4
+#define INETADDRESSTYPE_DNS 16
+
+#endif /* INETADDRESSTYPE_ENUMS */
+
+ /*
+ * TODO:140:o: Define your interal representation of ipAddressAddrType enums.
+ * (used for value mapping; see notes at top of file)
+ *
+ * simplistic map of address length to type
+ */
+#define INTERNAL_IPADDRESSTABLE_IPADDRESSADDRTYPE_IPV4 4
+#define INTERNAL_IPADDRESSTABLE_IPADDRESSADDRTYPE_IPV6 16
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipAddressType (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IPADDRESSTYPE_ENUMS
+#define IPADDRESSTYPE_ENUMS
+
+#define IPADDRESSTYPE_UNICAST 1
+#define IPADDRESSTYPE_ANYCAST 2
+#define IPADDRESSTYPE_BROADCAST 3
+
+#endif /* IPADDRESSTYPE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipAddressOrigin (IpAddressOriginTC / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IPADDRESSORIGINTC_ENUMS
+#define IPADDRESSORIGINTC_ENUMS
+
+#define IPADDRESSORIGINTC_OTHER 1
+#define IPADDRESSORIGINTC_MANUAL 2
+#define IPADDRESSORIGINTC_DHCP 4
+#define IPADDRESSORIGINTC_LINKLAYER 5
+#define IPADDRESSORIGINTC_RANDOM 6
+
+#endif /* IPADDRESSORIGINTC_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipAddressStatus (IpAddressStatusTC / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IPADDRESSSTATUSTC_ENUMS
+#define IPADDRESSSTATUSTC_ENUMS
+
+#define IPADDRESSSTATUSTC_PREFERRED 1
+#define IPADDRESSSTATUSTC_DEPRECATED 2
+#define IPADDRESSSTATUSTC_INVALID 3
+#define IPADDRESSSTATUSTC_INACCESSIBLE 4
+#define IPADDRESSSTATUSTC_UNKNOWN 5
+#define IPADDRESSSTATUSTC_TENTATIVE 6
+#define IPADDRESSSTATUSTC_DUPLICATE 7
+
+#endif /* IPADDRESSSTATUSTC_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipAddressRowStatus (RowStatus / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef ROWSTATUS_ENUMS
+#define ROWSTATUS_ENUMS
+
+#define ROWSTATUS_ACTIVE 1
+#define ROWSTATUS_NOTINSERVICE 2
+#define ROWSTATUS_NOTREADY 3
+#define ROWSTATUS_CREATEANDGO 4
+#define ROWSTATUS_CREATEANDWAIT 5
+#define ROWSTATUS_DESTROY 6
+
+#endif /* ROWSTATUS_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipAddressStorageType (StorageType / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef STORAGETYPE_ENUMS
+#define STORAGETYPE_ENUMS
+
+#define STORAGETYPE_OTHER 1
+#define STORAGETYPE_VOLATILE 2
+#define STORAGETYPE_NONVOLATILE 3
+#define STORAGETYPE_PERMANENT 4
+#define STORAGETYPE_READONLY 5
+
+#endif /* STORAGETYPE_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPADDRESSTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c
new file mode 100644
index 0000000000..035ee51055
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c
@@ -0,0 +1,708 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ipAddressTable_data_access.c 16381 2007-05-17 21:53:28Z hardaker $
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipAddressTable.h"
+
+
+#include "ipAddressTable_data_access.h"
+
+#include <sys/ioctl.h>
+#include <errno.h>
+
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipAddressTable is subid 34 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.34, length: 8
+ */
+
+/**
+ * initialization for ipAddressTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param ipAddressTable_reg
+ * Pointer to ipAddressTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+ipAddressTable_init_data(ipAddressTable_registration * ipAddressTable_reg)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_init_data",
+ "called\n"));
+
+ /*
+ * TODO:303:o: Initialize ipAddressTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* ipAddressTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+/**
+ * check entry for update
+ */
+static void
+_clear_times(ipAddressTable_rowreq_ctx * rowreq_ctx, void *magic)
+{
+ rowreq_ctx->ipAddressLastChanged = rowreq_ctx->ipAddressCreated = 0;
+}
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+ipAddressTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache * cache)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_container_init",
+ "called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,
+ "bad container param to ipAddressTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ /*
+ * We create a custom container here so we can pre-load it, which
+ * will result in all new entries with last changed values. we need
+ * to clear those... We also need to make sure ifIndexes have been
+ * assigned...
+ */
+ *container_ptr_ptr =
+ netsnmp_container_find("ipAddressTable:table_container");
+ if (NULL != *container_ptr_ptr) {
+ ipAddressTable_container_load(*container_ptr_ptr);
+ CONTAINER_FOR_EACH(*container_ptr_ptr,
+ (netsnmp_container_obj_func *) _clear_times,
+ NULL);
+ }
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,
+ "bad cache param to ipAddressTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up ipAddressTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+
+ /*
+ * basically, turn off all automatic cache handling except autoload.
+ */
+ cache->flags |=
+ (NETSNMP_CACHE_DONT_AUTO_RELEASE | NETSNMP_CACHE_DONT_FREE_EXPIRED
+ | NETSNMP_CACHE_DONT_FREE_BEFORE_LOAD | NETSNMP_CACHE_AUTO_RELOAD
+ | NETSNMP_CACHE_DONT_INVALIDATE_ON_SET);
+} /* ipAddressTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before ipAddressTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+ipAddressTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_container_shutdown",
+ "called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,
+ "bad params to ipAddressTable_container_shutdown\n");
+ return;
+ }
+
+} /* ipAddressTable_container_shutdown */
+
+/**
+ * check entry for update
+ */
+static void
+_check_entry_for_updates(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ void **magic)
+{
+ netsnmp_container *ipaddress_container = magic[0];
+ netsnmp_container *to_delete = (netsnmp_container *) magic[1];
+
+ /*
+ * check for matching entry using secondary index.
+ */
+ netsnmp_ipaddress_entry *ipaddress_entry =
+ CONTAINER_FIND(ipaddress_container, rowreq_ctx->data);
+ if (NULL == ipaddress_entry) {
+ DEBUGMSGTL(("ipAddressTable:access", "removing missing entry\n"));
+
+ if (NULL == to_delete) {
+ magic[1] = to_delete = netsnmp_container_find("lifo");
+ if (NULL == to_delete)
+ snmp_log(LOG_ERR, "couldn't create delete container\n");
+ }
+ if (NULL != to_delete)
+ CONTAINER_INSERT(to_delete, rowreq_ctx);
+ } else {
+ DEBUGMSGTL(("ipAddressTable:access", "updating existing entry\n"));
+
+ /*
+ * Check for changes & update
+ */
+ if (netsnmp_access_ipaddress_entry_update(rowreq_ctx->data,
+ ipaddress_entry) > 0)
+ rowreq_ctx->ipAddressLastChanged = netsnmp_get_agent_uptime();
+
+ /*
+ * remove entry from ifcontainer
+ */
+ CONTAINER_REMOVE(ipaddress_container, ipaddress_entry);
+ netsnmp_access_ipaddress_entry_free(ipaddress_entry);
+ }
+}
+
+/**
+ * add new entry
+ */
+static void
+_add_new_entry(netsnmp_ipaddress_entry *ipaddress_entry,
+ netsnmp_container *container)
+{
+ ipAddressTable_rowreq_ctx *rowreq_ctx;
+
+ DEBUGMSGTL(("ipAddressTable:access", "creating new entry\n"));
+
+ netsnmp_assert(NULL != ipaddress_entry);
+ netsnmp_assert(NULL != container);
+
+ /*
+ * allocate an row context and set the index(es)
+ */
+ rowreq_ctx = ipAddressTable_allocate_rowreq_ctx(ipaddress_entry, NULL);
+ if ((NULL != rowreq_ctx) &&
+ (MFD_SUCCESS ==
+ ipAddressTable_indexes_set(rowreq_ctx,
+ ipaddress_entry->ia_address_len,
+ ipaddress_entry->ia_address,
+ ipaddress_entry->ia_address_len))) {
+ if (CONTAINER_INSERT(container, rowreq_ctx) < 0) {
+ DEBUGMSGTL (("ipAddressTable:access","container insert failed for new entry\n"));
+ ipAddressTable_release_rowreq_ctx(rowreq_ctx);
+ return;
+ }
+ rowreq_ctx->ipAddressLastChanged =
+ rowreq_ctx->ipAddressCreated = netsnmp_get_agent_uptime();
+ } else {
+ if (NULL != rowreq_ctx) {
+ snmp_log(LOG_ERR, "error setting index while loading "
+ "ipAddressTable cache.\n");
+ ipAddressTable_release_rowreq_ctx(rowreq_ctx);
+ } else {
+ snmp_log(LOG_ERR, "memory allocation failed while loading "
+ "ipAddressTable cache.\n");
+ netsnmp_access_ipaddress_entry_free(ipaddress_entry);
+ }
+
+ return;
+ }
+
+ /*-------------------------------------------------------------------
+ * handle data that isn't part of the data_access ipaddress structure
+ */
+ rowreq_ctx->ipAddressRowStatus = ROWSTATUS_ACTIVE;
+}
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement ipAddressTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * ipAddressTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+ipAddressTable_container_load(netsnmp_container *container)
+{
+ netsnmp_container *ipaddress_container;
+ void *tmp_ptr[2];
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_cache_load",
+ "called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the ipAddressTable container.
+ * loop over your ipAddressTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ ipaddress_container =
+ netsnmp_access_ipaddress_container_load(NULL,
+ NETSNMP_ACCESS_IPADDRESS_LOAD_ADDL_IDX_BY_ADDR);
+ /*
+ * we just got a fresh copy of interface data. compare it to
+ * what we've already got, and make any adjustments, saving
+ * missing addresses to be deleted.
+ */
+ tmp_ptr[0] = ipaddress_container->next;
+ tmp_ptr[1] = NULL;
+ CONTAINER_FOR_EACH(container, (netsnmp_container_obj_func *)
+ _check_entry_for_updates, tmp_ptr);
+
+ /*
+ * now add any new interfaces
+ */
+ CONTAINER_FOR_EACH(ipaddress_container,
+ (netsnmp_container_obj_func *) _add_new_entry,
+ container);
+
+ /*
+ * free the container. we've either claimed each entry, or released it,
+ * so the access function doesn't need to clear the container.
+ */
+ netsnmp_access_ipaddress_container_free(ipaddress_container,
+ NETSNMP_ACCESS_IPADDRESS_FREE_DONT_CLEAR);
+
+ /*
+ * remove deleted addresses from table container
+ */
+ if (NULL != tmp_ptr[1]) {
+ netsnmp_container *tmp_container =
+ (netsnmp_container *) tmp_ptr[1];
+ ipAddressTable_rowreq_ctx *tmp_ctx;
+
+ /*
+ * this works because the tmp_container is a linked list,
+ * which can be used like a stack...
+ */
+ while (CONTAINER_SIZE(tmp_container)) {
+ /*
+ * get from delete list
+ */
+ tmp_ctx = CONTAINER_FIRST(tmp_container);
+
+ /*
+ * release context, delete from table container
+ */
+ CONTAINER_REMOVE(container, tmp_ctx);
+ ipAddressTable_release_rowreq_ctx(tmp_ctx);
+
+ /*
+ * pop off delete list
+ */
+ CONTAINER_REMOVE(tmp_container, NULL);
+ }
+ }
+
+ DEBUGMSGT(("verbose:ipAddressTable:ipAddressTable_cache_load",
+ "%d records\n", CONTAINER_SIZE(container)));
+
+ return MFD_SUCCESS;
+}
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+ipAddressTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_container_free",
+ "called\n"));
+
+ /*
+ * TODO:380:M: Free ipAddressTable container data.
+ */
+} /* ipAddressTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+ipAddressTable_row_prep(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_row_prep",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* ipAddressTable_row_prep */
+
+/*
+ * TODO:420:r: Implement ipAddressTable index validation.
+ */
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressAddrType
+ * ipAddressAddrType is subid 1 of ipAddressEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.2.1.4.34.1.1
+ * Description:
+The address type of ipAddressAddr.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 1 hasdefval 0
+ * readable 0 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 5/8. Values: unknown(0), ipv4(1), ipv6(2), ipv4z(3), ipv6z(4), dns(16)
+ *
+ * Its syntax is InetAddressType (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ *
+ *
+ *
+ * NOTE: NODE ipAddressAddrType IS NOT ACCESSIBLE
+ *
+ *
+ */
+/**
+ * check validity of ipAddressAddrType index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * ipAddressTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ * The value is one of unknown(0), ipv4(1), ipv6(2), ipv4z(3), ipv6z(4), dns(16)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+ipAddressAddrType_check_index(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressAddrType_check_index",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check ipAddressTable index ipAddressAddrType.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.ipAddressAddrType)
+ */
+ switch (rowreq_ctx->tbl_idx.ipAddressAddrType) {
+
+ case INETADDRESSTYPE_IPV4:
+ case INETADDRESSTYPE_IPV6:
+ break;
+
+ default:
+ DEBUGMSGT(("ipAddressTable", "illegal addr type\n"));
+ return MFD_ERROR;
+ }
+
+
+ return MFD_SUCCESS; /* ipAddressAddrType index ok */
+} /* ipAddressAddrType_check_index */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipAddressEntry.ipAddressAddr
+ * ipAddressAddr is subid 2 of ipAddressEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.2.1.4.34.1.2
+ * Description:
+The IP address to which this entry's addressing information
+ pertains. The address type of this object is specified in
+ ipAddressAddrType.
+
+
+ Implementors need to be aware that if the size of
+ ipAddressAddr exceeds 116 octets then OIDS of instances of
+ columns in this row will have more than 128 sub-identifiers
+ and cannot be accessed using SNMPv1, SNMPv2c or SNMPv3.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is InetAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ *
+ *
+ *
+ * NOTE: NODE ipAddressAddr IS NOT ACCESSIBLE
+ *
+ *
+ */
+/**
+ * check validity of ipAddressAddr index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * ipAddressTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ * The length is in (one of) the range set(s): 0 - 255
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+ipAddressAddr_check_index(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressAddr_check_index",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check ipAddressTable index ipAddressAddr.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.ipAddressAddr)
+ */
+ switch (rowreq_ctx->tbl_idx.ipAddressAddrType) {
+
+ case INETADDRESSTYPE_IPV4:
+ if (4 != rowreq_ctx->tbl_idx.ipAddressAddr_len) {
+ DEBUGMSGT(("ipAddressTable", "bad addr len: %d\n",rowreq_ctx->tbl_idx.ipAddressAddr_len));
+ return MFD_ERROR;
+ }
+ break;
+
+ case INETADDRESSTYPE_IPV6:
+ /** xxx-rks: allow 20? */
+ if (16 != rowreq_ctx->tbl_idx.ipAddressAddr_len) {
+ DEBUGMSGT(("ipAddressTable", "bad addr len: %d\n",rowreq_ctx->tbl_idx.ipAddressAddr_len));
+ return MFD_ERROR;
+ }
+ break;
+
+ default:
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS; /* ipAddressAddr index ok */
+} /* ipAddressAddr_check_index */
+
+/**
+ * verify specified index is valid.
+ *
+ * This check is independent of whether or not the values specified for
+ * the columns of the new row are valid. Column values and row consistency
+ * will be checked later. At this point, only the index values should be
+ * checked.
+ *
+ * All of the individual index validation functions have been called, so this
+ * is the place to make sure they are valid as a whole when combined. If
+ * you only have one index, then you probably don't need to do anything else
+ * here.
+ *
+ * @note Keep in mind that if the indexes refer to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ *
+ * @param ipAddressTable_reg
+ * Pointer to the user registration data
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_CANNOT_CREATE_NOW : index not valid right now
+ * @retval MFD_CANNOT_CREATE_EVER : index never valid
+ */
+int
+ipAddressTable_validate_index(ipAddressTable_registration *
+ ipAddressTable_reg,
+ ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_validate_index",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:430:M: |-> Validate potential ipAddressTable index.
+ *
+ *
+ * xxx-rks: we only plan ipv4 support initially
+ */
+ if ((4 != rowreq_ctx->tbl_idx.ipAddressAddr_len)) {
+ snmp_log(LOG_WARNING, "invalid index for a new row in the "
+ "ipAddressTable table.\n");
+ /*
+ * determine failure type.
+ *
+ * If the index could not ever be created, return MFD_NOT_EVER
+ * If the index can not be created under the present circumstances
+ * (even though it could be created under other circumstances),
+ * return MFD_NOT_NOW.
+ */
+ if (0) {
+ return MFD_CANNOT_CREATE_EVER;
+ } else {
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ } else {
+ rowreq_ctx->data->ia_address[0] =
+ rowreq_ctx->tbl_idx.ipAddressAddr[0];
+ rowreq_ctx->data->ia_address[1] =
+ rowreq_ctx->tbl_idx.ipAddressAddr[1];
+ rowreq_ctx->data->ia_address[2] =
+ rowreq_ctx->tbl_idx.ipAddressAddr[2];
+ rowreq_ctx->data->ia_address[3] =
+ rowreq_ctx->tbl_idx.ipAddressAddr[3];
+ rowreq_ctx->data->ia_address_len = 4;
+ }
+
+ return rc;
+} /* ipAddressTable_validate_index */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.h
new file mode 100644
index 0000000000..8e8a985501
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.h
@@ -0,0 +1,79 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ipAddressTable_data_access.h 13767 2005-12-01 17:00:57Z rstory $
+ */
+#ifndef IPADDRESSTABLE_DATA_ACCESS_H
+#define IPADDRESSTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipAddressTable is subid 34 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.34, length: 8
+ */
+
+
+ int ipAddressTable_init_data(ipAddressTable_registration *
+ ipAddressTable_reg);
+
+
+ /*
+ * TODO:180:o: Review ipAddressTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define IPADDRESSTABLE_CACHE_TIMEOUT 60
+
+ void ipAddressTable_container_init(netsnmp_container
+ **container_ptr_ptr,
+ netsnmp_cache * cache);
+ void ipAddressTable_container_shutdown(netsnmp_container
+ *container_ptr);
+
+ int ipAddressTable_container_load(netsnmp_container
+ *container);
+ void ipAddressTable_container_free(netsnmp_container
+ *container);
+
+ int ipAddressTable_cache_load(netsnmp_container
+ *container);
+ void ipAddressTable_cache_free(netsnmp_container
+ *container);
+
+ int ipAddressTable_row_prep(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipAddressTable_validate_index(ipAddressTable_registration *
+ ipAddressTable_reg,
+ ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipAddressAddrType_check_index(ipAddressTable_rowreq_ctx * rowreq_ctx); /* internal */
+ int ipAddressAddr_check_index(ipAddressTable_rowreq_ctx * rowreq_ctx); /* internal */
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPADDRESSTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.c
new file mode 100644
index 0000000000..c2f13f3f79
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.c
@@ -0,0 +1,2062 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ipAddressTable_interface.c 15781 2007-01-23 22:55:06Z rstory $
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipAddressTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "ipAddressTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipAddressTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipAddressTable is subid 34 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.34, length: 8
+ */
+typedef struct ipAddressTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ ipAddressTable_registration *user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} ipAddressTable_interface_ctx;
+
+static ipAddressTable_interface_ctx ipAddressTable_if_ctx;
+
+static void _ipAddressTable_container_init(ipAddressTable_interface_ctx
+ * if_ctx);
+static void
+ _ipAddressTable_container_shutdown(ipAddressTable_interface_ctx * if_ctx);
+
+
+netsnmp_container *
+ipAddressTable_container_get(void)
+{
+ return ipAddressTable_if_ctx.container;
+}
+
+ipAddressTable_registration *
+ipAddressTable_registration_get(void)
+{
+ return ipAddressTable_if_ctx.user_ctx;
+}
+
+ipAddressTable_registration *
+ipAddressTable_registration_set(ipAddressTable_registration * newreg)
+{
+ ipAddressTable_registration *old = ipAddressTable_if_ctx.user_ctx;
+ ipAddressTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+ipAddressTable_container_size(void)
+{
+ return CONTAINER_SIZE(ipAddressTable_if_ctx.container);
+}
+
+u_int
+ipAddressTable_dirty_get(void)
+{
+ return ipAddressTable_if_ctx.table_dirty;
+}
+
+void
+ipAddressTable_dirty_set(u_int status)
+{
+ DEBUGMSGTL(("ipAddressTable:ipAddressTable_dirty_set",
+ "called. was %d, now %d\n",
+ ipAddressTable_if_ctx.table_dirty, status));
+ ipAddressTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_ipAddressTable_pre_request;
+static Netsnmp_Node_Handler _mfd_ipAddressTable_post_request;
+static Netsnmp_Node_Handler _mfd_ipAddressTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_ipAddressTable_get_values;
+static Netsnmp_Node_Handler _mfd_ipAddressTable_check_objects;
+static Netsnmp_Node_Handler _mfd_ipAddressTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_ipAddressTable_set_values;
+static Netsnmp_Node_Handler _mfd_ipAddressTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_ipAddressTable_undo_values;
+static Netsnmp_Node_Handler _mfd_ipAddressTable_commit;
+static Netsnmp_Node_Handler _mfd_ipAddressTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_ipAddressTable_irreversible_commit;
+static Netsnmp_Node_Handler _mfd_ipAddressTable_check_dependencies;
+
+NETSNMP_STATIC_INLINE int
+ _ipAddressTable_undo_column(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var,
+ int column);
+
+NETSNMP_STATIC_INLINE int
+ _ipAddressTable_check_indexes(ipAddressTable_rowreq_ctx * rowreq_ctx);
+
+/**
+ * @internal
+ * Initialize the table ipAddressTable
+ * (Define its contents and how it's structured)
+ */
+void
+_ipAddressTable_initialize_interface(ipAddressTable_registration * reg_ptr,
+ u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &ipAddressTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info =
+ &ipAddressTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_ipAddressTable_initialize_interface", "called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for ipAddressTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
+ /** index: ipAddressAddrType */
+ ASN_OCTET_STR,
+ /** index: ipAddressAddr */
+ 0);
+
+ /*
+ * Define the minimum and maximum accessible columns. This
+ * optimizes retrival.
+ */
+ tbl_info->min_column = IPADDRESSTABLE_MIN_COL;
+ tbl_info->max_column = IPADDRESSTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ ipAddressTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ ipAddressTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _ipAddressTable_container_init(&ipAddressTable_if_ctx);
+ if (NULL == ipAddressTable_if_ctx.container) {
+ snmp_log(LOG_ERR,
+ "could not initialize container for ipAddressTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_ipAddressTable_object_lookup;
+ access_multiplexer->get_values = _mfd_ipAddressTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_ipAddressTable_pre_request;
+ access_multiplexer->post_request = _mfd_ipAddressTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks =
+ _mfd_ipAddressTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_ipAddressTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_ipAddressTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_ipAddressTable_set_values;
+ access_multiplexer->undo_sets = _mfd_ipAddressTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_ipAddressTable_commit;
+ access_multiplexer->undo_commit = _mfd_ipAddressTable_undo_commit;
+ access_multiplexer->irreversible_commit =
+ _mfd_ipAddressTable_irreversible_commit;
+
+ /*
+ * REQUIRED for tables with dependencies
+ */
+ access_multiplexer->consistency_checks =
+ _mfd_ipAddressTable_check_dependencies;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("ipAddressTable:init_ipAddressTable",
+ "Registering ipAddressTable as a mibs-for-dummies table.\n"));
+ handler =
+ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo =
+ netsnmp_handler_registration_create("ipAddressTable", handler,
+ ipAddressTable_oid,
+ ipAddressTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE);
+ if (NULL == reginfo) {
+ snmp_log(LOG_ERR, "error registering table ipAddressTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &ipAddressTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if (access_multiplexer->object_lookup)
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if (access_multiplexer->set_values)
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if (access_multiplexer->irreversible_commit)
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if (access_multiplexer->object_syntax_checks)
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if (access_multiplexer->pre_request)
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if (access_multiplexer->post_request)
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if (access_multiplexer->undo_setup)
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if (access_multiplexer->undo_cleanup)
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if (access_multiplexer->undo_sets)
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if (access_multiplexer->row_creation)
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if (access_multiplexer->consistency_checks)
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if (access_multiplexer->commit)
+ mfd_modes |= BABY_STEP_COMMIT;
+ if (access_multiplexer->undo_commit)
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ ipAddressTable_if_ctx.
+ container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if (NULL != ipAddressTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(ipAddressTable_if_ctx.cache);
+ netsnmp_inject_handler(reginfo, handler);
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _ipAddressTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table ipAddressTable
+ */
+void
+_ipAddressTable_shutdown_interface(ipAddressTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _ipAddressTable_container_shutdown(&ipAddressTable_if_ctx);
+}
+
+void
+ipAddressTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ ipAddressTable_if_ctx.tbl_info.valid_columns = vc;
+} /* ipAddressTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+ipAddressTable_index_to_oid(netsnmp_index * oid_idx,
+ ipAddressTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * ipAddressAddrType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ netsnmp_variable_list var_ipAddressAddrType;
+ /*
+ * ipAddressAddr(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ netsnmp_variable_list var_ipAddressAddr;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_ipAddressAddrType, 0x00, sizeof(var_ipAddressAddrType));
+ var_ipAddressAddrType.type = ASN_INTEGER;
+ memset(&var_ipAddressAddr, 0x00, sizeof(var_ipAddressAddr));
+ var_ipAddressAddr.type = ASN_OCTET_STR;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_ipAddressAddrType.next_variable = &var_ipAddressAddr;
+ var_ipAddressAddr.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_index_to_oid",
+ "called\n"));
+
+ /*
+ * ipAddressAddrType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ snmp_set_var_value(&var_ipAddressAddrType,
+ (u_char *) & mib_idx->ipAddressAddrType,
+ sizeof(mib_idx->ipAddressAddrType));
+
+ /*
+ * ipAddressAddr(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ snmp_set_var_value(&var_ipAddressAddr,
+ (u_char *) & mib_idx->ipAddressAddr,
+ mib_idx->ipAddressAddr_len *
+ sizeof(mib_idx->ipAddressAddr[0]));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_ipAddressAddrType);
+ if (err)
+ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_ipAddressAddrType);
+
+ return err;
+} /* ipAddressTable_index_to_oid */
+
+/**
+ * extract ipAddressTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+ipAddressTable_index_from_oid(netsnmp_index * oid_idx,
+ ipAddressTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * ipAddressAddrType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ netsnmp_variable_list var_ipAddressAddrType;
+ /*
+ * ipAddressAddr(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ netsnmp_variable_list var_ipAddressAddr;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_ipAddressAddrType, 0x00, sizeof(var_ipAddressAddrType));
+ var_ipAddressAddrType.type = ASN_INTEGER;
+ memset(&var_ipAddressAddr, 0x00, sizeof(var_ipAddressAddr));
+ var_ipAddressAddr.type = ASN_OCTET_STR;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_ipAddressAddrType.next_variable = &var_ipAddressAddr;
+ var_ipAddressAddr.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_index_from_oid",
+ "called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
+ &var_ipAddressAddrType);
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->ipAddressAddrType =
+ *((u_long *) var_ipAddressAddrType.val.string);
+ /*
+ * NOTE: val_len is in bytes, ipAddressAddr_len might not be
+ */
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_index_from_oid",
+ "var_ipAddressAddr.val_len = %d\n", var_ipAddressAddr.val_len));
+ if (var_ipAddressAddr.val_len > sizeof(mib_idx->ipAddressAddr))
+ err = SNMP_ERR_GENERR;
+ else {
+ memcpy(mib_idx->ipAddressAddr, var_ipAddressAddr.val.string,
+ var_ipAddressAddr.val_len);
+ mib_idx->ipAddressAddr_len =
+ var_ipAddressAddr.val_len /
+ sizeof(mib_idx->ipAddressAddr[0]);
+ DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_index_from_oid",
+ "mib_idx->ipAddressAddr_len = %d\n", mib_idx->ipAddressAddr_len));
+
+ }
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_ipAddressAddrType);
+
+ return err;
+} /* ipAddressTable_index_from_oid */
+
+
+/*
+ *********************************************************************
+ * @internal
+ * allocate resources for a ipAddressTable_rowreq_ctx
+ */
+ipAddressTable_rowreq_ctx *
+ipAddressTable_allocate_rowreq_ctx(ipAddressTable_data * data,
+ void *user_init_ctx)
+{
+ ipAddressTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(ipAddressTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:ipAddressTable:ipAddressTable_allocate_rowreq_ctx", "called\n"));
+
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+ "ipAddressTable_rowreq_ctx.\n");
+ return NULL;
+ } else {
+ if (NULL != data) {
+ /*
+ * track if we got data from user
+ */
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DATA_FROM_USER;
+ rowreq_ctx->data = data;
+ } else if (NULL ==
+ (rowreq_ctx->data = ipAddressTable_allocate_data())) {
+ SNMP_FREE(rowreq_ctx);
+ return NULL;
+ }
+ }
+
+ /*
+ * undo context will be allocated when needed (in *_undo_setup)
+ */
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->ipAddressTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if (SNMPERR_SUCCESS !=
+ ipAddressTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ ipAddressTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* ipAddressTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a ipAddressTable_rowreq_ctx
+ */
+void
+ipAddressTable_release_rowreq_ctx(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:ipAddressTable:ipAddressTable_release_rowreq_ctx", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ ipAddressTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ /*
+ * for non-transient data, don't free data we got from the user
+ */
+ if ((rowreq_ctx->data) &&
+ !(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER))
+ ipAddressTable_release_data(rowreq_ctx->data);
+
+ if (rowreq_ctx->undo)
+ ipAddressTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* ipAddressTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipAddressTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ipAddressTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = ipAddressTable_pre_request(ipAddressTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipAddressTable", "error %d from "
+ "ipAddressTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipAddressTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipAddressTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ ipAddressTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ipAddressTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && ipAddressTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING,
+ "ipAddressTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = ipAddressTable_post_request(ipAddressTable_if_ctx.user_ctx,
+ packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipAddressTable", "error %d from "
+ "ipAddressTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static ipAddressTable_rowreq_ctx *
+_mfd_ipAddressTable_rowreq_from_index(netsnmp_index * oid_idx, int *rc_ptr)
+{
+ ipAddressTable_rowreq_ctx *rowreq_ctx;
+ ipAddressTable_mib_index mib_idx;
+ int rc;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_rowreq_from_index", "called\n"));
+
+ if (NULL == rc_ptr)
+ rc_ptr = &rc;
+ *rc_ptr = MFD_SUCCESS;
+
+ memset(&mib_idx, 0x0, sizeof(mib_idx));
+
+ /*
+ * try to parse oid
+ */
+ *rc_ptr = ipAddressTable_index_from_oid(oid_idx, &mib_idx);
+ if (MFD_SUCCESS != *rc_ptr) {
+ DEBUGMSGT(("ipAddressTable", "error parsing index\n"));
+ return NULL;
+ }
+
+ /*
+ * allocate new context
+ */
+ rowreq_ctx = ipAddressTable_allocate_rowreq_ctx(NULL, NULL);
+ if (NULL == rowreq_ctx) {
+ *rc_ptr = MFD_ERROR;
+ return NULL; /* msg already logged */
+ }
+
+ memcpy(&rowreq_ctx->tbl_idx, &mib_idx, sizeof(mib_idx));
+
+ /*
+ * check indexes
+ */
+ *rc_ptr = _ipAddressTable_check_indexes(rowreq_ctx);
+ if (MFD_SUCCESS != *rc_ptr) {
+ netsnmp_assert((*rc_ptr == SNMP_ERR_NOCREATION) ||
+ (*rc_ptr == SNMP_ERR_INCONSISTENTNAME));
+ ipAddressTable_release_rowreq_ctx(rowreq_ctx);
+ return NULL;
+ }
+
+ /*
+ * copy indexes
+ */
+ rowreq_ctx->oid_idx.len = oid_idx->len;
+ memcpy(rowreq_ctx->oid_idx.oids, oid_idx->oids,
+ oid_idx->len * sizeof(oid));
+
+ return rowreq_ctx;
+} /* _mfd_ipAddressTable_rowreq_from_index */
+
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipAddressTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ ipAddressTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_object_lookup", "called\n"));
+
+ /*
+ * get our context from mfd
+ * ipAddressTable_interface_ctx *if_ctx =
+ * (ipAddressTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if (NULL == rowreq_ctx) {
+#define NETSNMP_IPADDRESSTABLE_CREATE_SUPPORT 1
+#ifndef NETSNMP_IPADDRESSTABLE_CREATE_SUPPORT
+ rc = SNMP_ERR_NOCREATION;
+#else
+ netsnmp_table_request_info *tblreq_info;
+ netsnmp_index oid_idx;
+
+ tblreq_info = netsnmp_extract_table_info(requests);
+ if (NULL == tblreq_info) {
+ snmp_log(LOG_ERR, "request had no table info\n");
+ return MFD_ERROR;
+ }
+
+ /*
+ * try create rowreq
+ */
+ oid_idx.oids = tblreq_info->index_oid;
+ oid_idx.len = tblreq_info->index_oid_len;
+
+ rowreq_ctx = _mfd_ipAddressTable_rowreq_from_index(&oid_idx, &rc);
+ if (MFD_SUCCESS == rc) {
+ netsnmp_assert(NULL != rowreq_ctx);
+ rowreq_ctx->rowreq_flags |= MFD_ROW_CREATED;
+ /*
+ * add rowreq_ctx to request data lists
+ */
+ netsnmp_container_table_row_insert(requests, (netsnmp_index *)
+ rowreq_ctx);
+ }
+#endif
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ ipAddressTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_ipAddressTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipAddressTable_get_column(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipAddressIfIndex(3)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/W/e/R/d/H
+ */
+ case COLUMN_IPADDRESSIFINDEX:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = ipAddressIfIndex_get(rowreq_ctx, (long *) var->val.string);
+ break;
+
+ /*
+ * ipAddressType(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSTYPE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipAddressType_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipAddressPrefix(5)/RowPointer/ASN_OBJECT_ID/oid(oid)//L/A/w/e/r/D/h
+ */
+ case COLUMN_IPADDRESSPREFIX:
+ var->type = ASN_OBJECT_ID;
+ rc = ipAddressPrefix_get(rowreq_ctx, (oid **) & var->val.string,
+ &var->val_len);
+ break;
+
+ /*
+ * ipAddressOrigin(6)/IpAddressOriginTC/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_IPADDRESSORIGIN:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipAddressOrigin_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipAddressStatus(7)/IpAddressStatusTC/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSSTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipAddressStatus_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipAddressCreated(8)/TimeStamp/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPADDRESSCREATED:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_TIMETICKS;
+ rc = ipAddressCreated_get(rowreq_ctx, (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipAddressLastChanged(9)/TimeStamp/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPADDRESSLASTCHANGED:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_TIMETICKS;
+ rc = ipAddressLastChanged_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipAddressRowStatus(10)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPADDRESSROWSTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipAddressRowStatus_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipAddressStorageType(11)/StorageType/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSSTORAGETYPE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipAddressStorageType_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipAddressTable_get_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ipAddressTable_get_column */
+
+int
+_mfd_ipAddressTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipAddressTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ u_char *old_string;
+ void (*dataFreeHook) (void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_get_values",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if (NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ } else if (requests->requestvb->buf ==
+ requests->requestvb->val.string) {
+ if (requests->requestvb->val_len !=
+ sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipAddressTable_get_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ if (MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ } else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if (rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if (old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if (dataFreeHook)
+ (*dataFreeHook) (old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressTable_get_values */
+
+NETSNMP_STATIC_INLINE int
+_ipAddressTable_check_indexes(ipAddressTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_ipAddressTable_check_indexes",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+
+ /*
+ * (INDEX) ipAddressAddrType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (rowreq_ctx->tbl_idx.ipAddressAddrType !=
+ INETADDRESSTYPE_UNKNOWN)
+ && (rowreq_ctx->tbl_idx.ipAddressAddrType != INETADDRESSTYPE_IPV4)
+ && (rowreq_ctx->tbl_idx.ipAddressAddrType != INETADDRESSTYPE_IPV6)
+ && (rowreq_ctx->tbl_idx.ipAddressAddrType != INETADDRESSTYPE_IPV4Z)
+ && (rowreq_ctx->tbl_idx.ipAddressAddrType != INETADDRESSTYPE_IPV6Z)
+ && (rowreq_ctx->tbl_idx.ipAddressAddrType != INETADDRESSTYPE_DNS)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = ipAddressAddrType_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * (INDEX) ipAddressAddr(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ /*
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((rowreq_ctx->tbl_idx.ipAddressAddr_len < 0)
+ || (rowreq_ctx->tbl_idx.ipAddressAddr_len > 255))
+ ) {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = ipAddressAddr_check_index(rowreq_ctx);
+ if (MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * if individual parts look ok, check them as a whole
+ */
+ return ipAddressTable_validate_index(ipAddressTable_if_ctx.user_ctx,
+ rowreq_ctx);
+} /* _ipAddressTable_check_indexes */
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipAddressTable_check_column(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_ipAddressTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+ /*
+ * (INDEX) ipAddressAddrType(1)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ case COLUMN_IPADDRESSADDRTYPE:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /*
+ * (INDEX) ipAddressAddr(2)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
+ */
+ case COLUMN_IPADDRESSADDR:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /*
+ * ipAddressIfIndex(3)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/W/e/R/d/H
+ */
+ case COLUMN_IPADDRESSIFINDEX:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ /*
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((*var->val.integer < 1)
+ || (*var->val.integer > 2147483647))
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipAddressTable:_ipAddressTable_check_column:ipAddressIfIndex", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipAddressIfIndex_check_value(rowreq_ctx,
+ *((long *) var->val.string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipAddressIfIndex_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipAddressType(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSTYPE:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (*var->val.integer != IPADDRESSTYPE_UNICAST)
+ && (*var->val.integer != IPADDRESSTYPE_ANYCAST)
+ && (*var->val.integer != IPADDRESSTYPE_BROADCAST)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipAddressTable:_ipAddressTable_check_column:ipAddressType", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipAddressType_check_value(rowreq_ctx,
+ *((u_long *) var->val.string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipAddressType_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipAddressPrefix(5)/RowPointer/ASN_OBJECT_ID/oid(oid)//L/A/w/e/r/D/h
+ */
+ case COLUMN_IPADDRESSPREFIX:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ipAddressOrigin(6)/IpAddressOriginTC/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ case COLUMN_IPADDRESSORIGIN:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ipAddressStatus(7)/IpAddressStatusTC/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSSTATUS:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (*var->val.integer != IPADDRESSSTATUSTC_PREFERRED)
+ && (*var->val.integer != IPADDRESSSTATUSTC_INVALID)
+ && (*var->val.integer != IPADDRESSSTATUSTC_INACCESSIBLE)
+ && (*var->val.integer != IPADDRESSSTATUSTC_UNKNOWN)
+ && (*var->val.integer != IPADDRESSSTATUSTC_TENTATIVE)
+ && (*var->val.integer != IPADDRESSSTATUSTC_DUPLICATE)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipAddressTable:_ipAddressTable_check_column:ipAddressStatus", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipAddressStatus_check_value(rowreq_ctx,
+ *((u_long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipAddressStatus_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipAddressCreated(8)/TimeStamp/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPADDRESSCREATED:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ipAddressLastChanged(9)/TimeStamp/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPADDRESSLASTCHANGED:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ipAddressRowStatus(10)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPADDRESSROWSTATUS:
+ rc = netsnmp_check_vb_rowstatus_value(var);
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipAddressTable:_ipAddressTable_check_column:ipAddressRowStatus", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipAddressRowStatus_check_value(rowreq_ctx,
+ *((u_long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipAddressRowStatus_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipAddressStorageType(11)/StorageType/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSSTORAGETYPE:
+ rc = netsnmp_check_vb_type(var, ASN_INTEGER);
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (*var->val.integer != STORAGETYPE_OTHER)
+ && (*var->val.integer != STORAGETYPE_VOLATILE)
+ && (*var->val.integer != STORAGETYPE_NONVOLATILE)
+ && (*var->val.integer != STORAGETYPE_PERMANENT)
+ && (*var->val.integer != STORAGETYPE_READONLY)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipAddressTable:_ipAddressTable_check_column:ipAddressStorageType", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipAddressStorageType_check_value(rowreq_ctx,
+ *((u_long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipAddressStorageType_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipAddressTable_check_column\n",
+ column);
+ }
+
+ return rc;
+} /* _ipAddressTable_check_column */
+
+int
+_mfd_ipAddressTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipAddressTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_check_objects", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipAddressTable_check_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: check dependencies
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check dependencies wrapper
+ */
+static int
+_mfd_ipAddressTable_check_dependencies(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipAddressTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_check_dependencies", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ipAddressTable_check_dependencies(rowreq_ctx);
+ if (rc) {
+ DEBUGMSGTL(("ipAddressTable:mfd", "error %d from "
+ "ipAddressTable_check_dependencies\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressTable_check_dependencies */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipAddressTable_undo_setup_column(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_ipAddressTable_undo_setup_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipAddressIfIndex(3)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/W/e/R/d/H
+ */
+ case COLUMN_IPADDRESSIFINDEX:
+ rowreq_ctx->column_set_flags |= COLUMN_IPADDRESSIFINDEX_FLAG;
+ rc = ipAddressIfIndex_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipAddressType(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSTYPE:
+ rowreq_ctx->column_set_flags |= COLUMN_IPADDRESSTYPE_FLAG;
+ rc = ipAddressType_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipAddressStatus(7)/IpAddressStatusTC/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_IPADDRESSSTATUS_FLAG;
+ rc = ipAddressStatus_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipAddressRowStatus(10)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPADDRESSROWSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_IPADDRESSROWSTATUS_FLAG;
+ rc = ipAddressRowStatus_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipAddressStorageType(11)/StorageType/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSSTORAGETYPE:
+ rowreq_ctx->column_set_flags |= COLUMN_IPADDRESSSTORAGETYPE_FLAG;
+ rc = ipAddressStorageType_undo_setup(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipAddressTable_undo_setup_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ipAddressTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_ipAddressTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipAddressTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_undo_setup",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = ipAddressTable_allocate_data();
+ if (NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = ipAddressTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipAddressTable:mfd", "error %d from "
+ "ipAddressTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ } else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info *tri;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipAddressTable_undo_setup_column(rowreq_ctx,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipAddressTable:mfd", "error %d from "
+ "ipAddressTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_ipAddressTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipAddressTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_undo_cleanup",
+ "called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = ipAddressTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipAddressTable:mfd", "error %d from "
+ "ipAddressTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if (rowreq_ctx->undo) {
+ ipAddressTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipAddressTable_set_column(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_ipAddressTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipAddressIfIndex(3)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/W/e/R/d/H
+ */
+ case COLUMN_IPADDRESSIFINDEX:
+ rowreq_ctx->column_set_flags |= COLUMN_IPADDRESSIFINDEX_FLAG;
+ rc = ipAddressIfIndex_set(rowreq_ctx, *((long *) var->val.string));
+ break;
+
+ /*
+ * ipAddressType(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSTYPE:
+ rowreq_ctx->column_set_flags |= COLUMN_IPADDRESSTYPE_FLAG;
+ rc = ipAddressType_set(rowreq_ctx, *((u_long *) var->val.string));
+ break;
+
+ /*
+ * ipAddressStatus(7)/IpAddressStatusTC/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_IPADDRESSSTATUS_FLAG;
+ rc = ipAddressStatus_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ /*
+ * ipAddressRowStatus(10)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPADDRESSROWSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_IPADDRESSROWSTATUS_FLAG;
+ rc = ipAddressRowStatus_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ /*
+ * ipAddressStorageType(11)/StorageType/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSSTORAGETYPE:
+ rowreq_ctx->column_set_flags |= COLUMN_IPADDRESSSTORAGETYPE_FLAG;
+ rc = ipAddressStorageType_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipAddressTable_set_column\n",
+ column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _ipAddressTable_set_column */
+
+int
+_mfd_ipAddressTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipAddressTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_set_values",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipAddressTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipAddressTable:mfd", "error %d from "
+ "ipAddressTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_ipAddressTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipAddressTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_commit",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ipAddressTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipAddressTable:mfd", "error %d from "
+ "ipAddressTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ ipAddressTable_dirty_set(ipAddressTable_dirty_get() + 1); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_ipAddressTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipAddressTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_undo_commit",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = ipAddressTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if (d)
+ ipAddressTable_dirty_set(d - 1);
+ }
+
+ rc = ipAddressTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipAddressTable:mfd", "error %d from "
+ "ipAddressTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING,
+ "ipAddressTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipAddressTable_undo_column(ipAddressTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_ipAddressTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipAddressIfIndex(3)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/W/e/R/d/H
+ */
+ case COLUMN_IPADDRESSIFINDEX:
+ rc = ipAddressIfIndex_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipAddressType(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSTYPE:
+ rc = ipAddressType_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipAddressStatus(7)/IpAddressStatusTC/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSSTATUS:
+ rc = ipAddressStatus_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipAddressRowStatus(10)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPADDRESSROWSTATUS:
+ rc = ipAddressRowStatus_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipAddressStorageType(11)/StorageType/ASN_INTEGER/long(u_long)//l/A/W/E/r/D/h
+ */
+ case COLUMN_IPADDRESSSTORAGETYPE:
+ rc = ipAddressStorageType_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipAddressTable_undo_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ipAddressTable_undo_column */
+
+int
+_mfd_ipAddressTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipAddressTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_undo_values",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ipAddressTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipAddressTable:mfd", "error %d from "
+ "ipAddressTable_undo\n", rc));
+ }
+
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipAddressTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipAddressTable:mfd", "error %d from "
+ "ipAddressTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_ipAddressTable_irreversible_commit(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipAddressTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipAddressTable:_mfd_ipAddressTable_irreversible:commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(ipAddressTable_if_ctx.container, rowreq_ctx);
+ } else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_CREATED;
+ CONTAINER_INSERT(ipAddressTable_if_ctx.container, rowreq_ctx);
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipAddressTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache * cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:ipAddressTable:_cache_load", "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for ipAddressTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return ipAddressTable_container_load((netsnmp_container *) cache->
+ magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache * cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:ipAddressTable:_cache_free", "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in ipAddressTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container *) cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(ipAddressTable_rowreq_ctx * rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:ipAddressTable:_container_item_free",
+ "called\n"));
+
+ if (NULL == rowreq_ctx)
+ return;
+
+ ipAddressTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:ipAddressTable:_container_free", "called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR,
+ "invalid container in ipAddressTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ ipAddressTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *) _container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_ipAddressTable_container_init(ipAddressTable_interface_ctx * if_ctx)
+{
+ DEBUGMSGTL(("internal:ipAddressTable:_ipAddressTable_container_init",
+ "called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ ipAddressTable_oid,
+ ipAddressTable_oid_size);
+
+ if (NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for ipAddressTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ ipAddressTable_container_init(&if_ctx->container, if_ctx->cache);
+ if (NULL == if_ctx->container)
+ if_ctx->container =
+ netsnmp_container_find("ipAddressTable:table_container");
+ if (NULL == if_ctx->container) {
+ snmp_log(LOG_ERR, "error creating container in "
+ "ipAddressTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void *) if_ctx->container;
+} /* _ipAddressTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_ipAddressTable_container_shutdown(ipAddressTable_interface_ctx * if_ctx)
+{
+ DEBUGMSGTL(("internal:ipAddressTable:_ipAddressTable_container_shutdown", "called\n"));
+
+ ipAddressTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _ipAddressTable_container_shutdown */
+
+
+ipAddressTable_rowreq_ctx *
+ipAddressTable_row_find_by_mib_index(ipAddressTable_mib_index * mib_idx)
+{
+ ipAddressTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = ipAddressTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(ipAddressTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.h
new file mode 100644
index 0000000000..74adfe0256
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_interface.h
@@ -0,0 +1,100 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ipAddressTable_interface.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/** @ingroup interface Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef IPADDRESSTABLE_INTERFACE_H
+#define IPADDRESSTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "ipAddressTable.h"
+
+
+ /*
+ ********************************************************************
+ * Table declarations
+ */
+
+ /*
+ * PUBLIC interface initialization routine
+ */
+ void
+ _ipAddressTable_initialize_interface(ipAddressTable_registration *
+ user_ctx, u_long flags);
+ void
+ _ipAddressTable_shutdown_interface(ipAddressTable_registration *
+ user_ctx);
+
+ ipAddressTable_registration *ipAddressTable_registration_get(void);
+
+ ipAddressTable_registration
+ * ipAddressTable_registration_set(ipAddressTable_registration *
+ newreg);
+
+ netsnmp_container *ipAddressTable_container_get(void);
+ int ipAddressTable_container_size(void);
+
+ u_int ipAddressTable_dirty_get(void);
+ void ipAddressTable_dirty_set(u_int status);
+
+ ipAddressTable_rowreq_ctx
+ * ipAddressTable_allocate_rowreq_ctx(ipAddressTable_data *,
+ void *);
+ void
+ ipAddressTable_release_rowreq_ctx(ipAddressTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ipAddressTable_index_to_oid(netsnmp_index * oid_idx,
+ ipAddressTable_mib_index *
+ mib_idx);
+ int ipAddressTable_index_from_oid(netsnmp_index * oid_idx,
+ ipAddressTable_mib_index
+ * mib_idx);
+
+ /*
+ * access to certain internals. use with caution!
+ */
+ void ipAddressTable_valid_columns_set(netsnmp_column_info
+ *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPADDRESSTABLE_INTERFACE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable.h
new file mode 100644
index 0000000000..047db745e4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable.h
@@ -0,0 +1,8 @@
+/*
+ * module to include the modules
+ */
+
+config_require(ip-mib/data_access/systemstats)
+config_require(ip-mib/ipSystemStatsTable/ipSystemStatsTable)
+config_require(ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface)
+config_require(ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c
new file mode 100644
index 0000000000..4b1acb1f6f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c
@@ -0,0 +1,3182 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ipSystemStatsTable.c 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/** \page MFD helper for ipSystemStatsTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipSystemStatsTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "ipSystemStatsTable_interface.h"
+
+oid ipSystemStatsTable_oid[] = { IPSYSTEMSTATSTABLE_OID };
+int ipSystemStatsTable_oid_size =
+OID_LENGTH(ipSystemStatsTable_oid);
+
+ipSystemStatsTable_registration ipSystemStatsTable_user_context;
+
+void initialize_table_ipSystemStatsTable(void);
+void shutdown_table_ipSystemStatsTable(void);
+
+
+/**
+ * Initializes the ipSystemStatsTable module
+ */
+void
+init_ipSystemStatsTable(void)
+{
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:init_ipSystemStatsTable",
+ "called\n"));
+
+ /*
+ * TODO:300:o: Perform ipSystemStatsTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("ipSystemStatsTable"))
+ initialize_table_ipSystemStatsTable();
+
+} /* init_ipSystemStatsTable */
+
+/**
+ * Shut-down the ipSystemStatsTable module (agent is exiting)
+ */
+void
+shutdown_ipSystemStatsTable(void)
+{
+ if (should_init("ipSystemStatsTable"))
+ shutdown_table_ipSystemStatsTable();
+
+}
+
+/**
+ * Initialize the table ipSystemStatsTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_ipSystemStatsTable(void)
+{
+ ipSystemStatsTable_registration *user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:initialize_table_ipSystemStatsTable", "called\n"));
+
+ /*
+ * TODO:301:o: Perform ipSystemStatsTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize ipSystemStatsTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context =
+ netsnmp_create_data_list("ipSystemStatsTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _ipSystemStatsTable_initialize_interface(user_context, flags);
+} /* initialize_table_ipSystemStatsTable */
+
+/**
+ * Shutdown the table ipSystemStatsTable
+ */
+void
+shutdown_table_ipSystemStatsTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _ipSystemStatsTable_shutdown_interface
+ (&ipSystemStatsTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+ipSystemStatsTable_rowreq_ctx_init(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx, void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_rowreq_ctx_init", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra ipSystemStatsTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void
+ipSystemStatsTable_rowreq_ctx_cleanup(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_rowreq_ctx_cleanup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra ipSystemStatsTable rowreq cleanup.
+ */
+} /* ipSystemStatsTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ * @param user_context
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+ipSystemStatsTable_pre_request(ipSystemStatsTable_registration *
+ user_context)
+{
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_pre_request", "called\n"));
+
+ /*
+ * TODO:510:o: Perform ipSystemStatsTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+ipSystemStatsTable_post_request(ipSystemStatsTable_registration *
+ user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_post_request", "called\n"));
+
+ /*
+ * TODO:511:o: Perform ipSystemStatsTable post-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsTable_post_request */
+
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipSystemStatsTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipSystemStatsTable is subid 1 of ipTrafficStats.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.31.1, length: 9
+ */
+
+/*
+ * ---------------------------------------------------------------------
+ * * TODO:200:r: Implement ipSystemStatsTable data context functions.
+ */
+/*
+ * ipSystemStatsTable_allocate_data
+ *
+ * Purpose: create new ipSystemStatsTable_data.
+ */
+ipSystemStatsTable_data *
+ipSystemStatsTable_allocate_data(void)
+{
+ /*
+ * TODO:201:r: |-> allocate memory for the ipSystemStatsTable data context.
+ */
+ ipSystemStatsTable_data *rtn =
+ SNMP_MALLOC_TYPEDEF(ipSystemStatsTable_data);
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_allocate_data", "called\n"));
+
+ if (NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "ipSystemStatsTable_data.\n");
+ }
+
+ return rtn;
+} /* ipSystemStatsTable_allocate_data */
+
+/*
+ * ipSystemStatsTable_release_data
+ *
+ * Purpose: release ipSystemStatsTable data.
+ */
+void
+ipSystemStatsTable_release_data(ipSystemStatsTable_data * data)
+{
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_release_data", "called\n"));
+
+ /*
+ * TODO:202:r: |-> release memory for the ipSystemStatsTable data context.
+ */
+ free(data);
+} /* ipSystemStatsTable_release_data */
+
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param ipSystemStatsIPVersion_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+ipSystemStatsTable_indexes_set_tbl_idx(ipSystemStatsTable_mib_index *
+ tbl_idx,
+ u_long ipSystemStatsIPVersion_val)
+{
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_indexes_set_tbl_idx", "called\n"));
+
+ /*
+ * ipSystemStatsIPVersion(1)/InetVersion/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ /** WARNING: this code might not work for netsnmp_systemstats_entry */
+ tbl_idx->ipSystemStatsIPVersion = ipSystemStatsIPVersion_val;
+
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+ipSystemStatsTable_indexes_set(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long ipSystemStatsIPVersion_val)
+{
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_indexes_set", "called\n"));
+
+ if (MFD_SUCCESS !=
+ ipSystemStatsTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+ ipSystemStatsIPVersion_val))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if (0 != ipSystemStatsTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsInReceives
+ * ipSystemStatsInReceives is subid 3 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.3
+ * Description:
+The total number of input IP datagrams received, including
+ those received in error.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsInReceives data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsInReceives_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsInReceives_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsInReceives_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsInReceives_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsInReceives_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsInReceives data.
+ * copy (* ipSystemStatsInReceives_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsInReceives_val_ptr) =
+ rowreq_ctx->data->stats.HCInReceives.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsInReceives_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCInReceives
+ * ipSystemStatsHCInReceives is subid 4 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.4
+ * Description:
+The total number of input IP datagrams received, including
+ those received in error. This object counts the same
+ datagrams as ipSystemStatsInReceives but allows for larger
+
+
+
+
+ values.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCInReceives data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCInReceives_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCInReceives_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ U64 * ipSystemStatsHCInReceives_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCInReceives_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCInReceives data.
+ * get (* ipSystemStatsHCInReceives_val_ptr ).low and (* ipSystemStatsHCInReceives_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCInReceives_val_ptr).low =
+ rowreq_ctx->data->stats.HCInReceives.low;
+ (*ipSystemStatsHCInReceives_val_ptr).high =
+ rowreq_ctx->data->stats.HCInReceives.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCInReceives_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsInOctets
+ * ipSystemStatsInOctets is subid 5 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.5
+ * Description:
+The total number of octets received in input IP datagrams,
+ including those received in error. Octets from datagrams
+ counted in ipSystemStatsInReceives MUST be counted here.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsInOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsInOctets_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsInOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsInOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsInOctets_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsInOctets_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsInOctets data.
+ * copy (* ipSystemStatsInOctets_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsInOctets_val_ptr) =
+ rowreq_ctx->data->stats.HCInOctets.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsInOctets_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCInOctets
+ * ipSystemStatsHCInOctets is subid 6 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.6
+ * Description:
+The total number of octets received in input IP datagrams,
+ including those received in error. This object counts the
+ same octets as ipSystemStatsInOctets but allows for larger
+ values.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCInOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCInOctets_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCInOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ U64 * ipSystemStatsHCInOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCInOctets_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCInOctets data.
+ * get (* ipSystemStatsHCInOctets_val_ptr ).low and (* ipSystemStatsHCInOctets_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCInOctets_val_ptr).low =
+ rowreq_ctx->data->stats.HCInOctets.low;
+ (*ipSystemStatsHCInOctets_val_ptr).high =
+ rowreq_ctx->data->stats.HCInOctets.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCInOctets_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsInHdrErrors
+ * ipSystemStatsInHdrErrors is subid 7 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.7
+ * Description:
+The number of input IP datagrams discarded due to errors in
+ their IP headers, including version number mismatch, other
+ format errors, hop count exceeded, errors discovered in
+ processing their IP options, etc.
+
+
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsInHdrErrors data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsInHdrErrors_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsInHdrErrors_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsInHdrErrors_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsInHdrErrors_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsInHdrErrors_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsInHdrErrors data.
+ * copy (* ipSystemStatsInHdrErrors_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsInHdrErrors_val_ptr) =
+ rowreq_ctx->data->stats.InHdrErrors;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsInHdrErrors_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsInNoRoutes
+ * ipSystemStatsInNoRoutes is subid 8 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.8
+ * Description:
+The number of input IP datagrams discarded because no route
+ could be found to transmit them to their destination.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsInNoRoutes data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsInNoRoutes_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsInNoRoutes_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsInNoRoutes_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsInNoRoutes_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsInNoRoutes_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsInNoRoutes data.
+ * copy (* ipSystemStatsInNoRoutes_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsInNoRoutes_val_ptr) =
+ rowreq_ctx->data->stats.InNoRoutes;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsInNoRoutes_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsInAddrErrors
+ * ipSystemStatsInAddrErrors is subid 9 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.9
+ * Description:
+The number of input IP datagrams discarded because the IP
+ address in their IP header's destination field was not a
+ valid address to be received at this entity. This count
+ includes invalid addresses (e.g., ::0) and unsupported
+ addresses (e.g., addresses with unallocated prefixes). For
+ entities which are not IP routers and therefore do not
+ forward datagrams, this counter includes datagrams discarded
+ because the destination address was not a local address.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsInAddrErrors data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsInAddrErrors_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsInAddrErrors_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsInAddrErrors_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsInAddrErrors_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsInAddrErrors_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsInAddrErrors data.
+ * copy (* ipSystemStatsInAddrErrors_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsInAddrErrors_val_ptr) =
+ rowreq_ctx->data->stats.InAddrErrors;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsInAddrErrors_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsInUnknownProtos
+ * ipSystemStatsInUnknownProtos is subid 10 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.10
+ * Description:
+The number of locally-addressed IP datagrams received
+ successfully but discarded because of an unknown or
+ unsupported protocol.
+
+
+
+
+ When tracking interface statistics the counter of the
+ interface to which these datagrams were addressed is
+ incremented. This interface might not be the same as the
+ input interface for some of the datagrams.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsInUnknownProtos data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsInUnknownProtos_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsInUnknownProtos_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInUnknownProtos_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsInUnknownProtos_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsInUnknownProtos_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsInUnknownProtos data.
+ * copy (* ipSystemStatsInUnknownProtos_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsInUnknownProtos_val_ptr) =
+ rowreq_ctx->data->stats.InUnknownProtos;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsInUnknownProtos_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsInTruncatedPkts
+ * ipSystemStatsInTruncatedPkts is subid 11 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.11
+ * Description:
+The number of input IP datagrams discarded because the
+ datagram frame didn't carry enough data.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsInTruncatedPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsInTruncatedPkts_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsInTruncatedPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInTruncatedPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsInTruncatedPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsInTruncatedPkts_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsInTruncatedPkts data.
+ * copy (* ipSystemStatsInTruncatedPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsInTruncatedPkts_val_ptr) =
+ rowreq_ctx->data->stats.InTruncatedPkts;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsInTruncatedPkts_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsInForwDatagrams
+ * ipSystemStatsInForwDatagrams is subid 12 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.12
+ * Description:
+The number of input datagrams for which this entity was not
+ their final IP destination and for which this entity
+ attempted to find a route to forward them to that final
+ destination. In entities which do not act as IP routers,
+ this counter will include only those datagrams which were
+ Source-Routed via this entity, and the Source-Route
+ processing was successful.
+
+
+ When tracking interface statistics the counter of the
+ incoming interface is incremented for each datagram.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsInForwDatagrams data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsInForwDatagrams_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInForwDatagrams_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsInForwDatagrams_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsInForwDatagrams_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsInForwDatagrams data.
+ * copy (* ipSystemStatsInForwDatagrams_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsInForwDatagrams_val_ptr) =
+ rowreq_ctx->data->stats.HCInForwDatagrams.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsInForwDatagrams_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCInForwDatagrams
+ * ipSystemStatsHCInForwDatagrams is subid 13 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.13
+ * Description:
+The number of input datagrams for which this entity was not
+ their final IP destination and for which this entity
+ attempted to find a route to forward them to that final
+ destination. This object counts the same packets as
+ ipSystemStatsInForwDatagrams but allows for larger values.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCInForwDatagrams data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCInForwDatagrams_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCInForwDatagrams_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCInForwDatagrams_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCInForwDatagrams data.
+ * get (* ipSystemStatsHCInForwDatagrams_val_ptr ).low and (* ipSystemStatsHCInForwDatagrams_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCInForwDatagrams_val_ptr).low =
+ rowreq_ctx->data->stats.HCInForwDatagrams.low;
+ (*ipSystemStatsHCInForwDatagrams_val_ptr).high =
+ rowreq_ctx->data->stats.HCInForwDatagrams.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCInForwDatagrams_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsReasmReqds
+ * ipSystemStatsReasmReqds is subid 14 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.14
+ * Description:
+The number of IP fragments received which needed to be
+ reassembled at this interface.
+
+
+ When tracking interface statistics the counter of the
+ interface to which these fragments were addressed is
+ incremented. This interface might not be the same as the
+ input interface for some of the fragments.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsReasmReqds data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsReasmReqds_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsReasmReqds_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsReasmReqds_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsReasmReqds_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsReasmReqds_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsReasmReqds data.
+ * copy (* ipSystemStatsReasmReqds_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsReasmReqds_val_ptr) =
+ rowreq_ctx->data->stats.ReasmReqds;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsReasmReqds_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsReasmOKs
+ * ipSystemStatsReasmOKs is subid 15 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.15
+ * Description:
+The number of IP datagrams successfully reassembled.
+
+
+ When tracking interface statistics the counter of the
+ interface to which these datagrams were addressed is
+ incremented. This interface might not be the same as the
+ input interface for some of the datagrams.
+
+
+ Discontinuities in the value of this counter can occur at
+
+
+
+
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsReasmOKs data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsReasmOKs_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsReasmOKs_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsReasmOKs_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsReasmOKs_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsReasmOKs_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsReasmOKs data.
+ * copy (* ipSystemStatsReasmOKs_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsReasmOKs_val_ptr) = rowreq_ctx->data->stats.ReasmOKs;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsReasmOKs_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsReasmFails
+ * ipSystemStatsReasmFails is subid 16 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.16
+ * Description:
+The number of failures detected by the IP re-assembly
+ algorithm (for whatever reason: timed out, errors, etc.).
+ Note that this is not necessarily a count of discarded IP
+ fragments since some algorithms (notably the algorithm in
+ RFC 815) can lose track of the number of fragments by
+ combining them as they are received.
+
+
+ When tracking interface statistics the counter of the
+ interface to which these fragments were addressed is
+ incremented. This interface might not be the same as the
+ input interface for some of the fragments.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsReasmFails data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsReasmFails_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsReasmFails_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsReasmFails_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsReasmFails_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsReasmFails_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsReasmFails data.
+ * copy (* ipSystemStatsReasmFails_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsReasmFails_val_ptr) =
+ rowreq_ctx->data->stats.ReasmFails;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsReasmFails_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsInDiscards
+ * ipSystemStatsInDiscards is subid 17 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.17
+ * Description:
+The number of input IP datagrams for which no problems were
+ encountered to prevent their continued processing, but which
+ were discarded (e.g., for lack of buffer space). Note that
+ this counter does not include any datagrams discarded while
+ awaiting re-assembly.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsInDiscards data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsInDiscards_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsInDiscards_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsInDiscards_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsInDiscards_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsInDiscards_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsInDiscards data.
+ * copy (* ipSystemStatsInDiscards_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsInDiscards_val_ptr) =
+ rowreq_ctx->data->stats.InDiscards;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsInDiscards_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsInDelivers
+ * ipSystemStatsInDelivers is subid 18 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.18
+ * Description:
+The total number of datagrams successfully delivered to IP
+ user-protocols (including ICMP).
+
+
+ When tracking interface statistics the counter of the
+ interface to which these datagrams were addressed is
+ incremented. This interface might not be the same as the
+ input interface for some of the datagrams.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsInDelivers data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsInDelivers_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsInDelivers_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsInDelivers_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsInDelivers_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsInDelivers_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsInDelivers data.
+ * copy (* ipSystemStatsInDelivers_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsInDelivers_val_ptr) =
+ rowreq_ctx->data->stats.HCInDelivers.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsInDelivers_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCInDelivers
+ * ipSystemStatsHCInDelivers is subid 19 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.19
+ * Description:
+The total number of datagrams successfully delivered to IP
+ user-protocols (including ICMP). This object counts the
+ same packets as ipSystemStatsInDelivers but allows for
+ larger values.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCInDelivers data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCInDelivers_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCInDelivers_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ U64 * ipSystemStatsHCInDelivers_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCInDelivers_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCInDelivers data.
+ * get (* ipSystemStatsHCInDelivers_val_ptr ).low and (* ipSystemStatsHCInDelivers_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCInDelivers_val_ptr).low =
+ rowreq_ctx->data->stats.HCInDelivers.low;
+ (*ipSystemStatsHCInDelivers_val_ptr).high =
+ rowreq_ctx->data->stats.HCInDelivers.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCInDelivers_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsOutRequests
+ * ipSystemStatsOutRequests is subid 20 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.20
+ * Description:
+The total number of IP datagrams which local IP user-
+ protocols (including ICMP) supplied to IP in requests for
+ transmission. Note that this counter does not include any
+ datagrams counted in ipSystemStatsOutForwDatagrams.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsOutRequests data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsOutRequests_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsOutRequests_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsOutRequests_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsOutRequests_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsOutRequests_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsOutRequests data.
+ * copy (* ipSystemStatsOutRequests_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsOutRequests_val_ptr) =
+ rowreq_ctx->data->stats.HCOutRequests.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsOutRequests_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCOutRequests
+ * ipSystemStatsHCOutRequests is subid 21 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.21
+ * Description:
+The total number of IP datagrams which local IP user-
+ protocols (including ICMP) supplied to IP in requests for
+ transmission. This object counts the same packets as
+ ipSystemStatsHCOutRequests but allows for larger values.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCOutRequests data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCOutRequests_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCOutRequests_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ U64 * ipSystemStatsHCOutRequests_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCOutRequests_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCOutRequests data.
+ * get (* ipSystemStatsHCOutRequests_val_ptr ).low and (* ipSystemStatsHCOutRequests_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCOutRequests_val_ptr).low =
+ rowreq_ctx->data->stats.HCOutRequests.low;
+ (*ipSystemStatsHCOutRequests_val_ptr).high =
+ rowreq_ctx->data->stats.HCOutRequests.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCOutRequests_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsOutNoRoutes
+ * ipSystemStatsOutNoRoutes is subid 22 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.22
+ * Description:
+The number of locally generated IP datagrams discarded
+ because no route could be found to transmit them to their
+ destination.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsOutNoRoutes data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsOutNoRoutes_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsOutNoRoutes_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsOutNoRoutes_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsOutNoRoutes_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsOutNoRoutes_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsOutNoRoutes data.
+ * copy (* ipSystemStatsOutNoRoutes_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsOutNoRoutes_val_ptr) =
+ rowreq_ctx->data->stats.OutNoRoutes;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsOutNoRoutes_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsOutForwDatagrams
+ * ipSystemStatsOutForwDatagrams is subid 23 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.23
+ * Description:
+The number of datagrams for which this entity was not their
+ final IP destination and for which it was successful in
+ finding a path to their final destination. In entities
+ which do not act as IP routers, this counter will include
+ only those datagrams which were Source-Routed via this
+ entity, and the Source-Route processing was successful.
+
+
+ When tracking interface statistics the counter of the
+ outgoing interface is incremented for a successfully
+ forwarded datagram.
+
+
+ Discontinuities in the value of this counter can occur at
+
+
+
+
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsOutForwDatagrams data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsOutForwDatagrams_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutForwDatagrams_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsOutForwDatagrams_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsOutForwDatagrams_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsOutForwDatagrams data.
+ * copy (* ipSystemStatsOutForwDatagrams_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsOutForwDatagrams_val_ptr) =
+ rowreq_ctx->data->stats.HCOutForwDatagrams.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsOutForwDatagrams_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCOutForwDatagrams
+ * ipSystemStatsHCOutForwDatagrams is subid 24 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.24
+ * Description:
+The number of datagrams for which this entity was not their
+ final IP destination and for which it was successful in
+ finding a path to their final destination. This object
+ counts the same packets as ipSystemStatsOutForwDatagrams but
+ allows for larger values.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCOutForwDatagrams data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCOutForwDatagrams_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCOutForwDatagrams_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCOutForwDatagrams_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCOutForwDatagrams data.
+ * get (* ipSystemStatsHCOutForwDatagrams_val_ptr ).low and (* ipSystemStatsHCOutForwDatagrams_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCOutForwDatagrams_val_ptr).low =
+ rowreq_ctx->data->stats.HCOutForwDatagrams.low;
+ (*ipSystemStatsHCOutForwDatagrams_val_ptr).high =
+ rowreq_ctx->data->stats.HCOutForwDatagrams.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCOutForwDatagrams_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsOutDiscards
+ * ipSystemStatsOutDiscards is subid 25 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.25
+ * Description:
+The number of output IP datagrams for which no problem was
+ encountered to prevent their transmission to their
+ destination, but which were discarded (e.g., for lack of
+ buffer space). Note that this counter would include
+ datagrams counted in ipSystemStatsOutForwDatagrams if any
+ such datagrams met this (discretionary) discard criterion.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsOutDiscards data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsOutDiscards_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsOutDiscards_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsOutDiscards_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsOutDiscards_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsOutDiscards_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsOutDiscards data.
+ * copy (* ipSystemStatsOutDiscards_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsOutDiscards_val_ptr) =
+ rowreq_ctx->data->stats.OutDiscards;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsOutDiscards_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsOutFragReqds
+ * ipSystemStatsOutFragReqds is subid 26 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.26
+ * Description:
+The number of IP datagrams that would require fragmentation
+ in order to be transmitted.
+
+
+
+
+
+ When tracking interface statistics the counter of the
+ outgoing interface is incremented for a successfully
+ fragmented datagram.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsOutFragReqds data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsOutFragReqds_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsOutFragReqds_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsOutFragReqds_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsOutFragReqds_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsOutFragReqds_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsOutFragReqds data.
+ * copy (* ipSystemStatsOutFragReqds_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsOutFragReqds_val_ptr) =
+ rowreq_ctx->data->stats.OutFragReqds;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsOutFragReqds_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsOutFragOKs
+ * ipSystemStatsOutFragOKs is subid 27 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.27
+ * Description:
+The number of IP datagrams that have been successfully
+ fragmented.
+
+
+ When tracking interface statistics the counter of the
+ outgoing interface is incremented for a successfully
+ fragmented datagram.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsOutFragOKs data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsOutFragOKs_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsOutFragOKs_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsOutFragOKs_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsOutFragOKs_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsOutFragOKs_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsOutFragOKs data.
+ * copy (* ipSystemStatsOutFragOKs_val_ptr ) from rowreq_ctx->data
+ */
+ snmp_log(LOG_ERR,
+ "ipSystemStatsTable node ipSystemStatsOutFragOKs not implemented: skipping\n");
+ return MFD_SKIP;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsOutFragOKs_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsOutFragFails
+ * ipSystemStatsOutFragFails is subid 28 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.28
+ * Description:
+The number of IP datagrams that have been discarded because
+ they needed to be fragmented but could not be. This
+ includes IPv4 packets that have the DF bit set and IPv6
+ packets that are being forwarded and exceed the outgoing
+ link MTU.
+
+
+ When tracking interface statistics the counter of the
+ outgoing interface is incremented for an unsuccessfully
+ fragmented datagram.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsOutFragFails data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsOutFragFails_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsOutFragFails_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsOutFragFails_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsOutFragFails_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsOutFragFails_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsOutFragFails data.
+ * copy (* ipSystemStatsOutFragFails_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsOutFragFails_val_ptr) =
+ rowreq_ctx->data->stats.OutFragFails;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsOutFragFails_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsOutFragCreates
+ * ipSystemStatsOutFragCreates is subid 29 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.29
+ * Description:
+The number of output datagram fragments that have been
+ generated as a result of IP fragmentation.
+
+
+ When tracking interface statistics the counter of the
+ outgoing interface is incremented for a successfully
+ fragmented datagram.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsOutFragCreates data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsOutFragCreates_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsOutFragCreates_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long *
+ ipSystemStatsOutFragCreates_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsOutFragCreates_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsOutFragCreates_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsOutFragCreates data.
+ * copy (* ipSystemStatsOutFragCreates_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsOutFragCreates_val_ptr) =
+ rowreq_ctx->data->stats.OutFragCreates;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsOutFragCreates_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsOutTransmits
+ * ipSystemStatsOutTransmits is subid 30 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.30
+ * Description:
+The total number of IP datagrams that this entity supplied
+ to the lower layers for transmission. This includes
+ datagrams generated local and those forwarded by this
+ entity.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsOutTransmits data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsOutTransmits_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsOutTransmits_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsOutTransmits_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsOutTransmits_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsOutTransmits_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsOutTransmits data.
+ * copy (* ipSystemStatsOutTransmits_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsOutTransmits_val_ptr) =
+ rowreq_ctx->data->stats.HCOutTransmits.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsOutTransmits_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCOutTransmits
+ * ipSystemStatsHCOutTransmits is subid 31 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.31
+ * Description:
+The total number of IP datagrams that this entity supplied
+ to the lower layers for transmission. This object counts
+ the same datagrams as ipSystemStatsOutTransmits but allows
+ for larger values.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCOutTransmits data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCOutTransmits_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCOutTransmits_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ U64 * ipSystemStatsHCOutTransmits_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCOutTransmits_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCOutTransmits data.
+ * get (* ipSystemStatsHCOutTransmits_val_ptr ).low and (* ipSystemStatsHCOutTransmits_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCOutTransmits_val_ptr).low =
+ rowreq_ctx->data->stats.HCOutTransmits.low;
+ (*ipSystemStatsHCOutTransmits_val_ptr).high =
+ rowreq_ctx->data->stats.HCOutTransmits.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCOutTransmits_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsOutOctets
+ * ipSystemStatsOutOctets is subid 32 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.32
+ * Description:
+The total number of octets in IP datagrams delivered to the
+ lower layers for transmission. Octets from datagrams
+ counted in ipSystemStatsOutTransmits MUST be counted here.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsOutOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsOutOctets_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsOutOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsOutOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsOutOctets_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsOutOctets_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsOutOctets data.
+ * copy (* ipSystemStatsOutOctets_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsOutOctets_val_ptr) =
+ rowreq_ctx->data->stats.HCOutOctets.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsOutOctets_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCOutOctets
+ * ipSystemStatsHCOutOctets is subid 33 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.33
+ * Description:
+The total number of octets in IP datagrams delivered to the
+ lower layers for transmission. This objects counts the same
+ octets as ipSystemStatsOutOctets but allows for larger
+ values.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCOutOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCOutOctets_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCOutOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ U64 * ipSystemStatsHCOutOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCOutOctets_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCOutOctets data.
+ * get (* ipSystemStatsHCOutOctets_val_ptr ).low and (* ipSystemStatsHCOutOctets_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCOutOctets_val_ptr).low =
+ rowreq_ctx->data->stats.HCOutOctets.low;
+ (*ipSystemStatsHCOutOctets_val_ptr).high =
+ rowreq_ctx->data->stats.HCOutOctets.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCOutOctets_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsInMcastPkts
+ * ipSystemStatsInMcastPkts is subid 34 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.34
+ * Description:
+The number of IP multicast datagrams received.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsInMcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsInMcastPkts_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsInMcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsInMcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsInMcastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsInMcastPkts_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsInMcastPkts data.
+ * copy (* ipSystemStatsInMcastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsInMcastPkts_val_ptr) =
+ rowreq_ctx->data->stats.HCInMcastPkts.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsInMcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCInMcastPkts
+ * ipSystemStatsHCInMcastPkts is subid 35 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.35
+ * Description:
+The number of IP multicast datagrams received. This object
+ counts the same datagrams as ipSystemStatsInMcastPkts but
+ allows for larger values.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCInMcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCInMcastPkts_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCInMcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ U64 * ipSystemStatsHCInMcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCInMcastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCInMcastPkts data.
+ * get (* ipSystemStatsHCInMcastPkts_val_ptr ).low and (* ipSystemStatsHCInMcastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCInMcastPkts_val_ptr).low =
+ rowreq_ctx->data->stats.HCInMcastPkts.low;
+ (*ipSystemStatsHCInMcastPkts_val_ptr).high =
+ rowreq_ctx->data->stats.HCInMcastPkts.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCInMcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsInMcastOctets
+ * ipSystemStatsInMcastOctets is subid 36 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.36
+ * Description:
+The total number of octets received in IP multicast
+ datagrams. Octets from datagrams counted in
+ ipSystemStatsOutMcastPkts MUST be counted here.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsInMcastOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsInMcastOctets_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsInMcastOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsInMcastOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsInMcastOctets_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsInMcastOctets_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsInMcastOctets data.
+ * copy (* ipSystemStatsInMcastOctets_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsInMcastOctets_val_ptr) =
+ rowreq_ctx->data->stats.HCInMcastOctets.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsInMcastOctets_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCInMcastOctets
+ * ipSystemStatsHCInMcastOctets is subid 37 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.37
+ * Description:
+The total number of octets received in IP multicast
+ datagrams. This object counts the same octets as
+ ipSystemStatsInMcastOctets but allows for larger values.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCInMcastOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCInMcastOctets_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCInMcastOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCInMcastOctets_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCInMcastOctets data.
+ * get (* ipSystemStatsHCInMcastOctets_val_ptr ).low and (* ipSystemStatsHCInMcastOctets_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCInMcastOctets_val_ptr).low =
+ rowreq_ctx->data->stats.HCInMcastOctets.low;
+ (*ipSystemStatsHCInMcastOctets_val_ptr).high =
+ rowreq_ctx->data->stats.HCInMcastOctets.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCInMcastOctets_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsOutMcastPkts
+ * ipSystemStatsOutMcastPkts is subid 38 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.38
+ * Description:
+The number of IP multicast datagrams transmitted.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsOutMcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsOutMcastPkts_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsOutMcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsOutMcastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsOutMcastPkts_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsOutMcastPkts data.
+ * copy (* ipSystemStatsOutMcastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsOutMcastPkts_val_ptr) =
+ rowreq_ctx->data->stats.HCOutMcastPkts.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsOutMcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCOutMcastPkts
+ * ipSystemStatsHCOutMcastPkts is subid 39 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.39
+ * Description:
+The number of IP multicast datagrams transmitted. This
+ object counts the same datagrams as
+ ipSystemStatsOutMcastPkts but allows for larger values.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCOutMcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCOutMcastPkts_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ U64 * ipSystemStatsHCOutMcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCOutMcastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCOutMcastPkts data.
+ * get (* ipSystemStatsHCOutMcastPkts_val_ptr ).low and (* ipSystemStatsHCOutMcastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCOutMcastPkts_val_ptr).low =
+ rowreq_ctx->data->stats.HCOutMcastPkts.low;
+ (*ipSystemStatsHCOutMcastPkts_val_ptr).high =
+ rowreq_ctx->data->stats.HCOutMcastPkts.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCOutMcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsOutMcastOctets
+ * ipSystemStatsOutMcastOctets is subid 40 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.40
+ * Description:
+The total number of octets transmitted in IP multicast
+ datagrams. Octets from datagrams counted in
+ ipSystemStatsInMcastPkts MUST be counted here.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsOutMcastOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsOutMcastOctets_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long *
+ ipSystemStatsOutMcastOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsOutMcastOctets_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsOutMcastOctets_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsOutMcastOctets data.
+ * copy (* ipSystemStatsOutMcastOctets_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsOutMcastOctets_val_ptr) =
+ rowreq_ctx->data->stats.HCOutMcastOctets.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsOutMcastOctets_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCOutMcastOctets
+ * ipSystemStatsHCOutMcastOctets is subid 41 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.41
+ * Description:
+The total number of octets transmitted in IP multicast
+ datagrams. This object counts the same octets as
+ ipSystemStatsOutMcastOctets but allows for larger values.
+
+
+ Discontinuities in the value of this counter can occur at
+
+
+
+
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCOutMcastOctets data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCOutMcastOctets_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCOutMcastOctets_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCOutMcastOctets_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCOutMcastOctets data.
+ * get (* ipSystemStatsHCOutMcastOctets_val_ptr ).low and (* ipSystemStatsHCOutMcastOctets_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCOutMcastOctets_val_ptr).low =
+ rowreq_ctx->data->stats.HCOutMcastOctets.low;
+ (*ipSystemStatsHCOutMcastOctets_val_ptr).high =
+ rowreq_ctx->data->stats.HCOutMcastOctets.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCOutMcastOctets_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsInBcastPkts
+ * ipSystemStatsInBcastPkts is subid 42 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.42
+ * Description:
+The number of IP broadcast datagrams received.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsInBcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsInBcastPkts_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsInBcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsInBcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsInBcastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsInBcastPkts_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsInBcastPkts data.
+ * copy (* ipSystemStatsInBcastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsInBcastPkts_val_ptr) =
+ rowreq_ctx->data->stats.HCInBcastPkts.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsInBcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCInBcastPkts
+ * ipSystemStatsHCInBcastPkts is subid 43 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.43
+ * Description:
+The number of IP broadcast datagrams received. This object
+ counts the same datagrams as ipSystemStatsInBcastPkts but
+ allows for larger values.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCInBcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCInBcastPkts_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCInBcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ U64 * ipSystemStatsHCInBcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCInBcastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCInBcastPkts data.
+ * get (* ipSystemStatsHCInBcastPkts_val_ptr ).low and (* ipSystemStatsHCInBcastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCInBcastPkts_val_ptr).low =
+ rowreq_ctx->data->stats.HCInBcastPkts.low;
+ (*ipSystemStatsHCInBcastPkts_val_ptr).high =
+ rowreq_ctx->data->stats.HCInBcastPkts.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCInBcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsOutBcastPkts
+ * ipSystemStatsOutBcastPkts is subid 44 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.44
+ * Description:
+The number of IP broadcast datagrams transmitted.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER (based on perltype COUNTER)
+ * The net-snmp type is ASN_COUNTER. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsOutBcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsOutBcastPkts_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsOutBcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsOutBcastPkts_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsOutBcastPkts_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsOutBcastPkts data.
+ * copy (* ipSystemStatsOutBcastPkts_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsOutBcastPkts_val_ptr) =
+ rowreq_ctx->data->stats.HCOutBcastPkts.low;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsOutBcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsHCOutBcastPkts
+ * ipSystemStatsHCOutBcastPkts is subid 45 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.45
+ * Description:
+The number of IP broadcast datagrams transmitted. This
+ object counts the same datagrams as
+ ipSystemStatsOutBcastPkts but allows for larger values.
+
+
+ Discontinuities in the value of this counter can occur at
+ re-initialization of the management system, and at other
+ times as indicated by the value of
+ ipSystemStatsDiscontinuityTime.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is COUNTER64 (based on perltype COUNTER64)
+ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+ */
+/**
+ * Extract the current value of the ipSystemStatsHCOutBcastPkts data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsHCOutBcastPkts_val_ptr
+ * Pointer to storage for a U64 variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsHCOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ U64 * ipSystemStatsHCOutBcastPkts_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCOutBcastPkts_val_ptr);
+
+ /*
+ * TODO:231:o: |-> copy ipSystemStatsHCOutBcastPkts data.
+ * get (* ipSystemStatsHCOutBcastPkts_val_ptr ).low and (* ipSystemStatsHCOutBcastPkts_val_ptr ).high from rowreq_ctx->data
+ */
+ (*ipSystemStatsHCOutBcastPkts_val_ptr).low =
+ rowreq_ctx->data->stats.HCOutBcastPkts.low;
+ (*ipSystemStatsHCOutBcastPkts_val_ptr).high =
+ rowreq_ctx->data->stats.HCOutBcastPkts.high;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsHCOutBcastPkts_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsDiscontinuityTime
+ * ipSystemStatsDiscontinuityTime is subid 46 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.46
+ * Description:
+The value of sysUpTime on the most recent occasion at which
+ any one or more of this entry's counters suffered a
+ discontinuity.
+
+
+ If no such discontinuities have occurred since the last re-
+ initialization of the local management subsystem, then this
+ object contains a zero value.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is TimeStamp (based on perltype TICKS)
+ * The net-snmp type is ASN_TIMETICKS. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsDiscontinuityTime data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsDiscontinuityTime_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsDiscontinuityTime_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsDiscontinuityTime_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsDiscontinuityTime_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsDiscontinuityTime_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsDiscontinuityTime data.
+ * copy (* ipSystemStatsDiscontinuityTime_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsDiscontinuityTime_val_ptr) =
+ rowreq_ctx->ipSystemStatsDiscontinuityTime;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsDiscontinuityTime_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipSystemStatsEntry.ipSystemStatsRefreshRate
+ * ipSystemStatsRefreshRate is subid 47 of ipSystemStatsEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.31.1.1.47
+ * Description:
+The minimum reasonable polling interval for this entry.
+ This object provides an indication of the minimum amount of
+ time required to update the counters in this entry.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
+ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipSystemStatsRefreshRate data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipSystemStatsRefreshRate_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipSystemStatsRefreshRate_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipSystemStatsRefreshRate_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsRefreshRate_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsRefreshRate_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipSystemStatsRefreshRate data.
+ * copy (* ipSystemStatsRefreshRate_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipSystemStatsRefreshRate_val_ptr) =
+ rowreq_ctx->ipSystemStatsRefreshRate;
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsRefreshRate_get */
+
+
+
+/** @} */
+/** @} */
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
new file mode 100644
index 0000000000..51590d293f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
@@ -0,0 +1,1205 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ipSystemStatsTable.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+#ifndef IPSYSTEMSTATSTABLE_H
+#define IPSYSTEMSTATSTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+#include <net-snmp/data_access/ipstats.h>
+#include <net-snmp/data_access/systemstats.h>
+
+ /*
+ * other required module components
+ */
+ /* *INDENT-OFF* */
+config_require(ip-mib/data_access/systemstats)
+config_require(ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface)
+config_require(ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access)
+ /* *INDENT-ON* */
+
+ /*
+ * OID, column number and enum definions for ipSystemStatsTable
+ */
+#include "ipSystemStatsTable_constants.h"
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+ void init_ipSystemStatsTable(void);
+ void shutdown_ipSystemStatsTable(void);
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipSystemStatsTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipSystemStatsTable is subid 1 of ipTrafficStats.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.31.1, length: 9
+ */
+ /*
+ *********************************************************************
+ * 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 ipSystemStatsTable registration context.
+ */
+ typedef netsnmp_data_list ipSystemStatsTable_registration;
+
+/**********************************************************************/
+ /*
+ * TODO:110:r: |-> Review ipSystemStatsTable data context structure.
+ * This structure is used to represent the data for ipSystemStatsTable.
+ */
+ typedef netsnmp_systemstats_entry ipSystemStatsTable_data;
+
+
+ /*
+ * TODO:120:r: |-> Review ipSystemStatsTable mib index.
+ * This structure is used to represent the index for ipSystemStatsTable.
+ */
+ typedef struct ipSystemStatsTable_mib_index_s {
+
+ /*
+ * ipSystemStatsIPVersion(1)/InetVersion/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ u_long ipSystemStatsIPVersion;
+
+
+ } ipSystemStatsTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review ipSystemStatsTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+ */
+#define MAX_ipSystemStatsTable_IDX_LEN 1
+
+
+ /*
+ *********************************************************************
+ * TODO:130:o: |-> Review ipSystemStatsTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * ipSystemStatsTable_rowreq_ctx pointer.
+ */
+ typedef struct ipSystemStatsTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_ipSystemStatsTable_IDX_LEN];
+
+ ipSystemStatsTable_mib_index tbl_idx;
+
+ ipSystemStatsTable_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 ipSystemStatsTable rowreq context.
+ */
+ char known_missing;
+ uint32_t ipSystemStatsDiscontinuityTime;
+ uint32_t ipSystemStatsRefreshRate;
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *ipSystemStatsTable_data_list;
+
+ } ipSystemStatsTable_rowreq_ctx;
+
+ typedef struct ipSystemStatsTable_ref_rowreq_ctx_s {
+ ipSystemStatsTable_rowreq_ctx *rowreq_ctx;
+ } ipSystemStatsTable_ref_rowreq_ctx;
+
+ /*
+ *********************************************************************
+ * function prototypes
+ */
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsTable_pre_request(ipSystemStatsTable_registration *
+ user_context);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsTable_post_request(ipSystemStatsTable_registration *
+ user_context, int rc);
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsTable_rowreq_ctx_init(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ void *user_init_ctx);
+ void
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsTable_rowreq_ctx_cleanup(ipSystemStatsTable_rowreq_ctx
+ * rowreq_ctx);
+
+ ipSystemStatsTable_data *ipSystemStatsTable_allocate_data(void);
+ void ipSystemStatsTable_release_data(ipSystemStatsTable_data
+ * data);
+
+
+
+
+
+
+
+
+ ipSystemStatsTable_rowreq_ctx
+ * ipSystemStatsTable_row_find_by_mib_index
+ (ipSystemStatsTable_mib_index * mib_idx);
+
+ extern oid ipSystemStatsTable_oid[];
+ extern int ipSystemStatsTable_oid_size;
+
+
+#include "ipSystemStatsTable_interface.h"
+#include "ipSystemStatsTable_data_access.h"
+ /*
+ *********************************************************************
+ * GET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipSystemStatsTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipSystemStatsTable is subid 1 of ipTrafficStats.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.31.1, length: 9
+ */
+ /*
+ * indexes
+ */
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsInReceives_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInReceives_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCInReceives_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCInReceives_val_ptr);
+ int ipSystemStatsInOctets_get(ipSystemStatsTable_rowreq_ctx
+ * rowreq_ctx,
+ u_long *
+ ipSystemStatsInOctets_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCInOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 * ipSystemStatsHCInOctets_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsInHdrErrors_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInHdrErrors_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsInNoRoutes_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInNoRoutes_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsInAddrErrors_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInAddrErrors_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsInUnknownProtos_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInUnknownProtos_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsInTruncatedPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInTruncatedPkts_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInForwDatagrams_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCInForwDatagrams_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsReasmReqds_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsReasmReqds_val_ptr);
+ int ipSystemStatsReasmOKs_get(ipSystemStatsTable_rowreq_ctx
+ * rowreq_ctx,
+ u_long *
+ ipSystemStatsReasmOKs_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsReasmFails_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsReasmFails_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsInDiscards_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInDiscards_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsInDelivers_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInDelivers_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCInDelivers_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCInDelivers_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsOutRequests_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutRequests_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCOutRequests_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCOutRequests_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsOutNoRoutes_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutNoRoutes_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutForwDatagrams_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCOutForwDatagrams_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsOutDiscards_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutDiscards_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsOutFragReqds_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutFragReqds_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsOutFragOKs_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutFragOKs_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsOutFragFails_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutFragFails_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsOutFragCreates_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutFragCreates_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsOutTransmits_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutTransmits_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCOutTransmits_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCOutTransmits_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsOutOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutOctets_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCOutOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCOutOctets_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsInMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInMcastPkts_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCInMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCInMcastPkts_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInMcastOctets_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCInMcastOctets_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutMcastPkts_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCOutMcastPkts_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutMcastOctets_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCOutMcastOctets_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsInBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInBcastPkts_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCInBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCInBcastPkts_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutBcastPkts_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsHCOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ U64 *
+ ipSystemStatsHCOutBcastPkts_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsDiscontinuityTime_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsDiscontinuityTime_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsRefreshRate_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsRefreshRate_val_ptr);
+
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsTable_indexes_set_tbl_idx(ipSystemStatsTable_mib_index
+ * tbl_idx,
+ u_long
+ ipSystemStatsIPVersion_val);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsTable_indexes_set(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipSystemStatsIPVersion_val);
+
+
+
+ /*
+ *********************************************************************
+ * SET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * SET Table declarations
+ */
+
+
+ /*
+ * DUMMY markers, ignore
+ *
+ * TODO:099:x: *************************************************************
+ * TODO:199:x: *************************************************************
+ * TODO:299:x: *************************************************************
+ * TODO:399:x: *************************************************************
+ * TODO:499:x: *************************************************************
+ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPSYSTEMSTATSTABLE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h
new file mode 100644
index 0000000000..0fa6104c7a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_constants.h
@@ -0,0 +1,159 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-constants.m2c,v 1.5 2005/07/15 22:41:16 rstory Exp $
+ *
+ * $Id: ipSystemStatsTable_constants.h 13768 2005-12-01 20:12:20Z rstory $
+ */
+#ifndef IPSYSTEMSTATSTABLE_CONSTANTS_H
+#define IPSYSTEMSTATSTABLE_CONSTANTS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ * column number definitions for table ipSystemStatsTable
+ */
+#define IPSYSTEMSTATSTABLE_OID 1,3,6,1,2,1,4,31,1
+
+#define COLUMN_IPSYSTEMSTATSIPVERSION 1
+
+#define COLUMN_IPSYSTEMSTATSINRECEIVES 3
+
+#define COLUMN_IPSYSTEMSTATSHCINRECEIVES 4
+
+#define COLUMN_IPSYSTEMSTATSINOCTETS 5
+
+#define COLUMN_IPSYSTEMSTATSHCINOCTETS 6
+
+#define COLUMN_IPSYSTEMSTATSINHDRERRORS 7
+
+#define COLUMN_IPSYSTEMSTATSINNOROUTES 8
+
+#define COLUMN_IPSYSTEMSTATSINADDRERRORS 9
+
+#define COLUMN_IPSYSTEMSTATSINUNKNOWNPROTOS 10
+
+#define COLUMN_IPSYSTEMSTATSINTRUNCATEDPKTS 11
+
+#define COLUMN_IPSYSTEMSTATSINFORWDATAGRAMS 12
+
+#define COLUMN_IPSYSTEMSTATSHCINFORWDATAGRAMS 13
+
+#define COLUMN_IPSYSTEMSTATSREASMREQDS 14
+
+#define COLUMN_IPSYSTEMSTATSREASMOKS 15
+
+#define COLUMN_IPSYSTEMSTATSREASMFAILS 16
+
+#define COLUMN_IPSYSTEMSTATSINDISCARDS 17
+
+#define COLUMN_IPSYSTEMSTATSINDELIVERS 18
+
+#define COLUMN_IPSYSTEMSTATSHCINDELIVERS 19
+
+#define COLUMN_IPSYSTEMSTATSOUTREQUESTS 20
+
+#define COLUMN_IPSYSTEMSTATSHCOUTREQUESTS 21
+
+#define COLUMN_IPSYSTEMSTATSOUTNOROUTES 22
+
+#define COLUMN_IPSYSTEMSTATSOUTFORWDATAGRAMS 23
+
+#define COLUMN_IPSYSTEMSTATSHCOUTFORWDATAGRAMS 24
+
+#define COLUMN_IPSYSTEMSTATSOUTDISCARDS 25
+
+#define COLUMN_IPSYSTEMSTATSOUTFRAGREQDS 26
+
+#define COLUMN_IPSYSTEMSTATSOUTFRAGOKS 27
+
+#define COLUMN_IPSYSTEMSTATSOUTFRAGFAILS 28
+
+#define COLUMN_IPSYSTEMSTATSOUTFRAGCREATES 29
+
+#define COLUMN_IPSYSTEMSTATSOUTTRANSMITS 30
+
+#define COLUMN_IPSYSTEMSTATSHCOUTTRANSMITS 31
+
+#define COLUMN_IPSYSTEMSTATSOUTOCTETS 32
+
+#define COLUMN_IPSYSTEMSTATSHCOUTOCTETS 33
+
+#define COLUMN_IPSYSTEMSTATSINMCASTPKTS 34
+
+#define COLUMN_IPSYSTEMSTATSHCINMCASTPKTS 35
+
+#define COLUMN_IPSYSTEMSTATSINMCASTOCTETS 36
+
+#define COLUMN_IPSYSTEMSTATSHCINMCASTOCTETS 37
+
+#define COLUMN_IPSYSTEMSTATSOUTMCASTPKTS 38
+
+#define COLUMN_IPSYSTEMSTATSHCOUTMCASTPKTS 39
+
+#define COLUMN_IPSYSTEMSTATSOUTMCASTOCTETS 40
+
+#define COLUMN_IPSYSTEMSTATSHCOUTMCASTOCTETS 41
+
+#define COLUMN_IPSYSTEMSTATSINBCASTPKTS 42
+
+#define COLUMN_IPSYSTEMSTATSHCINBCASTPKTS 43
+
+#define COLUMN_IPSYSTEMSTATSOUTBCASTPKTS 44
+
+#define COLUMN_IPSYSTEMSTATSHCOUTBCASTPKTS 45
+
+#define COLUMN_IPSYSTEMSTATSDISCONTINUITYTIME 46
+
+#define COLUMN_IPSYSTEMSTATSREFRESHRATE 47
+
+
+#define IPSYSTEMSTATSTABLE_MIN_COL COLUMN_IPSYSTEMSTATSINRECEIVES
+#define IPSYSTEMSTATSTABLE_MAX_COL COLUMN_IPSYSTEMSTATSREFRESHRATE
+
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table ipSystemStatsTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipSystemStatsIPVersion (InetVersion / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef INETVERSION_ENUMS
+#define INETVERSION_ENUMS
+
+#define INETVERSION_UNKNOWN 0
+#define INETVERSION_IPV4 1
+#define INETVERSION_IPV6 2
+
+#endif /* INETVERSION_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPSYSTEMSTATSTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c
new file mode 100644
index 0000000000..c1d257d6e0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.c
@@ -0,0 +1,446 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ipSystemStatsTable_data_access.c 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipSystemStatsTable.h"
+
+
+#include "ipSystemStatsTable_data_access.h"
+
+static int ipss_cache_refresh = 30;
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipSystemStatsTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipSystemStatsTable is subid 1 of ipTrafficStats.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.31.1, length: 9
+ */
+
+/**
+ * initialization for ipSystemStatsTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param ipSystemStatsTable_reg
+ * Pointer to ipSystemStatsTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+ipSystemStatsTable_init_data(ipSystemStatsTable_registration *
+ ipSystemStatsTable_reg)
+{
+ static unsigned int my_columns[] = {
+ COLUMN_IPSYSTEMSTATSINRECEIVES, COLUMN_IPSYSTEMSTATSHCINRECEIVES,
+ /** COLUMN_IPSYSTEMSTATSINOCTETS, */
+ COLUMN_IPSYSTEMSTATSHCINOCTETS,
+ COLUMN_IPSYSTEMSTATSINHDRERRORS,
+ /** COLUMN_IPSYSTEMSTATSINNOROUTES, */
+ COLUMN_IPSYSTEMSTATSINADDRERRORS,
+ COLUMN_IPSYSTEMSTATSINUNKNOWNPROTOS,
+ /** COLUMN_IPSYSTEMSTATSINTRUNCATEDPKTS, */
+ COLUMN_IPSYSTEMSTATSINFORWDATAGRAMS,
+ COLUMN_IPSYSTEMSTATSHCINFORWDATAGRAMS,
+ COLUMN_IPSYSTEMSTATSREASMREQDS,
+ COLUMN_IPSYSTEMSTATSREASMOKS, COLUMN_IPSYSTEMSTATSREASMFAILS,
+ COLUMN_IPSYSTEMSTATSINDISCARDS, COLUMN_IPSYSTEMSTATSINDELIVERS,
+ COLUMN_IPSYSTEMSTATSHCINDELIVERS, COLUMN_IPSYSTEMSTATSOUTREQUESTS,
+ COLUMN_IPSYSTEMSTATSHCOUTREQUESTS, COLUMN_IPSYSTEMSTATSOUTNOROUTES,
+ /** COLUMN_IPSYSTEMSTATSOUTFORWDATAGRAMS, */
+ COLUMN_IPSYSTEMSTATSHCOUTFORWDATAGRAMS,
+ COLUMN_IPSYSTEMSTATSOUTDISCARDS,
+ /** COLUMN_IPSYSTEMSTATSOUTFRAGREQDS, */
+ COLUMN_IPSYSTEMSTATSOUTFRAGOKS, COLUMN_IPSYSTEMSTATSOUTFRAGFAILS,
+ COLUMN_IPSYSTEMSTATSOUTFRAGCREATES,
+ /** COLUMN_IPSYSTEMSTATSOUTTRANSMITS, */
+ /** COLUMN_IPSYSTEMSTATSHCOUTTRANSMITS, */
+ /** COLUMN_IPSYSTEMSTATSOUTOCTETS, */
+ /** COLUMN_IPSYSTEMSTATSHCOUTOCTETS, */
+ /** COLUMN_IPSYSTEMSTATSINMCASTPKTS, */
+ /** COLUMN_IPSYSTEMSTATSHCINMCASTPKTS, */
+ /** COLUMN_IPSYSTEMSTATSINMCASTOCTETS, */
+ /** COLUMN_IPSYSTEMSTATSHCINMCASTOCTETS, */
+ /** COLUMN_IPSYSTEMSTATSOUTMCASTPKTS, */
+ /** COLUMN_IPSYSTEMSTATSHCOUTMCASTPKTS, */
+ /** COLUMN_IPSYSTEMSTATSOUTMCASTOCTETS, */
+ /** COLUMN_IPSYSTEMSTATSHCOUTMCASTOCTETS, */
+ /** COLUMN_IPSYSTEMSTATSINBCASTPKTS, */
+ /** COLUMN_IPSYSTEMSTATSHCINBCASTPKTS, */
+ /** COLUMN_IPSYSTEMSTATSOUTBCASTPKTS, */
+ /** COLUMN_IPSYSTEMSTATSHCOUTBCASTPKTS, */
+ COLUMN_IPSYSTEMSTATSDISCONTINUITYTIME,
+ COLUMN_IPSYSTEMSTATSREFRESHRATE
+ };
+ static netsnmp_column_info valid_columns;
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_init_data",
+ "called\n"));
+
+ /*
+ * we only want to process certain columns, and ignore
+ * anything else.
+ */
+ valid_columns.isRange = 0;
+ valid_columns.details.list = my_columns;
+ valid_columns.list_count = sizeof(my_columns) / sizeof(unsigned int);
+ ipSystemStatsTable_valid_columns_set(&valid_columns);
+ /*
+ * TODO:303:o: Initialize ipSystemStatsTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+ipSystemStatsTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache * cache)
+{
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_container_init", "called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,
+ "bad container param to ipSystemStatsTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,
+ "bad cache param to ipSystemStatsTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up ipSystemStatsTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = IPSYSTEMSTATSTABLE_CACHE_TIMEOUT; /* seconds */
+
+ /*
+ * don't release resources
+ */
+ cache->flags |=
+ (NETSNMP_CACHE_DONT_AUTO_RELEASE | NETSNMP_CACHE_DONT_FREE_EXPIRED
+ | NETSNMP_CACHE_DONT_FREE_BEFORE_LOAD |
+ NETSNMP_CACHE_AUTO_RELOAD);
+} /* ipSystemStatsTable_container_init */
+
+/**
+ * check entry for update
+ */
+static void
+_check_for_updates(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_container *stats)
+{
+ /*
+ * check for matching entry. works because indexes are the same.
+ */
+ netsnmp_systemstats_entry *systemstats_entry =
+ CONTAINER_FIND(stats, rowreq_ctx->data);
+ if (NULL == systemstats_entry) {
+ DEBUGMSGTL(("ipSystemStatsTable:access",
+ "updating missing entry\n"));
+
+ /*
+ * mark row as missing, so we can set discontinuity
+ * when it comes back.
+ *
+ * what else should we do? set refresh to 0? that's not quite right...
+ */
+ rowreq_ctx->known_missing = 1;
+ } else {
+ DEBUGMSGTL(("ipSystemStatsTable:access",
+ "updating existing entry\n"));
+
+ /*
+ * Check for changes & update
+ */
+ netsnmp_access_systemstats_entry_update(rowreq_ctx->data,
+ systemstats_entry);
+
+ /*
+ * set discontinuity if previously missing.
+ */
+ if (1 == rowreq_ctx->known_missing) {
+ rowreq_ctx->known_missing = 0;
+ rowreq_ctx->ipSystemStatsDiscontinuityTime =
+ netsnmp_get_agent_uptime();
+ }
+
+ /*
+ * remove entry from container
+ */
+ CONTAINER_REMOVE(stats, systemstats_entry);
+ netsnmp_access_systemstats_entry_free(systemstats_entry);
+ }
+}
+
+/**
+ * add new entry
+ */
+static void
+_add_new(netsnmp_systemstats_entry *systemstats_entry,
+ netsnmp_container *container)
+{
+ ipSystemStatsTable_rowreq_ctx *rowreq_ctx;
+
+ DEBUGMSGTL(("ipSystemStatsTable:access", "creating new entry\n"));
+
+ netsnmp_assert(NULL != systemstats_entry);
+ netsnmp_assert(NULL != container);
+
+ /*
+ * allocate an row context and set the index(es)
+ */
+ rowreq_ctx =
+ ipSystemStatsTable_allocate_rowreq_ctx(systemstats_entry, NULL);
+ if ((NULL != rowreq_ctx)
+ && (MFD_SUCCESS ==
+ ipSystemStatsTable_indexes_set(rowreq_ctx,
+ systemstats_entry->
+ ns_ip_version))) {
+ rowreq_ctx->ipSystemStatsRefreshRate = ipss_cache_refresh * 1000; /* milli-seconds */
+ CONTAINER_INSERT(container, rowreq_ctx);
+ } else {
+ if (NULL != rowreq_ctx) {
+ snmp_log(LOG_ERR, "error setting index while loading "
+ "ipSystemStatsTable cache.\n");
+ ipSystemStatsTable_release_rowreq_ctx(rowreq_ctx);
+ } else {
+ snmp_log(LOG_ERR, "memory allocation failed while loading "
+ "ipSystemStatsTable cache.\n");
+ netsnmp_access_systemstats_entry_free(systemstats_entry);
+ }
+ }
+}
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before ipSystemStatsTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+ipSystemStatsTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_container_shutdown", "called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,
+ "bad params to ipSystemStatsTable_container_shutdown\n");
+ return;
+ }
+
+} /* ipSystemStatsTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement ipSystemStatsTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * ipSystemStatsTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+ipSystemStatsTable_container_load(netsnmp_container *container)
+{
+ netsnmp_container *stats =
+ netsnmp_access_systemstats_container_load(NULL, 0);
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_cache_load",
+ "called\n"));
+
+ netsnmp_assert(NULL != container);
+
+ if (NULL == stats)
+ return MFD_RESOURCE_UNAVAILABLE; /* msg already logged */
+ /*
+ * TODO:351:M: |-> Load/update data in the ipSystemStatsTable container.
+ * loop over your ipSystemStatsTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ /*
+ * we just got a fresh copy of data. compare it to
+ * what we've already got, and make any adjustements...
+ */
+ CONTAINER_FOR_EACH(container, (netsnmp_container_obj_func *)
+ _check_for_updates, stats);
+
+ /*
+ * now add any new entries
+ */
+ CONTAINER_FOR_EACH(stats, (netsnmp_container_obj_func *)
+ _add_new, container);
+
+ /*
+ * free the container. we've either claimed each ifentry, or released it,
+ * so the dal function doesn't need to clear the container.
+ */
+ netsnmp_access_systemstats_container_free(stats,
+ NETSNMP_ACCESS_SYSTEMSTATS_FREE_DONT_CLEAR);
+
+ DEBUGMSGT(("verbose:ipSystemStatsTable:ipSystemStatsTable_cache_load",
+ "%d records\n", CONTAINER_SIZE(container)));
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+ipSystemStatsTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_container_free", "called\n"));
+
+ /*
+ * TODO:380:M: Free ipSystemStatsTable container data.
+ */
+} /* ipSystemStatsTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+ipSystemStatsTable_row_prep(ipSystemStatsTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_row_prep",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* ipSystemStatsTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.h
new file mode 100644
index 0000000000..fadd3bcb96
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_data_access.h
@@ -0,0 +1,105 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ipSystemStatsTable_data_access.h 13768 2005-12-01 20:12:20Z rstory $
+ */
+#ifndef IPSYSTEMSTATSTABLE_DATA_ACCESS_H
+#define IPSYSTEMSTATSTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipSystemStatsTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipSystemStatsTable is subid 1 of ipTrafficStats.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.31.1, length: 9
+ */
+
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsTable_init_data(ipSystemStatsTable_registration *
+ ipSystemStatsTable_reg);
+
+
+ /*
+ * TODO:180:o: Review ipSystemStatsTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define IPSYSTEMSTATSTABLE_CACHE_TIMEOUT 60
+
+ void ipSystemStatsTable_container_init(netsnmp_container
+ **container_ptr_ptr,
+ netsnmp_cache *
+ cache);
+ void ipSystemStatsTable_container_shutdown(netsnmp_container
+ *container_ptr);
+
+ int ipSystemStatsTable_container_load(netsnmp_container
+ *container);
+ void ipSystemStatsTable_container_free(netsnmp_container
+ *container);
+
+ int ipSystemStatsTable_cache_load(netsnmp_container
+ *container);
+ void ipSystemStatsTable_cache_free(netsnmp_container
+ *container);
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsTable_row_prep(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPSYSTEMSTATSTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c
new file mode 100644
index 0000000000..614afa0a99
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c
@@ -0,0 +1,1363 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ipSystemStatsTable_interface.c 15015 2006-08-17 15:06:43Z rstory $
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipSystemStatsTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "ipSystemStatsTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipSystemStatsTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipSystemStatsTable is subid 1 of ipTrafficStats.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.31.1, length: 9
+ */
+typedef struct ipSystemStatsTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ ipSystemStatsTable_registration *user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+} ipSystemStatsTable_interface_ctx;
+
+static ipSystemStatsTable_interface_ctx ipSystemStatsTable_if_ctx;
+
+static void
+ _ipSystemStatsTable_container_init(ipSystemStatsTable_interface_ctx *
+ if_ctx);
+static void
+ _ipSystemStatsTable_container_shutdown(ipSystemStatsTable_interface_ctx *
+ if_ctx);
+
+
+netsnmp_container *
+ipSystemStatsTable_container_get(void)
+{
+ return ipSystemStatsTable_if_ctx.container;
+}
+
+ipSystemStatsTable_registration *
+ipSystemStatsTable_registration_get(void)
+{
+ return ipSystemStatsTable_if_ctx.user_ctx;
+}
+
+ipSystemStatsTable_registration *
+ipSystemStatsTable_registration_set(ipSystemStatsTable_registration *
+ newreg)
+{
+ ipSystemStatsTable_registration *old =
+ ipSystemStatsTable_if_ctx.user_ctx;
+ ipSystemStatsTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+ipSystemStatsTable_container_size(void)
+{
+ return CONTAINER_SIZE(ipSystemStatsTable_if_ctx.container);
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_ipSystemStatsTable_pre_request;
+static Netsnmp_Node_Handler _mfd_ipSystemStatsTable_post_request;
+static Netsnmp_Node_Handler _mfd_ipSystemStatsTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_ipSystemStatsTable_get_values;
+/**
+ * @internal
+ * Initialize the table ipSystemStatsTable
+ * (Define its contents and how it's structured)
+ */
+void
+_ipSystemStatsTable_initialize_interface(ipSystemStatsTable_registration *
+ reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &ipSystemStatsTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info =
+ &ipSystemStatsTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:ipSystemStatsTable:_ipSystemStatsTable_initialize_interface", "called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for ipSystemStatsTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
+ /** index: ipSystemStatsIPVersion */
+ 0);
+
+ /*
+ * Define the minimum and maximum accessible columns. This
+ * optimizes retrival.
+ */
+ tbl_info->min_column = IPSYSTEMSTATSTABLE_MIN_COL;
+ tbl_info->max_column = IPSYSTEMSTATSTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ ipSystemStatsTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ ipSystemStatsTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _ipSystemStatsTable_container_init(&ipSystemStatsTable_if_ctx);
+ if (NULL == ipSystemStatsTable_if_ctx.container) {
+ snmp_log(LOG_ERR,
+ "could not initialize container for ipSystemStatsTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup =
+ _mfd_ipSystemStatsTable_object_lookup;
+ access_multiplexer->get_values = _mfd_ipSystemStatsTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_ipSystemStatsTable_pre_request;
+ access_multiplexer->post_request =
+ _mfd_ipSystemStatsTable_post_request;
+
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("ipSystemStatsTable:init_ipSystemStatsTable",
+ "Registering ipSystemStatsTable as a mibs-for-dummies table.\n"));
+ handler =
+ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo =
+ netsnmp_handler_registration_create("ipSystemStatsTable", handler,
+ ipSystemStatsTable_oid,
+ ipSystemStatsTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RONLY);
+ if (NULL == reginfo) {
+ snmp_log(LOG_ERR, "error registering table ipSystemStatsTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &ipSystemStatsTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if (access_multiplexer->object_lookup)
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if (access_multiplexer->set_values)
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if (access_multiplexer->irreversible_commit)
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if (access_multiplexer->object_syntax_checks)
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if (access_multiplexer->pre_request)
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if (access_multiplexer->post_request)
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if (access_multiplexer->undo_setup)
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if (access_multiplexer->undo_cleanup)
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if (access_multiplexer->undo_sets)
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if (access_multiplexer->row_creation)
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if (access_multiplexer->consistency_checks)
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if (access_multiplexer->commit)
+ mfd_modes |= BABY_STEP_COMMIT;
+ if (access_multiplexer->undo_commit)
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ ipSystemStatsTable_if_ctx.
+ container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if (NULL != ipSystemStatsTable_if_ctx.cache) {
+ handler =
+ netsnmp_cache_handler_get(ipSystemStatsTable_if_ctx.cache);
+ netsnmp_inject_handler(reginfo, handler);
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _ipSystemStatsTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table ipSystemStatsTable
+ */
+void
+_ipSystemStatsTable_shutdown_interface(ipSystemStatsTable_registration *
+ reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _ipSystemStatsTable_container_shutdown(&ipSystemStatsTable_if_ctx);
+}
+
+void
+ipSystemStatsTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ ipSystemStatsTable_if_ctx.tbl_info.valid_columns = vc;
+} /* ipSystemStatsTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+ipSystemStatsTable_index_to_oid(netsnmp_index * oid_idx,
+ ipSystemStatsTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * ipSystemStatsIPVersion(1)/InetVersion/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ netsnmp_variable_list var_ipSystemStatsIPVersion;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_ipSystemStatsIPVersion, 0x00,
+ sizeof(var_ipSystemStatsIPVersion));
+ var_ipSystemStatsIPVersion.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_ipSystemStatsIPVersion.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_index_to_oid", "called\n"));
+
+ /*
+ * ipSystemStatsIPVersion(1)/InetVersion/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ snmp_set_var_value(&var_ipSystemStatsIPVersion,
+ (u_char *) & mib_idx->ipSystemStatsIPVersion,
+ sizeof(mib_idx->ipSystemStatsIPVersion));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_ipSystemStatsIPVersion);
+ if (err)
+ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_ipSystemStatsIPVersion);
+
+ return err;
+} /* ipSystemStatsTable_index_to_oid */
+
+/**
+ * extract ipSystemStatsTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+ipSystemStatsTable_index_from_oid(netsnmp_index * oid_idx,
+ ipSystemStatsTable_mib_index * mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * ipSystemStatsIPVersion(1)/InetVersion/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
+ */
+ netsnmp_variable_list var_ipSystemStatsIPVersion;
+
+ /*
+ * set up varbinds
+ */
+ memset(&var_ipSystemStatsIPVersion, 0x00,
+ sizeof(var_ipSystemStatsIPVersion));
+ var_ipSystemStatsIPVersion.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_ipSystemStatsIPVersion.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:ipSystemStatsTable:ipSystemStatsTable_index_from_oid", "called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
+ &var_ipSystemStatsIPVersion);
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->ipSystemStatsIPVersion =
+ *((u_long *) var_ipSystemStatsIPVersion.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers(&var_ipSystemStatsIPVersion);
+
+ return err;
+} /* ipSystemStatsTable_index_from_oid */
+
+
+/*
+ *********************************************************************
+ * @internal
+ * allocate resources for a ipSystemStatsTable_rowreq_ctx
+ */
+ipSystemStatsTable_rowreq_ctx *
+ipSystemStatsTable_allocate_rowreq_ctx(ipSystemStatsTable_data * data,
+ void *user_init_ctx)
+{
+ ipSystemStatsTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(ipSystemStatsTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:ipSystemStatsTable:ipSystemStatsTable_allocate_rowreq_ctx", "called\n"));
+
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+ "ipSystemStatsTable_rowreq_ctx.\n");
+ return NULL;
+ } else {
+ if (NULL != data) {
+ /*
+ * track if we got data from user
+ */
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DATA_FROM_USER;
+ rowreq_ctx->data = data;
+ } else if (NULL ==
+ (rowreq_ctx->data =
+ ipSystemStatsTable_allocate_data())) {
+ SNMP_FREE(rowreq_ctx);
+ return NULL;
+ }
+ }
+
+ /*
+ * undo context will be allocated when needed (in *_undo_setup)
+ */
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->ipSystemStatsTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if (SNMPERR_SUCCESS !=
+ ipSystemStatsTable_rowreq_ctx_init(rowreq_ctx,
+ user_init_ctx)) {
+ ipSystemStatsTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* ipSystemStatsTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a ipSystemStatsTable_rowreq_ctx
+ */
+void
+ipSystemStatsTable_release_rowreq_ctx(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:ipSystemStatsTable:ipSystemStatsTable_release_rowreq_ctx", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ ipSystemStatsTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ /*
+ * for non-transient data, don't free data we got from the user
+ */
+ if ((rowreq_ctx->data) &&
+ !(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER))
+ ipSystemStatsTable_release_data(rowreq_ctx->data);
+
+ /*
+ * free index oid pointer
+ */
+ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* ipSystemStatsTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipSystemStatsTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:ipSystemStatsTable:_mfd_ipSystemStatsTable_pre_request", "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ipSystemStatsTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = ipSystemStatsTable_pre_request(ipSystemStatsTable_if_ctx.
+ user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipSystemStatsTable", "error %d from "
+ "ipSystemStatsTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipSystemStatsTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipSystemStatsTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipSystemStatsTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:ipSystemStatsTable:_mfd_ipSystemStatsTable_post_request", "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ ipSystemStatsTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ipSystemStatsTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ rc = ipSystemStatsTable_post_request(ipSystemStatsTable_if_ctx.
+ user_ctx, packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipSystemStatsTable", "error %d from "
+ "ipSystemStatsTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipSystemStatsTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipSystemStatsTable_object_lookup(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ ipSystemStatsTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipSystemStatsTable:_mfd_ipSystemStatsTable_object_lookup", "called\n"));
+
+ /*
+ * get our context from mfd
+ * ipSystemStatsTable_interface_ctx *if_ctx =
+ * (ipSystemStatsTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if (NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ ipSystemStatsTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_ipSystemStatsTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipSystemStatsTable_get_column(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipSystemStatsTable:_mfd_ipSystemStatsTable_get_column", "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipSystemStatsInReceives(3)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSINRECEIVES:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsInReceives_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCInReceives(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINRECEIVES:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInReceives_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsInOctets(5)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSINOCTETS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsInOctets_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINOCTETS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInOctets_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsInHdrErrors(7)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSINHDRERRORS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsInHdrErrors_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsInNoRoutes(8)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSINNOROUTES:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsInNoRoutes_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsInAddrErrors(9)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSINADDRERRORS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsInAddrErrors_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsInUnknownProtos(10)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSINUNKNOWNPROTOS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsInUnknownProtos_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsInTruncatedPkts(11)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSINTRUNCATEDPKTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsInTruncatedPkts_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsInForwDatagrams(12)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSINFORWDATAGRAMS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsInForwDatagrams_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCInForwDatagrams(13)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINFORWDATAGRAMS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInForwDatagrams_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsReasmReqds(14)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSREASMREQDS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsReasmReqds_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsReasmOKs(15)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSREASMOKS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsReasmOKs_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsReasmFails(16)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSREASMFAILS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsReasmFails_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsInDiscards(17)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSINDISCARDS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsInDiscards_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsInDelivers(18)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSINDELIVERS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsInDelivers_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCInDelivers(19)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINDELIVERS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInDelivers_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsOutRequests(20)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSOUTREQUESTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsOutRequests_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCOutRequests(21)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTREQUESTS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutRequests_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsOutNoRoutes(22)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSOUTNOROUTES:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsOutNoRoutes_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsOutForwDatagrams(23)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSOUTFORWDATAGRAMS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsOutForwDatagrams_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCOutForwDatagrams(24)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTFORWDATAGRAMS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutForwDatagrams_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsOutDiscards(25)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSOUTDISCARDS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsOutDiscards_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsOutFragReqds(26)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSOUTFRAGREQDS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsOutFragReqds_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsOutFragOKs(27)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSOUTFRAGOKS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsOutFragOKs_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsOutFragFails(28)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSOUTFRAGFAILS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsOutFragFails_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsOutFragCreates(29)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSOUTFRAGCREATES:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsOutFragCreates_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsOutTransmits(30)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSOUTTRANSMITS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsOutTransmits_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCOutTransmits(31)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTTRANSMITS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutTransmits_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsOutOctets(32)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSOUTOCTETS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsOutOctets_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCOutOctets(33)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTOCTETS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutOctets_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsInMcastPkts(34)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSINMCASTPKTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsInMcastPkts_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCInMcastPkts(35)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINMCASTPKTS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInMcastPkts_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsInMcastOctets(36)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSINMCASTOCTETS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsInMcastOctets_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCInMcastOctets(37)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINMCASTOCTETS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInMcastOctets_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsOutMcastPkts(38)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSOUTMCASTPKTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsOutMcastPkts_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCOutMcastPkts(39)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTMCASTPKTS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutMcastPkts_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsOutMcastOctets(40)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSOUTMCASTOCTETS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsOutMcastOctets_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCOutMcastOctets(41)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTMCASTOCTETS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutMcastOctets_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsInBcastPkts(42)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSINBCASTPKTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsInBcastPkts_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCInBcastPkts(43)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINBCASTPKTS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInBcastPkts_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsOutBcastPkts(44)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSOUTBCASTPKTS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_COUNTER;
+ rc = ipSystemStatsOutBcastPkts_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsHCOutBcastPkts(45)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTBCASTPKTS:
+ var->val_len = sizeof(U64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutBcastPkts_get(rowreq_ctx,
+ (U64 *) var->val.string);
+ break;
+
+ /*
+ * ipSystemStatsDiscontinuityTime(46)/TimeStamp/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSDISCONTINUITYTIME:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_TIMETICKS;
+ rc = ipSystemStatsDiscontinuityTime_get(rowreq_ctx,
+ (u_long *) var->val.
+ string);
+ break;
+
+ /*
+ * ipSystemStatsRefreshRate(47)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSREFRESHRATE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_UNSIGNED;
+ rc = ipSystemStatsRefreshRate_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipSystemStatsTable_get_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ipSystemStatsTable_get_column */
+
+int
+_mfd_ipSystemStatsTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipSystemStatsTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ u_char *old_string;
+ void (*dataFreeHook) (void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:ipSystemStatsTable:_mfd_ipSystemStatsTable_get_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if (NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ } else if (requests->requestvb->buf ==
+ requests->requestvb->val.string) {
+ if (requests->requestvb->val_len !=
+ sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipSystemStatsTable_get_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ if (MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ } else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if (rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if (old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if (dataFreeHook)
+ (*dataFreeHook) (old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipSystemStatsTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*
+ * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
+ */
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache * cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:ipSystemStatsTable:_cache_load", "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR,
+ "invalid cache for ipSystemStatsTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return ipSystemStatsTable_container_load((netsnmp_container *) cache->
+ magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache * cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:ipSystemStatsTable:_cache_free", "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR,
+ "invalid cache in ipSystemStatsTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container *) cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+ void *context)
+{
+ DEBUGMSGTL(("internal:ipSystemStatsTable:_container_item_free",
+ "called\n"));
+
+ if (NULL == rowreq_ctx)
+ return;
+
+ ipSystemStatsTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:ipSystemStatsTable:_container_free",
+ "called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR,
+ "invalid container in ipSystemStatsTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ ipSystemStatsTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *) _container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_ipSystemStatsTable_container_init(ipSystemStatsTable_interface_ctx *
+ if_ctx)
+{
+ DEBUGMSGTL(("internal:ipSystemStatsTable:_ipSystemStatsTable_container_init", "called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ ipSystemStatsTable_oid,
+ ipSystemStatsTable_oid_size);
+
+ if (NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for ipSystemStatsTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ ipSystemStatsTable_container_init(&if_ctx->container, if_ctx->cache);
+ if (NULL == if_ctx->container)
+ if_ctx->container =
+ netsnmp_container_find("ipSystemStatsTable:table_container");
+ if (NULL == if_ctx->container) {
+ snmp_log(LOG_ERR, "error creating container in "
+ "ipSystemStatsTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void *) if_ctx->container;
+} /* _ipSystemStatsTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_ipSystemStatsTable_container_shutdown(ipSystemStatsTable_interface_ctx *
+ if_ctx)
+{
+ DEBUGMSGTL(("internal:ipSystemStatsTable:_ipSystemStatsTable_container_shutdown", "called\n"));
+
+ ipSystemStatsTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _ipSystemStatsTable_container_shutdown */
+
+
+ipSystemStatsTable_rowreq_ctx *
+ipSystemStatsTable_row_find_by_mib_index(ipSystemStatsTable_mib_index *
+ mib_idx)
+{
+ ipSystemStatsTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = ipSystemStatsTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx =
+ CONTAINER_FIND(ipSystemStatsTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h
new file mode 100644
index 0000000000..37cf765c35
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.h
@@ -0,0 +1,173 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ipSystemStatsTable_interface.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/** @ingroup interface Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef IPSYSTEMSTATSTABLE_INTERFACE_H
+#define IPSYSTEMSTATSTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "ipSystemStatsTable.h"
+
+
+ /*
+ ********************************************************************
+ * Table declarations
+ */
+
+ /*
+ * PUBLIC interface initialization routine
+ */
+ void
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ _ipSystemStatsTable_initialize_interface
+ (ipSystemStatsTable_registration * user_ctx, u_long flags);
+ void
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ _ipSystemStatsTable_shutdown_interface
+ (ipSystemStatsTable_registration * user_ctx);
+
+
+
+
+
+
+
+ ipSystemStatsTable_registration
+ * ipSystemStatsTable_registration_get(void);
+
+
+
+
+
+
+
+ ipSystemStatsTable_registration
+ * ipSystemStatsTable_registration_set
+ (ipSystemStatsTable_registration * newreg);
+
+ netsnmp_container *ipSystemStatsTable_container_get(void);
+ int ipSystemStatsTable_container_size(void);
+
+
+
+
+
+
+
+ ipSystemStatsTable_rowreq_ctx
+ * ipSystemStatsTable_allocate_rowreq_ctx(ipSystemStatsTable_data *,
+ void *);
+ void
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsTable_release_rowreq_ctx(ipSystemStatsTable_rowreq_ctx
+ * rowreq_ctx);
+
+ int ipSystemStatsTable_index_to_oid(netsnmp_index *
+ oid_idx,
+ ipSystemStatsTable_mib_index
+ * mib_idx);
+ int ipSystemStatsTable_index_from_oid(netsnmp_index *
+ oid_idx,
+ ipSystemStatsTable_mib_index
+ * mib_idx);
+
+ /*
+ * access to certain internals. use with caution!
+ */
+ void
+
+
+
+
+
+
+
+
+
+
+ ipSystemStatsTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPSYSTEMSTATSTABLE_INTERFACE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ip_scalars.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ip_scalars.c
new file mode 100644
index 0000000000..2543491afd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ip_scalars.c
@@ -0,0 +1,153 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf,v 1.8 2004/10/14 12:57:34 dts12 Exp $
+ */
+
+#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/data_access/ip_scalars.h>
+
+#include "ip_scalars.h"
+
+int
+handle_ipv6IpForwarding(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests);
+
+/** Initializes the ip module */
+void
+init_ip_scalars(void)
+{
+ static oid ipReasmTimeout_oid[] = { 1, 3, 6, 1, 2, 1, 4, 13, 0 };
+ static oid ipv6IpForwarding_oid[] = { 1, 3, 6, 1, 2, 1, 4, 25 };
+ static oid ipv6IpDefaultHopLimit_oid[] =
+ { 1, 3, 6, 1, 2, 1, 4, 26, 0 };
+
+ DEBUGMSGTL(("ip_scalar", "Initializing\n"));
+
+ netsnmp_register_num_file_instance
+ ("ipReasmTimeout",
+ ipReasmTimeout_oid, OID_LENGTH(ipReasmTimeout_oid),
+ "/proc/sys/net/ipv4/ipfrag_time", ASN_INTEGER,
+ HANDLER_CAN_RONLY, NULL, NULL);
+
+ netsnmp_register_scalar(netsnmp_create_handler_registration
+ ("ipv6IpForwarding", handle_ipv6IpForwarding,
+ ipv6IpForwarding_oid,
+ OID_LENGTH(ipv6IpForwarding_oid),
+ HANDLER_CAN_RWRITE));
+
+ netsnmp_register_num_file_instance
+ ("ipv6IpDefaultHopLimit",
+ ipv6IpDefaultHopLimit_oid, OID_LENGTH(ipv6IpDefaultHopLimit_oid),
+ "/proc/sys/net/ipv6/conf/default/hop_limit", ASN_INTEGER,
+ HANDLER_CAN_RWRITE, NULL, NULL);
+
+}
+
+int
+handle_ipv6IpForwarding(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ u_long value;
+
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /*
+ * a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one.
+ */
+ switch (reqinfo->mode) {
+
+ case MODE_GET:
+ rc = netsnmp_arch_ip_scalars_ipv6IpForwarding_get(&value);
+ if (rc != 0) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_NOSUCHINSTANCE);
+ }
+ else {
+ value = value ? 1 : 2;
+ snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+ (u_char *)&value, sizeof(value));
+ }
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ break;
+
+ case MODE_SET_RESERVE2:
+ /*
+ * store old info for undo later
+ */
+ rc = netsnmp_arch_ip_scalars_ipv6IpForwarding_get(&value);
+ if (rc < 0) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_NOCREATION);
+ }
+ else {
+ u_long *value_save;
+ memdup((u_char **) & value_save, (u_char *) &value,
+ sizeof(value));
+ if ( NULL == value_save ) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else {
+ netsnmp_request_add_list_data(requests,
+ netsnmp_create_data_list
+ ("ipfw", value_save,
+ free));
+ }
+ }
+ break;
+
+ case MODE_SET_FREE:
+ break;
+
+ case MODE_SET_ACTION:
+ value = *(requests->requestvb->val.integer);
+ rc = netsnmp_arch_ip_scalars_ipv6IpForwarding_set(value);
+ if ( 0 != rc ) {
+ netsnmp_set_request_error(reqinfo, requests, rc );
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ break;
+
+ case MODE_SET_UNDO:
+ value =
+ *((u_long *) netsnmp_request_get_list_data(requests,
+ "ipfw"));
+ rc = netsnmp_arch_ip_scalars_ipv6IpForwarding_set(value);
+ if ( 0 != rc ) {
+ netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_UNDOFAILED);
+ }
+ break;
+
+ default:
+ /*
+ * we should never get here, so this is a really bad error
+ */
+ snmp_log(LOG_ERR, "unknown mode (%d) in handle_ipv6IpForwarding\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ip_scalars.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ip_scalars.h
new file mode 100644
index 0000000000..7670a49803
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ip_scalars.h
@@ -0,0 +1,7 @@
+/*
+ * module to include the modules
+ */
+
+void init_ip_scalars(void);
+
+config_require(ip-mib/data_access/scalars_common)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable.h
new file mode 100644
index 0000000000..2ebd7680f0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable.h
@@ -0,0 +1,5 @@
+/*
+ * module to include the modules
+ */
+
+config_require(ip-mib/ipv4InterfaceTable/ipv4InterfaceTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.c
new file mode 100644
index 0000000000..b79811c88c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.c
@@ -0,0 +1,956 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ipv4InterfaceTable.c 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/** \page MFD helper for ipv4InterfaceTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipv4InterfaceTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "ipv4InterfaceTable_interface.h"
+
+oid ipv4InterfaceTable_oid[] = { IPV4INTERFACETABLE_OID };
+int ipv4InterfaceTable_oid_size =
+OID_LENGTH(ipv4InterfaceTable_oid);
+
+ipv4InterfaceTable_registration ipv4InterfaceTable_user_context;
+
+void initialize_table_ipv4InterfaceTable(void);
+void shutdown_table_ipv4InterfaceTable(void);
+
+
+/**
+ * Initializes the ipv4InterfaceTable module
+ */
+void
+init_ipv4InterfaceTable(void)
+{
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:init_ipv4InterfaceTable",
+ "called\n"));
+
+ /*
+ * TODO:300:o: Perform ipv4InterfaceTable one-time module initialization.
+ */
+
+ /*
+ * we depend on the ifTable, so we put our init in with it
+ * to guarantee order of execution.
+ */
+ init_ifTable();
+
+ /*
+ * last changed should be 0 at startup
+ */
+ ipv4InterfaceTable_lastChange_set(0);
+
+} /* init_ipv4InterfaceTable */
+
+/**
+ * Shut-down the ipv4InterfaceTable module (agent is exiting)
+ */
+void
+shutdown_ipv4InterfaceTable(void)
+{
+ if (should_init("ipv4InterfaceTable"))
+ shutdown_table_ipv4InterfaceTable();
+
+}
+
+/**
+ * Initialize the table ipv4InterfaceTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_ipv4InterfaceTable(void)
+{
+ ipv4InterfaceTable_registration *user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:initialize_table_ipv4InterfaceTable", "called\n"));
+
+ /*
+ * TODO:301:o: Perform ipv4InterfaceTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize ipv4InterfaceTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context =
+ netsnmp_create_data_list("ipv4InterfaceTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _ipv4InterfaceTable_initialize_interface(user_context, flags);
+} /* initialize_table_ipv4InterfaceTable */
+
+/**
+ * Shutdown the table ipv4InterfaceTable
+ */
+void
+shutdown_table_ipv4InterfaceTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _ipv4InterfaceTable_shutdown_interface
+ (&ipv4InterfaceTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+ipv4InterfaceTable_rowreq_ctx_init(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx, void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_rowreq_ctx_init", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra ipv4InterfaceTable rowreq initialization. (eg DEFVALS)
+ */
+ rowreq_ctx->data.ipv4InterfaceRetransmitTime = 1000;
+
+
+ return MFD_SUCCESS;
+} /* ipv4InterfaceTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ * @param rowreq_ctx
+ *
+ */
+void
+ipv4InterfaceTable_rowreq_ctx_cleanup(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_rowreq_ctx_cleanup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra ipv4InterfaceTable rowreq cleanup.
+ */
+} /* ipv4InterfaceTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ * @param user_context
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+ipv4InterfaceTable_pre_request(ipv4InterfaceTable_registration *
+ user_context)
+{
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_pre_request", "called\n"));
+
+ /*
+ * TODO:510:o: Perform ipv4InterfaceTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* ipv4InterfaceTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+ipv4InterfaceTable_post_request(ipv4InterfaceTable_registration *
+ user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_post_request", "called\n"));
+
+ /*
+ * TODO:511:o: Perform ipv4InterfaceTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (ipv4InterfaceTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ ipv4InterfaceTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* ipv4InterfaceTable_post_request */
+
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv4InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipv4InterfaceTable is subid 28 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.28, length: 8
+ */
+
+/*
+ * ---------------------------------------------------------------------
+ * * TODO:200:r: Implement ipv4InterfaceTable data context functions.
+ */
+
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipv4InterfaceEntry.ipv4InterfaceReasmMaxSize
+ * ipv4InterfaceReasmMaxSize is subid 2 of ipv4InterfaceEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.28.1.2
+ * Description:
+The size of the largest IPv4 datagram which this entity can
+ re-assemble from incoming IPv4 fragmented datagrams received
+ on this interface.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 65535;
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the ipv4InterfaceReasmMaxSize data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipv4InterfaceReasmMaxSize_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipv4InterfaceReasmMaxSize_get(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx,
+ long *ipv4InterfaceReasmMaxSize_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipv4InterfaceReasmMaxSize_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceReasmMaxSize_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (!
+ (rowreq_ctx->data.ifentry->
+ ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_V4_REASMMAX))
+ return MFD_SKIP;
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipv4InterfaceReasmMaxSize data.
+ * copy (* ipv4InterfaceReasmMaxSize_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipv4InterfaceReasmMaxSize_val_ptr) =
+ rowreq_ctx->data.ipv4InterfaceReasmMaxSize;
+
+ return MFD_SUCCESS;
+} /* ipv4InterfaceReasmMaxSize_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipv4InterfaceEntry.ipv4InterfaceEnableStatus
+ * ipv4InterfaceEnableStatus is subid 3 of ipv4InterfaceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.4.28.1.3
+ * Description:
+The indication of whether IPv4 is enabled (up) or disabled
+ (down) on this interface. This object does not affect the
+ state of the interface itself, only its connection to an
+ IPv4 stack. The IF-MIB should be used to control the state
+ of the interface.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: up(1), down(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipv4InterfaceEnableStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipv4InterfaceEnableStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipv4InterfaceEnableStatus_get(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipv4InterfaceEnableStatus_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipv4InterfaceEnableStatus_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceEnableStatus_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipv4InterfaceEnableStatus data.
+ * copy (* ipv4InterfaceEnableStatus_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipv4InterfaceEnableStatus_val_ptr) =
+ rowreq_ctx->data.ipv4InterfaceEnableStatus;
+
+ return MFD_SUCCESS;
+} /* ipv4InterfaceEnableStatus_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipv4InterfaceEntry.ipv4InterfaceRetransmitTime
+ * ipv4InterfaceRetransmitTime is subid 4 of ipv4InterfaceEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.28.1.4
+ * Description:
+The time between retransmissions of ARP requests to a
+ neighbor when resolving the address or when probing the
+ reachability of a neighbor.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ * defval: 1000
+ *
+ *
+ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
+ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipv4InterfaceRetransmitTime data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipv4InterfaceRetransmitTime_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipv4InterfaceRetransmitTime_get(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx,
+ u_long *
+ ipv4InterfaceRetransmitTime_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipv4InterfaceRetransmitTime_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceRetransmitTime_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (!
+ (rowreq_ctx->data.ifentry->
+ ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_V4_RETRANSMIT))
+ return MFD_SKIP;
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipv4InterfaceRetransmitTime data.
+ * copy (* ipv4InterfaceRetransmitTime_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipv4InterfaceRetransmitTime_val_ptr) =
+ rowreq_ctx->data.ipv4InterfaceRetransmitTime;
+
+ return MFD_SUCCESS;
+} /* ipv4InterfaceRetransmitTime_get */
+
+
+
+/** @} */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv4InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipv4InterfaceTable is subid 28 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.28, length: 8
+ */
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * ipv4InterfaceTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * ipv4InterfaceTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipv4InterfaceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ipv4InterfaceTable_undo_setup(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_undo_setup",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> Setup ipv4InterfaceTable undo.
+ * set up ipv4InterfaceTable undo information, in preparation for a set.
+ * Undo storage is in (* ipv4InterfaceRetransmitTime_val_ptr )*
+ */
+
+ return rc;
+} /* ipv4InterfaceTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipv4InterfaceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ipv4InterfaceTable_undo(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_undo",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> ipv4InterfaceTable undo.
+ * ipv4InterfaceTable undo information, in response to a failed set.
+ * Undo storage is in (* ipv4InterfaceRetransmitTime_val_ptr )*
+ */
+
+ return rc;
+} /* ipv4InterfaceTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipv4InterfaceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ipv4InterfaceTable_undo_cleanup(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_undo_cleanup", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:452:M: |-> Cleanup ipv4InterfaceTable undo.
+ * Undo storage is in (* ipv4InterfaceRetransmitTime_val_ptr )*
+ */
+
+ return rc;
+} /* ipv4InterfaceTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ipv4InterfaceTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ipv4InterfaceTable_commit(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_commit",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit ipv4InterfaceTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_IPV4INTERFACEENABLESTATUS_FLAG) {
+ save_flags &= ~COLUMN_IPV4INTERFACEENABLESTATUS_FLAG; /* clear ipv4InterfaceEnableStatus */
+ /*
+ * TODO:482:o: |-> commit column ipv4InterfaceEnableStatus.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ipv4InterfaceTable column ipv4InterfaceEnableStatus commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ipv4InterfaceEnableStatus
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_IPV4INTERFACEENABLESTATUS_FLAG;
+ }
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* ipv4InterfaceTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ipv4InterfaceTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ipv4InterfaceTable_undo_commit(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_undo_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:485:M: |-> Undo ipv4InterfaceTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* ipv4InterfaceTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement ipv4InterfaceTable node value checks.
+ * TODO:450:M: Implement ipv4InterfaceTable undo functions.
+ * TODO:460:M: Implement ipv4InterfaceTable set functions.
+ * TODO:480:M: Implement ipv4InterfaceTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * IP-MIB::ipv4InterfaceEntry.ipv4InterfaceEnableStatus
+ * ipv4InterfaceEnableStatus is subid 3 of ipv4InterfaceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.4.28.1.3
+ * Description:
+The indication of whether IPv4 is enabled (up) or disabled
+ (down) on this interface. This object does not affect the
+ state of the interface itself, only its connection to an
+ IPv4 stack. The IF-MIB should be used to control the state
+ of the interface.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: up(1), down(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipv4InterfaceEnableStatus_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipv4InterfaceTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of up(1), down(2)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipv4InterfaceEnableStatus_check_value(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipv4InterfaceEnableStatus_val)
+{
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceEnableStatus_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipv4InterfaceEnableStatus value.
+ */
+ /*
+ * did the access code set the flag indicating that we can control
+ * individual protocols on this interface?
+ */
+ if (rowreq_ctx->data.ifentry->ns_flags &
+ NETSNMP_INTERFACE_FLAGS_CAN_DOWN_PROTOCOL);
+ else
+ return MFD_NOT_VALID_EVER;
+
+ return MFD_SUCCESS; /* ipv4InterfaceEnableStatus value not illegal */
+} /* ipv4InterfaceEnableStatus_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipv4InterfaceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipv4InterfaceTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipv4InterfaceEnableStatus_undo_setup(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceEnableStatus_undo_setup", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipv4InterfaceEnableStatus undo.
+ */
+ /*
+ * copy ipv4InterfaceEnableStatus data
+ * set rowreq_ctx->undo->ipv4InterfaceEnableStatus from rowreq_ctx->data.ipv4InterfaceEnableStatus
+ */
+ rowreq_ctx->undo->ipv4InterfaceEnableStatus =
+ rowreq_ctx->data.ipv4InterfaceEnableStatus;
+
+
+ return MFD_SUCCESS;
+} /* ipv4InterfaceEnableStatus_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipv4InterfaceEnableStatus_val
+ * A long containing the new value.
+ */
+int
+ipv4InterfaceEnableStatus_set(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx,
+ u_long ipv4InterfaceEnableStatus_val)
+{
+
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceEnableStatus_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipv4InterfaceEnableStatus value.
+ * set ipv4InterfaceEnableStatus value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.ipv4InterfaceEnableStatus =
+ ipv4InterfaceEnableStatus_val;
+
+ return MFD_SUCCESS;
+} /* ipv4InterfaceEnableStatus_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipv4InterfaceEnableStatus_undo(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceEnableStatus_undo", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipv4InterfaceEnableStatus undo.
+ */
+ /*
+ * copy ipv4InterfaceEnableStatus data
+ * set rowreq_ctx->data.ipv4InterfaceEnableStatus from rowreq_ctx->undo->ipv4InterfaceEnableStatus
+ */
+ rowreq_ctx->data.ipv4InterfaceEnableStatus =
+ rowreq_ctx->undo->ipv4InterfaceEnableStatus;
+
+
+ return MFD_SUCCESS;
+} /* ipv4InterfaceEnableStatus_undo */
+
+/** @} */
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.h
new file mode 100644
index 0000000000..84dfcedeae
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable.h
@@ -0,0 +1,275 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ipv4InterfaceTable.h 15205 2006-09-14 17:15:32Z rstory $
+ */
+#ifndef IPV4INTERFACETABLE_H
+#define IPV4INTERFACETABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+#include <net-snmp/data_access/interface.h>
+
+#include "if-mib/ifTable/ifTable.h"
+
+ /*
+ * other required module components
+ */
+ /* *INDENT-OFF* */
+config_require(if-mib/ifTable/ifTable)
+config_require(ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface)
+config_require(ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_data_access)
+ /* *INDENT-ON* */
+
+ /*
+ * OID, column number and enum definions for ipv4InterfaceTable
+ */
+#include "ipv4InterfaceTable_constants.h"
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+ void init_ipv4InterfaceTable(void);
+ void shutdown_ipv4InterfaceTable(void);
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv4InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipv4InterfaceTable is subid 28 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.28, length: 8
+ *
+ * we share data structures (data too, in fact) with ifTable
+ */
+ typedef ifTable_registration ipv4InterfaceTable_registration;
+ typedef ifTable_data ipv4InterfaceTable_data;
+ typedef ifTable_undo_data ipv4InterfaceTable_undo_data;
+ typedef ifTable_mib_index ipv4InterfaceTable_mib_index;
+ typedef ifTable_rowreq_ctx ipv4InterfaceTable_rowreq_ctx;
+
+ /*
+ * ipv4InterfaceReasmMaxSize(2)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+#define ipv4InterfaceReasmMaxSize ifentry->reasm_max_v4
+
+ /*
+ * ipv4InterfaceEnableStatus(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+#define ipv4InterfaceEnableStatus ifentry->admin_status
+
+ /*
+ * ipv4InterfaceRetransmitTime(4)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/D/h
+ */
+#define ipv4InterfaceRetransmitTime ifentry->retransmit_v4
+
+
+ /*
+ *********************************************************************
+ * function prototypes
+ */
+ int
+ ipv4InterfaceTable_pre_request(ipv4InterfaceTable_registration *
+ user_context);
+ int
+ ipv4InterfaceTable_post_request(ipv4InterfaceTable_registration *
+ user_context, int rc);
+
+ int
+ ipv4InterfaceTable_rowreq_ctx_init(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ void *user_init_ctx);
+ void
+ ipv4InterfaceTable_rowreq_ctx_cleanup(ipv4InterfaceTable_rowreq_ctx
+ * rowreq_ctx);
+
+ int ipv4InterfaceTable_commit(ipv4InterfaceTable_rowreq_ctx
+ * rowreq_ctx);
+ ipv4InterfaceTable_rowreq_ctx
+ * ipv4InterfaceTable_row_find_by_mib_index
+ (ipv4InterfaceTable_mib_index * mib_idx);
+
+ extern oid ipv4InterfaceTable_oid[];
+ extern int ipv4InterfaceTable_oid_size;
+
+
+#include "ipv4InterfaceTable_interface.h"
+#include "ipv4InterfaceTable_data_access.h"
+ /*
+ *********************************************************************
+ * GET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv4InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipv4InterfaceTable is subid 28 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.28, length: 8
+ */
+ /*
+ * indexes
+ */
+
+ int
+ ipv4InterfaceReasmMaxSize_get(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx, long
+ *ipv4InterfaceReasmMaxSize_val_ptr);
+ int
+ ipv4InterfaceEnableStatus_get(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipv4InterfaceEnableStatus_val_ptr);
+ int
+ ipv4InterfaceRetransmitTime_get(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipv4InterfaceRetransmitTime_val_ptr);
+
+
+ int
+ ipv4InterfaceTable_indexes_set_tbl_idx(ipv4InterfaceTable_mib_index
+ * tbl_idx, long
+ ipv4InterfaceIfIndex_val);
+ int
+ ipv4InterfaceTable_indexes_set(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipv4InterfaceIfIndex_val);
+
+
+
+ /*
+ *********************************************************************
+ * SET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv4InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipv4InterfaceTable is subid 28 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.28, length: 8
+ */
+
+
+ int
+ ipv4InterfaceTable_undo_setup(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+ int
+ ipv4InterfaceTable_undo_cleanup(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipv4InterfaceTable_undo(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipv4InterfaceTable_commit(ipv4InterfaceTable_rowreq_ctx
+ * rowreq_ctx);
+ int
+ ipv4InterfaceTable_undo_commit(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+ int
+ ipv4InterfaceReasmMaxSize_check_value(ipv4InterfaceTable_rowreq_ctx
+ * rowreq_ctx, long
+ ipv4InterfaceReasmMaxSize_val);
+ int
+ ipv4InterfaceReasmMaxSize_undo_setup(ipv4InterfaceTable_rowreq_ctx
+ * rowreq_ctx);
+ int
+ ipv4InterfaceReasmMaxSize_set(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipv4InterfaceReasmMaxSize_val);
+ int
+ ipv4InterfaceReasmMaxSize_undo(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipv4InterfaceEnableStatus_check_value(ipv4InterfaceTable_rowreq_ctx
+ * rowreq_ctx,
+ u_long
+ ipv4InterfaceEnableStatus_val);
+ int
+ ipv4InterfaceEnableStatus_undo_setup(ipv4InterfaceTable_rowreq_ctx
+ * rowreq_ctx);
+ int
+ ipv4InterfaceEnableStatus_set(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ipv4InterfaceEnableStatus_val);
+ int
+ ipv4InterfaceEnableStatus_undo(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+ ipv4InterfaceRetransmitTime_check_value
+ (ipv4InterfaceTable_rowreq_ctx * rowreq_ctx,
+ u_long ipv4InterfaceRetransmitTime_val);
+ int
+ ipv4InterfaceRetransmitTime_undo_setup
+ (ipv4InterfaceTable_rowreq_ctx * rowreq_ctx);
+ int
+ ipv4InterfaceRetransmitTime_set(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ipv4InterfaceRetransmitTime_val);
+ int
+ ipv4InterfaceRetransmitTime_undo(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+ int
+ ipv4InterfaceTable_check_dependencies(ipv4InterfaceTable_rowreq_ctx
+ * ctx);
+
+
+ /*
+ * DUMMY markers, ignore
+ *
+ * TODO:099:x: *************************************************************
+ * TODO:199:x: *************************************************************
+ * TODO:299:x: *************************************************************
+ * TODO:399:x: *************************************************************
+ * TODO:499:x: *************************************************************
+ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPV4INTERFACETABLE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_constants.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_constants.h
new file mode 100644
index 0000000000..29095cd6ee
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_constants.h
@@ -0,0 +1,81 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-constants.m2c,v 1.5 2005/07/15 22:41:16 rstory Exp $
+ *
+ * $Id: ipv4InterfaceTable_constants.h 13897 2005-12-10 01:56:01Z rstory $
+ */
+#ifndef IPV4INTERFACETABLE_CONSTANTS_H
+#define IPV4INTERFACETABLE_CONSTANTS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ * column number definitions for table ipv4InterfaceTable
+ */
+#define IPV4INTERFACETABLE_OID 1,3,6,1,2,1,4,28
+#define IPV4INTERFACETABLELASTCHANGE_OID 1,3,6,1,2,1,4,27
+
+#define COLUMN_IPV4INTERFACEIFINDEX 1
+
+#define COLUMN_IPV4INTERFACEREASMMAXSIZE 2
+
+#define COLUMN_IPV4INTERFACEENABLESTATUS 3
+#define COLUMN_IPV4INTERFACEENABLESTATUS_FLAG (0x1 << 2)
+
+#define COLUMN_IPV4INTERFACERETRANSMITTIME 4
+
+
+#define IPV4INTERFACETABLE_MIN_COL COLUMN_IPV4INTERFACEREASMMAXSIZE
+#define IPV4INTERFACETABLE_MAX_COL COLUMN_IPV4INTERFACERETRANSMITTIME
+
+
+ /*
+ * TODO:405:r: Review IPV4INTERFACETABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define IPV4INTERFACETABLE_SETTABLE_COLS (COLUMN_IPV4INTERFACEENABLESTATUS_FLAG)
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table ipv4InterfaceTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipv4InterfaceEnableStatus (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IPV4INTERFACEENABLESTATUS_ENUMS
+#define IPV4INTERFACEENABLESTATUS_ENUMS
+
+#define IPV4INTERFACEENABLESTATUS_UP 1
+#define IPV4INTERFACEENABLESTATUS_DOWN 2
+
+#endif /* IPV4INTERFACEENABLESTATUS_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPV4INTERFACETABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_data_access.c
new file mode 100644
index 0000000000..72bb5ba463
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_data_access.c
@@ -0,0 +1,302 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ipv4InterfaceTable_data_access.c 15205 2006-09-14 17:15:32Z rstory $
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipv4InterfaceTable.h"
+
+
+#include "ipv4InterfaceTable_data_access.h"
+
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv4InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipv4InterfaceTable is subid 28 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.28, length: 8
+ */
+
+/**
+ * initialization for ipv4InterfaceTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param ipv4InterfaceTable_reg
+ * Pointer to ipv4InterfaceTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+ipv4InterfaceTable_init_data(ipv4InterfaceTable_registration *
+ ipv4InterfaceTable_reg)
+{
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_init_data",
+ "called\n"));
+
+ /*
+ * TODO:303:o: Initialize ipv4InterfaceTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* ipv4InterfaceTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+ipv4InterfaceTable_container_init(netsnmp_container **container_ptr_ptr)
+{
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_container_init", "called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,
+ "bad container param to ipv4InterfaceTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+} /* ipv4InterfaceTable_container_init */
+
+
+/**
+ * @internal
+ * determine if we want a ifTable row in our container
+ */
+void
+ipv4InterfaceTable_check_entry_for_updates(const ifTable_rowreq_ctx *
+ ift_rrc,
+ netsnmp_interface_entry *entry)
+{
+ netsnmp_container *c = ipv4InterfaceTable_container_get();
+ ifTable_rowreq_ctx *ip4if_rrc;
+ int changed = 0;
+
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:check_entry_for_updates",
+ "called\n"));
+
+ /*
+ * do we have a corresponding row?
+ */
+ ip4if_rrc = CONTAINER_FIND(c, ift_rrc);
+ if (NULL == ip4if_rrc) {
+ /*
+ * no corresponding row. should we have one?
+ */
+ if ((NULL != entry) &&
+ (entry->ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_IPV4)) {
+ /*
+ * yes.
+ */
+ DEBUGMSGTL(("ipv4InterfaceTable:check_entry_for_updates",
+ "inserted row for %d\n", entry->index));
+ CONTAINER_INSERT(c, ift_rrc);
+ changed = 1;
+ }
+ } else {
+ /*
+ * found corresponding row. is it still applicable?
+ */
+ if ((NULL == entry) ||
+ (0 == (entry->ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_IPV4))) {
+ /*
+ * no
+ */
+ DEBUGMSGTL(("ipv4InterfaceTable:check_entry_for_updates",
+ "removed row for %d\n",
+ ift_rrc->data.ifentry->index));
+ CONTAINER_REMOVE(c, ift_rrc);
+ changed = 1;
+ } else {
+ /*
+ * still applicable. anything changed?
+ */
+ if ((entry->retransmit_v4 !=
+ ift_rrc->data.ifentry->retransmit_v4) ||
+ (entry->reasm_max_v4 != ift_rrc->data.ifentry->reasm_max_v4)) {
+ DEBUGMSGTL(("ipv4InterfaceTable:check_entry_for_updates",
+ "row changed for %d\n",
+ ift_rrc->data.ifentry->index));
+ changed = 1;
+ }
+ }
+ }
+
+ /*
+ * if something changed, update table last changed
+ */
+ if (changed)
+ ipv4InterfaceTable_lastChange_set(netsnmp_get_agent_uptime());
+}
+
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before ipv4InterfaceTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+ipv4InterfaceTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_container_shutdown", "called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,
+ "bad params to ipv4InterfaceTable_container_shutdown\n");
+ return;
+ }
+
+} /* ipv4InterfaceTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement ipv4InterfaceTable data load
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * ipv4InterfaceTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+ipv4InterfaceTable_container_load(netsnmp_container *container)
+{
+ DEBUGMSGT(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_container_load", "illegal call!\n"));
+
+ return MFD_ERROR;
+} /* ipv4InterfaceTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+ipv4InterfaceTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_container_free", "called\n"));
+
+ /*
+ * TODO:380:M: Free ipv4InterfaceTable container data.
+ */
+} /* ipv4InterfaceTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+ipv4InterfaceTable_row_prep(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_row_prep",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* ipv4InterfaceTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_data_access.h
new file mode 100644
index 0000000000..821e37e392
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_data_access.h
@@ -0,0 +1,71 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ipv4InterfaceTable_data_access.h 13899 2005-12-10 01:58:09Z rstory $
+ */
+#ifndef IPV4INTERFACETABLE_DATA_ACCESS_H
+#define IPV4INTERFACETABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv4InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipv4InterfaceTable is subid 28 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.28, length: 8
+ */
+
+
+ int
+ ipv4InterfaceTable_init_data(ipv4InterfaceTable_registration *
+ ipv4InterfaceTable_reg);
+
+
+ void
+ ipv4InterfaceTable_container_init(netsnmp_container
+ **container_ptr_ptr);
+ void ipv4InterfaceTable_container_shutdown(netsnmp_container
+ *container_ptr);
+
+ int
+ ipv4InterfaceTable_container_load(netsnmp_container
+ *container);
+ void
+ ipv4InterfaceTable_container_free(netsnmp_container
+ *container);
+
+ int
+ ipv4InterfaceTable_row_prep(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+
+ void
+ ipv4InterfaceTable_check_entry_for_updates(const
+ ifTable_rowreq_ctx
+ * ift_rrc,
+ netsnmp_interface_entry
+ *entry);
+
+
+#ifdef __cplusplus
+ }
+#endif
+#endif /* IPV4INTERFACETABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.c
new file mode 100644
index 0000000000..d8b8dc4d0d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.c
@@ -0,0 +1,1308 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ipv4InterfaceTable_interface.c 14142 2006-01-15 19:55:17Z rstory $
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipv4InterfaceTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "ipv4InterfaceTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv4InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipv4InterfaceTable is subid 28 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.28, length: 8
+ */
+typedef struct ipv4InterfaceTable_interface_ctx_s {
+
+ netsnmp_container *container;
+
+ ipv4InterfaceTable_registration *user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_long last_changed;
+
+} ipv4InterfaceTable_interface_ctx;
+
+static ipv4InterfaceTable_interface_ctx ipv4InterfaceTable_if_ctx;
+
+static void
+ _ipv4InterfaceTable_container_init(ipv4InterfaceTable_interface_ctx *
+ if_ctx);
+static void
+ _ipv4InterfaceTable_container_shutdown(ipv4InterfaceTable_interface_ctx *
+ if_ctx);
+
+
+netsnmp_container *
+ipv4InterfaceTable_container_get(void)
+{
+ return ipv4InterfaceTable_if_ctx.container;
+}
+
+ipv4InterfaceTable_registration *
+ipv4InterfaceTable_registration_get(void)
+{
+ return ipv4InterfaceTable_if_ctx.user_ctx;
+}
+
+ipv4InterfaceTable_registration *
+ipv4InterfaceTable_registration_set(ipv4InterfaceTable_registration *
+ newreg)
+{
+ ipv4InterfaceTable_registration *old =
+ ipv4InterfaceTable_if_ctx.user_ctx;
+ ipv4InterfaceTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+ipv4InterfaceTable_container_size(void)
+{
+ return CONTAINER_SIZE(ipv4InterfaceTable_if_ctx.container);
+}
+
+u_int
+ipv4InterfaceTable_dirty_get(void)
+{
+ return ifTable_dirty_get();
+}
+
+void
+ipv4InterfaceTable_dirty_set(u_int status)
+{
+ ifTable_dirty_set(status);
+}
+
+/*
+ * ipv4InterfaceTableLastChanged, which is the last time that a row in
+ * the table was changed or the last time a row was added/deleted from the
+ * table.
+ */
+void
+ipv4InterfaceTable_lastChange_set(u_long table_changed)
+{
+ DEBUGMSGTL(("ipv4InterfaceTable:lastChanged_set",
+ "called. was %ld, now %ld\n",
+ ipv4InterfaceTable_if_ctx.last_changed, table_changed));
+ ipv4InterfaceTable_if_ctx.last_changed = table_changed;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_ipv4InterfaceTable_pre_request;
+static Netsnmp_Node_Handler _mfd_ipv4InterfaceTable_post_request;
+static Netsnmp_Node_Handler _mfd_ipv4InterfaceTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_ipv4InterfaceTable_get_values;
+static Netsnmp_Node_Handler _mfd_ipv4InterfaceTable_check_objects;
+static Netsnmp_Node_Handler _mfd_ipv4InterfaceTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_ipv4InterfaceTable_set_values;
+static Netsnmp_Node_Handler _mfd_ipv4InterfaceTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_ipv4InterfaceTable_undo_values;
+static Netsnmp_Node_Handler _mfd_ipv4InterfaceTable_commit;
+static Netsnmp_Node_Handler _mfd_ipv4InterfaceTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_ipv4InterfaceTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int
+ _ipv4InterfaceTable_undo_column(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list *
+ var, int column);
+
+ipv4InterfaceTable_data *ipv4InterfaceTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table ipv4InterfaceTable
+ * (Define its contents and how it's structured)
+ */
+void
+_ipv4InterfaceTable_initialize_interface(ipv4InterfaceTable_registration *
+ reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &ipv4InterfaceTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info =
+ &ipv4InterfaceTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_ipv4InterfaceTable_initialize_interface", "called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for ipv4InterfaceTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
+ /** index: ipv4InterfaceIfIndex */
+ 0);
+
+ /*
+ * Define the minimum and maximum accessible columns. This
+ * optimizes retrival.
+ */
+ tbl_info->min_column = IPV4INTERFACETABLE_MIN_COL;
+ tbl_info->max_column = IPV4INTERFACETABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ ipv4InterfaceTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ ipv4InterfaceTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _ipv4InterfaceTable_container_init(&ipv4InterfaceTable_if_ctx);
+ if (NULL == ipv4InterfaceTable_if_ctx.container) {
+ snmp_log(LOG_ERR,
+ "could not initialize container for ipv4InterfaceTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup =
+ _mfd_ipv4InterfaceTable_object_lookup;
+ access_multiplexer->get_values = _mfd_ipv4InterfaceTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_ipv4InterfaceTable_pre_request;
+ access_multiplexer->post_request =
+ _mfd_ipv4InterfaceTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks =
+ _mfd_ipv4InterfaceTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_ipv4InterfaceTable_undo_setup;
+ access_multiplexer->undo_cleanup =
+ _mfd_ipv4InterfaceTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_ipv4InterfaceTable_set_values;
+ access_multiplexer->undo_sets = _mfd_ipv4InterfaceTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_ipv4InterfaceTable_commit;
+ access_multiplexer->undo_commit = _mfd_ipv4InterfaceTable_undo_commit;
+ access_multiplexer->irreversible_commit =
+ _mfd_ipv4InterfaceTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("ipv4InterfaceTable:init_ipv4InterfaceTable",
+ "Registering ipv4InterfaceTable as a mibs-for-dummies table.\n"));
+ handler =
+ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo =
+ netsnmp_handler_registration_create("ipv4InterfaceTable", handler,
+ ipv4InterfaceTable_oid,
+ ipv4InterfaceTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE);
+ if (NULL == reginfo) {
+ snmp_log(LOG_ERR, "error registering table ipv4InterfaceTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &ipv4InterfaceTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if (access_multiplexer->object_lookup)
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if (access_multiplexer->set_values)
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if (access_multiplexer->irreversible_commit)
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if (access_multiplexer->object_syntax_checks)
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if (access_multiplexer->pre_request)
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if (access_multiplexer->post_request)
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if (access_multiplexer->undo_setup)
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if (access_multiplexer->undo_cleanup)
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if (access_multiplexer->undo_sets)
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if (access_multiplexer->row_creation)
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if (access_multiplexer->consistency_checks)
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if (access_multiplexer->commit)
+ mfd_modes |= BABY_STEP_COMMIT;
+ if (access_multiplexer->undo_commit)
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ ipv4InterfaceTable_if_ctx.
+ container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+ /*
+ * register LastChanged
+ */
+ {
+ oid lc_oid[] = { IPV4INTERFACETABLELASTCHANGE_OID };
+ netsnmp_register_watched_scalar(netsnmp_create_handler_registration
+ ("ipv4TableLastChanged", NULL,
+ lc_oid, OID_LENGTH(lc_oid),
+ HANDLER_CAN_RONLY),
+ netsnmp_create_watcher_info((void
+ *)
+ &ipv4InterfaceTable_if_ctx.
+ last_changed,
+ sizeof
+ (u_long),
+ ASN_TIMETICKS,
+ WATCHER_FIXED_SIZE));
+ }
+} /* _ipv4InterfaceTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table ipv4InterfaceTable
+ */
+void
+_ipv4InterfaceTable_shutdown_interface(ipv4InterfaceTable_registration *
+ reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _ipv4InterfaceTable_container_shutdown(&ipv4InterfaceTable_if_ctx);
+}
+
+void
+ipv4InterfaceTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ ipv4InterfaceTable_if_ctx.tbl_info.valid_columns = vc;
+} /* ipv4InterfaceTable_valid_columns_set */
+
+/*
+ * ipv4InterfaceTable_allocate_data
+ *
+ * Purpose: create new ipv4InterfaceTable_data.
+ */
+ipv4InterfaceTable_data *
+ipv4InterfaceTable_allocate_data(void)
+{
+ ipv4InterfaceTable_data *rtn =
+ SNMP_MALLOC_TYPEDEF(ipv4InterfaceTable_data);
+
+ DEBUGMSGTL(("verbose:ipv4InterfaceTable:ipv4InterfaceTable_allocate_data", "called\n"));
+
+ if (NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "ipv4InterfaceTable_data.\n");
+ }
+
+ return rtn;
+} /* ipv4InterfaceTable_allocate_data */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipv4InterfaceTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_pre_request", "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ipv4InterfaceTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = ipv4InterfaceTable_pre_request(ipv4InterfaceTable_if_ctx.
+ user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipv4InterfaceTable", "error %d from "
+ "ipv4InterfaceTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv4InterfaceTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipv4InterfaceTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipv4InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_post_request", "called\n"));
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ipv4InterfaceTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && ipv4InterfaceTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING,
+ "ipv4InterfaceTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = ipv4InterfaceTable_post_request(ipv4InterfaceTable_if_ctx.
+ user_ctx, packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipv4InterfaceTable", "error %d from "
+ "ipv4InterfaceTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv4InterfaceTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipv4InterfaceTable_object_lookup(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ ipv4InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_object_lookup", "called\n"));
+
+ /*
+ * get our context from mfd
+ * ipv4InterfaceTable_interface_ctx *if_ctx =
+ * (ipv4InterfaceTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if (NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ ipv4InterfaceTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_ipv4InterfaceTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipv4InterfaceTable_get_column(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_get_column", "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipv4InterfaceReasmMaxSize(2)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ case COLUMN_IPV4INTERFACEREASMMAXSIZE:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+ rc = ipv4InterfaceReasmMaxSize_get(rowreq_ctx,
+ (long *) var->val.string);
+ break;
+
+ /*
+ * ipv4InterfaceEnableStatus(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV4INTERFACEENABLESTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipv4InterfaceEnableStatus_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipv4InterfaceRetransmitTime(4)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/D/h
+ */
+ case COLUMN_IPV4INTERFACERETRANSMITTIME:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_UNSIGNED;
+ rc = ipv4InterfaceRetransmitTime_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipv4InterfaceTable_get_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ipv4InterfaceTable_get_column */
+
+int
+_mfd_ipv4InterfaceTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipv4InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ u_char *old_string;
+ void (*dataFreeHook) (void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_get_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if (NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ } else if (requests->requestvb->buf ==
+ requests->requestvb->val.string) {
+ if (requests->requestvb->val_len !=
+ sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipv4InterfaceTable_get_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ if (MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ } else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if (rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if (old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if (dataFreeHook)
+ (*dataFreeHook) (old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv4InterfaceTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipv4InterfaceTable_check_column(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx, netsnmp_variable_list * var,
+ int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_ipv4InterfaceTable_check_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+ /*
+ * (INDEX) ipv4InterfaceIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ case COLUMN_IPV4INTERFACEIFINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /*
+ * ipv4InterfaceReasmMaxSize(2)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ case COLUMN_IPV4INTERFACEREASMMAXSIZE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ipv4InterfaceEnableStatus(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV4INTERFACEENABLESTATUS:
+ rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
+ sizeof(rowreq_ctx->data.
+ ipv4InterfaceEnableStatus));
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (*var->val.integer != IPV4INTERFACEENABLESTATUS_UP)
+ && (*var->val.integer != IPV4INTERFACEENABLESTATUS_DOWN)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipv4InterfaceTable:_ipv4InterfaceTable_check_column:ipv4InterfaceEnableStatus", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipv4InterfaceEnableStatus_check_value(rowreq_ctx,
+ *((u_long *) var->
+ val.string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipv4InterfaceEnableStatus_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipv4InterfaceRetransmitTime(4)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/D/h
+ */
+ case COLUMN_IPV4INTERFACERETRANSMITTIME:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipv4InterfaceTable_check_column\n",
+ column);
+ }
+
+ return rc;
+} /* _ipv4InterfaceTable_check_column */
+
+int
+_mfd_ipv4InterfaceTable_check_objects(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipv4InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_check_objects", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipv4InterfaceTable_check_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv4InterfaceTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipv4InterfaceTable_undo_setup_column(ipv4InterfaceTable_rowreq_ctx *
+ rowreq_ctx, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_ipv4InterfaceTable_undo_setup_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipv4InterfaceEnableStatus(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV4INTERFACEENABLESTATUS:
+ rowreq_ctx->column_set_flags |=
+ COLUMN_IPV4INTERFACEENABLESTATUS_FLAG;
+ rc = ipv4InterfaceEnableStatus_undo_setup(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipv4InterfaceTable_undo_setup_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ipv4InterfaceTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_ipv4InterfaceTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipv4InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_undo_setup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rc = _mfd_ifTable_undo_setup_allocate(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ netsnmp_request_set_error_all(requests, rc);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rc = ipv4InterfaceTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipv4InterfaceTable:mfd", "error %d from "
+ "ipv4InterfaceTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ } else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info *tri;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipv4InterfaceTable_undo_setup_column(rowreq_ctx,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipv4InterfaceTable:mfd", "error %d from "
+ "ipv4InterfaceTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv4InterfaceTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_ipv4InterfaceTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipv4InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_undo_cleanup", "called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = ipv4InterfaceTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipv4InterfaceTable:mfd", "error %d from "
+ "ipv4InterfaceTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ _mfd_ifTable_undo_setup_release(rowreq_ctx);
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv4InterfaceTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipv4InterfaceTable_set_column(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_ipv4InterfaceTable_set_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipv4InterfaceEnableStatus(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV4INTERFACEENABLESTATUS:
+ rowreq_ctx->column_set_flags |=
+ COLUMN_IPV4INTERFACEENABLESTATUS_FLAG;
+ rc = ipv4InterfaceEnableStatus_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipv4InterfaceTable_set_column\n",
+ column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _ipv4InterfaceTable_set_column */
+
+int
+_mfd_ipv4InterfaceTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipv4InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_set_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipv4InterfaceTable_set_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipv4InterfaceTable:mfd", "error %d from "
+ "ipv4InterfaceTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv4InterfaceTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_ipv4InterfaceTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipv4InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ipv4InterfaceTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipv4InterfaceTable:mfd", "error %d from "
+ "ipv4InterfaceTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ ipv4InterfaceTable_dirty_set(ipv4InterfaceTable_dirty_get() + 1); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_ipv4InterfaceTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipv4InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_undo_commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = ipv4InterfaceTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if (d)
+ ipv4InterfaceTable_dirty_set(d - 1);
+ }
+
+ rc = ipv4InterfaceTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipv4InterfaceTable:mfd", "error %d from "
+ "ipv4InterfaceTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING,
+ "ipv4InterfaceTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv4InterfaceTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipv4InterfaceTable_undo_column(ipv4InterfaceTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_ipv4InterfaceTable_undo_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipv4InterfaceEnableStatus(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV4INTERFACEENABLESTATUS:
+ rc = ipv4InterfaceEnableStatus_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipv4InterfaceTable_undo_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ipv4InterfaceTable_undo_column */
+
+int
+_mfd_ipv4InterfaceTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipv4InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_undo_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ipv4InterfaceTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipv4InterfaceTable:mfd", "error %d from "
+ "ipv4InterfaceTable_undo\n", rc));
+ }
+
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipv4InterfaceTable_undo_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipv4InterfaceTable:mfd", "error %d from "
+ "ipv4InterfaceTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv4InterfaceTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_ipv4InterfaceTable_irreversible_commit(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipv4InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_mfd_ipv4InterfaceTable_irreversible:commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ CONTAINER_REMOVE(ipv4InterfaceTable_if_ctx.container, rowreq_ctx);
+ } else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv4InterfaceTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+/**
+ * @internal
+ */
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_container_free",
+ "called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR,
+ "invalid container in ipv4InterfaceTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ ipv4InterfaceTable_container_free(container);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_ipv4InterfaceTable_container_init(ipv4InterfaceTable_interface_ctx *
+ if_ctx)
+{
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_ipv4InterfaceTable_container_init", "called\n"));
+
+ /*
+ * container init
+ */
+ ipv4InterfaceTable_container_init(&if_ctx->container);
+ if (NULL == if_ctx->container)
+ if_ctx->container =
+ netsnmp_container_find("ipv4InterfaceTable:table_container");
+ if (NULL == if_ctx->container) {
+ snmp_log(LOG_ERR, "error creating container in "
+ "ipv4InterfaceTable_container_init\n");
+ return;
+ }
+
+} /* _ipv4InterfaceTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_ipv4InterfaceTable_container_shutdown(ipv4InterfaceTable_interface_ctx *
+ if_ctx)
+{
+ DEBUGMSGTL(("internal:ipv4InterfaceTable:_ipv4InterfaceTable_container_shutdown", "called\n"));
+
+ ipv4InterfaceTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _ipv4InterfaceTable_container_shutdown */
+
+
+ipv4InterfaceTable_rowreq_ctx *
+ipv4InterfaceTable_row_find_by_mib_index(ipv4InterfaceTable_mib_index *
+ mib_idx)
+{
+ ipv4InterfaceTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = ifTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx =
+ CONTAINER_FIND(ipv4InterfaceTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.h
new file mode 100644
index 0000000000..cdded1a4d4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.h
@@ -0,0 +1,106 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ipv4InterfaceTable_interface.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/** @ingroup interface Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef IPV4INTERFACETABLE_INTERFACE_H
+#define IPV4INTERFACETABLE_INTERFACE_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+#include "ipv4InterfaceTable.h"
+
+
+ /*
+ ********************************************************************
+ * Table declarations
+ */
+
+ /*
+ * PUBLIC interface initialization routine
+ */
+ void
+ _ipv4InterfaceTable_initialize_interface
+ (ipv4InterfaceTable_registration * user_ctx, u_long flags);
+ void
+ _ipv4InterfaceTable_shutdown_interface
+ (ipv4InterfaceTable_registration * user_ctx);
+
+ ipv4InterfaceTable_registration
+ * ipv4InterfaceTable_registration_get(void);
+
+ ipv4InterfaceTable_registration
+ * ipv4InterfaceTable_registration_set
+ (ipv4InterfaceTable_registration * newreg);
+
+ netsnmp_container *ipv4InterfaceTable_container_get(void);
+ int ipv4InterfaceTable_container_size(void);
+
+ u_int ipv4InterfaceTable_dirty_get(void);
+ void ipv4InterfaceTable_dirty_set(u_int status);
+
+ ipv4InterfaceTable_rowreq_ctx
+ * ipv4InterfaceTable_allocate_rowreq_ctx(void *);
+ void
+ ipv4InterfaceTable_release_rowreq_ctx
+ (ipv4InterfaceTable_rowreq_ctx * rowreq_ctx);
+
+ int ipv4InterfaceTable_index_to_oid(netsnmp_index *
+ oid_idx,
+ ipv4InterfaceTable_mib_index
+ * mib_idx);
+ int ipv4InterfaceTable_index_from_oid(netsnmp_index *
+ oid_idx,
+ ipv4InterfaceTable_mib_index
+ * mib_idx);
+
+ /*
+ * access to certain internals. use with caution!
+ */
+ void
+ ipv4InterfaceTable_valid_columns_set(netsnmp_column_info *vc);
+
+ /*
+ */
+ void ipv4InterfaceTable_lastChange_set(u_long uptime);
+
+
+#ifdef __cplusplus
+ }
+#endif
+#endif /* IPV4INTERFACETABLE_INTERFACE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_subagent.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_subagent.c
new file mode 100644
index 0000000000..3c85a548a8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_subagent.c
@@ -0,0 +1,202 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.7 $ of : subagent.m2c,v $
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipv4InterfaceTable.h"
+
+#include <signal.h>
+
+static int keep_running;
+
+static RETSIGTYPE
+stop_server(int a)
+{
+ keep_running = 0;
+}
+
+static void
+usage(void)
+{
+ printf
+ ("usage: ipv4InterfaceTable [-D<tokens>] [-f] [-L] [-M] [-H] [LISTENING ADDRESSES]\n"
+ "\t-f Do not fork() from the calling shell.\n"
+ "\t-DTOKEN[,TOKEN,...]\n"
+ "\t\tTurn on debugging output for the given TOKEN(s).\n"
+ "\t\tWithout any tokens specified, it defaults to printing\n"
+ "\t\tall the tokens (which is equivalent to the keyword 'ALL').\n"
+ "\t\tYou might want to try ALL for extremely verbose output.\n"
+ "\t\tNote: You can't put a space between the -D and the TOKENs.\n"
+ "\t-H\tDisplay a list of configuration file directives\n"
+ "\t\tunderstood by the agent and then exit.\n"
+ "\t-M\tRun as a normal SNMP Agent instead of an AgentX sub-agent.\n"
+ "\t-x ADDRESS\tconnect to master agent at ADDRESS (default NETSNMP_AGENTX_SOCKET).\n"
+ "\t-L\tDo not open a log file; print all messages to stderr.\n");
+ exit(0);
+}
+
+int
+main(int argc, char **argv)
+{
+ int agentx_subagent = 1; /* change this if you want to be a SNMP master agent */
+ /*
+ * Defs for arg-handling code: handles setting of policy-related variables
+ */
+ int ch;
+ extern char *optarg;
+ int dont_fork = 0, use_syslog = 0;
+ char *agentx_socket = NULL;
+
+ while ((ch = getopt(argc, argv, "D:fHLMx:")) != EOF)
+ switch (ch) {
+ case 'D':
+ debug_register_tokens(optarg);
+ snmp_set_do_debugging(1);
+ break;
+ case 'f':
+ dont_fork = 1;
+ break;
+ case 'H':
+ netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS, 1);
+ init_agent("ipv4InterfaceTable"); /* register our .conf handlers */
+ init_ipv4InterfaceTable();
+ init_snmp("ipv4InterfaceTable");
+ fprintf(stderr, "Configuration directives understood:\n");
+ read_config_print_usage(" ");
+ exit(0);
+ case 'M':
+ agentx_subagent = 0;
+ break;
+ case 'L':
+ use_syslog = 0; /* use stderr */
+ break;
+ case 'x':
+ agentx_socket = optarg;
+ break;
+ default:
+ fprintf(stderr, "unknown option %c\n", ch);
+ usage();
+ }
+
+ if (optind < argc) {
+ int i;
+ /*
+ * There are optional transport addresses on the command line.
+ */
+ DEBUGMSGTL(("snmpd/main", "optind %d, argc %d\n", optind, argc));
+ for (i = optind; i < argc; i++) {
+ char *c, *astring;
+ if ((c = netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_PORTS))) {
+ astring = malloc(strlen(c) + 2 + strlen(argv[i]));
+ if (astring == NULL) {
+ fprintf(stderr, "malloc failure processing argv[%d]\n",
+ i);
+ exit(1);
+ }
+ sprintf(astring, "%s,%s", c, argv[i]);
+ netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_PORTS, astring);
+ SNMP_FREE(astring);
+ } else {
+ netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_PORTS, argv[i]);
+ }
+ }
+ DEBUGMSGTL(("snmpd/main", "port spec: %s\n",
+ netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_PORTS)));
+ }
+
+ /*
+ * we're an agentx subagent?
+ */
+ if (agentx_subagent) {
+ /*
+ * make us a agentx client.
+ */
+ netsnmp_enable_subagent();
+ if (NULL != agentx_socket)
+ netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_X_SOCKET,
+ agentx_socket);
+ }
+
+ snmp_disable_log();
+ if (use_syslog)
+ snmp_enable_calllog();
+ else
+ snmp_enable_stderrlog();
+
+ /*
+ * daemonize
+ */
+ if (!dont_fork) {
+ int rc = netsnmp_daemonize(1, !use_syslog);
+ if (rc)
+ exit(-1);
+ }
+
+ /*
+ * initialize tcp/ip if necessary
+ */
+ SOCK_STARTUP;
+
+ /*
+ * initialize the agent library
+ */
+ init_agent("ipv4InterfaceTable");
+
+ /*
+ * init ipv4InterfaceTable mib code
+ */
+ init_ipv4InterfaceTable();
+
+ /*
+ * read ipv4InterfaceTable.conf files.
+ */
+ init_snmp("ipv4InterfaceTable");
+
+ /*
+ * If we're going to be a snmp master agent, initial the ports
+ */
+ if (!agentx_subagent)
+ init_master_agent(); /* open the port to listen on (defaults to udp:161) */
+
+ /*
+ * In case we recevie a request to stop (kill -TERM or kill -INT)
+ */
+ keep_running = 1;
+ signal(SIGTERM, stop_server);
+ signal(SIGINT, stop_server);
+
+ /*
+ * you're main loop here...
+ */
+ while (keep_running) {
+ /*
+ * if you use select(), see snmp_select_info() in snmp_api(3)
+ */
+ /*
+ * --- OR ---
+ */
+ agent_check_and_process(1); /* 0 == don't block */
+ }
+
+ /*
+ * at shutdown time
+ */
+ snmp_shutdown("ipv4InterfaceTable");
+ SOCK_CLEANUP;
+ exit(0);
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable.h
new file mode 100644
index 0000000000..471eaa0f40
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable.h
@@ -0,0 +1,5 @@
+/*
+ * module to include the modules
+ */
+
+config_require(ip-mib/ipv6InterfaceTable/ipv6InterfaceTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable.c
new file mode 100644
index 0000000000..abc08ada37
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable.c
@@ -0,0 +1,1418 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ipv6InterfaceTable.c 15946 2007-03-12 21:28:23Z dts12 $
+ */
+/** \page MFD helper for ipv6InterfaceTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipv6InterfaceTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "ipv6InterfaceTable_interface.h"
+
+oid ipv6InterfaceTable_oid[] = { IPV6INTERFACETABLE_OID };
+int ipv6InterfaceTable_oid_size =
+OID_LENGTH(ipv6InterfaceTable_oid);
+
+ipv6InterfaceTable_registration ipv6InterfaceTable_user_context;
+
+void initialize_table_ipv6InterfaceTable(void);
+void shutdown_table_ipv6InterfaceTable(void);
+
+
+/**
+ * Initializes the ipv6InterfaceTable module
+ */
+void
+init_ipv6InterfaceTable(void)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:init_ipv6InterfaceTable",
+ "called\n"));
+
+ /*
+ * TODO:300:o: Perform ipv6InterfaceTable one-time module initialization.
+ */
+
+ /*
+ * we depend on the ifTable, so we put our init in with it
+ * to guarantee order of execution.
+ */
+ init_ifTable();
+
+ /*
+ * last changed should be 0 at startup
+ */
+ ipv6InterfaceTable_lastChange_set(0);
+
+} /* init_ipv6InterfaceTable */
+
+/**
+ * Shut-down the ipv6InterfaceTable module (agent is exiting)
+ */
+void
+shutdown_ipv6InterfaceTable(void)
+{
+ if (should_init("ipv6InterfaceTable"))
+ shutdown_table_ipv6InterfaceTable();
+
+}
+
+/**
+ * Initialize the table ipv6InterfaceTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_ipv6InterfaceTable(void)
+{
+ ipv6InterfaceTable_registration *user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:initialize_table_ipv6InterfaceTable", "called\n"));
+
+ /*
+ * TODO:301:o: Perform ipv6InterfaceTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize ipv6InterfaceTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context =
+ netsnmp_create_data_list("ipv6InterfaceTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _ipv6InterfaceTable_initialize_interface(user_context, flags);
+} /* initialize_table_ipv6InterfaceTable */
+
+/**
+ * Shutdown the table ipv6InterfaceTable
+ */
+void
+shutdown_table_ipv6InterfaceTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _ipv6InterfaceTable_shutdown_interface
+ (&ipv6InterfaceTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+ipv6InterfaceTable_rowreq_ctx_init(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx, void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_rowreq_ctx_init", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra ipv6InterfaceTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ * @param rowreq_ctx
+ */
+void
+ipv6InterfaceTable_rowreq_ctx_cleanup(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_rowreq_ctx_cleanup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra ipv6InterfaceTable rowreq cleanup.
+ */
+} /* ipv6InterfaceTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ * @param user_context
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+ipv6InterfaceTable_pre_request(ipv6InterfaceTable_registration *
+ user_context)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_pre_request", "called\n"));
+
+ /*
+ * TODO:510:o: Perform ipv6InterfaceTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+ipv6InterfaceTable_post_request(ipv6InterfaceTable_registration *
+ user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_post_request", "called\n"));
+
+ /*
+ * TODO:511:o: Perform ipv6InterfaceTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (ipv6InterfaceTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ ipv6InterfaceTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceTable_post_request */
+
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv6InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipv6InterfaceTable is subid 30 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.30, length: 8
+ */
+
+/*
+ * ---------------------------------------------------------------------
+ * * TODO:200:r: Implement ipv6InterfaceTable data context functions.
+ */
+
+
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipv6InterfaceEntry.ipv6InterfaceReasmMaxSize
+ * ipv6InterfaceReasmMaxSize is subid 2 of ipv6InterfaceEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.30.1.2
+ * Description:
+The size of the largest IPv6 datagram which this entity can
+ re-assemble from incoming IPv6 fragmented datagrams received
+ on this interface.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 1500 - 65535;
+ *
+ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
+ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipv6InterfaceReasmMaxSize data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipv6InterfaceReasmMaxSize_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipv6InterfaceReasmMaxSize_get(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipv6InterfaceReasmMaxSize_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipv6InterfaceReasmMaxSize_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceReasmMaxSize_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (!
+ (rowreq_ctx->data.ifentry->
+ ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_V6_REASMMAX))
+ return MFD_SKIP;
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipv6InterfaceReasmMaxSize data.
+ * copy (* ipv6InterfaceReasmMaxSize_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipv6InterfaceReasmMaxSize_val_ptr) =
+ rowreq_ctx->data.ipv6InterfaceReasmMaxSize;
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceReasmMaxSize_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipv6InterfaceEntry.ipv6InterfaceIdentifier
+ * ipv6InterfaceIdentifier is subid 3 of ipv6InterfaceEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.30.1.3
+ * Description:
+The Interface Identifier for this interface. The Interface
+ Identifier is combined with an address prefix to form an
+ interface address.
+
+
+ By default, the Interface Identifier is auto-configured
+ according to the rules of the link type this interface is
+ attached to.
+
+
+ A zero length identifier may be used where appropriate. One
+ possible example is a loopback interface.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 0
+ * hint: 2x:
+ *
+ * Ranges: 0 - 8;
+ *
+ * Its syntax is Ipv6AddressIfIdentifierTC (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 8)
+ */
+/**
+ * Extract the current value of the ipv6InterfaceIdentifier data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipv6InterfaceIdentifier_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param ipv6InterfaceIdentifier_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by ipv6InterfaceIdentifier.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*ipv6InterfaceIdentifier_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update ipv6InterfaceIdentifier_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+ipv6InterfaceIdentifier_get(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ char **ipv6InterfaceIdentifier_val_ptr_ptr,
+ size_t
+ * ipv6InterfaceIdentifier_val_ptr_len_ptr)
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert((NULL != ipv6InterfaceIdentifier_val_ptr_ptr)
+ && (NULL != *ipv6InterfaceIdentifier_val_ptr_ptr));
+ netsnmp_assert(NULL != ipv6InterfaceIdentifier_val_ptr_len_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceIdentifier_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (!
+ (rowreq_ctx->data.ifentry->
+ ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_V6_IFID))
+ return MFD_SKIP;
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipv6InterfaceIdentifier data.
+ * copy (* ipv6InterfaceIdentifier_val_ptr_ptr ) data and (* ipv6InterfaceIdentifier_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for ipv6InterfaceIdentifier data
+ */
+ if ((NULL == (*ipv6InterfaceIdentifier_val_ptr_ptr)) ||
+ ((*ipv6InterfaceIdentifier_val_ptr_len_ptr) <
+ (rowreq_ctx->data.ipv6InterfaceIdentifier_len *
+ sizeof(rowreq_ctx->data.ipv6InterfaceIdentifier[0])))) {
+ /*
+ * allocate space for ipv6InterfaceIdentifier data
+ */
+ (*ipv6InterfaceIdentifier_val_ptr_ptr) =
+ malloc(rowreq_ctx->data.ipv6InterfaceIdentifier_len *
+ sizeof(rowreq_ctx->data.ipv6InterfaceIdentifier[0]));
+ if (NULL == (*ipv6InterfaceIdentifier_val_ptr_ptr)) {
+ snmp_log(LOG_ERR, "could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (*ipv6InterfaceIdentifier_val_ptr_len_ptr) =
+ rowreq_ctx->data.ipv6InterfaceIdentifier_len *
+ sizeof(rowreq_ctx->data.ipv6InterfaceIdentifier[0]);
+ memcpy((*ipv6InterfaceIdentifier_val_ptr_ptr),
+ rowreq_ctx->data.ipv6InterfaceIdentifier,
+ rowreq_ctx->data.ipv6InterfaceIdentifier_len *
+ sizeof(rowreq_ctx->data.ipv6InterfaceIdentifier[0]));
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceIdentifier_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipv6InterfaceEntry.ipv6InterfaceEnableStatus
+ * ipv6InterfaceEnableStatus is subid 5 of ipv6InterfaceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.4.30.1.5
+ * Description:
+The indication of whether IPv6 is enabled (up) or disabled
+ (down) on this interface. This object does not affect the
+ state of the interface itself, only its connection to an
+ IPv6 stack. The IF-MIB should be used to control the state
+ of the interface.
+
+
+ When this object is written the entity SHOULD save the
+ change to non-volatile storage and restore the object from
+ non-volatile storage upon re-initialization of the system.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: up(1), down(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipv6InterfaceEnableStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipv6InterfaceEnableStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipv6InterfaceEnableStatus_get(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipv6InterfaceEnableStatus_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipv6InterfaceEnableStatus_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceEnableStatus_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipv6InterfaceEnableStatus data.
+ * copy (* ipv6InterfaceEnableStatus_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipv6InterfaceEnableStatus_val_ptr) =
+ rowreq_ctx->data.ipv6InterfaceEnableStatus;
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceEnableStatus_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipv6InterfaceEntry.ipv6InterfaceReachableTime
+ * ipv6InterfaceReachableTime is subid 6 of ipv6InterfaceEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.30.1.6
+ * Description:
+The time a neighbor is considered reachable after receiving
+ a reachability confirmation.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
+ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipv6InterfaceReachableTime data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipv6InterfaceReachableTime_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipv6InterfaceReachableTime_get(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipv6InterfaceReachableTime_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipv6InterfaceReachableTime_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceReachableTime_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (!
+ (rowreq_ctx->data.ifentry->
+ ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_V6_REACHABLE))
+ return MFD_SKIP;
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipv6InterfaceReachableTime data.
+ * copy (* ipv6InterfaceReachableTime_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipv6InterfaceReachableTime_val_ptr) =
+ rowreq_ctx->data.ipv6InterfaceReachableTime;
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceReachableTime_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipv6InterfaceEntry.ipv6InterfaceRetransmitTime
+ * ipv6InterfaceRetransmitTime is subid 7 of ipv6InterfaceEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.2.1.4.30.1.7
+ * Description:
+The time between retransmissions of Neighbor Solicitation
+ messages to a neighbor when resolving the address or when
+ probing the reachability of a neighbor.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
+ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+ */
+/**
+ * Extract the current value of the ipv6InterfaceRetransmitTime data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipv6InterfaceRetransmitTime_val_ptr
+ * Pointer to storage for a u_long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipv6InterfaceRetransmitTime_get(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ u_long *
+ ipv6InterfaceRetransmitTime_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipv6InterfaceRetransmitTime_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceRetransmitTime_get", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (!
+ (rowreq_ctx->data.ifentry->
+ ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_V6_RETRANSMIT))
+ return MFD_SKIP;
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipv6InterfaceRetransmitTime data.
+ * copy (* ipv6InterfaceRetransmitTime_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipv6InterfaceRetransmitTime_val_ptr) =
+ rowreq_ctx->data.ipv6InterfaceRetransmitTime;
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceRetransmitTime_get */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipv6InterfaceEntry.ipv6InterfaceForwarding
+ * ipv6InterfaceForwarding is subid 8 of ipv6InterfaceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.4.30.1.8
+ * Description:
+The indication of whether this entity is acting as an IPv6
+ router on this interface with respect to the forwarding of
+ datagrams received by, but not addressed to, this entity.
+ IPv6 routers forward datagrams. IPv6 hosts do not (except
+ those source-routed via the host).
+
+
+
+
+
+ This object is constrained by ipv6IpForwarding and is
+ ignored if ipv6IpForwarding is set to notForwarding. Those
+ systems that do not provide per-interface control of the
+ forwarding function should set this object to forwarding for
+ all interfaces and allow the ipv6IpForwarding object to
+ control the forwarding capability.
+
+
+ When this object is written the entity SHOULD save the
+ change to non-volatile storage and restore the object from
+ non-volatile storage upon re-initialization of the system.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: forwarding(1), notForwarding(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the ipv6InterfaceForwarding data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipv6InterfaceForwarding_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+ipv6InterfaceForwarding_get(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ u_long * ipv6InterfaceForwarding_val_ptr)
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipv6InterfaceForwarding_val_ptr);
+
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceForwarding_get",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (!
+ (rowreq_ctx->data.ifentry->
+ ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_V6_FORWARDING))
+ return MFD_SKIP;
+
+ /*
+ * TODO:231:o: |-> Extract the current value of the ipv6InterfaceForwarding data.
+ * copy (* ipv6InterfaceForwarding_val_ptr ) from rowreq_ctx->data
+ */
+ (*ipv6InterfaceForwarding_val_ptr) =
+ rowreq_ctx->data.ipv6InterfaceForwarding;
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceForwarding_get */
+
+
+
+/** @} */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv6InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipv6InterfaceTable is subid 30 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.30, length: 8
+ */
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * ipv6InterfaceTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * ipv6InterfaceTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipv6InterfaceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ipv6InterfaceTable_undo_setup(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_undo_setup",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> Setup ipv6InterfaceTable undo.
+ * set up ipv6InterfaceTable undo information, in preparation for a set.
+ * Undo storage is in (* ipv6InterfaceForwarding_val_ptr )*
+ */
+
+ return rc;
+} /* ipv6InterfaceTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipv6InterfaceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+ipv6InterfaceTable_undo(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_undo",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:451:M: |-> ipv6InterfaceTable undo.
+ * ipv6InterfaceTable undo information, in response to a failed set.
+ * Undo storage is in (* ipv6InterfaceForwarding_val_ptr )*
+ */
+
+ return rc;
+} /* ipv6InterfaceTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipv6InterfaceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ipv6InterfaceTable_undo_cleanup(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_undo_cleanup", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:452:M: |-> Cleanup ipv6InterfaceTable undo.
+ * Undo storage is in (* ipv6InterfaceForwarding_val_ptr )*
+ */
+
+ return rc;
+} /* ipv6InterfaceTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ipv6InterfaceTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ipv6InterfaceTable_commit(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_commit",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit ipv6InterfaceTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_IPV6INTERFACEENABLESTATUS_FLAG) {
+ save_flags &= ~COLUMN_IPV6INTERFACEENABLESTATUS_FLAG; /* clear ipv6InterfaceEnableStatus */
+ /*
+ * TODO:482:o: |-> commit column ipv6InterfaceEnableStatus.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ipv6InterfaceTable column ipv6InterfaceEnableStatus commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ipv6InterfaceEnableStatus
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_IPV6INTERFACEENABLESTATUS_FLAG;
+ }
+ }
+
+ if (save_flags & COLUMN_IPV6INTERFACEFORWARDING_FLAG) {
+ save_flags &= ~COLUMN_IPV6INTERFACEFORWARDING_FLAG; /* clear ipv6InterfaceForwarding */
+ /*
+ * TODO:482:o: |-> commit column ipv6InterfaceForwarding.
+ */
+ rc = -1;
+ if (-1 == rc) {
+ snmp_log(LOG_ERR,
+ "ipv6InterfaceTable column ipv6InterfaceForwarding commit failed\n");
+ } else {
+ /*
+ * set flag, in case we need to undo ipv6InterfaceForwarding
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_IPV6INTERFACEFORWARDING_FLAG;
+ }
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* ipv6InterfaceTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * ipv6InterfaceTable.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+ipv6InterfaceTable_undo_commit(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_undo_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:485:M: |-> Undo ipv6InterfaceTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* ipv6InterfaceTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement ipv6InterfaceTable node value checks.
+ * TODO:450:M: Implement ipv6InterfaceTable undo functions.
+ * TODO:460:M: Implement ipv6InterfaceTable set functions.
+ * TODO:480:M: Implement ipv6InterfaceTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * IP-MIB::ipv6InterfaceEntry.ipv6InterfaceEnableStatus
+ * ipv6InterfaceEnableStatus is subid 5 of ipv6InterfaceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.4.30.1.5
+ * Description:
+The indication of whether IPv6 is enabled (up) or disabled
+ (down) on this interface. This object does not affect the
+ state of the interface itself, only its connection to an
+ IPv6 stack. The IF-MIB should be used to control the state
+ of the interface.
+
+
+ When this object is written the entity SHOULD save the
+ change to non-volatile storage and restore the object from
+ non-volatile storage upon re-initialization of the system.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: up(1), down(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipv6InterfaceEnableStatus_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipv6InterfaceTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of up(1), down(2)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipv6InterfaceEnableStatus_check_value(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipv6InterfaceEnableStatus_val)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceEnableStatus_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipv6InterfaceEnableStatus value.
+ */
+
+ return MFD_SUCCESS; /* ipv6InterfaceEnableStatus value not illegal */
+} /* ipv6InterfaceEnableStatus_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipv6InterfaceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipv6InterfaceTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipv6InterfaceEnableStatus_undo_setup(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceEnableStatus_undo_setup", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipv6InterfaceEnableStatus undo.
+ */
+ /*
+ * copy ipv6InterfaceEnableStatus data
+ * set rowreq_ctx->undo->ipv6InterfaceEnableStatus from rowreq_ctx->data.ipv6InterfaceEnableStatus
+ */
+ rowreq_ctx->undo->ipv6InterfaceEnableStatus =
+ rowreq_ctx->data.ipv6InterfaceEnableStatus;
+
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceEnableStatus_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipv6InterfaceEnableStatus_val
+ * A long containing the new value.
+ */
+int
+ipv6InterfaceEnableStatus_set(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ u_long ipv6InterfaceEnableStatus_val)
+{
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceEnableStatus_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipv6InterfaceEnableStatus value.
+ * set ipv6InterfaceEnableStatus value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.ipv6InterfaceEnableStatus =
+ ipv6InterfaceEnableStatus_val;
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceEnableStatus_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipv6InterfaceEnableStatus_undo(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceEnableStatus_undo", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipv6InterfaceEnableStatus undo.
+ */
+ /*
+ * copy ipv6InterfaceEnableStatus data
+ * set rowreq_ctx->data.ipv6InterfaceEnableStatus from rowreq_ctx->undo->ipv6InterfaceEnableStatus
+ */
+ rowreq_ctx->data.ipv6InterfaceEnableStatus =
+ rowreq_ctx->undo->ipv6InterfaceEnableStatus;
+
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceEnableStatus_undo */
+
+/*---------------------------------------------------------------------
+ * IP-MIB::ipv6InterfaceEntry.ipv6InterfaceForwarding
+ * ipv6InterfaceForwarding is subid 8 of ipv6InterfaceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.2.1.4.30.1.8
+ * Description:
+The indication of whether this entity is acting as an IPv6
+ router on this interface with respect to the forwarding of
+ datagrams received by, but not addressed to, this entity.
+ IPv6 routers forward datagrams. IPv6 hosts do not (except
+ those source-routed via the host).
+
+
+
+
+
+ This object is constrained by ipv6IpForwarding and is
+ ignored if ipv6IpForwarding is set to notForwarding. Those
+ systems that do not provide per-interface control of the
+ forwarding function should set this object to forwarding for
+ all interfaces and allow the ipv6IpForwarding object to
+ control the forwarding capability.
+
+
+ When this object is written the entity SHOULD save the
+ change to non-volatile storage and restore the object from
+ non-volatile storage upon re-initialization of the system.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: forwarding(1), notForwarding(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param ipv6InterfaceForwarding_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * ipv6InterfaceTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of forwarding(1), notForwarding(2)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+ipv6InterfaceForwarding_check_value(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipv6InterfaceForwarding_val)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceForwarding_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid ipv6InterfaceForwarding value.
+ */
+
+ return MFD_SUCCESS; /* ipv6InterfaceForwarding value not illegal */
+} /* ipv6InterfaceForwarding_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (ipv6InterfaceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * ipv6InterfaceTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+ipv6InterfaceForwarding_undo_setup(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceForwarding_undo_setup", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup ipv6InterfaceForwarding undo.
+ */
+ /*
+ * copy ipv6InterfaceForwarding data
+ * set rowreq_ctx->undo->ipv6InterfaceForwarding from rowreq_ctx->data.ipv6InterfaceForwarding
+ */
+ rowreq_ctx->undo->ipv6InterfaceForwarding =
+ rowreq_ctx->data.ipv6InterfaceForwarding;
+
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceForwarding_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param ipv6InterfaceForwarding_val
+ * A long containing the new value.
+ */
+int
+ipv6InterfaceForwarding_set(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ u_long ipv6InterfaceForwarding_val)
+{
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceForwarding_set",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set ipv6InterfaceForwarding value.
+ * set ipv6InterfaceForwarding value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.ipv6InterfaceForwarding = ipv6InterfaceForwarding_val;
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceForwarding_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+ipv6InterfaceForwarding_undo(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceForwarding_undo",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up ipv6InterfaceForwarding undo.
+ */
+ /*
+ * copy ipv6InterfaceForwarding data
+ * set rowreq_ctx->data.ipv6InterfaceForwarding from rowreq_ctx->undo->ipv6InterfaceForwarding
+ */
+ rowreq_ctx->data.ipv6InterfaceForwarding =
+ rowreq_ctx->undo->ipv6InterfaceForwarding;
+
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceForwarding_undo */
+
+/** @} */
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable.h
new file mode 100644
index 0000000000..3b2ef5cc17
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable.h
@@ -0,0 +1,970 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.48 $ of : mfd-top.m2c,v $
+ *
+ * $Id: ipv6InterfaceTable.h 15205 2006-09-14 17:15:32Z rstory $
+ */
+#ifndef IPV6INTERFACETABLE_H
+#define IPV6INTERFACETABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+#include <net-snmp/data_access/interface.h>
+
+#include "if-mib/ifTable/ifTable.h"
+
+ /*
+ * other required module components
+ */
+ /* *INDENT-OFF* */
+config_require(if-mib/ifTable/ifTable)
+config_require(ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface)
+config_require(ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_data_access)
+ /* *INDENT-ON* */
+
+ /*
+ * OID, column number and enum definions for ipv6InterfaceTable
+ */
+#include "ipv6InterfaceTable_constants.h"
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+ void init_ipv6InterfaceTable(void);
+ void shutdown_ipv6InterfaceTable(void);
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv6InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipv6InterfaceTable is subid 30 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.30, length: 8
+ *
+ * we share data structures (data too, in fact) with ifTable
+ */
+ typedef ifTable_registration ipv6InterfaceTable_registration;
+ typedef ifTable_data ipv6InterfaceTable_data;
+ typedef ifTable_undo_data ipv6InterfaceTable_undo_data;
+ typedef ifTable_mib_index ipv6InterfaceTable_mib_index;
+ typedef ifTable_rowreq_ctx ipv6InterfaceTable_rowreq_ctx;
+
+ /*
+ * ipv6InterfaceReasmMaxSize(2)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/R/d/h
+ */
+#define ipv6InterfaceReasmMaxSize ifentry->reasm_max_v6
+
+ /*
+ * ipv6InterfaceIdentifier(3)/Ipv6AddressIfIdentifierTC/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+ */
+
+#define ipv6InterfaceIdentifier ifentry->v6_if_id
+#define ipv6InterfaceIdentifier_len ifentry->v6_if_id_len
+
+ /*
+ * ipv6InterfaceEnableStatus(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+#define ipv6InterfaceEnableStatus ifentry->admin_status
+
+ /*
+ * ipv6InterfaceReachableTime(6)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+ */
+#define ipv6InterfaceReachableTime ifentry->reachable_time
+
+ /*
+ * ipv6InterfaceRetransmitTime(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+ */
+#define ipv6InterfaceRetransmitTime ifentry->retransmit_v6
+
+ /*
+ * ipv6InterfaceForwarding(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+#define ipv6InterfaceForwarding ifentry->forwarding_v6
+
+
+ /*
+ *********************************************************************
+ * function prototypes
+ */
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_pre_request(ipv6InterfaceTable_registration *
+ user_context);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_post_request(ipv6InterfaceTable_registration *
+ user_context, int rc);
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_rowreq_ctx_init(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ void *user_init_ctx);
+ void
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_rowreq_ctx_cleanup(ipv6InterfaceTable_rowreq_ctx
+ * rowreq_ctx);
+
+ int ipv6InterfaceTable_commit(ipv6InterfaceTable_rowreq_ctx
+ * rowreq_ctx);
+
+
+
+
+
+
+
+ ipv6InterfaceTable_rowreq_ctx
+ * ipv6InterfaceTable_row_find_by_mib_index
+ (ipv6InterfaceTable_mib_index * mib_idx);
+
+ extern oid ipv6InterfaceTable_oid[];
+ extern int ipv6InterfaceTable_oid_size;
+
+
+#include "ipv6InterfaceTable_interface.h"
+#include "ipv6InterfaceTable_data_access.h"
+ /*
+ *********************************************************************
+ * GET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv6InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipv6InterfaceTable is subid 30 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.30, length: 8
+ */
+ /*
+ * indexes
+ */
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceReasmMaxSize_get(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipv6InterfaceReasmMaxSize_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceIdentifier_get(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx, char
+ **ipv6InterfaceIdentifier_val_ptr_ptr,
+ size_t
+ *
+ ipv6InterfaceIdentifier_val_ptr_len_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceEnableStatus_get(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipv6InterfaceEnableStatus_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceReachableTime_get(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipv6InterfaceReachableTime_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceRetransmitTime_get(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipv6InterfaceRetransmitTime_val_ptr);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceForwarding_get(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipv6InterfaceForwarding_val_ptr);
+
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_indexes_set_tbl_idx(ipv6InterfaceTable_mib_index
+ * tbl_idx, long
+ ipv6InterfaceIfIndex_val);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_indexes_set(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ long ipv6InterfaceIfIndex_val);
+
+
+
+ /*
+ *********************************************************************
+ * SET function declarations
+ */
+
+ /*
+ *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv6InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipv6InterfaceTable is subid 30 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.30, length: 8
+ */
+
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_undo_setup(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_undo_cleanup(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipv6InterfaceTable_undo(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+ int ipv6InterfaceTable_commit(ipv6InterfaceTable_rowreq_ctx
+ * rowreq_ctx);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_undo_commit(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceReasmMaxSize_check_value(ipv6InterfaceTable_rowreq_ctx
+ * rowreq_ctx,
+ u_long
+ ipv6InterfaceReasmMaxSize_val);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceReasmMaxSize_undo_setup(ipv6InterfaceTable_rowreq_ctx
+ * rowreq_ctx);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceReasmMaxSize_set(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ipv6InterfaceReasmMaxSize_val);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceReasmMaxSize_undo(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceIdentifier_check_value(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx, char
+ *ipv6InterfaceIdentifier_val_ptr,
+ size_t
+ ipv6InterfaceIdentifier_val_ptr_len);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceIdentifier_undo_setup(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceIdentifier_set(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ char *ipv6InterfaceIdentifier_val_ptr,
+ size_t
+ ipv6InterfaceIdentifier_val_ptr_len);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceIdentifier_undo(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceEnableStatus_check_value(ipv6InterfaceTable_rowreq_ctx
+ * rowreq_ctx,
+ u_long
+ ipv6InterfaceEnableStatus_val);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceEnableStatus_undo_setup(ipv6InterfaceTable_rowreq_ctx
+ * rowreq_ctx);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceEnableStatus_set(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ipv6InterfaceEnableStatus_val);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceEnableStatus_undo(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceReachableTime_check_value
+ (ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ u_long ipv6InterfaceReachableTime_val);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceReachableTime_undo_setup(ipv6InterfaceTable_rowreq_ctx
+ * rowreq_ctx);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceReachableTime_set(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ipv6InterfaceReachableTime_val);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceReachableTime_undo(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceRetransmitTime_check_value
+ (ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ u_long ipv6InterfaceRetransmitTime_val);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceRetransmitTime_undo_setup
+ (ipv6InterfaceTable_rowreq_ctx * rowreq_ctx);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceRetransmitTime_set(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ipv6InterfaceRetransmitTime_val);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceRetransmitTime_undo(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceForwarding_check_value(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long
+ ipv6InterfaceForwarding_val);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceForwarding_undo_setup(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceForwarding_set(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipv6InterfaceForwarding_val);
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceForwarding_undo(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_check_dependencies(ipv6InterfaceTable_rowreq_ctx
+ * ctx);
+
+
+ /*
+ * DUMMY markers, ignore
+ *
+ * TODO:099:x: *************************************************************
+ * TODO:199:x: *************************************************************
+ * TODO:299:x: *************************************************************
+ * TODO:399:x: *************************************************************
+ * TODO:499:x: *************************************************************
+ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPV6INTERFACETABLE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_constants.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_constants.h
new file mode 100644
index 0000000000..bee70bdbad
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_constants.h
@@ -0,0 +1,104 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-constants.m2c,v 1.5 2005/07/15 22:41:16 rstory Exp $
+ *
+ * $Id: ipv6InterfaceTable_constants.h 13897 2005-12-10 01:56:01Z rstory $
+ */
+#ifndef IPV6INTERFACETABLE_CONSTANTS_H
+#define IPV6INTERFACETABLE_CONSTANTS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ * column number definitions for table ipv6InterfaceTable
+ */
+#define IPV6INTERFACETABLELASTCHANGE_OID 1,3,6,1,2,1,4,29
+#define IPV6INTERFACETABLE_OID 1,3,6,1,2,1,4,30
+
+#define COLUMN_IPV6INTERFACEIFINDEX 1
+
+#define COLUMN_IPV6INTERFACEREASMMAXSIZE 2
+
+#define COLUMN_IPV6INTERFACEIDENTIFIER 3
+
+#define COLUMN_IPV6INTERFACEENABLESTATUS 5
+#define COLUMN_IPV6INTERFACEENABLESTATUS_FLAG (0x1 << 4)
+
+#define COLUMN_IPV6INTERFACEREACHABLETIME 6
+
+#define COLUMN_IPV6INTERFACERETRANSMITTIME 7
+
+#define COLUMN_IPV6INTERFACEFORWARDING 8
+#define COLUMN_IPV6INTERFACEFORWARDING_FLAG (0x1 << 7)
+
+
+#define IPV6INTERFACETABLE_MIN_COL COLUMN_IPV6INTERFACEREASMMAXSIZE
+#define IPV6INTERFACETABLE_MAX_COL COLUMN_IPV6INTERFACEFORWARDING
+
+
+ /*
+ * TODO:405:r: Review IPV6INTERFACETABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define IPV6INTERFACETABLE_SETTABLE_COLS (COLUMN_IPV6INTERFACEENABLESTATUS_FLAG | COLUMN_IPV6INTERFACEFORWARDING_FLAG)
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table ipv6InterfaceTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipv6InterfaceEnableStatus (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IPV6INTERFACEENABLESTATUS_ENUMS
+#define IPV6INTERFACEENABLESTATUS_ENUMS
+
+#define IPV6INTERFACEENABLESTATUS_UP 1
+#define IPV6INTERFACEENABLESTATUS_DOWN 2
+
+#endif /* IPV6INTERFACEENABLESTATUS_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * ipv6InterfaceForwarding (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef IPV6INTERFACEFORWARDING_ENUMS
+#define IPV6INTERFACEFORWARDING_ENUMS
+
+#define IPV6INTERFACEFORWARDING_FORWARDING 1
+#define IPV6INTERFACEFORWARDING_NOTFORWARDING 2
+
+#endif /* IPV6INTERFACEFORWARDING_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPV6INTERFACETABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_data_access.c
new file mode 100644
index 0000000000..cf4568e94d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_data_access.c
@@ -0,0 +1,390 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ipv6InterfaceTable_data_access.c 15205 2006-09-14 17:15:32Z rstory $
+ */
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipv6InterfaceTable.h"
+
+
+#include "ipv6InterfaceTable_data_access.h"
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv6InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipv6InterfaceTable is subid 30 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.30, length: 8
+ */
+
+/**
+ * initialization for ipv6InterfaceTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param ipv6InterfaceTable_reg
+ * Pointer to ipv6InterfaceTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+ipv6InterfaceTable_init_data(ipv6InterfaceTable_registration *
+ ipv6InterfaceTable_reg)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_init_data",
+ "called\n"));
+
+ /*
+ * TODO:303:o: Initialize ipv6InterfaceTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+ipv6InterfaceTable_container_init(netsnmp_container **container_ptr_ptr)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_container_init", "called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,
+ "bad container param to ipv6InterfaceTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+} /* ipv6InterfaceTable_container_init */
+
+/**
+ * @internal
+ * determine if we want a ifTable row in our container
+ */
+void
+ipv6InterfaceTable_check_entry_for_updates(const ifTable_rowreq_ctx *
+ ift_rrc,
+ netsnmp_interface_entry *entry)
+{
+ netsnmp_container *c = ipv6InterfaceTable_container_get();
+ ifTable_rowreq_ctx *ip6if_rrc;
+ int changed = 0;
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:check_entry_for_updates",
+ "called\n"));
+
+ /*
+ * do we have a corresponding row?
+ */
+ ip6if_rrc = CONTAINER_FIND(c, ift_rrc);
+ if (NULL == ip6if_rrc) {
+ /*
+ * no corresponding row. should we have one?
+ */
+ if ((NULL != entry) &&
+ (entry->ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_IPV6)) {
+ /*
+ * yes.
+ */
+ DEBUGMSGTL(("ipv6InterfaceTable:check_entry_for_updates",
+ "inserted row for index %d\n", entry->index));
+ CONTAINER_INSERT(c, ift_rrc);
+ changed = 1;
+ }
+ } else {
+ /*
+ * found corresponding row. is it still applicable?
+ */
+ if ((NULL == entry) ||
+ (0 == (entry->ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_IPV6))) {
+ /*
+ * no
+ */
+ DEBUGMSGTL(("ipv6InterfaceTable:check_entry_for_updates",
+ "removed row for index %d\n",
+ ift_rrc->data.ifentry->index));
+ CONTAINER_REMOVE(c, ift_rrc);
+ changed = 1;
+ } else {
+ /*
+ * still applicable. anything changed?
+ */
+ if (/** retransmit */
+ ((entry->
+ ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_V6_RETRANSMIT)
+ && (entry->retransmit_v6 !=
+ ift_rrc->data.ifentry->retransmit_v6)) ||
+ /** reasm */
+ ((entry->
+ ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_V6_REASMMAX)
+ && (entry->reasm_max_v6 !=
+ ift_rrc->data.ifentry->reasm_max_v6)) ||
+ /** reachable time */
+ ((entry->
+ ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_V6_REACHABLE)
+ && (entry->reachable_time !=
+ ift_rrc->data.ifentry->reachable_time)) ||
+ /** if id */
+ ((entry->ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_V6_IFID)
+ &&
+ ((entry->v6_if_id_len !=
+ ift_rrc->data.ifentry->v6_if_id_len)
+ || (0 !=
+ memcmp(entry->v6_if_id,
+ ift_rrc->data.ifentry->v6_if_id,
+ entry->v6_if_id_len)))) ||
+ /** forwarding */
+ ((entry->
+ ns_flags & NETSNMP_INTERFACE_FLAGS_HAS_V6_FORWARDING)
+ && (entry->forwarding_v6 !=
+ ift_rrc->data.ifentry->forwarding_v6))) {
+ DEBUGMSGTL(("ipv6InterfaceTable:check_entry_for_updates",
+ "row changed for index %d\n",
+ ift_rrc->data.ifentry->index));
+ changed = 1;
+ }
+ }
+ }
+
+ /*
+ * if something changed, update table last changed
+ */
+ if (changed)
+ ipv6InterfaceTable_lastChange_set(netsnmp_get_agent_uptime());
+}
+
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before ipv6InterfaceTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+ipv6InterfaceTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_container_shutdown", "called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,
+ "bad params to ipv6InterfaceTable_container_shutdown\n");
+ return;
+ }
+
+} /* ipv6InterfaceTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement ipv6InterfaceTable data load
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * ipv6InterfaceTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+ipv6InterfaceTable_container_load(netsnmp_container *container)
+{
+ ipv6InterfaceTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * ipv6InterfaceIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ long ipv6InterfaceIfIndex;
+
+
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_container_load", "called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the ipv6InterfaceTable container.
+ * loop over your ipv6InterfaceTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ while (1) {
+ /*
+ * check for end of data; bail out if there is no more data
+ */
+ if (1)
+ break;
+
+ /*
+ * TODO:352:M: | |-> set indexes in new ipv6InterfaceTable rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = ipv6InterfaceTable_allocate_rowreq_ctx(NULL);
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if (MFD_SUCCESS !=
+ ipv6InterfaceTable_indexes_set(rowreq_ctx,
+ ipv6InterfaceIfIndex)) {
+ snmp_log(LOG_ERR,
+ "error setting index while loading "
+ "ipv6InterfaceTable data.\n");
+ ipv6InterfaceTable_release_rowreq_ctx(rowreq_ctx);
+ continue;
+ }
+
+ /*
+ * TODO:352:r: | |-> populate ipv6InterfaceTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * non-TRANSIENT data: no need to copy. set pointer to data
+ */
+
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT(container, rowreq_ctx);
+ ++count;
+ }
+
+ DEBUGMSGT(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_container_load", "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+ipv6InterfaceTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_container_free", "called\n"));
+
+ /*
+ * TODO:380:M: Free ipv6InterfaceTable container data.
+ */
+} /* ipv6InterfaceTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+ipv6InterfaceTable_row_prep(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:ipv6InterfaceTable:ipv6InterfaceTable_row_prep",
+ "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* ipv6InterfaceTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_data_access.h
new file mode 100644
index 0000000000..4ff94dc18b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_data_access.h
@@ -0,0 +1,92 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.17 $ of : mfd-data-access.m2c,v $
+ *
+ * $Id: ipv6InterfaceTable_data_access.h 13770 2005-12-01 20:54:19Z rstory $
+ */
+#ifndef IPV6INTERFACETABLE_DATA_ACCESS_H
+#define IPV6INTERFACETABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+ /*
+ *********************************************************************
+ * function declarations
+ */
+
+ /*
+ *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv6InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+ /*
+ * IP-MIB::ipv6InterfaceTable is subid 30 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.30, length: 8
+ */
+
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_init_data(ipv6InterfaceTable_registration *
+ ipv6InterfaceTable_reg);
+
+
+ void ipv6InterfaceTable_container_init(netsnmp_container
+ **container_ptr_ptr);
+ void ipv6InterfaceTable_container_shutdown(netsnmp_container
+ *container_ptr);
+
+ int ipv6InterfaceTable_container_load(netsnmp_container
+ *container);
+ void ipv6InterfaceTable_container_free(netsnmp_container
+ *container);
+
+ int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_row_prep(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPV6INTERFACETABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.c
new file mode 100644
index 0000000000..41a95f80df
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.c
@@ -0,0 +1,1390 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ipv6InterfaceTable_interface.c 15902 2007-02-27 13:36:15Z rstory $
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/*
+ * standard Net-SNMP includes
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/*
+ * include our parent header
+ */
+#include "ipv6InterfaceTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "ipv6InterfaceTable_interface.h"
+
+#include "if-mib/ifTable/ifTable.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table ipv6InterfaceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * IP-MIB::ipv6InterfaceTable is subid 30 of ip.
+ * Its status is Current.
+ * OID: .1.3.6.1.2.1.4.30, length: 8
+ */
+typedef struct ipv6InterfaceTable_interface_ctx_s {
+
+ netsnmp_container *container;
+
+ ipv6InterfaceTable_registration *user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_long last_changed;
+
+} ipv6InterfaceTable_interface_ctx;
+
+static ipv6InterfaceTable_interface_ctx ipv6InterfaceTable_if_ctx;
+
+static void
+ _ipv6InterfaceTable_container_init(ipv6InterfaceTable_interface_ctx *
+ if_ctx);
+static void
+ _ipv6InterfaceTable_container_shutdown(ipv6InterfaceTable_interface_ctx *
+ if_ctx);
+
+
+netsnmp_container *
+ipv6InterfaceTable_container_get(void)
+{
+ return ipv6InterfaceTable_if_ctx.container;
+}
+
+ipv6InterfaceTable_registration *
+ipv6InterfaceTable_registration_get(void)
+{
+ return ipv6InterfaceTable_if_ctx.user_ctx;
+}
+
+ipv6InterfaceTable_registration *
+ipv6InterfaceTable_registration_set(ipv6InterfaceTable_registration *
+ newreg)
+{
+ ipv6InterfaceTable_registration *old =
+ ipv6InterfaceTable_if_ctx.user_ctx;
+ ipv6InterfaceTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+ipv6InterfaceTable_container_size(void)
+{
+ return CONTAINER_SIZE(ipv6InterfaceTable_if_ctx.container);
+}
+
+u_int
+ipv6InterfaceTable_dirty_get(void)
+{
+ return ifTable_dirty_get();
+}
+
+void
+ipv6InterfaceTable_dirty_set(u_int status)
+{
+ ifTable_dirty_set(status);
+}
+
+/*
+ * ipv6InterfaceTableLastChanged, which is the last time that a row in
+ * the table was changed or the last time a row was added/deleted from the
+ * table.
+ */
+void
+ipv6InterfaceTable_lastChange_set(u_long table_changed)
+{
+ DEBUGMSGTL(("ipv6InterfaceTable:lastChanged_set",
+ "called. was %ld, now %ld\n",
+ ipv6InterfaceTable_if_ctx.last_changed, table_changed));
+ ipv6InterfaceTable_if_ctx.last_changed = table_changed;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_ipv6InterfaceTable_pre_request;
+static Netsnmp_Node_Handler _mfd_ipv6InterfaceTable_post_request;
+static Netsnmp_Node_Handler _mfd_ipv6InterfaceTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_ipv6InterfaceTable_get_values;
+static Netsnmp_Node_Handler _mfd_ipv6InterfaceTable_check_objects;
+static Netsnmp_Node_Handler _mfd_ipv6InterfaceTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_ipv6InterfaceTable_set_values;
+static Netsnmp_Node_Handler _mfd_ipv6InterfaceTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_ipv6InterfaceTable_undo_values;
+static Netsnmp_Node_Handler _mfd_ipv6InterfaceTable_commit;
+static Netsnmp_Node_Handler _mfd_ipv6InterfaceTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_ipv6InterfaceTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int
+ _ipv6InterfaceTable_undo_column(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list *
+ var, int column);
+
+/**
+ * @internal
+ * Initialize the table ipv6InterfaceTable
+ * (Define its contents and how it's structured)
+ */
+void
+_ipv6InterfaceTable_initialize_interface(ipv6InterfaceTable_registration *
+ reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &ipv6InterfaceTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info =
+ &ipv6InterfaceTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_ipv6InterfaceTable_initialize_interface", "called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for ipv6InterfaceTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
+ /** index: ipv6InterfaceIfIndex */
+ 0);
+
+ /*
+ * Define the minimum and maximum accessible columns. This
+ * optimizes retrival.
+ */
+ tbl_info->min_column = IPV6INTERFACETABLE_MIN_COL;
+ tbl_info->max_column = IPV6INTERFACETABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ ipv6InterfaceTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ ipv6InterfaceTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _ipv6InterfaceTable_container_init(&ipv6InterfaceTable_if_ctx);
+ if (NULL == ipv6InterfaceTable_if_ctx.container) {
+ snmp_log(LOG_ERR,
+ "could not initialize container for ipv6InterfaceTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup =
+ _mfd_ipv6InterfaceTable_object_lookup;
+ access_multiplexer->get_values = _mfd_ipv6InterfaceTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_ipv6InterfaceTable_pre_request;
+ access_multiplexer->post_request =
+ _mfd_ipv6InterfaceTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks =
+ _mfd_ipv6InterfaceTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_ipv6InterfaceTable_undo_setup;
+ access_multiplexer->undo_cleanup =
+ _mfd_ipv6InterfaceTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_ipv6InterfaceTable_set_values;
+ access_multiplexer->undo_sets = _mfd_ipv6InterfaceTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_ipv6InterfaceTable_commit;
+ access_multiplexer->undo_commit = _mfd_ipv6InterfaceTable_undo_commit;
+ access_multiplexer->irreversible_commit =
+ _mfd_ipv6InterfaceTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("ipv6InterfaceTable:init_ipv6InterfaceTable",
+ "Registering ipv6InterfaceTable as a mibs-for-dummies table.\n"));
+ handler =
+ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo =
+ netsnmp_handler_registration_create("ipv6InterfaceTable", handler,
+ ipv6InterfaceTable_oid,
+ ipv6InterfaceTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE);
+ if (NULL == reginfo) {
+ snmp_log(LOG_ERR, "error registering table ipv6InterfaceTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &ipv6InterfaceTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if (access_multiplexer->object_lookup)
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if (access_multiplexer->set_values)
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if (access_multiplexer->irreversible_commit)
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if (access_multiplexer->object_syntax_checks)
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if (access_multiplexer->pre_request)
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if (access_multiplexer->post_request)
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if (access_multiplexer->undo_setup)
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if (access_multiplexer->undo_cleanup)
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if (access_multiplexer->undo_sets)
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if (access_multiplexer->row_creation)
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if (access_multiplexer->consistency_checks)
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if (access_multiplexer->commit)
+ mfd_modes |= BABY_STEP_COMMIT;
+ if (access_multiplexer->undo_commit)
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ ipv6InterfaceTable_if_ctx.
+ container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+ /*
+ * register LastChanged
+ */
+ {
+ oid lc_oid[] = { IPV6INTERFACETABLELASTCHANGE_OID };
+ netsnmp_register_watched_scalar(netsnmp_create_handler_registration
+ ("ipv6TableLastChanged", NULL,
+ lc_oid, OID_LENGTH(lc_oid),
+ HANDLER_CAN_RONLY),
+ netsnmp_create_watcher_info((void
+ *)
+ &ipv6InterfaceTable_if_ctx.
+ last_changed,
+ sizeof
+ (u_long),
+ ASN_TIMETICKS,
+ WATCHER_FIXED_SIZE));
+ }
+} /* _ipv6InterfaceTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table ipv6InterfaceTable
+ */
+void
+_ipv6InterfaceTable_shutdown_interface(ipv6InterfaceTable_registration *
+ reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _ipv6InterfaceTable_container_shutdown(&ipv6InterfaceTable_if_ctx);
+}
+
+void
+ipv6InterfaceTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ ipv6InterfaceTable_if_ctx.tbl_info.valid_columns = vc;
+} /* ipv6InterfaceTable_valid_columns_set */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipv6InterfaceTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_mfd_ipv6InterfaceTable_pre_request", "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ipv6InterfaceTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = ipv6InterfaceTable_pre_request(ipv6InterfaceTable_if_ctx.
+ user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipv6InterfaceTable", "error %d from "
+ "ipv6InterfaceTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv6InterfaceTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipv6InterfaceTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_mfd_ipv6InterfaceTable_post_request", "called\n"));
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:ipv6InterfaceTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && ipv6InterfaceTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING,
+ "ipv6InterfaceTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = ipv6InterfaceTable_post_request(ipv6InterfaceTable_if_ctx.
+ user_ctx, packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipv6InterfaceTable", "error %d from "
+ "ipv6InterfaceTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv6InterfaceTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_ipv6InterfaceTable_object_lookup(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ ipv6InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_mfd_ipv6InterfaceTable_object_lookup", "called\n"));
+
+ /*
+ * get our context from mfd
+ * ipv6InterfaceTable_interface_ctx *if_ctx =
+ * (ipv6InterfaceTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if (NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ ipv6InterfaceTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_ipv6InterfaceTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipv6InterfaceTable_get_column(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_mfd_ipv6InterfaceTable_get_column", "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipv6InterfaceReasmMaxSize(2)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/R/d/h
+ */
+ case COLUMN_IPV6INTERFACEREASMMAXSIZE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_UNSIGNED;
+ rc = ipv6InterfaceReasmMaxSize_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipv6InterfaceIdentifier(3)/Ipv6AddressIfIdentifierTC/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+ */
+ case COLUMN_IPV6INTERFACEIDENTIFIER:
+ var->type = ASN_OCTET_STR;
+ rc = ipv6InterfaceIdentifier_get(rowreq_ctx,
+ (char **) &var->val.string,
+ &var->val_len);
+ break;
+
+ /*
+ * ipv6InterfaceEnableStatus(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV6INTERFACEENABLESTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipv6InterfaceEnableStatus_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipv6InterfaceReachableTime(6)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPV6INTERFACEREACHABLETIME:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_UNSIGNED;
+ rc = ipv6InterfaceReachableTime_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipv6InterfaceRetransmitTime(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPV6INTERFACERETRANSMITTIME:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_UNSIGNED;
+ rc = ipv6InterfaceRetransmitTime_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ /*
+ * ipv6InterfaceForwarding(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV6INTERFACEFORWARDING:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+ rc = ipv6InterfaceForwarding_get(rowreq_ctx,
+ (u_long *) var->val.string);
+ break;
+
+ default:
+ if (COLUMN_IPV6INTERFACEREASMMAXSIZE <= column && column <= COLUMN_IPV6INTERFACEFORWARDING) {
+ DEBUGMSGTL(("internal:${context}:_ipv6InterfaceTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipv6InterfaceTable_get_column\n",
+ column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _ipv6InterfaceTable_get_column */
+
+int
+_mfd_ipv6InterfaceTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipv6InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ u_char *old_string;
+ void (*dataFreeHook) (void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_mfd_ipv6InterfaceTable_get_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if (NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ } else if (requests->requestvb->buf ==
+ requests->requestvb->val.string) {
+ if (requests->requestvb->val_len !=
+ sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len =
+ sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipv6InterfaceTable_get_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ if (MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ } else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if (rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if (old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if (dataFreeHook)
+ (*dataFreeHook) (old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv6InterfaceTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipv6InterfaceTable_check_column(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx, netsnmp_variable_list * var,
+ int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_ipv6InterfaceTable_check_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+ /*
+ * (INDEX) ipv6InterfaceIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+ */
+ case COLUMN_IPV6INTERFACEIFINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /*
+ * ipv6InterfaceReasmMaxSize(2)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/R/d/h
+ */
+ case COLUMN_IPV6INTERFACEREASMMAXSIZE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ipv6InterfaceIdentifier(3)/Ipv6AddressIfIdentifierTC/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+ */
+ case COLUMN_IPV6INTERFACEIDENTIFIER:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ipv6InterfaceEnableStatus(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV6INTERFACEENABLESTATUS:
+ rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
+ sizeof(rowreq_ctx->data.
+ ipv6InterfaceEnableStatus));
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (*var->val.integer != IPV6INTERFACEENABLESTATUS_UP)
+ && (*var->val.integer != IPV6INTERFACEENABLESTATUS_DOWN)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipv6InterfaceTable:_ipv6InterfaceTable_check_column:ipv6InterfaceEnableStatus", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipv6InterfaceEnableStatus_check_value(rowreq_ctx,
+ *((u_long *) var->
+ val.string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipv6InterfaceEnableStatus_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /*
+ * ipv6InterfaceReachableTime(6)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPV6INTERFACEREACHABLETIME:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ipv6InterfaceRetransmitTime(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPV6INTERFACERETRANSMITTIME:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /*
+ * ipv6InterfaceForwarding(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV6INTERFACEFORWARDING:
+ rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
+ sizeof(rowreq_ctx->data.
+ ipv6InterfaceForwarding));
+ /*
+ * check that the value is one of defined enums
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && (*var->val.integer != IPV6INTERFACEFORWARDING_FORWARDING)
+ && (*var->val.integer != IPV6INTERFACEFORWARDING_NOTFORWARDING)
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if (SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("ipv6InterfaceTable:_ipv6InterfaceTable_check_column:ipv6InterfaceForwarding", "varbind validation failed (eg bad type or size)\n"));
+ } else {
+ rc = ipv6InterfaceForwarding_check_value(rowreq_ctx,
+ *((u_long *) var->val.
+ string));
+ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+ && (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR,
+ "bad rc %d from ipv6InterfaceForwarding_check_value\n",
+ rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipv6InterfaceTable_check_column\n",
+ column);
+ }
+
+ return rc;
+} /* _ipv6InterfaceTable_check_column */
+
+int
+_mfd_ipv6InterfaceTable_check_objects(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipv6InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_mfd_ipv6InterfaceTable_check_objects", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for (; requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipv6InterfaceTable_check_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv6InterfaceTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipv6InterfaceTable_undo_setup_column(ipv6InterfaceTable_rowreq_ctx *
+ rowreq_ctx, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_ipv6InterfaceTable_undo_setup_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipv6InterfaceEnableStatus(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV6INTERFACEENABLESTATUS:
+ rowreq_ctx->column_set_flags |=
+ COLUMN_IPV6INTERFACEENABLESTATUS_FLAG;
+ rc = ipv6InterfaceEnableStatus_undo_setup(rowreq_ctx);
+ break;
+
+ /*
+ * ipv6InterfaceForwarding(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV6INTERFACEFORWARDING:
+ rowreq_ctx->column_set_flags |=
+ COLUMN_IPV6INTERFACEFORWARDING_FLAG;
+ rc = ipv6InterfaceForwarding_undo_setup(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipv6InterfaceTable_undo_setup_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ipv6InterfaceTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_ipv6InterfaceTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipv6InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_mfd_ipv6InterfaceTable_undo_setup", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rc = _mfd_ifTable_undo_setup_allocate(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ netsnmp_request_set_error_all(requests,rc);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rc = ipv6InterfaceTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipv6InterfaceTable:mfd", "error %d from "
+ "ipv6InterfaceTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ } else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info *tri;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipv6InterfaceTable_undo_setup_column(rowreq_ctx,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipv6InterfaceTable:mfd", "error %d from "
+ "ipv6InterfaceTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv6InterfaceTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_ipv6InterfaceTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipv6InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_mfd_ipv6InterfaceTable_undo_cleanup", "called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = ipv6InterfaceTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipv6InterfaceTable:mfd", "error %d from "
+ "ipv6InterfaceTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ _mfd_ifTable_undo_setup_release(rowreq_ctx);
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv6InterfaceTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipv6InterfaceTable_set_column(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_ipv6InterfaceTable_set_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipv6InterfaceEnableStatus(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV6INTERFACEENABLESTATUS:
+ rowreq_ctx->column_set_flags |=
+ COLUMN_IPV6INTERFACEENABLESTATUS_FLAG;
+ rc = ipv6InterfaceEnableStatus_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ /*
+ * ipv6InterfaceForwarding(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV6INTERFACEFORWARDING:
+ rowreq_ctx->column_set_flags |=
+ COLUMN_IPV6INTERFACEFORWARDING_FLAG;
+ rc = ipv6InterfaceForwarding_set(rowreq_ctx,
+ *((u_long *) var->val.string));
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipv6InterfaceTable_set_column\n",
+ column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _ipv6InterfaceTable_set_column */
+
+int
+_mfd_ipv6InterfaceTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipv6InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_mfd_ipv6InterfaceTable_set_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipv6InterfaceTable_set_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipv6InterfaceTable:mfd", "error %d from "
+ "ipv6InterfaceTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests,
+ SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv6InterfaceTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_ipv6InterfaceTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipv6InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_mfd_ipv6InterfaceTable_commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ipv6InterfaceTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("ipv6InterfaceTable:mfd", "error %d from "
+ "ipv6InterfaceTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ ipv6InterfaceTable_dirty_set(ipv6InterfaceTable_dirty_get() + 1); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_ipv6InterfaceTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipv6InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_mfd_ipv6InterfaceTable_undo_commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = ipv6InterfaceTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if (d)
+ ipv6InterfaceTable_dirty_set(d - 1);
+ }
+
+ rc = ipv6InterfaceTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipv6InterfaceTable:mfd", "error %d from "
+ "ipv6InterfaceTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING,
+ "ipv6InterfaceTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv6InterfaceTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_ipv6InterfaceTable_undo_column(ipv6InterfaceTable_rowreq_ctx * rowreq_ctx,
+ netsnmp_variable_list * var, int column)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_ipv6InterfaceTable_undo_column", "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch (column) {
+
+ /*
+ * ipv6InterfaceEnableStatus(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV6INTERFACEENABLESTATUS:
+ rc = ipv6InterfaceEnableStatus_undo(rowreq_ctx);
+ break;
+
+ /*
+ * ipv6InterfaceForwarding(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ case COLUMN_IPV6INTERFACEFORWARDING:
+ rc = ipv6InterfaceForwarding_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "unknown column %d in _ipv6InterfaceTable_undo_column\n",
+ column);
+ break;
+ }
+
+ return rc;
+} /* _ipv6InterfaceTable_undo_column */
+
+int
+_mfd_ipv6InterfaceTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ ipv6InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info *tri;
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_mfd_ipv6InterfaceTable_undo_values", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = ipv6InterfaceTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipv6InterfaceTable:mfd", "error %d from "
+ "ipv6InterfaceTable_undo\n", rc));
+ }
+
+ for (; requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if (NULL == tri)
+ continue;
+
+ rc = _ipv6InterfaceTable_undo_column(rowreq_ctx,
+ requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("ipv6InterfaceTable:mfd", "error %d from "
+ "ipv6InterfaceTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv6InterfaceTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_ipv6InterfaceTable_irreversible_commit(netsnmp_mib_handler *handler, netsnmp_handler_registration
+ *reginfo, netsnmp_agent_request_info
+ *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ ipv6InterfaceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_mfd_ipv6InterfaceTable_irreversible:commit", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ CONTAINER_REMOVE(ipv6InterfaceTable_if_ctx.container, rowreq_ctx);
+ } else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_ipv6InterfaceTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_container_free",
+ "called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR,
+ "invalid container in ipv6InterfaceTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ ipv6InterfaceTable_container_free(container);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_ipv6InterfaceTable_container_init(ipv6InterfaceTable_interface_ctx *
+ if_ctx)
+{
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_ipv6InterfaceTable_container_init", "called\n"));
+
+ /*
+ * container init
+ */
+ ipv6InterfaceTable_container_init(&if_ctx->container);
+ if (NULL == if_ctx->container)
+ if_ctx->container =
+ netsnmp_container_find("ipv6InterfaceTable:table_container");
+ if (NULL == if_ctx->container) {
+ snmp_log(LOG_ERR, "error creating container in "
+ "ipv6InterfaceTable_container_init\n");
+ return;
+ }
+
+} /* _ipv6InterfaceTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_ipv6InterfaceTable_container_shutdown(ipv6InterfaceTable_interface_ctx *
+ if_ctx)
+{
+ DEBUGMSGTL(("internal:ipv6InterfaceTable:_ipv6InterfaceTable_container_shutdown", "called\n"));
+
+ ipv6InterfaceTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _ipv6InterfaceTable_container_shutdown */
+
+
+ipv6InterfaceTable_rowreq_ctx *
+ipv6InterfaceTable_row_find_by_mib_index(ipv6InterfaceTable_mib_index *
+ mib_idx)
+{
+ ipv6InterfaceTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = ifTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx =
+ CONTAINER_FIND(ipv6InterfaceTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.h
new file mode 100644
index 0000000000..1e91466363
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.h
@@ -0,0 +1,178 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 1.67 $ of : mfd-interface.m2c,v $
+ *
+ * $Id: ipv6InterfaceTable_interface.h 14169 2006-01-25 16:28:12Z dts12 $
+ */
+/** @ingroup interface Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef IPV6INTERFACETABLE_INTERFACE_H
+#define IPV6INTERFACETABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "ipv6InterfaceTable.h"
+
+
+ /*
+ ********************************************************************
+ * Table declarations
+ */
+
+ /*
+ * PUBLIC interface initialization routine
+ */
+ void
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ _ipv6InterfaceTable_initialize_interface
+ (ipv6InterfaceTable_registration * user_ctx, u_long flags);
+ void
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ _ipv6InterfaceTable_shutdown_interface
+ (ipv6InterfaceTable_registration * user_ctx);
+
+
+
+
+
+
+
+ ipv6InterfaceTable_registration
+ * ipv6InterfaceTable_registration_get(void);
+
+
+
+
+
+
+
+ ipv6InterfaceTable_registration
+ * ipv6InterfaceTable_registration_set
+ (ipv6InterfaceTable_registration * newreg);
+
+ netsnmp_container *ipv6InterfaceTable_container_get(void);
+ int ipv6InterfaceTable_container_size(void);
+
+ u_int ipv6InterfaceTable_dirty_get(void);
+ void ipv6InterfaceTable_dirty_set(u_int status);
+
+
+
+
+
+
+
+ ipv6InterfaceTable_rowreq_ctx
+ * ipv6InterfaceTable_allocate_rowreq_ctx(void *);
+ void
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_release_rowreq_ctx(ipv6InterfaceTable_rowreq_ctx
+ * rowreq_ctx);
+
+ int ipv6InterfaceTable_index_to_oid(netsnmp_index *
+ oid_idx,
+ ipv6InterfaceTable_mib_index
+ * mib_idx);
+ int ipv6InterfaceTable_index_from_oid(netsnmp_index *
+ oid_idx,
+ ipv6InterfaceTable_mib_index
+ * mib_idx);
+
+ /*
+ * access to certain internals. use with caution!
+ */
+ void
+
+
+
+
+
+
+
+
+
+
+ ipv6InterfaceTable_valid_columns_set(netsnmp_column_info *vc);
+
+ /*
+ */
+ void ipv6InterfaceTable_lastChange_set(u_long uptime);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* IPV6INTERFACETABLE_INTERFACE_H */
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/ipfwchains/README b/cleopatre/application/spidnetsnmp/agent/mibgroup/ipfwchains/README
new file mode 100644
index 0000000000..34088c119c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/ipfwchains/README
@@ -0,0 +1,4 @@
+Due to GPL restrictions in the most current version of the mib module,
+the ipfchains package is now distributed separately. You can get it
+from ftp://ftp.freesnmp.com/mirrors/ucd-snmp/contrib/ucd-ipchains.tar.gz
+instead.
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/kernel_sunos5.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/kernel_sunos5.c
new file mode 100644
index 0000000000..9bb515997f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/kernel_sunos5.c
@@ -0,0 +1,2031 @@
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+/*- This is a -*- C -*- compatible code file
+ *
+ * Code for SUNOS5_INSTRUMENTATION
+ *
+ * This file contains includes of standard and local system header files,
+ * includes of other application header files, global variable definitions,
+ * static variable definitions, static function prototypes, and function
+ * definitions.
+ *
+ * This file contains function to obtain statistics from SunOS 5.x kernel
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#ifdef solaris2
+/*-
+ * Includes of standard ANSI C header files
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+/*-
+ * Includes of system header files (wrapped in duplicate include prevention)
+ */
+
+#include <fcntl.h>
+#include <stropts.h>
+#include <sys/types.h>
+#include <kvm.h>
+#include <sys/fcntl.h>
+#include <kstat.h>
+#include <errno.h>
+#include <time.h>
+
+#include <sys/sockio.h>
+#include <sys/socket.h>
+#include <sys/stream.h>
+#include <sys/stropts.h>
+#include <sys/tihdr.h>
+#include <sys/tiuser.h>
+#include <sys/dlpi.h>
+#include <inet/common.h>
+#include <inet/mib2.h>
+#include <inet/ip.h>
+#include <net/if.h>
+#include <netinet/in.h>
+
+/*-
+ * Includes of local application header files
+ */
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "kernel_sunos5.h"
+
+kstat_ctl_t *kstat_fd = 0;
+
+/*-
+ * Global variable definitions (with initialization)
+ */
+
+/*-
+ * Static variable definitions (with initialization)
+ */
+
+static
+mibcache Mibcache[MIBCACHE_SIZE+1] = {
+ {MIB_SYSTEM, 0, (void *) -1, 0, 0, 0, 0},
+ {MIB_INTERFACES, 10 * sizeof(mib2_ifEntry_t), (void *) -1, 0, 30, 0,
+ 0},
+ {MIB_AT, 0, (void *) -1, 0, 0, 0, 0},
+ {MIB_IP, sizeof(mib2_ip_t), (void *) -1, 0, 60, 0, 0},
+ {MIB_IP_ADDR, 20 * sizeof(mib2_ipAddrEntry_t), (void *) -1, 0, 60, 0,
+ 0},
+ {MIB_IP_ROUTE, 200 * sizeof(mib2_ipRouteEntry_t), (void *) -1, 0, 30,
+ 0, 0},
+ {MIB_IP_NET, 100 * sizeof(mib2_ipNetToMediaEntry_t), (void *) -1, 0,
+ 300, 0, 0},
+ {MIB_ICMP, sizeof(mib2_icmp_t), (void *) -1, 0, 60, 0, 0},
+ {MIB_TCP, sizeof(mib2_tcp_t), (void *) -1, 0, 60, 0, 0},
+ {MIB_TCP_CONN, 1000 * sizeof(mib2_tcpConnEntry_t), (void *) -1, 0, 30,
+ 0, 0},
+ {MIB_UDP, sizeof(mib2_udp_t), (void *) -1, 0, 30, 0, 0},
+ {MIB_UDP_LISTEN, 1000 * sizeof(mib2_udpEntry_t), (void *) -1, 0, 30, 0,
+ 0},
+ {MIB_EGP, 0, (void *) -1, 0, 0, 0, 0},
+ {MIB_CMOT, 0, (void *) -1, 0, 0, 0, 0},
+ {MIB_TRANSMISSION, 0, (void *) -1, 0, 0, 0, 0},
+ {MIB_SNMP, 0, (void *) -1, 0, 0, 0, 0},
+#ifdef SOLARIS_HAVE_IPV6_MIB_SUPPORT
+ {MIB_IP6_ADDR, 20 * sizeof(mib2_ipv6AddrEntry_t), (void *)-1, 0, 30, 0, 0},
+ {MIB_TCP6_CONN, 1000 * sizeof(mib2_tcp6ConnEntry_t), (void *) -1, 0, 30,
+ 0, 0},
+ {MIB_UDP6_ENDPOINT, 1000 * sizeof(mib2_udp6Entry_t), (void *) -1, 0, 30,
+ 0, 0},
+#endif
+ {0},
+};
+
+static
+mibmap Mibmap[MIBCACHE_SIZE+1] = {
+ {MIB2_SYSTEM, 0,},
+ {MIB2_INTERFACES, 0,},
+ {MIB2_AT, 0,},
+ {MIB2_IP, 0,},
+ {MIB2_IP, MIB2_IP_20,},
+ {MIB2_IP, MIB2_IP_21,},
+ {MIB2_IP, MIB2_IP_22,},
+ {MIB2_ICMP, 0,},
+ {MIB2_TCP, 0,},
+ {MIB2_TCP, MIB2_TCP_13,},
+ {MIB2_UDP, 0,},
+ {MIB2_UDP, MIB2_UDP_5},
+ {MIB2_EGP, 0,},
+ {MIB2_CMOT, 0,},
+ {MIB2_TRANSMISSION, 0,},
+ {MIB2_SNMP, 0,},
+#ifdef SOLARIS_HAVE_IPV6_MIB_SUPPORT
+ {MIB2_IP6, MIB2_IP6_ADDR},
+ {MIB2_TCP6, MIB2_TCP6_CONN},
+ {MIB2_UDP6, MIB2_UDP6_ENTRY},
+#endif
+ {0},
+};
+
+static int sd = -2; /* /dev/arp stream descriptor. */
+
+/*-
+ * Static function prototypes (use void as argument type if there are none)
+ */
+
+static found_e
+getentry(req_e req_type, void *bufaddr, size_t len, size_t entrysize,
+ void *resp, int (*comp)(void *, void *), void *arg);
+
+static int
+getmib(int groupname, int subgroupname, void *statbuf, size_t size,
+ size_t entrysize, req_e req_type, void *resp, size_t *length,
+ int (*comp)(void *, void *), void *arg);
+
+static int
+getif(mib2_ifEntry_t *ifbuf, size_t size, req_e req_type, mib2_ifEntry_t *resp,
+ size_t *length, int (*comp)(void *, void *), void *arg);
+static void
+set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags,
+ int mtu);
+static int get_if_stats(mib2_ifEntry_t *ifp);
+
+#if defined(HAVE_IF_NAMEINDEX) && defined(NETSNMP_INCLUDE_IFTABLE_REWRITES)
+static int _dlpi_open(const char *devname);
+static int _dlpi_get_phys_address(int fd, char *paddr, int maxlen,
+ int *paddrlen);
+static int _dlpi_get_iftype(int fd, unsigned int *iftype);
+static int _dlpi_attach(int fd, int ppa);
+static int _dlpi_parse_devname(char *devname, int *ppap);
+#endif
+
+
+
+static int
+Name_cmp(void *, void *);
+
+static void
+init_mibcache_element(mibcache * cp);
+
+#define STREAM_DEV "/dev/arp"
+#define BUFSIZE 40960 /* Buffer for messages (should be modulo(pagesize) */
+
+/*-
+ * Function definitions
+ */
+
+#ifdef _STDC_COMPAT
+#ifdef __cplusplus
+extern "C" {
+#endif
+#endif
+
+/*
+ * I profiled snmpd using Quantify on a Solaris 7 box, and it turned out that
+ * the calls to time() in getMibstat() were taking 18% of the total execution
+ * time of snmpd when doing simple walks over the whole tree. I guess it must
+ * be difficult for Sun hardware to tell the time or something ;-). Anyway,
+ * this seemed like it was negating the point of having the cache, so I have
+ * changed the code so that it runs a periodic alarm to age the cache entries
+ * instead. The meaning of the cache_ttl and cache_time members has changed to
+ * support this. cache_ttl is now the value that cache_time gets reset to when
+ * we fetch a value from the kernel; cache_time then ticks down to zero in
+ * steps of period (see below). When it reaches zero, the cache entry is no
+ * longer valid and we fetch a new one. The effect of this is the same as the
+ * previous code, but more efficient (because it's not calling time() for every
+ * variable fetched) when you are walking the tables. jbpn, 20020226.
+ */
+
+static void
+kernel_sunos5_cache_age(unsigned int regnumber, void *data)
+{
+ int i = 0, period = (int)data;
+
+ for (i = 0; i < MIBCACHE_SIZE; i++) {
+ DEBUGMSGTL(("kernel_sunos5", "cache[%d] time %ld ttl %d\n", i,
+ Mibcache[i].cache_time, Mibcache[i].cache_ttl));
+ if (Mibcache[i].cache_time < period) {
+ Mibcache[i].cache_time = 0;
+ } else {
+ Mibcache[i].cache_time -= period;
+ }
+ }
+}
+
+void
+init_kernel_sunos5(void)
+{
+ static int creg = 0;
+ const int period = 30;
+ int alarm_id = 0;
+
+ if (creg == 0) {
+ alarm_id = snmp_alarm_register(5, NULL, kernel_sunos5_cache_age,
+ NULL);
+ DEBUGMSGTL(("kernel_sunos5", "registered alarm %d with period 5s\n",
+ alarm_id));
+ alarm_id = snmp_alarm_register(period, SA_REPEAT,
+ kernel_sunos5_cache_age,
+ (void *)period);
+ DEBUGMSGTL(("kernel_sunos5", "registered alarm %d with period %ds\n",
+ alarm_id, period));
+ ++creg;
+ }
+}
+
+/*
+ * Get various kernel statistics using undocumented Solaris kstat interface.
+ * We need it mainly for getting network interface statistics, although it is
+ * generic enough to be used for any purpose. It knows about kstat_headers
+ * module names and by the name of the statistics it tries to figure out the
+ * rest of necessary information. Returns 0 in case of success and < 0 if
+ * there were any errors.
+
+ *
+ * NOTE: To use this function correctly you have to know the actual type of the
+ * value to be returned, so you may build the test program, figure out the type
+ * and use it. Exposing kstat data types to upper layers doesn't seem to be
+ * reasonable. In any case I'd expect more reasonable kstat interface. :-(
+ */
+
+
+int
+getKstatInt(const char *classname, const char *statname,
+ const char *varname, int *value)
+{
+ kstat_ctl_t *ksc;
+ kstat_t *ks;
+ kid_t kid;
+ kstat_named_t *named;
+ int ret = -1; /* fail unless ... */
+
+ if (kstat_fd == 0) {
+ kstat_fd = kstat_open();
+ if (kstat_fd == 0) {
+ snmp_log_perror("kstat_open");
+ }
+ }
+ if ((ksc = kstat_fd) == NULL) {
+ goto Return;
+ }
+ ks = kstat_lookup(ksc, classname, -1, statname);
+ if (ks == NULL) {
+ DEBUGMSGTL(("kernel_sunos5", "class %s, stat %s not found\n",
+ classname ? classname : "NULL",
+ statname ? statname : "NULL"));
+ goto Return;
+ }
+ kid = kstat_read(ksc, ks, NULL);
+ if (kid == -1) {
+ DEBUGMSGTL(("kernel_sunos5", "cannot read class %s stats %s\n",
+ classname ? classname : "NULL", statname ? statname : "NULL"));
+ goto Return;
+ }
+ named = kstat_data_lookup(ks, varname);
+ if (named == NULL) {
+ DEBUGMSGTL(("kernel_sunos5", "no var %s for class %s stat %s\n",
+ varname, classname ? classname : "NULL",
+ statname ? statname : "NULL"));
+ goto Return;
+ }
+
+ ret = 0; /* maybe successful */
+ switch (named->data_type) {
+#ifdef KSTAT_DATA_INT32 /* Solaris 2.6 and up */
+ case KSTAT_DATA_INT32:
+ *value = named->value.i32;
+ break;
+ case KSTAT_DATA_UINT32:
+ *value = named->value.ui32;
+ break;
+ case KSTAT_DATA_INT64:
+ *value = named->value.i64;
+ break;
+ case KSTAT_DATA_UINT64:
+ *value = named->value.ui64;
+ break;
+#else
+ case KSTAT_DATA_LONG:
+ *value = named->value.l;
+ break;
+ case KSTAT_DATA_ULONG:
+ *value = named->value.ul;
+ break;
+ case KSTAT_DATA_LONGLONG:
+ *value = named->value.ll;
+ break;
+ case KSTAT_DATA_ULONGLONG:
+ *value = named->value.ull;
+ break;
+#endif
+ default:
+ snmp_log(LOG_ERR,
+ "non-int type in kstat data: \"%s\" \"%s\" \"%s\" %d\n",
+ classname ? classname : "NULL",
+ statname ? statname : "NULL",
+ varname ? varname : "NULL", named->data_type);
+ ret = -1; /* fail */
+ break;
+ }
+ Return:
+ return ret;
+}
+
+int
+getKstat(const char *statname, const char *varname, void *value)
+{
+ kstat_ctl_t *ksc;
+ kstat_t *ks, *kstat_data;
+ kstat_named_t *d;
+ size_t i, instance;
+ char module_name[64];
+ int ret;
+ u_longlong_t val; /* The largest value */
+ void *v;
+ static char buf[128];
+
+ if (value == NULL) { /* Pretty useless but ... */
+ v = (void *) &val;
+ } else {
+ v = value;
+ }
+
+ if (kstat_fd == 0) {
+ kstat_fd = kstat_open();
+ if (kstat_fd == 0) {
+ snmp_log_perror("kstat_open");
+ }
+ }
+ if ((ksc = kstat_fd) == NULL) {
+ ret = -10;
+ goto Return; /* kstat errors */
+ }
+ if (statname == NULL || varname == NULL) {
+ ret = -20;
+ goto Return;
+ }
+
+ /*
+ * First, get "kstat_headers" statistics. It should
+ * contain all available modules.
+ */
+
+ if ((ks = kstat_lookup(ksc, "unix", 0, "kstat_headers")) == NULL) {
+ ret = -10;
+ goto Return; /* kstat errors */
+ }
+ if (kstat_read(ksc, ks, NULL) <= 0) {
+ ret = -10;
+ goto Return; /* kstat errors */
+ }
+ kstat_data = ks->ks_data;
+
+ /*
+ * Now, look for the name of our stat in the headers buf
+ */
+ for (i = 0; i < ks->ks_ndata; i++) {
+ DEBUGMSGTL(("kernel_sunos5",
+ "module: %s instance: %d name: %s class: %s type: %d flags: %x\n",
+ kstat_data[i].ks_module, kstat_data[i].ks_instance,
+ kstat_data[i].ks_name, kstat_data[i].ks_class,
+ kstat_data[i].ks_type, kstat_data[i].ks_flags));
+ if (strcmp(statname, kstat_data[i].ks_name) == 0) {
+ strcpy(module_name, kstat_data[i].ks_module);
+ instance = kstat_data[i].ks_instance;
+ break;
+ }
+ }
+
+ if (i == ks->ks_ndata) {
+ ret = -1;
+ goto Return; /* Not found */
+ }
+
+ /*
+ * Get the named statistics
+ */
+ if ((ks = kstat_lookup(ksc, module_name, instance, statname)) == NULL) {
+ ret = -10;
+ goto Return; /* kstat errors */
+ }
+
+ if (kstat_read(ksc, ks, NULL) <= 0) {
+ ret = -10;
+ goto Return; /* kstat errors */
+ }
+ /*
+ * This function expects only name/value type of statistics, so if it is
+ * not the case return an error
+ */
+ if (ks->ks_type != KSTAT_TYPE_NAMED) {
+ ret = -2;
+ goto Return; /* Invalid stat type */
+ }
+
+ for (i = 0, d = KSTAT_NAMED_PTR(ks); i < ks->ks_ndata; i++, d++) {
+ DEBUGMSGTL(("kernel_sunos5", "variable: \"%s\" (type %d)\n",
+ d->name, d->data_type));
+
+ if (strcmp(d->name, varname) == 0) {
+ switch (d->data_type) {
+ case KSTAT_DATA_CHAR:
+ DEBUGMSGTL(("kernel_sunos5", "value: %s\n", d->value.c));
+ *(char **)v = buf;
+ buf[sizeof(buf)-1] = 0;
+ strncpy(buf, d->value.c, sizeof(buf)-1);
+ break;
+#ifdef KSTAT_DATA_INT32 /* Solaris 2.6 and up */
+ case KSTAT_DATA_INT32:
+ *(Counter *)v = d->value.i32;
+ DEBUGMSGTL(("kernel_sunos5", "value: %d\n", d->value.i32));
+ break;
+ case KSTAT_DATA_UINT32:
+ *(Counter *)v = d->value.ui32;
+ DEBUGMSGTL(("kernel_sunos5", "value: %u\n", d->value.ui32));
+ break;
+ case KSTAT_DATA_INT64:
+ *(int64_t *)v = d->value.i64;
+ DEBUGMSGTL(("kernel_sunos5", "value: %ld\n", d->value.i64));
+ break;
+ case KSTAT_DATA_UINT64:
+ *(uint64_t *)v = d->value.ui64;
+ DEBUGMSGTL(("kernel_sunos5", "value: %lu\n", d->value.ui64));
+ break;
+#else
+ case KSTAT_DATA_LONG:
+ *(Counter *)v = d->value.l;
+ DEBUGMSGTL(("kernel_sunos5", "value: %ld\n", d->value.l));
+ break;
+ case KSTAT_DATA_ULONG:
+ *(Counter *)v = d->value.ul;
+ DEBUGMSGTL(("kernel_sunos5", "value: %lu\n", d->value.ul));
+ break;
+ case KSTAT_DATA_LONGLONG:
+ *(Counter *)v = d->value.ll;
+ DEBUGMSGTL(("kernel_sunos5", "value: %lld\n",
+ (long)d->value.ll));
+ break;
+ case KSTAT_DATA_ULONGLONG:
+ *(Counter *)v = d->value.ull;
+ DEBUGMSGTL(("kernel_sunos5", "value: %llu\n",
+ (unsigned long)d->value.ull));
+ break;
+#endif
+ case KSTAT_DATA_FLOAT:
+ *(float *)v = d->value.f;
+ DEBUGMSGTL(("kernel_sunos5", "value: %f\n", d->value.f));
+ break;
+ case KSTAT_DATA_DOUBLE:
+ *(double *)v = d->value.d;
+ DEBUGMSGTL(("kernel_sunos5", "value: %f\n", d->value.d));
+ break;
+ default:
+ DEBUGMSGTL(("kernel_sunos5",
+ "UNKNOWN TYPE %d (stat \"%s\" var \"%s\")\n",
+ d->data_type, statname, varname));
+ ret = -3;
+ goto Return; /* Invalid data type */
+ }
+ ret = 0; /* Success */
+ goto Return;
+ }
+ }
+ ret = -4; /* Name not found */
+ Return:
+ return ret;
+}
+
+int
+getKstatString(const char *statname, const char *varname,
+ char *value, size_t value_len)
+{
+ kstat_ctl_t *ksc;
+ kstat_t *ks, *kstat_data;
+ kstat_named_t *d;
+ size_t i, instance;
+ char module_name[64];
+ int ret;
+
+ if (kstat_fd == 0) {
+ kstat_fd = kstat_open();
+ if (kstat_fd == 0) {
+ snmp_log_perror("kstat_open");
+ }
+ }
+ if ((ksc = kstat_fd) == NULL) {
+ ret = -10;
+ goto Return; /* kstat errors */
+ }
+ if (statname == NULL || varname == NULL) {
+ ret = -20;
+ goto Return;
+ }
+
+ /*
+ * First, get "kstat_headers" statistics. It should
+ * contain all available modules.
+ */
+
+ if ((ks = kstat_lookup(ksc, "unix", 0, "kstat_headers")) == NULL) {
+ ret = -10;
+ goto Return; /* kstat errors */
+ }
+ if (kstat_read(ksc, ks, NULL) <= 0) {
+ ret = -10;
+ goto Return; /* kstat errors */
+ }
+ kstat_data = ks->ks_data;
+
+ /*
+ * Now, look for the name of our stat in the headers buf
+ */
+ for (i = 0; i < ks->ks_ndata; i++) {
+ DEBUGMSGTL(("kernel_sunos5",
+ "module: %s instance: %d name: %s class: %s type: %d flags: %x\n",
+ kstat_data[i].ks_module, kstat_data[i].ks_instance,
+ kstat_data[i].ks_name, kstat_data[i].ks_class,
+ kstat_data[i].ks_type, kstat_data[i].ks_flags));
+ if (strcmp(statname, kstat_data[i].ks_name) == 0) {
+ strcpy(module_name, kstat_data[i].ks_module);
+ instance = kstat_data[i].ks_instance;
+ break;
+ }
+ }
+
+ if (i == ks->ks_ndata) {
+ ret = -1;
+ goto Return; /* Not found */
+ }
+
+ /*
+ * Get the named statistics
+ */
+ if ((ks = kstat_lookup(ksc, module_name, instance, statname)) == NULL) {
+ ret = -10;
+ goto Return; /* kstat errors */
+ }
+
+ if (kstat_read(ksc, ks, NULL) <= 0) {
+ ret = -10;
+ goto Return; /* kstat errors */
+ }
+ /*
+ * This function expects only name/value type of statistics, so if it is
+ * not the case return an error
+ */
+ if (ks->ks_type != KSTAT_TYPE_NAMED) {
+ ret = -2;
+ goto Return; /* Invalid stat type */
+ }
+
+ for (i = 0, d = KSTAT_NAMED_PTR(ks); i < ks->ks_ndata; i++, d++) {
+ DEBUGMSGTL(("kernel_sunos5", "variable: \"%s\" (type %d)\n",
+ d->name, d->data_type));
+
+ if (strcmp(d->name, varname) == 0) {
+ switch (d->data_type) {
+ case KSTAT_DATA_CHAR:
+ value[value_len-1] = '\0';
+ strncpy(value, d->value.c, value_len-1);
+ DEBUGMSGTL(("kernel_sunos5", "value: %s\n", d->value.c));
+ break;
+ default:
+ DEBUGMSGTL(("kernel_sunos5",
+ "NONSTRING TYPE %d (stat \"%s\" var \"%s\")\n",
+ d->data_type, statname, varname));
+ ret = -3;
+ goto Return; /* Invalid data type */
+ }
+ ret = 0; /* Success */
+ goto Return;
+ }
+ }
+ ret = -4; /* Name not found */
+ Return:
+ return ret;
+}
+
+/*
+ * get MIB-II statistics. It maintaines a simple cache which buffers the last
+ * read block of MIB statistics (which may contain the whole table). It calls
+ * *comp to compare every entry with an entry pointed by arg. *comp should
+ * return 0 if comparison is successful. Req_type may be GET_FIRST, GET_EXACT,
+ * GET_NEXT. If search is successful getMibstat returns 0, otherwise 1.
+ */
+int
+getMibstat(mibgroup_e grid, void *resp, size_t entrysize,
+ req_e req_type, int (*comp) (void *, void *), void *arg)
+{
+ int ret, rc = -1, mibgr, mibtb, cache_valid;
+ size_t length;
+ mibcache *cachep;
+ found_e result = NOT_FOUND;
+ void *ep;
+
+ /*
+ * We assume that Mibcache is initialized in mibgroup_e enum order so we
+ * don't check the validity of index here.
+ */
+
+ DEBUGMSGTL(("kernel_sunos5", "getMibstat (%d, *, %d, %d, *, *)\n",
+ grid, entrysize, req_type));
+ cachep = &Mibcache[grid];
+ mibgr = Mibmap[grid].group;
+ mibtb = Mibmap[grid].table;
+
+ if (cachep->cache_addr == (void *) -1) /* Hasn't been initialized yet */
+ init_mibcache_element(cachep);
+ if (cachep->cache_size == 0) { /* Memory allocation problems */
+ cachep->cache_addr = resp; /* So use caller supplied address instead of cache */
+ cachep->cache_size = entrysize;
+ cachep->cache_last_found = 0;
+ }
+ if (req_type != GET_NEXT)
+ cachep->cache_last_found = 0;
+
+ cache_valid = (cachep->cache_time > 0);
+
+ DEBUGMSGTL(("kernel_sunos5","... cache_valid %d time %ld ttl %d now %ld\n",
+ cache_valid, cachep->cache_time, cachep->cache_ttl,
+ time(NULL)));
+ if (cache_valid) {
+ /*
+ * Is it really?
+ */
+ if (cachep->cache_comp != (void *)comp || cachep->cache_arg != arg) {
+ cache_valid = 0; /* Nope. */
+ }
+ }
+
+ if (cache_valid) {
+ /*
+ * Entry is valid, let's try to find a match
+ */
+
+ if (req_type == GET_NEXT) {
+ result = getentry(req_type,
+ (void *)((char *)cachep->cache_addr +
+ (cachep->cache_last_found * entrysize)),
+ cachep->cache_length -
+ (cachep->cache_last_found * entrysize),
+ entrysize, &ep, comp, arg);
+ } else {
+ result = getentry(req_type, cachep->cache_addr,
+ cachep->cache_length, entrysize, &ep, comp,
+ arg);
+ }
+ }
+
+ if ((cache_valid == 0) || (result == NOT_FOUND) ||
+ (result == NEED_NEXT && cachep->cache_flags & CACHE_MOREDATA)) {
+ /*
+ * Either the cache is old, or we haven't found anything, or need the
+ * next item which hasn't been read yet. In any case, fill the cache
+ * up and try to find our entry.
+ */
+
+ if (grid == MIB_INTERFACES) {
+ rc = getif((mib2_ifEntry_t *) cachep->cache_addr,
+ cachep->cache_size, req_type,
+ (mib2_ifEntry_t *) & ep, &length, comp, arg);
+ } else {
+ rc = getmib(mibgr, mibtb, cachep->cache_addr,
+ cachep->cache_size, entrysize, req_type, &ep,
+ &length, comp, arg);
+ }
+
+ if (rc >= 0) { /* Cache has been filled up */
+ cachep->cache_time = cachep->cache_ttl;
+ cachep->cache_length = length;
+ if (rc == 1) /* Found but there are more unread data */
+ cachep->cache_flags |= CACHE_MOREDATA;
+ else {
+ cachep->cache_flags &= ~CACHE_MOREDATA;
+ if (rc > 1) {
+ cachep->cache_time = 0;
+ }
+ }
+ cachep->cache_comp = (void *) comp;
+ cachep->cache_arg = arg;
+ } else {
+ cachep->cache_comp = NULL;
+ cachep->cache_arg = NULL;
+ }
+ }
+ DEBUGMSGTL(("kernel_sunos5", "... result %d rc %d\n", result, rc));
+
+ if (result == FOUND || rc == 0 || rc == 1) {
+ /*
+ * Entry has been found, deliver it
+ */
+ if (resp != NULL) {
+ memcpy(resp, ep, entrysize);
+ }
+ ret = 0;
+ cachep->cache_last_found =
+ ((char *)ep - (char *)cachep->cache_addr) / entrysize;
+ } else {
+ ret = 1; /* Not found */
+ }
+ DEBUGMSGTL(("kernel_sunos5", "... getMibstat returns %d\n", ret));
+ return ret;
+}
+
+/*
+ * Get a MIB-II entry from the buffer buffaddr, which satisfies the criterion,
+ * computed by (*comp), which gets arg as the first argument and pointer to the
+ * current position in the buffer as the second. If found entry is pointed by
+ * resp.
+ */
+
+static found_e
+getentry(req_e req_type, void *bufaddr, size_t len,
+ size_t entrysize, void *resp, int (*comp)(void *, void *),
+ void *arg)
+{
+ void *bp = bufaddr, **rp = resp;
+ int previous_found = 0;
+
+ if ((len > 0) && (len % entrysize != 0)) {
+ /*
+ * The data in the cache does not make sense, the size must be a
+ * multiple of the entry. Could be caused by alignment issues etc.
+ */
+ DEBUGMSGTL(("kernel_sunos5",
+ "bad cache length %d - not multiple of entry size %d\n",
+ len, entrysize));
+ return NOT_FOUND;
+ }
+
+ /*
+ * Here we have to perform address arithmetic with pointer to void. Ugly...
+ */
+
+ for (; len > 0; len -= entrysize, bp = (char *) bp + entrysize) {
+ if (rp != (void *) NULL) {
+ *rp = bp;
+ }
+
+ if (req_type == GET_FIRST || (req_type == GET_NEXT && previous_found)){
+ return FOUND;
+ }
+
+ if ((*comp)(arg, bp) == 0) {
+ if (req_type == GET_EXACT) {
+ return FOUND;
+ } else { /* GET_NEXT */
+ previous_found++;
+ continue;
+ }
+ }
+ }
+
+ if (previous_found) {
+ return NEED_NEXT;
+ } else {
+ return NOT_FOUND;
+ }
+}
+
+/*
+ * Initialize a cache element. It allocates the memory and sets the time stamp
+ * to invalidate the element.
+ */
+static void
+init_mibcache_element(mibcache * cp)
+{
+ if (cp == (mibcache *)NULL) {
+ return;
+ }
+ if (cp->cache_size) {
+ cp->cache_addr = malloc(cp->cache_size);
+ }
+ cp->cache_time = 0;
+ cp->cache_comp = NULL;
+ cp->cache_arg = NULL;
+}
+
+/*
+ * Get MIB-II statistics from the Solaris kernel. It uses undocumented
+ * interface to TCP/IP streams modules, which provides extended MIB-II for the
+ * following groups: ip, icmp, tcp, udp, egp.
+
+ *
+ * Usage: groupname, subgroupname are from <inet/mib2.h>,
+ * size%sizeof(statbuf) == 0,
+ * entrysize should be exact size of MIB-II entry,
+ * req_type:
+ * GET_FIRST - get the first entry in the buffer
+ * GET_EXACT - get exact match
+ * GET_NEXT - get next entry after the exact match
+ *
+ * (*comp) is a compare function, provided by the caller, which gets arg as the
+ * first argument and pointer to the current entry as th second. If compared,
+ * should return 0 and found entry will be pointed by resp.
+ *
+ * If search is successful and no more data to read, it returns 0,
+ * if successful and there is more data -- 1,
+ * if not found and end of data -- 2, any other errors -- < 0
+ * (negative error numbers are pretty random).
+ *
+ * NOTE: needs to be protected by a mutex in reentrant environment
+ */
+
+static int
+getmib(int groupname, int subgroupname, void *statbuf, size_t size,
+ size_t entrysize, req_e req_type, void *resp,
+ size_t *length, int (*comp)(void *, void *), void *arg)
+{
+ int rc, ret = 0, flags;
+ char buf[BUFSIZE];
+ struct strbuf strbuf;
+ struct T_optmgmt_req *tor = (struct T_optmgmt_req *) buf;
+ struct T_optmgmt_ack *toa = (struct T_optmgmt_ack *) buf;
+ struct T_error_ack *tea = (struct T_error_ack *) buf;
+ struct opthdr *req;
+ found_e result = FOUND;
+
+ DEBUGMSGTL(("kernel_sunos5", "...... getmib (%d, %d, ...)\n",
+ groupname, subgroupname));
+
+ /*
+ * Open the stream driver and push all MIB-related modules
+ */
+
+ if (sd == -2) { /* First time */
+ if ((sd = open(STREAM_DEV, O_RDWR)) == -1) {
+ snmp_log_perror(STREAM_DEV);
+ ret = -1;
+ goto Return;
+ }
+ if (ioctl(sd, I_PUSH, "tcp") == -1) {
+ snmp_log_perror("I_PUSH tcp");
+ ret = -1;
+ goto Return;
+ }
+ if (ioctl(sd, I_PUSH, "udp") == -1) {
+ snmp_log_perror("I_PUSH udp");
+ ret = -1;
+ goto Return;
+ }
+ DEBUGMSGTL(("kernel_sunos5", "...... modules pushed OK\n"));
+ }
+ if (sd == -1) {
+ ret = -1;
+ goto Return;
+ }
+
+ /*
+ * First, use bigger buffer, to accelerate skipping unwanted messages
+ */
+
+ strbuf.buf = buf;
+ strbuf.maxlen = BUFSIZE;
+
+ tor->PRIM_type = T_OPTMGMT_REQ;
+ tor->OPT_offset = sizeof(struct T_optmgmt_req);
+ tor->OPT_length = sizeof(struct opthdr);
+#ifdef MI_T_CURRENT
+ tor->MGMT_flags = MI_T_CURRENT; /* Solaris < 2.6 */
+#else
+ tor->MGMT_flags = T_CURRENT; /* Solaris 2.6 */
+#endif
+ req = (struct opthdr *)(tor + 1);
+ req->level = groupname;
+ req->name = subgroupname;
+ req->len = 0;
+ strbuf.len = tor->OPT_length + tor->OPT_offset;
+ flags = 0;
+ if ((rc = putmsg(sd, &strbuf, NULL, flags))) {
+ ret = -2;
+ goto Return;
+ }
+
+ req = (struct opthdr *) (toa + 1);
+ for (;;) {
+ flags = 0;
+ if ((rc = getmsg(sd, &strbuf, NULL, &flags)) == -1) {
+ ret = -EIO;
+ break;
+ }
+ if (rc == 0 && strbuf.len >= sizeof(struct T_optmgmt_ack) &&
+ toa->PRIM_type == T_OPTMGMT_ACK &&
+ toa->MGMT_flags == T_SUCCESS && req->len == 0) {
+ ret = 2;
+ break;
+ }
+ if (strbuf.len >= sizeof(struct T_error_ack) &&
+ tea->PRIM_type == T_ERROR_ACK) {
+ /* Protocol error */
+ ret = -((tea->TLI_error == TSYSERR) ? tea->UNIX_error : EPROTO);
+ break;
+ }
+ if (rc != MOREDATA || strbuf.len < sizeof(struct T_optmgmt_ack) ||
+ toa->PRIM_type != T_OPTMGMT_ACK ||
+ toa->MGMT_flags != T_SUCCESS) {
+ ret = -ENOMSG; /* No more messages */
+ break;
+ }
+
+ /*
+ * The order in which we get the statistics is determined by the kernel
+ * and not by the group name, so we have to loop until we get the
+ * required statistics.
+ */
+
+ if (req->level != groupname || req->name != subgroupname) {
+ strbuf.maxlen = BUFSIZE;
+ strbuf.buf = buf;
+ do {
+ rc = getmsg(sd, NULL, &strbuf, &flags);
+ } while (rc == MOREDATA);
+ continue;
+ }
+
+ /*
+ * Now when we found our stat, switch buffer to a caller-provided
+ * one. Manipulating the size of it one can control performance,
+ * reducing the number of getmsg calls
+ */
+
+ strbuf.buf = statbuf;
+ strbuf.maxlen = size;
+ strbuf.len = 0;
+ flags = 0;
+ do {
+ rc = getmsg(sd, NULL, &strbuf, &flags);
+ switch (rc) {
+ case -1:
+ rc = -ENOSR;
+ goto Return;
+
+ default:
+ rc = -ENODATA;
+ goto Return;
+
+ case MOREDATA:
+ case 0:
+ if (req_type == GET_NEXT && result == NEED_NEXT)
+ /*
+ * End of buffer, so "next" is the first item in the next
+ * buffer
+ */
+ req_type = GET_FIRST;
+ result = getentry(req_type, (void *) strbuf.buf, strbuf.len,
+ entrysize, resp, comp, arg);
+ *length = strbuf.len; /* To use in caller for cacheing */
+ break;
+ }
+ } while (rc == MOREDATA && result != FOUND);
+
+ if (result == FOUND) { /* Search is successful */
+ if (rc != MOREDATA) {
+ ret = 0; /* Found and no more data */
+ } else {
+ ret = 1; /* Found and there is another unread data block */
+ }
+ break;
+ } else { /* Restore buffers, continue search */
+ strbuf.buf = buf;
+ strbuf.maxlen = BUFSIZE;
+ }
+ }
+ Return:
+ if (sd >= 0) ioctl(sd, I_FLUSH, FLUSHRW);
+ DEBUGMSGTL(("kernel_sunos5", "...... getmib returns %d\n", ret));
+ return ret;
+}
+
+/*
+ * Get info for interfaces group. Mimics getmib interface as much as possible
+ * to be substituted later if SunSoft decides to extend its mib2 interface.
+ */
+
+#if defined(HAVE_IF_NAMEINDEX) && defined(NETSNMP_INCLUDE_IFTABLE_REWRITES)
+
+/*
+ * If IFTABLE_REWRITES is enabled, then we will also rely on DLPI to obtain
+ * information from the NIC.
+ */
+
+/*
+ * Open a DLPI device.
+ *
+ * On success the file descriptor is returned.
+ * On error -1 is returned.
+ */
+static int
+_dlpi_open(const char *devname)
+{
+ char *devstr;
+ int fd = -1;
+ int ppa = -1;
+
+ DEBUGMSGTL(("kernel_sunos5", "_dlpi_open called\n"));
+
+ if (devname == NULL)
+ return (-1);
+
+ if ((devstr = malloc(5 + strlen(devname) + 1)) == NULL)
+ return (-1);
+ (void) sprintf(devstr, "/dev/%s", devname);
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "devstr(%s)\n", devstr));
+ /*
+ * First try opening the device using style 1, if the device does not
+ * exist we try style 2. Modules will not be pushed, so something like
+ * ip tunnels will not work.
+ */
+
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open(%s)\n", devstr));
+ if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) < 0) {
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open failed\n"));
+ if (_dlpi_parse_devname(devstr, &ppa) == 0) {
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 parse: %s, %d\n",
+ devstr, ppa));
+ /* try style 2 */
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 open(%s)\n", devstr));
+
+ if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) != -1) {
+ if (_dlpi_attach(fd, ppa) == 0) {
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "attached\n"));
+ } else {
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "attached failed\n"));
+ close(fd);
+ fd = -1;
+ }
+ } else {
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 open failed\n"));
+ }
+ }
+ } else {
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open succeeded\n"));
+ }
+
+ /* clean up */
+ free(devstr);
+
+ return (fd);
+}
+
+/*
+ * Obtain the physical address of the interface using DLPI
+ */
+static int
+_dlpi_get_phys_address(int fd, char *addr, int maxlen, int *addrlen)
+{
+ dl_phys_addr_req_t paddr_req;
+ union DL_primitives *dlp;
+ struct strbuf ctlbuf;
+ char buf[MAX(DL_PHYS_ADDR_ACK_SIZE+64, DL_ERROR_ACK_SIZE)];
+ int flag = 0;
+
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "_dlpi_get_phys_address\n"));
+
+ paddr_req.dl_primitive = DL_PHYS_ADDR_REQ;
+ paddr_req.dl_addr_type = DL_CURR_PHYS_ADDR;
+ ctlbuf.buf = (char *)&paddr_req;
+ ctlbuf.len = DL_PHYS_ADDR_REQ_SIZE;
+ if (putmsg(fd, &ctlbuf, NULL, 0) < 0)
+ return (-1);
+
+ ctlbuf.maxlen = sizeof(buf);
+ ctlbuf.len = 0;
+ ctlbuf.buf = buf;
+ if (getmsg(fd, &ctlbuf, NULL, &flag) < 0)
+ return (-1);
+
+ if (ctlbuf.len < sizeof(uint32_t))
+ return (-1);
+ dlp = (union DL_primitives *)buf;
+ switch (dlp->dl_primitive) {
+ case DL_PHYS_ADDR_ACK: {
+ dl_phys_addr_ack_t *phyp = (dl_phys_addr_ack_t *)buf;
+
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "got ACK\n"));
+ if (ctlbuf.len < DL_PHYS_ADDR_ACK_SIZE || phyp->dl_addr_length > maxlen)
+ return (-1);
+ (void) memcpy(addr, buf+phyp->dl_addr_offset, phyp->dl_addr_length);
+ *addrlen = phyp->dl_addr_length;
+ return (0);
+ }
+ case DL_ERROR_ACK: {
+ dl_error_ack_t *errp = (dl_error_ack_t *)buf;
+
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "got ERROR ACK\n"));
+ if (ctlbuf.len < DL_ERROR_ACK_SIZE)
+ return (-1);
+ return (errp->dl_errno);
+ }
+ default:
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "got type: %x\n", dlp->dl_primitive));
+ return (-1);
+ }
+}
+
+/*
+ * Query the interface about it's type.
+ */
+static int
+_dlpi_get_iftype(int fd, unsigned int *iftype)
+{
+ dl_info_req_t info_req;
+ union DL_primitives *dlp;
+ struct strbuf ctlbuf;
+ char buf[MAX(DL_INFO_ACK_SIZE, DL_ERROR_ACK_SIZE)];
+ int flag = 0;
+
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "_dlpi_get_iftype\n"));
+
+ info_req.dl_primitive = DL_INFO_REQ;
+ ctlbuf.buf = (char *)&info_req;
+ ctlbuf.len = DL_INFO_REQ_SIZE;
+ if (putmsg(fd, &ctlbuf, NULL, 0) < 0) {
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "putmsg failed: %d\nn", errno));
+ return (-1);
+ }
+
+ ctlbuf.maxlen = sizeof(buf);
+ ctlbuf.len = 0;
+ ctlbuf.buf = buf;
+ if (getmsg(fd, &ctlbuf, NULL, &flag) < 0) {
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "getmsg failed: %d\n", errno));
+ return (-1);
+ }
+
+ if (ctlbuf.len < sizeof(uint32_t))
+ return (-1);
+ dlp = (union DL_primitives *)buf;
+ switch (dlp->dl_primitive) {
+ case DL_INFO_ACK: {
+ dl_info_ack_t *info = (dl_info_ack_t *)buf;
+
+ if (ctlbuf.len < DL_INFO_ACK_SIZE)
+ return (-1);
+
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "dl_mac_type: %x\n",
+ info->dl_mac_type));
+ switch (info->dl_mac_type) {
+ case DL_CSMACD:
+ case DL_ETHER:
+ case DL_ETH_CSMA:
+ *iftype = 6;
+ break;
+ case DL_TPB: /* Token Passing Bus */
+ *iftype = 8;
+ break;
+ case DL_TPR: /* Token Passing Ring */
+ *iftype = 9;
+ break;
+ case DL_HDLC:
+ *iftype = 118;
+ break;
+ case DL_FDDI:
+ *iftype = 15;
+ break;
+ case DL_FC: /* Fibre channel */
+ *iftype = 56;
+ break;
+ case DL_ATM:
+ *iftype = 37;
+ break;
+ case DL_X25:
+ case DL_ISDN:
+ *iftype = 63;
+ break;
+ case DL_HIPPI:
+ *iftype = 47;
+ break;
+#ifdef DL_IB
+ case DL_IB:
+ *iftype = 199;
+ break;
+#endif
+ case DL_FRAME: /* Frame Relay */
+ *iftype = 32;
+ break;
+ case DL_LOOP:
+ *iftype = 24;
+ break;
+#ifdef DL_WIFI
+ case DL_WIFI:
+ *iftype = 71;
+ break;
+#endif
+#ifdef DL_IPV4 /* then IPv6 is also defined */
+ case DL_IPV4: /* IPv4 Tunnel */
+ case DL_IPV6: /* IPv6 Tunnel */
+ *iftype = 131;
+ break;
+#endif
+ default:
+ *iftype = 1; /* Other */
+ break;
+ }
+
+ return (0);
+ }
+ case DL_ERROR_ACK: {
+ dl_error_ack_t *errp = (dl_error_ack_t *)buf;
+
+ DEBUGMSGTL(("kernel_sunos5:dlpi",
+ "got DL_ERROR_ACK: dlpi %d, error %d\n", errp->dl_errno,
+ errp->dl_unix_errno));
+
+ if (ctlbuf.len < DL_ERROR_ACK_SIZE)
+ return (-1);
+ return (errp->dl_errno);
+ }
+ default:
+ DEBUGMSGTL(("kernel_sunos5:dlpi", "got type %x\n", dlp->dl_primitive));
+ return (-1);
+ }
+}
+
+static int
+_dlpi_attach(int fd, int ppa)
+{
+ dl_attach_req_t attach_req;
+ struct strbuf ctlbuf;
+ union DL_primitives *dlp;
+ char buf[MAX(DL_OK_ACK_SIZE, DL_ERROR_ACK_SIZE)];
+ int flag = 0;
+
+ attach_req.dl_primitive = DL_ATTACH_REQ;
+ attach_req.dl_ppa = ppa;
+ ctlbuf.buf = (char *)&attach_req;
+ ctlbuf.len = DL_ATTACH_REQ_SIZE;
+ if (putmsg(fd, &ctlbuf, NULL, 0) != 0)
+ return (-1);
+
+ ctlbuf.buf = buf;
+ ctlbuf.len = 0;
+ ctlbuf.maxlen = sizeof(buf);
+ if (getmsg(fd, &ctlbuf, NULL, &flag) != 0)
+ return (-1);
+
+ if (ctlbuf.len < sizeof(uint32_t))
+ return (-1);
+
+ dlp = (union DL_primitives *)buf;
+ if (dlp->dl_primitive == DL_OK_ACK && ctlbuf.len >= DL_OK_ACK_SIZE)
+ return (0);
+ return (-1);
+}
+
+static int
+_dlpi_parse_devname(char *devname, int *ppap)
+{
+ int ppa = 0;
+ int m = 1;
+ int i = strlen(devname) - 1;
+
+ while (i >= 0 && isdigit(devname[i])) {
+ ppa += m * (devname[i] - '0');
+ m *= 10;
+ i--;
+ }
+
+ if (m == 1) {
+ return (-1);
+ }
+ *ppap = ppa;
+ devname[i + 1] = '\0';
+
+ return (0);
+}
+static int
+getif(mib2_ifEntry_t *ifbuf, size_t size, req_e req_type,
+ mib2_ifEntry_t *resp, size_t *length, int (*comp)(void *, void *),
+ void *arg)
+{
+ int fd, i, ret;
+ int ifsd, ifsd6 = -1;
+ struct lifreq lifreq, *lifrp;
+ mib2_ifEntry_t *ifp;
+ int nentries = size / sizeof(mib2_ifEntry_t);
+ found_e result = NOT_FOUND;
+ boolean_t if_isv6;
+ uint64_t if_flags;
+ struct if_nameindex *ifname, *ifnp;
+
+ lifrp = &lifreq;
+
+ if ((ifsd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ return -1;
+ }
+
+ DEBUGMSGTL(("kernel_sunos5", "...... using if_nameindex\n"));
+ if ((ifname = if_nameindex()) == NULL) {
+ ret = -1;
+ goto Return;
+ }
+
+ /*
+ * Gather information about each interface found. We try to handle errors
+ * gracefully: if an error occurs while processing an interface we simply
+ * move along to the next one. Previously, the function returned with an
+ * error right away.
+ *
+ * if_nameindex() already eliminates duplicate interfaces, so no extra
+ * checks are needed for interfaces that have both IPv4 and IPv6 plumbed
+ */
+ Again:
+ for (i = 0, ifnp = ifname, ifp = (mib2_ifEntry_t *) ifbuf;
+ ifnp->if_index != 0 && (i < nentries); ifnp++) {
+
+ DEBUGMSGTL(("kernel_sunos5", "...... getif %s\n", ifnp->if_name));
+ memcpy(lifrp->lifr_name, ifnp->if_name, LIFNAMSIZ);
+ if_isv6 = B_FALSE;
+
+ if (ioctl(ifsd, SIOCGLIFFLAGS, lifrp) < 0) {
+ if (ifsd6 == -1) {
+ if ((ifsd6 = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
+ ret = -1;
+ goto Return;
+ }
+ }
+ if (ioctl(ifsd6, SIOCGLIFFLAGS, lifrp) < 0) {
+ snmp_log(LOG_ERR, "SIOCGLIFFLAGS %s: %s\n",
+ lifrp->lifr_name, strerror(errno));
+ continue;
+ }
+ if_isv6 = B_TRUE;
+ }
+ if_flags = lifrp->lifr_flags;
+
+ if (ioctl(if_isv6?ifsd6:ifsd, SIOCGLIFMTU, lifrp) < 0) {
+ DEBUGMSGTL(("kernel_sunos5", "...... SIOCGLIFMTU failed\n"));
+ continue;
+ }
+
+ memset(ifp, 0, sizeof(mib2_ifEntry_t));
+
+ if ((fd = _dlpi_open(ifnp->if_name)) != -1) {
+ /* Could open DLPI... now try to grab some info */
+ (void) _dlpi_get_phys_address(fd, ifp->ifPhysAddress.o_bytes,
+ sizeof(ifp->ifPhysAddress.o_bytes),
+ &ifp->ifPhysAddress.o_length);
+ (void) _dlpi_get_iftype(fd, &ifp->ifType);
+ close(fd);
+ }
+
+ set_if_info(ifp, ifnp->if_index, ifnp->if_name, if_flags,
+ lifrp->lifr_metric);
+
+ if (get_if_stats(ifp) < 0) {
+ DEBUGMSGTL(("kernel_sunos5", "...... get_if_stats failed\n"));
+ continue;
+ }
+
+ /*
+ * Once we reach here we know that all went well, so move to
+ * the next ifEntry.
+ */
+ i++;
+ ifp++;
+ }
+
+ if ((req_type == GET_NEXT) && (result == NEED_NEXT)) {
+ /*
+ * End of buffer, so "next" is the first item in the next buffer
+ */
+ req_type = GET_FIRST;
+ }
+
+ result = getentry(req_type, (void *) ifbuf, size, sizeof(mib2_ifEntry_t),
+ (void *)resp, comp, arg);
+
+ if ((result != FOUND) && (i == nentries) && ifnp->if_index != 0) {
+ /*
+ * We reached the end of supplied buffer, but there is
+ * some more stuff to read, so continue.
+ */
+ goto Again;
+ }
+
+ if (result != FOUND) {
+ ret = 2;
+ } else {
+ if (ifnp->if_index != 0) {
+ ret = 1; /* Found and more data to fetch */
+ } else {
+ ret = 0; /* Found and no more data */
+ }
+ *length = i * sizeof(mib2_ifEntry_t); /* Actual cache length */
+ }
+
+ Return:
+ if (ifname)
+ if_freenameindex(ifname);
+ close(ifsd);
+ if (ifsd6 != -1)
+ close(ifsd6);
+ return ret;
+}
+#else /* only rely on SIOCGIFCONF to get interface information */
+
+static int
+getif(mib2_ifEntry_t *ifbuf, size_t size, req_e req_type,
+ mib2_ifEntry_t *resp, size_t *length, int (*comp)(void *, void *),
+ void *arg)
+{
+ int i, ret, idx = 1;
+ int ifsd;
+ static char *buf = NULL;
+ static int bufsize = 0;
+ struct ifconf ifconf;
+ struct ifreq *ifrp;
+ mib2_ifEntry_t *ifp;
+ mib2_ipNetToMediaEntry_t Media;
+ int nentries = size / sizeof(mib2_ifEntry_t);
+ int if_flags = 0;
+ found_e result = NOT_FOUND;
+
+ if ((ifsd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ return -1;
+ }
+
+ if (!buf) {
+ bufsize = 10240;
+ buf = malloc(bufsize);
+ if (!buf) {
+ ret = -1;
+ goto Return;
+ }
+ }
+
+ ifconf.ifc_buf = buf;
+ ifconf.ifc_len = bufsize;
+ while (ioctl(ifsd, SIOCGIFCONF, &ifconf) == -1) {
+ bufsize += 10240;
+ free(buf);
+ buf = malloc(bufsize);
+ if (!buf) {
+ ret = -1;
+ goto Return;
+ }
+ ifconf.ifc_buf = buf;
+ ifconf.ifc_len = bufsize;
+ }
+
+ Again:
+ for (i = 0, ifp = (mib2_ifEntry_t *) ifbuf, ifrp = ifconf.ifc_req;
+ ((char *) ifrp < ((char *) ifconf.ifc_buf + ifconf.ifc_len))
+ && (i < nentries); i++, ifp++, ifrp++, idx++) {
+
+ DEBUGMSGTL(("kernel_sunos5", "...... getif %s\n", ifrp->ifr_name));
+
+ if (ioctl(ifsd, SIOCGIFFLAGS, ifrp) < 0) {
+ ret = -1;
+ snmp_log(LOG_ERR, "SIOCGIFFLAGS %s: %s\n", ifrp->ifr_name,
+ strerror(errno));
+ goto Return;
+ }
+ if_flags = ifrp->ifr_flags;
+
+ if (ioctl(ifsd, SIOCGIFMTU, ifrp) < 0) {
+ ret = -1;
+ DEBUGMSGTL(("kernel_sunos5", "...... SIOCGIFMTU failed\n"));
+ goto Return;
+ }
+
+ memset(ifp, 0, sizeof(mib2_ifEntry_t));
+ set_if_info(ifp, idx, ifrp->ifr_name, if_flags, ifrp->ifr_metric);
+
+ if (get_if_stats(ifp) < 0) {
+ ret = -1;
+ goto Return;
+ }
+ /*
+ * An attempt to determine the physical address of the interface.
+ * There should be a more elegant solution using DLPI, but "the margin
+ * is too small to put it here ..."
+ */
+
+ if (ioctl(ifsd, SIOCGIFADDR, ifrp) < 0) {
+ ret = -1;
+ goto Return;
+ }
+
+ if (getMibstat(MIB_IP_NET, &Media, sizeof(mib2_ipNetToMediaEntry_t),
+ GET_EXACT, &Name_cmp, ifrp) == 0) {
+ ifp->ifPhysAddress = Media.ipNetToMediaPhysAddress;
+ }
+ }
+
+ if ((req_type == GET_NEXT) && (result == NEED_NEXT)) {
+ /*
+ * End of buffer, so "next" is the first item in the next buffer
+ */
+ req_type = GET_FIRST;
+ }
+
+ result = getentry(req_type, (void *) ifbuf, size, sizeof(mib2_ifEntry_t),
+ (void *)resp, comp, arg);
+
+ if ((result != FOUND) && (i == nentries) &&
+ ((char *)ifrp < (char *)ifconf.ifc_buf + ifconf.ifc_len)) {
+ /*
+ * We reached the end of supplied buffer, but there is
+ * some more stuff to read, so continue.
+ */
+ ifconf.ifc_len -= i * sizeof(struct ifreq);
+ ifconf.ifc_req = ifrp;
+ goto Again;
+ }
+
+ if (result != FOUND) {
+ ret = 2;
+ } else {
+ if ((char *)ifrp < (char *)ifconf.ifc_buf + ifconf.ifc_len) {
+ ret = 1; /* Found and more data to fetch */
+ } else {
+ ret = 0; /* Found and no more data */
+ }
+ *length = i * sizeof(mib2_ifEntry_t); /* Actual cache length */
+ }
+
+ Return:
+ close(ifsd);
+ return ret;
+}
+#endif /*defined(HAVE_IF_NAMEINDEX)&&defined(NETSNMP_INCLUDE_IFTABLE_REWRITES)*/
+
+static void
+set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags,
+ int mtu)
+{
+ boolean_t havespeed = B_FALSE;
+
+ /*
+ * Set basic information
+ */
+ ifp->ifIndex = index;
+ ifp->ifDescr.o_length = strlen(name);
+ strcpy(ifp->ifDescr.o_bytes, name);
+ ifp->ifAdminStatus = (flags & IFF_UP) ? 1 : 2;
+ ifp->ifOperStatus = ((flags & IFF_UP) && (flags & IFF_RUNNING)) ? 1 : 2;
+ ifp->ifLastChange = 0; /* Who knows ... */
+ ifp->flags = flags;
+ ifp->ifMtu = mtu;
+ ifp->ifSpeed = 0;
+
+ /*
+ * Get link speed
+ */
+ if ((getKstatInt(NULL, name, "ifspeed", &ifp->ifSpeed) == 0)) {
+ /*
+ * check for SunOS patch with half implemented ifSpeed
+ */
+ if (ifp->ifSpeed > 0 && ifp->ifSpeed < 10000) {
+ ifp->ifSpeed *= 1000000;
+ }
+ havespeed = B_TRUE;
+ } else if (getKstatInt(NULL, name, "ifSpeed", &ifp->ifSpeed) == 0) {
+ /*
+ * this is good
+ */
+ havespeed = B_TRUE;
+ }
+
+ /* make ifOperStatus depend on link status if available */
+ if (ifp->ifAdminStatus == 1) {
+ int i_tmp;
+ /* only UPed interfaces get correct link status - if any */
+ if (getKstatInt(NULL, name,"link_up",&i_tmp) == 0) {
+ ifp->ifOperStatus = i_tmp ? 1 : 2;
+#ifdef IFF_FAILED
+ } else if (flags & IFF_FAILED) {
+ /*
+ * If IPMP is used, and if the daemon marks the interface
+ * as 'failed', then we know for sure something is amiss.
+ */
+ ifp->ifOperStatus = 2;
+#endif
+ } else if (havespeed == B_TRUE && ifp->ifSpeed == 0) {
+ /* Heuristic */
+ ifp->ifOperStatus = 2;
+ }
+ }
+
+ /*
+ * Set link Type and Speed (if it could not be determined from kstat)
+ */
+ if (ifp->ifType == 24) {
+ ifp->ifSpeed = 127000000;
+ } else if (ifp->ifType == 1 || ifp->ifType == 0) {
+ /*
+ * Could not get the type from DLPI, so lets fall back to the hardcoded
+ * values.
+ */
+ switch (name[0]) {
+ case 'a': /* ath (802.11) */
+ if (name[1] == 't' && name[2] == 'h')
+ ifp->ifType = 71;
+ break;
+ case 'l': /* le / lo / lane (ATM LAN Emulation) */
+ if (name[1] == 'o') {
+ if (!ifp->ifSpeed)
+ ifp->ifSpeed = 127000000;
+ ifp->ifType = 24;
+ } else if (name[1] == 'e') {
+ if (!ifp->ifSpeed)
+ ifp->ifSpeed = 10000000;
+ ifp->ifType = 6;
+ } else if (name[1] == 'a') {
+ if (!ifp->ifSpeed)
+ ifp->ifSpeed = 155000000;
+ ifp->ifType = 37;
+ }
+ break;
+
+ case 'g': /* ge (gigabit ethernet card) */
+ case 'c': /* ce (Cassini Gigabit-Ethernet (PCI) */
+ if (!ifp->ifSpeed)
+ ifp->ifSpeed = 1000000000;
+ ifp->ifType = 6;
+ break;
+
+ case 'h': /* hme (SBus card) */
+ case 'e': /* eri (PCI card) */
+ case 'b': /* be */
+ case 'd': /* dmfe -- found on netra X1 */
+ if (!ifp->ifSpeed)
+ ifp->ifSpeed = 100000000;
+ ifp->ifType = 6;
+ break;
+
+ case 'f': /* fa (Fore ATM) */
+ if (!ifp->ifSpeed)
+ ifp->ifSpeed = 155000000;
+ ifp->ifType = 37;
+ break;
+
+ case 'q': /* qe (QuadEther)/qa (Fore ATM)/qfe (QuadFastEther) */
+ if (name[1] == 'a') {
+ if (!ifp->ifSpeed)
+ ifp->ifSpeed = 155000000;
+ ifp->ifType = 37;
+ } else if (name[1] == 'e') {
+ if (!ifp->ifSpeed)
+ ifp->ifSpeed = 10000000;
+ ifp->ifType = 6;
+ } else if (name[1] == 'f') {
+ if (!ifp->ifSpeed)
+ ifp->ifSpeed = 100000000;
+ ifp->ifType = 6;
+ }
+ break;
+
+ case 'i': /* ibd (Infiniband)/ip.tun (IP tunnel) */
+ if (name[1] == 'b')
+ ifp->ifType = 199;
+ else if (name[1] == 'p')
+ ifp->ifType = 131;
+ break;
+ }
+ }
+}
+
+static int
+get_if_stats(mib2_ifEntry_t *ifp)
+{
+ Counter l_tmp;
+ char *name = ifp->ifDescr.o_bytes;
+
+ if (strchr(name, ':'))
+ return (0);
+
+ /*
+ * First try to grab 64-bit counters; if they are not available,
+ * fall back to 32-bit.
+ */
+ if (getKstat(name, "ipackets64", &ifp->ifHCInUcastPkts) != 0) {
+ if (getKstatInt(NULL, name, "ipackets", &ifp->ifInUcastPkts) != 0) {
+ return (-1);
+ }
+ } else {
+ ifp->ifInUcastPkts = (uint32_t)(ifp->ifHCInUcastPkts & 0xffffffff);
+ }
+
+ if (getKstat(name, "rbytes64", &ifp->ifHCInOctets) != 0) {
+ if (getKstatInt(NULL, name, "rbytes", &ifp->ifInOctets) != 0) {
+ ifp->ifInOctets = ifp->ifInUcastPkts * 308;
+ }
+ } else {
+ ifp->ifInOctets = (uint32_t)(ifp->ifHCInOctets & 0xffffffff);
+ }
+
+ if (getKstat(name, "opackets64", &ifp->ifHCOutUcastPkts) != 0) {
+ if (getKstatInt(NULL, name, "opackets", &ifp->ifOutUcastPkts) != 0) {
+ return (-1);
+ }
+ } else {
+ ifp->ifOutUcastPkts = (uint32_t)(ifp->ifHCOutUcastPkts & 0xffffffff);
+ }
+
+ if (getKstat(name, "obytes64", &ifp->ifHCOutOctets) != 0) {
+ if (getKstatInt(NULL, name, "obytes", &ifp->ifOutOctets) != 0) {
+ ifp->ifOutOctets = ifp->ifOutUcastPkts * 308; /* XXX */
+ }
+ } else {
+ ifp->ifOutOctets = (uint32_t)(ifp->ifHCOutOctets & 0xffffffff);
+ }
+
+ if (ifp->ifType == 24) /* Loopback */
+ return (0);
+
+ if (getKstatInt(NULL, name, "ierrors", &ifp->ifInErrors) != 0) {
+ return (-1);
+ }
+
+ if (getKstatInt(NULL, name, "oerrors", &ifp->ifOutErrors) != 0) {
+ return (-1);
+ }
+
+ /* Try to grab some additional information */
+ getKstatInt(NULL, name, "collisions", &ifp->ifCollisions);
+ getKstatInt(NULL, name, "unknowns", &ifp->ifInUnknownProtos);
+
+
+ /*
+ * TODO some NICs maintain 64-bit counters for multi/broadcast
+ * packets; should try to get that information.
+ */
+ if (getKstatInt(NULL, name, "brdcstrcv", &l_tmp) == 0)
+ ifp->ifHCInBroadcastPkts = l_tmp;
+
+ if (getKstatInt(NULL, name, "multircv", &l_tmp) == 0)
+ ifp->ifHCInMulticastPkts = l_tmp;
+
+ ifp->ifInNUcastPkts = (uint32_t)(ifp->ifHCInBroadcastPkts +
+ ifp->ifHCInMulticastPkts);
+
+ if (getKstatInt(NULL, name, "brdcstxmt", &l_tmp) == 0)
+ ifp->ifHCOutBroadcastPkts = l_tmp;
+
+ if (getKstatInt(NULL, name, "multixmt", &l_tmp) == 0)
+ ifp->ifHCOutMulticastPkts = l_tmp;
+
+ ifp->ifOutNUcastPkts = (uint32_t)(ifp->ifHCOutBroadcastPkts +
+ ifp->ifHCOutMulticastPkts);
+ return(0);
+}
+/*
+ * Always TRUE. May be used as a comparison function in getMibstat
+ * to obtain the whole table (GET_FIRST should be used)
+ */
+int
+Get_everything(void *x, void *y)
+{
+ return 0; /* Always TRUE */
+}
+
+/*
+ * Compare name and IP address of the interface to ARP table entry.
+ * Needed to obtain the physical address of the interface in getif.
+ */
+static int
+Name_cmp(void *ifrp, void *ep)
+{
+ struct sockaddr_in *s = (struct sockaddr_in *)
+ &(((struct ifreq *)ifrp)->ifr_addr);
+ mib2_ipNetToMediaEntry_t *Ep = (mib2_ipNetToMediaEntry_t *)ep;
+
+ if ((strncmp(Ep->ipNetToMediaIfIndex.o_bytes,
+ ((struct ifreq *)ifrp)->ifr_name,
+ Ep->ipNetToMediaIfIndex.o_length) == 0) &&
+ (s->sin_addr.s_addr == Ep->ipNetToMediaNetAddress)) {
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
+/*
+ * Try to determine the index of a particular interface. If mfd-rewrites is
+ * specified, then this function would only be used when the system does not
+ * have if_nametoindex(3SOCKET).
+ */
+int
+solaris2_if_nametoindex(const char *Name, int Len)
+{
+ int i, sd, lastlen = 0, interfaces = 0;
+ struct ifconf ifc;
+ struct ifreq *ifrp = NULL;
+ char *buf = NULL;
+
+ if (Name == 0) {
+ return 0;
+ }
+ if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ return 0;
+ }
+
+ /*
+ * Cope with lots of interfaces and brokenness of ioctl SIOCGIFCONF
+ * on some platforms; see W. R. Stevens, ``Unix Network Programming
+ * Volume I'', p.435.
+ */
+
+ for (i = 8;; i += 8) {
+ buf = calloc(i, sizeof(struct ifreq));
+ if (buf == NULL) {
+ close(sd);
+ return 0;
+ }
+ ifc.ifc_len = i * sizeof(struct ifreq);
+ ifc.ifc_buf = (caddr_t) buf;
+
+ if (ioctl(sd, SIOCGIFCONF, (char *) &ifc) < 0) {
+ if (errno != EINVAL || lastlen != 0) {
+ /*
+ * Something has gone genuinely wrong.
+ */
+ free(buf);
+ close(sd);
+ return 0;
+ }
+ /*
+ * Otherwise, it could just be that the buffer is too small.
+ */
+ } else {
+ if (ifc.ifc_len == lastlen) {
+ /*
+ * The length is the same as the last time; we're done.
+ */
+ break;
+ }
+ lastlen = ifc.ifc_len;
+ }
+ free(buf);
+ }
+
+ ifrp = ifc.ifc_req;
+ interfaces = (ifc.ifc_len / sizeof(struct ifreq)) + 1;
+
+ for (i = 1; i < interfaces; i++, ifrp++) {
+ if (strncmp(ifrp->ifr_name, Name, Len) == 0) {
+ free(buf);
+ close(sd);
+ return i;
+ }
+ }
+
+ free(buf);
+ close(sd);
+ return 0;
+}
+
+#ifdef _STDC_COMPAT
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+#ifdef _GETKSTAT_TEST
+
+int
+main(int argc, char **argv)
+{
+ int rc = 0;
+ u_long val = 0;
+
+ if (argc != 3) {
+ snmp_log(LOG_ERR, "Usage: %s stat_name var_name\n", argv[0]);
+ exit(1);
+ }
+
+ snmp_set_do_debugging(1);
+ rc = getKstat(argv[1], argv[2], &val);
+
+ if (rc == 0)
+ snmp_log(LOG_ERR, "%s = %lu\n", argv[2], val);
+ else
+ snmp_log(LOG_ERR, "rc =%d\n", rc);
+ return 0;
+}
+#endif /*_GETKSTAT_TEST */
+
+#ifdef _GETMIBSTAT_TEST
+
+int
+ip20comp(void *ifname, void *ipp)
+{
+ return (strncmp((char *) ifname,
+ ((mib2_ipAddrEntry_t *) ipp)->ipAdEntIfIndex.o_bytes,
+ ((mib2_ipAddrEntry_t *) ipp)->ipAdEntIfIndex.
+ o_length));
+}
+
+int
+ARP_Cmp_Addr(void *addr, void *ep)
+{
+ DEBUGMSGTL(("kernel_sunos5", "ARP: %lx <> %lx\n",
+ ((mib2_ipNetToMediaEntry_t *) ep)->ipNetToMediaNetAddress,
+ *(IpAddress *) addr));
+ if (((mib2_ipNetToMediaEntry_t *) ep)->ipNetToMediaNetAddress ==
+ *(IpAddress *)addr) {
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
+int
+IF_cmp(void *addr, void *ep)
+{
+ if (((mib2_ifEntry_t *)ep)->ifIndex ==((mib2_ifEntry_t *)addr)->ifIndex) {
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
+int
+main(int argc, char **argv)
+{
+ int rc = 0, i, idx;
+ mib2_ipAddrEntry_t ipbuf, *ipp = &ipbuf;
+ mib2_ipNetToMediaEntry_t entry, *ep = &entry;
+ mib2_ifEntry_t ifstat;
+ req_e req_type;
+ IpAddress LastAddr = 0;
+
+ if (argc != 3) {
+ snmp_log(LOG_ERR,
+ "Usage: %s if_name req_type (0 first, 1 exact, 2 next) \n",
+ argv[0]);
+ exit(1);
+ }
+
+ switch (atoi(argv[2])) {
+ case 0:
+ req_type = GET_FIRST;
+ break;
+ case 1:
+ req_type = GET_EXACT;
+ break;
+ case 2:
+ req_type = GET_NEXT;
+ break;
+ };
+
+ snmp_set_do_debugging(0);
+ while ((rc =
+ getMibstat(MIB_INTERFACES, &ifstat, sizeof(mib2_ifEntry_t),
+ req_type, &IF_cmp, &idx)) == 0) {
+ idx = ifstat.ifIndex;
+ DEBUGMSGTL(("kernel_sunos5", "Ifname = %s\n",
+ ifstat.ifDescr.o_bytes));
+ req_type = GET_NEXT;
+ }
+ rc = getMibstat(MIB_IP_ADDR, &ipbuf, sizeof(mib2_ipAddrEntry_t),
+ req_type, ip20comp, argv[1]);
+
+ if (rc == 0)
+ DEBUGMSGTL(("kernel_sunos5", "mtu = %ld\n",
+ ipp->ipAdEntInfo.ae_mtu));
+ else
+ DEBUGMSGTL(("kernel_sunos5", "rc =%d\n", rc));
+
+ while ((rc =
+ getMibstat(MIB_IP_NET, &entry,
+ sizeof(mib2_ipNetToMediaEntry_t), req_type,
+ &ARP_Cmp_Addr, &LastAddr)) == 0) {
+ LastAddr = ep->ipNetToMediaNetAddress;
+ DEBUGMSGTL(("kernel_sunos5", "Ipaddr = %lX\n", (u_long) LastAddr));
+ req_type = GET_NEXT;
+ }
+ return 0;
+}
+#endif /*_GETMIBSTAT_TEST */
+#endif /* SUNOS5 */
+
+
+/*-
+ * These variables describe the formatting of this file. If you don't like the
+ * template defaults, feel free to change them here (not in your .emacs file).
+ *
+ * Local Variables:
+ * comment-column: 32
+ * c-indent-level: 4
+ * c-continued-statement-offset: 4
+ * c-brace-offset: -4
+ * c-argdecl-indent: 0
+ * c-label-offset: -4
+ * fill-column: 79
+ * fill-prefix: " * "
+ * End:
+ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/kernel_sunos5.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/kernel_sunos5.h
new file mode 100644
index 0000000000..cdd2375a44
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/kernel_sunos5.h
@@ -0,0 +1,214 @@
+/*- This is a -*- C -*- compatible header file
+ *
+ * Generic public interface for SUNOS5_INSTRUMENTATION
+ *
+ * This file contains manifest constants (#defines), macros, enumerations,
+ * public structure definitions, static const definitions, global variable
+ * declarations, and function prototypes.
+ *
+ * This file contains types and structures for SunOS 5.x instrumentation
+ *
+ */
+
+#ifndef _KERNEL_SUNOS5_H /* duplicate include prevention */
+#define _KERNEL_SUNOS5_H
+
+#include <inet/mib2.h>
+
+#ifndef HAVE_COUNTER64
+typedef uint64_t Counter64;
+#endif
+
+#define COPY_IPADDR(fp, from, tp, to) \
+ fp = from; \
+ tp = to; \
+ *tp++ = *fp++; \
+ *tp++ = *fp++; \
+ *tp++ = *fp++; \
+ *tp++ = *fp++;
+
+#ifdef MIB2_IP_TRAFFIC_STATS
+#define SOLARIS_HAVE_RFC4293_SUPPORT
+#endif
+
+#ifdef MIB2_IP6
+#define SOLARIS_HAVE_IPV6_MIB_SUPPORT
+#endif
+
+/*-
+ * Manifest constants
+ */
+
+#define KSTAT_DATA_MAX 100 /* Maximum number of kstat entries. To be changed later */
+
+/*-
+ * Macros
+ */
+#define CACHE_MOREDATA 0x001 /* There are unread data outside cache */
+
+/*-
+ * Enumeration types
+ */
+
+typedef enum { GET_FIRST, GET_EXACT, GET_NEXT } req_e;
+typedef enum { FOUND, NOT_FOUND, NEED_NEXT } found_e;
+
+typedef enum {
+ MIB_SYSTEM = 0,
+ MIB_INTERFACES = 1,
+ MIB_AT = 2,
+ MIB_IP = 3,
+ MIB_IP_ADDR = 4,
+ MIB_IP_ROUTE = 5,
+ MIB_IP_NET = 6,
+ MIB_ICMP = 7,
+ MIB_TCP = 8,
+ MIB_TCP_CONN = 9,
+ MIB_UDP = 10,
+ MIB_UDP_LISTEN = 11,
+ MIB_EGP = 12,
+ MIB_CMOT = 13,
+ MIB_TRANSMISSION = 14,
+ MIB_SNMP = 15,
+#ifdef SOLARIS_HAVE_IPV6_MIB_SUPPORT
+ MIB_IP6_ADDR = 16,
+ MIB_TCP6_CONN,
+ MIB_UDP6_ENDPOINT,
+#endif
+ MIBCACHE_SIZE
+} mibgroup_e;
+
+/*-
+ * Structure definitions (use "typedef struct foo {} foo;" form)
+ */
+
+/*
+ * MIB-II cache. Simple buffering scheme - last read block is in the cache
+ */
+
+typedef struct mibcache {
+ mibgroup_e cache_groupid; /* MIB-II group */
+ size_t cache_size; /* Size of this cache table in bytes */
+ void *cache_addr; /* Pointer to real cache memory */
+ size_t cache_length; /* Useful length in bytes */
+ size_t cache_ttl; /* Time this type of cache entry stays valid */
+ time_t cache_time; /* CURRENT time left for this cache entry */
+ int cache_flags; /* Cache state */
+ int cache_last_found; /* Index of last cache element that was found */
+ void *cache_comp; /* Compare routine used to set the cache */
+ void *cache_arg; /* Argument for compare routine used to set the cache */
+} mibcache;
+
+/*
+ * Mapping between mibgroup_t, mibtable_t and mib2.h defines
+ */
+
+typedef struct mibmap {
+ int group; /* mib2.h group name */
+ int table; /* mib2.h table name */
+} mibmap;
+
+/*
+ * Structures, missing in <inet/mib2.h>
+ */
+typedef unsigned long TimeTicks;
+
+typedef struct mib2_ifEntry {
+ int ifIndex; /* ifEntry 1 */
+ DeviceName ifDescr; /* ifEntry 2 */
+ int ifType; /* ifEntry 3 */
+ int ifMtu; /* ifEntry 4 */
+ Gauge ifSpeed; /* ifEntry 5 */
+ PhysAddress ifPhysAddress; /* ifEntry 6 */
+ int ifAdminStatus; /* ifEntry 7 */
+ int ifOperStatus; /* ifEntry 8 */
+ TimeTicks ifLastChange; /* ifEntry 9 */
+ Counter ifInOctets; /* ifEntry 10 */
+ Counter ifInUcastPkts; /* ifEntry 11 */
+ Counter ifInNUcastPkts; /* ifEntry 12 */
+ Counter ifInDiscards; /* ifEntry 13 */
+ Counter ifInErrors; /* ifEntry 14 */
+ Counter ifInUnknownProtos; /* ifEntry 15 */
+ Counter ifOutOctets; /* ifEntry 16 */
+ Counter ifOutUcastPkts; /* ifEntry 17 */
+ Counter ifOutNUcastPkts; /* ifEntry 18 */
+ Counter ifOutDiscards; /* ifEntry 19 */
+ Counter ifOutErrors; /* ifEntry 20 */
+ Gauge ifOutQLen; /* ifEntry 21 */
+ int ifSpecific; /* ifEntry 22 */
+
+ /*
+ * Support ifXTable.
+ */
+ Counter64 ifHCInOctets;
+ Counter64 ifHCInUcastPkts;
+ Counter64 ifHCInMulticastPkts;
+ Counter64 ifHCInBroadcastPkts;
+ Counter64 ifHCOutOctets;
+ Counter64 ifHCOutUcastPkts;
+ Counter64 ifHCOutMulticastPkts;
+ Counter64 ifHCOutBroadcastPkts;
+
+ /*
+ * Counters not part of ifTable or ifXTable
+ */
+ Counter ifCollisions;
+ int flags; /* interface flags (IFF_*) */
+} mib2_ifEntry_t;
+
+/*-
+ * Static const definitions (must be declared static and initialized)
+ */
+
+
+/*-
+ * Global variable declarations (using extern and without initialization)
+ */
+
+/*-
+ * Function prototypes (use void as argument type if there are no arguments)
+ */
+
+#ifdef _STDC_COMPAT
+#ifdef __cplusplus
+extern "C" {
+#endif
+#endif
+ void init_kernel_sunos5(void);
+
+ int getKstat(const char *statname, const char *varname,
+ void *value);
+ int getMibstat(mibgroup_e grid, void *resp,
+ size_t entrysize, req_e req_type,
+ int (*comp) (void *, void *), void *arg);
+ int Get_everything(void *, void *);
+ int getKstatInt(const char *classname,
+ const char *statname, const char *varname,
+ int *value);
+
+ int getKstatString(const char *statname, const char *varname,
+ char *value, size_t value_len);
+
+ int solaris2_if_nametoindex(const char *, int);
+
+#ifdef _STDC_COMPAT
+#ifdef __cplusplus
+}
+#endif
+#endif
+/*-
+ * These variables describe the formatting of this file. If you don't like the
+ * template defaults, feel free to change them here (not in your .emacs file).
+ *
+ * Local Variables:
+ * comment-column: 32
+ * c-indent-level: 4
+ * c-continued-statement-offset: 4
+ * c-brace-offset: -4
+ * c-argdecl-indent: 0
+ * c-label-offset: -4
+ * fill-column: 79
+ * fill-prefix: " * "
+ * End:
+ */
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII.h
new file mode 100644
index 0000000000..9b60d36a03
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII.h
@@ -0,0 +1,32 @@
+/*
+ * module to include the modules relavent to the mib-II mib(s)
+ */
+
+config_require(mibII/system_mib)
+config_require(mibII/sysORTable)
+config_require(mibII/at)
+config_require(mibII/ifTable)
+config_require(mibII/ip)
+config_require(mibII/snmp_mib)
+config_require(mibII/tcp)
+config_require(mibII/icmp)
+config_require(mibII/udp)
+config_require(mibII/vacm_vars)
+config_require(mibII/setSerialNo)
+
+/* mibII/ipv6 is activated via --enable-ipv6 and only builds on Linux+*BSD */
+#if defined(NETSNMP_ENABLE_IPV6) && (defined(linux) || defined(freebsd3) || defined(netbsd) || defined(openbsd))
+config_require(mibII/ipv6)
+#endif
+
+#ifdef NETSNMP_INCLUDE_IFTABLE_REWRITES
+config_require(if-mib)
+#endif
+
+/*
+ * these new module re-rewrites have only been implemented for
+ * linux.
+ */
+#if defined( linux )
+config_require(ip-mib ip-forward-mib tcp-mib udp-mib)
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/at.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/at.c
new file mode 100644
index 0000000000..67f83fda86
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/at.c
@@ -0,0 +1,1263 @@
+/*
+ * Template MIB group implementation - at.c
+ *
+ */
+
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include "mibII_common.h" /* for NETSNMP_KLOOKUP */
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if defined(IFNET_NEEDS_KERNEL) && !defined(_KERNEL)
+#define _KERNEL 1
+#define _I_DEFINED_KERNEL
+#endif
+#include <sys/types.h>
+#if TIME_WITH_SYS_TIME
+# if defined (WIN32) || defined (cygwin)
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_NET_IF_H
+#include <net/if.h>
+#endif
+#if HAVE_NET_IF_VAR_H
+#include <net/if_var.h>
+#endif
+#ifdef _I_DEFINED_KERNEL
+#undef _KERNEL
+#endif
+
+#if HAVE_NETINET_IF_ETHER_H
+#include <netinet/if_ether.h>
+#endif
+#if HAVE_INET_MIB2_H
+#include <inet/mib2.h>
+#endif
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#if HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif
+#if HAVE_NET_IF_DL_H
+#ifndef dynix
+#include <net/if_dl.h>
+#else
+#include <sys/net/if_dl.h>
+#endif
+#endif
+#if HAVE_SYS_STREAM_H
+#include <sys/stream.h>
+#endif
+#if HAVE_NET_ROUTE_H
+#include <net/route.h>
+#endif
+#ifdef solaris2
+#include "kernel_sunos5.h"
+#endif
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#ifdef hpux11
+#include <sys/mib.h>
+#include <netinet/mib_kern.h>
+#endif /* hpux11 */
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/auto_nlist.h>
+
+#include "at.h"
+#include "interfaces.h"
+
+#include <net-snmp/data_access/interface.h>
+
+#if defined(HAVE_SYS_SYSCTL_H) && !defined(NETSNMP_CAN_USE_SYSCTL)
+# if defined(RTF_LLINFO)
+# define NETSNMP_CAN_USE_SYSCTL 1
+# endif
+#endif
+
+#ifdef cygwin
+#include <windows.h>
+#endif
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+#if !defined (WIN32) && !defined (cygwin)
+#ifndef solaris2
+static void ARP_Scan_Init(void);
+#ifdef ARP_SCAN_FOUR_ARGUMENTS
+static int ARP_Scan_Next(u_long *, char *, u_long *, u_short *);
+#else
+static int ARP_Scan_Next(u_long *, char *, u_long *);
+#endif
+#endif
+#endif
+
+ /*********************
+ *
+ * Public interface functions
+ *
+ *********************/
+
+/*
+ * define the structure we're going to ask the agent to register our
+ * information at
+ */
+struct variable1 at_variables[] = {
+ {ATIFINDEX, ASN_INTEGER, RONLY, var_atEntry, 1, {1}},
+ {ATPHYSADDRESS, ASN_OCTET_STR, RONLY, var_atEntry, 1, {2}},
+ {ATNETADDRESS, ASN_IPADDRESS, RONLY, var_atEntry, 1, {3}}
+};
+
+/*
+ * Define the OID pointer to the top of the mib tree that we're
+ * registering underneath
+ */
+oid at_variables_oid[] = { SNMP_OID_MIB2, 3, 1, 1 };
+
+void
+init_at(void)
+{
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("mibII/at", at_variables, variable1, at_variables_oid);
+#ifdef solaris2
+ init_kernel_sunos5();
+#endif
+}
+
+#if !defined (WIN32) && !defined (cygwin)
+#ifndef solaris2
+
+/*
+ * var_atEntry(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ *
+ */
+
+u_char *
+var_atEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ /*
+ * Address Translation table object identifier is of form:
+ * 1.3.6.1.2.1.3.1.1.1.interface.1.A.B.C.D, where A.B.C.D is IP address.
+ * Interface is at offset 10,
+ * IPADDR starts at offset 12.
+ *
+ * IP Net to Media table object identifier is of form:
+ * 1.3.6.1.2.1.4.22.1.1.1.interface.A.B.C.D, where A.B.C.D is IP address.
+ * Interface is at offset 10,
+ * IPADDR starts at offset 11.
+ */
+ u_char *cp;
+ oid *op;
+ oid lowest[16];
+ oid current[16];
+ static char PhysAddr[6], LowPhysAddr[6];
+ u_long Addr, LowAddr, foundone;
+ static in_addr_t addr_ret;
+#ifdef ARP_SCAN_FOUR_ARGUMENTS
+ u_short ifIndex, lowIfIndex = 0;
+#endif /* ARP_SCAN_FOUR_ARGUMENTS */
+ u_long ifType, lowIfType = 0;
+
+ int oid_length;
+
+ /*
+ * fill in object part of name for current (less sizeof instance part)
+ */
+ memcpy((char *) current, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+
+ if (current[6] == 3) { /* AT group oid */
+ oid_length = 16;
+ } else { /* IP NetToMedia group oid */
+ oid_length = 15;
+ }
+
+ LowAddr = 0; /* Don't have one yet */
+ foundone = 0;
+ ARP_Scan_Init();
+ for (;;) {
+#ifdef ARP_SCAN_FOUR_ARGUMENTS
+ if (ARP_Scan_Next(&Addr, PhysAddr, &ifType, &ifIndex) == 0)
+ break;
+ current[10] = ifIndex;
+
+ if (current[6] == 3) { /* AT group oid */
+ current[11] = 1;
+ op = current + 12;
+ } else { /* IP NetToMedia group oid */
+ op = current + 11;
+ }
+#else /* ARP_SCAN_FOUR_ARGUMENTS */
+ if (ARP_Scan_Next(&Addr, PhysAddr, &ifType) == 0)
+ break;
+ current[10] = 1;
+
+ if (current[6] == 3) { /* AT group oid */
+ current[11] = 1;
+ op = current + 12;
+ } else { /* IP NetToMedia group oid */
+ op = current + 11;
+ }
+#endif /* ARP_SCAN_FOUR_ARGUMENTS */
+ cp = (u_char *) & Addr;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+
+ if (exact) {
+ if (snmp_oid_compare(current, oid_length, name, *length) == 0) {
+ memcpy((char *) lowest, (char *) current,
+ oid_length * sizeof(oid));
+ LowAddr = Addr;
+ foundone = 1;
+#ifdef ARP_SCAN_FOUR_ARGUMENTS
+ lowIfIndex = ifIndex;
+#endif /* ARP_SCAN_FOUR_ARGUMENTS */
+ memcpy(LowPhysAddr, PhysAddr, sizeof(PhysAddr));
+ lowIfType = ifType;
+ break; /* no need to search further */
+ }
+ } else {
+ if ((snmp_oid_compare(current, oid_length, name, *length) > 0)
+ && ((foundone == 0)
+ ||
+ (snmp_oid_compare
+ (current, oid_length, lowest, oid_length) < 0))) {
+ /*
+ * if new one is greater than input and closer to input than
+ * previous lowest, save this one as the "next" one.
+ */
+ memcpy((char *) lowest, (char *) current,
+ oid_length * sizeof(oid));
+ LowAddr = Addr;
+ foundone = 1;
+#ifdef ARP_SCAN_FOUR_ARGUMENTS
+ lowIfIndex = ifIndex;
+#endif /* ARP_SCAN_FOUR_ARGUMENTS */
+ memcpy(LowPhysAddr, PhysAddr, sizeof(PhysAddr));
+ lowIfType = ifType;
+ }
+ }
+ }
+ if (foundone == 0)
+ return (NULL);
+
+ memcpy((char *) name, (char *) lowest, oid_length * sizeof(oid));
+ *length = oid_length;
+ *write_method = 0;
+ switch (vp->magic) {
+ case IPMEDIAIFINDEX: /* also ATIFINDEX */
+ *var_len = sizeof long_return;
+#ifdef ARP_SCAN_FOUR_ARGUMENTS
+ long_return = lowIfIndex;
+#else /* ARP_SCAN_FOUR_ARGUMENTS */
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = 1; /* XXX */
+#endif /* ARP_SCAN_FOUR_ARGUMENTS */
+ return (u_char *) & long_return;
+ case IPMEDIAPHYSADDRESS: /* also ATPHYSADDRESS */
+ *var_len = sizeof(LowPhysAddr);
+ return (u_char *) LowPhysAddr;
+ case IPMEDIANETADDRESS: /* also ATNETADDRESS */
+ *var_len = sizeof(addr_ret);
+ addr_ret = LowAddr;
+ return (u_char *) & addr_ret;
+ case IPMEDIATYPE:
+ *var_len = sizeof long_return;
+ long_return = lowIfType;
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_atEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+#else /* solaris2 */
+
+typedef struct if_ip {
+ int ifIdx;
+ IpAddress ipAddr;
+} if_ip_t;
+
+static int
+AT_Cmp(void *addr, void *ep)
+{
+ mib2_ipNetToMediaEntry_t *mp = (mib2_ipNetToMediaEntry_t *) ep;
+ int ret = -1;
+ oid index;
+
+#ifdef NETSNMP_INCLUDE_IFTABLE_REWRITES
+ mp->ipNetToMediaIfIndex.o_bytes[mp->ipNetToMediaIfIndex.o_length] = '\0';
+ index = netsnmp_access_interface_index_find(
+ mp->ipNetToMediaIfIndex.o_bytes);
+#else
+ index = Interface_Index_By_Name(mp->ipNetToMediaIfIndex.o_bytes,
+ mp->ipNetToMediaIfIndex.o_length);
+#endif
+ DEBUGMSGTL(("mibII/at", "......... AT_Cmp %lx<>%lx %d<>%d (%.5s)\n",
+ mp->ipNetToMediaNetAddress, ((if_ip_t *) addr)->ipAddr,
+ ((if_ip_t *) addr)->ifIdx, index,
+ mp->ipNetToMediaIfIndex.o_bytes));
+ if (mp->ipNetToMediaNetAddress != ((if_ip_t *) addr)->ipAddr)
+ ret = 1;
+ else if (((if_ip_t *) addr)->ifIdx != index)
+ ret = 1;
+ else
+ ret = 0;
+ DEBUGMSGTL(("mibII/at", "......... AT_Cmp returns %d\n", ret));
+ return ret;
+}
+
+u_char *
+var_atEntry(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ /*
+ * object identifier is of form:
+ * 1.3.6.1.2.1.3.1.1.1.interface.1.A.B.C.D, where A.B.C.D is IP address.
+ * Interface is at offset 10,
+ * IPADDR starts at offset 12.
+ */
+#define AT_MAX_NAME_LENGTH 16
+#define AT_IFINDEX_OFF 10
+ u_char *cp;
+ oid *op;
+ oid lowest[AT_MAX_NAME_LENGTH];
+ oid current[AT_MAX_NAME_LENGTH];
+ if_ip_t NextAddr;
+ mib2_ipNetToMediaEntry_t entry;
+ static mib2_ipNetToMediaEntry_t Lowentry;
+ int Found = 0;
+ req_e req_type;
+ int offset, olength;
+ static in_addr_t addr_ret;
+
+ /*
+ * fill in object part of name for current (less sizeof instance part)
+ */
+
+ DEBUGMSGTL(("mibII/at", "var_atEntry: "));
+ DEBUGMSGOID(("mibII/at", vp->name, vp->namelen));
+ DEBUGMSG(("mibII/at", " %d\n", exact));
+
+ memset(&Lowentry, 0, sizeof(Lowentry));
+ memcpy((char *) current, (char *) vp->name, vp->namelen * sizeof(oid));
+ lowest[0] = 1024;
+ for (NextAddr.ipAddr = (u_long) - 1, NextAddr.ifIdx = 255, req_type =
+ GET_FIRST;;
+ NextAddr.ipAddr = entry.ipNetToMediaNetAddress, NextAddr.ifIdx =
+ current[AT_IFINDEX_OFF], req_type = GET_NEXT) {
+ if (getMibstat
+ (MIB_IP_NET, &entry, sizeof(mib2_ipNetToMediaEntry_t),
+ req_type, &AT_Cmp, &NextAddr) != 0)
+ break;
+#ifdef NETSNMP_INCLUDE_IFTABLE_REWRITES
+ entry.ipNetToMediaIfIndex.o_bytes[entry.ipNetToMediaIfIndex.o_length] = '\0';
+ current[AT_IFINDEX_OFF] = netsnmp_access_interface_index_find(
+ entry.ipNetToMediaIfIndex.o_bytes);
+#else
+ current[AT_IFINDEX_OFF] =
+ Interface_Index_By_Name(entry.ipNetToMediaIfIndex.o_bytes,
+ entry.ipNetToMediaIfIndex.o_length);
+#endif
+ if (current[6] == 3) { /* AT group oid */
+ current[AT_IFINDEX_OFF + 1] = 1;
+ offset = AT_IFINDEX_OFF + 2;
+ olength = AT_IFINDEX_OFF + 6;
+ } else {
+ offset = AT_IFINDEX_OFF + 1;
+ olength = AT_IFINDEX_OFF + 5;
+ }
+ COPY_IPADDR(cp, (u_char *) & entry.ipNetToMediaNetAddress, op,
+ current + offset);
+ if (exact) {
+ if (snmp_oid_compare(current, olength, name, *length) == 0) {
+ memcpy((char *) lowest, (char *) current,
+ olength * sizeof(oid));
+ Lowentry = entry;
+ Found++;
+ break; /* no need to search further */
+ }
+ } else {
+ if (snmp_oid_compare(current, olength, name, *length) > 0
+ && snmp_oid_compare(current, olength, lowest,
+ *length) < 0) {
+ /*
+ * if new one is greater than input and closer to input than
+ * previous lowest, and is not equal to it, save this one as the "next" one.
+ */
+ memcpy((char *) lowest, (char *) current,
+ olength * sizeof(oid));
+ Lowentry = entry;
+ Found++;
+ }
+ }
+ }
+ DEBUGMSGTL(("mibII/at", "... Found = %d\n", Found));
+ if (Found == 0)
+ return (NULL);
+ memcpy((char *) name, (char *) lowest, olength * sizeof(oid));
+ *length = olength;
+ *write_method = 0;
+ switch (vp->magic) {
+ case IPMEDIAIFINDEX:
+ *var_len = sizeof long_return;
+#ifdef NETSNMP_INCLUDE_IFTABLE_REWRITES
+ Lowentry.ipNetToMediaIfIndex.o_bytes[
+ Lowentry.ipNetToMediaIfIndex.o_length] = '\0';
+ long_return = netsnmp_access_interface_index_find(
+ Lowentry.ipNetToMediaIfIndex.o_bytes);
+#else
+ long_return = Interface_Index_By_Name(
+ Lowentry.ipNetToMediaIfIndex.o_bytes,
+ Lowentry.ipNetToMediaIfIndex.o_length);
+#endif
+ return (u_char *) & long_return;
+ case IPMEDIAPHYSADDRESS:
+ *var_len = Lowentry.ipNetToMediaPhysAddress.o_length;
+ return Lowentry.ipNetToMediaPhysAddress.o_bytes;
+ case IPMEDIANETADDRESS:
+ *var_len = sizeof(addr_ret);
+ addr_ret = Lowentry.ipNetToMediaNetAddress;
+ return (u_char *) &addr_ret;
+ case IPMEDIATYPE:
+ *var_len = sizeof long_return;
+ long_return = Lowentry.ipNetToMediaType;
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_atEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+#endif /* solaris2 */
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+#ifndef solaris2
+
+static int arptab_size, arptab_current;
+#if NETSNMP_CAN_USE_SYSCTL
+static char *lim, *rtnext;
+static char *at = 0;
+#else
+#ifdef STRUCT_ARPHD_HAS_AT_NEXT
+static struct arphd *at = 0;
+static struct arptab *at_ptr, at_entry;
+static struct arpcom at_com;
+#elif defined(hpux11)
+static mib_ipNetToMediaEnt *at = (mib_ipNetToMediaEnt *) 0;
+#else
+
+/*
+ * at used to be allocated every time we needed to look at the arp cache.
+ * This cause us to parse /proc/net/arp twice for each request and didn't
+ * allow us to filter things like we'd like to. So now we use it
+ * semi-statically. We initialize it to size 0 and if we need more room
+ * we realloc room for ARP_CACHE_INCR more entries in the table.
+ * We never release what we've taken . . .
+ */
+#define ARP_CACHE_INCR 1024
+static struct arptab *at = NULL;
+static int arptab_curr_max_size = 0;
+
+#endif
+#endif /* NETSNMP_CAN_USE_SYSCTL */
+
+static void
+ARP_Scan_Init(void)
+{
+#ifndef NETSNMP_CAN_USE_SYSCTL
+#ifndef linux
+#ifdef hpux11
+
+ int fd;
+ struct nmparms p;
+ int val;
+ unsigned int ulen;
+ int ret;
+
+ if (at)
+ free(at);
+ at = (mib_ipNetToMediaEnt *) 0;
+ arptab_size = 0;
+
+ if ((fd = open_mib("/dev/ip", O_RDONLY, 0, NM_ASYNC_OFF)) >= 0) {
+ p.objid = ID_ipNetToMediaTableNum;
+ p.buffer = (void *) &val;
+ ulen = sizeof(int);
+ p.len = &ulen;
+ if ((ret = get_mib_info(fd, &p)) == 0)
+ arptab_size = val;
+
+ if (arptab_size > 0) {
+ ulen = (unsigned) arptab_size *sizeof(mib_ipNetToMediaEnt);
+ at = (mib_ipNetToMediaEnt *) malloc(ulen);
+ p.objid = ID_ipNetToMediaTable;
+ p.buffer = (void *) at;
+ p.len = &ulen;
+ if ((ret = get_mib_info(fd, &p)) < 0)
+ arptab_size = 0;
+ }
+
+ close_mib(fd);
+ }
+
+ arptab_current = 0;
+
+#else /* hpux11 */
+
+ if (!at) {
+#ifdef ARPTAB_SIZE_SYMBOL
+ auto_nlist(ARPTAB_SIZE_SYMBOL, (char *) &arptab_size,
+ sizeof arptab_size);
+#ifdef STRUCT_ARPHD_HAS_AT_NEXT
+ at = (struct arphd *) malloc(arptab_size * sizeof(struct arphd));
+#else
+ at = (struct arptab *) malloc(arptab_size * sizeof(struct arptab));
+#endif
+#else
+ return;
+#endif
+ }
+#ifdef STRUCT_ARPHD_HAS_AT_NEXT
+ auto_nlist(ARPTAB_SYMBOL, (char *) at,
+ arptab_size * sizeof(struct arphd));
+ at_ptr = at[0].at_next;
+#else
+ auto_nlist(ARPTAB_SYMBOL, (char *) at,
+ arptab_size * sizeof(struct arptab));
+#endif
+ arptab_current = 0;
+
+#endif /* hpux11 */
+#else /* linux */
+
+ static time_t tm = 0; /* Time of last scan */
+ FILE *in;
+ int i;
+ char line[128];
+ int za, zb, zc, zd, ze, zf, zg, zh, zi, zj;
+ char ifname[21];
+
+ arptab_current = 0; /* Anytime this is called we need to reset 'current' */
+
+ if (time(NULL) < tm + 1) { /*Our cool one second cache implementation :-) */
+ return;
+ }
+
+ in = fopen("/proc/net/arp", "r");
+ if (!in) {
+ snmp_log(LOG_ERR, "snmpd: Cannot open /proc/net/arp\n");
+ arptab_size = 0;
+ return;
+ }
+
+ /*
+ * Get rid of the header line
+ */
+ fgets(line, sizeof(line), in);
+
+ i = 0;
+ while (fgets(line, sizeof(line), in)) {
+ u_long tmp_a;
+ int tmp_flags;
+ if (i >= arptab_curr_max_size) {
+ struct arptab *newtab = (struct arptab *)
+ realloc(at, (sizeof(struct arptab) *
+ (arptab_curr_max_size + ARP_CACHE_INCR)));
+ if (newtab == at) {
+ snmp_log(LOG_ERR,
+ "Error allocating more space for arpcache. "
+ "Cache will continue to be limited to %d entries",
+ arptab_curr_max_size);
+ break;
+ } else {
+ arptab_curr_max_size += ARP_CACHE_INCR;
+ at = newtab;
+ }
+ }
+ if (12 !=
+ sscanf(line,
+ "%d.%d.%d.%d 0x%*x 0x%x %x:%x:%x:%x:%x:%x %*[^ ] %20s\n",
+ &za, &zb, &zc, &zd, &tmp_flags, &ze, &zf, &zg, &zh, &zi,
+ &zj, ifname)) {
+ snmp_log(LOG_ERR, "Bad line in /proc/net/arp: %s", line);
+ continue;
+ }
+ /*
+ * Invalidated entries have their flag set to 0.
+ * * We want to ignore them
+ */
+ if (tmp_flags == 0) {
+ continue;
+ }
+ ifname[sizeof(ifname)-1] = 0; /* make sure name is null terminated */
+ at[i].at_flags = tmp_flags;
+ at[i].at_enaddr[0] = ze;
+ at[i].at_enaddr[1] = zf;
+ at[i].at_enaddr[2] = zg;
+ at[i].at_enaddr[3] = zh;
+ at[i].at_enaddr[4] = zi;
+ at[i].at_enaddr[5] = zj;
+ tmp_a = ((u_long) za << 24) |
+ ((u_long) zb << 16) | ((u_long) zc << 8) | ((u_long) zd);
+ at[i].at_iaddr.s_addr = htonl(tmp_a);
+ at[i].if_index = netsnmp_access_interface_index_find(ifname);
+ i++;
+ }
+ arptab_size = i;
+
+ fclose(in);
+ time(&tm);
+#endif /* linux */
+#else /* NETSNMP_CAN_USE_SYSCTL */
+
+ int mib[6];
+ size_t needed;
+
+ mib[0] = CTL_NET;
+ mib[1] = PF_ROUTE;
+ mib[2] = 0;
+ mib[3] = AF_INET;
+ mib[4] = NET_RT_FLAGS;
+ mib[5] = RTF_LLINFO;
+
+ if (at)
+ free(at);
+ rtnext = lim = at = 0;
+
+ if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
+ snmp_log_perror("route-sysctl-estimate");
+ else {
+ if ((at = malloc(needed ? needed : 1)) == NULL)
+ snmp_log_perror("malloc");
+ else {
+ if (sysctl(mib, 6, at, &needed, NULL, 0) < 0)
+ snmp_log_perror("actual retrieval of routing table");
+ else {
+ lim = at + needed;
+ rtnext = at;
+ }
+ }
+ }
+
+#endif /* NETSNMP_CAN_USE_SYSCTL */
+}
+
+#ifdef ARP_SCAN_FOUR_ARGUMENTS
+static int
+ARP_Scan_Next(u_long * IPAddr, char *PhysAddr, u_long * ifType,
+ u_short * ifIndex)
+#else
+static int
+ARP_Scan_Next(u_long * IPAddr, char *PhysAddr, u_long * ifType)
+#endif
+{
+#ifndef NETSNMP_CAN_USE_SYSCTL
+#ifdef linux
+ if (arptab_current < arptab_size) {
+ /*
+ * copy values
+ */
+ *IPAddr = at[arptab_current].at_iaddr.s_addr;
+ *ifType =
+ (at[arptab_current].
+ at_flags & ATF_PERM) ? 4 /*static */ : 3 /*dynamic */ ;
+ *ifIndex = at[arptab_current].if_index;
+ memcpy(PhysAddr, &at[arptab_current].at_enaddr,
+ sizeof(at[arptab_current].at_enaddr));
+
+ /*
+ * increment to point next entry
+ */
+ arptab_current++;
+ /*
+ * return success
+ */
+ return (1);
+ }
+#elif defined(hpux11)
+ if (arptab_current < arptab_size) {
+ /*
+ * copy values
+ */
+ *IPAddr = at[arptab_current].NetAddr;
+ memcpy(PhysAddr, at[arptab_current].PhysAddr.o_bytes,
+ at[arptab_current].PhysAddr.o_length);
+ *ifType = at[arptab_current].Type;
+ *ifIndex = at[arptab_current].IfIndex;
+ /*
+ * increment to point next entry
+ */
+ arptab_current++;
+ /*
+ * return success
+ */
+ return (1);
+ }
+#elif !defined(ARP_SCAN_FOUR_ARGUMENTS) || defined(hpux)
+ register struct arptab *atab;
+
+ while (arptab_current < arptab_size) {
+#ifdef STRUCT_ARPHD_HAS_AT_NEXT
+ /*
+ * The arp table is an array of linked lists of arptab entries.
+ * Unused slots have pointers back to the array entry itself
+ */
+
+ if (at_ptr == (auto_nlist_value(ARPTAB_SYMBOL) +
+ arptab_current * sizeof(struct arphd))) {
+ /*
+ * Usused
+ */
+ arptab_current++;
+ at_ptr = at[arptab_current].at_next;
+ continue;
+ }
+
+ if (!NETSNMP_KLOOKUP(at_ptr, (char *) &at_entry, sizeof(struct arptab))) {
+ DEBUGMSGTL(("mibII/at:ARP_Scan_Next", "klookup failed\n"));
+ break;
+ }
+
+ if (!NETSNMP_KLOOKUP(at_entry.at_ac, (char *) &at_com, sizeof(struct arpcom))) {
+ DEBUGMSGTL(("mibII/at:ARP_Scan_Next", "klookup failed\n"));
+ break;
+ }
+
+ at_ptr = at_entry.at_next;
+ atab = &at_entry;
+ *ifIndex = at_com.ac_if.if_index; /* not strictly ARPHD */
+#else /* STRUCT_ARPHD_HAS_AT_NEXT */
+ atab = &at[arptab_current++];
+#endif /* STRUCT_ARPHD_HAS_AT_NEXT */
+ if (!(atab->at_flags & ATF_COM))
+ continue;
+ *ifType = (atab->at_flags & ATF_PERM) ? 4 : 3;
+ *IPAddr = atab->at_iaddr.s_addr;
+#if defined (sunV3) || defined(sparc) || defined(hpux)
+ memcpy(PhysAddr, (char *) &atab->at_enaddr,
+ sizeof(atab->at_enaddr));
+#endif
+#if defined(mips) || defined(ibm032)
+ memcpy(PhysAddr, (char *) atab->at_enaddr,
+ sizeof(atab->at_enaddr));
+#endif
+ return (1);
+ }
+#endif /* linux || hpux11 || !ARP_SCAN_FOUR_ARGUMENTS || hpux */
+
+ return 0; /* we need someone with an irix box to fix this section */
+
+#else /* !NETSNMP_CAN_USE_SYSCTL */
+ struct rt_msghdr *rtm;
+ struct sockaddr_inarp *sin;
+ struct sockaddr_dl *sdl;
+
+ while (rtnext < lim) {
+ rtm = (struct rt_msghdr *) rtnext;
+ sin = (struct sockaddr_inarp *) (rtm + 1);
+ sdl = (struct sockaddr_dl *) (sin + 1);
+ rtnext += rtm->rtm_msglen;
+ if (sdl->sdl_alen) {
+#ifdef irix6
+ *IPAddr = sin->sarp_addr.s_addr;
+#else
+ *IPAddr = sin->sin_addr.s_addr;
+#endif
+ memcpy(PhysAddr, (char *) LLADDR(sdl), sdl->sdl_alen);
+ *ifIndex = sdl->sdl_index;
+ *ifType = 1; /* XXX */
+ return (1);
+ }
+ }
+ return (0); /* "EOF" */
+#endif /* !NETSNMP_CAN_USE_SYSCTL */
+}
+#endif /* solaris2 */
+
+#else /* WIN32 cygwin */
+#include <iphlpapi.h>
+
+extern WriteMethod write_arp;
+MIB_IPNETROW *arp_row = NULL;
+int create_flag = 0;
+
+u_char *
+var_atEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ /*
+ * Address Translation table object identifier is of form:
+ * 1.3.6.1.2.1.3.1.?.interface.1.A.B.C.D, where A.B.C.D is IP address.
+ * Interface is at offset 10,
+ * IPADDR starts at offset 12.
+ *
+ * IP Net to Media table object identifier is of form:
+ * 1.3.6.1.2.1.4.22.1.?.interface.A.B.C.D, where A.B.C.D is IP address.
+ * Interface is at offset 10,
+ * IPADDR starts at offset 11.
+ */
+ u_char *cp;
+ oid *op;
+ oid lowest[16];
+ oid current[16];
+ int oid_length;
+ int lowState = -1; /* Don't have one yet */
+ PMIB_IPNETTABLE pIpNetTable = NULL;
+ DWORD status = NO_ERROR;
+ DWORD dwActualSize = 0;
+ UINT i;
+ u_char dest_addr[4];
+ static in_addr_t addr_ret;
+
+ /*
+ * fill in object part of name for current (less sizeof instance part)
+ */
+ memcpy((char *) current, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+
+ if (current[6] == 3) { /* AT group oid */
+ oid_length = 16;
+ } else { /* IP NetToMedia group oid */
+ oid_length = 15;
+ }
+
+ status = GetIpNetTable(pIpNetTable, &dwActualSize, TRUE);
+ if (status == ERROR_INSUFFICIENT_BUFFER) {
+ pIpNetTable = (PMIB_IPNETTABLE) malloc(dwActualSize);
+ if (pIpNetTable != NULL) {
+ /*
+ * Get the sorted IpNet Table
+ */
+ status = GetIpNetTable(pIpNetTable, &dwActualSize, TRUE);
+ }
+ }
+
+
+ if (status == NO_ERROR) {
+ for (i = 0; i < pIpNetTable->dwNumEntries; ++i) {
+ current[10] = pIpNetTable->table[i].dwIndex;
+
+
+ if (current[6] == 3) { /* AT group oid */
+ current[11] = 1;
+ op = current + 12;
+ } else { /* IP NetToMedia group oid */
+ op = current + 11;
+ }
+ cp = (u_char *) & pIpNetTable->table[i].dwAddr;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+
+ if (exact) {
+ if (snmp_oid_compare(current, oid_length, name, *length) ==
+ 0) {
+ memcpy((char *) lowest, (char *) current,
+ oid_length * sizeof(oid));
+ lowState = 0;
+ break; /* no need to search further */
+ }
+ } else {
+ if (snmp_oid_compare(current, oid_length, name, *length) >
+ 0) {
+ memcpy((char *) lowest, (char *) current,
+ oid_length * sizeof(oid));
+ lowState = 0;
+ break; /* As the table is sorted, no need to search further */
+ }
+ }
+ }
+ }
+ if (arp_row == NULL) {
+ /*
+ * Free allocated memory in case of SET request's FREE phase
+ */
+ arp_row = (PMIB_IPNETROW) malloc(sizeof(MIB_IPNETROW));
+ }
+
+ if (lowState < 0 || status != NO_ERROR) {
+ /*
+ * for creation of new row, only ipNetToMediaTable case is considered
+ */
+ if (*length == 15 || *length == 16) {
+ create_flag = 1;
+ *write_method = write_arp;
+ arp_row->dwIndex = name[10];
+
+ if (*length == 15) { /* ipNetToMediaTable */
+ i = 11;
+ } else { /* at Table */
+
+ i = 12;
+ }
+
+ dest_addr[0] = (u_char) name[i];
+ dest_addr[1] = (u_char) name[i + 1];
+ dest_addr[2] = (u_char) name[i + 2];
+ dest_addr[3] = (u_char) name[i + 3];
+ arp_row->dwAddr = *((DWORD *) dest_addr);
+
+ arp_row->dwType = 4; /* Static */
+ arp_row->dwPhysAddrLen = 0;
+ }
+ free(pIpNetTable);
+ return (NULL);
+ }
+
+ create_flag = 0;
+ memcpy((char *) name, (char *) lowest, oid_length * sizeof(oid));
+ *length = oid_length;
+ *write_method = write_arp;
+ *arp_row = pIpNetTable->table[i];
+
+ switch (vp->magic) {
+ case IPMEDIAIFINDEX: /* also ATIFINDEX */
+ *var_len = sizeof long_return;
+ long_return = pIpNetTable->table[i].dwIndex;
+ free(pIpNetTable);
+ return (u_char *) & long_return;
+ case IPMEDIAPHYSADDRESS: /* also ATPHYSADDRESS */
+ *var_len = pIpNetTable->table[i].dwPhysAddrLen;
+ memcpy(return_buf, pIpNetTable->table[i].bPhysAddr, *var_len);
+ free(pIpNetTable);
+ return (u_char *) return_buf;
+ case IPMEDIANETADDRESS: /* also ATNETADDRESS */
+ *var_len = sizeof(addr_ret);
+ addr_ret = pIpNetTable->table[i].dwAddr;
+ free(pIpNetTable);
+ return (u_char *) & addr_ret;
+ case IPMEDIATYPE:
+ *var_len = sizeof long_return;
+ long_return = pIpNetTable->table[i].dwType;
+ free(pIpNetTable);
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_atEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+int
+write_arp(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len, u_char * statP, oid * name, size_t length)
+{
+ int var, retval = SNMP_ERR_NOERROR;
+ static PMIB_IPNETROW oldarp_row = NULL;
+ MIB_IPNETROW temp_row;
+ DWORD status = NO_ERROR;
+
+ /*
+ * IP Net to Media table object identifier is of form:
+ * 1.3.6.1.2.1.4.22.1.?.interface.A.B.C.D, where A.B.C.D is IP address.
+ * Interface is at offset 10,
+ * IPADDR starts at offset 11.
+ */
+
+ if (name[6] == 3) { /* AT group oid */
+ if (length != 16) {
+ snmp_log(LOG_ERR, "length error\n");
+ return SNMP_ERR_NOCREATION;
+ }
+ } else { /* IP NetToMedia group oid */
+ if (length != 15) {
+ snmp_log(LOG_ERR, "length error\n");
+ return SNMP_ERR_NOCREATION;
+ }
+ }
+
+
+ /*
+ * #define for ipNetToMediaTable entries are 1 less than corresponding sub-id in MIB
+ * * i.e. IPMEDIAIFINDEX defined as 0, but ipNetToMediaIfIndex registered as 1
+ */
+ var = name[9] - 1;
+ switch (action) {
+ case RESERVE1:
+ switch (var) {
+ case IPMEDIAIFINDEX:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR, "not integer\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if ((*((int *) var_val)) < 0) {
+ snmp_log(LOG_ERR, "invalid media ifIndex");
+ return SNMP_ERR_WRONGVALUE;
+ }
+ if (var_val_len > sizeof(int)) {
+ snmp_log(LOG_ERR, "bad length\n");
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ break;
+ case IPMEDIANETADDRESS:
+ if (var_val_type != ASN_IPADDRESS) {
+ snmp_log(LOG_ERR, "not IP Address\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if ((*((int *) var_val)) < 0) {
+ snmp_log(LOG_ERR, "invalid media net address");
+ return SNMP_ERR_WRONGVALUE;
+ }
+ if (var_val_len > sizeof(DWORD)) {
+ snmp_log(LOG_ERR, "bad length\n");
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ break;
+ case IPMEDIATYPE:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR, "not integer\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if ((*((int *) var_val)) < 1 || (*((int *) var_val)) > 4) {
+ snmp_log(LOG_ERR, "invalid media type");
+ return SNMP_ERR_WRONGVALUE;
+ }
+ if (var_val_len > sizeof(int)) {
+ snmp_log(LOG_ERR, "bad length\n");
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ break;
+ case IPMEDIAPHYSADDRESS:
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR, "not octet str");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len != 6) {
+ snmp_log(LOG_ERR, "not correct ipAddress length: %d",
+ var_val_len);
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ break;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in write_rte\n",
+ var + 1));
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+ case RESERVE2:
+ /*
+ * Save the old value, in case of UNDO
+ */
+ if (oldarp_row == NULL) {
+ oldarp_row = (PMIB_IPNETROW) malloc(sizeof(MIB_IPNETROW));
+ *oldarp_row = *arp_row;
+ }
+ break;
+ case ACTION: /* Perform the SET action (if reversible) */
+ switch (var) {
+
+ case IPMEDIAIFINDEX:
+ temp_row = *arp_row;
+ arp_row->dwIndex = *((int *) var_val);
+ /*
+ * In case of new entry, physical address is mandatory.
+ * * SetIpNetEntry will be done in COMMIT case
+ */
+ if (!create_flag) {
+ if (SetIpNetEntry(arp_row) != NO_ERROR) {
+ arp_row->dwIndex = temp_row.dwIndex;
+ retval = SNMP_ERR_COMMITFAILED;
+ }
+ /*
+ * Don't know yet, whether change in ifIndex creates new row or not
+ */
+ /*
+ * else{
+ */
+ /*
+ * temp_row.dwType = 2;
+ */
+ /*
+ * if(SetIpNetEntry(&temp_row) != NO_ERROR)
+ */
+ /*
+ * retval = SNMP_ERR_COMMITFAILED;
+ */
+ /*
+ * }
+ */
+ }
+ break;
+ case IPMEDIANETADDRESS:
+ temp_row = *arp_row;
+ arp_row->dwAddr = *((int *) var_val);
+ if (!create_flag) {
+ if (SetIpNetEntry(arp_row) != NO_ERROR) {
+ arp_row->dwAddr = oldarp_row->dwAddr;
+ retval = SNMP_ERR_COMMITFAILED;
+ } else {
+ temp_row.dwType = 2;
+ if (SetIpNetEntry(&temp_row) != NO_ERROR) {
+ snmp_log(LOG_ERR,
+ "Failed in ACTION, while deleting old row \n");
+ retval = SNMP_ERR_COMMITFAILED;
+ }
+ }
+ }
+ break;
+ case IPMEDIATYPE:
+ arp_row->dwType = *((int *) var_val);
+ if (!create_flag) {
+ if (SetIpNetEntry(arp_row) != NO_ERROR)
+ retval = SNMP_ERR_COMMITFAILED;
+ }
+ break;
+ case IPMEDIAPHYSADDRESS:
+ memcpy(arp_row->bPhysAddr, var_val, var_val_len);
+ arp_row->dwPhysAddrLen = var_val_len;
+ if (!create_flag) {
+ if (SetIpNetEntry(arp_row) != NO_ERROR)
+ retval = SNMP_ERR_COMMITFAILED;
+ }
+ break;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in write_arp\n",
+ var + 1));
+ retval = SNMP_ERR_NOTWRITABLE;
+ }
+ return retval;
+ case UNDO:
+ /*
+ * Reverse the SET action and free resources
+ */
+ if (oldarp_row != NULL) {
+ /*
+ * UNDO the changes done for existing entry.
+ */
+ if (!create_flag) {
+ if ((status = SetIpNetEntry(oldarp_row)) != NO_ERROR) {
+ snmp_log(LOG_ERR, "Error in case UNDO, status : %d\n",
+ status);
+ retval = SNMP_ERR_UNDOFAILED;
+ }
+ }
+
+ if (oldarp_row->dwAddr != arp_row->dwAddr) {
+ arp_row->dwType = 2; /*If row was added/created delete that row */
+
+ if ((status = SetIpNetEntry(arp_row)) != NO_ERROR) {
+ snmp_log(LOG_ERR,
+ "Error while deleting added row, status : %d\n",
+ status);
+ retval = SNMP_ERR_UNDOFAILED;
+ }
+ }
+ free(oldarp_row);
+ oldarp_row = NULL;
+ free(arp_row);
+ arp_row = NULL;
+ return retval;
+ }
+ break;
+ case COMMIT:
+ /*
+ * if new entry and physical address specified, create new entry
+ */
+ if (create_flag) {
+ if (arp_row->dwPhysAddrLen != 0) {
+ if ((status = CreateIpNetEntry(arp_row)) != NO_ERROR) {
+ snmp_log(LOG_ERR,
+ "Inside COMMIT: CreateIpNetEntry failed, status %d\n",
+ status);
+ retval = SNMP_ERR_COMMITFAILED;
+ }
+ } else {
+ /*
+ * For new entry, physical address must be set.
+ */
+ snmp_log(LOG_ERR,
+ "Can't create new entry without physical address\n");
+ retval = SNMP_ERR_WRONGVALUE;
+ }
+ /*
+ * unset the create_flag, so that CreateIpNetEntry called only once
+ */
+ create_flag = 0;
+ }
+
+ case FREE:
+ /*
+ * Free any resources allocated
+ */
+ free(oldarp_row);
+ oldarp_row = NULL;
+ free(arp_row);
+ arp_row = NULL;
+ break;
+ }
+ return retval;
+}
+#endif /* WIN32 cygwin */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/at.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/at.h
new file mode 100644
index 0000000000..e3bd0888fa
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/at.h
@@ -0,0 +1,45 @@
+/*
+ * Template MIB group interface - at.h
+ *
+ */
+
+#ifndef _MIBGROUP_AT_H
+#define _MIBGROUP_AT_H
+
+config_arch_require(solaris2, kernel_sunos5)
+
+ extern void init_at(void);
+ extern FindVarMethod var_atEntry;
+
+
+#define ATIFINDEX 0
+#define ATPHYSADDRESS 1
+#define ATNETADDRESS 2
+
+#define IPMEDIAIFINDEX 0
+#define IPMEDIAPHYSADDRESS 1
+#define IPMEDIANETADDRESS 2
+#define IPMEDIATYPE 3
+
+/*
+ * in case its missing:
+ */
+#ifndef ATF_PERM
+# define ATF_PERM 0x04
+#endif /* ATF_PERM */
+#ifndef ATF_COM
+# define ATF_COM 0x02
+#endif /* ATF_COM */
+
+#if defined(linux) || defined(irix6)
+/*
+ * arp struct to pass flags, hw-addr and ip-addr in bsd manner:
+ */
+ struct arptab {
+ int at_flags;
+ char at_enaddr[6];
+ struct in_addr at_iaddr;
+ int if_index;
+ };
+#endif
+#endif /* _MIBGROUP_AT_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/icmp.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/icmp.c
new file mode 100644
index 0000000000..f3fbb822ee
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/icmp.c
@@ -0,0 +1,803 @@
+/*
+ * ICMP MIB group implementation - icmp.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include "mibII_common.h"
+
+#if HAVE_NETINET_IP_ICMP_H
+#include <netinet/ip_icmp.h>
+#endif
+#if HAVE_NETINET_ICMP_VAR_H
+#include <netinet/icmp_var.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/auto_nlist.h>
+
+#include <net-snmp/agent/cache_handler.h>
+#include <net-snmp/agent/scalar_group.h>
+
+#include "util_funcs.h"
+#include "icmp.h"
+#include "sysORTable.h"
+
+#ifndef MIB_STATS_CACHE_TIMEOUT
+#define MIB_STATS_CACHE_TIMEOUT 5
+#endif
+#ifndef ICMP_STATS_CACHE_TIMEOUT
+#define ICMP_STATS_CACHE_TIMEOUT MIB_STATS_CACHE_TIMEOUT
+#endif
+
+#if defined(HAVE_LIBPERFSTAT_H) && (defined(aix4) || defined(aix5) || defined(aix6)) && !defined(FIRST_PROTOCOL)
+#include <libperfstat.h>
+#ifdef FIRST_PROTOCOL
+perfstat_protocol_t ps_proto;
+perfstat_id_t ps_name;
+#define _USE_PERFSTAT_PROTOCOL 1
+#endif
+#endif
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+
+
+/*
+ * Define the OID pointer to the top of the mib tree that we're
+ * registering underneath
+ */
+oid icmp_oid[] = { SNMP_OID_MIB2, 5 };
+#ifdef USING_MIBII_IP_MODULE
+extern oid ip_module_oid[];
+extern int ip_module_oid_len;
+extern int ip_module_count;
+#endif
+
+void
+init_icmp(void)
+{
+ netsnmp_handler_registration *reginfo;
+
+ /*
+ * register ourselves with the agent as a group of scalars...
+ */
+ DEBUGMSGTL(("mibII/icmp", "Initialising ICMP group\n"));
+ reginfo = netsnmp_create_handler_registration("icmp", icmp_handler,
+ icmp_oid, OID_LENGTH(icmp_oid), HANDLER_CAN_RONLY);
+ netsnmp_register_scalar_group(reginfo, ICMPINMSGS, ICMPOUTADDRMASKREPS);
+ /*
+ * .... with a local cache
+ * (except for HP-UX 11, which extracts objects individually)
+ */
+#ifndef hpux11
+ netsnmp_inject_handler( reginfo,
+ netsnmp_get_cache_handler(ICMP_STATS_CACHE_TIMEOUT,
+ icmp_load, icmp_free,
+ icmp_oid, OID_LENGTH(icmp_oid)));
+#endif
+
+#ifdef USING_MIBII_IP_MODULE
+ if (++ip_module_count == 2)
+ REGISTER_SYSOR_TABLE(ip_module_oid, ip_module_oid_len,
+ "The MIB module for managing IP and ICMP implementations");
+#endif
+
+#if !defined(_USE_PERFSTAT_PROTOCOL)
+#ifdef ICMPSTAT_SYMBOL
+ auto_nlist(ICMPSTAT_SYMBOL, 0, 0);
+#endif
+#ifdef solaris2
+ init_kernel_sunos5();
+#endif
+#endif
+}
+
+
+ /*********************
+ *
+ * System specific data formats
+ *
+ *********************/
+
+#ifdef hpux11
+#define ICMP_STAT_STRUCTURE int
+#endif
+
+#ifdef linux
+#define ICMP_STAT_STRUCTURE struct icmp_mib
+#define USES_SNMP_DESIGNED_ICMPSTAT
+#undef ICMPSTAT_SYMBOL
+#endif
+
+#ifdef solaris2
+#define ICMP_STAT_STRUCTURE mib2_icmp_t
+#define USES_SNMP_DESIGNED_ICMPSTAT
+#endif
+
+#if defined (WIN32) || defined (cygwin)
+#include <iphlpapi.h>
+#define ICMP_STAT_STRUCTURE MIB_ICMP
+#endif
+
+/* ?? #if (defined(NETSNMP_CAN_USE_SYSCTL) && defined(ICMPCTL_STATS)) ?? */
+
+#ifdef HAVE_SYS_ICMPIPSTATS_H
+/* or #ifdef HAVE_SYS_TCPIPSTATS_H ??? */
+#define ICMP_STAT_STRUCTURE struct kna
+#define USES_TRADITIONAL_ICMPSTAT
+#endif
+
+#if !defined(ICMP_STAT_STRUCTURE)
+#define ICMP_STAT_STRUCTURE struct icmpstat
+#define USES_TRADITIONAL_ICMPSTAT
+#endif
+
+ICMP_STAT_STRUCTURE icmpstat;
+
+
+ /*********************
+ *
+ * System independent handler
+ * (mostly!)
+ *
+ *********************/
+
+int
+icmp_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_request_info *request;
+ netsnmp_variable_list *requestvb;
+ long ret_value;
+ oid subid;
+#ifdef USES_TRADITIONAL_ICMPSTAT
+ int i;
+#endif
+
+ /*
+ * The cached data should already have been loaded by the
+ * cache handler, higher up the handler chain.
+ * But just to be safe, check this and load it manually if necessary
+ */
+#if defined(_USE_PERFSTAT_PROTOCOL)
+ icmp_load(NULL, NULL);
+#elif !defined(hpux11)
+ if (!netsnmp_cache_is_valid(reqinfo, reginfo->handlerName)) {
+ netsnmp_assert(!"cache == valid"); /* always false */
+ icmp_load( NULL, NULL ); /* XXX - check for failure */
+ }
+#endif
+
+
+ /*
+ *
+ *
+ */
+ DEBUGMSGTL(("mibII/icmp", "Handler - mode %s\n",
+ se_find_label_in_slist("agent_mode", reqinfo->mode)));
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ for (request=requests; request; request=request->next) {
+ requestvb = request->requestvb;
+ subid = requestvb->name[OID_LENGTH(icmp_oid)]; /* XXX */
+ DEBUGMSGTL(( "mibII/icmp", "oid: "));
+ DEBUGMSGOID(("mibII/icmp", requestvb->name,
+ requestvb->name_length));
+ DEBUGMSG(( "mibII/icmp", "\n"));
+
+ switch (subid) {
+#ifdef USES_SNMP_DESIGNED_ICMPSTAT
+ case ICMPINMSGS:
+ ret_value = icmpstat.icmpInMsgs;
+ break;
+ case ICMPINERRORS:
+ ret_value = icmpstat.icmpInErrors;
+ break;
+ case ICMPINDESTUNREACHS:
+ ret_value = icmpstat.icmpInDestUnreachs;
+ break;
+ case ICMPINTIMEEXCDS:
+ ret_value = icmpstat.icmpInTimeExcds;
+ break;
+ case ICMPINPARMPROBS:
+ ret_value = icmpstat.icmpInParmProbs;
+ break;
+ case ICMPINSRCQUENCHS:
+ ret_value = icmpstat.icmpInSrcQuenchs;
+ break;
+ case ICMPINREDIRECTS:
+ ret_value = icmpstat.icmpInRedirects;
+ break;
+ case ICMPINECHOS:
+ ret_value = icmpstat.icmpInEchos;
+ break;
+ case ICMPINECHOREPS:
+ ret_value = icmpstat.icmpInEchoReps;
+ break;
+ case ICMPINTIMESTAMPS:
+ ret_value = icmpstat.icmpInTimestamps;
+ break;
+ case ICMPINTIMESTAMPREPS:
+ ret_value = icmpstat.icmpInTimestampReps;
+ break;
+ case ICMPINADDRMASKS:
+ ret_value = icmpstat.icmpInAddrMasks;
+ break;
+ case ICMPINADDRMASKREPS:
+ ret_value = icmpstat.icmpInAddrMaskReps;
+ break;
+ case ICMPOUTMSGS:
+ ret_value = icmpstat.icmpOutMsgs;
+ break;
+ case ICMPOUTERRORS:
+ ret_value = icmpstat.icmpOutErrors;
+ break;
+ case ICMPOUTDESTUNREACHS:
+ ret_value = icmpstat.icmpOutDestUnreachs;
+ break;
+ case ICMPOUTTIMEEXCDS:
+ ret_value = icmpstat.icmpOutTimeExcds;
+ break;
+ case ICMPOUTPARMPROBS:
+ ret_value = icmpstat.icmpOutParmProbs;
+ break;
+ case ICMPOUTSRCQUENCHS:
+ ret_value = icmpstat.icmpOutSrcQuenchs;
+ break;
+ case ICMPOUTREDIRECTS:
+ ret_value = icmpstat.icmpOutRedirects;
+ break;
+ case ICMPOUTECHOS:
+ ret_value = icmpstat.icmpOutEchos;
+ break;
+ case ICMPOUTECHOREPS:
+ ret_value = icmpstat.icmpOutEchoReps;
+ break;
+ case ICMPOUTTIMESTAMPS:
+ ret_value = icmpstat.icmpOutTimestamps;
+ break;
+ case ICMPOUTTIMESTAMPREPS:
+ ret_value = icmpstat.icmpOutTimestampReps;
+ break;
+ case ICMPOUTADDRMASKS:
+ ret_value = icmpstat.icmpOutAddrMasks;
+ break;
+ case ICMPOUTADDRMASKREPS:
+ ret_value = icmpstat.icmpOutAddrMaskReps;
+ break;
+#elif defined(USES_TRADITIONAL_ICMPSTAT) && !defined(_USE_PERFSTAT_PROTOCOL)
+ case ICMPINMSGS:
+ ret_value = icmpstat.icps_badcode +
+ icmpstat.icps_tooshort +
+ icmpstat.icps_checksum + icmpstat.icps_badlen;
+ for (i = 0; i <= ICMP_MAXTYPE; i++)
+ ret_value += icmpstat.icps_inhist[i];
+ break;
+ case ICMPINERRORS:
+ ret_value = icmpstat.icps_badcode +
+ icmpstat.icps_tooshort +
+ icmpstat.icps_checksum + icmpstat.icps_badlen;
+ break;
+ case ICMPINDESTUNREACHS:
+ ret_value = icmpstat.icps_inhist[ICMP_UNREACH];
+ break;
+ case ICMPINTIMEEXCDS:
+ ret_value = icmpstat.icps_inhist[ICMP_TIMXCEED];
+ break;
+ case ICMPINPARMPROBS:
+ ret_value = icmpstat.icps_inhist[ICMP_PARAMPROB];
+ break;
+ case ICMPINSRCQUENCHS:
+ ret_value = icmpstat.icps_inhist[ICMP_SOURCEQUENCH];
+ break;
+ case ICMPINREDIRECTS:
+ ret_value = icmpstat.icps_inhist[ICMP_REDIRECT];
+ break;
+ case ICMPINECHOS:
+ ret_value = icmpstat.icps_inhist[ICMP_ECHO];
+ break;
+ case ICMPINECHOREPS:
+ ret_value = icmpstat.icps_inhist[ICMP_ECHOREPLY];
+ break;
+ case ICMPINTIMESTAMPS:
+ ret_value = icmpstat.icps_inhist[ICMP_TSTAMP];
+ break;
+ case ICMPINTIMESTAMPREPS:
+ ret_value = icmpstat.icps_inhist[ICMP_TSTAMPREPLY];
+ break;
+ case ICMPINADDRMASKS:
+ ret_value = icmpstat.icps_inhist[ICMP_MASKREQ];
+ break;
+ case ICMPINADDRMASKREPS:
+ ret_value = icmpstat.icps_inhist[ICMP_MASKREPLY];
+ break;
+ case ICMPOUTMSGS:
+ ret_value = icmpstat.icps_oldshort + icmpstat.icps_oldicmp;
+ for (i = 0; i <= ICMP_MAXTYPE; i++)
+ ret_value += icmpstat.icps_outhist[i];
+ break;
+ case ICMPOUTERRORS:
+ ret_value = icmpstat.icps_oldshort + icmpstat.icps_oldicmp;
+ break;
+ case ICMPOUTDESTUNREACHS:
+ ret_value = icmpstat.icps_outhist[ICMP_UNREACH];
+ break;
+ case ICMPOUTTIMEEXCDS:
+ ret_value = icmpstat.icps_outhist[ICMP_TIMXCEED];
+ break;
+ case ICMPOUTPARMPROBS:
+ ret_value = icmpstat.icps_outhist[ICMP_PARAMPROB];
+ break;
+ case ICMPOUTSRCQUENCHS:
+ ret_value = icmpstat.icps_outhist[ICMP_SOURCEQUENCH];
+ break;
+ case ICMPOUTREDIRECTS:
+ ret_value = icmpstat.icps_outhist[ICMP_REDIRECT];
+ break;
+ case ICMPOUTECHOS:
+ ret_value = icmpstat.icps_outhist[ICMP_ECHO];
+ break;
+ case ICMPOUTECHOREPS:
+ ret_value = icmpstat.icps_outhist[ICMP_ECHOREPLY];
+ break;
+ case ICMPOUTTIMESTAMPS:
+ ret_value = icmpstat.icps_outhist[ICMP_TSTAMP];
+ break;
+ case ICMPOUTTIMESTAMPREPS:
+ ret_value = icmpstat.icps_outhist[ICMP_TSTAMPREPLY];
+ break;
+ case ICMPOUTADDRMASKS:
+ ret_value = icmpstat.icps_outhist[ICMP_MASKREQ];
+ break;
+ case ICMPOUTADDRMASKREPS:
+ ret_value = icmpstat.icps_outhist[ICMP_MASKREPLY];
+ break;
+#elif defined(hpux11)
+ case ICMPINMSGS:
+ case ICMPINERRORS:
+ case ICMPINDESTUNREACHS:
+ case ICMPINTIMEEXCDS:
+ case ICMPINPARMPROBS:
+ case ICMPINSRCQUENCHS:
+ case ICMPINREDIRECTS:
+ case ICMPINECHOS:
+ case ICMPINECHOREPS:
+ case ICMPINTIMESTAMPS:
+ case ICMPINTIMESTAMPREPS:
+ case ICMPINADDRMASKS:
+ case ICMPINADDRMASKREPS:
+ case ICMPOUTMSGS:
+ case ICMPOUTERRORS:
+ case ICMPOUTDESTUNREACHS:
+ case ICMPOUTTIMEEXCDS:
+ case ICMPOUTPARMPROBS:
+ case ICMPOUTSRCQUENCHS:
+ case ICMPOUTREDIRECTS:
+ case ICMPOUTECHOS:
+ case ICMPOUTECHOREPS:
+ case ICMPOUTTIMESTAMPS:
+ case ICMPOUTTIMESTAMPREPS:
+ case ICMPOUTADDRMASKS:
+ case ICMPOUTADDRMASKREPS:
+ /*
+ * This is a bit of a hack, to shoehorn the HP-UX 11
+ * single-object retrieval approach into the caching
+ * architecture.
+ */
+ if (icmp_load(NULL, (void*)subid) == -1 ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ }
+ ret_value = icmpstat;
+ break;
+#elif defined (WIN32) || defined (cygwin)
+ case ICMPINMSGS:
+ ret_value = icmpstat.stats.icmpInStats.dwMsgs;
+ break;
+ case ICMPINERRORS:
+ ret_value = icmpstat.stats.icmpInStats.dwErrors;
+ break;
+ case ICMPINDESTUNREACHS:
+ ret_value = icmpstat.stats.icmpInStats.dwDestUnreachs;
+ break;
+ case ICMPINTIMEEXCDS:
+ ret_value = icmpstat.stats.icmpInStats.dwTimeExcds;
+ break;
+ case ICMPINPARMPROBS:
+ ret_value = icmpstat.stats.icmpInStats.dwParmProbs;
+ break;
+ case ICMPINSRCQUENCHS:
+ ret_value = icmpstat.stats.icmpInStats.dwSrcQuenchs;
+ break;
+ case ICMPINREDIRECTS:
+ ret_value = icmpstat.stats.icmpInStats.dwRedirects;
+ break;
+ case ICMPINECHOS:
+ ret_value = icmpstat.stats.icmpInStats.dwEchos;
+ break;
+ case ICMPINECHOREPS:
+ ret_value = icmpstat.stats.icmpInStats.dwEchoReps;
+ break;
+ case ICMPINTIMESTAMPS:
+ ret_value = icmpstat.stats.icmpInStats.dwTimestamps;
+ break;
+ case ICMPINTIMESTAMPREPS:
+ ret_value = icmpstat.stats.icmpInStats.dwTimestampReps;
+ break;
+ case ICMPINADDRMASKS:
+ ret_value = icmpstat.stats.icmpInStats.dwAddrMasks;
+ break;
+ case ICMPINADDRMASKREPS:
+ ret_value = icmpstat.stats.icmpInStats.dwAddrMaskReps;
+ break;
+ case ICMPOUTMSGS:
+ ret_value = icmpstat.stats.icmpOutStats.dwMsgs;
+ break;
+ case ICMPOUTERRORS:
+ ret_value = icmpstat.stats.icmpOutStats.dwErrors;
+ break;
+ case ICMPOUTDESTUNREACHS:
+ ret_value = icmpstat.stats.icmpOutStats.dwDestUnreachs;
+ break;
+ case ICMPOUTTIMEEXCDS:
+ ret_value = icmpstat.stats.icmpOutStats.dwTimeExcds;
+ break;
+ case ICMPOUTPARMPROBS:
+ ret_value = icmpstat.stats.icmpOutStats.dwParmProbs;
+ break;
+ case ICMPOUTSRCQUENCHS:
+ ret_value = icmpstat.stats.icmpOutStats.dwSrcQuenchs;
+ break;
+ case ICMPOUTREDIRECTS:
+ ret_value = icmpstat.stats.icmpOutStats.dwRedirects;
+ break;
+ case ICMPOUTECHOS:
+ ret_value = icmpstat.stats.icmpOutStats.dwEchos;
+ break;
+ case ICMPOUTECHOREPS:
+ ret_value = icmpstat.stats.icmpOutStats.dwEchoReps;
+ break;
+ case ICMPOUTTIMESTAMPS:
+ ret_value = icmpstat.stats.icmpOutStats.dwTimestamps;
+ break;
+ case ICMPOUTTIMESTAMPREPS:
+ ret_value = icmpstat.stats.icmpOutStats.dwTimestampReps;
+ break;
+ case ICMPOUTADDRMASKS:
+ ret_value = icmpstat.stats.icmpOutStats.dwAddrMasks;
+ break;
+ case ICMPOUTADDRMASKREPS:
+ ret_value = icmpstat.stats.icmpOutStats.dwAddrMaskReps;
+ break;
+#elif defined(_USE_PERFSTAT_PROTOCOL)
+ case ICMPINMSGS:
+ ret_value = ps_proto.u.icmp.received;
+ break;
+ case ICMPINERRORS:
+ ret_value = ps_proto.u.icmp.errors;
+ break;
+ case ICMPINDESTUNREACHS:
+ case ICMPINTIMEEXCDS:
+ case ICMPINPARMPROBS:
+ case ICMPINSRCQUENCHS:
+ case ICMPINREDIRECTS:
+ case ICMPINECHOS:
+ case ICMPINECHOREPS:
+ case ICMPINTIMESTAMPS:
+ case ICMPINTIMESTAMPREPS:
+ case ICMPINADDRMASKS:
+ case ICMPINADDRMASKREPS:
+ ret_value = 0;
+ break;
+ case ICMPOUTMSGS:
+ ret_value = ps_proto.u.icmp.sent;
+ break;
+ case ICMPOUTERRORS:
+ ret_value = ps_proto.u.icmp.errors;
+ break;
+ case ICMPOUTDESTUNREACHS:
+ case ICMPOUTTIMEEXCDS:
+ case ICMPOUTPARMPROBS:
+ case ICMPOUTSRCQUENCHS:
+ case ICMPOUTREDIRECTS:
+ case ICMPOUTECHOS:
+ case ICMPOUTECHOREPS:
+ case ICMPOUTTIMESTAMPS:
+ case ICMPOUTTIMESTAMPREPS:
+ case ICMPOUTADDRMASKS:
+ case ICMPOUTADDRMASKREPS:
+ ret_value = 0;
+ break;
+#endif /* USES_SNMP_DESIGNED_ICMPSTAT */
+ }
+ snmp_set_var_typed_value(request->requestvb, ASN_COUNTER,
+ (u_char *)&ret_value, sizeof(ret_value));
+ }
+ break;
+
+ case MODE_GETNEXT:
+ case MODE_GETBULK:
+ case MODE_SET_RESERVE1:
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ snmp_log(LOG_WARNING, "mibII/icmp: Unsupported mode (%d)\n",
+ reqinfo->mode);
+ break;
+ default:
+ snmp_log(LOG_WARNING, "mibII/icmp: Unrecognised mode (%d)\n",
+ reqinfo->mode);
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+#ifdef hpux11
+int
+icmp_load(netsnmp_cache *cache, void *vmagic)
+{
+ int fd;
+ struct nmparms p;
+ unsigned int ulen;
+ int ret;
+ int magic = (int) vmagic;
+
+ if ((fd = open_mib("/dev/ip", O_RDONLY, 0, NM_ASYNC_OFF)) < 0) {
+ DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP object %d (hpux11)\n", magic));
+ return (-1); /* error */
+ }
+
+ switch (magic) {
+ case ICMPINMSGS:
+ p.objid = ID_icmpInMsgs;
+ break;
+ case ICMPINERRORS:
+ p.objid = ID_icmpInErrors;
+ break;
+ case ICMPINDESTUNREACHS:
+ p.objid = ID_icmpInDestUnreachs;
+ break;
+ case ICMPINTIMEEXCDS:
+ p.objid = ID_icmpInTimeExcds;
+ break;
+ case ICMPINPARMPROBS:
+ p.objid = ID_icmpInParmProbs;
+ break;
+ case ICMPINSRCQUENCHS:
+ p.objid = ID_icmpInSrcQuenchs;
+ break;
+ case ICMPINREDIRECTS:
+ p.objid = ID_icmpInRedirects;
+ break;
+ case ICMPINECHOS:
+ p.objid = ID_icmpInEchos;
+ break;
+ case ICMPINECHOREPS:
+ p.objid = ID_icmpInEchoReps;
+ break;
+ case ICMPINTIMESTAMPS:
+ p.objid = ID_icmpInTimestamps;
+ break;
+ case ICMPINTIMESTAMPREPS:
+ p.objid = ID_icmpInTimestampReps;
+ break;
+ case ICMPINADDRMASKS:
+ p.objid = ID_icmpInAddrMasks;
+ break;
+ case ICMPINADDRMASKREPS:
+ p.objid = ID_icmpInAddrMaskReps;
+ break;
+ case ICMPOUTMSGS:
+ p.objid = ID_icmpOutMsgs;
+ break;
+ case ICMPOUTERRORS:
+ p.objid = ID_icmpOutErrors;
+ break;
+ case ICMPOUTDESTUNREACHS:
+ p.objid = ID_icmpOutDestUnreachs;
+ break;
+ case ICMPOUTTIMEEXCDS:
+ p.objid = ID_icmpOutTimeExcds;
+ break;
+ case ICMPOUTPARMPROBS:
+ p.objid = ID_icmpOutParmProbs;
+ break;
+ case ICMPOUTSRCQUENCHS:
+ p.objid = ID_icmpOutSrcQuenchs;
+ break;
+ case ICMPOUTREDIRECTS:
+ p.objid = ID_icmpOutRedirects;
+ break;
+ case ICMPOUTECHOS:
+ p.objid = ID_icmpOutEchos;
+ break;
+ case ICMPOUTECHOREPS:
+ p.objid = ID_icmpOutEchoReps;
+ break;
+ case ICMPOUTTIMESTAMPS:
+ p.objid = ID_icmpOutTimestamps;
+ break;
+ case ICMPOUTTIMESTAMPREPS:
+ p.objid = ID_icmpOutTimestampReps;
+ break;
+ case ICMPOUTADDRMASKS:
+ p.objid = ID_icmpOutAddrMasks;
+ break;
+ case ICMPOUTADDRMASKREPS:
+ p.objid = ID_icmpOutAddrMaskReps;
+ break;
+ default:
+ icmpstat = 0;
+ close_mib(fd);
+ return (0);
+ }
+
+ p.buffer = (void *)&icmpstat;
+ ulen = sizeof(ICMP_STAT_STRUCTURE);
+ p.len = &ulen;
+ ret = get_mib_info(fd, &p);
+ close_mib(fd);
+
+ DEBUGMSGTL(("mibII/icmp", "%s ICMP object %d (hpux11)\n",
+ (ret < 0 ? "Failed to load" : "Loaded"), magic));
+ return (ret); /* 0: ok, < 0: error */
+}
+#elif defined(linux)
+int
+icmp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ ret_value = linux_read_icmp_stat(&icmpstat);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (linux)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (linux)\n"));
+ }
+ return ret_value;
+}
+#elif defined(solaris2)
+int
+icmp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ ret_value =
+ getMibstat(MIB_ICMP, &icmpstat, sizeof(mib2_icmp_t), GET_FIRST,
+ &Get_everything, NULL);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (solaris)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (solaris)\n"));
+ }
+ return ret_value;
+}
+#elif defined (WIN32) || defined (cygwin)
+int
+icmp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ ret_value = GetIcmpStatistics(&icmpstat);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (win32)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (win32)\n"));
+ }
+ return ret_value;
+}
+#elif defined(_USE_PERFSTAT_PROTOCOL)
+int
+icmp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ strcpy(ps_name.name, "icmp");
+ ret_value = perfstat_protocol(&ps_name, &ps_proto, sizeof(ps_proto), 1);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (AIX)\n"));
+ } else {
+ ret_value = 0;
+ DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (AIX)\n"));
+ }
+ return ret_value;
+}
+#elif defined(NETSNMP_CAN_USE_SYSCTL) && defined(ICMPCTL_STATS)
+int
+icmp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+ static int sname[4] =
+ { CTL_NET, PF_INET, IPPROTO_ICMP, ICMPCTL_STATS };
+ size_t len = sizeof(icmpstat);
+
+ ret_value = sysctl(sname, 4, &icmpstat, &len, 0, 0);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (sysctl)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (sysctl)\n"));
+ }
+ return ret_value;
+}
+#elif defined(HAVE_SYS_TCPIPSTATS_H)
+int
+icmp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ ret_value =
+ sysmp(MP_SAGET, MPSA_TCPIPSTATS, &icmpstat, sizeof icmpstat);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (tcpipstats)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (tcpipstats)\n"));
+ }
+ return ret_value;
+}
+#elif defined(ICMPSTAT_SYMBOL)
+int
+icmp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ if (auto_nlist(ICMPSTAT_SYMBOL, (char *)&icmpstat, sizeof(icmpstat)))
+ ret_value = 0;
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (icmpstat)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (icmpstat)\n"));
+ }
+ return ret_value;
+}
+#else /* ICMPSTAT_SYMBOL */
+int
+icmp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ DEBUGMSGTL(("mibII/icmp", "Failed to load ICMP Group (null)\n"));
+ return ret_value;
+}
+#endif /* hpux11 */
+
+void
+icmp_free(netsnmp_cache *cache, void *magic)
+{
+#if defined(_USE_PERFSTAT_PROTOCOL)
+ memset(&ps_proto, 0, sizeof(ps_proto));
+#else
+ memset(&icmpstat, 0, sizeof(icmpstat));
+#endif
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/icmp.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/icmp.h
new file mode 100644
index 0000000000..7417639558
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/icmp.h
@@ -0,0 +1,45 @@
+/*
+ * ICMP MIB group interface - icmp.h
+ *
+ */
+#ifndef _MIBGROUP_ICMP_H
+#define _MIBGROUP_ICMP_H
+
+config_arch_require(solaris2, kernel_sunos5)
+config_arch_require(linux, mibII/kernel_linux)
+
+#include <net-snmp/agent/cache_handler.h>
+
+extern void init_icmp(void);
+extern Netsnmp_Node_Handler icmp_handler;
+extern NetsnmpCacheLoad icmp_load;
+extern NetsnmpCacheFree icmp_free;
+
+#define ICMPINMSGS 1
+#define ICMPINERRORS 2
+#define ICMPINDESTUNREACHS 3
+#define ICMPINTIMEEXCDS 4
+#define ICMPINPARMPROBS 5
+#define ICMPINSRCQUENCHS 6
+#define ICMPINREDIRECTS 7
+#define ICMPINECHOS 8
+#define ICMPINECHOREPS 9
+#define ICMPINTIMESTAMPS 10
+#define ICMPINTIMESTAMPREPS 11
+#define ICMPINADDRMASKS 12
+#define ICMPINADDRMASKREPS 13
+#define ICMPOUTMSGS 14
+#define ICMPOUTERRORS 15
+#define ICMPOUTDESTUNREACHS 16
+#define ICMPOUTTIMEEXCDS 17
+#define ICMPOUTPARMPROBS 18
+#define ICMPOUTSRCQUENCHS 19
+#define ICMPOUTREDIRECTS 20
+#define ICMPOUTECHOS 21
+#define ICMPOUTECHOREPS 22
+#define ICMPOUTTIMESTAMPS 23
+#define ICMPOUTTIMESTAMPREPS 24
+#define ICMPOUTADDRMASKS 25
+#define ICMPOUTADDRMASKREPS 26
+
+#endif /* _MIBGROUP_ICMP_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ifTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ifTable.h
new file mode 100644
index 0000000000..65d155eb85
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ifTable.h
@@ -0,0 +1,10 @@
+/*
+ * module to include the ifTable implementation modules
+ *
+ */
+
+#ifdef NETSNMP_INCLUDE_IFTABLE_REWRITES
+config_require(if-mib/ifTable)
+#else
+config_require(mibII/interfaces)
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/interfaces.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/interfaces.c
new file mode 100644
index 0000000000..c6a485721d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/interfaces.c
@@ -0,0 +1,2847 @@
+/*
+ * Interfaces MIB group implementation - interfaces.c
+ *
+ */
+
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#if defined(IFNET_NEEDS_KERNEL) && !defined(_KERNEL) && !defined(IFNET_NEEDS_KERNEL_LATE)
+#define _KERNEL 1
+#define _I_DEFINED_KERNEL
+#endif
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#include <sys/types.h>
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#if defined(IFNET_NEEDS_KERNEL) && !defined(_KERNEL) && defined(IFNET_NEEDS_KERNEL_LATE)
+#define _KERNEL 1
+#define _I_DEFINED_KERNEL
+#endif
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifndef STREAM_NEEDS_KERNEL_ISLANDS
+#if HAVE_SYS_STREAM_H
+#include <sys/stream.h>
+#endif
+#endif
+#if HAVE_SYS_SOCKETVAR_H
+#include <sys/socketvar.h>
+#endif
+
+#if TIME_WITH_SYS_TIME
+# if defined (WIN32) || defined (cygwin)
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_SYS_SOCKIO_H
+#include <sys/sockio.h>
+#endif
+#if HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#if HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_NET_IF_H
+#include <net/if.h>
+#endif
+#if HAVE_NETINET_IN_VAR_H
+#include <netinet/in_var.h>
+#endif
+#if HAVE_NET_IF_VAR_H
+#include <net/if_var.h>
+#endif
+#ifdef _I_DEFINED_KERNEL
+#undef _KERNEL
+#endif
+#ifdef STREAM_NEEDS_KERNEL_ISLANDS
+#if HAVE_SYS_STREAM_H
+#include <sys/stream.h>
+#endif
+#endif
+#if HAVE_NET_ROUTE_H
+#include <net/route.h>
+#endif
+#if HAVE_NETINET_IN_SYSTM_H
+#include <netinet/in_systm.h>
+#endif
+#if HAVE_SYS_HASHING_H
+#include <sys/hashing.h>
+#endif
+#if HAVE_NETINET_IN_VAR_H
+#include <netinet/in_var.h>
+#endif
+#if HAVE_NETINET_IP_H
+#include <netinet/ip.h>
+#endif
+#ifdef NETSNMP_ENABLE_IPV6
+#if HAVE_NETINET_IP6_H
+#include <netinet/ip6.h>
+#endif
+#endif
+#if HAVE_SYS_QUEUE_H
+#include <sys/queue.h>
+#endif
+#if HAVE_NETINET_IP_VAR_H
+#include <netinet/ip_var.h>
+#endif
+#ifdef NETSNMP_ENABLE_IPV6
+#if HAVE_NETNETSNMP_ENABLE_IPV6_IP6_VAR_H
+#include <netinet6/ip6_var.h>
+#endif
+#endif
+#if HAVE_NETINET_IN_PCB_H
+#include <netinet/in_pcb.h>
+#endif
+#if HAVE_NETINET_IF_ETHER_H
+#include <netinet/if_ether.h>
+#endif
+#if HAVE_NET_IF_TYPES_H
+#include <net/if_types.h>
+#endif
+#if HAVE_NET_IF_DL_H
+#ifndef dynix
+#include <net/if_dl.h>
+#else
+#include <sys/net/if_dl.h>
+#endif
+#endif
+#if HAVE_INET_MIB2_H
+#include <inet/mib2.h>
+#endif
+#if HAVE_IOCTLS_H
+#include <ioctls.h>
+#endif
+
+#ifdef solaris2
+# include <errno.h>
+#include "kernel_sunos5.h"
+#else
+#include "kernel.h"
+#endif
+
+#ifdef hpux
+#include <sys/mib.h>
+#include <netinet/mib_kern.h>
+#endif /* hpux */
+
+#ifdef cygwin
+#include <windows.h>
+#endif
+
+#if HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+
+#if defined(freebsd3) || defined(freebsd4) || defined(freebsd5)
+# define USE_SYSCTL_IFLIST
+#else
+# if defined(CTL_NET) && !defined(freebsd2) && !defined(netbsd1)
+# ifdef PF_ROUTE
+# ifdef NET_RT_IFLIST
+# ifndef netbsd1
+# define USE_SYSCTL_IFLIST
+# endif
+# endif
+# endif
+# endif
+#endif /* defined(freebsd3) */
+#endif /* HAVE_SYS_SYSCTL_H */
+
+#if HAVE_OSRELDATE_H
+#include <osreldate.h>
+#endif
+#ifdef NETSNMP_CAN_USE_SYSCTL
+#include <sys/sysctl.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/auto_nlist.h>
+#include <net-snmp/data_access/interface.h>
+
+#include "interfaces.h"
+#include "struct.h"
+#include "util_funcs.h"
+#include "sysORTable.h"
+
+/* if you want caching enabled for speed retrival purposes, set this to 5?*/
+#define MINLOADFREQ 0 /* min reload frequency in seconds */
+#ifdef linux
+static unsigned long LastLoad = 0; /* ET in secs at last table load */
+#endif
+
+extern struct timeval starttime;
+
+struct variable3 interfaces_variables[] = {
+ {IFNUMBER, ASN_INTEGER, RONLY, var_interfaces, 1, {1}},
+ {IFINDEX, ASN_INTEGER, RONLY, var_ifEntry, 3, {2, 1, 1}},
+ {IFDESCR, ASN_OCTET_STR, RONLY, var_ifEntry, 3, {2, 1, 2}},
+ {IFTYPE, ASN_INTEGER, RONLY, var_ifEntry, 3, {2, 1, 3}},
+ {IFMTU, ASN_INTEGER, RONLY, var_ifEntry, 3, {2, 1, 4}},
+ {IFSPEED, ASN_GAUGE, RONLY, var_ifEntry, 3, {2, 1, 5}},
+ {IFPHYSADDRESS, ASN_OCTET_STR, RONLY, var_ifEntry, 3, {2, 1, 6}},
+#if defined (WIN32) || defined (cygwin)
+ {IFADMINSTATUS, ASN_INTEGER, RWRITE, var_ifEntry, 3, {2, 1, 7}},
+#else
+ {IFADMINSTATUS, ASN_INTEGER, RONLY, var_ifEntry, 3, {2, 1, 7}},
+#endif
+ {IFOPERSTATUS, ASN_INTEGER, RONLY, var_ifEntry, 3, {2, 1, 8}},
+ {IFLASTCHANGE, ASN_TIMETICKS, RONLY, var_ifEntry, 3, {2, 1, 9}},
+ {IFINOCTETS, ASN_COUNTER, RONLY, var_ifEntry, 3, {2, 1, 10}},
+ {IFINUCASTPKTS, ASN_COUNTER, RONLY, var_ifEntry, 3, {2, 1, 11}},
+ {IFINNUCASTPKTS, ASN_COUNTER, RONLY, var_ifEntry, 3, {2, 1, 12}},
+ {IFINDISCARDS, ASN_COUNTER, RONLY, var_ifEntry, 3, {2, 1, 13}},
+ {IFINERRORS, ASN_COUNTER, RONLY, var_ifEntry, 3, {2, 1, 14}},
+ {IFINUNKNOWNPROTOS, ASN_COUNTER, RONLY, var_ifEntry, 3, {2, 1, 15}},
+ {IFOUTOCTETS, ASN_COUNTER, RONLY, var_ifEntry, 3, {2, 1, 16}},
+ {IFOUTUCASTPKTS, ASN_COUNTER, RONLY, var_ifEntry, 3, {2, 1, 17}},
+ {IFOUTNUCASTPKTS, ASN_COUNTER, RONLY, var_ifEntry, 3, {2, 1, 18}},
+ {IFOUTDISCARDS, ASN_COUNTER, RONLY, var_ifEntry, 3, {2, 1, 19}},
+ {IFOUTERRORS, ASN_COUNTER, RONLY, var_ifEntry, 3, {2, 1, 20}},
+ {IFOUTQLEN, ASN_GAUGE, RONLY, var_ifEntry, 3, {2, 1, 21}},
+ {IFSPECIFIC, ASN_OBJECT_ID, RONLY, var_ifEntry, 3, {2, 1, 22}}
+};
+
+/*
+ * Define the OID pointer to the top of the mib tree that we're
+ * registering underneath, and the OID of the MIB module
+ */
+oid interfaces_variables_oid[] = { SNMP_OID_MIB2, 2 };
+oid interfaces_module_oid[] = { SNMP_OID_MIB2, 31 };
+
+void
+init_interfaces(void)
+{
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("mibII/interfaces", interfaces_variables, variable3,
+ interfaces_variables_oid);
+ REGISTER_SYSOR_ENTRY(interfaces_module_oid,
+ "The MIB module to describe generic objects for network interface sub-layers");
+
+#ifndef USE_SYSCTL_IFLIST
+#if HAVE_NET_IF_MIB_H
+ init_interfaces_setup();
+#endif
+#endif
+#ifdef solaris2
+ init_kernel_sunos5();
+#endif
+}
+
+#ifdef linux
+/*
+ * if_type_from_name
+ * Return interface type using the interface name as a clue.
+ * Returns 1 to imply "other" type if name not recognized.
+ */
+static int
+if_type_from_name(const char *pcch)
+{
+ typedef struct _match_if {
+ int mi_type;
+ const char *mi_name;
+ } *pmatch_if, match_if;
+
+ static match_if lmatch_if[] = {
+ {24, "lo"},
+ {6, "eth"},
+ {9, "tr"},
+ {23, "ppp"},
+ {28, "sl"},
+ {0, 0} /* end of list */
+ };
+
+ int ii, len;
+ register pmatch_if pm;
+
+ for (ii = 0, pm = lmatch_if; pm->mi_name; pm++) {
+ len = strlen(pm->mi_name);
+ if (0 == strncmp(pcch, pm->mi_name, len)) {
+ return (pm->mi_type);
+ }
+ }
+ return (1); /* in case search fails */
+}
+#endif
+
+
+#ifdef linux
+static struct ifnet *ifnetaddr_list;
+#endif
+
+
+/*
+ * header_ifEntry(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ *
+ */
+#if !defined (WIN32) && !defined (cygwin)
+static int
+header_ifEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#define IFENTRY_NAME_LENGTH 10
+ oid newname[MAX_OID_LEN];
+ register int interface;
+ int result, count;
+
+ DEBUGMSGTL(("mibII/interfaces", "var_ifEntry: "));
+ DEBUGMSGOID(("mibII/interfaces", name, *length));
+ DEBUGMSG(("mibII/interfaces", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+ /*
+ * find "next" interface
+ */
+ count = Interface_Scan_Get_Count();
+ for (interface = 1; interface <= count; interface++) {
+ newname[IFENTRY_NAME_LENGTH] = (oid) interface;
+ result =
+ snmp_oid_compare(name, *length, newname,
+ (int) vp->namelen + 1);
+ if ((exact && (result == 0)) || (!exact && (result < 0)))
+ break;
+ }
+ if (interface > count) {
+ DEBUGMSGTL(("mibII/interfaces", "... index out of range\n"));
+ return MATCH_FAILED;
+ }
+
+
+ memcpy((char *) name, (char *) newname,
+ ((int) vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ DEBUGMSGTL(("mibII/interfaces", "... get I/F stats "));
+ DEBUGMSGOID(("mibII/interfaces", name, *length));
+ DEBUGMSG(("mibII/interfaces", "\n"));
+
+ return interface;
+}
+
+
+
+u_char *
+var_interfaces(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ if (header_generic(vp, name, length, exact, var_len, write_method) ==
+ MATCH_FAILED)
+ return NULL;
+
+ switch (vp->magic) {
+ case IFNUMBER:
+ long_return = Interface_Scan_Get_Count();
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_interfaces\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+#ifdef USE_SYSCTL_IFLIST
+
+static u_char *if_list = 0;
+static const u_char *if_list_end;
+static size_t if_list_size = 0;
+
+struct small_ifaddr {
+ struct in_addr sifa_addr;
+ struct in_addr sifa_netmask;
+ struct in_addr sifa_broadcast;
+};
+
+extern const struct sockaddr *get_address(const void *, int, int);
+extern const struct in_addr *get_in_address(const void *, int, int);
+static int Interface_Scan_By_Index(int, struct if_msghdr *, char *,
+ struct small_ifaddr *);
+static int Interface_Get_Ether_By_Index(int, u_char *);
+
+static int
+Interface_Scan_By_Index(int iindex,
+ struct if_msghdr *if_msg,
+ char *if_name, struct small_ifaddr *sifa)
+{
+ u_char *cp;
+ struct if_msghdr *ifp;
+ int have_ifinfo = 0, have_addr = 0;
+
+ if (NULL != sifa)
+ memset(sifa, 0, sizeof(*sifa));
+ for (cp = if_list; cp < if_list_end; cp += ifp->ifm_msglen) {
+ ifp = (struct if_msghdr *) cp;
+ DEBUGMSGTL(("mibII/interfaces", "ifm_type = %d, ifm_index = %d\n",
+ ifp->ifm_type, ifp->ifm_index));
+
+ switch (ifp->ifm_type) {
+ case RTM_IFINFO:
+ {
+ const struct sockaddr *a;
+
+ if (ifp->ifm_index == iindex) {
+ a = get_address(ifp + 1, ifp->ifm_addrs, RTA_IFP);
+ if (a == NULL)
+ return 0;
+ strncpy(if_name,
+ ((const struct sockaddr_in *) a)->sin_zero,
+ ((const u_char *) a)[5]);
+ if_name[((const u_char *) a)[5]] = 0;
+ *if_msg = *ifp;
+ ++have_ifinfo;
+ }
+ }
+ break;
+ case RTM_NEWADDR:
+ {
+ struct ifa_msghdr *ifap = (struct ifa_msghdr *) cp;
+
+ if ((NULL != sifa) && (ifap->ifam_index == iindex)) {
+ const struct in_addr *ia;
+
+ /*
+ * I don't know why the normal get_address() doesn't
+ * work on IRIX 6.2. Maybe this has to do with the
+ * existence of struct sockaddr_new. Hopefully, on
+ * other systems we can simply use get_in_address
+ * three times, with (ifap+1) as the starting
+ * address.
+ */
+
+ sifa->sifa_netmask =
+ *((struct in_addr *) ((char *) (ifap + 1) + 4));
+ ia = get_in_address((char *) (ifap + 1) + 8,
+ ifap->ifam_addrs &=
+ ~RTA_NETMASK, RTA_IFA);
+ if (ia == NULL)
+ return 0;
+
+ sifa->sifa_addr = *ia;
+ ia = get_in_address((char *) (ifap + 1) + 8,
+ ifap->ifam_addrs &= ~RTA_NETMASK,
+ RTA_BRD);
+ if (ia == NULL)
+ return 0;
+
+ sifa->sifa_broadcast = *ia;
+ ++have_addr;
+ }
+ }
+ break;
+ default:
+ DEBUGMSGTL(("mibII/interfaces",
+ "routing socket: unknown message type %d\n",
+ ifp->ifm_type));
+ }
+ }
+ if (have_ifinfo && (NULL == sifa) || (have_addr)) {
+ return 0;
+ } else if (have_ifinfo && !(if_msg->ifm_flags & IFF_UP))
+ return 0;
+ else {
+ return -1;
+ }
+}
+
+int
+Interface_Scan_Get_Count(void)
+{
+ u_char *cp;
+ struct if_msghdr *ifp;
+ long n = 0;
+
+ Interface_Scan_Init();
+
+ if (if_list_size) {
+ for (cp = if_list, n = 0; cp < if_list_end; cp += ifp->ifm_msglen) {
+ ifp = (struct if_msghdr *) cp;
+
+ if (ifp->ifm_type == RTM_IFINFO) {
+ ++n;
+ }
+ }
+ }
+ return n;
+}
+
+void
+Interface_Scan_Init(void)
+{
+ int name[] = { CTL_NET, PF_ROUTE, 0, 0, NET_RT_IFLIST, 0 };
+ size_t size;
+
+ if (sysctl(name, sizeof(name) / sizeof(int), 0, &size, 0, 0) == -1) {
+ snmp_log(LOG_ERR, "sysctl size fail\n");
+ } else {
+ if (if_list == 0 || if_list_size < size) {
+ if (if_list != 0) {
+ free(if_list);
+ }
+ if_list = NULL;
+ if_list_size = 0;
+ if_list_end = 0;
+ if ((if_list = malloc(size)) == NULL) {
+ snmp_log(LOG_ERR,
+ "out of memory allocating route table (size = %d)\n", size);
+ return;
+ }
+ if_list_size = size;
+ } else {
+ size = if_list_size;
+ }
+ if (sysctl(name, sizeof(name) / sizeof(int),
+ if_list, &size, 0, 0) == -1) {
+ snmp_log(LOG_ERR, "sysctl get fail\n");
+ }
+ if_list_end = if_list + size;
+ }
+}
+
+u_char *
+var_ifEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int interface;
+ struct if_msghdr if_msg;
+ static char if_name[100];
+ conf_if_list *if_ptr;
+ char *cp;
+
+ interface =
+ header_ifEntry(vp, name, length, exact, var_len, write_method);
+ if (interface == MATCH_FAILED)
+ return NULL;
+
+ if (Interface_Scan_By_Index(interface, &if_msg, if_name, NULL) != 0)
+ return NULL;
+ if_ptr = netsnmp_access_interface_entry_overrides_get(if_name);
+
+ switch (vp->magic) {
+ case IFINDEX:
+ long_return = interface;
+ return (u_char *) & long_return;
+ case IFDESCR:
+ cp = if_name;
+ *var_len = strlen(if_name);
+ return (u_char *) cp;
+ case IFTYPE:
+ if (if_ptr)
+ long_return = if_ptr->type;
+ else
+ long_return = (long) if_msg.ifm_data.ifi_type;
+ return (u_char *) & long_return;
+ case IFMTU:
+ long_return = (long) if_msg.ifm_data.ifi_mtu;
+ return (u_char *) & long_return;
+ case IFSPEED:
+ if (if_ptr)
+ long_return = if_ptr->speed;
+ else {
+#if STRUCT_IFNET_HAS_IF_BAUDRATE_IFS_VALUE
+ long_return = (u_long) if_msg.ifm_data.ifi_baudrate.ifs_value <<
+ if_msg.ifm_data.ifi_baudrate.ifs_log2;
+#else
+ long_return = (u_long) if_msg.ifm_data.ifi_baudrate;
+#endif
+ }
+ return (u_char *) & long_return;
+ case IFPHYSADDRESS:
+ /*
+ * XXX
+ */
+ return NULL;
+ case IFADMINSTATUS:
+ long_return = if_msg.ifm_flags & IFF_UP ? 1 : 2;
+ return (u_char *) & long_return;
+ case IFOPERSTATUS:
+ long_return = if_msg.ifm_flags & IFF_RUNNING ? 1 : 2;
+ return (u_char *) & long_return;
+ /*
+ * ifLastChange
+ */
+ case IFINOCTETS:
+ long_return = (u_long) if_msg.ifm_data.ifi_ibytes;
+ return (u_char *) & long_return;
+ case IFINUCASTPKTS:
+ long_return =
+ (u_long) if_msg.ifm_data.ifi_ipackets -
+ if_msg.ifm_data.ifi_imcasts;
+ return (u_char *) & long_return;
+ case IFINNUCASTPKTS:
+ long_return = (u_long) if_msg.ifm_data.ifi_imcasts;
+ return (u_char *) & long_return;
+ case IFINDISCARDS:
+ long_return = (u_long) if_msg.ifm_data.ifi_iqdrops;
+ return (u_char *) & long_return;
+ case IFINERRORS:
+ long_return = (u_long) if_msg.ifm_data.ifi_ierrors;
+ return (u_char *) & long_return;
+ case IFINUNKNOWNPROTOS:
+ long_return = (u_long) if_msg.ifm_data.ifi_noproto;
+ return (u_char *) & long_return;
+ case IFOUTOCTETS:
+ long_return = (u_long) if_msg.ifm_data.ifi_obytes;
+ return (u_char *) & long_return;
+ case IFOUTUCASTPKTS:
+ long_return =
+ (u_long) if_msg.ifm_data.ifi_opackets -
+ if_msg.ifm_data.ifi_omcasts;
+ return (u_char *) & long_return;
+ case IFOUTNUCASTPKTS:
+ long_return = (u_long) if_msg.ifm_data.ifi_omcasts;
+ return (u_char *) & long_return;
+ case IFOUTDISCARDS:
+#ifdef if_odrops
+ long_return = (u_long) if_msg.ifm_data.ifi_odrops;
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = 0;
+#endif
+ return (u_char *) & long_return;
+ case IFOUTERRORS:
+ long_return = (u_long) if_msg.ifm_data.ifi_oerrors;
+ return (u_char *) & long_return;
+ case IFLASTCHANGE:
+#ifdef irix6
+ long_return = 0;
+#else
+ if (if_msg.ifm_data.ifi_lastchange.tv_sec == 0 &&
+ if_msg.ifm_data.ifi_lastchange.tv_usec == 0)
+ long_return = 0;
+ else if (if_msg.ifm_data.ifi_lastchange.tv_sec < starttime.tv_sec)
+ long_return = 0;
+ else {
+ long_return = (u_long)
+ ((if_msg.ifm_data.ifi_lastchange.tv_sec -
+ starttime.tv_sec) * 100 +
+ (if_msg.ifm_data.ifi_lastchange.tv_usec -
+ starttime.tv_usec) / 10000);
+ }
+#endif
+ return (u_char *) & long_return;
+ default:
+ return 0;
+ }
+}
+
+int
+Interface_Scan_Next(short *Index,
+ char *Name,
+ struct ifnet *Retifnet, struct in_ifaddr *Retin_ifaddr)
+{
+ return 0;
+}
+
+#else /* not USE_SYSCTL_IFLIST */
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+#ifndef HAVE_NET_IF_MIB_H
+
+#ifndef solaris2
+#ifndef hpux11
+static int Interface_Scan_By_Index(int, char *, struct ifnet *,
+ struct in_ifaddr *);
+static int Interface_Get_Ether_By_Index(int, u_char *);
+#else
+static int Interface_Scan_By_Index(int, char *, nmapi_phystat *);
+#endif
+#endif
+
+
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+
+#ifndef solaris2
+#ifndef hpux
+
+u_char *
+var_ifEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ static struct ifnet ifnet;
+ int interface;
+ static struct in_ifaddr in_ifaddr;
+ static char Name[16];
+ char *cp;
+ conf_if_list *if_ptr;
+#if STRUCT_IFNET_HAS_IF_LASTCHANGE_TV_SEC
+ struct timeval now;
+#endif
+
+ interface =
+ header_ifEntry(vp, name, length, exact, var_len, write_method);
+ if (interface == MATCH_FAILED)
+ return NULL;
+
+ Interface_Scan_By_Index(interface, Name, &ifnet, &in_ifaddr);
+ if_ptr = netsnmp_access_interface_entry_overrides_get(Name);
+
+ switch (vp->magic) {
+ case IFINDEX:
+ long_return = interface;
+ return (u_char *) & long_return;
+ case IFDESCR:
+ cp = Name;
+ *var_len = strlen(cp);
+ return (u_char *) cp;
+ case IFTYPE:
+ if (if_ptr)
+ long_return = if_ptr->type;
+ else {
+#if STRUCT_IFNET_HAS_IF_TYPE
+ long_return = ifnet.if_type;
+#else
+ long_return = 1; /* OTHER */
+#endif
+ }
+ return (u_char *) & long_return;
+ case IFMTU:{
+ long_return = (long) ifnet.if_mtu;
+ return (u_char *) & long_return;
+ }
+ case IFSPEED:
+ if (if_ptr)
+ long_return = if_ptr->speed;
+ else {
+#if STRUCT_IFNET_HAS_IF_BAUDRATE
+ long_return = ifnet.if_baudrate;
+#elif STRUCT_IFNET_HAS_IF_SPEED
+ long_return = ifnet.if_speed;
+#elif STRUCT_IFNET_HAS_IF_TYPE && defined(IFT_ETHER)
+ if (ifnet.if_type == IFT_ETHER)
+ long_return = 10000000;
+ if (ifnet.if_type == IFT_P10)
+ long_return = 10000000;
+ if (ifnet.if_type == IFT_P80)
+ long_return = 80000000;
+ if (ifnet.if_type == IFT_ISDNBASIC)
+ long_return = 64000; /* EDSS1 only */
+ if (ifnet.if_type == IFT_ISDNPRIMARY)
+ long_return = 64000 * 30;
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = (u_long) 10000000;
+#endif
+ }
+ return (u_char *) & long_return;
+ case IFPHYSADDRESS:
+ Interface_Get_Ether_By_Index(interface, return_buf);
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ *var_len = 0;
+#else
+ if ((return_buf[0] == 0) && (return_buf[1] == 0) &&
+ (return_buf[2] == 0) && (return_buf[3] == 0) &&
+ (return_buf[4] == 0) && (return_buf[5] == 0))
+ *var_len = 0;
+ else
+ *var_len = 6;
+#endif
+ return (u_char *) return_buf;
+ case IFADMINSTATUS:
+ long_return = ifnet.if_flags & IFF_UP ? 1 : 2;
+ return (u_char *) & long_return;
+ case IFOPERSTATUS:
+ long_return = ifnet.if_flags & IFF_RUNNING ? 1 : 2;
+ return (u_char *) & long_return;
+ case IFLASTCHANGE:
+#if defined(STRUCT_IFNET_HAS_IF_LASTCHANGE_TV_SEC) && !(defined(freebsd2) && __FreeBSD_version < 199607)
+ /*
+ * XXX - SNMP's ifLastchange is time when op. status changed
+ * * FreeBSD's if_lastchange is time when packet was input or output
+ * * (at least in 2.1.0-RELEASE. Changed in later versions of the kernel?)
+ */
+ /*
+ * FreeBSD's if_lastchange before the 2.1.5 release is the time when
+ * * a packet was last input or output. In the 2.1.5 and later releases,
+ * * this is fixed, thus the 199607 comparison.
+ */
+ if (ifnet.if_lastchange.tv_sec == 0 &&
+ ifnet.if_lastchange.tv_usec == 0)
+ long_return = 0;
+ else if (ifnet.if_lastchange.tv_sec < starttime.tv_sec)
+ long_return = 0;
+ else {
+ long_return = (u_long)
+ ((ifnet.if_lastchange.tv_sec - starttime.tv_sec) * 100
+ + (ifnet.if_lastchange.tv_usec -
+ starttime.tv_usec) / 10000);
+ }
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = 0; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFINOCTETS:
+#ifdef STRUCT_IFNET_HAS_IF_IBYTES
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = (u_long) ifnet.if_ibytes & 0xffffffff;
+#else
+ long_return = (u_long) ifnet.if_ibytes;
+#endif
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = (u_long) ifnet.if_ipackets * 308; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFINUCASTPKTS:
+ {
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = (u_long) ifnet.if_ipackets & 0xffffffff;
+#else
+ long_return = (u_long) ifnet.if_ipackets;
+#endif
+#if STRUCT_IFNET_HAS_IF_IMCASTS
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return -= (u_long) ifnet.if_imcasts & 0xffffffff;
+#else
+ long_return -= (u_long) ifnet.if_imcasts;
+#endif
+#endif
+ }
+ return (u_char *) & long_return;
+ case IFINNUCASTPKTS:
+#if STRUCT_IFNET_HAS_IF_IMCASTS
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = (u_long) ifnet.if_imcasts & 0xffffffff;
+#else
+ long_return = (u_long) ifnet.if_imcasts;
+#endif
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = (u_long) 0; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFINDISCARDS:
+#if STRUCT_IFNET_HAS_IF_IQDROPS
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = (u_long) ifnet.if_iqdrops & 0xffffffff;
+#else
+ long_return = (u_long) ifnet.if_iqdrops;
+#endif
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = (u_long) 0; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFINERRORS:
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = (u_long) ifnet.if_ierrors & 0xffffffff;
+#else
+ long_return = (u_long) ifnet.if_ierrors;
+#endif
+ return (u_char *) & long_return;
+ case IFINUNKNOWNPROTOS:
+#if STRUCT_IFNET_HAS_IF_NOPROTO
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = (u_long) ifnet.if_noproto & 0xffffffff;
+#else
+ long_return = (u_long) ifnet.if_noproto;
+#endif
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = (u_long) 0; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFOUTOCTETS:
+#ifdef STRUCT_IFNET_HAS_IF_OBYTES
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = (u_long) ifnet.if_obytes & 0xffffffff;
+#else
+ long_return = (u_long) ifnet.if_obytes;
+#endif
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = (u_long) ifnet.if_opackets * 308; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFOUTUCASTPKTS:
+ {
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = (u_long) ifnet.if_opackets & 0xffffffff;
+#else
+ long_return = (u_long) ifnet.if_opackets;
+#endif
+#if STRUCT_IFNET_HAS_IF_OMCASTS
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return -= (u_long) ifnet.if_omcasts & 0xffffffff;
+#else
+ long_return -= (u_long) ifnet.if_omcasts;
+#endif
+#endif
+ }
+ return (u_char *) & long_return;
+ case IFOUTNUCASTPKTS:
+#if STRUCT_IFNET_HAS_IF_OMCASTS
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = (u_long) ifnet.if_omcasts & 0xffffffff;
+#else
+ long_return = (u_long) ifnet.if_omcasts;
+#endif
+#else
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = (u_long) 0; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFOUTDISCARDS:
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = ifnet.if_snd.ifq_drops & 0xffffffff;
+#else
+ long_return = ifnet.if_snd.ifq_drops;
+#endif
+ return (u_char *) & long_return;
+ case IFOUTERRORS:
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = ifnet.if_oerrors & 0xffffffff;
+#else
+ long_return = ifnet.if_oerrors;
+#endif
+ return (u_char *) & long_return;
+ case IFOUTQLEN:
+#if defined(aix4) || defined(aix5) || defined(aix6)
+ long_return = ifnet.if_snd.ifq_len & 0xffffffff;
+#else
+ long_return = ifnet.if_snd.ifq_len;
+#endif
+ return (u_char *) & long_return;
+ case IFSPECIFIC:
+ *var_len = nullOidLen;
+ return (u_char *) nullOid;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ifEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+#else /* hpux */
+
+u_char *
+var_ifEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#if defined(hpux11)
+ static nmapi_phystat ifnet;
+#else
+ static struct ifnet ifnet;
+#endif
+ register int interface;
+#if !defined(hpux11)
+ static struct in_ifaddr in_ifaddrVar;
+#endif
+#if defined(hpux11)
+ static char Name[MAX_PHYSADDR_LEN];
+#else
+ static char Name[16];
+#endif
+ register char *cp;
+#if STRUCT_IFNET_HAS_IF_LASTCHANGE_TV_SEC
+ struct timeval now;
+#endif
+#if !defined(hpux11)
+ struct nmparms hp_nmparms;
+ static mib_ifEntry hp_ifEntry;
+ int hp_fd;
+ int hp_len = sizeof(hp_ifEntry);
+#endif
+ conf_if_list *if_ptr;
+
+ interface =
+ header_ifEntry(vp, name, length, exact, var_len, write_method);
+ if (interface == MATCH_FAILED)
+ return NULL;
+
+#if defined(hpux11)
+ Interface_Scan_By_Index(interface, Name, &ifnet);
+#else
+ Interface_Scan_By_Index(interface, Name, &ifnet, &in_ifaddrVar);
+#endif
+
+#if !defined(hpux11)
+ /*
+ * Additional information about the interfaces is available under
+ * HP-UX through the network management interface '/dev/netman'
+ */
+ hp_ifEntry.ifIndex = interface;
+ hp_nmparms.objid = ID_ifEntry;
+ hp_nmparms.buffer = (char *) &hp_ifEntry;
+ hp_nmparms.len = &hp_len;
+ if ((hp_fd = open("/dev/netman", O_RDONLY)) != -1) {
+ if (ioctl(hp_fd, NMIOGET, &hp_nmparms) != -1) {
+ close(hp_fd);
+ } else {
+ close(hp_fd);
+ hp_fd = -1; /* failed */
+ }
+ }
+#endif
+ if_ptr = netsnmp_access_interface_entry_overrides_get(Name);
+
+ switch (vp->magic) {
+ case IFINDEX:
+ long_return = interface;
+ return (u_char *) & long_return;
+ case IFDESCR:
+#if defined(hpux11)
+ cp = ifnet.if_entry.ifDescr;
+#else
+ if (hp_fd != -1)
+ cp = hp_ifEntry.ifDescr;
+ else
+ cp = Name;
+#endif
+ *var_len = strlen(cp);
+ return (u_char *) cp;
+ case IFTYPE:
+ if (if_ptr)
+ long_return = if_ptr->type;
+ else {
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifType;
+#else
+ if (hp_fd != -1)
+ long_return = hp_ifEntry.ifType;
+ else
+ long_return = 1; /* OTHER */
+#endif
+ }
+ return (u_char *) & long_return;
+ case IFMTU:{
+#if defined(hpux11)
+ long_return = (long) ifnet.if_entry.ifMtu;
+#else
+ long_return = (long) ifnet.if_mtu;
+#endif
+ return (u_char *) & long_return;
+ }
+ case IFSPEED:
+ if (if_ptr)
+ long_return = if_ptr->speed;
+ else {
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifSpeed;
+#else
+ if (hp_fd != -1)
+ long_return = hp_ifEntry.ifSpeed;
+ else
+ long_return = (u_long) 1; /* OTHER */
+#endif
+ }
+ return (u_char *) & long_return;
+ case IFPHYSADDRESS:
+#if defined(hpux11)
+ *var_len = ifnet.if_entry.ifPhysAddress.o_length;
+ return (u_char *) ifnet.if_entry.ifPhysAddress.o_bytes;
+#else
+ Interface_Get_Ether_By_Index(interface, return_buf);
+ if ((return_buf[0] == 0) && (return_buf[1] == 0) &&
+ (return_buf[2] == 0) && (return_buf[3] == 0) &&
+ (return_buf[4] == 0) && (return_buf[5] == 0))
+ *var_len = 0;
+ else
+ *var_len = 6;
+ return (u_char *) return_buf;
+#endif
+ case IFADMINSTATUS:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifAdmin;
+#else
+ long_return = ifnet.if_flags & IFF_UP ? 1 : 2;
+#endif
+ return (u_char *) & long_return;
+ case IFOPERSTATUS:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifOper;
+#else
+ long_return = ifnet.if_flags & IFF_RUNNING ? 1 : 2;
+#endif
+ return (u_char *) & long_return;
+ case IFLASTCHANGE:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifLastChange;
+#else
+ if (hp_fd != -1)
+ long_return = hp_ifEntry.ifLastChange;
+ else
+ long_return = 0; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFINOCTETS:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifInOctets;
+#else
+ if (hp_fd != -1)
+ long_return = hp_ifEntry.ifInOctets;
+ else
+ long_return = (u_long) ifnet.if_ipackets * 308; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFINUCASTPKTS:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifInUcastPkts;
+#else
+ if (hp_fd != -1)
+ long_return = hp_ifEntry.ifInUcastPkts;
+ else
+ long_return = (u_long) ifnet.if_ipackets;
+#endif
+ return (u_char *) & long_return;
+ case IFINNUCASTPKTS:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifInNUcastPkts;
+#else
+ if (hp_fd != -1)
+ long_return = hp_ifEntry.ifInNUcastPkts;
+ else
+ long_return = (u_long) 0; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFINDISCARDS:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifInDiscards;
+#else
+ if (hp_fd != -1)
+ long_return = hp_ifEntry.ifInDiscards;
+ else
+ long_return = (u_long) 0; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFINERRORS:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifInErrors;
+#else
+ long_return = ifnet.if_ierrors;
+#endif
+ return (u_char *) & long_return;
+ case IFINUNKNOWNPROTOS:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifInUnknownProtos;
+#else
+ if (hp_fd != -1)
+ long_return = hp_ifEntry.ifInUnknownProtos;
+ else
+ long_return = (u_long) 0; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFOUTOCTETS:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifOutOctets;
+#else
+ if (hp_fd != -1)
+ long_return = hp_ifEntry.ifOutOctets;
+ else
+ long_return = (u_long) ifnet.if_opackets * 308; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFOUTUCASTPKTS:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifOutUcastPkts;
+#else
+ if (hp_fd != -1)
+ long_return = hp_ifEntry.ifOutUcastPkts;
+ else
+ long_return = (u_long) ifnet.if_opackets;
+#endif
+ return (u_char *) & long_return;
+ case IFOUTNUCASTPKTS:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifOutNUcastPkts;
+#else
+ if (hp_fd != -1)
+ long_return = hp_ifEntry.ifOutNUcastPkts;
+ else
+ long_return = (u_long) 0; /* XXX */
+#endif
+ return (u_char *) & long_return;
+ case IFOUTDISCARDS:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifOutDiscards;
+#else
+ long_return = ifnet.if_snd.ifq_drops;
+#endif
+ return (u_char *) & long_return;
+ case IFOUTERRORS:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifOutErrors;
+#else
+ long_return = ifnet.if_oerrors;
+#endif
+ return (u_char *) & long_return;
+ case IFOUTQLEN:
+#if defined(hpux11)
+ long_return = ifnet.if_entry.ifOutQlen;
+#else
+ long_return = ifnet.if_snd.ifq_len;
+#endif
+ return (u_char *) & long_return;
+ case IFSPECIFIC:
+ *var_len = nullOidLen;
+ return (u_char *) nullOid;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ifEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+#endif /* hpux */
+#else /* solaris2 */
+
+static int
+IF_cmp(void *addr, void *ep)
+{
+ DEBUGMSGTL(("mibII/interfaces", "... IF_cmp %d %d\n",
+ ((mib2_ifEntry_t *) ep)->ifIndex,
+ ((mib2_ifEntry_t *) addr)->ifIndex));
+ if (((mib2_ifEntry_t *) ep)->ifIndex ==
+ ((mib2_ifEntry_t *) addr)->ifIndex)
+ return (0);
+ else
+ return (1);
+}
+
+u_char *
+var_ifEntry(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int interface;
+ mib2_ifEntry_t ifstat;
+ conf_if_list *if_ptr = NULL;
+
+ interface =
+ header_ifEntry(vp, name, length, exact, var_len, write_method);
+ if (interface == MATCH_FAILED)
+ return NULL;
+
+ if (getMibstat(MIB_INTERFACES, &ifstat, sizeof(mib2_ifEntry_t),
+ GET_EXACT, &IF_cmp, &interface) != 0) {
+ DEBUGMSGTL(("mibII/interfaces", "... no mib stats\n"));
+ return NULL;
+ }
+ /*
+ * hmmm.. where to get the interface name to check overrides?
+ *
+ * if_ptr = netsnmp_access_interface_entry_overrides_get(Name);
+ */
+ switch (vp->magic) {
+ case IFINDEX:
+ long_return = ifstat.ifIndex;
+ return (u_char *) & long_return;
+ case IFDESCR:
+ *var_len = ifstat.ifDescr.o_length;
+ (void) memcpy(return_buf, ifstat.ifDescr.o_bytes, *var_len);
+ return (u_char *) return_buf;
+ case IFTYPE:
+ if (if_ptr)
+ long_return = if_ptr->type;
+ else
+ long_return = (u_long) ifstat.ifType;
+ return (u_char *) & long_return;
+ case IFMTU:
+ long_return = (u_long) ifstat.ifMtu;
+ return (u_char *) & long_return;
+ case IFSPEED:
+ if (if_ptr)
+ long_return = if_ptr->speed;
+ else
+ long_return = (u_long) ifstat.ifSpeed;
+ return (u_char *) & long_return;
+ case IFPHYSADDRESS:
+ *var_len = ifstat.ifPhysAddress.o_length;
+ (void) memcpy(return_buf, ifstat.ifPhysAddress.o_bytes, *var_len);
+ return (u_char *) return_buf;
+ case IFADMINSTATUS:
+ long_return = (u_long) ifstat.ifAdminStatus;
+ return (u_char *) & long_return;
+ case IFOPERSTATUS:
+ long_return = (u_long) ifstat.ifOperStatus;
+ return (u_char *) & long_return;
+ case IFLASTCHANGE:
+ long_return = (u_long) ifstat.ifLastChange;
+ return (u_char *) & long_return;
+ case IFINOCTETS:
+ long_return = (u_long) ifstat.ifInOctets;
+ return (u_char *) & long_return;
+ case IFINUCASTPKTS:
+ long_return = (u_long) ifstat.ifInUcastPkts;
+ return (u_char *) & long_return;
+ case IFINNUCASTPKTS:
+ long_return = (u_long) ifstat.ifInNUcastPkts;
+ return (u_char *) & long_return;
+ case IFINDISCARDS:
+ long_return = (u_long) ifstat.ifInDiscards;
+ return (u_char *) & long_return;
+ case IFINERRORS:
+ long_return = (u_long) ifstat.ifInErrors;
+ return (u_char *) & long_return;
+ case IFINUNKNOWNPROTOS:
+ long_return = (u_long) ifstat.ifInUnknownProtos;
+ return (u_char *) & long_return;
+ case IFOUTOCTETS:
+ long_return = (u_long) ifstat.ifOutOctets;
+ return (u_char *) & long_return;
+ case IFOUTUCASTPKTS:
+ long_return = (u_long) ifstat.ifOutUcastPkts;
+ return (u_char *) & long_return;
+ case IFOUTNUCASTPKTS:
+ long_return = (u_long) ifstat.ifOutNUcastPkts;
+ return (u_char *) & long_return;
+ case IFOUTDISCARDS:
+ long_return = (u_long) ifstat.ifOutDiscards;
+ return (u_char *) & long_return;
+ case IFOUTERRORS:
+ long_return = (u_long) ifstat.ifOutErrors;
+ return (u_char *) & long_return;
+ case IFOUTQLEN:
+ long_return = (u_long) ifstat.ifOutQLen;
+ return (u_char *) & long_return;
+ case IFSPECIFIC:
+ long_return = (u_long) ifstat.ifSpecific;
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ifEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+#endif /* solaris2 */
+
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+
+#ifndef solaris2
+
+#if !defined(sunV3) && !defined(linux) && !defined(hpux11)
+static struct in_ifaddr savein_ifaddr;
+#endif
+#if !defined(hpux11)
+static struct ifnet *ifnetaddr, saveifnet, *saveifnetaddr;
+static char saveName[16];
+#endif
+static int saveIndex = 0;
+
+/**
+* Determines network interface speed. It is system specific. Only linux
+* realization is made.
+*/
+unsigned int getIfSpeed(int fd, struct ifreq ifr)
+{
+#ifdef linux
+ /** temporary expose internal until this module can be re-written */
+ extern unsigned int
+ netsnmp_linux_interface_get_if_speed(int fd, const char *name);
+
+ return netsnmp_linux_interface_get_if_speed(fd, ifr.ifr_name);
+#else /*!linux*/
+ return 10000000;
+#endif
+}
+
+void
+Interface_Scan_Init(void)
+{
+#ifdef linux
+ char line[256], ifname_buf[64], *ifname, *ptr;
+ struct ifreq ifrq;
+ struct ifnet **ifnetaddr_ptr;
+ FILE *devin;
+ int i, fd;
+ conf_if_list *if_ptr;
+ /*
+ * scanline_2_2:
+ * [ IN ]
+ * byte pkts errs drop fifo frame cmprs mcst |
+ * [ OUT ]
+ * byte pkts errs drop fifo colls carrier compressed
+ */
+#ifdef SCNuMAX
+ uintmax_t rec_pkt, rec_oct, rec_err, rec_drop;
+ uintmax_t snd_pkt, snd_oct, snd_err, snd_drop, coll;
+ const char *scan_line_2_2 =
+ "%" SCNuMAX " %" SCNuMAX " %" SCNuMAX " %" SCNuMAX
+ " %*" SCNuMAX " %*" SCNuMAX " %*" SCNuMAX " %*" SCNuMAX
+ " %" SCNuMAX " %" SCNuMAX " %" SCNuMAX " %" SCNuMAX
+ " %*" SCNuMAX " %" SCNuMAX;
+ const char *scan_line_2_0 =
+ "%" SCNuMAX " %" SCNuMAX " %*" SCNuMAX " %*" SCNuMAX
+ " %*" SCNuMAX " %" SCNuMAX " %" SCNuMAX " %*" SCNuMAX
+ " %*" SCNuMAX " %" SCNuMAX;
+#else
+ unsigned long rec_pkt, rec_oct, rec_err, rec_drop;
+ unsigned long snd_pkt, snd_oct, snd_err, snd_drop, coll;
+ const char *scan_line_2_2 =
+ "%lu %lu %lu %lu %*lu %*lu %*lu %*lu %lu %lu %lu %lu %*lu %lu";
+ const char *scan_line_2_0 =
+ "%lu %lu %*lu %*lu %*lu %lu %lu %*lu %*lu %lu";
+#endif
+ const char *scan_line_to_use;
+ struct timeval et; /* elapsed time */
+
+#endif
+
+#if !defined(hpux11) && defined(IFNET_SYMBOL)
+ auto_nlist(IFNET_SYMBOL, (char *) &ifnetaddr, sizeof(ifnetaddr));
+#endif
+ saveIndex = 0;
+
+
+#ifdef linux
+ /* disallow reloading of structures too often */
+ gettimeofday ( &et, ( struct timezone * ) 0 ); /* get time-of-day */
+ if ( et.tv_sec < LastLoad + MINLOADFREQ ) { /* only reload so often */
+ ifnetaddr = ifnetaddr_list; /* initialize pointer */
+ return;
+ }
+ LastLoad = et.tv_sec;
+
+ /*
+ * free old list:
+ */
+ while (ifnetaddr_list) {
+ struct ifnet *old = ifnetaddr_list;
+ ifnetaddr_list = ifnetaddr_list->if_next;
+ free(old->if_name);
+ free(old->if_unit);
+ free(old);
+ }
+
+ ifnetaddr = 0;
+ ifnetaddr_ptr = &ifnetaddr_list;
+
+ if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ DEBUGMSGTL(("snmpd",
+ "socket open failure in Interface_Scan_Init\n"));
+ return; /** exit (1); **/
+ }
+
+ /*
+ * build up ifnetaddr list by hand:
+ */
+
+ /*
+ * at least linux v1.3.53 says EMFILE without reason...
+ */
+ if (!(devin = fopen("/proc/net/dev", "r"))) {
+ close(fd);
+ snmp_log(LOG_ERR, "cannot open /proc/net/dev - continuing...\n");
+ return; /** exit (1); **/
+ }
+
+ i = 0;
+
+ /*
+ * read the second line (a header) and determine the fields we
+ * should read from. This should be done in a better way by
+ * actually looking for the field names we want. But thats too
+ * much work for today. -- Wes
+ */
+ fgets(line, sizeof(line), devin);
+ fgets(line, sizeof(line), devin);
+ if (strstr(line, "compressed")) {
+ scan_line_to_use = scan_line_2_2;
+ DEBUGMSGTL(("mibII/interfaces",
+ "using linux 2.2 kernel /proc/net/dev\n"));
+ } else {
+ scan_line_to_use = scan_line_2_0;
+ DEBUGMSGTL(("mibII/interfaces",
+ "using linux 2.0 kernel /proc/net/dev\n"));
+ }
+
+
+ while (fgets(line, sizeof(line), devin)) {
+ struct ifnet *nnew;
+ char *stats, *ifstart = line;
+
+ if (line[strlen(line) - 1] == '\n')
+ line[strlen(line) - 1] = '\0';
+
+ while (*ifstart && *ifstart == ' ')
+ ifstart++;
+
+ if (!*ifstart || ((stats = strrchr(ifstart, ':')) == NULL)) {
+ snmp_log(LOG_ERR,
+ "/proc/net/dev data format error, line ==|%s|", line);
+ continue;
+ }
+ if ((scan_line_to_use == scan_line_2_2) && ((stats - line) < 6)) {
+ snmp_log(LOG_ERR,
+ "/proc/net/dev data format error, line ==|%s|", line);
+ }
+
+ *stats = 0;
+ strncpy(ifname_buf, ifstart, sizeof(ifname_buf));
+ ifname_buf[ sizeof(ifname_buf)-1 ] = 0;
+ *stats++ = ':';
+ while (*stats == ' ')
+ stats++;
+
+ if ((scan_line_to_use == scan_line_2_2 &&
+ sscanf(stats, scan_line_to_use, &rec_oct, &rec_pkt, &rec_err,
+ &rec_drop, &snd_oct, &snd_pkt, &snd_err, &snd_drop,
+ &coll) != 9) || (scan_line_to_use == scan_line_2_0
+ && sscanf(stats, scan_line_to_use,
+ &rec_pkt, &rec_err,
+ &snd_pkt, &snd_err,
+ &coll) != 5)) {
+ if ((scan_line_to_use == scan_line_2_2)
+ && !strstr(line, "No statistics available"))
+ snmp_log(LOG_ERR,
+ "/proc/net/dev data format error, line ==|%s|",
+ line);
+ continue;
+ }
+
+ nnew = (struct ifnet *) calloc(1, sizeof(struct ifnet));
+ if (nnew == NULL)
+ break; /* alloc error */
+
+ /*
+ * chain in:
+ */
+ *ifnetaddr_ptr = nnew;
+ ifnetaddr_ptr = &nnew->if_next;
+ i++;
+
+ /*
+ * linux previous to 1.3.~13 may miss transmitted loopback pkts:
+ */
+ if (!strcmp(ifname_buf, "lo") && rec_pkt > 0 && !snd_pkt)
+ snd_pkt = rec_pkt;
+
+ nnew->if_ipackets = rec_pkt & 0xffffffff;
+ nnew->if_ierrors = rec_err;
+ nnew->if_opackets = snd_pkt & 0xffffffff;
+ nnew->if_oerrors = snd_err;
+ nnew->if_collisions = coll;
+ if (scan_line_to_use == scan_line_2_2) {
+ nnew->if_ibytes = rec_oct & 0xffffffff;
+ nnew->if_obytes = snd_oct & 0xffffffff;
+ nnew->if_iqdrops = rec_drop;
+ nnew->if_snd.ifq_drops = snd_drop;
+ } else {
+ nnew->if_ibytes = (rec_pkt * 308) & 0xffffffff;
+ nnew->if_obytes = (snd_pkt * 308) & 0xffffffff;
+ }
+
+ /*
+ * ifnames are given as `` eth0'': split in ``eth'' and ``0'':
+ */
+ for (ifname = ifname_buf; *ifname && *ifname == ' '; ifname++);
+
+ /*
+ * set name and interface# :
+ */
+ nnew->if_name = (char *) strdup(ifname);
+ for (ptr = nnew->if_name; *ptr && (*ptr < '0' || *ptr > '9');
+ ptr++);
+ nnew->if_unit = strdup(*ptr ? ptr : "");
+ *ptr = 0;
+
+ strncpy(ifrq.ifr_name, ifname, sizeof(ifrq.ifr_name));
+ ifrq.ifr_name[ sizeof(ifrq.ifr_name)-1 ] = 0;
+ if (ioctl(fd, SIOCGIFADDR, &ifrq) < 0)
+ memset((char *) &nnew->if_addr, 0, sizeof(nnew->if_addr));
+ else
+ nnew->if_addr = ifrq.ifr_addr;
+
+ strncpy(ifrq.ifr_name, ifname, sizeof(ifrq.ifr_name));
+ ifrq.ifr_name[ sizeof(ifrq.ifr_name)-1 ] = 0;
+ if (ioctl(fd, SIOCGIFBRDADDR, &ifrq) < 0)
+ memset((char *) &nnew->ifu_broadaddr, 0,
+ sizeof(nnew->ifu_broadaddr));
+ else
+ nnew->ifu_broadaddr = ifrq.ifr_broadaddr;
+
+ strncpy(ifrq.ifr_name, ifname, sizeof(ifrq.ifr_name));
+ ifrq.ifr_name[ sizeof(ifrq.ifr_name)-1 ] = 0;
+ if (ioctl(fd, SIOCGIFNETMASK, &ifrq) < 0)
+ memset((char *) &nnew->ia_subnetmask, 0,
+ sizeof(nnew->ia_subnetmask));
+ else
+ nnew->ia_subnetmask = ifrq.ifr_netmask;
+
+ strncpy(ifrq.ifr_name, ifname, sizeof(ifrq.ifr_name));
+ ifrq.ifr_name[ sizeof(ifrq.ifr_name)-1 ] = 0;
+ nnew->if_flags = ioctl(fd, SIOCGIFFLAGS, &ifrq) < 0
+ ? 0 : ifrq.ifr_flags;
+
+ nnew->if_type = 0;
+
+ /*
+ * NOTE: this ioctl does not guarantee 6 bytes of a physaddr.
+ * In particular, a 'sit0' interface only appears to get back
+ * 4 bytes of sa_data.
+ */
+ memset(ifrq.ifr_hwaddr.sa_data, (0), IFHWADDRLEN);
+ strncpy(ifrq.ifr_name, ifname, sizeof(ifrq.ifr_name));
+ ifrq.ifr_name[ sizeof(ifrq.ifr_name)-1 ] = 0;
+ if (ioctl(fd, SIOCGIFHWADDR, &ifrq) < 0)
+ memset(nnew->if_hwaddr, (0), IFHWADDRLEN);
+ else {
+ memcpy(nnew->if_hwaddr, ifrq.ifr_hwaddr.sa_data, IFHWADDRLEN);
+
+#ifdef ARPHRD_LOOPBACK
+ switch (ifrq.ifr_hwaddr.sa_family) {
+ case ARPHRD_ETHER:
+ nnew->if_type = 6;
+ break;
+ case ARPHRD_TUNNEL:
+ case ARPHRD_TUNNEL6:
+#ifdef ARPHRD_IPGRE
+ case ARPHRD_IPGRE:
+#endif
+ case ARPHRD_SIT:
+ nnew->if_type = 131;
+ break; /* tunnel */
+ case ARPHRD_SLIP:
+ case ARPHRD_CSLIP:
+ case ARPHRD_SLIP6:
+ case ARPHRD_CSLIP6:
+ nnew->if_type = 28;
+ break; /* slip */
+ case ARPHRD_PPP:
+ nnew->if_type = 23;
+ break; /* ppp */
+ case ARPHRD_LOOPBACK:
+ nnew->if_type = 24;
+ break; /* softwareLoopback */
+ case ARPHRD_FDDI:
+ nnew->if_type = 15;
+ break;
+ case ARPHRD_ARCNET:
+ nnew->if_type = 35;
+ break;
+ case ARPHRD_LOCALTLK:
+ nnew->if_type = 42;
+ break;
+#ifdef ARPHRD_HIPPI
+ case ARPHRD_HIPPI:
+ nnew->if_type = 47;
+ break;
+#endif
+#ifdef ARPHRD_ATM
+ case ARPHRD_ATM:
+ nnew->if_type = 37;
+ break;
+#endif
+ /*
+ * XXX: more if_arp.h:ARPHDR_xxx to IANAifType mappings...
+ */
+ }
+#endif
+ }
+
+ strncpy(ifrq.ifr_name, ifname, sizeof(ifrq.ifr_name));
+ ifrq.ifr_name[ sizeof(ifrq.ifr_name)-1 ] = 0;
+ nnew->if_metric = ioctl(fd, SIOCGIFMETRIC, &ifrq) < 0
+ ? 0 : ifrq.ifr_metric;
+
+#ifdef SIOCGIFMTU
+ strncpy(ifrq.ifr_name, ifname, sizeof(ifrq.ifr_name));
+ ifrq.ifr_name[ sizeof(ifrq.ifr_name)-1 ] = 0;
+ nnew->if_mtu = (ioctl(fd, SIOCGIFMTU, &ifrq) < 0)
+ ? 0 : ifrq.ifr_mtu;
+#else
+ nnew->if_mtu = 0;
+#endif
+
+ if_ptr = netsnmp_access_interface_entry_overrides_get(ifname);
+ if (if_ptr) {
+ nnew->if_type = if_ptr->type;
+ nnew->if_speed = if_ptr->speed;
+ } else {
+ /*
+ * do only guess if_type from name, if we could not read
+ * * it before from SIOCGIFHWADDR
+ */
+ if (!nnew->if_type)
+ nnew->if_type = if_type_from_name(nnew->if_name);
+ nnew->if_speed = nnew->if_type == 6 ? getIfSpeed(fd, ifrq) :
+ nnew->if_type == 24 ? 10000000 :
+ nnew->if_type == 9 ? 4000000 : 0;
+ /*Zero speed means link problem*/
+ if(nnew->if_speed == 0 && nnew->if_flags & IFF_UP){
+ nnew->if_flags &= ~IFF_RUNNING;
+ }
+ }
+
+ } /* while (fgets ... */
+
+ ifnetaddr = ifnetaddr_list;
+
+ if (snmp_get_do_debugging()) {
+ {
+ struct ifnet *x = ifnetaddr;
+ DEBUGMSGTL(("mibII/interfaces", "* see: known interfaces:"));
+ while (x) {
+ DEBUGMSG(("mibII/interfaces", " %s", x->if_name));
+ x = x->if_next;
+ }
+ DEBUGMSG(("mibII/interfaces", "\n"));
+ } /* XXX */
+ }
+
+ fclose(devin);
+ close(fd);
+#endif /* linux */
+}
+
+
+
+#if defined(sunV3) || defined(linux)
+/*
+ * ** 4.2 BSD doesn't have ifaddr
+ * **
+ */
+int
+Interface_Scan_Next(short *Index,
+ char *Name,
+ struct ifnet *Retifnet, struct in_ifaddr *dummy)
+{
+ struct ifnet ifnet;
+ register char *cp;
+
+ while (ifnetaddr) {
+ /*
+ * Get the "ifnet" structure and extract the device name
+ */
+#ifndef linux
+ if (!NETSNMP_KLOOKUP(ifnetaddr, (char *) &ifnet, sizeof ifnet)) {
+ DEBUGMSGTL(("mibII/interfaces:Interface_Scan_Next", "klookup failed\n"));
+ break;
+ }
+
+ if (!NETSNMP_KLOOKUP(ifnet.if_name, (char *) saveName, sizeof saveName)) {
+ DEBUGMSGTL(("mibII/interfaces:Interface_Scan_Next", "klookup failed\n"));
+ break;
+ }
+
+ /*
+ * The purpose of this comparison is lost in the mists of time.
+ * It's been around at least cmu-snmp 2.1.2 for SUNv3 systems and
+ * was applied to linux systems during the cmu-snmp-linux project.
+ * No-one now knows what it was intended for, and it breaks IPv6
+ * tunnel interfaces, so it's been moved out of the Linux code block.
+ */
+ if (strcmp(saveName, "ip") == 0) {
+ ifnetaddr = ifnet.if_next;
+ continue;
+ }
+#else
+ ifnet = *ifnetaddr;
+ strncpy(saveName, ifnet.if_name, sizeof(saveName));
+#endif
+
+ saveName[sizeof(saveName) - 1] = '\0';
+ cp = (char *) strchr(saveName, '\0');
+#ifdef linux
+ strncat(cp, ifnet.if_unit, sizeof(saveName)-strlen(saveName)-1);
+ saveName[sizeof(saveName) - 1] = '\0';
+#else
+ string_append_int(cp, ifnet.if_unit);
+#endif
+ if (1 || strcmp(saveName, "lo0") != 0) { /* XXX */
+
+ if (Index)
+ *Index = ++saveIndex;
+ if (Retifnet)
+ *Retifnet = ifnet;
+ if (Name)
+ strcpy(Name, saveName);
+ saveifnet = ifnet;
+ saveifnetaddr = ifnetaddr;
+ ifnetaddr = ifnet.if_next;
+
+ return (1); /* DONE */
+ }
+ ifnetaddr = ifnet.if_next;
+ }
+ return (0); /* EOF */
+}
+
+#ifdef linux
+int
+Interface_Index_By_Name(char *Name, int Len)
+{
+ short ifIndex = 0;
+ char ifName[20];
+
+ Interface_Scan_Init();
+ while (Interface_Scan_Next(&ifIndex, ifName, NULL, NULL)
+ && strcmp(Name, ifName));
+ return ifIndex;
+}
+#endif
+
+
+#else /* sunV3 || linux */
+
+#if defined(netbsd1) || defined(openbsd2)
+#define ia_next ia_list.tqe_next
+#define if_next if_list.tqe_next
+#endif
+
+#if defined(hpux11)
+
+int
+Interface_Scan_Next(short *Index, char *Name, nmapi_phystat * Retifnet)
+{
+ static nmapi_phystat *if_ptr = (nmapi_phystat *) 0;
+ int count = Interface_Scan_Get_Count();
+ unsigned int ulen;
+ int ret;
+
+ if (!if_ptr) {
+ if (count)
+ if_ptr =
+ (nmapi_phystat *) malloc(sizeof(nmapi_phystat) * count);
+ else
+ return (0); /* EOF */
+ }
+
+ if (saveIndex >= count)
+ return (0); /* EOF */
+
+ ulen = (unsigned int) count *sizeof(nmapi_phystat);
+ if ((ret = get_physical_stat(if_ptr, &ulen)) < 0)
+ return (0); /* EOF */
+
+ if (Retifnet)
+ *Retifnet = if_ptr[saveIndex];
+ if (Name)
+ strcpy(Name, if_ptr[saveIndex].nm_device);
+ saveIndex++;
+ if (Index)
+ *Index = saveIndex;
+ return (1); /* DONE */
+}
+
+#else /* hpux11 */
+
+int
+Interface_Scan_Next(short *Index,
+ char *Name,
+ struct ifnet *Retifnet, struct in_ifaddr *Retin_ifaddr)
+{
+ struct ifnet ifnet;
+ struct in_ifaddr *ia, in_ifaddr;
+ short has_ipaddr = 0;
+#if !STRUCT_IFNET_HAS_IF_XNAME
+ register char *cp;
+#endif
+
+ while (ifnetaddr) {
+ /*
+ * Get the "ifnet" structure and extract the device name
+ */
+ if (!NETSNMP_KLOOKUP(ifnetaddr, (char *) &ifnet, sizeof ifnet)) {
+ DEBUGMSGTL(("mibII/interfaces:Interface_Scan_Next", "klookup failed\n"));
+ break;
+ }
+#if STRUCT_IFNET_HAS_IF_XNAME
+#if defined(netbsd1) || defined(openbsd2)
+ strncpy(saveName, ifnet.if_xname, sizeof saveName);
+#else
+ if (!NETSNMP_KLOOKUP(ifnet.if_xname, (char *) saveName, sizeof saveName)) {
+ DEBUGMSGTL(("mibII/interfaces:Interface_Scan_Next", "klookup failed\n"));
+ break;
+ }
+#endif
+ saveName[sizeof(saveName) - 1] = '\0';
+#else
+ if (!NETSNMP_KLOOKUP(ifnet.if_name, (char *) saveName, sizeof saveName)) {
+ DEBUGMSGTL(("mibII/interfaces:Interface_Scan_Next", "klookup failed\n"));
+ break;
+ }
+
+ saveName[sizeof(saveName) - 1] = '\0';
+ cp = strchr(saveName, '\0');
+ string_append_int(cp, ifnet.if_unit);
+#endif
+ if (1 || strcmp(saveName, "lo0") != 0) { /* XXX */
+ /*
+ * Try to find an address for this interface
+ */
+
+#ifdef netbsd1
+ ia = (struct in_ifaddr *) ifnet.if_addrlist.tqh_first;
+#elif defined(IFADDR_SYMBOL)
+ auto_nlist(IFADDR_SYMBOL, (char *) &ia, sizeof(ia));
+#endif
+ while (ia) {
+ if (!NETSNMP_KLOOKUP(ia, (char *) &in_ifaddr, sizeof(in_ifaddr))) {
+ DEBUGMSGTL(("mibII/interfaces:Interface_Scan_Next", "klookup failed\n"));
+ break;
+ }
+ {
+#ifdef netbsd1
+#define CP(x) ((char *)(x))
+ char *cp;
+ struct sockaddr *sa;
+ cp = (CP(in_ifaddr.ia_ifa.ifa_addr) - CP(ia)) +
+ CP(&in_ifaddr);
+ sa = (struct sockaddr *) cp;
+
+ if (sa->sa_family == AF_INET)
+#endif
+ if (in_ifaddr.ia_ifp == ifnetaddr) {
+ has_ipaddr = 1; /* this IF has IP-address */
+ break;
+ }
+ }
+#ifdef netbsd1
+ ia = (struct in_ifaddr *) in_ifaddr.ia_ifa.ifa_list.
+ tqe_next;
+#else
+ ia = in_ifaddr.ia_next;
+#endif
+ }
+
+#if !defined(netbsd1) && !defined(freebsd2) && !defined(openbsd2) && !defined(STRUCT_IFNET_HAS_IF_ADDRLIST)
+ ifnet.if_addrlist = (struct ifaddr *) ia; /* WRONG DATA TYPE; ONLY A FLAG */
+#endif
+ /*
+ * ifnet.if_addrlist = (struct ifaddr *)&ia->ia_ifa;
+ *
+ * WRONG DATA TYPE; ONLY A FLAG
+ */
+
+ if (Index)
+ *Index = ++saveIndex;
+ if (Retifnet)
+ *Retifnet = ifnet;
+ if (Retin_ifaddr && has_ipaddr) /* assign the in_ifaddr only
+ * if the IF has IP-address */
+ *Retin_ifaddr = in_ifaddr;
+ if (Name)
+ strcpy(Name, saveName);
+ saveifnet = ifnet;
+ saveifnetaddr = ifnetaddr;
+ savein_ifaddr = in_ifaddr;
+ ifnetaddr = ifnet.if_next;
+
+ return (1); /* DONE */
+ }
+ ifnetaddr = ifnet.if_next;
+ }
+ return (0); /* EOF */
+}
+
+#endif /* hpux11 */
+
+#endif /* sunV3 || linux */
+
+#if defined(hpux11)
+
+static int
+Interface_Scan_By_Index(int Index, char *Name, nmapi_phystat * Retifnet)
+{
+ short i;
+
+ Interface_Scan_Init();
+ while (Interface_Scan_Next(&i, Name, Retifnet)) {
+ if (i == Index)
+ break;
+ }
+ if (i != Index)
+ return (-1); /* Error, doesn't exist */
+ return (0); /* DONE */
+}
+
+#else /* hpux11 */
+
+static int
+Interface_Scan_By_Index(int Index,
+ char *Name,
+ struct ifnet *Retifnet,
+ struct in_ifaddr *Retin_ifaddr)
+{
+ short i;
+
+ Interface_Scan_Init();
+ while (Interface_Scan_Next(&i, Name, Retifnet, Retin_ifaddr)) {
+ if (i == Index)
+ break;
+ }
+ if (i != Index)
+ return (-1); /* Error, doesn't exist */
+ return (0); /* DONE */
+}
+
+#endif /* hpux11 */
+
+static int Interface_Count = 0;
+
+#if defined(hpux11)
+
+int
+Interface_Scan_Get_Count(void)
+{
+ if (!Interface_Count) {
+ int fd;
+ struct nmparms p;
+ int val;
+ unsigned int ulen;
+ int ret;
+
+ if ((fd = open_mib("/dev/ip", O_RDONLY, 0, NM_ASYNC_OFF)) >= 0) {
+ p.objid = ID_ifNumber;
+ p.buffer = (void *) &val;
+ ulen = sizeof(int);
+ p.len = &ulen;
+ if ((ret = get_mib_info(fd, &p)) == 0)
+ Interface_Count = val;
+ close_mib(fd);
+ }
+ }
+ return (Interface_Count);
+}
+
+#else /* hpux11 */
+
+static time_t scan_time = 0;
+
+int
+Interface_Scan_Get_Count(void)
+{
+ time_t time_now = time(NULL);
+
+ if (!Interface_Count || (time_now > scan_time + 60)) {
+ scan_time = time_now;
+ Interface_Scan_Init();
+ Interface_Count = 0;
+ while (Interface_Scan_Next(NULL, NULL, NULL, NULL) != 0) {
+ Interface_Count++;
+ }
+ }
+ return (Interface_Count);
+}
+
+
+static int
+Interface_Get_Ether_By_Index(int Index, u_char * EtherAddr)
+{
+ short i;
+#if !(defined(linux) || defined(netbsd1) || defined(bsdi2) || defined(openbsd2))
+ struct arpcom arpcom;
+#else /* is linux or netbsd1 */
+ struct arpcom {
+ char ac_enaddr[6];
+ } arpcom;
+#if defined(netbsd1) || defined(bsdi2) || defined(openbsd2)
+ struct sockaddr_dl sadl;
+ struct ifaddr ifaddr;
+ u_long ifaddraddr;
+#endif
+#endif
+
+#if defined(mips) || defined(hpux) || defined(osf4) || defined(osf3) || defined(osf5)
+ memset(arpcom.ac_enaddr, 0, sizeof(arpcom.ac_enaddr));
+#else
+ memset(&arpcom.ac_enaddr, 0, sizeof(arpcom.ac_enaddr));
+#endif
+ memset(EtherAddr, 0, sizeof(arpcom.ac_enaddr));
+
+ if (saveIndex != Index) { /* Optimization! */
+
+ Interface_Scan_Init();
+
+ while (Interface_Scan_Next((short *) &i, NULL, NULL, NULL) != 0) {
+ if (i == Index)
+ break;
+ }
+ if (i != Index)
+ return (-1); /* Error, doesn't exist */
+ }
+#ifdef freebsd2
+ if (saveifnet.if_type != IFT_ETHER) {
+ return (0); /* Not an ethernet if */
+ }
+#endif
+ /*
+ * the arpcom structure is an extended ifnet structure which
+ * contains the ethernet address.
+ */
+#ifndef linux
+#if !(defined(netbsd1) || defined(bsdi2) || defined(openbsd2))
+ if (!NETSNMP_KLOOKUP(saveifnetaddr, (char *) &arpcom, sizeof arpcom)) {
+ DEBUGMSGTL(("mibII/interfaces:Interface_Get_Ether_By_Index", "klookup failed\n"));
+ return 0;
+ }
+#else /* netbsd1 or bsdi2 or openbsd2 */
+
+#if defined(netbsd1) || defined(openbsd2)
+#define if_addrlist if_addrlist.tqh_first
+#define ifa_next ifa_list.tqe_next
+#endif
+
+ ifaddraddr = (unsigned long) saveifnet.if_addrlist;
+ while (ifaddraddr) {
+ if (!NETSNMP_KLOOKUP(ifaddraddr, (char *) &ifaddr, sizeof ifaddr)) {
+ DEBUGMSGTL(("mibII/interfaces:Interface_Get_Ether_By_Index", "klookup failed\n"));
+ break;
+ }
+ if (!NETSNMP_KLOOKUP(ifaddr.ifa_addr, (char *) &sadl, sizeof sadl)) {
+ DEBUGMSGTL(("mibII/interfaces:Interface_Get_Ether_By_Index", "klookup failed\n"));
+ break;
+ }
+ if (sadl.sdl_family == AF_LINK
+ && (saveifnet.if_type == IFT_ETHER
+ || saveifnet.if_type == IFT_ISO88025
+ || saveifnet.if_type == IFT_FDDI)) {
+ memcpy(arpcom.ac_enaddr, sadl.sdl_data + sadl.sdl_nlen,
+ sizeof(arpcom.ac_enaddr));
+ break;
+ }
+ ifaddraddr = (unsigned long) ifaddr.ifa_next;
+ }
+#endif /* netbsd1 or bsdi2 or openbsd2 */
+
+#else /* linux */
+ memcpy(arpcom.ac_enaddr, saveifnetaddr->if_hwaddr, 6);
+#endif
+ if (strncmp("lo", saveName, 2) == 0) {
+ /*
+ * Loopback doesn't have a HW addr, so return 00:00:00:00:00:00
+ */
+ memset(EtherAddr, 0, sizeof(arpcom.ac_enaddr));
+
+ } else {
+
+#if defined(mips) || defined(hpux) || defined(osf4) || defined(osf3)
+ memcpy(EtherAddr, (char *) arpcom.ac_enaddr,
+ sizeof(arpcom.ac_enaddr));
+#else
+ memcpy(EtherAddr, (char *) &arpcom.ac_enaddr,
+ sizeof(arpcom.ac_enaddr));
+#endif
+
+
+ }
+ return (0); /* DONE */
+}
+
+#endif /* hpux11 */
+
+#else /* solaris2 */
+
+int
+Interface_Scan_Get_Count(void)
+{
+ int i, sd;
+
+ if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
+ return (0);
+ if (ioctl(sd, SIOCGIFNUM, &i) == -1) {
+ close(sd);
+ return (0);
+ } else {
+ close(sd);
+ return (i);
+ }
+}
+
+int
+Interface_Index_By_Name(char *Name, int Len)
+{
+ return (solaris2_if_nametoindex(Name, Len));
+}
+
+#endif /* solaris2 */
+
+#else /* HAVE_NET_IF_MIB_H */
+
+/*
+ * This code attempts to do the right thing for FreeBSD. Note that
+ * the statistics could be gathered through use of of the
+ * net.route.0.link.iflist.0 sysctl (which we already use to get the
+ * hardware address of the interfaces), rather than using the ifmib
+ * code, but eventually I will implement dot3Stats and we will have to
+ * use the ifmib interface. ifmib is also a much more natural way of
+ * mapping the SNMP MIB onto sysctl(3).
+ */
+
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_mib.h>
+#include <net/route.h>
+
+static int header_interfaces(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod ** write);
+static int header_ifEntry(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod ** write);
+u_char *var_ifEntry(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod ** write);
+
+static char *physaddrbuf;
+static int nphysaddrs;
+struct sockaddr_dl **physaddrs;
+
+void
+init_interfaces_setup(void)
+{
+ int naddrs, ilen, bit;
+ static int mib[6]
+ = { CTL_NET, PF_ROUTE, 0, AF_LINK, NET_RT_IFLIST, 0 };
+ char *cp;
+ size_t len;
+ struct rt_msghdr *rtm;
+ struct if_msghdr *ifm;
+ struct ifa_msghdr *ifam;
+ struct sockaddr *sa;
+
+ DEBUGMSGTL(("mibII:freebsd", "init_interfaces_setup\n"));
+
+ naddrs = 0;
+ if (physaddrs)
+ free(physaddrs);
+ if (physaddrbuf)
+ free(physaddrbuf);
+ physaddrbuf = 0;
+ physaddrs = 0;
+ nphysaddrs = 0;
+ len = 0;
+ if (sysctl(mib, 6, 0, &len, 0, 0) < 0) {
+ DEBUGMSGTL(("mibII:freebsd", "sysctl 1 < 0\n"));
+ return;
+ }
+
+ cp = physaddrbuf = malloc(len);
+ if (physaddrbuf == 0)
+ return;
+ if (sysctl(mib, 6, physaddrbuf, &len, 0, 0) < 0) {
+ free(physaddrbuf);
+ physaddrbuf = 0;
+ DEBUGMSGTL(("mibII:freebsd", "sysctl 2 < 0\n"));
+ return;
+ }
+
+ loop:
+ ilen = len;
+ cp = physaddrbuf;
+ while (ilen > 0) {
+ rtm = (struct rt_msghdr *) cp;
+ if (rtm->rtm_version != RTM_VERSION || rtm->rtm_type != RTM_IFINFO) {
+ DEBUGMSGTL(("mibII:freebsd", "version:%d/%d type:%d/%d\n",
+ rtm->rtm_version, RTM_VERSION, rtm->rtm_type, RTM_IFINFO));
+ free(physaddrs);
+ physaddrs = 0;
+ free(physaddrbuf);
+ physaddrbuf = 0;
+ }
+ ifm = (struct if_msghdr *) rtm;
+#if defined(freebsd3) || defined(freebsd4) || defined(freebsd5)
+ if (physaddrs != 0)
+ physaddrs[naddrs] = (void *) (ifm + 1);
+ naddrs++;
+#endif
+ ilen -= ifm->ifm_msglen;
+ cp += ifm->ifm_msglen;
+ rtm = (struct rt_msghdr *) cp;
+ while (ilen > 0 && rtm->rtm_type == RTM_NEWADDR) {
+#if defined(freebsd3) || defined(freebsd4) || defined(freebsd5)
+ ilen -= rtm->rtm_msglen;
+ cp += rtm->rtm_msglen;
+#else
+ int is_alias = 0;
+ ifam = (struct ifa_msghdr *) rtm;
+ ilen -= sizeof(*ifam);
+ cp += sizeof(*ifam);
+ sa = (struct sockaddr *) cp;
+#define ROUND(x) (((x) + sizeof(long) - 1) & ~sizeof(long))
+ for (bit = 1; bit && ilen > 0; bit <<= 1) {
+ if (!(ifam->ifam_addrs & bit))
+ continue;
+ ilen -= ROUND(sa->sa_len);
+ cp += ROUND(sa->sa_len);
+
+ if (bit == RTA_IFA) {
+ if (physaddrs)
+#define satosdl(sa) ((struct sockaddr_dl *)(sa))
+ physaddrs[naddrs++]
+ = satosdl(sa);
+ else
+ naddrs++;
+ }
+ sa = (struct sockaddr *) cp;
+ }
+#endif
+ rtm = (struct rt_msghdr *) cp;
+ }
+ }
+ DEBUGMSGTL(("mibII:freebsd", "found %d addrs\n", naddrs));
+ if (physaddrs) {
+ nphysaddrs = naddrs;
+ return;
+ }
+ physaddrs = malloc(naddrs * sizeof(*physaddrs));
+ if (physaddrs == 0)
+ return;
+ naddrs = 0;
+ goto loop;
+
+}
+
+static int
+get_phys_address(int iindex, char **ap, int *len)
+{
+ int i;
+ int once = 1;
+
+ do {
+ for (i = 0; i < nphysaddrs; i++) {
+ if (physaddrs[i]->sdl_index == iindex)
+ break;
+ }
+ if (i < nphysaddrs)
+ break;
+ init_interfaces_setup();
+ } while (once--);
+
+ DEBUGMSGTL(("mibII:freebsd", "get_phys_address %d/%d\n", i, nphysaddrs));
+ if (i < nphysaddrs) {
+ *ap = LLADDR(physaddrs[i]);
+ *len = physaddrs[i]->sdl_alen;
+ return 0;
+ }
+ return -1;
+}
+
+int
+Interface_Scan_Get_Count(void)
+{
+ static int count_oid[5] = { CTL_NET, PF_LINK, NETLINK_GENERIC,
+ IFMIB_SYSTEM, IFMIB_IFCOUNT
+ };
+ size_t len;
+ int count;
+
+ len = sizeof count;
+ if (sysctl(count_oid, 5, &count, &len, (void *) 0, (size_t) 0) < 0) {
+ DEBUGMSGTL(("mibII:freebsd", "Interface_Scan_Get_Count err\n"));
+ return -1;
+ }
+ DEBUGMSGTL(("mibII:freebsd", "Interface_Scan_Get_Count %d\n", count));
+ return count;
+}
+
+
+u_char *
+var_ifEntry(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int interface;
+ static int sname[6] = { CTL_NET, PF_LINK, NETLINK_GENERIC,
+ IFMIB_IFDATA, 0, IFDATA_GENERAL
+ };
+ static struct ifmibdata ifmd;
+ size_t len;
+ char *cp;
+ conf_if_list *if_ptr = NULL;
+
+ interface = header_ifEntry(vp, name, length, exact, var_len,
+ write_method);
+ if (interface == MATCH_FAILED)
+ return NULL;
+
+ sname[4] = interface;
+ len = sizeof ifmd;
+ if (sysctl(sname, 6, &ifmd, &len, 0, 0) < 0) {
+ DEBUGMSGTL(("mibII:freebsd", "var_ifEntry sysctl err\n"));
+ return NULL;
+ }
+ /*
+ * hmmm.. where to get the interface name to check overrides?
+ *
+ * if_ptr = netsnmp_access_interface_entry_overrides_get(Name);
+ */
+
+ switch (vp->magic) {
+ case IFINDEX:
+ long_return = interface;
+ return (u_char *) & long_return;
+ case IFDESCR:
+ cp = ifmd.ifmd_name;
+ *var_len = strlen(cp);
+ return (u_char *) cp;
+ case IFTYPE:
+ if (if_ptr)
+ long_return = if_ptr->type;
+ else
+ long_return = ifmd.ifmd_data.ifi_type;
+ return (u_char *) & long_return;
+ case IFMTU:
+ long_return = (long) ifmd.ifmd_data.ifi_mtu;
+ return (u_char *) & long_return;
+ case IFSPEED:
+ if (if_ptr)
+ long_return = if_ptr->speed;
+ else
+ long_return = ifmd.ifmd_data.ifi_baudrate;
+ return (u_char *) & long_return;
+ case IFPHYSADDRESS:
+ {
+ char *cp;
+ if (get_phys_address(interface, &cp, var_len))
+ return NULL;
+ else
+ return cp;
+ }
+ case IFADMINSTATUS:
+ long_return = ifmd.ifmd_flags & IFF_UP ? 1 : 2;
+ return (u_char *) & long_return;
+ case IFOPERSTATUS:
+ long_return = ifmd.ifmd_flags & IFF_RUNNING ? 1 : 2;
+ return (u_char *) & long_return;
+ case IFLASTCHANGE:
+ if (ifmd.ifmd_data.ifi_lastchange.tv_sec == 0 &&
+ ifmd.ifmd_data.ifi_lastchange.tv_usec == 0) {
+ long_return = 0;
+ } else if (ifmd.ifmd_data.ifi_lastchange.tv_sec < starttime.tv_sec) {
+ long_return = 0;
+ } else {
+ long_return = (u_long)
+ ((ifmd.ifmd_data.ifi_lastchange.tv_sec -
+ starttime.tv_sec) * 100 +
+ ((ifmd.ifmd_data.ifi_lastchange.tv_usec -
+ starttime.tv_usec) / 10000));
+ }
+ return (u_char *) & long_return;
+ case IFINOCTETS:
+ long_return = (u_long) ifmd.ifmd_data.ifi_ibytes;
+ return (u_char *) & long_return;
+ case IFINUCASTPKTS:
+ long_return = (u_long) ifmd.ifmd_data.ifi_ipackets;
+ long_return -= (u_long) ifmd.ifmd_data.ifi_imcasts;
+ return (u_char *) & long_return;
+ case IFINNUCASTPKTS:
+ long_return = (u_long) ifmd.ifmd_data.ifi_imcasts;
+ return (u_char *) & long_return;
+ case IFINDISCARDS:
+ long_return = (u_long) ifmd.ifmd_data.ifi_iqdrops;
+ return (u_char *) & long_return;
+ case IFINERRORS:
+ long_return = ifmd.ifmd_data.ifi_ierrors;
+ return (u_char *) & long_return;
+ case IFINUNKNOWNPROTOS:
+ long_return = (u_long) ifmd.ifmd_data.ifi_noproto;
+ return (u_char *) & long_return;
+ case IFOUTOCTETS:
+ long_return = (u_long) ifmd.ifmd_data.ifi_obytes;
+ return (u_char *) & long_return;
+ case IFOUTUCASTPKTS:
+ long_return = (u_long) ifmd.ifmd_data.ifi_opackets;
+ long_return -= (u_long) ifmd.ifmd_data.ifi_omcasts;
+ return (u_char *) & long_return;
+ case IFOUTNUCASTPKTS:
+ long_return = (u_long) ifmd.ifmd_data.ifi_omcasts;
+ return (u_char *) & long_return;
+ case IFOUTDISCARDS:
+ long_return = ifmd.ifmd_snd_drops;
+ return (u_char *) & long_return;
+ case IFOUTERRORS:
+ long_return = ifmd.ifmd_data.ifi_oerrors;
+ return (u_char *) & long_return;
+ case IFOUTQLEN:
+ long_return = ifmd.ifmd_snd_len;
+ return (u_char *) & long_return;
+ case IFSPECIFIC:
+ *var_len = nullOidLen;
+ return (u_char *) nullOid;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ifEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+#endif /* HAVE_NET_IF_MIB_H */
+#endif /* !USE_SYSCTL_IFLIST */
+
+#else /* WIN32 cygwin */
+#include <iphlpapi.h>
+
+WriteMethod writeIfEntry;
+long admin_status = 0;
+long oldadmin_status = 0;
+
+static int
+header_ifEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#define IFENTRY_NAME_LENGTH 10
+ oid newname[MAX_OID_LEN];
+ register int ifIndex;
+ int result, count;
+ DWORD status = NO_ERROR;
+ DWORD statusRetry = NO_ERROR;
+ DWORD dwActualSize = 0;
+ PMIB_IFTABLE pIfTable = NULL;
+
+ DEBUGMSGTL(("mibII/interfaces", "var_ifEntry: "));
+ DEBUGMSGOID(("mibII/interfaces", name, *length));
+ DEBUGMSG(("mibII/interfaces", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+ /*
+ * find "next" ifIndex
+ */
+
+
+ /*
+ * query for buffer size needed
+ */
+ status = GetIfTable(pIfTable, &dwActualSize, TRUE);
+
+ if (status == ERROR_INSUFFICIENT_BUFFER) {
+ /*
+ * need more space
+ */
+ pIfTable = (PMIB_IFTABLE) malloc(dwActualSize);
+ if (pIfTable != NULL) {
+ /*
+ * Get the sorted IF table
+ */
+ GetIfTable(pIfTable, &dwActualSize, TRUE);
+ }
+ }
+ count = pIfTable->dwNumEntries;
+ for (ifIndex = 0; ifIndex < count; ifIndex++) {
+ newname[IFENTRY_NAME_LENGTH] =
+ (oid) pIfTable->table[ifIndex].dwIndex;
+ result =
+ snmp_oid_compare(name, *length, newname,
+ (int) vp->namelen + 1);
+ if ((exact && (result == 0)) || (!exact && (result < 0)))
+ break;
+ }
+ if (ifIndex > count) {
+ DEBUGMSGTL(("mibII/interfaces", "... index out of range\n"));
+ return MATCH_FAILED;
+ }
+
+
+ memcpy((char *) name, (char *) newname,
+ ((int) vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ DEBUGMSGTL(("mibII/interfaces", "... get I/F stats "));
+ DEBUGMSGOID(("mibII/interfaces", name, *length));
+ DEBUGMSG(("mibII/interfaces", "\n"));
+
+ count = pIfTable->table[ifIndex].dwIndex;
+ free(pIfTable);
+ return count;
+}
+
+
+
+u_char *
+var_interfaces(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ if (header_generic(vp, name, length, exact, var_len, write_method) ==
+ MATCH_FAILED)
+ return NULL;
+
+ switch (vp->magic) {
+ case IFNUMBER:
+ GetNumberOfInterfaces(&long_return);
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_interfaces\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+u_char *
+var_ifEntry(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int ifIndex;
+ static MIB_IFROW ifRow;
+ conf_if_list *if_ptr = NULL;
+
+ ifIndex =
+ header_ifEntry(vp, name, length, exact, var_len, write_method);
+ if (ifIndex == MATCH_FAILED)
+ return NULL;
+ /*
+ * hmmm.. where to get the interface name to check overrides?
+ *
+ * if_ptr = netsnmp_access_interface_entry_overrides_get(Name);
+ */
+
+ /*
+ * Get the If Table Row by passing index as argument
+ */
+ ifRow.dwIndex = ifIndex;
+ if (GetIfEntry(&ifRow) != NO_ERROR)
+ return NULL;
+ switch (vp->magic) {
+ case IFINDEX:
+ long_return = ifIndex;
+ return (u_char *) & long_return;
+ case IFDESCR:
+ *var_len = ifRow.dwDescrLen;
+ return (u_char *) ifRow.bDescr;
+ case IFTYPE:
+ if (if_ptr)
+ long_return = if_ptr->type;
+ else
+ long_return = ifRow.dwType;
+ return (u_char *) & long_return;
+ case IFMTU:
+ long_return = (long) ifRow.dwMtu;
+ return (u_char *) & long_return;
+ case IFSPEED:
+ if (if_ptr)
+ long_return = if_ptr->speed;
+ else
+ long_return = (long) ifRow.dwSpeed;
+ return (u_char *) & long_return;
+ case IFPHYSADDRESS:
+ *var_len = ifRow.dwPhysAddrLen;
+ memcpy(return_buf, ifRow.bPhysAddr, *var_len);
+ return (u_char *) return_buf;
+ case IFADMINSTATUS:
+ long_return = ifRow.dwAdminStatus;
+ admin_status = long_return;
+ *write_method = writeIfEntry;
+ return (u_char *) & long_return;
+ case IFOPERSTATUS:
+ long_return =
+ (MIB_IF_OPER_STATUS_OPERATIONAL == ifRow.dwOperStatus) ? 1 : 2;
+ return (u_char *) & long_return;
+ case IFLASTCHANGE:
+ long_return = 0 /* XXX not a UNIX epochal time ifRow.dwLastChange */ ;
+ return (u_char *) & long_return;
+ case IFINOCTETS:
+ long_return = ifRow.dwInOctets;
+ return (u_char *) & long_return;
+ case IFINUCASTPKTS:
+ long_return = ifRow.dwInUcastPkts;
+ return (u_char *) & long_return;
+ case IFINNUCASTPKTS:
+ long_return = ifRow.dwInNUcastPkts;
+ return (u_char *) & long_return;
+ case IFINDISCARDS:
+ long_return = ifRow.dwInDiscards;
+ return (u_char *) & long_return;
+ case IFINERRORS:
+ long_return = ifRow.dwInErrors;
+ return (u_char *) & long_return;
+ case IFINUNKNOWNPROTOS:
+ long_return = ifRow.dwInUnknownProtos;
+ return (u_char *) & long_return;
+ case IFOUTOCTETS:
+ long_return = ifRow.dwOutOctets;
+ return (u_char *) & long_return;
+ case IFOUTUCASTPKTS:
+ long_return = ifRow.dwOutUcastPkts;
+ return (u_char *) & long_return;
+ case IFOUTNUCASTPKTS:
+ long_return = ifRow.dwOutNUcastPkts;
+ return (u_char *) & long_return;
+ case IFOUTDISCARDS:
+ long_return = ifRow.dwOutDiscards;
+ return (u_char *) & long_return;
+ case IFOUTERRORS:
+ long_return = ifRow.dwOutErrors;
+ return (u_char *) & long_return;
+ case IFOUTQLEN:
+ long_return = ifRow.dwOutQLen;
+ return (u_char *) & long_return;
+ case IFSPECIFIC:
+ *var_len = nullOidLen;
+ return (u_char *) nullOid;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ifEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+
+int
+writeIfEntry(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ MIB_IFROW ifEntryRow;
+ if ((char) name[9] != IFADMINSTATUS) {
+ return SNMP_ERR_NOTWRITABLE;
+ }
+
+ switch (action) {
+ case RESERVE1: /* Check values for acceptability */
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR, "not integer\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > sizeof(int)) {
+ snmp_log(LOG_ERR, "bad length\n");
+ return SNMP_ERR_WRONGLENGTH;
+ }
+
+ /*
+ * The dwAdminStatus member can be MIB_IF_ADMIN_STATUS_UP or MIB_IF_ADMIN_STATUS_DOWN
+ */
+ if (!(((int) (*var_val) == MIB_IF_ADMIN_STATUS_UP) ||
+ ((int) (*var_val) == MIB_IF_ADMIN_STATUS_DOWN))) {
+ snmp_log(LOG_ERR, "not supported admin state\n");
+ return SNMP_ERR_WRONGVALUE;
+ }
+ break;
+
+ case RESERVE2: /* Allocate memory and similar resources */
+ break;
+
+ case ACTION:
+ /*
+ * Save the old value, in case of UNDO
+ */
+
+ oldadmin_status = admin_status;
+ admin_status = (int) *var_val;
+ break;
+
+ case UNDO: /* Reverse the SET action and free resources */
+ admin_status = oldadmin_status;
+ break;
+
+ case COMMIT: /* Confirm the SET, performing any irreversible actions,
+ * and free resources */
+ ifEntryRow.dwIndex = (int) name[10];
+ ifEntryRow.dwAdminStatus = admin_status;
+ /*
+ * Only UP and DOWN status are supported. Thats why done in COMMIT
+ */
+ if (SetIfEntry(&ifEntryRow) != NO_ERROR) {
+ snmp_log(LOG_ERR,
+ "Error in writeIfEntry case COMMIT with index: %d & adminStatus %d\n",
+ ifEntryRow.dwIndex, ifEntryRow.dwAdminStatus);
+ return SNMP_ERR_COMMITFAILED;
+ }
+
+ case FREE: /* Free any resources allocated */
+ /*
+ * No resources have been allocated
+ */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+} /* end of writeIfEntry */
+#endif /* WIN32 cygwin */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/interfaces.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/interfaces.h
new file mode 100644
index 0000000000..d3cbb6ed79
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/interfaces.h
@@ -0,0 +1,124 @@
+/*
+ * Interfaces MIB group interface - interfaces.h
+ *
+ */
+#ifndef _MIBGROUP_INTERFACES_H
+#define _MIBGROUP_INTERFACES_H
+
+/***********************************************************************
+ * configure macros
+ */
+config_require(util_funcs)
+
+/*
+ * conflicts with the new MFD rewrite
+ */
+config_exclude(if-mib/ifTable/ifTable)
+
+#if !defined(WIN32) && !defined(cygwin)
+config_require(if-mib/data_access/interface)
+#endif
+
+config_arch_require(solaris2, kernel_sunos5)
+/*
+ * need get_address in var_route for some platforms (USE_SYSCTL_IFLIST).
+ * Not sure if that can be translated into a config_arch_require, so be
+ * indiscriminate for now.
+ */
+config_require(mibII/var_route)
+
+/***********************************************************************
+ */
+#ifndef USING_IF_MIB_IFTABLE_MODULE
+#ifdef hpux11
+#include <sys/mib.h>
+#else
+ struct in_ifaddr;
+ struct ifnet;
+#endif
+
+ int Interface_Scan_Get_Count(void);
+ int Interface_Index_By_Name(char *, int);
+ void Interface_Scan_Init(void);
+#if defined(linux) || defined(sunV3)
+ struct in_ifaddr {
+ int dummy;
+ };
+#endif
+#if defined(hpux11)
+ int Interface_Scan_Next(short *, char *, nmapi_phystat *);
+#else
+ int Interface_Scan_Next(short *, char *, struct ifnet *,
+ struct in_ifaddr *);
+#endif
+
+ void init_interfaces(void);
+ extern FindVarMethod var_interfaces;
+ extern FindVarMethod var_ifEntry;
+
+#endif /* USING_IF_MIB_IFTABLE_MODULE */
+
+#define IFNUMBER 0
+#define IFINDEX 1
+#define IFDESCR 2
+#define IFTYPE 3
+#define IFMTU 4
+#define IFSPEED 5
+#define IFPHYSADDRESS 6
+#define IFADMINSTATUS 7
+#define IFOPERSTATUS 8
+#define IFLASTCHANGE 9
+#define IFINOCTETS 10
+#define IFINUCASTPKTS 11
+#define IFINNUCASTPKTS 12
+#define IFINDISCARDS 13
+#define IFINERRORS 14
+#define IFINUNKNOWNPROTOS 15
+#define IFOUTOCTETS 16
+#define IFOUTUCASTPKTS 17
+#define IFOUTNUCASTPKTS 18
+#define IFOUTDISCARDS 19
+#define IFOUTERRORS 20
+#define IFOUTQLEN 21
+#define IFSPECIFIC 22
+
+#ifdef linux
+/*
+ * this struct ifnet is cloned from the generic type and somewhat modified.
+ * it will not work for other un*x'es...
+ */
+
+ struct ifnet {
+ char *if_name; /* name, e.g. ``en'' or ``lo'' */
+ char *if_unit; /* sub-unit for lower level driver */
+ short if_mtu; /* maximum transmission unit */
+ short if_flags; /* up/down, broadcast, etc. */
+ int if_metric; /* routing metric (external only) */
+ char if_hwaddr[6]; /* ethernet address */
+ int if_type; /* interface type: 1=generic,
+ * 28=slip, ether=6, loopback=24 */
+ u_long if_speed; /* interface speed: in bits/sec */
+
+ struct sockaddr if_addr; /* interface's address */
+ struct sockaddr ifu_broadaddr; /* broadcast address */
+ struct sockaddr ia_subnetmask; /* interface's mask */
+
+ struct ifqueue {
+ int ifq_len;
+ int ifq_drops;
+ } if_snd; /* output queue */
+ u_long if_ibytes; /* octets received on interface */
+ u_long if_ipackets; /* packets received on interface */
+ u_long if_ierrors; /* input errors on interface */
+ u_long if_iqdrops; /* input queue overruns */
+ u_long if_obytes; /* octets sent on interface */
+ u_long if_opackets; /* packets sent on interface */
+ u_long if_oerrors; /* output errors on interface */
+ u_long if_collisions; /* collisions on csma interfaces */
+ /*
+ * end statistics
+ */
+ struct ifnet *if_next;
+ };
+#endif /* linux */
+#endif /* _MIBGROUP_INTERFACES_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ip.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ip.c
new file mode 100644
index 0000000000..b9237b1cc2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ip.c
@@ -0,0 +1,957 @@
+/*
+ * IP MIB group implementation - ip.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include "mibII_common.h"
+
+#if HAVE_SYS_HASHING_H
+#include <sys/hashing.h>
+#endif
+#if HAVE_NETINET_IN_VAR_H
+#include <netinet/in_var.h>
+#endif
+#if HAVE_SYSLOG_H
+#include <syslog.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/auto_nlist.h>
+
+#include "util_funcs.h"
+#include "ip.h"
+#include "ipAddr.h"
+#include "interfaces.h"
+#include "sysORTable.h"
+
+#ifndef MIB_STATS_CACHE_TIMEOUT
+#define MIB_STATS_CACHE_TIMEOUT 5
+#endif
+#ifndef IP_STATS_CACHE_TIMEOUT
+#define IP_STATS_CACHE_TIMEOUT MIB_STATS_CACHE_TIMEOUT
+#endif
+
+#if defined(HAVE_LIBPERFSTAT_H) && (defined(aix4) || defined(aix5) || defined(aix6)) && !defined(FIRST_PROTOCOL)
+#include <libperfstat.h>
+#ifdef FIRST_PROTOCOL
+perfstat_protocol_t ps_proto;
+perfstat_id_t ps_name;
+#define _USE_PERFSTAT_PROTOCOL 1
+#endif
+#endif
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+extern void init_routes(void);
+
+
+/*
+ * define the structure we're going to ask the agent to register our
+ * information at
+ */
+struct variable1 ipaddr_variables[] = {
+ {IPADADDR, ASN_IPADDRESS, RONLY, var_ipAddrEntry, 1, {1}},
+ {IPADIFINDEX, ASN_INTEGER, RONLY, var_ipAddrEntry, 1, {2}},
+#ifndef sunV3
+ {IPADNETMASK, ASN_IPADDRESS, RONLY, var_ipAddrEntry, 1, {3}},
+#endif
+ {IPADBCASTADDR, ASN_INTEGER, RONLY, var_ipAddrEntry, 1, {4}},
+ {IPADREASMMAX, ASN_INTEGER, RONLY, var_ipAddrEntry, 1, {5}}
+};
+
+struct variable1 iproute_variables[] = {
+ {IPROUTEDEST, ASN_IPADDRESS, RWRITE, var_ipRouteEntry, 1, {1}},
+ {IPROUTEIFINDEX, ASN_INTEGER, RWRITE, var_ipRouteEntry, 1, {2}},
+ {IPROUTEMETRIC1, ASN_INTEGER, RWRITE, var_ipRouteEntry, 1, {3}},
+ {IPROUTEMETRIC2, ASN_INTEGER, RWRITE, var_ipRouteEntry, 1, {4}},
+ {IPROUTEMETRIC3, ASN_INTEGER, RWRITE, var_ipRouteEntry, 1, {5}},
+ {IPROUTEMETRIC4, ASN_INTEGER, RWRITE, var_ipRouteEntry, 1, {6}},
+ {IPROUTENEXTHOP, ASN_IPADDRESS, RWRITE, var_ipRouteEntry, 1, {7}},
+ {IPROUTETYPE, ASN_INTEGER, RWRITE, var_ipRouteEntry, 1, {8}},
+ {IPROUTEPROTO, ASN_INTEGER, RONLY, var_ipRouteEntry, 1, {9}},
+ {IPROUTEAGE, ASN_INTEGER, RWRITE, var_ipRouteEntry, 1, {10}},
+ {IPROUTEMASK, ASN_IPADDRESS, RWRITE, var_ipRouteEntry, 1, {11}},
+ {IPROUTEMETRIC5, ASN_INTEGER, RWRITE, var_ipRouteEntry, 1, {12}},
+ {IPROUTEINFO, ASN_OBJECT_ID, RONLY, var_ipRouteEntry, 1, {13}}
+};
+
+struct variable1 ipmedia_variables[] = {
+#ifdef USING_MIBII_AT_MODULE
+#if defined (WIN32) || defined (cygwin)
+ {IPMEDIAIFINDEX, ASN_INTEGER, RWRITE, var_atEntry, 1, {1}},
+ {IPMEDIAPHYSADDRESS, ASN_OCTET_STR, RWRITE, var_atEntry, 1, {2}},
+ {IPMEDIANETADDRESS, ASN_IPADDRESS, RWRITE, var_atEntry, 1, {3}},
+ {IPMEDIATYPE, ASN_INTEGER, RWRITE, var_atEntry, 1, {4}}
+#else
+ {IPMEDIAIFINDEX, ASN_INTEGER, RONLY, var_atEntry, 1, {1}},
+ {IPMEDIAPHYSADDRESS, ASN_OCTET_STR, RONLY, var_atEntry, 1, {2}},
+ {IPMEDIANETADDRESS, ASN_IPADDRESS, RONLY, var_atEntry, 1, {3}},
+ {IPMEDIATYPE, ASN_INTEGER, RONLY, var_atEntry, 1, {4}}
+#endif
+#endif
+};
+
+/*
+ * Define the OID pointer to the top of the mib tree that we're
+ * registering underneath, and the OID of the MIB module
+ */
+oid ip_oid[] = { SNMP_OID_MIB2, 4 };
+
+oid ipaddr_variables_oid[] = { SNMP_OID_MIB2, 4, 20, 1 };
+oid iproute_variables_oid[] = { SNMP_OID_MIB2, 4, 21, 1 };
+oid ipmedia_variables_oid[] = { SNMP_OID_MIB2, 4, 22, 1 };
+oid ip_module_oid[] = { SNMP_OID_MIB2, 4 };
+oid ip_module_oid_len = sizeof(ip_module_oid) / sizeof(oid);
+int ip_module_count = 0; /* Need to liaise with icmp.c */
+
+void
+init_ip(void)
+{
+ netsnmp_handler_registration *reginfo;
+
+ /*
+ * register ourselves with the agent as a group of scalars...
+ */
+ DEBUGMSGTL(("mibII/ip", "Initialising IP group\n"));
+ reginfo = netsnmp_create_handler_registration("ip", ip_handler,
+ ip_oid, OID_LENGTH(ip_oid), HANDLER_CAN_RONLY);
+ netsnmp_register_scalar_group(reginfo, IPFORWARDING, IPROUTEDISCARDS);
+
+ /*
+ * .... with a local cache
+ * (except for HP-UX 11, which extracts objects individually)
+ */
+#ifndef hpux11
+ netsnmp_inject_handler( reginfo,
+ netsnmp_get_cache_handler(IP_STATS_CACHE_TIMEOUT,
+ ip_load, ip_free,
+ ip_oid, OID_LENGTH(ip_oid)));
+#endif
+
+ /*
+ * register (using the old-style API) to handle the IP tables
+ */
+ REGISTER_MIB("mibII/ipaddr", ipaddr_variables,
+ variable1, ipaddr_variables_oid);
+ REGISTER_MIB("mibII/iproute", iproute_variables,
+ variable1, iproute_variables_oid);
+ REGISTER_MIB("mibII/ipmedia", ipmedia_variables,
+ variable1, ipmedia_variables_oid);
+ if (++ip_module_count == 2)
+ REGISTER_SYSOR_ENTRY(ip_module_oid,
+ "The MIB module for managing IP and ICMP implementations");
+
+
+ /*
+ * for speed optimization, we call this now to do the lookup
+ */
+#ifndef _USE_PERFSTAT_PROTOCOL
+#ifdef IPSTAT_SYMBOL
+ auto_nlist(IPSTAT_SYMBOL, 0, 0);
+#endif
+#ifdef IP_FORWARDING_SYMBOL
+ auto_nlist(IP_FORWARDING_SYMBOL, 0, 0);
+#endif
+#ifdef TCP_TTL_SYMBOL
+ auto_nlist(TCP_TTL_SYMBOL, 0, 0);
+#endif
+#ifdef MIB_IPCOUNTER_SYMBOL
+ auto_nlist(MIB_IPCOUNTER_SYMBOL, 0, 0);
+#endif
+#ifdef solaris2
+ init_kernel_sunos5();
+#endif
+#endif
+}
+
+
+ /*********************
+ *
+ * System specific data formats
+ *
+ *********************/
+
+#ifdef hpux11
+#define IP_STAT_STRUCTURE int
+#endif
+
+#ifdef linux
+#define IP_STAT_STRUCTURE struct ip_mib
+#define USES_SNMP_DESIGNED_IPSTAT
+#endif
+
+#ifdef solaris2
+#define IP_STAT_STRUCTURE mib2_ip_t
+#define USES_SNMP_DESIGNED_IPSTAT
+#endif
+
+#if defined (WIN32) || defined (cygwin)
+#include <iphlpapi.h>
+#define IP_STAT_STRUCTURE MIB_IPSTATS
+long ipForwarding;
+long oldipForwarding;
+long ipTTL, oldipTTL;
+#endif /* WIN32 cygwin */
+
+#ifdef HAVE_SYS_TCPIPSTATS_H
+#define IP_STAT_STRUCTURE struct kna
+#define USES_TRADITIONAL_IPSTAT
+#endif
+
+#if !defined(IP_STAT_STRUCTURE)
+#define IP_STAT_STRUCTURE struct ipstat
+#define USES_TRADITIONAL_IPSTAT
+#endif
+
+IP_STAT_STRUCTURE ipstat;
+
+
+
+ /*********************
+ *
+ * System independent handler
+ * (mostly)
+ *
+ *********************/
+
+
+int
+ip_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_request_info *request;
+ netsnmp_variable_list *requestvb;
+ long ret_value;
+ oid subid;
+ int type = ASN_COUNTER;
+
+ /*
+ * The cached data should already have been loaded by the
+ * cache handler, higher up the handler chain.
+ * But just to be safe, check this and load it manually if necessary
+ */
+#ifdef _USE_PERFSTAT_PROTOCOL
+ ip_load(NULL, NULL);
+#elif !defined(hpux11)
+ if (!netsnmp_cache_is_valid(reqinfo, reginfo->handlerName)) {
+ netsnmp_assert(!"cache == valid"); /* always false */
+ ip_load( NULL, NULL ); /* XXX - check for failure */
+ }
+#endif
+
+
+ /*
+ *
+ *
+ */
+ DEBUGMSGTL(("mibII/ip", "Handler - mode %s\n",
+ se_find_label_in_slist("agent_mode", reqinfo->mode)));
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ for (request=requests; request; request=request->next) {
+ requestvb = request->requestvb;
+ subid = requestvb->name[OID_LENGTH(ip_oid)]; /* XXX */
+ DEBUGMSGTL(( "mibII/ip", "oid: "));
+ DEBUGMSGOID(("mibII/ip", requestvb->name,
+ requestvb->name_length));
+ DEBUGMSG(( "mibII/ip", "\n"));
+
+ switch (subid) {
+#ifdef USES_SNMP_DESIGNED_IPSTAT
+ case IPFORWARDING:
+ ret_value = ipstat.ipForwarding;
+ type = ASN_INTEGER;
+ break;
+ case IPDEFAULTTTL:
+ ret_value = ipstat.ipDefaultTTL;
+ type = ASN_INTEGER;
+ break;
+ case IPINRECEIVES:
+ ret_value = ipstat.ipInReceives;
+ break;
+ case IPINHDRERRORS:
+ ret_value = ipstat.ipInHdrErrors;
+ break;
+ case IPINADDRERRORS:
+ ret_value = ipstat.ipInAddrErrors;
+ break;
+ case IPFORWDATAGRAMS:
+ ret_value = ipstat.ipForwDatagrams;
+ break;
+ case IPINUNKNOWNPROTOS:
+ ret_value = ipstat.ipInUnknownProtos;
+ break;
+ case IPINDISCARDS:
+ ret_value = ipstat.ipInDiscards;
+ break;
+ case IPINDELIVERS:
+ ret_value = ipstat.ipInDelivers;
+ break;
+ case IPOUTREQUESTS:
+ ret_value = ipstat.ipOutRequests;
+ break;
+ case IPOUTDISCARDS:
+ ret_value = ipstat.ipOutDiscards;
+ break;
+ case IPOUTNOROUTES:
+ ret_value = ipstat.ipOutNoRoutes;
+ break;
+ case IPREASMTIMEOUT:
+ ret_value = ipstat.ipReasmTimeout;
+ type = ASN_INTEGER;
+ break;
+ case IPREASMREQDS:
+ ret_value = ipstat.ipReasmReqds;
+ break;
+ case IPREASMOKS:
+ ret_value = ipstat.ipReasmOKs;
+ break;
+ case IPREASMFAILS:
+ ret_value = ipstat.ipReasmFails;
+ break;
+ case IPFRAGOKS:
+ ret_value = ipstat.ipFragOKs;
+ break;
+ case IPFRAGFAILS:
+ ret_value = ipstat.ipFragFails;
+ break;
+ case IPFRAGCREATES:
+ ret_value = ipstat.ipFragCreates;
+ break;
+ case IPROUTEDISCARDS:
+ ret_value = ipstat.ipRoutingDiscards;
+ break;
+
+#elif defined(USES_TRADITIONAL_IPSTAT) && !defined(_USE_PERFSTAT_PROTOCOL)
+#ifdef HAVE_SYS_TCPIPSTATS_H
+ /*
+ * This actually reads statistics for *all* the groups together,
+ * so we need to isolate the IP-specific bits.
+ */
+#define ipstat ipstat.ipstat
+#endif
+ case IPFORWARDING:
+ case IPDEFAULTTTL:
+ /*
+ * Query these two individually
+ */
+ ret_value = ip_load(NULL, (void *)subid);
+ if (ret_value == -1 ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ }
+ type = ASN_INTEGER;
+ break;
+ case IPINRECEIVES:
+ ret_value = ipstat.ips_total;
+ break;
+ case IPINHDRERRORS:
+ ret_value = ipstat.ips_badsum
+ + ipstat.ips_tooshort
+ + ipstat.ips_toosmall + ipstat.ips_badhlen + ipstat.ips_badlen;
+ break;
+ case IPINADDRERRORS:
+ ret_value = ipstat.ips_cantforward;
+ break;
+ case IPFORWDATAGRAMS:
+ ret_value = ipstat.ips_forward;
+ break;
+ case IPINUNKNOWNPROTOS:
+#if STRUCT_IPSTAT_HAS_IPS_NOPROTO
+ ret_value = ipstat.ips_noproto;
+ break;
+#else
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#endif
+ case IPINDISCARDS:
+#if STRUCT_IPSTAT_HAS_IPS_FRAGDROPPED
+ ret_value = ipstat.ips_fragdropped; /* ?? */
+ break;
+#else
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#endif
+ case IPINDELIVERS:
+#if STRUCT_IPSTAT_HAS_IPS_DELIVERED
+ ret_value = ipstat.ips_delivered;
+ break;
+#else
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#endif
+ case IPOUTREQUESTS:
+#if STRUCT_IPSTAT_HAS_IPS_LOCALOUT
+ ret_value = ipstat.ips_localout;
+ break;
+#else
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#endif
+ case IPOUTDISCARDS:
+#if STRUCT_IPSTAT_HAS_IPS_ODROPPED
+ ret_value = ipstat.ips_odropped;
+ break;
+#else
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#endif
+ case IPOUTNOROUTES:
+ /*
+ * XXX: how to calculate this (counts dropped routes, not packets)?
+ * ipstat.ips_cantforward isn't right, as it counts packets.
+ * ipstat.ips_noroute is also incorrect.
+ */
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ case IPREASMTIMEOUT:
+ ret_value = IPFRAGTTL;
+ type = ASN_INTEGER;
+ break;
+ case IPREASMREQDS:
+ ret_value = ipstat.ips_fragments;
+ break;
+ case IPREASMOKS:
+#if STRUCT_IPSTAT_HAS_IPS_REASSEMBLED
+ ret_value = ipstat.ips_reassembled;
+ break;
+#else
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#endif
+ case IPREASMFAILS:
+ ret_value = ipstat.ips_fragdropped + ipstat.ips_fragtimeout;
+ break;
+ case IPFRAGOKS:
+#if STRUCT_IPSTAT_HAS_IPS_FRAGMENTED
+ ret_value = ipstat.ips_fragments;
+ break;
+#else /* XXX */
+ ret_value = ipstat.ips_fragments
+ - (ipstat.ips_fragdropped + ipstat.ips_fragtimeout);
+ break;
+#endif
+ case IPFRAGFAILS:
+#if STRUCT_IPSTAT_HAS_IPS_CANTFRAG
+ ret_value = ipstat.ips_cantfrag;
+ break;
+#else
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#endif
+ case IPFRAGCREATES:
+#if STRUCT_IPSTAT_HAS_IPS_OFRAGMENTS
+ ret_value = ipstat.ips_ofragments;
+ break;
+#else
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#endif
+ case IPROUTEDISCARDS:
+#if STRUCT_IPSTAT_HAS_IPS_NOROUTE
+ ret_value = ipstat.ips_noroute;
+ break;
+#else
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#endif
+#ifdef HAVE_SYS_TCPIPSTATS_H
+#undef ipstat
+#endif
+#elif defined(hpux11)
+ case IPFORWARDING:
+ case IPDEFAULTTTL:
+ case IPREASMTIMEOUT:
+ type = ASN_INTEGER;
+ case IPINRECEIVES:
+ case IPINHDRERRORS:
+ case IPINADDRERRORS:
+ case IPFORWDATAGRAMS:
+ case IPINUNKNOWNPROTOS:
+ case IPINDISCARDS:
+ case IPINDELIVERS:
+ case IPOUTREQUESTS:
+ case IPOUTDISCARDS:
+ case IPOUTNOROUTES:
+ case IPREASMREQDS:
+ case IPREASMOKS:
+ case IPREASMFAILS:
+ case IPFRAGOKS:
+ case IPFRAGFAILS:
+ case IPFRAGCREATES:
+ case IPROUTEDISCARDS:
+ /*
+ * This is a bit of a hack, to shoehorn the HP-UX 11
+ * single-object retrieval approach into the caching
+ * architecture.
+ */
+ if (ip_load(NULL, (void*)subid) == -1 ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ }
+ ret_value = ipstat;
+ break;
+#elif defined (WIN32) || defined (cygwin)
+ case IPFORWARDING:
+ ipForwarding = ipstat.dwForwarding;
+ ret_value = ipstat.dwForwarding;
+ type = ASN_INTEGER;
+ break;
+ case IPDEFAULTTTL:
+ ipTTL = ipstat.dwDefaultTTL;
+ ret_value = ipstat.dwDefaultTTL;
+ type = ASN_INTEGER;
+ break;
+ case IPINRECEIVES:
+ ret_value = ipstat.dwInReceives;
+ break;
+ case IPINHDRERRORS:
+ ret_value = ipstat.dwInHdrErrors;
+ break;
+ case IPINADDRERRORS:
+ ret_value = ipstat.dwInAddrErrors;
+ break;
+ case IPFORWDATAGRAMS:
+ ret_value = ipstat.dwForwDatagrams;
+ break;
+ case IPINUNKNOWNPROTOS:
+ ret_value = ipstat.dwInUnknownProtos;
+ break;
+ case IPINDISCARDS:
+ ret_value = ipstat.dwInDiscards;
+ break;
+ case IPINDELIVERS:
+ ret_value = ipstat.dwInDelivers;
+ break;
+ case IPOUTREQUESTS:
+ ret_value = ipstat.dwOutRequests;
+ break;
+ case IPOUTDISCARDS:
+ ret_value = ipstat.dwOutDiscards;
+ break;
+ case IPOUTNOROUTES:
+ ret_value = ipstat.dwOutNoRoutes;
+ break;
+ case IPREASMTIMEOUT:
+ ret_value = ipstat.dwReasmTimeout;
+ type = ASN_INTEGER;
+ break;
+ case IPREASMREQDS:
+ ret_value = ipstat.dwReasmReqds;
+ break;
+ case IPREASMOKS:
+ ret_value = ipstat.dwReasmOks;
+ break;
+ case IPREASMFAILS:
+ ret_value = ipstat.dwReasmFails;
+ break;
+ case IPFRAGOKS:
+ ret_value = ipstat.dwFragOks;
+ break;
+ case IPFRAGFAILS:
+ ret_value = ipstat.dwFragFails;
+ break;
+ case IPFRAGCREATES:
+ ret_value = ipstat.dwFragCreates;
+ break;
+ case IPROUTEDISCARDS:
+ ret_value = ipstat.dwRoutingDiscards;
+ break;
+#elif defined(_USE_PERFSTAT_PROTOCOL)
+ case IPFORWARDING:
+ ret_value = 0;
+ type = ASN_INTEGER;
+ break;
+ case IPDEFAULTTTL:
+ ret_value = 0;
+ type = ASN_INTEGER;
+ break;
+ case IPINRECEIVES:
+ ret_value = ps_proto.u.ip.ipackets;
+ break;
+ case IPINHDRERRORS:
+ case IPINADDRERRORS:
+ case IPFORWDATAGRAMS:
+ ret_value = 0;
+ break;
+ case IPINUNKNOWNPROTOS:
+ ret_value = ps_proto.u.ip.ierrors;
+ break;
+ case IPINDISCARDS:
+ ret_value = 0;
+ break;
+ case IPINDELIVERS:
+ case IPOUTREQUESTS:
+ ret_value = ps_proto.u.ip.opackets;
+ break;
+ case IPOUTDISCARDS:
+ case IPOUTNOROUTES:
+ ret_value = 0;
+ break;
+ case IPREASMTIMEOUT:
+ ret_value = 0;
+ type = ASN_INTEGER;
+ break;
+ case IPREASMREQDS:
+ case IPREASMOKS:
+ case IPREASMFAILS:
+ case IPFRAGOKS:
+ case IPFRAGFAILS:
+ case IPFRAGCREATES:
+ ret_value = 0;
+ break;
+ case IPROUTEDISCARDS:
+ ret_value = ps_proto.u.ip.oerrors;
+ break;
+#endif /* USES_SNMP_DESIGNED_IPSTAT */
+
+ case IPADDRTABLE:
+ case IPROUTETABLE:
+ case IPMEDIATABLE:
+ /*
+ * These are not actually valid scalar objects.
+ * The relevant table registrations should take precedence,
+ * so skip these three subtrees, regardless of architecture.
+ */
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+
+ }
+ snmp_set_var_typed_value(request->requestvb, (u_char)type,
+ (u_char *)&ret_value, sizeof(ret_value));
+ }
+ break;
+
+ case MODE_GETNEXT:
+ case MODE_GETBULK:
+ case MODE_SET_RESERVE1:
+ /* XXX - Windows currently supports setting this */
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ snmp_log(LOG_WARNING, "mibII/ip: Unsupported mode (%d)\n",
+ reqinfo->mode);
+ break;
+ default:
+ snmp_log(LOG_WARNING, "mibII/ip: Unrecognised mode (%d)\n",
+ reqinfo->mode);
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+
+#ifdef hpux11
+int
+ip_load(netsnmp_cache *cache, void *vmagic)
+{
+ int fd;
+ struct nmparms p;
+ unsigned int ulen;
+ int ret;
+ int magic = (int) vmagic;
+
+ if ((fd = open_mib("/dev/ip", O_RDONLY, 0, NM_ASYNC_OFF)) < 0) {
+ DEBUGMSGTL(("mibII/ip", "Failed to load IP object %d (hpux11)\n", magic));
+ return (-1); /* error */
+ }
+
+ switch (magic) {
+ case IPFORWARDING:
+ p.objid = ID_ipForwarding;
+ break;
+ case IPDEFAULTTTL:
+ p.objid = ID_ipDefaultTTL;
+ break;
+ case IPINRECEIVES:
+ p.objid = ID_ipInReceives;
+ break;
+ case IPINHDRERRORS:
+ p.objid = ID_ipInHdrErrors;
+ break;
+ case IPINADDRERRORS:
+ p.objid = ID_ipInAddrErrors;
+ break;
+ case IPFORWDATAGRAMS:
+ p.objid = ID_ipForwDatagrams;
+ break;
+ case IPINUNKNOWNPROTOS:
+ p.objid = ID_ipInUnknownProtos;
+ break;
+ case IPINDISCARDS:
+ p.objid = ID_ipInDiscards;
+ break;
+ case IPINDELIVERS:
+ p.objid = ID_ipInDelivers;
+ break;
+ case IPOUTREQUESTS:
+ p.objid = ID_ipOutRequests;
+ break;
+ case IPOUTDISCARDS:
+ p.objid = ID_ipOutDiscards;
+ break;
+ case IPOUTNOROUTES:
+ p.objid = ID_ipOutNoRoutes;
+ break;
+ case IPREASMTIMEOUT:
+ p.objid = ID_ipReasmTimeout;
+ break;
+ case IPREASMREQDS:
+ p.objid = ID_ipReasmReqds;
+ break;
+ case IPREASMOKS:
+ p.objid = ID_ipReasmOKs;
+ break;
+ case IPREASMFAILS:
+ p.objid = ID_ipReasmFails;
+ break;
+ case IPFRAGOKS:
+ p.objid = ID_ipFragOKs;
+ break;
+ case IPFRAGFAILS:
+ p.objid = ID_ipFragFails;
+ break;
+ case IPFRAGCREATES:
+ p.objid = ID_ipFragCreates;
+ break;
+ case IPROUTEDISCARDS:
+ p.objid = ID_ipRoutingDiscards;
+ break;
+ default:
+ ipstat = 0;
+ close_mib(fd);
+ return (0);
+ }
+
+ p.buffer = (void *)&ipstat;
+ ulen = sizeof(IP_STAT_STRUCTURE);
+ p.len = &ulen;
+ ret = get_mib_info(fd, &p);
+ close_mib(fd);
+
+ DEBUGMSGTL(("mibII/ip", "%s IP object %d (hpux11)\n",
+ (ret < 0 ? "Failed to load" : "Loaded"), magic));
+ return (ret); /* 0: ok, < 0: error */
+}
+#elif defined(linux)
+int
+ip_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ ret_value = linux_read_ip_stat(&ipstat);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (linux)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/ip", "Loaded IP Group (linux)\n"));
+ }
+ return ret_value;
+}
+#elif defined(solaris2)
+int
+ip_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ ret_value =
+ getMibstat(MIB_IP, &ipstat, sizeof(mib2_ip_t), GET_FIRST,
+ &Get_everything, NULL);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (solaris)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/ip", "Loaded IP Group (solaris)\n"));
+ }
+ return ret_value;
+}
+#elif defined (WIN32) || defined (cygwin)
+int
+ip_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ ret_value = GetIpStatistics(&ipstat);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (win32)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/ip", "Loaded IP Group (win32)\n"));
+ }
+ return ret_value;
+}
+#elif defined(_USE_PERFSTAT_PROTOCOL)
+int
+ip_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ strcpy(ps_name.name, "ip");
+ ret_value = perfstat_protocol(&ps_name, &ps_proto, sizeof(ps_proto), 1);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (AIX)\n"));
+ } else {
+ ret_value = 0;
+ DEBUGMSGTL(("mibII/ip", "Loaded IP Group (AIX)\n"));
+ }
+ return ret_value;
+}
+#elif defined(NETSNMP_CAN_USE_SYSCTL) && defined(IPCTL_STATS)
+int
+ip_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = 0;
+ int i;
+ static int sname[4] = { CTL_NET, PF_INET, IPPROTO_IP, 0 };
+ size_t len;
+ int magic = (int) vmagic;
+
+ switch (magic) {
+ case IPFORWARDING:
+ len = sizeof i;
+ sname[3] = IPCTL_FORWARDING;
+ if (sysctl(sname, 4, &i, &len, 0, 0) < 0)
+ return -1;
+ else
+ return (i ? 1 /* GATEWAY */
+ : 2 /* HOST */ );
+
+ case IPDEFAULTTTL:
+ len = sizeof i;
+ sname[3] = IPCTL_DEFTTL;
+ if (sysctl(sname, 4, &i, &len, 0, 0) < 0)
+ return -1;
+ else
+ return i;
+
+ default:
+ len = sizeof(ipstat);
+ sname[3] = IPCTL_STATS;
+ ret_value = sysctl(sname, 4, &ipstat, &len, 0, 0);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (sysctl)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/ip", "Loaded IP Group (sysctl)\n"));
+ }
+ return ret_value;
+ }
+}
+#elif defined(HAVE_SYS_TCPIPSTATS_H)
+int
+ip_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+ int magic = (int) vmagic;
+
+ switch (magic) {
+ case IPFORWARDING:
+ if (!auto_nlist
+ (IP_FORWARDING_SYMBOL, (char *) &ret_value, sizeof(ret_value)))
+ return -1;
+ else
+ return (ret_value ? 1 /* GATEWAY */
+ : 2 /* HOST */ );
+
+ case IPDEFAULTTTL:
+ if (!auto_nlist
+ (TCP_TTL_SYMBOL, (char *) &ret_value, sizeof(ret_value)))
+ return -1;
+ else
+ return ret_value;
+
+ default:
+ ret_value = sysmp(MP_SAGET, MPSA_TCPIPSTATS, &ipstat, sizeof ipstat);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (tcpipstats)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/ip", "Loaded IP Group (tcpipstats)\n"));
+ }
+ return ret_value;
+ }
+}
+#elif defined(IPSTAT_SYMBOL)
+int
+ip_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+ int magic = (int) vmagic;
+
+ switch (magic) {
+ case IPFORWARDING:
+ if (!auto_nlist
+ (IP_FORWARDING_SYMBOL, (char *) &ret_value, sizeof(ret_value)))
+ return -1;
+ else
+ return (ret_value ? 1 /* GATEWAY */
+ : 2 /* HOST */ );
+
+ case IPDEFAULTTTL:
+ if (!auto_nlist
+ (TCP_TTL_SYMBOL, (char *) &ret_value, sizeof(ret_value)))
+ return -1;
+ else
+ return ret_value;
+
+ default:
+ if (auto_nlist(IPSTAT_SYMBOL, (char *)&ipstat, sizeof(ipstat)))
+ ret_value = 0;
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (ipstat)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/ip", "Loaded IP Group (ipstat)\n"));
+ }
+ return ret_value;
+ }
+}
+#else /* IPSTAT_SYMBOL */
+int
+ip_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ DEBUGMSGTL(("mibII/ip", "Failed to load IP Group (null)\n"));
+ return ret_value;
+}
+#endif /* hpux11 */
+
+void
+ip_free(netsnmp_cache *cache, void *magic)
+{
+#if defined(_USE_PERFSTAT_PROTOCOL)
+ memset(&ps_proto, 0, sizeof(ps_proto));
+#else
+ memset(&ipstat, 0, sizeof(ipstat));
+#endif
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ip.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ip.h
new file mode 100644
index 0000000000..57967ab5aa
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ip.h
@@ -0,0 +1,80 @@
+/*
+ * Template MIB group interface - ip.h
+ *
+ */
+
+#ifndef _MIBGROUP_IP_H
+#define _MIBGROUP_IP_H
+
+
+config_require(mibII/ifTable)
+config_require(mibII/ipAddr)
+config_require(mibII/at)
+config_require(mibII/var_route mibII/route_write)
+
+config_arch_require(solaris2, kernel_sunos5)
+config_arch_require(linux, mibII/kernel_linux)
+
+#include "var_route.h"
+#include "route_write.h"
+
+extern void init_ip(void);
+extern Netsnmp_Node_Handler ip_handler;
+extern NetsnmpCacheLoad ip_load;
+extern NetsnmpCacheFree ip_free;
+
+#ifdef USING_MIBII_AT_MODULE
+#include "at.h" /* for var_atEntry() */
+#endif
+
+
+#define IPFORWARDING 1
+#define IPDEFAULTTTL 2
+#define IPINRECEIVES 3
+#define IPINHDRERRORS 4
+#define IPINADDRERRORS 5
+#define IPFORWDATAGRAMS 6
+#define IPINUNKNOWNPROTOS 7
+#define IPINDISCARDS 8
+#define IPINDELIVERS 9
+#define IPOUTREQUESTS 10
+#define IPOUTDISCARDS 11
+#define IPOUTNOROUTES 12
+#define IPREASMTIMEOUT 13
+#define IPREASMREQDS 14
+#define IPREASMOKS 15
+#define IPREASMFAILS 16
+#define IPFRAGOKS 17
+#define IPFRAGFAILS 18
+#define IPFRAGCREATES 19
+#define IPADDRTABLE 20 /* Placeholder */
+#define IPROUTETABLE 21 /* Placeholder */
+#define IPMEDIATABLE 22 /* Placeholder */
+#define IPROUTEDISCARDS 23
+
+#define IPADADDR 1
+#define IPADIFINDEX 2
+#define IPADNETMASK 3
+#define IPADBCASTADDR 4
+#define IPADREASMMAX 5
+
+#define IPROUTEDEST 1
+#define IPROUTEIFINDEX 2
+#define IPROUTEMETRIC1 3
+#define IPROUTEMETRIC2 4
+#define IPROUTEMETRIC3 5
+#define IPROUTEMETRIC4 6
+#define IPROUTENEXTHOP 7
+#define IPROUTETYPE 8
+#define IPROUTEPROTO 9
+#define IPROUTEAGE 10
+#define IPROUTEMASK 11
+#define IPROUTEMETRIC5 12
+#define IPROUTEINFO 13
+
+/* #define IPMEDIAIFINDEX 1 */
+/* #define IPMEDIAPHYSADDRESS 2 */
+/* #define IPMEDIANETADDRESS 3 */
+/* #define IPMEDIATYPE 4 */
+
+#endif /* _MIBGROUP_IP_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipAddr.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipAddr.c
new file mode 100644
index 0000000000..bd2cf09f0f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipAddr.c
@@ -0,0 +1,1072 @@
+/*
+ * IP MIB group implementation - ip.c
+ *
+ */
+
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#if defined(IFNET_NEEDS_KERNEL) && !defined(_KERNEL)
+#define _KERNEL 1
+#define _I_DEFINED_KERNEL
+#endif
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#if HAVE_UNISTD_H
+#ifdef irix6
+#define _STANDALONE 1
+#endif
+#include <unistd.h>
+#endif
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#include <sys/types.h>
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#if HAVE_SYS_SYSCTL_H
+#ifdef _I_DEFINED_KERNEL
+#undef _KERNEL
+#endif
+#include <sys/sysctl.h>
+#ifdef _I_DEFINED_KERNEL
+#define _KERNEL 1
+#endif
+#endif
+#if HAVE_SYS_SYSMP_H
+#include <sys/sysmp.h>
+#endif
+#if HAVE_SYS_TCPIPSTATS_H
+#include <sys/tcpipstats.h>
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_NET_IF_H
+#include <net/if.h>
+#endif
+#if HAVE_NET_IF_VAR_H
+#include <net/if_var.h>
+#endif
+#ifdef _I_DEFINED_KERNEL
+#undef _KERNEL
+#endif
+#if HAVE_NETINET_IN_SYSTM_H
+#include <netinet/in_systm.h>
+#endif
+#if HAVE_SYS_HASHING_H
+#include <sys/hashing.h>
+#endif
+#if HAVE_NETINET_IN_VAR_H
+#include <netinet/in_var.h>
+#endif
+#if HAVE_NETINET_IP_H
+#include <netinet/ip.h>
+#endif
+#if HAVE_NETINET_IP_VAR_H
+#include <netinet/ip_var.h>
+#endif
+#if HAVE_INET_MIB2_H
+#include <inet/mib2.h>
+#endif
+#if HAVE_SYS_STREAM_H
+#include <sys/stream.h>
+#endif
+#if HAVE_NET_ROUTE_H
+#include <net/route.h>
+#endif
+#if HAVE_SYSLOG_H
+#include <syslog.h>
+#endif
+#if HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+
+#if defined(MIB_IPCOUNTER_SYMBOL) || defined(hpux11)
+#include <sys/mib.h>
+#include <netinet/mib_kern.h>
+#endif /* MIB_IPCOUNTER_SYMBOL || hpux11 */
+
+#ifdef solaris2
+#include "kernel_sunos5.h"
+#else
+#include "kernel.h"
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/auto_nlist.h>
+#include <net-snmp/data_access/interface.h>
+
+#include "ip.h"
+#include "interfaces.h"
+#include "sysORTable.h"
+
+#ifdef cygwin
+#include <windows.h>
+#endif
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+#if !defined (WIN32) && !defined (cygwin)
+
+#if !defined(NETSNMP_CAN_USE_SYSCTL) || !defined(IPCTL_STATS)
+#ifndef solaris2
+
+#if defined(freebsd2) || defined(hpux11) || defined(linux)
+static void Address_Scan_Init(void);
+#ifdef freebsd2
+static int Address_Scan_Next(short *, struct in_ifaddr *);
+#else
+#ifdef linux
+static struct ifconf ifc;
+static int Address_Scan_Next(short *, struct ifnet *);
+#else
+static int Address_Scan_Next(short *, mib_ipAdEnt *);
+#endif
+#endif
+#endif
+
+/*
+ * var_ipAddrEntry(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ *
+ */
+
+u_char *
+var_ipAddrEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ /*
+ * object identifier is of form:
+ * 1.3.6.1.2.1.4.20.1.?.A.B.C.D, where A.B.C.D is IP address.
+ * IPADDR starts at offset 10.
+ */
+ oid lowest[14];
+ oid current[14], *op;
+ u_char *cp;
+ int lowinterface = 0;
+#ifndef freebsd2
+ short interface;
+#endif
+#ifdef hpux11
+ static mib_ipAdEnt in_ifaddr, lowin_ifaddr;
+#else
+#if !defined(linux) && !defined(sunV3)
+ static struct in_ifaddr in_ifaddr, lowin_ifaddr;
+#else
+ static struct ifnet lowin_ifnet;
+#endif
+ static struct ifnet ifnet;
+#endif /* hpux11 */
+ static in_addr_t addr_ret;
+
+ /*
+ * fill in object part of name for current (less sizeof instance part)
+ */
+
+ memcpy((char *) current, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+
+#if !defined(freebsd2) && !defined(hpux11) && !defined(linux)
+ Interface_Scan_Init();
+#else
+ Address_Scan_Init();
+#endif
+ for (;;) {
+
+#if !defined(freebsd2) && !defined(hpux11) && !defined(linux)
+ if (Interface_Scan_Next(&interface, NULL, &ifnet, &in_ifaddr) == 0)
+ break;
+#ifdef STRUCT_IFNET_HAS_IF_ADDRLIST
+ if (ifnet.if_addrlist == 0)
+ continue; /* No address found for interface */
+#endif
+#else /* !freebsd2 && !hpux11 */
+#if defined(linux)
+ if (Address_Scan_Next(&interface, &ifnet) == 0)
+ break;
+#else
+ if (Address_Scan_Next(&interface, &in_ifaddr) == 0)
+ break;
+#endif
+#endif /* !freebsd2 && !hpux11 && !linux */
+
+#ifdef hpux11
+ cp = (u_char *) & in_ifaddr.Addr;
+#elif defined(linux) || defined(sunV3)
+ cp = (u_char *) & (((struct sockaddr_in *) &(ifnet.if_addr))->
+ sin_addr.s_addr);
+#else
+ cp = (u_char *) & (((struct sockaddr_in *) &(in_ifaddr.ia_addr))->
+ sin_addr.s_addr);
+#endif
+
+ op = current + 10;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ if (exact) {
+ if (snmp_oid_compare(current, 14, name, *length) == 0) {
+ memcpy((char *) lowest, (char *) current,
+ 14 * sizeof(oid));
+ lowinterface = interface;
+#if defined(linux) || defined(sunV3)
+ lowin_ifnet = ifnet;
+#else
+ lowin_ifaddr = in_ifaddr;
+#endif
+ break; /* no need to search further */
+ }
+ } else {
+ if ((snmp_oid_compare(current, 14, name, *length) > 0) &&
+ (!lowinterface
+ || (snmp_oid_compare(current, 14, lowest, 14) < 0))) {
+ /*
+ * if new one is greater than input and closer to input than
+ * previous lowest, save this one as the "next" one.
+ */
+ lowinterface = interface;
+#if defined(linux) || defined(sunV3)
+ lowin_ifnet = ifnet;
+#else
+ lowin_ifaddr = in_ifaddr;
+#endif
+ memcpy((char *) lowest, (char *) current,
+ 14 * sizeof(oid));
+ }
+ }
+ }
+
+#if defined(linux)
+ SNMP_FREE(ifc.ifc_buf);
+#endif
+
+ if (!lowinterface)
+ return (NULL);
+ memcpy((char *) name, (char *) lowest, 14 * sizeof(oid));
+ *length = 14;
+ *write_method = 0;
+ *var_len = sizeof(long_return);
+ switch (vp->magic) {
+ case IPADADDR:
+ *var_len = sizeof(addr_ret);
+#ifdef hpux11
+ addr_ret = lowin_ifaddr.Addr;
+ return (u_char *) & addr_ret;
+#elif defined(linux) || defined(sunV3)
+ return (u_char *) & ((struct sockaddr_in *) &lowin_ifnet.if_addr)->
+ sin_addr.s_addr;
+#else
+ return (u_char *) & ((struct sockaddr_in *) &lowin_ifaddr.
+ ia_addr)->sin_addr.s_addr;
+#endif
+ case IPADIFINDEX:
+ long_return = lowinterface;
+ return (u_char *) & long_return;
+ case IPADNETMASK:
+ *var_len = sizeof(addr_ret);
+#ifdef hpux11
+ addr_ret = lowin_ifaddr.NetMask;
+ return (u_char *) & addr_ret;
+#elif defined(linux)
+ return (u_char *) & ((struct sockaddr_in *) &lowin_ifnet.
+ ia_subnetmask)->sin_addr.s_addr;
+#elif !defined(sunV3)
+ addr_ret = lowin_ifaddr.ia_subnetmask;
+ return (u_char *) & addr_ret;
+#endif
+ case IPADBCASTADDR:
+#ifdef hpux11
+ long_return = lowin_ifaddr.BcastAddr & 1;
+#elif defined(linux) || defined(sunV3)
+ *var_len = sizeof(long_return);
+ long_return =
+ ntohl(((struct sockaddr_in *) &lowin_ifnet.ifu_broadaddr)->
+ sin_addr.s_addr) & 1;
+#elif defined(netbsd1)
+ long_return =
+ ((struct sockaddr_in *) &lowin_ifaddr.ia_broadaddr)->sin_addr.
+ s_addr & 1;
+#else
+ long_return =
+ ntohl(((struct sockaddr_in *) &lowin_ifaddr.ia_broadaddr)->
+ sin_addr.s_addr) & 1;
+#endif
+ return (u_char *) & long_return;
+ case IPADREASMMAX:
+#ifdef hpux11
+ long_return = lowin_ifaddr.ReasmMaxSize;
+ return (u_char *) & long_return;
+#elif defined(NETSNMP_NO_DUMMY_VALUES)
+ return NULL;
+#else
+ long_return = -1;
+ return (u_char *) & long_return;
+#endif
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ipAddrEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+#ifdef freebsd2
+static struct in_ifaddr *in_ifaddraddr = NULL;
+
+static void
+Address_Scan_Init(void)
+{
+ int rc = auto_nlist(IFADDR_SYMBOL, (char *) &in_ifaddraddr,
+ sizeof(in_ifaddraddr));
+ if (0 == rc)
+ in_ifaddraddr = NULL;
+}
+
+/*
+ * NB: Index is the number of the corresponding interface, not of the address
+ */
+static int
+Address_Scan_Next(Index, Retin_ifaddr)
+ short *Index;
+ struct in_ifaddr *Retin_ifaddr;
+{
+ struct in_ifaddr in_ifaddr;
+ struct ifnet ifnet, *ifnetaddr; /* NOTA: same name as another one */
+ short iindex = 1;
+
+ while (in_ifaddraddr) {
+ /*
+ * Get the "in_ifaddr" structure
+ */
+ if (!NETSNMP_KLOOKUP(in_ifaddraddr, (char *) &in_ifaddr, sizeof in_ifaddr)) {
+ DEBUGMSGTL(("mibII/ip:Address_Scan_Next", "klookup failed\n"));
+ return 0;
+ }
+
+ in_ifaddraddr = in_ifaddr.ia_next;
+
+ if (Retin_ifaddr)
+ *Retin_ifaddr = in_ifaddr;
+
+ /*
+ * Now, more difficult, find the index of the interface to which
+ * this address belongs
+ */
+
+ auto_nlist(IFNET_SYMBOL, (char *) &ifnetaddr, sizeof(ifnetaddr));
+ while (ifnetaddr && ifnetaddr != in_ifaddr.ia_ifp) {
+ if (!NETSNMP_KLOOKUP(ifnetaddr, (char *) &ifnet, sizeof ifnet)) {
+ DEBUGMSGTL(("mibII/ip:Address_Scan_Next", "klookup failed\n"));
+ return 0;
+ }
+ ifnetaddr = ifnet.if_next;
+ iindex++;
+ }
+
+ /*
+ * XXX - might not find it?
+ */
+
+ if (Index)
+ *Index = iindex;
+
+ return (1); /* DONE */
+ }
+ return (0); /* EOF */
+}
+
+#elif defined(hpux11)
+
+static int iptab_size, iptab_current;
+static mib_ipAdEnt *ip = (mib_ipAdEnt *) 0;
+
+static void
+Address_Scan_Init(void)
+{
+ int fd;
+ struct nmparms p;
+ int val;
+ unsigned int ulen;
+ int ret;
+
+ if (ip)
+ free(ip);
+ ip = (mib_ipAdEnt *) 0;
+ iptab_size = 0;
+
+ if ((fd = open_mib("/dev/ip", O_RDONLY, 0, NM_ASYNC_OFF)) >= 0) {
+ p.objid = ID_ipAddrNumEnt;
+ p.buffer = (void *) &val;
+ ulen = sizeof(int);
+ p.len = &ulen;
+ if ((ret = get_mib_info(fd, &p)) == 0)
+ iptab_size = val;
+
+ if (iptab_size > 0) {
+ ulen = (unsigned) iptab_size *sizeof(mib_ipAdEnt);
+ ip = (mib_ipAdEnt *) malloc(ulen);
+ p.objid = ID_ipAddrTable;
+ p.buffer = (void *) ip;
+ p.len = &ulen;
+ if ((ret = get_mib_info(fd, &p)) < 0)
+ iptab_size = 0;
+ }
+
+ close_mib(fd);
+ }
+
+ iptab_current = 0;
+}
+
+/*
+ * NB: Index is the number of the corresponding interface, not of the address
+ */
+static int
+Address_Scan_Next(Index, Retin_ifaddr)
+ short *Index;
+ mib_ipAdEnt *Retin_ifaddr;
+{
+ if (iptab_current < iptab_size) {
+ /*
+ * copy values
+ */
+ *Index = ip[iptab_current].IfIndex;
+ *Retin_ifaddr = ip[iptab_current];
+ /*
+ * increment to point to next entry
+ */
+ iptab_current++;
+ /*
+ * return success
+ */
+ return (1);
+ }
+
+ /*
+ * return done
+ */
+ return (0);
+}
+
+#elif defined(linux)
+static struct ifreq *ifr;
+static int ifr_counter;
+
+static void
+Address_Scan_Init(void)
+{
+ int num_interfaces = 0;
+ int fd;
+
+ /* get info about all interfaces */
+
+ ifc.ifc_len = 0;
+ SNMP_FREE(ifc.ifc_buf);
+ ifr_counter = 0;
+
+ do
+ {
+ if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
+ {
+ DEBUGMSGTL(("snmpd", "socket open failure in Address_Scan_Init\n"));
+ return;
+ }
+ num_interfaces += 16;
+
+ ifc.ifc_len = sizeof(struct ifreq) * num_interfaces;
+ ifc.ifc_buf = (char*) realloc(ifc.ifc_buf, ifc.ifc_len);
+
+ if (ioctl(fd, SIOCGIFCONF, &ifc) < 0)
+ {
+ ifr=NULL;
+ close(fd);
+ return;
+ }
+ close(fd);
+ }
+ while (ifc.ifc_len >= (sizeof(struct ifreq) * num_interfaces));
+
+ ifr = ifc.ifc_req;
+ close(fd);
+}
+
+/*
+ * NB: Index is the number of the corresponding interface, not of the address
+ */
+static int
+Address_Scan_Next(short *Index, struct ifnet *Retifnet)
+{
+ struct ifnet ifnet_store;
+ int fd;
+ if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
+ {
+ DEBUGMSGTL(("snmpd", "socket open failure in Address_Scan_Next\n"));
+ return(0);
+ }
+
+ while (ifr) {
+
+ ifnet_store.if_addr = ifr->ifr_addr;
+
+ if (Retifnet)
+ {
+ Retifnet->if_addr = ifr->ifr_addr;
+
+ if (ioctl(fd, SIOCGIFBRDADDR, ifr) < 0)
+ {
+ memset((char *) &Retifnet->ifu_broadaddr, 0, sizeof(Retifnet->ifu_broadaddr));
+ }
+ else
+ Retifnet->ifu_broadaddr = ifr->ifr_broadaddr;
+
+ ifr->ifr_addr = Retifnet->if_addr;
+ if (ioctl(fd, SIOCGIFNETMASK, ifr) < 0)
+ {
+ memset((char *) &Retifnet->ia_subnetmask, 0, sizeof(Retifnet->ia_subnetmask));
+ }
+ else
+ Retifnet->ia_subnetmask = ifr->ifr_netmask;
+
+ }
+
+ if (Index)
+ {
+ ifr->ifr_addr = ifnet_store.if_addr;
+ *Index = netsnmp_access_interface_index_find(ifr->ifr_name);
+ }
+
+ ifr++;
+ ifr_counter+=sizeof(struct ifreq);
+ if (ifr_counter >= ifc.ifc_len)
+ {
+ ifr = NULL; /* beyond the end */
+ }
+
+ close(fd);
+ return (1); /* DONE */
+ }
+ close(fd);
+ return (0); /* EOF */
+}
+
+#endif /* freebsd,hpux11,linux */
+
+#else /* solaris2 */
+
+
+static int
+IP_Cmp(void *addr, void *ep)
+{
+ if (((mib2_ipAddrEntry_t *) ep)->ipAdEntAddr == *(IpAddress *) addr)
+ return (0);
+ else
+ return (1);
+}
+
+u_char *
+var_ipAddrEntry(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ /*
+ * object identifier is of form:
+ * 1.3.6.1.2.1.4.20.1.?.A.B.C.D, where A.B.C.D is IP address.
+ * IPADDR starts at offset 10.
+ */
+#define IP_ADDRNAME_LENGTH 14
+#define IP_ADDRINDEX_OFF 10
+ oid lowest[IP_ADDRNAME_LENGTH];
+ oid current[IP_ADDRNAME_LENGTH], *op;
+ u_char *cp;
+ IpAddress NextAddr;
+ mib2_ipAddrEntry_t entry;
+ static mib2_ipAddrEntry_t Lowentry;
+ int Found = 0;
+ req_e req_type;
+ static in_addr_t addr_ret;
+
+ /*
+ * fill in object part of name for current (less sizeof instance part)
+ */
+
+ DEBUGMSGTL(("mibII/ip", "var_ipAddrEntry: "));
+ DEBUGMSGOID(("mibII/ip", name, *length));
+ DEBUGMSG(("mibII/ip", " %d\n", exact));
+
+ memset(&Lowentry, 0, sizeof(Lowentry));
+ memcpy((char *) current, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+ if (*length == IP_ADDRNAME_LENGTH) /* Assume that the input name is the lowest */
+ memcpy((char *) lowest, (char *) name,
+ IP_ADDRNAME_LENGTH * sizeof(oid));
+ else
+ lowest[0] = 0xff;
+ for (NextAddr = (u_long) - 1, req_type = GET_FIRST;;
+ NextAddr = entry.ipAdEntAddr, req_type = GET_NEXT) {
+ if (getMibstat
+ (MIB_IP_ADDR, &entry, sizeof(mib2_ipAddrEntry_t), req_type,
+ &IP_Cmp, &NextAddr) != 0)
+ break;
+ COPY_IPADDR(cp, (u_char *) & entry.ipAdEntAddr, op,
+ current + IP_ADDRINDEX_OFF);
+ if (exact) {
+ if (snmp_oid_compare
+ (current, IP_ADDRNAME_LENGTH, name, *length) == 0) {
+ memcpy((char *) lowest, (char *) current,
+ IP_ADDRNAME_LENGTH * sizeof(oid));
+ Lowentry = entry;
+ Found++;
+ break; /* no need to search further */
+ }
+ } else {
+ if ((snmp_oid_compare
+ (current, IP_ADDRNAME_LENGTH, name, *length) > 0)
+ && (((NextAddr == (u_long) - 1))
+ ||
+ (snmp_oid_compare
+ (current, IP_ADDRNAME_LENGTH, lowest,
+ IP_ADDRNAME_LENGTH) < 0)
+ ||
+ (snmp_oid_compare
+ (name, *length, lowest, IP_ADDRNAME_LENGTH) == 0))) {
+ /*
+ * if new one is greater than input and closer to input than
+ * previous lowest, and is not equal to it, save this one as the "next" one.
+ */
+ Lowentry = entry;
+ Found++;
+ memcpy((char *) lowest, (char *) current,
+ IP_ADDRNAME_LENGTH * sizeof(oid));
+ }
+ }
+ }
+ DEBUGMSGTL(("mibII/ip", "... Found = %d\n", Found));
+ if (Found == 0)
+ return (NULL);
+ memcpy((char *) name, (char *) lowest,
+ IP_ADDRNAME_LENGTH * sizeof(oid));
+ *length = IP_ADDRNAME_LENGTH;
+ *write_method = 0;
+ *var_len = sizeof(long_return);
+ switch (vp->magic) {
+ case IPADADDR:
+ *var_len = sizeof(addr_ret);
+ addr_ret = Lowentry.ipAdEntAddr;
+ return (u_char *) & addr_ret;
+ case IPADIFINDEX:
+#ifdef NETSNMP_INCLUDE_IFTABLE_REWRITES
+ Lowentry.ipAdEntIfIndex.o_bytes[Lowentry.ipAdEntIfIndex.o_length] = '\0';
+ long_return =
+ netsnmp_access_interface_index_find(Lowentry.
+ ipAdEntIfIndex.o_bytes);
+#else
+ long_return =
+ Interface_Index_By_Name(Lowentry.ipAdEntIfIndex.o_bytes,
+ Lowentry.ipAdEntIfIndex.o_length);
+#endif
+ return (u_char *) & long_return;
+ case IPADNETMASK:
+ *var_len = sizeof(addr_ret);
+ addr_ret = Lowentry.ipAdEntNetMask;
+ return (u_char *) & addr_ret;
+ case IPADBCASTADDR:
+ long_return = Lowentry.ipAdEntBcastAddr;
+ return (u_char *) & long_return;
+ case IPADREASMMAX:
+ long_return = Lowentry.ipAdEntReasmMaxSize;
+ return (u_char *) & long_return;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ipAddrEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+#endif /* solaris2 */
+
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+
+#else /* NETSNMP_CAN_USE_SYSCTL && IPCTL_STATS */
+
+/*
+ * Ideally, this would be combined with the code in interfaces.c.
+ * Even separate, it's still better than what went before.
+ */
+struct iflist {
+ int flags;
+ int index;
+ struct in_addr addr;
+ struct in_addr mask;
+ struct in_addr bcast;
+};
+static struct iflist *ifs;
+static int nifs;
+
+static void
+get_iflist(void)
+{
+ int naddrs, bit;
+ static int mib[6]
+ = { CTL_NET, PF_ROUTE, 0, AF_INET, NET_RT_IFLIST, 0 };
+ char *cp, *ifbuf;
+ size_t len;
+ struct rt_msghdr *rtm;
+ struct if_msghdr *ifm;
+ struct ifa_msghdr *ifam;
+ struct sockaddr *sa;
+ int flags;
+
+ naddrs = 0;
+ if (ifs)
+ free(ifs);
+ ifs = 0;
+ nifs = 0;
+ len = 0;
+ if (sysctl(mib, 6, 0, &len, 0, 0) < 0)
+ return;
+
+ ifbuf = malloc(len);
+ if (ifbuf == 0)
+ return;
+ if (sysctl(mib, 6, ifbuf, &len, 0, 0) < 0) {
+ syslog(LOG_WARNING, "sysctl net-route-iflist: %m");
+ free(ifbuf);
+ return;
+ }
+
+ loop:
+ cp = ifbuf;
+ while (cp < &ifbuf[len]) {
+ int gotaddr;
+
+ gotaddr = 0;
+ rtm = (struct rt_msghdr *) cp;
+ if (rtm->rtm_version != RTM_VERSION || rtm->rtm_type != RTM_IFINFO) {
+ free(ifs);
+ ifs = 0;
+ nifs = 0;
+ free(ifbuf);
+ return;
+ }
+ ifm = (struct if_msghdr *) rtm;
+ flags = ifm->ifm_flags;
+ cp += ifm->ifm_msglen;
+ rtm = (struct rt_msghdr *) cp;
+ while (cp < &ifbuf[len] && rtm->rtm_type == RTM_NEWADDR) {
+ ifam = (struct ifa_msghdr *) rtm;
+ cp += sizeof(*ifam);
+ /*
+ * from route.c
+ */
+#define ROUND(a) \
+ ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
+ for (bit = 1; bit && cp < &ifbuf[len]; bit <<= 1) {
+ if (!(ifam->ifam_addrs & bit))
+ continue;
+ sa = (struct sockaddr *) cp;
+ cp += ROUND(sa->sa_len);
+
+ /*
+ * Netmasks are returned as bit
+ * strings of type AF_UNSPEC. The
+ * others are pretty ok.
+ */
+ if (bit == RTA_IFA) {
+#define satosin(sa) ((struct sockaddr_in *)(sa))
+ if (ifs) {
+ ifs[naddrs].addr = satosin(sa)->sin_addr;
+ ifs[naddrs].index = ifam->ifam_index;
+ ifs[naddrs].flags = flags;
+ }
+ gotaddr = 1;
+ } else if (bit == RTA_NETMASK) {
+ if (ifs)
+ ifs[naddrs].mask = satosin(sa)->sin_addr;
+ } else if (bit == RTA_BRD) {
+ if (ifs)
+ ifs[naddrs].bcast = satosin(sa)->sin_addr;
+ }
+ }
+ if (gotaddr)
+ naddrs++;
+ cp = (char *) rtm + rtm->rtm_msglen;
+ rtm = (struct rt_msghdr *) cp;
+ }
+ }
+ if (ifs) {
+ nifs = naddrs;
+ free(ifbuf);
+ return;
+ }
+ ifs = malloc(naddrs * sizeof(*ifs));
+ if (ifs == 0) {
+ free(ifbuf);
+ return;
+ }
+ naddrs = 0;
+ goto loop;
+}
+
+u_char *
+var_ipAddrEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ /*
+ * object identifier is of form:
+ * 1.3.6.1.2.1.4.20.1.?.A.B.C.D, where A.B.C.D is IP address.
+ * IPADDR starts at offset 10.
+ */
+ oid lowest[14];
+ oid current[14], *op;
+ u_char *cp;
+ int lowinterface = -1;
+ int i, interface;
+ static in_addr_t addr_ret;
+
+ /*
+ * fill in object part of name for current (less sizeof instance part)
+ */
+ memcpy(current, vp->name, (int) vp->namelen * sizeof(oid));
+
+ /*
+ * Get interface table from kernel.
+ */
+ get_iflist();
+
+ for (i = 0; i < nifs; i++) {
+ op = &current[10];
+ cp = (u_char *) & ifs[i].addr;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ if (exact) {
+ if (snmp_oid_compare(current, 14, name, *length) == 0) {
+ memcpy(lowest, current, 14 * sizeof(oid));
+ lowinterface = i;
+ break; /* no need to search further */
+ }
+ } else {
+ if ((snmp_oid_compare(current, 14, name, *length) > 0) &&
+ (lowinterface < 0
+ || (snmp_oid_compare(current, 14, lowest, 14) < 0))) {
+ /*
+ * if new one is greater than input
+ * and closer to input than previous
+ * lowest, save this one as the "next"
+ * one.
+ */
+ lowinterface = i;
+ memcpy(lowest, current, 14 * sizeof(oid));
+ }
+ }
+ }
+
+ if (lowinterface < 0)
+ return NULL;
+ i = lowinterface;
+ memcpy(name, lowest, 14 * sizeof(oid));
+ *length = 14;
+ *write_method = 0;
+ *var_len = sizeof(long_return);
+ switch (vp->magic) {
+ case IPADADDR:
+ *var_len = sizeof(addr_ret);
+ addr_ret = ifs[i].addr.s_addr;
+ return (u_char *) & addr_ret;
+
+ case IPADIFINDEX:
+ long_return = ifs[i].index;
+ return (u_char *) & long_return;
+
+ case IPADNETMASK:
+ *var_len = sizeof(addr_ret);
+ addr_ret = ifs[i].mask.s_addr;
+ return (u_char *) & addr_ret;
+
+ case IPADBCASTADDR:
+ long_return = ntohl(ifs[i].bcast.s_addr) & 1;
+ return (u_char *) & long_return;
+
+ case IPADREASMMAX:
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#else
+ long_return = -1;
+ return (u_char *) & long_return;
+#endif
+
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ipAddrEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+#endif /* NETSNMP_CAN_USE_SYSCTL && IPCTL_STATS */
+
+#else /* WIN32 cygwin */
+#include <iphlpapi.h>
+u_char *
+var_ipAddrEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ /*
+ * object identifier is of form:
+ * 1.3.6.1.2.1.4.20.1.?.A.B.C.D, where A.B.C.D is IP address.
+ * IPADDR starts at offset 10.
+ */
+ oid lowest[14];
+ oid current[14], *op;
+ u_char *cp;
+ int lowinterface = -1;
+ int i;
+ PMIB_IPADDRTABLE pIpAddrTable = NULL;
+ DWORD status = NO_ERROR;
+ DWORD statusRetry = NO_ERROR;
+ DWORD dwActualSize = 0;
+ static in_addr_t addr_ret;
+
+ /*
+ * fill in object part of name for current (less sizeof instance part)
+ */
+ memcpy(current, vp->name, (int) vp->namelen * sizeof(oid));
+
+ /*
+ * Get interface table from kernel.
+ */
+ status = GetIpAddrTable(pIpAddrTable, &dwActualSize, TRUE);
+ if (status == ERROR_INSUFFICIENT_BUFFER) {
+ pIpAddrTable = (PMIB_IPADDRTABLE) malloc(dwActualSize);
+ if (pIpAddrTable != NULL) {
+ statusRetry =
+ GetIpAddrTable(pIpAddrTable, &dwActualSize, TRUE);
+ }
+ }
+
+ if (statusRetry == NO_ERROR || status == NO_ERROR) {
+
+ for (i = 0; i < (int) pIpAddrTable->dwNumEntries; ++i) {
+ op = &current[10];
+ cp = (u_char *) & pIpAddrTable->table[i].dwAddr;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ if (exact) {
+ if (snmp_oid_compare(current, 14, name, *length) == 0) {
+ memcpy(lowest, current, 14 * sizeof(oid));
+ lowinterface = i;
+ break; /* no need to search further */
+ }
+ } else {
+ if (snmp_oid_compare(current, 14, name, *length) > 0) {
+
+ lowinterface = i;
+ memcpy(lowest, current, 14 * sizeof(oid));
+ break; /* Since the table is sorted, no need to search further */
+ }
+ }
+ }
+ }
+
+ if (lowinterface < 0) {
+ free(pIpAddrTable);
+ return NULL;
+ }
+ i = lowinterface;
+ memcpy(name, lowest, 14 * sizeof(oid));
+ *length = 14;
+ *write_method = 0;
+ *var_len = sizeof(long_return);
+ switch (vp->magic) {
+ case IPADADDR:
+ *var_len = sizeof(addr_ret);
+ addr_ret = pIpAddrTable->table[i].dwAddr;
+ return (u_char *) & addr_ret;
+
+ case IPADIFINDEX:
+ long_return = pIpAddrTable->table[i].dwIndex;
+ free(pIpAddrTable);
+ return (u_char *) & long_return;
+
+ case IPADNETMASK:
+ *var_len = sizeof(addr_ret);
+ addr_ret = pIpAddrTable->table[i].dwMask;
+ free(pIpAddrTable);
+ return (u_char *) & addr_ret;
+
+ case IPADBCASTADDR:
+ long_return = pIpAddrTable->table[i].dwBCastAddr;
+ free(pIpAddrTable);
+ return (u_char *) & long_return;
+
+ case IPADREASMMAX:
+ long_return = pIpAddrTable->table[i].dwReasmSize;
+ free(pIpAddrTable);
+ return (u_char *) & long_return;
+
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ipAddrEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+#endif /* WIN32 cygwin */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipAddr.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipAddr.h
new file mode 100644
index 0000000000..526a060241
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipAddr.h
@@ -0,0 +1,15 @@
+/*
+ * Template MIB group interface - ipAddr.h
+ *
+ */
+#ifndef _MIBGROUP_IPADDR_H
+#define _MIBGROUP_IPADDR_H
+
+config_require(util_funcs)
+#if !defined(NETSNMP_ENABLE_MFD_REWRITES)
+config_require(mibII/ip)
+#endif
+
+ extern FindVarMethod var_ipAddrEntry;
+
+#endif /* _MIBGROUP_IPADDR_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable.c
new file mode 100644
index 0000000000..1bb3db9ed6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable.c
@@ -0,0 +1,1131 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.iterate_access.conf$
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include "route_headers.h"
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "ipCidrRouteTable.h"
+#include "ipCidrRouteTable_checkfns.h"
+#include "ipCidrRouteTable_access.h"
+
+#include "var_route.h"
+
+static netsnmp_oid_stash_node *undoStorage;
+
+struct undoInfo {
+ void *ptr;
+ size_t len;
+};
+
+void
+free_undoInfo(void *vp)
+{
+ struct undoInfo *ui = (struct undoInfo *) vp;
+ if (!ui)
+ return;
+ SNMP_FREE(ui->ptr);
+ SNMP_FREE(ui);
+}
+
+/** Initialize the ipCidrRouteTable table by defining its contents and how it's structured */
+void
+initialize_table_ipCidrRouteTable(void)
+{
+ static oid ipCidrRouteTable_oid[] =
+ { 1, 3, 6, 1, 2, 1, 4, 24, 4 };
+ netsnmp_table_registration_info *table_info;
+ netsnmp_handler_registration *my_handler;
+ netsnmp_iterator_info *iinfo;
+
+ /** create the table registration information structures */
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+
+ /** if your table is read only, it's easiest to change the
+ HANDLER_CAN_RWRITE definition below to HANDLER_CAN_RONLY */
+ my_handler = netsnmp_create_handler_registration("ipCidrRouteTable",
+ ipCidrRouteTable_handler,
+ ipCidrRouteTable_oid,
+ OID_LENGTH
+ (ipCidrRouteTable_oid),
+ HANDLER_CAN_RWRITE);
+
+ if (!my_handler || !table_info || !iinfo) {
+ snmp_log(LOG_ERR,
+ "malloc failed in initialize_table_ipCidrRouteTable");
+ return; /** Serious error. */
+ }
+
+ /***************************************************
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(table_info, ASN_IPADDRESS,
+ /** index: ipCidrRouteDest */
+ ASN_IPADDRESS,
+ /** index: ipCidrRouteMask */
+ ASN_INTEGER,
+ /** index: ipCidrRouteTos */
+ ASN_IPADDRESS,
+ /** index: ipCidrRouteNextHop */
+ 0);
+
+ /** Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ table_info->min_column = 1;
+ table_info->max_column = 16;
+
+ /** iterator access routines */
+ iinfo->get_first_data_point = ipCidrRouteTable_get_first_data_point;
+ iinfo->get_next_data_point = ipCidrRouteTable_get_next_data_point;
+
+ /** you may wish to set these as well */
+#ifdef MAYBE_USE_THESE
+ iinfo->make_data_context = ipCidrRouteTable_context_convert_function;
+ iinfo->free_data_context = ipCidrRouteTable_data_free;
+
+ /** pick *only* one of these if you use them */
+ iinfo->free_loop_context = ipCidrRouteTable_loop_free;
+ iinfo->free_loop_context_at_end = ipCidrRouteTable_loop_free;
+#endif
+
+ /** tie the two structures together */
+ iinfo->table_reginfo = table_info;
+
+ /***************************************************
+ * registering the table with the master agent
+ */
+ DEBUGMSGTL(("initialize_table_ipCidrRouteTable",
+ "Registering table ipCidrRouteTable as a table iterator\n"));
+ netsnmp_register_table_iterator(my_handler, iinfo);
+}
+
+/** Initializes the ipCidrRouteTable module */
+void
+init_ipCidrRouteTable(void)
+{
+
+ /** here we initialize all the tables we're planning on supporting */
+ initialize_table_ipCidrRouteTable();
+}
+
+
+/* globals */
+static size_t rtsize;
+static RTENTRY **rthead;
+
+netsnmp_variable_list *
+ipCidrRouteTable_set_indexes(RTENTRY *ourroute,
+ netsnmp_variable_list *put_index_data) {
+ netsnmp_variable_list *vptr;
+
+ /** ipCidrRouteDest */
+ vptr = put_index_data;
+ snmp_set_var_value(vptr, (u_char *) &((struct sockaddr_in *) (&ourroute->rt_dst))->sin_addr.s_addr,
+ sizeof(((struct sockaddr_in *) (&ourroute->rt_dst))->sin_addr));
+
+ /** ipCidrRouteMask */
+ vptr = vptr->next_variable;
+ snmp_set_var_value(vptr, (u_char *) &((struct sockaddr_in *) (&ourroute->rt_genmask))->sin_addr.s_addr,
+ sizeof(((struct sockaddr_in *) (&ourroute->rt_genmask))->sin_addr));
+
+ /** ipCidrRouteTos */
+ vptr = vptr->next_variable;
+ snmp_set_var_value(vptr, (u_char *) &ourroute->rt_tos,
+ sizeof(ourroute->rt_tos));
+ vptr = vptr->next_variable;
+
+ /** ipCidrRouteNextHop */
+ snmp_set_var_value(vptr,
+ (u_char *) &((struct sockaddr_in *) (&ourroute->rt_gateway))->sin_addr.s_addr,
+ sizeof(((struct sockaddr_in *) (&ourroute->rt_gateway))->sin_addr));
+
+ return put_index_data;
+}
+
+/** returns the first data point within the ipCidrRouteTable table data.
+
+ Set the my_loop_context variable to the first data point structure
+ of your choice (from which you can find the next one). This could
+ be anything from the first node in a linked list, to an integer
+ pointer containing the beginning of an array variable.
+
+ Set the my_data_context variable to something to be returned to
+ you later that will provide you with the data to return in a given
+ row. This could be the same pointer as what my_loop_context is
+ set to, or something different.
+
+ The put_index_data variable contains a list of snmp variable
+ bindings, one for each index in your table. Set the values of
+ each appropriately according to the data matching the first row
+ and return the put_index_data variable at the end of the function.
+*/
+netsnmp_variable_list *
+ipCidrRouteTable_get_first_data_point(void **my_loop_context,
+ void **my_data_context,
+ netsnmp_variable_list *
+ put_index_data,
+ netsnmp_iterator_info *mydata)
+{
+ int *position;
+
+ /* we could do this with a file-static variable, but for learning
+ purposes we'll use memory allocation to demonstrate simplistic
+ freeing of a loop_context */
+ position = malloc(sizeof(position));
+ if (!position)
+ return NULL;
+
+ /* read the routing table into the route array. This function is
+ defined in var_route.c, but is sorted incorrectly for this
+ table. By using a table_iterator we don't do any sorting
+ ourselves and the table_iterator handles it all for us, so we
+ don't resort with different criteria. */
+ rthead = netsnmp_get_routes(&rtsize);
+
+ if (!rthead) {
+ snmp_log(LOG_ERR,"ipCidrRouteTable: failed to get routes\n");
+ free(position);
+ return NULL;
+ }
+
+ /* We use the positinonal count as our loop context */
+ *position = 0;
+ *my_loop_context = position;
+
+ /* our data context is the individual array element, in this case
+ it's the first. */
+ *my_data_context = rthead[*position];
+
+ /* now, save the index data into the passed in (linked list) pointer */
+ return ipCidrRouteTable_set_indexes(rthead[*position], put_index_data);
+}
+
+/** functionally the same as ipCidrRouteTable_get_first_data_point, but
+ my_loop_context has already been set to a previous value and should
+ be updated to the next in the list. For example, if it was a
+ linked list, you might want to cast it and the return
+ my_loop_context->next. The my_data_context pointer should be set
+ to something you need later and the indexes in put_index_data
+ updated again. */
+
+netsnmp_variable_list *
+ipCidrRouteTable_get_next_data_point(void **my_loop_context,
+ void **my_data_context,
+ netsnmp_variable_list *
+ put_index_data,
+ netsnmp_iterator_info *mydata)
+{
+
+ int *position = (int *) *my_loop_context;
+
+ /* make sure we were called correctly */
+ if (!position)
+ return NULL;
+
+ /* go to the next route in the list */
+ (*position)++;
+
+ /* Are we beyond the end? */
+ if (*position >= rtsize) {
+ /* End of routes. stop here by returning NULL */
+ SNMP_FREE(position);
+ *my_loop_context = NULL;
+ *my_data_context = NULL;
+ return NULL;
+ }
+
+ /* our data context is the individual array element, in this case
+ it's the first. */
+ *my_data_context = rthead[*position];
+
+ /* now, save the index data into the passed in (linked list) pointer */
+ return ipCidrRouteTable_set_indexes(rthead[*position], put_index_data);
+}
+
+/** handles requests for the ipCidrRouteTable table, if anything else
+ needs to be done */
+int
+ipCidrRouteTable_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_variable_list *var;
+
+ void *data_context;
+
+ oid *suffix;
+ size_t suffix_len;
+
+ /** column and row index encoded portion */
+ suffix = requests->requestvb->name + reginfo->rootoid_len + 1;
+ suffix_len = requests->requestvb->name_length -
+ (reginfo->rootoid_len + 1);
+
+ for (request = requests; request; request = request->next) {
+ var = request->requestvb;
+ if (request->processed != 0)
+ continue;
+
+ data_context = netsnmp_extract_iterator_context(request);
+ if (data_context == NULL) {
+ if (reqinfo->mode == MODE_GET) {
+ netsnmp_set_request_error(reqinfo, request,
+ SNMP_NOSUCHINSTANCE);
+ continue;
+ }
+ /** XXX: no row existed, if you support creation and this is a
+ set, start dealing with it here, else continue */
+ }
+
+ /** extracts the information about the table from the request */
+ table_info = netsnmp_extract_table_info(request);
+ /** table_info->colnum contains the column number requested */
+ /** table_info->indexes contains a linked list of snmp variable
+ bindings for the indexes of the table. Values in the list
+ have been set corresponding to the indexes of the
+ request */
+ if (table_info == NULL) {
+ continue;
+ }
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ switch (table_info->colnum) {
+ case COLUMN_IPCIDRROUTEDEST:
+ {
+ u_long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteDest(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_IPADDRESS,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTEMASK:
+ {
+ u_long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteMask(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_IPADDRESS,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTETOS:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval = get_ipCidrRouteTos(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTENEXTHOP:
+ {
+ u_long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteNextHop(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_IPADDRESS,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTEIFINDEX:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteIfIndex(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTETYPE:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteType(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTEPROTO:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteProto(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTEAGE:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval = get_ipCidrRouteAge(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTEINFO:
+ {
+ oid *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteInfo(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_OBJECT_ID,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTENEXTHOPAS:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteNextHopAS(data_context,
+ &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTEMETRIC1:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteMetric1(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTEMETRIC2:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteMetric2(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTEMETRIC3:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteMetric3(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTEMETRIC4:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteMetric4(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTEMETRIC5:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteMetric5(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ case COLUMN_IPCIDRROUTESTATUS:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ retval =
+ get_ipCidrRouteStatus(data_context, &retval_len);
+ snmp_set_var_typed_value(var, ASN_INTEGER,
+ (const u_char *) retval,
+ retval_len);
+ }
+ break;
+
+ default:
+ /** We shouldn't get here */
+ snmp_log(LOG_ERR,
+ "problem encountered in ipCidrRouteTable_handler: unknown column\n");
+ }
+ break;
+
+ case MODE_SET_RESERVE1:
+ /** mib2cXXX: clear out old undo info if we have any. Remove if
+ table_iterator becomes un-serialized */
+ netsnmp_oid_stash_free(&undoStorage, free_undoInfo);
+
+ switch (table_info->colnum) {
+ case COLUMN_IPCIDRROUTEIFINDEX:
+ {
+ int ret =
+ check_ipCidrRouteIfIndex(request->requestvb->type,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTETYPE:
+ {
+ int ret =
+ check_ipCidrRouteType(request->requestvb->type,
+ (long *) request->requestvb->
+ val.string,
+ request->requestvb->val_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEINFO:
+ {
+ int ret =
+ check_ipCidrRouteInfo(request->requestvb->type,
+ (oid *) request->requestvb->
+ val.string,
+ request->requestvb->val_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTENEXTHOPAS:
+ {
+ int ret =
+ check_ipCidrRouteNextHopAS(request->requestvb->
+ type,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC1:
+ {
+ int ret =
+ check_ipCidrRouteMetric1(request->requestvb->type,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC2:
+ {
+ int ret =
+ check_ipCidrRouteMetric2(request->requestvb->type,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC3:
+ {
+ int ret =
+ check_ipCidrRouteMetric3(request->requestvb->type,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC4:
+ {
+ int ret =
+ check_ipCidrRouteMetric4(request->requestvb->type,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC5:
+ {
+ int ret =
+ check_ipCidrRouteMetric5(request->requestvb->type,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTESTATUS:
+ {
+ int ret =
+ check_ipCidrRouteStatus(request->requestvb->type,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret != 0) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ default:
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_NOTWRITABLE);
+ break;
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /** save a variable copy */
+ switch (table_info->colnum) {
+ case COLUMN_IPCIDRROUTEIFINDEX:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui;
+ retval =
+ get_ipCidrRouteIfIndex(data_context, &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTETYPE:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui;
+ retval =
+ get_ipCidrRouteType(data_context, &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEINFO:
+ {
+ oid *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui;
+ retval =
+ get_ipCidrRouteInfo(data_context, &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTENEXTHOPAS:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui;
+ retval =
+ get_ipCidrRouteNextHopAS(data_context,
+ &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC1:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui;
+ retval =
+ get_ipCidrRouteMetric1(data_context, &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC2:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui;
+ retval =
+ get_ipCidrRouteMetric2(data_context, &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC3:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui;
+ retval =
+ get_ipCidrRouteMetric3(data_context, &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC4:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui;
+ retval =
+ get_ipCidrRouteMetric4(data_context, &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC5:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui;
+ retval =
+ get_ipCidrRouteMetric5(data_context, &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTESTATUS:
+ {
+ long *retval;
+ size_t retval_len = 0;
+ struct undoInfo *ui;
+ retval =
+ get_ipCidrRouteStatus(data_context, &retval_len);
+ if (retval) {
+ ui = SNMP_MALLOC_STRUCT(undoInfo);
+ ui->len = retval_len;
+ memdup((u_char **) & ui->ptr,
+ (u_char *) retval, ui->len);
+ netsnmp_oid_stash_add_data(&undoStorage,
+ suffix, suffix_len, ui);
+ }
+ }
+ break;
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /** Forget undo data, if exists */
+ netsnmp_oid_stash_free(&undoStorage, free_undoInfo);
+ break;
+
+ case MODE_SET_ACTION:
+ /** save a variable copy */
+ switch (table_info->colnum) {
+ case COLUMN_IPCIDRROUTEIFINDEX:
+ {
+ int ret =
+ set_ipCidrRouteIfIndex(data_context,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTETYPE:
+ {
+ int ret = set_ipCidrRouteType(data_context,
+ (long *)
+ request->
+ requestvb->
+ val.string,
+ request->
+ requestvb->
+ val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEINFO:
+ {
+ int ret = set_ipCidrRouteInfo(data_context,
+ (oid *)
+ request->
+ requestvb->
+ val.string,
+ request->
+ requestvb->
+ val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTENEXTHOPAS:
+ {
+ int ret =
+ set_ipCidrRouteNextHopAS(data_context,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC1:
+ {
+ int ret =
+ set_ipCidrRouteMetric1(data_context,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC2:
+ {
+ int ret =
+ set_ipCidrRouteMetric2(data_context,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC3:
+ {
+ int ret =
+ set_ipCidrRouteMetric3(data_context,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC4:
+ {
+ int ret =
+ set_ipCidrRouteMetric4(data_context,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC5:
+ {
+ int ret =
+ set_ipCidrRouteMetric5(data_context,
+ (long *) request->
+ requestvb->val.string,
+ request->requestvb->
+ val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTESTATUS:
+ {
+ int ret =
+ set_ipCidrRouteStatus(data_context,
+ (long *) request->requestvb->
+ val.string,
+ request->requestvb->val_len);
+ if (ret) {
+ netsnmp_set_request_error(reqinfo, requests, ret);
+ }
+ }
+ break;
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /** answers were all good. Forget undo data */
+ netsnmp_oid_stash_free(&undoStorage, free_undoInfo);
+ /** mib2cXXX: call commit hook */
+ break;
+
+ case MODE_SET_UNDO:
+ /** save a variable copy */
+ switch (table_info->colnum) {
+ case COLUMN_IPCIDRROUTEIFINDEX:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_ipCidrRouteIfIndex(data_context, ui->ptr,
+ ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTETYPE:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_ipCidrRouteType(data_context, ui->ptr,
+ ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEINFO:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_ipCidrRouteInfo(data_context, ui->ptr,
+ ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTENEXTHOPAS:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_ipCidrRouteNextHopAS(data_context, ui->ptr,
+ ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC1:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_ipCidrRouteMetric1(data_context, ui->ptr,
+ ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC2:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_ipCidrRouteMetric2(data_context, ui->ptr,
+ ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC3:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_ipCidrRouteMetric3(data_context, ui->ptr,
+ ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC4:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_ipCidrRouteMetric4(data_context, ui->ptr,
+ ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTEMETRIC5:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_ipCidrRouteMetric5(data_context, ui->ptr,
+ ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ case COLUMN_IPCIDRROUTESTATUS:
+ {
+ int retval;
+ struct undoInfo *ui;
+ ui = netsnmp_oid_stash_get_data(undoStorage,
+ suffix, suffix_len);
+ retval =
+ set_ipCidrRouteStatus(data_context, ui->ptr,
+ ui->len);
+ if (retval) {
+ netsnmp_set_request_error(reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+ break;
+ }
+ /** mib2cXXX: remove cache! hard to do when serialized, however */
+ break;
+
+ default:
+ snmp_log(LOG_ERR,
+ "problem encountered in ipCidrRouteTable_handler: unsupported mode\n");
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable.h
new file mode 100644
index 0000000000..3c508af869
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable.h
@@ -0,0 +1,34 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.iterate_access.conf
+ */
+#ifndef IPCIDRROUTETABLE_H
+#define IPCIDRROUTETABLE_H
+
+/** other required module components */
+config_require(mibII/ipCidrRouteTable_access)
+config_require(mibII/ipCidrRouteTable_checkfns)
+config_add_mib(IP-FORWARD-MIB)
+config_add_mib(IANA-RTPROTO-MIB)
+
+/*
+ * function declarations
+ */
+void init_ipCidrRouteTable(void);
+void initialize_table_ipCidrRouteTable(void);
+Netsnmp_Node_Handler ipCidrRouteTable_handler;
+
+Netsnmp_First_Data_Point ipCidrRouteTable_get_first_data_point;
+Netsnmp_Next_Data_Point ipCidrRouteTable_get_next_data_point;
+
+/*
+ * column number definitions for table ipCidrRouteTable
+ */
+#include "ipCidrRouteTable_columns.h"
+
+/*
+ * enum definions
+ */
+#include "ipCidrRouteTable_enums.h"
+
+#endif /** IPCIDRROUTETABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_access.c
new file mode 100644
index 0000000000..0a91a50c56
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_access.c
@@ -0,0 +1,258 @@
+
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.access_functions.conf$
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include "route_headers.h"
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "ipCidrRouteTable_access.h"
+#include "ipCidrRouteTable_enums.h"
+
+/*
+ * NOTE:
+ * - these GET routines MUST return freshly malloced data and must not
+ * return a pointer which is still in use somewhere else.
+ * - these SET routines must copy the incoming data and can not take
+ * ownership of the memory passed in by the val pointer.
+ */
+
+/** a global static we'll make use of a lot to map to the right
+ datatype to return (which for SNMP integer's is always a long). */
+static u_long long_ret;
+
+
+/*
+ * User-defined data access functions for data in table ipCidrRouteTable
+ */
+
+u_long *
+get_ipCidrRouteDest(void *data_context, size_t * ret_len)
+{
+ RTENTRY *ourroute = (RTENTRY *) data_context;
+ long_ret = ((struct sockaddr_in *) (&ourroute->rt_dst))->sin_addr.s_addr;
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+}
+
+u_long *
+get_ipCidrRouteMask(void *data_context, size_t * ret_len)
+{
+ RTENTRY *ourroute = (RTENTRY *) data_context;
+ long_ret = ((struct sockaddr_in *) (&ourroute->rt_genmask))->sin_addr.s_addr;
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+}
+
+long *
+get_ipCidrRouteTos(void *data_context, size_t * ret_len)
+{
+ RTENTRY *ourroute = (RTENTRY *) data_context;
+ long_ret = ourroute->rt_tos;
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+}
+
+u_long *
+get_ipCidrRouteNextHop(void *data_context, size_t * ret_len)
+{
+ RTENTRY *ourroute = (RTENTRY *) data_context;
+ long_ret = ((struct sockaddr_in *) (&ourroute->rt_gateway))->sin_addr.s_addr;
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+}
+
+long *
+get_ipCidrRouteIfIndex(void *data_context, size_t * ret_len)
+{
+ RTENTRY *ourroute = (RTENTRY *) data_context;
+ long_ret = ourroute->rt_unit;
+ *ret_len = sizeof(long_ret);;
+ return &long_ret;
+}
+
+int
+set_ipCidrRouteIfIndex(void *data_context, long *val, size_t val_len)
+{
+ return SNMP_ERR_NOERROR; /** XXX: change if an error occurs */
+}
+
+long *
+get_ipCidrRouteType(void *data_context, size_t * ret_len)
+{
+ RTENTRY *ourroute = (RTENTRY *) data_context;
+
+ if (ourroute->rt_flags & RTF_UP) {
+ if (ourroute->rt_flags & RTF_GATEWAY) {
+ long_ret = IPCIDRROUTETYPE_REMOTE;
+ } else {
+ long_ret = IPCIDRROUTETYPE_LOCAL;
+ }
+ } else {
+ long_ret = IPCIDRROUTETYPE_REJECT;
+ }
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+
+}
+
+int
+set_ipCidrRouteType(void *data_context, long *val, size_t val_len)
+{
+ return SNMP_ERR_NOERROR; /** XXX: change if an error occurs */
+}
+
+long *
+get_ipCidrRouteProto(void *data_context, size_t * ret_len)
+{
+ RTENTRY *ourroute = (RTENTRY *) data_context;
+ /* XXX: this is wacked */
+ long_ret = (ourroute->rt_flags & RTF_DYNAMIC)
+ ? IPCIDRROUTEPROTO_ICMP : IPCIDRROUTEPROTO_LOCAL;
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+}
+
+long *
+get_ipCidrRouteAge(void *data_context, size_t * ret_len)
+{
+ long_ret = 0; /* we don't know, and defval = 0 */
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+}
+
+oid *
+get_ipCidrRouteInfo(void *data_context, size_t * ret_len)
+{
+ static oid zerodotzero[2] = { 0, 0 };
+ *ret_len = sizeof(zerodotzero);
+ return zerodotzero;
+}
+
+int
+set_ipCidrRouteInfo(void *data_context, oid * val, size_t val_len)
+{
+ return SNMP_ERR_NOERROR; /** XXX: change if an error occurs */
+}
+
+/** XXX: return a data pointer to the data for the ipCidrRouteNextHopAS column and set
+ ret_len to its proper size in bytes. */
+long *
+get_ipCidrRouteNextHopAS(void *data_context, size_t * ret_len)
+{
+ long_ret = 0; /* we don't know, and defval = 0 */
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+}
+
+int
+set_ipCidrRouteNextHopAS(void *data_context, long *val, size_t val_len)
+{
+ return SNMP_ERR_NOERROR; /** XXX: change if an error occurs */
+}
+
+long *
+get_ipCidrRouteMetric1(void *data_context, size_t * ret_len)
+{
+ RTENTRY *ourroute = (RTENTRY *) data_context;
+ long_ret = ourroute->rt_metric;
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+}
+
+int
+set_ipCidrRouteMetric1(void *data_context, long *val, size_t val_len)
+{
+ return SNMP_ERR_NOERROR; /** XXX: change if an error occurs */
+}
+
+long *
+get_ipCidrRouteMetric2(void *data_context, size_t * ret_len)
+{
+ long_ret = -1; /* unused */
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+}
+
+ /** XXX: Set the value of the ipCidrRouteMetric2 column and return
+ SNMPERR_SUCCESS on SNMPERR_GENERR on failure. */
+int
+set_ipCidrRouteMetric2(void *data_context, long *val, size_t val_len)
+{
+ return SNMP_ERR_NOERROR; /** XXX: change if an error occurs */
+}
+
+/** XXX: return a data pointer to the data for the ipCidrRouteMetric3 column and set
+ ret_len to its proper size in bytes. */
+long *
+get_ipCidrRouteMetric3(void *data_context, size_t * ret_len)
+{
+ long_ret = -1; /* unused */
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+}
+
+ /** XXX: Set the value of the ipCidrRouteMetric3 column and return
+ SNMPERR_SUCCESS on SNMPERR_GENERR on failure. */
+int
+set_ipCidrRouteMetric3(void *data_context, long *val, size_t val_len)
+{
+ return SNMP_ERR_NOERROR; /** XXX: change if an error occurs */
+}
+
+/** XXX: return a data pointer to the data for the ipCidrRouteMetric4 column and set
+ ret_len to its proper size in bytes. */
+long *
+get_ipCidrRouteMetric4(void *data_context, size_t * ret_len)
+{
+ long_ret = -1; /* unused */
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+}
+
+ /** XXX: Set the value of the ipCidrRouteMetric4 column and return
+ SNMPERR_SUCCESS on SNMPERR_GENERR on failure. */
+int
+set_ipCidrRouteMetric4(void *data_context, long *val, size_t val_len)
+{
+ return SNMP_ERR_NOERROR; /** XXX: change if an error occurs */
+}
+
+/** XXX: return a data pointer to the data for the ipCidrRouteMetric5 column and set
+ ret_len to its proper size in bytes. */
+long *
+get_ipCidrRouteMetric5(void *data_context, size_t * ret_len)
+{
+ long_ret = -1; /* unused */
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+}
+
+ /** XXX: Set the value of the ipCidrRouteMetric5 column and return
+ SNMPERR_SUCCESS on SNMPERR_GENERR on failure. */
+int
+set_ipCidrRouteMetric5(void *data_context, long *val, size_t val_len)
+{
+ return SNMP_ERR_NOERROR; /** XXX: change if an error occurs */
+}
+
+/** XXX: return a data pointer to the data for the ipCidrRouteStatus column and set
+ ret_len to its proper size in bytes. */
+long *
+get_ipCidrRouteStatus(void *data_context, size_t * ret_len)
+{
+ /* the only value supported for real routes */
+ long_ret = IPCIDRROUTESTATUS_ACTIVE;
+ *ret_len = sizeof(long_ret);
+ return &long_ret;
+}
+
+ /** XXX: Set the value of the ipCidrRouteStatus column and return
+ SNMPERR_SUCCESS on SNMPERR_GENERR on failure. */
+int
+set_ipCidrRouteStatus(void *data_context, long *val, size_t val_len)
+{
+ return SNMP_ERR_NOERROR; /** XXX: change if an error occurs */
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_access.h
new file mode 100644
index 0000000000..1ce2c1d493
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_access.h
@@ -0,0 +1,57 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.access_functions.conf $
+ */
+#ifndef IPCIDRROUTETABLE_ACCESS_H
+#define IPCIDRROUTETABLE_ACCESS_H
+
+/*
+ * User-defined data access functions for data in table ipCidrRouteTable
+ */
+u_long *get_ipCidrRouteDest(void *data_context, size_t * ret_len);
+u_long *get_ipCidrRouteMask(void *data_context, size_t * ret_len);
+long *get_ipCidrRouteTos(void *data_context, size_t * ret_len);
+u_long *get_ipCidrRouteNextHop(void *data_context,
+ size_t * ret_len);
+long *get_ipCidrRouteIfIndex(void *data_context,
+ size_t * ret_len);
+int set_ipCidrRouteIfIndex(void *data_context, long *val,
+ size_t val_len);
+long *get_ipCidrRouteType(void *data_context, size_t * ret_len);
+int set_ipCidrRouteType(void *data_context, long *val,
+ size_t val_len);
+long *get_ipCidrRouteProto(void *data_context, size_t * ret_len);
+long *get_ipCidrRouteAge(void *data_context, size_t * ret_len);
+oid *get_ipCidrRouteInfo(void *data_context, size_t * ret_len);
+int set_ipCidrRouteInfo(void *data_context, oid * val,
+ size_t val_len);
+long *get_ipCidrRouteNextHopAS(void *data_context,
+ size_t * ret_len);
+int set_ipCidrRouteNextHopAS(void *data_context, long *val,
+ size_t val_len);
+long *get_ipCidrRouteMetric1(void *data_context,
+ size_t * ret_len);
+int set_ipCidrRouteMetric1(void *data_context, long *val,
+ size_t val_len);
+long *get_ipCidrRouteMetric2(void *data_context,
+ size_t * ret_len);
+int set_ipCidrRouteMetric2(void *data_context, long *val,
+ size_t val_len);
+long *get_ipCidrRouteMetric3(void *data_context,
+ size_t * ret_len);
+int set_ipCidrRouteMetric3(void *data_context, long *val,
+ size_t val_len);
+long *get_ipCidrRouteMetric4(void *data_context,
+ size_t * ret_len);
+int set_ipCidrRouteMetric4(void *data_context, long *val,
+ size_t val_len);
+long *get_ipCidrRouteMetric5(void *data_context,
+ size_t * ret_len);
+int set_ipCidrRouteMetric5(void *data_context, long *val,
+ size_t val_len);
+long *get_ipCidrRouteStatus(void *data_context,
+ size_t * ret_len);
+int set_ipCidrRouteStatus(void *data_context, long *val,
+ size_t val_len);
+
+#endif /* IPCIDRROUTETABLE_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_checkfns.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_checkfns.c
new file mode 100644
index 0000000000..f307686754
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_checkfns.c
@@ -0,0 +1,267 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.check_values.conf,v 1.1 2003/02/06 06:07:12 hardaker Exp $
+ */
+
+/*
+ * standard headers
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include "ipCidrRouteTable_checkfns.h"
+#include "ipCidrRouteTable_enums.h"
+
+/** Decides if an incoming value for the ipCidrRouteIfIndex mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_ipCidrRouteIfIndex(int type, long *val, size_t val_len)
+{
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_INTEGER)
+ return SNMP_ERR_WRONGTYPE;
+
+
+ /** looks ok */
+ return SNMP_ERR_NOERROR;
+}
+
+/** Decides if an incoming value for the ipCidrRouteType mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_ipCidrRouteType(int type, long *val, size_t val_len)
+{
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_INTEGER)
+ return SNMP_ERR_WRONGTYPE;
+
+ /** Check the enums. Legal values continue. */
+ switch (*val) {
+ case IPCIDRROUTETYPE_OTHER:
+ case IPCIDRROUTETYPE_REJECT:
+ case IPCIDRROUTETYPE_LOCAL:
+ case IPCIDRROUTETYPE_REMOTE:
+ break;
+
+ /** not a legal enum value. return an error */
+ default:
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+
+ /** looks ok */
+ return SNMP_ERR_NOERROR;
+}
+
+/** Decides if an incoming value for the ipCidrRouteInfo mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_ipCidrRouteInfo(int type, oid * val, size_t val_len)
+{
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_OBJECT_ID)
+ return SNMP_ERR_WRONGTYPE;
+
+ /** looks ok */
+ return SNMP_ERR_NOERROR;
+}
+
+/** Decides if an incoming value for the ipCidrRouteNextHopAS mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_ipCidrRouteNextHopAS(int type, long *val, size_t val_len)
+{
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_INTEGER)
+ return SNMP_ERR_WRONGTYPE;
+
+
+ /** looks ok */
+ return SNMP_ERR_NOERROR;
+}
+
+/** Decides if an incoming value for the ipCidrRouteMetric1 mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_ipCidrRouteMetric1(int type, long *val, size_t val_len)
+{
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_INTEGER)
+ return SNMP_ERR_WRONGTYPE;
+
+
+ /** looks ok */
+ return SNMP_ERR_NOERROR;
+}
+
+/** Decides if an incoming value for the ipCidrRouteMetric2 mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_ipCidrRouteMetric2(int type, long *val, size_t val_len)
+{
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_INTEGER)
+ return SNMP_ERR_WRONGTYPE;
+
+
+ /** looks ok */
+ return SNMP_ERR_NOERROR;
+}
+
+/** Decides if an incoming value for the ipCidrRouteMetric3 mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_ipCidrRouteMetric3(int type, long *val, size_t val_len)
+{
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_INTEGER)
+ return SNMP_ERR_WRONGTYPE;
+
+
+ /** looks ok */
+ return SNMP_ERR_NOERROR;
+}
+
+/** Decides if an incoming value for the ipCidrRouteMetric4 mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_ipCidrRouteMetric4(int type, long *val, size_t val_len)
+{
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_INTEGER)
+ return SNMP_ERR_WRONGTYPE;
+
+
+ /** looks ok */
+ return SNMP_ERR_NOERROR;
+}
+
+/** Decides if an incoming value for the ipCidrRouteMetric5 mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_ipCidrRouteMetric5(int type, long *val, size_t val_len)
+{
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_INTEGER)
+ return SNMP_ERR_WRONGTYPE;
+
+
+ /** looks ok */
+ return SNMP_ERR_NOERROR;
+}
+
+/** Decides if an incoming value for the ipCidrRouteStatus mib node is legal.
+ * @param type The incoming data type.
+ * @param val The value to be checked.
+ * @param val_len The length of data stored in val (in bytes).
+ * @return 0 if the incoming value is legal, an SNMP error code otherwise.
+ */
+int
+check_ipCidrRouteStatus(int type, long *val, size_t val_len)
+{
+
+ /** Check to see that we were called legally */
+ if (!val)
+ return SNMP_ERR_GENERR;
+
+ /** Check the incoming type for correctness */
+ if (type != ASN_INTEGER)
+ return SNMP_ERR_WRONGTYPE;
+
+ /** Check the enums. Legal values continue. */
+ switch (*val) {
+ case IPCIDRROUTESTATUS_ACTIVE:
+ case IPCIDRROUTESTATUS_NOTINSERVICE:
+ case IPCIDRROUTESTATUS_NOTREADY:
+ case IPCIDRROUTESTATUS_CREATEANDGO:
+ case IPCIDRROUTESTATUS_CREATEANDWAIT:
+ case IPCIDRROUTESTATUS_DESTROY:
+ break;
+
+ /** not a legal enum value. return an error */
+ default:
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+
+ /** looks ok */
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_checkfns.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_checkfns.h
new file mode 100644
index 0000000000..187611a0e8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_checkfns.h
@@ -0,0 +1,33 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.check_values.conf $
+ */
+#ifndef IPCIDRROUTETABLE_CHECKFNS_H
+#define IPCIDRROUTETABLE_CHECKFNS_H
+
+/*
+ * these functions are designed to check incoming values for
+ * columns in the ipCidrRouteTable table for legality with respect to
+ * datatype and value.
+ */
+
+int check_ipCidrRouteIfIndex(int type, long *val,
+ size_t val_len);
+int check_ipCidrRouteType(int type, long *val, size_t val_len);
+int check_ipCidrRouteInfo(int type, oid * val, size_t val_len);
+int check_ipCidrRouteNextHopAS(int type, long *val,
+ size_t val_len);
+int check_ipCidrRouteMetric1(int type, long *val,
+ size_t val_len);
+int check_ipCidrRouteMetric2(int type, long *val,
+ size_t val_len);
+int check_ipCidrRouteMetric3(int type, long *val,
+ size_t val_len);
+int check_ipCidrRouteMetric4(int type, long *val,
+ size_t val_len);
+int check_ipCidrRouteMetric5(int type, long *val,
+ size_t val_len);
+int check_ipCidrRouteStatus(int type, long *val,
+ size_t val_len);
+
+#endif /* IPCIDRROUTETABLE_CHECKFNS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_columns.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_columns.h
new file mode 100644
index 0000000000..68c6b625e0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_columns.h
@@ -0,0 +1,27 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.column_defines.conf,v 5.1 2002/05/08 05:42:47 hardaker Exp $
+ */
+#ifndef IPCIDRROUTETABLE_COLUMNS_H
+#define IPCIDRROUTETABLE_COLUMNS_H
+
+/*
+ * column number definitions for table ipCidrRouteTable
+ */
+#define COLUMN_IPCIDRROUTEDEST 1
+#define COLUMN_IPCIDRROUTEMASK 2
+#define COLUMN_IPCIDRROUTETOS 3
+#define COLUMN_IPCIDRROUTENEXTHOP 4
+#define COLUMN_IPCIDRROUTEIFINDEX 5
+#define COLUMN_IPCIDRROUTETYPE 6
+#define COLUMN_IPCIDRROUTEPROTO 7
+#define COLUMN_IPCIDRROUTEAGE 8
+#define COLUMN_IPCIDRROUTEINFO 9
+#define COLUMN_IPCIDRROUTENEXTHOPAS 10
+#define COLUMN_IPCIDRROUTEMETRIC1 11
+#define COLUMN_IPCIDRROUTEMETRIC2 12
+#define COLUMN_IPCIDRROUTEMETRIC3 13
+#define COLUMN_IPCIDRROUTEMETRIC4 14
+#define COLUMN_IPCIDRROUTEMETRIC5 15
+#define COLUMN_IPCIDRROUTESTATUS 16
+#endif /* IPCIDRROUTETABLE_COLUMNS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_enums.h
new file mode 100644
index 0000000000..10039f7cbe
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipCidrRouteTable_enums.h
@@ -0,0 +1,46 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.column_enums.conf,v 5.1 2002/05/08 05:42:47 hardaker Exp $
+ */
+#ifndef IPCIDRROUTETABLE_ENUMS_H
+#define IPCIDRROUTETABLE_ENUMS_H
+
+/*
+ * enums for column ipCidrRouteType
+ */
+#define IPCIDRROUTETYPE_OTHER 1
+#define IPCIDRROUTETYPE_REJECT 2
+#define IPCIDRROUTETYPE_LOCAL 3
+#define IPCIDRROUTETYPE_REMOTE 4
+
+/*
+ * enums for column ipCidrRouteProto
+ */
+#define IPCIDRROUTEPROTO_OTHER 1
+#define IPCIDRROUTEPROTO_LOCAL 2
+#define IPCIDRROUTEPROTO_NETMGMT 3
+#define IPCIDRROUTEPROTO_ICMP 4
+#define IPCIDRROUTEPROTO_EGP 5
+#define IPCIDRROUTEPROTO_GGP 6
+#define IPCIDRROUTEPROTO_HELLO 7
+#define IPCIDRROUTEPROTO_RIP 8
+#define IPCIDRROUTEPROTO_ISIS 9
+#define IPCIDRROUTEPROTO_ESIS 10
+#define IPCIDRROUTEPROTO_CISCOIGRP 11
+#define IPCIDRROUTEPROTO_BBNSPFIGP 12
+#define IPCIDRROUTEPROTO_OSPF 13
+#define IPCIDRROUTEPROTO_BGP 14
+#define IPCIDRROUTEPROTO_IDPR 15
+#define IPCIDRROUTEPROTO_CISCOEIGRP 16
+
+/*
+ * enums for column ipCidrRouteStatus
+ */
+#define IPCIDRROUTESTATUS_ACTIVE 1
+#define IPCIDRROUTESTATUS_NOTINSERVICE 2
+#define IPCIDRROUTESTATUS_NOTREADY 3
+#define IPCIDRROUTESTATUS_CREATEANDGO 4
+#define IPCIDRROUTESTATUS_CREATEANDWAIT 5
+#define IPCIDRROUTESTATUS_DESTROY 6
+
+#endif /* IPCIDRROUTETABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipv6.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipv6.c
new file mode 100644
index 0000000000..1e24989fa9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipv6.c
@@ -0,0 +1,2148 @@
+/*
+ * IP MIB group implementation - ipv6.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#if defined(IFNET_NEEDS_KERNEL) && !defined(_KERNEL)
+#define _KERNEL 1
+#define _I_DEFINED_KERNEL
+#endif
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/socket.h>
+#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+# if HAVE_SYS_SOCKETVAR_H
+# include <sys/socketvar.h>
+# endif
+#endif
+
+#if STDC_HEADERS
+#include <string.h>
+#include <stdlib.h>
+#else
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_SYS_SYSCTL_H
+#ifdef _I_DEFINED_KERNEL
+#undef _KERNEL
+#endif
+#include <sys/sysctl.h>
+#ifdef _I_DEFINED_KERNEL
+#define _KERNEL 1
+#endif
+#endif
+#if HAVE_SYS_SYSMP_H
+#include <sys/sysmp.h>
+#endif
+#if HAVE_SYS_TCPIPSTATS_H
+#include <sys/tcpipstats.h>
+#endif
+#include <net/if.h>
+#if HAVE_NET_IF_VAR_H
+#include <net/if_var.h>
+#endif
+#if HAVE_NET_IF_DL_H
+#include <net/if_dl.h>
+#endif
+#ifdef HAVE_NET_IF_MIB_H
+#include <net/if_mib.h>
+#endif
+#ifdef _I_DEFINED_KERNEL
+#undef _KERNEL
+#endif
+#include <netinet/in_systm.h>
+#if HAVE_SYS_HASHING_H
+#include <sys/hashing.h>
+#endif
+#if HAVE_SYS_SOCKIO_H
+#include <sys/sockio.h>
+#endif
+#if HAVE_NETINET6_IN6_VAR_H
+#include <netinet6/in6_var.h>
+#endif
+#include <netinet/ip6.h>
+#if HAVE_NETINET_IP_VAR_H
+# include <netinet/ip_var.h>
+#endif
+#if HAVE_NETINET6_IP6_VAR_H
+# include <netinet6/ip6_var.h>
+#endif
+#include <net/route.h>
+#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+# if HAVE_NETINET_IN_PCB_H
+# include <netinet/in_pcb.h>
+# endif
+#endif
+#if HAVE_NETINET6_IN6_PCB_H
+# include <netinet6/in6_pcb.h>
+#endif
+#if HAVE_NETINET6_TCP6_H
+# define TCP6
+#endif
+#ifndef TCP6
+# if HAVE_NETINET_TCP_H
+# include <netinet/tcp.h>
+# endif
+# if HAVE_NETINET_TCP_TIMER_H
+# include <netinet/tcp_timer.h>
+# endif
+# if HAVE_NETINET_TCP_VAR_H
+# include <netinet/tcp_var.h>
+# endif
+# if HAVE_NETINET_TCP_FSM_H
+# include <netinet/tcp_fsm.h>
+# endif
+#endif
+#if HAVE_NETINET6_TCP6_H
+# include <netinet6/tcp6.h>
+#endif
+#if HAVE_NETINET6_TCP6_TIMER_H
+#include <netinet6/tcp6_timer.h>
+#endif
+#if HAVE_NETINET6_TCP6_VAR_H
+#include <netinet6/tcp6_var.h>
+#endif
+#if HAVE_NETINET6_TCP6_FSM_H
+#include <netinet6/tcp6_fsm.h>
+#endif
+#if HAVE_INET_MIB2_H
+#include <inet/mib2.h>
+#endif
+#ifdef HAVE_SYSLOG_H
+#include <syslog.h>
+#endif
+
+#ifdef MIB_IPCOUNTER_SYMBOL
+#include <sys/mib.h>
+#include <netinet/mib_kern.h>
+#endif /* MIB_IPCOUNTER_SYMBOL */
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/auto_nlist.h>
+
+#include "kernel.h"
+#include "util_funcs.h"
+#include "ipv6.h"
+#include "interfaces.h"
+
+static int header_ipv6
+(register struct variable *, oid *, size_t *, int, size_t *,
+ WriteMethod **);
+static int header_ipv6_scan
+(register struct variable *, oid *, size_t *, int, size_t *,
+ WriteMethod **, int, int);
+static int if_initialize (void);
+static int if_maxifindex (void);
+static char *if_getname (int);
+#ifdef notused
+static int if_getindex (const char *);
+#endif
+
+struct variable3 ipv6_variables[] = {
+ {IPV6FORWARDING, ASN_INTEGER, RONLY, var_ipv6, 1, {1}},
+ {IPV6DEFAULTHOPLIMIT, ASN_INTEGER, RONLY, var_ipv6, 1, {2}},
+ {IPV6INTERFACES, ASN_GAUGE, RONLY, var_ipv6, 1, {3}},
+ {IPV6IFTBLLASTCHG, ASN_TIMETICKS, RONLY, var_ipv6, 1, {4}},
+
+ {IPV6IFDESCR, ASN_OCTET_STR, RONLY, var_ifv6Entry, 3, {5, 1, 2}},
+ {IPV6IFLOWLAYER, ASN_OBJECT_ID, RONLY, var_ifv6Entry, 3, {5, 1, 3}},
+ {IPV6IFEFFECTMTU, ASN_UNSIGNED, RONLY, var_ifv6Entry, 3, {5, 1, 4}},
+ {IPV6IFREASMMAXSIZE, ASN_UNSIGNED, RONLY, var_ifv6Entry, 3, {5, 1, 5}},
+
+ {IPV6IFTOKEN, ASN_OCTET_STR, RONLY, var_ifv6Entry, 3, {5, 1, 6}},
+ {IPV6IFTOKENLEN, ASN_INTEGER, RONLY, var_ifv6Entry, 3, {5, 1, 7}},
+ {IPV6IFPHYSADDRESS, ASN_OCTET_STR, RONLY, var_ifv6Entry, 3, {5, 1, 8}},
+ {IPV6IFADMSTATUS, ASN_INTEGER, RONLY, var_ifv6Entry, 3, {5, 1, 9}},
+ {IPV6IFOPERSTATUS, ASN_INTEGER, RONLY, var_ifv6Entry, 3, {5, 1, 10}},
+ {IPV6IFLASTCHANGE, ASN_TIMETICKS, RONLY, var_ifv6Entry, 3, {5, 1, 11}},
+
+ {IPV6IFSTATSINRCVS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 1}},
+ {IPV6IFSTATSINHDRERRS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 2}},
+ {IPV6IFSTATSTOOBIGERRS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 3}},
+ {IPV6IFSTATSINNOROUTES, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 4}},
+ {IPV6IFSTATSINADDRERRS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 5}},
+ {IPV6IFSTATSINUNKNOWPROTS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 6}},
+ {IPV6IFSTATSINTRUNCATPKTS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 7}},
+ {IPV6IFSTATSINDISCARDS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 8}},
+ {IPV6IFSTATSINDELIVERS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 9}},
+ {IPV6IFSTATSOUTFORWDATAS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 10}},
+ {IPV6IFSTATSOUTREQS, ASN_COUNTER, RONLY, var_ifv6Entry, 3, {6, 1, 11}},
+ {IPV6IFSTATSOUTDISCARDS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 12}},
+ {IPV6IFSTATSOUTFRAGOKS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 13}},
+ {IPV6IFSTATSOUTFRAGFAILS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 14}},
+ {IPV6IFSTATSOUTFRAGCREATS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 15}},
+ {IPV6IFSTATSOUTREASMREQS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 16}},
+ {IPV6IFSTATSOUTREASMOKS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 17}},
+ {IPV6IFSTATSOUTREASMFAILS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 18}},
+ {IPV6IFSTATSINMCASTPKTS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 19}},
+ {IPV6IFSTATSOUTMCASTPKTS, ASN_COUNTER, RONLY, var_ifv6Entry, 3,
+ {6, 1, 20}},
+
+#if 0
+ {IPV6ADDRPREFIXONLINKFLG, INTEGER, RONLY, var_ipv6AddrEntry, 3,
+ {7, 1, 3}},
+ {IPV6ADDRPREFIXAUTONOMOUSFLAG, INTEGER, RONLY, var_ipv6AddrEntry, 3,
+ {7, 1, 4}},
+ {IPV6ADDRPREFIXADVPREFERLIFE, UNSIGNED32, RONLY, var_ipv6AddrEntry, 3,
+ {7, 1, 5}},
+ {IPV6ADDRPREFIXVALIDLIFE, UNSIGNED32, RONLY, var_ipv6AddrEntry, 3,
+ {7, 1, 6}},
+
+ {IPV6ADDRPFXLEN, INTEGER, RONLY, var_ipv6AddrEntry, 3, {8, 1, 2}},
+ {IPV6ADDRTYPE, INTEGER, RONLY, var_ipv6AddrEntry, 3, {8, 1, 3}},
+ {IPV6ADDRANYCASTFLAG, INTEGER, RONLY, var_ipv6AddrEntry, 3, {8, 1, 4}},
+ {IPV6ADDRSTATUS, INTEGER, RONLY, var_ipv6AddrEntry, 3, {8, 1, 5}},
+
+ {IPV6ROUTEIFINDEX, IpV6IFINDEX, RONLY, var_ipv6RouteEntry, 3,
+ {11, 1, 4}},
+ {IPV6ROUTENEXTHOP, IpV6ADDRESS, RONLY, var_ipv6RouteEntry, 3,
+ {11, 1, 5}},
+ {IPV6ROUTETYPE, INTEGER, RONLY, var_ipv6RouteEntry, 3, {11, 1, 6}},
+ {IPV6ROUTEPROTOCOL, INTEGER, RONLY, var_ipv6RouteEntry, 3, {11, 1, 7}},
+ {IPV6ROUTEPOLICY, UNSIGNED32, RONLY, var_ipv6RouteEntry, 3,
+ {11, 1, 8}},
+ {IPV6ROUTEAGE, UNSIGNED32, RONLY, var_ipv6RouteEntry, 3, {11, 1, 9}},
+ {IPV6ROUTENEXTHOPRDI, UNSIGNED32, RONLY, var_ipv6RouteEntry, 3,
+ {11, 1, 10}},
+ {IPV6ROUTEMETRIC, UNSIGNED32, RONLY, var_ipv6RouteEntry, 3,
+ {11, 1, 11}},
+ {IPV6ROUTEWEIGHT, UNSIGNED32, RONLY, var_ipv6RouteEntry, 3,
+ {11, 1, 12}},
+ {IPV6ROUTEINFO, OBJID, RONLY, var_ipv6RouteEntry, 3, {11, 1, 13}},
+ {IPV6ROUTEVALID, INTEGER, RONLY, var_ipv6RouteEntry, 3, {11, 1, 14}},
+
+ {IPV6NETTOMEDIAPHYADDR, STRING, RONLY, var_ndpEntry, 3, {12, 1, 2}},
+ {IPV6NETTOMEDIATYPE, INTEGER, RONLY, var_ndpEntry, 3, {12, 1, 3}},
+ {IPV6NETTOMEDIASTATE, INTEGER, RONLY, var_ndpEntry, 3, {12, 1, 4}},
+ {IPV6NETTOMEDIALASTUPDATE, TIMETICKS, RONLY, var_ndpEntry, 3,
+ {12, 1, 5}},
+ {IPV6NETTOMEDIAVALID, INTEGER, RONLY, var_ndpEntry, 3, {12, 1, 6}},
+#endif
+};
+oid ipv6_variables_oid[] = { SNMP_OID_MIB2, 55, 1 };
+#if 0
+config_load_mib(MIB .55 .1, 8, ipv6_variables)
+ config_add_mib(IPV6 - TC)
+ config_add_mib(IPV6 - MIB)
+#endif
+ struct variable3 ipv6icmp_variables[] = {
+ {IPV6IFICMPINMSG, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 1}},
+ {IPV6IFICMPINERRORS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 2}},
+ {IPV6IFICMPINDSTUNRCHS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 3}},
+ {IPV6IFICMPINADMPROHS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 4}},
+ {IPV6IFICMPINTIMEXCDS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 5}},
+ {IPV6IFICMPINPARMPROBS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 6}},
+ {IPV6IFICMPINPKTTOOBIGS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 7}},
+ {IPV6IFICMPINECHOS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 8}},
+ {IPV6IFICMPINECHOREPS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 9}},
+ {IPV6IFICMPINRTRSLICITS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 10}},
+ {IPV6IFICMPINRTRADVS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 11}},
+ {IPV6IFICMPINNBRSLICITS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 12}},
+ {IPV6IFICMPINNBRADVS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 13}},
+ {IPV6IFICMPINREDIRECTS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 14}},
+ {IPV6IFICMPINGRPMEQERYS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 15}},
+ {IPV6IFICMPINGRPMERSPS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 16}},
+ {IPV6IFICMPINGRPMEREDCS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 17}},
+ {IPV6IFICMPOUTMSG, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 18}},
+ {IPV6IFICMPOUTERRORS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 19}},
+ {IPV6IFICMPOUTDSTUNRCHS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 20}},
+ {IPV6IFICMPOUTADMPROHS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 21}},
+ {IPV6IFICMPOUTTIMEXCDS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 22}},
+ {IPV6IFICMPOUTPARMPROBS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 23}},
+ {IPV6IFICMPOUTPKTTOOBIGS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 24}},
+ {IPV6IFICMPOUTECHOS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 25}},
+ {IPV6IFICMPOUTECHOREPS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 26}},
+ {IPV6IFICMPOUTRTRSLICITS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 27}},
+ {IPV6IFICMPOUTRTRADVS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 28}},
+ {IPV6IFICMPOUTNBRSLICITS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 29}},
+ {IPV6IFICMPOUTNBRADVS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 30}},
+ {IPV6IFICMPOUTREDIRECTS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 31}},
+ {IPV6IFICMPOUTGRPMEQERYS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 32}},
+ {IPV6IFICMPOUTGRPMERSPS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 33}},
+ {IPV6IFICMPOUTGRPMEREDCS, ASN_COUNTER, RONLY, var_icmpv6Entry, 3,
+ {1, 1, 34}}
+ };
+oid ipv6icmp_variables_oid[] = { 1, 3, 6, 1, 2, 1, 56, 1 };
+#if 0
+config_load_mib(MIB .56 .1, 8, ipv6icmp_variables)
+ config_add_mib(IPV6 - ICMP - MIB)
+#endif
+ struct variable2 ipv6udp_variables[] = {
+ {IPV6UDPLOCALADDRESS, ASN_OCTET_STR, RONLY, var_udp6, 2, {1, 1}},
+ {IPV6UDPLOCALPORT, ASN_INTEGER, RONLY, var_udp6, 2, {1, 2}},
+ {IPV6UDPIFINDEX, ASN_INTEGER, RONLY, var_udp6, 2, {1, 3}}
+ };
+oid ipv6udp_variables_oid[] = { 1, 3, 6, 1, 2, 1, 7, 6 };
+#if 0
+config_load_mib(1.3 .6 .1 .3 .87 .1, 7, ipv6udp_variables)
+ config_add_mib(IPV6 - UDP - MIB)
+#endif
+ struct variable2 ipv6tcp_variables[] = {
+ {IPV6TCPLOCALADDR, ASN_OCTET_STR, RONLY, var_tcp6, 2, {1, 1}},
+ {IPV6TCPLOCALPORT, ASN_INTEGER, RONLY, var_tcp6, 2, {1, 2}},
+ {IPV6TCPREMOTEADDR, ASN_OCTET_STR, RONLY, var_tcp6, 2, {1, 3}},
+ {IPV6TCPREMOTEPORT, ASN_INTEGER, RONLY, var_tcp6, 2, {1, 4}},
+ {IPV6TCPIFINDEX, ASN_INTEGER, RONLY, var_tcp6, 2, {1, 5}},
+ {IPV6TCPCONNSTATE, ASN_INTEGER, RONLY, var_tcp6, 2, {1, 6}},
+ };
+oid ipv6tcp_variables_oid[] = { 1, 3, 6, 1, 2, 1, 6, 16 };
+#if 0
+config_load_mib(1.3 .6 .1 .3 .86 .1, 7, ipv6tcp_variables)
+ config_add_mib(IPV6 - TCP - MIB)
+#endif
+ void
+ init_ipv6()
+{
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("mibII/ipv6", ipv6_variables, variable3,
+ ipv6_variables_oid);
+ REGISTER_MIB("mibII/icmpv6", ipv6icmp_variables, variable3,
+ ipv6icmp_variables_oid);
+ REGISTER_MIB("mibII/ipv6udp", ipv6udp_variables, variable2,
+ ipv6udp_variables_oid);
+ REGISTER_MIB("mibII/ipv6tcp", ipv6tcp_variables, variable2,
+ ipv6tcp_variables_oid);
+}
+
+static int
+header_ipv6(register struct variable *vp,
+ /*
+ * IN - pointer to variable entry that points here
+ */
+ oid * name, /* IN/OUT - input name requested, output name found */
+ size_t * length, /* IN/OUT - length of input and output oid's */
+ int exact, /* IN - TRUE if an exact match was requested */
+ size_t * var_len, /* OUT - length of variable or 0 if function returned */
+ WriteMethod ** write_method)
+{
+ oid newname[MAX_OID_LEN];
+ int result;
+
+ DEBUGMSGTL(("mibII/ipv6", "header_ipv6: "));
+ DEBUGMSGOID(("mibII/ipv6", name, *length));
+ DEBUGMSG(("mibII/ipv6", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+ newname[(int) vp->namelen] = 0;
+ result =
+ snmp_oid_compare(name, *length, newname, (int) vp->namelen + 1);
+ if ((exact && (result != 0)) || (!exact && (result >= 0)))
+ return (MATCH_FAILED);
+ memcpy((char *) name, (char *) newname,
+ ((int) vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+ return (MATCH_SUCCEEDED);
+}
+
+static int
+header_ipv6_scan(register struct variable *vp,
+ /*
+ * IN - pointer to variable entry that points here
+ */
+ oid * name, /* IN/OUT - input name requested, output name found */
+ size_t * length, /* IN/OUT - length of input and output oid's */
+ int exact, /* IN - TRUE if an exact match was requested */
+ size_t * var_len, /* OUT - length of variable or 0 if function returned */
+ WriteMethod ** write_method, int from, int to)
+{
+ oid newname[MAX_OID_LEN];
+ int result;
+ int i;
+
+ DEBUGMSGTL(("mibII/ipv6", "header_ipv6_scan: "));
+ DEBUGMSGOID(("mibII/ipv6", name, *length));
+ DEBUGMSG(("mibII/ipv6", " %d\n", exact));
+
+ memcpy((char *) newname, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+ for (i = from; i <= to; i++) {
+ newname[(int) vp->namelen] = i;
+ result =
+ snmp_oid_compare(name, *length, newname,
+ (int) vp->namelen + 1);
+ if (((exact && result == 0) || (!exact && result < 0))
+ && if_getname(i))
+ break;
+ }
+ if (to < i)
+ return (MATCH_FAILED);
+ memcpy((char *) name, (char *) newname,
+ ((int) vp->namelen + 1) * sizeof(oid));
+ *length = vp->namelen + 1;
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+ return (MATCH_SUCCEEDED);
+}
+
+static struct if_nameindex *ifnames = NULL;
+
+#ifdef linux
+static void linux_if_freenameindex(struct if_nameindex *);
+static struct if_nameindex *linux_if_nameindex(void);
+#endif
+
+static int
+if_initialize(void)
+{
+#ifndef HAVE_IF_NAMEINDEX
+ return -1;
+#else
+#ifndef linux
+ if (ifnames)
+ if_freenameindex(ifnames);
+ ifnames = if_nameindex();
+#else
+ if (ifnames)
+ linux_if_freenameindex(ifnames);
+ ifnames = linux_if_nameindex();
+#endif
+ if (!ifnames) {
+ ERROR_MSG("if_nameindex() failed");
+ return -1;
+ }
+ return 0;
+#endif
+}
+
+static int
+if_maxifindex(void)
+{
+#ifndef HAVE_IF_NAMEINDEX
+ return -1;
+#else
+ struct if_nameindex *p;
+ int max = 0;
+
+ if (!ifnames) {
+ if (if_initialize() < 0)
+ return -1;
+ }
+ for (p = ifnames; p && p->if_index; p++) {
+ if (max < p->if_index)
+ max = p->if_index;
+ }
+ return max;
+#endif
+}
+
+static int
+if_countifindex(void)
+{
+#ifndef HAVE_IF_NAMEINDEX
+ return -1;
+#else
+ struct if_nameindex *p;
+ int count = 0;
+
+ if (!ifnames) {
+ if (if_initialize() < 0)
+ return -1;
+ }
+ for (p = ifnames; p && p->if_index; p++) {
+ count++;
+ }
+ return count;
+#endif
+}
+
+static char *
+if_getname(int idx)
+{
+#ifndef HAVE_IF_NAMEINDEX
+ return NULL;
+#else
+ struct if_nameindex *p;
+
+ if (!ifnames) {
+ if (if_initialize() < 0)
+ return NULL;
+ }
+ for (p = ifnames; p && p->if_index; p++) {
+ if (p->if_index == idx)
+ return p->if_name;
+ }
+ return NULL;
+#endif
+}
+
+#ifdef notused
+static int
+if_getindex(const char *name)
+{
+#ifndef HAVE_IF_NAMEINDEX
+ return -1;
+#else
+ struct if_nameindex *p;
+
+ if (!ifnames) {
+ if (if_initialize() < 0)
+ return -1;
+ }
+ for (p = ifnames; p && p->if_index; p++) {
+ if (strcmp(name, p->if_name) == 0)
+ return p->if_index;
+ }
+ return -1;
+#endif
+}
+#endif /* notused */
+
+/*------------------------------------------------------------*/
+#ifndef linux
+/*
+ * KAME dependent part
+ */
+static int
+if_getifnet(int idx, struct ifnet *result)
+{
+ caddr_t q;
+ struct ifnet tmp;
+
+ if (!auto_nlist("ifnet", (char *) &q, sizeof(q)))
+ return -1;
+ while (q) {
+ if (!NETSNMP_KLOOKUP(q, (char *) &tmp, sizeof(tmp))) {
+ DEBUGMSGTL(("mibII/ipv6:if_getifnet", "klookup failed\n"));
+ return -1;
+ }
+ if (idx == tmp.if_index) {
+ memcpy(result, &tmp, sizeof(tmp));
+ return 0;
+ }
+#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+ q = (caddr_t) TAILQ_NEXT(&tmp, if_link);
+#else
+# if defined(__NetBSD__) || defined(__OpenBSD__)
+ q = (caddr_t) TAILQ_NEXT(&tmp, if_list);
+# else
+ q = (caddr_t) tmp.if_next;
+# endif
+#endif
+ }
+ return -1;
+}
+
+#if TRUST_IFLASTCHANGE /*untrustable value returned... */
+#ifdef HAVE_NET_IF_MIB_H
+#if defined(HAVE_SYS_SYSCTL_H) && defined(CTL_NET)
+static int
+if_getifmibdata(int idx, struct ifmibdata *result)
+{
+ int mib[6] = {
+ CTL_NET, PF_LINK, NETLINK_GENERIC, IFMIB_IFDATA, 0, IFDATA_GENERAL
+ };
+ size_t len;
+ struct ifmibdata tmp;
+
+ mib[4] = idx;
+ len = sizeof(struct ifmibdata);
+ if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), &tmp, &len, 0, 0) < 0)
+ return -1;
+ memcpy(result, &tmp, sizeof(tmp));
+ return 0;
+}
+#endif
+#endif /*HAVE_NET_IF_MIB_H */
+#endif /* TRUST_IFLASTCHANGE */
+
+#ifdef __KAME__
+#define IPV6_FORWARDING_SYMBOL "ip6_forwarding"
+#define IPV6_DEFHLIM_SYMBOL "ip6_defhlim"
+#endif
+
+u_char *
+var_ipv6(register struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ int i;
+
+ if (header_ipv6(vp, name, length, exact, var_len, write_method)
+ == MATCH_FAILED) {
+ return NULL;
+ }
+#if defined(HAVE_SYS_SYSCTL_H) && defined(CTL_NET)
+ /*
+ * try with sysctl routines
+ */
+ {
+ int name[] = { CTL_NET, PF_INET6, IPPROTO_IPV6, 0 };
+ const char *namestr = NULL;
+ int result;
+ size_t resultsiz;
+
+ resultsiz = sizeof(result);
+ switch (vp->magic) {
+ case IPV6FORWARDING:
+ name[3] = IPV6CTL_FORWARDING;
+ namestr = "IPV6CTL_FORWARDING";
+ if (sysctl
+ (name, sizeof(name) / sizeof(name[0]), &result, &resultsiz,
+ 0, 0) < 0) {
+ DEBUGMSGTL(("mibII/ipv6",
+ "sysctl(CTL_NET, PF_INET6, IPPROTO_IPV6, %s)\n",
+ namestr));
+ break;
+ } else {
+ if (result)
+ long_return = 1; /* GATEWAY */
+ else
+ long_return = 2; /* HOST */
+ return (u_char *) & long_return;
+ }
+ break;
+ case IPV6DEFAULTHOPLIMIT:
+ name[3] = IPV6CTL_DEFHLIM;
+ namestr = "IPV6CTL_DEFHLIM";
+ if (sysctl
+ (name, sizeof(name) / sizeof(name[0]), &result, &resultsiz,
+ 0, 0) < 0) {
+ DEBUGMSGTL(("mibII/ipv6",
+ "sysctl(CTL_NET, PF_INET6, IPPROTO_IPV6, %s)\n",
+ namestr));
+ break;
+ } else {
+ long_return = result;
+ return (u_char *) & long_return;
+ }
+ }
+ }
+#endif /* not (HAVE_SYS_SYSCTL_H && CTL_NET) */
+
+ /*
+ * try looking into the kernel variable
+ */
+ switch (vp->magic) {
+#ifdef IPV6_FORWARDING_SYMBOL
+ case IPV6FORWARDING:
+ if (auto_nlist(IPV6_FORWARDING_SYMBOL, (char *) &i, sizeof(i))) {
+ if (i)
+ long_return = 1;
+ /*GATEWAY*/
+ else
+ long_return = 2;
+ /*HOST*/ return (u_char *) & long_return;
+ }
+ break;
+#endif
+#ifdef IPV6_DEFHLIM_SYMBOL
+ case IPV6DEFAULTHOPLIMIT:
+ if (auto_nlist(IPV6_DEFHLIM_SYMBOL, (char *) &i, sizeof(i))) {
+ long_return = i;
+ return (u_char *) & long_return;
+ }
+ break;
+#endif
+ case IPV6INTERFACES:
+#ifdef HAVE_IF_NAMEINDEX
+ /*
+ * not really the right answer... we must count IPv6 capable
+ * interfaces only.
+ */
+ long_return = if_countifindex();
+ if (long_return < 0)
+ break;
+ return (u_char *) & long_return;
+#endif
+ break;
+#if 0
+ case IPV6IFTBLLASTCHG:
+ long_return = 0;
+ /*XXX*/ return (u_char *) & long_return;
+#endif
+ default:
+ break;
+ }
+ ERROR_MSG("");
+ return NULL;
+}
+
+u_char *
+var_ifv6Entry(register struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#ifndef HAVE_IF_NAMEINDEX
+ return NULL;
+#else
+ int interface;
+ int max;
+ char *p;
+
+ max = if_maxifindex();
+ if (max < 0)
+ return NULL;
+
+ if (header_ipv6_scan
+ (vp, name, length, exact, var_len, write_method, 1, max)
+ == MATCH_FAILED) {
+ return NULL;
+ }
+ interface = name[*length - 1];
+ DEBUGMSGTL(("mibII/ipv6", "interface: %d(%s)\n",
+ interface, if_getname(interface)));
+ if (interface > max)
+ return NULL;
+
+ switch (vp->magic) {
+ case IPV6IFDESCR:
+ p = if_getname(interface);
+ if (p) {
+ *var_len = strlen(p);
+ return p;
+ }
+ break;
+ case IPV6IFLOWLAYER:
+ /*
+ * should check if type, this is a hard one...
+ */
+ *var_len = nullOidLen;
+ return (u_char *) nullOid;
+ case IPV6IFEFFECTMTU:
+ {
+#if defined(SIOCGIFMTU) && !defined(__OpenBSD__)
+ struct ifreq ifr;
+ int s;
+
+ memset(&ifr, 0, sizeof(ifr));
+ ifr.ifr_addr.sa_family = AF_INET6;
+ strncpy(ifr.ifr_name, if_getname(interface),
+ sizeof(ifr.ifr_name));
+ if ((s = socket(ifr.ifr_addr.sa_family, SOCK_DGRAM, 0)) < 0)
+ break;
+ if (ioctl(s, SIOCGIFMTU, (caddr_t) & ifr) < 0) {
+ close(s);
+ break;
+ }
+ long_return = ifr.ifr_mtu;
+ close(s);
+ return (u_char *) & long_return;
+#else
+ break;
+#endif
+ }
+#if 0 /*not yet */
+ case IPV6IFREASMMAXSIZE:
+ /*
+ * I dunno what the spec means for this MIB
+ */
+ case IPV6IFTOKEN:
+ case IPV6IFTOKENLEN:
+#endif
+ case IPV6IFPHYSADDRESS:
+ {
+ struct ifnet ifnet;
+ struct ifaddr ifaddr;
+ static struct sockaddr_dl sdl;
+ caddr_t ifa;
+
+ if (if_getifnet(interface, &ifnet) < 0)
+ break;
+#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+ ifa = (caddr_t) TAILQ_FIRST(&ifnet.if_addrhead);
+#else
+# if defined(__NetBSD__) || defined(__OpenBSD__)
+ ifa = (caddr_t) TAILQ_FIRST(&ifnet.if_addrlist);
+# else
+ ifa = (caddr_t) ifnet.if_addrlist;
+# endif
+#endif
+ while (ifa) {
+ if (!NETSNMP_KLOOKUP(ifa, (char *) &ifaddr, sizeof(ifaddr))) {
+ DEBUGMSGTL(("mibII/ipv6:var_ipv6", "klookup failed\n"));
+ break;
+ }
+ if (!NETSNMP_KLOOKUP(ifaddr.ifa_addr,
+ (char *) &sdl, sizeof(sdl))) {
+ DEBUGMSGTL(("mibII/ipv6:var_ipv6", "klookup failed\n"));
+ break;
+ }
+ if (sdl.sdl_family == AF_LINK) {
+ if (sizeof(sdl.sdl_data) < sdl.sdl_nlen + sdl.sdl_alen) {
+ ERROR_MSG("sdl_alen too long for interface\n");
+ break;
+ }
+ *var_len = sdl.sdl_alen;
+ return (u_char *) (sdl.sdl_data + sdl.sdl_nlen);
+ }
+#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+ ifa = (caddr_t) TAILQ_NEXT(&ifaddr, ifa_link);
+#else
+# if defined(__NetBSD__) || defined(__OpenBSD__)
+ ifa = (caddr_t) TAILQ_NEXT(&ifaddr, ifa_list);
+# else
+ ifa = (caddr_t) ifaddr.ifa_next;
+# endif
+#endif
+ }
+
+ /*
+ * no physical address found
+ */
+ *var_len = 0;
+ return NULL;
+ }
+ case IPV6IFADMSTATUS:
+ {
+ struct ifnet ifnet;
+
+ if (if_getifnet(interface, &ifnet) < 0)
+ break;
+ long_return = (ifnet.if_flags & IFF_RUNNING) ? 1 : 2;
+ return (u_char *) & long_return;
+ }
+ case IPV6IFOPERSTATUS:
+ {
+ struct ifnet ifnet;
+
+ if (if_getifnet(interface, &ifnet) < 0)
+ break;
+ long_return = (ifnet.if_flags & IFF_UP) ? 1 : 2;
+ return (u_char *) & long_return;
+ }
+#if TRUST_IFLASTCHANGE /*untrustable value returned... */
+ case IPV6IFLASTCHANGE:
+ {
+ struct timeval lastchange;
+ struct timeval now;
+ int gotanswer;
+
+ gotanswer = 0;
+ lastchange.tv_sec = lastchange.tv_usec = 0;
+#ifdef HAVE_NET_IF_MIB_H
+ if (!gotanswer) {
+ struct ifmibdata ifmd;
+
+ if (if_getifmibdata(interface, &ifmd) < 0);
+ else {
+ lastchange = ifmd.ifmd_data.ifi_lastchange;
+ gotanswer++;
+ }
+ }
+#endif
+#ifdef STRUCT_IFNET_HAS_IF_LASTCHANGE_TV_SEC
+ if (!gotanswer) {
+ struct ifnet ifnet;
+
+ if (if_getifnet(interface, &ifnet) < 0);
+ else {
+ lastchange = ifnet.if_lastchange;
+ gotanswer++;
+ }
+ }
+#endif
+ DEBUGMSGTL(("mibII/ipv6", "lastchange = { %d.%06d }\n",
+ lastchange.tv_sec, lastchange.tv_usec));
+ if (lastchange.tv_sec == 0 && lastchange.tv_usec == 0)
+ long_return = 0;
+ else {
+ gettimeofday(&now, (struct timezone *) NULL);
+ long_return =
+ (u_long) ((now.tv_sec - lastchange.tv_sec) * 100);
+ long_return +=
+ (u_long) ((now.tv_usec - lastchange.tv_usec) / 10000);
+ }
+ return (u_char *) & long_return;
+ }
+#endif /* TRUST_IFLASTCHANGE */
+
+#ifdef SIOCGIFSTAT_IN6
+ case IPV6IFSTATSINRCVS:
+ case IPV6IFSTATSINHDRERRS:
+ case IPV6IFSTATSTOOBIGERRS:
+ case IPV6IFSTATSINNOROUTES:
+ case IPV6IFSTATSINADDRERRS:
+ case IPV6IFSTATSINUNKNOWPROTS:
+ case IPV6IFSTATSINTRUNCATPKTS:
+ case IPV6IFSTATSINDISCARDS:
+ case IPV6IFSTATSINDELIVERS:
+ case IPV6IFSTATSOUTFORWDATAS:
+ case IPV6IFSTATSOUTREQS:
+ case IPV6IFSTATSOUTDISCARDS:
+ case IPV6IFSTATSOUTFRAGOKS:
+ case IPV6IFSTATSOUTFRAGFAILS:
+ case IPV6IFSTATSOUTFRAGCREATS:
+ case IPV6IFSTATSOUTREASMREQS:
+ case IPV6IFSTATSOUTREASMOKS:
+ case IPV6IFSTATSOUTREASMFAILS:
+ case IPV6IFSTATSINMCASTPKTS:
+ case IPV6IFSTATSOUTMCASTPKTS:
+ {
+ struct in6_ifstat *ifs6;
+ struct in6_ifreq ifr;
+ int s;
+
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, if_getname(interface),
+ sizeof(ifr.ifr_name));
+ if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
+ break;
+ if (ioctl(s, SIOCGIFSTAT_IN6, (caddr_t) & ifr) < 0) {
+ close(s);
+ break;
+ }
+ close(s);
+ ifs6 = &ifr.ifr_ifru.ifru_stat;
+ switch (vp->magic) {
+ case IPV6IFSTATSINRCVS:
+ long_return = ifs6->ifs6_in_receive;
+ break;
+ case IPV6IFSTATSINHDRERRS:
+ long_return = ifs6->ifs6_in_hdrerr;
+ break;
+ case IPV6IFSTATSTOOBIGERRS:
+ long_return = ifs6->ifs6_in_toobig;
+ break;
+ case IPV6IFSTATSINNOROUTES:
+ long_return = ifs6->ifs6_in_noroute;
+ break;
+ case IPV6IFSTATSINADDRERRS:
+ long_return = ifs6->ifs6_in_addrerr;
+ break;
+ case IPV6IFSTATSINUNKNOWPROTS:
+ long_return = ifs6->ifs6_in_protounknown;
+ break;
+ case IPV6IFSTATSINTRUNCATPKTS:
+ long_return = ifs6->ifs6_in_truncated;
+ break;
+ case IPV6IFSTATSINDISCARDS:
+ long_return = ifs6->ifs6_in_discard;
+ break;
+ case IPV6IFSTATSINDELIVERS:
+ long_return = ifs6->ifs6_in_deliver;
+ break;
+ case IPV6IFSTATSOUTFORWDATAS:
+ long_return = ifs6->ifs6_out_forward;
+ break;
+ case IPV6IFSTATSOUTREQS:
+ long_return = ifs6->ifs6_out_request;
+ break;
+ case IPV6IFSTATSOUTDISCARDS:
+ long_return = ifs6->ifs6_out_discard;
+ break;
+ case IPV6IFSTATSOUTFRAGOKS:
+ long_return = ifs6->ifs6_out_fragok;
+ break;
+ case IPV6IFSTATSOUTFRAGFAILS:
+ long_return = ifs6->ifs6_out_fragfail;
+ break;
+ case IPV6IFSTATSOUTFRAGCREATS:
+ long_return = ifs6->ifs6_out_fragcreat;
+ break;
+ case IPV6IFSTATSOUTREASMREQS:
+ long_return = ifs6->ifs6_reass_reqd;
+ break;
+ case IPV6IFSTATSOUTREASMOKS:
+ long_return = ifs6->ifs6_reass_ok;
+ break;
+ case IPV6IFSTATSOUTREASMFAILS:
+ long_return = ifs6->ifs6_reass_fail;
+ break;
+ case IPV6IFSTATSINMCASTPKTS:
+ long_return = ifs6->ifs6_in_mcast;
+ break;
+ case IPV6IFSTATSOUTMCASTPKTS:
+ long_return = ifs6->ifs6_out_mcast;
+ break;
+ default:
+ return NULL;
+ }
+ return (u_char *) & long_return;
+ }
+#endif
+ default:
+ break;
+ }
+ return NULL;
+#endif
+}
+
+u_char *
+var_icmpv6Entry(register struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#ifndef HAVE_IF_NAMEINDEX
+ return NULL;
+#else
+ int interface;
+ int max;
+
+ max = if_maxifindex();
+ if (max < 0)
+ return NULL;
+
+ if (header_ipv6_scan
+ (vp, name, length, exact, var_len, write_method, 1, max)
+ == MATCH_FAILED) {
+ return NULL;
+ }
+ interface = name[*length - 1];
+ DEBUGMSGTL(("mibII/ipv6", "interface: %d(%s)\n",
+ interface, if_getname(interface)));
+ if (interface >= max)
+ return NULL;
+
+ switch (vp->magic) {
+#ifdef SIOCGIFSTAT_ICMP6
+ case IPV6IFICMPINMSG:
+ case IPV6IFICMPINERRORS:
+ case IPV6IFICMPINDSTUNRCHS:
+ case IPV6IFICMPINADMPROHS:
+ case IPV6IFICMPINTIMEXCDS:
+ case IPV6IFICMPINPARMPROBS:
+ case IPV6IFICMPINPKTTOOBIGS:
+ case IPV6IFICMPINECHOS:
+ case IPV6IFICMPINECHOREPS:
+ case IPV6IFICMPINRTRSLICITS:
+ case IPV6IFICMPINRTRADVS:
+ case IPV6IFICMPINNBRSLICITS:
+ case IPV6IFICMPINNBRADVS:
+ case IPV6IFICMPINREDIRECTS:
+ case IPV6IFICMPINGRPMEQERYS:
+ case IPV6IFICMPINGRPMERSPS:
+ case IPV6IFICMPINGRPMEREDCS:
+ case IPV6IFICMPOUTMSG:
+ case IPV6IFICMPOUTERRORS:
+ case IPV6IFICMPOUTDSTUNRCHS:
+ case IPV6IFICMPOUTADMPROHS:
+ case IPV6IFICMPOUTTIMEXCDS:
+ case IPV6IFICMPOUTPARMPROBS:
+ case IPV6IFICMPOUTPKTTOOBIGS:
+ case IPV6IFICMPOUTECHOS:
+ case IPV6IFICMPOUTECHOREPS:
+ case IPV6IFICMPOUTRTRSLICITS:
+ case IPV6IFICMPOUTRTRADVS:
+ case IPV6IFICMPOUTNBRSLICITS:
+ case IPV6IFICMPOUTNBRADVS:
+ case IPV6IFICMPOUTREDIRECTS:
+ case IPV6IFICMPOUTGRPMEQERYS:
+ case IPV6IFICMPOUTGRPMERSPS:
+ case IPV6IFICMPOUTGRPMEREDCS:
+ {
+ struct icmp6_ifstat *ifs6;
+ struct in6_ifreq ifr;
+ int s;
+
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, if_getname(interface),
+ sizeof(ifr.ifr_name));
+ if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
+ break;
+ if (ioctl(s, SIOCGIFSTAT_ICMP6, (caddr_t) & ifr) < 0) {
+ close(s);
+ break;
+ }
+ close(s);
+ ifs6 = &ifr.ifr_ifru.ifru_icmp6stat;
+ switch (vp->magic) {
+ case IPV6IFICMPINMSG:
+ long_return = ifs6->ifs6_in_msg;
+ break;
+ case IPV6IFICMPINERRORS:
+ long_return = ifs6->ifs6_in_error;
+ break;
+ case IPV6IFICMPINDSTUNRCHS:
+ long_return = ifs6->ifs6_in_dstunreach;
+ break;
+ case IPV6IFICMPINADMPROHS:
+ long_return = ifs6->ifs6_in_adminprohib;
+ break;
+ case IPV6IFICMPINTIMEXCDS:
+ long_return = ifs6->ifs6_in_timeexceed;
+ break;
+ case IPV6IFICMPINPARMPROBS:
+ long_return = ifs6->ifs6_in_paramprob;
+ break;
+ case IPV6IFICMPINPKTTOOBIGS:
+ long_return = ifs6->ifs6_in_pkttoobig;
+ break;
+ case IPV6IFICMPINECHOS:
+ long_return = ifs6->ifs6_in_echo;
+ break;
+ case IPV6IFICMPINECHOREPS:
+ long_return = ifs6->ifs6_in_echoreply;
+ break;
+ case IPV6IFICMPINRTRSLICITS:
+ long_return = ifs6->ifs6_in_routersolicit;
+ break;
+ case IPV6IFICMPINRTRADVS:
+ long_return = ifs6->ifs6_in_routeradvert;
+ break;
+ case IPV6IFICMPINNBRSLICITS:
+ long_return = ifs6->ifs6_in_neighborsolicit;
+ break;
+ case IPV6IFICMPINNBRADVS:
+ long_return = ifs6->ifs6_in_neighboradvert;
+ break;
+ case IPV6IFICMPINREDIRECTS:
+ long_return = ifs6->ifs6_in_redirect;
+ break;
+ case IPV6IFICMPINGRPMEQERYS:
+ long_return = ifs6->ifs6_in_mldquery;
+ break;
+ case IPV6IFICMPINGRPMERSPS:
+ long_return = ifs6->ifs6_in_mldreport;
+ break;
+ case IPV6IFICMPINGRPMEREDCS:
+ long_return = ifs6->ifs6_in_mlddone;
+ break;
+ case IPV6IFICMPOUTMSG:
+ long_return = ifs6->ifs6_out_msg;
+ break;
+ case IPV6IFICMPOUTERRORS:
+ long_return = ifs6->ifs6_out_error;
+ break;
+ case IPV6IFICMPOUTDSTUNRCHS:
+ long_return = ifs6->ifs6_out_dstunreach;
+ break;
+ case IPV6IFICMPOUTADMPROHS:
+ long_return = ifs6->ifs6_out_adminprohib;
+ break;
+ case IPV6IFICMPOUTTIMEXCDS:
+ long_return = ifs6->ifs6_out_timeexceed;
+ break;
+ case IPV6IFICMPOUTPARMPROBS:
+ long_return = ifs6->ifs6_out_paramprob;
+ break;
+ case IPV6IFICMPOUTPKTTOOBIGS:
+ long_return = ifs6->ifs6_out_pkttoobig;
+ break;
+ case IPV6IFICMPOUTECHOS:
+ long_return = ifs6->ifs6_out_echo;
+ break;
+ case IPV6IFICMPOUTECHOREPS:
+ long_return = ifs6->ifs6_out_echoreply;
+ break;
+ case IPV6IFICMPOUTRTRSLICITS:
+ long_return = ifs6->ifs6_out_routersolicit;
+ break;
+ case IPV6IFICMPOUTRTRADVS:
+ long_return = ifs6->ifs6_out_routeradvert;
+ break;
+ case IPV6IFICMPOUTNBRSLICITS:
+ long_return = ifs6->ifs6_out_neighborsolicit;
+ break;
+ case IPV6IFICMPOUTNBRADVS:
+ long_return = ifs6->ifs6_out_neighboradvert;
+ break;
+ case IPV6IFICMPOUTREDIRECTS:
+ long_return = ifs6->ifs6_out_redirect;
+ break;
+ case IPV6IFICMPOUTGRPMEQERYS:
+ long_return = ifs6->ifs6_out_mldquery;
+ break;
+ case IPV6IFICMPOUTGRPMERSPS:
+ long_return = ifs6->ifs6_out_mldreport;
+ break;
+ case IPV6IFICMPOUTGRPMEREDCS:
+ long_return = ifs6->ifs6_out_mlddone;
+ break;
+ default:
+ return NULL;
+ }
+ return (u_char *) & long_return;
+ }
+#endif
+ default:
+ break;
+ }
+ return NULL;
+#endif
+}
+
+u_char *
+var_udp6(register struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ oid newname[MAX_OID_LEN];
+ oid savname[MAX_OID_LEN];
+ int result;
+ int i, j;
+ caddr_t p;
+ static struct in6pcb in6pcb, savpcb;
+ int found, savnameLen;
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ struct inpcbtable udbtable;
+ caddr_t first;
+#elif (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+ char *sysctl_buf;
+ struct xinpgen *xig, *oxig;
+#else
+ static struct in6pcb udb6;
+#endif
+
+ DEBUGMSGTL(("mibII/ipv6", "var_udp6: "));
+ DEBUGMSGOID(("mibII/ipv6", name, *length));
+ DEBUGMSG(("mibII/ipv6", " %d\n", exact));
+
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ if (!auto_nlist("udbtable", (char *) &udbtable, sizeof(udbtable)))
+ return NULL;
+ first = p = (caddr_t)udbtable.inpt_queue.cqh_first;
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(darwin)
+ if (!auto_nlist("udb6", (char *) &udb6, sizeof(udb6)))
+ return NULL;
+ p = (caddr_t) udb6.in6p_next;
+#else
+ {
+ const char *udblist = "net.inet.udp.pcblist";
+ const char *pp = udblist;
+ size_t len;
+
+ if (sysctlbyname(udblist, 0, &len, 0, 0) < 0)
+ return NULL;
+ if ((sysctl_buf = malloc(len)) == NULL)
+ return NULL;
+ udblist = pp;
+ if (sysctlbyname(udblist, sysctl_buf, &len, 0, 0) < 0) {
+ free(sysctl_buf);
+ return NULL;
+ }
+ oxig = (struct xinpgen *) sysctl_buf;
+ xig = (struct xinpgen *) ((char *) oxig + oxig->xig_len);
+ p = (caddr_t) ((char *) xig); /* silence compiler warning */
+ }
+#endif
+ found = savnameLen = 0;
+ memcpy((char *) newname, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+ DEBUGMSGTL(("mibII/ipv6", "start: p=%x\n", p));
+ while (
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ p && p != first
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(darwin)
+ p && (u_long) p != auto_nlist_value("udb6")
+#else
+ xig->xig_len > sizeof(struct xinpgen)
+#endif
+ ) {
+ DEBUGMSGTL(("mibII/ipv6", "looping: p=%x\n", p));
+
+#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(darwin)
+ if (!NETSNMP_KLOOKUP(p, (char *) &in6pcb, sizeof(in6pcb))) {
+ DEBUGMSGTL(("mibII/ipv6", "klookup fail for udb6 at %x\n",
+ p));
+ found = 0;
+ break;
+ }
+#else
+ in6pcb = ((struct xinpcb *) xig)->xi_inp;
+#endif
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ if (in6pcb.in6p_af != AF_INET6)
+ goto skip;
+#elif (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+ if (0 == (in6pcb.inp_vflag & INP_IPV6))
+ goto skip;
+#endif
+
+ j = (int) vp->namelen;
+ for (i = 0; i < sizeof(struct in6_addr); i++)
+ newname[j++] = in6pcb.in6p_laddr.s6_addr[i];
+ newname[j++] = ntohs(in6pcb.in6p_lport);
+ if (IN6_IS_ADDR_LINKLOCAL(&in6pcb.in6p_laddr))
+ newname[j++] =
+ ntohs(*(uint16_t *) & in6pcb.in6p_laddr.s6_addr[2]);
+ else
+ newname[j++] = 0;
+ /*XXX*/
+ DEBUGMSGTL(("mibII/ipv6", "var_udp6 new: %d %d ",
+ (int) vp->namelen, j));
+ DEBUGMSGOID(("mibII/ipv6", newname, j));
+ DEBUGMSG(("mibII/ipv6", " %d\n", exact));
+
+ result = snmp_oid_compare(name, *length, newname, j);
+ if (exact && (result == 0)) {
+ memcpy(&savpcb, &in6pcb, sizeof(savpcb));
+ savnameLen = j;
+ memcpy(savname, newname, j * sizeof(oid));
+ found++;
+ break;
+ } else if (!exact && (result < 0)) {
+ /*
+ * take the least greater one
+ */
+ if ((savnameLen == 0) ||
+ (snmp_oid_compare(savname, savnameLen, newname, j) > 0)) {
+ memcpy(&savpcb, &in6pcb, sizeof(savpcb));
+ savnameLen = j;
+ memcpy(savname, newname, j * sizeof(oid));
+ found++;
+ }
+ }
+
+ skip:
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ p = (caddr_t)in6pcb.in6p_queue.cqe_next;
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(darwin)
+ p = (caddr_t) in6pcb.in6p_next;
+#else
+ xig = (struct xinpgen *) ((char *) xig + xig->xig_len);
+#endif
+ }
+#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+ free(sysctl_buf);
+#endif
+ DEBUGMSGTL(("mibII/ipv6", "found=%d\n", found));
+ if (!found)
+ return NULL;
+ *length = savnameLen;
+ memcpy((char *) name, (char *) savname, *length * sizeof(oid));
+ memcpy(&in6pcb, &savpcb, sizeof(savpcb));
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+/*
+ DEBUGMSGTL(("mibII/ipv6", "var_udp6 found: "));
+ DEBUGMSGOID(("mibII/ipv6", name, *length));
+ DEBUGMSG(("mibII/ipv6", " %d\n", exact));
+*/
+ DEBUGMSGTL(("mibII/ipv6", "magic=%d\n", vp->magic));
+ switch (vp->magic) {
+ case IPV6UDPLOCALADDRESS:
+ *var_len = sizeof(struct in6_addr);
+ return in6pcb.in6p_laddr.s6_addr;
+ case IPV6UDPLOCALPORT:
+ long_return = ntohs(in6pcb.in6p_lport);
+ return (u_char *) & long_return;
+ case IPV6UDPIFINDEX:
+ if (IN6_IS_ADDR_LINKLOCAL(&in6pcb.in6p_laddr))
+ long_return =
+ ntohs(*(uint16_t *) & in6pcb.in6p_laddr.s6_addr[2]);
+ else
+ long_return = 0;
+ /*XXX*/ return (u_char *) & long_return;
+ default:
+ break;
+ }
+ ERROR_MSG("");
+ return NULL;
+}
+
+#ifdef TCP6
+u_char *
+var_tcp6(register struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ oid newname[MAX_OID_LEN];
+ oid savname[MAX_OID_LEN];
+ int result;
+ int i, j;
+ caddr_t p;
+ static struct in6pcb in6pcb, savpcb;
+ struct tcp6cb tcp6cb;
+ int found, savnameLen;
+ static int tcp6statemap[TCP6_NSTATES];
+ static int initialized = 0;
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ struct inpcbtable tcbtable;
+ caddr_t first;
+#elif (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+ char *sysctl_buf;
+ struct xinpgen *xig, *oxig;
+#else
+ static struct in6pcb tcb6;
+#endif
+
+ if (!initialized) {
+ tcp6statemap[TCP6S_CLOSED] = 1;
+ tcp6statemap[TCP6S_LISTEN] = 2;
+ tcp6statemap[TCP6S_SYN_SENT] = 3;
+ tcp6statemap[TCP6S_SYN_RECEIVED] = 4;
+ tcp6statemap[TCP6S_ESTABLISHED] = 5;
+ tcp6statemap[TCP6S_CLOSE_WAIT] = 8;
+ tcp6statemap[TCP6S_FIN_WAIT_1] = 6;
+ tcp6statemap[TCP6S_CLOSING] = 10;
+ tcp6statemap[TCP6S_LAST_ACK] = 9;
+ tcp6statemap[TCP6S_FIN_WAIT_2] = 7;
+ tcp6statemap[TCP6S_TIME_WAIT] = 11;
+ initialized++;
+ }
+
+ DEBUGMSGTL(("mibII/ipv6", "var_tcp6: "));
+ DEBUGMSGOID(("mibII/ipv6", name, *length));
+ DEBUGMSG(("mibII/ipv6", " %d\n", exact));
+
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ if (!auto_nlist("tcbtable", (char *) &tcbtable, sizeof(tcbtable)))
+ return NULL;
+ first = p = (caddr_t)tcbtable.inpt_queue.cqh_first;
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(darwin)
+ if (!auto_nlist("tcb6", (char *) &tcb6, sizeof(tcb6)))
+ return NULL;
+ p = (caddr_t) tcb6.in6p_next;
+#else
+ {
+ const char *tcblist = "net.inet.tcp.pcblist";
+ const char *pp = tcblist;
+ size_t len;
+
+ if (sysctlbyname(tcblist, 0, &len, 0, 0) < 0)
+ return NULL;
+ if ((sysctl_buf = malloc(len)) == NULL)
+ return NULL;
+ tcblist = pp;
+ if (sysctlbyname(tcblist, sysctl_buf, &len, 0, 0) < 0) {
+ free(sysctl_buf);
+ return NULL;
+ }
+ oxig = (struct xinpgen *) sysctl_buf;
+ xig = (struct xinpgen *) ((char *) oxig + oxig->xig_len);
+ p = (caddr_t) ((char *) xig); /* silence compiler warning */
+ }
+#endif
+ found = savnameLen = 0;
+ memcpy((char *) newname, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+ DEBUGMSGTL(("mibII/ipv6", "start: p=%x\n", p));
+ while (
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ p && p != first
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(darwin)
+ p && (u_long) p != auto_nlist_value("tcb6")
+#else
+ xig->xig_len > sizeof(struct xinpgen)
+#endif
+ ) {
+ DEBUGMSGTL(("mibII/ipv6", "looping: p=%x\n", p));
+
+#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(darwin)
+ if (!NETSNMP_KLOOKUP(p, (char *) &in6pcb, sizeof(in6pcb))) {
+ DEBUGMSGTL(("mibII/ipv6", "klookup fail for tcb6 at %x\n",
+ p));
+ found = 0;
+ break;
+ }
+#else
+ in6pcb = ((struct xinpcb *) xig)->xi_inp;
+#endif
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ if (in6pcb.in6p_af != AF_INET6)
+ goto skip;
+#elif (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+ if (0 == (in6pcb.inp_vflag & INP_IPV6))
+ goto skip;
+#endif
+ if (!NETSNMP_KLOOKUP(in6pcb.in6p_ppcb, (char *) &tcp6cb, sizeof(tcp6cb))) {
+ DEBUGMSGTL(("mibII/ipv6", "klookup fail for tcb6.tcp6cb at %x\n",
+ in6pcb.in6p_ppcb));
+ found = 0;
+ break;
+ }
+ j = (int) vp->namelen;
+ for (i = 0; i < sizeof(struct in6_addr); i++)
+ newname[j++] = in6pcb.in6p_laddr.s6_addr[i];
+ newname[j++] = ntohs(in6pcb.in6p_lport);
+ for (i = 0; i < sizeof(struct in6_addr); i++)
+ newname[j++] = in6pcb.in6p_faddr.s6_addr[i];
+ newname[j++] = ntohs(in6pcb.in6p_fport);
+ if (IN6_IS_ADDR_LINKLOCAL(&in6pcb.in6p_laddr))
+ newname[j++] =
+ ntohs(*(uint16_t *) & in6pcb.in6p_laddr.s6_addr[2]);
+ else
+ newname[j++] = 0;
+ /*XXX*/ newname[j++] = tcp6statemap[tcp6cb.t_state];
+
+ DEBUGMSGTL(("mibII/ipv6", "var_tcp6 new: %d %d ",
+ (int) vp->namelen, j));
+ DEBUGMSGOID(("mibII/ipv6", newname, j));
+ DEBUGMSG(("mibII/ipv6", " %d\n", exact));
+
+#if 1 /* this is very odd but sometimes happen, and cause infinite loop */
+ if (ntohs(in6pcb.in6p_lport) == 0)
+ goto skip;
+#endif
+
+ result = snmp_oid_compare(name, *length, newname, j);
+ if (exact && (result == 0)) {
+ memcpy(&savpcb, &in6pcb, sizeof(savpcb));
+ savnameLen = j;
+ memcpy(savname, newname, j * sizeof(oid));
+ found++;
+ break;
+ } else if (!exact && (result < 0)) {
+ /*
+ * take the least greater one
+ */
+ if ((savnameLen == 0) ||
+ (snmp_oid_compare(savname, savnameLen, newname, j) > 0)) {
+ memcpy(&savpcb, &in6pcb, sizeof(savpcb));
+ savnameLen = j;
+ memcpy(savname, newname, j * sizeof(oid));
+ found++;
+ }
+ }
+
+ skip:
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ p = (caddr_t)in6pcb.in6p_queue.cqe_next;
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(darwin)
+ p = (caddr_t) in6pcb.in6p_next;
+#else
+ xig = (struct xinpgen *) ((char *) xig + xig->xig_len);
+#endif
+ }
+#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+ free(sysctl_buf);
+#endif
+ DEBUGMSGTL(("mibII/ipv6", "found=%d\n", found));
+ if (!found)
+ return NULL;
+ *length = savnameLen;
+ memcpy((char *) name, (char *) savname, *length * sizeof(oid));
+ memcpy(&in6pcb, &savpcb, sizeof(savpcb));
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+/*
+ DEBUGMSGTL(("mibII/ipv6", "var_tcp6 found: "));
+ DEBUGMSGOID(("mibII/ipv6", name, *length));
+ DEBUGMSG(("mibII/ipv6", " %d\n", exact));
+*/
+ DEBUGMSGTL(("mibII/ipv6", "magic=%d\n", vp->magic));
+ switch (vp->magic) {
+ case IPV6TCPLOCALADDR:
+ *var_len = sizeof(struct in6_addr);
+ return (u_char *) & in6pcb.in6p_laddr.s6_addr[0];
+ case IPV6TCPLOCALPORT:
+ long_return = ntohs(in6pcb.in6p_lport);
+ return (u_char *) & long_return;
+ case IPV6TCPREMOTEADDR:
+ *var_len = sizeof(struct in6_addr);
+ return (u_char *) & in6pcb.in6p_faddr.s6_addr[0];
+ case IPV6TCPREMOTEPORT:
+ long_return = ntohs(in6pcb.in6p_fport);
+ return (u_char *) & long_return;
+ case IPV6TCPIFINDEX:
+ if (IN6_IS_ADDR_LINKLOCAL(&in6pcb.in6p_laddr))
+ long_return =
+ ntohs(*(uint16_t *) & in6pcb.in6p_laddr.s6_addr[2]);
+ else
+ long_return = 0;
+ /*XXX*/ return (u_char *) & long_return;
+ case IPV6TCPCONNSTATE:
+ long_return = tcp6statemap[tcp6cb.t_state];
+ return (u_char *) & long_return;
+ default:
+ break;
+ }
+ ERROR_MSG("");
+ return NULL;
+}
+
+#else /* ! TCP6 */
+
+static int mapTcpState( int val)
+{
+ static int tcpstatemap[16 /*TCP_NSTATES*/];
+ static int initialized = 0;
+
+ if (!initialized) {
+ memset(tcpstatemap, 0, sizeof(tcpstatemap));
+
+ tcpstatemap[TCPS_CLOSED] = 1;
+ tcpstatemap[TCPS_LISTEN] = 2;
+ tcpstatemap[TCPS_SYN_SENT] = 3;
+ tcpstatemap[TCPS_SYN_RECEIVED] = 4;
+ tcpstatemap[TCPS_ESTABLISHED] = 5;
+ tcpstatemap[TCPS_CLOSE_WAIT] = 8;
+ tcpstatemap[TCPS_FIN_WAIT_1] = 6;
+ tcpstatemap[TCPS_CLOSING] = 10;
+ tcpstatemap[TCPS_LAST_ACK] = 9;
+ tcpstatemap[TCPS_FIN_WAIT_2] = 7;
+ tcpstatemap[TCPS_TIME_WAIT] = 11;
+ initialized++;
+ }
+ /* XXX GIGO 0 is an invalid state */
+ return (tcpstatemap[0x0f & val]);
+}
+
+u_char *
+var_tcp6(register struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ oid newname[MAX_OID_LEN];
+ oid savname[MAX_OID_LEN];
+ int result;
+ int i, j;
+ caddr_t p;
+ static struct in6pcb in6pcb, savpcb;
+ struct tcpcb tcpcb;
+ int found, savnameLen;
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ struct inpcbtable tcbtable;
+ caddr_t first;
+#elif (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+ char *sysctl_buf;
+ struct xinpgen *xig, *oxig;
+#else
+ static struct in6pcb tcb6;
+#endif
+
+ DEBUGMSGTL(("mibII/ipv6", "var_tcp6: "));
+ DEBUGMSGOID(("mibII/ipv6", name, *length));
+ DEBUGMSG(("mibII/ipv6", " %d\n", exact));
+
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ if (!auto_nlist("tcbtable", (char *) &tcbtable, sizeof(tcbtable)))
+ return NULL;
+ first = p = (caddr_t)tcbtable.inpt_queue.cqh_first;
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(darwin)
+ if (!auto_nlist("tcb6", (char *) &tcb6, sizeof(tcb6)))
+ return NULL;
+ p = (caddr_t) tcb6.in6p_next;
+#else
+ {
+ const char *tcblist = "net.inet.tcp.pcblist";
+ const char *pp = tcblist;
+ size_t len;
+
+ if (sysctlbyname(tcblist, 0, &len, 0, 0) < 0)
+ return NULL;
+ if ((sysctl_buf = malloc(len)) == NULL)
+ return NULL;
+ tcblist = pp;
+ if (sysctlbyname(tcblist, sysctl_buf, &len, 0, 0) < 0) {
+ free(sysctl_buf);
+ return NULL;
+ }
+ oxig = (struct xinpgen *) sysctl_buf;
+ xig = (struct xinpgen *) ((char *) oxig + oxig->xig_len);
+ p = (caddr_t) ((char *) xig); /* silence compiler warning */
+ }
+#endif
+ found = savnameLen = 0;
+ memcpy((char *) newname, (char *) vp->name,
+ (int) vp->namelen * sizeof(oid));
+ DEBUGMSGTL(("mibII/ipv6", "start: p=%x\n", p));
+ while (
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ p && p != first
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(darwin)
+ p && (u_long) p != auto_nlist_value("tcb6")
+#else
+ xig->xig_len > sizeof(struct xinpgen)
+#endif
+ ) {
+ DEBUGMSGTL(("mibII/ipv6", "looping: p=%x\n", p));
+
+#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(darwin)
+ if (!NETSNMP_KLOOKUP(p, (char *) &in6pcb, sizeof(in6pcb))) {
+ DEBUGMSGTL(("mibII/ipv6", "klookup fail for tcb6 at %x\n",
+ p));
+ found = 0;
+ break;
+ }
+#else
+ in6pcb = ((struct xinpcb *) xig)->xi_inp;
+#endif
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ if (in6pcb.in6p_af != AF_INET6)
+ goto skip;
+#elif (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+ if (0 == (in6pcb.inp_vflag & INP_IPV6))
+ goto skip;
+#endif
+ if (!NETSNMP_KLOOKUP(in6pcb.in6p_ppcb, (char *) &tcpcb, sizeof(tcpcb))) {
+ DEBUGMSGTL(("mibII/ipv6", "klookup fail for tcb6.tcpcb at %x\n",
+ in6pcb.in6p_ppcb));
+ found = 0;
+ break;
+ }
+ j = (int) vp->namelen;
+ for (i = 0; i < sizeof(struct in6_addr); i++)
+ newname[j++] = in6pcb.in6p_laddr.s6_addr[i];
+ newname[j++] = ntohs(in6pcb.in6p_lport);
+ for (i = 0; i < sizeof(struct in6_addr); i++)
+ newname[j++] = in6pcb.in6p_faddr.s6_addr[i];
+ newname[j++] = ntohs(in6pcb.in6p_fport);
+ if (IN6_IS_ADDR_LINKLOCAL(&in6pcb.in6p_laddr))
+ newname[j++] =
+ ntohs(*(uint16_t *) & in6pcb.in6p_laddr.s6_addr[2]);
+ else
+ newname[j++] = 0;
+ /*XXX*/ newname[j++] = mapTcpState((int)tcpcb.t_state);
+
+ DEBUGMSGTL(("mibII/ipv6", "var_tcp6 new: %d %d ",
+ (int) vp->namelen, j));
+ DEBUGMSGOID(("mibII/ipv6", newname, j));
+ DEBUGMSG(("mibII/ipv6", " %d\n", exact));
+
+#if 1 /* this is very odd but sometimes happen, and cause infinite loop */
+ if (ntohs(in6pcb.in6p_lport) == 0)
+ goto skip;
+#endif
+ result = snmp_oid_compare(name, *length, newname, j);
+ if (exact && (result == 0)) {
+ memcpy(&savpcb, &in6pcb, sizeof(savpcb));
+ savnameLen = j;
+ memcpy(savname, newname, j * sizeof(oid));
+ found++;
+ break;
+ } else if (!exact && (result < 0)) {
+ /*
+ * take the least greater one
+ */
+ if ((savnameLen == 0) ||
+ (snmp_oid_compare(savname, savnameLen, newname, j) > 0)) {
+ memcpy(&savpcb, &in6pcb, sizeof(savpcb));
+ savnameLen = j;
+ memcpy(savname, newname, j * sizeof(oid));
+ found++;
+ }
+ }
+
+ skip:
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 106250000 /*1.6Y*/
+ p = (caddr_t)in6pcb.in6p_queue.cqe_next;
+#elif !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(darwin)
+ p = (caddr_t) in6pcb.in6p_next;
+#else
+ xig = (struct xinpgen *) ((char *) xig + xig->xig_len);
+#endif
+ }
+#if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(darwin)
+ free(sysctl_buf);
+#endif
+ DEBUGMSGTL(("mibII/ipv6", "found=%d\n", found));
+ if (!found)
+ return NULL;
+ *length = savnameLen;
+ memcpy((char *) name, (char *) savname, *length * sizeof(oid));
+ memcpy(&in6pcb, &savpcb, sizeof(savpcb));
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+/*
+ DEBUGMSGTL(("mibII/ipv6", "var_tcp6 found: "));
+ DEBUGMSGOID(("mibII/ipv6", name, *length));
+ DEBUGMSG(("mibII/ipv6", " %d\n", exact));
+*/
+ DEBUGMSGTL(("mibII/ipv6", "magic=%d\n", vp->magic));
+ switch (vp->magic) {
+ case IPV6TCPLOCALADDR:
+ *var_len = sizeof(struct in6_addr);
+ return (u_char *) & in6pcb.in6p_laddr.s6_addr[0];
+ case IPV6TCPLOCALPORT:
+ long_return = ntohs(in6pcb.in6p_lport);
+ return (u_char *) & long_return;
+ case IPV6TCPREMOTEADDR:
+ *var_len = sizeof(struct in6_addr);
+ return (u_char *) & in6pcb.in6p_faddr.s6_addr[0];
+ case IPV6TCPREMOTEPORT:
+ long_return = ntohs(in6pcb.in6p_fport);
+ return (u_char *) & long_return;
+ case IPV6TCPIFINDEX:
+ if (IN6_IS_ADDR_LINKLOCAL(&in6pcb.in6p_laddr))
+ long_return =
+ ntohs(*(uint16_t *) & in6pcb.in6p_laddr.s6_addr[2]);
+ else
+ long_return = 0;
+ /*XXX*/ return (u_char *) & long_return;
+ case IPV6TCPCONNSTATE:
+ long_return = mapTcpState((int)tcpcb.t_state);
+ return (u_char *) & long_return;
+ default:
+ break;
+ }
+ ERROR_MSG("");
+ return NULL;
+}
+
+#endif /*TCP6 */
+
+#else /* !linux / linux */
+
+/*
+ * Linux dependent part
+ */
+static unsigned long
+linux_read_ip6_stat_ulong(const char *file)
+{
+ FILE *f;
+ unsigned long value;
+ f = fopen(file, "r");
+ if (!f)
+ return 0;
+ if (fscanf(f, "%lu", &value) != 1) {
+ fclose(f);
+ return 0;
+ }
+ fclose(f);
+ return value;
+}
+
+void
+linux_read_ip6_stat(struct ip6_mib *ip6stat)
+{
+ if (!ip6stat)
+ return;
+ memset(ip6stat, 0, sizeof(*ip6stat));
+ ip6stat->Ipv6Forwarding =
+ linux_read_ip6_stat_ulong
+ ("/proc/sys/net/ipv6/conf/all/forwarding");
+ ip6stat->Ipv6DefaultHopLimit =
+ linux_read_ip6_stat_ulong
+ ("/proc/sys/net/ipv6/conf/default/hop_limit");
+}
+
+u_char *
+var_ipv6(register struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ static struct ip6_mib ip6stat;
+
+ if (header_ipv6(vp, name, length, exact, var_len, write_method)
+ == MATCH_FAILED) {
+ return NULL;
+ }
+ linux_read_ip6_stat(&ip6stat);
+
+ switch (vp->magic) {
+ case IPV6DEFAULTHOPLIMIT:
+ return (u_char *) & ip6stat.Ipv6DefaultHopLimit;
+ case IPV6FORWARDING:
+ long_return = (ip6stat.Ipv6Forwarding) ? 1 : 2;
+ return (u_char *) & long_return;
+ case IPV6INTERFACES:
+#ifdef HAVE_IF_NAMEINDEX
+ long_return = if_countifindex();
+ if (long_return < 0)
+ break;
+ return (u_char *) & long_return;
+#endif
+ break;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ipv6\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+u_char *
+var_ifv6Entry(register struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+#ifndef HAVE_IF_NAMEINDEX
+ return NULL;
+#else
+ int interface;
+ int max;
+ char *p;
+ struct ifreq ifr;
+ int s;
+
+ max = if_maxifindex();
+ if (max < 0)
+ return NULL;
+
+ if (header_ipv6_scan
+ (vp, name, length, exact, var_len, write_method, 1, max)
+ == MATCH_FAILED) {
+ return NULL;
+ }
+ interface = name[*length - 1];
+ DEBUGMSGTL(("mibII/ipv6", "interface: %d(%s)\n",
+ interface, if_getname(interface)));
+ if (interface > max)
+ return NULL;
+
+ switch (vp->magic) {
+ case IPV6IFDESCR:
+ p = if_getname(interface);
+ if (p) {
+ *var_len = strlen(p);
+ return p;
+ }
+ break;
+ case IPV6IFLOWLAYER:
+ /*
+ * should check if type, this is a hard one...
+ */
+ *var_len = nullOidLen;
+ return (u_char *) nullOid;
+ case IPV6IFEFFECTMTU:
+ {
+ p = if_getname(interface);
+ if (!p)
+ break;
+ memset(&ifr, 0, sizeof(ifr));
+ ifr.ifr_addr.sa_family = AF_INET6;
+ strncpy(ifr.ifr_name, p, sizeof(ifr.ifr_name));
+ if ((s = socket(ifr.ifr_addr.sa_family, SOCK_DGRAM, 0)) < 0)
+ break;
+ if (ioctl(s, SIOCGIFMTU, (caddr_t) & ifr) < 0) {
+ close(s);
+ break;
+ }
+ long_return = ifr.ifr_mtu;
+ close(s);
+ return (u_char *) & long_return;
+ }
+ case IPV6IFPHYSADDRESS:
+ {
+ static struct ifreq buf;
+ int ok = 0;
+ p = if_getname(interface);
+ if (!p)
+ break;
+ memset(&ifr, 0, sizeof(ifr));
+ ifr.ifr_addr.sa_family = AF_INET6;
+ strncpy(ifr.ifr_name, p, sizeof(ifr.ifr_name));
+ if ((s = socket(ifr.ifr_addr.sa_family, SOCK_DGRAM, 0)) < 0)
+ break;
+ if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) {
+ memset(buf.ifr_hwaddr.sa_data, 0,
+ sizeof(buf.ifr_hwaddr.sa_data));
+ *var_len = 0;
+ } else {
+ memcpy(buf.ifr_hwaddr.sa_data, ifr.ifr_hwaddr.sa_data, 6);
+ *var_len = (buf.ifr_hwaddr.sa_data[0] |
+ buf.ifr_hwaddr.sa_data[1] |
+ buf.ifr_hwaddr.sa_data[2] |
+ buf.ifr_hwaddr.sa_data[3] |
+ buf.ifr_hwaddr.sa_data[4] |
+ buf.ifr_hwaddr.sa_data[5]) ? 6 : 0;
+ ok = 1;
+ }
+ close(s);
+ return (ok ? ((u_char *) & buf.ifr_hwaddr.sa_data) : NULL);
+ }
+ case IPV6IFADMSTATUS:
+ case IPV6IFOPERSTATUS:
+ {
+ int flag = 0;
+ p = if_getname(interface);
+ if (!p)
+ break;
+ memset(&ifr, 0, sizeof(ifr));
+ ifr.ifr_addr.sa_family = AF_INET6;
+ strncpy(ifr.ifr_name, p, sizeof(ifr.ifr_name));
+ if ((s = socket(ifr.ifr_addr.sa_family, SOCK_DGRAM, 0)) < 0)
+ break;
+ if (ioctl(s, SIOCGIFFLAGS, &ifr) < 0) {
+ close(s);
+ break;
+ }
+ close(s);
+ switch (vp->magic) {
+ case IPV6IFADMSTATUS:
+ flag = IFF_RUNNING;
+ break;
+ case IPV6IFOPERSTATUS:
+ flag = IFF_UP;
+ break;
+ }
+ long_return = (ifr.ifr_flags & flag) ? 1 : 2;
+ return (u_char *) & long_return;
+ }
+ }
+ return NULL;
+#endif
+}
+
+u_char *
+var_icmpv6Entry(register struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ return NULL;
+}
+
+u_char *
+var_udp6(register struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ return NULL;
+}
+
+u_char *
+var_tcp6(register struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ return NULL;
+}
+
+/*
+ * misc functions (against broken kernels )
+ */
+void
+linux_if_freenameindex(struct if_nameindex *ifndx)
+{
+ int i;
+ if (!ifndx)
+ return;
+ for (i = 1; ifndx[i].if_index; i++) {
+ free(ifndx[i].if_name);
+ }
+ free(ifndx);
+}
+
+#define linux_freeinternalnameindex(ifni, max) { \
+ int i; \
+ for (i=1; i<=max; i++){ \
+ if (ifni[i].if_name) free(ifni[i].if_name); \
+ } \
+ free(ifni); \
+}
+
+#define LINUX_PROC_NET_IFINET6 "/proc/net/if_inet6"
+struct if_nameindex *
+linux_if_nameindex(void)
+{
+ FILE *f;
+ unsigned long if_index;
+ char if_name[256];
+ struct if_nameindex *ifndx = NULL, *iflist = NULL, *tmp;
+ int i, j;
+ int maxidx, if_count = 0;
+
+ f = fopen(LINUX_PROC_NET_IFINET6, "r");
+ if (f) {
+ if_count = 0;
+ maxidx = -1;
+ while (!feof(f)) {
+ if (fscanf(f, "%*s %lx %*x %*x %*x %s",
+ &if_index, if_name) != 2)
+ continue;
+ if (if_index == 0)
+ continue;
+ if_name[sizeof(if_name) - 1] = '\0';
+ if (maxidx < 0 || maxidx < if_index) {
+
+ tmp =
+ realloc(iflist,
+ (sizeof(struct if_nameindex)) * (if_index +
+ 2));
+ if (!tmp) {
+ linux_freeinternalnameindex(iflist, if_index);
+ if_count = 0;
+ iflist = NULL;
+ break;
+ }
+ iflist = tmp;
+ for (i = maxidx + 1; i <= if_index; i++)
+ memset(&iflist[i], 0, sizeof(struct if_nameindex));
+ memset(&iflist[if_index + 1], 0,
+ sizeof(struct if_nameindex));
+ maxidx = if_index;
+ }
+ if (iflist[if_index].if_index == 0) {
+ if_count++;
+ iflist[if_index].if_index = if_index;
+ iflist[if_index].if_name = strdup(if_name);
+ if (!iflist[if_index].if_name) {
+ linux_freeinternalnameindex(iflist, if_index);
+ if_count = 0;
+ iflist = NULL;
+ break;
+ }
+ }
+ }
+ fclose(f);
+ if (if_count > 0) {
+ ifndx = malloc(sizeof(struct if_nameindex) * (if_count + 1));
+ j = 0;
+ for (i = 1; i <= maxidx; i++) {
+ if (iflist[i].if_index > 0 && *iflist[i].if_name) {
+ memcpy(&ifndx[j++], &iflist[i],
+ sizeof(struct if_nameindex));
+ }
+ }
+ ifndx[j].if_index = 0;
+ ifndx[j].if_name = NULL;
+ }
+ free(iflist);
+ }
+ return (ifndx);
+}
+
+#endif /* linux */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipv6.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipv6.h
new file mode 100644
index 0000000000..a029baff09
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/ipv6.h
@@ -0,0 +1,144 @@
+/*
+ * Template MIB group interface - ipv6.h
+ *
+ */
+
+#ifndef _MIBGROUP_IPV6_H
+#define _MIBGROUP_IPV6_H
+
+#ifdef linux
+struct ip6_mib {
+ unsigned long Ipv6DefaultHopLimit;
+ unsigned long Ipv6Forwarding;
+};
+#endif
+
+config_require(mibII/ifTable mibII/at mibII/var_route mibII/route_write)
+config_add_mib(IPV6-ICMP-MIB:IPV6-MIB:IPV6-TCP-MIB:IPV6-UDP-MIB)
+config_arch_require(solaris2, kernel_sunos5)
+#include "var_route.h"
+#include "route_write.h"
+extern void init_ipv6(void);
+extern FindVarMethod var_ipv6;
+extern FindVarMethod var_ifv6Entry;
+extern FindVarMethod var_icmpv6Entry;
+extern FindVarMethod var_udp6;
+extern FindVarMethod var_tcp6;
+
+#include "at.h" /* for var_atEntry() */
+
+#define IPV6FORWARDING 1
+#define IPV6DEFAULTHOPLIMIT 2
+#define IPV6INTERFACES 3
+#define IPV6IFTBLLASTCHG 4
+
+#define IPV6IFDESCR 2
+#define IPV6IFLOWLAYER 3
+#define IPV6IFEFFECTMTU 4
+#define IPV6IFREASMMAXSIZE 5
+#define IPV6IFTOKEN 6
+#define IPV6IFTOKENLEN 7
+#define IPV6IFPHYSADDRESS 8
+#define IPV6IFADMSTATUS 9
+#define IPV6IFOPERSTATUS 10
+#define IPV6IFLASTCHANGE 11
+
+#define IPV6IFSTATSINRCVS 12
+#define IPV6IFSTATSINHDRERRS 13
+#define IPV6IFSTATSTOOBIGERRS 14
+#define IPV6IFSTATSINNOROUTES 15
+#define IPV6IFSTATSINADDRERRS 16
+#define IPV6IFSTATSINUNKNOWPROTS 17
+#define IPV6IFSTATSINTRUNCATPKTS 18
+#define IPV6IFSTATSINDISCARDS 19
+#define IPV6IFSTATSINDELIVERS 20
+#define IPV6IFSTATSOUTFORWDATAS 21
+#define IPV6IFSTATSOUTREQS 22
+#define IPV6IFSTATSOUTDISCARDS 23
+#define IPV6IFSTATSOUTFRAGOKS 24
+#define IPV6IFSTATSOUTFRAGFAILS 25
+#define IPV6IFSTATSOUTFRAGCREATS 26
+#define IPV6IFSTATSOUTREASMREQS 27
+#define IPV6IFSTATSOUTREASMOKS 28
+#define IPV6IFSTATSOUTREASMFAILS 29
+#define IPV6IFSTATSINMCASTPKTS 30
+#define IPV6IFSTATSOUTMCASTPKTS 31
+
+#define IPV6ADDRPREFIXONLINKFLG 3
+#define IPV6ADDRPREFIXAUTONOMOUSFLAG 4
+#define IPV6ADDRPREFIXADVPREFERLIFE 5
+#define IPV6ADDRPREFIXVALIDLIFE 6
+
+#define IPV6ADDRPFXLEN 7
+#define IPV6ADDRTYPE 8
+#define IPV6ADDRANYCASTFLAG 9
+#define IPV6ADDRSTATUS 10
+
+#define IPV6INSTALLEDROUTES 5
+#define IPV6DISCARDEDROUTES 6
+
+#define IPV6ROUTEIFINDEX 4
+#define IPV6ROUTENEXTHOP 5
+#define IPV6ROUTETYPE 6
+#define IPV6ROUTEPROTOCOL 7
+#define IPV6ROUTEPOLICY 8
+#define IPV6ROUTEAGE 9
+#define IPV6ROUTENEXTHOPRDI 10
+#define IPV6ROUTEMETRIC 11
+#define IPV6ROUTEWEIGHT 12
+#define IPV6ROUTEINFO 13
+#define IPV6ROUTEVALID 14
+
+#define IPV6NETTOMEDIAPHYADDR 2
+#define IPV6NETTOMEDIATYPE 3
+#define IPV6NETTOMEDIASTATE 4
+#define IPV6NETTOMEDIALASTUPDATE 5
+#define IPV6NETTOMEDIAVALID 6
+
+#define IPV6IFICMPINMSG 1
+#define IPV6IFICMPINERRORS 2
+#define IPV6IFICMPINDSTUNRCHS 3
+#define IPV6IFICMPINADMPROHS 4
+#define IPV6IFICMPINTIMEXCDS 5
+#define IPV6IFICMPINPARMPROBS 6
+#define IPV6IFICMPINPKTTOOBIGS 7
+#define IPV6IFICMPINECHOS 8
+#define IPV6IFICMPINECHOREPS 9
+#define IPV6IFICMPINRTRSLICITS 10
+#define IPV6IFICMPINRTRADVS 11
+#define IPV6IFICMPINNBRSLICITS 12
+#define IPV6IFICMPINNBRADVS 13
+#define IPV6IFICMPINREDIRECTS 14
+#define IPV6IFICMPINGRPMEQERYS 15
+#define IPV6IFICMPINGRPMERSPS 16
+#define IPV6IFICMPINGRPMEREDCS 17
+#define IPV6IFICMPOUTMSG 18
+#define IPV6IFICMPOUTERRORS 19
+#define IPV6IFICMPOUTDSTUNRCHS 20
+#define IPV6IFICMPOUTADMPROHS 21
+#define IPV6IFICMPOUTTIMEXCDS 22
+#define IPV6IFICMPOUTPARMPROBS 23
+#define IPV6IFICMPOUTPKTTOOBIGS 24
+#define IPV6IFICMPOUTECHOS 25
+#define IPV6IFICMPOUTECHOREPS 26
+#define IPV6IFICMPOUTRTRSLICITS 27
+#define IPV6IFICMPOUTRTRADVS 28
+#define IPV6IFICMPOUTNBRSLICITS 29
+#define IPV6IFICMPOUTNBRADVS 30
+#define IPV6IFICMPOUTREDIRECTS 31
+#define IPV6IFICMPOUTGRPMEQERYS 32
+#define IPV6IFICMPOUTGRPMERSPS 33
+#define IPV6IFICMPOUTGRPMEREDCS 34
+
+#define IPV6UDPLOCALADDRESS 1
+#define IPV6UDPLOCALPORT 2
+#define IPV6UDPIFINDEX 3
+
+#define IPV6TCPLOCALADDR 1
+#define IPV6TCPLOCALPORT 2
+#define IPV6TCPREMOTEADDR 3
+#define IPV6TCPREMOTEPORT 4
+#define IPV6TCPIFINDEX 5
+#define IPV6TCPCONNSTATE 6
+
+#endif /* _MIBGROUP_IPV6_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/kernel_linux.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/kernel_linux.c
new file mode 100644
index 0000000000..bb6f867c69
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/kernel_linux.c
@@ -0,0 +1,221 @@
+/*
+ * Linux kernel interface
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "util_funcs.h"
+
+#if HAVE_STRING_H
+#include <string.h>
+#endif
+#include <sys/types.h>
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
+#include "kernel_linux.h"
+
+struct ip_mib cached_ip_mib;
+struct icmp_mib cached_icmp_mib;
+struct tcp_mib cached_tcp_mib;
+struct udp_mib cached_udp_mib;
+
+#define IP_STATS_LINE "Ip: %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu"
+#define ICMP_STATS_LINE "Icmp: %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu"
+#define TCP_STATS_LINE "Tcp: %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu"
+#define UDP_STATS_LINE "Udp: %lu %lu %lu %lu"
+#define UDP6_STATS_LINE "Udp6"
+
+#define IP_STATS_PREFIX_LEN 4
+#define ICMP_STATS_PREFIX_LEN 6
+#define TCP_STATS_PREFIX_LEN 5
+#define UDP_STATS_PREFIX_LEN 5
+#define UDP6_STATS_PREFIX_LEN 4
+
+
+int
+linux_read_mibII_stats(void)
+{
+ FILE *in = fopen("/proc/net/snmp", "r");
+#ifdef NETSNMP_ENABLE_IPV6
+ FILE *in6;
+ unsigned long value;
+#endif
+ char line[1024];
+
+ if (!in) {
+ DEBUGMSGTL(("mibII/kernel_linux","Unable to open /proc/net/snmp"));
+ return -1;
+ }
+
+
+ while (line == fgets(line, sizeof(line), in)) {
+ if (!strncmp(line, IP_STATS_LINE, IP_STATS_PREFIX_LEN)) {
+ sscanf(line, IP_STATS_LINE,
+ &cached_ip_mib.ipForwarding,
+ &cached_ip_mib.ipDefaultTTL,
+ &cached_ip_mib.ipInReceives,
+ &cached_ip_mib.ipInHdrErrors,
+ &cached_ip_mib.ipInAddrErrors,
+ &cached_ip_mib.ipForwDatagrams,
+ &cached_ip_mib.ipInUnknownProtos,
+ &cached_ip_mib.ipInDiscards,
+ &cached_ip_mib.ipInDelivers,
+ &cached_ip_mib.ipOutRequests,
+ &cached_ip_mib.ipOutDiscards,
+ &cached_ip_mib.ipOutNoRoutes,
+ &cached_ip_mib.ipReasmTimeout,
+ &cached_ip_mib.ipReasmReqds,
+ &cached_ip_mib.ipReasmOKs,
+ &cached_ip_mib.ipReasmFails,
+ &cached_ip_mib.ipFragOKs,
+ &cached_ip_mib.ipFragFails,
+ &cached_ip_mib.ipFragCreates);
+ cached_ip_mib.ipRoutingDiscards = 0; /* XXX */
+ } else if (!strncmp(line, ICMP_STATS_LINE, ICMP_STATS_PREFIX_LEN)) {
+ sscanf(line, ICMP_STATS_LINE,
+ &cached_icmp_mib.icmpInMsgs,
+ &cached_icmp_mib.icmpInErrors,
+ &cached_icmp_mib.icmpInDestUnreachs,
+ &cached_icmp_mib.icmpInTimeExcds,
+ &cached_icmp_mib.icmpInParmProbs,
+ &cached_icmp_mib.icmpInSrcQuenchs,
+ &cached_icmp_mib.icmpInRedirects,
+ &cached_icmp_mib.icmpInEchos,
+ &cached_icmp_mib.icmpInEchoReps,
+ &cached_icmp_mib.icmpInTimestamps,
+ &cached_icmp_mib.icmpInTimestampReps,
+ &cached_icmp_mib.icmpInAddrMasks,
+ &cached_icmp_mib.icmpInAddrMaskReps,
+ &cached_icmp_mib.icmpOutMsgs,
+ &cached_icmp_mib.icmpOutErrors,
+ &cached_icmp_mib.icmpOutDestUnreachs,
+ &cached_icmp_mib.icmpOutTimeExcds,
+ &cached_icmp_mib.icmpOutParmProbs,
+ &cached_icmp_mib.icmpOutSrcQuenchs,
+ &cached_icmp_mib.icmpOutRedirects,
+ &cached_icmp_mib.icmpOutEchos,
+ &cached_icmp_mib.icmpOutEchoReps,
+ &cached_icmp_mib.icmpOutTimestamps,
+ &cached_icmp_mib.icmpOutTimestampReps,
+ &cached_icmp_mib.icmpOutAddrMasks,
+ &cached_icmp_mib.icmpOutAddrMaskReps);
+ } else if (!strncmp(line, TCP_STATS_LINE, TCP_STATS_PREFIX_LEN)) {
+ int ret = sscanf(line, TCP_STATS_LINE,
+ &cached_tcp_mib.tcpRtoAlgorithm,
+ &cached_tcp_mib.tcpRtoMin,
+ &cached_tcp_mib.tcpRtoMax,
+ &cached_tcp_mib.tcpMaxConn,
+ &cached_tcp_mib.tcpActiveOpens,
+ &cached_tcp_mib.tcpPassiveOpens,
+ &cached_tcp_mib.tcpAttemptFails,
+ &cached_tcp_mib.tcpEstabResets,
+ &cached_tcp_mib.tcpCurrEstab,
+ &cached_tcp_mib.tcpInSegs,
+ &cached_tcp_mib.tcpOutSegs,
+ &cached_tcp_mib.tcpRetransSegs,
+ &cached_tcp_mib.tcpInErrs,
+ &cached_tcp_mib.tcpOutRsts);
+ cached_tcp_mib.tcpInErrsValid = (ret > 12) ? 1 : 0;
+ cached_tcp_mib.tcpOutRstsValid = (ret > 13) ? 1 : 0;
+ } else if (!strncmp(line, UDP_STATS_LINE, UDP_STATS_PREFIX_LEN)) {
+ sscanf(line, UDP_STATS_LINE,
+ &cached_udp_mib.udpInDatagrams,
+ &cached_udp_mib.udpNoPorts,
+ &cached_udp_mib.udpInErrors,
+ &cached_udp_mib.udpOutDatagrams);
+ }
+ }
+ fclose(in);
+
+#ifdef NETSNMP_ENABLE_IPV6
+ in6 = fopen("/proc/net/snmp6", "r");
+ if (in6) {
+
+ while (line == fgets(line, sizeof(line), in6)) {
+
+ if (('U' != line[0]) ||
+ (0 != strncmp(line, UDP6_STATS_LINE, UDP6_STATS_PREFIX_LEN)))
+ continue;
+
+ sscanf(line, "%*s %lu" , &value);
+
+ if ('O' == line[4]) /* Udp6OutDatagrams */
+ cached_udp_mib.udpOutDatagrams += value;
+ else if ('N' == line[4]) /* Udp6NoPorts */
+ cached_udp_mib.udpNoPorts += value;
+ else if ('D' == line[6]) /* Udp6InDatagrams */
+ cached_udp_mib.udpInDatagrams += value;
+ else if ('E' == line[6]) /* Udp6InErrors */
+ cached_udp_mib.udpInErrors += value;
+
+ }
+ fclose(in6);
+ } else {
+ DEBUGMSGTL(("mibII/kernel_linux","Unable to open /proc/net/snmp6"));
+ }
+
+#endif
+
+ /*
+ * Tweak illegal values:
+ *
+ * valid values for ipForwarding are 1 == yup, 2 == nope
+ * a 0 is forbidden, so patch:
+ */
+ if (!cached_ip_mib.ipForwarding)
+ cached_ip_mib.ipForwarding = 2;
+
+ /*
+ * 0 is illegal for tcpRtoAlgorithm
+ * so assume `other' algorithm:
+ */
+ if (!cached_tcp_mib.tcpRtoAlgorithm)
+ cached_tcp_mib.tcpRtoAlgorithm = 1;
+ return 0;
+}
+
+int
+linux_read_ip_stat(struct ip_mib *ipstat)
+{
+ memset((char *) ipstat, (0), sizeof(*ipstat));
+ if (linux_read_mibII_stats() == -1)
+ return -1;
+ memcpy((char *) ipstat, (char *) &cached_ip_mib, sizeof(*ipstat));
+ return 0;
+}
+
+int
+linux_read_icmp_stat(struct icmp_mib *icmpstat)
+{
+ memset((char *) icmpstat, (0), sizeof(*icmpstat));
+ if (linux_read_mibII_stats() == -1)
+ return -1;
+ memcpy((char *) icmpstat, (char *) &cached_icmp_mib,
+ sizeof(*icmpstat));
+ return 0;
+}
+
+int
+linux_read_tcp_stat(struct tcp_mib *tcpstat)
+{
+ memset((char *) tcpstat, (0), sizeof(*tcpstat));
+ if (linux_read_mibII_stats() == -1)
+ return -1;
+ memcpy((char *) tcpstat, (char *) &cached_tcp_mib, sizeof(*tcpstat));
+ return 0;
+}
+
+int
+linux_read_udp_stat(struct udp_mib *udpstat)
+{
+ memset((char *) udpstat, (0), sizeof(*udpstat));
+ if (linux_read_mibII_stats() == -1)
+ return -1;
+ memcpy((char *) udpstat, (char *) &cached_udp_mib, sizeof(*udpstat));
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/kernel_linux.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/kernel_linux.h
new file mode 100644
index 0000000000..fb7db96113
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/kernel_linux.h
@@ -0,0 +1,93 @@
+/*
+ * MIB statistics gathering routines
+ * for Linux architecture
+ */
+
+#ifndef _MIBGROUP_KERNEL_LINUX_H
+#define _MIBGROUP_KERNEL_LINUX_H
+
+struct ip_mib {
+ unsigned long ipForwarding;
+ unsigned long ipDefaultTTL;
+ unsigned long ipInReceives;
+ unsigned long ipInHdrErrors;
+ unsigned long ipInAddrErrors;
+ unsigned long ipForwDatagrams;
+ unsigned long ipInUnknownProtos;
+ unsigned long ipInDiscards;
+ unsigned long ipInDelivers;
+ unsigned long ipOutRequests;
+ unsigned long ipOutDiscards;
+ unsigned long ipOutNoRoutes;
+ unsigned long ipReasmTimeout;
+ unsigned long ipReasmReqds;
+ unsigned long ipReasmOKs;
+ unsigned long ipReasmFails;
+ unsigned long ipFragOKs;
+ unsigned long ipFragFails;
+ unsigned long ipFragCreates;
+ unsigned long ipRoutingDiscards;
+};
+
+struct icmp_mib {
+ unsigned long icmpInMsgs;
+ unsigned long icmpInErrors;
+ unsigned long icmpInDestUnreachs;
+ unsigned long icmpInTimeExcds;
+ unsigned long icmpInParmProbs;
+ unsigned long icmpInSrcQuenchs;
+ unsigned long icmpInRedirects;
+ unsigned long icmpInEchos;
+ unsigned long icmpInEchoReps;
+ unsigned long icmpInTimestamps;
+ unsigned long icmpInTimestampReps;
+ unsigned long icmpInAddrMasks;
+ unsigned long icmpInAddrMaskReps;
+ unsigned long icmpOutMsgs;
+ unsigned long icmpOutErrors;
+ unsigned long icmpOutDestUnreachs;
+ unsigned long icmpOutTimeExcds;
+ unsigned long icmpOutParmProbs;
+ unsigned long icmpOutSrcQuenchs;
+ unsigned long icmpOutRedirects;
+ unsigned long icmpOutEchos;
+ unsigned long icmpOutEchoReps;
+ unsigned long icmpOutTimestamps;
+ unsigned long icmpOutTimestampReps;
+ unsigned long icmpOutAddrMasks;
+ unsigned long icmpOutAddrMaskReps;
+};
+
+struct udp_mib {
+ unsigned long udpInDatagrams;
+ unsigned long udpNoPorts;
+ unsigned long udpInErrors;
+ unsigned long udpOutDatagrams;
+};
+
+struct tcp_mib {
+ unsigned long tcpRtoAlgorithm;
+ unsigned long tcpRtoMin;
+ unsigned long tcpRtoMax;
+ unsigned long tcpMaxConn;
+ unsigned long tcpActiveOpens;
+ unsigned long tcpPassiveOpens;
+ unsigned long tcpAttemptFails;
+ unsigned long tcpEstabResets;
+ unsigned long tcpCurrEstab;
+ unsigned long tcpInSegs;
+ unsigned long tcpOutSegs;
+ unsigned long tcpRetransSegs;
+ unsigned long tcpInErrs;
+ unsigned long tcpOutRsts;
+ short tcpInErrsValid;
+ short tcpOutRstsValid;
+};
+
+
+int linux_read_ip_stat(struct ip_mib *);
+int linux_read_icmp_stat(struct icmp_mib *);
+int linux_read_udp_stat(struct udp_mib *);
+int linux_read_tcp_stat(struct tcp_mib *);
+
+#endif /* _MIBGROUP_KERNEL_LINUX_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/mibII_common.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/mibII_common.h
new file mode 100644
index 0000000000..5200c3a1d9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/mibII_common.h
@@ -0,0 +1,111 @@
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#include <sys/types.h>
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_SYS_SYSMP_H
+#include <sys/sysmp.h>
+#endif
+#if HAVE_SYS_TCPIPSTATS_H
+#include <sys/tcpipstats.h>
+#endif
+#if defined(IFNET_NEEDS_KERNEL) && !defined(_KERNEL)
+#define _KERNEL 1
+#define _I_DEFINED_KERNEL
+#endif
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#if HAVE_NET_IF_H
+#include <net/if.h>
+#endif
+#if HAVE_NET_IF_VAR_H
+#include <net/if_var.h>
+#endif
+#ifdef _I_DEFINED_KERNEL
+#undef _KERNEL
+#endif
+
+#if HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif
+#if HAVE_SYS_STREAM_H
+#include <sys/stream.h>
+#endif
+#if HAVE_NET_ROUTE_H
+#include <net/route.h>
+#endif
+#if HAVE_NETINET_IN_SYSTM_H
+#include <netinet/in_systm.h>
+#endif
+#if HAVE_NETINET_IP_H
+#include <netinet/ip.h>
+#endif
+#if HAVE_SYS_QUEUE_H
+#include <sys/queue.h>
+#endif
+/* IRIX 6.5 build breaks on sys/socketvar.h because _KMEMUSER brings in
+ sys/pda.h which doesn't compile */
+#ifndef irix6
+#if HAVE_SYS_SOCKETVAR_H
+#include <sys/socketvar.h>
+#endif
+#endif /* irix6 */
+#if HAVE_NETINET_IP_VAR_H
+#include <netinet/ip_var.h>
+#endif
+#ifdef NETSNMP_ENABLE_IPV6
+#if HAVE_NETNETSNMP_ENABLE_IPV6_IP6_VAR_H
+#include <netinet6/ip6_var.h>
+#endif
+#endif
+#if HAVE_NETINET_IN_PCB_H
+#include <netinet/in_pcb.h>
+#endif
+#if HAVE_INET_MIB2_H
+#include <inet/mib2.h>
+#endif
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#if HAVE_DMALLOC_H
+#include <dmalloc.h>
+#endif
+
+
+#ifdef solaris2
+#include "kernel_sunos5.h"
+#else
+#include "kernel.h"
+#endif
+#ifdef linux
+#include "kernel_linux.h"
+#endif
+ /* or MIB_xxxCOUNTER_SYMBOL || hpux11 */
+#ifdef hpux
+#include <sys/mib.h>
+#include <netinet/mib_kern.h>
+#endif
+
+#ifdef cygwin
+#include <windows.h>
+#endif
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/mta_sendmail.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/mta_sendmail.c
new file mode 100644
index 0000000000..ea838e5278
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/mta_sendmail.c
@@ -0,0 +1,1536 @@
+/*
+ * MTA-MIB implementation for sendmail - mibII/mta_sendmail.c
+ * Christoph Mammitzsch <Christoph.Mammitzsch@tu-clausthal.de>
+ *
+ * todo: put queue directory into description?
+ *
+ * 13.02.2002:
+ * - support sendmail 8.12 queue groups
+ *
+ *
+ * 05.04.2000:
+ *
+ * - supports sendmail 8.10.0 statistics files now
+ * - function read_option has been removed
+ *
+ * 12.04.2000:
+ *
+ * - renamed configuration tokens:
+ * sendmail config -> sendmail_config
+ * sendmail stats -> sendmail_stats
+ * sendmail queue -> sendmail_queue
+ * sendmail index -> sendmail_index
+ * sendmail statcachetime -> sendmail_stats_t
+ * sendmail dircacetime -> sendmail_queue_t
+ *
+ * - now using snmpd_register_config_handler instead of config_parse_dot_conf
+ *
+ * 15.04.2000:
+ *
+ * - introduced new function print_error
+ * - changed open_sendmailst and read_sendmailcf to use the new function
+ * - changed calls to open_sendmailst and read_sendmailcf
+ * - added some error handling to calls to chdir(), close() and closedir()
+ *
+ */
+
+
+/** "include files" */
+#ifdef __lint
+# define NETSNMP_NO_DEBUGGING 1 /* keeps lint from complaining about the DEBUGMSG* macros */
+#endif
+
+#include <net-snmp/net-snmp-config.h>
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "mta_sendmail.h"
+
+#include <sys/types.h>
+
+#include <stdio.h>
+
+#include <ctype.h>
+
+#ifdef HAVE_STRING_H
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#endif
+
+#if HAVE_DIRENT_H
+#include <dirent.h>
+#else
+# define dirent direct
+# if HAVE_SYS_NDIR_H
+# include <sys/ndir.h>
+# endif
+# if HAVE_SYS_DIR_H
+# include <sys/dir.h>
+# endif
+# if HAVE_NDIR_H
+# include <ndir.h>
+# endif
+#endif
+
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#if HAVE_STDARG_H
+#include <stdarg.h>
+#else
+#include <varargs.h>
+#endif
+
+#include <errno.h>
+
+ /**/
+/** "macros and variables for registering the OID tree" */
+ /*
+ * prefix for all OIDs
+ */
+
+static FindVarMethod var_mtaEntry;
+static FindVarMethod var_mtaGroupEntry;
+
+static oid mta_variables_oid[] = { 1, 3, 6, 1, 2, 1, 28 };
+
+/*
+ * bits that indicate what's needed to compute the value
+ */
+#define NEEDS_STATS (1 << 6)
+#define NEEDS_DIR (1 << 7)
+#define NEEDS (NEEDS_STATS | NEEDS_DIR)
+
+/*
+ * symbolic names for the magic values
+ */
+enum {
+ MTARECEIVEDMESSAGES = 3 | NEEDS_STATS,
+ MTASTOREDMESSAGES = 4 | NEEDS_DIR,
+ MTATRANSMITTEDMESSAGES = 5 | NEEDS_STATS,
+ MTARECEIVEDVOLUME = 6 | NEEDS_STATS,
+ MTASTOREDVOLUME = 7 | NEEDS_DIR,
+ MTATRANSMITTEDVOLUME = 8 | NEEDS_STATS,
+ MTAGROUPSTOREDMESSAGES = 17 | NEEDS_DIR,
+ MTAGROUPSTOREDVOLUME = 18 | NEEDS_DIR,
+ MTAGROUPRECEIVEDMESSAGES = 19 | NEEDS_STATS,
+ MTAGROUPREJECTEDMESSAGES = 20 | NEEDS_STATS,
+ MTAGROUPTRANSMITTEDMESSAGES = 22 | NEEDS_STATS,
+ MTAGROUPRECEIVEDVOLUME = 23 | NEEDS_STATS,
+ MTAGROUPTRANSMITTEDVOLUME = 25 | NEEDS_STATS,
+ MTAGROUPNAME = 43,
+ MTAGROUPHIERARCHY = 49
+};
+
+/*
+ * structure that tells the agent, which function returns what values
+ */
+static struct variable3 mta_variables[] = {
+ {MTARECEIVEDMESSAGES, ASN_COUNTER, RONLY, var_mtaEntry, 3, {1, 1, 1}},
+ {MTASTOREDMESSAGES, ASN_GAUGE, RONLY, var_mtaEntry, 3, {1, 1, 2}},
+ {MTATRANSMITTEDMESSAGES, ASN_COUNTER, RONLY, var_mtaEntry, 3,
+ {1, 1, 3}},
+ {MTARECEIVEDVOLUME, ASN_COUNTER, RONLY, var_mtaEntry, 3, {1, 1, 4}},
+ {MTASTOREDVOLUME, ASN_GAUGE, RONLY, var_mtaEntry, 3, {1, 1, 5}},
+ {MTATRANSMITTEDVOLUME, ASN_COUNTER, RONLY, var_mtaEntry, 3, {1, 1, 6}},
+
+ {MTAGROUPRECEIVEDMESSAGES, ASN_COUNTER, RONLY, var_mtaGroupEntry, 3,
+ {2, 1, 2}},
+ {MTAGROUPREJECTEDMESSAGES, ASN_COUNTER, RONLY, var_mtaGroupEntry, 3,
+ {2, 1, 3}},
+ {MTAGROUPSTOREDMESSAGES, ASN_GAUGE, RONLY, var_mtaGroupEntry, 3,
+ {2, 1, 4}},
+ {MTAGROUPTRANSMITTEDMESSAGES, ASN_COUNTER, RONLY, var_mtaGroupEntry, 3,
+ {2, 1, 5}},
+ {MTAGROUPRECEIVEDVOLUME, ASN_COUNTER, RONLY, var_mtaGroupEntry, 3,
+ {2, 1, 6}},
+ {MTAGROUPSTOREDVOLUME, ASN_GAUGE, RONLY, var_mtaGroupEntry, 3,
+ {2, 1, 7}},
+ {MTAGROUPTRANSMITTEDVOLUME, ASN_COUNTER, RONLY, var_mtaGroupEntry, 3,
+ {2, 1, 8}},
+ {MTAGROUPNAME, ASN_OCTET_STR, RONLY, var_mtaGroupEntry, 3, {2, 1, 25}},
+ {MTAGROUPHIERARCHY, ASN_INTEGER, RONLY, var_mtaGroupEntry, 3,
+ {2, 1, 31}}
+};
+ /**/
+/** "other macros and structures" */
+ /*
+ * for boolean values
+ */
+#ifndef FALSE
+#define FALSE 0
+#endif
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef BOOL
+#define BOOL short
+#endif
+ /*
+ * important constants
+ */
+#define FILENAMELEN 200 /* maximum length for filenames */
+#define MAXMAILERS 25 /* maximum number of mailers (copied from the sendmail sources) */
+#define MAXQUEUEGROUPS 50 /* maximum # of queue groups (copied from sendmail) */
+#define MNAMELEN 20 /* maximum length of mailernames (copied from the sendmail sources) */
+#define STAT_VERSION_8_9 2 /* version of sendmail V8.9.x statistics files (copied from the sendmail sources) */
+#define STAT_VERSION_8_10 3 /* version of sendmail V8.10.x statistics files (copied from the sendmail sources) */
+#define STAT_VERSION_8_12_QUAR 4 /* version of sendmail V8.12.x statistics files using -D_FFR_QUARANTINE (commercial and edge-living opensource*/
+#define STAT_MAGIC 0x1B1DE /* magic value to identify statistics files from sendmail V8.9.x or higher (copied from the sendmail sources) */
+ /*
+ * structure of sendmail.st file from sendmail V8.10.x (copied from the sendmail sources)
+ */
+
+struct statisticsV8_12_QUAR {
+ int stat_magic; /* magic number */
+ int stat_version; /* stat file version */
+ time_t stat_itime; /* file initialization time */
+ short stat_size; /* size of this structure */
+ long stat_cf; /* # from connections */
+ long stat_ct; /* # to connections */
+ long stat_cr; /* # rejected connections */
+ long stat_nf[MAXMAILERS]; /* # msgs from each mailer */
+ long stat_bf[MAXMAILERS]; /* kbytes from each mailer */
+ long stat_nt[MAXMAILERS]; /* # msgs to each mailer */
+ long stat_bt[MAXMAILERS]; /* kbytes to each mailer */
+ long stat_nr[MAXMAILERS]; /* # rejects by each mailer */
+ long stat_nd[MAXMAILERS]; /* # discards by each mailer */
+ long stat_nq[MAXMAILERS]; /* # quarantines by each mailer*/
+};
+
+ struct statisticsV8_10 {
+ int stat_magic; /* magic number */
+ int stat_version; /* stat file version */
+ time_t stat_itime; /* file initialization time */
+ short stat_size; /* size of this structure */
+ long stat_cf; /* # from connections */
+ long stat_ct; /* # to connections */
+ long stat_cr; /* # rejected connections */
+ long stat_nf[MAXMAILERS]; /* # msgs from each mailer */
+ long stat_bf[MAXMAILERS]; /* kbytes from each mailer */
+ long stat_nt[MAXMAILERS]; /* # msgs to each mailer */
+ long stat_bt[MAXMAILERS]; /* kbytes to each mailer */
+ long stat_nr[MAXMAILERS]; /* # rejects by each mailer */
+ long stat_nd[MAXMAILERS]; /* # discards by each mailer */
+
+};
+
+/*
+ * structure of sendmail.st file from sendmail V8.9.x (copied from the sendmail sources)
+ */
+struct statisticsV8_9 {
+ int stat_magic; /* magic number */
+ int stat_version; /* stat file version */
+ time_t stat_itime; /* file initialization time */
+ short stat_size; /* size of this structure */
+ long stat_nf[MAXMAILERS]; /* # msgs from each mailer */
+ long stat_bf[MAXMAILERS]; /* kbytes from each mailer */
+ long stat_nt[MAXMAILERS]; /* # msgs to each mailer */
+ long stat_bt[MAXMAILERS]; /* kbytes to each mailer */
+ long stat_nr[MAXMAILERS]; /* # rejects by each mailer */
+ long stat_nd[MAXMAILERS]; /* # discards by each mailer */
+};
+
+/*
+ * structure of sendmail.st file from sendmail V8.8.x (copied from the sendmail sources)
+ */
+struct statisticsV8_8 {
+ time_t stat_itime; /* file initialization time */
+ short stat_size; /* size of this structure */
+ long stat_nf[MAXMAILERS]; /* # msgs from each mailer */
+ long stat_bf[MAXMAILERS]; /* kbytes from each mailer */
+ long stat_nt[MAXMAILERS]; /* # msgs to each mailer */
+ long stat_bt[MAXMAILERS]; /* kbytes to each mailer */
+};
+ /**/
+ /*
+ * queue groups (strictly a sendmail 8.12+ thing
+ */
+ struct QDir {
+ char dir[FILENAMELEN + 1];
+ struct QDir *next;
+};
+
+struct QGrp {
+ char *name; /* name of queuegroup */
+
+ time_t last; /* last time we counted */
+ int count; /* # of files */
+ int size; /* size of files */
+
+ struct QDir *dirs; /* directories in queue group */
+};
+
+/** "static variables" */
+
+/*
+ * a list of all the queue groups, NULL terminated
+ */
+static struct QGrp qgrps[MAXQUEUEGROUPS];
+static int nqgrps = 0;
+
+static char sendmailst_fn[FILENAMELEN + 1]; /* name of statistics file */
+static int sendmailst_fh = -1; /* filehandle for statistics file */
+static char sendmailcf_fn[FILENAMELEN + 1]; /* name of sendmails config file */
+static char mailernames[MAXMAILERS][MNAMELEN + 1]; /* array of mailer names */
+static int mailers = MAXMAILERS; /* number of mailer names in array */
+
+static long *stat_nf; /* pointer to stat_nf array within the statistics structure */
+static long *stat_bf; /* pointer to stat_bf array within the statistics structure */
+static long *stat_nt; /* pointer to stat_nt array within the statistics structure */
+static long *stat_bt; /* pointer to stat_bt array within the statistics structure */
+static long *stat_nr; /* pointer to stat_nr array within the statistics structure,
+ * only valid for statistics files from sendmail >=V8.9.0 */
+static long *stat_nd; /* pointer to stat_nd array within the statistics structure,
+ * only valid for statistics files from sendmail >=V8.9.0 */
+static int stats_size; /* size of statistics structure */
+static long stats[sizeof(struct statisticsV8_12_QUAR) / sizeof(long) + 1]; /* buffer for statistics structure */
+static time_t lastreadstats; /* time stats file has been read */
+static long applindex = 1; /* ApplIndex value for OIDs */
+static long stat_cache_time = 5; /* time (in seconds) to wait before reading stats file again */
+static long dir_cache_time = 10; /* time (in seconds) to wait before scanning queue directoy again */
+
+ /**/
+/** static void print_error(int priority, BOOL config, BOOL config_only, char *function, char *format, ...)
+ *
+ * Description:
+ *
+ * Called to print errors. It uses the config_perror or the snmp_log function
+ * depending on whether the config parameter is TRUE or FALSE.
+ *
+ * Parameters:
+ *
+ * priority: priority to be used when calling the snmp_log function
+ *
+ * config: indicates whether this function has been called during the
+ * configuration process or not. If set to TRUE, the function
+ * config_perror will be used to report the error.
+ *
+ * config_only: if set to TRUE, the error will only be printed when function
+ * has been called during the configuration process.
+ *
+ * function: name of the calling function. Used when printing via snmp_log.
+ *
+ * format: format string for the error message
+ *
+ * ...: additional parameters to insert into the error message string
+ *
+ */
+#if HAVE_STDARG_H
+ static void
+print_error(int priority, BOOL config, BOOL config_only,
+ const char *function, const char *format, ...)
+#else
+ static void
+print_error(va_alist)
+ va_dcl
+#endif
+{
+ va_list ap;
+ char buffer[2 * FILENAMELEN + 200]; /* I know, that's not perfectly safe, but since I don't use more
+ * than two filenames in one error message, that should be enough */
+
+#if HAVE_STDARG_H
+ va_start(ap, format);
+#else
+ int priority;
+ BOOL config;
+ BOOL config_only;
+ const char *function;
+ const char *format;
+
+ va_start(ap);
+ priority = va_arg(ap, int);
+ config = va_arg(ap, BOOL);
+ config_only = va_arg(ap, BOOL);
+ function = va_arg(ap, char *);
+ format = va_arg(ap, char *);
+#endif
+
+ vsnprintf(buffer, sizeof(buffer), format, ap);
+
+ if (config) {
+ config_perror(buffer);
+ } else if (!config_only) {
+ snmp_log(priority, "%s: %s\n", function, buffer);
+ }
+ va_end(ap);
+}
+
+ /**/
+/** static void open_sendmailst(BOOL config)
+ *
+ * Description:
+ *
+ * Closes old sendmail.st file, then tries to open the new sendmail.st file
+ * and guess it's version. If it succeeds, it initializes the stat_*
+ * pointers and the stats_size variable.
+ *
+ * Parameters:
+ *
+ * config: TRUE if function has been called during the configuration process
+ *
+ * Returns:
+ *
+ * nothing
+ *
+ */
+ static void
+open_sendmailst(BOOL config)
+{
+ int filelen;
+
+ if (sendmailst_fh != -1) {
+ while (close(sendmailst_fh) == -1 && errno == EINTR) {
+ /*
+ * do nothing
+ */
+ }
+ }
+
+ sendmailst_fh = open(sendmailst_fn, O_RDONLY);
+
+ if (sendmailst_fh == -1) {
+ print_error(LOG_ERR, config, TRUE,
+ "mibII/mta_sendmail.c:open_sendmailst",
+ "could not open file \"%s\"", sendmailst_fn);
+ return;
+ }
+
+ filelen = read(sendmailst_fh, (void *) &stats, sizeof stats);
+
+ if (((struct statisticsV8_10 *) stats)->stat_magic == STAT_MAGIC) {
+
+ if (((struct statisticsV8_12_QUAR *) stats)->stat_version ==
+ STAT_VERSION_8_12_QUAR
+ && ((struct statisticsV8_12_QUAR *) stats)->stat_size ==
+ sizeof(struct statisticsV8_12_QUAR)
+ && filelen == sizeof(struct statisticsV8_12_QUAR)) {
+ DEBUGMSGTL(("mibII/mta_sendmail.c:open_sendmailst",
+ "looks like file \"%s\" has been created by sendmail V8.10.0 or newer\n",
+ sendmailst_fn));
+ stat_nf = (((struct statisticsV8_12_QUAR *) stats)->stat_nf);
+ stat_bf = (((struct statisticsV8_12_QUAR *) stats)->stat_bf);
+ stat_nt = (((struct statisticsV8_12_QUAR *) stats)->stat_nt);
+ stat_bt = (((struct statisticsV8_12_QUAR *) stats)->stat_bt);
+ stat_nr = (((struct statisticsV8_12_QUAR *) stats)->stat_nr);
+ stat_nd = (((struct statisticsV8_12_QUAR *) stats)->stat_nd);
+ stats_size = sizeof(struct statisticsV8_12_QUAR);
+ } else
+
+ if (((struct statisticsV8_10 *) stats)->stat_version ==
+ STAT_VERSION_8_10
+ && ((struct statisticsV8_10 *) stats)->stat_size ==
+ sizeof(struct statisticsV8_10)
+ && filelen == sizeof(struct statisticsV8_10)) {
+ DEBUGMSGTL(("mibII/mta_sendmail.c:open_sendmailst",
+ "looks like file \"%s\" has been created by sendmail V8.10.0 or newer\n",
+ sendmailst_fn));
+ stat_nf = (((struct statisticsV8_10 *) stats)->stat_nf);
+ stat_bf = (((struct statisticsV8_10 *) stats)->stat_bf);
+ stat_nt = (((struct statisticsV8_10 *) stats)->stat_nt);
+ stat_bt = (((struct statisticsV8_10 *) stats)->stat_bt);
+ stat_nr = (((struct statisticsV8_10 *) stats)->stat_nr);
+ stat_nd = (((struct statisticsV8_10 *) stats)->stat_nd);
+ stats_size = sizeof(struct statisticsV8_10);
+
+ } else if (((struct statisticsV8_9 *) stats)->stat_version ==
+ STAT_VERSION_8_9
+ && ((struct statisticsV8_9 *) stats)->stat_size ==
+ sizeof(struct statisticsV8_9)
+ && filelen == sizeof(struct statisticsV8_9)) {
+ DEBUGMSGTL(("mibII/mta_sendmail.c:open_sendmailst",
+ "looks like file \"%s\" has been created by sendmail V8.9.x\n",
+ sendmailst_fn));
+ stat_nf = (((struct statisticsV8_9 *) stats)->stat_nf);
+ stat_bf = (((struct statisticsV8_9 *) stats)->stat_bf);
+ stat_nt = (((struct statisticsV8_9 *) stats)->stat_nt);
+ stat_bt = (((struct statisticsV8_9 *) stats)->stat_bt);
+ stat_nr = (((struct statisticsV8_9 *) stats)->stat_nr);
+ stat_nd = (((struct statisticsV8_9 *) stats)->stat_nd);
+ stats_size = sizeof(struct statisticsV8_9);
+ } else {
+ print_error(LOG_WARNING, config, FALSE,
+ "mibII/mta_sendmail.c:open_sendmailst",
+ "could not guess version of statistics file \"%s\"",
+ sendmailst_fn);
+ while (close(sendmailst_fh) == -1 && errno == EINTR) {
+ /*
+ * do nothing
+ */
+ }
+ sendmailst_fh = -1;
+ }
+ } else {
+ if (((struct statisticsV8_8 *) stats)->stat_size ==
+ sizeof(struct statisticsV8_8)
+ && filelen == sizeof(struct statisticsV8_8)) {
+ DEBUGMSGTL(("mibII/mta_sendmail.c:open_sendmailst",
+ "looks like file \"%s\" has been created by sendmail V8.8.x\n",
+ sendmailst_fn));
+ stat_nf = (((struct statisticsV8_8 *) stats)->stat_nf);
+ stat_bf = (((struct statisticsV8_8 *) stats)->stat_bf);
+ stat_nt = (((struct statisticsV8_8 *) stats)->stat_nt);
+ stat_bt = (((struct statisticsV8_8 *) stats)->stat_bt);
+ stat_nr = (long *) NULL;
+ stat_nd = (long *) NULL;
+ stats_size = sizeof(struct statisticsV8_8);
+ } else {
+ print_error(LOG_WARNING, config, FALSE,
+ "mibII/mta_sendmail.c:open_sendmailst",
+ "could not guess version of statistics file \"%s\"",
+ sendmailst_fn);
+ while (close(sendmailst_fh) == -1 && errno == EINTR) {
+ /*
+ * do nothing
+ */
+ }
+ sendmailst_fh = -1;
+ }
+ }
+}
+
+ /**/ static void
+count_queuegroup(struct QGrp *qg)
+{
+ struct QDir *d;
+ char cwd[200];
+ time_t current_time = time(NULL);
+
+ if (current_time <= (qg->last + dir_cache_time)) {
+ return;
+ }
+
+ if (getcwd(cwd, sizeof cwd) == NULL) {
+ snmp_log(LOG_ERR,
+ "mibII/mta_sendmail.c:count_queuegroup: could not get current working directory\n");
+ return;
+ }
+
+ qg->count = 0;
+ qg->size = 0;
+
+ for (d = qg->dirs; d != NULL; d = d->next) {
+ DIR *dp;
+ struct dirent *dirp;
+ struct stat filestat;
+
+ if (chdir(d->dir) != 0)
+ continue;
+ dp = opendir(".");
+ if (dp == NULL)
+ continue;
+ while ((dirp = readdir(dp)) != NULL) {
+ if (dirp->d_name[0] == 'd' && dirp->d_name[1] == 'f') {
+ if (stat(dirp->d_name, &filestat) == 0) {
+ qg->size += (filestat.st_size + 999) / 1000;
+ }
+ } else if (dirp->d_name[0] == 'q' && dirp->d_name[1] == 'f') {
+ qg->count++;
+ }
+ }
+ closedir(dp);
+ }
+
+ qg->last = current_time;
+
+ chdir(cwd);
+}
+
+/** static void add_queuegroup(const char *name, const char *path)
+ *
+ * Description:
+ *
+ * Adds a queuegroup of 'name' with root path 'path' to the static
+ * list of queue groups. if 'path' ends in a *, we expand it out to
+ * all matching subdirs. also look for 'qf' subdirectories.
+ *
+ * Parameters:
+ *
+ * qgname: name of the queuegroup discovered
+ * path: path of queuegroup discovered
+ */
+static void
+add_queuegroup(const char *name, char *path)
+{
+ char parentdir[FILENAMELEN];
+ char *p;
+ struct QDir *new = NULL;
+ struct QDir *subdir = NULL;
+ DIR *dp;
+ struct dirent *dirp;
+
+ if (nqgrps == MAXQUEUEGROUPS) {
+ /*
+ * xxx error
+ */
+ return;
+ }
+
+ if (strlen(path) > FILENAMELEN - 10) {
+ /*
+ * xxx error
+ */
+ return;
+ }
+
+ p = path + strlen(path) - 1;
+ if (*p == '*') { /* multiple queue dirs */
+ /*
+ * remove *
+ */
+ *p = '\0';
+
+ strcpy(parentdir, path);
+ /*
+ * remove last directory component from parentdir
+ */
+ for (p = parentdir + strlen(parentdir) - 1; p >= parentdir; p--) {
+ if (*p == '/') {
+ *p = '\0';
+ break;
+ }
+ }
+
+ if (p < parentdir) {
+ /*
+ * no trailing / ?!?
+ */
+
+ /*
+ * xxx error
+ */
+ return;
+ }
+ p++;
+
+ /*
+ * p is now the prefix we need to match
+ */
+ if ((dp = opendir(parentdir)) == NULL) {
+ /*
+ * xxx can't open parentdir
+ */
+ return;
+ }
+
+ while ((dirp = readdir(dp)) != NULL) {
+ if (!strncmp(dirp->d_name, p, strlen(p)) &&
+ dirp->d_name[0] != '.') {
+ /*
+ * match, add it to the list
+ */
+
+ /*
+ * single queue directory
+ */
+ subdir = (struct QDir *) malloc(sizeof(struct QDir));
+ snprintf(subdir->dir, FILENAMELEN - 5, "%s/%s", parentdir,
+ dirp->d_name);
+ subdir->next = new;
+ new = subdir;
+ }
+ }
+
+ closedir(dp);
+ } else {
+ /*
+ * single queue directory
+ */
+ new = (struct QDir *) malloc(sizeof(struct QDir));
+ strcpy(new->dir, path);
+ new->next = NULL;
+ }
+
+ /*
+ * check 'new' for /qf directories
+ */
+ for (subdir = new; subdir != NULL; subdir = subdir->next) {
+ char qf[FILENAMELEN + 1];
+
+ snprintf(qf, FILENAMELEN, "%s/qf", subdir->dir);
+ if ((dp = opendir(qf)) != NULL) {
+ /*
+ * it exists !
+ */
+ strcpy(subdir->dir, qf);
+ closedir(dp);
+ }
+ }
+
+ /*
+ * we now have the list of directories in 'new'; create the queuegroup
+ * object
+ */
+ qgrps[nqgrps].name = strdup(name);
+ qgrps[nqgrps].last = 0;
+ qgrps[nqgrps].count = 0;
+ qgrps[nqgrps].size = 0;
+ qgrps[nqgrps].dirs = new;
+
+ nqgrps++;
+}
+
+/** static BOOL read_sendmailcf(BOOL config)
+ *
+ * Description:
+ *
+ * Tries to open the file named in sendmailcf_fn and to get the names of
+ * the mailers, the status file and the mailqueue directories.
+ *
+ * Parameters:
+ *
+ * config: TRUE if function has been called during the configuration process
+ *
+ * Returns:
+ *
+ * TRUE : config file has been successfully opened
+ *
+ * FALSE : could not open config file
+ *
+ */
+
+static BOOL
+read_sendmailcf(BOOL config)
+{
+ FILE *sendmailcf_fp;
+ char line[500];
+ char *filename;
+ char *qgname, *p;
+ int linenr;
+ int linelen;
+ int found_sendmailst = FALSE;
+ int i;
+
+
+ sendmailcf_fp = fopen(sendmailcf_fn, "r");
+ if (sendmailcf_fp == NULL) {
+ print_error(LOG_ERR, config, TRUE,
+ "mibII/mta_sendmail.c:read_sendmailcf",
+ "could not open file \"%s\"", sendmailcf_fn);
+ return FALSE;
+ }
+
+ /*
+ * initializes the standard mailers, which aren't necessarily mentioned in the sendmail.cf file
+ */
+ strcpy(mailernames[0], "prog");
+ strcpy(mailernames[1], "*file*");
+ strcpy(mailernames[2], "*include*");
+ mailers = 3;
+
+ /*
+ * reset queuegroups
+ */
+
+ linenr = 1;
+ while (fgets(line, sizeof line, sendmailcf_fp) != NULL) {
+ linelen = strlen(line);
+
+ if (line[linelen - 1] != '\n') {
+ print_error(LOG_WARNING, config, FALSE,
+ "mibII/mta_sendmail.c:read_sendmailcf",
+ "line %d in config file \"%s is too long\n",
+ linenr, sendmailcf_fn);
+ while (fgets(line, sizeof line, sendmailcf_fp) != NULL && line[strlen(line) - 1] != '\n') { /* skip rest of the line */
+ /*
+ * nothing to do
+ */
+ }
+ linenr++;
+ continue;
+ }
+
+ line[--linelen] = '\0';
+
+ switch (line[0]) {
+
+ case 'M':
+
+ if (mailers < MAXMAILERS) {
+ for (i = 1;
+ line[i] != ',' && !isspace(line[i]) && line[i] != '\0'
+ && i <= MNAMELEN; i++) {
+ mailernames[mailers][i - 1] = line[i];
+ }
+ mailernames[mailers][i - 1] = '\0';
+
+ DEBUGMSGTL(("mibII/mta_sendmail.c:read_sendmailcf",
+ "found mailer \"%s\"\n",
+ mailernames[mailers]));
+
+ for (i = 0;
+ i < mailers
+ && strcmp(mailernames[mailers], mailernames[i]) != 0;
+ i++) {
+ /*
+ * nothing to do
+ */
+ }
+
+ if (i == mailers) {
+ mailers++;
+ } else {
+ if (i < 3) {
+ DEBUGMSGTL(("mibII/mta_sendmail.c:read_sendmailcf",
+ "mailer \"%s\" already existed, but since it's one of the predefined mailers, that's probably nothing to worry about\n",
+ mailernames[mailers]));
+ } else {
+ DEBUGMSGTL(("mibII/mta_sendmail.c:read_sendmailcf",
+ "mailer \"%s\" already existed\n",
+ mailernames[mailers]));
+ }
+ mailernames[mailers][0] = '\0';
+ }
+ } else {
+ print_error(LOG_WARNING, config, FALSE,
+ "mibII/mta_sendmail.c:read_sendmailcf",
+ "found too many mailers in config file \"%s\"",
+ sendmailcf_fn);
+ }
+
+
+ break;
+
+ case 'O':
+ switch (line[1]) {
+ case ' ':
+ /*
+ * long option
+ */
+ if (strncasecmp(line + 2, "StatusFile", 10) == 0) {
+ filename = line + 12;
+ } else if (strncasecmp(line + 2, "QueueDirectory", 14) ==
+ 0) {
+ filename = line + 16;
+ } else {
+ /*
+ * not an option we care about
+ */
+ break;
+ }
+
+ /*
+ * make sure it's the end of the option
+ */
+ if (*filename != ' ' && *filename != '=')
+ break;
+
+ /*
+ * skip WS
+ */
+ while (*filename == ' ')
+ filename++;
+
+ /*
+ * must be O <option> = <file>
+ */
+ if (*filename++ != '=') {
+ print_error(LOG_WARNING, config, FALSE,
+ "mibII/mta_sendmail.c:read_sendmailcf",
+ "line %d in config file \"%s\" ist missing an '='",
+ linenr, sendmailcf_fn);
+ break;
+ }
+
+ /*
+ * skip WS
+ */
+ while (*filename == ' ')
+ filename++;
+
+ if (strlen(filename) > FILENAMELEN) {
+ print_error(LOG_WARNING, config, FALSE,
+ "mibII/mta_sendmail.c:read_sendmailcf",
+ "line %d config file \"%s\" contains a filename that's too long",
+ linenr, sendmailcf_fn);
+ break;
+ }
+
+ if (strncasecmp(line + 2, "StatusFile", 10) == 0) {
+ strncpy(sendmailst_fn, filename, sizeof(sendmailst_fn));
+ sendmailst_fn[ sizeof(sendmailst_fn)-1 ] = 0;
+ found_sendmailst = TRUE;
+ DEBUGMSGTL(("mibII/mta_sendmail.c:read_sendmailcf",
+ "found statatistics file \"%s\"\n",
+ sendmailst_fn));
+ } else if (strncasecmp(line + 2, "QueueDirectory", 14) ==
+ 0) {
+ add_queuegroup("mqueue", filename);
+ } else {
+ print_error(LOG_CRIT, config, FALSE,
+ "mibII/mta_sendmail.c:read_sendmailcf",
+ "This shouldn't happen.");
+ abort();
+ }
+ break;
+
+ case 'S':
+ if (strlen(line + 2) > FILENAMELEN) {
+ print_error(LOG_WARNING, config, FALSE,
+ "mibII/mta_sendmail.c:read_sendmailcf",
+ "line %d config file \"%s\" contains a filename that's too long",
+ linenr, sendmailcf_fn);
+ break;
+ }
+ strcpy(sendmailst_fn, line + 2);
+ found_sendmailst = TRUE;
+ DEBUGMSGTL(("mibII/mta_sendmail.c:read_sendmailcf",
+ "found statatistics file \"%s\"\n",
+ sendmailst_fn));
+ break;
+
+ case 'Q':
+ if (strlen(line + 2) > FILENAMELEN) {
+ print_error(LOG_WARNING, config, FALSE,
+ "mibII/mta_sendmail.c:read_sendmailcf",
+ "line %d config file \"%s\" contains a filename that's too long",
+ linenr, sendmailcf_fn);
+ break;
+ }
+
+ add_queuegroup("mqueue", line + 2);
+ break;
+ }
+ break;
+
+ case 'Q':
+ /*
+ * found a queue group
+ */
+ p = qgname = line + 1;
+ while (*p && *p != ',') {
+ p++;
+ }
+ if (*p == '\0') {
+ print_error(LOG_WARNING, config, FALSE,
+ "mibII/mta_sendmail.c:read_sendmailcf",
+ "line %d config file \"%s\" contains a weird queuegroup",
+ linenr, sendmailcf_fn);
+ break;
+ }
+
+ /*
+ * look for the directory
+ */
+ filename = NULL;
+ *p++ = '\0';
+ while (*p != '\0') {
+ /*
+ * skip WS
+ */
+ while (*p && *p == ' ')
+ p++;
+
+ if (*p == 'P') { /* found path */
+ while (*p && *p != '=')
+ p++;
+ if (*p++ != '=') {
+ print_error(LOG_WARNING, config, FALSE,
+ "mibII/mta_sendmail.c:read_sendmailcf",
+ "line %d config file \"%s\" contains a weird queuegroup",
+ linenr, sendmailcf_fn);
+ break;
+ }
+ filename = p;
+
+ /*
+ * find next ',', turn into \0
+ */
+ while (*p && *p != ',')
+ p++;
+ *p = '\0';
+ }
+
+ /*
+ * skip to next ,
+ */
+ while (*p && *p != ',') {
+ p++;
+ }
+ }
+
+ /*
+ * we found a directory
+ */
+ if (filename) {
+ add_queuegroup(qgname, filename);
+ } else {
+ print_error(LOG_WARNING, config, FALSE,
+ "mibII/mta_sendmail.c:read_sendmailcf",
+ "line %d config file \"%s\" contains a weird queuegroup: no directory",
+ linenr, sendmailcf_fn);
+ }
+
+ break;
+ }
+
+ linenr++;
+ }
+
+ for (i = 0; i < 10 && fclose(sendmailcf_fp) != 0; i++) {
+ /*
+ * nothing to do
+ */
+ }
+
+ for (i = mailers; i < MAXMAILERS; i++) {
+ mailernames[i][0] = '\0';
+ }
+
+ if (found_sendmailst) {
+ open_sendmailst(config);
+ }
+
+ return TRUE;
+}
+
+ /**/
+/** static void mta_sendmail_parse_config(const char* token, char *line)
+ *
+ * Description:
+ *
+ * Called by the agent for each configuration line that belongs to this module.
+ * The possible tokens are:
+ *
+ * sendmail_config - filename of the sendmail configutarion file
+ * sendmail_stats - filename of the sendmail statistics file
+ * sendmail_queue - name of the sendmail mailqueue directory
+ * sendmail_index - the ApplIndex to use for the table
+ * sendmail_stats_t - the time (in seconds) to cache statistics
+ * sendmail_queue_t - the time (in seconds) to cache the directory scanning results
+ *
+ * For "sendmail_config", "sendmail_stats" and "sendmail_queue", the copy_nword
+ * function is used to copy the filename.
+ *
+ * Parameters:
+ *
+ * token: first word of the line
+ *
+ * line: rest of the line
+ *
+ * Returns:
+ *
+ * nothing
+ *
+ */
+ static void
+mta_sendmail_parse_config(const char *token, char *line)
+{
+ if (strlen(line) > FILENAMELEN) { /* Might give some false alarm, but better to be safe than sorry */
+ config_perror("line too long");
+ return;
+ }
+
+ if (strcasecmp(token, "sendmail_stats") == 0) {
+ while (isspace(*line)) {
+ line++;
+ }
+ copy_nword(line, sendmailst_fn, sizeof(sendmailst_fn));
+
+ open_sendmailst(TRUE);
+
+ if (sendmailst_fh == -1) {
+ char str[FILENAMELEN + 50];
+ sprintf(str, "couldn't open file \"%s\"", sendmailst_fn);
+ config_perror(str);
+ return;
+ }
+
+ DEBUGMSGTL(("mibII/mta_sendmail.c:mta_sendmail_parse_config",
+ "opened statistics file \"%s\"\n", sendmailst_fn));
+ return;
+ } else if (strcasecmp(token, "sendmail_config") == 0) {
+ while (isspace(*line)) {
+ line++;
+ }
+ copy_nword(line, sendmailcf_fn, sizeof(sendmailcf_fn));
+
+ read_sendmailcf(TRUE);
+
+ DEBUGMSGTL(("mibII/mta_sendmail.c:mta_sendmail_parse_config",
+ "read config file \"%s\"\n", sendmailcf_fn));
+ return;
+ } else if (strcasecmp(token, "sendmail_queue") == 0) {
+ while (isspace(*line)) {
+ line++;
+ }
+ add_queuegroup("mqueue", line);
+
+ return;
+ } else if (strcasecmp(token, "sendmail_index") == 0) {
+ while (isspace(*line)) {
+ line++;
+ }
+ applindex = atol(line);
+ if (applindex < 1) {
+ config_perror("invalid index number");
+ applindex = 1;
+ }
+ } else if (strcasecmp(token, "sendmail_stats_t") == 0) {
+ while (isspace(*line)) {
+ line++;
+ }
+ stat_cache_time = atol(line);
+ if (stat_cache_time < 1) {
+ config_perror("invalid cache time");
+ applindex = 5;
+ }
+ } else if (strcasecmp(token, "sendmail_queue_t") == 0) {
+ while (isspace(*line)) {
+ line++;
+ }
+ dir_cache_time = atol(line);
+ if (dir_cache_time < 1) {
+ config_perror("invalid cache time");
+ applindex = 10;
+ }
+ } else {
+ config_perror
+ ("mibII/mta_sendmail.c says: What should I do with that token? Did you ./configure the agent properly?");
+ }
+
+ return;
+}
+
+ /**/
+/** void init_mta_sendmail(void)
+ *
+ * Description:
+ *
+ * Called by the agent to initialize the module. The function will register
+ * the OID tree and the config handler and try some default values for the
+ * sendmail.cf and sendmail.st files and for the mailqueue directory.
+ *
+ * Parameters:
+ *
+ * none
+ *
+ * Returns:
+ *
+ * nothing
+ *
+ */
+ void
+init_mta_sendmail(void)
+{
+ REGISTER_MIB("mibII/mta_sendmail", mta_variables, variable3,
+ mta_variables_oid);
+
+ snmpd_register_config_handler("sendmail_config",
+ mta_sendmail_parse_config, NULL, "file");
+ snmpd_register_config_handler("sendmail_stats",
+ mta_sendmail_parse_config, NULL, "file");
+ snmpd_register_config_handler("sendmail_queue",
+ mta_sendmail_parse_config, NULL,
+ "directory");
+ snmpd_register_config_handler("sendmail_index",
+ mta_sendmail_parse_config, NULL,
+ "integer");
+ snmpd_register_config_handler("sendmail_stats_t",
+ mta_sendmail_parse_config, NULL,
+ "cachetime/sec");
+ snmpd_register_config_handler("sendmail_queue_t",
+ mta_sendmail_parse_config, NULL,
+ "cachetime/sec");
+
+ strcpy(sendmailcf_fn, "/etc/mail/sendmail.cf");
+ if (read_sendmailcf(FALSE) == FALSE) {
+ strcpy(sendmailcf_fn, "/etc/sendmail.cf");
+ read_sendmailcf(FALSE);
+ }
+
+ if (sendmailst_fh == -1) {
+ strcpy(sendmailst_fn, "/etc/mail/statistics");
+ open_sendmailst(FALSE);
+ if (sendmailst_fh == -1) {
+ strcpy(sendmailst_fn, "/etc/mail/sendmail.st");
+ open_sendmailst(FALSE);
+ }
+ }
+
+}
+
+ /**/
+/** unsigned char *var_mtaEntry(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method)
+ *
+ * Description:
+ *
+ * Called by the agent in order to get the values for the mtaTable.
+ *
+ * Parameters:
+ *
+ * see agent documentation
+ *
+ * Returns:
+ *
+ * see agent documentation
+ *
+ */
+unsigned char *
+var_mtaEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+
+
+ static long long_ret;
+ auto int i;
+ auto int result;
+ auto time_t current_time;
+ int global_count = 0;
+ int global_size = 0;
+
+ if (exact) {
+ if (*length != vp->namelen + 1) {
+ return NULL;
+ }
+ result =
+ snmp_oid_compare(name, *length - 1, vp->name, vp->namelen);
+ if (result != 0 || name[*length - 1] != applindex) {
+ return NULL;
+ }
+ } else {
+ if (*length <= vp->namelen) {
+ result = -1;
+ } else {
+ result =
+ snmp_oid_compare(name, *length - 1, vp->name, vp->namelen);
+ }
+ if (result > 0) {
+ return NULL;
+ }
+ if (result == 0 && name[*length - 1] >= applindex) {
+ return NULL;
+ }
+ if (result < 0) {
+ memcpy(name, vp->name, (int) vp->namelen * (int) sizeof *name);
+ *length = vp->namelen + 1;
+ }
+ name[vp->namelen] = applindex;
+ }
+
+ *write_method = (WriteMethod *) NULL;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ if (vp->magic & NEEDS_STATS) {
+ if (sendmailst_fh == -1)
+ return NULL;
+ current_time = time(NULL);
+ if (current_time == (time_t) - 1
+ || current_time > lastreadstats + stat_cache_time) {
+ if (lseek(sendmailst_fh, 0, SEEK_SET) == -1) {
+ snmp_log(LOG_ERR,
+ "mibII/mta_sendmail.c:var_mtaEntry: could not rewind to the beginning of file \"%s\"\n",
+ sendmailst_fn);
+ return NULL;
+ }
+ if (read(sendmailst_fh, (void *) &stats, stats_size) !=
+ stats_size) {
+ snmp_log(LOG_ERR,
+ "mibII/mta_sendmail.c:var_mtaEntry: could not read from statistics file \"%s\"\n",
+ sendmailst_fn);
+ return NULL;
+ }
+ if (current_time != (time_t) - 1) {
+ lastreadstats = current_time;
+ }
+ }
+ }
+
+ if (vp->magic & NEEDS_DIR) {
+ global_count = 0;
+ global_size = 0;
+ /*
+ * count all queue group messages
+ */
+ for (i = 0; i < nqgrps; i++) {
+ count_queuegroup(&qgrps[i]);
+ global_count += qgrps[i].count;
+ global_size += qgrps[i].size;
+ }
+ }
+
+ switch (vp->magic) {
+
+ case MTARECEIVEDMESSAGES:
+
+ long_ret = 0;
+ for (i = 0; i < MAXMAILERS; i++) {
+ long_ret += stat_nf[i];
+ }
+ return (unsigned char *) &long_ret;
+
+ case MTASTOREDMESSAGES:
+
+ long_ret = global_count;
+ return (unsigned char *) &long_ret;
+
+ case MTATRANSMITTEDMESSAGES:
+
+ long_ret = 0;
+ for (i = 0; i < MAXMAILERS; i++) {
+ long_ret += stat_nt[i];
+ }
+ return (unsigned char *) &long_ret;
+
+ case MTARECEIVEDVOLUME:
+
+ long_ret = 0;
+ for (i = 0; i < MAXMAILERS; i++) {
+ long_ret += stat_bf[i];
+ }
+ return (unsigned char *) &long_ret;
+
+ case MTASTOREDVOLUME:
+
+ long_ret = global_size;
+ return (unsigned char *) &long_ret;
+
+ case MTATRANSMITTEDVOLUME:
+
+ long_ret = 0;
+ for (i = 0; i < MAXMAILERS; i++) {
+ long_ret += stat_bt[i];
+ }
+ return (unsigned char *) &long_ret;
+
+ default:
+ snmp_log(LOG_ERR,
+ "mibII/mta_sendmail.c:mtaEntry: unknown magic value\n");
+ }
+ return NULL;
+}
+
+ /**/
+/** unsigned char *var_mtaGroupEntry(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method)
+ *
+ * Description:
+ *
+ * Called by the agent in order to get the values for the mtaGroupTable.
+ *
+ * Parameters:
+ *
+ * see agent documentation
+ *
+ * Returns:
+ *
+ * see agent documentation
+ *
+ */
+unsigned char *
+var_mtaGroupEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ static long long_ret;
+ auto long row;
+ auto int result;
+ auto time_t current_time;
+
+
+ if (exact) {
+ if (*length != vp->namelen + 2) {
+ return NULL;
+ }
+ result =
+ snmp_oid_compare(name, *length - 2, vp->name, vp->namelen);
+ if (result != 0 || name[*length - 2] != applindex
+ || name[*length - 1] <= 0
+ || name[*length - 1] > mailers + nqgrps) {
+ return NULL;
+ }
+ } else {
+ if (*length < vp->namelen) {
+ result = -1;
+ } else {
+ result =
+ snmp_oid_compare(name, vp->namelen, vp->name, vp->namelen);
+ }
+
+ if (result > 0) {
+ /*
+ * OID prefix too large
+ */
+ return NULL;
+ }
+
+ if (result == 0) {
+ /*
+ * OID prefix matches exactly,...
+ */
+ if (*length > vp->namelen && name[vp->namelen] > applindex) {
+ /*
+ * ... but ApplIndex too large
+ */
+ return NULL;
+ }
+ if (*length > vp->namelen && name[vp->namelen] == applindex) {
+ /*
+ * ... ApplIndex ok,...
+ */
+ if (*length > vp->namelen + 1
+ && name[vp->namelen + 1] >= 1) {
+ if (name[vp->namelen + 1] >= mailers + nqgrps) {
+ /*
+ * ... but mailernr too large
+ */
+ return NULL;
+ } else {
+ name[vp->namelen + 1]++;
+ }
+ } else {
+ name[vp->namelen + 1] = 1;
+ }
+ } else {
+ name[vp->namelen] = applindex;
+ name[vp->namelen + 1] = 1;
+ }
+ } else { /* OID prefix too small */
+ memcpy(name, vp->name, (int) vp->namelen * (int) sizeof *name);
+ name[vp->namelen] = applindex;
+ name[vp->namelen + 1] = 1;
+ }
+ *length = vp->namelen + 2;
+ }
+
+ *write_method = 0;
+ *var_len = sizeof(long); /* default to 'long' results */
+
+ if (vp->magic & NEEDS_STATS) {
+ if (sendmailst_fh == -1)
+ return NULL;
+ current_time = time(NULL);
+ if (current_time == (time_t) - 1 ||
+ current_time > lastreadstats + stat_cache_time) {
+ if (lseek(sendmailst_fh, 0, SEEK_SET) == -1) {
+ snmp_log(LOG_ERR,
+ "mibII/mta_sendmail.c:var_mtaGroupEntry: could not rewind to beginning of file \"%s\"\n",
+ sendmailst_fn);
+ return NULL;
+ }
+ if (read(sendmailst_fh, (void *) &stats, stats_size) !=
+ stats_size) {
+ snmp_log(LOG_ERR,
+ "mibII/mta_sendmail.c:var_mtaGroupEntry: could not read statistics file \"%s\"\n",
+ sendmailst_fn);
+ return NULL;
+ }
+ if (current_time != (time_t) - 1) {
+ lastreadstats = current_time;
+ }
+ }
+ }
+
+ row = name[*length - 1] - 1;
+
+ /*
+ * if this is a mailer but we're asking for queue-group only info,
+ * bump there
+ */
+ if (!exact && row < mailers && (vp->magic == MTAGROUPSTOREDMESSAGES ||
+ vp->magic == MTAGROUPSTOREDVOLUME)) {
+ row = mailers;
+ name[*length - 1] = row + 1;
+ }
+
+ if (row < mailers) {
+ switch (vp->magic) {
+ case MTAGROUPRECEIVEDMESSAGES:
+ long_ret = (long) stat_nf[row];
+ return (unsigned char *) &long_ret;
+
+ case MTAGROUPREJECTEDMESSAGES:
+ if (stat_nr != NULL && stat_nd != NULL) {
+ long_ret = (long) (stat_nr[row] + stat_nd[row]); /* Number of rejected plus number of discarded messages */
+ return (unsigned char *) &long_ret;
+ } else {
+ return NULL;
+ }
+
+ case MTAGROUPTRANSMITTEDMESSAGES:
+ long_ret = (long) stat_nt[row];
+ return (unsigned char *) &long_ret;
+
+ case MTAGROUPRECEIVEDVOLUME:
+ long_ret = (long) stat_bf[row];
+ return (unsigned char *) &long_ret;
+
+ case MTAGROUPTRANSMITTEDVOLUME:
+ long_ret = (long) stat_bt[row];
+ return (unsigned char *) &long_ret;
+
+ case MTAGROUPNAME:
+ *var_len = strlen(mailernames[row]);
+ return (unsigned char *) (*var_len >
+ 0 ? mailernames[row] : NULL);
+
+ case MTAGROUPHIERARCHY:
+ long_ret = (long) -1;
+ return (unsigned char *) &long_ret;
+
+ default:
+ return NULL;
+ }
+ } else {
+ /*
+ * this is the queue group part of the table
+ */
+ row -= mailers;
+ switch (vp->magic) {
+ case MTAGROUPSTOREDMESSAGES:
+ count_queuegroup(&qgrps[row]);
+ long_ret = (long) qgrps[row].count;
+ return (unsigned char *) &long_ret;
+
+ case MTAGROUPSTOREDVOLUME:
+ count_queuegroup(&qgrps[row]);
+ long_ret = (long) qgrps[row].size;
+ return (unsigned char *) &long_ret;
+
+ case MTAGROUPNAME:
+ *var_len = strlen(qgrps[row].name);
+ return (unsigned char *) (*var_len >
+ 0 ? qgrps[row].name : NULL);
+
+ case MTAGROUPHIERARCHY:
+ long_ret = (long) -2;
+ return (unsigned char *) &long_ret;
+
+ default:
+ return NULL;
+ }
+
+ }
+ return NULL;
+}
+
+ /**/
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/mta_sendmail.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/mta_sendmail.h
new file mode 100644
index 0000000000..8368ca9f00
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/mta_sendmail.h
@@ -0,0 +1,9 @@
+#ifndef _MIBGROUP_MTA_H
+#define _MIBGROUP_MTA_H
+
+config_add_mib(MTA-MIB)
+config_add_mib(NETWORK-SERVICES-MIB)
+
+ void init_mta_sendmail(void);
+
+#endif /* _MIBGROUP_MTA_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/route_headers.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/route_headers.h
new file mode 100644
index 0000000000..34830f2799
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/route_headers.h
@@ -0,0 +1,180 @@
+#if defined(NETSNMP_CAN_USE_SYSCTL)
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <syslog.h>
+#include <time.h>
+
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/queue.h>
+#include <sys/socket.h>
+#include <sys/sysctl.h>
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+#include <net/if_dl.h>
+#if HAVE_SYS_STREAM_H
+#include <sys/stream.h>
+#endif
+#include <net/route.h>
+#include <netinet/in.h>
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "ip.h"
+#include "kernel.h"
+#include "interfaces.h"
+#include "struct.h"
+#include "util_funcs.h"
+
+#else /* !NETSNMP_CAN_USE_SYSCTL */
+
+#define GATEWAY /* MultiNet is always configured this way! */
+#include <stdio.h>
+#include <sys/types.h>
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# if defined (WIN32) || defined (cygwin)
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#if HAVE_SYSLOG_H
+#include <syslog.h>
+#endif
+#if HAVE_MACHINE_PARAM_H
+#include <machine/param.h>
+#endif
+#if HAVE_SYS_MBUF_H
+#include <sys/mbuf.h>
+#endif
+#if HAVE_NET_IF_H
+#include <net/if.h>
+#endif
+#ifdef HAVE_NET_IF_VAR_H
+#include <net/if_var.h>
+#endif
+#if HAVE_SYS_HASHING_H
+#include <sys/hashing.h>
+#endif
+#if HAVE_NETINET_IN_VAR_H
+#include <netinet/in_var.h>
+#endif
+#define KERNEL /* to get routehash and RTHASHSIZ */
+#if HAVE_SYS_STREAM_H
+#include <sys/stream.h>
+#endif
+#if HAVE_NET_ROUTE_H
+#include <net/route.h>
+#endif
+#undef KERNEL
+#ifdef RTENTRY_4_4
+#ifndef STRUCT_RTENTRY_HAS_RT_UNIT
+#define rt_unit rt_refcnt /* Reuse this field for device # */
+#endif
+#ifndef STRUCT_RTENTRY_HAS_RT_DST
+#define rt_dst rt_nodes->rn_key
+#endif
+#else /* RTENTRY_4_3 */
+#ifndef STRUCT_RTENTRY_HAS_RT_DST
+#define rt_dst rt_nodes->rn_key
+#endif
+#ifndef STRUCT_RTENTRY_HAS_RT_HASH
+#define rt_hash rt_pad1
+#endif
+#ifndef STRUCT_RTENTRY_HAS_RT_REFCNT
+#ifndef hpux10
+#define rt_refcnt rt_pad2
+#endif
+#endif
+#ifndef STRUCT_RTENTRY_HAS_RT_USE
+#define rt_use rt_pad3
+#endif
+#ifndef STRUCT_RTENTRY_HAS_RT_UNIT
+#define rt_unit rt_refcnt /* Reuse this field for device # */
+#endif
+#endif
+#ifndef NULL
+#define NULL 0
+#endif
+#if HAVE_KVM_OPENFILES
+#include <fcntl.h>
+#endif
+#if HAVE_KVM_H
+#include <kvm.h>
+#endif
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_INET_MIB2_H
+#include <inet/mib2.h>
+#endif
+#if HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif
+#if HAVE_NET_IF_DL_H
+#ifndef dynix
+#include <net/if_dl.h>
+#else
+#include <sys/net/if_dl.h>
+#endif
+#endif
+
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#if HAVE_NLIST_H
+#include <nlist.h>
+#endif
+
+#ifdef solaris2
+#include "kernel_sunos5.h"
+#endif
+
+#ifdef HAVE_SYS_SYSCTL_H
+# ifdef CTL_NET
+# ifdef PF_ROUTE
+# ifdef NET_RT_DUMP
+# define USE_SYSCTL_ROUTE_DUMP
+# endif
+# endif
+# endif
+#endif
+
+#ifdef cygwin
+#include <windows.h>
+#endif
+
+#endif /* !NETSNMP_CAN_USE_SYSCTL */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/route_write.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/route_write.c
new file mode 100644
index 0000000000..6f4d8ca586
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/route_write.c
@@ -0,0 +1,759 @@
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+#include <net-snmp/net-snmp-config.h>
+
+#include <sys/types.h>
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#if HAVE_SYS_FILE_H
+#include <sys/file.h>
+#endif
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#if HAVE_SYS_SOCKIO_H
+#include <sys/sockio.h>
+#endif
+#if HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#if HAVE_SYS_MBUF_H
+#include <sys/mbuf.h>
+#endif
+
+
+#if HAVE_SYS_STREAM_H
+#include <sys/stream.h>
+#endif
+#if HAVE_NET_ROUTE_H
+#include <net/route.h>
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#if HAVE_NETDB_H
+#include <netdb.h>
+#endif
+
+#include <errno.h>
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <stdio.h>
+#include <ctype.h>
+#if HAVE_STRING_H
+#include <string.h>
+#endif
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "ip.h"
+#include "route_write.h"
+
+#ifdef cygwin
+#include <windows.h>
+#endif
+
+#if !defined (WIN32) && !defined (cygwin)
+
+#ifndef STRUCT_RTENTRY_HAS_RT_DST
+#define rt_dst rt_nodes->rn_key
+#endif
+#ifndef STRUCT_RTENTRY_HAS_RT_HASH
+#define rt_hash rt_pad1
+#endif
+
+#ifdef irix6
+#define SIOCADDRT SIOCADDMULTI
+#define SIOCDELRT SIOCDELMULTI
+#endif
+
+#ifdef linux
+#define NETSNMP_ROUTE_WRITE_PROTOCOL PF_ROUTE
+#else
+#define NETSNMP_ROUTE_WRITE_PROTOCOL 0
+#endif
+
+int
+addRoute(u_long dstip, u_long gwip, u_long iff, u_short flags)
+{
+#if defined SIOCADDRT && !defined(irix6)
+ struct sockaddr_in dst;
+ struct sockaddr_in gateway;
+ int s, rc;
+ RTENTRY route;
+
+ s = socket(AF_INET, SOCK_RAW, NETSNMP_ROUTE_WRITE_PROTOCOL);
+ if (s < 0) {
+ snmp_log_perror("socket");
+ return -1;
+ }
+
+
+ flags |= RTF_UP;
+
+ dst.sin_family = AF_INET;
+ dst.sin_addr.s_addr = htonl(dstip);
+
+
+ gateway.sin_family = AF_INET;
+ gateway.sin_addr.s_addr = htonl(gwip);
+
+ memcpy(&route.rt_dst, &dst, sizeof(struct sockaddr_in));
+ memcpy(&route.rt_gateway, &gateway, sizeof(struct sockaddr_in));
+
+ route.rt_flags = flags;
+#ifndef RTENTRY_4_4
+ route.rt_hash = iff;
+#endif
+
+ rc = ioctl(s, SIOCADDRT, (caddr_t) & route);
+ close(s);
+ if (rc < 0)
+ snmp_log_perror("ioctl");
+ return rc;
+
+#else /* SIOCADDRT */
+ return -1;
+#endif
+}
+
+
+
+int
+delRoute(u_long dstip, u_long gwip, u_long iff, u_short flags)
+{
+#if defined SIOCDELRT && !defined(irix6)
+
+ struct sockaddr_in dst;
+ struct sockaddr_in gateway;
+ int s, rc;
+ RTENTRY route;
+
+ s = socket(AF_INET, SOCK_RAW, NETSNMP_ROUTE_WRITE_PROTOCOL);
+ if (s < 0) {
+ snmp_log_perror("socket");
+ return 0;
+ }
+
+
+ flags |= RTF_UP;
+
+ dst.sin_family = AF_INET;
+ dst.sin_addr.s_addr = htonl(dstip);
+
+
+ gateway.sin_family = AF_INET;
+ gateway.sin_addr.s_addr = htonl(gwip);
+
+ memcpy(&route.rt_dst, &dst, sizeof(struct sockaddr_in));
+ memcpy(&route.rt_gateway, &gateway, sizeof(struct sockaddr_in));
+
+ route.rt_flags = flags;
+#ifndef RTENTRY_4_4
+ route.rt_hash = iff;
+#endif
+
+ rc = ioctl(s, SIOCDELRT, (caddr_t) & route);
+ close(s);
+ return rc;
+
+#else /* SIOCDELRT */
+ return 0;
+#endif
+}
+
+
+#ifndef STRUCT_RTENTRY_HAS_RT_DST
+#undef rt_dst
+#endif
+
+
+#define MAX_CACHE 8
+
+struct rtent {
+
+ u_long in_use;
+ u_long old_dst;
+ u_long old_nextIR;
+ u_long old_ifix;
+ u_long old_flags;
+
+ u_long rt_dst; /* main entries */
+ u_long rt_ifix;
+ u_long rt_metric1;
+ u_long rt_nextIR;
+ u_long rt_type;
+ u_long rt_proto;
+
+
+ u_long xx_dst; /* shadow entries */
+ u_long xx_ifix;
+ u_long xx_metric1;
+ u_long xx_nextIR;
+ u_long xx_type;
+ u_long xx_proto;
+};
+
+struct rtent rtcache[MAX_CACHE];
+
+struct rtent *
+findCacheRTE(u_long dst)
+{
+ int i;
+
+ for (i = 0; i < MAX_CACHE; i++) {
+
+ if (rtcache[i].in_use && (rtcache[i].rt_dst == dst)) { /* valid & match? */
+ return (&rtcache[i]);
+ }
+ }
+ return 0;
+}
+
+struct rtent *
+newCacheRTE(void)
+{
+
+ int i;
+
+ for (i = 0; i < MAX_CACHE; i++) {
+
+ if (!rtcache[i].in_use) {
+ rtcache[i].in_use = 1;
+ return (&rtcache[i]);
+ }
+ }
+ return 0;
+
+}
+
+int
+delCacheRTE(u_long dst)
+{
+ struct rtent *rt;
+
+ rt = findCacheRTE(dst);
+ if (!rt) {
+ return 0;
+ }
+
+ rt->in_use = 0;
+ return 1;
+}
+
+
+struct rtent *
+cacheKernelRTE(u_long dst)
+{
+ return 0; /* for now */
+ /*
+ * ......
+ */
+}
+
+/*
+ * If statP is non-NULL, the referenced object is at that location.
+ * If statP is NULL and ap is non-NULL, the instance exists, but not this variable.
+ * If statP is NULL and ap is NULL, then neither this instance nor the variable exists.
+ */
+
+int
+write_rte(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len, u_char * statP, oid * name, size_t length)
+{
+ struct rtent *rp;
+ int var;
+ long val;
+ u_long dst;
+ char buf[8];
+ u_short flags;
+ int oldty;
+
+ /*
+ * object identifier is of form:
+ * 1.3.6.1.2.1.4.21.1.X.A.B.C.D , where A.B.C.D is IP address.
+ * IPADDR starts at offset 10.
+ */
+
+ if (length != 14) {
+ snmp_log(LOG_ERR, "length error\n");
+ return SNMP_ERR_NOCREATION;
+ }
+
+#ifdef solaris2 /* not implemented */
+ return SNMP_ERR_NOTWRITABLE;
+#endif
+
+ var = name[9];
+
+ dst = *((u_long *) & name[10]);
+
+ rp = findCacheRTE(dst);
+
+ if (!rp) {
+ rp = cacheKernelRTE(dst);
+ }
+
+
+ if (action == RESERVE1 && !rp) {
+
+ rp = newCacheRTE();
+ if (!rp) {
+ snmp_log(LOG_ERR, "newCacheRTE");
+ return SNMP_ERR_RESOURCEUNAVAILABLE;
+ }
+ rp->rt_dst = dst;
+ rp->rt_type = rp->xx_type = 2;
+
+ } else if (action == COMMIT) {
+
+
+ } else if (action == FREE) {
+ if (rp && rp->rt_type == 2) { /* was invalid before */
+ delCacheRTE(dst);
+ }
+ }
+
+ netsnmp_assert(NULL != rp); /* should have found or created rp */
+
+
+ switch (var) {
+
+ case IPROUTEDEST:
+
+ if (action == RESERVE1) {
+
+ if (var_val_type != ASN_IPADDRESS) {
+ snmp_log(LOG_ERR, "not IP address");
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ memcpy(buf, var_val, (var_val_len > 8) ? 8 : var_val_len);
+
+ if (var_val_type != ASN_IPADDRESS) {
+ snmp_log(LOG_ERR, "not IP address 2");
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ rp->xx_dst = *((u_long *) buf);
+
+
+ } else if (action == COMMIT) {
+ rp->rt_dst = rp->xx_dst;
+ }
+ break;
+
+ case IPROUTEMETRIC1:
+
+ if (action == RESERVE1) {
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR, "not int1");
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ val = *((long *) var_val);
+
+ if (val < -1) {
+ snmp_log(LOG_ERR, "not right1");
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ rp->xx_metric1 = val;
+
+ } else if (action == RESERVE2) {
+
+ if ((rp->xx_metric1 == 1) && (rp->xx_type != 4)) {
+ snmp_log(LOG_ERR, "reserve2 failed\n");
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ } else if (action == COMMIT) {
+ rp->rt_metric1 = rp->xx_metric1;
+ }
+ break;
+
+ case IPROUTEIFINDEX:
+
+ if (action == RESERVE1) {
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR, "not right2");
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ val = *((long *) var_val);
+
+ if (val <= 0) {
+ snmp_log(LOG_ERR, "not right3");
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ rp->xx_ifix = val;
+
+ } else if (action == COMMIT) {
+ rp->rt_ifix = rp->xx_ifix;
+ }
+ break;
+
+ case IPROUTENEXTHOP:
+
+ if (action == RESERVE1) {
+
+ if (var_val_type != ASN_IPADDRESS) {
+ snmp_log(LOG_ERR, "not right4");
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ memcpy(buf, var_val, (var_val_len > 8) ? 8 : var_val_len);
+
+ if (var_val_type != ASN_IPADDRESS) {
+ snmp_log(LOG_ERR, "not right5");
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ rp->xx_nextIR = *((u_long *) buf);
+
+ } else if (action == COMMIT) {
+ rp->rt_nextIR = rp->xx_nextIR;
+ }
+
+
+ case IPROUTETYPE:
+
+ /*
+ * flag meaning:
+ *
+ * IPROUTEPROTO (rt_proto): none: (cant set == 3 (netmgmt))
+ *
+ * IPROUTEMETRIC1: 1 iff gateway, 0 otherwise
+ * IPROUTETYPE: 4 iff gateway, 3 otherwise
+ */
+
+ if (action == RESERVE1) {
+ if (var_val_type != ASN_INTEGER) {
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ val = *((long *) var_val);
+
+ if ((val < 2) || (val > 4)) { /* only accept invalid, direct, indirect */
+ snmp_log(LOG_ERR, "not right6");
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ rp->xx_type = val;
+
+ } else if (action == COMMIT) {
+
+ oldty = rp->rt_type;
+ rp->rt_type = rp->xx_type;
+
+ if (rp->rt_type == 2) { /* invalid, so delete from kernel */
+
+ if (delRoute
+ (rp->rt_dst, rp->rt_nextIR, rp->rt_ifix,
+ rp->old_flags) < 0) {
+ snmp_log_perror("delRoute");
+ }
+
+ } else {
+
+ /*
+ * it must be valid now, so flush to kernel
+ */
+
+ if (oldty != 2) { /* was the old entry valid ? */
+ if (delRoute
+ (rp->old_dst, rp->old_nextIR, rp->old_ifix,
+ rp->old_flags) < 0) {
+ snmp_log_perror("delRoute");
+ }
+ }
+
+ /*
+ * not invalid, so remove from cache
+ */
+
+ flags = (rp->rt_type == 4 ? RTF_GATEWAY : 0);
+
+ if (addRoute(rp->rt_dst, rp->rt_nextIR, rp->rt_ifix, flags)
+ < 0) {
+ snmp_log_perror("addRoute");
+ }
+
+ delCacheRTE(rp->rt_type);
+ }
+ }
+ break;
+
+
+ case IPROUTEPROTO:
+
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in write_rte\n", var));
+ return SNMP_ERR_NOCREATION;
+
+
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+#else /* WIN32 cygwin */
+#include <iphlpapi.h>
+
+extern PMIB_IPFORWARDROW route_row;
+extern int create_flag;
+
+int
+write_rte(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len, u_char * statP, oid * name, size_t length)
+{
+ int var, retval = NO_ERROR;
+ static PMIB_IPFORWARDROW oldroute_row = NULL;
+ static int mask_flag = 0, nexthop_flag = 0;
+ static int index_flag = 0, metric_flag = 0;
+ static int dest_flag = 0;
+ DWORD status = NO_ERROR;
+ /*
+ * object identifier is of form:
+ * 1.3.6.1.2.1.4.21.1.X.A.B.C.D , where A.B.C.D is IP address.
+ * IPADDR starts at offset 10.
+ */
+
+ if (length != 14) {
+ snmp_log(LOG_ERR, "length error\n");
+ return SNMP_ERR_NOCREATION;
+ }
+ /*
+ * #define for ipRouteTable entries are 1 less than corresponding sub-id in MIB
+ * * i.e. IPROUTEDEST defined as 0, but ipRouteDest registered as 1
+ */
+ var = name[9] - 1;
+
+ switch (action) {
+ case RESERVE1:
+ switch (var) {
+ case IPROUTEMETRIC1:
+ case IPROUTEMETRIC2:
+ case IPROUTEMETRIC3:
+ case IPROUTEMETRIC4:
+ case IPROUTEMETRIC5:
+ case IPROUTETYPE:
+ case IPROUTEAGE:
+ case IPROUTEIFINDEX:
+ if (var_val_type != ASN_INTEGER) {
+ snmp_log(LOG_ERR, "not integer\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > sizeof(int)) {
+ snmp_log(LOG_ERR, "bad length\n");
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ if (var == IPROUTETYPE) {
+ if ((*((int *) var_val)) < 2 || (*((int *) var_val)) > 4) {
+ snmp_log(LOG_ERR, "invalid ipRouteType\n");
+ return SNMP_ERR_WRONGVALUE;
+ }
+ } else if ((var == IPROUTEIFINDEX) || (var == IPROUTEAGE)) {
+ if ((*((int *) var_val)) < 0) {
+ snmp_log(LOG_ERR, "invalid ipRouteIfIndex\n");
+ return SNMP_ERR_WRONGVALUE;
+ }
+ } else {
+ if ((*((int *) var_val)) < -1) {
+ snmp_log(LOG_ERR, "not right1");
+ return SNMP_ERR_WRONGVALUE;
+ }
+ }
+ break;
+ case IPROUTENEXTHOP:
+ case IPROUTEMASK:
+ case IPROUTEDEST:
+ if (var_val_type != ASN_IPADDRESS) {
+ snmp_log(LOG_ERR, "not right4");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len != 4) {
+ snmp_log(LOG_ERR, "incorrect ipAddress length");
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ break;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in write_rte\n",
+ var + 1));
+ retval = SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+
+ case RESERVE2:
+ /*
+ * Save the old value, in case of UNDO
+ */
+ if (oldroute_row == NULL) {
+ oldroute_row =
+ (PMIB_IPFORWARDROW) malloc(sizeof(MIB_IPFORWARDROW));
+ *oldroute_row = *route_row;
+ }
+ break;
+
+ case ACTION: /* Perform the SET action (if reversible) */
+ switch (var) {
+ case IPROUTEMETRIC1:
+ metric_flag = 1;
+ route_row->dwForwardMetric1 = *((int *) var_val);
+ break;
+ case IPROUTEMETRIC2:
+ route_row->dwForwardMetric2 = *((int *) var_val);
+ break;
+ case IPROUTEMETRIC3:
+ route_row->dwForwardMetric3 = *((int *) var_val);
+ break;
+ case IPROUTEMETRIC4:
+ route_row->dwForwardMetric4 = *((int *) var_val);
+ break;
+ case IPROUTEMETRIC5:
+ route_row->dwForwardMetric5 = *((int *) var_val);
+ break;
+ case IPROUTETYPE:
+ route_row->dwForwardType = *((int *) var_val);
+ break;
+ case IPROUTEAGE:
+ /*
+ * Irrespective of suppied value, this will be set with 0.
+ * * As row will be updated and this field gives the number of
+ * * seconds since this route was last updated
+ */
+ route_row->dwForwardAge = *((int *) var_val);
+ break;
+ case IPROUTEIFINDEX:
+ index_flag = 1;
+ route_row->dwForwardIfIndex = *((int *) var_val);
+ break;
+
+ case IPROUTENEXTHOP:
+ nexthop_flag = 1;
+ route_row->dwForwardNextHop = *((DWORD *) var_val);
+ break;
+ case IPROUTEMASK:
+ mask_flag = 1;
+ route_row->dwForwardMask = *((DWORD *) var_val);
+ break;
+ case IPROUTEDEST:
+ dest_flag = 1;
+ route_row->dwForwardDest = *((DWORD *) var_val);
+ break;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in write_rte\n",
+ var + 1));
+ retval = SNMP_ERR_NOTWRITABLE;
+ }
+ return retval;
+ case UNDO:
+ /*
+ * Reverse the SET action and free resources
+ */
+ if (oldroute_row) {
+ *route_row = *oldroute_row;
+ free(oldroute_row);
+ oldroute_row = NULL;
+ free(route_row);
+ route_row = NULL;
+ }
+ break;
+
+ case COMMIT:
+ /*
+ * When this case entered 'route_row' will have user supplied values for asked entries.
+ * * Thats why it is enough if we call SetIpForwardEntry/CreateIpForwardEntry only once
+ * * SetIpForwardENtry is not done in ACTION phase, as that will reset ipRouteAge on success
+ * * and if any varbind fails, then we can't UNDO the change for ipROuteAge.
+ */
+ if (route_row) {
+ if (!create_flag) {
+
+ if (SetIpForwardEntry(route_row) != NO_ERROR) {
+ snmp_log(LOG_ERR,
+ "Can't set route table's row with specified value\n");
+ retval = SNMP_ERR_COMMITFAILED;
+ } else {
+ /*
+ * SET on IpRouteNextHop, IpRouteMask & ipRouteDest creates new row.
+ * *If Set succeeds, then delete the old row.
+ * * Don't know yet whether SET on ipRouteIfIndex creates new row.
+ * * If it creates then index_flag should be added to following if statement
+ */
+
+ if (dest_flag || nexthop_flag || mask_flag) {
+ oldroute_row->dwForwardType = 2;
+ if (SetIpForwardEntry(oldroute_row) != NO_ERROR) {
+ snmp_log(LOG_ERR,
+ "Set on ipRouteTable created new row, but failed to delete the old row\n");
+ retval = SNMP_ERR_GENERR;
+ }
+ }
+ }
+ }
+ /*
+ * Only if create_flag, mask, nexthop, ifIndex and metric are specified, create new entry
+ */
+ if (create_flag) {
+ if (mask_flag && nexthop_flag && metric_flag && index_flag) {
+ if ((status =
+ CreateIpForwardEntry(route_row)) != NO_ERROR) {
+ snmp_log(LOG_ERR,
+ "Inside COMMIT: CreateIpNetEntry failed, status %d\n",
+ status);
+ retval = SNMP_ERR_COMMITFAILED;
+ }
+ } else {
+ /*
+ * For new entry, mask, nexthop, ifIndex and metric must be supplied
+ */
+ snmp_log(LOG_ERR,
+ "case COMMIT, can't create without index, mask, nextHop and metric\n");
+ retval = SNMP_ERR_WRONGVALUE;
+ }
+ }
+ }
+
+ case FREE:
+ /*
+ * Free any resources allocated
+ */
+ free(oldroute_row);
+ oldroute_row = NULL;
+ free(route_row);
+ route_row = NULL;
+ mask_flag = nexthop_flag = metric_flag = index_flag = dest_flag =
+ 0;
+ break;
+ }
+ return retval;
+}
+
+#endif /* WIN32 cygwin */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/route_write.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/route_write.h
new file mode 100644
index 0000000000..4d6b9126f0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/route_write.h
@@ -0,0 +1,20 @@
+/*
+ * Template MIB group interface - route_write.h
+ *
+ */
+#ifndef _MIBGROUP_ROUTE_WRITE_H
+#define _MIBGROUP_ROUTE_WRITE_H
+
+#if !defined(NETSNMP_ENABLE_MFD_REWRITES)
+config_require(mibII/ip)
+#endif
+
+ int addRoute(u_long, u_long, u_long, u_short);
+ int delRoute(u_long, u_long, u_long, u_short);
+ struct rtent *findCacheRTE(u_long);
+ struct rtent *newCacheRTE(void);
+ int delCacheRTE(u_long);
+ struct rtent *cacheKernelRTE(u_long);
+ WriteMethod write_rte;
+
+#endif /* _MIBGROUP_ROUTE_WRITE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/setSerialNo.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/setSerialNo.c
new file mode 100644
index 0000000000..90a0aba220
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/setSerialNo.c
@@ -0,0 +1,72 @@
+/**
+ * This file implements the snmpSetSerialNo TestAndIncr counter
+ */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "setSerialNo.h"
+
+/*
+ * A watched spinlock can be fully implemented by the spinlock helper,
+ * but we still need a suitable variable to hold the value.
+ */
+static int setserialno;
+
+ /*
+ * TestAndIncr values should persist across agent restarts,
+ * so we need config handling routines to load and save the
+ * current value (incrementing this whenever it's loaded).
+ */
+static void
+setserial_parse_config( const char *token, char *cptr )
+{
+ setserialno = atoi(cptr);
+ setserialno++;
+ DEBUGMSGTL(("snmpSetSerialNo",
+ "Re-setting SnmpSetSerialNo to %d\n", setserialno));
+}
+static int
+setserial_store_config( int a, int b, void *c, void *d )
+{
+ char line[SNMP_MAXBUF_SMALL];
+ snprintf(line, SNMP_MAXBUF_SMALL, "setserialno %d", setserialno);
+ snmpd_store_config( line );
+ return 0;
+}
+
+void
+init_setSerialNo(void)
+{
+ oid set_serial_oid[] = { 1, 3, 6, 1, 6, 3, 1, 1, 6, 1 };
+
+ /*
+ * If we can't retain the TestAndIncr value across an agent restart,
+ * then it should be initialised to a pseudo-random value. So set it
+ * as such, before registering the config handlers to override this.
+ */
+#ifdef SVR4
+ setserialno = lrand48();
+#else
+ setserialno = random();
+#endif
+ DEBUGMSGTL(("snmpSetSerialNo",
+ "Initalizing SnmpSetSerialNo to %d\n", setserialno));
+ snmpd_register_config_handler("setserialno", setserial_parse_config,
+ NULL, "integer");
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ setserial_store_config, NULL);
+
+ /*
+ * Register 'setserialno' as a watched spinlock object
+ */
+ netsnmp_register_watched_spinlock(
+ netsnmp_create_handler_registration("snmpSetSerialNo", NULL,
+ set_serial_oid,
+ OID_LENGTH(set_serial_oid),
+ HANDLER_CAN_RWRITE),
+ &setserialno );
+
+ DEBUGMSGTL(("scalar_int", "Done initalizing example scalar int\n"));
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/setSerialNo.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/setSerialNo.h
new file mode 100644
index 0000000000..4ffd8714da
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/setSerialNo.h
@@ -0,0 +1,6 @@
+#ifndef SETSERIALNO_H
+#define SETSERIALNO_H
+
+void init_setSerialNo(void);
+
+#endif /* SETSERIALNO_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/snmp_mib.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/snmp_mib.c
new file mode 100644
index 0000000000..0b301960eb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/snmp_mib.c
@@ -0,0 +1,253 @@
+/*
+ * SNMPv1 MIB group implementation - snmp.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include <sys/types.h>
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "util_funcs.h"
+#include "snmp_mib.h"
+#include "sysORTable.h"
+
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+extern int snmp_enableauthentraps;
+extern int snmp_enableauthentrapsset;
+int old_snmp_enableauthentraps;
+
+/*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+/*
+ * define the structure we're going to ask the agent to register our
+ * information at
+ */
+struct variable1 snmp_variables[] = {
+ {SNMPINPKTS, ASN_COUNTER, RONLY, var_snmp, 1, {1}},
+ {SNMPOUTPKTS, ASN_COUNTER, RONLY, var_snmp, 1, {2}},
+ {SNMPINBADVERSIONS, ASN_COUNTER, RONLY, var_snmp, 1, {3}},
+#if !defined(NETSNMP_DISABLE_SNMPV1) || !defined(NETSNMP_DISABLE_SNMPV2C)
+ {SNMPINBADCOMMUNITYNAMES, ASN_COUNTER, RONLY, var_snmp, 1, {4}},
+ {SNMPINBADCOMMUNITYUSES, ASN_COUNTER, RONLY, var_snmp, 1, {5}},
+#endif /* support for community based SNMP */
+ {SNMPINASNPARSEERRORS, ASN_COUNTER, RONLY, var_snmp, 1, {6}},
+ {SNMPINTOOBIGS, ASN_COUNTER, RONLY, var_snmp, 1, {8}},
+ {SNMPINNOSUCHNAMES, ASN_COUNTER, RONLY, var_snmp, 1, {9}},
+ {SNMPINBADVALUES, ASN_COUNTER, RONLY, var_snmp, 1, {10}},
+ {SNMPINREADONLYS, ASN_COUNTER, RONLY, var_snmp, 1, {11}},
+ {SNMPINGENERRS, ASN_COUNTER, RONLY, var_snmp, 1, {12}},
+ {SNMPINTOTALREQVARS, ASN_COUNTER, RONLY, var_snmp, 1, {13}},
+ {SNMPINTOTALSETVARS, ASN_COUNTER, RONLY, var_snmp, 1, {14}},
+ {SNMPINGETREQUESTS, ASN_COUNTER, RONLY, var_snmp, 1, {15}},
+ {SNMPINGETNEXTS, ASN_COUNTER, RONLY, var_snmp, 1, {16}},
+ {SNMPINSETREQUESTS, ASN_COUNTER, RONLY, var_snmp, 1, {17}},
+ {SNMPINGETRESPONSES, ASN_COUNTER, RONLY, var_snmp, 1, {18}},
+ {SNMPINTRAPS, ASN_COUNTER, RONLY, var_snmp, 1, {19}},
+ {SNMPOUTTOOBIGS, ASN_COUNTER, RONLY, var_snmp, 1, {20}},
+ {SNMPOUTNOSUCHNAMES, ASN_COUNTER, RONLY, var_snmp, 1, {21}},
+ {SNMPOUTBADVALUES, ASN_COUNTER, RONLY, var_snmp, 1, {22}},
+ {SNMPOUTGENERRS, ASN_COUNTER, RONLY, var_snmp, 1, {24}},
+ {SNMPOUTGETREQUESTS, ASN_COUNTER, RONLY, var_snmp, 1, {25}},
+ {SNMPOUTGETNEXTS, ASN_COUNTER, RONLY, var_snmp, 1, {26}},
+ {SNMPOUTSETREQUESTS, ASN_COUNTER, RONLY, var_snmp, 1, {27}},
+ {SNMPOUTGETRESPONSES, ASN_COUNTER, RONLY, var_snmp, 1, {28}},
+ {SNMPOUTTRAPS, ASN_COUNTER, RONLY, var_snmp, 1, {29}},
+ {SNMPENABLEAUTHENTRAPS, ASN_INTEGER, RWRITE, var_snmp, 1, {30}},
+ {SNMPSILENTDROPS, ASN_COUNTER, RONLY, var_snmp, 1, {31}},
+ {SNMPPROXYDROPS, ASN_COUNTER, RONLY, var_snmp, 1, {32}}
+};
+
+/*
+ * Define the OID pointer to the top of the mib tree that we're
+ * registering underneath
+ */
+oid snmp_variables_oid[] = { SNMP_OID_MIB2, 11 };
+#ifdef USING_MIBII_SYSTEM_MIB_MODULE
+extern oid system_module_oid[];
+extern int system_module_oid_len;
+extern int system_module_count;
+#endif
+
+static int
+snmp_enableauthentraps_store(int a, int b, void *c, void *d)
+{
+ char line[SNMP_MAXBUF_SMALL];
+
+ if (snmp_enableauthentrapsset > 0) {
+ snprintf(line, SNMP_MAXBUF_SMALL, "pauthtrapenable %d",
+ snmp_enableauthentraps);
+ snmpd_store_config(line);
+ }
+ return 0;
+}
+
+void
+init_snmp_mib(void)
+{
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("mibII/snmp", snmp_variables, variable1,
+ snmp_variables_oid);
+
+#ifdef USING_MIBII_SYSTEM_MIB_MODULE
+ if (++system_module_count == 3)
+ REGISTER_SYSOR_TABLE(system_module_oid, system_module_oid_len,
+ "The MIB module for SNMPv2 entities");
+#endif
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ snmp_enableauthentraps_store, NULL);
+}
+
+/*
+ * header_snmp(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method
+ *
+ */
+
+ /*********************
+ *
+ * System specific implementation functions
+ * (actually common!)
+ *
+ *********************/
+
+
+u_char *
+var_snmp(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ static long long_ret;
+
+ *write_method = 0; /* assume it isnt writable for the time being */
+ *var_len = sizeof(long_ret); /* assume an integer and change later if not */
+
+ if (header_generic(vp, name, length, exact, var_len, write_method)
+ == MATCH_FAILED)
+ return NULL;
+
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ if (vp->magic == SNMPENABLEAUTHENTRAPS) {
+ *write_method = write_snmp;
+ long_return = snmp_enableauthentraps;
+ return (u_char *) & long_return;
+ } else if ((vp->magic >= 1)
+ && (vp->magic <=
+ (STAT_SNMP_STATS_END - STAT_SNMP_STATS_START + 1))) {
+ long_ret =
+ snmp_get_statistic(vp->magic + STAT_SNMP_STATS_START - 1);
+ return (unsigned char *) &long_ret;
+ }
+ return NULL;
+}
+
+/*
+ * only for snmpEnableAuthenTraps:
+ */
+
+int
+write_snmp(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len, u_char * statP, oid * name, size_t name_len)
+{
+ long intval = 0;
+
+ switch (action) {
+ case RESERVE1: /* Check values for acceptability */
+ if (var_val_type != ASN_INTEGER) {
+ DEBUGMSGTL(("mibII/snmp_mib", "%x not integer type",
+ var_val_type));
+ return SNMP_ERR_WRONGTYPE;
+ }
+
+ intval = *((long *) var_val);
+ if (intval != 1 && intval != 2) {
+ DEBUGMSGTL(("mibII/snmp_mib", "not valid %x\n", intval));
+ return SNMP_ERR_WRONGVALUE;
+ }
+ if (snmp_enableauthentrapsset < 0) {
+ /*
+ * The object is set in a read-only configuration file.
+ */
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+
+ case RESERVE2: /* Allocate memory and similar resources */
+
+ /*
+ * Using static variables, so nothing needs to be done
+ */
+ break;
+
+ case ACTION: /* Perform the SET action (if reversible) */
+
+ /*
+ * Save the old value, in case of UNDO
+ */
+ intval = *((long *) var_val);
+ old_snmp_enableauthentraps = snmp_enableauthentraps;
+ snmp_enableauthentraps = intval;
+ break;
+
+ case UNDO: /* Reverse the SET action and free resources */
+
+ snmp_enableauthentraps = old_snmp_enableauthentraps;
+ break;
+
+ case COMMIT:
+ snmp_enableauthentrapsset = 1;
+ snmp_save_persistent(netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_APPTYPE));
+ (void) snmp_call_callbacks(SNMP_CALLBACK_LIBRARY,
+ SNMP_CALLBACK_STORE_DATA, NULL);
+ snmp_clean_persistent(netsnmp_ds_get_string
+ (NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_APPTYPE));
+ break;
+
+ case FREE: /* Free any resources allocated */
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+/*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/snmp_mib.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/snmp_mib.h
new file mode 100644
index 0000000000..31ce442f15
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/snmp_mib.h
@@ -0,0 +1,83 @@
+/*
+ * SNMP MIB group interface - snmp.h
+ *
+ */
+#ifndef _MIBGROUP_SNMP_H
+#define _MIBGROUP_SNMP_H
+
+struct variable;
+
+extern FindVarMethod var_snmp;
+extern WriteMethod write_snmp;
+
+void init_snmp_mib(void);
+
+extern int snmp_inpkts; /* 1 - current */
+extern int snmp_outpkts; /* 2 - obsolete */
+extern int snmp_inbadversions; /* 3 - current */
+extern int snmp_inbadcommunitynames; /* 4 - current */
+extern int snmp_inbadcommunityuses; /* 5 - current */
+extern int snmp_inasnparseerrors; /* 6 - current */
+extern int snmp_intoobigs; /* 8 - obsolete */
+extern int snmp_innosuchnames; /* 9 - obsolete */
+extern int snmp_inbadvalues; /* 10 - obsolete */
+extern int snmp_inreadonlys; /* 11 - obsolete */
+extern int snmp_ingenerrs; /* 12 - obsolete */
+extern int snmp_intotalreqvars; /* 13 - obsolete */
+extern int snmp_intotalsetvars; /* 14 - obsolete */
+extern int snmp_ingetrequests; /* 15 - obsolete */
+extern int snmp_ingetnexts; /* 16 - obsolete */
+extern int snmp_insetrequests; /* 17 - obsolete */
+extern int snmp_ingetresponses; /* 18 - obsolete */
+extern int snmp_intraps; /* 19 - obsolete */
+extern int snmp_outtoobigs; /* 20 - obsolete */
+extern int snmp_outnosuchnames; /* 21 - obsolete */
+extern int snmp_outbadvalues; /* 22 - obsolete */
+extern int snmp_outgenerrs; /* 24 - obsolete */
+extern int snmp_outgetrequests; /* 25 - obsolete */
+extern int snmp_outgetnexts; /* 26 - obsolete */
+extern int snmp_outsetrequests; /* 27 - obsolete */
+extern int snmp_outgetresponses; /* 28 - obsolete */
+extern int snmp_outtraps; /* 29 - obsolete */
+extern int snmp_enableauthentraps; /* 30 - current */
+extern int snmp_silentdrops; /* 31 - current */
+extern int snmp_proxydrops; /* 32 - current */
+
+extern char *snmp_trapsink;
+extern char *snmp_trapcommunity;
+
+
+#define SNMPINPKTS 1
+#define SNMPOUTPKTS 2
+#define SNMPINBADVERSIONS 3
+#define SNMPINBADCOMMUNITYNAMES 4
+#define SNMPINBADCOMMUNITYUSES 5
+#define SNMPINASNPARSEERRORS 6
+#define SNMPINBADTYPES 7
+#define SNMPINTOOBIGS 8
+#define SNMPINNOSUCHNAMES 9
+#define SNMPINBADVALUES 10
+#define SNMPINREADONLYS 11
+#define SNMPINGENERRS 12
+#define SNMPINTOTALREQVARS 13
+#define SNMPINTOTALSETVARS 14
+#define SNMPINGETREQUESTS 15
+#define SNMPINGETNEXTS 16
+#define SNMPINSETREQUESTS 17
+#define SNMPINGETRESPONSES 18
+#define SNMPINTRAPS 19
+#define SNMPOUTTOOBIGS 20
+#define SNMPOUTNOSUCHNAMES 21
+#define SNMPOUTBADVALUES 22
+#define SNMPOUTREADONLYS 23
+#define SNMPOUTGENERRS 24
+#define SNMPOUTGETREQUESTS 25
+#define SNMPOUTGETNEXTS 26
+#define SNMPOUTSETREQUESTS 27
+#define SNMPOUTGETRESPONSES 28
+#define SNMPOUTTRAPS 29
+#define SNMPENABLEAUTHENTRAPS 30
+#define SNMPSILENTDROPS 31
+#define SNMPPROXYDROPS 32
+
+#endif /* _MIBGROUP_SNMP_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/sysORTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/sysORTable.c
new file mode 100644
index 0000000000..f8ffa50c21
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/sysORTable.c
@@ -0,0 +1,344 @@
+/*
+ * Template MIB group implementation - sysORTable.c
+ *
+ */
+#include <net-snmp/net-snmp-config.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <sys/types.h>
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/agent_callbacks.h>
+
+#include "struct.h"
+#include "util_funcs.h"
+#include "sysORTable.h"
+#include "snmpd.h"
+
+#ifdef USING_AGENTX_SUBAGENT_MODULE
+#include "agentx/subagent.h"
+#include "agentx/client.h"
+#endif
+
+
+static int
+_register_sysOR_callback(int majorID, int minorID,
+ void *serverarg, void *clientarg);
+static int
+_unregister_sysOR_callback(int majorID, int minorID,
+ void *serverarg, void *clientarg);
+static int
+_unregister_sysOR_by_session_callback(int majorID, int minorID,
+ void *serverarg, void *clientarg);
+
+struct timeval sysOR_lastchange;
+static struct sysORTable *table = NULL;
+static int numEntries = 0;
+
+/*
+ * define the structure we're going to ask the agent to register our
+ * information at
+ */
+struct variable1 sysORTable_variables[] = {
+ {SYSORTABLEID, ASN_OBJECT_ID, RONLY, var_sysORTable, 1, {2}},
+ {SYSORTABLEDESCR, ASN_OCTET_STR, RONLY, var_sysORTable, 1, {3}},
+ {SYSORTABLEUPTIME, ASN_TIMETICKS, RONLY, var_sysORTable, 1, {4}}
+};
+
+/*
+ * Define the OID pointer to the top of the mib tree that we're
+ * registering underneath
+ */
+oid sysORTable_variables_oid[] = { SNMP_OID_MIB2, 1, 9, 1 };
+#ifdef USING_MIBII_SYSTEM_MIB_MODULE
+extern oid system_module_oid[];
+extern int system_module_oid_len;
+extern int system_module_count;
+#endif
+
+void
+init_sysORTable(void)
+{
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+
+#ifdef USING_AGENTX_SUBAGENT_MODULE
+ if (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE) == MASTER_AGENT)
+ (void) register_mib_priority("mibII/sysORTable",
+ (struct variable *)
+ sysORTable_variables,
+ sizeof(struct variable1),
+ sizeof(sysORTable_variables) /
+ sizeof(struct variable1),
+ sysORTable_variables_oid,
+ sizeof(sysORTable_variables_oid) /
+ sizeof(oid), 1);
+ else
+#endif
+ REGISTER_MIB("mibII/sysORTable", sysORTable_variables, variable1,
+ sysORTable_variables_oid);
+
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REQ_REG_SYSOR,
+ _register_sysOR_callback, NULL);
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REQ_UNREG_SYSOR,
+ _unregister_sysOR_callback, NULL);
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REQ_UNREG_SYSOR_SESS,
+ _unregister_sysOR_by_session_callback, NULL);
+
+#ifdef USING_MIBII_SYSTEM_MIB_MODULE
+ if (++system_module_count == 3)
+ REGISTER_SYSOR_TABLE(system_module_oid, system_module_oid_len,
+ "The MIB module for SNMPv2 entities");
+#endif
+
+ gettimeofday(&sysOR_lastchange, NULL);
+}
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+u_char *
+var_sysORTable(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ unsigned long i = 0;
+ static unsigned long ret;
+ struct sysORTable *ptr = table;
+
+ if (header_simple_table
+ (vp, name, length, exact, var_len, write_method, numEntries))
+ return NULL;
+
+ for (i = 1; ptr != NULL && i < name[*length - 1]; ptr = ptr->next, i++) {
+ DEBUGMSGTL(("mibII/sysORTable", "sysORTable -- %lu != %lu\n",
+ i, name[*length - 1]));
+ }
+ if (ptr == NULL) {
+ DEBUGMSGTL(("mibII/sysORTable", "sysORTable -- no match: %lu\n",
+ i));
+ return NULL;
+ }
+ DEBUGMSGTL(("mibII/sysORTable", "sysORTable -- match: %lu\n", i));
+
+ switch (vp->magic) {
+ case SYSORTABLEID:
+ *var_len = ptr->OR_oidlen * sizeof(ptr->OR_oid[0]);
+ return (u_char *) ptr->OR_oid;
+
+ case SYSORTABLEDESCR:
+ *var_len = strlen(ptr->OR_descr);
+ return (u_char *) ptr->OR_descr;
+
+ case SYSORTABLEUPTIME:
+ ret = netsnmp_timeval_uptime(&ptr->OR_uptime);
+ return (u_char *) & ret;
+
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_sysORTable\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+
+int
+register_sysORTable_sess(oid * oidin,
+ size_t oidlen,
+ const char *descr, netsnmp_session * ss)
+{
+ struct sysORTable *ptr, **nptr;
+ struct register_sysOR_parameters reg_sysOR_parms;
+
+ DEBUGMSGTL(("mibII/sysORTable", "sysORTable registering: "));
+ DEBUGMSGOID(("mibII/sysORTable", oidin, oidlen));
+ DEBUGMSG(("mibII/sysORTable", "\n"));
+
+ ptr = (struct sysORTable *) malloc(sizeof(struct sysORTable));
+ if (ptr == NULL) {
+ return SYS_ORTABLE_REGISTRATION_FAILED;
+ }
+ ptr->OR_descr = (char *) strdup(descr);
+ if (ptr->OR_descr == NULL) {
+ free(ptr);
+ return SYS_ORTABLE_REGISTRATION_FAILED;
+ }
+ ptr->OR_oidlen = oidlen;
+ ptr->OR_oid = (oid *) malloc(sizeof(oid) * oidlen);
+ if (ptr->OR_oid == NULL) {
+ free(ptr->OR_descr);
+ free(ptr);
+ return SYS_ORTABLE_REGISTRATION_FAILED;
+ }
+ memcpy(ptr->OR_oid, oidin, sizeof(oid) * oidlen);
+ gettimeofday(&(ptr->OR_uptime), NULL);
+ gettimeofday(&(sysOR_lastchange), NULL);
+ ptr->OR_sess = ss;
+ ptr->next = NULL;
+ numEntries++;
+
+ /* add this entry to the end of the chained list */
+ nptr = &table;
+ while (*nptr != NULL)
+ nptr = &((*nptr)->next);
+ *nptr = ptr;
+
+ reg_sysOR_parms.name = oidin;
+ reg_sysOR_parms.namelen = oidlen;
+ reg_sysOR_parms.descr = descr;
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_REG_SYSOR, &reg_sysOR_parms);
+
+ return SYS_ORTABLE_REGISTERED_OK;
+}
+
+int
+register_sysORTable(oid * oidin, size_t oidlen, const char *descr)
+{
+ return register_sysORTable_sess(oidin, oidlen, descr, NULL);
+}
+
+
+
+int
+unregister_sysORTable_sess(oid * oidin,
+ size_t oidlen, netsnmp_session * ss)
+{
+ struct sysORTable *ptr, *prev = NULL, *next;
+ int found = SYS_ORTABLE_NO_SUCH_REGISTRATION;
+ struct register_sysOR_parameters reg_sysOR_parms;
+
+ DEBUGMSGTL(("mibII/sysORTable", "sysORTable unregistering: "));
+ DEBUGMSGOID(("mibII/sysORTable", oidin, oidlen));
+ DEBUGMSG(("mibII/sysORTable", "\n"));
+
+ for (ptr = table; ptr; ptr = next)
+ {
+ next = ptr->next;
+ if (ptr->OR_sess == ss &&
+ (snmp_oid_compare(oidin, oidlen, ptr->OR_oid, ptr->OR_oidlen) == 0))
+ {
+ if (prev == NULL)
+ table = ptr->next;
+ else
+ prev->next = ptr->next;
+
+ free(ptr->OR_oid);
+ free(ptr->OR_descr);
+ free(ptr);
+ numEntries--;
+ gettimeofday(&(sysOR_lastchange), NULL);
+ found = SYS_ORTABLE_UNREGISTERED_OK;
+ break;
+ } else
+ prev = ptr;
+ }
+
+ reg_sysOR_parms.name = oidin;
+ reg_sysOR_parms.namelen = oidlen;
+ snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_UNREG_SYSOR, &reg_sysOR_parms);
+
+ return found;
+}
+
+
+int
+unregister_sysORTable(oid * oidin, size_t oidlen)
+{
+ return unregister_sysORTable_sess(oidin, oidlen, NULL);
+}
+
+void
+unregister_sysORTable_by_session(netsnmp_session * ss)
+{
+ struct sysORTable *ptr, *prev = NULL, *next;
+
+ for (ptr = table; ptr; ptr = next)
+ {
+ next = ptr->next;
+ if (((ss->flags & SNMP_FLAGS_SUBSESSION) && ptr->OR_sess == ss) ||
+ (!(ss->flags & SNMP_FLAGS_SUBSESSION) && ptr->OR_sess &&
+ ptr->OR_sess->subsession == ss)) {
+ if (prev == NULL)
+ table = next;
+ else
+ prev->next = next;
+ free(ptr->OR_oid);
+ free(ptr->OR_descr);
+ free(ptr);
+ numEntries--;
+ gettimeofday(&(sysOR_lastchange), NULL);
+ } else
+ prev = ptr;
+ }
+}
+
+static int
+_register_sysOR_callback(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ struct sysORTable *parms = (struct sysORTable *) serverarg;
+
+ return register_sysORTable_sess(parms->OR_oid, parms->OR_oidlen,
+ parms->OR_descr, parms->OR_sess);
+}
+
+static int
+_unregister_sysOR_by_session_callback(int majorID, int minorID,
+ void *serverarg, void *clientarg)
+{
+ netsnmp_session *session = (netsnmp_session *) serverarg;
+
+ unregister_sysORTable_by_session(session);
+
+ return 0;
+}
+
+static int
+_unregister_sysOR_callback(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ struct sysORTable *parms = (struct sysORTable *) serverarg;
+
+ return unregister_sysORTable_sess(parms->OR_oid,
+ parms->OR_oidlen,
+ parms->OR_sess);
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/sysORTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/sysORTable.h
new file mode 100644
index 0000000000..59fb7e0730
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/sysORTable.h
@@ -0,0 +1,57 @@
+/*
+ * Template MIB group interface - sysORTable.h
+ *
+ */
+#ifndef _MIBGROUP_SYSORTABLE_H
+#define _MIBGROUP_SYSORTABLE_H
+
+config_require(util_funcs)
+config_require(mibII/system_mib)
+
+ struct sysORTable {
+ char *OR_descr;
+ oid *OR_oid;
+ size_t OR_oidlen;
+ struct timeval OR_uptime;
+ netsnmp_session *OR_sess;
+ struct sysORTable *next;
+ };
+
+ struct register_sysOR_parameters {
+ oid *name;
+ int namelen;
+ const char *descr;
+ };
+
+ extern void init_sysORTable(void);
+ extern FindVarMethod var_sysORTable;
+ extern FindVarMethod var_sysORLastChange;
+ extern int register_sysORTable(oid *, size_t, const char *);
+ extern int unregister_sysORTable(oid *, size_t);
+ extern int register_sysORTable_sess(oid *, size_t, const char *,
+ netsnmp_session *);
+ extern int unregister_sysORTable_sess(oid *, size_t,
+ netsnmp_session *);
+ extern void unregister_sysORTable_by_session(netsnmp_session *);
+
+#define SYSORTABLEINDEX 1
+#define SYSORTABLEID 2
+#define SYSORTABLEDESCR 3
+#define SYSORTABLEUPTIME 4
+
+#define SYS_ORTABLE_REGISTERED_OK 0
+#define SYS_ORTABLE_REGISTRATION_FAILED -1
+#define SYS_ORTABLE_UNREGISTERED_OK 0
+#define SYS_ORTABLE_NO_SUCH_REGISTRATION -1
+
+#ifdef USING_MIBII_SYSORTABLE_MODULE
+#define REGISTER_SYSOR_ENTRY(theoid, descr) \
+ (void)register_sysORTable(theoid, sizeof(theoid)/sizeof(oid), descr);
+#define REGISTER_SYSOR_TABLE(theoid, len, descr) \
+ (void)register_sysORTable(theoid, len, descr);
+
+#else
+#define REGISTER_SYSOR_ENTRY(x,y)
+#define REGISTER_SYSOR_TABLE(x,y,z)
+#endif /* USING_MIBII_SYSORTABLE_MODULE */
+#endif /* _MIBGROUP_SYSORTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/system_mib.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/system_mib.c
new file mode 100644
index 0000000000..51eee1211b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/system_mib.c
@@ -0,0 +1,765 @@
+/*
+ * System MIB group implementation - system.c
+ *
+ */
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#include <sys/types.h>
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+#include <ctype.h>
+#if HAVE_UTSNAME_H
+#include <utsname.h>
+#else
+#if HAVE_SYS_UTSNAME_H
+#include <sys/utsname.h>
+#endif
+#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "util_funcs.h"
+#include "system_mib.h"
+#include "struct.h"
+#include "sysORTable.h"
+
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+#define SYS_STRING_LEN 256
+char version_descr[SYS_STRING_LEN] = NETSNMP_VERS_DESC;
+char sysContact[SYS_STRING_LEN] = NETSNMP_SYS_CONTACT;
+char sysName[SYS_STRING_LEN] = NETSNMP_SYS_NAME;
+char sysLocation[SYS_STRING_LEN] = NETSNMP_SYS_LOC;
+oid sysObjectID[MAX_OID_LEN];
+size_t sysObjectIDLength;
+
+extern oid version_sysoid[];
+extern int version_sysoid_len;
+
+char oldversion_descr[SYS_STRING_LEN];
+char oldsysContact[SYS_STRING_LEN];
+char oldsysName[SYS_STRING_LEN];
+char oldsysLocation[SYS_STRING_LEN];
+
+int sysServices = 72;
+int sysServicesConfiged = 0;
+
+extern oid version_id[];
+extern int version_id_len;
+
+static int sysContactSet = 0, sysLocationSet = 0, sysNameSet = 0;
+
+WriteMethod writeSystem;
+int header_system(struct variable *, oid *, size_t *, int,
+ size_t *, WriteMethod **);
+
+#if (defined (WIN32) && defined (HAVE_WIN32_PLATFORM_SDK)) || defined (mingw32)
+static void windowsOSVersionString(char [], size_t);
+#endif
+
+ /*********************
+ *
+ * snmpd.conf config parsing
+ *
+ *********************/
+
+void
+system_parse_config_sysdescr(const char *token, char *cptr)
+{
+ char tmpbuf[1024];
+
+ if (strlen(cptr) >= sizeof(version_descr)) {
+ snprintf(tmpbuf,
+ sizeof(tmpbuf),
+ "sysdescr token too long (must be < %lu):\n\t%s",
+ (unsigned long)sizeof(version_descr),
+ cptr);
+ config_perror(tmpbuf);
+ } else if (strcmp(cptr, "\"\"") == 0) {
+ version_descr[0] = '\0';
+ } else {
+ strcpy(version_descr, cptr);
+ }
+}
+
+void
+system_parse_config_sysloc(const char *token, char *cptr)
+{
+ char tmpbuf[1024];
+
+ if (strlen(cptr) >= sizeof(sysLocation)) {
+ snprintf(tmpbuf, 1024,
+ "syslocation token too long (must be < %lu):\n\t%s",
+ (unsigned long)sizeof(sysLocation), cptr);
+ config_perror(tmpbuf);
+ }
+
+ if (strcmp(token, "psyslocation") == 0) {
+ if (sysLocationSet < 0) {
+ /*
+ * This is bogus (and shouldn't happen anyway) -- the sysLocation
+ * is already configured read-only.
+ */
+ snmp_log(LOG_WARNING,
+ "ignoring attempted override of read-only sysLocation.0\n");
+ return;
+ } else {
+ sysLocationSet++;
+ }
+ } else {
+ if (sysLocationSet > 0) {
+ /*
+ * This is bogus (and shouldn't happen anyway) -- we already read a
+ * persistent value of sysLocation, which we should ignore in
+ * favour of this one.
+ */
+ snmp_log(LOG_WARNING,
+ "ignoring attempted override of read-only sysLocation.0\n");
+ /*
+ * Fall through and copy in this value.
+ */
+ }
+ sysLocationSet = -1;
+ }
+
+ if (strcmp(cptr, "\"\"") == 0) {
+ sysLocation[0] = '\0';
+ } else if (strlen(cptr) < sizeof(sysLocation)) {
+ strcpy(sysLocation, cptr);
+ }
+}
+
+void
+system_parse_config_syscon(const char *token, char *cptr)
+{
+ char tmpbuf[1024];
+
+ if (strlen(cptr) >= sizeof(sysContact)) {
+ snprintf(tmpbuf, 1024,
+ "syscontact token too long (must be < %lu):\n\t%s",
+ (unsigned long)sizeof(sysContact), cptr);
+ config_perror(tmpbuf);
+ }
+
+ if (strcmp(token, "psyscontact") == 0) {
+ if (sysContactSet < 0) {
+ /*
+ * This is bogus (and shouldn't happen anyway) -- the sysContact
+ * is already configured read-only.
+ */
+ snmp_log(LOG_WARNING,
+ "ignoring attempted override of read-only sysContact.0\n");
+ return;
+ } else {
+ sysContactSet++;
+ }
+ } else {
+ if (sysContactSet > 0) {
+ /*
+ * This is bogus (and shouldn't happen anyway) -- we already read a
+ * persistent value of sysContact, which we should ignore in favour
+ * of this one.
+ */
+ snmp_log(LOG_WARNING,
+ "ignoring attempted override of read-only sysContact.0\n");
+ /*
+ * Fall through and copy in this value.
+ */
+ }
+ sysContactSet = -1;
+ }
+
+ if (strcmp(cptr, "\"\"") == 0) {
+ sysContact[0] = '\0';
+ } else if (strlen(cptr) < sizeof(sysContact)) {
+ strcpy(sysContact, cptr);
+ }
+}
+
+void
+system_parse_config_sysname(const char *token, char *cptr)
+{
+ char tmpbuf[1024];
+
+ if (strlen(cptr) >= sizeof(sysName)) {
+ snprintf(tmpbuf, 1024,
+ "sysname token too long (must be < %lu):\n\t%s",
+ (unsigned long)sizeof(sysName), cptr);
+ config_perror(tmpbuf);
+ }
+
+ if (strcmp(token, "psysname") == 0) {
+ if (sysNameSet < 0) {
+ /*
+ * This is bogus (and shouldn't happen anyway) -- the sysName
+ * is already configured read-only.
+ */
+ snmp_log(LOG_WARNING,
+ "ignoring attempted override of read-only sysName.0\n");
+ return;
+ } else {
+ sysNameSet++;
+ }
+ } else {
+ if (sysNameSet > 0) {
+ /*
+ * This is bogus (and shouldn't happen anyway) -- we already read a
+ * persistent value of sysName, which we should ignore in favour
+ * of this one.
+ */
+ snmp_log(LOG_WARNING,
+ "ignoring attempted override of read-only sysName.0\n");
+ /*
+ * Fall through and copy in this value.
+ */
+ }
+ sysNameSet = -1;
+ }
+
+ if (strcmp(cptr, "\"\"") == 0) {
+ sysName[0] = '\0';
+ } else if (strlen(cptr) < sizeof(sysName)) {
+ strcpy(sysName, cptr);
+ }
+}
+
+void
+system_parse_config_sysServices(const char *token, char *cptr)
+{
+ sysServices = atoi(cptr);
+ sysServicesConfiged = 1;
+}
+
+void system_parse_config_sysObjectID(const char *token, char *cptr)
+{
+ char tmpbuf[1024];
+
+ sysObjectIDLength = MAX_OID_LEN;
+ if (!read_objid(cptr, sysObjectID, &sysObjectIDLength)) {
+ snprintf(tmpbuf,
+ sizeof(tmpbuf),
+ "sysobjectid token not a parsable OID:\n\t%s",
+ cptr);
+ config_perror(tmpbuf);
+ memcpy(sysObjectID, version_sysoid, version_sysoid_len * sizeof(oid));
+ sysObjectIDLength = version_sysoid_len;
+ }
+}
+
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+/*
+ * define the structure we're going to ask the agent to register our
+ * information at
+ */
+struct variable1 system_variables[] = {
+ {VERSION_DESCR, ASN_OCTET_STR, RONLY, var_system, 1, {1}},
+ {VERSIONID, ASN_OBJECT_ID, RONLY, var_system, 1, {2}},
+ {UPTIME, ASN_TIMETICKS, RONLY, var_system, 1, {3}},
+ {SYSCONTACT, ASN_OCTET_STR, RWRITE, var_system, 1, {4}},
+ {SYSTEMNAME, ASN_OCTET_STR, RWRITE, var_system, 1, {5}},
+ {SYSLOCATION, ASN_OCTET_STR, RWRITE, var_system, 1, {6}},
+ {SYSSERVICES, ASN_INTEGER, RONLY, var_system, 1, {7}},
+ {SYSORLASTCHANGE, ASN_TIMETICKS, RONLY, var_system, 1, {8}}
+};
+/*
+ * Define the OID pointer to the top of the mib tree that we're
+ * registering underneath
+ */
+oid system_variables_oid[] = { SNMP_OID_MIB2, 1 };
+oid system_module_oid[] = { SNMP_OID_SNMPMODULES, 1 };
+int system_module_oid_len =
+ sizeof(system_module_oid) / sizeof(oid);
+int system_module_count = 0;
+
+static int
+system_store(int a, int b, void *c, void *d)
+{
+ char line[SNMP_MAXBUF_SMALL];
+
+ if (sysLocationSet > 0) {
+ snprintf(line, SNMP_MAXBUF_SMALL, "psyslocation %s", sysLocation);
+ snmpd_store_config(line);
+ }
+ if (sysContactSet > 0) {
+ snprintf(line, SNMP_MAXBUF_SMALL, "psyscontact %s", sysContact);
+ snmpd_store_config(line);
+ }
+ if (sysNameSet > 0) {
+ snprintf(line, SNMP_MAXBUF_SMALL, "psysname %s", sysName);
+ snmpd_store_config(line);
+ }
+
+ return 0;
+}
+
+void
+init_system_mib(void)
+{
+
+#ifdef HAVE_UNAME
+ struct utsname utsName;
+
+ uname(&utsName);
+ snprintf(version_descr, sizeof(version_descr),
+ "%s %s %s %s %s", utsName.sysname,
+ utsName.nodename, utsName.release, utsName.version,
+ utsName.machine);
+ version_descr[ sizeof(version_descr)-1 ] = 0;
+#else
+#if HAVE_EXECV
+ struct extensible extmp;
+
+ /*
+ * set default values of system stuff
+ */
+ sprintf(extmp.command, "%s -a", UNAMEPROG);
+ /*
+ * setup defaults
+ */
+ extmp.type = EXECPROC;
+ extmp.next = NULL;
+ exec_command(&extmp);
+ strncpy(version_descr, extmp.output, sizeof(version_descr));
+ version_descr[sizeof(version_descr) - 1] = 0;
+ version_descr[strlen(version_descr) - 1] = 0; /* chomp new line */
+#else
+#if (defined (WIN32) && defined (HAVE_WIN32_PLATFORM_SDK)) || defined (mingw32)
+ windowsOSVersionString(version_descr, sizeof(version_descr));
+#else
+ strcpy(version_descr, "unknown");
+#endif
+#endif
+#endif
+
+#ifdef HAVE_GETHOSTNAME
+ gethostname(sysName, sizeof(sysName));
+#else
+#ifdef HAVE_UNAME
+ strncpy(sysName, utsName.nodename, sizeof(sysName));
+#else
+#if defined (HAVE_EXECV) && !defined (mingw32)
+ sprintf(extmp.command, "%s -n", UNAMEPROG);
+ /*
+ * setup defaults
+ */
+ extmp.type = EXECPROC;
+ extmp.next = NULL;
+ exec_command(&extmp);
+ strncpy(sysName, extmp.output, sizeof(sysName));
+ sysName[strlen(sysName) - 1] = 0; /* chomp new line */
+#else
+ strcpy(sysName, "unknown");
+#endif /* HAVE_EXECV */
+#endif /* HAVE_UNAME */
+#endif /* HAVE_GETHOSTNAME */
+
+#if (defined (WIN32) && defined (HAVE_WIN32_PLATFORM_SDK)) || defined (mingw32)
+ {
+ HKEY hKey;
+ /* Default sysContact is the registered windows user */
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) {
+ char registeredOwner[256] = "";
+ DWORD registeredOwnerSz = 256;
+ if (RegQueryValueEx(hKey, "RegisteredOwner", NULL, NULL, (LPBYTE)registeredOwner, &registeredOwnerSz) == ERROR_SUCCESS) {
+ strcpy(sysContact, registeredOwner);
+ }
+ RegCloseKey(hKey);
+ }
+ }
+#endif
+
+ /* default sysObjectID */
+ memcpy(sysObjectID, version_sysoid, version_sysoid_len * sizeof(oid));
+ sysObjectIDLength = version_sysoid_len;
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("mibII/system", system_variables, variable1,
+ system_variables_oid);
+
+ if (++system_module_count == 3)
+ REGISTER_SYSOR_ENTRY(system_module_oid,
+ "The MIB module for SNMPv2 entities");
+
+ sysContactSet = sysLocationSet = sysNameSet = 0;
+
+ /*
+ * register our config handlers
+ */
+ snmpd_register_config_handler("sysdescr",
+ system_parse_config_sysdescr, NULL,
+ "description");
+ snmpd_register_config_handler("syslocation",
+ system_parse_config_sysloc, NULL,
+ "location");
+ snmpd_register_config_handler("syscontact", system_parse_config_syscon,
+ NULL, "contact-name");
+ snmpd_register_config_handler("sysname", system_parse_config_sysname,
+ NULL, "node-name");
+ snmpd_register_config_handler("psyslocation",
+ system_parse_config_sysloc, NULL, NULL);
+ snmpd_register_config_handler("psyscontact",
+ system_parse_config_syscon, NULL, NULL);
+ snmpd_register_config_handler("psysname", system_parse_config_sysname,
+ NULL, NULL);
+ snmpd_register_config_handler("sysservices",
+ system_parse_config_sysServices, NULL,
+ "NUMBER");
+ snmpd_register_config_handler("sysobjectid",
+ system_parse_config_sysObjectID, NULL,
+ "OID");
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ system_store, NULL);
+
+}
+
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+#ifdef USING_MIBII_SYSORTABLE_MODULE
+extern struct timeval sysOR_lastchange;
+#endif
+
+u_char *
+var_system(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ static u_long ulret;
+
+ if (header_generic(vp, name, length, exact, var_len, write_method) ==
+ MATCH_FAILED)
+ return NULL;
+
+ switch (vp->magic) {
+ case VERSION_DESCR:
+ *var_len = strlen(version_descr);
+ return (u_char *) version_descr;
+ case VERSIONID:
+ *var_len = sysObjectIDLength * sizeof(sysObjectID[0]);
+ return (u_char *)sysObjectID;
+ case UPTIME:
+ ulret = netsnmp_get_agent_uptime();
+ return ((u_char *) & ulret);
+ case SYSCONTACT:
+ *var_len = strlen(sysContact);
+ *write_method = writeSystem;
+ return (u_char *) sysContact;
+ case SYSTEMNAME:
+ *var_len = strlen(sysName);
+ *write_method = writeSystem;
+ return (u_char *) sysName;
+ case SYSLOCATION:
+ *var_len = strlen(sysLocation);
+ *write_method = writeSystem;
+ return (u_char *) sysLocation;
+ case SYSSERVICES:
+#if NETSNMP_NO_DUMMY_VALUES
+ if (!sysServicesConfiged)
+ return NULL;
+#endif
+ long_return = sysServices;
+ return (u_char *) & long_return;
+
+#ifdef USING_MIBII_SYSORTABLE_MODULE
+ case SYSORLASTCHANGE:
+ ulret = netsnmp_timeval_uptime(&sysOR_lastchange);
+ return ((u_char *) & ulret);
+#endif
+
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_system\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+
+
+int
+writeSystem(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ u_char *cp;
+ char *buf = NULL, *oldbuf = NULL;
+ int count, *setvar = NULL;
+
+ switch ((char) name[7]) {
+ case VERSION_DESCR:
+ case VERSIONID:
+ case UPTIME:
+ snmp_log(LOG_ERR, "Attempt to write to R/O OID\n");
+ return SNMP_ERR_NOTWRITABLE;
+ case SYSCONTACT:
+ buf = sysContact;
+ oldbuf = oldsysContact;
+ setvar = &sysContactSet;
+ break;
+ case SYSTEMNAME:
+ buf = sysName;
+ oldbuf = oldsysName;
+ setvar = &sysNameSet;
+ break;
+ case SYSLOCATION:
+ buf = sysLocation;
+ oldbuf = oldsysLocation;
+ setvar = &sysLocationSet;
+ break;
+ case SYSSERVICES:
+ case SYSORLASTCHANGE:
+ snmp_log(LOG_ERR, "Attempt to write to R/O OID\n");
+ return SNMP_ERR_NOTWRITABLE;
+ default:
+ return SNMP_ERR_GENERR; /* ??? */
+ }
+
+ switch (action) {
+ case RESERVE1: /* Check values for acceptability */
+ if (var_val_type != ASN_OCTET_STR) {
+ snmp_log(LOG_ERR, "not string\n");
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > sizeof(sysLocation) - 1) {
+ snmp_log(LOG_ERR, "bad length\n");
+ return SNMP_ERR_WRONGLENGTH;
+ }
+
+ for (cp = var_val, count = 0; count < (int) var_val_len;
+ count++, cp++) {
+ if (!isprint(*cp)) {
+ snmp_log(LOG_ERR, "not print %x\n", *cp);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ }
+ if (setvar != NULL && *setvar < 0) {
+ /*
+ * The object is set in a read-only configuration file.
+ */
+ return SNMP_ERR_NOTWRITABLE;
+ }
+ break;
+
+ case RESERVE2: /* Allocate memory and similar resources */
+
+ /*
+ * Using static strings, so nothing needs to be done
+ */
+ break;
+
+ case ACTION: /* Perform the SET action (if reversible) */
+
+ /*
+ * Save the old value, in case of UNDO
+ */
+ strcpy(oldbuf, buf);
+ memcpy(buf, var_val, var_val_len);
+ buf[var_val_len] = 0;
+ break;
+
+ case UNDO: /* Reverse the SET action and free resources */
+
+ strcpy(buf, oldbuf);
+ oldbuf[0] = 0;
+ break;
+
+ case COMMIT:
+ if (setvar != NULL) {
+ *setvar = 1;
+ }
+ snmp_save_persistent(netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_APPTYPE));
+ (void) snmp_call_callbacks(SNMP_CALLBACK_LIBRARY,
+ SNMP_CALLBACK_STORE_DATA, NULL);
+ snmp_clean_persistent(netsnmp_ds_get_string
+ (NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_APPTYPE));
+
+ case FREE: /* Free any resources allocated */
+
+ /*
+ * No resources have been allocated, but "empty" the 'oldbuf'
+ */
+ oldbuf[0] = 0;
+ break;
+ }
+ return SNMP_ERR_NOERROR;
+} /* end of writeSystem */
+
+ /*********************
+ *
+ * Internal implementation functions - None
+ *
+ *********************/
+
+#if (defined (WIN32) && defined (HAVE_WIN32_PLATFORM_SDK)) || defined (mingw32)
+static void
+windowsOSVersionString(char stringbuf[], size_t stringbuflen)
+{
+ /* copy OS version to string buffer in 'uname -a' format */
+ OSVERSIONINFOEX osVersionInfo;
+ BOOL gotOsVersionInfoEx;
+ char windowsVersion[256] = "";
+ char hostname[256] = "";
+ char identifier[256] = "";
+ DWORD identifierSz = 256;
+ HKEY hKey;
+
+ ZeroMemory(&osVersionInfo, sizeof(OSVERSIONINFOEX));
+ osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
+ gotOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *)&osVersionInfo);
+ if (gotOsVersionInfoEx == FALSE) {
+ GetVersionEx((OSVERSIONINFO *)&osVersionInfo);
+ }
+
+ switch (osVersionInfo.dwPlatformId) {
+ case VER_PLATFORM_WIN32_NT:
+ if ((osVersionInfo.dwMajorVersion == 5) && (osVersionInfo.dwMinorVersion == 2)) {
+ strcat(windowsVersion, "Server 2003");
+ } else if ((osVersionInfo.dwMajorVersion == 5) && (osVersionInfo.dwMinorVersion == 1)) {
+ strcat(windowsVersion, "XP");
+ } else if ((osVersionInfo.dwMajorVersion == 5) && (osVersionInfo.dwMinorVersion == 0)) {
+ strcat(windowsVersion, "2000");
+ } else if (osVersionInfo.dwMajorVersion <= 4) {
+ strcat(windowsVersion, "NT");
+ }
+ if (gotOsVersionInfoEx == TRUE) {
+ if (osVersionInfo.wProductType == VER_NT_WORKSTATION) {
+ if (osVersionInfo.dwMajorVersion == 4) {
+ strcat(windowsVersion, " Workstation 4.0");
+ } else if (osVersionInfo.wSuiteMask & VER_SUITE_PERSONAL) {
+ strcat(windowsVersion, " Home Edition");
+ } else {
+ strcat(windowsVersion, " Professional");
+ }
+ } else if (osVersionInfo.wProductType == VER_NT_SERVER) {
+ if ((osVersionInfo.dwMajorVersion == 5) && (osVersionInfo.dwMinorVersion == 2)) {
+ if (osVersionInfo.wSuiteMask & VER_SUITE_DATACENTER) {
+ strcat(windowsVersion, " Datacenter Edition");
+ } else if (osVersionInfo.wSuiteMask & VER_SUITE_ENTERPRISE) {
+ strcat(windowsVersion, " Enterprise Edition");
+ } else if (osVersionInfo.wSuiteMask == VER_SUITE_BLADE) {
+ strcat(windowsVersion, " Web Edition");
+ } else {
+ strcat(windowsVersion, " Standard Edition");
+ }
+ } else if ((osVersionInfo.dwMajorVersion == 5) && (osVersionInfo.dwMinorVersion == 0)) {
+ if (osVersionInfo.wSuiteMask & VER_SUITE_DATACENTER) {
+ strcat(windowsVersion, " Datacenter Server");
+ } else if (osVersionInfo.wSuiteMask & VER_SUITE_ENTERPRISE) {
+ strcat(windowsVersion, " Advanced Server");
+ } else {
+ strcat(windowsVersion, " Server");
+ }
+ } else {
+ if (osVersionInfo.wSuiteMask & VER_SUITE_ENTERPRISE) {
+ strcat(windowsVersion, " Server 4.0, Enterprise Edition");
+ } else {
+ strcat(windowsVersion, " Server 4.0");
+ }
+ }
+ }
+ } else {
+ char productType[80];
+ DWORD productTypeSz = 80;
+
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\ProductOptions", 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) {
+ if (RegQueryValueEx(hKey, "ProductType", NULL, NULL, (LPBYTE) productType, &productTypeSz) == ERROR_SUCCESS) {
+ char versionStr[10];
+ if (strcmpi("WINNT", productType) == 0) {
+ strcat(windowsVersion, " Workstation");
+ } else if (strcmpi("LANMANNT", productType) == 0) {
+ strcat(windowsVersion, " Server");
+ } else if (strcmpi("SERVERNT", productType) == 0) {
+ strcat(windowsVersion, " Advanced Server");
+ }
+ sprintf(versionStr, " %d.%d", (int)osVersionInfo.dwMajorVersion, (int)osVersionInfo.dwMinorVersion);
+ strcat(windowsVersion, versionStr);
+ }
+ RegCloseKey(hKey);
+ }
+ }
+ break;
+ case VER_PLATFORM_WIN32_WINDOWS:
+ if ((osVersionInfo.dwMajorVersion == 4) && (osVersionInfo.dwMinorVersion == 90)) {
+ strcat(windowsVersion, "ME");
+ } else if ((osVersionInfo.dwMajorVersion == 4) && (osVersionInfo.dwMinorVersion == 10)) {
+ strcat(windowsVersion, "98");
+ if (osVersionInfo.szCSDVersion[1] == 'A') {
+ strcat(windowsVersion, " SE");
+ }
+ } else if ((osVersionInfo.dwMajorVersion == 4) && (osVersionInfo.dwMinorVersion == 0)) {
+ strcat(windowsVersion, "95");
+ if ((osVersionInfo.szCSDVersion[1] == 'C') || (osVersionInfo.szCSDVersion[1] == 'B')) {
+ strcat(windowsVersion, " OSR2");
+ }
+ }
+ break;
+ }
+
+ gethostname(hostname, sizeof(hostname));
+
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) {
+ RegQueryValueEx(hKey, "Identifier", NULL, NULL, (LPBYTE)&identifier, &identifierSz);
+ RegCloseKey(hKey);
+ }
+
+ /* Output is made to look like results from uname -a */
+ snprintf(stringbuf, stringbuflen,
+ "Windows %s %d.%d.%d %s %s %s", hostname,
+ (int)osVersionInfo.dwMajorVersion, (int)osVersionInfo.dwMinorVersion,
+ (int)osVersionInfo.dwBuildNumber, osVersionInfo.szCSDVersion,
+ windowsVersion, identifier);
+}
+#endif /* WIN32 and HAVE_WIN32_PLATFORM_SDK or mingw32 */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/system_mib.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/system_mib.h
new file mode 100644
index 0000000000..ec3312d35a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/system_mib.h
@@ -0,0 +1,31 @@
+/*
+ * System MIB group interface - system.h
+ *
+ */
+#ifndef _MIBGROUP_SYSTEM_MIB_H
+#define _MIBGROUP_SYSTEM_MIB_H
+
+config_require(util_funcs)
+
+ extern char version_descr[];
+
+ void init_system_mib(void);
+ extern FindVarMethod var_system;
+
+/*
+ * config file parsing routines
+ */
+ void system_parse_config_sysloc(const char *, char *);
+ void system_parse_config_syscon(const char *, char *);
+ void system_parse_config_sysname(const char *, char *);
+
+#define VERSION_DESCR 1
+#define VERSIONID 2
+#define UPTIME 3
+#define SYSCONTACT 4
+#define SYSTEMNAME 5
+#define SYSLOCATION 6
+#define SYSSERVICES 7
+#define SYSORLASTCHANGE 8
+
+#endif /* _MIBGROUP_SYSTEM_MIB_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcp.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcp.c
new file mode 100644
index 0000000000..7e707009cd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcp.c
@@ -0,0 +1,793 @@
+
+/*
+ * TCP MIB group implementation - tcp.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include "mibII_common.h"
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#if HAVE_SYS_PROTOSW_H
+#include <sys/protosw.h>
+#endif
+#if HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#if defined(osf4) || defined(osf5) || defined(aix4) || defined(hpux10)
+/*
+ * these are undefed to remove a stupid warning on osf compilers
+ * because they get redefined with a slightly different notation of the
+ * same value. -- Wes
+ */
+#undef TCP_NODELAY
+#undef TCP_MAXSEG
+#endif
+#if HAVE_NETINET_TCP_H
+#include <netinet/tcp.h>
+#endif
+#if HAVE_NETINET_TCPIP_H
+#include <netinet/tcpip.h>
+#endif
+#if HAVE_NETINET_TCP_TIMER_H
+#include <netinet/tcp_timer.h>
+#endif
+#if HAVE_NETINET_TCP_VAR_H
+#include <netinet/tcp_var.h>
+#endif
+#if HAVE_NETINET_TCP_FSM_H
+#include <netinet/tcp_fsm.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/auto_nlist.h>
+
+#include "util_funcs.h"
+#include "tcp.h"
+#include "tcpTable.h"
+#include "sysORTable.h"
+
+#ifndef MIB_STATS_CACHE_TIMEOUT
+#define MIB_STATS_CACHE_TIMEOUT 5
+#endif
+#ifndef TCP_STATS_CACHE_TIMEOUT
+#define TCP_STATS_CACHE_TIMEOUT MIB_STATS_CACHE_TIMEOUT
+#endif
+
+#if defined(HAVE_LIBPERFSTAT_H) && (defined(aix4) || defined(aix5) || defined(aix6)) && !defined(FIRST_PROTOCOL)
+#include <libperfstat.h>
+#ifdef FIRST_PROTOCOL
+perfstat_protocol_t ps_proto;
+perfstat_id_t ps_name;
+#define _USE_FIRST_PROTOCOL 1
+#endif
+#endif
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+ /*
+ * FreeBSD4 *does* need an explicit variable 'hz'
+ * since this appears in a system header file.
+ * But only define it under FreeBSD, since it
+ * breaks other systems (notable AIX)
+ */
+#ifdef freebsd4
+int hz = 1000;
+#endif
+
+extern int TCP_Count_Connections( void );
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+
+/*
+ * Define the OID pointer to the top of the mib tree that we're
+ * registering underneath, and the OID for the MIB module
+ */
+oid tcp_oid[] = { SNMP_OID_MIB2, 6 };
+oid tcp_module_oid[] = { SNMP_OID_MIB2, 49 };
+
+void
+init_tcp(void)
+{
+ netsnmp_handler_registration *reginfo;
+
+ /*
+ * register ourselves with the agent as a group of scalars...
+ */
+ DEBUGMSGTL(("mibII/tcpScalar", "Initialising TCP scalar group\n"));
+ reginfo = netsnmp_create_handler_registration("tcp", tcp_handler,
+ tcp_oid, OID_LENGTH(tcp_oid), HANDLER_CAN_RONLY);
+ netsnmp_register_scalar_group(reginfo, TCPRTOALGORITHM, TCPOUTRSTS);
+
+ /*
+ * .... with a local cache
+ * (except for HP-UX 11, which extracts objects individually)
+ */
+#ifndef hpux11
+ netsnmp_inject_handler( reginfo,
+ netsnmp_get_cache_handler(TCP_STATS_CACHE_TIMEOUT,
+ tcp_load, tcp_free,
+ tcp_oid, OID_LENGTH(tcp_oid)));
+#endif
+
+ REGISTER_SYSOR_ENTRY(tcp_module_oid,
+ "The MIB module for managing TCP implementations");
+
+#if !defined(_USE_FIRST_PROTOCOL)
+#ifdef TCPSTAT_SYMBOL
+ auto_nlist(TCPSTAT_SYMBOL, 0, 0);
+#endif
+#ifdef TCP_SYMBOL
+ auto_nlist(TCP_SYMBOL, 0, 0);
+#endif
+#ifdef freebsd4
+ hz = sysconf(_SC_CLK_TCK); /* get ticks/s from system */
+#endif
+#ifdef solaris2
+ init_kernel_sunos5();
+#endif
+#endif
+}
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+#ifdef hpux11
+#define TCP_STAT_STRUCTURE int
+#endif
+
+#ifdef linux
+#define TCP_STAT_STRUCTURE struct tcp_mib
+#define USES_SNMP_DESIGNED_TCPSTAT
+#undef TCPSTAT_SYMBOL
+#endif
+
+#ifdef solaris2
+#define TCP_STAT_STRUCTURE mib2_tcp_t
+#define USES_SNMP_DESIGNED_TCPSTAT
+#endif
+
+#if defined (WIN32) || defined (cygwin)
+#include <iphlpapi.h>
+#define TCP_STAT_STRUCTURE MIB_TCPSTATS
+#endif
+
+#ifdef HAVE_SYS_TCPIPSTATS_H
+#define TCP_STAT_STRUCTURE struct kna
+#define USES_TRADITIONAL_TCPSTAT
+#endif
+
+#if !defined(TCP_STAT_STRUCTURE)
+#define TCP_STAT_STRUCTURE struct tcpstat
+#define USES_TRADITIONAL_TCPSTAT
+#endif
+
+TCP_STAT_STRUCTURE tcpstat;
+
+
+
+ /*********************
+ *
+ * System independent handler (mostly)
+ *
+ *********************/
+
+
+
+int
+tcp_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_request_info *request;
+ netsnmp_variable_list *requestvb;
+ long ret_value = -1;
+ oid subid;
+ int type = ASN_COUNTER;
+
+ /*
+ * The cached data should already have been loaded by the
+ * cache handler, higher up the handler chain.
+ * But just to be safe, check this and load it manually if necessary
+ */
+#if defined(_USE_FIRST_PROTOCOL)
+ tcp_load(NULL, NULL);
+#elif !defined(hpux11)
+ if (!netsnmp_cache_is_valid(reqinfo, reginfo->handlerName)) {
+ netsnmp_assert(!"cache == valid"); /* always false */
+ tcp_load( NULL, NULL ); /* XXX - check for failure */
+ }
+#endif
+
+
+ /*
+ *
+ *
+ */
+ DEBUGMSGTL(("mibII/tcpScalar", "Handler - mode %s\n",
+ se_find_label_in_slist("agent_mode", reqinfo->mode)));
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ for (request=requests; request; request=request->next) {
+ requestvb = request->requestvb;
+ subid = requestvb->name[OID_LENGTH(tcp_oid)]; /* XXX */
+
+ DEBUGMSGTL(( "mibII/tcpScalar", "oid: "));
+ DEBUGMSGOID(("mibII/tcpScalar", requestvb->name,
+ requestvb->name_length));
+ DEBUGMSG(( "mibII/tcpScalar", "\n"));
+ switch (subid) {
+#ifdef USES_SNMP_DESIGNED_TCPSTAT
+ case TCPRTOALGORITHM:
+ ret_value = tcpstat.tcpRtoAlgorithm;
+ type = ASN_INTEGER;
+ break;
+ case TCPRTOMIN:
+ ret_value = tcpstat.tcpRtoMin;
+ type = ASN_INTEGER;
+ break;
+ case TCPRTOMAX:
+ ret_value = tcpstat.tcpRtoMax;
+ type = ASN_INTEGER;
+ break;
+ case TCPMAXCONN:
+ ret_value = tcpstat.tcpMaxConn;
+ type = ASN_INTEGER;
+ break;
+ case TCPACTIVEOPENS:
+ ret_value = tcpstat.tcpActiveOpens;
+ break;
+ case TCPPASSIVEOPENS:
+ ret_value = tcpstat.tcpPassiveOpens;
+ break;
+ case TCPATTEMPTFAILS:
+ ret_value = tcpstat.tcpAttemptFails;
+ break;
+ case TCPESTABRESETS:
+ ret_value = tcpstat.tcpEstabResets;
+ break;
+ case TCPCURRESTAB:
+ ret_value = tcpstat.tcpCurrEstab;
+ type = ASN_GAUGE;
+ break;
+ case TCPINSEGS:
+ ret_value = tcpstat.tcpInSegs;
+ break;
+ case TCPOUTSEGS:
+ ret_value = tcpstat.tcpOutSegs;
+ break;
+ case TCPRETRANSSEGS:
+ ret_value = tcpstat.tcpRetransSegs;
+ break;
+ case TCPINERRS:
+#ifdef solaris2
+ ret_value = tcp_load(NULL, (void *)TCPINERRS);
+ if (ret_value == -1) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ }
+ break;
+#elif defined(linux)
+ if (tcpstat.tcpInErrsValid) {
+ ret_value = tcpstat.tcpInErrs;
+ break;
+ } else {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ }
+#else /* linux */
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#endif /* solaris2 */
+ case TCPOUTRSTS:
+#ifdef linux
+ if (tcpstat.tcpOutRstsValid) {
+ ret_value = tcpstat.tcpOutRsts;
+ break;
+ }
+#endif /* linux */
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#elif defined(USES_TRADITIONAL_TCPSTAT) && !defined(_USE_FIRST_PROTOCOL)
+#ifdef HAVE_SYS_TCPIPSTATS_H
+ /*
+ * This actually reads statistics for *all* the groups together,
+ * so we need to isolate the TCP-specific bits.
+ */
+#define tcpstat tcpstat.tcpstat
+#endif
+ case TCPRTOALGORITHM: /* Assume Van Jacobsen's algorithm */
+ ret_value = 4;
+ type = ASN_INTEGER;
+ break;
+ case TCPRTOMIN:
+#ifdef TCPTV_NEEDS_HZ
+ ret_value = TCPTV_MIN;
+#else
+ ret_value = TCPTV_MIN / PR_SLOWHZ * 1000;
+#endif
+ type = ASN_INTEGER;
+ break;
+ case TCPRTOMAX:
+#ifdef TCPTV_NEEDS_HZ
+ ret_value = TCPTV_REXMTMAX;
+#else
+ ret_value = TCPTV_REXMTMAX / PR_SLOWHZ * 1000;
+#endif
+ type = ASN_INTEGER;
+ break;
+ case TCPMAXCONN:
+ ret_value = -1; /* Dynamic maximum */
+ type = ASN_INTEGER;
+ break;
+ case TCPACTIVEOPENS:
+ ret_value = tcpstat.tcps_connattempt;
+ break;
+ case TCPPASSIVEOPENS:
+ ret_value = tcpstat.tcps_accepts;
+ break;
+ /*
+ * NB: tcps_drops is actually the sum of the two MIB
+ * counters tcpAttemptFails and tcpEstabResets.
+ */
+ case TCPATTEMPTFAILS:
+ ret_value = tcpstat.tcps_conndrops;
+ break;
+ case TCPESTABRESETS:
+ ret_value = tcpstat.tcps_drops;
+ break;
+ case TCPCURRESTAB:
+#ifdef USING_MIBII_TCPTABLE_MODULE
+ ret_value = TCP_Count_Connections();
+#else
+ ret_value = 0;
+#endif
+ type = ASN_GAUGE;
+ break;
+ case TCPINSEGS:
+ ret_value = tcpstat.tcps_rcvtotal;
+ break;
+ case TCPOUTSEGS:
+ /*
+ * RFC 1213 defines this as the number of segments sent
+ * "excluding those containing only retransmitted octets"
+ */
+ ret_value = tcpstat.tcps_sndtotal - tcpstat.tcps_sndrexmitpack;
+ break;
+ case TCPRETRANSSEGS:
+ ret_value = tcpstat.tcps_sndrexmitpack;
+ break;
+ case TCPINERRS:
+ ret_value = tcpstat.tcps_rcvbadsum + tcpstat.tcps_rcvbadoff
+#ifdef STRUCT_TCPSTAT_HAS_TCPS_RCVMEMDROP
+ + tcpstat.tcps_rcvmemdrop
+#endif
+ + tcpstat.tcps_rcvshort;
+ break;
+ case TCPOUTRSTS:
+ ret_value = tcpstat.tcps_sndctrl - tcpstat.tcps_closed;
+ break;
+#ifdef HAVE_SYS_TCPIPSTATS_H
+#undef tcpstat
+#endif
+#elif defined(hpux11)
+ case TCPRTOALGORITHM:
+ case TCPRTOMIN:
+ case TCPRTOMAX:
+ case TCPMAXCONN:
+ case TCPCURRESTAB:
+ if (subid == TCPCURRESTAB)
+ type = ASN_GAUGE;
+ else
+ type = ASN_INTEGER;
+ case TCPACTIVEOPENS:
+ case TCPPASSIVEOPENS:
+ case TCPATTEMPTFAILS:
+ case TCPESTABRESETS:
+ case TCPINSEGS:
+ case TCPOUTSEGS:
+ case TCPRETRANSSEGS:
+ case TCPINERRS:
+ case TCPOUTRSTS:
+ /*
+ * This is a bit of a hack, to shoehorn the HP-UX 11
+ * single-object retrieval approach into the caching
+ * architecture.
+ */
+ if (tcp_load(NULL, (void*)subid) == -1 ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ }
+ ret_value = tcpstat;
+ break;
+#elif defined (WIN32) || defined (cygwin)
+ case TCPRTOALGORITHM:
+ ret_value = tcpstat.dwRtoAlgorithm;
+ type = ASN_INTEGER;
+ break;
+ case TCPRTOMIN:
+ ret_value = tcpstat.dwRtoMin;
+ type = ASN_INTEGER;
+ break;
+ case TCPRTOMAX:
+ ret_value = tcpstat.dwRtoMax;
+ type = ASN_INTEGER;
+ break;
+ case TCPMAXCONN:
+ ret_value = tcpstat.dwMaxConn;
+ type = ASN_INTEGER;
+ break;
+ case TCPACTIVEOPENS:
+ ret_value = tcpstat.dwActiveOpens;
+ break;
+ case TCPPASSIVEOPENS:
+ ret_value = tcpstat.dwPassiveOpens;
+ break;
+ case TCPATTEMPTFAILS:
+ ret_value = tcpstat.dwAttemptFails;
+ break;
+ case TCPESTABRESETS:
+ ret_value = tcpstat.dwEstabResets;
+ break;
+ case TCPCURRESTAB:
+ ret_value = tcpstat.dwCurrEstab;
+ type = ASN_GAUGE;
+ break;
+ case TCPINSEGS:
+ ret_value = tcpstat.dwInSegs;
+ break;
+ case TCPOUTSEGS:
+ ret_value = tcpstat.dwOutSegs;
+ break;
+ case TCPRETRANSSEGS:
+ ret_value = tcpstat.dwRetransSegs;
+ break;
+ case TCPINERRS:
+ ret_value = tcpstat.dwInErrs;
+ break;
+ case TCPOUTRSTS:
+ ret_value = tcpstat.dwOutRsts;
+ break;
+#elif defined(_USE_FIRST_PROTOCOL)
+ case TCPRTOALGORITHM:
+ ret_value = 4;
+ type = ASN_INTEGER;
+ break;
+ case TCPRTOMIN:
+ ret_value = 0;
+ type = ASN_INTEGER;
+ break;
+ case TCPRTOMAX:
+ ret_value = 0;
+ type = ASN_INTEGER;
+ break;
+ case TCPMAXCONN:
+ ret_value = -1;
+ type = ASN_INTEGER;
+ break;
+ case TCPACTIVEOPENS:
+ ret_value = ps_proto.u.tcp.initiated;
+ break;
+ case TCPPASSIVEOPENS:
+ ret_value = ps_proto.u.tcp.accepted;
+ break;
+ case TCPATTEMPTFAILS:
+ ret_value = ps_proto.u.tcp.dropped;
+ break;
+ case TCPESTABRESETS:
+ ret_value = ps_proto.u.tcp.dropped;
+ break;
+ case TCPCURRESTAB:
+ /* this value is currently missing */
+ ret_value = 0; /*ps_proto.u.tcp.established;*/
+ type = ASN_GAUGE;
+ break;
+ case TCPINSEGS:
+ ret_value = ps_proto.u.tcp.ipackets;
+ break;
+ case TCPOUTSEGS:
+ ret_value = ps_proto.u.tcp.opackets;
+ break;
+ case TCPRETRANSSEGS:
+ ret_value = 0;
+ break;
+ case TCPINERRS:
+ ret_value = ps_proto.u.tcp.ierrors;
+ break;
+ case TCPOUTRSTS:
+ ret_value = 0;
+ break;
+#endif /* USES_SNMP_DESIGNED_TCPSTAT */
+
+ case TCPCONNTABLE:
+ /*
+ * This is not actually a valid scalar object.
+ * The table registration should take precedence,
+ * so skip this subtree, regardless of architecture.
+ */
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+
+ }
+ snmp_set_var_typed_value(request->requestvb, (u_char)type,
+ (u_char *)&ret_value, sizeof(ret_value));
+ }
+ break;
+
+ case MODE_GETNEXT:
+ case MODE_GETBULK:
+ case MODE_SET_RESERVE1:
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ snmp_log(LOG_WARNING, "mibII/tcp: Unsupported mode (%d)\n",
+ reqinfo->mode);
+ break;
+ default:
+ snmp_log(LOG_WARNING, "mibII/tcp: Unrecognised mode (%d)\n",
+ reqinfo->mode);
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+#ifdef hpux11
+int
+tcp_load(netsnmp_cache *cache, void *vmagic)
+{
+ int fd;
+ struct nmparms p;
+ unsigned int ulen;
+ int ret;
+ int magic = (int) vmagic;
+
+ if ((fd = open_mib("/dev/ip", O_RDONLY, 0, NM_ASYNC_OFF)) < 0) {
+ DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP object %d (hpux11)\n", magic));
+ return (-1); /* error */
+ }
+
+ switch (magic) {
+ case TCPRTOALGORITHM:
+ p.objid = ID_tcpRtoAlgorithm;
+ break;
+ case TCPRTOMIN:
+ p.objid = ID_tcpRtoMin;
+ break;
+ case TCPRTOMAX:
+ p.objid = ID_tcpRtoMax;
+ break;
+ case TCPMAXCONN:
+ p.objid = ID_tcpMaxConn;
+ break;
+ case TCPACTIVEOPENS:
+ p.objid = ID_tcpActiveOpens;
+ break;
+ case TCPPASSIVEOPENS:
+ p.objid = ID_tcpPassiveOpens;
+ break;
+ case TCPATTEMPTFAILS:
+ p.objid = ID_tcpAttemptFails;
+ break;
+ case TCPESTABRESETS:
+ p.objid = ID_tcpEstabResets;
+ break;
+ case TCPCURRESTAB:
+ p.objid = ID_tcpCurrEstab;
+ break;
+ case TCPINSEGS:
+ p.objid = ID_tcpInSegs;
+ break;
+ case TCPOUTSEGS:
+ p.objid = ID_tcpOutSegs;
+ break;
+ case TCPRETRANSSEGS:
+ p.objid = ID_tcpRetransSegs;
+ break;
+ case TCPINERRS:
+ p.objid = ID_tcpInErrs;
+ break;
+ case TCPOUTRSTS:
+ p.objid = ID_tcpOutRsts;
+ break;
+ default:
+ tcpstat = 0;
+ close_mib(fd);
+ return -1;
+ }
+
+ p.buffer = (void *)&tcpstat;
+ ulen = sizeof(TCP_STAT_STRUCTURE);
+ p.len = &ulen;
+ ret = get_mib_info(fd, &p);
+ close_mib(fd);
+
+ DEBUGMSGTL(("mibII/tcpScalar", "%s TCP object %d (hpux11)\n",
+ (ret < 0 ? "Failed to load" : "Loaded"), magic));
+ return (ret); /* 0: ok, < 0: error */
+}
+#elif defined(linux)
+int
+tcp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ ret_value = linux_read_tcp_stat(&tcpstat);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (linux)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (linux)\n"));
+ }
+ return ret_value;
+}
+#elif defined(solaris2)
+int
+tcp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+ int magic = (int)vmagic;
+ mib2_ip_t ipstat;
+
+ /*
+ * tcpInErrs is actually implemented as part of the MIB_IP group
+ * so we need to retrieve this independently
+ */
+ if (magic == TCPINERRS) {
+ if (getMibstat
+ (MIB_IP, &ipstat, sizeof(mib2_ip_t), GET_FIRST,
+ &Get_everything, NULL) < 0) {
+ DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP object %d (solaris)\n", magic));
+ return -1;
+ } else {
+ DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP object %d (solaris)\n", magic));
+ return ipstat.tcpInErrs;
+ }
+ }
+
+ /*
+ * Otherwise, retrieve the whole of the MIB_TCP group (and cache it)
+ */
+ ret_value = getMibstat(MIB_TCP, &tcpstat, sizeof(mib2_tcp_t),
+ GET_FIRST, &Get_everything, NULL);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (solaris)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (solaris)\n"));
+ }
+ return ret_value;
+}
+#elif defined (WIN32) || defined (cygwin)
+int
+tcp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ ret_value = GetTcpStatistics(&tcpstat);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (win32)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (win32)\n"));
+ }
+ return ret_value;
+}
+#elif defined(_USE_FIRST_PROTOCOL)
+int
+tcp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ strcpy(ps_name.name, "tcp");
+ ret_value = perfstat_protocol(&ps_name, &ps_proto, sizeof(ps_proto), 1);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (AIX)\n"));
+ } else {
+ ret_value = 0;
+ DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (AIX)\n"));
+ }
+ return ret_value;
+}
+#elif (defined(NETSNMP_CAN_USE_SYSCTL) && defined(TCPCTL_STATS))
+int
+tcp_load(netsnmp_cache *cache, void *vmagic)
+{
+ int sname[4] = { CTL_NET, PF_INET, IPPROTO_TCP, TCPCTL_STATS };
+ size_t len = sizeof(tcpstat);
+ long ret_value = -1;
+
+ ret_value = sysctl(sname, 4, &tcpstat, &len, 0, 0);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (sysctl)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (sysctl)\n"));
+ }
+ return ret_value;
+}
+#elif defined(HAVE_SYS_TCPIPSTATS_H)
+int
+tcp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ ret_value = sysmp(MP_SAGET, MPSA_TCPIPSTATS, &tcpstat, sizeof(tcpstat));
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (tcpipstats)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (tcpipstats)\n"));
+ }
+ return ret_value;
+}
+#elif defined(TCPSTAT_SYMBOL)
+int
+tcp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ if (auto_nlist(TCPSTAT_SYMBOL, (char *)&tcpstat, sizeof(tcpstat)))
+ ret_value = 0;
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (tcpstat)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/tcpScalar", "Loaded TCP scalar Group (tcpstat)\n"));
+ }
+ return ret_value;
+}
+#else /* TCPSTAT_SYMBOL */
+int
+tcp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ DEBUGMSGTL(("mibII/tcpScalar", "Failed to load TCP scalar Group (null)\n"));
+ return ret_value;
+}
+#endif /* WIN32 cygwin */
+
+
+void
+tcp_free(netsnmp_cache *cache, void *magic)
+{
+#if defined(_USE_FIRST_PROTOCOL)
+ memset(&ps_proto, 0, sizeof(ps_proto));
+#else
+ memset(&tcpstat, 0, sizeof(tcpstat));
+#endif
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcp.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcp.h
new file mode 100644
index 0000000000..479661dfa5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcp.h
@@ -0,0 +1,36 @@
+/*
+ * TCP MIB group interface - tcp.h
+ *
+ */
+#ifndef _MIBGROUP_TCP_H
+#define _MIBGROUP_TCP_H
+
+
+config_require(mibII/tcpTable util_funcs)
+config_arch_require(solaris2, kernel_sunos5)
+config_arch_require(linux, mibII/kernel_linux)
+
+extern void init_tcp(void);
+extern Netsnmp_Node_Handler tcp_handler;
+extern NetsnmpCacheLoad tcp_load;
+extern NetsnmpCacheFree tcp_free;
+
+
+#define TCPRTOALGORITHM 1
+#define TCPRTOMIN 2
+#define TCPRTOMAX 3
+#define TCPMAXCONN 4
+#define TCPACTIVEOPENS 5
+#define TCPPASSIVEOPENS 6
+#define TCPATTEMPTFAILS 7
+#define TCPESTABRESETS 8
+#define TCPCURRESTAB 9
+#define TCPINSEGS 10
+#define TCPOUTSEGS 11
+#define TCPRETRANSSEGS 12
+#define TCPCONNTABLE 13 /* Placeholder */
+#define TCPINERRS 14
+#define TCPOUTRSTS 15
+
+
+#endif /* _MIBGROUP_TCP_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcpTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcpTable.c
new file mode 100644
index 0000000000..4e512875e4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcpTable.c
@@ -0,0 +1,903 @@
+/*
+ * TCP MIB group Table implementation - tcpTable.c
+ *
+ */
+
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include "mibII_common.h"
+
+#if HAVE_NETINET_TCP_H
+#include <netinet/tcp.h>
+#endif
+#if HAVE_NETINET_TCP_TIMER_H
+#include <netinet/tcp_timer.h>
+#endif
+#if HAVE_NETINET_TCPIP_H
+#include <netinet/tcpip.h>
+#endif
+#if HAVE_NETINET_TCP_VAR_H
+#include <netinet/tcp_var.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/auto_nlist.h>
+
+#include "tcp.h"
+#include "tcpTable.h"
+#include "sysORTable.h"
+
+#ifdef hpux11
+#define TCPTABLE_ENTRY_TYPE mib_tcpConnEnt
+#define TCPTABLE_STATE State
+#define TCPTABLE_LOCALADDRESS LocalAddress
+#define TCPTABLE_LOCALPORT LocalPort
+#define TCPTABLE_REMOTEADDRESS RemAddress
+#define TCPTABLE_REMOTEPORT RemPort
+#define TCPTABLE_IS_TABLE
+#else
+
+#ifdef solaris2
+typedef struct netsnmp_tcpConnEntry_s netsnmp_tcpConnEntry;
+struct netsnmp_tcpConnEntry_s {
+ mib2_tcpConnEntry_t entry;
+ netsnmp_tcpConnEntry *inp_next;
+};
+#define TCPTABLE_ENTRY_TYPE netsnmp_tcpConnEntry
+#define TCPTABLE_STATE entry.tcpConnState
+#define TCPTABLE_LOCALADDRESS entry.tcpConnLocalAddress
+#define TCPTABLE_LOCALPORT entry.tcpConnLocalPort
+#define TCPTABLE_REMOTEADDRESS entry.tcpConnRemAddress
+#define TCPTABLE_REMOTEPORT entry.tcpConnRemPort
+#define TCPTABLE_IS_LINKED_LIST
+#else
+
+#if defined (WIN32) || defined (cygwin)
+#include <iphlpapi.h>
+#define TCPTABLE_ENTRY_TYPE MIB_TCPROW
+#define TCPTABLE_STATE dwState
+#define TCPTABLE_LOCALADDRESS dwLocalAddr
+#define TCPTABLE_LOCALPORT dwLocalPort
+#define TCPTABLE_REMOTEADDRESS dwRemoteAddr
+#define TCPTABLE_REMOTEPORT dwRemotePort
+#define TCPTABLE_IS_TABLE
+#else
+
+#ifdef linux
+#define TCPTABLE_ENTRY_TYPE struct inpcb
+#define TCPTABLE_STATE inp_state
+#define TCPTABLE_LOCALADDRESS inp_laddr.s_addr
+#define TCPTABLE_LOCALPORT inp_lport
+#define TCPTABLE_REMOTEADDRESS inp_faddr.s_addr
+#define TCPTABLE_REMOTEPORT inp_fport
+#define TCPTABLE_IS_LINKED_LIST
+
+#else /* everything else */
+
+typedef struct netsnmp_inpcb_s netsnmp_inpcb;
+struct netsnmp_inpcb_s {
+ struct inpcb pcb;
+ int state;
+ netsnmp_inpcb *inp_next;
+};
+#define INP_NEXT_SYMBOL inp_next
+#define TCPTABLE_ENTRY_TYPE netsnmp_inpcb
+#define TCPTABLE_STATE state
+#define TCPTABLE_LOCALADDRESS pcb.inp_laddr.s_addr
+#define TCPTABLE_LOCALPORT pcb.inp_lport
+#define TCPTABLE_REMOTEADDRESS pcb.inp_faddr.s_addr
+#define TCPTABLE_REMOTEPORT pcb.inp_fport
+#define TCPTABLE_IS_LINKED_LIST
+
+#endif /* linux */
+#endif /* WIN32 cygwin */
+#endif /* solaris2 */
+#endif /* hpux11 */
+
+ /* Head of linked list, or root of table */
+TCPTABLE_ENTRY_TYPE *tcp_head = NULL;
+int tcp_size = 0; /* Only used for table-based systems */
+int tcp_estab = 0;
+
+
+ /*
+ *
+ * Initialization and handler routines are common to all architectures
+ *
+ */
+#ifndef MIB_STATS_CACHE_TIMEOUT
+#define MIB_STATS_CACHE_TIMEOUT 5
+#endif
+#ifndef TCP_STATS_CACHE_TIMEOUT
+#define TCP_STATS_CACHE_TIMEOUT MIB_STATS_CACHE_TIMEOUT
+#endif
+
+#if defined(TCP_PORTS_IN_HOST_ORDER) && TCP_PORTS_IN_HOST_ORDER
+#define TCP_PORT_TO_HOST_ORDER(x) x
+#else
+#define TCP_PORT_TO_HOST_ORDER(x) ntohs(x)
+#endif
+
+oid tcpTable_oid[] = { SNMP_OID_MIB2, 6, 13 };
+
+void
+init_tcpTable(void)
+{
+ netsnmp_table_registration_info *table_info;
+ netsnmp_iterator_info *iinfo;
+ netsnmp_handler_registration *reginfo;
+
+ DEBUGMSGTL(("mibII/tcpTable", "Initialising TCP Table\n"));
+ /*
+ * Create the table data structure, and define the indexing....
+ */
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ if (!table_info) {
+ return;
+ }
+ netsnmp_table_helper_add_indexes(table_info, ASN_IPADDRESS,
+ ASN_INTEGER,
+ ASN_IPADDRESS,
+ ASN_INTEGER, 0);
+ table_info->min_column = TCPCONNSTATE;
+ table_info->max_column = TCPCONNREMOTEPORT;
+
+
+ /*
+ * .... and iteration information ....
+ */
+ iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+ if (!iinfo) {
+ return;
+ }
+ iinfo->get_first_data_point = tcpTable_first_entry;
+ iinfo->get_next_data_point = tcpTable_next_entry;
+ iinfo->table_reginfo = table_info;
+#if defined (WIN32) || defined (cygwin)
+ iinfo->flags |= NETSNMP_ITERATOR_FLAG_SORTED;
+#endif /* WIN32 || cygwin */
+
+
+ /*
+ * .... and register the table with the agent.
+ */
+ reginfo = netsnmp_create_handler_registration("tcpTable",
+ tcpTable_handler,
+ tcpTable_oid, OID_LENGTH(tcpTable_oid),
+ HANDLER_CAN_RONLY),
+ netsnmp_register_table_iterator(reginfo, iinfo);
+
+ /*
+ * .... with a local cache
+ * (except for Solaris, which uses a different approach)
+ */
+ netsnmp_inject_handler( reginfo,
+ netsnmp_get_cache_handler(TCP_STATS_CACHE_TIMEOUT,
+ tcpTable_load, tcpTable_free,
+ tcpTable_oid, OID_LENGTH(tcpTable_oid)));
+}
+
+
+
+int
+tcpTable_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_request_info *request;
+ netsnmp_variable_list *requestvb;
+ netsnmp_table_request_info *table_info;
+ TCPTABLE_ENTRY_TYPE *entry;
+ oid subid;
+ long port;
+ long state;
+
+ DEBUGMSGTL(("mibII/tcpTable", "Handler - mode %s\n",
+ se_find_label_in_slist("agent_mode", reqinfo->mode)));
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ for (request=requests; request; request=request->next) {
+ requestvb = request->requestvb;
+ DEBUGMSGTL(( "mibII/tcpTable", "oid: "));
+ DEBUGMSGOID(("mibII/tcpTable", requestvb->name,
+ requestvb->name_length));
+ DEBUGMSG(( "mibII/tcpTable", "\n"));
+
+ entry = (TCPTABLE_ENTRY_TYPE *)netsnmp_extract_iterator_context(request);
+ if (!entry)
+ continue;
+ table_info = netsnmp_extract_table_info(request);
+ subid = table_info->colnum;
+
+ switch (subid) {
+ case TCPCONNSTATE:
+ state = entry->TCPTABLE_STATE;
+ snmp_set_var_typed_value(requestvb, ASN_INTEGER,
+ (u_char *)&state, sizeof(state));
+ break;
+ case TCPCONNLOCALADDRESS:
+#if defined(osf5) && defined(IN6_EXTRACT_V4ADDR)
+ snmp_set_var_typed_value(requestvb, ASN_IPADDRESS,
+ (u_char*)IN6_EXTRACT_V4ADDR(&entry->pcb.inp_laddr),
+ sizeof(IN6_EXTRACT_V4ADDR(&entry->pcb.inp_laddr)));
+#else
+ snmp_set_var_typed_value(requestvb, ASN_IPADDRESS,
+ (u_char *)&entry->TCPTABLE_LOCALADDRESS,
+ sizeof(entry->TCPTABLE_LOCALADDRESS));
+#endif
+ break;
+ case TCPCONNLOCALPORT:
+ port = TCP_PORT_TO_HOST_ORDER((u_short)entry->TCPTABLE_LOCALPORT);
+ snmp_set_var_typed_value(requestvb, ASN_INTEGER,
+ (u_char *)&port, sizeof(port));
+ break;
+ case TCPCONNREMOTEADDRESS:
+#if defined(osf5) && defined(IN6_EXTRACT_V4ADDR)
+ snmp_set_var_typed_value(requestvb, ASN_IPADDRESS,
+ (u_char*)IN6_EXTRACT_V4ADDR(&entry->pcb.inp_laddr),
+ sizeof(IN6_EXTRACT_V4ADDR(&entry->pcb.inp_laddr)));
+#else
+ snmp_set_var_typed_value(requestvb, ASN_IPADDRESS,
+ (u_char *)&entry->TCPTABLE_REMOTEADDRESS,
+ sizeof(entry->TCPTABLE_REMOTEADDRESS));
+#endif
+ break;
+ case TCPCONNREMOTEPORT:
+ port = TCP_PORT_TO_HOST_ORDER((u_short)entry->TCPTABLE_REMOTEPORT);
+ snmp_set_var_typed_value(requestvb, ASN_INTEGER,
+ (u_char *)&port, sizeof(port));
+ break;
+ }
+ }
+ break;
+
+ case MODE_GETNEXT:
+ case MODE_GETBULK:
+ case MODE_SET_RESERVE1:
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ snmp_log(LOG_WARNING, "mibII/tcpTable: Unsupported mode (%d)\n",
+ reqinfo->mode);
+ break;
+ default:
+ snmp_log(LOG_WARNING, "mibII/tcpTable: Unrecognised mode (%d)\n",
+ reqinfo->mode);
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+TCP_Count_Connections( void ) {
+ return tcp_estab;
+}
+
+ /*
+ * Two forms of iteration hook routines:
+ * One for when the TCP table is stored as a table
+ * One for when the TCP table is stored as a linked list
+ *
+ * Also applies to the cache-handler free routine
+ */
+
+#ifdef TCPTABLE_IS_TABLE
+netsnmp_variable_list *
+tcpTable_first_entry(void **loop_context,
+ void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ /*
+ * XXX - How can we tell if the cache is valid?
+ * No access to 'reqinfo'
+ */
+ if (tcp_size == 0)
+ return NULL;
+
+ /*
+ * Point to the first entry, and use the
+ * 'next_entry' hook to retrieve this row
+ */
+ *loop_context = 0;
+ return tcpTable_next_entry( loop_context, data_context, index, data );
+}
+
+netsnmp_variable_list *
+tcpTable_next_entry( void **loop_context,
+ void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ int i = (int)*loop_context;
+ netsnmp_variable_list *idx;
+ long port;
+
+ if (tcp_size < i)
+ return NULL;
+
+ /*
+ * Set up the indexing for the specified row...
+ */
+ idx = index;
+#if defined (WIN32) || defined (cygwin)
+ port = ntohl((u_long)tcp_head[i].TCPTABLE_LOCALADDRESS);
+ snmp_set_var_value(idx, (u_char *)&port,
+ sizeof(tcp_head[i].TCPTABLE_LOCALADDRESS));
+#else
+ snmp_set_var_value(idx, (u_char *)&tcp_head[i].TCPTABLE_LOCALADDRESS,
+ sizeof(tcp_head[i].TCPTABLE_LOCALADDRESS));
+#endif
+
+ port = TCP_PORT_TO_HOST_ORDER((u_short)tcp_head[i].TCPTABLE_LOCALPORT);
+ idx = idx->next_variable;
+ snmp_set_var_value(idx, (u_char*)&port, sizeof(port));
+
+ idx = idx->next_variable;
+#if defined (WIN32) || defined (cygwin)
+ port = ntohl((u_long)tcp_head[i].TCPTABLE_REMOTEADDRESS);
+ snmp_set_var_value(idx, (u_char *)&port,
+ sizeof(tcp_head[i].TCPTABLE_REMOTEADDRESS));
+#else
+ snmp_set_var_value(idx, (u_char *)&tcp_head[i].TCPTABLE_REMOTEADDRESS,
+ sizeof(tcp_head[i].TCPTABLE_REMOTEADDRESS));
+#endif
+
+ port = TCP_PORT_TO_HOST_ORDER((u_short)tcp_head[i].TCPTABLE_REMOTEPORT);
+ idx = idx->next_variable;
+ snmp_set_var_value(idx, (u_char*)&port, sizeof(port));
+
+ /*
+ * ... return the data structure for this row,
+ * and update the loop context ready for the next one.
+ */
+ *data_context = (void*)&tcp_head[i];
+ *loop_context = (void*)++i;
+
+ return index;
+}
+
+void
+tcpTable_free(netsnmp_cache *cache, void *magic)
+{
+#if defined (WIN32) || defined (cygwin)
+ if (tcp_head) {
+ /* the allocated structure is a count followed by table entries */
+ free((char *)(tcp_head) - sizeof(DWORD));
+ }
+#else
+ if (tcp_head)
+ free(tcp_head);
+#endif
+ tcp_head = NULL;
+ tcp_size = 0;
+ tcp_estab = 0;
+}
+#else
+#ifdef TCPTABLE_IS_LINKED_LIST
+netsnmp_variable_list *
+tcpTable_first_entry(void **loop_context,
+ void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ /*
+ * XXX - How can we tell if the cache is valid?
+ * No access to 'reqinfo'
+ */
+ if (tcp_head == 0)
+ return NULL;
+
+ /*
+ * Point to the first entry, and use the
+ * 'next_entry' hook to retrieve this row
+ */
+ *loop_context = (void*)tcp_head;
+ return tcpTable_next_entry( loop_context, data_context, index, data );
+}
+
+netsnmp_variable_list *
+tcpTable_next_entry( void **loop_context,
+ void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ TCPTABLE_ENTRY_TYPE *entry = (TCPTABLE_ENTRY_TYPE *)*loop_context;
+ netsnmp_variable_list *idx;
+ long addr, port;
+
+ if (!entry)
+ return NULL;
+
+ /*
+ * Set up the indexing for the specified row...
+ */
+ idx = index;
+#if defined(osf5) && defined(IN6_EXTRACT_V4ADDR)
+ addr = ntohl(IN6_EXTRACT_V4ADDR(&entry->pcb.inp_laddr));
+#else
+ addr = ntohl(entry->TCPTABLE_LOCALADDRESS);
+#endif
+ snmp_set_var_value(idx, (u_char *)&addr, sizeof(addr));
+
+ port = TCP_PORT_TO_HOST_ORDER(entry->TCPTABLE_LOCALPORT);
+ idx = idx->next_variable;
+ snmp_set_var_value(idx, (u_char*)&port, sizeof(port));
+
+ idx = idx->next_variable;
+#if defined(osf5) && defined(IN6_EXTRACT_V4ADDR)
+ addr = ntohl(IN6_EXTRACT_V4ADDR(&entry->pcb.inp_faddr));
+#else
+ addr = ntohl(entry->TCPTABLE_REMOTEADDRESS);
+#endif
+ snmp_set_var_value(idx, (u_char *)&addr, sizeof(addr));
+
+ port = TCP_PORT_TO_HOST_ORDER(entry->TCPTABLE_REMOTEPORT);
+ idx = idx->next_variable;
+ snmp_set_var_value(idx, (u_char*)&port, sizeof(port));
+
+ /*
+ * ... return the data structure for this row,
+ * and update the loop context ready for the next one.
+ */
+ *data_context = (void*)entry;
+ *loop_context = (void*)entry->INP_NEXT_SYMBOL;
+ return index;
+}
+
+void
+tcpTable_free(netsnmp_cache *cache, void *magic)
+{
+ TCPTABLE_ENTRY_TYPE *p;
+ while (tcp_head) {
+ p = tcp_head;
+ tcp_head = tcp_head->INP_NEXT_SYMBOL;
+ free(p);
+ }
+
+ tcp_head = NULL;
+ tcp_size = 0;
+ tcp_estab = 0;
+}
+#endif /* TCPTABLE_IS_LINKED_LIST */
+#endif /* TCPTABLE_IS_TABLE */
+
+
+ /*
+ *
+ * The cache-handler loading routine is the main
+ * place for architecture-specific code
+ *
+ * Load into either a table structure, or a linked list
+ * depending on the system architecture
+ */
+
+
+#ifdef hpux11
+int
+tcpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ int fd;
+ struct nmparms p;
+ int val = 0;
+ unsigned int ulen;
+ int ret;
+ int i;
+
+ tcpTable_free(NULL, NULL);
+
+ if ((fd = open_mib("/dev/ip", O_RDONLY, 0, NM_ASYNC_OFF)) >= 0) {
+ p.objid = ID_tcpConnNumEnt;
+ p.buffer = (void *) &val;
+ ulen = sizeof(int);
+ p.len = &ulen;
+ if ((ret = get_mib_info(fd, &p)) == 0)
+ tcp_size = val;
+
+ if (tcp_size > 0) {
+ ulen = (unsigned) tcp_size *sizeof(mib_tcpConnEnt);
+ tcp_head = (mib_tcpConnEnt *) malloc(ulen);
+ p.objid = ID_tcpConnTable;
+ p.buffer = (void *) tcp_head;
+ p.len = &ulen;
+ if ((ret = get_mib_info(fd, &p)) < 0) {
+ tcp_size = 0;
+ }
+ }
+
+ close_mib(fd);
+ }
+
+ /*
+ * Count the number of established connections
+ * Probably not actually necessary for HP-UX
+ */
+ for (i = 0; i < tcp_size; i++) {
+ if (tcp_head[i].State == 5 /* established */ ||
+ tcp_head[i].State == 8 /* closeWait */ )
+ tcp_estab++;
+ }
+
+ if (tcp_size > 0) {
+ DEBUGMSGTL(("mibII/tcpTable", "Loaded TCP Table\n"));
+ return 0;
+ }
+ DEBUGMSGTL(("mibII/tcpTable", "Failed to load TCP Table (hpux11)\n"));
+ return -1;
+}
+#else /* hpux11 */
+
+#ifdef linux
+int
+tcpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ FILE *in;
+ char line[256];
+
+ tcpTable_free(cache, NULL);
+
+ if (!(in = fopen("/proc/net/tcp", "r"))) {
+ DEBUGMSGTL(("mibII/tcpTable", "Failed to load TCP Table (linux1)\n"));
+ snmp_log(LOG_ERR, "snmpd: cannot open /proc/net/tcp ...\n");
+ return -1;
+ }
+
+ /*
+ * scan proc-file and build up a linked list
+ * This will actually be built up in reverse,
+ * but since the entries are unsorted, that doesn't matter.
+ */
+ while (line == fgets(line, sizeof(line), in)) {
+ struct inpcb pcb, *nnew;
+ static int linux_states[12] =
+ { 1, 5, 3, 4, 6, 7, 11, 1, 8, 9, 2, 10 };
+ int state, lp, fp, uid;
+
+ if (6 != sscanf(line,
+ "%*d: %x:%x %x:%x %x %*X:%*X %*X:%*X %*X %d",
+ &pcb.inp_laddr.s_addr, &lp,
+ &pcb.inp_faddr.s_addr, &fp, &state, &uid))
+ continue;
+
+ pcb.inp_lport = htons((unsigned short) lp);
+ pcb.inp_fport = htons((unsigned short) fp);
+
+ pcb.inp_state = (state & 0xf) < 12 ? linux_states[state & 0xf] : 2;
+ if (pcb.inp_state == 5 /* established */ ||
+ pcb.inp_state == 8 /* closeWait */ )
+ tcp_estab++;
+ pcb.uid = uid;
+
+ nnew = SNMP_MALLOC_TYPEDEF(struct inpcb);
+ if (nnew == NULL)
+ break;
+ memcpy(nnew, &pcb, sizeof(struct inpcb));
+ nnew->inp_next = tcp_head;
+ tcp_head = nnew;
+ }
+
+ fclose(in);
+
+ DEBUGMSGTL(("mibII/tcpTable", "Loaded TCP Table\n"));
+ return 0;
+}
+#else /* linux */
+
+#ifdef solaris2
+static int
+TCP_Cmp(void *addr, void *ep)
+{
+ if (memcmp((mib2_tcpConnEntry_t *) ep, (mib2_tcpConnEntry_t *) addr,
+ sizeof(mib2_tcpConnEntry_t)) == 0)
+ return (0);
+ else
+ return (1);
+}
+
+int
+tcpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ mib2_tcpConnEntry_t entry;
+ netsnmp_tcpConnEntry *nnew;
+ netsnmp_tcpConnEntry *prev_entry = NULL;
+
+ tcpTable_free(NULL, NULL);
+
+ if (getMibstat(MIB_TCP_CONN, &entry, sizeof(mib2_tcpConnEntry_t),
+ GET_FIRST, &TCP_Cmp, &entry) != 0) {
+ DEBUGMSGTL(("mibII/tcpTable", "Failed to load TCP Table (solaris)\n"));
+ return -1;
+ }
+
+ while (1) {
+ /*
+ * Build up a linked list copy of the getMibstat results
+ * Note that since getMibstat returns rows in sorted order,
+ * we need to retain this order while building the list
+ * so new entries are added onto the end of the list.
+ * Note 2: at least Solaris 8-10 do not return rows in
+ * sorted order anymore
+ */
+ nnew = SNMP_MALLOC_TYPEDEF(netsnmp_tcpConnEntry);
+ if (nnew == NULL)
+ break;
+ memcpy(&(nnew->entry), &entry, sizeof(mib2_tcpConnEntry_t));
+ if (!prev_entry)
+ tcp_head = nnew;
+ else
+ prev_entry->inp_next = nnew;
+ prev_entry = nnew;
+
+ if (getMibstat(MIB_TCP_CONN, &entry, sizeof(mib2_tcpConnEntry_t),
+ GET_NEXT, &TCP_Cmp, &entry) != 0)
+ break;
+ }
+
+ if (tcp_head) {
+ DEBUGMSGTL(("mibII/tcpTable", "Loaded TCP Table\n"));
+ return 0;
+ }
+ DEBUGMSGTL(("mibII/tcpTable", "Failed to load TCP Table (solaris)\n"));
+ return -1;
+}
+#else /* solaris2 */
+
+#if defined (WIN32) || defined (cygwin)
+int
+tcpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ PMIB_TCPTABLE pTcpTable = NULL;
+ DWORD dwActualSize = 0;
+ DWORD status = NO_ERROR;
+
+ /*
+ * query for the buffer size needed
+ */
+ status = GetTcpTable(pTcpTable, &dwActualSize, TRUE);
+ if (status == ERROR_INSUFFICIENT_BUFFER) {
+ pTcpTable = (PMIB_TCPTABLE) malloc(dwActualSize);
+ if (pTcpTable != NULL) {
+ /*
+ * Get the sorted TCP table
+ */
+ status = GetTcpTable(pTcpTable, &dwActualSize, TRUE);
+ }
+ }
+
+ if (status == NO_ERROR) {
+ int i;
+
+ DEBUGMSGTL(("mibII/tcpTable", "Loaded TCP Table\n"));
+ tcp_size = pTcpTable->dwNumEntries -1; /* entries are counted starting with 0 */
+ tcp_head = pTcpTable->table;
+
+ /*
+ * Count the number of established connections
+ * Probably not actually necessary for Windows
+ */
+ for (i = 0; i < tcp_size; i++) {
+ if (tcp_head[i].dwState == 5 /* established */ ||
+ tcp_head[i].dwState == 8 /* closeWait */ )
+ tcp_estab++;
+ }
+ return 0;
+ }
+
+ DEBUGMSGTL(("mibII/tcpTable", "Failed to load TCP Table (win32)\n"));
+ if (pTcpTable)
+ free(pTcpTable);
+ return -1;
+}
+#else /* WIN32 cygwin */
+
+#if (defined(NETSNMP_CAN_USE_SYSCTL) && defined(TCPCTL_PCBLIST))
+
+#if defined(freebsd4) || defined(darwin)
+ #define NS_ELEM struct xtcpcb
+#else
+ #define NS_ELEM struct xinpcb
+#endif
+
+int
+tcpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ size_t len;
+ int sname[] = { CTL_NET, PF_INET, IPPROTO_TCP, TCPCTL_PCBLIST };
+ char *tcpcb_buf = NULL;
+ struct xinpgen *xig = NULL;
+ netsnmp_inpcb *nnew;
+ int StateMap[] = { 1, 2, 3, 4, 5, 8, 6, 10, 9, 7, 11 };
+
+ tcpTable_free(NULL, NULL);
+
+ /*
+ * Read in the buffer containing the TCP table data
+ */
+ len = 0;
+ if (sysctl(sname, 4, 0, &len, 0, 0) < 0 ||
+ (tcpcb_buf = malloc(len)) == NULL)
+ return -1;
+ if (sysctl(sname, 4, tcpcb_buf, &len, 0, 0) < 0) {
+ free(tcpcb_buf);
+ return -1;
+ }
+
+ /*
+ * Unpick this into the constituent 'xinpgen' structures, and extract
+ * the 'inpcb' elements into a linked list (built in reverse)
+ */
+ xig = (struct xinpgen *) tcpcb_buf;
+ xig = (struct xinpgen *) ((char *) xig + xig->xig_len);
+
+ while (xig && (xig->xig_len > sizeof(struct xinpgen))) {
+ nnew = SNMP_MALLOC_TYPEDEF(netsnmp_inpcb);
+ if (!nnew)
+ break;
+ nnew->state = StateMap[((NS_ELEM *) xig)->xt_tp.t_state];
+ if (nnew->state == 5 /* established */ ||
+ nnew->state == 8 /* closeWait */ )
+ tcp_estab++;
+ memcpy(&(nnew->pcb), &(((NS_ELEM *) xig)->xt_inp),
+ sizeof(struct inpcb));
+
+ nnew->inp_next = tcp_head;
+ tcp_head = nnew;
+ xig = (struct xinpgen *) ((char *) xig + xig->xig_len);
+ }
+
+ free(tcpcb_buf);
+ if (tcp_head) {
+ DEBUGMSGTL(("mibII/tcpTable", "Loaded TCP Table\n"));
+ return 0;
+ }
+ DEBUGMSGTL(("mibII/tcpTable", "Failed to load TCP Table (sysctl)\n"));
+ return -1;
+}
+#undef NS_ELEM
+
+#else /* (defined(NETSNMP_CAN_USE_SYSCTL) && defined(TCPCTL_PCBLIST)) */
+#ifdef PCB_TABLE
+int
+tcpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ struct inpcbtable table;
+ struct inpcb *entry;
+ struct tcpcb tcpcb;
+ netsnmp_inpcb *nnew;
+ int StateMap[] = { 1, 2, 3, 4, 5, 8, 6, 10, 9, 7, 11 };
+
+ tcpTable_free(NULL, NULL);
+
+ if (!auto_nlist(TCP_SYMBOL, (char *) &table, sizeof(table))) {
+ DEBUGMSGTL(("mibII/tcpTable", "Failed to read inpcbtable\n"));
+ return -1;
+ }
+
+ /*
+ * Set up a linked list
+ */
+ entry = table.inpt_queue.cqh_first;
+ while (entry) {
+
+ nnew = SNMP_MALLOC_TYPEDEF(netsnmp_inpcb);
+ if (!nnew)
+ break;
+ if (!NETSNMP_KLOOKUP(entry, (char *)&(nnew->pcb), sizeof(struct inpcb))) {
+ DEBUGMSGTL(("mibII/tcpTable:TcpTable_load", "klookup failed\n"));
+ break;
+ }
+
+ if (!NETSNMP_KLOOKUP(nnew->pcb.inp_ppcb, (char *)&tcpcb, sizeof(struct tcpcb))) {
+ DEBUGMSGTL(("mibII/tcpTable:TcpTable_load", "klookup failed\n"));
+ break;
+ }
+ nnew->state = StateMap[tcpcb.t_state];
+ if (nnew->state == 5 /* established */ ||
+ nnew->state == 8 /* closeWait */ )
+ tcp_estab++;
+
+ entry = nnew->INP_NEXT_SYMBOL; /* Next kernel entry */
+ nnew->inp_next = tcp_head;
+ tcp_head = nnew;
+
+ if (entry == table.inpt_queue.cqh_first)
+ break;
+ }
+
+ if (tcp_head) {
+ DEBUGMSGTL(("mibII/tcpTable", "Loaded TCP Table\n"));
+ return 0;
+ }
+ DEBUGMSGTL(("mibII/tcpTable", "Failed to load TCP Table (pcb_table)\n"));
+ return -1;
+}
+
+#else /* PCB_TABLE */
+#ifdef TCP_SYMBOL
+int
+tcpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ struct inpcb tcp_inpcb;
+ struct tcpcb tcpcb;
+ netsnmp_inpcb *nnew;
+ struct inpcb *entry;
+#ifdef hpux
+ int StateMap[] = { 1, 2, 3, -1, 4, 5, 8, 6, 10, 9, 7, 11 };
+#else
+ int StateMap[] = { 1, 2, 3, 4, 5, 8, 6, 10, 9, 7, 11 };
+#endif
+
+ tcpTable_free(NULL, NULL);
+
+ if (!auto_nlist(TCP_SYMBOL, (char *) &tcp_inpcb, sizeof(tcp_inpcb))) {
+ DEBUGMSGTL(("mibII/tcpTable", "Failed to read tcp_symbol\n"));
+ return -1;
+ }
+
+ /*
+ * Set up a linked list
+ */
+ entry = tcp_inpcb.INP_NEXT_SYMBOL;
+ while (entry) {
+
+ nnew = SNMP_MALLOC_TYPEDEF(netsnmp_inpcb);
+ if (!nnew)
+ break;
+ if (!NETSNMP_KLOOKUP(entry, (char *)&(nnew->pcb), sizeof(struct inpcb))) {
+ DEBUGMSGTL(("mibII/tcpTable:tcpTable_load", "klookup failed\n"));
+ break;
+ }
+ if (!NETSNMP_KLOOKUP(nnew->pcb.inp_ppcb, (char *)&tcpcb, sizeof(struct tcpcb))) {
+ DEBUGMSGTL(("mibII/tcpTable:tcpTable_load", "klookup failed\n"));
+ break;
+ }
+ nnew->state = StateMap[tcpcb.t_state];
+ if (nnew->state == 5 /* established */ ||
+ nnew->state == 8 /* closeWait */ )
+ tcp_estab++;
+
+ entry = nnew->pcb.INP_NEXT_SYMBOL; /* Next kernel entry */
+ nnew->inp_next = tcp_head;
+ tcp_head = nnew;
+
+ if (entry == tcp_inpcb.INP_NEXT_SYMBOL)
+ break;
+ }
+
+ if (tcp_head) {
+ DEBUGMSGTL(("mibII/tcpTable", "Loaded TCP Table\n"));
+ return 0;
+ }
+ DEBUGMSGTL(("mibII/tcpTable", "Failed to load TCP Table (tcp_symbol)\n"));
+ return -1;
+}
+
+#else /* UDB_SYMBOL */
+int
+tcpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("mibII/tcpTable", "Loading TCP Table not implemented\n"));
+ return -1;
+}
+#endif /* UDB_SYMBOL */
+#endif /* PCB_TABLE */
+#endif /* (defined(NETSNMP_CAN_USE_SYSCTL) && defined(TCPCTL_PCBLIST)) */
+#endif /* WIN32 cygwin */
+#endif /* linux */
+#endif /* solaris2 */
+#endif /* hpux11 */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcpTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcpTable.h
new file mode 100644
index 0000000000..a5a6f7693f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/tcpTable.h
@@ -0,0 +1,39 @@
+/*
+ * Template MIB group interface - tcp.h
+ *
+ */
+#ifndef _MIBGROUP_TCPTABLE_H
+#define _MIBGROUP_TCPTABLE_H
+
+config_arch_require(solaris2, kernel_sunos5)
+config_require(util_funcs)
+#if !defined(NETSNMP_ENABLE_MFD_REWRITES)
+config_require(mibII/ip)
+#endif
+
+#ifdef linux
+struct inpcb {
+ struct inpcb *inp_next; /* pointers to other pcb's */
+ struct in_addr inp_faddr; /* foreign host table entry */
+ u_short inp_fport; /* foreign port */
+ struct in_addr inp_laddr; /* local host table entry */
+ u_short inp_lport; /* local port */
+ int inp_state;
+ int uid; /* owner of the connection */
+};
+#endif
+
+extern void init_tcpTable(void);
+extern Netsnmp_Node_Handler tcpTable_handler;
+extern NetsnmpCacheLoad tcpTable_load;
+extern NetsnmpCacheFree tcpTable_free;
+extern Netsnmp_First_Data_Point tcpTable_first_entry;
+extern Netsnmp_Next_Data_Point tcpTable_next_entry;
+
+#define TCPCONNSTATE 1
+#define TCPCONNLOCALADDRESS 2
+#define TCPCONNLOCALPORT 3
+#define TCPCONNREMOTEADDRESS 4
+#define TCPCONNREMOTEPORT 5
+
+#endif /* _MIBGROUP_TCPTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udp.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udp.c
new file mode 100644
index 0000000000..7ca0d80c88
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udp.c
@@ -0,0 +1,566 @@
+/*
+ * UDP MIB group implementation - udp.c
+ *
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include "mibII_common.h"
+
+#ifdef HAVE_NETINET_UDP_H
+#include <netinet/udp.h>
+#endif
+#if HAVE_NETINET_UDP_VAR_H
+#include <netinet/udp_var.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/auto_nlist.h>
+
+#include "util_funcs.h"
+
+#ifdef solaris2
+#include "kernel_sunos5.h"
+#else
+#include "kernel.h"
+#endif
+
+#ifdef linux
+#include "kernel_linux.h"
+#endif
+
+#ifdef cygwin
+#define WIN32
+#include <windows.h>
+#endif
+
+#ifdef hpux
+#include <sys/mib.h>
+#include <netinet/mib_kern.h>
+#endif /* hpux */
+
+#ifdef linux
+#include "tcp.h"
+#endif
+#include "udp.h"
+#include "udpTable.h"
+#include "sysORTable.h"
+
+#ifdef NETSNMP_CAN_USE_SYSCTL
+#include <sys/sysctl.h>
+#endif
+
+#ifndef MIB_STATS_CACHE_TIMEOUT
+#define MIB_STATS_CACHE_TIMEOUT 5
+#endif
+#ifndef UDP_STATS_CACHE_TIMEOUT
+#define UDP_STATS_CACHE_TIMEOUT MIB_STATS_CACHE_TIMEOUT
+#endif
+
+#if defined(HAVE_LIBPERFSTAT_H) && (defined(aix4) || defined(aix5) || defined(aix6)) && !defined(FIRST_PROTOCOL)
+#include <libperfstat.h>
+#ifdef FIRST_PROTOCOL
+perfstat_protocol_t ps_proto;
+perfstat_id_t ps_name;
+#define _USE_PERFSTAT_PROTOCOL 1
+#endif
+#endif
+
+ /*********************
+ *
+ * Kernel & interface information,
+ * and internal forward declarations
+ *
+ *********************/
+
+
+ /*********************
+ *
+ * Initialisation & common implementation functions
+ *
+ *********************/
+
+/*
+ * Define the OID pointer to the top of the mib tree that we're
+ * registering underneath, and the OID for the MIB module
+ */
+oid udp_oid[] = { SNMP_OID_MIB2, 7 };
+oid udp_module_oid[] = { SNMP_OID_MIB2, 50 };
+
+void
+init_udp(void)
+{
+ netsnmp_handler_registration *reginfo;
+
+ /*
+ * register ourselves with the agent as a group of scalars...
+ */
+ DEBUGMSGTL(("mibII/udpScalar", "Initialising UDP scalar group\n"));
+ reginfo = netsnmp_create_handler_registration("udp", udp_handler,
+ udp_oid, OID_LENGTH(udp_oid), HANDLER_CAN_RONLY);
+ netsnmp_register_scalar_group(reginfo, UDPINDATAGRAMS, UDPOUTDATAGRAMS);
+
+ /*
+ * .... with a local cache
+ * (except for HP-UX 11, which extracts objects individually)
+ */
+#ifndef hpux11
+ netsnmp_inject_handler( reginfo,
+ netsnmp_get_cache_handler(UDP_STATS_CACHE_TIMEOUT,
+ udp_load, udp_free,
+ udp_oid, OID_LENGTH(udp_oid)));
+#endif
+
+ REGISTER_SYSOR_ENTRY(udp_module_oid,
+ "The MIB module for managing UDP implementations");
+
+#if !defined(_USE_PERFSTAT_PROTOCOL)
+#ifdef UDPSTAT_SYMBOL
+ auto_nlist(UDPSTAT_SYMBOL, 0, 0);
+#endif
+#ifdef UDB_SYMBOL
+ auto_nlist(UDB_SYMBOL, 0, 0);
+#endif
+#ifdef solaris2
+ init_kernel_sunos5();
+#endif
+#endif
+}
+
+
+ /*********************
+ *
+ * System specific implementation functions
+ *
+ *********************/
+
+#ifdef hpux11
+#define UDP_STAT_STRUCTURE int
+#endif
+
+#ifdef linux
+#define UDP_STAT_STRUCTURE struct udp_mib
+#define USES_SNMP_DESIGNED_UDPSTAT
+#undef UDPSTAT_SYMBOL
+#endif
+
+#ifdef solaris2
+#define UDP_STAT_STRUCTURE mib2_udp_t
+#define USES_SNMP_DESIGNED_UDPSTAT
+#endif
+
+#ifdef WIN32
+#include <iphlpapi.h>
+#define UDP_STAT_STRUCTURE MIB_UDPSTATS
+#endif
+
+#ifdef HAVE_SYS_TCPIPSTATS_H
+#define UDP_STAT_STRUCTURE struct kna
+#define USES_TRADITIONAL_UDPSTAT
+#endif
+
+
+#if !defined(UDP_STAT_STRUCTURE)
+#define UDP_STAT_STRUCTURE struct udpstat
+#define USES_TRADITIONAL_UDPSTAT
+#endif
+
+UDP_STAT_STRUCTURE udpstat;
+
+
+ /*********************
+ *
+ * System independent handler (mostly)
+ *
+ *********************/
+
+
+
+int
+udp_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_request_info *request;
+ netsnmp_variable_list *requestvb;
+ long ret_value = -1;
+ oid subid;
+ int type = ASN_COUNTER;
+
+ /*
+ * The cached data should already have been loaded by the
+ * cache handler, higher up the handler chain.
+ * But just to be safe, check this and load it manually if necessary
+ */
+#if defined(_USE_PERFSTAT_PROTOCOL)
+ udp_load(NULL, NULL);
+#elif !defined(hpux11)
+ if (!netsnmp_cache_is_valid(reqinfo, reginfo->handlerName)) {
+ netsnmp_assert(!"cache == valid"); /* always false */
+ udp_load( NULL, NULL ); /* XXX - check for failure */
+ }
+#endif
+
+
+ /*
+ *
+ *
+ */
+ DEBUGMSGTL(("mibII/udpScalar", "Handler - mode %s\n",
+ se_find_label_in_slist("agent_mode", reqinfo->mode)));
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ for (request=requests; request; request=request->next) {
+ requestvb = request->requestvb;
+ subid = requestvb->name[OID_LENGTH(udp_oid)]; /* XXX */
+ DEBUGMSGTL(( "mibII/udpScalar", "oid: "));
+ DEBUGMSGOID(("mibII/udpScalar", requestvb->name,
+ requestvb->name_length));
+ DEBUGMSG(( "mibII/udpScalar", "\n"));
+
+ switch (subid) {
+#ifdef USES_SNMP_DESIGNED_UDPSTAT
+ case UDPINDATAGRAMS:
+ ret_value = udpstat.udpInDatagrams;
+ break;
+ case UDPNOPORTS:
+#ifdef solaris2
+ ret_value = udp_load(NULL, (void *)UDPNOPORTS);
+ if (ret_value == -1) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ }
+ break;
+#else
+ ret_value = udpstat.udpNoPorts;
+ break;
+#endif
+ case UDPOUTDATAGRAMS:
+ ret_value = udpstat.udpOutDatagrams;
+ break;
+ case UDPINERRORS:
+ ret_value = udpstat.udpInErrors;
+ break;
+#elif defined(USES_TRADITIONAL_UDPSTAT) && !defined(_USE_PERFSTAT_PROTOCOL)
+#ifdef HAVE_SYS_TCPIPSTATS_H
+ /*
+ * This actually reads statistics for *all* the groups together,
+ * so we need to isolate the UDP-specific bits.
+ */
+#define udpstat udpstat.udpstat
+#endif
+ case UDPINDATAGRAMS:
+#if STRUCT_UDPSTAT_HAS_UDPS_IPACKETS
+ ret_value = udpstat.udps_ipackets;
+ break;
+#else
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#endif
+
+ case UDPNOPORTS:
+#if STRUCT_UDPSTAT_HAS_UDPS_NOPORT
+ ret_value = udpstat.udps_noport;
+ break;
+#else
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#endif
+
+ case UDPOUTDATAGRAMS:
+#if STRUCT_UDPSTAT_HAS_UDPS_OPACKETS
+ ret_value = udpstat.udps_opackets;
+ break;
+#else
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+#endif
+
+ case UDPINERRORS:
+ ret_value = udpstat.udps_hdrops + udpstat.udps_badsum +
+#ifdef STRUCT_UDPSTAT_HAS_UDPS_DISCARD
+ udpstat.udps_discard +
+#endif
+#ifdef STRUCT_UDPSTAT_HAS_UDPS_FULLSOCK
+ udpstat.udps_fullsock +
+#endif
+ udpstat.udps_badlen;
+ break;
+#ifdef HAVE_SYS_TCPIPSTATS_H
+#undef udpstat
+#endif
+#elif defined(hpux11)
+ case UDPINDATAGRAMS:
+ case UDPNOPORTS:
+ case UDPOUTDATAGRAMS:
+ case UDPINERRORS:
+ /*
+ * This is a bit of a hack, to shoehorn the HP-UX 11
+ * single-object retrieval approach into the caching
+ * architecture.
+ */
+ if (udp_load(NULL, (void*)subid) == -1 ) {
+ netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+ continue;
+ }
+ ret_value = udpstat;
+ break;
+#elif defined(WIN32)
+ case UDPINDATAGRAMS:
+ ret_value = udpstat.dwInDatagrams;
+ break;
+ case UDPNOPORTS:
+ ret_value = udpstat.dwNoPorts;
+ break;
+ case UDPOUTDATAGRAMS:
+ ret_value = udpstat.dwOutDatagrams;
+ break;
+ case UDPINERRORS:
+ ret_value = udpstat.dwInErrors;
+ break;
+#elif defined(_USE_PERFSTAT_PROTOCOL)
+ case UDPINDATAGRAMS:
+ ret_value = ps_proto.u.udp.ipackets;
+ break;
+ case UDPNOPORTS:
+ ret_value = ps_proto.u.udp.no_socket;
+ break;
+ case UDPOUTDATAGRAMS:
+ ret_value = ps_proto.u.udp.opackets;
+ break;
+ case UDPINERRORS:
+ ret_value = ps_proto.u.udp.ierrors;
+ break;
+#endif /* USES_SNMP_DESIGNED_UDPSTAT */
+
+ }
+ snmp_set_var_typed_value(request->requestvb, (u_char)type,
+ (u_char *)&ret_value, sizeof(ret_value));
+ }
+ break;
+
+ case MODE_GETNEXT:
+ case MODE_GETBULK:
+ case MODE_SET_RESERVE1:
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ snmp_log(LOG_WARNING, "mibII/udp: Unsupported mode (%d)\n",
+ reqinfo->mode);
+ break;
+ default:
+ snmp_log(LOG_WARNING, "mibII/udp: Unrecognised mode (%d)\n",
+ reqinfo->mode);
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+ /*********************
+ *
+ * Internal implementation functions
+ *
+ *********************/
+
+#ifdef hpux11
+int
+udp_load(netsnmp_cache *cache, void *vmagic)
+{
+ int fd;
+ struct nmparms p;
+ unsigned int ulen;
+ int ret;
+ int magic = (int) vmagic;
+
+ if ((fd = open_mib("/dev/ip", O_RDONLY, 0, NM_ASYNC_OFF)) < 0) {
+ DEBUGMSGTL(("mibII/udpScalar", "Failed to load UDP object %d (hpux11)\n", magic));
+ return (-1); /* error */
+ }
+
+ switch (magic) {
+ case UDPINDATAGRAMS:
+ p.objid = ID_udpInDatagrams;
+ break;
+ case UDPNOPORTS:
+ p.objid = ID_udpNoPorts;
+ break;
+ case UDPOUTDATAGRAMS:
+ p.objid = ID_udpOutDatagrams;
+ break;
+ case UDPINERRORS:
+ p.objid = ID_udpInErrors;
+ break;
+ default:
+ udpstat = 0;
+ close_mib(fd);
+ return -1;
+ }
+
+ p.buffer = (void *)&udpstat;
+ ulen = sizeof(UDP_STAT_STRUCTURE);
+ p.len = &ulen;
+ ret = get_mib_info(fd, &p);
+ close_mib(fd);
+
+ DEBUGMSGTL(("mibII/udpScalar", "%s UDP object %d (hpux11)\n",
+ (ret < 0 ? "Failed to load" : "Loaded"), magic));
+ return (ret); /* 0: ok, < 0: error */
+}
+#elif defined(linux)
+int
+udp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ ret_value = linux_read_udp_stat(&udpstat);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/udpScalar", "Failed to load UDP scalar Group (linux)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/udpScalar", "Loaded UDP scalar Group (linux)\n"));
+ }
+ return ret_value;
+}
+#elif defined(solaris2)
+int
+udp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+ int magic = (int)vmagic;
+ mib2_ip_t ipstat;
+
+ /*
+ * udpNoPorts is actually implemented as part of the MIB_IP group
+ * so we need to retrieve this independently
+ */
+ if (magic == UDPNOPORTS) {
+ if (getMibstat
+ (MIB_IP, &ipstat, sizeof(mib2_ip_t), GET_FIRST,
+ &Get_everything, NULL) < 0) {
+ DEBUGMSGTL(("mibII/udpScalar", "Failed to load UDP object %d (solaris)\n", magic));
+ return -1;
+ } else {
+ DEBUGMSGTL(("mibII/udpScalar", "Loaded UDP object %d (solaris)\n", magic));
+ return ipstat.udpNoPorts;
+ }
+ }
+
+ /*
+ * Otherwise, retrieve the whole of the MIB_UDP group (and cache it)
+ */
+ ret_value = getMibstat(MIB_UDP, &udpstat, sizeof(mib2_udp_t),
+ GET_FIRST, &Get_everything, NULL);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/udpScalar", "Failed to load UDP scalar Group (solaris)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/udpScalar", "Loaded UDP scalar Group (solaris)\n"));
+ }
+ return ret_value;
+}
+#elif defined(WIN32)
+int
+udp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ ret_value = GetUdpStatistics(&udpstat);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/udpScalar", "Failed to load UDP scalar Group (win32)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/udpScalar", "Loaded UDP scalar Group (win32)\n"));
+ }
+ return ret_value;
+}
+#elif defined(_USE_PERFSTAT_PROTOCOL)
+int
+udp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ strcpy(ps_name.name, "udp");
+ ret_value = perfstat_protocol(&ps_name, &ps_proto, sizeof(ps_proto), 1);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/udpScalar", "Failed to load UDP scalar Group (AIX)\n"));
+ } else {
+ ret_value = 0;
+ DEBUGMSGTL(("mibII/udpScalar", "Loaded UDP scalar Group (AIX)\n"));
+ }
+ return ret_value;
+}
+#elif (defined(NETSNMP_CAN_USE_SYSCTL) && defined(UDPCTL_STATS))
+int
+udp_load(netsnmp_cache *cache, void *vmagic)
+{
+ int sname[4] = { CTL_NET, PF_INET, IPPROTO_UDP, UDPCTL_STATS };
+ size_t len = sizeof(udpstat);
+ long ret_value = -1;
+
+ ret_value = sysctl(sname, 4, &udpstat, &len, 0, 0);
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/udpScalar", "Failed to load UDP scalar Group (sysctl)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/udpScalar", "Loaded UDP scalar Group (sysctl)\n"));
+ }
+ return ret_value;
+}
+#elif defined(HAVE_SYS_TCPIPSTATS_H)
+int
+udp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ ret_value = sysmp(MP_SAGET, MPSA_TCPIPSTATS, &udpstat, sizeof(udpstat));
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/udpScalar", "Failed to load UDP scalar Group (tcpipstats)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/udpScalar", "Loaded UDP scalar Group (tcpipstats)\n"));
+ }
+ return ret_value;
+}
+#elif defined(UDPSTAT_SYMBOL)
+int
+udp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ if (auto_nlist(UDPSTAT_SYMBOL, (char *)&udpstat, sizeof(udpstat)))
+ ret_value = 0;
+
+ if ( ret_value < 0 ) {
+ DEBUGMSGTL(("mibII/udpScalar", "Failed to load UDP scalar Group (udpstat)\n"));
+ } else {
+ DEBUGMSGTL(("mibII/udpScalar", "Loaded UDP scalar Group (udpstat)\n"));
+ }
+ return ret_value;
+}
+#else /* UDPSTAT_SYMBOL */
+int
+udp_load(netsnmp_cache *cache, void *vmagic)
+{
+ long ret_value = -1;
+
+ DEBUGMSGTL(("mibII/udpScalar", "Failed to load UDP scalar Group (null)\n"));
+ return ret_value;
+}
+#endif /* hpux11 */
+
+
+void
+udp_free(netsnmp_cache *cache, void *magic)
+{
+#if defined(_USE_PERFSTAT_PROTOCOL)
+ memset(&ps_proto, 0, sizeof(ps_proto));
+#else
+ memset(&udpstat, 0, sizeof(udpstat));
+#endif
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udp.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udp.h
new file mode 100644
index 0000000000..809d8917eb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udp.h
@@ -0,0 +1,24 @@
+/*
+ * Template MIB group interface - udp.h
+ *
+ */
+#ifndef _MIBGROUP_UDP_H
+#define _MIBGROUP_UDP_H
+
+
+config_require(mibII/udpTable util_funcs)
+config_arch_require(solaris2, kernel_sunos5)
+config_arch_require(linux, mibII/kernel_linux)
+
+extern void init_udp(void);
+extern Netsnmp_Node_Handler udp_handler;
+extern NetsnmpCacheLoad udp_load;
+extern NetsnmpCacheFree udp_free;
+
+
+#define UDPINDATAGRAMS 1
+#define UDPNOPORTS 2
+#define UDPINERRORS 3
+#define UDPOUTDATAGRAMS 4
+
+#endif /* _MIBGROUP_UDP_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udpTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udpTable.c
new file mode 100644
index 0000000000..18e7c304d6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udpTable.c
@@ -0,0 +1,775 @@
+/*
+ * UDP MIB group Table implementation - udpTable.c
+ *
+ */
+
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+#include "mibII_common.h"
+
+#if HAVE_NETINET_UDP_H
+#include <netinet/udp.h>
+#endif
+#if HAVE_NETINET_UDP_VAR_H
+#include <netinet/udp_var.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/auto_nlist.h>
+
+#ifdef linux
+#include "tcpTable.h"
+#endif
+#include "udp.h"
+#include "udpTable.h"
+#include "sysORTable.h"
+
+#ifdef hpux11
+#define UDPTABLE_ENTRY_TYPE mib_udpLsnEnt
+#define UDPTABLE_LOCALADDRESS LocalAddress
+#define UDPTABLE_LOCALPORT LocalPort
+#define UDPTABLE_IS_TABLE
+#else
+
+#ifdef solaris2
+typedef struct netsnmp_udpEntry_s netsnmp_udpEntry;
+struct netsnmp_udpEntry_s {
+ mib2_udpEntry_t entry;
+ netsnmp_udpEntry *inp_next;
+};
+#define UDPTABLE_ENTRY_TYPE netsnmp_udpEntry
+#define UDPTABLE_LOCALADDRESS entry.udpLocalAddress
+#define UDPTABLE_LOCALPORT entry.udpLocalPort
+#define UDPTABLE_IS_LINKED_LIST
+#else
+
+#if defined (WIN32) || defined (cygwin)
+#include <iphlpapi.h>
+#define UDPTABLE_ENTRY_TYPE MIB_UDPROW /* ??? */
+#define UDPTABLE_LOCALADDRESS dwLocalAddr
+#define UDPTABLE_LOCALPORT dwLocalPort
+#define UDPTABLE_IS_TABLE
+#else /* everything else */
+
+#ifdef linux
+#define INP_NEXT_SYMBOL inp_next
+#endif
+
+#if defined(freebsd4) || defined(darwin) || defined(osf5)
+typedef struct netsnmp_inpcb_s netsnmp_inpcb;
+struct netsnmp_inpcb_s {
+ struct inpcb pcb;
+ int state;
+ netsnmp_inpcb *inp_next;
+};
+#define UDPTABLE_ENTRY_TYPE netsnmp_inpcb
+#define UDPTABLE_LOCALADDRESS pcb.inp_laddr.s_addr
+#define UDPTABLE_LOCALPORT pcb.inp_lport
+#else
+#define UDPTABLE_ENTRY_TYPE struct inpcb
+#define UDPTABLE_LOCALADDRESS inp_laddr.s_addr
+#define UDPTABLE_LOCALPORT inp_lport
+#endif
+#define UDPTABLE_IS_LINKED_LIST
+
+#endif /* WIN32 cygwin */
+#endif /* solaris2 */
+#endif /* hpux11 */
+
+ /* Head of linked list, or root of table */
+UDPTABLE_ENTRY_TYPE *udp_head = NULL;
+int udp_size = 0; /* Only used for table-based systems */
+
+
+ /*
+ *
+ * Initialization and handler routines are common to all architectures
+ *
+ */
+#ifndef MIB_STATS_CACHE_TIMEOUT
+#define MIB_STATS_CACHE_TIMEOUT 5
+#endif
+#ifndef UDP_STATS_CACHE_TIMEOUT
+#define UDP_STATS_CACHE_TIMEOUT MIB_STATS_CACHE_TIMEOUT
+#endif
+
+#ifdef UDP_ADDRESSES_IN_HOST_ORDER
+#define UDP_ADDRESS_TO_HOST_ORDER(x) x
+#define UDP_ADDRESS_TO_NETWORK_ORDER(x) htonl(x)
+#else
+#define UDP_ADDRESS_TO_HOST_ORDER(x) ntohl(x)
+#define UDP_ADDRESS_TO_NETWORK_ORDER(x) x
+#endif
+
+#ifdef UDP_PORTS_IN_HOST_ORDER
+#define UDP_PORT_TO_HOST_ORDER(x) x
+#else
+#define UDP_PORT_TO_HOST_ORDER(x) ntohs(x)
+#endif
+
+
+oid udpTable_oid[] = { SNMP_OID_MIB2, 7, 5 };
+
+void
+init_udpTable(void)
+{
+ netsnmp_table_registration_info *table_info;
+ netsnmp_iterator_info *iinfo;
+ netsnmp_handler_registration *reginfo;
+
+ DEBUGMSGTL(("mibII/udpTable", "Initialising UDP Table\n"));
+ /*
+ * Create the table data structure, and define the indexing....
+ */
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ if (!table_info) {
+ return;
+ }
+ netsnmp_table_helper_add_indexes(table_info, ASN_IPADDRESS,
+ ASN_INTEGER, 0);
+ table_info->min_column = UDPLOCALADDRESS;
+ table_info->max_column = UDPLOCALPORT;
+
+
+ /*
+ * .... and iteration information ....
+ */
+ iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+ if (!iinfo) {
+ return;
+ }
+ iinfo->get_first_data_point = udpTable_first_entry;
+ iinfo->get_next_data_point = udpTable_next_entry;
+ iinfo->table_reginfo = table_info;
+#if defined (WIN32) || defined (cygwin)
+ iinfo->flags |= NETSNMP_ITERATOR_FLAG_SORTED;
+#endif /* WIN32 || cygwin */
+
+
+ /*
+ * .... and register the table with the agent.
+ */
+ reginfo = netsnmp_create_handler_registration("udpTable",
+ udpTable_handler,
+ udpTable_oid, OID_LENGTH(udpTable_oid),
+ HANDLER_CAN_RONLY),
+ netsnmp_register_table_iterator(reginfo, iinfo);
+
+ /*
+ * .... with a local cache
+ */
+ netsnmp_inject_handler( reginfo,
+ netsnmp_get_cache_handler(UDP_STATS_CACHE_TIMEOUT,
+ udpTable_load, udpTable_free,
+ udpTable_oid, OID_LENGTH(udpTable_oid)));
+}
+
+
+
+int
+udpTable_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_request_info *request;
+ netsnmp_variable_list *requestvb;
+ netsnmp_table_request_info *table_info;
+ UDPTABLE_ENTRY_TYPE *entry;
+ oid subid;
+ long port;
+ in_addr_t addr;
+
+ DEBUGMSGTL(("mibII/udpTable", "Handler - mode %s\n",
+ se_find_label_in_slist("agent_mode", reqinfo->mode)));
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ for (request=requests; request; request=request->next) {
+ requestvb = request->requestvb;
+ DEBUGMSGTL(( "mibII/udpTable", "oid: "));
+ DEBUGMSGOID(("mibII/udpTable", requestvb->name,
+ requestvb->name_length));
+ DEBUGMSG(( "mibII/udpTable", "\n"));
+
+ entry = (UDPTABLE_ENTRY_TYPE *)netsnmp_extract_iterator_context(request);
+ if (!entry)
+ continue;
+ table_info = netsnmp_extract_table_info(request);
+ subid = table_info->colnum;
+
+ switch (subid) {
+ case UDPLOCALADDRESS:
+#if defined(osf5) && defined(IN6_EXTRACT_V4ADDR)
+ addr = ntohl(IN6_EXTRACT_V4ADDR(&entry->pcb.inp_laddr));
+ snmp_set_var_typed_value(requestvb, ASN_IPADDRESS,
+ (u_char*)&addr,
+ sizeof(uint32_t));
+#else
+ addr = UDP_ADDRESS_TO_HOST_ORDER(entry->UDPTABLE_LOCALADDRESS);
+ snmp_set_var_typed_value(requestvb, ASN_IPADDRESS,
+ (u_char *)&addr,
+ sizeof(uint32_t));
+#endif
+ break;
+ case UDPLOCALPORT:
+ port = UDP_PORT_TO_HOST_ORDER((u_short)entry->UDPTABLE_LOCALPORT);
+ snmp_set_var_typed_value(requestvb, ASN_INTEGER,
+ (u_char *)&port, sizeof(port));
+ break;
+ }
+ }
+ break;
+
+ case MODE_GETNEXT:
+ case MODE_GETBULK:
+ case MODE_SET_RESERVE1:
+ case MODE_SET_RESERVE2:
+ case MODE_SET_ACTION:
+ case MODE_SET_COMMIT:
+ case MODE_SET_FREE:
+ case MODE_SET_UNDO:
+ snmp_log(LOG_WARNING, "mibII/udpTable: Unsupported mode (%d)\n",
+ reqinfo->mode);
+ break;
+ default:
+ snmp_log(LOG_WARNING, "mibII/udpTable: Unrecognised mode (%d)\n",
+ reqinfo->mode);
+ break;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+ /*
+ * Two forms of iteration hook routines:
+ * One for when the UDP table is stored as a table
+ * One for when the UDP table is stored as a linked list
+ *
+ * Also applies to the cache-handler free routine
+ */
+
+#ifdef UDPTABLE_IS_TABLE
+netsnmp_variable_list *
+udpTable_first_entry(void **loop_context,
+ void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ /*
+ * XXX - How can we tell if the cache is valid?
+ * No access to 'reqinfo'
+ */
+ if (udp_size == 0)
+ return NULL;
+
+ /*
+ * Point to the first entry, and use the
+ * 'next_entry' hook to retrieve this row
+ */
+ *loop_context = 0;
+ return udpTable_next_entry( loop_context, data_context, index, data );
+}
+
+netsnmp_variable_list *
+udpTable_next_entry( void **loop_context,
+ void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ int i = (int)*loop_context;
+ long port;
+
+ if (udp_size < i)
+ return NULL;
+
+ /*
+ * Set up the indexing for the specified row...
+ */
+#if defined (WIN32) || defined (cygwin)
+ port = ntohl((u_long)udp_head[i].UDPTABLE_LOCALADDRESS);
+ snmp_set_var_value(index, (u_char *)&port,
+ sizeof(udp_head[i].UDPTABLE_LOCALADDRESS));
+#else
+ snmp_set_var_value(index, (u_char *)&udp_head[i].UDPTABLE_LOCALADDRESS,
+ sizeof(udp_head[i].UDPTABLE_LOCALADDRESS));
+#endif
+ port = UDP_PORT_TO_HOST_ORDER((u_short)udp_head[i].UDPTABLE_LOCALPORT);
+ snmp_set_var_value(index->next_variable,
+ (u_char*)&port, sizeof(port));
+ /*
+ * ... return the data structure for this row,
+ * and update the loop context ready for the next one.
+ */
+ *data_context = (void*)&udp_head[i];
+ *loop_context = (void*)++i;
+ return index;
+}
+
+void
+udpTable_free(netsnmp_cache *cache, void *magic)
+{
+#if defined (WIN32) || defined (cygwin)
+ if (udp_head) {
+ /* the allocated structure is a count followed by table entries */
+ free((char *)(udp_head) - sizeof(DWORD));
+ }
+#else
+ if (udp_head)
+ free(udp_head);
+#endif
+ udp_head = NULL;
+ udp_size = 0;
+}
+#else
+#ifdef UDPTABLE_IS_LINKED_LIST
+netsnmp_variable_list *
+udpTable_first_entry(void **loop_context,
+ void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ /*
+ * XXX - How can we tell if the cache is valid?
+ * No access to 'reqinfo'
+ */
+ if (udp_head == 0)
+ return NULL;
+
+ /*
+ * Point to the first entry, and use the
+ * 'next_entry' hook to retrieve this row
+ */
+ *loop_context = (void*)udp_head;
+ return udpTable_next_entry( loop_context, data_context, index, data );
+}
+
+netsnmp_variable_list *
+udpTable_next_entry( void **loop_context,
+ void **data_context,
+ netsnmp_variable_list *index,
+ netsnmp_iterator_info *data)
+{
+ UDPTABLE_ENTRY_TYPE *entry = (UDPTABLE_ENTRY_TYPE *)*loop_context;
+ long port;
+ in_addr_t addr;
+
+ if (!entry)
+ return NULL;
+
+ /*
+ * Set up the indexing for the specified row...
+ */
+#if defined(osf5) && defined(IN6_EXTRACT_V4ADDR)
+ snmp_set_var_value(index,
+ (u_char*)&IN6_EXTRACT_V4ADDR(&entry->pcb.inp_laddr),
+ sizeof(IN6_EXTRACT_V4ADDR(&entry->pcb.inp_laddr)));
+#else
+ addr = UDP_ADDRESS_TO_NETWORK_ORDER((in_addr_t)entry->UDPTABLE_LOCALADDRESS);
+ snmp_set_var_value(index, (u_char *)&addr,
+ sizeof(entry->UDPTABLE_LOCALADDRESS));
+#endif
+ port = UDP_PORT_TO_HOST_ORDER(entry->UDPTABLE_LOCALPORT);
+ snmp_set_var_value(index->next_variable,
+ (u_char*)&port, sizeof(port));
+
+ /*
+ * ... return the data structure for this row,
+ * and update the loop context ready for the next one.
+ */
+ *data_context = (void*)entry;
+ *loop_context = (void*)entry->INP_NEXT_SYMBOL;
+ return index;
+}
+
+void
+udpTable_free(netsnmp_cache *cache, void *magic)
+{
+ UDPTABLE_ENTRY_TYPE *p;
+ while (udp_head) {
+ p = udp_head;
+ udp_head = udp_head->INP_NEXT_SYMBOL;
+ free(p);
+ }
+
+ udp_head = NULL;
+}
+#endif /* UDPTABLE_IS_LINKED_LIST */
+#endif /* UDPTABLE_IS_TABLE */
+
+
+ /*
+ *
+ * The cache-handler loading routine is the main
+ * place for architecture-specific code
+ *
+ * Load into either a table structure, or a linked list
+ * depending on the system architecture
+ */
+
+
+#ifdef hpux11
+int
+udpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ int fd;
+ struct nmparms p;
+ int val = 0;
+ unsigned int ulen;
+ int ret;
+
+ udpTable_free(NULL, NULL);
+
+ if ((fd = open_mib("/dev/ip", O_RDONLY, 0, NM_ASYNC_OFF)) >= 0) {
+ p.objid = ID_udpLsnNumEnt;
+ p.buffer = (void *) &val;
+ ulen = sizeof(int);
+ p.len = &ulen;
+ if ((ret = get_mib_info(fd, &p)) == 0)
+ udp_size = val;
+
+ if (udp_size > 0) {
+ ulen = (unsigned) udp_size *sizeof(mib_udpLsnEnt);
+ udp_head = (mib_udpLsnEnt *) malloc(ulen);
+ p.objid = ID_udpLsnTable;
+ p.buffer = (void *) udp_head;
+ p.len = &ulen;
+ if ((ret = get_mib_info(fd, &p)) < 0) {
+ udp_size = 0;
+ }
+ }
+
+ close_mib(fd);
+ }
+
+ if (udp_size > 0) {
+ DEBUGMSGTL(("mibII/udpTable", "Loaded UDP Table\n"));
+ return 0;
+ }
+ DEBUGMSGTL(("mibII/udpTable", "Failed to load UDP Table (hpux11)\n"));
+ return -1;
+}
+#else /* hpux11 */
+
+#ifdef linux
+int
+udpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ FILE *in;
+ char line[256];
+
+ udpTable_free(cache, NULL);
+
+ if (!(in = fopen("/proc/net/udp", "r"))) {
+ DEBUGMSGTL(("mibII/udpTable", "Failed to load UDP Table (linux)\n"));
+ snmp_log(LOG_ERR, "snmpd: cannot open /proc/net/udp ...\n");
+ return -1;
+ }
+
+ /*
+ * scan proc-file and build up a linked list
+ * This will actually be built up in reverse,
+ * but since the entries are unsorted, that doesn't matter.
+ */
+ while (line == fgets(line, sizeof(line), in)) {
+ struct inpcb pcb, *nnew;
+ unsigned int state, lport;
+
+ if (3 != sscanf(line, "%*d: %x:%x %*x:%*x %x",
+ &pcb.inp_laddr.s_addr, &lport, &state))
+ continue;
+
+ if (state != 7) /* fix me: UDP_LISTEN ??? */
+ continue;
+
+ /* store in network byte order */
+ pcb.inp_laddr.s_addr = htonl(pcb.inp_laddr.s_addr);
+ pcb.inp_lport = htons((unsigned short) (lport));
+
+ nnew = SNMP_MALLOC_TYPEDEF(struct inpcb);
+ if (nnew == NULL)
+ break;
+ memcpy(nnew, &pcb, sizeof(struct inpcb));
+ nnew->inp_next = udp_head;
+ udp_head = nnew;
+ }
+
+ fclose(in);
+
+ DEBUGMSGTL(("mibII/udpTable", "Loaded UDP Table\n"));
+ return 0;
+}
+#else /* linux */
+
+#ifdef solaris2
+static int
+UDP_Cmp(void *addr, void *ep)
+{
+ if (memcmp((mib2_udpEntry_t *) ep, (mib2_udpEntry_t *) addr,
+ sizeof(mib2_udpEntry_t)) == 0)
+ return (0);
+ else
+ return (1);
+}
+
+
+int
+udpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ mib2_udpEntry_t entry;
+ netsnmp_udpEntry *nnew;
+ netsnmp_udpEntry *prev_entry = NULL;
+
+
+ udpTable_free(NULL, NULL);
+
+ if (getMibstat(MIB_UDP_LISTEN, &entry, sizeof(mib2_udpEntry_t),
+ GET_FIRST, &UDP_Cmp, &entry) != 0) {
+ DEBUGMSGTL(("mibII/udpTable", "Failed to load UDP Table (solaris)\n"));
+ return -1;
+ }
+
+ while (1) {
+ /*
+ * Not interested in 'idle' entries, apparently....
+ */
+ DEBUGMSGTL(("mibII/udpTable", "UDP Entry %x:%d (%d)\n",
+ entry.udpLocalAddress, entry.udpLocalPort, entry.udpEntryInfo.ue_state));
+ if (entry.udpEntryInfo.ue_state == MIB2_UDP_idle) {
+ /*
+ * Build up a linked list copy of the getMibstat results
+ * Note that since getMibstat returns rows in sorted order,
+ * we need to retain this order while building the list
+ * so new entries are added onto the end of the list.
+ * xxx-rks: WARNING: this is NOT TRUE on the sf cf solaris boxes.
+ */
+ nnew = SNMP_MALLOC_TYPEDEF(netsnmp_udpEntry);
+ if (nnew == NULL)
+ break;
+ memcpy(&(nnew->entry), &entry, sizeof(mib2_udpEntry_t));
+ if (!prev_entry)
+ udp_head = nnew;
+ else
+ prev_entry->inp_next = nnew;
+ prev_entry = nnew;
+ }
+
+ if (getMibstat(MIB_UDP_LISTEN, &entry, sizeof(mib2_udpEntry_t),
+ GET_NEXT, &UDP_Cmp, &entry) != 0)
+ break;
+ }
+
+ if (udp_head) {
+ DEBUGMSGTL(("mibII/udpTable", "Loaded UDP Table\n"));
+ return 0;
+ }
+ DEBUGMSGTL(("mibII/udpTable", "Failed to load UDP Table (solaris)\n"));
+ return -1;
+}
+#else /* solaris2 */
+
+#if defined (WIN32) || defined (cygwin)
+int
+udpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ PMIB_UDPTABLE pUdpTable = NULL;
+ DWORD dwActualSize = 0;
+ DWORD status = NO_ERROR;
+
+ /*
+ * query for the buffer size needed
+ */
+ status = GetUdpTable(pUdpTable, &dwActualSize, TRUE);
+ if (status == ERROR_INSUFFICIENT_BUFFER) {
+ pUdpTable = (PMIB_UDPTABLE) malloc(dwActualSize);
+ if (pUdpTable != NULL) {
+ /*
+ * Get the sorted UDP table
+ */
+ status = GetUdpTable(pUdpTable, &dwActualSize, TRUE);
+ }
+ }
+ if (status == NO_ERROR) {
+ DEBUGMSGTL(("mibII/udpTable", "Loaded UDP Table\n"));
+ udp_size = pUdpTable->dwNumEntries -1; /* entries are counted starting with 0 */
+ udp_head = pUdpTable->table;
+ return 0;
+ }
+ DEBUGMSGTL(("mibII/udpTable", "Failed to load UDP Table (win32)\n"));
+ if (pUdpTable)
+ free(pUdpTable);
+ return -1;
+}
+#else /* WIN32 cygwin*/
+
+#if (defined(NETSNMP_CAN_USE_SYSCTL) && defined(UDPCTL_PCBLIST))
+int
+udpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ size_t len;
+ int sname[] = { CTL_NET, PF_INET, IPPROTO_UDP, UDPCTL_PCBLIST };
+ char *udpcb_buf = NULL;
+ struct xinpgen *xig = NULL;
+ UDPTABLE_ENTRY_TYPE *nnew;
+
+ udpTable_free(NULL, NULL);
+
+ /*
+ * Read in the buffer containing the UDP table data
+ */
+ len = 0;
+ if (sysctl(sname, 4, 0, &len, 0, 0) < 0 ||
+ (udpcb_buf = malloc(len)) == NULL)
+ return -1;
+ if (sysctl(sname, 4, udpcb_buf, &len, 0, 0) < 0) {
+ free(udpcb_buf);
+ return -1;
+ }
+
+ /*
+ * Unpick this into the constituent 'xinpgen' structures, and extract
+ * the 'inpcb' elements into a linked list (built in reverse)
+ */
+ xig = (struct xinpgen *) udpcb_buf;
+ xig = (struct xinpgen *) ((char *) xig + xig->xig_len);
+
+ while (xig && (xig->xig_len > sizeof(struct xinpgen))) {
+ nnew = SNMP_MALLOC_TYPEDEF(UDPTABLE_ENTRY_TYPE);
+ if (!nnew)
+ break;
+#if defined(freebsd4) || defined(darwin)
+ memcpy(nnew, &((struct xinpcb *) xig)->xi_inp, sizeof(struct inpcb));
+ nnew->inp_next = udp_head;
+#else
+ memcpy(nnew, ((struct xinpcb *) xig)->xi_inp, sizeof(struct inpcb));
+ nnew->next = udp_head; /* XXX - ?? Check 'next' pointer */
+#endif
+
+ udp_head = nnew;
+ xig = (struct xinpgen *) ((char *) xig + xig->xig_len);
+ }
+
+ free(udpcb_buf);
+ if (udp_head) {
+ DEBUGMSGTL(("mibII/udpTable", "Loaded UDP Table\n"));
+ return 0;
+ }
+ DEBUGMSGTL(("mibII/udpTable", "Failed to load UDP Table (sysctl)\n"));
+ return -1;
+}
+#else /* (defined(NETSNMP_CAN_USE_SYSCTL) && defined(UDPCTL_PCBLIST)) */
+#ifdef PCB_TABLE
+int
+udpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ struct inpcbtable table;
+ struct inpcb *nnew, *entry;
+
+ udpTable_free(NULL, NULL);
+
+ if (!auto_nlist(UDB_SYMBOL, (char *) &table, sizeof(table))) {
+ DEBUGMSGTL(("mibII/udpTable", "Failed to read inpcbtable\n"));
+ return -1;
+ }
+
+ /*
+ * Set up a linked list
+ */
+ entry = table.inpt_queue.cqh_first;
+ while (entry) {
+
+ nnew = SNMP_MALLOC_TYPEDEF(struct inpcb);
+ if (!nnew)
+ break;
+
+ if (!NETSNMP_KLOOKUP(entry, (char *) nnew, sizeof(struct inpcb))) {
+ DEBUGMSGTL(("mibII/udpTable:udpTable_load", "klookup failed\n"));
+ break;
+ }
+
+ entry = nnew->inp_queue.cqe_next; /* Next kernel entry */
+ nnew->inp_queue.cqe_next = udp_head;
+ udp_head = nnew;
+
+ if (entry == table.inpt_queue.cqh_first)
+ break;
+ }
+
+ if (udp_head) {
+ DEBUGMSGTL(("mibII/udpTable", "Loaded UDP Table\n"));
+ return 0;
+ }
+ DEBUGMSGTL(("mibII/udpTable", "Failed to load UDP Table (pcb_table)\n"));
+ return -1;
+}
+
+#else /* PCB_TABLE */
+#ifdef UDB_SYMBOL
+int
+udpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ struct inpcb udp_inpcb;
+ struct inpcb *nnew, *entry;
+
+ udpTable_free(NULL, NULL);
+
+ if (!auto_nlist(UDB_SYMBOL, (char *) &udp_inpcb, sizeof(udp_inpcb))) {
+ DEBUGMSGTL(("mibII/udpTable", "Failed to read udb_symbol\n"));
+ return -1;
+ }
+
+ /*
+ * Set up a linked list
+ */
+ entry = udp_inpcb.INP_NEXT_SYMBOL;
+ while (entry) {
+
+ nnew = SNMP_MALLOC_TYPEDEF(struct inpcb);
+ if (!nnew)
+ break;
+
+ if (!NETSNMP_KLOOKUP(entry, (char *) nnew, sizeof(struct inpcb))) {
+ DEBUGMSGTL(("mibII/udpTable:udpTable_load", "klookup failed\n"));
+ break;
+ }
+
+ entry = nnew->INP_NEXT_SYMBOL; /* Next kernel entry */
+ nnew->INP_NEXT_SYMBOL = udp_head;
+ udp_head = nnew;
+
+ if (entry == udp_inpcb.INP_NEXT_SYMBOL)
+ break;
+ }
+
+ if (udp_head) {
+ DEBUGMSGTL(("mibII/udpTable", "Loaded UDP Table\n"));
+ return 0;
+ }
+ DEBUGMSGTL(("mibII/udpTable", "Failed to load UDP Table (udb_symbol)\n"));
+ return -1;
+}
+
+#else /* UDB_SYMBOL */
+int
+udpTable_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("mibII/udpTable", "Loading UDP Table not implemented\n"));
+ return -1;
+}
+#endif /* UDB_SYMBOL */
+#endif /* PCB_TABLE */
+#endif /* (defined(NETSNMP_CAN_USE_SYSCTL) && defined(UDPCTL_PCBLIST)) */
+#endif /* WIN32 cygwin*/
+#endif /* linux */
+#endif /* solaris2 */
+#endif /* hpux11 */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udpTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udpTable.h
new file mode 100644
index 0000000000..2c61cda97c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/udpTable.h
@@ -0,0 +1,21 @@
+/*
+ * Template MIB group interface - udp.h
+ *
+ */
+#ifndef _MIBGROUP_UDPTABLE_H
+#define _MIBGROUP_UDPTABLE_H
+
+config_arch_require(solaris2, kernel_sunos5)
+config_require(util_funcs mibII/ip)
+
+extern void init_udpTable(void);
+extern Netsnmp_Node_Handler udpTable_handler;
+extern NetsnmpCacheLoad udpTable_load;
+extern NetsnmpCacheFree udpTable_free;
+extern Netsnmp_First_Data_Point udpTable_first_entry;
+extern Netsnmp_Next_Data_Point udpTable_next_entry;
+
+#define UDPLOCALADDRESS 1
+#define UDPLOCALPORT 2
+
+#endif /* _MIBGROUP_UDPTABLE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_conf.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_conf.c
new file mode 100644
index 0000000000..c3d465682a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_conf.c
@@ -0,0 +1,1490 @@
+/*
+ * SNMPv3 View-based Access Control Model
+ */
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#if HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+#include <ctype.h>
+#include <sys/types.h>
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#if HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/agent_callbacks.h>
+#include "vacm_conf.h"
+#include "util_funcs.h"
+
+#ifdef USING_MIBII_SYSORTABLE_MODULE
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#include "sysORTable.h"
+#endif
+
+#include "snmpd.h"
+
+/**
+ * Registers the VACM token handlers for inserting rows into the vacm tables.
+ * These tokens will be recognised by both 'snmpd' and 'snmptrapd'.
+ */
+void
+init_vacm_config_tokens(void) {
+ snmpd_register_config_handler("group", vacm_parse_group,
+ vacm_free_group,
+ "name v1|v2c|usm|... security");
+ snmpd_register_config_handler("access", vacm_parse_access,
+ vacm_free_access,
+ "name context model level prefix read write notify");
+ snmpd_register_config_handler("setaccess", vacm_parse_setaccess,
+ vacm_free_access,
+ "name context model level prefix viewname viewval");
+ snmpd_register_config_handler("view", vacm_parse_view, vacm_free_view,
+ "name type subtree [mask]");
+ snmpd_register_config_handler("vacmView", vacm_parse_config_view, NULL,
+ NULL);
+ snmpd_register_config_handler("vacmGroup", vacm_parse_config_group,
+ NULL, NULL);
+ snmpd_register_config_handler("vacmAccess", vacm_parse_config_access,
+ NULL, NULL);
+ snmpd_register_config_handler("vacmAuthAccess", vacm_parse_config_auth_access,
+ NULL, NULL);
+
+ /* easy community auth handler */
+ snmpd_register_config_handler("authcommunity",
+ vacm_parse_authcommunity,
+ NULL, "authtype1,authtype2 community [default|hostname|network/bits [oid|-V view]]");
+
+ /* easy user auth handler */
+ snmpd_register_config_handler("authuser",
+ vacm_parse_authuser,
+ NULL, "authtype1,authtype2 [-s secmodel] user [noauth|auth|priv [oid|-V view]]");
+ /* easy group auth handler */
+ snmpd_register_config_handler("authgroup",
+ vacm_parse_authuser,
+ NULL, "authtype1,authtype2 [-s secmodel] group [noauth|auth|priv [oid|-V view]]");
+
+ snmpd_register_config_handler("authaccess", vacm_parse_authaccess,
+ vacm_free_access,
+ "name authtype1,authtype2 [-s secmodel] group view [noauth|auth|priv [context|context*]]");
+
+ /*
+ * Define standard views "_all_" and "_none_"
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY,
+ SNMP_CALLBACK_POST_PREMIB_READ_CONFIG,
+ vacm_standard_views, NULL);
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY,
+ SNMP_CALLBACK_POST_READ_CONFIG,
+ vacm_warn_if_not_configured, NULL);
+}
+
+/**
+ * Registers the easier-to-use VACM token handlers for quick access rules.
+ * These tokens will only be recognised by 'snmpd'.
+ */
+void
+init_vacm_snmpd_easy_tokens(void) {
+#if !defined(NETSNMP_DISABLE_SNMPV1) || !defined(NETSNMP_DISABLE_SNMPV2C)
+ snmpd_register_config_handler("rwcommunity", vacm_parse_rwcommunity, NULL,
+ "community [default|hostname|network/bits [oid]]");
+ snmpd_register_config_handler("rocommunity", vacm_parse_rocommunity, NULL,
+ "community [default|hostname|network/bits [oid]]");
+#ifdef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
+ snmpd_register_config_handler("rwcommunity6", vacm_parse_rwcommunity6, NULL,
+ "community [default|hostname|network/bits [oid]]");
+ snmpd_register_config_handler("rocommunity6", vacm_parse_rocommunity6, NULL,
+ "community [default|hostname|network/bits [oid]]");
+#endif
+#endif /* support for community based SNMP */
+ snmpd_register_config_handler("rwuser", vacm_parse_rwuser, NULL,
+ "user [noauth|auth|priv [oid]]");
+ snmpd_register_config_handler("rouser", vacm_parse_rouser, NULL,
+ "user [noauth|auth|priv [oid]]");
+}
+
+void
+init_vacm_conf(void)
+{
+ init_vacm_config_tokens();
+ init_vacm_snmpd_easy_tokens();
+ /*
+ * register ourselves to handle access control ('snmpd' only)
+ */
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_ACM_CHECK, vacm_in_view_callback,
+ NULL);
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_ACM_CHECK_INITIAL,
+ vacm_in_view_callback, NULL);
+ snmp_register_callback(SNMP_CALLBACK_APPLICATION,
+ SNMPD_CALLBACK_ACM_CHECK_SUBTREE,
+ vacm_in_view_callback, NULL);
+}
+
+
+
+void
+vacm_parse_group(const char *token, char *param)
+{
+ char *group, *model, *security;
+ int imodel;
+ struct vacm_groupEntry *gp = NULL;
+ char *st;
+
+ group = strtok_r(param, " \t\n", &st);
+ model = strtok_r(NULL, " \t\n", &st);
+ security = strtok_r(NULL, " \t\n", &st);
+
+ if (group == NULL || *group == 0) {
+ config_perror("missing GROUP parameter");
+ return;
+ }
+ if (model == NULL || *model == 0) {
+ config_perror("missing MODEL parameter");
+ return;
+ }
+ if (security == NULL || *security == 0) {
+ config_perror("missing SECURITY parameter");
+ return;
+ }
+ if (strcasecmp(model, "v1") == 0)
+ imodel = SNMP_SEC_MODEL_SNMPv1;
+ else if (strcasecmp(model, "v2c") == 0)
+ imodel = SNMP_SEC_MODEL_SNMPv2c;
+ else if (strcasecmp(model, "any") == 0) {
+ config_perror
+ ("bad security model \"any\" should be: v1, v2c, usm or a registered security plugin name - installing anyway");
+ imodel = SNMP_SEC_MODEL_ANY;
+ } else {
+ if ((imodel = se_find_value_in_slist("snmp_secmods", model)) ==
+ SE_DNE) {
+ config_perror
+ ("bad security model, should be: v1, v2c or usm or a registered security plugin name");
+ return;
+ }
+ }
+ if (strlen(security) + 1 > sizeof(gp->groupName)) {
+ config_perror("security name too long");
+ return;
+ }
+ gp = vacm_createGroupEntry(imodel, security);
+ if (!gp) {
+ config_perror("failed to create group entry");
+ return;
+ }
+ strncpy(gp->groupName, group, sizeof(gp->groupName));
+ gp->groupName[ sizeof(gp->groupName)-1 ] = 0;
+ gp->storageType = SNMP_STORAGE_PERMANENT;
+ gp->status = SNMP_ROW_ACTIVE;
+ free(gp->reserved);
+ gp->reserved = NULL;
+}
+
+void
+vacm_free_group(void)
+{
+ vacm_destroyAllGroupEntries();
+}
+
+#define PARSE_CONT 0
+#define PARSE_FAIL 1
+
+int
+_vacm_parse_access_common(const char *token, char *param, char **st,
+ char **name, char **context, int *imodel,
+ int *ilevel, int *iprefix)
+{
+ char *model, *level, *prefix;
+
+ *name = strtok_r(param, " \t\n", st);
+ if (!*name) {
+ config_perror("missing NAME parameter");
+ return PARSE_FAIL;
+ }
+ *context = strtok_r(NULL, " \t\n", st);
+ if (!*context) {
+ config_perror("missing CONTEXT parameter");
+ return PARSE_FAIL;
+ }
+
+ model = strtok_r(NULL, " \t\n", st);
+ if (!model) {
+ config_perror("missing MODEL parameter");
+ return PARSE_FAIL;
+ }
+ level = strtok_r(NULL, " \t\n", st);
+ if (!level) {
+ config_perror("missing LEVEL parameter");
+ return PARSE_FAIL;
+ }
+ prefix = strtok_r(NULL, " \t\n", st);
+ if (!prefix) {
+ config_perror("missing PREFIX parameter");
+ return PARSE_FAIL;
+ }
+
+ if (strcmp(*context, "\"\"") == 0)
+ **context = 0;
+ if (strcasecmp(model, "any") == 0)
+ *imodel = SNMP_SEC_MODEL_ANY;
+ else if (strcasecmp(model, "v1") == 0)
+ *imodel = SNMP_SEC_MODEL_SNMPv1;
+ else if (strcasecmp(model, "v2c") == 0)
+ *imodel = SNMP_SEC_MODEL_SNMPv2c;
+ else {
+ if ((*imodel = se_find_value_in_slist("snmp_secmods", model))
+ == SE_DNE) {
+ config_perror
+ ("bad security model, should be: v1, v2c or usm or a registered security plugin name");
+ return PARSE_FAIL;
+ }
+ }
+
+ if (strcasecmp(level, "noauth") == 0)
+ *ilevel = SNMP_SEC_LEVEL_NOAUTH;
+ else if (strcasecmp(level, "noauthnopriv") == 0)
+ *ilevel = SNMP_SEC_LEVEL_NOAUTH;
+ else if (strcasecmp(level, "auth") == 0)
+ *ilevel = SNMP_SEC_LEVEL_AUTHNOPRIV;
+ else if (strcasecmp(level, "authnopriv") == 0)
+ *ilevel = SNMP_SEC_LEVEL_AUTHNOPRIV;
+ else if (strcasecmp(level, "priv") == 0)
+ *ilevel = SNMP_SEC_LEVEL_AUTHPRIV;
+ else if (strcasecmp(level, "authpriv") == 0)
+ *ilevel = SNMP_SEC_LEVEL_AUTHPRIV;
+ else {
+ config_perror
+ ("bad security level (noauthnopriv, authnopriv, authpriv)");
+ return PARSE_FAIL;
+ }
+
+ if (strcmp(prefix, "exact") == 0)
+ *iprefix = 1;
+ else if (strcmp(prefix, "prefix") == 0)
+ *iprefix = 2;
+ else if (strcmp(prefix, "0") == 0) {
+ config_perror
+ ("bad prefix match parameter \"0\", should be: exact or prefix - installing anyway");
+ *iprefix = 1;
+ } else {
+ config_perror
+ ("bad prefix match parameter, should be: exact or prefix");
+ return PARSE_FAIL;
+ }
+
+ return PARSE_CONT;
+}
+
+/* **************************************/
+/* authorization parsing token handlers */
+/* **************************************/
+
+int
+vacm_parse_authtokens(const char *token, char **confline)
+{
+ char authspec[SNMP_MAXBUF_MEDIUM];
+ char *strtok_state;
+ char *type;
+ int viewtype, viewtypes = 0;
+
+ *confline = copy_nword(*confline, authspec, sizeof(authspec));
+
+ DEBUGMSGTL(("vacm_parse_authtokens","parsing %s",authspec));
+ if (!*confline) {
+ config_perror("Illegal configuration line: missing fields");
+ return -1;
+ }
+
+ type = strtok_r(authspec, ",|:", &strtok_state);
+ while(type && *type != '\0') {
+ viewtype = se_find_value_in_slist(VACM_VIEW_ENUM_NAME, type);
+ if (viewtype < 0 || viewtype >= VACM_MAX_VIEWS) {
+ config_perror("Illegal view name");
+ } else {
+ viewtypes |= (1 << viewtype);
+ }
+ type = strtok_r(NULL, ",|:", &strtok_state);
+ }
+ DEBUGMSG(("vacm_parse_authtokens"," .. result = 0x%x\n",viewtypes));
+ return viewtypes;
+}
+
+void
+vacm_parse_authuser(const char *token, char *confline)
+{
+ int viewtypes = vacm_parse_authtokens(token, &confline);
+ if (viewtypes != -1)
+ vacm_create_simple(token, confline, VACM_CREATE_SIMPLE_V3, viewtypes);
+}
+
+void
+vacm_parse_authcommunity(const char *token, char *confline)
+{
+ int viewtypes = vacm_parse_authtokens(token, &confline);
+ if (viewtypes != -1)
+ vacm_create_simple(token, confline, VACM_CREATE_SIMPLE_COM, viewtypes);
+}
+
+void
+vacm_parse_authaccess(const char *token, char *confline)
+{
+ char *group, *view, *context, *tmp;
+ int model = SNMP_SEC_MODEL_ANY;
+ int level, prefix;
+ int i;
+ char *st;
+ struct vacm_accessEntry *ap;
+ int viewtypes = vacm_parse_authtokens(token, &confline);
+
+ if (viewtypes == -1)
+ return;
+
+ group = strtok_r(confline, " \t\n", &st);
+ if (!group) {
+ config_perror("missing GROUP parameter");
+ return;
+ }
+ view = strtok_r(NULL, " \t\n", &st);
+ if (!view) {
+ config_perror("missing VIEW parameter");
+ return;
+ }
+
+ /*
+ * Check for security model option
+ */
+ if ( strcasecmp(view, "-s") == 0 ) {
+ tmp = strtok_r(NULL, " \t\n", &st);
+ if (tmp) {
+ if (strcasecmp(tmp, "any") == 0)
+ model = SNMP_SEC_MODEL_ANY;
+ else if (strcasecmp(tmp, "v1") == 0)
+ model = SNMP_SEC_MODEL_SNMPv1;
+ else if (strcasecmp(tmp, "v2c") == 0)
+ model = SNMP_SEC_MODEL_SNMPv2c;
+ else {
+ model = se_find_value_in_slist("snmp_secmods", tmp);
+ if (model == SE_DNE) {
+ config_perror
+ ("bad security model, should be: v1, v2c or usm or a registered security plugin name");
+ return;
+ }
+ }
+ } else {
+ config_perror("missing SECMODEL parameter");
+ return;
+ }
+ view = strtok_r(NULL, " \t\n", &st);
+ if (!view) {
+ config_perror("missing VIEW parameter");
+ return;
+ }
+ }
+ if (strlen(view) >= VACMSTRINGLEN ) {
+ config_perror("View value too long");
+ return;
+ }
+
+ /*
+ * Now parse optional fields, or provide default values
+ */
+
+ tmp = strtok_r(NULL, " \t\n", &st);
+ if (tmp) {
+ if (strcasecmp(tmp, "noauth") == 0)
+ level = SNMP_SEC_LEVEL_NOAUTH;
+ else if (strcasecmp(tmp, "noauthnopriv") == 0)
+ level = SNMP_SEC_LEVEL_NOAUTH;
+ else if (strcasecmp(tmp, "auth") == 0)
+ level = SNMP_SEC_LEVEL_AUTHNOPRIV;
+ else if (strcasecmp(tmp, "authnopriv") == 0)
+ level = SNMP_SEC_LEVEL_AUTHNOPRIV;
+ else if (strcasecmp(tmp, "priv") == 0)
+ level = SNMP_SEC_LEVEL_AUTHPRIV;
+ else if (strcasecmp(tmp, "authpriv") == 0)
+ level = SNMP_SEC_LEVEL_AUTHPRIV;
+ else {
+ config_perror
+ ("bad security level (noauthnopriv, authnopriv, authpriv)");
+ return;
+ }
+ } else {
+ /* What about SNMP_SEC_MODEL_ANY ?? */
+ if ( model == SNMP_SEC_MODEL_SNMPv1 ||
+ model == SNMP_SEC_MODEL_SNMPv2c )
+ level = SNMP_SEC_LEVEL_NOAUTH;
+ else
+ level = SNMP_SEC_LEVEL_AUTHNOPRIV;
+ }
+
+
+ context = strtok_r(NULL, " \t\n", &st);
+ if (context) {
+ tmp = (context + strlen(context)-1);
+ if (tmp && *tmp == '*') {
+ *tmp = '\0';
+ prefix = 2;
+ } else {
+ prefix = 1;
+ }
+ } else {
+ context = "";
+ prefix = 1; /* Or prefix(2) ?? */
+ }
+
+ /*
+ * Now we can create the access entry
+ */
+ ap = vacm_getAccessEntry(group, context, model, level);
+ if (!ap) {
+ ap = vacm_createAccessEntry(group, context, model, level);
+ DEBUGMSGTL(("vacm:conf:authaccess",
+ "no existing access found; creating a new one\n"));
+ } else {
+ DEBUGMSGTL(("vacm:conf:authaccess",
+ "existing access found, using it\n"));
+ }
+ if (!ap) {
+ config_perror("failed to create access entry");
+ return;
+ }
+
+ for (i = 0; i <= VACM_MAX_VIEWS; i++) {
+ if (viewtypes & (1 << i)) {
+ strcpy(ap->views[i], view);
+ }
+ }
+ ap->contextMatch = prefix;
+ ap->storageType = SNMP_STORAGE_PERMANENT;
+ ap->status = SNMP_ROW_ACTIVE;
+ if (ap->reserved)
+ free(ap->reserved);
+ ap->reserved = NULL;
+}
+
+void
+vacm_parse_setaccess(const char *token, char *param)
+{
+ char *name, *context, *viewname, *viewval;
+ int imodel, ilevel, iprefix;
+ int viewnum;
+ char *st;
+ struct vacm_accessEntry *ap;
+
+ if (_vacm_parse_access_common(token, param, &st, &name,
+ &context, &imodel, &ilevel, &iprefix)
+ == PARSE_FAIL) {
+ return;
+ }
+
+ viewname = strtok_r(NULL, " \t\n", &st);
+ if (!viewname) {
+ config_perror("missing viewname parameter");
+ return;
+ }
+ viewval = strtok_r(NULL, " \t\n", &st);
+ if (!viewval) {
+ config_perror("missing viewval parameter");
+ return;
+ }
+
+ if (strlen(viewval) + 1 > sizeof(ap->views[VACM_VIEW_NOTIFY])) {
+ config_perror("View value too long");
+ return;
+ }
+
+ viewnum = se_find_value_in_slist(VACM_VIEW_ENUM_NAME, viewname);
+ if (viewnum < 0 || viewnum >= VACM_MAX_VIEWS) {
+ config_perror("Illegal view name");
+ return;
+ }
+
+ ap = vacm_getAccessEntry(name, context, imodel, ilevel);
+ if (!ap) {
+ ap = vacm_createAccessEntry(name, context, imodel, ilevel);
+ DEBUGMSGTL(("vacm:conf:setaccess",
+ "no existing access found; creating a new one\n"));
+ } else {
+ DEBUGMSGTL(("vacm:conf:setaccess",
+ "existing access found, using it\n"));
+ }
+ if (!ap) {
+ config_perror("failed to create access entry");
+ return;
+ }
+ if (!ap) {
+ config_perror("failed to create access entry");
+ return;
+ }
+
+ strcpy(ap->views[viewnum], viewval);
+ ap->contextMatch = iprefix;
+ ap->storageType = SNMP_STORAGE_PERMANENT;
+ ap->status = SNMP_ROW_ACTIVE;
+ free(ap->reserved);
+ ap->reserved = NULL;
+}
+
+void
+vacm_parse_access(const char *token, char *param)
+{
+ char *name, *context, *readView, *writeView, *notify;
+ int imodel, ilevel, iprefix;
+ struct vacm_accessEntry *ap;
+ char *st;
+
+
+ if (_vacm_parse_access_common(token, param, &st, &name,
+ &context, &imodel, &ilevel, &iprefix)
+ == PARSE_FAIL) {
+ return;
+ }
+
+ readView = strtok_r(NULL, " \t\n", &st);
+ if (!readView) {
+ config_perror("missing readView parameter");
+ return;
+ }
+ writeView = strtok_r(NULL, " \t\n", &st);
+ if (!writeView) {
+ config_perror("missing writeView parameter");
+ return;
+ }
+ notify = strtok_r(NULL, " \t\n", &st);
+ if (!notify) {
+ config_perror("missing notifyView parameter");
+ return;
+ }
+
+ if (strlen(readView) + 1 > sizeof(ap->views[VACM_VIEW_READ])) {
+ config_perror("readView too long");
+ return;
+ }
+ if (strlen(writeView) + 1 > sizeof(ap->views[VACM_VIEW_WRITE])) {
+ config_perror("writeView too long");
+ return;
+ }
+ if (strlen(notify) + 1 > sizeof(ap->views[VACM_VIEW_NOTIFY])) {
+ config_perror("notifyView too long");
+ return;
+ }
+ ap = vacm_createAccessEntry(name, context, imodel, ilevel);
+ if (!ap) {
+ config_perror("failed to create access entry");
+ return;
+ }
+ strcpy(ap->views[VACM_VIEW_READ], readView);
+ strcpy(ap->views[VACM_VIEW_WRITE], writeView);
+ strcpy(ap->views[VACM_VIEW_NOTIFY], notify);
+ ap->contextMatch = iprefix;
+ ap->storageType = SNMP_STORAGE_PERMANENT;
+ ap->status = SNMP_ROW_ACTIVE;
+ free(ap->reserved);
+ ap->reserved = NULL;
+}
+
+void
+vacm_free_access(void)
+{
+ vacm_destroyAllAccessEntries();
+}
+
+void
+vacm_parse_view(const char *token, char *param)
+{
+ char *name, *type, *subtree, *mask;
+ int inclexcl;
+ struct vacm_viewEntry *vp;
+ oid suboid[MAX_OID_LEN];
+ size_t suboid_len = 0;
+ size_t mask_len = 0;
+ u_char viewMask[VACMSTRINGLEN];
+ int i;
+ char *st;
+
+ name = strtok_r(param, " \t\n", &st);
+ if (!name) {
+ config_perror("missing NAME parameter");
+ return;
+ }
+ type = strtok_r(NULL, " \n\t", &st);
+ if (!type) {
+ config_perror("missing TYPE parameter");
+ return;
+ }
+ subtree = strtok_r(NULL, " \t\n", &st);
+ if (!subtree) {
+ config_perror("missing SUBTREE parameter");
+ return;
+ }
+ mask = strtok_r(NULL, "\0", &st);
+
+ if (strcmp(type, "included") == 0)
+ inclexcl = SNMP_VIEW_INCLUDED;
+ else if (strcmp(type, "excluded") == 0)
+ inclexcl = SNMP_VIEW_EXCLUDED;
+ else {
+ config_perror("TYPE must be included/excluded?");
+ return;
+ }
+ suboid_len = strlen(subtree)-1;
+ if (subtree[suboid_len] == '.')
+ subtree[suboid_len] = '\0'; /* stamp on a trailing . */
+ suboid_len = MAX_OID_LEN;
+ if (!snmp_parse_oid(subtree, suboid, &suboid_len)) {
+ config_perror("bad SUBTREE object id");
+ return;
+ }
+ if (mask) {
+ int val;
+ i = 0;
+ for (mask = strtok_r(mask, " .:", &st); mask; mask = strtok_r(NULL, " .:", &st)) {
+ if (i >= sizeof(viewMask)) {
+ config_perror("MASK too long");
+ return;
+ }
+ if (sscanf(mask, "%x", &val) == 0) {
+ config_perror("invalid MASK");
+ return;
+ }
+ viewMask[i] = val;
+ i++;
+ }
+ mask_len = i;
+ } else {
+ for (i = 0; i < sizeof(viewMask); i++)
+ viewMask[i] = 0xff;
+ }
+ vp = vacm_createViewEntry(name, suboid, suboid_len);
+ if (!vp) {
+ config_perror("failed to create view entry");
+ return;
+ }
+ memcpy(vp->viewMask, viewMask, sizeof(viewMask));
+ vp->viewMaskLen = mask_len;
+ vp->viewType = inclexcl;
+ vp->viewStorageType = SNMP_STORAGE_PERMANENT;
+ vp->viewStatus = SNMP_ROW_ACTIVE;
+ free(vp->reserved);
+ vp->reserved = NULL;
+}
+
+void
+vacm_free_view(void)
+{
+ vacm_destroyAllViewEntries();
+}
+
+void
+vacm_gen_com2sec(int commcount, char *community, char *addressname,
+ char *publishtoken,
+ void (*parser)(const char *, char *),
+ char *secname, size_t secname_len,
+ char *viewname, size_t viewname_len, int version)
+{
+ char line[SPRINT_MAX_LEN];
+
+ /*
+ * com2sec6|comsec anonymousSecNameNUM ADDRESS COMMUNITY
+ */
+ snprintf(secname, secname_len-1, "comm%d", commcount);
+ secname[secname_len-1] = '\0';
+ if (viewname) {
+ snprintf(viewname, viewname_len-1, "viewComm%d", commcount);
+ viewname[viewname_len-1] = '\0';
+ }
+ snprintf(line, sizeof(line), "%s %s '%s'",
+ secname, addressname, community);
+ line[ sizeof(line)-1 ] = 0;
+ DEBUGMSGTL((publishtoken, "passing: %s %s\n", publishtoken, line));
+ (*parser)(publishtoken, line);
+
+ /*
+ * sec->group mapping
+ */
+ /*
+ * group anonymousGroupNameNUM any anonymousSecNameNUM
+ */
+ if ( version & SNMP_SEC_MODEL_SNMPv1 ) {
+ snprintf(line, sizeof(line),
+ "grp%.28s v1 %s", secname, secname);
+ line[ sizeof(line)-1 ] = 0;
+ DEBUGMSGTL((publishtoken, "passing: %s %s\n", "group", line));
+ vacm_parse_group("group", line);
+ }
+
+ if ( version & SNMP_SEC_MODEL_SNMPv2c ) {
+ snprintf(line, sizeof(line),
+ "grp%.28s v2c %s", secname, secname);
+ line[ sizeof(line)-1 ] = 0;
+ DEBUGMSGTL((publishtoken, "passing: %s %s\n", "group", line));
+ vacm_parse_group("group", line);
+ }
+}
+
+void
+vacm_parse_rwuser(const char *token, char *confline)
+{
+ vacm_create_simple(token, confline, VACM_CREATE_SIMPLE_V3,
+ VACM_VIEW_READ_BIT | VACM_VIEW_WRITE_BIT);
+}
+
+void
+vacm_parse_rouser(const char *token, char *confline)
+{
+ vacm_create_simple(token, confline, VACM_CREATE_SIMPLE_V3,
+ VACM_VIEW_READ_BIT);
+}
+
+void
+vacm_parse_rocommunity(const char *token, char *confline)
+{
+ vacm_create_simple(token, confline, VACM_CREATE_SIMPLE_COMIPV4,
+ VACM_VIEW_READ_BIT);
+}
+
+void
+vacm_parse_rwcommunity(const char *token, char *confline)
+{
+ vacm_create_simple(token, confline, VACM_CREATE_SIMPLE_COMIPV4,
+ VACM_VIEW_READ_BIT | VACM_VIEW_WRITE_BIT);
+}
+
+void
+vacm_parse_rocommunity6(const char *token, char *confline)
+{
+ vacm_create_simple(token, confline, VACM_CREATE_SIMPLE_COMIPV6,
+ VACM_VIEW_READ_BIT);
+}
+
+void
+vacm_parse_rwcommunity6(const char *token, char *confline)
+{
+ vacm_create_simple(token, confline, VACM_CREATE_SIMPLE_COMIPV6,
+ VACM_VIEW_READ_BIT | VACM_VIEW_WRITE_BIT);
+}
+
+
+void
+vacm_create_simple(const char *token, char *confline,
+ int parsetype, int viewtypes)
+{
+ char line[SPRINT_MAX_LEN];
+ char community[COMMUNITY_MAX_LEN];
+ char theoid[SPRINT_MAX_LEN];
+ char viewname[SPRINT_MAX_LEN];
+ char *view_ptr = viewname;
+#if !defined(NETSNMP_DISABLE_SNMPV1) || !defined(NETSNMP_DISABLE_SNMPV2C)
+ char addressname[SPRINT_MAX_LEN];
+#endif
+ const char *rw = "none";
+ char model[SPRINT_MAX_LEN];
+ char *cp, *tmp;
+ char secname[SPRINT_MAX_LEN];
+ char grpname[SPRINT_MAX_LEN];
+ char authlevel[SPRINT_MAX_LEN];
+ char context[SPRINT_MAX_LEN];
+ int ctxprefix = 1; /* Default to matching all contexts */
+ static int commcount = 0;
+ /* Conveniently, the community-based security
+ model values can also be used as bit flags */
+ int commversion = SNMP_SEC_MODEL_SNMPv1 |
+ SNMP_SEC_MODEL_SNMPv2c;
+
+ /*
+ * init
+ */
+ strcpy(model, "any");
+ memset(context, 0, sizeof(context));
+ memset(secname, 0, sizeof(secname));
+ memset(grpname, 0, sizeof(grpname));
+
+ /*
+ * community name or user name
+ */
+ cp = copy_nword(confline, community, sizeof(community));
+
+ if (parsetype == VACM_CREATE_SIMPLE_V3) {
+ /*
+ * maybe security model type
+ */
+ if (strcmp(community, "-s") == 0) {
+ /*
+ * -s model ...
+ */
+ if (cp)
+ cp = copy_nword(cp, model, sizeof(model));
+ if (!cp) {
+ config_perror("illegal line");
+ return;
+ }
+ if (cp)
+ cp = copy_nword(cp, community, sizeof(community));
+ } else {
+ strcpy(model, "usm");
+ }
+ /*
+ * authentication level
+ */
+ if (cp && *cp)
+ cp = copy_nword(cp, authlevel, sizeof(authlevel));
+ else
+ strcpy(authlevel, "auth");
+ DEBUGMSGTL((token, "setting auth level: \"%s\"\n", authlevel));
+#if !defined(NETSNMP_DISABLE_SNMPV1) || !defined(NETSNMP_DISABLE_SNMPV2C)
+ } else {
+ if (strcmp(community, "-v") == 0) {
+ /*
+ * -v version ...
+ */
+ if (cp)
+ cp = copy_nword(cp, model, sizeof(model));
+ if (!cp) {
+ config_perror("illegal line");
+ return;
+ }
+ if ( strcasecmp( model, "1" ) == 0 )
+ strcpy(model, "v1");
+ if ( strcasecmp( model, "v1" ) == 0 )
+ commversion = SNMP_SEC_MODEL_SNMPv1;
+ if ( strcasecmp( model, "2c" ) == 0 )
+ strcpy(model, "v2c");
+ if ( strcasecmp( model, "v2c" ) == 0 )
+ commversion = SNMP_SEC_MODEL_SNMPv2c;
+ if (cp)
+ cp = copy_nword(cp, community, sizeof(community));
+ }
+ /*
+ * source address
+ */
+ if (cp && *cp) {
+ cp = copy_nword(cp, addressname, sizeof(addressname));
+ } else {
+ strcpy(addressname, "default");
+ }
+ /*
+ * authlevel has to be noauth
+ */
+ strcpy(authlevel, "noauth");
+#endif /* support for community based SNMP */
+ }
+
+ /*
+ * oid they can touch
+ */
+ if (cp && *cp) {
+ if (strncmp(cp, "-V ", 3) == 0) {
+ cp = skip_token(cp);
+ cp = copy_nword(cp, viewname, sizeof(viewname));
+ view_ptr = NULL;
+ } else {
+ cp = copy_nword(cp, theoid, sizeof(theoid));
+ }
+ } else {
+ strcpy(theoid, ".1");
+ strcpy(viewname, "_all_");
+ view_ptr = NULL;
+ }
+ /*
+ * optional, non-default context
+ */
+ if (cp && *cp) {
+ cp = copy_nword(cp, context, sizeof(context));
+ tmp = (context + strlen(context)-1);
+ if (tmp && *tmp == '*') {
+ *tmp = '\0';
+ ctxprefix = 1;
+ } else {
+ /*
+ * If no context field is given, then we default to matching
+ * all contexts (for compatability with previous releases).
+ * But if a field context is specified (not ending with '*')
+ * then this should be taken as an exact match.
+ * Specifying a context field of "" will match the default
+ * context (and *only* the default context).
+ */
+ ctxprefix = 0;
+ }
+ }
+
+ if (viewtypes & VACM_VIEW_WRITE_BIT)
+ rw = viewname;
+
+ commcount++;
+
+#if !defined(NETSNMP_DISABLE_SNMPV1) || !defined(NETSNMP_DISABLE_SNMPV2C)
+ if (parsetype == VACM_CREATE_SIMPLE_COMIPV4 ||
+ parsetype == VACM_CREATE_SIMPLE_COM) {
+ vacm_gen_com2sec(commcount, community, addressname,
+ "com2sec", &netsnmp_udp_parse_security,
+ secname, sizeof(secname),
+ view_ptr, sizeof(viewname), commversion);
+ }
+
+#ifdef NETSNMP_TRANSPORT_UNIX_DOMAIN
+ if (parsetype == VACM_CREATE_SIMPLE_COMUNIX ||
+ parsetype == VACM_CREATE_SIMPLE_COM) {
+ snprintf(line, sizeof(line), "%s %s '%s'",
+ secname, addressname, community);
+ line[ sizeof(line)-1 ] = 0;
+ DEBUGMSGTL((token, "passing: %s %s\n", "com2secunix", line));
+ netsnmp_unix_parse_security("com2secunix", line);
+ }
+#endif
+
+#ifdef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
+ if (parsetype == VACM_CREATE_SIMPLE_COMIPV6 ||
+ parsetype == VACM_CREATE_SIMPLE_COM) {
+ vacm_gen_com2sec(commcount, community, addressname,
+ "com2sec6", &netsnmp_udp6_parse_security,
+ secname, sizeof(secname),
+ view_ptr, sizeof(viewname), commversion);
+ }
+#endif
+#endif /* support for community based SNMP */
+
+ if (parsetype == VACM_CREATE_SIMPLE_V3) {
+ /* support for SNMPv3 user names */
+ if (view_ptr) {
+ sprintf(viewname,"viewUSM%d",commcount);
+ }
+ if ( strcmp( token, "authgroup" ) == 0 ) {
+ strncpy(grpname, community, sizeof(grpname));
+ grpname[ sizeof(grpname)-1 ] = 0;
+ } else {
+ strncpy(secname, community, sizeof(secname));
+ secname[ sizeof(secname)-1 ] = 0;
+
+ /*
+ * sec->group mapping
+ */
+ /*
+ * group anonymousGroupNameNUM any anonymousSecNameNUM
+ */
+ snprintf(grpname, sizeof(grpname), "grp%.28s", secname);
+ for (tmp=grpname; *tmp; tmp++)
+ if (!isalnum(*tmp))
+ *tmp = '_';
+ snprintf(line, sizeof(line),
+ "%s %s %s", grpname, model, secname);
+ line[ sizeof(line)-1 ] = 0;
+ DEBUGMSGTL((token, "passing: %s %s\n", "group", line));
+ vacm_parse_group("group", line);
+ }
+ } else {
+ snprintf(grpname, sizeof(grpname), "grp%.28s", secname);
+ for (tmp=grpname; *tmp; tmp++)
+ if (!isalnum(*tmp))
+ *tmp = '_';
+ }
+
+ /*
+ * view definition
+ */
+ /*
+ * view anonymousViewNUM included OID
+ */
+ if (view_ptr) {
+ snprintf(line, sizeof(line), "%s included %s", viewname, theoid);
+ line[ sizeof(line)-1 ] = 0;
+ DEBUGMSGTL((token, "passing: %s %s\n", "view", line));
+ vacm_parse_view("view", line);
+ }
+
+ /*
+ * map everything together
+ */
+ if ((viewtypes == VACM_VIEW_READ_BIT) ||
+ (viewtypes == (VACM_VIEW_READ_BIT | VACM_VIEW_WRITE_BIT))) {
+ /* Use the simple line access command */
+ /*
+ * access anonymousGroupNameNUM "" MODEL AUTHTYPE prefix anonymousViewNUM [none/anonymousViewNUM] [none/anonymousViewNUM]
+ */
+ snprintf(line, sizeof(line),
+ "%s %s %s %s %s %s %s %s",
+ grpname, context[0] ? context : "\"\"",
+ model, authlevel,
+ (ctxprefix ? "prefix" : "exact"),
+ viewname, rw, rw);
+ line[ sizeof(line)-1 ] = 0;
+ DEBUGMSGTL((token, "passing: %s %s\n", "access", line));
+ vacm_parse_access("access", line);
+ } else {
+ /* Use one setaccess line per access type */
+ /*
+ * setaccess anonymousGroupNameNUM "" MODEL AUTHTYPE prefix viewname viewval
+ */
+ int i;
+ DEBUGMSGTL((token, " checking view levels for %x\n", viewtypes));
+ for(i = 0; i <= VACM_MAX_VIEWS; i++) {
+ if (viewtypes & (1 << i)) {
+ snprintf(line, sizeof(line),
+ "%s %s %s %s %s %s %s",
+ grpname, context[0] ? context : "\"\"",
+ model, authlevel,
+ (ctxprefix ? "prefix" : "exact"),
+ se_find_label_in_slist(VACM_VIEW_ENUM_NAME, i),
+ viewname);
+ line[ sizeof(line)-1 ] = 0;
+ DEBUGMSGTL((token, "passing: %s %s\n", "setaccess", line));
+ vacm_parse_setaccess("setaccess", line);
+ }
+ }
+ }
+}
+
+int
+vacm_standard_views(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ char line[SPRINT_MAX_LEN];
+
+ memset(line, 0, sizeof(line));
+
+ snprintf(line, sizeof(line), "_all_ included .0");
+ vacm_parse_view("view", line);
+ snprintf(line, sizeof(line), "_all_ included .1");
+ vacm_parse_view("view", line);
+ snprintf(line, sizeof(line), "_all_ included .2");
+ vacm_parse_view("view", line);
+
+ snprintf(line, sizeof(line), "_none_ excluded .0");
+ vacm_parse_view("view", line);
+ snprintf(line, sizeof(line), "_none_ excluded .1");
+ vacm_parse_view("view", line);
+ snprintf(line, sizeof(line), "_none_ excluded .2");
+ vacm_parse_view("view", line);
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+vacm_warn_if_not_configured(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ const char * name = netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
+ NETSNMP_DS_LIB_APPTYPE);
+ const int agent_mode = netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_ROLE);
+ if (NULL==name)
+ name = "snmpd";
+
+ if (!vacm_is_configured()) {
+ /*
+ * An AgentX subagent relies on the master agent to apply suitable
+ * access control checks, so doesn't need local VACM configuration.
+ * The trap daemon has a separate check (see below).
+ *
+ * Otherwise, an AgentX master or SNMP standalone agent requires some
+ * form of VACM configuration. No config means that no incoming
+ * requests will be accepted, so warn the user accordingly.
+ */
+ if ((MASTER_AGENT == agent_mode) && (strcmp(name, "snmptrapd") != 0)) {
+ snmp_log(LOG_WARNING,
+ "Warning: no access control information configured.\n It's "
+ "unlikely this agent can serve any useful purpose in this "
+ "state.\n Run \"snmpconf -g basic_setup\" to help you "
+ "configure the %s.conf file for this agent.\n", name );
+ }
+
+ /*
+ * The trap daemon implements VACM-style access control for incoming
+ * notifications, but offers a way of turning this off (for backwards
+ * compatability). Check for this explicitly, and warn if necessary.
+ *
+ * NB: The NETSNMP_DS_APP_NO_AUTHORIZATION definition is a duplicate
+ * of an identical setting in "apps/snmptrapd_ds.h".
+ * These two need to be kept in synch.
+ */
+#ifndef NETSNMP_DS_APP_NO_AUTHORIZATION
+#define NETSNMP_DS_APP_NO_AUTHORIZATION 17
+#endif
+ if (!strcmp(name, "snmptrapd") &&
+ !netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_APP_NO_AUTHORIZATION)) {
+ snmp_log(LOG_WARNING,
+ "Warning: no access control information configured.\n"
+ "This receiver will *NOT* accept any incoming notifications.\n");
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+vacm_in_view_callback(int majorID, int minorID, void *serverarg,
+ void *clientarg)
+{
+ struct view_parameters *view_parms =
+ (struct view_parameters *) serverarg;
+ int retval;
+
+ if (view_parms == NULL)
+ return 1;
+ retval = vacm_in_view(view_parms->pdu, view_parms->name,
+ view_parms->namelen, view_parms->check_subtree);
+ if (retval != 0)
+ view_parms->errorcode = retval;
+ return retval;
+}
+
+
+/**
+ * vacm_in_view: decides if a given PDU can be acted upon
+ *
+ * Parameters:
+ * *pdu
+ * *name
+ * namelen
+ * check_subtree
+ *
+ * Returns:
+ * VACM_SUCCESS(0) On success.
+ * VACM_NOSECNAME(1) Missing security name.
+ * VACM_NOGROUP(2) Missing group
+ * VACM_NOACCESS(3) Missing access
+ * VACM_NOVIEW(4) Missing view
+ * VACM_NOTINVIEW(5) Not in view
+ * VACM_NOSUCHCONTEXT(6) No Such Context
+ * VACM_SUBTREE_UNKNOWN(7) When testing an entire subtree, UNKNOWN (ie, the entire
+ * subtree has both allowed and disallowed portions)
+ *
+ * Debug output listed as follows:
+ * \<securityName\> \<groupName\> \<viewName\> \<viewType\>
+ */
+int
+vacm_in_view(netsnmp_pdu *pdu, oid * name, size_t namelen,
+ int check_subtree)
+{
+ int viewtype;
+
+ switch (pdu->command) {
+ case SNMP_MSG_GET:
+ case SNMP_MSG_GETNEXT:
+ case SNMP_MSG_GETBULK:
+ viewtype = VACM_VIEW_READ;
+ break;
+ case SNMP_MSG_SET:
+ viewtype = VACM_VIEW_WRITE;
+ break;
+ case SNMP_MSG_TRAP:
+ case SNMP_MSG_TRAP2:
+ case SNMP_MSG_INFORM:
+ viewtype = VACM_VIEW_NOTIFY;
+ break;
+ default:
+ snmp_log(LOG_ERR, "bad msg type in vacm_in_view: %d\n",
+ pdu->command);
+ viewtype = VACM_VIEW_READ;
+ }
+ return vacm_check_view(pdu, name, namelen, check_subtree, viewtype);
+}
+
+/**
+ * vacm_check_view: decides if a given PDU can be taken based on a view type
+ *
+ * Parameters:
+ * *pdu
+ * *name
+ * namelen
+ * check_subtree
+ * viewtype
+ *
+ * Returns:
+ * VACM_SUCCESS(0) On success.
+ * VACM_NOSECNAME(1) Missing security name.
+ * VACM_NOGROUP(2) Missing group
+ * VACM_NOACCESS(3) Missing access
+ * VACM_NOVIEW(4) Missing view
+ * VACM_NOTINVIEW(5) Not in view
+ * VACM_NOSUCHCONTEXT(6) No Such Context
+ * VACM_SUBTREE_UNKNOWN(7) When testing an entire subtree, UNKNOWN (ie, the entire
+ * subtree has both allowed and disallowed portions)
+ *
+ * Debug output listed as follows:
+ * \<securityName\> \<groupName\> \<viewName\> \<viewType\>
+ */
+int
+vacm_check_view(netsnmp_pdu *pdu, oid * name, size_t namelen,
+ int check_subtree, int viewtype)
+{
+ struct vacm_accessEntry *ap;
+ struct vacm_groupEntry *gp;
+ struct vacm_viewEntry *vp;
+ char vacm_default_context[1] = "";
+ char *contextName = vacm_default_context;
+ char *sn = NULL;
+ char *vn;
+ char *pdu_community;
+
+ /*
+ * len defined by the vacmContextName object
+ */
+#define CONTEXTNAMEINDEXLEN 32
+ char contextNameIndex[CONTEXTNAMEINDEXLEN + 1];
+
+#if !defined(NETSNMP_DISABLE_SNMPV1) || !defined(NETSNMP_DISABLE_SNMPV2C)
+#if defined(NETSNMP_DISABLE_SNMPV1)
+ if (pdu->version == SNMP_VERSION_2c)
+#else
+#if defined(NETSNMP_DISABLE_SNMPV2C)
+ if (pdu->version == SNMP_VERSION_1)
+#else
+ if (pdu->version == SNMP_VERSION_1 || pdu->version == SNMP_VERSION_2c)
+#endif
+#endif
+ {
+ pdu_community = pdu->community;
+ if (!pdu_community)
+ pdu_community = "";
+ if (snmp_get_do_debugging()) {
+ char *buf;
+ if (pdu->community) {
+ buf = (char *) malloc(1 + pdu->community_len);
+ memcpy(buf, pdu->community, pdu->community_len);
+ buf[pdu->community_len] = '\0';
+ } else {
+ DEBUGMSGTL(("mibII/vacm_vars", "NULL community"));
+ buf = strdup("NULL");
+ }
+
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "vacm_in_view: ver=%d, community=%s\n",
+ pdu->version, buf));
+ free(buf);
+ }
+
+ /*
+ * Okay, if this PDU was received from a UDP or a TCP transport then
+ * ask the transport abstraction layer to map its source address and
+ * community string to a security name for us.
+ */
+
+ if (pdu->tDomain == netsnmpUDPDomain
+#ifdef NETSNMP_TRANSPORT_TCP_DOMAIN
+ || pdu->tDomain == netsnmp_snmpTCPDomain
+#endif
+ ) {
+ if (!netsnmp_udp_getSecName(pdu->transport_data,
+ pdu->transport_data_length,
+ (char *) pdu_community,
+ pdu->community_len, &sn,
+ &contextName)) {
+ /*
+ * There are no com2sec entries.
+ */
+ sn = NULL;
+ }
+ /* force the community -> context name mapping here */
+ SNMP_FREE(pdu->contextName);
+ pdu->contextName = strdup(contextName);
+ pdu->contextNameLen = strlen(contextName);
+#ifdef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
+ } else if (pdu->tDomain == netsnmp_UDPIPv6Domain
+#ifdef NETSNMP_TRANSPORT_TCPIPV6_DOMAIN
+ || pdu->tDomain == netsnmp_TCPIPv6Domain
+#endif
+ ) {
+ if (!netsnmp_udp6_getSecName(pdu->transport_data,
+ pdu->transport_data_length,
+ (char *) pdu_community,
+ pdu->community_len, &sn,
+ &contextName)) {
+ /*
+ * There are no com2sec entries.
+ */
+ sn = NULL;
+ }
+ /* force the community -> context name mapping here */
+ SNMP_FREE(pdu->contextName);
+ pdu->contextName = strdup(contextName);
+ pdu->contextNameLen = strlen(contextName);
+#endif
+#ifdef NETSNMP_TRANSPORT_UNIX_DOMAIN
+ } else if (pdu->tDomain == netsnmp_UnixDomain){
+ if (!netsnmp_unix_getSecName(pdu->transport_data,
+ pdu->transport_data_length,
+ (char *) pdu_community,
+ pdu->community_len, &sn,
+ &contextName)) {
+ sn = NULL;
+ }
+ /* force the community -> context name mapping here */
+ SNMP_FREE(pdu->contextName);
+ pdu->contextName = strdup(contextName);
+ pdu->contextNameLen = strlen(contextName);
+#endif
+ } else {
+ /*
+ * Map other <community, transport-address> pairs to security names
+ * here. For now just let non-IPv4 transport always succeed.
+ *
+ * WHAAAATTTT. No, we don't let non-IPv4 transports
+ * succeed! You must fix this to make it usable, sorry.
+ * From a security standpoint this is insane. -- Wes
+ */
+ /** @todo alternate com2sec mappings for non v4 transports.
+ Should be implemented via registration */
+ sn = NULL;
+ }
+
+ } else
+#endif /* support for community based SNMP */
+ if (find_sec_mod(pdu->securityModel)) {
+ /*
+ * any legal defined v3 security model
+ */
+ DEBUGMSG(("mibII/vacm_vars",
+ "vacm_in_view: ver=%d, model=%d, secName=%s\n",
+ pdu->version, pdu->securityModel, pdu->securityName));
+ sn = pdu->securityName;
+ contextName = pdu->contextName;
+ } else {
+ sn = NULL;
+ }
+
+ if (sn == NULL) {
+#if !defined(NETSNMP_DISABLE_SNMPV1) || !defined(NETSNMP_DISABLE_SNMPV2C)
+ snmp_increment_statistic(STAT_SNMPINBADCOMMUNITYNAMES);
+#endif
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "vacm_in_view: No security name found\n"));
+ return VACM_NOSECNAME;
+ }
+
+ if (pdu->contextNameLen > CONTEXTNAMEINDEXLEN) {
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "vacm_in_view: bad ctxt length %d\n",
+ pdu->contextNameLen));
+ return VACM_NOSUCHCONTEXT;
+ }
+ /*
+ * NULL termination of the pdu field is ugly here. Do in PDU parsing?
+ */
+ if (pdu->contextName)
+ strncpy(contextNameIndex, pdu->contextName, pdu->contextNameLen);
+ else
+ contextNameIndex[0] = '\0';
+
+ contextNameIndex[pdu->contextNameLen] = '\0';
+ if (!netsnmp_subtree_find_first(contextNameIndex)) {
+ /*
+ * rfc 3415 section 3.2, step 1
+ * no such context here; return no such context error
+ */
+ DEBUGMSGTL(("mibII/vacm_vars", "vacm_in_view: no such ctxt \"%s\"\n",
+ contextNameIndex));
+ return VACM_NOSUCHCONTEXT;
+ }
+
+ DEBUGMSGTL(("mibII/vacm_vars", "vacm_in_view: sn=%s", sn));
+
+ gp = vacm_getGroupEntry(pdu->securityModel, sn);
+ if (gp == NULL) {
+ DEBUGMSG(("mibII/vacm_vars", "\n"));
+ return VACM_NOGROUP;
+ }
+ DEBUGMSG(("mibII/vacm_vars", ", gn=%s", gp->groupName));
+
+ ap = vacm_getAccessEntry(gp->groupName, contextNameIndex,
+ pdu->securityModel, pdu->securityLevel);
+ if (ap == NULL) {
+ DEBUGMSG(("mibII/vacm_vars", "\n"));
+ return VACM_NOACCESS;
+ }
+
+ if (name == 0) { /* only check the setup of the vacm for the request */
+ DEBUGMSG(("mibII/vacm_vars", ", Done checking setup\n"));
+ return VACM_SUCCESS;
+ }
+
+ if (viewtype < 0 || viewtype >= VACM_MAX_VIEWS) {
+ DEBUGMSG(("mibII/vacm_vars", " illegal view type\n"));
+ return VACM_NOACCESS;
+ }
+ vn = ap->views[viewtype];
+ DEBUGMSG(("mibII/vacm_vars", ", vn=%s", vn));
+
+ if (check_subtree) {
+ DEBUGMSG(("mibII/vacm_vars", "\n"));
+ return vacm_checkSubtree(vn, name, namelen);
+ }
+
+ vp = vacm_getViewEntry(vn, name, namelen, VACM_MODE_FIND);
+
+ if (vp == NULL) {
+ DEBUGMSG(("mibII/vacm_vars", "\n"));
+ return VACM_NOVIEW;
+ }
+ DEBUGMSG(("mibII/vacm_vars", ", vt=%d\n", vp->viewType));
+
+ if (vp->viewType == SNMP_VIEW_EXCLUDED) {
+#if !defined(NETSNMP_DISABLE_SNMPV1) || !defined(NETSNMP_DISABLE_SNMPV2C)
+#if defined(NETSNMP_DISABLE_SNMPV1)
+ if (pdu->version == SNMP_VERSION_2c)
+#else
+#if defined(NETSNMP_DISABLE_SNMPV2C)
+ if (pdu->version == SNMP_VERSION_1)
+#else
+ if (pdu->version == SNMP_VERSION_1 || pdu->version == SNMP_VERSION_2c)
+#endif
+#endif
+ {
+ snmp_increment_statistic(STAT_SNMPINBADCOMMUNITYUSES);
+ }
+#endif
+ return VACM_NOTINVIEW;
+ }
+
+ return VACM_SUCCESS;
+
+} /* end vacm_in_view() */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_conf.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_conf.h
new file mode 100644
index 0000000000..8e1597876c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_conf.h
@@ -0,0 +1,47 @@
+/*
+ * SNMPv3 View-based Access Control Model
+ */
+
+#ifndef _MIBGROUP_VACM_CONF_H
+#define _MIBGROUP_VACM_CONF_H
+
+#include <net-snmp/library/vacm.h>
+
+config_require(util_funcs)
+config_belongs_in(agent_module)
+
+#define VACM_CREATE_SIMPLE_V3 1
+#define VACM_CREATE_SIMPLE_COM 2
+#define VACM_CREATE_SIMPLE_COMIPV4 3
+#define VACM_CREATE_SIMPLE_COMIPV6 4
+#define VACM_CREATE_SIMPLE_COMUNIX 5
+
+ void init_vacm_conf(void);
+ void init_vacm_config_tokens(void);
+ void vacm_free_group(void);
+ void vacm_free_access(void);
+ void vacm_free_view(void);
+ void vacm_parse_group(const char *, char *);
+ void vacm_parse_access(const char *, char *);
+ void vacm_parse_setaccess(const char *, char *);
+ void vacm_parse_view(const char *, char *);
+ void vacm_parse_rocommunity(const char *, char *);
+ void vacm_parse_rwcommunity(const char *, char *);
+ void vacm_parse_rocommunity6(const char *, char *);
+ void vacm_parse_rwcommunity6(const char *, char *);
+ void vacm_parse_rouser(const char *, char *);
+ void vacm_parse_rwuser(const char *, char *);
+ void vacm_create_simple(const char *, char *, int, int);
+ void vacm_parse_authcommunity(const char *, char *);
+ void vacm_parse_authuser(const char *, char *);
+ void vacm_parse_authgroup(const char *, char *);
+ void vacm_parse_authaccess(const char *, char *);
+
+ SNMPCallback vacm_in_view_callback;
+ SNMPCallback vacm_warn_if_not_configured;
+ SNMPCallback vacm_standard_views;
+
+ int vacm_in_view(netsnmp_pdu *, oid *, size_t, int);
+ int vacm_check_view(netsnmp_pdu *, oid *, size_t, int, int);
+
+#endif /* _MIBGROUP_VACM_CONF_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_context.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_context.c
new file mode 100644
index 0000000000..46afc9078b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_context.c
@@ -0,0 +1,167 @@
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/table.h>
+#include <net-snmp/agent/table_iterator.h>
+
+#include "vacm_context.h"
+
+static oid vacm_context_oid[] = { 1, 3, 6, 1, 6, 3, 16, 1, 1 };
+
+#define CONTEXTNAME_COLUMN 1
+
+/*
+ * return the index data from the first node in the agent's
+ * subtree_context_cache list.
+ */
+netsnmp_variable_list *
+get_first_context(void **my_loop_context, void **my_data_context,
+ netsnmp_variable_list * put_data,
+ netsnmp_iterator_info *iinfo)
+{
+ subtree_context_cache *context_ptr;
+ context_ptr = get_top_context_cache();
+
+ if (!context_ptr)
+ return NULL;
+
+ *my_loop_context = context_ptr;
+ *my_data_context = context_ptr;
+
+ snmp_set_var_value(put_data, context_ptr->context_name,
+ strlen(context_ptr->context_name));
+ return put_data;
+}
+
+/*
+ * return the next index data from the first node in the agent's
+ * subtree_context_cache list.
+ */
+netsnmp_variable_list *
+get_next_context(void **my_loop_context,
+ void **my_data_context,
+ netsnmp_variable_list * put_data,
+ netsnmp_iterator_info *iinfo)
+{
+ subtree_context_cache *context_ptr;
+
+ if (!my_loop_context || !*my_loop_context)
+ return NULL;
+
+ context_ptr = (subtree_context_cache *) (*my_loop_context);
+ context_ptr = context_ptr->next;
+ *my_loop_context = context_ptr;
+ *my_data_context = context_ptr;
+
+ if (!context_ptr)
+ return NULL;
+
+ snmp_set_var_value(put_data, context_ptr->context_name,
+ strlen(context_ptr->context_name));
+ return put_data;
+}
+
+void
+init_vacm_context(void)
+{
+ /*
+ * table vacm_context
+ */
+ netsnmp_handler_registration *my_handler;
+ netsnmp_table_registration_info *table_info;
+ netsnmp_iterator_info *iinfo;
+
+ my_handler = netsnmp_create_handler_registration("vacm_context",
+ vacm_context_handler,
+ vacm_context_oid,
+ sizeof
+ (vacm_context_oid) /
+ sizeof(oid),
+ HANDLER_CAN_RONLY);
+
+ if (!my_handler)
+ return;
+
+ table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+ iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+
+ if (!table_info || !iinfo) {
+ SNMP_FREE(table_info);
+ SNMP_FREE(iinfo);
+ return;
+ }
+
+ netsnmp_table_helper_add_index(table_info, ASN_OCTET_STR)
+ table_info->min_column = 1;
+ table_info->max_column = 1;
+ iinfo->get_first_data_point = get_first_context;
+ iinfo->get_next_data_point = get_next_context;
+ iinfo->table_reginfo = table_info;
+ netsnmp_register_table_iterator(my_handler, iinfo);
+}
+
+/*
+ * returns a list of known context names
+ */
+
+int
+vacm_context_handler(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ subtree_context_cache *context_ptr;
+
+ for(; requests; requests = requests->next) {
+ netsnmp_variable_list *var = requests->requestvb;
+
+ if (requests->processed != 0)
+ continue;
+
+
+ context_ptr = (subtree_context_cache *)
+ netsnmp_extract_iterator_context(requests);
+
+ if (context_ptr == NULL) {
+ snmp_log(LOG_ERR,
+ "vacm_context_handler called without data\n");
+ continue;
+ }
+
+ switch (reqinfo->mode) {
+ case MODE_GET:
+ /*
+ * if here we should have a context_ptr passed in already
+ */
+ /*
+ * only one column should ever reach us, so don't check it
+ */
+ snmp_set_var_typed_value(var, ASN_OCTET_STR,
+ context_ptr->context_name,
+ strlen(context_ptr->context_name));
+
+ break;
+
+ default:
+ /*
+ * We should never get here, getnext already have been
+ * handled by the table_iterator and we're read_only
+ */
+ snmp_log(LOG_ERR,
+ "vacm_context table accessed as mode=%d. We're improperly registered!",
+ reqinfo->mode);
+ break;
+
+
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_context.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_context.h
new file mode 100644
index 0000000000..924d0655c6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_context.h
@@ -0,0 +1,6 @@
+/*
+ * testhandler.h
+ */
+
+void init_vacm_context(void);
+Netsnmp_Node_Handler vacm_context_handler;
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_vars.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_vars.c
new file mode 100644
index 0000000000..ed142a70a9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_vars.c
@@ -0,0 +1,1918 @@
+/*
+ * SNMPv3 View-based Access Control Model
+ */
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+#if HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+#include <ctype.h>
+#include <sys/types.h>
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#if HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include <net-snmp/agent/agent_callbacks.h>
+#include "vacm_vars.h"
+#include "util_funcs.h"
+
+#ifdef USING_MIBII_SYSORTABLE_MODULE
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+#include "sysORTable.h"
+#endif
+static unsigned int vacmViewSpinLock = 0;
+
+void
+init_vacm_vars(void)
+{
+
+#ifdef USING_MIBII_SYSORTABLE_MODULE
+ static oid reg[] = { SNMP_OID_SNMPMODULES, 16, 2, 2, 1 };
+#endif
+
+#define PRIVRW (NETSNMP_SNMPV2ANY | 0x5000)
+
+ struct variable1 vacm_sec2group[] = {
+ {SECURITYGROUP, ASN_OCTET_STR, RWRITE, var_vacm_sec2group, 1, {3}},
+ {SECURITYSTORAGE, ASN_INTEGER, RWRITE, var_vacm_sec2group, 1, {4}},
+ {SECURITYSTATUS, ASN_INTEGER, RWRITE, var_vacm_sec2group, 1, {5}},
+ };
+
+ struct variable1 vacm_access[] = {
+ {ACCESSMATCH, ASN_INTEGER, RWRITE, var_vacm_access, 1, {4}},
+ {ACCESSREAD, ASN_OCTET_STR, RWRITE, var_vacm_access, 1, {5}},
+ {ACCESSWRITE, ASN_OCTET_STR, RWRITE, var_vacm_access, 1, {6}},
+ {ACCESSNOTIFY, ASN_OCTET_STR, RWRITE, var_vacm_access, 1, {7}},
+ {ACCESSSTORAGE, ASN_INTEGER, RWRITE, var_vacm_access, 1, {8}},
+ {ACCESSSTATUS, ASN_INTEGER, RWRITE, var_vacm_access, 1, {9}},
+ };
+
+ struct variable3 vacm_view[] = {
+ {VACMVIEWSPINLOCK, ASN_INTEGER, RWRITE, var_vacm_view, 1, {1}},
+ {VIEWMASK, ASN_OCTET_STR, RWRITE, var_vacm_view, 3, {2, 1, 3}},
+ {VIEWTYPE, ASN_INTEGER, RWRITE, var_vacm_view, 3, {2, 1, 4}},
+ {VIEWSTORAGE, ASN_INTEGER, RWRITE, var_vacm_view, 3, {2, 1, 5}},
+ {VIEWSTATUS, ASN_INTEGER, RWRITE, var_vacm_view, 3, {2, 1, 6}},
+ };
+
+ /*
+ * Define the OID pointer to the top of the mib tree that we're
+ * registering underneath
+ */
+ oid vacm_sec2group_oid[] = { OID_VACMGROUPENTRY };
+ oid vacm_access_oid[] = { OID_VACMACCESSENTRY };
+ oid vacm_view_oid[] = { OID_VACMMIBVIEWS };
+
+ /*
+ * we need to be called back later
+ */
+ snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
+ store_vacm, NULL);
+
+ /*
+ * register ourselves with the agent to handle our mib tree
+ */
+ REGISTER_MIB("mibII/vacm:sec2group", vacm_sec2group, variable1,
+ vacm_sec2group_oid);
+ REGISTER_MIB("mibII/vacm:access", vacm_access, variable1,
+ vacm_access_oid);
+ REGISTER_MIB("mibII/vacm:view", vacm_view, variable3, vacm_view_oid);
+
+#ifdef USING_MIBII_SYSORTABLE_MODULE
+ register_sysORTable(reg, 10,
+ "View-based Access Control Model for SNMP.");
+#endif
+
+}
+
+
+
+u_char *
+var_vacm_sec2group(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact,
+ size_t * var_len, WriteMethod ** write_method)
+{
+ struct vacm_groupEntry *gp;
+ oid *groupSubtree;
+ int groupSubtreeLen;
+ int secmodel;
+ char secname[VACMSTRINGLEN], *cp;
+
+ /*
+ * Set up write_method first, in case we return NULL before getting to
+ * the switch (vp->magic) below. In some of these cases, we still want
+ * to call the appropriate write_method, if only to have it return the
+ * appropriate error.
+ */
+
+ switch (vp->magic) {
+ case SECURITYGROUP:
+ *write_method = write_vacmGroupName;
+ break;
+ case SECURITYSTORAGE:
+ *write_method = write_vacmSecurityToGroupStorageType;
+ break;
+ case SECURITYSTATUS:
+ *write_method = write_vacmSecurityToGroupStatus;
+ break;
+ default:
+ *write_method = NULL;
+ }
+
+ if (memcmp(name, vp->name, sizeof(oid) * vp->namelen) != 0) {
+ memcpy(name, vp->name, sizeof(oid) * vp->namelen);
+ *length = vp->namelen;
+ }
+ if (exact) {
+ if (*length < 13)
+ return NULL;
+
+ secmodel = name[11];
+ groupSubtree = name + 13;
+ groupSubtreeLen = *length - 13;
+ if ( name[12] != groupSubtreeLen )
+ return 0; /* Either extra subids, or an incomplete string */
+ cp = secname;
+ while (groupSubtreeLen-- > 0) {
+ if (*groupSubtree > 255)
+ return 0; /* illegal value */
+ if (cp - secname > VACM_MAX_STRING)
+ return 0;
+ *cp++ = (char) *groupSubtree++;
+ }
+ *cp = 0;
+
+ gp = vacm_getGroupEntry(secmodel, secname);
+ } else {
+ secmodel = *length > 11 ? name[11] : 0;
+ groupSubtree = name + 12;
+ groupSubtreeLen = *length - 12;
+ cp = secname;
+ while (groupSubtreeLen-- > 0) {
+ if (*groupSubtree > 255)
+ return 0; /* illegal value */
+ if (cp - secname > VACM_MAX_STRING)
+ return 0;
+ *cp++ = (char) *groupSubtree++;
+ }
+ *cp = 0;
+ vacm_scanGroupInit();
+ while ((gp = vacm_scanGroupNext()) != NULL) {
+ if (gp->securityModel > secmodel ||
+ (gp->securityModel == secmodel
+ && strcmp(gp->securityName, secname) > 0))
+ break;
+ }
+ if (gp) {
+ name[11] = gp->securityModel;
+ *length = 12;
+ cp = gp->securityName;
+ while (*cp) {
+ name[(*length)++] = *cp++;
+ }
+ }
+ }
+
+ if (gp == NULL) {
+ return NULL;
+ }
+
+ *var_len = sizeof(long_return);
+ switch (vp->magic) {
+ case SECURITYMODEL:
+ long_return = gp->securityModel;
+ return (u_char *) & long_return;
+
+ case SECURITYNAME:
+ *var_len = gp->securityName[0];
+ return (u_char *) & gp->securityName[1];
+
+ case SECURITYGROUP:
+ *var_len = strlen(gp->groupName);
+ return (u_char *) gp->groupName;
+
+ case SECURITYSTORAGE:
+ long_return = gp->storageType;
+ return (u_char *) & long_return;
+
+ case SECURITYSTATUS:
+ long_return = gp->status;
+ return (u_char *) & long_return;
+
+ default:
+ break;
+ }
+ return NULL;
+}
+
+u_char *
+var_vacm_access(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ struct vacm_accessEntry *gp;
+ int secmodel, seclevel;
+ char groupName[VACMSTRINGLEN] = { 0 };
+ char contextPrefix[VACMSTRINGLEN] = { 0 };
+ oid *op;
+ unsigned long len, i = 0;
+ char *cp;
+ int cmp;
+
+ /*
+ * Set up write_method first, in case we return NULL before getting to
+ * the switch (vp->magic) below. In some of these cases, we still want
+ * to call the appropriate write_method, if only to have it return the
+ * appropriate error.
+ */
+
+ switch (vp->magic) {
+ case ACCESSMATCH:
+ *write_method = write_vacmAccessContextMatch;
+ break;
+ case ACCESSREAD:
+ *write_method = write_vacmAccessReadViewName;
+ break;
+ case ACCESSWRITE:
+ *write_method = write_vacmAccessWriteViewName;
+ break;
+ case ACCESSNOTIFY:
+ *write_method = write_vacmAccessNotifyViewName;
+ break;
+ case ACCESSSTORAGE:
+ *write_method = write_vacmAccessStorageType;
+ break;
+ case ACCESSSTATUS:
+ *write_method = write_vacmAccessStatus;
+ break;
+ default:
+ *write_method = NULL;
+ }
+
+ if (memcmp(name, vp->name, sizeof(oid) * vp->namelen) != 0) {
+ memcpy(name, vp->name, sizeof(oid) * vp->namelen);
+ *length = vp->namelen;
+ }
+
+ if (exact) {
+ if (*length < 15)
+ return NULL;
+
+ /*
+ * Extract the group name index from the requested OID ....
+ */
+ op = name + 11;
+ len = *op++;
+ if (len > VACM_MAX_STRING)
+ return 0;
+ cp = groupName;
+ while (len-- > 0) {
+ if (*op > 255)
+ return 0; /* illegal value */
+ *cp++ = (char) *op++;
+ }
+ *cp = 0;
+
+ /*
+ * ... followed by the context index ...
+ */
+ len = *op++;
+ if (len > VACM_MAX_STRING)
+ return 0;
+ cp = contextPrefix;
+ while (len-- > 0) {
+ if (*op > 255)
+ return 0; /* illegal value */
+ *cp++ = (char) *op++;
+ }
+ *cp = 0;
+
+ /*
+ * ... and the secModel and secLevel index values.
+ */
+ secmodel = *op++;
+ seclevel = *op++;
+ if (op != name + *length) {
+ return NULL;
+ }
+
+ gp = vacm_getAccessEntry(groupName, contextPrefix, secmodel,
+ seclevel);
+ if ( gp && gp->securityLevel != seclevel )
+ return NULL; /* This isn't strictly what was asked for */
+
+ } else {
+ secmodel = seclevel = 0;
+ groupName[0] = 0;
+ contextPrefix[0] = 0;
+ op = name + 11;
+ if (op >= name + *length) {
+ } else {
+ len = *op;
+ if (len > VACM_MAX_STRING)
+ return 0;
+ cp = groupName;
+ for (i = 0; i <= len; i++) {
+ if (*op > 255) {
+ return 0; /* illegal value */
+ }
+ *cp++ = (char) *op++;
+ }
+ *cp = 0;
+ }
+ if (op >= name + *length) {
+ } else {
+ len = *op;
+ if (len > VACM_MAX_STRING)
+ return 0;
+ cp = contextPrefix;
+ for (i = 0; i <= len; i++) {
+ if (*op > 255) {
+ return 0; /* illegal value */
+ }
+ *cp++ = (char) *op++;
+ }
+ *cp = 0;
+ }
+ if (op >= name + *length) {
+ } else {
+ secmodel = *op++;
+ }
+ if (op >= name + *length) {
+ } else {
+ seclevel = *op++;
+ }
+ vacm_scanAccessInit();
+ while ((gp = vacm_scanAccessNext()) != NULL) {
+ cmp = strcmp(gp->groupName, groupName);
+ if (cmp > 0)
+ break;
+ if (cmp < 0)
+ continue;
+ cmp = strcmp(gp->contextPrefix, contextPrefix);
+ if (cmp > 0)
+ break;
+ if (cmp < 0)
+ continue;
+ if (gp->securityModel > secmodel)
+ break;
+ if (gp->securityModel < secmodel)
+ continue;
+ if (gp->securityLevel > seclevel)
+ break;
+ }
+ if (gp) {
+ *length = 11;
+ cp = gp->groupName;
+ do {
+ name[(*length)++] = *cp++;
+ } while (*cp);
+ cp = gp->contextPrefix;
+ do {
+ name[(*length)++] = *cp++;
+ } while (*cp);
+ name[(*length)++] = gp->securityModel;
+ name[(*length)++] = gp->securityLevel;
+ }
+ }
+
+ if (!gp) {
+ return NULL;
+ }
+
+ *var_len = sizeof(long_return);
+ switch (vp->magic) {
+ case ACCESSMATCH:
+ long_return = gp->contextMatch;
+ return (u_char *) & long_return;
+
+ case ACCESSLEVEL:
+ long_return = gp->securityLevel;
+ return (u_char *) & long_return;
+
+ case ACCESSMODEL:
+ long_return = gp->securityModel;
+ return (u_char *) & long_return;
+
+ case ACCESSPREFIX:
+ *var_len = *gp->contextPrefix;
+ return (u_char *) & gp->contextPrefix[1];
+
+ case ACCESSREAD:
+ *var_len = strlen(gp->views[VACM_VIEW_READ]);
+ return (u_char *) gp->views[VACM_VIEW_READ];
+
+ case ACCESSWRITE:
+ *var_len = strlen(gp->views[VACM_VIEW_WRITE]);
+ return (u_char *) gp->views[VACM_VIEW_WRITE];
+
+ case ACCESSNOTIFY:
+ *var_len = strlen(gp->views[VACM_VIEW_NOTIFY]);
+ return (u_char *) gp->views[VACM_VIEW_NOTIFY];
+
+ case ACCESSSTORAGE:
+ long_return = gp->storageType;
+ return (u_char *) & long_return;
+
+ case ACCESSSTATUS:
+ long_return = gp->status;
+ return (u_char *) & long_return;
+ }
+ return NULL;
+}
+
+u_char *
+var_vacm_view(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ struct vacm_viewEntry *gp = NULL;
+ char viewName[VACMSTRINGLEN] = { 0 };
+ oid subtree[MAX_OID_LEN] = { 0 };
+ size_t subtreeLen = 0;
+ oid *op, *op1;
+ unsigned long len = 0, i = 0;
+ char *cp;
+ int cmp, cmp2;
+
+ /*
+ * Set up write_method first, in case we return NULL before getting to
+ * the switch (vp->magic) below. In some of these cases, we still want
+ * to call the appropriate write_method, if only to have it return the
+ * appropriate error.
+ */
+
+ switch (vp->magic) {
+ case VIEWMASK:
+ *write_method = write_vacmViewMask;
+ break;
+ case VIEWTYPE:
+ *write_method = write_vacmViewType;
+ break;
+ case VIEWSTORAGE:
+ *write_method = write_vacmViewStorageType;
+ break;
+ case VIEWSTATUS:
+ *write_method = write_vacmViewStatus;
+ break;
+ default:
+ *write_method = NULL;
+ }
+
+ *var_len = sizeof(long_return);
+ if (vp->magic != VACMVIEWSPINLOCK) {
+ if (memcmp(name, vp->name, sizeof(oid) * vp->namelen) != 0) {
+ memcpy(name, vp->name, sizeof(oid) * vp->namelen);
+ *length = vp->namelen;
+ }
+
+ if (exact) {
+ if (*length < 15)
+ return NULL;
+
+ /*
+ * Extract the view name index from the requested OID ....
+ */
+ op = name + 12;
+ len = *op++;
+ if (len > VACM_MAX_STRING)
+ return 0;
+ cp = viewName;
+ while (len-- > 0) {
+ if (*op > 255)
+ return 0;
+ *cp++ = (char) *op++;
+ }
+ *cp = 0;
+
+ /*
+ * ... followed by the view OID index.
+ */
+ subtree[0] = len = *op++;
+ subtreeLen = 1;
+ if (len > MAX_OID_LEN)
+ return 0;
+ if ( (op+len) != (name + *length) )
+ return NULL; /* Declared length doesn't match what we actually got */
+ op1 = &(subtree[1]);
+ while (len-- > 0) {
+ *op1++ = *op++;
+ subtreeLen++;
+ }
+
+ gp = vacm_getViewEntry(viewName, &subtree[1], subtreeLen-1,
+ VACM_MODE_IGNORE_MASK);
+ if (gp != NULL) {
+ if (gp->viewSubtreeLen != subtreeLen) {
+ gp = NULL;
+ }
+ }
+ } else {
+ viewName[0] = 0;
+ op = name + 12;
+ if (op >= name + *length) {
+ } else {
+ len = *op;
+ if (len > VACM_MAX_STRING)
+ return 0;
+ cp = viewName;
+ for (i = 0; i <= len && op < name + *length; i++) {
+ if (*op > 255) {
+ return 0;
+ }
+ *cp++ = (char) *op++;
+ }
+ *cp = 0;
+ }
+ if (op >= name + *length) {
+ } else {
+ len = *op++;
+ op1 = subtree;
+ *op1++ = len;
+ subtreeLen++;
+ for (i = 0; i <= len && op < name + *length; i++) {
+ *op1++ = *op++;
+ subtreeLen++;
+ }
+ }
+ vacm_scanViewInit();
+ while ((gp = vacm_scanViewNext()) != NULL) {
+ cmp = strcmp(gp->viewName, viewName);
+ cmp2 =
+ snmp_oid_compare(gp->viewSubtree, gp->viewSubtreeLen,
+ subtree, subtreeLen);
+ if (cmp == 0 && cmp2 > 0)
+ break;
+ if (cmp > 0)
+ break;
+ }
+ if (gp) {
+ *length = 12;
+ cp = gp->viewName;
+ do {
+ name[(*length)++] = *cp++;
+ } while (*cp);
+ op1 = gp->viewSubtree;
+ len = gp->viewSubtreeLen;
+ while (len-- > 0) {
+ name[(*length)++] = *op1++;
+ }
+ }
+ }
+
+ if (gp == NULL) {
+ return NULL;
+ }
+ } else {
+ if (header_generic(vp, name, length, exact, var_len, write_method)) {
+ return NULL;
+ }
+ } /*endif -- vp->magic != VACMVIEWSPINLOCK */
+
+ switch (vp->magic) {
+ case VACMVIEWSPINLOCK:
+ *write_method = write_vacmViewSpinLock;
+ long_return = vacmViewSpinLock;
+ return (u_char *) & long_return;
+
+ case VIEWNAME:
+ *var_len = gp->viewName[0];
+ return (u_char *) & gp->viewName[1];
+
+ case VIEWSUBTREE:
+ *var_len = gp->viewSubtreeLen * sizeof(oid);
+ return (u_char *) gp->viewSubtree;
+
+ case VIEWMASK:
+ *var_len = gp->viewMaskLen;
+ return (u_char *) gp->viewMask;
+
+ case VIEWTYPE:
+ long_return = gp->viewType;
+ return (u_char *) & long_return;
+
+ case VIEWSTORAGE:
+ long_return = gp->viewStorageType;
+ return (u_char *) & long_return;
+
+ case VIEWSTATUS:
+ long_return = gp->viewStatus;
+ return (u_char *) & long_return;
+ }
+ return NULL;
+}
+
+oid *
+sec2group_generate_OID(oid * prefix, size_t prefixLen,
+ struct vacm_groupEntry * geptr, size_t * length)
+{
+ oid *indexOid;
+ int i, securityNameLen;
+
+ securityNameLen = strlen(geptr->securityName);
+
+ *length = 2 + securityNameLen + prefixLen;
+ indexOid = (oid *) malloc(*length * sizeof(oid));
+ if (indexOid) {
+ memmove(indexOid, prefix, prefixLen * sizeof(oid));
+
+ indexOid[prefixLen] = geptr->securityModel;
+
+ indexOid[prefixLen + 1] = securityNameLen;
+ for (i = 0; i < securityNameLen; i++)
+ indexOid[prefixLen + 2 + i] = (oid) geptr->securityName[i];
+
+ }
+ return indexOid;
+
+}
+
+int
+sec2group_parse_oid(oid * oidIndex, size_t oidLen,
+ int *model, unsigned char **name, size_t * nameLen)
+{
+ int nameL;
+ int i;
+
+ /*
+ * first check the validity of the oid
+ */
+ if ((oidLen <= 0) || (!oidIndex)) {
+ return 1;
+ }
+ nameL = oidIndex[1]; /* the initial name length */
+ if ((int) oidLen != nameL + 2) {
+ return 1;
+ }
+
+ /*
+ * its valid, malloc the space and store the results
+ */
+ if (name == NULL) {
+ return 1;
+ }
+
+ *name = (unsigned char *) malloc(nameL + 1);
+ if (*name == NULL) {
+ return 1;
+ }
+
+ *model = oidIndex[0];
+ *nameLen = nameL;
+
+
+ for (i = 0; i < nameL; i++) {
+ if (oidIndex[i + 2] > 255) {
+ free(*name);
+ return 1;
+ }
+ name[0][i] = (unsigned char) oidIndex[i + 2];
+ }
+ name[0][nameL] = 0;
+
+ return 0;
+
+}
+
+struct vacm_groupEntry *
+sec2group_parse_groupEntry(oid * name, size_t name_len)
+{
+ struct vacm_groupEntry *geptr;
+
+ char *newName;
+ int model;
+ size_t nameLen;
+
+ /*
+ * get the name and engineID out of the incoming oid
+ */
+ if (sec2group_parse_oid
+ (&name[SEC2GROUP_MIB_LENGTH], name_len - SEC2GROUP_MIB_LENGTH,
+ &model, (u_char **) & newName, &nameLen))
+ return NULL;
+
+ /*
+ * Now see if a user exists with these index values
+ */
+ geptr = vacm_getGroupEntry(model, newName);
+ free(newName);
+
+ return geptr;
+
+} /* end vacm_parse_groupEntry() */
+
+int
+write_vacmGroupName(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static unsigned char string[VACMSTRINGLEN];
+ struct vacm_groupEntry *geptr;
+ static int resetOnFail;
+
+ if (action == RESERVE1) {
+ resetOnFail = 0;
+ if (var_val_type != ASN_OCTET_STR) {
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len < 1 || var_val_len > 32) {
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ } else if (action == RESERVE2) {
+ if ((geptr = sec2group_parse_groupEntry(name, name_len)) == NULL) {
+ return SNMP_ERR_INCONSISTENTNAME;
+ } else {
+ resetOnFail = 1;
+ memcpy(string, geptr->groupName, VACMSTRINGLEN);
+ memcpy(geptr->groupName, var_val, var_val_len);
+ geptr->groupName[var_val_len] = 0;
+ if (geptr->status == RS_NOTREADY) {
+ geptr->status = RS_NOTINSERVICE;
+ }
+ }
+ } else if (action == FREE) {
+ /*
+ * Try to undo the SET here (abnormal usage of FREE clause)
+ */
+ if ((geptr = sec2group_parse_groupEntry(name, name_len)) != NULL &&
+ resetOnFail) {
+ memcpy(geptr->groupName, string, VACMSTRINGLEN);
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_vacmSecurityToGroupStorageType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ /*
+ * variables we may use later
+ */
+ static long long_ret;
+ struct vacm_groupEntry *geptr;
+
+ if (var_val_type != ASN_INTEGER) {
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > sizeof(long_ret)) {
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ if (action == COMMIT) {
+ /*
+ * don't allow creations here
+ */
+ if ((geptr = sec2group_parse_groupEntry(name, name_len)) == NULL) {
+ return SNMP_ERR_NOSUCHNAME;
+ }
+ long_ret = *((long *) var_val);
+ if ((long_ret == ST_VOLATILE || long_ret == ST_NONVOLATILE) &&
+ (geptr->storageType == ST_VOLATILE ||
+ geptr->storageType == ST_NONVOLATILE)) {
+ geptr->storageType = long_ret;
+ } else if (long_ret == geptr->storageType) {
+ return SNMP_ERR_NOERROR;
+ } else {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+write_vacmSecurityToGroupStatus(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP,
+ oid * name, size_t name_len)
+{
+ static long long_ret;
+ int model;
+ char *newName;
+ size_t nameLen;
+ struct vacm_groupEntry *geptr;
+
+ if (action == RESERVE1) {
+ if (var_val_type != ASN_INTEGER) {
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len != sizeof(long_ret)) {
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ long_ret = *((long *) var_val);
+ if (long_ret == RS_NOTREADY || long_ret < 1 || long_ret > 6) {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ /*
+ * See if we can parse the oid for model/name first.
+ */
+
+ if (sec2group_parse_oid(&name[SEC2GROUP_MIB_LENGTH],
+ name_len - SEC2GROUP_MIB_LENGTH,
+ &model, (u_char **) & newName, &nameLen)) {
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+
+ if (model < 1 || nameLen < 1 || nameLen > 32) {
+ free(newName);
+ return SNMP_ERR_NOCREATION;
+ }
+
+ /*
+ * Now see if a group already exists with these index values.
+ */
+ geptr = vacm_getGroupEntry(model, newName);
+
+ if (geptr != NULL) {
+ if (long_ret == RS_CREATEANDGO || long_ret == RS_CREATEANDWAIT) {
+ free(newName);
+ long_ret = RS_NOTREADY;
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ if (long_ret == RS_DESTROY && geptr->storageType == ST_PERMANENT) {
+ free(newName);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ } else {
+ if (long_ret == RS_ACTIVE || long_ret == RS_NOTINSERVICE) {
+ free(newName);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ if (long_ret == RS_CREATEANDGO || long_ret == RS_CREATEANDWAIT) {
+
+ /*
+ * Generate a new group entry.
+ */
+ if ((geptr =
+ vacm_createGroupEntry(model, newName)) == NULL) {
+ free(newName);
+ return SNMP_ERR_GENERR;
+ }
+
+ /*
+ * Set defaults.
+ */
+ geptr->storageType = ST_NONVOLATILE;
+ geptr->status = RS_NOTREADY;
+ }
+ }
+ free(newName);
+ } else if (action == ACTION) {
+ sec2group_parse_oid(&name[SEC2GROUP_MIB_LENGTH],
+ name_len - SEC2GROUP_MIB_LENGTH,
+ &model, (u_char **) & newName, &nameLen);
+
+ geptr = vacm_getGroupEntry(model, newName);
+
+ if (geptr != NULL) {
+ if (long_ret == RS_CREATEANDGO || long_ret == RS_ACTIVE) {
+ /*
+ * Check that all the mandatory objects have been set by now,
+ * otherwise return inconsistentValue.
+ */
+ if (geptr->groupName[0] == 0) {
+ free(newName);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ geptr->status = RS_ACTIVE;
+ } else if (long_ret == RS_CREATEANDWAIT) {
+ if (geptr->groupName[0] != 0) {
+ geptr->status = RS_NOTINSERVICE;
+ }
+ } else if (long_ret == RS_NOTINSERVICE) {
+ if (geptr->status == RS_ACTIVE) {
+ geptr->status = RS_NOTINSERVICE;
+ } else if (geptr->status == RS_NOTREADY) {
+ free(newName);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ }
+ }
+ free(newName);
+ } else if (action == COMMIT) {
+ sec2group_parse_oid(&name[SEC2GROUP_MIB_LENGTH],
+ name_len - SEC2GROUP_MIB_LENGTH,
+ &model, (u_char **) & newName, &nameLen);
+
+ geptr = vacm_getGroupEntry(model, newName);
+
+ if (geptr != NULL) {
+ if (long_ret == RS_DESTROY) {
+ vacm_destroyGroupEntry(model, newName);
+ }
+ }
+ free(newName);
+ } else if (action == UNDO) {
+ if (long_ret == RS_CREATEANDGO || long_ret == RS_CREATEANDWAIT) {
+ sec2group_parse_oid(&name[SEC2GROUP_MIB_LENGTH],
+ name_len - SEC2GROUP_MIB_LENGTH,
+ &model, (u_char **) & newName, &nameLen);
+
+ geptr = vacm_getGroupEntry(model, newName);
+
+ if (geptr != NULL) {
+ vacm_destroyGroupEntry(model, newName);
+ }
+ free(newName);
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+oid *
+access_generate_OID(oid * prefix, size_t prefixLen,
+ struct vacm_accessEntry * aptr, size_t * length)
+{
+ oid *indexOid;
+ int i, groupNameLen, contextPrefixLen;
+
+ groupNameLen = strlen(aptr->groupName);
+ contextPrefixLen = strlen(aptr->contextPrefix);
+
+ *length = 4 + groupNameLen + contextPrefixLen + prefixLen;
+ indexOid = (oid *) malloc(*length * sizeof(oid));
+ if (indexOid) {
+ memmove(indexOid, prefix, prefixLen * sizeof(oid));
+
+ indexOid[prefixLen] = groupNameLen;
+ for (i = 0; i < groupNameLen; i++)
+ indexOid[groupNameLen + 1 + i] = (oid) aptr->groupName[i];
+
+ indexOid[prefixLen + groupNameLen + 1] = contextPrefixLen;
+ for (i = 0; i < contextPrefixLen; i++)
+ indexOid[prefixLen + groupNameLen + 2 + i] =
+ (oid) aptr->contextPrefix[i];
+
+ indexOid[prefixLen + groupNameLen + contextPrefixLen + 3] =
+ aptr->securityModel;
+ indexOid[prefixLen + groupNameLen + contextPrefixLen + 4] =
+ aptr->securityLevel;
+
+ }
+ return indexOid;
+
+}
+
+int
+access_parse_oid(oid * oidIndex, size_t oidLen,
+ unsigned char **groupName, size_t * groupNameLen,
+ unsigned char **contextPrefix, size_t * contextPrefixLen,
+ int *model, int *level)
+{
+ int groupNameL, contextPrefixL;
+ int i;
+
+ /*
+ * first check the validity of the oid
+ */
+ if ((oidLen <= 0) || (!oidIndex)) {
+ return 1;
+ }
+ groupNameL = oidIndex[0];
+ contextPrefixL = oidIndex[groupNameL + 1]; /* the initial name length */
+ if ((int) oidLen != groupNameL + contextPrefixL + 4) {
+ return 1;
+ }
+
+ /*
+ * its valid, malloc the space and store the results
+ */
+ if (contextPrefix == NULL || groupName == NULL) {
+ return 1;
+ }
+
+ *groupName = (unsigned char *) malloc(groupNameL + 1);
+ if (*groupName == NULL) {
+ return 1;
+ }
+
+ *contextPrefix = (unsigned char *) malloc(contextPrefixL + 1);
+ if (*contextPrefix == NULL) {
+ free(*groupName);
+ return 1;
+ }
+
+ *contextPrefixLen = contextPrefixL;
+ *groupNameLen = groupNameL;
+
+ for (i = 0; i < groupNameL; i++) {
+ if (oidIndex[i + 1] > 255) {
+ free(*groupName);
+ free(*contextPrefix);
+ return 1;
+ }
+ groupName[0][i] = (unsigned char) oidIndex[i + 1];
+ }
+ groupName[0][groupNameL] = 0;
+
+
+ for (i = 0; i < contextPrefixL; i++) {
+ if (oidIndex[i + groupNameL + 2] > 255) {
+ free(*groupName);
+ free(*contextPrefix);
+ return 1;
+ }
+ contextPrefix[0][i] = (unsigned char) oidIndex[i + groupNameL + 2];
+ }
+ contextPrefix[0][contextPrefixL] = 0;
+
+ *model = oidIndex[groupNameL + contextPrefixL + 2];
+ *level = oidIndex[groupNameL + contextPrefixL + 3];
+
+ return 0;
+
+}
+
+struct vacm_accessEntry *
+access_parse_accessEntry(oid * name, size_t name_len)
+{
+ struct vacm_accessEntry *aptr;
+
+ char *newGroupName = NULL;
+ char *newContextPrefix = NULL;
+ int model, level;
+ size_t groupNameLen, contextPrefixLen;
+
+ /*
+ * get the name and engineID out of the incoming oid
+ */
+ if (access_parse_oid
+ (&name[ACCESS_MIB_LENGTH], name_len - ACCESS_MIB_LENGTH,
+ (u_char **) & newGroupName, &groupNameLen,
+ (u_char **) & newContextPrefix, &contextPrefixLen, &model,
+ &level))
+ return NULL;
+
+ /*
+ * Now see if a user exists with these index values
+ */
+ aptr =
+ vacm_getAccessEntry(newGroupName, newContextPrefix, model, level);
+ SNMP_FREE(newContextPrefix);
+ SNMP_FREE(newGroupName);
+
+ return aptr;
+
+} /* end vacm_parse_accessEntry() */
+
+int
+write_vacmAccessStatus(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static long long_ret;
+ int model, level;
+ char *newGroupName, *newContextPrefix;
+ size_t groupNameLen, contextPrefixLen;
+ struct vacm_accessEntry *aptr = NULL;
+
+ if (action == RESERVE1) {
+ if (var_val_type != ASN_INTEGER) {
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len != sizeof(long_ret)) {
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ long_ret = *((long *) var_val);
+ if (long_ret == RS_NOTREADY || long_ret < 1 || long_ret > 6) {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ /*
+ * See if we can parse the oid for model/name first.
+ */
+ if (access_parse_oid(&name[ACCESS_MIB_LENGTH],
+ name_len - ACCESS_MIB_LENGTH,
+ (u_char **) & newGroupName, &groupNameLen,
+ (u_char **) & newContextPrefix,
+ &contextPrefixLen, &model, &level)) {
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+
+ if (model < 0 || groupNameLen < 1 || groupNameLen > 32 ||
+ contextPrefixLen > 32) {
+ free(newGroupName);
+ free(newContextPrefix);
+ return SNMP_ERR_NOCREATION;
+ }
+
+ /*
+ * Now see if a group already exists with these index values.
+ */
+ aptr =
+ vacm_getAccessEntry(newGroupName, newContextPrefix, model,
+ level);
+
+ if (aptr != NULL) {
+ if (long_ret == RS_CREATEANDGO || long_ret == RS_CREATEANDWAIT) {
+ free(newGroupName);
+ free(newContextPrefix);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ if (long_ret == RS_DESTROY && aptr->storageType == ST_PERMANENT) {
+ free(newGroupName);
+ free(newContextPrefix);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ } else {
+ if (long_ret == RS_ACTIVE || long_ret == RS_NOTINSERVICE) {
+ free(newGroupName);
+ free(newContextPrefix);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ if (long_ret == RS_CREATEANDGO || long_ret == RS_CREATEANDWAIT) {
+ if ((aptr = vacm_createAccessEntry(newGroupName,
+ newContextPrefix,
+ model,
+ level)) == NULL) {
+ free(newGroupName);
+ free(newContextPrefix);
+ return SNMP_ERR_GENERR;
+ }
+
+ /*
+ * Set defaults.
+ */
+ aptr->contextMatch = 1; /* exact(1) is the DEFVAL */
+ aptr->storageType = ST_NONVOLATILE;
+ aptr->status = RS_NOTREADY;
+ }
+ }
+ free(newGroupName);
+ free(newContextPrefix);
+ } else if (action == ACTION) {
+ access_parse_oid(&name[ACCESS_MIB_LENGTH],
+ name_len - ACCESS_MIB_LENGTH,
+ (u_char **) & newGroupName, &groupNameLen,
+ (u_char **) & newContextPrefix, &contextPrefixLen,
+ &model, &level);
+ aptr =
+ vacm_getAccessEntry(newGroupName, newContextPrefix, model,
+ level);
+
+ if (aptr != NULL) {
+ if (long_ret == RS_CREATEANDGO || long_ret == RS_ACTIVE) {
+ aptr->status = RS_ACTIVE;
+ } else if (long_ret == RS_CREATEANDWAIT) {
+ aptr->status = RS_NOTINSERVICE;
+ } else if (long_ret == RS_NOTINSERVICE) {
+ if (aptr->status == RS_ACTIVE) {
+ aptr->status = RS_NOTINSERVICE;
+ } else if (aptr->status == RS_NOTREADY) {
+ free(newGroupName);
+ free(newContextPrefix);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ }
+ }
+ free(newGroupName);
+ free(newContextPrefix);
+ } else if (action == COMMIT) {
+ access_parse_oid(&name[ACCESS_MIB_LENGTH],
+ name_len - ACCESS_MIB_LENGTH,
+ (u_char **) & newGroupName, &groupNameLen,
+ (u_char **) & newContextPrefix, &contextPrefixLen,
+ &model, &level);
+ aptr =
+ vacm_getAccessEntry(newGroupName, newContextPrefix, model,
+ level);
+
+ if (aptr) {
+ if (long_ret == RS_DESTROY) {
+ vacm_destroyAccessEntry(newGroupName, newContextPrefix,
+ model, level);
+ }
+ }
+ free(newGroupName);
+ free(newContextPrefix);
+ } else if (action == UNDO) {
+ if (long_ret == RS_CREATEANDGO || long_ret == RS_CREATEANDWAIT) {
+ access_parse_oid(&name[ACCESS_MIB_LENGTH],
+ name_len - ACCESS_MIB_LENGTH,
+ (u_char **) & newGroupName, &groupNameLen,
+ (u_char **) & newContextPrefix,
+ &contextPrefixLen, &model, &level);
+ aptr =
+ vacm_getAccessEntry(newGroupName, newContextPrefix, model,
+ level);
+ if (aptr != NULL) {
+ vacm_destroyAccessEntry(newGroupName, newContextPrefix,
+ model, level);
+ }
+ }
+ free(newGroupName);
+ free(newContextPrefix);
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_vacmAccessStorageType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ /*
+ * variables we may use later
+ */
+ static long long_ret;
+ struct vacm_accessEntry *aptr;
+
+ if (var_val_type != ASN_INTEGER) {
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "write to vacmSecurityToGroupStorageType not ASN_INTEGER\n"));
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > sizeof(long_ret)) {
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "write to vacmSecurityToGroupStorageType: bad length\n"));
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ if (action == COMMIT) {
+ /*
+ * don't allow creations here
+ */
+ if ((aptr = access_parse_accessEntry(name, name_len)) == NULL) {
+ return SNMP_ERR_NOSUCHNAME;
+ }
+ long_ret = *((long *) var_val);
+ /*
+ * if ((long_ret == ST_VOLATILE || long_ret == ST_NONVOLATILE) &&
+ * (aptr->storageType == ST_VOLATILE ||
+ * aptr->storageType == ST_NONVOLATILE))
+ */
+ /*
+ * This version only supports volatile storage
+ */
+ if (long_ret == aptr->storageType) {
+ return SNMP_ERR_NOERROR;
+ } else {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_vacmAccessContextMatch(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ /*
+ * variables we may use later
+ */
+ static long long_ret;
+ struct vacm_accessEntry *aptr;
+
+ if (var_val_type != ASN_INTEGER) {
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "write to vacmAccessContextMatch not ASN_INTEGER\n"));
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > sizeof(long_ret)) {
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "write to vacmAccessContextMatch: bad length\n"));
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ if (action == COMMIT) {
+ /*
+ * don't allow creations here
+ */
+ if ((aptr = access_parse_accessEntry(name, name_len)) == NULL) {
+ return SNMP_ERR_NOSUCHNAME;
+ }
+ long_ret = *((long *) var_val);
+ if (long_ret == CM_EXACT || long_ret == CM_PREFIX) {
+ aptr->contextMatch = long_ret;
+ } else {
+ return SNMP_ERR_WRONGVALUE;
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_vacmAccessReadViewName(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static unsigned char string[VACMSTRINGLEN];
+ struct vacm_accessEntry *aptr = NULL;
+ static int resetOnFail;
+
+ if (action == RESERVE1) {
+ resetOnFail = 0;
+ if (var_val_type != ASN_OCTET_STR) {
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "write to vacmAccessReadViewName not ASN_OCTET_STR\n"));
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > 32) {
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "write to vacmAccessReadViewName: bad length\n"));
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ } else if (action == RESERVE2) {
+ if ((aptr = access_parse_accessEntry(name, name_len)) == NULL) {
+ return SNMP_ERR_INCONSISTENTNAME;
+ } else {
+ resetOnFail = 1;
+ memcpy(string, aptr->views[VACM_VIEW_READ], VACMSTRINGLEN);
+ memcpy(aptr->views[VACM_VIEW_READ], var_val, var_val_len);
+ aptr->views[VACM_VIEW_READ][var_val_len] = 0;
+ }
+ } else if (action == FREE) {
+ /*
+ * Try to undo the SET here (abnormal usage of FREE clause)
+ */
+ if ((aptr = access_parse_accessEntry(name, name_len)) != NULL &&
+ resetOnFail) {
+ memcpy(aptr->views[VACM_VIEW_READ], string, var_val_len);
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_vacmAccessWriteViewName(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static unsigned char string[VACMSTRINGLEN];
+ struct vacm_accessEntry *aptr = NULL;
+ static int resetOnFail;
+
+ if (action == RESERVE1) {
+ resetOnFail = 0;
+ if (var_val_type != ASN_OCTET_STR) {
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "write to vacmAccessWriteViewName not ASN_OCTET_STR\n"));
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > 32) {
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "write to vacmAccessWriteViewName: bad length\n"));
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ } else if (action == RESERVE2) {
+ if ((aptr = access_parse_accessEntry(name, name_len)) == NULL) {
+ return SNMP_ERR_INCONSISTENTNAME;
+ } else {
+ resetOnFail = 1;
+ memcpy(string, aptr->views[VACM_VIEW_WRITE], VACMSTRINGLEN);
+ memcpy(aptr->views[VACM_VIEW_WRITE], var_val, var_val_len);
+ aptr->views[VACM_VIEW_WRITE][var_val_len] = 0;
+ }
+ } else if (action == FREE) {
+ /*
+ * Try to undo the SET here (abnormal usage of FREE clause)
+ */
+ if ((aptr = access_parse_accessEntry(name, name_len)) != NULL &&
+ resetOnFail) {
+ memcpy(aptr->views[VACM_VIEW_WRITE], string, var_val_len);
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_vacmAccessNotifyViewName(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static unsigned char string[VACMSTRINGLEN];
+ struct vacm_accessEntry *aptr = NULL;
+ static int resetOnFail;
+
+ if (action == RESERVE1) {
+ resetOnFail = 0;
+ if (var_val_type != ASN_OCTET_STR) {
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "write to vacmAccessNotifyViewName not ASN_OCTET_STR\n"));
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > 32) {
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "write to vacmAccessNotifyViewName: bad length\n"));
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ } else if (action == RESERVE2) {
+ if ((aptr = access_parse_accessEntry(name, name_len)) == NULL) {
+ return SNMP_ERR_INCONSISTENTNAME;
+ } else {
+ resetOnFail = 1;
+ memcpy(string, aptr->views[VACM_VIEW_NOTIFY], VACMSTRINGLEN);
+ memcpy(aptr->views[VACM_VIEW_NOTIFY], var_val, var_val_len);
+ aptr->views[VACM_VIEW_NOTIFY][var_val_len] = 0;
+ }
+ } else if (action == FREE) {
+ /*
+ * Try to undo the SET here (abnormal usage of FREE clause)
+ */
+ if ((aptr = access_parse_accessEntry(name, name_len)) != NULL &&
+ resetOnFail) {
+ memcpy(aptr->views[VACM_VIEW_NOTIFY], string, var_val_len);
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+view_parse_oid(oid * oidIndex, size_t oidLen,
+ unsigned char **viewName, size_t * viewNameLen,
+ oid ** subtree, size_t * subtreeLen)
+{
+ int viewNameL, subtreeL, i;
+
+ /*
+ * first check the validity of the oid
+ */
+ if ((oidLen <= 0) || (!oidIndex)) {
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+ viewNameL = oidIndex[0];
+ subtreeL = oidLen - viewNameL - 1; /* the initial name length */
+
+ /*
+ * its valid, malloc the space and store the results
+ */
+ if (viewName == NULL || subtree == NULL) {
+ return SNMP_ERR_RESOURCEUNAVAILABLE;
+ }
+
+ if (subtreeL < 0) {
+ return SNMP_ERR_NOCREATION;
+ }
+
+ *viewName = (unsigned char *) malloc(viewNameL + 1);
+
+ if (*viewName == NULL) {
+ return SNMP_ERR_RESOURCEUNAVAILABLE;
+ }
+
+ *subtree = (oid *) malloc(subtreeL * sizeof(oid));
+ if (*subtree == NULL) {
+ free(*viewName);
+ return SNMP_ERR_RESOURCEUNAVAILABLE;
+ }
+
+ *subtreeLen = subtreeL;
+ *viewNameLen = viewNameL;
+
+ for (i = 0; i < viewNameL; i++) {
+ if (oidIndex[i + 1] > 255) {
+ free(*viewName);
+ free(*subtree);
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+ viewName[0][i] = (unsigned char) oidIndex[i + 1];
+ }
+ viewName[0][viewNameL] = 0;
+
+ for (i = 0; i < subtreeL; i++) {
+ if (oidIndex[i + viewNameL + 1] > 255) {
+ free(*viewName);
+ free(*subtree);
+ return SNMP_ERR_INCONSISTENTNAME;
+ }
+ subtree[0][i] = (oid) oidIndex[i + viewNameL + 1];
+ }
+
+ return 0;
+}
+
+oid *
+view_generate_OID(oid * prefix, size_t prefixLen,
+ struct vacm_viewEntry * vptr, size_t * length)
+{
+ oid *indexOid;
+ int i, viewNameLen, viewSubtreeLen;
+
+ viewNameLen = strlen(vptr->viewName);
+ viewSubtreeLen = vptr->viewSubtreeLen;
+
+ *length = 2 + viewNameLen + viewSubtreeLen + prefixLen;
+ indexOid = (oid *) malloc(*length * sizeof(oid));
+ if (indexOid) {
+ memmove(indexOid, prefix, prefixLen * sizeof(oid));
+
+ indexOid[prefixLen] = viewNameLen;
+ for (i = 0; i < viewNameLen; i++)
+ indexOid[viewNameLen + 1 + i] = (oid) vptr->viewName[i];
+
+ indexOid[prefixLen + viewNameLen + 1] = viewSubtreeLen;
+ for (i = 0; i < viewSubtreeLen; i++)
+ indexOid[prefixLen + viewNameLen + 2 + i] =
+ (oid) vptr->viewSubtree[i];
+
+ }
+ return indexOid;
+
+}
+
+struct vacm_viewEntry *
+view_parse_viewEntry(oid * name, size_t name_len)
+{
+ struct vacm_viewEntry *vptr;
+
+ char *newViewName;
+ oid *newViewSubtree;
+ size_t viewNameLen, viewSubtreeLen;
+
+ if (view_parse_oid(&name[VIEW_MIB_LENGTH], name_len - VIEW_MIB_LENGTH,
+ (u_char **) & newViewName, &viewNameLen,
+ (oid **) & newViewSubtree, &viewSubtreeLen))
+ return NULL;
+
+ vptr =
+ vacm_getViewEntry(newViewName, &newViewSubtree[1], viewSubtreeLen-1,
+ VACM_MODE_IGNORE_MASK);
+ free(newViewName);
+ free(newViewSubtree);
+
+ return vptr;
+
+} /* end vacm_parse_viewEntry() */
+
+int
+write_vacmViewStatus(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static long long_ret;
+ char *newViewName;
+ oid *newViewSubtree;
+ size_t viewNameLen, viewSubtreeLen;
+ struct vacm_viewEntry *vptr;
+ int rc = 0;
+
+ if (action == RESERVE1) {
+ if (var_val_type != ASN_INTEGER) {
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len != sizeof(long_ret)) {
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ long_ret = *((long *) var_val);
+ if (long_ret == RS_NOTREADY || long_ret < 1 || long_ret > 6) {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ /*
+ * See if we can parse the oid for model/name first.
+ */
+ if ((rc =
+ view_parse_oid(&name[VIEW_MIB_LENGTH],
+ name_len - VIEW_MIB_LENGTH,
+ (u_char **) & newViewName, &viewNameLen,
+ (oid **) & newViewSubtree, &viewSubtreeLen))) {
+ return rc;
+ }
+
+ if (viewNameLen < 1 || viewNameLen > 32) {
+ free(newViewName);
+ free(newViewSubtree);
+ return SNMP_ERR_NOCREATION;
+ }
+
+ /*
+ * Now see if a group already exists with these index values.
+ */
+ vptr =
+ vacm_getViewEntry(newViewName, &newViewSubtree[1], viewSubtreeLen-1,
+ VACM_MODE_IGNORE_MASK);
+ if (vptr &&
+ netsnmp_oid_equals(vptr->viewSubtree + 1, vptr->viewSubtreeLen - 1,
+ newViewSubtree + 1, viewSubtreeLen - 1) != 0) {
+ vptr = NULL;
+ }
+ if (vptr != NULL) {
+ if (long_ret == RS_CREATEANDGO || long_ret == RS_CREATEANDWAIT) {
+ free(newViewName);
+ free(newViewSubtree);
+ long_ret = RS_NOTREADY;
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ if (long_ret == RS_DESTROY && vptr->viewStorageType == ST_PERMANENT) {
+ free(newViewName);
+ free(newViewSubtree);
+ return SNMP_ERR_WRONGVALUE;
+ }
+ } else {
+ if (long_ret == RS_ACTIVE || long_ret == RS_NOTINSERVICE) {
+ free(newViewName);
+ free(newViewSubtree);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ if (long_ret == RS_CREATEANDGO || long_ret == RS_CREATEANDWAIT) {
+
+ /*
+ * Generate a new group entry.
+ */
+ if ((vptr =
+ vacm_createViewEntry(newViewName, &newViewSubtree[1],
+ viewSubtreeLen - 1)) == NULL) {
+ free(newViewName);
+ free(newViewSubtree);
+ return SNMP_ERR_GENERR;
+ }
+
+ /*
+ * Set defaults.
+ */
+ vptr->viewStorageType = ST_NONVOLATILE;
+ vptr->viewStatus = RS_NOTREADY;
+ vptr->viewType = SNMP_VIEW_INCLUDED;
+ }
+ }
+ free(newViewName);
+ free(newViewSubtree);
+ } else if (action == ACTION) {
+ view_parse_oid(&name[VIEW_MIB_LENGTH], name_len - VIEW_MIB_LENGTH,
+ (u_char **) & newViewName, &viewNameLen,
+ (oid **) & newViewSubtree, &viewSubtreeLen);
+
+ vptr =
+ vacm_getViewEntry(newViewName, &newViewSubtree[1], viewSubtreeLen-1,
+ VACM_MODE_IGNORE_MASK);
+
+ if (vptr != NULL) {
+ if (long_ret == RS_CREATEANDGO || long_ret == RS_ACTIVE) {
+ vptr->viewStatus = RS_ACTIVE;
+ } else if (long_ret == RS_CREATEANDWAIT) {
+ vptr->viewStatus = RS_NOTINSERVICE;
+ } else if (long_ret == RS_NOTINSERVICE) {
+ if (vptr->viewStatus == RS_ACTIVE) {
+ vptr->viewStatus = RS_NOTINSERVICE;
+ } else if (vptr->viewStatus == RS_NOTREADY) {
+ free(newViewName);
+ free(newViewSubtree);
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ }
+ }
+ free(newViewName);
+ free(newViewSubtree);
+ } else if (action == COMMIT) {
+ view_parse_oid(&name[VIEW_MIB_LENGTH], name_len - VIEW_MIB_LENGTH,
+ (u_char **) & newViewName, &viewNameLen,
+ (oid **) & newViewSubtree, &viewSubtreeLen);
+
+ vptr =
+ vacm_getViewEntry(newViewName, &newViewSubtree[1], viewSubtreeLen-1,
+ VACM_MODE_IGNORE_MASK);
+
+ if (vptr != NULL) {
+ if (long_ret == RS_DESTROY) {
+ vacm_destroyViewEntry(newViewName, newViewSubtree,
+ viewSubtreeLen);
+ }
+ }
+ free(newViewName);
+ free(newViewSubtree);
+ } else if (action == UNDO) {
+ if (long_ret == RS_CREATEANDGO || long_ret == RS_CREATEANDWAIT) {
+ view_parse_oid(&name[VIEW_MIB_LENGTH],
+ name_len - VIEW_MIB_LENGTH,
+ (u_char **) & newViewName, &viewNameLen,
+ (oid **) & newViewSubtree, &viewSubtreeLen);
+
+ vptr = vacm_getViewEntry(newViewName, &newViewSubtree[1],
+ viewSubtreeLen-1, VACM_MODE_IGNORE_MASK);
+
+ if (vptr != NULL) {
+ vacm_destroyViewEntry(newViewName, newViewSubtree,
+ viewSubtreeLen);
+ }
+ free(newViewName);
+ free(newViewSubtree);
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_vacmViewStorageType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ long newValue = *((long *) var_val);
+ static long oldValue;
+ struct vacm_viewEntry *vptr = NULL;
+
+ if (action == RESERVE1) {
+ if (var_val_type != ASN_INTEGER) {
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len != sizeof(long)) {
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ } else if (action == RESERVE2) {
+ if ((vptr = view_parse_viewEntry(name, name_len)) == NULL) {
+ return SNMP_ERR_INCONSISTENTNAME;
+ } else {
+ if ((newValue == ST_VOLATILE || newValue == ST_NONVOLATILE) &&
+ (vptr->viewStorageType == ST_VOLATILE ||
+ vptr->viewStorageType == ST_NONVOLATILE)) {
+ oldValue = vptr->viewStorageType;
+ vptr->viewStorageType = newValue;
+ } else if (newValue == vptr->viewStorageType) {
+ return SNMP_ERR_NOERROR;
+ } else {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ }
+ } else if (action == UNDO) {
+ if ((vptr = view_parse_viewEntry(name, name_len)) != NULL) {
+ vptr->viewStorageType = oldValue;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_vacmViewMask(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static unsigned char string[VACMSTRINGLEN];
+ static long length;
+ struct vacm_viewEntry *vptr = NULL;
+
+ if (action == RESERVE1) {
+ if (var_val_type != ASN_OCTET_STR) {
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len > 16) {
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ } else if (action == RESERVE2) {
+ if ((vptr = view_parse_viewEntry(name, name_len)) == NULL) {
+ return SNMP_ERR_INCONSISTENTNAME;
+ } else {
+ memcpy(string, vptr->viewMask, vptr->viewMaskLen);
+ length = vptr->viewMaskLen;
+ memcpy(vptr->viewMask, var_val, var_val_len);
+ vptr->viewMaskLen = var_val_len;
+ }
+ } else if (action == FREE) {
+ if ((vptr = view_parse_viewEntry(name, name_len)) != NULL) {
+ memcpy(vptr->viewMask, string, length);
+ vptr->viewMaskLen = length;
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_vacmViewType(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ long newValue = *((long *) var_val);
+ static long oldValue;
+ struct vacm_viewEntry *vptr = NULL;
+
+ if (action == RESERVE1) {
+ if (var_val_type != ASN_INTEGER) {
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len != sizeof(long)) {
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ if (newValue < 1 || newValue > 2) {
+ return SNMP_ERR_WRONGVALUE;
+ }
+ } else if (action == RESERVE2) {
+ if ((vptr = view_parse_viewEntry(name, name_len)) == NULL) {
+ return SNMP_ERR_INCONSISTENTNAME;
+ } else {
+ oldValue = vptr->viewType;
+ vptr->viewType = newValue;
+ }
+ } else if (action == UNDO) {
+ if ((vptr = view_parse_viewEntry(name, name_len)) != NULL) {
+ vptr->viewType = oldValue;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+write_vacmViewSpinLock(int action,
+ u_char * var_val,
+ u_char var_val_type,
+ size_t var_val_len,
+ u_char * statP, oid * name, size_t name_len)
+{
+ static long long_ret;
+
+ if (action == RESERVE1) {
+ if (var_val_type != ASN_INTEGER) {
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "write to vacmViewSpinLock not ASN_INTEGER\n"));
+ return SNMP_ERR_WRONGTYPE;
+ }
+ if (var_val_len != sizeof(long_ret)) {
+ DEBUGMSGTL(("mibII/vacm_vars",
+ "write to vacmViewSpinLock: bad length\n"));
+ return SNMP_ERR_WRONGLENGTH;
+ }
+ long_ret = *((long *) var_val);
+ if (long_ret != (long) vacmViewSpinLock) {
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ } else if (action == COMMIT) {
+ if (vacmViewSpinLock == 2147483647) {
+ vacmViewSpinLock = 0;
+ } else {
+ vacmViewSpinLock++;
+ }
+ }
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_vars.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_vars.h
new file mode 100644
index 0000000000..809315748c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/vacm_vars.h
@@ -0,0 +1,94 @@
+/*
+ * SNMPv3 View-based Access Control Model
+ */
+
+#ifndef _MIBGROUP_VACM_H
+#define _MIBGROUP_VACM_H
+
+#include <net-snmp/library/vacm.h>
+
+config_require(util_funcs)
+config_require(mibII/vacm_context)
+config_require(mibII/vacm_conf)
+config_add_mib(SNMP-VIEW-BASED-ACM-MIB)
+config_add_mib(SNMP-COMMUNITY-MIB)
+
+ void init_vacm_vars(void);
+
+ extern FindVarMethod var_vacm_sec2group;
+ extern FindVarMethod var_vacm_access;
+ extern FindVarMethod var_vacm_view;
+
+ WriteMethod write_vacmGroupName;
+ WriteMethod write_vacmSecurityToGroupStatus;
+ WriteMethod write_vacmSecurityToGroupStorageType;
+
+ WriteMethod write_vacmAccessContextMatch;
+ WriteMethod write_vacmAccessNotifyViewName;
+ WriteMethod write_vacmAccessReadViewName;
+ WriteMethod write_vacmAccessWriteViewName;
+ WriteMethod write_vacmAccessStatus;
+ WriteMethod write_vacmAccessStorageType;
+
+ WriteMethod write_vacmViewSpinLock;
+ WriteMethod write_vacmViewMask;
+ WriteMethod write_vacmViewStatus;
+ WriteMethod write_vacmViewStorageType;
+ WriteMethod write_vacmViewType;
+
+
+ oid *access_generate_OID(oid * prefix, size_t prefixLen,
+ struct vacm_accessEntry *aptr,
+ size_t * length);
+ struct vacm_accessEntry *access_parse_accessEntry(oid * name,
+ size_t name_len);
+ int access_parse_oid(oid * oidIndex, size_t oidLen,
+ unsigned char **groupName,
+ size_t * groupNameLen,
+ unsigned char **contextPrefix,
+ size_t * contextPrefixLen,
+ int *model, int *level);
+
+ oid *sec2group_generate_OID(oid * prefix, size_t prefixLen,
+ struct vacm_groupEntry *geptr,
+ size_t * length);
+ int sec2group_parse_oid(oid * oidIndex, size_t oidLen,
+ int *model, unsigned char **name,
+ size_t * nameLen);
+ struct vacm_groupEntry *sec2group_parse_groupEntry(oid * name,
+ size_t name_len);
+
+ oid *view_generate_OID(oid * prefix, size_t prefixLen,
+ struct vacm_viewEntry *vptr,
+ size_t * length);
+ int view_parse_oid(oid * oidIndex, size_t oidLen,
+ unsigned char **viewName,
+ size_t * viewNameLen, oid ** subtree,
+ size_t * subtreeLen);
+ struct vacm_viewEntry *view_parse_viewEntry(oid * name,
+ size_t name_len);
+
+
+
+#define OID_SNMPVACMMIB SNMP_OID_SNMPMODULES, 16
+#define OID_VACMMIBOBJECTS OID_SNMPVACMMIB, 1
+
+#define OID_VACMCONTEXTTABLE OID_VACMMIBOBJECTS, 1
+#define OID_VACMCONTEXTENTRY OID_VACMCONTEXTTABLE, 1
+
+#define OID_VACMGROUPTABLE OID_VACMMIBOBJECTS, 2
+#define OID_VACMGROUPENTRY OID_VACMGROUPTABLE, 1
+
+#define OID_VACMACCESSTABLE OID_VACMMIBOBJECTS, 4
+#define OID_VACMACCESSENTRY OID_VACMACCESSTABLE, 1
+
+#define OID_VACMMIBVIEWS OID_VACMMIBOBJECTS, 5
+#define OID_VACMVIEWTABLE OID_VACMMIBVIEWS, 2
+#define OID_VACMVIEWENTRY OID_VACMVIEWTABLE, 1
+#define SEC2GROUP_MIB_LENGTH 11
+#define ACCESS_MIB_LENGTH 11
+#define VIEW_MIB_LENGTH 12
+#define CM_EXACT 1
+#define CM_PREFIX 2
+
+#endif /* _MIBGROUP_VACM_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/var_route.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/var_route.c
new file mode 100644
index 0000000000..eac70acde5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/var_route.c
@@ -0,0 +1,2101 @@
+/*
+ * snmp_var_route.c - return a pointer to the named variable.
+ *
+ *
+ */
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/***********************************************************
+ Copyright 1988, 1989 by Carnegie Mellon University
+ Copyright 1989 TGV, Incorporated
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of CMU and TGV not be used
+in advertising or publicity pertaining to distribution of the software
+without specific, written prior permission.
+
+CMU AND TGV DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL CMU OR TGV BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+******************************************************************/
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+
+/*
+ * additions, fixes and enhancements for Linux by Erik Schoenfelder
+ * (schoenfr@ibr.cs.tu-bs.de) 1994/1995.
+ * Linux additions taken from CMU to UCD stack by Jennifer Bray of Origin
+ * (jbray@origin-at.co.uk) 1997
+ * Support for system({CTL_NET,PF_ROUTE,...) by Simon Leinen
+ * (simon@switch.ch) 1997
+ */
+
+#include <net-snmp/net-snmp-config.h>
+
+#include "route_headers.h"
+#define CACHE_TIME (120) /* Seconds */
+
+#if !defined(NETSNMP_CAN_USE_SYSCTL)
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <net-snmp/agent/auto_nlist.h>
+#include <net-snmp/data_access/interface.h>
+
+#include "ip.h"
+#include "kernel.h"
+#include "interfaces.h"
+#include "struct.h"
+#include "util_funcs.h"
+
+#ifndef MIN
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
+#ifdef hpux11
+#include <sys/mib.h>
+#include <netinet/mib_kern.h>
+#endif /* hpux */
+
+extern WriteMethod write_rte;
+
+#if !defined (WIN32) && !defined (cygwin)
+
+#ifdef USE_SYSCTL_ROUTE_DUMP
+
+static void Route_Scan_Reload(void);
+
+static unsigned char *all_routes = 0;
+static unsigned char *all_routes_end;
+static size_t all_routes_size;
+
+extern const struct sockaddr *get_address(const void *, int, int);
+extern const struct in_addr *get_in_address(const void *, int, int);
+
+/*
+ * var_ipRouteEntry(...
+ * Arguments:
+ * vp IN - pointer to variable entry that points here
+ * name IN/OUT - IN/name requested, OUT/name found
+ * length IN/OUT - length of IN/OUT oid's
+ * exact IN - TRUE if an exact match was requested
+ * var_len OUT - length of variable or 0 if function returned
+ * write_method out - pointer to function to set variable, otherwise 0
+ */
+u_char *
+var_ipRouteEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ /*
+ * object identifier is of form:
+ * 1.3.6.1.2.1.4.21.1.1.A.B.C.D, where A.B.C.D is IP address.
+ * IPADDR starts at offset 10.
+ */
+ struct rt_msghdr *rtp, *saveRtp = 0;
+ register int Save_Valid, result;
+ static int saveNameLen = 0, saveExact = 0;
+ static oid saveName[MAX_OID_LEN], Current[MAX_OID_LEN];
+ u_char *cp;
+ u_char *ap;
+ oid *op;
+ static in_addr_t addr_ret;
+
+ *write_method = NULL; /* write_rte; XXX: SET support not really implemented */
+
+#if 0
+ /**
+ ** this optimisation fails, if there is only a single route avail.
+ ** it is a very special case, but better leave it out ...
+ **/
+#if 0
+ if (rtsize <= 1)
+ Save_Valid = 0;
+ else
+#endif /* 0 */
+ /*
+ * OPTIMIZATION:
+ *
+ * If the name was the same as the last name, with the possible
+ * exception of the [9]th token, then don't read the routing table
+ *
+ */
+
+ if ((saveNameLen == *length) && (saveExact == exact)) {
+ register int temp = name[9];
+ name[9] = 0;
+ Save_Valid =
+ (snmp_oid_compare(name, *length, saveName, saveNameLen) == 0);
+ name[9] = temp;
+ } else
+ Save_Valid = 0;
+
+ if (Save_Valid && saveRtp) {
+ register int temp = name[9]; /* Fix up 'lowest' found entry */
+ memcpy((char *) name, (char *) Current, 14 * sizeof(oid));
+ name[9] = temp;
+ *length = 14;
+ rtp = saveRtp;
+ } else {
+#endif /* 0 */
+ /*
+ * fill in object part of name for current (less sizeof instance part)
+ */
+
+ memcpy((char *) Current, (char *) vp->name,
+ (int) (vp->namelen) * sizeof(oid));
+
+#if 0
+ /*
+ * Only reload if this is the start of a wildcard
+ */
+ if (*length < 14) {
+ Route_Scan_Reload();
+ }
+#else
+ Route_Scan_Reload();
+#endif
+ for (ap = all_routes; ap < all_routes_end; ap += rtp->rtm_msglen) {
+ rtp = (struct rt_msghdr *) ap;
+ if (rtp->rtm_type == 0)
+ break;
+ if (rtp->rtm_version != RTM_VERSION) {
+ snmp_log(LOG_ERR,
+ "routing socket message version mismatch (%d instead of %d)\n",
+ rtp->rtm_version, RTM_VERSION);
+ break;
+ }
+ if (rtp->rtm_type != RTM_GET) {
+ snmp_log(LOG_ERR,
+ "routing socket returned message other than GET (%d)\n",
+ rtp->rtm_type);
+ continue;
+ }
+ if (!(rtp->rtm_addrs & RTA_DST))
+ continue;
+ cp = (u_char *) get_in_address((struct sockaddr *) (rtp + 1),
+ rtp->rtm_addrs, RTA_DST);
+ if (cp == NULL)
+ return NULL;
+
+ op = Current + 10;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+
+ result = snmp_oid_compare(name, *length, Current, 14);
+ if ((exact && (result == 0)) || (!exact && (result < 0)))
+ break;
+ }
+ if (ap >= all_routes_end || rtp->rtm_type == 0)
+ return 0;
+ /*
+ * Save in the 'cache'
+ */
+ memcpy((char *) saveName, (char *) name,
+ SNMP_MIN(*length, MAX_OID_LEN) * sizeof(oid));
+ saveName[9] = '\0';
+ saveNameLen = *length;
+ saveExact = exact;
+ saveRtp = rtp;
+ /*
+ * Return the name
+ */
+ memcpy((char *) name, (char *) Current, 14 * sizeof(oid));
+ *length = 14;
+#if 0
+ }
+#endif /* 0 */
+
+ *var_len = sizeof(long_return);
+
+ switch (vp->magic) {
+ case IPROUTEDEST:
+ *var_len = sizeof(addr_ret);
+ return (u_char *) get_in_address((struct sockaddr *) (rtp + 1),
+ rtp->rtm_addrs, RTA_DST);
+ case IPROUTEIFINDEX:
+ long_return = (u_long) rtp->rtm_index;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC1:
+ long_return = (rtp->rtm_flags & RTF_UP) ? 1 : 0;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC2:
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = -1;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC3:
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = -1;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC4:
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = -1;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC5:
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = -1;
+ return (u_char *) & long_return;
+ case IPROUTENEXTHOP:
+ *var_len = sizeof(addr_ret);
+ return (u_char *) get_in_address((struct sockaddr *) (rtp + 1),
+ rtp->rtm_addrs, RTA_GATEWAY);
+ case IPROUTETYPE:
+ if (rtp->rtm_flags & RTF_UP) {
+ if (rtp->rtm_flags & RTF_GATEWAY) {
+ long_return = 4; /* indirect(4) */
+ } else {
+ long_return = 3; /* direct(3) */
+ }
+ } else {
+ long_return = 2; /* invalid(2) */
+ }
+ return (u_char *) & long_return;
+ case IPROUTEPROTO:
+ long_return = (rtp->rtm_flags & RTF_DYNAMIC)
+ ? 10 : (rtp->rtm_flags & RTF_STATIC)
+ ? 2 : (rtp->rtm_flags & RTF_DYNAMIC) ? 4 : 1;
+ return (u_char *) & long_return;
+ case IPROUTEAGE:
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = 0;
+ return (u_char *) & long_return;
+ case IPROUTEMASK:
+ *var_len = sizeof(addr_ret);
+ if (rtp->rtm_flags & RTF_HOST) {
+ addr_ret = 0x00000001;
+ return (u_char *) & addr_ret;
+ } else {
+ return (u_char *) get_in_address((struct sockaddr *) (rtp + 1),
+ rtp->rtm_addrs, RTA_NETMASK);
+ }
+ case IPROUTEINFO:
+ *var_len = nullOidLen;
+ return (u_char *) nullOid;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ipRouteEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+#else /* not USE_SYSCTL_ROUTE_DUMP */
+
+#ifdef hpux11
+static int rtsize = 0;
+static mib_ipRouteEnt *rt = (mib_ipRouteEnt *) 0;
+static void Route_Scan_Reload(void);
+#elif !defined(solaris2)
+static RTENTRY **rthead = 0;
+static int rtsize = 0, rtallocate = 0;
+
+static void Route_Scan_Reload(void);
+
+RTENTRY **netsnmp_get_routes(size_t *size) {
+ Route_Scan_Reload();
+ if (size)
+ *size = rtsize;
+ return rthead;
+}
+#endif /* hpux11 */
+
+#if !(defined(linux) || defined(solaris2) || defined(hpux11)) && defined(RTHOST_SYMBOL) && defined(RTNET_SYMBOL)
+#define NUM_ROUTE_SYMBOLS 2
+static char *route_symbols[] = {
+ RTHOST_SYMBOL,
+ RTNET_SYMBOL
+};
+#endif
+#endif
+
+#ifdef USE_SYSCTL_ROUTE_DUMP
+
+void
+init_var_route(void)
+{
+#ifdef solaris2
+ init_kernel_sunos5();
+#endif
+}
+
+static void
+Route_Scan_Reload(void)
+{
+ size_t size = 0;
+ int name[] = { CTL_NET, PF_ROUTE, 0, 0, NET_RT_DUMP, 0 };
+
+ if (sysctl(name, sizeof(name) / sizeof(int), 0, &size, 0, 0) == -1) {
+ snmp_log(LOG_ERR, "sysctl(CTL_NET,PF_ROUTE,0,0,NET_RT_DUMP,0)\n");
+ } else {
+ if (all_routes == 0 || all_routes_size < size) {
+ if (all_routes != 0) {
+ free(all_routes);
+ all_routes = 0;
+ }
+ if ((all_routes = malloc(size)) == 0) {
+ snmp_log(LOG_ERR,
+ "out of memory allocating route table\n");
+ }
+ all_routes_size = size;
+ } else {
+ size = all_routes_size;
+ }
+ if (sysctl(name, sizeof(name) / sizeof(int),
+ all_routes, &size, 0, 0) == -1) {
+ snmp_log(LOG_ERR,
+ "sysctl(CTL_NET,PF_ROUTE,0,0,NET_RT_DUMP,0)\n");
+ }
+ all_routes_end = all_routes + size;
+ }
+}
+
+#else /* not USE_SYSCTL_ROUTE_DUMP */
+
+void
+init_var_route(void)
+{
+#ifdef RTTABLES_SYMBOL
+ auto_nlist(RTTABLES_SYMBOL, 0, 0);
+#endif
+#ifdef RTHASHSIZE_SYMBOL
+ auto_nlist(RTHASHSIZE_SYMBOL, 0, 0);
+#endif
+#ifdef RTHOST_SYMBOL
+ auto_nlist(RTHOST_SYMBOL, 0, 0);
+#endif
+#ifdef RTNET_SYMBOL
+ auto_nlist(RTNET_SYMBOL, 0, 0);
+#endif
+}
+
+#ifndef solaris2
+
+#if NEED_KLGETSA
+static union {
+ struct sockaddr_in sin;
+ u_short data[128];
+} klgetsatmp;
+
+struct sockaddr_in *
+klgetsa(struct sockaddr_in *dst)
+{
+ if (!NETSNMP_KLOOKUP(dst, (char *) &klgetsatmp.sin, sizeof klgetsatmp.sin)) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return NULL;
+ }
+ if (klgetsatmp.sin.sin_len > sizeof(klgetsatmp.sin)) {
+ if (!NETSNMP_KLOOKUP(dst, (char *) &klgetsatmp.sin, klgetsatmp.sin.sin_len)) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return NULL;
+ }
+ }
+ return (&klgetsatmp.sin);
+}
+#endif
+
+u_char *
+var_ipRouteEntry(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ /*
+ * object identifier is of form:
+ * 1.3.6.1.2.1.4.21.1.1.A.B.C.D, where A.B.C.D is IP address.
+ * IPADDR starts at offset 10.
+ */
+ register int Save_Valid, result, RtIndex;
+ static int saveNameLen = 0, saveExact = 0, saveRtIndex = 0;
+ static oid saveName[MAX_OID_LEN], Current[MAX_OID_LEN];
+ u_char *cp;
+ oid *op;
+ static in_addr_t addr_ret;
+#if NEED_KLGETSA
+ struct sockaddr_in *sa;
+#endif
+#if !defined(linux) && !defined(hpux11)
+ struct ifnet rt_ifnet;
+ struct in_ifaddr rt_ifnetaddr;
+#endif
+
+ *write_method = NULL; /* write_rte; XXX: SET support not really implemented */
+
+ /**
+ ** this optimisation fails, if there is only a single route avail.
+ ** it is a very special case, but better leave it out ...
+ **/
+#if NETSNMP_NO_DUMMY_VALUES
+ saveNameLen = 0;
+#endif
+ if (rtsize <= 1)
+ Save_Valid = 0;
+ else
+ /*
+ * OPTIMIZATION:
+ *
+ * If the name was the same as the last name, with the possible
+ * exception of the [9]th token, then don't read the routing table
+ *
+ */
+
+ if ((saveNameLen == *length) && (saveExact == exact)) {
+ register int temp = name[9];
+ name[9] = 0;
+ Save_Valid =
+ (snmp_oid_compare(name, *length, saveName, saveNameLen) == 0);
+ name[9] = temp;
+ } else
+ Save_Valid = 0;
+
+ if (Save_Valid) {
+ register int temp = name[9]; /* Fix up 'lowest' found entry */
+ memcpy((char *) name, (char *) Current, 14 * sizeof(oid));
+ name[9] = temp;
+ *length = 14;
+ RtIndex = saveRtIndex;
+ } else {
+ /*
+ * fill in object part of name for current (less sizeof instance part)
+ */
+
+ memcpy((char *) Current, (char *) vp->name,
+ (int) (vp->namelen) * sizeof(oid));
+
+#if 0
+ /*
+ * Only reload if this is the start of a wildcard
+ */
+ if (*length < 14) {
+ Route_Scan_Reload();
+ }
+#else
+ Route_Scan_Reload();
+#endif
+ for (RtIndex = 0; RtIndex < rtsize; RtIndex++) {
+#if NEED_KLGETSA
+ sa = klgetsa((struct sockaddr_in *) rthead[RtIndex]->rt_dst);
+ cp = (u_char *) & (sa->sin_addr.s_addr);
+#elif defined(hpux11)
+ cp = (u_char *) & rt[RtIndex].Dest;
+#else
+ cp = (u_char *) &
+ (((struct sockaddr_in *) &(rthead[RtIndex]->rt_dst))->
+ sin_addr.s_addr);
+#endif
+ op = Current + 10;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+
+ result = snmp_oid_compare(name, *length, Current, 14);
+ if ((exact && (result == 0)) || (!exact && (result < 0)))
+ break;
+ }
+ if (RtIndex >= rtsize)
+ return (NULL);
+ /*
+ * Save in the 'cache'
+ */
+ memcpy((char *) saveName, (char *) name,
+ SNMP_MIN(*length, MAX_OID_LEN) * sizeof(oid));
+ saveName[9] = 0;
+ saveNameLen = *length;
+ saveExact = exact;
+ saveRtIndex = RtIndex;
+ /*
+ * Return the name
+ */
+ memcpy((char *) name, (char *) Current, 14 * sizeof(oid));
+ *length = 14;
+ }
+
+ *var_len = sizeof(long_return);
+
+ switch (vp->magic) {
+ case IPROUTEDEST:
+ *var_len = sizeof(addr_ret);
+#if NEED_KLGETSA
+ sa = klgetsa((struct sockaddr_in *) rthead[RtIndex]->rt_dst);
+ return (u_char *) & (sa->sin_addr.s_addr);
+#elif defined(hpux11)
+ addr_ret = rt[RtIndex].Dest;
+ return (u_char *) & addr_ret;
+#else
+ return (u_char *) & ((struct sockaddr_in *) &rthead[RtIndex]->
+ rt_dst)->sin_addr.s_addr;
+#endif
+ case IPROUTEIFINDEX:
+#ifdef hpux11
+ long_return = rt[RtIndex].IfIndex;
+#else
+ long_return = (u_long) rthead[RtIndex]->rt_unit;
+#endif
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC1:
+#ifdef hpux11
+ long_return = rt[RtIndex].Metric1;
+#else
+ long_return = (rthead[RtIndex]->rt_flags & RTF_GATEWAY) ? 1 : 0;
+#endif
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC2:
+#ifdef hpux11
+ long_return = rt[RtIndex].Metric2;
+ return (u_char *) & long_return;
+#elif defined(NETSNMP_NO_DUMMY_VALUES)
+ return NULL;
+#endif
+ long_return = -1;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC3:
+#ifdef hpux11
+ long_return = rt[RtIndex].Metric3;
+ return (u_char *) & long_return;
+#elif defined(NETSNMP_NO_DUMMY_VALUES)
+ return NULL;
+#endif
+ long_return = -1;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC4:
+#ifdef hpux11
+ long_return = rt[RtIndex].Metric4;
+ return (u_char *) & long_return;
+#elif defined(NETSNMP_NO_DUMMY_VALUES)
+ return NULL;
+#endif
+ long_return = -1;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC5:
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = -1;
+ return (u_char *) & long_return;
+ case IPROUTENEXTHOP:
+ *var_len = sizeof(addr_ret);
+#if NEED_KLGETSA
+ sa = klgetsa((struct sockaddr_in *) rthead[RtIndex]->rt_gateway);
+ return (u_char *) & (sa->sin_addr.s_addr);
+#elif defined(hpux11)
+ addr_ret = rt[RtIndex].NextHop;
+ return (u_char *) & addr_ret;
+#else
+ return (u_char *) & ((struct sockaddr_in *) &rthead[RtIndex]->
+ rt_gateway)->sin_addr.s_addr;
+#endif /* *bsd */
+ case IPROUTETYPE:
+#ifdef hpux11
+ long_return = rt[RtIndex].Type;
+#else
+ if (rthead[RtIndex]->rt_flags & RTF_UP) {
+ if (rthead[RtIndex]->rt_flags & RTF_GATEWAY) {
+ long_return = 4; /* indirect(4) */
+ } else {
+ long_return = 3; /* direct(3) */
+ }
+ } else {
+ long_return = 2; /* invalid(2) */
+ }
+#endif
+ return (u_char *) & long_return;
+ case IPROUTEPROTO:
+#ifdef hpux11
+ long_return = rt[RtIndex].Proto;
+#else
+ long_return = (rthead[RtIndex]->rt_flags & RTF_DYNAMIC) ? 4 : 2;
+#endif
+ return (u_char *) & long_return;
+ case IPROUTEAGE:
+#ifdef hpux11
+ long_return = rt[RtIndex].Age;
+ return (u_char *) & long_return;
+#elif defined(NETSNMP_NO_DUMMY_VALUES)
+ return NULL;
+#endif
+ long_return = 0;
+ return (u_char *) & long_return;
+ case IPROUTEMASK:
+ *var_len = sizeof(addr_ret);
+#if NEED_KLGETSA
+ /*
+ * XXX - Almost certainly not right
+ * but I don't have a suitable system to test this on
+ */
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ addr_ret = 0;
+#elif defined(hpux11)
+ addr_ret = rt[RtIndex].Mask;
+ return (u_char *) & addr_ret;
+#else /* !NEED_KLGETSA && !hpux11 */
+ if (((struct sockaddr_in *) &rthead[RtIndex]->rt_dst)->sin_addr.
+ s_addr == 0)
+ addr_ret = 0; /* Default route */
+ else {
+#ifndef linux
+ if (!NETSNMP_KLOOKUP(rthead[RtIndex]->rt_ifp,
+ (char *) &rt_ifnet, sizeof(rt_ifnet))) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return NULL;
+ }
+ if (!NETSNMP_KLOOKUP(rt_ifnet.if_addrlist,
+ (char *) &rt_ifnetaddr, sizeof(rt_ifnetaddr))) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return NULL;
+ }
+
+ addr_ret = rt_ifnetaddr.ia_subnetmask;
+#else /* linux */
+ cp = (u_char *) &
+ (((struct sockaddr_in *) &(rthead[RtIndex]->rt_dst))->
+ sin_addr.s_addr);
+ return (u_char *) &
+ (((struct sockaddr_in *) &(rthead[RtIndex]->rt_genmask))->
+ sin_addr.s_addr);
+#endif /* linux */
+ }
+#endif /* NEED_KLGETSA */
+ return (u_char *) & addr_ret;
+ case IPROUTEINFO:
+ *var_len = nullOidLen;
+ return (u_char *) nullOid;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ipRouteEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+#else /* solaris2 */
+
+static int
+IP_Cmp_Route(void *addr, void *ep)
+{
+ mib2_ipRouteEntry_t *Ep = ep, *Addr = addr;
+
+ if ((Ep->ipRouteDest == Addr->ipRouteDest) &&
+ (Ep->ipRouteNextHop == Addr->ipRouteNextHop) &&
+ (Ep->ipRouteType == Addr->ipRouteType) &&
+ (Ep->ipRouteProto == Addr->ipRouteProto) &&
+ (Ep->ipRouteMask == Addr->ipRouteMask) &&
+ (Ep->ipRouteInfo.re_max_frag == Addr->ipRouteInfo.re_max_frag) &&
+ (Ep->ipRouteInfo.re_rtt == Addr->ipRouteInfo.re_rtt) &&
+ (Ep->ipRouteInfo.re_ref == Addr->ipRouteInfo.re_ref) &&
+ (Ep->ipRouteInfo.re_frag_flag == Addr->ipRouteInfo.re_frag_flag) &&
+ (Ep->ipRouteInfo.re_src_addr == Addr->ipRouteInfo.re_src_addr) &&
+ (Ep->ipRouteInfo.re_ire_type == Addr->ipRouteInfo.re_ire_type) &&
+ (Ep->ipRouteInfo.re_obpkt == Addr->ipRouteInfo.re_obpkt) &&
+ (Ep->ipRouteInfo.re_ibpkt == Addr->ipRouteInfo.re_ibpkt)
+ )
+ return (0);
+ else
+ return (1); /* Not found */
+}
+
+u_char *
+var_ipRouteEntry(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ /*
+ * object identifier is of form:
+ * 1.3.6.1.2.1.4.21.1.1.A.B.C.D, where A.B.C.D is IP address.
+ * IPADDR starts at offset 10.
+ */
+#define IP_ROUTENAME_LENGTH 14
+#define IP_ROUTEADDR_OFF 10
+ oid current[IP_ROUTENAME_LENGTH],
+ lowest[IP_ROUTENAME_LENGTH];
+ u_char *cp;
+ oid *op;
+ mib2_ipRouteEntry_t Lowentry, Nextentry, entry;
+ int Found = 0;
+ req_e req_type;
+ static in_addr_t addr_ret;
+
+ *write_method = NULL; /* write_rte; XXX: SET support not really implemented */
+
+ /*
+ * fill in object part of name for current (less sizeof instance part)
+ */
+
+ memcpy((char *) current, (char *) vp->name, vp->namelen * sizeof(oid));
+ if (*length == IP_ROUTENAME_LENGTH) /* Assume that the input name is the lowest */
+ memcpy((char *) lowest, (char *) name,
+ IP_ROUTENAME_LENGTH * sizeof(oid));
+ else {
+ name[IP_ROUTEADDR_OFF] = (oid) - 1; /* Grhhh: to prevent accidental comparison :-( */
+ lowest[0] = 0xff;
+ }
+ for (Nextentry.ipRouteDest = (u_long) - 2, req_type = GET_FIRST;;
+ Nextentry = entry, req_type = GET_NEXT) {
+ if (getMibstat(MIB_IP_ROUTE, &entry, sizeof(mib2_ipRouteEntry_t),
+ req_type, &IP_Cmp_Route, &Nextentry) != 0)
+ break;
+ COPY_IPADDR(cp, (u_char *) & entry.ipRouteDest, op,
+ current + IP_ROUTEADDR_OFF);
+ if (exact) {
+ if (snmp_oid_compare
+ (current, IP_ROUTENAME_LENGTH, name, *length) == 0) {
+ memcpy((char *) lowest, (char *) current,
+ IP_ROUTENAME_LENGTH * sizeof(oid));
+ Lowentry = entry;
+ Found++;
+ break; /* no need to search further */
+ }
+ } else {
+ if ((snmp_oid_compare
+ (current, IP_ROUTENAME_LENGTH, name, *length) > 0)
+ && ((Nextentry.ipRouteDest == (u_long) - 2)
+ ||
+ (snmp_oid_compare
+ (current, IP_ROUTENAME_LENGTH, lowest,
+ IP_ROUTENAME_LENGTH) < 0)
+ ||
+ (snmp_oid_compare
+ (name, IP_ROUTENAME_LENGTH, lowest,
+ IP_ROUTENAME_LENGTH) == 0))) {
+
+ /*
+ * if new one is greater than input and closer to input than
+ * * previous lowest, and is not equal to it, save this one as the "next" one.
+ */
+ memcpy((char *) lowest, (char *) current,
+ IP_ROUTENAME_LENGTH * sizeof(oid));
+ Lowentry = entry;
+ Found++;
+ }
+ }
+ }
+ if (Found == 0)
+ return (NULL);
+ memcpy((char *) name, (char *) lowest,
+ IP_ROUTENAME_LENGTH * sizeof(oid));
+ *length = IP_ROUTENAME_LENGTH;
+ *var_len = sizeof(long_return);
+
+ switch (vp->magic) {
+ case IPROUTEDEST:
+ *var_len = sizeof(addr_ret);
+ addr_ret = Lowentry.ipRouteDest;
+ return (u_char *) & addr_ret;
+ case IPROUTEIFINDEX:
+#ifdef NETSNMP_INCLUDE_IFTABLE_REWRITES
+ Lowentry.ipRouteIfIndex.o_bytes[Lowentry.ipRouteIfIndex.o_length] = '\0';
+ long_return =
+ netsnmp_access_interface_index_find(
+ Lowentry.ipRouteIfIndex.o_bytes);
+#else
+ long_return =
+ Interface_Index_By_Name(Lowentry.ipRouteIfIndex.o_bytes,
+ Lowentry.ipRouteIfIndex.o_length);
+#endif
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC1:
+ long_return = Lowentry.ipRouteMetric1;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC2:
+ long_return = Lowentry.ipRouteMetric2;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC3:
+ long_return = Lowentry.ipRouteMetric3;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC4:
+ long_return = Lowentry.ipRouteMetric4;
+ return (u_char *) & long_return;
+ case IPROUTENEXTHOP:
+ *var_len = sizeof(addr_ret);
+ addr_ret = Lowentry.ipRouteNextHop;
+ return (u_char *) & addr_ret;
+ case IPROUTETYPE:
+ long_return = Lowentry.ipRouteType;
+ return (u_char *) & long_return;
+ case IPROUTEPROTO:
+ long_return = Lowentry.ipRouteProto;
+ if (long_return == -1)
+ long_return = 1;
+ return (u_char *) & long_return;
+ case IPROUTEAGE:
+ long_return = Lowentry.ipRouteAge;
+ return (u_char *) & long_return;
+ case IPROUTEMASK:
+ *var_len = sizeof(addr_ret);
+ addr_ret = Lowentry.ipRouteMask;
+ return (u_char *) & addr_ret;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ipRouteEntry\n",
+ vp->magic));
+ };
+ return NULL;
+}
+
+#endif /* solaris2 - var_IProute */
+
+#ifndef solaris2
+static int qsort_compare(const void *, const void *);
+#endif
+
+#if defined(RTENTRY_4_4) || defined(RTENTRY_RT_NEXT) || defined(hpux11)
+
+#if defined(RTENTRY_4_4) && !defined(hpux11)
+void
+load_rtentries(struct radix_node *pt)
+{
+ struct radix_node node;
+ RTENTRY rt;
+ struct ifnet ifnet;
+ char name[16], temp[16];
+#if !STRUCT_IFNET_HAS_IF_XNAME
+ register char *cp;
+#endif
+
+ if (!NETSNMP_KLOOKUP(pt, (char *) &node, sizeof(struct radix_node))) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return;
+ }
+ if (node.rn_b >= 0) {
+ load_rtentries(node.rn_r);
+ load_rtentries(node.rn_l);
+ } else {
+ if (node.rn_flags & RNF_ROOT) {
+ /*
+ * root node
+ */
+ if (node.rn_dupedkey)
+ load_rtentries(node.rn_dupedkey);
+ return;
+ }
+ /*
+ * get the route
+ */
+ if (!NETSNMP_KLOOKUP(pt, (char *) &rt, sizeof(RTENTRY))) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return;
+ }
+
+ if (rt.rt_ifp != 0) {
+ if (!NETSNMP_KLOOKUP(rt.rt_ifp, (char *) &ifnet, sizeof(ifnet))) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return;
+ }
+#if STRUCT_IFNET_HAS_IF_XNAME
+#if defined(netbsd1) || defined(openbsd2)
+ strncpy(name, ifnet.if_xname, sizeof name);
+#else
+ if (!NETSNMP_KLOOKUP(ifnet.if_xname, name, sizeof name)) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return;
+ }
+#endif
+ name[sizeof(name) - 1] = '\0';
+#else
+ if (!NETSNMP_KLOOKUP(ifnet.if_name, name, sizeof name)) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return;
+ }
+ name[sizeof(name) - 1] = '\0';
+ cp = (char *) strchr(name, '\0');
+ string_append_int(cp, ifnet.if_unit);
+#endif
+ Interface_Scan_Init();
+ rt.rt_unit = 0;
+ while (Interface_Scan_Next
+ ((short *) &(rt.rt_unit), temp, NULL, NULL) != 0) {
+ if (strcmp(name, temp) == 0)
+ break;
+ }
+ }
+#if CHECK_RT_FLAGS
+ if (((rt.rt_flags & RTF_CLONING) != RTF_CLONING)
+ && ((rt.rt_flags & RTF_LLINFO) != RTF_LLINFO)) {
+#endif
+ /*
+ * check for space and malloc
+ */
+ if (rtsize >= rtallocate) {
+ rthead =
+ (RTENTRY **) realloc((char *) rthead,
+ 2 * rtallocate *
+ sizeof(RTENTRY *));
+ memset((char *) &rthead[rtallocate], (0),
+ rtallocate * sizeof(RTENTRY *));
+
+ rtallocate *= 2;
+ }
+ if (!rthead[rtsize])
+ rthead[rtsize] = (RTENTRY *) malloc(sizeof(RTENTRY));
+ /*
+ * Add this to the database
+ */
+ memcpy((char *) rthead[rtsize], (char *) &rt, sizeof(RTENTRY));
+ rtsize++;
+#if CHECK_RT_FLAGS
+ }
+#endif
+
+ if (node.rn_dupedkey)
+ load_rtentries(node.rn_dupedkey);
+ }
+}
+#endif /* RTENTRY_4_4 && !hpux11 */
+
+static void
+Route_Scan_Reload(void)
+{
+#ifdef hpux11
+
+ int fd;
+ struct nmparms p;
+ int val;
+ unsigned int ulen;
+ int ret;
+
+ if (rt)
+ free(rt);
+ rt = (mib_ipRouteEnt *) 0;
+ rtsize = 0;
+
+ if ((fd = open_mib("/dev/ip", O_RDONLY, 0, NM_ASYNC_OFF)) >= 0) {
+ p.objid = ID_ipRouteNumEnt;
+ p.buffer = (void *) &val;
+ ulen = sizeof(int);
+ p.len = &ulen;
+ if ((ret = get_mib_info(fd, &p)) == 0)
+ rtsize = val;
+
+ if (rtsize > 0) {
+ ulen = (unsigned) rtsize *sizeof(mib_ipRouteEnt);
+ rt = (mib_ipRouteEnt *) malloc(ulen);
+ p.objid = ID_ipRouteTable;
+ p.buffer = (void *) rt;
+ p.len = &ulen;
+ if ((ret = get_mib_info(fd, &p)) < 0)
+ rtsize = 0;
+ }
+
+ close_mib(fd);
+ }
+
+ /*
+ * Sort it!
+ */
+ qsort((char *) rt, rtsize, sizeof(rt[0]),
+#ifdef __STDC__
+ (int (*)(const void *, const void *)) qsort_compare
+#else
+ qsort_compare
+#endif
+ );
+
+#else /* hpux11 */
+#if defined(RTENTRY_4_4)
+ struct radix_node_head head, *rt_table[AF_MAX + 1];
+ int i;
+#else
+ RTENTRY **routehash, mb;
+ register RTENTRY *m;
+ RTENTRY *rt;
+ struct ifnet ifnet;
+ int i, table;
+ register char *cp;
+ char name[16], temp[16];
+ int hashsize;
+#endif
+ static int Time_Of_Last_Reload = 0;
+ struct timeval now;
+
+ gettimeofday(&now, (struct timezone *) 0);
+ if (Time_Of_Last_Reload + CACHE_TIME > now.tv_sec)
+ return;
+ Time_Of_Last_Reload = now.tv_sec;
+
+ /*
+ * * Makes sure we have SOME space allocated for new routing entries
+ */
+ if (!rthead) {
+ rthead = (RTENTRY **) malloc(100 * sizeof(RTENTRY *));
+ if (!rthead) {
+ snmp_log(LOG_ERR, "route table malloc fail\n");
+ return;
+ }
+ memset((char *) rthead, (0), 100 * sizeof(RTENTRY *));
+ rtallocate = 100;
+ }
+
+ /*
+ * reset the routing table size to zero -- was a CMU memory leak
+ */
+ rtsize = 0;
+
+#ifdef RTENTRY_4_4
+ /*
+ * rtentry is a BSD 4.4 compat
+ */
+
+#if !defined(AF_UNSPEC)
+#define AF_UNSPEC AF_INET
+#endif
+
+ auto_nlist(RTTABLES_SYMBOL, (char *) rt_table, sizeof(rt_table));
+ for (i = 0; i <= AF_MAX; i++) {
+ if (rt_table[i] == 0)
+ continue;
+ if (NETSNMP_KLOOKUP(rt_table[i], (char *) &head, sizeof(head))) {
+ load_rtentries(head.rnh_treetop);
+ }
+ }
+
+#else /* rtentry is a BSD 4.3 compat */
+ for (table = 0; table < NUM_ROUTE_SYMBOLS; table++) {
+ auto_nlist(RTHASHSIZE_SYMBOL, (char *) &hashsize,
+ sizeof(hashsize));
+ routehash = (RTENTRY **) malloc(hashsize * sizeof(struct mbuf *));
+ auto_nlist(route_symbols[table], (char *) routehash,
+ hashsize * sizeof(struct mbuf *));
+ for (i = 0; i < hashsize; i++) {
+ if (routehash[i] == 0)
+ continue;
+ m = routehash[i];
+ while (m) {
+ /*
+ * Dig the route out of the kernel...
+ */
+ if (!NETSNMP_KLOOKUP(m, (char *) &mb, sizeof(mb))) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return;
+ }
+ m = mb.rt_next;
+
+ rt = &mb;
+ if (rt->rt_ifp != 0) {
+ if (!NETSNMP_KLOOKUP(rt->rt_ifp, (char *) &ifnet, sizeof(ifnet))) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return;
+ }
+ if (!NETSNMP_KLOOKUP(ifnet.if_name, name, 16)) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return;
+ }
+ name[15] = '\0';
+ cp = (char *) strchr(name, '\0');
+ string_append_int(cp, ifnet.if_unit);
+
+ Interface_Scan_Init();
+ while (Interface_Scan_Next
+ ((short *) &rt->rt_unit, temp, NULL,
+ NULL) != 0) {
+ if (strcmp(name, temp) == 0)
+ break;
+ }
+ }
+ /*
+ * Allocate a block to hold it and add it to the database
+ */
+ if (rtsize >= rtallocate) {
+ rthead =
+ (RTENTRY **) realloc((char *) rthead,
+ 2 * rtallocate *
+ sizeof(RTENTRY *));
+ memset((char *) &rthead[rtallocate], (0),
+ rtallocate * sizeof(RTENTRY *));
+
+ rtallocate *= 2;
+ }
+ if (!rthead[rtsize])
+ rthead[rtsize] = (RTENTRY *) malloc(sizeof(RTENTRY));
+ /*
+ * Add this to the database
+ */
+ memcpy((char *) rthead[rtsize], (char *) rt,
+ sizeof(RTENTRY));
+ rtsize++;
+ }
+ }
+ free(routehash);
+ }
+#endif
+ /*
+ * Sort it!
+ */
+ qsort((char *) rthead, rtsize, sizeof(rthead[0]),
+#ifdef __STDC__
+ (int (*)(const void *, const void *)) qsort_compare
+#else
+ qsort_compare
+#endif
+ );
+#endif /* hpux11 */
+}
+
+#else
+
+#if HAVE_SYS_MBUF_H
+static void
+Route_Scan_Reload(void)
+{
+ struct mbuf **routehash, mb;
+ register struct mbuf *m;
+ struct ifnet ifnet;
+ RTENTRY *rt;
+ int i, table;
+ register char *cp;
+ char name[16], temp[16];
+ static int Time_Of_Last_Reload = 0;
+ struct timeval now;
+ int hashsize;
+
+ gettimeofday(&now, (struct timezone *) 0);
+ if (Time_Of_Last_Reload + CACHE_TIME > now.tv_sec)
+ return;
+ Time_Of_Last_Reload = now.tv_sec;
+
+ /*
+ * Makes sure we have SOME space allocated for new routing entries
+ */
+ if (!rthead) {
+ rthead = (RTENTRY **) malloc(100 * sizeof(RTENTRY *));
+ if (!rthead) {
+ snmp_log(LOG_ERR, "route table malloc fail\n");
+ return;
+ }
+ memset((char *) rthead, (0), 100 * sizeof(RTENTRY *));
+ rtallocate = 100;
+ }
+
+ /*
+ * reset the routing table size to zero -- was a CMU memory leak
+ */
+ rtsize = 0;
+
+ for (table = 0; table < NUM_ROUTE_SYMBOLS; table++) {
+#ifdef sunV3
+ hashsize = RTHASHSIZ;
+#else
+ auto_nlist(RTHASHSIZE_SYMBOL, (char *) &hashsize,
+ sizeof(hashsize));
+#endif
+ routehash =
+ (struct mbuf **) malloc(hashsize * sizeof(struct mbuf *));
+ auto_nlist(route_symbols[table], (char *) routehash,
+ hashsize * sizeof(struct mbuf *));
+ for (i = 0; i < hashsize; i++) {
+ if (routehash[i] == 0)
+ continue;
+ m = routehash[i];
+ while (m) {
+ /*
+ * Dig the route out of the kernel...
+ */
+ if (!NETSNMP_KLOOKUP(m, (char *) &mb, sizeof(mb))) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return;
+ }
+ m = mb.m_next;
+ rt = mtod(&mb, RTENTRY *);
+
+ if (rt->rt_ifp != 0) {
+
+ if (!NETSNMP_KLOOKUP(rt->rt_ifp, (char *) &ifnet, sizeof(ifnet))) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return;
+ }
+ if (!NETSNMP_KLOOKUP(ifnet.if_name, name, 16)) {
+ DEBUGMSGTL(("mibII/var_route", "klookup failed\n"));
+ return;
+ }
+ name[15] = '\0';
+ cp = (char *) strchr(name, '\0');
+ string_append_int(cp, ifnet.if_unit);
+ if (strcmp(name, "lo0") == 0)
+ continue;
+
+ Interface_Scan_Init();
+ while (Interface_Scan_Next
+ ((short *) &rt->rt_unit, temp, NULL,
+ NULL) != 0) {
+ if (strcmp(name, temp) == 0)
+ break;
+ }
+ }
+ /*
+ * Allocate a block to hold it and add it to the database
+ */
+ if (rtsize >= rtallocate) {
+ rthead =
+ (RTENTRY **) realloc((char *) rthead,
+ 2 * rtallocate *
+ sizeof(RTENTRY *));
+ memset((char *) &rthead[rtallocate], (0),
+ rtallocate * sizeof(RTENTRY *));
+
+ rtallocate *= 2;
+ }
+ if (!rthead[rtsize])
+ rthead[rtsize] = (RTENTRY *) malloc(sizeof(RTENTRY));
+ /*
+ * * Add this to the database
+ */
+ memcpy((char *) rthead[rtsize], (char *) rt,
+ sizeof(RTENTRY));
+ rtsize++;
+ }
+ }
+ free(routehash);
+ }
+ /*
+ * Sort it!
+ */
+ qsort((char *) rthead, rtsize, sizeof(rthead[0]), qsort_compare);
+}
+#else
+#ifdef linux
+static void
+Route_Scan_Reload(void)
+{
+ FILE *in;
+ char line[256];
+ struct rtentry *rt;
+ char name[16];
+ static int Time_Of_Last_Reload = 0;
+ struct timeval now;
+
+ gettimeofday(&now, (struct timezone *) 0);
+ if (Time_Of_Last_Reload + CACHE_TIME > now.tv_sec)
+ return;
+ Time_Of_Last_Reload = now.tv_sec;
+
+ /*
+ * Makes sure we have SOME space allocated for new routing entries
+ */
+ if (!rthead) {
+ rthead = (struct rtentry **) calloc(100, sizeof(struct rtentry *));
+ if (!rthead) {
+ snmp_log(LOG_ERR, "route table malloc fail\n");
+ return;
+ }
+ rtallocate = 100;
+ }
+
+ /*
+ * fetch routes from the proc file-system:
+ */
+
+ rtsize = 0;
+
+ if (!(in = fopen("/proc/net/route", "r"))) {
+ snmp_log(LOG_ERR, "cannot open /proc/net/route - burps\n");
+ return;
+ }
+
+ while (fgets(line, sizeof(line), in)) {
+ struct rtentry rtent;
+ char rtent_name[32];
+ int refcnt, flags, metric;
+ unsigned use;
+
+ rt = &rtent;
+ memset((char *) rt, (0), sizeof(*rt));
+ rt->rt_dev = rtent_name;
+
+ /*
+ * as with 1.99.14:
+ * Iface Dest GW Flags RefCnt Use Metric Mask MTU Win IRTT
+ * eth0 0A0A0A0A 00000000 05 0 0 0 FFFFFFFF 1500 0 0
+ */
+ if (8 != sscanf(line, "%s %x %x %x %u %d %d %x %*d %*d %*d\n",
+ rt->rt_dev,
+ &(((struct sockaddr_in *) &(rtent.rt_dst))->
+ sin_addr.s_addr),
+ &(((struct sockaddr_in *) &(rtent.rt_gateway))->
+ sin_addr.s_addr),
+ /*
+ * XXX: fix type of the args
+ */
+ &flags, &refcnt, &use, &metric,
+ &(((struct sockaddr_in *) &(rtent.rt_genmask))->
+ sin_addr.s_addr)))
+ continue;
+
+ strncpy(name, rt->rt_dev, sizeof(name));
+ name[ sizeof(name)-1 ] = 0;
+
+ rt->rt_flags = flags, rt->rt_refcnt = refcnt;
+ rt->rt_use = use, rt->rt_metric = metric;
+
+ rt->rt_unit = netsnmp_access_interface_index_find(name);
+
+ /*
+ * Allocate a block to hold it and add it to the database
+ */
+ if (rtsize >= rtallocate) {
+ rthead = (struct rtentry **) realloc((char *) rthead,
+ 2 * rtallocate *
+ sizeof(struct rtentry *));
+ memset(&rthead[rtallocate], 0,
+ rtallocate * sizeof(struct rtentry *));
+ rtallocate *= 2;
+ }
+ if (!rthead[rtsize])
+ rthead[rtsize] =
+ (struct rtentry *) malloc(sizeof(struct rtentry));
+ /*
+ * Add this to the database
+ */
+ memcpy((char *) rthead[rtsize], (char *) rt,
+ sizeof(struct rtentry));
+ rtsize++;
+ }
+
+ fclose(in);
+
+ /*
+ * Sort it!
+ */
+ qsort((char *) rthead, rtsize, sizeof(rthead[0]), qsort_compare);
+}
+#endif
+#endif
+#endif
+
+
+#ifndef solaris2
+/*
+ * Create a host table
+ */
+#ifdef hpux11
+static int
+qsort_compare(const void *v1, const void *v2)
+{
+ const mib_ipRouteEnt *r1 = (const mib_ipRouteEnt *) v1;
+ const mib_ipRouteEnt *r2 = (const mib_ipRouteEnt *) v2;
+ /*
+ * Do the comparison
+ */
+ if (r1->Dest == r2->Dest)
+ return (0);
+ if (r1->Dest > r2->Dest)
+ return (1);
+ return (-1);
+}
+#else
+static int
+qsort_compare(const void *v1, const void *v2)
+{
+ RTENTRY * const *r1 = (RTENTRY * const *) v1;
+ RTENTRY * const *r2 = (RTENTRY * const *) v2;
+#if NEED_KLGETSA
+ register u_long dst1 =
+ ntohl(klgetsa((const struct sockaddr_in *) (*r1)->rt_dst)->
+ sin_addr.s_addr);
+ register u_long dst2 =
+ ntohl(klgetsa((const struct sockaddr_in *) (*r2)->rt_dst)->
+ sin_addr.s_addr);
+#else
+ register u_long dst1 =
+ ntohl(((const struct sockaddr_in *) &((*r1)->rt_dst))->sin_addr.
+ s_addr);
+ register u_long dst2 =
+ ntohl(((const struct sockaddr_in *) &((*r2)->rt_dst))->sin_addr.
+ s_addr);
+#endif /* NEED_KLGETSA */
+
+ /*
+ * Do the comparison
+ */
+ if (dst1 == dst2)
+ return (0);
+ if (dst1 > dst2)
+ return (1);
+ return (-1);
+}
+#endif /* hpux11 */
+#endif /* not USE_SYSCTL_ROUTE_DUMP */
+
+#endif /* solaris2 */
+
+#else /* WIN32 cygwin */
+#include <iphlpapi.h>
+#ifndef MIB_IPPROTO_NETMGMT
+#define MIB_IPPROTO_NETMGMT 3
+#endif
+
+PMIB_IPFORWARDROW route_row;
+int create_flag;
+void
+init_var_route(void)
+{
+}
+
+u_char *
+var_ipRouteEntry(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ /*
+ * object identifier is of form:
+ * 1.3.6.1.2.1.4.21.1.?.A.B.C.D, where A.B.C.D is IP address.
+ * IPADDR starts at offset 10.
+ */
+ register int Save_Valid, result, RtIndex;
+ static int saveNameLen = 0, saveExact = 0, saveRtIndex =
+ 0, rtsize = 0;
+ static oid saveName[MAX_OID_LEN], Current[MAX_OID_LEN];
+ u_char *cp;
+ oid *op;
+ DWORD status = NO_ERROR;
+ DWORD dwActualSize = 0;
+ static PMIB_IPFORWARDTABLE pIpRtrTable = NULL;
+ struct timeval now;
+ static long Time_Of_Last_Reload = 0;
+ u_char dest_addr[4];
+ MIB_IPFORWARDROW temp_row;
+ static in_addr_t addr_ret;
+
+
+ /**
+ ** this optimisation fails, if there is only a single route avail.
+ ** it is a very special case, but better leave it out ...
+ **/
+#if NETSNMP_NO_DUMMY_VALUES
+ saveNameLen = 0;
+#endif
+ if (route_row == NULL) {
+ /*
+ * Free allocated memory in case of SET request's FREE phase
+ */
+ route_row = (PMIB_IPFORWARDROW) malloc(sizeof(MIB_IPFORWARDROW));
+ }
+ gettimeofday(&now, (struct timezone *) 0);
+ if ((rtsize <= 1) || (Time_Of_Last_Reload + 5 <= now.tv_sec))
+ Save_Valid = 0;
+ else
+ /*
+ * OPTIMIZATION:
+ *
+ * If the name was the same as the last name, with the possible
+ * exception of the [9]th token, then don't read the routing table
+ *
+ */
+
+ if ((saveNameLen == (int) *length) && (saveExact == exact)) {
+ register int temp = name[9];
+ name[9] = 0;
+ Save_Valid =
+ (snmp_oid_compare(name, *length, saveName, saveNameLen) == 0);
+ name[9] = temp;
+ } else
+ Save_Valid = 0;
+
+ if (Save_Valid) {
+ register int temp = name[9]; /* Fix up 'lowest' found entry */
+ memcpy((char *) name, (char *) Current, 14 * sizeof(oid));
+ name[9] = temp;
+ *length = 14;
+ RtIndex = saveRtIndex;
+ } else {
+ /*
+ * fill in object part of name for current(less sizeof instance part)
+ */
+
+ memcpy((char *) Current, (char *) vp->name,
+ (int) (vp->namelen) * sizeof(oid));
+
+
+ if ((Time_Of_Last_Reload + 5 <= now.tv_sec)
+ || (pIpRtrTable == NULL)) {
+ if (pIpRtrTable != NULL)
+ free(pIpRtrTable);
+ Time_Of_Last_Reload = now.tv_sec;
+ /*
+ * query for buffer size needed
+ */
+ status = GetIpForwardTable(pIpRtrTable, &dwActualSize, TRUE);
+ if (status == ERROR_INSUFFICIENT_BUFFER) {
+ pIpRtrTable = (PMIB_IPFORWARDTABLE) malloc(dwActualSize);
+ if (pIpRtrTable != NULL) {
+ /*
+ * Get the sorted IP Route Table
+ */
+ status =
+ GetIpForwardTable(pIpRtrTable, &dwActualSize,
+ TRUE);
+ }
+ }
+ }
+ if (status == NO_ERROR) {
+ rtsize = pIpRtrTable->dwNumEntries;
+ for (RtIndex = 0; RtIndex < rtsize; RtIndex++) {
+ cp = (u_char *) & pIpRtrTable->table[RtIndex].
+ dwForwardDest;
+ op = Current + 10;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+
+ result = snmp_oid_compare(name, *length, Current, 14);
+ if ((exact && (result == 0)) || (!exact && (result < 0)))
+ break;
+ }
+ }
+ if (RtIndex >= rtsize) {
+ /*
+ * for creation of new row, only ipNetToMediaTable case is considered
+ */
+ if (*length == 14) {
+ create_flag = 1;
+ *write_method = write_rte;
+ dest_addr[0] = (u_char) name[10];
+ dest_addr[1] = (u_char) name[11];
+ dest_addr[2] = (u_char) name[12];
+ dest_addr[3] = (u_char) name[13];
+ temp_row.dwForwardDest = *((DWORD *) dest_addr);
+ temp_row.dwForwardPolicy = 0;
+ temp_row.dwForwardProto = MIB_IPPROTO_NETMGMT;
+ *route_row = temp_row;
+ }
+ free(pIpRtrTable);
+ pIpRtrTable = NULL;
+ rtsize = 0;
+ return (NULL);
+ }
+ create_flag = 0;
+ /*
+ * Save in the 'cache'
+ */
+ memcpy((char *) saveName, (char *) name,
+ SNMP_MIN(*length, MAX_OID_LEN) * sizeof(oid));
+ saveName[9] = 0;
+ saveNameLen = *length;
+ saveExact = exact;
+ saveRtIndex = RtIndex;
+
+ /*
+ * Return the name
+ */
+ memcpy((char *) name, (char *) Current, 14 * sizeof(oid));
+ *length = 14;
+ }
+ *var_len = sizeof(long_return);
+ *route_row = pIpRtrTable->table[RtIndex];
+
+ switch (vp->magic) {
+ case IPROUTEDEST:
+ *var_len = sizeof(addr_ret);
+ *write_method = write_rte;
+ addr_ret = pIpRtrTable->table[RtIndex].dwForwardDest;
+ return (u_char *) & addr_ret;
+ case IPROUTEIFINDEX:
+ *write_method = write_rte;
+ long_return = pIpRtrTable->table[RtIndex].dwForwardIfIndex;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC1:
+ *write_method = write_rte;
+ long_return = pIpRtrTable->table[RtIndex].dwForwardMetric1;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC2:
+ *write_method = write_rte;
+ long_return = pIpRtrTable->table[RtIndex].dwForwardMetric2;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC3:
+ *write_method = write_rte;
+ long_return = pIpRtrTable->table[RtIndex].dwForwardMetric3;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC4:
+ *write_method = write_rte;
+ long_return = pIpRtrTable->table[RtIndex].dwForwardMetric4;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC5:
+ *write_method = write_rte;
+ long_return = pIpRtrTable->table[RtIndex].dwForwardMetric5;
+ return (u_char *) & long_return;
+ case IPROUTENEXTHOP:
+ *var_len = sizeof(addr_ret);
+ *write_method = write_rte;
+ addr_ret = pIpRtrTable->table[RtIndex].dwForwardNextHop;
+ return (u_char *) & addr_ret;
+ case IPROUTETYPE:
+ *write_method = write_rte;
+ long_return = pIpRtrTable->table[RtIndex].dwForwardType;
+ return (u_char *) & long_return;
+ case IPROUTEPROTO:
+ long_return = pIpRtrTable->table[RtIndex].dwForwardProto;
+ return (u_char *) & long_return;
+ case IPROUTEAGE:
+ *write_method = write_rte;
+ long_return = pIpRtrTable->table[RtIndex].dwForwardAge;
+ return (u_char *) & long_return;
+ case IPROUTEMASK:
+ *write_method = write_rte;
+ *var_len = sizeof(addr_ret);
+ addr_ret = pIpRtrTable->table[RtIndex].dwForwardMask;
+ return (u_char *) & addr_ret;
+ case IPROUTEINFO:
+ *var_len = nullOidLen;
+ return (u_char *) nullOid;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ipRouteEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+#endif /* WIN32 cygwin */
+
+#else /* NETSNMP_CAN_USE_SYSCTL */
+
+static
+TAILQ_HEAD(, snmprt)
+ rthead;
+ static char *rtbuf;
+ static size_t rtbuflen;
+ static time_t lasttime;
+
+ struct snmprt {
+ TAILQ_ENTRY(snmprt) link;
+ struct rt_msghdr *hdr;
+ struct in_addr dest;
+ struct in_addr gateway;
+ struct in_addr netmask;
+ int index;
+ struct in_addr ifa;
+ };
+
+ static void
+ rtmsg(struct rt_msghdr *rtm)
+{
+ struct snmprt *rt;
+ struct sockaddr *sa;
+ int bit, gotdest, gotmask;
+
+ rt = malloc(sizeof *rt);
+ if (rt == 0)
+ return;
+ rt->hdr = rtm;
+ rt->ifa.s_addr = 0;
+ rt->dest = rt->gateway = rt->netmask = rt->ifa;
+ rt->index = rtm->rtm_index;
+
+ gotdest = gotmask = 0;
+ sa = (struct sockaddr *) (rtm + 1);
+ for (bit = 1; ((char *) sa < (char *) rtm + rtm->rtm_msglen) && bit;
+ bit <<= 1) {
+ if ((rtm->rtm_addrs & bit) == 0)
+ continue;
+ switch (bit) {
+ case RTA_DST:
+#define satosin(sa) ((struct sockaddr_in *)(sa))
+ rt->dest = satosin(sa)->sin_addr;
+ gotdest = 1;
+ break;
+ case RTA_GATEWAY:
+ if (sa->sa_family == AF_INET)
+ rt->gateway = satosin(sa)->sin_addr;
+ break;
+ case RTA_NETMASK:
+ if (sa->sa_len >= offsetof(struct sockaddr_in, sin_addr))
+ rt->netmask = satosin(sa)->sin_addr;
+ gotmask = 1;
+ break;
+ case RTA_IFA:
+ if (sa->sa_family == AF_INET)
+ rt->ifa = satosin(sa)->sin_addr;
+ break;
+ }
+ /*
+ * from rtsock.c
+ */
+#define ROUNDUP(a) \
+ ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
+ sa = (struct sockaddr *) ((char *) sa + ROUNDUP(sa->sa_len));
+ }
+ if (!gotdest) {
+ /*
+ * XXX can't happen if code above is correct
+ */
+ snmp_log(LOG_ERR, "route no dest?\n");
+ free(rt);
+ } else {
+ /*
+ * If no mask provided, it was a host route.
+ */
+ if (!gotmask)
+ rt->netmask.s_addr = ~0;
+ TAILQ_INSERT_TAIL(&rthead, rt, link);
+ }
+}
+
+static int
+suck_krt(int force)
+{
+ time_t now;
+ struct snmprt *rt, *next;
+ size_t len;
+ static int name[6] =
+ { CTL_NET, PF_ROUTE, 0, AF_INET, NET_RT_DUMP, 0 };
+ char *cp;
+ struct rt_msghdr *rtm;
+
+ time(&now);
+ if (now < (lasttime + CACHE_TIME) && !force)
+ return 0;
+ lasttime = now;
+
+ for (rt = rthead.tqh_first; rt; rt = next) {
+ next = rt->link.tqe_next;
+ free(rt);
+ }
+ TAILQ_INIT(&rthead);
+
+ if (sysctl(name, 6, 0, &len, 0, 0) < 0) {
+ syslog(LOG_WARNING, "sysctl net-route-dump: %m");
+ return -1;
+ }
+
+ if (len > rtbuflen) {
+ char *newbuf;
+ newbuf = realloc(rtbuf, len);
+ if (newbuf == 0)
+ return -1;
+ rtbuf = newbuf;
+ rtbuflen = len;
+ }
+
+ if (sysctl(name, 6, rtbuf, &len, 0, 0) < 0) {
+ syslog(LOG_WARNING, "sysctl net-route-dump: %m");
+ return -1;
+ }
+
+ cp = rtbuf;
+ while (cp < rtbuf + len) {
+ rtm = (struct rt_msghdr *) cp;
+ /*
+ * NB:
+ * You might want to exclude routes with RTF_WASCLONED
+ * set. This keeps the cloned host routes (and thus also
+ * ARP entries) out of the routing table. Thus, it also
+ * presents management stations with an incomplete view.
+ * I believe that it should be possible for a management
+ * station to examine (and perhaps delete) such routes.
+ */
+ if (rtm->rtm_version == RTM_VERSION && rtm->rtm_type == RTM_GET)
+ rtmsg(rtm);
+ cp += rtm->rtm_msglen;
+ }
+ return 0;
+}
+
+u_char *
+var_ipRouteEntry(struct variable * vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ /*
+ * object identifier is of form:
+ * 1.3.6.1.2.1.4.21.1.1.A.B.C.D, where A.B.C.D is IP address.
+ * IPADDR starts at offset 10.
+ */
+ int Save_Valid, result;
+ u_char *cp;
+ oid *op;
+ struct snmprt *rt;
+ static struct snmprt *savert;
+ static int saveNameLen, saveExact;
+ static oid saveName[14], Current[14];
+ static in_addr_t addr_ret;
+
+ *write_method = NULL; /* write_rte; XXX: SET support not really implemented */
+
+#if 0
+ /*
+ * OPTIMIZATION:
+ *
+ * If the name was the same as the last name, with the possible
+ * exception of the [9]th token, then don't read the routing table
+ *
+ */
+
+ if ((saveNameLen == *length) && (saveExact == exact)) {
+ int temp = name[9];
+ name[9] = 0;
+ Save_Valid =
+ !snmp_oid_compare(name, *length, saveName, saveNameLen);
+ name[9] = temp;
+ } else {
+ Save_Valid = 0;
+ }
+#else
+ Save_Valid = 0;
+#endif
+
+ if (Save_Valid) {
+ int temp = name[9];
+ memcpy(name, Current, 14 * sizeof(oid));
+ name[9] = temp;
+ *length = 14;
+ rt = savert;
+ } else {
+ /*
+ * fill in object part of name for current
+ * (less sizeof instance part)
+ */
+
+ memcpy(Current, vp->name, SNMP_MIN(sizeof(Current), (int)(vp->namelen) * sizeof(oid)));
+
+ suck_krt(0);
+
+ for (rt = rthead.tqh_first; rt; rt = rt->link.tqe_next) {
+ op = Current + 10;
+ cp = (u_char *) & rt->dest;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ *op++ = *cp++;
+ result = snmp_oid_compare(name, *length, Current, 14);
+ if ((exact && (result == 0))
+ || (!exact && (result < 0)))
+ break;
+ }
+ if (rt == NULL)
+ return NULL;
+
+ /*
+ * Save in the 'cache'
+ */
+ memcpy(saveName, name, SNMP_MIN(sizeof(saveName), *length * sizeof(oid)));
+ saveName[9] = 0;
+ saveNameLen = *length;
+ saveExact = exact;
+ savert = rt;
+
+ /*
+ * Return the name
+ */
+ memcpy(name, Current, 14 * sizeof(oid));
+ *length = 14;
+ }
+
+ *var_len = sizeof(long_return);
+
+ switch (vp->magic) {
+ case IPROUTEDEST:
+ addr_ret = rt->dest.s_addr;
+ *var_len = sizeof(addr_ret);
+ return (u_char *) & addr_ret;
+
+ case IPROUTEIFINDEX:
+ long_return = rt->index;
+ return (u_char *) & long_return;
+
+ case IPROUTEMETRIC1:
+ long_return = (rt->hdr->rtm_flags & RTF_GATEWAY) ? 1 : 0;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC2:
+ long_return = rt->hdr->rtm_rmx.rmx_rtt;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC3:
+ long_return = rt->hdr->rtm_rmx.rmx_rttvar;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC4:
+ long_return = rt->hdr->rtm_rmx.rmx_ssthresh;
+ return (u_char *) & long_return;
+ case IPROUTEMETRIC5:
+ long_return = rt->hdr->rtm_rmx.rmx_mtu;
+ return (u_char *) & long_return;
+
+ case IPROUTENEXTHOP:
+ *var_len = sizeof(addr_ret);
+ if (rt->gateway.s_addr == 0 && rt->ifa.s_addr == 0)
+ addr_ret = 0;
+ else if (rt->gateway.s_addr == 0)
+ addr_ret = rt->ifa.s_addr;
+ else
+ addr_ret = rt->gateway.s_addr;
+ return (u_char *) & addr_ret;
+
+ case IPROUTETYPE:
+ if (rt->hdr->rtm_flags & RTF_UP) {
+ if (rt->hdr->rtm_flags & RTF_GATEWAY) {
+ long_return = 4; /* indirect(4) */
+ } else {
+ long_return = 3; /* direct(3) */
+ }
+ } else {
+ long_return = 2; /* invalid(2) */
+ }
+ return (u_char *) & long_return;
+
+ case IPROUTEPROTO:
+ long_return = (rt->hdr->rtm_flags & RTF_DYNAMIC) ? 4 : 2;
+ return (u_char *) & long_return;
+
+ case IPROUTEAGE:
+#if NETSNMP_NO_DUMMY_VALUES
+ return NULL;
+#endif
+ long_return = 0;
+ return (u_char *) & long_return;
+
+ case IPROUTEMASK:
+ addr_ret = rt->netmask.s_addr;
+ *var_len = sizeof(addr_ret);
+ return (u_char *) & addr_ret;
+
+ case IPROUTEINFO:
+ *var_len = nullOidLen;
+ return (u_char *) nullOid;
+ default:
+ DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_ipRouteEntry\n",
+ vp->magic));
+ }
+ return NULL;
+}
+
+void
+init_var_route(void)
+{
+ ;
+}
+
+#endif /* NETSNMP_CAN_USE_SYSCTL */
+
+#if defined(HAVE_SYS_SYSCTL_H) && !defined(linux)
+/*
+ * get_address()
+ *
+ * Traverse the address structures after a routing socket message and
+ * extract a specific one.
+ *
+ * Some of this is peculiar to IRIX 6.2, which doesn't have sa_len in
+ * the sockaddr structure yet. With sa_len, skipping an address entry
+ * would be much easier.
+ */
+#include <sys/un.h>
+
+/*
+ * returns the length of a socket structure
+ */
+
+size_t
+snmp_socket_length(int family)
+{
+ size_t length;
+
+ switch (family) {
+#ifndef cygwin
+#if !defined (WIN32) && !defined (cygwin)
+#ifdef AF_UNIX
+ case AF_UNIX:
+ length = sizeof(struct sockaddr_un);
+ break;
+#endif /* AF_UNIX */
+#endif
+#endif
+
+#ifndef aix3
+#ifdef AF_LINK
+ case AF_LINK:
+#ifdef _MAX_SA_LEN
+ length = _MAX_SA_LEN;
+#elif SOCK_MAXADDRLEN
+ length = SOCK_MAXADDRLEN;
+#else
+ length = sizeof(struct sockaddr_dl);
+#endif
+ break;
+#endif /* AF_LINK */
+#endif
+
+ case AF_INET:
+ length = sizeof(struct sockaddr_in);
+ break;
+ default:
+ length = sizeof(struct sockaddr);
+ break;
+ }
+
+ return length;
+}
+
+const struct sockaddr *
+get_address(const void *_ap, int addresses, int wanted)
+{
+ const struct sockaddr *ap = (const struct sockaddr *) _ap;
+ int iindex;
+ int bitmask;
+
+ for (iindex = 0, bitmask = 1;
+ iindex < RTAX_MAX; ++iindex, bitmask <<= 1) {
+ if (bitmask == wanted) {
+ if (bitmask & addresses) {
+ return ap;
+ } else {
+ return 0;
+ }
+ } else if (bitmask & addresses) {
+ unsigned length =
+ (unsigned) snmp_socket_length(ap->sa_family);
+ while (length % sizeof(long) != 0)
+ ++length;
+ ap = (const struct sockaddr *) ((const char *) ap + length);
+ }
+ }
+ return 0;
+}
+
+/*
+ * get_in_address()
+ *
+ * Convenience function for the special case of get_address where an
+ * AF_INET address is desired, and we're only interested in the in_addr
+ * part.
+ */
+const struct in_addr *
+get_in_address(const void *ap, int addresses, int wanted)
+{
+ const struct sockaddr_in *a;
+
+ a = (const struct sockaddr_in *) get_address(ap, addresses, wanted);
+ if (a == NULL)
+ return NULL;
+
+ if (a->sin_family != AF_INET) {
+ DEBUGMSGTL(("snmpd",
+ "unknown socket family %d [AF_INET expected] in var_ipRouteEntry.\n",
+ a->sin_family));
+ }
+ return &a->sin_addr;
+}
+#endif /* HAVE_SYS_SYSCTL_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/var_route.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/var_route.h
new file mode 100644
index 0000000000..91ecee8d71
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibII/var_route.h
@@ -0,0 +1,26 @@
+/*
+ * Template MIB group interface - var_route.h
+ *
+ */
+#ifndef _MIBGROUP_VAR_ROUTE_H
+#define _MIBGROUP_VAR_ROUTE_H
+
+config_require(mibII/ip util_funcs)
+config_arch_require(solaris2, kernel_sunos5)
+
+ void init_var_route(void);
+#if defined(RTENTRY_4_4) && !defined(hpux11)
+ struct radix_node;
+ void load_rtentries(struct radix_node *);
+#endif
+#if defined(freebsd2) || defined(netbsd1) || defined(bsdi2) || defined(openbsd2)
+ struct sockaddr_in *klgetsa(struct sockaddr_in *);
+#endif
+
+ extern FindVarMethod var_ipRouteEntry;
+
+#if !defined(hpux11) && !defined(solaris2)
+ RTENTRY **netsnmp_get_routes(size_t *out_numroutes);
+#endif
+
+#endif /* _MIBGROUP_VAR_ROUTE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibdefs.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibdefs.h
new file mode 100644
index 0000000000..260cae1379
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibdefs.h
@@ -0,0 +1,14 @@
+/*
+ * 2 global mib defs:
+ * ERRORFLAG: A binary flag to signal an error condition.
+ * Also used as exit code.
+ * ERRORMSG: A text message describing what caused the above condition,
+ * Also used as the single line return message from programs
+ */
+
+#define MIBINDEX 1
+#define ERRORNAME 2
+#define ERRORFLAG 100
+#define ERRORMSG 101
+#define ERRORFIX 102
+#define ERRORFIXCMD 103
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mibincl.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibincl.h
new file mode 100644
index 0000000000..28ed599cc6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mibincl.h
@@ -0,0 +1,52 @@
+/*
+ * mibincl.h
+ */
+
+#include <stdio.h>
+#include <sys/types.h>
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+#if TIME_WITH_SYS_TIME
+# ifdef WIN32
+# include <sys/timeb.h>
+# else
+# include <sys/time.h>
+# endif
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#include <net-snmp/agent/mib_module_config.h>
+
+#include <net-snmp/library/asn1.h>
+#include <net-snmp/library/snmp_api.h>
+#include <net-snmp/library/snmp_impl.h>
+#include <net-snmp/library/snmp_client.h>
+
+#include <net-snmp/agent/snmp_vars.h>
+#include <net-snmp/agent/agent_read_config.h>
+#include <net-snmp/agent/agent_handler.h>
+#include <net-snmp/agent/agent_registry.h>
+#include <net-snmp/agent/var_struct.h>
+
+#include <net-snmp/library/snmp.h>
+#include <net-snmp/library/mib.h>
+#include <net-snmp/library/snmp_debug.h>
+#include <net-snmp/library/snmp_logging.h>
+#include <net-snmp/library/snmp_alarm.h>
+#include <net-snmp/library/read_config.h>
+#include <net-snmp/library/tools.h>
+#include <net-snmp/agent/agent_trap.h>
+#include <net-snmp/library/callback.h>
+#define u_char unsigned char
+#define u_short unsigned short
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/misc/ipfwacc.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/misc/ipfwacc.c
new file mode 100644
index 0000000000..d4fe67d468
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/misc/ipfwacc.c
@@ -0,0 +1,347 @@
+/****************************************************************************
+ * Module for ucd-snmpd reading IP Firewall accounting rules. *
+ * It reads "/proc/net/ip_acct". If the file has a wrong format it silently *
+ * returns erroneous data but doesn't do anything harmfull. Based (on the *
+ * output of) mib2c, wombat.c, proc.c and the Linux kernel. *
+ * Author: Cristian.Estan@net.utcluj.ro *
+ ***************************************************************************/
+
+#include <net-snmp/net-snmp-config.h>
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "util_funcs.h"
+#include "ipfwacc.h"
+
+/*
+ * According to the 2.0.33 Linux kernel, assuming we use ipv4 any line from
+ * * "/proc/net/ip_acct should fit into
+ * * 8+1+8+2+8+1+8+1+16+1+8+1+4+1+2+1+2+1+20+20+10*(1+5)+2+2+2+2=182
+ * * characters+ newline.
+ */
+#define IPFWRULELEN 200
+
+#define IP_FW_F_ALL 0x0000 /* This is a universal packet firewall */
+#define IP_FW_F_TCP 0x0001 /* This is a TCP packet firewall */
+#define IP_FW_F_UDP 0x0002 /* This is a UDP packet firewall */
+#define IP_FW_F_ICMP 0x0003 /* This is a ICMP packet firewall */
+#define IP_FW_F_KIND 0x0003 /* Mask to isolate firewall kind */
+#define IP_FW_F_SRNG 0x0008 /* The first two src ports are a min *
+ * and max range (stored in host byte *
+ * order). */
+#define IP_FW_F_DRNG 0x0010 /* The first two dst ports are a min *
+ * and max range (stored in host byte *
+ * order). *
+ * (ports[0] <= port <= ports[1]) */
+#define IP_FW_F_BIDIR 0x0040 /* For bidirectional firewalls */
+#define IP_FW_F_ACCTIN 0x1000 /* Account incoming packets only. */
+#define IP_FW_F_ACCTOUT 0x2000 /* Account outgoing packets only. */
+
+static unsigned char rule[IPFWRULELEN]; /*Buffer for reading a line from
+ * /proc/net/ip_acct. Care has been taken
+ * not to read beyond the end of this
+ * buffer, even if rules are in an
+ * unexpected format
+ */
+
+/*
+ * This function reads the rule with the given number into the buffer. It
+ * * returns the number of rule read or 0 if the number is invalid or other
+ * * problems occur. If the argument is 0 it returns the number of accounting
+ * * rules. No caching of rules is done.
+ */
+
+static int
+readrule(unsigned int number)
+{
+ int i;
+ FILE *f = fopen("/proc/net/ip_acct", "rt");
+
+ if (!f)
+ return 0;
+ /*
+ * get rid of "IP accounting rules" line
+ */
+ if (!fgets(rule, sizeof(rule), f)) {
+ fclose(f);
+ return 0;
+ }
+ for (i = 1; i != number; i++)
+ if (!fgets(rule, sizeof(rule), f)) {
+ fclose(f);
+ return (number ? 0 : (i - 1));
+ }
+ if (!fgets(rule, sizeof(rule), f)) {
+ fclose(f);
+ return 0;
+ }
+ fclose(f);
+ return i;
+}
+
+static unsigned long ret_val; /* Used by var_ipfwacc to return ulongs */
+
+/*
+ * This function converts the hexadecimal representation of an IP address from
+ * * the rule buffer to an unsigned long. The result is stored in the ret_val
+ * * variable. The parameter indicates the position where the address starts. It
+ * * only works with uppercase letters and assumes input is correct. Had to use
+ * * this because stol returns a signed long.
+ */
+
+static inline void
+atoip(int pos)
+{
+ int i;
+
+ ret_val = 0;
+ for (i = 0; i < 32; i += 8) {
+ unsigned long value = (((rule[pos]) >= '0' && rule[pos] <= '9') ?
+ rule[pos] - '0' : rule[pos] - 'A' + 10);
+ pos++;
+ value = (value << 4) + (((rule[pos]) >= '0' && rule[pos] <= '9') ?
+ rule[pos] - '0' : rule[pos] - 'A' + 10);
+ pos++;
+ ret_val |= (value << i);
+ }
+}
+
+/*
+ * This function parses the flags field from the line in the buffer
+ */
+
+static unsigned long int
+getflags(void)
+{
+ unsigned long int flags;
+ int i = 37; /* position in the rule */
+
+ /*
+ * skipping via name
+ */
+ while (rule[i] != ' ' && i < IPFWRULELEN - 12)
+ i++;
+ /*
+ * skipping via address
+ */
+ i += 10;
+ for (flags = 0; rule[i] != ' ' && i < IPFWRULELEN - 1; i++) {
+ int value = (((rule[i]) >= '0' && rule[i] <= '9') ?
+ rule[i] - '0' : rule[i] - 'A' + 10);
+ flags = (flags << 4) + value;
+ }
+ return flags;
+}
+
+/*
+ * This function reads into ret_val a field from the rule buffer. The field
+ * * is a base 10 long integer and the parameter skip tells us how many fields
+ * * to skip after the "via addrress" field (including the flag field)
+ */
+
+static void
+getnumeric(int skip)
+{
+ int i = 37; /* position in the rule */
+
+ /*
+ * skipping via name
+ */
+ while (rule[i] != ' ' && i < IPFWRULELEN - 12)
+ i++;
+ /*
+ * skipping via address
+ */
+ i += 10;
+ while (skip > 0) {
+ skip--;
+ /*
+ * skipping field, than subsequent spaces
+ */
+ while (rule[i] != ' ' && i < IPFWRULELEN - 2)
+ i++;
+ while (rule[i] == ' ' && i < IPFWRULELEN - 1)
+ i++;
+ }
+ for (ret_val = 0; rule[i] != ' ' && i < IPFWRULELEN - 1; i++)
+ ret_val = ret_val * 10 + rule[i] - '0';
+}
+
+/*
+ * this variable defines function callbacks and type return information
+ * for the ipfwaccounting mib
+ */
+
+struct variable2 ipfwacc_variables[] = {
+ {IPFWACCINDEX, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCINDEX}},
+ {IPFWACCSRCADDR, ASN_IPADDRESS, RONLY, var_ipfwacc, 1,
+ {IPFWACCSRCADDR}},
+ {IPFWACCSRCNM, ASN_IPADDRESS, RONLY, var_ipfwacc, 1, {IPFWACCSRCNM}},
+ {IPFWACCDSTADDR, ASN_IPADDRESS, RONLY, var_ipfwacc, 1,
+ {IPFWACCDSTADDR}},
+ {IPFWACCDSTNM, ASN_IPADDRESS, RONLY, var_ipfwacc, 1, {IPFWACCDSTNM}},
+ {IPFWACCVIANAME, ASN_OCTET_STR, RONLY, var_ipfwacc, 1,
+ {IPFWACCVIANAME}},
+ {IPFWACCVIAADDR, ASN_IPADDRESS, RONLY, var_ipfwacc, 1,
+ {IPFWACCVIAADDR}},
+ {IPFWACCPROTO, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCPROTO}},
+ {IPFWACCBIDIR, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCBIDIR}},
+ {IPFWACCDIR, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCDIR}},
+ {IPFWACCBYTES, ASN_COUNTER, RONLY, var_ipfwacc, 1, {IPFWACCBYTES}},
+ {IPFWACCPACKETS, ASN_COUNTER, RONLY, var_ipfwacc, 1, {IPFWACCPACKETS}},
+ {IPFWACCNSRCPRTS, ASN_INTEGER, RONLY, var_ipfwacc, 1,
+ {IPFWACCNSRCPRTS}},
+ {IPFWACCNDSTPRTS, ASN_INTEGER, RONLY, var_ipfwacc, 1,
+ {IPFWACCNDSTPRTS}},
+ {IPFWACCSRCISRNG, ASN_INTEGER, RONLY, var_ipfwacc, 1,
+ {IPFWACCSRCISRNG}},
+ {IPFWACCDSTISRNG, ASN_INTEGER, RONLY, var_ipfwacc, 1,
+ {IPFWACCDSTISRNG}},
+ {IPFWACCPORT1, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCPORT1}},
+ {IPFWACCPORT2, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCPORT2}},
+ {IPFWACCPORT3, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCPORT3}},
+ {IPFWACCPORT4, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCPORT4}},
+ {IPFWACCPORT5, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCPORT5}},
+ {IPFWACCPORT6, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCPORT6}},
+ {IPFWACCPORT7, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCPORT7}},
+ {IPFWACCPORT8, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCPORT8}},
+ {IPFWACCPORT9, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCPORT9}},
+ {IPFWACCPORT10, ASN_INTEGER, RONLY, var_ipfwacc, 1, {IPFWACCPORT10}}
+};
+
+oid ipfwacc_variables_oid[] =
+ { 1, 3, 6, 1, 4, 1, 2021, 13, 1, 1, 1 };
+
+void
+init_ipfwacc(void)
+{
+ REGISTER_MIB("misc/ipfwacc", ipfwacc_variables, variable2,
+ ipfwacc_variables_oid);
+}
+
+
+u_char *
+var_ipfwacc(struct variable *vp,
+ oid * name,
+ size_t * length,
+ int exact, size_t * var_len, WriteMethod ** write_method)
+{
+ *write_method = 0; /* assume it isnt writable for the time being */
+ *var_len = sizeof(ret_val); /* assume an integer and change later if not */
+
+ if (header_simple_table
+ (vp, name, length, exact, var_len, write_method, readrule(0)))
+ return (NULL);
+
+ if (readrule(name[*length - 1])) {
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch (vp->magic) {
+ case IPFWACCINDEX:
+ ret_val = name[*length - 1];
+ return ((u_char *) (&ret_val));
+ case IPFWACCSRCADDR:
+ atoip(0);
+ return ((u_char *) (&ret_val));
+ case IPFWACCSRCNM:
+ atoip(9);
+ return ((u_char *) (&ret_val));
+ case IPFWACCDSTADDR:
+ atoip(19);
+ return ((u_char *) (&ret_val));
+ case IPFWACCDSTNM:
+ atoip(28);
+ return ((u_char *) (&ret_val));
+ case IPFWACCVIANAME:
+ {
+ int i = 37; /* position in the rule */
+ while (rule[i] != ' ' && i < IPFWRULELEN - 1)
+ i++;
+ rule[i] = 0;
+ return (rule + 37);
+ }
+ case IPFWACCVIAADDR:
+ {
+ int i = 37; /* position in the rule */
+ while (rule[i] != ' ' && i < IPFWRULELEN - 9)
+ i++;
+ atoip(i + 1);
+ return ((u_char *) (&ret_val));
+ }
+ case IPFWACCPROTO:
+ switch (getflags() & IP_FW_F_KIND) {
+ case IP_FW_F_ALL:
+ ret_val = 2;
+ return ((u_char *) (&ret_val));
+ case IP_FW_F_TCP:
+ ret_val = 3;
+ return ((u_char *) (&ret_val));
+ case IP_FW_F_UDP:
+ ret_val = 4;
+ return ((u_char *) (&ret_val));
+ case IP_FW_F_ICMP:
+ ret_val = 5;
+ return ((u_char *) (&ret_val));
+ default:
+ ret_val = 1;
+ return ((u_char *) (&ret_val));
+ }
+ case IPFWACCBIDIR:
+ ret_val = ((getflags() & IP_FW_F_BIDIR) ? 2 : 1);
+ return ((u_char *) (&ret_val));
+ case IPFWACCDIR:
+ ret_val = (getflags() & (IP_FW_F_ACCTIN | IP_FW_F_ACCTOUT));
+ if (ret_val == IP_FW_F_ACCTIN)
+ ret_val = 2;
+ else if (ret_val == IP_FW_F_ACCTOUT)
+ ret_val = 3;
+ else
+ ret_val = 1;
+ return ((u_char *) (&ret_val));
+ case IPFWACCBYTES:
+ getnumeric(4);
+ return ((u_char *) (&ret_val));
+ case IPFWACCPACKETS:
+ getnumeric(3);
+ return ((u_char *) (&ret_val));
+ case IPFWACCNSRCPRTS:
+ getnumeric(1);
+ return ((u_char *) (&ret_val));
+ case IPFWACCNDSTPRTS:
+ getnumeric(2);
+ return ((u_char *) (&ret_val));
+ case IPFWACCSRCISRNG:
+ ret_val = ((getflags() & IP_FW_F_SRNG) ? 1 : 2);
+ return ((u_char *) (&ret_val));
+ case IPFWACCDSTISRNG:
+ ret_val = ((getflags() & IP_FW_F_DRNG) ? 1 : 2);
+ return ((u_char *) (&ret_val));
+ case IPFWACCPORT1:
+ case IPFWACCPORT2:
+ case IPFWACCPORT3:
+ case IPFWACCPORT4:
+ case IPFWACCPORT5:
+ case IPFWACCPORT6:
+ case IPFWACCPORT7:
+ case IPFWACCPORT8:
+ case IPFWACCPORT9:
+ case IPFWACCPORT10:
+ getnumeric(5 + (vp->magic) - IPFWACCPORT1);
+ return ((u_char *) (&ret_val));
+ }
+ }
+ return NULL;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/misc/ipfwacc.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/misc/ipfwacc.h
new file mode 100644
index 0000000000..d9b6e61f26
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/misc/ipfwacc.h
@@ -0,0 +1,54 @@
+/*
+ * MIB group interface - ipfwacc.h
+ * IP accounting through firewall rules
+ */
+#ifndef _MIBGROUP_IPFWACC_H
+#define _MIBGROUP_IPFWACC_H
+
+/*
+ * we use checkmib from the util_funcs module
+ */
+
+config_require(util_funcs)
+
+ /*
+ * add the mib we implement to the list of default mibs to load
+ */
+config_add_mib(UCD-IPFWACC-MIB)
+
+ /*
+ * Magic number definitions:
+ */
+#define IPFWACCINDEX 1
+#define IPFWACCSRCADDR 2
+#define IPFWACCSRCNM 3
+#define IPFWACCDSTADDR 4
+#define IPFWACCDSTNM 5
+#define IPFWACCVIANAME 6
+#define IPFWACCVIAADDR 7
+#define IPFWACCPROTO 8
+#define IPFWACCBIDIR 9
+#define IPFWACCDIR 10
+#define IPFWACCBYTES 11
+#define IPFWACCPACKETS 12
+#define IPFWACCNSRCPRTS 13
+#define IPFWACCNDSTPRTS 14
+#define IPFWACCSRCISRNG 15
+#define IPFWACCDSTISRNG 16
+#define IPFWACCPORT1 17
+#define IPFWACCPORT2 18
+#define IPFWACCPORT3 19
+#define IPFWACCPORT4 20
+#define IPFWACCPORT5 21
+#define IPFWACCPORT6 22
+#define IPFWACCPORT7 23
+#define IPFWACCPORT8 24
+#define IPFWACCPORT9 25
+#define IPFWACCPORT10 26
+ /*
+ * function definitions
+ */
+ extern void init_ipfwacc(void);
+ extern FindVarMethod var_ipfwacc;
+
+#endif /* _MIBGROUP_IPFWACC_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib.h
new file mode 100644
index 0000000000..a014ec5afa
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib.h
@@ -0,0 +1,5 @@
+config_add_mib(MSTAR-ALARM-MIB)
+config_require(mstar-alarm-mib/eocCbatCardTraps)
+config_require(mstar-alarm-mib/eocCnuTraps)
+config_require(mstar-alarm-mib/eocAlarmsAndTraps)
+config_require(mstar-alarm-mib/eocAlarmsAndTraps_interface)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps.c
new file mode 100644
index 0000000000..fb9475da12
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps.c
@@ -0,0 +1,702 @@
+
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+#include "eocAlarmsAndTraps.h"
+#include "eocCbatCardTraps/eocCbatCardTraps.h"
+#include "eocCnuTraps/eocCnuTraps.h"
+/* include header with interface functions */
+#include "eocAlarmsAndTraps_interface.h"
+
+
+
+/** global trap counter
+ * if trap is issued for the first time, add new rows to snmpNotifyTable,
+ * snmpTargetAddrTable and snmpTargetParamsTable
+ * for subsequently issued traps, modify existing rows of these tables
+ */
+int eoc_trap_count = 0;
+
+/** global maximum current alarm counter
+ * used to ensure that no more than LIBSPID_CURRENT_ALARMS_MAX_NUM are stored
+ * in alarm info file
+ */
+int eoc_max_alarm_count = 0;
+int trap_ip_count = LIBSPID_EOC_TRAP_SERVER_MAX;
+libspid_eoc_trap_entry_t eoc_trap_entry[LIBSPID_EOC_TRAP_SERVER_MAX];
+int trap_port;
+
+
+void
+init_eocAlarmsAndTraps (void)
+{
+ int value = LIBSPID_FALSE;
+
+ char trap_port_str[5];
+
+ DEBUGMSGTL (("eocAlarmsAndTraps",
+ "initializing (setting callback alarm)\n"));
+
+ if (LIBSPID_SUCCESS != libspid_system_nscrtv_eponeoc_mod_eoc (&value))
+ {
+ syslog (LOG_DEBUG,
+ "eocAlarmsAndTraps: error getting mod eoc version!\n");
+ }
+
+
+ /*get the trap info from trap.conf */
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_trap_get_list (eoc_trap_entry, &trap_ip_count))
+ {
+ snmp_log (LOG_ERR,
+ "init_eocAlarmsAndTraps eocCnuTraps_read_trap_item retrun error\n");
+ }
+
+ /* get trap parameters for notify and target tables */
+ if (LIBSPID_SUCCESS !=
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_TRAP_SERVER_PORT,
+ trap_port_str, LIBSPID_KEY_MAX_LEN))
+ {
+ snmp_log (LOG_ERR,
+ "eocCnuTraps: libspid_config_read_item error for trap"
+ " port\n");
+ /* alarm trap port set to default value */
+ trap_port = TRAP_PORT_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than maximum value,
+ * copy only maximum permitted number of bytes */
+ trap_port = strtol (trap_port_str, NULL, 10);
+ }
+
+
+ if (LIBSPID_TRUE == value)
+ {
+
+ //memset (cnu_unauth_info, 0, sizeof (cnu_unauth_info));
+
+ /* make sure current alarm and trap files are empty at initialization */
+ if (0 != clearEoCCurrentAlarms ())
+ {
+ syslog (LOG_DEBUG,
+ "eocAlarmsAndTraps: error clearing current alarm file!\n");
+ }
+
+ if (0 != clearEoCCurrentTraps ())
+ {
+ syslog (LOG_DEBUG,
+ "eocAlarmsAndTraps: error clearing current traps file!\n");
+ }
+
+
+ snmp_alarm_register (ALARM_CHECK_FREQUENCY, /* in seconds */
+ SA_REPEAT, /* callback is called repeatedly */
+ eoc_alarm_callback, /* our callback */
+ NULL /* no callback data needed */
+ );
+ }
+}
+
+/* callback function used for alarm registration */
+void
+eoc_alarm_callback (unsigned int clientreg, void *clientarg)
+{
+ if (eocAlarmsEnabled ())
+ checkAllEoCAlarms ();
+}
+
+/* function returns 1 if trap generation status is enabled and 0 if it
+ * is disabled */
+int
+eocTrapsEnabled ()
+{
+ int trap_status;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_TRAP_ENABLE, buffer,
+ LIBSPID_LINE_MAX_LEN))
+ {
+ syslog (LOG_DEBUG, "eocAlarmsAndTraps: error reading trap enable \n");
+ /* trap generation status set to disabled */
+ trap_status = 0;
+ }
+ else
+ {
+ /* parse trap enable settings from buffer */
+ if (!strncmp
+ (buffer, LIBSPID_SNMP_CONF_VALUE_YES,
+ strlen (LIBSPID_SNMP_CONF_VALUE_YES)))
+ trap_status = 1;
+ else
+ trap_status = 0;
+ }
+
+ return trap_status;
+}
+
+/* function returns 1 if alarm detection is enabled or enabled with
+ * regeneration, and 0 otherwise */
+int
+eocAlarmsEnabled ()
+{
+ admin_alarm_detect_t alarm_detect;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ENABLE,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ syslog (LOG_DEBUG,
+ "eocAlarmsAndTraps: error reading alarm detection\n");
+ /* AlarmDetection set to disabled */
+ alarm_detect = ADMIN_ALARM_DETECT_DISABLED;
+ }
+ else
+ {
+ /* parse alarm detection settings from buffer */
+ if (!strncmp
+ (buffer, LIBSPID_SNMP_CONF_VALUE_YES,
+ strlen (LIBSPID_SNMP_CONF_VALUE_YES)))
+ {
+ alarm_detect = ADMIN_ALARM_DETECT_ENABLED;
+ }
+ else if (!strncmp
+ (buffer, LIBSPID_SNMP_CONF_VALUE_REGENERATE,
+ strlen (LIBSPID_SNMP_CONF_VALUE_REGENERATE)))
+ {
+ alarm_detect = ADMIN_ALARM_DETECT_REGENERATE;
+ }
+ else
+ {
+ alarm_detect = ADMIN_ALARM_DETECT_DISABLED;
+ }
+ }
+
+ if ((alarm_detect == ADMIN_ALARM_DETECT_ENABLED)
+ || (alarm_detect == ADMIN_ALARM_DETECT_REGENERATE))
+ return 1;
+
+ return 0;
+}
+
+void
+checkAllEoCAlarms ()
+{
+
+ eoc_max_alarm_count = 0;
+ /* clear old contents of current alarm file */
+ if (0 != clearEoCCurrentAlarms ())
+ {
+ syslog (LOG_DEBUG,
+ "eocAlarmsAndTraps: error clearing old current alarm file!\n");
+ }
+
+ if (0 != handleEoCCnuAlarmOID ())
+ {
+ syslog (LOG_DEBUG, "eocAlarmsAndTraps: eocCnuAlarm check error!\n");
+ }
+
+ if (0 != checkEoCCBatAlarms ())
+ {
+ syslog (LOG_DEBUG, "eocAlarmsAndTraps: eocCBatAlarm check error!\n");
+ }
+
+}
+
+int
+updateEoCCurrentTraps (char *trap_oid_str)
+{
+ const char delimiter = LIBSPID_TRAP_INFO_DELIMITER[0];
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN] = { 0 };
+ unsigned int elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ char *elt[LIBSPID_CONFIG_ELT_MAX_NB] = { 0 };
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN] = { 0 };
+
+ /* string with current timestamp */
+ char curr_time_str[32];
+
+ /* old value of number of times a trap has been generated */
+ int times_old = 0;
+ /* string with new number of times a trap has been generated */
+ char times_new_str[32];
+
+
+ /* copy given OID string to key */
+ strcpy (key, trap_oid_str);
+
+ /* store current timestamp to string */
+ sprintf (curr_time_str, "%ld", time (NULL));
+
+ /* attempt to read line with given key from trap info file */
+ if (LIBSPID_SUCCESS !=
+ libspid_config_read_line (LIBSPID_TRAP_INFO_PATH,
+ LIBSPID_TRAP_INFO_DELIMITER, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN))
+ {
+ /* in case line with trap OID as a key hasn't been read successfully,
+ * it is assumed that trap with this OID has never been
+ * issued and new line is added */
+ elt[0] = "1";
+ elt[1] = curr_time_str;
+
+ return libspid_config_write_line (LIBSPID_TRAP_INFO_PATH, delimiter,
+ key, 2, elt);
+ }
+
+ /* otherwise update existing line for current key */
+ /* parse old value of number of times */
+ if (1 != sscanf (elt[0], "%d", &times_old))
+ times_old = 0;
+
+ times_old++;
+
+ sprintf (times_new_str, "%d", times_old);
+
+ elt[0] = times_new_str;
+ elt[1] = curr_time_str;
+
+ return libspid_config_write_line (LIBSPID_TRAP_INFO_PATH, delimiter,
+ trap_oid_str, 2, elt);
+}
+
+int
+registerEoCAlarm (char *alarm_oid_str, int state, int value)
+{
+ int i = 0;
+
+ const char delimiter = LIBSPID_ALARM_INFO_DELIMITER[0];
+ char *elt[2];
+
+ char state_str[8];
+ char value_str[8];
+
+ unsigned char taddress[6];
+ char trap_community[16];
+ char trap_ip_bin[4];
+
+
+ /* check OID string */
+ netsnmp_assert (NULL != alarm_oid_str);
+
+ sprintf (state_str, "%d", state);
+ sprintf (value_str, "%d", value);
+
+ elt[0] = state_str;
+ elt[1] = value_str;
+
+ /* register alarm in current alarm info file if maximum count not exceeded */
+ if (eoc_max_alarm_count <= LIBSPID_CURRENT_ALARMS_MAX_NUM)
+ {
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_line (LIBSPID_ALARM_INFO_PATH, delimiter,
+ alarm_oid_str, 2, elt))
+ {
+ syslog (LOG_DEBUG,
+ "eocCnuTraps: error, couldn't update current alarm file");
+ return SNMP_ERR_GENERR;
+ }
+ eoc_max_alarm_count++;
+ }
+
+
+ /* check if traps are allowed in snmp.conf file and verify that trap for
+ * particular OID has not reached maximum times and that the minimum
+ * interval has passed */
+ if (eocTrapsEnabled () && eocTrapOIDAllowed (alarm_oid_str))
+ {
+
+
+ for (i = 0; i < trap_ip_count; i++)
+ {
+ memset (taddress, 0x0, sizeof (taddress));
+ libspid_ip_str_to_bin (eoc_trap_entry[i].ip_address, trap_ip_bin);
+ memcpy (taddress, trap_ip_bin, 4);
+ taddress[5] = (uint16_t) trap_port;
+
+ if (eoc_trap_count == 0)
+ {
+ initEoCNotifyAndTarget (taddress, 6,
+ eoc_trap_entry[i].community,
+ strlen (eoc_trap_entry[i].community));
+ }
+ else
+ {
+ updateEoCNotifyAndTarget (taddress, 6,
+ eoc_trap_entry[i].community,
+ strlen (eoc_trap_entry[i].
+ community));
+ }
+
+ /* send trap */
+ issueEoCTrap (alarm_oid_str, value);
+
+ /* update global trap count */
+ eoc_trap_count++;
+
+ }
+
+ updateEoCCurrentTraps (alarm_oid_str);
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+clearEoCCurrentAlarms ()
+{
+ const char delimiters[2] = LIBSPID_ALARM_INFO_DELIMITER "\0";
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN];
+ unsigned int elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ char *elt[LIBSPID_CONFIG_ELT_MAX_NB];
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN];
+ libspid_error_t error = LIBSPID_SUCCESS;
+ int count = 0;
+ void *user_data = NULL;
+ char *oid_str[LIBSPID_CURRENT_ALARMS_MAX_NUM];
+ char *tmp;
+ int i;
+ int ret;
+
+ tmp = (char *) malloc (LIBSPID_CURRENT_ALARMS_MAX_NUM * 64);
+ if (tmp == NULL)
+ return 0;
+
+ for (i = 0; i < LIBSPID_CURRENT_ALARMS_MAX_NUM; i++)
+ {
+ oid_str[i] = tmp + i * 64;
+ }
+ memset (key, 0x0, sizeof (key));
+
+ error = libspid_config_read_line_repetitive (LIBSPID_ALARM_INFO_PATH,
+ delimiters, key, &elt_number,
+ elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN,
+ &user_data);
+ if (LIBSPID_SUCCESS != error)
+ {
+ free (tmp);
+ return 0;
+ }
+ for (; count < LIBSPID_CURRENT_ALARMS_MAX_NUM
+ && strcmp (key, ""); (count)++)
+ {
+ /* Get a line from the conf file. */
+ elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ error = libspid_config_read_line_repetitive (
+ LIBSPID_ALARM_INFO_PATH, delimiters, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN, &user_data);
+ if (LIBSPID_SUCCESS != error)
+ {
+ free (tmp);
+ return 0;
+ }
+ strcpy (oid_str[count], buffer);
+ }
+ /* Close the file. */
+ libspid_config_read_line_repetitive (0, 0, 0, 0, 0, 0, 0, &user_data);
+
+ for (i = 0; i < count; i++)
+ {
+ if ((!strncmp (oid_str[i], EOCCNUOID, strlen (EOCCNUOID))) ||
+ (!strncmp (oid_str[i], EOCCBATOID, strlen (EOCCBATOID))))
+ {
+
+ ret = libspid_config_remove_line (LIBSPID_ALARM_INFO_PATH,
+ LIBSPID_ALARM_INFO_DELIMITER,
+ oid_str[i]);
+
+ if (ret != LIBSPID_SUCCESS)
+ {
+ LIBSPID_EOC_LOG_2 ("%s: cannot remove alarm info(ret=%d)",
+ __FUNCTION__, ret);
+ free (tmp);
+ return ret;
+ }
+
+ }
+
+ }
+ free (tmp);
+ return 0;
+}
+
+int
+clearEoCCurrentTraps ()
+{
+ const char delimiter = LIBSPID_TRAP_INFO_DELIMITER[0];
+ char *header_key = "#<OID>";
+ char *header_elt[2] = { "<Number of times>", "<Last time>" };
+
+ /* remove current trap file */
+ if (0 != unlink (LIBSPID_TRAP_INFO_PATH))
+ return -1;
+
+ /* create current trap file and write header line */
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_line (LIBSPID_TRAP_INFO_PATH, delimiter,
+ header_key, 2, header_elt))
+ {
+ syslog (LOG_DEBUG,
+ "eocAlarmsAndTraps: error, couldn't write header for current trap file");
+ }
+
+ return 0;
+}
+
+/* obtain trap maximum times and minimal interval necessary for checking
+ * whether generation of particular trap is allowed */
+/* pointers to integers containing maximum times and minimal interval
+ * must be provided as arguments */
+void
+getEoCTrapTimesAndInterval (int *max_times, int *min_interval)
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ int ret;
+ int value;
+
+ /* read buffer for max times from config file */
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_TRAP_MAX_TIMES,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocAlarmsAndTraps: libspid_config_read_item error for "
+ "trap max times\n");
+ /* max times set to default value */
+ *max_times = TRAP_MAX_TIMES_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* parse max times from buffer */
+ if (1 != sscanf (buffer, "%d", &value))
+ *max_times = TRAP_MAX_TIMES_DEFAULT_VALUE;
+ else if ((TRAP_MAX_TIMES_MIN <= value)
+ && (TRAP_MAX_TIMES_MAX >= value))
+ *max_times = value;
+ else
+ *max_times = TRAP_MAX_TIMES_DEFAULT_VALUE;
+ }
+
+ /* read buffer for min interval from config file */
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_TRAP_MIN_INTERVAL,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocAlarmsAndTraps: libspid_config_read_item error for "
+ "trap min interval\n");
+ /* min interval set to default value */
+ *min_interval = TRAP_MIN_INTERVAL_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* parse min interval from buffer */
+ if (1 != sscanf (buffer, "%d", &value))
+ *min_interval = TRAP_MIN_INTERVAL_DEFAULT_VALUE;
+ else if (value >= 0)
+ *min_interval = value;
+ else
+ {
+ snmp_log (LOG_ERR,
+ "eocAlarmsAndTraps: error: negative config file value "
+ "for min interval: %d\n",
+ value);
+ *min_interval = TRAP_MIN_INTERVAL_DEFAULT_VALUE;
+ }
+ }
+
+}
+
+/* add new rows to snmpNotifyTable, snmpTargetAddrTable and snmpTargetParamsTable */
+int
+initEoCNotifyAndTarget (unsigned char *taddress, size_t taddress_len,
+ char *sec_name, size_t sec_name_len)
+{
+
+ addRow_eocNotifyTable ();
+ addRow_eocTargetAddrTable (taddress, taddress_len);
+ addRow_eocTargetParamsTable (sec_name, sec_name_len);
+
+ return 0;
+}
+
+
+/* modify trap destination address and security name in snmpNotifyTable,
+ * snmpTargetAddrTable and snmpTargetParamsTable */
+int
+updateEoCNotifyAndTarget (unsigned char *taddress, size_t taddress_len,
+ char *sec_name, size_t sec_name_len)
+{
+
+ modifyRow_eocTargetAddrTable (taddress, taddress_len);
+ modifyRow_eocTargetParamsTable (sec_name, sec_name_len);
+
+ return 0;
+}
+
+/* function returns 1 if it is allowed to generate trap with given OID and 0
+ * otherwise, based on number of time trap has already been issued,
+ * and interval from last occurrence */
+int
+eocTrapOIDAllowed (char *trap_oid_str)
+{
+ const char delimiters[2] = LIBSPID_TRAP_INFO_DELIMITER "\0";
+ char key[LIBSPID_CONFIG_KEY_MAX_LEN] = { 0 };
+ unsigned int elt_number = LIBSPID_CONFIG_ELT_MAX_NB;
+ char *elt[LIBSPID_CONFIG_ELT_MAX_NB] = { 0 };
+ char buffer[LIBSPID_CONFIG_LINE_MAX_LEN] = { 0 };
+ libspid_error_t error;
+
+
+ /* current value of number of times a trap has been generated */
+ int times_curr;
+ /* current value of last timestamp of trap generation */
+ int last_time_curr;
+
+ /* value of maximum trap times from configuration file */
+ int max_times_conf;
+ /* value of minimal interval between traps from configuration file */
+ int min_interval_conf;
+
+ /* current interval of time passed from last generated timestamp */
+ int interval_curr;
+
+ /* copy given OID string to key */
+ strcpy (key, trap_oid_str);
+
+ /* attempt to read line with given key from trap info file */
+ if (LIBSPID_SUCCESS !=
+ (error =
+ libspid_config_read_line (LIBSPID_TRAP_INFO_PATH, delimiters, key,
+ &elt_number, elt, buffer,
+ LIBSPID_CONFIG_LINE_MAX_LEN)))
+ {
+ /* in case line with trap OID as a key hasn't been read successfully,
+ * it is assumed that trap with this OID has never been issued */
+ return 1;
+ }
+
+ /* parse current values of number of times and last timestamp */
+ if (elt[0] == NULL || 1 != sscanf (elt[0], "%d", &times_curr))
+ times_curr = 0;
+ if (elt[1] == NULL || 1 != sscanf (elt[1], "%d", &last_time_curr))
+ last_time_curr = 0;
+
+ interval_curr = time (NULL) - last_time_curr;
+
+ /* obtain values of maximum times and minimal interval from configuration
+ * file */
+ getEoCTrapTimesAndInterval (&max_times_conf, &min_interval_conf);
+
+ /* compare time and interval values between info file and configuration
+ * and determine if a trap should be allowed */
+ if ((times_curr >= max_times_conf) || (interval_curr < min_interval_conf))
+ return 0;
+
+ return 1;
+
+}
+
+/* send trap with alarm OID as parameter */
+int
+issueEoCTrap (char *alarm_oid_str, int value)
+{
+
+
+ if (!strncmp
+ (alarm_oid_str, EOCCNURFHIGHATTENUATIONALM_OID_STR,
+ strlen (EOCCNURFHIGHATTENUATIONALM_OID_STR)))
+ {
+ send_eocCnuRfHighAttenuationAlm_trap (alarm_oid_str, value, 1);
+ return SNMP_ERR_NOERROR;
+ }
+
+ else if (!strncmp
+ (alarm_oid_str, EOCCNURFHIGHATTENUATIONCLR_OID_STR,
+ strlen (EOCCNURFHIGHATTENUATIONCLR_OID_STR)))
+ {
+ send_eocCnuRfHighAttenuationClr_trap (alarm_oid_str, value, 0);
+ return SNMP_ERR_NOERROR;
+ }
+
+ else if (!strncmp
+ (alarm_oid_str, EOCCNURFLOWATTENUATIONALM_OID_STR,
+ strlen (EOCCNURFLOWATTENUATIONALM_OID_STR)))
+ {
+ send_eocCnuRfLowAttenuationAlm_trap (alarm_oid_str, value, 1);
+ return SNMP_ERR_NOERROR;
+ }
+ else if (!strncmp
+ (alarm_oid_str, EOCCNURFLOWATTENUATIONCLR_OID_STR,
+ strlen (EOCCNURFLOWATTENUATIONCLR_OID_STR)))
+ {
+ send_eocCnuRfLowAttenuationClr_trap (alarm_oid_str, value, 0);
+ return SNMP_ERR_NOERROR;
+ }
+ else if (!strncmp
+ (alarm_oid_str, EOCCNUUNAUTHCNUFIRSTONLINE_OID_STR,
+ strlen (EOCCNUUNAUTHCNUFIRSTONLINE_OID_STR)))
+ {
+ send_eocCnuUnauthCnuFirstOnline_trap (alarm_oid_str, value, 1);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*send EoCCBat traps */
+ if (!strcmp (alarm_oid_str, EOCCBATHIGHTEMPERATUREALMOID))
+ {
+ send_eocCbatHighTemperatureAlm_trap ();
+ return 0;
+ }
+ if (!strcmp (alarm_oid_str, EOCCBATHIHGTEMPERATURECLROID))
+ {
+ send_eocCbatHighTemperatureClr_trap ();
+ return 0;
+ }
+
+ if (!strcmp (alarm_oid_str, EOCCBATLOWTEMPERATUREALMOID))
+ {
+ send_eocCbatLowTemperatureAlm_trap ();
+ return 0;
+ }
+ if (!strcmp (alarm_oid_str, EOCCBATLOWTEMPERATURECLROID))
+ {
+ send_eocCbatLowTemperatureClr_trap ();
+ return 0;
+ }
+
+ if (!strcmp (alarm_oid_str, EOCCBATCARDCPUOVERLOADALMOID))
+ {
+ send_eocCbatCardCpuOverloadAlm_trap ();
+ return 0;
+ }
+ if (!strcmp (alarm_oid_str, EOCCBATCARDCPUOVERLOADCLROID))
+ {
+ send_eocCbatCardCpuOverloadClr_trap ();
+ return 0;
+ }
+
+ if (!strcmp (alarm_oid_str, EOCCBATCARDMEMOVERLOADALMOID))
+ {
+ send_eocCbatCardMemOverloadAlm_trap ();
+ return 0;
+ }
+ if (!strcmp (alarm_oid_str, EOCCBATCARDMEMOVERLOADCLROID))
+ {
+ send_eocCbatCardMemOverloadClr_trap ();
+ return 0;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps.h
new file mode 100644
index 0000000000..1d66cbc7d0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps.h
@@ -0,0 +1,81 @@
+#ifndef EOC_ALARMSANDTRAPS_H
+#define EOC_ALARMSANDTRAPS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* include common header */
+#include "EoCCommon.h"
+
+/* function declarations */
+void
+init_EoCAlarmsAndTraps (void);
+int
+eocAlarmsEnabled (void);
+int
+eocTrapsEnabled (void);
+SNMPAlarmCallback eoc_alarm_callback;
+void
+checkAllEoCAlarms (void);
+int
+handleEoCAnalogAlarmOID (
+ libspid_eoc_analog_alarm_entry_t *analog_alarm,
+ libspid_eoc_analog_alarm_entry_t *old_analog_alarm,
+ libspid_eoc_current_alarm_entry_t *old_curr_alarms,
+ int old_curr_alarm_count);
+int
+handleEoCDiscreteAlarmOID (
+ libspid_eoc_discrete_alarm_entry_t *discrete_alarm);
+int
+checkEoCAnalogAlarm (
+ libspid_eoc_analog_alarm_entry_t *analog_alarm,
+ libspid_eoc_analog_alarm_enable_t *active_triggers,
+ int value, char *suboid);
+int
+checkEoCDiscreteAlarm (
+ libspid_eoc_discrete_alarm_entry_t *discrete_alarm,
+ int value, char *suboid);
+
+
+
+void
+checkEoCTriggeredAnalogOID (
+ libspid_eoc_analog_alarm_entry_t *analog_alarm,
+ libspid_eoc_analog_alarm_entry_t *old_analog_alarm,
+ libspid_eoc_analog_alarm_enable_t *active_triggers,
+ libspid_eoc_current_alarm_entry_t *old_curr_alarms,
+ int old_curr_alarm_count);
+int
+registerEoCAlarm (char *alarm_oid, int state, int value);
+int
+updateEoCCurrentTraps (char *trap_oid_str);
+int
+clearEoCCurrentAlarms ();
+int
+clearEoCCurrentTraps ();
+void
+getEoCTrapTimesAndInterval (int *max_times, int *min_interval);
+int
+initEoCNotifyAndTarget (unsigned char *taddress,
+ size_t taddress_len,
+ char *sec_name,
+ size_t sec_name_len);
+int
+updateEoCNotifyAndTarget (unsigned char *taddress,
+ size_t taddress_len,
+ char *sec_name, size_t sec_name_len);
+int
+eocTrapOIDAllowed (char *trap_oid_str);
+int
+issueEoCTrap (char *alarm_oid_str, int value);
+int
+storeEoCAlarmLog (const char* info);
+void
+clearEoCAlarmLogList ();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCALARMSANDTRAPS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps_interface.c
new file mode 100644
index 0000000000..20fa06e841
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps_interface.c
@@ -0,0 +1,1006 @@
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+
+/* include header with interface functions */
+#include "eocAlarmsAndTraps_interface.h"
+
+/** These functions serve as interface between EoC module for alarms and traps
+ * and existing net-snmp support for trap destination and community.
+ * Functions are used to add necessary information defined in trap
+ * configuration file to snmpNotifyTable, snmpTargetAddrTable or
+ * eocTargetParamsTable, or to modify existing information.
+ * Note: since EoC trap configuration file defines only one trap destination
+ * and community, all functions add or modify single row of notify and target
+ * tables.
+ * For convenience, this row is indexed by constant string value hard-coded
+ * in interface header.
+ * ASCII representation of this index value is also embedded in defines for
+ * all OIDs necessary for manipulation of tables.
+ */
+
+/*
+ * variable definitions
+ */
+
+/* constant values necessary for setting target and notifications parameters */
+char *eoc_index_str = EOC_TABLE_INDEX_STR;
+int eoc_index_str_len = EOC_TABLE_INDEX_LEN;
+
+/*
+ * OID definitions
+ *
+ */
+/** eocNotifyTable OID definitions **/
+oid eocNotifyRowStatus_index_oid[] = { EOCNOTIFYROWSTATUSINDEX_OID };
+
+int eocNotifyRowStatus_index_oid_size =
+OID_LENGTH (eocNotifyRowStatus_index_oid);
+
+oid eocNotifyTag_index_oid[] = { EOCNOTIFYTAGINDEX_OID };
+
+int eocNotifyTag_index_oid_size = OID_LENGTH (eocNotifyTag_index_oid);
+
+oid eocNotifyType_index_oid[] = { EOCNOTIFYTYPEINDEX_OID };
+
+int eocNotifyType_index_oid_size = OID_LENGTH (eocNotifyType_index_oid);
+
+oid eocNotifyStorageType_index_oid[] = { EOCNOTIFYSTORAGETYPEINDEX_OID };
+
+int eocNotifyStorageType_index_oid_size =
+OID_LENGTH (eocNotifyStorageType_index_oid);
+
+
+/** eocTargetAddrTable OID definitions **/
+oid eocTargetAddrRowStatus_index_oid[] = { EOCTARGETADDRROWSTATUSINDEX_OID };
+
+int eocTargetAddrRowStatus_index_oid_size =
+OID_LENGTH (eocTargetAddrRowStatus_index_oid);
+
+oid eocTargetAddrTDomain_index_oid[] = { EOCTARGETADDRTDOMAININDEX_OID };
+
+int eocTargetAddrTDomain_index_oid_size =
+OID_LENGTH (eocTargetAddrTDomain_index_oid);
+
+/* represents UDP transport domain OID */
+oid eocTargetAddrTDomain_value_oid[] = { EOCTARGETADDRTDOMAINUDP_OID };
+
+int eocTargetAddrTDomain_value_oid_size =
+OID_LENGTH (eocTargetAddrTDomain_value_oid);
+
+oid eocTargetAddrTAddress_index_oid[] = { EOCTARGETADDRTADDRESSINDEX_OID };
+
+int eocTargetAddrTAddress_index_oid_size =
+OID_LENGTH (eocTargetAddrTAddress_index_oid);
+
+oid eocTargetAddrParams_index_oid[] = { EOCTARGETADDRPARAMSINDEX_OID };
+
+int eocTargetAddrParams_index_oid_size =
+OID_LENGTH (eocTargetAddrParams_index_oid);
+
+oid eocTargetAddrTagList_index_oid[] = { EOCTARGETADDRTAGLISTINDEX_OID };
+
+int eocTargetAddrTagList_index_oid_size =
+OID_LENGTH (eocTargetAddrTagList_index_oid);
+
+
+/** eocTargetParamsTable OID definitions **/
+oid eocTargetParamsRowStatus_index_oid[] =
+ { EOCTARGETPARAMSROWSTATUSINDEX_OID };
+int eocTargetParamsRowStatus_index_oid_size =
+OID_LENGTH (eocTargetParamsRowStatus_index_oid);
+
+oid eocTargetParamsMPModel_index_oid[] = { EOCTARGETPARAMSMPMODELINDEX_OID };
+
+int eocTargetParamsMPModel_index_oid_size =
+OID_LENGTH (eocTargetParamsMPModel_index_oid);
+
+oid eocTargetParamsSecurityModel_index_oid[] =
+ { EOCTARGETPARAMSSECURITYMODELINDEX_OID };
+int eocTargetParamsSecurityModel_index_oid_size =
+OID_LENGTH (eocTargetParamsSecurityModel_index_oid);
+
+oid eocTargetParamsSecurityName_index_oid[] =
+ { EOCTARGETPARAMSSECURITYNAMEINDEX_OID };
+int eocTargetParamsSecurityName_index_oid_size =
+OID_LENGTH (eocTargetParamsSecurityName_index_oid);
+
+oid eocTargetParamsSecurityLevel_index_oid[] =
+ { EOCTARGETPARAMSSECURITYLEVELINDEX_OID };
+int eocTargetParamsSecurityLevel_index_oid_size =
+OID_LENGTH (eocTargetParamsSecurityLevel_index_oid);
+
+oid eocTargetParamsStorageType_index_oid[] =
+ { EOCTARGETPARAMSSTORAGETYPEINDEX_OID };
+int eocTargetParamsStorageType_index_oid_size =
+OID_LENGTH (eocTargetParamsStorageType_index_oid);
+
+/*** eocNotifyTable ***/
+/* set eocNotifyRowStatus to given value */
+int
+set_eocNotifyRowStatus (int row_status)
+{
+ if (SNMP_ERR_NOERROR !=
+ write_snmpNotifyRowStatus (RESERVE1, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocNotifyRowStatus_index_oid,
+ eocNotifyRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL (("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyRowStatus(RESERVE1) error\n"));
+ write_snmpNotifyRowStatus (FREE, (u_char *) & row_status, ASN_INTEGER,
+ sizeof (long), NULL,
+ eocNotifyRowStatus_index_oid,
+ eocNotifyRowStatus_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpNotifyRowStatus (RESERVE2, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocNotifyRowStatus_index_oid,
+ eocNotifyRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL (("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyRowStatus(RESERVE2) error\n"));
+ write_snmpNotifyRowStatus (FREE, (u_char *) & row_status, ASN_INTEGER,
+ sizeof (long), NULL,
+ eocNotifyRowStatus_index_oid,
+ eocNotifyRowStatus_index_oid_size);
+ }
+
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpNotifyRowStatus (ACTION, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocNotifyRowStatus_index_oid,
+ eocNotifyRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL (("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyRowStatus(ACTION) error\n"));
+ write_snmpNotifyRowStatus (UNDO, (u_char *) & row_status, ASN_INTEGER,
+ sizeof (long), NULL,
+ eocNotifyRowStatus_index_oid,
+ eocNotifyRowStatus_index_oid_size);
+ }
+
+ write_snmpNotifyRowStatus (COMMIT, (u_char *) & row_status, ASN_INTEGER,
+ sizeof (long), NULL,
+ eocNotifyRowStatus_index_oid,
+ eocNotifyRowStatus_index_oid_size);
+
+ return 0;
+}
+
+/* set eocNotifyTag to given value */
+int
+set_eocNotifyTag (char *tag, size_t tag_len)
+{
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpNotifyTag (RESERVE1, (u_char *) tag, ASN_OCTET_STR, tag_len,
+ NULL, eocNotifyTag_index_oid,
+ eocNotifyTag_index_oid_size))
+ {
+ DEBUGMSGTL (("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyTag(RESERVE1) error\n"));
+ write_snmpNotifyTag (FREE, (u_char *) tag, ASN_OCTET_STR, tag_len,
+ NULL, eocNotifyTag_index_oid,
+ eocNotifyTag_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpNotifyTag (RESERVE2, (u_char *) tag, ASN_OCTET_STR, tag_len,
+ NULL, eocNotifyTag_index_oid,
+ eocNotifyTag_index_oid_size))
+ {
+ DEBUGMSGTL (("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyTag(RESERVE2) error\n"));
+ write_snmpNotifyTag (FREE, (u_char *) tag, ASN_OCTET_STR, tag_len,
+ NULL, eocNotifyTag_index_oid,
+ eocNotifyTag_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpNotifyTag (ACTION, (u_char *) tag, ASN_OCTET_STR, tag_len,
+ NULL, eocNotifyTag_index_oid,
+ eocNotifyTag_index_oid_size))
+ {
+ DEBUGMSGTL (("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyTag(ACTION) error\n"));
+ write_snmpNotifyTag (UNDO, (u_char *) tag, ASN_OCTET_STR, tag_len,
+ NULL, eocNotifyTag_index_oid,
+ eocNotifyTag_index_oid_size);
+ }
+
+ write_snmpNotifyTag (COMMIT, (u_char *) tag, ASN_OCTET_STR, tag_len,
+ NULL, eocNotifyTag_index_oid,
+ eocNotifyTag_index_oid_size);
+
+ return 0;
+}
+
+
+/* set eocNotifyType to given value */
+int
+set_eocNotifyType (int type)
+{
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpNotifyType (RESERVE1, (u_char *) & type, ASN_INTEGER,
+ sizeof (long), NULL, eocNotifyType_index_oid,
+ eocNotifyType_index_oid_size))
+ {
+ DEBUGMSGTL (("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyType(RESERVE1) error\n"));
+ write_snmpNotifyType (FREE, (u_char *) & type, ASN_INTEGER,
+ sizeof (long), NULL, eocNotifyType_index_oid,
+ eocNotifyType_index_oid_size);
+ }
+
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpNotifyType (RESERVE2, (u_char *) & type, ASN_INTEGER,
+ sizeof (long), NULL, eocNotifyType_index_oid,
+ eocNotifyType_index_oid_size))
+ {
+ DEBUGMSGTL (("EoCAlarmsAndTraps_interface",
+ "write_snmpNotifyType(RESERVE2) error\n"));
+
+ write_snmpNotifyType (FREE, (u_char *) & type, ASN_INTEGER,
+ sizeof (long), NULL, eocNotifyType_index_oid,
+ eocNotifyType_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpNotifyType (ACTION, (u_char *) & type, ASN_INTEGER,
+ sizeof (long), NULL, eocNotifyType_index_oid,
+ eocNotifyType_index_oid_size))
+ {
+ DEBUGMSGTL (("example_notification",
+ "write_snmpNotifyType(ACTION) error\n"));
+ write_snmpNotifyType (UNDO, (u_char *) & type, ASN_INTEGER,
+ sizeof (long), NULL, eocNotifyType_index_oid,
+ eocNotifyType_index_oid_size);
+ }
+
+
+ write_snmpNotifyType (COMMIT, (u_char *) & type, ASN_INTEGER,
+ sizeof (long), NULL, eocNotifyType_index_oid,
+ eocNotifyType_index_oid_size);
+
+ return 0;
+}
+
+/* set eocNotifyStorageType to given value */
+int
+set_eocNotifyStorageType (int storage_type)
+{
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpNotifyStorageType (RESERVE1, (u_char *) & storage_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocNotifyStorageType_index_oid,
+ eocNotifyStorageType_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpNotifyStorageType(RESERVE1) error\n"));
+ write_snmpNotifyStorageType (FREE, (u_char *) & storage_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocNotifyStorageType_index_oid,
+ eocNotifyStorageType_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpNotifyStorageType (RESERVE2, (u_char *) & storage_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocNotifyStorageType_index_oid,
+ eocNotifyStorageType_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpNotifyStorageType(RESERVE2) error\n"));
+ write_snmpNotifyStorageType (FREE, (u_char *) & storage_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocNotifyStorageType_index_oid,
+ eocNotifyStorageType_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpNotifyStorageType (RESERVE1, (u_char *) & storage_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocNotifyStorageType_index_oid,
+ eocNotifyStorageType_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpNotifyStorageType(ACTION) error\n"));
+ write_snmpNotifyStorageType (UNDO, (u_char *) & storage_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocNotifyStorageType_index_oid,
+ eocNotifyStorageType_index_oid_size);
+ }
+
+ write_snmpNotifyStorageType (RESERVE1, (u_char *) & storage_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocNotifyStorageType_index_oid,
+ eocNotifyStorageType_index_oid_size);
+
+ return 0;
+}
+
+
+int
+addRow_eocNotifyTable (void)
+{
+ set_eocNotifyRowStatus (RS_CREATEANDWAIT);
+ set_eocNotifyTag (eoc_index_str, eoc_index_str_len);
+ set_eocNotifyType (SNMPNOTIFYTYPE_TRAP);
+ set_eocNotifyStorageType (ST_VOLATILE);
+ set_eocNotifyRowStatus (RS_ACTIVE);
+
+ return 0;
+}
+
+
+
+ /*** eocTargetAddrTable ***/
+/* set eocTargetAddrRowStatus to given value */
+int
+set_eocTargetAddrRowStatus (int row_status)
+{
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrRowStatus (RESERVE1, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetAddrRowStatus_index_oid,
+ eocTargetAddrRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrRowStatus(RESERVE1) error\n"));
+ write_snmpTargetAddrRowStatus (FREE, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetAddrRowStatus_index_oid,
+ eocTargetAddrRowStatus_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrRowStatus (RESERVE2, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetAddrRowStatus_index_oid,
+ eocTargetAddrRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrRowStatus(RESERVE2) error\n"));
+ write_snmpTargetAddrRowStatus (FREE, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetAddrRowStatus_index_oid,
+ eocTargetAddrRowStatus_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrRowStatus (ACTION, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetAddrRowStatus_index_oid,
+ eocTargetAddrRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrRowStatus(ACTION) error\n"));
+ write_snmpTargetAddrRowStatus (UNDO, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetAddrRowStatus_index_oid,
+ eocTargetAddrRowStatus_index_oid_size);
+ }
+
+ write_snmpTargetAddrRowStatus (COMMIT, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetAddrRowStatus_index_oid,
+ eocTargetAddrRowStatus_index_oid_size);
+
+ return 0;
+}
+
+/* set eocTargetAddrTDomain to given value */
+int
+set_eocTargetAddrTDomain (oid * tdomain, size_t tdomain_len)
+{
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrTDomain (RESERVE1, (u_char *) tdomain,
+ ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid), NULL,
+ eocTargetAddrTDomain_index_oid,
+ eocTargetAddrTDomain_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrTDomain(RESERVE1) error\n"));
+ write_snmpTargetAddrTDomain (FREE, (u_char *) tdomain, ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid), NULL,
+ eocTargetAddrTDomain_index_oid,
+ eocTargetAddrTDomain_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrTDomain (RESERVE2, (u_char *) tdomain,
+ ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid), NULL,
+ eocTargetAddrTDomain_index_oid,
+ eocTargetAddrTDomain_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrTDomain(RESERVE2) error\n"));
+ write_snmpTargetAddrTDomain (FREE, (u_char *) tdomain, ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid), NULL,
+ eocTargetAddrTDomain_index_oid,
+ eocTargetAddrTDomain_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrTDomain (ACTION, (u_char *) tdomain,
+ ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid), NULL,
+ eocTargetAddrTDomain_index_oid,
+ eocTargetAddrTDomain_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrTDomain(ACTION) error\n"));
+ write_snmpTargetAddrTDomain (UNDO, (u_char *) tdomain, ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid), NULL,
+ eocTargetAddrTDomain_index_oid,
+ eocTargetAddrTDomain_index_oid_size);
+
+ }
+
+ write_snmpTargetAddrTDomain (COMMIT, (u_char *) tdomain, ASN_OBJECT_ID,
+ tdomain_len * sizeof (oid), NULL,
+ eocTargetAddrTDomain_index_oid,
+ eocTargetAddrTDomain_index_oid_size);
+
+ return 0;
+}
+
+/* set eocTargetAddrTAddress to given value */
+int
+set_eocTargetAddrTAddress (unsigned char *taddress, size_t taddress_len)
+{
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrTAddress (RESERVE1, (u_char *) taddress,
+ ASN_OCTET_STR, taddress_len, NULL,
+ eocTargetAddrTAddress_index_oid,
+ eocTargetAddrTAddress_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrTAddress(RESERVE1) error\n"));
+ write_snmpTargetAddrTAddress (FREE, (u_char *) taddress,
+ ASN_OCTET_STR, taddress_len, NULL,
+ eocTargetAddrTAddress_index_oid,
+ eocTargetAddrTAddress_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrTAddress (RESERVE2, (u_char *) taddress,
+ ASN_OCTET_STR, taddress_len, NULL,
+ eocTargetAddrTAddress_index_oid,
+ eocTargetAddrTAddress_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrTAddress(RESERVE2) error\n"));
+ write_snmpTargetAddrTAddress (FREE, (u_char *) taddress,
+ ASN_OCTET_STR, taddress_len, NULL,
+ eocTargetAddrTAddress_index_oid,
+ eocTargetAddrTAddress_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrTAddress (ACTION, (u_char *) taddress,
+ ASN_OCTET_STR, taddress_len, NULL,
+ eocTargetAddrTAddress_index_oid,
+ eocTargetAddrTAddress_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrTAddress(ACTION) error\n"));
+ write_snmpTargetAddrTAddress (UNDO, (u_char *) taddress,
+ ASN_OCTET_STR, taddress_len, NULL,
+ eocTargetAddrTAddress_index_oid,
+ eocTargetAddrTAddress_index_oid_size);
+ }
+
+ write_snmpTargetAddrTAddress (COMMIT, (u_char *) taddress, ASN_OCTET_STR,
+ taddress_len, NULL,
+ eocTargetAddrTAddress_index_oid,
+ eocTargetAddrTAddress_index_oid_size);
+ return 0;
+}
+
+
+/* set eocTargetAddrParams to given value */
+int
+set_eocTargetAddrParams (char *params, size_t params_len)
+{
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrParams (RESERVE1, (u_char *) params,
+ ASN_OCTET_STR, params_len, NULL,
+ eocTargetAddrParams_index_oid,
+ eocTargetAddrParams_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrAddrParams(RESERVE1) error\n"));
+ write_snmpTargetAddrParams (FREE, (u_char *) params, ASN_OCTET_STR,
+ params_len, NULL,
+ eocTargetAddrParams_index_oid,
+ eocTargetAddrParams_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrParams (RESERVE2, (u_char *) params,
+ ASN_OCTET_STR, params_len, NULL,
+ eocTargetAddrParams_index_oid,
+ eocTargetAddrParams_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrAddrParams(RESERVE2) error\n"));
+ write_snmpTargetAddrParams (FREE, (u_char *) params, ASN_OCTET_STR,
+ params_len, NULL,
+ eocTargetAddrParams_index_oid,
+ eocTargetAddrParams_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrParams (ACTION, (u_char *) params, ASN_OCTET_STR,
+ params_len, NULL,
+ eocTargetAddrParams_index_oid,
+ eocTargetAddrParams_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrAddrParams(ACTION) error\n"));
+ write_snmpTargetAddrParams (UNDO, (u_char *) params, ASN_OCTET_STR,
+ params_len, NULL,
+ eocTargetAddrParams_index_oid,
+ eocTargetAddrParams_index_oid_size);
+ }
+
+ write_snmpTargetAddrParams (COMMIT, (u_char *) params, ASN_OCTET_STR,
+ params_len, NULL,
+ eocTargetAddrParams_index_oid,
+ eocTargetAddrParams_index_oid_size);
+
+ return 0;
+}
+
+/* set eocTargetAddrTagList to given value */
+int
+set_eocTargetAddrTagList (char *tag_list, size_t tag_list_len)
+{
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrTagList (RESERVE1, (u_char *) tag_list,
+ ASN_OCTET_STR, tag_list_len, NULL,
+ eocTargetAddrTagList_index_oid,
+ eocTargetAddrTagList_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrAddrTagList(RESERVE1) error\n"));
+ write_snmpTargetAddrTagList (FREE, (u_char *) tag_list, ASN_OCTET_STR,
+ tag_list_len, NULL,
+ eocTargetAddrTagList_index_oid,
+ eocTargetAddrTagList_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrTagList (RESERVE2, (u_char *) tag_list,
+ ASN_OCTET_STR, tag_list_len, NULL,
+ eocTargetAddrTagList_index_oid,
+ eocTargetAddrTagList_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrAddrTagList(RESERVE2) error\n"));
+ write_snmpTargetAddrTagList (FREE, (u_char *) tag_list, ASN_OCTET_STR,
+ tag_list_len, NULL,
+ eocTargetAddrTagList_index_oid,
+ eocTargetAddrTagList_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetAddrTagList (ACTION, (u_char *) tag_list,
+ ASN_OCTET_STR, tag_list_len, NULL,
+ eocTargetAddrTagList_index_oid,
+ eocTargetAddrTagList_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetAddrAddrTagList(ACTION) error\n"));
+ write_snmpTargetAddrTagList (UNDO, (u_char *) tag_list, ASN_OCTET_STR,
+ tag_list_len, NULL,
+ eocTargetAddrTagList_index_oid,
+ eocTargetAddrTagList_index_oid_size);
+ }
+
+ write_snmpTargetAddrTagList (COMMIT, (u_char *) tag_list, ASN_OCTET_STR,
+ tag_list_len, NULL,
+ eocTargetAddrTagList_index_oid,
+ eocTargetAddrTagList_index_oid_size);
+
+ return 0;
+}
+
+int
+addRow_eocTargetAddrTable (unsigned char *taddress, size_t taddress_len)
+{
+ set_eocTargetAddrRowStatus (RS_CREATEANDWAIT);
+ set_eocTargetAddrTDomain (eocTargetAddrTDomain_value_oid,
+ eocTargetAddrTDomain_value_oid_size);
+ set_eocTargetAddrTAddress (taddress, taddress_len);
+ set_eocTargetAddrParams (eoc_index_str, eoc_index_str_len);
+ set_eocTargetAddrTagList (eoc_index_str, eoc_index_str_len);
+ set_eocTargetAddrRowStatus (RS_ACTIVE);
+
+ return 0;
+}
+
+int
+modifyRow_eocTargetAddrTable (unsigned char *taddress, size_t taddress_len)
+{
+ set_eocTargetAddrRowStatus (RS_NOTINSERVICE);
+ set_eocTargetAddrTAddress (taddress, taddress_len);
+ set_eocTargetAddrRowStatus (RS_ACTIVE);
+
+ return 0;
+}
+
+
+/*** eocTargetParamTable ***/
+/* set eocTargetParamsRowStatus to given value */
+int
+set_eocTargetParamsRowStatus (int row_status)
+{
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsRowStatus (RESERVE1, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsRowStatus_index_oid,
+ eocTargetParamsRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsRowStatus(RESERVE1) error\n"));
+ write_snmpTargetParamsRowStatus (FREE, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsRowStatus_index_oid,
+ eocTargetParamsRowStatus_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsRowStatus (RESERVE2, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsRowStatus_index_oid,
+ eocTargetParamsRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsRowStatus(RESERVE2) error\n"));
+ write_snmpTargetParamsRowStatus (FREE, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsRowStatus_index_oid,
+ eocTargetParamsRowStatus_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsRowStatus (ACTION, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsRowStatus_index_oid,
+ eocTargetParamsRowStatus_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsRowStatus(ACTION) error\n"));
+ write_snmpTargetParamsRowStatus (UNDO, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsRowStatus_index_oid,
+ eocTargetParamsRowStatus_index_oid_size);
+ }
+
+ write_snmpTargetParamsRowStatus (COMMIT, (u_char *) & row_status,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsRowStatus_index_oid,
+ eocTargetParamsRowStatus_index_oid_size);
+
+ return 0;
+}
+
+/* eocTargetParamsMPModel */
+/* set eocTargetParamsMPModel to given value */
+int
+set_eocTargetParamsMPModel (int mp_model)
+{
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsMPModel (RESERVE1, (u_char *) & mp_model,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsMPModel_index_oid,
+ eocTargetParamsMPModel_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsMPModel(RESERVE1) error\n"));
+ write_snmpTargetParamsMPModel (FREE, (u_char *) & mp_model,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsMPModel_index_oid,
+ eocTargetParamsMPModel_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsMPModel (RESERVE2, (u_char *) & mp_model,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsMPModel_index_oid,
+ eocTargetParamsMPModel_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsMPModel(RESERVE2) error\n"));
+ write_snmpTargetParamsMPModel (FREE, (u_char *) & mp_model,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsMPModel_index_oid,
+ eocTargetParamsMPModel_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsMPModel (ACTION, (u_char *) & mp_model,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsMPModel_index_oid,
+ eocTargetParamsMPModel_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsMPModel(ACTION) error\n"));
+ write_snmpTargetParamsMPModel (UNDO, (u_char *) & mp_model,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsMPModel_index_oid,
+ eocTargetParamsMPModel_index_oid_size);
+ }
+
+ write_snmpTargetParamsMPModel (COMMIT, (u_char *) & mp_model, ASN_INTEGER,
+ sizeof (long), NULL,
+ eocTargetParamsMPModel_index_oid,
+ eocTargetParamsMPModel_index_oid_size);
+
+ return 0;
+}
+
+/* set eocTargetParamsSecurityModel to given value */
+int
+set_eocTargetParamsSecurityModel (int sec_model)
+{
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsSecModel (RESERVE1, (u_char *) & sec_model,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityModel_index_oid,
+ eocTargetParamsSecurityModel_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecModel(RESERVE1) error\n"));
+ write_snmpTargetParamsSecModel (FREE, (u_char *) & sec_model,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityModel_index_oid,
+ eocTargetParamsSecurityModel_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsSecModel (RESERVE2, (u_char *) & sec_model,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityModel_index_oid,
+ eocTargetParamsSecurityModel_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecModel(RESERVE2) error\n"));
+ write_snmpTargetParamsSecModel (FREE, (u_char *) & sec_model,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityModel_index_oid,
+ eocTargetParamsSecurityModel_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsSecModel (ACTION, (u_char *) & sec_model,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityModel_index_oid,
+ eocTargetParamsSecurityModel_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecModel(ACTION) error\n"));
+ write_snmpTargetParamsSecModel (UNDO, (u_char *) & sec_model,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityModel_index_oid,
+ eocTargetParamsSecurityModel_index_oid_size);
+ }
+
+ write_snmpTargetParamsSecModel (COMMIT, (u_char *) & sec_model,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityModel_index_oid,
+ eocTargetParamsSecurityModel_index_oid_size);
+
+ return 0;
+}
+
+/* set eocTargetParamsSecurityName to given value */
+int
+set_eocTargetParamsSecurityName (char *sec_name, size_t sec_name_len)
+{
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsSecName (RESERVE1, (u_char *) sec_name,
+ ASN_OCTET_STR, sec_name_len, NULL,
+ eocTargetParamsSecurityName_index_oid,
+ eocTargetParamsSecurityName_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecName(RESERVE1) error\n"));
+ write_snmpTargetParamsSecName (FREE, (u_char *) sec_name,
+ ASN_OCTET_STR, sec_name_len, NULL,
+ eocTargetParamsSecurityName_index_oid,
+ eocTargetParamsSecurityName_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsSecName (RESERVE2, (u_char *) sec_name,
+ ASN_OCTET_STR, sec_name_len, NULL,
+ eocTargetParamsSecurityName_index_oid,
+ eocTargetParamsSecurityName_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecName(RESERVE2) error\n"));
+ write_snmpTargetParamsSecName (FREE, (u_char *) sec_name,
+ ASN_OCTET_STR, sec_name_len, NULL,
+ eocTargetParamsSecurityName_index_oid,
+ eocTargetParamsSecurityName_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsSecName (ACTION, (u_char *) sec_name,
+ ASN_OCTET_STR, sec_name_len, NULL,
+ eocTargetParamsSecurityName_index_oid,
+ eocTargetParamsSecurityName_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecName(ACTION) error\n"));
+ write_snmpTargetParamsSecName (UNDO, (u_char *) sec_name,
+ ASN_OCTET_STR, sec_name_len, NULL,
+ eocTargetParamsSecurityName_index_oid,
+ eocTargetParamsSecurityName_index_oid_size);
+ }
+
+ write_snmpTargetParamsSecName (COMMIT, (u_char *) sec_name, ASN_OCTET_STR,
+ sec_name_len, NULL,
+ eocTargetParamsSecurityName_index_oid,
+ eocTargetParamsSecurityName_index_oid_size);
+ return 0;
+
+}
+
+/* set eocTargetParamsSecurityLevel to given value */
+int
+set_eocTargetParamsSecurityLevel (int sec_level)
+{
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsSecLevel (RESERVE1, (u_char *) & sec_level,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityLevel_index_oid,
+ eocTargetParamsSecurityLevel_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecLevel(RESERVE1) error\n"));
+ write_snmpTargetParamsSecLevel (FREE, (u_char *) & sec_level,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityLevel_index_oid,
+ eocTargetParamsSecurityLevel_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsSecLevel (RESERVE2, (u_char *) & sec_level,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityLevel_index_oid,
+ eocTargetParamsSecurityLevel_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecLevel(RESERVE2) error\n"));
+ write_snmpTargetParamsSecLevel (FREE, (u_char *) & sec_level,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityLevel_index_oid,
+ eocTargetParamsSecurityLevel_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsSecLevel (ACTION, (u_char *) & sec_level,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityLevel_index_oid,
+ eocTargetParamsSecurityLevel_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsSecLevel(ACTION) error\n"));
+ write_snmpTargetParamsSecLevel (UNDO, (u_char *) & sec_level,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityLevel_index_oid,
+ eocTargetParamsSecurityLevel_index_oid_size);
+ }
+
+ write_snmpTargetParamsSecLevel (COMMIT, (u_char *) & sec_level,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsSecurityLevel_index_oid,
+ eocTargetParamsSecurityLevel_index_oid_size);
+
+ return 0;
+
+}
+
+/* set eocTargetParamsStorageType to given value */
+int
+set_eocTargetParamsStorageType (int st_type)
+{
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsStorageType (RESERVE1, (u_char *) & st_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsStorageType_index_oid,
+ eocTargetParamsStorageType_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsStorageType(RESERVE1) error\n"));
+ write_snmpTargetParamsStorageType (FREE, (u_char *) & st_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsStorageType_index_oid,
+ eocTargetParamsStorageType_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsStorageType (RESERVE2, (u_char *) & st_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsStorageType_index_oid,
+ eocTargetParamsStorageType_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsStorageType(RESERVE2) error\n"));
+ write_snmpTargetParamsStorageType (FREE, (u_char *) & st_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsStorageType_index_oid,
+ eocTargetParamsStorageType_index_oid_size);
+ }
+
+ if (SNMP_ERR_NOERROR !=
+ write_snmpTargetParamsStorageType (ACTION, (u_char *) & st_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsStorageType_index_oid,
+ eocTargetParamsStorageType_index_oid_size))
+ {
+ DEBUGMSGTL (("eocAlarmsAnsTraps_interface",
+ "write_snmpTargetParamsStorageType(ACTION) error\n"));
+ write_snmpTargetParamsStorageType (UNDO, (u_char *) & st_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsStorageType_index_oid,
+ eocTargetParamsStorageType_index_oid_size);
+ }
+
+ write_snmpTargetParamsStorageType (COMMIT, (u_char *) & st_type,
+ ASN_INTEGER, sizeof (long), NULL,
+ eocTargetParamsStorageType_index_oid,
+ eocTargetParamsStorageType_index_oid_size);
+
+ return 0;
+
+}
+
+
+int
+addRow_eocTargetParamsTable (char *sec_name, size_t sec_name_len)
+{
+ set_eocTargetParamsRowStatus (RS_CREATEANDWAIT);
+ set_eocTargetParamsMPModel (SNMP_MP_MODEL_SNMPv2c);
+ set_eocTargetParamsSecurityModel (SNMP_SEC_MODEL_SNMPv2c);
+ set_eocTargetParamsSecurityName (sec_name, sec_name_len);
+ set_eocTargetParamsSecurityLevel (SNMP_SEC_LEVEL_NOAUTH);
+ set_eocTargetParamsStorageType (ST_VOLATILE);
+ set_eocTargetParamsRowStatus (RS_ACTIVE);
+
+ return 0;
+}
+
+int
+modifyRow_eocTargetParamsTable (char *sec_name, size_t sec_name_len)
+{
+ set_eocTargetParamsRowStatus (RS_NOTINSERVICE);
+ set_eocTargetParamsSecurityName (sec_name, sec_name_len);
+ set_eocTargetParamsRowStatus (RS_ACTIVE);
+
+ return 0;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps_interface.h
new file mode 100644
index 0000000000..b68394a5a1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocAlarmsAndTraps_interface.h
@@ -0,0 +1,70 @@
+#ifndef EOC_ALARMSANDTRAPS_INTERFACE_H
+#define EOC_ALARMSANDTRAPS_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* include headers for notification and target tables */
+#include "notification/snmpNotifyTable.h"
+#include "target/snmpTargetAddrEntry.h"
+#include "target/snmpTargetParamsEntry.h"
+
+#define EOC_ROW_ADD 1
+#define EOC_ROW_MODIFY 2
+
+#define EOC_TABLE_INDEX_STR "addr1"
+#define EOC_TABLE_INDEX_LEN 5
+#define EOC_TABLE_INDEX_ASC 97, 100, 100, 114, 49
+
+/* definitions for OID strings */
+/** snmpNotifyTable **/
+#define EOCNOTIFYROWSTATUSINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 13, 1, 1, 1, 5, EOC_TABLE_INDEX_ASC
+#define EOCNOTIFYTAGINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 13, 1, 1, 1, 2, EOC_TABLE_INDEX_ASC
+#define EOCNOTIFYTYPEINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 13, 1, 1, 1, 3, EOC_TABLE_INDEX_ASC
+#define EOCNOTIFYSTORAGETYPEINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 13, 1, 1, 1, 4, EOC_TABLE_INDEX_ASC
+
+/** snmpTargetAddrTable **/
+#define EOCTARGETADDRROWSTATUSINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 9, EOC_TABLE_INDEX_ASC
+#define EOCTARGETADDRTDOMAININDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 2, EOC_TABLE_INDEX_ASC
+#define EOCTARGETADDRTDOMAINUDP_OID \
+ 1, 3, 6, 1, 6, 1, 1
+#define EOCTARGETADDRTADDRESSINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 3, EOC_TABLE_INDEX_ASC
+#define EOCTARGETADDRPARAMSINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 7, EOC_TABLE_INDEX_ASC
+#define EOCTARGETADDRTAGLISTINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 2, 1, 6, EOC_TABLE_INDEX_ASC
+
+/** snmpTargetParamsTable **/
+#define EOCTARGETPARAMSROWSTATUSINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 3, 1, 7, EOC_TABLE_INDEX_ASC
+#define EOCTARGETPARAMSMPMODELINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 3, 1, 2, EOC_TABLE_INDEX_ASC
+#define EOCTARGETPARAMSSECURITYMODELINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 3, 1, 3, EOC_TABLE_INDEX_ASC
+#define EOCTARGETPARAMSSECURITYNAMEINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 3, 1, 4, EOC_TABLE_INDEX_ASC
+#define EOCTARGETPARAMSSECURITYLEVELINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 3, 1, 5, EOC_TABLE_INDEX_ASC
+#define EOCTARGETPARAMSSTORAGETYPEINDEX_OID \
+ 1, 3, 6, 1, 6, 3, 12, 1, 3, 1, 6, EOC_TABLE_INDEX_ASC
+
+/* function declarations */
+int addRow_eocNotifyTable(void);
+int addRow_eocTargetAddrTable(unsigned char *taddress, size_t taddress_len);
+int modifyRow_eocTargetAddrTable(unsigned char *taddress, size_t taddress_len);
+int addRow_eocTargetParamsTable(char *sec_name, size_t sec_name_len);
+int modifyRow_eocTargetParamsTable(char *sec_name, size_t sec_name_len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCALARMSANDTRAPS_INTERFACE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCbatCardTraps.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCbatCardTraps.h
new file mode 100644
index 0000000000..d87fe5745f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCbatCardTraps.h
@@ -0,0 +1 @@
+config_require(mstar-alarm-mib/eocCbatCardTraps/eocCbatCardTraps)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCbatCardTraps/eocCbatCardTraps.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCbatCardTraps/eocCbatCardTraps.c
new file mode 100644
index 0000000000..ce63e2d78f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCbatCardTraps/eocCbatCardTraps.c
@@ -0,0 +1,844 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.notify.conf 10110 2004-04-15 12:29:19Z 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 "eocCbatCardTraps.h"
+
+static oid eoc_objid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 };
+
+/*Flags for EoCCBat alarms*/
+int eocCbatHighTemperatureClr = 0;
+int eocCbatLowTemperatureClr = 0;
+int eocCbatCpuLoadClr = 0;
+int eocCbatMemUsageClr = 0;
+
+
+void
+getEoCCBatAlarmThreshold (eocCbatTraps_threshold_t * this)
+{
+ int ret;
+ char buffer[EOC_THRESHOLD_BUFFER];
+
+ memset (this, 0x0, sizeof (eocCbatTraps_threshold_t));
+
+ /* trap destination address for Target table is obtained from trap IP
+ * and port */
+ /* read temperature high threshold string from config file */
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_TEMP_HIGHTHRESHOLD,
+ buffer, EOC_THRESHOLD_BUFFER);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCbatTraps: libspid_config_read_item error for "
+ "ALARM_TEMP_HIGHTHRESHOLD\n");
+ /* trap IP address set to default value */
+ this->alarm_temperature_highthreshold =
+ TRAP_TEMPERATURE_HIGHTHRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than maximum value,
+ * copy only maximum permitted number of bytes */
+ this->alarm_temperature_highthreshold = strtol (buffer, NULL, 10);
+ }
+
+ /* trap destination address for Target table is obtained from trap IP
+ * and port */
+ /* read temperature low threshold string from config file */
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_TEMP_LOWTHRESHOLD,
+ buffer, EOC_THRESHOLD_BUFFER);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCbatTraps: libspid_config_read_item error for "
+ "ALARM_TEMP_LOWTHRESHOLD\n");
+ /* trap IP address set to default value */
+ this->alarm_temperature_lowthreshold =
+ TRAP_TEMPERATURE_LOWTHRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than maximum value,
+ * copy only maximum permitted number of bytes */
+ this->alarm_temperature_lowthreshold = strtol (buffer, NULL, 10);
+ }
+
+ /* trap destination address for Target table is obtained from trap IP
+ * and port */
+ /* read cpuload threshold string from config file */
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_CPULOAD_THRESHOLD,
+ buffer, EOC_THRESHOLD_BUFFER);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCbatTraps: libspid_config_read_item error for "
+ "ALARM_CPULOAD_THRESHOLD\n");
+ /* trap IP address set to default value */
+ this->alarm_cpuload_threshold = TRAP_CPULOAD_THRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than maximum value,
+ * copy only maximum permitted number of bytes */
+ this->alarm_cpuload_threshold = strtol (buffer, NULL, 10);
+ }
+
+ /* trap destination address for Target table is obtained from trap IP and port */
+ /* read memusage threshold string from config file */
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_MEMUSAGE_THRESHOLD,
+ buffer, EOC_THRESHOLD_BUFFER);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCbatTraps: libspid_config_read_item error for "
+ "ALARM_MEMUSAGE_THRESHOLD\n");
+ /* trap IP address set to default value */
+ this->alarm_memusage_threshold =
+ TRAP_MEMUSAGE_THRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than maximum value,
+ * copy only maximum permitted number of bytes */
+ this->alarm_memusage_threshold = strtol (buffer, NULL, 10);
+ }
+}
+
+
+int
+checkEoCCBatAlarms ()
+{
+ int ret;
+ eocCbatTraps_threshold_t temp_threshold_val;
+ int temperature_current_val;
+ int cpuload_current_val;
+ int memusage_current_val;
+
+
+ getEoCCBatAlarmThreshold (&temp_threshold_val);
+
+ if (LIBSPID_SUCCESS !=
+ libspid_hardware_get_temperature (&temperature_current_val))
+ {
+ snmp_log (LOG_ERR, "libspid_hardware_get_temperature error\n");
+ temperature_current_val = TRAP_TEMPERATURE_DEFAULT_VALUE;
+ };
+
+ if (temperature_current_val >
+ temp_threshold_val.alarm_temperature_highthreshold)
+ {
+ registerEoCAlarm (EOCCBATHIGHTEMPERATUREALMOID, 1,
+ temperature_current_val);
+ }
+ else if (temperature_current_val <
+ temp_threshold_val.alarm_temperature_highthreshold
+ && 1 == eocCbatHighTemperatureClr)
+ {
+ registerEoCAlarm (EOCCBATHIHGTEMPERATURECLROID, 0,
+ temperature_current_val);
+ }
+
+ if (temperature_current_val <
+ temp_threshold_val.alarm_temperature_lowthreshold)
+ {
+ registerEoCAlarm (EOCCBATLOWTEMPERATUREALMOID, 1,
+ temperature_current_val);
+ }
+ else if (temperature_current_val >
+ temp_threshold_val.alarm_temperature_lowthreshold
+ && 1 == eocCbatLowTemperatureClr)
+ {
+ registerEoCAlarm (EOCCBATLOWTEMPERATURECLROID, 0,
+ temperature_current_val);
+ }
+
+ if (LIBSPID_SUCCESS !=
+ libspid_system_get_cpuload_percent (&cpuload_current_val))
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_cpuload error\n");
+ cpuload_current_val = TRAP_CPULOAD_DEFAULT_VALUE;
+ }
+
+ if (cpuload_current_val > temp_threshold_val.alarm_cpuload_threshold)
+ {
+ registerEoCAlarm (EOCCBATCARDCPUOVERLOADALMOID, 1,
+ cpuload_current_val);
+ }
+ else if (cpuload_current_val < temp_threshold_val.alarm_cpuload_threshold
+ && 1 == eocCbatCpuLoadClr)
+ {
+ registerEoCAlarm (EOCCBATCARDCPUOVERLOADCLROID, 0,
+ cpuload_current_val);
+ }
+
+ if (LIBSPID_SUCCESS !=
+ libspid_system_get_memusage_percent (&memusage_current_val))
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_memusage_percent error\n");
+ memusage_current_val = TRAP_MEMUSAGE_DEFAULT_VALUE;
+ }
+
+ if (memusage_current_val > temp_threshold_val.alarm_memusage_threshold)
+ {
+ registerEoCAlarm (EOCCBATCARDMEMOVERLOADALMOID, 1,
+ memusage_current_val);
+ }
+ else if (memusage_current_val <
+ temp_threshold_val.alarm_memusage_threshold
+ && 1 == eocCbatMemUsageClr)
+ {
+ registerEoCAlarm (EOCCBATCARDMEMOVERLOADCLROID, 0,
+ memusage_current_val);
+ }
+
+ return SNMP_ERR_NOERROR;
+
+}
+
+
+/*send funs for EoCCbat traps*/
+
+int
+send_eocCbatHighTemperatureAlm_trap (void)
+{
+ netsnmp_variable_list *var_list = NULL;
+ oid eocCbatHighTemperatureAlm_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 2, 1, 1, 1 };
+ oid eocCbatEnvTemperature_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 1};
+ oid eocCbatEnvTempHighThreshold_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 2};
+
+ int temperature_cur;
+ int temperature_max;
+ char buffer[EOC_THRESHOLD_BUFFER];
+ int ret;
+
+ ret = libspid_hardware_get_temperature (&temperature_cur);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_hardware_get_temperature error\n");
+ temperature_cur = TRAP_TEMPERATURE_DEFAULT_VALUE;
+ }
+
+ ret = libspid_config_read_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_TEMP_HIGHTHRESHOLD,
+ buffer, EOC_THRESHOLD_BUFFER);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCbatTraps: libspid_config_read_item error for trap IP\n");
+ /* trap IP address set to default value */
+ temperature_max = TRAP_TEMPERATURE_HIGHTHRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than maximum value,
+ * copy only maximum permitted number of bytes */
+ temperature_max = strtol (buffer, NULL, 10);
+ }
+ /*
+ * Set the snmpTrapOid.0 value
+ */
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (u_char *) eocCbatHighTemperatureAlm_oid,
+ sizeof (eocCbatHighTemperatureAlm_oid));
+
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCbatEnvTemperature_oid,
+ OID_LENGTH (eocCbatEnvTemperature_oid),
+ ASN_INTEGER,
+ (u_char *) & temperature_cur,
+ sizeof (temperature_cur));
+ snmp_varlist_add_variable (&var_list, eocCbatEnvTempHighThreshold_oid,
+ OID_LENGTH (eocCbatEnvTempHighThreshold_oid),
+ ASN_INTEGER,
+ (u_char *) & temperature_max,
+ sizeof (temperature_max));
+
+ /*
+ * Add any extra (optional) objects here
+ */
+
+ /*
+ * Send the trap to the list of configured destinations
+ * and clean up
+ */
+ send_v2trap (var_list);
+ snmp_free_varbind (var_list);
+ eocCbatHighTemperatureClr = 1;
+ return SNMP_ERR_NOERROR;
+}
+
+
+/* function returns 1 if trap generation status is enabled and 0 if it is disabled */
+int
+send_eocCbatHighTemperatureClr_trap (void)
+{
+ netsnmp_variable_list *var_list = NULL;
+ oid eocCbatHighTemperatureClr_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 2, 1, 1, 2 };
+ oid eocCbatEnvTemperature_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 1};
+ oid eocCbatEnvTempHighThreshold_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 2};
+
+ int temperature_cur;
+ int temperature_max;
+ char buffer[EOC_THRESHOLD_BUFFER];
+ int ret;
+
+ ret = libspid_hardware_get_temperature (&temperature_cur);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_hardware_get_temperature error\n");
+ temperature_cur = TRAP_TEMPERATURE_DEFAULT_VALUE;
+ }
+
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_TEMP_HIGHTHRESHOLD,
+ buffer, EOC_THRESHOLD_BUFFER);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCbatTraps: libspid_config_read_item error for trap IP\n");
+ /* trap IP address set to default value */
+ temperature_max = TRAP_TEMPERATURE_HIGHTHRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ temperature_max = strtol (buffer, NULL, 10);
+ }
+
+ /*
+ * Set the snmpTrapOid.0 value
+ */
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (u_char *) eocCbatHighTemperatureClr_oid,
+ sizeof (eocCbatHighTemperatureClr_oid));
+
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCbatEnvTemperature_oid,
+ OID_LENGTH (eocCbatEnvTemperature_oid),
+ ASN_INTEGER,
+ (u_char *) & temperature_cur,
+ sizeof (temperature_cur));
+ snmp_varlist_add_variable (&var_list, eocCbatEnvTempHighThreshold_oid,
+ OID_LENGTH (eocCbatEnvTempHighThreshold_oid),
+ ASN_INTEGER,
+ (u_char *) & temperature_max,
+ sizeof (temperature_max));
+
+ /*
+ * Add any extra (optional) objects here
+ */
+
+ /*
+ * Send the trap to the list of configured destinations
+ * and clean up
+ */
+ send_v2trap (var_list);
+ snmp_free_varbind (var_list);
+
+ eocCbatHighTemperatureClr = 0;
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+send_eocCbatLowTemperatureAlm_trap (void)
+{
+ netsnmp_variable_list *var_list = NULL;
+ oid eocCbatLowTemperatureAlm_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 2, 1, 1, 3 };
+ oid eocCbatEnvTemperature_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 1};
+ oid eocCbatEnvTempLowThreshold_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 3};
+
+ int temperature_cur;
+ int temperature_min;
+
+ char buffer[EOC_THRESHOLD_BUFFER];
+ int ret;
+
+ ret = libspid_hardware_get_temperature (&temperature_cur);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_hardware_get_temperature error\n");
+ temperature_cur = TRAP_TEMPERATURE_DEFAULT_VALUE;
+ }
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_TEMP_LOWTHRESHOLD,
+ buffer, EOC_THRESHOLD_BUFFER);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCbatTraps: libspid_config_read_item error for trap IP\n");
+ /* trap IP address set to default value */
+ temperature_min = TRAP_TEMPERATURE_HIGHTHRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ temperature_min = strtol (buffer, NULL, 10);
+ }
+ /*
+ * Set the snmpTrapOid.0 value
+ */
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (u_char *) eocCbatLowTemperatureAlm_oid,
+ sizeof (eocCbatLowTemperatureAlm_oid));
+
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCbatEnvTemperature_oid,
+ OID_LENGTH (eocCbatEnvTemperature_oid),
+ ASN_INTEGER,
+ (u_char *) & temperature_cur,
+ sizeof (temperature_cur));
+ snmp_varlist_add_variable (&var_list, eocCbatEnvTempLowThreshold_oid,
+ OID_LENGTH (eocCbatEnvTempLowThreshold_oid),
+ ASN_INTEGER,
+ (u_char *) & temperature_min,
+ sizeof (temperature_min));
+
+ /*
+ * Add any extra (optional) objects here
+ */
+
+ /*
+ * Send the trap to the list of configured destinations
+ * and clean up
+ */
+ send_v2trap (var_list);
+ snmp_free_varbind (var_list);
+
+ eocCbatLowTemperatureClr = 1;
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+send_eocCbatLowTemperatureClr_trap (void)
+{
+ netsnmp_variable_list *var_list = NULL;
+ oid eocCbatLowTemperatureClr_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 2, 1, 1, 4 };
+ oid eocCbatEnvTemperature_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 1};
+ oid eocCbatEnvTempLowThreshold_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 3};
+
+ int temperature_cur;
+ int temperature_min;
+
+ char buffer[EOC_THRESHOLD_BUFFER];
+ int ret;
+
+ ret = libspid_hardware_get_temperature (&temperature_cur);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_hardware_get_temperature error\n");
+ temperature_cur = TRAP_TEMPERATURE_DEFAULT_VALUE;
+ }
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_TEMP_LOWTHRESHOLD,
+ buffer, EOC_THRESHOLD_BUFFER);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCbatTraps: libspid_config_read_item error for trap IP\n");
+ /* trap IP address set to default value */
+ temperature_min = TRAP_TEMPERATURE_HIGHTHRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ temperature_min = strtol (buffer, NULL, 10);
+ }
+ /*
+ * Set the snmpTrapOid.0 value
+ */
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (u_char *) eocCbatLowTemperatureClr_oid,
+ sizeof (eocCbatLowTemperatureClr_oid));
+
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCbatEnvTemperature_oid,
+ OID_LENGTH (eocCbatEnvTemperature_oid),
+ ASN_INTEGER,
+ (u_char *) & temperature_cur,
+ sizeof (temperature_cur));
+ snmp_varlist_add_variable (&var_list, eocCbatEnvTempLowThreshold_oid,
+ OID_LENGTH (eocCbatEnvTempLowThreshold_oid),
+ ASN_INTEGER,
+ (u_char *) & temperature_min,
+ sizeof (temperature_min));
+
+ /*
+ * Add any extra (optional) objects here
+ */
+
+ /*
+ * Send the trap to the list of configured destinations
+ * and clean up
+ */
+ send_v2trap (var_list);
+ snmp_free_varbind (var_list);
+
+ eocCbatLowTemperatureClr = 0;
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+send_eocCbatCardCpuOverloadAlm_trap (void)
+{
+ netsnmp_variable_list *var_list = NULL;
+ oid eocCbatCardCpuOverloadAlm_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 2, 1, 1, 5 };
+ oid eocCbatCardCpuLoad_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 4};
+ oid eocCbatCardCpuLoadThreshold_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 5};
+
+ int cpuload_cur;
+ int cpuload_max;
+ char buffer[EOC_THRESHOLD_BUFFER];
+ int ret;
+
+ ret = libspid_system_get_cpuload_percent (&cpuload_cur);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_cpuload error\n");
+ cpuload_cur = TRAP_CPULOAD_DEFAULT_VALUE;
+ }
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_CPULOAD_THRESHOLD,
+ buffer, EOC_THRESHOLD_BUFFER);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCbatTraps: libspid_config_read_item error for trap IP\n");
+ /* trap IP address set to default value */
+ cpuload_max = TRAP_TEMPERATURE_HIGHTHRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ cpuload_max = strtol (buffer, NULL, 10);
+ }
+ /*
+ * Set the snmpTrapOid.0 value
+ */
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (u_char *) eocCbatCardCpuOverloadAlm_oid,
+ sizeof (eocCbatCardCpuOverloadAlm_oid));
+
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCbatCardCpuLoad_oid,
+ OID_LENGTH (eocCbatCardCpuLoad_oid),
+ ASN_INTEGER,
+ (u_char *) & cpuload_cur,
+ sizeof (cpuload_cur));
+ snmp_varlist_add_variable (&var_list, eocCbatCardCpuLoadThreshold_oid,
+ OID_LENGTH (eocCbatCardCpuLoadThreshold_oid),
+ ASN_INTEGER,
+ (u_char *) & cpuload_max,
+ sizeof (cpuload_max));
+
+ /*
+ * Add any extra (optional) objects here
+ */
+
+ /*
+ * Send the trap to the list of configured destinations
+ * and clean up
+ */
+ send_v2trap (var_list);
+ snmp_free_varbind (var_list);
+
+ eocCbatCpuLoadClr = 1;
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+send_eocCbatCardCpuOverloadClr_trap (void)
+{
+ netsnmp_variable_list *var_list = NULL;
+ oid eocCbatCardCpuOverloadClr_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 2, 1, 1, 6 };
+ oid eocCbatCardCpuLoad_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 4};
+ oid eocCbatCardCpuLoadThreshold_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 5};
+
+ int cpuload_cur;
+ int cpuload_max;
+ char buffer[EOC_THRESHOLD_BUFFER];
+ int ret;
+
+ ret = libspid_system_get_cpuload_percent (&cpuload_cur);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ cpuload_cur = TRAP_CPULOAD_DEFAULT_VALUE;
+ }
+
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_CPULOAD_THRESHOLD,
+ buffer, EOC_THRESHOLD_BUFFER);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCbatTraps: libspid_config_read_item error for trap IP\n");
+ /* trap IP address set to default value */
+ cpuload_max = TRAP_TEMPERATURE_HIGHTHRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than maximum value,
+ * copy only maximum permitted number of bytes */
+ cpuload_max = strtol (buffer, NULL, 10);
+ }
+ /*
+ * Set the snmpTrapOid.0 value
+ */
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (u_char *) eocCbatCardCpuOverloadClr_oid,
+ sizeof (eocCbatCardCpuOverloadClr_oid));
+
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCbatCardCpuLoad_oid,
+ OID_LENGTH (eocCbatCardCpuLoad_oid),
+ ASN_INTEGER,
+ (u_char *) & cpuload_cur,
+ sizeof (cpuload_cur));
+ snmp_varlist_add_variable (&var_list, eocCbatCardCpuLoadThreshold_oid,
+ OID_LENGTH (eocCbatCardCpuLoadThreshold_oid),
+ ASN_INTEGER,
+ (u_char *) & cpuload_max,
+ sizeof (cpuload_max));
+
+ /*
+ * Add any extra (optional) objects here
+ */
+
+ /*
+ * Send the trap to the list of configured destinations
+ * and clean up
+ */
+ send_v2trap (var_list);
+ snmp_free_varbind (var_list);
+
+ eocCbatCpuLoadClr = 0;
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+send_eocCbatCardMemOverloadAlm_trap (void)
+{
+ netsnmp_variable_list *var_list = NULL;
+ oid eocCbatCardMemOverloadAlm_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 2, 1, 1, 7 };
+ oid eocCbatCardMemUsage_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 6};
+ oid eocCbatCardMemUsageThreshold_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 7};
+
+ int memusage_cur;
+ int memusage_max;
+ char buffer[EOC_THRESHOLD_BUFFER];
+ int ret;
+
+ ret = libspid_system_get_memusage_percent (&memusage_cur);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_memusage_percent error\n");
+ memusage_cur = TRAP_MEMUSAGE_DEFAULT_VALUE;
+ }
+
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_MEMUSAGE_THRESHOLD,
+ buffer, EOC_THRESHOLD_BUFFER);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCbatTraps: libspid_config_read_item error for trap IP\n");
+ /* trap IP address set to default value */
+ memusage_max = TRAP_TEMPERATURE_HIGHTHRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than maximum value,
+ * copy only maximum permitted number of bytes */
+ memusage_max = strtol (buffer, NULL, 10);
+ }
+ /*
+ * Set the snmpTrapOid.0 value
+ */
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (u_char *) eocCbatCardMemOverloadAlm_oid,
+ sizeof (eocCbatCardMemOverloadAlm_oid));
+
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCbatCardMemUsage_oid,
+ OID_LENGTH (eocCbatCardMemUsage_oid),
+ ASN_INTEGER,
+ (u_char *) & memusage_cur,
+ sizeof (memusage_cur));
+ snmp_varlist_add_variable (&var_list, eocCbatCardMemUsageThreshold_oid,
+ OID_LENGTH (eocCbatCardMemUsageThreshold_oid),
+ ASN_INTEGER,
+ (u_char *) & memusage_max,
+ sizeof (memusage_max));
+
+ /*
+ * Add any extra (optional) objects here
+ */
+
+ /*
+ * Send the trap to the list of configured destinations
+ * and clean up
+ */
+ send_v2trap (var_list);
+ snmp_free_varbind (var_list);
+
+ eocCbatMemUsageClr = 1;
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+send_eocCbatCardMemOverloadClr_trap (void)
+{
+ netsnmp_variable_list *var_list = NULL;
+ oid eocCbatCardMemOverloadClr_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 2, 1, 1, 8 };
+ oid eocCbatCardMemUsage_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 6};
+ oid eocCbatCardMemUsageThreshold_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 1, 1, 7};
+
+ int memusage_cur;
+ int memusage_max;
+ char buffer[EOC_THRESHOLD_BUFFER];
+ int ret;
+
+ ret = libspid_system_get_memusage_percent (&memusage_cur);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_memusage_percent error\n");
+ memusage_cur = TRAP_MEMUSAGE_DEFAULT_VALUE;
+ }
+
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_MEMUSAGE_THRESHOLD,
+ buffer, EOC_THRESHOLD_BUFFER);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCbatTraps: libspid_config_read_item error for trap IP\n");
+ /* trap IP address set to default value */
+ memusage_max = TRAP_TEMPERATURE_HIGHTHRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than maximum value, copy only maximum permitted number of bytes */
+ memusage_max = strtol (buffer, NULL, 10);
+ }
+ /*
+ * Set the snmpTrapOid.0 value
+ */
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (u_char *) eocCbatCardMemOverloadClr_oid,
+ sizeof (eocCbatCardMemOverloadClr_oid));
+
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCbatCardMemUsage_oid,
+ OID_LENGTH (eocCbatCardMemUsage_oid),
+ ASN_INTEGER,
+ /* Set an appropriate value for eocCbatCardMemUsage */
+ (u_char *) & memusage_cur,
+ sizeof (memusage_cur));
+ snmp_varlist_add_variable (&var_list, eocCbatCardMemUsageThreshold_oid,
+ OID_LENGTH (eocCbatCardMemUsageThreshold_oid),
+ ASN_INTEGER,
+ /* Set an appropriate value for eocCbatCardMemUsageThreshold */
+ (u_char *) & memusage_max,
+ sizeof (memusage_max));
+
+ /*
+ * Add any extra (optional) objects here
+ */
+
+ /*
+ * Send the trap to the list of configured destinations
+ * and clean up
+ */
+ send_v2trap (var_list);
+ snmp_free_varbind (var_list);
+
+ eocCbatMemUsageClr = 0;
+
+ return SNMP_ERR_NOERROR;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCbatCardTraps/eocCbatCardTraps.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCbatCardTraps/eocCbatCardTraps.h
new file mode 100644
index 0000000000..cabc264a63
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCbatCardTraps/eocCbatCardTraps.h
@@ -0,0 +1,58 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.notify.conf 10110 2004-04-15 12:29:19Z dts12 $
+ */
+#ifndef EOCCBATCARDTRAPS_H
+#define EOCCBATCARDTRAPS_H
+
+
+/* include common header */
+#include "EoCCommon.h"
+
+/* definitions for OID strings */
+#define EOCCBATOID ".1.3.6.1.4.1.17409.2.2.1.1"
+#define EOCCBATHIGHTEMPERATUREALMOID ".1.3.6.1.4.1.17409.2.2.1.1.1"
+#define EOCCBATHIHGTEMPERATURECLROID ".1.3.6.1.4.1.17409.2.2.1.1.2"
+#define EOCCBATLOWTEMPERATUREALMOID ".1.3.6.1.4.1.17409.2.2.1.1.3"
+#define EOCCBATLOWTEMPERATURECLROID ".1.3.6.1.4.1.17409.2.2.1.1.4"
+#define EOCCBATCARDCPUOVERLOADALMOID ".1.3.6.1.4.1.17409.2.2.1.1.5"
+#define EOCCBATCARDCPUOVERLOADCLROID ".1.3.6.1.4.1.17409.2.2.1.1.6"
+#define EOCCBATCARDMEMOVERLOADALMOID ".1.3.6.1.4.1.17409.2.2.1.1.7"
+#define EOCCBATCARDMEMOVERLOADCLROID ".1.3.6.1.4.1.17409.2.2.1.1.8"
+
+
+#define EOC_THRESHOLD_BUFFER 5
+
+typedef struct eocCbatTraps_threshold
+{
+ int alarm_temperature_highthreshold;
+ int alarm_temperature_lowthreshold;
+ int alarm_cpuload_threshold;
+ int alarm_memusage_threshold;
+}eocCbatTraps_threshold_t;
+
+
+
+/* function declarations */
+int
+checkEoCCBatAlarms ();
+
+/*send funs for EoCCBat Traps*/
+int
+send_eocCbatHighTemperatureAlm_trap (void);
+int
+send_eocCbatHighTemperatureClr_trap (void);
+int
+send_eocCbatLowTemperatureAlm_trap (void);
+int
+send_eocCbatLowTemperatureClr_trap (void);
+int
+send_eocCbatCardCpuOverloadAlm_trap (void);
+int
+send_eocCbatCardCpuOverloadClr_trap (void);
+int
+send_eocCbatCardMemOverloadAlm_trap (void);
+int
+send_eocCbatCardMemOverloadClr_trap (void);
+
+#endif /* EOCCBATCARDTRAPS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCnuTraps.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCnuTraps.h
new file mode 100644
index 0000000000..75c6dfd0a0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCnuTraps.h
@@ -0,0 +1 @@
+config_require(mstar-alarm-mib/eocCnuTraps/eocCnuTraps)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCnuTraps/eocCnuTraps.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCnuTraps/eocCnuTraps.c
new file mode 100644
index 0000000000..454ec2a64b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCnuTraps/eocCnuTraps.c
@@ -0,0 +1,964 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.notify.conf 10110 2004-04-15 12:29:19Z 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 "eocCnuTraps.h"
+
+
+/*
+ * definition of snmpTrapOID.0 object
+ */
+static oid eoc_objid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 };
+
+/*Flags for EoCCnu alarms*/
+cnu_alarm_info_t cnu_alarm_info[LIBSPID_ONLINE_INFO_LINE_MAX_NB];
+cnu_unauth_info_t cnu_unauth_info[LIBSPID_ONLINE_INFO_LINE_MAX_NB];
+
+char tmp_mac[LIBSPID_MAC_STR_LEN];
+
+int
+set_cnu_alarm_list (int tei, int bit, int flag)
+{
+ int i = 0;
+
+ if (bit < 0)
+ return -1;
+
+ for (i = 0; i < LIBSPID_ONLINE_INFO_LINE_MAX_NB; i++)
+ {
+ if (cnu_alarm_info[i].tei == tei)
+ {
+ if (flag == 1)
+ cnu_alarm_info[i].state =
+ (cnu_alarm_info[i].state) | bit;
+ else if ((cnu_alarm_info[i].state) & bit)
+ {
+ cnu_alarm_info[i].state =
+ (cnu_alarm_info[i].state) ^ bit;
+ }
+
+ return tei;
+ }
+ }
+
+ for (i = 0; i < LIBSPID_ONLINE_INFO_LINE_MAX_NB; i++)
+ {
+ if (cnu_alarm_info[i].tei == 0)
+ {
+ cnu_alarm_info[i].state = (flag == 1) ? bit : 0;
+ cnu_alarm_info[i].tei = tei;
+ return tei;
+ }
+ }
+
+ return -1;
+}
+
+
+int
+find_cnu_alarm_list (int tei)
+{
+ int i = 0;
+
+ for (i = 0; i < LIBSPID_ONLINE_INFO_LINE_MAX_NB; i++)
+ {
+ if (cnu_alarm_info[i].tei == tei)
+ return cnu_alarm_info[i].state;
+ }
+
+ return -1;
+}
+
+int
+check_cnu_alarm_list (int tei, int bit)
+{
+ int i;
+
+ if (bit < 0)
+ return -1;
+
+
+ for (i = 0; i < LIBSPID_ONLINE_INFO_LINE_MAX_NB; i++)
+ {
+ if (cnu_alarm_info[i].tei == tei)
+ {
+ if (cnu_alarm_info[i].state & bit)
+ return 1;
+ return 0;
+ }
+ }
+
+ return 0;
+}
+int
+set_cnu_unauth_list (char *mac)
+{
+ int i = 0;
+
+
+ for (i = 0; i < LIBSPID_ONLINE_INFO_LINE_MAX_NB; i++)
+ {
+ if (strcmp (cnu_unauth_info[i].mac, mac) == 0)
+ {
+ cnu_unauth_info[i].trap_state = 1;
+ cnu_unauth_info[i].onlined_state = 1;
+ return 1;
+ }
+
+ if (strcmp (cnu_unauth_info[i].mac, "") == 0)
+ {
+ strcpy (cnu_unauth_info[i].mac, mac);
+ cnu_unauth_info[i].trap_state = 1;
+ cnu_unauth_info[i].onlined_state = 1;
+ return 1;
+ }
+ }
+
+ return -1;
+}
+
+void
+clear_cnu_unauth_onlined_list ()
+{
+ int i = 0;
+
+
+ for (i = 0; i < LIBSPID_ONLINE_INFO_LINE_MAX_NB; i++)
+ {
+ if (strcmp (cnu_unauth_info[i].mac, "") != 0)
+ {
+ cnu_unauth_info[i].onlined_state = 0;
+ }
+ }
+}
+
+void
+clear_cnu_unauth_list ()
+{
+ int i = 0;
+
+ for (i = 0; i < LIBSPID_ONLINE_INFO_LINE_MAX_NB; i++)
+ {
+ if ((strcmp (cnu_unauth_info[i].mac, "") != 0) &&
+ (cnu_unauth_info[i].onlined_state == 0))
+ {
+ strcpy (cnu_unauth_info[i].mac, "") ;
+ }
+ }
+}
+
+
+int
+check_cnu_unauth_list (char *mac)
+{
+ int i = 0;
+
+
+ for (i = 0; i < LIBSPID_ONLINE_INFO_LINE_MAX_NB; i++)
+ {
+ if (strcmp (cnu_unauth_info[i].mac, mac) == 0)
+ {
+ return cnu_unauth_info[i].trap_state;
+ }
+ }
+
+ return 0;
+}
+
+
+
+void
+getEoCCnuAlarmThreshold (eocCnuTraps_threshold_t * this)
+{
+ int ret;
+ char buffer[LIBSPID_KEY_MAX_LEN];
+
+ netsnmp_assert (NULL != this);
+ memset (this, 0x0, sizeof (eocCnuTraps_threshold_t));
+
+
+ /* read HighAttenuation threshold string from config file */
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ATN_HIGHTHRESHOLD,
+ buffer, LIBSPID_KEY_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCnuTraps: libspid_config_read_item error for "
+ "ALARM_ATN_HIGHTHRESHOLD\n");
+ /* trap hightthreshold set to default value */
+
+ this->highAttenuationAlm_threshold =
+ TRAP_ATTENUATION_HIGHTHRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than maximum value,
+ * copy only maximum permitted number of bytes */
+
+ this->highAttenuationAlm_threshold = strtol (buffer, NULL, 10);
+ }
+
+
+ /* read LowAttenuation threshold string from config file */
+ ret =
+ libspid_config_read_item (LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ATN_LOWTHRESHOLD,
+ buffer, LIBSPID_KEY_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "eocCnuTraps: libspid_config_read_item error for "
+ "ALARM_ATN_LOWTHRESHOLD\n");
+ /* alarm lowthreshold set to default value */
+ this->lowAttenuationAlm_threshold =
+ TRAP_ATTENUATION_LOWTHRESHOLD_DEFAULT_VALUE;
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than maximum value,
+ * copy only maximum permitted number of bytes */
+ this->lowAttenuationAlm_threshold = strtol (buffer, NULL, 10);
+ }
+
+}
+
+/*we need to put the slave's tei into alarm_oid , so first we should do this
+ * fun*/
+int
+handleEoCCnuAlarmOID ()
+{
+ int ret, i = 0;
+ eocCnuTraps_threshold_t eocCnuTraps_thresholds;
+
+ eocCnuOnlineInfo_t eocCnuOnlineInfo[TRAP_MAX_SERVER_MAX_NB];
+ int online_mac_count = 0;
+ int value = 0, thr_value = 0;
+
+
+ char buffer[LIBSPID_LINE_MAX_LEN], key_buffer[LIBSPID_KEY_MAX_LEN];
+ const char delimiters[2] = LIBSPID_ONLINE_INFO_DELIMITER "\0";
+ unsigned int elt_number = LIBSPID_ELT_MAX_NB;
+ char *elt_buffer[LIBSPID_ELT_MAX_NB];
+
+ libspid_eoc_wl_entry_t eoc_wl_entry;
+
+ strcpy (key_buffer, "");
+
+ memset (&eoc_wl_entry, 0x0, sizeof (libspid_eoc_wl_entry_t));
+
+ getEoCCnuAlarmThreshold (&eocCnuTraps_thresholds);
+
+ ret =
+ libspid_config_read_line (LIBSPID_ONLINE_INFO_PATH, delimiters,
+ key_buffer, &elt_number, elt_buffer, buffer,
+ LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ syslog (LOG_DEBUG,
+ "eocCnuTraps:eocCnuTraps_read_online_item: error reading "
+ "online entry for MAC address_count: %d\n",
+ online_mac_count);
+ return ret;
+ }
+
+ for (i = 0; i < LIBSPID_ONLINE_INFO_LINE_MAX_NB; i++)
+ {
+ /* check that eof is not reached */
+ if (!strcmp (key_buffer, ""))
+ {
+ DEBUGMSGTL (("eocCnuTraps:eocCnuTraps_read_online_item",
+ "eof reached for mac_address_count : %d \n", i));
+ break;
+ }
+
+ /* set number of remaining line elements to extract */
+ elt_number = LIBSPID_ELT_MAX_NB;
+ strncpy (eocCnuOnlineInfo[i].curAtn_macAddress, key_buffer,
+ sizeof (eocCnuOnlineInfo[i].curAtn_macAddress));
+ eocCnuOnlineInfo[i].curAtn_macAddress[strlen (key_buffer)] = '\0';
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_read_line (LIBSPID_ONLINE_INFO_PATH, delimiters,
+ key_buffer, &elt_number, elt_buffer,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ snmp_log (LOG_ERR,
+ "libspid_config_read_line for online info error\n");
+ }
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_wl_get (eocCnuOnlineInfo[i].curAtn_macAddress,
+ &eoc_wl_entry))
+ {
+ snmp_log (LOG_ERR,
+ "libspid_config_read_line for wl info error\n");
+ eocCnuOnlineInfo[i].tei = 0;
+ }
+ else
+ {
+ sscanf (eoc_wl_entry.tei, "%d", &eocCnuOnlineInfo[i].tei);
+ }
+
+ sscanf (elt_buffer[5], "%d", &eocCnuOnlineInfo[i].curAtn);
+ sscanf (elt_buffer[2], "%d", &eocCnuOnlineInfo[i].authorisation);
+ }
+
+ online_mac_count = i;
+
+ ret = checkEoCCnuAlarm (eocCnuOnlineInfo, online_mac_count,
+ &eocCnuTraps_thresholds);
+ return ret;
+}
+
+
+
+int
+checkEoCCnuAlarm (eocCnuOnlineInfo_t * eocCnuOnlineInfo, int online_mac_count,
+ eocCnuTraps_threshold_t * eocCnuTraps_thresholds)
+{
+ eocCnuOnlineInfo_t *temp;
+ char oid_str[LIBSPID_OID_MAX_LEN];
+ int i = 0;
+
+ if (eocCnuOnlineInfo == NULL || eocCnuTraps_thresholds == NULL)
+ return SNMP_ERR_BADVALUE;
+
+ temp = eocCnuOnlineInfo;
+ clear_cnu_unauth_onlined_list ();
+ /*to register alarm by the device value list */
+ for (i = 0; i < online_mac_count; i++)
+ {
+
+ memset (oid_str, 0x0, sizeof (oid_str));
+
+
+ /*check if we can create the first online alarm */
+ if (temp->authorisation == 0)
+ {
+ sprintf (oid_str, "%s.%d",
+ EOCCNUUNAUTHCNUFIRSTONLINE_OID_STR,
+ i);
+ memset (tmp_mac, 0x0, LIBSPID_MAC_STR_LEN);
+ strcpy (tmp_mac, temp->curAtn_macAddress);
+
+ int status;
+ status = check_cnu_unauth_list (tmp_mac);
+ if (status == 0)
+ {
+ registerEoCAlarm (oid_str, 1, temp->authorisation);
+
+ }
+ set_cnu_unauth_list (tmp_mac);
+ temp++; //make sure the point get to next.
+ continue; //the slave can not be authorisation , so we do nothing
+ }
+
+
+ /*check if we can create the highAttenuation alarm */
+
+ if (temp->curAtn >
+ eocCnuTraps_thresholds->highAttenuationAlm_threshold)
+ {
+ sprintf (oid_str, "%s.0.%d", EOCCNURFHIGHATTENUATIONALM_OID_STR,
+ temp->tei - 2);
+ registerEoCAlarm (oid_str, 1, temp->curAtn);
+
+ if (-1 ==
+ set_cnu_alarm_list (temp->tei, EOCCNUHIGHATTENUATIONCLR_BIT,
+ 1))
+ {
+ snmp_log (LOG_ERR, "set HighAttenuationClr failed\n");
+ return SNMP_ERR_GENERR;
+ }
+ }
+ else if (check_cnu_alarm_list
+ (temp->tei, EOCCNUHIGHATTENUATIONCLR_BIT))
+ {
+ /*to send clear trap */
+ sprintf (oid_str, "%s.0.%d", EOCCNURFHIGHATTENUATIONCLR_OID_STR,
+ temp->tei - 2);
+ registerEoCAlarm (oid_str, 0, temp->curAtn);
+
+ if (-1 ==
+ set_cnu_alarm_list (temp->tei, EOCCNUHIGHATTENUATIONCLR_BIT,
+ 0))
+ {
+ snmp_log (LOG_ERR, "set HighAttenuationClr failed\n");
+ return SNMP_ERR_GENERR;
+ }
+
+ }
+
+ /*check if we can create the lowAttenuationAlm alarm */
+ if (temp->curAtn <
+ eocCnuTraps_thresholds->lowAttenuationAlm_threshold)
+ {
+ sprintf (oid_str, "%s.0.%d", EOCCNURFLOWATTENUATIONALM_OID_STR,
+ temp->tei - 2);
+ registerEoCAlarm (oid_str, 1, temp->curAtn);
+
+ if (-1 ==
+ set_cnu_alarm_list (temp->tei, EOCCNULOWATTENUATIONCLR_BIT,
+ 1))
+ {
+ snmp_log (LOG_ERR, "set LowAttenuationClr failed\n");
+ return SNMP_ERR_GENERR;
+ }
+ }
+ else if (check_cnu_alarm_list
+ (temp->tei, EOCCNULOWATTENUATIONCLR_BIT))
+ {
+ /*to send clear trap */
+ sprintf (oid_str, "%s.0.%d", EOCCNURFLOWATTENUATIONCLR_OID_STR,
+ temp->tei - 2);
+ registerEoCAlarm (oid_str, 0, temp->curAtn);
+
+ if (-1 ==
+ set_cnu_alarm_list (temp->tei, EOCCNULOWATTENUATIONCLR_BIT,
+ 0))
+ {
+ snmp_log (LOG_ERR, "set LowAttenuationClr failed\n");
+ return SNMP_ERR_GENERR;
+ }
+ }
+
+ temp++;
+
+ }
+ clear_cnu_unauth_list ();
+
+ return SNMP_ERR_NOERROR;
+
+}
+
+
+int
+send_eocCnuRfHighAttenuationAlm_trap (char *alarm_oid_str, int value,
+ int state)
+{
+ int ret;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ netsnmp_variable_list *var_list = NULL;
+ oid eocCnuRfHighAttenuationAlm_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 2, 1, 3, 4 };
+ oid eocCNURFAttenuation_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 4, 5, 2, 4, 1, 10};
+ oid eocCnuRfHighAtnThreshold_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 2, 1, 1};
+
+ oid alarm_oid[LIBSPID_OID_MAX_LEN];
+ size_t alarm_oid_len = LIBSPID_OID_MAX_LEN;
+ int rf_atn_highthreshold;
+
+ /* add alarm OID as trap variable */
+
+
+ /*
+ * Set the snmpTrapOid.0 value
+ */
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (const u_char *)
+ eocCnuRfHighAttenuationAlm_oid,
+ sizeof (eocCnuRfHighAttenuationAlm_oid));
+
+ /* parse alarm OID from string representation */
+ if (!read_objid (alarm_oid_str, alarm_oid, &alarm_oid_len))
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: error parsing alarm OID from string "
+ "representation, setting OID to invalid\n");
+ read_objid ("0.0", alarm_oid, &alarm_oid_len);
+ }
+ else
+ {
+ /* check if length of parsed OID is within allowed range */
+ if (alarm_oid_len < 1 || alarm_oid_len > LIBSPID_OID_MAX_LEN)
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: alarm OID length out of range, "
+ "setting OID to invalid\n");
+ read_objid ("0.0", alarm_oid, &alarm_oid_len);
+ }
+ }
+
+ /*
+ * Set the snmpTrapOid.0 value
+ */
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (const u_char *) alarm_oid,
+ alarm_oid_len * sizeof (oid));
+
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCNURFAttenuation_oid,
+ OID_LENGTH (eocCNURFAttenuation_oid),
+ ASN_INTEGER,
+ (u_char *) & value, sizeof (value));
+
+
+ ret = libspid_config_read_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ATN_HIGHTHRESHOLD,
+ buffer, LIBSPID_KEY_MAX_LEN);
+ if (ret == LIBSPID_SUCCESS)
+ {
+ /* parse rf_atn_highthreshold from buffer */
+ if (1 != sscanf (buffer, "%d", &rf_atn_highthreshold))
+ {
+ rf_atn_highthreshold = 0;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ rf_atn_highthreshold = 0;
+ }
+
+ snmp_varlist_add_variable (&var_list,
+ eocCnuRfHighAtnThreshold_oid,
+ OID_LENGTH (eocCnuRfHighAtnThreshold_oid),
+ ASN_INTEGER,
+ (u_char *) &rf_atn_highthreshold,
+ sizeof (rf_atn_highthreshold));
+
+ /*
+ * Send the trap to the list of configured destinations
+ * and clean up
+ */
+
+ send_v2trap (var_list);
+ snmp_free_varbind (var_list);
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+send_eocCnuRfHighAttenuationClr_trap (char *alarm_oid_str, int value,
+ int state)
+{
+ int ret;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ netsnmp_variable_list *var_list = NULL;
+ oid eocCnuRfHighAttenuationClr_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 2, 1, 3, 5 };
+ oid eocCNURFAttenuation_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 4, 5, 2, 4, 1, 10};
+ oid eocCnuRfHighAtnThreshold_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 2, 1, 1};
+
+
+ oid alarm_oid[LIBSPID_OID_MAX_LEN];
+ size_t alarm_oid_len = LIBSPID_OID_MAX_LEN;
+ int rf_atn_highthreshold;
+ /* add alarm OID as trap variable */
+
+
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (u_char *) eocCnuRfHighAttenuationClr_oid,
+ sizeof (eocCnuRfHighAttenuationClr_oid));
+
+
+ /* parse alarm OID from string representation */
+ if (!read_objid (alarm_oid_str, alarm_oid, &alarm_oid_len))
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: error parsing alarm OID from string "
+ "representation, setting OID to invalid\n");
+ read_objid ("0.0", alarm_oid, &alarm_oid_len);
+ }
+ else
+ {
+ /* check if length of parsed OID is within allowed range */
+ if (alarm_oid_len < 1 || alarm_oid_len > LIBSPID_OID_MAX_LEN)
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: alarm OID length out of range, "
+ "setting OID to invalid\n");
+ read_objid ("0.0", alarm_oid, &alarm_oid_len);
+ }
+ }
+
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap),
+ ASN_OBJECT_ID, (const u_char *) alarm_oid,
+ alarm_oid_len * sizeof (oid));
+
+
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCNURFAttenuation_oid,
+ OID_LENGTH (eocCNURFAttenuation_oid),
+ ASN_INTEGER,
+ (u_char *) & value, sizeof (value));
+
+
+ ret = libspid_config_read_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ATN_HIGHTHRESHOLD,
+ buffer, LIBSPID_KEY_MAX_LEN);
+ if (ret == LIBSPID_SUCCESS)
+ {
+ /* parse rf_atn_highthreshold from buffer */
+ if (1 != sscanf (buffer, "%d", &rf_atn_highthreshold))
+ {
+ rf_atn_highthreshold = 0;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ rf_atn_highthreshold = 0;
+ }
+
+ snmp_varlist_add_variable (&var_list,
+ eocCnuRfHighAtnThreshold_oid,
+ OID_LENGTH (eocCnuRfHighAtnThreshold_oid),
+ ASN_INTEGER,
+ (u_char *) &rf_atn_highthreshold,
+ sizeof (rf_atn_highthreshold));
+
+
+ /*
+ * Add any extra (optional) objects here
+ */
+
+ /*
+ * Send the trap to the list of configured destinations
+ * and clean up
+ */
+
+ send_v2trap (var_list);
+ snmp_free_varbind (var_list);
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+send_eocCnuRfLowAttenuationAlm_trap (char *alarm_oid_str, int value,
+ int state)
+{
+ int ret;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ netsnmp_variable_list *var_list = NULL;
+ oid eocCnuRfLowAttenuationAlm_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 2, 1, 3, 6 };
+ oid eocCNURFAttenuation_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 4, 5, 2, 4, 1, 10};
+ oid eocCnuRfLowAtnThreshold_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 2, 1, 2};
+
+ oid alarm_oid[LIBSPID_OID_MAX_LEN];
+ size_t alarm_oid_len = LIBSPID_OID_MAX_LEN;
+ int rf_atn_lowthreshold;
+ /* add alarm OID as trap variable */
+
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (u_char *) eocCnuRfLowAttenuationAlm_oid,
+ sizeof (eocCnuRfLowAttenuationAlm_oid));
+
+
+
+ /* parse alarm OID from string representation */
+ if (!read_objid (alarm_oid_str, alarm_oid, &alarm_oid_len))
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: error parsing alarm OID from string "
+ "representation, setting OID to invalid\n");
+ read_objid ("0.0", alarm_oid, &alarm_oid_len);
+ }
+ else
+ {
+ /* check if length of parsed OID is within allowed range */
+ if (alarm_oid_len < 1 || alarm_oid_len > LIBSPID_OID_MAX_LEN)
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: alarm OID length out of range, "
+ "setting OID to invalid\n");
+ read_objid ("0.0", alarm_oid, &alarm_oid_len);
+ }
+ }
+
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (const u_char *) alarm_oid,
+ alarm_oid_len * sizeof (oid));
+
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCNURFAttenuation_oid,
+ OID_LENGTH (eocCNURFAttenuation_oid),
+ ASN_INTEGER,
+ (u_char *) & value, sizeof (value));
+
+ /*
+ * Add any objects from the trap definition
+ */
+ ret = libspid_config_read_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ATN_LOWTHRESHOLD,
+ buffer, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret == LIBSPID_SUCCESS)
+ {
+ /* parse rf_atn_lowthreshold from buffer */
+ if (1 != sscanf (buffer, "%d", &rf_atn_lowthreshold))
+ {
+ rf_atn_lowthreshold = 0;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ rf_atn_lowthreshold = 0;
+ }
+
+ snmp_varlist_add_variable (&var_list,
+ eocCnuRfLowAtnThreshold_oid,
+ OID_LENGTH (eocCnuRfLowAtnThreshold_oid),
+ ASN_INTEGER,
+ (u_char *) &rf_atn_lowthreshold,
+ sizeof (rf_atn_lowthreshold));
+
+
+ /*
+ * Send the trap to the list of configured destinations
+ * and clean up
+ */
+
+ send_v2trap (var_list);
+ snmp_free_varbind (var_list);
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+send_eocCnuRfLowAttenuationClr_trap (char *alarm_oid_str, int value,
+ int state)
+{
+ int ret;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ netsnmp_variable_list *var_list = NULL;
+ oid eocCnuRfLowAttenuationClr_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 2, 1, 3, 7 };
+ oid eocCNURFAttenuation_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 4, 5, 2, 4, 1, 10};
+ oid eocCnuRfLowAtnThreshold_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 1, 1, 2, 1, 2};
+
+ oid alarm_oid[LIBSPID_OID_MAX_LEN];
+ size_t alarm_oid_len = LIBSPID_OID_MAX_LEN;
+ int rf_atn_lowthreshold;
+ /* add alarm OID as trap variable */
+
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (u_char *) eocCnuRfLowAttenuationClr_oid,
+ sizeof (eocCnuRfLowAttenuationClr_oid));
+
+
+ /* parse alarm OID from string representation */
+ if (!read_objid (alarm_oid_str, alarm_oid, &alarm_oid_len))
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: error parsing alarm OID from string "
+ "representation, setting OID to invalid\n");
+ read_objid ("0.0", alarm_oid, &alarm_oid_len);
+ }
+ else
+ {
+ /* check if length of parsed OID is within allowed range */
+ if (alarm_oid_len < 1 || alarm_oid_len > LIBSPID_OID_MAX_LEN)
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: alarm OID length out of range, "
+ "setting OID to invalid\n");
+ read_objid ("0.0", alarm_oid, &alarm_oid_len);
+ }
+ }
+
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (const u_char *) alarm_oid,
+ alarm_oid_len * sizeof (oid));
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCNURFAttenuation_oid,
+ OID_LENGTH (eocCNURFAttenuation_oid),
+ ASN_INTEGER,
+ (u_char *) & value, sizeof (value));
+
+
+ ret = libspid_config_read_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ATN_LOWTHRESHOLD,
+ buffer, LIBSPID_CONFIG_LINE_MAX_LEN);
+ if (ret == LIBSPID_SUCCESS)
+ {
+ /* parse rf_atn_lowthreshold from buffer */
+ if (1 != sscanf (buffer, "%d", &rf_atn_lowthreshold))
+ {
+ rf_atn_lowthreshold = 0;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ rf_atn_lowthreshold = 0;
+ }
+
+ snmp_varlist_add_variable (&var_list,
+ eocCnuRfLowAtnThreshold_oid,
+ OID_LENGTH (eocCnuRfLowAtnThreshold_oid),
+ ASN_INTEGER,
+ (u_char *) &rf_atn_lowthreshold,
+ sizeof (rf_atn_lowthreshold));
+
+ /*
+ * Send the trap to the list of configured destinations
+ * and clean up
+ */
+ send_v2trap (var_list);
+ snmp_free_varbind (var_list);
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+
+int
+send_eocCnuUnauthCnuFirstOnline_trap (char *alarm_oid_str, int value,
+ int state)
+{
+ netsnmp_variable_list *var_list = NULL;
+ oid eocCnuUnauthCnuFirstOnline_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 2, 1, 3, 1 };
+ oid eocCNUUnauthListCltNo_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 4, 5, 5, 1, 1, 2};
+ oid eocCNUUnauthListCnuNo_oid[] =
+ { 1, 3, 6, 1, 4, 1, 17409, 2, 4, 5, 5, 1, 1, 3};
+
+ oid alarm_oid[LIBSPID_OID_MAX_LEN];
+ size_t alarm_oid_len = LIBSPID_OID_MAX_LEN;
+ long cltno = 0;
+ long cnuno;
+ int i;
+ char mac[LIBSPID_MAC_STR_LEN];
+ mac_t mac_address_list[LIBSPID_ONLINE_INFO_LINE_MAX_NB];
+ int mac_address_count = 0;
+ /* add alarm OID as trap variable */
+
+
+ /*
+ * Set the snmpTrapOid.0 value
+ */
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (u_char *) eocCnuUnauthCnuFirstOnline_oid,
+ sizeof (eocCnuUnauthCnuFirstOnline_oid));
+
+
+
+ /* parse alarm OID from string representation */
+ if (!read_objid (alarm_oid_str, alarm_oid, &alarm_oid_len))
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: error parsing alarm OID from string "
+ "representation, setting OID to invalid\n");
+ read_objid ("0.0", alarm_oid, &alarm_oid_len);
+ }
+ else
+ {
+ /* check if length of parsed OID is within allowed range */
+ if (alarm_oid_len < 1 || alarm_oid_len > LIBSPID_OID_MAX_LEN)
+ {
+ syslog (LOG_DEBUG,
+ "EoCAlarmsAndTraps: alarm OID length out of range, "
+ "setting OID to invalid\n");
+ read_objid ("0.0", alarm_oid, &alarm_oid_len);
+ }
+ }
+
+
+ snmp_varlist_add_variable (&var_list,
+ eoc_objid_snmptrap,
+ OID_LENGTH (eoc_objid_snmptrap), ASN_OBJECT_ID,
+ (const u_char *) alarm_oid,
+ alarm_oid_len * sizeof (oid));
+
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCNUUnauthListCltNo_oid,
+ OID_LENGTH (eocCNUUnauthListCltNo_oid),
+ ASN_INTEGER,
+ (u_char *) & cltno, sizeof (cltno));
+
+
+ if (libspid_eoc_get_topo (mac_address_list[0], &mac_address_count)
+ != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_get_topo error\n");
+ return MFD_ERROR;
+ }
+ for (i = 0; i < mac_address_count; i++)
+ {
+ libspid_mac_bin_to_str (mac_address_list[i], mac);
+ if (strcmp (tmp_mac, mac) == 0)
+ break;
+ }
+ cnuno = i + 1;
+
+ /*
+ * Add any objects from the trap definition
+ */
+ snmp_varlist_add_variable (&var_list,
+ eocCNUUnauthListCnuNo_oid,
+ OID_LENGTH (eocCNUUnauthListCnuNo_oid),
+ ASN_INTEGER,
+ (u_char *) & cnuno, sizeof (cnuno));
+
+ /*
+ * Add any extra (optional) objects here
+ */
+
+ /*
+ * Send the trap to the list of configured destinations
+ * and clean up
+ */
+ send_v2trap (var_list);
+ snmp_free_varbind (var_list);
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCnuTraps/eocCnuTraps.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCnuTraps/eocCnuTraps.h
new file mode 100644
index 0000000000..6365c8de22
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-alarm-mib/eocCnuTraps/eocCnuTraps.h
@@ -0,0 +1,82 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.notify.conf 10110 2004-04-15 12:29:19Z dts12 $
+ */
+#ifndef EOCCNUTRAPS_H
+#define EOCCNUTRAPS_H
+
+
+/* include common header */
+#include "EoCCommon.h"
+
+/*eoc alarm oid*/
+#define EOCCNUOID ".1.3.6.1.4.1.17409.2.2.1.3"
+#define EOCCNUUNAUTHCNUFIRSTONLINE_OID_STR ".1.3.6.1.4.1.17409.2.2.1.3.1"
+
+#define EOCCNURFHIGHATTENUATIONALM_OID_STR ".1.3.6.1.4.1.17409.2.2.1.3.4"
+#define EOCCNURFHIGHATTENUATIONCLR_OID_STR ".1.3.6.1.4.1.17409.2.2.1.3.5"
+#define EOCCNURFLOWATTENUATIONALM_OID_STR ".1.3.6.1.4.1.17409.2.2.1.3.6"
+#define EOCCNURFLOWATTENUATIONCLR_OID_STR ".1.3.6.1.4.1.17409.2.2.1.3.7"
+
+
+#define EOCCNUHIGHATTENUATIONCLR_BIT (1 << 0)
+#define EOCCNULOWATTENUATIONCLR_BIT (1 << 1)
+
+
+
+typedef struct
+{
+ unsigned int tei;
+ unsigned char state;
+}cnu_alarm_info_t;
+
+typedef struct
+{
+ char mac[LIBSPID_MAC_STR_LEN];
+ int trap_state;
+ int onlined_state;
+}cnu_unauth_info_t;
+
+/*
+ *The struct to store threshold values of CnuTraps
+ *the values read from snmp.conf
+ *Attenuation simpled to Atn
+ */
+typedef struct eocCnuTraps_threshold
+{
+ int highAttenuationAlm_threshold;
+ int lowAttenuationAlm_threshold;
+ int mac_count;
+}eocCnuTraps_threshold_t;
+
+typedef struct eocCnuOnlineInfo
+{
+ char curAtn_macAddress[LIBSPID_MAC_STR_LEN];
+ int curAtn;
+ int authorisation;
+ int tei;
+}eocCnuOnlineInfo_t;
+
+
+
+/*send funs for EoCCnu Traps */
+int
+send_eocCnuRfHighAttenuationAlm_trap (char *alarm_oid_str,
+ int value ,int state);
+int
+send_eocCnuRfHighAttenuationClr_trap (char *alarm_oid_str,
+ int value ,int state);
+int
+send_eocCnuRfLowAttenuationAlm_trap (char *alarm_oid_str,
+ int value ,int state);
+int
+send_eocCnuRfLowAttenuationClr_trap (char *alarm_oid_str,
+ int value ,int state);
+int
+send_eocCnuUnauthCnuFirstOnline_trap (char *alarm_oid_str,
+ int value ,int state);
+int
+handleEoCCnuAlarmOID ( );
+
+
+#endif /* EOCCNUTRAPS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib.h
new file mode 100644
index 0000000000..62ef14493a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib.h
@@ -0,0 +1,12 @@
+config_add_mib(NSCRTV-EPONEOC-MOD-EOC-MIB)
+config_require(mstar-eoc-mib/eocCBATAdminGroup)
+config_require(mstar-eoc-mib/eocCBATCardRFGroup)
+config_require(mstar-eoc-mib/eocCBATCardMACGroup)
+config_require(mstar-eoc-mib/eocSoftwareUpgradeGroup)
+config_require(mstar-eoc-mib/eocCNUGroup)
+config_require(mstar-eoc-mib/eocStatisticGroup)
+config_require(mstar-eoc-mib/eocIGMPSnoopingGroup)
+config_require(mstar-eoc-mib/eocTrapGroup)
+config_require(mstar-eoc-mib/eocVLANGroup)
+config_require(mstar-eoc-mib/eocBroadcastStormProtectionGroup)
+config_require(mstar-eoc-mib/eocExtObjects)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup.h
new file mode 100644
index 0000000000..4bd1c9ee08
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup.h
@@ -0,0 +1 @@
+config_require(mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable.h
new file mode 100644
index 0000000000..cca9d08f01
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_set)
+config_require(mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_get)
+config_require(mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable)
+config_require(mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_interface)
+config_require(mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_access)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionCBATCardIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionCBATCardIndex.m2d
new file mode 100644
index 0000000000..fccf551e5d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionCBATCardIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocBroadcastStormProtectionCBATCardIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionCNUIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionCNUIndex.m2d
new file mode 100644
index 0000000000..6fe74b245d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionCNUIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocBroadcastStormProtectionCNUIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionEN.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionEN.m2d
new file mode 100644
index 0000000000..7febf23b19
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionEN.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocBroadcastStormProtectionEN
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionPortIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionPortIndex.m2d
new file mode 100644
index 0000000000..b139ce643d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormProtectionPortIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocBroadcastStormProtectionPortIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormThreshold.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormThreshold.m2d
new file mode 100644
index 0000000000..f0cce626c9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocBroadcastStormThreshold.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocBroadcastStormThreshold
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocMulticastStormProtectionEN.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocMulticastStormProtectionEN.m2d
new file mode 100644
index 0000000000..8f25f8b6c8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocMulticastStormProtectionEN.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocMulticastStormProtectionEN
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocMulticastStormThreshold.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocMulticastStormThreshold.m2d
new file mode 100644
index 0000000000..3711544224
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocMulticastStormThreshold.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocMulticastStormThreshold
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocUnknownUnicastStormProtectionEN.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocUnknownUnicastStormProtectionEN.m2d
new file mode 100644
index 0000000000..b3a13d1b83
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocUnknownUnicastStormProtectionEN.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocUnknownUnicastStormProtectionEN
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocUnknownUnicastStormThreshold.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocUnknownUnicastStormThreshold.m2d
new file mode 100644
index 0000000000..89e387abbb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/node-eocUnknownUnicastStormThreshold.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocUnknownUnicastStormThreshold
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/table-eocBroadcastStormProtectionTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/table-eocBroadcastStormProtectionTable.m2d
new file mode 100644
index 0000000000..a3cb01f52c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/defaults/table-eocBroadcastStormProtectionTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocBroadcastStormProtectionTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable-README-FIRST.txt
new file mode 100644
index 0000000000..44dbc10f05
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocBroadcastStormProtectionTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocBroadcastStormProtectionTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocBroadcastStormProtectionTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocBroadcastStormProtectionTable_Makefile
+
+
+ File : eocBroadcastStormProtectionTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocBroadcastStormProtectionTable-README-eocBroadcastStormProtectionTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocBroadcastStormProtectionTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocBroadcastStormProtectionTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocBroadcastStormProtectionTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocBroadcastStormProtectionTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable-README-eocBroadcastStormProtectionTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable-README-eocBroadcastStormProtectionTable.txt
new file mode 100644
index 0000000000..0b0d0d7466
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable-README-eocBroadcastStormProtectionTable.txt
@@ -0,0 +1,891 @@
+************************************************************************
+eocBroadcastStormProtectionTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocBroadcastStormProtectionTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocBroadcastStormProtectionTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocBroadcastStormProtectionTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocBroadcastStormProtectionTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocBroadcastStormProtectionTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocBroadcastStormProtectionTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocBroadcastStormProtectionTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocBroadcastStormProtectionTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocBroadcastStormProtectionTable_allocate_data
+ eocBroadcastStormProtectionTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocBroadcastStormProtectionTable_rowreq_ctx_init
+ eocBroadcastStormProtectionTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocBroadcastStormProtectionTable table
+ ------------------------------------------------------------
+ The index(es) for the eocBroadcastStormProtectionTable table are:
+
+ eocBroadcastStormProtectionCBATCardIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocBroadcastStormProtectionCNUIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocBroadcastStormProtectionPortIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocBroadcastStormProtectionTable_data.
+
+
+************************************************************************
+eocBroadcastStormProtectionTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocBroadcastStormProtectionTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocBroadcastStormProtectionTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocBroadcastStormProtectionTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocBroadcastStormProtectionTable_indexes_set
+ WHERE: eocBroadcastStormProtectionTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocBroadcastStormProtectionTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocBroadcastStormProtectionTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocBroadcastStormProtectionEN_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocBroadcastStormThreshold_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocMulticastStormProtectionEN_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocMulticastStormThreshold_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocUnknownUnicastStormProtectionEN_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocUnknownUnicastStormThreshold_get
+
+
+
+File: eocBroadcastStormProtectionTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocBroadcastStormProtectionTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table does not support ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocBroadcastStormProtectionTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocBroadcastStormProtectionEN_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocBroadcastStormProtectionEN_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocBroadcastStormProtectionEN_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocBroadcastStormProtectionEN_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocBroadcastStormThreshold_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocBroadcastStormThreshold_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocBroadcastStormThreshold_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocBroadcastStormThreshold_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocMulticastStormProtectionEN_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocMulticastStormProtectionEN_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocMulticastStormProtectionEN_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocMulticastStormProtectionEN_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocMulticastStormThreshold_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocMulticastStormThreshold_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocMulticastStormThreshold_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocMulticastStormThreshold_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocUnknownUnicastStormProtectionEN_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocUnknownUnicastStormProtectionEN_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocUnknownUnicastStormProtectionEN_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocUnknownUnicastStormProtectionEN_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocUnknownUnicastStormThreshold_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocUnknownUnicastStormThreshold_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocUnknownUnicastStormThreshold_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocUnknownUnicastStormThreshold_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocBroadcastStormProtectionTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocBroadcastStormProtectionTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocBroadcastStormProtectionTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocBroadcastStormProtectionTable table.
+
+To watch the flow of the eocBroadcastStormProtectionTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocBroadcastStormProtectionTable
+ verbose:eocBroadcastStormProtectionTable
+ internal:eocBroadcastStormProtectionTable
+
+e.g.
+ snmpd -f -Le -DeocBroadcastStormProtectionTable,verbose:eocBroadcastStormProtectionTable,internal:eocBroadcastStormProtectionTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocBroadcastStormProtectionTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionTable is subid 1 of eocBroadcastStormProtectionGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1, length: 11
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocBroadcastStormProtectionCBATCardIndex
+ * eocBroadcastStormProtectionCBATCardIndex is subid 1 of eocBroadcastStormProtectionEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.1
+ * Description:
+CBAT°å¿¨µÄÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocBroadcastStormProtectionCNUIndex
+ * eocBroadcastStormProtectionCNUIndex is subid 2 of eocBroadcastStormProtectionEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.2
+ * Description:
+CNUµÄÐòºÅË÷Òý£¬Èç¹ûÊÇÉèÖÃCBAT°å¿¨µÄ¶Ë¿Ú£¬ÔòȡֵΪ0¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocBroadcastStormProtectionPortIndex
+ * eocBroadcastStormProtectionPortIndex is subid 3 of eocBroadcastStormProtectionEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.3
+ * Description:
+CBAT°å¿¨¶Ë¿Ú»òÕßCNU¶Ë¿ÚµÄÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocBroadcastStormProtectionEN
+ * eocBroadcastStormProtectionEN is subid 4 of eocBroadcastStormProtectionEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.4
+ * Description:
+¹ã²¥°üÒÖÖÆʹÄÜ£¬1£­±íʾ´¦Àí£¬0£­±íʾ²»´¦Àí¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocBroadcastStormThreshold
+ * eocBroadcastStormThreshold is subid 5 of eocBroadcastStormProtectionEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.5
+ * Description:
+¹ã²¥°üÒÖÖÆÖµ£¬¼´ÔÊÐíͨ¹ýµÄ¹ã²¥°üÊýÁ¿£¬µ¥Î»packets/s¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocMulticastStormProtectionEN
+ * eocMulticastStormProtectionEN is subid 6 of eocBroadcastStormProtectionEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.6
+ * Description:
+¶à²¥°üÒÖÖÆʹÄÜ£¬1£­±íʾ´¦Àí£¬0£­±íʾ²»´¦Àí¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocMulticastStormThreshold
+ * eocMulticastStormThreshold is subid 7 of eocBroadcastStormProtectionEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.7
+ * Description:
+¶à²¥°üÒÖÖÆÖµ£¬¼´ÔÊÐíͨ¹ýµÄδ֪°üÊýÁ¿£¬µ¥Î»packets/s¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocUnknownUnicastStormProtectionEN
+ * eocUnknownUnicastStormProtectionEN is subid 8 of eocBroadcastStormProtectionEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.8
+ * Description:
+δ֪°üÒÖÖÆʹÄÜ£¬1£­±íʾ´¦Àí£¬0£­±íʾ²»´¦Àí¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocUnknownUnicastStormThreshold
+ * eocUnknownUnicastStormThreshold is subid 9 of eocBroadcastStormProtectionEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.9
+ * Description:
+δ֪°üÒÖÖÆÖµ£¬¼´ÔÊÐíͨ¹ýµÄδ֪°üÊýÁ¿£¬µ¥Î»packets/s¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable.c
new file mode 100644
index 0000000000..d976126f32
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable.c
@@ -0,0 +1,218 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocBroadcastStormProtectionTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocBroadcastStormProtectionTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocBroadcastStormProtectionTable_interface.h"
+
+oid eocBroadcastStormProtectionTable_oid[] = { EOCBROADCASTSTORMPROTECTIONTABLE_OID };
+int eocBroadcastStormProtectionTable_oid_size = OID_LENGTH(eocBroadcastStormProtectionTable_oid);
+
+ eocBroadcastStormProtectionTable_registration eocBroadcastStormProtectionTable_user_context;
+
+void initialize_table_eocBroadcastStormProtectionTable(void);
+void shutdown_table_eocBroadcastStormProtectionTable(void);
+
+
+/**
+ * Initializes the eocBroadcastStormProtectionTable module
+ */
+void
+init_eocBroadcastStormProtectionTable(void)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:init_eocBroadcastStormProtectionTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocBroadcastStormProtectionTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocBroadcastStormProtectionTable"))
+ initialize_table_eocBroadcastStormProtectionTable();
+
+} /* init_eocBroadcastStormProtectionTable */
+
+/**
+ * Shut-down the eocBroadcastStormProtectionTable module (agent is exiting)
+ */
+void
+shutdown_eocBroadcastStormProtectionTable(void)
+{
+ if (should_init("eocBroadcastStormProtectionTable"))
+ shutdown_table_eocBroadcastStormProtectionTable();
+
+}
+
+/**
+ * Initialize the table eocBroadcastStormProtectionTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocBroadcastStormProtectionTable(void)
+{
+ eocBroadcastStormProtectionTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:initialize_table_eocBroadcastStormProtectionTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocBroadcastStormProtectionTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocBroadcastStormProtectionTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocBroadcastStormProtectionTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocBroadcastStormProtectionTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocBroadcastStormProtectionTable */
+
+/**
+ * Shutdown the table eocBroadcastStormProtectionTable
+ */
+void
+shutdown_table_eocBroadcastStormProtectionTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocBroadcastStormProtectionTable_shutdown_interface(&eocBroadcastStormProtectionTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocBroadcastStormProtectionTable_rowreq_ctx_init(eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocBroadcastStormProtectionTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormProtectionTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocBroadcastStormProtectionTable_rowreq_ctx_cleanup(eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocBroadcastStormProtectionTable rowreq cleanup.
+ */
+} /* eocBroadcastStormProtectionTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocBroadcastStormProtectionTable_pre_request(eocBroadcastStormProtectionTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocBroadcastStormProtectionTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormProtectionTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocBroadcastStormProtectionTable_post_request(eocBroadcastStormProtectionTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocBroadcastStormProtectionTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocBroadcastStormProtectionTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocBroadcastStormProtectionTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormProtectionTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable.h
new file mode 100644
index 0000000000..1260a0266f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable.h
@@ -0,0 +1,228 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCBROADCASTSTORMPROTECTIONTABLE_H
+#define EOCBROADCASTSTORMPROTECTIONTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+/* other required module components */
+
+/* OID and column number definitions for eocBroadcastStormProtectionTable */
+#include "eocBroadcastStormProtectionTable_oids.h"
+
+/* enum definions */
+#include "eocBroadcastStormProtectionTable_enums.h"
+
+/* include common header */
+#include "EoCCommon.h"
+
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocBroadcastStormProtectionTable(void);
+void shutdown_eocBroadcastStormProtectionTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocBroadcastStormProtectionTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionTable is subid 1 of eocBroadcastStormProtectionGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1, length: 11
+*/
+/* *********************************************************************
+ * 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 eocBroadcastStormProtectionTable registration context.
+ */
+typedef netsnmp_data_list eocBroadcastStormProtectionTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocBroadcastStormProtectionTable data context structure.
+ * This structure is used to represent the data for eocBroadcastStormProtectionTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocBroadcastStormProtectionTable.
+ */
+typedef struct eocBroadcastStormProtectionTable_data_s {
+
+ /*
+ * eocBroadcastStormProtectionEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocBroadcastStormProtectionEN;
+
+ /*
+ * eocBroadcastStormThreshold(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocBroadcastStormThreshold;
+
+ /*
+ * eocMulticastStormProtectionEN(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocMulticastStormProtectionEN;
+
+ /*
+ * eocMulticastStormThreshold(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocMulticastStormThreshold;
+
+ /*
+ * eocUnknownUnicastStormProtectionEN(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocUnknownUnicastStormProtectionEN;
+
+ /*
+ * eocUnknownUnicastStormThreshold(9)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocUnknownUnicastStormThreshold;
+
+} eocBroadcastStormProtectionTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocBroadcastStormProtectionTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocBroadcastStormProtectionTable_data eocBroadcastStormProtectionTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocBroadcastStormProtectionTable mib index.
+ * This structure is used to represent the index for eocBroadcastStormProtectionTable.
+ */
+typedef struct eocBroadcastStormProtectionTable_mib_index_s {
+
+ /*
+ * eocBroadcastStormProtectionCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocBroadcastStormProtectionCBATCardIndex;
+
+ /*
+ * eocBroadcastStormProtectionCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocBroadcastStormProtectionCNUIndex;
+
+ /*
+ * eocBroadcastStormProtectionPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocBroadcastStormProtectionPortIndex;
+
+
+} eocBroadcastStormProtectionTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocBroadcastStormProtectionTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocBroadcastStormProtectionTable_IDX_LEN 3
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocBroadcastStormProtectionTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocBroadcastStormProtectionTable_rowreq_ctx pointer.
+ */
+typedef struct eocBroadcastStormProtectionTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocBroadcastStormProtectionTable_IDX_LEN];
+
+ eocBroadcastStormProtectionTable_mib_index tbl_idx;
+
+ eocBroadcastStormProtectionTable_data data;
+ eocBroadcastStormProtectionTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocBroadcastStormProtectionTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocBroadcastStormProtectionTable_data_list;
+
+} eocBroadcastStormProtectionTable_rowreq_ctx;
+
+typedef struct eocBroadcastStormProtectionTable_ref_rowreq_ctx_s {
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx;
+} eocBroadcastStormProtectionTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocBroadcastStormProtectionTable_pre_request(eocBroadcastStormProtectionTable_registration * user_context);
+ int eocBroadcastStormProtectionTable_post_request(eocBroadcastStormProtectionTable_registration * user_context,
+ int rc);
+
+ int eocBroadcastStormProtectionTable_rowreq_ctx_init(eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocBroadcastStormProtectionTable_rowreq_ctx_cleanup(eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx);
+
+ int eocBroadcastStormProtectionTable_commit(eocBroadcastStormProtectionTable_rowreq_ctx * rowreq_ctx);
+
+ eocBroadcastStormProtectionTable_rowreq_ctx *
+ eocBroadcastStormProtectionTable_row_find_by_mib_index(eocBroadcastStormProtectionTable_mib_index *mib_idx);
+
+extern oid eocBroadcastStormProtectionTable_oid[];
+extern int eocBroadcastStormProtectionTable_oid_size;
+
+
+#include "eocBroadcastStormProtectionTable_interface.h"
+#include "eocBroadcastStormProtectionTable_data_access.h"
+#include "eocBroadcastStormProtectionTable_data_get.h"
+#include "eocBroadcastStormProtectionTable_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 /* EOCBROADCASTSTORMPROTECTIONTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_access.c
new file mode 100644
index 0000000000..4ab9138b3f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_access.c
@@ -0,0 +1,335 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#define _GNU_SOURCE
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include <string.h>
+
+/* include our parent header */
+#include "eocBroadcastStormProtectionTable.h"
+
+
+#include "eocBroadcastStormProtectionTable_data_access.h"
+
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocBroadcastStormProtectionTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionTable is subid 1 of eocBroadcastStormProtectionGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1, length: 11
+*/
+
+/**
+ * initialization for eocBroadcastStormProtectionTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocBroadcastStormProtectionTable_reg
+ * Pointer to eocBroadcastStormProtectionTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocBroadcastStormProtectionTable_init_data(eocBroadcastStormProtectionTable_registration * eocBroadcastStormProtectionTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocBroadcastStormProtectionTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormProtectionTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocBroadcastStormProtectionTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocBroadcastStormProtectionTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocBroadcastStormProtectionTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocBroadcastStormProtectionTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCBROADCASTSTORMPROTECTIONTABLE_CACHE_TIMEOUT; /* seconds */
+} /* eocBroadcastStormProtectionTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocBroadcastStormProtectionTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocBroadcastStormProtectionTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocBroadcastStormProtectionTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocBroadcastStormProtectionTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocBroadcastStormProtectionTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocBroadcastStormProtectionTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocBroadcastStormProtectionTable_container_load(netsnmp_container *container)
+{
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx;
+
+ int rc = MFD_SUCCESS;
+ static libspid_eoc_storm_entry_t storm[LIBSPID_EOC_STORM_ITMES_MAX];
+ static libspid_eoc_wl_entry_t wl[LIBSPID_WHITE_LIST_CONF_LINE_MAX_NB];
+ unsigned int storm_items = LIBSPID_EOC_STORM_ITMES_MAX;
+ int wl_cnt = 0;
+ int i = 0, j = 0;
+ int count = 0 ;
+ int cun_index = 0;
+
+ memset (storm, 0, sizeof (storm));
+
+ if (LIBSPID_SUCCESS != libspid_eoc_storm_check ())
+ {
+ snmp_log (LOG_ERR, "get broadcast storm list check error\n");
+ }
+
+ rc = libspid_eoc_storm_get_list (storm, &storm_items);
+ if (LIBSPID_SUCCESS != rc)
+ {
+ snmp_log (LOG_ERR, "get broadcast storm list error\n");
+ return MFD_ERROR;
+ }
+
+ if (storm_items)
+ rc = MFD_END_OF_DATA;
+
+
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_get_list (wl, &wl_cnt))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_get_list error\r\n");
+ return MFD_ERROR;
+ }
+
+ for (i = 0 ; i < storm_items ; i ++ )
+ {
+ rowreq_ctx =
+ eocBroadcastStormProtectionTable_allocate_rowreq_ctx (NULL);
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR,
+ "Broadcast Strom Protection table "
+ "entry allocation error\n");
+ return MFD_ERROR;
+ }
+
+ for (j = 0; j < wl_cnt; j ++)
+ {
+ if (NULL == strcasestr (wl[j].mac_addr, storm[i].mac_addr))
+ {
+ continue;
+ }
+ cun_index = atoi (wl[j].tei) - 2;
+ break;
+ }
+
+ rc = eocBroadcastStormProtectionTable_indexes_set (
+ rowreq_ctx, 0, cun_index, atoi (storm[i].port_index));
+ if (MFD_SUCCESS != rc)
+ {
+ snmp_log (LOG_ERR,
+ "Broadcast Strom Protection set indexes error\n");
+ eocBroadcastStormProtectionTable_release_rowreq_ctx (rowreq_ctx);
+ continue;
+ }
+
+ rowreq_ctx->data.eocBroadcastStormProtectionEN =
+ atoi (storm[i].bcast_protect_en);
+ rowreq_ctx->data.eocBroadcastStormThreshold =
+ atoi (storm[i].bcast_thres_hold);
+ rowreq_ctx->data.eocMulticastStormProtectionEN =
+ atoi (storm[i].multi_protect_en);
+ rowreq_ctx->data.eocMulticastStormThreshold =
+ atoi (storm[i].multi_thres_hold);
+ rowreq_ctx->data.eocUnknownUnicastStormProtectionEN =
+ atoi (storm[i].unknow_protect_en);
+ rowreq_ctx->data.eocUnknownUnicastStormThreshold =
+ atoi (storm[i].unknow_thres_hold);
+ CONTAINER_INSERT (container, rowreq_ctx);
+ count ++;
+ }
+
+ DEBUGMSGT (("verbose:eocBroadcastStormProtectionTable:"
+ "eocBroadcastStormProtectionTable_container_load",
+ "inserted %d records\n", count));
+ return rc;
+}
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocBroadcastStormProtectionTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocBroadcastStormProtectionTable container data.
+ */
+} /* eocBroadcastStormProtectionTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocBroadcastStormProtectionTable_row_prep( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormProtectionTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_access.h
new file mode 100644
index 0000000000..8e3ad47cdd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_access.h
@@ -0,0 +1,63 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCBROADCASTSTORMPROTECTIONTABLE_DATA_ACCESS_H
+#define EOCBROADCASTSTORMPROTECTIONTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocBroadcastStormProtectionTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionTable is subid 1 of eocBroadcastStormProtectionGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1, length: 11
+*/
+
+
+ int eocBroadcastStormProtectionTable_init_data(eocBroadcastStormProtectionTable_registration * eocBroadcastStormProtectionTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocBroadcastStormProtectionTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCBROADCASTSTORMPROTECTIONTABLE_CACHE_TIMEOUT 60
+
+void eocBroadcastStormProtectionTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocBroadcastStormProtectionTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocBroadcastStormProtectionTable_container_load(netsnmp_container *container);
+void eocBroadcastStormProtectionTable_container_free(netsnmp_container *container);
+
+int eocBroadcastStormProtectionTable_cache_load(netsnmp_container *container);
+void eocBroadcastStormProtectionTable_cache_free(netsnmp_container *container);
+
+ int eocBroadcastStormProtectionTable_row_prep( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCBROADCASTSTORMPROTECTIONTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_get.c
new file mode 100644
index 0000000000..54f42ab421
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_get.c
@@ -0,0 +1,428 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocBroadcastStormProtectionTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocBroadcastStormProtectionTable get routines.
+ * TODO:240:M: Implement eocBroadcastStormProtectionTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocBroadcastStormProtectionTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionTable is subid 1 of eocBroadcastStormProtectionGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1, length: 11
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocBroadcastStormProtectionTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocBroadcastStormProtectionCBATCardIndex_val
+ * @param eocBroadcastStormProtectionCNUIndex_val
+ * @param eocBroadcastStormProtectionPortIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocBroadcastStormProtectionTable_indexes_set_tbl_idx(eocBroadcastStormProtectionTable_mib_index *tbl_idx, long eocBroadcastStormProtectionCBATCardIndex_val, long eocBroadcastStormProtectionCNUIndex_val, long eocBroadcastStormProtectionPortIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocBroadcastStormProtectionCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocBroadcastStormProtectionCBATCardIndex = eocBroadcastStormProtectionCBATCardIndex_val;
+
+ /* eocBroadcastStormProtectionCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocBroadcastStormProtectionCNUIndex = eocBroadcastStormProtectionCNUIndex_val;
+
+ /* eocBroadcastStormProtectionPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocBroadcastStormProtectionPortIndex = eocBroadcastStormProtectionPortIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormProtectionTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocBroadcastStormProtectionTable_indexes_set(eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocBroadcastStormProtectionCBATCardIndex_val, long eocBroadcastStormProtectionCNUIndex_val, long eocBroadcastStormProtectionPortIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocBroadcastStormProtectionTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocBroadcastStormProtectionCBATCardIndex_val
+ , eocBroadcastStormProtectionCNUIndex_val
+ , eocBroadcastStormProtectionPortIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocBroadcastStormProtectionTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormProtectionTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocBroadcastStormProtectionEN
+ * eocBroadcastStormProtectionEN is subid 4 of eocBroadcastStormProtectionEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.4
+ * Description:
+¹ã²¥°üÒÖÖÆʹÄÜ£¬1£­±íʾ´¦Àí£¬0£­±íʾ²»´¦Àí¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocBroadcastStormProtectionEN data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocBroadcastStormProtectionEN_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocBroadcastStormProtectionEN_get( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long * eocBroadcastStormProtectionEN_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocBroadcastStormProtectionEN_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionEN_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocBroadcastStormProtectionEN data.
+ * copy (* eocBroadcastStormProtectionEN_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocBroadcastStormProtectionEN_val_ptr ) = rowreq_ctx->data.eocBroadcastStormProtectionEN;
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormProtectionEN_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocBroadcastStormThreshold
+ * eocBroadcastStormThreshold is subid 5 of eocBroadcastStormProtectionEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.5
+ * Description:
+¹ã²¥°üÒÖÖÆÖµ£¬¼´ÔÊÐíͨ¹ýµÄ¹ã²¥°üÊýÁ¿£¬µ¥Î»packets/s¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocBroadcastStormThreshold data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocBroadcastStormThreshold_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocBroadcastStormThreshold_get( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long * eocBroadcastStormThreshold_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocBroadcastStormThreshold_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormThreshold_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocBroadcastStormThreshold data.
+ * copy (* eocBroadcastStormThreshold_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocBroadcastStormThreshold_val_ptr ) = rowreq_ctx->data.eocBroadcastStormThreshold;
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormThreshold_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocMulticastStormProtectionEN
+ * eocMulticastStormProtectionEN is subid 6 of eocBroadcastStormProtectionEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.6
+ * Description:
+¶à²¥°üÒÖÖÆʹÄÜ£¬1£­±íʾ´¦Àí£¬0£­±íʾ²»´¦Àí¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocMulticastStormProtectionEN data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocMulticastStormProtectionEN_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocMulticastStormProtectionEN_get( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long * eocMulticastStormProtectionEN_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocMulticastStormProtectionEN_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocMulticastStormProtectionEN_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocMulticastStormProtectionEN data.
+ * copy (* eocMulticastStormProtectionEN_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocMulticastStormProtectionEN_val_ptr ) = rowreq_ctx->data.eocMulticastStormProtectionEN;
+
+ return MFD_SUCCESS;
+} /* eocMulticastStormProtectionEN_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocMulticastStormThreshold
+ * eocMulticastStormThreshold is subid 7 of eocBroadcastStormProtectionEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.7
+ * Description:
+¶à²¥°üÒÖÖÆÖµ£¬¼´ÔÊÐíͨ¹ýµÄδ֪°üÊýÁ¿£¬µ¥Î»packets/s¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocMulticastStormThreshold data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocMulticastStormThreshold_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocMulticastStormThreshold_get( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long * eocMulticastStormThreshold_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocMulticastStormThreshold_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocMulticastStormThreshold_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocMulticastStormThreshold data.
+ * copy (* eocMulticastStormThreshold_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocMulticastStormThreshold_val_ptr ) = rowreq_ctx->data.eocMulticastStormThreshold;
+
+ return MFD_SUCCESS;
+} /* eocMulticastStormThreshold_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocUnknownUnicastStormProtectionEN
+ * eocUnknownUnicastStormProtectionEN is subid 8 of eocBroadcastStormProtectionEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.8
+ * Description:
+δ֪°üÒÖÖÆʹÄÜ£¬1£­±íʾ´¦Àí£¬0£­±íʾ²»´¦Àí¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocUnknownUnicastStormProtectionEN data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocUnknownUnicastStormProtectionEN_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocUnknownUnicastStormProtectionEN_get( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long * eocUnknownUnicastStormProtectionEN_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocUnknownUnicastStormProtectionEN_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocUnknownUnicastStormProtectionEN_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocUnknownUnicastStormProtectionEN data.
+ * copy (* eocUnknownUnicastStormProtectionEN_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocUnknownUnicastStormProtectionEN_val_ptr ) = rowreq_ctx->data.eocUnknownUnicastStormProtectionEN;
+
+ return MFD_SUCCESS;
+} /* eocUnknownUnicastStormProtectionEN_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocUnknownUnicastStormThreshold
+ * eocUnknownUnicastStormThreshold is subid 9 of eocBroadcastStormProtectionEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.9
+ * Description:
+δ֪°üÒÖÖÆÖµ£¬¼´ÔÊÐíͨ¹ýµÄδ֪°üÊýÁ¿£¬µ¥Î»packets/s¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocUnknownUnicastStormThreshold data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocUnknownUnicastStormThreshold_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocUnknownUnicastStormThreshold_get( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long * eocUnknownUnicastStormThreshold_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocUnknownUnicastStormThreshold_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocUnknownUnicastStormThreshold_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocUnknownUnicastStormThreshold data.
+ * copy (* eocUnknownUnicastStormThreshold_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocUnknownUnicastStormThreshold_val_ptr ) = rowreq_ctx->data.eocUnknownUnicastStormThreshold;
+
+ return MFD_SUCCESS;
+} /* eocUnknownUnicastStormThreshold_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_get.h
new file mode 100644
index 0000000000..ecbd4ffb39
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_get.h
@@ -0,0 +1,64 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocBroadcastStormProtectionTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCBROADCASTSTORMPROTECTIONTABLE_DATA_GET_H
+#define EOCBROADCASTSTORMPROTECTIONTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocBroadcastStormProtectionTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionTable is subid 1 of eocBroadcastStormProtectionGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1, length: 11
+*/
+ /*
+ * indexes
+ */
+
+ int eocBroadcastStormProtectionEN_get( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long * eocBroadcastStormProtectionEN_val_ptr );
+ int eocBroadcastStormThreshold_get( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long * eocBroadcastStormThreshold_val_ptr );
+ int eocMulticastStormProtectionEN_get( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long * eocMulticastStormProtectionEN_val_ptr );
+ int eocMulticastStormThreshold_get( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long * eocMulticastStormThreshold_val_ptr );
+ int eocUnknownUnicastStormProtectionEN_get( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long * eocUnknownUnicastStormProtectionEN_val_ptr );
+ int eocUnknownUnicastStormThreshold_get( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long * eocUnknownUnicastStormThreshold_val_ptr );
+
+
+int eocBroadcastStormProtectionTable_indexes_set_tbl_idx(eocBroadcastStormProtectionTable_mib_index *tbl_idx, long eocBroadcastStormProtectionCBATCardIndex_val, long eocBroadcastStormProtectionCNUIndex_val, long eocBroadcastStormProtectionPortIndex_val);
+int eocBroadcastStormProtectionTable_indexes_set(eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocBroadcastStormProtectionCBATCardIndex_val, long eocBroadcastStormProtectionCNUIndex_val, long eocBroadcastStormProtectionPortIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCBROADCASTSTORMPROTECTIONTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_set.c
new file mode 100644
index 0000000000..0ddfe5ca5e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_set.c
@@ -0,0 +1,1450 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocBroadcastStormProtectionTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocBroadcastStormProtectionTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionTable is subid 1 of eocBroadcastStormProtectionGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1, length: 11
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocBroadcastStormProtectionTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocBroadcastStormProtectionTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocBroadcastStormProtectionTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocBroadcastStormProtectionTable_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocBroadcastStormProtectionTable undo.
+ * set up eocBroadcastStormProtectionTable undo information, in preparation for a set.
+ * Undo storage is in (* eocUnknownUnicastStormThreshold_val_ptr )*
+ */
+
+ return rc;
+} /* eocBroadcastStormProtectionTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocBroadcastStormProtectionTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocBroadcastStormProtectionTable_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocBroadcastStormProtectionTable undo.
+ * eocBroadcastStormProtectionTable undo information, in response to a failed set.
+ * Undo storage is in (* eocUnknownUnicastStormThreshold_val_ptr )*
+ */
+
+ return rc;
+} /* eocBroadcastStormProtectionTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocBroadcastStormProtectionTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocBroadcastStormProtectionTable_undo_cleanup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocBroadcastStormProtectionTable undo.
+ * Undo storage is in (* eocUnknownUnicastStormThreshold_val_ptr )*
+ */
+
+ return rc;
+} /* eocBroadcastStormProtectionTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocBroadcastStormProtectionTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocBroadcastStormProtectionTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocBroadcastStormProtectionTable_commit( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+ static libspid_eoc_wl_entry_t wl[LIBSPID_WHITE_LIST_CONF_LINE_MAX_NB];
+ int wl_cnt = 0;
+ int i = 0;
+ libspid_eoc_storm_entry_t storm;
+
+ DEBUGMSGTL (("verbose:eocBroadcastStormProtectionTable:"
+ "eocBroadcastStormProtectionTable_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert ( NULL != rowreq_ctx );
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+ /*
+ * commit eocBroadcastStormProtectionTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_EOCBROADCASTSTORMPROTECTIONEN_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCBROADCASTSTORMPROTECTIONEN_FLAG;
+ /*
+ * set flag, in case we need to undo eocBroadcastStormProtectionEN
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCBROADCASTSTORMPROTECTIONEN_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCBROADCASTSTORMTHRESHOLD_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCBROADCASTSTORMTHRESHOLD_FLAG;
+ /*
+ * set flag, in case we need to undo eocBroadcastStormThreshold
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCBROADCASTSTORMTHRESHOLD_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCMULTICASTSTORMPROTECTIONEN_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCMULTICASTSTORMPROTECTIONEN_FLAG;
+ /*
+ * set flag, in case we need to undo eocMulticastStormProtectionEN
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCMULTICASTSTORMPROTECTIONEN_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCMULTICASTSTORMTHRESHOLD_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCMULTICASTSTORMTHRESHOLD_FLAG;
+ /*
+ * set flag, in case we need to undo eocMulticastStormThreshold
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCMULTICASTSTORMTHRESHOLD_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCUNKNOWNUNICASTSTORMPROTECTIONEN_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCUNKNOWNUNICASTSTORMPROTECTIONEN_FLAG;
+ /*
+ * set flag, in case we need to undo
+ * eocUnknownUnicastStormProtectionEN
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCUNKNOWNUNICASTSTORMPROTECTIONEN_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD_FLAG;
+ /*
+ * set flag, in case we need to undo eocUnknownUnicastStormThreshold
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD_FLAG;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_check ())
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_check error\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_storm_check ())
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_storm_check error\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_get_list (wl, &wl_cnt))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_get_list error\n");
+ return MFD_ERROR;
+ }
+
+
+ for (i = 0; i < wl_cnt; i ++)
+ {
+ if (rowreq_ctx->tbl_idx.eocBroadcastStormProtectionCNUIndex !=
+ atoi (wl[i].tei) - 2)
+ {
+ continue;
+ }
+ strcpy (storm.mac_addr, wl[i].mac_addr);
+ break;
+ }
+ if (i == wl_cnt)
+ {
+ snmp_log (LOG_ERR, "get a invaild tei\n");
+ return MFD_ERROR;
+ }
+
+ sprintf (storm.port_index, "%d",
+ rowreq_ctx->tbl_idx.eocBroadcastStormProtectionPortIndex);
+
+ sprintf (storm.bcast_protect_en, "%d",
+ rowreq_ctx->data.eocBroadcastStormProtectionEN);
+
+ sprintf (storm.bcast_thres_hold, "%d",
+ rowreq_ctx->data.eocBroadcastStormThreshold);
+
+ sprintf (storm.multi_protect_en, "%d",
+ rowreq_ctx->data.eocMulticastStormProtectionEN);
+
+ sprintf (storm.multi_thres_hold, "%d",
+ rowreq_ctx->data.eocMulticastStormThreshold);
+
+ sprintf (storm.unknow_protect_en, "%d",
+ rowreq_ctx->data.eocUnknownUnicastStormProtectionEN);
+
+ sprintf (storm.unknow_thres_hold, "%d",
+ rowreq_ctx->data.eocUnknownUnicastStormThreshold);
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_storm_set (storm.mac_addr, storm.port_index, &storm))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_storm_set error");
+ return MFD_ERROR;
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log (LOG_ERR, "unhandled columns (0x%x) in commit\n", save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocBroadcastStormProtectionTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocBroadcastStormProtectionTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocBroadcastStormProtectionTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocBroadcastStormProtectionTable_undo_commit( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_undo_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:485:M: |-> Undo eocBroadcastStormProtectionTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocBroadcastStormProtectionTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocBroadcastStormProtectionTable node value checks.
+ * TODO:450:M: Implement eocBroadcastStormProtectionTable undo functions.
+ * TODO:460:M: Implement eocBroadcastStormProtectionTable set functions.
+ * TODO:480:M: Implement eocBroadcastStormProtectionTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocBroadcastStormProtectionEN
+ * eocBroadcastStormProtectionEN is subid 4 of eocBroadcastStormProtectionEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.4
+ * Description:
+¹ã²¥°üÒÖÖÆʹÄÜ£¬1£­±íʾ´¦Àí£¬0£­±íʾ²»´¦Àí¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocBroadcastStormProtectionEN_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocBroadcastStormProtectionTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of disable(0), enable(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocBroadcastStormProtectionEN_check_value( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long eocBroadcastStormProtectionEN_val)
+{
+ DEBUGMSGTL (("verbose:eocBroadcastStormProtectionTable:"
+ "eocBroadcastStormProtectionEN_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ return MFD_SUCCESS; /* eocBroadcastStormProtectionEN value not illegal */
+} /* eocBroadcastStormProtectionEN_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocBroadcastStormProtectionTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocBroadcastStormProtectionTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocBroadcastStormProtectionEN_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionEN_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocBroadcastStormProtectionEN undo.
+ */
+ /*
+ * copy eocBroadcastStormProtectionEN data
+ * set rowreq_ctx->undo->eocBroadcastStormProtectionEN from rowreq_ctx->data.eocBroadcastStormProtectionEN
+ */
+ rowreq_ctx->undo->eocBroadcastStormProtectionEN = rowreq_ctx->data.eocBroadcastStormProtectionEN;
+
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormProtectionEN_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocBroadcastStormProtectionEN_val
+ * A long containing the new value.
+ */
+int
+eocBroadcastStormProtectionEN_set( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long eocBroadcastStormProtectionEN_val )
+{
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionEN_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocBroadcastStormProtectionEN value.
+ * set eocBroadcastStormProtectionEN value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocBroadcastStormProtectionEN = eocBroadcastStormProtectionEN_val;
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormProtectionEN_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocBroadcastStormProtectionEN_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionEN_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocBroadcastStormProtectionEN undo.
+ */
+ /*
+ * copy eocBroadcastStormProtectionEN data
+ * set rowreq_ctx->data.eocBroadcastStormProtectionEN from rowreq_ctx->undo->eocBroadcastStormProtectionEN
+ */
+ rowreq_ctx->data.eocBroadcastStormProtectionEN = rowreq_ctx->undo->eocBroadcastStormProtectionEN;
+
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormProtectionEN_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocBroadcastStormThreshold
+ * eocBroadcastStormThreshold is subid 5 of eocBroadcastStormProtectionEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.5
+ * Description:
+¹ã²¥°üÒÖÖÆÖµ£¬¼´ÔÊÐíͨ¹ýµÄ¹ã²¥°üÊýÁ¿£¬µ¥Î»packets/s¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocBroadcastStormThreshold_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocBroadcastStormProtectionTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocBroadcastStormThreshold_check_value( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocBroadcastStormThreshold_val)
+{
+ DEBUGMSGTL (("verbose:eocBroadcastStormProtectionTable:"
+ "eocBroadcastStormThreshold_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ if ((eocBroadcastStormThreshold_val <
+ LIBSPID_EOC_STORM_BCAST_THRES_HOLD_MIN )||
+ (eocBroadcastStormThreshold_val >
+ LIBSPID_EOC_STORM_BCAST_THRES_HOLD_MAX))
+ {
+ return MFD_NOT_VALID_NOW;
+ }
+
+ return MFD_SUCCESS; /* eocBroadcastStormThreshold value not illegal */
+} /* eocBroadcastStormThreshold_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocBroadcastStormProtectionTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocBroadcastStormProtectionTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocBroadcastStormThreshold_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormThreshold_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocBroadcastStormThreshold undo.
+ */
+ /*
+ * copy eocBroadcastStormThreshold data
+ * set rowreq_ctx->undo->eocBroadcastStormThreshold from rowreq_ctx->data.eocBroadcastStormThreshold
+ */
+ rowreq_ctx->undo->eocBroadcastStormThreshold = rowreq_ctx->data.eocBroadcastStormThreshold;
+
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormThreshold_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocBroadcastStormThreshold_val
+ * A long containing the new value.
+ */
+int
+eocBroadcastStormThreshold_set( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocBroadcastStormThreshold_val )
+{
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormThreshold_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocBroadcastStormThreshold value.
+ * set eocBroadcastStormThreshold value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocBroadcastStormThreshold = eocBroadcastStormThreshold_val;
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormThreshold_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocBroadcastStormThreshold_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormThreshold_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocBroadcastStormThreshold undo.
+ */
+ /*
+ * copy eocBroadcastStormThreshold data
+ * set rowreq_ctx->data.eocBroadcastStormThreshold from rowreq_ctx->undo->eocBroadcastStormThreshold
+ */
+ rowreq_ctx->data.eocBroadcastStormThreshold = rowreq_ctx->undo->eocBroadcastStormThreshold;
+
+
+ return MFD_SUCCESS;
+} /* eocBroadcastStormThreshold_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocMulticastStormProtectionEN
+ * eocMulticastStormProtectionEN is subid 6 of eocBroadcastStormProtectionEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.6
+ * Description:
+¶à²¥°üÒÖÖÆʹÄÜ£¬1£­±íʾ´¦Àí£¬0£­±íʾ²»´¦Àí¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocMulticastStormProtectionEN_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocBroadcastStormProtectionTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of disable(0), enable(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocMulticastStormProtectionEN_check_value( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long eocMulticastStormProtectionEN_val)
+{
+ DEBUGMSGTL (("verbose:eocBroadcastStormProtectionTable:"
+ "eocMulticastStormProtectionEN_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+
+
+ return MFD_SUCCESS; /* eocMulticastStormProtectionEN value not illegal */
+} /* eocMulticastStormProtectionEN_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocBroadcastStormProtectionTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocBroadcastStormProtectionTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocMulticastStormProtectionEN_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocMulticastStormProtectionEN_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocMulticastStormProtectionEN undo.
+ */
+ /*
+ * copy eocMulticastStormProtectionEN data
+ * set rowreq_ctx->undo->eocMulticastStormProtectionEN from rowreq_ctx->data.eocMulticastStormProtectionEN
+ */
+ rowreq_ctx->undo->eocMulticastStormProtectionEN = rowreq_ctx->data.eocMulticastStormProtectionEN;
+
+
+ return MFD_SUCCESS;
+} /* eocMulticastStormProtectionEN_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocMulticastStormProtectionEN_val
+ * A long containing the new value.
+ */
+int
+eocMulticastStormProtectionEN_set( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long eocMulticastStormProtectionEN_val )
+{
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocMulticastStormProtectionEN_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocMulticastStormProtectionEN value.
+ * set eocMulticastStormProtectionEN value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocMulticastStormProtectionEN = eocMulticastStormProtectionEN_val;
+
+ return MFD_SUCCESS;
+} /* eocMulticastStormProtectionEN_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocMulticastStormProtectionEN_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocMulticastStormProtectionEN_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocMulticastStormProtectionEN undo.
+ */
+ /*
+ * copy eocMulticastStormProtectionEN data
+ * set rowreq_ctx->data.eocMulticastStormProtectionEN from rowreq_ctx->undo->eocMulticastStormProtectionEN
+ */
+ rowreq_ctx->data.eocMulticastStormProtectionEN = rowreq_ctx->undo->eocMulticastStormProtectionEN;
+
+
+ return MFD_SUCCESS;
+} /* eocMulticastStormProtectionEN_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocMulticastStormThreshold
+ * eocMulticastStormThreshold is subid 7 of eocBroadcastStormProtectionEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.7
+ * Description:
+¶à²¥°üÒÖÖÆÖµ£¬¼´ÔÊÐíͨ¹ýµÄδ֪°üÊýÁ¿£¬µ¥Î»packets/s¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocMulticastStormThreshold_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocBroadcastStormProtectionTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocMulticastStormThreshold_check_value( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocMulticastStormThreshold_val)
+{
+ DEBUGMSGTL (("verbose:eocBroadcastStormProtectionTable:"
+ "eocMulticastStormThreshold_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ if ((eocMulticastStormThreshold_val <
+ LIBSPID_EOC_STORM_MULTI_THRES_HOLD_MIN )||
+ (eocMulticastStormThreshold_val >
+ LIBSPID_EOC_STORM_MULTI_THRES_HOLD_MAX))
+ {
+ return MFD_NOT_VALID_NOW;
+ }
+
+ return MFD_SUCCESS; /* eocMulticastStormThreshold value not illegal */
+} /* eocMulticastStormThreshold_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocBroadcastStormProtectionTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocBroadcastStormProtectionTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocMulticastStormThreshold_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocMulticastStormThreshold_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocMulticastStormThreshold undo.
+ */
+ /*
+ * copy eocMulticastStormThreshold data
+ * set rowreq_ctx->undo->eocMulticastStormThreshold from rowreq_ctx->data.eocMulticastStormThreshold
+ */
+ rowreq_ctx->undo->eocMulticastStormThreshold = rowreq_ctx->data.eocMulticastStormThreshold;
+
+
+ return MFD_SUCCESS;
+} /* eocMulticastStormThreshold_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocMulticastStormThreshold_val
+ * A long containing the new value.
+ */
+int
+eocMulticastStormThreshold_set( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocMulticastStormThreshold_val )
+{
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocMulticastStormThreshold_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocMulticastStormThreshold value.
+ * set eocMulticastStormThreshold value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocMulticastStormThreshold = eocMulticastStormThreshold_val;
+
+ return MFD_SUCCESS;
+} /* eocMulticastStormThreshold_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocMulticastStormThreshold_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocMulticastStormThreshold_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocMulticastStormThreshold undo.
+ */
+ /*
+ * copy eocMulticastStormThreshold data
+ * set rowreq_ctx->data.eocMulticastStormThreshold from rowreq_ctx->undo->eocMulticastStormThreshold
+ */
+ rowreq_ctx->data.eocMulticastStormThreshold = rowreq_ctx->undo->eocMulticastStormThreshold;
+
+
+ return MFD_SUCCESS;
+} /* eocMulticastStormThreshold_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocUnknownUnicastStormProtectionEN
+ * eocUnknownUnicastStormProtectionEN is subid 8 of eocBroadcastStormProtectionEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.8
+ * Description:
+δ֪°üÒÖÖÆʹÄÜ£¬1£­±íʾ´¦Àí£¬0£­±íʾ²»´¦Àí¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocUnknownUnicastStormProtectionEN_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocBroadcastStormProtectionTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of disable(0), enable(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocUnknownUnicastStormProtectionEN_check_value( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long eocUnknownUnicastStormProtectionEN_val)
+{
+ DEBUGMSGTL (("verbose:eocBroadcastStormProtectionTable:"
+ "eocUnknownUnicastStormProtectionEN_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+
+
+ return MFD_SUCCESS; /* eocUnknownUnicastStormProtectionEN value not illegal */
+} /* eocUnknownUnicastStormProtectionEN_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocBroadcastStormProtectionTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocBroadcastStormProtectionTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocUnknownUnicastStormProtectionEN_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocUnknownUnicastStormProtectionEN_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocUnknownUnicastStormProtectionEN undo.
+ */
+ /*
+ * copy eocUnknownUnicastStormProtectionEN data
+ * set rowreq_ctx->undo->eocUnknownUnicastStormProtectionEN from rowreq_ctx->data.eocUnknownUnicastStormProtectionEN
+ */
+ rowreq_ctx->undo->eocUnknownUnicastStormProtectionEN = rowreq_ctx->data.eocUnknownUnicastStormProtectionEN;
+
+
+ return MFD_SUCCESS;
+} /* eocUnknownUnicastStormProtectionEN_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocUnknownUnicastStormProtectionEN_val
+ * A long containing the new value.
+ */
+int
+eocUnknownUnicastStormProtectionEN_set( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long eocUnknownUnicastStormProtectionEN_val )
+{
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocUnknownUnicastStormProtectionEN_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocUnknownUnicastStormProtectionEN value.
+ * set eocUnknownUnicastStormProtectionEN value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocUnknownUnicastStormProtectionEN = eocUnknownUnicastStormProtectionEN_val;
+
+ return MFD_SUCCESS;
+} /* eocUnknownUnicastStormProtectionEN_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocUnknownUnicastStormProtectionEN_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocUnknownUnicastStormProtectionEN_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocUnknownUnicastStormProtectionEN undo.
+ */
+ /*
+ * copy eocUnknownUnicastStormProtectionEN data
+ * set rowreq_ctx->data.eocUnknownUnicastStormProtectionEN from rowreq_ctx->undo->eocUnknownUnicastStormProtectionEN
+ */
+ rowreq_ctx->data.eocUnknownUnicastStormProtectionEN = rowreq_ctx->undo->eocUnknownUnicastStormProtectionEN;
+
+
+ return MFD_SUCCESS;
+} /* eocUnknownUnicastStormProtectionEN_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionEntry.eocUnknownUnicastStormThreshold
+ * eocUnknownUnicastStormThreshold is subid 9 of eocBroadcastStormProtectionEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1.1.9
+ * Description:
+δ֪°üÒÖÖÆÖµ£¬¼´ÔÊÐíͨ¹ýµÄδ֪°üÊýÁ¿£¬µ¥Î»packets/s¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocUnknownUnicastStormThreshold_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocBroadcastStormProtectionTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocUnknownUnicastStormThreshold_check_value( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocUnknownUnicastStormThreshold_val)
+{
+ DEBUGMSGTL (("verbose:eocBroadcastStormProtectionTable:"
+ "eocUnknownUnicastStormThreshold_check_value", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ if ((eocUnknownUnicastStormThreshold_val <
+ LIBSPID_EOC_STORM_UNKNOW_THRES_HOLD_MIN )||
+ (eocUnknownUnicastStormThreshold_val >
+ LIBSPID_EOC_STORM_UNKNOW_THRES_HOLD_MAX))
+ {
+ return MFD_NOT_VALID_NOW;
+ }
+
+ return MFD_SUCCESS; /* eocUnknownUnicastStormThreshold value not illegal */
+} /* eocUnknownUnicastStormThreshold_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocBroadcastStormProtectionTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocBroadcastStormProtectionTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocUnknownUnicastStormThreshold_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocUnknownUnicastStormThreshold_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocUnknownUnicastStormThreshold undo.
+ */
+ /*
+ * copy eocUnknownUnicastStormThreshold data
+ * set rowreq_ctx->undo->eocUnknownUnicastStormThreshold from rowreq_ctx->data.eocUnknownUnicastStormThreshold
+ */
+ rowreq_ctx->undo->eocUnknownUnicastStormThreshold = rowreq_ctx->data.eocUnknownUnicastStormThreshold;
+
+
+ return MFD_SUCCESS;
+} /* eocUnknownUnicastStormThreshold_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocUnknownUnicastStormThreshold_val
+ * A long containing the new value.
+ */
+int
+eocUnknownUnicastStormThreshold_set( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocUnknownUnicastStormThreshold_val )
+{
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocUnknownUnicastStormThreshold_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocUnknownUnicastStormThreshold value.
+ * set eocUnknownUnicastStormThreshold value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocUnknownUnicastStormThreshold = eocUnknownUnicastStormThreshold_val;
+
+ return MFD_SUCCESS;
+} /* eocUnknownUnicastStormThreshold_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocUnknownUnicastStormThreshold_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocUnknownUnicastStormThreshold_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocUnknownUnicastStormThreshold undo.
+ */
+ /*
+ * copy eocUnknownUnicastStormThreshold data
+ * set rowreq_ctx->data.eocUnknownUnicastStormThreshold from rowreq_ctx->undo->eocUnknownUnicastStormThreshold
+ */
+ rowreq_ctx->data.eocUnknownUnicastStormThreshold = rowreq_ctx->undo->eocUnknownUnicastStormThreshold;
+
+
+ return MFD_SUCCESS;
+} /* eocUnknownUnicastStormThreshold_undo */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_set.h
new file mode 100644
index 0000000000..cfc6bdab12
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_data_set.h
@@ -0,0 +1,80 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCBROADCASTSTORMPROTECTIONTABLE_DATA_SET_H
+#define EOCBROADCASTSTORMPROTECTIONTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocBroadcastStormProtectionTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionTable is subid 1 of eocBroadcastStormProtectionGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1, length: 11
+*/
+
+
+int eocBroadcastStormProtectionTable_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx);
+int eocBroadcastStormProtectionTable_undo_cleanup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx);
+int eocBroadcastStormProtectionTable_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx);
+int eocBroadcastStormProtectionTable_commit( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx);
+int eocBroadcastStormProtectionTable_undo_commit( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocBroadcastStormProtectionEN_check_value( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long eocBroadcastStormProtectionEN_val);
+int eocBroadcastStormProtectionEN_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx );
+int eocBroadcastStormProtectionEN_set( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long eocBroadcastStormProtectionEN_val );
+int eocBroadcastStormProtectionEN_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx );
+
+int eocBroadcastStormThreshold_check_value( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocBroadcastStormThreshold_val);
+int eocBroadcastStormThreshold_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx );
+int eocBroadcastStormThreshold_set( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocBroadcastStormThreshold_val );
+int eocBroadcastStormThreshold_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx );
+
+int eocMulticastStormProtectionEN_check_value( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long eocMulticastStormProtectionEN_val);
+int eocMulticastStormProtectionEN_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx );
+int eocMulticastStormProtectionEN_set( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long eocMulticastStormProtectionEN_val );
+int eocMulticastStormProtectionEN_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx );
+
+int eocMulticastStormThreshold_check_value( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocMulticastStormThreshold_val);
+int eocMulticastStormThreshold_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx );
+int eocMulticastStormThreshold_set( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocMulticastStormThreshold_val );
+int eocMulticastStormThreshold_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx );
+
+int eocUnknownUnicastStormProtectionEN_check_value( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long eocUnknownUnicastStormProtectionEN_val);
+int eocUnknownUnicastStormProtectionEN_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx );
+int eocUnknownUnicastStormProtectionEN_set( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, u_long eocUnknownUnicastStormProtectionEN_val );
+int eocUnknownUnicastStormProtectionEN_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx );
+
+int eocUnknownUnicastStormThreshold_check_value( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocUnknownUnicastStormThreshold_val);
+int eocUnknownUnicastStormThreshold_undo_setup( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx );
+int eocUnknownUnicastStormThreshold_set( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, long eocUnknownUnicastStormThreshold_val );
+int eocUnknownUnicastStormThreshold_undo( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocBroadcastStormProtectionTable_check_dependencies(eocBroadcastStormProtectionTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCBROADCASTSTORMPROTECTIONTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_enums.h
new file mode 100644
index 0000000000..6b0e049f00
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_enums.h
@@ -0,0 +1,88 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCBROADCASTSTORMPROTECTIONTABLE_ENUMS_H
+#define EOCBROADCASTSTORMPROTECTIONTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocBroadcastStormProtectionTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocBroadcastStormProtectionEN (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCBROADCASTSTORMPROTECTIONEN_ENUMS
+#define EOCBROADCASTSTORMPROTECTIONEN_ENUMS
+
+#define EOCBROADCASTSTORMPROTECTIONEN_DISABLE 0
+#define EOCBROADCASTSTORMPROTECTIONEN_ENABLE 1
+
+#endif /* EOCBROADCASTSTORMPROTECTIONEN_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocMulticastStormProtectionEN (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCMULTICASTSTORMPROTECTIONEN_ENUMS
+#define EOCMULTICASTSTORMPROTECTIONEN_ENUMS
+
+#define EOCMULTICASTSTORMPROTECTIONEN_DISABLE 0
+#define EOCMULTICASTSTORMPROTECTIONEN_ENABLE 1
+
+#endif /* EOCMULTICASTSTORMPROTECTIONEN_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocUnknownUnicastStormProtectionEN (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCUNKNOWNUNICASTSTORMPROTECTIONEN_ENUMS
+#define EOCUNKNOWNUNICASTSTORMPROTECTIONEN_ENUMS
+
+#define EOCUNKNOWNUNICASTSTORMPROTECTIONEN_DISABLE 0
+#define EOCUNKNOWNUNICASTSTORMPROTECTIONEN_ENABLE 1
+
+#endif /* EOCUNKNOWNUNICASTSTORMPROTECTIONEN_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCBROADCASTSTORMPROTECTIONTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_interface.c
new file mode 100644
index 0000000000..e9a5943b1c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_interface.c
@@ -0,0 +1,1747 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocBroadcastStormProtectionTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocBroadcastStormProtectionTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocBroadcastStormProtectionTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocBroadcastStormProtectionTable is subid 1 of eocBroadcastStormProtectionGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.10.1, length: 11
+*/
+typedef struct eocBroadcastStormProtectionTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocBroadcastStormProtectionTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocBroadcastStormProtectionTable_interface_ctx;
+
+static eocBroadcastStormProtectionTable_interface_ctx eocBroadcastStormProtectionTable_if_ctx;
+
+static void _eocBroadcastStormProtectionTable_container_init(
+ eocBroadcastStormProtectionTable_interface_ctx *if_ctx);
+static void _eocBroadcastStormProtectionTable_container_shutdown(
+ eocBroadcastStormProtectionTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocBroadcastStormProtectionTable_container_get( void )
+{
+ return eocBroadcastStormProtectionTable_if_ctx.container;
+}
+
+eocBroadcastStormProtectionTable_registration *
+eocBroadcastStormProtectionTable_registration_get( void )
+{
+ return eocBroadcastStormProtectionTable_if_ctx.user_ctx;
+}
+
+eocBroadcastStormProtectionTable_registration *
+eocBroadcastStormProtectionTable_registration_set( eocBroadcastStormProtectionTable_registration * newreg )
+{
+ eocBroadcastStormProtectionTable_registration * old = eocBroadcastStormProtectionTable_if_ctx.user_ctx;
+ eocBroadcastStormProtectionTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocBroadcastStormProtectionTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocBroadcastStormProtectionTable_if_ctx.container);
+}
+
+u_int
+eocBroadcastStormProtectionTable_dirty_get( void )
+{
+ return eocBroadcastStormProtectionTable_if_ctx.table_dirty;
+}
+
+void
+eocBroadcastStormProtectionTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocBroadcastStormProtectionTable_if_ctx.table_dirty, status));
+ eocBroadcastStormProtectionTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocBroadcastStormProtectionTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocBroadcastStormProtectionTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocBroadcastStormProtectionTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocBroadcastStormProtectionTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocBroadcastStormProtectionTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocBroadcastStormProtectionTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocBroadcastStormProtectionTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocBroadcastStormProtectionTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocBroadcastStormProtectionTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocBroadcastStormProtectionTable_commit;
+static Netsnmp_Node_Handler _mfd_eocBroadcastStormProtectionTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocBroadcastStormProtectionTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int _eocBroadcastStormProtectionTable_undo_column( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+eocBroadcastStormProtectionTable_data *eocBroadcastStormProtectionTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table eocBroadcastStormProtectionTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocBroadcastStormProtectionTable_initialize_interface(eocBroadcastStormProtectionTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocBroadcastStormProtectionTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocBroadcastStormProtectionTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_eocBroadcastStormProtectionTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocBroadcastStormProtectionTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocBroadcastStormProtectionCBATCardIndex */
+ ASN_INTEGER, /** index: eocBroadcastStormProtectionCNUIndex */
+ ASN_INTEGER, /** index: eocBroadcastStormProtectionPortIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCBROADCASTSTORMPROTECTIONTABLE_MIN_COL;
+ tbl_info->max_column = EOCBROADCASTSTORMPROTECTIONTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocBroadcastStormProtectionTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocBroadcastStormProtectionTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocBroadcastStormProtectionTable_container_init(&eocBroadcastStormProtectionTable_if_ctx);
+ if (NULL == eocBroadcastStormProtectionTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocBroadcastStormProtectionTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocBroadcastStormProtectionTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocBroadcastStormProtectionTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocBroadcastStormProtectionTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocBroadcastStormProtectionTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocBroadcastStormProtectionTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocBroadcastStormProtectionTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocBroadcastStormProtectionTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocBroadcastStormProtectionTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocBroadcastStormProtectionTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocBroadcastStormProtectionTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocBroadcastStormProtectionTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocBroadcastStormProtectionTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:init_eocBroadcastStormProtectionTable",
+ "Registering eocBroadcastStormProtectionTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocBroadcastStormProtectionTable", handler,
+ eocBroadcastStormProtectionTable_oid,
+ eocBroadcastStormProtectionTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocBroadcastStormProtectionTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocBroadcastStormProtectionTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocBroadcastStormProtectionTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocBroadcastStormProtectionTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocBroadcastStormProtectionTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocBroadcastStormProtectionTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocBroadcastStormProtectionTable
+ */
+void
+_eocBroadcastStormProtectionTable_shutdown_interface(eocBroadcastStormProtectionTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocBroadcastStormProtectionTable_container_shutdown(&eocBroadcastStormProtectionTable_if_ctx);
+}
+
+void
+eocBroadcastStormProtectionTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocBroadcastStormProtectionTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocBroadcastStormProtectionTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocBroadcastStormProtectionTable_index_to_oid(netsnmp_index *oid_idx,
+ eocBroadcastStormProtectionTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocBroadcastStormProtectionCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocBroadcastStormProtectionCBATCardIndex;
+ /*
+ * eocBroadcastStormProtectionCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocBroadcastStormProtectionCNUIndex;
+ /*
+ * eocBroadcastStormProtectionPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocBroadcastStormProtectionPortIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocBroadcastStormProtectionCBATCardIndex, 0x00, sizeof(var_eocBroadcastStormProtectionCBATCardIndex) );
+ var_eocBroadcastStormProtectionCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocBroadcastStormProtectionCNUIndex, 0x00, sizeof(var_eocBroadcastStormProtectionCNUIndex) );
+ var_eocBroadcastStormProtectionCNUIndex.type = ASN_INTEGER;
+ memset( &var_eocBroadcastStormProtectionPortIndex, 0x00, sizeof(var_eocBroadcastStormProtectionPortIndex) );
+ var_eocBroadcastStormProtectionPortIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocBroadcastStormProtectionCBATCardIndex.next_variable = &var_eocBroadcastStormProtectionCNUIndex; var_eocBroadcastStormProtectionCNUIndex.next_variable = &var_eocBroadcastStormProtectionPortIndex; var_eocBroadcastStormProtectionPortIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_index_to_oid","called\n"));
+
+ /* eocBroadcastStormProtectionCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocBroadcastStormProtectionCBATCardIndex, (u_char*)&mib_idx->eocBroadcastStormProtectionCBATCardIndex,
+ sizeof(mib_idx->eocBroadcastStormProtectionCBATCardIndex));
+
+ /* eocBroadcastStormProtectionCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocBroadcastStormProtectionCNUIndex, (u_char*)&mib_idx->eocBroadcastStormProtectionCNUIndex,
+ sizeof(mib_idx->eocBroadcastStormProtectionCNUIndex));
+
+ /* eocBroadcastStormProtectionPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocBroadcastStormProtectionPortIndex, (u_char*)&mib_idx->eocBroadcastStormProtectionPortIndex,
+ sizeof(mib_idx->eocBroadcastStormProtectionPortIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocBroadcastStormProtectionCBATCardIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocBroadcastStormProtectionCBATCardIndex );
+
+ return err;
+} /* eocBroadcastStormProtectionTable_index_to_oid */
+
+/**
+ * extract eocBroadcastStormProtectionTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocBroadcastStormProtectionTable_index_from_oid(netsnmp_index *oid_idx,
+ eocBroadcastStormProtectionTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocBroadcastStormProtectionCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocBroadcastStormProtectionCBATCardIndex;
+ /*
+ * eocBroadcastStormProtectionCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocBroadcastStormProtectionCNUIndex;
+ /*
+ * eocBroadcastStormProtectionPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocBroadcastStormProtectionPortIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocBroadcastStormProtectionCBATCardIndex, 0x00, sizeof(var_eocBroadcastStormProtectionCBATCardIndex) );
+ var_eocBroadcastStormProtectionCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocBroadcastStormProtectionCNUIndex, 0x00, sizeof(var_eocBroadcastStormProtectionCNUIndex) );
+ var_eocBroadcastStormProtectionCNUIndex.type = ASN_INTEGER;
+ memset( &var_eocBroadcastStormProtectionPortIndex, 0x00, sizeof(var_eocBroadcastStormProtectionPortIndex) );
+ var_eocBroadcastStormProtectionPortIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocBroadcastStormProtectionCBATCardIndex.next_variable = &var_eocBroadcastStormProtectionCNUIndex; var_eocBroadcastStormProtectionCNUIndex.next_variable = &var_eocBroadcastStormProtectionPortIndex; var_eocBroadcastStormProtectionPortIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocBroadcastStormProtectionCBATCardIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocBroadcastStormProtectionCBATCardIndex = *((long *)var_eocBroadcastStormProtectionCBATCardIndex.val.string);
+ mib_idx->eocBroadcastStormProtectionCNUIndex = *((long *)var_eocBroadcastStormProtectionCNUIndex.val.string);
+ mib_idx->eocBroadcastStormProtectionPortIndex = *((long *)var_eocBroadcastStormProtectionPortIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocBroadcastStormProtectionCBATCardIndex );
+
+ return err;
+} /* eocBroadcastStormProtectionTable_index_from_oid */
+
+
+/*
+ * eocBroadcastStormProtectionTable_allocate_data
+ *
+ * Purpose: create new eocBroadcastStormProtectionTable_data.
+ */
+eocBroadcastStormProtectionTable_data *
+eocBroadcastStormProtectionTable_allocate_data(void)
+{
+ eocBroadcastStormProtectionTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocBroadcastStormProtectionTable_data);
+
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocBroadcastStormProtectionTable_data.\n");
+ }
+
+ return rtn;
+} /* eocBroadcastStormProtectionTable_allocate_data */
+
+/*
+ * eocBroadcastStormProtectionTable_release_data
+ *
+ * Purpose: release eocBroadcastStormProtectionTable data.
+ */
+void
+eocBroadcastStormProtectionTable_release_data(eocBroadcastStormProtectionTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_release_data","called\n"));
+
+ free(data);
+} /* eocBroadcastStormProtectionTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocBroadcastStormProtectionTable_rowreq_ctx
+ */
+eocBroadcastStormProtectionTable_rowreq_ctx *
+eocBroadcastStormProtectionTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocBroadcastStormProtectionTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocBroadcastStormProtectionTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocBroadcastStormProtectionTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocBroadcastStormProtectionTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocBroadcastStormProtectionTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocBroadcastStormProtectionTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocBroadcastStormProtectionTable_rowreq_ctx
+ */
+void
+eocBroadcastStormProtectionTable_release_rowreq_ctx(eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:eocBroadcastStormProtectionTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocBroadcastStormProtectionTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if(rowreq_ctx->undo)
+ eocBroadcastStormProtectionTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocBroadcastStormProtectionTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocBroadcastStormProtectionTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocBroadcastStormProtectionTable_pre_request(eocBroadcastStormProtectionTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable","error %d from "
+ "eocBroadcastStormProtectionTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocBroadcastStormProtectionTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocBroadcastStormProtectionTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocBroadcastStormProtectionTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocBroadcastStormProtectionTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocBroadcastStormProtectionTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocBroadcastStormProtectionTable_post_request(eocBroadcastStormProtectionTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable","error %d from "
+ "eocBroadcastStormProtectionTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocBroadcastStormProtectionTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocBroadcastStormProtectionTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocBroadcastStormProtectionTable_interface_ctx *if_ctx =
+ * (eocBroadcastStormProtectionTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocBroadcastStormProtectionTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocBroadcastStormProtectionTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocBroadcastStormProtectionTable_get_column( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocBroadcastStormProtectionCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMPROTECTIONCBATCARDINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocBroadcastStormProtectionCBATCardIndex;
+ break;
+
+ /* (INDEX) eocBroadcastStormProtectionCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMPROTECTIONCNUINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocBroadcastStormProtectionCNUIndex;
+ break;
+
+ /* (INDEX) eocBroadcastStormProtectionPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMPROTECTIONPORTINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocBroadcastStormProtectionPortIndex;
+ break;
+
+ /* eocBroadcastStormProtectionEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMPROTECTIONEN:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocBroadcastStormProtectionEN_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocBroadcastStormThreshold(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMTHRESHOLD:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocBroadcastStormThreshold_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocMulticastStormProtectionEN(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCMULTICASTSTORMPROTECTIONEN:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocMulticastStormProtectionEN_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocMulticastStormThreshold(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCMULTICASTSTORMTHRESHOLD:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocMulticastStormThreshold_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocUnknownUnicastStormProtectionEN(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCUNKNOWNUNICASTSTORMPROTECTIONEN:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocUnknownUnicastStormProtectionEN_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocUnknownUnicastStormThreshold(9)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocUnknownUnicastStormThreshold_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ default:
+ if (EOCBROADCASTSTORMPROTECTIONTABLE_MIN_COL <= column && column <= EOCBROADCASTSTORMPROTECTIONTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocBroadcastStormProtectionTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocBroadcastStormProtectionTable_get_column */
+
+int
+_mfd_eocBroadcastStormProtectionTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocBroadcastStormProtectionTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocBroadcastStormProtectionTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocBroadcastStormProtectionTable_check_column( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_eocBroadcastStormProtectionTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocBroadcastStormProtectionCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMPROTECTIONCBATCARDINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /* (INDEX) eocBroadcastStormProtectionCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMPROTECTIONCNUINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /* (INDEX) eocBroadcastStormProtectionPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMPROTECTIONPORTINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocBroadcastStormProtectionEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMPROTECTIONEN:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocBroadcastStormProtectionEN ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCBROADCASTSTORMPROTECTIONEN_DISABLE )
+ && ( *var->val.integer != EOCBROADCASTSTORMPROTECTIONEN_ENABLE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:_eocBroadcastStormProtectionTable_check_column:eocBroadcastStormProtectionEN",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocBroadcastStormProtectionEN_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocBroadcastStormProtectionEN_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocBroadcastStormThreshold(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMTHRESHOLD:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocBroadcastStormThreshold ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:_eocBroadcastStormProtectionTable_check_column:eocBroadcastStormThreshold",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocBroadcastStormThreshold_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocBroadcastStormThreshold_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocMulticastStormProtectionEN(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCMULTICASTSTORMPROTECTIONEN:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocMulticastStormProtectionEN ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCMULTICASTSTORMPROTECTIONEN_DISABLE )
+ && ( *var->val.integer != EOCMULTICASTSTORMPROTECTIONEN_ENABLE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:_eocBroadcastStormProtectionTable_check_column:eocMulticastStormProtectionEN",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocMulticastStormProtectionEN_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocMulticastStormProtectionEN_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocMulticastStormThreshold(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCMULTICASTSTORMTHRESHOLD:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocMulticastStormThreshold ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:_eocBroadcastStormProtectionTable_check_column:eocMulticastStormThreshold",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocMulticastStormThreshold_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocMulticastStormThreshold_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocUnknownUnicastStormProtectionEN(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCUNKNOWNUNICASTSTORMPROTECTIONEN:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocUnknownUnicastStormProtectionEN ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCUNKNOWNUNICASTSTORMPROTECTIONEN_DISABLE )
+ && ( *var->val.integer != EOCUNKNOWNUNICASTSTORMPROTECTIONEN_ENABLE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:_eocBroadcastStormProtectionTable_check_column:eocUnknownUnicastStormProtectionEN",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocUnknownUnicastStormProtectionEN_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocUnknownUnicastStormProtectionEN_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocUnknownUnicastStormThreshold(9)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocUnknownUnicastStormThreshold ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:_eocBroadcastStormProtectionTable_check_column:eocUnknownUnicastStormThreshold",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocUnknownUnicastStormThreshold_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocUnknownUnicastStormThreshold_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocBroadcastStormProtectionTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocBroadcastStormProtectionTable_check_column */
+
+int
+_mfd_eocBroadcastStormProtectionTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocBroadcastStormProtectionTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocBroadcastStormProtectionTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocBroadcastStormProtectionTable_undo_setup_column( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_eocBroadcastStormProtectionTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocBroadcastStormProtectionEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMPROTECTIONEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCBROADCASTSTORMPROTECTIONEN_FLAG;
+ rc = eocBroadcastStormProtectionEN_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocBroadcastStormThreshold(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMTHRESHOLD:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCBROADCASTSTORMTHRESHOLD_FLAG;
+ rc = eocBroadcastStormThreshold_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocMulticastStormProtectionEN(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCMULTICASTSTORMPROTECTIONEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCMULTICASTSTORMPROTECTIONEN_FLAG;
+ rc = eocMulticastStormProtectionEN_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocMulticastStormThreshold(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCMULTICASTSTORMTHRESHOLD:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCMULTICASTSTORMTHRESHOLD_FLAG;
+ rc = eocMulticastStormThreshold_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocUnknownUnicastStormProtectionEN(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCUNKNOWNUNICASTSTORMPROTECTIONEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCUNKNOWNUNICASTSTORMPROTECTIONEN_FLAG;
+ rc = eocUnknownUnicastStormProtectionEN_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocUnknownUnicastStormThreshold(9)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD_FLAG;
+ rc = eocUnknownUnicastStormThreshold_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocBroadcastStormProtectionTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocBroadcastStormProtectionTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocBroadcastStormProtectionTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocBroadcastStormProtectionTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocBroadcastStormProtectionTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:mfd","error %d from "
+ "eocBroadcastStormProtectionTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocBroadcastStormProtectionTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:mfd","error %d from "
+ "eocBroadcastStormProtectionTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocBroadcastStormProtectionTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocBroadcastStormProtectionTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocBroadcastStormProtectionTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:mfd","error %d from "
+ "eocBroadcastStormProtectionTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if(rowreq_ctx->undo) {
+ eocBroadcastStormProtectionTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocBroadcastStormProtectionTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocBroadcastStormProtectionTable_set_column( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_eocBroadcastStormProtectionTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocBroadcastStormProtectionEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMPROTECTIONEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCBROADCASTSTORMPROTECTIONEN_FLAG;
+ rc = eocBroadcastStormProtectionEN_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocBroadcastStormThreshold(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMTHRESHOLD:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCBROADCASTSTORMTHRESHOLD_FLAG;
+ rc = eocBroadcastStormThreshold_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocMulticastStormProtectionEN(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCMULTICASTSTORMPROTECTIONEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCMULTICASTSTORMPROTECTIONEN_FLAG;
+ rc = eocMulticastStormProtectionEN_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocMulticastStormThreshold(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCMULTICASTSTORMTHRESHOLD:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCMULTICASTSTORMTHRESHOLD_FLAG;
+ rc = eocMulticastStormThreshold_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocUnknownUnicastStormProtectionEN(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCUNKNOWNUNICASTSTORMPROTECTIONEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCUNKNOWNUNICASTSTORMPROTECTIONEN_FLAG;
+ rc = eocUnknownUnicastStormProtectionEN_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocUnknownUnicastStormThreshold(9)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD_FLAG;
+ rc = eocUnknownUnicastStormThreshold_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocBroadcastStormProtectionTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocBroadcastStormProtectionTable_set_column */
+
+int
+_mfd_eocBroadcastStormProtectionTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocBroadcastStormProtectionTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:mfd","error %d from "
+ "eocBroadcastStormProtectionTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocBroadcastStormProtectionTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocBroadcastStormProtectionTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocBroadcastStormProtectionTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:mfd","error %d from "
+ "eocBroadcastStormProtectionTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocBroadcastStormProtectionTable_dirty_set( eocBroadcastStormProtectionTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocBroadcastStormProtectionTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocBroadcastStormProtectionTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocBroadcastStormProtectionTable_dirty_set( d - 1 );
+ }
+
+ rc = eocBroadcastStormProtectionTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:mfd","error %d from "
+ "eocBroadcastStormProtectionTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocBroadcastStormProtectionTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocBroadcastStormProtectionTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocBroadcastStormProtectionTable_undo_column( eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_eocBroadcastStormProtectionTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocBroadcastStormProtectionEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMPROTECTIONEN:
+ rc = eocBroadcastStormProtectionEN_undo(rowreq_ctx);
+ break;
+
+ /* eocBroadcastStormThreshold(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCBROADCASTSTORMTHRESHOLD:
+ rc = eocBroadcastStormThreshold_undo(rowreq_ctx);
+ break;
+
+ /* eocMulticastStormProtectionEN(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCMULTICASTSTORMPROTECTIONEN:
+ rc = eocMulticastStormProtectionEN_undo(rowreq_ctx);
+ break;
+
+ /* eocMulticastStormThreshold(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCMULTICASTSTORMTHRESHOLD:
+ rc = eocMulticastStormThreshold_undo(rowreq_ctx);
+ break;
+
+ /* eocUnknownUnicastStormProtectionEN(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCUNKNOWNUNICASTSTORMPROTECTIONEN:
+ rc = eocUnknownUnicastStormProtectionEN_undo(rowreq_ctx);
+ break;
+
+ /* eocUnknownUnicastStormThreshold(9)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD:
+ rc = eocUnknownUnicastStormThreshold_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocBroadcastStormProtectionTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocBroadcastStormProtectionTable_undo_column */
+
+int
+_mfd_eocBroadcastStormProtectionTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocBroadcastStormProtectionTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:mfd","error %d from "
+ "eocBroadcastStormProtectionTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocBroadcastStormProtectionTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocBroadcastStormProtectionTable:mfd","error %d from "
+ "eocBroadcastStormProtectionTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocBroadcastStormProtectionTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocBroadcastStormProtectionTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_mfd_eocBroadcastStormProtectionTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocBroadcastStormProtectionTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocBroadcastStormProtectionTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocBroadcastStormProtectionTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocBroadcastStormProtectionTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocBroadcastStormProtectionTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocBroadcastStormProtectionTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocBroadcastStormProtectionTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocBroadcastStormProtectionTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocBroadcastStormProtectionTable_container_init(eocBroadcastStormProtectionTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_eocBroadcastStormProtectionTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocBroadcastStormProtectionTable_oid,
+ eocBroadcastStormProtectionTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocBroadcastStormProtectionTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocBroadcastStormProtectionTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocBroadcastStormProtectionTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocBroadcastStormProtectionTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocBroadcastStormProtectionTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocBroadcastStormProtectionTable_container_shutdown(eocBroadcastStormProtectionTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocBroadcastStormProtectionTable:_eocBroadcastStormProtectionTable_container_shutdown","called\n"));
+
+ eocBroadcastStormProtectionTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocBroadcastStormProtectionTable_container_shutdown */
+
+
+eocBroadcastStormProtectionTable_rowreq_ctx *
+eocBroadcastStormProtectionTable_row_find_by_mib_index(eocBroadcastStormProtectionTable_mib_index *mib_idx)
+{
+ eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocBroadcastStormProtectionTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocBroadcastStormProtectionTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_interface.h
new file mode 100644
index 0000000000..5398c3e7e0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_interface.h
@@ -0,0 +1,87 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCBROADCASTSTORMPROTECTIONTABLE_INTERFACE_H
+#define EOCBROADCASTSTORMPROTECTIONTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocBroadcastStormProtectionTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocBroadcastStormProtectionTable_initialize_interface(eocBroadcastStormProtectionTable_registration * user_ctx,
+ u_long flags);
+void _eocBroadcastStormProtectionTable_shutdown_interface(eocBroadcastStormProtectionTable_registration * user_ctx);
+
+eocBroadcastStormProtectionTable_registration *
+eocBroadcastStormProtectionTable_registration_get( void );
+
+eocBroadcastStormProtectionTable_registration *
+eocBroadcastStormProtectionTable_registration_set( eocBroadcastStormProtectionTable_registration * newreg );
+
+netsnmp_container *eocBroadcastStormProtectionTable_container_get( void );
+int eocBroadcastStormProtectionTable_container_size( void );
+
+u_int eocBroadcastStormProtectionTable_dirty_get( void );
+void eocBroadcastStormProtectionTable_dirty_set( u_int status );
+
+ eocBroadcastStormProtectionTable_rowreq_ctx * eocBroadcastStormProtectionTable_allocate_rowreq_ctx(void *);
+void eocBroadcastStormProtectionTable_release_rowreq_ctx(eocBroadcastStormProtectionTable_rowreq_ctx *rowreq_ctx);
+
+int eocBroadcastStormProtectionTable_index_to_oid(netsnmp_index *oid_idx,
+ eocBroadcastStormProtectionTable_mib_index *mib_idx);
+int eocBroadcastStormProtectionTable_index_from_oid(netsnmp_index *oid_idx,
+ eocBroadcastStormProtectionTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocBroadcastStormProtectionTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCBROADCASTSTORMPROTECTIONTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_oids.h
new file mode 100644
index 0000000000..1b0d0da17a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocBroadcastStormProtectionGroup/eocBroadcastStormProtectionTable/eocBroadcastStormProtectionTable_oids.h
@@ -0,0 +1,58 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCBROADCASTSTORMPROTECTIONTABLE_OIDS_H
+#define EOCBROADCASTSTORMPROTECTIONTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* column number definitions for table eocBroadcastStormProtectionTable */
+#define EOCBROADCASTSTORMPROTECTIONTABLE_OID 1,3,6,1,4,1,17409,2,4,10,1
+
+
+#define COLUMN_EOCBROADCASTSTORMPROTECTIONCBATCARDINDEX 1
+
+#define COLUMN_EOCBROADCASTSTORMPROTECTIONCNUINDEX 2
+
+#define COLUMN_EOCBROADCASTSTORMPROTECTIONPORTINDEX 3
+
+#define COLUMN_EOCBROADCASTSTORMPROTECTIONEN 4
+#define COLUMN_EOCBROADCASTSTORMPROTECTIONEN_FLAG (0x1 << 0)
+
+#define COLUMN_EOCBROADCASTSTORMTHRESHOLD 5
+#define COLUMN_EOCBROADCASTSTORMTHRESHOLD_FLAG (0x1 << 1)
+
+#define COLUMN_EOCMULTICASTSTORMPROTECTIONEN 6
+#define COLUMN_EOCMULTICASTSTORMPROTECTIONEN_FLAG (0x1 << 2)
+
+#define COLUMN_EOCMULTICASTSTORMTHRESHOLD 7
+#define COLUMN_EOCMULTICASTSTORMTHRESHOLD_FLAG (0x1 << 3)
+
+#define COLUMN_EOCUNKNOWNUNICASTSTORMPROTECTIONEN 8
+#define COLUMN_EOCUNKNOWNUNICASTSTORMPROTECTIONEN_FLAG (0x1 << 4)
+
+#define COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD 9
+#define COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD_FLAG (0x1 << 5)
+
+
+#define EOCBROADCASTSTORMPROTECTIONTABLE_MIN_COL COLUMN_EOCBROADCASTSTORMPROTECTIONCBATCARDINDEX
+#define EOCBROADCASTSTORMPROTECTIONTABLE_MAX_COL COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD
+
+
+ /*
+ * TODO:405:r: Review EOCBROADCASTSTORMPROTECTIONTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCBROADCASTSTORMPROTECTIONTABLE_SETTABLE_COLS (COLUMN_EOCBROADCASTSTORMPROTECTIONEN_FLAG | COLUMN_EOCBROADCASTSTORMTHRESHOLD_FLAG | COLUMN_EOCMULTICASTSTORMPROTECTIONEN_FLAG | COLUMN_EOCMULTICASTSTORMTHRESHOLD_FLAG | COLUMN_EOCUNKNOWNUNICASTSTORMPROTECTIONEN_FLAG | COLUMN_EOCUNKNOWNUNICASTSTORMTHRESHOLD_FLAG)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCBROADCASTSTORMPROTECTIONTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup.h
new file mode 100644
index 0000000000..a53d2f21ba
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup.h
@@ -0,0 +1,6 @@
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup)
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup)
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup)
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects)
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup)
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup.h
new file mode 100644
index 0000000000..ecaafc90e9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup.h
@@ -0,0 +1 @@
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup/eocCBATDevInfoGroup)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup/eocCBATDevInfoGroup.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup/eocCBATDevInfoGroup.c
new file mode 100644
index 0000000000..8ebbbe8c35
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup/eocCBATDevInfoGroup.c
@@ -0,0 +1,610 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37: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 "eocCBATDevInfoGroup.h"
+
+/** Initializes the eocCBATDevInfoGroup module */
+void
+init_eocCBATDevInfoGroup(void)
+{
+ static oid eocCBATAdminLogicalID_oid[] = { 1,3,6,1,4,1,17409,2,4,1,1,1 };
+ static oid eocCBATAdminTechProject_oid[] = { 1,3,6,1,4,1,17409,2,4,1,1,2 };
+ static oid eocCBATAdminManufactoryInfo_oid[] = { 1,3,6,1,4,1,17409,2,4,1,1,3 };
+ static oid eocCBATAdminModelNumber_oid[] = { 1,3,6,1,4,1,17409,2,4,1,1,4 };
+ static oid eocCBATAdminSerialNumber_oid[] = { 1,3,6,1,4,1,17409,2,4,1,1,5 };
+ static oid eocCBATAdminSoftwareVersion_oid[] = { 1,3,6,1,4,1,17409,2,4,1,1,6 };
+ static oid eocCBATAdminHardwareVersion_oid[] = { 1,3,6,1,4,1,17409,2,4,1,1,7 };
+ static oid eocCBATAdminVendorSpecialInfo_oid[] = { 1,3,6,1,4,1,17409,2,4,1,1,8 };
+
+ DEBUGMSGTL(("eocCBATDevInfoGroup", "Initializing\n"));
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminLogicalID", handle_eocCBATAdminLogicalID,
+ eocCBATAdminLogicalID_oid, OID_LENGTH(eocCBATAdminLogicalID_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminTechProject", handle_eocCBATAdminTechProject,
+ eocCBATAdminTechProject_oid, OID_LENGTH(eocCBATAdminTechProject_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminManufactoryInfo", handle_eocCBATAdminManufactoryInfo,
+ eocCBATAdminManufactoryInfo_oid, OID_LENGTH(eocCBATAdminManufactoryInfo_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminModelNumber", handle_eocCBATAdminModelNumber,
+ eocCBATAdminModelNumber_oid, OID_LENGTH(eocCBATAdminModelNumber_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminSerialNumber", handle_eocCBATAdminSerialNumber,
+ eocCBATAdminSerialNumber_oid, OID_LENGTH(eocCBATAdminSerialNumber_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminSoftwareVersion", handle_eocCBATAdminSoftwareVersion,
+ eocCBATAdminSoftwareVersion_oid, OID_LENGTH(eocCBATAdminSoftwareVersion_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminHardwareVersion", handle_eocCBATAdminHardwareVersion,
+ eocCBATAdminHardwareVersion_oid, OID_LENGTH(eocCBATAdminHardwareVersion_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminVendorSpecialInfo", handle_eocCBATAdminVendorSpecialInfo,
+ eocCBATAdminVendorSpecialInfo_oid, OID_LENGTH(eocCBATAdminVendorSpecialInfo_oid),
+ HANDLER_CAN_RONLY
+ ));
+}
+
+int
+handle_eocCBATAdminLogicalID(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ char logical_id[ADMIN_LOGICAL_ID_MAX_LEN];
+ char *logical_id_save = NULL;
+ u_char *value;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ DEBUGMSGTL (("eocCBATDevInfoGroup: "
+ "handle_eocCBATAdminLogicalID called",
+ "MODE_GET\n"));
+ /* read buffer for logical ID from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_ADMIN_LOGICAL_ID,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* Logical ID set to empty string to permit walk requests */
+ strcpy (logical_id, "");
+ }
+ else
+ {
+ /* if the buffer read from config file is larger than
+ * maximum value, copy only maximum permitted number
+ * of bytes */
+ strncpy (logical_id, buffer, ADMIN_LOGICAL_ID_MAX_LEN-1);
+ logical_id[ADMIN_LOGICAL_ID_MAX_LEN-1]='\0';
+ }
+ /* set the buffer for GET request */
+ snmp_set_var_typed_value (requests->requestvb,
+ ASN_OCTET_STR,
+ (u_char *) logical_id,
+ strlen (logical_id));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ DEBUGMSGTL (("eocCBATDevInfoGroup: "
+ "handle_eocCBATAdminLogicalID called",
+ "MODE_SET_RESERVE1\n"));
+ /*
+ * check type and maximal size of variable given in SET request
+ */
+ ret = netsnmp_check_vb_type_and_max_size (
+ requests->requestvb,
+ ASN_OCTET_STR, ADMIN_LOGICAL_ID_MAX_LEN-1);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /* malloc "undo" storage buffer */
+ DEBUGMSGTL (("eocCBATDevInfoGroup: "
+ "handle_eocCBATAdminLogicalID called",
+ "MODE_SET_RESERVE2\n"));
+
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_ADMIN_LOGICAL_ID,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+
+ /* if the buffer read from config file is larger than maximum value,
+ * copy only maximum permitted number of bytes */
+ strncpy (logical_id, buffer, ADMIN_LOGICAL_ID_MAX_LEN-1);
+ logical_id[ADMIN_LOGICAL_ID_MAX_LEN - 1] = '\0';
+
+ memdup ((u_char **) &logical_id_save,
+ (u_char *) logical_id,
+ sizeof (logical_id));
+
+ if ( NULL == logical_id_save /* if malloc, or whatever, failed: */)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ else
+ {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list (
+ "logid", logical_id_save, free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /* free resources allocated in RESERVE1 and/or
+ RESERVE2. Something failed somewhere, and the states
+ below won't be called. */
+
+ /* called in case SET_RESERVE1 or SET_RESERVE2 fail */
+ DEBUGMSGTL (("eocCBATDevInfoGroup: "
+ "handle_eocCBATAdminLogicalID called",
+ "MODE_SET_FREE\n"));
+ break;
+
+ case MODE_SET_ACTION:
+ /* perform the value change here */
+ DEBUGMSGTL (("eocCBATDevInfoGroup: "
+ "handle_eocCBATAdminLogicalID called",
+ "MODE_SET_ACTION\n"));
+ value = requests->requestvb->val.string;
+ DEBUGMSGTL (("eocCBATDevInfoGroup: "
+ "handle_eocCBATAdminLogicalID",
+ "val_len of MODE_SET_ACTION value to set: %d\n",
+ requests->requestvb->val_len));
+
+ /* copy SET request variable buffer and add terminal 0 */
+ strncpy (logical_id, value, requests->requestvb->val_len);
+ logical_id[requests->requestvb->val_len]='\0';
+
+ DEBUGMSGTL (("eocCBATDevInfoGroup: "
+ "handle_eocCBATAdminLogicalID",
+ "logical ID: |%s|\n", logical_id));
+
+
+ /* write null-terminated buffer to config file*/
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_ADMIN_LOGICAL_ID,
+ logical_id);
+
+ if ( LIBSPID_SUCCESS != ret)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /* delete temporary storage */
+ DEBUGMSGTL (("eocCBATDevInfoGroup: "
+ "handle_eocCBATAdminLogicalID called",
+ "MODE_SET_COMMIT\n"));
+ break;
+
+ case MODE_SET_UNDO:
+ /* UNDO and return to previous value for the object */
+ /* called only in case SET_ACTION failed */
+ DEBUGMSGTL (("eocCBATDevInfoGroup: "
+ "handle_eocCBATAdminLogicalID called",
+ "MODE_SET_UNDO\n"));
+
+ value = (u_char *)netsnmp_request_get_list_data (requests,
+ "logid");
+
+ /* restore previous value in config file */
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_ADMIN_LOGICAL_ID, value);
+
+ if ( LIBSPID_SUCCESS != ret /* error? */ )
+ {
+ netsnmp_set_request_error (reqinfo, requests, SNMP_ERR_UNDOFAILED);
+ }
+
+
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminLogicalID\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminTechProject(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ libspid_error_t ret;
+ char tech_project[LIBSPID_CONFIG_KEY_MAX_LEN];
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ DEBUGMSGTL (("eocCBATDevInfoGroup: "
+ "handle_eocCBATAdminTechProject called",
+ "MODE_GET\n"));
+ /* read buffer for tech project from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_ADMIN_TECHPROJECT,
+ tech_project, LIBSPID_CONFIG_KEY_MAX_LEN);
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* Tech Project set to empty string to permit walk requests */
+ strcpy (tech_project, "");
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ (u_char *) tech_project,
+ strlen (tech_project));
+ break;
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminTechProject\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminManufactoryInfo(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ char manufactory_info[DEFAULT_SNMP_STRING_MAX_LENGTH];
+
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ /* read NVRAM contents */
+ ret = libspid_get_manufactory_info (manufactory_info, DEFAULT_SNMP_STRING_MAX_LENGTH);
+ if (ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_nvram error\n");
+ /* Manufactory info is set to empty string to
+ * permit walk requests */
+ strcpy (manufactory_info, "");
+ }
+
+ DEBUGMSGTL (("eocCBATDevInfoGroup: "
+ "handle_eocCBATAdminManufactoryInfo",
+ "manufactory info: |%s|\n",
+ manufactory_info));
+
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ (u_char *) manufactory_info,
+ strlen (manufactory_info));
+ break;
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in "
+ "handle_eocCBATAdminManufactoryInfo\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+int
+handle_eocCBATAdminModelNumber(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ char model_number[DEFAULT_SNMP_STRING_MAX_LENGTH];
+
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+
+ case MODE_GET:
+ /* read NVRAM contents */
+ ret = libspid_get_product_name (model_number, DEFAULT_SNMP_STRING_MAX_LENGTH);
+ if (ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_nvram error\n");
+ /* Model number is set to empty string to permit walk requests */
+ strcpy (model_number, "");
+ }
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ (u_char *) model_number,
+ strlen (model_number));
+ break;
+
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminModelNumber\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminSerialNumber(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ char serial_number[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ /* read NVRAM contents */
+ ret = libspid_get_serial_number (serial_number, DEFAULT_SNMP_STRING_MAX_LENGTH);
+ if (ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_nvram error\n");
+ /* Serial number set to empty string to permit walk requests */
+ strcpy (serial_number, "");
+ }
+
+ DEBUGMSGTL (("eocCBATDevInfoGroup: handle_eocCBATAdminSerialNumber",
+ "serial number: |%s|\n", serial_number));
+
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ (u_char *) serial_number,
+ strlen (serial_number));
+ break;
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminSerialNumber\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminSoftwareVersion(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ char sw_version[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ char mtd_name[64];
+ spidcom_image_desc_t desc;
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+
+ case MODE_GET:
+ ret = libspid_image_get_desc (
+ LIBSPID_IMAGE_DESC_TYPE_CURRENT,
+ &desc, mtd_name);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_image_get_desc error\n");
+ /* SW version set to empty string to permit walk requests */
+ strcpy (sw_version, "");
+ }
+ else
+ {
+ memset (sw_version, 0, DEFAULT_SNMP_STRING_MAX_LENGTH);
+ if (sizeof (desc.version) <= DEFAULT_SNMP_STRING_MAX_LENGTH)
+ {
+ strncpy (sw_version, desc.version, sizeof (desc.version));
+ }
+ else
+ {
+ /* if the buffer read from image description is larger
+ * than maximum value, copy only maximum permitted number
+ * of bytes */
+ strncpy (sw_version,
+ desc.version,
+ DEFAULT_SNMP_STRING_MAX_LENGTH - 1);
+ sw_version[DEFAULT_SNMP_STRING_MAX_LENGTH - 1] = '\0';
+ }
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ (u_char *) sw_version,
+ strlen (sw_version));
+ break;
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in "
+ "handle_eocCBATAdminSoftwareVersion\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminHardwareVersion(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ char hw_version[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+
+ case MODE_GET:
+ /* read NVRAM contents */
+ ret = libspid_get_product_partnb (hw_version, DEFAULT_SNMP_STRING_MAX_LENGTH);
+ if (ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_nvram error\n");
+ /* HW version set to empty string to permit walk requests */
+ strcpy (hw_version, "");
+ }
+
+ DEBUGMSGTL (("eocCBATDevInfoGroup: handle_eocCBATAdminHardwareVersion",
+ "hw version: |%s|\n", hw_version));
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ (u_char *) hw_version,
+ strlen (hw_version));
+ break;
+
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in "
+ "handle_eocCBATAdminHardwareVersion\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminVendorSpecialInfo(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ char vendor_spec_info[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ /* read NVRAM contents */
+ ret = libspid_get_oem_info (vendor_spec_info, DEFAULT_SNMP_STRING_MAX_LENGTH);
+ if (ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_nvram error\n");
+ /* Vendor spec. info set to empty string to permit
+ * walk requests */
+ strcpy (vendor_spec_info, "");
+ }
+
+ DEBUGMSGTL (("eocCBATDevInfoGroup: "
+ "handle_eocCBATAdminVendorSpecialInfo",
+ "vendor spec info: |%s|\n", vendor_spec_info));
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ (u_char *) vendor_spec_info,
+ strlen (vendor_spec_info));
+ break;
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in "
+ "handle_eocCBATAdminVendorSpecialInfo\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup/eocCBATDevInfoGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup/eocCBATDevInfoGroup.h
new file mode 100644
index 0000000000..dfae2a9856
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevInfoGroup/eocCBATDevInfoGroup.h
@@ -0,0 +1,22 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+ */
+#ifndef EOCCBATDEVINFOGROUP_H
+#define EOCCBATDEVINFOGROUP_H
+
+/* include common header */
+#include "EoCCommon.h"
+
+/* function declarations */
+void init_eocCBATDevInfoGroup(void);
+Netsnmp_Node_Handler handle_eocCBATAdminLogicalID;
+Netsnmp_Node_Handler handle_eocCBATAdminTechProject;
+Netsnmp_Node_Handler handle_eocCBATAdminManufactoryInfo;
+Netsnmp_Node_Handler handle_eocCBATAdminModelNumber;
+Netsnmp_Node_Handler handle_eocCBATAdminSerialNumber;
+Netsnmp_Node_Handler handle_eocCBATAdminSoftwareVersion;
+Netsnmp_Node_Handler handle_eocCBATAdminHardwareVersion;
+Netsnmp_Node_Handler handle_eocCBATAdminVendorSpecialInfo;
+
+#endif /* EOCCBATDEVINFOGROUP_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup.h
new file mode 100644
index 0000000000..9f6c0feebf
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup.h
@@ -0,0 +1 @@
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup/eocCBATDevStatusGroup)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup/eocCBATDevStatusGroup.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup/eocCBATDevStatusGroup.c
new file mode 100644
index 0000000000..8a3f461100
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup/eocCBATDevStatusGroup.c
@@ -0,0 +1,901 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37: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 "eocCBATDevStatusGroup.h"
+#include <time.h>
+static int admin_conf_save_result = 0;
+
+/** Initializes the eocCBATDevStatusGroup module */
+void
+init_eocCBATDevStatusGroup(void)
+{
+ static oid eocCBATAdminAlarmDetectionControl_oid[] = { 1,3,6,1,4,1,17409,2,4,1,3,1 };
+ static oid eocCBATAdminStatus_oid[] = { 1,3,6,1,4,1,17409,2,4,1,3,2 };
+ static oid eocCBATAdminInternalTemperature_oid[] = { 1,3,6,1,4,1,17409,2,4,1,3,3 };
+ static oid eocCBATAdminTamperStatus_oid[] = { 1,3,6,1,4,1,17409,2,4,1,3,4 };
+ static oid eocCBATAdminDateAndTime_oid[] = { 1,3,6,1,4,1,17409,2,4,1,3,5 };
+ static oid eocCBATAdminReset_oid[] = { 1,3,6,1,4,1,17409,2,4,1,3,6 };
+ static oid eocCBATAdminResetCause_oid[] = { 1,3,6,1,4,1,17409,2,4,1,3,7 };
+ static oid eocCBATAdminConfigurationSaving_oid[] = { 1,3,6,1,4,1,17409,2,4,1,3,8 };
+ static oid eocCBATAdminConfigurationResult_oid[] = { 1,3,6,1,4,1,17409,2,4,1,3,9 };
+
+ DEBUGMSGTL (("eocCBATDevStatusGroup", "Initializing\n"));
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminAlarmDetectionControl", handle_eocCBATAdminAlarmDetectionControl,
+ eocCBATAdminAlarmDetectionControl_oid, OID_LENGTH(eocCBATAdminAlarmDetectionControl_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminStatus", handle_eocCBATAdminStatus,
+ eocCBATAdminStatus_oid, OID_LENGTH(eocCBATAdminStatus_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminInternalTemperature", handle_eocCBATAdminInternalTemperature,
+ eocCBATAdminInternalTemperature_oid, OID_LENGTH(eocCBATAdminInternalTemperature_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminTamperStatus", handle_eocCBATAdminTamperStatus,
+ eocCBATAdminTamperStatus_oid, OID_LENGTH(eocCBATAdminTamperStatus_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminDateAndTime", handle_eocCBATAdminDateAndTime,
+ eocCBATAdminDateAndTime_oid, OID_LENGTH(eocCBATAdminDateAndTime_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminReset", handle_eocCBATAdminReset,
+ eocCBATAdminReset_oid, OID_LENGTH(eocCBATAdminReset_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminResetCause", handle_eocCBATAdminResetCause,
+ eocCBATAdminResetCause_oid, OID_LENGTH(eocCBATAdminResetCause_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminConfigurationSaving", handle_eocCBATAdminConfigurationSaving,
+ eocCBATAdminConfigurationSaving_oid, OID_LENGTH(eocCBATAdminConfigurationSaving_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminConfigurationResult", handle_eocCBATAdminConfigurationResult,
+ eocCBATAdminConfigurationResult_oid, OID_LENGTH(eocCBATAdminConfigurationResult_oid),
+ HANDLER_CAN_RONLY
+ ));
+}
+
+int
+handle_eocCBATAdminAlarmDetectionControl(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ admin_alarm_detect_t alarm_detect;
+ int *alarm_detect_save = NULL;
+ u_long value;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ /* read buffer for detection control from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ENABLE,
+ buffer, LIBSPID_LINE_MAX_LEN);
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* AlarmDetection set to disabled to permit walk requests */
+ alarm_detect = ADMIN_ALARM_DETECT_DISABLED;
+ }
+ else
+ {
+ /* parse alarm detection settings from buffer */
+ if (!strncmp (buffer, LIBSPID_SNMP_CONF_VALUE_YES,
+ strlen (LIBSPID_SNMP_CONF_VALUE_YES)))
+ {
+ alarm_detect = ADMIN_ALARM_DETECT_ENABLED;
+ }
+ else if (!strncmp (buffer, LIBSPID_SNMP_CONF_VALUE_REGENERATE,
+ strlen (LIBSPID_SNMP_CONF_VALUE_REGENERATE)))
+ {
+ alarm_detect = ADMIN_ALARM_DETECT_REGENERATE;
+ }
+ else
+ {
+ alarm_detect = ADMIN_ALARM_DETECT_DISABLED;
+ }
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *)&alarm_detect,
+ sizeof (alarm_detect));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_INTEGER);
+ if ( ret != SNMP_ERR_NOERROR )
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret );
+ }
+ ret = netsnmp_check_vb_range (
+ requests->requestvb,
+ ADMIN_ALARM_DETECT_DISABLED,
+ ADMIN_ALARM_DETECT_REGENERATE);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /* malloc "undo" storage buffer */
+ /* read buffer for detection control from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ENABLE,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ /* parse alarm detection settings from buffer */
+ if (!strncmp (buffer,
+ LIBSPID_SNMP_CONF_VALUE_YES,
+ strlen (LIBSPID_SNMP_CONF_VALUE_YES)))
+ {
+ alarm_detect = ADMIN_ALARM_DETECT_ENABLED;
+ }
+ else if (!strncmp (buffer,
+ LIBSPID_SNMP_CONF_VALUE_REGENERATE,
+ strlen (LIBSPID_SNMP_CONF_VALUE_REGENERATE)))
+ {
+ alarm_detect = ADMIN_ALARM_DETECT_REGENERATE;
+ }
+ else
+ {
+ alarm_detect = ADMIN_ALARM_DETECT_DISABLED;
+ }
+
+ memdup ((u_char **) &alarm_detect_save,
+ (u_char *) &alarm_detect, sizeof (alarm_detect));
+
+ if ( NULL == alarm_detect_save)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list
+ ("alarmdet", alarm_detect_save,
+ free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /* free resources allocated in RESERVE1 and/or
+ RESERVE2. Something failed somewhere, and the states
+ below won't be called. */
+ break;
+
+ case MODE_SET_ACTION:
+ /* perform the value change here */
+ value = *(requests->requestvb->val.integer);
+ switch (value)
+ {
+ case ADMIN_ALARM_DETECT_DISABLED:
+ ret = libspid_config_write_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ENABLE,
+ LIBSPID_SNMP_CONF_VALUE_NO);
+ if ( LIBSPID_SUCCESS != ret )
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ break;
+ case ADMIN_ALARM_DETECT_ENABLED:
+ ret = libspid_config_write_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ENABLE,
+ LIBSPID_SNMP_CONF_VALUE_YES);
+ if ( LIBSPID_SUCCESS != ret) {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ break;
+ case ADMIN_ALARM_DETECT_REGENERATE:
+ ret = libspid_config_write_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ENABLE,
+ LIBSPID_SNMP_CONF_VALUE_REGENERATE);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ /* clear contents of current alarm and traps
+ * files and alarm log */
+ if (0 != clearCurrentAlarms ())
+ {
+ snmp_log (LOG_ERR,
+ "handle_eocCBATAdminAlarmDetectionControl: "
+ "error clearing current alarm file!\n");
+ }
+ if (0 != clearCurrentTraps ())
+ {
+ snmp_log (LOG_ERR,
+ "handle_eocCBATAdminAlarmDetectionControl: "
+ "error clearing current traps file!\n");
+ }
+
+ clearAlarmLogList ();
+ break;
+ default:
+ /*
+ * we should never get here, so this is a really bad error
+ */
+ snmp_log (LOG_ERR,
+ "unknown SET value (%d) in "
+ "handle_eocCBATAdminAlarmDetectionControl\n",
+ value);
+ return SNMP_ERR_GENERR;
+ }
+
+ case MODE_SET_COMMIT:
+ break;
+ case MODE_SET_UNDO:
+ /* UNDO and return to previous value for the object */
+ value = *((u_long *) netsnmp_request_get_list_data (
+ requests,
+ "alarmdet"));
+
+ switch (value)
+ {
+ case ADMIN_ALARM_DETECT_DISABLED:
+ ret = libspid_config_write_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ENABLE,
+ LIBSPID_SNMP_CONF_VALUE_NO);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ break;
+ case ADMIN_ALARM_DETECT_ENABLED:
+ ret = libspid_config_write_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ENABLE,
+ LIBSPID_SNMP_CONF_VALUE_YES);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ break;
+ case ADMIN_ALARM_DETECT_REGENERATE:
+ ret = libspid_config_write_item (
+ LIBSPID_SNMP_CONF_PATH,
+ LIBSPID_SNMP_CONF_LABEL_ALARM_ENABLE,
+ LIBSPID_SNMP_CONF_VALUE_REGENERATE);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ break;
+ default:
+ /* we should never get here, so this is a really bad error*/
+ snmp_log (LOG_ERR,
+ "unknown UNDO value (%d) in "
+ "handle_eocCBATAdminAlarmDetectionControl\n",
+ value);
+ return SNMP_ERR_GENERR;
+ }
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in "
+ "handle_eocCBATAdminAlarmDetectionControl\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminStatus(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ char admin_status;
+ u_long value;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ /* read buffer for Admin Status from info file */
+ ret = libspid_config_read_item (
+ LIBSPID_SNMP_INFO_PATH,
+ LIBSPID_SNMP_INFO_LABEL_TRAP_STATUS,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* AdminStatus set to empty char to permit walk requests */
+ admin_status = ' ';
+ }
+ else
+ {
+ /* parse Admin Status from buffer */
+ if (1 != sscanf (buffer, "%x", &value))
+ {
+ admin_status = ' ';
+ }
+ else
+ {
+ admin_status = (char) value;
+ }
+ }
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ (u_char *) &admin_status,
+ sizeof (admin_status));
+ break;
+
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR, "unknown mode (%d) in handle_eocCBATAdminStatus\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminInternalTemperature(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ int internal_temp;
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ ret = libspid_hardware_get_temperature (&internal_temp);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,
+ "libspid_hardware_get_temperature error\n");
+ /* default temperature value set to 0 to permit walk requests */
+ internal_temp = 0;
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &internal_temp,
+ sizeof (internal_temp));
+ break;
+
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in "
+ "handle_eocCBATAdminInternalTemperature\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminTamperStatus(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ admin_tamper_status_t admin_tamper_status;
+ libspid_eoc_tamper_status_t tamper_status = 0;
+
+ /* TEMP: const value for skeleton compilation */
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ ret = libspid_hardware_get_tamper (&tamper_status);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_hardware_get_tamper error\n");
+
+ admin_tamper_status = ADMIN_TAMPER_STATUS_INTACT;
+ }
+ else
+ {
+ if (LIBSPID_TAMPER_STATUS_INTACT == tamper_status)
+ {
+ admin_tamper_status = ADMIN_TAMPER_STATUS_INTACT;
+ }
+ else
+ {
+ admin_tamper_status = ADMIN_TAMPER_STATUS_COMPROMISED;
+ }
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &admin_tamper_status,
+ sizeof (admin_tamper_status));
+ break;
+
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminTamperStatus\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminDateAndTime(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+
+ u_char *value;
+ size_t val_size;
+
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ time_t t1;
+ static time_t oldtime=0;
+
+ struct tm tm_set;
+
+ memset (buffer, 0, sizeof (buffer));
+
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ /* obtain current time in seconds */
+ t1 = time (NULL);
+ /* convert time in seconds to binary string representation */
+ value = date_n_time(&t1, &val_size);
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ value, val_size);
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* allowed size for DateAndTime binary string is 11 or 8 */
+ if ( (netsnmp_check_vb_type_and_size (requests->requestvb, ASN_OCTET_STR, 11)
+ != SNMP_ERR_NOERROR)
+ && (netsnmp_check_vb_type_and_size (requests->requestvb, ASN_OCTET_STR, 8)
+ != SNMP_ERR_NOERROR))
+ {
+ netsnmp_set_request_error (reqinfo, requests, SNMP_ERR_WRONGVALUE);
+ }
+
+ break;
+
+ case MODE_SET_RESERVE2:
+ /* store current time in seconds for potential UNDO */
+ oldtime = time (NULL);
+ if (oldtime == -1)
+ {
+ snmp_log (LOG_ERR, "error getting current time\n");
+ netsnmp_set_request_error (reqinfo, requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /* free resources allocated in RESERVE1 and/or
+ RESERVE2. Something failed somewhere, and the states
+ below won't be called. */
+ break;
+
+ case MODE_SET_ACTION:
+ strncpy (buffer, requests->requestvb->val.string, requests->requestvb->val_len);
+
+ tm_set.tm_year = buffer[0] * 256 + buffer[1] - 1900;
+ tm_set.tm_mon = buffer[2] - 1;
+ tm_set.tm_mday = buffer[3];
+ tm_set.tm_hour = buffer[4];
+ tm_set.tm_min = buffer[5];
+ tm_set.tm_sec = buffer[6];
+ tm_set.tm_isdst = 0;
+ t1 = mktime (&tm_set);
+ if (t1 == -1)
+ {
+ snmp_log (LOG_ERR, "mktime error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ else if (stime (&t1) == -1)
+ {
+ snmp_log (LOG_ERR, "stime error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /* delete temporary storage */
+ break;
+
+ case MODE_SET_UNDO:
+ /* use stored time in seconds to undo system time */
+ if (oldtime == 0)
+ {
+ snmp_log(LOG_ERR, "cannot retrieve undo time\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ else
+ {
+ ret = stime (&oldtime);
+ oldtime = 0;
+ if (ret != 0)
+ {
+ snmp_log(LOG_ERR, "stime error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ }
+
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminDateAndTime\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminReset(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ int reset = 0;
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &reset,
+ sizeof (reset));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_INTEGER);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error (reqinfo, requests, ret );
+ }
+ ret = netsnmp_check_vb_range (requests->requestvb, ADMIN_RESET,
+ ADMIN_RESET);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /* malloc "undo" storage buffer */
+ break;
+
+ case MODE_SET_FREE:
+ /* free resources allocated in RESERVE1 and/or
+ RESERVE2. Something failed somewhere, and the states
+ below won't be called. */
+ break;
+
+ case MODE_SET_ACTION:
+ /* perform the value change here */
+ libspid_system_reboot ();
+ break;
+
+ case MODE_SET_COMMIT:
+ /* delete temporary storage */
+ break;
+
+ case MODE_SET_UNDO:
+ /* UNDO and return to previous value for the object */
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminReset\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminResetCause(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ unsigned int ret;
+ unsigned int admin_reset_cause = ADMIN_RESET_NONE;
+ char sys_reset_cause[SPC300_RESET_CAUSE_STR_MAX_LEN];
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+
+ ret = libspid_config_read_item (
+ LIBSPID_WEB_RESET_INFO_PATH,
+ LIBSPID_WEB_RESET_INFO_LABEL_RESET_BY_WEB,
+ sys_reset_cause, LIBSPID_LINE_MAX_LEN);
+
+ if (LIBSPID_SUCCESS == ret &&
+ 0 != strstr (sys_reset_cause,
+ LIBSPID_WEB_RESET_INFO_RESET_BY_WEB_YES))
+ {
+ admin_reset_cause = ADMIN_RESET_WEB;
+ snmp_set_var_typed_value (requests->requestvb,
+ ASN_INTEGER,
+ (u_char *) &admin_reset_cause,
+ sizeof (admin_reset_cause));
+ break;
+ }
+
+ ret = libspid_system_get_reset_cause (sys_reset_cause,
+ sizeof (sys_reset_cause));
+ if (ret == LIBSPID_SUCCESS)
+ {
+ if (0 == strcmp (sys_reset_cause,
+ SPC300_RESET_CAUSE_STR_POWER_ON))
+ {
+ admin_reset_cause = ADMIN_RESET_POWER_UP;
+ }
+ else if ( 0 == strcmp (sys_reset_cause,
+ SPC300_RESET_CAUSE_STR_WATCHDOG))
+ {
+ admin_reset_cause = ADMIN_RESET_WATCHDOG;
+ }
+ else if (0 == strcmp (sys_reset_cause,
+ SPC300_RESET_CAUSE_STR_SOFTWARE))
+ {
+ admin_reset_cause = ADMIN_RESET_COMMAND;
+ }
+ else if (0 == strcmp (sys_reset_cause,
+ SPC300_RESET_CAUSE_STR_EXTERNAL) ||
+ 0 == strcmp (sys_reset_cause,
+ SPC300_RESET_CAUSE_STR_VOLTAGE_DETECTOR))
+ {
+ admin_reset_cause = ADMIN_RESET_CRAFT;
+ }
+ else
+ {
+ admin_reset_cause = ADMIN_RESET_OTHER;
+ }
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &admin_reset_cause,
+ sizeof (admin_reset_cause));
+ break;
+
+ default:
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminResetCause\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminConfigurationSaving(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ int config_saving = 0;
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &config_saving,
+ sizeof (config_saving));
+ break;
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_INTEGER);
+ if (ret != SNMP_ERR_NOERROR) {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ ret = netsnmp_check_vb_range (requests->requestvb,
+ ADMIN_SAVE, ADMIN_SAVE);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /* malloc "undo" storage buffer */
+ break;
+
+ case MODE_SET_FREE:
+ /* free resources allocated in RESERVE1 and/or
+ RESERVE2. Something failed somewhere, and the states
+ below won't be called. */
+ break;
+
+ case MODE_SET_ACTION:
+ /* call function for saving system configuration files to flash */
+ admin_conf_save_result = ADMIN_CONF_RESULT_SAVING;
+ ret = libspid_system_save ();
+
+ /* set value of save result variable */
+ admin_conf_save_result = ret ?
+ ADMIN_CONF_RESULT_SAVE_FAILED :
+ ADMIN_CONF_RESULT_SAVE_SUC;
+ break;
+
+ case MODE_SET_COMMIT:
+ /* delete temporary storage */
+ break;
+
+ case MODE_SET_UNDO:
+ /* UNDO and return to previous value for the object */
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in "
+ "handle_eocCBATAdminConfigurationSaving\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminConfigurationResult(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ admin_conf_cbat_result_t config_result;
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ /* get value from save result variable */
+ config_result = admin_conf_save_result;
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &config_result,
+ sizeof (config_result));
+ break;
+
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in "
+ "handle_eocCBATAdminConfigurationResult\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup/eocCBATDevStatusGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup/eocCBATDevStatusGroup.h
new file mode 100644
index 0000000000..e021bd7868
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATDevStatusGroup/eocCBATDevStatusGroup.h
@@ -0,0 +1,23 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+ */
+#ifndef EOCCBATDEVSTATUSGROUP_H
+#define EOCCBATDEVSTATUSGROUP_H
+
+/* include common header */
+#include "EoCCommon.h"
+
+/* function declarations */
+void init_eocCBATDevStatusGroup(void);
+Netsnmp_Node_Handler handle_eocCBATAdminAlarmDetectionControl;
+Netsnmp_Node_Handler handle_eocCBATAdminStatus;
+Netsnmp_Node_Handler handle_eocCBATAdminInternalTemperature;
+Netsnmp_Node_Handler handle_eocCBATAdminTamperStatus;
+Netsnmp_Node_Handler handle_eocCBATAdminDateAndTime;
+Netsnmp_Node_Handler handle_eocCBATAdminReset;
+Netsnmp_Node_Handler handle_eocCBATAdminResetCause;
+Netsnmp_Node_Handler handle_eocCBATAdminConfigurationSaving;
+Netsnmp_Node_Handler handle_eocCBATAdminConfigurationResult;
+
+#endif /* EOCCBATDEVSTATUSGROUP_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup.h
new file mode 100644
index 0000000000..edd1b1fa76
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup.h
@@ -0,0 +1 @@
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup/eocCBATNetworkAttrGroup)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup/eocCBATNetworkAttrGroup.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup/eocCBATNetworkAttrGroup.c
new file mode 100644
index 0000000000..a8ea6dc673
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup/eocCBATNetworkAttrGroup.c
@@ -0,0 +1,1053 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37: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 "eocCBATNetworkAttrGroup.h"
+
+/** Initializes the eocCBATNetworkAttrGroup module */
+void
+init_eocCBATNetworkAttrGroup(void)
+{
+ static oid eocCBATAdminMACAddress_oid[] = { 1,3,6,1,4,1,17409,2,4,1,2,1 };
+ static oid eocCBATAdminIPMode_oid[] = { 1,3,6,1,4,1,17409,2,4,1,2,2 };
+ static oid eocCBATAdminIPAddress_oid[] = { 1,3,6,1,4,1,17409,2,4,1,2,3 };
+ static oid eocCBATAdminIPMask_oid[] = { 1,3,6,1,4,1,17409,2,4,1,2,4 };
+ static oid eocCBATAdminIPGateway_oid[] = { 1,3,6,1,4,1,17409,2,4,1,2,5 };
+ static oid eocCBATAdminVLANID_oid[] = { 1,3,6,1,4,1,17409,2,4,1,2,6 };
+
+ DEBUGMSGTL(("eocCBATNetworkAttrGroup", "Initializing\n"));
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminMACAddress", handle_eocCBATAdminMACAddress,
+ eocCBATAdminMACAddress_oid, OID_LENGTH(eocCBATAdminMACAddress_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminIPMode", handle_eocCBATAdminIPMode,
+ eocCBATAdminIPMode_oid, OID_LENGTH(eocCBATAdminIPMode_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminIPAddress", handle_eocCBATAdminIPAddress,
+ eocCBATAdminIPAddress_oid, OID_LENGTH(eocCBATAdminIPAddress_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminIPMask", handle_eocCBATAdminIPMask,
+ eocCBATAdminIPMask_oid, OID_LENGTH(eocCBATAdminIPMask_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminIPGateway", handle_eocCBATAdminIPGateway,
+ eocCBATAdminIPGateway_oid, OID_LENGTH(eocCBATAdminIPGateway_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminVLANID", handle_eocCBATAdminVLANID,
+ eocCBATAdminVLANID_oid, OID_LENGTH(eocCBATAdminVLANID_oid),
+ HANDLER_CAN_RWRITE
+ ));
+}
+
+int
+handle_eocCBATAdminMACAddress(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ char admin_mac_addr[LIBSPID_MAC_BIN_LEN];
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ /* read NVRAM contents */
+ ret = libspid_get_plc_address (admin_mac_addr, LIBSPID_MAC_BIN_LEN);
+ if (ret)
+ {
+ memset (admin_mac_addr, 0, LIBSPID_MAC_BIN_LEN);
+ }
+
+ DEBUGMSGTL (("ocCBATNetworkAttrGroup: handle_eocCBATAdminMACAddress",
+ "MAC address copied to admin MAC addr: "
+ "%x %x %x %x %x %x \n",
+ admin_mac_addr[0], admin_mac_addr[1],
+ admin_mac_addr[2], admin_mac_addr[3],
+ admin_mac_addr[4], admin_mac_addr[5]));
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ (u_char *) admin_mac_addr,
+ sizeof (admin_mac_addr));
+ break;
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminMACAddress\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+int
+handle_eocCBATAdminIPMode(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ admin_ip_mode_t ip_mode;
+ admin_ip_mode_t *ip_mode_save = NULL;
+ u_long value;
+ libspid_ip_t ip;
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ /* default IP mode set as static to permit walk requests */
+ ip_mode = ADMIN_IP_MODE_STATIC;
+ }
+ else if (ip.mode == LIBSPID_IP_MODE_DHCP)
+ {
+ ip_mode = ADMIN_IP_MODE_DHCP;
+ snmp_log (LOG_ERR,
+ "handle_eocCBATAdminIPMode ADMIN_IP_MODE_DHCP\n");
+ }
+ else
+ {
+ /* static mode is presumed as default */
+ ip_mode = ADMIN_IP_MODE_STATIC;
+ snmp_log (LOG_ERR,
+ "handle_eocCBATAdminIPMode ADMIN_IP_MODE_STATIC\n");
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &ip_mode,
+ sizeof (ip_mode));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_INTEGER);
+ if ( ret != SNMP_ERR_NOERROR )
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ /* check range of set value */
+ ret = netsnmp_check_vb_range (requests->requestvb,
+ ADMIN_IP_MODE_STATIC,
+ ADMIN_IP_MODE_DHCP);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /* malloc "undo" storage buffer */
+ /* get structure with current IP data */
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else if (ip.mode == LIBSPID_IP_MODE_DHCP)
+ {
+ ip_mode = ADMIN_IP_MODE_DHCP;
+ }
+ else
+ {
+ /* static mode is presumed as default */
+ ip_mode = ADMIN_IP_MODE_STATIC;
+ }
+
+ memdup ((u_char **) &ip_mode_save,
+ (u_char *) &ip_mode, sizeof (ip));
+
+ if ( NULL == ip_mode_save)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list (
+ "ipmode",
+ ip_mode_save,
+ free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /* free resources allocated in RESERVE1 and/or
+ RESERVE2. Something failed somewhere, and the states
+ below won't be called. */
+ break;
+
+ case MODE_SET_ACTION:
+ /* perform the value change here */
+ value = *(requests->requestvb->val.integer);
+ /* get structure with current IP data */
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ /* change IP mode to value given in SET request */
+ if (value == ADMIN_IP_MODE_DHCP)
+ {
+ ip.mode = LIBSPID_IP_MODE_DHCP;
+ snmp_log (LOG_ERR,
+ "libspid_network_set_ip LIBSPID_IP_MODE_DHCP\n");
+ }
+ else
+ {
+ ip.mode = LIBSPID_IP_MODE_STATIC;
+ snmp_log (LOG_ERR,
+ "libspid_network_set_ip LIBSPID_IP_MODE_STATIC\n");
+ }
+
+ /* store new IP data */
+ ret = libspid_network_set_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_set_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ break;
+ case MODE_SET_COMMIT:
+ /* delete temporary storage */
+ break;
+
+ case MODE_SET_UNDO:
+ /* UNDO and return to previous value for the object */
+
+ /* get structure with current IP data */
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ /* restore saved IP mode */
+ value = *((u_long *) netsnmp_request_get_list_data (requests,
+ "ipmode"));
+ if (value == ADMIN_IP_MODE_DHCP)
+ {
+ ip.mode = LIBSPID_IP_MODE_DHCP;
+ }
+ else
+ {
+ ip.mode = LIBSPID_IP_MODE_STATIC;
+ }
+
+ /* restore IP data */
+ ret = libspid_network_set_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_set_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests, SNMP_ERR_UNDOFAILED);
+ }
+
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminIPMode\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminIPAddress(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ char ip_addr[LIBSPID_IP_BIN_LEN];
+ char *ip_addr_save = NULL;
+ u_char *value;
+ libspid_ip_t ip;
+
+ memset (&ip, 0, sizeof (ip));
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ /* IP address string set to "0.0.0.0" to permit walk requests*/
+ strcpy (ip.address, "0.0.0.0");
+ }
+ else
+ {
+ /* convert IP address from string to array of bytes */
+ ret = libspid_ip_str_to_bin (ip.address, ip_addr);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ memset (ip_addr, 0, LIBSPID_IP_BIN_LEN);
+ }
+ }
+
+ DEBUGMSGTL (("eocCBATNetworkAttrGroup: "
+ "handle_eocCBATAdminIPAddress",
+ "GET IP address converted to bin: %d %d %d %d \n",
+ ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3]));
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_IPADDRESS,
+ (u_char *) ip_addr,
+ sizeof (ip_addr));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_IPADDRESS);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret );
+ }
+ break;
+ case MODE_SET_RESERVE2:
+ /* malloc "undo" storage buffer */
+ /* get structure with current IP data */
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ /* convert IP address from string to array of bytes */
+ ret = libspid_ip_str_to_bin (ip.address, ip_addr);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ memset (ip_addr, 0, LIBSPID_IP_BIN_LEN);
+ }
+
+ memdup ((u_char **) &ip_addr_save,
+ (u_char *) ip_addr,
+ sizeof (ip_addr));
+
+ if ( NULL == ip_addr_save)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list (
+ "adminipaddr",
+ ip_addr_save,
+ free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /* free resources allocated in RESERVE1 and/or
+ RESERVE2. Something failed somewhere, and the states
+ below won't be called. */
+ break;
+
+ case MODE_SET_ACTION:
+ /* perform the value change here */
+ /* get structure with current IP data */
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ value = requests->requestvb->val.string;
+ /* convert IP address given in SET request from array of bytes
+ * to string and change it in IP structure */
+ ret = libspid_ip_bin_to_str (value, ip.address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ DEBUGMSGTL (("eocCBATNetworkAttrGroup: "
+ "handle_eocCBATAdminIPAddress",
+ "SET IP address converted to string: %s \n",
+ ip.address));
+
+ /* store new IP data */
+ ret = libspid_network_set_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_set_ip error\n");
+ netsnmp_set_request_error ( reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /* delete temporary storage */
+ break;
+ case MODE_SET_UNDO:
+ /* UNDO and return to previous value for the object */
+ /* get structure with current IP data */
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ /* restore saved IP address */
+
+ value = (u_char *) netsnmp_request_get_list_data (
+ requests,
+ "adminipaddr");
+
+ /* convert IP address from array of bytes to string */
+ ret = libspid_ip_bin_to_str (value, ip.address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ /* restore IP data */
+ ret = libspid_network_set_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_set_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminIPAddress\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+int
+handle_eocCBATAdminIPMask(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ char ip_mask[LIBSPID_IP_BIN_LEN];
+ char *ip_mask_save = NULL;
+ u_char *value;
+ libspid_ip_t ip;
+ memset (&ip, 0, sizeof (ip));
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ /* IP mask string set to "0.0.0.0" to permit walk requests */
+ strcpy (ip.netmask, "0.0.0.0");
+ }
+ else
+ {
+ /* convert IP mask from string to array of bytes */
+ ret = libspid_ip_str_to_bin (ip.netmask, ip_mask);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ memset (ip_mask, 0, LIBSPID_IP_BIN_LEN);
+ }
+ }
+ DEBUGMSGTL (("eocCBATNetworkAttrGroup: handle_eocCBATAdminIPMask",
+ "GET IP mask converted to bin: %d %d %d %d \n",
+ ip_mask[0], ip_mask[1], ip_mask[2], ip_mask[3]));
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_IPADDRESS,
+ (u_char *) ip_mask,
+ sizeof (ip_mask));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_IPADDRESS);
+ if ( ret != SNMP_ERR_NOERROR )
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret );
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /* malloc "undo" storage buffer */
+ /* get structure with current IP data */
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ /* convert IP mask from string to array of bytes */
+ ret = libspid_ip_str_to_bin (ip.netmask, ip_mask);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ memset (ip_mask, 0, LIBSPID_IP_BIN_LEN);
+ }
+
+ memdup ((u_char **) &ip_mask_save, (u_char *) ip_mask,
+ sizeof (ip_mask));
+
+ if ( NULL == ip_mask_save)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ else {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list
+ ("ipmask", ip_mask_save,
+ free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /* free resources allocated in RESERVE1 and/or
+ * RESERVE2. Something failed somewhere, and the states
+ * below won't be called. */
+ break;
+
+ case MODE_SET_ACTION:
+ /* get structure with current IP data */
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ value = requests->requestvb->val.string;
+
+ /* convert IP mask given in SET request from array of bytes to
+ * string and change it in IP structure */
+ ret = libspid_ip_bin_to_str (value, ip.netmask);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+
+ DEBUGMSGTL (("eocCBATNetworkAttrGroup: handle_eocCBATAdminIPMask",
+ "SET IP mask converted to string: %s \n", ip.netmask));
+
+
+ /* store new IP data */
+ ret = libspid_network_set_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_set_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ break;
+
+ case MODE_SET_UNDO:
+ /*
+ * UNDO and return to previous value for the object
+ */
+ /* get structure with current IP data */
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ /* restore saved IP mask */
+ value =
+ (u_char *) netsnmp_request_get_list_data (requests,
+ "ipmask");
+
+ /* convert IP mask from array of bytes to string */
+ ret = libspid_ip_bin_to_str (value, ip.netmask);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+
+ /* restore IP data */
+ ret = libspid_network_set_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_set_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminIPMask\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminIPGateway(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ char ip_gateway[LIBSPID_IP_BIN_LEN];
+ char *ip_gateway_save = NULL;
+ u_char *value;
+ libspid_ip_t ip;
+
+
+ memset (&ip, 0, sizeof (ip));
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ /* IP gateway string set to "0.0.0.0" to permit walk requests */
+ strcpy (ip.gateway, "0.0.0.0");
+ }
+ else
+ {
+ /* convert IP gateway from string to array of bytes */
+ ret = libspid_ip_str_to_bin (ip.gateway, ip_gateway);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ memset (ip_gateway, 0, sizeof (ip_gateway));
+ }
+ }
+ DEBUGMSGTL (("eocCBATNetworkAttrGroup: handle_eocCBATAdminIPGateway",
+ "GET IP gateway converted to bin: %d %d %d %d \n",
+ ip_gateway[0], ip_gateway[1],
+ ip_gateway[2], ip_gateway[3]));
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_IPADDRESS,
+ (u_char *) ip_gateway,
+ sizeof (ip_gateway));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_IPADDRESS);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret );
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /*
+ * malloc "undo" storage buffer
+ */
+ /* get structure with current IP data */
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ /* convert IP gateway from string to array of bytes */
+ ret = libspid_ip_str_to_bin (ip.gateway, ip_gateway);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ memset (ip_gateway, 0, LIBSPID_IP_BIN_LEN);
+ }
+
+ memdup ((u_char **) &ip_gateway_save, (u_char *) ip_gateway,
+ sizeof (ip_gateway));
+
+ if (NULL == ip_gateway_save)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ else
+ {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list (
+ "ipgateway",
+ ip_gateway_save,
+ free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /*
+ * free resources allocated in RESERVE1 and/or
+ * RESERVE2. Something failed somewhere, and the states
+ * below won't be called.
+ */
+ break;
+
+ case MODE_SET_ACTION:
+ /*
+ * perform the value change here
+ */
+ /* get structure with current IP data */
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ value = requests->requestvb->val.string;
+
+ /* convert IP gateway given in SET request from array of bytes to
+ * string and change it in IP structure */
+ ret = libspid_ip_bin_to_str (value, ip.gateway);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ DEBUGMSGTL (("eocCBATNetworkAttrGroup: handle_eocCBATAdminIPGateway",
+ "SET IP gateway converted to string: %s \n", ip.gateway));
+
+
+ /* store new IP data */
+ ret = libspid_network_set_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_set_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ break;
+
+
+ case MODE_SET_COMMIT:
+ /*
+ * delete temporary storage
+ */
+ break;
+
+ case MODE_SET_UNDO:
+ /* UNDO and return to previous value for the object*/
+ /* get structure with current IP data */
+ ret = libspid_network_get_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ /* restore saved IP gateway */
+ value = (u_char *) netsnmp_request_get_list_data (
+ requests,
+ "ipgateway");
+
+ /* convert IP gateway from array of bytes to string */
+ ret = libspid_ip_bin_to_str (value, ip.gateway);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+
+ /* restore IP data */
+ ret = libspid_network_set_ip (DEFAULT_SNMP_BRIDGE_IF_NAME, &ip);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_network_set_ip error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminIPGateway\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminVLANID(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+
+ unsigned int *vlan_id_save = NULL;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ unsigned int vlan_id;
+
+ int value;
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ /* read buffer for EMS IP address from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_VLAN_ADMIN_ID,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* VLAN ID set to 0 to permit walk requests */
+ vlan_id = 0;
+ }
+ else
+ {
+ /* parse VLAN ID from buffer */
+ if (1 != sscanf (buffer, "%d", &value))
+ vlan_id = 0;
+ else if ((0 <= value) && (EOCCBATADMIN_VLANID_MAX >= value))
+ vlan_id = value;
+ else
+ vlan_id = 0;
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &vlan_id , sizeof (vlan_id));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_INTEGER);
+ if ( ret != SNMP_ERR_NOERROR )
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret );
+ }
+ vlan_id = *requests->requestvb->val.integer;
+ if (vlan_id < 0 || vlan_id > EOCCBATADMIN_VLANID_MAX)
+ {
+ netsnmp_set_request_error (reqinfo, requests, SNMP_ERR_WRONGVALUE);
+ }
+
+ break;
+
+ case MODE_SET_RESERVE2:
+ /* malloc "undo" storage buffer */
+ ret = libspid_config_read_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_VLAN_ADMIN_ID,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ break;
+ }
+ /* parse VLAN ID from buffer */
+ if (1 != sscanf (buffer, "%d", &value))
+ vlan_id = 0;
+ else if ((0 <= value) && (EOCCBATADMIN_VLANID_MAX >= value))
+ vlan_id = value;
+ else
+ vlan_id = 0;
+
+ memdup ((u_char **) &vlan_id_save,
+ (u_char *) &vlan_id, sizeof (vlan_id));
+
+
+ if ( NULL == vlan_id_save)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list (
+ "vlan_id",
+ vlan_id_save,
+ free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /* free resources allocated in RESERVE1 and/or
+ RESERVE2. Something failed somewhere, and the states
+ below won't be called. */
+ break;
+
+ case MODE_SET_ACTION:
+ /* perform the value change here */
+ vlan_id = *requests->requestvb->val.integer;
+ sprintf (buffer, "%d", vlan_id);
+
+ ret = libspid_config_write_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_VLAN_ADMIN_ID,
+ buffer);
+ if ( LIBSPID_SUCCESS != ret)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /* delete temporary storage */
+ break;
+
+ case MODE_SET_UNDO:
+ /* UNDO and return to previous value for the object */
+ value =
+ *((u_long *) netsnmp_request_get_list_data
+ (requests, "vlan_id"));
+
+ sprintf (buffer, "%d", value);
+
+ /* restore previous value in config file */
+ ret = libspid_config_write_item (
+ LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_VLAN_ADMIN_ID,
+ buffer);
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ break;
+ }
+
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminVLANID\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup/eocCBATNetworkAttrGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup/eocCBATNetworkAttrGroup.h
new file mode 100644
index 0000000000..7a33ac030d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATNetworkAttrGroup/eocCBATNetworkAttrGroup.h
@@ -0,0 +1,19 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+ */
+#ifndef EOCCBATNETWORKATTRGROUP_H
+#define EOCCBATNETWORKATTRGROUP_H
+/* include common header */
+#include "EoCCommon.h"
+
+/* function declarations */
+void init_eocCBATNetworkAttrGroup(void);
+Netsnmp_Node_Handler handle_eocCBATAdminMACAddress;
+Netsnmp_Node_Handler handle_eocCBATAdminIPMode;
+Netsnmp_Node_Handler handle_eocCBATAdminIPAddress;
+Netsnmp_Node_Handler handle_eocCBATAdminIPMask;
+Netsnmp_Node_Handler handle_eocCBATAdminIPGateway;
+Netsnmp_Node_Handler handle_eocCBATAdminVLANID;
+
+#endif /* EOCCBATNETWORKATTRGROUP_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup.h
new file mode 100644
index 0000000000..e8dce27374
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup.h
@@ -0,0 +1 @@
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup/eocCBATOtherAdminGroup)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup/eocCBATOtherAdminGroup.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup/eocCBATOtherAdminGroup.c
new file mode 100644
index 0000000000..c9a3ae95d2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup/eocCBATOtherAdminGroup.c
@@ -0,0 +1,392 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37: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 "eocCBATOtherAdminGroup.h"
+
+#include <stdio.h>
+#include <errno.h>
+
+/** Initializes the eocCBATOtherAdminGroup module */
+void
+init_eocCBATOtherAdminGroup(void)
+{
+ static oid eocCBATAdminLinkTopoChange_oid[] = { 1,3,6,1,4,1,17409,2,4,1,5,1 };
+ static oid eocCBATAdminAppropriativeOID_oid[] = { 1,3,6,1,4,1,17409,2,4,1,5,2 };
+ static oid eocCBATCardUpLinkBroadcastFrameSendManner_oid[] = { 1,3,6,1,4,1,17409,2,4,1,5,3 };
+
+
+ /* initialize default value of eocCBATCardUpLinkBroadcastFrameSendManner */
+ libspid_config_write_item(LIBSPID_AUTODISCOVERY_INFO_PATH,
+ LIBSPID_AUTODISCOVERY_INFO_LABEL_TIME_INTERVAL,
+ LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T1);
+
+ DEBUGMSGTL(("eocCBATOtherAdminGroup", "Initializing\n"));
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminLinkTopoChange", handle_eocCBATAdminLinkTopoChange,
+ eocCBATAdminLinkTopoChange_oid, OID_LENGTH(eocCBATAdminLinkTopoChange_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminAppropriativeOID", handle_eocCBATAdminAppropriativeOID,
+ eocCBATAdminAppropriativeOID_oid, OID_LENGTH(eocCBATAdminAppropriativeOID_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATCardUpLinkBroadcastFrameSendManner", handle_eocCBATCardUpLinkBroadcastFrameSendManner,
+ eocCBATCardUpLinkBroadcastFrameSendManner_oid, OID_LENGTH(eocCBATCardUpLinkBroadcastFrameSendManner_oid),
+ HANDLER_CAN_RWRITE
+ ));
+}
+
+int
+handle_eocCBATAdminLinkTopoChange(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ admin_link_topo_change_t topo_change = ADMIN_LINK_TOPO_NO_CHANGE;
+ libspid_error_t ret;
+
+ /* list of MAC addresses currently online */
+ mac_t mac_address_list_new[LIBSPID_ONLINE_INFO_LINE_MAX_NB];
+ /* list of MAC addresses previously online */
+ static mac_t mac_address_list_old[LIBSPID_ONLINE_INFO_LINE_MAX_NB];
+
+ /* number of currently online stations */
+ int mac_count_new = 0;
+ /* number of previously online stations */
+ static int mac_count_old;
+ int i, j;
+ int found = 0;
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ /* get current network topology state */
+ ret = libspid_eoc_get_topo (mac_address_list_new[0], &mac_count_new);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_get_topo error\n");
+ /* state set to 'no change' in order to permit WALK requests */
+ topo_change = ADMIN_LINK_TOPO_NO_CHANGE;
+ }
+ else
+ {
+ /* check for change in number of online stations */
+ if (mac_count_new != mac_count_old)
+ {
+ topo_change = ADMIN_LINK_TOPO_CHANGE;
+ }
+ else
+ {
+ topo_change = ADMIN_LINK_TOPO_NO_CHANGE;
+ /* check for difference in previous and current MAC address list */
+ for (i = 0; i < mac_count_new; i++)
+ {
+ found = 0;
+ for (j = 0; j < mac_count_new; j++)
+ {
+ if (!memcmp (mac_address_list_new[i],
+ mac_address_list_old[j],
+ sizeof (mac_t)))
+ {
+ found = 1;
+ break;
+ }
+ }
+
+ if (0 == found)
+ {
+ topo_change = ADMIN_LINK_TOPO_CHANGE;
+ break;
+ }
+ }
+ }
+ }
+
+ /* store current values for next GET request */
+ mac_count_old = mac_count_new;
+ memcpy (mac_address_list_old, mac_address_list_new,
+ sizeof (mac_address_list_new));
+
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &topo_change,
+ sizeof (topo_change));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ break;
+
+ case MODE_SET_RESERVE2:
+ /* malloc "undo" storage buffer */
+ break;
+
+ case MODE_SET_FREE:
+ /* free resources allocated in RESERVE1 and/or
+ RESERVE2. Something failed somewhere, and the states
+ below won't be called. */
+ break;
+
+ case MODE_SET_ACTION:
+ /* perform the value change here */
+ netsnmp_set_request_error (reqinfo, requests, SNMP_ERR_NOTWRITABLE);
+ break;
+
+ case MODE_SET_COMMIT:
+ break;
+
+ case MODE_SET_UNDO:
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminLinkTopoChange\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATAdminAppropriativeOID(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ oid app_oid[MAX_OID_LEN];
+ size_t app_oid_len;
+ u_char *value;
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ memset (app_oid, 0, sizeof (app_oid));
+ app_oid_len = MAX_OID_LEN;
+
+ /* parse Appropriative OID from hard-coded string value */
+ if (!snmp_parse_oid (ADMIN_APPROPRIATIVE_OID, app_oid, &app_oid_len))
+ {
+ snmp_log (LOG_ERR,
+ "error parsing OID from %s\n",
+ ADMIN_APPROPRIATIVE_OID);
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_OBJECT_ID,
+ (u_char *) app_oid,
+ app_oid_len * sizeof (oid));
+ break;
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCBATAdminAppropriativeOID\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCBATCardUpLinkBroadcastFrameSendManner(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ int interval = 0;
+ int* interval_save = NULL;
+ int value;
+
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+
+ ret = libspid_config_read_item (
+ LIBSPID_AUTODISCOVERY_INFO_PATH,
+ LIBSPID_AUTODISCOVERY_INFO_LABEL_TIME_INTERVAL,
+ buffer, sizeof (buffer));
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,"eocCBATCardUpLinkBroadcastFrameSendManner: "
+ "libspid_config_read_item error: %d\n", ret);
+ /*interval set to default value T1 to permit walk requests */
+ interval = atoi(LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T1);
+ break;
+ }
+
+ /* parse interval from buffer */
+ if (1 != sscanf(buffer, "%d", &value))
+ interval = atoi(LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T1);
+ else if (value == atoi(LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T2))
+ interval = value;
+ else
+ interval = atoi(LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T1);
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &interval,
+ sizeof (interval));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_INTEGER);
+ if ( ret != SNMP_ERR_NOERROR )
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret );
+ }
+ /* check range of set value */
+ ret = netsnmp_check_vb_range (
+ requests->requestvb,
+ atoi(LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T1),
+ atoi(LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T2));
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+
+ break;
+
+ case MODE_SET_RESERVE2:
+ ret = libspid_config_read_item (
+ LIBSPID_AUTODISCOVERY_INFO_PATH,
+ LIBSPID_AUTODISCOVERY_INFO_LABEL_TIME_INTERVAL,
+ buffer, sizeof (buffer));
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR,"eocCBATCardUpLinkBroadcastFrameSendManner: "
+ "libspid_config_read_item error: %d\n", ret);
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ break;
+ }
+
+ /* parse interval from buffer */
+ if (1 != sscanf(buffer, "%d", &value))
+ interval = atoi(LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T1);
+ else if (value == atoi(LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T2))
+ interval = value;
+ else
+ interval = atoi(LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T1);
+
+
+ memdup ((u_char **) &interval_save, (u_char *) &interval,
+ sizeof (interval));
+
+
+ if ( NULL == interval_save)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ else {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list (
+ "interval",
+ interval_save,
+ free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ break;
+
+ case MODE_SET_ACTION:
+ interval = *(requests->requestvb->val.integer);
+ if (interval ==
+ atoi (LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T2))
+ {
+ libspid_config_write_item (
+ LIBSPID_AUTODISCOVERY_INFO_PATH,
+ LIBSPID_AUTODISCOVERY_INFO_LABEL_TIME_INTERVAL,
+ LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T2);
+ }
+ else
+ {
+ libspid_config_write_item (
+ LIBSPID_AUTODISCOVERY_INFO_PATH,
+ LIBSPID_AUTODISCOVERY_INFO_LABEL_TIME_INTERVAL,
+ LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T1);
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ break;
+
+ case MODE_SET_UNDO:
+
+ interval = *((int *)netsnmp_request_get_list_data (
+ requests,
+ "interval"));
+ if (interval ==
+ atoi (LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T2))
+ {
+ libspid_config_write_item (
+ LIBSPID_AUTODISCOVERY_INFO_PATH,
+ LIBSPID_AUTODISCOVERY_INFO_LABEL_TIME_INTERVAL,
+ LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T2);
+ }
+ else
+ {
+ libspid_config_write_item (
+ LIBSPID_AUTODISCOVERY_INFO_PATH,
+ LIBSPID_AUTODISCOVERY_INFO_LABEL_TIME_INTERVAL,
+ LIBSPID_AUTODISCOVERY_INFO_TIME_INTERVAL_T1);
+ }
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in "
+ "handle_eocCBATCardUpLinkBroadcastFrameSendManner\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup/eocCBATOtherAdminGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup/eocCBATOtherAdminGroup.h
new file mode 100644
index 0000000000..b3992f8f6d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATOtherAdminGroup/eocCBATOtherAdminGroup.h
@@ -0,0 +1,16 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+ */
+#ifndef EOCCBATOTHERADMINGROUP_H
+#define EOCCBATOTHERADMINGROUP_H
+
+/* include common header */
+#include "EoCCommon.h"
+/* function declarations */
+void init_eocCBATOtherAdminGroup(void);
+Netsnmp_Node_Handler handle_eocCBATAdminLinkTopoChange;
+Netsnmp_Node_Handler handle_eocCBATAdminAppropriativeOID;
+Netsnmp_Node_Handler handle_eocCBATCardUpLinkBroadcastFrameSendManner;
+
+#endif /* EOCCBATOTHERADMINGROUP_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup.h
new file mode 100644
index 0000000000..22e5a36672
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup.h
@@ -0,0 +1,2 @@
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable)
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATSNMPSettingGroup)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable.h
new file mode 100644
index 0000000000..30b417dea4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_get)
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_interface)
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable)
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_set)
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_access)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunity.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunity.m2d
new file mode 100644
index 0000000000..975460706a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunity.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCBATAdminSNMPCommunity
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunityIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunityIndex.m2d
new file mode 100644
index 0000000000..81ac78f609
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunityIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATAdminSNMPCommunityIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunityPermission.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunityPermission.m2d
new file mode 100644
index 0000000000..92cf40074b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunityPermission.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATAdminSNMPCommunityPermission
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunityRowStatus.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunityRowStatus.m2d
new file mode 100644
index 0000000000..a42b19ff13
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/node-eocCBATAdminSNMPCommunityRowStatus.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATAdminSNMPCommunityRowStatus
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/table-eocCBATAdminSNMPCommunityTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/table-eocCBATAdminSNMPCommunityTable.m2d
new file mode 100644
index 0000000000..04d74b2009
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/defaults/table-eocCBATAdminSNMPCommunityTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocCBATAdminSNMPCommunityTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 1@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 1@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable-README-FIRST.txt
new file mode 100644
index 0000000000..7da575faf1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocCBATAdminSNMPCommunityTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocCBATAdminSNMPCommunityTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocCBATAdminSNMPCommunityTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocCBATAdminSNMPCommunityTable_Makefile
+
+
+ File : eocCBATAdminSNMPCommunityTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocCBATAdminSNMPCommunityTable-README-eocCBATAdminSNMPCommunityTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocCBATAdminSNMPCommunityTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocCBATAdminSNMPCommunityTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocCBATAdminSNMPCommunityTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocCBATAdminSNMPCommunityTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable-README-eocCBATAdminSNMPCommunityTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable-README-eocCBATAdminSNMPCommunityTable.txt
new file mode 100644
index 0000000000..20b4fcd19c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable-README-eocCBATAdminSNMPCommunityTable.txt
@@ -0,0 +1,692 @@
+************************************************************************
+eocCBATAdminSNMPCommunityTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocCBATAdminSNMPCommunityTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocCBATAdminSNMPCommunityTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocCBATAdminSNMPCommunityTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCBATAdminSNMPCommunityTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCBATAdminSNMPCommunityTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCBATAdminSNMPCommunityTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCBATAdminSNMPCommunityTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocCBATAdminSNMPCommunityTable_allocate_data
+ eocCBATAdminSNMPCommunityTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx_init
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocCBATAdminSNMPCommunityTable table
+ ------------------------------------------------------------
+ The index(es) for the eocCBATAdminSNMPCommunityTable table are:
+
+ eocCBATAdminSNMPCommunityIndex:
+ Syntax: INTEGER32
+ DataType: INTEGER32
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocCBATAdminSNMPCommunityTable_data.
+
+
+************************************************************************
+eocCBATAdminSNMPCommunityTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocCBATAdminSNMPCommunityTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocCBATAdminSNMPCommunityTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocCBATAdminSNMPCommunityTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocCBATAdminSNMPCommunityTable_indexes_set
+ WHERE: eocCBATAdminSNMPCommunityTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocCBATAdminSNMPCommunityTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocCBATAdminSNMPCommunityTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATAdminSNMPCommunity_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATAdminSNMPCommunityPermission_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATAdminSNMPCommunityRowStatus_get
+
+
+
+File: eocCBATAdminSNMPCommunityTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocCBATAdminSNMPCommunityTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table supports ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+ To support row creation, the index component of an incoming set request must
+ be validated. A funciton is generated for each individual index component,
+ and another for validating all the index components together.
+
+
+ Validate index component
+ ------------------------
+ TODO : validate the specified index component
+ FUNC : eocCBATAdminSNMPCommunityIndex_check_index
+
+
+ Validate index
+ --------------
+ TODO : check that all index components are valid
+ FUNC : eocCBATAdminSNMPCommunityTable_validate_index
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocCBATAdminSNMPCommunityTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATAdminSNMPCommunity_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATAdminSNMPCommunity_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATAdminSNMPCommunity_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATAdminSNMPCommunity_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATAdminSNMPCommunityPermission_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATAdminSNMPCommunityPermission_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATAdminSNMPCommunityPermission_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATAdminSNMPCommunityPermission_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATAdminSNMPCommunityRowStatus_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATAdminSNMPCommunityRowStatus_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATAdminSNMPCommunityRowStatus_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATAdminSNMPCommunityRowStatus_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocCBATAdminSNMPCommunityTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocCBATAdminSNMPCommunityTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocCBATAdminSNMPCommunityTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocCBATAdminSNMPCommunityTable table.
+
+To watch the flow of the eocCBATAdminSNMPCommunityTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocCBATAdminSNMPCommunityTable
+ verbose:eocCBATAdminSNMPCommunityTable
+ internal:eocCBATAdminSNMPCommunityTable
+
+e.g.
+ snmpd -f -Le -DeocCBATAdminSNMPCommunityTable,verbose:eocCBATAdminSNMPCommunityTable,internal:eocCBATAdminSNMPCommunityTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATAdminSNMPCommunityTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityTable is subid 4 of eocCBATSNMPSettingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4, length: 12
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityEntry.eocCBATAdminSNMPCommunityIndex
+ * eocCBATAdminSNMPCommunityIndex is subid 1 of eocCBATAdminSNMPCommunityEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4.1.1
+ * Description:
+SNMP¹²Í¬Ìå¹ÜÀí±íË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ *
+ *
+ *
+ * NOTE: NODE eocCBATAdminSNMPCommunityIndex IS NOT ACCESSIBLE
+ *
+ *
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityEntry.eocCBATAdminSNMPCommunity
+ * eocCBATAdminSNMPCommunity is subid 2 of eocCBATAdminSNMPCommunityEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4.1.2
+ * Description:
+SNMP¹²Í¬Ìå´®£¬×Ϊ16λ×Ö·û´®¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 1 - 16;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 16)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityEntry.eocCBATAdminSNMPCommunityPermission
+ * eocCBATAdminSNMPCommunityPermission is subid 3 of eocCBATAdminSNMPCommunityEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4.1.3
+ * Description:
+SNMP¹²Í¬ÌåȨÏÞ£¬Ö»¶ÁȨÏÞΪro(1)£¬¶ÁдȨÏÞΪrw(2)
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: rw(1), ro(2), wo(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityEntry.eocCBATAdminSNMPCommunityRowStatus
+ * eocCBATAdminSNMPCommunityRowStatus is subid 4 of eocCBATAdminSNMPCommunityEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4.1.4
+ * Description:
+ÐÐ״̬¡£Ö»Ê¹ÓÃÁ½Ïî
+ 4-createAndGo
+ 6-distory
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable.c
new file mode 100644
index 0000000000..941eed5437
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable.c
@@ -0,0 +1,273 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocCBATAdminSNMPCommunityTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATAdminSNMPCommunityTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocCBATAdminSNMPCommunityTable_interface.h"
+
+oid eocCBATAdminSNMPCommunityTable_oid[] = { EOCCBATADMINSNMPCOMMUNITYTABLE_OID };
+int eocCBATAdminSNMPCommunityTable_oid_size = OID_LENGTH(eocCBATAdminSNMPCommunityTable_oid);
+
+ eocCBATAdminSNMPCommunityTable_registration eocCBATAdminSNMPCommunityTable_user_context;
+
+void initialize_table_eocCBATAdminSNMPCommunityTable(void);
+void shutdown_table_eocCBATAdminSNMPCommunityTable(void);
+
+/* declaration of handle for scalar added to table */
+int
+handle_eocCBATAdminSNMPCommunityTableNextIndex(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests);
+
+/**
+ * Initializes the eocCBATAdminSNMPCommunityTable module
+ */
+void
+init_eocCBATAdminSNMPCommunityTable(void)
+{
+ DEBUGMSGTL (("verbose:eocCBATAdminSNMPCommunityTable:"
+ "init_eocCBATAdminSNMPCommunityTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocCBATAdminSNMPCommunityTable one-time
+ * module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init ("eocCBATAdminSNMPCommunityTable"))
+ initialize_table_eocCBATAdminSNMPCommunityTable ();
+
+ /*
+ * register scalar for eocCBATAdminSNMPCommunityTableNextIndex
+ */
+ static oid eocCBATAdminSNMPCommunityTableNextIndex_oid[] =
+ { EOCCBATADMINSNMPCOMMUNITYTABLENEXTINDEX_OID };
+
+ netsnmp_register_scalar (
+ netsnmp_create_handler_registration (
+ "eocCBATAdminSNMPCommunityTableNextIndex",
+ handle_eocCBATAdminSNMPCommunityTableNextIndex,
+ eocCBATAdminSNMPCommunityTableNextIndex_oid,
+ OID_LENGTH(eocCBATAdminSNMPCommunityTableNextIndex_oid),
+ HANDLER_CAN_RONLY
+ ));
+}
+
+/**
+ * Shut-down the eocCBATAdminSNMPCommunityTable module (agent is exiting)
+ */
+void
+shutdown_eocCBATAdminSNMPCommunityTable(void)
+{
+ if (should_init("eocCBATAdminSNMPCommunityTable"))
+ shutdown_table_eocCBATAdminSNMPCommunityTable();
+
+}
+
+/**
+ * Initialize the table eocCBATAdminSNMPCommunityTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocCBATAdminSNMPCommunityTable(void)
+{
+ eocCBATAdminSNMPCommunityTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:initialize_table_eocCBATAdminSNMPCommunityTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocCBATAdminSNMPCommunityTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocCBATAdminSNMPCommunityTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocCBATAdminSNMPCommunityTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocCBATAdminSNMPCommunityTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocCBATAdminSNMPCommunityTable */
+
+/**
+ * Shutdown the table eocCBATAdminSNMPCommunityTable
+ */
+void
+shutdown_table_eocCBATAdminSNMPCommunityTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocCBATAdminSNMPCommunityTable_shutdown_interface(&eocCBATAdminSNMPCommunityTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocCBATAdminSNMPCommunityTable_rowreq_ctx_init(eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocCBATAdminSNMPCommunityTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocCBATAdminSNMPCommunityTable_rowreq_ctx_cleanup(eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocCBATAdminSNMPCommunityTable rowreq cleanup.
+ */
+} /* eocCBATAdminSNMPCommunityTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocCBATAdminSNMPCommunityTable_pre_request(eocCBATAdminSNMPCommunityTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocCBATAdminSNMPCommunityTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocCBATAdminSNMPCommunityTable_post_request(eocCBATAdminSNMPCommunityTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocCBATAdminSNMPCommunityTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocCBATAdminSNMPCommunityTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocCBATAdminSNMPCommunityTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityTable_post_request */
+
+/* implementation of handle for scalar added to table */
+int
+handle_eocCBATAdminSNMPCommunityTableNextIndex(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+ int next_index;
+
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ next_index = eocCBATAdminSNMPCommunityTable_Nextindex_get ();
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) & next_index,
+ sizeof (next_index));
+ break;
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in "
+ "handle_eocCBATAdminSNMPCommunityTableNextIndex\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable.h
new file mode 100644
index 0000000000..197f5e5557
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable.h
@@ -0,0 +1,219 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATADMINSNMPCOMMUNITYTABLE_H
+#define EOCCBATADMINSNMPCOMMUNITYTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+/* other required module components */
+
+/* OID and column number definitions for eocCBATAdminSNMPCommunityTable */
+#include "eocCBATAdminSNMPCommunityTable_oids.h"
+
+/* enum definions */
+#include "eocCBATAdminSNMPCommunityTable_enums.h"
+
+/* include common header */
+#include "EoCCommon.h"
+
+
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocCBATAdminSNMPCommunityTable(void);
+void shutdown_eocCBATAdminSNMPCommunityTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATAdminSNMPCommunityTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityTable is subid 4 of eocCBATSNMPSettingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4, length: 12
+*/
+/* *********************************************************************
+ * 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 eocCBATAdminSNMPCommunityTable registration context.
+ */
+typedef netsnmp_data_list eocCBATAdminSNMPCommunityTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocCBATAdminSNMPCommunityTable data context structure.
+ * This structure is used to represent the data for eocCBATAdminSNMPCommunityTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocCBATAdminSNMPCommunityTable.
+ */
+typedef struct eocCBATAdminSNMPCommunityTable_data_s {
+
+ /* fields added to use for container iteration */
+ netsnmp_index oid_index; /* MUST BE FIRST!! for container use */
+ oid st_index; /* arbitrary index */
+
+ /* field added for community index */
+ long eocCBATAdminSNMPCommunityIndex;
+
+
+
+ /*
+ * eocCBATAdminSNMPCommunity(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h
+ */
+ char eocCBATAdminSNMPCommunity[EOCCBATADMIN_COMMUNITY_MAX_LEN];
+ size_t eocCBATAdminSNMPCommunity_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCBATAdminSNMPCommunityPermission(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCBATAdminSNMPCommunityPermission;
+
+ /*
+ * eocCBATAdminSNMPCommunityRowStatus(4)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCBATAdminSNMPCommunityRowStatus;
+
+} eocCBATAdminSNMPCommunityTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocCBATAdminSNMPCommunityTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocCBATAdminSNMPCommunityTable_data eocCBATAdminSNMPCommunityTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocCBATAdminSNMPCommunityTable mib index.
+ * This structure is used to represent the index for eocCBATAdminSNMPCommunityTable.
+ */
+typedef struct eocCBATAdminSNMPCommunityTable_mib_index_s {
+
+ /*
+ * eocCBATAdminSNMPCommunityIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ long eocCBATAdminSNMPCommunityIndex;
+
+
+} eocCBATAdminSNMPCommunityTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocCBATAdminSNMPCommunityTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocCBATAdminSNMPCommunityTable_IDX_LEN 1
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocCBATAdminSNMPCommunityTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocCBATAdminSNMPCommunityTable_rowreq_ctx pointer.
+ */
+typedef struct eocCBATAdminSNMPCommunityTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocCBATAdminSNMPCommunityTable_IDX_LEN];
+
+ eocCBATAdminSNMPCommunityTable_mib_index tbl_idx;
+
+ eocCBATAdminSNMPCommunityTable_data * data;
+ unsigned int column_exists_flags; /* flags for existence */
+ eocCBATAdminSNMPCommunityTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocCBATAdminSNMPCommunityTable rowreq context.
+ */
+ u_char undo_ref_count;
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocCBATAdminSNMPCommunityTable_data_list;
+
+} eocCBATAdminSNMPCommunityTable_rowreq_ctx;
+
+typedef struct eocCBATAdminSNMPCommunityTable_ref_rowreq_ctx_s {
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx;
+} eocCBATAdminSNMPCommunityTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocCBATAdminSNMPCommunityTable_pre_request(eocCBATAdminSNMPCommunityTable_registration * user_context);
+ int eocCBATAdminSNMPCommunityTable_post_request(eocCBATAdminSNMPCommunityTable_registration * user_context,
+ int rc);
+
+ int eocCBATAdminSNMPCommunityTable_rowreq_ctx_init(eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocCBATAdminSNMPCommunityTable_rowreq_ctx_cleanup(eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx);
+
+ int eocCBATAdminSNMPCommunityTable_commit(eocCBATAdminSNMPCommunityTable_rowreq_ctx * rowreq_ctx);
+
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *
+ eocCBATAdminSNMPCommunityTable_row_find_by_mib_index(eocCBATAdminSNMPCommunityTable_mib_index *mib_idx);
+
+extern oid eocCBATAdminSNMPCommunityTable_oid[];
+extern int eocCBATAdminSNMPCommunityTable_oid_size;
+
+extern int adding_snmpcommunity;
+extern int curr_comm_num;
+
+
+
+#include "eocCBATAdminSNMPCommunityTable_interface.h"
+#include "eocCBATAdminSNMPCommunityTable_data_access.h"
+#include "eocCBATAdminSNMPCommunityTable_data_get.h"
+#include "eocCBATAdminSNMPCommunityTable_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 /* EOCCBATADMINSNMPCOMMUNITYTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_access.c
new file mode 100644
index 0000000000..61c6bea809
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_access.c
@@ -0,0 +1,764 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATAdminSNMPCommunityTable.h"
+
+
+#include "eocCBATAdminSNMPCommunityTable_data_access.h"
+
+
+int adding_snmpcommunity;
+int curr_comm_num = 0;
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATAdminSNMPCommunityTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityTable is subid 4 of eocCBATSNMPSettingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4, length: 12
+*/
+
+/**
+ * initialization for eocCBATAdminSNMPCommunityTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocCBATAdminSNMPCommunityTable_reg
+ * Pointer to eocCBATAdminSNMPCommunityTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocCBATAdminSNMPCommunityTable_init_data(eocCBATAdminSNMPCommunityTable_registration * eocCBATAdminSNMPCommunityTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocCBATAdminSNMPCommunityTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocCBATAdminSNMPCommunityTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocCBATAdminSNMPCommunityTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocCBATAdminSNMPCommunityTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocCBATAdminSNMPCommunityTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCCBATADMINSNMPCOMMUNITYTABLE_CACHE_TIMEOUT; /* seconds */
+
+ /* initialize row adding indication */
+ adding_snmpcommunity = 0;
+} /* eocCBATAdminSNMPCommunityTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocCBATAdminSNMPCommunityTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocCBATAdminSNMPCommunityTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocCBATAdminSNMPCommunityTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocCBATAdminSNMPCommunityTable_container_shutdown */
+
+
+void
+_adminsnmpcommunity_update_entry (eocCBATAdminSNMPCommunityTable_data * lhs,
+ eocCBATAdminSNMPCommunityTable_data * rhs)
+{
+ if (lhs->eocCBATAdminSNMPCommunity_len !=
+ rhs->eocCBATAdminSNMPCommunity_len)
+ {
+ lhs->eocCBATAdminSNMPCommunity_len =
+ rhs->eocCBATAdminSNMPCommunity_len;
+ memcpy (lhs->eocCBATAdminSNMPCommunity,
+ rhs->eocCBATAdminSNMPCommunity,
+ rhs->eocCBATAdminSNMPCommunity_len);
+ }
+ else if (memcmp
+ (lhs->eocCBATAdminSNMPCommunity, rhs->eocCBATAdminSNMPCommunity,
+ rhs->eocCBATAdminSNMPCommunity_len) != 0)
+ {
+ memcpy (lhs->eocCBATAdminSNMPCommunity,
+ rhs->eocCBATAdminSNMPCommunity,
+ rhs->eocCBATAdminSNMPCommunity_len);
+ }
+
+ if (lhs->eocCBATAdminSNMPCommunityPermission !=
+ rhs->eocCBATAdminSNMPCommunityPermission)
+ {
+ lhs->eocCBATAdminSNMPCommunityPermission =
+ rhs->eocCBATAdminSNMPCommunityPermission;
+ }
+}
+
+int
+_adminsnmpcommunity_container_load (netsnmp_container * container)
+{
+ int i, j;
+ int tmp;
+
+ /* initial row status is set to active by default */
+ int init_row_status = ROWSTATUS_ACTIVE;
+ int rc = MFD_SUCCESS;
+
+
+ eocCBATAdminSNMPCommunityTable_data *entry;
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx;
+ int line_num_comm = LIBSPID_SNMPD_COMMUNITY_MAX_NB;
+ int line_num_sec = LIBSPID_SNMPD_COMMUNITY_MAX_NB;
+ libspid_snmp_comm_t comm_entry[LIBSPID_SNMPD_COMMUNITY_MAX_NB];
+
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable:access",
+ "_adminsnmpcommunity_container_load called \n"));
+
+ if (NULL == container)
+ {
+ snmp_log (LOG_ERR, "no container specified/found for _eoccnu"
+ "_vlan_container_load\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_read_community_list (comm_entry, &line_num_comm))
+ {
+ snmp_log (LOG_ERR,
+ "eocCommunityTable_data_access.c:"
+ "eocCommunityTable_container_load read config error\n");
+ return SNMP_ERR_GENERR;
+ }
+
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_read_security_list (comm_entry, &line_num_sec))
+ {
+ snmp_log (LOG_ERR,
+ "eocCommunityTable_data_access.c:"
+ "eocCommunityTable_container_load read config error\n");
+ return SNMP_ERR_GENERR;
+ }
+
+ /*For some comm_names using a same sec , we will map it for every comm */
+ if (line_num_comm > line_num_sec)
+ {
+
+ for (i = line_num_sec; i < line_num_comm; i++)
+ {
+ for (j = 0; j < line_num_sec; j++)
+ {
+ if (strcmp (comm_entry[i].sec_name, comm_entry[j].sec_name)
+ == 0)
+ comm_entry[i].comm_permission =
+ comm_entry[j].comm_permission;
+ }
+
+ if (comm_entry[i].comm_permission == 0)
+ {
+ snmp_log (LOG_ERR,
+ "eocCommunityTable_data_access.c:"
+ "eocCommunityTable_container_load read permission "
+ "config error\n");
+ return SNMP_ERR_GENERR;
+ }
+
+ }
+ }
+ else if (line_num_comm < line_num_sec)
+ {
+ /*This case is terrible . the line_num_comm must bigger or same than line_num_sec */
+ snmp_log (LOG_ERR,
+ "eocCommunityTable_data_access.c-"
+ "eocCommunityTable_container_load read config error\n");
+ return SNMP_ERR_GENERR;
+ }
+
+ for (i = 0; i < line_num_comm; i++)
+ {
+ /*
+ * TODO:352:M: | |-> set indexes in new eocCBATAdminSNMPCommunityTable rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+
+ /* call interface function for allocating community table data */
+ if (NULL == (entry = eocCBATAdminSNMPCommunityTable_allocate_data ()))
+ {
+ snmp_log (LOG_ERR, "community entry allocation error\n");
+ return MFD_ERROR;
+ }
+
+
+ /* set row status to initial value */
+ entry->eocCBATAdminSNMPCommunityRowStatus = init_row_status;
+
+
+ entry->eocCBATAdminSNMPCommunityIndex = i;
+
+ /* parse community name from community entry */
+ if ((NULL == comm_entry[i].comm_name) || (!strcmp(comm_entry[i].comm_name, "")))
+ {
+ snmp_log(LOG_ERR, "empty community name field\n");
+ entry->eocCBATAdminSNMPCommunity[0] = '\0';
+ entry->eocCBATAdminSNMPCommunity_len = 0;
+ }
+ else
+ {
+ strncpy(entry->eocCBATAdminSNMPCommunity,
+ comm_entry[i].comm_name,
+ EOCCBATADMIN_COMMUNITY_MAX_LEN-1);
+ entry->eocCBATAdminSNMPCommunity[EOCCBATADMIN_COMMUNITY_MAX_LEN-1]
+ = '\0';
+ entry->eocCBATAdminSNMPCommunity_len
+ = strlen(comm_entry[i].comm_name);
+ }
+
+
+ if (ROWSTATUS_ACTIVE == entry->eocCBATAdminSNMPCommunityRowStatus)
+ {
+ /* for valid row, add comm name string to internal
+ * storage list (if not already present in there) */
+ tmp =
+ se_find_value_in_slist ("eoc_comm_list",
+ entry->eocCBATAdminSNMPCommunity);
+ if (tmp == SE_DNE)
+ {
+ se_add_pair_to_slist ("eoc_comm_list",
+ strdup (entry->
+ eocCBATAdminSNMPCommunity),
+ i + 1);
+ }
+ }
+
+ entry->eocCBATAdminSNMPCommunityPermission =
+ comm_entry[i].comm_permission;
+
+ /* set entry index for container comparison */
+ entry->st_index = i + 1;
+ /*
+ * add entry to container
+ */
+ CONTAINER_INSERT (container, entry);
+ }
+ curr_comm_num = i;
+ return rc;
+}
+
+/**
+ * check entry for update
+ */
+
+static void
+_adminsnmpcommunity_check_entry_for_updates
+ (eocCBATAdminSNMPCommunityTable_rowreq_ctx * rowreq_ctx, void **magic)
+{
+ netsnmp_container *comm_container = magic[0];
+ netsnmp_container *to_delete = (netsnmp_container *) magic[1];
+
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable:access",
+ "checking entry for updates\n"));
+
+ netsnmp_assert (NULL != comm_container);
+ netsnmp_assert (NULL != rowreq_ctx);
+ netsnmp_assert (NULL != rowreq_ctx->data);
+ /*
+ * check for matching entries to be deleted
+ */
+ eocCBATAdminSNMPCommunityTable_data *adminsnmpcommunity_entry =
+ CONTAINER_FIND (comm_container, rowreq_ctx->data);
+ if (NULL == adminsnmpcommunity_entry)
+ {
+
+ if (NULL == to_delete)
+ {
+ magic[1] = to_delete = netsnmp_container_find ("lifo");
+ if (NULL == to_delete)
+ snmp_log (LOG_ERR, "couldn't create delete container\n");
+ }
+ if (NULL != to_delete)
+ CONTAINER_INSERT (to_delete, rowreq_ctx);
+ }
+ else
+ {
+ /* check for updates for editable columns from community table */
+ _adminsnmpcommunity_update_entry (rowreq_ctx->data,
+ adminsnmpcommunity_entry);
+
+ /*
+ * remove entry from temporary community container
+ */
+ CONTAINER_REMOVE (comm_container, adminsnmpcommunity_entry);
+ free (adminsnmpcommunity_entry);
+ }
+}
+
+/**
+ * add new entry
+ */
+static void
+_adminsnmpcommunity_add_new_entry (eocCBATAdminSNMPCommunityTable_data *
+ adminsnmpcommunity_entry,
+ netsnmp_container * container)
+{
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable:access",
+ "creating new entry\n"));
+
+ netsnmp_assert (NULL != adminsnmpcommunity_entry);
+ netsnmp_assert (NULL != container);
+
+ /*
+ * allocate an row context and set the index(es)
+ */
+ rowreq_ctx =
+ eocCBATAdminSNMPCommunityTable_allocate_rowreq_ctx
+ (adminsnmpcommunity_entry, NULL);
+
+ if ((NULL != rowreq_ctx) && (MFD_SUCCESS ==
+ eocCBATAdminSNMPCommunityTable_indexes_set
+ (rowreq_ctx,
+ adminsnmpcommunity_entry->eocCBATAdminSNMPCommunityIndex)))
+ {
+ if (CONTAINER_INSERT (container, rowreq_ctx) < 0)
+ {
+ snmp_log (LOG_ERR,
+ "eocCBATAdminSNMPCommunityTable container insert failed for"
+ " new entry\n");
+ eocCBATAdminSNMPCommunityTable_release_rowreq_ctx (rowreq_ctx);
+ return;
+ }
+ ++count;
+ }
+ else
+ {
+ if (NULL != rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "error setting index while loading "
+ "eocCBATAdminSNMPCommunityTable cache.\n");
+ eocCBATAdminSNMPCommunityTable_release_rowreq_ctx (rowreq_ctx);
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "memory allocation failed while loading "
+ "eocCBATAdminSNMPCommunityTable cache.\n");
+ free (adminsnmpcommunity_entry);
+ }
+
+ return;
+ }
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus =
+ adminsnmpcommunity_entry->eocCBATAdminSNMPCommunityRowStatus;
+}
+
+
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocCBATAdminSNMPCommunityTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocCBATAdminSNMPCommunityTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocCBATAdminSNMPCommunityTable_container_load(netsnmp_container *container)
+{
+ int rc = MFD_SUCCESS;
+ netsnmp_container *adminsnmpcommunity_container;
+ void *tmp_ptr[2];
+ /*
+ * TODO:351:M: |-> Load/update data in the eocVLANTable container.
+ * loop over your eocCBATAdminSNMPCommunityTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ /* create temporary container for fresh community data */
+ adminsnmpcommunity_container =
+ netsnmp_container_find ("adminsnmpcommunity_temp:table_container");
+
+
+ if (NULL == adminsnmpcommunity_container)
+ {
+ snmp_log (LOG_ERR, "adminsnmpcommunity temp container not found\n");
+ return MFD_ERROR;
+ }
+
+ /* load fresh community data into temp container */
+ rc = _adminsnmpcommunity_container_load (adminsnmpcommunity_container);
+ if (MFD_ERROR == rc)
+ {
+ snmp_log (LOG_ERR, "adminsnmpcommunity container load error\n");
+ return MFD_ERROR;
+ }
+
+ tmp_ptr[0] = adminsnmpcommunity_container;
+ tmp_ptr[1] = NULL;
+
+ /* check if eocCBATAdminSNMPCommunityTable container needs updates */
+ /* (this is not called if table container is empty) */
+ CONTAINER_FOR_EACH (container, (netsnmp_container_obj_func *)
+ _adminsnmpcommunity_check_entry_for_updates, tmp_ptr);
+ /*
+ * add new entries to eocCBATAdminSNMPCommunityTable container
+ */
+ CONTAINER_FOR_EACH (adminsnmpcommunity_container,
+ (netsnmp_container_obj_func *)
+ _adminsnmpcommunity_add_new_entry, container);
+
+ /*
+ * free temporary container. we've either claimed each entry, or released it,
+ * so we don't need to call CONTAINER_CLEAR to clear the container.
+ */
+ CONTAINER_FREE (adminsnmpcommunity_container);
+
+ /*
+ * remove deleted items from eocCBATAdminSNMPCommunityTable container
+ */
+ if (NULL != tmp_ptr[1])
+ {
+ netsnmp_container *tmp_container = (netsnmp_container *) tmp_ptr[1];
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *tmp_ctx;
+
+ /*
+ * this works because the tmp_container is a linked list,
+ * which can be used like a stack...
+ */
+ while (CONTAINER_SIZE (tmp_container))
+ {
+ /*
+ * get from delete list
+ */
+ tmp_ctx = CONTAINER_FIRST (tmp_container);
+
+ /*
+ * release context, delete from table container
+ */
+ CONTAINER_REMOVE (container, tmp_ctx);
+ eocCBATAdminSNMPCommunityTable_release_rowreq_ctx (tmp_ctx);
+
+ /*
+ * pop off delete list
+ */
+ CONTAINER_REMOVE (tmp_container, NULL);
+ }
+ }
+
+ DEBUGMSGT (("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_container_load", "inserted %d records\n", CONTAINER_SIZE (container)));
+ return MFD_SUCCESS;
+
+} /* eocCBATAdminSNMPCommunityTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocCBATAdminSNMPCommunityTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocCBATAdminSNMPCommunityTable container data.
+ */
+} /* eocCBATAdminSNMPCommunityTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocCBATAdminSNMPCommunityTable_row_prep( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityTable_row_prep */
+
+/*
+ * TODO:420:r: Implement eocCBATAdminSNMPCommunityTable index validation.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityEntry.eocCBATAdminSNMPCommunityIndex
+ * eocCBATAdminSNMPCommunityIndex is subid 1 of eocCBATAdminSNMPCommunityEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4.1.1
+ * Description:
+SNMP¹²Í¬Ìå¹ÜÀí±íË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ *
+ *
+ *
+ * NOTE: NODE eocCBATAdminSNMPCommunityIndex IS NOT ACCESSIBLE
+ *
+ *
+ */
+/**
+ * check validity of eocCBATAdminSNMPCommunityIndex index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * eocCBATAdminSNMPCommunityTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+eocCBATAdminSNMPCommunityIndex_check_index( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx )
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityIndex_check_index","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check eocCBATAdminSNMPCommunityTable index eocCBATAdminSNMPCommunityIndex.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.eocCBATAdminSNMPCommunityIndex)
+ */
+
+ return MFD_SUCCESS; /* eocCBATAdminSNMPCommunityIndex index ok */
+} /* eocCBATAdminSNMPCommunityIndex_check_index */
+
+/**
+ * verify specified index is valid.
+ *
+ * This check is independent of whether or not the values specified for
+ * the columns of the new row are valid. Column values and row consistency
+ * will be checked later. At this point, only the index values should be
+ * checked.
+ *
+ * All of the individual index validation functions have been called, so this
+ * is the place to make sure they are valid as a whole when combined. If
+ * you only have one index, then you probably don't need to do anything else
+ * here.
+ *
+ * @note Keep in mind that if the indexes refer to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ *
+ * @param eocCBATAdminSNMPCommunityTable_reg
+ * Pointer to the user registration data
+ * @param eocCBATAdminSNMPCommunityTable_rowreq_ctx
+ * Pointer to the users context.
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_CANNOT_CREATE_NOW : index not valid right now
+ * @retval MFD_CANNOT_CREATE_EVER : index never valid
+ */
+int
+eocCBATAdminSNMPCommunityTable_validate_index( eocCBATAdminSNMPCommunityTable_registration * eocCBATAdminSNMPCommunityTable_reg,
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_validate_index","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:430:M: |-> Validate potential eocCBATAdminSNMPCommunityTable index.
+ */
+ if (0)
+ {
+ snmp_log (LOG_WARNING, "invalid index for a new row in the "
+ "eocCBATAdminSNMPCommunityTable table.\n");
+ /*
+ * determine failure type.
+ *
+ * If the index could not ever be created, return MFD_NOT_EVER
+ * If the index can not be created under the present circumstances
+ * (even though it could be created under other circumstances),
+ * return MFD_NOT_NOW.
+ */
+ if (0)
+ {
+ return MFD_CANNOT_CREATE_EVER;
+ }
+ else
+ {
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ }
+ else
+ {
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityIndex =
+ rowreq_ctx->tbl_idx.eocCBATAdminSNMPCommunityIndex;
+ }
+ return rc;
+} /* eocCBATAdminSNMPCommunityTable_validate_index */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_access.h
new file mode 100644
index 0000000000..08b9054ad6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_access.h
@@ -0,0 +1,66 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATADMINSNMPCOMMUNITYTABLE_DATA_ACCESS_H
+#define EOCCBATADMINSNMPCOMMUNITYTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATAdminSNMPCommunityTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityTable is subid 4 of eocCBATSNMPSettingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4, length: 12
+*/
+
+
+ int eocCBATAdminSNMPCommunityTable_init_data(eocCBATAdminSNMPCommunityTable_registration * eocCBATAdminSNMPCommunityTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocCBATAdminSNMPCommunityTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCCBATADMINSNMPCOMMUNITYTABLE_CACHE_TIMEOUT 60
+
+void eocCBATAdminSNMPCommunityTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocCBATAdminSNMPCommunityTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocCBATAdminSNMPCommunityTable_container_load(netsnmp_container *container);
+void eocCBATAdminSNMPCommunityTable_container_free(netsnmp_container *container);
+
+int eocCBATAdminSNMPCommunityTable_cache_load(netsnmp_container *container);
+void eocCBATAdminSNMPCommunityTable_cache_free(netsnmp_container *container);
+
+ int eocCBATAdminSNMPCommunityTable_row_prep( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx);
+
+int eocCBATAdminSNMPCommunityTable_validate_index( eocCBATAdminSNMPCommunityTable_registration * eocCBATAdminSNMPCommunityTable_reg,
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx);
+int eocCBATAdminSNMPCommunityIndex_check_index( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx ); /* internal */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATADMINSNMPCOMMUNITYTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_get.c
new file mode 100644
index 0000000000..b1e5c604e3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_get.c
@@ -0,0 +1,318 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATAdminSNMPCommunityTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocCBATAdminSNMPCommunityTable get routines.
+ * TODO:240:M: Implement eocCBATAdminSNMPCommunityTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATAdminSNMPCommunityTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityTable is subid 4 of eocCBATSNMPSettingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4, length: 12
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocCBATAdminSNMPCommunityTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocCBATAdminSNMPCommunityIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocCBATAdminSNMPCommunityTable_indexes_set_tbl_idx(eocCBATAdminSNMPCommunityTable_mib_index *tbl_idx, long eocCBATAdminSNMPCommunityIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocCBATAdminSNMPCommunityIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ tbl_idx->eocCBATAdminSNMPCommunityIndex = eocCBATAdminSNMPCommunityIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocCBATAdminSNMPCommunityTable_indexes_set(eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, long eocCBATAdminSNMPCommunityIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocCBATAdminSNMPCommunityTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocCBATAdminSNMPCommunityIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocCBATAdminSNMPCommunityTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityEntry.eocCBATAdminSNMPCommunity
+ * eocCBATAdminSNMPCommunity is subid 2 of eocCBATAdminSNMPCommunityEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4.1.2
+ * Description:
+SNMP¹²Í¬Ìå´®£¬×Ϊ16λ×Ö·û´®¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 1 - 16;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 16)
+ */
+/**
+ * Extract the current value of the eocCBATAdminSNMPCommunity data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATAdminSNMPCommunity_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCBATAdminSNMPCommunity_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCBATAdminSNMPCommunity.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCBATAdminSNMPCommunity_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCBATAdminSNMPCommunity_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCBATAdminSNMPCommunity_get( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, char **eocCBATAdminSNMPCommunity_val_ptr_ptr, size_t *eocCBATAdminSNMPCommunity_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCBATAdminSNMPCommunity_val_ptr_ptr) && (NULL != *eocCBATAdminSNMPCommunity_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCBATAdminSNMPCommunity_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunity_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATAdminSNMPCommunity data.
+ * copy (* eocCBATAdminSNMPCommunity_val_ptr_ptr ) data and (* eocCBATAdminSNMPCommunity_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCBATAdminSNMPCommunity data
+ */
+ if ((NULL == (* eocCBATAdminSNMPCommunity_val_ptr_ptr )) ||
+ ((* eocCBATAdminSNMPCommunity_val_ptr_len_ptr ) <
+ (rowreq_ctx->data->eocCBATAdminSNMPCommunity_len* sizeof(rowreq_ctx->data->eocCBATAdminSNMPCommunity[0])))) {
+ /*
+ * allocate space for eocCBATAdminSNMPCommunity data
+ */
+ (* eocCBATAdminSNMPCommunity_val_ptr_ptr ) = malloc(rowreq_ctx->data->eocCBATAdminSNMPCommunity_len* sizeof(rowreq_ctx->data->eocCBATAdminSNMPCommunity[0]));
+ if(NULL == (* eocCBATAdminSNMPCommunity_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCBATAdminSNMPCommunity_val_ptr_len_ptr ) = rowreq_ctx->data->eocCBATAdminSNMPCommunity_len* sizeof(rowreq_ctx->data->eocCBATAdminSNMPCommunity[0]);
+ memcpy( (* eocCBATAdminSNMPCommunity_val_ptr_ptr ), rowreq_ctx->data->eocCBATAdminSNMPCommunity, rowreq_ctx->data->eocCBATAdminSNMPCommunity_len* sizeof(rowreq_ctx->data->eocCBATAdminSNMPCommunity[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunity_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityEntry.eocCBATAdminSNMPCommunityPermission
+ * eocCBATAdminSNMPCommunityPermission is subid 3 of eocCBATAdminSNMPCommunityEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4.1.3
+ * Description:
+SNMP¹²Í¬ÌåȨÏÞ£¬Ö»¶ÁȨÏÞΪro(1)£¬¶ÁдȨÏÞΪrw(2)
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: rw(1), ro(2), wo(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCBATAdminSNMPCommunityPermission data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATAdminSNMPCommunityPermission_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATAdminSNMPCommunityPermission_get( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATAdminSNMPCommunityPermission_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATAdminSNMPCommunityPermission_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityPermission_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATAdminSNMPCommunityPermission data.
+ * copy (* eocCBATAdminSNMPCommunityPermission_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATAdminSNMPCommunityPermission_val_ptr ) = rowreq_ctx->data->eocCBATAdminSNMPCommunityPermission;
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityPermission_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityEntry.eocCBATAdminSNMPCommunityRowStatus
+ * eocCBATAdminSNMPCommunityRowStatus is subid 4 of eocCBATAdminSNMPCommunityEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4.1.4
+ * Description:
+ÐÐ״̬¡£Ö»Ê¹ÓÃÁ½Ïî
+ 4-createAndGo
+ 6-distory
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCBATAdminSNMPCommunityRowStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATAdminSNMPCommunityRowStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATAdminSNMPCommunityRowStatus_get( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATAdminSNMPCommunityRowStatus_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATAdminSNMPCommunityRowStatus_val_ptr );
+
+ (* eocCBATAdminSNMPCommunityRowStatus_val_ptr ) = rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus;
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityRowStatus_get */
+
+
+int
+eocCBATAdminSNMPCommunityTable_Nextindex_get(void)
+{
+ netsnmp_container * adminsnmpcommunity_container;
+ int rc;
+ int next_index = 0;
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_Nextindex_get", "called!\n"));
+
+ adminsnmpcommunity_container =
+ netsnmp_container_find("eocCBATAdminSNMPCommunityTable:table_container");
+ if (NULL == adminsnmpcommunity_container) {
+ snmp_log(LOG_ERR, "AdminSNMPCommunity container not found\n");
+ return -1;
+ }
+
+ rc = eocCBATAdminSNMPCommunityTable_container_load(adminsnmpcommunity_container);
+ if (MFD_ERROR == rc) {
+ snmp_log(LOG_ERR, "AdminSNMPCommunity container load error\n");
+ return -1;
+ }
+
+
+ next_index = curr_comm_num;
+
+
+ return next_index;
+}
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_get.h
new file mode 100644
index 0000000000..f64c5c5190
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_get.h
@@ -0,0 +1,61 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocCBATAdminSNMPCommunityTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCCBATADMINSNMPCOMMUNITYTABLE_DATA_GET_H
+#define EOCCBATADMINSNMPCOMMUNITYTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATAdminSNMPCommunityTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityTable is subid 4 of eocCBATSNMPSettingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4, length: 12
+*/
+ /*
+ * indexes
+ */
+
+ int eocCBATAdminSNMPCommunity_get( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, char **eocCBATAdminSNMPCommunity_val_ptr_ptr, size_t *eocCBATAdminSNMPCommunity_val_ptr_len_ptr );
+ int eocCBATAdminSNMPCommunityPermission_get( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATAdminSNMPCommunityPermission_val_ptr );
+ int eocCBATAdminSNMPCommunityRowStatus_get( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATAdminSNMPCommunityRowStatus_val_ptr );
+
+
+int eocCBATAdminSNMPCommunityTable_indexes_set_tbl_idx(eocCBATAdminSNMPCommunityTable_mib_index *tbl_idx, long eocCBATAdminSNMPCommunityIndex_val);
+int eocCBATAdminSNMPCommunityTable_indexes_set(eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, long eocCBATAdminSNMPCommunityIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATADMINSNMPCOMMUNITYTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_set.c
new file mode 100644
index 0000000000..576cf4cd1c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_set.c
@@ -0,0 +1,1589 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATAdminSNMPCommunityTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATAdminSNMPCommunityTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityTable is subid 4 of eocCBATSNMPSettingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4, length: 12
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +-------------+ +==============+
+ * | row |f|<-------|| object ||
+ * | create |1| E || lookup ||
+ * +-------------+ +==============+
+ * E | | S | S
+ * | +------------------>|
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * |
+ * (err && f1)------------------->+
+ * | |
+ * +--------------+ +--------------+
+ * | post |<--------| row |
+ * | request | U | release |
+ * +--------------+ +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocCBATAdminSNMPCommunityTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocCBATAdminSNMPCommunityTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATAdminSNMPCommunityTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCBATAdminSNMPCommunityTable_undo_setup( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocCBATAdminSNMPCommunityTable undo.
+ * set up eocCBATAdminSNMPCommunityTable undo information, in preparation for a set.
+ * Undo storage is in (* eocCBATAdminSNMPCommunityRowStatus_val_ptr )*
+ */
+
+ /* copy data context to undo context */
+ memcpy (rowreq_ctx->undo, rowreq_ctx->data,
+ sizeof (eocCBATAdminSNMPCommunityTable_data));
+ return rc;
+} /* eocCBATAdminSNMPCommunityTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATAdminSNMPCommunityTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCBATAdminSNMPCommunityTable_undo( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocCBATAdminSNMPCommunityTable undo.
+ * eocCBATAdminSNMPCommunityTable undo information, in response to a failed set.
+ * Undo storage is in (* eocCBATAdminSNMPCommunityRowStatus_val_ptr )*
+ */
+
+ return rc;
+} /* eocCBATAdminSNMPCommunityTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATAdminSNMPCommunityTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCBATAdminSNMPCommunityTable_undo_cleanup( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocCBATAdminSNMPCommunityTable undo.
+ * Undo storage is in (* eocCBATAdminSNMPCommunityRowStatus_val_ptr )*
+ */
+
+ return rc;
+} /* eocCBATAdminSNMPCommunityTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCBATAdminSNMPCommunityTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCBATAdminSNMPCommunityTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCBATAdminSNMPCommunityTable_commit( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+ char old_comm_name[32], old_sec_name[32];
+ char new_comm_name[32];
+ int new_access = 0;
+ int tmp;
+ int ret;
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ if (NULL == rowreq_ctx->data->eocCBATAdminSNMPCommunity)
+ return MFD_ERROR;
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocCBATAdminSNMPCommunityTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ /*
+ * did anything change?
+ */
+ if (0 == save_flags)
+ {
+ DEBUGMSGTL (("eocVLANTable:eocVLANTable_commit", "no change\n"));
+ return MFD_SUCCESS;
+ }
+
+ if (save_flags & COLUMN_EOCCBATADMINSNMPCOMMUNITY_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCBATADMINSNMPCOMMUNITY_FLAG; /* clear eocCBATAdminSNMPCommunity */
+ /*
+ * TODO:482:o: |-> commit column eocCBATAdminSNMPCommunity.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATAdminSNMPCommunity
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATADMINSNMPCOMMUNITY_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION_FLAG; /* clear eocCBATAdminSNMPCommunityPermission */
+ /*
+ * TODO:482:o: |-> commit column eocCBATAdminSNMPCommunityPermission.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATAdminSNMPCommunityPermission
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS_FLAG; /* clear eocCBATAdminSNMPCommunityRowStatus */
+ /*
+ * TODO:482:o: |-> commit column eocCBATAdminSNMPCommunityRowStatus.
+ */
+ /*
+ * set flag, in case we need to undo eocCBATAdminSNMPCommunityRowStatus
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS_FLAG;
+ }
+ if (rowreq_ctx->
+ column_set_flags & COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS_FLAG)
+ {
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ {
+ DEBUGMSGTL (("verbose:eocVLANTable:eocVLANTable_commit",
+ "new row created!\n"));
+ }
+ else if (ROWSTATUS_DESTROY ==
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus)
+ {
+ /* check if deleting unvalidated row */
+ /* a row can be unvalidated either before being added to
+ * configuration file, or to mark invalid line in
+ * configuration file */
+ if ((rowreq_ctx->undo->
+ eocCBATAdminSNMPCommunityRowStatus & ROWSTATUS_NOTINSERVICE))
+ {
+ DEBUGMSGTL (("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_commit", "deleting unvalidated row!\n"));
+ /* convert index to string to serve as key for possible
+ * removing of invalid line */
+
+ strcpy (old_comm_name,
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity);
+ strcpy (old_sec_name,
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity);
+
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_remove_community_line (old_comm_name,
+ old_sec_name,
+ curr_comm_num))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_remove_community_line error\n");
+ }
+
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_remove_security_line (old_sec_name,
+ curr_comm_num))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_remove_security_line error\n");
+ }
+ return MFD_SUCCESS;
+ }
+
+ strcpy (old_comm_name,
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity);
+ strcpy (old_sec_name,
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity);
+
+ /* remove comm name from internal storage list */
+ if (NULL != se_find_slist ("eoc_comm_list"))
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable_commit:",
+ "trying to remove comm name from slist: %s\n",
+ old_comm_name));
+
+ ret = se_remove_label_from_slist ("eoc_comm_list",
+ old_comm_name);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR,
+ "Error! comm name not found in the table!\n");
+ return MFD_ERROR;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR,
+ "Trying to delete from empty comm name list!\n");
+ return MFD_ERROR;
+ }
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_remove_community_line (old_comm_name,
+ old_sec_name,
+ curr_comm_num + 1))
+ {
+ snmp_log (LOG_ERR,
+ "libspid_eoc_remove_community_line error\n");
+ return MFD_ERROR;
+ }
+
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_remove_security_line (old_sec_name,
+ curr_comm_num + 1))
+ {
+ snmp_log (LOG_ERR,
+ "libspid_eoc_remove_security_line error\n");
+ return MFD_ERROR;
+ }
+ curr_comm_num--;
+
+
+ }
+ else if (ROWSTATUS_ACTIVE ==
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus)
+ {
+ /* this case covers modifying row status to active - ie.
+ * validating the row */
+ /* row can be either newly added from the agent,
+ * or having row status notInService to mark invalid line
+ * in configuration file */
+ DEBUGMSGTL (("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_commit", "validating row\n"));
+
+ strcpy (old_comm_name,
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunity);
+ strcpy (new_comm_name,
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity);
+ new_access =
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityPermission;
+
+ /* add comm name of validated row to internal storage list */
+ tmp = se_find_free_value_in_slist ("eoc_comm_list");
+ if (tmp == SE_DNE)
+ tmp = 1; /* Completely new list! */
+ se_add_pair_to_slist ("eoc_comm_list",
+ strdup (new_comm_name), tmp);
+
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_write_community_line (old_comm_name, old_sec_name,
+ new_comm_name,
+ curr_comm_num))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_write_community_line error\n");
+ return MFD_ERROR;
+ }
+
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_write_security_line (old_sec_name, new_comm_name,
+ new_access, curr_comm_num))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_write_security_line error\n");
+ return MFD_ERROR;
+ }
+ curr_comm_num++;
+ adding_snmpcommunity = 0;
+
+ }
+ }
+ else
+ {
+ /* this case covers modifying columns without modifying row status */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ && (ROWSTATUS_ACTIVE ==
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus))
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable_commit",
+ "trying to change data for "
+ "community table community name:%s \n",
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity));
+ /* convert index to string to serve as key for line in
+ * configuration file */
+ if (rowreq_ctx->
+ column_set_flags & COLUMN_EOCCBATADMINSNMPCOMMUNITY_FLAG)
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable_commit",
+ "eocCBATAdminSNMPCommunity read from "
+ "rowreq context: %s\n",
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity));
+
+ /* copy community name to community entry */
+ strcpy (old_comm_name,
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunity);
+ strcpy (new_comm_name,
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity);
+ new_access =
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityPermission;
+
+ /* remove community name from internal storage list */
+ if (NULL != se_find_slist ("eoc_comm_list"))
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable_commit:",
+ "trying to remove comm name from slist: %s\n",
+ old_comm_name));
+
+ ret = se_remove_label_from_slist ("eoc_comm_list",
+ old_comm_name);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR, "Error! comm name not found"
+ " in internal storage list!\n");
+ return MFD_ERROR;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "Trying to delete from empty"
+ " comm name internal storage list!\n");
+ return MFD_ERROR;
+ }
+
+ /* add new community name to internal storage list */
+ tmp = se_find_free_value_in_slist ("eoc_comm_list");
+ DEBUGMSGTL (("verbose:eocCBATAdminSNMPCommunityTable:",
+ "eocCBATAdminSNMPCommunityTable_commit",
+ "se_find_value_in_slist found free value: %d\n",
+ tmp));
+ if (tmp == SE_DNE)
+ tmp = 1; /* Completely new list! */
+ se_add_pair_to_slist ("eoc_comm_list",
+ strdup (new_comm_name), tmp);
+ }
+
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION_FLAG)
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable_commit",
+ "eocCBATAdminSNMPCommunityPermission "
+ "read from rowreq context: %ld\n",
+ rowreq_ctx->data->
+ eocCBATAdminSNMPCommunityPermission));
+ /* copy community name to community entry */
+ strcpy (old_comm_name,
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity);
+ strcpy (new_comm_name,
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity);
+ new_access =
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityPermission;
+ }
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_write_community_line (old_comm_name, old_sec_name,
+ new_comm_name,
+ curr_comm_num))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_write_community_line error\n");
+ return MFD_ERROR;
+ }
+
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_write_security_line (old_sec_name, new_comm_name,
+ new_access, curr_comm_num))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_write_security_line error\n");
+ return MFD_ERROR;
+ }
+
+ }
+ }
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc)
+ {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags)
+ {
+ snmp_log (LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocCBATAdminSNMPCommunityTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCBATAdminSNMPCommunityTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCBATAdminSNMPCommunityTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCBATAdminSNMPCommunityTable_undo_commit( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ char old_comm_name[32], old_sec_name[32];
+ char new_comm_name[32];
+ int new_access = 0;
+ int tmp;
+ int ret;
+
+ DEBUGMSGTL (("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_undo_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:485:M: |-> Undo eocCBATAdminSNMPCommunityTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCBATADMINSNMPCOMMUNITY_FLAG)
+ {
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ {
+ /* when row is created and not validated, there is nothing to do */
+ if ((rowreq_ctx->undo->
+ eocCBATAdminSNMPCommunityRowStatus & ROWSTATUS_NOTINSERVICE))
+ {
+ DEBUGMSGTL (("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_commit", "removing unvalidated row!\n"));
+ return MFD_SUCCESS;
+ }
+ }
+ else if (ROWSTATUS_DESTROY ==
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus)
+ {
+ /* if a row was deleted, restore it */
+ /* if restoring unvalidated row, there is nothing to do */
+ if ((rowreq_ctx->undo->
+ eocCBATAdminSNMPCommunityRowStatus & ROWSTATUS_NOTINSERVICE))
+ {
+ DEBUGMSGTL (("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_commit", "restoring unvalidated row!\n"));
+ return MFD_SUCCESS;
+ }
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable_undo_commit",
+ "service table index to undo: %s \n",
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunity));
+
+ strcpy (old_comm_name,
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunity);
+ strcpy (new_comm_name,
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunity);
+ new_access =
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunityPermission;
+ /* clear flag for deletion */
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DELETED;
+
+ /* add comm name of validated row to internal storage list */
+ tmp = se_find_free_value_in_slist ("eoc_comm_list");
+ if (tmp == SE_DNE)
+ tmp = 1; /* Completely new list! */
+ se_add_pair_to_slist ("eoc_comm_list",
+ strdup (new_comm_name), tmp);
+
+
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_write_community_line (old_comm_name, old_sec_name,
+ new_comm_name,
+ curr_comm_num))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_write_community_line error\n");
+ return MFD_ERROR;
+ }
+
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_write_security_line (old_sec_name, new_comm_name,
+ new_access, curr_comm_num))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_write_security_line error\n");
+ return MFD_ERROR;
+ }
+
+ }
+ else if (ROWSTATUS_ACTIVE ==
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus)
+ {
+ DEBUGMSGTL (("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_undo_commit", "removing newly validated row!\n"));
+ /* if a row was validated (its status set to active) revert
+ * its status to notInService */
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus =
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunityRowStatus;
+ /* also remove row data from config file */
+ /* convert index to string to serve as key for removing line */
+
+ /* if a new row was added, remove line with given index from
+ * service configuration file */
+ if (1 == adding_snmpcommunity)
+ {
+
+ strcpy (old_comm_name,
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity);
+ strcpy (old_sec_name,
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity);
+
+ /* remove comm name from internal storage list */
+ if (NULL != se_find_slist ("eoc_comm_list"))
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable_undo_commit:", "trying to remove comm name from slist: %s\n", old_comm_name));
+
+ ret = se_remove_label_from_slist ("eoc_comm_list",
+ old_comm_name);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR,
+ "Error! comm name not found in the table!\n");
+ return MFD_ERROR;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR,
+ "Trying to delete from empty comm name list!\n");
+ return MFD_ERROR;
+ }
+
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_remove_community_line (old_comm_name,
+ old_sec_name,
+ curr_comm_num))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_remove_community_line error\n");
+ return MFD_ERROR;
+ }
+
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_remove_security_line (old_sec_name,
+ curr_comm_num))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_remove_security_line error\n");
+ return MFD_ERROR;
+ }
+
+
+ /* if undo has successfully passed, clear service adding
+ * indication */
+ adding_snmpcommunity = 0;
+ }
+ }
+ }
+ else
+ {
+ /* this case covers restoring modified columns
+ * (without row status modified) */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ && (ROWSTATUS_ACTIVE ==
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunityRowStatus))
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable_undo_commit",
+ "undoing data for " "index: %ld \n",
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityIndex));
+
+ if (rowreq_ctx->
+ column_set_flags & COLUMN_EOCCBATADMINSNMPCOMMUNITY_FLAG)
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable_undo_commit",
+ "AdminSNMPCommunity name to "
+ "be restored: %s\n",
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunity));
+ strcpy (old_comm_name,
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity);
+ strcpy (new_comm_name,
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunity);
+ new_access =
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunityPermission;
+
+ /* remove comm name from internal storage list */
+ if (NULL != se_find_slist ("eoc_comm_list"))
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable_commit:",
+ "trying to remove comm name from slist: %s\n",
+ old_comm_name));
+
+ ret = se_remove_label_from_slist ("eoc_comm_list",
+ old_comm_name);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR, "Error! comm name not found"
+ " in internal storage list!\n");
+ return MFD_ERROR;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "Trying to delete from empty"
+ " comm name internal storage list!\n");
+ return MFD_ERROR;
+ }
+
+ /* add new IP address to internal storage list */
+ tmp = se_find_free_value_in_slist ("eoc_comm_list");
+ DEBUGMSGTL (("verbose:eocCBATAdminSNMPCommunityTable:",
+ "eocCBATAdminSNMPCommunityTable_commit",
+ "se_find_value_in_slist found free value: %d\n",
+ tmp));
+
+ if (tmp == SE_DNE)
+ tmp = 1; /* Completely new list! */
+ se_add_pair_to_slist ("eoc_comm_list",
+ strdup (new_comm_name), tmp);
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION_FLAG)
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable_undo_commit",
+ "community permission to be restored: %ld\n",
+ rowreq_ctx->undo->
+ eocCBATAdminSNMPCommunityPermission));
+ /* copy service type to service entry */
+ strcpy (old_comm_name,
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunity);
+ strcpy (new_comm_name,
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunity);
+ new_access =
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunityPermission;
+ }
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_write_community_line (old_comm_name, old_sec_name,
+ new_comm_name,
+ curr_comm_num))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_write_community_line error\n");
+ return MFD_ERROR;
+ }
+
+
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_write_security_line (old_sec_name, new_comm_name,
+ new_access, curr_comm_num))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_write_security_line error\n");
+ return MFD_ERROR;
+ }
+
+ }
+ }
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocCBATAdminSNMPCommunityTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocCBATAdminSNMPCommunityTable node value checks.
+ * TODO:450:M: Implement eocCBATAdminSNMPCommunityTable undo functions.
+ * TODO:460:M: Implement eocCBATAdminSNMPCommunityTable set functions.
+ * TODO:480:M: Implement eocCBATAdminSNMPCommunityTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityEntry.eocCBATAdminSNMPCommunity
+ * eocCBATAdminSNMPCommunity is subid 2 of eocCBATAdminSNMPCommunityEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4.1.2
+ * Description:
+SNMP¹²Í¬Ìå´®£¬×Ϊ16λ×Ö·û´®¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 1 - 16;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 16)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATAdminSNMPCommunity_val_ptr
+ * A char containing the new value.
+ * @param eocCBATAdminSNMPCommunity_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCBATAdminSNMPCommunity_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATAdminSNMPCommunityTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OCTET_STR
+ * The length is < sizeof(rowreq_ctx->data.eocCBATAdminSNMPCommunity).
+ * The length is in (one of) the range set(s): 1 - 16
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+
+char *Trim (char *str)
+{
+ char *head = str;
+ char *tail = str + strlen( str );
+
+ while(*head++ == ' ')
+ /* nothing here*/;
+
+ --head;
+
+ while(*(--tail) == ' ');
+ *(tail+1) = '\0';
+
+ return head;
+}
+
+int
+eocCBATAdminSNMPCommunity_check_value( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, char *eocCBATAdminSNMPCommunity_val_ptr, size_t eocCBATAdminSNMPCommunity_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunity_check_value","called\n"));
+ int tmp;
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCBATAdminSNMPCommunity_val_ptr);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATAdminSNMPCommunity value.
+ */
+ eocCBATAdminSNMPCommunity_val_ptr[eocCBATAdminSNMPCommunity_val_ptr_len]
+ = '\0';
+ eocCBATAdminSNMPCommunity_val_ptr =
+ Trim (eocCBATAdminSNMPCommunity_val_ptr);
+ if (eocCBATAdminSNMPCommunity_val_ptr_len !=
+ strlen (eocCBATAdminSNMPCommunity_val_ptr))
+ return MFD_NOT_VALID_EVER;
+
+ /* check if proposed comm name already exists in internal storage list */
+ tmp =
+ se_find_value_in_slist ("eoc_comm_list",
+ eocCBATAdminSNMPCommunity_val_ptr);
+ if (tmp != SE_DNE)
+ {
+ DEBUGMSGTL (("verbose:eocCBATAdminSNMPCommunityTable:",
+ "eocCBATAdminSNMPCommunity_check_value",
+ "comm name already exists!\n"));
+ return MFD_NOT_VALID_EVER;
+ }
+
+ return MFD_SUCCESS; /* eocCBATAdminSNMPCommunity value not illegal */
+} /* eocCBATAdminSNMPCommunity_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATAdminSNMPCommunityTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATAdminSNMPCommunityTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATAdminSNMPCommunity_undo_setup( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunity_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATAdminSNMPCommunity undo.
+ */
+ /*
+ * copy eocCBATAdminSNMPCommunity and eocCBATAdminSNMPCommunity_len data
+ * set rowreq_ctx->undo->eocCBATAdminSNMPCommunity from rowreq_ctx->data.eocCBATAdminSNMPCommunity
+ */
+ memcpy( rowreq_ctx->undo->eocCBATAdminSNMPCommunity, rowreq_ctx->data->eocCBATAdminSNMPCommunity,
+ (rowreq_ctx->data->eocCBATAdminSNMPCommunity_len * sizeof(rowreq_ctx->undo->eocCBATAdminSNMPCommunity[0])));
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunity_len = rowreq_ctx->data->eocCBATAdminSNMPCommunity_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunity_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATAdminSNMPCommunity_val_ptr
+ * A char containing the new value.
+ * @param eocCBATAdminSNMPCommunity_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCBATAdminSNMPCommunity_val_ptr
+ */
+int
+eocCBATAdminSNMPCommunity_set( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, char *eocCBATAdminSNMPCommunity_val_ptr, size_t eocCBATAdminSNMPCommunity_val_ptr_len )
+{
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunity_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCBATAdminSNMPCommunity_val_ptr);
+
+ /*
+ * TODO:461:M: |-> Set eocCBATAdminSNMPCommunity value.
+ * set eocCBATAdminSNMPCommunity value in rowreq_ctx->data
+ */
+ memset (rowreq_ctx->data->eocCBATAdminSNMPCommunity, 0, sizeof(rowreq_ctx->data->eocCBATAdminSNMPCommunity));
+ memcpy (rowreq_ctx->data->eocCBATAdminSNMPCommunity, eocCBATAdminSNMPCommunity_val_ptr, eocCBATAdminSNMPCommunity_val_ptr_len );
+ /** convert bytes to number of char */
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity_len = eocCBATAdminSNMPCommunity_val_ptr_len / sizeof(eocCBATAdminSNMPCommunity_val_ptr[0]);
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunity_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATAdminSNMPCommunity_undo( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunity_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATAdminSNMPCommunity undo.
+ */
+ /*
+ * copy eocCBATAdminSNMPCommunity and eocCBATAdminSNMPCommunity_len data
+ * set rowreq_ctx->data.eocCBATAdminSNMPCommunity from rowreq_ctx->undo->eocCBATAdminSNMPCommunity
+ */
+ memcpy( rowreq_ctx->data->eocCBATAdminSNMPCommunity, rowreq_ctx->undo->eocCBATAdminSNMPCommunity,
+ (rowreq_ctx->undo->eocCBATAdminSNMPCommunity_len * sizeof(rowreq_ctx->data->eocCBATAdminSNMPCommunity[0])));
+ rowreq_ctx->data->eocCBATAdminSNMPCommunity_len = rowreq_ctx->undo->eocCBATAdminSNMPCommunity_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunity_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityEntry.eocCBATAdminSNMPCommunityPermission
+ * eocCBATAdminSNMPCommunityPermission is subid 3 of eocCBATAdminSNMPCommunityEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4.1.3
+ * Description:
+SNMP¹²Í¬ÌåȨÏÞ£¬Ö»¶ÁȨÏÞΪro(1)£¬¶ÁдȨÏÞΪrw(2)
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: rw(1), ro(2), wo(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATAdminSNMPCommunityPermission_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATAdminSNMPCommunityTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of rw(1), ro(2), wo(3)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATAdminSNMPCommunityPermission_check_value( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, u_long eocCBATAdminSNMPCommunityPermission_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityPermission_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATAdminSNMPCommunityPermission value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATAdminSNMPCommunityPermission value not illegal */
+} /* eocCBATAdminSNMPCommunityPermission_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATAdminSNMPCommunityTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATAdminSNMPCommunityTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATAdminSNMPCommunityPermission_undo_setup( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityPermission_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATAdminSNMPCommunityPermission undo.
+ */
+ /*
+ * copy eocCBATAdminSNMPCommunityPermission data
+ * set rowreq_ctx->undo->eocCBATAdminSNMPCommunityPermission from rowreq_ctx->data.eocCBATAdminSNMPCommunityPermission
+ */
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunityPermission = rowreq_ctx->data->eocCBATAdminSNMPCommunityPermission;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityPermission_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATAdminSNMPCommunityPermission_val
+ * A long containing the new value.
+ */
+int
+eocCBATAdminSNMPCommunityPermission_set( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, u_long eocCBATAdminSNMPCommunityPermission_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityPermission_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCBATAdminSNMPCommunityPermission value.
+ * set eocCBATAdminSNMPCommunityPermission value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityPermission = eocCBATAdminSNMPCommunityPermission_val;
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityPermission_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATAdminSNMPCommunityPermission_undo( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityPermission_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATAdminSNMPCommunityPermission undo.
+ */
+ /*
+ * copy eocCBATAdminSNMPCommunityPermission data
+ * set rowreq_ctx->data.eocCBATAdminSNMPCommunityPermission from rowreq_ctx->undo->eocCBATAdminSNMPCommunityPermission
+ */
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityPermission = rowreq_ctx->undo->eocCBATAdminSNMPCommunityPermission;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityPermission_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityEntry.eocCBATAdminSNMPCommunityRowStatus
+ * eocCBATAdminSNMPCommunityRowStatus is subid 4 of eocCBATAdminSNMPCommunityEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4.1.4
+ * Description:
+ÐÐ״̬¡£Ö»Ê¹ÓÃÁ½Ïî
+ 4-createAndGo
+ 6-distory
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATAdminSNMPCommunityRowStatus_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATAdminSNMPCommunityTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATAdminSNMPCommunityRowStatus_check_value( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, u_long eocCBATAdminSNMPCommunityRowStatus_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityRowStatus_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATAdminSNMPCommunityRowStatus value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATAdminSNMPCommunityRowStatus value not illegal */
+} /* eocCBATAdminSNMPCommunityRowStatus_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATAdminSNMPCommunityTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATAdminSNMPCommunityTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATAdminSNMPCommunityRowStatus_undo_setup( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityRowStatus_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATAdminSNMPCommunityRowStatus undo.
+ */
+ /*
+ * copy eocCBATAdminSNMPCommunityRowStatus data
+ * set rowreq_ctx->undo->eocCBATAdminSNMPCommunityRowStatus from rowreq_ctx->data.eocCBATAdminSNMPCommunityRowStatus
+ */
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunityRowStatus = rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityRowStatus_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATAdminSNMPCommunityRowStatus_val
+ * A long containing the new value.
+ */
+int
+eocCBATAdminSNMPCommunityRowStatus_set( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, u_long eocCBATAdminSNMPCommunityRowStatus_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityRowStatus_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (eocCBATAdminSNMPCommunityRowStatus_val == ROWSTATUS_CREATEANDWAIT &&
+ rowreq_ctx->tbl_idx.eocCBATAdminSNMPCommunityIndex != curr_comm_num)
+ return MFD_NOT_VALID_EVER;
+
+ /*
+ * TODO:461:M: |-> Set eocCBATAdminSNMPCommunityRowStatus value.
+ * set eocCBATAdminSNMPCommunityRowStatus value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus = eocCBATAdminSNMPCommunityRowStatus_val;
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityRowStatus_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATAdminSNMPCommunityRowStatus_undo( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityRowStatus_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATAdminSNMPCommunityRowStatus undo.
+ */
+ /*
+ * copy eocCBATAdminSNMPCommunityRowStatus data
+ * set rowreq_ctx->data.eocCBATAdminSNMPCommunityRowStatus from rowreq_ctx->undo->eocCBATAdminSNMPCommunityRowStatus
+ */
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus = rowreq_ctx->undo->eocCBATAdminSNMPCommunityRowStatus;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATAdminSNMPCommunityRowStatus_undo */
+
+/** @} */
+
+
+/**
+ * check dependencies
+ *
+ * This is useful for for tables which have dependencies between columns
+ * (or rows, or tables). For example, two columns allocating a percentage
+ * of something add up 100%.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocVLANTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @retval MFD_SUCCESS all the changes to the row are legal
+ * @retval MFD_ERROR one or more changes are not legal
+ *
+ * (see README-table-eocVLANTable if you don't have dependencies)
+ */
+int
+eocCBATAdminSNMPCommunityTable_check_dependencies (
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL (("internal:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_check_dependencies",
+ "called\n"));
+
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:470:o: Check eocVLANTable row dependencies.
+ * check that all new value are legal and consistent with each other
+ */
+ /*
+ * check RowStatus dependencies
+ */
+ if (rowreq_ctx->
+ column_set_flags & COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS_FLAG)
+ {
+ /*
+ * check for valid RowStatus transition (old, new)
+ * (Note: move transition check to
+ * to catch errors earlier)
+ */
+ rc = check_rowstatus_transition (rowreq_ctx->undo->
+ eocCBATAdminSNMPCommunityRowStatus,
+ rowreq_ctx->data->
+ eocCBATAdminSNMPCommunityRowStatus);
+
+ if (MFD_SUCCESS != rc)
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable",
+ "row status transition from %d to " "%d\n",
+ rowreq_ctx->undo->eocCBATAdminSNMPCommunityRowStatus,
+ rowreq_ctx->data->
+ eocCBATAdminSNMPCommunityRowStatus));
+ return rc;
+ }
+ /*
+ * row creation requirements
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ {
+ /* this case permits creating row with rowstatus 'destroy' -
+ * row is created and immediately deleted */
+ if (ROWSTATUS_DESTROY ==
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus)
+ {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED;
+ }
+ else if (ROWSTATUS_CREATEANDWAIT ==
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus)
+ {
+ /* set row adding indication */
+ adding_snmpcommunity = 1;
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus =
+ ROWSTATUS_NOTINSERVICE;
+ }
+ } /* row creation */
+ else
+ {
+ /*
+ * row change requirements
+ */
+ /*
+ * don't allow a destroy if any other value was changed, since
+ * that might call data access routines with bad info.
+ *
+ * you may or may not require the row be notInService before it
+ * can be destroyed.
+ */
+ if (ROWSTATUS_DESTROY ==
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus)
+ {
+ if (rowreq_ctx->column_set_flags &
+ ~COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS_FLAG)
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable",
+ "destroy must be only "
+ "varbind for row\n"));
+ return MFD_NOT_VALID_NOW;
+ }
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED;
+
+ } /* row destroy */
+ else if (ROWSTATUS_NOTINSERVICE ==
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus)
+ {
+ /* do not permit invalidating once validated row */
+ if (rowreq_ctx->undo->
+ eocCBATAdminSNMPCommunityRowStatus & ROWSTATUS_ACTIVE)
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable",
+ "Row status can't be changed "
+ "from Active to Not In Service!\n"));
+ return MFD_NOT_VALID_EVER;
+ }
+ }
+ else if (ROWSTATUS_ACTIVE ==
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus)
+ {
+ /* before setting row to active, check that all columns are filled */
+ if ((rowreq_ctx->column_exists_flags &
+ EOCCBATADMINSNMPCOMMUNITYTABLE_REQUIRED_COLS) !=
+ EOCCBATADMINSNMPCOMMUNITYTABLE_REQUIRED_COLS)
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable",
+ "required columns from "
+ "modEoCCNU table missing (0x%0x != 0x%0x)\n",
+ rowreq_ctx->column_exists_flags,
+ EOCCBATADMINSNMPCOMMUNITYTABLE_REQUIRED_COLS));
+ return MFD_NOT_VALID_NOW;
+ }
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus =
+ ROWSTATUS_ACTIVE;
+ }
+ } /* row change */
+ }
+ else
+ {
+ /*
+ * must have row status to create a row
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable",
+ "must use RowStatus to create rows\n"));
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ else if (ROWSTATUS_ACTIVE ==
+ rowreq_ctx->data->eocCBATAdminSNMPCommunityRowStatus)
+ {
+
+ }
+ } /* row status not set */
+
+ if (MFD_SUCCESS != rc)
+ return rc;
+
+ return rc;
+} /* eocVLANTable_check_dependencies */
+
+/** @} */
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_set.h
new file mode 100644
index 0000000000..5e2b5a2fe4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_data_set.h
@@ -0,0 +1,65 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATADMINSNMPCOMMUNITYTABLE_DATA_SET_H
+#define EOCCBATADMINSNMPCOMMUNITYTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATAdminSNMPCommunityTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityTable is subid 4 of eocCBATSNMPSettingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4, length: 12
+*/
+
+
+int eocCBATAdminSNMPCommunityTable_undo_setup( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx);
+int eocCBATAdminSNMPCommunityTable_undo_cleanup( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx);
+int eocCBATAdminSNMPCommunityTable_undo( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx);
+int eocCBATAdminSNMPCommunityTable_commit( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx);
+int eocCBATAdminSNMPCommunityTable_undo_commit( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocCBATAdminSNMPCommunity_check_value( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, char *eocCBATAdminSNMPCommunity_val_ptr, size_t eocCBATAdminSNMPCommunity_val_ptr_len);
+int eocCBATAdminSNMPCommunity_undo_setup( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx );
+int eocCBATAdminSNMPCommunity_set( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, char *eocCBATAdminSNMPCommunity_val_ptr, size_t eocCBATAdminSNMPCommunity_val_ptr_len );
+int eocCBATAdminSNMPCommunity_undo( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATAdminSNMPCommunityPermission_check_value( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, u_long eocCBATAdminSNMPCommunityPermission_val);
+int eocCBATAdminSNMPCommunityPermission_undo_setup( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx );
+int eocCBATAdminSNMPCommunityPermission_set( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, u_long eocCBATAdminSNMPCommunityPermission_val );
+int eocCBATAdminSNMPCommunityPermission_undo( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATAdminSNMPCommunityRowStatus_check_value( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, u_long eocCBATAdminSNMPCommunityRowStatus_val);
+int eocCBATAdminSNMPCommunityRowStatus_undo_setup( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx );
+int eocCBATAdminSNMPCommunityRowStatus_set( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, u_long eocCBATAdminSNMPCommunityRowStatus_val );
+int eocCBATAdminSNMPCommunityRowStatus_undo( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocCBATAdminSNMPCommunityTable_check_dependencies(eocCBATAdminSNMPCommunityTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATADMINSNMPCOMMUNITYTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_enums.h
new file mode 100644
index 0000000000..234c68272a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_enums.h
@@ -0,0 +1,77 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATADMINSNMPCOMMUNITYTABLE_ENUMS_H
+#define EOCCBATADMINSNMPCOMMUNITYTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocCBATAdminSNMPCommunityTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCBATAdminSNMPCommunityPermission (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCBATADMINSNMPCOMMUNITYPERMISSION_ENUMS
+#define EOCCBATADMINSNMPCOMMUNITYPERMISSION_ENUMS
+
+#define EOCCBATADMINSNMPCOMMUNITYPERMISSION_RW 1
+#define EOCCBATADMINSNMPCOMMUNITYPERMISSION_RO 2
+#define EOCCBATADMINSNMPCOMMUNITYPERMISSION_WO 3
+
+#endif /* EOCCBATADMINSNMPCOMMUNITYPERMISSION_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCBATAdminSNMPCommunityRowStatus (RowStatus / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef ROWSTATUS_ENUMS
+#define ROWSTATUS_ENUMS
+
+#define ROWSTATUS_ACTIVE 1
+#define ROWSTATUS_NOTINSERVICE 2
+#define ROWSTATUS_NOTREADY 3
+#define ROWSTATUS_CREATEANDGO 4
+#define ROWSTATUS_CREATEANDWAIT 5
+#define ROWSTATUS_DESTROY 6
+
+#endif /* ROWSTATUS_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATADMINSNMPCOMMUNITYTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_interface.c
new file mode 100644
index 0000000000..50f59512ef
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_interface.c
@@ -0,0 +1,1910 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATAdminSNMPCommunityTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocCBATAdminSNMPCommunityTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATAdminSNMPCommunityTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATAdminSNMPCommunityTable is subid 4 of eocCBATSNMPSettingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.1.4.4, length: 12
+*/
+typedef struct eocCBATAdminSNMPCommunityTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocCBATAdminSNMPCommunityTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocCBATAdminSNMPCommunityTable_interface_ctx;
+
+static eocCBATAdminSNMPCommunityTable_interface_ctx eocCBATAdminSNMPCommunityTable_if_ctx;
+
+static void _eocCBATAdminSNMPCommunityTable_container_init(
+ eocCBATAdminSNMPCommunityTable_interface_ctx *if_ctx);
+static void _eocCBATAdminSNMPCommunityTable_container_shutdown(
+ eocCBATAdminSNMPCommunityTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocCBATAdminSNMPCommunityTable_container_get( void )
+{
+ return eocCBATAdminSNMPCommunityTable_if_ctx.container;
+}
+
+eocCBATAdminSNMPCommunityTable_registration *
+eocCBATAdminSNMPCommunityTable_registration_get( void )
+{
+ return eocCBATAdminSNMPCommunityTable_if_ctx.user_ctx;
+}
+
+eocCBATAdminSNMPCommunityTable_registration *
+eocCBATAdminSNMPCommunityTable_registration_set( eocCBATAdminSNMPCommunityTable_registration * newreg )
+{
+ eocCBATAdminSNMPCommunityTable_registration * old = eocCBATAdminSNMPCommunityTable_if_ctx.user_ctx;
+ eocCBATAdminSNMPCommunityTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocCBATAdminSNMPCommunityTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocCBATAdminSNMPCommunityTable_if_ctx.container);
+}
+
+u_int
+eocCBATAdminSNMPCommunityTable_dirty_get( void )
+{
+ return eocCBATAdminSNMPCommunityTable_if_ctx.table_dirty;
+}
+
+void
+eocCBATAdminSNMPCommunityTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocCBATAdminSNMPCommunityTable_if_ctx.table_dirty, status));
+ eocCBATAdminSNMPCommunityTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocCBATAdminSNMPCommunityTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocCBATAdminSNMPCommunityTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocCBATAdminSNMPCommunityTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocCBATAdminSNMPCommunityTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocCBATAdminSNMPCommunityTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocCBATAdminSNMPCommunityTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocCBATAdminSNMPCommunityTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocCBATAdminSNMPCommunityTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocCBATAdminSNMPCommunityTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocCBATAdminSNMPCommunityTable_commit;
+static Netsnmp_Node_Handler _mfd_eocCBATAdminSNMPCommunityTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocCBATAdminSNMPCommunityTable_irreversible_commit;
+static Netsnmp_Node_Handler
+ _mfd_eocCBATAdminSNMPCommunityTable_check_dependencies;
+
+
+NETSNMP_STATIC_INLINE int _eocCBATAdminSNMPCommunityTable_undo_column( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+NETSNMP_STATIC_INLINE int _eocCBATAdminSNMPCommunityTable_check_indexes(eocCBATAdminSNMPCommunityTable_rowreq_ctx * rowreq_ctx);
+
+
+/**
+ * @internal
+ * Initialize the table eocCBATAdminSNMPCommunityTable
+ * (Define its contents and how it's structured)
+ */
+
+void
+adminsnmpcommunity_container_init (void)
+{
+ static int done = 0;
+
+ if (done)
+ return;
+
+ DEBUGMSGTL (("internal:eocCBATAdminSNMPCommunityTable:"
+ "adminsnmpcommunity_container_init", "called\n"));
+
+ done = 1;
+
+ /*
+ * set up the container
+ */
+ _eocCBATAdminSNMPCommunityTable_container_init (
+ &eocCBATAdminSNMPCommunityTable_if_ctx);
+}
+
+
+void
+_eocCBATAdminSNMPCommunityTable_initialize_interface(eocCBATAdminSNMPCommunityTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocCBATAdminSNMPCommunityTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocCBATAdminSNMPCommunityTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_eocCBATAdminSNMPCommunityTable_initialize_interface","called\n"));
+
+ (void) adminsnmpcommunity_container_init ();
+ if (NULL == eocCBATAdminSNMPCommunityTable_if_ctx.container)
+ return; /* msg already logged */
+
+ /*************************************************
+ *
+ * save interface context for eocCBATAdminSNMPCommunityTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocCBATAdminSNMPCommunityIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCCBATADMINSNMPCOMMUNITYTABLE_MIN_COL;
+ tbl_info->max_column = EOCCBATADMINSNMPCOMMUNITYTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocCBATAdminSNMPCommunityTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocCBATAdminSNMPCommunityTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocCBATAdminSNMPCommunityTable_container_init(&eocCBATAdminSNMPCommunityTable_if_ctx);
+ if (NULL == eocCBATAdminSNMPCommunityTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocCBATAdminSNMPCommunityTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocCBATAdminSNMPCommunityTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocCBATAdminSNMPCommunityTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocCBATAdminSNMPCommunityTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocCBATAdminSNMPCommunityTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocCBATAdminSNMPCommunityTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocCBATAdminSNMPCommunityTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocCBATAdminSNMPCommunityTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocCBATAdminSNMPCommunityTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocCBATAdminSNMPCommunityTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocCBATAdminSNMPCommunityTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocCBATAdminSNMPCommunityTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocCBATAdminSNMPCommunityTable_irreversible_commit;
+ /*
+ * REQUIRED for tables with dependencies
+ */
+ access_multiplexer->consistency_checks =
+ _mfd_eocCBATAdminSNMPCommunityTable_check_dependencies;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable:init_eocCBATAdminSNMPCommunityTable",
+ "Registering eocCBATAdminSNMPCommunityTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocCBATAdminSNMPCommunityTable", handler,
+ eocCBATAdminSNMPCommunityTable_oid,
+ eocCBATAdminSNMPCommunityTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocCBATAdminSNMPCommunityTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocCBATAdminSNMPCommunityTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocCBATAdminSNMPCommunityTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocCBATAdminSNMPCommunityTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocCBATAdminSNMPCommunityTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocCBATAdminSNMPCommunityTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocCBATAdminSNMPCommunityTable
+ */
+void
+_eocCBATAdminSNMPCommunityTable_shutdown_interface(eocCBATAdminSNMPCommunityTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocCBATAdminSNMPCommunityTable_container_shutdown(&eocCBATAdminSNMPCommunityTable_if_ctx);
+}
+
+void
+eocCBATAdminSNMPCommunityTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocCBATAdminSNMPCommunityTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocCBATAdminSNMPCommunityTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocCBATAdminSNMPCommunityTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCBATAdminSNMPCommunityTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCBATAdminSNMPCommunityIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCBATAdminSNMPCommunityIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCBATAdminSNMPCommunityIndex, 0x00, sizeof(var_eocCBATAdminSNMPCommunityIndex) );
+ var_eocCBATAdminSNMPCommunityIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCBATAdminSNMPCommunityIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_index_to_oid","called\n"));
+
+ /* eocCBATAdminSNMPCommunityIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCBATAdminSNMPCommunityIndex, (u_char*)&mib_idx->eocCBATAdminSNMPCommunityIndex,
+ sizeof(mib_idx->eocCBATAdminSNMPCommunityIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocCBATAdminSNMPCommunityIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCBATAdminSNMPCommunityIndex );
+
+ return err;
+} /* eocCBATAdminSNMPCommunityTable_index_to_oid */
+
+/**
+ * extract eocCBATAdminSNMPCommunityTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocCBATAdminSNMPCommunityTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCBATAdminSNMPCommunityTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCBATAdminSNMPCommunityIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCBATAdminSNMPCommunityIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCBATAdminSNMPCommunityIndex, 0x00, sizeof(var_eocCBATAdminSNMPCommunityIndex) );
+ var_eocCBATAdminSNMPCommunityIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCBATAdminSNMPCommunityIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocCBATAdminSNMPCommunityIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocCBATAdminSNMPCommunityIndex = *((long *)var_eocCBATAdminSNMPCommunityIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCBATAdminSNMPCommunityIndex );
+
+ return err;
+} /* eocCBATAdminSNMPCommunityTable_index_from_oid */
+
+
+/*
+ * eocCBATAdminSNMPCommunityTable_allocate_data
+ *
+ * Purpose: create new eocCBATAdminSNMPCommunityTable_data.
+ */
+eocCBATAdminSNMPCommunityTable_data *
+eocCBATAdminSNMPCommunityTable_allocate_data(void)
+{
+ eocCBATAdminSNMPCommunityTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocCBATAdminSNMPCommunityTable_data);
+
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocCBATAdminSNMPCommunityTable_data.\n");
+ }
+ else
+ {
+ /* initialization of fields added for container comparison */
+ rtn->oid_index.len = 1;
+ rtn->oid_index.oids = &rtn->st_index;
+ }
+ return rtn;
+} /* eocCBATAdminSNMPCommunityTable_allocate_data */
+
+/*
+ * eocCBATAdminSNMPCommunityTable_release_data
+ *
+ * Purpose: release eocCBATAdminSNMPCommunityTable data.
+ */
+void
+eocCBATAdminSNMPCommunityTable_release_data(eocCBATAdminSNMPCommunityTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_release_data","called\n"));
+
+ if (NULL == data)
+ return;
+ free(data);
+} /* eocCBATAdminSNMPCommunityTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocCBATAdminSNMPCommunityTable_rowreq_ctx
+ */
+eocCBATAdminSNMPCommunityTable_rowreq_ctx *
+eocCBATAdminSNMPCommunityTable_allocate_rowreq_ctx (
+ eocCBATAdminSNMPCommunityTable_data * data,
+ void *user_init_ctx)
+{
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocCBATAdminSNMPCommunityTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocCBATAdminSNMPCommunityTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ else
+ {
+ if (NULL != data)
+ {
+ /*
+ * track if we got data from user
+ */
+ DEBUGMSGTL (("internal:eocCBATAdminSNMPCommunityTable:"
+ "eocCBATAdminSNMPCommunityTable_allocate"
+ "_rowreq_ctx", "data got from user\n"));
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DATA_FROM_USER;
+ rowreq_ctx->data = data;
+
+ /* TEMP: maybe set column_exists_flags somewhere else? */
+ /* TODO: check if index flag can be set here? */
+
+ if (NULL == rowreq_ctx->data->eocCBATAdminSNMPCommunity)
+ {
+ DEBUGMSGTL (("internal:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_allocate"
+ "_rowreq_ctx", "config file index invalid\n"));
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCBATADMINSNMPCOMMUNITY_FLAG;
+ }
+
+
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION_FLAG;
+
+ /* Row Status flag set to existing for allocation purposes */
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS_FLAG;
+ }
+ else if (NULL == (rowreq_ctx->data = eocCBATAdminSNMPCommunityTable_allocate_data ()))
+ {
+ SNMP_FREE (rowreq_ctx);
+ return NULL;
+ }
+ }
+
+ /*
+ * undo context will be allocated when needed (in *_undo_setup)
+ */
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocCBATAdminSNMPCommunityTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocCBATAdminSNMPCommunityTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocCBATAdminSNMPCommunityTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocCBATAdminSNMPCommunityTable_rowreq_ctx
+ */
+void
+eocCBATAdminSNMPCommunityTable_release_rowreq_ctx(eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:eocCBATAdminSNMPCommunityTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if ((rowreq_ctx->data) && !(rowreq_ctx->rowreq_flags
+ & MFD_ROW_DATA_FROM_USER))
+ {
+ eocCBATAdminSNMPCommunityTable_release_data (rowreq_ctx->data);
+ }
+
+ if(rowreq_ctx->undo)
+ eocCBATAdminSNMPCommunityTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocCBATAdminSNMPCommunityTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCBATAdminSNMPCommunityTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocCBATAdminSNMPCommunityTable_pre_request(eocCBATAdminSNMPCommunityTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable","error %d from "
+ "eocCBATAdminSNMPCommunityTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATAdminSNMPCommunityTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCBATAdminSNMPCommunityTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocCBATAdminSNMPCommunityTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocCBATAdminSNMPCommunityTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocCBATAdminSNMPCommunityTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocCBATAdminSNMPCommunityTable_post_request(eocCBATAdminSNMPCommunityTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable","error %d from "
+ "eocCBATAdminSNMPCommunityTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATAdminSNMPCommunityTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static eocCBATAdminSNMPCommunityTable_rowreq_ctx *
+_mfd_eocCBATAdminSNMPCommunityTable_rowreq_from_index(netsnmp_index *oid_idx, int * rc_ptr)
+{
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx * rowreq_ctx;
+ eocCBATAdminSNMPCommunityTable_mib_index mib_idx;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_rowreq_from_index",
+ "called\n"));
+
+ if (NULL == rc_ptr)
+ rc_ptr = &rc;
+ *rc_ptr = MFD_SUCCESS;
+
+ memset(&mib_idx, 0x0, sizeof(mib_idx));
+
+ /*
+ * try to parse oid
+ */
+ *rc_ptr = eocCBATAdminSNMPCommunityTable_index_from_oid(oid_idx, &mib_idx);
+ if(MFD_SUCCESS != *rc_ptr) {
+ DEBUGMSGT(("eocCBATAdminSNMPCommunityTable", "error parsing index\n"));
+ return NULL;
+ }
+
+ /*
+ * allocate new context
+ */
+ rowreq_ctx = eocCBATAdminSNMPCommunityTable_allocate_rowreq_ctx (NULL, NULL);
+ if (NULL == rowreq_ctx) {
+ *rc_ptr = MFD_ERROR;
+ return NULL; /* msg already logged */
+ }
+
+ memcpy(&rowreq_ctx->tbl_idx, &mib_idx, sizeof(mib_idx));
+
+ /*
+ * check indexes
+ */
+ *rc_ptr = _eocCBATAdminSNMPCommunityTable_check_indexes(rowreq_ctx);
+ if(MFD_SUCCESS != *rc_ptr) {
+ netsnmp_assert((*rc_ptr == SNMP_ERR_NOCREATION) ||
+ (*rc_ptr == SNMP_ERR_INCONSISTENTNAME));
+ eocCBATAdminSNMPCommunityTable_release_rowreq_ctx(rowreq_ctx);
+ return NULL;
+ }
+
+ /*
+ * copy indexes
+ */
+ rowreq_ctx->oid_idx.len = oid_idx->len;
+ memcpy(rowreq_ctx->oid_idx.oids, oid_idx->oids, oid_idx->len * sizeof(oid));
+
+ return rowreq_ctx;
+} /* _mfd_eocCBATAdminSNMPCommunityTable_rowreq_from_index */
+
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCBATAdminSNMPCommunityTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocCBATAdminSNMPCommunityTable_interface_ctx *if_ctx =
+ * (eocCBATAdminSNMPCommunityTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ netsnmp_table_request_info *tblreq_info;
+ netsnmp_index oid_idx;
+
+ tblreq_info = netsnmp_extract_table_info(requests);
+ if(NULL == tblreq_info) {
+ snmp_log(LOG_ERR, "request had no table info\n");
+ return MFD_ERROR;
+ }
+
+ /*
+ * try create rowreq
+ */
+ oid_idx.oids = tblreq_info->index_oid;
+ oid_idx.len = tblreq_info->index_oid_len;
+
+ rowreq_ctx = _mfd_eocCBATAdminSNMPCommunityTable_rowreq_from_index(&oid_idx, &rc);
+ if(MFD_SUCCESS == rc) {
+ netsnmp_assert(NULL != rowreq_ctx);
+ rowreq_ctx->rowreq_flags |= MFD_ROW_CREATED;
+ /*
+ * add rowreq_ctx to request data lists
+ */
+ netsnmp_container_table_row_insert(requests, (netsnmp_index*)rowreq_ctx);
+ }
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocCBATAdminSNMPCommunityTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocCBATAdminSNMPCommunityTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATAdminSNMPCommunityTable_get_column( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCBATAdminSNMPCommunity(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITY:
+ if (! (COLUMN_EOCCBATADMINSNMPCOMMUNITY_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_get_column",
+ "column %d (eocCBATAdminSNMPCommunity) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->type = ASN_OCTET_STR;
+rc = eocCBATAdminSNMPCommunity_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCBATAdminSNMPCommunityPermission(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION:
+ if (! (COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_get_column",
+ "column %d (eocCBATAdminSNMPCommunityPermission) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCBATAdminSNMPCommunityPermission_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCBATAdminSNMPCommunityRowStatus(4)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS:
+ if (! (COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_get_column",
+ "column %d (eocCBATAdminSNMPCommunityRowStatus) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCBATAdminSNMPCommunityRowStatus_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ default:
+ if (EOCCBATADMINSNMPCOMMUNITYTABLE_MIN_COL <= column && column <= EOCCBATADMINSNMPCOMMUNITYTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocCBATAdminSNMPCommunityTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocCBATAdminSNMPCommunityTable_get_column */
+
+int
+_mfd_eocCBATAdminSNMPCommunityTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ DEBUGMSGTL(("9:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_get_values",
+ "exists %p\n", (void*)rowreq_ctx->column_exists_flags));
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATAdminSNMPCommunityTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATAdminSNMPCommunityTable_get_values */
+
+NETSNMP_STATIC_INLINE int
+_eocCBATAdminSNMPCommunityTable_check_indexes(eocCBATAdminSNMPCommunityTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_eocCBATAdminSNMPCommunityTable_check_indexes","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+
+ /* (INDEX) eocCBATAdminSNMPCommunityIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = eocCBATAdminSNMPCommunityIndex_check_index( rowreq_ctx );
+ if(MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * if individual parts look ok, check them as a whole
+ */
+ return eocCBATAdminSNMPCommunityTable_validate_index( eocCBATAdminSNMPCommunityTable_if_ctx.user_ctx, rowreq_ctx );
+} /* _eocCBATAdminSNMPCommunityTable_check_indexes */
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATAdminSNMPCommunityTable_check_column( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_eocCBATAdminSNMPCommunityTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocCBATAdminSNMPCommunityIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITYINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocCBATAdminSNMPCommunity(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITY:
+ rc = netsnmp_check_vb_type_and_max_size( var, ASN_OCTET_STR,
+ sizeof( rowreq_ctx->data->eocCBATAdminSNMPCommunity ) );
+ /* check defined range(s). */
+ if( (SNMPERR_SUCCESS == rc)
+ && ((var->val_len < 1) || (var->val_len > 16))
+ ) {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable:_eocCBATAdminSNMPCommunityTable_check_column:eocCBATAdminSNMPCommunity",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATAdminSNMPCommunity_check_value( rowreq_ctx, (char *)var->val.string, var->val_len );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATAdminSNMPCommunity_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCBATAdminSNMPCommunityPermission(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data->eocCBATAdminSNMPCommunityPermission ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCBATADMINSNMPCOMMUNITYPERMISSION_RW )
+ && ( *var->val.integer != EOCCBATADMINSNMPCOMMUNITYPERMISSION_RO )
+ && ( *var->val.integer != EOCCBATADMINSNMPCOMMUNITYPERMISSION_WO )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable:_eocCBATAdminSNMPCommunityTable_check_column:eocCBATAdminSNMPCommunityPermission",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATAdminSNMPCommunityPermission_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATAdminSNMPCommunityPermission_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCBATAdminSNMPCommunityRowStatus(4)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS:
+rc = netsnmp_check_vb_rowstatus_value(var);
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable:_eocCBATAdminSNMPCommunityTable_check_column:eocCBATAdminSNMPCommunityRowStatus",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATAdminSNMPCommunityRowStatus_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATAdminSNMPCommunityRowStatus_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocCBATAdminSNMPCommunityTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocCBATAdminSNMPCommunityTable_check_column */
+
+int
+_mfd_eocCBATAdminSNMPCommunityTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATAdminSNMPCommunityTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATAdminSNMPCommunityTable_check_objects */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: check dependencies
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check dependencies wrapper
+ */
+static int
+_mfd_eocCBATAdminSNMPCommunityTable_check_dependencies (
+ netsnmp_mib_handler * handler,
+ netsnmp_handler_registration * reginfo,
+ netsnmp_agent_request_info *
+ agtreq_info,
+ netsnmp_request_info * requests)
+{
+ int rc;
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract (requests);
+ DEBUGMSGTL (("internal:eocCBATAdminSNMPCommunityTable:"
+ "mfd_eocCBATAdminSNMPCommunityTable_check_dependencies",
+ "called\n"));
+
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ rc = eocCBATAdminSNMPCommunityTable_check_dependencies (rowreq_ctx);
+ if (rc)
+ {
+ DEBUGMSGTL (("eocCBATAdminSNMPCommunityTable:mfd", "error %d from "
+ "eocCBATAdminSNMPCommunityTable_check_dependencies\n",
+ rc));
+ netsnmp_request_set_error_all (requests, SNMP_VALIDATE_ERR (rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocVLANTable_check_dependencies */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATAdminSNMPCommunityTable_undo_setup_column( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_eocCBATAdminSNMPCommunityTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCBATAdminSNMPCommunity(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITY:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATADMINSNMPCOMMUNITY_FLAG;
+ rc = eocCBATAdminSNMPCommunity_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCBATAdminSNMPCommunityPermission(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION_FLAG;
+ rc = eocCBATAdminSNMPCommunityPermission_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCBATAdminSNMPCommunityRowStatus(4)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS_FLAG;
+ rc = eocCBATAdminSNMPCommunityRowStatus_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCBATAdminSNMPCommunityTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCBATAdminSNMPCommunityTable_undo_setup_column */
+
+
+/* TODO: check if this is really necessary? */
+int
+_mfd_eocCBATAdminSNMPCommunity_undo_setup_allocate (eocCBATAdminSNMPCommunityTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ if (NULL == rowreq_ctx)
+ return MFD_ERROR;
+
+ /*
+ * other tables share our container/context and call
+ * this function. so we need to check and see if
+ * someone else already allocated data
+ */
+ if (NULL == rowreq_ctx->undo)
+ {
+ rowreq_ctx->undo = eocCBATAdminSNMPCommunityTable_allocate_data ();
+ if (NULL == rowreq_ctx->undo)
+ {
+ /** msg already logged */
+ rc = SNMP_ERR_RESOURCEUNAVAILABLE;
+ }
+ else
+ {
+ /* TODO: check if something should be done here? */
+ }
+ }
+ ++rowreq_ctx->undo_ref_count;
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_undo_setup_allocate",
+ "++undo_refcount = %d\n",rowreq_ctx->undo_ref_count));
+
+ return rc;
+}
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCBATAdminSNMPCommunityTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocCBATAdminSNMPCommunityTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocCBATAdminSNMPCommunityTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable:mfd","error %d from "
+ "eocCBATAdminSNMPCommunityTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATAdminSNMPCommunityTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable:mfd","error %d from "
+ "eocCBATAdminSNMPCommunityTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATAdminSNMPCommunityTable_undo_setup */
+
+
+void
+_mfd_eocCBATAdminSNMPCommunityTable_undo_setup_release (eocCBATAdminSNMPCommunityTable_rowreq_ctx * rowreq_ctx)
+{
+ DEBUGMSGTL (("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_undo"
+ "_setup_release", "called\n"));
+
+ netsnmp_assert (rowreq_ctx->undo_ref_count > 0);
+ --rowreq_ctx->undo_ref_count;
+ snmp_log (LOG_ERR, "undo_refcount at %d\n", rowreq_ctx->undo_ref_count);
+
+ if (0 == rowreq_ctx->undo_ref_count)
+ {
+ eocCBATAdminSNMPCommunityTable_release_data (rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+}
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCBATAdminSNMPCommunityTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocCBATAdminSNMPCommunityTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable:mfd","error %d from "
+ "eocCBATAdminSNMPCommunityTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ _mfd_eocCBATAdminSNMPCommunityTable_undo_setup_release (rowreq_ctx);
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATAdminSNMPCommunityTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATAdminSNMPCommunityTable_set_column( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_eocCBATAdminSNMPCommunityTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCBATAdminSNMPCommunity(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITY:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATADMINSNMPCOMMUNITY_FLAG;
+ rc = eocCBATAdminSNMPCommunity_set(rowreq_ctx, (char *)var->val.string, var->val_len );
+ break;
+
+ /* eocCBATAdminSNMPCommunityPermission(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION_FLAG;
+ rc = eocCBATAdminSNMPCommunityPermission_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCBATAdminSNMPCommunityRowStatus(4)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS_FLAG;
+ rc = eocCBATAdminSNMPCommunityRowStatus_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCBATAdminSNMPCommunityTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocCBATAdminSNMPCommunityTable_set_column */
+
+int
+_mfd_eocCBATAdminSNMPCommunityTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATAdminSNMPCommunityTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable:mfd","error %d from "
+ "eocCBATAdminSNMPCommunityTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATAdminSNMPCommunityTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocCBATAdminSNMPCommunityTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCBATAdminSNMPCommunityTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable:mfd","error %d from "
+ "eocCBATAdminSNMPCommunityTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocCBATAdminSNMPCommunityTable_dirty_set( eocCBATAdminSNMPCommunityTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocCBATAdminSNMPCommunityTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocCBATAdminSNMPCommunityTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocCBATAdminSNMPCommunityTable_dirty_set( d - 1 );
+ }
+
+ rc = eocCBATAdminSNMPCommunityTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable:mfd","error %d from "
+ "eocCBATAdminSNMPCommunityTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocCBATAdminSNMPCommunityTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATAdminSNMPCommunityTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATAdminSNMPCommunityTable_undo_column( eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_eocCBATAdminSNMPCommunityTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCBATAdminSNMPCommunity(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITY:
+ rc = eocCBATAdminSNMPCommunity_undo(rowreq_ctx);
+ break;
+
+ /* eocCBATAdminSNMPCommunityPermission(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION:
+ rc = eocCBATAdminSNMPCommunityPermission_undo(rowreq_ctx);
+ break;
+
+ /* eocCBATAdminSNMPCommunityRowStatus(4)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS:
+ rc = eocCBATAdminSNMPCommunityRowStatus_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCBATAdminSNMPCommunityTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCBATAdminSNMPCommunityTable_undo_column */
+
+int
+_mfd_eocCBATAdminSNMPCommunityTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCBATAdminSNMPCommunityTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable:mfd","error %d from "
+ "eocCBATAdminSNMPCommunityTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATAdminSNMPCommunityTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATAdminSNMPCommunityTable:mfd","error %d from "
+ "eocCBATAdminSNMPCommunityTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATAdminSNMPCommunityTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocCBATAdminSNMPCommunityTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_eocCBATAdminSNMPCommunityTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocCBATAdminSNMPCommunityTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_mfd_irreversible_commit",
+ "updating exists (%p) w/set (%p) = %p\n",
+ rowreq_ctx->column_exists_flags,
+ rowreq_ctx->column_set_flags,
+ (rowreq_ctx->column_exists_flags |
+ rowreq_ctx->column_set_flags)));
+ rowreq_ctx->column_exists_flags |=
+ rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+ }
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_CREATED;
+ CONTAINER_INSERT(eocCBATAdminSNMPCommunityTable_if_ctx.container, rowreq_ctx);
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATAdminSNMPCommunityTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load (netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL (("internal:eocCBATAdminSNMPCommunityTable:_cache_load",
+ "called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic))
+ {
+ snmp_log (LOG_ERR,
+ "invalid cache for \
+ eocCBATAdminSNMPCommunityTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert ((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ if (adding_snmpcommunity)
+ {
+ snmp_log (LOG_ERR, "skipping eocCBATAdminSNMPCommunityTable_cache_load, row adding "
+ "in progress\n");
+ return SNMP_ERR_NOERROR;
+ }
+ else
+ {
+ return eocCBATAdminSNMPCommunityTable_container_load (
+ (netsnmp_container *) cache->magic);
+ }
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocCBATAdminSNMPCommunityTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ if (!adding_snmpcommunity)
+ {
+ _container_free (container);
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "skipping eocCBATAdminSNMPCommunityTable_cache_free, row adding "
+ "in progress\n");
+ }
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_container_item_free","called\n"));
+ int ret;
+ char key_buffer[LIBSPID_KEY_MAX_LEN];
+ if(NULL == rowreq_ctx)
+ return;
+
+ strcpy (key_buffer, rowreq_ctx->data->eocCBATAdminSNMPCommunity);
+
+ /* remove new comm name of current item from internal storage list */
+ if (NULL != se_find_slist ("eoc_comm_list"))
+ {
+ ret = se_remove_label_from_slist ("eoc_comm_list", key_buffer);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR, "Error! comm name not found in the table!\n");
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "Trying to delete from empty comm name list!\n");
+ }
+
+ eocCBATAdminSNMPCommunityTable_release_rowreq_ctx(rowreq_ctx);
+
+
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocCBATAdminSNMPCommunityTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocCBATAdminSNMPCommunityTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocCBATAdminSNMPCommunityTable_container_init(eocCBATAdminSNMPCommunityTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_eocCBATAdminSNMPCommunityTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocCBATAdminSNMPCommunityTable_oid,
+ eocCBATAdminSNMPCommunityTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocCBATAdminSNMPCommunityTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocCBATAdminSNMPCommunityTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocCBATAdminSNMPCommunityTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocCBATAdminSNMPCommunityTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocCBATAdminSNMPCommunityTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocCBATAdminSNMPCommunityTable_container_shutdown(eocCBATAdminSNMPCommunityTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCBATAdminSNMPCommunityTable:_eocCBATAdminSNMPCommunityTable_container_shutdown","called\n"));
+
+ eocCBATAdminSNMPCommunityTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocCBATAdminSNMPCommunityTable_container_shutdown */
+
+
+eocCBATAdminSNMPCommunityTable_rowreq_ctx *
+eocCBATAdminSNMPCommunityTable_row_find_by_mib_index(eocCBATAdminSNMPCommunityTable_mib_index *mib_idx)
+{
+ eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocCBATAdminSNMPCommunityTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocCBATAdminSNMPCommunityTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_interface.h
new file mode 100644
index 0000000000..fd6bbcfae7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_interface.h
@@ -0,0 +1,89 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCCBATADMINSNMPCOMMUNITYTABLE_INTERFACE_H
+#define EOCCBATADMINSNMPCOMMUNITYTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocCBATAdminSNMPCommunityTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocCBATAdminSNMPCommunityTable_initialize_interface(eocCBATAdminSNMPCommunityTable_registration * user_ctx,
+ u_long flags);
+void _eocCBATAdminSNMPCommunityTable_shutdown_interface(eocCBATAdminSNMPCommunityTable_registration * user_ctx);
+
+eocCBATAdminSNMPCommunityTable_registration *
+eocCBATAdminSNMPCommunityTable_registration_get( void );
+
+eocCBATAdminSNMPCommunityTable_registration *
+eocCBATAdminSNMPCommunityTable_registration_set( eocCBATAdminSNMPCommunityTable_registration * newreg );
+
+netsnmp_container *eocCBATAdminSNMPCommunityTable_container_get( void );
+int eocCBATAdminSNMPCommunityTable_container_size( void );
+
+u_int eocCBATAdminSNMPCommunityTable_dirty_get( void );
+void eocCBATAdminSNMPCommunityTable_dirty_set( u_int status );
+
+eocCBATAdminSNMPCommunityTable_data *
+eocCBATAdminSNMPCommunityTable_allocate_data (void);
+eocCBATAdminSNMPCommunityTable_rowreq_ctx * eocCBATAdminSNMPCommunityTable_allocate_rowreq_ctx(eocCBATAdminSNMPCommunityTable_data *,void *);
+void eocCBATAdminSNMPCommunityTable_release_rowreq_ctx(eocCBATAdminSNMPCommunityTable_rowreq_ctx *rowreq_ctx);
+
+int eocCBATAdminSNMPCommunityTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCBATAdminSNMPCommunityTable_mib_index *mib_idx);
+int eocCBATAdminSNMPCommunityTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCBATAdminSNMPCommunityTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocCBATAdminSNMPCommunityTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATADMINSNMPCOMMUNITYTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_oids.h
new file mode 100644
index 0000000000..395528ff72
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATAdminSNMPCommunityTable/eocCBATAdminSNMPCommunityTable_oids.h
@@ -0,0 +1,54 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATADMINSNMPCOMMUNITYTABLE_OIDS_H
+#define EOCCBATADMINSNMPCOMMUNITYTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* OID definition for scalar added to table eocCBATAdminSNMPCommunityTable */
+#define EOCCBATADMINSNMPCOMMUNITYTABLENEXTINDEX_OID 1,3,6,1,4,1,17409,2,4,1,4,3
+
+/* column number definitions for table eocCBATAdminSNMPCommunityTable */
+#define EOCCBATADMINSNMPCOMMUNITYTABLE_OID 1,3,6,1,4,1,17409,2,4,1,4,4
+
+
+#define COLUMN_EOCCBATADMINSNMPCOMMUNITYINDEX 1
+
+#define COLUMN_EOCCBATADMINSNMPCOMMUNITY 2
+#define COLUMN_EOCCBATADMINSNMPCOMMUNITY_FLAG (0x1 << 1)
+
+#define COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION 3
+#define COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION_FLAG (0x1 << 2)
+
+#define COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS 4
+#define COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS_FLAG (0x1 << 3)
+
+
+#define EOCCBATADMINSNMPCOMMUNITYTABLE_MIN_COL COLUMN_EOCCBATADMINSNMPCOMMUNITY
+#define EOCCBATADMINSNMPCOMMUNITYTABLE_MAX_COL COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS
+
+
+ /*
+ * TODO:405:r: Review EOCCBATADMINSNMPCOMMUNITYTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCCBATADMINSNMPCOMMUNITYTABLE_SETTABLE_COLS (COLUMN_EOCCBATADMINSNMPCOMMUNITY_FLAG | COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION_FLAG | COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS_FLAG)
+ /*
+ * TODO:405:r: Review EOCCBATADMINSNMPCOMMUNITYTABLE_REQUIRED_COLS macro.
+ * OR together all the required rows for row creation.
+ * default is writable cols w/out defaults.
+ */
+#define EOCCBATADMINSNMPCOMMUNITYTABLE_REQUIRED_COLS (COLUMN_EOCCBATADMINSNMPCOMMUNITY_FLAG | COLUMN_EOCCBATADMINSNMPCOMMUNITYPERMISSION_FLAG | COLUMN_EOCCBATADMINSNMPCOMMUNITYROWSTATUS_FLAG)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATADMINSNMPCOMMUNITYTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATSNMPSettingGroup.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATSNMPSettingGroup.c
new file mode 100644
index 0000000000..e334621875
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATSNMPSettingGroup.c
@@ -0,0 +1,96 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37: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 "eocCBATSNMPSettingGroup.h"
+
+/** Initializes the eocCBATSNMPSettingGroup module */
+void
+init_eocCBATSNMPSettingGroup(void)
+{
+ static oid eocCBATAdminVarBindings_oid[] = { 1,3,6,1,4,1,17409,2,4,1,4,1 };
+ static oid eocCBATAdminSNMPVersion_oid[] = { 1,3,6,1,4,1,17409,2,4,1,4,2 };
+
+ DEBUGMSGTL(("eocCBATSNMPSettingGroup", "Initializing\n"));
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminVarBindings", handle_eocCBATAdminVarBindings,
+ eocCBATAdminVarBindings_oid, OID_LENGTH(eocCBATAdminVarBindings_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCBATAdminSNMPVersion", handle_eocCBATAdminSNMPVersion,
+ eocCBATAdminSNMPVersion_oid, OID_LENGTH(eocCBATAdminSNMPVersion_oid),
+ HANDLER_CAN_RONLY
+ ));
+}
+
+int
+handle_eocCBATAdminVarBindings(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int bind_num = EOCCBATADMIN_VARBINDINGS_MAX_NB;
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+
+ case MODE_GET:
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *)&bind_num,
+ sizeof (bind_num));
+ break;
+
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR, "unknown mode (%d) in "
+ "handle_eocCBATAdminVarBindings\n", reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+int
+handle_eocCBATAdminSNMPVersion(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ admin_cbat_snmp_version_t snmp_version = ADMIN_CBAT_SNMP_V2;
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *)&snmp_version,
+ sizeof (snmp_version));
+ break;
+
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR, "unknown mode (%d) in "
+ "handle_eocCBATAdminSNMPVersion\n", reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATSNMPSettingGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATSNMPSettingGroup.h
new file mode 100644
index 0000000000..a9cbc40162
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCBATSNMPSettingGroup/eocCBATSNMPSettingGroup.h
@@ -0,0 +1,18 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+ */
+#ifndef EOCCBATSNMPSETTINGGROUP_H
+#define EOCCBATSNMPSETTINGGROUP_H
+
+/* include common header */
+#include "EoCCommon.h"
+
+
+/* function declarations */
+void init_eocCBATSNMPSettingGroup(void);
+Netsnmp_Node_Handler handle_eocCBATAdminVarBindings;
+Netsnmp_Node_Handler handle_eocCBATAdminSNMPVersion;
+Netsnmp_Node_Handler handle_eocCBATAdminSNMPCommunityTableNextIndex;
+
+#endif /* EOCCBATSNMPSETTINGGROUP_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects.h
new file mode 100644
index 0000000000..ce35500433
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects.h
@@ -0,0 +1 @@
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects.h
new file mode 100644
index 0000000000..1451a5f19e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects.h
@@ -0,0 +1 @@
+config_require(mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects/eocCbatExtendGlobalObjects)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects/eocCbatExtendGlobalObjects.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects/eocCbatExtendGlobalObjects.c
new file mode 100644
index 0000000000..8bac5275c3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects/eocCbatExtendGlobalObjects.c
@@ -0,0 +1,73 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37: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 "eocCbatExtendGlobalObjects.h"
+
+/** Initializes the eocCbatExtendGlobalObjects module */
+void
+init_eocCbatExtendGlobalObjects(void)
+{
+ static oid eocCbatUplinkOnuMacAddress_oid[] = { 1,3,6,1,4,1,17409,2,4,1,100,1,1 };
+
+ DEBUGMSGTL(("eocCbatExtendGlobalObjects", "Initializing\n"));
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCbatUplinkOnuMacAddress", handle_eocCbatUplinkOnuMacAddress,
+ eocCbatUplinkOnuMacAddress_oid, OID_LENGTH(eocCbatUplinkOnuMacAddress_oid),
+ HANDLER_CAN_RONLY
+ ));
+}
+
+int
+handle_eocCbatUplinkOnuMacAddress(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+ int ret;
+ char admin_mac_addr[LIBSPID_MAC_BIN_LEN];
+ char buffer[LIBSPID_CONFIG_KEY_MAX_LEN];
+
+ switch (reqinfo->mode)
+ {
+
+ case MODE_GET:
+ memset (admin_mac_addr, 0, sizeof (admin_mac_addr));
+
+ ret = libspid_config_read_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_ONU_MAC,
+ buffer,
+ LIBSPID_CONFIG_KEY_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ }
+ else
+ {
+ libspid_mac_str_to_bin (buffer, admin_mac_addr);
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ (u_char *)admin_mac_addr,
+ sizeof (admin_mac_addr));
+ break;
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCbatUplinkOnuMacAddress\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects/eocCbatExtendGlobalObjects.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects/eocCbatExtendGlobalObjects.h
new file mode 100644
index 0000000000..fce9b00e38
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATAdminGroup/eocCbatExtendObjects/eocCbatExtendGlobalObjects/eocCbatExtendGlobalObjects.h
@@ -0,0 +1,14 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+ */
+#ifndef EOCCBATEXTENDGLOBALOBJECTS_H
+#define EOCCBATEXTENDGLOBALOBJECTS_H
+/* include common header */
+#include "EoCCommon.h"
+
+/* function declarations */
+void init_eocCbatExtendGlobalObjects(void);
+Netsnmp_Node_Handler handle_eocCbatUplinkOnuMacAddress;
+
+#endif /* EOCCBATEXTENDGLOBALOBJECTS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup.h
new file mode 100644
index 0000000000..8d050114bb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup.h
@@ -0,0 +1,2 @@
+config_require(mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable)
+config_require(mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable.h
new file mode 100644
index 0000000000..5411c92632
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_get)
+config_require(mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable)
+config_require(mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_set)
+config_require(mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_access)
+config_require(mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_interface)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/defaults/node-eocCBATCardMACCNUIsolationEN.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/defaults/node-eocCBATCardMACCNUIsolationEN.m2d
new file mode 100644
index 0000000000..7727fe0c8a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/defaults/node-eocCBATCardMACCNUIsolationEN.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardMACCNUIsolationEN
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/defaults/node-eocCBATCardMACCNUIsolationIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/defaults/node-eocCBATCardMACCNUIsolationIndex.m2d
new file mode 100644
index 0000000000..23d642db7b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/defaults/node-eocCBATCardMACCNUIsolationIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardMACCNUIsolationIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/defaults/table-eocCBATCardMACCNUIsolationTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/defaults/table-eocCBATCardMACCNUIsolationTable.m2d
new file mode 100644
index 0000000000..ffc9123e1b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/defaults/table-eocCBATCardMACCNUIsolationTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocCBATCardMACCNUIsolationTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable-README-FIRST.txt
new file mode 100644
index 0000000000..072e453f1d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocCBATCardMACCNUIsolationTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocCBATCardMACCNUIsolationTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocCBATCardMACCNUIsolationTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocCBATCardMACCNUIsolationTable_Makefile
+
+
+ File : eocCBATCardMACCNUIsolationTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocCBATCardMACCNUIsolationTable-README-eocCBATCardMACCNUIsolationTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocCBATCardMACCNUIsolationTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocCBATCardMACCNUIsolationTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocCBATCardMACCNUIsolationTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocCBATCardMACCNUIsolationTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable-README-eocCBATCardMACCNUIsolationTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable-README-eocCBATCardMACCNUIsolationTable.txt
new file mode 100644
index 0000000000..1934979a22
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable-README-eocCBATCardMACCNUIsolationTable.txt
@@ -0,0 +1,545 @@
+************************************************************************
+eocCBATCardMACCNUIsolationTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocCBATCardMACCNUIsolationTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocCBATCardMACCNUIsolationTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocCBATCardMACCNUIsolationTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCBATCardMACCNUIsolationTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCBATCardMACCNUIsolationTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCBATCardMACCNUIsolationTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCBATCardMACCNUIsolationTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocCBATCardMACCNUIsolationTable_allocate_data
+ eocCBATCardMACCNUIsolationTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx_init
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocCBATCardMACCNUIsolationTable table
+ ------------------------------------------------------------
+ The index(es) for the eocCBATCardMACCNUIsolationTable table are:
+
+ eocCBATCardMACCNUIsolationIndex:
+ Syntax: INTEGER32
+ DataType: INTEGER32
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocCBATCardMACCNUIsolationTable_data.
+
+
+************************************************************************
+eocCBATCardMACCNUIsolationTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocCBATCardMACCNUIsolationTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocCBATCardMACCNUIsolationTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocCBATCardMACCNUIsolationTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocCBATCardMACCNUIsolationTable_indexes_set
+ WHERE: eocCBATCardMACCNUIsolationTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocCBATCardMACCNUIsolationTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocCBATCardMACCNUIsolationTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardMACCNUIsolationEN_get
+
+
+
+File: eocCBATCardMACCNUIsolationTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocCBATCardMACCNUIsolationTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table does not support ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocCBATCardMACCNUIsolationTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardMACCNUIsolationEN_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardMACCNUIsolationEN_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardMACCNUIsolationEN_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardMACCNUIsolationEN_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocCBATCardMACCNUIsolationTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocCBATCardMACCNUIsolationTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocCBATCardMACCNUIsolationTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocCBATCardMACCNUIsolationTable table.
+
+To watch the flow of the eocCBATCardMACCNUIsolationTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocCBATCardMACCNUIsolationTable
+ verbose:eocCBATCardMACCNUIsolationTable
+ internal:eocCBATCardMACCNUIsolationTable
+
+e.g.
+ snmpd -f -Le -DeocCBATCardMACCNUIsolationTable,verbose:eocCBATCardMACCNUIsolationTable,internal:eocCBATCardMACCNUIsolationTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardMACCNUIsolationTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardMACCNUIsolationTable is subid 1 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.1, length: 11
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardMACCNUIsolationEntry.eocCBATCardMACCNUIsolationIndex
+ * eocCBATCardMACCNUIsolationIndex is subid 1 of eocCBATCardMACCNUIsolationEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.1.1.1
+ * Description:
+
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardMACCNUIsolationEntry.eocCBATCardMACCNUIsolationEN
+ * eocCBATCardMACCNUIsolationEN is subid 2 of eocCBATCardMACCNUIsolationEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.1.1.2
+ * Description:
+
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable.c
new file mode 100644
index 0000000000..b4449209b9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable.c
@@ -0,0 +1,218 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocCBATCardMACCNUIsolationTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardMACCNUIsolationTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocCBATCardMACCNUIsolationTable_interface.h"
+
+oid eocCBATCardMACCNUIsolationTable_oid[] = { EOCCBATCARDMACCNUISOLATIONTABLE_OID };
+int eocCBATCardMACCNUIsolationTable_oid_size = OID_LENGTH(eocCBATCardMACCNUIsolationTable_oid);
+
+ eocCBATCardMACCNUIsolationTable_registration eocCBATCardMACCNUIsolationTable_user_context;
+
+void initialize_table_eocCBATCardMACCNUIsolationTable(void);
+void shutdown_table_eocCBATCardMACCNUIsolationTable(void);
+
+
+/**
+ * Initializes the eocCBATCardMACCNUIsolationTable module
+ */
+void
+init_eocCBATCardMACCNUIsolationTable(void)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:init_eocCBATCardMACCNUIsolationTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocCBATCardMACCNUIsolationTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocCBATCardMACCNUIsolationTable"))
+ initialize_table_eocCBATCardMACCNUIsolationTable();
+
+} /* init_eocCBATCardMACCNUIsolationTable */
+
+/**
+ * Shut-down the eocCBATCardMACCNUIsolationTable module (agent is exiting)
+ */
+void
+shutdown_eocCBATCardMACCNUIsolationTable(void)
+{
+ if (should_init("eocCBATCardMACCNUIsolationTable"))
+ shutdown_table_eocCBATCardMACCNUIsolationTable();
+
+}
+
+/**
+ * Initialize the table eocCBATCardMACCNUIsolationTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocCBATCardMACCNUIsolationTable(void)
+{
+ eocCBATCardMACCNUIsolationTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:initialize_table_eocCBATCardMACCNUIsolationTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocCBATCardMACCNUIsolationTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocCBATCardMACCNUIsolationTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocCBATCardMACCNUIsolationTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocCBATCardMACCNUIsolationTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocCBATCardMACCNUIsolationTable */
+
+/**
+ * Shutdown the table eocCBATCardMACCNUIsolationTable
+ */
+void
+shutdown_table_eocCBATCardMACCNUIsolationTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocCBATCardMACCNUIsolationTable_shutdown_interface(&eocCBATCardMACCNUIsolationTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocCBATCardMACCNUIsolationTable_rowreq_ctx_init(eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocCBATCardMACCNUIsolationTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATCardMACCNUIsolationTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocCBATCardMACCNUIsolationTable_rowreq_ctx_cleanup(eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocCBATCardMACCNUIsolationTable rowreq cleanup.
+ */
+} /* eocCBATCardMACCNUIsolationTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocCBATCardMACCNUIsolationTable_pre_request(eocCBATCardMACCNUIsolationTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocCBATCardMACCNUIsolationTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATCardMACCNUIsolationTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocCBATCardMACCNUIsolationTable_post_request(eocCBATCardMACCNUIsolationTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocCBATCardMACCNUIsolationTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocCBATCardMACCNUIsolationTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocCBATCardMACCNUIsolationTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocCBATCardMACCNUIsolationTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable.h
new file mode 100644
index 0000000000..55d13e3e63
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable.h
@@ -0,0 +1,193 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDMACCNUISOLATIONTABLE_H
+#define EOCCBATCARDMACCNUISOLATIONTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+/* other required module components */
+ /* *INDENT-OFF* */
+ /* *INDENT-ON* */
+
+/* OID and column number definitions for eocCBATCardMACCNUIsolationTable */
+#include "eocCBATCardMACCNUIsolationTable_oids.h"
+
+/* enum definions */
+#include "eocCBATCardMACCNUIsolationTable_enums.h"
+
+#include "EoCCommon.h"
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocCBATCardMACCNUIsolationTable(void);
+void shutdown_eocCBATCardMACCNUIsolationTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardMACCNUIsolationTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardMACCNUIsolationTable is subid 1 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.1, length: 11
+*/
+/* *********************************************************************
+ * 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 eocCBATCardMACCNUIsolationTable registration context.
+ */
+typedef netsnmp_data_list eocCBATCardMACCNUIsolationTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocCBATCardMACCNUIsolationTable data context structure.
+ * This structure is used to represent the data for eocCBATCardMACCNUIsolationTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocCBATCardMACCNUIsolationTable.
+ */
+typedef struct eocCBATCardMACCNUIsolationTable_data_s {
+
+ /*
+ * eocCBATCardMACCNUIsolationEN(2)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCBATCardMACCNUIsolationEN;
+
+} eocCBATCardMACCNUIsolationTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocCBATCardMACCNUIsolationTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocCBATCardMACCNUIsolationTable_data eocCBATCardMACCNUIsolationTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocCBATCardMACCNUIsolationTable mib index.
+ * This structure is used to represent the index for eocCBATCardMACCNUIsolationTable.
+ */
+typedef struct eocCBATCardMACCNUIsolationTable_mib_index_s {
+
+ /*
+ * eocCBATCardMACCNUIsolationIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCBATCardMACCNUIsolationIndex;
+
+
+} eocCBATCardMACCNUIsolationTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocCBATCardMACCNUIsolationTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocCBATCardMACCNUIsolationTable_IDX_LEN 1
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocCBATCardMACCNUIsolationTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocCBATCardMACCNUIsolationTable_rowreq_ctx pointer.
+ */
+typedef struct eocCBATCardMACCNUIsolationTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocCBATCardMACCNUIsolationTable_IDX_LEN];
+
+ eocCBATCardMACCNUIsolationTable_mib_index tbl_idx;
+
+ eocCBATCardMACCNUIsolationTable_data data;
+ eocCBATCardMACCNUIsolationTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocCBATCardMACCNUIsolationTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocCBATCardMACCNUIsolationTable_data_list;
+
+} eocCBATCardMACCNUIsolationTable_rowreq_ctx;
+
+typedef struct eocCBATCardMACCNUIsolationTable_ref_rowreq_ctx_s {
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx;
+} eocCBATCardMACCNUIsolationTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocCBATCardMACCNUIsolationTable_pre_request(eocCBATCardMACCNUIsolationTable_registration * user_context);
+ int eocCBATCardMACCNUIsolationTable_post_request(eocCBATCardMACCNUIsolationTable_registration * user_context,
+ int rc);
+
+ int eocCBATCardMACCNUIsolationTable_rowreq_ctx_init(eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocCBATCardMACCNUIsolationTable_rowreq_ctx_cleanup(eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx);
+
+ int eocCBATCardMACCNUIsolationTable_commit(eocCBATCardMACCNUIsolationTable_rowreq_ctx * rowreq_ctx);
+
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *
+ eocCBATCardMACCNUIsolationTable_row_find_by_mib_index(eocCBATCardMACCNUIsolationTable_mib_index *mib_idx);
+
+extern oid eocCBATCardMACCNUIsolationTable_oid[];
+extern int eocCBATCardMACCNUIsolationTable_oid_size;
+
+
+#include "eocCBATCardMACCNUIsolationTable_interface.h"
+#include "eocCBATCardMACCNUIsolationTable_data_access.h"
+#include "eocCBATCardMACCNUIsolationTable_data_get.h"
+#include "eocCBATCardMACCNUIsolationTable_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 /* EOCCBATCARDMACCNUISOLATIONTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_access.c
new file mode 100644
index 0000000000..8cdfc4ac84
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_access.c
@@ -0,0 +1,349 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardMACCNUIsolationTable.h"
+
+
+#include "eocCBATCardMACCNUIsolationTable_data_access.h"
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardMACCNUIsolationTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardMACCNUIsolationTable is subid 1 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.1, length: 11
+*/
+
+/**
+ * initialization for eocCBATCardMACCNUIsolationTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocCBATCardMACCNUIsolationTable_reg
+ * Pointer to eocCBATCardMACCNUIsolationTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocCBATCardMACCNUIsolationTable_init_data(eocCBATCardMACCNUIsolationTable_registration * eocCBATCardMACCNUIsolationTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocCBATCardMACCNUIsolationTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATCardMACCNUIsolationTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocCBATCardMACCNUIsolationTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocCBATCardMACCNUIsolationTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocCBATCardMACCNUIsolationTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocCBATCardMACCNUIsolationTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCCBATCARDMACCNUISOLATIONTABLE_CACHE_TIMEOUT; /* seconds */
+} /* eocCBATCardMACCNUIsolationTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocCBATCardMACCNUIsolationTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocCBATCardMACCNUIsolationTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocCBATCardMACCNUIsolationTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocCBATCardMACCNUIsolationTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocCBATCardMACCNUIsolationTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocCBATCardMACCNUIsolationTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocCBATCardMACCNUIsolationTable_container_load(netsnmp_container *container)
+{
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocCBATCardMACCNUIsolationIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCBATCardMACCNUIsolationIndex = 0;
+
+ u_long eocCBATCardMACCNUIsolationEN = 0;
+
+ char buffer[LIBSPID_CONFIG_KEY_MAX_LEN];
+ int ret;
+ DEBUGMSGTL (("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_container_load", "called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocCBATCardMACCNUIsolationTable container.
+ * loop over your eocCBATCardMACCNUIsolationTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ /* no need for a loop because index is always 1, so there is only one row in a table */
+
+ /*
+ * TODO:352:M: | |-> set indexes in new eocCBATCardMACCNUIsolationTable
+ * rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocCBATCardMACCNUIsolationTable_allocate_rowreq_ctx (NULL);
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if (MFD_SUCCESS !=
+ eocCBATCardMACCNUIsolationTable_indexes_set (rowreq_ctx,
+ eocCBATCardMACCNUIsolationIndex))
+ {
+ snmp_log (LOG_ERR, "error setting index while loading "
+ "eocCBATCardMACCNUIsolationTable data.\n");
+ eocCBATCardMACCNUIsolationTable_release_rowreq_ctx (rowreq_ctx);
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+
+ /*
+ * TODO:352:r: | |-> populate eocCBATCardMACCNUIsolationTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocCBATCardMACCNUIsolationEN
+ * eocCBATCardMACCNUIsolationEN(2)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ /** no mapping */
+ /* read buffer for CNU Isolation Enable from conf file */
+ ret = libspid_config_read_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_ISOLATION_ENABLE,
+ buffer, LIBSPID_CONFIG_KEY_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* CNU Isolation Enable set to disabled to permit walk requests */
+ eocCBATCardMACCNUIsolationEN =
+ EOCCBATCARDMACCNUISOLATIONEN_DISABLE;
+ }
+ else
+ {
+ /* parse CNU Isolation Enable from buffer */
+ if (!strncmp (buffer, LIBSPID_MASTER_CONF_VALUE_YES,
+ strlen (LIBSPID_MASTER_CONF_VALUE_YES)))
+ {
+ eocCBATCardMACCNUIsolationEN =
+ EOCCBATCARDMACCNUISOLATIONEN_ENABLE;
+ }
+ else if (!strncmp (buffer, LIBSPID_MASTER_CONF_VALUE_NO,
+ strlen (LIBSPID_MASTER_CONF_VALUE_NO)))
+ {
+ eocCBATCardMACCNUIsolationEN =
+ EOCCBATCARDMACCNUISOLATIONEN_DISABLE;
+ }
+ else
+ {
+ eocCBATCardMACCNUIsolationEN = EOCCBATCARDMACCNUISOLATIONEN_DISABLE; /* disabled CNU isolation is presumed as default */
+ }
+ }
+ rowreq_ctx->data.eocCBATCardMACCNUIsolationEN = eocCBATCardMACCNUIsolationEN;
+
+
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT (container, rowreq_ctx);
+ ++count;
+
+ DEBUGMSGT(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_container_load",
+ "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+} /* eocCBATCardMACCNUIsolationTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocCBATCardMACCNUIsolationTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocCBATCardMACCNUIsolationTable container data.
+ */
+} /* eocCBATCardMACCNUIsolationTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocCBATCardMACCNUIsolationTable_row_prep( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATCardMACCNUIsolationTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_access.h
new file mode 100644
index 0000000000..4fb46afccd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_access.h
@@ -0,0 +1,63 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDMACCNUISOLATIONTABLE_DATA_ACCESS_H
+#define EOCCBATCARDMACCNUISOLATIONTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardMACCNUIsolationTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardMACCNUIsolationTable is subid 1 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.1, length: 11
+*/
+
+
+ int eocCBATCardMACCNUIsolationTable_init_data(eocCBATCardMACCNUIsolationTable_registration * eocCBATCardMACCNUIsolationTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocCBATCardMACCNUIsolationTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCCBATCARDMACCNUISOLATIONTABLE_CACHE_TIMEOUT 60
+
+void eocCBATCardMACCNUIsolationTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocCBATCardMACCNUIsolationTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocCBATCardMACCNUIsolationTable_container_load(netsnmp_container *container);
+void eocCBATCardMACCNUIsolationTable_container_free(netsnmp_container *container);
+
+int eocCBATCardMACCNUIsolationTable_cache_load(netsnmp_container *container);
+void eocCBATCardMACCNUIsolationTable_cache_free(netsnmp_container *container);
+
+ int eocCBATCardMACCNUIsolationTable_row_prep( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDMACCNUISOLATIONTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_get.c
new file mode 100644
index 0000000000..9a95548d87
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_get.c
@@ -0,0 +1,161 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardMACCNUIsolationTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocCBATCardMACCNUIsolationTable get routines.
+ * TODO:240:M: Implement eocCBATCardMACCNUIsolationTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardMACCNUIsolationTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardMACCNUIsolationTable is subid 1 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.1, length: 11
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocCBATCardMACCNUIsolationTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocCBATCardMACCNUIsolationIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocCBATCardMACCNUIsolationTable_indexes_set_tbl_idx(eocCBATCardMACCNUIsolationTable_mib_index *tbl_idx, long eocCBATCardMACCNUIsolationIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocCBATCardMACCNUIsolationIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCBATCardMACCNUIsolationIndex = eocCBATCardMACCNUIsolationIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardMACCNUIsolationTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocCBATCardMACCNUIsolationTable_indexes_set(eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx, long eocCBATCardMACCNUIsolationIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocCBATCardMACCNUIsolationTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocCBATCardMACCNUIsolationIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocCBATCardMACCNUIsolationTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCBATCardMACCNUIsolationTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardMACCNUIsolationEntry.eocCBATCardMACCNUIsolationEN
+ * eocCBATCardMACCNUIsolationEN is subid 2 of eocCBATCardMACCNUIsolationEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.1.1.2
+ * Description:
+
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCBATCardMACCNUIsolationEN data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardMACCNUIsolationEN_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardMACCNUIsolationEN_get( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATCardMACCNUIsolationEN_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardMACCNUIsolationEN_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationEN_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardMACCNUIsolationEN data.
+ * copy (* eocCBATCardMACCNUIsolationEN_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardMACCNUIsolationEN_val_ptr ) = rowreq_ctx->data.eocCBATCardMACCNUIsolationEN;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardMACCNUIsolationEN_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_get.h
new file mode 100644
index 0000000000..9a91c7ba3f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_get.h
@@ -0,0 +1,59 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocCBATCardMACCNUIsolationTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCCBATCARDMACCNUISOLATIONTABLE_DATA_GET_H
+#define EOCCBATCARDMACCNUISOLATIONTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardMACCNUIsolationTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardMACCNUIsolationTable is subid 1 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.1, length: 11
+*/
+ /*
+ * indexes
+ */
+
+ int eocCBATCardMACCNUIsolationEN_get( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATCardMACCNUIsolationEN_val_ptr );
+
+
+int eocCBATCardMACCNUIsolationTable_indexes_set_tbl_idx(eocCBATCardMACCNUIsolationTable_mib_index *tbl_idx, long eocCBATCardMACCNUIsolationIndex_val);
+int eocCBATCardMACCNUIsolationTable_indexes_set(eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx, long eocCBATCardMACCNUIsolationIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDMACCNUISOLATIONTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_set.c
new file mode 100644
index 0000000000..73da9657ec
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_set.c
@@ -0,0 +1,607 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardMACCNUIsolationTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardMACCNUIsolationTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardMACCNUIsolationTable is subid 1 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.1, length: 11
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocCBATCardMACCNUIsolationTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocCBATCardMACCNUIsolationTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardMACCNUIsolationTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCBATCardMACCNUIsolationTable_undo_setup( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocCBATCardMACCNUIsolationTable undo.
+ * set up eocCBATCardMACCNUIsolationTable undo information, in preparation for a set.
+ * Undo storage is in (* eocCBATCardMACCNUIsolationEN_val_ptr )*
+ */
+
+ return rc;
+} /* eocCBATCardMACCNUIsolationTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardMACCNUIsolationTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCBATCardMACCNUIsolationTable_undo( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocCBATCardMACCNUIsolationTable undo.
+ * eocCBATCardMACCNUIsolationTable undo information, in response to a failed set.
+ * Undo storage is in (* eocCBATCardMACCNUIsolationEN_val_ptr )*
+ */
+
+ return rc;
+} /* eocCBATCardMACCNUIsolationTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardMACCNUIsolationTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCBATCardMACCNUIsolationTable_undo_cleanup( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocCBATCardMACCNUIsolationTable undo.
+ * Undo storage is in (* eocCBATCardMACCNUIsolationEN_val_ptr )*
+ */
+
+ return rc;
+} /* eocCBATCardMACCNUIsolationTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCBATCardMACCNUIsolationTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCBATCardMACCNUIsolationTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCBATCardMACCNUIsolationTable_commit( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL (("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocCBATCardMACCNUIsolationTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_EOCCBATCARDMACCNUISOLATIONEN_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCBATCARDMACCNUISOLATIONEN_FLAG; /* clear eocCBATCardMACCNUIsolationEN */
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardMACCNUIsolationEN.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardMACCNUIsolationEN
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCBATCARDMACCNUISOLATIONEN_FLAG;
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc)
+ {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags)
+ {
+ snmp_log (LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocCBATCardMACCNUIsolationTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCBATCardMACCNUIsolationTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCBATCardMACCNUIsolationTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCBATCardMACCNUIsolationTable_undo_commit( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_undo_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:485:M: |-> Undo eocCBATCardMACCNUIsolationTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocCBATCardMACCNUIsolationTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocCBATCardMACCNUIsolationTable node value checks.
+ * TODO:450:M: Implement eocCBATCardMACCNUIsolationTable undo functions.
+ * TODO:460:M: Implement eocCBATCardMACCNUIsolationTable set functions.
+ * TODO:480:M: Implement eocCBATCardMACCNUIsolationTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardMACCNUIsolationEntry.eocCBATCardMACCNUIsolationEN
+ * eocCBATCardMACCNUIsolationEN is subid 2 of eocCBATCardMACCNUIsolationEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.1.1.2
+ * Description:
+
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardMACCNUIsolationEN_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardMACCNUIsolationTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of disable(0), enable(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardMACCNUIsolationEN_check_value( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardMACCNUIsolationEN_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationEN_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardMACCNUIsolationEN value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATCardMACCNUIsolationEN value not illegal */
+} /* eocCBATCardMACCNUIsolationEN_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardMACCNUIsolationTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardMACCNUIsolationTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardMACCNUIsolationEN_undo_setup( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationEN_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardMACCNUIsolationEN undo.
+ */
+ /*
+ * copy eocCBATCardMACCNUIsolationEN data
+ * set rowreq_ctx->undo->eocCBATCardMACCNUIsolationEN from rowreq_ctx->data.eocCBATCardMACCNUIsolationEN
+ */
+ rowreq_ctx->undo->eocCBATCardMACCNUIsolationEN = rowreq_ctx->data.eocCBATCardMACCNUIsolationEN;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardMACCNUIsolationEN_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardMACCNUIsolationEN_val
+ * A long containing the new value.
+ */
+int
+eocCBATCardMACCNUIsolationEN_set( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardMACCNUIsolationEN_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationEN_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCBATCardMACCNUIsolationEN value.
+ * set eocCBATCardMACCNUIsolationEN value in rowreq_ctx->data
+ */
+ switch (eocCBATCardMACCNUIsolationEN_val)
+ {
+ case EOCCBATCARDMACCNUISOLATIONEN_ENABLE:
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_ISOLATION_ENABLE,
+ LIBSPID_MASTER_CONF_VALUE_YES))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ /* save configuration file to flash */
+ if (LIBSPID_SUCCESS !=
+ libspid_system_save_file (LIBSPID_MASTER_CONF_PATH))
+ {
+ snmp_log (LOG_ERR, "libspid_system_save_file error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ break;
+
+ case EOCCBATCARDMACCNUISOLATIONEN_DISABLE:
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_ISOLATION_ENABLE,
+ LIBSPID_MASTER_CONF_VALUE_NO))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ /* save configuration file to flash */
+ if (LIBSPID_SUCCESS !=
+ libspid_system_save_file (LIBSPID_MASTER_CONF_PATH))
+ {
+ snmp_log (LOG_ERR, "libspid_system_save_file error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ break;
+
+ default:
+ snmp_log (LOG_ERR,
+ "couldn't reverse map value %ld for "
+ "eocCBATCardMACCNUIsolationEN\n",
+ eocCBATCardMACCNUIsolationEN_val);
+ return SNMP_ERR_GENERR;
+ }
+ rowreq_ctx->data.eocCBATCardMACCNUIsolationEN = eocCBATCardMACCNUIsolationEN_val;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardMACCNUIsolationEN_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardMACCNUIsolationEN_undo( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationEN_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardMACCNUIsolationEN undo.
+ */
+ switch (rowreq_ctx->undo->eocCBATCardMACCNUIsolationEN)
+ {
+ case EOCCBATCARDMACCNUISOLATIONEN_DISABLE:
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_ISOLATION_ENABLE,
+ LIBSPID_MASTER_CONF_VALUE_NO))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+
+ return SNMP_ERR_UNDOFAILED;
+ }
+ /* save configuration file to flash */
+ if (LIBSPID_SUCCESS !=
+ libspid_system_save_file (LIBSPID_MASTER_CONF_PATH))
+ {
+ snmp_log (LOG_ERR, "libspid_system_save_file error\n");
+
+ return SNMP_ERR_COMMITFAILED;
+ }
+
+ break;
+
+ case EOCCBATCARDMACCNUISOLATIONEN_ENABLE:
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_ISOLATION_ENABLE,
+ LIBSPID_MASTER_CONF_VALUE_YES))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+
+ return SNMP_ERR_UNDOFAILED;
+ }
+ /* save configuration file to flash */
+ if (LIBSPID_SUCCESS !=
+ libspid_system_save_file (LIBSPID_MASTER_CONF_PATH))
+ {
+ snmp_log (LOG_ERR, "libspid_system_save_file error\n");
+
+ return SNMP_ERR_COMMITFAILED;
+ }
+
+ break;
+
+ default:
+ snmp_log (LOG_ERR,
+ "couldn't reverse map value %ld for "
+ "undone modEoCCLTMACCNUIsolationEN\n",
+ rowreq_ctx->undo->eocCBATCardMACCNUIsolationEN);
+ return SNMP_ERR_GENERR;
+ }
+ /*
+ * copy eocCBATCardMACCNUIsolationEN data
+ * set rowreq_ctx->data.eocCBATCardMACCNUIsolationEN from rowreq_ctx->undo->eocCBATCardMACCNUIsolationEN
+ */
+ rowreq_ctx->data.eocCBATCardMACCNUIsolationEN = rowreq_ctx->undo->eocCBATCardMACCNUIsolationEN;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardMACCNUIsolationEN_undo */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_set.h
new file mode 100644
index 0000000000..80680670e1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_data_set.h
@@ -0,0 +1,55 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDMACCNUISOLATIONTABLE_DATA_SET_H
+#define EOCCBATCARDMACCNUISOLATIONTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardMACCNUIsolationTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardMACCNUIsolationTable is subid 1 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.1, length: 11
+*/
+
+
+int eocCBATCardMACCNUIsolationTable_undo_setup( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx);
+int eocCBATCardMACCNUIsolationTable_undo_cleanup( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx);
+int eocCBATCardMACCNUIsolationTable_undo( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx);
+int eocCBATCardMACCNUIsolationTable_commit( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx);
+int eocCBATCardMACCNUIsolationTable_undo_commit( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocCBATCardMACCNUIsolationEN_check_value( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardMACCNUIsolationEN_val);
+int eocCBATCardMACCNUIsolationEN_undo_setup( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardMACCNUIsolationEN_set( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardMACCNUIsolationEN_val );
+int eocCBATCardMACCNUIsolationEN_undo( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocCBATCardMACCNUIsolationTable_check_dependencies(eocCBATCardMACCNUIsolationTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDMACCNUISOLATIONTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_enums.h
new file mode 100644
index 0000000000..296ab671f4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_enums.h
@@ -0,0 +1,56 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDMACCNUISOLATIONTABLE_ENUMS_H
+#define EOCCBATCARDMACCNUISOLATIONTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocCBATCardMACCNUIsolationTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCBATCardMACCNUIsolationEN (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCBATCARDMACCNUISOLATIONEN_ENUMS
+#define EOCCBATCARDMACCNUISOLATIONEN_ENUMS
+
+#define EOCCBATCARDMACCNUISOLATIONEN_DISABLE 0
+#define EOCCBATCARDMACCNUISOLATIONEN_ENABLE 1
+
+#endif /* EOCCBATCARDMACCNUISOLATIONEN_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDMACCNUISOLATIONTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_interface.c
new file mode 100644
index 0000000000..5796abd87d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_interface.c
@@ -0,0 +1,1465 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardMACCNUIsolationTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocCBATCardMACCNUIsolationTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardMACCNUIsolationTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardMACCNUIsolationTable is subid 1 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.1, length: 11
+*/
+typedef struct eocCBATCardMACCNUIsolationTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocCBATCardMACCNUIsolationTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocCBATCardMACCNUIsolationTable_interface_ctx;
+
+static eocCBATCardMACCNUIsolationTable_interface_ctx eocCBATCardMACCNUIsolationTable_if_ctx;
+
+static void _eocCBATCardMACCNUIsolationTable_container_init(
+ eocCBATCardMACCNUIsolationTable_interface_ctx *if_ctx);
+static void _eocCBATCardMACCNUIsolationTable_container_shutdown(
+ eocCBATCardMACCNUIsolationTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocCBATCardMACCNUIsolationTable_container_get( void )
+{
+ return eocCBATCardMACCNUIsolationTable_if_ctx.container;
+}
+
+eocCBATCardMACCNUIsolationTable_registration *
+eocCBATCardMACCNUIsolationTable_registration_get( void )
+{
+ return eocCBATCardMACCNUIsolationTable_if_ctx.user_ctx;
+}
+
+eocCBATCardMACCNUIsolationTable_registration *
+eocCBATCardMACCNUIsolationTable_registration_set( eocCBATCardMACCNUIsolationTable_registration * newreg )
+{
+ eocCBATCardMACCNUIsolationTable_registration * old = eocCBATCardMACCNUIsolationTable_if_ctx.user_ctx;
+ eocCBATCardMACCNUIsolationTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocCBATCardMACCNUIsolationTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocCBATCardMACCNUIsolationTable_if_ctx.container);
+}
+
+u_int
+eocCBATCardMACCNUIsolationTable_dirty_get( void )
+{
+ return eocCBATCardMACCNUIsolationTable_if_ctx.table_dirty;
+}
+
+void
+eocCBATCardMACCNUIsolationTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocCBATCardMACCNUIsolationTable_if_ctx.table_dirty, status));
+ eocCBATCardMACCNUIsolationTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocCBATCardMACCNUIsolationTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocCBATCardMACCNUIsolationTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocCBATCardMACCNUIsolationTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocCBATCardMACCNUIsolationTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocCBATCardMACCNUIsolationTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocCBATCardMACCNUIsolationTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocCBATCardMACCNUIsolationTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocCBATCardMACCNUIsolationTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocCBATCardMACCNUIsolationTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocCBATCardMACCNUIsolationTable_commit;
+static Netsnmp_Node_Handler _mfd_eocCBATCardMACCNUIsolationTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocCBATCardMACCNUIsolationTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int _eocCBATCardMACCNUIsolationTable_undo_column( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+eocCBATCardMACCNUIsolationTable_data *eocCBATCardMACCNUIsolationTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table eocCBATCardMACCNUIsolationTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocCBATCardMACCNUIsolationTable_initialize_interface(eocCBATCardMACCNUIsolationTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocCBATCardMACCNUIsolationTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocCBATCardMACCNUIsolationTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_eocCBATCardMACCNUIsolationTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocCBATCardMACCNUIsolationTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocCBATCardMACCNUIsolationIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCCBATCARDMACCNUISOLATIONTABLE_MIN_COL;
+ tbl_info->max_column = EOCCBATCARDMACCNUISOLATIONTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocCBATCardMACCNUIsolationTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocCBATCardMACCNUIsolationTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocCBATCardMACCNUIsolationTable_container_init(&eocCBATCardMACCNUIsolationTable_if_ctx);
+ if (NULL == eocCBATCardMACCNUIsolationTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocCBATCardMACCNUIsolationTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocCBATCardMACCNUIsolationTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocCBATCardMACCNUIsolationTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocCBATCardMACCNUIsolationTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocCBATCardMACCNUIsolationTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocCBATCardMACCNUIsolationTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocCBATCardMACCNUIsolationTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocCBATCardMACCNUIsolationTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocCBATCardMACCNUIsolationTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocCBATCardMACCNUIsolationTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocCBATCardMACCNUIsolationTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocCBATCardMACCNUIsolationTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocCBATCardMACCNUIsolationTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocCBATCardMACCNUIsolationTable:init_eocCBATCardMACCNUIsolationTable",
+ "Registering eocCBATCardMACCNUIsolationTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocCBATCardMACCNUIsolationTable", handler,
+ eocCBATCardMACCNUIsolationTable_oid,
+ eocCBATCardMACCNUIsolationTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocCBATCardMACCNUIsolationTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocCBATCardMACCNUIsolationTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocCBATCardMACCNUIsolationTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocCBATCardMACCNUIsolationTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocCBATCardMACCNUIsolationTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocCBATCardMACCNUIsolationTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocCBATCardMACCNUIsolationTable
+ */
+void
+_eocCBATCardMACCNUIsolationTable_shutdown_interface(eocCBATCardMACCNUIsolationTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocCBATCardMACCNUIsolationTable_container_shutdown(&eocCBATCardMACCNUIsolationTable_if_ctx);
+}
+
+void
+eocCBATCardMACCNUIsolationTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocCBATCardMACCNUIsolationTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocCBATCardMACCNUIsolationTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocCBATCardMACCNUIsolationTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCBATCardMACCNUIsolationTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCBATCardMACCNUIsolationIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCBATCardMACCNUIsolationIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCBATCardMACCNUIsolationIndex, 0x00, sizeof(var_eocCBATCardMACCNUIsolationIndex) );
+ var_eocCBATCardMACCNUIsolationIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCBATCardMACCNUIsolationIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_index_to_oid","called\n"));
+
+ /* eocCBATCardMACCNUIsolationIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCBATCardMACCNUIsolationIndex, (u_char*)&mib_idx->eocCBATCardMACCNUIsolationIndex,
+ sizeof(mib_idx->eocCBATCardMACCNUIsolationIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocCBATCardMACCNUIsolationIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCBATCardMACCNUIsolationIndex );
+
+ return err;
+} /* eocCBATCardMACCNUIsolationTable_index_to_oid */
+
+/**
+ * extract eocCBATCardMACCNUIsolationTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocCBATCardMACCNUIsolationTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCBATCardMACCNUIsolationTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCBATCardMACCNUIsolationIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCBATCardMACCNUIsolationIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCBATCardMACCNUIsolationIndex, 0x00, sizeof(var_eocCBATCardMACCNUIsolationIndex) );
+ var_eocCBATCardMACCNUIsolationIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCBATCardMACCNUIsolationIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocCBATCardMACCNUIsolationIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocCBATCardMACCNUIsolationIndex = *((long *)var_eocCBATCardMACCNUIsolationIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCBATCardMACCNUIsolationIndex );
+
+ return err;
+} /* eocCBATCardMACCNUIsolationTable_index_from_oid */
+
+
+/*
+ * eocCBATCardMACCNUIsolationTable_allocate_data
+ *
+ * Purpose: create new eocCBATCardMACCNUIsolationTable_data.
+ */
+eocCBATCardMACCNUIsolationTable_data *
+eocCBATCardMACCNUIsolationTable_allocate_data(void)
+{
+ eocCBATCardMACCNUIsolationTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocCBATCardMACCNUIsolationTable_data);
+
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocCBATCardMACCNUIsolationTable_data.\n");
+ }
+
+ return rtn;
+} /* eocCBATCardMACCNUIsolationTable_allocate_data */
+
+/*
+ * eocCBATCardMACCNUIsolationTable_release_data
+ *
+ * Purpose: release eocCBATCardMACCNUIsolationTable data.
+ */
+void
+eocCBATCardMACCNUIsolationTable_release_data(eocCBATCardMACCNUIsolationTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_release_data","called\n"));
+
+ free(data);
+} /* eocCBATCardMACCNUIsolationTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocCBATCardMACCNUIsolationTable_rowreq_ctx
+ */
+eocCBATCardMACCNUIsolationTable_rowreq_ctx *
+eocCBATCardMACCNUIsolationTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocCBATCardMACCNUIsolationTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocCBATCardMACCNUIsolationTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocCBATCardMACCNUIsolationTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocCBATCardMACCNUIsolationTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocCBATCardMACCNUIsolationTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocCBATCardMACCNUIsolationTable_rowreq_ctx
+ */
+void
+eocCBATCardMACCNUIsolationTable_release_rowreq_ctx(eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:eocCBATCardMACCNUIsolationTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if(rowreq_ctx->undo)
+ eocCBATCardMACCNUIsolationTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocCBATCardMACCNUIsolationTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCBATCardMACCNUIsolationTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocCBATCardMACCNUIsolationTable_pre_request(eocCBATCardMACCNUIsolationTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardMACCNUIsolationTable","error %d from "
+ "eocCBATCardMACCNUIsolationTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardMACCNUIsolationTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCBATCardMACCNUIsolationTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocCBATCardMACCNUIsolationTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocCBATCardMACCNUIsolationTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocCBATCardMACCNUIsolationTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocCBATCardMACCNUIsolationTable_post_request(eocCBATCardMACCNUIsolationTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardMACCNUIsolationTable","error %d from "
+ "eocCBATCardMACCNUIsolationTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardMACCNUIsolationTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCBATCardMACCNUIsolationTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocCBATCardMACCNUIsolationTable_interface_ctx *if_ctx =
+ * (eocCBATCardMACCNUIsolationTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocCBATCardMACCNUIsolationTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocCBATCardMACCNUIsolationTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardMACCNUIsolationTable_get_column( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocCBATCardMACCNUIsolationIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCBATCARDMACCNUISOLATIONINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCBATCardMACCNUIsolationIndex;
+ break;
+
+ /* eocCBATCardMACCNUIsolationEN(2)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDMACCNUISOLATIONEN:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardMACCNUIsolationEN_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ default:
+ if (EOCCBATCARDMACCNUISOLATIONTABLE_MIN_COL <= column && column <= EOCCBATCARDMACCNUISOLATIONTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocCBATCardMACCNUIsolationTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocCBATCardMACCNUIsolationTable_get_column */
+
+int
+_mfd_eocCBATCardMACCNUIsolationTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardMACCNUIsolationTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardMACCNUIsolationTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardMACCNUIsolationTable_check_column( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_eocCBATCardMACCNUIsolationTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocCBATCardMACCNUIsolationIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCBATCARDMACCNUISOLATIONINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocCBATCardMACCNUIsolationEN(2)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDMACCNUISOLATIONEN:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCBATCardMACCNUIsolationEN ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCBATCARDMACCNUISOLATIONEN_DISABLE )
+ && ( *var->val.integer != EOCCBATCARDMACCNUISOLATIONEN_ENABLE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardMACCNUIsolationTable:_eocCBATCardMACCNUIsolationTable_check_column:eocCBATCardMACCNUIsolationEN",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardMACCNUIsolationEN_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardMACCNUIsolationEN_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocCBATCardMACCNUIsolationTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocCBATCardMACCNUIsolationTable_check_column */
+
+int
+_mfd_eocCBATCardMACCNUIsolationTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardMACCNUIsolationTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardMACCNUIsolationTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardMACCNUIsolationTable_undo_setup_column( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_eocCBATCardMACCNUIsolationTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCBATCardMACCNUIsolationEN(2)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDMACCNUISOLATIONEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDMACCNUISOLATIONEN_FLAG;
+ rc = eocCBATCardMACCNUIsolationEN_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCBATCardMACCNUIsolationTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCBATCardMACCNUIsolationTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCBATCardMACCNUIsolationTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocCBATCardMACCNUIsolationTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocCBATCardMACCNUIsolationTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardMACCNUIsolationTable:mfd","error %d from "
+ "eocCBATCardMACCNUIsolationTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardMACCNUIsolationTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardMACCNUIsolationTable:mfd","error %d from "
+ "eocCBATCardMACCNUIsolationTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardMACCNUIsolationTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCBATCardMACCNUIsolationTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocCBATCardMACCNUIsolationTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardMACCNUIsolationTable:mfd","error %d from "
+ "eocCBATCardMACCNUIsolationTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if(rowreq_ctx->undo) {
+ eocCBATCardMACCNUIsolationTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardMACCNUIsolationTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardMACCNUIsolationTable_set_column( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_eocCBATCardMACCNUIsolationTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCBATCardMACCNUIsolationEN(2)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDMACCNUISOLATIONEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDMACCNUISOLATIONEN_FLAG;
+ rc = eocCBATCardMACCNUIsolationEN_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCBATCardMACCNUIsolationTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocCBATCardMACCNUIsolationTable_set_column */
+
+int
+_mfd_eocCBATCardMACCNUIsolationTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardMACCNUIsolationTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardMACCNUIsolationTable:mfd","error %d from "
+ "eocCBATCardMACCNUIsolationTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardMACCNUIsolationTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocCBATCardMACCNUIsolationTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCBATCardMACCNUIsolationTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardMACCNUIsolationTable:mfd","error %d from "
+ "eocCBATCardMACCNUIsolationTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocCBATCardMACCNUIsolationTable_dirty_set( eocCBATCardMACCNUIsolationTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocCBATCardMACCNUIsolationTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocCBATCardMACCNUIsolationTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocCBATCardMACCNUIsolationTable_dirty_set( d - 1 );
+ }
+
+ rc = eocCBATCardMACCNUIsolationTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardMACCNUIsolationTable:mfd","error %d from "
+ "eocCBATCardMACCNUIsolationTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocCBATCardMACCNUIsolationTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardMACCNUIsolationTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardMACCNUIsolationTable_undo_column( eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_eocCBATCardMACCNUIsolationTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCBATCardMACCNUIsolationEN(2)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDMACCNUISOLATIONEN:
+ rc = eocCBATCardMACCNUIsolationEN_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCBATCardMACCNUIsolationTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCBATCardMACCNUIsolationTable_undo_column */
+
+int
+_mfd_eocCBATCardMACCNUIsolationTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCBATCardMACCNUIsolationTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardMACCNUIsolationTable:mfd","error %d from "
+ "eocCBATCardMACCNUIsolationTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardMACCNUIsolationTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardMACCNUIsolationTable:mfd","error %d from "
+ "eocCBATCardMACCNUIsolationTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardMACCNUIsolationTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocCBATCardMACCNUIsolationTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_mfd_eocCBATCardMACCNUIsolationTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocCBATCardMACCNUIsolationTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardMACCNUIsolationTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocCBATCardMACCNUIsolationTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocCBATCardMACCNUIsolationTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocCBATCardMACCNUIsolationTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocCBATCardMACCNUIsolationTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocCBATCardMACCNUIsolationTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocCBATCardMACCNUIsolationTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocCBATCardMACCNUIsolationTable_container_init(eocCBATCardMACCNUIsolationTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_eocCBATCardMACCNUIsolationTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocCBATCardMACCNUIsolationTable_oid,
+ eocCBATCardMACCNUIsolationTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocCBATCardMACCNUIsolationTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocCBATCardMACCNUIsolationTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocCBATCardMACCNUIsolationTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocCBATCardMACCNUIsolationTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocCBATCardMACCNUIsolationTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocCBATCardMACCNUIsolationTable_container_shutdown(eocCBATCardMACCNUIsolationTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCBATCardMACCNUIsolationTable:_eocCBATCardMACCNUIsolationTable_container_shutdown","called\n"));
+
+ eocCBATCardMACCNUIsolationTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocCBATCardMACCNUIsolationTable_container_shutdown */
+
+
+eocCBATCardMACCNUIsolationTable_rowreq_ctx *
+eocCBATCardMACCNUIsolationTable_row_find_by_mib_index(eocCBATCardMACCNUIsolationTable_mib_index *mib_idx)
+{
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocCBATCardMACCNUIsolationTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocCBATCardMACCNUIsolationTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_interface.h
new file mode 100644
index 0000000000..0f328a564f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_interface.h
@@ -0,0 +1,87 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCCBATCARDMACCNUISOLATIONTABLE_INTERFACE_H
+#define EOCCBATCARDMACCNUISOLATIONTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocCBATCardMACCNUIsolationTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocCBATCardMACCNUIsolationTable_initialize_interface(eocCBATCardMACCNUIsolationTable_registration * user_ctx,
+ u_long flags);
+void _eocCBATCardMACCNUIsolationTable_shutdown_interface(eocCBATCardMACCNUIsolationTable_registration * user_ctx);
+
+eocCBATCardMACCNUIsolationTable_registration *
+eocCBATCardMACCNUIsolationTable_registration_get( void );
+
+eocCBATCardMACCNUIsolationTable_registration *
+eocCBATCardMACCNUIsolationTable_registration_set( eocCBATCardMACCNUIsolationTable_registration * newreg );
+
+netsnmp_container *eocCBATCardMACCNUIsolationTable_container_get( void );
+int eocCBATCardMACCNUIsolationTable_container_size( void );
+
+u_int eocCBATCardMACCNUIsolationTable_dirty_get( void );
+void eocCBATCardMACCNUIsolationTable_dirty_set( u_int status );
+
+ eocCBATCardMACCNUIsolationTable_rowreq_ctx * eocCBATCardMACCNUIsolationTable_allocate_rowreq_ctx(void *);
+void eocCBATCardMACCNUIsolationTable_release_rowreq_ctx(eocCBATCardMACCNUIsolationTable_rowreq_ctx *rowreq_ctx);
+
+int eocCBATCardMACCNUIsolationTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCBATCardMACCNUIsolationTable_mib_index *mib_idx);
+int eocCBATCardMACCNUIsolationTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCBATCardMACCNUIsolationTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocCBATCardMACCNUIsolationTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDMACCNUISOLATIONTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_oids.h
new file mode 100644
index 0000000000..b53169bbba
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardMACCNUIsolationTable/eocCBATCardMACCNUIsolationTable_oids.h
@@ -0,0 +1,39 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDMACCNUISOLATIONTABLE_OIDS_H
+#define EOCCBATCARDMACCNUISOLATIONTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* column number definitions for table eocCBATCardMACCNUIsolationTable */
+#define EOCCBATCARDMACCNUISOLATIONTABLE_OID 1,3,6,1,4,1,17409,2,4,3,1
+
+
+#define COLUMN_EOCCBATCARDMACCNUISOLATIONINDEX 1
+
+#define COLUMN_EOCCBATCARDMACCNUISOLATIONEN 2
+#define COLUMN_EOCCBATCARDMACCNUISOLATIONEN_FLAG (0x1 << 0)
+
+
+#define EOCCBATCARDMACCNUISOLATIONTABLE_MIN_COL COLUMN_EOCCBATCARDMACCNUISOLATIONINDEX
+#define EOCCBATCARDMACCNUISOLATIONTABLE_MAX_COL COLUMN_EOCCBATCARDMACCNUISOLATIONEN
+
+
+ /*
+ * TODO:405:r: Review EOCCBATCARDMACCNUISOLATIONTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCCBATCARDMACCNUISOLATIONTABLE_SETTABLE_COLS (COLUMN_EOCCBATCARDMACCNUISOLATIONEN_FLAG)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDMACCNUISOLATIONTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable.h
new file mode 100644
index 0000000000..a983c8e21f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_get)
+config_require(mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_access)
+config_require(mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable)
+config_require(mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_interface)
+config_require(mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_set)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardConfigurationResult.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardConfigurationResult.m2d
new file mode 100644
index 0000000000..f59d6341b2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardConfigurationResult.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardConfigurationResult
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardConfigurationSaving.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardConfigurationSaving.m2d
new file mode 100644
index 0000000000..bd6cabb6aa
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardConfigurationSaving.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardConfigurationSaving
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardHardwareVersion.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardHardwareVersion.m2d
new file mode 100644
index 0000000000..8807e642ab
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardHardwareVersion.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardHardwareVersion
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardIndex.m2d
new file mode 100644
index 0000000000..c65f9f57e2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardLogicalID.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardLogicalID.m2d
new file mode 100644
index 0000000000..015a5c30c1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardLogicalID.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardLogicalID
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardMACAddress.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardMACAddress.m2d
new file mode 100644
index 0000000000..b19d0576b1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardMACAddress.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardMACAddress
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardManufactoryInfo.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardManufactoryInfo.m2d
new file mode 100644
index 0000000000..295cddd8fb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardManufactoryInfo.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardManufactoryInfo
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardModelNumber.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardModelNumber.m2d
new file mode 100644
index 0000000000..c581119a93
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardModelNumber.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardModelNumber
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardModelNumberProvisioned.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardModelNumberProvisioned.m2d
new file mode 100644
index 0000000000..a5b11033b6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardModelNumberProvisioned.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardModelNumberProvisioned
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardOnlineStatus.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardOnlineStatus.m2d
new file mode 100644
index 0000000000..b14d40cab7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardOnlineStatus.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardOnlineStatus
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardReset.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardReset.m2d
new file mode 100644
index 0000000000..a87d51f0ca
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardReset.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardReset
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardSerialNumber.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardSerialNumber.m2d
new file mode 100644
index 0000000000..13bd904581
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardSerialNumber.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardSerialNumber
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardSoftwareVersion.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardSoftwareVersion.m2d
new file mode 100644
index 0000000000..3a73c478a6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardSoftwareVersion.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardSoftwareVersion
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardTechProject.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardTechProject.m2d
new file mode 100644
index 0000000000..cd323f0623
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardTechProject.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardTechProject
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardTemperature.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardTemperature.m2d
new file mode 100644
index 0000000000..292cfe3d97
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardTemperature.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardTemperature
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkBroadcastFrameSendIntervalT1.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkBroadcastFrameSendIntervalT1.m2d
new file mode 100644
index 0000000000..953f8d6f4a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkBroadcastFrameSendIntervalT1.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardUpLinkBroadcastFrameSendIntervalT1
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkBroadcastFrameSendIntervalT2.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkBroadcastFrameSendIntervalT2.m2d
new file mode 100644
index 0000000000..3090b9e857
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkBroadcastFrameSendIntervalT2.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardUpLinkBroadcastFrameSendIntervalT2
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkDeviceMACAddress.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkDeviceMACAddress.m2d
new file mode 100644
index 0000000000..c284e4bd48
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkDeviceMACAddress.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardUpLinkDeviceMACAddress
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkDevicePortNumber.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkDevicePortNumber.m2d
new file mode 100644
index 0000000000..1764d307ef
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/node-eocCBATCardUpLinkDevicePortNumber.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardUpLinkDevicePortNumber
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/table-eocCBATCardTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/table-eocCBATCardTable.m2d
new file mode 100644
index 0000000000..6556af28d8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/defaults/table-eocCBATCardTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocCBATCardTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable-README-FIRST.txt
new file mode 100644
index 0000000000..582983b7e6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocCBATCardTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocCBATCardTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocCBATCardTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocCBATCardTable_Makefile
+
+
+ File : eocCBATCardTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocCBATCardTable-README-eocCBATCardTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocCBATCardTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocCBATCardTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocCBATCardTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocCBATCardTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable-README-eocCBATCardTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable-README-eocCBATCardTable.txt
new file mode 100644
index 0000000000..e2415bace3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable-README-eocCBATCardTable.txt
@@ -0,0 +1,1221 @@
+************************************************************************
+eocCBATCardTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocCBATCardTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocCBATCardTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocCBATCardTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCBATCardTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCBATCardTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCBATCardTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocCBATCardTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCBATCardTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocCBATCardTable_allocate_data
+ eocCBATCardTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocCBATCardTable_rowreq_ctx_init
+ eocCBATCardTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocCBATCardTable table
+ ------------------------------------------------------------
+ The index(es) for the eocCBATCardTable table are:
+
+ eocCBATCardIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocCBATCardTable_data.
+
+
+************************************************************************
+eocCBATCardTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocCBATCardTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocCBATCardTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocCBATCardTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocCBATCardTable_indexes_set
+ WHERE: eocCBATCardTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocCBATCardTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocCBATCardTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardMACAddress_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardOnlineStatus_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardModelNumber_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardSoftwareVersion_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardReset_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardUpLinkBroadcastFrameSendIntervalT1_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardUpLinkBroadcastFrameSendIntervalT2_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardUpLinkDeviceMACAddress_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardUpLinkDevicePortNumber_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardConfigurationSaving_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardConfigurationResult_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardTemperature_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardLogicalID_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardTechProject_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardManufactoryInfo_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardSerialNumber_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardHardwareVersion_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardModelNumberProvisioned_get
+
+
+
+File: eocCBATCardTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocCBATCardTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table does not support ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocCBATCardTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardReset_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardReset_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardReset_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardReset_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardUpLinkBroadcastFrameSendIntervalT1_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardUpLinkBroadcastFrameSendIntervalT1_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardUpLinkBroadcastFrameSendIntervalT1_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardUpLinkBroadcastFrameSendIntervalT1_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardUpLinkBroadcastFrameSendIntervalT2_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardUpLinkBroadcastFrameSendIntervalT2_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardUpLinkBroadcastFrameSendIntervalT2_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardUpLinkBroadcastFrameSendIntervalT2_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardUpLinkDeviceMACAddress_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardUpLinkDeviceMACAddress_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardUpLinkDeviceMACAddress_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardUpLinkDeviceMACAddress_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardUpLinkDevicePortNumber_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardUpLinkDevicePortNumber_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardUpLinkDevicePortNumber_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardUpLinkDevicePortNumber_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardConfigurationSaving_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardConfigurationSaving_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardConfigurationSaving_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardConfigurationSaving_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardLogicalID_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardLogicalID_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardLogicalID_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardLogicalID_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardModelNumberProvisioned_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardModelNumberProvisioned_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardModelNumberProvisioned_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardModelNumberProvisioned_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocCBATCardTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocCBATCardTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocCBATCardTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocCBATCardTable table.
+
+To watch the flow of the eocCBATCardTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocCBATCardTable
+ verbose:eocCBATCardTable
+ internal:eocCBATCardTable
+
+e.g.
+ snmpd -f -Le -DeocCBATCardTable,verbose:eocCBATCardTable,internal:eocCBATCardTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardTable is subid 2 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2, length: 11
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardIndex
+ * eocCBATCardIndex is subid 1 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.1
+ * Description:
+CBAT°å¿¨ÐòºÅË÷Òý
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardMACAddress
+ * eocCBATCardMACAddress is subid 2 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.2
+ * Description:
+CBAT°å¿¨µÄMACµØÖ·
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 0
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardOnlineStatus
+ * eocCBATCardOnlineStatus is subid 3 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.3
+ * Description:
+CBAT°å¿¨ÔÚÏß״̬£º
+ 0- ²»ÔÚÏߣ»
+ 1- ÔÚÏß¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: offline(0), online(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardModelNumber
+ * eocCBATCardModelNumber is subid 4 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.4
+ * Description:
+CBAT°å¿¨µÄÐͺÅ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardSoftwareVersion
+ * eocCBATCardSoftwareVersion is subid 5 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.5
+ * Description:
+CBAT°å¿¨µÄ³ÌÐò°æ±¾ºÅ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardReset
+ * eocCBATCardReset is subid 6 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.6
+ * Description:
+дÈë'1'¸´Î»ÔÚÏß¾Ö¶ËÉ豸£¬Ð´ÈëÆäËüÖµ²»Æð×÷Ó᣶Á´Ë¶ÔÏóʱ·µ»ØÖµ'1'£¬¶ÔÉ豸ÎÞÓ°Ïì
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: true(1), false(2)
+ *
+ * Its syntax is TruthValue (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardUpLinkBroadcastFrameSendIntervalT1
+ * eocCBATCardUpLinkBroadcastFrameSendIntervalT1 is subid 7 of eocCBATCardEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.7
+ * Description:
+È·ÈÏÇ°ÏòÉÏÁªONU·¢Ë͹㲥֡¼ä¸ô£¬µ¥Î»0.01Ãë ¼ä¸ôÖµ½¨ÒéΪ1·ÖÖÓ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ * defval: 6000
+ *
+ * Ranges: 0 - 2147483647;
+ *
+ * Its syntax is TimeInterval (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardUpLinkBroadcastFrameSendIntervalT2
+ * eocCBATCardUpLinkBroadcastFrameSendIntervalT2 is subid 8 of eocCBATCardEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.8
+ * Description:
+È·ÈϺóÏòÉÏÁªONU·¢Ë͹㲥֡¼ä¸ô, µ¥Î»0.01Ãë,¼ä¸ôÖµ½¨ÒéΪ20·ÖÖÓ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ * defval: 120000
+ *
+ * Ranges: 0 - 2147483647;
+ *
+ * Its syntax is TimeInterval (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardUpLinkDeviceMACAddress
+ * eocCBATCardUpLinkDeviceMACAddress is subid 9 of eocCBATCardEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.9
+ * Description:
+CBAT°å¿¨ÉÏÁªONUµÄMACµØÖ·
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardUpLinkDevicePortNumber
+ * eocCBATCardUpLinkDevicePortNumber is subid 10 of eocCBATCardEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.10
+ * Description:
+CBAT°å¿¨ÉÏÁªONU¶Ë¿ÚºÅ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardConfigurationSaving
+ * eocCBATCardConfigurationSaving is subid 11 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.11
+ * Description:
+дÈë1½«µ±Ç°µÄÅäÖôæÈë·ÇÒ×ʧÐÔ´æ´¢Æ÷ÖУ¬Ð´ÈëÆäËüÖµ²»Æð×÷Ó᣶Á´Ë¶ÔÏóʱ·µ»ØÖµ1£¬¶ÔÉ豸ÎÞÓ°Ïì¡£´Ë²Ù×÷½¨Òé×÷Ϊÿ´Î±ä¸üÅäÖúóµÄ±ØÑ¡²Ù×÷
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: save(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardConfigurationResult
+ * eocCBATCardConfigurationResult is subid 12 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.12
+ * Description:
+±£´æCBAT°å¿¨É豸µ±Ç°ÅäÖõĽá¹û:
+ success(0)- ±£´æµ±Ç°Åä³É¹¦,
+ running(1)- ÕýÔÚ±£´æµ±Ç°ÅäÖÃ,
+ failed(2)- ±£´æµ±Ç°ÅäÖÃʧ°Ü.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 3/8. Values: success(0), running(1), failed(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardTemperature
+ * eocCBATCardTemperature is subid 13 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.13
+ * Description:
+CBAT°å¿¨µ±Ç°Î¶È
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: -128 - 127;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardLogicalID
+ * eocCBATCardLogicalID is subid 14 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.14
+ * Description:
+Ö¸¶¨EoC CBATÉ豸Âß¼­±êʶ·û(Logical ID), ´ËÖµÓëCBATÉ豸ÆäËûÊôÐÔÎ޹ء£´Ë¶ÔÏóÖµÓ¦µ±´æ·ÅÔÚ·ÇÒ×ʧÐÔ´æ´¢Æ÷ÖС£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 40;
+ *
+ * Its syntax is OCTETSTR (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 40)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardTechProject
+ * eocCBATCardTechProject is subid 15 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.15
+ * Description:
+EoCÉ豸µÄ¼¼Êõ·½°¸ÃèÊö£¬×Ö·û´®³¤¶È×î´óΪ16
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 16;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 16)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardManufactoryInfo
+ * eocCBATCardManufactoryInfo is subid 16 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.16
+ * Description:
+EoCÉ豸µÄÉú²ú³§¼ÒÐÅÏ¢¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardSerialNumber
+ * eocCBATCardSerialNumber is subid 17 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.17
+ * Description:
+EoCÉ豸µÄÐòÁкÅ.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardHardwareVersion
+ * eocCBATCardHardwareVersion is subid 18 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.18
+ * Description:
+EoC CBAT É豸µÄÓ²¼þ°æ±¾ºÅ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardModelNumberProvisioned
+ * eocCBATCardModelNumberProvisioned is subid 19 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.19
+ * Description:
+CBAT°å¿¨µÄ¶¨ÒåµÄ£¨»òÕß˵·ÖÅäµÄ£©ÐͺÅ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable.c
new file mode 100644
index 0000000000..b216e3dc93
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable.c
@@ -0,0 +1,222 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocCBATCardTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocCBATCardTable_interface.h"
+
+oid eocCBATCardTable_oid[] = { EOCCBATCARDTABLE_OID };
+int eocCBATCardTable_oid_size = OID_LENGTH(eocCBATCardTable_oid);
+
+ eocCBATCardTable_registration eocCBATCardTable_user_context;
+
+void initialize_table_eocCBATCardTable(void);
+void shutdown_table_eocCBATCardTable(void);
+
+
+/**
+ * Initializes the eocCBATCardTable module
+ */
+void
+init_eocCBATCardTable(void)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:init_eocCBATCardTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocCBATCardTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocCBATCardTable"))
+ initialize_table_eocCBATCardTable();
+
+} /* init_eocCBATCardTable */
+
+/**
+ * Shut-down the eocCBATCardTable module (agent is exiting)
+ */
+void
+shutdown_eocCBATCardTable(void)
+{
+ if (should_init("eocCBATCardTable"))
+ shutdown_table_eocCBATCardTable();
+
+}
+
+/**
+ * Initialize the table eocCBATCardTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocCBATCardTable(void)
+{
+ eocCBATCardTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:initialize_table_eocCBATCardTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocCBATCardTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocCBATCardTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocCBATCardTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocCBATCardTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocCBATCardTable */
+
+/**
+ * Shutdown the table eocCBATCardTable
+ */
+void
+shutdown_table_eocCBATCardTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocCBATCardTable_shutdown_interface(&eocCBATCardTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocCBATCardTable_rowreq_ctx_init(eocCBATCardTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocCBATCardTable rowreq initialization. (eg DEFVALS)
+ */
+ rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT1 = 6000;
+
+ rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT2 = 120000;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocCBATCardTable_rowreq_ctx_cleanup(eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocCBATCardTable rowreq cleanup.
+ */
+} /* eocCBATCardTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocCBATCardTable_pre_request(eocCBATCardTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocCBATCardTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATCardTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocCBATCardTable_post_request(eocCBATCardTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocCBATCardTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocCBATCardTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocCBATCardTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocCBATCardTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable.h
new file mode 100644
index 0000000000..179abc5aef
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable.h
@@ -0,0 +1,286 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDTABLE_H
+#define EOCCBATCARDTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+
+/* OID and column number definitions for eocCBATCardTable */
+#include "eocCBATCardTable_oids.h"
+
+/* enum definions */
+#include "eocCBATCardTable_enums.h"
+
+/* include common header */
+#include "EoCCommon.h"
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocCBATCardTable(void);
+void shutdown_eocCBATCardTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardTable is subid 2 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2, length: 11
+*/
+/* *********************************************************************
+ * 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 eocCBATCardTable registration context.
+ */
+typedef netsnmp_data_list eocCBATCardTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocCBATCardTable data context structure.
+ * This structure is used to represent the data for eocCBATCardTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocCBATCardTable.
+ */
+typedef struct eocCBATCardTable_data_s {
+
+ /*
+ * eocCBATCardMACAddress(2)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+ */
+ char eocCBATCardMACAddress[6];
+ size_t eocCBATCardMACAddress_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCBATCardOnlineStatus(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long eocCBATCardOnlineStatus;
+
+ /*
+ * eocCBATCardModelNumber(4)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+ char eocCBATCardModelNumber[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCBATCardModelNumber_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCBATCardSoftwareVersion(5)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+ char eocCBATCardSoftwareVersion[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCBATCardSoftwareVersion_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCBATCardReset(6)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCBATCardReset;
+
+ /*
+ * eocCBATCardUpLinkBroadcastFrameSendIntervalT1(7)/TimeInterval/ASN_INTEGER/long(long)//l/A/W/e/R/D/h
+ */
+ long eocCBATCardUpLinkBroadcastFrameSendIntervalT1;
+
+ /*
+ * eocCBATCardUpLinkBroadcastFrameSendIntervalT2(8)/TimeInterval/ASN_INTEGER/long(long)//l/A/W/e/R/D/h
+ */
+ long eocCBATCardUpLinkBroadcastFrameSendIntervalT2;
+
+ /*
+ * eocCBATCardUpLinkDeviceMACAddress(9)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ char eocCBATCardUpLinkDeviceMACAddress[6];
+ size_t eocCBATCardUpLinkDeviceMACAddress_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCBATCardUpLinkDevicePortNumber(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCBATCardUpLinkDevicePortNumber;
+
+ /*
+ * eocCBATCardConfigurationSaving(11)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCBATCardConfigurationSaving;
+
+ /*
+ * eocCBATCardConfigurationResult(12)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long eocCBATCardConfigurationResult;
+
+ /*
+ * eocCBATCardTemperature(13)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ long eocCBATCardTemperature;
+
+ /*
+ * eocCBATCardLogicalID(14)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h
+ */
+ char eocCBATCardLogicalID[40];
+ size_t eocCBATCardLogicalID_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCBATCardTechProject(15)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+ char eocCBATCardTechProject[16];
+ size_t eocCBATCardTechProject_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCBATCardManufactoryInfo(16)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+ char eocCBATCardManufactoryInfo[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCBATCardManufactoryInfo_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCBATCardSerialNumber(17)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+ char eocCBATCardSerialNumber[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCBATCardSerialNumber_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCBATCardHardwareVersion(18)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+ char eocCBATCardHardwareVersion[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCBATCardHardwareVersion_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCBATCardModelNumberProvisioned(19)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h
+ */
+ char eocCBATCardModelNumberProvisioned[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCBATCardModelNumberProvisioned_len; /* # of char elements, not bytes */
+
+} eocCBATCardTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocCBATCardTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocCBATCardTable_data eocCBATCardTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocCBATCardTable mib index.
+ * This structure is used to represent the index for eocCBATCardTable.
+ */
+typedef struct eocCBATCardTable_mib_index_s {
+
+ /*
+ * eocCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCBATCardIndex;
+
+
+} eocCBATCardTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocCBATCardTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocCBATCardTable_IDX_LEN 1
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocCBATCardTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocCBATCardTable_rowreq_ctx pointer.
+ */
+typedef struct eocCBATCardTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocCBATCardTable_IDX_LEN];
+
+ eocCBATCardTable_mib_index tbl_idx;
+
+ eocCBATCardTable_data data;
+ eocCBATCardTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocCBATCardTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocCBATCardTable_data_list;
+
+} eocCBATCardTable_rowreq_ctx;
+
+typedef struct eocCBATCardTable_ref_rowreq_ctx_s {
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx;
+} eocCBATCardTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocCBATCardTable_pre_request(eocCBATCardTable_registration * user_context);
+ int eocCBATCardTable_post_request(eocCBATCardTable_registration * user_context,
+ int rc);
+
+ int eocCBATCardTable_rowreq_ctx_init(eocCBATCardTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocCBATCardTable_rowreq_ctx_cleanup(eocCBATCardTable_rowreq_ctx *rowreq_ctx);
+
+ int eocCBATCardTable_commit(eocCBATCardTable_rowreq_ctx * rowreq_ctx);
+
+ eocCBATCardTable_rowreq_ctx *
+ eocCBATCardTable_row_find_by_mib_index(eocCBATCardTable_mib_index *mib_idx);
+
+extern oid eocCBATCardTable_oid[];
+extern int eocCBATCardTable_oid_size;
+
+
+#include "eocCBATCardTable_interface.h"
+#include "eocCBATCardTable_data_access.h"
+#include "eocCBATCardTable_data_get.h"
+#include "eocCBATCardTable_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 /* EOCCBATCARDTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_access.c
new file mode 100644
index 0000000000..4d11ac400b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_access.c
@@ -0,0 +1,859 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardTable.h"
+
+
+#include "eocCBATCardTable_data_access.h"
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardTable is subid 2 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2, length: 11
+*/
+
+/**
+ * initialization for eocCBATCardTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocCBATCardTable_reg
+ * Pointer to eocCBATCardTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocCBATCardTable_init_data(eocCBATCardTable_registration * eocCBATCardTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocCBATCardTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATCardTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocCBATCardTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocCBATCardTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocCBATCardTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocCBATCardTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCCBATCARDTABLE_CACHE_TIMEOUT; /* seconds */
+} /* eocCBATCardTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocCBATCardTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocCBATCardTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocCBATCardTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocCBATCardTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocCBATCardTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocCBATCardTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocCBATCardTable_container_load (netsnmp_container * container)
+{
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCBATCardIndex = 0;
+
+ char eocCBATCardMACAddress[6];
+ /* # of char elements, not bytes */
+ size_t eocCBATCardMACAddress_len = 6;
+ u_long eocCBATCardOnlineStatus = 1;
+ char eocCBATCardModelNumber[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ /* # of char elements, not bytes */
+ size_t eocCBATCardModelNumber_len = 0;
+ char eocCBATCardSoftwareVersion[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ /* # of char elements, not bytes */
+ size_t eocCBATCardSoftwareVersion_len = 0;
+ u_long eocCBATCardReset = 0;
+ long eocCBATCardUpLinkBroadcastFrameSendIntervalT1 = 60;
+ long eocCBATCardUpLinkBroadcastFrameSendIntervalT2 = 1200;
+ char eocCBATCardUpLinkDeviceMACAddress[6];
+ /* # of char elements, not bytes */
+ size_t eocCBATCardUpLinkDeviceMACAddress_len = 6;
+
+
+ u_long eocCBATCardConfigurationSaving = 0;
+ u_long eocCBATCardConfigurationResult =
+ INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDCONFIGURATIONRESULT_SUCCESS;
+ long eocCBATCardUpLinkDevicePortNumber =
+ ONLINE_CLT_UPLINK_DEVICE_PORT_NUMBER;
+
+ int eocCBATCardTemperature = 0;
+
+ char eocCBATCardLogicalID[40];
+ size_t eocCBATCardLogicalID_len = 40;
+
+ char eocCBATCardTechProject[16];
+ size_t eocCBATCardTechProject_len = 16;
+
+ char eocCBATCardManufactoryInfo[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCBATCardManufactoryInfo_len = DEFAULT_SNMP_STRING_MAX_LENGTH;
+ char eocCBATCardSerialNumber[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCBATCardSerialNumber_len = DEFAULT_SNMP_STRING_MAX_LENGTH;
+
+ char eocCBATCardHardwareVersion[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCBATCardHardwareVersion_len = DEFAULT_SNMP_STRING_MAX_LENGTH;
+
+ char eocCBATCardModelNumberProvisioned[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCBATCardModelNumberProvisioned_len =
+ DEFAULT_SNMP_STRING_MAX_LENGTH;
+
+ /* declarations for calls to libspid */
+ char buffer[LIBSPID_CONFIG_KEY_MAX_LEN];
+ int ret;
+ char mtd_name[64];
+ spidcom_image_desc_t desc;
+ DEBUGMSGTL (("verbose:eocCBATCardTable:eocCBATCardTable_container_load",
+ "called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocCBATCardTable container.
+ * loop over your eocCBATCardTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ /* no need for a loop because index is always 1,
+ so there is only one row in a table */
+
+ /*
+ * TODO:352:M: | |-> set indexes in new eocCBATCardTable rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocCBATCardTable_allocate_rowreq_ctx (NULL);
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if (MFD_SUCCESS != eocCBATCardTable_indexes_set (rowreq_ctx,
+ eocCBATCardIndex))
+ {
+ snmp_log (LOG_ERR, "error setting index while loading "
+ "eocCBATCardTable data.\n");
+ eocCBATCardTable_release_rowreq_ctx (rowreq_ctx);
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+
+ /*
+ * TODO:352:r: | |-> populate eocCBATCardTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocCBATCardMACAddress
+ * eocCBATCardMACAddress(2)/MacAddress/ASN_OCTET_STR/
+ * char(char)//L/A/w/e/R/d/H
+ */
+ /** no mapping */
+ /* read NVRAM contents */
+ ret = libspid_get_plc_address (eocCBATCardMACAddress, 6);
+ if (ret)
+ {
+ memset (eocCBATCardMACAddress, 0, 6);
+ }
+ rowreq_ctx->data.eocCBATCardMACAddress_len = 6;
+ /*
+ * make sure there is enough space for eocCBATCardMACAddress data
+ */
+ if ((NULL == rowreq_ctx->data.eocCBATCardMACAddress) ||
+ (rowreq_ctx->data.eocCBATCardMACAddress_len <
+ (eocCBATCardMACAddress_len * sizeof (eocCBATCardMACAddress[0]))))
+ {
+ snmp_log (LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocCBATCardMACAddress_len =
+ eocCBATCardMACAddress_len * sizeof (eocCBATCardMACAddress[0]);
+ memcpy (rowreq_ctx->data.eocCBATCardMACAddress, eocCBATCardMACAddress,
+ eocCBATCardMACAddress_len * sizeof (eocCBATCardMACAddress[0]));
+
+ /*
+ * setup/save data for eocCBATCardOnlineStatus
+ * eocCBATCardOnlineStatus(3)/INTEGER/ASN_INTEGER/
+ * long(u_long)//l/A/w/E/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocCBATCardOnlineStatus = eocCBATCardOnlineStatus;
+
+ /*
+ * setup/save data for eocCBATCardModelNumber
+ * eocCBATCardModelNumber(4)/DisplayString/ASN_OCTET_STR/
+ * char(char)//L/A/w/e/R/d/h
+ */
+ /** no mapping */
+ /* read NVRAM contents */
+ ret = libspid_get_product_name (eocCBATCardModelNumber, DEFAULT_SNMP_STRING_MAX_LENGTH);
+ if (ret)
+ {
+ /* Model number is set to empty string to permit walk requests */
+ strcpy (eocCBATCardModelNumber, "");
+ }
+
+ eocCBATCardModelNumber_len = strlen (eocCBATCardModelNumber) + 1;
+ rowreq_ctx->data.eocCBATCardModelNumber_len = eocCBATCardModelNumber_len;
+ /*
+ * make sure there is enough space for eocCBATCardModelNumber data
+ */
+ if ((NULL == rowreq_ctx->data.eocCBATCardModelNumber) ||
+ (rowreq_ctx->data.eocCBATCardModelNumber_len <
+ (eocCBATCardModelNumber_len * sizeof (eocCBATCardModelNumber[0]))))
+ {
+ snmp_log (LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocCBATCardModelNumber_len =
+ eocCBATCardModelNumber_len * sizeof (eocCBATCardModelNumber[0]);
+ memcpy (rowreq_ctx->data.eocCBATCardModelNumber, eocCBATCardModelNumber,
+ eocCBATCardModelNumber_len * sizeof (eocCBATCardModelNumber[0]));
+
+ /*
+ * setup/save data for eocCBATCardSoftwareVersion
+ * eocCBATCardSoftwareVersion(5)/DisplayString/ASN_OCTET_STR/
+ * char(char)//L/A/w/e/R/d/h
+ */
+
+ ret = libspid_image_get_desc (LIBSPID_IMAGE_DESC_TYPE_CURRENT,
+ &desc, mtd_name);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_image_get_desc error\n");
+ /* SW version set to empty string to permit walk requests */
+ strcpy (eocCBATCardSoftwareVersion, "");
+ }
+ else
+ {
+ memset (eocCBATCardSoftwareVersion, 0,
+ DEFAULT_SNMP_STRING_MAX_LENGTH);
+ if (sizeof (desc.version) <= DEFAULT_SNMP_STRING_MAX_LENGTH)
+ {
+ strncpy (eocCBATCardSoftwareVersion,
+ desc.version, sizeof (desc.version));
+ }
+ else
+ {
+ /* if the buffer read from image description is larger than
+ * maximum value, copy only maximum permitted number of bytes */
+ strncpy (eocCBATCardSoftwareVersion, desc.version,
+ DEFAULT_SNMP_STRING_MAX_LENGTH - 1);
+ eocCBATCardSoftwareVersion[DEFAULT_SNMP_STRING_MAX_LENGTH - 1] =
+ '\0';
+ }
+ }
+
+
+ eocCBATCardSoftwareVersion_len = strlen (eocCBATCardSoftwareVersion) + 1;
+ rowreq_ctx->data.eocCBATCardSoftwareVersion_len =
+ eocCBATCardSoftwareVersion_len;
+
+ /*
+ * make sure there is enough space for eocCBATCardSoftwareVersion data
+ */
+ if ((NULL == rowreq_ctx->data.eocCBATCardSoftwareVersion) ||
+ (rowreq_ctx->data.eocCBATCardSoftwareVersion_len <
+ (eocCBATCardSoftwareVersion_len *
+ sizeof (eocCBATCardSoftwareVersion[0]))))
+ {
+ snmp_log (LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocCBATCardSoftwareVersion_len =
+ eocCBATCardSoftwareVersion_len *
+ sizeof (eocCBATCardSoftwareVersion[0]);
+ memcpy (rowreq_ctx->data.eocCBATCardSoftwareVersion,
+ eocCBATCardSoftwareVersion,
+ eocCBATCardSoftwareVersion_len *
+ sizeof (eocCBATCardSoftwareVersion[0]));
+
+ /*
+ * setup/save data for eocCBATCardReset
+ * eocCBATCardReset(6)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocCBATCardReset = eocCBATCardReset;
+
+ /*
+ * setup/save data for eocCBATCardUpLinkBroadcastFrameSendIntervalT1
+ * eocCBATCardUpLinkBroadcastFrameSendIntervalT1(7)/TimeInterval/
+ * ASN_INTEGER/long(long)//l/A/W/e/R/D/h
+ */
+ /** no mapping */
+ ret = libspid_config_read_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_TIME_SEC,
+ buffer, LIBSPID_CONFIG_KEY_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* Broadcast FSI before ACK set to 0 to permit walk requests */
+ eocCBATCardUpLinkBroadcastFrameSendIntervalT1 = 0;
+ }
+ else
+ {
+ /* parse Broadcast FSI before ACK from buffer */
+ if (1 != sscanf (buffer, "%d",
+ &eocCBATCardUpLinkBroadcastFrameSendIntervalT1))
+ {
+ eocCBATCardUpLinkBroadcastFrameSendIntervalT1 = 0;
+ }
+ }
+ rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT1 =
+ eocCBATCardUpLinkBroadcastFrameSendIntervalT1;
+
+ /*
+ * setup/save data for eocCBATCardUpLinkBroadcastFrameSendIntervalT2
+ * eocCBATCardUpLinkBroadcastFrameSendIntervalT2(8)/TimeInterval/
+ * ASN_INTEGER/long(long)//l/A/W/e/R/D/h
+ */
+ /** no mapping */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_TIME_SEC2,
+ buffer, LIBSPID_CONFIG_KEY_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* Broadcast FSI before ACK set to 0 to permit walk requests */
+ eocCBATCardUpLinkBroadcastFrameSendIntervalT2 = 0;
+ }
+ else
+ {
+ /* parse Broadcast FSI before ACK from buffer */
+ if (1 != sscanf (buffer, "%d",
+ &eocCBATCardUpLinkBroadcastFrameSendIntervalT2))
+ {
+ eocCBATCardUpLinkBroadcastFrameSendIntervalT2 = 0;
+ }
+ }
+ rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT2 =
+ eocCBATCardUpLinkBroadcastFrameSendIntervalT2;
+
+ /*
+ * setup/save data for eocCBATCardUpLinkDeviceMACAddress
+ * eocCBATCardUpLinkDeviceMACAddress(9)/MacAddress/
+ * ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ /** no mapping */
+ ret = libspid_config_read_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_ONU_MAC, buffer,
+ LIBSPID_CONFIG_KEY_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ memset (eocCBATCardUpLinkDeviceMACAddress, 0, 6);
+ }
+ else
+ {
+ libspid_mac_str_to_bin (buffer, eocCBATCardUpLinkDeviceMACAddress);
+ }
+ rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress_len = 6;
+ /*
+ * make sure there is enough space for eocCBATCardUpLinkDeviceMACAddress
+ * data
+ */
+ if ((NULL == rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress) ||
+ (rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress_len <
+ (eocCBATCardUpLinkDeviceMACAddress_len *
+ sizeof (eocCBATCardUpLinkDeviceMACAddress[0]))))
+ {
+ snmp_log (LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress_len =
+ eocCBATCardUpLinkDeviceMACAddress_len *
+ sizeof (eocCBATCardUpLinkDeviceMACAddress[0]);
+ memcpy (rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress,
+ eocCBATCardUpLinkDeviceMACAddress,
+ eocCBATCardUpLinkDeviceMACAddress_len *
+ sizeof (eocCBATCardUpLinkDeviceMACAddress[0]));
+
+ /*
+ * setup/save data for eocCBATCardUpLinkDevicePortNumber
+ * eocCBATCardUpLinkDevicePortNumber(10)/INTEGER/ASN_INTEGER/
+ * long(long)//l/A/W/e/r/d/h
+ */
+ /** no mapping */
+ ret = libspid_config_read_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_ONU_PORT,
+ buffer, LIBSPID_CONFIG_KEY_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* uplink device port number set to 0 to permit walk requests */
+ eocCBATCardUpLinkDevicePortNumber = 0;
+ }
+ else
+ {
+ /* parse uplink device port numberfrom buffer */
+ if (1 != sscanf (buffer, "%d", &eocCBATCardUpLinkDevicePortNumber))
+ {
+ eocCBATCardUpLinkDevicePortNumber = 0;
+ }
+ }
+ rowreq_ctx->data.eocCBATCardUpLinkDevicePortNumber =
+ eocCBATCardUpLinkDevicePortNumber;
+
+ /*
+ * setup/save data for eocCBATCardConfigurationSaving
+ * eocCBATCardConfigurationSaving(11)/INTEGER/ASN_INTEGER/
+ * long(u_long)//l/A/W/E/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocCBATCardConfigurationSaving =
+ eocCBATCardConfigurationSaving;
+
+ /*
+ * setup/save data for eocCBATCardConfigurationResult
+ * eocCBATCardConfigurationResult(12)/INTEGER/
+ * ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocCBATCardConfigurationResult =
+ eocCBATCardConfigurationResult;
+
+ /*
+ * setup/save data for eocCBATCardTemperature
+ * eocCBATCardTemperature(13)/INTEGER/ASN_INTEGER/
+ * long(long)//l/A/w/e/R/d/h
+ */
+ /** no mapping */
+ if (LIBSPID_SUCCESS !=
+ libspid_hardware_get_temperature (&eocCBATCardTemperature))
+ {
+ eocCBATCardTemperature = 0;
+ }
+ rowreq_ctx->data.eocCBATCardTemperature = eocCBATCardTemperature;
+
+ /*
+ * setup/save data for eocCBATCardLogicalID
+ * eocCBATCardLogicalID(14)/OCTETSTR/ASN_OCTET_STR/
+ * char(char)//L/A/W/e/R/d/h
+ */
+ /** no mapping */
+ ret = libspid_config_read_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_ADMIN_LOGICAL_ID,
+ buffer, LIBSPID_CONFIG_KEY_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* logical ID set to empty string to permit walk requests */
+ strcpy (eocCBATCardLogicalID, "");
+ }
+ else
+ {
+ /* parse logical ID from buffer */
+ memset (eocCBATCardLogicalID, 0, sizeof (eocCBATCardLogicalID));
+ strncpy (eocCBATCardLogicalID, buffer,
+ sizeof (eocCBATCardLogicalID) - 1);
+ eocCBATCardLogicalID[sizeof (eocCBATCardLogicalID) - 1] = '\0';
+ }
+ eocCBATCardLogicalID_len = strlen (eocCBATCardLogicalID) + 1;
+ rowreq_ctx->data.eocCBATCardLogicalID_len = eocCBATCardLogicalID_len;
+ /*
+ * make sure there is enough space for eocCBATCardLogicalID data
+ */
+ if ((NULL == rowreq_ctx->data.eocCBATCardLogicalID) ||
+ (rowreq_ctx->data.eocCBATCardLogicalID_len <
+ (eocCBATCardLogicalID_len * sizeof (eocCBATCardLogicalID[0]))))
+ {
+ snmp_log (LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocCBATCardLogicalID_len =
+ eocCBATCardLogicalID_len * sizeof (eocCBATCardLogicalID[0]);
+ memcpy (rowreq_ctx->data.eocCBATCardLogicalID, eocCBATCardLogicalID,
+ eocCBATCardLogicalID_len * sizeof (eocCBATCardLogicalID[0]));
+
+ /*
+ * setup/save data for eocCBATCardTechProject
+ * eocCBATCardTechProject(15)/DisplayString/ASN_OCTET_STR/
+ * char(char)//L/A/w/e/R/d/h
+ */
+ /** no mapping */
+ ret = libspid_config_read_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_ADMIN_TECHPROJECT,
+ buffer, LIBSPID_CONFIG_KEY_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* tech project set to empty string to permit walk requests */
+ strcpy (eocCBATCardTechProject, "");
+ }
+ else
+ {
+ /* parse tech project from buffer */
+ memset (eocCBATCardTechProject, 0, sizeof (eocCBATCardTechProject));
+ strncpy (eocCBATCardTechProject,
+ buffer, sizeof (eocCBATCardTechProject) - 1);
+ eocCBATCardTechProject[sizeof (eocCBATCardTechProject) - 1] = '\0';
+ }
+ eocCBATCardTechProject_len = strlen (eocCBATCardTechProject) + 1;
+ rowreq_ctx->data.eocCBATCardTechProject_len = eocCBATCardTechProject_len;
+ /*
+ * make sure there is enough space for eocCBATCardTechProject data
+ */
+ if ((NULL == rowreq_ctx->data.eocCBATCardTechProject) ||
+ (rowreq_ctx->data.eocCBATCardTechProject_len <
+ (eocCBATCardTechProject_len * sizeof (eocCBATCardTechProject[0]))))
+ {
+ snmp_log (LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocCBATCardTechProject_len =
+ eocCBATCardTechProject_len * sizeof (eocCBATCardTechProject[0]);
+ memcpy (rowreq_ctx->data.eocCBATCardTechProject, eocCBATCardTechProject,
+ eocCBATCardTechProject_len * sizeof (eocCBATCardTechProject[0]));
+
+ /*
+ * setup/save data for eocCBATCardManufactoryInfo
+ * eocCBATCardManufactoryInfo(16)/DisplayString/ASN_OCTET_STR/
+ * char(char)//L/A/w/e/R/d/h
+ */
+ /** no mapping */
+ ret = libspid_get_manufactory_info (eocCBATCardManufactoryInfo, DEFAULT_SNMP_STRING_MAX_LENGTH);
+ if (ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_nvram error\n");
+ /* Manufactory info is set to empty string to permit walk requests */
+ strcpy (eocCBATCardManufactoryInfo, "");
+ }
+ eocCBATCardManufactoryInfo_len = strlen (eocCBATCardManufactoryInfo) + 1;
+ rowreq_ctx->data.eocCBATCardManufactoryInfo_len =
+ eocCBATCardManufactoryInfo_len;
+ /*
+ * make sure there is enough space for eocCBATCardManufactoryInfo data
+ */
+ if ((NULL == rowreq_ctx->data.eocCBATCardManufactoryInfo) ||
+ (rowreq_ctx->data.eocCBATCardManufactoryInfo_len <
+ (eocCBATCardManufactoryInfo_len *
+ sizeof (eocCBATCardManufactoryInfo[0]))))
+ {
+ snmp_log (LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocCBATCardManufactoryInfo_len =
+ eocCBATCardManufactoryInfo_len *
+ sizeof (eocCBATCardManufactoryInfo[0]);
+ memcpy (rowreq_ctx->data.eocCBATCardManufactoryInfo,
+ eocCBATCardManufactoryInfo,
+ eocCBATCardManufactoryInfo_len *
+ sizeof (eocCBATCardManufactoryInfo[0]));
+
+ /*
+ * setup/save data for eocCBATCardSerialNumber
+ * eocCBATCardSerialNumber(17)/DisplayString/ASN_OCTET_STR/
+ * char(char)//L/A/w/e/R/d/h
+ */
+ /** no mapping */
+ ret = libspid_get_serial_number (eocCBATCardSerialNumber, DEFAULT_SNMP_STRING_MAX_LENGTH);
+ if (ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_nvram error\n");
+ /* Serial number set to empty string to permit walk requests */
+ strcpy (eocCBATCardSerialNumber, "");
+ }
+ eocCBATCardSerialNumber_len = strlen (eocCBATCardSerialNumber) + 1;
+ rowreq_ctx->data.eocCBATCardSerialNumber_len =
+ eocCBATCardSerialNumber_len;
+ /*
+ * make sure there is enough space for eocCBATCardSerialNumber data
+ */
+ if ((NULL == rowreq_ctx->data.eocCBATCardSerialNumber) ||
+ (rowreq_ctx->data.eocCBATCardSerialNumber_len <
+ (eocCBATCardSerialNumber_len * sizeof (eocCBATCardSerialNumber[0]))))
+ {
+ snmp_log (LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocCBATCardSerialNumber_len =
+ eocCBATCardSerialNumber_len * sizeof (eocCBATCardSerialNumber[0]);
+ memcpy (rowreq_ctx->data.eocCBATCardSerialNumber, eocCBATCardSerialNumber,
+ eocCBATCardSerialNumber_len *
+ sizeof (eocCBATCardSerialNumber[0]));
+
+ /*
+ * setup/save data for eocCBATCardHardwareVersion
+ * eocCBATCardHardwareVersion(18)/DisplayString/ASN_OCTET_STR/
+ * char(char)//L/A/w/e/R/d/h
+ */
+ /** no mapping */
+ ret = libspid_get_product_partnb (eocCBATCardHardwareVersion, DEFAULT_SNMP_STRING_MAX_LENGTH);
+ if (ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_nvram error\n");
+ /* HW version set to empty string to permit walk requests */
+ strcpy (eocCBATCardHardwareVersion, "");
+ }
+ eocCBATCardHardwareVersion_len = strlen (eocCBATCardHardwareVersion) + 1;
+ rowreq_ctx->data.eocCBATCardHardwareVersion_len =
+ eocCBATCardHardwareVersion_len;
+ /*
+ * make sure there is enough space for eocCBATCardHardwareVersion data
+ */
+ if ((NULL == rowreq_ctx->data.eocCBATCardHardwareVersion) ||
+ (rowreq_ctx->data.eocCBATCardHardwareVersion_len <
+ (eocCBATCardHardwareVersion_len *
+ sizeof (eocCBATCardHardwareVersion[0]))))
+ {
+ snmp_log (LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocCBATCardHardwareVersion_len =
+ eocCBATCardHardwareVersion_len *
+ sizeof (eocCBATCardHardwareVersion[0]);
+ memcpy (rowreq_ctx->data.eocCBATCardHardwareVersion,
+ eocCBATCardHardwareVersion,
+ eocCBATCardHardwareVersion_len *
+ sizeof (eocCBATCardHardwareVersion[0]));
+
+ /*
+ * setup/save data for eocCBATCardModelNumberProvisioned
+ * eocCBATCardModelNumberProvisioned(19)/DisplayString/ASN_OCTET_STR/
+ * char(char)//L/A/W/e/R/d/h
+ */
+ /** no mapping */
+ ret = libspid_get_product_name (eocCBATCardModelNumberProvisioned, DEFAULT_SNMP_STRING_MAX_LENGTH);
+ if (ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_get_nvram error\n");
+ /* Model number is set to empty string to permit walk requests */
+ strcpy (eocCBATCardModelNumberProvisioned, "");
+ }
+ eocCBATCardModelNumberProvisioned_len =
+ strlen (eocCBATCardModelNumberProvisioned) + 1;
+ rowreq_ctx->data.eocCBATCardModelNumberProvisioned_len =
+ eocCBATCardModelNumberProvisioned_len;
+ /*
+ * make sure there is enough space for eocCBATCardModelNumberProvisioned
+ * data
+ */
+ if ((NULL == rowreq_ctx->data.eocCBATCardModelNumberProvisioned) ||
+ (rowreq_ctx->data.eocCBATCardModelNumberProvisioned_len <
+ (eocCBATCardModelNumberProvisioned_len *
+ sizeof (eocCBATCardModelNumberProvisioned[0]))))
+ {
+ snmp_log (LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocCBATCardModelNumberProvisioned_len =
+ eocCBATCardModelNumberProvisioned_len *
+ sizeof (eocCBATCardModelNumberProvisioned[0]);
+ memcpy (rowreq_ctx->data.eocCBATCardModelNumberProvisioned,
+ eocCBATCardModelNumberProvisioned,
+ eocCBATCardModelNumberProvisioned_len *
+ sizeof (eocCBATCardModelNumberProvisioned[0]));
+
+
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT (container, rowreq_ctx);
+ ++count;
+
+
+ DEBUGMSGT (("verbose:eocCBATCardTable:eocCBATCardTable_container_load",
+ "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+} /* eocCBATCardTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocCBATCardTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocCBATCardTable container data.
+ */
+} /* eocCBATCardTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocCBATCardTable_row_prep( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATCardTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_access.h
new file mode 100644
index 0000000000..6a5618d15a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_access.h
@@ -0,0 +1,63 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDTABLE_DATA_ACCESS_H
+#define EOCCBATCARDTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardTable is subid 2 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2, length: 11
+*/
+
+
+ int eocCBATCardTable_init_data(eocCBATCardTable_registration * eocCBATCardTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocCBATCardTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCCBATCARDTABLE_CACHE_TIMEOUT 60
+
+void eocCBATCardTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocCBATCardTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocCBATCardTable_container_load(netsnmp_container *container);
+void eocCBATCardTable_container_free(netsnmp_container *container);
+
+int eocCBATCardTable_cache_load(netsnmp_container *container);
+void eocCBATCardTable_cache_free(netsnmp_container *container);
+
+ int eocCBATCardTable_row_prep( eocCBATCardTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_get.c
new file mode 100644
index 0000000000..c965b55bf8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_get.c
@@ -0,0 +1,1374 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocCBATCardTable get routines.
+ * TODO:240:M: Implement eocCBATCardTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardTable is subid 2 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2, length: 11
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocCBATCardTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocCBATCardIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocCBATCardTable_indexes_set_tbl_idx(eocCBATCardTable_mib_index *tbl_idx, long eocCBATCardIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCBATCardIndex = eocCBATCardIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocCBATCardTable_indexes_set(eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocCBATCardTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocCBATCardIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocCBATCardTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCBATCardTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardMACAddress
+ * eocCBATCardMACAddress is subid 2 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.2
+ * Description:
+CBAT°å¿¨µÄMACµØÖ·
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 0
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/**
+ * Extract the current value of the eocCBATCardMACAddress data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardMACAddress_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCBATCardMACAddress_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCBATCardMACAddress.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCBATCardMACAddress_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCBATCardMACAddress_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCBATCardMACAddress_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardMACAddress_val_ptr_ptr, size_t *eocCBATCardMACAddress_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCBATCardMACAddress_val_ptr_ptr) && (NULL != *eocCBATCardMACAddress_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCBATCardMACAddress_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardMACAddress_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardMACAddress data.
+ * copy (* eocCBATCardMACAddress_val_ptr_ptr ) data and (* eocCBATCardMACAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCBATCardMACAddress data
+ */
+ if ((NULL == (* eocCBATCardMACAddress_val_ptr_ptr )) ||
+ ((* eocCBATCardMACAddress_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCBATCardMACAddress_len* sizeof(rowreq_ctx->data.eocCBATCardMACAddress[0])))) {
+ /*
+ * allocate space for eocCBATCardMACAddress data
+ */
+ (* eocCBATCardMACAddress_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCBATCardMACAddress_len* sizeof(rowreq_ctx->data.eocCBATCardMACAddress[0]));
+ if(NULL == (* eocCBATCardMACAddress_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCBATCardMACAddress_val_ptr_len_ptr ) = rowreq_ctx->data.eocCBATCardMACAddress_len* sizeof(rowreq_ctx->data.eocCBATCardMACAddress[0]);
+ memcpy( (* eocCBATCardMACAddress_val_ptr_ptr ), rowreq_ctx->data.eocCBATCardMACAddress, rowreq_ctx->data.eocCBATCardMACAddress_len* sizeof(rowreq_ctx->data.eocCBATCardMACAddress[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCBATCardMACAddress_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardOnlineStatus
+ * eocCBATCardOnlineStatus is subid 3 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.3
+ * Description:
+CBAT°å¿¨ÔÚÏß״̬£º
+ 0- ²»ÔÚÏߣ»
+ 1- ÔÚÏß¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: offline(0), online(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCBATCardOnlineStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardOnlineStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardOnlineStatus_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATCardOnlineStatus_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardOnlineStatus_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardOnlineStatus_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardOnlineStatus data.
+ * copy (* eocCBATCardOnlineStatus_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardOnlineStatus_val_ptr ) = rowreq_ctx->data.eocCBATCardOnlineStatus;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardOnlineStatus_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardModelNumber
+ * eocCBATCardModelNumber is subid 4 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.4
+ * Description:
+CBAT°å¿¨µÄÐͺÅ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the eocCBATCardModelNumber data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardModelNumber_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCBATCardModelNumber_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCBATCardModelNumber.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCBATCardModelNumber_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCBATCardModelNumber_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCBATCardModelNumber_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardModelNumber_val_ptr_ptr, size_t *eocCBATCardModelNumber_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCBATCardModelNumber_val_ptr_ptr) && (NULL != *eocCBATCardModelNumber_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCBATCardModelNumber_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardModelNumber_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardModelNumber data.
+ * copy (* eocCBATCardModelNumber_val_ptr_ptr ) data and (* eocCBATCardModelNumber_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCBATCardModelNumber data
+ */
+ if ((NULL == (* eocCBATCardModelNumber_val_ptr_ptr )) ||
+ ((* eocCBATCardModelNumber_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCBATCardModelNumber_len* sizeof(rowreq_ctx->data.eocCBATCardModelNumber[0])))) {
+ /*
+ * allocate space for eocCBATCardModelNumber data
+ */
+ (* eocCBATCardModelNumber_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCBATCardModelNumber_len* sizeof(rowreq_ctx->data.eocCBATCardModelNumber[0]));
+ if(NULL == (* eocCBATCardModelNumber_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCBATCardModelNumber_val_ptr_len_ptr ) = rowreq_ctx->data.eocCBATCardModelNumber_len* sizeof(rowreq_ctx->data.eocCBATCardModelNumber[0]);
+ memcpy( (* eocCBATCardModelNumber_val_ptr_ptr ), rowreq_ctx->data.eocCBATCardModelNumber, rowreq_ctx->data.eocCBATCardModelNumber_len* sizeof(rowreq_ctx->data.eocCBATCardModelNumber[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCBATCardModelNumber_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardSoftwareVersion
+ * eocCBATCardSoftwareVersion is subid 5 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.5
+ * Description:
+CBAT°å¿¨µÄ³ÌÐò°æ±¾ºÅ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the eocCBATCardSoftwareVersion data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardSoftwareVersion_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCBATCardSoftwareVersion_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCBATCardSoftwareVersion.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCBATCardSoftwareVersion_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCBATCardSoftwareVersion_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCBATCardSoftwareVersion_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardSoftwareVersion_val_ptr_ptr, size_t *eocCBATCardSoftwareVersion_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCBATCardSoftwareVersion_val_ptr_ptr) && (NULL != *eocCBATCardSoftwareVersion_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCBATCardSoftwareVersion_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardSoftwareVersion_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardSoftwareVersion data.
+ * copy (* eocCBATCardSoftwareVersion_val_ptr_ptr ) data and (* eocCBATCardSoftwareVersion_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCBATCardSoftwareVersion data
+ */
+ if ((NULL == (* eocCBATCardSoftwareVersion_val_ptr_ptr )) ||
+ ((* eocCBATCardSoftwareVersion_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCBATCardSoftwareVersion_len* sizeof(rowreq_ctx->data.eocCBATCardSoftwareVersion[0])))) {
+ /*
+ * allocate space for eocCBATCardSoftwareVersion data
+ */
+ (* eocCBATCardSoftwareVersion_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCBATCardSoftwareVersion_len* sizeof(rowreq_ctx->data.eocCBATCardSoftwareVersion[0]));
+ if(NULL == (* eocCBATCardSoftwareVersion_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCBATCardSoftwareVersion_val_ptr_len_ptr ) = rowreq_ctx->data.eocCBATCardSoftwareVersion_len* sizeof(rowreq_ctx->data.eocCBATCardSoftwareVersion[0]);
+ memcpy( (* eocCBATCardSoftwareVersion_val_ptr_ptr ), rowreq_ctx->data.eocCBATCardSoftwareVersion, rowreq_ctx->data.eocCBATCardSoftwareVersion_len* sizeof(rowreq_ctx->data.eocCBATCardSoftwareVersion[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCBATCardSoftwareVersion_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardReset
+ * eocCBATCardReset is subid 6 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.6
+ * Description:
+дÈë'1'¸´Î»ÔÚÏß¾Ö¶ËÉ豸£¬Ð´ÈëÆäËüÖµ²»Æð×÷Ó᣶Á´Ë¶ÔÏóʱ·µ»ØÖµ'1'£¬¶ÔÉ豸ÎÞÓ°Ïì
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: true(1), false(2)
+ *
+ * Its syntax is TruthValue (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCBATCardReset data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardReset_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardReset_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATCardReset_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardReset_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardReset_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardReset data.
+ * copy (* eocCBATCardReset_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardReset_val_ptr ) = rowreq_ctx->data.eocCBATCardReset;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardReset_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardUpLinkBroadcastFrameSendIntervalT1
+ * eocCBATCardUpLinkBroadcastFrameSendIntervalT1 is subid 7 of eocCBATCardEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.7
+ * Description:
+È·ÈÏÇ°ÏòÉÏÁªONU·¢Ë͹㲥֡¼ä¸ô£¬µ¥Î»0.01Ãë ¼ä¸ôÖµ½¨ÒéΪ1·ÖÖÓ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ * defval: 6000
+ *
+ * Ranges: 0 - 2147483647;
+ *
+ * Its syntax is TimeInterval (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCBATCardUpLinkBroadcastFrameSendIntervalT1 data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardUpLinkBroadcastFrameSendIntervalT1_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkBroadcastFrameSendIntervalT1_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardUpLinkBroadcastFrameSendIntervalT1 data.
+ * copy (* eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val_ptr ) = rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT1;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkBroadcastFrameSendIntervalT1_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardUpLinkBroadcastFrameSendIntervalT2
+ * eocCBATCardUpLinkBroadcastFrameSendIntervalT2 is subid 8 of eocCBATCardEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.8
+ * Description:
+È·ÈϺóÏòÉÏÁªONU·¢Ë͹㲥֡¼ä¸ô, µ¥Î»0.01Ãë,¼ä¸ôÖµ½¨ÒéΪ20·ÖÖÓ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ * defval: 120000
+ *
+ * Ranges: 0 - 2147483647;
+ *
+ * Its syntax is TimeInterval (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCBATCardUpLinkBroadcastFrameSendIntervalT2 data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardUpLinkBroadcastFrameSendIntervalT2_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkBroadcastFrameSendIntervalT2_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardUpLinkBroadcastFrameSendIntervalT2 data.
+ * copy (* eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val_ptr ) = rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT2;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkBroadcastFrameSendIntervalT2_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardUpLinkDeviceMACAddress
+ * eocCBATCardUpLinkDeviceMACAddress is subid 9 of eocCBATCardEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.9
+ * Description:
+CBAT°å¿¨ÉÏÁªONUµÄMACµØÖ·
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/**
+ * Extract the current value of the eocCBATCardUpLinkDeviceMACAddress data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardUpLinkDeviceMACAddress_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCBATCardUpLinkDeviceMACAddress_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCBATCardUpLinkDeviceMACAddress.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCBATCardUpLinkDeviceMACAddress_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCBATCardUpLinkDeviceMACAddress_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCBATCardUpLinkDeviceMACAddress_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardUpLinkDeviceMACAddress_val_ptr_ptr, size_t *eocCBATCardUpLinkDeviceMACAddress_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCBATCardUpLinkDeviceMACAddress_val_ptr_ptr) && (NULL != *eocCBATCardUpLinkDeviceMACAddress_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCBATCardUpLinkDeviceMACAddress_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkDeviceMACAddress_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardUpLinkDeviceMACAddress data.
+ * copy (* eocCBATCardUpLinkDeviceMACAddress_val_ptr_ptr ) data and (* eocCBATCardUpLinkDeviceMACAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCBATCardUpLinkDeviceMACAddress data
+ */
+ if ((NULL == (* eocCBATCardUpLinkDeviceMACAddress_val_ptr_ptr )) ||
+ ((* eocCBATCardUpLinkDeviceMACAddress_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress_len* sizeof(rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress[0])))) {
+ /*
+ * allocate space for eocCBATCardUpLinkDeviceMACAddress data
+ */
+ (* eocCBATCardUpLinkDeviceMACAddress_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress_len* sizeof(rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress[0]));
+ if(NULL == (* eocCBATCardUpLinkDeviceMACAddress_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCBATCardUpLinkDeviceMACAddress_val_ptr_len_ptr ) = rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress_len* sizeof(rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress[0]);
+ memcpy( (* eocCBATCardUpLinkDeviceMACAddress_val_ptr_ptr ), rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress, rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress_len* sizeof(rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkDeviceMACAddress_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardUpLinkDevicePortNumber
+ * eocCBATCardUpLinkDevicePortNumber is subid 10 of eocCBATCardEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.10
+ * Description:
+CBAT°å¿¨ÉÏÁªONU¶Ë¿ÚºÅ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCBATCardUpLinkDevicePortNumber data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardUpLinkDevicePortNumber_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardUpLinkDevicePortNumber_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardUpLinkDevicePortNumber_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardUpLinkDevicePortNumber_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkDevicePortNumber_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardUpLinkDevicePortNumber data.
+ * copy (* eocCBATCardUpLinkDevicePortNumber_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardUpLinkDevicePortNumber_val_ptr ) = rowreq_ctx->data.eocCBATCardUpLinkDevicePortNumber;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkDevicePortNumber_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardConfigurationSaving
+ * eocCBATCardConfigurationSaving is subid 11 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.11
+ * Description:
+дÈë1½«µ±Ç°µÄÅäÖôæÈë·ÇÒ×ʧÐÔ´æ´¢Æ÷ÖУ¬Ð´ÈëÆäËüÖµ²»Æð×÷Ó᣶Á´Ë¶ÔÏóʱ·µ»ØÖµ1£¬¶ÔÉ豸ÎÞÓ°Ïì¡£´Ë²Ù×÷½¨Òé×÷Ϊÿ´Î±ä¸üÅäÖúóµÄ±ØÑ¡²Ù×÷
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: save(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCBATCardConfigurationSaving data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardConfigurationSaving_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardConfigurationSaving_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATCardConfigurationSaving_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardConfigurationSaving_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardConfigurationSaving_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardConfigurationSaving data.
+ * copy (* eocCBATCardConfigurationSaving_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardConfigurationSaving_val_ptr ) = rowreq_ctx->data.eocCBATCardConfigurationSaving;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardConfigurationSaving_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardConfigurationResult
+ * eocCBATCardConfigurationResult is subid 12 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.12
+ * Description:
+±£´æCBAT°å¿¨É豸µ±Ç°ÅäÖõĽá¹û:
+ success(0)- ±£´æµ±Ç°Åä³É¹¦,
+ running(1)- ÕýÔÚ±£´æµ±Ç°ÅäÖÃ,
+ failed(2)- ±£´æµ±Ç°ÅäÖÃʧ°Ü.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 3/8. Values: success(0), running(1), failed(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCBATCardConfigurationResult data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardConfigurationResult_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardConfigurationResult_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATCardConfigurationResult_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardConfigurationResult_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardConfigurationResult_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardConfigurationResult data.
+ * copy (* eocCBATCardConfigurationResult_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardConfigurationResult_val_ptr ) = rowreq_ctx->data.eocCBATCardConfigurationResult;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardConfigurationResult_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardTemperature
+ * eocCBATCardTemperature is subid 13 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.13
+ * Description:
+CBAT°å¿¨µ±Ç°Î¶È
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: -128 - 127;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCBATCardTemperature data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardTemperature_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardTemperature_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardTemperature_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardTemperature_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTemperature_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardTemperature data.
+ * copy (* eocCBATCardTemperature_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardTemperature_val_ptr ) = rowreq_ctx->data.eocCBATCardTemperature;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardTemperature_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardLogicalID
+ * eocCBATCardLogicalID is subid 14 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.14
+ * Description:
+Ö¸¶¨EoC CBATÉ豸Âß¼­±êʶ·û(Logical ID), ´ËÖµÓëCBATÉ豸ÆäËûÊôÐÔÎ޹ء£´Ë¶ÔÏóÖµÓ¦µ±´æ·ÅÔÚ·ÇÒ×ʧÐÔ´æ´¢Æ÷ÖС£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 40;
+ *
+ * Its syntax is OCTETSTR (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 40)
+ */
+/**
+ * Extract the current value of the eocCBATCardLogicalID data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardLogicalID_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCBATCardLogicalID_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCBATCardLogicalID.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCBATCardLogicalID_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCBATCardLogicalID_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCBATCardLogicalID_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardLogicalID_val_ptr_ptr, size_t *eocCBATCardLogicalID_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCBATCardLogicalID_val_ptr_ptr) && (NULL != *eocCBATCardLogicalID_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCBATCardLogicalID_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardLogicalID_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardLogicalID data.
+ * copy (* eocCBATCardLogicalID_val_ptr_ptr ) data and (* eocCBATCardLogicalID_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCBATCardLogicalID data
+ */
+ if ((NULL == (* eocCBATCardLogicalID_val_ptr_ptr )) ||
+ ((* eocCBATCardLogicalID_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCBATCardLogicalID_len* sizeof(rowreq_ctx->data.eocCBATCardLogicalID[0])))) {
+ /*
+ * allocate space for eocCBATCardLogicalID data
+ */
+ (* eocCBATCardLogicalID_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCBATCardLogicalID_len* sizeof(rowreq_ctx->data.eocCBATCardLogicalID[0]));
+ if(NULL == (* eocCBATCardLogicalID_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCBATCardLogicalID_val_ptr_len_ptr ) = rowreq_ctx->data.eocCBATCardLogicalID_len* sizeof(rowreq_ctx->data.eocCBATCardLogicalID[0]);
+ memcpy( (* eocCBATCardLogicalID_val_ptr_ptr ), rowreq_ctx->data.eocCBATCardLogicalID, rowreq_ctx->data.eocCBATCardLogicalID_len* sizeof(rowreq_ctx->data.eocCBATCardLogicalID[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCBATCardLogicalID_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardTechProject
+ * eocCBATCardTechProject is subid 15 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.15
+ * Description:
+EoCÉ豸µÄ¼¼Êõ·½°¸ÃèÊö£¬×Ö·û´®³¤¶È×î´óΪ16
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 16;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 16)
+ */
+/**
+ * Extract the current value of the eocCBATCardTechProject data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardTechProject_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCBATCardTechProject_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCBATCardTechProject.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCBATCardTechProject_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCBATCardTechProject_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCBATCardTechProject_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardTechProject_val_ptr_ptr, size_t *eocCBATCardTechProject_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCBATCardTechProject_val_ptr_ptr) && (NULL != *eocCBATCardTechProject_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCBATCardTechProject_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTechProject_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardTechProject data.
+ * copy (* eocCBATCardTechProject_val_ptr_ptr ) data and (* eocCBATCardTechProject_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCBATCardTechProject data
+ */
+ if ((NULL == (* eocCBATCardTechProject_val_ptr_ptr )) ||
+ ((* eocCBATCardTechProject_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCBATCardTechProject_len* sizeof(rowreq_ctx->data.eocCBATCardTechProject[0])))) {
+ /*
+ * allocate space for eocCBATCardTechProject data
+ */
+ (* eocCBATCardTechProject_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCBATCardTechProject_len* sizeof(rowreq_ctx->data.eocCBATCardTechProject[0]));
+ if(NULL == (* eocCBATCardTechProject_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCBATCardTechProject_val_ptr_len_ptr ) = rowreq_ctx->data.eocCBATCardTechProject_len* sizeof(rowreq_ctx->data.eocCBATCardTechProject[0]);
+ memcpy( (* eocCBATCardTechProject_val_ptr_ptr ), rowreq_ctx->data.eocCBATCardTechProject, rowreq_ctx->data.eocCBATCardTechProject_len* sizeof(rowreq_ctx->data.eocCBATCardTechProject[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCBATCardTechProject_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardManufactoryInfo
+ * eocCBATCardManufactoryInfo is subid 16 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.16
+ * Description:
+EoCÉ豸µÄÉú²ú³§¼ÒÐÅÏ¢¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the eocCBATCardManufactoryInfo data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardManufactoryInfo_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCBATCardManufactoryInfo_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCBATCardManufactoryInfo.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCBATCardManufactoryInfo_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCBATCardManufactoryInfo_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCBATCardManufactoryInfo_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardManufactoryInfo_val_ptr_ptr, size_t *eocCBATCardManufactoryInfo_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCBATCardManufactoryInfo_val_ptr_ptr) && (NULL != *eocCBATCardManufactoryInfo_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCBATCardManufactoryInfo_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardManufactoryInfo_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardManufactoryInfo data.
+ * copy (* eocCBATCardManufactoryInfo_val_ptr_ptr ) data and (* eocCBATCardManufactoryInfo_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCBATCardManufactoryInfo data
+ */
+ if ((NULL == (* eocCBATCardManufactoryInfo_val_ptr_ptr )) ||
+ ((* eocCBATCardManufactoryInfo_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCBATCardManufactoryInfo_len* sizeof(rowreq_ctx->data.eocCBATCardManufactoryInfo[0])))) {
+ /*
+ * allocate space for eocCBATCardManufactoryInfo data
+ */
+ (* eocCBATCardManufactoryInfo_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCBATCardManufactoryInfo_len* sizeof(rowreq_ctx->data.eocCBATCardManufactoryInfo[0]));
+ if(NULL == (* eocCBATCardManufactoryInfo_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCBATCardManufactoryInfo_val_ptr_len_ptr ) = rowreq_ctx->data.eocCBATCardManufactoryInfo_len* sizeof(rowreq_ctx->data.eocCBATCardManufactoryInfo[0]);
+ memcpy( (* eocCBATCardManufactoryInfo_val_ptr_ptr ), rowreq_ctx->data.eocCBATCardManufactoryInfo, rowreq_ctx->data.eocCBATCardManufactoryInfo_len* sizeof(rowreq_ctx->data.eocCBATCardManufactoryInfo[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCBATCardManufactoryInfo_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardSerialNumber
+ * eocCBATCardSerialNumber is subid 17 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.17
+ * Description:
+EoCÉ豸µÄÐòÁкÅ.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the eocCBATCardSerialNumber data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardSerialNumber_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCBATCardSerialNumber_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCBATCardSerialNumber.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCBATCardSerialNumber_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCBATCardSerialNumber_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCBATCardSerialNumber_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardSerialNumber_val_ptr_ptr, size_t *eocCBATCardSerialNumber_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCBATCardSerialNumber_val_ptr_ptr) && (NULL != *eocCBATCardSerialNumber_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCBATCardSerialNumber_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardSerialNumber_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardSerialNumber data.
+ * copy (* eocCBATCardSerialNumber_val_ptr_ptr ) data and (* eocCBATCardSerialNumber_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCBATCardSerialNumber data
+ */
+ if ((NULL == (* eocCBATCardSerialNumber_val_ptr_ptr )) ||
+ ((* eocCBATCardSerialNumber_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCBATCardSerialNumber_len* sizeof(rowreq_ctx->data.eocCBATCardSerialNumber[0])))) {
+ /*
+ * allocate space for eocCBATCardSerialNumber data
+ */
+ (* eocCBATCardSerialNumber_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCBATCardSerialNumber_len* sizeof(rowreq_ctx->data.eocCBATCardSerialNumber[0]));
+ if(NULL == (* eocCBATCardSerialNumber_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCBATCardSerialNumber_val_ptr_len_ptr ) = rowreq_ctx->data.eocCBATCardSerialNumber_len* sizeof(rowreq_ctx->data.eocCBATCardSerialNumber[0]);
+ memcpy( (* eocCBATCardSerialNumber_val_ptr_ptr ), rowreq_ctx->data.eocCBATCardSerialNumber, rowreq_ctx->data.eocCBATCardSerialNumber_len* sizeof(rowreq_ctx->data.eocCBATCardSerialNumber[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCBATCardSerialNumber_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardHardwareVersion
+ * eocCBATCardHardwareVersion is subid 18 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.18
+ * Description:
+EoC CBAT É豸µÄÓ²¼þ°æ±¾ºÅ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the eocCBATCardHardwareVersion data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardHardwareVersion_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCBATCardHardwareVersion_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCBATCardHardwareVersion.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCBATCardHardwareVersion_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCBATCardHardwareVersion_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCBATCardHardwareVersion_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardHardwareVersion_val_ptr_ptr, size_t *eocCBATCardHardwareVersion_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCBATCardHardwareVersion_val_ptr_ptr) && (NULL != *eocCBATCardHardwareVersion_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCBATCardHardwareVersion_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardHardwareVersion_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardHardwareVersion data.
+ * copy (* eocCBATCardHardwareVersion_val_ptr_ptr ) data and (* eocCBATCardHardwareVersion_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCBATCardHardwareVersion data
+ */
+ if ((NULL == (* eocCBATCardHardwareVersion_val_ptr_ptr )) ||
+ ((* eocCBATCardHardwareVersion_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCBATCardHardwareVersion_len* sizeof(rowreq_ctx->data.eocCBATCardHardwareVersion[0])))) {
+ /*
+ * allocate space for eocCBATCardHardwareVersion data
+ */
+ (* eocCBATCardHardwareVersion_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCBATCardHardwareVersion_len* sizeof(rowreq_ctx->data.eocCBATCardHardwareVersion[0]));
+ if(NULL == (* eocCBATCardHardwareVersion_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCBATCardHardwareVersion_val_ptr_len_ptr ) = rowreq_ctx->data.eocCBATCardHardwareVersion_len* sizeof(rowreq_ctx->data.eocCBATCardHardwareVersion[0]);
+ memcpy( (* eocCBATCardHardwareVersion_val_ptr_ptr ), rowreq_ctx->data.eocCBATCardHardwareVersion, rowreq_ctx->data.eocCBATCardHardwareVersion_len* sizeof(rowreq_ctx->data.eocCBATCardHardwareVersion[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCBATCardHardwareVersion_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardModelNumberProvisioned
+ * eocCBATCardModelNumberProvisioned is subid 19 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.19
+ * Description:
+CBAT°å¿¨µÄ¶¨ÒåµÄ£¨»òÕß˵·ÖÅäµÄ£©ÐͺÅ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the eocCBATCardModelNumberProvisioned data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardModelNumberProvisioned_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCBATCardModelNumberProvisioned_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCBATCardModelNumberProvisioned.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCBATCardModelNumberProvisioned_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCBATCardModelNumberProvisioned_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCBATCardModelNumberProvisioned_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardModelNumberProvisioned_val_ptr_ptr, size_t *eocCBATCardModelNumberProvisioned_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCBATCardModelNumberProvisioned_val_ptr_ptr) && (NULL != *eocCBATCardModelNumberProvisioned_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCBATCardModelNumberProvisioned_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardModelNumberProvisioned_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardModelNumberProvisioned data.
+ * copy (* eocCBATCardModelNumberProvisioned_val_ptr_ptr ) data and (* eocCBATCardModelNumberProvisioned_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCBATCardModelNumberProvisioned data
+ */
+ if ((NULL == (* eocCBATCardModelNumberProvisioned_val_ptr_ptr )) ||
+ ((* eocCBATCardModelNumberProvisioned_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCBATCardModelNumberProvisioned_len* sizeof(rowreq_ctx->data.eocCBATCardModelNumberProvisioned[0])))) {
+ /*
+ * allocate space for eocCBATCardModelNumberProvisioned data
+ */
+ (* eocCBATCardModelNumberProvisioned_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCBATCardModelNumberProvisioned_len* sizeof(rowreq_ctx->data.eocCBATCardModelNumberProvisioned[0]));
+ if(NULL == (* eocCBATCardModelNumberProvisioned_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCBATCardModelNumberProvisioned_val_ptr_len_ptr ) = rowreq_ctx->data.eocCBATCardModelNumberProvisioned_len* sizeof(rowreq_ctx->data.eocCBATCardModelNumberProvisioned[0]);
+ memcpy( (* eocCBATCardModelNumberProvisioned_val_ptr_ptr ), rowreq_ctx->data.eocCBATCardModelNumberProvisioned, rowreq_ctx->data.eocCBATCardModelNumberProvisioned_len* sizeof(rowreq_ctx->data.eocCBATCardModelNumberProvisioned[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCBATCardModelNumberProvisioned_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_get.h
new file mode 100644
index 0000000000..dff7bd4176
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_get.h
@@ -0,0 +1,76 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocCBATCardTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCCBATCARDTABLE_DATA_GET_H
+#define EOCCBATCARDTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardTable is subid 2 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2, length: 11
+*/
+ /*
+ * indexes
+ */
+
+ int eocCBATCardMACAddress_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardMACAddress_val_ptr_ptr, size_t *eocCBATCardMACAddress_val_ptr_len_ptr );
+ int eocCBATCardOnlineStatus_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATCardOnlineStatus_val_ptr );
+ int eocCBATCardModelNumber_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardModelNumber_val_ptr_ptr, size_t *eocCBATCardModelNumber_val_ptr_len_ptr );
+ int eocCBATCardSoftwareVersion_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardSoftwareVersion_val_ptr_ptr, size_t *eocCBATCardSoftwareVersion_val_ptr_len_ptr );
+ int eocCBATCardReset_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATCardReset_val_ptr );
+ int eocCBATCardUpLinkBroadcastFrameSendIntervalT1_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val_ptr );
+ int eocCBATCardUpLinkBroadcastFrameSendIntervalT2_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val_ptr );
+ int eocCBATCardUpLinkDeviceMACAddress_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardUpLinkDeviceMACAddress_val_ptr_ptr, size_t *eocCBATCardUpLinkDeviceMACAddress_val_ptr_len_ptr );
+ int eocCBATCardUpLinkDevicePortNumber_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardUpLinkDevicePortNumber_val_ptr );
+ int eocCBATCardConfigurationSaving_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATCardConfigurationSaving_val_ptr );
+ int eocCBATCardConfigurationResult_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long * eocCBATCardConfigurationResult_val_ptr );
+ int eocCBATCardTemperature_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardTemperature_val_ptr );
+ int eocCBATCardLogicalID_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardLogicalID_val_ptr_ptr, size_t *eocCBATCardLogicalID_val_ptr_len_ptr );
+ int eocCBATCardTechProject_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardTechProject_val_ptr_ptr, size_t *eocCBATCardTechProject_val_ptr_len_ptr );
+ int eocCBATCardManufactoryInfo_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardManufactoryInfo_val_ptr_ptr, size_t *eocCBATCardManufactoryInfo_val_ptr_len_ptr );
+ int eocCBATCardSerialNumber_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardSerialNumber_val_ptr_ptr, size_t *eocCBATCardSerialNumber_val_ptr_len_ptr );
+ int eocCBATCardHardwareVersion_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardHardwareVersion_val_ptr_ptr, size_t *eocCBATCardHardwareVersion_val_ptr_len_ptr );
+ int eocCBATCardModelNumberProvisioned_get( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char **eocCBATCardModelNumberProvisioned_val_ptr_ptr, size_t *eocCBATCardModelNumberProvisioned_val_ptr_len_ptr );
+
+
+int eocCBATCardTable_indexes_set_tbl_idx(eocCBATCardTable_mib_index *tbl_idx, long eocCBATCardIndex_val);
+int eocCBATCardTable_indexes_set(eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_set.c
new file mode 100644
index 0000000000..44b83d517f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_set.c
@@ -0,0 +1,1982 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardTable is subid 2 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2, length: 11
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocCBATCardTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocCBATCardTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCBATCardTable_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocCBATCardTable undo.
+ * set up eocCBATCardTable undo information, in preparation for a set.
+ * Undo storage is in (* eocCBATCardModelNumberProvisioned_val_ptr_ptr )*
+ */
+
+ return rc;
+} /* eocCBATCardTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCBATCardTable_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocCBATCardTable undo.
+ * eocCBATCardTable undo information, in response to a failed set.
+ * Undo storage is in (* eocCBATCardModelNumberProvisioned_val_ptr_ptr )*
+ */
+
+ return rc;
+} /* eocCBATCardTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCBATCardTable_undo_cleanup( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocCBATCardTable undo.
+ * Undo storage is in (* eocCBATCardModelNumberProvisioned_val_ptr_ptr )*
+ */
+
+ return rc;
+} /* eocCBATCardTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCBATCardTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCBATCardTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCBATCardTable_commit( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocCBATCardTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_EOCCBATCARDRESET_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCBATCARDRESET_FLAG; /* clear eocCBATCardReset */
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardReset.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardReset
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRESET_FLAG;
+
+ }
+
+ if (save_flags &
+ COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT1_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT1_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardUpLinkBroadcastFrameSendIntervalT1.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardUpLinkBroadcastFrameSendIntervalT1
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT1_FLAG;
+ }
+
+ if (save_flags &
+ COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT2_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT2_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardUpLinkBroadcastFrameSendIntervalT2.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardUpLinkBroadcastFrameSendIntervalT2
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT2_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCBATCARDUPLINKDEVICEMACADDRESS_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCBATCARDUPLINKDEVICEMACADDRESS_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardUpLinkDeviceMACAddress.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardUpLinkDeviceMACAddress
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCBATCARDUPLINKDEVICEMACADDRESS_FLAG;
+
+ }
+
+ if (save_flags & COLUMN_EOCCBATCARDUPLINKDEVICEPORTNUMBER_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCBATCARDUPLINKDEVICEPORTNUMBER_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardUpLinkDevicePortNumber.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardUpLinkDevicePortNumber
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCBATCARDUPLINKDEVICEPORTNUMBER_FLAG;
+
+ }
+
+ if (save_flags & COLUMN_EOCCBATCARDCONFIGURATIONSAVING_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCBATCARDCONFIGURATIONSAVING_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardConfigurationSaving.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardConfigurationSaving
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCBATCARDCONFIGURATIONSAVING_FLAG;
+
+ }
+
+ if (save_flags & COLUMN_EOCCBATCARDLOGICALID_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCBATCARDLOGICALID_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardLogicalID.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardLogicalID
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDLOGICALID_FLAG;
+
+ }
+
+ if (save_flags & COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardModelNumberProvisioned.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardModelNumberProvisioned
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED_FLAG;
+
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n", save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocCBATCardTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCBATCardTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCBATCardTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCBATCardTable_undo_commit( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_undo_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:485:M: |-> Undo eocCBATCardTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocCBATCardTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocCBATCardTable node value checks.
+ * TODO:450:M: Implement eocCBATCardTable undo functions.
+ * TODO:460:M: Implement eocCBATCardTable set functions.
+ * TODO:480:M: Implement eocCBATCardTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardReset
+ * eocCBATCardReset is subid 6 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.6
+ * Description:
+дÈë'1'¸´Î»ÔÚÏß¾Ö¶ËÉ豸£¬Ð´ÈëÆäËüÖµ²»Æð×÷Ó᣶Á´Ë¶ÔÏóʱ·µ»ØÖµ'1'£¬¶ÔÉ豸ÎÞÓ°Ïì
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: true(1), false(2)
+ *
+ * Its syntax is TruthValue (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardReset_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of true(1), false(2)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardReset_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardReset_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardReset_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardReset value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATCardReset value not illegal */
+} /* eocCBATCardReset_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardReset_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardReset_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardReset undo.
+ */
+ /*
+ * copy eocCBATCardReset data
+ * set rowreq_ctx->undo->eocCBATCardReset from rowreq_ctx->data.eocCBATCardReset
+ */
+ rowreq_ctx->undo->eocCBATCardReset = rowreq_ctx->data.eocCBATCardReset;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardReset_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardReset_val
+ * A long containing the new value.
+ */
+int
+eocCBATCardReset_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardReset_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardReset_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCBATCardReset value.
+ * set eocCBATCardReset value in rowreq_ctx->data
+ */
+ switch (eocCBATCardReset_val)
+ {
+ case TRUTHVALUE_TRUE:
+ rowreq_ctx->data.eocCBATCardReset =
+ INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDRESET_TRUE;
+ libspid_system_reboot ();
+ break;
+
+ case TRUTHVALUE_FALSE:
+ rowreq_ctx->data.eocCBATCardReset =
+ INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDRESET_FALSE;
+ break;
+
+ default:
+ snmp_log (LOG_ERR, "couldn't reverse map value %ld for "
+ "eocCBATCardReset\n", eocCBATCardReset_val);
+ return SNMP_ERR_GENERR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCBATCardReset_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardReset_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardReset_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardReset undo.
+ */
+ /*
+ * copy eocCBATCardReset data
+ * set rowreq_ctx->data.eocCBATCardReset from rowreq_ctx->undo->eocCBATCardReset
+ */
+ rowreq_ctx->data.eocCBATCardReset = rowreq_ctx->undo->eocCBATCardReset;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardReset_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardUpLinkBroadcastFrameSendIntervalT1
+ * eocCBATCardUpLinkBroadcastFrameSendIntervalT1 is subid 7 of eocCBATCardEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.7
+ * Description:
+È·ÈÏÇ°ÏòÉÏÁªONU·¢Ë͹㲥֡¼ä¸ô£¬µ¥Î»0.01Ãë ¼ä¸ôÖµ½¨ÒéΪ1·ÖÖÓ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ * defval: 6000
+ *
+ * Ranges: 0 - 2147483647;
+ *
+ * Its syntax is TimeInterval (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is in (one of) the range set(s): 0 - 2147483647
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardUpLinkBroadcastFrameSendIntervalT1_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkBroadcastFrameSendIntervalT1_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardUpLinkBroadcastFrameSendIntervalT1 value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATCardUpLinkBroadcastFrameSendIntervalT1 value not illegal */
+} /* eocCBATCardUpLinkBroadcastFrameSendIntervalT1_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardUpLinkBroadcastFrameSendIntervalT1_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkBroadcastFrameSendIntervalT1_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardUpLinkBroadcastFrameSendIntervalT1 undo.
+ */
+ /*
+ * copy eocCBATCardUpLinkBroadcastFrameSendIntervalT1 data
+ * set rowreq_ctx->undo->eocCBATCardUpLinkBroadcastFrameSendIntervalT1 from rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT1
+ */
+ rowreq_ctx->undo->eocCBATCardUpLinkBroadcastFrameSendIntervalT1 = rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT1;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkBroadcastFrameSendIntervalT1_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val
+ * A long containing the new value.
+ */
+int
+eocCBATCardUpLinkBroadcastFrameSendIntervalT1_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val )
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkBroadcastFrameSendIntervalT1_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCBATCardUpLinkBroadcastFrameSendIntervalT1 value.
+ * set eocCBATCardUpLinkBroadcastFrameSendIntervalT1 value in rowreq_ctx->data
+ */
+ sprintf (buffer, "%ld",
+ eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val);
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_TIME_SEC,
+ buffer))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT1 =
+ eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkBroadcastFrameSendIntervalT1_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardUpLinkBroadcastFrameSendIntervalT1_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkBroadcastFrameSendIntervalT1_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardUpLinkBroadcastFrameSendIntervalT1 undo.
+ */
+ /*
+ * copy eocCBATCardUpLinkBroadcastFrameSendIntervalT1 data
+ * set rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT1 from rowreq_ctx->undo->eocCBATCardUpLinkBroadcastFrameSendIntervalT1
+ */
+
+ sprintf (buffer, "%ld",
+ rowreq_ctx->undo->eocCBATCardUpLinkBroadcastFrameSendIntervalT1);
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_TIME_SEC,
+ buffer))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_UNDOFAILED;
+ }
+
+ rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT1 =
+ rowreq_ctx->undo->eocCBATCardUpLinkBroadcastFrameSendIntervalT1;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkBroadcastFrameSendIntervalT1_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardUpLinkBroadcastFrameSendIntervalT2
+ * eocCBATCardUpLinkBroadcastFrameSendIntervalT2 is subid 8 of eocCBATCardEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.8
+ * Description:
+È·ÈϺóÏòÉÏÁªONU·¢Ë͹㲥֡¼ä¸ô, µ¥Î»0.01Ãë,¼ä¸ôÖµ½¨ÒéΪ20·ÖÖÓ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 1
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ * defval: 120000
+ *
+ * Ranges: 0 - 2147483647;
+ *
+ * Its syntax is TimeInterval (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is in (one of) the range set(s): 0 - 2147483647
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardUpLinkBroadcastFrameSendIntervalT2_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkBroadcastFrameSendIntervalT2_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardUpLinkBroadcastFrameSendIntervalT2 value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATCardUpLinkBroadcastFrameSendIntervalT2 value not illegal */
+} /* eocCBATCardUpLinkBroadcastFrameSendIntervalT2_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardUpLinkBroadcastFrameSendIntervalT2_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkBroadcastFrameSendIntervalT2_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardUpLinkBroadcastFrameSendIntervalT2 undo.
+ */
+ /*
+ * copy eocCBATCardUpLinkBroadcastFrameSendIntervalT2 data
+ * set rowreq_ctx->undo->eocCBATCardUpLinkBroadcastFrameSendIntervalT2 from rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT2
+ */
+ rowreq_ctx->undo->eocCBATCardUpLinkBroadcastFrameSendIntervalT2 = rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT2;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkBroadcastFrameSendIntervalT2_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val
+ * A long containing the new value.
+ */
+int
+eocCBATCardUpLinkBroadcastFrameSendIntervalT2_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val )
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkBroadcastFrameSendIntervalT2_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCBATCardUpLinkBroadcastFrameSendIntervalT2 value.
+ * set eocCBATCardUpLinkBroadcastFrameSendIntervalT2 value in rowreq_ctx->data
+ */
+ sprintf (buffer, "%ld",
+ eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val);
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_TIME_SEC2,
+ buffer))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT2 =
+ eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkBroadcastFrameSendIntervalT2_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardUpLinkBroadcastFrameSendIntervalT2_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkBroadcastFrameSendIntervalT2_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardUpLinkBroadcastFrameSendIntervalT2 undo.
+ */
+ /*
+ * copy eocCBATCardUpLinkBroadcastFrameSendIntervalT2 data
+ * set rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT2 from rowreq_ctx->undo->eocCBATCardUpLinkBroadcastFrameSendIntervalT2
+ */
+ sprintf (buffer, "%ld",
+ rowreq_ctx->undo->eocCBATCardUpLinkBroadcastFrameSendIntervalT2);
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTODISCOVERY_TIME_SEC2,
+ buffer))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_UNDOFAILED;
+ }
+ rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT2 =
+ rowreq_ctx->undo->eocCBATCardUpLinkBroadcastFrameSendIntervalT2;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkBroadcastFrameSendIntervalT2_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardUpLinkDeviceMACAddress
+ * eocCBATCardUpLinkDeviceMACAddress is subid 9 of eocCBATCardEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.9
+ * Description:
+CBAT°å¿¨ÉÏÁªONUµÄMACµØÖ·
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardUpLinkDeviceMACAddress_val_ptr
+ * A char containing the new value.
+ * @param eocCBATCardUpLinkDeviceMACAddress_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCBATCardUpLinkDeviceMACAddress_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OCTET_STR
+ * The length is < sizeof(rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress).
+ * The length is in (one of) the range set(s): 6
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardUpLinkDeviceMACAddress_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardUpLinkDeviceMACAddress_val_ptr, size_t eocCBATCardUpLinkDeviceMACAddress_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkDeviceMACAddress_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCBATCardUpLinkDeviceMACAddress_val_ptr);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardUpLinkDeviceMACAddress value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATCardUpLinkDeviceMACAddress value not illegal */
+} /* eocCBATCardUpLinkDeviceMACAddress_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardUpLinkDeviceMACAddress_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkDeviceMACAddress_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardUpLinkDeviceMACAddress undo.
+ */
+ /*
+ * copy eocCBATCardUpLinkDeviceMACAddress and eocCBATCardUpLinkDeviceMACAddress_len data
+ * set rowreq_ctx->undo->eocCBATCardUpLinkDeviceMACAddress from rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress
+ */
+ memcpy( rowreq_ctx->undo->eocCBATCardUpLinkDeviceMACAddress, rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress,
+ (rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress_len * sizeof(rowreq_ctx->undo->eocCBATCardUpLinkDeviceMACAddress[0])));
+ rowreq_ctx->undo->eocCBATCardUpLinkDeviceMACAddress_len = rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkDeviceMACAddress_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardUpLinkDeviceMACAddress_val_ptr
+ * A char containing the new value.
+ * @param eocCBATCardUpLinkDeviceMACAddress_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCBATCardUpLinkDeviceMACAddress_val_ptr
+ */
+int
+eocCBATCardUpLinkDeviceMACAddress_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardUpLinkDeviceMACAddress_val_ptr, size_t eocCBATCardUpLinkDeviceMACAddress_val_ptr_len )
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkDeviceMACAddress_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCBATCardUpLinkDeviceMACAddress_val_ptr);
+ char buffer[LIBSPID_MAC_STR_LEN];
+
+ /*
+ * TODO:461:M: |-> Set eocCBATCardUpLinkDeviceMACAddress value.
+ * set eocCBATCardUpLinkDeviceMACAddress value in rowreq_ctx->data
+ */
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_bin_to_str (eocCBATCardUpLinkDeviceMACAddress_val_ptr,
+ buffer))
+ return MFD_ERROR;
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_ONU_MAC, buffer))
+ return SNMP_ERR_COMMITFAILED;
+
+ memcpy (rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress,
+ eocCBATCardUpLinkDeviceMACAddress_val_ptr,
+ eocCBATCardUpLinkDeviceMACAddress_val_ptr_len);
+ /** convert bytes to number of char */
+ rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress_len =
+ eocCBATCardUpLinkDeviceMACAddress_val_ptr_len /
+ sizeof (eocCBATCardUpLinkDeviceMACAddress_val_ptr[0]);
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkDeviceMACAddress_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardUpLinkDeviceMACAddress_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkDeviceMACAddress_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+ char buffer[LIBSPID_MAC_STR_LEN];
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardUpLinkDeviceMACAddress undo.
+ */
+ /*
+ * copy eocCBATCardUpLinkDeviceMACAddress and eocCBATCardUpLinkDeviceMACAddress_len data
+ * set rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress from rowreq_ctx->undo->eocCBATCardUpLinkDeviceMACAddress
+ */
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_bin_to_str (rowreq_ctx->undo->
+ eocCBATCardUpLinkDeviceMACAddress, buffer))
+ return MFD_ERROR;
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_ONU_MAC, buffer))
+ return SNMP_ERR_UNDOFAILED;
+
+ memcpy (rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress,
+ rowreq_ctx->undo->eocCBATCardUpLinkDeviceMACAddress,
+ (rowreq_ctx->undo->eocCBATCardUpLinkDeviceMACAddress_len *
+ sizeof (rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress[0])));
+ rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress_len =
+ rowreq_ctx->undo->eocCBATCardUpLinkDeviceMACAddress_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkDeviceMACAddress_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardUpLinkDevicePortNumber
+ * eocCBATCardUpLinkDevicePortNumber is subid 10 of eocCBATCardEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.10
+ * Description:
+CBAT°å¿¨ÉÏÁªONU¶Ë¿ÚºÅ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardUpLinkDevicePortNumber_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardUpLinkDevicePortNumber_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardUpLinkDevicePortNumber_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkDevicePortNumber_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardUpLinkDevicePortNumber value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATCardUpLinkDevicePortNumber value not illegal */
+} /* eocCBATCardUpLinkDevicePortNumber_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardUpLinkDevicePortNumber_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkDevicePortNumber_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardUpLinkDevicePortNumber undo.
+ */
+ /*
+ * copy eocCBATCardUpLinkDevicePortNumber data
+ * set rowreq_ctx->undo->eocCBATCardUpLinkDevicePortNumber from rowreq_ctx->data.eocCBATCardUpLinkDevicePortNumber
+ */
+ rowreq_ctx->undo->eocCBATCardUpLinkDevicePortNumber = rowreq_ctx->data.eocCBATCardUpLinkDevicePortNumber;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkDevicePortNumber_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardUpLinkDevicePortNumber_val
+ * A long containing the new value.
+ */
+int
+eocCBATCardUpLinkDevicePortNumber_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardUpLinkDevicePortNumber_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkDevicePortNumber_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ char buffer[4];
+
+ /*
+ * TODO:461:M: |-> Set eocCBATCardUpLinkDevicePortNumber value.
+ * set eocCBATCardUpLinkDevicePortNumber value in rowreq_ctx->data
+ */
+ sprintf (buffer, "%ld", eocCBATCardUpLinkDevicePortNumber_val);
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_ONU_PORT,
+ buffer))
+ return SNMP_ERR_COMMITFAILED;
+
+ rowreq_ctx->data.eocCBATCardUpLinkDevicePortNumber =
+ eocCBATCardUpLinkDevicePortNumber_val;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkDevicePortNumber_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardUpLinkDevicePortNumber_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardUpLinkDevicePortNumber_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+ char buffer[4];
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardUpLinkDevicePortNumber undo.
+ */
+ /*
+ * copy eocCBATCardUpLinkDevicePortNumber data
+ * set rowreq_ctx->data.eocCBATCardUpLinkDevicePortNumber from rowreq_ctx->undo->eocCBATCardUpLinkDevicePortNumber
+ */
+ sprintf (buffer, "%ld",
+ rowreq_ctx->undo->eocCBATCardUpLinkDevicePortNumber);
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_MASTER_CONF_PATH,
+ LIBSPID_MASTER_CONF_LABEL_ONU_PORT,
+ buffer))
+ return SNMP_ERR_UNDOFAILED;
+
+ rowreq_ctx->data.eocCBATCardUpLinkDevicePortNumber =
+ rowreq_ctx->undo->eocCBATCardUpLinkDevicePortNumber;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardUpLinkDevicePortNumber_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardConfigurationSaving
+ * eocCBATCardConfigurationSaving is subid 11 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.11
+ * Description:
+дÈë1½«µ±Ç°µÄÅäÖôæÈë·ÇÒ×ʧÐÔ´æ´¢Æ÷ÖУ¬Ð´ÈëÆäËüÖµ²»Æð×÷Ó᣶Á´Ë¶ÔÏóʱ·µ»ØÖµ1£¬¶ÔÉ豸ÎÞÓ°Ïì¡£´Ë²Ù×÷½¨Òé×÷Ϊÿ´Î±ä¸üÅäÖúóµÄ±ØÑ¡²Ù×÷
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: save(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardConfigurationSaving_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of save(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardConfigurationSaving_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardConfigurationSaving_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardConfigurationSaving_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardConfigurationSaving value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATCardConfigurationSaving value not illegal */
+} /* eocCBATCardConfigurationSaving_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardConfigurationSaving_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardConfigurationSaving_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardConfigurationSaving undo.
+ */
+ /*
+ * copy eocCBATCardConfigurationSaving data
+ * set rowreq_ctx->undo->eocCBATCardConfigurationSaving from rowreq_ctx->data.eocCBATCardConfigurationSaving
+ */
+ rowreq_ctx->undo->eocCBATCardConfigurationSaving = rowreq_ctx->data.eocCBATCardConfigurationSaving;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardConfigurationSaving_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardConfigurationSaving_val
+ * A long containing the new value.
+ */
+int
+eocCBATCardConfigurationSaving_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardConfigurationSaving_val )
+{
+ int ret;
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardConfigurationSaving_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCBATCardConfigurationSaving value.
+ * set eocCBATCardConfigurationSaving value in rowreq_ctx->data
+ */
+ switch (eocCBATCardConfigurationSaving_val)
+ {
+ case EOCCBATCARDCONFIGURATIONSAVING_SAVE:
+ /* call function for saving system configuration files to flash */
+ ret = libspid_system_save ();
+ /* set value of save result */
+ rowreq_ctx->data.eocCBATCardConfigurationResult =
+ ret ?
+ INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDCONFIGURATIONRESULT_FAILED :
+ INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDCONFIGURATIONRESULT_SUCCESS;
+ rowreq_ctx->data.eocCBATCardConfigurationSaving =
+ INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDCONFIGURATIONSAVING_SAVE;
+ break;
+
+ default:
+ snmp_log (LOG_ERR, "couldn't reverse map value %ld for "
+ "eocCBATCardConfigurationSaving\n",
+ eocCBATCardConfigurationSaving_val);
+ return SNMP_ERR_GENERR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCBATCardConfigurationSaving_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardConfigurationSaving_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardConfigurationSaving_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardConfigurationSaving undo.
+ */
+ /*
+ * copy eocCBATCardConfigurationSaving data
+ * set rowreq_ctx->data.eocCBATCardConfigurationSaving from rowreq_ctx->undo->eocCBATCardConfigurationSaving
+ */
+ rowreq_ctx->data.eocCBATCardConfigurationSaving = rowreq_ctx->undo->eocCBATCardConfigurationSaving;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardConfigurationSaving_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardLogicalID
+ * eocCBATCardLogicalID is subid 14 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.14
+ * Description:
+Ö¸¶¨EoC CBATÉ豸Âß¼­±êʶ·û(Logical ID), ´ËÖµÓëCBATÉ豸ÆäËûÊôÐÔÎ޹ء£´Ë¶ÔÏóÖµÓ¦µ±´æ·ÅÔÚ·ÇÒ×ʧÐÔ´æ´¢Æ÷ÖС£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 40;
+ *
+ * Its syntax is OCTETSTR (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 40)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardLogicalID_val_ptr
+ * A char containing the new value.
+ * @param eocCBATCardLogicalID_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCBATCardLogicalID_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OCTET_STR
+ * The length is < sizeof(rowreq_ctx->data.eocCBATCardLogicalID).
+ * The length is in (one of) the range set(s): 0 - 40
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardLogicalID_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardLogicalID_val_ptr, size_t eocCBATCardLogicalID_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardLogicalID_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCBATCardLogicalID_val_ptr);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardLogicalID value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATCardLogicalID value not illegal */
+} /* eocCBATCardLogicalID_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardLogicalID_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardLogicalID_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardLogicalID undo.
+ */
+ /*
+ * copy eocCBATCardLogicalID and eocCBATCardLogicalID_len data
+ * set rowreq_ctx->undo->eocCBATCardLogicalID from rowreq_ctx->data.eocCBATCardLogicalID
+ */
+ memcpy( rowreq_ctx->undo->eocCBATCardLogicalID, rowreq_ctx->data.eocCBATCardLogicalID,
+ (rowreq_ctx->data.eocCBATCardLogicalID_len * sizeof(rowreq_ctx->undo->eocCBATCardLogicalID[0])));
+ rowreq_ctx->undo->eocCBATCardLogicalID_len = rowreq_ctx->data.eocCBATCardLogicalID_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardLogicalID_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardLogicalID_val_ptr
+ * A char containing the new value.
+ * @param eocCBATCardLogicalID_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCBATCardLogicalID_val_ptr
+ */
+int
+eocCBATCardLogicalID_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardLogicalID_val_ptr, size_t eocCBATCardLogicalID_val_ptr_len )
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ int ret;
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardLogicalID_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCBATCardLogicalID_val_ptr);
+
+ /*
+ * TODO:461:M: |-> Set eocCBATCardLogicalID value.
+ * set eocCBATCardLogicalID value in rowreq_ctx->data
+ */
+ strcpy (buffer, eocCBATCardLogicalID_val_ptr);
+
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_ADMIN_LOGICAL_ID,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ memcpy (rowreq_ctx->data.eocCBATCardLogicalID,
+ eocCBATCardLogicalID_val_ptr, eocCBATCardLogicalID_val_ptr_len);
+ /** convert bytes to number of char */
+ rowreq_ctx->data.eocCBATCardLogicalID_len =
+ eocCBATCardLogicalID_val_ptr_len /
+ sizeof (eocCBATCardLogicalID_val_ptr[0]);
+
+ return MFD_SUCCESS;
+} /* eocCBATCardLogicalID_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardLogicalID_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ int ret;
+ DEBUGMSGTL (("verbose:eocCBATCardTable:eocCBATCardLogicalID_undo",
+ "called\n"));
+
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardLogicalID undo.
+ */
+ /*
+ * copy eocCBATCardLogicalID and eocCBATCardLogicalID_len data
+ * set rowreq_ctx->data.eocCBATCardLogicalID from rowreq_ctx->undo->eocCBATCardLogicalID
+ */
+ strcpy (buffer, rowreq_ctx->undo->eocCBATCardLogicalID);
+
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_ADMIN_LOGICAL_ID,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_UNDOFAILED;
+ }
+ memcpy (rowreq_ctx->data.eocCBATCardLogicalID,
+ rowreq_ctx->undo->eocCBATCardLogicalID,
+ (rowreq_ctx->undo->eocCBATCardLogicalID_len *
+ sizeof (rowreq_ctx->data.eocCBATCardLogicalID[0])));
+ rowreq_ctx->data.eocCBATCardLogicalID_len =
+ rowreq_ctx->undo->eocCBATCardLogicalID_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardLogicalID_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardEntry.eocCBATCardModelNumberProvisioned
+ * eocCBATCardModelNumberProvisioned is subid 19 of eocCBATCardEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2.1.19
+ * Description:
+CBAT°å¿¨µÄ¶¨ÒåµÄ£¨»òÕß˵·ÖÅäµÄ£©ÐͺÅ
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardModelNumberProvisioned_val_ptr
+ * A char containing the new value.
+ * @param eocCBATCardModelNumberProvisioned_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCBATCardModelNumberProvisioned_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OCTET_STR
+ * The length is < sizeof(rowreq_ctx->data.eocCBATCardModelNumberProvisioned).
+ * The length is in (one of) the range set(s): 0 - 255
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardModelNumberProvisioned_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardModelNumberProvisioned_val_ptr, size_t eocCBATCardModelNumberProvisioned_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardModelNumberProvisioned_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCBATCardModelNumberProvisioned_val_ptr);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardModelNumberProvisioned value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATCardModelNumberProvisioned value not illegal */
+} /* eocCBATCardModelNumberProvisioned_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardModelNumberProvisioned_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardModelNumberProvisioned_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardModelNumberProvisioned undo.
+ */
+ /*
+ * copy eocCBATCardModelNumberProvisioned and eocCBATCardModelNumberProvisioned_len data
+ * set rowreq_ctx->undo->eocCBATCardModelNumberProvisioned from rowreq_ctx->data.eocCBATCardModelNumberProvisioned
+ */
+ memcpy( rowreq_ctx->undo->eocCBATCardModelNumberProvisioned, rowreq_ctx->data.eocCBATCardModelNumberProvisioned,
+ (rowreq_ctx->data.eocCBATCardModelNumberProvisioned_len * sizeof(rowreq_ctx->undo->eocCBATCardModelNumberProvisioned[0])));
+ rowreq_ctx->undo->eocCBATCardModelNumberProvisioned_len = rowreq_ctx->data.eocCBATCardModelNumberProvisioned_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardModelNumberProvisioned_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardModelNumberProvisioned_val_ptr
+ * A char containing the new value.
+ * @param eocCBATCardModelNumberProvisioned_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCBATCardModelNumberProvisioned_val_ptr
+ */
+int
+eocCBATCardModelNumberProvisioned_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardModelNumberProvisioned_val_ptr, size_t eocCBATCardModelNumberProvisioned_val_ptr_len )
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardModelNumberProvisioned_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCBATCardModelNumberProvisioned_val_ptr);
+
+ /*
+ * TODO:461:M: |-> Set eocCBATCardModelNumberProvisioned value.
+ * set eocCBATCardModelNumberProvisioned value in rowreq_ctx->data
+ */
+ memcpy( rowreq_ctx->data.eocCBATCardModelNumberProvisioned, eocCBATCardModelNumberProvisioned_val_ptr, eocCBATCardModelNumberProvisioned_val_ptr_len );
+ /** convert bytes to number of char */
+ rowreq_ctx->data.eocCBATCardModelNumberProvisioned_len = eocCBATCardModelNumberProvisioned_val_ptr_len / sizeof(eocCBATCardModelNumberProvisioned_val_ptr[0]);
+
+ return MFD_SUCCESS;
+} /* eocCBATCardModelNumberProvisioned_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardModelNumberProvisioned_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardModelNumberProvisioned_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardModelNumberProvisioned undo.
+ */
+ /*
+ * copy eocCBATCardModelNumberProvisioned and eocCBATCardModelNumberProvisioned_len data
+ * set rowreq_ctx->data.eocCBATCardModelNumberProvisioned from rowreq_ctx->undo->eocCBATCardModelNumberProvisioned
+ */
+ memcpy( rowreq_ctx->data.eocCBATCardModelNumberProvisioned, rowreq_ctx->undo->eocCBATCardModelNumberProvisioned,
+ (rowreq_ctx->undo->eocCBATCardModelNumberProvisioned_len * sizeof(rowreq_ctx->data.eocCBATCardModelNumberProvisioned[0])));
+ rowreq_ctx->data.eocCBATCardModelNumberProvisioned_len = rowreq_ctx->undo->eocCBATCardModelNumberProvisioned_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardModelNumberProvisioned_undo */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_set.h
new file mode 100644
index 0000000000..34da93fb88
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_data_set.h
@@ -0,0 +1,140 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDTABLE_DATA_SET_H
+#define EOCCBATCARDTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardTable is subid 2 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2, length: 11
+*/
+
+
+int eocCBATCardTable_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx);
+int eocCBATCardTable_undo_cleanup( eocCBATCardTable_rowreq_ctx *rowreq_ctx);
+int eocCBATCardTable_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx);
+int eocCBATCardTable_commit( eocCBATCardTable_rowreq_ctx *rowreq_ctx);
+int eocCBATCardTable_undo_commit( eocCBATCardTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocCBATCardMACAddress_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardMACAddress_val_ptr, size_t eocCBATCardMACAddress_val_ptr_len);
+int eocCBATCardMACAddress_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardMACAddress_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardMACAddress_val_ptr, size_t eocCBATCardMACAddress_val_ptr_len );
+int eocCBATCardMACAddress_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardOnlineStatus_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardOnlineStatus_val);
+int eocCBATCardOnlineStatus_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardOnlineStatus_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardOnlineStatus_val );
+int eocCBATCardOnlineStatus_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardModelNumber_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardModelNumber_val_ptr, size_t eocCBATCardModelNumber_val_ptr_len);
+int eocCBATCardModelNumber_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardModelNumber_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardModelNumber_val_ptr, size_t eocCBATCardModelNumber_val_ptr_len );
+int eocCBATCardModelNumber_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardSoftwareVersion_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardSoftwareVersion_val_ptr, size_t eocCBATCardSoftwareVersion_val_ptr_len);
+int eocCBATCardSoftwareVersion_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardSoftwareVersion_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardSoftwareVersion_val_ptr, size_t eocCBATCardSoftwareVersion_val_ptr_len );
+int eocCBATCardSoftwareVersion_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardReset_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardReset_val);
+int eocCBATCardReset_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardReset_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardReset_val );
+int eocCBATCardReset_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardUpLinkBroadcastFrameSendIntervalT1_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val);
+int eocCBATCardUpLinkBroadcastFrameSendIntervalT1_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardUpLinkBroadcastFrameSendIntervalT1_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardUpLinkBroadcastFrameSendIntervalT1_val );
+int eocCBATCardUpLinkBroadcastFrameSendIntervalT1_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardUpLinkBroadcastFrameSendIntervalT2_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val);
+int eocCBATCardUpLinkBroadcastFrameSendIntervalT2_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardUpLinkBroadcastFrameSendIntervalT2_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardUpLinkBroadcastFrameSendIntervalT2_val );
+int eocCBATCardUpLinkBroadcastFrameSendIntervalT2_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardUpLinkDeviceMACAddress_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardUpLinkDeviceMACAddress_val_ptr, size_t eocCBATCardUpLinkDeviceMACAddress_val_ptr_len);
+int eocCBATCardUpLinkDeviceMACAddress_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardUpLinkDeviceMACAddress_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardUpLinkDeviceMACAddress_val_ptr, size_t eocCBATCardUpLinkDeviceMACAddress_val_ptr_len );
+int eocCBATCardUpLinkDeviceMACAddress_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardUpLinkDevicePortNumber_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardUpLinkDevicePortNumber_val);
+int eocCBATCardUpLinkDevicePortNumber_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardUpLinkDevicePortNumber_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardUpLinkDevicePortNumber_val );
+int eocCBATCardUpLinkDevicePortNumber_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardConfigurationSaving_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardConfigurationSaving_val);
+int eocCBATCardConfigurationSaving_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardConfigurationSaving_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardConfigurationSaving_val );
+int eocCBATCardConfigurationSaving_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardConfigurationResult_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardConfigurationResult_val);
+int eocCBATCardConfigurationResult_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardConfigurationResult_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, u_long eocCBATCardConfigurationResult_val );
+int eocCBATCardConfigurationResult_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardTemperature_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardTemperature_val);
+int eocCBATCardTemperature_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardTemperature_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, long eocCBATCardTemperature_val );
+int eocCBATCardTemperature_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardLogicalID_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardLogicalID_val_ptr, size_t eocCBATCardLogicalID_val_ptr_len);
+int eocCBATCardLogicalID_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardLogicalID_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardLogicalID_val_ptr, size_t eocCBATCardLogicalID_val_ptr_len );
+int eocCBATCardLogicalID_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardTechProject_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardTechProject_val_ptr, size_t eocCBATCardTechProject_val_ptr_len);
+int eocCBATCardTechProject_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardTechProject_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardTechProject_val_ptr, size_t eocCBATCardTechProject_val_ptr_len );
+int eocCBATCardTechProject_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardManufactoryInfo_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardManufactoryInfo_val_ptr, size_t eocCBATCardManufactoryInfo_val_ptr_len);
+int eocCBATCardManufactoryInfo_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardManufactoryInfo_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardManufactoryInfo_val_ptr, size_t eocCBATCardManufactoryInfo_val_ptr_len );
+int eocCBATCardManufactoryInfo_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardSerialNumber_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardSerialNumber_val_ptr, size_t eocCBATCardSerialNumber_val_ptr_len);
+int eocCBATCardSerialNumber_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardSerialNumber_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardSerialNumber_val_ptr, size_t eocCBATCardSerialNumber_val_ptr_len );
+int eocCBATCardSerialNumber_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardHardwareVersion_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardHardwareVersion_val_ptr, size_t eocCBATCardHardwareVersion_val_ptr_len);
+int eocCBATCardHardwareVersion_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardHardwareVersion_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardHardwareVersion_val_ptr, size_t eocCBATCardHardwareVersion_val_ptr_len );
+int eocCBATCardHardwareVersion_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardModelNumberProvisioned_check_value( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardModelNumberProvisioned_val_ptr, size_t eocCBATCardModelNumberProvisioned_val_ptr_len);
+int eocCBATCardModelNumberProvisioned_undo_setup( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardModelNumberProvisioned_set( eocCBATCardTable_rowreq_ctx *rowreq_ctx, char *eocCBATCardModelNumberProvisioned_val_ptr, size_t eocCBATCardModelNumberProvisioned_val_ptr_len );
+int eocCBATCardModelNumberProvisioned_undo( eocCBATCardTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocCBATCardTable_check_dependencies(eocCBATCardTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_enums.h
new file mode 100644
index 0000000000..9b8279e4eb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_enums.h
@@ -0,0 +1,131 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDTABLE_ENUMS_H
+#define EOCCBATCARDTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocCBATCardTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCBATCardOnlineStatus (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCBATCARDONLINESTATUS_ENUMS
+#define EOCCBATCARDONLINESTATUS_ENUMS
+
+#define EOCCBATCARDONLINESTATUS_OFFLINE 0
+#define EOCCBATCARDONLINESTATUS_ONLINE 1
+
+#endif /* EOCCBATCARDONLINESTATUS_ENUMS */
+
+/*
+ * TODO:140:o: Define your interal representation of eocCBATCardOnlineStatus enums.
+ * (used for value mapping; see notes at top of file)
+ */
+#define INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDONLINESTATUS_OFFLINE 0
+#define INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDONLINESTATUS_ONLINE 1
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCBATCardReset (TruthValue / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef TRUTHVALUE_ENUMS
+#define TRUTHVALUE_ENUMS
+
+#define TRUTHVALUE_TRUE 1
+#define TRUTHVALUE_FALSE 2
+
+#endif /* TRUTHVALUE_ENUMS */
+
+/*
+ * TODO:140:o: Define your interal representation of eocCBATCardReset enums.
+ * (used for value mapping; see notes at top of file)
+ */
+#define INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDRESET_TRUE 1
+#define INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDRESET_FALSE 2
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCBATCardConfigurationSaving (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCBATCARDCONFIGURATIONSAVING_ENUMS
+#define EOCCBATCARDCONFIGURATIONSAVING_ENUMS
+
+#define EOCCBATCARDCONFIGURATIONSAVING_SAVE 1
+
+#endif /* EOCCBATCARDCONFIGURATIONSAVING_ENUMS */
+
+/*
+ * TODO:140:o: Define your interal representation of eocCBATCardConfigurationSaving enums.
+ * (used for value mapping; see notes at top of file)
+ */
+#define INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDCONFIGURATIONSAVING_SAVE 1
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCBATCardConfigurationResult (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCBATCARDCONFIGURATIONRESULT_ENUMS
+#define EOCCBATCARDCONFIGURATIONRESULT_ENUMS
+
+#define EOCCBATCARDCONFIGURATIONRESULT_SUCCESS 0
+#define EOCCBATCARDCONFIGURATIONRESULT_RUNNING 1
+#define EOCCBATCARDCONFIGURATIONRESULT_FAILED 2
+
+#endif /* EOCCBATCARDCONFIGURATIONRESULT_ENUMS */
+
+/*
+ * TODO:140:o: Define your interal representation of eocCBATCardConfigurationResult enums.
+ * (used for value mapping; see notes at top of file)
+ */
+#define INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDCONFIGURATIONRESULT_SUCCESS 0
+#define INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDCONFIGURATIONRESULT_RUNNING 1
+#define INTERNAL_EOCCBATCARDTABLE_EOCCBATCARDCONFIGURATIONRESULT_FAILED 2
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_interface.c
new file mode 100644
index 0000000000..932893dd3f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_interface.c
@@ -0,0 +1,1905 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocCBATCardTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardTable is subid 2 of eocCBATCardMACGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.3.2, length: 11
+*/
+typedef struct eocCBATCardTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocCBATCardTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocCBATCardTable_interface_ctx;
+
+static eocCBATCardTable_interface_ctx eocCBATCardTable_if_ctx;
+
+static void _eocCBATCardTable_container_init(
+ eocCBATCardTable_interface_ctx *if_ctx);
+static void _eocCBATCardTable_container_shutdown(
+ eocCBATCardTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocCBATCardTable_container_get( void )
+{
+ return eocCBATCardTable_if_ctx.container;
+}
+
+eocCBATCardTable_registration *
+eocCBATCardTable_registration_get( void )
+{
+ return eocCBATCardTable_if_ctx.user_ctx;
+}
+
+eocCBATCardTable_registration *
+eocCBATCardTable_registration_set( eocCBATCardTable_registration * newreg )
+{
+ eocCBATCardTable_registration * old = eocCBATCardTable_if_ctx.user_ctx;
+ eocCBATCardTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocCBATCardTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocCBATCardTable_if_ctx.container);
+}
+
+u_int
+eocCBATCardTable_dirty_get( void )
+{
+ return eocCBATCardTable_if_ctx.table_dirty;
+}
+
+void
+eocCBATCardTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocCBATCardTable:eocCBATCardTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocCBATCardTable_if_ctx.table_dirty, status));
+ eocCBATCardTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocCBATCardTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocCBATCardTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocCBATCardTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocCBATCardTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocCBATCardTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocCBATCardTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocCBATCardTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocCBATCardTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocCBATCardTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocCBATCardTable_commit;
+static Netsnmp_Node_Handler _mfd_eocCBATCardTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocCBATCardTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int _eocCBATCardTable_undo_column( eocCBATCardTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+eocCBATCardTable_data *eocCBATCardTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table eocCBATCardTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocCBATCardTable_initialize_interface(eocCBATCardTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocCBATCardTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocCBATCardTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_eocCBATCardTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocCBATCardTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocCBATCardIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCCBATCARDTABLE_MIN_COL;
+ tbl_info->max_column = EOCCBATCARDTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocCBATCardTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocCBATCardTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocCBATCardTable_container_init(&eocCBATCardTable_if_ctx);
+ if (NULL == eocCBATCardTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocCBATCardTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocCBATCardTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocCBATCardTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocCBATCardTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocCBATCardTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocCBATCardTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocCBATCardTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocCBATCardTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocCBATCardTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocCBATCardTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocCBATCardTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocCBATCardTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocCBATCardTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocCBATCardTable:init_eocCBATCardTable",
+ "Registering eocCBATCardTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocCBATCardTable", handler,
+ eocCBATCardTable_oid,
+ eocCBATCardTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocCBATCardTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocCBATCardTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocCBATCardTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocCBATCardTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocCBATCardTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocCBATCardTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocCBATCardTable
+ */
+void
+_eocCBATCardTable_shutdown_interface(eocCBATCardTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocCBATCardTable_container_shutdown(&eocCBATCardTable_if_ctx);
+}
+
+void
+eocCBATCardTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocCBATCardTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocCBATCardTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocCBATCardTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCBATCardTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCBATCardIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCBATCardIndex, 0x00, sizeof(var_eocCBATCardIndex) );
+ var_eocCBATCardIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCBATCardIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_index_to_oid","called\n"));
+
+ /* eocCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCBATCardIndex, (u_char*)&mib_idx->eocCBATCardIndex,
+ sizeof(mib_idx->eocCBATCardIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocCBATCardIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCBATCardIndex );
+
+ return err;
+} /* eocCBATCardTable_index_to_oid */
+
+/**
+ * extract eocCBATCardTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocCBATCardTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCBATCardTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCBATCardIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCBATCardIndex, 0x00, sizeof(var_eocCBATCardIndex) );
+ var_eocCBATCardIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCBATCardIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocCBATCardIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocCBATCardIndex = *((long *)var_eocCBATCardIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCBATCardIndex );
+
+ return err;
+} /* eocCBATCardTable_index_from_oid */
+
+
+/*
+ * eocCBATCardTable_allocate_data
+ *
+ * Purpose: create new eocCBATCardTable_data.
+ */
+eocCBATCardTable_data *
+eocCBATCardTable_allocate_data(void)
+{
+ eocCBATCardTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocCBATCardTable_data);
+
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocCBATCardTable_data.\n");
+ }
+
+ return rtn;
+} /* eocCBATCardTable_allocate_data */
+
+/*
+ * eocCBATCardTable_release_data
+ *
+ * Purpose: release eocCBATCardTable data.
+ */
+void
+eocCBATCardTable_release_data(eocCBATCardTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardTable:eocCBATCardTable_release_data","called\n"));
+
+ free(data);
+} /* eocCBATCardTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocCBATCardTable_rowreq_ctx
+ */
+eocCBATCardTable_rowreq_ctx *
+eocCBATCardTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocCBATCardTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:eocCBATCardTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocCBATCardTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocCBATCardTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocCBATCardTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocCBATCardTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocCBATCardTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocCBATCardTable_rowreq_ctx
+ */
+void
+eocCBATCardTable_release_rowreq_ctx(eocCBATCardTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocCBATCardTable:eocCBATCardTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocCBATCardTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if(rowreq_ctx->undo)
+ eocCBATCardTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocCBATCardTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCBATCardTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCBATCardTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocCBATCardTable_pre_request(eocCBATCardTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardTable","error %d from "
+ "eocCBATCardTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCBATCardTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocCBATCardTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCBATCardTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocCBATCardTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocCBATCardTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocCBATCardTable_post_request(eocCBATCardTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardTable","error %d from "
+ "eocCBATCardTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCBATCardTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocCBATCardTable_interface_ctx *if_ctx =
+ * (eocCBATCardTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocCBATCardTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocCBATCardTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardTable_get_column( eocCBATCardTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCBATCARDINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCBATCardIndex;
+ break;
+
+ /* eocCBATCardMACAddress(2)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H */
+ case COLUMN_EOCCBATCARDMACADDRESS:
+ var->type = ASN_OCTET_STR;
+rc = eocCBATCardMACAddress_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCBATCardOnlineStatus(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCBATCARDONLINESTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardOnlineStatus_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCBATCardModelNumber(4)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDMODELNUMBER:
+ var->type = ASN_OCTET_STR;
+rc = eocCBATCardModelNumber_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCBATCardSoftwareVersion(5)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDSOFTWAREVERSION:
+ var->type = ASN_OCTET_STR;
+rc = eocCBATCardSoftwareVersion_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCBATCardReset(6)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDRESET:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardReset_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCBATCardUpLinkBroadcastFrameSendIntervalT1(7)/TimeInterval/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ case COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT1:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardUpLinkBroadcastFrameSendIntervalT1_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCBATCardUpLinkBroadcastFrameSendIntervalT2(8)/TimeInterval/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ case COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT2:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardUpLinkBroadcastFrameSendIntervalT2_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCBATCardUpLinkDeviceMACAddress(9)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H */
+ case COLUMN_EOCCBATCARDUPLINKDEVICEMACADDRESS:
+ var->type = ASN_OCTET_STR;
+rc = eocCBATCardUpLinkDeviceMACAddress_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCBATCardUpLinkDevicePortNumber(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDUPLINKDEVICEPORTNUMBER:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardUpLinkDevicePortNumber_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCBATCardConfigurationSaving(11)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDCONFIGURATIONSAVING:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardConfigurationSaving_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCBATCardConfigurationResult(12)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCBATCARDCONFIGURATIONRESULT:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardConfigurationResult_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCBATCardTemperature(13)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDTEMPERATURE:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardTemperature_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCBATCardLogicalID(14)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATCARDLOGICALID:
+ var->type = ASN_OCTET_STR;
+rc = eocCBATCardLogicalID_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCBATCardTechProject(15)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDTECHPROJECT:
+ var->type = ASN_OCTET_STR;
+rc = eocCBATCardTechProject_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCBATCardManufactoryInfo(16)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDMANUFACTORYINFO:
+ var->type = ASN_OCTET_STR;
+rc = eocCBATCardManufactoryInfo_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCBATCardSerialNumber(17)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDSERIALNUMBER:
+ var->type = ASN_OCTET_STR;
+rc = eocCBATCardSerialNumber_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCBATCardHardwareVersion(18)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDHARDWAREVERSION:
+ var->type = ASN_OCTET_STR;
+rc = eocCBATCardHardwareVersion_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCBATCardModelNumberProvisioned(19)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED:
+ var->type = ASN_OCTET_STR;
+rc = eocCBATCardModelNumberProvisioned_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ default:
+ if (EOCCBATCARDTABLE_MIN_COL <= column && column <= EOCCBATCARDTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocCBATCardTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocCBATCardTable_get_column */
+
+int
+_mfd_eocCBATCardTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardTable_check_column( eocCBATCardTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_eocCBATCardTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCBATCARDINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocCBATCardMACAddress(2)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H */
+ case COLUMN_EOCCBATCARDMACADDRESS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCBATCardOnlineStatus(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCBATCARDONLINESTATUS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCBATCardModelNumber(4)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDMODELNUMBER:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCBATCardSoftwareVersion(5)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDSOFTWAREVERSION:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCBATCardReset(6)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDRESET:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCBATCardReset ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != TRUTHVALUE_TRUE )
+ && ( *var->val.integer != TRUTHVALUE_FALSE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardTable:_eocCBATCardTable_check_column:eocCBATCardReset",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardReset_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardReset_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCBATCardUpLinkBroadcastFrameSendIntervalT1(7)/TimeInterval/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ case COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT1:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT1 ) );
+ /* check defined range(s). */
+ if( (SNMPERR_SUCCESS == rc)
+ && ((*var->val.integer < 0) || (*var->val.integer > 2147483647))
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardTable:_eocCBATCardTable_check_column:eocCBATCardUpLinkBroadcastFrameSendIntervalT1",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardUpLinkBroadcastFrameSendIntervalT1_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardUpLinkBroadcastFrameSendIntervalT1_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCBATCardUpLinkBroadcastFrameSendIntervalT2(8)/TimeInterval/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ case COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT2:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCBATCardUpLinkBroadcastFrameSendIntervalT2 ) );
+ /* check defined range(s). */
+ if( (SNMPERR_SUCCESS == rc)
+ && ((*var->val.integer < 0) || (*var->val.integer > 2147483647))
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardTable:_eocCBATCardTable_check_column:eocCBATCardUpLinkBroadcastFrameSendIntervalT2",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardUpLinkBroadcastFrameSendIntervalT2_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardUpLinkBroadcastFrameSendIntervalT2_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCBATCardUpLinkDeviceMACAddress(9)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H */
+ case COLUMN_EOCCBATCARDUPLINKDEVICEMACADDRESS:
+ rc = netsnmp_check_vb_type_and_max_size( var, ASN_OCTET_STR,
+ sizeof( rowreq_ctx->data.eocCBATCardUpLinkDeviceMACAddress ) );
+ /* check defined range(s). */
+ if( (SNMPERR_SUCCESS == rc)
+ && (var->val_len != 6)
+ ) {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardTable:_eocCBATCardTable_check_column:eocCBATCardUpLinkDeviceMACAddress",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardUpLinkDeviceMACAddress_check_value( rowreq_ctx, (char *)var->val.string, var->val_len );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardUpLinkDeviceMACAddress_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCBATCardUpLinkDevicePortNumber(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDUPLINKDEVICEPORTNUMBER:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCBATCardUpLinkDevicePortNumber ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardTable:_eocCBATCardTable_check_column:eocCBATCardUpLinkDevicePortNumber",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardUpLinkDevicePortNumber_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardUpLinkDevicePortNumber_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCBATCardConfigurationSaving(11)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDCONFIGURATIONSAVING:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCBATCardConfigurationSaving ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCBATCARDCONFIGURATIONSAVING_SAVE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardTable:_eocCBATCardTable_check_column:eocCBATCardConfigurationSaving",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardConfigurationSaving_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardConfigurationSaving_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCBATCardConfigurationResult(12)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCBATCARDCONFIGURATIONRESULT:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCBATCardTemperature(13)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDTEMPERATURE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCBATCardLogicalID(14)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATCARDLOGICALID:
+ rc = netsnmp_check_vb_type_and_max_size( var, ASN_OCTET_STR,
+ sizeof( rowreq_ctx->data.eocCBATCardLogicalID ) );
+ /* check defined range(s). */
+ if( (SNMPERR_SUCCESS == rc)
+ && ((var->val_len < 0) || (var->val_len > 40))
+ ) {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardTable:_eocCBATCardTable_check_column:eocCBATCardLogicalID",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardLogicalID_check_value( rowreq_ctx, (char *)var->val.string, var->val_len );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardLogicalID_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCBATCardTechProject(15)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDTECHPROJECT:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCBATCardManufactoryInfo(16)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDMANUFACTORYINFO:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCBATCardSerialNumber(17)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDSERIALNUMBER:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCBATCardHardwareVersion(18)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCBATCARDHARDWAREVERSION:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCBATCardModelNumberProvisioned(19)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED:
+ rc = netsnmp_check_vb_type_and_max_size( var, ASN_OCTET_STR,
+ sizeof( rowreq_ctx->data.eocCBATCardModelNumberProvisioned ) );
+ /* check defined range(s). */
+ if( (SNMPERR_SUCCESS == rc)
+ && ((var->val_len < 0) || (var->val_len > 255))
+ ) {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardTable:_eocCBATCardTable_check_column:eocCBATCardModelNumberProvisioned",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardModelNumberProvisioned_check_value( rowreq_ctx, (char *)var->val.string, var->val_len );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardModelNumberProvisioned_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocCBATCardTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocCBATCardTable_check_column */
+
+int
+_mfd_eocCBATCardTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardTable_undo_setup_column( eocCBATCardTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_eocCBATCardTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCBATCardReset(6)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDRESET:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRESET_FLAG;
+ rc = eocCBATCardReset_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCBATCardUpLinkBroadcastFrameSendIntervalT1(7)/TimeInterval/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ case COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT1:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT1_FLAG;
+ rc = eocCBATCardUpLinkBroadcastFrameSendIntervalT1_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCBATCardUpLinkBroadcastFrameSendIntervalT2(8)/TimeInterval/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ case COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT2:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT2_FLAG;
+ rc = eocCBATCardUpLinkBroadcastFrameSendIntervalT2_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCBATCardUpLinkDeviceMACAddress(9)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H */
+ case COLUMN_EOCCBATCARDUPLINKDEVICEMACADDRESS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDUPLINKDEVICEMACADDRESS_FLAG;
+ rc = eocCBATCardUpLinkDeviceMACAddress_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCBATCardUpLinkDevicePortNumber(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDUPLINKDEVICEPORTNUMBER:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDUPLINKDEVICEPORTNUMBER_FLAG;
+ rc = eocCBATCardUpLinkDevicePortNumber_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCBATCardConfigurationSaving(11)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDCONFIGURATIONSAVING:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDCONFIGURATIONSAVING_FLAG;
+ rc = eocCBATCardConfigurationSaving_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCBATCardLogicalID(14)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATCARDLOGICALID:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDLOGICALID_FLAG;
+ rc = eocCBATCardLogicalID_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCBATCardModelNumberProvisioned(19)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED_FLAG;
+ rc = eocCBATCardModelNumberProvisioned_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCBATCardTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCBATCardTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCBATCardTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocCBATCardTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocCBATCardTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardTable:mfd","error %d from "
+ "eocCBATCardTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardTable:mfd","error %d from "
+ "eocCBATCardTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCBATCardTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocCBATCardTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardTable:mfd","error %d from "
+ "eocCBATCardTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if(rowreq_ctx->undo) {
+ eocCBATCardTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardTable_set_column( eocCBATCardTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_eocCBATCardTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCBATCardReset(6)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDRESET:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRESET_FLAG;
+ rc = eocCBATCardReset_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCBATCardUpLinkBroadcastFrameSendIntervalT1(7)/TimeInterval/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ case COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT1:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT1_FLAG;
+ rc = eocCBATCardUpLinkBroadcastFrameSendIntervalT1_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCBATCardUpLinkBroadcastFrameSendIntervalT2(8)/TimeInterval/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ case COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT2:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT2_FLAG;
+ rc = eocCBATCardUpLinkBroadcastFrameSendIntervalT2_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCBATCardUpLinkDeviceMACAddress(9)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H */
+ case COLUMN_EOCCBATCARDUPLINKDEVICEMACADDRESS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDUPLINKDEVICEMACADDRESS_FLAG;
+ rc = eocCBATCardUpLinkDeviceMACAddress_set(rowreq_ctx, (char *)var->val.string, var->val_len );
+ break;
+
+ /* eocCBATCardUpLinkDevicePortNumber(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDUPLINKDEVICEPORTNUMBER:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDUPLINKDEVICEPORTNUMBER_FLAG;
+ rc = eocCBATCardUpLinkDevicePortNumber_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCBATCardConfigurationSaving(11)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDCONFIGURATIONSAVING:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDCONFIGURATIONSAVING_FLAG;
+ rc = eocCBATCardConfigurationSaving_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCBATCardLogicalID(14)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATCARDLOGICALID:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDLOGICALID_FLAG;
+ rc = eocCBATCardLogicalID_set(rowreq_ctx, (char *)var->val.string, var->val_len );
+ break;
+
+ /* eocCBATCardModelNumberProvisioned(19)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED_FLAG;
+ rc = eocCBATCardModelNumberProvisioned_set(rowreq_ctx, (char *)var->val.string, var->val_len );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCBATCardTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocCBATCardTable_set_column */
+
+int
+_mfd_eocCBATCardTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardTable:mfd","error %d from "
+ "eocCBATCardTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocCBATCardTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCBATCardTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardTable:mfd","error %d from "
+ "eocCBATCardTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocCBATCardTable_dirty_set( eocCBATCardTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocCBATCardTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocCBATCardTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocCBATCardTable_dirty_set( d - 1 );
+ }
+
+ rc = eocCBATCardTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardTable:mfd","error %d from "
+ "eocCBATCardTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocCBATCardTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardTable_undo_column( eocCBATCardTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_eocCBATCardTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCBATCardReset(6)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDRESET:
+ rc = eocCBATCardReset_undo(rowreq_ctx);
+ break;
+
+ /* eocCBATCardUpLinkBroadcastFrameSendIntervalT1(7)/TimeInterval/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ case COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT1:
+ rc = eocCBATCardUpLinkBroadcastFrameSendIntervalT1_undo(rowreq_ctx);
+ break;
+
+ /* eocCBATCardUpLinkBroadcastFrameSendIntervalT2(8)/TimeInterval/ASN_INTEGER/long(long)//l/A/W/e/R/D/h */
+ case COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT2:
+ rc = eocCBATCardUpLinkBroadcastFrameSendIntervalT2_undo(rowreq_ctx);
+ break;
+
+ /* eocCBATCardUpLinkDeviceMACAddress(9)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H */
+ case COLUMN_EOCCBATCARDUPLINKDEVICEMACADDRESS:
+ rc = eocCBATCardUpLinkDeviceMACAddress_undo(rowreq_ctx);
+ break;
+
+ /* eocCBATCardUpLinkDevicePortNumber(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDUPLINKDEVICEPORTNUMBER:
+ rc = eocCBATCardUpLinkDevicePortNumber_undo(rowreq_ctx);
+ break;
+
+ /* eocCBATCardConfigurationSaving(11)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCBATCARDCONFIGURATIONSAVING:
+ rc = eocCBATCardConfigurationSaving_undo(rowreq_ctx);
+ break;
+
+ /* eocCBATCardLogicalID(14)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATCARDLOGICALID:
+ rc = eocCBATCardLogicalID_undo(rowreq_ctx);
+ break;
+
+ /* eocCBATCardModelNumberProvisioned(19)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED:
+ rc = eocCBATCardModelNumberProvisioned_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCBATCardTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCBATCardTable_undo_column */
+
+int
+_mfd_eocCBATCardTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCBATCardTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardTable:mfd","error %d from "
+ "eocCBATCardTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardTable:mfd","error %d from "
+ "eocCBATCardTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocCBATCardTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_mfd_eocCBATCardTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocCBATCardTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocCBATCardTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocCBATCardTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocCBATCardTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocCBATCardTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocCBATCardTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocCBATCardTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocCBATCardTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocCBATCardTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocCBATCardTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocCBATCardTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocCBATCardTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocCBATCardTable_container_init(eocCBATCardTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCBATCardTable:_eocCBATCardTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocCBATCardTable_oid,
+ eocCBATCardTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocCBATCardTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocCBATCardTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocCBATCardTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocCBATCardTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocCBATCardTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocCBATCardTable_container_shutdown(eocCBATCardTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCBATCardTable:_eocCBATCardTable_container_shutdown","called\n"));
+
+ eocCBATCardTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocCBATCardTable_container_shutdown */
+
+
+eocCBATCardTable_rowreq_ctx *
+eocCBATCardTable_row_find_by_mib_index(eocCBATCardTable_mib_index *mib_idx)
+{
+ eocCBATCardTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocCBATCardTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocCBATCardTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_interface.h
new file mode 100644
index 0000000000..473dcc77e4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_interface.h
@@ -0,0 +1,87 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCCBATCARDTABLE_INTERFACE_H
+#define EOCCBATCARDTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocCBATCardTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocCBATCardTable_initialize_interface(eocCBATCardTable_registration * user_ctx,
+ u_long flags);
+void _eocCBATCardTable_shutdown_interface(eocCBATCardTable_registration * user_ctx);
+
+eocCBATCardTable_registration *
+eocCBATCardTable_registration_get( void );
+
+eocCBATCardTable_registration *
+eocCBATCardTable_registration_set( eocCBATCardTable_registration * newreg );
+
+netsnmp_container *eocCBATCardTable_container_get( void );
+int eocCBATCardTable_container_size( void );
+
+u_int eocCBATCardTable_dirty_get( void );
+void eocCBATCardTable_dirty_set( u_int status );
+
+ eocCBATCardTable_rowreq_ctx * eocCBATCardTable_allocate_rowreq_ctx(void *);
+void eocCBATCardTable_release_rowreq_ctx(eocCBATCardTable_rowreq_ctx *rowreq_ctx);
+
+int eocCBATCardTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCBATCardTable_mib_index *mib_idx);
+int eocCBATCardTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCBATCardTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocCBATCardTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_oids.h
new file mode 100644
index 0000000000..5545348c5f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardMACGroup/eocCBATCardTable/eocCBATCardTable_oids.h
@@ -0,0 +1,80 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDTABLE_OIDS_H
+#define EOCCBATCARDTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* column number definitions for table eocCBATCardTable */
+#define EOCCBATCARDTABLE_OID 1,3,6,1,4,1,17409,2,4,3,2
+
+
+#define COLUMN_EOCCBATCARDINDEX 1
+
+#define COLUMN_EOCCBATCARDMACADDRESS 2
+
+#define COLUMN_EOCCBATCARDONLINESTATUS 3
+
+#define COLUMN_EOCCBATCARDMODELNUMBER 4
+
+#define COLUMN_EOCCBATCARDSOFTWAREVERSION 5
+
+#define COLUMN_EOCCBATCARDRESET 6
+#define COLUMN_EOCCBATCARDRESET_FLAG (0x1 << 0)
+
+#define COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT1 7
+#define COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT1_FLAG (0x1 << 1)
+
+#define COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT2 8
+#define COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT2_FLAG (0x1 << 2)
+
+#define COLUMN_EOCCBATCARDUPLINKDEVICEMACADDRESS 9
+#define COLUMN_EOCCBATCARDUPLINKDEVICEMACADDRESS_FLAG (0x1 << 3)
+
+#define COLUMN_EOCCBATCARDUPLINKDEVICEPORTNUMBER 10
+#define COLUMN_EOCCBATCARDUPLINKDEVICEPORTNUMBER_FLAG (0x1 << 4)
+
+#define COLUMN_EOCCBATCARDCONFIGURATIONSAVING 11
+#define COLUMN_EOCCBATCARDCONFIGURATIONSAVING_FLAG (0x1 << 5)
+
+#define COLUMN_EOCCBATCARDCONFIGURATIONRESULT 12
+
+#define COLUMN_EOCCBATCARDTEMPERATURE 13
+
+#define COLUMN_EOCCBATCARDLOGICALID 14
+#define COLUMN_EOCCBATCARDLOGICALID_FLAG (0x1 << 6)
+
+#define COLUMN_EOCCBATCARDTECHPROJECT 15
+
+#define COLUMN_EOCCBATCARDMANUFACTORYINFO 16
+
+#define COLUMN_EOCCBATCARDSERIALNUMBER 17
+
+#define COLUMN_EOCCBATCARDHARDWAREVERSION 18
+
+#define COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED 19
+#define COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED_FLAG (0x1 << 7)
+
+
+#define EOCCBATCARDTABLE_MIN_COL COLUMN_EOCCBATCARDINDEX
+#define EOCCBATCARDTABLE_MAX_COL COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED
+
+
+ /*
+ * TODO:405:r: Review EOCCBATCARDTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCCBATCARDTABLE_SETTABLE_COLS (COLUMN_EOCCBATCARDRESET_FLAG | COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT1_FLAG | COLUMN_EOCCBATCARDUPLINKBROADCASTFRAMESENDINTERVALT2_FLAG | COLUMN_EOCCBATCARDUPLINKDEVICEMACADDRESS_FLAG | COLUMN_EOCCBATCARDUPLINKDEVICEPORTNUMBER_FLAG | COLUMN_EOCCBATCARDCONFIGURATIONSAVING_FLAG | COLUMN_EOCCBATCARDLOGICALID_FLAG | COLUMN_EOCCBATCARDMODELNUMBERPROVISIONED_FLAG)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup.h
new file mode 100644
index 0000000000..46fbfdf595
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup.h
@@ -0,0 +1 @@
+config_require(mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable.h
new file mode 100644
index 0000000000..368a9b77b3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_set)
+config_require(mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_get)
+config_require(mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_access)
+config_require(mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_interface)
+config_require(mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFDownstreamStartFreq.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFDownstreamStartFreq.m2d
new file mode 100644
index 0000000000..9ce346f5a2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFDownstreamStartFreq.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardRFDownstreamStartFreq
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFDownstreamStopFreq.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFDownstreamStopFreq.m2d
new file mode 100644
index 0000000000..6b3ae3bc2f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFDownstreamStopFreq.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardRFDownstreamStopFreq
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFIndex.m2d
new file mode 100644
index 0000000000..c666dca2fb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardRFIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFLinkMaximum.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFLinkMaximum.m2d
new file mode 100644
index 0000000000..df0975481c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFLinkMaximum.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardRFLinkMaximum
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFOutputLevel.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFOutputLevel.m2d
new file mode 100644
index 0000000000..54a9c1737f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFOutputLevel.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardRFOutputLevel
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFUpstreamStartFreq.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFUpstreamStartFreq.m2d
new file mode 100644
index 0000000000..9099e88d3d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFUpstreamStartFreq.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardRFUpstreamStartFreq
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFUpstreamStopFreq.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFUpstreamStopFreq.m2d
new file mode 100644
index 0000000000..64ef454f8c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/node-eocCBATCardRFUpstreamStopFreq.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCBATCardRFUpstreamStopFreq
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/table-eocCBATCardRFTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/table-eocCBATCardRFTable.m2d
new file mode 100644
index 0000000000..ab85685a76
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/defaults/table-eocCBATCardRFTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocCBATCardRFTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable-README-FIRST.txt
new file mode 100644
index 0000000000..d2f2e39358
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocCBATCardRFTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocCBATCardRFTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocCBATCardRFTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocCBATCardRFTable_Makefile
+
+
+ File : eocCBATCardRFTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocCBATCardRFTable-README-eocCBATCardRFTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocCBATCardRFTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocCBATCardRFTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocCBATCardRFTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocCBATCardRFTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable-README-eocCBATCardRFTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable-README-eocCBATCardRFTable.txt
new file mode 100644
index 0000000000..5d1692f51d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable-README-eocCBATCardRFTable.txt
@@ -0,0 +1,806 @@
+************************************************************************
+eocCBATCardRFTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocCBATCardRFTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocCBATCardRFTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocCBATCardRFTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCBATCardRFTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCBATCardRFTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCBATCardRFTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocCBATCardRFTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCBATCardRFTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocCBATCardRFTable_allocate_data
+ eocCBATCardRFTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocCBATCardRFTable_rowreq_ctx_init
+ eocCBATCardRFTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocCBATCardRFTable table
+ ------------------------------------------------------------
+ The index(es) for the eocCBATCardRFTable table are:
+
+ eocCBATCardRFIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocCBATCardRFTable_data.
+
+
+************************************************************************
+eocCBATCardRFTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocCBATCardRFTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocCBATCardRFTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocCBATCardRFTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocCBATCardRFTable_indexes_set
+ WHERE: eocCBATCardRFTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocCBATCardRFTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocCBATCardRFTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardRFLinkMaximum_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardRFOutputLevel_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardRFDownstreamStartFreq_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardRFDownstreamStopFreq_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardRFUpstreamStartFreq_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCBATCardRFUpstreamStopFreq_get
+
+
+
+File: eocCBATCardRFTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocCBATCardRFTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table does not support ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocCBATCardRFTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardRFOutputLevel_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardRFOutputLevel_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardRFOutputLevel_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardRFOutputLevel_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardRFDownstreamStartFreq_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardRFDownstreamStartFreq_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardRFDownstreamStartFreq_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardRFDownstreamStartFreq_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardRFDownstreamStopFreq_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardRFDownstreamStopFreq_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardRFDownstreamStopFreq_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardRFDownstreamStopFreq_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardRFUpstreamStartFreq_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardRFUpstreamStartFreq_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardRFUpstreamStartFreq_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardRFUpstreamStartFreq_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCBATCardRFUpstreamStopFreq_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCBATCardRFUpstreamStopFreq_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCBATCardRFUpstreamStopFreq_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCBATCardRFUpstreamStopFreq_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocCBATCardRFTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocCBATCardRFTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocCBATCardRFTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocCBATCardRFTable table.
+
+To watch the flow of the eocCBATCardRFTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocCBATCardRFTable
+ verbose:eocCBATCardRFTable
+ internal:eocCBATCardRFTable
+
+e.g.
+ snmpd -f -Le -DeocCBATCardRFTable,verbose:eocCBATCardRFTable,internal:eocCBATCardRFTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardRFTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFTable is subid 1 of eocCBATCardRFGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1, length: 11
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFIndex
+ * eocCBATCardRFIndex is subid 1 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.1
+ * Description:
+CBAT°å¿¨µÄÐòºÅË÷Òý
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFLinkMaximum
+ * eocCBATCardRFLinkMaximum is subid 2 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.2
+ * Description:
+CBAT°å¿¨ÉäƵ×î´óÐŵÀÊý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFOutputLevel
+ * eocCBATCardRFOutputLevel is subid 3 of eocCBATCardRFEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.3
+ * Description:
+CBAT°å¿¨ÉäƵÊä³ö¹¦Âʵçƽ£¬µ¥Î»ÎªdBuV¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFDownstreamStartFreq
+ * eocCBATCardRFDownstreamStartFreq is subid 4 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.4
+ * Description:
+
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFDownstreamStopFreq
+ * eocCBATCardRFDownstreamStopFreq is subid 5 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.5
+ * Description:
+
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFUpstreamStartFreq
+ * eocCBATCardRFUpstreamStartFreq is subid 6 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.6
+ * Description:
+CBAT°å¿¨ÉäƵÉÏÐÐÐŵÀÆðʼƵÂÊ£¬µ¥Î»ÎªHz
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFUpstreamStopFreq
+ * eocCBATCardRFUpstreamStopFreq is subid 7 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.7
+ * Description:
+CBAT°å¿¨ÉäƵÉÏÐÐÐŵÀÖÕֹƵÂÊ£¬µ¥Î»ÎªHz
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable.c
new file mode 100644
index 0000000000..658c12fb80
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable.c
@@ -0,0 +1,218 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocCBATCardRFTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardRFTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocCBATCardRFTable_interface.h"
+
+oid eocCBATCardRFTable_oid[] = { EOCCBATCARDRFTABLE_OID };
+int eocCBATCardRFTable_oid_size = OID_LENGTH(eocCBATCardRFTable_oid);
+
+ eocCBATCardRFTable_registration eocCBATCardRFTable_user_context;
+
+void initialize_table_eocCBATCardRFTable(void);
+void shutdown_table_eocCBATCardRFTable(void);
+
+
+/**
+ * Initializes the eocCBATCardRFTable module
+ */
+void
+init_eocCBATCardRFTable(void)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:init_eocCBATCardRFTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocCBATCardRFTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocCBATCardRFTable"))
+ initialize_table_eocCBATCardRFTable();
+
+} /* init_eocCBATCardRFTable */
+
+/**
+ * Shut-down the eocCBATCardRFTable module (agent is exiting)
+ */
+void
+shutdown_eocCBATCardRFTable(void)
+{
+ if (should_init("eocCBATCardRFTable"))
+ shutdown_table_eocCBATCardRFTable();
+
+}
+
+/**
+ * Initialize the table eocCBATCardRFTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocCBATCardRFTable(void)
+{
+ eocCBATCardRFTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:initialize_table_eocCBATCardRFTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocCBATCardRFTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocCBATCardRFTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocCBATCardRFTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocCBATCardRFTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocCBATCardRFTable */
+
+/**
+ * Shutdown the table eocCBATCardRFTable
+ */
+void
+shutdown_table_eocCBATCardRFTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocCBATCardRFTable_shutdown_interface(&eocCBATCardRFTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocCBATCardRFTable_rowreq_ctx_init(eocCBATCardRFTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocCBATCardRFTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocCBATCardRFTable_rowreq_ctx_cleanup(eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocCBATCardRFTable rowreq cleanup.
+ */
+} /* eocCBATCardRFTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocCBATCardRFTable_pre_request(eocCBATCardRFTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocCBATCardRFTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocCBATCardRFTable_post_request(eocCBATCardRFTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocCBATCardRFTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocCBATCardRFTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocCBATCardRFTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable.h
new file mode 100644
index 0000000000..512680fcc8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable.h
@@ -0,0 +1,218 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDRFTABLE_H
+#define EOCCBATCARDRFTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+/* other required module components */
+ /* *INDENT-OFF* */
+ /* *INDENT-ON* */
+
+/* OID and column number definitions for eocCBATCardRFTable */
+#include "eocCBATCardRFTable_oids.h"
+
+/* enum definions */
+#include "eocCBATCardRFTable_enums.h"
+
+#include "EoCCommon.h"
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocCBATCardRFTable(void);
+void shutdown_eocCBATCardRFTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardRFTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFTable is subid 1 of eocCBATCardRFGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1, length: 11
+*/
+/* *********************************************************************
+ * 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 eocCBATCardRFTable registration context.
+ */
+typedef netsnmp_data_list eocCBATCardRFTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocCBATCardRFTable data context structure.
+ * This structure is used to represent the data for eocCBATCardRFTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocCBATCardRFTable.
+ */
+typedef struct eocCBATCardRFTable_data_s {
+
+ /*
+ * eocCBATCardRFLinkMaximum(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCBATCardRFLinkMaximum;
+
+ /*
+ * eocCBATCardRFOutputLevel(3)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCBATCardRFOutputLevel;
+
+ /*
+ * eocCBATCardRFDownstreamStartFreq(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCBATCardRFDownstreamStartFreq;
+
+ /*
+ * eocCBATCardRFDownstreamStopFreq(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCBATCardRFDownstreamStopFreq;
+
+ /*
+ * eocCBATCardRFUpstreamStartFreq(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCBATCardRFUpstreamStartFreq;
+
+ /*
+ * eocCBATCardRFUpstreamStopFreq(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCBATCardRFUpstreamStopFreq;
+
+} eocCBATCardRFTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocCBATCardRFTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocCBATCardRFTable_data eocCBATCardRFTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocCBATCardRFTable mib index.
+ * This structure is used to represent the index for eocCBATCardRFTable.
+ */
+typedef struct eocCBATCardRFTable_mib_index_s {
+
+ /*
+ * eocCBATCardRFIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCBATCardRFIndex;
+
+
+} eocCBATCardRFTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocCBATCardRFTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocCBATCardRFTable_IDX_LEN 1
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocCBATCardRFTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocCBATCardRFTable_rowreq_ctx pointer.
+ */
+typedef struct eocCBATCardRFTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocCBATCardRFTable_IDX_LEN];
+
+ eocCBATCardRFTable_mib_index tbl_idx;
+
+ eocCBATCardRFTable_data data;
+ eocCBATCardRFTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocCBATCardRFTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocCBATCardRFTable_data_list;
+
+} eocCBATCardRFTable_rowreq_ctx;
+
+typedef struct eocCBATCardRFTable_ref_rowreq_ctx_s {
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx;
+} eocCBATCardRFTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocCBATCardRFTable_pre_request(eocCBATCardRFTable_registration * user_context);
+ int eocCBATCardRFTable_post_request(eocCBATCardRFTable_registration * user_context,
+ int rc);
+
+ int eocCBATCardRFTable_rowreq_ctx_init(eocCBATCardRFTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocCBATCardRFTable_rowreq_ctx_cleanup(eocCBATCardRFTable_rowreq_ctx *rowreq_ctx);
+
+ int eocCBATCardRFTable_commit(eocCBATCardRFTable_rowreq_ctx * rowreq_ctx);
+
+ eocCBATCardRFTable_rowreq_ctx *
+ eocCBATCardRFTable_row_find_by_mib_index(eocCBATCardRFTable_mib_index *mib_idx);
+
+extern oid eocCBATCardRFTable_oid[];
+extern int eocCBATCardRFTable_oid_size;
+
+
+#include "eocCBATCardRFTable_interface.h"
+#include "eocCBATCardRFTable_data_access.h"
+#include "eocCBATCardRFTable_data_get.h"
+#include "eocCBATCardRFTable_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 /* EOCCBATCARDRFTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_access.c
new file mode 100644
index 0000000000..9fb81341fe
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_access.c
@@ -0,0 +1,381 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardRFTable.h"
+
+
+#include "eocCBATCardRFTable_data_access.h"
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardRFTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFTable is subid 1 of eocCBATCardRFGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1, length: 11
+*/
+
+/**
+ * initialization for eocCBATCardRFTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocCBATCardRFTable_reg
+ * Pointer to eocCBATCardRFTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocCBATCardRFTable_init_data(eocCBATCardRFTable_registration * eocCBATCardRFTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocCBATCardRFTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocCBATCardRFTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocCBATCardRFTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocCBATCardRFTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocCBATCardRFTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCCBATCARDRFTABLE_CACHE_TIMEOUT; /* seconds */
+} /* eocCBATCardRFTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocCBATCardRFTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocCBATCardRFTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocCBATCardRFTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocCBATCardRFTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocCBATCardRFTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocCBATCardRFTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocCBATCardRFTable_container_load(netsnmp_container *container)
+{
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocCBATCardRFIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ /* this index is always 0 */
+ long eocCBATCardRFIndex = 0;
+ long eocCBATCardRFLinkMaximum = LIBSPID_RF_LINK_MAXIMUM;
+ long eocCBATCardRFDownstreamStartFreq = RF_DOWNSTREAM_START_FREQ;
+ long eocCBATCardRFDownstreamStopFreq = RF_DOWNSTREAM_STOP_FREQ;
+ long eocCBATCardRFUpstreamStartFreq = RF_UPSTREAM_START_FREQ;
+ long eocCBATCardRFUpstreamStopFreq = RF_UPSTREAM_STOP_FREQ;
+
+ /* value stored in configuration file */
+ long eocCBATCardRFOutputLevel = 0;
+ char buffer[LIBSPID_CONFIG_KEY_MAX_LEN];
+ int ret;
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_container_load","called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocCBATCardRFTable container.
+ * loop over your eocCBATCardRFTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+
+ /* no need for a loop because index is always 1, so there is only one row in a table */
+
+ /*
+ * TODO:352:M: | |-> set indexes in new eocCBATCardRFTable rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocCBATCardRFTable_allocate_rowreq_ctx (NULL);
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if (MFD_SUCCESS != eocCBATCardRFTable_indexes_set (rowreq_ctx,
+ eocCBATCardRFIndex))
+ {
+ snmp_log (LOG_ERR, "error setting index while loading "
+ "eocCBATCardRFTable data.\n");
+ eocCBATCardRFTable_release_rowreq_ctx (rowreq_ctx);
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+
+ /*
+ * TODO:352:r: | |-> populate eocCBATCardRFTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocCBATCardRFLinkMaximum
+ * eocCBATCardRFLinkMaximum(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocCBATCardRFLinkMaximum = eocCBATCardRFLinkMaximum;
+
+ /*
+ * setup/save data for eocCBATCardRFOutputLevel
+ * eocCBATCardRFOutputLevel(3)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCBATCardRFOutputLevel mapping.
+ * Map values between raw/native values and MIB values
+ *
+ /* read buffer for Output Level from conf file */
+ ret = libspid_config_read_item (LIBSPID_EOC_CONF_PATH,
+ LIBSPID_EOC_CONF_LABEL_OUTPUT_LEVEL,
+ buffer, LIBSPID_CONFIG_KEY_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* Output Level set to 0 to permit walk requests */
+ eocCBATCardRFOutputLevel = 0;
+ }
+ else
+ {
+ /* parse Output Level from buffer */
+ if (1 != sscanf (buffer, "%d", &eocCBATCardRFOutputLevel))
+ {
+ eocCBATCardRFOutputLevel = 0;
+ }
+ }
+
+ rowreq_ctx->data.eocCBATCardRFOutputLevel = eocCBATCardRFOutputLevel;
+
+ /*
+ * setup/save data for eocCBATCardRFDownstreamStartFreq
+ * eocCBATCardRFDownstreamStartFreq(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocCBATCardRFDownstreamStartFreq =
+ eocCBATCardRFDownstreamStartFreq;
+
+ /*
+ * setup/save data for eocCBATCardRFDownstreamStopFreq
+ * eocCBATCardRFDownstreamStopFreq(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocCBATCardRFDownstreamStopFreq =
+ eocCBATCardRFDownstreamStopFreq;
+
+ /*
+ * setup/save data for eocCBATCardRFUpstreamStartFreq
+ * eocCBATCardRFUpstreamStartFreq(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocCBATCardRFUpstreamStartFreq =
+ eocCBATCardRFUpstreamStartFreq;
+
+ /*
+ * setup/save data for eocCBATCardRFUpstreamStopFreq
+ * eocCBATCardRFUpstreamStopFreq(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocCBATCardRFUpstreamStopFreq =
+ eocCBATCardRFUpstreamStopFreq;
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT (container, rowreq_ctx);
+ ++count;
+ DEBUGMSGT(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_container_load",
+ "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocCBATCardRFTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocCBATCardRFTable container data.
+ */
+} /* eocCBATCardRFTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocCBATCardRFTable_row_prep( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_access.h
new file mode 100644
index 0000000000..8f3aa1048a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_access.h
@@ -0,0 +1,63 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDRFTABLE_DATA_ACCESS_H
+#define EOCCBATCARDRFTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardRFTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFTable is subid 1 of eocCBATCardRFGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1, length: 11
+*/
+
+
+ int eocCBATCardRFTable_init_data(eocCBATCardRFTable_registration * eocCBATCardRFTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocCBATCardRFTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCCBATCARDRFTABLE_CACHE_TIMEOUT 60
+
+void eocCBATCardRFTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocCBATCardRFTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocCBATCardRFTable_container_load(netsnmp_container *container);
+void eocCBATCardRFTable_container_free(netsnmp_container *container);
+
+int eocCBATCardRFTable_cache_load(netsnmp_container *container);
+void eocCBATCardRFTable_cache_free(netsnmp_container *container);
+
+ int eocCBATCardRFTable_row_prep( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDRFTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_get.c
new file mode 100644
index 0000000000..c1dad7b30b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_get.c
@@ -0,0 +1,415 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardRFTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocCBATCardRFTable get routines.
+ * TODO:240:M: Implement eocCBATCardRFTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardRFTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFTable is subid 1 of eocCBATCardRFGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1, length: 11
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocCBATCardRFTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocCBATCardRFIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocCBATCardRFTable_indexes_set_tbl_idx(eocCBATCardRFTable_mib_index *tbl_idx, long eocCBATCardRFIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocCBATCardRFIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCBATCardRFIndex = eocCBATCardRFIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocCBATCardRFTable_indexes_set(eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocCBATCardRFTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocCBATCardRFIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocCBATCardRFTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFLinkMaximum
+ * eocCBATCardRFLinkMaximum is subid 2 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.2
+ * Description:
+CBAT°å¿¨ÉäƵ×î´óÐŵÀÊý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCBATCardRFLinkMaximum data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardRFLinkMaximum_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardRFLinkMaximum_get( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardRFLinkMaximum_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardRFLinkMaximum_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFLinkMaximum_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardRFLinkMaximum data.
+ * copy (* eocCBATCardRFLinkMaximum_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardRFLinkMaximum_val_ptr ) = rowreq_ctx->data.eocCBATCardRFLinkMaximum;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFLinkMaximum_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFOutputLevel
+ * eocCBATCardRFOutputLevel is subid 3 of eocCBATCardRFEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.3
+ * Description:
+CBAT°å¿¨ÉäƵÊä³ö¹¦Âʵçƽ£¬µ¥Î»ÎªdBuV¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCBATCardRFOutputLevel data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardRFOutputLevel_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardRFOutputLevel_get( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardRFOutputLevel_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardRFOutputLevel_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFOutputLevel_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardRFOutputLevel data.
+ * copy (* eocCBATCardRFOutputLevel_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardRFOutputLevel_val_ptr ) = rowreq_ctx->data.eocCBATCardRFOutputLevel;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFOutputLevel_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFDownstreamStartFreq
+ * eocCBATCardRFDownstreamStartFreq is subid 4 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.4
+ * Description:
+
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCBATCardRFDownstreamStartFreq data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardRFDownstreamStartFreq_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardRFDownstreamStartFreq_get( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardRFDownstreamStartFreq_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardRFDownstreamStartFreq_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFDownstreamStartFreq_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardRFDownstreamStartFreq data.
+ * copy (* eocCBATCardRFDownstreamStartFreq_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardRFDownstreamStartFreq_val_ptr ) = rowreq_ctx->data.eocCBATCardRFDownstreamStartFreq;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFDownstreamStartFreq_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFDownstreamStopFreq
+ * eocCBATCardRFDownstreamStopFreq is subid 5 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.5
+ * Description:
+
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCBATCardRFDownstreamStopFreq data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardRFDownstreamStopFreq_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardRFDownstreamStopFreq_get( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardRFDownstreamStopFreq_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardRFDownstreamStopFreq_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFDownstreamStopFreq_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardRFDownstreamStopFreq data.
+ * copy (* eocCBATCardRFDownstreamStopFreq_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardRFDownstreamStopFreq_val_ptr ) = rowreq_ctx->data.eocCBATCardRFDownstreamStopFreq;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFDownstreamStopFreq_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFUpstreamStartFreq
+ * eocCBATCardRFUpstreamStartFreq is subid 6 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.6
+ * Description:
+CBAT°å¿¨ÉäƵÉÏÐÐÐŵÀÆðʼƵÂÊ£¬µ¥Î»ÎªHz
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCBATCardRFUpstreamStartFreq data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardRFUpstreamStartFreq_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardRFUpstreamStartFreq_get( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardRFUpstreamStartFreq_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardRFUpstreamStartFreq_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFUpstreamStartFreq_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardRFUpstreamStartFreq data.
+ * copy (* eocCBATCardRFUpstreamStartFreq_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardRFUpstreamStartFreq_val_ptr ) = rowreq_ctx->data.eocCBATCardRFUpstreamStartFreq;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFUpstreamStartFreq_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFUpstreamStopFreq
+ * eocCBATCardRFUpstreamStopFreq is subid 7 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.7
+ * Description:
+CBAT°å¿¨ÉäƵÉÏÐÐÐŵÀÖÕֹƵÂÊ£¬µ¥Î»ÎªHz
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCBATCardRFUpstreamStopFreq data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardRFUpstreamStopFreq_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCBATCardRFUpstreamStopFreq_get( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardRFUpstreamStopFreq_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCBATCardRFUpstreamStopFreq_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFUpstreamStopFreq_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCBATCardRFUpstreamStopFreq data.
+ * copy (* eocCBATCardRFUpstreamStopFreq_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCBATCardRFUpstreamStopFreq_val_ptr ) = rowreq_ctx->data.eocCBATCardRFUpstreamStopFreq;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFUpstreamStopFreq_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_get.h
new file mode 100644
index 0000000000..11516188e2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_get.h
@@ -0,0 +1,64 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocCBATCardRFTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCCBATCARDRFTABLE_DATA_GET_H
+#define EOCCBATCARDRFTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardRFTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFTable is subid 1 of eocCBATCardRFGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1, length: 11
+*/
+ /*
+ * indexes
+ */
+
+ int eocCBATCardRFLinkMaximum_get( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardRFLinkMaximum_val_ptr );
+ int eocCBATCardRFOutputLevel_get( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardRFOutputLevel_val_ptr );
+ int eocCBATCardRFDownstreamStartFreq_get( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardRFDownstreamStartFreq_val_ptr );
+ int eocCBATCardRFDownstreamStopFreq_get( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardRFDownstreamStopFreq_val_ptr );
+ int eocCBATCardRFUpstreamStartFreq_get( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardRFUpstreamStartFreq_val_ptr );
+ int eocCBATCardRFUpstreamStopFreq_get( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long * eocCBATCardRFUpstreamStopFreq_val_ptr );
+
+
+int eocCBATCardRFTable_indexes_set_tbl_idx(eocCBATCardRFTable_mib_index *tbl_idx, long eocCBATCardRFIndex_val);
+int eocCBATCardRFTable_indexes_set(eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDRFTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_set.c
new file mode 100644
index 0000000000..69145ed1bb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_set.c
@@ -0,0 +1,1254 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardRFTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardRFTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFTable is subid 1 of eocCBATCardRFGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1, length: 11
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocCBATCardRFTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocCBATCardRFTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardRFTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCBATCardRFTable_undo_setup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocCBATCardRFTable undo.
+ * set up eocCBATCardRFTable undo information, in preparation for a set.
+ * Undo storage is in (* eocCBATCardRFUpstreamStopFreq_val_ptr )*
+ */
+
+ return rc;
+} /* eocCBATCardRFTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardRFTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCBATCardRFTable_undo( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocCBATCardRFTable undo.
+ * eocCBATCardRFTable undo information, in response to a failed set.
+ * Undo storage is in (* eocCBATCardRFUpstreamStopFreq_val_ptr )*
+ */
+
+ return rc;
+} /* eocCBATCardRFTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardRFTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCBATCardRFTable_undo_cleanup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocCBATCardRFTable undo.
+ * Undo storage is in (* eocCBATCardRFUpstreamStopFreq_val_ptr )*
+ */
+
+ return rc;
+} /* eocCBATCardRFTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCBATCardRFTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCBATCardRFTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCBATCardRFTable_commit( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocCBATCardRFTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_EOCCBATCARDRFOUTPUTLEVEL_FLAG)
+ {
+ /* clear eocCBATCardRFOutputLevel */
+ save_flags &= ~COLUMN_EOCCBATCARDRFOUTPUTLEVEL_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardRFOutputLevel.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardRFOutputLevel
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRFOUTPUTLEVEL_FLAG;
+
+ }
+
+ if (save_flags & COLUMN_EOCCBATCARDRFDOWNSTREAMSTARTFREQ_FLAG)
+ {
+ /* clear eocCBATCardRFDownstreamStartFreq */
+ save_flags &= ~COLUMN_EOCCBATCARDRFDOWNSTREAMSTARTFREQ_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardRFDownstreamStartFreq.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardRFDownstreamStartFreq
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCBATCARDRFDOWNSTREAMSTARTFREQ_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCBATCARDRFDOWNSTREAMSTOPFREQ_FLAG)
+ {
+ /* clear eocCBATCardRFDownstreamStopFreq */
+ save_flags &= ~COLUMN_EOCCBATCARDRFDOWNSTREAMSTOPFREQ_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardRFDownstreamStopFreq.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardRFDownstreamStopFreq
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCBATCARDRFDOWNSTREAMSTOPFREQ_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCBATCARDRFUPSTREAMSTARTFREQ_FLAG)
+ {
+ /* clear eocCBATCardRFUpstreamStartFreq */
+ save_flags &= ~COLUMN_EOCCBATCARDRFUPSTREAMSTARTFREQ_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardRFUpstreamStartFreq.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardRFUpstreamStartFreq
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCBATCARDRFUPSTREAMSTARTFREQ_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ_FLAG)
+ {
+ /* clear eocCBATCardRFUpstreamStopFreq */
+ save_flags &= ~COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCBATCardRFUpstreamStopFreq.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCBATCardRFUpstreamStopFreq
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ_FLAG;
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n", save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocCBATCardRFTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCBATCardRFTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCBATCardRFTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCBATCardRFTable_undo_commit( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_undo_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:485:M: |-> Undo eocCBATCardRFTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocCBATCardRFTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocCBATCardRFTable node value checks.
+ * TODO:450:M: Implement eocCBATCardRFTable undo functions.
+ * TODO:460:M: Implement eocCBATCardRFTable set functions.
+ * TODO:480:M: Implement eocCBATCardRFTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFOutputLevel
+ * eocCBATCardRFOutputLevel is subid 3 of eocCBATCardRFEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.3
+ * Description:
+CBAT°å¿¨ÉäƵÊä³ö¹¦Âʵçƽ£¬µ¥Î»ÎªdBuV¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardRFOutputLevel_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardRFTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardRFOutputLevel_check_value( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFOutputLevel_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFOutputLevel_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardRFOutputLevel value.
+ */
+ /* check that proposed output level value is between allowed min and max value */
+ if ((eocCBATCardRFOutputLevel_val < LIBSPID_RF_CLT_OUTPUT_LEVEL_MIN)
+ || (eocCBATCardRFOutputLevel_val > LIBSPID_RF_CLT_OUTPUT_LEVEL_MAX))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ return MFD_SUCCESS; /* eocCBATCardRFOutputLevel value not illegal */
+} /* eocCBATCardRFOutputLevel_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardRFTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardRFTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardRFOutputLevel_undo_setup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFOutputLevel_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardRFOutputLevel undo.
+ */
+ /*
+ * copy eocCBATCardRFOutputLevel data
+ * set rowreq_ctx->undo->eocCBATCardRFOutputLevel from rowreq_ctx->data.eocCBATCardRFOutputLevel
+ */
+ rowreq_ctx->undo->eocCBATCardRFOutputLevel = rowreq_ctx->data.eocCBATCardRFOutputLevel;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFOutputLevel_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardRFOutputLevel_val
+ * A long containing the new value.
+ */
+int
+eocCBATCardRFOutputLevel_set( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFOutputLevel_val )
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFOutputLevel_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ sprintf (buffer, "%ld", eocCBATCardRFOutputLevel_val);
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_EOC_CONF_PATH,
+ LIBSPID_EOC_CONF_LABEL_OUTPUT_LEVEL,
+ buffer))
+ {
+ snmp_log (LOG_ERR,
+ "Couldn't write new RFCLTOutputLevel value to configuration file\n");
+
+ return SNMP_ERR_COMMITFAILED;
+ }
+ /*
+ * TODO:461:M: |-> Set eocCBATCardRFOutputLevel value.
+ * set eocCBATCardRFOutputLevel value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocCBATCardRFOutputLevel = eocCBATCardRFOutputLevel_val;
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFOutputLevel_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardRFOutputLevel_undo( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFOutputLevel_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ sprintf (buffer, "%ld", rowreq_ctx->undo->eocCBATCardRFOutputLevel);
+
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_EOC_CONF_PATH,
+ LIBSPID_EOC_CONF_LABEL_OUTPUT_LEVEL,
+ buffer))
+ {
+ snmp_log (LOG_ERR,
+ "Couldn't write undone RFCLTOutputLevel value to configuration file\n");
+ return SNMP_ERR_UNDOFAILED;
+ }
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardRFOutputLevel undo.
+ */
+ /*
+ * copy eocCBATCardRFOutputLevel data
+ * set rowreq_ctx->data.eocCBATCardRFOutputLevel from rowreq_ctx->undo->eocCBATCardRFOutputLevel
+ */
+ rowreq_ctx->data.eocCBATCardRFOutputLevel =
+ rowreq_ctx->undo->eocCBATCardRFOutputLevel;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFOutputLevel_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFDownstreamStartFreq
+ * eocCBATCardRFDownstreamStartFreq is subid 4 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.4
+ * Description:
+
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardRFDownstreamStartFreq_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardRFTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardRFDownstreamStartFreq_check_value( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFDownstreamStartFreq_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFDownstreamStartFreq_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardRFDownstreamStartFreq value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATCardRFDownstreamStartFreq value not illegal */
+} /* eocCBATCardRFDownstreamStartFreq_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardRFTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardRFTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardRFDownstreamStartFreq_undo_setup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFDownstreamStartFreq_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardRFDownstreamStartFreq undo.
+ */
+ /*
+ * copy eocCBATCardRFDownstreamStartFreq data
+ * set rowreq_ctx->undo->eocCBATCardRFDownstreamStartFreq from rowreq_ctx->data.eocCBATCardRFDownstreamStartFreq
+ */
+ rowreq_ctx->undo->eocCBATCardRFDownstreamStartFreq = rowreq_ctx->data.eocCBATCardRFDownstreamStartFreq;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFDownstreamStartFreq_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardRFDownstreamStartFreq_val
+ * A long containing the new value.
+ */
+int
+eocCBATCardRFDownstreamStartFreq_set( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFDownstreamStartFreq_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFDownstreamStartFreq_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCBATCardRFDownstreamStartFreq value.
+ * set eocCBATCardRFDownstreamStartFreq value in rowreq_ctx->data
+ */
+ snmp_log(LOG_ERR,
+ "SET not supported for RFDownstreamStartFreq!\n");
+
+ return SNMP_ERR_NOTWRITABLE;
+} /* eocCBATCardRFDownstreamStartFreq_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardRFDownstreamStartFreq_undo( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFDownstreamStartFreq_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardRFDownstreamStartFreq undo.
+ */
+ /*
+ * copy eocCBATCardRFDownstreamStartFreq data
+ * set rowreq_ctx->data.eocCBATCardRFDownstreamStartFreq from rowreq_ctx->undo->eocCBATCardRFDownstreamStartFreq
+ */
+ rowreq_ctx->data.eocCBATCardRFDownstreamStartFreq = rowreq_ctx->undo->eocCBATCardRFDownstreamStartFreq;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFDownstreamStartFreq_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFDownstreamStopFreq
+ * eocCBATCardRFDownstreamStopFreq is subid 5 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.5
+ * Description:
+
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardRFDownstreamStopFreq_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardRFTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardRFDownstreamStopFreq_check_value( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFDownstreamStopFreq_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFDownstreamStopFreq_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardRFDownstreamStopFreq value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATCardRFDownstreamStopFreq value not illegal */
+} /* eocCBATCardRFDownstreamStopFreq_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardRFTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardRFTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardRFDownstreamStopFreq_undo_setup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFDownstreamStopFreq_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardRFDownstreamStopFreq undo.
+ */
+ /*
+ * copy eocCBATCardRFDownstreamStopFreq data
+ * set rowreq_ctx->undo->eocCBATCardRFDownstreamStopFreq from rowreq_ctx->data.eocCBATCardRFDownstreamStopFreq
+ */
+ rowreq_ctx->undo->eocCBATCardRFDownstreamStopFreq = rowreq_ctx->data.eocCBATCardRFDownstreamStopFreq;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFDownstreamStopFreq_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardRFDownstreamStopFreq_val
+ * A long containing the new value.
+ */
+int
+eocCBATCardRFDownstreamStopFreq_set( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFDownstreamStopFreq_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFDownstreamStopFreq_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCBATCardRFDownstreamStopFreq value.
+ * set eocCBATCardRFDownstreamStopFreq value in rowreq_ctx->data
+ */
+ snmp_log(LOG_ERR,
+ "SET not supported for RFDownstreamStopFreq!\n");
+
+ return SNMP_ERR_NOTWRITABLE;
+} /* eocCBATCardRFDownstreamStopFreq_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardRFDownstreamStopFreq_undo( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFDownstreamStopFreq_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardRFDownstreamStopFreq undo.
+ */
+ /*
+ * copy eocCBATCardRFDownstreamStopFreq data
+ * set rowreq_ctx->data.eocCBATCardRFDownstreamStopFreq from rowreq_ctx->undo->eocCBATCardRFDownstreamStopFreq
+ */
+ rowreq_ctx->data.eocCBATCardRFDownstreamStopFreq = rowreq_ctx->undo->eocCBATCardRFDownstreamStopFreq;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFDownstreamStopFreq_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFUpstreamStartFreq
+ * eocCBATCardRFUpstreamStartFreq is subid 6 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.6
+ * Description:
+CBAT°å¿¨ÉäƵÉÏÐÐÐŵÀÆðʼƵÂÊ£¬µ¥Î»ÎªHz
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardRFUpstreamStartFreq_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardRFTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardRFUpstreamStartFreq_check_value( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFUpstreamStartFreq_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFUpstreamStartFreq_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardRFUpstreamStartFreq value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATCardRFUpstreamStartFreq value not illegal */
+} /* eocCBATCardRFUpstreamStartFreq_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardRFTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardRFTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardRFUpstreamStartFreq_undo_setup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFUpstreamStartFreq_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardRFUpstreamStartFreq undo.
+ */
+ /*
+ * copy eocCBATCardRFUpstreamStartFreq data
+ * set rowreq_ctx->undo->eocCBATCardRFUpstreamStartFreq from rowreq_ctx->data.eocCBATCardRFUpstreamStartFreq
+ */
+ rowreq_ctx->undo->eocCBATCardRFUpstreamStartFreq = rowreq_ctx->data.eocCBATCardRFUpstreamStartFreq;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFUpstreamStartFreq_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardRFUpstreamStartFreq_val
+ * A long containing the new value.
+ */
+int
+eocCBATCardRFUpstreamStartFreq_set( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFUpstreamStartFreq_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFUpstreamStartFreq_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCBATCardRFUpstreamStartFreq value.
+ * set eocCBATCardRFUpstreamStartFreq value in rowreq_ctx->data
+ */
+ snmp_log(LOG_ERR,
+ "SET not supported for RFUpstreamStartFreq!\n");
+
+ return SNMP_ERR_NOTWRITABLE;
+} /* eocCBATCardRFUpstreamStartFreq_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardRFUpstreamStartFreq_undo( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFUpstreamStartFreq_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardRFUpstreamStartFreq undo.
+ */
+ /*
+ * copy eocCBATCardRFUpstreamStartFreq data
+ * set rowreq_ctx->data.eocCBATCardRFUpstreamStartFreq from rowreq_ctx->undo->eocCBATCardRFUpstreamStartFreq
+ */
+ rowreq_ctx->data.eocCBATCardRFUpstreamStartFreq = rowreq_ctx->undo->eocCBATCardRFUpstreamStartFreq;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFUpstreamStartFreq_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFEntry.eocCBATCardRFUpstreamStopFreq
+ * eocCBATCardRFUpstreamStopFreq is subid 7 of eocCBATCardRFEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1.1.7
+ * Description:
+CBAT°å¿¨ÉäƵÉÏÐÐÐŵÀÖÕֹƵÂÊ£¬µ¥Î»ÎªHz
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCBATCardRFUpstreamStopFreq_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCBATCardRFTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCBATCardRFUpstreamStopFreq_check_value( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFUpstreamStopFreq_val)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFUpstreamStopFreq_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCBATCardRFUpstreamStopFreq value.
+ */
+
+ return MFD_SUCCESS; /* eocCBATCardRFUpstreamStopFreq value not illegal */
+} /* eocCBATCardRFUpstreamStopFreq_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCBATCardRFTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCBATCardRFTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCBATCardRFUpstreamStopFreq_undo_setup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFUpstreamStopFreq_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCBATCardRFUpstreamStopFreq undo.
+ */
+ /*
+ * copy eocCBATCardRFUpstreamStopFreq data
+ * set rowreq_ctx->undo->eocCBATCardRFUpstreamStopFreq from rowreq_ctx->data.eocCBATCardRFUpstreamStopFreq
+ */
+ rowreq_ctx->undo->eocCBATCardRFUpstreamStopFreq = rowreq_ctx->data.eocCBATCardRFUpstreamStopFreq;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFUpstreamStopFreq_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCBATCardRFUpstreamStopFreq_val
+ * A long containing the new value.
+ */
+int
+eocCBATCardRFUpstreamStopFreq_set( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFUpstreamStopFreq_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFUpstreamStopFreq_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCBATCardRFUpstreamStopFreq value.
+ * set eocCBATCardRFUpstreamStopFreq value in rowreq_ctx->data
+ */
+ snmp_log(LOG_ERR,
+ "SET not supported for RFUpstreamStopFreq!\n");
+
+ return SNMP_ERR_NOTWRITABLE;
+} /* eocCBATCardRFUpstreamStopFreq_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCBATCardRFUpstreamStopFreq_undo( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFUpstreamStopFreq_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCBATCardRFUpstreamStopFreq undo.
+ */
+ /*
+ * copy eocCBATCardRFUpstreamStopFreq data
+ * set rowreq_ctx->data.eocCBATCardRFUpstreamStopFreq from rowreq_ctx->undo->eocCBATCardRFUpstreamStopFreq
+ */
+ rowreq_ctx->data.eocCBATCardRFUpstreamStopFreq = rowreq_ctx->undo->eocCBATCardRFUpstreamStopFreq;
+
+
+ return MFD_SUCCESS;
+} /* eocCBATCardRFUpstreamStopFreq_undo */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_set.h
new file mode 100644
index 0000000000..f38c440926
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_data_set.h
@@ -0,0 +1,80 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDRFTABLE_DATA_SET_H
+#define EOCCBATCARDRFTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardRFTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFTable is subid 1 of eocCBATCardRFGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1, length: 11
+*/
+
+
+int eocCBATCardRFTable_undo_setup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx);
+int eocCBATCardRFTable_undo_cleanup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx);
+int eocCBATCardRFTable_undo( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx);
+int eocCBATCardRFTable_commit( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx);
+int eocCBATCardRFTable_undo_commit( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocCBATCardRFLinkMaximum_check_value( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFLinkMaximum_val);
+int eocCBATCardRFLinkMaximum_undo_setup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardRFLinkMaximum_set( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFLinkMaximum_val );
+int eocCBATCardRFLinkMaximum_undo( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardRFOutputLevel_check_value( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFOutputLevel_val);
+int eocCBATCardRFOutputLevel_undo_setup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardRFOutputLevel_set( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFOutputLevel_val );
+int eocCBATCardRFOutputLevel_undo( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardRFDownstreamStartFreq_check_value( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFDownstreamStartFreq_val);
+int eocCBATCardRFDownstreamStartFreq_undo_setup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardRFDownstreamStartFreq_set( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFDownstreamStartFreq_val );
+int eocCBATCardRFDownstreamStartFreq_undo( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardRFDownstreamStopFreq_check_value( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFDownstreamStopFreq_val);
+int eocCBATCardRFDownstreamStopFreq_undo_setup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardRFDownstreamStopFreq_set( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFDownstreamStopFreq_val );
+int eocCBATCardRFDownstreamStopFreq_undo( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardRFUpstreamStartFreq_check_value( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFUpstreamStartFreq_val);
+int eocCBATCardRFUpstreamStartFreq_undo_setup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardRFUpstreamStartFreq_set( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFUpstreamStartFreq_val );
+int eocCBATCardRFUpstreamStartFreq_undo( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx );
+
+int eocCBATCardRFUpstreamStopFreq_check_value( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFUpstreamStopFreq_val);
+int eocCBATCardRFUpstreamStopFreq_undo_setup( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx );
+int eocCBATCardRFUpstreamStopFreq_set( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, long eocCBATCardRFUpstreamStopFreq_val );
+int eocCBATCardRFUpstreamStopFreq_undo( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocCBATCardRFTable_check_dependencies(eocCBATCardRFTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDRFTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_enums.h
new file mode 100644
index 0000000000..e081040d6c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_enums.h
@@ -0,0 +1,40 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDRFTABLE_ENUMS_H
+#define EOCCBATCARDRFTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocCBATCardRFTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDRFTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_interface.c
new file mode 100644
index 0000000000..da951ddd0b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_interface.c
@@ -0,0 +1,1671 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCBATCardRFTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocCBATCardRFTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCBATCardRFTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCBATCardRFTable is subid 1 of eocCBATCardRFGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.2.1, length: 11
+*/
+typedef struct eocCBATCardRFTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocCBATCardRFTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocCBATCardRFTable_interface_ctx;
+
+static eocCBATCardRFTable_interface_ctx eocCBATCardRFTable_if_ctx;
+
+static void _eocCBATCardRFTable_container_init(
+ eocCBATCardRFTable_interface_ctx *if_ctx);
+static void _eocCBATCardRFTable_container_shutdown(
+ eocCBATCardRFTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocCBATCardRFTable_container_get( void )
+{
+ return eocCBATCardRFTable_if_ctx.container;
+}
+
+eocCBATCardRFTable_registration *
+eocCBATCardRFTable_registration_get( void )
+{
+ return eocCBATCardRFTable_if_ctx.user_ctx;
+}
+
+eocCBATCardRFTable_registration *
+eocCBATCardRFTable_registration_set( eocCBATCardRFTable_registration * newreg )
+{
+ eocCBATCardRFTable_registration * old = eocCBATCardRFTable_if_ctx.user_ctx;
+ eocCBATCardRFTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocCBATCardRFTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocCBATCardRFTable_if_ctx.container);
+}
+
+u_int
+eocCBATCardRFTable_dirty_get( void )
+{
+ return eocCBATCardRFTable_if_ctx.table_dirty;
+}
+
+void
+eocCBATCardRFTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocCBATCardRFTable:eocCBATCardRFTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocCBATCardRFTable_if_ctx.table_dirty, status));
+ eocCBATCardRFTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocCBATCardRFTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocCBATCardRFTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocCBATCardRFTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocCBATCardRFTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocCBATCardRFTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocCBATCardRFTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocCBATCardRFTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocCBATCardRFTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocCBATCardRFTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocCBATCardRFTable_commit;
+static Netsnmp_Node_Handler _mfd_eocCBATCardRFTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocCBATCardRFTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int _eocCBATCardRFTable_undo_column( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+eocCBATCardRFTable_data *eocCBATCardRFTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table eocCBATCardRFTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocCBATCardRFTable_initialize_interface(eocCBATCardRFTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocCBATCardRFTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocCBATCardRFTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_eocCBATCardRFTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocCBATCardRFTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocCBATCardRFIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCCBATCARDRFTABLE_MIN_COL;
+ tbl_info->max_column = EOCCBATCARDRFTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocCBATCardRFTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocCBATCardRFTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocCBATCardRFTable_container_init(&eocCBATCardRFTable_if_ctx);
+ if (NULL == eocCBATCardRFTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocCBATCardRFTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocCBATCardRFTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocCBATCardRFTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocCBATCardRFTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocCBATCardRFTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocCBATCardRFTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocCBATCardRFTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocCBATCardRFTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocCBATCardRFTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocCBATCardRFTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocCBATCardRFTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocCBATCardRFTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocCBATCardRFTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocCBATCardRFTable:init_eocCBATCardRFTable",
+ "Registering eocCBATCardRFTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocCBATCardRFTable", handler,
+ eocCBATCardRFTable_oid,
+ eocCBATCardRFTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocCBATCardRFTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocCBATCardRFTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocCBATCardRFTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocCBATCardRFTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocCBATCardRFTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocCBATCardRFTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocCBATCardRFTable
+ */
+void
+_eocCBATCardRFTable_shutdown_interface(eocCBATCardRFTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocCBATCardRFTable_container_shutdown(&eocCBATCardRFTable_if_ctx);
+}
+
+void
+eocCBATCardRFTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocCBATCardRFTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocCBATCardRFTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocCBATCardRFTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCBATCardRFTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCBATCardRFIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCBATCardRFIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCBATCardRFIndex, 0x00, sizeof(var_eocCBATCardRFIndex) );
+ var_eocCBATCardRFIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCBATCardRFIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_index_to_oid","called\n"));
+
+ /* eocCBATCardRFIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCBATCardRFIndex, (u_char*)&mib_idx->eocCBATCardRFIndex,
+ sizeof(mib_idx->eocCBATCardRFIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocCBATCardRFIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCBATCardRFIndex );
+
+ return err;
+} /* eocCBATCardRFTable_index_to_oid */
+
+/**
+ * extract eocCBATCardRFTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocCBATCardRFTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCBATCardRFTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCBATCardRFIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCBATCardRFIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCBATCardRFIndex, 0x00, sizeof(var_eocCBATCardRFIndex) );
+ var_eocCBATCardRFIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCBATCardRFIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocCBATCardRFIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocCBATCardRFIndex = *((long *)var_eocCBATCardRFIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCBATCardRFIndex );
+
+ return err;
+} /* eocCBATCardRFTable_index_from_oid */
+
+
+/*
+ * eocCBATCardRFTable_allocate_data
+ *
+ * Purpose: create new eocCBATCardRFTable_data.
+ */
+eocCBATCardRFTable_data *
+eocCBATCardRFTable_allocate_data(void)
+{
+ eocCBATCardRFTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocCBATCardRFTable_data);
+
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocCBATCardRFTable_data.\n");
+ }
+
+ return rtn;
+} /* eocCBATCardRFTable_allocate_data */
+
+/*
+ * eocCBATCardRFTable_release_data
+ *
+ * Purpose: release eocCBATCardRFTable data.
+ */
+void
+eocCBATCardRFTable_release_data(eocCBATCardRFTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocCBATCardRFTable:eocCBATCardRFTable_release_data","called\n"));
+
+ free(data);
+} /* eocCBATCardRFTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocCBATCardRFTable_rowreq_ctx
+ */
+eocCBATCardRFTable_rowreq_ctx *
+eocCBATCardRFTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocCBATCardRFTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:eocCBATCardRFTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocCBATCardRFTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocCBATCardRFTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocCBATCardRFTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocCBATCardRFTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocCBATCardRFTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocCBATCardRFTable_rowreq_ctx
+ */
+void
+eocCBATCardRFTable_release_rowreq_ctx(eocCBATCardRFTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:eocCBATCardRFTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocCBATCardRFTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if(rowreq_ctx->undo)
+ eocCBATCardRFTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocCBATCardRFTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCBATCardRFTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCBATCardRFTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocCBATCardRFTable_pre_request(eocCBATCardRFTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardRFTable","error %d from "
+ "eocCBATCardRFTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardRFTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCBATCardRFTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocCBATCardRFTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCBATCardRFTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocCBATCardRFTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocCBATCardRFTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocCBATCardRFTable_post_request(eocCBATCardRFTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardRFTable","error %d from "
+ "eocCBATCardRFTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardRFTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCBATCardRFTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocCBATCardRFTable_interface_ctx *if_ctx =
+ * (eocCBATCardRFTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocCBATCardRFTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocCBATCardRFTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardRFTable_get_column( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocCBATCardRFIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCBATCardRFIndex;
+ break;
+
+ /* eocCBATCardRFLinkMaximum(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFLINKMAXIMUM:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardRFLinkMaximum_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCBATCardRFOutputLevel(3)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFOUTPUTLEVEL:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardRFOutputLevel_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCBATCardRFDownstreamStartFreq(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFDOWNSTREAMSTARTFREQ:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardRFDownstreamStartFreq_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCBATCardRFDownstreamStopFreq(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFDOWNSTREAMSTOPFREQ:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardRFDownstreamStopFreq_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCBATCardRFUpstreamStartFreq(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFUPSTREAMSTARTFREQ:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardRFUpstreamStartFreq_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCBATCardRFUpstreamStopFreq(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCBATCardRFUpstreamStopFreq_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ default:
+ if (EOCCBATCARDRFTABLE_MIN_COL <= column && column <= EOCCBATCARDRFTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocCBATCardRFTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocCBATCardRFTable_get_column */
+
+int
+_mfd_eocCBATCardRFTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardRFTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardRFTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardRFTable_check_column( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_eocCBATCardRFTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocCBATCardRFIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocCBATCardRFLinkMaximum(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFLINKMAXIMUM:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCBATCardRFOutputLevel(3)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFOUTPUTLEVEL:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCBATCardRFOutputLevel ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardRFTable:_eocCBATCardRFTable_check_column:eocCBATCardRFOutputLevel",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardRFOutputLevel_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardRFOutputLevel_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCBATCardRFDownstreamStartFreq(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFDOWNSTREAMSTARTFREQ:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCBATCardRFDownstreamStartFreq ) );
+ /**
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((*var->val.integer < 0)
+ || (*var->val.integer > 1000000000)))
+ {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardRFTable:_eocCBATCardRFTable_check_column:eocCBATCardRFDownstreamStartFreq",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardRFDownstreamStartFreq_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardRFDownstreamStartFreq_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCBATCardRFDownstreamStopFreq(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFDOWNSTREAMSTOPFREQ:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCBATCardRFDownstreamStopFreq ) );
+ /**
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((*var->val.integer < 0)
+ || (*var->val.integer > 1000000000)))
+ {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardRFTable:_eocCBATCardRFTable_check_column:eocCBATCardRFDownstreamStopFreq",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardRFDownstreamStopFreq_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardRFDownstreamStopFreq_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCBATCardRFUpstreamStartFreq(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFUPSTREAMSTARTFREQ:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCBATCardRFUpstreamStartFreq ) );
+ /**
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc)
+ && ((*var->val.integer < 0)
+ || (*var->val.integer > 1000000000)))
+ {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardRFTable:_eocCBATCardRFTable_check_column:eocCBATCardRFUpstreamStartFreq",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardRFUpstreamStartFreq_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardRFUpstreamStartFreq_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCBATCardRFUpstreamStopFreq(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCBATCardRFUpstreamStopFreq ) );
+ if ((SNMPERR_SUCCESS == rc)
+ && ((*var->val.integer < 0)
+ || (*var->val.integer > 1000000000)))
+ {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardRFTable:_eocCBATCardRFTable_check_column:eocCBATCardRFUpstreamStopFreq",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCBATCardRFUpstreamStopFreq_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCBATCardRFUpstreamStopFreq_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocCBATCardRFTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocCBATCardRFTable_check_column */
+
+int
+_mfd_eocCBATCardRFTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardRFTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardRFTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardRFTable_undo_setup_column( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_eocCBATCardRFTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCBATCardRFOutputLevel(3)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFOUTPUTLEVEL:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRFOUTPUTLEVEL_FLAG;
+ rc = eocCBATCardRFOutputLevel_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCBATCardRFDownstreamStartFreq(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFDOWNSTREAMSTARTFREQ:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRFDOWNSTREAMSTARTFREQ_FLAG;
+ rc = eocCBATCardRFDownstreamStartFreq_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCBATCardRFDownstreamStopFreq(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFDOWNSTREAMSTOPFREQ:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRFDOWNSTREAMSTOPFREQ_FLAG;
+ rc = eocCBATCardRFDownstreamStopFreq_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCBATCardRFUpstreamStartFreq(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFUPSTREAMSTARTFREQ:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRFUPSTREAMSTARTFREQ_FLAG;
+ rc = eocCBATCardRFUpstreamStartFreq_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCBATCardRFUpstreamStopFreq(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ_FLAG;
+ rc = eocCBATCardRFUpstreamStopFreq_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCBATCardRFTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCBATCardRFTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCBATCardRFTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocCBATCardRFTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocCBATCardRFTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardRFTable:mfd","error %d from "
+ "eocCBATCardRFTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardRFTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardRFTable:mfd","error %d from "
+ "eocCBATCardRFTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardRFTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCBATCardRFTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocCBATCardRFTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardRFTable:mfd","error %d from "
+ "eocCBATCardRFTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if(rowreq_ctx->undo) {
+ eocCBATCardRFTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardRFTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardRFTable_set_column( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_eocCBATCardRFTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCBATCardRFOutputLevel(3)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFOUTPUTLEVEL:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRFOUTPUTLEVEL_FLAG;
+ rc = eocCBATCardRFOutputLevel_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCBATCardRFDownstreamStartFreq(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFDOWNSTREAMSTARTFREQ:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRFDOWNSTREAMSTARTFREQ_FLAG;
+ rc = eocCBATCardRFDownstreamStartFreq_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCBATCardRFDownstreamStopFreq(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFDOWNSTREAMSTOPFREQ:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRFDOWNSTREAMSTOPFREQ_FLAG;
+ rc = eocCBATCardRFDownstreamStopFreq_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCBATCardRFUpstreamStartFreq(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFUPSTREAMSTARTFREQ:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRFUPSTREAMSTARTFREQ_FLAG;
+ rc = eocCBATCardRFUpstreamStartFreq_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCBATCardRFUpstreamStopFreq(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ_FLAG;
+ rc = eocCBATCardRFUpstreamStopFreq_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCBATCardRFTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocCBATCardRFTable_set_column */
+
+int
+_mfd_eocCBATCardRFTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardRFTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardRFTable:mfd","error %d from "
+ "eocCBATCardRFTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardRFTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocCBATCardRFTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCBATCardRFTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCBATCardRFTable:mfd","error %d from "
+ "eocCBATCardRFTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocCBATCardRFTable_dirty_set( eocCBATCardRFTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocCBATCardRFTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocCBATCardRFTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocCBATCardRFTable_dirty_set( d - 1 );
+ }
+
+ rc = eocCBATCardRFTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardRFTable:mfd","error %d from "
+ "eocCBATCardRFTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocCBATCardRFTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardRFTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCBATCardRFTable_undo_column( eocCBATCardRFTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_eocCBATCardRFTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCBATCardRFOutputLevel(3)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFOUTPUTLEVEL:
+ rc = eocCBATCardRFOutputLevel_undo(rowreq_ctx);
+ break;
+
+ /* eocCBATCardRFDownstreamStartFreq(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFDOWNSTREAMSTARTFREQ:
+ rc = eocCBATCardRFDownstreamStartFreq_undo(rowreq_ctx);
+ break;
+
+ /* eocCBATCardRFDownstreamStopFreq(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFDOWNSTREAMSTOPFREQ:
+ rc = eocCBATCardRFDownstreamStopFreq_undo(rowreq_ctx);
+ break;
+
+ /* eocCBATCardRFUpstreamStartFreq(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFUPSTREAMSTARTFREQ:
+ rc = eocCBATCardRFUpstreamStartFreq_undo(rowreq_ctx);
+ break;
+
+ /* eocCBATCardRFUpstreamStopFreq(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ:
+ rc = eocCBATCardRFUpstreamStopFreq_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCBATCardRFTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCBATCardRFTable_undo_column */
+
+int
+_mfd_eocCBATCardRFTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCBATCardRFTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardRFTable:mfd","error %d from "
+ "eocCBATCardRFTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCBATCardRFTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCBATCardRFTable:mfd","error %d from "
+ "eocCBATCardRFTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardRFTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocCBATCardRFTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_mfd_eocCBATCardRFTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocCBATCardRFTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCBATCardRFTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocCBATCardRFTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocCBATCardRFTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocCBATCardRFTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocCBATCardRFTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocCBATCardRFTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocCBATCardRFTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocCBATCardRFTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocCBATCardRFTable_container_init(eocCBATCardRFTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_eocCBATCardRFTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocCBATCardRFTable_oid,
+ eocCBATCardRFTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocCBATCardRFTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocCBATCardRFTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocCBATCardRFTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocCBATCardRFTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocCBATCardRFTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocCBATCardRFTable_container_shutdown(eocCBATCardRFTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCBATCardRFTable:_eocCBATCardRFTable_container_shutdown","called\n"));
+
+ eocCBATCardRFTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocCBATCardRFTable_container_shutdown */
+
+
+eocCBATCardRFTable_rowreq_ctx *
+eocCBATCardRFTable_row_find_by_mib_index(eocCBATCardRFTable_mib_index *mib_idx)
+{
+ eocCBATCardRFTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocCBATCardRFTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocCBATCardRFTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_interface.h
new file mode 100644
index 0000000000..33cac3e1b5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_interface.h
@@ -0,0 +1,87 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCCBATCARDRFTABLE_INTERFACE_H
+#define EOCCBATCARDRFTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocCBATCardRFTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocCBATCardRFTable_initialize_interface(eocCBATCardRFTable_registration * user_ctx,
+ u_long flags);
+void _eocCBATCardRFTable_shutdown_interface(eocCBATCardRFTable_registration * user_ctx);
+
+eocCBATCardRFTable_registration *
+eocCBATCardRFTable_registration_get( void );
+
+eocCBATCardRFTable_registration *
+eocCBATCardRFTable_registration_set( eocCBATCardRFTable_registration * newreg );
+
+netsnmp_container *eocCBATCardRFTable_container_get( void );
+int eocCBATCardRFTable_container_size( void );
+
+u_int eocCBATCardRFTable_dirty_get( void );
+void eocCBATCardRFTable_dirty_set( u_int status );
+
+ eocCBATCardRFTable_rowreq_ctx * eocCBATCardRFTable_allocate_rowreq_ctx(void *);
+void eocCBATCardRFTable_release_rowreq_ctx(eocCBATCardRFTable_rowreq_ctx *rowreq_ctx);
+
+int eocCBATCardRFTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCBATCardRFTable_mib_index *mib_idx);
+int eocCBATCardRFTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCBATCardRFTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocCBATCardRFTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDRFTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_oids.h
new file mode 100644
index 0000000000..ea8e1ad6b8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCBATCardRFGroup/eocCBATCardRFTable/eocCBATCardRFTable_oids.h
@@ -0,0 +1,53 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCCBATCARDRFTABLE_OIDS_H
+#define EOCCBATCARDRFTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* column number definitions for table eocCBATCardRFTable */
+#define EOCCBATCARDRFTABLE_OID 1,3,6,1,4,1,17409,2,4,2,1
+
+
+#define COLUMN_EOCCBATCARDRFINDEX 1
+
+#define COLUMN_EOCCBATCARDRFLINKMAXIMUM 2
+
+#define COLUMN_EOCCBATCARDRFOUTPUTLEVEL 3
+#define COLUMN_EOCCBATCARDRFOUTPUTLEVEL_FLAG (0x1 << 0)
+
+#define COLUMN_EOCCBATCARDRFDOWNSTREAMSTARTFREQ 4
+#define COLUMN_EOCCBATCARDRFDOWNSTREAMSTARTFREQ_FLAG (0x1 << 1)
+
+#define COLUMN_EOCCBATCARDRFDOWNSTREAMSTOPFREQ 5
+#define COLUMN_EOCCBATCARDRFDOWNSTREAMSTOPFREQ_FLAG (0x1 << 2)
+
+#define COLUMN_EOCCBATCARDRFUPSTREAMSTARTFREQ 6
+#define COLUMN_EOCCBATCARDRFUPSTREAMSTARTFREQ_FLAG (0x1 << 3)
+
+#define COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ 7
+#define COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ_FLAG (0x1 << 4)
+
+
+#define EOCCBATCARDRFTABLE_MIN_COL COLUMN_EOCCBATCARDRFINDEX
+#define EOCCBATCARDRFTABLE_MAX_COL COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ
+
+
+ /*
+ * TODO:405:r: Review EOCCBATCARDRFTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCCBATCARDRFTABLE_SETTABLE_COLS (COLUMN_EOCCBATCARDRFOUTPUTLEVEL_FLAG | COLUMN_EOCCBATCARDRFDOWNSTREAMSTARTFREQ_FLAG | COLUMN_EOCCBATCARDRFDOWNSTREAMSTOPFREQ_FLAG | COLUMN_EOCCBATCARDRFUPSTREAMSTARTFREQ_FLAG | COLUMN_EOCCBATCARDRFUPSTREAMSTOPFREQ_FLAG)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCBATCARDRFTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup.h
new file mode 100644
index 0000000000..fa28ffc2a7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUService)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUPort)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU.h
new file mode 100644
index 0000000000..1671e7dc53
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU.h
@@ -0,0 +1,3 @@
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNU)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNU.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNU.c
new file mode 100644
index 0000000000..12e6660cca
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNU.c
@@ -0,0 +1,141 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37: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 "eocCNU.h"
+
+/** Initializes the eocCNU module */
+void
+init_eocCNU(void)
+{
+ static oid eocCNUAllReset_oid[] = { 1,3,6,1,4,1,17409,2,4,5,2,1 };
+
+
+ DEBUGMSGTL(("eocCNU", "Initializing\n"));
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCNUAllReset", handle_eocCNUAllReset,
+ eocCNUAllReset_oid, OID_LENGTH(eocCNUAllReset_oid),
+ HANDLER_CAN_RWRITE
+ ));
+}
+
+int
+handle_eocCNUAllReset(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ int all_reset = 0;
+
+ /* list of MAC addresses currently online */
+ char mac_address_list[LIBSPID_ONLINE_INFO_LINE_MAX_NB][6];
+ /* number of currently online stations */
+ int mac_count = 0;
+ int i;
+ char mac_str[LIBSPID_MAC_STR_LEN];
+
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /* a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &all_reset,
+ sizeof (all_reset));
+ break;
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_INTEGER);
+ if ( ret != SNMP_ERR_NOERROR )
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret );
+ }
+ ret = netsnmp_check_vb_range (requests->requestvb,
+ ONLINE_CNU_ALL_RESET,
+ ONLINE_CNU_ALL_RESET);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ break;
+
+ case MODE_SET_FREE:
+ break;
+
+ case MODE_SET_ACTION:
+ /* get current network topology state */
+ ret = libspid_eoc_get_topo (mac_address_list[0], &mac_count);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_get_topo error\n");
+ }
+ else
+ {
+ for (i = 0; i < mac_count; i++)
+ {
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_bin_to_str (mac_address_list[i], mac_str))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ continue;
+ }
+
+ /* attempt to reboot only authorized slaves */
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_wl_authorization (mac_str))
+ continue;
+
+ DEBUGMSGTL (("eocCNU",
+ "attempt to reboot MAC address: %s\n",
+ mac_str));
+
+ if (LIBSPID_SUCCESS != libspid_eoc_reboot (mac_str))
+ {
+ snmp_log (LOG_ERR,
+ "Couldn't reboot slave for MAC address: %s\n",
+ mac_str);
+ }
+ else
+ {
+ DEBUGMSGTL (("eocCNU",
+ "succesfully rebooted MAC address: %s\n",
+ mac_str));
+ }
+ }
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ break;
+
+ case MODE_SET_UNDO:
+ break;
+
+
+ default:
+ /*
+ * we should never get here, so this is a really bad error
+ */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_modEoCOnlineCNUAllReset\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNU.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNU.h
new file mode 100644
index 0000000000..289527f302
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNU.h
@@ -0,0 +1,14 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+ */
+#ifndef EOCCNU_H
+#define EOCCNU_H
+/* include common header */
+#include "EoCCommon.h"
+
+/* function declarations */
+void init_eocCNU(void);
+Netsnmp_Node_Handler handle_eocCNUAllReset;
+
+#endif /* EOCCNU_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable.h
new file mode 100644
index 0000000000..1f7003c1e1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_get)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_set)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_access)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_interface)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlAllReset.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlAllReset.m2d
new file mode 100644
index 0000000000..e82bd1955b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlAllReset.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUControlAllReset
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlAmountLimitation.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlAmountLimitation.m2d
new file mode 100644
index 0000000000..6d694eca85
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlAmountLimitation.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUControlAmountLimitation
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlCBATCardIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlCBATCardIndex.m2d
new file mode 100644
index 0000000000..9b3c590b1c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlCBATCardIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUControlCBATCardIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlCurrentAmount.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlCurrentAmount.m2d
new file mode 100644
index 0000000000..555e2068e8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/node-eocCNUControlCurrentAmount.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUControlCurrentAmount
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/table-eocCNUControlTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/table-eocCNUControlTable.m2d
new file mode 100644
index 0000000000..3639935b9a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/defaults/table-eocCNUControlTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocCNUControlTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable-README-FIRST.txt
new file mode 100644
index 0000000000..c05370c388
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocCNUControlTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocCNUControlTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocCNUControlTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocCNUControlTable_Makefile
+
+
+ File : eocCNUControlTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocCNUControlTable-README-eocCNUControlTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocCNUControlTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocCNUControlTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocCNUControlTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocCNUControlTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable-README-eocCNUControlTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable-README-eocCNUControlTable.txt
new file mode 100644
index 0000000000..e27ad23c95
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable-README-eocCNUControlTable.txt
@@ -0,0 +1,627 @@
+************************************************************************
+eocCNUControlTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocCNUControlTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocCNUControlTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocCNUControlTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUControlTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUControlTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUControlTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocCNUControlTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUControlTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocCNUControlTable_allocate_data
+ eocCNUControlTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocCNUControlTable_rowreq_ctx_init
+ eocCNUControlTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocCNUControlTable table
+ ------------------------------------------------------------
+ The index(es) for the eocCNUControlTable table are:
+
+ eocCNUControlCBATCardIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocCNUControlTable_data.
+
+
+************************************************************************
+eocCNUControlTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocCNUControlTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocCNUControlTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocCNUControlTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocCNUControlTable_indexes_set
+ WHERE: eocCNUControlTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocCNUControlTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocCNUControlTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUControlAllReset_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUControlCurrentAmount_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUControlAmountLimitation_get
+
+
+
+File: eocCNUControlTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocCNUControlTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table does not support ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocCNUControlTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUControlAllReset_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUControlAllReset_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUControlAllReset_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUControlAllReset_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUControlAmountLimitation_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUControlAmountLimitation_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUControlAmountLimitation_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUControlAmountLimitation_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocCNUControlTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocCNUControlTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocCNUControlTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocCNUControlTable table.
+
+To watch the flow of the eocCNUControlTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocCNUControlTable
+ verbose:eocCNUControlTable
+ internal:eocCNUControlTable
+
+e.g.
+ snmpd -f -Le -DeocCNUControlTable,verbose:eocCNUControlTable,internal:eocCNUControlTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlTable is subid 5 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5, length: 12
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlEntry.eocCNUControlCBATCardIndex
+ * eocCNUControlCBATCardIndex is subid 1 of eocCNUControlEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5.1.1
+ * Description:
+CBAT°å¿¨µÄÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlEntry.eocCNUControlAllReset
+ * eocCNUControlAllReset is subid 2 of eocCNUControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5.1.2
+ * Description:
+¸´Î»È«²¿ÔÚÏßCNU¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: reset(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlEntry.eocCNUControlCurrentAmount
+ * eocCNUControlCurrentAmount is subid 3 of eocCNUControlEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5.1.3
+ * Description:
+µ±Ç°ÔÚÏßCNUÊýÁ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlEntry.eocCNUControlAmountLimitation
+ * eocCNUControlAmountLimitation is subid 4 of eocCNUControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5.1.4
+ * Description:
+ÔÚÏßCNUÊýÁ¿ÏÞÖÆ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable.c
new file mode 100644
index 0000000000..89f68f7a7d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable.c
@@ -0,0 +1,227 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocCNUControlTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUControlTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocCNUControlTable_interface.h"
+
+oid eocCNUControlTable_oid[] = { EOCCNUCONTROLTABLE_OID };
+int eocCNUControlTable_oid_size = OID_LENGTH(eocCNUControlTable_oid);
+
+ eocCNUControlTable_registration eocCNUControlTable_user_context;
+
+void initialize_table_eocCNUControlTable(void);
+void shutdown_table_eocCNUControlTable(void);
+
+
+/**
+ * Initializes the eocCNUControlTable module
+ */
+void
+init_eocCNUControlTable (void)
+{
+ DEBUGMSGTL (("verbose:eocCNUControlTable:init_eocCNUControlTable",
+ "called\n"));
+
+ /*
+ * TODO:300:o: Perform eocCNUControlTable one-time module initialization.
+ */
+ static int eocCNUControlTable_did_init = 0;
+
+ if (++eocCNUControlTable_did_init != 1)
+ {
+ DEBUGMSGTL (("eocCNUControlTable:init_eocCNUControlTable",
+ "ignoring duplicate call\n"));
+ return;
+ }
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init ("eocCNUControlTable"))
+ initialize_table_eocCNUControlTable ();
+
+}
+
+/**
+ * Shut-down the eocCNUControlTable module (agent is exiting)
+ */
+void
+shutdown_eocCNUControlTable(void)
+{
+ if (should_init("eocCNUControlTable"))
+ shutdown_table_eocCNUControlTable();
+
+}
+
+/**
+ * Initialize the table eocCNUControlTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocCNUControlTable(void)
+{
+ eocCNUControlTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:initialize_table_eocCNUControlTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocCNUControlTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocCNUControlTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocCNUControlTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocCNUControlTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocCNUControlTable */
+
+/**
+ * Shutdown the table eocCNUControlTable
+ */
+void
+shutdown_table_eocCNUControlTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocCNUControlTable_shutdown_interface(&eocCNUControlTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocCNUControlTable_rowreq_ctx_init(eocCNUControlTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocCNUControlTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUControlTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocCNUControlTable_rowreq_ctx_cleanup(eocCNUControlTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocCNUControlTable rowreq cleanup.
+ */
+} /* eocCNUControlTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocCNUControlTable_pre_request(eocCNUControlTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocCNUControlTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUControlTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocCNUControlTable_post_request(eocCNUControlTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocCNUControlTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocCNUControlTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocCNUControlTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUControlTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable.h
new file mode 100644
index 0000000000..fba9273bfe
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable.h
@@ -0,0 +1,204 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUCONTROLTABLE_H
+#define EOCCNUCONTROLTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* include common header */
+#include "EoCCommon.h"
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+/* other required module components */
+ /* *INDENT-OFF* */
+ /* *INDENT-ON* */
+
+/* OID and column number definitions for eocCNUControlTable */
+#include "eocCNUControlTable_oids.h"
+
+/* enum definions */
+#include "eocCNUControlTable_enums.h"
+
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocCNUControlTable(void);
+void shutdown_eocCNUControlTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlTable is subid 5 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5, length: 12
+*/
+/* *********************************************************************
+ * 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 eocCNUControlTable registration context.
+ */
+typedef netsnmp_data_list eocCNUControlTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocCNUControlTable data context structure.
+ * This structure is used to represent the data for eocCNUControlTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocCNUControlTable.
+ */
+typedef struct eocCNUControlTable_data_s {
+
+ /*
+ * eocCNUControlAllReset(2)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUControlAllReset;
+
+ /*
+ * eocCNUControlCurrentAmount(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUControlCurrentAmount;
+
+ /*
+ * eocCNUControlAmountLimitation(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUControlAmountLimitation;
+
+} eocCNUControlTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocCNUControlTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocCNUControlTable_data eocCNUControlTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocCNUControlTable mib index.
+ * This structure is used to represent the index for eocCNUControlTable.
+ */
+typedef struct eocCNUControlTable_mib_index_s {
+
+ /*
+ * eocCNUControlCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUControlCBATCardIndex;
+
+
+} eocCNUControlTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocCNUControlTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocCNUControlTable_IDX_LEN 1
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocCNUControlTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocCNUControlTable_rowreq_ctx pointer.
+ */
+typedef struct eocCNUControlTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocCNUControlTable_IDX_LEN];
+
+ eocCNUControlTable_mib_index tbl_idx;
+
+ eocCNUControlTable_data data;
+ eocCNUControlTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocCNUControlTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocCNUControlTable_data_list;
+
+} eocCNUControlTable_rowreq_ctx;
+
+typedef struct eocCNUControlTable_ref_rowreq_ctx_s {
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx;
+} eocCNUControlTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocCNUControlTable_pre_request(eocCNUControlTable_registration * user_context);
+ int eocCNUControlTable_post_request(eocCNUControlTable_registration * user_context,
+ int rc);
+
+ int eocCNUControlTable_rowreq_ctx_init(eocCNUControlTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocCNUControlTable_rowreq_ctx_cleanup(eocCNUControlTable_rowreq_ctx *rowreq_ctx);
+
+ int eocCNUControlTable_commit(eocCNUControlTable_rowreq_ctx * rowreq_ctx);
+
+ eocCNUControlTable_rowreq_ctx *
+ eocCNUControlTable_row_find_by_mib_index(eocCNUControlTable_mib_index *mib_idx);
+
+extern oid eocCNUControlTable_oid[];
+extern int eocCNUControlTable_oid_size;
+
+
+#include "eocCNUControlTable_interface.h"
+#include "eocCNUControlTable_data_access.h"
+#include "eocCNUControlTable_data_get.h"
+#include "eocCNUControlTable_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 /* EOCCNUCONTROLTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_access.c
new file mode 100644
index 0000000000..bf1e4fc8a6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_access.c
@@ -0,0 +1,346 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUControlTable.h"
+
+
+#include "eocCNUControlTable_data_access.h"
+extern int eocCNUTable_RegisteredAmount_get(void);
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlTable is subid 5 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5, length: 12
+*/
+
+/**
+ * initialization for eocCNUControlTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocCNUControlTable_reg
+ * Pointer to eocCNUControlTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocCNUControlTable_init_data(eocCNUControlTable_registration * eocCNUControlTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocCNUControlTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUControlTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocCNUControlTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocCNUControlTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocCNUControlTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocCNUControlTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCCNUCONTROLTABLE_CACHE_TIMEOUT; /* seconds */
+} /* eocCNUControlTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocCNUControlTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocCNUControlTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocCNUControlTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocCNUControlTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocCNUControlTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocCNUControlTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocCNUControlTable_container_load (netsnmp_container *container)
+{
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+
+ int all_reset = 0;
+ int amount_limit = LIBSPID_ONLINE_INFO_LINE_MAX_NB;
+ int curr_amount = 0;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocCNUControlCBATCardIndex(1)/
+ * INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUControlCBATCardIndex = 0;
+
+
+ DEBUGMSGTL (("verbose:eocCNUControlTable:"
+ "eocCNUControlTable_container_load","called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocCNUControlTable container.
+ * loop over your eocCNUControlTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+
+
+ /*
+ * TODO:352:M: | |-> set indexes in new
+ * eocCNUControlTable rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocCNUControlTable_allocate_rowreq_ctx (NULL);
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+
+ if (MFD_SUCCESS != eocCNUControlTable_indexes_set (
+ rowreq_ctx, eocCNUControlCBATCardIndex))
+ {
+ snmp_log (LOG_ERR,"error setting index while loading "
+ "eocCNUControlTable data.\n");
+ eocCNUControlTable_release_rowreq_ctx (rowreq_ctx);
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+
+ /*
+ * TODO:352:r: | |-> populate eocCNUControlTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocCNUControlAllReset
+ * eocCNUControlAllReset(2)/
+ * INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+
+ rowreq_ctx->data.eocCNUControlAllReset = all_reset;
+
+ /*
+ * setup/save data for eocCNUControlCurrentAmount
+ * eocCNUControlCurrentAmount(3)/
+ * INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+
+ curr_amount = eocCNUTable_RegisteredAmount_get ();
+ if (curr_amount < 0)
+ {
+ snmp_log (LOG_ERR, "error getting Registered Amount\n");
+ /* registered amount is set to -1 to permit walk requests */
+ curr_amount = 0;
+ }
+ rowreq_ctx->data.eocCNUControlCurrentAmount = curr_amount;
+
+ /*
+ * setup/save data for eocCNUControlAmountLimitation
+ * eocCNUControlAmountLimitation(4)/
+ * INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ rowreq_ctx->data.eocCNUControlAmountLimitation = amount_limit;
+
+
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT (container, rowreq_ctx);
+ ++count;
+
+ DEBUGMSGT (("verbose:eocCNUControlTable:"
+ "eocCNUControlTable_container_load",
+ "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+}
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocCNUControlTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocCNUControlTable container data.
+ */
+} /* eocCNUControlTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocCNUControlTable_row_prep( eocCNUControlTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUControlTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_access.h
new file mode 100644
index 0000000000..b453e8ad4b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_access.h
@@ -0,0 +1,63 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUCONTROLTABLE_DATA_ACCESS_H
+#define EOCCNUCONTROLTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlTable is subid 5 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5, length: 12
+*/
+
+
+ int eocCNUControlTable_init_data(eocCNUControlTable_registration * eocCNUControlTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocCNUControlTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCCNUCONTROLTABLE_CACHE_TIMEOUT 60
+
+void eocCNUControlTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocCNUControlTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocCNUControlTable_container_load(netsnmp_container *container);
+void eocCNUControlTable_container_free(netsnmp_container *container);
+
+int eocCNUControlTable_cache_load(netsnmp_container *container);
+void eocCNUControlTable_cache_free(netsnmp_container *container);
+
+ int eocCNUControlTable_row_prep( eocCNUControlTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUCONTROLTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_get.c
new file mode 100644
index 0000000000..aea1455e44
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_get.c
@@ -0,0 +1,263 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUControlTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocCNUControlTable get routines.
+ * TODO:240:M: Implement eocCNUControlTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlTable is subid 5 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5, length: 12
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocCNUControlTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocCNUControlCBATCardIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocCNUControlTable_indexes_set_tbl_idx(eocCNUControlTable_mib_index *tbl_idx, long eocCNUControlCBATCardIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocCNUControlCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCNUControlCBATCardIndex = eocCNUControlCBATCardIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUControlTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocCNUControlTable_indexes_set(eocCNUControlTable_rowreq_ctx *rowreq_ctx, long eocCNUControlCBATCardIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocCNUControlTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocCNUControlCBATCardIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocCNUControlTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUControlTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlEntry.eocCNUControlAllReset
+ * eocCNUControlAllReset is subid 2 of eocCNUControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5.1.2
+ * Description:
+¸´Î»È«²¿ÔÚÏßCNU¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: reset(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUControlAllReset data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUControlAllReset_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUControlAllReset_get( eocCNUControlTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUControlAllReset_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUControlAllReset_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlAllReset_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUControlAllReset data.
+ * copy (* eocCNUControlAllReset_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUControlAllReset_val_ptr ) = rowreq_ctx->data.eocCNUControlAllReset;
+
+ return MFD_SUCCESS;
+} /* eocCNUControlAllReset_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlEntry.eocCNUControlCurrentAmount
+ * eocCNUControlCurrentAmount is subid 3 of eocCNUControlEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5.1.3
+ * Description:
+µ±Ç°ÔÚÏßCNUÊýÁ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUControlCurrentAmount data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUControlCurrentAmount_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUControlCurrentAmount_get( eocCNUControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUControlCurrentAmount_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUControlCurrentAmount_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlCurrentAmount_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUControlCurrentAmount data.
+ * copy (* eocCNUControlCurrentAmount_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUControlCurrentAmount_val_ptr ) = rowreq_ctx->data.eocCNUControlCurrentAmount;
+
+ return MFD_SUCCESS;
+} /* eocCNUControlCurrentAmount_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlEntry.eocCNUControlAmountLimitation
+ * eocCNUControlAmountLimitation is subid 4 of eocCNUControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5.1.4
+ * Description:
+ÔÚÏßCNUÊýÁ¿ÏÞÖÆ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUControlAmountLimitation data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUControlAmountLimitation_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUControlAmountLimitation_get( eocCNUControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUControlAmountLimitation_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUControlAmountLimitation_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlAmountLimitation_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUControlAmountLimitation data.
+ * copy (* eocCNUControlAmountLimitation_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUControlAmountLimitation_val_ptr ) = rowreq_ctx->data.eocCNUControlAmountLimitation;
+
+ return MFD_SUCCESS;
+} /* eocCNUControlAmountLimitation_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_get.h
new file mode 100644
index 0000000000..7a56444fcb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_get.h
@@ -0,0 +1,61 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocCNUControlTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCCNUCONTROLTABLE_DATA_GET_H
+#define EOCCNUCONTROLTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlTable is subid 5 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5, length: 12
+*/
+ /*
+ * indexes
+ */
+
+ int eocCNUControlAllReset_get( eocCNUControlTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUControlAllReset_val_ptr );
+ int eocCNUControlCurrentAmount_get( eocCNUControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUControlCurrentAmount_val_ptr );
+ int eocCNUControlAmountLimitation_get( eocCNUControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUControlAmountLimitation_val_ptr );
+
+
+int eocCNUControlTable_indexes_set_tbl_idx(eocCNUControlTable_mib_index *tbl_idx, long eocCNUControlCBATCardIndex_val);
+int eocCNUControlTable_indexes_set(eocCNUControlTable_rowreq_ctx *rowreq_ctx, long eocCNUControlCBATCardIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUCONTROLTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_set.c
new file mode 100644
index 0000000000..601fdd8ac1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_set.c
@@ -0,0 +1,734 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUControlTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlTable is subid 5 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5, length: 12
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocCNUControlTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocCNUControlTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUControlTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUControlTable_undo_setup( eocCNUControlTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocCNUControlTable undo.
+ * set up eocCNUControlTable undo information, in preparation for a set.
+ * Undo storage is in (* eocCNUControlAmountLimitation_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUControlTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUControlTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUControlTable_undo( eocCNUControlTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocCNUControlTable undo.
+ * eocCNUControlTable undo information, in response to a failed set.
+ * Undo storage is in (* eocCNUControlAmountLimitation_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUControlTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUControlTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUControlTable_undo_cleanup( eocCNUControlTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocCNUControlTable undo.
+ * Undo storage is in (* eocCNUControlAmountLimitation_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUControlTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUControlTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUControlTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUControlTable_commit( eocCNUControlTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocCNUControlTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_EOCCNUCONTROLALLRESET_FLAG) {
+ save_flags &= ~COLUMN_EOCCNUCONTROLALLRESET_FLAG; /* clear eocCNUControlAllReset */
+ /*
+ * TODO:482:o: |-> commit column eocCNUControlAllReset.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCNUControlAllReset
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUCONTROLALLRESET_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUCONTROLAMOUNTLIMITATION_FLAG) {
+ save_flags &= ~COLUMN_EOCCNUCONTROLAMOUNTLIMITATION_FLAG; /* clear eocCNUControlAmountLimitation */
+ /*
+ * TODO:482:o: |-> commit column eocCNUControlAmountLimitation.
+ */
+ /*
+ * set flag, in case we need to undo eocCNUControlAmountLimitation
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUCONTROLAMOUNTLIMITATION_FLAG;
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n", save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocCNUControlTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUControlTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUControlTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUControlTable_undo_commit( eocCNUControlTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_undo_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:485:M: |-> Undo eocCNUControlTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocCNUControlTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocCNUControlTable node value checks.
+ * TODO:450:M: Implement eocCNUControlTable undo functions.
+ * TODO:460:M: Implement eocCNUControlTable set functions.
+ * TODO:480:M: Implement eocCNUControlTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlEntry.eocCNUControlAllReset
+ * eocCNUControlAllReset is subid 2 of eocCNUControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5.1.2
+ * Description:
+¸´Î»È«²¿ÔÚÏßCNU¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: reset(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUControlAllReset_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUControlTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of reset(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUControlAllReset_check_value( eocCNUControlTable_rowreq_ctx *rowreq_ctx, u_long eocCNUControlAllReset_val)
+{
+ DEBUGMSGTL (("verbose:eocCNUControlTable:\
+ eocCNUControlAllReset_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUControlAllReset value.
+ */
+ if ((eocCNUControlAllReset_val != 0) &&
+ (eocCNUControlAllReset_val != 1))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ return MFD_SUCCESS; /* eocCNUControlAllReset value not illegal */
+}
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUControlTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUControlTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUControlAllReset_undo_setup( eocCNUControlTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlAllReset_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUControlAllReset undo.
+ */
+ /*
+ * copy eocCNUControlAllReset data
+ * set rowreq_ctx->undo->eocCNUControlAllReset from rowreq_ctx->data.eocCNUControlAllReset
+ */
+ rowreq_ctx->undo->eocCNUControlAllReset = rowreq_ctx->data.eocCNUControlAllReset;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUControlAllReset_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUControlAllReset_val
+ * A long containing the new value.
+ */
+int
+eocCNUControlAllReset_set( eocCNUControlTable_rowreq_ctx *rowreq_ctx, u_long eocCNUControlAllReset_val )
+{
+
+ DEBUGMSGTL (("verbose:eocCNUControlTable:eocCNUControlAllReset_set",
+ "called\n"));
+ char mac_address_list[LIBSPID_ONLINE_INFO_LINE_MAX_NB][6];
+ int mac_count = 0;
+ int i;
+ int ret;
+ char mac_str[LIBSPID_MAC_STR_LEN];
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:245:o: |-> Implement eocCNUControlAllReset reverse mapping.
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them here.
+ */
+ switch (eocCNUControlAllReset_val)
+ {
+ case EOCCNUCONTROLALLRESET_RESET:
+ /* get current network topology state */
+ ret = libspid_eoc_get_topo (mac_address_list[0], &mac_count);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_get_topo error\n");
+ }
+ else
+ {
+ for (i = 0; i < mac_count; i++)
+ {
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_bin_to_str (mac_address_list[i], mac_str))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ continue;
+ }
+
+ /* attempt to reboot only authorized slaves */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_authorization (mac_str))
+ continue;
+
+ DEBUGMSGTL (("eocCNUControlTable",
+ "attempt to reboot MAC address: %s\n", mac_str));
+
+ if (LIBSPID_SUCCESS != libspid_eoc_reboot (mac_str))
+ {
+ snmp_log (LOG_ERR,
+ "Couldn't reboot slave for MAC address: %s\n",
+ mac_str);
+ }
+ else
+ {
+ DEBUGMSGTL (("eocCNUControlTable",
+ "succesfully rebooted MAC address: %s\n",
+ mac_str));
+ }
+ }
+ }
+ rowreq_ctx->data.eocCNUControlAllReset =
+ EOCCNUCONTROLALLRESET_RESET;
+ break;
+ default:
+ snmp_log (LOG_ERR,
+ "couldn't reverse map value %ld for eocCNUControlAllReset\n",
+ eocCNUControlAllReset_val );
+ return SNMP_ERR_GENERR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUControlAllReset_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUControlAllReset_undo( eocCNUControlTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlAllReset_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUControlAllReset undo.
+ */
+ /*
+ * copy eocCNUControlAllReset data
+ * set rowreq_ctx->data.eocCNUControlAllReset from rowreq_ctx->undo->eocCNUControlAllReset
+ */
+ rowreq_ctx->data.eocCNUControlAllReset = rowreq_ctx->undo->eocCNUControlAllReset;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUControlAllReset_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlEntry.eocCNUControlAmountLimitation
+ * eocCNUControlAmountLimitation is subid 4 of eocCNUControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5.1.4
+ * Description:
+ÔÚÏßCNUÊýÁ¿ÏÞÖÆ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUControlAmountLimitation_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUControlTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUControlAmountLimitation_check_value( eocCNUControlTable_rowreq_ctx *rowreq_ctx, long eocCNUControlAmountLimitation_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlAmountLimitation_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUControlAmountLimitation value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUControlAmountLimitation value not illegal */
+} /* eocCNUControlAmountLimitation_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUControlTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUControlTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUControlAmountLimitation_undo_setup( eocCNUControlTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlAmountLimitation_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUControlAmountLimitation undo.
+ */
+ /*
+ * copy eocCNUControlAmountLimitation data
+ * set rowreq_ctx->undo->eocCNUControlAmountLimitation from rowreq_ctx->data.eocCNUControlAmountLimitation
+ */
+ rowreq_ctx->undo->eocCNUControlAmountLimitation = rowreq_ctx->data.eocCNUControlAmountLimitation;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUControlAmountLimitation_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUControlAmountLimitation_val
+ * A long containing the new value.
+ */
+int
+eocCNUControlAmountLimitation_set( eocCNUControlTable_rowreq_ctx *rowreq_ctx, long eocCNUControlAmountLimitation_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlAmountLimitation_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ return SNMP_ERR_NOTWRITABLE;
+} /* eocCNUControlAmountLimitation_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUControlAmountLimitation_undo( eocCNUControlTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlAmountLimitation_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUControlAmountLimitation undo.
+ */
+ /*
+ * copy eocCNUControlAmountLimitation data
+ * set rowreq_ctx->data.eocCNUControlAmountLimitation from rowreq_ctx->undo->eocCNUControlAmountLimitation
+ */
+ rowreq_ctx->data.eocCNUControlAmountLimitation = rowreq_ctx->undo->eocCNUControlAmountLimitation;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUControlAmountLimitation_undo */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_set.h
new file mode 100644
index 0000000000..dcc9b03f80
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_data_set.h
@@ -0,0 +1,65 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUCONTROLTABLE_DATA_SET_H
+#define EOCCNUCONTROLTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlTable is subid 5 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5, length: 12
+*/
+
+
+int eocCNUControlTable_undo_setup( eocCNUControlTable_rowreq_ctx *rowreq_ctx);
+int eocCNUControlTable_undo_cleanup( eocCNUControlTable_rowreq_ctx *rowreq_ctx);
+int eocCNUControlTable_undo( eocCNUControlTable_rowreq_ctx *rowreq_ctx);
+int eocCNUControlTable_commit( eocCNUControlTable_rowreq_ctx *rowreq_ctx);
+int eocCNUControlTable_undo_commit( eocCNUControlTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocCNUControlAllReset_check_value( eocCNUControlTable_rowreq_ctx *rowreq_ctx, u_long eocCNUControlAllReset_val);
+int eocCNUControlAllReset_undo_setup( eocCNUControlTable_rowreq_ctx *rowreq_ctx );
+int eocCNUControlAllReset_set( eocCNUControlTable_rowreq_ctx *rowreq_ctx, u_long eocCNUControlAllReset_val );
+int eocCNUControlAllReset_undo( eocCNUControlTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUControlCurrentAmount_check_value( eocCNUControlTable_rowreq_ctx *rowreq_ctx, long eocCNUControlCurrentAmount_val);
+int eocCNUControlCurrentAmount_undo_setup( eocCNUControlTable_rowreq_ctx *rowreq_ctx );
+int eocCNUControlCurrentAmount_set( eocCNUControlTable_rowreq_ctx *rowreq_ctx, long eocCNUControlCurrentAmount_val );
+int eocCNUControlCurrentAmount_undo( eocCNUControlTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUControlAmountLimitation_check_value( eocCNUControlTable_rowreq_ctx *rowreq_ctx, long eocCNUControlAmountLimitation_val);
+int eocCNUControlAmountLimitation_undo_setup( eocCNUControlTable_rowreq_ctx *rowreq_ctx );
+int eocCNUControlAmountLimitation_set( eocCNUControlTable_rowreq_ctx *rowreq_ctx, long eocCNUControlAmountLimitation_val );
+int eocCNUControlAmountLimitation_undo( eocCNUControlTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocCNUControlTable_check_dependencies(eocCNUControlTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUCONTROLTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_enums.h
new file mode 100644
index 0000000000..6d5fbfb72f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_enums.h
@@ -0,0 +1,55 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUCONTROLTABLE_ENUMS_H
+#define EOCCNUCONTROLTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocCNUControlTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUControlAllReset (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUCONTROLALLRESET_ENUMS
+#define EOCCNUCONTROLALLRESET_ENUMS
+
+#define EOCCNUCONTROLALLRESET_RESET 1
+
+#endif /* EOCCNUCONTROLALLRESET_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUCONTROLTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_interface.c
new file mode 100644
index 0000000000..69af28bc4d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_interface.c
@@ -0,0 +1,1518 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUControlTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocCNUControlTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUControlTable is subid 5 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.5, length: 12
+*/
+typedef struct eocCNUControlTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocCNUControlTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocCNUControlTable_interface_ctx;
+
+static eocCNUControlTable_interface_ctx eocCNUControlTable_if_ctx;
+
+static void _eocCNUControlTable_container_init(
+ eocCNUControlTable_interface_ctx *if_ctx);
+static void _eocCNUControlTable_container_shutdown(
+ eocCNUControlTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocCNUControlTable_container_get( void )
+{
+ return eocCNUControlTable_if_ctx.container;
+}
+
+eocCNUControlTable_registration *
+eocCNUControlTable_registration_get( void )
+{
+ return eocCNUControlTable_if_ctx.user_ctx;
+}
+
+eocCNUControlTable_registration *
+eocCNUControlTable_registration_set( eocCNUControlTable_registration * newreg )
+{
+ eocCNUControlTable_registration * old = eocCNUControlTable_if_ctx.user_ctx;
+ eocCNUControlTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocCNUControlTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocCNUControlTable_if_ctx.container);
+}
+
+u_int
+eocCNUControlTable_dirty_get( void )
+{
+ return eocCNUControlTable_if_ctx.table_dirty;
+}
+
+void
+eocCNUControlTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocCNUControlTable:eocCNUControlTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocCNUControlTable_if_ctx.table_dirty, status));
+ eocCNUControlTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocCNUControlTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocCNUControlTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocCNUControlTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocCNUControlTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocCNUControlTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocCNUControlTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocCNUControlTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocCNUControlTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocCNUControlTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocCNUControlTable_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUControlTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUControlTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int _eocCNUControlTable_undo_column( eocCNUControlTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+eocCNUControlTable_data *eocCNUControlTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table eocCNUControlTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocCNUControlTable_initialize_interface(eocCNUControlTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocCNUControlTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocCNUControlTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_eocCNUControlTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocCNUControlTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocCNUControlCBATCardIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCCNUCONTROLTABLE_MIN_COL;
+ tbl_info->max_column = EOCCNUCONTROLTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocCNUControlTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocCNUControlTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocCNUControlTable_container_init(&eocCNUControlTable_if_ctx);
+ if (NULL == eocCNUControlTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocCNUControlTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocCNUControlTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocCNUControlTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocCNUControlTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocCNUControlTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocCNUControlTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocCNUControlTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocCNUControlTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocCNUControlTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocCNUControlTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocCNUControlTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocCNUControlTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocCNUControlTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocCNUControlTable:init_eocCNUControlTable",
+ "Registering eocCNUControlTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocCNUControlTable", handler,
+ eocCNUControlTable_oid,
+ eocCNUControlTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocCNUControlTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocCNUControlTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocCNUControlTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocCNUControlTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocCNUControlTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocCNUControlTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocCNUControlTable
+ */
+void
+_eocCNUControlTable_shutdown_interface(eocCNUControlTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocCNUControlTable_container_shutdown(&eocCNUControlTable_if_ctx);
+}
+
+void
+eocCNUControlTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocCNUControlTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocCNUControlTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocCNUControlTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUControlTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUControlCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUControlCBATCardIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUControlCBATCardIndex, 0x00, sizeof(var_eocCNUControlCBATCardIndex) );
+ var_eocCNUControlCBATCardIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUControlCBATCardIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_index_to_oid","called\n"));
+
+ /* eocCNUControlCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCNUControlCBATCardIndex, (u_char*)&mib_idx->eocCNUControlCBATCardIndex,
+ sizeof(mib_idx->eocCNUControlCBATCardIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocCNUControlCBATCardIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUControlCBATCardIndex );
+
+ return err;
+} /* eocCNUControlTable_index_to_oid */
+
+/**
+ * extract eocCNUControlTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocCNUControlTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUControlTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUControlCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUControlCBATCardIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUControlCBATCardIndex, 0x00, sizeof(var_eocCNUControlCBATCardIndex) );
+ var_eocCNUControlCBATCardIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUControlCBATCardIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocCNUControlCBATCardIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocCNUControlCBATCardIndex = *((long *)var_eocCNUControlCBATCardIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUControlCBATCardIndex );
+
+ return err;
+} /* eocCNUControlTable_index_from_oid */
+
+
+/*
+ * eocCNUControlTable_allocate_data
+ *
+ * Purpose: create new eocCNUControlTable_data.
+ */
+eocCNUControlTable_data *
+eocCNUControlTable_allocate_data(void)
+{
+ eocCNUControlTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocCNUControlTable_data);
+
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocCNUControlTable_data.\n");
+ }
+
+ return rtn;
+} /* eocCNUControlTable_allocate_data */
+
+/*
+ * eocCNUControlTable_release_data
+ *
+ * Purpose: release eocCNUControlTable data.
+ */
+void
+eocCNUControlTable_release_data(eocCNUControlTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocCNUControlTable:eocCNUControlTable_release_data","called\n"));
+
+ free(data);
+} /* eocCNUControlTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocCNUControlTable_rowreq_ctx
+ */
+eocCNUControlTable_rowreq_ctx *
+eocCNUControlTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocCNUControlTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:eocCNUControlTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocCNUControlTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocCNUControlTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocCNUControlTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocCNUControlTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocCNUControlTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocCNUControlTable_rowreq_ctx
+ */
+void
+eocCNUControlTable_release_rowreq_ctx(eocCNUControlTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUControlTable:eocCNUControlTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocCNUControlTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if(rowreq_ctx->undo)
+ eocCNUControlTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocCNUControlTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUControlTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUControlTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocCNUControlTable_pre_request(eocCNUControlTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUControlTable","error %d from "
+ "eocCNUControlTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUControlTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUControlTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocCNUControlTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUControlTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocCNUControlTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocCNUControlTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocCNUControlTable_post_request(eocCNUControlTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUControlTable","error %d from "
+ "eocCNUControlTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUControlTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUControlTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocCNUControlTable_interface_ctx *if_ctx =
+ * (eocCNUControlTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocCNUControlTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocCNUControlTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUControlTable_get_column( eocCNUControlTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocCNUControlCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUCONTROLCBATCARDINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCNUControlCBATCardIndex;
+ break;
+
+ /* eocCNUControlAllReset(2)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONTROLALLRESET:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUControlAllReset_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUControlCurrentAmount(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUCONTROLCURRENTAMOUNT:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUControlCurrentAmount_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUControlAmountLimitation(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUCONTROLAMOUNTLIMITATION:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUControlAmountLimitation_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ default:
+ if (EOCCNUCONTROLTABLE_MIN_COL <= column && column <= EOCCNUCONTROLTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocCNUControlTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocCNUControlTable_get_column */
+
+int
+_mfd_eocCNUControlTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUControlTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUControlTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUControlTable_check_column( eocCNUControlTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_eocCNUControlTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocCNUControlCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUCONTROLCBATCARDINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocCNUControlAllReset(2)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONTROLALLRESET:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUControlAllReset ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCNUCONTROLALLRESET_RESET )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUControlTable:_eocCNUControlTable_check_column:eocCNUControlAllReset",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUControlAllReset_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUControlAllReset_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUControlCurrentAmount(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUCONTROLCURRENTAMOUNT:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUControlAmountLimitation(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUCONTROLAMOUNTLIMITATION:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUControlAmountLimitation ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUControlTable:_eocCNUControlTable_check_column:eocCNUControlAmountLimitation",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUControlAmountLimitation_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUControlAmountLimitation_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocCNUControlTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocCNUControlTable_check_column */
+
+int
+_mfd_eocCNUControlTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUControlTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUControlTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUControlTable_undo_setup_column( eocCNUControlTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_eocCNUControlTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUControlAllReset(2)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONTROLALLRESET:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUCONTROLALLRESET_FLAG;
+ rc = eocCNUControlAllReset_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUControlAmountLimitation(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUCONTROLAMOUNTLIMITATION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUCONTROLAMOUNTLIMITATION_FLAG;
+ rc = eocCNUControlAmountLimitation_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUControlTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUControlTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUControlTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocCNUControlTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocCNUControlTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUControlTable:mfd","error %d from "
+ "eocCNUControlTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUControlTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUControlTable:mfd","error %d from "
+ "eocCNUControlTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUControlTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUControlTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocCNUControlTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUControlTable:mfd","error %d from "
+ "eocCNUControlTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if(rowreq_ctx->undo) {
+ eocCNUControlTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUControlTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUControlTable_set_column( eocCNUControlTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_eocCNUControlTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUControlAllReset(2)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONTROLALLRESET:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUCONTROLALLRESET_FLAG;
+ rc = eocCNUControlAllReset_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCNUControlAmountLimitation(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUCONTROLAMOUNTLIMITATION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUCONTROLAMOUNTLIMITATION_FLAG;
+ rc = eocCNUControlAmountLimitation_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUControlTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocCNUControlTable_set_column */
+
+int
+_mfd_eocCNUControlTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUControlTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUControlTable:mfd","error %d from "
+ "eocCNUControlTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUControlTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocCNUControlTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUControlTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUControlTable:mfd","error %d from "
+ "eocCNUControlTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocCNUControlTable_dirty_set( eocCNUControlTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocCNUControlTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocCNUControlTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocCNUControlTable_dirty_set( d - 1 );
+ }
+
+ rc = eocCNUControlTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUControlTable:mfd","error %d from "
+ "eocCNUControlTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocCNUControlTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUControlTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUControlTable_undo_column( eocCNUControlTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_eocCNUControlTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUControlAllReset(2)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONTROLALLRESET:
+ rc = eocCNUControlAllReset_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUControlAmountLimitation(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUCONTROLAMOUNTLIMITATION:
+ rc = eocCNUControlAmountLimitation_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUControlTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUControlTable_undo_column */
+
+int
+_mfd_eocCNUControlTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUControlTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUControlTable:mfd","error %d from "
+ "eocCNUControlTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUControlTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUControlTable:mfd","error %d from "
+ "eocCNUControlTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUControlTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocCNUControlTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_mfd_eocCNUControlTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocCNUControlTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUControlTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocCNUControlTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocCNUControlTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocCNUControlTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocCNUControlTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocCNUControlTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocCNUControlTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocCNUControlTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocCNUControlTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocCNUControlTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocCNUControlTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocCNUControlTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocCNUControlTable_container_init(eocCNUControlTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUControlTable:_eocCNUControlTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocCNUControlTable_oid,
+ eocCNUControlTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocCNUControlTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocCNUControlTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocCNUControlTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocCNUControlTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocCNUControlTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocCNUControlTable_container_shutdown(eocCNUControlTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUControlTable:_eocCNUControlTable_container_shutdown","called\n"));
+
+ eocCNUControlTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocCNUControlTable_container_shutdown */
+
+
+eocCNUControlTable_rowreq_ctx *
+eocCNUControlTable_row_find_by_mib_index(eocCNUControlTable_mib_index *mib_idx)
+{
+ eocCNUControlTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocCNUControlTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocCNUControlTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_interface.h
new file mode 100644
index 0000000000..437aad2e64
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_interface.h
@@ -0,0 +1,87 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCCNUCONTROLTABLE_INTERFACE_H
+#define EOCCNUCONTROLTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocCNUControlTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocCNUControlTable_initialize_interface(eocCNUControlTable_registration * user_ctx,
+ u_long flags);
+void _eocCNUControlTable_shutdown_interface(eocCNUControlTable_registration * user_ctx);
+
+eocCNUControlTable_registration *
+eocCNUControlTable_registration_get( void );
+
+eocCNUControlTable_registration *
+eocCNUControlTable_registration_set( eocCNUControlTable_registration * newreg );
+
+netsnmp_container *eocCNUControlTable_container_get( void );
+int eocCNUControlTable_container_size( void );
+
+u_int eocCNUControlTable_dirty_get( void );
+void eocCNUControlTable_dirty_set( u_int status );
+
+ eocCNUControlTable_rowreq_ctx * eocCNUControlTable_allocate_rowreq_ctx(void *);
+void eocCNUControlTable_release_rowreq_ctx(eocCNUControlTable_rowreq_ctx *rowreq_ctx);
+
+int eocCNUControlTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUControlTable_mib_index *mib_idx);
+int eocCNUControlTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUControlTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocCNUControlTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUCONTROLTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_oids.h
new file mode 100644
index 0000000000..abb5291554
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUControlTable/eocCNUControlTable_oids.h
@@ -0,0 +1,44 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUCONTROLTABLE_OIDS_H
+#define EOCCNUCONTROLTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* column number definitions for table eocCNUControlTable */
+#define EOCCNUCONTROLTABLE_OID 1,3,6,1,4,1,17409,2,4,5,2,5
+
+
+#define COLUMN_EOCCNUCONTROLCBATCARDINDEX 1
+
+#define COLUMN_EOCCNUCONTROLALLRESET 2
+#define COLUMN_EOCCNUCONTROLALLRESET_FLAG (0x1 << 0)
+
+#define COLUMN_EOCCNUCONTROLCURRENTAMOUNT 3
+
+#define COLUMN_EOCCNUCONTROLAMOUNTLIMITATION 4
+#define COLUMN_EOCCNUCONTROLAMOUNTLIMITATION_FLAG (0x1 << 1)
+
+
+#define EOCCNUCONTROLTABLE_MIN_COL COLUMN_EOCCNUCONTROLCBATCARDINDEX
+#define EOCCNUCONTROLTABLE_MAX_COL COLUMN_EOCCNUCONTROLAMOUNTLIMITATION
+
+
+ /*
+ * TODO:405:r: Review EOCCNUCONTROLTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCCNUCONTROLTABLE_SETTABLE_COLS (COLUMN_EOCCNUCONTROLALLRESET_FLAG | COLUMN_EOCCNUCONTROLAMOUNTLIMITATION_FLAG)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUCONTROLTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable.h
new file mode 100644
index 0000000000..372963f85d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAction.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAction.m2d
new file mode 100644
index 0000000000..7df110dd15
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAction.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUAction
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAdminStatus.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAdminStatus.m2d
new file mode 100644
index 0000000000..addadd3b78
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAdminStatus.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUAdminStatus
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAuthorizationState.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAuthorizationState.m2d
new file mode 100644
index 0000000000..54e061220b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUAuthorizationState.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUAuthorizationState
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUCBATCardIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUCBATCardIndex.m2d
new file mode 100644
index 0000000000..f4f011fdd0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUCBATCardIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUCBATCardIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationResult.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationResult.m2d
new file mode 100644
index 0000000000..15f84ed569
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationResult.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUConfigurationResult
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationSaving.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationSaving.m2d
new file mode 100644
index 0000000000..8ec94c2463
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUConfigurationSaving.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUConfigurationSaving
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUDownstreamPIR.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUDownstreamPIR.m2d
new file mode 100644
index 0000000000..7f6d893a9b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUDownstreamPIR.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUDownstreamPIR
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUIndex.m2d
new file mode 100644
index 0000000000..035ff2939d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUMACAddress.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUMACAddress.m2d
new file mode 100644
index 0000000000..65dd4d7ad3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUMACAddress.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCNUMACAddress
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUModelNumber.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUModelNumber.m2d
new file mode 100644
index 0000000000..03bb129ca8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUModelNumber.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCNUModelNumber
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUOnlineStatus.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUOnlineStatus.m2d
new file mode 100644
index 0000000000..ba60bfb8ea
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUOnlineStatus.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUOnlineStatus
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyDownstreamRate.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyDownstreamRate.m2d
new file mode 100644
index 0000000000..58c9a747d7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyDownstreamRate.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUPhyDownstreamRate
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyUpstreamRate.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyUpstreamRate.m2d
new file mode 100644
index 0000000000..0d7b09358f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPhyUpstreamRate.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUPhyUpstreamRate
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPortAmount.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPortAmount.m2d
new file mode 100644
index 0000000000..873edf22ed
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUPortAmount.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUPortAmount
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFAttenuation.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFAttenuation.m2d
new file mode 100644
index 0000000000..4a03e0776c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFAttenuation.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNURFAttenuation
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFDownstreamQuality.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFDownstreamQuality.m2d
new file mode 100644
index 0000000000..dd8da8146a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFDownstreamQuality.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNURFDownstreamQuality
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFUpstreamQuality.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFUpstreamQuality.m2d
new file mode 100644
index 0000000000..b457f2bcc7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNURFUpstreamQuality.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNURFUpstreamQuality
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUReset.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUReset.m2d
new file mode 100644
index 0000000000..dc75d6f035
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUReset.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUReset
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUSoftwareVersion.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUSoftwareVersion.m2d
new file mode 100644
index 0000000000..2a99c76a4e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUSoftwareVersion.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCNUSoftwareVersion
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUUpstreamPIR.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUUpstreamPIR.m2d
new file mode 100644
index 0000000000..304b618562
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/node-eocCNUUpstreamPIR.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUUpstreamPIR
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/table-eocCNUTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/table-eocCNUTable.m2d
new file mode 100644
index 0000000000..1870f36393
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/defaults/table-eocCNUTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocCNUTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-FIRST.txt
new file mode 100644
index 0000000000..f440935e37
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocCNUTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocCNUTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocCNUTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocCNUTable_Makefile
+
+
+ File : eocCNUTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocCNUTable-README-eocCNUTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocCNUTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocCNUTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocCNUTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocCNUTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-eocCNUTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-eocCNUTable.txt
new file mode 100644
index 0000000000..6e9c74b2f2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable-README-eocCNUTable.txt
@@ -0,0 +1,1164 @@
+************************************************************************
+eocCNUTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocCNUTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocCNUTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocCNUTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocCNUTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocCNUTable_allocate_data
+ eocCNUTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocCNUTable_rowreq_ctx_init
+ eocCNUTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocCNUTable table
+ ------------------------------------------------------------
+ The index(es) for the eocCNUTable table are:
+
+ eocCNUCBATCardIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocCNUIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocCNUTable_data.
+
+
+************************************************************************
+eocCNUTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocCNUTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocCNUTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocCNUTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocCNUTable_indexes_set
+ WHERE: eocCNUTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocCNUTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocCNUTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUMACAddress_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUOnlineStatus_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUModelNumber_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUPortAmount_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUAuthorizationState_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUSoftwareVersion_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUReset_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNURFAttenuation_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNURFDownstreamQuality_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNURFUpstreamQuality_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUPhyDownstreamRate_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUPhyUpstreamRate_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUConfigurationSaving_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUConfigurationResult_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUAction_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUAdminStatus_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUDownstreamPIR_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUUpstreamPIR_get
+
+
+
+File: eocCNUTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocCNUTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table does not support ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocCNUTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUReset_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUReset_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUReset_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUReset_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUConfigurationSaving_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUConfigurationSaving_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUConfigurationSaving_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUConfigurationSaving_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUAction_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUAction_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUAction_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUAction_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUAdminStatus_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUAdminStatus_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUAdminStatus_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUAdminStatus_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUDownstreamPIR_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUDownstreamPIR_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUDownstreamPIR_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUDownstreamPIR_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUUpstreamPIR_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUUpstreamPIR_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUUpstreamPIR_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUUpstreamPIR_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocCNUTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocCNUTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocCNUTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocCNUTable table.
+
+To watch the flow of the eocCNUTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocCNUTable
+ verbose:eocCNUTable
+ internal:eocCNUTable
+
+e.g.
+ snmpd -f -Le -DeocCNUTable,verbose:eocCNUTable,internal:eocCNUTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUCBATCardIndex
+ * eocCNUCBATCardIndex is subid 1 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.1
+ * Description:
+CBAT°å¿¨µÄÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUIndex
+ * eocCNUIndex is subid 2 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.2
+ * Description:
+ CNUµÄÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUMACAddress
+ * eocCNUMACAddress is subid 3 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.3
+ * Description:
+CNUµÄMACµØÖ·¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 0
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUOnlineStatus
+ * eocCNUOnlineStatus is subid 4 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.4
+ * Description:
+CNUÔÚÏß״̬£º
+ 0- ²»ÔÚÏߣ»
+ 1- ÔÚÏß¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: offline(0), online(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUModelNumber
+ * eocCNUModelNumber is subid 5 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.5
+ * Description:
+ÔÚÏßCNUµÄÐͺš£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUPortAmount
+ * eocCNUPortAmount is subid 6 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.6
+ * Description:
+ÔÚÏßCNUÒÔÌ«Íø¶Ë¿ÚÊýÁ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAuthorizationState
+ * eocCNUAuthorizationState is subid 7 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.7
+ * Description:
+ÔÚÏßCNUµÄÊÚȨ״̬¡£
+ 0- ·ÇÊÚȨʹÓÃÉ豸£»
+ 1- ºÏ·¨ÊÚȨÉ豸¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: not_authorized(0), authorized(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUSoftwareVersion
+ * eocCNUSoftwareVersion is subid 8 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.8
+ * Description:
+ÔÚÏßCNUµÄ³ÌÐò°æ±¾ºÅ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUReset
+ * eocCNUReset is subid 9 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.9
+ * Description:
+¸´Î»ÔÚÏßCNU£¬Ð´Èë1ʱ£¬¸´Î»¸ÃÔÚÏßÖÕ¶ËÉ豸£»¶Á³ö´ËÖµÎÞÒâÒå¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: reset(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNURFAttenuation
+ * eocCNURFAttenuation is subid 10 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.10
+ * Description:
+ÉäƵÐŵÀÁ´Â·Ë¥¼õ£¬µ¥Î»ÎªdB¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 127;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNURFDownstreamQuality
+ * eocCNURFDownstreamQuality is subid 11 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.11
+ * Description:
+ÉäƵÏÂÐÐÐŵÀÁ´Â·ÖÊÁ¿¡£
+ ÒÔ°Ù·ÖÖƱíʾ£¬100±íʾ×î¼ÑÖÊÁ¿£¬0±íʾ×î²îÖÊÁ¿£»ÆÀ¼Û·½Ê½ÓÉÉ豸³§
+ É̾ö¶¨¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 100;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNURFUpstreamQuality
+ * eocCNURFUpstreamQuality is subid 12 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.12
+ * Description:
+ÉäƵÉÏÐÐÐŵÀÁ´Â·ÖÊÁ¿¡£
+ ÒÔ°Ù·ÖÖƱíʾ£¬100±íʾ×î¼ÑÖÊÁ¿£¬0±íʾ×î²îÖÊÁ¿£¬ÆÀ¼Û·½Ê½ÓÉÉ豸³§É̾ö¶¨¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 100;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUPhyDownstreamRate
+ * eocCNUPhyDownstreamRate is subid 13 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.13
+ * Description:
+CNUÏÂÐÐÎïÀí²ãËÙÂÊ¡£µ¥Î»kbps
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUPhyUpstreamRate
+ * eocCNUPhyUpstreamRate is subid 14 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.14
+ * Description:
+CNUÉÏÐÐÎïÀí²ãËÙÂÊ¡£µ¥Î»kbps
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUConfigurationSaving
+ * eocCNUConfigurationSaving is subid 15 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.15
+ * Description:
+±£´æCNUµÄµ±Ç°ÅäÖÃÖÁ·ÇÒ×ʧÐÔ´æ´¢Æ÷£¬ÉèÖÃΪ1¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: save(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUConfigurationResult
+ * eocCNUConfigurationResult is subid 16 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.16
+ * Description:
+±£´æEoC CNUÉ豸µ±Ç°ÅäÖõĽá¹û:
+ success(0)- ±£´æµ±Ç°Åä³É¹¦,
+ running(1)- ÕýÔÚ±£´æµ±Ç°ÅäÖÃ,
+ failed(2)- ±£´æµ±Ç°ÅäÖÃʧ°Ü¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 3/8. Values: success(0), running(1), failed(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAction
+ * eocCNUAction is subid 17 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.17
+ * Description:
+¶ÔCNU½øÐеIJÙ×÷¡£
+ delete(1)- ´ÓCNU±íÖÐɾ³ýCNU, Ö»ÄÜɾ³ý²»ÔÚÏßµÄCNU¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: delete(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAdminStatus
+ * eocCNUAdminStatus is subid 18 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.18
+ * Description:
+CNU¹ÜÀí״̬
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUDownstreamPIR
+ * eocCNUDownstreamPIR is subid 19 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.19
+ * Description:
+unit: kkbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUUpstreamPIR
+ * eocCNUUpstreamPIR is subid 20 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.20
+ * Description:
+ unit: kbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.c
new file mode 100644
index 0000000000..801b63cc7b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.c
@@ -0,0 +1,387 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocCNUTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocCNUTable_interface.h"
+
+oid eocCNUTable_oid[] = { EOCCNUTABLE_OID };
+int eocCNUTable_oid_size = OID_LENGTH(eocCNUTable_oid);
+
+ eocCNUTable_registration eocCNUTable_user_context;
+
+void initialize_table_eocCNUTable(void);
+void shutdown_table_eocCNUTable(void);
+
+int
+handle_eocCNUCurrentAmount (netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests);
+
+int
+handle_eocCNUAmountLimitation (netsnmp_mib_handler *handler,
+ netsnmp_handler_registration
+ *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests);
+
+/**
+ * Initializes the eocCNUTable module
+ */
+void
+init_eocCNUTable(void)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:init_eocCNUTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocCNUTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocCNUTable"))
+ initialize_table_eocCNUTable();
+
+} /* init_eocCNUTable */
+
+/**
+ * Shut-down the eocCNUTable module (agent is exiting)
+ */
+void
+shutdown_eocCNUTable(void)
+{
+ if (should_init("eocCNUTable"))
+ shutdown_table_eocCNUTable();
+
+}
+
+/**
+ * Initialize the table eocCNUTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocCNUTable (void)
+{
+ eocCNUTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL (("verbose:eocCNUTable:initialize_table_eocCNUTable",
+ "called\n"));
+
+ /*
+ * TODO:301:o: Perform eocCNUTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocCNUTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list ("eocCNUTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocCNUTable_initialize_interface (user_context, flags);
+
+
+
+ /*
+ * register scalar for eocCNUCurrentAmount
+ */
+ {
+ static oid eocCNUCurrentAmount_oid[] =
+ { EOCCNUCURRENTAMOUNT_OID };
+
+ netsnmp_register_scalar (netsnmp_create_handler_registration (
+ "eocCNUCurrentAmount",
+ handle_eocCNUCurrentAmount,
+ eocCNUCurrentAmount_oid,
+ OID_LENGTH (eocCNUCurrentAmount_oid),
+ HANDLER_CAN_RONLY));
+
+ }
+ /*
+ * register scalar for eocCNUAmountLimitation
+ */
+ {
+
+ static oid eocCNUAmountLimitation_oid[] =
+ { EOCCNUAMOUNTLIMITATION_OID };
+
+ netsnmp_register_scalar (netsnmp_create_handler_registration (
+ "eocCNUAmountLimitation",
+ handle_eocCNUAmountLimitation,
+ eocCNUAmountLimitation_oid,
+ OID_LENGTH
+ (eocCNUAmountLimitation_oid),
+ HANDLER_CAN_RWRITE));
+ }
+}
+
+/**
+ * Shutdown the table eocCNUTable
+ */
+void
+shutdown_table_eocCNUTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocCNUTable_shutdown_interface(&eocCNUTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocCNUTable_rowreq_ctx_init(eocCNUTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocCNUTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocCNUTable_rowreq_ctx_cleanup(eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocCNUTable rowreq cleanup.
+ */
+} /* eocCNUTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocCNUTable_pre_request(eocCNUTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocCNUTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocCNUTable_post_request(eocCNUTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocCNUTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocCNUTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocCNUTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUTable_post_request */
+
+
+int
+handle_eocCNUCurrentAmount (netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ netsnmp_container * online_container;
+ int curr_amount = 0;
+ int rc;
+
+ DEBUGMSGTL (("verbose:eocCNUTable:handle_eocCNUCurrentAmount",
+ "called\n"));
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /*
+ * a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one.
+ */
+
+ switch (reqinfo->mode)
+ {
+
+ case MODE_GET:
+ curr_amount = eocCNUTable_RegisteredAmount_get ();
+ if (curr_amount < 0)
+ {
+ snmp_log (LOG_ERR, "error getting Registered Amount\n");
+ /* registered amount is set to -1 to permit walk requests */
+ curr_amount = -1;
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &curr_amount,
+ sizeof (curr_amount));
+ break;
+
+ default:
+ /*
+ * we should never get here, so this is a really bad error
+ */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_modEoCOnlineCNUCurrentAmount\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+int
+handle_eocCNUAmountLimitation (netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ int amount_limit = LIBSPID_ONLINE_INFO_LINE_MAX_NB;
+
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /*
+ * a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one.
+ */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &amount_limit,
+ sizeof (amount_limit));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ break;
+
+ case MODE_SET_RESERVE2:
+ break;
+
+ case MODE_SET_FREE:
+ break;
+
+ case MODE_SET_ACTION:
+ /* SET request is not supported */
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_NOTWRITABLE);
+ break;
+
+ case MODE_SET_COMMIT:
+ break;
+
+ case MODE_SET_UNDO:
+ break;
+
+ default:
+ /*
+ * we should never get here, so this is a really bad error
+ */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in \
+ handle_modEoCOnlineCNUAmountLimitation\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.h
new file mode 100644
index 0000000000..403d593a82
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable.h
@@ -0,0 +1,291 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUTABLE_H
+#define EOCCNUTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+/* other required module components */
+ /* *INDENT-OFF* */
+ /* *INDENT-ON* */
+
+/* OID and column number definitions for eocCNUTable */
+#include "eocCNUTable_oids.h"
+
+/* enum definions */
+#include "eocCNUTable_enums.h"
+
+/* include common header */
+#include "EoCCommon.h"
+
+
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocCNUTable(void);
+void shutdown_eocCNUTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+/* *********************************************************************
+ * 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 eocCNUTable registration context.
+ */
+typedef netsnmp_data_list eocCNUTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocCNUTable data context structure.
+ * This structure is used to represent the data for eocCNUTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocCNUTable.
+ */
+typedef struct eocCNUTable_data_s {
+
+ /*
+ * eocCNUMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+ */
+ char eocCNUMACAddress[6];
+size_t eocCNUMACAddress_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCNUOnlineStatus(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long eocCNUOnlineStatus;
+
+ /*
+ * eocCNUModelNumber(5)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+ char eocCNUModelNumber[255];
+size_t eocCNUModelNumber_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCNUPortAmount(6)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPortAmount;
+
+ /*
+ * eocCNUAuthorizationState(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long eocCNUAuthorizationState;
+
+ /*
+ * eocCNUSoftwareVersion(8)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+ char eocCNUSoftwareVersion[128];
+
+ size_t eocCNUSoftwareVersion_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCNUReset(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUReset;
+
+ /*
+ * eocCNURFAttenuation(10)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ long eocCNURFAttenuation;
+
+ /*
+ * eocCNURFDownstreamQuality(11)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ long eocCNURFDownstreamQuality;
+
+ /*
+ * eocCNURFUpstreamQuality(12)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ long eocCNURFUpstreamQuality;
+
+ /*
+ * eocCNUPhyDownstreamRate(13)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPhyDownstreamRate;
+
+ /*
+ * eocCNUPhyUpstreamRate(14)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPhyUpstreamRate;
+
+ /*
+ * eocCNUConfigurationSaving(15)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUConfigurationSaving;
+
+ /*
+ * eocCNUConfigurationResult(16)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long eocCNUConfigurationResult;
+
+ /*
+ * eocCNUAction(17)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUAction;
+
+ /*
+ * eocCNUAdminStatus(18)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUAdminStatus;
+
+ /*
+ * eocCNUDownstreamPIR(19)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUDownstreamPIR;
+
+ /*
+ * eocCNUUpstreamPIR(20)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUUpstreamPIR;
+
+} eocCNUTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocCNUTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocCNUTable_data eocCNUTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocCNUTable mib index.
+ * This structure is used to represent the index for eocCNUTable.
+ */
+typedef struct eocCNUTable_mib_index_s {
+
+ /*
+ * eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUCBATCardIndex;
+
+ /*
+ * eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUIndex;
+
+
+} eocCNUTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocCNUTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocCNUTable_IDX_LEN 2
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocCNUTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocCNUTable_rowreq_ctx pointer.
+ */
+typedef struct eocCNUTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocCNUTable_IDX_LEN];
+
+ eocCNUTable_mib_index tbl_idx;
+
+ eocCNUTable_data data;
+ eocCNUTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocCNUTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocCNUTable_data_list;
+
+} eocCNUTable_rowreq_ctx;
+
+typedef struct eocCNUTable_ref_rowreq_ctx_s {
+ eocCNUTable_rowreq_ctx *rowreq_ctx;
+} eocCNUTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocCNUTable_pre_request(eocCNUTable_registration * user_context);
+ int eocCNUTable_post_request(eocCNUTable_registration * user_context,
+ int rc);
+
+ int eocCNUTable_rowreq_ctx_init(eocCNUTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocCNUTable_rowreq_ctx_cleanup(eocCNUTable_rowreq_ctx *rowreq_ctx);
+
+ int eocCNUTable_commit(eocCNUTable_rowreq_ctx * rowreq_ctx);
+
+ eocCNUTable_rowreq_ctx *
+ eocCNUTable_row_find_by_mib_index(eocCNUTable_mib_index *mib_idx);
+
+extern oid eocCNUTable_oid[];
+extern int eocCNUTable_oid_size;
+extern int saving_result[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+
+
+#include "eocCNUTable_interface.h"
+#include "eocCNUTable_data_access.h"
+#include "eocCNUTable_data_get.h"
+#include "eocCNUTable_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 /* EOCCNUTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.c
new file mode 100644
index 0000000000..ad0d9e3c39
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.c
@@ -0,0 +1,808 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUTable.h"
+
+
+#include "eocCNUTable_data_access.h"
+
+int saving_result[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+
+/**
+ * initialization for eocCNUTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocCNUTable_reg
+ * Pointer to eocCNUTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocCNUTable_init_data(eocCNUTable_registration * eocCNUTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocCNUTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocCNUTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocCNUTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocCNUTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocCNUTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCCNUTABLE_CACHE_TIMEOUT; /* seconds */
+ /* adjust cache flags */
+ cache->flags |= ( NETSNMP_CACHE_PRELOAD );
+
+ memset (saving_result, 0, sizeof (saving_result));
+} /* eocCNUTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocCNUTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocCNUTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocCNUTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocCNUTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocCNUTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocCNUTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocCNUTable_container_load(netsnmp_container *container)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx;
+ int rc = MFD_SUCCESS;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUCBATCardIndex = 0;
+ /*
+ * eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUIndex;
+ int tmp_index;
+
+ char mac_str[LIBSPID_MAC_STR_LEN];
+ int wl_count;
+ int i;
+
+ wl_count = 128;
+
+ libspid_eoc_wl_entry_t eoc_wl_entry[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_wl_get_list (eoc_wl_entry, &wl_count))
+ {
+ snmp_log (LOG_ERR,
+ "eocCNUTable_container_load:\
+ CNUlibspid_eoc_wl_get_list error\n");
+ return MFD_ERROR;
+ }
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_container_load",
+ "called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocCNUTable container.
+ * loop over your eocCNUTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+
+ /* check if the MAC address exists in the list
+ * if it exists, update corresponding data structure
+ * if it doesn't exist, create corresponding data structure
+ */
+ for (i = 0; i < wl_count; i++)
+ {
+ memset (mac_str, 0x0, LIBSPID_MAC_STR_LEN);
+ strcpy (mac_str,eoc_wl_entry[i].mac_addr);
+
+ eocCNUIndex = se_find_value_in_slist ("eoc_online_table", mac_str);
+
+ if (eocCNUIndex == SE_DNE)
+ {
+ if (1 != sscanf (eoc_wl_entry[i].tei, "%d", &tmp_index))
+ {
+ snmp_log (LOG_ERR, "error parsing tei value\n");
+ return MFD_ERROR;
+ }
+
+ eocCNUIndex = tmp_index - 2;
+ se_add_pair_to_slist ("eoc_online_table",
+ strdup (mac_str), eocCNUIndex);
+ DEBUGMSGTL (("eocCNUTable:eocCNUIndex",
+ "new eocCNUIndex %d for %s \n",
+ eocCNUIndex, mac_str));
+ }
+
+
+ if ((NULL == mac_str) || (0 == eocCNUIndex))
+ {
+ rc = MFD_END_OF_DATA;
+ break;
+ }
+
+ /*
+ * TODO:352:M: | |-> set indexes in new eocCNUTable rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocCNUTable_allocate_rowreq_ctx (NULL);
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if (MFD_SUCCESS !=
+ eocCNUTable_indexes_set (rowreq_ctx,
+ eocCNUCBATCardIndex,
+ eocCNUIndex))
+ {
+ snmp_log (LOG_ERR,
+ "error setting index while loading "
+ "eocCNUTable data.\n");
+ eocCNUTable_release_rowreq_ctx (rowreq_ctx);
+ continue;
+ }
+
+
+ CONTAINER_INSERT (container, rowreq_ctx);
+
+ }
+ return MFD_SUCCESS;
+} /* eocCNUTable_container_load */
+
+/* manually free row request context (as an item in online table container) */
+void
+_eoc_online_container_item_free (eocCNUTable_rowreq_ctx * rowreq_ctx,
+ void *context)
+{
+ DEBUGMSGTL (("internal:eocCNUTable_data_access:\
+ _online_container_item_free",
+ "called\n"));
+
+ if (NULL == rowreq_ctx)
+ return;
+
+ eocCNUTable_release_rowreq_ctx (rowreq_ctx);
+}
+
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocCNUTable_container_free (netsnmp_container *container)
+{
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_container_free",
+ "called\n"));
+
+ /*
+ * TODO:380:M: Free eocCNUTable container data.
+ */
+ if (NULL == container)
+ {
+ snmp_log (LOG_ERR,
+ "eocCNUTable_container_free: invalid container\n");
+ return;
+ }
+
+ /*
+ * TODO:380:M: Free eocCNUTable container data.
+ */
+
+ /* make sure row request contexts are really released */
+ CONTAINER_CLEAR (container,
+ (netsnmp_container_obj_func *)
+ _eoc_online_container_item_free,
+ NULL);
+
+}
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocCNUTable_row_prep (eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ char eocCNUMACAddress[6];
+ size_t eocCNUMACAddress_len = 6;
+ int eocCNUOnlineStatus = 0;
+ char eocCNUModelNumber[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCNUModelNumber_len = 0;
+ long eocCNUPortAmount = 0;
+ u_long eocCNUAuthorizationState = 0;
+ char eocCNUSoftwareVersion[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocCNUSoftwareVersion_len = 0;
+ long eocCNURFAttenuation = 0;
+ long eocCNURFDownstreamQuality = 0;
+ long eocCNURFUpstreamQuality = 0;
+ u_long eocCNUReset = 0;
+ long eocCNUPhyDownstreamRate = 0;
+ long eocCNUPhyUpstreamRate = 0;
+
+ /* values for columns that are not supported are set to 0 */
+ u_long eocCNUConfigurationSaving = 0;
+ u_long eocCNUConfigurationResult = 0;
+
+ /* declarations for calls to libspid */
+ const char delimiters[2] = LIBSPID_ONLINE_INFO_DELIMITER "\0";
+ unsigned int elt_number = LIBSPID_ELT_MAX_NB;
+ char *elt_buffer[LIBSPID_ELT_MAX_NB] = {0};
+ char buffer[LIBSPID_LINE_MAX_LEN] = {0};
+
+
+ char *mac_slist;
+ char mac_str[LIBSPID_KEY_MAX_LEN];
+ int rc;
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_row_prep",
+ "called\n"));
+
+ netsnmp_assert (NULL != rowreq_ctx);
+
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_row_prep",
+ "current index: %d\n",
+ rowreq_ctx->tbl_idx.eocCNUIndex));
+
+ mac_slist = se_find_label_in_slist ("eoc_online_table",
+ rowreq_ctx->tbl_idx.eocCNUIndex);
+
+
+ if (NULL == mac_slist)
+ {
+ snmp_log (LOG_ERR,
+ "eocCNUTable: error retrieving \
+ MAC address from slave index\n");
+ return MFD_ERROR;
+ }
+
+ /* copy MAC address string to use for calls to libspid */
+ strcpy (mac_str, mac_slist);
+
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_row_prep",
+ "current MAC string: |%s|\n", mac_str));
+
+ /*LIBSPID_ONLINE_INFO_PATH*/
+ rc = libspid_config_read_line (
+ LIBSPID_ONLINE_INFO_PATH,
+ delimiters, mac_str, &elt_number, elt_buffer, buffer,
+ LIBSPID_LINE_MAX_LEN);
+
+ if (rc != LIBSPID_SUCCESS && rc != LIBSPID_ERROR_NOT_FOUND)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_line error=%d\n",rc);
+ return MFD_ERROR;
+ }
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ /*
+ * TODO:352:r: | |-> populate eocCNUTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocCNUMACAddress
+ * eocCNUMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+ */
+
+ /* convert MAC address from string to char array */
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_str_to_bin (mac_slist, eocCNUMACAddress))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_str_to_bin error\n");
+ return MFD_ERROR;
+ }
+
+ rowreq_ctx->data.eocCNUMACAddress_len = 6;
+
+
+ /*
+ * make sure there is enough space for eocCNUMACAddress data
+ */
+
+
+ if ((NULL == rowreq_ctx->data.eocCNUMACAddress) ||
+ (rowreq_ctx->data.eocCNUMACAddress_len <
+ (eocCNUMACAddress_len * sizeof (eocCNUMACAddress[0]))))
+ {
+ snmp_log (LOG_ERR,
+ "eocCNUTable: eocCNUMACAddress: \
+ not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocCNUMACAddress_len =
+ eocCNUMACAddress_len * sizeof (eocCNUMACAddress[0]);
+
+ memcpy (rowreq_ctx->data.eocCNUMACAddress,
+ eocCNUMACAddress,
+ eocCNUMACAddress_len * sizeof (eocCNUMACAddress[0]));
+
+ rowreq_ctx->data.eocCNUOnlineStatus = (rc == LIBSPID_SUCCESS) ? 1 : 0;
+
+ /*
+ * setup/save data for eocCNUModelNumber
+ * eocCNUModelNumber(4)/DisplayString/
+ * ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ strncpy (eocCNUModelNumber, "NOT_ONLINE",
+ DEFAULT_SNMP_STRING_MAX_LENGTH - 1);
+ eocCNUModelNumber[DEFAULT_SNMP_STRING_MAX_LENGTH - 1] = '\0';
+ eocCNUModelNumber_len = strlen (eocCNUModelNumber) + 1;
+ rowreq_ctx->data.eocCNUModelNumber_len = eocCNUModelNumber_len;
+ }
+ else
+ {
+ strncpy (eocCNUModelNumber, elt_buffer[0],
+ DEFAULT_SNMP_STRING_MAX_LENGTH - 1);
+ eocCNUModelNumber[DEFAULT_SNMP_STRING_MAX_LENGTH - 1] = '\0';
+ eocCNUModelNumber_len = strlen (eocCNUModelNumber) + 1;
+ rowreq_ctx->data.eocCNUModelNumber_len = eocCNUModelNumber_len;
+ }
+ /*
+ * make sure there is enough space for eocCNUModelNumber data
+ */
+ if ((NULL == rowreq_ctx->data.eocCNUModelNumber) ||
+ (rowreq_ctx->data.eocCNUModelNumber_len <
+ (eocCNUModelNumber_len * sizeof (eocCNUModelNumber[0]))))
+ {
+ snmp_log (LOG_ERR,
+ "eocCNUTable: eocCNUModelNumber: \
+ not enough space for value\n");
+ return MFD_ERROR;
+ }
+
+ rowreq_ctx->data.eocCNUModelNumber_len =
+ eocCNUModelNumber_len * sizeof (eocCNUModelNumber[0]);
+
+ memcpy (rowreq_ctx->data.eocCNUModelNumber,
+ eocCNUModelNumber,
+ eocCNUModelNumber_len * sizeof (eocCNUModelNumber[0]));
+
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNUPortAmount = 0;
+ }
+ else
+ {
+
+ if (1 != sscanf (elt_buffer[1], "%d", &eocCNUPortAmount))
+ {
+ snmp_log (LOG_ERR, "error parsing port amount\n");
+ return MFD_ERROR;
+ }
+ }
+ /*
+ * setup/save data for eocCNUPortAmount
+ * eocCNUPortAmount(5)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNUPortAmount mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * Integer based value can usually just do a direct copy.
+ */
+ rowreq_ctx->data.eocCNUPortAmount = eocCNUPortAmount;
+
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNUAuthorizationState = EOCCNUAUTHORIZATIONSTATE_NOT_AUTHORIZED;
+ }
+ else
+ {
+
+ if (1 != sscanf (elt_buffer[2], "%d", &eocCNUAuthorizationState))
+ {
+ snmp_log (LOG_ERR, "error parsing authorization state\n");
+ return MFD_ERROR;
+ }
+ }
+
+ /*
+ * setup/save data for eocCNUAuthorizationState
+ * eocCNUAuthorizationState(6)/
+ * INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNUAuthorizationState mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * enums usually need mapping.
+ */
+
+ rowreq_ctx->data.eocCNUAuthorizationState = eocCNUAuthorizationState;
+
+ /*
+ * setup/save data for eocCNUSoftwareVersion
+ * eocCNUSoftwareVersion(7)/DisplayString/
+ * ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+ */
+
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ strncpy (eocCNUSoftwareVersion, "NOT_ONLINE",
+ DEFAULT_SNMP_STRING_MAX_LENGTH - 1);
+ eocCNUSoftwareVersion[DEFAULT_SNMP_STRING_MAX_LENGTH - 1] = '\0';
+ eocCNUSoftwareVersion_len = strlen (eocCNUSoftwareVersion) + 1;
+ rowreq_ctx->data.eocCNUSoftwareVersion_len =
+ eocCNUSoftwareVersion_len;
+ }
+ else
+ {
+ strncpy (eocCNUSoftwareVersion, elt_buffer[3],
+ DEFAULT_SNMP_STRING_MAX_LENGTH-1);
+ eocCNUSoftwareVersion[DEFAULT_SNMP_STRING_MAX_LENGTH-1] = '\0';
+ eocCNUSoftwareVersion_len = strlen (eocCNUSoftwareVersion) + 1;
+ rowreq_ctx->data.eocCNUSoftwareVersion_len =
+ eocCNUSoftwareVersion_len;
+ }
+ /*
+ * make sure there is enough space for eocCNUSoftwareVersion data
+ */
+ if ((NULL == rowreq_ctx->data.eocCNUSoftwareVersion) ||
+ (rowreq_ctx->data.eocCNUSoftwareVersion_len <
+ (eocCNUSoftwareVersion_len * sizeof (eocCNUSoftwareVersion[0]))))
+ {
+ snmp_log (LOG_ERR,
+ "eocCNUTable: eocCNUSoftwareVersion:"
+ "not enough space for value\n");
+ return MFD_ERROR;
+ }
+
+ rowreq_ctx->data.eocCNUSoftwareVersion_len =
+ eocCNUSoftwareVersion_len * sizeof (eocCNUSoftwareVersion[0]);
+ memcpy (rowreq_ctx->data.eocCNUSoftwareVersion,
+ eocCNUSoftwareVersion,
+ eocCNUSoftwareVersion_len * sizeof (eocCNUSoftwareVersion[0]));
+
+ /*
+ * setup/save data for eocCNUReset
+ * eocCNUReset(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNUReset mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * enums usually need mapping.
+ */
+
+ rowreq_ctx->data.eocCNUReset = eocCNUReset;
+
+ /*
+ * setup/save data for eocCNURFDownstreamAttenuation
+ * eocCNURFDownstreamAttenuation(9)/
+ * INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNURFAttenuation = 0;
+ }
+ else
+ {
+ if (1 != sscanf (elt_buffer[5], "%d", &eocCNURFAttenuation))
+ {
+ snmp_log (LOG_ERR, "error parsing downstream attenuation\n");
+ return MFD_ERROR;
+ }
+ }
+ /*
+ * TODO:246:r: |-> Define eocCNURFDownstreamAttenuation mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * Integer based value can usually just do a direct copy.
+ */
+ rowreq_ctx->data.eocCNURFAttenuation = eocCNURFAttenuation;
+
+ /*
+ * setup/save data for eocCNURFDownstreamQuality
+ * eocCNURFDownstreamQuality(11)/
+ * INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNURFDownstreamQuality mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * Integer based value can usually just do a direct copy.
+ */
+
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNURFDownstreamQuality = 0;
+ }
+ else
+ {
+
+ if (1 != sscanf (elt_buffer[6], "%d", &eocCNURFDownstreamQuality))
+ {
+ snmp_log (LOG_ERR, "error parsing downstream quality\n");
+ return MFD_ERROR;
+ }
+ }
+ rowreq_ctx->data.eocCNURFDownstreamQuality =
+ (eocCNURFDownstreamQuality > 100 ) ? 100 : eocCNURFDownstreamQuality;
+
+ /*
+ * setup/save data for eocCNURFUpstreamQuality
+ * eocCNURFUpstreamQuality(12)/
+ * INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNURFUpstreamQuality mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * Integer based value can usually just do a direct copy.
+ */
+
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNURFUpstreamQuality = 0;
+ }
+ else
+ {
+ if (1 != sscanf (elt_buffer[7], "%d", &eocCNURFUpstreamQuality))
+ {
+ snmp_log (LOG_ERR, "error parsing upstream quality\n");
+ return MFD_ERROR;
+ }
+ }
+
+ rowreq_ctx->data.eocCNURFUpstreamQuality =
+ (eocCNURFUpstreamQuality > 100 ) ? 100 : eocCNURFUpstreamQuality;
+
+ /*
+ * setup/save data for eocCNUPhyDownstreamRate
+ * eocCNUPhyDownstreamRate(13)/
+ * INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNUPhyDownstreamRate = 0;
+ }
+ else
+ {
+
+ if (1 != sscanf (elt_buffer[8], "%d", &eocCNUPhyDownstreamRate))
+ {
+ snmp_log (LOG_ERR, "error parsing downstream rate\n");
+ return MFD_ERROR;
+ }
+ }
+ rowreq_ctx->data.eocCNUPhyDownstreamRate = eocCNUPhyDownstreamRate;
+
+ /*
+ * setup/save data for eocCNUPhyUpstreamRate
+ * eocCNUPhyUpstreamRate(14)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ * TODO:246:r: |-> Define eocCNUPhyUpstreamRate mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * Integer based value can usually just do a direct copy.
+ */
+ if (rc == LIBSPID_ERROR_NOT_FOUND)
+ {
+ eocCNUPhyUpstreamRate = 0;
+ }
+ else
+ {
+ if (1 != sscanf (elt_buffer[9], "%d", &eocCNUPhyUpstreamRate))
+ {
+ snmp_log (LOG_ERR, "error parsing upstream rate\n");
+ return MFD_ERROR;
+ }
+ }
+ rowreq_ctx->data.eocCNUPhyUpstreamRate = eocCNUPhyUpstreamRate;
+
+ /*
+ * setup/save data for eocCNUConfigurationSaving
+ * eocCNUConfigurationSaving(15)/
+ * INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNUConfigurationSaving mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * enums usually need mapping.
+ */
+
+ rowreq_ctx->data.eocCNUConfigurationSaving = eocCNUConfigurationSaving;
+
+ /*
+ * setup/save data for eocCNUConfigurationResult
+ * eocCNUConfigurationResult(16)/
+ * INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocCNUConfigurationResult mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * enums usually need mapping.
+ */
+
+ rowreq_ctx->data.eocCNUConfigurationResult =
+ saving_result[rowreq_ctx->tbl_idx.eocCNUIndex];
+
+
+ return MFD_SUCCESS;
+}
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.h
new file mode 100644
index 0000000000..49bcbea56f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_access.h
@@ -0,0 +1,63 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUTABLE_DATA_ACCESS_H
+#define EOCCNUTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+
+
+ int eocCNUTable_init_data(eocCNUTable_registration * eocCNUTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocCNUTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCCNUTABLE_CACHE_TIMEOUT 60
+
+void eocCNUTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocCNUTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocCNUTable_container_load(netsnmp_container *container);
+void eocCNUTable_container_free(netsnmp_container *container);
+
+int eocCNUTable_cache_load(netsnmp_container *container);
+void eocCNUTable_cache_free(netsnmp_container *container);
+
+ int eocCNUTable_row_prep( eocCNUTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.c
new file mode 100644
index 0000000000..afff25dc5e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.c
@@ -0,0 +1,1195 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocCNUTable get routines.
+ * TODO:240:M: Implement eocCNUTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocCNUTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocCNUCBATCardIndex_val
+ * @param eocCNUIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocCNUTable_indexes_set_tbl_idx(eocCNUTable_mib_index *tbl_idx, long eocCNUCBATCardIndex_val, long eocCNUIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCNUCBATCardIndex = eocCNUCBATCardIndex_val;
+
+ /* eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCNUIndex = eocCNUIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocCNUTable_indexes_set(eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUCBATCardIndex_val, long eocCNUIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocCNUTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocCNUCBATCardIndex_val
+ , eocCNUIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocCNUTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUMACAddress
+ * eocCNUMACAddress is subid 3 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.3
+ * Description:
+CNUµÄMACµØÖ·¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 0
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/**
+ * Extract the current value of the eocCNUMACAddress data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUMACAddress_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCNUMACAddress_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCNUMACAddress.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCNUMACAddress_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCNUMACAddress_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCNUMACAddress_get( eocCNUTable_rowreq_ctx *rowreq_ctx, char **eocCNUMACAddress_val_ptr_ptr, size_t *eocCNUMACAddress_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCNUMACAddress_val_ptr_ptr) && (NULL != *eocCNUMACAddress_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCNUMACAddress_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUMACAddress_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUMACAddress data.
+ * copy (* eocCNUMACAddress_val_ptr_ptr ) data and (* eocCNUMACAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCNUMACAddress data
+ */
+ if ((NULL == (* eocCNUMACAddress_val_ptr_ptr )) ||
+ ((* eocCNUMACAddress_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCNUMACAddress_len* sizeof(rowreq_ctx->data.eocCNUMACAddress[0])))) {
+ /*
+ * allocate space for eocCNUMACAddress data
+ */
+ (* eocCNUMACAddress_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCNUMACAddress_len* sizeof(rowreq_ctx->data.eocCNUMACAddress[0]));
+ if(NULL == (* eocCNUMACAddress_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCNUMACAddress_val_ptr_len_ptr ) = rowreq_ctx->data.eocCNUMACAddress_len* sizeof(rowreq_ctx->data.eocCNUMACAddress[0]);
+ memcpy( (* eocCNUMACAddress_val_ptr_ptr ), rowreq_ctx->data.eocCNUMACAddress, rowreq_ctx->data.eocCNUMACAddress_len* sizeof(rowreq_ctx->data.eocCNUMACAddress[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCNUMACAddress_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUOnlineStatus
+ * eocCNUOnlineStatus is subid 4 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.4
+ * Description:
+CNUÔÚÏß״̬£º
+ 0- ²»ÔÚÏߣ»
+ 1- ÔÚÏß¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: offline(0), online(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUOnlineStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUOnlineStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUOnlineStatus_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUOnlineStatus_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUOnlineStatus_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUOnlineStatus_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUOnlineStatus data.
+ * copy (* eocCNUOnlineStatus_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUOnlineStatus_val_ptr ) = rowreq_ctx->data.eocCNUOnlineStatus;
+
+ return MFD_SUCCESS;
+} /* eocCNUOnlineStatus_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUModelNumber
+ * eocCNUModelNumber is subid 5 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.5
+ * Description:
+ÔÚÏßCNUµÄÐͺš£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the eocCNUModelNumber data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUModelNumber_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCNUModelNumber_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCNUModelNumber.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCNUModelNumber_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCNUModelNumber_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCNUModelNumber_get( eocCNUTable_rowreq_ctx *rowreq_ctx, char **eocCNUModelNumber_val_ptr_ptr, size_t *eocCNUModelNumber_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCNUModelNumber_val_ptr_ptr) && (NULL != *eocCNUModelNumber_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCNUModelNumber_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUModelNumber_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUModelNumber data.
+ * copy (* eocCNUModelNumber_val_ptr_ptr ) data and (* eocCNUModelNumber_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCNUModelNumber data
+ */
+ if ((NULL == (* eocCNUModelNumber_val_ptr_ptr )) ||
+ ((* eocCNUModelNumber_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCNUModelNumber_len* sizeof(rowreq_ctx->data.eocCNUModelNumber[0])))) {
+ /*
+ * allocate space for eocCNUModelNumber data
+ */
+ (* eocCNUModelNumber_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCNUModelNumber_len* sizeof(rowreq_ctx->data.eocCNUModelNumber[0]));
+ if(NULL == (* eocCNUModelNumber_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCNUModelNumber_val_ptr_len_ptr ) = rowreq_ctx->data.eocCNUModelNumber_len* sizeof(rowreq_ctx->data.eocCNUModelNumber[0]);
+ memcpy( (* eocCNUModelNumber_val_ptr_ptr ), rowreq_ctx->data.eocCNUModelNumber, rowreq_ctx->data.eocCNUModelNumber_len* sizeof(rowreq_ctx->data.eocCNUModelNumber[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCNUModelNumber_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUPortAmount
+ * eocCNUPortAmount is subid 6 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.6
+ * Description:
+ÔÚÏßCNUÒÔÌ«Íø¶Ë¿ÚÊýÁ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUPortAmount data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUPortAmount_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUPortAmount_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUPortAmount_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUPortAmount_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUPortAmount_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUPortAmount data.
+ * copy (* eocCNUPortAmount_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUPortAmount_val_ptr ) = rowreq_ctx->data.eocCNUPortAmount;
+
+ return MFD_SUCCESS;
+} /* eocCNUPortAmount_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAuthorizationState
+ * eocCNUAuthorizationState is subid 7 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.7
+ * Description:
+ÔÚÏßCNUµÄÊÚȨ״̬¡£
+ 0- ·ÇÊÚȨʹÓÃÉ豸£»
+ 1- ºÏ·¨ÊÚȨÉ豸¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: not_authorized(0), authorized(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUAuthorizationState data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUAuthorizationState_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUAuthorizationState_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUAuthorizationState_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUAuthorizationState_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAuthorizationState_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUAuthorizationState data.
+ * copy (* eocCNUAuthorizationState_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUAuthorizationState_val_ptr ) = rowreq_ctx->data.eocCNUAuthorizationState;
+
+ return MFD_SUCCESS;
+} /* eocCNUAuthorizationState_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUSoftwareVersion
+ * eocCNUSoftwareVersion is subid 8 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.8
+ * Description:
+ÔÚÏßCNUµÄ³ÌÐò°æ±¾ºÅ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the eocCNUSoftwareVersion data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUSoftwareVersion_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCNUSoftwareVersion_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCNUSoftwareVersion.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCNUSoftwareVersion_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCNUSoftwareVersion_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCNUSoftwareVersion_get( eocCNUTable_rowreq_ctx *rowreq_ctx, char **eocCNUSoftwareVersion_val_ptr_ptr, size_t *eocCNUSoftwareVersion_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCNUSoftwareVersion_val_ptr_ptr) && (NULL != *eocCNUSoftwareVersion_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCNUSoftwareVersion_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUSoftwareVersion_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUSoftwareVersion data.
+ * copy (* eocCNUSoftwareVersion_val_ptr_ptr ) data and (* eocCNUSoftwareVersion_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCNUSoftwareVersion data
+ */
+ if ((NULL == (* eocCNUSoftwareVersion_val_ptr_ptr )) ||
+ ((* eocCNUSoftwareVersion_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocCNUSoftwareVersion_len* sizeof(rowreq_ctx->data.eocCNUSoftwareVersion[0])))) {
+ /*
+ * allocate space for eocCNUSoftwareVersion data
+ */
+ (* eocCNUSoftwareVersion_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocCNUSoftwareVersion_len* sizeof(rowreq_ctx->data.eocCNUSoftwareVersion[0]));
+ if(NULL == (* eocCNUSoftwareVersion_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCNUSoftwareVersion_val_ptr_len_ptr ) = rowreq_ctx->data.eocCNUSoftwareVersion_len* sizeof(rowreq_ctx->data.eocCNUSoftwareVersion[0]);
+ memcpy( (* eocCNUSoftwareVersion_val_ptr_ptr ), rowreq_ctx->data.eocCNUSoftwareVersion, rowreq_ctx->data.eocCNUSoftwareVersion_len* sizeof(rowreq_ctx->data.eocCNUSoftwareVersion[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCNUSoftwareVersion_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUReset
+ * eocCNUReset is subid 9 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.9
+ * Description:
+¸´Î»ÔÚÏßCNU£¬Ð´Èë1ʱ£¬¸´Î»¸ÃÔÚÏßÖÕ¶ËÉ豸£»¶Á³ö´ËÖµÎÞÒâÒå¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: reset(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUReset data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUReset_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUReset_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUReset_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUReset_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUReset_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUReset data.
+ * copy (* eocCNUReset_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUReset_val_ptr ) = rowreq_ctx->data.eocCNUReset;
+
+ return MFD_SUCCESS;
+} /* eocCNUReset_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNURFAttenuation
+ * eocCNURFAttenuation is subid 10 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.10
+ * Description:
+ÉäƵÐŵÀÁ´Â·Ë¥¼õ£¬µ¥Î»ÎªdB¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 127;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNURFAttenuation data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNURFAttenuation_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNURFAttenuation_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNURFAttenuation_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNURFAttenuation_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNURFAttenuation_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNURFAttenuation data.
+ * copy (* eocCNURFAttenuation_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNURFAttenuation_val_ptr ) = rowreq_ctx->data.eocCNURFAttenuation;
+
+ return MFD_SUCCESS;
+} /* eocCNURFAttenuation_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNURFDownstreamQuality
+ * eocCNURFDownstreamQuality is subid 11 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.11
+ * Description:
+ÉäƵÏÂÐÐÐŵÀÁ´Â·ÖÊÁ¿¡£
+ ÒÔ°Ù·ÖÖƱíʾ£¬100±íʾ×î¼ÑÖÊÁ¿£¬0±íʾ×î²îÖÊÁ¿£»ÆÀ¼Û·½Ê½ÓÉÉ豸³§
+ É̾ö¶¨¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 100;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNURFDownstreamQuality data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNURFDownstreamQuality_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNURFDownstreamQuality_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNURFDownstreamQuality_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNURFDownstreamQuality_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNURFDownstreamQuality_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNURFDownstreamQuality data.
+ * copy (* eocCNURFDownstreamQuality_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNURFDownstreamQuality_val_ptr ) = rowreq_ctx->data.eocCNURFDownstreamQuality;
+
+ return MFD_SUCCESS;
+} /* eocCNURFDownstreamQuality_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNURFUpstreamQuality
+ * eocCNURFUpstreamQuality is subid 12 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.12
+ * Description:
+ÉäƵÉÏÐÐÐŵÀÁ´Â·ÖÊÁ¿¡£
+ ÒÔ°Ù·ÖÖƱíʾ£¬100±íʾ×î¼ÑÖÊÁ¿£¬0±íʾ×î²îÖÊÁ¿£¬ÆÀ¼Û·½Ê½ÓÉÉ豸³§É̾ö¶¨¡£
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 100;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNURFUpstreamQuality data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNURFUpstreamQuality_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNURFUpstreamQuality_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNURFUpstreamQuality_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNURFUpstreamQuality_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNURFUpstreamQuality_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNURFUpstreamQuality data.
+ * copy (* eocCNURFUpstreamQuality_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNURFUpstreamQuality_val_ptr ) = rowreq_ctx->data.eocCNURFUpstreamQuality;
+
+ return MFD_SUCCESS;
+} /* eocCNURFUpstreamQuality_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUPhyDownstreamRate
+ * eocCNUPhyDownstreamRate is subid 13 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.13
+ * Description:
+CNUÏÂÐÐÎïÀí²ãËÙÂÊ¡£µ¥Î»kbps
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUPhyDownstreamRate data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUPhyDownstreamRate_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUPhyDownstreamRate_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUPhyDownstreamRate_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUPhyDownstreamRate_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUPhyDownstreamRate_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUPhyDownstreamRate data.
+ * copy (* eocCNUPhyDownstreamRate_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUPhyDownstreamRate_val_ptr ) = rowreq_ctx->data.eocCNUPhyDownstreamRate;
+
+ return MFD_SUCCESS;
+} /* eocCNUPhyDownstreamRate_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUPhyUpstreamRate
+ * eocCNUPhyUpstreamRate is subid 14 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.14
+ * Description:
+CNUÉÏÐÐÎïÀí²ãËÙÂÊ¡£µ¥Î»kbps
+ ´Ë¶ÔÏóÒªÇóÔÚÊôÐÔMIBÖеǼÇÒ»¸öÌõÄ¿¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUPhyUpstreamRate data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUPhyUpstreamRate_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUPhyUpstreamRate_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUPhyUpstreamRate_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUPhyUpstreamRate_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUPhyUpstreamRate_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUPhyUpstreamRate data.
+ * copy (* eocCNUPhyUpstreamRate_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUPhyUpstreamRate_val_ptr ) = rowreq_ctx->data.eocCNUPhyUpstreamRate;
+
+ return MFD_SUCCESS;
+} /* eocCNUPhyUpstreamRate_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUConfigurationSaving
+ * eocCNUConfigurationSaving is subid 15 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.15
+ * Description:
+±£´æCNUµÄµ±Ç°ÅäÖÃÖÁ·ÇÒ×ʧÐÔ´æ´¢Æ÷£¬ÉèÖÃΪ1¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: save(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUConfigurationSaving data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUConfigurationSaving_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUConfigurationSaving_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUConfigurationSaving_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUConfigurationSaving_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUConfigurationSaving_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUConfigurationSaving data.
+ * copy (* eocCNUConfigurationSaving_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUConfigurationSaving_val_ptr ) = rowreq_ctx->data.eocCNUConfigurationSaving;
+
+ return MFD_SUCCESS;
+} /* eocCNUConfigurationSaving_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUConfigurationResult
+ * eocCNUConfigurationResult is subid 16 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.16
+ * Description:
+±£´æEoC CNUÉ豸µ±Ç°ÅäÖõĽá¹û:
+ success(0)- ±£´æµ±Ç°Åä³É¹¦,
+ running(1)- ÕýÔÚ±£´æµ±Ç°ÅäÖÃ,
+ failed(2)- ±£´æµ±Ç°ÅäÖÃʧ°Ü¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 3/8. Values: success(0), running(1), failed(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUConfigurationResult data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUConfigurationResult_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUConfigurationResult_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUConfigurationResult_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUConfigurationResult_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUConfigurationResult_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUConfigurationResult data.
+ * copy (* eocCNUConfigurationResult_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUConfigurationResult_val_ptr ) = rowreq_ctx->data.eocCNUConfigurationResult;
+
+ return MFD_SUCCESS;
+} /* eocCNUConfigurationResult_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAction
+ * eocCNUAction is subid 17 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.17
+ * Description:
+¶ÔCNU½øÐеIJÙ×÷¡£
+ delete(1)- ´ÓCNU±íÖÐɾ³ýCNU, Ö»ÄÜɾ³ý²»ÔÚÏßµÄCNU¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: delete(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUAction data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUAction_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUAction_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUAction_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUAction_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAction_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUAction data.
+ * copy (* eocCNUAction_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUAction_val_ptr ) = rowreq_ctx->data.eocCNUAction;
+
+ return MFD_SUCCESS;
+} /* eocCNUAction_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAdminStatus
+ * eocCNUAdminStatus is subid 18 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.18
+ * Description:
+CNU¹ÜÀí״̬
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUAdminStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUAdminStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUAdminStatus_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUAdminStatus_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUAdminStatus_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAdminStatus_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUAdminStatus data.
+ * copy (* eocCNUAdminStatus_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUAdminStatus_val_ptr ) = rowreq_ctx->data.eocCNUAdminStatus;
+
+ return MFD_SUCCESS;
+} /* eocCNUAdminStatus_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUDownstreamPIR
+ * eocCNUDownstreamPIR is subid 19 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.19
+ * Description:
+unit: kkbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUDownstreamPIR data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUDownstreamPIR_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUDownstreamPIR_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUDownstreamPIR_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUDownstreamPIR_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUDownstreamPIR_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUDownstreamPIR data.
+ * copy (* eocCNUDownstreamPIR_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUDownstreamPIR_val_ptr ) = rowreq_ctx->data.eocCNUDownstreamPIR;
+
+ return MFD_SUCCESS;
+} /* eocCNUDownstreamPIR_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUUpstreamPIR
+ * eocCNUUpstreamPIR is subid 20 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.20
+ * Description:
+ unit: kbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUUpstreamPIR data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUUpstreamPIR_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUUpstreamPIR_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUUpstreamPIR_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUUpstreamPIR_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUUpstreamPIR_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUUpstreamPIR data.
+ * copy (* eocCNUUpstreamPIR_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUUpstreamPIR_val_ptr ) = rowreq_ctx->data.eocCNUUpstreamPIR;
+
+ return MFD_SUCCESS;
+} /* eocCNUUpstreamPIR_get */
+
+
+int
+eocCNUTable_RegisteredAmount_get (void)
+{
+ netsnmp_container * online_container;
+ int rc;
+ int reg_amount = 0;
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_RegisteredAmount_get",
+ "called!\n"));
+
+ online_container =
+ netsnmp_container_find ("eocCNUTable:table_container");
+ if (NULL == online_container)
+ {
+ snmp_log (LOG_ERR, "online table temp container not found\n");
+ return SNMP_ERR_GENERR;
+ }
+
+
+ /* free container before loading */
+ eocCNUTable_container_free (online_container);
+
+
+ /* load fresh container contents */
+ rc = eocCNUTable_container_load (online_container);
+ if (MFD_ERROR == rc)
+ {
+ snmp_log (LOG_ERR, "online table container load error\n");
+ return SNMP_ERR_GENERR;
+ }
+
+ /* get current container size */
+ reg_amount = CONTAINER_SIZE (online_container);
+
+ return reg_amount;
+}
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.h
new file mode 100644
index 0000000000..8d28bbafe0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_get.h
@@ -0,0 +1,76 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocCNUTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCCNUTABLE_DATA_GET_H
+#define EOCCNUTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+ /*
+ * indexes
+ */
+
+ int eocCNUMACAddress_get( eocCNUTable_rowreq_ctx *rowreq_ctx, char **eocCNUMACAddress_val_ptr_ptr, size_t *eocCNUMACAddress_val_ptr_len_ptr );
+ int eocCNUOnlineStatus_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUOnlineStatus_val_ptr );
+ int eocCNUModelNumber_get( eocCNUTable_rowreq_ctx *rowreq_ctx, char **eocCNUModelNumber_val_ptr_ptr, size_t *eocCNUModelNumber_val_ptr_len_ptr );
+ int eocCNUPortAmount_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUPortAmount_val_ptr );
+ int eocCNUAuthorizationState_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUAuthorizationState_val_ptr );
+ int eocCNUSoftwareVersion_get( eocCNUTable_rowreq_ctx *rowreq_ctx, char **eocCNUSoftwareVersion_val_ptr_ptr, size_t *eocCNUSoftwareVersion_val_ptr_len_ptr );
+ int eocCNUReset_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUReset_val_ptr );
+ int eocCNURFAttenuation_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNURFAttenuation_val_ptr );
+ int eocCNURFDownstreamQuality_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNURFDownstreamQuality_val_ptr );
+ int eocCNURFUpstreamQuality_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNURFUpstreamQuality_val_ptr );
+ int eocCNUPhyDownstreamRate_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUPhyDownstreamRate_val_ptr );
+ int eocCNUPhyUpstreamRate_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUPhyUpstreamRate_val_ptr );
+ int eocCNUConfigurationSaving_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUConfigurationSaving_val_ptr );
+ int eocCNUConfigurationResult_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUConfigurationResult_val_ptr );
+ int eocCNUAction_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUAction_val_ptr );
+ int eocCNUAdminStatus_get( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUAdminStatus_val_ptr );
+ int eocCNUDownstreamPIR_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUDownstreamPIR_val_ptr );
+ int eocCNUUpstreamPIR_get( eocCNUTable_rowreq_ctx *rowreq_ctx, long * eocCNUUpstreamPIR_val_ptr );
+
+
+int eocCNUTable_indexes_set_tbl_idx(eocCNUTable_mib_index *tbl_idx, long eocCNUCBATCardIndex_val, long eocCNUIndex_val);
+int eocCNUTable_indexes_set(eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUCBATCardIndex_val, long eocCNUIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.c
new file mode 100644
index 0000000000..e335394f64
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.c
@@ -0,0 +1,1508 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocCNUTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocCNUTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUTable_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocCNUTable undo.
+ * set up eocCNUTable undo information, in preparation for a set.
+ * Undo storage is in (* eocCNUUpstreamPIR_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUTable_undo( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocCNUTable undo.
+ * eocCNUTable undo information, in response to a failed set.
+ * Undo storage is in (* eocCNUUpstreamPIR_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUTable_undo_cleanup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocCNUTable undo.
+ * Undo storage is in (* eocCNUUpstreamPIR_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUTable_commit( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUTable_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx );
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocCNUTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_EOCCNURESET_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNURESET_FLAG; /* clear eocCNUReset */
+ char cmd_str[32], mac_str[24];
+ /*
+ * TODO:482:o: |-> commit column eocCNUReset.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCNUReset
+ */
+
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_bin_to_str (rowreq_ctx->data.eocCNUMACAddress,
+ mac_str))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+ sprintf (cmd_str, "mme reboot %s", mac_str);
+
+ rc = system (cmd_str);
+ if (rc != 0)
+ {
+ snmp_log (LOG_ERR, "reboot %s failed\n",
+ rowreq_ctx->data.eocCNUMACAddress);
+ return MFD_ERROR;
+ }
+
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNURESET_FLAG;
+ rc = 0;
+ }
+
+ if (save_flags & COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG)
+ {
+ /* clear eocCNUConfigurationSaving */
+ save_flags &= ~COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUConfigurationSaving.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCNUConfigurationSaving
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG;
+
+ }
+
+ if (save_flags & COLUMN_EOCCNUACTION_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNUACTION_FLAG; /* clear eocCNUAction */
+ /*
+ * TODO:482:o: |-> commit column eocCNUAction.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCNUAction
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUACTION_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUADMINSTATUS_FLAG)
+ {
+ /* clear eocCNUAdminStatus */
+ save_flags &= ~COLUMN_EOCCNUADMINSTATUS_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUAdminStatus.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCNUAdminStatus
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUADMINSTATUS_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUDOWNSTREAMPIR_FLAG)
+ {
+ /* clear eocCNUDownstreamPIR */
+ save_flags &= ~COLUMN_EOCCNUDOWNSTREAMPIR_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUDownstreamPIR.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCNUDownstreamPIR
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUDOWNSTREAMPIR_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUUPSTREAMPIR_FLAG)
+ {
+ /* clear eocCNUUpstreamPIR */
+ save_flags &= ~COLUMN_EOCCNUUPSTREAMPIR_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUUpstreamPIR.
+ */
+
+ /*
+ * set flag, in case we need to undo eocCNUUpstreamPIR
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUUPSTREAMPIR_FLAG;
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc)
+ {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags)
+ {
+ snmp_log (LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocCNUTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUTable_undo_commit( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_undo_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:485:M: |-> Undo eocCNUTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocCNUTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocCNUTable node value checks.
+ * TODO:450:M: Implement eocCNUTable undo functions.
+ * TODO:460:M: Implement eocCNUTable set functions.
+ * TODO:480:M: Implement eocCNUTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUReset
+ * eocCNUReset is subid 9 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.9
+ * Description:
+¸´Î»ÔÚÏßCNU£¬Ð´Èë1ʱ£¬¸´Î»¸ÃÔÚÏßÖÕ¶ËÉ豸£»¶Á³ö´ËÖµÎÞÒâÒå¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: reset(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUReset_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of reset(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUReset_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUReset_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUReset_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUReset value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUReset value not illegal */
+} /* eocCNUReset_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUReset_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUReset_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUReset undo.
+ */
+ /*
+ * copy eocCNUReset data
+ * set rowreq_ctx->undo->eocCNUReset from rowreq_ctx->data.eocCNUReset
+ */
+ rowreq_ctx->undo->eocCNUReset = rowreq_ctx->data.eocCNUReset;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUReset_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUReset_val
+ * A long containing the new value.
+ */
+int
+eocCNUReset_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUReset_val )
+{
+ char mac_str[LIBSPID_MAC_STR_LEN];
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUReset_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /* check if current MAC address is valid */
+ netsnmp_assert (NULL != rowreq_ctx->data.eocCNUMACAddress);
+
+ /*
+ * TODO:245:o: |-> Implement eocCNUReset reverse mapping.
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them here.
+ */
+ switch (eocCNUReset_val)
+ {
+ case EOCCNURESET_RESET:
+ /* if reset value is given, call libspid function for rebooting
+ * slave with MAC address corresponding to current row */
+ /* if reboot succeeds, update current table node */
+
+ /* convert MAC address from char array to string */
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_bin_to_str (rowreq_ctx->data.eocCNUMACAddress,
+ mac_str))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ /* check if slave is authorized before attempting reset */
+ if (rowreq_ctx->data.eocCNUAuthorizationState ==
+ EOCCNUAUTHORIZATIONSTATE_NOT_AUTHORIZED)
+ return SNMP_ERR_AUTHORIZATIONERROR;
+
+ if (LIBSPID_SUCCESS == libspid_eoc_reboot (mac_str))
+ rowreq_ctx->data.eocCNUReset = EOCCNURESET_RESET;
+ else
+ {
+ snmp_log (LOG_ERR,
+ "Couldn't reboot slave for MAC address: %s \n",
+ mac_str);
+ return MFD_ERROR;
+ }
+ break;
+
+ default:
+ snmp_log (LOG_ERR,
+ "couldn't reverse map value %ld for eocCNUReset\n",
+ eocCNUReset_val);
+ return SNMP_ERR_GENERR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUReset_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUReset_undo( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUReset_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUReset undo.
+ */
+ /*
+ * copy eocCNUReset data
+ * set rowreq_ctx->data.eocCNUReset from rowreq_ctx->undo->eocCNUReset
+ */
+ rowreq_ctx->data.eocCNUReset = rowreq_ctx->undo->eocCNUReset;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUReset_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUConfigurationSaving
+ * eocCNUConfigurationSaving is subid 15 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.15
+ * Description:
+±£´æCNUµÄµ±Ç°ÅäÖÃÖÁ·ÇÒ×ʧÐÔ´æ´¢Æ÷£¬ÉèÖÃΪ1¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: save(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUConfigurationSaving_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of save(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUConfigurationSaving_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUConfigurationSaving_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUConfigurationSaving_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUConfigurationSaving value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUConfigurationSaving value not illegal */
+} /* eocCNUConfigurationSaving_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUConfigurationSaving_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUConfigurationSaving_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUConfigurationSaving undo.
+ */
+ /*
+ * copy eocCNUConfigurationSaving data
+ * set rowreq_ctx->undo->eocCNUConfigurationSaving from rowreq_ctx->data.eocCNUConfigurationSaving
+ */
+ rowreq_ctx->undo->eocCNUConfigurationSaving = rowreq_ctx->data.eocCNUConfigurationSaving;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUConfigurationSaving_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUConfigurationSaving_val
+ * A long containing the new value.
+ */
+int
+eocCNUConfigurationSaving_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUConfigurationSaving_val )
+{
+ char mac_str[LIBSPID_MAC_STR_LEN];
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUConfigurationSaving_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+ switch (eocCNUConfigurationSaving_val)
+ {
+ case EOCCNUCONFIGURATIONSAVING_SAVE:
+ /* if saving value is given, call libspid function for rebooting
+ * slave with MAC address corresponding to current row */
+
+ /* convert MAC address from char array to string */
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_bin_to_str (rowreq_ctx->data.eocCNUMACAddress,
+ mac_str))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ /* check if slave is authorized before attempting reset */
+ if (rowreq_ctx->data.eocCNUAuthorizationState ==
+ EOCCNUAUTHORIZATIONSTATE_NOT_AUTHORIZED)
+ return SNMP_ERR_AUTHORIZATIONERROR;
+
+ if (LIBSPID_SUCCESS == libspid_eoc_reboot (mac_str))
+ {
+ rowreq_ctx->data.eocCNUConfigurationSaving =
+ EOCCNUCONFIGURATIONSAVING_SAVE;
+ saving_result[rowreq_ctx->tbl_idx.eocCNUIndex] =
+ EOCCNUCONFIGURATIONRESULT_SUCCESS;
+ }
+ else
+ {
+ snmp_log (LOG_ERR,
+ "Couldn't reboot slave for MAC address: %s \n",
+ mac_str);
+ rowreq_ctx->data.eocCNUConfigurationSaving =
+ EOCCNUCONFIGURATIONSAVING_SAVE;
+ saving_result[rowreq_ctx->tbl_idx.eocCNUIndex] =
+ EOCCNUCONFIGURATIONRESULT_FAILED;
+ }
+ break;
+
+ default:
+ snmp_log (LOG_ERR,
+ "couldn't reverse map value %ld"
+ " for eocCNUConfigurationSaving\n",
+ eocCNUConfigurationSaving_val);
+ return SNMP_ERR_GENERR;
+ }
+
+ /*
+ * TODO:461:M: |-> Set eocCNUConfigurationSaving value.
+ * set eocCNUConfigurationSaving value in rowreq_ctx->data
+ */
+
+ return MFD_SUCCESS;
+}
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUConfigurationSaving_undo (eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUConfigurationSaving_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUConfigurationSaving undo.
+ */
+ /*
+ * copy eocCNUConfigurationSaving data
+ * set rowreq_ctx->data.eocCNUConfigurationSaving from rowreq_ctx->undo->eocCNUConfigurationSaving
+ */
+ rowreq_ctx->data.eocCNUConfigurationSaving = rowreq_ctx->undo->eocCNUConfigurationSaving;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUConfigurationSaving_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAction
+ * eocCNUAction is subid 17 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.17
+ * Description:
+¶ÔCNU½øÐеIJÙ×÷¡£
+ delete(1)- ´ÓCNU±íÖÐɾ³ýCNU, Ö»ÄÜɾ³ý²»ÔÚÏßµÄCNU¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 1/8. Values: delete(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUAction_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of delete(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUAction_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAction_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAction_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUAction value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUAction value not illegal */
+} /* eocCNUAction_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUAction_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAction_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUAction undo.
+ */
+ /*
+ * copy eocCNUAction data
+ * set rowreq_ctx->undo->eocCNUAction from rowreq_ctx->data.eocCNUAction
+ */
+ rowreq_ctx->undo->eocCNUAction = rowreq_ctx->data.eocCNUAction;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUAction_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUAction_val
+ * A long containing the new value.
+ */
+int
+eocCNUAction_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAction_val )
+{
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUAction_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUAction value.
+ * set eocCNUAction value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocCNUAction = eocCNUAction_val;
+
+ return MFD_SUCCESS;
+}
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUAction_undo( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAction_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUAction undo.
+ */
+ /*
+ * copy eocCNUAction data
+ * set rowreq_ctx->data.eocCNUAction from rowreq_ctx->undo->eocCNUAction
+ */
+ rowreq_ctx->data.eocCNUAction = rowreq_ctx->undo->eocCNUAction;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUAction_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUAdminStatus
+ * eocCNUAdminStatus is subid 18 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.18
+ * Description:
+CNU¹ÜÀí״̬
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUAdminStatus_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of disable(0), enable(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUAdminStatus_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAdminStatus_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAdminStatus_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUAdminStatus value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUAdminStatus value not illegal */
+} /* eocCNUAdminStatus_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUAdminStatus_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAdminStatus_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUAdminStatus undo.
+ */
+ /*
+ * copy eocCNUAdminStatus data
+ * set rowreq_ctx->undo->eocCNUAdminStatus from rowreq_ctx->data.eocCNUAdminStatus
+ */
+ rowreq_ctx->undo->eocCNUAdminStatus = rowreq_ctx->data.eocCNUAdminStatus;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUAdminStatus_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUAdminStatus_val
+ * A long containing the new value.
+ */
+int
+eocCNUAdminStatus_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAdminStatus_val )
+{
+
+ DEBUGMSGTL (("verbose:eocCNUTable:eocCNUAdminStatus_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUAdminStatus value.
+ * set eocCNUAdminStatus value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocCNUAdminStatus = eocCNUAdminStatus_val;
+
+ return MFD_SUCCESS;
+} /* eocCNUAdminStatus_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUAdminStatus_undo( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUAdminStatus_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUAdminStatus undo.
+ */
+ /*
+ * copy eocCNUAdminStatus data
+ * set rowreq_ctx->data.eocCNUAdminStatus from rowreq_ctx->undo->eocCNUAdminStatus
+ */
+ rowreq_ctx->data.eocCNUAdminStatus = rowreq_ctx->undo->eocCNUAdminStatus;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUAdminStatus_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUDownstreamPIR
+ * eocCNUDownstreamPIR is subid 19 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.19
+ * Description:
+unit: kkbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUDownstreamPIR_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUDownstreamPIR_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUDownstreamPIR_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUDownstreamPIR_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUDownstreamPIR value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUDownstreamPIR value not illegal */
+} /* eocCNUDownstreamPIR_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUDownstreamPIR_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUDownstreamPIR_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUDownstreamPIR undo.
+ */
+ /*
+ * copy eocCNUDownstreamPIR data
+ * set rowreq_ctx->undo->eocCNUDownstreamPIR from rowreq_ctx->data.eocCNUDownstreamPIR
+ */
+ rowreq_ctx->undo->eocCNUDownstreamPIR = rowreq_ctx->data.eocCNUDownstreamPIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUDownstreamPIR_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUDownstreamPIR_val
+ * A long containing the new value.
+ */
+int
+eocCNUDownstreamPIR_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUDownstreamPIR_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUDownstreamPIR_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUDownstreamPIR value.
+ * set eocCNUDownstreamPIR value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocCNUDownstreamPIR = eocCNUDownstreamPIR_val;
+
+ return MFD_SUCCESS;
+} /* eocCNUDownstreamPIR_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUDownstreamPIR_undo( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUDownstreamPIR_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUDownstreamPIR undo.
+ */
+ /*
+ * copy eocCNUDownstreamPIR data
+ * set rowreq_ctx->data.eocCNUDownstreamPIR from rowreq_ctx->undo->eocCNUDownstreamPIR
+ */
+ rowreq_ctx->data.eocCNUDownstreamPIR = rowreq_ctx->undo->eocCNUDownstreamPIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUDownstreamPIR_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUEntry.eocCNUUpstreamPIR
+ * eocCNUUpstreamPIR is subid 20 of eocCNUEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4.1.20
+ * Description:
+ unit: kbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUUpstreamPIR_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUUpstreamPIR_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUUpstreamPIR_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUUpstreamPIR_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUUpstreamPIR value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUUpstreamPIR value not illegal */
+} /* eocCNUUpstreamPIR_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUUpstreamPIR_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUUpstreamPIR_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUUpstreamPIR undo.
+ */
+ /*
+ * copy eocCNUUpstreamPIR data
+ * set rowreq_ctx->undo->eocCNUUpstreamPIR from rowreq_ctx->data.eocCNUUpstreamPIR
+ */
+ rowreq_ctx->undo->eocCNUUpstreamPIR = rowreq_ctx->data.eocCNUUpstreamPIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUUpstreamPIR_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUUpstreamPIR_val
+ * A long containing the new value.
+ */
+int
+eocCNUUpstreamPIR_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUUpstreamPIR_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUUpstreamPIR_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUUpstreamPIR value.
+ * set eocCNUUpstreamPIR value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocCNUUpstreamPIR = eocCNUUpstreamPIR_val;
+
+ return MFD_SUCCESS;
+} /* eocCNUUpstreamPIR_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUUpstreamPIR_undo( eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUUpstreamPIR_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUUpstreamPIR undo.
+ */
+ /*
+ * copy eocCNUUpstreamPIR data
+ * set rowreq_ctx->data.eocCNUUpstreamPIR from rowreq_ctx->undo->eocCNUUpstreamPIR
+ */
+ rowreq_ctx->data.eocCNUUpstreamPIR = rowreq_ctx->undo->eocCNUUpstreamPIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUUpstreamPIR_undo */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.h
new file mode 100644
index 0000000000..22d9525ecb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_data_set.h
@@ -0,0 +1,140 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUTABLE_DATA_SET_H
+#define EOCCNUTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+
+
+int eocCNUTable_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx);
+int eocCNUTable_undo_cleanup( eocCNUTable_rowreq_ctx *rowreq_ctx);
+int eocCNUTable_undo( eocCNUTable_rowreq_ctx *rowreq_ctx);
+int eocCNUTable_commit( eocCNUTable_rowreq_ctx *rowreq_ctx);
+int eocCNUTable_undo_commit( eocCNUTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocCNUMACAddress_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, char *eocCNUMACAddress_val_ptr, size_t eocCNUMACAddress_val_ptr_len);
+int eocCNUMACAddress_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUMACAddress_set( eocCNUTable_rowreq_ctx *rowreq_ctx, char *eocCNUMACAddress_val_ptr, size_t eocCNUMACAddress_val_ptr_len );
+int eocCNUMACAddress_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUOnlineStatus_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUOnlineStatus_val);
+int eocCNUOnlineStatus_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUOnlineStatus_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUOnlineStatus_val );
+int eocCNUOnlineStatus_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUModelNumber_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, char *eocCNUModelNumber_val_ptr, size_t eocCNUModelNumber_val_ptr_len);
+int eocCNUModelNumber_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUModelNumber_set( eocCNUTable_rowreq_ctx *rowreq_ctx, char *eocCNUModelNumber_val_ptr, size_t eocCNUModelNumber_val_ptr_len );
+int eocCNUModelNumber_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUPortAmount_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUPortAmount_val);
+int eocCNUPortAmount_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUPortAmount_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUPortAmount_val );
+int eocCNUPortAmount_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUAuthorizationState_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAuthorizationState_val);
+int eocCNUAuthorizationState_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUAuthorizationState_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAuthorizationState_val );
+int eocCNUAuthorizationState_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUSoftwareVersion_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, char *eocCNUSoftwareVersion_val_ptr, size_t eocCNUSoftwareVersion_val_ptr_len);
+int eocCNUSoftwareVersion_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUSoftwareVersion_set( eocCNUTable_rowreq_ctx *rowreq_ctx, char *eocCNUSoftwareVersion_val_ptr, size_t eocCNUSoftwareVersion_val_ptr_len );
+int eocCNUSoftwareVersion_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUReset_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUReset_val);
+int eocCNUReset_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUReset_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUReset_val );
+int eocCNUReset_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNURFAttenuation_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNURFAttenuation_val);
+int eocCNURFAttenuation_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNURFAttenuation_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNURFAttenuation_val );
+int eocCNURFAttenuation_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNURFDownstreamQuality_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNURFDownstreamQuality_val);
+int eocCNURFDownstreamQuality_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNURFDownstreamQuality_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNURFDownstreamQuality_val );
+int eocCNURFDownstreamQuality_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNURFUpstreamQuality_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNURFUpstreamQuality_val);
+int eocCNURFUpstreamQuality_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNURFUpstreamQuality_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNURFUpstreamQuality_val );
+int eocCNURFUpstreamQuality_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUPhyDownstreamRate_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUPhyDownstreamRate_val);
+int eocCNUPhyDownstreamRate_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUPhyDownstreamRate_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUPhyDownstreamRate_val );
+int eocCNUPhyDownstreamRate_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUPhyUpstreamRate_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUPhyUpstreamRate_val);
+int eocCNUPhyUpstreamRate_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUPhyUpstreamRate_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUPhyUpstreamRate_val );
+int eocCNUPhyUpstreamRate_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUConfigurationSaving_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUConfigurationSaving_val);
+int eocCNUConfigurationSaving_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUConfigurationSaving_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUConfigurationSaving_val );
+int eocCNUConfigurationSaving_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUConfigurationResult_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUConfigurationResult_val);
+int eocCNUConfigurationResult_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUConfigurationResult_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUConfigurationResult_val );
+int eocCNUConfigurationResult_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUAction_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAction_val);
+int eocCNUAction_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUAction_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAction_val );
+int eocCNUAction_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUAdminStatus_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAdminStatus_val);
+int eocCNUAdminStatus_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUAdminStatus_set( eocCNUTable_rowreq_ctx *rowreq_ctx, u_long eocCNUAdminStatus_val );
+int eocCNUAdminStatus_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUDownstreamPIR_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUDownstreamPIR_val);
+int eocCNUDownstreamPIR_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUDownstreamPIR_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUDownstreamPIR_val );
+int eocCNUDownstreamPIR_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUUpstreamPIR_check_value( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUUpstreamPIR_val);
+int eocCNUUpstreamPIR_undo_setup( eocCNUTable_rowreq_ctx *rowreq_ctx );
+int eocCNUUpstreamPIR_set( eocCNUTable_rowreq_ctx *rowreq_ctx, long eocCNUUpstreamPIR_val );
+int eocCNUUpstreamPIR_undo( eocCNUTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocCNUTable_check_dependencies(eocCNUTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_enums.h
new file mode 100644
index 0000000000..cd27bf48a0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_enums.h
@@ -0,0 +1,150 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUTABLE_ENUMS_H
+#define EOCCNUTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocCNUTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUOnlineStatus (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUONLINESTATUS_ENUMS
+#define EOCCNUONLINESTATUS_ENUMS
+
+#define EOCCNUONLINESTATUS_OFFLINE 0
+#define EOCCNUONLINESTATUS_ONLINE 1
+
+#endif /* EOCCNUONLINESTATUS_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUAuthorizationState (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUAUTHORIZATIONSTATE_ENUMS
+#define EOCCNUAUTHORIZATIONSTATE_ENUMS
+
+#define EOCCNUAUTHORIZATIONSTATE_NOT_AUTHORIZED 0
+#define EOCCNUAUTHORIZATIONSTATE_AUTHORIZED 1
+
+#endif /* EOCCNUAUTHORIZATIONSTATE_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUReset (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNURESET_ENUMS
+#define EOCCNURESET_ENUMS
+
+#define EOCCNURESET_RESET 1
+
+#endif /* EOCCNURESET_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUConfigurationSaving (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUCONFIGURATIONSAVING_ENUMS
+#define EOCCNUCONFIGURATIONSAVING_ENUMS
+
+#define EOCCNUCONFIGURATIONSAVING_SAVE 1
+
+#endif /* EOCCNUCONFIGURATIONSAVING_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUConfigurationResult (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUCONFIGURATIONRESULT_ENUMS
+#define EOCCNUCONFIGURATIONRESULT_ENUMS
+
+#define EOCCNUCONFIGURATIONRESULT_SUCCESS 0
+#define EOCCNUCONFIGURATIONRESULT_RUNNING 1
+#define EOCCNUCONFIGURATIONRESULT_FAILED 2
+
+#endif /* EOCCNUCONFIGURATIONRESULT_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUAction (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUACTION_ENUMS
+#define EOCCNUACTION_ENUMS
+
+#define EOCCNUACTION_DELETE 1
+
+#endif /* EOCCNUACTION_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUAdminStatus (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUADMINSTATUS_ENUMS
+#define EOCCNUADMINSTATUS_ENUMS
+
+#define EOCCNUADMINSTATUS_DISABLE 0
+#define EOCCNUADMINSTATUS_ENABLE 1
+
+#endif /* EOCCNUADMINSTATUS_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.c
new file mode 100644
index 0000000000..f50b61b43f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.c
@@ -0,0 +1,1863 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocCNUTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUTable is subid 4 of eocCNU.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.2.4, length: 12
+*/
+typedef struct eocCNUTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocCNUTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocCNUTable_interface_ctx;
+
+static eocCNUTable_interface_ctx eocCNUTable_if_ctx;
+
+static void _eocCNUTable_container_init(
+ eocCNUTable_interface_ctx *if_ctx);
+static void _eocCNUTable_container_shutdown(
+ eocCNUTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocCNUTable_container_get( void )
+{
+ return eocCNUTable_if_ctx.container;
+}
+
+eocCNUTable_registration *
+eocCNUTable_registration_get( void )
+{
+ return eocCNUTable_if_ctx.user_ctx;
+}
+
+eocCNUTable_registration *
+eocCNUTable_registration_set( eocCNUTable_registration * newreg )
+{
+ eocCNUTable_registration * old = eocCNUTable_if_ctx.user_ctx;
+ eocCNUTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocCNUTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocCNUTable_if_ctx.container);
+}
+
+u_int
+eocCNUTable_dirty_get( void )
+{
+ return eocCNUTable_if_ctx.table_dirty;
+}
+
+void
+eocCNUTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocCNUTable:eocCNUTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocCNUTable_if_ctx.table_dirty, status));
+ eocCNUTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocCNUTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int _eocCNUTable_undo_column( eocCNUTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+eocCNUTable_data *eocCNUTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table eocCNUTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocCNUTable_initialize_interface(eocCNUTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocCNUTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocCNUTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocCNUTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocCNUCBATCardIndex */
+ ASN_INTEGER, /** index: eocCNUIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCCNUTABLE_MIN_COL;
+ tbl_info->max_column = EOCCNUTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocCNUTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocCNUTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocCNUTable_container_init(&eocCNUTable_if_ctx);
+ if (NULL == eocCNUTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocCNUTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocCNUTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocCNUTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocCNUTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocCNUTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocCNUTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocCNUTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocCNUTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocCNUTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocCNUTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocCNUTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocCNUTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocCNUTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocCNUTable:init_eocCNUTable",
+ "Registering eocCNUTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocCNUTable", handler,
+ eocCNUTable_oid,
+ eocCNUTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocCNUTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocCNUTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocCNUTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocCNUTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocCNUTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocCNUTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocCNUTable
+ */
+void
+_eocCNUTable_shutdown_interface(eocCNUTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocCNUTable_container_shutdown(&eocCNUTable_if_ctx);
+}
+
+void
+eocCNUTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocCNUTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocCNUTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocCNUTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUCBATCardIndex;
+ /*
+ * eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUCBATCardIndex, 0x00, sizeof(var_eocCNUCBATCardIndex) );
+ var_eocCNUCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocCNUIndex, 0x00, sizeof(var_eocCNUIndex) );
+ var_eocCNUIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUCBATCardIndex.next_variable = &var_eocCNUIndex; var_eocCNUIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_index_to_oid","called\n"));
+
+ /* eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCNUCBATCardIndex, (u_char*)&mib_idx->eocCNUCBATCardIndex,
+ sizeof(mib_idx->eocCNUCBATCardIndex));
+
+ /* eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCNUIndex, (u_char*)&mib_idx->eocCNUIndex,
+ sizeof(mib_idx->eocCNUIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocCNUCBATCardIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUCBATCardIndex );
+
+ return err;
+} /* eocCNUTable_index_to_oid */
+
+/**
+ * extract eocCNUTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocCNUTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUCBATCardIndex;
+ /*
+ * eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUCBATCardIndex, 0x00, sizeof(var_eocCNUCBATCardIndex) );
+ var_eocCNUCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocCNUIndex, 0x00, sizeof(var_eocCNUIndex) );
+ var_eocCNUIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUCBATCardIndex.next_variable = &var_eocCNUIndex; var_eocCNUIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocCNUCBATCardIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocCNUCBATCardIndex = *((long *)var_eocCNUCBATCardIndex.val.string);
+ mib_idx->eocCNUIndex = *((long *)var_eocCNUIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUCBATCardIndex );
+
+ return err;
+} /* eocCNUTable_index_from_oid */
+
+
+/*
+ * eocCNUTable_allocate_data
+ *
+ * Purpose: create new eocCNUTable_data.
+ */
+eocCNUTable_data *
+eocCNUTable_allocate_data(void)
+{
+ eocCNUTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocCNUTable_data);
+
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocCNUTable_data.\n");
+ }
+
+ return rtn;
+} /* eocCNUTable_allocate_data */
+
+/*
+ * eocCNUTable_release_data
+ *
+ * Purpose: release eocCNUTable data.
+ */
+void
+eocCNUTable_release_data(eocCNUTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocCNUTable:eocCNUTable_release_data","called\n"));
+
+ free(data);
+} /* eocCNUTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocCNUTable_rowreq_ctx
+ */
+eocCNUTable_rowreq_ctx *
+eocCNUTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocCNUTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocCNUTable:eocCNUTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocCNUTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocCNUTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocCNUTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocCNUTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocCNUTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocCNUTable_rowreq_ctx
+ */
+void
+eocCNUTable_release_rowreq_ctx(eocCNUTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUTable:eocCNUTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocCNUTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if(rowreq_ctx->undo)
+ eocCNUTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocCNUTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocCNUTable_pre_request(eocCNUTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUTable","error %d from "
+ "eocCNUTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocCNUTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocCNUTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocCNUTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocCNUTable_post_request(eocCNUTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUTable","error %d from "
+ "eocCNUTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocCNUTable_interface_ctx *if_ctx =
+ * (eocCNUTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocCNUTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocCNUTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUTable_get_column( eocCNUTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUCBATCARDINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCNUCBATCardIndex;
+ break;
+
+ /* (INDEX) eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCNUIndex;
+ break;
+
+ /* eocCNUMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H */
+ case COLUMN_EOCCNUMACADDRESS:
+ var->type = ASN_OCTET_STR;
+rc = eocCNUMACAddress_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCNUOnlineStatus(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUONLINESTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUOnlineStatus_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUModelNumber(5)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCNUMODELNUMBER:
+ var->type = ASN_OCTET_STR;
+rc = eocCNUModelNumber_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCNUPortAmount(6)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPORTAMOUNT:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUPortAmount_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUAuthorizationState(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUAUTHORIZATIONSTATE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUAuthorizationState_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUSoftwareVersion(8)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCNUSOFTWAREVERSION:
+ var->type = ASN_OCTET_STR;
+rc = eocCNUSoftwareVersion_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCNUReset(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNURESET:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUReset_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNURFAttenuation(10)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCNURFATTENUATION:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNURFAttenuation_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNURFDownstreamQuality(11)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCNURFDOWNSTREAMQUALITY:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNURFDownstreamQuality_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNURFUpstreamQuality(12)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCNURFUPSTREAMQUALITY:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNURFUpstreamQuality_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUPhyDownstreamRate(13)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPHYDOWNSTREAMRATE:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUPhyDownstreamRate_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUPhyUpstreamRate(14)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPHYUPSTREAMRATE:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUPhyUpstreamRate_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUConfigurationSaving(15)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONSAVING:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUConfigurationSaving_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUConfigurationResult(16)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONRESULT:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUConfigurationResult_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUAction(17)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUACTION:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUAction_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUAdminStatus(18)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUADMINSTATUS:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUAdminStatus_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUDownstreamPIR(19)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUDOWNSTREAMPIR:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUDownstreamPIR_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUUpstreamPIR(20)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUUPSTREAMPIR:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUUpstreamPIR_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ default:
+ if (EOCCNUTABLE_MIN_COL <= column && column <= EOCCNUTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocCNUTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocCNUTable_get_column */
+
+int
+_mfd_eocCNUTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUTable_check_column( eocCNUTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocCNUCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUCBATCARDINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /* (INDEX) eocCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocCNUMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H */
+ case COLUMN_EOCCNUMACADDRESS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUOnlineStatus(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUONLINESTATUS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUModelNumber(5)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCNUMODELNUMBER:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUPortAmount(6)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPORTAMOUNT:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUAuthorizationState(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUAUTHORIZATIONSTATE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUSoftwareVersion(8)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h */
+ case COLUMN_EOCCNUSOFTWAREVERSION:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUReset(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNURESET:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUReset ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCNURESET_RESET )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:_eocCNUTable_check_column:eocCNUReset",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUReset_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUReset_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNURFAttenuation(10)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCNURFATTENUATION:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNURFDownstreamQuality(11)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCNURFDOWNSTREAMQUALITY:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNURFUpstreamQuality(12)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCCNURFUPSTREAMQUALITY:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUPhyDownstreamRate(13)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPHYDOWNSTREAMRATE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUPhyUpstreamRate(14)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPHYUPSTREAMRATE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUConfigurationSaving(15)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONSAVING:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUConfigurationSaving ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCNUCONFIGURATIONSAVING_SAVE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:_eocCNUTable_check_column:eocCNUConfigurationSaving",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUConfigurationSaving_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUConfigurationSaving_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUConfigurationResult(16)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONRESULT:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUAction(17)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUACTION:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUAction ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCNUACTION_DELETE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:_eocCNUTable_check_column:eocCNUAction",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUAction_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUAction_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUAdminStatus(18)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUADMINSTATUS:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUAdminStatus ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCNUADMINSTATUS_DISABLE )
+ && ( *var->val.integer != EOCCNUADMINSTATUS_ENABLE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:_eocCNUTable_check_column:eocCNUAdminStatus",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUAdminStatus_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUAdminStatus_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUDownstreamPIR(19)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUDOWNSTREAMPIR:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUDownstreamPIR ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:_eocCNUTable_check_column:eocCNUDownstreamPIR",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUDownstreamPIR_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUDownstreamPIR_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUUpstreamPIR(20)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUUPSTREAMPIR:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUUpstreamPIR ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:_eocCNUTable_check_column:eocCNUUpstreamPIR",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUUpstreamPIR_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUUpstreamPIR_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocCNUTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocCNUTable_check_column */
+
+int
+_mfd_eocCNUTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUTable_undo_setup_column( eocCNUTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUReset(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNURESET:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNURESET_FLAG;
+ rc = eocCNUReset_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUConfigurationSaving(15)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONSAVING:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG;
+ rc = eocCNUConfigurationSaving_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUAction(17)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUACTION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUACTION_FLAG;
+ rc = eocCNUAction_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUAdminStatus(18)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUADMINSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUADMINSTATUS_FLAG;
+ rc = eocCNUAdminStatus_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUDownstreamPIR(19)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUDOWNSTREAMPIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUDOWNSTREAMPIR_FLAG;
+ rc = eocCNUDownstreamPIR_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUUpstreamPIR(20)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUUPSTREAMPIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUUPSTREAMPIR_FLAG;
+ rc = eocCNUUpstreamPIR_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocCNUTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocCNUTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocCNUTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if(rowreq_ctx->undo) {
+ eocCNUTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUTable_set_column( eocCNUTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUReset(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNURESET:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNURESET_FLAG;
+ rc = eocCNUReset_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCNUConfigurationSaving(15)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONSAVING:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG;
+ rc = eocCNUConfigurationSaving_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCNUAction(17)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUACTION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUACTION_FLAG;
+ rc = eocCNUAction_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCNUAdminStatus(18)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUADMINSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUADMINSTATUS_FLAG;
+ rc = eocCNUAdminStatus_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCNUDownstreamPIR(19)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUDOWNSTREAMPIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUDOWNSTREAMPIR_FLAG;
+ rc = eocCNUDownstreamPIR_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCNUUpstreamPIR(20)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUUPSTREAMPIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUUPSTREAMPIR_FLAG;
+ rc = eocCNUUpstreamPIR_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocCNUTable_set_column */
+
+int
+_mfd_eocCNUTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocCNUTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocCNUTable_dirty_set( eocCNUTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocCNUTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocCNUTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocCNUTable_dirty_set( d - 1 );
+ }
+
+ rc = eocCNUTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocCNUTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUTable_undo_column( eocCNUTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUReset(9)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNURESET:
+ rc = eocCNUReset_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUConfigurationSaving(15)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUCONFIGURATIONSAVING:
+ rc = eocCNUConfigurationSaving_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUAction(17)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUACTION:
+ rc = eocCNUAction_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUAdminStatus(18)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUADMINSTATUS:
+ rc = eocCNUAdminStatus_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUDownstreamPIR(19)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUDOWNSTREAMPIR:
+ rc = eocCNUDownstreamPIR_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUUpstreamPIR(20)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUUPSTREAMPIR:
+ rc = eocCNUUpstreamPIR_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUTable_undo_column */
+
+int
+_mfd_eocCNUTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUTable:mfd","error %d from "
+ "eocCNUTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocCNUTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUTable:_mfd_eocCNUTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocCNUTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocCNUTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocCNUTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocCNUTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocCNUTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocCNUTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocCNUTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocCNUTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocCNUTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocCNUTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocCNUTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocCNUTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocCNUTable_container_init(eocCNUTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocCNUTable_oid,
+ eocCNUTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocCNUTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocCNUTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocCNUTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocCNUTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocCNUTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocCNUTable_container_shutdown(eocCNUTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUTable:_eocCNUTable_container_shutdown","called\n"));
+
+ eocCNUTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocCNUTable_container_shutdown */
+
+
+eocCNUTable_rowreq_ctx *
+eocCNUTable_row_find_by_mib_index(eocCNUTable_mib_index *mib_idx)
+{
+ eocCNUTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocCNUTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocCNUTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.h
new file mode 100644
index 0000000000..865d191627
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_interface.h
@@ -0,0 +1,87 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCCNUTABLE_INTERFACE_H
+#define EOCCNUTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocCNUTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocCNUTable_initialize_interface(eocCNUTable_registration * user_ctx,
+ u_long flags);
+void _eocCNUTable_shutdown_interface(eocCNUTable_registration * user_ctx);
+
+eocCNUTable_registration *
+eocCNUTable_registration_get( void );
+
+eocCNUTable_registration *
+eocCNUTable_registration_set( eocCNUTable_registration * newreg );
+
+netsnmp_container *eocCNUTable_container_get( void );
+int eocCNUTable_container_size( void );
+
+u_int eocCNUTable_dirty_get( void );
+void eocCNUTable_dirty_set( u_int status );
+
+ eocCNUTable_rowreq_ctx * eocCNUTable_allocate_rowreq_ctx(void *);
+void eocCNUTable_release_rowreq_ctx(eocCNUTable_rowreq_ctx *rowreq_ctx);
+
+int eocCNUTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUTable_mib_index *mib_idx);
+int eocCNUTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocCNUTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_oids.h
new file mode 100644
index 0000000000..d06c02e013
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNU/eocCNUTable/eocCNUTable_oids.h
@@ -0,0 +1,84 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUTABLE_OIDS_H
+#define EOCCNUTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* definitions for scalars added to table modEoCOnlineCNUTable */
+#define EOCCNUCURRENTAMOUNT_OID 1,3,6,1,4,1,17409,2,4,5,2,2
+#define EOCCNUAMOUNTLIMITATION_OID 1,3,6,1,4,1,17409,2,4,5,2,3
+
+/* column number definitions for table eocCNUTable */
+#define EOCCNUTABLE_OID 1,3,6,1,4,1,17409,2,4,5,2,4
+
+
+#define COLUMN_EOCCNUCBATCARDINDEX 1
+
+#define COLUMN_EOCCNUINDEX 2
+
+#define COLUMN_EOCCNUMACADDRESS 3
+
+#define COLUMN_EOCCNUONLINESTATUS 4
+
+#define COLUMN_EOCCNUMODELNUMBER 5
+
+#define COLUMN_EOCCNUPORTAMOUNT 6
+
+#define COLUMN_EOCCNUAUTHORIZATIONSTATE 7
+
+#define COLUMN_EOCCNUSOFTWAREVERSION 8
+
+#define COLUMN_EOCCNURESET 9
+#define COLUMN_EOCCNURESET_FLAG (0x1 << 0)
+
+#define COLUMN_EOCCNURFATTENUATION 10
+
+#define COLUMN_EOCCNURFDOWNSTREAMQUALITY 11
+
+#define COLUMN_EOCCNURFUPSTREAMQUALITY 12
+
+#define COLUMN_EOCCNUPHYDOWNSTREAMRATE 13
+
+#define COLUMN_EOCCNUPHYUPSTREAMRATE 14
+
+#define COLUMN_EOCCNUCONFIGURATIONSAVING 15
+#define COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG (0x1 << 1)
+
+#define COLUMN_EOCCNUCONFIGURATIONRESULT 16
+
+#define COLUMN_EOCCNUACTION 17
+#define COLUMN_EOCCNUACTION_FLAG (0x1 << 2)
+
+#define COLUMN_EOCCNUADMINSTATUS 18
+#define COLUMN_EOCCNUADMINSTATUS_FLAG (0x1 << 3)
+
+#define COLUMN_EOCCNUDOWNSTREAMPIR 19
+#define COLUMN_EOCCNUDOWNSTREAMPIR_FLAG (0x1 << 4)
+
+#define COLUMN_EOCCNUUPSTREAMPIR 20
+#define COLUMN_EOCCNUUPSTREAMPIR_FLAG (0x1 << 5)
+
+
+#define EOCCNUTABLE_MIN_COL COLUMN_EOCCNUCBATCARDINDEX
+#define EOCCNUTABLE_MAX_COL COLUMN_EOCCNUUPSTREAMPIR
+
+
+ /*
+ * TODO:405:r: Review EOCCNUTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCCNUTABLE_SETTABLE_COLS (COLUMN_EOCCNURESET_FLAG | COLUMN_EOCCNUCONFIGURATIONSAVING_FLAG | COLUMN_EOCCNUACTION_FLAG | COLUMN_EOCCNUADMINSTATUS_FLAG | COLUMN_EOCCNUDOWNSTREAMPIR_FLAG | COLUMN_EOCCNUUPSTREAMPIR_FLAG)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort.h
new file mode 100644
index 0000000000..48ff31d7a3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort.h
@@ -0,0 +1,2 @@
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPort)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPort.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPort.c
new file mode 100644
index 0000000000..8caf677c5a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPort.c
@@ -0,0 +1,106 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37: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 "eocCNUPort.h"
+/** Initializes the eocCNUPort module */
+void
+init_eocCNUPort(void)
+{
+ static oid eocCNUPortPerCNULimitation_oid[] = { 1,3,6,1,4,1,17409,2,4,5,4,1 };
+ static oid eocCNUPortAmountLimitation_oid[] = { 1,3,6,1,4,1,17409,2,4,5,4,2 };
+
+ DEBUGMSGTL(("eocCNUPort", "Initializing\n"));
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCNUPortPerCNULimitation", handle_eocCNUPortPerCNULimitation,
+ eocCNUPortPerCNULimitation_oid, OID_LENGTH(eocCNUPortPerCNULimitation_oid),
+ HANDLER_CAN_RONLY
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCNUPortAmountLimitation", handle_eocCNUPortAmountLimitation,
+ eocCNUPortAmountLimitation_oid, OID_LENGTH(eocCNUPortAmountLimitation_oid),
+ HANDLER_CAN_RWRITE
+ ));
+}
+
+int
+handle_eocCNUPortPerCNULimitation(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+ int port_per_cnu_limit = LIBSPID_PORT_PER_SLAVE_MAX;
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) & port_per_cnu_limit,
+ sizeof (port_per_cnu_limit));
+ break;
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCNUPortPerCNULimitation\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+int
+handle_eocCNUPortAmountLimitation(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+ int amount_limit = LIBSPID_PORT_TOTAL_MAX;
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) & amount_limit,
+ sizeof (amount_limit));
+ break;
+ case MODE_SET_RESERVE1:
+ break;
+
+ case MODE_SET_RESERVE2:
+ break;
+
+ case MODE_SET_FREE:
+ break;
+
+ case MODE_SET_ACTION:
+ netsnmp_set_request_error (reqinfo, requests, SNMP_ERR_NOTWRITABLE);
+ break;
+ case MODE_SET_COMMIT:
+ break;
+ case MODE_SET_UNDO:
+ break;
+ default:
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCNUPortAmountLimitation\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPort.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPort.h
new file mode 100644
index 0000000000..52c516811d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPort.h
@@ -0,0 +1,16 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+ */
+#ifndef EOCCNUPORT_H
+#define EOCCNUPORT_H
+
+/* include common header */
+#include "EoCCommon.h"
+
+/* function declarations */
+void init_eocCNUPort(void);
+Netsnmp_Node_Handler handle_eocCNUPortPerCNULimitation;
+Netsnmp_Node_Handler handle_eocCNUPortAmountLimitation;
+
+#endif /* EOCCNUPORT_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable.h
new file mode 100644
index 0000000000..2c0ee2f568
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_set)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_get)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_interface)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortCBATCardIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortCBATCardIndex.m2d
new file mode 100644
index 0000000000..bf8795e23d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortCBATCardIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUPortCBATCardIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortCNUIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortCNUIndex.m2d
new file mode 100644
index 0000000000..8f4ce783da
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortCNUIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUPortCNUIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortEN.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortEN.m2d
new file mode 100644
index 0000000000..2c703a1af3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortEN.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUPortEN
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortIndex.m2d
new file mode 100644
index 0000000000..307d60750d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUPortIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortService.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortService.m2d
new file mode 100644
index 0000000000..39855c12b8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/node-eocCNUPortService.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUPortService
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/table-eocCNUPortTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/table-eocCNUPortTable.m2d
new file mode 100644
index 0000000000..7fee156c87
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/defaults/table-eocCNUPortTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocCNUPortTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable-README-FIRST.txt
new file mode 100644
index 0000000000..ebb5dc0d0d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocCNUPortTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocCNUPortTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocCNUPortTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocCNUPortTable_Makefile
+
+
+ File : eocCNUPortTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocCNUPortTable-README-eocCNUPortTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocCNUPortTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocCNUPortTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocCNUPortTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocCNUPortTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable-README-eocCNUPortTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable-README-eocCNUPortTable.txt
new file mode 100644
index 0000000000..b75e012516
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable-README-eocCNUPortTable.txt
@@ -0,0 +1,649 @@
+************************************************************************
+eocCNUPortTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocCNUPortTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocCNUPortTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocCNUPortTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUPortTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUPortTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUPortTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocCNUPortTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUPortTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocCNUPortTable_allocate_data
+ eocCNUPortTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocCNUPortTable_rowreq_ctx_init
+ eocCNUPortTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocCNUPortTable table
+ ------------------------------------------------------------
+ The index(es) for the eocCNUPortTable table are:
+
+ eocCNUPortCBATCardIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocCNUPortCNUIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocCNUPortIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocCNUPortTable_data.
+
+
+************************************************************************
+eocCNUPortTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocCNUPortTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocCNUPortTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocCNUPortTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocCNUPortTable_indexes_set
+ WHERE: eocCNUPortTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocCNUPortTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocCNUPortTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUPortEN_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUPortService_get
+
+
+
+File: eocCNUPortTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocCNUPortTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table does not support ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocCNUPortTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUPortEN_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUPortEN_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUPortEN_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUPortEN_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUPortService_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUPortService_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUPortService_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUPortService_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocCNUPortTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocCNUPortTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocCNUPortTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocCNUPortTable table.
+
+To watch the flow of the eocCNUPortTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocCNUPortTable
+ verbose:eocCNUPortTable
+ internal:eocCNUPortTable
+
+e.g.
+ snmpd -f -Le -DeocCNUPortTable,verbose:eocCNUPortTable,internal:eocCNUPortTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortTable is subid 3 of eocCNUPort.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3, length: 12
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortEntry.eocCNUPortCBATCardIndex
+ * eocCNUPortCBATCardIndex is subid 1 of eocCNUPortEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3.1.1
+ * Description:
+CBAT°å¿¨µÄÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortEntry.eocCNUPortCNUIndex
+ * eocCNUPortCNUIndex is subid 2 of eocCNUPortEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3.1.2
+ * Description:
+CNUµÄÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortEntry.eocCNUPortIndex
+ * eocCNUPortIndex is subid 3 of eocCNUPortEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3.1.3
+ * Description:
+CNU¶Ë¿ÚµÄÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortEntry.eocCNUPortEN
+ * eocCNUPortEN is subid 4 of eocCNUPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3.1.4
+ * Description:
+CNU¶Ë¿ÚÆô¶¯»ò¹Ø±Õ£¬0±íʾ½ûÖ¹£¬1±íʾʹÄÜ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortEntry.eocCNUPortService
+ * eocCNUPortService is subid 5 of eocCNUPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3.1.5
+ * Description:
+CNU¶Ë¿ÚÒµÎñË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable.c
new file mode 100644
index 0000000000..e1c9bf3d0c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable.c
@@ -0,0 +1,218 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocCNUPortTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUPortTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocCNUPortTable_interface.h"
+
+oid eocCNUPortTable_oid[] = { EOCCNUPORTTABLE_OID };
+int eocCNUPortTable_oid_size = OID_LENGTH(eocCNUPortTable_oid);
+
+ eocCNUPortTable_registration eocCNUPortTable_user_context;
+
+void initialize_table_eocCNUPortTable(void);
+void shutdown_table_eocCNUPortTable(void);
+
+
+/**
+ * Initializes the eocCNUPortTable module
+ */
+void
+init_eocCNUPortTable(void)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:init_eocCNUPortTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocCNUPortTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocCNUPortTable"))
+ initialize_table_eocCNUPortTable();
+
+} /* init_eocCNUPortTable */
+
+/**
+ * Shut-down the eocCNUPortTable module (agent is exiting)
+ */
+void
+shutdown_eocCNUPortTable(void)
+{
+ if (should_init("eocCNUPortTable"))
+ shutdown_table_eocCNUPortTable();
+
+}
+
+/**
+ * Initialize the table eocCNUPortTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocCNUPortTable(void)
+{
+ eocCNUPortTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocCNUPortTable:initialize_table_eocCNUPortTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocCNUPortTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocCNUPortTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocCNUPortTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocCNUPortTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocCNUPortTable */
+
+/**
+ * Shutdown the table eocCNUPortTable
+ */
+void
+shutdown_table_eocCNUPortTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocCNUPortTable_shutdown_interface(&eocCNUPortTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocCNUPortTable_rowreq_ctx_init(eocCNUPortTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocCNUPortTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUPortTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocCNUPortTable_rowreq_ctx_cleanup(eocCNUPortTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocCNUPortTable rowreq cleanup.
+ */
+} /* eocCNUPortTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocCNUPortTable_pre_request(eocCNUPortTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocCNUPortTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUPortTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocCNUPortTable_post_request(eocCNUPortTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocCNUPortTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocCNUPortTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocCNUPortTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUPortTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable.h
new file mode 100644
index 0000000000..894eea57b7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable.h
@@ -0,0 +1,210 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUPORTTABLE_H
+#define EOCCNUPORTTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+/* other required module components */
+
+
+/* OID and column number definitions for eocCNUPortTable */
+#include "eocCNUPortTable_oids.h"
+
+/* enum definions */
+#include "eocCNUPortTable_enums.h"
+
+/* include common header */
+#include "EoCCommon.h"
+
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocCNUPortTable(void);
+void shutdown_eocCNUPortTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortTable is subid 3 of eocCNUPort.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3, length: 12
+*/
+/* *********************************************************************
+ * 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 eocCNUPortTable registration context.
+ */
+typedef netsnmp_data_list eocCNUPortTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocCNUPortTable data context structure.
+ * This structure is used to represent the data for eocCNUPortTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocCNUPortTable.
+ */
+typedef struct eocCNUPortTable_data_s {
+
+ char eocCNUPortMACAddress[LIBSPID_MAC_STR_LEN];
+ /*
+ * eocCNUPortEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUPortEN;
+
+ /*
+ * eocCNUPortService(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUPortService;
+
+} eocCNUPortTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocCNUPortTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocCNUPortTable_data eocCNUPortTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocCNUPortTable mib index.
+ * This structure is used to represent the index for eocCNUPortTable.
+ */
+typedef struct eocCNUPortTable_mib_index_s {
+
+ /*
+ * eocCNUPortCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPortCBATCardIndex;
+
+ /*
+ * eocCNUPortCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPortCNUIndex;
+
+ /*
+ * eocCNUPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPortIndex;
+
+
+} eocCNUPortTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocCNUPortTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocCNUPortTable_IDX_LEN 3
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocCNUPortTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocCNUPortTable_rowreq_ctx pointer.
+ */
+typedef struct eocCNUPortTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocCNUPortTable_IDX_LEN];
+
+ eocCNUPortTable_mib_index tbl_idx;
+
+ eocCNUPortTable_data data;
+ eocCNUPortTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocCNUPortTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocCNUPortTable_data_list;
+
+} eocCNUPortTable_rowreq_ctx;
+
+typedef struct eocCNUPortTable_ref_rowreq_ctx_s {
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx;
+} eocCNUPortTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocCNUPortTable_pre_request(eocCNUPortTable_registration * user_context);
+ int eocCNUPortTable_post_request(eocCNUPortTable_registration * user_context,
+ int rc);
+
+ int eocCNUPortTable_rowreq_ctx_init(eocCNUPortTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocCNUPortTable_rowreq_ctx_cleanup(eocCNUPortTable_rowreq_ctx *rowreq_ctx);
+
+ int eocCNUPortTable_commit(eocCNUPortTable_rowreq_ctx * rowreq_ctx);
+
+ eocCNUPortTable_rowreq_ctx *
+ eocCNUPortTable_row_find_by_mib_index(eocCNUPortTable_mib_index *mib_idx);
+
+extern oid eocCNUPortTable_oid[];
+extern int eocCNUPortTable_oid_size;
+
+
+#include "eocCNUPortTable_interface.h"
+#include "eocCNUPortTable_data_access.h"
+#include "eocCNUPortTable_data_get.h"
+#include "eocCNUPortTable_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 /* EOCCNUPORTTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.c
new file mode 100644
index 0000000000..208b499ef2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.c
@@ -0,0 +1,446 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUPortTable.h"
+
+
+#include "eocCNUPortTable_data_access.h"
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortTable is subid 3 of eocCNUPort.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3, length: 12
+*/
+
+/**
+ * initialization for eocCNUPortTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocCNUPortTable_reg
+ * Pointer to eocCNUPortTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocCNUPortTable_init_data(eocCNUPortTable_registration * eocCNUPortTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocCNUPortTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUPortTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocCNUPortTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocCNUPortTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocCNUPortTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocCNUPortTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCCNUPORTTABLE_CACHE_TIMEOUT; /* seconds */
+} /* eocCNUPortTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocCNUPortTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocCNUPortTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocCNUPortTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocCNUPortTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocCNUPortTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocCNUPortTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocCNUPortTable_container_load(netsnmp_container *container)
+{
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+ int rc = MFD_SUCCESS;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocCNUPortCBATCardIndex(1)/
+ * INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPortCBATCardIndex = 0;
+ /*
+ * eocCNUPortCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPortCNUIndex;
+ /*
+ * eocCNUPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUPortIndex;
+
+ u_long eocCNUPortEN = 0;
+ long eocCNUPortService = 0;
+
+ int i, j;
+ int port_count;
+
+ /* declarations for calls to libspid */
+ char mac_str[LIBSPID_MAC_STR_LEN];
+ char *index_str;
+ libspid_eoc_wl_entry_t eoc_wl_entry;
+ int tei;
+ int ret;
+
+ /* port entries read from config file */
+ libspid_eoc_port_entry_t port_entries[LIBSPID_PORT_TOTAL_MAX];
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocCNUPortTable container.
+ * loop over your eocCNUPortTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ memset (port_entries, 0x0, sizeof (port_entries));
+ /* check errors in contents of port list prior to
+ * reading and log message if errors are found */
+ if (LIBSPID_SUCCESS != libspid_eoc_port_check ())
+ {
+ snmp_log (LOG_ERR,
+ "errors detected in port config file, refer to syslog\n");
+ }
+ /* get current contents of port config file */
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_port_get_list (port_entries, &port_count))
+ {
+ snmp_log (LOG_ERR, "port config file not read correctly\n");
+ return MFD_ERROR;
+ }
+
+ if (0 == port_count)
+ {
+ rc = MFD_END_OF_DATA;
+ }
+
+ DEBUGMSGTL (("verbose:eocCNUPortTable:eocCNUPortTable_container_load",
+ "port_count = %d\n", port_count));
+
+ for (i = 0; i < port_count; i++)
+ {
+
+ /* parse port index from port entry */
+ if (1 != sscanf (port_entries[i].port_index, "%d", &eocCNUPortIndex))
+ {
+ snmp_log (LOG_ERR,
+ "parsing failed, setting port index to invalid\n");
+ eocCNUPortIndex = INVALID_EOCCNUPORTINDEX;
+ }
+
+ /* copy MAC address from port entry to avoid
+ * being corrupted by call to read_line in wl_get */
+ strncpy (mac_str, port_entries[i].mac_addr, LIBSPID_MAC_STR_LEN);
+
+
+ memset (&eoc_wl_entry, 0, sizeof (eoc_wl_entry));
+
+ /* get white list entry for current MAC address */
+ ret = libspid_eoc_wl_get (mac_str, &eoc_wl_entry);
+
+ if (LIBSPID_SUCCESS == ret)
+ {
+ /* parse current TEI from white list entry */
+ if (1 != sscanf (eoc_wl_entry.tei, "%d", &tei))
+ {
+ snmp_log (LOG_ERR,
+ "error parsing TEI from white list entry, "
+ "setting CNUIndex value to invalid\n");
+ eocCNUPortCNUIndex = INVALID_EOCCNUPORTCNUINDEX;
+ }
+ else
+ {
+ /* convert current TEI to slave index */
+ eocCNUPortCNUIndex = tei - 2;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR,
+ "PortTable_container_load: "
+ "cannot find White list entry with current MAC, "
+ "setting CNUIndex value to invalid\n");
+ eocCNUPortCNUIndex = INVALID_EOCCNUPORTCNUINDEX;
+ }
+
+ /*
+ * TODO:352:M: | |-> set indexes in new eocCNUPortTable rowreq
+ * context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocCNUPortTable_allocate_rowreq_ctx (NULL);
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if (MFD_SUCCESS !=
+ eocCNUPortTable_indexes_set (rowreq_ctx,
+ eocCNUPortCBATCardIndex,
+ eocCNUPortCNUIndex,
+ eocCNUPortIndex))
+ {
+ snmp_log (LOG_ERR,
+ "error setting index while loading "
+ "eocCNUPortTable data.\n");
+ eocCNUPortTable_release_rowreq_ctx (rowreq_ctx);
+ continue;
+ }
+
+ /* copy slave MAC address to row request context */
+ strcpy (rowreq_ctx->data.eocCNUPortMACAddress,
+ port_entries[i].mac_addr);
+
+ /*
+ * TODO:352:r: | |-> populate eocCNUPortTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocCNUPortEN
+ * eocCNUPortEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ if (1 != sscanf (port_entries[i].port_en, "%u", &eocCNUPortEN))
+ {
+ snmp_log (LOG_ERR,
+ "parsing failed, setting port enable to invalid\n");
+ eocCNUPortEN = INVALID_EOCCNUPORTEN;
+ }
+
+ /*
+ * TODO:246:r: |-> Define eocCNUPortEN mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * enums usually need mapping.
+ */
+ /* mapping unnecessary here */
+ rowreq_ctx->data.eocCNUPortEN = eocCNUPortEN;
+
+ /*
+ * setup/save data for eocCNUPortService
+ * eocCNUPortService(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ if (1 != sscanf (port_entries[i].service_index, "%d",
+ &eocCNUPortService))
+ {
+ snmp_log (LOG_ERR,
+ "parsing failed, setting port service to invalid\n");
+ eocCNUPortService = INVALID_EOCCNUPORTSERVICE;
+ }
+
+ /*
+ * TODO:246:r: |-> Define eocCNUPortService mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * Integer based value can usually just do a direct copy.
+ */
+ rowreq_ctx->data.eocCNUPortService = eocCNUPortService;
+
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT (container, rowreq_ctx);
+ ++count;
+ }
+
+
+ DEBUGMSGT (("verbose:eocCNUPortTable:eocCNUPortTable_container_load",
+ "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+}
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocCNUPortTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocCNUPortTable container data.
+ */
+} /* eocCNUPortTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocCNUPortTable_row_prep( eocCNUPortTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUPortTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.h
new file mode 100644
index 0000000000..c7c268725c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_access.h
@@ -0,0 +1,71 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUPORTTABLE_DATA_ACCESS_H
+#define EOCCNUPORTTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortTable is subid 3 of eocCNUPort.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3, length: 12
+*/
+
+#define INVALID_EOCCNUPORTCNUINDEX (-2)
+#define INVALID_EOCCNUPORTINDEX (-2)
+#define INVALID_EOCCNUPORTEN 2
+#define INVALID_EOCCNUPORTSERVICE (-1)
+#define INVALID_EOCCNUPORTVLANTAGEN 2
+#define INVALID_EOCCNUPORTVLANMARKID (-1)
+
+
+
+ int eocCNUPortTable_init_data(eocCNUPortTable_registration * eocCNUPortTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocCNUPortTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCCNUPORTTABLE_CACHE_TIMEOUT 60
+
+void eocCNUPortTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocCNUPortTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocCNUPortTable_container_load(netsnmp_container *container);
+void eocCNUPortTable_container_free(netsnmp_container *container);
+
+int eocCNUPortTable_cache_load(netsnmp_container *container);
+void eocCNUPortTable_cache_free(netsnmp_container *container);
+
+ int eocCNUPortTable_row_prep( eocCNUPortTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUPORTTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_get.c
new file mode 100644
index 0000000000..e43a0e6f85
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_get.c
@@ -0,0 +1,222 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUPortTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocCNUPortTable get routines.
+ * TODO:240:M: Implement eocCNUPortTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortTable is subid 3 of eocCNUPort.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3, length: 12
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocCNUPortTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocCNUPortCBATCardIndex_val
+ * @param eocCNUPortCNUIndex_val
+ * @param eocCNUPortIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocCNUPortTable_indexes_set_tbl_idx(eocCNUPortTable_mib_index *tbl_idx, long eocCNUPortCBATCardIndex_val, long eocCNUPortCNUIndex_val, long eocCNUPortIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocCNUPortCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCNUPortCBATCardIndex = eocCNUPortCBATCardIndex_val;
+
+ /* eocCNUPortCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCNUPortCNUIndex = eocCNUPortCNUIndex_val;
+
+ /* eocCNUPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCNUPortIndex = eocCNUPortIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUPortTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocCNUPortTable_indexes_set(eocCNUPortTable_rowreq_ctx *rowreq_ctx, long eocCNUPortCBATCardIndex_val, long eocCNUPortCNUIndex_val, long eocCNUPortIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocCNUPortTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocCNUPortCBATCardIndex_val
+ , eocCNUPortCNUIndex_val
+ , eocCNUPortIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocCNUPortTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUPortTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortEntry.eocCNUPortEN
+ * eocCNUPortEN is subid 4 of eocCNUPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3.1.4
+ * Description:
+CNU¶Ë¿ÚÆô¶¯»ò¹Ø±Õ£¬0±íʾ½ûÖ¹£¬1±íʾʹÄÜ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUPortEN data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUPortEN_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUPortEN_get( eocCNUPortTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUPortEN_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUPortEN_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortEN_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUPortEN data.
+ * copy (* eocCNUPortEN_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUPortEN_val_ptr ) = rowreq_ctx->data.eocCNUPortEN;
+
+ return MFD_SUCCESS;
+} /* eocCNUPortEN_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortEntry.eocCNUPortService
+ * eocCNUPortService is subid 5 of eocCNUPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3.1.5
+ * Description:
+CNU¶Ë¿ÚÒµÎñË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUPortService data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUPortService_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUPortService_get( eocCNUPortTable_rowreq_ctx *rowreq_ctx, long * eocCNUPortService_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUPortService_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortService_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUPortService data.
+ * copy (* eocCNUPortService_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUPortService_val_ptr ) = rowreq_ctx->data.eocCNUPortService;
+
+ return MFD_SUCCESS;
+} /* eocCNUPortService_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_get.h
new file mode 100644
index 0000000000..4ec85843bd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_get.h
@@ -0,0 +1,60 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocCNUPortTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCCNUPORTTABLE_DATA_GET_H
+#define EOCCNUPORTTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortTable is subid 3 of eocCNUPort.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3, length: 12
+*/
+ /*
+ * indexes
+ */
+
+ int eocCNUPortEN_get( eocCNUPortTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUPortEN_val_ptr );
+ int eocCNUPortService_get( eocCNUPortTable_rowreq_ctx *rowreq_ctx, long * eocCNUPortService_val_ptr );
+
+
+int eocCNUPortTable_indexes_set_tbl_idx(eocCNUPortTable_mib_index *tbl_idx, long eocCNUPortCBATCardIndex_val, long eocCNUPortCNUIndex_val, long eocCNUPortIndex_val);
+int eocCNUPortTable_indexes_set(eocCNUPortTable_rowreq_ctx *rowreq_ctx, long eocCNUPortCBATCardIndex_val, long eocCNUPortCNUIndex_val, long eocCNUPortIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUPORTTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_set.c
new file mode 100644
index 0000000000..748c44c362
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_set.c
@@ -0,0 +1,885 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUPortTable.h"
+#include "libspid.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortTable is subid 3 of eocCNUPort.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3, length: 12
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocCNUPortTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocCNUPortTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUPortTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUPortTable_undo_setup( eocCNUPortTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocCNUPortTable undo.
+ * set up eocCNUPortTable undo information, in preparation for a set.
+ * Undo storage is in (* eocCNUPortService_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUPortTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUPortTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUPortTable_undo( eocCNUPortTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocCNUPortTable undo.
+ * eocCNUPortTable undo information, in response to a failed set.
+ * Undo storage is in (* eocCNUPortService_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUPortTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUPortTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUPortTable_undo_cleanup( eocCNUPortTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocCNUPortTable undo.
+ * Undo storage is in (* eocCNUPortService_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUPortTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUPortTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUPortTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUPortTable_commit( eocCNUPortTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+ int ret;
+ libspid_eoc_port_entry_t port_entry;
+ char port_key[LIBSPID_LINE_MAX_LEN];
+ DEBUGMSGTL (("verbose:eocCNUPortTable:eocCNUPortTable_commit",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert ( NULL != rowreq_ctx );
+
+ /* check if current MAC address is valid */
+ netsnmp_assert (NULL != rowreq_ctx->data.eocCNUPortMACAddress);
+
+ /* initialize port entry */
+ memset (&port_entry, 0, sizeof (port_entry));
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocCNUPortTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (0 == save_flags)
+ {
+ DEBUGMSGTL (("modEoCCNUPortTable:modEoCCNUPortTable_commit",
+ "no change\n"));
+ return MFD_SUCCESS;
+ }
+
+ if (save_flags & COLUMN_EOCCNUPORTEN_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNUPORTEN_FLAG; /* clear eocCNUPortEN */
+ /*
+ * set flag, in case we need to undo eocCNUPortEN
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUPORTEN_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUPORTSERVICE_FLAG)
+ {
+ /* clear eocCNUPortService */
+ save_flags &= ~COLUMN_EOCCNUPORTSERVICE_FLAG;
+ /*
+ * set flag, in case we need to undo modEoCCNUPortService
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUPORTSERVICE_FLAG;
+ }
+
+ /* convert port index to string */
+ sprintf (port_key, "%ld", rowreq_ctx->tbl_idx.eocCNUPortIndex);
+
+ /* read existing line from configuration file */
+ ret = libspid_eoc_port_get (
+ rowreq_ctx->data.eocCNUPortMACAddress,
+ port_key, &port_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_get error\n");
+ return MFD_ERROR;
+ }
+
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUPORTEN_FLAG)
+ {
+ /* copy port enable to port entry */
+ sprintf (port_entry.port_en, "%lu", rowreq_ctx->data.eocCNUPortEN);
+ }
+
+ /* VLANTagEN and VLANMarkID for port entry are set to 0 along with service */
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUPORTSERVICE_FLAG)
+ {
+ /* copy service to port entry */
+ sprintf (port_entry.service_index, "%ld",
+ rowreq_ctx->data.eocCNUPortService);
+ sprintf (port_entry.vlan_tag_en, "%lu", 0);
+ sprintf (port_entry.vlan_mark_id, "%ld", 0);
+ }
+
+ /* check configuration file before attempting
+ * synchronization of port list */
+ if (LIBSPID_SUCCESS != libspid_eoc_port_check ())
+ {
+ snmp_log (LOG_ERR,
+ "errors detected in port configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+ /* write modified line to configuration file */
+ DEBUGMSGTL (("mac Addr %s\r\n", rowreq_ctx->data.eocCNUPortMACAddress));
+ ret = libspid_eoc_port_set (
+ rowreq_ctx->data.eocCNUPortMACAddress,
+ port_key, &port_entry);
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_set error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ DEBUGMSGTL (("modEoCCNUPortTable_commit",
+ "line succesfully written to conf file!\n"));
+ }
+
+ /* propagate port list changes */
+ ret = libspid_eoc_port_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync succeeded\n");
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc)
+ {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags)
+ {
+ snmp_log (LOG_ERR, "unhandled columns (0x%x) in commit\n", save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocCNUPortTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUPortTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUPortTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUPortTable_undo_commit( eocCNUPortTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int ret;
+ libspid_eoc_port_entry_t port_entry;
+ char port_key[LIBSPID_LINE_MAX_LEN];
+
+ DEBUGMSGTL (("verbose:eocCNUPortTable:eocCNUPortTable_undo_commit",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx );
+
+ memset (&port_entry, 0, sizeof (port_entry));
+ /*
+ * TODO:485:M: |-> Undo eocCNUPortTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+ /* convert port index to string */
+ sprintf (port_key, "%ld", rowreq_ctx->tbl_idx.eocCNUPortIndex);
+
+ /* read existing line from configuration file */
+ ret = libspid_eoc_port_get (
+ rowreq_ctx->data.eocCNUPortMACAddress,
+ port_key, &port_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_get error\n");
+ return MFD_ERROR;
+ }
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUPORTEN_FLAG)
+ {
+ /* copy port enable to port entry */
+ sprintf (port_entry.port_en, "%lu", rowreq_ctx->undo->eocCNUPortEN);
+ /* copy VLAN Mark ID to port entry (in case it needs undoing) */
+ }
+ /* VLANTagEN and VLANMarkID for port are restored to 0 along with service */
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUPORTSERVICE_FLAG)
+ {
+ /* copy service to port entry */
+ sprintf (port_entry.service_index, "%ld",
+ rowreq_ctx->undo->eocCNUPortService);
+ sprintf (port_entry.vlan_tag_en, "%ld", 0);
+ sprintf (port_entry.vlan_mark_id, "%ld", 0);
+ }
+
+ /* check configuration file before attempting
+ * synchronization of port list */
+ if (LIBSPID_SUCCESS != libspid_eoc_port_check ())
+ {
+ snmp_log (LOG_ERR,
+ "errors detected in port configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ /* write modified line to configuration file */
+
+ DEBUGMSGTL (("mac Addr %s\r\n",
+ rowreq_ctx->data.eocCNUPortMACAddress));
+ ret = libspid_eoc_port_set (
+ rowreq_ctx->data.eocCNUPortMACAddress,
+ port_key, &port_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_line_error\n");
+ DEBUGMSGTL (("modEoCCNUPortTable_undo_commit",
+ "libspid_config_write_line () returned error: %d\n",
+ ret));
+ return MFD_ERROR;
+ }
+ else
+ {
+ DEBUGMSGTL (("modEoCCNUPortTable_undo_commit",
+ "line succesfully written to conf file!\n"));
+ }
+
+ /* propagate port list changes */
+ ret = libspid_eoc_port_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync succeeded\n");
+ }
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc)
+ {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocCNUPortTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocCNUPortTable node value checks.
+ * TODO:450:M: Implement eocCNUPortTable undo functions.
+ * TODO:460:M: Implement eocCNUPortTable set functions.
+ * TODO:480:M: Implement eocCNUPortTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortEntry.eocCNUPortEN
+ * eocCNUPortEN is subid 4 of eocCNUPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3.1.4
+ * Description:
+CNU¶Ë¿ÚÆô¶¯»ò¹Ø±Õ£¬0±íʾ½ûÖ¹£¬1±íʾʹÄÜ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUPortEN_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUPortTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of disable(0), enable(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUPortEN_check_value( eocCNUPortTable_rowreq_ctx *rowreq_ctx, u_long eocCNUPortEN_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortEN_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUPortEN value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUPortEN value not illegal */
+} /* eocCNUPortEN_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUPortTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUPortTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUPortEN_undo_setup( eocCNUPortTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortEN_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUPortEN undo.
+ */
+ /*
+ * copy eocCNUPortEN data
+ * set rowreq_ctx->undo->eocCNUPortEN from rowreq_ctx->data.eocCNUPortEN
+ */
+ rowreq_ctx->undo->eocCNUPortEN = rowreq_ctx->data.eocCNUPortEN;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUPortEN_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUPortEN_val
+ * A long containing the new value.
+ */
+int
+eocCNUPortEN_set( eocCNUPortTable_rowreq_ctx *rowreq_ctx, u_long eocCNUPortEN_val )
+{
+ char key_buffer[LIBSPID_KEY_MAX_LEN] = {0};
+ const char delimiters[2] = LIBSPID_SERVICE_CONF_DELIMITER "\0";
+ char buffer[LIBSPID_KEY_MAX_LEN] = {0};
+ unsigned int elt_number = LIBSPID_ELT_MAX_NB;
+ char *elt_buffer[LIBSPID_ELT_MAX_NB] = {0};
+
+ u_long value;
+
+ DEBUGMSGTL (("verbose:eocCNUPortTable:eocCNUPortEN_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:245:o: |-> Implement eocCNUPortEN reverse mapping.
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them here.
+ */
+ rowreq_ctx->data.eocCNUPortEN = eocCNUPortEN_val;
+
+ return MFD_SUCCESS;
+} /* eocCNUPortEN_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUPortEN_undo( eocCNUPortTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortEN_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUPortEN undo.
+ */
+ /*
+ * copy eocCNUPortEN data
+ * set rowreq_ctx->data.eocCNUPortEN from rowreq_ctx->undo->eocCNUPortEN
+ */
+ rowreq_ctx->data.eocCNUPortEN = rowreq_ctx->undo->eocCNUPortEN;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUPortEN_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortEntry.eocCNUPortService
+ * eocCNUPortService is subid 5 of eocCNUPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3.1.5
+ * Description:
+CNU¶Ë¿ÚÒµÎñË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUPortService_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUPortTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUPortService_check_value( eocCNUPortTable_rowreq_ctx *rowreq_ctx, long eocCNUPortService_val)
+{
+ /* declarations for calls to libspid */
+ char key_buffer[LIBSPID_KEY_MAX_LEN] = {0};
+ const char delimiters[2] = LIBSPID_SERVICE_CONF_DELIMITER "\0";
+ char buffer[LIBSPID_LINE_MAX_LEN] = {0};
+ unsigned int elt_number = LIBSPID_ELT_MAX_NB;
+ char *elt_buffer[LIBSPID_ELT_MAX_NB] = {0};
+
+ DEBUGMSGTL (("verbose:eocCNUPortTable:eocCNUPortService_check_value",
+ "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUPortService value.
+ */
+ /* check that proposed service value is between 0 and max allowed */
+ if ((eocCNUPortService_val < 0) ||
+ (eocCNUPortService_val > LIBSPID_SERVICE_AMOUNT_LIMIT))
+ {
+ DEBUGMSGTL(("The Value Is Error:%d",eocCNUPortService_val));
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ if (0 == eocCNUPortService_val)
+ {
+ return MFD_SUCCESS;
+ }
+
+ /* convert proposed service value to string to
+ * serve as key for service configuration file */
+ sprintf (key_buffer, "%ld", eocCNUPortService_val);
+
+ /* check that proposed service string exists in
+ * service configuration file */
+ if (LIBSPID_SUCCESS !=
+ libspid_config_read_line (LIBSPID_SERVICE_CONF_PATH,
+ delimiters, key_buffer,
+ &elt_number, elt_buffer,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_line error\n");
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ return MFD_SUCCESS;
+}
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUPortTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUPortTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUPortService_undo_setup( eocCNUPortTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortService_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUPortService undo.
+ */
+ /*
+ * copy eocCNUPortService data
+ * set rowreq_ctx->undo->eocCNUPortService from rowreq_ctx->data.eocCNUPortService
+ */
+ rowreq_ctx->undo->eocCNUPortService = rowreq_ctx->data.eocCNUPortService;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUPortService_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUPortService_val
+ * A long containing the new value.
+ */
+int
+eocCNUPortService_set( eocCNUPortTable_rowreq_ctx *rowreq_ctx, long eocCNUPortService_val )
+{
+ /* declarations for calls to libspid */
+ char key_buffer[LIBSPID_KEY_MAX_LEN] = {0};
+ const char delimiters[2] = LIBSPID_SERVICE_CONF_DELIMITER "\0";
+ char buffer[LIBSPID_LINE_MAX_LEN] = {0};
+ unsigned int elt_number = LIBSPID_ELT_MAX_NB;
+ char *elt_buffer[LIBSPID_ELT_MAX_NB] = {0};
+ u_long value;
+
+ DEBUGMSGTL (("verbose:eocCNUPortTable:eocCNUPortService_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUPortService value.
+ * set eocCNUPortService value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocCNUPortService = eocCNUPortService_val;
+
+ return MFD_SUCCESS;
+} /* eocCNUPortService_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUPortService_undo( eocCNUPortTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortService_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUPortService undo.
+ */
+ /*
+ * copy eocCNUPortService data
+ * set rowreq_ctx->data.eocCNUPortService from rowreq_ctx->undo->eocCNUPortService
+ */
+ rowreq_ctx->data.eocCNUPortService = rowreq_ctx->undo->eocCNUPortService;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUPortService_undo */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_set.h
new file mode 100644
index 0000000000..1427aa027b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_data_set.h
@@ -0,0 +1,60 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUPORTTABLE_DATA_SET_H
+#define EOCCNUPORTTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortTable is subid 3 of eocCNUPort.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3, length: 12
+*/
+
+
+int eocCNUPortTable_undo_setup( eocCNUPortTable_rowreq_ctx *rowreq_ctx);
+int eocCNUPortTable_undo_cleanup( eocCNUPortTable_rowreq_ctx *rowreq_ctx);
+int eocCNUPortTable_undo( eocCNUPortTable_rowreq_ctx *rowreq_ctx);
+int eocCNUPortTable_commit( eocCNUPortTable_rowreq_ctx *rowreq_ctx);
+int eocCNUPortTable_undo_commit( eocCNUPortTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocCNUPortEN_check_value( eocCNUPortTable_rowreq_ctx *rowreq_ctx, u_long eocCNUPortEN_val);
+int eocCNUPortEN_undo_setup( eocCNUPortTable_rowreq_ctx *rowreq_ctx );
+int eocCNUPortEN_set( eocCNUPortTable_rowreq_ctx *rowreq_ctx, u_long eocCNUPortEN_val );
+int eocCNUPortEN_undo( eocCNUPortTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUPortService_check_value( eocCNUPortTable_rowreq_ctx *rowreq_ctx, long eocCNUPortService_val);
+int eocCNUPortService_undo_setup( eocCNUPortTable_rowreq_ctx *rowreq_ctx );
+int eocCNUPortService_set( eocCNUPortTable_rowreq_ctx *rowreq_ctx, long eocCNUPortService_val );
+int eocCNUPortService_undo( eocCNUPortTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocCNUPortTable_check_dependencies(eocCNUPortTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUPORTTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_enums.h
new file mode 100644
index 0000000000..2f9b2bd934
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_enums.h
@@ -0,0 +1,56 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUPORTTABLE_ENUMS_H
+#define EOCCNUPORTTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocCNUPortTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUPortEN (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUPORTEN_ENUMS
+#define EOCCNUPORTEN_ENUMS
+
+#define EOCCNUPORTEN_DISABLE 0
+#define EOCCNUPORTEN_ENABLE 1
+
+#endif /* EOCCNUPORTEN_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUPORTTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_interface.c
new file mode 100644
index 0000000000..4fd85d10f9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_interface.c
@@ -0,0 +1,1565 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUPortTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocCNUPortTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUPortTable is subid 3 of eocCNUPort.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.4.3, length: 12
+*/
+typedef struct eocCNUPortTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocCNUPortTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocCNUPortTable_interface_ctx;
+
+static eocCNUPortTable_interface_ctx eocCNUPortTable_if_ctx;
+
+static void _eocCNUPortTable_container_init(
+ eocCNUPortTable_interface_ctx *if_ctx);
+static void _eocCNUPortTable_container_shutdown(
+ eocCNUPortTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocCNUPortTable_container_get( void )
+{
+ return eocCNUPortTable_if_ctx.container;
+}
+
+eocCNUPortTable_registration *
+eocCNUPortTable_registration_get( void )
+{
+ return eocCNUPortTable_if_ctx.user_ctx;
+}
+
+eocCNUPortTable_registration *
+eocCNUPortTable_registration_set( eocCNUPortTable_registration * newreg )
+{
+ eocCNUPortTable_registration * old = eocCNUPortTable_if_ctx.user_ctx;
+ eocCNUPortTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocCNUPortTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocCNUPortTable_if_ctx.container);
+}
+
+u_int
+eocCNUPortTable_dirty_get( void )
+{
+ return eocCNUPortTable_if_ctx.table_dirty;
+}
+
+void
+eocCNUPortTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocCNUPortTable:eocCNUPortTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocCNUPortTable_if_ctx.table_dirty, status));
+ eocCNUPortTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocCNUPortTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocCNUPortTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocCNUPortTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocCNUPortTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocCNUPortTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocCNUPortTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocCNUPortTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocCNUPortTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocCNUPortTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocCNUPortTable_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUPortTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUPortTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int _eocCNUPortTable_undo_column( eocCNUPortTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+eocCNUPortTable_data *eocCNUPortTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table eocCNUPortTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocCNUPortTable_initialize_interface(eocCNUPortTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocCNUPortTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocCNUPortTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_eocCNUPortTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocCNUPortTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocCNUPortCBATCardIndex */
+ ASN_INTEGER, /** index: eocCNUPortCNUIndex */
+ ASN_INTEGER, /** index: eocCNUPortIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCCNUPORTTABLE_MIN_COL;
+ tbl_info->max_column = EOCCNUPORTTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocCNUPortTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocCNUPortTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocCNUPortTable_container_init(&eocCNUPortTable_if_ctx);
+ if (NULL == eocCNUPortTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocCNUPortTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocCNUPortTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocCNUPortTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocCNUPortTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocCNUPortTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocCNUPortTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocCNUPortTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocCNUPortTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocCNUPortTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocCNUPortTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocCNUPortTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocCNUPortTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocCNUPortTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocCNUPortTable:init_eocCNUPortTable",
+ "Registering eocCNUPortTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocCNUPortTable", handler,
+ eocCNUPortTable_oid,
+ eocCNUPortTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocCNUPortTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocCNUPortTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocCNUPortTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocCNUPortTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocCNUPortTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocCNUPortTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocCNUPortTable
+ */
+void
+_eocCNUPortTable_shutdown_interface(eocCNUPortTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocCNUPortTable_container_shutdown(&eocCNUPortTable_if_ctx);
+}
+
+void
+eocCNUPortTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocCNUPortTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocCNUPortTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocCNUPortTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUPortTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUPortCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUPortCBATCardIndex;
+ /*
+ * eocCNUPortCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUPortCNUIndex;
+ /*
+ * eocCNUPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUPortIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUPortCBATCardIndex, 0x00, sizeof(var_eocCNUPortCBATCardIndex) );
+ var_eocCNUPortCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocCNUPortCNUIndex, 0x00, sizeof(var_eocCNUPortCNUIndex) );
+ var_eocCNUPortCNUIndex.type = ASN_INTEGER;
+ memset( &var_eocCNUPortIndex, 0x00, sizeof(var_eocCNUPortIndex) );
+ var_eocCNUPortIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUPortCBATCardIndex.next_variable = &var_eocCNUPortCNUIndex; var_eocCNUPortCNUIndex.next_variable = &var_eocCNUPortIndex; var_eocCNUPortIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_index_to_oid","called\n"));
+
+ /* eocCNUPortCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCNUPortCBATCardIndex, (u_char*)&mib_idx->eocCNUPortCBATCardIndex,
+ sizeof(mib_idx->eocCNUPortCBATCardIndex));
+
+ /* eocCNUPortCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCNUPortCNUIndex, (u_char*)&mib_idx->eocCNUPortCNUIndex,
+ sizeof(mib_idx->eocCNUPortCNUIndex));
+
+ /* eocCNUPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCNUPortIndex, (u_char*)&mib_idx->eocCNUPortIndex,
+ sizeof(mib_idx->eocCNUPortIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocCNUPortCBATCardIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUPortCBATCardIndex );
+
+ return err;
+} /* eocCNUPortTable_index_to_oid */
+
+/**
+ * extract eocCNUPortTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocCNUPortTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUPortTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUPortCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUPortCBATCardIndex;
+ /*
+ * eocCNUPortCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUPortCNUIndex;
+ /*
+ * eocCNUPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUPortIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUPortCBATCardIndex, 0x00, sizeof(var_eocCNUPortCBATCardIndex) );
+ var_eocCNUPortCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocCNUPortCNUIndex, 0x00, sizeof(var_eocCNUPortCNUIndex) );
+ var_eocCNUPortCNUIndex.type = ASN_INTEGER;
+ memset( &var_eocCNUPortIndex, 0x00, sizeof(var_eocCNUPortIndex) );
+ var_eocCNUPortIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUPortCBATCardIndex.next_variable = &var_eocCNUPortCNUIndex; var_eocCNUPortCNUIndex.next_variable = &var_eocCNUPortIndex; var_eocCNUPortIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocCNUPortCBATCardIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocCNUPortCBATCardIndex = *((long *)var_eocCNUPortCBATCardIndex.val.string);
+ mib_idx->eocCNUPortCNUIndex = *((long *)var_eocCNUPortCNUIndex.val.string);
+ mib_idx->eocCNUPortIndex = *((long *)var_eocCNUPortIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUPortCBATCardIndex );
+
+ return err;
+} /* eocCNUPortTable_index_from_oid */
+
+
+/*
+ * eocCNUPortTable_allocate_data
+ *
+ * Purpose: create new eocCNUPortTable_data.
+ */
+eocCNUPortTable_data *
+eocCNUPortTable_allocate_data(void)
+{
+ eocCNUPortTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocCNUPortTable_data);
+
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocCNUPortTable_data.\n");
+ }
+
+ return rtn;
+} /* eocCNUPortTable_allocate_data */
+
+/*
+ * eocCNUPortTable_release_data
+ *
+ * Purpose: release eocCNUPortTable data.
+ */
+void
+eocCNUPortTable_release_data(eocCNUPortTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocCNUPortTable:eocCNUPortTable_release_data","called\n"));
+
+ free(data);
+} /* eocCNUPortTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocCNUPortTable_rowreq_ctx
+ */
+eocCNUPortTable_rowreq_ctx *
+eocCNUPortTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocCNUPortTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:eocCNUPortTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocCNUPortTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocCNUPortTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocCNUPortTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocCNUPortTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocCNUPortTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocCNUPortTable_rowreq_ctx
+ */
+void
+eocCNUPortTable_release_rowreq_ctx(eocCNUPortTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUPortTable:eocCNUPortTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocCNUPortTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if(rowreq_ctx->undo)
+ eocCNUPortTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocCNUPortTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUPortTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUPortTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocCNUPortTable_pre_request(eocCNUPortTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUPortTable","error %d from "
+ "eocCNUPortTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUPortTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUPortTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocCNUPortTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUPortTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocCNUPortTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocCNUPortTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocCNUPortTable_post_request(eocCNUPortTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUPortTable","error %d from "
+ "eocCNUPortTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUPortTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUPortTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocCNUPortTable_interface_ctx *if_ctx =
+ * (eocCNUPortTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocCNUPortTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocCNUPortTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUPortTable_get_column( eocCNUPortTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocCNUPortCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPORTCBATCARDINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCNUPortCBATCardIndex;
+ break;
+
+ /* (INDEX) eocCNUPortCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPORTCNUINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCNUPortCNUIndex;
+ break;
+
+ /* (INDEX) eocCNUPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPORTINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCNUPortIndex;
+ break;
+
+ /* eocCNUPortEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUPORTEN:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUPortEN_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUPortService(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUPORTSERVICE:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUPortService_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ default:
+ if (EOCCNUPORTTABLE_MIN_COL <= column && column <= EOCCNUPORTTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocCNUPortTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocCNUPortTable_get_column */
+
+int
+_mfd_eocCNUPortTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUPortTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUPortTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUPortTable_check_column( eocCNUPortTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_eocCNUPortTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocCNUPortCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPORTCBATCARDINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /* (INDEX) eocCNUPortCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPORTCNUINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /* (INDEX) eocCNUPortIndex(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUPORTINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocCNUPortEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUPORTEN:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUPortEN ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCNUPORTEN_DISABLE )
+ && ( *var->val.integer != EOCCNUPORTEN_ENABLE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUPortTable:_eocCNUPortTable_check_column:eocCNUPortEN",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUPortEN_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUPortEN_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUPortService(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUPORTSERVICE:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUPortService ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUPortTable:_eocCNUPortTable_check_column:eocCNUPortService",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUPortService_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUPortService_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocCNUPortTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocCNUPortTable_check_column */
+
+int
+_mfd_eocCNUPortTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUPortTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUPortTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUPortTable_undo_setup_column( eocCNUPortTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_eocCNUPortTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUPortEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUPORTEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUPORTEN_FLAG;
+ rc = eocCNUPortEN_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUPortService(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUPORTSERVICE:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUPORTSERVICE_FLAG;
+ rc = eocCNUPortService_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUPortTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUPortTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUPortTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocCNUPortTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocCNUPortTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUPortTable:mfd","error %d from "
+ "eocCNUPortTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUPortTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUPortTable:mfd","error %d from "
+ "eocCNUPortTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUPortTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUPortTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocCNUPortTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUPortTable:mfd","error %d from "
+ "eocCNUPortTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if(rowreq_ctx->undo) {
+ eocCNUPortTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUPortTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUPortTable_set_column( eocCNUPortTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_eocCNUPortTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUPortEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUPORTEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUPORTEN_FLAG;
+ rc = eocCNUPortEN_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCNUPortService(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUPORTSERVICE:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUPORTSERVICE_FLAG;
+ rc = eocCNUPortService_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUPortTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocCNUPortTable_set_column */
+
+int
+_mfd_eocCNUPortTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUPortTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUPortTable:mfd","error %d from "
+ "eocCNUPortTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUPortTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocCNUPortTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUPortTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUPortTable:mfd","error %d from "
+ "eocCNUPortTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocCNUPortTable_dirty_set( eocCNUPortTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocCNUPortTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocCNUPortTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocCNUPortTable_dirty_set( d - 1 );
+ }
+
+ rc = eocCNUPortTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUPortTable:mfd","error %d from "
+ "eocCNUPortTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocCNUPortTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUPortTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUPortTable_undo_column( eocCNUPortTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_eocCNUPortTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUPortEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUPORTEN:
+ rc = eocCNUPortEN_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUPortService(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUPORTSERVICE:
+ rc = eocCNUPortService_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUPortTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUPortTable_undo_column */
+
+int
+_mfd_eocCNUPortTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUPortTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUPortTable:mfd","error %d from "
+ "eocCNUPortTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUPortTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUPortTable:mfd","error %d from "
+ "eocCNUPortTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUPortTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocCNUPortTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_mfd_eocCNUPortTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocCNUPortTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUPortTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocCNUPortTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocCNUPortTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocCNUPortTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocCNUPortTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocCNUPortTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocCNUPortTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocCNUPortTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocCNUPortTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocCNUPortTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocCNUPortTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocCNUPortTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocCNUPortTable_container_init(eocCNUPortTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUPortTable:_eocCNUPortTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocCNUPortTable_oid,
+ eocCNUPortTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocCNUPortTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocCNUPortTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocCNUPortTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocCNUPortTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocCNUPortTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocCNUPortTable_container_shutdown(eocCNUPortTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUPortTable:_eocCNUPortTable_container_shutdown","called\n"));
+
+ eocCNUPortTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocCNUPortTable_container_shutdown */
+
+
+eocCNUPortTable_rowreq_ctx *
+eocCNUPortTable_row_find_by_mib_index(eocCNUPortTable_mib_index *mib_idx)
+{
+ eocCNUPortTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocCNUPortTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocCNUPortTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_interface.h
new file mode 100644
index 0000000000..daeb37f81a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_interface.h
@@ -0,0 +1,87 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCCNUPORTTABLE_INTERFACE_H
+#define EOCCNUPORTTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocCNUPortTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocCNUPortTable_initialize_interface(eocCNUPortTable_registration * user_ctx,
+ u_long flags);
+void _eocCNUPortTable_shutdown_interface(eocCNUPortTable_registration * user_ctx);
+
+eocCNUPortTable_registration *
+eocCNUPortTable_registration_get( void );
+
+eocCNUPortTable_registration *
+eocCNUPortTable_registration_set( eocCNUPortTable_registration * newreg );
+
+netsnmp_container *eocCNUPortTable_container_get( void );
+int eocCNUPortTable_container_size( void );
+
+u_int eocCNUPortTable_dirty_get( void );
+void eocCNUPortTable_dirty_set( u_int status );
+
+ eocCNUPortTable_rowreq_ctx * eocCNUPortTable_allocate_rowreq_ctx(void *);
+void eocCNUPortTable_release_rowreq_ctx(eocCNUPortTable_rowreq_ctx *rowreq_ctx);
+
+int eocCNUPortTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUPortTable_mib_index *mib_idx);
+int eocCNUPortTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUPortTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocCNUPortTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUPORTTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_oids.h
new file mode 100644
index 0000000000..b9db76481c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUPort/eocCNUPortTable/eocCNUPortTable_oids.h
@@ -0,0 +1,46 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUPORTTABLE_OIDS_H
+#define EOCCNUPORTTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* column number definitions for table eocCNUPortTable */
+#define EOCCNUPORTTABLE_OID 1,3,6,1,4,1,17409,2,4,5,4,3
+
+
+#define COLUMN_EOCCNUPORTCBATCARDINDEX 1
+
+#define COLUMN_EOCCNUPORTCNUINDEX 2
+
+#define COLUMN_EOCCNUPORTINDEX 3
+
+#define COLUMN_EOCCNUPORTEN 4
+#define COLUMN_EOCCNUPORTEN_FLAG (0x1 << 0)
+
+#define COLUMN_EOCCNUPORTSERVICE 5
+#define COLUMN_EOCCNUPORTSERVICE_FLAG (0x1 << 1)
+
+
+#define EOCCNUPORTTABLE_MIN_COL COLUMN_EOCCNUPORTCBATCARDINDEX
+#define EOCCNUPORTTABLE_MAX_COL COLUMN_EOCCNUPORTSERVICE
+
+
+ /*
+ * TODO:405:r: Review EOCCNUPORTTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCCNUPORTTABLE_SETTABLE_COLS (COLUMN_EOCCNUPORTEN_FLAG | COLUMN_EOCCNUPORTSERVICE_FLAG)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUPORTTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService.h
new file mode 100644
index 0000000000..f50b82ae40
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService.h
@@ -0,0 +1,2 @@
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUService)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUService.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUService.c
new file mode 100644
index 0000000000..bcbf4ae833
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUService.c
@@ -0,0 +1,89 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37: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 "eocCNUService.h"
+
+/** Initializes the eocCNUService module */
+void
+init_eocCNUService(void)
+{
+ static oid eocCNUServiceAmountLimitation_oid[] = { 1,3,6,1,4,1,17409,2,4,5,3,1 };
+
+ DEBUGMSGTL(("eocCNUService", "Initializing\n"));
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCNUServiceAmountLimitation", handle_eocCNUServiceAmountLimitation,
+ eocCNUServiceAmountLimitation_oid, OID_LENGTH(eocCNUServiceAmountLimitation_oid),
+ HANDLER_CAN_RWRITE
+ ));
+}
+
+int
+handle_eocCNUServiceAmountLimitation(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ int amount_limit = LIBSPID_SERVICE_AMOUNT_LIMIT;
+ /* We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) & amount_limit,
+ sizeof (amount_limit));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ break;
+
+ case MODE_SET_RESERVE2:
+ break;
+
+ case MODE_SET_FREE:
+ /* free resources allocated in RESERVE1 and/or
+ * RESERVE2. Something failed somewhere, and the states
+ * below won't be called. */
+ break;
+
+ case MODE_SET_ACTION:
+ /* perform the value change here */
+ netsnmp_set_request_error (reqinfo, requests, SNMP_ERR_NOTWRITABLE);
+ break;
+
+ case MODE_SET_COMMIT:
+ /* delete temporary storage */
+ break;
+
+ case MODE_SET_UNDO:
+ /* UNDO and return to previous value for the object */
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCNUServiceAmountLimitation\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUService.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUService.h
new file mode 100644
index 0000000000..c1d4fa878f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUService.h
@@ -0,0 +1,13 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+ */
+#ifndef EOCCNUSERVICE_H
+#define EOCCNUSERVICE_H
+
+#include "EoCCommon.h"
+/* function declarations */
+void init_eocCNUService(void);
+Netsnmp_Node_Handler handle_eocCNUServiceAmountLimitation;
+
+#endif /* EOCCNUSERVICE_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable.h
new file mode 100644
index 0000000000..d6a82edd9c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_set)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_interface)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_access)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_get)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBADownstreamCIR.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBADownstreamCIR.m2d
new file mode 100644
index 0000000000..8717df2996
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBADownstreamCIR.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUServiceDBADownstreamCIR
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBADownstreamPIR.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBADownstreamPIR.m2d
new file mode 100644
index 0000000000..0c73ad194d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBADownstreamPIR.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUServiceDBADownstreamPIR
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBAUpstreamCIR.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBAUpstreamCIR.m2d
new file mode 100644
index 0000000000..845a0a522a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBAUpstreamCIR.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUServiceDBAUpstreamCIR
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBAUpstreamPIR.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBAUpstreamPIR.m2d
new file mode 100644
index 0000000000..219d1e3989
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceDBAUpstreamPIR.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUServiceDBAUpstreamPIR
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceIndex.m2d
new file mode 100644
index 0000000000..977885f567
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUServiceIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceMaxLatency.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceMaxLatency.m2d
new file mode 100644
index 0000000000..416dc89b4d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceMaxLatency.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUServiceMaxLatency
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceName.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceName.m2d
new file mode 100644
index 0000000000..3ccb546144
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceName.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCNUServiceName
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceQOSPrio.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceQOSPrio.m2d
new file mode 100644
index 0000000000..abccd9c5c4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceQOSPrio.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUServiceQOSPrio
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceRowStatus.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceRowStatus.m2d
new file mode 100644
index 0000000000..aed0a24614
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceRowStatus.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUServiceRowStatus
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceType.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceType.m2d
new file mode 100644
index 0000000000..7e2721e4e3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/node-eocCNUServiceType.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUServiceType
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/table-eocCNUServiceTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/table-eocCNUServiceTable.m2d
new file mode 100644
index 0000000000..44d635d7bd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/defaults/table-eocCNUServiceTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocCNUServiceTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 1@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 1@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable-README-FIRST.txt
new file mode 100644
index 0000000000..f56d773ea9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocCNUServiceTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocCNUServiceTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocCNUServiceTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocCNUServiceTable_Makefile
+
+
+ File : eocCNUServiceTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocCNUServiceTable-README-eocCNUServiceTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocCNUServiceTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocCNUServiceTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocCNUServiceTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocCNUServiceTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable-README-eocCNUServiceTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable-README-eocCNUServiceTable.txt
new file mode 100644
index 0000000000..f313b78ad1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable-README-eocCNUServiceTable.txt
@@ -0,0 +1,1051 @@
+************************************************************************
+eocCNUServiceTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocCNUServiceTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocCNUServiceTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocCNUServiceTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUServiceTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUServiceTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUServiceTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocCNUServiceTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUServiceTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocCNUServiceTable_allocate_data
+ eocCNUServiceTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocCNUServiceTable_rowreq_ctx_init
+ eocCNUServiceTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocCNUServiceTable table
+ ------------------------------------------------------------
+ The index(es) for the eocCNUServiceTable table are:
+
+ eocCNUServiceIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocCNUServiceTable_data.
+
+
+************************************************************************
+eocCNUServiceTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocCNUServiceTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocCNUServiceTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocCNUServiceTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocCNUServiceTable_indexes_set
+ WHERE: eocCNUServiceTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocCNUServiceTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocCNUServiceTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUServiceName_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUServiceType_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUServiceQOSPrio_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUServiceDBADownstreamPIR_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUServiceDBAUpstreamPIR_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUServiceDBADownstreamCIR_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUServiceDBAUpstreamCIR_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUServiceMaxLatency_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUServiceRowStatus_get
+
+
+
+File: eocCNUServiceTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocCNUServiceTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table supports ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+ To support row creation, the index component of an incoming set request must
+ be validated. A funciton is generated for each individual index component,
+ and another for validating all the index components together.
+
+
+ Validate index component
+ ------------------------
+ TODO : validate the specified index component
+ FUNC : eocCNUServiceIndex_check_index
+
+
+ Validate index
+ --------------
+ TODO : check that all index components are valid
+ FUNC : eocCNUServiceTable_validate_index
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocCNUServiceTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUServiceName_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUServiceName_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUServiceName_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUServiceName_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUServiceType_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUServiceType_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUServiceType_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUServiceType_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUServiceQOSPrio_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUServiceQOSPrio_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUServiceQOSPrio_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUServiceQOSPrio_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUServiceDBADownstreamPIR_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUServiceDBADownstreamPIR_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUServiceDBADownstreamPIR_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUServiceDBADownstreamPIR_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUServiceDBAUpstreamPIR_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUServiceDBAUpstreamPIR_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUServiceDBAUpstreamPIR_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUServiceDBAUpstreamPIR_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUServiceDBADownstreamCIR_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUServiceDBADownstreamCIR_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUServiceDBADownstreamCIR_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUServiceDBADownstreamCIR_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUServiceDBAUpstreamCIR_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUServiceDBAUpstreamCIR_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUServiceDBAUpstreamCIR_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUServiceDBAUpstreamCIR_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUServiceMaxLatency_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUServiceMaxLatency_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUServiceMaxLatency_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUServiceMaxLatency_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUServiceRowStatus_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUServiceRowStatus_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUServiceRowStatus_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUServiceRowStatus_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocCNUServiceTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocCNUServiceTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocCNUServiceTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocCNUServiceTable table.
+
+To watch the flow of the eocCNUServiceTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocCNUServiceTable
+ verbose:eocCNUServiceTable
+ internal:eocCNUServiceTable
+
+e.g.
+ snmpd -f -Le -DeocCNUServiceTable,verbose:eocCNUServiceTable,internal:eocCNUServiceTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUServiceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceTable is subid 2 of eocCNUService.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2, length: 12
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceIndex
+ * eocCNUServiceIndex is subid 1 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.1
+ * Description:
+CNUÒµÎñÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceName
+ * eocCNUServiceName is subid 2 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.2
+ * Description:
+CNUÒµÎñÃû³Æ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is OCTETSTR (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceType
+ * eocCNUServiceType is subid 3 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.3
+ * Description:
+ CNUÒµÎñÀàÐÍ¡£¡¯1¡¯=VLAN Id, ¡®2¡¯=COS, ¡®3¡¯=TOS
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceQOSPrio
+ * eocCNUServiceQOSPrio is subid 4 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.4
+ * Description:
+CNUÒµÎñµÄQOSÓÅÏȼ¶£¬0-7¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 7;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceDBADownstreamPIR
+ * eocCNUServiceDBADownstreamPIR is subid 5 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.5
+ * Description:
+CNUÒµÎñÏÂÐÐ×î´ó´ø¿í¡£µ¥Î»kbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceDBAUpstreamPIR
+ * eocCNUServiceDBAUpstreamPIR is subid 6 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.6
+ * Description:
+CNUÒµÎñÉÏÐÐ×î´ó´ø¿í¡£µ¥Î»kbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceDBADownstreamCIR
+ * eocCNUServiceDBADownstreamCIR is subid 7 of eocCNUServiceEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.7
+ * Description:
+CNUÒµÎñÏÂÐб£ÕÏ´ø¿í£¬µ¥Î»kbps¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceDBAUpstreamCIR
+ * eocCNUServiceDBAUpstreamCIR is subid 8 of eocCNUServiceEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.8
+ * Description:
+CNUÒµÎñÉÏÐб£ÕÏ´ø¿í£¬µ¥Î»kbps¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceMaxLatency
+ * eocCNUServiceMaxLatency is subid 9 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.9
+ * Description:
+×î´óÔÊÐíÑÓʱ¡£µ¥Î»ns
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceRowStatus
+ * eocCNUServiceRowStatus is subid 10 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.10
+ * Description:
+ÐÐ״̬£¬ÓÃÓÚ´´½¨¡¢Ð޸ġ¢É¾³ýijһÐУº
+ none_existent(1)- ±íÏî²»´æÔÚ£»
+ avtive(2)- ¼¤»î¸ÃÐУ»
+ notInService(3)- ״̬δ¼¤»î£»
+ notReady(4)- ²»Äܱ»¼¤»î״̬£»
+ createAndGo(5)- ´´½¨²¢¼¤»î£»
+ createAndWait(6)- ´´½¨£¬µ«²»¼¤»î£»
+ destory(7)- Ïú»Ù¸ÃÐС£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable.c
new file mode 100644
index 0000000000..8c9d7fbe3a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable.c
@@ -0,0 +1,244 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocCNUServiceTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUServiceTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocCNUServiceTable_interface.h"
+
+#ifdef USING_SPC300_EOC_MIB_MODULE
+/* header for SPC300 table extension */
+#include "spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable.h"
+#endif /* USING_SPC300_EOC_MIB_MODULE */
+oid eocCNUServiceTable_oid[] = { EOCCNUSERVICETABLE_OID };
+int eocCNUServiceTable_oid_size = OID_LENGTH(eocCNUServiceTable_oid);
+
+ eocCNUServiceTable_registration eocCNUServiceTable_user_context;
+
+void initialize_table_eocCNUServiceTable(void);
+void shutdown_table_eocCNUServiceTable(void);
+
+
+/**
+ * Initializes the eocCNUServiceTable module
+ */
+void
+init_eocCNUServiceTable(void)
+{
+ static int eocCNUServiceTable_did_init = 0;
+
+ DEBUGMSGTL (("verbose:eocCNUServiceTable:init_eocCNUServiceTable",
+ "called\n"));
+
+ /*
+ * TODO:300:o: Perform eocCNUServiceTable one-time module initialization.
+ */
+ if (++eocCNUServiceTable_did_init != 1)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable:init_eocCNUServiceTable",
+ "ignoring duplicate call\n"));
+ return;
+ }
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init ("eocCNUServiceTable"))
+ {
+ initialize_table_eocCNUServiceTable ();
+
+#ifdef USING_SPC300_EOC_MIB_MODULE
+ if (should_init ("spc300EoCSlaveServiceTable"))
+ initialize_table_spc300EoCSlaveServiceTable ();
+#endif
+ }
+
+} /* init_eocCNUServiceTable */
+
+/**
+ * Shut-down the eocCNUServiceTable module (agent is exiting)
+ */
+void
+shutdown_eocCNUServiceTable(void)
+{
+ if (should_init("eocCNUServiceTable"))
+ shutdown_table_eocCNUServiceTable();
+
+}
+
+/**
+ * Initialize the table eocCNUServiceTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocCNUServiceTable(void)
+{
+ eocCNUServiceTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:initialize_table_eocCNUServiceTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocCNUServiceTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocCNUServiceTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context =
+ netsnmp_create_data_list ("eocCNUServiceTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocCNUServiceTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocCNUServiceTable */
+
+/**
+ * Shutdown the table eocCNUServiceTable
+ */
+void
+shutdown_table_eocCNUServiceTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocCNUServiceTable_shutdown_interface(&eocCNUServiceTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocCNUServiceTable_rowreq_ctx_init (eocCNUServiceTable_rowreq_ctx *
+ rowreq_ctx, void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocCNUServiceTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocCNUServiceTable_rowreq_ctx_cleanup(eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocCNUServiceTable rowreq cleanup.
+ */
+ if (NULL != rowreq_ctx->data)
+ {
+ eocCNUServiceTable_release_data (rowreq_ctx->data);
+ rowreq_ctx->data = NULL;
+ }
+} /* eocCNUServiceTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocCNUServiceTable_pre_request(eocCNUServiceTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocCNUServiceTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocCNUServiceTable_post_request(eocCNUServiceTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocCNUServiceTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocCNUServiceTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocCNUServiceTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable.h
new file mode 100644
index 0000000000..2651cdb013
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable.h
@@ -0,0 +1,262 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUSERVICETABLE_H
+#define EOCCNUSERVICETABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+
+/* OID and column number definitions for eocCNUServiceTable */
+#include "eocCNUServiceTable_oids.h"
+
+/* enum definions */
+#include "eocCNUServiceTable_enums.h"
+
+#ifdef USING_SPC300_EOC_MIB_MODULE
+/* includes for columns in SPC300 table extension */
+#include "spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveServiceTable/spc300EoCSlaveServiceTable_oids.h"
+#endif /* USING_SPC300_EOC_MIB_MODULE */
+
+/* include common header */
+#include "EoCCommon.h"
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocCNUServiceTable(void);
+void shutdown_eocCNUServiceTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUServiceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceTable is subid 2 of eocCNUService.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2, length: 12
+*/
+/* *********************************************************************
+ * 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 eocCNUServiceTable registration context.
+ */
+typedef netsnmp_data_list eocCNUServiceTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocCNUServiceTable data context structure.
+ * This structure is used to represent the data for eocCNUServiceTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocCNUServiceTable.
+ */
+typedef struct eocCNUServiceTable_data_s {
+
+ /* fields added to use for container iteration */
+ netsnmp_index oid_index; /* MUST BE FIRST!! for container use */
+ oid st_index; /* arbitrary index */
+
+ /* field added for index written in service configuration file */
+ long eocCNUServiceConfIndex;
+ /*
+ * eocCNUServiceName(2)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h
+ */
+ char eocCNUServiceName[255];
+size_t eocCNUServiceName_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCNUServiceType(3)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUServiceType;
+
+ /*
+ * eocCNUServiceQOSPrio(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/R/d/h
+ */
+ long eocCNUServiceQOSPrio;
+
+ /*
+ * eocCNUServiceDBADownstreamPIR(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUServiceDBADownstreamPIR;
+
+ /*
+ * eocCNUServiceDBAUpstreamPIR(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUServiceDBAUpstreamPIR;
+
+ /*
+ * eocCNUServiceDBADownstreamCIR(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUServiceDBADownstreamCIR;
+
+ /*
+ * eocCNUServiceDBAUpstreamCIR(8)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUServiceDBAUpstreamCIR;
+
+ /*
+ * eocCNUServiceMaxLatency(9)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUServiceMaxLatency;
+
+ /*
+ * eocCNUServiceRowStatus(10)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUServiceRowStatus;
+#ifdef USING_SPC300_EOC_MIB_MODULE
+ /* fields specific to SPC300EoC Service Table extension */
+ /*
+ * spc300EoCSlaveServiceMaxJitter(2)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/R/d/h
+ */
+ long spc300EoCSlaveServiceMaxJitter;
+
+ /*
+ * spc300EoCSlaveServiceACSEn(3)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long spc300EoCSlaveServiceACSEn;
+
+#endif
+ /* USING_SPC300_EOC_MIB_MODULE */
+ } eocCNUServiceTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocCNUServiceTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocCNUServiceTable_data eocCNUServiceTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocCNUServiceTable mib index.
+ * This structure is used to represent the index for eocCNUServiceTable.
+ */
+typedef struct eocCNUServiceTable_mib_index_s {
+
+ /*
+ * eocCNUServiceIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUServiceIndex;
+
+
+} eocCNUServiceTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocCNUServiceTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocCNUServiceTable_IDX_LEN 1
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocCNUServiceTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocCNUServiceTable_rowreq_ctx pointer.
+ */
+typedef struct eocCNUServiceTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocCNUServiceTable_IDX_LEN];
+
+ eocCNUServiceTable_mib_index tbl_idx;
+
+ eocCNUServiceTable_data *data;
+ unsigned int column_exists_flags; /* flags for existence */
+ eocCNUServiceTable_undo_data *undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocCNUServiceTable rowreq context.
+ */
+
+ /* NOTE: change of template - field for undo reference count added (as in ifTable_rowreq_ctx) */
+ u_char undo_ref_count;
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocCNUServiceTable_data_list;
+
+} eocCNUServiceTable_rowreq_ctx;
+
+typedef struct eocCNUServiceTable_ref_rowreq_ctx_s {
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx;
+} eocCNUServiceTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocCNUServiceTable_pre_request(eocCNUServiceTable_registration * user_context);
+ int eocCNUServiceTable_post_request(eocCNUServiceTable_registration * user_context,
+ int rc);
+
+ int eocCNUServiceTable_rowreq_ctx_init(eocCNUServiceTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocCNUServiceTable_rowreq_ctx_cleanup(eocCNUServiceTable_rowreq_ctx *rowreq_ctx);
+
+ int eocCNUServiceTable_check_dependencies (eocCNUServiceTable_rowreq_ctx *
+ rowreq_ctx);
+ int eocCNUServiceTable_commit(eocCNUServiceTable_rowreq_ctx * rowreq_ctx);
+
+ eocCNUServiceTable_rowreq_ctx *
+ eocCNUServiceTable_row_find_by_mib_index(eocCNUServiceTable_mib_index *mib_idx);
+
+extern oid eocCNUServiceTable_oid[];
+extern int eocCNUServiceTable_oid_size;
+
+ extern int eoccnu_adding_service;
+
+#include "eocCNUServiceTable_interface.h"
+#include "eocCNUServiceTable_data_access.h"
+#include "eocCNUServiceTable_data_get.h"
+#include "eocCNUServiceTable_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 /* EOCCNUSERVICETABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_access.c
new file mode 100644
index 0000000000..e6f7457761
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_access.c
@@ -0,0 +1,848 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUServiceTable.h"
+
+
+#include "eocCNUServiceTable_data_access.h"
+
+/* indication of row being added to the table */
+int eoccnu_adding_service;
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUServiceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceTable is subid 2 of eocCNUService.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2, length: 12
+*/
+
+/**
+ * initialization for eocCNUServiceTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocCNUServiceTable_reg
+ * Pointer to eocCNUServiceTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocCNUServiceTable_init_data(eocCNUServiceTable_registration * eocCNUServiceTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocCNUServiceTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocCNUServiceTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocCNUServiceTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocCNUServiceTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocCNUServiceTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCCNUSERVICETABLE_CACHE_TIMEOUT; /* seconds */
+ /* initialize row adding indication */
+ eoccnu_adding_service = 0;
+} /* eocCNUServiceTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocCNUServiceTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocCNUServiceTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocCNUServiceTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocCNUServiceTable_container_shutdown */
+
+static void
+_service_update_entry (eocCNUServiceTable_data *lhs,
+ eocCNUServiceTable_data *rhs)
+{
+ if (lhs->eocCNUServiceName_len != rhs->eocCNUServiceName_len)
+ {
+ lhs->eocCNUServiceName_len = rhs->eocCNUServiceName_len;
+ memcpy (lhs->eocCNUServiceName, rhs->eocCNUServiceName,
+ rhs->eocCNUServiceName_len);
+ }
+ else if (memcmp (lhs->eocCNUServiceName, rhs->eocCNUServiceName,
+ rhs->eocCNUServiceName_len) != 0)
+ {
+ memcpy (lhs->eocCNUServiceName, rhs->eocCNUServiceName,
+ rhs->eocCNUServiceName_len);
+ }
+
+ if (lhs->eocCNUServiceType != rhs->eocCNUServiceType)
+ {
+ lhs->eocCNUServiceType = rhs->eocCNUServiceType;
+ }
+
+ if (lhs->eocCNUServiceQOSPrio != rhs->eocCNUServiceQOSPrio)
+ {
+ lhs->eocCNUServiceQOSPrio = rhs->eocCNUServiceQOSPrio;
+ }
+
+ if (lhs->eocCNUServiceDBADownstreamPIR !=
+ rhs->eocCNUServiceDBADownstreamPIR)
+ {
+ lhs->eocCNUServiceDBADownstreamPIR =
+ rhs->eocCNUServiceDBADownstreamPIR;
+ }
+
+ if (lhs->eocCNUServiceDBAUpstreamPIR != rhs->eocCNUServiceDBAUpstreamPIR)
+ {
+ lhs->eocCNUServiceDBAUpstreamPIR = rhs->eocCNUServiceDBAUpstreamPIR;
+ }
+
+ if (lhs->eocCNUServiceDBADownstreamCIR !=
+ rhs->eocCNUServiceDBADownstreamCIR)
+ {
+ lhs->eocCNUServiceDBADownstreamCIR =
+ rhs->eocCNUServiceDBADownstreamCIR;
+ }
+
+ if (lhs->eocCNUServiceDBAUpstreamCIR != rhs->eocCNUServiceDBAUpstreamCIR)
+ {
+ lhs->eocCNUServiceDBAUpstreamCIR = rhs->eocCNUServiceDBAUpstreamCIR;
+ }
+
+ if (lhs->eocCNUServiceMaxLatency != rhs->eocCNUServiceMaxLatency)
+ {
+ lhs->eocCNUServiceMaxLatency = rhs->eocCNUServiceMaxLatency;
+ }
+
+#ifdef USING_SPC300_EOC_MIB_MODULE
+ if (lhs->spc300EoCSlaveServiceMaxJitter !=
+ rhs->spc300EoCSlaveServiceMaxJitter)
+ {
+ lhs->spc300EoCSlaveServiceMaxJitter =
+ rhs->spc300EoCSlaveServiceMaxJitter;
+ }
+
+ if (lhs->spc300EoCSlaveServiceACSEn != rhs->spc300EoCSlaveServiceACSEn)
+ {
+ lhs->spc300EoCSlaveServiceACSEn = rhs->spc300EoCSlaveServiceACSEn;
+ }
+#endif
+}
+
+static int
+_service_container_load (netsnmp_container *container)
+{
+ eocCNUServiceTable_data *entry;
+ int rc = MFD_SUCCESS;
+
+
+ /* service entries read from config file */
+ libspid_eoc_service_entry_t service_entries[LIBSPID_SERVICE_AMOUNT_LIMIT];
+
+ int i, j;
+ int tmp;
+
+ int service_count;
+
+ /* initial row status is set to active by default */
+ int init_row_status = ROWSTATUS_ACTIVE;
+
+ DEBUGMSGTL (("eocCNUServiceTable:access",
+ "_service_container_load called \n"));
+
+ if (NULL == container)
+ {
+ snmp_log (LOG_ERR, "no container specified/found for"
+ " _service_container_load\n");
+ return MFD_ERROR;
+ }
+
+ memset (service_entries, 0x0, sizeof (service_entries));
+
+ /* check errors in contents of service list prior to reading */
+ /* if errors are found, log message and set initial row status to notInService for all entries */
+ if (LIBSPID_SUCCESS != libspid_eoc_service_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in service config file,"
+ " refer to syslog\n");
+ init_row_status = ROWSTATUS_NOTINSERVICE;
+ }
+
+ /* get current contents of service config file */
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_service_get_list (service_entries, &service_count))
+ {
+ snmp_log (LOG_ERR, "service config file not read correctly\n");
+ return MFD_ERROR;
+ }
+
+ if (0 == service_count)
+ {
+ rc = MFD_END_OF_DATA;
+ }
+
+
+ for (i = 0; i < service_count; i++)
+ {
+
+ /* call interface function for allocating service table data */
+ if (NULL == (entry = eocCNUServiceTable_allocate_data ()))
+ {
+ snmp_log (LOG_ERR, "service entry allocation error\n");
+ return MFD_ERROR;
+ }
+
+
+ /* set row status to initial value */
+ entry->eocCNUServiceRowStatus = init_row_status;
+
+ /* parse service index from service entry */
+ tmp = sscanf (service_entries[i].service_index, "%d",
+ &entry->eocCNUServiceConfIndex);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "parsing failed, setting service index "
+ "field to invalid\n");
+ entry->eocCNUServiceConfIndex = INVALID_EOCCNUSERVICECONFINDEX;
+ }
+
+ /* parse service name from service entry */
+ if ((NULL == service_entries[i].service_name)
+ || (!strcmp (service_entries[i].service_name, "")))
+ {
+ snmp_log (LOG_ERR, "empty service name field\n");
+ entry->eocCNUServiceName[0] = '\0';
+ }
+ else
+ {
+ strncpy (entry->eocCNUServiceName,
+ service_entries[i].service_name, 255);
+ entry->eocCNUServiceName_len = strlen (entry->eocCNUServiceName);
+ }
+
+ /* parse service type from service entry */
+ tmp = sscanf (service_entries[i].service_type, "%d",
+ &entry->eocCNUServiceType);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "parsing failed, setting service type"
+ " field to invalid\n");
+ entry->eocCNUServiceType = INVALID_EOCCNUSERVICESERVICETYPE;
+ }
+
+ /* parse QOS Prio from service entry */
+ tmp = sscanf (service_entries[i].qos_prio, "%d",
+ &entry->eocCNUServiceQOSPrio);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "parsing failed, setting QOS Prio "
+ "field to invalid\n");
+ entry->eocCNUServiceQOSPrio = INVALID_EOCCNUSERVICEQOSPRIO;
+ }
+
+ /* parse downstream PIR from service entry */
+ tmp = sscanf (service_entries[i].dba_dl_pir, "%d",
+ &entry->eocCNUServiceDBADownstreamPIR);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "parsing failed, setting downstream PIR"
+ " field to invalid\n");
+ entry->eocCNUServiceDBADownstreamPIR =
+ INVALID_EOCCNUSERVICEDBADOWNSTREAMPIR;
+ }
+
+ /* parse upstream PIR from service entry */
+ tmp = sscanf (service_entries[i].dba_ul_pir, "%d",
+ &entry->eocCNUServiceDBAUpstreamPIR);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "parsing failed, setting upstream PIR "
+ "field to invalid\n");
+ entry->eocCNUServiceDBAUpstreamPIR =
+ INVALID_EOCCNUSERVICEDBAUPSTREAMPIR;
+ }
+
+ /* parse downstream CIR from service entry */
+ tmp = sscanf (service_entries[i].dba_dl_cir, "%d",
+ &entry->eocCNUServiceDBADownstreamCIR);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "parsing failed, setting downstream CIR"
+ " field to invalid\n");
+ entry->eocCNUServiceDBADownstreamCIR =
+ INVALID_EOCCNUSERVICEDBADOWNSTREAMCIR;
+ }
+
+ /* parse upstream CIR from service entry */
+ tmp = sscanf (service_entries[i].dba_ul_cir, "%d",
+ &entry->eocCNUServiceDBAUpstreamCIR);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "parsing failed, setting upstream CIR"
+ " field to invalid\n");
+ entry->eocCNUServiceDBAUpstreamCIR =
+ INVALID_EOCCNUSERVICEDBAUPSTREAMCIR;
+ }
+
+ /* parse max latency from service entry */
+ tmp = sscanf (service_entries[i].max_latency, "%d",
+ &entry->eocCNUServiceMaxLatency);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "parsing failed, setting max latency"
+ " field to invalid\n");
+ entry->eocCNUServiceMaxLatency = INVALID_EOCCNUSERVICEMAXLATENCY;
+ }
+
+
+#ifdef USING_SPC300_EOC_MIB_MODULE
+ /* read data from SPC300 table */
+ /* parse max jitter from service entry */
+ tmp = sscanf (service_entries[i].max_jitter, "%d",
+ &entry->spc300EoCSlaveServiceMaxJitter);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "parsing failed, setting max jitter field "
+ "to invalid\n");
+ entry->spc300EoCSlaveServiceMaxJitter =
+ INVALID_SPC300EOCSLAVESERVICEMAXJITTER;
+ }
+ /* parse ACS enable from service entry */
+ tmp = sscanf (service_entries[i].acs_en, "%d",
+ &entry->spc300EoCSlaveServiceACSEn);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "parsing failed, setting ACS Enable field"
+ " to invalid\n");
+ entry->spc300EoCSlaveServiceACSEn =
+ INVALID_SPC300EOCSLAVESERVICEACSEN;
+ }
+#endif
+
+ /* set entry index for container comparison */
+ entry->st_index = i + 1;
+
+ /*
+ * add entry to container
+ */
+ CONTAINER_INSERT (container, entry);
+ }
+ return rc;
+}
+
+/**
+ * check entry for update
+ */
+
+static void
+_eoccnu_service_check_entry_for_updates (eocCNUServiceTable_rowreq_ctx * rowreq_ctx,
+ void **magic)
+{
+ netsnmp_container *service_container = magic[0];
+ netsnmp_container *to_delete = (netsnmp_container *) magic[1];
+
+ DEBUGMSGTL (("eocCNUServiceTable:access",
+ "checking entry for updates\n"));
+
+ netsnmp_assert (NULL != service_container);
+ netsnmp_assert (NULL != rowreq_ctx);
+ netsnmp_assert (NULL != rowreq_ctx->data);
+ /*
+ * check for matching entries to be deleted
+ */
+ eocCNUServiceTable_data *service_entry =
+ CONTAINER_FIND (service_container, rowreq_ctx->data);
+ if (NULL == service_entry)
+ {
+
+ if (NULL == to_delete)
+ {
+ magic[1] = to_delete = netsnmp_container_find ("lifo");
+ if (NULL == to_delete)
+ snmp_log (LOG_ERR, "couldn't create delete container\n");
+ }
+ if (NULL != to_delete)
+ CONTAINER_INSERT (to_delete, rowreq_ctx);
+ }
+ else
+ {
+ /* check for updates for editable columns from service table */
+ _service_update_entry (rowreq_ctx->data, service_entry);
+
+ /*
+ * remove entry from temporary service container
+ */
+ CONTAINER_REMOVE (service_container, service_entry);
+ free (service_entry);
+ }
+}
+
+/**
+ * add new entry
+ */
+static void
+_eoccnu_service_add_new_entry (eocCNUServiceTable_data * service_entry,
+ netsnmp_container * container)
+{
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+
+ DEBUGMSGTL (("eocCNUServiceTable:access", "creating new entry\n"));
+
+ netsnmp_assert (NULL != service_entry);
+ netsnmp_assert (NULL != container);
+
+ /*
+ * allocate an row context and set the index(es)
+ */
+ rowreq_ctx = eocCNUServiceTable_allocate_rowreq_ctx (service_entry, NULL);
+
+ if ((NULL != rowreq_ctx)
+ && (MFD_SUCCESS ==
+ eocCNUServiceTable_indexes_set (rowreq_ctx,
+ service_entry->
+ eocCNUServiceConfIndex)))
+ {
+ if (CONTAINER_INSERT (container, rowreq_ctx) < 0)
+ {
+ snmp_log (LOG_ERR, "eocCNUServiceTable container insert failed"
+ " for new entry\n");
+ eocCNUServiceTable_release_rowreq_ctx (rowreq_ctx);
+ return;
+ }
+ ++count;
+ }
+ else
+ {
+ if (NULL != rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "error setting index while loading "
+ "eocCNUServiceTable cache.\n");
+ eocCNUServiceTable_release_rowreq_ctx (rowreq_ctx);
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "memory allocation failed while loading "
+ "eocCNUServiceTable cache.\n");
+ free (service_entry);
+ }
+
+ return;
+ }
+ rowreq_ctx->data->eocCNUServiceRowStatus =
+ service_entry->eocCNUServiceRowStatus;
+}
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocCNUServiceTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocCNUServiceTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocCNUServiceTable_container_load(netsnmp_container *container)
+{
+ int rc = MFD_SUCCESS;
+ netsnmp_container *service_container;
+ void *tmp_ptr[2];
+ /*
+ * TODO:351:M: |-> Load/update data in the eocCNUServiceTable container.
+ * loop over your eocCNUServiceTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ /* create temporary container for fresh service data */
+ service_container =
+ netsnmp_container_find ("service_temp:table_container");
+
+
+ if (NULL == service_container)
+ {
+ snmp_log (LOG_ERR, "service temp container not found\n");
+ return MFD_ERROR;
+ }
+
+ /* load fresh service data into temp container */
+ rc = _service_container_load (service_container);
+ if (MFD_ERROR == rc)
+ {
+ snmp_log (LOG_ERR, "service container load error\n");
+ return MFD_ERROR;
+ }
+
+ tmp_ptr[0] = service_container;
+ tmp_ptr[1] = NULL;
+
+ /* check if eocCNUServiceTable container needs updates */
+ /* (this is not called if table container is empty) */
+ CONTAINER_FOR_EACH (container, (netsnmp_container_obj_func *)
+ _eoccnu_service_check_entry_for_updates, tmp_ptr);
+ /*
+ * add new entries to eocCNUServiceTable container
+ */
+ CONTAINER_FOR_EACH (service_container,
+ (netsnmp_container_obj_func *) _eoccnu_service_add_new_entry,
+ container);
+
+ /*
+ * free temporary container. we've either claimed each entry, or released it,
+ * so we don't need to call CONTAINER_CLEAR to clear the container.
+ */
+ CONTAINER_FREE (service_container);
+
+ /*
+ * remove deleted items from eocCNUServiceTable container
+ */
+ if (NULL != tmp_ptr[1])
+ {
+ netsnmp_container *tmp_container = (netsnmp_container *) tmp_ptr[1];
+ eocCNUServiceTable_rowreq_ctx *tmp_ctx;
+
+ /*
+ * this works because the tmp_container is a linked list,
+ * which can be used like a stack...
+ */
+ while (CONTAINER_SIZE (tmp_container))
+ {
+ /*
+ * get from delete list
+ */
+ tmp_ctx = CONTAINER_FIRST (tmp_container);
+
+ /*
+ * release context, delete from table container
+ */
+ CONTAINER_REMOVE (container, tmp_ctx);
+ eocCNUServiceTable_release_rowreq_ctx (tmp_ctx);
+
+ /*
+ * pop off delete list
+ */
+ CONTAINER_REMOVE (tmp_container, NULL);
+ }
+ }
+
+ DEBUGMSGT(("verbose:eocCNUServiceTable:eocCNUServiceTable_container_load",
+ "inserted records\n"));
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocCNUServiceTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocCNUServiceTable container data.
+ */
+} /* eocCNUServiceTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocCNUServiceTable_row_prep( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceTable_row_prep */
+
+/*
+ * TODO:420:r: Implement eocCNUServiceTable index validation.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceIndex
+ * eocCNUServiceIndex is subid 1 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.1
+ * Description:
+CNUҵ������������
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * check validity of eocCNUServiceIndex index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * eocCNUServiceTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+eocCNUServiceIndex_check_index( eocCNUServiceTable_rowreq_ctx *rowreq_ctx )
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceIndex_check_index","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check eocCNUServiceTable index eocCNUServiceIndex.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.eocCNUServiceIndex)
+ */
+ /* checking additional index restrictions - indexes must not exceed
+ * value of service amount limitation */
+ if ((rowreq_ctx->tbl_idx.eocCNUServiceIndex < 0)
+ || (rowreq_ctx->tbl_idx.eocCNUServiceIndex >
+ LIBSPID_SERVICE_AMOUNT_LIMIT))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ return MFD_SUCCESS; /* eocCNUServiceIndex index ok */
+} /* eocCNUServiceIndex_check_index */
+
+/**
+ * verify specified index is valid.
+ *
+ * This check is independent of whether or not the values specified for
+ * the columns of the new row are valid. Column values and row consistency
+ * will be checked later. At this point, only the index values should be
+ * checked.
+ *
+ * All of the individual index validation functions have been called, so this
+ * is the place to make sure they are valid as a whole when combined. If
+ * you only have one index, then you probably don't need to do anything else
+ * here.
+ *
+ * @note Keep in mind that if the indexes refer to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ *
+ * @param eocCNUServiceTable_reg
+ * Pointer to the user registration data
+ * @param eocCNUServiceTable_rowreq_ctx
+ * Pointer to the users context.
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_CANNOT_CREATE_NOW : index not valid right now
+ * @retval MFD_CANNOT_CREATE_EVER : index never valid
+ */
+int
+eocCNUServiceTable_validate_index( eocCNUServiceTable_registration * eocCNUServiceTable_reg,
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_validate_index","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:430:M: |-> Validate potential eocCNUServiceTable index.
+ */
+ if (0)
+ {
+ snmp_log (LOG_WARNING, "invalid index for a new row in the "
+ "eocCNUServiceTable table.\n");
+ /*
+ * determine failure type.
+ *
+ * If the index could not ever be created, return MFD_NOT_EVER
+ * If the index can not be created under the present circumstances
+ * (even though it could be created under other circumstances),
+ * return MFD_NOT_NOW.
+ */
+ if (0)
+ {
+ return MFD_CANNOT_CREATE_EVER;
+ }
+ else
+ {
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ }
+ else
+ {
+ rowreq_ctx->data->eocCNUServiceConfIndex =
+ rowreq_ctx->tbl_idx.eocCNUServiceIndex;
+ }
+
+ return rc;
+} /* eocCNUServiceTable_validate_index */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_access.h
new file mode 100644
index 0000000000..9cf19e5f92
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_access.h
@@ -0,0 +1,79 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUSERVICETABLE_DATA_ACCESS_H
+#define EOCCNUSERVICETABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* definitions for invalid input value markers */
+#define INVALID_EOCCNUSERVICECONFINDEX (-2)
+#define INVALID_EOCCNUSERVICESERVICETYPE (-1)
+#define INVALID_EOCCNUSERVICEQOSPRIO (-1)
+#define INVALID_EOCCNUSERVICEDBADOWNSTREAMPIR (-1)
+#define INVALID_EOCCNUSERVICEDBAUPSTREAMPIR (-1)
+#define INVALID_EOCCNUSERVICEDBADOWNSTREAMCIR (-1)
+#define INVALID_EOCCNUSERVICEDBAUPSTREAMCIR (-1)
+#define INVALID_EOCCNUSERVICEMAXLATENCY (-1)
+
+#ifdef USING_SPC300_EOC_MIB_MODULE
+#define INVALID_SPC300EOCSLAVESERVICEMAXJITTER (-1)
+#define INVALID_SPC300EOCSLAVESERVICEACSEN 2
+#endif /* USING_SPC300_EOC_MIB_MODULE */
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUServiceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceTable is subid 2 of eocCNUService.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2, length: 12
+*/
+
+
+ int eocCNUServiceTable_init_data(eocCNUServiceTable_registration * eocCNUServiceTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocCNUServiceTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCCNUSERVICETABLE_CACHE_TIMEOUT 60
+
+void eocCNUServiceTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocCNUServiceTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocCNUServiceTable_container_load(netsnmp_container *container);
+void eocCNUServiceTable_container_free(netsnmp_container *container);
+
+int eocCNUServiceTable_cache_load(netsnmp_container *container);
+void eocCNUServiceTable_cache_free(netsnmp_container *container);
+
+ int eocCNUServiceTable_row_prep( eocCNUServiceTable_rowreq_ctx *rowreq_ctx);
+
+int eocCNUServiceTable_validate_index( eocCNUServiceTable_registration * eocCNUServiceTable_reg,
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx);
+int eocCNUServiceIndex_check_index( eocCNUServiceTable_rowreq_ctx *rowreq_ctx ); /* internal */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUSERVICETABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_get.c
new file mode 100644
index 0000000000..7059aa7410
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_get.c
@@ -0,0 +1,617 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUServiceTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocCNUServiceTable get routines.
+ * TODO:240:M: Implement eocCNUServiceTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUServiceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceTable is subid 2 of eocCNUService.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2, length: 12
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocCNUServiceTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocCNUServiceIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocCNUServiceTable_indexes_set_tbl_idx(eocCNUServiceTable_mib_index *tbl_idx, long eocCNUServiceIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocCNUServiceIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCNUServiceIndex = eocCNUServiceIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocCNUServiceTable_indexes_set(eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocCNUServiceTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocCNUServiceIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocCNUServiceTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceName
+ * eocCNUServiceName is subid 2 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.2
+ * Description:
+CNUÒµÎñÃû³Æ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is OCTETSTR (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the eocCNUServiceName data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceName_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCNUServiceName_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCNUServiceName.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCNUServiceName_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCNUServiceName_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCNUServiceName_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, char **eocCNUServiceName_val_ptr_ptr, size_t *eocCNUServiceName_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCNUServiceName_val_ptr_ptr) && (NULL != *eocCNUServiceName_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCNUServiceName_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceName_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUServiceName data.
+ * copy (* eocCNUServiceName_val_ptr_ptr ) data and (* eocCNUServiceName_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCNUServiceName data
+ */
+ if ((NULL == (*eocCNUServiceName_val_ptr_ptr)) ||
+ ((*eocCNUServiceName_val_ptr_len_ptr) <
+ (rowreq_ctx->data->eocCNUServiceName_len *
+ sizeof (rowreq_ctx->data->eocCNUServiceName[0]))))
+ {
+ /*
+ * allocate space for eocCNUServiceName data
+ */
+ (*eocCNUServiceName_val_ptr_ptr) =
+ malloc (rowreq_ctx->data->eocCNUServiceName_len *
+ sizeof (rowreq_ctx->data->eocCNUServiceName[0]));
+ if (NULL == (*eocCNUServiceName_val_ptr_ptr))
+ {
+ snmp_log (LOG_ERR, "could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (*eocCNUServiceName_val_ptr_len_ptr) =
+ rowreq_ctx->data->eocCNUServiceName_len *
+ sizeof (rowreq_ctx->data->eocCNUServiceName[0]);
+ memcpy ((*eocCNUServiceName_val_ptr_ptr),
+ rowreq_ctx->data->eocCNUServiceName,
+ rowreq_ctx->data->eocCNUServiceName_len *
+ sizeof (rowreq_ctx->data->eocCNUServiceName[0]));
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceName_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceType
+ * eocCNUServiceType is subid 3 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.3
+ * Description:
+ CNUÒµÎñÀàÐÍ¡£¡¯1¡¯=VLAN Id, ¡®2¡¯=COS, ¡®3¡¯=TOS
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUServiceType data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceType_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUServiceType_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceType_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUServiceType_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceType_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUServiceType data.
+ * copy (* eocCNUServiceType_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUServiceType_val_ptr ) = rowreq_ctx->data->eocCNUServiceType;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceType_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceQOSPrio
+ * eocCNUServiceQOSPrio is subid 4 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.4
+ * Description:
+CNUÒµÎñµÄQOSÓÅÏȼ¶£¬0-7¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 7;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUServiceQOSPrio data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceQOSPrio_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUServiceQOSPrio_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceQOSPrio_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUServiceQOSPrio_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceQOSPrio_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUServiceQOSPrio data.
+ * copy (* eocCNUServiceQOSPrio_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUServiceQOSPrio_val_ptr ) = rowreq_ctx->data->eocCNUServiceQOSPrio;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceQOSPrio_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceDBADownstreamPIR
+ * eocCNUServiceDBADownstreamPIR is subid 5 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.5
+ * Description:
+CNUÒµÎñÏÂÐÐ×î´ó´ø¿í¡£µ¥Î»kbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUServiceDBADownstreamPIR data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceDBADownstreamPIR_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUServiceDBADownstreamPIR_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceDBADownstreamPIR_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUServiceDBADownstreamPIR_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBADownstreamPIR_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUServiceDBADownstreamPIR data.
+ * copy (* eocCNUServiceDBADownstreamPIR_val_ptr ) from rowreq_ctx->data
+ */
+ (*eocCNUServiceDBADownstreamPIR_val_ptr) =
+ rowreq_ctx->data->eocCNUServiceDBADownstreamPIR;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBADownstreamPIR_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceDBAUpstreamPIR
+ * eocCNUServiceDBAUpstreamPIR is subid 6 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.6
+ * Description:
+CNUÒµÎñÉÏÐÐ×î´ó´ø¿í¡£µ¥Î»kbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUServiceDBAUpstreamPIR data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceDBAUpstreamPIR_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUServiceDBAUpstreamPIR_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceDBAUpstreamPIR_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUServiceDBAUpstreamPIR_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBAUpstreamPIR_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUServiceDBAUpstreamPIR data.
+ * copy (* eocCNUServiceDBAUpstreamPIR_val_ptr ) from rowreq_ctx->data
+ */
+ (*eocCNUServiceDBAUpstreamPIR_val_ptr) =
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamPIR;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBAUpstreamPIR_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceDBADownstreamCIR
+ * eocCNUServiceDBADownstreamCIR is subid 7 of eocCNUServiceEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.7
+ * Description:
+CNUÒµÎñÏÂÐб£ÕÏ´ø¿í£¬µ¥Î»kbps¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUServiceDBADownstreamCIR data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceDBADownstreamCIR_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUServiceDBADownstreamCIR_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceDBADownstreamCIR_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUServiceDBADownstreamCIR_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBADownstreamCIR_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUServiceDBADownstreamCIR data.
+ * copy (* eocCNUServiceDBADownstreamCIR_val_ptr ) from rowreq_ctx->data
+ */
+ (*eocCNUServiceDBADownstreamCIR_val_ptr) =
+ rowreq_ctx->data->eocCNUServiceDBADownstreamCIR;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBADownstreamCIR_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceDBAUpstreamCIR
+ * eocCNUServiceDBAUpstreamCIR is subid 8 of eocCNUServiceEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.8
+ * Description:
+CNUÒµÎñÉÏÐб£ÕÏ´ø¿í£¬µ¥Î»kbps¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUServiceDBAUpstreamCIR data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceDBAUpstreamCIR_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUServiceDBAUpstreamCIR_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceDBAUpstreamCIR_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUServiceDBAUpstreamCIR_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBAUpstreamCIR_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUServiceDBAUpstreamCIR data.
+ * copy (* eocCNUServiceDBAUpstreamCIR_val_ptr ) from rowreq_ctx->data
+ */
+ (*eocCNUServiceDBAUpstreamCIR_val_ptr) =
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamCIR;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBAUpstreamCIR_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceMaxLatency
+ * eocCNUServiceMaxLatency is subid 9 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.9
+ * Description:
+×î´óÔÊÐíÑÓʱ¡£µ¥Î»ns
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUServiceMaxLatency data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceMaxLatency_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUServiceMaxLatency_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceMaxLatency_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUServiceMaxLatency_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceMaxLatency_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUServiceMaxLatency data.
+ * copy (* eocCNUServiceMaxLatency_val_ptr ) from rowreq_ctx->data
+ */
+ (*eocCNUServiceMaxLatency_val_ptr) =
+ rowreq_ctx->data->eocCNUServiceMaxLatency;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceMaxLatency_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceRowStatus
+ * eocCNUServiceRowStatus is subid 10 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.10
+ * Description:
+ÐÐ״̬£¬ÓÃÓÚ´´½¨¡¢Ð޸ġ¢É¾³ýijһÐУº
+ none_existent(1)- ±íÏî²»´æÔÚ£»
+ avtive(2)- ¼¤»î¸ÃÐУ»
+ notInService(3)- ״̬δ¼¤»î£»
+ notReady(4)- ²»Äܱ»¼¤»î״̬£»
+ createAndGo(5)- ´´½¨²¢¼¤»î£»
+ createAndWait(6)- ´´½¨£¬µ«²»¼¤»î£»
+ destory(7)- Ïú»Ù¸ÃÐС£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUServiceRowStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceRowStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUServiceRowStatus_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUServiceRowStatus_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUServiceRowStatus_val_ptr );
+
+ (* eocCNUServiceRowStatus_val_ptr ) =
+ rowreq_ctx->data->eocCNUServiceRowStatus;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceRowStatus_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_get.h
new file mode 100644
index 0000000000..96e9294005
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_get.h
@@ -0,0 +1,67 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocCNUServiceTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCCNUSERVICETABLE_DATA_GET_H
+#define EOCCNUSERVICETABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUServiceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceTable is subid 2 of eocCNUService.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2, length: 12
+*/
+ /*
+ * indexes
+ */
+
+ int eocCNUServiceName_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, char **eocCNUServiceName_val_ptr_ptr, size_t *eocCNUServiceName_val_ptr_len_ptr );
+ int eocCNUServiceType_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceType_val_ptr );
+ int eocCNUServiceQOSPrio_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceQOSPrio_val_ptr );
+ int eocCNUServiceDBADownstreamPIR_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceDBADownstreamPIR_val_ptr );
+ int eocCNUServiceDBAUpstreamPIR_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceDBAUpstreamPIR_val_ptr );
+ int eocCNUServiceDBADownstreamCIR_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceDBADownstreamCIR_val_ptr );
+ int eocCNUServiceDBAUpstreamCIR_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceDBAUpstreamCIR_val_ptr );
+ int eocCNUServiceMaxLatency_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long * eocCNUServiceMaxLatency_val_ptr );
+ int eocCNUServiceRowStatus_get( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUServiceRowStatus_val_ptr );
+
+
+int eocCNUServiceTable_indexes_set_tbl_idx(eocCNUServiceTable_mib_index *tbl_idx, long eocCNUServiceIndex_val);
+int eocCNUServiceTable_indexes_set(eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUSERVICETABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_set.c
new file mode 100644
index 0000000000..71318cdd4b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_set.c
@@ -0,0 +1,2972 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUServiceTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUServiceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceTable is subid 2 of eocCNUService.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2, length: 12
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +-------------+ +==============+
+ * | row |f|<-------|| object ||
+ * | create |1| E || lookup ||
+ * +-------------+ +==============+
+ * E | | S | S
+ * | +------------------>|
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * |
+ * (err && f1)------------------->+
+ * | |
+ * +--------------+ +--------------+
+ * | post |<--------| row |
+ * | request | U | release |
+ * +--------------+ +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocCNUServiceTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocCNUServiceTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUServiceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUServiceTable_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocCNUServiceTable undo.
+ * set up eocCNUServiceTable undo information, in preparation for a set.
+ * Undo storage is in (* eocCNUServiceRowStatus_val_ptr )*
+ */
+ /* copy data context to undo context */
+ memcpy (rowreq_ctx->undo, rowreq_ctx->data,
+ sizeof (eocCNUServiceTable_data));
+
+ return rc;
+} /* eocCNUServiceTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUServiceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUServiceTable_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocCNUServiceTable undo.
+ * eocCNUServiceTable undo information, in response to a failed set.
+ * Undo storage is in (* eocCNUServiceRowStatus_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUServiceTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUServiceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUServiceTable_undo_cleanup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocCNUServiceTable undo.
+ * Undo storage is in (* eocCNUServiceRowStatus_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUServiceTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUServiceTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUServiceTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUServiceTable_commit( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ /* declarations for calls to libspid */
+ char key_buffer[LIBSPID_KEY_MAX_LEN];
+
+ int ret;
+ int i;
+ int tmp;
+
+ char *placeholder = "0";
+
+ libspid_eoc_service_entry_t service_entry;
+ DEBUGMSGTL (("verbose:eocCNUServiceTable:eocCNUServiceTable_commit",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocCNUServiceTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+
+ /*
+ * did anything change?
+ */
+ if (0 == save_flags)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable:eocCNUServiceTable_commit",
+ "no change\n"));
+ return MFD_SUCCESS;
+ }
+
+ if (save_flags & COLUMN_EOCCNUSERVICENAME_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNUSERVICENAME_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUServiceName.
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICENAME_FLAG;
+ }
+
+
+ if (save_flags & COLUMN_EOCCNUSERVICETYPE_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNUSERVICETYPE_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUServiceType.
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICETYPE_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUSERVICEQOSPRIO_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNUSERVICEQOSPRIO_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUServiceQOSPrio.
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEQOSPRIO_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUServiceDBADownstreamPIR.
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUServiceDBAUpstreamPIR.
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG;
+
+ }
+
+ if (save_flags & COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUServiceDBADownstreamCIR.
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUServiceDBAUpstreamCIR.
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUSERVICEMAXLATENCY_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNUSERVICEMAXLATENCY_FLAG;
+ /*
+ * set flag, in case we need to undo eocCNUServiceMaxLatency
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEMAXLATENCY_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUSERVICEROWSTATUS_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCCNUSERVICEROWSTATUS_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUServiceRowStatus.
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEROWSTATUS_FLAG;
+ }
+ /* handle row addition or deletion (similarly as in ipAddressTable) */
+ /*
+ * pass everything to data access
+ * let data access know what columns are set
+ */
+
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUSERVICEROWSTATUS_FLAG)
+ {
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ {
+ DEBUGMSGTL (("verbose:eocCNUServiceTable:eocCNUServiceTable_commit", "new row created!\n"));
+ }
+ else if (ROWSTATUS_DESTROY ==
+ rowreq_ctx->data->eocCNUServiceRowStatus)
+ {
+ /* check if deleting unvalidated row */
+ /* a row can be unvalidated either before being added to
+ configuration file, or to mark invalid line
+ in configuration file */
+ if ((rowreq_ctx->undo->eocCNUServiceRowStatus
+ & ROWSTATUS_NOTINSERVICE))
+ {
+ DEBUGMSGTL (("verbose:eocCNUServiceTable:eocCNUServi"
+ "ceTable_commit",
+ "deleting unvalidated row!\n"));
+ /* convert index to string to serve as key for possible
+ * removing of invalid line */
+ sprintf (key_buffer, "%ld",
+ rowreq_ctx->data->eocCNUServiceConfIndex);
+ /* remove line with given index from service
+ * configuration file, if existing */
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_service_remove (key_buffer))
+ {
+ snmp_log (LOG_ERR, "unvalidated row not in "
+ "configuration file\n");
+ }
+ return MFD_SUCCESS;
+ }
+
+ /* convert index to string to serve as key for removing line */
+ sprintf (key_buffer, "%ld",
+ rowreq_ctx->data->eocCNUServiceConfIndex);
+
+ /* check configuration files before attempting
+ * synchronization of services and ports */
+ if (LIBSPID_SUCCESS != libspid_eoc_service_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in service "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in port "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+
+ if (LIBSPID_SUCCESS != libspid_eoc_storm_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in storm "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ /* remove line with given index from service configuration file */
+ if (LIBSPID_SUCCESS != libspid_eoc_service_remove (key_buffer))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_remove error\n");
+ return MFD_ERROR;
+ }
+
+ /* propagate service list changes */
+ ret = libspid_eoc_service_sync ();
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_sync succeeded\n");
+ }
+
+ /* propagate associated port changes */
+ ret = libspid_eoc_port_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync succeeded\n");
+ }
+ }
+ else if (ROWSTATUS_ACTIVE == rowreq_ctx->data->eocCNUServiceRowStatus)
+ {
+ /* this case covers modifying row status to active - ie.
+ * validating the row */
+ /* row can be either newly added from the agent,
+ * or having row status notInService to mark invalid line in
+ * configuration file */
+ DEBUGMSGTL (("verbose:eocCNUServiceTable:eocCNUServiceTable_"
+ "commit", "validating row\n"));
+
+ /* convert index to string to serve as key for row */
+ sprintf (key_buffer, "%ld",
+ rowreq_ctx->data->eocCNUServiceConfIndex);
+
+ /* copy service index to service entry */
+ strcpy (service_entry.service_index, key_buffer);
+
+ /* copy service name to service entry */
+ strncpy (service_entry.service_name,
+ rowreq_ctx->data->eocCNUServiceName,
+ rowreq_ctx->data->eocCNUServiceName_len);
+ /* add terminal 0 to service name */
+ service_entry.service_name[rowreq_ctx->
+ data->eocCNUServiceName_len] = '\0';
+
+ /* copy service type to service entry */
+ sprintf (service_entry.service_type, "%ld",
+ rowreq_ctx->data->eocCNUServiceType);
+
+ sprintf (service_entry.matching_value, "%s", "0");
+
+ /* copy QOS Prio to service entry */
+ sprintf (service_entry.qos_prio, "%ld",
+ rowreq_ctx->data->eocCNUServiceQOSPrio);
+
+ /* copy downstream PIR to service entry */
+ sprintf (service_entry.dba_dl_pir, "%ld",
+ rowreq_ctx->data->eocCNUServiceDBADownstreamPIR);
+
+ /* copy upstream PIR to service entry */
+ sprintf (service_entry.dba_ul_pir, "%ld",
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamPIR);
+
+ /* copy downstream CIR to service entry */
+ sprintf (service_entry.dba_dl_cir, "%ld",
+ rowreq_ctx->data->eocCNUServiceDBADownstreamCIR);
+
+ /* copy upstream CIR to service entry */
+ sprintf (service_entry.dba_ul_cir, "%ld",
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamCIR);
+
+ /* copy max latency to service entry */
+ sprintf (service_entry.max_latency, "%ld",
+ rowreq_ctx->data->eocCNUServiceMaxLatency);
+ /* if validating new row, copy placeholder string to
+ * service entry fields not covered in SARFT MIB, otherwise copy table entry */
+ if (1 == eoccnu_adding_service)
+ {
+ sprintf (service_entry.max_jitter, placeholder);
+ sprintf (service_entry.acs_en, placeholder);
+ }
+ else
+ {
+ /* copy max jitter to service entry */
+ sprintf (service_entry.max_jitter, "%ld",
+ rowreq_ctx->data->spc300EoCSlaveServiceMaxJitter);
+ /* copy ACS Enable to service entry */
+ sprintf (service_entry.acs_en, "%ld",
+ rowreq_ctx->data->spc300EoCSlaveServiceACSEn);
+ }
+ /* check configuration file before attempting synchronization
+ * of services */
+ if (LIBSPID_SUCCESS != libspid_eoc_service_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in service "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ /* write completed line to service file */
+ ret = libspid_eoc_service_set (key_buffer, &service_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_set error\n");
+ return MFD_ERROR;
+ }
+
+ /* propagate service list changes */
+ ret = libspid_eoc_service_sync ();
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_sync succeeded\n");
+ }
+
+ /* if commit has successfully passed, clear
+ * service adding indication */
+ eoccnu_adding_service = 0;
+ }
+
+ }
+ else
+ {
+ /* this case covers modifying columns without modifying row status */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ && (ROWSTATUS_ACTIVE == rowreq_ctx->data->eocCNUServiceRowStatus))
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_commit",
+ "trying to change data for service "
+ "table index: %ld \n",
+ rowreq_ctx->data->eocCNUServiceConfIndex));
+ /* convert index to string to serve as key for line
+ * in configuration file */
+ sprintf (key_buffer, "%ld",
+ rowreq_ctx->data->eocCNUServiceConfIndex);
+
+ /* read existing line from configuration file */
+ ret = libspid_eoc_service_get (key_buffer, &service_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_get error\n");
+ return MFD_ERROR;
+ }
+
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUSERVICENAME_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_commit",
+ "service name read from rowreq context: %s\n",
+ rowreq_ctx->data->eocCNUServiceName));
+ /* copy service name to service entry */
+ strncpy (service_entry.service_name,
+ rowreq_ctx->data->eocCNUServiceName,
+ rowreq_ctx->data->eocCNUServiceName_len);
+ /* add terminal 0 to service name */
+ service_entry.service_name[rowreq_ctx->
+ data->eocCNUServiceName_len] = '\0';
+ }
+
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUSERVICETYPE_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_commit",
+ "service type read from rowreq context: %ld\n",
+ rowreq_ctx->data->eocCNUServiceType));
+ /* copy service type to service entry */
+ sprintf (service_entry.service_type, "%ld",
+ rowreq_ctx->data->eocCNUServiceType);
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEQOSPRIO_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_commit",
+ "QOS Prio read from rowreq context: %ld\n",
+ rowreq_ctx->data->eocCNUServiceQOSPrio));
+ /* copy QOS Prio to service entry */
+ sprintf (service_entry.qos_prio, "%ld",
+ rowreq_ctx->data->eocCNUServiceQOSPrio);
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_commit", "downstream "
+ "PIR read from rowreq context: %ld\n",
+ rowreq_ctx->data->
+ eocCNUServiceDBADownstreamPIR));
+ /* copy downstream PIR to service entry */
+ sprintf (service_entry.dba_dl_pir, "%ld",
+ rowreq_ctx->data->eocCNUServiceDBADownstreamPIR);
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_commit",
+ "upstream PIR read from rowreq context: %ld\n",
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamPIR));
+ /* copy upstream PIR to service entry */
+ sprintf (service_entry.dba_ul_pir, "%ld",
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamPIR);
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_commit",
+ "downstream CIR read from rowreq context: %ld\n",
+ rowreq_ctx->data->
+ eocCNUServiceDBADownstreamCIR));
+ /* copy downstream CIR to service entry */
+ sprintf (service_entry.dba_dl_cir, "%ld",
+ rowreq_ctx->data->eocCNUServiceDBADownstreamCIR);
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_commit",
+ "upstream CIR read from rowreq context: %ld\n",
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamCIR));
+ /* copy upstream CIR to service entry */
+ sprintf (service_entry.dba_ul_cir, "%ld",
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamCIR);
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEMAXLATENCY_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_commit",
+ "max latency read from rowreq context: %ld\n",
+ rowreq_ctx->data->eocCNUServiceMaxLatency));
+ /* copy max latency to service entry */
+ sprintf (service_entry.max_latency, "%ld",
+ rowreq_ctx->data->eocCNUServiceMaxLatency);
+ }
+
+ /* check configuration file before attempting synchronization
+ * of services */
+ if (LIBSPID_SUCCESS != libspid_eoc_service_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in service "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ /* write modified line to configuration file */
+ ret = libspid_eoc_service_set (key_buffer, &service_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_set error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_commit",
+ "line succesfully written to conf file!\n"));
+ }
+
+ /* propagate service list changes */
+ ret = libspid_eoc_service_sync ();
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_sync succeeded\n");
+ }
+ }
+ }
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n", save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocCNUServiceTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUServiceTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUServiceTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUServiceTable_undo_commit( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ /* declarations for calls to libspid */
+ char key_buffer[LIBSPID_KEY_MAX_LEN];
+ int ret;
+ int i;
+ int tmp;
+
+ libspid_eoc_service_entry_t service_entry;
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_undo_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /* initialize service entry */
+ memset (&service_entry, 0, sizeof (service_entry));
+ /*
+ * TODO:485:M: |-> Undo eocCNUServiceTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUSERVICEROWSTATUS_FLAG)
+ {
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ {
+ /* when row is created and not validated, there is nothing to do */
+ if ((rowreq_ctx->undo->eocCNUServiceRowStatus
+ & ROWSTATUS_NOTINSERVICE))
+ {
+ DEBUGMSGTL (("verbose:eocCNUServiceTable:"
+ "eocCNUServiceTable_commit",
+ "removing unvalidated row!\n"));
+ return MFD_SUCCESS;
+ }
+ }
+ else if (ROWSTATUS_DESTROY ==
+ rowreq_ctx->data->eocCNUServiceRowStatus)
+ {
+ /* if a row was deleted, restore it */
+ /* if restoring unvalidated row, there is nothing to do */
+ if ((rowreq_ctx->undo->eocCNUServiceRowStatus
+ & ROWSTATUS_NOTINSERVICE))
+ {
+ DEBUGMSGTL (("verbose:eocCNUServiceTable:"
+ "eocCNUServiceTable_commit",
+ "restoring unvalidated row!\n"));
+ return MFD_SUCCESS;
+ }
+ DEBUGMSGTL (("eocCNUServiceTable_undo_commit",
+ "service table index to undo: %ld \n",
+ rowreq_ctx->undo->eocCNUServiceConfIndex));
+
+ /* convert index to string to serve as key for restoring line */
+ sprintf (key_buffer, "%ld",
+ rowreq_ctx->undo->eocCNUServiceConfIndex);
+
+ /* copy service index to service entry */
+ strcpy (service_entry.service_index, key_buffer);
+
+ /* copy service name to service entry */
+ strncpy (service_entry.service_name,
+ rowreq_ctx->undo->eocCNUServiceName,
+ rowreq_ctx->undo->eocCNUServiceName_len);
+
+ /* copy service type to service entry */
+ sprintf (service_entry.service_type, "%ld",
+ rowreq_ctx->undo->eocCNUServiceType);
+
+ sprintf (service_entry.matching_value, "%s", "0");
+
+ /* copy QOS Prio to service entry */
+ sprintf (service_entry.qos_prio, "%ld",
+ rowreq_ctx->undo->eocCNUServiceQOSPrio);
+
+
+ /* copy downstream PIR to service entry */
+ sprintf (service_entry.dba_dl_pir, "%ld",
+ rowreq_ctx->undo->eocCNUServiceDBADownstreamPIR);
+
+ /* copy upstream PIR to service entry */
+ sprintf (service_entry.dba_ul_pir, "%ld",
+ rowreq_ctx->undo->eocCNUServiceDBAUpstreamPIR);
+
+ /* copy downstream CIR to service entry */
+ sprintf (service_entry.dba_dl_cir, "%ld",
+ rowreq_ctx->undo->eocCNUServiceDBADownstreamCIR);
+
+ /* copy upstream CIR to service entry */
+ sprintf (service_entry.dba_ul_cir, "%ld",
+ rowreq_ctx->undo->eocCNUServiceDBAUpstreamCIR);
+
+ /* copy max latency to service entry */
+ sprintf (service_entry.max_latency, "%ld",
+ rowreq_ctx->undo->eocCNUServiceMaxLatency);
+
+#ifdef USING_SPC300_EOC_MIB_MODULE
+ /* copy max jitter to service entry */
+ sprintf (service_entry.max_jitter, "%ld",
+ rowreq_ctx->undo->spc300EoCSlaveServiceMaxJitter);
+ /* copy ACS Enable to service entry */
+ sprintf (service_entry.acs_en, "%ld",
+ rowreq_ctx->undo->spc300EoCSlaveServiceACSEn);
+#endif /* USING_SPC300_EOC_MIB_MODULE */
+
+ /* clear flag for deletion */
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DELETED;
+
+ /* check configuration file before attempting synchronization of services */
+ if (LIBSPID_SUCCESS != libspid_eoc_service_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in service "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ /* write completed line to service file */
+ ret = libspid_eoc_service_set (key_buffer, &service_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_set error\n");
+ return MFD_ERROR;
+ }
+
+ /* propagate service list changes */
+ ret = libspid_eoc_service_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_sync error\n");
+ return MFD_ERROR;
+ }
+
+
+ }
+ else if (ROWSTATUS_ACTIVE == rowreq_ctx->data->eocCNUServiceRowStatus)
+ {
+ DEBUGMSGTL (("verbose:eocCNUServiceTable:"
+ "eocCNUServiceTable_undo_commit",
+ "removing newly validated row!\n"));
+ /* if a row was validated (its status set to active)
+ * revert its status to notInService */
+ rowreq_ctx->data->eocCNUServiceRowStatus =
+ rowreq_ctx->undo->eocCNUServiceRowStatus;
+ /* also remove row data from config file */
+ /* convert index to string to serve as key for removing line */
+ sprintf (key_buffer, "%ld",
+ rowreq_ctx->undo->eocCNUServiceConfIndex);
+
+
+
+ /* check configuration files before attempting
+ * synchronization of services and ports */
+ if (LIBSPID_SUCCESS != libspid_eoc_service_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in service "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in port "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_storm_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in storm "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ /* if a new row was added, remove line with given
+ * index from service configuration file */
+ if (1 == eoccnu_adding_service)
+ {
+ if (LIBSPID_SUCCESS !=
+ libspid_eoc_service_remove (key_buffer))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_remove error\n");
+ return MFD_ERROR;
+ }
+
+ /* propagate service list changes */
+ ret = libspid_eoc_service_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_sync error\n");
+ return MFD_ERROR;
+ }
+
+ /* propagate associated port changes */
+ ret = libspid_eoc_port_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync succeeded\n");
+ }
+
+ /* if undo has successfully passed, clear service
+ * adding indication */
+ eoccnu_adding_service = 0;
+ }
+ }
+ }
+ else
+ {
+ /* this case covers restoring modified columns
+ * (without row status modified) */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ && (ROWSTATUS_ACTIVE == rowreq_ctx->undo->eocCNUServiceRowStatus))
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_undo_commit",
+ "undoing data for index: %ld \n",
+ rowreq_ctx->data->eocCNUServiceConfIndex));
+
+ /* convert index to string to serve as key for
+ * line in configuration file */
+ sprintf (key_buffer, "%ld",
+ rowreq_ctx->data->eocCNUServiceConfIndex);
+
+ /* read existing line from configuration file */
+ ret = libspid_eoc_service_get (key_buffer, &service_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_get error\n");
+ return MFD_ERROR;
+ }
+
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUSERVICENAME_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_undo_commit",
+ "service name to be restored: %s\n",
+ rowreq_ctx->undo->eocCNUServiceName));
+ /* copy service name to service entry */
+ strncpy (service_entry.service_name,
+ rowreq_ctx->undo->eocCNUServiceName,
+ rowreq_ctx->undo->eocCNUServiceName_len);
+ }
+
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUSERVICETYPE_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_undo_commit",
+ "service type to be restored: %ld\n",
+ rowreq_ctx->undo->eocCNUServiceType));
+ /* copy service type to service entry */
+ sprintf (service_entry.service_type, "%ld",
+ rowreq_ctx->undo->eocCNUServiceType);
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEQOSPRIO_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_undo_commit",
+ "QOS Prio to be restored: %ld\n",
+ rowreq_ctx->undo->eocCNUServiceQOSPrio));
+ /* copy QOS Prio to service entry */
+ sprintf (service_entry.qos_prio, "%ld",
+ rowreq_ctx->undo->eocCNUServiceQOSPrio);
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_undo_commit",
+ "downstream PIR to be restored: %ld\n",
+ rowreq_ctx->undo->
+ eocCNUServiceDBADownstreamPIR));
+ /* copy downstream PIR to service entry */
+ sprintf (service_entry.dba_dl_pir, "%ld",
+ rowreq_ctx->undo->eocCNUServiceDBADownstreamPIR);
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_undo_commit",
+ "upstream PIR to be restored: %ld\n",
+ rowreq_ctx->undo->eocCNUServiceDBAUpstreamPIR));
+ /* copy upstream PIR to service entry */
+ sprintf (service_entry.dba_ul_pir, "%ld",
+ rowreq_ctx->undo->eocCNUServiceDBAUpstreamPIR);
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_undo_commit",
+ "downstream CIR to be restored: %ld\n",
+ rowreq_ctx->undo->
+ eocCNUServiceDBADownstreamCIR));
+ /* copy downstream CIR to service entry */
+ sprintf (service_entry.dba_dl_cir, "%ld",
+ rowreq_ctx->undo->eocCNUServiceDBADownstreamCIR);
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_undo_commit",
+ "upstream CIR read from rowreq context: %ld\n",
+ rowreq_ctx->undo->eocCNUServiceDBAUpstreamCIR));
+ /* copy upstream CIR to service entry */
+ sprintf (service_entry.dba_ul_cir, "%ld",
+ rowreq_ctx->undo->eocCNUServiceDBAUpstreamCIR);
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEMAXLATENCY_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_undo_commit",
+ "max latency read from rowreq context: %ld\n",
+ rowreq_ctx->undo->eocCNUServiceMaxLatency));
+ /* copy max latency to service entry */
+ sprintf (service_entry.max_latency, "%ld",
+ rowreq_ctx->undo->eocCNUServiceMaxLatency);
+ }
+
+ /* check configuration file before attempting synchronization
+ * of services */
+ if (LIBSPID_SUCCESS != libspid_eoc_service_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in service "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ /* write modified line to configuration file */
+ ret = libspid_eoc_service_set (key_buffer, &service_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_set error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ DEBUGMSGTL (("eocCNUServiceTable_undo_commit",
+ "line succesfully written to conf file!\n"));
+ }
+
+ /* propagate service list changes */
+ ret = libspid_eoc_service_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_service_sync error\n");
+ return MFD_ERROR;
+ }
+ }
+ }
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocCNUServiceTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocCNUServiceTable node value checks.
+ * TODO:450:M: Implement eocCNUServiceTable undo functions.
+ * TODO:460:M: Implement eocCNUServiceTable set functions.
+ * TODO:480:M: Implement eocCNUServiceTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceName
+ * eocCNUServiceName is subid 2 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.2
+ * Description:
+CNUÒµÎñÃû³Æ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is OCTETSTR (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceName_val_ptr
+ * A char containing the new value.
+ * @param eocCNUServiceName_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCNUServiceName_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUServiceTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OCTET_STR
+ * The length is < sizeof(rowreq_ctx->data.eocCNUServiceName).
+ * The length is in (one of) the range set(s): 0 - 255
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUServiceName_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, char *eocCNUServiceName_val_ptr, size_t eocCNUServiceName_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceName_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCNUServiceName_val_ptr);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUServiceName value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUServiceName value not illegal */
+} /* eocCNUServiceName_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUServiceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUServiceTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUServiceName_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceName_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUServiceName undo.
+ */
+ /*
+ * copy eocCNUServiceName and eocCNUServiceName_len data
+ * set rowreq_ctx->undo->eocCNUServiceName from rowreq_ctx->data.eocCNUServiceName
+ */
+ memcpy (rowreq_ctx->undo->eocCNUServiceName,
+ rowreq_ctx->data->eocCNUServiceName,
+ (rowreq_ctx->data->eocCNUServiceName_len
+ * sizeof(rowreq_ctx->undo->eocCNUServiceName[0])));
+ rowreq_ctx->undo->eocCNUServiceName_len =
+ rowreq_ctx->data->eocCNUServiceName_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceName_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUServiceName_val_ptr
+ * A char containing the new value.
+ * @param eocCNUServiceName_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCNUServiceName_val_ptr
+ */
+int
+eocCNUServiceName_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, char *eocCNUServiceName_val_ptr, size_t eocCNUServiceName_val_ptr_len )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceName_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCNUServiceName_val_ptr);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUServiceName value.
+ * set eocCNUServiceName value in rowreq_ctx->data
+ */
+ memcpy (rowreq_ctx->data->eocCNUServiceName,
+ eocCNUServiceName_val_ptr,
+ eocCNUServiceName_val_ptr_len);
+ /** convert bytes to number of char */
+ rowreq_ctx->data->eocCNUServiceName_len =
+ eocCNUServiceName_val_ptr_len / sizeof (eocCNUServiceName_val_ptr[0]);
+ rowreq_ctx->column_exists_flags |= COLUMN_EOCCNUSERVICENAME_FLAG;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceName_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUServiceName_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceName_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUServiceName undo.
+ */
+ /*
+ * copy eocCNUServiceName and eocCNUServiceName_len data
+ * set rowreq_ctx->data.eocCNUServiceName from rowreq_ctx->undo->eocCNUServiceName
+ */
+ memcpy (rowreq_ctx->data->eocCNUServiceName,
+ rowreq_ctx->undo->eocCNUServiceName,
+ (rowreq_ctx->undo->eocCNUServiceName_len
+ * sizeof(rowreq_ctx->data->eocCNUServiceName[0])));
+ rowreq_ctx->data->eocCNUServiceName_len =
+ rowreq_ctx->undo->eocCNUServiceName_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceName_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceType
+ * eocCNUServiceType is subid 3 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.3
+ * Description:
+ CNUÒµÎñÀàÐÍ¡£¡¯1¡¯=VLAN Id, ¡®2¡¯=COS, ¡®3¡¯=TOS
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceType_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUServiceTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUServiceType_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceType_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceType_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUServiceType value.
+ */
+ if ((eocCNUServiceType_val < 0)
+ || (eocCNUServiceType_val
+ > LIBSPID_SERVICE_TYPE_TOS))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ return MFD_SUCCESS; /* eocCNUServiceType value not illegal */
+} /* eocCNUServiceType_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUServiceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUServiceTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUServiceType_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceType_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUServiceType undo.
+ */
+ /*
+ * copy eocCNUServiceType data
+ * set rowreq_ctx->undo->eocCNUServiceType from rowreq_ctx->data.eocCNUServiceType
+ */
+ rowreq_ctx->undo->eocCNUServiceType = rowreq_ctx->data->eocCNUServiceType;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceType_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUServiceType_val
+ * A long containing the new value.
+ */
+int
+eocCNUServiceType_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceType_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceType_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUServiceType value.
+ * set eocCNUServiceType value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->eocCNUServiceType = eocCNUServiceType_val;
+
+ rowreq_ctx->column_exists_flags |= COLUMN_EOCCNUSERVICETYPE_FLAG;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceType_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUServiceType_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceType_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUServiceType undo.
+ */
+ /*
+ * copy eocCNUServiceType data
+ * set rowreq_ctx->data.eocCNUServiceType from rowreq_ctx->undo->eocCNUServiceType
+ */
+ rowreq_ctx->data->eocCNUServiceType = rowreq_ctx->undo->eocCNUServiceType;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceType_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceQOSPrio
+ * eocCNUServiceQOSPrio is subid 4 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.4
+ * Description:
+CNUÒµÎñµÄQOSÓÅÏȼ¶£¬0-7¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 7;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceQOSPrio_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUServiceTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is in (one of) the range set(s): 0 - 7
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUServiceQOSPrio_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceQOSPrio_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceQOSPrio_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUServiceQOSPrio value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUServiceQOSPrio value not illegal */
+} /* eocCNUServiceQOSPrio_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUServiceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUServiceTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUServiceQOSPrio_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceQOSPrio_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUServiceQOSPrio undo.
+ */
+ /*
+ * copy eocCNUServiceQOSPrio data
+ * set rowreq_ctx->undo->eocCNUServiceQOSPrio from rowreq_ctx->data.eocCNUServiceQOSPrio
+ */
+ rowreq_ctx->undo->eocCNUServiceQOSPrio =
+ rowreq_ctx->data->eocCNUServiceQOSPrio;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceQOSPrio_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUServiceQOSPrio_val
+ * A long containing the new value.
+ */
+int
+eocCNUServiceQOSPrio_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceQOSPrio_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceQOSPrio_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUServiceQOSPrio value.
+ * set eocCNUServiceQOSPrio value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->eocCNUServiceQOSPrio = eocCNUServiceQOSPrio_val;
+
+ rowreq_ctx->column_exists_flags |= COLUMN_EOCCNUSERVICEQOSPRIO_FLAG;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceQOSPrio_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUServiceQOSPrio_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceQOSPrio_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUServiceQOSPrio undo.
+ */
+ /*
+ * copy eocCNUServiceQOSPrio data
+ * set rowreq_ctx->data->eocCNUServiceQOSPrio from rowreq_ctx->undo->eocCNUServiceQOSPrio
+ */
+ rowreq_ctx->data->eocCNUServiceQOSPrio = rowreq_ctx->undo->eocCNUServiceQOSPrio;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceQOSPrio_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceDBADownstreamPIR
+ * eocCNUServiceDBADownstreamPIR is subid 5 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.5
+ * Description:
+CNUÒµÎñÏÂÐÐ×î´ó´ø¿í¡£µ¥Î»kbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceDBADownstreamPIR_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUServiceTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUServiceDBADownstreamPIR_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBADownstreamPIR_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBADownstreamPIR_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUServiceDBADownstreamPIR value.
+ */
+ /* check that proposed DownstreamPIR value is non-negative
+ * integer and below limit */
+ if ((eocCNUServiceDBADownstreamPIR_val < 0)
+ || (eocCNUServiceDBADownstreamPIR_val
+ > LIBSPID_SERVICE_MAX_DBA_DL_PIR))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ return MFD_SUCCESS; /* eocCNUServiceDBADownstreamPIR value not illegal */
+} /* eocCNUServiceDBADownstreamPIR_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUServiceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUServiceTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUServiceDBADownstreamPIR_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBADownstreamPIR_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUServiceDBADownstreamPIR undo.
+ */
+ /*
+ * copy eocCNUServiceDBADownstreamPIR data
+ * set rowreq_ctx->undo->eocCNUServiceDBADownstreamPIR from rowreq_ctx->data.eocCNUServiceDBADownstreamPIR
+ */
+ rowreq_ctx->undo->eocCNUServiceDBADownstreamPIR = rowreq_ctx->data->eocCNUServiceDBADownstreamPIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBADownstreamPIR_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUServiceDBADownstreamPIR_val
+ * A long containing the new value.
+ */
+int
+eocCNUServiceDBADownstreamPIR_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBADownstreamPIR_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBADownstreamPIR_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUServiceDBADownstreamPIR value.
+ * set eocCNUServiceDBADownstreamPIR value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->eocCNUServiceDBADownstreamPIR =
+ eocCNUServiceDBADownstreamPIR_val;
+
+
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG;
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBADownstreamPIR_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUServiceDBADownstreamPIR_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBADownstreamPIR_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUServiceDBADownstreamPIR undo.
+ */
+ /*
+ * copy eocCNUServiceDBADownstreamPIR data
+ * set rowreq_ctx->data.eocCNUServiceDBADownstreamPIR from rowreq_ctx->undo->eocCNUServiceDBADownstreamPIR
+ */
+ rowreq_ctx->data->eocCNUServiceDBADownstreamPIR =
+ rowreq_ctx->undo->eocCNUServiceDBADownstreamPIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBADownstreamPIR_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceDBAUpstreamPIR
+ * eocCNUServiceDBAUpstreamPIR is subid 6 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.6
+ * Description:
+CNUÒµÎñÉÏÐÐ×î´ó´ø¿í¡£µ¥Î»kbps
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceDBAUpstreamPIR_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUServiceTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUServiceDBAUpstreamPIR_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBAUpstreamPIR_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBAUpstreamPIR_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUServiceDBAUpstreamPIR value.
+ */
+ /* check that proposed UpstreamPIR value is non-negative integer and below limit */
+ if ((eocCNUServiceDBAUpstreamPIR_val < 0)
+ || (eocCNUServiceDBAUpstreamPIR_val > LIBSPID_SERVICE_MAX_DBA_UL_PIR))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ return MFD_SUCCESS; /* eocCNUServiceDBAUpstreamPIR value not illegal */
+} /* eocCNUServiceDBAUpstreamPIR_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUServiceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUServiceTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUServiceDBAUpstreamPIR_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBAUpstreamPIR_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUServiceDBAUpstreamPIR undo.
+ */
+ /*
+ * copy eocCNUServiceDBAUpstreamPIR data
+ * set rowreq_ctx->undo->eocCNUServiceDBAUpstreamPIR from rowreq_ctx->data.eocCNUServiceDBAUpstreamPIR
+ */
+ rowreq_ctx->undo->eocCNUServiceDBAUpstreamPIR =
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamPIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBAUpstreamPIR_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUServiceDBAUpstreamPIR_val
+ * A long containing the new value.
+ */
+int
+eocCNUServiceDBAUpstreamPIR_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBAUpstreamPIR_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBAUpstreamPIR_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUServiceDBAUpstreamPIR value.
+ * set eocCNUServiceDBAUpstreamPIR value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamPIR =
+ eocCNUServiceDBAUpstreamPIR_val;
+
+
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG;
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBAUpstreamPIR_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUServiceDBAUpstreamPIR_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBAUpstreamPIR_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUServiceDBAUpstreamPIR undo.
+ */
+ /*
+ * copy eocCNUServiceDBAUpstreamPIR data
+ * set rowreq_ctx->data->eocCNUServiceDBAUpstreamPIR
+ * from rowreq_ctx->undo->eocCNUServiceDBAUpstreamPIR
+ */
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamPIR =
+ rowreq_ctx->undo->eocCNUServiceDBAUpstreamPIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBAUpstreamPIR_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceDBADownstreamCIR
+ * eocCNUServiceDBADownstreamCIR is subid 7 of eocCNUServiceEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.7
+ * Description:
+CNUÒµÎñÏÂÐб£ÕÏ´ø¿í£¬µ¥Î»kbps¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceDBADownstreamCIR_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUServiceTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUServiceDBADownstreamCIR_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBADownstreamCIR_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBADownstreamCIR_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUServiceDBADownstreamCIR value.
+ */
+ /* check that proposed DownstreamCIR value is non-negative
+ * integer and below limit */
+ if ((eocCNUServiceDBADownstreamCIR_val < 0)
+ || (eocCNUServiceDBADownstreamCIR_val
+ > LIBSPID_SERVICE_MAX_DBA_DL_CIR))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ return MFD_SUCCESS; /* eocCNUServiceDBADownstreamCIR value not illegal */
+} /* eocCNUServiceDBADownstreamCIR_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUServiceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUServiceTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUServiceDBADownstreamCIR_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBADownstreamCIR_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUServiceDBADownstreamCIR undo.
+ */
+ /*
+ * copy eocCNUServiceDBADownstreamCIR data
+ * set rowreq_ctx->undo->eocCNUServiceDBADownstreamCIR from rowreq_ctx->data->eocCNUServiceDBADownstreamCIR
+ */
+ rowreq_ctx->undo->eocCNUServiceDBADownstreamCIR = rowreq_ctx->data->eocCNUServiceDBADownstreamCIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBADownstreamCIR_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUServiceDBADownstreamCIR_val
+ * A long containing the new value.
+ */
+int
+eocCNUServiceDBADownstreamCIR_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBADownstreamCIR_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBADownstreamCIR_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUServiceDBADownstreamCIR value.
+ * set eocCNUServiceDBADownstreamCIR value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->eocCNUServiceDBADownstreamCIR =
+ eocCNUServiceDBADownstreamCIR_val;
+
+
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG;
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBADownstreamCIR_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUServiceDBADownstreamCIR_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBADownstreamCIR_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUServiceDBADownstreamCIR undo.
+ */
+ /*
+ * copy eocCNUServiceDBADownstreamCIR data
+ * set rowreq_ctx->data->eocCNUServiceDBADownstreamCIR from
+ * rowreq_ctx->undo->eocCNUServiceDBADownstreamCIR
+ */
+ rowreq_ctx->data->eocCNUServiceDBADownstreamCIR =
+ rowreq_ctx->undo->eocCNUServiceDBADownstreamCIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBADownstreamCIR_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceDBAUpstreamCIR
+ * eocCNUServiceDBAUpstreamCIR is subid 8 of eocCNUServiceEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.8
+ * Description:
+CNUÒµÎñÉÏÐб£ÕÏ´ø¿í£¬µ¥Î»kbps¡£´Ë¹ÜÀíÏîΪ¿ÉÑ¡Ïî¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceDBAUpstreamCIR_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUServiceTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUServiceDBAUpstreamCIR_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBAUpstreamCIR_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBAUpstreamCIR_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUServiceDBAUpstreamCIR value.
+ */
+ /* check that proposed UpstreamCIR value is non-negative integer and below limit */
+ if ((eocCNUServiceDBAUpstreamCIR_val < 0)
+ || (eocCNUServiceDBAUpstreamCIR_val > LIBSPID_SERVICE_MAX_DBA_UL_CIR))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ return MFD_SUCCESS; /* eocCNUServiceDBAUpstreamCIR value not illegal */
+} /* eocCNUServiceDBAUpstreamCIR_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUServiceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUServiceTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUServiceDBAUpstreamCIR_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBAUpstreamCIR_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUServiceDBAUpstreamCIR undo.
+ */
+ /*
+ * copy eocCNUServiceDBAUpstreamCIR data
+ * set rowreq_ctx->undo->eocCNUServiceDBAUpstreamCIR from
+ * rowreq_ctx->data.eocCNUServiceDBAUpstreamCIR
+ */
+ rowreq_ctx->undo->eocCNUServiceDBAUpstreamCIR =
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamCIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBAUpstreamCIR_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUServiceDBAUpstreamCIR_val
+ * A long containing the new value.
+ */
+int
+eocCNUServiceDBAUpstreamCIR_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBAUpstreamCIR_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBAUpstreamCIR_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUServiceDBAUpstreamCIR value.
+ * set eocCNUServiceDBAUpstreamCIR value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamCIR =
+ eocCNUServiceDBAUpstreamCIR_val;
+
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBAUpstreamCIR_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUServiceDBAUpstreamCIR_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceDBAUpstreamCIR_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUServiceDBAUpstreamCIR undo.
+ */
+ /*
+ * copy eocCNUServiceDBAUpstreamCIR data
+ * set rowreq_ctx->data->eocCNUServiceDBAUpstreamCIR from
+ * rowreq_ctx->undo->eocCNUServiceDBAUpstreamCIR
+ */
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamCIR =
+ rowreq_ctx->undo->eocCNUServiceDBAUpstreamCIR;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceDBAUpstreamCIR_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceMaxLatency
+ * eocCNUServiceMaxLatency is subid 9 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.9
+ * Description:
+×î´óÔÊÐíÑÓʱ¡£µ¥Î»ns
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceMaxLatency_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUServiceTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUServiceMaxLatency_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceMaxLatency_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceMaxLatency_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUServiceMaxLatency value.
+ */
+ /* check that proposed MaxLatency value is non-negative integer and below limit */
+ if ((eocCNUServiceMaxLatency_val < 0)
+ || (eocCNUServiceMaxLatency_val > LIBSPID_SERVICE_MAX_LATENCY))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ return MFD_SUCCESS; /* eocCNUServiceMaxLatency value not illegal */
+} /* eocCNUServiceMaxLatency_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUServiceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUServiceTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUServiceMaxLatency_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceMaxLatency_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUServiceMaxLatency undo.
+ */
+ /*
+ * copy eocCNUServiceMaxLatency data
+ * set rowreq_ctx->undo->eocCNUServiceMaxLatency from rowreq_ctx->data.eocCNUServiceMaxLatency
+ */
+ rowreq_ctx->undo->eocCNUServiceMaxLatency =
+ rowreq_ctx->data->eocCNUServiceMaxLatency;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceMaxLatency_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUServiceMaxLatency_val
+ * A long containing the new value.
+ */
+int
+eocCNUServiceMaxLatency_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceMaxLatency_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceMaxLatency_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUServiceMaxLatency value.
+ * set eocCNUServiceMaxLatency value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->eocCNUServiceMaxLatency = eocCNUServiceMaxLatency_val;
+
+ rowreq_ctx->column_exists_flags |= COLUMN_EOCCNUSERVICEMAXLATENCY_FLAG;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceMaxLatency_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUServiceMaxLatency_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceMaxLatency_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUServiceMaxLatency undo.
+ */
+ /*
+ * copy eocCNUServiceMaxLatency data
+ * set rowreq_ctx->data->eocCNUServiceMaxLatency from
+ * rowreq_ctx->undo->eocCNUServiceMaxLatency
+ */
+ rowreq_ctx->data->eocCNUServiceMaxLatency =
+ rowreq_ctx->undo->eocCNUServiceMaxLatency;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceMaxLatency_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceEntry.eocCNUServiceRowStatus
+ * eocCNUServiceRowStatus is subid 10 of eocCNUServiceEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2.1.10
+ * Description:
+ÐÐ״̬£¬ÓÃÓÚ´´½¨¡¢Ð޸ġ¢É¾³ýijһÐУº
+ none_existent(1)- ±íÏî²»´æÔÚ£»
+ avtive(2)- ¼¤»î¸ÃÐУ»
+ notInService(3)- ״̬δ¼¤»î£»
+ notReady(4)- ²»Äܱ»¼¤»î״̬£»
+ createAndGo(5)- ´´½¨²¢¼¤»î£»
+ createAndWait(6)- ´´½¨£¬µ«²»¼¤»î£»
+ destory(7)- Ïú»Ù¸ÃÐС£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUServiceRowStatus_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUServiceTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUServiceRowStatus_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, u_long eocCNUServiceRowStatus_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceRowStatus_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUServiceRowStatus value.
+ */
+ /* check for unsupported row status values */
+ if (ROWSTATUS_CREATEANDGO == eocCNUServiceRowStatus_val)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable", "createAndGo not supported\n"));
+ return MFD_NOT_VALID_EVER;
+ }
+
+ return MFD_SUCCESS; /* eocCNUServiceRowStatus value not illegal */
+} /* eocCNUServiceRowStatus_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUServiceTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUServiceTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUServiceRowStatus_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceRowStatus_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUServiceRowStatus undo.
+ */
+ /*
+ * copy eocCNUServiceRowStatus data
+ * set rowreq_ctx->undo->eocCNUServiceRowStatus from
+ * rowreq_ctx->data->eocCNUServiceRowStatus
+ */
+ rowreq_ctx->undo->eocCNUServiceRowStatus =
+ rowreq_ctx->data->eocCNUServiceRowStatus;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceRowStatus_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUServiceRowStatus_val
+ * A long containing the new value.
+ */
+int
+eocCNUServiceRowStatus_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, u_long eocCNUServiceRowStatus_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceRowStatus_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUServiceRowStatus value.
+ * set eocCNUServiceRowStatus value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->eocCNUServiceRowStatus = eocCNUServiceRowStatus_val;
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceRowStatus_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUServiceRowStatus_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceRowStatus_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUServiceRowStatus undo.
+ */
+ /*
+ * copy eocCNUServiceRowStatus data
+ * set rowreq_ctx->data->eocCNUServiceRowStatus from
+ * rowreq_ctx->undo->eocCNUServiceRowStatus
+ */
+ rowreq_ctx->data->eocCNUServiceRowStatus =
+ rowreq_ctx->undo->eocCNUServiceRowStatus;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUServiceRowStatus_undo */
+
+/**
+ * check dependencies
+ *
+ * This is useful for for tables which have dependencies between columns
+ * (or rows, or tables). For example, two columns allocating a percentage
+ * of something add up 100%.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUServiceTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @retval MFD_SUCCESS all the changes to the row are legal
+ * @retval MFD_ERROR one or more changes are not legal
+ *
+ * (see README-table-eocCNUServiceTable if you don't have dependencies)
+ */
+int
+eocCNUServiceTable_check_dependencies (eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL (("internal:eocCNUServiceTable:"
+ "eocCNUServiceTable_check_dependencies","called\n"));
+
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:470:o: Check eocCNUServiceTable row dependencies.
+ * check that all new value are legal and consistent with each other
+ */
+ /*
+ * check RowStatus dependencies
+ */
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUSERVICEROWSTATUS_FLAG)
+ {
+ /*
+ * check for valid RowStatus transition (old, new)
+ * (Note: move transition check to
+ * to catch errors earlier)
+ */
+ rc = check_rowstatus_transition (rowreq_ctx->undo->
+ eocCNUServiceRowStatus,
+ rowreq_ctx->data->
+ eocCNUServiceRowStatus);
+
+ if (MFD_SUCCESS != rc)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable",
+ "row status transition from %d to %d\n",
+ rowreq_ctx->undo->eocCNUServiceRowStatus,
+ rowreq_ctx->data->eocCNUServiceRowStatus));
+ return rc;
+ }
+ /*
+ * row creation requirements
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ {
+ /* this case permits creating row with rowstatus
+ * 'destroy' - row is created and immediately deleted */
+ if (ROWSTATUS_DESTROY == rowreq_ctx->data->eocCNUServiceRowStatus)
+ {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED;
+ }
+ else if (ROWSTATUS_CREATEANDWAIT ==
+ rowreq_ctx->data->eocCNUServiceRowStatus)
+ {
+ /* set row adding indication */
+ eoccnu_adding_service = 1;
+ rowreq_ctx->data->eocCNUServiceRowStatus =
+ ROWSTATUS_NOTINSERVICE;
+ }
+ else
+ {
+ /* check that DL CIR is not greater than DL PIR
+ * (if both are given during row creation) */
+ if ((rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG)
+ && (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG))
+ {
+ if (rowreq_ctx->data->eocCNUServiceDBADownstreamCIR
+ > rowreq_ctx->data->eocCNUServiceDBADownstreamPIR)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable",
+ "Downstream CIR must not be greater"
+ " than Downstream PIR\n"));
+ return MFD_NOT_VALID_NOW;
+ }
+ }
+ /* check that UL CIR is not greater than UL PIR
+ * (if both are given during row creation) */
+ if ((rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG)
+ && (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG))
+ {
+ if (rowreq_ctx->data->eocCNUServiceDBAUpstreamCIR
+ > rowreq_ctx->data->eocCNUServiceDBAUpstreamPIR)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable",
+ "Upstream CIR must not be greater"
+ " than Upstream PIR\n"));
+ return MFD_NOT_VALID_NOW;
+ }
+ }
+ rowreq_ctx->data->eocCNUServiceRowStatus = ROWSTATUS_ACTIVE;
+ }
+ } /* row creation */
+ else
+ {
+ /*
+ * row change requirements
+ */
+ /*
+ * don't allow a destroy if any other value was changed, since
+ * that might call data access routines with bad info.
+ *
+ * you may or may not require the row be notInService before it
+ * can be destroyed.
+ */
+ if (ROWSTATUS_DESTROY == rowreq_ctx->data->eocCNUServiceRowStatus)
+ {
+ if (rowreq_ctx->column_set_flags
+ & ~COLUMN_EOCCNUSERVICEROWSTATUS_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable",
+ "destroy must be only varbind for row\n"));
+ return MFD_NOT_VALID_NOW;
+ }
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED;
+
+ } /* row destroy */
+ else if (ROWSTATUS_NOTINSERVICE ==
+ rowreq_ctx->data->eocCNUServiceRowStatus)
+ {
+ /* do not permit invalidating once validated row */
+ if (rowreq_ctx->undo->eocCNUServiceRowStatus
+ & ROWSTATUS_ACTIVE)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable",
+ "Row status can't be changed from Active "
+ "to Not In Service!\n"));
+ return MFD_NOT_VALID_EVER;
+ }
+ }
+ else if (ROWSTATUS_ACTIVE ==
+ rowreq_ctx->data->eocCNUServiceRowStatus)
+ {
+ /* before setting row to active, check that all columns
+ * are filled */
+ if ((rowreq_ctx->column_exists_flags
+ & EOCCNUSERVICETABLE_REQUIRED_COLS) !=
+ EOCCNUSERVICETABLE_REQUIRED_COLS)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable",
+ "required columns from eocCNU table "
+ "missing (0x%0x != 0x%0x)\n",
+ rowreq_ctx->column_exists_flags,
+ EOCCNUSERVICETABLE_REQUIRED_COLS));
+ return MFD_NOT_VALID_NOW;
+ }
+ rowreq_ctx->data->eocCNUServiceRowStatus = ROWSTATUS_ACTIVE;
+ }
+ } /* row change */
+ }
+ else
+ {
+ /*
+ * must have row status to create a row
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable",
+ "must use RowStatus to create rows\n"));
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ else if (ROWSTATUS_ACTIVE == rowreq_ctx->data->eocCNUServiceRowStatus)
+ {
+ /* check that DL CIR is not greater than DL PIR */
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG)
+ {
+ if (rowreq_ctx->data->eocCNUServiceDBADownstreamCIR
+ > rowreq_ctx->data->eocCNUServiceDBADownstreamPIR)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable",
+ "Downstream CIR must not be greater than"
+ " Downstream PIR\n"));
+ return MFD_NOT_VALID_NOW;
+ }
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG)
+ {
+ if (rowreq_ctx->data->eocCNUServiceDBADownstreamCIR
+ > rowreq_ctx->data->eocCNUServiceDBADownstreamPIR)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable",
+ "Downstream CIR must not be greater than"
+ " Downstream PIR\n"));
+ return MFD_NOT_VALID_NOW;
+ }
+ }
+
+ /* check that UL CIR is not greater than UL PIR */
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG)
+ {
+ if (rowreq_ctx->data->eocCNUServiceDBAUpstreamCIR
+ > rowreq_ctx->data->eocCNUServiceDBAUpstreamPIR)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable",
+ "Upstream CIR must not be greater than"
+ " Upstream PIR\n"));
+ return MFD_NOT_VALID_NOW;
+ }
+ }
+
+ if (rowreq_ctx->column_set_flags
+ & COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG)
+ {
+ if (rowreq_ctx->data->eocCNUServiceDBAUpstreamCIR
+ > rowreq_ctx->data->eocCNUServiceDBAUpstreamPIR)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable",
+ "Upstream CIR must not be greater than "
+ "Upstream PIR\n"));
+ return MFD_NOT_VALID_NOW;
+ }
+ }
+ }
+ } /* row status not set */
+
+ if (MFD_SUCCESS != rc)
+ return rc;
+
+ return rc;
+} /* eocCNUServiceTable_check_dependencies */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_set.h
new file mode 100644
index 0000000000..e8792e9505
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_data_set.h
@@ -0,0 +1,95 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUSERVICETABLE_DATA_SET_H
+#define EOCCNUSERVICETABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUServiceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceTable is subid 2 of eocCNUService.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2, length: 12
+*/
+
+
+int eocCNUServiceTable_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx);
+int eocCNUServiceTable_undo_cleanup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx);
+int eocCNUServiceTable_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx);
+int eocCNUServiceTable_commit( eocCNUServiceTable_rowreq_ctx *rowreq_ctx);
+int eocCNUServiceTable_undo_commit( eocCNUServiceTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocCNUServiceName_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, char *eocCNUServiceName_val_ptr, size_t eocCNUServiceName_val_ptr_len);
+int eocCNUServiceName_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+int eocCNUServiceName_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, char *eocCNUServiceName_val_ptr, size_t eocCNUServiceName_val_ptr_len );
+int eocCNUServiceName_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUServiceType_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceType_val);
+int eocCNUServiceType_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+int eocCNUServiceType_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceType_val );
+int eocCNUServiceType_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUServiceQOSPrio_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceQOSPrio_val);
+int eocCNUServiceQOSPrio_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+int eocCNUServiceQOSPrio_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceQOSPrio_val );
+int eocCNUServiceQOSPrio_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUServiceDBADownstreamPIR_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBADownstreamPIR_val);
+int eocCNUServiceDBADownstreamPIR_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+int eocCNUServiceDBADownstreamPIR_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBADownstreamPIR_val );
+int eocCNUServiceDBADownstreamPIR_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUServiceDBAUpstreamPIR_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBAUpstreamPIR_val);
+int eocCNUServiceDBAUpstreamPIR_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+int eocCNUServiceDBAUpstreamPIR_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBAUpstreamPIR_val );
+int eocCNUServiceDBAUpstreamPIR_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUServiceDBADownstreamCIR_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBADownstreamCIR_val);
+int eocCNUServiceDBADownstreamCIR_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+int eocCNUServiceDBADownstreamCIR_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBADownstreamCIR_val );
+int eocCNUServiceDBADownstreamCIR_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUServiceDBAUpstreamCIR_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBAUpstreamCIR_val);
+int eocCNUServiceDBAUpstreamCIR_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+int eocCNUServiceDBAUpstreamCIR_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceDBAUpstreamCIR_val );
+int eocCNUServiceDBAUpstreamCIR_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUServiceMaxLatency_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceMaxLatency_val);
+int eocCNUServiceMaxLatency_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+int eocCNUServiceMaxLatency_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, long eocCNUServiceMaxLatency_val );
+int eocCNUServiceMaxLatency_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUServiceRowStatus_check_value( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, u_long eocCNUServiceRowStatus_val);
+int eocCNUServiceRowStatus_undo_setup( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+int eocCNUServiceRowStatus_set( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, u_long eocCNUServiceRowStatus_val );
+int eocCNUServiceRowStatus_undo( eocCNUServiceTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocCNUServiceTable_check_dependencies(eocCNUServiceTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUSERVICETABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_enums.h
new file mode 100644
index 0000000000..40c2b6cee5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_enums.h
@@ -0,0 +1,60 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUSERVICETABLE_ENUMS_H
+#define EOCCNUSERVICETABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocCNUServiceTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUServiceRowStatus (RowStatus / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef ROWSTATUS_ENUMS
+#define ROWSTATUS_ENUMS
+
+#define ROWSTATUS_ACTIVE 1
+#define ROWSTATUS_NOTINSERVICE 2
+#define ROWSTATUS_NOTREADY 3
+#define ROWSTATUS_CREATEANDGO 4
+#define ROWSTATUS_CREATEANDWAIT 5
+#define ROWSTATUS_DESTROY 6
+
+#endif /* ROWSTATUS_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUSERVICETABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_interface.c
new file mode 100644
index 0000000000..595ff514f6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_interface.c
@@ -0,0 +1,2314 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUServiceTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocCNUServiceTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUServiceTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUServiceTable is subid 2 of eocCNUService.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.3.2, length: 12
+*/
+typedef struct eocCNUServiceTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocCNUServiceTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocCNUServiceTable_interface_ctx;
+
+static eocCNUServiceTable_interface_ctx eocCNUServiceTable_if_ctx;
+
+static void _eocCNUServiceTable_container_init(
+ eocCNUServiceTable_interface_ctx *if_ctx);
+static void _eocCNUServiceTable_container_shutdown(
+ eocCNUServiceTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocCNUServiceTable_container_get( void )
+{
+ return eocCNUServiceTable_if_ctx.container;
+}
+
+eocCNUServiceTable_registration *
+eocCNUServiceTable_registration_get( void )
+{
+ return eocCNUServiceTable_if_ctx.user_ctx;
+}
+
+eocCNUServiceTable_registration *
+eocCNUServiceTable_registration_set( eocCNUServiceTable_registration * newreg )
+{
+ eocCNUServiceTable_registration * old = eocCNUServiceTable_if_ctx.user_ctx;
+ eocCNUServiceTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocCNUServiceTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocCNUServiceTable_if_ctx.container);
+}
+
+u_int
+eocCNUServiceTable_dirty_get( void )
+{
+ return eocCNUServiceTable_if_ctx.table_dirty;
+}
+
+void
+eocCNUServiceTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocCNUServiceTable:eocCNUServiceTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocCNUServiceTable_if_ctx.table_dirty, status));
+ eocCNUServiceTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocCNUServiceTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocCNUServiceTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocCNUServiceTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocCNUServiceTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocCNUServiceTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocCNUServiceTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocCNUServiceTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocCNUServiceTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocCNUServiceTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocCNUServiceTable_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUServiceTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUServiceTable_irreversible_commit;
+/* change from template: added check for dependencies */
+static Netsnmp_Node_Handler _mfd_eocCNUServiceTable_check_dependencies;
+
+NETSNMP_STATIC_INLINE int _eocCNUServiceTable_undo_column( eocCNUServiceTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+NETSNMP_STATIC_INLINE int _eocCNUServiceTable_check_indexes(eocCNUServiceTable_rowreq_ctx * rowreq_ctx);
+
+
+/**
+ * common init of container for eocCNUServiceTable and spc300EoCSlaveServiceTable
+ */
+void
+eoccnu_service_container_init (void)
+{
+ static int done = 0;
+
+ if (done)
+ return;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:eoccnu_service_container_init", "called\n"));
+
+ done = 1;
+
+ /*
+ * set up the container
+ */
+ _eocCNUServiceTable_container_init (&eocCNUServiceTable_if_ctx);
+}
+
+/**
+ * @internal
+ * Initialize the table eocCNUServiceTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocCNUServiceTable_initialize_interface(eocCNUServiceTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocCNUServiceTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocCNUServiceTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_eocCNUServiceTable_initialize_interface","called\n"));
+
+ (void) eoccnu_service_container_init ();
+ if (NULL == eocCNUServiceTable_if_ctx.container)
+ return; /* msg already logged */
+
+ /*************************************************
+ *
+ * save interface context for eocCNUServiceTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocCNUServiceIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCCNUSERVICETABLE_MIN_COL;
+ tbl_info->max_column = EOCCNUSERVICETABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocCNUServiceTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocCNUServiceTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocCNUServiceTable_container_init(&eocCNUServiceTable_if_ctx);
+ if (NULL == eocCNUServiceTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocCNUServiceTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocCNUServiceTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocCNUServiceTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocCNUServiceTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocCNUServiceTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocCNUServiceTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocCNUServiceTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocCNUServiceTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocCNUServiceTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocCNUServiceTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocCNUServiceTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocCNUServiceTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocCNUServiceTable_irreversible_commit;
+
+ /* change from template: added check for dependencies */
+ /*
+ * REQUIRED for tables with dependencies
+ */
+
+ access_multiplexer->consistency_checks =
+ _mfd_eocCNUServiceTable_check_dependencies;
+
+
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocCNUServiceTable:init_eocCNUServiceTable",
+ "Registering eocCNUServiceTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocCNUServiceTable", handler,
+ eocCNUServiceTable_oid,
+ eocCNUServiceTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocCNUServiceTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocCNUServiceTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocCNUServiceTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocCNUServiceTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocCNUServiceTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocCNUServiceTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocCNUServiceTable
+ */
+void
+_eocCNUServiceTable_shutdown_interface(eocCNUServiceTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocCNUServiceTable_container_shutdown(&eocCNUServiceTable_if_ctx);
+}
+
+void
+eocCNUServiceTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocCNUServiceTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocCNUServiceTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocCNUServiceTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUServiceTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUServiceIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUServiceIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUServiceIndex, 0x00, sizeof(var_eocCNUServiceIndex) );
+ var_eocCNUServiceIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUServiceIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_index_to_oid","called\n"));
+
+ /* eocCNUServiceIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCNUServiceIndex, (u_char*)&mib_idx->eocCNUServiceIndex,
+ sizeof(mib_idx->eocCNUServiceIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocCNUServiceIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUServiceIndex );
+
+ return err;
+} /* eocCNUServiceTable_index_to_oid */
+
+/**
+ * extract eocCNUServiceTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocCNUServiceTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUServiceTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUServiceIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUServiceIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUServiceIndex, 0x00, sizeof(var_eocCNUServiceIndex) );
+ var_eocCNUServiceIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUServiceIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocCNUServiceIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocCNUServiceIndex = *((long *)var_eocCNUServiceIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUServiceIndex );
+
+ return err;
+} /* eocCNUServiceTable_index_from_oid */
+
+
+/*
+ * eocCNUServiceTable_allocate_data
+ *
+ * Purpose: create new eocCNUServiceTable_data.
+ */
+eocCNUServiceTable_data *
+eocCNUServiceTable_allocate_data(void)
+{
+ eocCNUServiceTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocCNUServiceTable_data);
+
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocCNUServiceTable_data.\n");
+ }
+ else
+ {
+ /* initialization of fields added for container comparison */
+ rtn->oid_index.len = 1;
+ rtn->oid_index.oids = &rtn->st_index;
+ }
+
+ return rtn;
+} /* eocCNUServiceTable_allocate_data */
+
+/*
+ * eocCNUServiceTable_release_data
+ *
+ * Purpose: release eocCNUServiceTable data.
+ */
+void
+eocCNUServiceTable_release_data(eocCNUServiceTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocCNUServiceTable:eocCNUServiceTable_release_data","called\n"));
+
+ if (NULL == data)
+ return;
+ free(data);
+} /* eocCNUServiceTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocCNUServiceTable_rowreq_ctx
+ */
+eocCNUServiceTable_rowreq_ctx *
+eocCNUServiceTable_allocate_rowreq_ctx(eocCNUServiceTable_data * data,
+ void *user_init_ctx)
+{
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocCNUServiceTable_rowreq_ctx);
+
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "Couldn't allocate memory for a "
+ "eocCNUServiceTable_rowreq_ctx.\n");
+ return NULL;
+ }
+ else
+ {
+ if (NULL != data)
+ {
+ /*
+ * track if we got data from user
+ */
+ DEBUGMSGTL (("internal:eocCNUServiceTable:"
+ "eocCNUServiceTable_allocate_rowreq_ctx",
+ "data got from user\n"));
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DATA_FROM_USER;
+ rowreq_ctx->data = data;
+
+ /* TEMP: maybe set column_exists_flags somewhere else? */
+ /* TODO: check if index flag can be set here? */
+
+ if (INVALID_EOCCNUSERVICECONFINDEX ==
+ rowreq_ctx->data->eocCNUServiceConfIndex)
+ {
+ DEBUGMSGTL (("internal:eocCNUServiceTable:"
+ "eocCNUServiceTable_allocate_rowreq_ctx",
+ "config file index invalid\n"));
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICEINDEX_FLAG;
+ }
+
+ if (NULL == rowreq_ctx->data->eocCNUServiceName)
+ {
+ DEBUGMSGTL (("internal:eocCNUServiceTable:"
+ "eocCNUServiceTable_allocate_rowreq_ctx",
+ "service name null\n"));
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICENAME_FLAG;
+ }
+
+ if (INVALID_EOCCNUSERVICESERVICETYPE ==
+ rowreq_ctx->data->eocCNUServiceType)
+ {
+ DEBUGMSGTL (("internal:eocCNUServiceTable:"
+ "eocCNUServiceTable_allocate_rowreq_ctx",
+ "service type invalid\n"));
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICETYPE_FLAG;
+ }
+
+ if (INVALID_EOCCNUSERVICEQOSPRIO ==
+ rowreq_ctx->data->eocCNUServiceQOSPrio)
+ {
+ DEBUGMSGTL (("internal:eocCNUServiceTable:"
+ "eocCNUServiceTable_allocate_rowreq_ctx",
+ "QOS Prio invalid\n"));
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICEQOSPRIO_FLAG;
+ }
+
+ if (INVALID_EOCCNUSERVICEDBADOWNSTREAMPIR ==
+ rowreq_ctx->data->eocCNUServiceDBADownstreamPIR)
+ {
+ DEBUGMSGTL (("internal:eocCNUServiceTable:"
+ "eocCNUServiceTable_allocate_rowreq_ctx",
+ "Downstream PIR invalid\n"));
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG;
+ }
+
+ if (INVALID_EOCCNUSERVICEDBAUPSTREAMPIR ==
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamPIR)
+ {
+ DEBUGMSGTL (("internal:eocCNUServiceTable:"
+ "eocCNUServiceTable_allocate_rowreq_ctx",
+ "Upstream PIR invalid\n"));
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG;
+ }
+
+ if (INVALID_EOCCNUSERVICEDBADOWNSTREAMCIR ==
+ rowreq_ctx->data->eocCNUServiceDBADownstreamCIR)
+ {
+ DEBUGMSGTL (("internal:eocCNUServiceTable:"
+ "eocCNUServiceTable_allocate_rowreq_ctx",
+ "Downstream CIR invalid\n"));
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG;
+ }
+
+ if (INVALID_EOCCNUSERVICEDBAUPSTREAMCIR ==
+ rowreq_ctx->data->eocCNUServiceDBAUpstreamCIR)
+ {
+ DEBUGMSGTL (("internal:eocCNUServiceTable:"
+ "eocCNUServiceTable_allocate_rowreq_ctx",
+ "Upstream CIR invalid\n"));
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG;
+ }
+
+ if (INVALID_EOCCNUSERVICEMAXLATENCY ==
+ rowreq_ctx->data->eocCNUServiceMaxLatency)
+ {
+ DEBUGMSGTL (("internal:eocCNUServiceTable:"
+ "eocCNUServiceTable_allocate_rowreq_ctx",
+ "max latency invalid\n"));
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICEMAXLATENCY_FLAG;
+ }
+
+#ifdef USING_SPC300_EOC_MIB_MODULE
+ /* fields specific to SPC300EoC Service Table extension */
+ if (INVALID_SPC300EOCSLAVESERVICEMAXJITTER ==
+ rowreq_ctx->data->spc300EoCSlaveServiceMaxJitter)
+ {
+ DEBUGMSGTL (("internal:spc300EoCSlaveServiceTable:"
+ "spc300EoCSlaveServiceTable_allocate_rowreq_ctx",
+ "max jitter invalid\n"));
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_SPC300EOCSLAVESERVICEMAXJITTER_FLAG;
+ }
+
+ if (INVALID_SPC300EOCSLAVESERVICEACSEN ==
+ rowreq_ctx->data->spc300EoCSlaveServiceACSEn)
+ {
+ DEBUGMSGTL (("internal:spc300EoCSlaveServiceTable:"
+ "spc300EoCSlaveServiceTable_allocate_rowreq_ctx",
+ "ACS Enable invalid\n"));
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_SPC300EOCSLAVESERVICEACSEN_FLAG;
+ }
+#endif /* USING_SPC300_EOC_MIB_MODULE */
+
+ /* Row Status flag set to existing for allocation purposes */
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUSERVICEROWSTATUS_FLAG;
+ }
+ else if (NULL == (rowreq_ctx->data =
+ eocCNUServiceTable_allocate_data ()))
+ {
+ SNMP_FREE (rowreq_ctx);
+ return NULL;
+ }
+ }
+
+ /*
+ * undo context will be allocated when needed (in *_undo_setup)
+ */
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocCNUServiceTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocCNUServiceTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocCNUServiceTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocCNUServiceTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocCNUServiceTable_rowreq_ctx
+ */
+void
+eocCNUServiceTable_release_rowreq_ctx(eocCNUServiceTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUServiceTable:eocCNUServiceTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocCNUServiceTable_rowreq_ctx_cleanup(rowreq_ctx);
+ /*
+ * for non-transient data, don't free data we got from the user
+ */
+ if ((rowreq_ctx->data) &&
+ !(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER))
+ {
+ eocCNUServiceTable_release_data (rowreq_ctx->data);
+ }
+
+ if (rowreq_ctx->undo)
+ {
+ eocCNUServiceTable_release_data (rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocCNUServiceTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUServiceTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUServiceTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocCNUServiceTable_pre_request(eocCNUServiceTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUServiceTable","error %d from "
+ "eocCNUServiceTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUServiceTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUServiceTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocCNUServiceTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUServiceTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocCNUServiceTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocCNUServiceTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocCNUServiceTable_post_request(eocCNUServiceTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUServiceTable","error %d from "
+ "eocCNUServiceTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUServiceTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static eocCNUServiceTable_rowreq_ctx *
+_mfd_eocCNUServiceTable_rowreq_from_index(netsnmp_index *oid_idx, int * rc_ptr)
+{
+ eocCNUServiceTable_rowreq_ctx * rowreq_ctx;
+ eocCNUServiceTable_mib_index mib_idx;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_rowreq_from_index",
+ "called\n"));
+
+ if (NULL == rc_ptr)
+ rc_ptr = &rc;
+ *rc_ptr = MFD_SUCCESS;
+
+ memset(&mib_idx, 0x0, sizeof(mib_idx));
+
+ /*
+ * try to parse oid
+ */
+ *rc_ptr = eocCNUServiceTable_index_from_oid(oid_idx, &mib_idx);
+ if(MFD_SUCCESS != *rc_ptr) {
+ DEBUGMSGT(("eocCNUServiceTable", "error parsing index\n"));
+ return NULL;
+ }
+
+ /*
+ * allocate new context
+ */
+ rowreq_ctx = eocCNUServiceTable_allocate_rowreq_ctx (NULL, NULL);
+ if (NULL == rowreq_ctx) {
+ *rc_ptr = MFD_ERROR;
+ return NULL; /* msg already logged */
+ }
+
+ memcpy(&rowreq_ctx->tbl_idx, &mib_idx, sizeof(mib_idx));
+
+ /*
+ * check indexes
+ */
+ *rc_ptr = _eocCNUServiceTable_check_indexes(rowreq_ctx);
+ if(MFD_SUCCESS != *rc_ptr) {
+ netsnmp_assert((*rc_ptr == SNMP_ERR_NOCREATION) ||
+ (*rc_ptr == SNMP_ERR_INCONSISTENTNAME));
+ eocCNUServiceTable_release_rowreq_ctx(rowreq_ctx);
+ return NULL;
+ }
+
+ /*
+ * copy indexes
+ */
+ rowreq_ctx->oid_idx.len = oid_idx->len;
+ memcpy(rowreq_ctx->oid_idx.oids, oid_idx->oids, oid_idx->len * sizeof(oid));
+
+ return rowreq_ctx;
+} /* _mfd_eocCNUServiceTable_rowreq_from_index */
+
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUServiceTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocCNUServiceTable_interface_ctx *if_ctx =
+ * (eocCNUServiceTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ netsnmp_table_request_info *tblreq_info;
+ netsnmp_index oid_idx;
+
+ tblreq_info = netsnmp_extract_table_info(requests);
+ if(NULL == tblreq_info) {
+ snmp_log(LOG_ERR, "request had no table info\n");
+ return MFD_ERROR;
+ }
+
+ /*
+ * try create rowreq
+ */
+ oid_idx.oids = tblreq_info->index_oid;
+ oid_idx.len = tblreq_info->index_oid_len;
+
+ rowreq_ctx = _mfd_eocCNUServiceTable_rowreq_from_index(&oid_idx, &rc);
+ if(MFD_SUCCESS == rc) {
+ netsnmp_assert(NULL != rowreq_ctx);
+ rowreq_ctx->rowreq_flags |= MFD_ROW_CREATED;
+ /*
+ * add rowreq_ctx to request data lists
+ */
+ netsnmp_container_table_row_insert(requests, (netsnmp_index*)rowreq_ctx);
+ }
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocCNUServiceTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocCNUServiceTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUServiceTable_get_column( eocCNUServiceTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocCNUServiceIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCNUServiceIndex;
+ break;
+
+ /* eocCNUServiceName(2)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCNUSERVICENAME:
+ if (! (COLUMN_EOCCNUSERVICENAME_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_get_column",
+ "column %d (eocCNUServiceName) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->type = ASN_OCTET_STR;
+rc = eocCNUServiceName_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCNUServiceType(3)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICETYPE:
+ if (! (COLUMN_EOCCNUSERVICETYPE_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_get_column",
+ "column %d (eocCNUServiceType) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUServiceType_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUServiceQOSPrio(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/R/d/h */
+ case COLUMN_EOCCNUSERVICEQOSPRIO:
+ if (! (COLUMN_EOCCNUSERVICEQOSPRIO_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_get_column",
+ "column %d (eocCNUServiceQOSPrio) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUServiceQOSPrio_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUServiceDBADownstreamPIR(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR:
+ if (! (COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_get_column",
+ "column %d (eocCNUServiceDBADownstreamPIR) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUServiceDBADownstreamPIR_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUServiceDBAUpstreamPIR(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR:
+ if (! (COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_get_column",
+ "column %d (eocCNUServiceDBAUpstreamPIR) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUServiceDBAUpstreamPIR_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUServiceDBADownstreamCIR(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR:
+ if (! (COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_get_column",
+ "column %d (eocCNUServiceDBADownstreamCIR) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUServiceDBADownstreamCIR_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUServiceDBAUpstreamCIR(8)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR:
+ if (! (COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_get_column",
+ "column %d (eocCNUServiceDBAUpstreamCIR) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUServiceDBAUpstreamCIR_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUServiceMaxLatency(9)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEMAXLATENCY:
+ if (! (COLUMN_EOCCNUSERVICEMAXLATENCY_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_get_column",
+ "column %d (eocCNUServiceMaxLatency) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUServiceMaxLatency_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUServiceRowStatus(10)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUSERVICEROWSTATUS:
+ if (! (COLUMN_EOCCNUSERVICEROWSTATUS_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_get_column",
+ "column %d (eocCNUServiceRowStatus) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUServiceRowStatus_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ default:
+ if (EOCCNUSERVICETABLE_MIN_COL <= column && column <= EOCCNUSERVICETABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocCNUServiceTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocCNUServiceTable_get_column */
+
+int
+_mfd_eocCNUServiceTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ DEBUGMSGTL(("9:eocCNUServiceTable:_mfd_eocCNUServiceTable_get_values",
+ "exists %p\n", (void*)rowreq_ctx->column_exists_flags));
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUServiceTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUServiceTable_get_values */
+
+NETSNMP_STATIC_INLINE int
+_eocCNUServiceTable_check_indexes(eocCNUServiceTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_eocCNUServiceTable_check_indexes","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+
+ /* (INDEX) eocCNUServiceIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = eocCNUServiceIndex_check_index( rowreq_ctx );
+ if(MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * if individual parts look ok, check them as a whole
+ */
+ return eocCNUServiceTable_validate_index( eocCNUServiceTable_if_ctx.user_ctx, rowreq_ctx );
+} /* _eocCNUServiceTable_check_indexes */
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUServiceTable_check_column( eocCNUServiceTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_eocCNUServiceTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocCNUServiceIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocCNUServiceName(2)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCNUSERVICENAME:
+ rc = netsnmp_check_vb_type_and_max_size( var, ASN_OCTET_STR,
+ sizeof (rowreq_ctx->data->eocCNUServiceName));
+ /* check defined range(s). */
+ if( (SNMPERR_SUCCESS == rc)
+ && ((var->val_len < 0) || (var->val_len > 255))
+ ) {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUServiceTable:_eocCNUServiceTable_check_column:eocCNUServiceName",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUServiceName_check_value( rowreq_ctx, (char *)var->val.string, var->val_len );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUServiceName_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUServiceType(3)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICETYPE:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof (rowreq_ctx->data->eocCNUServiceType));
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUServiceTable:_eocCNUServiceTable_check_column:eocCNUServiceType",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUServiceType_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUServiceType_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUServiceQOSPrio(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/R/d/h */
+ case COLUMN_EOCCNUSERVICEQOSPRIO:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof (rowreq_ctx->data->eocCNUServiceQOSPrio));
+ /* check defined range(s). */
+ if( (SNMPERR_SUCCESS == rc)
+ && ((*var->val.integer < 0) || (*var->val.integer > 7))
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUServiceTable:_eocCNUServiceTable_check_column:eocCNUServiceQOSPrio",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUServiceQOSPrio_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUServiceQOSPrio_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUServiceDBADownstreamPIR(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof (rowreq_ctx->data->eocCNUServiceDBADownstreamPIR));
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUServiceTable:_eocCNUServiceTable_check_column:eocCNUServiceDBADownstreamPIR",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUServiceDBADownstreamPIR_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUServiceDBADownstreamPIR_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUServiceDBAUpstreamPIR(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof (rowreq_ctx->data->eocCNUServiceDBAUpstreamPIR));
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUServiceTable:_eocCNUServiceTable_check_column:eocCNUServiceDBAUpstreamPIR",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUServiceDBAUpstreamPIR_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUServiceDBAUpstreamPIR_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUServiceDBADownstreamCIR(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof (rowreq_ctx->data->eocCNUServiceDBADownstreamCIR));
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUServiceTable:_eocCNUServiceTable_check_column:eocCNUServiceDBADownstreamCIR",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUServiceDBADownstreamCIR_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUServiceDBADownstreamCIR_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUServiceDBAUpstreamCIR(8)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof (rowreq_ctx->data->eocCNUServiceDBAUpstreamCIR));
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUServiceTable:_eocCNUServiceTable_check_column:eocCNUServiceDBAUpstreamCIR",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUServiceDBAUpstreamCIR_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUServiceDBAUpstreamCIR_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUServiceMaxLatency(9)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEMAXLATENCY:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof (rowreq_ctx->data->eocCNUServiceMaxLatency));
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUServiceTable:_eocCNUServiceTable_check_column:eocCNUServiceMaxLatency",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUServiceMaxLatency_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUServiceMaxLatency_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUServiceRowStatus(10)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUSERVICEROWSTATUS:
+rc = netsnmp_check_vb_rowstatus_value(var);
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUServiceTable:_eocCNUServiceTable_check_column:eocCNUServiceRowStatus",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUServiceRowStatus_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUServiceRowStatus_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocCNUServiceTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocCNUServiceTable_check_column */
+
+int
+_mfd_eocCNUServiceTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUServiceTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUServiceTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: check dependencies
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check dependencies wrapper
+ */
+static int
+_mfd_eocCNUServiceTable_check_dependencies (netsnmp_mib_handler * handler,
+ netsnmp_handler_registration *
+ reginfo,
+ netsnmp_agent_request_info *
+ agtreq_info,
+ netsnmp_request_info * requests)
+{
+ int rc;
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract (requests);
+ DEBUGMSGTL (("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable"
+ "_check_dependencies", "called\n"));
+
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ rc = eocCNUServiceTable_check_dependencies (rowreq_ctx);
+ if (rc)
+ {
+ DEBUGMSGTL (("eocCNUServiceTable:mfd", "error %d from "
+ "eocCNUServiceTable_check_dependencies\n", rc));
+ netsnmp_request_set_error_all (requests, SNMP_VALIDATE_ERR (rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUServiceTable_check_dependencies */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUServiceTable_undo_setup_column( eocCNUServiceTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_eocCNUServiceTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUServiceName(2)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCNUSERVICENAME:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICENAME_FLAG;
+ rc = eocCNUServiceName_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUServiceType(3)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICETYPE:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICETYPE_FLAG;
+ rc = eocCNUServiceType_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUServiceQOSPrio(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/R/d/h */
+ case COLUMN_EOCCNUSERVICEQOSPRIO:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEQOSPRIO_FLAG;
+ rc = eocCNUServiceQOSPrio_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUServiceDBADownstreamPIR(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG;
+ rc = eocCNUServiceDBADownstreamPIR_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUServiceDBAUpstreamPIR(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG;
+ rc = eocCNUServiceDBAUpstreamPIR_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUServiceDBADownstreamCIR(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG;
+ rc = eocCNUServiceDBADownstreamCIR_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUServiceDBAUpstreamCIR(8)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG;
+ rc = eocCNUServiceDBAUpstreamCIR_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUServiceMaxLatency(9)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEMAXLATENCY:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEMAXLATENCY_FLAG;
+ rc = eocCNUServiceMaxLatency_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUServiceRowStatus(10)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUSERVICEROWSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEROWSTATUS_FLAG;
+ rc = eocCNUServiceRowStatus_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUServiceTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUServiceTable_undo_setup_column */
+
+/* TODO: check if this is really necessary? */
+int
+_mfd_eocCNUServiceTable_undo_setup_allocate (eocCNUServiceTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ if (NULL == rowreq_ctx)
+ return MFD_ERROR;
+
+ /*
+ * other tables share our container/context and call
+ * this function. so we need to check and see if
+ * someone else already allocated data
+ */
+ if (NULL == rowreq_ctx->undo)
+ {
+ rowreq_ctx->undo = eocCNUServiceTable_allocate_data ();
+ if (NULL == rowreq_ctx->undo)
+ {
+ /** msg already logged */
+ rc = SNMP_ERR_RESOURCEUNAVAILABLE;
+ }
+ else
+ {
+ /* TODO: check if something should be done here? */
+ }
+ }
+ ++rowreq_ctx->undo_ref_count;
+ DEBUGMSGTL (("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_undo_setup_allocate",
+ "++undo_refcount = %d\n", rowreq_ctx->undo_ref_count));
+
+ return rc;
+}
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUServiceTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocCNUServiceTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocCNUServiceTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUServiceTable:mfd","error %d from "
+ "eocCNUServiceTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUServiceTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUServiceTable:mfd","error %d from "
+ "eocCNUServiceTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUServiceTable_undo_setup */
+
+void
+_mfd_eocCNUServiceTable_undo_setup_release (eocCNUServiceTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ DEBUGMSGTL (("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable"
+ "_undo_setup_release", "called\n"));
+
+ netsnmp_assert (rowreq_ctx->undo_ref_count > 0);
+ --rowreq_ctx->undo_ref_count;
+ snmp_log (LOG_ERR, "undo_refcount at %d\n", rowreq_ctx->undo_ref_count);
+
+ if (0 == rowreq_ctx->undo_ref_count)
+ {
+ eocCNUServiceTable_release_data (rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+}
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUServiceTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocCNUServiceTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUServiceTable:mfd","error %d from "
+ "eocCNUServiceTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ _mfd_eocCNUServiceTable_undo_setup_release (rowreq_ctx);
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUServiceTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUServiceTable_set_column( eocCNUServiceTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_eocCNUServiceTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUServiceName(2)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCNUSERVICENAME:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICENAME_FLAG;
+ rc = eocCNUServiceName_set(rowreq_ctx, (char *)var->val.string, var->val_len );
+ break;
+
+ /* eocCNUServiceType(3)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICETYPE:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICETYPE_FLAG;
+ rc = eocCNUServiceType_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCNUServiceQOSPrio(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/R/d/h */
+ case COLUMN_EOCCNUSERVICEQOSPRIO:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEQOSPRIO_FLAG;
+ rc = eocCNUServiceQOSPrio_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCNUServiceDBADownstreamPIR(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG;
+ rc = eocCNUServiceDBADownstreamPIR_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCNUServiceDBAUpstreamPIR(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG;
+ rc = eocCNUServiceDBAUpstreamPIR_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCNUServiceDBADownstreamCIR(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG;
+ rc = eocCNUServiceDBADownstreamCIR_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCNUServiceDBAUpstreamCIR(8)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG;
+ rc = eocCNUServiceDBAUpstreamCIR_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCNUServiceMaxLatency(9)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEMAXLATENCY:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEMAXLATENCY_FLAG;
+ rc = eocCNUServiceMaxLatency_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCNUServiceRowStatus(10)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUSERVICEROWSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUSERVICEROWSTATUS_FLAG;
+ rc = eocCNUServiceRowStatus_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUServiceTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocCNUServiceTable_set_column */
+
+int
+_mfd_eocCNUServiceTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUServiceTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUServiceTable:mfd","error %d from "
+ "eocCNUServiceTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUServiceTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocCNUServiceTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUServiceTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUServiceTable:mfd","error %d from "
+ "eocCNUServiceTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocCNUServiceTable_dirty_set( eocCNUServiceTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocCNUServiceTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocCNUServiceTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocCNUServiceTable_dirty_set( d - 1 );
+ }
+
+ rc = eocCNUServiceTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUServiceTable:mfd","error %d from "
+ "eocCNUServiceTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocCNUServiceTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUServiceTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUServiceTable_undo_column( eocCNUServiceTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_eocCNUServiceTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUServiceName(2)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCCNUSERVICENAME:
+ rc = eocCNUServiceName_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUServiceType(3)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICETYPE:
+ rc = eocCNUServiceType_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUServiceQOSPrio(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/R/d/h */
+ case COLUMN_EOCCNUSERVICEQOSPRIO:
+ rc = eocCNUServiceQOSPrio_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUServiceDBADownstreamPIR(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR:
+ rc = eocCNUServiceDBADownstreamPIR_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUServiceDBAUpstreamPIR(6)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR:
+ rc = eocCNUServiceDBAUpstreamPIR_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUServiceDBADownstreamCIR(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR:
+ rc = eocCNUServiceDBADownstreamCIR_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUServiceDBAUpstreamCIR(8)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR:
+ rc = eocCNUServiceDBAUpstreamCIR_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUServiceMaxLatency(9)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUSERVICEMAXLATENCY:
+ rc = eocCNUServiceMaxLatency_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUServiceRowStatus(10)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUSERVICEROWSTATUS:
+ rc = eocCNUServiceRowStatus_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUServiceTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUServiceTable_undo_column */
+
+int
+_mfd_eocCNUServiceTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUServiceTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUServiceTable:mfd","error %d from "
+ "eocCNUServiceTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUServiceTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUServiceTable:mfd","error %d from "
+ "eocCNUServiceTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUServiceTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocCNUServiceTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_eocCNUServiceTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocCNUServiceTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_mfd_irreversible_commit",
+ "updating exists (%p) w/set (%p) = %p\n",
+ rowreq_ctx->column_exists_flags,
+ rowreq_ctx->column_set_flags,
+ (rowreq_ctx->column_exists_flags |
+ rowreq_ctx->column_set_flags)));
+ rowreq_ctx->column_exists_flags |=
+ rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+ }
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_CREATED;
+ CONTAINER_INSERT(eocCNUServiceTable_if_ctx.container, rowreq_ctx);
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUServiceTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocCNUServiceTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ if (eoccnu_adding_service)
+ {
+ snmp_log (LOG_ERR, "skipping eocCNUServiceTable_cache_load, "
+ "row adding in progress\n");
+ return SNMP_ERR_NOERROR;
+ }
+ else
+ {
+ return eocCNUServiceTable_container_load ((netsnmp_container *)
+ cache->magic);
+ }
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocCNUServiceTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ if (!eoccnu_adding_service)
+ {
+ _container_free (container);
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "skipping eocCNUServiceTable_cache_free, "
+ "row adding in progress\n");
+ }
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocCNUServiceTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocCNUServiceTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocCNUServiceTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocCNUServiceTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocCNUServiceTable_container_init(eocCNUServiceTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_eocCNUServiceTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocCNUServiceTable_oid,
+ eocCNUServiceTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocCNUServiceTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocCNUServiceTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocCNUServiceTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocCNUServiceTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocCNUServiceTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocCNUServiceTable_container_shutdown(eocCNUServiceTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUServiceTable:_eocCNUServiceTable_container_shutdown","called\n"));
+
+ eocCNUServiceTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocCNUServiceTable_container_shutdown */
+
+
+eocCNUServiceTable_rowreq_ctx *
+eocCNUServiceTable_row_find_by_mib_index(eocCNUServiceTable_mib_index *mib_idx)
+{
+ eocCNUServiceTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocCNUServiceTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocCNUServiceTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_interface.h
new file mode 100644
index 0000000000..13023faabf
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_interface.h
@@ -0,0 +1,89 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCCNUSERVICETABLE_INTERFACE_H
+#define EOCCNUSERVICETABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocCNUServiceTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocCNUServiceTable_initialize_interface(eocCNUServiceTable_registration * user_ctx,
+ u_long flags);
+void _eocCNUServiceTable_shutdown_interface(eocCNUServiceTable_registration * user_ctx);
+
+eocCNUServiceTable_registration *
+eocCNUServiceTable_registration_get( void );
+
+eocCNUServiceTable_registration *
+eocCNUServiceTable_registration_set( eocCNUServiceTable_registration * newreg );
+
+netsnmp_container *eocCNUServiceTable_container_get( void );
+int eocCNUServiceTable_container_size( void );
+
+u_int eocCNUServiceTable_dirty_get( void );
+void eocCNUServiceTable_dirty_set( u_int status );
+
+eocCNUServiceTable_data *eocCNUServiceTable_allocate_data (void);
+eocCNUServiceTable_rowreq_ctx *
+eocCNUServiceTable_allocate_rowreq_ctx(eocCNUServiceTable_data *, void *);
+void eocCNUServiceTable_release_rowreq_ctx(eocCNUServiceTable_rowreq_ctx *rowreq_ctx);
+
+int eocCNUServiceTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUServiceTable_mib_index *mib_idx);
+int eocCNUServiceTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUServiceTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocCNUServiceTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUSERVICETABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_oids.h
new file mode 100644
index 0000000000..8a0c0b4eb5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUService/eocCNUServiceTable/eocCNUServiceTable_oids.h
@@ -0,0 +1,71 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUSERVICETABLE_OIDS_H
+#define EOCCNUSERVICETABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* column number definitions for table eocCNUServiceTable */
+#define EOCCNUSERVICETABLE_OID 1,3,6,1,4,1,17409,2,4,5,3,2
+
+
+#define COLUMN_EOCCNUSERVICEINDEX 1
+#define COLUMN_EOCCNUSERVICEINDEX_FLAG (0x1 << 0)
+
+#define COLUMN_EOCCNUSERVICENAME 2
+#define COLUMN_EOCCNUSERVICENAME_FLAG (0x1 << 1)
+
+#define COLUMN_EOCCNUSERVICETYPE 3
+#define COLUMN_EOCCNUSERVICETYPE_FLAG (0x1 << 2)
+
+#define COLUMN_EOCCNUSERVICEQOSPRIO 4
+#define COLUMN_EOCCNUSERVICEQOSPRIO_FLAG (0x1 << 3)
+
+#define COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR 5
+#define COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG (0x1 << 4)
+
+#define COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR 6
+#define COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG (0x1 << 5)
+
+#define COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR 7
+#define COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG (0x1 << 6)
+
+#define COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR 8
+#define COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG (0x1 << 7)
+
+#define COLUMN_EOCCNUSERVICEMAXLATENCY 9
+#define COLUMN_EOCCNUSERVICEMAXLATENCY_FLAG (0x1 << 8)
+
+#define COLUMN_EOCCNUSERVICEROWSTATUS 10
+#define COLUMN_EOCCNUSERVICEROWSTATUS_FLAG (0x1 << 9)
+
+
+#define EOCCNUSERVICETABLE_MIN_COL COLUMN_EOCCNUSERVICEINDEX
+#define EOCCNUSERVICETABLE_MAX_COL COLUMN_EOCCNUSERVICEROWSTATUS
+
+
+ /*
+ * TODO:405:r: Review EOCCNUSERVICETABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCCNUSERVICETABLE_SETTABLE_COLS (COLUMN_EOCCNUSERVICEINDEX_FLAG | COLUMN_EOCCNUSERVICENAME_FLAG | COLUMN_EOCCNUSERVICETYPE_FLAG | COLUMN_EOCCNUSERVICEQOSPRIO_FLAG | COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG | COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG | COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG | COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG | COLUMN_EOCCNUSERVICEMAXLATENCY_FLAG | COLUMN_EOCCNUSERVICEROWSTATUS_FLAG)
+ /*
+ * TODO:405:r: Review EOCCNUSERVICETABLE_REQUIRED_COLS macro.
+ * OR together all the required rows for row creation.
+ * default is writable cols w/out defaults.
+ */
+#define EOCCNUSERVICETABLE_REQUIRED_COLS (COLUMN_EOCCNUSERVICENAME_FLAG | COLUMN_EOCCNUSERVICETYPE_FLAG | COLUMN_EOCCNUSERVICEQOSPRIO_FLAG | COLUMN_EOCCNUSERVICEDBADOWNSTREAMPIR_FLAG | COLUMN_EOCCNUSERVICEDBAUPSTREAMPIR_FLAG | COLUMN_EOCCNUSERVICEDBADOWNSTREAMCIR_FLAG | COLUMN_EOCCNUSERVICEDBAUPSTREAMCIR_FLAG | COLUMN_EOCCNUSERVICEMAXLATENCY_FLAG | COLUMN_EOCCNUSERVICEROWSTATUS_FLAG)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUSERVICETABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList.h
new file mode 100644
index 0000000000..1d44cb5b98
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList.h
@@ -0,0 +1 @@
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable.h
new file mode 100644
index 0000000000..2cd090cc3f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_interface)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_access)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_set)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_get)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/node-eocCNUUnauthListCltNo.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/node-eocCNUUnauthListCltNo.m2d
new file mode 100644
index 0000000000..912fade731
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/node-eocCNUUnauthListCltNo.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUUnauthListCltNo
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/node-eocCNUUnauthListCnuNo.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/node-eocCNUUnauthListCnuNo.m2d
new file mode 100644
index 0000000000..15c5350682
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/node-eocCNUUnauthListCnuNo.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUUnauthListCnuNo
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/node-eocCNUUnauthListMac.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/node-eocCNUUnauthListMac.m2d
new file mode 100644
index 0000000000..2d74166195
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/node-eocCNUUnauthListMac.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCNUUnauthListMac
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/table-eocCNUUnauthListTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/table-eocCNUUnauthListTable.m2d
new file mode 100644
index 0000000000..ffabb62464
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/defaults/table-eocCNUUnauthListTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocCNUUnauthListTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 0@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable-README-FIRST.txt
new file mode 100644
index 0000000000..1ecb1c3d73
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocCNUUnauthListTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocCNUUnauthListTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocCNUUnauthListTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocCNUUnauthListTable_Makefile
+
+
+ File : eocCNUUnauthListTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocCNUUnauthListTable-README-eocCNUUnauthListTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocCNUUnauthListTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocCNUUnauthListTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocCNUUnauthListTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocCNUUnauthListTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable-README-eocCNUUnauthListTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable-README-eocCNUUnauthListTable.txt
new file mode 100644
index 0000000000..ea7801ed02
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable-README-eocCNUUnauthListTable.txt
@@ -0,0 +1,492 @@
+************************************************************************
+eocCNUUnauthListTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocCNUUnauthListTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocCNUUnauthListTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocCNUUnauthListTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUUnauthListTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUUnauthListTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUUnauthListTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocCNUUnauthListTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUUnauthListTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocCNUUnauthListTable_allocate_data
+ eocCNUUnauthListTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocCNUUnauthListTable_rowreq_ctx_init
+ eocCNUUnauthListTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocCNUUnauthListTable table
+ ------------------------------------------------------------
+ The index(es) for the eocCNUUnauthListTable table are:
+
+ eocCNUUnauthListMac:
+ Syntax: MacAddress
+ DataType: OCTETSTR
+ ASN type: ASN_OCTET_STR
+ C-code type: char
+
+ You should know how to set all these values from your data context,
+ eocCNUUnauthListTable_data.
+
+
+************************************************************************
+eocCNUUnauthListTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocCNUUnauthListTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocCNUUnauthListTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocCNUUnauthListTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocCNUUnauthListTable_indexes_set
+ WHERE: eocCNUUnauthListTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocCNUUnauthListTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocCNUUnauthListTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUUnauthListCltNo_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUUnauthListCnuNo_get
+
+
+
+File: eocCNUUnauthListTable_data_set.c
+------------------------------------------------------------------------
+
+ This table does not support set requests.
+
+
+************************************************************************
+eocCNUUnauthListTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocCNUUnauthListTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocCNUUnauthListTable table.
+
+To watch the flow of the eocCNUUnauthListTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocCNUUnauthListTable
+ verbose:eocCNUUnauthListTable
+ internal:eocCNUUnauthListTable
+
+e.g.
+ snmpd -f -Le -DeocCNUUnauthListTable,verbose:eocCNUUnauthListTable,internal:eocCNUUnauthListTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUUnauthListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUUnauthListTable is subid 1 of eocCNUUnauthList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.5.1, length: 12
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUUnauthListEntry.eocCNUUnauthListMac
+ * eocCNUUnauthListMac is subid 1 of eocCNUUnauthListEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.5.1.1.1
+ * Description:
+The MAC address of the unauthenticated CNU.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 1 hashint 1
+ * settable 0
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ *
+ *
+ *
+ * NOTE: NODE eocCNUUnauthListMac IS NOT ACCESSIBLE
+ *
+ *
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUUnauthListEntry.eocCNUUnauthListCltNo
+ * eocCNUUnauthListCltNo is subid 2 of eocCNUUnauthListEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.5.1.1.2
+ * Description:
+the CLT index of the unauthenticated CNU.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUUnauthListEntry.eocCNUUnauthListCnuNo
+ * eocCNUUnauthListCnuNo is subid 3 of eocCNUUnauthListEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.5.1.1.3
+ * Description:
+the CNU index of the unauthenticated CNU.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable.c
new file mode 100644
index 0000000000..45b0818c50
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable.c
@@ -0,0 +1,208 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocCNUUnauthListTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUUnauthListTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocCNUUnauthListTable_interface.h"
+
+oid eocCNUUnauthListTable_oid[] = { EOCCNUUNAUTHLISTTABLE_OID };
+int eocCNUUnauthListTable_oid_size = OID_LENGTH(eocCNUUnauthListTable_oid);
+
+ eocCNUUnauthListTable_registration eocCNUUnauthListTable_user_context;
+
+void initialize_table_eocCNUUnauthListTable(void);
+void shutdown_table_eocCNUUnauthListTable(void);
+
+
+/**
+ * Initializes the eocCNUUnauthListTable module
+ */
+void
+init_eocCNUUnauthListTable(void)
+{
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:init_eocCNUUnauthListTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocCNUUnauthListTable one-time module initialization.
+ */
+ static int eocCNUUnauthListTable_did_init = 0;
+ if (++eocCNUUnauthListTable_did_init != 1)
+ {
+ DEBUGMSGTL (("eocCNUUnauthListTable_did_init:"
+ "init_eocCNUUnauthListTable",
+ "ignoring duplicate call\n"));
+ return;
+ }
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocCNUUnauthListTable"))
+ initialize_table_eocCNUUnauthListTable();
+
+} /* init_eocCNUUnauthListTable */
+
+/**
+ * Shut-down the eocCNUUnauthListTable module (agent is exiting)
+ */
+void
+shutdown_eocCNUUnauthListTable(void)
+{
+ if (should_init("eocCNUUnauthListTable"))
+ shutdown_table_eocCNUUnauthListTable();
+
+}
+
+/**
+ * Initialize the table eocCNUUnauthListTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocCNUUnauthListTable(void)
+{
+ eocCNUUnauthListTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:initialize_table_eocCNUUnauthListTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocCNUUnauthListTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocCNUUnauthListTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocCNUUnauthListTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocCNUUnauthListTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocCNUUnauthListTable */
+
+/**
+ * Shutdown the table eocCNUUnauthListTable
+ */
+void
+shutdown_table_eocCNUUnauthListTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocCNUUnauthListTable_shutdown_interface(&eocCNUUnauthListTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocCNUUnauthListTable_rowreq_ctx_init(eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocCNUUnauthListTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUUnauthListTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocCNUUnauthListTable_rowreq_ctx_cleanup(eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocCNUUnauthListTable rowreq cleanup.
+ */
+} /* eocCNUUnauthListTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocCNUUnauthListTable_pre_request(eocCNUUnauthListTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocCNUUnauthListTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUUnauthListTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocCNUUnauthListTable_post_request(eocCNUUnauthListTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocCNUUnauthListTable post-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUUnauthListTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable.h
new file mode 100644
index 0000000000..05c292ca56
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable.h
@@ -0,0 +1,192 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUUNAUTHLISTTABLE_H
+#define EOCCNUUNAUTHLISTTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* include common header */
+#include "EoCCommon.h"
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+/* other required module components */
+ /* *INDENT-OFF* */
+ /* *INDENT-ON* */
+
+/* OID and column number definitions for eocCNUUnauthListTable */
+#include "eocCNUUnauthListTable_oids.h"
+
+/* enum definions */
+#include "eocCNUUnauthListTable_enums.h"
+
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocCNUUnauthListTable(void);
+void shutdown_eocCNUUnauthListTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUUnauthListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUUnauthListTable is subid 1 of eocCNUUnauthList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.5.1, length: 12
+*/
+/* *********************************************************************
+ * 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 eocCNUUnauthListTable registration context.
+ */
+typedef netsnmp_data_list eocCNUUnauthListTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocCNUUnauthListTable data context structure.
+ * This structure is used to represent the data for eocCNUUnauthListTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocCNUUnauthListTable.
+ */
+typedef struct eocCNUUnauthListTable_data_s {
+
+ /*
+ * eocCNUUnauthListCltNo(2)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUUnauthListCltNo;
+
+ /*
+ * eocCNUUnauthListCnuNo(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUUnauthListCnuNo;
+
+} eocCNUUnauthListTable_data;
+
+
+/*
+ * TODO:120:r: |-> Review eocCNUUnauthListTable mib index.
+ * This structure is used to represent the index for eocCNUUnauthListTable.
+ */
+typedef struct eocCNUUnauthListTable_mib_index_s {
+
+ /*
+ * eocCNUUnauthListMac(1)/MacAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/H
+ */
+ char eocCNUUnauthListMac[6];
+ size_t eocCNUUnauthListMac_len;
+
+
+} eocCNUUnauthListTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocCNUUnauthListTable 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(12)
+*/
+#define MAX_eocCNUUnauthListTable_IDX_LEN 7
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocCNUUnauthListTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocCNUUnauthListTable_rowreq_ctx pointer.
+ */
+typedef struct eocCNUUnauthListTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocCNUUnauthListTable_IDX_LEN];
+
+ eocCNUUnauthListTable_mib_index tbl_idx;
+
+ eocCNUUnauthListTable_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 eocCNUUnauthListTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocCNUUnauthListTable_data_list;
+
+} eocCNUUnauthListTable_rowreq_ctx;
+
+typedef struct eocCNUUnauthListTable_ref_rowreq_ctx_s {
+ eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx;
+} eocCNUUnauthListTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocCNUUnauthListTable_pre_request(eocCNUUnauthListTable_registration * user_context);
+ int eocCNUUnauthListTable_post_request(eocCNUUnauthListTable_registration * user_context,
+ int rc);
+
+ int eocCNUUnauthListTable_rowreq_ctx_init(eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocCNUUnauthListTable_rowreq_ctx_cleanup(eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx);
+
+
+ eocCNUUnauthListTable_rowreq_ctx *
+ eocCNUUnauthListTable_row_find_by_mib_index(eocCNUUnauthListTable_mib_index *mib_idx);
+
+extern oid eocCNUUnauthListTable_oid[];
+extern int eocCNUUnauthListTable_oid_size;
+
+
+#include "eocCNUUnauthListTable_interface.h"
+#include "eocCNUUnauthListTable_data_access.h"
+#include "eocCNUUnauthListTable_data_get.h"
+#include "eocCNUUnauthListTable_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 /* EOCCNUUNAUTHLISTTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_access.c
new file mode 100644
index 0000000000..ef36152eaa
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_access.c
@@ -0,0 +1,356 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUUnauthListTable.h"
+
+
+#include "eocCNUUnauthListTable_data_access.h"
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUUnauthListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUUnauthListTable is subid 1 of eocCNUUnauthList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.5.1, length: 12
+*/
+
+/**
+ * initialization for eocCNUUnauthListTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocCNUUnauthListTable_reg
+ * Pointer to eocCNUUnauthListTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocCNUUnauthListTable_init_data(eocCNUUnauthListTable_registration * eocCNUUnauthListTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocCNUUnauthListTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUUnauthListTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocCNUUnauthListTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocCNUUnauthListTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocCNUUnauthListTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocCNUUnauthListTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCCNUUNAUTHLISTTABLE_CACHE_TIMEOUT; /* seconds */
+} /* eocCNUUnauthListTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocCNUUnauthListTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocCNUUnauthListTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocCNUUnauthListTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocCNUUnauthListTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocCNUUnauthListTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocCNUUnauthListTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocCNUUnauthListTable_container_load(netsnmp_container *container)
+{
+ eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocCNUUnauthListMac(1)/MacAddress/ASN_OCTET_STR/
+ * char(char)//L/a/w/e/R/d/H
+ */
+ char eocCNUUnauthListMac[6];
+ size_t eocCNUUnauthListMac_len;
+ char mac[LIBSPID_MAC_STR_LEN];
+
+ mac_t mac_address_list[LIBSPID_ONLINE_INFO_LINE_MAX_NB];
+ int mac_address_count = 0;
+ int i;
+
+ DEBUGMSGTL (("verbose:eocCNUUnauthListTable:"
+ "eocCNUUnauthListTable_container_load", "called\n"));
+ if (libspid_eoc_get_topo (mac_address_list[0], &mac_address_count)
+ != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_get_topo error\n");
+ return MFD_ERROR;
+ }
+ for (i = 0; i < mac_address_count; i++)
+ {
+ libspid_mac_bin_to_str (mac_address_list[i], mac);
+ if (LIBSPID_SUCCESS == libspid_eoc_wl_authorization (mac))
+ continue;
+
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_str_to_bin (mac, eocCNUUnauthListMac))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_str_to_bin error\n");
+ return MFD_ERROR;
+ }
+ eocCNUUnauthListMac_len = 6;
+ /*
+ * TODO:351:M: |-> Load/update data in the eocCNUUnauthListTable
+ * container.
+ * loop over your eocCNUUnauthListTable data, allocate a
+ * rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ /*
+ * check for end of data; bail out if there is no more data
+ */
+
+ /*
+ * TODO:352:M: | |-> set indexes in new eocCNUUnauthListTable
+ * rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocCNUUnauthListTable_allocate_rowreq_ctx (NULL);
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if (MFD_SUCCESS !=
+ eocCNUUnauthListTable_indexes_set (rowreq_ctx,
+ eocCNUUnauthListMac,
+ eocCNUUnauthListMac_len))
+ {
+ snmp_log (LOG_ERR, "error setting index while loading "
+ "eocCNUUnauthListTable data.\n");
+ eocCNUUnauthListTable_release_rowreq_ctx (rowreq_ctx);
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+
+ /*
+ * TODO:352:r: | |-> populate eocCNUUnauthListTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocCNUUnauthListCltNo
+ * eocCNUUnauthListCltNo(2)/INTEGER32/
+ * ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocCNUUnauthListCltNo = 0;
+
+ /*
+ * setup/save data for eocCNUUnauthListCnuNo
+ * eocCNUUnauthListCnuNo(3)/INTEGER32/
+ * ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocCNUUnauthListCnuNo = i + 1;
+
+
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT(container, rowreq_ctx);
+ ++count;
+ }
+
+ DEBUGMSGT(("verbose:eocCNUUnauthListTable:",
+ "eocCNUUnauthListTable_container_load",
+ "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+} /* eocCNUUnauthListTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocCNUUnauthListTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocCNUUnauthListTable container data.
+ */
+} /* eocCNUUnauthListTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocCNUUnauthListTable_row_prep( eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUUnauthListTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_access.h
new file mode 100644
index 0000000000..722ea8389f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_access.h
@@ -0,0 +1,63 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUUNAUTHLISTTABLE_DATA_ACCESS_H
+#define EOCCNUUNAUTHLISTTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUUnauthListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUUnauthListTable is subid 1 of eocCNUUnauthList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.5.1, length: 12
+*/
+
+
+ int eocCNUUnauthListTable_init_data(eocCNUUnauthListTable_registration * eocCNUUnauthListTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocCNUUnauthListTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCCNUUNAUTHLISTTABLE_CACHE_TIMEOUT 60
+
+void eocCNUUnauthListTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocCNUUnauthListTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocCNUUnauthListTable_container_load(netsnmp_container *container);
+void eocCNUUnauthListTable_container_free(netsnmp_container *container);
+
+int eocCNUUnauthListTable_cache_load(netsnmp_container *container);
+void eocCNUUnauthListTable_cache_free(netsnmp_container *container);
+
+ int eocCNUUnauthListTable_row_prep( eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUUNAUTHLISTTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_get.c
new file mode 100644
index 0000000000..e77a95e6f9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_get.c
@@ -0,0 +1,232 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUUnauthListTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocCNUUnauthListTable get routines.
+ * TODO:240:M: Implement eocCNUUnauthListTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUUnauthListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUUnauthListTable is subid 1 of eocCNUUnauthList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.5.1, length: 12
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocCNUUnauthListTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocCNUUnauthListMac_ptr
+ * @param eocCNUUnauthListMac_ptr_len
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocCNUUnauthListTable_indexes_set_tbl_idx(eocCNUUnauthListTable_mib_index *tbl_idx, char *eocCNUUnauthListMac_val_ptr, size_t eocCNUUnauthListMac_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocCNUUnauthListMac(1)/MacAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/H */
+ tbl_idx->eocCNUUnauthListMac_len = sizeof(tbl_idx->eocCNUUnauthListMac)/sizeof(tbl_idx->eocCNUUnauthListMac[0]); /* max length */
+ /*
+ * make sure there is enough space for eocCNUUnauthListMac data
+ */
+ if ((NULL == tbl_idx->eocCNUUnauthListMac) ||
+ (tbl_idx->eocCNUUnauthListMac_len <
+ (eocCNUUnauthListMac_val_ptr_len))) {
+ snmp_log(LOG_ERR,"not enough space for value\n");
+ return MFD_ERROR;
+ }
+ tbl_idx->eocCNUUnauthListMac_len = eocCNUUnauthListMac_val_ptr_len;
+ memcpy( tbl_idx->eocCNUUnauthListMac, eocCNUUnauthListMac_val_ptr, eocCNUUnauthListMac_val_ptr_len* sizeof(eocCNUUnauthListMac_val_ptr[0]) );
+
+
+ return MFD_SUCCESS;
+} /* eocCNUUnauthListTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocCNUUnauthListTable_indexes_set (
+ eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx,
+ char *eocCNUUnauthListMac_val_ptr,
+ size_t eocCNUUnauthListMac_val_ptr_len)
+{
+ DEBUGMSGTL (("verbose:eocCNUUnauthListTable:",
+ "eocCNUUnauthListTable_indexes_set",
+ "called\n"));
+
+ if(MFD_SUCCESS !=
+ eocCNUUnauthListTable_indexes_set_tbl_idx (
+ &rowreq_ctx->tbl_idx,
+ eocCNUUnauthListMac_val_ptr,
+ eocCNUUnauthListMac_val_ptr_len))
+ return MFD_ERROR;
+ int i;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = rowreq_ctx->tbl_idx.eocCNUUnauthListMac_len;
+ for (i = 0; i < rowreq_ctx->oid_idx.len; i++)
+ {
+ rowreq_ctx->oid_idx.oids[i] =
+ rowreq_ctx->tbl_idx.eocCNUUnauthListMac[i];
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUUnauthListTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUUnauthListEntry.eocCNUUnauthListCltNo
+ * eocCNUUnauthListCltNo is subid 2 of eocCNUUnauthListEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.5.1.1.2
+ * Description:
+the CLT index of the unauthenticated CNU.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUUnauthListCltNo data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUUnauthListCltNo_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUUnauthListCltNo_get( eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx, long * eocCNUUnauthListCltNo_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUUnauthListCltNo_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListCltNo_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUUnauthListCltNo data.
+ * copy (* eocCNUUnauthListCltNo_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUUnauthListCltNo_val_ptr ) = rowreq_ctx->data.eocCNUUnauthListCltNo;
+
+ return MFD_SUCCESS;
+} /* eocCNUUnauthListCltNo_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUUnauthListEntry.eocCNUUnauthListCnuNo
+ * eocCNUUnauthListCnuNo is subid 3 of eocCNUUnauthListEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.5.1.1.3
+ * Description:
+the CNU index of the unauthenticated CNU.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUUnauthListCnuNo data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUUnauthListCnuNo_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUUnauthListCnuNo_get( eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx, long * eocCNUUnauthListCnuNo_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUUnauthListCnuNo_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListCnuNo_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUUnauthListCnuNo data.
+ * copy (* eocCNUUnauthListCnuNo_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUUnauthListCnuNo_val_ptr ) = rowreq_ctx->data.eocCNUUnauthListCnuNo;
+
+ return MFD_SUCCESS;
+} /* eocCNUUnauthListCnuNo_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_get.h
new file mode 100644
index 0000000000..433f4141bb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_get.h
@@ -0,0 +1,60 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocCNUUnauthListTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCCNUUNAUTHLISTTABLE_DATA_GET_H
+#define EOCCNUUNAUTHLISTTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUUnauthListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUUnauthListTable is subid 1 of eocCNUUnauthList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.5.1, length: 12
+*/
+ /*
+ * indexes
+ */
+
+ int eocCNUUnauthListCltNo_get( eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx, long * eocCNUUnauthListCltNo_val_ptr );
+ int eocCNUUnauthListCnuNo_get( eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx, long * eocCNUUnauthListCnuNo_val_ptr );
+
+
+int eocCNUUnauthListTable_indexes_set_tbl_idx(eocCNUUnauthListTable_mib_index *tbl_idx, char *eocCNUUnauthListMac_val_ptr, size_t eocCNUUnauthListMac_val_ptr_len);
+int eocCNUUnauthListTable_indexes_set(eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx, char *eocCNUUnauthListMac_val_ptr, size_t eocCNUUnauthListMac_val_ptr_len);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUUNAUTHLISTTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_set.c
new file mode 100644
index 0000000000..489d14c3a5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_set.c
@@ -0,0 +1,24 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUUnauthListTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_set.h
new file mode 100644
index 0000000000..f8e64f9205
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_data_set.h
@@ -0,0 +1,27 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUUNAUTHLISTTABLE_DATA_SET_H
+#define EOCCNUUNAUTHLISTTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUUNAUTHLISTTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_enums.h
new file mode 100644
index 0000000000..de9c2bc0e9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_enums.h
@@ -0,0 +1,40 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUUNAUTHLISTTABLE_ENUMS_H
+#define EOCCNUUNAUTHLISTTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocCNUUnauthListTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUUNAUTHLISTTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_interface.c
new file mode 100644
index 0000000000..ef5976bc39
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_interface.c
@@ -0,0 +1,870 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUUnauthListTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocCNUUnauthListTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUUnauthListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUUnauthListTable is subid 1 of eocCNUUnauthList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.5.1, length: 12
+*/
+typedef struct eocCNUUnauthListTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocCNUUnauthListTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+} eocCNUUnauthListTable_interface_ctx;
+
+static eocCNUUnauthListTable_interface_ctx eocCNUUnauthListTable_if_ctx;
+
+static void _eocCNUUnauthListTable_container_init(
+ eocCNUUnauthListTable_interface_ctx *if_ctx);
+static void _eocCNUUnauthListTable_container_shutdown(
+ eocCNUUnauthListTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocCNUUnauthListTable_container_get( void )
+{
+ return eocCNUUnauthListTable_if_ctx.container;
+}
+
+eocCNUUnauthListTable_registration *
+eocCNUUnauthListTable_registration_get( void )
+{
+ return eocCNUUnauthListTable_if_ctx.user_ctx;
+}
+
+eocCNUUnauthListTable_registration *
+eocCNUUnauthListTable_registration_set( eocCNUUnauthListTable_registration * newreg )
+{
+ eocCNUUnauthListTable_registration * old = eocCNUUnauthListTable_if_ctx.user_ctx;
+ eocCNUUnauthListTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocCNUUnauthListTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocCNUUnauthListTable_if_ctx.container);
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocCNUUnauthListTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocCNUUnauthListTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocCNUUnauthListTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocCNUUnauthListTable_get_values;
+/**
+ * @internal
+ * Initialize the table eocCNUUnauthListTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocCNUUnauthListTable_initialize_interface(eocCNUUnauthListTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocCNUUnauthListTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocCNUUnauthListTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:_eocCNUUnauthListTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocCNUUnauthListTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_OCTET_STR, /** index: eocCNUUnauthListMac */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCCNUUNAUTHLISTTABLE_MIN_COL;
+ tbl_info->max_column = EOCCNUUNAUTHLISTTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocCNUUnauthListTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocCNUUnauthListTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocCNUUnauthListTable_container_init(&eocCNUUnauthListTable_if_ctx);
+ if (NULL == eocCNUUnauthListTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocCNUUnauthListTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocCNUUnauthListTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocCNUUnauthListTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocCNUUnauthListTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocCNUUnauthListTable_post_request;
+
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocCNUUnauthListTable:init_eocCNUUnauthListTable",
+ "Registering eocCNUUnauthListTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocCNUUnauthListTable", handler,
+ eocCNUUnauthListTable_oid,
+ eocCNUUnauthListTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RONLY
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocCNUUnauthListTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocCNUUnauthListTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocCNUUnauthListTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocCNUUnauthListTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocCNUUnauthListTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocCNUUnauthListTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocCNUUnauthListTable
+ */
+void
+_eocCNUUnauthListTable_shutdown_interface(eocCNUUnauthListTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocCNUUnauthListTable_container_shutdown(&eocCNUUnauthListTable_if_ctx);
+}
+
+void
+eocCNUUnauthListTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocCNUUnauthListTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocCNUUnauthListTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocCNUUnauthListTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUUnauthListTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUUnauthListMac(1)/MacAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/H
+ */
+ netsnmp_variable_list var_eocCNUUnauthListMac;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUUnauthListMac, 0x00, sizeof(var_eocCNUUnauthListMac) );
+ var_eocCNUUnauthListMac.type = ASN_OCTET_STR;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUUnauthListMac.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListTable_index_to_oid","called\n"));
+
+ /* eocCNUUnauthListMac(1)/MacAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/H */
+ snmp_set_var_value(&var_eocCNUUnauthListMac, (u_char*)&mib_idx->eocCNUUnauthListMac,
+ mib_idx->eocCNUUnauthListMac_len * sizeof(mib_idx->eocCNUUnauthListMac[0]));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocCNUUnauthListMac);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUUnauthListMac );
+
+ return err;
+} /* eocCNUUnauthListTable_index_to_oid */
+
+/**
+ * extract eocCNUUnauthListTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocCNUUnauthListTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUUnauthListTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUUnauthListMac(1)/MacAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/H
+ */
+ netsnmp_variable_list var_eocCNUUnauthListMac;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUUnauthListMac, 0x00, sizeof(var_eocCNUUnauthListMac) );
+ var_eocCNUUnauthListMac.type = ASN_OCTET_STR;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUUnauthListMac.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUUnauthListTable:eocCNUUnauthListTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocCNUUnauthListMac );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ /*
+ * NOTE: val_len is in bytes, eocCNUUnauthListMac_len might not be
+ */
+ if(var_eocCNUUnauthListMac.val_len > sizeof(mib_idx->eocCNUUnauthListMac))
+ err = SNMP_ERR_GENERR;
+ else {
+ memcpy(mib_idx->eocCNUUnauthListMac, var_eocCNUUnauthListMac.val.string, var_eocCNUUnauthListMac.val_len);
+ mib_idx->eocCNUUnauthListMac_len = var_eocCNUUnauthListMac.val_len / sizeof(mib_idx->eocCNUUnauthListMac[0]);
+ }
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUUnauthListMac );
+
+ return err;
+} /* eocCNUUnauthListTable_index_from_oid */
+
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocCNUUnauthListTable_rowreq_ctx
+ */
+eocCNUUnauthListTable_rowreq_ctx *
+eocCNUUnauthListTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocCNUUnauthListTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:eocCNUUnauthListTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocCNUUnauthListTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocCNUUnauthListTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocCNUUnauthListTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocCNUUnauthListTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocCNUUnauthListTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocCNUUnauthListTable_rowreq_ctx
+ */
+void
+eocCNUUnauthListTable_release_rowreq_ctx(eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:eocCNUUnauthListTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocCNUUnauthListTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocCNUUnauthListTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUUnauthListTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:_mfd_eocCNUUnauthListTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocCNUUnauthListTable_pre_request(eocCNUUnauthListTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUUnauthListTable","error %d from "
+ "eocCNUUnauthListTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUUnauthListTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUUnauthListTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:_mfd_eocCNUUnauthListTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocCNUUnauthListTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ rc = eocCNUUnauthListTable_post_request(eocCNUUnauthListTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUUnauthListTable","error %d from "
+ "eocCNUUnauthListTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUUnauthListTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUUnauthListTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:_mfd_eocCNUUnauthListTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocCNUUnauthListTable_interface_ctx *if_ctx =
+ * (eocCNUUnauthListTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocCNUUnauthListTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocCNUUnauthListTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUUnauthListTable_get_column( eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:_mfd_eocCNUUnauthListTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUUnauthListCltNo(2)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUUNAUTHLISTCLTNO:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUUnauthListCltNo_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUUnauthListCnuNo(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUUNAUTHLISTCNUNO:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUUnauthListCnuNo_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ default:
+ if (EOCCNUUNAUTHLISTTABLE_MIN_COL <= column && column <= EOCCNUUNAUTHLISTTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:_mfd_eocCNUUnauthListTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocCNUUnauthListTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocCNUUnauthListTable_get_column */
+
+int
+_mfd_eocCNUUnauthListTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:_mfd_eocCNUUnauthListTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUUnauthListTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUUnauthListTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*
+ * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
+ */
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocCNUUnauthListTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocCNUUnauthListTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocCNUUnauthListTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocCNUUnauthListTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocCNUUnauthListTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocCNUUnauthListTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocCNUUnauthListTable_container_init(eocCNUUnauthListTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:_eocCNUUnauthListTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocCNUUnauthListTable_oid,
+ eocCNUUnauthListTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocCNUUnauthListTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocCNUUnauthListTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocCNUUnauthListTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocCNUUnauthListTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocCNUUnauthListTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocCNUUnauthListTable_container_shutdown(eocCNUUnauthListTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUUnauthListTable:_eocCNUUnauthListTable_container_shutdown","called\n"));
+
+ eocCNUUnauthListTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocCNUUnauthListTable_container_shutdown */
+
+
+eocCNUUnauthListTable_rowreq_ctx *
+eocCNUUnauthListTable_row_find_by_mib_index(eocCNUUnauthListTable_mib_index *mib_idx)
+{
+ eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocCNUUnauthListTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocCNUUnauthListTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_interface.h
new file mode 100644
index 0000000000..53ea2428cc
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_interface.h
@@ -0,0 +1,84 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCCNUUNAUTHLISTTABLE_INTERFACE_H
+#define EOCCNUUNAUTHLISTTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocCNUUnauthListTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocCNUUnauthListTable_initialize_interface(eocCNUUnauthListTable_registration * user_ctx,
+ u_long flags);
+void _eocCNUUnauthListTable_shutdown_interface(eocCNUUnauthListTable_registration * user_ctx);
+
+eocCNUUnauthListTable_registration *
+eocCNUUnauthListTable_registration_get( void );
+
+eocCNUUnauthListTable_registration *
+eocCNUUnauthListTable_registration_set( eocCNUUnauthListTable_registration * newreg );
+
+netsnmp_container *eocCNUUnauthListTable_container_get( void );
+int eocCNUUnauthListTable_container_size( void );
+
+ eocCNUUnauthListTable_rowreq_ctx * eocCNUUnauthListTable_allocate_rowreq_ctx(void *);
+void eocCNUUnauthListTable_release_rowreq_ctx(eocCNUUnauthListTable_rowreq_ctx *rowreq_ctx);
+
+int eocCNUUnauthListTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUUnauthListTable_mib_index *mib_idx);
+int eocCNUUnauthListTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUUnauthListTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocCNUUnauthListTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUUNAUTHLISTTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_oids.h
new file mode 100644
index 0000000000..398a3e1504
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUUnauthList/eocCNUUnauthListTable/eocCNUUnauthListTable_oids.h
@@ -0,0 +1,35 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUUNAUTHLISTTABLE_OIDS_H
+#define EOCCNUUNAUTHLISTTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* column number definitions for table eocCNUUnauthListTable */
+#define EOCCNUUNAUTHLISTTABLE_OID 1,3,6,1,4,1,17409,2,4,5,5,1
+
+
+#define COLUMN_EOCCNUUNAUTHLISTMAC 1
+
+#define COLUMN_EOCCNUUNAUTHLISTCLTNO 2
+
+#define COLUMN_EOCCNUUNAUTHLISTCNUNO 3
+
+
+#define EOCCNUUNAUTHLISTTABLE_MIN_COL COLUMN_EOCCNUUNAUTHLISTCLTNO
+#define EOCCNUUNAUTHLISTTABLE_MAX_COL COLUMN_EOCCNUUNAUTHLISTCNUNO
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUUNAUTHLISTTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList.h
new file mode 100644
index 0000000000..be74ad2ad3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList.h
@@ -0,0 +1,3 @@
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteList)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteList.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteList.c
new file mode 100644
index 0000000000..1d5517bfb3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteList.c
@@ -0,0 +1,498 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37: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 "eocCNUWhiteList.h"
+
+/** Initializes the eocCNUWhiteList module */
+void
+init_eocCNUWhiteList(void)
+{
+ static oid eocCNUWhiteListAllRFOutputLevel_oid[] = { 1,3,6,1,4,1,17409,2,4,5,1,3 };
+ static oid eocCNUWhiteListAllExtMACLimitation_oid[] = { 1,3,6,1,4,1,17409,2,4,5,1,4 };
+ static oid eocCNUWhiteListPhyRateGate_oid[] = { 1,3,6,1,4,1,17409,2,4,5,1,5 };
+
+ DEBUGMSGTL(("eocCNUWhiteList", "Initializing\n"));
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCNUWhiteListAllRFOutputLevel", handle_eocCNUWhiteListAllRFOutputLevel,
+ eocCNUWhiteListAllRFOutputLevel_oid, OID_LENGTH(eocCNUWhiteListAllRFOutputLevel_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCNUWhiteListAllExtMACLimitation", handle_eocCNUWhiteListAllExtMACLimitation,
+ eocCNUWhiteListAllExtMACLimitation_oid, OID_LENGTH(eocCNUWhiteListAllExtMACLimitation_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocCNUWhiteListPhyRateGate", handle_eocCNUWhiteListPhyRateGate,
+ eocCNUWhiteListPhyRateGate_oid, OID_LENGTH(eocCNUWhiteListPhyRateGate_oid),
+ HANDLER_CAN_RONLY
+ ));
+}
+
+
+int
+handle_eocCNUWhiteListAllRFOutputLevel(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ int rf_output_level;
+ int *rf_output_level_save = NULL;
+ u_long value;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /*
+ * a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one.
+ */
+ switch (reqinfo->mode)
+ {
+
+ case MODE_GET:
+ /* read buffer for output level from config file */
+ ret = libspid_config_read_item (LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_OUTPUT_LEVEL,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* output level set to 0 to permit walk requests */
+ rf_output_level = 0;
+ }
+ else
+ {
+ if (1 != sscanf (buffer, "%d", &rf_output_level))
+ rf_output_level = 0;
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) & rf_output_level,
+ sizeof (rf_output_level));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* check type of set value */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_INTEGER);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ /* check range of set value */
+ ret = netsnmp_check_vb_range (requests->requestvb,
+ LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MIN,
+ LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MAX);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /* read buffer for output level from config file */
+ ret = libspid_config_read_item (LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_OUTPUT_LEVEL,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ if (1 != sscanf (buffer, "%d", &rf_output_level))
+ rf_output_level = 0;
+ }
+ /*
+ * malloc "undo" storage buffer for output level from config file
+ */
+ memdup ((u_char **) & rf_output_level_save,
+ (u_char *) & rf_output_level, sizeof (rf_output_level));
+
+ /* if malloc, or whatever, failed: */
+ if (NULL == rf_output_level_save)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list
+ ("rfout", rf_output_level_save,
+ free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /*
+ * free resources allocated in RESERVE1 and/or
+ * RESERVE2. Something failed somewhere, and the states
+ * below won't be called.
+ */
+ break;
+
+ case MODE_SET_ACTION:
+
+ /*
+ * perform the value change here
+ */
+ value = *(requests->requestvb->val.integer);
+
+ sprintf (buffer, "%ld", value);
+ ret = libspid_config_write_item (LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_OUTPUT_LEVEL,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ break;
+ }
+
+ /* save configuration file to flash */
+ ret = libspid_system_save_file (LIBSPID_SLAVE_CONF_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_save_file error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+
+ /* warn onlined that the file has changed */
+ ret = libspid_system_file_update_warn (getpid (),
+ LIBSPID_SLAVE_CONF_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_file_update_warn error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * delete temporary storage
+ */
+ break;
+
+ case MODE_SET_UNDO:
+ /* UNDO and return to previous value for the objects */
+ value = *((u_long *) netsnmp_request_get_list_data (requests,
+ "rfout"));
+ sprintf (buffer, "%ld", value);
+
+ ret = libspid_config_write_item (LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_OUTPUT_LEVEL,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+
+
+ /* save configuration file to flash */
+ ret = libspid_system_save_file (LIBSPID_SLAVE_CONF_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_save_file error\n");
+ return SNMP_ERR_UNDOFAILED;
+ }
+
+ /* warn onlined that the file has changed */
+ ret = libspid_system_file_update_warn (getpid (),
+ LIBSPID_SLAVE_CONF_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_file_update_warn error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+
+ break;
+
+ default:
+ /*
+ * we should never get here, so this is a really bad error
+ */
+ snmp_log (LOG_ERR, "unknown mode (%d) in"
+ " handle_modEoCCNUWhiteListAllRFOutputLevel\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+int
+handle_eocCNUWhiteListAllExtMACLimitation(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ int ext_mac_limit;
+ int *ext_mac_limit_save = NULL;
+ u_long value;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /*
+ * a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one.
+ */
+
+ switch (reqinfo->mode)
+ {
+
+ case MODE_GET:
+ /* read buffer for MAC limit from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_MAC_LIMITATION,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* MAC limit set to 0 to permit walk requests */
+ ext_mac_limit = 0;
+ }
+ else
+ {
+ if (1 != sscanf (buffer, "%d", &ext_mac_limit))
+ {
+ ext_mac_limit = 0;
+ }
+ }
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) & ext_mac_limit,
+ sizeof (ext_mac_limit));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/
+ * set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_INTEGER);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ /* check range of set value */
+ ret = netsnmp_check_vb_range (requests->requestvb,
+ LIBSPID_EOC_WL_EXT_MAC_LIMIT_MIN,
+ LIBSPID_EOC_WL_EXT_MAC_LIMIT_MAX);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+
+ break;
+
+ case MODE_SET_RESERVE2:
+ /* read buffer for MAC limit from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_MAC_LIMITATION,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ if (1 != sscanf (buffer, "%d", &ext_mac_limit))
+ {
+ ext_mac_limit = 0;
+ }
+ }
+ /*
+ * malloc "undo" storage buffer
+ */
+ memdup ((u_char **) & ext_mac_limit_save,
+ (u_char *) & ext_mac_limit, sizeof (ext_mac_limit));
+
+ if (NULL == ext_mac_limit_save /* if malloc, or whatever, failed: */ )
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list
+ ("extmaclimit", ext_mac_limit_save,
+ free));
+ }
+ break;
+
+
+
+ case MODE_SET_FREE:
+ /*
+ * free resources allocated in RESERVE1 and/or
+ * RESERVE2. Something failed somewhere, and the states
+ * below won't be called.
+ */
+ break;
+
+ case MODE_SET_ACTION:
+ /*
+ * perform the value change here
+ */
+ value = *(requests->requestvb->val.integer);
+
+ sprintf (buffer, "%ld", value);
+ ret = libspid_config_write_item (
+ LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_MAC_LIMITATION,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+
+ /* save configuration file to flash */
+ ret = libspid_system_save_file (LIBSPID_SLAVE_CONF_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_save_file error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+
+ /* warn onlined that the file has changed */
+ ret = libspid_system_file_update_warn (getpid (),
+ LIBSPID_SLAVE_CONF_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_file_update_warn error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * delete temporary storage
+ */
+ break;
+
+ case MODE_SET_UNDO:
+ /* UNDO and return to previous value for the object */
+ value =
+ *((u_long *) netsnmp_request_get_list_data (requests,
+ "extmaclimit"));
+ sprintf (buffer, "%ld", value);
+ ret = libspid_config_write_item (
+ LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_MAC_LIMITATION,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+
+ /* save configuration file to flash */
+ ret = libspid_system_save_file (LIBSPID_SLAVE_CONF_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_save_file error\n");
+ return SNMP_ERR_UNDOFAILED;
+ }
+
+ /* warn onlined that the file has changed */
+ ret = libspid_system_file_update_warn (getpid (),
+ LIBSPID_SLAVE_CONF_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_file_update_warn error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+
+ break;
+
+
+ default:
+ /*
+ * we should never get here, so this is a really bad error
+ */
+ snmp_log (LOG_ERR, "unknown mode (%d) in"
+ " handle_modEoCCNUWhiteListAllExtMACLimitation\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+int
+handle_eocCNUWhiteListPhyRateGate(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ /* PHY rate gate value is hard-coded */
+ int phy_rate_gate = WHITE_LIST_PHY_RATE_GATE;
+
+ /* We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one. */
+
+
+ switch (reqinfo->mode)
+ {
+
+ case MODE_GET:
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) & phy_rate_gate,
+ sizeof (phy_rate_gate));
+ break;
+
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR, "unknown mode (%d) in "
+ "handle_eocCNUWhiteListPhyRateGate\n", reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteList.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteList.h
new file mode 100644
index 0000000000..2f21ab0b08
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteList.h
@@ -0,0 +1,19 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+ */
+#ifndef EOCCNUWHITELIST_H
+#define EOCCNUWHITELIST_H
+
+/* include common header */
+#include "EoCCommon.h"
+
+/* function declarations */
+void init_eocCNUWhiteList(void);
+Netsnmp_Node_Handler handle_eocCNUWhiteListAmountLimitation;
+Netsnmp_Node_Handler handle_eocCNUWhiteListRegisteredAmount;
+Netsnmp_Node_Handler handle_eocCNUWhiteListAllRFOutputLevel;
+Netsnmp_Node_Handler handle_eocCNUWhiteListAllExtMACLimitation;
+Netsnmp_Node_Handler handle_eocCNUWhiteListPhyRateGate;
+
+#endif /* EOCCNUWHITELIST_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable.h
new file mode 100644
index 0000000000..8b4187d8c8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_set)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_interface)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_get)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_access)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlAllRFOutputLevel.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlAllRFOutputLevel.m2d
new file mode 100644
index 0000000000..f29ef06025
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlAllRFOutputLevel.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListControlAllRFOutputLevel
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlAmountLimitation.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlAmountLimitation.m2d
new file mode 100644
index 0000000000..70849ccc81
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlAmountLimitation.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListControlAmountLimitation
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlAuthOption.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlAuthOption.m2d
new file mode 100644
index 0000000000..17d0155543
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlAuthOption.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListControlAuthOption
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlExtMACLimitation.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlExtMACLimitation.m2d
new file mode 100644
index 0000000000..67999a30c2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlExtMACLimitation.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListControlExtMACLimitation
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlIndex.m2d
new file mode 100644
index 0000000000..9193510781
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListControlIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlPhyRateGate.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlPhyRateGate.m2d
new file mode 100644
index 0000000000..33a3a6668e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlPhyRateGate.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListControlPhyRateGate
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlRegisteredAmount.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlRegisteredAmount.m2d
new file mode 100644
index 0000000000..469abcf94f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/node-eocCNUWhiteListControlRegisteredAmount.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListControlRegisteredAmount
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/table-eocCNUWhiteListControlTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/table-eocCNUWhiteListControlTable.m2d
new file mode 100644
index 0000000000..763928500f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/defaults/table-eocCNUWhiteListControlTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocCNUWhiteListControlTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable-README-FIRST.txt
new file mode 100644
index 0000000000..81369bd7da
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocCNUWhiteListControlTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocCNUWhiteListControlTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocCNUWhiteListControlTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocCNUWhiteListControlTable_Makefile
+
+
+ File : eocCNUWhiteListControlTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocCNUWhiteListControlTable-README-eocCNUWhiteListControlTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocCNUWhiteListControlTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocCNUWhiteListControlTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocCNUWhiteListControlTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocCNUWhiteListControlTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable-README-eocCNUWhiteListControlTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable-README-eocCNUWhiteListControlTable.txt
new file mode 100644
index 0000000000..9d6f18db59
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable-README-eocCNUWhiteListControlTable.txt
@@ -0,0 +1,770 @@
+************************************************************************
+eocCNUWhiteListControlTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocCNUWhiteListControlTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocCNUWhiteListControlTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocCNUWhiteListControlTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUWhiteListControlTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUWhiteListControlTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUWhiteListControlTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocCNUWhiteListControlTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUWhiteListControlTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocCNUWhiteListControlTable_allocate_data
+ eocCNUWhiteListControlTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocCNUWhiteListControlTable_rowreq_ctx_init
+ eocCNUWhiteListControlTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocCNUWhiteListControlTable table
+ ------------------------------------------------------------
+ The index(es) for the eocCNUWhiteListControlTable table are:
+
+ eocCNUWhiteListControlIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocCNUWhiteListControlTable_data.
+
+
+************************************************************************
+eocCNUWhiteListControlTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocCNUWhiteListControlTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocCNUWhiteListControlTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocCNUWhiteListControlTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocCNUWhiteListControlTable_indexes_set
+ WHERE: eocCNUWhiteListControlTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocCNUWhiteListControlTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocCNUWhiteListControlTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUWhiteListControlAmountLimitation_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUWhiteListControlRegisteredAmount_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUWhiteListControlAllRFOutputLevel_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUWhiteListControlExtMACLimitation_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUWhiteListControlPhyRateGate_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUWhiteListControlAuthOption_get
+
+
+
+File: eocCNUWhiteListControlTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocCNUWhiteListControlTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table does not support ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocCNUWhiteListControlTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUWhiteListControlAmountLimitation_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUWhiteListControlAmountLimitation_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUWhiteListControlAmountLimitation_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUWhiteListControlAmountLimitation_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUWhiteListControlAllRFOutputLevel_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUWhiteListControlAllRFOutputLevel_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUWhiteListControlAllRFOutputLevel_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUWhiteListControlAllRFOutputLevel_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUWhiteListControlExtMACLimitation_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUWhiteListControlExtMACLimitation_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUWhiteListControlExtMACLimitation_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUWhiteListControlExtMACLimitation_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUWhiteListControlAuthOption_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUWhiteListControlAuthOption_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUWhiteListControlAuthOption_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUWhiteListControlAuthOption_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocCNUWhiteListControlTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocCNUWhiteListControlTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocCNUWhiteListControlTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocCNUWhiteListControlTable table.
+
+To watch the flow of the eocCNUWhiteListControlTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocCNUWhiteListControlTable
+ verbose:eocCNUWhiteListControlTable
+ internal:eocCNUWhiteListControlTable
+
+e.g.
+ snmpd -f -Le -DeocCNUWhiteListControlTable,verbose:eocCNUWhiteListControlTable,internal:eocCNUWhiteListControlTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlTable is subid 7 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7, length: 12
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlIndex
+ * eocCNUWhiteListControlIndex is subid 1 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.1
+ * Description:
+EOCÍ·¶Ë°å¿¨Ë÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlAmountLimitation
+ * eocCNUWhiteListControlAmountLimitation is subid 2 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.2
+ * Description:
+CNU×î´óµÇ¼ÇÊý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlRegisteredAmount
+ * eocCNUWhiteListControlRegisteredAmount is subid 3 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.3
+ * Description:
+CNUÒѵǼÇÊý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlAllRFOutputLevel
+ * eocCNUWhiteListControlAllRFOutputLevel is subid 4 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.4
+ * Description:
+ËùÓÐCNUÊä³öµçƽ£¬µ¥Î»dBuV¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlExtMACLimitation
+ * eocCNUWhiteListControlExtMACLimitation is subid 5 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.5
+ * Description:
+ËùÓÐCNUµÄMACµØÖ·ÏÞÖÆ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlPhyRateGate
+ * eocCNUWhiteListControlPhyRateGate is subid 6 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.6
+ * Description:
+ÎïÀí²ãËÙÂÊãÐÖµ£¬µ¥Î»kbps¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlAuthOption
+ * eocCNUWhiteListControlAuthOption is subid 7 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.7
+ * Description:
+°×Ãûµ¥ÈÏÖ¤µÄÅäÖÃÑ¡Ïî
+ ÃüÖа×Ãûµ¥(1) £­ Ö»Óа×Ãûµ¥±íÏîÖÐÊÚȨ״̬ΪÊÚȨµÄCNU²ÅÄÜÉÏÏߣ»
+ ²»¿ØÖÆ(2) £­ ³ýÁËÃüÖкÚÃûµ¥µÄCNUÍ⣬ÆäËûµÄCNU¶¼¿ÉÒÔÉÏÏß¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable.c
new file mode 100644
index 0000000000..486900f901
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable.c
@@ -0,0 +1,225 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocCNUWhiteListControlTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUWhiteListControlTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocCNUWhiteListControlTable_interface.h"
+
+oid eocCNUWhiteListControlTable_oid[] = { EOCCNUWHITELISTCONTROLTABLE_OID };
+int eocCNUWhiteListControlTable_oid_size = OID_LENGTH(eocCNUWhiteListControlTable_oid);
+
+ eocCNUWhiteListControlTable_registration eocCNUWhiteListControlTable_user_context;
+
+void initialize_table_eocCNUWhiteListControlTable(void);
+void shutdown_table_eocCNUWhiteListControlTable(void);
+
+
+/**
+ * Initializes the eocCNUWhiteListControlTable module
+ */
+void
+init_eocCNUWhiteListControlTable(void)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:init_eocCNUWhiteListControlTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocCNUWhiteListControlTable one-time module initialization.
+ */
+ static int eocCNUWhiteListControlTable_did_init = 0;
+ if (++eocCNUWhiteListControlTable_did_init != 1)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListControlTable:"
+ "init_eocCNUWhiteListControlTable",
+ "ignoring duplicate call\n"));
+ return;
+ }
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocCNUWhiteListControlTable"))
+ initialize_table_eocCNUWhiteListControlTable();
+
+} /* init_eocCNUWhiteListControlTable */
+
+/**
+ * Shut-down the eocCNUWhiteListControlTable module (agent is exiting)
+ */
+void
+shutdown_eocCNUWhiteListControlTable(void)
+{
+ if (should_init("eocCNUWhiteListControlTable"))
+ shutdown_table_eocCNUWhiteListControlTable();
+
+}
+
+/**
+ * Initialize the table eocCNUWhiteListControlTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocCNUWhiteListControlTable(void)
+{
+ eocCNUWhiteListControlTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:initialize_table_eocCNUWhiteListControlTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocCNUWhiteListControlTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocCNUWhiteListControlTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocCNUWhiteListControlTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocCNUWhiteListControlTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocCNUWhiteListControlTable */
+
+/**
+ * Shutdown the table eocCNUWhiteListControlTable
+ */
+void
+shutdown_table_eocCNUWhiteListControlTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocCNUWhiteListControlTable_shutdown_interface(&eocCNUWhiteListControlTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocCNUWhiteListControlTable_rowreq_ctx_init(eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocCNUWhiteListControlTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocCNUWhiteListControlTable_rowreq_ctx_cleanup(eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocCNUWhiteListControlTable rowreq cleanup.
+ */
+} /* eocCNUWhiteListControlTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocCNUWhiteListControlTable_pre_request(eocCNUWhiteListControlTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocCNUWhiteListControlTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocCNUWhiteListControlTable_post_request(eocCNUWhiteListControlTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocCNUWhiteListControlTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocCNUWhiteListControlTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocCNUWhiteListControlTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable.h
new file mode 100644
index 0000000000..80f688e32f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable.h
@@ -0,0 +1,219 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUWHITELISTCONTROLTABLE_H
+#define EOCCNUWHITELISTCONTROLTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* include common header */
+#include "EoCCommon.h"
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+/* other required module components */
+ /* *INDENT-OFF* */
+ /* *INDENT-ON* */
+
+/* OID and column number definitions for eocCNUWhiteListControlTable */
+#include "eocCNUWhiteListControlTable_oids.h"
+
+/* enum definions */
+#include "eocCNUWhiteListControlTable_enums.h"
+
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocCNUWhiteListControlTable(void);
+void shutdown_eocCNUWhiteListControlTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlTable is subid 7 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7, length: 12
+*/
+/* *********************************************************************
+ * 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 eocCNUWhiteListControlTable registration context.
+ */
+typedef netsnmp_data_list eocCNUWhiteListControlTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocCNUWhiteListControlTable data context structure.
+ * This structure is used to represent the data for eocCNUWhiteListControlTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocCNUWhiteListControlTable.
+ */
+typedef struct eocCNUWhiteListControlTable_data_s {
+
+ /*
+ * eocCNUWhiteListControlAmountLimitation(2)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUWhiteListControlAmountLimitation;
+
+ /*
+ * eocCNUWhiteListControlRegisteredAmount(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUWhiteListControlRegisteredAmount;
+
+ /*
+ * eocCNUWhiteListControlAllRFOutputLevel(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUWhiteListControlAllRFOutputLevel;
+
+ /*
+ * eocCNUWhiteListControlExtMACLimitation(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUWhiteListControlExtMACLimitation;
+
+ /*
+ * eocCNUWhiteListControlPhyRateGate(6)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUWhiteListControlPhyRateGate;
+
+ /*
+ * eocCNUWhiteListControlAuthOption(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUWhiteListControlAuthOption;
+
+} eocCNUWhiteListControlTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocCNUWhiteListControlTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocCNUWhiteListControlTable_data eocCNUWhiteListControlTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocCNUWhiteListControlTable mib index.
+ * This structure is used to represent the index for eocCNUWhiteListControlTable.
+ */
+typedef struct eocCNUWhiteListControlTable_mib_index_s {
+
+ /*
+ * eocCNUWhiteListControlIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUWhiteListControlIndex;
+
+
+} eocCNUWhiteListControlTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocCNUWhiteListControlTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocCNUWhiteListControlTable_IDX_LEN 1
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocCNUWhiteListControlTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocCNUWhiteListControlTable_rowreq_ctx pointer.
+ */
+typedef struct eocCNUWhiteListControlTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocCNUWhiteListControlTable_IDX_LEN];
+
+ eocCNUWhiteListControlTable_mib_index tbl_idx;
+
+ eocCNUWhiteListControlTable_data data;
+ eocCNUWhiteListControlTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocCNUWhiteListControlTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocCNUWhiteListControlTable_data_list;
+
+} eocCNUWhiteListControlTable_rowreq_ctx;
+
+typedef struct eocCNUWhiteListControlTable_ref_rowreq_ctx_s {
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx;
+} eocCNUWhiteListControlTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocCNUWhiteListControlTable_pre_request(eocCNUWhiteListControlTable_registration * user_context);
+ int eocCNUWhiteListControlTable_post_request(eocCNUWhiteListControlTable_registration * user_context,
+ int rc);
+
+ int eocCNUWhiteListControlTable_rowreq_ctx_init(eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocCNUWhiteListControlTable_rowreq_ctx_cleanup(eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx);
+
+ int eocCNUWhiteListControlTable_commit(eocCNUWhiteListControlTable_rowreq_ctx * rowreq_ctx);
+
+ eocCNUWhiteListControlTable_rowreq_ctx *
+ eocCNUWhiteListControlTable_row_find_by_mib_index(eocCNUWhiteListControlTable_mib_index *mib_idx);
+
+extern oid eocCNUWhiteListControlTable_oid[];
+extern int eocCNUWhiteListControlTable_oid_size;
+
+
+#include "eocCNUWhiteListControlTable_interface.h"
+#include "eocCNUWhiteListControlTable_data_access.h"
+#include "eocCNUWhiteListControlTable_data_get.h"
+#include "eocCNUWhiteListControlTable_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 /* EOCCNUWHITELISTCONTROLTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_access.c
new file mode 100644
index 0000000000..ebcd2ba3b5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_access.c
@@ -0,0 +1,424 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUWhiteListControlTable.h"
+
+
+#include "eocCNUWhiteListControlTable_data_access.h"
+extern int eocCNUWhiteListTable_RegisteredAmount_get (void);
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlTable is subid 7 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7, length: 12
+*/
+
+/**
+ * initialization for eocCNUWhiteListControlTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocCNUWhiteListControlTable_reg
+ * Pointer to eocCNUWhiteListControlTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocCNUWhiteListControlTable_init_data(eocCNUWhiteListControlTable_registration * eocCNUWhiteListControlTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocCNUWhiteListControlTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocCNUWhiteListControlTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocCNUWhiteListControlTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocCNUWhiteListControlTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocCNUWhiteListControlTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCCNUWHITELISTCONTROLTABLE_CACHE_TIMEOUT; /* seconds */
+} /* eocCNUWhiteListControlTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocCNUWhiteListControlTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocCNUWhiteListControlTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocCNUWhiteListControlTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocCNUWhiteListControlTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocCNUWhiteListControlTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocCNUWhiteListControlTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocCNUWhiteListControlTable_container_load(netsnmp_container *container)
+{
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ int rf_output_level;
+ int ext_mac_limit;
+ int wl_control_authoption;
+ int ret;
+ int reg_amount;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocCNUWhiteListControlIndex(1)/INTEGER/ASN_INTEGER/
+ * long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUWhiteListControlIndex = 0;
+
+
+ DEBUGMSGTL (("verbose:eocCNUWhiteListControlTable:"
+ "eocCNUWhiteListControlTable_container_load", "called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocCNUWhiteListControlTable
+ * container.
+ * loop over your eocCNUWhiteListControlTable data, allocate
+ * a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ /*
+ * check for end of data; bail out if there is no more data
+ */
+
+ /*
+ * TODO:352:M: | |-> set indexes in new eocCNUWhiteListControlTable
+ * rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocCNUWhiteListControlTable_allocate_rowreq_ctx (NULL);
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if (MFD_SUCCESS !=
+ eocCNUWhiteListControlTable_indexes_set (rowreq_ctx,
+ eocCNUWhiteListControlIndex))
+ {
+ snmp_log (LOG_ERR, "error setting index while loading "
+ "eocCNUWhiteListControlTable data.\n");
+ eocCNUWhiteListControlTable_release_rowreq_ctx (rowreq_ctx);
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+
+ /*
+ * TODO:352:r: | |-> populate eocCNUWhiteListControlTable
+ * data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocCNUWhiteListControlAmountLimitation
+ * eocCNUWhiteListControlAmountLimitation(2)/INTEGER/ASN_INTEGER/
+ * long(long)//l/A/W/e/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocCNUWhiteListControlAmountLimitation =
+ WHITE_LIST_SLAVE_MAX_AUTH_NB;
+
+ /*
+ * setup/save data for eocCNUWhiteListControlRegisteredAmount
+ * eocCNUWhiteListControlRegisteredAmount(3)/INTEGER/ASN_INTEGER/
+ * long(long)//l/A/w/e/r/d/h
+ */
+ /** no mapping */
+ reg_amount = eocCNUWhiteListTable_RegisteredAmount_get ();
+ if (reg_amount < 0)
+ {
+ snmp_log (LOG_ERR, "error getting Registered Amount\n");
+ /* registered amount is set to -1 to permit walk requests */
+ reg_amount = 0;
+ }
+ rowreq_ctx->data.eocCNUWhiteListControlRegisteredAmount = reg_amount;
+ /*
+ * setup/save data for eocCNUWhiteListControlAllRFOutputLevel
+ * eocCNUWhiteListControlAllRFOutputLevel(4)/INTEGER/ASN_INTEGER/
+ * long(long)//l/A/W/e/r/d/h
+ */
+ /** no mapping */
+ ret = libspid_config_read_item (LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_OUTPUT_LEVEL,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* output level set to 0 to permit walk requests */
+ rf_output_level = 0;
+ }
+ else
+ {
+ if (1 != sscanf (buffer, "%d", &rf_output_level))
+ rf_output_level = 0;
+ }
+ rowreq_ctx->data.eocCNUWhiteListControlAllRFOutputLevel = rf_output_level;
+ /*
+ * setup/save data for eocCNUWhiteListControlExtMACLimitation
+ * eocCNUWhiteListControlExtMACLimitation(5)/INTEGER/ASN_INTEGER/
+ * long(long)//l/A/W/e/r/d/h
+ */
+ /** no mapping */
+ ret = libspid_config_read_item (LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_MAC_LIMITATION,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* MAC limit set to 0 to permit walk requests */
+ ext_mac_limit = 0;
+ }
+ else
+ {
+ if (1 != sscanf (buffer, "%d", &ext_mac_limit))
+ {
+ ext_mac_limit = 0;
+ }
+ }
+ rowreq_ctx->data.eocCNUWhiteListControlExtMACLimitation = ext_mac_limit;
+ /*
+ * setup/save data for eocCNUWhiteListControlPhyRateGate
+ * eocCNUWhiteListControlPhyRateGate(6)/INTEGER/ASN_INTEGER/
+ * long(long)//l/A/w/e/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocCNUWhiteListControlPhyRateGate =
+ WHITE_LIST_PHY_RATE_GATE;
+
+ /*
+ * setup/save data for eocCNUWhiteListControlAuthOption
+ * eocCNUWhiteListControlAuthOption(7)/INTEGER/ASN_INTEGER/
+ * long(long)//l/A/W/e/r/d/h
+ */
+ /** no mapping */
+ ret = libspid_config_read_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_WL_CONTROL,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* auth option set to 0 to permit walk requests */
+ wl_control_authoption = 1;
+ }
+ else
+ {
+ if (1 != sscanf (buffer, "%d", &wl_control_authoption))
+ {
+ wl_control_authoption = 1;
+ }
+ }
+ rowreq_ctx->data.eocCNUWhiteListControlAuthOption = wl_control_authoption;
+
+
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT (container, rowreq_ctx);
+ ++count;
+
+ DEBUGMSGT (("verbose:eocCNUWhiteListControlTable:"
+ "eocCNUWhiteListControlTable_container_load",
+ "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocCNUWhiteListControlTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocCNUWhiteListControlTable container data.
+ */
+} /* eocCNUWhiteListControlTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocCNUWhiteListControlTable_row_prep( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_access.h
new file mode 100644
index 0000000000..65586c5911
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_access.h
@@ -0,0 +1,63 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUWHITELISTCONTROLTABLE_DATA_ACCESS_H
+#define EOCCNUWHITELISTCONTROLTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlTable is subid 7 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7, length: 12
+*/
+
+
+ int eocCNUWhiteListControlTable_init_data(eocCNUWhiteListControlTable_registration * eocCNUWhiteListControlTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocCNUWhiteListControlTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCCNUWHITELISTCONTROLTABLE_CACHE_TIMEOUT 60
+
+void eocCNUWhiteListControlTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocCNUWhiteListControlTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocCNUWhiteListControlTable_container_load(netsnmp_container *container);
+void eocCNUWhiteListControlTable_container_free(netsnmp_container *container);
+
+int eocCNUWhiteListControlTable_cache_load(netsnmp_container *container);
+void eocCNUWhiteListControlTable_cache_free(netsnmp_container *container);
+
+ int eocCNUWhiteListControlTable_row_prep( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUWHITELISTCONTROLTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_get.c
new file mode 100644
index 0000000000..465176bc48
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_get.c
@@ -0,0 +1,417 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUWhiteListControlTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocCNUWhiteListControlTable get routines.
+ * TODO:240:M: Implement eocCNUWhiteListControlTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlTable is subid 7 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7, length: 12
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocCNUWhiteListControlTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocCNUWhiteListControlIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocCNUWhiteListControlTable_indexes_set_tbl_idx(eocCNUWhiteListControlTable_mib_index *tbl_idx, long eocCNUWhiteListControlIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocCNUWhiteListControlIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCNUWhiteListControlIndex = eocCNUWhiteListControlIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocCNUWhiteListControlTable_indexes_set(eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocCNUWhiteListControlTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocCNUWhiteListControlIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocCNUWhiteListControlTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlAmountLimitation
+ * eocCNUWhiteListControlAmountLimitation is subid 2 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.2
+ * Description:
+CNU×î´óµÇ¼ÇÊý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUWhiteListControlAmountLimitation data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListControlAmountLimitation_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUWhiteListControlAmountLimitation_get( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListControlAmountLimitation_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUWhiteListControlAmountLimitation_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAmountLimitation_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUWhiteListControlAmountLimitation data.
+ * copy (* eocCNUWhiteListControlAmountLimitation_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUWhiteListControlAmountLimitation_val_ptr ) = rowreq_ctx->data.eocCNUWhiteListControlAmountLimitation;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlAmountLimitation_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlRegisteredAmount
+ * eocCNUWhiteListControlRegisteredAmount is subid 3 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.3
+ * Description:
+CNUÒѵǼÇÊý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUWhiteListControlRegisteredAmount data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListControlRegisteredAmount_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUWhiteListControlRegisteredAmount_get( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListControlRegisteredAmount_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUWhiteListControlRegisteredAmount_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlRegisteredAmount_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUWhiteListControlRegisteredAmount data.
+ * copy (* eocCNUWhiteListControlRegisteredAmount_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUWhiteListControlRegisteredAmount_val_ptr ) = rowreq_ctx->data.eocCNUWhiteListControlRegisteredAmount;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlRegisteredAmount_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlAllRFOutputLevel
+ * eocCNUWhiteListControlAllRFOutputLevel is subid 4 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.4
+ * Description:
+ËùÓÐCNUÊä³öµçƽ£¬µ¥Î»dBuV¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUWhiteListControlAllRFOutputLevel data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListControlAllRFOutputLevel_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUWhiteListControlAllRFOutputLevel_get( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListControlAllRFOutputLevel_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUWhiteListControlAllRFOutputLevel_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAllRFOutputLevel_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUWhiteListControlAllRFOutputLevel data.
+ * copy (* eocCNUWhiteListControlAllRFOutputLevel_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUWhiteListControlAllRFOutputLevel_val_ptr ) = rowreq_ctx->data.eocCNUWhiteListControlAllRFOutputLevel;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlAllRFOutputLevel_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlExtMACLimitation
+ * eocCNUWhiteListControlExtMACLimitation is subid 5 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.5
+ * Description:
+ËùÓÐCNUµÄMACµØÖ·ÏÞÖÆ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUWhiteListControlExtMACLimitation data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListControlExtMACLimitation_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUWhiteListControlExtMACLimitation_get( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListControlExtMACLimitation_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUWhiteListControlExtMACLimitation_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlExtMACLimitation_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUWhiteListControlExtMACLimitation data.
+ * copy (* eocCNUWhiteListControlExtMACLimitation_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUWhiteListControlExtMACLimitation_val_ptr ) = rowreq_ctx->data.eocCNUWhiteListControlExtMACLimitation;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlExtMACLimitation_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlPhyRateGate
+ * eocCNUWhiteListControlPhyRateGate is subid 6 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.6
+ * Description:
+ÎïÀí²ãËÙÂÊãÐÖµ£¬µ¥Î»kbps¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUWhiteListControlPhyRateGate data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListControlPhyRateGate_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUWhiteListControlPhyRateGate_get( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListControlPhyRateGate_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUWhiteListControlPhyRateGate_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlPhyRateGate_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUWhiteListControlPhyRateGate data.
+ * copy (* eocCNUWhiteListControlPhyRateGate_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUWhiteListControlPhyRateGate_val_ptr ) = rowreq_ctx->data.eocCNUWhiteListControlPhyRateGate;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlPhyRateGate_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlAuthOption
+ * eocCNUWhiteListControlAuthOption is subid 7 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.7
+ * Description:
+°×Ãûµ¥ÈÏÖ¤µÄÅäÖÃÑ¡Ïî
+ ÃüÖа×Ãûµ¥(1) £­ Ö»Óа×Ãûµ¥±íÏîÖÐÊÚȨ״̬ΪÊÚȨµÄCNU²ÅÄÜÉÏÏߣ»
+ ²»¿ØÖÆ(2) £­ ³ýÁËÃüÖкÚÃûµ¥µÄCNUÍ⣬ÆäËûµÄCNU¶¼¿ÉÒÔÉÏÏß¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUWhiteListControlAuthOption data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListControlAuthOption_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUWhiteListControlAuthOption_get( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListControlAuthOption_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUWhiteListControlAuthOption_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAuthOption_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUWhiteListControlAuthOption data.
+ * copy (* eocCNUWhiteListControlAuthOption_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUWhiteListControlAuthOption_val_ptr ) = rowreq_ctx->data.eocCNUWhiteListControlAuthOption;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlAuthOption_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_get.h
new file mode 100644
index 0000000000..864ec38186
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_get.h
@@ -0,0 +1,64 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocCNUWhiteListControlTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCCNUWHITELISTCONTROLTABLE_DATA_GET_H
+#define EOCCNUWHITELISTCONTROLTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlTable is subid 7 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7, length: 12
+*/
+ /*
+ * indexes
+ */
+
+ int eocCNUWhiteListControlAmountLimitation_get( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListControlAmountLimitation_val_ptr );
+ int eocCNUWhiteListControlRegisteredAmount_get( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListControlRegisteredAmount_val_ptr );
+ int eocCNUWhiteListControlAllRFOutputLevel_get( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListControlAllRFOutputLevel_val_ptr );
+ int eocCNUWhiteListControlExtMACLimitation_get( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListControlExtMACLimitation_val_ptr );
+ int eocCNUWhiteListControlPhyRateGate_get( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListControlPhyRateGate_val_ptr );
+ int eocCNUWhiteListControlAuthOption_get( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListControlAuthOption_val_ptr );
+
+
+int eocCNUWhiteListControlTable_indexes_set_tbl_idx(eocCNUWhiteListControlTable_mib_index *tbl_idx, long eocCNUWhiteListControlIndex_val);
+int eocCNUWhiteListControlTable_indexes_set(eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUWHITELISTCONTROLTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_set.c
new file mode 100644
index 0000000000..9b1e74b854
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_set.c
@@ -0,0 +1,1126 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUWhiteListControlTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlTable is subid 7 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7, length: 12
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocCNUWhiteListControlTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocCNUWhiteListControlTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListControlTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUWhiteListControlTable_undo_setup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocCNUWhiteListControlTable undo.
+ * set up eocCNUWhiteListControlTable undo information, in preparation for a set.
+ * Undo storage is in (* eocCNUWhiteListControlAuthOption_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUWhiteListControlTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListControlTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUWhiteListControlTable_undo( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocCNUWhiteListControlTable undo.
+ * eocCNUWhiteListControlTable undo information, in response to a failed set.
+ * Undo storage is in (* eocCNUWhiteListControlAuthOption_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUWhiteListControlTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListControlTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUWhiteListControlTable_undo_cleanup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocCNUWhiteListControlTable undo.
+ * Undo storage is in (* eocCNUWhiteListControlAuthOption_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUWhiteListControlTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUWhiteListControlTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUWhiteListControlTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUWhiteListControlTable_commit( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:"
+ "eocCNUWhiteListControlTable_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocCNUWhiteListControlTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_EOCCNUWHITELISTCONTROLAMOUNTLIMITATION_FLAG)
+ { /* clear eocCNUWhiteListControlAmountLimitation */
+ save_flags &= ~COLUMN_EOCCNUWHITELISTCONTROLAMOUNTLIMITATION_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUWhiteListControlAmountLimitation.
+ */
+ /*
+ * set flag, in case we need to undo eocCNUWhiteListControlAmountLimitation
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCNUWHITELISTCONTROLAMOUNTLIMITATION_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUWHITELISTCONTROLALLRFOUTPUTLEVEL_FLAG)
+ { /* clear eocCNUWhiteListControlAllRFOutputLevel */
+ save_flags &= ~COLUMN_EOCCNUWHITELISTCONTROLALLRFOUTPUTLEVEL_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUWhiteListControlAllRFOutputLevel.
+ */
+ /*
+ * set flag, in case we need to undo eocCNUWhiteListControlAllRFOutputLevel
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCNUWHITELISTCONTROLALLRFOUTPUTLEVEL_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUWHITELISTCONTROLEXTMACLIMITATION_FLAG)
+ { /* clear eocCNUWhiteListControlExtMACLimitation */
+ save_flags &= ~COLUMN_EOCCNUWHITELISTCONTROLEXTMACLIMITATION_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUWhiteListControlExtMACLimitation.
+ */
+ /*
+ * set flag, in case we need to undo eocCNUWhiteListControlExtMACLimitation
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCNUWHITELISTCONTROLEXTMACLIMITATION_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION_FLAG)
+ { /* clear eocCNUWhiteListControlAuthOption */
+ save_flags &= ~COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocCNUWhiteListControlAuthOption.
+ */
+ /*
+ * set flag, in case we need to undo eocCNUWhiteListControlAuthOption
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION_FLAG;
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc)
+ {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags)
+ {
+ snmp_log (LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocCNUWhiteListControlTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUWhiteListControlTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUWhiteListControlTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUWhiteListControlTable_undo_commit( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_undo_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:485:M: |-> Undo eocCNUWhiteListControlTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocCNUWhiteListControlTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocCNUWhiteListControlTable node value checks.
+ * TODO:450:M: Implement eocCNUWhiteListControlTable undo functions.
+ * TODO:460:M: Implement eocCNUWhiteListControlTable set functions.
+ * TODO:480:M: Implement eocCNUWhiteListControlTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlAmountLimitation
+ * eocCNUWhiteListControlAmountLimitation is subid 2 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.2
+ * Description:
+CNU×î´óµÇ¼ÇÊý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListControlAmountLimitation_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUWhiteListControlTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUWhiteListControlAmountLimitation_check_value( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlAmountLimitation_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAmountLimitation_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUWhiteListControlAmountLimitation value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUWhiteListControlAmountLimitation value not illegal */
+} /* eocCNUWhiteListControlAmountLimitation_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListControlTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUWhiteListControlTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUWhiteListControlAmountLimitation_undo_setup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAmountLimitation_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUWhiteListControlAmountLimitation undo.
+ */
+ /*
+ * copy eocCNUWhiteListControlAmountLimitation data
+ * set rowreq_ctx->undo->eocCNUWhiteListControlAmountLimitation from rowreq_ctx->data.eocCNUWhiteListControlAmountLimitation
+ */
+ rowreq_ctx->undo->eocCNUWhiteListControlAmountLimitation = rowreq_ctx->data.eocCNUWhiteListControlAmountLimitation;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlAmountLimitation_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUWhiteListControlAmountLimitation_val
+ * A long containing the new value.
+ */
+int
+eocCNUWhiteListControlAmountLimitation_set( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlAmountLimitation_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAmountLimitation_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUWhiteListControlAmountLimitation value.
+ * set eocCNUWhiteListControlAmountLimitation value in rowreq_ctx->data
+ */
+ snmp_log(LOG_ERR, "SET not supported for ",
+ "eocCNUWhiteListControlAmountLimitation_set!\n");
+ return SNMP_ERR_NOTWRITABLE;
+} /* eocCNUWhiteListControlAmountLimitation_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUWhiteListControlAmountLimitation_undo( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAmountLimitation_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUWhiteListControlAmountLimitation undo.
+ */
+ /*
+ * copy eocCNUWhiteListControlAmountLimitation data
+ * set rowreq_ctx->data.eocCNUWhiteListControlAmountLimitation from rowreq_ctx->undo->eocCNUWhiteListControlAmountLimitation
+ */
+ rowreq_ctx->data.eocCNUWhiteListControlAmountLimitation = rowreq_ctx->undo->eocCNUWhiteListControlAmountLimitation;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlAmountLimitation_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlAllRFOutputLevel
+ * eocCNUWhiteListControlAllRFOutputLevel is subid 4 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.4
+ * Description:
+ËùÓÐCNUÊä³öµçƽ£¬µ¥Î»dBuV¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListControlAllRFOutputLevel_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUWhiteListControlTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUWhiteListControlAllRFOutputLevel_check_value( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlAllRFOutputLevel_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAllRFOutputLevel_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUWhiteListControlAllRFOutputLevel value.
+ */
+ if ((eocCNUWhiteListControlAllRFOutputLevel_val
+ < LIBSPID_RF_CLT_OUTPUT_LEVEL_MIN)
+ || (eocCNUWhiteListControlAllRFOutputLevel_val
+ > LIBSPID_RF_CLT_OUTPUT_LEVEL_MAX))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+ return MFD_SUCCESS; /* eocCNUWhiteListControlAllRFOutputLevel value not illegal */
+} /* eocCNUWhiteListControlAllRFOutputLevel_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListControlTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUWhiteListControlTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUWhiteListControlAllRFOutputLevel_undo_setup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAllRFOutputLevel_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUWhiteListControlAllRFOutputLevel undo.
+ */
+ /*
+ * copy eocCNUWhiteListControlAllRFOutputLevel data
+ * set rowreq_ctx->undo->eocCNUWhiteListControlAllRFOutputLevel from rowreq_ctx->data.eocCNUWhiteListControlAllRFOutputLevel
+ */
+ rowreq_ctx->undo->eocCNUWhiteListControlAllRFOutputLevel = rowreq_ctx->data.eocCNUWhiteListControlAllRFOutputLevel;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlAllRFOutputLevel_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUWhiteListControlAllRFOutputLevel_val
+ * A long containing the new value.
+ */
+int
+eocCNUWhiteListControlAllRFOutputLevel_set( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlAllRFOutputLevel_val )
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ int ret;
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAllRFOutputLevel_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUWhiteListControlAllRFOutputLevel value.
+ * set eocCNUWhiteListControlAllRFOutputLevel value in rowreq_ctx->data
+ */
+ sprintf (buffer, "%ld", eocCNUWhiteListControlAllRFOutputLevel_val);
+ ret = libspid_config_write_item (LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_OUTPUT_LEVEL,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ rowreq_ctx->data.eocCNUWhiteListControlAllRFOutputLevel =
+ eocCNUWhiteListControlAllRFOutputLevel_val;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlAllRFOutputLevel_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUWhiteListControlAllRFOutputLevel_undo( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ int ret;
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAllRFOutputLevel_undo", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUWhiteListControlAllRFOutputLevel undo.
+ */
+ /*
+ * copy eocCNUWhiteListControlAllRFOutputLevel data
+ * set rowreq_ctx->data.eocCNUWhiteListControlAllRFOutputLevel from rowreq_ctx->undo->eocCNUWhiteListControlAllRFOutputLevel
+ */
+ sprintf (buffer, "%ld",
+ rowreq_ctx->undo->eocCNUWhiteListControlAllRFOutputLevel);
+ ret = libspid_config_write_item (LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_OUTPUT_LEVEL,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_UNDOFAILED;
+ }
+ rowreq_ctx->data.eocCNUWhiteListControlAllRFOutputLevel =
+ rowreq_ctx->undo->eocCNUWhiteListControlAllRFOutputLevel;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlAllRFOutputLevel_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlExtMACLimitation
+ * eocCNUWhiteListControlExtMACLimitation is subid 5 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.5
+ * Description:
+ËùÓÐCNUµÄMACµØÖ·ÏÞÖÆ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListControlExtMACLimitation_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUWhiteListControlTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUWhiteListControlExtMACLimitation_check_value( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlExtMACLimitation_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlExtMACLimitation_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUWhiteListControlExtMACLimitation value.
+ */
+ if ((eocCNUWhiteListControlExtMACLimitation_val
+ < LIBSPID_EOC_WL_EXT_MAC_LIMIT_MIN)
+ || (eocCNUWhiteListControlExtMACLimitation_val
+ > LIBSPID_EOC_WL_EXT_MAC_LIMIT_MAX))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlExtMACLimitation_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListControlTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUWhiteListControlTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUWhiteListControlExtMACLimitation_undo_setup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlExtMACLimitation_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUWhiteListControlExtMACLimitation undo.
+ */
+ /*
+ * copy eocCNUWhiteListControlExtMACLimitation data
+ * set rowreq_ctx->undo->eocCNUWhiteListControlExtMACLimitation from rowreq_ctx->data.eocCNUWhiteListControlExtMACLimitation
+ */
+ rowreq_ctx->undo->eocCNUWhiteListControlExtMACLimitation = rowreq_ctx->data.eocCNUWhiteListControlExtMACLimitation;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlExtMACLimitation_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUWhiteListControlExtMACLimitation_val
+ * A long containing the new value.
+ */
+int
+eocCNUWhiteListControlExtMACLimitation_set( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlExtMACLimitation_val )
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ int ret;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlExtMACLimitation_set", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUWhiteListControlExtMACLimitation value.
+ * set eocCNUWhiteListControlExtMACLimitation value in rowreq_ctx->data
+ */
+ sprintf (buffer, "%ld", eocCNUWhiteListControlExtMACLimitation_val);
+ ret = libspid_config_write_item (LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_MAC_LIMITATION,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ rowreq_ctx->data.eocCNUWhiteListControlExtMACLimitation =
+ eocCNUWhiteListControlExtMACLimitation_val;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlExtMACLimitation_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUWhiteListControlExtMACLimitation_undo( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ int ret;
+ DEBUGMSGTL (("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlExtMACLimitation_undo", "called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUWhiteListControlExtMACLimitation undo.
+ */
+ /*
+ * copy eocCNUWhiteListControlExtMACLimitation data
+ * set rowreq_ctx->data.eocCNUWhiteListControlExtMACLimitation from rowreq_ctx->undo->eocCNUWhiteListControlExtMACLimitation
+ */
+ sprintf (buffer, "%ld",
+ rowreq_ctx->undo->eocCNUWhiteListControlExtMACLimitation);
+ ret = libspid_config_write_item (LIBSPID_SLAVE_CONF_PATH,
+ LIBSPID_SLAVE_CONF_LABEL_MAC_LIMITATION,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_UNDOFAILED;
+ }
+ rowreq_ctx->data.eocCNUWhiteListControlExtMACLimitation =
+ rowreq_ctx->undo->eocCNUWhiteListControlExtMACLimitation;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlExtMACLimitation_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlEntry.eocCNUWhiteListControlAuthOption
+ * eocCNUWhiteListControlAuthOption is subid 7 of eocCNUWhiteListControlEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7.1.7
+ * Description:
+°×Ãûµ¥ÈÏÖ¤µÄÅäÖÃÑ¡Ïî
+ ÃüÖа×Ãûµ¥(1) £­ Ö»Óа×Ãûµ¥±íÏîÖÐÊÚȨ״̬ΪÊÚȨµÄCNU²ÅÄÜÉÏÏߣ»
+ ²»¿ØÖÆ(2) £­ ³ýÁËÃüÖкÚÃûµ¥µÄCNUÍ⣬ÆäËûµÄCNU¶¼¿ÉÒÔÉÏÏß¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListControlAuthOption_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUWhiteListControlTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUWhiteListControlAuthOption_check_value( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlAuthOption_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAuthOption_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUWhiteListControlAuthOption value.
+ */
+ if ((eocCNUWhiteListControlAuthOption_val != 0)
+ && (eocCNUWhiteListControlAuthOption_val != 1))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+ return MFD_SUCCESS; /* eocCNUWhiteListControlAuthOption value not illegal */
+} /* eocCNUWhiteListControlAuthOption_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListControlTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUWhiteListControlTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUWhiteListControlAuthOption_undo_setup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAuthOption_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUWhiteListControlAuthOption undo.
+ */
+ /*
+ * copy eocCNUWhiteListControlAuthOption data
+ * set rowreq_ctx->undo->eocCNUWhiteListControlAuthOption from rowreq_ctx->data.eocCNUWhiteListControlAuthOption
+ */
+ rowreq_ctx->undo->eocCNUWhiteListControlAuthOption = rowreq_ctx->data.eocCNUWhiteListControlAuthOption;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlAuthOption_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUWhiteListControlAuthOption_val
+ * A long containing the new value.
+ */
+int
+eocCNUWhiteListControlAuthOption_set( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlAuthOption_val )
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ int ret;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAuthOption_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUWhiteListControlAuthOption value.
+ * set eocCNUWhiteListControlAuthOption value in rowreq_ctx->data
+ */
+ sprintf (buffer, "%ld", eocCNUWhiteListControlAuthOption_val);
+ ret = libspid_config_write_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_WL_CONTROL,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ rowreq_ctx->data.eocCNUWhiteListControlAuthOption =
+ eocCNUWhiteListControlAuthOption_val;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlAuthOption_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUWhiteListControlAuthOption_undo( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ int ret;
+ DEBUGMSGTL (("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlAuthOption_undo", "called\n"));
+
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUWhiteListControlAuthOption undo.
+ */
+ /*
+ * copy eocCNUWhiteListControlAuthOption data
+ * set rowreq_ctx->data.eocCNUWhiteListControlAuthOption from
+ *rowreq_ctx->undo->eocCNUWhiteListControlAuthOption
+ */
+ sprintf (buffer, "%ld",
+ rowreq_ctx->undo->eocCNUWhiteListControlAuthOption);
+ ret = libspid_config_write_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_WL_CONTROL,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_UNDOFAILED;
+ }
+ rowreq_ctx->data.eocCNUWhiteListControlAuthOption =
+ rowreq_ctx->undo->eocCNUWhiteListControlAuthOption;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListControlAuthOption_undo */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_set.h
new file mode 100644
index 0000000000..6429d8fd50
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_data_set.h
@@ -0,0 +1,80 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUWHITELISTCONTROLTABLE_DATA_SET_H
+#define EOCCNUWHITELISTCONTROLTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlTable is subid 7 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7, length: 12
+*/
+
+
+int eocCNUWhiteListControlTable_undo_setup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx);
+int eocCNUWhiteListControlTable_undo_cleanup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx);
+int eocCNUWhiteListControlTable_undo( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx);
+int eocCNUWhiteListControlTable_commit( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx);
+int eocCNUWhiteListControlTable_undo_commit( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocCNUWhiteListControlAmountLimitation_check_value( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlAmountLimitation_val);
+int eocCNUWhiteListControlAmountLimitation_undo_setup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx );
+int eocCNUWhiteListControlAmountLimitation_set( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlAmountLimitation_val );
+int eocCNUWhiteListControlAmountLimitation_undo( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUWhiteListControlRegisteredAmount_check_value( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlRegisteredAmount_val);
+int eocCNUWhiteListControlRegisteredAmount_undo_setup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx );
+int eocCNUWhiteListControlRegisteredAmount_set( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlRegisteredAmount_val );
+int eocCNUWhiteListControlRegisteredAmount_undo( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUWhiteListControlAllRFOutputLevel_check_value( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlAllRFOutputLevel_val);
+int eocCNUWhiteListControlAllRFOutputLevel_undo_setup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx );
+int eocCNUWhiteListControlAllRFOutputLevel_set( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlAllRFOutputLevel_val );
+int eocCNUWhiteListControlAllRFOutputLevel_undo( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUWhiteListControlExtMACLimitation_check_value( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlExtMACLimitation_val);
+int eocCNUWhiteListControlExtMACLimitation_undo_setup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx );
+int eocCNUWhiteListControlExtMACLimitation_set( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlExtMACLimitation_val );
+int eocCNUWhiteListControlExtMACLimitation_undo( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUWhiteListControlPhyRateGate_check_value( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlPhyRateGate_val);
+int eocCNUWhiteListControlPhyRateGate_undo_setup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx );
+int eocCNUWhiteListControlPhyRateGate_set( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlPhyRateGate_val );
+int eocCNUWhiteListControlPhyRateGate_undo( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUWhiteListControlAuthOption_check_value( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlAuthOption_val);
+int eocCNUWhiteListControlAuthOption_undo_setup( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx );
+int eocCNUWhiteListControlAuthOption_set( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListControlAuthOption_val );
+int eocCNUWhiteListControlAuthOption_undo( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocCNUWhiteListControlTable_check_dependencies(eocCNUWhiteListControlTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUWHITELISTCONTROLTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_enums.h
new file mode 100644
index 0000000000..148d759e9f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_enums.h
@@ -0,0 +1,40 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUWHITELISTCONTROLTABLE_ENUMS_H
+#define EOCCNUWHITELISTCONTROLTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocCNUWhiteListControlTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUWHITELISTCONTROLTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_interface.c
new file mode 100644
index 0000000000..5854fd5ea5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_interface.c
@@ -0,0 +1,1608 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUWhiteListControlTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocCNUWhiteListControlTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListControlTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListControlTable is subid 7 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.7, length: 12
+*/
+typedef struct eocCNUWhiteListControlTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocCNUWhiteListControlTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocCNUWhiteListControlTable_interface_ctx;
+
+static eocCNUWhiteListControlTable_interface_ctx eocCNUWhiteListControlTable_if_ctx;
+
+static void _eocCNUWhiteListControlTable_container_init(
+ eocCNUWhiteListControlTable_interface_ctx *if_ctx);
+static void _eocCNUWhiteListControlTable_container_shutdown(
+ eocCNUWhiteListControlTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocCNUWhiteListControlTable_container_get( void )
+{
+ return eocCNUWhiteListControlTable_if_ctx.container;
+}
+
+eocCNUWhiteListControlTable_registration *
+eocCNUWhiteListControlTable_registration_get( void )
+{
+ return eocCNUWhiteListControlTable_if_ctx.user_ctx;
+}
+
+eocCNUWhiteListControlTable_registration *
+eocCNUWhiteListControlTable_registration_set( eocCNUWhiteListControlTable_registration * newreg )
+{
+ eocCNUWhiteListControlTable_registration * old = eocCNUWhiteListControlTable_if_ctx.user_ctx;
+ eocCNUWhiteListControlTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocCNUWhiteListControlTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocCNUWhiteListControlTable_if_ctx.container);
+}
+
+u_int
+eocCNUWhiteListControlTable_dirty_get( void )
+{
+ return eocCNUWhiteListControlTable_if_ctx.table_dirty;
+}
+
+void
+eocCNUWhiteListControlTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocCNUWhiteListControlTable_if_ctx.table_dirty, status));
+ eocCNUWhiteListControlTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListControlTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListControlTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListControlTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListControlTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListControlTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListControlTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListControlTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListControlTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListControlTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListControlTable_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListControlTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListControlTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int _eocCNUWhiteListControlTable_undo_column( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+eocCNUWhiteListControlTable_data *eocCNUWhiteListControlTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table eocCNUWhiteListControlTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocCNUWhiteListControlTable_initialize_interface(eocCNUWhiteListControlTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocCNUWhiteListControlTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocCNUWhiteListControlTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_eocCNUWhiteListControlTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocCNUWhiteListControlTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocCNUWhiteListControlIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCCNUWHITELISTCONTROLTABLE_MIN_COL;
+ tbl_info->max_column = EOCCNUWHITELISTCONTROLTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocCNUWhiteListControlTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocCNUWhiteListControlTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocCNUWhiteListControlTable_container_init(&eocCNUWhiteListControlTable_if_ctx);
+ if (NULL == eocCNUWhiteListControlTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocCNUWhiteListControlTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocCNUWhiteListControlTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocCNUWhiteListControlTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocCNUWhiteListControlTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocCNUWhiteListControlTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocCNUWhiteListControlTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocCNUWhiteListControlTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocCNUWhiteListControlTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocCNUWhiteListControlTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocCNUWhiteListControlTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocCNUWhiteListControlTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocCNUWhiteListControlTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocCNUWhiteListControlTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:init_eocCNUWhiteListControlTable",
+ "Registering eocCNUWhiteListControlTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocCNUWhiteListControlTable", handler,
+ eocCNUWhiteListControlTable_oid,
+ eocCNUWhiteListControlTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocCNUWhiteListControlTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocCNUWhiteListControlTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocCNUWhiteListControlTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocCNUWhiteListControlTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocCNUWhiteListControlTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocCNUWhiteListControlTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocCNUWhiteListControlTable
+ */
+void
+_eocCNUWhiteListControlTable_shutdown_interface(eocCNUWhiteListControlTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocCNUWhiteListControlTable_container_shutdown(&eocCNUWhiteListControlTable_if_ctx);
+}
+
+void
+eocCNUWhiteListControlTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocCNUWhiteListControlTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocCNUWhiteListControlTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocCNUWhiteListControlTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUWhiteListControlTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUWhiteListControlIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUWhiteListControlIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUWhiteListControlIndex, 0x00, sizeof(var_eocCNUWhiteListControlIndex) );
+ var_eocCNUWhiteListControlIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUWhiteListControlIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_index_to_oid","called\n"));
+
+ /* eocCNUWhiteListControlIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCNUWhiteListControlIndex, (u_char*)&mib_idx->eocCNUWhiteListControlIndex,
+ sizeof(mib_idx->eocCNUWhiteListControlIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocCNUWhiteListControlIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUWhiteListControlIndex );
+
+ return err;
+} /* eocCNUWhiteListControlTable_index_to_oid */
+
+/**
+ * extract eocCNUWhiteListControlTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocCNUWhiteListControlTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUWhiteListControlTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUWhiteListControlIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUWhiteListControlIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUWhiteListControlIndex, 0x00, sizeof(var_eocCNUWhiteListControlIndex) );
+ var_eocCNUWhiteListControlIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUWhiteListControlIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocCNUWhiteListControlIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocCNUWhiteListControlIndex = *((long *)var_eocCNUWhiteListControlIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUWhiteListControlIndex );
+
+ return err;
+} /* eocCNUWhiteListControlTable_index_from_oid */
+
+
+/*
+ * eocCNUWhiteListControlTable_allocate_data
+ *
+ * Purpose: create new eocCNUWhiteListControlTable_data.
+ */
+eocCNUWhiteListControlTable_data *
+eocCNUWhiteListControlTable_allocate_data(void)
+{
+ eocCNUWhiteListControlTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocCNUWhiteListControlTable_data);
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocCNUWhiteListControlTable_data.\n");
+ }
+
+ return rtn;
+} /* eocCNUWhiteListControlTable_allocate_data */
+
+/*
+ * eocCNUWhiteListControlTable_release_data
+ *
+ * Purpose: release eocCNUWhiteListControlTable data.
+ */
+void
+eocCNUWhiteListControlTable_release_data(eocCNUWhiteListControlTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_release_data","called\n"));
+
+ free(data);
+} /* eocCNUWhiteListControlTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocCNUWhiteListControlTable_rowreq_ctx
+ */
+eocCNUWhiteListControlTable_rowreq_ctx *
+eocCNUWhiteListControlTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocCNUWhiteListControlTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocCNUWhiteListControlTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocCNUWhiteListControlTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocCNUWhiteListControlTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocCNUWhiteListControlTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocCNUWhiteListControlTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocCNUWhiteListControlTable_rowreq_ctx
+ */
+void
+eocCNUWhiteListControlTable_release_rowreq_ctx(eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:eocCNUWhiteListControlTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocCNUWhiteListControlTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if(rowreq_ctx->undo)
+ eocCNUWhiteListControlTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocCNUWhiteListControlTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUWhiteListControlTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocCNUWhiteListControlTable_pre_request(eocCNUWhiteListControlTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUWhiteListControlTable","error %d from "
+ "eocCNUWhiteListControlTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListControlTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUWhiteListControlTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocCNUWhiteListControlTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocCNUWhiteListControlTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocCNUWhiteListControlTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocCNUWhiteListControlTable_post_request(eocCNUWhiteListControlTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUWhiteListControlTable","error %d from "
+ "eocCNUWhiteListControlTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListControlTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUWhiteListControlTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocCNUWhiteListControlTable_interface_ctx *if_ctx =
+ * (eocCNUWhiteListControlTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocCNUWhiteListControlTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocCNUWhiteListControlTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUWhiteListControlTable_get_column( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocCNUWhiteListControlIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCNUWhiteListControlIndex;
+ break;
+
+ /* eocCNUWhiteListControlAmountLimitation(2)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLAMOUNTLIMITATION:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUWhiteListControlAmountLimitation_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUWhiteListControlRegisteredAmount(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLREGISTEREDAMOUNT:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUWhiteListControlRegisteredAmount_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUWhiteListControlAllRFOutputLevel(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLALLRFOUTPUTLEVEL:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUWhiteListControlAllRFOutputLevel_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUWhiteListControlExtMACLimitation(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLEXTMACLIMITATION:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUWhiteListControlExtMACLimitation_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUWhiteListControlPhyRateGate(6)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLPHYRATEGATE:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUWhiteListControlPhyRateGate_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUWhiteListControlAuthOption(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUWhiteListControlAuthOption_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ default:
+ if (EOCCNUWHITELISTCONTROLTABLE_MIN_COL <= column && column <= EOCCNUWHITELISTCONTROLTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocCNUWhiteListControlTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocCNUWhiteListControlTable_get_column */
+
+int
+_mfd_eocCNUWhiteListControlTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUWhiteListControlTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListControlTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUWhiteListControlTable_check_column( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_eocCNUWhiteListControlTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocCNUWhiteListControlIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocCNUWhiteListControlAmountLimitation(2)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLAMOUNTLIMITATION:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUWhiteListControlAmountLimitation ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:_eocCNUWhiteListControlTable_check_column:eocCNUWhiteListControlAmountLimitation",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUWhiteListControlAmountLimitation_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUWhiteListControlAmountLimitation_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUWhiteListControlRegisteredAmount(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLREGISTEREDAMOUNT:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUWhiteListControlAllRFOutputLevel(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLALLRFOUTPUTLEVEL:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUWhiteListControlAllRFOutputLevel ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:_eocCNUWhiteListControlTable_check_column:eocCNUWhiteListControlAllRFOutputLevel",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUWhiteListControlAllRFOutputLevel_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUWhiteListControlAllRFOutputLevel_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUWhiteListControlExtMACLimitation(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLEXTMACLIMITATION:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUWhiteListControlExtMACLimitation ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:_eocCNUWhiteListControlTable_check_column:eocCNUWhiteListControlExtMACLimitation",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUWhiteListControlExtMACLimitation_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUWhiteListControlExtMACLimitation_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUWhiteListControlPhyRateGate(6)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLPHYRATEGATE:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUWhiteListControlAuthOption(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocCNUWhiteListControlAuthOption ) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:_eocCNUWhiteListControlTable_check_column:eocCNUWhiteListControlAuthOption",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUWhiteListControlAuthOption_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUWhiteListControlAuthOption_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocCNUWhiteListControlTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocCNUWhiteListControlTable_check_column */
+
+int
+_mfd_eocCNUWhiteListControlTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUWhiteListControlTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListControlTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUWhiteListControlTable_undo_setup_column( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_eocCNUWhiteListControlTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUWhiteListControlAmountLimitation(2)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLAMOUNTLIMITATION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTCONTROLAMOUNTLIMITATION_FLAG;
+ rc = eocCNUWhiteListControlAmountLimitation_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUWhiteListControlAllRFOutputLevel(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLALLRFOUTPUTLEVEL:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTCONTROLALLRFOUTPUTLEVEL_FLAG;
+ rc = eocCNUWhiteListControlAllRFOutputLevel_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUWhiteListControlExtMACLimitation(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLEXTMACLIMITATION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTCONTROLEXTMACLIMITATION_FLAG;
+ rc = eocCNUWhiteListControlExtMACLimitation_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUWhiteListControlAuthOption(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION_FLAG;
+ rc = eocCNUWhiteListControlAuthOption_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUWhiteListControlTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUWhiteListControlTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUWhiteListControlTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocCNUWhiteListControlTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocCNUWhiteListControlTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:mfd","error %d from "
+ "eocCNUWhiteListControlTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUWhiteListControlTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:mfd","error %d from "
+ "eocCNUWhiteListControlTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListControlTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUWhiteListControlTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocCNUWhiteListControlTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:mfd","error %d from "
+ "eocCNUWhiteListControlTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if(rowreq_ctx->undo) {
+ eocCNUWhiteListControlTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListControlTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUWhiteListControlTable_set_column( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_eocCNUWhiteListControlTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUWhiteListControlAmountLimitation(2)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLAMOUNTLIMITATION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTCONTROLAMOUNTLIMITATION_FLAG;
+ rc = eocCNUWhiteListControlAmountLimitation_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCNUWhiteListControlAllRFOutputLevel(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLALLRFOUTPUTLEVEL:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTCONTROLALLRFOUTPUTLEVEL_FLAG;
+ rc = eocCNUWhiteListControlAllRFOutputLevel_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCNUWhiteListControlExtMACLimitation(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLEXTMACLIMITATION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTCONTROLEXTMACLIMITATION_FLAG;
+ rc = eocCNUWhiteListControlExtMACLimitation_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCNUWhiteListControlAuthOption(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION_FLAG;
+ rc = eocCNUWhiteListControlAuthOption_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUWhiteListControlTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocCNUWhiteListControlTable_set_column */
+
+int
+_mfd_eocCNUWhiteListControlTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUWhiteListControlTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:mfd","error %d from "
+ "eocCNUWhiteListControlTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListControlTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocCNUWhiteListControlTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUWhiteListControlTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:mfd","error %d from "
+ "eocCNUWhiteListControlTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocCNUWhiteListControlTable_dirty_set( eocCNUWhiteListControlTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocCNUWhiteListControlTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocCNUWhiteListControlTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocCNUWhiteListControlTable_dirty_set( d - 1 );
+ }
+
+ rc = eocCNUWhiteListControlTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:mfd","error %d from "
+ "eocCNUWhiteListControlTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocCNUWhiteListControlTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListControlTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUWhiteListControlTable_undo_column( eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_eocCNUWhiteListControlTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUWhiteListControlAmountLimitation(2)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLAMOUNTLIMITATION:
+ rc = eocCNUWhiteListControlAmountLimitation_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUWhiteListControlAllRFOutputLevel(4)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLALLRFOUTPUTLEVEL:
+ rc = eocCNUWhiteListControlAllRFOutputLevel_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUWhiteListControlExtMACLimitation(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLEXTMACLIMITATION:
+ rc = eocCNUWhiteListControlExtMACLimitation_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUWhiteListControlAuthOption(7)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION:
+ rc = eocCNUWhiteListControlAuthOption_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUWhiteListControlTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUWhiteListControlTable_undo_column */
+
+int
+_mfd_eocCNUWhiteListControlTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUWhiteListControlTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:mfd","error %d from "
+ "eocCNUWhiteListControlTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUWhiteListControlTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUWhiteListControlTable:mfd","error %d from "
+ "eocCNUWhiteListControlTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListControlTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocCNUWhiteListControlTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_mfd_eocCNUWhiteListControlTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocCNUWhiteListControlTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListControlTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocCNUWhiteListControlTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocCNUWhiteListControlTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocCNUWhiteListControlTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocCNUWhiteListControlTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocCNUWhiteListControlTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocCNUWhiteListControlTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocCNUWhiteListControlTable_container_init(eocCNUWhiteListControlTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_eocCNUWhiteListControlTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocCNUWhiteListControlTable_oid,
+ eocCNUWhiteListControlTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocCNUWhiteListControlTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocCNUWhiteListControlTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocCNUWhiteListControlTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocCNUWhiteListControlTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocCNUWhiteListControlTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocCNUWhiteListControlTable_container_shutdown(eocCNUWhiteListControlTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUWhiteListControlTable:_eocCNUWhiteListControlTable_container_shutdown","called\n"));
+
+ eocCNUWhiteListControlTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocCNUWhiteListControlTable_container_shutdown */
+
+
+eocCNUWhiteListControlTable_rowreq_ctx *
+eocCNUWhiteListControlTable_row_find_by_mib_index(eocCNUWhiteListControlTable_mib_index *mib_idx)
+{
+ eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocCNUWhiteListControlTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocCNUWhiteListControlTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_interface.h
new file mode 100644
index 0000000000..4d97addbe6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_interface.h
@@ -0,0 +1,87 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCCNUWHITELISTCONTROLTABLE_INTERFACE_H
+#define EOCCNUWHITELISTCONTROLTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocCNUWhiteListControlTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocCNUWhiteListControlTable_initialize_interface(eocCNUWhiteListControlTable_registration * user_ctx,
+ u_long flags);
+void _eocCNUWhiteListControlTable_shutdown_interface(eocCNUWhiteListControlTable_registration * user_ctx);
+
+eocCNUWhiteListControlTable_registration *
+eocCNUWhiteListControlTable_registration_get( void );
+
+eocCNUWhiteListControlTable_registration *
+eocCNUWhiteListControlTable_registration_set( eocCNUWhiteListControlTable_registration * newreg );
+
+netsnmp_container *eocCNUWhiteListControlTable_container_get( void );
+int eocCNUWhiteListControlTable_container_size( void );
+
+u_int eocCNUWhiteListControlTable_dirty_get( void );
+void eocCNUWhiteListControlTable_dirty_set( u_int status );
+
+ eocCNUWhiteListControlTable_rowreq_ctx * eocCNUWhiteListControlTable_allocate_rowreq_ctx(void *);
+void eocCNUWhiteListControlTable_release_rowreq_ctx(eocCNUWhiteListControlTable_rowreq_ctx *rowreq_ctx);
+
+int eocCNUWhiteListControlTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUWhiteListControlTable_mib_index *mib_idx);
+int eocCNUWhiteListControlTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUWhiteListControlTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocCNUWhiteListControlTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUWHITELISTCONTROLTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_oids.h
new file mode 100644
index 0000000000..fb40815e3d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListControlTable/eocCNUWhiteListControlTable_oids.h
@@ -0,0 +1,52 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUWHITELISTCONTROLTABLE_OIDS_H
+#define EOCCNUWHITELISTCONTROLTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* column number definitions for table eocCNUWhiteListControlTable */
+#define EOCCNUWHITELISTCONTROLTABLE_OID 1,3,6,1,4,1,17409,2,4,5,1,7
+
+
+#define COLUMN_EOCCNUWHITELISTCONTROLINDEX 1
+
+#define COLUMN_EOCCNUWHITELISTCONTROLAMOUNTLIMITATION 2
+#define COLUMN_EOCCNUWHITELISTCONTROLAMOUNTLIMITATION_FLAG (0x1 << 0)
+
+#define COLUMN_EOCCNUWHITELISTCONTROLREGISTEREDAMOUNT 3
+
+#define COLUMN_EOCCNUWHITELISTCONTROLALLRFOUTPUTLEVEL 4
+#define COLUMN_EOCCNUWHITELISTCONTROLALLRFOUTPUTLEVEL_FLAG (0x1 << 1)
+
+#define COLUMN_EOCCNUWHITELISTCONTROLEXTMACLIMITATION 5
+#define COLUMN_EOCCNUWHITELISTCONTROLEXTMACLIMITATION_FLAG (0x1 << 2)
+
+#define COLUMN_EOCCNUWHITELISTCONTROLPHYRATEGATE 6
+
+#define COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION 7
+#define COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION_FLAG (0x1 << 3)
+
+
+#define EOCCNUWHITELISTCONTROLTABLE_MIN_COL COLUMN_EOCCNUWHITELISTCONTROLINDEX
+#define EOCCNUWHITELISTCONTROLTABLE_MAX_COL COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION
+
+
+ /*
+ * TODO:405:r: Review EOCCNUWHITELISTCONTROLTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCCNUWHITELISTCONTROLTABLE_SETTABLE_COLS (COLUMN_EOCCNUWHITELISTCONTROLAMOUNTLIMITATION_FLAG | COLUMN_EOCCNUWHITELISTCONTROLALLRFOUTPUTLEVEL_FLAG | COLUMN_EOCCNUWHITELISTCONTROLEXTMACLIMITATION_FLAG | COLUMN_EOCCNUWHITELISTCONTROLAUTHOPTION_FLAG)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUWHITELISTCONTROLTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable.h
new file mode 100644
index 0000000000..79971bfce1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_interface)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_get)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_set)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable)
+config_require(mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_access)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListAuthorization.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListAuthorization.m2d
new file mode 100644
index 0000000000..223ed0d378
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListAuthorization.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListAuthorization
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListAutoUpgradeEN.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListAutoUpgradeEN.m2d
new file mode 100644
index 0000000000..07d4215bdf
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListAutoUpgradeEN.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListAutoUpgradeEN
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListCBATCardIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListCBATCardIndex.m2d
new file mode 100644
index 0000000000..5f8975e5bc
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListCBATCardIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListCBATCardIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListCNUIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListCNUIndex.m2d
new file mode 100644
index 0000000000..7897c68541
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListCNUIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListCNUIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListIPAddress.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListIPAddress.m2d
new file mode 100644
index 0000000000..c4be8e2e9a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListIPAddress.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListIPAddress
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListIndex.m2d
new file mode 100644
index 0000000000..3eb2143472
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListMACAddress.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListMACAddress.m2d
new file mode 100644
index 0000000000..f35f5c91f1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListMACAddress.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListMACAddress
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListRFOutputLevel.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListRFOutputLevel.m2d
new file mode 100644
index 0000000000..f47f2ea853
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListRFOutputLevel.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListRFOutputLevel
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListRegisterOnlineStatus.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListRegisterOnlineStatus.m2d
new file mode 100644
index 0000000000..c1c77a66af
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListRegisterOnlineStatus.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListRegisterOnlineStatus
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListRowStatus.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListRowStatus.m2d
new file mode 100644
index 0000000000..d0256276d8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/node-eocCNUWhiteListRowStatus.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocCNUWhiteListRowStatus
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/table-eocCNUWhiteListTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/table-eocCNUWhiteListTable.m2d
new file mode 100644
index 0000000000..76eead7b89
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/defaults/table-eocCNUWhiteListTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocCNUWhiteListTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 2@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 1@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 1@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable-README-FIRST.txt
new file mode 100644
index 0000000000..5027b72398
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocCNUWhiteListTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocCNUWhiteListTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocCNUWhiteListTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocCNUWhiteListTable_Makefile
+
+
+ File : eocCNUWhiteListTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocCNUWhiteListTable-README-eocCNUWhiteListTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocCNUWhiteListTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocCNUWhiteListTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocCNUWhiteListTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocCNUWhiteListTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable-README-eocCNUWhiteListTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable-README-eocCNUWhiteListTable.txt
new file mode 100644
index 0000000000..f2de0695e3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable-README-eocCNUWhiteListTable.txt
@@ -0,0 +1,951 @@
+************************************************************************
+eocCNUWhiteListTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocCNUWhiteListTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocCNUWhiteListTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocCNUWhiteListTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUWhiteListTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUWhiteListTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocCNUWhiteListTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocCNUWhiteListTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocCNUWhiteListTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocCNUWhiteListTable_allocate_data
+ eocCNUWhiteListTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocCNUWhiteListTable_rowreq_ctx_init
+ eocCNUWhiteListTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '2')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocCNUWhiteListTable table
+ ------------------------------------------------------------
+ The index(es) for the eocCNUWhiteListTable table are:
+
+ eocCNUWhiteListIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocCNUWhiteListCBATCardIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocCNUWhiteListCNUIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocCNUWhiteListTable_data.
+
+
+************************************************************************
+eocCNUWhiteListTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocCNUWhiteListTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocCNUWhiteListTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocCNUWhiteListTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocCNUWhiteListTable_indexes_set
+ WHERE: eocCNUWhiteListTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocCNUWhiteListTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocCNUWhiteListTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUWhiteListIPAddress_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUWhiteListMACAddress_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUWhiteListAuthorization_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUWhiteListRFOutputLevel_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUWhiteListAutoUpgradeEN_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUWhiteListRegisterOnlineStatus_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocCNUWhiteListRowStatus_get
+
+
+
+File: eocCNUWhiteListTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocCNUWhiteListTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table supports ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+ To support row creation, the index component of an incoming set request must
+ be validated. A funciton is generated for each individual index component,
+ and another for validating all the index components together.
+
+
+ Validate index component
+ ------------------------
+ TODO : validate the specified index component
+ FUNC : eocCNUWhiteListIndex_check_index
+
+ Validate index component
+ ------------------------
+ TODO : validate the specified index component
+ FUNC : eocCNUWhiteListCBATCardIndex_check_index
+
+ Validate index component
+ ------------------------
+ TODO : validate the specified index component
+ FUNC : eocCNUWhiteListCNUIndex_check_index
+
+
+ Validate index
+ --------------
+ TODO : check that all index components are valid
+ FUNC : eocCNUWhiteListTable_validate_index
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocCNUWhiteListTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUWhiteListIPAddress_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUWhiteListIPAddress_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUWhiteListIPAddress_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUWhiteListIPAddress_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUWhiteListMACAddress_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUWhiteListMACAddress_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUWhiteListMACAddress_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUWhiteListMACAddress_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUWhiteListAuthorization_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUWhiteListAuthorization_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUWhiteListAuthorization_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUWhiteListAuthorization_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUWhiteListRFOutputLevel_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUWhiteListRFOutputLevel_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUWhiteListRFOutputLevel_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUWhiteListRFOutputLevel_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUWhiteListAutoUpgradeEN_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUWhiteListAutoUpgradeEN_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUWhiteListAutoUpgradeEN_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUWhiteListAutoUpgradeEN_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocCNUWhiteListRowStatus_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocCNUWhiteListRowStatus_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocCNUWhiteListRowStatus_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocCNUWhiteListRowStatus_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocCNUWhiteListTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocCNUWhiteListTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocCNUWhiteListTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocCNUWhiteListTable table.
+
+To watch the flow of the eocCNUWhiteListTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocCNUWhiteListTable
+ verbose:eocCNUWhiteListTable
+ internal:eocCNUWhiteListTable
+
+e.g.
+ snmpd -f -Le -DeocCNUWhiteListTable,verbose:eocCNUWhiteListTable,internal:eocCNUWhiteListTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListTable is subid 6 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6, length: 12
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListIndex
+ * eocCNUWhiteListIndex is subid 1 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.1
+ * Description:
+CNU°×Ãûµ¥ÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListIPAddress
+ * eocCNUWhiteListIPAddress is subid 2 of eocCNUWhiteListEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.2
+ * Description:
+CNUµÄIPµØÖ·¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListMACAddress
+ * eocCNUWhiteListMACAddress is subid 3 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.3
+ * Description:
+CNUµÄMACµØÖ·¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListAuthorization
+ * eocCNUWhiteListAuthorization is subid 4 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.4
+ * Description:
+CNUÊÚȨ״̬¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: not_authorized(0), authorized(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListRFOutputLevel
+ * eocCNUWhiteListRFOutputLevel is subid 5 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.5
+ * Description:
+CNUÊä³öµçƽ£¬µ¥Î»dBuV
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListAutoUpgradeEN
+ * eocCNUWhiteListAutoUpgradeEN is subid 6 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.6
+ * Description:
+CNU×Ô¶¯Éý¼¶Ê¹ÄÜ£¬0±íʾ½ûÖ¹£¬1±íʾʹÄÜ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListRegisterOnlineStatus
+ * eocCNUWhiteListRegisterOnlineStatus is subid 7 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.7
+ * Description:
+CNUÔÚÏß״̬£º
+ 0- ²»ÔÚÏߣ»
+ 1- ÔÚÏß¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: offline(0), online(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListRowStatus
+ * eocCNUWhiteListRowStatus is subid 8 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.8
+ * Description:
+ÐÐ״̬£¬ÓÃÓÚ´´½¨¡¢Ð޸ġ¢É¾³ýijһÐУº
+ none_existent(0)- ±íÏî²»´æÔÚ£»
+ avtive(1)- ¼¤»î¸ÃÐУ»
+ notInService(2)- ״̬δ¼¤»î£»
+ notReady(3)- ²»Äܱ»¼¤»î״̬£»
+ createAndGo(4)- ´´½¨²¢¼¤»î£»
+ createAndWait(5)- ´´½¨£¬µ«²»¼¤»î£»
+ destory(6)- Ïú»Ù¸ÃÐС£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListCBATCardIndex
+ * eocCNUWhiteListCBATCardIndex is subid 9 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.9
+ * Description:
+ CBAT°å¿¨µÄÐòºÅË÷Òý
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListCNUIndex
+ * eocCNUWhiteListCNUIndex is subid 10 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.10
+ * Description:
+ CNUµÄÐòºÅË÷Òý
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable.c
new file mode 100644
index 0000000000..ff377cd6e8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable.c
@@ -0,0 +1,419 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocCNUWhiteListTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUWhiteListTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocCNUWhiteListTable_interface.h"
+
+
+#ifdef USING_SPC300_EOC_MIB_MODULE
+/* header for SPC300 table extension */
+# include "spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable.h"
+#endif
+
+oid eocCNUWhiteListTable_oid[] = { EOCCNUWHITELISTTABLE_OID };
+int eocCNUWhiteListTable_oid_size = OID_LENGTH(eocCNUWhiteListTable_oid);
+
+ eocCNUWhiteListTable_registration eocCNUWhiteListTable_user_context;
+
+void initialize_table_eocCNUWhiteListTable(void);
+void shutdown_table_eocCNUWhiteListTable(void);
+
+
+/* declarations of handles for scalars added to table */
+int
+handle_eocCNUWhiteListAmountLimitation (netsnmp_mib_handler * handler,
+ netsnmp_handler_registration
+ * reginfo,
+ netsnmp_agent_request_info
+ * reqinfo,
+ netsnmp_request_info * requests);
+
+int
+handle_eocCNUWhiteListRegisteredAmount (netsnmp_mib_handler * handler,
+ netsnmp_handler_registration
+ * reginfo,
+ netsnmp_agent_request_info
+ * reqinfo,
+ netsnmp_request_info * requests);
+
+
+/**
+ * Initializes the eocCNUWhiteListTable module
+ */
+void
+init_eocCNUWhiteListTable(void)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:",
+ "init_eocCNUWhiteListTable","called\n"));
+ static int eocCNUWhiteListTable_did_init = 0;
+ /*
+ * TODO:300:o: Perform eocCNUWhiteListTable one-time module initialization.
+ */
+ if (++eocCNUWhiteListTable_did_init != 1)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable:init_eocCNUWhiteListTable",
+ "ignoring duplicate call\n"));
+ return;
+ }
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocCNUWhiteListTable"))
+ initialize_table_eocCNUWhiteListTable ();
+ /*mark tmp,because old version whitelist have init */
+#if 0 //def USING_SPC300_EOC_MIB_MODULE
+ if (should_init ("spc300EoCSlaveWhiteListTable"))
+ initialize_table_spc300EoCSlaveWhiteListTable ();
+#endif
+
+} /* init_eocCNUWhiteListTable */
+
+/**
+ * Shut-down the eocCNUWhiteListTable module (agent is exiting)
+ */
+void
+shutdown_eocCNUWhiteListTable(void)
+{
+ if (should_init("eocCNUWhiteListTable"))
+ shutdown_table_eocCNUWhiteListTable();
+
+}
+
+/**
+ * Initialize the table eocCNUWhiteListTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocCNUWhiteListTable(void)
+{
+ eocCNUWhiteListTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:initialize_table_eocCNUWhiteListTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocCNUWhiteListTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocCNUWhiteListTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocCNUWhiteListTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocCNUWhiteListTable_initialize_interface(user_context, flags);
+
+ /*
+ * register scalar for eocCNUWhiteListAmountLimitation
+ */
+
+ static oid eocCNUWhiteListAmountLimitation_oid[] =
+ { EOCCNUWHITELISTAMOUNTLIMITATION_OID };
+
+ netsnmp_register_scalar (netsnmp_create_handler_registration
+ ("eocCNUWhiteListAmountLimitation",
+ handle_eocCNUWhiteListAmountLimitation,
+ eocCNUWhiteListAmountLimitation_oid,
+ OID_LENGTH
+ (eocCNUWhiteListAmountLimitation_oid),
+ HANDLER_CAN_RWRITE));
+
+
+ /*
+ * register scalar for eocCNUWhiteListRegisteredAmount
+ */
+
+ static oid eocCNUWhiteListRegisteredAmount_oid[] =
+ { EOCCNUWHITELISTREGISTEREDAMOUNT_OID };
+
+ netsnmp_register_scalar (netsnmp_create_handler_registration
+ ("eocCNUWhiteListRegisteredAmount",
+ handle_eocCNUWhiteListRegisteredAmount,
+ eocCNUWhiteListRegisteredAmount_oid,
+ OID_LENGTH
+ (eocCNUWhiteListRegisteredAmount_oid),
+ HANDLER_CAN_RONLY));
+
+
+
+
+} /* initialize_table_eocCNUWhiteListTable */
+
+/**
+ * Shutdown the table eocCNUWhiteListTable
+ */
+void
+shutdown_table_eocCNUWhiteListTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocCNUWhiteListTable_shutdown_interface(&eocCNUWhiteListTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocCNUWhiteListTable_rowreq_ctx_init(eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocCNUWhiteListTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocCNUWhiteListTable_rowreq_ctx_cleanup(eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocCNUWhiteListTable rowreq cleanup.
+ */
+ if (NULL != rowreq_ctx->data)
+ {
+ eocCNUWhiteListTable_release_data (rowreq_ctx->data);
+ rowreq_ctx->data = NULL;
+ }
+} /* eocCNUWhiteListTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocCNUWhiteListTable_pre_request(eocCNUWhiteListTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocCNUWhiteListTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocCNUWhiteListTable_post_request(eocCNUWhiteListTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocCNUWhiteListTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocCNUWhiteListTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocCNUWhiteListTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListTable_post_request */
+
+/* implementations of handles for scalars added to table */
+int
+handle_eocCNUWhiteListAmountLimitation (netsnmp_mib_handler * handler,
+ netsnmp_handler_registration
+ * reginfo,
+ netsnmp_agent_request_info
+ * reqinfo,
+ netsnmp_request_info * requests)
+{
+ int ret;
+ /* authorized amount limit is given as hard-coded value */
+ int amount_limit = WHITE_LIST_SLAVE_MAX_AUTH_NB;
+
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /*
+ * a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one.
+ */
+
+ switch (reqinfo->mode)
+ {
+
+ case MODE_GET:
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) & amount_limit,
+ sizeof (amount_limit));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ break;
+
+ case MODE_SET_RESERVE2:
+ break;
+
+
+
+
+ case MODE_SET_FREE:
+ break;
+
+ case MODE_SET_ACTION:
+ /* SET request is not supported */
+ netsnmp_set_request_error (reqinfo, requests, SNMP_ERR_NOTWRITABLE);
+ break;
+
+ case MODE_SET_COMMIT:
+ break;
+
+ case MODE_SET_UNDO:
+ break;
+
+
+ default:
+ /*
+ * we should never get here, so this is a really bad error
+ */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCNUWhiteListAmountLimitation\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocCNUWhiteListRegisteredAmount (netsnmp_mib_handler * handler,
+ netsnmp_handler_registration
+ * reginfo,
+ netsnmp_agent_request_info
+ * reqinfo,
+ netsnmp_request_info * requests)
+{
+ int reg_amount;
+
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /*
+ * a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one.
+ */
+
+ switch (reqinfo->mode)
+ {
+
+ case MODE_GET:
+ reg_amount = eocCNUWhiteListTable_RegisteredAmount_get ();
+ if (reg_amount < 0)
+ {
+ snmp_log (LOG_ERR, "error getting Registered Amount\n");
+ /* registered amount is set to -1 to permit walk requests */
+ reg_amount = -1;
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) & reg_amount,
+ sizeof (reg_amount));
+ break;
+
+
+ default:
+ /*
+ * we should never get here, so this is a really bad error
+ */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocCNUWhiteListRegisteredAmount\n",
+ reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable.h
new file mode 100644
index 0000000000..1168b41646
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable.h
@@ -0,0 +1,258 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUWHITELISTTABLE_H
+#define EOCCNUWHITELISTTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+/* other required module components */
+ /* *INDENT-OFF* */
+ /* *INDENT-ON* */
+
+/* OID and column number definitions for eocCNUWhiteListTable */
+#include "eocCNUWhiteListTable_oids.h"
+
+/* enum definions */
+#include "eocCNUWhiteListTable_enums.h"
+
+#ifdef USING_SPC300_EOC_MIB_MODULE
+/* includes for columns in SPC300 table extension */
+#include "spc300-eoc-mib/spc300EoCSlaveGroup/spc300EoCSlaveWhiteListTable/spc300EoCSlaveWhiteListTable_oids.h"
+#endif
+
+/* include common header */
+#include "EoCCommon.h"
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocCNUWhiteListTable(void);
+void shutdown_eocCNUWhiteListTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListTable is subid 6 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6, length: 12
+*/
+/* *********************************************************************
+ * 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 eocCNUWhiteListTable registration context.
+ */
+typedef netsnmp_data_list eocCNUWhiteListTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocCNUWhiteListTable data context structure.
+ * This structure is used to represent the data for eocCNUWhiteListTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocCNUWhiteListTable.
+ */
+typedef struct eocCNUWhiteListTable_data_s {
+ /* fields added to use for container iteration */
+ netsnmp_index oid_index; /* MUST BE FIRST!! for container use */
+ oid wl_index; /* arbitrary index */
+
+ /* field added for TEI written in white list file */
+ long eocCNUWhiteListTEI;
+ /*
+ * eocCNUWhiteListIPAddress(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/r/d/h
+ */
+ char eocCNUWhiteListIPAddress[4];
+size_t eocCNUWhiteListIPAddress_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCNUWhiteListMACAddress(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/r/d/h
+ */
+ char eocCNUWhiteListMACAddress[6];
+size_t eocCNUWhiteListMACAddress_len; /* # of char elements, not bytes */
+
+ /*
+ * eocCNUWhiteListAuthorization(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUWhiteListAuthorization;
+
+ /*
+ * eocCNUWhiteListRFOutputLevel(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUWhiteListRFOutputLevel;
+
+ /*
+ * eocCNUWhiteListAutoUpgradeEN(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUWhiteListAutoUpgradeEN;
+
+ /*
+ * eocCNUWhiteListRegisterOnlineStatus(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long eocCNUWhiteListRegisterOnlineStatus;
+
+ /*
+ * eocCNUWhiteListRowStatus(8)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocCNUWhiteListRowStatus;
+
+#ifdef USING_SPC300_EOC_MIB_MODULE
+ /* fields specific to SPC300EoC WL Table extension */
+ /*
+ * spc300EoCSlaveWhiteListDevicePassword(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ char spc300EoCSlaveWhiteListDevicePassword[64];
+ size_t spc300EoCSlaveWhiteListDevicePassword_len; /* # of char elements, not bytes */
+#endif /* USING_SPC300_EOC_MIB_MODULE */
+
+} eocCNUWhiteListTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocCNUWhiteListTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocCNUWhiteListTable_data eocCNUWhiteListTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocCNUWhiteListTable mib index.
+ * This structure is used to represent the index for eocCNUWhiteListTable.
+ */
+typedef struct eocCNUWhiteListTable_mib_index_s {
+
+ /*
+ * eocCNUWhiteListIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUWhiteListIndex;
+
+ /*
+ * eocCNUWhiteListCBATCardIndex(9)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocCNUWhiteListCBATCardIndex;
+
+ /*
+ * eocCNUWhiteListCNUIndex(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ long eocCNUWhiteListCNUIndex;
+
+
+} eocCNUWhiteListTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocCNUWhiteListTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocCNUWhiteListTable_IDX_LEN 3
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocCNUWhiteListTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocCNUWhiteListTable_rowreq_ctx pointer.
+ */
+typedef struct eocCNUWhiteListTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocCNUWhiteListTable_IDX_LEN];
+
+ eocCNUWhiteListTable_mib_index tbl_idx;
+
+ eocCNUWhiteListTable_data * data;
+ unsigned int column_exists_flags; /* flags for existence */
+ eocCNUWhiteListTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocCNUWhiteListTable rowreq context.
+ */
+
+ u_char undo_ref_count;
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocCNUWhiteListTable_data_list;
+
+} eocCNUWhiteListTable_rowreq_ctx;
+
+typedef struct eocCNUWhiteListTable_ref_rowreq_ctx_s {
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx;
+} eocCNUWhiteListTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocCNUWhiteListTable_pre_request(eocCNUWhiteListTable_registration * user_context);
+ int eocCNUWhiteListTable_post_request(eocCNUWhiteListTable_registration * user_context,
+ int rc);
+
+ int eocCNUWhiteListTable_rowreq_ctx_init(eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocCNUWhiteListTable_rowreq_ctx_cleanup(eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx);
+
+ int eocCNUWhiteListTable_check_dependencies(eocCNUWhiteListTable_rowreq_ctx * rowreq_ctx);
+ int eocCNUWhiteListTable_commit(eocCNUWhiteListTable_rowreq_ctx * rowreq_ctx);
+
+ eocCNUWhiteListTable_rowreq_ctx *
+ eocCNUWhiteListTable_row_find_by_mib_index(eocCNUWhiteListTable_mib_index *mib_idx);
+
+extern oid eocCNUWhiteListTable_oid[];
+extern int eocCNUWhiteListTable_oid_size;
+extern int eoc_adding_row;
+
+#include "eocCNUWhiteListTable_interface.h"
+#include "eocCNUWhiteListTable_data_access.h"
+#include "eocCNUWhiteListTable_data_get.h"
+#include "eocCNUWhiteListTable_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 /* EOCCNUWHITELISTTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_access.c
new file mode 100644
index 0000000000..1490fded78
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_access.c
@@ -0,0 +1,1002 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUWhiteListTable.h"
+
+
+#include "eocCNUWhiteListTable_data_access.h"
+
+/* indication of row being added to the table */
+int eoc_adding_row;
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListTable is subid 6 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6, length: 12
+*/
+
+/**
+ * initialization for eocCNUWhiteListTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocCNUWhiteListTable_reg
+ * Pointer to eocCNUWhiteListTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocCNUWhiteListTable_init_data(eocCNUWhiteListTable_registration * eocCNUWhiteListTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocCNUWhiteListTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocCNUWhiteListTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocCNUWhiteListTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocCNUWhiteListTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocCNUWhiteListTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCCNUWHITELISTTABLE_CACHE_TIMEOUT; /* seconds */
+
+ /* initialize row adding indication */
+ eoc_adding_row = 0;
+} /* eocCNUWhiteListTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocCNUWhiteListTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocCNUWhiteListTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocCNUWhiteListTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocCNUWhiteListTable_container_shutdown */
+
+static void
+_eoc_update_entry (eocCNUWhiteListTable_data * lhs,
+ eocCNUWhiteListTable_data * rhs)
+{
+ if (lhs->eocCNUWhiteListAuthorization !=
+ rhs->eocCNUWhiteListAuthorization)
+ {
+ lhs->eocCNUWhiteListAuthorization = rhs->eocCNUWhiteListAuthorization;
+ }
+
+ if (lhs->eocCNUWhiteListRFOutputLevel !=
+ rhs->eocCNUWhiteListRFOutputLevel)
+ {
+ lhs->eocCNUWhiteListRFOutputLevel = rhs->eocCNUWhiteListRFOutputLevel;
+ }
+
+
+ if (lhs->eocCNUWhiteListRegisterOnlineStatus !=
+ rhs->eocCNUWhiteListRegisterOnlineStatus)
+ {
+ lhs->eocCNUWhiteListRegisterOnlineStatus =
+ rhs->eocCNUWhiteListRegisterOnlineStatus;
+ }
+#ifdef USING_SPC300_EOC_MIB_MODULE
+ if (lhs->spc300EoCSlaveWhiteListDevicePassword_len !=
+ rhs->spc300EoCSlaveWhiteListDevicePassword_len)
+ {
+ lhs->spc300EoCSlaveWhiteListDevicePassword_len =
+ rhs->spc300EoCSlaveWhiteListDevicePassword_len;
+ memcpy (lhs->spc300EoCSlaveWhiteListDevicePassword,
+ rhs->spc300EoCSlaveWhiteListDevicePassword,
+ rhs->spc300EoCSlaveWhiteListDevicePassword_len);
+ }
+ else if (memcmp (lhs->spc300EoCSlaveWhiteListDevicePassword,
+ rhs->spc300EoCSlaveWhiteListDevicePassword,
+ rhs->spc300EoCSlaveWhiteListDevicePassword_len) != 0)
+ {
+ memcpy (lhs->spc300EoCSlaveWhiteListDevicePassword,
+ rhs->spc300EoCSlaveWhiteListDevicePassword,
+ rhs->spc300EoCSlaveWhiteListDevicePassword_len);
+ }
+#endif
+}
+
+static int
+_eoc_whitelist_container_load (netsnmp_container * container)
+{
+ eocCNUWhiteListTable_data *entry;
+ int rc = MFD_SUCCESS;
+
+
+
+
+ /* declarations for calls to libspid */
+ char key_buffer[LIBSPID_KEY_MAX_LEN] = {0};
+ const char online_delimiters[2] = LIBSPID_ONLINE_INFO_DELIMITER "\0";
+ char online_buffer[LIBSPID_LINE_MAX_LEN] = {0};
+ unsigned int online_elt_number = LIBSPID_ELT_MAX_NB;
+ char *online_elt_buffer[LIBSPID_ELT_MAX_NB] = {0};
+
+ char buffer[LIBSPID_LINE_MAX_LEN] = {0};
+
+
+ /* white list entries read from config file */
+ libspid_eoc_wl_entry_t wl_config_entries[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+
+
+ int mac_address_count;
+ int i, j;
+
+ int tmp;
+ int start_time_hr, start_time_min, end_time_hr, end_time_min;
+
+ char mac_str[LIBSPID_MAC_STR_LEN];
+ char ip_address[LIBSPID_IP_STR_MAX_LEN];
+
+ /* initial row status is set to active by default */
+ int init_row_status = ROWSTATUS_ACTIVE;
+
+ DEBUGMSGTL (("eocCNUWhiteListTable:access",
+ "_whitelist_container_load called \n"));
+
+ if (NULL == container)
+ {
+ snmp_log (LOG_ERR,
+ "no container specified/found for _whitelist_container_load\n");
+ return MFD_ERROR;
+ }
+
+ memset (wl_config_entries, 0x0, sizeof (wl_config_entries));
+
+ /* check errors in contents of white list prior to reading */
+ /* if errors are found, log message and set initial row
+ status to notInService for all entries */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in white list "
+ "configuration file, refer to syslog\n");
+ init_row_status = ROWSTATUS_NOTINSERVICE;
+ }
+
+ /* get current contents of white list config file */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_get_list (wl_config_entries,
+ &mac_address_count))
+ {
+ snmp_log (LOG_ERR, "White list config file not read correctly\n");
+ return MFD_ERROR;
+ }
+
+ if (0 == mac_address_count)
+ {
+ rc = MFD_END_OF_DATA;
+ }
+
+ for (i = 0; i < mac_address_count; i++)
+ {
+
+ /* call interface function for allocating white list data */
+ if (NULL == (entry = eocCNUWhiteListTable_allocate_data ()))
+ {
+ snmp_log (LOG_ERR, "whitelist entry allocation error\n");
+ return MFD_ERROR;
+ }
+
+ /* set row status to initial value */
+ entry->eocCNUWhiteListRowStatus = init_row_status;
+ /*convert IP address from string to char array */
+
+ if (LIBSPID_SUCCESS !=
+ libspid_ip_str_to_bin (wl_config_entries[i].ip_address,
+ entry->eocCNUWhiteListIPAddress))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_str_to_bin failed, "
+ "settingip address field to null\n");
+ entry->eocCNUWhiteListIPAddress[0] = '\0';
+ }
+ entry->eocCNUWhiteListIPAddress_len = 4;
+ /* convert MAC address from string to char array */
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_str_to_bin (wl_config_entries[i].mac_addr,
+ entry->eocCNUWhiteListMACAddress))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_str_to_bin failed,"
+ " setting MAC address field to null\n");
+ entry->eocCNUWhiteListMACAddress[0] = '\0';
+ }
+
+ entry->eocCNUWhiteListMACAddress_len = 6;
+
+ /* parse TEI from white list entry */
+ tmp = sscanf (wl_config_entries[i].tei, "%d",
+ &entry->eocCNUWhiteListTEI);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "parsing failed, "
+ "setting TEI field to invalid\n");
+ entry->eocCNUWhiteListTEI = INVALID_EOCCNUWHITELISTTEI;
+ }
+
+ /* parse authorization from white list entry */
+ tmp = sscanf (wl_config_entries[i].auth, "%d",
+ &entry->eocCNUWhiteListAuthorization);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "parsing failed, setting Authorization"
+ " field to invalid\n");
+ entry->eocCNUWhiteListAuthorization =
+ INVALID_EOCCNUWHITELISTAUTHORIZATION;
+ }
+
+ /* parse output level from white list entry */
+ tmp = sscanf (wl_config_entries[i].output_level, "%d",
+ &entry->eocCNUWhiteListRFOutputLevel);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "parsing failed, setting RF Output"
+ " field to invalid\n");
+ entry->eocCNUWhiteListRFOutputLevel =
+ INVALID_EOCCNUWHITELISTRFOUTPUTLEVEL;
+ }
+
+
+#ifdef USING_SPC300_EOC_MIB_MODULE
+ /* read data from SPC300 table */
+ if ((NULL == wl_config_entries[i].dpw)
+ || (!strcmp (wl_config_entries[i].dpw, "")))
+ {
+ snmp_log (LOG_ERR, "empty DPW field\n");
+ entry->spc300EoCSlaveWhiteListDevicePassword[0] = '\0';
+ }
+ else
+ {
+ strncpy (entry->spc300EoCSlaveWhiteListDevicePassword,
+ wl_config_entries[i].dpw, 64);
+ entry->spc300EoCSlaveWhiteListDevicePassword_len =
+ strlen (entry->spc300EoCSlaveWhiteListDevicePassword);
+
+ }
+#endif
+
+
+ /* convert MAC address from bin to string to be aligned
+ * with MAC address format of online information file */
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_bin_to_str (entry->eocCNUWhiteListMACAddress,
+ mac_str))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ if (ROWSTATUS_ACTIVE == entry->eocCNUWhiteListRowStatus)
+ {
+ /* for valid row, add MAC address string to internal
+ * storage list (if not already present in there) */
+ tmp = se_find_value_in_slist ("eoc_white_list", mac_str);
+ if (tmp == SE_DNE)
+ {
+ se_add_pair_to_slist ("eoc_white_list",
+ strdup (mac_str), i + 1);
+ }
+ }
+
+ /* convert ip address from bin to string */
+ if (LIBSPID_SUCCESS !=
+ libspid_ip_bin_to_str (entry->eocCNUWhiteListIPAddress,
+ ip_address))
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ if (ROWSTATUS_ACTIVE == entry->eocCNUWhiteListRowStatus)
+ {
+ /* for valid row, add MAC address string to internal
+ storage list (if not already present in there) */
+ if (strcmp (ip_address, LIBSPID_EOC_WL_IP_DEFAULT))
+ {
+ tmp = se_find_value_in_slist ("eoc_white_list_ip",
+ ip_address);
+ if (tmp == SE_DNE)
+ {
+ se_add_pair_to_slist ("eoc_white_list_ip",
+ strdup (ip_address), i + 1);
+ }
+ }
+ }
+
+ /* read line indexed by MAC address from online information file */
+ if (LIBSPID_SUCCESS ==
+ libspid_config_read_line (LIBSPID_ONLINE_INFO_PATH,
+ online_delimiters, mac_str,
+ &online_elt_number, online_elt_buffer,
+ online_buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ entry->eocCNUWhiteListRegisterOnlineStatus =
+ EOCCNUWHITELISTREGISTERONLINESTATUS_ONLINE;
+ }
+ else
+ {
+ entry->eocCNUWhiteListRegisterOnlineStatus =
+ EOCCNUWHITELISTREGISTERONLINESTATUS_OFFLINE;
+ }
+
+ /* read autoupdate setting from system configuration file */
+ if (LIBSPID_SUCCESS !=
+ libspid_config_read_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTOUPDATE,
+ buffer, LIBSPID_LINE_MAX_LEN))
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error",
+ " in reading autoupdate setting\n");
+ entry->eocCNUWhiteListAutoUpgradeEN =
+ EOCCNUWHITELISTAUTOUPGRADEEN_DISABLE;
+ }
+ else if (!strcmp (buffer, LIBSPID_SYSTEM_CONF_VALUE_YES))
+ {
+ entry->eocCNUWhiteListAutoUpgradeEN =
+ EOCCNUWHITELISTAUTOUPGRADEEN_ENABLE;
+ }
+ else
+ {
+ entry->eocCNUWhiteListAutoUpgradeEN =
+ EOCCNUWHITELISTAUTOUPGRADEEN_DISABLE;
+ }
+
+
+ /* set entry index for container comparison */
+ entry->wl_index = i + 1;
+
+
+ /*
+ * add entry to container
+ */
+ CONTAINER_INSERT (container, entry);
+ }
+
+ return rc;
+}
+
+/**
+ * check entry for update
+ */
+static void
+_eoc_check_entry_for_updates (eocCNUWhiteListTable_rowreq_ctx *
+ rowreq_ctx, void **magic)
+{
+ netsnmp_container *whitelist_container = magic[0];
+ netsnmp_container *to_delete = (netsnmp_container *) magic[1];
+
+ DEBUGMSGTL (("eocCNUWhiteListTable:access",
+ "checking entry for updates\n"));
+
+ netsnmp_assert (NULL != whitelist_container);
+ netsnmp_assert (NULL != rowreq_ctx);
+ netsnmp_assert (NULL != rowreq_ctx->data);
+ /*
+ * check for matching entries to be deleted
+ */
+ eocCNUWhiteListTable_data *whitelist_entry =
+ CONTAINER_FIND (whitelist_container, rowreq_ctx->data);
+ if (NULL == whitelist_entry)
+ {
+
+ if (NULL == to_delete)
+ {
+ magic[1] = to_delete = netsnmp_container_find ("lifo");
+ if (NULL == to_delete)
+ snmp_log (LOG_ERR, "couldn't create delete container\n");
+ }
+ if (NULL != to_delete)
+ CONTAINER_INSERT (to_delete, rowreq_ctx);
+ }
+ else
+ {
+
+ /* check for updates for editable columns from SARFT table */
+ _eoc_update_entry (rowreq_ctx->data, whitelist_entry);
+
+ /*
+ * remove entry from temporary whitelist container
+ */
+ CONTAINER_REMOVE (whitelist_container, whitelist_entry);
+ free (whitelist_entry);
+ }
+}
+
+/**
+ * add new entry
+ */
+static void
+_eoc_add_new_entry (eocCNUWhiteListTable_data * whitelist_entry,
+ netsnmp_container * container)
+{
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+
+
+ DEBUGMSGTL (("eocCNUWhiteListTable:access", "creating new entry\n"));
+
+ netsnmp_assert (NULL != whitelist_entry);
+ netsnmp_assert (NULL != container);
+
+ /*
+ * allocate an row context and set the index(es)
+ */
+ rowreq_ctx =
+ eocCNUWhiteListTable_allocate_rowreq_ctx (whitelist_entry, NULL);
+
+ if ((NULL != rowreq_ctx) &&
+ (MFD_SUCCESS == eocCNUWhiteListTable_indexes_set (rowreq_ctx,
+ whitelist_entry->
+ eocCNUWhiteListTEI -
+ 2, 0,
+ whitelist_entry->
+ eocCNUWhiteListTEI -
+ 2)))
+ {
+ if (CONTAINER_INSERT (container, rowreq_ctx) < 0)
+ {
+ snmp_log (LOG_ERR, "eocCNUWhiteListTable container "
+ "insert failed for new entry\n");
+ eocCNUWhiteListTable_release_rowreq_ctx (rowreq_ctx);
+ return;
+ }
+ ++count;
+ }
+ else
+ {
+ if (NULL != rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "error setting index while loading "
+ "eocCNUWhiteListTable cache.\n");
+ eocCNUWhiteListTable_release_rowreq_ctx (rowreq_ctx);
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "memory allocation failed while loading "
+ "eocCNUWhiteListTable cache.\n");
+ free (whitelist_entry);
+ }
+
+ return;
+ }
+ rowreq_ctx->data->eocCNUWhiteListRowStatus =
+ whitelist_entry->eocCNUWhiteListRowStatus;
+
+
+}
+
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocCNUWhiteListTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocCNUWhiteListTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocCNUWhiteListTable_container_load(netsnmp_container *container)
+{
+ int rc = MFD_SUCCESS;
+
+ netsnmp_container *whitelist_container;
+ void *tmp_ptr[2];
+
+
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_container_load", "called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocCNUWhiteListTable container.
+ * loop over your eocCNUWhiteListTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ /* create temporary container for fresh white list data */
+ whitelist_container =
+ netsnmp_container_find ("eoc_whitelist_temp:table_container");
+ if (NULL == whitelist_container)
+ {
+ snmp_log (LOG_ERR, "whitelist temp container not found\n");
+ return MFD_ERROR;
+ }
+
+ /* load fresh white list data into temp container */
+ rc = _eoc_whitelist_container_load (whitelist_container);
+ if (MFD_ERROR == rc)
+ {
+ snmp_log (LOG_ERR, "whitelist container load error\n");
+ return MFD_ERROR;
+ }
+
+ tmp_ptr[0] = whitelist_container;
+ tmp_ptr[1] = NULL;
+
+ /* check if eocCNUWhiteListTable container needs updates */
+ /* (this is not called if table container is empty) */
+ CONTAINER_FOR_EACH (container, (netsnmp_container_obj_func *)
+ _eoc_check_entry_for_updates, tmp_ptr);
+ /*
+ * add new entries to eocCNUWhiteListTable container
+ */
+ CONTAINER_FOR_EACH (whitelist_container,
+ (netsnmp_container_obj_func *) _eoc_add_new_entry,
+ container);
+
+ /*
+ * free temporary container. we've either claimed each entry,
+ * or released it,
+ * so we don't need to call CONTAINER_CLEAR to clear the container.
+ */
+ CONTAINER_FREE (whitelist_container);
+
+ /*
+ * remove deleted items from eocCNUWhiteListTable container
+ */
+ if (NULL != tmp_ptr[1])
+ {
+ netsnmp_container *tmp_container = (netsnmp_container *) tmp_ptr[1];
+ eocCNUWhiteListTable_rowreq_ctx *tmp_ctx;
+
+ /*
+ * this works because the tmp_container is a linked list,
+ * which can be used like a stack...
+ */
+ while (CONTAINER_SIZE (tmp_container))
+ {
+ /*
+ * get from delete list
+ */
+ tmp_ctx = CONTAINER_FIRST (tmp_container);
+
+ /*
+ * release context, delete from table container
+ */
+ CONTAINER_REMOVE (container, tmp_ctx);
+ eocCNUWhiteListTable_release_rowreq_ctx (tmp_ctx);
+
+ /*
+ * pop off delete list
+ */
+ CONTAINER_REMOVE (tmp_container, NULL);
+ }
+ }
+
+
+
+ DEBUGMSGT (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_container_load",
+ "inserted %d records\n", CONTAINER_SIZE (container)));
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocCNUWhiteListTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocCNUWhiteListTable container data.
+ */
+} /* eocCNUWhiteListTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocCNUWhiteListTable_row_prep( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListTable_row_prep */
+
+/*
+ * TODO:420:r: Implement eocCNUWhiteListTable index validation.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListIndex
+ * eocCNUWhiteListIndex is subid 1 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.1
+ * Description:
+CNU����������������
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * check validity of eocCNUWhiteListIndex index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * eocCNUWhiteListTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+eocCNUWhiteListIndex_check_index( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx )
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListIndex_check_index","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check eocCNUWhiteListTable index eocCNUWhiteListIndex.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.eocCNUWhiteListIndex)
+ */
+ if ((rowreq_ctx->tbl_idx.eocCNUWhiteListIndex <
+ LIBSPID_EOC_WL_TEI_MIN - 2)
+ || (rowreq_ctx->tbl_idx.eocCNUWhiteListIndex >
+ LIBSPID_EOC_WL_TEI_MAX - 2))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+ return MFD_SUCCESS; /* eocCNUWhiteListIndex index ok */
+} /* eocCNUWhiteListIndex_check_index */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListCBATCardIndex
+ * eocCNUWhiteListCBATCardIndex is subid 9 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.9
+ * Description:
+ CBAT�忨����������
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * check validity of eocCNUWhiteListCBATCardIndex index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * eocCNUWhiteListTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+eocCNUWhiteListCBATCardIndex_check_index( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx )
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListCBATCardIndex_check_index","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check eocCNUWhiteListTable index eocCNUWhiteListCBATCardIndex.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.eocCNUWhiteListCBATCardIndex)
+ */
+
+ return MFD_SUCCESS; /* eocCNUWhiteListCBATCardIndex index ok */
+} /* eocCNUWhiteListCBATCardIndex_check_index */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListCNUIndex
+ * eocCNUWhiteListCNUIndex is subid 10 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.10
+ * Description:
+ CNU����������
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * check validity of eocCNUWhiteListCNUIndex index portion
+ *
+ * @retval MFD_SUCCESS : the incoming value is legal
+ * @retval MFD_ERROR : the incoming value is NOT legal
+ *
+ * @note this is not the place to do any checks for the sanity
+ * of multiple indexes. Those types of checks should be done in the
+ * eocCNUWhiteListTable_validate_index() function.
+ *
+ * @note Also keep in mind that if the index refers to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ * The following checks have already been done for you:
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ */
+int
+eocCNUWhiteListCNUIndex_check_index( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx )
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListCNUIndex_check_index","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:426:M: |-> Check eocCNUWhiteListTable index eocCNUWhiteListCNUIndex.
+ * check that index value in the table context is legal.
+ * (rowreq_ctx->tbl_index.eocCNUWhiteListCNUIndex)
+ */
+
+ return MFD_SUCCESS; /* eocCNUWhiteListCNUIndex index ok */
+} /* eocCNUWhiteListCNUIndex_check_index */
+
+/**
+ * verify specified index is valid.
+ *
+ * This check is independent of whether or not the values specified for
+ * the columns of the new row are valid. Column values and row consistency
+ * will be checked later. At this point, only the index values should be
+ * checked.
+ *
+ * All of the individual index validation functions have been called, so this
+ * is the place to make sure they are valid as a whole when combined. If
+ * you only have one index, then you probably don't need to do anything else
+ * here.
+ *
+ * @note Keep in mind that if the indexes refer to a row in this or
+ * some other table, you can't check for that row here to make
+ * decisions, since that row might not be created yet, but may
+ * be created during the processing this request. If you have
+ * such checks, they should be done in the check_dependencies
+ * function, because any new/deleted/changed rows should be
+ * available then.
+ *
+ *
+ * @param eocCNUWhiteListTable_reg
+ * Pointer to the user registration data
+ * @param eocCNUWhiteListTable_rowreq_ctx
+ * Pointer to the users context.
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_CANNOT_CREATE_NOW : index not valid right now
+ * @retval MFD_CANNOT_CREATE_EVER : index never valid
+ */
+int
+eocCNUWhiteListTable_validate_index( eocCNUWhiteListTable_registration * eocCNUWhiteListTable_reg,
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_validate_index","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:430:M: |-> Validate potential eocCNUWhiteListTable index.
+ */
+ if(0)
+ {
+ snmp_log (LOG_WARNING, "invalid index for a new row in the "
+ "eocCNUWhiteListTable table.\n");
+ /*
+ * determine failure type.
+ *
+ * If the index could not ever be created, return MFD_NOT_EVER
+ * If the index can not be created under the present circumstances
+ * (even though it could be created under other circumstances),
+ * return MFD_NOT_NOW.
+ */
+ if (0)
+ {
+ return MFD_CANNOT_CREATE_EVER;
+ }
+ else
+ {
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ }
+ else
+ {
+ rowreq_ctx->data->eocCNUWhiteListTEI =
+ rowreq_ctx->tbl_idx.eocCNUWhiteListIndex + 2;
+ }
+
+ return rc;
+} /* eocCNUWhiteListTable_validate_index */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_access.h
new file mode 100644
index 0000000000..460b127990
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_access.h
@@ -0,0 +1,76 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUWHITELISTTABLE_DATA_ACCESS_H
+#define EOCCNUWHITELISTTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* definitions for invalid input value markers */
+#define INVALID_EOCCNUWHITELISTTEI 0
+#define INVALID_EOCCNUWHITELISTAUTHORIZATION 2
+#define INVALID_EOCCNUWHITELISTRFOUTPUTLEVEL (-1)
+#define INVALID_EOCCNUWHITELISTAUTOUPGRADEEN 2
+#define INVALID_EOCCNUWHITELISTSTARTTIME 1
+#define INVALID_EOCCNUWHITELISTENDTIME 1
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListTable is subid 6 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6, length: 12
+*/
+
+
+ int eocCNUWhiteListTable_init_data(eocCNUWhiteListTable_registration * eocCNUWhiteListTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocCNUWhiteListTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCCNUWHITELISTTABLE_CACHE_TIMEOUT 60
+
+void eocCNUWhiteListTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocCNUWhiteListTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocCNUWhiteListTable_container_load(netsnmp_container *container);
+void eocCNUWhiteListTable_container_free(netsnmp_container *container);
+
+int eocCNUWhiteListTable_cache_load(netsnmp_container *container);
+void eocCNUWhiteListTable_cache_free(netsnmp_container *container);
+
+ int eocCNUWhiteListTable_row_prep( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx);
+
+int eocCNUWhiteListTable_validate_index( eocCNUWhiteListTable_registration * eocCNUWhiteListTable_reg,
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx);
+int eocCNUWhiteListIndex_check_index( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx ); /* internal */
+int eocCNUWhiteListCBATCardIndex_check_index( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx ); /* internal */
+int eocCNUWhiteListCNUIndex_check_index( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx ); /* internal */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUWHITELISTTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_get.c
new file mode 100644
index 0000000000..ad64390393
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_get.c
@@ -0,0 +1,592 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUWhiteListTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocCNUWhiteListTable get routines.
+ * TODO:240:M: Implement eocCNUWhiteListTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListTable is subid 6 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6, length: 12
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocCNUWhiteListTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocCNUWhiteListIndex_val
+ * @param eocCNUWhiteListCBATCardIndex_val
+ * @param eocCNUWhiteListCNUIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocCNUWhiteListTable_indexes_set_tbl_idx(eocCNUWhiteListTable_mib_index *tbl_idx, long eocCNUWhiteListIndex_val, long eocCNUWhiteListCBATCardIndex_val, long eocCNUWhiteListCNUIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocCNUWhiteListIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCNUWhiteListIndex = eocCNUWhiteListIndex_val;
+
+ /* eocCNUWhiteListCBATCardIndex(9)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocCNUWhiteListCBATCardIndex = eocCNUWhiteListCBATCardIndex_val;
+
+ /* eocCNUWhiteListCNUIndex(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ tbl_idx->eocCNUWhiteListCNUIndex = eocCNUWhiteListCNUIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocCNUWhiteListTable_indexes_set(eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListIndex_val, long eocCNUWhiteListCBATCardIndex_val, long eocCNUWhiteListCNUIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocCNUWhiteListTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocCNUWhiteListIndex_val
+ , eocCNUWhiteListCBATCardIndex_val
+ , eocCNUWhiteListCNUIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocCNUWhiteListTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListIPAddress
+ * eocCNUWhiteListIPAddress is subid 2 of eocCNUWhiteListEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.2
+ * Description:
+CNUµÄIPµØÖ·¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length.
+ */
+/**
+ * Extract the current value of the eocCNUWhiteListIPAddress data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListIPAddress_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCNUWhiteListIPAddress_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCNUWhiteListIPAddress.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCNUWhiteListIPAddress_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCNUWhiteListIPAddress_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCNUWhiteListIPAddress_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, char **eocCNUWhiteListIPAddress_val_ptr_ptr, size_t *eocCNUWhiteListIPAddress_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCNUWhiteListIPAddress_val_ptr_ptr) && (NULL != *eocCNUWhiteListIPAddress_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCNUWhiteListIPAddress_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListIPAddress_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUWhiteListIPAddress data.
+ * copy (* eocCNUWhiteListIPAddress_val_ptr_ptr ) data and (* eocCNUWhiteListIPAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCNUWhiteListIPAddress data
+ */
+ if ((NULL == (* eocCNUWhiteListIPAddress_val_ptr_ptr )) ||
+ ((* eocCNUWhiteListIPAddress_val_ptr_len_ptr ) <
+ (rowreq_ctx->data->eocCNUWhiteListIPAddress_len* sizeof(rowreq_ctx->data->eocCNUWhiteListIPAddress[0])))) {
+ /*
+ * allocate space for eocCNUWhiteListIPAddress data
+ */
+ (* eocCNUWhiteListIPAddress_val_ptr_ptr ) = malloc(rowreq_ctx->data->eocCNUWhiteListIPAddress_len* sizeof(rowreq_ctx->data->eocCNUWhiteListIPAddress[0]));
+ if(NULL == (* eocCNUWhiteListIPAddress_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCNUWhiteListIPAddress_val_ptr_len_ptr ) = rowreq_ctx->data->eocCNUWhiteListIPAddress_len* sizeof(rowreq_ctx->data->eocCNUWhiteListIPAddress[0]);
+ memcpy( (* eocCNUWhiteListIPAddress_val_ptr_ptr ), rowreq_ctx->data->eocCNUWhiteListIPAddress, rowreq_ctx->data->eocCNUWhiteListIPAddress_len* sizeof(rowreq_ctx->data->eocCNUWhiteListIPAddress[0]) );
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListIPAddress_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListMACAddress
+ * eocCNUWhiteListMACAddress is subid 3 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.3
+ * Description:
+CNUµÄMACµØÖ·¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length.
+ */
+/**
+ * Extract the current value of the eocCNUWhiteListMACAddress data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListMACAddress_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocCNUWhiteListMACAddress_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocCNUWhiteListMACAddress.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocCNUWhiteListMACAddress_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocCNUWhiteListMACAddress_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocCNUWhiteListMACAddress_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, char **eocCNUWhiteListMACAddress_val_ptr_ptr, size_t *eocCNUWhiteListMACAddress_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocCNUWhiteListMACAddress_val_ptr_ptr) && (NULL != *eocCNUWhiteListMACAddress_val_ptr_ptr));
+ netsnmp_assert( NULL != eocCNUWhiteListMACAddress_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListMACAddress_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUWhiteListMACAddress data.
+ * copy (* eocCNUWhiteListMACAddress_val_ptr_ptr ) data and (* eocCNUWhiteListMACAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocCNUWhiteListMACAddress data
+ */
+ if ((NULL == (* eocCNUWhiteListMACAddress_val_ptr_ptr )) ||
+ ((* eocCNUWhiteListMACAddress_val_ptr_len_ptr ) <
+ (rowreq_ctx->data->eocCNUWhiteListMACAddress_len* sizeof(rowreq_ctx->data->eocCNUWhiteListMACAddress[0])))) {
+ /*
+ * allocate space for eocCNUWhiteListMACAddress data
+ */
+ (* eocCNUWhiteListMACAddress_val_ptr_ptr ) = malloc(rowreq_ctx->data->eocCNUWhiteListMACAddress_len* sizeof(rowreq_ctx->data->eocCNUWhiteListMACAddress[0]));
+ if(NULL == (* eocCNUWhiteListMACAddress_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocCNUWhiteListMACAddress_val_ptr_len_ptr ) = rowreq_ctx->data->eocCNUWhiteListMACAddress_len* sizeof(rowreq_ctx->data->eocCNUWhiteListMACAddress[0]);
+ memcpy( (* eocCNUWhiteListMACAddress_val_ptr_ptr ), rowreq_ctx->data->eocCNUWhiteListMACAddress, rowreq_ctx->data->eocCNUWhiteListMACAddress_len* sizeof(rowreq_ctx->data->eocCNUWhiteListMACAddress[0]) );
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListMACAddress_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListAuthorization
+ * eocCNUWhiteListAuthorization is subid 4 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.4
+ * Description:
+CNUÊÚȨ״̬¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: not_authorized(0), authorized(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUWhiteListAuthorization data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListAuthorization_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUWhiteListAuthorization_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUWhiteListAuthorization_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUWhiteListAuthorization_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListAuthorization_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUWhiteListAuthorization data.
+ * copy (* eocCNUWhiteListAuthorization_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUWhiteListAuthorization_val_ptr ) = rowreq_ctx->data->eocCNUWhiteListAuthorization;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListAuthorization_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListRFOutputLevel
+ * eocCNUWhiteListRFOutputLevel is subid 5 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.5
+ * Description:
+CNUÊä³öµçƽ£¬µ¥Î»dBuV
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocCNUWhiteListRFOutputLevel data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListRFOutputLevel_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUWhiteListRFOutputLevel_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListRFOutputLevel_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUWhiteListRFOutputLevel_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListRFOutputLevel_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUWhiteListRFOutputLevel data.
+ * copy (* eocCNUWhiteListRFOutputLevel_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUWhiteListRFOutputLevel_val_ptr ) = rowreq_ctx->data->eocCNUWhiteListRFOutputLevel;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListRFOutputLevel_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListAutoUpgradeEN
+ * eocCNUWhiteListAutoUpgradeEN is subid 6 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.6
+ * Description:
+CNU×Ô¶¯Éý¼¶Ê¹ÄÜ£¬0±íʾ½ûÖ¹£¬1±íʾʹÄÜ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUWhiteListAutoUpgradeEN data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListAutoUpgradeEN_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUWhiteListAutoUpgradeEN_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUWhiteListAutoUpgradeEN_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUWhiteListAutoUpgradeEN_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListAutoUpgradeEN_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUWhiteListAutoUpgradeEN data.
+ * copy (* eocCNUWhiteListAutoUpgradeEN_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUWhiteListAutoUpgradeEN_val_ptr ) = rowreq_ctx->data->eocCNUWhiteListAutoUpgradeEN;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListAutoUpgradeEN_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListRegisterOnlineStatus
+ * eocCNUWhiteListRegisterOnlineStatus is subid 7 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.7
+ * Description:
+CNUÔÚÏß״̬£º
+ 0- ²»ÔÚÏߣ»
+ 1- ÔÚÏß¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: offline(0), online(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUWhiteListRegisterOnlineStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListRegisterOnlineStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUWhiteListRegisterOnlineStatus_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUWhiteListRegisterOnlineStatus_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUWhiteListRegisterOnlineStatus_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListRegisterOnlineStatus_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocCNUWhiteListRegisterOnlineStatus data.
+ * copy (* eocCNUWhiteListRegisterOnlineStatus_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocCNUWhiteListRegisterOnlineStatus_val_ptr ) = rowreq_ctx->data->eocCNUWhiteListRegisterOnlineStatus;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListRegisterOnlineStatus_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListRowStatus
+ * eocCNUWhiteListRowStatus is subid 8 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.8
+ * Description:
+ÐÐ״̬£¬ÓÃÓÚ´´½¨¡¢Ð޸ġ¢É¾³ýijһÐУº
+ none_existent(0)- ±íÏî²»´æÔÚ£»
+ avtive(1)- ¼¤»î¸ÃÐУ»
+ notInService(2)- ״̬δ¼¤»î£»
+ notReady(3)- ²»Äܱ»¼¤»î״̬£»
+ createAndGo(4)- ´´½¨²¢¼¤»î£»
+ createAndWait(5)- ´´½¨£¬µ«²»¼¤»î£»
+ destory(6)- Ïú»Ù¸ÃÐС£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocCNUWhiteListRowStatus data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListRowStatus_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocCNUWhiteListRowStatus_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUWhiteListRowStatus_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocCNUWhiteListRowStatus_val_ptr );
+
+ (* eocCNUWhiteListRowStatus_val_ptr ) = rowreq_ctx->data->eocCNUWhiteListRowStatus;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListRowStatus_get */
+
+
+
+/** @} */
+/* callback function for counting number of authorized stations */
+static void
+_mod_eoc_count_registered (eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx,
+ int *count)
+{
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != count);
+
+
+ if ( 1 == rowreq_ctx->data->eocCNUWhiteListAuthorization){
+ (*count)++;
+ }
+}
+
+int
+eocCNUWhiteListTable_RegisteredAmount_get (void)
+{
+ netsnmp_container * whitelist_container;
+ int rc;
+ int reg_amount = 0;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_RegisteredAmount_get", "called!\n"));
+
+ whitelist_container =
+ netsnmp_container_find("eocCNUWhiteListTable:table_container");
+ if (NULL == whitelist_container)
+ {
+ snmp_log (LOG_ERR, "whitelist temp container not found\n");
+ return -1;
+ }
+
+ rc = eocCNUWhiteListTable_container_load (whitelist_container);
+ if (MFD_ERROR == rc)
+ {
+ snmp_log (LOG_ERR, "whitelist container load error\n");
+ return -1;
+ }
+
+
+ CONTAINER_FOR_EACH (whitelist_container, (netsnmp_container_obj_func *)
+ _mod_eoc_count_registered, &reg_amount);
+
+
+ return reg_amount;
+}
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_get.h
new file mode 100644
index 0000000000..d8c630414d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_get.h
@@ -0,0 +1,67 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocCNUWhiteListTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCCNUWHITELISTTABLE_DATA_GET_H
+#define EOCCNUWHITELISTTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListTable is subid 6 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6, length: 12
+*/
+ /*
+ * indexes
+ */
+
+ int eocCNUWhiteListIPAddress_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, char **eocCNUWhiteListIPAddress_val_ptr_ptr, size_t *eocCNUWhiteListIPAddress_val_ptr_len_ptr );
+ int eocCNUWhiteListMACAddress_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, char **eocCNUWhiteListMACAddress_val_ptr_ptr, size_t *eocCNUWhiteListMACAddress_val_ptr_len_ptr );
+ int eocCNUWhiteListAuthorization_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUWhiteListAuthorization_val_ptr );
+ int eocCNUWhiteListRFOutputLevel_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, long * eocCNUWhiteListRFOutputLevel_val_ptr );
+ int eocCNUWhiteListAutoUpgradeEN_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUWhiteListAutoUpgradeEN_val_ptr );
+ int eocCNUWhiteListRegisterOnlineStatus_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUWhiteListRegisterOnlineStatus_val_ptr );
+ int eocCNUWhiteListRowStatus_get( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long * eocCNUWhiteListRowStatus_val_ptr );
+
+
+int eocCNUWhiteListTable_indexes_set_tbl_idx(eocCNUWhiteListTable_mib_index *tbl_idx, long eocCNUWhiteListIndex_val, long eocCNUWhiteListCBATCardIndex_val, long eocCNUWhiteListCNUIndex_val);
+int eocCNUWhiteListTable_indexes_set(eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListIndex_val, long eocCNUWhiteListCBATCardIndex_val, long eocCNUWhiteListCNUIndex_val);
+
+/* declaration for getting value of scalar added to table */
+int
+eocCNUWhiteListTable_RegisteredAmount_get (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUWHITELISTTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_set.c
new file mode 100644
index 0000000000..9805cf456a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_set.c
@@ -0,0 +1,3173 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUWhiteListTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListTable is subid 6 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6, length: 12
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +-------------+ +==============+
+ * | row |f|<-------|| object ||
+ * | create |1| E || lookup ||
+ * +-------------+ +==============+
+ * E | | S | S
+ * | +------------------>|
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * |
+ * (err && f1)------------------->+
+ * | |
+ * +--------------+ +--------------+
+ * | post |<--------| row |
+ * | request | U | release |
+ * +--------------+ +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocCNUWhiteListTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocCNUWhiteListTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUWhiteListTable_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocCNUWhiteListTable undo.
+ * set up eocCNUWhiteListTable undo information, in preparation for a set.
+ * Undo storage is in (* eocCNUWhiteListRowStatus_val_ptr )*
+ */
+ /* copy data context to undo context */
+ memcpy (rowreq_ctx->undo, rowreq_ctx->data,
+ sizeof (eocCNUWhiteListTable_data));
+
+ return rc;
+} /* eocCNUWhiteListTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocCNUWhiteListTable_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocCNUWhiteListTable undo.
+ * eocCNUWhiteListTable undo information, in response to a failed set.
+ * Undo storage is in (* eocCNUWhiteListRowStatus_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUWhiteListTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUWhiteListTable_undo_cleanup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocCNUWhiteListTable undo.
+ * Undo storage is in (* eocCNUWhiteListRowStatus_val_ptr )*
+ */
+
+ return rc;
+} /* eocCNUWhiteListTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUWhiteListTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUWhiteListTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUWhiteListTable_commit( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+ /* declarations for calls to libspid */
+ char key_buffer[LIBSPID_KEY_MAX_LEN];
+ int ret;
+ int tmp;
+ char *placeholder = SPC300_NETWORK_DEFAULT_PASSWORD;
+ int start_time_hr=0, start_time_min=0, end_time_hr=22, end_time_min=0;
+
+ libspid_eoc_wl_entry_t wl_entry;
+
+ const char online_delimiters[2] = LIBSPID_ONLINE_INFO_DELIMITER "\0";
+ char online_buffer[LIBSPID_LINE_MAX_LEN] = {0};
+ unsigned int online_elt_number = LIBSPID_ELT_MAX_NB;
+ char *online_elt_buffer[LIBSPID_ELT_MAX_NB] = {0};
+
+ int i;
+
+ char mac_str_old[LIBSPID_MAC_STR_LEN];
+ char ip_address_old[LIBSPID_IP_STR_MAX_LEN];
+ char ip_address[LIBSPID_IP_STR_MAX_LEN];
+
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_commit",
+ "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /* initialize white list entry */
+ memset (&wl_entry, 0, sizeof (wl_entry));
+
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocCNUWhiteListTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+
+ /*
+ * did anything change?
+ */
+ if (0 == save_flags)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable:eocCNUWhiteListTable_commit",
+ "no change\n"));
+ return MFD_SUCCESS;
+ }
+ if (save_flags & COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG)
+ {
+ /* clear eocCNUWhiteListIPAddress */
+ save_flags &= ~COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG;
+
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG;
+ }
+ else
+ {
+ /*
+ * set flag, in case we need to undo eocCNUWhiteListIPAddress
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG;
+ }
+
+
+ if (save_flags & COLUMN_EOCCNUWHITELISTMACADDRESS_FLAG)
+ { /* clear eocCNUWhiteListMACAddress */
+ save_flags &= ~COLUMN_EOCCNUWHITELISTMACADDRESS_FLAG;
+ /*
+ * set flag, in case we need to undo eocCNUWhiteListMACAddress
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTMACADDRESS_FLAG;
+ }
+ else
+ {
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_commit",
+ "MAC address not set!\n"));
+ }
+
+ if (save_flags & COLUMN_EOCCNUWHITELISTAUTHORIZATION_FLAG)
+ { /* clear eocCNUWhiteListAuthorization */
+ save_flags &= ~COLUMN_EOCCNUWHITELISTAUTHORIZATION_FLAG;
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCNUWHITELISTAUTHORIZATION_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL_FLAG)
+ { /* clear eocCNUWhiteListRFOutputLevel */
+ save_flags &= ~COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL_FLAG;
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN_FLAG)
+ { /* clear eocCNUWhiteListAutoUpgradeEN */
+ save_flags &= ~COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN_FLAG;
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG)
+ { /* clear eocCNUWhiteListRowStatus */
+ save_flags &= ~COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG;
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG;
+ }
+
+
+ /* handle row addition or deletion (similarly as in ipAddressTable) */
+ /*
+ * pass everything to data access
+ * let data access know what columns are set
+ */
+
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG)
+ {
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ {
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:eocCNUWhiteList",
+ "Table_commit", "new row created!\n"));
+ }
+ else if (ROWSTATUS_DESTROY ==
+ rowreq_ctx->data->eocCNUWhiteListRowStatus)
+ {
+ /* check if deleting unvalidated row */
+ /*
+ * a row can be unvalidated either before
+ * being added to configuration file,
+ * or to mark invalid line in configuration file
+ */
+ if ((rowreq_ctx->undo->eocCNUWhiteListRowStatus &
+ ROWSTATUS_NOTINSERVICE))
+ {
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:eocCNUWhiteList",
+ "Table_commit", "deleting unvalidated row!\n"));
+ /* convert MAC address from bin to string to serve as
+ * key for possible removing of invalid line */
+ ret =
+ libspid_mac_bin_to_str (rowreq_ctx->data->
+ eocCNUWhiteListMACAddress,
+ key_buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+ /* remove line with given index from white list
+ configuration file, if existing */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_remove (key_buffer))
+ {
+ snmp_log (LOG_ERR,
+ "unvalidated row not in configuration file\n");
+ }
+
+ return MFD_SUCCESS;
+ }
+
+ if ((rowreq_ctx->undo->
+ eocCNUWhiteListRowStatus & ROWSTATUS_NOTINSERVICE))
+ {
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:eocCNUWhiteList",
+ "Table_commit", "deleting unvalidated row!\n"));
+ return MFD_SUCCESS;
+ }
+
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit",
+ "MAC address to be deleted: %x %x %x %x %x %x \n",
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[0],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[1],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[2],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[3],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[4],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[5]));
+
+
+ /* convert MAC address from bin to string to serve
+ as key for removing line */
+ ret =
+ libspid_mac_bin_to_str (rowreq_ctx->data->
+ eocCNUWhiteListMACAddress,
+ key_buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ /* remove MAC address from internal storage list */
+ if (NULL != se_find_slist ("eoc_white_list"))
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit:",
+ "trying to remove MAC address from slist: %s\n",
+ key_buffer));
+ ret = se_remove_label_from_slist ("eoc_white_list",
+ key_buffer);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR,
+ "Error! MAC address not found in the table!\n");
+ return MFD_ERROR;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR,
+ "Trying to delete from empty MAC address list!\n");
+ return MFD_ERROR;
+ }
+
+ /* convert IP address from bin to string to serve
+ as key for removing line */
+ ret =
+ libspid_ip_bin_to_str (rowreq_ctx->data->
+ eocCNUWhiteListIPAddress, ip_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ /* remove ip address from internal storage list */
+ if (strcmp (ip_address, LIBSPID_EOC_WL_IP_DEFAULT))
+ {
+ if (NULL != se_find_slist ("eoc_white_list_ip"))
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit:",
+ "trying to remove IP address from slist: %s\n",
+ ip_address));
+
+ ret = se_remove_label_from_slist ("eoc_white_list_ip",
+ ip_address);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR, "Error!"
+ " IP address not found in the table!\n");
+ return MFD_ERROR;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR,
+ "Trying to delete from empty IP address list!\n");
+ return MFD_ERROR;
+ }
+ }
+
+
+
+ /* check configuration files before attempting
+ * synchronization of white list and ports */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in whitelist"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in port"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_storm_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in storm"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_maclimit_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in maclimitation"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_vlan_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in vlan port table"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_ethernet_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in ethernet port table"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+ /* remove line indexed by MAC address from white
+ list configuration file */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_remove (key_buffer))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_remove error\n");
+ return MFD_ERROR;
+ }
+
+ /* propagate white list changes */
+ ret = libspid_eoc_wl_sync ();
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_sync succeeded\n");
+ }
+
+ /* propagate associated port changes */
+ ret = libspid_eoc_port_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync succeeded\n");
+ }
+
+ }
+ else if (ROWSTATUS_ACTIVE ==
+ rowreq_ctx->data->eocCNUWhiteListRowStatus)
+ {
+ /* this case covers modifying row status
+ to active - i.e. validating the row */
+ /*
+ * row can be either newly added from the agent, or having row
+ * status notInService to mark invalid
+ * line in configuration file
+ */
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_commit", "validating row\n"));
+
+ /* convert MAC address from bin to string
+ to serve as key for row */
+ ret =
+ libspid_mac_bin_to_str (rowreq_ctx->data->
+ eocCNUWhiteListMACAddress,
+ key_buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ /* copy MAC address to white list entry */
+ strcpy (wl_entry.mac_addr, key_buffer);
+
+ /* convert ip address from bin to string
+ to ip address to white list entry */
+ ret =
+ libspid_ip_bin_to_str (rowreq_ctx->data->
+ eocCNUWhiteListIPAddress,
+ wl_entry.ip_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+
+
+ /* copy TEI to white list entry */
+ sprintf (wl_entry.tei, "%ld",
+ rowreq_ctx->data->eocCNUWhiteListTEI);
+
+ /* copy authorization to white list entry */
+ sprintf (wl_entry.auth, "%ld",
+ rowreq_ctx->data->eocCNUWhiteListAuthorization);
+
+ /* copy output level to white list entry */
+ sprintf (wl_entry.output_level, "%ld",
+ rowreq_ctx->data->eocCNUWhiteListRFOutputLevel);
+
+ /* convert start time to HH:MM format */
+
+ /* copy start time to white list entry */
+ sprintf (wl_entry.start_time, "%02d:%02d",
+ start_time_hr, start_time_min);
+
+ /* convert end time to HH:MM format */
+
+
+ /* copy end time to white list entry */
+ sprintf (wl_entry.end_time, "%02d:%02d",
+ end_time_hr, end_time_min);
+#ifdef USING_SPC300_EOC_MIB_MODULE
+
+ /* if validating new row, copy placeholder string to white list
+ fields not covered in SARFT MIB, otherwise copy table entry */
+ if (1 == eoc_adding_row)
+ strcpy (wl_entry.dpw, placeholder);
+ else
+ {
+ /* copy DPW to white list entry */
+ strncpy (wl_entry.dpw,
+ rowreq_ctx->data->
+ spc300EoCSlaveWhiteListDevicePassword,
+ rowreq_ctx->data->
+ spc300EoCSlaveWhiteListDevicePassword_len);
+ /* add terminal 0 to DPW in white list entry */
+ wl_entry.dpw[rowreq_ctx->data->
+ spc300EoCSlaveWhiteListDevicePassword_len] =
+ '\0';
+ }
+#endif
+
+ /* add MAC address of validated row to internal storage list */
+ tmp = se_find_free_value_in_slist ("eoc_white_list");
+ if (tmp == SE_DNE)
+ tmp = 1; /* Completely new list! */
+ se_add_pair_to_slist ("eoc_white_list", strdup (key_buffer), tmp);
+
+
+ /* add IP address of validated row to internal storage list */
+ strcpy (ip_address, wl_entry.ip_address);
+ if (strcmp (ip_address, LIBSPID_EOC_WL_IP_DEFAULT))
+ {
+ tmp = se_find_free_value_in_slist ("eoc_white_list_ip");
+ if (tmp == SE_DNE)
+ tmp = 1; /* Completely new list! */
+ se_add_pair_to_slist ("eoc_white_list_ip",
+ strdup (ip_address), tmp);
+ }
+
+
+ /* check configuration files before attempting synchronization
+ of white list and ports */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in whitelist"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in port"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_storm_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in storm"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_maclimit_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in maclimitation"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_vlan_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in vlan port table"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_ethernet_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in ethernet port table"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+ /* write completed line to white list file */
+ ret = libspid_eoc_wl_set (key_buffer, &wl_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_set error\n");
+ return MFD_ERROR;
+ }
+
+ /* propagate white list changes */
+ ret = libspid_eoc_wl_sync ();
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_sync succeeded\n");
+ }
+
+
+ /* propagate associated port changes */
+ ret = libspid_eoc_port_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync succeeded\n");
+ }
+
+ /* if commit has successfully passed, clear row adding indication */
+ eoc_adding_row = 0;
+
+ /* obtain online status of newly added station */
+ /* read line indexed by MAC address from online
+ information file */
+ if (LIBSPID_SUCCESS ==
+ libspid_config_read_line (LIBSPID_ONLINE_INFO_PATH,
+ online_delimiters,
+ wl_entry.mac_addr,
+ &online_elt_number,
+ online_elt_buffer, online_buffer,
+ LIBSPID_LINE_MAX_LEN))
+ {
+ rowreq_ctx->data->eocCNUWhiteListRegisterOnlineStatus =
+ EOCCNUWHITELISTREGISTERONLINESTATUS_ONLINE;
+ }
+ else
+ {
+ rowreq_ctx->data->eocCNUWhiteListRegisterOnlineStatus =
+ EOCCNUWHITELISTREGISTERONLINESTATUS_OFFLINE;
+ }
+
+ }
+
+ }
+ else
+ {
+ /* this case covers modifying columns without modifying row status */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) &&
+ (ROWSTATUS_ACTIVE == rowreq_ctx->data->eocCNUWhiteListRowStatus))
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit",
+ "MAC address from row request context: %x %x %x %x %x %x \n",
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[0],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[1],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[2],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[3],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[4],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[5]));
+ /* convert MAC address from bin to string (to be changed later
+ * or used as a key in configuration file) */
+ ret =
+ libspid_mac_bin_to_str (rowreq_ctx->data->
+ eocCNUWhiteListMACAddress,
+ key_buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit",
+ "MAC address converted to string: %s \n",
+ key_buffer));
+
+
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCCNUWHITELISTMACADDRESS_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit",
+ "old MAC address to be changed: %x %x %x %x %x %x \n",
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[0],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[1],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[2],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[3],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[4],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[5]));
+ /* convert old MAC address from bin to string */
+ ret =
+ libspid_mac_bin_to_str (rowreq_ctx->undo->
+ eocCNUWhiteListMACAddress,
+ mac_str_old);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+ /* change MAC address in configuration file */
+ ret = libspid_eoc_wl_mac_change (mac_str_old, key_buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_mac_change error\n");
+ return MFD_ERROR;
+ }
+
+ /* remove old MAC address from internal storage list */
+ if (NULL != se_find_slist ("eoc_white_list"))
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit:",
+ "trying to remove MAC address from slist: %s\n",
+ mac_str_old));
+ ret = se_remove_label_from_slist ("eoc_white_list",
+ mac_str_old);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR, "Error! MAC address not found"
+ " in internal storage list!\n");
+ return MFD_ERROR;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "Trying to delete from empty MAC"
+ " address internal storage list!\n");
+ return MFD_ERROR;
+ }
+
+ /* add new MAC address to internal storage list */
+ tmp = se_find_free_value_in_slist ("eoc_white_list");
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_commit",
+ "se_find_value_in_slist found free value: %d\n",
+ tmp));
+ if (tmp == SE_DNE)
+ tmp = 1; /* Completely new list! */
+ se_add_pair_to_slist ("eoc_white_list",
+ strdup (key_buffer), tmp);
+
+ }
+
+ /* get existing line contents from white list file */
+ ret = libspid_eoc_wl_get (key_buffer, &wl_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_get error\n");
+ return MFD_ERROR;
+ }
+
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit",
+ "ipaddr read from rowreq context: %s\n",
+ rowreq_ctx->data->eocCNUWhiteListIPAddress));
+ /* convert ip address from bin to string to ip address
+ to white list entry */
+ ret =
+ libspid_ip_bin_to_str (rowreq_ctx->data->
+ eocCNUWhiteListIPAddress,
+ wl_entry.ip_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+ /* convert old ip address from bin to string */
+ ret =
+ libspid_ip_bin_to_str (rowreq_ctx->undo->
+ eocCNUWhiteListIPAddress,
+ ip_address_old);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+ strcpy (ip_address, wl_entry.ip_address);
+
+ /* remove old IP address from internal storage list */
+ if (strcmp (ip_address_old, LIBSPID_EOC_WL_IP_DEFAULT))
+ {
+ if (NULL != se_find_slist ("eoc_white_list_ip"))
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit:",
+ "trying to remove IP address"
+ " from slist: %s\n",
+ ip_address_old));
+ ret = se_remove_label_from_slist ("eoc_white_list_ip",
+ ip_address_old);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR, "Error! IP address not found"
+ " in internal storage list!\n");
+ return MFD_ERROR;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "Trying to delete from empty IP"
+ " address internal storage list!\n");
+ return MFD_ERROR;
+ }
+ }
+
+ /* add new IP address to internal storage list */
+ if (strcmp (ip_address, LIBSPID_EOC_WL_IP_DEFAULT))
+ {
+ tmp = se_find_free_value_in_slist ("eoc_white_list_ip");
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_commit",
+ "se_find_value_in_slist found free value: %d\n",
+ tmp));
+ if (tmp == SE_DNE)
+ tmp = 1; /* Completely new list! */
+ se_add_pair_to_slist ("eoc_white_list_ip",
+ strdup (ip_address), tmp);
+ }
+ }
+
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCCNUWHITELISTAUTHORIZATION_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit",
+ "authorization read from rowreq context: %ld\n",
+ rowreq_ctx->data->eocCNUWhiteListAuthorization));
+ /* copy authorization to white list entry */
+ sprintf (wl_entry.auth, "%ld",
+ rowreq_ctx->data->eocCNUWhiteListAuthorization);
+ }
+
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit",
+ "RF output level read from rowreq context: %ld\n",
+ rowreq_ctx->data->eocCNUWhiteListRFOutputLevel));
+ /* copy output level to white list entry */
+ sprintf (wl_entry.output_level, "%ld",
+ rowreq_ctx->data->eocCNUWhiteListRFOutputLevel);
+
+ }
+
+ /* copy start time to white list entry */
+ sprintf (wl_entry.start_time, "%02d:%02d", start_time_hr,
+ start_time_min);
+
+ /* copy end time to white list entry */
+ sprintf (wl_entry.end_time, "%02d:%02d", end_time_hr,
+ end_time_min);
+
+
+ /* check configuration file before attempting synchronization
+ of white list */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in white list"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in port",
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_storm_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in storm configuration"
+ " file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_maclimit_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in maclimitation"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_vlan_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in vlan port table"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_ethernet_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in ethernet port table"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+ /* write modified line to white list file */
+ ret = libspid_eoc_wl_set (key_buffer, &wl_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_set error\n");
+ return MFD_ERROR;
+ }
+
+ /* propagate white list changes */
+ ret = libspid_eoc_wl_sync ();
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_sync succeeded\n");
+ }
+
+ }
+ }
+
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc)
+ {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags)
+ {
+ snmp_log (LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocCNUWhiteListTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUWhiteListTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocCNUWhiteListTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocCNUWhiteListTable_undo_commit (eocCNUWhiteListTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ /* declarations for calls to libspid */
+ char key_buffer[LIBSPID_KEY_MAX_LEN];
+ int ret;
+ int i;
+ int tmp;
+ int start_time_hr = 0, start_time_min = 0, end_time_hr =
+ 22, end_time_min = 0;
+
+ libspid_eoc_wl_entry_t wl_entry;
+
+ const char online_delimiters[2] = LIBSPID_ONLINE_INFO_DELIMITER "\0";
+ char online_buffer[LIBSPID_LINE_MAX_LEN] = { 0 };
+ unsigned int online_elt_number = LIBSPID_ELT_MAX_NB;
+ char *online_elt_buffer[LIBSPID_ELT_MAX_NB] = { 0 };
+
+ char mac_str_revert[LIBSPID_MAC_STR_LEN];
+ char ip_address[LIBSPID_IP_STR_MAX_LEN];
+
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_undo_commit", "called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /* initialize white list entry */
+ memset (&wl_entry, 0, sizeof (wl_entry));
+
+
+ /*
+ * TODO:485:M: |-> Undo eocCNUWhiteListTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG)
+ {
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ {
+ /* when row is created and not validated, there is nothing to do */
+ if ((rowreq_ctx->undo->eocCNUWhiteListRowStatus &
+ ROWSTATUS_NOTINSERVICE))
+ {
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_undo_commit",
+ "removing unvalidated row!\n"));
+ return MFD_SUCCESS;
+ }
+ }
+ else if (ROWSTATUS_DESTROY ==
+ rowreq_ctx->data->eocCNUWhiteListRowStatus)
+ {
+ /* if a row was deleted, restore it */
+ /* if restoring unvalidated row, there is nothing to do */
+ if ((rowreq_ctx->undo->eocCNUWhiteListRowStatus &
+ ROWSTATUS_NOTINSERVICE))
+ {
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_undo_commit",
+ "restoring unvalidated row!\n"));
+ return MFD_SUCCESS;
+ }
+
+ DEBUGMSGTL (("eocCNUWhiteListTable_undo_commit",
+ "MAC address to undo data for: %x %x %x %x %x %x \n",
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[0],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[1],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[2],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[3],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[4],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[5]));
+ /* convert MAC address from bin to string to serve as key
+ for restoring line */
+ ret =
+ libspid_mac_bin_to_str (rowreq_ctx->undo->
+ eocCNUWhiteListMACAddress,
+ key_buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ /* add MAC address of new row to internal storage list */
+ tmp = se_find_free_value_in_slist ("eoc_white_list");
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_undo_commit",
+ "se_find_value_in_slist found free value: %d\n",
+ tmp));
+ if (tmp == SE_DNE)
+ tmp = 1; /* Completely new list! */
+ se_add_pair_to_slist ("eoc_white_list", strdup (key_buffer), tmp);
+
+ /* convert ip address from bin to string to ip address
+ to white list entry */
+ ret =
+ libspid_ip_bin_to_str (rowreq_ctx->data->
+ eocCNUWhiteListIPAddress,
+ wl_entry.ip_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ /* add IP address of new row to internal storage list */
+ if (strcmp (wl_entry.ip_address, LIBSPID_EOC_WL_IP_DEFAULT))
+ {
+ tmp = se_find_free_value_in_slist ("eoc_white_list_ip");
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_undo_commit",
+ "se_find_value_in_slist found free value: %d\n",
+ tmp));
+ if (tmp == SE_DNE)
+ tmp = 1; /* Completely new list! */
+ se_add_pair_to_slist ("eoc_white_list_ip",
+ strdup (wl_entry.ip_address), tmp);
+ }
+
+ /* copy TEI to white list entry */
+ sprintf (wl_entry.tei, "%ld",
+ rowreq_ctx->undo->eocCNUWhiteListTEI);
+
+ /* copy authorization to white list entry */
+ sprintf (wl_entry.auth, "%ld",
+ rowreq_ctx->undo->eocCNUWhiteListAuthorization);
+
+ /* copy output level to white list entry */
+ sprintf (wl_entry.output_level, "%ld",
+ rowreq_ctx->undo->eocCNUWhiteListRFOutputLevel);
+
+ /* convert start time to HH:MM format */
+
+ /* copy start time to white list entry */
+ sprintf (wl_entry.start_time, "%02d:%02d",
+ start_time_hr, start_time_min);
+
+ /* convert end time to HH:MM format */
+
+ /* copy end time to white list entry */
+ sprintf (wl_entry.end_time, "%02d:%02d",
+ end_time_hr, end_time_min);
+
+#ifdef USING_SPC300_EOC_MIB_MODULE
+ /* copy DPW to white list entry */
+ strncpy (wl_entry.dpw,
+ rowreq_ctx->undo->spc300EoCSlaveWhiteListDevicePassword,
+ rowreq_ctx->undo->
+ spc300EoCSlaveWhiteListDevicePassword_len);
+#endif /* USING_SPC300_EOC_MIB_MODULE */
+
+ /* clear flag for deletion */
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DELETED;
+
+ /* check configuration files before attempting synchronization
+ of white list and ports */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in whitelist"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in port"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_storm_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in storm"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_maclimit_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in maclimitation"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_vlan_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in vlan port table"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_ethernet_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in ethernet port table"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ /* write completed line to white list file */
+ ret = libspid_eoc_wl_set (key_buffer, &wl_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_set error\n");
+ return MFD_ERROR;
+ }
+
+ /* propagate white list changes */
+ ret = libspid_eoc_wl_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_sync error\n");
+ return MFD_ERROR;
+ }
+
+ /* propagate associated port changes */
+ ret = libspid_eoc_port_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync succeeded\n");
+ }
+
+ /* obtain online status of restored station */
+ /* read line indexed by MAC address from online
+ information file */
+ if (LIBSPID_SUCCESS ==
+ libspid_config_read_line (LIBSPID_ONLINE_INFO_PATH,
+ online_delimiters,
+ wl_entry.mac_addr,
+ &online_elt_number,
+ online_elt_buffer, online_buffer,
+ LIBSPID_LINE_MAX_LEN))
+ {
+ rowreq_ctx->data->eocCNUWhiteListRegisterOnlineStatus =
+ EOCCNUWHITELISTREGISTERONLINESTATUS_ONLINE;
+ }
+ else
+ {
+ rowreq_ctx->data->eocCNUWhiteListRegisterOnlineStatus =
+ EOCCNUWHITELISTREGISTERONLINESTATUS_OFFLINE;
+ }
+
+
+ }
+ else if (ROWSTATUS_ACTIVE ==
+ rowreq_ctx->data->eocCNUWhiteListRowStatus)
+ {
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_undo_commit",
+ "removing newly validated row!\n"));
+ /* if a row was validated (its status set to active)
+ revert its status to notInService */
+ rowreq_ctx->data->eocCNUWhiteListRowStatus =
+ rowreq_ctx->undo->eocCNUWhiteListRowStatus;
+ /*
+ * also remove row data from internal storage list and config file
+ * convert MAC address from bin to string to
+ * serve as key for removing line
+ */
+ ret =
+ libspid_mac_bin_to_str (rowreq_ctx->data->
+ eocCNUWhiteListMACAddress,
+ key_buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ /* remove MAC address from internal storage list */
+ if (NULL != se_find_slist ("eoc_white_list"))
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_undo_commit:",
+ "trying to remove MAC address from slist: %s\n",
+ key_buffer));
+ ret = se_remove_label_from_slist ("eoc_white_list",
+ key_buffer);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR,
+ "Error! MAC address not found in the table!\n");
+ return MFD_ERROR;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR,
+ "Trying to delete from empty MAC address list!\n");
+ return MFD_ERROR;
+ }
+
+ /* convert MAC address from bin to string to serve
+ as key for removing line */
+ ret =
+ libspid_ip_bin_to_str (rowreq_ctx->data->
+ eocCNUWhiteListIPAddress, ip_address);
+
+ /* remove IP address from internal storage list */
+ if (strcmp (ip_address, LIBSPID_EOC_WL_IP_DEFAULT))
+ {
+ if (NULL != se_find_slist ("eoc_white_list_ip"))
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_undo_commit:",
+ "trying to remove MAC address"
+ " from slist: %s\n",
+ key_buffer));
+ ret = se_remove_label_from_slist ("eoc_white_list_ip",
+ ip_address);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR, "Error! "
+ "IP address not found in the table!\n");
+ return MFD_ERROR;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR,
+ "Trying to delete from empty IP address list!\n");
+ return MFD_ERROR;
+ }
+ }
+
+
+ /* check configuration files before attempting
+ synchronization of white list and ports */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in whitelist"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in port "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_storm_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in storm "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_maclimit_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in maclimitation "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_vlan_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in vlan port table "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_ethernet_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in ethernet port table "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ /* if a new row was added, remove line indexed by
+ * MAC address from white list configuration file */
+ if (1 == eoc_adding_row)
+ {
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_remove (key_buffer))
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_remove error\n");
+ return MFD_ERROR;
+ }
+
+
+ /* propagate white list changes */
+ ret = libspid_eoc_wl_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_sync error\n");
+ return MFD_ERROR;
+ }
+
+ /* propagate associated port changes */
+ ret = libspid_eoc_port_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_port_sync succeeded\n");
+ }
+
+ /* if undo has successfully passed,
+ clear row adding indication */
+ eoc_adding_row = 0;
+ }
+ }
+ }
+ else
+ {
+ /* this case covers restoring modified columns
+ (without row status modified) */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) &&
+ (ROWSTATUS_ACTIVE == rowreq_ctx->undo->eocCNUWhiteListRowStatus))
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_undo_commit",
+ "undoing data for MAC address: %x %x %x %x %x %x \n",
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[0],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[1],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[2],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[3],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[4],
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress[5]));
+ /* convert MAC address to be undone from bin to string */
+ ret =
+ libspid_mac_bin_to_str (rowreq_ctx->undo->
+ eocCNUWhiteListMACAddress,
+ key_buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCCNUWHITELISTMACADDRESS_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit",
+ "MAC address to be reverted: %x %x %x %x %x %x \n",
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[0],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[1],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[2],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[3],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[4],
+ rowreq_ctx->data->eocCNUWhiteListMACAddress[5]));
+ /* convert MAC address to be reverted from bin to string */
+ ret =
+ libspid_mac_bin_to_str (rowreq_ctx->undo->
+ eocCNUWhiteListMACAddress,
+ mac_str_revert);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+ /* change MAC address in configuration file */
+ ret = libspid_eoc_wl_mac_change (mac_str_revert, key_buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_mac_change error\n");
+ return MFD_ERROR;
+ }
+
+ /* remove reverted MAC address from internal storage list */
+ if (NULL != se_find_slist ("eoc_white_list"))
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit:",
+ "trying to remove MAC address from slist: %s\n",
+ mac_str_revert));
+ ret = se_remove_label_from_slist ("eoc_white_list",
+ mac_str_revert);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR, "Error! MAC address not found"
+ " in internal storage list!\n");
+ return MFD_ERROR;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "Trying to delete from empty MAC"
+ " address internal storage list!\n");
+ return MFD_ERROR;
+ }
+
+ /* add undone MAC address to internal storage list */
+ tmp = se_find_free_value_in_slist ("eoc_white_list");
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_commit",
+ "se_find_value_in_slist found free value: %d\n",
+ tmp));
+ if (tmp == SE_DNE)
+ tmp = 1; /* Completely new list! */
+ se_add_pair_to_slist ("eoc_white_list",
+ strdup (key_buffer), tmp);
+
+ }
+
+ /* get existing line contents from white list file */
+ ret = libspid_eoc_wl_get (key_buffer, &wl_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_get error\n");
+ return MFD_ERROR;
+ }
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit",
+ "ipaddr read from rowreq context: %s\n",
+ rowreq_ctx->data->eocCNUWhiteListIPAddress));
+ /* convert ip address from bin to string to ip address
+ to white list entry */
+ ret =
+ libspid_ip_bin_to_str (rowreq_ctx->data->
+ eocCNUWhiteListIPAddress,
+ wl_entry.ip_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+ /* convert IP address to be reverted from bin to string */
+ ret =
+ libspid_ip_bin_to_str (rowreq_ctx->undo->
+ eocCNUWhiteListIPAddress,
+ ip_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ return MFD_ERROR;
+ }
+
+ /* remove reverted MAC address from internal storage list */
+ if (strcmp (ip_address, LIBSPID_EOC_WL_IP_DEFAULT))
+ {
+ if (NULL != se_find_slist ("eoc_white_list_ip"))
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_commit:",
+ "trying to remove IP address"
+ " from slist: %s\n",
+ ip_address));
+ ret = se_remove_label_from_slist ("eoc_white_list_ip",
+ ip_address);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR, "Error! IP address not found"
+ " in internal storage list!\n");
+ return MFD_ERROR;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "Trying to delete from empty IP"
+ " address internal storage list!\n");
+ return MFD_ERROR;
+ }
+ }
+
+ /* add undone IP address to internal storage list */
+ if (strcmp (ip_address, LIBSPID_EOC_WL_IP_DEFAULT))
+ {
+ tmp = se_find_free_value_in_slist ("eoc_white_list_ip");
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_commit",
+ "se_find_value_in_slist found free value: %d\n",
+ tmp));
+ if (tmp == SE_DNE)
+ tmp = 1; /* Completely new list! */
+ se_add_pair_to_slist ("eoc_white_list_ip",
+ strdup (wl_entry.ip_address), tmp);
+ }
+ }
+
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCCNUWHITELISTAUTHORIZATION_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_undo_commit",
+ "authorization to be restored: %ld\n",
+ rowreq_ctx->undo->eocCNUWhiteListAuthorization));
+ /* copy authorization to white list entry */
+ sprintf (wl_entry.auth, "%ld",
+ rowreq_ctx->undo->eocCNUWhiteListAuthorization);
+ }
+
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable_undo_commit",
+ "RF output level to be restored: %ld\n",
+ rowreq_ctx->undo->eocCNUWhiteListRFOutputLevel));
+ /* copy output level to white list entry */
+ sprintf (wl_entry.output_level, "%ld",
+ rowreq_ctx->undo->eocCNUWhiteListRFOutputLevel);
+ }
+ /* copy start time to white list entry */
+ sprintf (wl_entry.start_time, "%02d:%02d",
+ start_time_hr, start_time_min);
+ /* copy end time to elt_buffer[4] */
+ sprintf (wl_entry.end_time, "%02d:%02d",
+ end_time_hr, end_time_min);
+
+
+ /* check configuration file before attempting
+ synchronization of white list */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in white list "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in port configuration"
+ " file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+
+ if (LIBSPID_SUCCESS != libspid_eoc_storm_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in storm configuration"
+ " file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_maclimit_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in maclimitation "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_vlan_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in vlan port table "
+ "configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_ethernet_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in ethernet port "
+ "table configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+ /* write modified line to white list file */
+ ret = libspid_eoc_wl_set (key_buffer, &wl_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_set error\n");
+ return MFD_ERROR;
+ }
+
+ /* propagate white list changes */
+ ret = libspid_eoc_wl_sync ();
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_sync error\n");
+ return MFD_ERROR;
+ }
+ }
+ }
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocCNUWhiteListTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocCNUWhiteListTable node value checks.
+ * TODO:450:M: Implement eocCNUWhiteListTable undo functions.
+ * TODO:460:M: Implement eocCNUWhiteListTable set functions.
+ * TODO:480:M: Implement eocCNUWhiteListTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListIPAddress
+ * eocCNUWhiteListIPAddress is subid 2 of eocCNUWhiteListEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.2
+ * Description:
+CNUµÄIPµØÖ·¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length.
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListIPAddress_val_ptr
+ * A char containing the new value.
+ * @param eocCNUWhiteListIPAddress_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCNUWhiteListIPAddress_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUWhiteListTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OCTET_STR
+ * The length is < sizeof(rowreq_ctx->data.eocCNUWhiteListIPAddress).
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUWhiteListIPAddress_check_value( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, char *eocCNUWhiteListIPAddress_val_ptr, size_t eocCNUWhiteListIPAddress_val_ptr_len)
+{
+ int tmp;
+ int ret;
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListIPAddress_check_value","called\n"));
+ char ip_address[LIBSPID_IP_STR_MAX_LEN];
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCNUWhiteListIPAddress_val_ptr);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUWhiteListIPAddress value.
+ */
+
+
+ ret = libspid_ip_bin_to_str (eocCNUWhiteListIPAddress_val_ptr,
+ ip_address);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log(LOG_ERR, "eocCNUWhiteListTable:",
+ "eocCNUWhiteListMACAddress_check_value",
+ "error converting MAC address proposed value to string\n");
+ return MFD_ERROR;
+ }
+ /* check if proposed IP address already exists in internal storage list */
+ /* Ip address will be added to storage list when the row is
+ validated (and conf file is updated) */
+ if (strcmp (ip_address, LIBSPID_EOC_WL_IP_DEFAULT))
+ {
+ tmp = se_find_value_in_slist ("eoc_white_list_ip", ip_address);
+ if (tmp != SE_DNE)
+ {
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListMACAddress_check_value",
+ "IP address already exists!\n"));
+ return MFD_NOT_VALID_EVER;
+ }
+ }
+ return MFD_SUCCESS; /* eocCNUWhiteListIPAddress value not illegal */
+} /* eocCNUWhiteListIPAddress_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUWhiteListTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUWhiteListIPAddress_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListIPAddress_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUWhiteListIPAddress undo.
+ */
+ /*
+ * copy eocCNUWhiteListIPAddress and eocCNUWhiteListIPAddress_len data
+ * set rowreq_ctx->undo->eocCNUWhiteListIPAddress from
+ *rowreq_ctx->data.eocCNUWhiteListIPAddress
+ */
+ memcpy (rowreq_ctx->undo->eocCNUWhiteListIPAddress,
+ rowreq_ctx->data->eocCNUWhiteListIPAddress,
+ (rowreq_ctx->data->eocCNUWhiteListIPAddress_len *
+ sizeof (rowreq_ctx->undo->eocCNUWhiteListIPAddress[0])));
+ rowreq_ctx->undo->eocCNUWhiteListIPAddress_len =
+ rowreq_ctx->data->eocCNUWhiteListIPAddress_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListIPAddress_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUWhiteListIPAddress_val_ptr
+ * A char containing the new value.
+ * @param eocCNUWhiteListIPAddress_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCNUWhiteListIPAddress_val_ptr
+ */
+int
+eocCNUWhiteListIPAddress_set( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, char *eocCNUWhiteListIPAddress_val_ptr, size_t eocCNUWhiteListIPAddress_val_ptr_len )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListIPAddress_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCNUWhiteListIPAddress_val_ptr);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUWhiteListIPAddress value.
+ * set eocCNUWhiteListIPAddress value in rowreq_ctx->data
+ */
+ memcpy (rowreq_ctx->data->eocCNUWhiteListIPAddress,
+ eocCNUWhiteListIPAddress_val_ptr,
+ eocCNUWhiteListIPAddress_val_ptr_len);
+ /** convert bytes to number of char */
+ rowreq_ctx->data->eocCNUWhiteListIPAddress_len =
+ eocCNUWhiteListIPAddress_val_ptr_len /
+ sizeof (eocCNUWhiteListIPAddress_val_ptr[0]);
+
+ rowreq_ctx->column_exists_flags |= COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG;
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListIPAddress_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUWhiteListIPAddress_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListIPAddress_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUWhiteListIPAddress undo.
+ */
+ /*
+ * copy eocCNUWhiteListIPAddress and eocCNUWhiteListIPAddress_len data
+ * set rowreq_ctx->data.eocCNUWhiteListIPAddress from
+ *rowreq_ctx->undo->eocCNUWhiteListIPAddress
+ */
+ memcpy (rowreq_ctx->data->eocCNUWhiteListIPAddress,
+ rowreq_ctx->undo->eocCNUWhiteListIPAddress,
+ (rowreq_ctx->undo->eocCNUWhiteListIPAddress_len *
+ sizeof (rowreq_ctx->data->eocCNUWhiteListIPAddress[0])));
+ rowreq_ctx->data->eocCNUWhiteListIPAddress_len =
+ rowreq_ctx->undo->eocCNUWhiteListIPAddress_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListIPAddress_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListMACAddress
+ * eocCNUWhiteListMACAddress is subid 3 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.3
+ * Description:
+CNUµÄMACµØÖ·¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is DisplayString (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length.
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListMACAddress_val_ptr
+ * A char containing the new value.
+ * @param eocCNUWhiteListMACAddress_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCNUWhiteListMACAddress_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUWhiteListTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OCTET_STR
+ * The length is < sizeof(rowreq_ctx->data.eocCNUWhiteListMACAddress).
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUWhiteListMACAddress_check_value( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, char *eocCNUWhiteListMACAddress_val_ptr, size_t eocCNUWhiteListMACAddress_val_ptr_len)
+{
+ int tmp;
+ int ret;
+
+ char mac_str[LIBSPID_MAC_STR_LEN];
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListMACAddress_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCNUWhiteListMACAddress_val_ptr);
+
+ DEBUGMSGTL (("eocCNUWhiteListTable:eocCNUWhiteListMACAddress_check_value",
+ "MAC address proposed value : %x %x %x %x %x %x \n",
+ eocCNUWhiteListMACAddress_val_ptr[0],
+ eocCNUWhiteListMACAddress_val_ptr[1],
+ eocCNUWhiteListMACAddress_val_ptr[2],
+ eocCNUWhiteListMACAddress_val_ptr[3],
+ eocCNUWhiteListMACAddress_val_ptr[4],
+ eocCNUWhiteListMACAddress_val_ptr[5]));
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUWhiteListMACAddress value.
+ */
+ ret = libspid_mac_bin_to_str (eocCNUWhiteListMACAddress_val_ptr, mac_str);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "eocCNUWhiteListTable:",
+ "eocCNUWhiteListMACAddress_check_value"
+ "error converting MAC address proposed value to string\n");
+ return MFD_ERROR;
+ }
+
+ /* check if proposed MAC address already exists
+ in internal storage list */
+ /* MAC address will be added to storage list when the row is
+ * validated (and conf file is updated) */
+ tmp = se_find_value_in_slist ("eoc_white_list", mac_str);
+ if (tmp != SE_DNE)
+ {
+ DEBUGMSGTL (("verbose:eocCNUWhiteListTable:",
+ "eocCNUWhiteListMACAddress_check_value",
+ "MAC address already exists!\n"));
+ return MFD_NOT_VALID_EVER;
+ }
+
+ return MFD_SUCCESS; /* eocCNUWhiteListMACAddress value not illegal */
+} /* eocCNUWhiteListMACAddress_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUWhiteListTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUWhiteListMACAddress_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListMACAddress_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUWhiteListMACAddress undo.
+ */
+ /*
+ * copy eocCNUWhiteListMACAddress and eocCNUWhiteListMACAddress_len data
+ * set rowreq_ctx->undo->eocCNUWhiteListMACAddress from
+ *rowreq_ctx->data.eocCNUWhiteListMACAddress
+ */
+ memcpy (rowreq_ctx->undo->eocCNUWhiteListMACAddress,
+ rowreq_ctx->data->eocCNUWhiteListMACAddress,
+ (rowreq_ctx->data->eocCNUWhiteListMACAddress_len *
+ sizeof (rowreq_ctx->undo->eocCNUWhiteListMACAddress[0])));
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress_len =
+ rowreq_ctx->data->eocCNUWhiteListMACAddress_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListMACAddress_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUWhiteListMACAddress_val_ptr
+ * A char containing the new value.
+ * @param eocCNUWhiteListMACAddress_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocCNUWhiteListMACAddress_val_ptr
+ */
+int
+eocCNUWhiteListMACAddress_set( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, char *eocCNUWhiteListMACAddress_val_ptr, size_t eocCNUWhiteListMACAddress_val_ptr_len )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListMACAddress_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocCNUWhiteListMACAddress_val_ptr);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUWhiteListMACAddress value.
+ * set eocCNUWhiteListMACAddress value in rowreq_ctx->data
+ */
+ memcpy (rowreq_ctx->data->eocCNUWhiteListMACAddress,
+ eocCNUWhiteListMACAddress_val_ptr,
+ eocCNUWhiteListMACAddress_val_ptr_len);
+ /** convert bytes to number of char */
+ rowreq_ctx->data->eocCNUWhiteListMACAddress_len =
+ eocCNUWhiteListMACAddress_val_ptr_len /
+ sizeof (eocCNUWhiteListMACAddress_val_ptr[0]);
+
+ rowreq_ctx->column_exists_flags |= COLUMN_EOCCNUWHITELISTMACADDRESS_FLAG;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListMACAddress_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUWhiteListMACAddress_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListMACAddress_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUWhiteListMACAddress undo.
+ */
+ /*
+ * copy eocCNUWhiteListMACAddress and eocCNUWhiteListMACAddress_len data
+ * set rowreq_ctx->data.eocCNUWhiteListMACAddress from
+ *rowreq_ctx->undo->eocCNUWhiteListMACAddress
+ */
+ memcpy (rowreq_ctx->data->eocCNUWhiteListMACAddress,
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress,
+ (rowreq_ctx->undo->eocCNUWhiteListMACAddress_len
+ * sizeof (rowreq_ctx->data->eocCNUWhiteListMACAddress[0])));
+ rowreq_ctx->data->eocCNUWhiteListMACAddress_len =
+ rowreq_ctx->undo->eocCNUWhiteListMACAddress_len;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListMACAddress_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListAuthorization
+ * eocCNUWhiteListAuthorization is subid 4 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.4
+ * Description:
+CNUÊÚȨ״̬¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: not_authorized(0), authorized(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListAuthorization_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUWhiteListTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of not_authorized(0), authorized(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUWhiteListAuthorization_check_value( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListAuthorization_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListAuthorization_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUWhiteListAuthorization value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUWhiteListAuthorization value not illegal */
+} /* eocCNUWhiteListAuthorization_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUWhiteListTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUWhiteListAuthorization_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListAuthorization_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUWhiteListAuthorization undo.
+ */
+ /*
+ * copy eocCNUWhiteListAuthorization data
+ * set rowreq_ctx->undo->eocCNUWhiteListAuthorization from
+ *rowreq_ctx->data.eocCNUWhiteListAuthorization
+ */
+ /* TEMP: all fields copied in main _undo_setup */
+/* rowreq_ctx->undo->eocCNUWhiteListAuthorization = */
+/* rowreq_ctx->data->eocCNUWhiteListAuthorization; */
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListAuthorization_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUWhiteListAuthorization_val
+ * A long containing the new value.
+ */
+int
+eocCNUWhiteListAuthorization_set( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListAuthorization_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListAuthorization_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUWhiteListAuthorization value.
+ * set eocCNUWhiteListAuthorization value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->eocCNUWhiteListAuthorization =
+ eocCNUWhiteListAuthorization_val;
+
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUWHITELISTAUTHORIZATION_FLAG;
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListAuthorization_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUWhiteListAuthorization_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListAuthorization_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUWhiteListAuthorization undo.
+ */
+ /*
+ * copy eocCNUWhiteListAuthorization data
+ * set rowreq_ctx->data.eocCNUWhiteListAuthorization from
+ *rowreq_ctx->undo->eocCNUWhiteListAuthorization
+ */
+ rowreq_ctx->data->eocCNUWhiteListAuthorization =
+ rowreq_ctx->undo->eocCNUWhiteListAuthorization;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListAuthorization_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListRFOutputLevel
+ * eocCNUWhiteListRFOutputLevel is subid 5 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.5
+ * Description:
+CNUÊä³öµçƽ£¬µ¥Î»dBuV
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListRFOutputLevel_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUWhiteListTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUWhiteListRFOutputLevel_check_value( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListRFOutputLevel_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListRFOutputLevel_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUWhiteListRFOutputLevel value.
+ */
+
+ /* allow setting output level to 0 as a special case */
+ if ( 0 == eocCNUWhiteListRFOutputLevel_val){
+ return MFD_SUCCESS;
+ }
+ /* for non-zero values, check that proposed output level value
+ * is between allowed min and max value */
+ if ((eocCNUWhiteListRFOutputLevel_val <
+ LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MIN) ||
+ (eocCNUWhiteListRFOutputLevel_val >
+ LIBSPID_EOC_WL_RF_OUTPUT_LEVEL_MAX))
+ {
+ return SNMP_ERR_WRONGVALUE;
+ }
+
+ return MFD_SUCCESS; /* eocCNUWhiteListRFOutputLevel value not illegal */
+} /* eocCNUWhiteListRFOutputLevel_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUWhiteListTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUWhiteListRFOutputLevel_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListRFOutputLevel_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUWhiteListRFOutputLevel undo.
+ */
+ /*
+ * copy eocCNUWhiteListRFOutputLevel data
+ * set rowreq_ctx->undo->eocCNUWhiteListRFOutputLevel from
+ *rowreq_ctx->data.eocCNUWhiteListRFOutputLevel
+ */
+ /* all fields are copied in main _undo_setup */
+ /*rowreq_ctx->undo->eocCNUWhiteListRFOutputLevel =
+ rowreq_ctx->data.eocCNUWhiteListRFOutputLevel;*/
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListRFOutputLevel_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUWhiteListRFOutputLevel_val
+ * A long containing the new value.
+ */
+int
+eocCNUWhiteListRFOutputLevel_set( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListRFOutputLevel_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListRFOutputLevel_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUWhiteListRFOutputLevel value.
+ * set eocCNUWhiteListRFOutputLevel value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->eocCNUWhiteListRFOutputLevel =
+ eocCNUWhiteListRFOutputLevel_val;
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL_FLAG;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListRFOutputLevel_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUWhiteListRFOutputLevel_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListRFOutputLevel_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUWhiteListRFOutputLevel undo.
+ */
+ /*
+ * copy eocCNUWhiteListRFOutputLevel data
+ * set rowreq_ctx->data.eocCNUWhiteListRFOutputLevel from
+ *rowreq_ctx->undo->eocCNUWhiteListRFOutputLevel
+ */
+ rowreq_ctx->data->eocCNUWhiteListRFOutputLevel =
+ rowreq_ctx->undo->eocCNUWhiteListRFOutputLevel;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListRFOutputLevel_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListAutoUpgradeEN
+ * eocCNUWhiteListAutoUpgradeEN is subid 6 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.6
+ * Description:
+CNU×Ô¶¯Éý¼¶Ê¹ÄÜ£¬0±íʾ½ûÖ¹£¬1±íʾʹÄÜ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListAutoUpgradeEN_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUWhiteListTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of disable(0), enable(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUWhiteListAutoUpgradeEN_check_value( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListAutoUpgradeEN_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListAutoUpgradeEN_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUWhiteListAutoUpgradeEN value.
+ */
+
+ return MFD_SUCCESS; /* eocCNUWhiteListAutoUpgradeEN value not illegal */
+} /* eocCNUWhiteListAutoUpgradeEN_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUWhiteListTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUWhiteListAutoUpgradeEN_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListAutoUpgradeEN_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUWhiteListAutoUpgradeEN undo.
+ */
+ /*
+ * copy eocCNUWhiteListAutoUpgradeEN data
+ * set rowreq_ctx->undo->eocCNUWhiteListAutoUpgradeEN from rowreq_ctx->data.eocCNUWhiteListAutoUpgradeEN
+ */
+ /* all fields are copied in main _undo_setup */
+ /*rowreq_ctx->undo->eocCNUWhiteListAutoUpgradeEN =
+ *rowreq_ctx->data.eocCNUWhiteListAutoUpgradeEN;
+ */
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListAutoUpgradeEN_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUWhiteListAutoUpgradeEN_val
+ * A long containing the new value.
+ */
+int
+eocCNUWhiteListAutoUpgradeEN_set( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListAutoUpgradeEN_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListAutoUpgradeEN_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUWhiteListAutoUpgradeEN value.
+ * set eocCNUWhiteListAutoUpgradeEN value in rowreq_ctx->data
+ */
+ /* write autoupgrade enable value to system configuration file */
+ switch (eocCNUWhiteListAutoUpgradeEN_val)
+ {
+ case EOCCNUWHITELISTAUTOUPGRADEEN_DISABLE:
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTOUPDATE,
+ LIBSPID_SYSTEM_CONF_VALUE_NO))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return MFD_ERROR;
+ }
+ break;
+
+ case EOCCNUWHITELISTAUTOUPGRADEEN_ENABLE:
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTOUPDATE,
+ LIBSPID_SYSTEM_CONF_VALUE_YES))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return MFD_ERROR;
+ }
+ break;
+
+ default:
+ snmp_log (LOG_ERR,
+ "couldn't reverse map value %ld for",
+ " eocCNUWhiteListAutoUpgradeEN",
+ eocCNUWhiteListAutoUpgradeEN_val);
+ return MFD_ERROR;
+ }
+
+ rowreq_ctx->data->eocCNUWhiteListAutoUpgradeEN =
+ eocCNUWhiteListAutoUpgradeEN_val;
+
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN_FLAG;
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListAutoUpgradeEN_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUWhiteListAutoUpgradeEN_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListAutoUpgradeEN_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUWhiteListAutoUpgradeEN undo.
+ */
+ /*
+ * copy eocCNUWhiteListAutoUpgradeEN data
+ * set rowreq_ctx->data.eocCNUWhiteListAutoUpgradeEN from
+ * rowreq_ctx->undo->eocCNUWhiteListAutoUpgradeEN
+ */
+ switch (rowreq_ctx->undo->eocCNUWhiteListAutoUpgradeEN)
+ {
+ case EOCCNUWHITELISTAUTOUPGRADEEN_DISABLE:
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTOUPDATE,
+ LIBSPID_SYSTEM_CONF_VALUE_NO))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return MFD_ERROR;
+ }
+ break;
+
+ case EOCCNUWHITELISTAUTOUPGRADEEN_ENABLE:
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_AUTOUPDATE,
+ LIBSPID_SYSTEM_CONF_VALUE_YES))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return MFD_ERROR;
+ }
+ break;
+
+ default:
+ snmp_log (LOG_ERR,
+ "couldn't reverse map value %ld for"
+ " eocCNUWhiteListAutoUpgradeEN",
+ rowreq_ctx->undo->eocCNUWhiteListAutoUpgradeEN);
+ return MFD_ERROR;
+ }
+
+ rowreq_ctx->data->eocCNUWhiteListAutoUpgradeEN =
+ rowreq_ctx->undo->eocCNUWhiteListAutoUpgradeEN;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListAutoUpgradeEN_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListEntry.eocCNUWhiteListRowStatus
+ * eocCNUWhiteListRowStatus is subid 8 of eocCNUWhiteListEntry.
+ * Its status is Current, and its access level is Create.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6.1.8
+ * Description:
+ÐÐ״̬£¬ÓÃÓÚ´´½¨¡¢Ð޸ġ¢É¾³ýijһÐУº
+ none_existent(0)- ±íÏî²»´æÔÚ£»
+ avtive(1)- ¼¤»î¸ÃÐУ»
+ notInService(2)- ״̬δ¼¤»î£»
+ notReady(3)- ²»Äܱ»¼¤»î״̬£»
+ createAndGo(4)- ´´½¨²¢¼¤»î£»
+ createAndWait(5)- ´´½¨£¬µ«²»¼¤»î£»
+ destory(6)- Ïú»Ù¸ÃÐС£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * Its syntax is RowStatus (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocCNUWhiteListRowStatus_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocCNUWhiteListTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocCNUWhiteListRowStatus_check_value( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListRowStatus_val)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListRowStatus_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocCNUWhiteListRowStatus value.
+ */
+ /* check for unsupported row status values */
+ if (ROWSTATUS_CREATEANDGO == eocCNUWhiteListRowStatus_val)
+ {
+ DEBUGMSGTL(("eocCNUWhiteListTable", "createAndGo not supported\n"));
+ return MFD_NOT_VALID_EVER;
+ }
+
+ return MFD_SUCCESS; /* eocCNUWhiteListRowStatus value not illegal */
+} /* eocCNUWhiteListRowStatus_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocCNUWhiteListTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocCNUWhiteListTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocCNUWhiteListRowStatus_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListRowStatus_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocCNUWhiteListRowStatus undo.
+ */
+ /*
+ * copy eocCNUWhiteListRowStatus data
+ * set rowreq_ctx->undo->eocCNUWhiteListRowStatus from rowreq_ctx->data.eocCNUWhiteListRowStatus
+ */
+ /* all fields are copied in main _undo_setup */
+ /*rowreq_ctx->undo->eocCNUWhiteListRowStatus =
+ *rowreq_ctx->data.eocCNUWhiteListRowStatus;
+ */
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListRowStatus_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocCNUWhiteListRowStatus_val
+ * A long containing the new value.
+ */
+int
+eocCNUWhiteListRowStatus_set( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListRowStatus_val )
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListRowStatus_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocCNUWhiteListRowStatus value.
+ * set eocCNUWhiteListRowStatus value in rowreq_ctx->data
+ */
+ rowreq_ctx->data->eocCNUWhiteListRowStatus = eocCNUWhiteListRowStatus_val;
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListRowStatus_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocCNUWhiteListRowStatus_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListRowStatus_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocCNUWhiteListRowStatus undo.
+ */
+ /*
+ * copy eocCNUWhiteListRowStatus data
+ * set rowreq_ctx->data.eocCNUWhiteListRowStatus from
+ *rowreq_ctx->undo->eocCNUWhiteListRowStatus
+ */
+ rowreq_ctx->data->eocCNUWhiteListRowStatus =
+ rowreq_ctx->undo->eocCNUWhiteListRowStatus;
+
+
+ return MFD_SUCCESS;
+} /* eocCNUWhiteListRowStatus_undo */
+/**
+ * check dependencies
+ *
+ * This is useful for for tables which have dependencies between columns
+ * (or rows, or tables). For example, two columns allocating a percentage
+ * of something add up 100%.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocCNUWhiteListTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @retval MFD_SUCCESS all the changes to the row are legal
+ * @retval MFD_ERROR one or more changes are not legal
+ *
+ * (see README-table-eocCNUWhiteListTable if you don't have dependencies)
+ */
+int
+eocCNUWhiteListTable_check_dependencies (eocCNUWhiteListTable_rowreq_ctx *
+ rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL (("internal:eocCNUWhiteListTable:",
+ "eocCNUWhiteListTable_check_dependencies", "called\n"));
+
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ /*
+ * TODO:470:o: Check eocCNUWhiteListTable row dependencies.
+ * check that all new value are legal and consistent with each other
+ */
+ /*
+ * check RowStatus dependencies
+ */
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG)
+ {
+ /*
+ * check for valid RowStatus transition (old, new)
+ * (Note: move transition check to
+ * to catch errors earlier)
+ */
+ rc = check_rowstatus_transition (rowreq_ctx->
+ undo->eocCNUWhiteListRowStatus,
+ rowreq_ctx->
+ data->eocCNUWhiteListRowStatus);
+ if (MFD_SUCCESS != rc)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable",
+ "row status transition from %d to %d\n",
+ rowreq_ctx->undo->eocCNUWhiteListRowStatus,
+ rowreq_ctx->data->eocCNUWhiteListRowStatus));
+ return rc;
+ }
+ /*
+ * row creation requirements
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ {
+ /* this case permits creating row with rowstatus 'destroy'
+ - row is created and immediately deleted */
+ if (ROWSTATUS_DESTROY ==
+ rowreq_ctx->data->eocCNUWhiteListRowStatus)
+ {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED;
+ }
+ else if (ROWSTATUS_CREATEANDWAIT ==
+ rowreq_ctx->data->eocCNUWhiteListRowStatus)
+ {
+ /* set row adding indication */
+ eoc_adding_row = 1;
+ rowreq_ctx->data->eocCNUWhiteListRowStatus =
+ ROWSTATUS_NOTINSERVICE;
+ }
+
+ } /* row creation */
+ else
+ {
+ /*
+ * row change requirements
+ */
+ /*
+ * don't allow a destroy if any other value was changed, since
+ * that might call data access routines with bad info.
+ *
+ * you may or may not require the row be notInService before it
+ * can be destroyed.
+ */
+ if (ROWSTATUS_DESTROY ==
+ rowreq_ctx->data->eocCNUWhiteListRowStatus)
+ {
+ if (rowreq_ctx->column_set_flags &
+ ~COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable",
+ "destroy must be only varbind for row\n"));
+ return MFD_NOT_VALID_NOW;
+ }
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED;
+
+ } /* row destroy */
+
+ else if (ROWSTATUS_NOTINSERVICE ==
+ rowreq_ctx->data->eocCNUWhiteListRowStatus)
+ {
+ /* do not permit invalidating once validated row */
+ if (rowreq_ctx->undo->
+ eocCNUWhiteListRowStatus & ROWSTATUS_ACTIVE)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable",
+ "Row status can't be changed from ",
+ "Active to Not In Service!\n"));
+ return MFD_NOT_VALID_EVER;
+ }
+
+
+ }
+ else if (ROWSTATUS_ACTIVE ==
+ rowreq_ctx->data->eocCNUWhiteListRowStatus)
+ {
+ /* before setting row to active, check
+ that all columns are filled */
+ if ((rowreq_ctx->column_exists_flags &
+ EOCCNUWHITELISTTABLE_REQUIRED_COLS)
+ != EOCCNUWHITELISTTABLE_REQUIRED_COLS)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable",
+ "required columns from eocCNU table",
+ " missing (0x%0x != 0x%0x)\n",
+ rowreq_ctx->column_exists_flags,
+ EOCCNUWHITELISTTABLE_REQUIRED_COLS));
+ return MFD_NOT_VALID_NOW;
+ }
+
+
+
+ /* set Online State flag to existing in
+ order to be read from rowreq_ctx */
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUWHITELISTREGISTERONLINESTATUS_FLAG;
+
+ rowreq_ctx->data->eocCNUWhiteListRowStatus = ROWSTATUS_ACTIVE;
+ }
+ } /* row change */
+ }
+ else
+ {
+ /*
+ * must have row status to create a row
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable",
+ "must use RowStatus to create rows\n"));
+ return MFD_CANNOT_CREATE_NOW;
+ }
+ else if (ROWSTATUS_ACTIVE ==
+ rowreq_ctx->data->eocCNUWhiteListRowStatus)
+ {
+ /* check that start time is not greater than end time */
+
+ }
+ } /* row status not set */
+
+ if (MFD_SUCCESS != rc)
+ return rc;
+
+ return rc;
+} /* eocCNUWhiteListTable_check_dependencies */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_set.h
new file mode 100644
index 0000000000..99ba4a7161
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_data_set.h
@@ -0,0 +1,85 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUWHITELISTTABLE_DATA_SET_H
+#define EOCCNUWHITELISTTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListTable is subid 6 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6, length: 12
+*/
+
+
+int eocCNUWhiteListTable_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx);
+int eocCNUWhiteListTable_undo_cleanup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx);
+int eocCNUWhiteListTable_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx);
+int eocCNUWhiteListTable_commit( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx);
+int eocCNUWhiteListTable_undo_commit( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocCNUWhiteListIPAddress_check_value( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, char *eocCNUWhiteListIPAddress_val_ptr, size_t eocCNUWhiteListIPAddress_val_ptr_len);
+int eocCNUWhiteListIPAddress_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+int eocCNUWhiteListIPAddress_set( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, char *eocCNUWhiteListIPAddress_val_ptr, size_t eocCNUWhiteListIPAddress_val_ptr_len );
+int eocCNUWhiteListIPAddress_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUWhiteListMACAddress_check_value( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, char *eocCNUWhiteListMACAddress_val_ptr, size_t eocCNUWhiteListMACAddress_val_ptr_len);
+int eocCNUWhiteListMACAddress_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+int eocCNUWhiteListMACAddress_set( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, char *eocCNUWhiteListMACAddress_val_ptr, size_t eocCNUWhiteListMACAddress_val_ptr_len );
+int eocCNUWhiteListMACAddress_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUWhiteListAuthorization_check_value( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListAuthorization_val);
+int eocCNUWhiteListAuthorization_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+int eocCNUWhiteListAuthorization_set( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListAuthorization_val );
+int eocCNUWhiteListAuthorization_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUWhiteListRFOutputLevel_check_value( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListRFOutputLevel_val);
+int eocCNUWhiteListRFOutputLevel_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+int eocCNUWhiteListRFOutputLevel_set( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, long eocCNUWhiteListRFOutputLevel_val );
+int eocCNUWhiteListRFOutputLevel_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUWhiteListAutoUpgradeEN_check_value( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListAutoUpgradeEN_val);
+int eocCNUWhiteListAutoUpgradeEN_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+int eocCNUWhiteListAutoUpgradeEN_set( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListAutoUpgradeEN_val );
+int eocCNUWhiteListAutoUpgradeEN_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUWhiteListRegisterOnlineStatus_check_value( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListRegisterOnlineStatus_val);
+int eocCNUWhiteListRegisterOnlineStatus_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+int eocCNUWhiteListRegisterOnlineStatus_set( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListRegisterOnlineStatus_val );
+int eocCNUWhiteListRegisterOnlineStatus_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+
+int eocCNUWhiteListRowStatus_check_value( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListRowStatus_val);
+int eocCNUWhiteListRowStatus_undo_setup( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+int eocCNUWhiteListRowStatus_set( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, u_long eocCNUWhiteListRowStatus_val );
+int eocCNUWhiteListRowStatus_undo( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocCNUWhiteListTable_check_dependencies(eocCNUWhiteListTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUWHITELISTTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_enums.h
new file mode 100644
index 0000000000..6f037bd130
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_enums.h
@@ -0,0 +1,108 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUWHITELISTTABLE_ENUMS_H
+#define EOCCNUWHITELISTTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocCNUWhiteListTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUWhiteListAuthorization (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUWHITELISTAUTHORIZATION_ENUMS
+#define EOCCNUWHITELISTAUTHORIZATION_ENUMS
+
+#define EOCCNUWHITELISTAUTHORIZATION_NOT_AUTHORIZED 0
+#define EOCCNUWHITELISTAUTHORIZATION_AUTHORIZED 1
+
+#endif /* EOCCNUWHITELISTAUTHORIZATION_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUWhiteListAutoUpgradeEN (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUWHITELISTAUTOUPGRADEEN_ENUMS
+#define EOCCNUWHITELISTAUTOUPGRADEEN_ENUMS
+
+#define EOCCNUWHITELISTAUTOUPGRADEEN_DISABLE 0
+#define EOCCNUWHITELISTAUTOUPGRADEEN_ENABLE 1
+
+#endif /* EOCCNUWHITELISTAUTOUPGRADEEN_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUWhiteListRegisterOnlineStatus (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCCNUWHITELISTREGISTERONLINESTATUS_ENUMS
+#define EOCCNUWHITELISTREGISTERONLINESTATUS_ENUMS
+
+#define EOCCNUWHITELISTREGISTERONLINESTATUS_OFFLINE 0
+#define EOCCNUWHITELISTREGISTERONLINESTATUS_ONLINE 1
+
+#endif /* EOCCNUWHITELISTREGISTERONLINESTATUS_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocCNUWhiteListRowStatus (RowStatus / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef ROWSTATUS_ENUMS
+#define ROWSTATUS_ENUMS
+
+#define ROWSTATUS_ACTIVE 1
+#define ROWSTATUS_NOTINSERVICE 2
+#define ROWSTATUS_NOTREADY 3
+#define ROWSTATUS_CREATEANDGO 4
+#define ROWSTATUS_CREATEANDWAIT 5
+#define ROWSTATUS_DESTROY 6
+
+#endif /* ROWSTATUS_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUWHITELISTTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_interface.c
new file mode 100644
index 0000000000..a392f86a69
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_interface.c
@@ -0,0 +1,2236 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocCNUWhiteListTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocCNUWhiteListTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocCNUWhiteListTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocCNUWhiteListTable is subid 6 of eocCNUWhiteList.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.5.1.6, length: 12
+*/
+typedef struct eocCNUWhiteListTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocCNUWhiteListTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocCNUWhiteListTable_interface_ctx;
+
+static eocCNUWhiteListTable_interface_ctx eocCNUWhiteListTable_if_ctx;
+
+static void _eocCNUWhiteListTable_container_init(
+ eocCNUWhiteListTable_interface_ctx *if_ctx);
+static void _eocCNUWhiteListTable_container_shutdown(
+ eocCNUWhiteListTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocCNUWhiteListTable_container_get( void )
+{
+ return eocCNUWhiteListTable_if_ctx.container;
+}
+
+eocCNUWhiteListTable_registration *
+eocCNUWhiteListTable_registration_get( void )
+{
+ return eocCNUWhiteListTable_if_ctx.user_ctx;
+}
+
+eocCNUWhiteListTable_registration *
+eocCNUWhiteListTable_registration_set( eocCNUWhiteListTable_registration * newreg )
+{
+ eocCNUWhiteListTable_registration * old = eocCNUWhiteListTable_if_ctx.user_ctx;
+ eocCNUWhiteListTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocCNUWhiteListTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocCNUWhiteListTable_if_ctx.container);
+}
+
+u_int
+eocCNUWhiteListTable_dirty_get( void )
+{
+ return eocCNUWhiteListTable_if_ctx.table_dirty;
+}
+
+void
+eocCNUWhiteListTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocCNUWhiteListTable:eocCNUWhiteListTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocCNUWhiteListTable_if_ctx.table_dirty, status));
+ eocCNUWhiteListTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListTable_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListTable_irreversible_commit;
+static Netsnmp_Node_Handler _mfd_eocCNUWhiteListTable_check_dependencies;
+
+
+NETSNMP_STATIC_INLINE int _eocCNUWhiteListTable_undo_column( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+NETSNMP_STATIC_INLINE int _eocCNUWhiteListTable_check_indexes(eocCNUWhiteListTable_rowreq_ctx * rowreq_ctx);
+
+
+
+/**
+ * common init of container for eocCNUWhiteListTable and spc300EoCSlaveWhiteListTable
+ */
+static void
+eoc_white_list_container_init (void)
+{
+ static int done = 0;
+
+ if (done)
+ return;
+
+ DEBUGMSGTL (("internal:eocCNUWhiteListTable:eoc_white_list_container_init",
+ "called\n"));
+
+ done = 1;
+
+ /*
+ * set up the container
+ */
+ _eocCNUWhiteListTable_container_init (&eocCNUWhiteListTable_if_ctx);
+}
+/**
+ * @internal
+ * Initialize the table eocCNUWhiteListTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocCNUWhiteListTable_initialize_interface(eocCNUWhiteListTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocCNUWhiteListTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocCNUWhiteListTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_eocCNUWhiteListTable_initialize_interface","called\n"));
+
+ (void) eoc_white_list_container_init ();
+ if (NULL == eocCNUWhiteListTable_if_ctx.container)
+ return;
+ /* msg already logged */
+
+ /*************************************************
+ *
+ * save interface context for eocCNUWhiteListTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocCNUWhiteListIndex */
+ ASN_INTEGER, /** index: eocCNUWhiteListCBATCardIndex */
+ ASN_INTEGER, /** index: eocCNUWhiteListCNUIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCCNUWHITELISTTABLE_MIN_COL;
+ tbl_info->max_column = EOCCNUWHITELISTTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocCNUWhiteListTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocCNUWhiteListTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocCNUWhiteListTable_container_init(&eocCNUWhiteListTable_if_ctx);
+ if (NULL == eocCNUWhiteListTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocCNUWhiteListTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocCNUWhiteListTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocCNUWhiteListTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocCNUWhiteListTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocCNUWhiteListTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks =
+ _mfd_eocCNUWhiteListTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocCNUWhiteListTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocCNUWhiteListTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocCNUWhiteListTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocCNUWhiteListTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocCNUWhiteListTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocCNUWhiteListTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocCNUWhiteListTable_irreversible_commit;
+
+
+ /*
+ * REQUIRED for tables with dependencies
+ */
+ access_multiplexer->consistency_checks =
+ _mfd_eocCNUWhiteListTable_check_dependencies;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocCNUWhiteListTable:init_eocCNUWhiteListTable",
+ "Registering eocCNUWhiteListTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocCNUWhiteListTable", handler,
+ eocCNUWhiteListTable_oid,
+ eocCNUWhiteListTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocCNUWhiteListTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocCNUWhiteListTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocCNUWhiteListTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocCNUWhiteListTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocCNUWhiteListTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocCNUWhiteListTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocCNUWhiteListTable
+ */
+void
+_eocCNUWhiteListTable_shutdown_interface(eocCNUWhiteListTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocCNUWhiteListTable_container_shutdown(&eocCNUWhiteListTable_if_ctx);
+}
+
+void
+eocCNUWhiteListTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocCNUWhiteListTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocCNUWhiteListTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocCNUWhiteListTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUWhiteListTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUWhiteListIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUWhiteListIndex;
+ /*
+ * eocCNUWhiteListCBATCardIndex(9)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUWhiteListCBATCardIndex;
+ /*
+ * eocCNUWhiteListCNUIndex(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUWhiteListCNUIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUWhiteListIndex, 0x00, sizeof(var_eocCNUWhiteListIndex) );
+ var_eocCNUWhiteListIndex.type = ASN_INTEGER;
+ memset( &var_eocCNUWhiteListCBATCardIndex, 0x00, sizeof(var_eocCNUWhiteListCBATCardIndex) );
+ var_eocCNUWhiteListCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocCNUWhiteListCNUIndex, 0x00, sizeof(var_eocCNUWhiteListCNUIndex) );
+ var_eocCNUWhiteListCNUIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUWhiteListIndex.next_variable =
+ &var_eocCNUWhiteListCBATCardIndex;
+ var_eocCNUWhiteListCBATCardIndex.next_variable =
+ &var_eocCNUWhiteListCNUIndex;
+ var_eocCNUWhiteListCNUIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_index_to_oid","called\n"));
+
+ /* eocCNUWhiteListIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCNUWhiteListIndex, (u_char*)&mib_idx->eocCNUWhiteListIndex,
+ sizeof(mib_idx->eocCNUWhiteListIndex));
+
+ /* eocCNUWhiteListCBATCardIndex(9)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocCNUWhiteListCBATCardIndex, (u_char*)&mib_idx->eocCNUWhiteListCBATCardIndex,
+ sizeof(mib_idx->eocCNUWhiteListCBATCardIndex));
+
+ /* eocCNUWhiteListCNUIndex(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ snmp_set_var_value(&var_eocCNUWhiteListCNUIndex, (u_char*)&mib_idx->eocCNUWhiteListCNUIndex,
+ sizeof(mib_idx->eocCNUWhiteListCNUIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocCNUWhiteListIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUWhiteListIndex );
+
+ return err;
+} /* eocCNUWhiteListTable_index_to_oid */
+
+/**
+ * extract eocCNUWhiteListTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocCNUWhiteListTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUWhiteListTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocCNUWhiteListIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUWhiteListIndex;
+ /*
+ * eocCNUWhiteListCBATCardIndex(9)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUWhiteListCBATCardIndex;
+ /*
+ * eocCNUWhiteListCNUIndex(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+ */
+ netsnmp_variable_list var_eocCNUWhiteListCNUIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocCNUWhiteListIndex, 0x00, sizeof(var_eocCNUWhiteListIndex) );
+ var_eocCNUWhiteListIndex.type = ASN_INTEGER;
+ memset( &var_eocCNUWhiteListCBATCardIndex, 0x00, sizeof(var_eocCNUWhiteListCBATCardIndex) );
+ var_eocCNUWhiteListCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocCNUWhiteListCNUIndex, 0x00, sizeof(var_eocCNUWhiteListCNUIndex) );
+ var_eocCNUWhiteListCNUIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocCNUWhiteListIndex.next_variable =
+ &var_eocCNUWhiteListCBATCardIndex;
+ var_eocCNUWhiteListCBATCardIndex.next_variable =
+ &var_eocCNUWhiteListCNUIndex;
+ var_eocCNUWhiteListCNUIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocCNUWhiteListIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ /*whitelist index use whitelist cnu index*/
+ //mib_idx->eocCNUWhiteListIndex = *((long *)var_eocCNUWhiteListIndex.val.string);
+ mib_idx->eocCNUWhiteListIndex = *((long *)var_eocCNUWhiteListCNUIndex.val.string);
+ mib_idx->eocCNUWhiteListCBATCardIndex = *((long *)var_eocCNUWhiteListCBATCardIndex.val.string);
+ mib_idx->eocCNUWhiteListCNUIndex = *((long *)var_eocCNUWhiteListCNUIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocCNUWhiteListIndex );
+
+ return err;
+} /* eocCNUWhiteListTable_index_from_oid */
+
+
+/*
+ * eocCNUWhiteListTable_allocate_data
+ *
+ * Purpose: create new eocCNUWhiteListTable_data.
+ */
+eocCNUWhiteListTable_data *
+eocCNUWhiteListTable_allocate_data(void)
+{
+ eocCNUWhiteListTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocCNUWhiteListTable_data);
+
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_allocate_data","called\n"));
+
+ if (NULL == rtn)
+ {
+ snmp_log (LOG_ERR, "unable to malloc memory for new "
+ "eocCNUWhiteListTable_data.\n");
+ }
+ else
+ {
+ /* initialization of fields added for container comparison */
+ rtn->oid_index.len = 1;
+ rtn->oid_index.oids = &rtn->wl_index;
+ }
+
+ return rtn;
+} /* eocCNUWhiteListTable_allocate_data */
+
+/*
+ * eocCNUWhiteListTable_release_data
+ *
+ * Purpose: release eocCNUWhiteListTable data.
+ */
+void
+eocCNUWhiteListTable_release_data(eocCNUWhiteListTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocCNUWhiteListTable:eocCNUWhiteListTable_release_data","called\n"));
+
+ if (NULL == data)
+ return;
+ free (data);
+} /* eocCNUWhiteListTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocCNUWhiteListTable_rowreq_ctx
+ */
+eocCNUWhiteListTable_rowreq_ctx *
+eocCNUWhiteListTable_allocate_rowreq_ctx (eocCNUWhiteListTable_data * data,
+ void *user_init_ctx)
+{
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocCNUWhiteListTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:eocCNUWhiteListTable_allocate_rowreq_ctx","called\n"));
+
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "Couldn't allocate memory for a "
+ "eocCNUWhiteListTable_rowreq_ctx.\n");
+ return NULL;
+ }
+ else
+ {
+ if (NULL != data)
+ {
+ /*
+ * track if we got data from user
+ */
+ DEBUGMSGTL (("internal:eocCNUWhiteListTable:eocCNUWhiteList",
+ "Table_allocate_rowreq_ctx",
+ "data got from user\n"));
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DATA_FROM_USER;
+ rowreq_ctx->data = data;
+ if (NULL == rowreq_ctx->data->eocCNUWhiteListIPAddress)
+ {
+ DEBUGMSGTL (("internal:eocCNUWhiteListTable:eocCNUWhiteList",
+ "Table_allocate_rowreq_ctx",
+ "MAC address null\n"));
+ /* row status set to notInService */
+ rowreq_ctx->data->eocCNUWhiteListRowStatus =
+ ROWSTATUS_NOTINSERVICE;
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG;
+ }
+
+ if (NULL == rowreq_ctx->data->eocCNUWhiteListMACAddress)
+ {
+ DEBUGMSGTL (("internal:eocCNUWhiteListTable:eocCNUWhiteList",
+ "Table_allocate_rowreq_ctx",
+ "MAC address null\n"));
+ /* row status set to notInService */
+ rowreq_ctx->data->eocCNUWhiteListRowStatus =
+ ROWSTATUS_NOTINSERVICE;
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUWHITELISTMACADDRESS_FLAG;
+ }
+
+ if (INVALID_EOCCNUWHITELISTAUTHORIZATION ==
+ rowreq_ctx->data->eocCNUWhiteListAuthorization)
+ {
+ DEBUGMSGTL (("internal:eocCNUWhiteListTable:eocCNUWhiteListT",
+ "able_allocate_rowreq_ctx",
+ "Authorization invalid\n"));
+ /* row status set to notInService */
+ rowreq_ctx->data->eocCNUWhiteListRowStatus =
+ ROWSTATUS_NOTINSERVICE;
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUWHITELISTAUTHORIZATION_FLAG;
+ }
+
+
+ if (INVALID_EOCCNUWHITELISTRFOUTPUTLEVEL ==
+ rowreq_ctx->data->eocCNUWhiteListRFOutputLevel)
+ {
+ DEBUGMSGTL (("internal:eocCNUWhiteListTable:eocCNUWhiteList",
+ "Table_allocate_rowreq_ctx",
+ "RF Output invalid\n"));
+ /* row status set to notInService */
+ rowreq_ctx->data->eocCNUWhiteListRowStatus =
+ ROWSTATUS_NOTINSERVICE;
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL_FLAG;
+ }
+
+ if (INVALID_EOCCNUWHITELISTAUTOUPGRADEEN ==
+ rowreq_ctx->data->eocCNUWhiteListAutoUpgradeEN)
+ {
+ DEBUGMSGTL (("internal:eocCNUWhiteListTable:eocCNUWhiteList",
+ "Table_allocate_rowreq_ctx",
+ "Auto Upgrade Enable invalid\n"));
+ /* row status set to notInService */
+ rowreq_ctx->data->eocCNUWhiteListRowStatus =
+ ROWSTATUS_NOTINSERVICE;
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN_FLAG;
+ }
+
+ /* set Online State as existing */
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUWHITELISTREGISTERONLINESTATUS_FLAG;
+#ifdef USING_SPC300_EOC_MIB_MODULE
+ /* fields specific to SPC300EoC WL Table extension */
+ if (!strcmp
+ (rowreq_ctx->data->spc300EoCSlaveWhiteListDevicePassword, ""))
+ {
+ DEBUGMSGTL (("internal:spc300EoCSlaveWhiteListTable:",
+ "spc300EoCSlaveWhiteListTable_allocate_rowreq_ctx",
+ "DPW null\n"));
+ /* row status set to notInService */
+ rowreq_ctx->data->eocCNUWhiteListRowStatus =
+ ROWSTATUS_NOTINSERVICE;
+ }
+ else
+ {
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_SPC300EOCSLAVEWHITELISTDEVICEPASSWORD_FLAG;
+ }
+#endif /* USING_SPC300_EOC_MIB_MODULE */
+ /* Row Status flag set to existing for allocation purposes */
+ rowreq_ctx->column_exists_flags |=
+ COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG;
+ }
+ else if (NULL == (rowreq_ctx->data =
+ eocCNUWhiteListTable_allocate_data ()))
+ {
+ SNMP_FREE (rowreq_ctx);
+ return NULL;
+ }
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocCNUWhiteListTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER))
+ {
+ if (SNMPERR_SUCCESS !=
+ eocCNUWhiteListTable_rowreq_ctx_init (rowreq_ctx, user_init_ctx))
+ {
+ eocCNUWhiteListTable_release_rowreq_ctx (rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocCNUWhiteListTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocCNUWhiteListTable_rowreq_ctx
+ */
+void
+eocCNUWhiteListTable_release_rowreq_ctx(eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:eocCNUWhiteListTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocCNUWhiteListTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ /*
+ * for non-transient data, don't free data we got from the user
+ */
+ if ((rowreq_ctx->data) &&
+ !(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER))
+ {
+ eocCNUWhiteListTable_release_data (rowreq_ctx->data);
+ }
+
+ if (rowreq_ctx->undo)
+ {
+ eocCNUWhiteListTable_release_data (rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+ /*
+ * free index oid pointer
+ */
+ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free (rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE (rowreq_ctx);
+} /* eocCNUWhiteListTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUWhiteListTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocCNUWhiteListTable_pre_request(eocCNUWhiteListTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUWhiteListTable","error %d from "
+ "eocCNUWhiteListTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUWhiteListTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocCNUWhiteListTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocCNUWhiteListTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocCNUWhiteListTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocCNUWhiteListTable_post_request(eocCNUWhiteListTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUWhiteListTable","error %d from "
+ "eocCNUWhiteListTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static eocCNUWhiteListTable_rowreq_ctx *
+_mfd_eocCNUWhiteListTable_rowreq_from_index(netsnmp_index *oid_idx, int * rc_ptr)
+{
+ eocCNUWhiteListTable_rowreq_ctx * rowreq_ctx;
+ eocCNUWhiteListTable_mib_index mib_idx;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_rowreq_from_index",
+ "called\n"));
+
+ if (NULL == rc_ptr)
+ rc_ptr = &rc;
+ *rc_ptr = MFD_SUCCESS;
+
+ memset(&mib_idx, 0x0, sizeof(mib_idx));
+
+ /*
+ * try to parse oid
+ */
+ *rc_ptr = eocCNUWhiteListTable_index_from_oid(oid_idx, &mib_idx);
+ if(MFD_SUCCESS != *rc_ptr) {
+ DEBUGMSGT(("eocCNUWhiteListTable", "error parsing index\n"));
+ return NULL;
+ }
+
+ /*
+ * allocate new context
+ */
+ rowreq_ctx = eocCNUWhiteListTable_allocate_rowreq_ctx (NULL, NULL);
+ if (NULL == rowreq_ctx) {
+ *rc_ptr = MFD_ERROR;
+ return NULL; /* msg already logged */
+ }
+
+ memcpy(&rowreq_ctx->tbl_idx, &mib_idx, sizeof(mib_idx));
+
+ /*
+ * check indexes
+ */
+ *rc_ptr = _eocCNUWhiteListTable_check_indexes(rowreq_ctx);
+ if(MFD_SUCCESS != *rc_ptr) {
+ netsnmp_assert((*rc_ptr == SNMP_ERR_NOCREATION) ||
+ (*rc_ptr == SNMP_ERR_INCONSISTENTNAME));
+ eocCNUWhiteListTable_release_rowreq_ctx(rowreq_ctx);
+ return NULL;
+ }
+
+ /*
+ * copy indexes
+ */
+ rowreq_ctx->oid_idx.len = oid_idx->len;
+ memcpy(rowreq_ctx->oid_idx.oids, oid_idx->oids, oid_idx->len * sizeof(oid));
+
+ return rowreq_ctx;
+} /* _mfd_eocCNUWhiteListTable_rowreq_from_index */
+
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocCNUWhiteListTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocCNUWhiteListTable_interface_ctx *if_ctx =
+ * (eocCNUWhiteListTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ netsnmp_table_request_info *tblreq_info;
+ netsnmp_index oid_idx;
+
+ tblreq_info = netsnmp_extract_table_info(requests);
+ if(NULL == tblreq_info) {
+ snmp_log(LOG_ERR, "request had no table info\n");
+ return MFD_ERROR;
+ }
+
+ /*
+ * try create rowreq
+ */
+ oid_idx.oids = tblreq_info->index_oid;
+ oid_idx.len = tblreq_info->index_oid_len;
+
+ rowreq_ctx = _mfd_eocCNUWhiteListTable_rowreq_from_index(&oid_idx, &rc);
+ if(MFD_SUCCESS == rc) {
+ netsnmp_assert(NULL != rowreq_ctx);
+ rowreq_ctx->rowreq_flags |= MFD_ROW_CREATED;
+ /*
+ * add rowreq_ctx to request data lists
+ */
+ netsnmp_container_table_row_insert(requests, (netsnmp_index*)rowreq_ctx);
+ }
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocCNUWhiteListTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocCNUWhiteListTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUWhiteListTable_get_column( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocCNUWhiteListIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCNUWhiteListIndex;
+ break;
+
+ /* (INDEX) eocCNUWhiteListCBATCardIndex(9)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCBATCARDINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCNUWhiteListCBATCardIndex;
+ break;
+
+ /* (INDEX) eocCNUWhiteListCNUIndex(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCNUINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocCNUWhiteListCNUIndex;
+ break;
+
+ /* eocCNUWhiteListIPAddress(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTIPADDRESS:
+ if (! (COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_get_column",
+ "column %d (eocCNUWhiteListIPAddress) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->type = ASN_IPADDRESS;
+rc = eocCNUWhiteListIPAddress_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCNUWhiteListMACAddress(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTMACADDRESS:
+ if (! (COLUMN_EOCCNUWHITELISTMACADDRESS_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_get_column",
+ "column %d (eocCNUWhiteListMACAddress) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->type = ASN_OCTET_STR;
+rc = eocCNUWhiteListMACAddress_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocCNUWhiteListAuthorization(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTAUTHORIZATION:
+ if (! (COLUMN_EOCCNUWHITELISTAUTHORIZATION_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_get_column",
+ "column %d (eocCNUWhiteListAuthorization) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUWhiteListAuthorization_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUWhiteListRFOutputLevel(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL:
+ if (! (COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_get_column",
+ "column %d (eocCNUWhiteListRFOutputLevel) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocCNUWhiteListRFOutputLevel_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ /* eocCNUWhiteListAutoUpgradeEN(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN:
+ if (! (COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_get_column",
+ "column %d (eocCNUWhiteListAutoUpgradeEN) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUWhiteListAutoUpgradeEN_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUWhiteListRegisterOnlineStatus(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTREGISTERONLINESTATUS:
+ if (! (COLUMN_EOCCNUWHITELISTREGISTERONLINESTATUS_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_get_column",
+ "column %d (eocCNUWhiteListRegisterOnlineStatus) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUWhiteListRegisterOnlineStatus_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocCNUWhiteListRowStatus(8)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTROWSTATUS:
+ if (! (COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG & rowreq_ctx->column_exists_flags)) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_get_column",
+ "column %d (eocCNUWhiteListRowStatus) doesn't exist\n", column));
+ return MFD_SKIP;
+ }
+
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocCNUWhiteListRowStatus_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ default:
+ if (EOCCNUWHITELISTTABLE_MIN_COL <= column && column <= EOCCNUWHITELISTTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocCNUWhiteListTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocCNUWhiteListTable_get_column */
+
+int
+_mfd_eocCNUWhiteListTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ DEBUGMSGTL(("9:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_get_values",
+ "exists %p\n", (void*)rowreq_ctx->column_exists_flags));
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUWhiteListTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListTable_get_values */
+
+NETSNMP_STATIC_INLINE int
+_eocCNUWhiteListTable_check_indexes(eocCNUWhiteListTable_rowreq_ctx * rowreq_ctx)
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_eocCNUWhiteListTable_check_indexes","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+
+ /* (INDEX) eocCNUWhiteListIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = eocCNUWhiteListIndex_check_index( rowreq_ctx );
+ if(MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /* (INDEX) eocCNUWhiteListCBATCardIndex(9)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = eocCNUWhiteListCBATCardIndex_check_index( rowreq_ctx );
+ if(MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /* (INDEX) eocCNUWhiteListCNUIndex(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ if (MFD_SUCCESS != rc)
+ return rc;
+ rc = eocCNUWhiteListCNUIndex_check_index( rowreq_ctx );
+ if(MFD_SUCCESS != rc)
+ return SNMP_ERR_NOCREATION;
+
+ /*
+ * if individual parts look ok, check them as a whole
+ */
+ return eocCNUWhiteListTable_validate_index( eocCNUWhiteListTable_if_ctx.user_ctx, rowreq_ctx );
+} /* _eocCNUWhiteListTable_check_indexes */
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUWhiteListTable_check_column( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_eocCNUWhiteListTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocCNUWhiteListIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /* (INDEX) eocCNUWhiteListCBATCardIndex(9)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCBATCARDINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /* (INDEX) eocCNUWhiteListCNUIndex(10)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTCNUINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocCNUWhiteListIPAddress(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTIPADDRESS:
+ rc = netsnmp_check_vb_type_and_max_size (
+ var, ASN_IPADDRESS,
+ sizeof (rowreq_ctx->data->eocCNUWhiteListIPAddress));
+
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListTable:_eocCNUWhiteListTable_check_column:eocCNUWhiteListIPAddress",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUWhiteListIPAddress_check_value( rowreq_ctx, (char *)var->val.string, var->val_len );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUWhiteListIPAddress_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUWhiteListMACAddress(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTMACADDRESS:
+ rc = netsnmp_check_vb_type_and_max_size (
+ var, ASN_OCTET_STR,
+ sizeof (rowreq_ctx->data->eocCNUWhiteListMACAddress));
+ /*
+ * check defined range(s).
+ */
+ if ((SNMPERR_SUCCESS == rc) && (var->val_len != 6))
+ {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListTable:_eocCNUWhiteListTable_check_column:eocCNUWhiteListMACAddress",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUWhiteListMACAddress_check_value( rowreq_ctx, (char *)var->val.string, var->val_len );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUWhiteListMACAddress_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUWhiteListAuthorization(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTAUTHORIZATION:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof (rowreq_ctx->data->eocCNUWhiteListAuthorization) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCNUWHITELISTAUTHORIZATION_NOT_AUTHORIZED )
+ && ( *var->val.integer != EOCCNUWHITELISTAUTHORIZATION_AUTHORIZED )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListTable:_eocCNUWhiteListTable_check_column:eocCNUWhiteListAuthorization",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUWhiteListAuthorization_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUWhiteListAuthorization_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUWhiteListRFOutputLevel(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof (rowreq_ctx->data->eocCNUWhiteListRFOutputLevel) );
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListTable:_eocCNUWhiteListTable_check_column:eocCNUWhiteListRFOutputLevel",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUWhiteListRFOutputLevel_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUWhiteListRFOutputLevel_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUWhiteListAutoUpgradeEN(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof (rowreq_ctx->data->eocCNUWhiteListAutoUpgradeEN) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCCNUWHITELISTAUTOUPGRADEEN_DISABLE )
+ && ( *var->val.integer != EOCCNUWHITELISTAUTOUPGRADEEN_ENABLE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListTable:_eocCNUWhiteListTable_check_column:eocCNUWhiteListAutoUpgradeEN",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUWhiteListAutoUpgradeEN_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUWhiteListAutoUpgradeEN_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocCNUWhiteListRegisterOnlineStatus(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTREGISTERONLINESTATUS:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocCNUWhiteListRowStatus(8)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTROWSTATUS:
+rc = netsnmp_check_vb_rowstatus_value(var);
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListTable:_eocCNUWhiteListTable_check_column:eocCNUWhiteListRowStatus",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocCNUWhiteListRowStatus_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocCNUWhiteListRowStatus_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocCNUWhiteListTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocCNUWhiteListTable_check_column */
+
+int
+_mfd_eocCNUWhiteListTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUWhiteListTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListTable_check_objects */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: check dependencies
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check dependencies wrapper
+ */
+static int
+_mfd_eocCNUWhiteListTable_check_dependencies (netsnmp_mib_handler
+ * handler,
+ netsnmp_handler_registration
+ * reginfo,
+ netsnmp_agent_request_info
+ * agtreq_info,
+ netsnmp_request_info * requests)
+{
+ int rc;
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract (requests);
+ DEBUGMSGTL (("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteList",
+ "Table_check_dependencies", "called\n"));
+
+ netsnmp_assert (NULL != rowreq_ctx);
+
+ rc = eocCNUWhiteListTable_check_dependencies (rowreq_ctx);
+ if (rc)
+ {
+ DEBUGMSGTL (("eocCNUWhiteListTable:mfd", "error %d from "
+ "eocCNUWhiteListTable_check_dependencies\n", rc));
+ netsnmp_request_set_error_all (requests, SNMP_VALIDATE_ERR (rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+}/* _mfd_eocCNUWhiteListTable_check_dependencies */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUWhiteListTable_undo_setup_column( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_eocCNUWhiteListTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUWhiteListIPAddress(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTIPADDRESS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG;
+ rc = eocCNUWhiteListIPAddress_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUWhiteListMACAddress(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTMACADDRESS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTMACADDRESS_FLAG;
+ rc = eocCNUWhiteListMACAddress_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUWhiteListAuthorization(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTAUTHORIZATION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTAUTHORIZATION_FLAG;
+ rc = eocCNUWhiteListAuthorization_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUWhiteListRFOutputLevel(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL_FLAG;
+ rc = eocCNUWhiteListRFOutputLevel_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUWhiteListAutoUpgradeEN(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN_FLAG;
+ rc = eocCNUWhiteListAutoUpgradeEN_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocCNUWhiteListRowStatus(8)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTROWSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG;
+ rc = eocCNUWhiteListRowStatus_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUWhiteListTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUWhiteListTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUWhiteListTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocCNUWhiteListTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocCNUWhiteListTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListTable:mfd","error %d from "
+ "eocCNUWhiteListTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUWhiteListTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListTable:mfd","error %d from "
+ "eocCNUWhiteListTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocCNUWhiteListTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocCNUWhiteListTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUWhiteListTable:mfd","error %d from "
+ "eocCNUWhiteListTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if(rowreq_ctx->undo) {
+ eocCNUWhiteListTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUWhiteListTable_set_column( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_eocCNUWhiteListTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUWhiteListIPAddress(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTIPADDRESS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG;
+ rc = eocCNUWhiteListIPAddress_set(rowreq_ctx, (char *)var->val.string, var->val_len );
+ break;
+
+ /* eocCNUWhiteListMACAddress(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTMACADDRESS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTMACADDRESS_FLAG;
+ rc = eocCNUWhiteListMACAddress_set(rowreq_ctx, (char *)var->val.string, var->val_len );
+ break;
+
+ /* eocCNUWhiteListAuthorization(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTAUTHORIZATION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTAUTHORIZATION_FLAG;
+ rc = eocCNUWhiteListAuthorization_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCNUWhiteListRFOutputLevel(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL_FLAG;
+ rc = eocCNUWhiteListRFOutputLevel_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ /* eocCNUWhiteListAutoUpgradeEN(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN_FLAG;
+ rc = eocCNUWhiteListAutoUpgradeEN_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocCNUWhiteListRowStatus(8)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTROWSTATUS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG;
+ rc = eocCNUWhiteListRowStatus_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUWhiteListTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocCNUWhiteListTable_set_column */
+
+int
+_mfd_eocCNUWhiteListTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUWhiteListTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListTable:mfd","error %d from "
+ "eocCNUWhiteListTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocCNUWhiteListTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUWhiteListTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocCNUWhiteListTable:mfd","error %d from "
+ "eocCNUWhiteListTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocCNUWhiteListTable_dirty_set( eocCNUWhiteListTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocCNUWhiteListTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocCNUWhiteListTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocCNUWhiteListTable_dirty_set( d - 1 );
+ }
+
+ rc = eocCNUWhiteListTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUWhiteListTable:mfd","error %d from "
+ "eocCNUWhiteListTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocCNUWhiteListTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocCNUWhiteListTable_undo_column( eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_eocCNUWhiteListTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocCNUWhiteListIPAddress(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTIPADDRESS:
+ rc = eocCNUWhiteListIPAddress_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUWhiteListMACAddress(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTMACADDRESS:
+ rc = eocCNUWhiteListMACAddress_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUWhiteListAuthorization(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTAUTHORIZATION:
+ rc = eocCNUWhiteListAuthorization_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUWhiteListRFOutputLevel(5)/INTEGER/ASN_INTEGER/long(long)//l/A/W/e/r/d/h */
+ case COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL:
+ rc = eocCNUWhiteListRFOutputLevel_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUWhiteListAutoUpgradeEN(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN:
+ rc = eocCNUWhiteListAutoUpgradeEN_undo(rowreq_ctx);
+ break;
+
+ /* eocCNUWhiteListRowStatus(8)/RowStatus/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCCNUWHITELISTROWSTATUS:
+ rc = eocCNUWhiteListRowStatus_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocCNUWhiteListTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocCNUWhiteListTable_undo_column */
+
+int
+_mfd_eocCNUWhiteListTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocCNUWhiteListTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUWhiteListTable:mfd","error %d from "
+ "eocCNUWhiteListTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocCNUWhiteListTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocCNUWhiteListTable:mfd","error %d from "
+ "eocCNUWhiteListTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocCNUWhiteListTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_eocCNUWhiteListTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocCNUWhiteListTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_mfd_irreversible_commit",
+ "updating exists (%p) w/set (%p) = %p\n",
+ rowreq_ctx->column_exists_flags,
+ rowreq_ctx->column_set_flags,
+ (rowreq_ctx->column_exists_flags |
+ rowreq_ctx->column_set_flags)));
+ rowreq_ctx->column_exists_flags |=
+ rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+ }
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_CREATED;
+ CONTAINER_INSERT(eocCNUWhiteListTable_if_ctx.container, rowreq_ctx);
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocCNUWhiteListTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocCNUWhiteListTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ /* do not load cache if new row is currently being added */
+ if (eoc_adding_row)
+ {
+ snmp_log (LOG_ERR, "skipping eocCNUWhiteListTable_cache_load,"
+ " row adding in progress\n");
+ return SNMP_ERR_NOERROR;
+ }
+ else
+ {
+ return eocCNUWhiteListTable_container_load ((netsnmp_container *)
+ cache->magic);
+ }
+
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_cache_free","called\n"));
+
+ if ((NULL == cache) || (NULL == cache->magic))
+ {
+ snmp_log (LOG_ERR,
+ "invalid cache in eocCNUWhiteListTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container *) cache->magic;
+ /* do not free cache if new row is currently being added */
+ if (!eoc_adding_row)
+ {
+ _container_free (container);
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "skipping eocCNUWhiteListTable_cache_free,"
+ " row adding in progress\n");
+ }
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free (eocCNUWhiteListTable_rowreq_ctx * rowreq_ctx,
+ void *context)
+{
+ DEBUGMSGTL (("internal:eocCNUWhiteListTable:_container_item_free",
+ "called\n"));
+
+ char key_buffer[LIBSPID_KEY_MAX_LEN];
+ int ret;
+ if (NULL == rowreq_ctx)
+ return;
+
+ /* convert MAC address from bin to string to serve as key for removing */
+ ret = libspid_mac_bin_to_str (rowreq_ctx->data->eocCNUWhiteListMACAddress,
+ key_buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ }
+
+ /* remove MAC address of current item from internal storage list */
+ if (NULL != se_find_slist ("eoc_white_list"))
+ {
+ ret = se_remove_label_from_slist ("eoc_white_list", key_buffer);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR,
+ "Error! MAC address not found in the table!\n");
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "Trying to delete from empty MAC address list!\n");
+ }
+
+ /* convert IP address from bin to string to serve as key for removing */
+ ret = libspid_ip_bin_to_str (rowreq_ctx->data->eocCNUWhiteListIPAddress,
+ key_buffer);
+ /* remove IP address of current item from internal storage list */
+ if (strcmp (key_buffer, LIBSPID_EOC_WL_IP_DEFAULT))
+ {
+ if (NULL != se_find_slist ("eoc_white_list_ip"))
+ {
+ ret = se_remove_label_from_slist ("eoc_white_list_ip", key_buffer);
+ if (ret == SE_DNE)
+ {
+ snmp_log (LOG_ERR, "Error! IP address not found in the table!\n");
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "Trying to delete from empty IP address list!\n");
+ }
+ }
+
+ eocCNUWhiteListTable_release_rowreq_ctx (rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocCNUWhiteListTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocCNUWhiteListTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocCNUWhiteListTable_container_init(eocCNUWhiteListTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_eocCNUWhiteListTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocCNUWhiteListTable_oid,
+ eocCNUWhiteListTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocCNUWhiteListTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocCNUWhiteListTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocCNUWhiteListTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocCNUWhiteListTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocCNUWhiteListTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocCNUWhiteListTable_container_shutdown(eocCNUWhiteListTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocCNUWhiteListTable:_eocCNUWhiteListTable_container_shutdown","called\n"));
+
+ eocCNUWhiteListTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocCNUWhiteListTable_container_shutdown */
+
+
+eocCNUWhiteListTable_rowreq_ctx *
+eocCNUWhiteListTable_row_find_by_mib_index(eocCNUWhiteListTable_mib_index *mib_idx)
+{
+ eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocCNUWhiteListTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocCNUWhiteListTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_interface.h
new file mode 100644
index 0000000000..bef9b420c8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_interface.h
@@ -0,0 +1,92 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCCNUWHITELISTTABLE_INTERFACE_H
+#define EOCCNUWHITELISTTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocCNUWhiteListTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocCNUWhiteListTable_initialize_interface(eocCNUWhiteListTable_registration * user_ctx,
+ u_long flags);
+void _eocCNUWhiteListTable_shutdown_interface(eocCNUWhiteListTable_registration * user_ctx);
+
+eocCNUWhiteListTable_registration *
+eocCNUWhiteListTable_registration_get( void );
+
+eocCNUWhiteListTable_registration *
+eocCNUWhiteListTable_registration_set( eocCNUWhiteListTable_registration * newreg );
+
+netsnmp_container *eocCNUWhiteListTable_container_get( void );
+int eocCNUWhiteListTable_container_size( void );
+
+u_int eocCNUWhiteListTable_dirty_get( void );
+void eocCNUWhiteListTable_dirty_set( u_int status );
+
+
+eocCNUWhiteListTable_data *eocCNUWhiteListTable_allocate_data (void);
+/* TEMP: added data as an argument (as in ipAddressTableInterface) */
+eocCNUWhiteListTable_rowreq_ctx *
+eocCNUWhiteListTable_allocate_rowreq_ctx (eocCNUWhiteListTable_data *, void *);
+
+void eocCNUWhiteListTable_release_rowreq_ctx(eocCNUWhiteListTable_rowreq_ctx *rowreq_ctx);
+
+int eocCNUWhiteListTable_index_to_oid(netsnmp_index *oid_idx,
+ eocCNUWhiteListTable_mib_index *mib_idx);
+int eocCNUWhiteListTable_index_from_oid(netsnmp_index *oid_idx,
+ eocCNUWhiteListTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocCNUWhiteListTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUWHITELISTTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_oids.h
new file mode 100644
index 0000000000..37fdb49968
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocCNUGroup/eocCNUWhiteList/eocCNUWhiteListTable/eocCNUWhiteListTable_oids.h
@@ -0,0 +1,85 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCCNUWHITELISTTABLE_OIDS_H
+#define EOCCNUWHITELISTTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* definitions for scalars added to table modEoCCNUWhiteListTable */
+#define EOCCNUWHITELISTAMOUNTLIMITATION_OID 1,3,6,1,4,1,17409,2,4,5,1,1
+#define EOCCNUWHITELISTREGISTEREDAMOUNT_OID 1,3,6,1,4,1,17409,2,4,5,1,2
+
+/* column number definitions for table eocCNUWhiteListTable */
+#define EOCCNUWHITELISTTABLE_OID 1,3,6,1,4,1,17409,2,4,5,1,6
+
+
+#define COLUMN_EOCCNUWHITELISTINDEX 1
+
+#define COLUMN_EOCCNUWHITELISTIPADDRESS 2
+#define COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG (0x1 << 0)
+
+#define COLUMN_EOCCNUWHITELISTMACADDRESS 3
+#define COLUMN_EOCCNUWHITELISTMACADDRESS_FLAG (0x1 << 1)
+
+#define COLUMN_EOCCNUWHITELISTAUTHORIZATION 4
+#define COLUMN_EOCCNUWHITELISTAUTHORIZATION_FLAG (0x1 << 2)
+
+#define COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL 5
+#define COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL_FLAG (0x1 << 3)
+
+#define COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN 6
+#define COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN_FLAG (0x1 << 4)
+
+#define COLUMN_EOCCNUWHITELISTREGISTERONLINESTATUS 7
+#define COLUMN_EOCCNUWHITELISTREGISTERONLINESTATUS_FLAG (0x01 << 5)
+
+
+#define COLUMN_EOCCNUWHITELISTROWSTATUS 8
+#define COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG (0x1 << 6)
+
+#define COLUMN_EOCCNUWHITELISTCBATCARDINDEX 9
+
+#define COLUMN_EOCCNUWHITELISTCNUINDEX 10
+#define COLUMN_EOCCNUWHITELISTCNUINDEX_FLAG (0x1 << 7)
+
+
+#define EOCCNUWHITELISTTABLE_MIN_COL COLUMN_EOCCNUWHITELISTINDEX
+#define EOCCNUWHITELISTTABLE_MAX_COL COLUMN_EOCCNUWHITELISTCNUINDEX
+
+
+ /*
+ * TODO:405:r: Review EOCCNUWHITELISTTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCCNUWHITELISTTABLE_SETTABLE_COLS \
+ (COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG | \
+ COLUMN_EOCCNUWHITELISTMACADDRESS_FLAG | \
+ COLUMN_EOCCNUWHITELISTAUTHORIZATION_FLAG | \
+ COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL_FLAG | \
+ COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN_FLAG | \
+ COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG )
+ /*
+ * TODO:405:r: Review EOCCNUWHITELISTTABLE_REQUIRED_COLS macro.
+ * OR together all the required rows for row creation.
+ * default is writable cols w/out defaults.
+ */
+#define EOCCNUWHITELISTTABLE_REQUIRED_COLS \
+ (COLUMN_EOCCNUWHITELISTIPADDRESS_FLAG | \
+ COLUMN_EOCCNUWHITELISTMACADDRESS_FLAG | \
+ COLUMN_EOCCNUWHITELISTAUTHORIZATION_FLAG | \
+ COLUMN_EOCCNUWHITELISTRFOUTPUTLEVEL_FLAG | \
+ COLUMN_EOCCNUWHITELISTAUTOUPGRADEEN_FLAG | \
+ COLUMN_EOCCNUWHITELISTROWSTATUS_FLAG )
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCCNUWHITELISTTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects.h
new file mode 100644
index 0000000000..cb95b07bf3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects.h
@@ -0,0 +1,2 @@
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects)
+config_require(mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects.h
new file mode 100644
index 0000000000..af9212d0d5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects.h
@@ -0,0 +1 @@
+config_require(mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects.h
new file mode 100644
index 0000000000..0ee71ba99d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects.h
@@ -0,0 +1 @@
+config_require(mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects/eocExtOcnBcmpGlobalObjects)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects/eocExtOcnBcmpGlobalObjects.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects/eocExtOcnBcmpGlobalObjects.c
new file mode 100644
index 0000000000..f921eec728
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects/eocExtOcnBcmpGlobalObjects.c
@@ -0,0 +1,241 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37: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 "eocExtOcnBcmpGlobalObjects.h"
+
+/** Initializes the eocExtOcnBcmpGlobalObjects module */
+void
+init_eocExtOcnBcmpGlobalObjects(void)
+{
+ static oid eocExtOcnBcmpEnable_oid[] = { 1,3,6,1,4,1,17409,2,4,20,2,1,1 };
+ static oid eocExtOcnBcmpVersion_oid[] = { 1,3,6,1,4,1,17409,2,4,20,2,1,2 };
+
+ DEBUGMSGTL(("eocExtOcnBcmpGlobalObjects", "Initializing\n"));
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocExtOcnBcmpEnable", handle_eocExtOcnBcmpEnable,
+ eocExtOcnBcmpEnable_oid, OID_LENGTH(eocExtOcnBcmpEnable_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocExtOcnBcmpVersion", handle_eocExtOcnBcmpVersion,
+ eocExtOcnBcmpVersion_oid, OID_LENGTH(eocExtOcnBcmpVersion_oid),
+ HANDLER_CAN_RONLY
+ ));
+}
+
+int
+handle_eocExtOcnBcmpEnable(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+ bcmp_enable_t bcmp_enable;
+ int *bcmp_enable_save = NULL;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ long value;
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_BCMP_ENABLE,
+ buffer, LIBSPID_LINE_MAX_LEN);
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ bcmp_enable = BCMP_ENABLE_NO;
+ }
+ else
+ {
+ if (!strncmp (buffer, LIBSPID_SYSTEM_CONF_VALUE_YES,
+ strlen (LIBSPID_SYSTEM_CONF_VALUE_YES)))
+ {
+ bcmp_enable = BCMP_ENABLE_YES;
+ }
+ else
+ {
+ bcmp_enable = BCMP_ENABLE_NO;
+ }
+ }
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) &bcmp_enable,
+ sizeof (bcmp_enable));
+ break;
+ case MODE_SET_RESERVE1:
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_INTEGER);
+ if ( ret != SNMP_ERR_NOERROR )
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret );
+ }
+ ret = netsnmp_check_vb_range (
+ requests->requestvb,
+ BCMP_ENABLE_YES,
+ BCMP_ENABLE_NO);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_BCMP_ENABLE,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ bcmp_enable = BCMP_ENABLE_NO;
+ }
+ else
+ {
+ if (!strncmp (buffer, LIBSPID_SYSTEM_CONF_VALUE_YES,
+ strlen (LIBSPID_SYSTEM_CONF_VALUE_YES)))
+ {
+ bcmp_enable = BCMP_ENABLE_YES;
+ }
+ else
+ {
+ bcmp_enable = BCMP_ENABLE_NO;
+ }
+ }
+
+ memdup ((u_char **) &bcmp_enable_save,
+ (u_char *) &bcmp_enable,
+ sizeof (bcmp_enable));
+
+ if ( NULL == bcmp_enable_save)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list
+ ("bcmp", bcmp_enable_save,
+ free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /* free resources allocated in RESERVE1 and/or
+ RESERVE2. Something failed somewhere, and the states
+ below won't be called. */
+ break;
+
+ case MODE_SET_ACTION:
+ value = *(requests->requestvb->val.integer);
+ switch (value)
+ {
+ case BCMP_ENABLE_YES:
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_BCMP_ENABLE,
+ LIBSPID_SYSTEM_CONF_VALUE_YES);
+ break;
+ case BCMP_ENABLE_NO:
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_BCMP_ENABLE,
+ LIBSPID_SYSTEM_CONF_VALUE_NO);
+ break;
+ default:
+ ret = LIBSPID_ERROR_CHECK;
+ break;
+ }
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+
+ break;
+
+ case MODE_SET_COMMIT:
+ break;
+
+ case MODE_SET_UNDO:
+ value = *((long *) netsnmp_request_get_list_data (requests, "bcmp"));
+
+ switch (value)
+ {
+ case BCMP_ENABLE_YES:
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_BCMP_ENABLE,
+ LIBSPID_SYSTEM_CONF_VALUE_YES);
+ break;
+ case BCMP_ENABLE_NO:
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_BCMP_ENABLE,
+ LIBSPID_SYSTEM_CONF_VALUE_NO);
+ break;
+ default:
+ ret = LIBSPID_ERROR_CHECK;
+ break;
+ }
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+
+ break;
+
+ default:
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocExtOcnBcmpEnable\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+int
+handle_eocExtOcnBcmpVersion(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ char * bcmp_version = EOC_BCMP_VERSION;
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ (u_char *) bcmp_version,
+ sizeof (bcmp_version));
+ break;
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR,
+ "unknown mode (%d) in handle_eocExtOcnBcmpVersion\n",
+ reqinfo->mode );
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects/eocExtOcnBcmpGlobalObjects.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects/eocExtOcnBcmpGlobalObjects.h
new file mode 100644
index 0000000000..52fcde587c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtBcmpObjects/eocExtOcnBcmpGlobalObjects/eocExtOcnBcmpGlobalObjects.h
@@ -0,0 +1,16 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+ */
+#ifndef EOCEXTOCNBCMPGLOBALOBJECTS_H
+#define EOCEXTOCNBCMPGLOBALOBJECTS_H
+
+/* include common header */
+#include "EoCCommon.h"
+
+/* function declarations */
+void init_eocExtOcnBcmpGlobalObjects(void);
+Netsnmp_Node_Handler handle_eocExtOcnBcmpEnable;
+Netsnmp_Node_Handler handle_eocExtOcnBcmpVersion;
+
+#endif /* EOCEXTOCNBCMPGLOBALOBJECTS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects.h
new file mode 100644
index 0000000000..5aac919893
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects.h
@@ -0,0 +1,2 @@
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects)
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects.h
new file mode 100644
index 0000000000..15e201fa33
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects.h
@@ -0,0 +1,2 @@
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable)
+//config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable.h
new file mode 100644
index 0000000000..d677c9a104
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable.h
@@ -0,0 +1,5 @@
+//config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable)
+//config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_access)
+//config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_set)
+//config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_interface)
+//config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_get)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoCbatCardIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoCbatCardIndex.m2d
new file mode 100644
index 0000000000..756a107138
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoCbatCardIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuSubCarrierModuInfoCbatCardIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoCnuIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoCnuIndex.m2d
new file mode 100644
index 0000000000..46ff689a97
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoCnuIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuSubCarrierModuInfoCnuIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoList.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoList.m2d
new file mode 100644
index 0000000000..d22093d184
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoList.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuSubCarrierModuInfoList
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoSeq.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoSeq.m2d
new file mode 100644
index 0000000000..2da40a5d83
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/node-eocExtCnuSubCarrierModuInfoSeq.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuSubCarrierModuInfoSeq
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/table-eocExtCnuSubCarrierModuInfoTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/table-eocExtCnuSubCarrierModuInfoTable.m2d
new file mode 100644
index 0000000000..496e8267a8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/defaults/table-eocExtCnuSubCarrierModuInfoTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocExtCnuSubCarrierModuInfoTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 0@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable-README-FIRST.txt
new file mode 100644
index 0000000000..83f17a0001
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocExtCnuSubCarrierModuInfoTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocExtCnuSubCarrierModuInfoTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocExtCnuSubCarrierModuInfoTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocExtCnuSubCarrierModuInfoTable_Makefile
+
+
+ File : eocExtCnuSubCarrierModuInfoTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocExtCnuSubCarrierModuInfoTable-README-eocExtCnuSubCarrierModuInfoTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocExtCnuSubCarrierModuInfoTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocExtCnuSubCarrierModuInfoTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocExtCnuSubCarrierModuInfoTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocExtCnuSubCarrierModuInfoTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable-README-eocExtCnuSubCarrierModuInfoTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable-README-eocExtCnuSubCarrierModuInfoTable.txt
new file mode 100644
index 0000000000..2ba0f8005e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable-README-eocExtCnuSubCarrierModuInfoTable.txt
@@ -0,0 +1,506 @@
+************************************************************************
+eocExtCnuSubCarrierModuInfoTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocExtCnuSubCarrierModuInfoTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocExtCnuSubCarrierModuInfoTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocExtCnuSubCarrierModuInfoTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocExtCnuSubCarrierModuInfoTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocExtCnuSubCarrierModuInfoTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocExtCnuSubCarrierModuInfoTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocExtCnuSubCarrierModuInfoTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocExtCnuSubCarrierModuInfoTable_allocate_data
+ eocExtCnuSubCarrierModuInfoTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx_init
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocExtCnuSubCarrierModuInfoTable table
+ ------------------------------------------------------------
+ The index(es) for the eocExtCnuSubCarrierModuInfoTable table are:
+
+ eocExtCnuSubCarrierModuInfoCbatCardIndex:
+ Syntax: INTEGER32
+ DataType: INTEGER32
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocExtCnuSubCarrierModuInfoCnuIndex:
+ Syntax: INTEGER32
+ DataType: INTEGER32
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocExtCnuSubCarrierModuInfoSeq:
+ Syntax: INTEGER32
+ DataType: INTEGER32
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocExtCnuSubCarrierModuInfoTable_data.
+
+
+************************************************************************
+eocExtCnuSubCarrierModuInfoTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocExtCnuSubCarrierModuInfoTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocExtCnuSubCarrierModuInfoTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocExtCnuSubCarrierModuInfoTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocExtCnuSubCarrierModuInfoTable_indexes_set
+ WHERE: eocExtCnuSubCarrierModuInfoTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocExtCnuSubCarrierModuInfoTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocExtCnuSubCarrierModuInfoTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocExtCnuSubCarrierModuInfoList_get
+
+
+
+File: eocExtCnuSubCarrierModuInfoTable_data_set.c
+------------------------------------------------------------------------
+
+ This table does not support set requests.
+
+
+************************************************************************
+eocExtCnuSubCarrierModuInfoTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocExtCnuSubCarrierModuInfoTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocExtCnuSubCarrierModuInfoTable table.
+
+To watch the flow of the eocExtCnuSubCarrierModuInfoTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocExtCnuSubCarrierModuInfoTable
+ verbose:eocExtCnuSubCarrierModuInfoTable
+ internal:eocExtCnuSubCarrierModuInfoTable
+
+e.g.
+ snmpd -f -Le -DeocExtCnuSubCarrierModuInfoTable,verbose:eocExtCnuSubCarrierModuInfoTable,internal:eocExtCnuSubCarrierModuInfoTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuSubCarrierModuInfoTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuSubCarrierModuInfoTable is subid 2 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.2, length: 13
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuSubCarrierModuInfoEntry.eocExtCnuSubCarrierModuInfoCbatCardIndex
+ * eocExtCnuSubCarrierModuInfoCbatCardIndex is subid 1 of eocExtCnuSubCarrierModuInfoEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.2.1.1
+ * Description:
+cbat card number as index
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuSubCarrierModuInfoEntry.eocExtCnuSubCarrierModuInfoCnuIndex
+ * eocExtCnuSubCarrierModuInfoCnuIndex is subid 2 of eocExtCnuSubCarrierModuInfoEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.2.1.2
+ * Description:
+cnu numberas index
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuSubCarrierModuInfoEntry.eocExtCnuSubCarrierModuInfoSeq
+ * eocExtCnuSubCarrierModuInfoSeq is subid 3 of eocExtCnuSubCarrierModuInfoEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.2.1.3
+ * Description:
+modulation information segment sequence
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuSubCarrierModuInfoEntry.eocExtCnuSubCarrierModuInfoList
+ * eocExtCnuSubCarrierModuInfoList is subid 4 of eocExtCnuSubCarrierModuInfoEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.2.1.4
+ * Description:
+modulation information segment
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is OCTETSTR (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length.
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable.c
new file mode 100644
index 0000000000..0ed0f89aa5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable.c
@@ -0,0 +1,201 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocExtCnuSubCarrierModuInfoTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuSubCarrierModuInfoTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocExtCnuSubCarrierModuInfoTable_interface.h"
+
+oid eocExtCnuSubCarrierModuInfoTable_oid[] = { EOCEXTCNUSUBCARRIERMODUINFOTABLE_OID };
+int eocExtCnuSubCarrierModuInfoTable_oid_size = OID_LENGTH(eocExtCnuSubCarrierModuInfoTable_oid);
+
+ eocExtCnuSubCarrierModuInfoTable_registration eocExtCnuSubCarrierModuInfoTable_user_context;
+
+void initialize_table_eocExtCnuSubCarrierModuInfoTable(void);
+void shutdown_table_eocExtCnuSubCarrierModuInfoTable(void);
+
+
+/**
+ * Initializes the eocExtCnuSubCarrierModuInfoTable module
+ */
+void
+init_eocExtCnuSubCarrierModuInfoTable(void)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:init_eocExtCnuSubCarrierModuInfoTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocExtCnuSubCarrierModuInfoTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocExtCnuSubCarrierModuInfoTable"))
+ initialize_table_eocExtCnuSubCarrierModuInfoTable();
+
+} /* init_eocExtCnuSubCarrierModuInfoTable */
+
+/**
+ * Shut-down the eocExtCnuSubCarrierModuInfoTable module (agent is exiting)
+ */
+void
+shutdown_eocExtCnuSubCarrierModuInfoTable(void)
+{
+ if (should_init("eocExtCnuSubCarrierModuInfoTable"))
+ shutdown_table_eocExtCnuSubCarrierModuInfoTable();
+
+}
+
+/**
+ * Initialize the table eocExtCnuSubCarrierModuInfoTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocExtCnuSubCarrierModuInfoTable(void)
+{
+ eocExtCnuSubCarrierModuInfoTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:initialize_table_eocExtCnuSubCarrierModuInfoTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocExtCnuSubCarrierModuInfoTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocExtCnuSubCarrierModuInfoTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocExtCnuSubCarrierModuInfoTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocExtCnuSubCarrierModuInfoTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocExtCnuSubCarrierModuInfoTable */
+
+/**
+ * Shutdown the table eocExtCnuSubCarrierModuInfoTable
+ */
+void
+shutdown_table_eocExtCnuSubCarrierModuInfoTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocExtCnuSubCarrierModuInfoTable_shutdown_interface(&eocExtCnuSubCarrierModuInfoTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocExtCnuSubCarrierModuInfoTable_rowreq_ctx_init(eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocExtCnuSubCarrierModuInfoTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocExtCnuSubCarrierModuInfoTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocExtCnuSubCarrierModuInfoTable_rowreq_ctx_cleanup(eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocExtCnuSubCarrierModuInfoTable rowreq cleanup.
+ */
+} /* eocExtCnuSubCarrierModuInfoTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocExtCnuSubCarrierModuInfoTable_pre_request(eocExtCnuSubCarrierModuInfoTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocExtCnuSubCarrierModuInfoTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocExtCnuSubCarrierModuInfoTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocExtCnuSubCarrierModuInfoTable_post_request(eocExtCnuSubCarrierModuInfoTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocExtCnuSubCarrierModuInfoTable post-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocExtCnuSubCarrierModuInfoTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable.h
new file mode 100644
index 0000000000..aedb0fc641
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable.h
@@ -0,0 +1,196 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUSUBCARRIERMODUINFOTABLE_H
+#define EOCEXTCNUSUBCARRIERMODUINFOTABLE_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(NSCRTV-EPONEOC-MOD-EOC-MIB)
+config_require(NSCRTV-EPONEOC-MOD-EOC-MIB/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_interface)
+config_require(NSCRTV-EPONEOC-MOD-EOC-MIB/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_access)
+config_require(NSCRTV-EPONEOC-MOD-EOC-MIB/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_get)
+config_require(NSCRTV-EPONEOC-MOD-EOC-MIB/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_set)
+ /* *INDENT-ON* */
+
+/* OID and column number definitions for eocExtCnuSubCarrierModuInfoTable */
+#include "eocExtCnuSubCarrierModuInfoTable_oids.h"
+
+/* enum definions */
+#include "eocExtCnuSubCarrierModuInfoTable_enums.h"
+
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocExtCnuSubCarrierModuInfoTable(void);
+void shutdown_eocExtCnuSubCarrierModuInfoTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuSubCarrierModuInfoTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuSubCarrierModuInfoTable is subid 2 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.2, length: 13
+*/
+/* *********************************************************************
+ * 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 eocExtCnuSubCarrierModuInfoTable registration context.
+ */
+typedef netsnmp_data_list eocExtCnuSubCarrierModuInfoTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocExtCnuSubCarrierModuInfoTable data context structure.
+ * This structure is used to represent the data for eocExtCnuSubCarrierModuInfoTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocExtCnuSubCarrierModuInfoTable.
+ */
+typedef struct eocExtCnuSubCarrierModuInfoTable_data_s {
+
+ /*
+ * eocExtCnuSubCarrierModuInfoList(4)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/w/e/r/d/h
+ */
+ char eocExtCnuSubCarrierModuInfoList[65535];
+size_t eocExtCnuSubCarrierModuInfoList_len; /* # of char elements, not bytes */
+
+} eocExtCnuSubCarrierModuInfoTable_data;
+
+
+/*
+ * TODO:120:r: |-> Review eocExtCnuSubCarrierModuInfoTable mib index.
+ * This structure is used to represent the index for eocExtCnuSubCarrierModuInfoTable.
+ */
+typedef struct eocExtCnuSubCarrierModuInfoTable_mib_index_s {
+
+ /*
+ * eocExtCnuSubCarrierModuInfoCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocExtCnuSubCarrierModuInfoCbatCardIndex;
+
+ /*
+ * eocExtCnuSubCarrierModuInfoCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocExtCnuSubCarrierModuInfoCnuIndex;
+
+ /*
+ * eocExtCnuSubCarrierModuInfoSeq(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocExtCnuSubCarrierModuInfoSeq;
+
+
+} eocExtCnuSubCarrierModuInfoTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocExtCnuSubCarrierModuInfoTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocExtCnuSubCarrierModuInfoTable_IDX_LEN 3
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocExtCnuSubCarrierModuInfoTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocExtCnuSubCarrierModuInfoTable_rowreq_ctx pointer.
+ */
+typedef struct eocExtCnuSubCarrierModuInfoTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocExtCnuSubCarrierModuInfoTable_IDX_LEN];
+
+ eocExtCnuSubCarrierModuInfoTable_mib_index tbl_idx;
+
+ eocExtCnuSubCarrierModuInfoTable_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 eocExtCnuSubCarrierModuInfoTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocExtCnuSubCarrierModuInfoTable_data_list;
+
+} eocExtCnuSubCarrierModuInfoTable_rowreq_ctx;
+
+typedef struct eocExtCnuSubCarrierModuInfoTable_ref_rowreq_ctx_s {
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx;
+} eocExtCnuSubCarrierModuInfoTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocExtCnuSubCarrierModuInfoTable_pre_request(eocExtCnuSubCarrierModuInfoTable_registration * user_context);
+ int eocExtCnuSubCarrierModuInfoTable_post_request(eocExtCnuSubCarrierModuInfoTable_registration * user_context,
+ int rc);
+
+ int eocExtCnuSubCarrierModuInfoTable_rowreq_ctx_init(eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocExtCnuSubCarrierModuInfoTable_rowreq_ctx_cleanup(eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx);
+
+
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *
+ eocExtCnuSubCarrierModuInfoTable_row_find_by_mib_index(eocExtCnuSubCarrierModuInfoTable_mib_index *mib_idx);
+
+extern oid eocExtCnuSubCarrierModuInfoTable_oid[];
+extern int eocExtCnuSubCarrierModuInfoTable_oid_size;
+
+
+#include "eocExtCnuSubCarrierModuInfoTable_interface.h"
+#include "eocExtCnuSubCarrierModuInfoTable_data_access.h"
+#include "eocExtCnuSubCarrierModuInfoTable_data_get.h"
+#include "eocExtCnuSubCarrierModuInfoTable_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 /* EOCEXTCNUSUBCARRIERMODUINFOTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_access.c
new file mode 100644
index 0000000000..530059ee36
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_access.c
@@ -0,0 +1,338 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuSubCarrierModuInfoTable.h"
+
+
+#include "eocExtCnuSubCarrierModuInfoTable_data_access.h"
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuSubCarrierModuInfoTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuSubCarrierModuInfoTable is subid 2 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.2, length: 13
+*/
+
+/**
+ * initialization for eocExtCnuSubCarrierModuInfoTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocExtCnuSubCarrierModuInfoTable_reg
+ * Pointer to eocExtCnuSubCarrierModuInfoTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocExtCnuSubCarrierModuInfoTable_init_data(eocExtCnuSubCarrierModuInfoTable_registration * eocExtCnuSubCarrierModuInfoTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocExtCnuSubCarrierModuInfoTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocExtCnuSubCarrierModuInfoTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocExtCnuSubCarrierModuInfoTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocExtCnuSubCarrierModuInfoTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocExtCnuSubCarrierModuInfoTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocExtCnuSubCarrierModuInfoTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCEXTCNUSUBCARRIERMODUINFOTABLE_CACHE_TIMEOUT; /* seconds */
+} /* eocExtCnuSubCarrierModuInfoTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocExtCnuSubCarrierModuInfoTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocExtCnuSubCarrierModuInfoTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocExtCnuSubCarrierModuInfoTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocExtCnuSubCarrierModuInfoTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocExtCnuSubCarrierModuInfoTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocExtCnuSubCarrierModuInfoTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocExtCnuSubCarrierModuInfoTable_container_load(netsnmp_container *container)
+{
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocExtCnuSubCarrierModuInfoCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocExtCnuSubCarrierModuInfoCbatCardIndex;
+ /*
+ * eocExtCnuSubCarrierModuInfoCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocExtCnuSubCarrierModuInfoCnuIndex;
+ /*
+ * eocExtCnuSubCarrierModuInfoSeq(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocExtCnuSubCarrierModuInfoSeq;
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_container_load","called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocExtCnuSubCarrierModuInfoTable container.
+ * loop over your eocExtCnuSubCarrierModuInfoTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ while( 1 ) {
+ /*
+ * check for end of data; bail out if there is no more data
+ */
+ if( 1 )
+ break;
+
+ /*
+ * TODO:352:M: | |-> set indexes in new eocExtCnuSubCarrierModuInfoTable rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocExtCnuSubCarrierModuInfoTable_allocate_rowreq_ctx(NULL);
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if(MFD_SUCCESS != eocExtCnuSubCarrierModuInfoTable_indexes_set(rowreq_ctx
+ , eocExtCnuSubCarrierModuInfoCbatCardIndex
+ , eocExtCnuSubCarrierModuInfoCnuIndex
+ , eocExtCnuSubCarrierModuInfoSeq
+ )) {
+ snmp_log(LOG_ERR,"error setting index while loading "
+ "eocExtCnuSubCarrierModuInfoTable data.\n");
+ eocExtCnuSubCarrierModuInfoTable_release_rowreq_ctx(rowreq_ctx);
+ continue;
+ }
+
+ /*
+ * TODO:352:r: | |-> populate eocExtCnuSubCarrierModuInfoTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocExtCnuSubCarrierModuInfoList
+ * eocExtCnuSubCarrierModuInfoList(4)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/w/e/r/d/h
+ */
+ /** no mapping */
+ /*
+ * make sure there is enough space for eocExtCnuSubCarrierModuInfoList data
+ */
+ if ((NULL == rowreq_ctx->data.eocExtCnuSubCarrierModuInfoList) ||
+ (rowreq_ctx->data.eocExtCnuSubCarrierModuInfoList_len <
+ (eocExtCnuSubCarrierModuInfoList_len* sizeof(eocExtCnuSubCarrierModuInfoList[0])))) {
+ snmp_log(LOG_ERR,"not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocExtCnuSubCarrierModuInfoList_len = eocExtCnuSubCarrierModuInfoList_len* sizeof(eocExtCnuSubCarrierModuInfoList[0]);
+ memcpy( rowreq_ctx->data.eocExtCnuSubCarrierModuInfoList, eocExtCnuSubCarrierModuInfoList, eocExtCnuSubCarrierModuInfoList_len* sizeof(eocExtCnuSubCarrierModuInfoList[0]) );
+
+
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT(container, rowreq_ctx);
+ ++count;
+ }
+
+ DEBUGMSGT(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_container_load",
+ "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+} /* eocExtCnuSubCarrierModuInfoTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocExtCnuSubCarrierModuInfoTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocExtCnuSubCarrierModuInfoTable container data.
+ */
+} /* eocExtCnuSubCarrierModuInfoTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocExtCnuSubCarrierModuInfoTable_row_prep( eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocExtCnuSubCarrierModuInfoTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_access.h
new file mode 100644
index 0000000000..5ec5cc0493
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_access.h
@@ -0,0 +1,63 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUSUBCARRIERMODUINFOTABLE_DATA_ACCESS_H
+#define EOCEXTCNUSUBCARRIERMODUINFOTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuSubCarrierModuInfoTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuSubCarrierModuInfoTable is subid 2 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.2, length: 13
+*/
+
+
+ int eocExtCnuSubCarrierModuInfoTable_init_data(eocExtCnuSubCarrierModuInfoTable_registration * eocExtCnuSubCarrierModuInfoTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocExtCnuSubCarrierModuInfoTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCEXTCNUSUBCARRIERMODUINFOTABLE_CACHE_TIMEOUT 60
+
+void eocExtCnuSubCarrierModuInfoTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocExtCnuSubCarrierModuInfoTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocExtCnuSubCarrierModuInfoTable_container_load(netsnmp_container *container);
+void eocExtCnuSubCarrierModuInfoTable_container_free(netsnmp_container *container);
+
+int eocExtCnuSubCarrierModuInfoTable_cache_load(netsnmp_container *container);
+void eocExtCnuSubCarrierModuInfoTable_cache_free(netsnmp_container *container);
+
+ int eocExtCnuSubCarrierModuInfoTable_row_prep( eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUSUBCARRIERMODUINFOTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_get.c
new file mode 100644
index 0000000000..290a34eb0a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_get.c
@@ -0,0 +1,202 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuSubCarrierModuInfoTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocExtCnuSubCarrierModuInfoTable get routines.
+ * TODO:240:M: Implement eocExtCnuSubCarrierModuInfoTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuSubCarrierModuInfoTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuSubCarrierModuInfoTable is subid 2 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.2, length: 13
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocExtCnuSubCarrierModuInfoTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocExtCnuSubCarrierModuInfoCbatCardIndex_val
+ * @param eocExtCnuSubCarrierModuInfoCnuIndex_val
+ * @param eocExtCnuSubCarrierModuInfoSeq_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocExtCnuSubCarrierModuInfoTable_indexes_set_tbl_idx(eocExtCnuSubCarrierModuInfoTable_mib_index *tbl_idx, long eocExtCnuSubCarrierModuInfoCbatCardIndex_val, long eocExtCnuSubCarrierModuInfoCnuIndex_val, long eocExtCnuSubCarrierModuInfoSeq_val)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocExtCnuSubCarrierModuInfoCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocExtCnuSubCarrierModuInfoCbatCardIndex = eocExtCnuSubCarrierModuInfoCbatCardIndex_val;
+
+ /* eocExtCnuSubCarrierModuInfoCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocExtCnuSubCarrierModuInfoCnuIndex = eocExtCnuSubCarrierModuInfoCnuIndex_val;
+
+ /* eocExtCnuSubCarrierModuInfoSeq(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocExtCnuSubCarrierModuInfoSeq = eocExtCnuSubCarrierModuInfoSeq_val;
+
+
+ return MFD_SUCCESS;
+} /* eocExtCnuSubCarrierModuInfoTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocExtCnuSubCarrierModuInfoTable_indexes_set(eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx, long eocExtCnuSubCarrierModuInfoCbatCardIndex_val, long eocExtCnuSubCarrierModuInfoCnuIndex_val, long eocExtCnuSubCarrierModuInfoSeq_val)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocExtCnuSubCarrierModuInfoTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocExtCnuSubCarrierModuInfoCbatCardIndex_val
+ , eocExtCnuSubCarrierModuInfoCnuIndex_val
+ , eocExtCnuSubCarrierModuInfoSeq_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocExtCnuSubCarrierModuInfoTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocExtCnuSubCarrierModuInfoTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuSubCarrierModuInfoEntry.eocExtCnuSubCarrierModuInfoList
+ * eocExtCnuSubCarrierModuInfoList is subid 4 of eocExtCnuSubCarrierModuInfoEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.2.1.4
+ * Description:
+modulation information segment
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is OCTETSTR (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length.
+ */
+/**
+ * Extract the current value of the eocExtCnuSubCarrierModuInfoList data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocExtCnuSubCarrierModuInfoList_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocExtCnuSubCarrierModuInfoList_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocExtCnuSubCarrierModuInfoList.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocExtCnuSubCarrierModuInfoList_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocExtCnuSubCarrierModuInfoList_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocExtCnuSubCarrierModuInfoList_get( eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx, char **eocExtCnuSubCarrierModuInfoList_val_ptr_ptr, size_t *eocExtCnuSubCarrierModuInfoList_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocExtCnuSubCarrierModuInfoList_val_ptr_ptr) && (NULL != *eocExtCnuSubCarrierModuInfoList_val_ptr_ptr));
+ netsnmp_assert( NULL != eocExtCnuSubCarrierModuInfoList_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoList_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocExtCnuSubCarrierModuInfoList data.
+ * copy (* eocExtCnuSubCarrierModuInfoList_val_ptr_ptr ) data and (* eocExtCnuSubCarrierModuInfoList_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocExtCnuSubCarrierModuInfoList data
+ */
+ if ((NULL == (* eocExtCnuSubCarrierModuInfoList_val_ptr_ptr )) ||
+ ((* eocExtCnuSubCarrierModuInfoList_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocExtCnuSubCarrierModuInfoList_len* sizeof(rowreq_ctx->data.eocExtCnuSubCarrierModuInfoList[0])))) {
+ /*
+ * allocate space for eocExtCnuSubCarrierModuInfoList data
+ */
+ (* eocExtCnuSubCarrierModuInfoList_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocExtCnuSubCarrierModuInfoList_len* sizeof(rowreq_ctx->data.eocExtCnuSubCarrierModuInfoList[0]));
+ if(NULL == (* eocExtCnuSubCarrierModuInfoList_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocExtCnuSubCarrierModuInfoList_val_ptr_len_ptr ) = rowreq_ctx->data.eocExtCnuSubCarrierModuInfoList_len* sizeof(rowreq_ctx->data.eocExtCnuSubCarrierModuInfoList[0]);
+ memcpy( (* eocExtCnuSubCarrierModuInfoList_val_ptr_ptr ), rowreq_ctx->data.eocExtCnuSubCarrierModuInfoList, rowreq_ctx->data.eocExtCnuSubCarrierModuInfoList_len* sizeof(rowreq_ctx->data.eocExtCnuSubCarrierModuInfoList[0]) );
+
+ return MFD_SUCCESS;
+} /* eocExtCnuSubCarrierModuInfoList_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_get.h
new file mode 100644
index 0000000000..985eb12c7e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_get.h
@@ -0,0 +1,59 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocExtCnuSubCarrierModuInfoTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCEXTCNUSUBCARRIERMODUINFOTABLE_DATA_GET_H
+#define EOCEXTCNUSUBCARRIERMODUINFOTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuSubCarrierModuInfoTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuSubCarrierModuInfoTable is subid 2 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.2, length: 13
+*/
+ /*
+ * indexes
+ */
+
+ int eocExtCnuSubCarrierModuInfoList_get( eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx, char **eocExtCnuSubCarrierModuInfoList_val_ptr_ptr, size_t *eocExtCnuSubCarrierModuInfoList_val_ptr_len_ptr );
+
+
+int eocExtCnuSubCarrierModuInfoTable_indexes_set_tbl_idx(eocExtCnuSubCarrierModuInfoTable_mib_index *tbl_idx, long eocExtCnuSubCarrierModuInfoCbatCardIndex_val, long eocExtCnuSubCarrierModuInfoCnuIndex_val, long eocExtCnuSubCarrierModuInfoSeq_val);
+int eocExtCnuSubCarrierModuInfoTable_indexes_set(eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx, long eocExtCnuSubCarrierModuInfoCbatCardIndex_val, long eocExtCnuSubCarrierModuInfoCnuIndex_val, long eocExtCnuSubCarrierModuInfoSeq_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUSUBCARRIERMODUINFOTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_set.c
new file mode 100644
index 0000000000..32e33d6e2b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_set.c
@@ -0,0 +1,24 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuSubCarrierModuInfoTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_set.h
new file mode 100644
index 0000000000..572ffc6650
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_data_set.h
@@ -0,0 +1,27 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUSUBCARRIERMODUINFOTABLE_DATA_SET_H
+#define EOCEXTCNUSUBCARRIERMODUINFOTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUSUBCARRIERMODUINFOTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_enums.h
new file mode 100644
index 0000000000..968c88eef3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_enums.h
@@ -0,0 +1,40 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUSUBCARRIERMODUINFOTABLE_ENUMS_H
+#define EOCEXTCNUSUBCARRIERMODUINFOTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocExtCnuSubCarrierModuInfoTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUSUBCARRIERMODUINFOTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_interface.c
new file mode 100644
index 0000000000..bffd9dece1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_interface.c
@@ -0,0 +1,911 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuSubCarrierModuInfoTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocExtCnuSubCarrierModuInfoTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuSubCarrierModuInfoTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuSubCarrierModuInfoTable is subid 2 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.2, length: 13
+*/
+typedef struct eocExtCnuSubCarrierModuInfoTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocExtCnuSubCarrierModuInfoTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+} eocExtCnuSubCarrierModuInfoTable_interface_ctx;
+
+static eocExtCnuSubCarrierModuInfoTable_interface_ctx eocExtCnuSubCarrierModuInfoTable_if_ctx;
+
+static void _eocExtCnuSubCarrierModuInfoTable_container_init(
+ eocExtCnuSubCarrierModuInfoTable_interface_ctx *if_ctx);
+static void _eocExtCnuSubCarrierModuInfoTable_container_shutdown(
+ eocExtCnuSubCarrierModuInfoTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocExtCnuSubCarrierModuInfoTable_container_get( void )
+{
+ return eocExtCnuSubCarrierModuInfoTable_if_ctx.container;
+}
+
+eocExtCnuSubCarrierModuInfoTable_registration *
+eocExtCnuSubCarrierModuInfoTable_registration_get( void )
+{
+ return eocExtCnuSubCarrierModuInfoTable_if_ctx.user_ctx;
+}
+
+eocExtCnuSubCarrierModuInfoTable_registration *
+eocExtCnuSubCarrierModuInfoTable_registration_set( eocExtCnuSubCarrierModuInfoTable_registration * newreg )
+{
+ eocExtCnuSubCarrierModuInfoTable_registration * old = eocExtCnuSubCarrierModuInfoTable_if_ctx.user_ctx;
+ eocExtCnuSubCarrierModuInfoTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocExtCnuSubCarrierModuInfoTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocExtCnuSubCarrierModuInfoTable_if_ctx.container);
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocExtCnuSubCarrierModuInfoTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocExtCnuSubCarrierModuInfoTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocExtCnuSubCarrierModuInfoTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocExtCnuSubCarrierModuInfoTable_get_values;
+/**
+ * @internal
+ * Initialize the table eocExtCnuSubCarrierModuInfoTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocExtCnuSubCarrierModuInfoTable_initialize_interface(eocExtCnuSubCarrierModuInfoTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocExtCnuSubCarrierModuInfoTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocExtCnuSubCarrierModuInfoTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:_eocExtCnuSubCarrierModuInfoTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocExtCnuSubCarrierModuInfoTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocExtCnuSubCarrierModuInfoCbatCardIndex */
+ ASN_INTEGER, /** index: eocExtCnuSubCarrierModuInfoCnuIndex */
+ ASN_INTEGER, /** index: eocExtCnuSubCarrierModuInfoSeq */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCEXTCNUSUBCARRIERMODUINFOTABLE_MIN_COL;
+ tbl_info->max_column = EOCEXTCNUSUBCARRIERMODUINFOTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocExtCnuSubCarrierModuInfoTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocExtCnuSubCarrierModuInfoTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocExtCnuSubCarrierModuInfoTable_container_init(&eocExtCnuSubCarrierModuInfoTable_if_ctx);
+ if (NULL == eocExtCnuSubCarrierModuInfoTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocExtCnuSubCarrierModuInfoTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocExtCnuSubCarrierModuInfoTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocExtCnuSubCarrierModuInfoTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocExtCnuSubCarrierModuInfoTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocExtCnuSubCarrierModuInfoTable_post_request;
+
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocExtCnuSubCarrierModuInfoTable:init_eocExtCnuSubCarrierModuInfoTable",
+ "Registering eocExtCnuSubCarrierModuInfoTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocExtCnuSubCarrierModuInfoTable", handler,
+ eocExtCnuSubCarrierModuInfoTable_oid,
+ eocExtCnuSubCarrierModuInfoTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RONLY
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocExtCnuSubCarrierModuInfoTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocExtCnuSubCarrierModuInfoTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocExtCnuSubCarrierModuInfoTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocExtCnuSubCarrierModuInfoTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocExtCnuSubCarrierModuInfoTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocExtCnuSubCarrierModuInfoTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocExtCnuSubCarrierModuInfoTable
+ */
+void
+_eocExtCnuSubCarrierModuInfoTable_shutdown_interface(eocExtCnuSubCarrierModuInfoTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocExtCnuSubCarrierModuInfoTable_container_shutdown(&eocExtCnuSubCarrierModuInfoTable_if_ctx);
+}
+
+void
+eocExtCnuSubCarrierModuInfoTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocExtCnuSubCarrierModuInfoTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocExtCnuSubCarrierModuInfoTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocExtCnuSubCarrierModuInfoTable_index_to_oid(netsnmp_index *oid_idx,
+ eocExtCnuSubCarrierModuInfoTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocExtCnuSubCarrierModuInfoCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuSubCarrierModuInfoCbatCardIndex;
+ /*
+ * eocExtCnuSubCarrierModuInfoCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuSubCarrierModuInfoCnuIndex;
+ /*
+ * eocExtCnuSubCarrierModuInfoSeq(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuSubCarrierModuInfoSeq;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocExtCnuSubCarrierModuInfoCbatCardIndex, 0x00, sizeof(var_eocExtCnuSubCarrierModuInfoCbatCardIndex) );
+ var_eocExtCnuSubCarrierModuInfoCbatCardIndex.type = ASN_INTEGER;
+ memset( &var_eocExtCnuSubCarrierModuInfoCnuIndex, 0x00, sizeof(var_eocExtCnuSubCarrierModuInfoCnuIndex) );
+ var_eocExtCnuSubCarrierModuInfoCnuIndex.type = ASN_INTEGER;
+ memset( &var_eocExtCnuSubCarrierModuInfoSeq, 0x00, sizeof(var_eocExtCnuSubCarrierModuInfoSeq) );
+ var_eocExtCnuSubCarrierModuInfoSeq.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocExtCnuSubCarrierModuInfoCbatCardIndex.next_variable = &var_eocExtCnuSubCarrierModuInfoCnuIndex; var_eocExtCnuSubCarrierModuInfoCnuIndex.next_variable = &var_eocExtCnuSubCarrierModuInfoSeq; var_eocExtCnuSubCarrierModuInfoSeq.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_index_to_oid","called\n"));
+
+ /* eocExtCnuSubCarrierModuInfoCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocExtCnuSubCarrierModuInfoCbatCardIndex, (u_char*)&mib_idx->eocExtCnuSubCarrierModuInfoCbatCardIndex,
+ sizeof(mib_idx->eocExtCnuSubCarrierModuInfoCbatCardIndex));
+
+ /* eocExtCnuSubCarrierModuInfoCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocExtCnuSubCarrierModuInfoCnuIndex, (u_char*)&mib_idx->eocExtCnuSubCarrierModuInfoCnuIndex,
+ sizeof(mib_idx->eocExtCnuSubCarrierModuInfoCnuIndex));
+
+ /* eocExtCnuSubCarrierModuInfoSeq(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocExtCnuSubCarrierModuInfoSeq, (u_char*)&mib_idx->eocExtCnuSubCarrierModuInfoSeq,
+ sizeof(mib_idx->eocExtCnuSubCarrierModuInfoSeq));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocExtCnuSubCarrierModuInfoCbatCardIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocExtCnuSubCarrierModuInfoCbatCardIndex );
+
+ return err;
+} /* eocExtCnuSubCarrierModuInfoTable_index_to_oid */
+
+/**
+ * extract eocExtCnuSubCarrierModuInfoTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocExtCnuSubCarrierModuInfoTable_index_from_oid(netsnmp_index *oid_idx,
+ eocExtCnuSubCarrierModuInfoTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocExtCnuSubCarrierModuInfoCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuSubCarrierModuInfoCbatCardIndex;
+ /*
+ * eocExtCnuSubCarrierModuInfoCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuSubCarrierModuInfoCnuIndex;
+ /*
+ * eocExtCnuSubCarrierModuInfoSeq(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuSubCarrierModuInfoSeq;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocExtCnuSubCarrierModuInfoCbatCardIndex, 0x00, sizeof(var_eocExtCnuSubCarrierModuInfoCbatCardIndex) );
+ var_eocExtCnuSubCarrierModuInfoCbatCardIndex.type = ASN_INTEGER;
+ memset( &var_eocExtCnuSubCarrierModuInfoCnuIndex, 0x00, sizeof(var_eocExtCnuSubCarrierModuInfoCnuIndex) );
+ var_eocExtCnuSubCarrierModuInfoCnuIndex.type = ASN_INTEGER;
+ memset( &var_eocExtCnuSubCarrierModuInfoSeq, 0x00, sizeof(var_eocExtCnuSubCarrierModuInfoSeq) );
+ var_eocExtCnuSubCarrierModuInfoSeq.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocExtCnuSubCarrierModuInfoCbatCardIndex.next_variable = &var_eocExtCnuSubCarrierModuInfoCnuIndex; var_eocExtCnuSubCarrierModuInfoCnuIndex.next_variable = &var_eocExtCnuSubCarrierModuInfoSeq; var_eocExtCnuSubCarrierModuInfoSeq.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocExtCnuSubCarrierModuInfoCbatCardIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocExtCnuSubCarrierModuInfoCbatCardIndex = *((long *)var_eocExtCnuSubCarrierModuInfoCbatCardIndex.val.string);
+ mib_idx->eocExtCnuSubCarrierModuInfoCnuIndex = *((long *)var_eocExtCnuSubCarrierModuInfoCnuIndex.val.string);
+ mib_idx->eocExtCnuSubCarrierModuInfoSeq = *((long *)var_eocExtCnuSubCarrierModuInfoSeq.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocExtCnuSubCarrierModuInfoCbatCardIndex );
+
+ return err;
+} /* eocExtCnuSubCarrierModuInfoTable_index_from_oid */
+
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocExtCnuSubCarrierModuInfoTable_rowreq_ctx
+ */
+eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *
+eocExtCnuSubCarrierModuInfoTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocExtCnuSubCarrierModuInfoTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocExtCnuSubCarrierModuInfoTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocExtCnuSubCarrierModuInfoTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocExtCnuSubCarrierModuInfoTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocExtCnuSubCarrierModuInfoTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocExtCnuSubCarrierModuInfoTable_rowreq_ctx
+ */
+void
+eocExtCnuSubCarrierModuInfoTable_release_rowreq_ctx(eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:eocExtCnuSubCarrierModuInfoTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocExtCnuSubCarrierModuInfoTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocExtCnuSubCarrierModuInfoTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:_mfd_eocExtCnuSubCarrierModuInfoTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocExtCnuSubCarrierModuInfoTable_pre_request(eocExtCnuSubCarrierModuInfoTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuSubCarrierModuInfoTable","error %d from "
+ "eocExtCnuSubCarrierModuInfoTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuSubCarrierModuInfoTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocExtCnuSubCarrierModuInfoTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:_mfd_eocExtCnuSubCarrierModuInfoTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocExtCnuSubCarrierModuInfoTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ rc = eocExtCnuSubCarrierModuInfoTable_post_request(eocExtCnuSubCarrierModuInfoTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuSubCarrierModuInfoTable","error %d from "
+ "eocExtCnuSubCarrierModuInfoTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuSubCarrierModuInfoTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocExtCnuSubCarrierModuInfoTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:_mfd_eocExtCnuSubCarrierModuInfoTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocExtCnuSubCarrierModuInfoTable_interface_ctx *if_ctx =
+ * (eocExtCnuSubCarrierModuInfoTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocExtCnuSubCarrierModuInfoTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocExtCnuSubCarrierModuInfoTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocExtCnuSubCarrierModuInfoTable_get_column( eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:_mfd_eocExtCnuSubCarrierModuInfoTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocExtCnuSubCarrierModuInfoCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCEXTCNUSUBCARRIERMODUINFOCBATCARDINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocExtCnuSubCarrierModuInfoCbatCardIndex;
+ break;
+
+ /* (INDEX) eocExtCnuSubCarrierModuInfoCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCEXTCNUSUBCARRIERMODUINFOCNUINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocExtCnuSubCarrierModuInfoCnuIndex;
+ break;
+
+ /* (INDEX) eocExtCnuSubCarrierModuInfoSeq(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCEXTCNUSUBCARRIERMODUINFOSEQ:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocExtCnuSubCarrierModuInfoSeq;
+ break;
+
+ /* eocExtCnuSubCarrierModuInfoList(4)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/w/e/r/d/h */
+ case COLUMN_EOCEXTCNUSUBCARRIERMODUINFOLIST:
+ var->type = ASN_OCTET_STR;
+rc = eocExtCnuSubCarrierModuInfoList_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ default:
+ if (EOCEXTCNUSUBCARRIERMODUINFOTABLE_MIN_COL <= column && column <= EOCEXTCNUSUBCARRIERMODUINFOTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:_mfd_eocExtCnuSubCarrierModuInfoTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocExtCnuSubCarrierModuInfoTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocExtCnuSubCarrierModuInfoTable_get_column */
+
+int
+_mfd_eocExtCnuSubCarrierModuInfoTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:_mfd_eocExtCnuSubCarrierModuInfoTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocExtCnuSubCarrierModuInfoTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuSubCarrierModuInfoTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*
+ * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
+ */
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocExtCnuSubCarrierModuInfoTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocExtCnuSubCarrierModuInfoTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocExtCnuSubCarrierModuInfoTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocExtCnuSubCarrierModuInfoTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocExtCnuSubCarrierModuInfoTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocExtCnuSubCarrierModuInfoTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocExtCnuSubCarrierModuInfoTable_container_init(eocExtCnuSubCarrierModuInfoTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:_eocExtCnuSubCarrierModuInfoTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocExtCnuSubCarrierModuInfoTable_oid,
+ eocExtCnuSubCarrierModuInfoTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocExtCnuSubCarrierModuInfoTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocExtCnuSubCarrierModuInfoTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocExtCnuSubCarrierModuInfoTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocExtCnuSubCarrierModuInfoTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocExtCnuSubCarrierModuInfoTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocExtCnuSubCarrierModuInfoTable_container_shutdown(eocExtCnuSubCarrierModuInfoTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocExtCnuSubCarrierModuInfoTable:_eocExtCnuSubCarrierModuInfoTable_container_shutdown","called\n"));
+
+ eocExtCnuSubCarrierModuInfoTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocExtCnuSubCarrierModuInfoTable_container_shutdown */
+
+
+eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *
+eocExtCnuSubCarrierModuInfoTable_row_find_by_mib_index(eocExtCnuSubCarrierModuInfoTable_mib_index *mib_idx)
+{
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocExtCnuSubCarrierModuInfoTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocExtCnuSubCarrierModuInfoTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_interface.h
new file mode 100644
index 0000000000..7708dba386
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_interface.h
@@ -0,0 +1,84 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCEXTCNUSUBCARRIERMODUINFOTABLE_INTERFACE_H
+#define EOCEXTCNUSUBCARRIERMODUINFOTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocExtCnuSubCarrierModuInfoTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocExtCnuSubCarrierModuInfoTable_initialize_interface(eocExtCnuSubCarrierModuInfoTable_registration * user_ctx,
+ u_long flags);
+void _eocExtCnuSubCarrierModuInfoTable_shutdown_interface(eocExtCnuSubCarrierModuInfoTable_registration * user_ctx);
+
+eocExtCnuSubCarrierModuInfoTable_registration *
+eocExtCnuSubCarrierModuInfoTable_registration_get( void );
+
+eocExtCnuSubCarrierModuInfoTable_registration *
+eocExtCnuSubCarrierModuInfoTable_registration_set( eocExtCnuSubCarrierModuInfoTable_registration * newreg );
+
+netsnmp_container *eocExtCnuSubCarrierModuInfoTable_container_get( void );
+int eocExtCnuSubCarrierModuInfoTable_container_size( void );
+
+ eocExtCnuSubCarrierModuInfoTable_rowreq_ctx * eocExtCnuSubCarrierModuInfoTable_allocate_rowreq_ctx(void *);
+void eocExtCnuSubCarrierModuInfoTable_release_rowreq_ctx(eocExtCnuSubCarrierModuInfoTable_rowreq_ctx *rowreq_ctx);
+
+int eocExtCnuSubCarrierModuInfoTable_index_to_oid(netsnmp_index *oid_idx,
+ eocExtCnuSubCarrierModuInfoTable_mib_index *mib_idx);
+int eocExtCnuSubCarrierModuInfoTable_index_from_oid(netsnmp_index *oid_idx,
+ eocExtCnuSubCarrierModuInfoTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocExtCnuSubCarrierModuInfoTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUSUBCARRIERMODUINFOTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_oids.h
new file mode 100644
index 0000000000..d7bb75a688
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuSubCarrierModuInfoTable/eocExtCnuSubCarrierModuInfoTable_oids.h
@@ -0,0 +1,37 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUSUBCARRIERMODUINFOTABLE_OIDS_H
+#define EOCEXTCNUSUBCARRIERMODUINFOTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* column number definitions for table eocExtCnuSubCarrierModuInfoTable */
+#define EOCEXTCNUSUBCARRIERMODUINFOTABLE_OID 1,3,6,1,4,1,17409,2,4,20,1,1,2
+
+
+#define COLUMN_EOCEXTCNUSUBCARRIERMODUINFOCBATCARDINDEX 1
+
+#define COLUMN_EOCEXTCNUSUBCARRIERMODUINFOCNUINDEX 2
+
+#define COLUMN_EOCEXTCNUSUBCARRIERMODUINFOSEQ 3
+
+#define COLUMN_EOCEXTCNUSUBCARRIERMODUINFOLIST 4
+
+
+#define EOCEXTCNUSUBCARRIERMODUINFOTABLE_MIN_COL COLUMN_EOCEXTCNUSUBCARRIERMODUINFOCBATCARDINDEX
+#define EOCEXTCNUSUBCARRIERMODUINFOTABLE_MAX_COL COLUMN_EOCEXTCNUSUBCARRIERMODUINFOLIST
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUSUBCARRIERMODUINFOTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable.h
new file mode 100644
index 0000000000..b3bd5d6a53
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_interface)
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_access)
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_set)
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_get)
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/node-eocExtCnuCbatCardIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/node-eocExtCnuCbatCardIndex.m2d
new file mode 100644
index 0000000000..b40b871370
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/node-eocExtCnuCbatCardIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuCbatCardIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/node-eocExtCnuCnuIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/node-eocExtCnuCnuIndex.m2d
new file mode 100644
index 0000000000..f11898bb7e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/node-eocExtCnuCnuIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuCnuIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/node-eocExtCnuMacLimitation.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/node-eocExtCnuMacLimitation.m2d
new file mode 100644
index 0000000000..74ae2d7e7a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/node-eocExtCnuMacLimitation.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuMacLimitation
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/table-eocExtCnuTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/table-eocExtCnuTable.m2d
new file mode 100644
index 0000000000..76b1f7650a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/defaults/table-eocExtCnuTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocExtCnuTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable-README-FIRST.txt
new file mode 100644
index 0000000000..be07bd4d2f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocExtCnuTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocExtCnuTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocExtCnuTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocExtCnuTable_Makefile
+
+
+ File : eocExtCnuTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocExtCnuTable-README-eocExtCnuTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocExtCnuTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocExtCnuTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocExtCnuTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocExtCnuTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable-README-eocExtCnuTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable-README-eocExtCnuTable.txt
new file mode 100644
index 0000000000..d904f2ca9b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable-README-eocExtCnuTable.txt
@@ -0,0 +1,579 @@
+************************************************************************
+eocExtCnuTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocExtCnuTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocExtCnuTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocExtCnuTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocExtCnuTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocExtCnuTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocExtCnuTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocExtCnuTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocExtCnuTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocExtCnuTable_allocate_data
+ eocExtCnuTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocExtCnuTable_rowreq_ctx_init
+ eocExtCnuTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocExtCnuTable table
+ ------------------------------------------------------------
+ The index(es) for the eocExtCnuTable table are:
+
+ eocExtCnuCbatCardIndex:
+ Syntax: INTEGER32
+ DataType: INTEGER32
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocExtCnuCnuIndex:
+ Syntax: INTEGER32
+ DataType: INTEGER32
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocExtCnuTable_data.
+
+
+************************************************************************
+eocExtCnuTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocExtCnuTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocExtCnuTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocExtCnuTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocExtCnuTable_indexes_set
+ WHERE: eocExtCnuTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocExtCnuTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocExtCnuTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocExtCnuMacLimitation_get
+
+
+
+File: eocExtCnuTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocExtCnuTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table does not support ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocExtCnuTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocExtCnuMacLimitation_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocExtCnuMacLimitation_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocExtCnuMacLimitation_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocExtCnuMacLimitation_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocExtCnuTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocExtCnuTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocExtCnuTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocExtCnuTable table.
+
+To watch the flow of the eocExtCnuTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocExtCnuTable
+ verbose:eocExtCnuTable
+ internal:eocExtCnuTable
+
+e.g.
+ snmpd -f -Le -DeocExtCnuTable,verbose:eocExtCnuTable,internal:eocExtCnuTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuTable is subid 1 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1, length: 13
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEntry.eocExtCnuCbatCardIndex
+ * eocExtCnuCbatCardIndex is subid 1 of eocExtCnuEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1.1.1
+ * Description:
+The index of the CBAT card.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ *
+ *
+ *
+ * NOTE: NODE eocExtCnuCbatCardIndex IS NOT ACCESSIBLE
+ *
+ *
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEntry.eocExtCnuCnuIndex
+ * eocExtCnuCnuIndex is subid 2 of eocExtCnuEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1.1.2
+ * Description:
+The index of the CNU.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ *
+ *
+ *
+ * NOTE: NODE eocExtCnuCnuIndex IS NOT ACCESSIBLE
+ *
+ *
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEntry.eocExtCnuMacLimitation
+ * eocExtCnuMacLimitation is subid 3 of eocExtCnuEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1.1.3
+ * Description:
+The MAC Limitation of the CNU.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 128;
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable.c
new file mode 100644
index 0000000000..c5c4249337
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable.c
@@ -0,0 +1,218 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocExtCnuTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocExtCnuTable_interface.h"
+
+oid eocExtCnuTable_oid[] = { EOCEXTCNUTABLE_OID };
+int eocExtCnuTable_oid_size = OID_LENGTH(eocExtCnuTable_oid);
+
+ eocExtCnuTable_registration eocExtCnuTable_user_context;
+
+void initialize_table_eocExtCnuTable(void);
+void shutdown_table_eocExtCnuTable(void);
+
+
+/**
+ * Initializes the eocExtCnuTable module
+ */
+void
+init_eocExtCnuTable(void)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:init_eocExtCnuTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocExtCnuTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocExtCnuTable"))
+ initialize_table_eocExtCnuTable();
+
+} /* init_eocExtCnuTable */
+
+/**
+ * Shut-down the eocExtCnuTable module (agent is exiting)
+ */
+void
+shutdown_eocExtCnuTable(void)
+{
+ if (should_init("eocExtCnuTable"))
+ shutdown_table_eocExtCnuTable();
+
+}
+
+/**
+ * Initialize the table eocExtCnuTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocExtCnuTable(void)
+{
+ eocExtCnuTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocExtCnuTable:initialize_table_eocExtCnuTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocExtCnuTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocExtCnuTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocExtCnuTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocExtCnuTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocExtCnuTable */
+
+/**
+ * Shutdown the table eocExtCnuTable
+ */
+void
+shutdown_table_eocExtCnuTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocExtCnuTable_shutdown_interface(&eocExtCnuTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocExtCnuTable_rowreq_ctx_init(eocExtCnuTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocExtCnuTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocExtCnuTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocExtCnuTable_rowreq_ctx_cleanup(eocExtCnuTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocExtCnuTable rowreq cleanup.
+ */
+} /* eocExtCnuTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocExtCnuTable_pre_request(eocExtCnuTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocExtCnuTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocExtCnuTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocExtCnuTable_post_request(eocExtCnuTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocExtCnuTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocExtCnuTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocExtCnuTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocExtCnuTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable.h
new file mode 100644
index 0000000000..be2fd13144
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable.h
@@ -0,0 +1,198 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUTABLE_H
+#define EOCEXTCNUTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+/* other required module components */
+
+/* OID and column number definitions for eocExtCnuTable */
+#include "eocExtCnuTable_oids.h"
+
+/* enum definions */
+#include "eocExtCnuTable_enums.h"
+
+#include "EoCCommon.h"
+
+
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocExtCnuTable(void);
+void shutdown_eocExtCnuTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuTable is subid 1 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1, length: 13
+*/
+/* *********************************************************************
+ * 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 eocExtCnuTable registration context.
+ */
+typedef netsnmp_data_list eocExtCnuTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocExtCnuTable data context structure.
+ * This structure is used to represent the data for eocExtCnuTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocExtCnuTable.
+ */
+typedef struct eocExtCnuTable_data_s {
+
+ /*
+ * eocExtCnuMacLimitation(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/R/d/h
+ */
+ long eocExtCnuMacLimitation;
+
+} eocExtCnuTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocExtCnuTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocExtCnuTable_data eocExtCnuTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocExtCnuTable mib index.
+ * This structure is used to represent the index for eocExtCnuTable.
+ */
+typedef struct eocExtCnuTable_mib_index_s {
+
+ /*
+ * eocExtCnuCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ long eocExtCnuCbatCardIndex;
+
+ /*
+ * eocExtCnuCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ long eocExtCnuCnuIndex;
+
+
+} eocExtCnuTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocExtCnuTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocExtCnuTable_IDX_LEN 2
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocExtCnuTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocExtCnuTable_rowreq_ctx pointer.
+ */
+typedef struct eocExtCnuTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocExtCnuTable_IDX_LEN];
+
+ eocExtCnuTable_mib_index tbl_idx;
+
+ eocExtCnuTable_data data;
+ eocExtCnuTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocExtCnuTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocExtCnuTable_data_list;
+
+} eocExtCnuTable_rowreq_ctx;
+
+typedef struct eocExtCnuTable_ref_rowreq_ctx_s {
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx;
+} eocExtCnuTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocExtCnuTable_pre_request(eocExtCnuTable_registration * user_context);
+ int eocExtCnuTable_post_request(eocExtCnuTable_registration * user_context,
+ int rc);
+
+ int eocExtCnuTable_rowreq_ctx_init(eocExtCnuTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocExtCnuTable_rowreq_ctx_cleanup(eocExtCnuTable_rowreq_ctx *rowreq_ctx);
+
+ int eocExtCnuTable_commit(eocExtCnuTable_rowreq_ctx * rowreq_ctx);
+
+ eocExtCnuTable_rowreq_ctx *
+ eocExtCnuTable_row_find_by_mib_index(eocExtCnuTable_mib_index *mib_idx);
+
+extern oid eocExtCnuTable_oid[];
+extern int eocExtCnuTable_oid_size;
+
+
+#include "eocExtCnuTable_interface.h"
+#include "eocExtCnuTable_data_access.h"
+#include "eocExtCnuTable_data_get.h"
+#include "eocExtCnuTable_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 /* EOCEXTCNUTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_access.c
new file mode 100644
index 0000000000..07fffa02b6
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_access.c
@@ -0,0 +1,373 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuTable.h"
+
+
+#include "eocExtCnuTable_data_access.h"
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuTable is subid 1 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1, length: 13
+*/
+
+/**
+ * initialization for eocExtCnuTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocExtCnuTable_reg
+ * Pointer to eocExtCnuTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocExtCnuTable_init_data(eocExtCnuTable_registration * eocExtCnuTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocExtCnuTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocExtCnuTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocExtCnuTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocExtCnuTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocExtCnuTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocExtCnuTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCEXTCNUTABLE_CACHE_TIMEOUT; /* seconds */
+} /* eocExtCnuTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocExtCnuTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocExtCnuTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocExtCnuTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocExtCnuTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocExtCnuTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocExtCnuTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocExtCnuTable_container_load(netsnmp_container *container)
+{
+
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx;
+
+ int rc = MFD_SUCCESS;
+ libspid_eoc_maclimit_entry_t
+ maclimit_entries[LIBSPID_EOC_MACLIMIT_ITMES_MAX];
+ int maclimit_count;
+ libspid_eoc_wl_entry_t eoc_wl_entry;
+ int i = 0;
+ int count = 0;
+ int tei;
+ int ret;
+
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocExtCnuCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ long eocExtCnuCbatCardIndex = 0;
+ /*
+ * eocExtCnuCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ long eocExtCnuCnuIndex;
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_container_load","called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocExtCnuTable container.
+ * loop over your eocExtCnuTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ memset (maclimit_entries, 0, sizeof (maclimit_entries));
+
+ if (LIBSPID_SUCCESS != libspid_eoc_maclimit_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in maclimitation"
+ " configuration file, cannot sync\n");
+ }
+
+ rc = libspid_eoc_maclimit_get_list (maclimit_entries, &maclimit_count);
+ if (LIBSPID_SUCCESS != rc)
+ {
+ snmp_log (LOG_ERR, "get maclimit list error\n");
+ return MFD_ERROR;
+ }
+
+ if (maclimit_count == 0)
+ rc = MFD_END_OF_DATA;
+ DEBUGMSGTL (("verbose:eocExtCnuTable:eocExtCnuTable_container_load:"
+ "maclimit_count = %d\n", maclimit_count));
+
+ for (i = 0; i < maclimit_count; i++)
+ {
+
+ memset (&eoc_wl_entry, 0, sizeof (eoc_wl_entry));
+ /* get white list entry for current MAC address */
+ ret = libspid_eoc_wl_get (maclimit_entries[i].mac_addr,
+ &eoc_wl_entry);
+
+ if (LIBSPID_SUCCESS == ret)
+ {
+ /* parse current TEI from white list entry */
+ if (1 != sscanf (eoc_wl_entry.tei, "%d", &tei))
+ {
+ eocExtCnuCnuIndex = INVALID_EOCEXTCNUCNUINDEX;
+ }
+ else
+ {
+ /* convert current TEI to slave index */
+ eocExtCnuCnuIndex = tei - 2;
+ }
+ }
+ else
+ {
+ eocExtCnuCnuIndex = INVALID_EOCEXTCNUCNUINDEX;
+ }
+
+ /*
+ * TODO:352:M: | |-> set indexes in new eocExtCnuTable rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocExtCnuTable_allocate_rowreq_ctx(NULL);
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if(MFD_SUCCESS != eocExtCnuTable_indexes_set(rowreq_ctx
+ , eocExtCnuCbatCardIndex
+ , eocExtCnuCnuIndex
+ )) {
+ snmp_log(LOG_ERR,"error setting index while loading "
+ "eocExtCnuTable data.\n");
+ eocExtCnuTable_release_rowreq_ctx(rowreq_ctx);
+ continue;
+ }
+
+ /*
+ * TODO:352:r: | |-> populate eocExtCnuTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocExtCnuMacLimitation
+ * eocExtCnuMacLimitation(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/R/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocExtCnuMacLimitation =
+ strtol (maclimit_entries[i].mac_limitation_num, NULL, 10);
+
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT(container, rowreq_ctx);
+ ++count;
+ }
+
+ DEBUGMSGT(("verbose:eocExtCnuTable:eocExtCnuTable_container_load",
+ "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+} /* eocExtCnuTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocExtCnuTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocExtCnuTable container data.
+ */
+} /* eocExtCnuTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocExtCnuTable_row_prep( eocExtCnuTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocExtCnuTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_access.h
new file mode 100644
index 0000000000..495c1a9929
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_access.h
@@ -0,0 +1,64 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUTABLE_DATA_ACCESS_H
+#define EOCEXTCNUTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuTable is subid 1 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1, length: 13
+*/
+#define INVALID_EOCEXTCNUCNUINDEX (-2)
+
+
+ int eocExtCnuTable_init_data(eocExtCnuTable_registration * eocExtCnuTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocExtCnuTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCEXTCNUTABLE_CACHE_TIMEOUT 60
+
+void eocExtCnuTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocExtCnuTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocExtCnuTable_container_load(netsnmp_container *container);
+void eocExtCnuTable_container_free(netsnmp_container *container);
+
+int eocExtCnuTable_cache_load(netsnmp_container *container);
+void eocExtCnuTable_cache_free(netsnmp_container *container);
+
+ int eocExtCnuTable_row_prep( eocExtCnuTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_get.c
new file mode 100644
index 0000000000..97397875d9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_get.c
@@ -0,0 +1,166 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocExtCnuTable get routines.
+ * TODO:240:M: Implement eocExtCnuTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuTable is subid 1 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1, length: 13
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocExtCnuTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocExtCnuCbatCardIndex_val
+ * @param eocExtCnuCnuIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocExtCnuTable_indexes_set_tbl_idx(eocExtCnuTable_mib_index *tbl_idx, long eocExtCnuCbatCardIndex_val, long eocExtCnuCnuIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocExtCnuCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ tbl_idx->eocExtCnuCbatCardIndex = eocExtCnuCbatCardIndex_val;
+
+ /* eocExtCnuCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ tbl_idx->eocExtCnuCnuIndex = eocExtCnuCnuIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocExtCnuTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocExtCnuTable_indexes_set(eocExtCnuTable_rowreq_ctx *rowreq_ctx, long eocExtCnuCbatCardIndex_val, long eocExtCnuCnuIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocExtCnuTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocExtCnuCbatCardIndex_val
+ , eocExtCnuCnuIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocExtCnuTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocExtCnuTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEntry.eocExtCnuMacLimitation
+ * eocExtCnuMacLimitation is subid 3 of eocExtCnuEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1.1.3
+ * Description:
+The MAC Limitation of the CNU.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 128;
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Extract the current value of the eocExtCnuMacLimitation data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocExtCnuMacLimitation_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocExtCnuMacLimitation_get( eocExtCnuTable_rowreq_ctx *rowreq_ctx, long * eocExtCnuMacLimitation_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocExtCnuMacLimitation_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuMacLimitation_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocExtCnuMacLimitation data.
+ * copy (* eocExtCnuMacLimitation_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocExtCnuMacLimitation_val_ptr ) = rowreq_ctx->data.eocExtCnuMacLimitation;
+
+ return MFD_SUCCESS;
+} /* eocExtCnuMacLimitation_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_get.h
new file mode 100644
index 0000000000..cfe8e60ff8
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_get.h
@@ -0,0 +1,59 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocExtCnuTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCEXTCNUTABLE_DATA_GET_H
+#define EOCEXTCNUTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuTable is subid 1 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1, length: 13
+*/
+ /*
+ * indexes
+ */
+
+ int eocExtCnuMacLimitation_get( eocExtCnuTable_rowreq_ctx *rowreq_ctx, long * eocExtCnuMacLimitation_val_ptr );
+
+
+int eocExtCnuTable_indexes_set_tbl_idx(eocExtCnuTable_mib_index *tbl_idx, long eocExtCnuCbatCardIndex_val, long eocExtCnuCnuIndex_val);
+int eocExtCnuTable_indexes_set(eocExtCnuTable_rowreq_ctx *rowreq_ctx, long eocExtCnuCbatCardIndex_val, long eocExtCnuCnuIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_set.c
new file mode 100644
index 0000000000..c7c03ab54d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_set.c
@@ -0,0 +1,613 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuTable is subid 1 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1, length: 13
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocExtCnuTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocExtCnuTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocExtCnuTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocExtCnuTable_undo_setup( eocExtCnuTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocExtCnuTable undo.
+ * set up eocExtCnuTable undo information, in preparation for a set.
+ * Undo storage is in (* eocExtCnuMacLimitation_val_ptr )*
+ */
+
+ return rc;
+} /* eocExtCnuTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocExtCnuTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocExtCnuTable_undo( eocExtCnuTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocExtCnuTable undo.
+ * eocExtCnuTable undo information, in response to a failed set.
+ * Undo storage is in (* eocExtCnuMacLimitation_val_ptr )*
+ */
+
+ return rc;
+} /* eocExtCnuTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocExtCnuTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocExtCnuTable_undo_cleanup( eocExtCnuTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocExtCnuTable undo.
+ * Undo storage is in (* eocExtCnuMacLimitation_val_ptr )*
+ */
+
+ return rc;
+} /* eocExtCnuTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocExtCnuTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocExtCnuTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocExtCnuTable_commit( eocExtCnuTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+ int tei;
+ libspid_eoc_wl_entry_t wl_entries[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_maclimit_entry_t maclimit_entry;
+ int wl_count;
+ int ret;
+ int i;
+ char mac_addr[LIBSPID_MAC_STR_LEN];
+
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocExtCnuTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_EOCEXTCNUMACLIMITATION_FLAG)
+ {
+ /* clear eocExtCnuMacLimitation */
+ save_flags &= ~COLUMN_EOCEXTCNUMACLIMITATION_FLAG;
+
+ /*
+ * set flag, in case we need to undo eocExtCnuMacLimitation
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCEXTCNUMACLIMITATION_FLAG;
+ }
+
+ /* calculate TEI from table index */
+ tei = rowreq_ctx->tbl_idx.eocExtCnuCnuIndex + 2;
+
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in whitelist configuration file,"
+ " cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ ret = libspid_eoc_wl_get_list (wl_entries, &wl_count);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_get_list error\n");
+ return MFD_ERROR;
+ }
+
+ for (i = 0; i < wl_count; i++)
+ {
+ if (tei == strtol (wl_entries[i].tei, NULL, 10))
+ {
+ strcpy (mac_addr, wl_entries[i].mac_addr);
+ break;
+ }
+ }
+
+ strcpy (maclimit_entry.mac_addr, mac_addr);
+ sprintf (maclimit_entry.mac_limitation_num, "%ld",
+ rowreq_ctx->data.eocExtCnuMacLimitation);
+
+ if (LIBSPID_SUCCESS != libspid_eoc_maclimit_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in maclimitation"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ ret = libspid_eoc_maclimit_set (mac_addr, &maclimit_entry);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_maclimit_set error\n");
+ return MFD_ERROR;
+ }
+
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n", save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocExtCnuTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocExtCnuTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocExtCnuTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocExtCnuTable_undo_commit( eocExtCnuTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ int tei;
+ libspid_eoc_wl_entry_t wl_entries[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_maclimit_entry_t maclimit_entry;
+ int wl_count;
+ int ret;
+ int i;
+ char mac_addr[LIBSPID_MAC_STR_LEN];
+
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_undo_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:485:M: |-> Undo eocExtCnuTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+ /* calculate TEI from table index */
+ tei = rowreq_ctx->tbl_idx.eocExtCnuCnuIndex + 2;
+
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in whitelist configuration file,"
+ " cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ ret = libspid_eoc_wl_get_list (wl_entries, &wl_count);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_get_list error\n");
+ return MFD_ERROR;
+ }
+
+ for (i = 0; i < wl_count; i++)
+ {
+ if (tei == strtol (wl_entries[i].tei, NULL, 10))
+ {
+ strcpy (mac_addr, wl_entries[i].mac_addr);
+ break;
+ }
+ }
+
+ strcpy (maclimit_entry.mac_addr, mac_addr);
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCEXTCNUMACLIMITATION_FLAG)
+ {
+ sprintf (maclimit_entry.mac_limitation_num, "%ld",
+ rowreq_ctx->undo->eocExtCnuMacLimitation);
+ }
+ if (LIBSPID_SUCCESS != libspid_eoc_maclimit_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in maclimitation"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ ret = libspid_eoc_maclimit_set (mac_addr, &maclimit_entry);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_maclimit_set error\n");
+ DEBUGMSGTL (("eocExtCnuTable_undo_commit"
+ "libspid_config_write_line() returned error: %d\n",
+ ret));
+ return MFD_ERROR;
+ }
+ else
+ {
+ DEBUGMSGTL (("eocExtCnuTable_undo_commit",
+ "line succesfully written to conf file!\n"));
+ }
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc)
+ {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocExtCnuTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocExtCnuTable node value checks.
+ * TODO:450:M: Implement eocExtCnuTable undo functions.
+ * TODO:460:M: Implement eocExtCnuTable set functions.
+ * TODO:480:M: Implement eocExtCnuTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEntry.eocExtCnuMacLimitation
+ * eocExtCnuMacLimitation is subid 3 of eocExtCnuEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1.1.3
+ * Description:
+The MAC Limitation of the CNU.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 0 - 128;
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocExtCnuMacLimitation_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocExtCnuTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is in (one of) the range set(s): 0 - 128
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocExtCnuMacLimitation_check_value( eocExtCnuTable_rowreq_ctx *rowreq_ctx, long eocExtCnuMacLimitation_val)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuMacLimitation_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ return MFD_SUCCESS; /* eocExtCnuMacLimitation value not illegal */
+} /* eocExtCnuMacLimitation_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocExtCnuTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocExtCnuTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocExtCnuMacLimitation_undo_setup( eocExtCnuTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuMacLimitation_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocExtCnuMacLimitation undo.
+ */
+ /*
+ * copy eocExtCnuMacLimitation data
+ * set rowreq_ctx->undo->eocExtCnuMacLimitation from rowreq_ctx->data.eocExtCnuMacLimitation
+ */
+ rowreq_ctx->undo->eocExtCnuMacLimitation = rowreq_ctx->data.eocExtCnuMacLimitation;
+
+
+ return MFD_SUCCESS;
+} /* eocExtCnuMacLimitation_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocExtCnuMacLimitation_val
+ * A long containing the new value.
+ */
+int
+eocExtCnuMacLimitation_set( eocExtCnuTable_rowreq_ctx *rowreq_ctx, long eocExtCnuMacLimitation_val )
+{
+
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuMacLimitation_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocExtCnuMacLimitation value.
+ * set eocExtCnuMacLimitation value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocExtCnuMacLimitation = eocExtCnuMacLimitation_val;
+
+ return MFD_SUCCESS;
+} /* eocExtCnuMacLimitation_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocExtCnuMacLimitation_undo( eocExtCnuTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuMacLimitation_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocExtCnuMacLimitation undo.
+ */
+ /*
+ * copy eocExtCnuMacLimitation data
+ * set rowreq_ctx->data.eocExtCnuMacLimitation from rowreq_ctx->undo->eocExtCnuMacLimitation
+ */
+ rowreq_ctx->data.eocExtCnuMacLimitation = rowreq_ctx->undo->eocExtCnuMacLimitation;
+
+
+ return MFD_SUCCESS;
+} /* eocExtCnuMacLimitation_undo */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_set.h
new file mode 100644
index 0000000000..ad27dc21d9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_data_set.h
@@ -0,0 +1,55 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUTABLE_DATA_SET_H
+#define EOCEXTCNUTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuTable is subid 1 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1, length: 13
+*/
+
+
+int eocExtCnuTable_undo_setup( eocExtCnuTable_rowreq_ctx *rowreq_ctx);
+int eocExtCnuTable_undo_cleanup( eocExtCnuTable_rowreq_ctx *rowreq_ctx);
+int eocExtCnuTable_undo( eocExtCnuTable_rowreq_ctx *rowreq_ctx);
+int eocExtCnuTable_commit( eocExtCnuTable_rowreq_ctx *rowreq_ctx);
+int eocExtCnuTable_undo_commit( eocExtCnuTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocExtCnuMacLimitation_check_value( eocExtCnuTable_rowreq_ctx *rowreq_ctx, long eocExtCnuMacLimitation_val);
+int eocExtCnuMacLimitation_undo_setup( eocExtCnuTable_rowreq_ctx *rowreq_ctx );
+int eocExtCnuMacLimitation_set( eocExtCnuTable_rowreq_ctx *rowreq_ctx, long eocExtCnuMacLimitation_val );
+int eocExtCnuMacLimitation_undo( eocExtCnuTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocExtCnuTable_check_dependencies(eocExtCnuTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_enums.h
new file mode 100644
index 0000000000..7d6082f270
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_enums.h
@@ -0,0 +1,40 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUTABLE_ENUMS_H
+#define EOCEXTCNUTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocExtCnuTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_interface.c
new file mode 100644
index 0000000000..b8af812bd0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_interface.c
@@ -0,0 +1,1479 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocExtCnuTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuTable is subid 1 of eocExtCnuMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.1.1, length: 13
+*/
+typedef struct eocExtCnuTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocExtCnuTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocExtCnuTable_interface_ctx;
+
+static eocExtCnuTable_interface_ctx eocExtCnuTable_if_ctx;
+
+static void _eocExtCnuTable_container_init(
+ eocExtCnuTable_interface_ctx *if_ctx);
+static void _eocExtCnuTable_container_shutdown(
+ eocExtCnuTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocExtCnuTable_container_get( void )
+{
+ return eocExtCnuTable_if_ctx.container;
+}
+
+eocExtCnuTable_registration *
+eocExtCnuTable_registration_get( void )
+{
+ return eocExtCnuTable_if_ctx.user_ctx;
+}
+
+eocExtCnuTable_registration *
+eocExtCnuTable_registration_set( eocExtCnuTable_registration * newreg )
+{
+ eocExtCnuTable_registration * old = eocExtCnuTable_if_ctx.user_ctx;
+ eocExtCnuTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocExtCnuTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocExtCnuTable_if_ctx.container);
+}
+
+u_int
+eocExtCnuTable_dirty_get( void )
+{
+ return eocExtCnuTable_if_ctx.table_dirty;
+}
+
+void
+eocExtCnuTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocExtCnuTable:eocExtCnuTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocExtCnuTable_if_ctx.table_dirty, status));
+ eocExtCnuTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocExtCnuTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocExtCnuTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocExtCnuTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocExtCnuTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocExtCnuTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocExtCnuTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocExtCnuTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocExtCnuTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocExtCnuTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocExtCnuTable_commit;
+static Netsnmp_Node_Handler _mfd_eocExtCnuTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocExtCnuTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int _eocExtCnuTable_undo_column( eocExtCnuTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+eocExtCnuTable_data *eocExtCnuTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table eocExtCnuTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocExtCnuTable_initialize_interface(eocExtCnuTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocExtCnuTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocExtCnuTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_eocExtCnuTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocExtCnuTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocExtCnuCbatCardIndex */
+ ASN_INTEGER, /** index: eocExtCnuCnuIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCEXTCNUTABLE_MIN_COL;
+ tbl_info->max_column = EOCEXTCNUTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocExtCnuTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocExtCnuTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocExtCnuTable_container_init(&eocExtCnuTable_if_ctx);
+ if (NULL == eocExtCnuTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocExtCnuTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocExtCnuTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocExtCnuTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocExtCnuTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocExtCnuTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocExtCnuTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocExtCnuTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocExtCnuTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocExtCnuTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocExtCnuTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocExtCnuTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocExtCnuTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocExtCnuTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocExtCnuTable:init_eocExtCnuTable",
+ "Registering eocExtCnuTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocExtCnuTable", handler,
+ eocExtCnuTable_oid,
+ eocExtCnuTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocExtCnuTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocExtCnuTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocExtCnuTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocExtCnuTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocExtCnuTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocExtCnuTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocExtCnuTable
+ */
+void
+_eocExtCnuTable_shutdown_interface(eocExtCnuTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocExtCnuTable_container_shutdown(&eocExtCnuTable_if_ctx);
+}
+
+void
+eocExtCnuTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocExtCnuTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocExtCnuTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocExtCnuTable_index_to_oid(netsnmp_index *oid_idx,
+ eocExtCnuTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocExtCnuCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuCbatCardIndex;
+ /*
+ * eocExtCnuCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuCnuIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocExtCnuCbatCardIndex, 0x00, sizeof(var_eocExtCnuCbatCardIndex) );
+ var_eocExtCnuCbatCardIndex.type = ASN_INTEGER;
+ memset( &var_eocExtCnuCnuIndex, 0x00, sizeof(var_eocExtCnuCnuIndex) );
+ var_eocExtCnuCnuIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocExtCnuCbatCardIndex.next_variable = &var_eocExtCnuCnuIndex; var_eocExtCnuCnuIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_index_to_oid","called\n"));
+
+ /* eocExtCnuCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ snmp_set_var_value(&var_eocExtCnuCbatCardIndex, (u_char*)&mib_idx->eocExtCnuCbatCardIndex,
+ sizeof(mib_idx->eocExtCnuCbatCardIndex));
+
+ /* eocExtCnuCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ snmp_set_var_value(&var_eocExtCnuCnuIndex, (u_char*)&mib_idx->eocExtCnuCnuIndex,
+ sizeof(mib_idx->eocExtCnuCnuIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocExtCnuCbatCardIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocExtCnuCbatCardIndex );
+
+ return err;
+} /* eocExtCnuTable_index_to_oid */
+
+/**
+ * extract eocExtCnuTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocExtCnuTable_index_from_oid(netsnmp_index *oid_idx,
+ eocExtCnuTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocExtCnuCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuCbatCardIndex;
+ /*
+ * eocExtCnuCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuCnuIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocExtCnuCbatCardIndex, 0x00, sizeof(var_eocExtCnuCbatCardIndex) );
+ var_eocExtCnuCbatCardIndex.type = ASN_INTEGER;
+ memset( &var_eocExtCnuCnuIndex, 0x00, sizeof(var_eocExtCnuCnuIndex) );
+ var_eocExtCnuCnuIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocExtCnuCbatCardIndex.next_variable = &var_eocExtCnuCnuIndex; var_eocExtCnuCnuIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocExtCnuCbatCardIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocExtCnuCbatCardIndex = *((long *)var_eocExtCnuCbatCardIndex.val.string);
+ mib_idx->eocExtCnuCnuIndex = *((long *)var_eocExtCnuCnuIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocExtCnuCbatCardIndex );
+
+ return err;
+} /* eocExtCnuTable_index_from_oid */
+
+
+/*
+ * eocExtCnuTable_allocate_data
+ *
+ * Purpose: create new eocExtCnuTable_data.
+ */
+eocExtCnuTable_data *
+eocExtCnuTable_allocate_data(void)
+{
+ eocExtCnuTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocExtCnuTable_data);
+
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocExtCnuTable_data.\n");
+ }
+
+ return rtn;
+} /* eocExtCnuTable_allocate_data */
+
+/*
+ * eocExtCnuTable_release_data
+ *
+ * Purpose: release eocExtCnuTable data.
+ */
+void
+eocExtCnuTable_release_data(eocExtCnuTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuTable:eocExtCnuTable_release_data","called\n"));
+
+ free(data);
+} /* eocExtCnuTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocExtCnuTable_rowreq_ctx
+ */
+eocExtCnuTable_rowreq_ctx *
+eocExtCnuTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocExtCnuTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:eocExtCnuTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocExtCnuTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocExtCnuTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocExtCnuTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocExtCnuTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocExtCnuTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocExtCnuTable_rowreq_ctx
+ */
+void
+eocExtCnuTable_release_rowreq_ctx(eocExtCnuTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocExtCnuTable:eocExtCnuTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocExtCnuTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if(rowreq_ctx->undo)
+ eocExtCnuTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocExtCnuTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocExtCnuTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocExtCnuTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocExtCnuTable_pre_request(eocExtCnuTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuTable","error %d from "
+ "eocExtCnuTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocExtCnuTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocExtCnuTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocExtCnuTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocExtCnuTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocExtCnuTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocExtCnuTable_post_request(eocExtCnuTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuTable","error %d from "
+ "eocExtCnuTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocExtCnuTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocExtCnuTable_interface_ctx *if_ctx =
+ * (eocExtCnuTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocExtCnuTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocExtCnuTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocExtCnuTable_get_column( eocExtCnuTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocExtCnuMacLimitation(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/R/d/h */
+ case COLUMN_EOCEXTCNUMACLIMITATION:
+ var->val_len = sizeof(long);
+ var->type = ASN_INTEGER;
+rc = eocExtCnuMacLimitation_get(rowreq_ctx, (long *)var->val.string );
+ break;
+
+ default:
+ if (EOCEXTCNUTABLE_MIN_COL <= column && column <= EOCEXTCNUTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocExtCnuTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocExtCnuTable_get_column */
+
+int
+_mfd_eocExtCnuTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocExtCnuTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocExtCnuTable_check_column( eocExtCnuTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_eocExtCnuTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocExtCnuCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ case COLUMN_EOCEXTCNUCBATCARDINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /* (INDEX) eocExtCnuCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ case COLUMN_EOCEXTCNUCNUINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocExtCnuMacLimitation(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/R/d/h */
+ case COLUMN_EOCEXTCNUMACLIMITATION:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocExtCnuMacLimitation ) );
+ /* check defined range(s). */
+ if( (SNMPERR_SUCCESS == rc)
+ && ((*var->val.integer < 1) || (*var->val.integer > 128))
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocExtCnuTable:_eocExtCnuTable_check_column:eocExtCnuMacLimitation",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocExtCnuMacLimitation_check_value( rowreq_ctx, *((long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocExtCnuMacLimitation_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocExtCnuTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocExtCnuTable_check_column */
+
+int
+_mfd_eocExtCnuTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocExtCnuTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocExtCnuTable_undo_setup_column( eocExtCnuTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_eocExtCnuTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocExtCnuMacLimitation(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/R/d/h */
+ case COLUMN_EOCEXTCNUMACLIMITATION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCEXTCNUMACLIMITATION_FLAG;
+ rc = eocExtCnuMacLimitation_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocExtCnuTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocExtCnuTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocExtCnuTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocExtCnuTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocExtCnuTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocExtCnuTable:mfd","error %d from "
+ "eocExtCnuTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocExtCnuTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocExtCnuTable:mfd","error %d from "
+ "eocExtCnuTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocExtCnuTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocExtCnuTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuTable:mfd","error %d from "
+ "eocExtCnuTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if(rowreq_ctx->undo) {
+ eocExtCnuTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocExtCnuTable_set_column( eocExtCnuTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_eocExtCnuTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocExtCnuMacLimitation(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/R/d/h */
+ case COLUMN_EOCEXTCNUMACLIMITATION:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCEXTCNUMACLIMITATION_FLAG;
+ rc = eocExtCnuMacLimitation_set(rowreq_ctx, *((long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocExtCnuTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocExtCnuTable_set_column */
+
+int
+_mfd_eocExtCnuTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocExtCnuTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocExtCnuTable:mfd","error %d from "
+ "eocExtCnuTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocExtCnuTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocExtCnuTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocExtCnuTable:mfd","error %d from "
+ "eocExtCnuTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocExtCnuTable_dirty_set( eocExtCnuTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocExtCnuTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocExtCnuTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocExtCnuTable_dirty_set( d - 1 );
+ }
+
+ rc = eocExtCnuTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuTable:mfd","error %d from "
+ "eocExtCnuTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocExtCnuTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocExtCnuTable_undo_column( eocExtCnuTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_eocExtCnuTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocExtCnuMacLimitation(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/R/d/h */
+ case COLUMN_EOCEXTCNUMACLIMITATION:
+ rc = eocExtCnuMacLimitation_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocExtCnuTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocExtCnuTable_undo_column */
+
+int
+_mfd_eocExtCnuTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocExtCnuTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuTable:mfd","error %d from "
+ "eocExtCnuTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocExtCnuTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuTable:mfd","error %d from "
+ "eocExtCnuTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocExtCnuTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_mfd_eocExtCnuTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocExtCnuTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocExtCnuTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocExtCnuTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocExtCnuTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocExtCnuTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocExtCnuTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocExtCnuTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocExtCnuTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocExtCnuTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocExtCnuTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocExtCnuTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocExtCnuTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocExtCnuTable_container_init(eocExtCnuTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocExtCnuTable:_eocExtCnuTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocExtCnuTable_oid,
+ eocExtCnuTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocExtCnuTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocExtCnuTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocExtCnuTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocExtCnuTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocExtCnuTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocExtCnuTable_container_shutdown(eocExtCnuTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocExtCnuTable:_eocExtCnuTable_container_shutdown","called\n"));
+
+ eocExtCnuTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocExtCnuTable_container_shutdown */
+
+
+eocExtCnuTable_rowreq_ctx *
+eocExtCnuTable_row_find_by_mib_index(eocExtCnuTable_mib_index *mib_idx)
+{
+ eocExtCnuTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocExtCnuTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocExtCnuTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_interface.h
new file mode 100644
index 0000000000..acb851cd11
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_interface.h
@@ -0,0 +1,87 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCEXTCNUTABLE_INTERFACE_H
+#define EOCEXTCNUTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocExtCnuTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocExtCnuTable_initialize_interface(eocExtCnuTable_registration * user_ctx,
+ u_long flags);
+void _eocExtCnuTable_shutdown_interface(eocExtCnuTable_registration * user_ctx);
+
+eocExtCnuTable_registration *
+eocExtCnuTable_registration_get( void );
+
+eocExtCnuTable_registration *
+eocExtCnuTable_registration_set( eocExtCnuTable_registration * newreg );
+
+netsnmp_container *eocExtCnuTable_container_get( void );
+int eocExtCnuTable_container_size( void );
+
+u_int eocExtCnuTable_dirty_get( void );
+void eocExtCnuTable_dirty_set( u_int status );
+
+ eocExtCnuTable_rowreq_ctx * eocExtCnuTable_allocate_rowreq_ctx(void *);
+void eocExtCnuTable_release_rowreq_ctx(eocExtCnuTable_rowreq_ctx *rowreq_ctx);
+
+int eocExtCnuTable_index_to_oid(netsnmp_index *oid_idx,
+ eocExtCnuTable_mib_index *mib_idx);
+int eocExtCnuTable_index_from_oid(netsnmp_index *oid_idx,
+ eocExtCnuTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocExtCnuTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_oids.h
new file mode 100644
index 0000000000..0a3c08ee02
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuMgmtObjects/eocExtCnuTable/eocExtCnuTable_oids.h
@@ -0,0 +1,41 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUTABLE_OIDS_H
+#define EOCEXTCNUTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* column number definitions for table eocExtCnuTable */
+#define EOCEXTCNUTABLE_OID 1,3,6,1,4,1,17409,2,4,20,1,1,1
+
+
+#define COLUMN_EOCEXTCNUCBATCARDINDEX 1
+
+#define COLUMN_EOCEXTCNUCNUINDEX 2
+
+#define COLUMN_EOCEXTCNUMACLIMITATION 3
+#define COLUMN_EOCEXTCNUMACLIMITATION_FLAG (0x1 << 0)
+
+
+#define EOCEXTCNUTABLE_MIN_COL COLUMN_EOCEXTCNUMACLIMITATION
+#define EOCEXTCNUTABLE_MAX_COL COLUMN_EOCEXTCNUMACLIMITATION
+
+
+ /*
+ * TODO:405:r: Review EOCEXTCNUTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCEXTCNUTABLE_SETTABLE_COLS (COLUMN_EOCEXTCNUMACLIMITATION_FLAG)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects.h
new file mode 100644
index 0000000000..82647c849d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects.h
@@ -0,0 +1 @@
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable.h
new file mode 100644
index 0000000000..1107589af2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_interface)
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_access)
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_set)
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_get)
+config_require(mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortActualDuplex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortActualDuplex.m2d
new file mode 100644
index 0000000000..3dc01e9128
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortActualDuplex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuEtherPortActualDuplex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortActualSpeed.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortActualSpeed.m2d
new file mode 100644
index 0000000000..4659fd6d91
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortActualSpeed.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuEtherPortActualSpeed
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortCbatCardIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortCbatCardIndex.m2d
new file mode 100644
index 0000000000..71737ed61e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortCbatCardIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuEtherPortCbatCardIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortCnuIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortCnuIndex.m2d
new file mode 100644
index 0000000000..b429a1c097
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortCnuIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuEtherPortCnuIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortCnuPortIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortCnuPortIndex.m2d
new file mode 100644
index 0000000000..80268e129a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortCnuPortIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuEtherPortCnuPortIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortConfAutoNeg.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortConfAutoNeg.m2d
new file mode 100644
index 0000000000..09ed656a54
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortConfAutoNeg.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuEtherPortConfAutoNeg
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortConfDuplex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortConfDuplex.m2d
new file mode 100644
index 0000000000..b198a4d501
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortConfDuplex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuEtherPortConfDuplex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortConfSpeed.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortConfSpeed.m2d
new file mode 100644
index 0000000000..f7538a71f4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/node-eocExtCnuEtherPortConfSpeed.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocExtCnuEtherPortConfSpeed
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/table-eocExtCnuEtherPortTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/table-eocExtCnuEtherPortTable.m2d
new file mode 100644
index 0000000000..321b29ffc2
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/defaults/table-eocExtCnuEtherPortTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocExtCnuEtherPortTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable-README-FIRST.txt
new file mode 100644
index 0000000000..4601c87935
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocExtCnuEtherPortTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocExtCnuEtherPortTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocExtCnuEtherPortTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocExtCnuEtherPortTable_Makefile
+
+
+ File : eocExtCnuEtherPortTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocExtCnuEtherPortTable-README-eocExtCnuEtherPortTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocExtCnuEtherPortTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocExtCnuEtherPortTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocExtCnuEtherPortTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocExtCnuEtherPortTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable-README-eocExtCnuEtherPortTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable-README-eocExtCnuEtherPortTable.txt
new file mode 100644
index 0000000000..ba6846c6e9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable-README-eocExtCnuEtherPortTable.txt
@@ -0,0 +1,775 @@
+************************************************************************
+eocExtCnuEtherPortTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocExtCnuEtherPortTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocExtCnuEtherPortTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocExtCnuEtherPortTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocExtCnuEtherPortTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocExtCnuEtherPortTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocExtCnuEtherPortTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocExtCnuEtherPortTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocExtCnuEtherPortTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocExtCnuEtherPortTable_allocate_data
+ eocExtCnuEtherPortTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocExtCnuEtherPortTable_rowreq_ctx_init
+ eocExtCnuEtherPortTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocExtCnuEtherPortTable table
+ ------------------------------------------------------------
+ The index(es) for the eocExtCnuEtherPortTable table are:
+
+ eocExtCnuEtherPortCbatCardIndex:
+ Syntax: INTEGER32
+ DataType: INTEGER32
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocExtCnuEtherPortCnuIndex:
+ Syntax: INTEGER32
+ DataType: INTEGER32
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocExtCnuEtherPortCnuPortIndex:
+ Syntax: INTEGER32
+ DataType: INTEGER32
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocExtCnuEtherPortTable_data.
+
+
+************************************************************************
+eocExtCnuEtherPortTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocExtCnuEtherPortTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocExtCnuEtherPortTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocExtCnuEtherPortTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocExtCnuEtherPortTable_indexes_set
+ WHERE: eocExtCnuEtherPortTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocExtCnuEtherPortTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocExtCnuEtherPortTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocExtCnuEtherPortConfAutoNeg_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocExtCnuEtherPortConfSpeed_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocExtCnuEtherPortActualSpeed_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocExtCnuEtherPortConfDuplex_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocExtCnuEtherPortActualDuplex_get
+
+
+
+File: eocExtCnuEtherPortTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocExtCnuEtherPortTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table does not support ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocExtCnuEtherPortTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocExtCnuEtherPortConfAutoNeg_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocExtCnuEtherPortConfAutoNeg_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocExtCnuEtherPortConfAutoNeg_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocExtCnuEtherPortConfAutoNeg_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocExtCnuEtherPortConfSpeed_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocExtCnuEtherPortConfSpeed_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocExtCnuEtherPortConfSpeed_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocExtCnuEtherPortConfSpeed_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocExtCnuEtherPortConfDuplex_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocExtCnuEtherPortConfDuplex_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocExtCnuEtherPortConfDuplex_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocExtCnuEtherPortConfDuplex_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocExtCnuEtherPortTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocExtCnuEtherPortTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocExtCnuEtherPortTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocExtCnuEtherPortTable table.
+
+To watch the flow of the eocExtCnuEtherPortTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocExtCnuEtherPortTable
+ verbose:eocExtCnuEtherPortTable
+ internal:eocExtCnuEtherPortTable
+
+e.g.
+ snmpd -f -Le -DeocExtCnuEtherPortTable,verbose:eocExtCnuEtherPortTable,internal:eocExtCnuEtherPortTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuEtherPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortTable is subid 1 of eocExtCnuPortMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1, length: 13
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortCbatCardIndex
+ * eocExtCnuEtherPortCbatCardIndex is subid 1 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.1
+ * Description:
+The index of the CBAT card.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ *
+ *
+ *
+ * NOTE: NODE eocExtCnuEtherPortCbatCardIndex IS NOT ACCESSIBLE
+ *
+ *
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortCnuIndex
+ * eocExtCnuEtherPortCnuIndex is subid 2 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.2
+ * Description:
+The index of the CNU.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ *
+ *
+ *
+ * NOTE: NODE eocExtCnuEtherPortCnuIndex IS NOT ACCESSIBLE
+ *
+ *
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortCnuPortIndex
+ * eocExtCnuEtherPortCnuPortIndex is subid 3 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is NoAccess.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.3
+ * Description:
+The index of the CNU port.
+ *
+ * Attributes:
+ * accessible 0 isscalar 0 enums 0 hasdefval 0
+ * readable 0 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER32 (based on perltype INTEGER32)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ *
+ *
+ *
+ * NOTE: NODE eocExtCnuEtherPortCnuPortIndex IS NOT ACCESSIBLE
+ *
+ *
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortConfAutoNeg
+ * eocExtCnuEtherPortConfAutoNeg is subid 4 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.4
+ * Description:
+neg status.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: enabled(1), disabled(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortConfSpeed
+ * eocExtCnuEtherPortConfSpeed is subid 5 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.5
+ * Description:
+Speed status.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: speed10M(1), speed100M(2), speed1000M(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortActualSpeed
+ * eocExtCnuEtherPortActualSpeed is subid 6 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.6
+ * Description:
+Actual speed status.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 3/8. Values: speed10M(1), speed100M(2), speed1000M(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortConfDuplex
+ * eocExtCnuEtherPortConfDuplex is subid 7 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.7
+ * Description:
+Duplex status.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: half(1), full(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortActualDuplex
+ * eocExtCnuEtherPortActualDuplex is subid 8 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.8
+ * Description:
+Actual duplex status.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: half(1), full(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable.c
new file mode 100644
index 0000000000..c6752036f9
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable.c
@@ -0,0 +1,218 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocExtCnuEtherPortTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuEtherPortTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocExtCnuEtherPortTable_interface.h"
+
+oid eocExtCnuEtherPortTable_oid[] = { EOCEXTCNUETHERPORTTABLE_OID };
+int eocExtCnuEtherPortTable_oid_size = OID_LENGTH(eocExtCnuEtherPortTable_oid);
+
+ eocExtCnuEtherPortTable_registration eocExtCnuEtherPortTable_user_context;
+
+void initialize_table_eocExtCnuEtherPortTable(void);
+void shutdown_table_eocExtCnuEtherPortTable(void);
+
+
+/**
+ * Initializes the eocExtCnuEtherPortTable module
+ */
+void
+init_eocExtCnuEtherPortTable(void)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:init_eocExtCnuEtherPortTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocExtCnuEtherPortTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocExtCnuEtherPortTable"))
+ initialize_table_eocExtCnuEtherPortTable();
+
+} /* init_eocExtCnuEtherPortTable */
+
+/**
+ * Shut-down the eocExtCnuEtherPortTable module (agent is exiting)
+ */
+void
+shutdown_eocExtCnuEtherPortTable(void)
+{
+ if (should_init("eocExtCnuEtherPortTable"))
+ shutdown_table_eocExtCnuEtherPortTable();
+
+}
+
+/**
+ * Initialize the table eocExtCnuEtherPortTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocExtCnuEtherPortTable(void)
+{
+ eocExtCnuEtherPortTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:initialize_table_eocExtCnuEtherPortTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocExtCnuEtherPortTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocExtCnuEtherPortTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocExtCnuEtherPortTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocExtCnuEtherPortTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocExtCnuEtherPortTable */
+
+/**
+ * Shutdown the table eocExtCnuEtherPortTable
+ */
+void
+shutdown_table_eocExtCnuEtherPortTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocExtCnuEtherPortTable_shutdown_interface(&eocExtCnuEtherPortTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocExtCnuEtherPortTable_rowreq_ctx_init(eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocExtCnuEtherPortTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocExtCnuEtherPortTable_rowreq_ctx_cleanup(eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocExtCnuEtherPortTable rowreq cleanup.
+ */
+} /* eocExtCnuEtherPortTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocExtCnuEtherPortTable_pre_request(eocExtCnuEtherPortTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocExtCnuEtherPortTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocExtCnuEtherPortTable_post_request(eocExtCnuEtherPortTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocExtCnuEtherPortTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocExtCnuEtherPortTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocExtCnuEtherPortTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable.h
new file mode 100644
index 0000000000..7624771bf5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable.h
@@ -0,0 +1,224 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUETHERPORTTABLE_H
+#define EOCEXTCNUETHERPORTTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+ /* *INDENT-ON* */
+
+/* OID and column number definitions for eocExtCnuEtherPortTable */
+#include "eocExtCnuEtherPortTable_oids.h"
+
+/* enum definions */
+#include "eocExtCnuEtherPortTable_enums.h"
+
+/* include common header */
+#include "EoCCommon.h"
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocExtCnuEtherPortTable(void);
+void shutdown_eocExtCnuEtherPortTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuEtherPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortTable is subid 1 of eocExtCnuPortMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1, length: 13
+*/
+/* *********************************************************************
+ * 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 eocExtCnuEtherPortTable registration context.
+ */
+typedef netsnmp_data_list eocExtCnuEtherPortTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocExtCnuEtherPortTable data context structure.
+ * This structure is used to represent the data for eocExtCnuEtherPortTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocExtCnuEtherPortTable.
+ */
+typedef struct eocExtCnuEtherPortTable_data_s {
+ /* added to generated code: MAC address
+ of current port (in string format) */
+ char eocExtCnuEtherPortMACAddress[LIBSPID_MAC_STR_LEN];
+ /*
+ * eocExtCnuEtherPortConfAutoNeg(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocExtCnuEtherPortConfAutoNeg;
+
+ /*
+ * eocExtCnuEtherPortConfSpeed(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocExtCnuEtherPortConfSpeed;
+
+ /*
+ * eocExtCnuEtherPortActualSpeed(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long eocExtCnuEtherPortActualSpeed;
+
+ /*
+ * eocExtCnuEtherPortConfDuplex(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocExtCnuEtherPortConfDuplex;
+
+ /*
+ * eocExtCnuEtherPortActualDuplex(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ u_long eocExtCnuEtherPortActualDuplex;
+
+} eocExtCnuEtherPortTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocExtCnuEtherPortTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocExtCnuEtherPortTable_data eocExtCnuEtherPortTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocExtCnuEtherPortTable mib index.
+ * This structure is used to represent the index for eocExtCnuEtherPortTable.
+ */
+typedef struct eocExtCnuEtherPortTable_mib_index_s {
+
+ /*
+ * eocExtCnuEtherPortCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ long eocExtCnuEtherPortCbatCardIndex;
+
+ /*
+ * eocExtCnuEtherPortCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ long eocExtCnuEtherPortCnuIndex;
+
+ /*
+ * eocExtCnuEtherPortCnuPortIndex(3)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ long eocExtCnuEtherPortCnuPortIndex;
+
+
+} eocExtCnuEtherPortTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocExtCnuEtherPortTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocExtCnuEtherPortTable_IDX_LEN 3
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocExtCnuEtherPortTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocExtCnuEtherPortTable_rowreq_ctx pointer.
+ */
+typedef struct eocExtCnuEtherPortTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocExtCnuEtherPortTable_IDX_LEN];
+
+ eocExtCnuEtherPortTable_mib_index tbl_idx;
+
+ eocExtCnuEtherPortTable_data data;
+ eocExtCnuEtherPortTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocExtCnuEtherPortTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocExtCnuEtherPortTable_data_list;
+
+} eocExtCnuEtherPortTable_rowreq_ctx;
+
+typedef struct eocExtCnuEtherPortTable_ref_rowreq_ctx_s {
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx;
+} eocExtCnuEtherPortTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocExtCnuEtherPortTable_pre_request(eocExtCnuEtherPortTable_registration * user_context);
+ int eocExtCnuEtherPortTable_post_request(eocExtCnuEtherPortTable_registration * user_context,
+ int rc);
+
+ int eocExtCnuEtherPortTable_rowreq_ctx_init(eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocExtCnuEtherPortTable_rowreq_ctx_cleanup(eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx);
+
+ int eocExtCnuEtherPortTable_commit(eocExtCnuEtherPortTable_rowreq_ctx * rowreq_ctx);
+
+ eocExtCnuEtherPortTable_rowreq_ctx *
+ eocExtCnuEtherPortTable_row_find_by_mib_index(eocExtCnuEtherPortTable_mib_index *mib_idx);
+
+extern oid eocExtCnuEtherPortTable_oid[];
+extern int eocExtCnuEtherPortTable_oid_size;
+
+
+#include "eocExtCnuEtherPortTable_interface.h"
+#include "eocExtCnuEtherPortTable_data_access.h"
+#include "eocExtCnuEtherPortTable_data_get.h"
+#include "eocExtCnuEtherPortTable_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 /* EOCEXTCNUETHERPORTTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_access.c
new file mode 100644
index 0000000000..7a29a5bd3c
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_access.c
@@ -0,0 +1,440 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuEtherPortTable.h"
+
+
+#include "eocExtCnuEtherPortTable_data_access.h"
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuEtherPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortTable is subid 1 of eocExtCnuPortMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1, length: 13
+*/
+
+/**
+ * initialization for eocExtCnuEtherPortTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocExtCnuEtherPortTable_reg
+ * Pointer to eocExtCnuEtherPortTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocExtCnuEtherPortTable_init_data(eocExtCnuEtherPortTable_registration * eocExtCnuEtherPortTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocExtCnuEtherPortTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocExtCnuEtherPortTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocExtCnuEtherPortTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocExtCnuEtherPortTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocExtCnuEtherPortTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCEXTCNUETHERPORTTABLE_CACHE_TIMEOUT; /* seconds */
+} /* eocExtCnuEtherPortTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocExtCnuEtherPortTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocExtCnuEtherPortTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocExtCnuEtherPortTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocExtCnuEtherPortTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocExtCnuEtherPortTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocExtCnuEtherPortTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocExtCnuEtherPortTable_container_load(netsnmp_container *container)
+{
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+ int rc = MFD_SUCCESS;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocExtCnuEtherPortCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ long eocExtCnuEtherPortCbatCardIndex = 0;
+ /*
+ * eocExtCnuEtherPortCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ long eocExtCnuEtherPortCnuIndex;
+ /*
+ * eocExtCnuEtherPortCnuPortIndex(3)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ long eocExtCnuEtherPortCnuPortIndex;
+
+
+ int i, j;
+ int port_count;
+
+ /* declarations for calls to libspid */
+ char mac_str[LIBSPID_MAC_STR_LEN];
+ char *index_str;
+ libspid_eoc_wl_entry_t eoc_wl_entry;
+ int tei;
+ int ret;
+
+ /* port entries read from config file */
+ libspid_eoc_ethernet_port_entry_t port_entries[LIBSPID_PORT_TOTAL_MAX];
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_container_load","called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocExtCnuEtherPortTable container.
+ * loop over your eocExtCnuEtherPortTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ memset (port_entries, 0x0, sizeof (port_entries));
+
+ if (LIBSPID_SUCCESS != libspid_eoc_ethernet_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in ethernet port table"
+ " configuration file, cannot get\n");
+ }
+
+ /* get current contents of port config file */
+ if (LIBSPID_SUCCESS != libspid_eoc_ethernet_port_get_list (port_entries,
+ &port_count))
+ {
+ snmp_log (LOG_ERR, "port config file not read correctly\n");
+ return MFD_ERROR;
+ }
+
+ if (0 == port_count)
+ {
+ rc = MFD_END_OF_DATA;
+ }
+
+ for (i = 0; i < port_count; i++)
+ {
+
+ /* parse port index from port entry */
+ if (1 != sscanf (port_entries[i].port_index, "%d",
+ &eocExtCnuEtherPortCnuPortIndex))
+ {
+ snmp_log (LOG_ERR,
+ "parsing failed, setting port index to invalid\n");
+ eocExtCnuEtherPortCnuPortIndex = INVALID_EOCETHERNETCNUPORTINDEX;
+ }
+
+ /* copy MAC address from port entry to avoid
+ * being corrupted by call to read_line in wl_get */
+ strncpy (mac_str, port_entries[i].mac_addr, LIBSPID_MAC_STR_LEN);
+
+ memset (&eoc_wl_entry, 0x0, sizeof (eoc_wl_entry));
+
+ /* get white list entry for current MAC address */
+ ret = libspid_eoc_wl_get (mac_str, &eoc_wl_entry);
+
+ if (LIBSPID_SUCCESS == ret)
+ {
+ /* parse current TEI from white list entry */
+ if (1 != sscanf (eoc_wl_entry.tei, "%d", &tei))
+ {
+ snmp_log (LOG_ERR, "error parsing TEI from white list entry,"
+ " setting CNUIndex value to invalid\n");
+ eocExtCnuEtherPortCnuIndex =
+ INVALID_EOCETHERNETCNUPORTCNUINDEX;
+ }
+ else
+ {
+ /* convert current TEI to slave index */
+ eocExtCnuEtherPortCnuIndex = tei - 2;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "PortTable_container_load: ",
+ "cannot find White list entry with current MAC,"
+ " setting CNUIndex value to invalid\n");
+ eocExtCnuEtherPortCnuIndex = INVALID_EOCETHERNETCNUPORTCNUINDEX;
+ }
+
+ /*
+ * TODO:352:M: | |-> set indexes in new eocExtCnuEtherPortTable rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocExtCnuEtherPortTable_allocate_rowreq_ctx(NULL);
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if(MFD_SUCCESS != eocExtCnuEtherPortTable_indexes_set(rowreq_ctx
+ , eocExtCnuEtherPortCbatCardIndex
+ , eocExtCnuEtherPortCnuIndex
+ , eocExtCnuEtherPortCnuPortIndex
+ )) {
+ snmp_log(LOG_ERR,"error setting index while loading "
+ "eocExtCnuEtherPortTable data.\n");
+ eocExtCnuEtherPortTable_release_rowreq_ctx(rowreq_ctx);
+ continue;
+ }
+
+ /* copy slave MAC address to row request context */
+ strcpy (rowreq_ctx->data.eocExtCnuEtherPortMACAddress,
+ port_entries[i].mac_addr);
+ /*
+ * TODO:352:r: | |-> populate eocExtCnuEtherPortTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocExtCnuEtherPortConfAutoNeg
+ * eocExtCnuEtherPortConfAutoNeg(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ /** no mapping */
+ if (strtol (port_entries[i].auto_neg, NULL, 10) == 1)
+ rowreq_ctx->data.eocExtCnuEtherPortConfAutoNeg =
+ EOCEXTCNUETHERPORTCONFAUTONEG_ENABLED;
+ else
+ rowreq_ctx->data.eocExtCnuEtherPortConfAutoNeg =
+ EOCEXTCNUETHERPORTCONFAUTONEG_DISABLED;
+
+
+ /*
+ * setup/save data for eocExtCnuEtherPortConfSpeed
+ * eocExtCnuEtherPortConfSpeed(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocExtCnuEtherPortConfSpeed =
+ (u_long) strtol (port_entries[i].speed, NULL, 10);
+
+ /*
+ * setup/save data for eocExtCnuEtherPortActualSpeed
+ * eocExtCnuEtherPortActualSpeed(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocExtCnuEtherPortActualSpeed =
+ (u_long) strtol (port_entries[i].speed, NULL, 10);
+
+ /*
+ * setup/save data for eocExtCnuEtherPortConfDuplex
+ * eocExtCnuEtherPortConfDuplex(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocExtCnuEtherPortConfDuplex =
+ (u_long) strtol (port_entries[i].duplex, NULL, 10);
+
+ /*
+ * setup/save data for eocExtCnuEtherPortActualDuplex
+ * eocExtCnuEtherPortActualDuplex(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+ */
+ /** no mapping */
+ rowreq_ctx->data.eocExtCnuEtherPortActualDuplex =
+ (u_long) strtol (port_entries[i].duplex, NULL, 10);
+
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT(container, rowreq_ctx);
+ ++count;
+ }
+
+ DEBUGMSGT(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_container_load"
+ "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocExtCnuEtherPortTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocExtCnuEtherPortTable container data.
+ */
+} /* eocExtCnuEtherPortTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocExtCnuEtherPortTable_row_prep( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_access.h
new file mode 100644
index 0000000000..93b9decd77
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_access.h
@@ -0,0 +1,69 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUETHERPORTTABLE_DATA_ACCESS_H
+#define EOCEXTCNUETHERPORTTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* definitions for invalid input value markers */
+#define INVALID_EOCETHERNETCNUPORTCNUINDEX (-2)
+#define INVALID_EOCETHERNETCNUPORTINDEX (-2)
+#define INVALID_EOCETHERNETAUTONEG (-1)
+#define INVALID_EOCETHERNETSPEED (-1)
+#define INVALID_EOCETHERNETDUPLEX (-1)
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuEtherPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortTable is subid 1 of eocExtCnuPortMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1, length: 13
+*/
+
+
+ int eocExtCnuEtherPortTable_init_data(eocExtCnuEtherPortTable_registration * eocExtCnuEtherPortTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocExtCnuEtherPortTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCEXTCNUETHERPORTTABLE_CACHE_TIMEOUT 60
+
+void eocExtCnuEtherPortTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocExtCnuEtherPortTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocExtCnuEtherPortTable_container_load(netsnmp_container *container);
+void eocExtCnuEtherPortTable_container_free(netsnmp_container *container);
+
+int eocExtCnuEtherPortTable_cache_load(netsnmp_container *container);
+void eocExtCnuEtherPortTable_cache_free(netsnmp_container *container);
+
+ int eocExtCnuEtherPortTable_row_prep( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUETHERPORTTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_get.c
new file mode 100644
index 0000000000..67a0432e45
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_get.c
@@ -0,0 +1,379 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuEtherPortTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocExtCnuEtherPortTable get routines.
+ * TODO:240:M: Implement eocExtCnuEtherPortTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuEtherPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortTable is subid 1 of eocExtCnuPortMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1, length: 13
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocExtCnuEtherPortTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocExtCnuEtherPortCbatCardIndex_val
+ * @param eocExtCnuEtherPortCnuIndex_val
+ * @param eocExtCnuEtherPortCnuPortIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocExtCnuEtherPortTable_indexes_set_tbl_idx(eocExtCnuEtherPortTable_mib_index *tbl_idx, long eocExtCnuEtherPortCbatCardIndex_val, long eocExtCnuEtherPortCnuIndex_val, long eocExtCnuEtherPortCnuPortIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocExtCnuEtherPortCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ tbl_idx->eocExtCnuEtherPortCbatCardIndex = eocExtCnuEtherPortCbatCardIndex_val;
+
+ /* eocExtCnuEtherPortCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ tbl_idx->eocExtCnuEtherPortCnuIndex = eocExtCnuEtherPortCnuIndex_val;
+
+ /* eocExtCnuEtherPortCnuPortIndex(3)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ tbl_idx->eocExtCnuEtherPortCnuPortIndex = eocExtCnuEtherPortCnuPortIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocExtCnuEtherPortTable_indexes_set(eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, long eocExtCnuEtherPortCbatCardIndex_val, long eocExtCnuEtherPortCnuIndex_val, long eocExtCnuEtherPortCnuPortIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocExtCnuEtherPortTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocExtCnuEtherPortCbatCardIndex_val
+ , eocExtCnuEtherPortCnuIndex_val
+ , eocExtCnuEtherPortCnuPortIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocExtCnuEtherPortTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortConfAutoNeg
+ * eocExtCnuEtherPortConfAutoNeg is subid 4 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.4
+ * Description:
+neg status.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: enabled(1), disabled(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocExtCnuEtherPortConfAutoNeg data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocExtCnuEtherPortConfAutoNeg_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocExtCnuEtherPortConfAutoNeg_get( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long * eocExtCnuEtherPortConfAutoNeg_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocExtCnuEtherPortConfAutoNeg_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfAutoNeg_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocExtCnuEtherPortConfAutoNeg data.
+ * copy (* eocExtCnuEtherPortConfAutoNeg_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocExtCnuEtherPortConfAutoNeg_val_ptr ) = rowreq_ctx->data.eocExtCnuEtherPortConfAutoNeg;
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortConfAutoNeg_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortConfSpeed
+ * eocExtCnuEtherPortConfSpeed is subid 5 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.5
+ * Description:
+Speed status.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: speed10M(1), speed100M(2), speed1000M(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocExtCnuEtherPortConfSpeed data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocExtCnuEtherPortConfSpeed_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocExtCnuEtherPortConfSpeed_get( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long * eocExtCnuEtherPortConfSpeed_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocExtCnuEtherPortConfSpeed_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfSpeed_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocExtCnuEtherPortConfSpeed data.
+ * copy (* eocExtCnuEtherPortConfSpeed_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocExtCnuEtherPortConfSpeed_val_ptr ) = rowreq_ctx->data.eocExtCnuEtherPortConfSpeed;
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortConfSpeed_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortActualSpeed
+ * eocExtCnuEtherPortActualSpeed is subid 6 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.6
+ * Description:
+Actual speed status.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 3/8. Values: speed10M(1), speed100M(2), speed1000M(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocExtCnuEtherPortActualSpeed data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocExtCnuEtherPortActualSpeed_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocExtCnuEtherPortActualSpeed_get( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long * eocExtCnuEtherPortActualSpeed_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocExtCnuEtherPortActualSpeed_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortActualSpeed_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocExtCnuEtherPortActualSpeed data.
+ * copy (* eocExtCnuEtherPortActualSpeed_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocExtCnuEtherPortActualSpeed_val_ptr ) = rowreq_ctx->data.eocExtCnuEtherPortActualSpeed;
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortActualSpeed_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortConfDuplex
+ * eocExtCnuEtherPortConfDuplex is subid 7 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.7
+ * Description:
+Duplex status.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: half(1), full(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocExtCnuEtherPortConfDuplex data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocExtCnuEtherPortConfDuplex_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocExtCnuEtherPortConfDuplex_get( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long * eocExtCnuEtherPortConfDuplex_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocExtCnuEtherPortConfDuplex_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfDuplex_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocExtCnuEtherPortConfDuplex data.
+ * copy (* eocExtCnuEtherPortConfDuplex_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocExtCnuEtherPortConfDuplex_val_ptr ) = rowreq_ctx->data.eocExtCnuEtherPortConfDuplex;
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortConfDuplex_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortActualDuplex
+ * eocExtCnuEtherPortActualDuplex is subid 8 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.8
+ * Description:
+Actual duplex status.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ * Enum range: 2/8. Values: half(1), full(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocExtCnuEtherPortActualDuplex data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocExtCnuEtherPortActualDuplex_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocExtCnuEtherPortActualDuplex_get( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long * eocExtCnuEtherPortActualDuplex_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocExtCnuEtherPortActualDuplex_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortActualDuplex_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocExtCnuEtherPortActualDuplex data.
+ * copy (* eocExtCnuEtherPortActualDuplex_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocExtCnuEtherPortActualDuplex_val_ptr ) = rowreq_ctx->data.eocExtCnuEtherPortActualDuplex;
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortActualDuplex_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_get.h
new file mode 100644
index 0000000000..51bbf96e83
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_get.h
@@ -0,0 +1,63 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocExtCnuEtherPortTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCEXTCNUETHERPORTTABLE_DATA_GET_H
+#define EOCEXTCNUETHERPORTTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuEtherPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortTable is subid 1 of eocExtCnuPortMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1, length: 13
+*/
+ /*
+ * indexes
+ */
+
+ int eocExtCnuEtherPortConfAutoNeg_get( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long * eocExtCnuEtherPortConfAutoNeg_val_ptr );
+ int eocExtCnuEtherPortConfSpeed_get( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long * eocExtCnuEtherPortConfSpeed_val_ptr );
+ int eocExtCnuEtherPortActualSpeed_get( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long * eocExtCnuEtherPortActualSpeed_val_ptr );
+ int eocExtCnuEtherPortConfDuplex_get( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long * eocExtCnuEtherPortConfDuplex_val_ptr );
+ int eocExtCnuEtherPortActualDuplex_get( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long * eocExtCnuEtherPortActualDuplex_val_ptr );
+
+
+int eocExtCnuEtherPortTable_indexes_set_tbl_idx(eocExtCnuEtherPortTable_mib_index *tbl_idx, long eocExtCnuEtherPortCbatCardIndex_val, long eocExtCnuEtherPortCnuIndex_val, long eocExtCnuEtherPortCnuPortIndex_val);
+int eocExtCnuEtherPortTable_indexes_set(eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, long eocExtCnuEtherPortCbatCardIndex_val, long eocExtCnuEtherPortCnuIndex_val, long eocExtCnuEtherPortCnuPortIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUETHERPORTTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_set.c
new file mode 100644
index 0000000000..f2ced589b1
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_set.c
@@ -0,0 +1,1021 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuEtherPortTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuEtherPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortTable is subid 1 of eocExtCnuPortMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1, length: 13
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocExtCnuEtherPortTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocExtCnuEtherPortTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocExtCnuEtherPortTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocExtCnuEtherPortTable_undo_setup( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocExtCnuEtherPortTable undo.
+ * set up eocExtCnuEtherPortTable undo information, in preparation for a set.
+ * Undo storage is in (* eocExtCnuEtherPortActualDuplex_val_ptr )*
+ */
+
+ return rc;
+} /* eocExtCnuEtherPortTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocExtCnuEtherPortTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocExtCnuEtherPortTable_undo( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocExtCnuEtherPortTable undo.
+ * eocExtCnuEtherPortTable undo information, in response to a failed set.
+ * Undo storage is in (* eocExtCnuEtherPortActualDuplex_val_ptr )*
+ */
+
+ return rc;
+} /* eocExtCnuEtherPortTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocExtCnuEtherPortTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocExtCnuEtherPortTable_undo_cleanup( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocExtCnuEtherPortTable undo.
+ * Undo storage is in (* eocExtCnuEtherPortActualDuplex_val_ptr )*
+ */
+
+ return rc;
+} /* eocExtCnuEtherPortTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocExtCnuEtherPortTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocExtCnuEtherPortTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocExtCnuEtherPortTable_commit( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ int ret;
+
+ libspid_eoc_ethernet_port_entry_t port_entry;
+ char port_key[LIBSPID_LINE_MAX_LEN];
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /* check if current MAC address is valid */
+ netsnmp_assert (NULL != rowreq_ctx->data.eocExtCnuEtherPortMACAddress);
+
+ /* initialize port entry */
+ memset (&port_entry, 0, sizeof (port_entry));
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocExtCnuEtherPortTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ /*
+ * did anything change?
+ */
+ if (0 == save_flags)
+ {
+ DEBUGMSGTL (("meocExtCnuEtherPortTable:"
+ "eocExtCnuEtherPortTable_commit no change\n",
+ "called\n"));
+ return MFD_SUCCESS;
+ }
+
+ if (save_flags & COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG_FLAG)
+ {
+ /* clear eocExtCnuEtherPortConfAutoNeg */
+ save_flags &= ~COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocExtCnuEtherPortConfAutoNeg.
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCEXTCNUETHERPORTCONFSPEED_FLAG)
+ {
+ /* clear eocExtCnuEtherPortConfSpeed */
+ save_flags &= ~COLUMN_EOCEXTCNUETHERPORTCONFSPEED_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocExtCnuEtherPortConfSpeed.
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCEXTCNUETHERPORTCONFSPEED_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX_FLAG)
+ {
+ /* clear eocExtCnuEtherPortConfDuplex */
+ save_flags &= ~COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX_FLAG;
+ /*
+ * TODO:482:o: |-> commit column eocExtCnuEtherPortConfDuplex.
+ */
+ /*
+ * set flag, in case we need to undo eocExtCnuEtherPortConfDuplex
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX_FLAG;
+ }
+ /* convert port index to string */
+ sprintf (port_key, "%ld",
+ rowreq_ctx->tbl_idx.eocExtCnuEtherPortCnuPortIndex);
+
+ /* read existing line from configuration file */
+ ret = libspid_eoc_ethernet_port_get (
+ rowreq_ctx->data.eocExtCnuEtherPortMACAddress,
+ port_key, &port_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_ethernet_port_get error\n");
+ return MFD_ERROR;
+ }
+
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG_FLAG)
+ {
+ /* copy auto neg to ethernet port entry */
+ if (rowreq_ctx->data.eocExtCnuEtherPortConfAutoNeg ==
+ EOCEXTCNUETHERPORTCONFAUTONEG_ENABLED)
+ strcpy (port_entry.auto_neg, "1");
+ else if (rowreq_ctx->data.eocExtCnuEtherPortConfAutoNeg ==
+ EOCEXTCNUETHERPORTCONFAUTONEG_DISABLED)
+ strcpy (port_entry.auto_neg, "0");
+ }
+
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCEXTCNUETHERPORTCONFSPEED_FLAG)
+ {
+ /* copy speed to ethernet port entry */
+ sprintf (port_entry.speed, "%lu",
+ rowreq_ctx->data.eocExtCnuEtherPortConfSpeed);
+ }
+
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX_FLAG)
+ {
+ /* copy duplex to ethernet port entry */
+ sprintf (port_entry.duplex, "%ld",
+ rowreq_ctx->data.eocExtCnuEtherPortConfDuplex);
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_ethernet_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in ethernet port table"
+ " configuration file, cannot commit\n");
+ return MFD_ERROR;
+ }
+
+ /* write modified line to configuration file */
+ ret = libspid_eoc_ethernet_port_set (
+ rowreq_ctx->data.eocExtCnuEtherPortMACAddress,
+ port_key, &port_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_ethernet_port_set error\n");
+ return MFD_ERROR;
+ }
+ else
+ {
+ DEBUGMSGTL (("modEoCCNUPortTable_commit",
+ "line succesfully written to conf file!\n"));
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc)
+ {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags)
+ {
+ snmp_log (LOG_ERR, "unhandled columns (0x%x) in commit\n",
+ save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocExtCnuEtherPortTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocExtCnuEtherPortTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocExtCnuEtherPortTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocExtCnuEtherPortTable_undo_commit( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ int ret;
+
+ libspid_eoc_ethernet_port_entry_t port_entry;
+ char port_key[LIBSPID_LINE_MAX_LEN];
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_undo_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /* initialize port entry */
+ memset (&port_entry, 0, sizeof (port_entry));
+ /*
+ * TODO:485:M: |-> Undo eocExtCnuEtherPortTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+ /* convert port index to string */
+
+ sprintf (port_key, "%ld",
+ rowreq_ctx->tbl_idx.eocExtCnuEtherPortCnuPortIndex);
+
+
+ /* read existing line from configuration file */
+ ret = libspid_eoc_ethernet_port_get (
+ rowreq_ctx->data.eocExtCnuEtherPortMACAddress,
+ port_key, &port_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_ethernet_port_get error\n");
+ return MFD_ERROR;
+ }
+
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG_FLAG)
+ {
+ /* copy auto neg to ethernet port entry */
+ if (rowreq_ctx->undo->eocExtCnuEtherPortConfAutoNeg ==
+ EOCEXTCNUETHERPORTCONFAUTONEG_ENABLED)
+ strcpy (port_entry.auto_neg, "1");
+ else if (rowreq_ctx->undo->eocExtCnuEtherPortConfAutoNeg ==
+ EOCEXTCNUETHERPORTCONFAUTONEG_DISABLED)
+ strcpy (port_entry.auto_neg, "0");
+ }
+
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCEXTCNUETHERPORTCONFSPEED_FLAG)
+ {
+ /* copy speed to ethernet port entry */
+ sprintf (port_entry.speed, "%lu",
+ rowreq_ctx->undo->eocExtCnuEtherPortConfSpeed);
+ }
+
+ if (rowreq_ctx->column_set_flags &
+ COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX_FLAG)
+ {
+ /* copy duplex to ethernet port entry */
+ sprintf (port_entry.duplex, "%ld",
+ rowreq_ctx->undo->eocExtCnuEtherPortConfDuplex);
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_ethernet_port_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in ethernet port table"
+ " configuration file, cannot commit\n");
+ return MFD_ERROR;
+ }
+
+ /* write modified line to configuration file */
+ ret = libspid_eoc_ethernet_port_set (
+ rowreq_ctx->data.eocExtCnuEtherPortMACAddress,
+ port_key, &port_entry);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_line_error\n");
+ DEBUGMSGTL (("eocExtCnuEtherPortTable:"
+ "eocExtCnuEtherPortTable_undo_commit",
+ "libspid_config_write_line() returned error: %d\n",
+ ret));
+ return MFD_ERROR;
+ }
+ else
+ {
+ DEBUGMSGTL (("eocExtEtherPortCCNUPortTable_undo_commit",
+ "line succesfully written to conf file!\n"));
+ }
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc)
+ {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocExtCnuEtherPortTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocExtCnuEtherPortTable node value checks.
+ * TODO:450:M: Implement eocExtCnuEtherPortTable undo functions.
+ * TODO:460:M: Implement eocExtCnuEtherPortTable set functions.
+ * TODO:480:M: Implement eocExtCnuEtherPortTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortConfAutoNeg
+ * eocExtCnuEtherPortConfAutoNeg is subid 4 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.4
+ * Description:
+neg status.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: enabled(1), disabled(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocExtCnuEtherPortConfAutoNeg_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocExtCnuEtherPortTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of enabled(1), disabled(2)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocExtCnuEtherPortConfAutoNeg_check_value( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortConfAutoNeg_val)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfAutoNeg_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocExtCnuEtherPortConfAutoNeg value.
+ */
+
+ return MFD_SUCCESS; /* eocExtCnuEtherPortConfAutoNeg value not illegal */
+} /* eocExtCnuEtherPortConfAutoNeg_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocExtCnuEtherPortTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocExtCnuEtherPortTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocExtCnuEtherPortConfAutoNeg_undo_setup( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfAutoNeg_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocExtCnuEtherPortConfAutoNeg undo.
+ */
+ /*
+ * copy eocExtCnuEtherPortConfAutoNeg data
+ * set rowreq_ctx->undo->eocExtCnuEtherPortConfAutoNeg from rowreq_ctx->data.eocExtCnuEtherPortConfAutoNeg
+ */
+ rowreq_ctx->undo->eocExtCnuEtherPortConfAutoNeg = rowreq_ctx->data.eocExtCnuEtherPortConfAutoNeg;
+
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortConfAutoNeg_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocExtCnuEtherPortConfAutoNeg_val
+ * A long containing the new value.
+ */
+int
+eocExtCnuEtherPortConfAutoNeg_set( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortConfAutoNeg_val )
+{
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfAutoNeg_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocExtCnuEtherPortConfAutoNeg value.
+ * set eocExtCnuEtherPortConfAutoNeg value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocExtCnuEtherPortConfAutoNeg = eocExtCnuEtherPortConfAutoNeg_val;
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortConfAutoNeg_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocExtCnuEtherPortConfAutoNeg_undo( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfAutoNeg_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocExtCnuEtherPortConfAutoNeg undo.
+ */
+ /*
+ * copy eocExtCnuEtherPortConfAutoNeg data
+ * set rowreq_ctx->data.eocExtCnuEtherPortConfAutoNeg from rowreq_ctx->undo->eocExtCnuEtherPortConfAutoNeg
+ */
+ rowreq_ctx->data.eocExtCnuEtherPortConfAutoNeg = rowreq_ctx->undo->eocExtCnuEtherPortConfAutoNeg;
+
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortConfAutoNeg_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortConfSpeed
+ * eocExtCnuEtherPortConfSpeed is subid 5 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.5
+ * Description:
+Speed status.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: speed10M(1), speed100M(2), speed1000M(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocExtCnuEtherPortConfSpeed_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocExtCnuEtherPortTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of speed10M(1), speed100M(2), speed1000M(3)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocExtCnuEtherPortConfSpeed_check_value( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortConfSpeed_val)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfSpeed_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocExtCnuEtherPortConfSpeed value.
+ */
+
+ return MFD_SUCCESS; /* eocExtCnuEtherPortConfSpeed value not illegal */
+} /* eocExtCnuEtherPortConfSpeed_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocExtCnuEtherPortTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocExtCnuEtherPortTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocExtCnuEtherPortConfSpeed_undo_setup( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfSpeed_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocExtCnuEtherPortConfSpeed undo.
+ */
+ /*
+ * copy eocExtCnuEtherPortConfSpeed data
+ * set rowreq_ctx->undo->eocExtCnuEtherPortConfSpeed from rowreq_ctx->data.eocExtCnuEtherPortConfSpeed
+ */
+ rowreq_ctx->undo->eocExtCnuEtherPortConfSpeed = rowreq_ctx->data.eocExtCnuEtherPortConfSpeed;
+
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortConfSpeed_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocExtCnuEtherPortConfSpeed_val
+ * A long containing the new value.
+ */
+int
+eocExtCnuEtherPortConfSpeed_set( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortConfSpeed_val )
+{
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfSpeed_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocExtCnuEtherPortConfSpeed value.
+ * set eocExtCnuEtherPortConfSpeed value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocExtCnuEtherPortConfSpeed = eocExtCnuEtherPortConfSpeed_val;
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortConfSpeed_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocExtCnuEtherPortConfSpeed_undo( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfSpeed_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocExtCnuEtherPortConfSpeed undo.
+ */
+ /*
+ * copy eocExtCnuEtherPortConfSpeed data
+ * set rowreq_ctx->data.eocExtCnuEtherPortConfSpeed from rowreq_ctx->undo->eocExtCnuEtherPortConfSpeed
+ */
+ rowreq_ctx->data.eocExtCnuEtherPortConfSpeed = rowreq_ctx->undo->eocExtCnuEtherPortConfSpeed;
+
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortConfSpeed_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortEntry.eocExtCnuEtherPortConfDuplex
+ * eocExtCnuEtherPortConfDuplex is subid 7 of eocExtCnuEtherPortEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1.1.7
+ * Description:
+Duplex status.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: half(1), full(2)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocExtCnuEtherPortConfDuplex_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocExtCnuEtherPortTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of half(1), full(2)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocExtCnuEtherPortConfDuplex_check_value( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortConfDuplex_val)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfDuplex_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocExtCnuEtherPortConfDuplex value.
+ */
+
+ return MFD_SUCCESS; /* eocExtCnuEtherPortConfDuplex value not illegal */
+} /* eocExtCnuEtherPortConfDuplex_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocExtCnuEtherPortTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocExtCnuEtherPortTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocExtCnuEtherPortConfDuplex_undo_setup( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfDuplex_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocExtCnuEtherPortConfDuplex undo.
+ */
+ /*
+ * copy eocExtCnuEtherPortConfDuplex data
+ * set rowreq_ctx->undo->eocExtCnuEtherPortConfDuplex from rowreq_ctx->data.eocExtCnuEtherPortConfDuplex
+ */
+ rowreq_ctx->undo->eocExtCnuEtherPortConfDuplex = rowreq_ctx->data.eocExtCnuEtherPortConfDuplex;
+
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortConfDuplex_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocExtCnuEtherPortConfDuplex_val
+ * A long containing the new value.
+ */
+int
+eocExtCnuEtherPortConfDuplex_set( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortConfDuplex_val )
+{
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfDuplex_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocExtCnuEtherPortConfDuplex value.
+ * set eocExtCnuEtherPortConfDuplex value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocExtCnuEtherPortConfDuplex = eocExtCnuEtherPortConfDuplex_val;
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortConfDuplex_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocExtCnuEtherPortConfDuplex_undo( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortConfDuplex_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocExtCnuEtherPortConfDuplex undo.
+ */
+ /*
+ * copy eocExtCnuEtherPortConfDuplex data
+ * set rowreq_ctx->data.eocExtCnuEtherPortConfDuplex from rowreq_ctx->undo->eocExtCnuEtherPortConfDuplex
+ */
+ rowreq_ctx->data.eocExtCnuEtherPortConfDuplex = rowreq_ctx->undo->eocExtCnuEtherPortConfDuplex;
+
+
+ return MFD_SUCCESS;
+} /* eocExtCnuEtherPortConfDuplex_undo */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_set.h
new file mode 100644
index 0000000000..8bf8ee63f7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_data_set.h
@@ -0,0 +1,75 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUETHERPORTTABLE_DATA_SET_H
+#define EOCEXTCNUETHERPORTTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuEtherPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortTable is subid 1 of eocExtCnuPortMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1, length: 13
+*/
+
+
+int eocExtCnuEtherPortTable_undo_setup( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx);
+int eocExtCnuEtherPortTable_undo_cleanup( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx);
+int eocExtCnuEtherPortTable_undo( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx);
+int eocExtCnuEtherPortTable_commit( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx);
+int eocExtCnuEtherPortTable_undo_commit( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocExtCnuEtherPortConfAutoNeg_check_value( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortConfAutoNeg_val);
+int eocExtCnuEtherPortConfAutoNeg_undo_setup( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx );
+int eocExtCnuEtherPortConfAutoNeg_set( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortConfAutoNeg_val );
+int eocExtCnuEtherPortConfAutoNeg_undo( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx );
+
+int eocExtCnuEtherPortConfSpeed_check_value( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortConfSpeed_val);
+int eocExtCnuEtherPortConfSpeed_undo_setup( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx );
+int eocExtCnuEtherPortConfSpeed_set( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortConfSpeed_val );
+int eocExtCnuEtherPortConfSpeed_undo( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx );
+
+int eocExtCnuEtherPortActualSpeed_check_value( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortActualSpeed_val);
+int eocExtCnuEtherPortActualSpeed_undo_setup( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx );
+int eocExtCnuEtherPortActualSpeed_set( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortActualSpeed_val );
+int eocExtCnuEtherPortActualSpeed_undo( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx );
+
+int eocExtCnuEtherPortConfDuplex_check_value( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortConfDuplex_val);
+int eocExtCnuEtherPortConfDuplex_undo_setup( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx );
+int eocExtCnuEtherPortConfDuplex_set( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortConfDuplex_val );
+int eocExtCnuEtherPortConfDuplex_undo( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx );
+
+int eocExtCnuEtherPortActualDuplex_check_value( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortActualDuplex_val);
+int eocExtCnuEtherPortActualDuplex_undo_setup( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx );
+int eocExtCnuEtherPortActualDuplex_set( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, u_long eocExtCnuEtherPortActualDuplex_val );
+int eocExtCnuEtherPortActualDuplex_undo( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocExtCnuEtherPortTable_check_dependencies(eocExtCnuEtherPortTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUETHERPORTTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_enums.h
new file mode 100644
index 0000000000..dde5b4d466
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_enums.h
@@ -0,0 +1,122 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUETHERPORTTABLE_ENUMS_H
+#define EOCEXTCNUETHERPORTTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocExtCnuEtherPortTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocExtCnuEtherPortConfAutoNeg (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCEXTCNUETHERPORTCONFAUTONEG_ENUMS
+#define EOCEXTCNUETHERPORTCONFAUTONEG_ENUMS
+
+#define EOCEXTCNUETHERPORTCONFAUTONEG_ENABLED 1
+#define EOCEXTCNUETHERPORTCONFAUTONEG_DISABLED 2
+
+#endif /* EOCEXTCNUETHERPORTCONFAUTONEG_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocExtCnuEtherPortConfSpeed (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCEXTCNUETHERPORTCONFSPEED_ENUMS
+#define EOCEXTCNUETHERPORTCONFSPEED_ENUMS
+
+#define EOCEXTCNUETHERPORTCONFSPEED_SPEED10M 1
+#define EOCEXTCNUETHERPORTCONFSPEED_SPEED100M 2
+#define EOCEXTCNUETHERPORTCONFSPEED_SPEED1000M 3
+
+#endif /* EOCEXTCNUETHERPORTCONFSPEED_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocExtCnuEtherPortActualSpeed (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCEXTCNUETHERPORTACTUALSPEED_ENUMS
+#define EOCEXTCNUETHERPORTACTUALSPEED_ENUMS
+
+#define EOCEXTCNUETHERPORTACTUALSPEED_SPEED10M 1
+#define EOCEXTCNUETHERPORTACTUALSPEED_SPEED100M 2
+#define EOCEXTCNUETHERPORTACTUALSPEED_SPEED1000M 3
+
+#endif /* EOCEXTCNUETHERPORTACTUALSPEED_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocExtCnuEtherPortConfDuplex (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCEXTCNUETHERPORTCONFDUPLEX_ENUMS
+#define EOCEXTCNUETHERPORTCONFDUPLEX_ENUMS
+
+#define EOCEXTCNUETHERPORTCONFDUPLEX_HALF 1
+#define EOCEXTCNUETHERPORTCONFDUPLEX_FULL 2
+
+#endif /* EOCEXTCNUETHERPORTCONFDUPLEX_ENUMS */
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocExtCnuEtherPortActualDuplex (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCEXTCNUETHERPORTACTUALDUPLEX_ENUMS
+#define EOCEXTCNUETHERPORTACTUALDUPLEX_ENUMS
+
+#define EOCEXTCNUETHERPORTACTUALDUPLEX_HALF 1
+#define EOCEXTCNUETHERPORTACTUALDUPLEX_FULL 2
+
+#endif /* EOCEXTCNUETHERPORTACTUALDUPLEX_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUETHERPORTTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_interface.c
new file mode 100644
index 0000000000..e219ab3560
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_interface.c
@@ -0,0 +1,1625 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocExtCnuEtherPortTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocExtCnuEtherPortTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocExtCnuEtherPortTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocExtCnuEtherPortTable is subid 1 of eocExtCnuPortMgmtObjects.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.20.1.2.1, length: 13
+*/
+typedef struct eocExtCnuEtherPortTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocExtCnuEtherPortTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocExtCnuEtherPortTable_interface_ctx;
+
+static eocExtCnuEtherPortTable_interface_ctx eocExtCnuEtherPortTable_if_ctx;
+
+static void _eocExtCnuEtherPortTable_container_init(
+ eocExtCnuEtherPortTable_interface_ctx *if_ctx);
+static void _eocExtCnuEtherPortTable_container_shutdown(
+ eocExtCnuEtherPortTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocExtCnuEtherPortTable_container_get( void )
+{
+ return eocExtCnuEtherPortTable_if_ctx.container;
+}
+
+eocExtCnuEtherPortTable_registration *
+eocExtCnuEtherPortTable_registration_get( void )
+{
+ return eocExtCnuEtherPortTable_if_ctx.user_ctx;
+}
+
+eocExtCnuEtherPortTable_registration *
+eocExtCnuEtherPortTable_registration_set( eocExtCnuEtherPortTable_registration * newreg )
+{
+ eocExtCnuEtherPortTable_registration * old = eocExtCnuEtherPortTable_if_ctx.user_ctx;
+ eocExtCnuEtherPortTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocExtCnuEtherPortTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocExtCnuEtherPortTable_if_ctx.container);
+}
+
+u_int
+eocExtCnuEtherPortTable_dirty_get( void )
+{
+ return eocExtCnuEtherPortTable_if_ctx.table_dirty;
+}
+
+void
+eocExtCnuEtherPortTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocExtCnuEtherPortTable_if_ctx.table_dirty, status));
+ eocExtCnuEtherPortTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocExtCnuEtherPortTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocExtCnuEtherPortTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocExtCnuEtherPortTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocExtCnuEtherPortTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocExtCnuEtherPortTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocExtCnuEtherPortTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocExtCnuEtherPortTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocExtCnuEtherPortTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocExtCnuEtherPortTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocExtCnuEtherPortTable_commit;
+static Netsnmp_Node_Handler _mfd_eocExtCnuEtherPortTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocExtCnuEtherPortTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int _eocExtCnuEtherPortTable_undo_column( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+eocExtCnuEtherPortTable_data *eocExtCnuEtherPortTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table eocExtCnuEtherPortTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocExtCnuEtherPortTable_initialize_interface(eocExtCnuEtherPortTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocExtCnuEtherPortTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocExtCnuEtherPortTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_eocExtCnuEtherPortTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocExtCnuEtherPortTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocExtCnuEtherPortCbatCardIndex */
+ ASN_INTEGER, /** index: eocExtCnuEtherPortCnuIndex */
+ ASN_INTEGER, /** index: eocExtCnuEtherPortCnuPortIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCEXTCNUETHERPORTTABLE_MIN_COL;
+ tbl_info->max_column = EOCEXTCNUETHERPORTTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocExtCnuEtherPortTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocExtCnuEtherPortTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocExtCnuEtherPortTable_container_init(&eocExtCnuEtherPortTable_if_ctx);
+ if (NULL == eocExtCnuEtherPortTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocExtCnuEtherPortTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocExtCnuEtherPortTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocExtCnuEtherPortTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocExtCnuEtherPortTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocExtCnuEtherPortTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocExtCnuEtherPortTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocExtCnuEtherPortTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocExtCnuEtherPortTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocExtCnuEtherPortTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocExtCnuEtherPortTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocExtCnuEtherPortTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocExtCnuEtherPortTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocExtCnuEtherPortTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocExtCnuEtherPortTable:init_eocExtCnuEtherPortTable",
+ "Registering eocExtCnuEtherPortTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocExtCnuEtherPortTable", handler,
+ eocExtCnuEtherPortTable_oid,
+ eocExtCnuEtherPortTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocExtCnuEtherPortTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocExtCnuEtherPortTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocExtCnuEtherPortTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocExtCnuEtherPortTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocExtCnuEtherPortTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocExtCnuEtherPortTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocExtCnuEtherPortTable
+ */
+void
+_eocExtCnuEtherPortTable_shutdown_interface(eocExtCnuEtherPortTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocExtCnuEtherPortTable_container_shutdown(&eocExtCnuEtherPortTable_if_ctx);
+}
+
+void
+eocExtCnuEtherPortTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocExtCnuEtherPortTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocExtCnuEtherPortTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocExtCnuEtherPortTable_index_to_oid(netsnmp_index *oid_idx,
+ eocExtCnuEtherPortTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocExtCnuEtherPortCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuEtherPortCbatCardIndex;
+ /*
+ * eocExtCnuEtherPortCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuEtherPortCnuIndex;
+ /*
+ * eocExtCnuEtherPortCnuPortIndex(3)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuEtherPortCnuPortIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocExtCnuEtherPortCbatCardIndex, 0x00, sizeof(var_eocExtCnuEtherPortCbatCardIndex) );
+ var_eocExtCnuEtherPortCbatCardIndex.type = ASN_INTEGER;
+ memset( &var_eocExtCnuEtherPortCnuIndex, 0x00, sizeof(var_eocExtCnuEtherPortCnuIndex) );
+ var_eocExtCnuEtherPortCnuIndex.type = ASN_INTEGER;
+ memset( &var_eocExtCnuEtherPortCnuPortIndex, 0x00, sizeof(var_eocExtCnuEtherPortCnuPortIndex) );
+ var_eocExtCnuEtherPortCnuPortIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocExtCnuEtherPortCbatCardIndex.next_variable = &var_eocExtCnuEtherPortCnuIndex; var_eocExtCnuEtherPortCnuIndex.next_variable = &var_eocExtCnuEtherPortCnuPortIndex; var_eocExtCnuEtherPortCnuPortIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_index_to_oid","called\n"));
+
+ /* eocExtCnuEtherPortCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ snmp_set_var_value(&var_eocExtCnuEtherPortCbatCardIndex, (u_char*)&mib_idx->eocExtCnuEtherPortCbatCardIndex,
+ sizeof(mib_idx->eocExtCnuEtherPortCbatCardIndex));
+
+ /* eocExtCnuEtherPortCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ snmp_set_var_value(&var_eocExtCnuEtherPortCnuIndex, (u_char*)&mib_idx->eocExtCnuEtherPortCnuIndex,
+ sizeof(mib_idx->eocExtCnuEtherPortCnuIndex));
+
+ /* eocExtCnuEtherPortCnuPortIndex(3)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ snmp_set_var_value(&var_eocExtCnuEtherPortCnuPortIndex, (u_char*)&mib_idx->eocExtCnuEtherPortCnuPortIndex,
+ sizeof(mib_idx->eocExtCnuEtherPortCnuPortIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocExtCnuEtherPortCbatCardIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocExtCnuEtherPortCbatCardIndex );
+
+ return err;
+} /* eocExtCnuEtherPortTable_index_to_oid */
+
+/**
+ * extract eocExtCnuEtherPortTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocExtCnuEtherPortTable_index_from_oid(netsnmp_index *oid_idx,
+ eocExtCnuEtherPortTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocExtCnuEtherPortCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuEtherPortCbatCardIndex;
+ /*
+ * eocExtCnuEtherPortCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuEtherPortCnuIndex;
+ /*
+ * eocExtCnuEtherPortCnuPortIndex(3)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocExtCnuEtherPortCnuPortIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocExtCnuEtherPortCbatCardIndex, 0x00, sizeof(var_eocExtCnuEtherPortCbatCardIndex) );
+ var_eocExtCnuEtherPortCbatCardIndex.type = ASN_INTEGER;
+ memset( &var_eocExtCnuEtherPortCnuIndex, 0x00, sizeof(var_eocExtCnuEtherPortCnuIndex) );
+ var_eocExtCnuEtherPortCnuIndex.type = ASN_INTEGER;
+ memset( &var_eocExtCnuEtherPortCnuPortIndex, 0x00, sizeof(var_eocExtCnuEtherPortCnuPortIndex) );
+ var_eocExtCnuEtherPortCnuPortIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocExtCnuEtherPortCbatCardIndex.next_variable = &var_eocExtCnuEtherPortCnuIndex; var_eocExtCnuEtherPortCnuIndex.next_variable = &var_eocExtCnuEtherPortCnuPortIndex; var_eocExtCnuEtherPortCnuPortIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocExtCnuEtherPortCbatCardIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocExtCnuEtherPortCbatCardIndex = *((long *)var_eocExtCnuEtherPortCbatCardIndex.val.string);
+ mib_idx->eocExtCnuEtherPortCnuIndex = *((long *)var_eocExtCnuEtherPortCnuIndex.val.string);
+ mib_idx->eocExtCnuEtherPortCnuPortIndex = *((long *)var_eocExtCnuEtherPortCnuPortIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocExtCnuEtherPortCbatCardIndex );
+
+ return err;
+} /* eocExtCnuEtherPortTable_index_from_oid */
+
+
+/*
+ * eocExtCnuEtherPortTable_allocate_data
+ *
+ * Purpose: create new eocExtCnuEtherPortTable_data.
+ */
+eocExtCnuEtherPortTable_data *
+eocExtCnuEtherPortTable_allocate_data(void)
+{
+ eocExtCnuEtherPortTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocExtCnuEtherPortTable_data);
+
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocExtCnuEtherPortTable_data.\n");
+ }
+
+ return rtn;
+} /* eocExtCnuEtherPortTable_allocate_data */
+
+/*
+ * eocExtCnuEtherPortTable_release_data
+ *
+ * Purpose: release eocExtCnuEtherPortTable data.
+ */
+void
+eocExtCnuEtherPortTable_release_data(eocExtCnuEtherPortTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_release_data","called\n"));
+
+ free(data);
+} /* eocExtCnuEtherPortTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocExtCnuEtherPortTable_rowreq_ctx
+ */
+eocExtCnuEtherPortTable_rowreq_ctx *
+eocExtCnuEtherPortTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocExtCnuEtherPortTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocExtCnuEtherPortTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocExtCnuEtherPortTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocExtCnuEtherPortTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocExtCnuEtherPortTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocExtCnuEtherPortTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocExtCnuEtherPortTable_rowreq_ctx
+ */
+void
+eocExtCnuEtherPortTable_release_rowreq_ctx(eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:eocExtCnuEtherPortTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocExtCnuEtherPortTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if(rowreq_ctx->undo)
+ eocExtCnuEtherPortTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocExtCnuEtherPortTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocExtCnuEtherPortTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocExtCnuEtherPortTable_pre_request(eocExtCnuEtherPortTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuEtherPortTable","error %d from "
+ "eocExtCnuEtherPortTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuEtherPortTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocExtCnuEtherPortTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocExtCnuEtherPortTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocExtCnuEtherPortTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocExtCnuEtherPortTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocExtCnuEtherPortTable_post_request(eocExtCnuEtherPortTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuEtherPortTable","error %d from "
+ "eocExtCnuEtherPortTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuEtherPortTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocExtCnuEtherPortTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocExtCnuEtherPortTable_interface_ctx *if_ctx =
+ * (eocExtCnuEtherPortTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocExtCnuEtherPortTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocExtCnuEtherPortTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocExtCnuEtherPortTable_get_column( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocExtCnuEtherPortConfAutoNeg(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocExtCnuEtherPortConfAutoNeg_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocExtCnuEtherPortConfSpeed(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFSPEED:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocExtCnuEtherPortConfSpeed_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocExtCnuEtherPortActualSpeed(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTACTUALSPEED:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocExtCnuEtherPortActualSpeed_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocExtCnuEtherPortConfDuplex(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocExtCnuEtherPortConfDuplex_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocExtCnuEtherPortActualDuplex(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTACTUALDUPLEX:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocExtCnuEtherPortActualDuplex_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ default:
+ if (EOCEXTCNUETHERPORTTABLE_MIN_COL <= column && column <= EOCEXTCNUETHERPORTTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocExtCnuEtherPortTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocExtCnuEtherPortTable_get_column */
+
+int
+_mfd_eocExtCnuEtherPortTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocExtCnuEtherPortTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuEtherPortTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocExtCnuEtherPortTable_check_column( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_eocExtCnuEtherPortTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocExtCnuEtherPortCbatCardIndex(1)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCBATCARDINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /* (INDEX) eocExtCnuEtherPortCnuIndex(2)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCNUINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /* (INDEX) eocExtCnuEtherPortCnuPortIndex(3)/INTEGER32/ASN_INTEGER/long(long)//l/a/w/e/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCNUPORTINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocExtCnuEtherPortConfAutoNeg(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocExtCnuEtherPortConfAutoNeg ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCEXTCNUETHERPORTCONFAUTONEG_ENABLED )
+ && ( *var->val.integer != EOCEXTCNUETHERPORTCONFAUTONEG_DISABLED )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocExtCnuEtherPortTable:_eocExtCnuEtherPortTable_check_column:eocExtCnuEtherPortConfAutoNeg",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocExtCnuEtherPortConfAutoNeg_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocExtCnuEtherPortConfAutoNeg_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocExtCnuEtherPortConfSpeed(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFSPEED:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocExtCnuEtherPortConfSpeed ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCEXTCNUETHERPORTCONFSPEED_SPEED10M )
+ && ( *var->val.integer != EOCEXTCNUETHERPORTCONFSPEED_SPEED100M )
+ && ( *var->val.integer != EOCEXTCNUETHERPORTCONFSPEED_SPEED1000M )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocExtCnuEtherPortTable:_eocExtCnuEtherPortTable_check_column:eocExtCnuEtherPortConfSpeed",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocExtCnuEtherPortConfSpeed_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocExtCnuEtherPortConfSpeed_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocExtCnuEtherPortActualSpeed(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTACTUALSPEED:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ /* eocExtCnuEtherPortConfDuplex(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocExtCnuEtherPortConfDuplex ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCEXTCNUETHERPORTCONFDUPLEX_HALF )
+ && ( *var->val.integer != EOCEXTCNUETHERPORTCONFDUPLEX_FULL )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocExtCnuEtherPortTable:_eocExtCnuEtherPortTable_check_column:eocExtCnuEtherPortConfDuplex",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocExtCnuEtherPortConfDuplex_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocExtCnuEtherPortConfDuplex_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocExtCnuEtherPortActualDuplex(8)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTACTUALDUPLEX:
+ rc = SNMP_ERR_NOTWRITABLE;
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocExtCnuEtherPortTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocExtCnuEtherPortTable_check_column */
+
+int
+_mfd_eocExtCnuEtherPortTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocExtCnuEtherPortTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuEtherPortTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocExtCnuEtherPortTable_undo_setup_column( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_eocExtCnuEtherPortTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocExtCnuEtherPortConfAutoNeg(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG_FLAG;
+ rc = eocExtCnuEtherPortConfAutoNeg_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocExtCnuEtherPortConfSpeed(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFSPEED:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCEXTCNUETHERPORTCONFSPEED_FLAG;
+ rc = eocExtCnuEtherPortConfSpeed_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocExtCnuEtherPortConfDuplex(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX_FLAG;
+ rc = eocExtCnuEtherPortConfDuplex_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocExtCnuEtherPortTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocExtCnuEtherPortTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocExtCnuEtherPortTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocExtCnuEtherPortTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocExtCnuEtherPortTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocExtCnuEtherPortTable:mfd","error %d from "
+ "eocExtCnuEtherPortTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocExtCnuEtherPortTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocExtCnuEtherPortTable:mfd","error %d from "
+ "eocExtCnuEtherPortTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuEtherPortTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocExtCnuEtherPortTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocExtCnuEtherPortTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuEtherPortTable:mfd","error %d from "
+ "eocExtCnuEtherPortTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if(rowreq_ctx->undo) {
+ eocExtCnuEtherPortTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuEtherPortTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocExtCnuEtherPortTable_set_column( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_eocExtCnuEtherPortTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocExtCnuEtherPortConfAutoNeg(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG_FLAG;
+ rc = eocExtCnuEtherPortConfAutoNeg_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocExtCnuEtherPortConfSpeed(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFSPEED:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCEXTCNUETHERPORTCONFSPEED_FLAG;
+ rc = eocExtCnuEtherPortConfSpeed_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ /* eocExtCnuEtherPortConfDuplex(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX_FLAG;
+ rc = eocExtCnuEtherPortConfDuplex_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocExtCnuEtherPortTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocExtCnuEtherPortTable_set_column */
+
+int
+_mfd_eocExtCnuEtherPortTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocExtCnuEtherPortTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocExtCnuEtherPortTable:mfd","error %d from "
+ "eocExtCnuEtherPortTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuEtherPortTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocExtCnuEtherPortTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocExtCnuEtherPortTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocExtCnuEtherPortTable:mfd","error %d from "
+ "eocExtCnuEtherPortTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocExtCnuEtherPortTable_dirty_set( eocExtCnuEtherPortTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocExtCnuEtherPortTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocExtCnuEtherPortTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocExtCnuEtherPortTable_dirty_set( d - 1 );
+ }
+
+ rc = eocExtCnuEtherPortTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuEtherPortTable:mfd","error %d from "
+ "eocExtCnuEtherPortTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocExtCnuEtherPortTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuEtherPortTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocExtCnuEtherPortTable_undo_column( eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_eocExtCnuEtherPortTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocExtCnuEtherPortConfAutoNeg(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG:
+ rc = eocExtCnuEtherPortConfAutoNeg_undo(rowreq_ctx);
+ break;
+
+ /* eocExtCnuEtherPortConfSpeed(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFSPEED:
+ rc = eocExtCnuEtherPortConfSpeed_undo(rowreq_ctx);
+ break;
+
+ /* eocExtCnuEtherPortConfDuplex(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX:
+ rc = eocExtCnuEtherPortConfDuplex_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocExtCnuEtherPortTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocExtCnuEtherPortTable_undo_column */
+
+int
+_mfd_eocExtCnuEtherPortTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocExtCnuEtherPortTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuEtherPortTable:mfd","error %d from "
+ "eocExtCnuEtherPortTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocExtCnuEtherPortTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocExtCnuEtherPortTable:mfd","error %d from "
+ "eocExtCnuEtherPortTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuEtherPortTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocExtCnuEtherPortTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_mfd_eocExtCnuEtherPortTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocExtCnuEtherPortTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocExtCnuEtherPortTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocExtCnuEtherPortTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocExtCnuEtherPortTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocExtCnuEtherPortTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocExtCnuEtherPortTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocExtCnuEtherPortTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocExtCnuEtherPortTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocExtCnuEtherPortTable_container_init(eocExtCnuEtherPortTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_eocExtCnuEtherPortTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocExtCnuEtherPortTable_oid,
+ eocExtCnuEtherPortTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocExtCnuEtherPortTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocExtCnuEtherPortTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocExtCnuEtherPortTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocExtCnuEtherPortTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocExtCnuEtherPortTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocExtCnuEtherPortTable_container_shutdown(eocExtCnuEtherPortTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocExtCnuEtherPortTable:_eocExtCnuEtherPortTable_container_shutdown","called\n"));
+
+ eocExtCnuEtherPortTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocExtCnuEtherPortTable_container_shutdown */
+
+
+eocExtCnuEtherPortTable_rowreq_ctx *
+eocExtCnuEtherPortTable_row_find_by_mib_index(eocExtCnuEtherPortTable_mib_index *mib_idx)
+{
+ eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocExtCnuEtherPortTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocExtCnuEtherPortTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_interface.h
new file mode 100644
index 0000000000..08edcb8c53
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_interface.h
@@ -0,0 +1,87 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCEXTCNUETHERPORTTABLE_INTERFACE_H
+#define EOCEXTCNUETHERPORTTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocExtCnuEtherPortTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocExtCnuEtherPortTable_initialize_interface(eocExtCnuEtherPortTable_registration * user_ctx,
+ u_long flags);
+void _eocExtCnuEtherPortTable_shutdown_interface(eocExtCnuEtherPortTable_registration * user_ctx);
+
+eocExtCnuEtherPortTable_registration *
+eocExtCnuEtherPortTable_registration_get( void );
+
+eocExtCnuEtherPortTable_registration *
+eocExtCnuEtherPortTable_registration_set( eocExtCnuEtherPortTable_registration * newreg );
+
+netsnmp_container *eocExtCnuEtherPortTable_container_get( void );
+int eocExtCnuEtherPortTable_container_size( void );
+
+u_int eocExtCnuEtherPortTable_dirty_get( void );
+void eocExtCnuEtherPortTable_dirty_set( u_int status );
+
+ eocExtCnuEtherPortTable_rowreq_ctx * eocExtCnuEtherPortTable_allocate_rowreq_ctx(void *);
+void eocExtCnuEtherPortTable_release_rowreq_ctx(eocExtCnuEtherPortTable_rowreq_ctx *rowreq_ctx);
+
+int eocExtCnuEtherPortTable_index_to_oid(netsnmp_index *oid_idx,
+ eocExtCnuEtherPortTable_mib_index *mib_idx);
+int eocExtCnuEtherPortTable_index_from_oid(netsnmp_index *oid_idx,
+ eocExtCnuEtherPortTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocExtCnuEtherPortTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUETHERPORTTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_oids.h
new file mode 100644
index 0000000000..b6143998ed
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocExtObjects/eocExtCnuObjects/eocExtCnuPortMgmtObjects/eocExtCnuEtherPortTable/eocExtCnuEtherPortTable_oids.h
@@ -0,0 +1,53 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCEXTCNUETHERPORTTABLE_OIDS_H
+#define EOCEXTCNUETHERPORTTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* column number definitions for table eocExtCnuEtherPortTable */
+#define EOCEXTCNUETHERPORTTABLE_OID 1,3,6,1,4,1,17409,2,4,20,1,2,1
+
+
+#define COLUMN_EOCEXTCNUETHERPORTCBATCARDINDEX 1
+
+#define COLUMN_EOCEXTCNUETHERPORTCNUINDEX 2
+
+#define COLUMN_EOCEXTCNUETHERPORTCNUPORTINDEX 3
+
+#define COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG 4
+#define COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG_FLAG (0x1 << 0)
+
+#define COLUMN_EOCEXTCNUETHERPORTCONFSPEED 5
+#define COLUMN_EOCEXTCNUETHERPORTCONFSPEED_FLAG (0x1 << 1)
+
+#define COLUMN_EOCEXTCNUETHERPORTACTUALSPEED 6
+
+#define COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX 7
+#define COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX_FLAG (0x1 << 2)
+
+#define COLUMN_EOCEXTCNUETHERPORTACTUALDUPLEX 8
+
+
+#define EOCEXTCNUETHERPORTTABLE_MIN_COL COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG
+#define EOCEXTCNUETHERPORTTABLE_MAX_COL COLUMN_EOCEXTCNUETHERPORTACTUALDUPLEX
+
+
+ /*
+ * TODO:405:r: Review EOCEXTCNUETHERPORTTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCEXTCNUETHERPORTTABLE_SETTABLE_COLS (COLUMN_EOCEXTCNUETHERPORTCONFAUTONEG_FLAG | COLUMN_EOCEXTCNUETHERPORTCONFSPEED_FLAG | COLUMN_EOCEXTCNUETHERPORTCONFDUPLEX_FLAG)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCEXTCNUETHERPORTTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup.h
new file mode 100644
index 0000000000..0ed204ed75
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup.h
@@ -0,0 +1 @@
+config_require(mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable.h
new file mode 100644
index 0000000000..fcdf877019
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_set)
+config_require(mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_access)
+config_require(mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_get)
+config_require(mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_interface)
+config_require(mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingCBATCardIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingCBATCardIndex.m2d
new file mode 100644
index 0000000000..2ea765949d
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingCBATCardIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocIGMPSnoopingCBATCardIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingCNUIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingCNUIndex.m2d
new file mode 100644
index 0000000000..d34ea906cf
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingCNUIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocIGMPSnoopingCNUIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingDevMACAddress.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingDevMACAddress.m2d
new file mode 100644
index 0000000000..37036c395a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingDevMACAddress.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocIGMPSnoopingDevMACAddress
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingEN.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingEN.m2d
new file mode 100644
index 0000000000..219d1af742
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/node-eocIGMPSnoopingEN.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocIGMPSnoopingEN
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/table-eocIGMPSnoopingTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/table-eocIGMPSnoopingTable.m2d
new file mode 100644
index 0000000000..2de09eaadd
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/defaults/table-eocIGMPSnoopingTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocIGMPSnoopingTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = 1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable-README-FIRST.txt
new file mode 100644
index 0000000000..f1348ba1ce
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocIGMPSnoopingTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocIGMPSnoopingTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocIGMPSnoopingTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocIGMPSnoopingTable_Makefile
+
+
+ File : eocIGMPSnoopingTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocIGMPSnoopingTable-README-eocIGMPSnoopingTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocIGMPSnoopingTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocIGMPSnoopingTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocIGMPSnoopingTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocIGMPSnoopingTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable-README-eocIGMPSnoopingTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable-README-eocIGMPSnoopingTable.txt
new file mode 100644
index 0000000000..aad891c456
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable-README-eocIGMPSnoopingTable.txt
@@ -0,0 +1,631 @@
+************************************************************************
+eocIGMPSnoopingTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocIGMPSnoopingTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocIGMPSnoopingTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocIGMPSnoopingTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocIGMPSnoopingTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocIGMPSnoopingTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocIGMPSnoopingTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocIGMPSnoopingTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocIGMPSnoopingTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocIGMPSnoopingTable_allocate_data
+ eocIGMPSnoopingTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocIGMPSnoopingTable_rowreq_ctx_init
+ eocIGMPSnoopingTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocIGMPSnoopingTable table
+ ------------------------------------------------------------
+ The index(es) for the eocIGMPSnoopingTable table are:
+
+ eocIGMPSnoopingCBATCardIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocIGMPSnoopingCNUIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocIGMPSnoopingTable_data.
+
+
+************************************************************************
+eocIGMPSnoopingTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocIGMPSnoopingTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocIGMPSnoopingTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocIGMPSnoopingTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocIGMPSnoopingTable_indexes_set
+ WHERE: eocIGMPSnoopingTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocIGMPSnoopingTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocIGMPSnoopingTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocIGMPSnoopingDevMACAddress_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocIGMPSnoopingEN_get
+
+
+
+File: eocIGMPSnoopingTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocIGMPSnoopingTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table does not support ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocIGMPSnoopingTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocIGMPSnoopingDevMACAddress_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocIGMPSnoopingDevMACAddress_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocIGMPSnoopingDevMACAddress_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocIGMPSnoopingDevMACAddress_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocIGMPSnoopingEN_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocIGMPSnoopingEN_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocIGMPSnoopingEN_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocIGMPSnoopingEN_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocIGMPSnoopingTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocIGMPSnoopingTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocIGMPSnoopingTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocIGMPSnoopingTable table.
+
+To watch the flow of the eocIGMPSnoopingTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocIGMPSnoopingTable
+ verbose:eocIGMPSnoopingTable
+ internal:eocIGMPSnoopingTable
+
+e.g.
+ snmpd -f -Le -DeocIGMPSnoopingTable,verbose:eocIGMPSnoopingTable,internal:eocIGMPSnoopingTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocIGMPSnoopingTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingTable is subid 1 of eocIGMPSnoopingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1, length: 11
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingEntry.eocIGMPSnoopingCBATCardIndex
+ * eocIGMPSnoopingCBATCardIndex is subid 1 of eocIGMPSnoopingEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1.1.1
+ * Description:
+CBAT°å¿¨µÄÐòºÅË÷Òý£¬»òCNUËùÊôCBAT°å¿¨µÄÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingEntry.eocIGMPSnoopingCNUIndex
+ * eocIGMPSnoopingCNUIndex is subid 2 of eocIGMPSnoopingEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1.1.2
+ * Description:
+CNUµÄÐòºÅË÷Òý£¬Èç¹ûÊÇÉèÖÃCBAT°å¿¨£¬ÔòȡֵΪ0¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ *
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingEntry.eocIGMPSnoopingDevMACAddress
+ * eocIGMPSnoopingDevMACAddress is subid 3 of eocIGMPSnoopingEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1.1.3
+ * Description:
+CNU MACµØÖ·¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingEntry.eocIGMPSnoopingEN
+ * eocIGMPSnoopingEN is subid 4 of eocIGMPSnoopingEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1.1.4
+ * Description:
+É豸IGMP Snooping¿ª¹Ø¡£
+ 0±íʾ½ûÖ¹£¬1±íʾʹÄÜ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable.c
new file mode 100644
index 0000000000..c83a883f85
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable.c
@@ -0,0 +1,218 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocIGMPSnoopingTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocIGMPSnoopingTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocIGMPSnoopingTable_interface.h"
+
+oid eocIGMPSnoopingTable_oid[] = { EOCIGMPSNOOPINGTABLE_OID };
+int eocIGMPSnoopingTable_oid_size = OID_LENGTH(eocIGMPSnoopingTable_oid);
+
+ eocIGMPSnoopingTable_registration eocIGMPSnoopingTable_user_context;
+
+void initialize_table_eocIGMPSnoopingTable(void);
+void shutdown_table_eocIGMPSnoopingTable(void);
+
+
+/**
+ * Initializes the eocIGMPSnoopingTable module
+ */
+void
+init_eocIGMPSnoopingTable(void)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:init_eocIGMPSnoopingTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocIGMPSnoopingTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocIGMPSnoopingTable"))
+ initialize_table_eocIGMPSnoopingTable();
+
+} /* init_eocIGMPSnoopingTable */
+
+/**
+ * Shut-down the eocIGMPSnoopingTable module (agent is exiting)
+ */
+void
+shutdown_eocIGMPSnoopingTable(void)
+{
+ if (should_init("eocIGMPSnoopingTable"))
+ shutdown_table_eocIGMPSnoopingTable();
+
+}
+
+/**
+ * Initialize the table eocIGMPSnoopingTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocIGMPSnoopingTable(void)
+{
+ eocIGMPSnoopingTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:initialize_table_eocIGMPSnoopingTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocIGMPSnoopingTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocIGMPSnoopingTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocIGMPSnoopingTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocIGMPSnoopingTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocIGMPSnoopingTable */
+
+/**
+ * Shutdown the table eocIGMPSnoopingTable
+ */
+void
+shutdown_table_eocIGMPSnoopingTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocIGMPSnoopingTable_shutdown_interface(&eocIGMPSnoopingTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocIGMPSnoopingTable_rowreq_ctx_init(eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocIGMPSnoopingTable rowreq initialization. (eg DEFVALS)
+ */
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocIGMPSnoopingTable_rowreq_ctx_cleanup(eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocIGMPSnoopingTable rowreq cleanup.
+ */
+} /* eocIGMPSnoopingTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocIGMPSnoopingTable_pre_request(eocIGMPSnoopingTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocIGMPSnoopingTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocIGMPSnoopingTable_post_request(eocIGMPSnoopingTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocIGMPSnoopingTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocIGMPSnoopingTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocIGMPSnoopingTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable.h
new file mode 100644
index 0000000000..9ec896f342
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable.h
@@ -0,0 +1,205 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCIGMPSNOOPINGTABLE_H
+#define EOCIGMPSNOOPINGTABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <net-snmp/library/asn1.h>
+
+/* other required module components */
+ /* *INDENT-OFF* */
+ /* *INDENT-ON* */
+
+/* OID and column number definitions for eocIGMPSnoopingTable */
+#include "eocIGMPSnoopingTable_oids.h"
+
+/* enum definions */
+#include "eocIGMPSnoopingTable_enums.h"
+
+#include "EoCCommon.h"
+
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocIGMPSnoopingTable(void);
+void shutdown_eocIGMPSnoopingTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocIGMPSnoopingTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingTable is subid 1 of eocIGMPSnoopingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1, length: 11
+*/
+/* *********************************************************************
+ * 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 eocIGMPSnoopingTable registration context.
+ */
+typedef netsnmp_data_list eocIGMPSnoopingTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocIGMPSnoopingTable data context structure.
+ * This structure is used to represent the data for eocIGMPSnoopingTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocIGMPSnoopingTable.
+ */
+typedef struct eocIGMPSnoopingTable_data_s {
+
+ /*
+ * eocIGMPSnoopingDevMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ char eocIGMPSnoopingDevMACAddress[6];
+size_t eocIGMPSnoopingDevMACAddress_len; /* # of char elements, not bytes */
+
+ /*
+ * eocIGMPSnoopingEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocIGMPSnoopingEN;
+
+} eocIGMPSnoopingTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocIGMPSnoopingTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocIGMPSnoopingTable_data eocIGMPSnoopingTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocIGMPSnoopingTable mib index.
+ * This structure is used to represent the index for eocIGMPSnoopingTable.
+ */
+typedef struct eocIGMPSnoopingTable_mib_index_s {
+
+ /*
+ * eocIGMPSnoopingCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocIGMPSnoopingCBATCardIndex;
+
+ /*
+ * eocIGMPSnoopingCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocIGMPSnoopingCNUIndex;
+
+
+} eocIGMPSnoopingTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocIGMPSnoopingTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocIGMPSnoopingTable_IDX_LEN 2
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocIGMPSnoopingTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocIGMPSnoopingTable_rowreq_ctx pointer.
+ */
+typedef struct eocIGMPSnoopingTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocIGMPSnoopingTable_IDX_LEN];
+
+ eocIGMPSnoopingTable_mib_index tbl_idx;
+
+ eocIGMPSnoopingTable_data data;
+ eocIGMPSnoopingTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocIGMPSnoopingTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocIGMPSnoopingTable_data_list;
+
+} eocIGMPSnoopingTable_rowreq_ctx;
+
+typedef struct eocIGMPSnoopingTable_ref_rowreq_ctx_s {
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx;
+} eocIGMPSnoopingTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocIGMPSnoopingTable_pre_request(eocIGMPSnoopingTable_registration * user_context);
+ int eocIGMPSnoopingTable_post_request(eocIGMPSnoopingTable_registration * user_context,
+ int rc);
+
+ int eocIGMPSnoopingTable_rowreq_ctx_init(eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocIGMPSnoopingTable_rowreq_ctx_cleanup(eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx);
+
+ int eocIGMPSnoopingTable_commit(eocIGMPSnoopingTable_rowreq_ctx * rowreq_ctx);
+
+ eocIGMPSnoopingTable_rowreq_ctx *
+ eocIGMPSnoopingTable_row_find_by_mib_index(eocIGMPSnoopingTable_mib_index *mib_idx);
+
+extern oid eocIGMPSnoopingTable_oid[];
+extern int eocIGMPSnoopingTable_oid_size;
+
+
+#include "eocIGMPSnoopingTable_interface.h"
+#include "eocIGMPSnoopingTable_data_access.h"
+#include "eocIGMPSnoopingTable_data_get.h"
+#include "eocIGMPSnoopingTable_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 /* EOCIGMPSNOOPINGTABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_access.c
new file mode 100644
index 0000000000..45ade78cb5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_access.c
@@ -0,0 +1,398 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocIGMPSnoopingTable.h"
+
+
+#include "eocIGMPSnoopingTable_data_access.h"
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocIGMPSnoopingTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingTable is subid 1 of eocIGMPSnoopingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1, length: 11
+*/
+
+/**
+ * initialization for eocIGMPSnoopingTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocIGMPSnoopingTable_reg
+ * Pointer to eocIGMPSnoopingTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocIGMPSnoopingTable_init_data(eocIGMPSnoopingTable_registration * eocIGMPSnoopingTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocIGMPSnoopingTable data.
+ */
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocIGMPSnoopingTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocIGMPSnoopingTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocIGMPSnoopingTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocIGMPSnoopingTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCIGMPSNOOPINGTABLE_CACHE_TIMEOUT; /* seconds */
+} /* eocIGMPSnoopingTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocIGMPSnoopingTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocIGMPSnoopingTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocIGMPSnoopingTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocIGMPSnoopingTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocIGMPSnoopingTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocIGMPSnoopingTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocIGMPSnoopingTable_container_load(netsnmp_container *container)
+{
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx;
+
+ int rc = MFD_SUCCESS;
+ libspid_eoc_igmp_snooping_entry_t
+ igmp_entries[LIBSPID_EOC_MACLIMIT_ITMES_MAX];
+ int igmp_count;
+ libspid_eoc_wl_entry_t eoc_wl_entry;
+ int i = 0;
+ int count = 0;
+ int tei;
+ int ret;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocIGMPSnoopingCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocIGMPSnoopingCBATCardIndex = 0;
+ /*
+ * eocIGMPSnoopingCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ long eocIGMPSnoopingCNUIndex;
+
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_container_load","called\n"));
+
+ /*
+ * TODO:351:M: |-> Load/update data in the eocIGMPSnoopingTable container.
+ * loop over your eocIGMPSnoopingTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ memset (igmp_entries, 0, sizeof (igmp_entries));
+
+ if (LIBSPID_SUCCESS != libspid_eoc_igmp_snooping_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in igmp"
+ " configuration file, cannot sync\n");
+ }
+
+ rc = libspid_eoc_igmp_snooping_get_list (igmp_entries, &igmp_count);
+ if (LIBSPID_SUCCESS != rc)
+ {
+ snmp_log (LOG_ERR, "get igmp list error\n");
+ return MFD_ERROR;
+ }
+
+ if (igmp_count == 0)
+ rc = MFD_END_OF_DATA;
+
+
+ for (i = 0; i < igmp_count; i++)
+ {
+
+ memset (&eoc_wl_entry, 0, sizeof (eoc_wl_entry));
+ /* get white list entry for current MAC address */
+ ret = libspid_eoc_wl_get (igmp_entries[i].mac_addr,
+ &eoc_wl_entry);
+
+ if (LIBSPID_SUCCESS == ret)
+ {
+ /* parse current TEI from white list entry */
+ if (1 != sscanf (eoc_wl_entry.tei, "%d", &tei))
+ {
+ eocIGMPSnoopingCNUIndex = INVALID_EOCIGMPSNOOPINGCNUINDEX;
+ }
+ else
+ {
+ /* convert current TEI to slave index */
+ eocIGMPSnoopingCNUIndex = tei - 2;
+ }
+ }
+ else
+ {
+ eocIGMPSnoopingCNUIndex = INVALID_EOCIGMPSNOOPINGCNUINDEX;
+ }
+ /*
+ * TODO:352:M: | |-> set indexes in new eocIGMPSnoopingTable rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocIGMPSnoopingTable_allocate_rowreq_ctx(NULL);
+ if (NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if(MFD_SUCCESS != eocIGMPSnoopingTable_indexes_set(rowreq_ctx
+ , eocIGMPSnoopingCBATCardIndex
+ , eocIGMPSnoopingCNUIndex
+ )) {
+ snmp_log(LOG_ERR,"error setting index while loading "
+ "eocIGMPSnoopingTable data.\n");
+ eocIGMPSnoopingTable_release_rowreq_ctx(rowreq_ctx);
+ continue;
+ }
+
+ /*
+ * TODO:352:r: | |-> populate eocIGMPSnoopingTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocIGMPSnoopingDevMACAddress
+ * eocIGMPSnoopingDevMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ /** no mapping */
+ /*
+ * make sure there is enough space for eocIGMPSnoopingDevMACAddress data
+ */
+ if (LIBSPID_SUCCESS !=
+ libspid_mac_str_to_bin (igmp_entries[i].mac_addr,
+ rowreq_ctx->data.
+ eocIGMPSnoopingDevMACAddress))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_str_to_bin failed,"
+ " setting MAC address field to null\n");
+ rowreq_ctx->data.eocIGMPSnoopingDevMACAddress[0] = '\0';
+ }
+
+ rowreq_ctx->data.eocIGMPSnoopingDevMACAddress_len = 6;
+
+
+ /*
+ * setup/save data for eocIGMPSnoopingEN
+ * eocIGMPSnoopingEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ /** no mapping */
+ /* parse authorization from white list entry */
+ ret = sscanf (igmp_entries[i].igmp_snooping_en, "%ld",
+ &rowreq_ctx->data.eocIGMPSnoopingEN);
+ if (1 != ret)
+ {
+ snmp_log (LOG_ERR, "parsing failed, setting Authorization"
+ " field to invalid\n");
+ rowreq_ctx->data.eocIGMPSnoopingEN = INVALID_EOCIGMPSNOOPINGCNUEN;
+ }
+
+
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT(container, rowreq_ctx);
+ ++count;
+ }
+
+ DEBUGMSGT(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_container_load",
+ "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocIGMPSnoopingTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocIGMPSnoopingTable container data.
+ */
+} /* eocIGMPSnoopingTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocIGMPSnoopingTable_row_prep( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_access.h
new file mode 100644
index 0000000000..ed3b76b114
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_access.h
@@ -0,0 +1,65 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCIGMPSNOOPINGTABLE_DATA_ACCESS_H
+#define EOCIGMPSNOOPINGTABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocIGMPSnoopingTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingTable is subid 1 of eocIGMPSnoopingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1, length: 11
+*/
+
+#define INVALID_EOCIGMPSNOOPINGCNUINDEX (-2)
+#define INVALID_EOCIGMPSNOOPINGCNUEN (-2)
+
+ int eocIGMPSnoopingTable_init_data(eocIGMPSnoopingTable_registration * eocIGMPSnoopingTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocIGMPSnoopingTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCIGMPSNOOPINGTABLE_CACHE_TIMEOUT 60
+
+void eocIGMPSnoopingTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocIGMPSnoopingTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocIGMPSnoopingTable_container_load(netsnmp_container *container);
+void eocIGMPSnoopingTable_container_free(netsnmp_container *container);
+
+int eocIGMPSnoopingTable_cache_load(netsnmp_container *container);
+void eocIGMPSnoopingTable_cache_free(netsnmp_container *container);
+
+ int eocIGMPSnoopingTable_row_prep( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCIGMPSNOOPINGTABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_get.c
new file mode 100644
index 0000000000..8625a2667e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_get.c
@@ -0,0 +1,252 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocIGMPSnoopingTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocIGMPSnoopingTable get routines.
+ * TODO:240:M: Implement eocIGMPSnoopingTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocIGMPSnoopingTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingTable is subid 1 of eocIGMPSnoopingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1, length: 11
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocIGMPSnoopingTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocIGMPSnoopingCBATCardIndex_val
+ * @param eocIGMPSnoopingCNUIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocIGMPSnoopingTable_indexes_set_tbl_idx(eocIGMPSnoopingTable_mib_index *tbl_idx, long eocIGMPSnoopingCBATCardIndex_val, long eocIGMPSnoopingCNUIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocIGMPSnoopingCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocIGMPSnoopingCBATCardIndex = eocIGMPSnoopingCBATCardIndex_val;
+
+ /* eocIGMPSnoopingCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ tbl_idx->eocIGMPSnoopingCNUIndex = eocIGMPSnoopingCNUIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocIGMPSnoopingTable_indexes_set(eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, long eocIGMPSnoopingCBATCardIndex_val, long eocIGMPSnoopingCNUIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocIGMPSnoopingTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocIGMPSnoopingCBATCardIndex_val
+ , eocIGMPSnoopingCNUIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocIGMPSnoopingTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingEntry.eocIGMPSnoopingDevMACAddress
+ * eocIGMPSnoopingDevMACAddress is subid 3 of eocIGMPSnoopingEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1.1.3
+ * Description:
+CNU MACµØÖ·¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/**
+ * Extract the current value of the eocIGMPSnoopingDevMACAddress data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocIGMPSnoopingDevMACAddress_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocIGMPSnoopingDevMACAddress_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocIGMPSnoopingDevMACAddress.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocIGMPSnoopingDevMACAddress_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocIGMPSnoopingDevMACAddress_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocIGMPSnoopingDevMACAddress_get( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, char **eocIGMPSnoopingDevMACAddress_val_ptr_ptr, size_t *eocIGMPSnoopingDevMACAddress_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocIGMPSnoopingDevMACAddress_val_ptr_ptr) && (NULL != *eocIGMPSnoopingDevMACAddress_val_ptr_ptr));
+ netsnmp_assert( NULL != eocIGMPSnoopingDevMACAddress_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingDevMACAddress_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocIGMPSnoopingDevMACAddress data.
+ * copy (* eocIGMPSnoopingDevMACAddress_val_ptr_ptr ) data and (* eocIGMPSnoopingDevMACAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocIGMPSnoopingDevMACAddress data
+ */
+ if ((NULL == (* eocIGMPSnoopingDevMACAddress_val_ptr_ptr )) ||
+ ((* eocIGMPSnoopingDevMACAddress_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocIGMPSnoopingDevMACAddress_len* sizeof(rowreq_ctx->data.eocIGMPSnoopingDevMACAddress[0])))) {
+ /*
+ * allocate space for eocIGMPSnoopingDevMACAddress data
+ */
+ (* eocIGMPSnoopingDevMACAddress_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocIGMPSnoopingDevMACAddress_len* sizeof(rowreq_ctx->data.eocIGMPSnoopingDevMACAddress[0]));
+ if(NULL == (* eocIGMPSnoopingDevMACAddress_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocIGMPSnoopingDevMACAddress_val_ptr_len_ptr ) = rowreq_ctx->data.eocIGMPSnoopingDevMACAddress_len* sizeof(rowreq_ctx->data.eocIGMPSnoopingDevMACAddress[0]);
+ memcpy( (* eocIGMPSnoopingDevMACAddress_val_ptr_ptr ), rowreq_ctx->data.eocIGMPSnoopingDevMACAddress, rowreq_ctx->data.eocIGMPSnoopingDevMACAddress_len* sizeof(rowreq_ctx->data.eocIGMPSnoopingDevMACAddress[0]) );
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingDevMACAddress_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingEntry.eocIGMPSnoopingEN
+ * eocIGMPSnoopingEN is subid 4 of eocIGMPSnoopingEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1.1.4
+ * Description:
+É豸IGMP Snooping¿ª¹Ø¡£
+ 0±íʾ½ûÖ¹£¬1±íʾʹÄÜ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Extract the current value of the eocIGMPSnoopingEN data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocIGMPSnoopingEN_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocIGMPSnoopingEN_get( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, u_long * eocIGMPSnoopingEN_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocIGMPSnoopingEN_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingEN_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocIGMPSnoopingEN data.
+ * copy (* eocIGMPSnoopingEN_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocIGMPSnoopingEN_val_ptr ) = rowreq_ctx->data.eocIGMPSnoopingEN;
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingEN_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_get.h
new file mode 100644
index 0000000000..93da42e37e
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_get.h
@@ -0,0 +1,60 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocIGMPSnoopingTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCIGMPSNOOPINGTABLE_DATA_GET_H
+#define EOCIGMPSNOOPINGTABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocIGMPSnoopingTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingTable is subid 1 of eocIGMPSnoopingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1, length: 11
+*/
+ /*
+ * indexes
+ */
+
+ int eocIGMPSnoopingDevMACAddress_get( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, char **eocIGMPSnoopingDevMACAddress_val_ptr_ptr, size_t *eocIGMPSnoopingDevMACAddress_val_ptr_len_ptr );
+ int eocIGMPSnoopingEN_get( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, u_long * eocIGMPSnoopingEN_val_ptr );
+
+
+int eocIGMPSnoopingTable_indexes_set_tbl_idx(eocIGMPSnoopingTable_mib_index *tbl_idx, long eocIGMPSnoopingCBATCardIndex_val, long eocIGMPSnoopingCNUIndex_val);
+int eocIGMPSnoopingTable_indexes_set(eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, long eocIGMPSnoopingCBATCardIndex_val, long eocIGMPSnoopingCNUIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCIGMPSNOOPINGTABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_set.c
new file mode 100644
index 0000000000..642a9829bb
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_set.c
@@ -0,0 +1,807 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocIGMPSnoopingTable.h"
+
+
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocIGMPSnoopingTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingTable is subid 1 of eocIGMPSnoopingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1, length: 11
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocIGMPSnoopingTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocIGMPSnoopingTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocIGMPSnoopingTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocIGMPSnoopingTable_undo_setup( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocIGMPSnoopingTable undo.
+ * set up eocIGMPSnoopingTable undo information, in preparation for a set.
+ * Undo storage is in (* eocIGMPSnoopingEN_val_ptr )*
+ */
+
+ return rc;
+} /* eocIGMPSnoopingTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocIGMPSnoopingTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocIGMPSnoopingTable_undo( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocIGMPSnoopingTable undo.
+ * eocIGMPSnoopingTable undo information, in response to a failed set.
+ * Undo storage is in (* eocIGMPSnoopingEN_val_ptr )*
+ */
+
+ return rc;
+} /* eocIGMPSnoopingTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocIGMPSnoopingTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocIGMPSnoopingTable_undo_cleanup( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocIGMPSnoopingTable undo.
+ * Undo storage is in (* eocIGMPSnoopingEN_val_ptr )*
+ */
+
+ return rc;
+} /* eocIGMPSnoopingTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocIGMPSnoopingTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocIGMPSnoopingTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocIGMPSnoopingTable_commit( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ int tei;
+ libspid_eoc_wl_entry_t wl_entries[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_igmp_snooping_entry_t igmp_entry;
+ int wl_count;
+ int ret;
+ int i;
+ char mac_addr[LIBSPID_MAC_STR_LEN];
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocIGMPSnoopingTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_EOCIGMPSNOOPINGDEVMACADDRESS_FLAG)
+ { /* clear eocIGMPSnoopingDevMACAddress */
+ save_flags &= ~COLUMN_EOCIGMPSNOOPINGDEVMACADDRESS_FLAG;
+ rowreq_ctx->column_set_flags |= COLUMN_EOCIGMPSNOOPINGDEVMACADDRESS_FLAG;
+
+ }
+
+ if (save_flags & COLUMN_EOCIGMPSNOOPINGEN_FLAG)
+ {/* clear eocIGMPSnoopingEN */
+ save_flags &= ~COLUMN_EOCIGMPSNOOPINGEN_FLAG;
+ rowreq_ctx->column_set_flags |= COLUMN_EOCIGMPSNOOPINGEN_FLAG;
+
+ }
+
+ /* convert port index to string */
+ tei = rowreq_ctx->tbl_idx.eocIGMPSnoopingCNUIndex + 2;
+
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in whitelist configuration file,"
+ " cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ ret = libspid_eoc_wl_get_list (wl_entries, &wl_count);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_get_list error\n");
+ return MFD_ERROR;
+ }
+
+ for (i = 0; i < wl_count; i++)
+ {
+ if (tei == strtol (wl_entries[i].tei, NULL, 10))
+ {
+ strcpy (mac_addr, wl_entries[i].mac_addr);
+ break;
+ }
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_igmp_snooping_get (mac_addr,
+ &igmp_entry))
+ {
+ snmp_log (LOG_ERR, "errors libspid_eoc_igmp_snooping_get\n");
+ return MFD_ERROR;
+ }
+
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCIGMPSNOOPINGEN_FLAG)
+ {
+ /* copy mirror_type to ethctl entry */
+ sprintf (igmp_entry.igmp_snooping_en, "%lu",
+ rowreq_ctx->data.eocIGMPSnoopingEN);
+ }
+
+
+ if (LIBSPID_SUCCESS != libspid_eoc_igmp_snooping_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in igmp"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ ret = libspid_eoc_igmp_snooping_set (mac_addr, &igmp_entry);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_igmp_snooping_set error\n");
+ return MFD_ERROR;
+ }
+
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n", save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocIGMPSnoopingTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocIGMPSnoopingTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocIGMPSnoopingTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocIGMPSnoopingTable_undo_commit( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ int tei;
+ libspid_eoc_wl_entry_t wl_entries[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+ libspid_eoc_igmp_snooping_entry_t igmp_entry;
+ int wl_count;
+ int ret;
+ int i;
+ char mac_addr[LIBSPID_MAC_STR_LEN];
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_undo_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:485:M: |-> Undo eocIGMPSnoopingTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+ tei = rowreq_ctx->tbl_idx.eocIGMPSnoopingCNUIndex + 2;
+
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in whitelist configuration file,"
+ " cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ ret = libspid_eoc_wl_get_list (wl_entries, &wl_count);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_wl_get_list error\n");
+ return MFD_ERROR;
+ }
+
+ for (i = 0; i < wl_count; i++)
+ {
+ if (tei == strtol (wl_entries[i].tei, NULL, 10))
+ {
+ strcpy (mac_addr, wl_entries[i].mac_addr);
+ break;
+ }
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_igmp_snooping_get (mac_addr,
+ &igmp_entry))
+ {
+ snmp_log (LOG_ERR, "errors libspid_eoc_igmp_snooping_get\n");
+ return MFD_ERROR;
+ }
+
+ if (rowreq_ctx->column_set_flags & COLUMN_EOCIGMPSNOOPINGEN_FLAG)
+ {
+ /* copy mirror_type to ethctl entry */
+ sprintf (igmp_entry.igmp_snooping_en, "%lu",
+ rowreq_ctx->undo->eocIGMPSnoopingEN);
+ }
+
+ if (LIBSPID_SUCCESS != libspid_eoc_igmp_snooping_check ())
+ {
+ snmp_log (LOG_ERR, "errors detected in igmp"
+ " configuration file, cannot sync\n");
+ return MFD_ERROR;
+ }
+
+ ret = libspid_eoc_igmp_snooping_set (mac_addr, &igmp_entry);
+ if (ret != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR, "libspid_eoc_igmp_snooping_set error\n");
+ return MFD_ERROR;
+ }
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocIGMPSnoopingTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocIGMPSnoopingTable node value checks.
+ * TODO:450:M: Implement eocIGMPSnoopingTable undo functions.
+ * TODO:460:M: Implement eocIGMPSnoopingTable set functions.
+ * TODO:480:M: Implement eocIGMPSnoopingTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingEntry.eocIGMPSnoopingDevMACAddress
+ * eocIGMPSnoopingDevMACAddress is subid 3 of eocIGMPSnoopingEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1.1.3
+ * Description:
+CNU MACµØÖ·¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocIGMPSnoopingDevMACAddress_val_ptr
+ * A char containing the new value.
+ * @param eocIGMPSnoopingDevMACAddress_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocIGMPSnoopingDevMACAddress_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocIGMPSnoopingTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OCTET_STR
+ * The length is < sizeof(rowreq_ctx->data.eocIGMPSnoopingDevMACAddress).
+ * The length is in (one of) the range set(s): 6
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocIGMPSnoopingDevMACAddress_check_value( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, char *eocIGMPSnoopingDevMACAddress_val_ptr, size_t eocIGMPSnoopingDevMACAddress_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingDevMACAddress_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocIGMPSnoopingDevMACAddress_val_ptr);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocIGMPSnoopingDevMACAddress value.
+ */
+
+ return MFD_SUCCESS; /* eocIGMPSnoopingDevMACAddress value not illegal */
+} /* eocIGMPSnoopingDevMACAddress_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocIGMPSnoopingTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocIGMPSnoopingTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocIGMPSnoopingDevMACAddress_undo_setup( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingDevMACAddress_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocIGMPSnoopingDevMACAddress undo.
+ */
+ /*
+ * copy eocIGMPSnoopingDevMACAddress and eocIGMPSnoopingDevMACAddress_len data
+ * set rowreq_ctx->undo->eocIGMPSnoopingDevMACAddress from rowreq_ctx->data.eocIGMPSnoopingDevMACAddress
+ */
+ memcpy( rowreq_ctx->undo->eocIGMPSnoopingDevMACAddress, rowreq_ctx->data.eocIGMPSnoopingDevMACAddress,
+ (rowreq_ctx->data.eocIGMPSnoopingDevMACAddress_len * sizeof(rowreq_ctx->undo->eocIGMPSnoopingDevMACAddress[0])));
+ rowreq_ctx->undo->eocIGMPSnoopingDevMACAddress_len = rowreq_ctx->data.eocIGMPSnoopingDevMACAddress_len;
+
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingDevMACAddress_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocIGMPSnoopingDevMACAddress_val_ptr
+ * A char containing the new value.
+ * @param eocIGMPSnoopingDevMACAddress_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocIGMPSnoopingDevMACAddress_val_ptr
+ */
+int
+eocIGMPSnoopingDevMACAddress_set( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, char *eocIGMPSnoopingDevMACAddress_val_ptr, size_t eocIGMPSnoopingDevMACAddress_val_ptr_len )
+{
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingDevMACAddress_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocIGMPSnoopingDevMACAddress_val_ptr);
+
+ /*
+ * TODO:461:M: |-> Set eocIGMPSnoopingDevMACAddress value.
+ * set eocIGMPSnoopingDevMACAddress value in rowreq_ctx->data
+ */
+ return SNMP_ERR_NOTWRITABLE;
+} /* eocIGMPSnoopingDevMACAddress_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocIGMPSnoopingDevMACAddress_undo( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingDevMACAddress_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocIGMPSnoopingDevMACAddress undo.
+ */
+ /*
+ * copy eocIGMPSnoopingDevMACAddress and eocIGMPSnoopingDevMACAddress_len data
+ * set rowreq_ctx->data.eocIGMPSnoopingDevMACAddress from rowreq_ctx->undo->eocIGMPSnoopingDevMACAddress
+ */
+ memcpy( rowreq_ctx->data.eocIGMPSnoopingDevMACAddress, rowreq_ctx->undo->eocIGMPSnoopingDevMACAddress,
+ (rowreq_ctx->undo->eocIGMPSnoopingDevMACAddress_len * sizeof(rowreq_ctx->data.eocIGMPSnoopingDevMACAddress[0])));
+ rowreq_ctx->data.eocIGMPSnoopingDevMACAddress_len = rowreq_ctx->undo->eocIGMPSnoopingDevMACAddress_len;
+
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingDevMACAddress_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingEntry.eocIGMPSnoopingEN
+ * eocIGMPSnoopingEN is subid 4 of eocIGMPSnoopingEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1.1.4
+ * Description:
+É豸IGMP Snooping¿ª¹Ø¡£
+ 0±íʾ½ûÖ¹£¬1±íʾʹÄÜ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 2/8. Values: disable(0), enable(1)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocIGMPSnoopingEN_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocIGMPSnoopingTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of disable(0), enable(1)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocIGMPSnoopingEN_check_value( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, u_long eocIGMPSnoopingEN_val)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingEN_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocIGMPSnoopingEN value.
+ */
+
+ return MFD_SUCCESS; /* eocIGMPSnoopingEN value not illegal */
+} /* eocIGMPSnoopingEN_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocIGMPSnoopingTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocIGMPSnoopingTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocIGMPSnoopingEN_undo_setup( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingEN_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocIGMPSnoopingEN undo.
+ */
+ /*
+ * copy eocIGMPSnoopingEN data
+ * set rowreq_ctx->undo->eocIGMPSnoopingEN from rowreq_ctx->data.eocIGMPSnoopingEN
+ */
+ rowreq_ctx->undo->eocIGMPSnoopingEN = rowreq_ctx->data.eocIGMPSnoopingEN;
+
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingEN_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocIGMPSnoopingEN_val
+ * A long containing the new value.
+ */
+int
+eocIGMPSnoopingEN_set( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, u_long eocIGMPSnoopingEN_val )
+{
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingEN_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:461:M: |-> Set eocIGMPSnoopingEN value.
+ * set eocIGMPSnoopingEN value in rowreq_ctx->data
+ */
+ rowreq_ctx->data.eocIGMPSnoopingEN = eocIGMPSnoopingEN_val;
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingEN_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocIGMPSnoopingEN_undo( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingEN_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocIGMPSnoopingEN undo.
+ */
+ /*
+ * copy eocIGMPSnoopingEN data
+ * set rowreq_ctx->data.eocIGMPSnoopingEN from rowreq_ctx->undo->eocIGMPSnoopingEN
+ */
+ rowreq_ctx->data.eocIGMPSnoopingEN = rowreq_ctx->undo->eocIGMPSnoopingEN;
+
+
+ return MFD_SUCCESS;
+} /* eocIGMPSnoopingEN_undo */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_set.h
new file mode 100644
index 0000000000..ee9f040c41
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_data_set.h
@@ -0,0 +1,60 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCIGMPSNOOPINGTABLE_DATA_SET_H
+#define EOCIGMPSNOOPINGTABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocIGMPSnoopingTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingTable is subid 1 of eocIGMPSnoopingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1, length: 11
+*/
+
+
+int eocIGMPSnoopingTable_undo_setup( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx);
+int eocIGMPSnoopingTable_undo_cleanup( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx);
+int eocIGMPSnoopingTable_undo( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx);
+int eocIGMPSnoopingTable_commit( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx);
+int eocIGMPSnoopingTable_undo_commit( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocIGMPSnoopingDevMACAddress_check_value( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, char *eocIGMPSnoopingDevMACAddress_val_ptr, size_t eocIGMPSnoopingDevMACAddress_val_ptr_len);
+int eocIGMPSnoopingDevMACAddress_undo_setup( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx );
+int eocIGMPSnoopingDevMACAddress_set( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, char *eocIGMPSnoopingDevMACAddress_val_ptr, size_t eocIGMPSnoopingDevMACAddress_val_ptr_len );
+int eocIGMPSnoopingDevMACAddress_undo( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx );
+
+int eocIGMPSnoopingEN_check_value( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, u_long eocIGMPSnoopingEN_val);
+int eocIGMPSnoopingEN_undo_setup( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx );
+int eocIGMPSnoopingEN_set( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, u_long eocIGMPSnoopingEN_val );
+int eocIGMPSnoopingEN_undo( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocIGMPSnoopingTable_check_dependencies(eocIGMPSnoopingTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCIGMPSNOOPINGTABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_enums.h
new file mode 100644
index 0000000000..935a7d87fe
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_enums.h
@@ -0,0 +1,56 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCIGMPSNOOPINGTABLE_ENUMS_H
+#define EOCIGMPSNOOPINGTABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocIGMPSnoopingTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocIGMPSnoopingEN (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCIGMPSNOOPINGEN_ENUMS
+#define EOCIGMPSNOOPINGEN_ENUMS
+
+#define EOCIGMPSNOOPINGEN_DISABLE 0
+#define EOCIGMPSNOOPINGEN_ENABLE 1
+
+#endif /* EOCIGMPSNOOPINGEN_ENUMS */
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCIGMPSNOOPINGTABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_interface.c
new file mode 100644
index 0000000000..53eb81ee3b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_interface.c
@@ -0,0 +1,1541 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocIGMPSnoopingTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocIGMPSnoopingTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocIGMPSnoopingTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocIGMPSnoopingTable is subid 1 of eocIGMPSnoopingGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.7.1, length: 11
+*/
+typedef struct eocIGMPSnoopingTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocIGMPSnoopingTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocIGMPSnoopingTable_interface_ctx;
+
+static eocIGMPSnoopingTable_interface_ctx eocIGMPSnoopingTable_if_ctx;
+
+static void _eocIGMPSnoopingTable_container_init(
+ eocIGMPSnoopingTable_interface_ctx *if_ctx);
+static void _eocIGMPSnoopingTable_container_shutdown(
+ eocIGMPSnoopingTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocIGMPSnoopingTable_container_get( void )
+{
+ return eocIGMPSnoopingTable_if_ctx.container;
+}
+
+eocIGMPSnoopingTable_registration *
+eocIGMPSnoopingTable_registration_get( void )
+{
+ return eocIGMPSnoopingTable_if_ctx.user_ctx;
+}
+
+eocIGMPSnoopingTable_registration *
+eocIGMPSnoopingTable_registration_set( eocIGMPSnoopingTable_registration * newreg )
+{
+ eocIGMPSnoopingTable_registration * old = eocIGMPSnoopingTable_if_ctx.user_ctx;
+ eocIGMPSnoopingTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocIGMPSnoopingTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocIGMPSnoopingTable_if_ctx.container);
+}
+
+u_int
+eocIGMPSnoopingTable_dirty_get( void )
+{
+ return eocIGMPSnoopingTable_if_ctx.table_dirty;
+}
+
+void
+eocIGMPSnoopingTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocIGMPSnoopingTable:eocIGMPSnoopingTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocIGMPSnoopingTable_if_ctx.table_dirty, status));
+ eocIGMPSnoopingTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocIGMPSnoopingTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocIGMPSnoopingTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocIGMPSnoopingTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocIGMPSnoopingTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocIGMPSnoopingTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocIGMPSnoopingTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocIGMPSnoopingTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocIGMPSnoopingTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocIGMPSnoopingTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocIGMPSnoopingTable_commit;
+static Netsnmp_Node_Handler _mfd_eocIGMPSnoopingTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocIGMPSnoopingTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int _eocIGMPSnoopingTable_undo_column( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+eocIGMPSnoopingTable_data *eocIGMPSnoopingTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table eocIGMPSnoopingTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocIGMPSnoopingTable_initialize_interface(eocIGMPSnoopingTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocIGMPSnoopingTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocIGMPSnoopingTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_eocIGMPSnoopingTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocIGMPSnoopingTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocIGMPSnoopingCBATCardIndex */
+ ASN_INTEGER, /** index: eocIGMPSnoopingCNUIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCIGMPSNOOPINGTABLE_MIN_COL;
+ tbl_info->max_column = EOCIGMPSNOOPINGTABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocIGMPSnoopingTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocIGMPSnoopingTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocIGMPSnoopingTable_container_init(&eocIGMPSnoopingTable_if_ctx);
+ if (NULL == eocIGMPSnoopingTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocIGMPSnoopingTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocIGMPSnoopingTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocIGMPSnoopingTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocIGMPSnoopingTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocIGMPSnoopingTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocIGMPSnoopingTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocIGMPSnoopingTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocIGMPSnoopingTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocIGMPSnoopingTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocIGMPSnoopingTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocIGMPSnoopingTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocIGMPSnoopingTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocIGMPSnoopingTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocIGMPSnoopingTable:init_eocIGMPSnoopingTable",
+ "Registering eocIGMPSnoopingTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocIGMPSnoopingTable", handler,
+ eocIGMPSnoopingTable_oid,
+ eocIGMPSnoopingTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocIGMPSnoopingTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocIGMPSnoopingTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocIGMPSnoopingTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocIGMPSnoopingTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocIGMPSnoopingTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocIGMPSnoopingTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocIGMPSnoopingTable
+ */
+void
+_eocIGMPSnoopingTable_shutdown_interface(eocIGMPSnoopingTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocIGMPSnoopingTable_container_shutdown(&eocIGMPSnoopingTable_if_ctx);
+}
+
+void
+eocIGMPSnoopingTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocIGMPSnoopingTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocIGMPSnoopingTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocIGMPSnoopingTable_index_to_oid(netsnmp_index *oid_idx,
+ eocIGMPSnoopingTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocIGMPSnoopingCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocIGMPSnoopingCBATCardIndex;
+ /*
+ * eocIGMPSnoopingCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocIGMPSnoopingCNUIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocIGMPSnoopingCBATCardIndex, 0x00, sizeof(var_eocIGMPSnoopingCBATCardIndex) );
+ var_eocIGMPSnoopingCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocIGMPSnoopingCNUIndex, 0x00, sizeof(var_eocIGMPSnoopingCNUIndex) );
+ var_eocIGMPSnoopingCNUIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocIGMPSnoopingCBATCardIndex.next_variable = &var_eocIGMPSnoopingCNUIndex; var_eocIGMPSnoopingCNUIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_index_to_oid","called\n"));
+
+ /* eocIGMPSnoopingCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocIGMPSnoopingCBATCardIndex, (u_char*)&mib_idx->eocIGMPSnoopingCBATCardIndex,
+ sizeof(mib_idx->eocIGMPSnoopingCBATCardIndex));
+
+ /* eocIGMPSnoopingCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ snmp_set_var_value(&var_eocIGMPSnoopingCNUIndex, (u_char*)&mib_idx->eocIGMPSnoopingCNUIndex,
+ sizeof(mib_idx->eocIGMPSnoopingCNUIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocIGMPSnoopingCBATCardIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocIGMPSnoopingCBATCardIndex );
+
+ return err;
+} /* eocIGMPSnoopingTable_index_to_oid */
+
+/**
+ * extract eocIGMPSnoopingTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocIGMPSnoopingTable_index_from_oid(netsnmp_index *oid_idx,
+ eocIGMPSnoopingTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocIGMPSnoopingCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocIGMPSnoopingCBATCardIndex;
+ /*
+ * eocIGMPSnoopingCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+ */
+ netsnmp_variable_list var_eocIGMPSnoopingCNUIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocIGMPSnoopingCBATCardIndex, 0x00, sizeof(var_eocIGMPSnoopingCBATCardIndex) );
+ var_eocIGMPSnoopingCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocIGMPSnoopingCNUIndex, 0x00, sizeof(var_eocIGMPSnoopingCNUIndex) );
+ var_eocIGMPSnoopingCNUIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocIGMPSnoopingCBATCardIndex.next_variable = &var_eocIGMPSnoopingCNUIndex; var_eocIGMPSnoopingCNUIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocIGMPSnoopingCBATCardIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocIGMPSnoopingCBATCardIndex = *((long *)var_eocIGMPSnoopingCBATCardIndex.val.string);
+ mib_idx->eocIGMPSnoopingCNUIndex = *((long *)var_eocIGMPSnoopingCNUIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocIGMPSnoopingCBATCardIndex );
+
+ return err;
+} /* eocIGMPSnoopingTable_index_from_oid */
+
+
+/*
+ * eocIGMPSnoopingTable_allocate_data
+ *
+ * Purpose: create new eocIGMPSnoopingTable_data.
+ */
+eocIGMPSnoopingTable_data *
+eocIGMPSnoopingTable_allocate_data(void)
+{
+ eocIGMPSnoopingTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocIGMPSnoopingTable_data);
+
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocIGMPSnoopingTable_data.\n");
+ }
+
+ return rtn;
+} /* eocIGMPSnoopingTable_allocate_data */
+
+/*
+ * eocIGMPSnoopingTable_release_data
+ *
+ * Purpose: release eocIGMPSnoopingTable data.
+ */
+void
+eocIGMPSnoopingTable_release_data(eocIGMPSnoopingTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocIGMPSnoopingTable:eocIGMPSnoopingTable_release_data","called\n"));
+
+ free(data);
+} /* eocIGMPSnoopingTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocIGMPSnoopingTable_rowreq_ctx
+ */
+eocIGMPSnoopingTable_rowreq_ctx *
+eocIGMPSnoopingTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocIGMPSnoopingTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:eocIGMPSnoopingTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocIGMPSnoopingTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocIGMPSnoopingTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocIGMPSnoopingTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocIGMPSnoopingTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocIGMPSnoopingTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocIGMPSnoopingTable_rowreq_ctx
+ */
+void
+eocIGMPSnoopingTable_release_rowreq_ctx(eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:eocIGMPSnoopingTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocIGMPSnoopingTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if(rowreq_ctx->undo)
+ eocIGMPSnoopingTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocIGMPSnoopingTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocIGMPSnoopingTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocIGMPSnoopingTable_pre_request(eocIGMPSnoopingTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocIGMPSnoopingTable","error %d from "
+ "eocIGMPSnoopingTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocIGMPSnoopingTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocIGMPSnoopingTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocIGMPSnoopingTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocIGMPSnoopingTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocIGMPSnoopingTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocIGMPSnoopingTable_post_request(eocIGMPSnoopingTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocIGMPSnoopingTable","error %d from "
+ "eocIGMPSnoopingTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocIGMPSnoopingTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocIGMPSnoopingTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocIGMPSnoopingTable_interface_ctx *if_ctx =
+ * (eocIGMPSnoopingTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocIGMPSnoopingTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocIGMPSnoopingTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocIGMPSnoopingTable_get_column( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocIGMPSnoopingCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCIGMPSNOOPINGCBATCARDINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocIGMPSnoopingCBATCardIndex;
+ break;
+
+ /* (INDEX) eocIGMPSnoopingCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCIGMPSNOOPINGCNUINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocIGMPSnoopingCNUIndex;
+ break;
+
+ /* eocIGMPSnoopingDevMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H */
+ case COLUMN_EOCIGMPSNOOPINGDEVMACADDRESS:
+ var->type = ASN_OCTET_STR;
+rc = eocIGMPSnoopingDevMACAddress_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocIGMPSnoopingEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCIGMPSNOOPINGEN:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocIGMPSnoopingEN_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ default:
+ if (EOCIGMPSNOOPINGTABLE_MIN_COL <= column && column <= EOCIGMPSNOOPINGTABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocIGMPSnoopingTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocIGMPSnoopingTable_get_column */
+
+int
+_mfd_eocIGMPSnoopingTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocIGMPSnoopingTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocIGMPSnoopingTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocIGMPSnoopingTable_check_column( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_eocIGMPSnoopingTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocIGMPSnoopingCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCIGMPSNOOPINGCBATCARDINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /* (INDEX) eocIGMPSnoopingCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/r/d/h */
+ case COLUMN_EOCIGMPSNOOPINGCNUINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocIGMPSnoopingDevMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H */
+ case COLUMN_EOCIGMPSNOOPINGDEVMACADDRESS:
+ rc = netsnmp_check_vb_type_and_max_size( var, ASN_OCTET_STR,
+ sizeof( rowreq_ctx->data.eocIGMPSnoopingDevMACAddress ) );
+ /* check defined range(s). */
+ if( (SNMPERR_SUCCESS == rc)
+ && (var->val_len != 6)
+ ) {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocIGMPSnoopingTable:_eocIGMPSnoopingTable_check_column:eocIGMPSnoopingDevMACAddress",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocIGMPSnoopingDevMACAddress_check_value( rowreq_ctx, (char *)var->val.string, var->val_len );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocIGMPSnoopingDevMACAddress_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocIGMPSnoopingEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCIGMPSNOOPINGEN:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocIGMPSnoopingEN ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCIGMPSNOOPINGEN_DISABLE )
+ && ( *var->val.integer != EOCIGMPSNOOPINGEN_ENABLE )
+ ) {
+ rc = SNMP_ERR_WRONGVALUE;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocIGMPSnoopingTable:_eocIGMPSnoopingTable_check_column:eocIGMPSnoopingEN",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocIGMPSnoopingEN_check_value( rowreq_ctx, *((u_long *)var->val.string) );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocIGMPSnoopingEN_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ default: /** We shouldn't get here */
+ rc = SNMP_ERR_GENERR;
+ snmp_log(LOG_ERR, "unknown column %d in _eocIGMPSnoopingTable_check_column\n", column);
+ }
+
+ return rc;
+} /* _eocIGMPSnoopingTable_check_column */
+
+int
+_mfd_eocIGMPSnoopingTable_check_objects(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_check_objects","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+
+ /*
+ * get column number from table request info, and check that column
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocIGMPSnoopingTable_check_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+ break;
+ }
+
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocIGMPSnoopingTable_check_objects */
+
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo setup
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocIGMPSnoopingTable_undo_setup_column( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_eocIGMPSnoopingTable_undo_setup_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocIGMPSnoopingDevMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H */
+ case COLUMN_EOCIGMPSNOOPINGDEVMACADDRESS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCIGMPSNOOPINGDEVMACADDRESS_FLAG;
+ rc = eocIGMPSnoopingDevMACAddress_undo_setup(rowreq_ctx );
+ break;
+
+ /* eocIGMPSnoopingEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCIGMPSNOOPINGEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCIGMPSNOOPINGEN_FLAG;
+ rc = eocIGMPSnoopingEN_undo_setup(rowreq_ctx );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocIGMPSnoopingTable_undo_setup_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocIGMPSnoopingTable_undo_setup_column */
+
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocIGMPSnoopingTable_undo_setup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_undo_setup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * allocate undo context
+ */
+ rowreq_ctx->undo = eocIGMPSnoopingTable_allocate_data();
+ if(NULL == rowreq_ctx->undo) {
+ /** msg already logged */
+ netsnmp_request_set_error_all(requests, SNMP_ERR_RESOURCEUNAVAILABLE);
+ return SNMP_ERR_NOERROR;
+ }
+
+ /*
+ * row undo setup
+ */
+ rowreq_ctx->column_set_flags = 0;
+ rc = eocIGMPSnoopingTable_undo_setup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocIGMPSnoopingTable:mfd","error %d from "
+ "eocIGMPSnoopingTable_undo_setup\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+ else {
+ /*
+ * column undo setup
+ */
+ netsnmp_table_request_info * tri;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocIGMPSnoopingTable_undo_setup_column(rowreq_ctx, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocIGMPSnoopingTable:mfd","error %d from "
+ "eocIGMPSnoopingTable_undo_setup_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocIGMPSnoopingTable_undo_setup */
+
+/**
+ * @internal
+ * undo setup
+ */
+int
+_mfd_eocIGMPSnoopingTable_undo_cleanup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_undo_cleanup","called\n"));
+
+ /*
+ * failed row create in early stages has no rowreq_ctx
+ */
+ if (NULL == rowreq_ctx)
+ return MFD_SUCCESS;
+
+ /*
+ * call user cleanup
+ */
+ rc = eocIGMPSnoopingTable_undo_cleanup(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocIGMPSnoopingTable:mfd","error %d from "
+ "eocIGMPSnoopingTable_undo_cleanup\n", rc));
+ }
+
+ /*
+ * release undo context, if needed
+ */
+ if(rowreq_ctx->undo) {
+ eocIGMPSnoopingTable_release_data(rowreq_ctx->undo);
+ rowreq_ctx->undo = NULL;
+ }
+
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocIGMPSnoopingTable_undo_cleanup */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Set values
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Set the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocIGMPSnoopingTable_set_column( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_eocIGMPSnoopingTable_set_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocIGMPSnoopingDevMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H */
+ case COLUMN_EOCIGMPSNOOPINGDEVMACADDRESS:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCIGMPSNOOPINGDEVMACADDRESS_FLAG;
+ rc = eocIGMPSnoopingDevMACAddress_set(rowreq_ctx, (char *)var->val.string, var->val_len );
+ break;
+
+ /* eocIGMPSnoopingEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCIGMPSNOOPINGEN:
+ rowreq_ctx->column_set_flags |= COLUMN_EOCIGMPSNOOPINGEN_FLAG;
+ rc = eocIGMPSnoopingEN_set(rowreq_ctx, *((u_long *)var->val.string) );
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocIGMPSnoopingTable_set_column\n", column);
+ rc = SNMP_ERR_GENERR;
+ break;
+ }
+
+ return rc;
+} /* _eocIGMPSnoopingTable_set_column */
+
+int
+_mfd_eocIGMPSnoopingTable_set_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ int rc = SNMP_ERR_NOERROR;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_set_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rowreq_ctx->column_set_flags = 0;
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocIGMPSnoopingTable_set_column(rowreq_ctx,
+ requests->requestvb, tri->colnum);
+ if(MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocIGMPSnoopingTable:mfd","error %d from "
+ "eocIGMPSnoopingTable_set_column\n", rc));
+ netsnmp_set_request_error(agtreq_info, requests, SNMP_VALIDATE_ERR(rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocIGMPSnoopingTable_set_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit the values
+ */
+int
+_mfd_eocIGMPSnoopingTable_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocIGMPSnoopingTable_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ DEBUGMSGTL(("eocIGMPSnoopingTable:mfd","error %d from "
+ "eocIGMPSnoopingTable_commit\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ /*
+ * if we successfully commited this row, set the dirty flag. Use the
+ * current value + 1 (i.e. dirty = # rows changed).
+ * this is checked in post_request...
+ */
+ eocIGMPSnoopingTable_dirty_set( eocIGMPSnoopingTable_dirty_get() + 1 ); /* set table dirty flag */
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+_mfd_eocIGMPSnoopingTable_undo_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_undo_commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ u_int d = eocIGMPSnoopingTable_dirty_get();
+
+ netsnmp_assert(d != 0);
+ if(d)
+ eocIGMPSnoopingTable_dirty_set( d - 1 );
+ }
+
+ rc = eocIGMPSnoopingTable_undo_commit(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocIGMPSnoopingTable:mfd","error %d from "
+ "eocIGMPSnoopingTable_undo_commit\n", rc));
+ }
+
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+ snmp_log(LOG_WARNING, "eocIGMPSnoopingTable row dirty flag still set after undo_commit\n");
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocIGMPSnoopingTable_commit */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Undo
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * undo the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocIGMPSnoopingTable_undo_column( eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_eocIGMPSnoopingTable_undo_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* eocIGMPSnoopingDevMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H */
+ case COLUMN_EOCIGMPSNOOPINGDEVMACADDRESS:
+ rc = eocIGMPSnoopingDevMACAddress_undo(rowreq_ctx);
+ break;
+
+ /* eocIGMPSnoopingEN(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCIGMPSNOOPINGEN:
+ rc = eocIGMPSnoopingEN_undo(rowreq_ctx);
+ break;
+
+ default:
+ snmp_log(LOG_ERR,"unknown column %d in _eocIGMPSnoopingTable_undo_column\n", column);
+ break;
+ }
+
+ return rc;
+} /* _eocIGMPSnoopingTable_undo_column */
+
+int
+_mfd_eocIGMPSnoopingTable_undo_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_undo_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ rc = eocIGMPSnoopingTable_undo(rowreq_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocIGMPSnoopingTable:mfd","error %d from "
+ "eocIGMPSnoopingTable_undo\n", rc));
+ }
+
+ for(;requests; requests = requests->next) {
+ /*
+ * set column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocIGMPSnoopingTable_undo_column(rowreq_ctx, requests->requestvb,
+ tri->colnum);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocIGMPSnoopingTable:mfd","error %d from "
+ "eocIGMPSnoopingTable_undo_column\n", rc));
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocIGMPSnoopingTable_undo_values */
+
+/*----------------------------------------------------------------------
+ *
+ * SET: irreversible commit
+ *
+ *---------------------------------------------------------------------*/
+/**
+ * @internal
+ * commit irreversible actions
+ */
+int
+_mfd_eocIGMPSnoopingTable_irreversible_commit(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_mfd_eocIGMPSnoopingTable_irreversible:commit","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * check for and handle row creation/deletion
+ * and update column exist flags...
+ */
+ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+ if (! (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+ CONTAINER_REMOVE(eocIGMPSnoopingTable_if_ctx.container, rowreq_ctx);
+ }
+ else {
+ if (rowreq_ctx->column_set_flags) {
+ rowreq_ctx->column_set_flags = 0;
+ }
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocIGMPSnoopingTable_irreversible_commit */
+
+/***********************************************************************
+ *
+ * DATA ACCESS
+ *
+ ***********************************************************************/
+static void _container_free(netsnmp_container *container);
+
+/**
+ * @internal
+ */
+static int
+_cache_load(netsnmp_cache *cache, void *vmagic)
+{
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_cache_load","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache for eocIGMPSnoopingTable_cache_load\n");
+ return -1;
+ }
+
+ /** should only be called for an invalid or expired cache */
+ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+
+ /*
+ * call user code
+ */
+ return eocIGMPSnoopingTable_container_load((netsnmp_container*)cache->magic);
+} /* _cache_load */
+
+/**
+ * @internal
+ */
+static void
+_cache_free(netsnmp_cache *cache, void *magic)
+{
+ netsnmp_container *container;
+
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_cache_free","called\n"));
+
+ if((NULL == cache) || (NULL == cache->magic)) {
+ snmp_log(LOG_ERR, "invalid cache in eocIGMPSnoopingTable_cache_free\n");
+ return;
+ }
+
+ container = (netsnmp_container*)cache->magic;
+
+ _container_free(container);
+} /* _cache_free */
+
+/**
+ * @internal
+ */
+static void
+_container_item_free(eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx, void *context)
+{
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_container_item_free","called\n"));
+
+ if(NULL == rowreq_ctx)
+ return;
+
+ eocIGMPSnoopingTable_release_rowreq_ctx(rowreq_ctx);
+} /* _container_item_free */
+
+/**
+ * @internal
+ */
+static void
+_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_container_free","called\n"));
+
+ if (NULL == container) {
+ snmp_log(LOG_ERR, "invalid container in eocIGMPSnoopingTable_container_free\n");
+ return;
+ }
+
+ /*
+ * call user code
+ */
+ eocIGMPSnoopingTable_container_free(container);
+
+ /*
+ * free all items. inefficient, but easy.
+ */
+ CONTAINER_CLEAR(container,
+ (netsnmp_container_obj_func *)_container_item_free,
+ NULL);
+} /* _container_free */
+
+/**
+ * @internal
+ * initialize the container with functions or wrappers
+ */
+void
+_eocIGMPSnoopingTable_container_init(eocIGMPSnoopingTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_eocIGMPSnoopingTable_container_init","called\n"));
+
+ /*
+ * cache init
+ */
+ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+ _cache_load, _cache_free,
+ eocIGMPSnoopingTable_oid,
+ eocIGMPSnoopingTable_oid_size);
+
+ if(NULL == if_ctx->cache) {
+ snmp_log(LOG_ERR, "error creating cache for eocIGMPSnoopingTable\n");
+ return;
+ }
+
+ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+
+ eocIGMPSnoopingTable_container_init(&if_ctx->container, if_ctx->cache);
+ if(NULL == if_ctx->container)
+ if_ctx->container = netsnmp_container_find("eocIGMPSnoopingTable:table_container");
+ if(NULL == if_ctx->container) {
+ snmp_log(LOG_ERR,"error creating container in "
+ "eocIGMPSnoopingTable_container_init\n");
+ return;
+ }
+
+ if (NULL != if_ctx->cache)
+ if_ctx->cache->magic = (void*)if_ctx->container;
+} /* _eocIGMPSnoopingTable_container_init */
+
+/**
+ * @internal
+ * shutdown the container with functions or wrappers
+ */
+void
+_eocIGMPSnoopingTable_container_shutdown(eocIGMPSnoopingTable_interface_ctx *if_ctx)
+{
+ DEBUGMSGTL(("internal:eocIGMPSnoopingTable:_eocIGMPSnoopingTable_container_shutdown","called\n"));
+
+ eocIGMPSnoopingTable_container_shutdown(if_ctx->container);
+
+ _container_free(if_ctx->container);
+
+} /* _eocIGMPSnoopingTable_container_shutdown */
+
+
+eocIGMPSnoopingTable_rowreq_ctx *
+eocIGMPSnoopingTable_row_find_by_mib_index(eocIGMPSnoopingTable_mib_index *mib_idx)
+{
+ eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx;
+ oid oid_tmp[MAX_OID_LEN];
+ netsnmp_index oid_idx;
+ int rc;
+
+ /*
+ * set up storage for OID
+ */
+ oid_idx.oids = oid_tmp;
+ oid_idx.len = sizeof(oid_tmp)/sizeof(oid);
+
+ /*
+ * convert
+ */
+ rc = eocIGMPSnoopingTable_index_to_oid(&oid_idx, mib_idx);
+ if (MFD_SUCCESS != rc)
+ return NULL;
+
+ rowreq_ctx = CONTAINER_FIND(eocIGMPSnoopingTable_if_ctx.container, &oid_idx);
+
+ return rowreq_ctx;
+}
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_interface.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_interface.h
new file mode 100644
index 0000000000..ed07ec89ed
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_interface.h
@@ -0,0 +1,87 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/** @ingroup interface: Routines to interface to Net-SNMP
+ *
+ * \warning This code should not be modified, called directly,
+ * or used to interpret functionality. It is subject to
+ * change at any time.
+ *
+ * @{
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+#ifndef EOCIGMPSNOOPINGTABLE_INTERFACE_H
+#define EOCIGMPSNOOPINGTABLE_INTERFACE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "eocIGMPSnoopingTable.h"
+
+
+/* ********************************************************************
+ * Table declarations
+ */
+
+/* PUBLIC interface initialization routine */
+void _eocIGMPSnoopingTable_initialize_interface(eocIGMPSnoopingTable_registration * user_ctx,
+ u_long flags);
+void _eocIGMPSnoopingTable_shutdown_interface(eocIGMPSnoopingTable_registration * user_ctx);
+
+eocIGMPSnoopingTable_registration *
+eocIGMPSnoopingTable_registration_get( void );
+
+eocIGMPSnoopingTable_registration *
+eocIGMPSnoopingTable_registration_set( eocIGMPSnoopingTable_registration * newreg );
+
+netsnmp_container *eocIGMPSnoopingTable_container_get( void );
+int eocIGMPSnoopingTable_container_size( void );
+
+u_int eocIGMPSnoopingTable_dirty_get( void );
+void eocIGMPSnoopingTable_dirty_set( u_int status );
+
+ eocIGMPSnoopingTable_rowreq_ctx * eocIGMPSnoopingTable_allocate_rowreq_ctx(void *);
+void eocIGMPSnoopingTable_release_rowreq_ctx(eocIGMPSnoopingTable_rowreq_ctx *rowreq_ctx);
+
+int eocIGMPSnoopingTable_index_to_oid(netsnmp_index *oid_idx,
+ eocIGMPSnoopingTable_mib_index *mib_idx);
+int eocIGMPSnoopingTable_index_from_oid(netsnmp_index *oid_idx,
+ eocIGMPSnoopingTable_mib_index *mib_idx);
+
+/*
+ * access to certain internals. use with caution!
+ */
+void eocIGMPSnoopingTable_valid_columns_set(netsnmp_column_info *vc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCIGMPSNOOPINGTABLE_INTERFACE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_oids.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_oids.h
new file mode 100644
index 0000000000..6cc1b85187
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocIGMPSnoopingGroup/eocIGMPSnoopingTable/eocIGMPSnoopingTable_oids.h
@@ -0,0 +1,44 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-oids.m2c 17548 2009-04-23 16:35:18Z hardaker $
+ *
+ * $Id:$
+ */
+#ifndef EOCIGMPSNOOPINGTABLE_OIDS_H
+#define EOCIGMPSNOOPINGTABLE_OIDS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* column number definitions for table eocIGMPSnoopingTable */
+#define EOCIGMPSNOOPINGTABLE_OID 1,3,6,1,4,1,17409,2,4,7,1
+
+
+#define COLUMN_EOCIGMPSNOOPINGCBATCARDINDEX 1
+
+#define COLUMN_EOCIGMPSNOOPINGCNUINDEX 2
+
+#define COLUMN_EOCIGMPSNOOPINGDEVMACADDRESS 3
+#define COLUMN_EOCIGMPSNOOPINGDEVMACADDRESS_FLAG (0x1 << 0)
+
+#define COLUMN_EOCIGMPSNOOPINGEN 4
+#define COLUMN_EOCIGMPSNOOPINGEN_FLAG (0x1 << 1)
+
+
+#define EOCIGMPSNOOPINGTABLE_MIN_COL COLUMN_EOCIGMPSNOOPINGCBATCARDINDEX
+#define EOCIGMPSNOOPINGTABLE_MAX_COL COLUMN_EOCIGMPSNOOPINGEN
+
+
+ /*
+ * TODO:405:r: Review EOCIGMPSNOOPINGTABLE_SETTABLE_COLS macro.
+ * OR together all the writable cols.
+ */
+#define EOCIGMPSNOOPINGTABLE_SETTABLE_COLS (COLUMN_EOCIGMPSNOOPINGDEVMACADDRESS_FLAG | COLUMN_EOCIGMPSNOOPINGEN_FLAG)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCIGMPSNOOPINGTABLE_OIDS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup.h
new file mode 100644
index 0000000000..5171a31699
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup.h
@@ -0,0 +1,2 @@
+config_require(mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable)
+config_require(mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeGroup)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeGroup.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeGroup.c
new file mode 100644
index 0000000000..bd9a91e0a3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeGroup.c
@@ -0,0 +1,771 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37: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 "eocSoftwareUpgradeGroup.h"
+
+/** Initializes the eocSoftwareUpgradeGroup module */
+void
+init_eocSoftwareUpgradeGroup(void)
+{
+ static oid eocSoftwareUpgradeServerIP_oid[] = { 1,3,6,1,4,1,17409,2,4,4,1 };
+ static oid eocSoftwareUpgradeServerPort_oid[] = { 1,3,6,1,4,1,17409,2,4,4,2 };
+ static oid eocSoftwareUpgradeLogin_oid[] = { 1,3,6,1,4,1,17409,2,4,4,3 };
+ static oid eocSoftwareUpgradePassWord_oid[] = { 1,3,6,1,4,1,17409,2,4,4,4 };
+
+ DEBUGMSGTL(("eocSoftwareUpgradeGroup", "Initializing\n"));
+
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocSoftwareUpgradeServerIP", handle_eocSoftwareUpgradeServerIP,
+ eocSoftwareUpgradeServerIP_oid, OID_LENGTH(eocSoftwareUpgradeServerIP_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocSoftwareUpgradeServerPort", handle_eocSoftwareUpgradeServerPort,
+ eocSoftwareUpgradeServerPort_oid, OID_LENGTH(eocSoftwareUpgradeServerPort_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocSoftwareUpgradeLogin", handle_eocSoftwareUpgradeLogin,
+ eocSoftwareUpgradeLogin_oid, OID_LENGTH(eocSoftwareUpgradeLogin_oid),
+ HANDLER_CAN_RWRITE
+ ));
+ netsnmp_register_scalar(
+ netsnmp_create_handler_registration("eocSoftwareUpgradePassWord", handle_eocSoftwareUpgradePassWord,
+ eocSoftwareUpgradePassWord_oid, OID_LENGTH(eocSoftwareUpgradePassWord_oid),
+ HANDLER_CAN_RWRITE
+ ));
+}
+
+int
+handle_eocSoftwareUpgradeServerIP(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+
+ char ip_addr[4];
+ char *ip_addr_save = NULL;
+ u_char *value;
+
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ /* We are never called for a GETNEXT if it's registered as a
+ "instance", as it's "magically" handled for us. */
+
+ /* a instance handler also only hands us one request at a time, so
+ we don't need to loop over a list of requests; we'll only get one. */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+
+ /* read buffer for upgrade server IP address from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_IP,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* IP address set to 0.0.0.0 to permit walk requests */
+ memset (ip_addr, 0, 4);
+ }
+ else
+ {
+ /* convert IP address from string to array of bytes */
+ ret = libspid_ip_str_to_bin (buffer, ip_addr);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ memset (ip_addr, 0, 4);
+ }
+ }
+ snmp_set_var_typed_value (requests->requestvb, ASN_IPADDRESS,
+ (u_char *) ip_addr, sizeof (ip_addr));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/
+ * set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_IPADDRESS);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /*
+ * malloc "undo" storage buffer
+ */
+ /* read buffer for upgrade server IP address from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_IP,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ /* convert IP address from string to array of bytes */
+ ret = libspid_ip_str_to_bin (buffer, ip_addr);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ memset (ip_addr, 0, 4);
+ }
+ }
+
+ memdup ((u_char **) & ip_addr_save, (u_char *) ip_addr,
+ sizeof (ip_addr));
+
+ if (NULL == ip_addr_save)
+ {
+ /* if malloc, or whatever, failed: */
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list
+ ("upgradeserveripaddr",
+ ip_addr_save, free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /*
+ * free resources allocated in RESERVE1 and/or
+ * RESERVE2. Something failed somewhere, and the states
+ * below won't be called.
+ */
+ break;
+
+ case MODE_SET_ACTION:
+ /*
+ * perform the value change here
+ */
+ value = requests->requestvb->val.string;
+
+ /* convert IP address given in SET request from array of
+ bytes to string */
+ ret = libspid_ip_bin_to_str (value, buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ /* store new IP data */
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_IP,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * delete temporary storage
+ */
+ break;
+
+ case MODE_SET_UNDO:
+ /*
+ * UNDO and return to previous value for the object
+ */
+ value =
+ (u_char *) netsnmp_request_get_list_data (requests,
+ "upgradeserveripaddr");
+ /* convert IP address from array of bytes to string */
+ ret = libspid_ip_bin_to_str (value, buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_ip_bin_to_str error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+
+ /* restore IP data */
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_IP,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR, "unknown mode (%d) in "
+ "handle_eocSoftwareUpgradeServerIP\n", reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+int
+handle_eocSoftwareUpgradeServerPort(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+
+ int server_port;
+ int *server_port_save = NULL;
+ u_long value;
+
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /*
+ * a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one.
+ */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ /* read buffer for upgrade server port from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PORT,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* port set to 0 permit walk requests */
+ server_port = 0;
+ }
+ else
+ {
+ /* parse port from buffer */
+ if (1 != sscanf (buffer, "%d", &server_port))
+ {
+ server_port = 0;
+ }
+ }
+ snmp_set_var_typed_value (requests->requestvb, ASN_INTEGER,
+ (u_char *) & server_port,
+ sizeof (server_port));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/
+ * set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* or you could use netsnmp_check_vb_type_and_size instead */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_INTEGER);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /* read buffer for upgrade server port from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PORT,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ /* parse port from buffer */
+ if (1 != sscanf (buffer, "%d", &server_port))
+ {
+ server_port = 0;
+ }
+ }
+ /*
+ * malloc "undo" storage buffer
+ */
+ memdup ((u_char **) & server_port_save,
+ (u_char *) & server_port, sizeof (server_port));
+
+ if (NULL == server_port_save /* if malloc, or whatever, failed: */ )
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list
+ ("upgradeservport",
+ server_port_save, free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /*
+ * free resources allocated in RESERVE1 and/or
+ * RESERVE2. Something failed somewhere, and the states
+ * below won't be called.
+ */
+ break;
+
+ case MODE_SET_ACTION:
+ /*
+ * perform the value change here
+ */
+ value = *(requests->requestvb->val.integer);
+
+ sprintf (buffer, "%d", value);
+
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PORT,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /* delete temporary storage */
+ break;
+
+ case MODE_SET_UNDO:
+ /* UNDO and return to previous value for the object */
+ value =
+ *((u_long *) netsnmp_request_get_list_data (requests,
+ "upgradeservport"));
+
+ sprintf (buffer, "%d", value);
+
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PORT,
+ buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR, "unknown mode (%d) in "
+ "handle_eocSoftwareUpgradeServerPort\n", reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+int
+handle_eocSoftwareUpgradeLogin(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests)
+{
+ int ret;
+
+ char login[SW_UPGRADE_LOGIN_MAX_LEN];
+ char *login_save = NULL;
+ u_char *value = NULL;
+
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /*
+ * a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one.
+ */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ /* read buffer for software upgrade login from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_LOGIN,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* login set to empty string to permit walk requests */
+ strcpy (login, "");
+ }
+ else
+ {
+ /*
+ * if the buffer read from config file is larger than
+ * maximum value,
+ * copy only maximum permitted number of bytes
+ */
+ strncpy (login, buffer, SW_UPGRADE_LOGIN_MAX_LEN - 1);
+ login[SW_UPGRADE_LOGIN_MAX_LEN - 1] = '\0';
+ }
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ (u_char *) login, strlen (login));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/
+ * set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* check type of set value */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_OCTET_STR);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+
+ /* check size range of set value */
+ ret = netsnmp_check_vb_size_range (requests->requestvb,
+ SW_UPGRADE_LOGIN_MIN_LEN - 1,
+ SW_UPGRADE_LOGIN_MAX_LEN - 1);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /*
+ * malloc "undo" storage buffer
+ */
+ /* read buffer for software upgrade login from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_LOGIN,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ /*
+ * if the buffer read from config file is larger than
+ * maximum value,
+ * copy only maximum permitted number of bytes
+ */
+ strncpy (login, buffer, SW_UPGRADE_LOGIN_MAX_LEN - 1);
+ login[SW_UPGRADE_LOGIN_MAX_LEN - 1] = '\0';
+ }
+ memdup ((u_char **) & login_save, (u_char *) login, sizeof (login));
+ if (NULL == login_save /* if malloc, or whatever, failed: */ )
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list
+ ("upgradelogin", login_save,
+ free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /*
+ * free resources allocated in RESERVE1 and/or
+ * RESERVE2. Something failed somewhere, and the states
+ * below won't be called.
+ */
+ break;
+
+ case MODE_SET_ACTION:
+ /*
+ * perform the value change here
+ */
+ value = requests->requestvb->val.string;
+
+ /* copy SET request variable buffer and add terminal 0 */
+ strncpy (login, value, requests->requestvb->val_len);
+ login[requests->requestvb->val_len] = '\0';
+
+ /* write null-terminated buffer to config file */
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_LOGIN,
+ login);
+
+ if (LIBSPID_SUCCESS != ret /* error? */ )
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /* delete temporary storage */
+ break;
+
+ case MODE_SET_UNDO:
+ /*
+ * UNDO and return to previous value for the object
+ */
+ value =
+ (u_char *) netsnmp_request_get_list_data (requests,
+ "upgradelogin");
+ /* restore previous value in config file */
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_LOGIN,
+ value);
+
+ if (LIBSPID_SUCCESS != ret /* error? */ )
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR, "unknown mode (%d) in "
+ "handle_eocSoftwareUpgradeLogin\n", reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
+
+int
+handle_eocSoftwareUpgradePassWord (netsnmp_mib_handler * handler,
+ netsnmp_handler_registration * reginfo,
+ netsnmp_agent_request_info * reqinfo,
+ netsnmp_request_info * requests)
+{
+ int ret;
+
+ char password[SW_UPGRADE_PASSWORD_MAX_LEN];
+ char *password_save = NULL;
+ u_char *value = NULL;
+
+ char buffer[LIBSPID_LINE_MAX_LEN];
+
+ /*
+ * We are never called for a GETNEXT if it's registered as a
+ * "instance", as it's "magically" handled for us.
+ */
+
+ /*
+ * a instance handler also only hands us one request at a time, so
+ * we don't need to loop over a list of requests; we'll only get one.
+ */
+
+ switch (reqinfo->mode)
+ {
+ case MODE_GET:
+ /* read buffer for software upgrade password from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PASSWORD,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ /* password set to empty string to permit walk requests */
+ strcpy (password, "");
+ }
+ else
+ {
+ /*
+ * if the buffer read from config file is larger than
+ * maximum value,
+ * copy only maximum permitted number of bytes
+ */
+ strncpy (password, buffer, SW_UPGRADE_PASSWORD_MAX_LEN - 1);
+ password[SW_UPGRADE_PASSWORD_MAX_LEN - 1] = '\0';
+ }
+
+ snmp_set_var_typed_value (requests->requestvb, ASN_OCTET_STR,
+ (u_char *) password, strlen (password));
+ break;
+
+ /*
+ * SET REQUEST
+ *
+ * multiple states in the transaction. See:
+ * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/
+ * set-actions.jpg
+ */
+ case MODE_SET_RESERVE1:
+ /* check type of set value */
+ ret = netsnmp_check_vb_type (requests->requestvb, ASN_OCTET_STR);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+
+ /* check size range of set value */
+ ret = netsnmp_check_vb_size_range (requests->requestvb,
+ SW_UPGRADE_PASSWORD_MIN_LEN - 1,
+ SW_UPGRADE_PASSWORD_MAX_LEN - 1);
+ if (ret != SNMP_ERR_NOERROR)
+ {
+ netsnmp_set_request_error (reqinfo, requests, ret);
+ }
+ break;
+
+ case MODE_SET_RESERVE2:
+ /*
+ * malloc "undo" storage buffer
+ */
+ /* read buffer for software upgrade password from config file */
+ ret = libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PASSWORD,
+ buffer, LIBSPID_LINE_MAX_LEN);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error\n");
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ /*
+ * if the buffer read from config file is larger than
+ * maximum value,
+ * copy only maximum permitted number of bytes
+ */
+ strncpy (password, buffer, SW_UPGRADE_PASSWORD_MAX_LEN - 1);
+ password[SW_UPGRADE_PASSWORD_MAX_LEN - 1] = '\0';
+ }
+
+ memdup ((u_char **) & password_save,
+ (u_char *) password, sizeof (password));
+ if (NULL == password_save /* if malloc, or whatever, failed: */ )
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_RESOURCEUNAVAILABLE);
+ }
+ else
+ {
+ netsnmp_request_add_list_data (requests,
+ netsnmp_create_data_list
+ ("upgradepasswd", password_save,
+ free));
+ }
+ break;
+
+ case MODE_SET_FREE:
+ /*
+ * free resources allocated in RESERVE1 and/or
+ * RESERVE2. Something failed somewhere, and the states
+ * below won't be called.
+ */
+ break;
+
+ case MODE_SET_ACTION:
+ /*
+ * perform the value change here
+ */
+ value = requests->requestvb->val.string;
+
+ /* copy SET request variable buffer and add terminal 0 */
+ strncpy (password, value, requests->requestvb->val_len);
+ password[requests->requestvb->val_len] = '\0';
+
+
+ /* write null-terminated buffer to config file */
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PASSWORD,
+ password);
+
+ if (LIBSPID_SUCCESS != ret /* error? */ )
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_COMMITFAILED);
+ }
+ break;
+
+ case MODE_SET_COMMIT:
+ /*
+ * delete temporary storage
+ */
+ break;
+
+ case MODE_SET_UNDO:
+ /*
+ * UNDO and return to previous value for the object
+ */
+ value =
+ (u_char *) netsnmp_request_get_list_data (requests,
+ "upgradepasswd");
+
+ /* restore previous value in config file */
+ ret = libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PASSWORD,
+ value);
+
+ if (LIBSPID_SUCCESS != ret /* error? */ )
+ {
+ netsnmp_set_request_error (reqinfo, requests,
+ SNMP_ERR_UNDOFAILED);
+ }
+
+ break;
+
+ default:
+ /* we should never get here, so this is a really bad error */
+ snmp_log (LOG_ERR, "unknown mode (%d) in "
+ "handle_eocSoftwareUpgradePassWord\n", reqinfo->mode);
+ return SNMP_ERR_GENERR;
+ }
+
+ return SNMP_ERR_NOERROR;
+}
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeGroup.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeGroup.h
new file mode 100644
index 0000000000..0edc69f745
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeGroup.h
@@ -0,0 +1,19 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+ */
+#ifndef EOCSOFTWAREUPGRADEGROUP_H
+#define EOCSOFTWAREUPGRADEGROUP_H
+
+/* include common header */
+#include "EoCCommon.h"
+
+
+/* function declarations */
+void init_eocSoftwareUpgradeGroup(void);
+Netsnmp_Node_Handler handle_eocSoftwareUpgradeServerIP;
+Netsnmp_Node_Handler handle_eocSoftwareUpgradeServerPort;
+Netsnmp_Node_Handler handle_eocSoftwareUpgradeLogin;
+Netsnmp_Node_Handler handle_eocSoftwareUpgradePassWord;
+
+#endif /* EOCSOFTWAREUPGRADEGROUP_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable.h
new file mode 100644
index 0000000000..c535b88c35
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable.h
@@ -0,0 +1,5 @@
+config_require(mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable)
+config_require(mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_get)
+config_require(mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_access)
+config_require(mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_interface)
+config_require(mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_set)
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeCBATCardIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeCBATCardIndex.m2d
new file mode 100644
index 0000000000..ce6109d057
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeCBATCardIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocSoftwareUpgradeCBATCardIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeCNUIndex.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeCNUIndex.m2d
new file mode 100644
index 0000000000..f12569439a
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeCNUIndex.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocSoftwareUpgradeCNUIndex
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeDevType.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeDevType.m2d
new file mode 100644
index 0000000000..ec06424df0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeDevType.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocSoftwareUpgradeDevType
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeFileName.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeFileName.m2d
new file mode 100644
index 0000000000..045440b74b
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeFileName.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocSoftwareUpgradeFileName
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeMACAddress.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeMACAddress.m2d
new file mode 100644
index 0000000000..81bfda99b5
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeMACAddress.m2d
@@ -0,0 +1,43 @@
+########################################################################
+##
+## mib2c node setting for eocSoftwareUpgradeMACAddress
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = char@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = -1@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 1@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
+########################################################################
+## Allow realloc when data size exceeds length? If your data
+## store for this node is a pointer allocated with one of the
+## alloc family functions, you can set this to 1 to use realloc
+## when a new value length exceeds the old lenght. If you are
+## using a fixed size buffer, this value should be 0.
+##
+## @eval $m2c_node_realloc = 0@
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeProceed.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeProceed.m2d
new file mode 100644
index 0000000000..4ef76e7f66
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeProceed.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocSoftwareUpgradeProceed
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeResult.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeResult.m2d
new file mode 100644
index 0000000000..19e5084ad4
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/node-eocSoftwareUpgradeResult.m2d
@@ -0,0 +1,35 @@
+########################################################################
+##
+## mib2c node setting for eocSoftwareUpgradeResult
+##
+## Remove the '##' comment delimeter to change settings
+##
+########################################################################
+## Node declaration type? This is the C type to be used when
+## declaring a variable to hold a value for this column. It
+## is strongly recommended that you do not change this value.
+## If you do, it is likely to break lots of generated code that
+## you will have to fix.
+##
+## @eval $m2c_decl = u_long@
+##
+########################################################################
+## Generate/use mapping functions? Useful if the MIB defines
+## a different format or enumerations than you data store uses.
+##
+## @eval $m2c_node_skip_mapping = 0@
+##
+########################################################################
+## Need a length for the value? Most OCTET-STRING based values will
+## need a length, most other types will not. Do not change this one
+## unless you know what you are doing! You will almost certainly need
+## to fix lots of generated code if you do.
+##
+## @eval $m2c_node_needlength = 0@
+##
+########################################################################
+## Skip get? Set this to 1 if you do not want to implement a value
+## for this column.
+##
+## @eval $m2c_node_skip_get = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/table-eocSoftwareUpgradeTable.m2d b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/table-eocSoftwareUpgradeTable.m2d
new file mode 100644
index 0000000000..f7c5384ed3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/defaults/table-eocSoftwareUpgradeTable.m2d
@@ -0,0 +1,103 @@
+## ########################################################################
+##
+## mib2c Table setting for eocSoftwareUpgradeTable
+##
+## ########################################################################
+##
+## User context structure type
+##
+@eval $m2c_context_reg = "netsnmp_data_list"@
+##
+## ########################################################################
+##
+## Allocate data structure in row structure? (vs embedd)
+##
+@eval $m2c_data_allocate = 0@
+##
+## ########################################################################
+##
+## Generate code to cache data?
+##
+@eval $m2c_data_cache = 1@
+##
+## ########################################################################
+##
+## Data context structure type
+##
+@eval $m2c_data_context = "generated"@ [generated|NAME]
+##
+## ########################################################################
+##
+## Generate function to initialize row context when created?
+##
+@eval $m2c_data_init = 1@
+##
+## ########################################################################
+##
+## Persistence of data context
+## // 0:persistent, 1:semi-transient, 2:transient
+##
+@eval $m2c_data_transient = 1@
+##
+## ########################################################################
+##
+## Include some example code?
+##
+@eval $m2c_include_examples = 0@
+##
+## ########################################################################
+##
+## Generate code for irreversible_commit mode?
+##
+@eval $m2c_irreversible_commit = 0@
+##
+## ########################################################################
+##
+## Data access method
+##
+@eval $m2c_table_access = "container-cached"@
+##
+## ########################################################################
+##
+## Generate row dependency function?
+##
+@eval $m2c_table_dependencies = 0@
+##
+## ########################################################################
+##
+## Generate data store/restore functions for persistent storage?
+##
+@eval $m2c_table_persistent = 0@
+##
+## ########################################################################
+##
+## Generate code for dynamic row creation?
+##
+@eval $m2c_table_row_creation = 0@
+##
+## ########################################################################
+##
+## Generate code for settable objects?
+##
+@eval $m2c_table_settable = 1@
+##
+## ########################################################################
+##
+## Skip mapping between data context and MIB formats?
+## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
+##
+@eval $m2c_table_skip_mapping = -1@
+##
+## ########################################################################
+##
+## Generate code for sparse tables?
+##
+@eval $m2c_table_sparse = 0@
+##
+## ########################################################################
+##
+## Generate Makefile/AgentX code?
+##
+@eval $mfd_generate_makefile = 0@
+@eval $mfd_generate_subagent = 0@
+##
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable-README-FIRST.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable-README-FIRST.txt
new file mode 100644
index 0000000000..8c1b32ddc3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable-README-FIRST.txt
@@ -0,0 +1,167 @@
+************************************************************************
+eocSoftwareUpgradeTable README
+------------------------------------------------------------------------
+This document describes the results of the mib2c code generation
+system using the mfd code generation template. The resulting files
+are documented both in this README file as well as per-table specific
+README files. All of the files generated by this run of mib2c will
+begin with the eocSoftwareUpgradeTable prefix.
+
+Quick Start
+-----------
+For those interested in a quick start, to get a pseudo-todo list, try
+this command in directory with the generated code:
+
+ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
+
+Key:
+ :o: Optional
+ :r: Recommended
+ :M: Mandatory
+ :A: Advanced users
+
+This will give you and ordered list of places in the code that you
+may (or must) take a closer look at).
+
+You may also want to take a look at the on-line tutorial, found here:
+
+ http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
+
+
+MIBs For Dummies Overview
+-------------------------
+The MIBs For Dummies (MFD) configuration files have been written to help
+SNMP novices implement SNMP MIBs. This section will be a brief
+introduction to some of the general concepts you should be familar with.
+
+ Managed Information Base (MIB)
+ ------------------------------
+ A SNMP MIB (Managed information base) is a text file that describes the
+ syntax for some set of data objects. The MIB creates a correlation
+ between an ASCII name for an object and a number OID (Object Identifier).
+ The SNMP protocol communicates information using the OIDs, and the MIB
+ allows tools to display a name, which we humans find easier to deal with.
+
+ To use an analogy, a MIB is much like a menu at a restaurant. If you've
+ ever been to a reataurant and ordered a meal, and later received a bill
+ that simply had '#6' on it, you get the idea. The name is easier for
+ the customers to remember, and the waiters and chefs use the number for
+ efficency.
+
+
+ Scalars
+ -------
+ A scalar variable is a unique object in a MIB which can represent
+ a single value. For example, the SNMP standard MIB-II defines a
+ variable, sysContact.0, which is a string containing the contact
+ information for the person in charge of a particular agent. Note
+ that scalar variable always end with '.0'.
+
+
+ Rows and Tables
+ ---------------
+ When a group of related attributes occur more than once, they can be
+ grouped together in a table. A table has an index, which uniquely
+ identifies a particular row, and data columns, which contain the
+ attributes for that row.
+
+ For example, the SNMP standard MIB-II defines a table, ifTable, which
+ contains information on the ethernet interfaces on a system.
+
+
+ Data Structures
+ ---------------
+ The code generated by the MFD configuration files has a few important
+ structures.
+
+
+ The Data Context
+ ----------------
+ The data context structure should contain the necessary information
+ to provide the data for the columns in a given row. As long as you
+ can extract the data for a column for the data context, the data context
+ can be anything you want: a pointer to an existing structure, the
+ parameters needed for a function call or an actual copy of the data.
+
+ By default, a data context structure is generated with storage for
+ all the data in a row. Information on changing the default is presented
+ later on in this help.
+
+
+ The MIB Context
+ ---------------
+ The MIB context structure is generated with storage for all the
+ indexes of a table. This data will be used when searching for the
+ correct row to process for a request.
+
+
+ The Row Request Context
+ -----------------------
+ Each table will have a unique data structure for holding data during
+ the processing of a particular row. The row request context contains
+ the registration context (that you supply during initilization),
+ the data context, the MIB context, the undo context (for settable
+ tables) and other data. There is also a netsnmp_data_list, which can
+ be used to temporary storage during processing.
+
+
+ The Table Registration Pointer
+ ------------------------------
+ During initilization, you may provide a pointer to arbitrary data for
+ you own use. This pointer will be saved in the row request context,
+ and is passed as a parameter to several functions. It is not required,
+ and is provided as a way for you to access table specific data in
+ the generated code.
+
+
+
+These files are top-level files potentially useful for all the tables:
+------------------------------------------------------------------------
+
+ File : eocSoftwareUpgradeTable_Makefile
+ ----------------------------------------------------------------------
+ Purpose : Make file for compiling a (sub)agent. This file is only
+ useful if you don't want to compile your code directly
+ into the Net-SNMP master agent.
+ Editable: Optional
+ Usage : make -f eocSoftwareUpgradeTable_Makefile
+
+
+ File : eocSoftwareUpgradeTable_subagent.c
+ ----------------------------------------------------------------------
+ Purpose : This file contains a main() function for an agent or
+ sub-agent and is compiled using the Makefile above.
+
+
+
+
+Table specific README files
+------------------------------------------------------------------------
+Each table for which code was generated has its own README file
+describing the files specifically associated with each table. You
+should probably read these next:
+
+ eocSoftwareUpgradeTable-README-eocSoftwareUpgradeTable.txt
+
+
+
+These are miscellaneous auto-generated code files you generally
+shouldn't edit. They contain code that ties your code together with
+the Net-SNMP agent.
+------------------------------------------------------------------------
+ File : eocSoftwareUpgradeTable.h
+ Purpose : Header file for the module set. Includes config_require
+ macros to auto-load the other code pieces when compiled
+ into the agent.
+
+ File : eocSoftwareUpgradeTable_oids.h
+ Purpose : C #define definitions of the tables, columns, and OIDs
+
+ File : eocSoftwareUpgradeTable_enums.h
+ Purpose : C #define definitions of the enumerated type values for
+ each column of each table that requires them.
+
+ File : eocSoftwareUpgradeTable_interface.c
+ Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
+ functions you will fill out to the code that the agent needs.
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable-README-eocSoftwareUpgradeTable.txt b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable-README-eocSoftwareUpgradeTable.txt
new file mode 100644
index 0000000000..5b3b75e2e3
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable-README-eocSoftwareUpgradeTable.txt
@@ -0,0 +1,799 @@
+************************************************************************
+eocSoftwareUpgradeTable README
+------------------------------------------------------------------------
+ This readme file describes the code generated by mib2c (using the MIBs
+ for Dummies (MFD) configuration file). The code generated was
+ generated specifically for the following SNMP table:
+
+ eocSoftwareUpgradeTable
+
+ Your code will be called when the snmp agent receives requests for
+ the eocSoftwareUpgradeTable table. The agent will start by looking for the right
+ row in your existing data to operate on, if one exists.
+
+
+ Configuration Variables
+ ------------------------------------------------------------
+ Some variables used for code generation may be set to affect the code
+ generation. You may override these variables by setting them in the
+ file defaults/table-eocSoftwareUpgradeTable.m2d, and then re-running mib2c.
+
+ m2c_table_settable (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ MIB object which have an access of read-write or read-create. The
+ default is set based on whether or not the table contains writable
+ objects, but can be over-ridden.
+
+ Syntax: @eval $m2c_table_settable = 0@
+
+
+ m2c_table_dependencies (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking dependencies between columns, rows or tables. The default
+ is set based on whether or not the table contains writable objects,
+ but can be over-ridden.
+
+ Syntax: @eval $m2c_table_dependencies = 0@
+
+
+ m2c_table_row_creation (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not code is generated to support
+ checking creation of new rows via SNMP. The default is set based on
+ whether or not the table contains read-create objects, but can be
+ over-ridden.
+
+ Syntax: @eval $m2c_table_row_creation = 0@
+
+
+ m2c_context_reg (currently 'netsnmp_data_list')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocSoftwareUpgradeTable_registration.
+
+ During initilization, you will provide a pointer to a structure of
+ this type. This pointer is used as a parameter to many functions so
+ that you have access to your registration data. The default is a
+ netsnmp_data_list pointer, which will allow you to keep multiple
+ pointers tagged by a text name. If you have a new or existing structure
+ you would rather use, you can redefine this variable.
+
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocSoftwareUpgradeTable.h header.
+
+ Syntax: @eval $m2c_context_reg = "struct my_registration_context@
+
+
+ m2c_data_context (currently 'generated')
+ --------------------------------------------------------
+ This variable contains the structure name to typedef for the
+ eocSoftwareUpgradeTable_data.
+
+ This typedef is used in the row request context structure for the table,
+ eocSoftwareUpgradeTable_rowreq_ctx.
+
+ The typedef in the primary table context will be used for the data and
+ undo structure types. This structure should contain all the data
+ needed for all the columns in the table. The default is 'generated',
+ which will cuase a new data strcuture to be generated with data members
+ for each column.
+
+ To avoid regenerating code, you may also change this typedef directly
+ in the eocSoftwareUpgradeTable.h header.
+
+ Syntax: @eval $m2c_data_context = "struct my_data_context"@
+
+
+ m2c_data_allocate (currently '0')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ requires memory to be allocated. The default generated data structure
+ does not. If you are using a custom data context which needs to
+ allocate memory, override this value and two additional functions
+ will be generated:
+
+ eocSoftwareUpgradeTable_allocate_data
+ eocSoftwareUpgradeTable_release_data
+
+ Syntax: @eval $m2c_data_allocate = 1@
+
+
+ m2c_data_init (currently '1')
+ --------------------------------------------------------
+ This variable determines whether or not the data context (see above)
+ or any other items you have added to the table context requires
+ initialization. The default generated data structure does not. If you
+ are using a custom data context or have added items needing initialization
+ to the table context, override this value and two additional functions
+ will be generated:
+
+ eocSoftwareUpgradeTable_rowreq_ctx_init
+ eocSoftwareUpgradeTable_rowreq_ctx_cleanup
+
+ Syntax: @eval 1 = 1@
+
+
+ m2c_table_access (currently 'container-cached')
+ ------------------------------------------------------------------
+ This variable determines which data interface will be use to generate
+ code for looking up data for a given index. The default is the
+ 'container-cached' access code, which caches the data in a netsnmp-
+ container (usually a sorted array).
+
+ Available options can be determined by checking for mib2c configuration
+ files that begin with 'mfd-access-*'.
+
+ Syntax: @eval $m2c_table_access = 'container-cached'@
+
+
+ m2c_include_examples (currently '0')
+ ------------------------------------------------------------------
+ This variable determines whether or not to generate example code. The
+ default is to generate example code.
+
+ Syntax: @eval $m2c_include_examples = 0@
+
+
+ m2c_data_transient (currently '1')
+ ------------------------------------------------------------------
+ This variable determines how the generated example code deals with the
+ data during data lookup. See the table readme file for details on how
+ the current table access method interprets this value. In general,
+ a value of 0 indicates persistent data, 1 indicates semi-transient and
+ 2 indicates transient data.
+
+ Syntax: @eval $m2c_data_transient = 0@
+
+
+ Index(es) for the eocSoftwareUpgradeTable table
+ ------------------------------------------------------------
+ The index(es) for the eocSoftwareUpgradeTable table are:
+
+ eocSoftwareUpgradeCBATCardIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+ eocSoftwareUpgradeCNUIndex:
+ Syntax: INTEGER
+ DataType: INTEGER
+ ASN type: ASN_INTEGER
+ C-code type: long
+
+ You should know how to set all these values from your data context,
+ eocSoftwareUpgradeTable_data.
+
+
+************************************************************************
+eocSoftwareUpgradeTable File Overview
+------------------------------------------------------------------------
+ Several files have been generated to implement the eocSoftwareUpgradeTable
+ table. We'll go through these files, one by one, explaining each and
+ letting you know which you need to edit.
+
+
+File: eocSoftwareUpgradeTable_data_access.[c|h]
+------------------------------------------------------------------------
+ The eocSoftwareUpgradeTable_data_access file contains the interface to your data in
+ its raw format. These functions are used to build the row cache or
+ locate the row (depending on the table access method).
+
+ Set MIB context
+ -----------------
+ TODO : Set MIB index values
+ FUNC : eocSoftwareUpgradeTable_indexes_set
+ WHERE: eocSoftwareUpgradeTable_data_access.c
+
+ This is a convenience function for setting the index context from
+ the native C data. Where necessary, value mapping should be done.
+
+ This function should update the table index values (found in
+ tbl_idx) for the given raw data.
+
+
+ container summary
+ ------------------------
+ The container data access code is for cases when you want to
+ store your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+ cache summary
+ ------------------------
+ The container-cached data access code is for cases when you want to
+ cache your data in the agent/sub-agent.
+
+ ... to be continued...
+
+
+
+
+File: eocSoftwareUpgradeTable_enums.h
+------------------------------------------------------------------------
+ This file contains macros for mapping enumeration values when the
+ enumerated values defined by the MIB do not match the values used
+ internally.
+
+ Review this file to see if any values need to be updated.
+
+
+File: eocSoftwareUpgradeTable_data_get.c
+------------------------------------------------------------------------
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocSoftwareUpgradeMACAddress_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocSoftwareUpgradeDevType_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocSoftwareUpgradeFileName_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocSoftwareUpgradeProceed_get
+
+ Get data for column
+ -------------------
+ TODO : retrieve column data from raw data
+ FUNC : eocSoftwareUpgradeResult_get
+
+
+
+File: eocSoftwareUpgradeTable_data_set.c
+------------------------------------------------------------------------
+
+ This code was generated based on the following assumptions or settings:
+
+ 1) Some of the values for this table have DEPENDENCIES on other objects.
+
+ DEPENDENCIES on other objects complicates SET request processing. When
+ one or more columns in a table depend on another object (in the same
+ table, or in another table), a DEPENDENCY exists. For example, if you
+ have a table that determine a color with three columns (red, green and
+ blue) that define the percentage of each primary color, the total for
+ the three columns must equal 100 percent. So, in addition to checking
+ that each colums has a valid value between 0 and 100, the total of
+ all three columns must equal 100.
+
+ Set $m2c_table_dependencies = 0 in defaults/table-eocSoftwareUpgradeTable.m2d
+ and regenerate code if this assumption is incorrect.
+
+ 2) This table does not support ROW CREATION.
+
+ Supporting ROW CREATION allows new rows to be created via SNMP requests.
+
+
+
+ Undo setup
+ ----------
+ TODO : save data for undo
+ FUNC : eocSoftwareUpgradeTable_undo_setup
+
+ This function will be called before the individual undo_setup functions are
+ called. This is where you should save any undo information which is not
+ directly related to a particular column. This function will only be called
+ once per row. After this function is called, any column which is being
+ set will have its individual node undo_setup function called.
+
+
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocSoftwareUpgradeMACAddress_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocSoftwareUpgradeMACAddress_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocSoftwareUpgradeMACAddress_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocSoftwareUpgradeMACAddress_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocSoftwareUpgradeDevType_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocSoftwareUpgradeDevType_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocSoftwareUpgradeDevType_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocSoftwareUpgradeDevType_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocSoftwareUpgradeFileName_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocSoftwareUpgradeFileName_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocSoftwareUpgradeFileName_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocSoftwareUpgradeFileName_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+ Check value for column
+ ----------------------
+ TODO : perform additional validations on values for a set request
+ FUNC : eocSoftwareUpgradeProceed_check_value
+
+ The generated code will automatically validate incoming requests against
+ all the requirements specified by the syntax of the MIB. However, it is
+ often the case that additional requirements are specified in the
+ description of a MIB object. Those type of validations should be checked
+ in this function.
+
+
+ Undo setup for column
+ ---------------------
+ TODO : save the value for column
+ FUNC : eocSoftwareUpgradeProceed_undo_setup
+
+ After the table level undo setup function has been called, the individual
+ node undo setup functions will be called for columns which are being set.
+
+
+ Set value for column
+ --------------------
+ TODO : set the value for column
+ FUNC : eocSoftwareUpgradeProceed_set
+
+ After all the validations have been passed, this function will be called to
+ set the new value.
+
+
+ Undo value for column
+ ---------------------
+ TODO : undo set for column
+ FUNC : eocSoftwareUpgradeProceed_undo
+
+ If an error occurs after a column has been set, this function will be called
+ to undo the set and restore the previous state.
+
+
+
+ Commit changes
+ --------------
+ TODO : commit changes
+ FUNC : eocSoftwareUpgradeTable_commit
+
+ After all values have been set, the commit function will be called.
+
+
+
+
+
+************************************************************************
+eocSoftwareUpgradeTable Reference
+------------------------------------------------------------------------
+
+Function flow
+----------------------------------------------------
+To give you the general idea of how the functions flow works, this
+example flow is from a complete table implementation.
+
+NOTE: Depending on your configuration, some of the functions used in the
+ examples below may not have been generated for the
+ eocSoftwareUpgradeTable table.
+
+ Conversely, the examples below may not include some functions that
+ were generated for the eocSoftwareUpgradeTable table.
+
+To watch the flow of the eocSoftwareUpgradeTable table, use the
+following debug tokens:
+
+ snmp_agent
+ helper:table:req
+ eocSoftwareUpgradeTable
+ verbose:eocSoftwareUpgradeTable
+ internal:eocSoftwareUpgradeTable
+
+e.g.
+ snmpd -f -Le -DeocSoftwareUpgradeTable,verbose:eocSoftwareUpgradeTable,internal:eocSoftwareUpgradeTable
+
+
+Initialization
+--------------------------------
+init_xxxTable: called xxx.c
+ initialize_table_xxxTable xxx.c
+ _xxxTable_initialize_interface xxx_interface.c
+ xxxTable_init_data xxx_data_access.c
+ _xxxTable_container_init xxx_interface.c
+ xxxTable_container_init xxx_data_access.c
+
+
+GET Request
+--------------------------------
+_cache_load xxx_interface.c
+ xxxTable_cache_load xxx_data_access.c
+ xxxTable_allocate_rowreq_ctx xxx_interface.c
+ xxxTable_allocate_data xxx_data_get.c
+ xxxTable_rowreq_ctx_init xxx_data_get.c
+ xxxTable_indexes_set xxx_data_get.c
+ xxxTable_indexes_set_tbl_idx xxx_data_get.c
+
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup xxx_interface.c
+ xxxTable_row_prep xxx_data_access.c
+
+_mfd_xxxTable_get_values xxx_interface.c
+ _mfd_xxxTable_get_column xxx_interface.c
+ yyy_get xxx_data_get.c
+
+xxxTable_post_request
+
+
+GETNEXT Request
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_get_values ...
+xxxTable_post_request ...
+
+
+SET Request: success
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects xxx_interface.c
+ _xxxTable_check_column xxx_interface.c
+ yyy_check_value xxx_data_set.c
+
+_mfd_xxxTable_undo_setup xxx_interface.c
+ xxxTable_allocate_data ...
+ xxxTable_undo_setup xxx_interface.c
+ _xxxTable_undo_setup_column xxx_interface.c
+ yyy_undo_setup xxx_data_set.c
+
+_mfd_xxxTable_set_values xxx_interface.c
+ _xxxTable_set_column xxx_interface.c
+ yyy_set xxx_data_set.c
+
+_mfd_xxxTable_check_dependencies xxx_interface.c
+ xxxTable_check_dependencies xxx_data_set.c
+
+_mfd_xxxTable_commit xxx_interface.c
+ xxxTable_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup xxx_interface.c
+ xxxTable_undo_cleanup xxx_data_set.c
+ xxxTable_release_data ...
+
+xxxTable_post_request ...
+
+
+SET Request: row creation
+--------------------------------
+_cache_load ...
+xxxTable_pre_request
+
+_mfd_xxxTable_object_lookup ...
+ xxxTable_index_from_oid xxx_interface.c
+ xxxTable_allocate_rowreq_ctx ...
+ ...
+ _xxxTable_check_indexes xxx_interface.c
+ yyy_check_index xxx_data_set.c
+ xxxTable_validate_index xxx_data_set.c
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+_mfd_xxxTable_commit ...
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+SET Resuest: value error
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+
+_mfd_xxxTable_check_objects ...
+ _xxxTable_check_column ...
+ yyy_check_value ...
+ ERROR:"yyy value not supported"
+
+xxxTable_post_request ...
+
+
+SET Request: commit failure
+--------------------------------
+_cache_load ...
+xxxTable_pre_request ...
+_mfd_xxxTable_object_lookup ...
+_mfd_xxxTable_check_objects ...
+_mfd_xxxTable_undo_setup ...
+_mfd_xxxTable_set_values ...
+_mfd_xxxTable_check_dependencies ...
+
+_mfd_xxxTable_commit ...
+ xxxTable_commit ...
+ ERROR: bad rc -1
+
+_mfd_xxxTable_undo_commit xxx_interface.c
+ xxxTable_undo_commit xxx_data_set.c
+
+_mfd_xxxTable_undo_values xxx_interface.c
+ _xxxTable_undo_column xxx_interface.c
+ yyy_undo xxx_data_set.c
+
+_mfd_xxxTable_undo_cleanup ...
+xxxTable_post_request ...
+
+
+Row release (user initiated)
+--------------------------------
+xxxTable_release_rowreq_ctx xxx_interface.c
+ xxxTable_rowreq_ctx_cleanup xxx_data_get.c
+ xxxTable_release_data xxx_data_get.c
+
+
+
+Table / column details
+----------------------------------------------------
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocSoftwareUpgradeTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeTable is subid 5 of eocSoftwareUpgradeGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5, length: 11
+*/
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeCBATCardIndex
+ * eocSoftwareUpgradeCBATCardIndex is subid 1 of eocSoftwareUpgradeEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.1
+ * Description:
+CBAT°å¿¨µÄÐòºÅË÷Òý£¬»òCNUËùÊôCBAT°å¿¨µÄÐòºÅË÷Òý¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 255;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeCNUIndex
+ * eocSoftwareUpgradeCNUIndex is subid 2 of eocSoftwareUpgradeEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.2
+ * Description:
+CNUµÄÐòºÅË÷Òý£¬ÈôֻΪCBAT°å¿¨Éý¼¶£¬ÔòȡֵΪ0.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 0
+ *
+ * Ranges: 0 - 65535;
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeMACAddress
+ * eocSoftwareUpgradeMACAddress is subid 3 of eocSoftwareUpgradeEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.3
+ * Description:
+´ýÈí¼þÉý¼¶É豸µÄMACµØÖ·.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeDevType
+ * eocSoftwareUpgradeDevType is subid 4 of eocSoftwareUpgradeEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.4
+ * Description:
+´ýÈí¼þÉý¼¶É豸µÄÀàÐÍ£º
+ cbat(1)-CBAT£¬
+ cbat-card(2)- CBAT°å¿¨£¬
+ cnu(3)- CNU£¬
+ other(4)- ÆäËûÉ豸ÀýÈ磺Gateway»òSwitch£¬
+ reserved1(5)£¬
+ reserved2(6)£¬
+ reserved3(7)
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 5/8. Values: cbat(1), cbat_card(2), cnu(3), other(4), reserved1(5), reserved2(6), reserved3(7)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeFileName
+ * eocSoftwareUpgradeFileName is subid 5 of eocSoftwareUpgradeEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.5
+ * Description:
+´ÓÈí¼þÉý¼¶·þÎñÆ÷ÉÏÏÂÔصĹ̼þÎļþÃû¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 1 - 255;
+ *
+ * Its syntax is OCTETSTR (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeProceed
+ * eocSoftwareUpgradeProceed is subid 6 of eocSoftwareUpgradeEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.6
+ * Description:
+É豸Èí¼þÉý¼¶²Ù×÷£º
+ download(1)- ´ÓÈí¼þÉý¼¶·þÎñÆ÷ÉÏÏÂÔع̼þµ½EoC CBATÉ豸£»
+ upgrade(2)- Éý¼¶CBAT¡¢CBAT°å¿¨»òCNUÉ豸¹Ì¼þ£»
+ upload(3)- Ïò·þÎñÆ÷ÉÏ´«Îļþ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: download(1), upgrade(2), upload(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeResult
+ * eocSoftwareUpgradeResult is subid 7 of eocSoftwareUpgradeEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.7
+ * Description:
+Èí¼þÉý¼¶×´Ì¬:
+ none(0)- ÎÞ²Ù×÷£»
+ downloading(1)- ¹Ì¼þÏÂÔØÖУ»
+ downloadfailed(2)- ¹Ì¼þÏÂÔØʧ°Ü£»
+ downloadsuccess(3)- ¹Ì¼þÏÂÔسɹ¦£»
+ upgrading(4)- ¹Ì¼þÈí¼þÉý¼¶ÖУ»
+ upgradefailed(5)- ¹Ì¼þÈí¼þÉý¼¶Ê§°Ü£»
+ upgradesuccess(6)- ¹Ì¼þÈí¼þÉý¼¶³É¹¦£»
+ uploading(7)- ÎļþÉÏ´«ÖУ»
+ uploadfailed(8)- ÎļþÉÏ´«Ê§°Ü£»
+ uploadsuccess(9)- ÎļþÉÏ´«³É¹¦¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ * defval: 0
+ *
+ * Enum range: 5/16. Values: none(0), downloading(1), downloadfailed(2), downloadsuccess(3), upgrading(4), upgradefailed(5), upgradesuccess(6), uploading(7), uploadfailed(8), uploadsuccess(9)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+
+
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable.c
new file mode 100644
index 0000000000..96c42c56a0
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable.c
@@ -0,0 +1,220 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/** \page MFD helper for eocSoftwareUpgradeTable
+ *
+ * \section intro Introduction
+ * Introductory text.
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocSoftwareUpgradeTable.h"
+
+#include <net-snmp/agent/mib_modules.h>
+
+#include "eocSoftwareUpgradeTable_interface.h"
+
+oid eocSoftwareUpgradeTable_oid[] = { EOCSOFTWAREUPGRADETABLE_OID };
+int eocSoftwareUpgradeTable_oid_size = OID_LENGTH(eocSoftwareUpgradeTable_oid);
+
+ eocSoftwareUpgradeTable_registration eocSoftwareUpgradeTable_user_context;
+
+void initialize_table_eocSoftwareUpgradeTable(void);
+void shutdown_table_eocSoftwareUpgradeTable(void);
+
+
+/**
+ * Initializes the eocSoftwareUpgradeTable module
+ */
+void
+init_eocSoftwareUpgradeTable(void)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:init_eocSoftwareUpgradeTable","called\n"));
+
+ /*
+ * TODO:300:o: Perform eocSoftwareUpgradeTable one-time module initialization.
+ */
+
+ /*
+ * here we initialize all the tables we're planning on supporting
+ */
+ if (should_init("eocSoftwareUpgradeTable"))
+ initialize_table_eocSoftwareUpgradeTable();
+
+} /* init_eocSoftwareUpgradeTable */
+
+/**
+ * Shut-down the eocSoftwareUpgradeTable module (agent is exiting)
+ */
+void
+shutdown_eocSoftwareUpgradeTable(void)
+{
+ if (should_init("eocSoftwareUpgradeTable"))
+ shutdown_table_eocSoftwareUpgradeTable();
+
+}
+
+/**
+ * Initialize the table eocSoftwareUpgradeTable
+ * (Define its contents and how it's structured)
+ */
+void
+initialize_table_eocSoftwareUpgradeTable(void)
+{
+ eocSoftwareUpgradeTable_registration * user_context;
+ u_long flags;
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:initialize_table_eocSoftwareUpgradeTable","called\n"));
+
+ /*
+ * TODO:301:o: Perform eocSoftwareUpgradeTable one-time table initialization.
+ */
+
+ /*
+ * TODO:302:o: |->Initialize eocSoftwareUpgradeTable user context
+ * if you'd like to pass in a pointer to some data for this
+ * table, allocate or set it up here.
+ */
+ /*
+ * a netsnmp_data_list is a simple way to store void pointers. A simple
+ * string token is used to add, find or remove pointers.
+ */
+ user_context = netsnmp_create_data_list("eocSoftwareUpgradeTable", NULL, NULL);
+
+ /*
+ * No support for any flags yet, but in the future you would
+ * set any flags here.
+ */
+ flags = 0;
+
+ /*
+ * call interface initialization code
+ */
+ _eocSoftwareUpgradeTable_initialize_interface(user_context, flags);
+} /* initialize_table_eocSoftwareUpgradeTable */
+
+/**
+ * Shutdown the table eocSoftwareUpgradeTable
+ */
+void
+shutdown_table_eocSoftwareUpgradeTable(void)
+{
+ /*
+ * call interface shutdown code
+ */
+ _eocSoftwareUpgradeTable_shutdown_interface(&eocSoftwareUpgradeTable_user_context);
+}
+
+/**
+ * extra context initialization (eg default values)
+ *
+ * @param rowreq_ctx : row request context
+ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+ *
+ * @retval MFD_SUCCESS : no errors
+ * @retval MFD_ERROR : error (context allocate will fail)
+ */
+int
+eocSoftwareUpgradeTable_rowreq_ctx_init(eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_rowreq_ctx_init","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:210:o: |-> Perform extra eocSoftwareUpgradeTable rowreq initialization. (eg DEFVALS)
+ */
+ rowreq_ctx->data.eocSoftwareUpgradeResult = 0;
+
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeTable_rowreq_ctx_init */
+
+/**
+ * extra context cleanup
+ *
+ */
+void eocSoftwareUpgradeTable_rowreq_ctx_cleanup(eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_rowreq_ctx_cleanup","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:211:o: |-> Perform extra eocSoftwareUpgradeTable rowreq cleanup.
+ */
+} /* eocSoftwareUpgradeTable_rowreq_ctx_cleanup */
+
+/**
+ * pre-request callback
+ *
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error
+ */
+int
+eocSoftwareUpgradeTable_pre_request(eocSoftwareUpgradeTable_registration * user_context)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_pre_request","called\n"));
+
+ /*
+ * TODO:510:o: Perform eocSoftwareUpgradeTable pre-request actions.
+ */
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeTable_pre_request */
+
+/**
+ * post-request callback
+ *
+ * Note:
+ * New rows have been inserted into the container, and
+ * deleted rows have been removed from the container and
+ * released.
+ *
+ * @param user_context
+ * @param rc : MFD_SUCCESS if all requests succeeded
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error (ignored)
+ */
+int
+eocSoftwareUpgradeTable_post_request(eocSoftwareUpgradeTable_registration * user_context, int rc)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_post_request","called\n"));
+
+ /*
+ * TODO:511:o: Perform eocSoftwareUpgradeTable post-request actions.
+ */
+
+ /*
+ * check to set if any rows were changed.
+ */
+ if (eocSoftwareUpgradeTable_dirty_get()) {
+ /*
+ * check if request was successful. If so, this would be
+ * a good place to save data to its persistent store.
+ */
+ if (MFD_SUCCESS == rc) {
+ /*
+ * save changed rows, if you haven't already
+ */
+ }
+
+ eocSoftwareUpgradeTable_dirty_set(0); /* clear table dirty flag */
+ }
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeTable_post_request */
+
+
+/** @{ */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable.h
new file mode 100644
index 0000000000..782f8f2cc7
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable.h
@@ -0,0 +1,224 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCSOFTWAREUPGRADETABLE_H
+#define EOCSOFTWAREUPGRADETABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** @addtogroup misc misc: Miscellaneous routines
+ *
+ * @{
+ */
+#include <libgen.h>
+#include <net-snmp/library/asn1.h>
+
+
+ /* *INDENT-ON* */
+
+/* OID and column number definitions for eocSoftwareUpgradeTable */
+#include "eocSoftwareUpgradeTable_oids.h"
+
+/* include common header */
+#include "EoCCommon.h"
+
+/* enum definions */
+#include "eocSoftwareUpgradeTable_enums.h"
+
+/* *********************************************************************
+ * function declarations
+ */
+void init_eocSoftwareUpgradeTable(void);
+void shutdown_eocSoftwareUpgradeTable(void);
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocSoftwareUpgradeTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeTable is subid 5 of eocSoftwareUpgradeGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5, length: 11
+*/
+/* *********************************************************************
+ * 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 eocSoftwareUpgradeTable registration context.
+ */
+typedef netsnmp_data_list eocSoftwareUpgradeTable_registration;
+
+/**********************************************************************/
+/*
+ * TODO:110:r: |-> Review eocSoftwareUpgradeTable data context structure.
+ * This structure is used to represent the data for eocSoftwareUpgradeTable.
+ */
+/*
+ * This structure contains storage for all the columns defined in the
+ * eocSoftwareUpgradeTable.
+ */
+typedef struct eocSoftwareUpgradeTable_data_s {
+
+ /*
+ * eocSoftwareUpgradeMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+ */
+ char eocSoftwareUpgradeMACAddress[6];
+size_t eocSoftwareUpgradeMACAddress_len; /* # of char elements, not bytes */
+
+ /*
+ * eocSoftwareUpgradeDevType(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocSoftwareUpgradeDevType;
+
+ /*
+ * eocSoftwareUpgradeFileName(5)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h
+ */
+ char eocSoftwareUpgradeFileName[255];
+size_t eocSoftwareUpgradeFileName_len; /* # of char elements, not bytes */
+
+ /*
+ * eocSoftwareUpgradeProceed(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ u_long eocSoftwareUpgradeProceed;
+
+ /*
+ * eocSoftwareUpgradeResult(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/D/h
+ */
+ u_long eocSoftwareUpgradeResult;
+
+} eocSoftwareUpgradeTable_data;
+
+
+/* *********************************************************************
+ * TODO:115:o: |-> Review eocSoftwareUpgradeTable undo context.
+ * We're just going to use the same data structure for our
+ * undo_context. If you want to do something more efficent,
+ * define your typedef here.
+ */
+typedef eocSoftwareUpgradeTable_data eocSoftwareUpgradeTable_undo_data;
+
+/*
+ * TODO:120:r: |-> Review eocSoftwareUpgradeTable mib index.
+ * This structure is used to represent the index for eocSoftwareUpgradeTable.
+ */
+typedef struct eocSoftwareUpgradeTable_mib_index_s {
+
+ /*
+ * eocSoftwareUpgradeCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ long eocSoftwareUpgradeCBATCardIndex;
+
+ /*
+ * eocSoftwareUpgradeCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ long eocSoftwareUpgradeCNUIndex;
+
+
+} eocSoftwareUpgradeTable_mib_index;
+
+ /*
+ * TODO:121:r: | |-> Review eocSoftwareUpgradeTable max index length.
+ * If you KNOW that your indexes will never exceed a certain
+ * length, update this macro to that length.
+*/
+#define MAX_eocSoftwareUpgradeTable_IDX_LEN 2
+
+
+/* *********************************************************************
+ * TODO:130:o: |-> Review eocSoftwareUpgradeTable Row request (rowreq) context.
+ * When your functions are called, you will be passed a
+ * eocSoftwareUpgradeTable_rowreq_ctx pointer.
+ */
+typedef struct eocSoftwareUpgradeTable_rowreq_ctx_s {
+
+ /** this must be first for container compare to work */
+ netsnmp_index oid_idx;
+ oid oid_tmp[MAX_eocSoftwareUpgradeTable_IDX_LEN];
+
+ eocSoftwareUpgradeTable_mib_index tbl_idx;
+
+ eocSoftwareUpgradeTable_data data;
+ eocSoftwareUpgradeTable_undo_data * undo;
+ unsigned int column_set_flags; /* flags for set columns */
+
+
+ /*
+ * 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 eocSoftwareUpgradeTable rowreq context.
+ */
+
+ /*
+ * storage for future expansion
+ */
+ netsnmp_data_list *eocSoftwareUpgradeTable_data_list;
+
+} eocSoftwareUpgradeTable_rowreq_ctx;
+
+typedef struct eocSoftwareUpgradeTable_ref_rowreq_ctx_s {
+ eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx;
+} eocSoftwareUpgradeTable_ref_rowreq_ctx;
+
+/* *********************************************************************
+ * function prototypes
+ */
+ int eocSoftwareUpgradeTable_pre_request(eocSoftwareUpgradeTable_registration * user_context);
+ int eocSoftwareUpgradeTable_post_request(eocSoftwareUpgradeTable_registration * user_context,
+ int rc);
+
+ int eocSoftwareUpgradeTable_rowreq_ctx_init(eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx,
+ void *user_init_ctx);
+ void eocSoftwareUpgradeTable_rowreq_ctx_cleanup(eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx);
+
+ int eocSoftwareUpgradeTable_commit(eocSoftwareUpgradeTable_rowreq_ctx * rowreq_ctx);
+
+ eocSoftwareUpgradeTable_rowreq_ctx *
+ eocSoftwareUpgradeTable_row_find_by_mib_index(eocSoftwareUpgradeTable_mib_index *mib_idx);
+
+extern oid eocSoftwareUpgradeTable_oid[];
+extern int eocSoftwareUpgradeTable_oid_size;
+
+extern u_long eocSoftwareUpgradeResult[LIBSPID_WHITE_LIST_MAX_STA_NUM+1];
+extern int table_released;
+
+#include "eocSoftwareUpgradeTable_interface.h"
+#include "eocSoftwareUpgradeTable_data_access.h"
+#include "eocSoftwareUpgradeTable_data_get.h"
+#include "eocSoftwareUpgradeTable_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 /* EOCSOFTWAREUPGRADETABLE_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_access.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_access.c
new file mode 100644
index 0000000000..29939e4132
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_access.c
@@ -0,0 +1,728 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocSoftwareUpgradeTable.h"
+
+
+#include "eocSoftwareUpgradeTable_data_access.h"
+
+#include <ctype.h> /* for tolower() */
+
+/* array of upgrade results for each station */
+u_long eocSoftwareUpgradeResult[LIBSPID_WHITE_LIST_MAX_STA_NUM + 1];
+/* indication of table release */
+int table_released;
+
+/** @ingroup interface
+ * @addtogroup data_access data_access: Routines to access data
+ *
+ * These routines are used to locate the data used to satisfy
+ * requests.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocSoftwareUpgradeTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeTable is subid 5 of eocSoftwareUpgradeGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5, length: 11
+*/
+
+/**
+ * initialization for eocSoftwareUpgradeTable data access
+ *
+ * This function is called during startup to allow you to
+ * allocate any resources you need for the data table.
+ *
+ * @param eocSoftwareUpgradeTable_reg
+ * Pointer to eocSoftwareUpgradeTable_registration
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : unrecoverable error.
+ */
+int
+eocSoftwareUpgradeTable_init_data(eocSoftwareUpgradeTable_registration * eocSoftwareUpgradeTable_reg)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_init_data","called\n"));
+
+ /*
+ * TODO:303:o: Initialize eocSoftwareUpgradeTable data.
+ */
+
+ /* initialize array of upgrade results */
+ memset (eocSoftwareUpgradeResult, 0, LIBSPID_WHITE_LIST_MAX_STA_NUM + 1);
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeTable_init_data */
+
+/**
+ * container overview
+ *
+ */
+
+/**
+ * container initialization
+ *
+ * @param container_ptr_ptr A pointer to a container pointer. If you
+ * create a custom container, use this parameter to return it
+ * to the MFD helper. If set to NULL, the MFD helper will
+ * allocate a container for you.
+ * @param cache A pointer to a cache structure. You can set the timeout
+ * and other cache flags using this pointer.
+ *
+ * This function is called at startup to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases. If no custom
+ * container is allocated, the MFD code will create one for your.
+ *
+ * This is also the place to set up cache behavior. The default, to
+ * simply set the cache timeout, will work well with the default
+ * container. If you are using a custom container, you may want to
+ * look at the cache helper documentation to see if there are any
+ * flags you want to set.
+ *
+ * @remark
+ * This would also be a good place to do any initialization needed
+ * for you data source. For example, opening a connection to another
+ * process that will supply the data, opening a database, etc.
+ */
+void
+eocSoftwareUpgradeTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_container_init","called\n"));
+
+ if (NULL == container_ptr_ptr) {
+ snmp_log(LOG_ERR,"bad container param to eocSoftwareUpgradeTable_container_init\n");
+ return;
+ }
+
+ /*
+ * For advanced users, you can use a custom container. If you
+ * do not create one, one will be created for you.
+ */
+ *container_ptr_ptr = NULL;
+
+ if (NULL == cache) {
+ snmp_log(LOG_ERR,"bad cache param to eocSoftwareUpgradeTable_container_init\n");
+ return;
+ }
+
+ /*
+ * TODO:345:A: Set up eocSoftwareUpgradeTable cache properties.
+ *
+ * Also for advanced users, you can set parameters for the
+ * cache. Do not change the magic pointer, as it is used
+ * by the MFD helper. To completely disable caching, set
+ * cache->enabled to 0.
+ */
+ cache->timeout = EOCSOFTWAREUPGRADETABLE_CACHE_TIMEOUT; /* seconds */
+
+ /* initialize table release indication */
+ table_released = 0;
+} /* eocSoftwareUpgradeTable_container_init */
+
+/**
+ * container shutdown
+ *
+ * @param container_ptr A pointer to the container.
+ *
+ * This function is called at shutdown to allow you to customize certain
+ * aspects of the access method. For the most part, it is for advanced
+ * users. The default code should suffice for most cases.
+ *
+ * This function is called before eocSoftwareUpgradeTable_container_free().
+ *
+ * @remark
+ * This would also be a good place to do any cleanup needed
+ * for you data source. For example, closing a connection to another
+ * process that supplied the data, closing a database, etc.
+ */
+void
+eocSoftwareUpgradeTable_container_shutdown(netsnmp_container *container_ptr)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_container_shutdown","called\n"));
+
+ if (NULL == container_ptr) {
+ snmp_log(LOG_ERR,"bad params to eocSoftwareUpgradeTable_container_shutdown\n");
+ return;
+ }
+
+} /* eocSoftwareUpgradeTable_container_shutdown */
+
+/**
+ * load initial data
+ *
+ * TODO:350:M: Implement eocSoftwareUpgradeTable data load
+ * This function will also be called by the cache helper to load
+ * the container again (after the container free function has been
+ * called to free the previous contents).
+ *
+ * @param container container to which items should be inserted
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+ * @retval MFD_ERROR : other error.
+ *
+ * This function is called to load the index(es) (and data, optionally)
+ * for the every row in the data set.
+ *
+ * @remark
+ * While loading the data, the only important thing is the indexes.
+ * If access to your data is cheap/fast (e.g. you have a pointer to a
+ * structure in memory), it would make sense to update the data here.
+ * If, however, the accessing the data invovles more work (e.g. parsing
+ * some other existing data, or peforming calculations to derive the data),
+ * then you can limit yourself to setting the indexes and saving any
+ * information you will need later. Then use the saved information in
+ * eocSoftwareUpgradeTable_row_prep() for populating data.
+ *
+ * @note
+ * If you need consistency between rows (like you want statistics
+ * for each row to be from the same time frame), you should set all
+ * data here.
+ *
+ */
+int
+eocSoftwareUpgradeTable_container_load(netsnmp_container *container)
+{
+ eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx;
+ size_t count = 0;
+
+ /*
+ * temporary storage for index values
+ */
+ /*
+ * eocSoftwareUpgradeCBATCardIndex(1)/INTEGER/
+ *ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ long eocSoftwareUpgradeCBATCardIndex = 0;
+ /*
+ * eocSoftwareUpgradeCNUIndex(2)/INTEGER/ASN_INTEGER/
+ *long(long)//l/A/w/e/R/d/h
+ */
+ long eocSoftwareUpgradeCNUIndex;
+
+ char eocSoftwareUpgradeMACAddress[6];
+ size_t eocSoftwareUpgradeMACAddress_len = 6;
+ u_long eocSoftwareUpgradeDevType;
+ char eocSoftwareUpgradeFileName[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ size_t eocSoftwareUpgradeFileName_len = 0;
+
+ u_long eocSoftwareUpgradeProceed = 0;
+
+
+
+ /* declarations for calls to libspid */
+ char filename_buffer[LIBSPID_LINE_MAX_LEN];
+ char slave_default[LIBSPID_LINE_MAX_LEN];
+ const char delimiters[2] = LIBSPID_UPDATE_INFO_DELIMITER "\0";
+ unsigned int elt_number = LIBSPID_ELT_MAX_NB;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ char *elt_buffer[LIBSPID_ELT_MAX_NB];
+
+ /* white list entries read from config file */
+ libspid_eoc_wl_entry_t wl_config_entries[LIBSPID_WHITE_LIST_MAX_STA_NUM];
+
+ char mac_str[LIBSPID_MAC_STR_LEN];
+
+ int mac_address_count;
+ int i, index;
+ int tmp;
+ int update_action;
+ int update_last_action;
+ int update_result;
+ int tei;
+
+ DEBUGMSGTL (("verbose:eocSoftwareUpgradeTable:",
+ "eocSoftwareUpgradeTable_container_load", "called\n"));
+
+ /* reset indication of table release */
+ table_released = 0;
+ /*
+ * TODO:351:M: |-> Load/update data in the eocSoftwareUpgradeTable
+ * container.
+ * loop over your eocSoftwareUpgradeTable data, allocate a rowreq context,
+ * set the index(es) [and data, optionally] and insert into
+ * the container.
+ */
+ memset (wl_config_entries, 0x0, sizeof (wl_config_entries));
+
+
+ /* check errors in contents of white list prior to reading */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_check ())
+ {
+ snmp_log (LOG_ERR,
+ "errors detected in whitelist configuration file\n");
+ return MFD_ERROR;
+ }
+
+ /* get current contents of white list config file */
+ if (LIBSPID_SUCCESS != libspid_eoc_wl_get_list (wl_config_entries,
+ &mac_address_count))
+ {
+ snmp_log (LOG_ERR, "White list config file not read correctly\n");
+ return MFD_ERROR;
+ }
+
+ /* read default filename for slaves
+ (used in case no custom filename is set) */
+ if (LIBSPID_SUCCESS !=
+ libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SLAVE_FILENAME,
+ slave_default, LIBSPID_LINE_MAX_LEN))
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error in "
+ "reading default slave filename\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+
+ for (i = 0; i <= mac_address_count; i++)
+ {
+ if (0 == i)
+ {
+ /* add master as first row of the table */
+
+ /* read NVRAM contents */
+ /* obtain master MAC address */
+ if (LIBSPID_SUCCESS !=
+ libspid_network_get_mac (LIBSPID_EOC_BR_IFACE, mac_str))
+ {
+ snmp_log (LOG_ERR, "libspid_network_get_mac error\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ else
+ {
+ /* convert master MAC address from string to char array */
+ if (LIBSPID_SUCCESS != libspid_mac_str_to_bin (
+ mac_str,
+ eocSoftwareUpgradeMACAddress))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_str_to_bin error\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ }
+
+ /* set index in table to 0 for master */
+ eocSoftwareUpgradeCNUIndex = 0;
+
+
+ /* set device type to CLT for master */
+ eocSoftwareUpgradeDevType =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_CBAT;
+
+ /* read filename for master */
+ if (LIBSPID_SUCCESS !=
+ libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_MASTER_FILENAME,
+ filename_buffer,
+ LIBSPID_LINE_MAX_LEN))
+ {
+ snmp_log (LOG_ERR, "libspid_config_read_item error in",
+ " reading master filename\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+
+ /* set Proceed value if master upgrade is in progress */
+ if (eocSoftwareUpgradeResult[eocSoftwareUpgradeCNUIndex] ==
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADING)
+ {
+ eocSoftwareUpgradeProceed =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEPROCEED_UPGRADE;
+ }
+
+ }
+ else
+ {
+ /* consider only slaves that are allowed */
+ if (!strcmp (wl_config_entries[i - 1].auth, "1"))
+ {
+ strcpy (mac_str, wl_config_entries[i - 1].mac_addr);
+ /* make sure that mac address will be in lower case */
+ for (index = 0; index < LIBSPID_MAC_STR_LEN; index++)
+ {
+ mac_str[index] = tolower (mac_str[index]);
+ }
+ /* convert slave MAC address from string to char array */
+ if (LIBSPID_SUCCESS != libspid_mac_str_to_bin (
+ mac_str,
+ eocSoftwareUpgradeMACAddress))
+ {
+ snmp_log (LOG_ERR, "libspid_mac_str_to_bin error\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+
+
+ /* set slave index from TEI in white list */
+ tmp = sscanf (wl_config_entries[i - 1].tei, "%d", &tei);
+ if (1 != tmp)
+ {
+ snmp_log (LOG_ERR, "error setting software upgrade ",
+ "table index\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ eocSoftwareUpgradeCNUIndex = tei - 2;
+
+ /* check if slave MAC address exists in upgrade.info */
+ /*
+ * if MAC exists, read filename, action and result from
+ * upgrade.info,
+ * else copy default filename from system.conf and set action and
+ * result to none
+ */
+ /* initialize maximal number of elements for current slave */
+ elt_number = LIBSPID_ELT_MAX_NB;
+ if (LIBSPID_SUCCESS ==
+ libspid_config_read_line (LIBSPID_UPDATE_INFO_PATH,
+ delimiters, mac_str,
+ &elt_number, elt_buffer, buffer,
+ LIBSPID_LINE_MAX_LEN))
+ {
+
+ strcpy (filename_buffer, elt_buffer[0]);
+
+ /* read values of action and result fields */
+ if (1 != sscanf (elt_buffer[1], "%d", &update_action))
+ {
+ update_action = LIBSPID_UPDATE_ACTION_NONE;
+ }
+ if (1 != sscanf (elt_buffer[2], "%d", &update_result))
+ {
+ update_result = LIBSPID_UPDATE_NONE;
+ }
+ if (1 != sscanf (elt_buffer[3], "%d",
+ &update_last_action))
+ {
+ update_last_action = LIBSPID_UPDATE_ACTION_NONE;
+ }
+
+ if (LIBSPID_UPDATE_ACTION_UPLOAD == update_action)
+ {
+ eocSoftwareUpgradeProceed =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEPROCEED_UPLOAD;
+ }
+ else if (LIBSPID_UPDATE_ACTION_UPDATE == update_action
+ || LIBSPID_UPDATE_ACTION_TFTP_UPDATE ==
+ update_action)
+ {
+ /* regular update and TFTP update are both
+ * considered as update in agent */
+ eocSoftwareUpgradeProceed =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEPROCEED_UPGRADE;
+ }
+ else
+ {
+ eocSoftwareUpgradeProceed = 0;
+ }
+
+ if (update_last_action == LIBSPID_UPDATE_ACTION_UPLOAD)
+ {
+ switch (update_result)
+ {
+ case LIBSPID_UPDATE_RUNNING:
+ eocSoftwareUpgradeResult
+ [eocSoftwareUpgradeCNUIndex] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADING;
+ break;
+ case LIBSPID_UPDATE_SUCCESS:
+ eocSoftwareUpgradeResult
+ [eocSoftwareUpgradeCNUIndex] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADSUCCESS;
+ break;
+ case LIBSPID_UPDATE_FAILED:
+ eocSoftwareUpgradeResult
+ [eocSoftwareUpgradeCNUIndex] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADFAILED;
+ break;
+ default:
+ eocSoftwareUpgradeResult
+ [eocSoftwareUpgradeCNUIndex] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_NONE;
+ break;
+ }
+ }
+ else if ((update_last_action ==
+ LIBSPID_UPDATE_ACTION_UPDATE) ||
+ (update_last_action ==
+ LIBSPID_UPDATE_ACTION_TFTP_UPDATE))
+ {
+ switch (update_result)
+ {
+ case LIBSPID_UPDATE_RUNNING:
+ eocSoftwareUpgradeResult
+ [eocSoftwareUpgradeCNUIndex] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADING;
+ break;
+ case LIBSPID_UPDATE_SUCCESS:
+ eocSoftwareUpgradeResult
+ [eocSoftwareUpgradeCNUIndex] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADESUCCESS;
+ break;
+ case LIBSPID_UPDATE_FAILED:
+ eocSoftwareUpgradeResult
+ [eocSoftwareUpgradeCNUIndex] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADEFAILED;
+ break;
+ default:
+ eocSoftwareUpgradeResult
+ [eocSoftwareUpgradeCNUIndex] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_NONE;
+ break;
+ }
+
+ }
+ else
+ {
+ eocSoftwareUpgradeResult[eocSoftwareUpgradeCNUIndex] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_NONE;
+ }
+ }
+ else
+ {
+ /* set buffer for filename to default slave filename */
+ strcpy (filename_buffer, slave_default);
+ eocSoftwareUpgradeProceed = 0;
+ eocSoftwareUpgradeResult[eocSoftwareUpgradeCNUIndex] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_NONE;
+ }
+
+ /* set device type to CNU for slaves */
+ eocSoftwareUpgradeDevType =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_CNU;
+ }
+ else
+ continue;
+ }
+
+ /*
+ * TODO:352:M: | |-> set indexes in new eocSoftwareUpgradeTable
+ * rowreq context.
+ * data context will be set from the param (unless NULL,
+ * in which case a new data context will be allocated)
+ */
+ rowreq_ctx = eocSoftwareUpgradeTable_allocate_rowreq_ctx (NULL);
+ if (NULL == rowreq_ctx)
+ {
+ snmp_log (LOG_ERR, "memory allocation failed\n");
+ return MFD_RESOURCE_UNAVAILABLE;
+ }
+ if (MFD_SUCCESS !=
+ eocSoftwareUpgradeTable_indexes_set (
+ rowreq_ctx,
+ eocSoftwareUpgradeCBATCardIndex,
+ eocSoftwareUpgradeCNUIndex))
+ {
+ snmp_log (LOG_ERR, "error setting index while loading "
+ "eocSoftwareUpgradeTable data.\n");
+ eocSoftwareUpgradeTable_release_rowreq_ctx (rowreq_ctx);
+ continue;
+ }
+
+ /*
+ * TODO:352:r: | |-> populate eocSoftwareUpgradeTable data context.
+ * Populate data context here. (optionally, delay until row prep)
+ */
+ /*
+ * TRANSIENT or semi-TRANSIENT data:
+ * copy data or save any info needed to do it in row_prep.
+ */
+ /*
+ * setup/save data for eocSoftwareUpgradeMACAddress
+ * eocSoftwareUpgradeMACAddress(3)/MacAddress/ASN_OCTET_STR/
+ * char(char)//L/A/W/e/R/d/H
+ */
+ rowreq_ctx->data.eocSoftwareUpgradeMACAddress_len = 6;
+
+ /*
+ * make sure there is enough space for eocSoftwareUpgradeMACAddress
+ * data
+ */
+ if ((NULL == rowreq_ctx->data.eocSoftwareUpgradeMACAddress) ||
+ (rowreq_ctx->data.eocSoftwareUpgradeMACAddress_len <
+ (eocSoftwareUpgradeMACAddress_len *
+ sizeof (eocSoftwareUpgradeMACAddress[0]))))
+ {
+ snmp_log (LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocSoftwareUpgradeMACAddress_len =
+ eocSoftwareUpgradeMACAddress_len *
+ sizeof (eocSoftwareUpgradeMACAddress[0]);
+ memcpy (rowreq_ctx->data.eocSoftwareUpgradeMACAddress,
+ eocSoftwareUpgradeMACAddress,
+ eocSoftwareUpgradeMACAddress_len *
+ sizeof (eocSoftwareUpgradeMACAddress[0]));
+
+ /*
+ * setup/save data for eocSoftwareUpgradeDevType
+ * eocSoftwareUpgradeDevType(4)/INTEGER/
+ *ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocSoftwareUpgradeDevType mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * enums usually need mapping.
+ */
+ if (MFD_SUCCESS !=
+ eocSoftwareUpgradeDevType_map (&rowreq_ctx->data.
+ eocSoftwareUpgradeDevType,
+ eocSoftwareUpgradeDevType))
+ {
+ return MFD_ERROR;
+ }
+
+ /*
+ * setup/save data for eocSoftwareUpgradeFileName
+ * eocSoftwareUpgradeFileName(5)/OCTETSTR/ASN_OCTET_STR/
+ *char(char)//L/A/W/e/R/d/h
+ */
+
+ strncpy (eocSoftwareUpgradeFileName, filename_buffer,
+ DEFAULT_SNMP_STRING_MAX_LENGTH - 1);
+ eocSoftwareUpgradeFileName[DEFAULT_SNMP_STRING_MAX_LENGTH - 1] = '\0';
+
+ eocSoftwareUpgradeFileName_len =
+ strlen (eocSoftwareUpgradeFileName) + 1;
+
+ rowreq_ctx->data.eocSoftwareUpgradeFileName_len =
+ eocSoftwareUpgradeFileName_len;
+
+ /*
+ * make sure there is enough space for eocSoftwareUpgradeFileName data
+ */
+ if ((NULL == rowreq_ctx->data.eocSoftwareUpgradeFileName) ||
+ (rowreq_ctx->data.eocSoftwareUpgradeFileName_len <
+ (eocSoftwareUpgradeFileName_len *
+ sizeof (eocSoftwareUpgradeFileName[0]))))
+ {
+ snmp_log (LOG_ERR, "not enough space for value\n");
+ return MFD_ERROR;
+ }
+ rowreq_ctx->data.eocSoftwareUpgradeFileName_len =
+ eocSoftwareUpgradeFileName_len *
+ sizeof (eocSoftwareUpgradeFileName[0]);
+ memcpy (rowreq_ctx->data.eocSoftwareUpgradeFileName,
+ eocSoftwareUpgradeFileName,
+ eocSoftwareUpgradeFileName_len *
+ sizeof (eocSoftwareUpgradeFileName[0]));
+
+ /*
+ * setup/save data for eocSoftwareUpgradeProceed
+ * eocSoftwareUpgradeProceed(6)/INTEGER/ASN_INTEGER/
+ *long(u_long)//l/A/W/E/r/d/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocSoftwareUpgradeProceed mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * enums usually need mapping.
+ */
+ rowreq_ctx->data.eocSoftwareUpgradeProceed =
+ eocSoftwareUpgradeProceed;
+
+ /*
+ * setup/save data for eocSoftwareUpgradeResult
+ * eocSoftwareUpgradeResult(7)/INTEGER/ASN_INTEGER/
+ *long(u_long)//l/A/w/E/r/D/h
+ */
+ /*
+ * TODO:246:r: |-> Define eocSoftwareUpgradeResult mapping.
+ * Map values between raw/native values and MIB values
+ *
+ * enums usually need mapping.
+ */
+ if (MFD_SUCCESS !=
+ eocSoftwareUpgradeResult_map (&rowreq_ctx->data.
+ eocSoftwareUpgradeResult,
+ eocSoftwareUpgradeResult
+ [eocSoftwareUpgradeCNUIndex]))
+ {
+ return MFD_ERROR;
+ }
+
+
+ /*
+ * insert into table container
+ */
+ CONTAINER_INSERT(container, rowreq_ctx);
+ ++count;
+ }
+
+ DEBUGMSGT(("verbose:eocSoftwareUpgradeTable:",
+ "eocSoftwareUpgradeTable_container_load",
+ "inserted %d records\n", count));
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeTable_container_load */
+
+/**
+ * container clean up
+ *
+ * @param container container with all current items
+ *
+ * This optional callback is called prior to all
+ * item's being removed from the container. If you
+ * need to do any processing before that, do it here.
+ *
+ * @note
+ * The MFD helper will take care of releasing all the row contexts.
+ *
+ */
+void
+eocSoftwareUpgradeTable_container_free(netsnmp_container *container)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_container_free","called\n"));
+
+ /*
+ * TODO:380:M: Free eocSoftwareUpgradeTable container data.
+ */
+} /* eocSoftwareUpgradeTable_container_free */
+
+/**
+ * prepare row for processing.
+ *
+ * When the agent has located the row for a request, this function is
+ * called to prepare the row for processing. If you fully populated
+ * the data context during the index setup phase, you may not need to
+ * do anything.
+ *
+ * @param rowreq_ctx pointer to a context.
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ */
+int
+eocSoftwareUpgradeTable_row_prep( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_row_prep","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:390:o: Prepare row for request.
+ * If populating row data was delayed, this is the place to
+ * fill in the row for this request.
+ */
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeTable_row_prep */
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_access.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_access.h
new file mode 100644
index 0000000000..4611cdaa87
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_access.h
@@ -0,0 +1,63 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 14170 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCSOFTWAREUPGRADETABLE_DATA_ACCESS_H
+#define EOCSOFTWAREUPGRADETABLE_DATA_ACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* *********************************************************************
+ * function declarations
+ */
+
+/* *********************************************************************
+ * Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocSoftwareUpgradeTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeTable is subid 5 of eocSoftwareUpgradeGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5, length: 11
+*/
+
+
+ int eocSoftwareUpgradeTable_init_data(eocSoftwareUpgradeTable_registration * eocSoftwareUpgradeTable_reg);
+
+
+ /*
+ * TODO:180:o: Review eocSoftwareUpgradeTable cache timeout.
+ * The number of seconds before the cache times out
+ */
+#define EOCSOFTWAREUPGRADETABLE_CACHE_TIMEOUT 60
+
+void eocSoftwareUpgradeTable_container_init(netsnmp_container **container_ptr_ptr,
+ netsnmp_cache *cache);
+void eocSoftwareUpgradeTable_container_shutdown(netsnmp_container *container_ptr);
+
+int eocSoftwareUpgradeTable_container_load(netsnmp_container *container);
+void eocSoftwareUpgradeTable_container_free(netsnmp_container *container);
+
+int eocSoftwareUpgradeTable_cache_load(netsnmp_container *container);
+void eocSoftwareUpgradeTable_cache_free(netsnmp_container *container);
+
+ int eocSoftwareUpgradeTable_row_prep( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCSOFTWAREUPGRADETABLE_DATA_ACCESS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_get.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_get.c
new file mode 100644
index 0000000000..adf616cc77
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_get.c
@@ -0,0 +1,654 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocSoftwareUpgradeTable.h"
+
+
+/** @defgroup data_get data_get: Routines to get data
+ *
+ * TODO:230:M: Implement eocSoftwareUpgradeTable get routines.
+ * TODO:240:M: Implement eocSoftwareUpgradeTable mapping routines (if any).
+ *
+ * These routine are used to get the value for individual objects. The
+ * row context is passed, along with a pointer to the memory where the
+ * value should be copied.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocSoftwareUpgradeTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeTable is subid 5 of eocSoftwareUpgradeGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5, length: 11
+*/
+
+/* ---------------------------------------------------------------------
+ * TODO:200:r: Implement eocSoftwareUpgradeTable data context functions.
+ */
+
+
+/**
+ * set mib index(es)
+ *
+ * @param tbl_idx mib index structure
+ * @param eocSoftwareUpgradeCBATCardIndex_val
+ * @param eocSoftwareUpgradeCNUIndex_val
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This convenience function is useful for setting all the MIB index
+ * components with a single function call. It is assume that the C values
+ * have already been mapped from their native/rawformat to the MIB format.
+ */
+int
+eocSoftwareUpgradeTable_indexes_set_tbl_idx(eocSoftwareUpgradeTable_mib_index *tbl_idx, long eocSoftwareUpgradeCBATCardIndex_val, long eocSoftwareUpgradeCNUIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_indexes_set_tbl_idx","called\n"));
+
+ /* eocSoftwareUpgradeCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ tbl_idx->eocSoftwareUpgradeCBATCardIndex = eocSoftwareUpgradeCBATCardIndex_val;
+
+ /* eocSoftwareUpgradeCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ tbl_idx->eocSoftwareUpgradeCNUIndex = eocSoftwareUpgradeCNUIndex_val;
+
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeTable_indexes_set_tbl_idx */
+
+/**
+ * @internal
+ * set row context indexes
+ *
+ * @param reqreq_ctx the row context that needs updated indexes
+ *
+ * @retval MFD_SUCCESS : success.
+ * @retval MFD_ERROR : other error.
+ *
+ * @remark
+ * This function sets the mib indexs, then updates the oid indexs
+ * from the mib index.
+ */
+int
+eocSoftwareUpgradeTable_indexes_set(eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, long eocSoftwareUpgradeCBATCardIndex_val, long eocSoftwareUpgradeCNUIndex_val)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_indexes_set","called\n"));
+
+ if(MFD_SUCCESS != eocSoftwareUpgradeTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx
+ , eocSoftwareUpgradeCBATCardIndex_val
+ , eocSoftwareUpgradeCNUIndex_val
+ ))
+ return MFD_ERROR;
+
+ /*
+ * convert mib index to oid index
+ */
+ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+ if(0 != eocSoftwareUpgradeTable_index_to_oid(&rowreq_ctx->oid_idx,
+ &rowreq_ctx->tbl_idx)) {
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeTable_indexes_set */
+
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeMACAddress
+ * eocSoftwareUpgradeMACAddress is subid 3 of eocSoftwareUpgradeEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.3
+ * Description:
+´ýÈí¼þÉý¼¶É豸µÄMACµØÖ·.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/**
+ * Extract the current value of the eocSoftwareUpgradeMACAddress data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocSoftwareUpgradeMACAddress_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocSoftwareUpgradeMACAddress_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocSoftwareUpgradeMACAddress.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocSoftwareUpgradeMACAddress_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocSoftwareUpgradeMACAddress_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocSoftwareUpgradeMACAddress_get( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, char **eocSoftwareUpgradeMACAddress_val_ptr_ptr, size_t *eocSoftwareUpgradeMACAddress_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocSoftwareUpgradeMACAddress_val_ptr_ptr) && (NULL != *eocSoftwareUpgradeMACAddress_val_ptr_ptr));
+ netsnmp_assert( NULL != eocSoftwareUpgradeMACAddress_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeMACAddress_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocSoftwareUpgradeMACAddress data.
+ * copy (* eocSoftwareUpgradeMACAddress_val_ptr_ptr ) data and (* eocSoftwareUpgradeMACAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocSoftwareUpgradeMACAddress data
+ */
+ if ((NULL == (* eocSoftwareUpgradeMACAddress_val_ptr_ptr )) ||
+ ((* eocSoftwareUpgradeMACAddress_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocSoftwareUpgradeMACAddress_len* sizeof(rowreq_ctx->data.eocSoftwareUpgradeMACAddress[0])))) {
+ /*
+ * allocate space for eocSoftwareUpgradeMACAddress data
+ */
+ (* eocSoftwareUpgradeMACAddress_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocSoftwareUpgradeMACAddress_len* sizeof(rowreq_ctx->data.eocSoftwareUpgradeMACAddress[0]));
+ if(NULL == (* eocSoftwareUpgradeMACAddress_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocSoftwareUpgradeMACAddress_val_ptr_len_ptr ) = rowreq_ctx->data.eocSoftwareUpgradeMACAddress_len* sizeof(rowreq_ctx->data.eocSoftwareUpgradeMACAddress[0]);
+ memcpy( (* eocSoftwareUpgradeMACAddress_val_ptr_ptr ), rowreq_ctx->data.eocSoftwareUpgradeMACAddress, rowreq_ctx->data.eocSoftwareUpgradeMACAddress_len* sizeof(rowreq_ctx->data.eocSoftwareUpgradeMACAddress[0]) );
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeMACAddress_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeDevType
+ * eocSoftwareUpgradeDevType is subid 4 of eocSoftwareUpgradeEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.4
+ * Description:
+´ýÈí¼þÉý¼¶É豸µÄÀàÐÍ£º
+ cbat(1)-CBAT£¬
+ cbat-card(2)- CBAT°å¿¨£¬
+ cnu(3)- CNU£¬
+ other(4)- ÆäËûÉ豸ÀýÈ磺Gateway»òSwitch£¬
+ reserved1(5)£¬
+ reserved2(6)£¬
+ reserved3(7)
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 5/8. Values: cbat(1), cbat_card(2), cnu(3), other(4), reserved1(5), reserved2(6), reserved3(7)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * map a value from its original native format to the MIB format.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : Any other error
+ *
+ * @note parameters follow the memset convention (dest, src).
+ *
+ * @note generation and use of this function can be turned off by re-running
+ * mib2c after adding the following line to the file
+ * defaults/node-eocSoftwareUpgradeDevType.m2d :
+ * @eval $m2c_node_skip_mapping = 1@
+ *
+ * @remark
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them here.
+ * Otherwise, just do a direct copy.
+ */
+int
+eocSoftwareUpgradeDevType_map(u_long *mib_eocSoftwareUpgradeDevType_val_ptr, u_long raw_eocSoftwareUpgradeDevType_val)
+{
+ netsnmp_assert(NULL != mib_eocSoftwareUpgradeDevType_val_ptr);
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeDevType_map","called\n"));
+
+ /*
+ * TODO:241:o: |-> Implement eocSoftwareUpgradeDevType enum mapping.
+ * uses INTERNAL_* macros defined in the header files
+ */
+ switch(raw_eocSoftwareUpgradeDevType_val) {
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_CBAT:
+ *mib_eocSoftwareUpgradeDevType_val_ptr = EOCSOFTWAREUPGRADEDEVTYPE_CBAT;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_CBAT_CARD:
+ *mib_eocSoftwareUpgradeDevType_val_ptr = EOCSOFTWAREUPGRADEDEVTYPE_CBAT_CARD;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_CNU:
+ *mib_eocSoftwareUpgradeDevType_val_ptr = EOCSOFTWAREUPGRADEDEVTYPE_CNU;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_OTHER:
+ *mib_eocSoftwareUpgradeDevType_val_ptr = EOCSOFTWAREUPGRADEDEVTYPE_OTHER;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_RESERVED1:
+ *mib_eocSoftwareUpgradeDevType_val_ptr = EOCSOFTWAREUPGRADEDEVTYPE_RESERVED1;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_RESERVED2:
+ *mib_eocSoftwareUpgradeDevType_val_ptr = EOCSOFTWAREUPGRADEDEVTYPE_RESERVED2;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_RESERVED3:
+ *mib_eocSoftwareUpgradeDevType_val_ptr = EOCSOFTWAREUPGRADEDEVTYPE_RESERVED3;
+ break;
+
+ default:
+ snmp_log(LOG_ERR, "couldn't map value %ld for eocSoftwareUpgradeDevType\n", raw_eocSoftwareUpgradeDevType_val );
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeDevType_map */
+
+/**
+ * Extract the current value of the eocSoftwareUpgradeDevType data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocSoftwareUpgradeDevType_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocSoftwareUpgradeDevType_get( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long * eocSoftwareUpgradeDevType_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocSoftwareUpgradeDevType_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeDevType_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocSoftwareUpgradeDevType data.
+ * copy (* eocSoftwareUpgradeDevType_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocSoftwareUpgradeDevType_val_ptr ) = rowreq_ctx->data.eocSoftwareUpgradeDevType;
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeDevType_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeFileName
+ * eocSoftwareUpgradeFileName is subid 5 of eocSoftwareUpgradeEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.5
+ * Description:
+´ÓÈí¼þÉý¼¶·þÎñÆ÷ÉÏÏÂÔصĹ̼þÎļþÃû¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 1 - 255;
+ *
+ * Its syntax is OCTETSTR (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Extract the current value of the eocSoftwareUpgradeFileName data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocSoftwareUpgradeFileName_val_ptr_ptr
+ * Pointer to storage for a char variable
+ * @param eocSoftwareUpgradeFileName_val_ptr_len_ptr
+ * Pointer to a size_t. On entry, it will contain the size (in bytes)
+ * pointed to by eocSoftwareUpgradeFileName.
+ * On exit, this value should contain the data size (in bytes).
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+*
+ * @note If you need more than (*eocSoftwareUpgradeFileName_val_ptr_len_ptr) bytes of memory,
+ * allocate it using malloc() and update eocSoftwareUpgradeFileName_val_ptr_ptr.
+ * <b>DO NOT</b> free the previous pointer.
+ * The MFD helper will release the memory you allocate.
+ *
+ * @remark If you call this function yourself, you are responsible
+ * for checking if the pointer changed, and freeing any
+ * previously allocated memory. (Not necessary if you pass
+ * in a pointer to static memory, obviously.)
+ */
+int
+eocSoftwareUpgradeFileName_get( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, char **eocSoftwareUpgradeFileName_val_ptr_ptr, size_t *eocSoftwareUpgradeFileName_val_ptr_len_ptr )
+{
+ /** we should have a non-NULL pointer and enough storage */
+ netsnmp_assert( (NULL != eocSoftwareUpgradeFileName_val_ptr_ptr) && (NULL != *eocSoftwareUpgradeFileName_val_ptr_ptr));
+ netsnmp_assert( NULL != eocSoftwareUpgradeFileName_val_ptr_len_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeFileName_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocSoftwareUpgradeFileName data.
+ * copy (* eocSoftwareUpgradeFileName_val_ptr_ptr ) data and (* eocSoftwareUpgradeFileName_val_ptr_len_ptr ) from rowreq_ctx->data
+ */
+ /*
+ * make sure there is enough space for eocSoftwareUpgradeFileName data
+ */
+ if ((NULL == (* eocSoftwareUpgradeFileName_val_ptr_ptr )) ||
+ ((* eocSoftwareUpgradeFileName_val_ptr_len_ptr ) <
+ (rowreq_ctx->data.eocSoftwareUpgradeFileName_len* sizeof(rowreq_ctx->data.eocSoftwareUpgradeFileName[0])))) {
+ /*
+ * allocate space for eocSoftwareUpgradeFileName data
+ */
+ (* eocSoftwareUpgradeFileName_val_ptr_ptr ) = malloc(rowreq_ctx->data.eocSoftwareUpgradeFileName_len* sizeof(rowreq_ctx->data.eocSoftwareUpgradeFileName[0]));
+ if(NULL == (* eocSoftwareUpgradeFileName_val_ptr_ptr )) {
+ snmp_log(LOG_ERR,"could not allocate memory\n");
+ return MFD_ERROR;
+ }
+ }
+ (* eocSoftwareUpgradeFileName_val_ptr_len_ptr ) = rowreq_ctx->data.eocSoftwareUpgradeFileName_len* sizeof(rowreq_ctx->data.eocSoftwareUpgradeFileName[0]);
+ memcpy( (* eocSoftwareUpgradeFileName_val_ptr_ptr ), rowreq_ctx->data.eocSoftwareUpgradeFileName, rowreq_ctx->data.eocSoftwareUpgradeFileName_len* sizeof(rowreq_ctx->data.eocSoftwareUpgradeFileName[0]) );
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeFileName_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeProceed
+ * eocSoftwareUpgradeProceed is subid 6 of eocSoftwareUpgradeEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.6
+ * Description:
+É豸Èí¼þÉý¼¶²Ù×÷£º
+ download(1)- ´ÓÈí¼þÉý¼¶·þÎñÆ÷ÉÏÏÂÔع̼þµ½EoC CBATÉ豸£»
+ upgrade(2)- Éý¼¶CBAT¡¢CBAT°å¿¨»òCNUÉ豸¹Ì¼þ£»
+ upload(3)- Ïò·þÎñÆ÷ÉÏ´«Îļþ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: download(1), upgrade(2), upload(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * map a value from its original native format to the MIB format.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : Any other error
+ *
+ * @note parameters follow the memset convention (dest, src).
+ *
+ * @note generation and use of this function can be turned off by re-running
+ * mib2c after adding the following line to the file
+ * defaults/node-eocSoftwareUpgradeProceed.m2d :
+ * @eval $m2c_node_skip_mapping = 1@
+ *
+ * @remark
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them here.
+ * Otherwise, just do a direct copy.
+ */
+int
+eocSoftwareUpgradeProceed_map(u_long *mib_eocSoftwareUpgradeProceed_val_ptr, u_long raw_eocSoftwareUpgradeProceed_val)
+{
+ netsnmp_assert(NULL != mib_eocSoftwareUpgradeProceed_val_ptr);
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeProceed_map","called\n"));
+
+ /*
+ * TODO:241:o: |-> Implement eocSoftwareUpgradeProceed enum mapping.
+ * uses INTERNAL_* macros defined in the header files
+ */
+ switch(raw_eocSoftwareUpgradeProceed_val) {
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEPROCEED_DOWNLOAD:
+ *mib_eocSoftwareUpgradeProceed_val_ptr = EOCSOFTWAREUPGRADEPROCEED_DOWNLOAD;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEPROCEED_UPGRADE:
+ *mib_eocSoftwareUpgradeProceed_val_ptr = EOCSOFTWAREUPGRADEPROCEED_UPGRADE;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEPROCEED_UPLOAD:
+ *mib_eocSoftwareUpgradeProceed_val_ptr = EOCSOFTWAREUPGRADEPROCEED_UPLOAD;
+ break;
+
+ default:
+ snmp_log(LOG_ERR, "couldn't map value %ld for eocSoftwareUpgradeProceed\n", raw_eocSoftwareUpgradeProceed_val );
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeProceed_map */
+
+/**
+ * Extract the current value of the eocSoftwareUpgradeProceed data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocSoftwareUpgradeProceed_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocSoftwareUpgradeProceed_get( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long * eocSoftwareUpgradeProceed_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocSoftwareUpgradeProceed_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeProceed_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocSoftwareUpgradeProceed data.
+ * copy (* eocSoftwareUpgradeProceed_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocSoftwareUpgradeProceed_val_ptr ) = rowreq_ctx->data.eocSoftwareUpgradeProceed;
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeProceed_get */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeResult
+ * eocSoftwareUpgradeResult is subid 7 of eocSoftwareUpgradeEntry.
+ * Its status is Current, and its access level is ReadOnly.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.7
+ * Description:
+Èí¼þÉý¼¶×´Ì¬:
+ none(0)- ÎÞ²Ù×÷£»
+ downloading(1)- ¹Ì¼þÏÂÔØÖУ»
+ downloadfailed(2)- ¹Ì¼þÏÂÔØʧ°Ü£»
+ downloadsuccess(3)- ¹Ì¼þÏÂÔسɹ¦£»
+ upgrading(4)- ¹Ì¼þÈí¼þÉý¼¶ÖУ»
+ upgradefailed(5)- ¹Ì¼þÈí¼þÉý¼¶Ê§°Ü£»
+ upgradesuccess(6)- ¹Ì¼þÈí¼þÉý¼¶³É¹¦£»
+ uploading(7)- ÎļþÉÏ´«ÖУ»
+ uploadfailed(8)- ÎļþÉÏ´«Ê§°Ü£»
+ uploadsuccess(9)- ÎļþÉÏ´«³É¹¦¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 1
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 0
+ * defval: 0
+ *
+ * Enum range: 5/16. Values: none(0), downloading(1), downloadfailed(2), downloadsuccess(3), upgrading(4), upgradefailed(5), upgradesuccess(6), uploading(7), uploadfailed(8), uploadsuccess(9)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * map a value from its original native format to the MIB format.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : Any other error
+ *
+ * @note parameters follow the memset convention (dest, src).
+ *
+ * @note generation and use of this function can be turned off by re-running
+ * mib2c after adding the following line to the file
+ * defaults/node-eocSoftwareUpgradeResult.m2d :
+ * @eval $m2c_node_skip_mapping = 1@
+ *
+ * @remark
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them here.
+ * Otherwise, just do a direct copy.
+ */
+int
+eocSoftwareUpgradeResult_map(u_long *mib_eocSoftwareUpgradeResult_val_ptr, u_long raw_eocSoftwareUpgradeResult_val)
+{
+ netsnmp_assert(NULL != mib_eocSoftwareUpgradeResult_val_ptr);
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeResult_map","called\n"));
+
+ /*
+ * TODO:241:o: |-> Implement eocSoftwareUpgradeResult enum mapping.
+ * uses INTERNAL_* macros defined in the header files
+ */
+ switch(raw_eocSoftwareUpgradeResult_val) {
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_NONE:
+ *mib_eocSoftwareUpgradeResult_val_ptr = EOCSOFTWAREUPGRADERESULT_NONE;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_DOWNLOADING:
+ *mib_eocSoftwareUpgradeResult_val_ptr = EOCSOFTWAREUPGRADERESULT_DOWNLOADING;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_DOWNLOADFAILED:
+ *mib_eocSoftwareUpgradeResult_val_ptr = EOCSOFTWAREUPGRADERESULT_DOWNLOADFAILED;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_DOWNLOADSUCCESS:
+ *mib_eocSoftwareUpgradeResult_val_ptr = EOCSOFTWAREUPGRADERESULT_DOWNLOADSUCCESS;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADING:
+ *mib_eocSoftwareUpgradeResult_val_ptr = EOCSOFTWAREUPGRADERESULT_UPGRADING;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADEFAILED:
+ *mib_eocSoftwareUpgradeResult_val_ptr = EOCSOFTWAREUPGRADERESULT_UPGRADEFAILED;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADESUCCESS:
+ *mib_eocSoftwareUpgradeResult_val_ptr = EOCSOFTWAREUPGRADERESULT_UPGRADESUCCESS;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADING:
+ *mib_eocSoftwareUpgradeResult_val_ptr = EOCSOFTWAREUPGRADERESULT_UPLOADING;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADFAILED:
+ *mib_eocSoftwareUpgradeResult_val_ptr = EOCSOFTWAREUPGRADERESULT_UPLOADFAILED;
+ break;
+
+ case INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADSUCCESS:
+ *mib_eocSoftwareUpgradeResult_val_ptr = EOCSOFTWAREUPGRADERESULT_UPLOADSUCCESS;
+ break;
+
+ default:
+ snmp_log(LOG_ERR, "couldn't map value %ld for eocSoftwareUpgradeResult\n", raw_eocSoftwareUpgradeResult_val );
+ return MFD_ERROR;
+ }
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeResult_map */
+
+/**
+ * Extract the current value of the eocSoftwareUpgradeResult data.
+ *
+ * Set a value using the data context for the row.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocSoftwareUpgradeResult_val_ptr
+ * Pointer to storage for a long variable
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_SKIP : skip this node (no value for now)
+ * @retval MFD_ERROR : Any other error
+ */
+int
+eocSoftwareUpgradeResult_get( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long * eocSoftwareUpgradeResult_val_ptr )
+{
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != eocSoftwareUpgradeResult_val_ptr );
+
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeResult_get","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:231:o: |-> Extract the current value of the eocSoftwareUpgradeResult data.
+ * copy (* eocSoftwareUpgradeResult_val_ptr ) from rowreq_ctx->data
+ */
+ (* eocSoftwareUpgradeResult_val_ptr ) = rowreq_ctx->data.eocSoftwareUpgradeResult;
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeResult_get */
+
+
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_get.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_get.h
new file mode 100644
index 0000000000..c075c668ed
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_get.h
@@ -0,0 +1,70 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12088 $ of $
+ *
+ * $Id:$
+ *
+ * @file eocSoftwareUpgradeTable_data_get.h
+ *
+ * @addtogroup get
+ *
+ * Prototypes for get functions
+ *
+ * @{
+ */
+#ifndef EOCSOFTWAREUPGRADETABLE_DATA_GET_H
+#define EOCSOFTWAREUPGRADETABLE_DATA_GET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * GET function declarations
+ */
+
+/* *********************************************************************
+ * GET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocSoftwareUpgradeTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeTable is subid 5 of eocSoftwareUpgradeGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5, length: 11
+*/
+ /*
+ * indexes
+ */
+ int eocSoftwareUpgradeCBATCardIndex_map(long *mib_eocSoftwareUpgradeCBATCardIndex_val_ptr, long raw_eocSoftwareUpgradeCBATCardIndex_val);
+ int eocSoftwareUpgradeCNUIndex_map(long *mib_eocSoftwareUpgradeCNUIndex_val_ptr, long raw_eocSoftwareUpgradeCNUIndex_val);
+
+ int eocSoftwareUpgradeMACAddress_map(char **mib_eocSoftwareUpgradeMACAddress_val_ptr_ptr, size_t *mib_eocSoftwareUpgradeMACAddress_val_ptr_len_ptr, char *raw_eocSoftwareUpgradeMACAddress_val_ptr, size_t raw_eocSoftwareUpgradeMACAddress_val_ptr_len, int allow_realloc);
+ int eocSoftwareUpgradeMACAddress_get( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, char **eocSoftwareUpgradeMACAddress_val_ptr_ptr, size_t *eocSoftwareUpgradeMACAddress_val_ptr_len_ptr );
+ int eocSoftwareUpgradeDevType_map(u_long *mib_eocSoftwareUpgradeDevType_val_ptr, u_long raw_eocSoftwareUpgradeDevType_val);
+ int eocSoftwareUpgradeDevType_get( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long * eocSoftwareUpgradeDevType_val_ptr );
+ int eocSoftwareUpgradeFileName_map(char **mib_eocSoftwareUpgradeFileName_val_ptr_ptr, size_t *mib_eocSoftwareUpgradeFileName_val_ptr_len_ptr, char *raw_eocSoftwareUpgradeFileName_val_ptr, size_t raw_eocSoftwareUpgradeFileName_val_ptr_len, int allow_realloc);
+ int eocSoftwareUpgradeFileName_get( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, char **eocSoftwareUpgradeFileName_val_ptr_ptr, size_t *eocSoftwareUpgradeFileName_val_ptr_len_ptr );
+ int eocSoftwareUpgradeProceed_map(u_long *mib_eocSoftwareUpgradeProceed_val_ptr, u_long raw_eocSoftwareUpgradeProceed_val);
+ int eocSoftwareUpgradeProceed_get( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long * eocSoftwareUpgradeProceed_val_ptr );
+ int eocSoftwareUpgradeResult_map(u_long *mib_eocSoftwareUpgradeResult_val_ptr, u_long raw_eocSoftwareUpgradeResult_val);
+ int eocSoftwareUpgradeResult_get( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long * eocSoftwareUpgradeResult_val_ptr );
+
+
+int eocSoftwareUpgradeTable_indexes_set_tbl_idx(eocSoftwareUpgradeTable_mib_index *tbl_idx, long eocSoftwareUpgradeCBATCardIndex_val, long eocSoftwareUpgradeCNUIndex_val);
+int eocSoftwareUpgradeTable_indexes_set(eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, long eocSoftwareUpgradeCBATCardIndex_val, long eocSoftwareUpgradeCNUIndex_val);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCSOFTWAREUPGRADETABLE_DATA_GET_H */
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_set.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_set.c
new file mode 100644
index 0000000000..d76b9df346
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_set.c
@@ -0,0 +1,1808 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ *
+ */
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocSoftwareUpgradeTable.h"
+
+/* directory for temporary storage of master image */
+#define MASTER_IMG_DIR "/tmp"
+
+
+/* mutex protecting container for reload */
+static pthread_mutex_t mutex_reload;
+
+/* indication of active master image download */
+static int dl_active = 0;
+
+/* mutex protecting download indication */
+static pthread_mutex_t mutex_dl;
+
+/* download master image file with given filename from server (server parameters are read from configuration files) */
+int eocSoftwareUpgrade_server_download (char *filename);
+
+/* thread for master upgrade action */
+void *eocSoftwareUpgrade_thread (void *arg);
+/** @defgroup data_set data_set: Routines to set data
+ *
+ * These routines are used to set the value for individual objects. The
+ * row context is passed, along with the new value.
+ *
+ * @{
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocSoftwareUpgradeTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeTable is subid 5 of eocSoftwareUpgradeGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5, length: 11
+*/
+ /*
+ * NOTE: if you update this chart, please update the versions in
+ * local/mib2c-conf.d/parent-set.m2i
+ * agent/mibgroup/helpers/baby_steps.c
+ * while you're at it.
+ */
+ /*
+ ***********************************************************************
+ * Baby Steps Flow Chart (2004.06.05) *
+ * *
+ * +--------------+ +================+ U = unconditional path *
+ * |optional state| ||required state|| S = path for success *
+ * +--------------+ +================+ E = path for error *
+ ***********************************************************************
+ *
+ * +--------------+
+ * | pre |
+ * | request |
+ * +--------------+
+ * | U
+ * +==============+
+ * +----------------|| object ||
+ * | E || lookup ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | E || check ||
+ * |<---------------|| values ||
+ * | +==============+
+ * | | S
+ * | +==============+
+ * | +<-------|| undo ||
+ * | | E || setup ||
+ * | | +==============+
+ * | | | S
+ * | | +==============+
+ * | | || set ||-------------------------->+
+ * | | || value || E |
+ * | | +==============+ |
+ * | | | S |
+ * | | +--------------+ |
+ * | | | check |-------------------------->|
+ * | | | consistency | E |
+ * | | +--------------+ |
+ * | | | S |
+ * | | +==============+ +==============+ |
+ * | | || commit ||-------->|| undo || |
+ * | | || || E || commit || |
+ * | | +==============+ +==============+ |
+ * | | | S U |<--------+
+ * | | +--------------+ +==============+
+ * | | | irreversible | || undo ||
+ * | | | commit | || set ||
+ * | | +--------------+ +==============+
+ * | | | U U |
+ * | +-------------->|<------------------------+
+ * | +==============+
+ * | || undo ||
+ * | || cleanup ||
+ * | +==============+
+ * +---------------------->| U
+ * +--------------+
+ * | post |
+ * | request |
+ * +--------------+
+ *
+ */
+
+/**
+ * Setup up context with information needed to undo a set request.
+ *
+ * This function will be called before the individual node undo setup
+ * functions are called. If you need to do any undo setup that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that the undo context has been allocated with
+ * eocSoftwareUpgradeTable_allocate_data(), but may need extra
+ * initialization similar to what you may have done in
+ * eocSoftwareUpgradeTable_rowreq_ctx_init().
+ * Note that an individual node's undo_setup function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in the node's undo_setup
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocSoftwareUpgradeTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocSoftwareUpgradeTable_undo_setup( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_undo_setup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> Setup eocSoftwareUpgradeTable undo.
+ * set up eocSoftwareUpgradeTable undo information, in preparation for a set.
+ * Undo storage is in (* eocSoftwareUpgradeResult_val_ptr )*
+ */
+
+ return rc;
+} /* eocSoftwareUpgradeTable_undo_setup */
+
+/**
+ * Undo a set request.
+ *
+ * This function will be called before the individual node undo
+ * functions are called. If you need to do any undo that is not
+ * related to a specific column, you can do it here.
+ *
+ * Note that an individual node's undo function will only be called
+ * if that node is being set to a new value.
+ *
+ * If there is anything specific to a particular column (e.g. releasing
+ * memory for a string), you should do that setup in the node's undo
+ * function, so it won't be done unless it is necessary.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocSoftwareUpgradeTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ */
+int
+eocSoftwareUpgradeTable_undo( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_undo","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:451:M: |-> eocSoftwareUpgradeTable undo.
+ * eocSoftwareUpgradeTable undo information, in response to a failed set.
+ * Undo storage is in (* eocSoftwareUpgradeResult_val_ptr )*
+ */
+
+ return rc;
+} /* eocSoftwareUpgradeTable_undo_setup */
+
+/**
+ * Cleanup up context undo information.
+ *
+ * This function will be called after set/commit processing. If you
+ * allocated any resources in undo_setup, this is the place to release
+ * those resources.
+ *
+ * This function is called regardless of the success or failure of the set
+ * request. If you need to perform different steps for cleanup depending
+ * on success or failure, you can add a flag to the rowreq_ctx.
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocSoftwareUpgradeTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocSoftwareUpgradeTable_undo_cleanup( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_undo_cleanup","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:452:M: |-> Cleanup eocSoftwareUpgradeTable undo.
+ * Undo storage is in (* eocSoftwareUpgradeResult_val_ptr )*
+ */
+
+ return rc;
+} /* eocSoftwareUpgradeTable_undo_cleanup */
+
+/**
+ * commit new values.
+ *
+ * At this point, you should have done everything you can to ensure that
+ * this commit will not fail.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocSoftwareUpgradeTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocSoftwareUpgradeTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocSoftwareUpgradeTable_commit( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+ int save_flags;
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * save flags, then clear until we actually do something
+ */
+ save_flags = rowreq_ctx->column_set_flags;
+ rowreq_ctx->column_set_flags = 0;
+
+ /*
+ * commit eocSoftwareUpgradeTable data
+ * 1) check the column's flag in save_flags to see if it was set.
+ * 2) clear the flag when you handle that column
+ * 3) set the column's flag in column_set_flags if it needs undo
+ * processing in case of a failure.
+ */
+ if (save_flags & COLUMN_EOCSOFTWAREUPGRADEMACADDRESS_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCSOFTWAREUPGRADEMACADDRESS_FLAG;
+ /* clear eocSoftwareUpgradeMACAddress */
+ /*
+ * set flag, in case we need to undo eocSoftwareUpgradeMACAddress
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCSOFTWAREUPGRADEMACADDRESS_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCSOFTWAREUPGRADEDEVTYPE_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCSOFTWAREUPGRADEDEVTYPE_FLAG;
+ /* clear eocSoftwareUpgradeDevType */
+ /*
+ *set flag, in case we need to undo eocSoftwareUpgradeDevType
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCSOFTWAREUPGRADEDEVTYPE_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCSOFTWAREUPGRADEFILENAME_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCSOFTWAREUPGRADEFILENAME_FLAG;
+ /* clear eocSoftwareUpgradeFileName */
+ /*
+ * set flag, in case we need to undo eocSoftwareUpgradeFileName
+ */
+ rowreq_ctx->column_set_flags |=
+ COLUMN_EOCSOFTWAREUPGRADEFILENAME_FLAG;
+ }
+
+ if (save_flags & COLUMN_EOCSOFTWAREUPGRADEPROCEED_FLAG)
+ {
+ save_flags &= ~COLUMN_EOCSOFTWAREUPGRADEPROCEED_FLAG;
+ /* clear eocSoftwareUpgradeProceed */
+ /*
+ * set flag, in case we need to undo eocSoftwareUpgradeProceed
+ */
+ rowreq_ctx->column_set_flags |= COLUMN_EOCSOFTWAREUPGRADEPROCEED_FLAG;
+ }
+
+ /*
+ * if we successfully commited this row, set the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+ }
+
+ if (save_flags) {
+ snmp_log (LOG_ERR, "unhandled columns (0x%x) in commit\n", save_flags);
+ return MFD_ERROR;
+ }
+
+ return rc;
+} /* eocSoftwareUpgradeTable_commit */
+
+/**
+ * undo commit new values.
+ *
+ * Should you need different behavior depending on which columns were
+ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+ * set. The definitions for the COLUMN_*_FLAG bits can be found in
+ * eocSoftwareUpgradeTable_oids.h.
+ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+ *
+ * @param eocSoftwareUpgradeTable_rowreq_ctx
+ * Pointer to the users context.
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error
+ */
+int
+eocSoftwareUpgradeTable_undo_commit( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+ int rc = MFD_SUCCESS;
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_undo_commit","called\n"));
+
+ /** we should have a non-NULL pointer */
+ netsnmp_assert( NULL != rowreq_ctx );
+
+ /*
+ * TODO:485:M: |-> Undo eocSoftwareUpgradeTable commit.
+ * check the column's flag in rowreq_ctx->column_set_flags to see
+ * if it was set during commit, then undo it.
+ *
+ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+ */
+
+
+ /*
+ * if we successfully un-commited this row, clear the dirty flag.
+ */
+ if (MFD_SUCCESS == rc) {
+ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+ }
+
+ return rc;
+} /* eocSoftwareUpgradeTable_undo_commit */
+
+/*
+ * TODO:440:M: Implement eocSoftwareUpgradeTable node value checks.
+ * TODO:450:M: Implement eocSoftwareUpgradeTable undo functions.
+ * TODO:460:M: Implement eocSoftwareUpgradeTable set functions.
+ * TODO:480:M: Implement eocSoftwareUpgradeTable commit functions.
+ */
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeMACAddress
+ * eocSoftwareUpgradeMACAddress is subid 3 of eocSoftwareUpgradeEntry.
+ * Its status is Optional, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.3
+ * Description:
+´ýÈí¼þÉý¼¶É豸µÄMACµØÖ·.
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 1
+ * settable 1
+ * hint: 1x:
+ *
+ * Ranges: 6;
+ *
+ * Its syntax is MacAddress (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 6)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocSoftwareUpgradeMACAddress_val_ptr
+ * A char containing the new value.
+ * @param eocSoftwareUpgradeMACAddress_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocSoftwareUpgradeMACAddress_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocSoftwareUpgradeTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OCTET_STR
+ * The length is < sizeof(rowreq_ctx->data.eocSoftwareUpgradeMACAddress).
+ * The length is in (one of) the range set(s): 6
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocSoftwareUpgradeMACAddress_check_value( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, char *eocSoftwareUpgradeMACAddress_val_ptr, size_t eocSoftwareUpgradeMACAddress_val_ptr_len)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeMACAddress_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocSoftwareUpgradeMACAddress_val_ptr);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocSoftwareUpgradeMACAddress value.
+ */
+
+ return MFD_SUCCESS; /* eocSoftwareUpgradeMACAddress value not illegal */
+} /* eocSoftwareUpgradeMACAddress_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocSoftwareUpgradeTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocSoftwareUpgradeTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocSoftwareUpgradeMACAddress_undo_setup( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeMACAddress_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocSoftwareUpgradeMACAddress undo.
+ */
+ /*
+ * copy eocSoftwareUpgradeMACAddress and eocSoftwareUpgradeMACAddress_len data
+ * set rowreq_ctx->undo->eocSoftwareUpgradeMACAddress from rowreq_ctx->data.eocSoftwareUpgradeMACAddress
+ */
+ memcpy( rowreq_ctx->undo->eocSoftwareUpgradeMACAddress, rowreq_ctx->data.eocSoftwareUpgradeMACAddress,
+ (rowreq_ctx->data.eocSoftwareUpgradeMACAddress_len * sizeof(rowreq_ctx->undo->eocSoftwareUpgradeMACAddress[0])));
+ rowreq_ctx->undo->eocSoftwareUpgradeMACAddress_len = rowreq_ctx->data.eocSoftwareUpgradeMACAddress_len;
+
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeMACAddress_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocSoftwareUpgradeMACAddress_val_ptr
+ * A char containing the new value.
+ * @param eocSoftwareUpgradeMACAddress_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocSoftwareUpgradeMACAddress_val_ptr
+ */
+int
+eocSoftwareUpgradeMACAddress_set( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, char *eocSoftwareUpgradeMACAddress_val_ptr, size_t eocSoftwareUpgradeMACAddress_val_ptr_len )
+{
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeMACAddress_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocSoftwareUpgradeMACAddress_val_ptr);
+
+ snmp_log (LOG_ERR, "SET not supported for SoftwareUpgradeMACAddress!\n");
+
+ return SNMP_ERR_NOTWRITABLE;
+} /* eocSoftwareUpgradeMACAddress_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocSoftwareUpgradeMACAddress_undo( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeMACAddress_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocSoftwareUpgradeMACAddress undo.
+ */
+ /*
+ * copy eocSoftwareUpgradeMACAddress and eocSoftwareUpgradeMACAddress_len data
+ * set rowreq_ctx->data.eocSoftwareUpgradeMACAddress from rowreq_ctx->undo->eocSoftwareUpgradeMACAddress
+ */
+ memcpy( rowreq_ctx->data.eocSoftwareUpgradeMACAddress, rowreq_ctx->undo->eocSoftwareUpgradeMACAddress,
+ (rowreq_ctx->undo->eocSoftwareUpgradeMACAddress_len * sizeof(rowreq_ctx->data.eocSoftwareUpgradeMACAddress[0])));
+ rowreq_ctx->data.eocSoftwareUpgradeMACAddress_len = rowreq_ctx->undo->eocSoftwareUpgradeMACAddress_len;
+
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeMACAddress_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeDevType
+ * eocSoftwareUpgradeDevType is subid 4 of eocSoftwareUpgradeEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.4
+ * Description:
+´ýÈí¼þÉý¼¶É豸µÄÀàÐÍ£º
+ cbat(1)-CBAT£¬
+ cbat-card(2)- CBAT°å¿¨£¬
+ cnu(3)- CNU£¬
+ other(4)- ÆäËûÉ豸ÀýÈ磺Gateway»òSwitch£¬
+ reserved1(5)£¬
+ reserved2(6)£¬
+ reserved3(7)
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 5/8. Values: cbat(1), cbat_card(2), cnu(3), other(4), reserved1(5), reserved2(6), reserved3(7)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocSoftwareUpgradeDevType_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocSoftwareUpgradeTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of cbat(1), cbat_card(2), cnu(3), other(4), reserved1(5), reserved2(6), reserved3(7)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocSoftwareUpgradeDevType_check_value( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long eocSoftwareUpgradeDevType_val)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeDevType_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocSoftwareUpgradeDevType value.
+ */
+
+ return MFD_SUCCESS; /* eocSoftwareUpgradeDevType value not illegal */
+} /* eocSoftwareUpgradeDevType_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocSoftwareUpgradeTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocSoftwareUpgradeTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocSoftwareUpgradeDevType_undo_setup( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeDevType_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocSoftwareUpgradeDevType undo.
+ */
+ /*
+ * copy eocSoftwareUpgradeDevType data
+ * set rowreq_ctx->undo->eocSoftwareUpgradeDevType from rowreq_ctx->data.eocSoftwareUpgradeDevType
+ */
+ rowreq_ctx->undo->eocSoftwareUpgradeDevType = rowreq_ctx->data.eocSoftwareUpgradeDevType;
+
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeDevType_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocSoftwareUpgradeDevType_val
+ * A long containing the new value.
+ */
+int
+eocSoftwareUpgradeDevType_set( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long eocSoftwareUpgradeDevType_val )
+{
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeDevType_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+/*
+ * TODO:245:o: |-> Implement eocSoftwareUpgradeDevType reverse mapping.
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them here.
+ */
+ snmp_log (LOG_ERR, "SET not supported for SoftwareUpgradeDevType!\n");
+
+ return SNMP_ERR_NOTWRITABLE;
+} /* eocSoftwareUpgradeDevType_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocSoftwareUpgradeDevType_undo( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeDevType_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocSoftwareUpgradeDevType undo.
+ */
+ /*
+ * copy eocSoftwareUpgradeDevType data
+ * set rowreq_ctx->data.eocSoftwareUpgradeDevType from rowreq_ctx->undo->eocSoftwareUpgradeDevType
+ */
+ rowreq_ctx->data.eocSoftwareUpgradeDevType = rowreq_ctx->undo->eocSoftwareUpgradeDevType;
+
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeDevType_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeFileName
+ * eocSoftwareUpgradeFileName is subid 5 of eocSoftwareUpgradeEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.5
+ * Description:
+´ÓÈí¼þÉý¼¶·þÎñÆ÷ÉÏÏÂÔصĹ̼þÎļþÃû¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 0 hasdefval 0
+ * readable 1 iscolumn 1 ranges 1 hashint 0
+ * settable 1
+ *
+ * Ranges: 1 - 255;
+ *
+ * Its syntax is OCTETSTR (based on perltype OCTETSTR)
+ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+ * This data type requires a length. (Max 255)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocSoftwareUpgradeFileName_val_ptr
+ * A char containing the new value.
+ * @param eocSoftwareUpgradeFileName_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocSoftwareUpgradeFileName_val_ptr
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocSoftwareUpgradeTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_OCTET_STR
+ * The length is < sizeof(rowreq_ctx->data.eocSoftwareUpgradeFileName).
+ * The length is in (one of) the range set(s): 1 - 255
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocSoftwareUpgradeFileName_check_value( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, char *eocSoftwareUpgradeFileName_val_ptr, size_t eocSoftwareUpgradeFileName_val_ptr_len)
+{
+ int current_index;
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeFileName_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocSoftwareUpgradeFileName_val_ptr);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocSoftwareUpgradeFileName value.
+ */
+ /* if master upgrade or image download is active, do not allow changing file name */
+ if (rowreq_ctx->data.eocSoftwareUpgradeDevType ==
+ EOCSOFTWAREUPGRADEDEVTYPE_CBAT)
+ {
+ if ((dl_active == 1) ||
+ (eocSoftwareUpgradeResult[0] ==
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADING))
+ {
+ snmp_log (LOG_ERR, "cannot change master filename while upgrade"
+ " or transfer is active\n");
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ }
+ else if (rowreq_ctx->data.eocSoftwareUpgradeDevType ==
+ EOCSOFTWAREUPGRADEDEVTYPE_CNU)
+ {
+ current_index = rowreq_ctx->tbl_idx.eocSoftwareUpgradeCNUIndex;
+ if (eocSoftwareUpgradeResult[current_index] ==
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADING)
+ {
+ snmp_log (LOG_ERR, "cannot change slave filename while"
+ " transfer is active\n");
+ return SNMP_ERR_INCONSISTENTVALUE;
+ }
+ }
+
+ return MFD_SUCCESS; /* eocSoftwareUpgradeFileName value not illegal */
+} /* eocSoftwareUpgradeFileName_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocSoftwareUpgradeTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocSoftwareUpgradeTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocSoftwareUpgradeFileName_undo_setup( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeFileName_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocSoftwareUpgradeFileName undo.
+ */
+ /*
+ * copy eocSoftwareUpgradeFileName and eocSoftwareUpgradeFileName_len data
+ * set rowreq_ctx->undo->eocSoftwareUpgradeFileName from rowreq_ctx->data.eocSoftwareUpgradeFileName
+ */
+ memcpy( rowreq_ctx->undo->eocSoftwareUpgradeFileName, rowreq_ctx->data.eocSoftwareUpgradeFileName,
+ (rowreq_ctx->data.eocSoftwareUpgradeFileName_len * sizeof(rowreq_ctx->undo->eocSoftwareUpgradeFileName[0])));
+ rowreq_ctx->undo->eocSoftwareUpgradeFileName_len = rowreq_ctx->data.eocSoftwareUpgradeFileName_len;
+
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeFileName_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocSoftwareUpgradeFileName_val_ptr
+ * A char containing the new value.
+ * @param eocSoftwareUpgradeFileName_val_ptr_len
+ * The size (in bytes) of the data pointed to by eocSoftwareUpgradeFileName_val_ptr
+ */
+int
+eocSoftwareUpgradeFileName_set( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, char *eocSoftwareUpgradeFileName_val_ptr, size_t eocSoftwareUpgradeFileName_val_ptr_len )
+{
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ const char delimiter = LIBSPID_UPDATE_INFO_DELIMITER[0];
+ char *elt_buffer[LIBSPID_ELT_MAX_NB];
+
+ int ret;
+ char mac_str[LIBSPID_MAC_STR_LEN];
+ char action_string[2];
+ char action_last_string[2];
+ char result_string[2];
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:",
+ "eocSoftwareUpgradeFileName_set","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+ netsnmp_assert(NULL != eocSoftwareUpgradeFileName_val_ptr);
+
+/*
+ * TODO:245:o: |-> Implement eocSoftwareUpgradeFileName reverse mapping.
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them here.
+ */
+ /* copy SET request variable buffer and add terminal 0 */
+ strncpy (buffer, eocSoftwareUpgradeFileName_val_ptr,
+ eocSoftwareUpgradeFileName_val_ptr_len);
+ buffer[eocSoftwareUpgradeFileName_val_ptr_len] = '\0';
+
+ if (rowreq_ctx->data.eocSoftwareUpgradeDevType ==
+ EOCSOFTWAREUPGRADEDEVTYPE_CBAT)
+ {
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_MASTER_FILENAME,
+ buffer))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ }
+ else if (rowreq_ctx->data.eocSoftwareUpgradeDevType ==
+ EOCSOFTWAREUPGRADEDEVTYPE_CNU)
+ {
+ /* convert MAC address from bin to string */
+ ret =
+ libspid_mac_bin_to_str (rowreq_ctx->data.
+ eocSoftwareUpgradeMACAddress, mac_str);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+
+ elt_buffer[0] = buffer;
+ /* initialize action and result field to none */
+ sprintf (action_string, "%d", LIBSPID_UPDATE_ACTION_NONE);
+ sprintf (result_string, "%d", LIBSPID_UPDATE_NONE);
+ sprintf (action_last_string, "%d", LIBSPID_UPDATE_ACTION_NONE);
+ elt_buffer[1] = action_string;
+ elt_buffer[2] = result_string;
+ elt_buffer[3] = action_last_string;
+
+ /* write MAC, filename and actions to update.info file */
+ ret = libspid_config_write_line (LIBSPID_UPDATE_INFO_PATH,
+ delimiter, mac_str, 4, elt_buffer);
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_line error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+
+ /* save update file to flash */
+ ret = libspid_system_save_file (LIBSPID_UPDATE_INFO_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_save_file error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ }
+
+ /*
+ * TODO:461:M: |-> Set eocSoftwareUpgradeFileName value.
+ * set eocSoftwareUpgradeFileName value in rowreq_ctx->data
+ */
+ memcpy (rowreq_ctx->data.eocSoftwareUpgradeFileName,
+ eocSoftwareUpgradeFileName_val_ptr,
+ eocSoftwareUpgradeFileName_val_ptr_len);
+ /** convert bytes to number of char */
+ rowreq_ctx->data.eocSoftwareUpgradeFileName_len =
+ eocSoftwareUpgradeFileName_val_ptr_len /
+ sizeof (eocSoftwareUpgradeFileName_val_ptr[0]);
+
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeFileName_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocSoftwareUpgradeFileName_undo( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+ int ret;
+ char buffer[LIBSPID_LINE_MAX_LEN];
+ char mac_str[LIBSPID_MAC_STR_LEN];
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:",
+ "eocSoftwareUpgradeFileName_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /* copy UNDO variable buffer and add terminal 0 */
+ strncpy (buffer, rowreq_ctx->undo->eocSoftwareUpgradeFileName,
+ rowreq_ctx->undo->eocSoftwareUpgradeFileName_len);
+ buffer[rowreq_ctx->undo->eocSoftwareUpgradeFileName_len] = '\0';
+
+ if (rowreq_ctx->data.eocSoftwareUpgradeDevType ==
+ EOCSOFTWAREUPGRADEDEVTYPE_CBAT)
+ {
+ if (LIBSPID_SUCCESS !=
+ libspid_config_write_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_MASTER_FILENAME,
+ buffer))
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_item error\n");
+ return SNMP_ERR_UNDOFAILED;
+ }
+ }
+ else if (rowreq_ctx->data.eocSoftwareUpgradeDevType ==
+ EOCSOFTWAREUPGRADEDEVTYPE_CNU)
+ {
+ /* convert MAC address from bin to string */
+ ret = libspid_mac_bin_to_str (
+ rowreq_ctx->data.eocSoftwareUpgradeMACAddress,
+ mac_str);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ return SNMP_ERR_UNDOFAILED;
+ }
+
+ /* if commit fails, remove line from update.info (if existing) */
+ ret = libspid_config_remove_line (LIBSPID_UPDATE_INFO_PATH,
+ LIBSPID_UPDATE_INFO_DELIMITER,
+ mac_str);
+ if ((LIBSPID_SUCCESS != ret) && (LIBSPID_ERROR_NOT_FOUND != ret))
+ {
+ snmp_log (LOG_ERR, "libspid_config_remove_item error\n");
+ return SNMP_ERR_UNDOFAILED;
+ }
+
+ /* save update file to flash */
+ ret = libspid_system_save_file (LIBSPID_UPDATE_INFO_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_save_file error\n");
+ return SNMP_ERR_UNDOFAILED;
+ }
+ }
+
+ /*
+ * TODO:456:o: |-> Clean up eocSoftwareUpgradeFileName undo.
+ */
+ /*
+ * copy eocSoftwareUpgradeFileName and eocSoftwareUpgradeFileName_len data
+ * set rowreq_ctx->data.eocSoftwareUpgradeFileName from
+ *rowreq_ctx->undo->eocSoftwareUpgradeFileName
+ */
+ memcpy (rowreq_ctx->data.eocSoftwareUpgradeFileName,
+ rowreq_ctx->undo->eocSoftwareUpgradeFileName,
+ (rowreq_ctx->undo->eocSoftwareUpgradeFileName_len *
+ sizeof (rowreq_ctx->data.eocSoftwareUpgradeFileName[0])));
+ rowreq_ctx->data.eocSoftwareUpgradeFileName_len =
+ rowreq_ctx->undo->eocSoftwareUpgradeFileName_len;
+
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeFileName_undo */
+
+/*---------------------------------------------------------------------
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeEntry.eocSoftwareUpgradeProceed
+ * eocSoftwareUpgradeProceed is subid 6 of eocSoftwareUpgradeEntry.
+ * Its status is Current, and its access level is ReadWrite.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5.1.6
+ * Description:
+É豸Èí¼þÉý¼¶²Ù×÷£º
+ download(1)- ´ÓÈí¼þÉý¼¶·þÎñÆ÷ÉÏÏÂÔع̼þµ½EoC CBATÉ豸£»
+ upgrade(2)- Éý¼¶CBAT¡¢CBAT°å¿¨»òCNUÉ豸¹Ì¼þ£»
+ upload(3)- Ïò·þÎñÆ÷ÉÏ´«Îļþ¡£
+ *
+ * Attributes:
+ * accessible 1 isscalar 0 enums 1 hasdefval 0
+ * readable 1 iscolumn 1 ranges 0 hashint 0
+ * settable 1
+ *
+ * Enum range: 3/8. Values: download(1), upgrade(2), upload(3)
+ *
+ * Its syntax is INTEGER (based on perltype INTEGER)
+ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+ */
+/**
+ * Check that the proposed new value is potentially valid.
+ *
+ * @param rowreq_ctx
+ * Pointer to the row request context.
+ * @param eocSoftwareUpgradeProceed_val
+ * A long containing the new value.
+ *
+ * @retval MFD_SUCCESS : incoming value is legal
+ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+ *
+ * This is the place to check for requirements that are not
+ * expressed in the mib syntax (for example, a requirement that
+ * is detailed in the description for an object).
+ *
+ * You should check that the requested change between the undo value and the
+ * new value is legal (ie, the transistion from one value to another
+ * is legal).
+ *
+ *@note
+ * This check is only to determine if the new value
+ * is \b potentially valid. This is the first check of many, and
+ * is one of the simplest ones.
+ *
+ *@note
+ * this is not the place to do any checks for values
+ * which depend on some other value in the mib. Those
+ * types of checks should be done in the
+ * eocSoftwareUpgradeTable_check_dependencies() function.
+ *
+ * The following checks have already been done for you:
+ * The syntax is ASN_INTEGER
+ * The value is one of download(1), upgrade(2), upload(3)
+ *
+ * If there a no other checks you need to do, simply return MFD_SUCCESS.
+ *
+ */
+int
+eocSoftwareUpgradeProceed_check_value( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long eocSoftwareUpgradeProceed_val)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeProceed_check_value","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:441:o: |-> Check for valid eocSoftwareUpgradeProceed value.
+ */
+
+ return MFD_SUCCESS; /* eocSoftwareUpgradeProceed value not illegal */
+} /* eocSoftwareUpgradeProceed_check_value */
+
+/**
+ * Save old value information
+ *
+ * @param rowreq_ctx
+ * Pointer to the table context (eocSoftwareUpgradeTable_rowreq_ctx)
+ *
+ * @retval MFD_SUCCESS : success
+ * @retval MFD_ERROR : error. set will fail.
+ *
+ * This function will be called after the table level undo setup function
+ * eocSoftwareUpgradeTable_undo_setup has been called.
+ *
+ *@note
+ * this function will only be called if a new value is set for this column.
+ *
+ * If there is any setup specific to a particular column (e.g. allocating
+ * memory for a string), you should do that setup in this function, so it
+ * won't be done unless it is necessary.
+ */
+int
+eocSoftwareUpgradeProceed_undo_setup( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeProceed_undo_setup","called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:455:o: |-> Setup eocSoftwareUpgradeProceed undo.
+ */
+ /*
+ * copy eocSoftwareUpgradeProceed data
+ * set rowreq_ctx->undo->eocSoftwareUpgradeProceed from rowreq_ctx->data.eocSoftwareUpgradeProceed
+ */
+ rowreq_ctx->undo->eocSoftwareUpgradeProceed = rowreq_ctx->data.eocSoftwareUpgradeProceed;
+
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeProceed_undo_setup */
+
+/**
+ * Set the new value.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context. You should know how to
+ * manipulate the value from this object.
+ * @param eocSoftwareUpgradeProceed_val
+ * A long containing the new value.
+ */
+int
+eocSoftwareUpgradeProceed_set( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long eocSoftwareUpgradeProceed_val )
+{
+ int ret;
+ pthread_t tid;
+ pthread_attr_t attr;
+
+ int current_index;
+ char mac_str[LIBSPID_MAC_STR_LEN];
+
+ char filename[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ int filename_len;
+
+ const char delimiter = LIBSPID_UPDATE_INFO_DELIMITER[0];
+ char *elt_buffer[LIBSPID_ELT_MAX_NB];
+
+ char action_string[2];
+ char action_last_string[2];
+ char result_string[2];
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:",
+ "eocSoftwareUpgradeProceed_set", "called\n"));
+
+ /** should never get a NULL pointer */
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /* initialize mutexes */
+ pthread_mutex_init (&mutex_reload, NULL);
+ pthread_mutex_init (&mutex_dl, NULL);
+
+ /* initialize thread attributes */
+ pthread_attr_init (&attr);
+ pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
+
+/*
+ * TODO:245:o: |-> Implement eocSoftwareUpgradeProceed reverse mapping.
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them here.
+ */
+
+ /* save value of current master or slave index -
+ to be preserved in case container is reloaded */
+ current_index = rowreq_ctx->tbl_idx.eocSoftwareUpgradeCNUIndex;
+
+ if (0 == current_index)
+ {
+ switch (eocSoftwareUpgradeProceed_val)
+ {
+ case EOCSOFTWAREUPGRADEPROCEED_DOWNLOAD:
+ /* download action not supported for master */
+ snmp_log (LOG_ERR, "eocSoftwareUpgradeProceed_set: Download"
+ " action not supported for master!\n");
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+
+ case EOCSOFTWAREUPGRADEPROCEED_UPLOAD:
+ /* upload action not supported for master */
+ snmp_log (LOG_ERR, "eocSoftwareUpgradeProceed_set: Upload action"
+ " not supported for master!\n");
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+ case EOCSOFTWAREUPGRADEPROCEED_UPGRADE:
+ if (INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADING
+ != eocSoftwareUpgradeResult[current_index])
+ {
+ rowreq_ctx->data.eocSoftwareUpgradeProceed =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEPROCEED_UPGRADE;
+ /* call thread for upgrading master image */
+ pthread_create (&tid, &attr,
+ eocSoftwareUpgrade_thread, rowreq_ctx);
+
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "eocSoftwareUpgradeProceed_set: Another "
+ "upgrade action already running for master!\n");
+ return SNMP_ERR_RESOURCEUNAVAILABLE;
+ }
+ break;
+
+ default:
+ snmp_log (LOG_ERR, "couldn't reverse map value %ld for"
+ " eocSoftwareUpgradeProceed\n",
+ eocSoftwareUpgradeProceed_val);
+ return SNMP_ERR_GENERR;
+ }
+ }
+ else
+ {
+ switch (eocSoftwareUpgradeProceed_val)
+ {
+ case EOCSOFTWAREUPGRADEPROCEED_DOWNLOAD:
+ /* download action not supported for slave */
+ snmp_log (LOG_ERR, "eocSoftwareUpgradeProceed_set: Download "
+ "action not supported for slave!\n");
+ return SNMP_ERR_INCONSISTENTVALUE;
+
+
+ case EOCSOFTWAREUPGRADEPROCEED_UPLOAD:
+ if (INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADING
+ != eocSoftwareUpgradeResult[current_index])
+ {
+ rowreq_ctx->data.eocSoftwareUpgradeProceed =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEPROCEED_UPLOAD;
+
+ /* convert MAC address from bin to string */
+ ret = libspid_mac_bin_to_str (
+ rowreq_ctx->data.eocSoftwareUpgradeMACAddress,
+ mac_str);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ eocSoftwareUpgradeResult[current_index] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADFAILED;
+ /* set upgrade result in row request context
+ (to be updated before container reload) */
+ rowreq_ctx->data.eocSoftwareUpgradeResult =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADFAILED;
+ return SNMP_ERR_COMMITFAILED;
+ }
+ DEBUGMSGTL (("verbose:eocSoftwareUpgradeTable:",
+ "eocSoftwareUpgradeProceed_set",
+ "slave MAC address: |%s|\n", mac_str));
+
+ /* copy current slave filename - to be preserved
+ in case container is reloaded */
+ filename_len =
+ rowreq_ctx->data.eocSoftwareUpgradeFileName_len;
+ strncpy (filename,
+ rowreq_ctx->data.eocSoftwareUpgradeFileName,
+ filename_len);
+ filename[filename_len] = '\0';
+
+ DEBUGMSGTL (("verbose:eocSoftwareUpgradeTable:",
+ "eocSoftwareUpgradeProceed_set",
+ "slave filename: |%s|\n", filename));
+
+ /* denote upload action field for current slave in update.info
+ file and set status field to running */
+ elt_buffer[0] = filename;
+ sprintf (action_string, "%d", LIBSPID_UPDATE_ACTION_UPLOAD);
+ sprintf (result_string, "%d", LIBSPID_UPDATE_RUNNING);
+ sprintf (action_last_string, "%d",
+ LIBSPID_UPDATE_ACTION_UPLOAD);
+ elt_buffer[1] = action_string;
+ elt_buffer[2] = result_string;
+ elt_buffer[3] = action_last_string;
+
+ /* write MAC, filename and actions to update.info file */
+ ret = libspid_config_write_line (LIBSPID_UPDATE_INFO_PATH,
+ delimiter, mac_str,
+ 4, elt_buffer);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_line error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+
+ /* save update file path to flash */
+ ret = libspid_system_save_file (LIBSPID_UPDATE_INFO_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_save_file error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ else
+ {
+ /* set internal upgrade status to running in result array
+ * (to be preserved in case container is reloaded) */
+ eocSoftwareUpgradeResult[current_index] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADING;
+
+ /*
+ * set internal upgrade status to running in row request
+ * context
+ * (to be updated before container reload)
+ */
+ rowreq_ctx->data.eocSoftwareUpgradeResult =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADING;
+ }
+ }
+ else
+ {
+ snmp_log (LOG_ERR, "eocSoftwareUpgradeProceed_set: Another"
+ " upload action already running for selected"
+ " slave!\n");
+ return SNMP_ERR_RESOURCEUNAVAILABLE;
+ }
+ break;
+
+ case EOCSOFTWAREUPGRADEPROCEED_UPGRADE:
+ if (INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADING
+ != eocSoftwareUpgradeResult[current_index])
+ {
+ rowreq_ctx->data.eocSoftwareUpgradeProceed =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEPROCEED_UPGRADE;
+
+ /* convert MAC address from bin to string */
+ ret = libspid_mac_bin_to_str (
+ rowreq_ctx->data.eocSoftwareUpgradeMACAddress,
+ mac_str);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ eocSoftwareUpgradeResult[current_index] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADEFAILED;
+ /* set internal upgrade result in row request context
+ (to be updated before container reload) */
+ rowreq_ctx->data.eocSoftwareUpgradeResult =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADEFAILED;
+ return SNMP_ERR_COMMITFAILED;
+ }
+ DEBUGMSGTL (("verbose:eocSoftwareUpgradeTable:",
+ "eocSoftwareUpgradeProceed_set",
+ "slave MAC address: |%s|\n", mac_str));
+
+ /* copy current slave filename - to be preserved in
+ case container is reloaded */
+ filename_len =
+ rowreq_ctx->data.eocSoftwareUpgradeFileName_len;
+ strncpy (filename,
+ rowreq_ctx->data.eocSoftwareUpgradeFileName,
+ filename_len);
+ filename[filename_len] = '\0';
+
+ DEBUGMSGTL (("verbose:eocSoftwareUpgradeTable:",
+ "eocSoftwareUpgradeProceed_set",
+ "slave filename: |%s|\n", filename));
+
+ /* denote update action field for current slave
+ in update.info file and set status field to running */
+ elt_buffer[0] = filename;
+ sprintf (action_string, "%d", LIBSPID_UPDATE_ACTION_UPDATE);
+ sprintf (result_string, "%d", LIBSPID_UPDATE_RUNNING);
+ sprintf (action_last_string, "%d",
+ LIBSPID_UPDATE_ACTION_UPDATE);
+ elt_buffer[1] = action_string;
+ elt_buffer[2] = result_string;
+ elt_buffer[3] = action_last_string;
+
+ /* write MAC, filename and actions to update.info file */
+ ret = libspid_config_write_line (LIBSPID_UPDATE_INFO_PATH,
+ delimiter, mac_str,
+ 4, elt_buffer);
+
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_config_write_line error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+
+ /* save update file to flash */
+ ret = libspid_system_save_file (LIBSPID_UPDATE_INFO_PATH);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_system_save_file error\n");
+ return SNMP_ERR_COMMITFAILED;
+ }
+ else
+ {
+ /* set internal upgrade status to running in result array
+ (to be preserved in case container is reloaded) */
+ eocSoftwareUpgradeResult[current_index] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADING;
+
+ /* set internal upgrade status to running in row request
+ context (to be updated before container reload) */
+ rowreq_ctx->data.eocSoftwareUpgradeResult =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADING;
+ }
+ }
+ else
+ {
+
+ snmp_log (LOG_ERR, "eocSoftwareUpgradeProceed_set: Another"
+ " upgrade action already running for selected"
+ " slave!\n");
+ return SNMP_ERR_RESOURCEUNAVAILABLE;
+ }
+ break;
+
+ default:
+ snmp_log (LOG_ERR, "couldn't reverse map value %ld for "
+ "eocSoftwareUpgradeProceed\n",
+ eocSoftwareUpgradeProceed_val);
+ return SNMP_ERR_GENERR;
+ }
+ }
+
+ /* destroy thread attributes */
+ pthread_attr_destroy (&attr);
+
+ /* destroy mutexes */
+ pthread_mutex_destroy (&mutex_reload);
+ pthread_mutex_destroy (&mutex_dl);
+
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeProceed_set */
+
+/**
+ * undo the previous set.
+ *
+ * @param rowreq_ctx
+ * Pointer to the users context.
+ */
+int
+eocSoftwareUpgradeProceed_undo( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeProceed_undo","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ /*
+ * TODO:456:o: |-> Clean up eocSoftwareUpgradeProceed undo.
+ */
+ /*
+ * copy eocSoftwareUpgradeProceed data
+ * set rowreq_ctx->data.eocSoftwareUpgradeProceed from rowreq_ctx->undo->eocSoftwareUpgradeProceed
+ */
+ rowreq_ctx->data.eocSoftwareUpgradeProceed = rowreq_ctx->undo->eocSoftwareUpgradeProceed;
+
+
+ return MFD_SUCCESS;
+} /* eocSoftwareUpgradeProceed_undo */
+
+/* download master image from server image path */
+/* server image path must be given relative to FTP directory on server */
+int
+eocSoftwareUpgrade_server_download (char *server_path)
+{
+ char *dir = MASTER_IMG_DIR;
+ char ip[LIBSPID_IP_MAX_LEN];
+ char login[SW_UPGRADE_LOGIN_MAX_LEN];
+ char password[SW_UPGRADE_PASSWORD_MAX_LEN];
+ char port[LIBSPID_LINE_MAX_LEN];
+ char cmd[1024];
+
+ FILE *pipe;
+ char line[1024];
+
+ char *img_file;
+ char *img_dir;
+
+ int ret;
+
+ /* check input parameter */
+ if (server_path == NULL)
+ {
+ snmp_log (LOG_ERR, "error in master image transfer parameters!\n");
+ return -1;
+ }
+
+ /* get image file server IP */
+ if ((libspid_config_read_item (LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_IP,
+ ip,
+ LIBSPID_IP_MAX_LEN)) != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR, "error getting master image file server IP!\n");
+ return -1;
+ }
+
+ /* get server login and password */
+ if ((libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_LOGIN,
+ login,
+ SW_UPGRADE_LOGIN_MAX_LEN)) != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR, "error getting master image file server login!\n");
+ return -1;
+
+ }
+
+ if ((libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PASSWORD,
+ password,
+ SW_UPGRADE_PASSWORD_MAX_LEN)) != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR,
+ "error getting master image file server password!\n");
+ return -1;
+
+ }
+
+ /* get server port */
+ if ((libspid_config_read_item (
+ LIBSPID_SYSTEM_CONF_PATH,
+ LIBSPID_SYSTEM_CONF_LABEL_UPGRADE_SERVER_PORT,
+ port,
+ LIBSPID_LINE_MAX_LEN)) != LIBSPID_SUCCESS)
+ {
+ snmp_log (LOG_ERR, "error getting master image file server port!\n");
+ return -1;
+ }
+
+ pthread_mutex_lock (&mutex_dl);
+ dl_active = 1;
+
+ /* remove leading slashes from server path, if existing
+ (only relative paths are supported) */
+ while (*server_path == '/')
+ {
+ server_path++;
+ }
+
+ /* parse name of the image file from server path */
+ img_file = basename (strdup (server_path));
+
+ /* create string containing shell command for
+ downloading image from server */
+ sprintf (cmd, "cd %s; ftpget -u %s -p %s %s -P %s %s %s 2>&1",
+ dir, login, password, ip, port, img_file, server_path);
+ syslog (LOG_DEBUG, "initiating download of master image file: %s",
+ " from server path: %s\n", img_file, server_path);
+
+ /* create one way pipeline for image download */
+ if (NULL == (pipe = popen (cmd, "r")))
+ {
+ syslog (LOG_DEBUG, "failed download of master image file:",
+ " %s: error opening pipe\n", img_file);
+ ret = -1;
+ }
+ else
+ {
+ /* process download results */
+ /* if result is empty, check for EOF */
+ if (NULL == fgets (line, sizeof (line), pipe))
+ {
+ if (!(feof (pipe)))
+ {
+ syslog (LOG_DEBUG, "failed download of master image file:",
+ " %s: error reading pipe\n", img_file);
+ ret = -1;
+ }
+ else
+ {
+ syslog (LOG_DEBUG, "successful download of master image ",
+ "file: %s\n", img_file);
+ ret = 0;
+ }
+ }
+ else
+ {
+ /* if result is not empty, there was an error */
+ syslog (LOG_DEBUG, "failed download of master image",
+ " file: %s\n", img_file);
+ syslog (LOG_DEBUG, "error message: %s", line);
+ ret = -1;
+ }
+ }
+
+ pclose (pipe);
+ dl_active = 0;
+ pthread_mutex_unlock (&mutex_dl);
+
+ return ret;
+}
+
+/* thread for upgrading master image */
+void *
+eocSoftwareUpgrade_thread (void *arg)
+{
+
+ eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx;
+ int ret;
+
+ netsnmp_container *container;
+
+ char mac_str[LIBSPID_MAC_STR_LEN];
+ char server_path[DEFAULT_SNMP_STRING_MAX_LENGTH];
+ int server_path_len;
+ char cmd[1024];
+
+ int current_index = 0;
+ char image_path[1024];
+
+ char *img_file;
+
+ /* extract row request context from thread argument */
+ rowreq_ctx = (eocSoftwareUpgradeTable_rowreq_ctx *) arg;
+
+ /* set internal upgrade status to running in result array
+ *(to be preserved in case container is reloaded)
+ */
+ eocSoftwareUpgradeResult[current_index] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADING;
+
+
+ /* set internal upgrade status to running in row request context
+ *(to be updated before container reload)
+ */
+ rowreq_ctx->data.eocSoftwareUpgradeResult =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADING;
+
+ /* convert MAC address from bin to string */
+ ret = libspid_mac_bin_to_str (
+ rowreq_ctx->data.eocSoftwareUpgradeMACAddress, mac_str);
+ if (LIBSPID_SUCCESS != ret)
+ {
+ snmp_log (LOG_ERR, "libspid_mac_bin_to_str error\n");
+ eocSoftwareUpgradeResult[current_index] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADEFAILED;
+ /* set internal upgrade result in row request context
+ *(to be updated before container reload)
+ */
+ rowreq_ctx->data.eocSoftwareUpgradeResult =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADEFAILED;
+ pthread_exit (NULL);
+ }
+
+
+ /* copy current server path from rowreq_ctx -
+ *to be preserved in case container is reloaded
+ */
+ server_path_len = rowreq_ctx->data.eocSoftwareUpgradeFileName_len;
+ strncpy (server_path,
+ rowreq_ctx->data.eocSoftwareUpgradeFileName,
+ server_path_len);
+ server_path[server_path_len] = '\0';
+
+
+ syslog (LOG_DEBUG, "attempting master upgrade...\n");
+ /* download current master file from given server path */
+ ret = eocSoftwareUpgrade_server_download (server_path);
+
+ if (ret == -1)
+ {
+ eocSoftwareUpgradeResult[current_index] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADEFAILED;
+ /* set internal upgrade result in row request
+ *context (to be updated before container reload)
+ */
+ rowreq_ctx->data.eocSoftwareUpgradeResult =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADEFAILED;
+ pthread_exit (NULL);
+ }
+
+
+ /* parse name of the image file from server path */
+ img_file = basename (strdup (server_path));
+
+ /* prepare full master image path for upgrade function */
+ sprintf (image_path, "%s/%s", MASTER_IMG_DIR, img_file);
+
+ /* call image upgrade function for master */
+ syslog (LOG_DEBUG, "initiating master upgrade with image",
+ " filename: %s\n", img_file);
+ ret = libspid_eoc_upgrade_local_image (image_path);
+
+
+ /* check if table has been released - if so, reload container */
+ if (table_released)
+ {
+ pthread_mutex_lock (&mutex_reload);
+
+ container = netsnmp_container_find (
+ "eocSoftwareUpgradeTable:table_container");
+ if (NULL == container)
+ {
+ snmp_log (LOG_ERR, "error finding eocSoftwareUpgradeTable"
+ " container\n");
+ }
+ else
+ {
+ eocSoftwareUpgradeTable_container_load (container);
+ }
+ pthread_mutex_unlock (&mutex_reload);
+
+ }
+
+ if (LIBSPID_SUCCESS == ret)
+ {
+ syslog (LOG_DEBUG, "successful master upgrade!\n");
+ eocSoftwareUpgradeResult[current_index] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADESUCCESS;
+ /* set internal upgrade result in row request
+ *context (to be updated before container reload)
+ */
+ rowreq_ctx->data.eocSoftwareUpgradeResult =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADESUCCESS;
+ }
+ else
+ {
+ syslog (LOG_DEBUG, "failed master upgrade!\n");
+ eocSoftwareUpgradeResult[current_index] =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADEFAILED;
+ /* set internal upgrade result in row request
+ *context (to be updated before container reload)
+ */
+ rowreq_ctx->data.eocSoftwareUpgradeResult =
+ INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADEFAILED;
+ }
+
+ /* remove master image file after upgrade */
+ sprintf (cmd, "rm -f %s/%s", MASTER_IMG_DIR, img_file);
+ ret = system (cmd);
+
+ if (ret == -1)
+ {
+ snmp_log (LOG_ERR, "error in removing master image file: %s\n",
+ img_file);
+ }
+
+ pthread_exit (NULL);
+}
+
+/** @} */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_set.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_set.h
new file mode 100644
index 0000000000..17a242dfda
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_data_set.h
@@ -0,0 +1,75 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 12077 $ of $
+ *
+ * $Id:$
+ */
+#ifndef EOCSOFTWAREUPGRADETABLE_DATA_SET_H
+#define EOCSOFTWAREUPGRADETABLE_DATA_SET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *********************************************************************
+ * SET function declarations
+ */
+
+/* *********************************************************************
+ * SET Table declarations
+ */
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocSoftwareUpgradeTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeTable is subid 5 of eocSoftwareUpgradeGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5, length: 11
+*/
+
+
+int eocSoftwareUpgradeTable_undo_setup( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx);
+int eocSoftwareUpgradeTable_undo_cleanup( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx);
+int eocSoftwareUpgradeTable_undo( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx);
+int eocSoftwareUpgradeTable_commit( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx);
+int eocSoftwareUpgradeTable_undo_commit( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx);
+
+
+int eocSoftwareUpgradeMACAddress_check_value( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, char *eocSoftwareUpgradeMACAddress_val_ptr, size_t eocSoftwareUpgradeMACAddress_val_ptr_len);
+int eocSoftwareUpgradeMACAddress_undo_setup( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx );
+int eocSoftwareUpgradeMACAddress_set( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, char *eocSoftwareUpgradeMACAddress_val_ptr, size_t eocSoftwareUpgradeMACAddress_val_ptr_len );
+int eocSoftwareUpgradeMACAddress_undo( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx );
+
+int eocSoftwareUpgradeDevType_check_value( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long eocSoftwareUpgradeDevType_val);
+int eocSoftwareUpgradeDevType_undo_setup( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx );
+int eocSoftwareUpgradeDevType_set( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long eocSoftwareUpgradeDevType_val );
+int eocSoftwareUpgradeDevType_undo( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx );
+
+int eocSoftwareUpgradeFileName_check_value( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, char *eocSoftwareUpgradeFileName_val_ptr, size_t eocSoftwareUpgradeFileName_val_ptr_len);
+int eocSoftwareUpgradeFileName_undo_setup( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx );
+int eocSoftwareUpgradeFileName_set( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, char *eocSoftwareUpgradeFileName_val_ptr, size_t eocSoftwareUpgradeFileName_val_ptr_len );
+int eocSoftwareUpgradeFileName_undo( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx );
+
+int eocSoftwareUpgradeProceed_check_value( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long eocSoftwareUpgradeProceed_val);
+int eocSoftwareUpgradeProceed_undo_setup( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx );
+int eocSoftwareUpgradeProceed_set( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long eocSoftwareUpgradeProceed_val );
+int eocSoftwareUpgradeProceed_undo( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx );
+
+int eocSoftwareUpgradeResult_check_value( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long eocSoftwareUpgradeResult_val);
+int eocSoftwareUpgradeResult_undo_setup( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx );
+int eocSoftwareUpgradeResult_set( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx, u_long eocSoftwareUpgradeResult_val );
+int eocSoftwareUpgradeResult_undo( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx );
+
+
+int eocSoftwareUpgradeTable_check_dependencies(eocSoftwareUpgradeTable_rowreq_ctx *ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCSOFTWAREUPGRADETABLE_DATA_SET_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_enums.h b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_enums.h
new file mode 100644
index 0000000000..46c82f5480
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_enums.h
@@ -0,0 +1,137 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+ *
+ * $Id:$
+ */
+#ifndef EOCSOFTWAREUPGRADETABLE_ENUMS_H
+#define EOCSOFTWAREUPGRADETABLE_ENUMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /*
+ * NOTES on enums
+ * ==============
+ *
+ * Value Mapping
+ * -------------
+ * If the values for your data type don't exactly match the
+ * possible values defined by the mib, you should map them
+ * below. For example, a boolean flag (1/0) is usually represented
+ * as a TruthValue in a MIB, which maps to the values (1/2).
+ *
+ */
+/*************************************************************************
+ *************************************************************************
+ *
+ * enum definitions for table eocSoftwareUpgradeTable
+ *
+ *************************************************************************
+ *************************************************************************/
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocSoftwareUpgradeDevType (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCSOFTWAREUPGRADEDEVTYPE_ENUMS
+#define EOCSOFTWAREUPGRADEDEVTYPE_ENUMS
+
+#define EOCSOFTWAREUPGRADEDEVTYPE_CBAT 1
+#define EOCSOFTWAREUPGRADEDEVTYPE_CBAT_CARD 2
+#define EOCSOFTWAREUPGRADEDEVTYPE_CNU 3
+#define EOCSOFTWAREUPGRADEDEVTYPE_OTHER 4
+#define EOCSOFTWAREUPGRADEDEVTYPE_RESERVED1 5
+#define EOCSOFTWAREUPGRADEDEVTYPE_RESERVED2 6
+#define EOCSOFTWAREUPGRADEDEVTYPE_RESERVED3 7
+
+#endif /* EOCSOFTWAREUPGRADEDEVTYPE_ENUMS */
+
+ /*
+ * TODO:140:o: Define your interal representation of eocSoftwareUpgradeDevType enums.
+ * (used for value mapping; see notes at top of file)
+ */
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_CBAT 1
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_CBAT_CARD 2
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_CNU 3
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_OTHER 4
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_RESERVED1 5
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_RESERVED2 6
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEDEVTYPE_RESERVED3 7
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocSoftwareUpgradeProceed (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCSOFTWAREUPGRADEPROCEED_ENUMS
+#define EOCSOFTWAREUPGRADEPROCEED_ENUMS
+
+#define EOCSOFTWAREUPGRADEPROCEED_DOWNLOAD 1
+#define EOCSOFTWAREUPGRADEPROCEED_UPGRADE 2
+#define EOCSOFTWAREUPGRADEPROCEED_UPLOAD 3
+
+#endif /* EOCSOFTWAREUPGRADEPROCEED_ENUMS */
+
+ /*
+ * TODO:140:o: Define your interal representation of eocSoftwareUpgradeProceed enums.
+ * (used for value mapping; see notes at top of file)
+ */
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEPROCEED_DOWNLOAD 1
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEPROCEED_UPGRADE 2
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADEPROCEED_UPLOAD 3
+
+
+/*************************************************************
+ * constants for enums for the MIB node
+ * eocSoftwareUpgradeResult (INTEGER / ASN_INTEGER)
+ *
+ * since a Textual Convention may be referenced more than once in a
+ * MIB, protect againt redefinitions of the enum values.
+ */
+#ifndef EOCSOFTWAREUPGRADERESULT_ENUMS
+#define EOCSOFTWAREUPGRADERESULT_ENUMS
+
+#define EOCSOFTWAREUPGRADERESULT_NONE 0
+#define EOCSOFTWAREUPGRADERESULT_DOWNLOADING 1
+#define EOCSOFTWAREUPGRADERESULT_DOWNLOADFAILED 2
+#define EOCSOFTWAREUPGRADERESULT_DOWNLOADSUCCESS 3
+#define EOCSOFTWAREUPGRADERESULT_UPGRADING 4
+#define EOCSOFTWAREUPGRADERESULT_UPGRADEFAILED 5
+#define EOCSOFTWAREUPGRADERESULT_UPGRADESUCCESS 6
+#define EOCSOFTWAREUPGRADERESULT_UPLOADING 7
+#define EOCSOFTWAREUPGRADERESULT_UPLOADFAILED 8
+#define EOCSOFTWAREUPGRADERESULT_UPLOADSUCCESS 9
+
+#endif /* EOCSOFTWAREUPGRADERESULT_ENUMS */
+
+ /*
+ * TODO:140:o: Define your interal representation of eocSoftwareUpgradeResult enums.
+ * (used for value mapping; see notes at top of file)
+ */
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_NONE 0
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_DOWNLOADING 1
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_DOWNLOADFAILED 2
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_DOWNLOADSUCCESS 3
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADING 4
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADEFAILED 5
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPGRADESUCCESS 6
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADING 7
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADFAILED 8
+#define INTERNAL_EOCSOFTWAREUPGRADETABLE_EOCSOFTWAREUPGRADERESULT_UPLOADSUCCESS 9
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EOCSOFTWAREUPGRADETABLE_ENUMS_H */
diff --git a/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_interface.c b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_interface.c
new file mode 100644
index 0000000000..652d064e9f
--- /dev/null
+++ b/cleopatre/application/spidnetsnmp/agent/mibgroup/mstar-eoc-mib/eocSoftwareUpgradeGroup/eocSoftwareUpgradeTable/eocSoftwareUpgradeTable_interface.c
@@ -0,0 +1,1655 @@
+/*
+ * Note: this file originally auto-generated by mib2c using
+ * version : 15899 $ of $
+ *
+ * $Id:$
+ */
+/*
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ * *** ***
+ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+ * *** ***
+ * *** ***
+ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+ * *** ***
+ * *** ***
+ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+ * *** ***
+ * *** ***
+ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+ * *** ***
+ * *** ***
+ * *********************************************************************
+ * *********************************************************************
+ * *********************************************************************
+ */
+
+/* standard Net-SNMP includes */
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+
+/* include our parent header */
+#include "eocSoftwareUpgradeTable.h"
+
+
+#include <net-snmp/agent/table_container.h>
+#include <net-snmp/library/container.h>
+
+#include "eocSoftwareUpgradeTable_interface.h"
+
+#include <ctype.h>
+
+/**********************************************************************
+ **********************************************************************
+ ***
+ *** Table eocSoftwareUpgradeTable
+ ***
+ **********************************************************************
+ **********************************************************************/
+/*
+ * NSCRTV-EPONEOC-MOD-EOC-MIB::eocSoftwareUpgradeTable is subid 5 of eocSoftwareUpgradeGroup.
+ * Its status is Current.
+ * OID: .1.3.6.1.4.1.17409.2.4.4.5, length: 11
+*/
+typedef struct eocSoftwareUpgradeTable_interface_ctx_s {
+
+ netsnmp_container *container;
+ netsnmp_cache *cache;
+
+ eocSoftwareUpgradeTable_registration * user_ctx;
+
+ netsnmp_table_registration_info tbl_info;
+
+ netsnmp_baby_steps_access_methods access_multiplexer;
+
+ u_int table_dirty;
+
+} eocSoftwareUpgradeTable_interface_ctx;
+
+static eocSoftwareUpgradeTable_interface_ctx eocSoftwareUpgradeTable_if_ctx;
+
+static void _eocSoftwareUpgradeTable_container_init(
+ eocSoftwareUpgradeTable_interface_ctx *if_ctx);
+static void _eocSoftwareUpgradeTable_container_shutdown(
+ eocSoftwareUpgradeTable_interface_ctx *if_ctx);
+
+
+netsnmp_container *
+eocSoftwareUpgradeTable_container_get( void )
+{
+ return eocSoftwareUpgradeTable_if_ctx.container;
+}
+
+eocSoftwareUpgradeTable_registration *
+eocSoftwareUpgradeTable_registration_get( void )
+{
+ return eocSoftwareUpgradeTable_if_ctx.user_ctx;
+}
+
+eocSoftwareUpgradeTable_registration *
+eocSoftwareUpgradeTable_registration_set( eocSoftwareUpgradeTable_registration * newreg )
+{
+ eocSoftwareUpgradeTable_registration * old = eocSoftwareUpgradeTable_if_ctx.user_ctx;
+ eocSoftwareUpgradeTable_if_ctx.user_ctx = newreg;
+ return old;
+}
+
+int
+eocSoftwareUpgradeTable_container_size( void )
+{
+ return CONTAINER_SIZE(eocSoftwareUpgradeTable_if_ctx.container);
+}
+
+u_int
+eocSoftwareUpgradeTable_dirty_get( void )
+{
+ return eocSoftwareUpgradeTable_if_ctx.table_dirty;
+}
+
+void
+eocSoftwareUpgradeTable_dirty_set( u_int status )
+{
+ DEBUGMSGTL(("eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_dirty_set",
+ "called. was %d, now %d\n",
+ eocSoftwareUpgradeTable_if_ctx.table_dirty, status));
+ eocSoftwareUpgradeTable_if_ctx.table_dirty = status;
+}
+
+/*
+ * mfd multiplexer modes
+ */
+static Netsnmp_Node_Handler _mfd_eocSoftwareUpgradeTable_pre_request;
+static Netsnmp_Node_Handler _mfd_eocSoftwareUpgradeTable_post_request;
+static Netsnmp_Node_Handler _mfd_eocSoftwareUpgradeTable_object_lookup;
+static Netsnmp_Node_Handler _mfd_eocSoftwareUpgradeTable_get_values;
+static Netsnmp_Node_Handler _mfd_eocSoftwareUpgradeTable_check_objects;
+static Netsnmp_Node_Handler _mfd_eocSoftwareUpgradeTable_undo_setup;
+static Netsnmp_Node_Handler _mfd_eocSoftwareUpgradeTable_set_values;
+static Netsnmp_Node_Handler _mfd_eocSoftwareUpgradeTable_undo_cleanup;
+static Netsnmp_Node_Handler _mfd_eocSoftwareUpgradeTable_undo_values;
+static Netsnmp_Node_Handler _mfd_eocSoftwareUpgradeTable_commit;
+static Netsnmp_Node_Handler _mfd_eocSoftwareUpgradeTable_undo_commit;
+static Netsnmp_Node_Handler _mfd_eocSoftwareUpgradeTable_irreversible_commit;
+
+NETSNMP_STATIC_INLINE int _eocSoftwareUpgradeTable_undo_column( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column );
+
+eocSoftwareUpgradeTable_data *eocSoftwareUpgradeTable_allocate_data(void);
+
+/**
+ * @internal
+ * Initialize the table eocSoftwareUpgradeTable
+ * (Define its contents and how it's structured)
+ */
+void
+_eocSoftwareUpgradeTable_initialize_interface(eocSoftwareUpgradeTable_registration * reg_ptr, u_long flags)
+{
+ netsnmp_baby_steps_access_methods *access_multiplexer =
+ &eocSoftwareUpgradeTable_if_ctx.access_multiplexer;
+ netsnmp_table_registration_info *tbl_info = &eocSoftwareUpgradeTable_if_ctx.tbl_info;
+ netsnmp_handler_registration *reginfo;
+ netsnmp_mib_handler *handler;
+ int mfd_modes = 0;
+
+ DEBUGMSGTL(("internal:eocSoftwareUpgradeTable:_eocSoftwareUpgradeTable_initialize_interface","called\n"));
+
+
+ /*************************************************
+ *
+ * save interface context for eocSoftwareUpgradeTable
+ */
+ /*
+ * Setting up the table's definition
+ */
+ netsnmp_table_helper_add_indexes(tbl_info,
+ ASN_INTEGER, /** index: eocSoftwareUpgradeCBATCardIndex */
+ ASN_INTEGER, /** index: eocSoftwareUpgradeCNUIndex */
+ 0);
+
+ /* Define the minimum and maximum accessible columns. This
+ optimizes retrival. */
+ tbl_info->min_column = EOCSOFTWAREUPGRADETABLE_MIN_COL;
+ tbl_info->max_column = EOCSOFTWAREUPGRADETABLE_MAX_COL;
+
+ /*
+ * save users context
+ */
+ eocSoftwareUpgradeTable_if_ctx.user_ctx = reg_ptr;
+
+ /*
+ * call data access initialization code
+ */
+ eocSoftwareUpgradeTable_init_data(reg_ptr);
+
+ /*
+ * set up the container
+ */
+ _eocSoftwareUpgradeTable_container_init(&eocSoftwareUpgradeTable_if_ctx);
+ if (NULL == eocSoftwareUpgradeTable_if_ctx.container) {
+ snmp_log(LOG_ERR,"could not initialize container for eocSoftwareUpgradeTable\n");
+ return;
+ }
+
+ /*
+ * access_multiplexer: REQUIRED wrapper for get request handling
+ */
+ access_multiplexer->object_lookup = _mfd_eocSoftwareUpgradeTable_object_lookup;
+ access_multiplexer->get_values = _mfd_eocSoftwareUpgradeTable_get_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->pre_request = _mfd_eocSoftwareUpgradeTable_pre_request;
+ access_multiplexer->post_request = _mfd_eocSoftwareUpgradeTable_post_request;
+
+
+ /*
+ * REQUIRED wrappers for set request handling
+ */
+ access_multiplexer->object_syntax_checks = _mfd_eocSoftwareUpgradeTable_check_objects;
+ access_multiplexer->undo_setup = _mfd_eocSoftwareUpgradeTable_undo_setup;
+ access_multiplexer->undo_cleanup = _mfd_eocSoftwareUpgradeTable_undo_cleanup;
+ access_multiplexer->set_values = _mfd_eocSoftwareUpgradeTable_set_values;
+ access_multiplexer->undo_sets = _mfd_eocSoftwareUpgradeTable_undo_values;
+
+ /*
+ * no wrappers yet
+ */
+ access_multiplexer->commit = _mfd_eocSoftwareUpgradeTable_commit;
+ access_multiplexer->undo_commit = _mfd_eocSoftwareUpgradeTable_undo_commit;
+ access_multiplexer->irreversible_commit = _mfd_eocSoftwareUpgradeTable_irreversible_commit;
+
+ /*************************************************
+ *
+ * Create a registration, save our reg data, register table.
+ */
+ DEBUGMSGTL(("eocSoftwareUpgradeTable:init_eocSoftwareUpgradeTable",
+ "Registering eocSoftwareUpgradeTable as a mibs-for-dummies table.\n"));
+ handler = netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+ reginfo = netsnmp_handler_registration_create("eocSoftwareUpgradeTable", handler,
+ eocSoftwareUpgradeTable_oid,
+ eocSoftwareUpgradeTable_oid_size,
+ HANDLER_CAN_BABY_STEP |
+ HANDLER_CAN_RWRITE
+ );
+ if(NULL == reginfo) {
+ snmp_log(LOG_ERR,"error registering table eocSoftwareUpgradeTable\n");
+ return;
+ }
+ reginfo->my_reg_void = &eocSoftwareUpgradeTable_if_ctx;
+
+ /*************************************************
+ *
+ * set up baby steps handler, create it and inject it
+ */
+ if( access_multiplexer->object_lookup )
+ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+ if( access_multiplexer->set_values )
+ mfd_modes |= BABY_STEP_SET_VALUES;
+ if( access_multiplexer->irreversible_commit )
+ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+ if( access_multiplexer->object_syntax_checks )
+ mfd_modes |= BABY_STEP_CHECK_OBJECT;
+
+ if( access_multiplexer->pre_request )
+ mfd_modes |= BABY_STEP_PRE_REQUEST;
+ if( access_multiplexer->post_request )
+ mfd_modes |= BABY_STEP_POST_REQUEST;
+
+ if( access_multiplexer->undo_setup )
+ mfd_modes |= BABY_STEP_UNDO_SETUP;
+ if( access_multiplexer->undo_cleanup )
+ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+ if( access_multiplexer->undo_sets )
+ mfd_modes |= BABY_STEP_UNDO_SETS;
+
+ if( access_multiplexer->row_creation )
+ mfd_modes |= BABY_STEP_ROW_CREATE;
+ if( access_multiplexer->consistency_checks )
+ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+ if( access_multiplexer->commit )
+ mfd_modes |= BABY_STEP_COMMIT;
+ if( access_multiplexer->undo_commit )
+ mfd_modes |= BABY_STEP_UNDO_COMMIT;
+
+ handler = netsnmp_baby_steps_handler_get(mfd_modes);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+ */
+ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+ netsnmp_inject_handler(reginfo, handler);
+
+ /*************************************************
+ *
+ * inject container_table helper
+ */
+ handler =
+ netsnmp_container_table_handler_get(tbl_info,
+ eocSoftwareUpgradeTable_if_ctx.container,
+ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+ netsnmp_inject_handler( reginfo, handler );
+
+ /*************************************************
+ *
+ * inject cache helper
+ */
+ if(NULL != eocSoftwareUpgradeTable_if_ctx.cache) {
+ handler = netsnmp_cache_handler_get(eocSoftwareUpgradeTable_if_ctx.cache);
+ netsnmp_inject_handler( reginfo, handler );
+ }
+
+ /*
+ * register table
+ */
+ netsnmp_register_table(reginfo, tbl_info);
+
+} /* _eocSoftwareUpgradeTable_initialize_interface */
+
+/**
+ * @internal
+ * Shutdown the table eocSoftwareUpgradeTable
+ */
+void
+_eocSoftwareUpgradeTable_shutdown_interface(eocSoftwareUpgradeTable_registration * reg_ptr)
+{
+ /*
+ * shutdown the container
+ */
+ _eocSoftwareUpgradeTable_container_shutdown(&eocSoftwareUpgradeTable_if_ctx);
+}
+
+void
+eocSoftwareUpgradeTable_valid_columns_set(netsnmp_column_info *vc)
+{
+ eocSoftwareUpgradeTable_if_ctx.tbl_info.valid_columns = vc;
+} /* eocSoftwareUpgradeTable_valid_columns_set */
+
+/**
+ * @internal
+ * convert the index component stored in the context to an oid
+ */
+int
+eocSoftwareUpgradeTable_index_to_oid(netsnmp_index *oid_idx,
+ eocSoftwareUpgradeTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocSoftwareUpgradeCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ netsnmp_variable_list var_eocSoftwareUpgradeCBATCardIndex;
+ /*
+ * eocSoftwareUpgradeCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ netsnmp_variable_list var_eocSoftwareUpgradeCNUIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocSoftwareUpgradeCBATCardIndex, 0x00, sizeof(var_eocSoftwareUpgradeCBATCardIndex) );
+ var_eocSoftwareUpgradeCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocSoftwareUpgradeCNUIndex, 0x00, sizeof(var_eocSoftwareUpgradeCNUIndex) );
+ var_eocSoftwareUpgradeCNUIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocSoftwareUpgradeCBATCardIndex.next_variable = &var_eocSoftwareUpgradeCNUIndex; var_eocSoftwareUpgradeCNUIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_index_to_oid","called\n"));
+
+ /* eocSoftwareUpgradeCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ snmp_set_var_value(&var_eocSoftwareUpgradeCBATCardIndex, (u_char*)&mib_idx->eocSoftwareUpgradeCBATCardIndex,
+ sizeof(mib_idx->eocSoftwareUpgradeCBATCardIndex));
+
+ /* eocSoftwareUpgradeCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ snmp_set_var_value(&var_eocSoftwareUpgradeCNUIndex, (u_char*)&mib_idx->eocSoftwareUpgradeCNUIndex,
+ sizeof(mib_idx->eocSoftwareUpgradeCNUIndex));
+
+
+ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+ NULL, 0, &var_eocSoftwareUpgradeCBATCardIndex);
+ if(err)
+ snmp_log(LOG_ERR,"error %d converting index to oid\n", err);
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocSoftwareUpgradeCBATCardIndex );
+
+ return err;
+} /* eocSoftwareUpgradeTable_index_to_oid */
+
+/**
+ * extract eocSoftwareUpgradeTable indexes from a netsnmp_index
+ *
+ * @retval SNMP_ERR_NOERROR : no error
+ * @retval SNMP_ERR_GENERR : error
+ */
+int
+eocSoftwareUpgradeTable_index_from_oid(netsnmp_index *oid_idx,
+ eocSoftwareUpgradeTable_mib_index *mib_idx)
+{
+ int err = SNMP_ERR_NOERROR;
+
+ /*
+ * temp storage for parsing indexes
+ */
+ /*
+ * eocSoftwareUpgradeCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ netsnmp_variable_list var_eocSoftwareUpgradeCBATCardIndex;
+ /*
+ * eocSoftwareUpgradeCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
+ */
+ netsnmp_variable_list var_eocSoftwareUpgradeCNUIndex;
+
+ /*
+ * set up varbinds
+ */
+ memset( &var_eocSoftwareUpgradeCBATCardIndex, 0x00, sizeof(var_eocSoftwareUpgradeCBATCardIndex) );
+ var_eocSoftwareUpgradeCBATCardIndex.type = ASN_INTEGER;
+ memset( &var_eocSoftwareUpgradeCNUIndex, 0x00, sizeof(var_eocSoftwareUpgradeCNUIndex) );
+ var_eocSoftwareUpgradeCNUIndex.type = ASN_INTEGER;
+
+ /*
+ * chain temp index varbinds together
+ */
+ var_eocSoftwareUpgradeCBATCardIndex.next_variable = &var_eocSoftwareUpgradeCNUIndex; var_eocSoftwareUpgradeCNUIndex.next_variable = NULL;
+
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_index_from_oid","called\n"));
+
+ /*
+ * parse the oid into the individual index components
+ */
+ err = parse_oid_indexes( oid_idx->oids, oid_idx->len,
+ &var_eocSoftwareUpgradeCBATCardIndex );
+ if (err == SNMP_ERR_NOERROR) {
+ /*
+ * copy out values
+ */
+ mib_idx->eocSoftwareUpgradeCBATCardIndex = *((long *)var_eocSoftwareUpgradeCBATCardIndex.val.string);
+ mib_idx->eocSoftwareUpgradeCNUIndex = *((long *)var_eocSoftwareUpgradeCNUIndex.val.string);
+
+
+ }
+
+ /*
+ * parsing may have allocated memory. free it.
+ */
+ snmp_reset_var_buffers( &var_eocSoftwareUpgradeCBATCardIndex );
+
+ return err;
+} /* eocSoftwareUpgradeTable_index_from_oid */
+
+
+/*
+ * eocSoftwareUpgradeTable_allocate_data
+ *
+ * Purpose: create new eocSoftwareUpgradeTable_data.
+ */
+eocSoftwareUpgradeTable_data *
+eocSoftwareUpgradeTable_allocate_data(void)
+{
+ eocSoftwareUpgradeTable_data *rtn = SNMP_MALLOC_TYPEDEF(eocSoftwareUpgradeTable_data);
+
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_allocate_data","called\n"));
+
+ if(NULL == rtn) {
+ snmp_log(LOG_ERR, "unable to malloc memory for new "
+ "eocSoftwareUpgradeTable_data.\n");
+ }
+
+ return rtn;
+} /* eocSoftwareUpgradeTable_allocate_data */
+
+/*
+ * eocSoftwareUpgradeTable_release_data
+ *
+ * Purpose: release eocSoftwareUpgradeTable data.
+ */
+void
+eocSoftwareUpgradeTable_release_data(eocSoftwareUpgradeTable_data *data)
+{
+ DEBUGMSGTL(("verbose:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_release_data","called\n"));
+
+ free(data);
+} /* eocSoftwareUpgradeTable_release_data */
+
+/* *********************************************************************
+ * @internal
+ * allocate resources for a eocSoftwareUpgradeTable_rowreq_ctx
+ */
+eocSoftwareUpgradeTable_rowreq_ctx *
+eocSoftwareUpgradeTable_allocate_rowreq_ctx(void *user_init_ctx)
+{
+ eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx =
+ SNMP_MALLOC_TYPEDEF(eocSoftwareUpgradeTable_rowreq_ctx);
+
+ DEBUGMSGTL(("internal:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_allocate_rowreq_ctx","called\n"));
+
+ if(NULL == rowreq_ctx) {
+ snmp_log(LOG_ERR,"Couldn't allocate memory for a "
+ "eocSoftwareUpgradeTable_rowreq_ctx.\n");
+ return NULL;
+ }
+
+ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+
+ rowreq_ctx->eocSoftwareUpgradeTable_data_list = NULL;
+
+ /*
+ * if we allocated data, call init routine
+ */
+ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+ if(SNMPERR_SUCCESS !=
+ eocSoftwareUpgradeTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+ eocSoftwareUpgradeTable_release_rowreq_ctx(rowreq_ctx);
+ rowreq_ctx = NULL;
+ }
+ }
+
+ return rowreq_ctx;
+} /* eocSoftwareUpgradeTable_allocate_rowreq_ctx */
+
+/*
+ * @internal
+ * release resources for a eocSoftwareUpgradeTable_rowreq_ctx
+ */
+void
+eocSoftwareUpgradeTable_release_rowreq_ctx(eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx)
+{
+ DEBUGMSGTL(("internal:eocSoftwareUpgradeTable:eocSoftwareUpgradeTable_release_rowreq_ctx","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ eocSoftwareUpgradeTable_rowreq_ctx_cleanup(rowreq_ctx);
+
+ if(rowreq_ctx->undo)
+ eocSoftwareUpgradeTable_release_data(rowreq_ctx->undo);
+
+ /*
+ * free index oid pointer
+ */
+ if(rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+ free(rowreq_ctx->oid_idx.oids);
+
+ SNMP_FREE(rowreq_ctx);
+} /* eocSoftwareUpgradeTable_release_rowreq_ctx */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocSoftwareUpgradeTable_pre_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc;
+
+ DEBUGMSGTL(("internal:eocSoftwareUpgradeTable:_mfd_eocSoftwareUpgradeTable_pre_request",
+ "called\n"));
+
+ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocSoftwareUpgradeTable",
+ "skipping additional pre_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ rc = eocSoftwareUpgradeTable_pre_request(eocSoftwareUpgradeTable_if_ctx.user_ctx);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocSoftwareUpgradeTable","error %d from "
+ "eocSoftwareUpgradeTable_pre_request\n", rc));
+ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocSoftwareUpgradeTable_pre_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocSoftwareUpgradeTable_post_request(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ int rc, packet_rc;
+
+ DEBUGMSGTL(("internal:eocSoftwareUpgradeTable:_mfd_eocSoftwareUpgradeTable_post_request",
+ "called\n"));
+
+ /*
+ * release row context, if deleted
+ */
+ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+ eocSoftwareUpgradeTable_release_rowreq_ctx(rowreq_ctx);
+
+ /*
+ * wait for last call before calling user
+ */
+ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+ DEBUGMSGTL(("internal:eocSoftwareUpgradeTable",
+ "waiting for last post_request\n"));
+ return SNMP_ERR_NOERROR;
+ }
+
+ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+ if ((MFD_SUCCESS != packet_rc) && eocSoftwareUpgradeTable_dirty_get()) {
+ /*
+ * we shouldn't get here. the undo steps should also clear
+ * the dirty flags.
+ */
+ snmp_log(LOG_WARNING, "eocSoftwareUpgradeTable dirty flag set in post_request "
+ "but status != SUCCESS.\n");
+ }
+
+ rc = eocSoftwareUpgradeTable_post_request(eocSoftwareUpgradeTable_if_ctx.user_ctx,packet_rc);
+ if (MFD_SUCCESS != rc) {
+ /*
+ * nothing we can do about it but log it
+ */
+ DEBUGMSGTL(("eocSoftwareUpgradeTable","error %d from "
+ "eocSoftwareUpgradeTable_post_request\n", rc));
+ }
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocSoftwareUpgradeTable_post_request */
+
+/**
+ * @internal
+ * wrapper
+ */
+static int
+_mfd_eocSoftwareUpgradeTable_object_lookup(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ int rc = SNMP_ERR_NOERROR;
+ eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+
+ DEBUGMSGTL(("internal:eocSoftwareUpgradeTable:_mfd_eocSoftwareUpgradeTable_object_lookup","called\n"));
+
+ /*
+ * get our context from mfd
+ * eocSoftwareUpgradeTable_interface_ctx *if_ctx =
+ * (eocSoftwareUpgradeTable_interface_ctx *)reginfo->my_reg_void;
+ */
+
+ if(NULL == rowreq_ctx) {
+ rc = SNMP_ERR_NOCREATION;
+ }
+
+ if (MFD_SUCCESS != rc)
+ netsnmp_request_set_error_all(requests, rc);
+ else
+ eocSoftwareUpgradeTable_row_prep(rowreq_ctx);
+
+ return SNMP_VALIDATE_ERR(rc);
+} /* _mfd_eocSoftwareUpgradeTable_object_lookup */
+
+/***********************************************************************
+ *
+ * GET processing
+ *
+ ***********************************************************************/
+/*
+ * @internal
+ * Retrieve the value for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocSoftwareUpgradeTable_get_column( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocSoftwareUpgradeTable:_mfd_eocSoftwareUpgradeTable_get_column",
+ "called for %d\n", column));
+
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+
+ /* (INDEX) eocSoftwareUpgradeCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCSOFTWAREUPGRADECBATCARDINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocSoftwareUpgradeCBATCardIndex;
+ break;
+
+ /* (INDEX) eocSoftwareUpgradeCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCSOFTWAREUPGRADECNUINDEX:
+ var->type = ASN_INTEGER;
+ var->val_len = sizeof(long);
+ (*var->val.integer) = rowreq_ctx->tbl_idx.eocSoftwareUpgradeCNUIndex;
+ break;
+
+ /* eocSoftwareUpgradeMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H */
+ case COLUMN_EOCSOFTWAREUPGRADEMACADDRESS:
+ var->type = ASN_OCTET_STR;
+rc = eocSoftwareUpgradeMACAddress_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocSoftwareUpgradeDevType(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCSOFTWAREUPGRADEDEVTYPE:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocSoftwareUpgradeDevType_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocSoftwareUpgradeFileName(5)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/h */
+ case COLUMN_EOCSOFTWAREUPGRADEFILENAME:
+ var->type = ASN_OCTET_STR;
+rc = eocSoftwareUpgradeFileName_get(rowreq_ctx, (char **)&var->val.string, &var->val_len );
+ break;
+
+ /* eocSoftwareUpgradeProceed(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCSOFTWAREUPGRADEPROCEED:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocSoftwareUpgradeProceed_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ /* eocSoftwareUpgradeResult(7)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/D/h */
+ case COLUMN_EOCSOFTWAREUPGRADERESULT:
+ var->val_len = sizeof(u_long);
+ var->type = ASN_INTEGER;
+rc = eocSoftwareUpgradeResult_get(rowreq_ctx, (u_long *)var->val.string );
+ break;
+
+ default:
+ if (EOCSOFTWAREUPGRADETABLE_MIN_COL <= column && column <= EOCSOFTWAREUPGRADETABLE_MAX_COL) {
+ DEBUGMSGTL(("internal:eocSoftwareUpgradeTable:_mfd_eocSoftwareUpgradeTable_get_column",
+ "assume column %d is reserved\n", column));
+ rc = MFD_SKIP;
+ } else {
+ snmp_log(LOG_ERR,
+ "unknown column %d in _eocSoftwareUpgradeTable_get_column\n", column);
+ }
+ break;
+ }
+
+ return rc;
+} /* _eocSoftwareUpgradeTable_get_column */
+
+int
+_mfd_eocSoftwareUpgradeTable_get_values(netsnmp_mib_handler *handler,
+ netsnmp_handler_registration *reginfo,
+ netsnmp_agent_request_info *agtreq_info,
+ netsnmp_request_info *requests)
+{
+ eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx =
+ netsnmp_container_table_row_extract(requests);
+ netsnmp_table_request_info * tri;
+ u_char * old_string;
+ void (*dataFreeHook)(void *);
+ int rc;
+
+ DEBUGMSGTL(("internal:eocSoftwareUpgradeTable:_mfd_eocSoftwareUpgradeTable_get_values","called\n"));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ for(;requests; requests = requests->next) {
+ /*
+ * save old pointer, so we can free it if replaced
+ */
+ old_string = requests->requestvb->val.string;
+ dataFreeHook = requests->requestvb->dataFreeHook;
+ if(NULL == requests->requestvb->val.string) {
+ requests->requestvb->val.string = requests->requestvb->buf;
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+ else if(requests->requestvb->buf == requests->requestvb->val.string) {
+ if(requests->requestvb->val_len != sizeof(requests->requestvb->buf))
+ requests->requestvb->val_len = sizeof(requests->requestvb->buf);
+ }
+
+ /*
+ * get column data
+ */
+ tri = netsnmp_extract_table_info(requests);
+ if(NULL == tri)
+ continue;
+
+ rc = _eocSoftwareUpgradeTable_get_column(rowreq_ctx, requests->requestvb, tri->colnum);
+ if(rc) {
+ if(MFD_SKIP == rc) {
+ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+ rc = SNMP_ERR_NOERROR;
+ }
+ }
+ else if (NULL == requests->requestvb->val.string) {
+ snmp_log(LOG_ERR,"NULL varbind data pointer!\n");
+ rc = SNMP_ERR_GENERR;
+ }
+ if(rc)
+ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+
+ /*
+ * if the buffer wasn't used previously for the old data (i.e. it
+ * was allcoated memory) and the get routine replaced the pointer,
+ * we need to free the previous pointer.
+ */
+ if(old_string && (old_string != requests->requestvb->buf) &&
+ (requests->requestvb->val.string != old_string)) {
+ if(dataFreeHook)
+ (*dataFreeHook)(old_string);
+ else
+ free(old_string);
+ }
+ } /* for results */
+
+ return SNMP_ERR_NOERROR;
+} /* _mfd_eocSoftwareUpgradeTable_get_values */
+
+
+/***********************************************************************
+ *
+ * SET processing
+ *
+ ***********************************************************************/
+
+/*----------------------------------------------------------------------
+ *
+ * SET: Syntax checks
+ *
+ *---------------------------------------------------------------------*/
+/*
+ * @internal
+ * Check the syntax for a particular column
+ */
+NETSNMP_STATIC_INLINE int
+_eocSoftwareUpgradeTable_check_column( eocSoftwareUpgradeTable_rowreq_ctx *rowreq_ctx,
+ netsnmp_variable_list *var, int column )
+{
+ int rc = SNMPERR_SUCCESS;
+
+ DEBUGMSGTL(("internal:eocSoftwareUpgradeTable:_eocSoftwareUpgradeTable_check_column",
+ "called for %d\n", column));
+
+ netsnmp_assert(NULL != rowreq_ctx);
+
+ switch(column) {
+ /* (INDEX) eocSoftwareUpgradeCBATCardIndex(1)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCSOFTWAREUPGRADECBATCARDINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+ /* (INDEX) eocSoftwareUpgradeCNUIndex(2)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h */
+ case COLUMN_EOCSOFTWAREUPGRADECNUINDEX:
+ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+ break;
+
+ /* eocSoftwareUpgradeMACAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H */
+ case COLUMN_EOCSOFTWAREUPGRADEMACADDRESS:
+ rc = netsnmp_check_vb_type_and_max_size( var, ASN_OCTET_STR,
+ sizeof( rowreq_ctx->data.eocSoftwareUpgradeMACAddress ) );
+ /* check defined range(s). */
+ if( (SNMPERR_SUCCESS == rc)
+ && (var->val_len != 6)
+ ) {
+ rc = SNMP_ERR_WRONGLENGTH;
+ }
+ if(SNMPERR_SUCCESS != rc) {
+ DEBUGMSGTL(("eocSoftwareUpgradeTable:_eocSoftwareUpgradeTable_check_column:eocSoftwareUpgradeMACAddress",
+ "varbind validation failed (eg bad type or size)\n"));
+ }
+ else {
+ rc = eocSoftwareUpgradeMACAddress_check_value( rowreq_ctx, (char *)var->val.string, var->val_len );
+ if((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc) &&
+ (MFD_NOT_VALID_NOW != rc)) {
+ snmp_log(LOG_ERR, "bad rc %d from eocSoftwareUpgradeMACAddress_check_value\n", rc);
+ rc = SNMP_ERR_GENERR;
+ }
+ }
+ break;
+
+ /* eocSoftwareUpgradeDevType(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h */
+ case COLUMN_EOCSOFTWAREUPGRADEDEVTYPE:
+ rc = netsnmp_check_vb_type_and_size( var, ASN_INTEGER,
+ sizeof( rowreq_ctx->data.eocSoftwareUpgradeDevType ) );
+ /* check that the value is one of defined enums */
+ if( (SNMPERR_SUCCESS == rc)
+ && ( *var->val.integer != EOCSOFTWAREUPGRADEDEVTYPE_CBAT )
+ && ( *var->val.integer != EOCSOFTWAREUPGRADEDEVTYPE_CBAT_CARD )
+ && ( *var->val.integer != EOCSOFTWAREUPGRADEDEVTYPE_CN